ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4YWRmNwotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMwIEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIE5lc3QgTGFicywgSW5jLgorIyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgICBUaGlzIGRvY3VtZW50IGlzIHRoZSBwcm9wZXJ0eSBvZiBOZXN0LiBJdCBpcyBjb25zaWRlcmVkCisjICAgIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCisjCisjICAgIFRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSByZXByb2R1Y2VkIG9yIHRyYW5zbWl0dGVkIGluIGFueSBmb3JtLAorIyAgICBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZgorIyAgICBOZXN0LgorIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIG1ha2VmaWxlIGZvciBmcmVldHlwZSwgYSBmcmVlLCBoaWdoLXF1YWxpdHksCisjICAgICAgYW5kIHBvcnRhYmxlIGZvbnQgZW5naW5lLgorIworCitCdWlsZENvbmZpZ1NwZWNpYWxpemVkCTo9IE5vCitCdWlsZFByb2R1Y3RTcGVjaWFsaXplZAk6PSBZZXMKKworaW5jbHVkZSBwcmUubWFrCisKK1BhY2thZ2VOYW1lCQk6PSBmcmVldHlwZQorCitQYWNrYWdlRXh0ZW5zaW9uCTo9IHRhci5iejIKK1BhY2thZ2VTZXBhcmF0b3IJOj0gLQorCitQYWNrYWdlUGF0Y2hBcmdzCTo9IC1wMQorCitQYWNrYWdlQXJjaGl2ZQkJOj0gJChQYWNrYWdlTmFtZSkuJChQYWNrYWdlRXh0ZW5zaW9uKQorUGFja2FnZVNvdXJjZURpcgk6PSAkKFBhY2thZ2VOYW1lKSQoUGFja2FnZVNlcGFyYXRvcikkKFBhY2thZ2VWZXJzaW9uKQorCitQYWNrYWdlQnVpbGRNYWtlZmlsZQk9ICQoY2FsbCBHZW5lcmF0ZUJ1aWxkUGF0aHMsTWFrZWZpbGUpCisKK0NsZWFuUGF0aHMJCSs9ICQoUGFja2FnZUxpY2Vuc2VGaWxlKQorCithbGw6ICQoUGFja2FnZURlZmF1bHRHb2FsKQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGxpY2Vuc2UgY29udGVudHMuCisKKyQoUGFja2FnZVNvdXJjZURpcikvZG9jcy9MSUNFTlNFLlRYVDogc291cmNlCisKKyQoUGFja2FnZUxpY2Vuc2VGaWxlKTogJChQYWNrYWdlU291cmNlRGlyKS9kb2NzL0xJQ0VOU0UuVFhUCisJJChjb3B5LXJlc3VsdCkKKworIyBFeHRyYWN0IHRoZSBzb3VyY2UgZnJvbSB0aGUgYXJjaGl2ZSBhbmQgYXBwbHkgcGF0Y2hlcywgaWYgYW55LgorCiskKFBhY2thZ2VTb3VyY2VEaXIpOiAkKFBhY2thZ2VBcmNoaXZlKSAkKFBhY2thZ2VQYXRjaFBhdGhzKQorCSQoZXhwYW5kLWFuZC1wYXRjaC1wYWNrYWdlKQorCisjIFByZXBhcmUgdGhlIHNvdXJjZXMuCisKKy5QSE9OWTogc291cmNlCitzb3VyY2U6IHwgJChQYWNrYWdlU291cmNlRGlyKQorCisjIFBhdGNoIHRoZSBzb3VyY2VzLCBpZiBuZWNlc3NhcnkuCisKKy5QSE9OWTogcGF0Y2gKK3BhdGNoOiBzb3VyY2UKKworIyBHZW5lcmF0ZSB0aGUgcGFja2FnZSBidWlsZCBtYWtlZmlsZS4KKyMKKyMgRnJlZXR5cGUgaXMgTk9UIGEgZ29vZCBub24tY29sb2NhdGVkIHNvdXJjZSBhbmQgYnVpbGQgZGlyZWN0b3J5CisjIGNpdGl6ZW4uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSAtLXNyY2RpciwgZnJlZXR5cGUgd2lsbCBzbWFzaCB0aGlzCisjIG1ha2UgZmlsZSBhbmQgbGl0dGVyIHRoaXMgZGlyZWN0b3J5IHdpdGggYSBudW1iZXIgb2YgYnVpbGQgb2JqZWN0cworIyB3ZSBkbyBub3Qgd2FudCB0aGVyZS4KKworJChQYWNrYWdlQnVpbGRNYWtlZmlsZSk6IHwgJChQYWNrYWdlU291cmNlRGlyKSAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSljZCAkKEJ1aWxkRGlyZWN0b3J5KSAmJiBcCisJJChDVVJESVIpLyQoUGFja2FnZVNvdXJjZURpcikvY29uZmlndXJlIFwKKwlDQz0iJChDQykiIENYWD0iJChDWFgpIiBBUj0kKEFSKSBSQU5MSUI9JChSQU5MSUIpIFNUUklQPSQoU1RSSVApIFwKKwlJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorCUNQUEZMQUdTPSIkKENQUE9QVEZMQUdTKSIgXAorCS0tc3JjZGlyPSQoQ1VSRElSKS8kKFBhY2thZ2VTb3VyY2VEaXIpIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwktLXByZWZpeD0vdXNyIFwKKwktLXN5c2NvbmZkaXI9L2V0YyBcCisJLS1sb2NhbHN0YXRlZGlyPS92YXIgXAorCS0td2l0aG91dC1oYXJmYnV6eiBcCisJLS13aXRob3V0LXBuZyBcCisJLS13aXRob3V0LXpsaWIgXAorCS0td2l0aG91dC1iemlwMiBcCisJLS1kaXNhYmxlLXN0YXRpYworCisjIENvbmZpZ3VyZSB0aGUgc291cmNlIGZvciBidWlsZGluZy4KKworLlBIT05ZOiBjb25maWd1cmUKK2NvbmZpZ3VyZTogc291cmNlICQoUGFja2FnZUJ1aWxkTWFrZWZpbGUpCisKKyMgQnVpbGQgdGhlIHNvdXJjZS4KKyMKKyMgV2UgaGF2ZSB0byB1bnNldCBNQUtFRkxBR1Mgc2luY2UgdGhleSBjb25mdXNlIHRoZSBwYWNrYWdlIGJ1aWxkIG90aGVyd2lzZS4KKworLlBIT05ZOiBidWlsZAorYnVpbGQ6IGNvbmZpZ3VyZQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgYWxsCisKKyMgU3RhZ2UgdGhlIGJ1aWxkIHRvIGEgdGVtcG9yYXJ5IGluc3RhbGxhdGlvbiBhcmVhLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorIworIyBXZSBleHBsaWN0bHkgcmVtb3ZlICdsaWJmcmVldHlwZS5sYScgYmVjYXVzZSBzb21lIHBhY2thZ2VzIHRoYXQgZGVwZW5kCisjIG9uIGxpYmZyZWV0eXBlIHVzZSBsaWJ0b29sLiBJZiBsaWJ0b29sIGZpbmRzIGEgJyoubGEnIGZpbGUgZm9yIGEKKyMgbGlicmFyeSwgaXQgdXNlcyB0aGUgdmFsdWUgb2YgJ2xpYmRpcj08ZGlyPicgaXQgZmluZHMuIEluIG91ciBjYXNlLAorIyBzaW5jZSAnLS1wcmVmaXg9L3VzcicgdGhpcyB2YWx1ZSBpcyAnL3Vzci9saWInLiBJdCB0aGVuIHJlc29sdmVzCisjICctbGZyZWV0eXBlJyB0byAnL3Vzci9saWIvbGliZnJlZXR5cGUuc28nLiBJbiBhIGNyb3NzLWNvbXBpbGF0aW9uCisjIGVudmlyb25tZW50LCB0aGlzIGlzIGxpa2VseSB0byBiZSBuZWl0aGVyIHRoZSByaWdodCBhcmNoaXRlY3R1cmUgbm9yCisjIHRoZSByaWdodCB2ZXJzaW9uIHRvIGxpbmsgYWdhaW5zdC4gSW4gc2hvcnQsIHdlIGxvc2UuCisjCisjIFdlIGNvdWxkIGFsc28gaGFuZGxlIHRoaXMgYnkgcmVtb3ZpbmcgREVTVERJUiBhbmQgc2V0dGluZyB0aGUgcHJlZml4CisjIHRvICQoUmVzdWx0RGlyZWN0b3J5KTsgaG93ZXZlciwgdGhhdCByZXN1bHRzIGluIGxpYnRvb2wgaGFyZC1jb2RpbmcKKyMgJChSZXN1bHREaXJlY3RvcnkpIGFzIHRoZSBSUEFUSCBpbiB0aGUgbGlua2VkIGV4ZWN1dGFibGVzIHdoaWNoIGlzCisjIE5PVCB3aGF0IHdlIHdhbnQgZWl0aGVyLiBXZSBsb3NlIGFnYWluLgorIworIyBCeSByZW1vdmluZyB0aGUgJyoubGEnIGZpbGUsIHdlIHdpbiBieSBlbnN1cmluZyBuZWl0aGVyIGEgbWlzZGlyZWN0ZWQKKyMgbGluayBub3IgYW4gUlBBVEguCisKKy5QSE9OWTogc3RhZ2UKK3N0YWdlOiBidWlsZCB8ICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgREVTVERJUj0kKFJlc3VsdERpcmVjdG9yeSkgaW5zdGFsbAorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCx1c3IvbGliL2xpYmZyZWV0eXBlLmxhKQorCitjbGVhbjoKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFBhY2thZ2VTb3VyY2VEaXIpCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChCdWlsZERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFJlc3VsdERpcmVjdG9yeSkKKworaW5jbHVkZSBwb3N0Lm1hawpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L0NNYWtlTGlzdHMudHh0IGIvZnJlZXR5cGUtMi42L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzFmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyNTMgQEAKKyMgQ01ha2VMaXN0cy50eHQKKyMKKyMgQ29weXJpZ2h0IDIwMTMtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFdyaXR0ZW4gYnkgSm9obiBDYXJ5IDxjYXJ5QHR4Y29ycC5jb20+CisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisjCisjCisjIFNheQorIworIyAgIGNtYWtlIENNYWtlTGlzdHMudHh0CisjCisjIHRvIGNyZWF0ZSBhIE1ha2VmaWxlIHRoYXQgYnVpbGRzIGEgc3RhdGljIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisjCisjIEZvciBhIGR5bmFtaWMgbGlicmFyeSwgdXNlCisjCisjICAgY21ha2UgQ01ha2VMaXN0cy50eHQgLURCVUlMRF9TSEFSRURfTElCUzpCT09MPXRydWUKKyMKKyMgRm9yIGEgZnJhbWV3b3JrIG9uIE9TIFgsIHVzZQorIworIyAgIGNtYWtlIENNYWtlTGlzdHMudHh0IC1EQlVJTERfRlJBTUVXT1JLOkJPT0w9dHJ1ZSAtRyBYY29kZQorIworIyBpbnN0ZWFkLgorIworIyBGb3IgYW4gaU9TIHN0YXRpYyBsaWJyYXJ5LCB1c2UKKyMKKyMgICBjbWFrZSBDTWFrZUxpc3RzLnR4dCAtRElPU19QTEFURk9STT1PUyAtRyBYY29kZQorIworIyBvcgorIworIyAgIGNtYWtlIENNYWtlTGlzdHMudHh0IC1ESU9TX1BMQVRGT1JNPVNJTVVMQVRPUiAtRyBYY29kZQorIworIyBQbGVhc2UgcmVmZXIgdG8gdGhlIGNtYWtlIG1hbnVhbCBmb3IgZnVydGhlciBvcHRpb25zLCBpbiBwYXJ0aWN1bGFyLCBob3cKKyMgdG8gbW9kaWZ5IGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIHBhcmFtZXRlcnMuCisjCisjIFNvbWUgbm90ZXMuCisjCisjIC4gYGNtYWtlJyB3aWxsIG92ZXJ3cml0ZSBGcmVlVHlwZSdzIG9yaWdpbmFsICh0b3AtbGV2ZWwpIGBNYWtlZmlsZScgZmlsZS4KKyMKKyMgLiBZb3UgY2FuIHVzZSBgY21ha2UnIGRpcmVjdGx5IG9uIGEgZnJlc2hseSBjbG9uZWQgRnJlZVR5cGUgZ2l0CisjICAgcmVwb3NpdG9yeS4KKyMKKyMgLiBgQ01ha2VMaXN0cy50eHQnICBpcyBwcm92aWRlZCBhcy1pcyBzaW5jZSBpdCBpcyBub3QgdXNlZCBieSB0aGUKKyMgICBkZXZlbG9wZXIgdGVhbS4KKworCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi42KQorCisjIENNQUtFX1RPT0xDSEFJTl9GSUxFIG11c3QgYmUgc2V0IGJlZm9yZSBgcHJvamVjdCcgaXMgY2FsbGVkLCB3aGljaAorIyBjb25maWd1cmVzIHRoZSBiYXNlIGJ1aWxkIGVudmlyb25tZW50IGFuZCByZWZlcmVuY2VzIHRoZSB0b29sY2hhaW4gZmlsZQoraWYgKEFQUExFKQorICBpZiAoREVGSU5FRCBJT1NfUExBVEZPUk0pCisgICAgaWYgKE5PVCAiJHtJT1NfUExBVEZPUk19IiBTVFJFUVVBTCAiT1MiCisgICAgICAgIEFORCBOT1QgIiR7SU9TX1BMQVRGT1JNfSIgU1RSRVFVQUwgIlNJTVVMQVRPUiIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAgICJJT1NfUExBVEZPUk0gbXVzdCBiZSBzZXQgdG8gZWl0aGVyIE9TIG9yIFNJTVVMQVRPUiIpCisgICAgZW5kaWYgKCkKKyAgICBpZiAoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIFNUUkVRVUFMICJYY29kZSIpCisgICAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HCisgICAgICAgICJZb3Ugc2hvdWxkIHVzZSBYY29kZSBnZW5lcmF0b3Igd2l0aCBJT1NfUExBVEZPUk0gZW5hYmxlZCB0byBnZXQgVW5pdmVyc2FsIGJ1aWxkcy4iKQorICAgIGVuZGlmICgpCisgICAgaWYgKEJVSUxEX1NIQVJFRF9MSUJTKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgICAiQlVJTERfU0hBUkVEX0xJQlMgY2FuIG5vdCBiZSBvbiB3aXRoIElPU19QTEFURk9STSBlbmFibGVkIikKKyAgICBlbmRpZiAoKQorICAgIGlmIChCVUlMRF9GUkFNRVdPUkspCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAgICJCVUlMRF9GUkFNRVdPUksgY2FuIG5vdCBiZSBvbiB3aXRoIElPU19QTEFURk9STSBlbmFibGVkIikKKyAgICBlbmRpZiAoKQorCisgICAgIyBpT1Mgb25seSB1c2VzIHN0YXRpYyBsaWJyYXJpZXMKKyAgICBzZXQoQlVJTERfU0hBUkVEX0xJQlMgT0ZGKQorCisgICAgc2V0KENNQUtFX1RPT0xDSEFJTl9GSUxFCisgICAgICAke1BST0pFQ1RfU09VUkNFX0RJUn0vYnVpbGRzL2NtYWtlL2lPUy5jbWFrZSkKKyAgZW5kaWYgKCkKK2Vsc2UgKCkKKyAgaWYgKERFRklORUQgSU9TX1BMQVRGT1JNKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIklPU19QTEFURk9STSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKQorICBlbmRpZiAoKQorZW5kaWYgKCkKKworcHJvamVjdChmcmVldHlwZSkKKworaWYgKEJVSUxEX0ZSQU1FV09SSykKKyAgaWYgKE5PVCAiJHtDTUFLRV9HRU5FUkFUT1J9IiBTVFJFUVVBTCAiWGNvZGUiKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJZb3Ugc2hvdWxkIHVzZSBYY29kZSBnZW5lcmF0b3Igd2l0aCBCVUlMRF9GUkFNRVdPUksgZW5hYmxlZCIpCisgIGVuZGlmICgpCisgIHNldChDTUFLRV9PU1hfQVJDSElURUNUVVJFUyAiJChBUkNIU19TVEFOREFSRF8zMl82NF9CSVQpIikKKyAgc2V0KEJVSUxEX1NIQVJFRF9MSUJTIE9OKQorZW5kaWYgKCkKKworc2V0KFZFUlNJT05fTUFKT1IgIjIiKQorc2V0KFZFUlNJT05fTUlOT1IgIjYiKQorc2V0KFZFUlNJT05fUEFUQ0ggIjAiKQorc2V0KFBST0pFQ1RfVkVSU0lPTiAke1ZFUlNJT05fTUFKT1J9LiR7VkVSU0lPTl9NSU5PUn0uJHtWRVJTSU9OX1BBVENIfSkKKworIyBDb21waWxlciBkZWZpbml0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIGxpYnJhcnkKK2FkZF9kZWZpbml0aW9ucygtREZUMl9CVUlMRF9MSUJSQVJZKQorCisjIFNwZWNpZnkgbGlicmFyeSBpbmNsdWRlIGRpcmVjdG9yaWVzCitpbmNsdWRlX2RpcmVjdG9yaWVzKCIke1BST0pFQ1RfU09VUkNFX0RJUn0vaW5jbHVkZSIpCisKKyMgQ3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKK21lc3NhZ2UoU1RBVFVTICJDcmVhdGluZyBkaXJlY3RvcnksICR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlMi4iKQorZmlsZShNQUtFX0RJUkVDVE9SWSAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZTIpCisKKyMgRm9yIHRoZSBhdXRvLWdlbmVyYXRlZCBmdGNvbmZpZy5oIGZpbGUKK2luY2x1ZGVfZGlyZWN0b3JpZXMoQkVGT1JFICIke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZTIiKQorbWVzc2FnZShTVEFUVVMgIkNyZWF0aW5nICR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlMi9mdGNvbmZpZy5oLiIpCitleGVjdXRlX3Byb2Nlc3MoCisgIENPTU1BTkQgc2VkIC1lICJzL0ZUX0NPTkZJR19PUFRJT05TX0gvPGZ0b3B0aW9uLmg+LyIgLWUgInMvRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSC88ZnRzdGRsaWIuaD4vIiAtZSAicz8vdW5kZWYgPyN1bmRlZiA/IgorICBJTlBVVF9GSUxFICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9idWlsZHMvdW5peC9mdGNvbmZpZy5pbgorICBPVVRQVVRfRklMRSAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZTIvZnRjb25maWcuaAorKQorCitmaWxlKEdMT0IgUFVCTElDX0hFQURFUlMgImluY2x1ZGUvKi5oIikKK2ZpbGUoR0xPQiBQVUJMSUNfQ09ORklHX0hFQURFUlMgImluY2x1ZGUvY29uZmlnLyouaCIpCitmaWxlKEdMT0IgUFJJVkFURV9IRUFERVJTICJpbmNsdWRlL2ludGVybmFsLyouaCIpCisKK3NldChCQVNFX1NSQ1MKKyAgc3JjL2F1dG9maXQvYXV0b2ZpdC5jCisgIHNyYy9iYXNlL2Z0YWR2YW5jLmMKKyAgc3JjL2Jhc2UvZnRiYm94LmMKKyAgc3JjL2Jhc2UvZnRiZGYuYworICBzcmMvYmFzZS9mdGJpdG1hcC5jCisgIHNyYy9iYXNlL2Z0Y2FsYy5jCisgIHNyYy9iYXNlL2Z0Y2lkLmMKKyAgc3JjL2Jhc2UvZnRkYmdtZW0uYworICBzcmMvYmFzZS9mdGRlYnVnLmMKKyAgc3JjL2Jhc2UvZnRmbnRmbXQuYworICBzcmMvYmFzZS9mdGZzdHlwZS5jCisgIHNyYy9iYXNlL2Z0Z2FzcC5jCisgIHNyYy9iYXNlL2Z0Z2xvYWRyLmMKKyAgc3JjL2Jhc2UvZnRnbHlwaC5jCisgIHNyYy9iYXNlL2Z0Z3h2YWwuYworICBzcmMvYmFzZS9mdGluaXQuYworICBzcmMvYmFzZS9mdGxjZGZpbC5jCisgIHNyYy9iYXNlL2Z0bW0uYworICBzcmMvYmFzZS9mdG9ianMuYworICBzcmMvYmFzZS9mdG90dmFsLmMKKyAgc3JjL2Jhc2UvZnRvdXRsbi5jCisgIHNyYy9iYXNlL2Z0cGF0ZW50LmMKKyAgc3JjL2Jhc2UvZnRwZnIuYworICBzcmMvYmFzZS9mdHJmb3JrLmMKKyAgc3JjL2Jhc2UvZnRzbmFtZXMuYworICBzcmMvYmFzZS9mdHN0cmVhbS5jCisgIHNyYy9iYXNlL2Z0c3Ryb2tlLmMKKyAgc3JjL2Jhc2UvZnRzeW50aC5jCisgIHNyYy9iYXNlL2Z0c3lzdGVtLmMKKyAgc3JjL2Jhc2UvZnR0cmlnb24uYworICBzcmMvYmFzZS9mdHR5cGUxLmMKKyAgc3JjL2Jhc2UvZnR1dGlsLmMKKyAgc3JjL2Jhc2UvZnR3aW5mbnQuYworICBzcmMvYmRmL2JkZi5jCisgIHNyYy9iemlwMi9mdGJ6aXAyLmMKKyAgc3JjL2NhY2hlL2Z0Y2FjaGUuYworICBzcmMvY2ZmL2NmZi5jCisgIHNyYy9jaWQvdHlwZTFjaWQuYworICBzcmMvZ3ppcC9mdGd6aXAuYworICBzcmMvbHp3L2Z0bHp3LmMKKyAgc3JjL3BjZi9wY2YuYworICBzcmMvcGZyL3Bmci5jCisgIHNyYy9wc2F1eC9wc2F1eC5jCisgIHNyYy9wc2hpbnRlci9wc2hpbnRlci5jCisgIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMKKyAgc3JjL3Jhc3Rlci9yYXN0ZXIuYworICBzcmMvc2ZudC9zZm50LmMKKyAgc3JjL3Ntb290aC9zbW9vdGguYworICBzcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYworICBzcmMvdHlwZTEvdHlwZTEuYworICBzcmMvdHlwZTQyL3R5cGU0Mi5jCisgIHNyYy93aW5mb250cy93aW5mbnQuYworKQorCitpbmNsdWRlX2RpcmVjdG9yaWVzKCJzcmMvdHJ1ZXR5cGUiKQoraW5jbHVkZV9kaXJlY3Rvcmllcygic3JjL3NmbnQiKQoraW5jbHVkZV9kaXJlY3Rvcmllcygic3JjL2F1dG9maXQiKQoraW5jbHVkZV9kaXJlY3Rvcmllcygic3JjL3Ntb290aCIpCitpbmNsdWRlX2RpcmVjdG9yaWVzKCJzcmMvcmFzdGVyIikKK2luY2x1ZGVfZGlyZWN0b3JpZXMoInNyYy9wc2F1eCIpCitpbmNsdWRlX2RpcmVjdG9yaWVzKCJzcmMvcHNuYW1lcyIpCisKK2lmIChCVUlMRF9GUkFNRVdPUkspCisgIHNldChCQVNFX1NSQ1MKKyAgICAke0JBU0VfU1JDU30KKyAgICBidWlsZHMvbWFjL2ZyZWV0eXBlLUluZm8ucGxpc3QKKyAgKQorZW5kaWYgKCkKKworYWRkX2xpYnJhcnkoZnJlZXR5cGUKKyAgJHtQVUJMSUNfSEVBREVSU30KKyAgJHtQVUJMSUNfQ09ORklHX0hFQURFUlN9CisgICR7UFJJVkFURV9IRUFERVJTfQorICAke0JBU0VfU1JDU30KKykKKworaWYgKEJVSUxEX0ZSQU1FV09SSykKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSAke1BVQkxJQ19DT05GSUdfSEVBREVSU30KKyAgICBQUk9QRVJUWSBNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiBIZWFkZXJzL2NvbmZpZworICApCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhmcmVldHlwZSBQUk9QRVJUSUVTCisgICAgRlJBTUVXT1JLIFRSVUUKKyAgICBNQUNPU1hfRlJBTUVXT1JLX0lORk9fUExJU1QgYnVpbGRzL21hYy9mcmVldHlwZS1JbmZvLnBsaXN0CisgICAgUFVCTElDX0hFQURFUiAiJHtQVUJMSUNfSEVBREVSU30iCisgICAgWENPREVfQVRUUklCVVRFX0lOU1RBTExfUEFUSCAiQHJwYXRoIgorICApCitlbmRpZiAoKQorCisjIEluc3RhbGxhdGlvbnMKKyMgTm90ZSB0aGUgdHJhaWxpbmcgc2xhc2ggaW4gdGhlIGFyZ3VtZW50IHRvIHRoZSBgRElSRUNUT1JZJyBkaXJlY3RpdmUKK2luc3RhbGwoRElSRUNUT1JZICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9pbmNsdWRlLworICBERVNUSU5BVElPTiBpbmNsdWRlL2ZyZWV0eXBlMgorICBQQVRURVJOICJpbnRlcm5hbCIgRVhDTFVERQorKQoraW5zdGFsbChUQVJHRVRTIGZyZWV0eXBlCisgIFJVTlRJTUUgREVTVElOQVRJT04gYmluCisgIExJQlJBUlkgREVTVElOQVRJT04gbGliCisgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliCisgIEZSQU1FV09SSyBERVNUSU5BVElPTiBMaWJyYXJ5L0ZyYW1ld29ya3MKKykKKworIyBQYWNrYWdpbmcKKyMgQ1BhY2sgdmVyc2lvbiBudW1iZXJzIGZvciByZWxlYXNlIHRhcmJhbGwgbmFtZS4KK3NldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUFKT1IgJHtWRVJTSU9OX01BSk9SfSkKK3NldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUlOT1IgJHtWRVJTSU9OX01JTk9SfSkKK3NldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fUEFUQ0ggJHtWRVJTSU9OX1BBVENIfX0pCitpZiAoTk9UIERFRklORUQgQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZKQorICBzZXQoQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZICIke0NNQUtFX1BST0pFQ1RfTkFNRX0iKQorZW5kaWYgKCkKK2lmIChOT1QgREVGSU5FRCBDUEFDS19TT1VSQ0VfUEFDS0FHRV9GSUxFX05BTUUpCisgIHNldChDUEFDS19TT1VSQ0VfUEFDS0FHRV9GSUxFX05BTUUKKyAgICAiJHtDTUFLRV9QUk9KRUNUX05BTUV9LSR7UFJPSkVDVF9WRVJTSU9OfS1yJHtQUk9KRUNUX1JFVn0iCisgICAgQ0FDSEUgSU5URVJOQUwgInRhcmJhbGwgYmFzZW5hbWUiCisgICkKK2VuZGlmICgpCitzZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUiBUR1opCitzZXQoQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFUworICAiL0NWUy87Ly5zdm4vOy5zd3AkOy4jOy8jOy9idWlsZC87L3NlcmlhbC87L3Nlci87L3BhcmFsbGVsLzsvcGFyLzt+Oy9wcmVjb25maWcub3V0Oy9hdXRvbTR0ZS5jYWNoZS87Ly5jb25maWciKQorc2V0KENQQUNLX0dFTkVSQVRPUiBUR1opCitpbmNsdWRlKENQYWNrKQorCisjIGFkZCBtYWtlIGRpc3QgdGFyZ2V0CithZGRfY3VzdG9tX3RhcmdldChkaXN0IENPTU1BTkQgJHtDTUFLRV9NQUtFX1BST0dSQU19IHBhY2thZ2Vfc291cmNlKQorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L0NoYW5nZUxvZyBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhMTliOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cKQEAgLTAsMCArMSw2Nzk2IEBACisyMDE1LTA2LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi42IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTYnLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNi4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNS41LzIuNi8sIHMvMjU1LzI2Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUik6IFNldCB0byA2LgorCShGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAwLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTg6MDoxMi4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX01JTk9SKTogU2V0IHRvIDAuCisJKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gNi4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyBbIUZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1RdOiBBZGQKKwlkZWNsYXJhdGlvbnMgZm9yIGR1bXBpbmcgZnVuY3Rpb25zLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTmV3X0NvbnRleHQpOiBQYWNpZnkgY29tcGlsZXIuCisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tazogVXNlIGBmcmVldHlwZS5taydzIGNvZGUgdG8gY29tcHV0ZSB0aGUgdmVyc2lvbgorCXN0cmluZy4KKwlEb24ndCBpbmNsdWRlIGEgemVybyBwYXRjaCBsZXZlbCBpbiB2ZXJzaW9uIHN0cmluZy4KKwkqIGJ1aWxkcy9mcmVldHlwZS5tazogUmVtb3ZlIGNvZGUgZm9yIGNvbXB1dGluZyB0aGUgdmVyc2lvbiBzdHJpbmcuCisKKzIwMTUtMDYtMDYgIEFzaGlzaCBBemFkICA8YXNoaXNoLmF6YWRAc2Ftc3VuZy5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICM0NTI2MC4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfZ2V0X2tlcm5pbmcpOiBGaXggdHlwby4KKworMjAxNS0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggbWVtb3J5IGxlYWsuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEdyaXNzaW9tIDxjaGFvcy5wcm90b25AZ21haWwuY29tPjsgaW4KKworCSAgaHR0cDovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTUtMDUvbXNnMDAwMTMuaHRtbAorCisJdGhlcmUgaXMgYW4gZXhhbXBsZSBjb2RlIHRvIHRyaWdnZXIgdGhlIGJ1Zy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX2luaXRfYnl0ZWNvZGUpOiBGcmVlIG9sZCBgc2l6ZScKKwlkYXRhIGJlZm9yZSBhbGxvY2F0aW5nIGFnYWluLiAgQnVnIG1vc3QgcHJvYmFibHkgaW50cm9kdWNlZCBmb3VyCisJeWVhcnMgYWdvIGluIHZlcnNpb24gMi40LjMuCisKKzIwMTUtMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIEFkZCBtb3JlIHRyYWNpbmcuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoRlRfVFJBQ0U3KSBbX1NUQU5EQUxPTkVfXTogRGVmaW5lLgorCShWZXJ0aWNhbF9Td2VlcF9TcGFuLCBWZXJ0aWNhbF9Td2VlcF9Ecm9wLCBIb3Jpem9udGFsX1N3ZWVwX1NwYW4sCisJSG9yaXpvbnRhbF9Td2VlcF9Ecm9wLCBSZW5kZXJfR2x5cGgpOiBBZGQgdHJhY2luZyBjYWxscy4KKworMjAxNS0wNi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBXaGlsZSB0cmFjaW5nIG9wY29kZXMsIHNob3cgY29kZSBwb3NpdGlvbiBhbmQgc3RhY2suCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBDaGFuZ2UgYWxsIGV4aXN0aW5nIFRSQUNFNyBjYWxscyB0bworCVRSQUNFNi4KKwkob3Bjb2RlX25hbWUpOiBBZGQgc3RyaW5nIGxlbmd0aHMuCisJKFRUX1J1bklucyk6IEltcGxlbWVudCBkaXNwbGF5IG9mIGNvZGUgcG9zaXRpb24gYW5kIHN0YWNrLgorCisyMDE1LTA1LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEluIEdYLCBtYWtlIHByaXZhdGUgcG9pbnQgbnVtYmVycyB3b3JrIGNvcnJlY3RseS4KKworCVRoaXMgaXMgY29tcGxldGVseSBtaXNzaW5nIGluIEFwcGxlJ3MgZG9jdW1lbnRhdGlvbjogSWYgYSBgZ3ZhcicKKwl0dXBsZSB1c2VzIHByaXZhdGUgcG9pbnQgbnVtYmVycyAodGhpcyBpcywgZGVsdGFzIGFyZSBzcGVjaWZpZWQgZm9yCisJc29tZSBwb2ludHMgb25seSksIHRoZSB1bmNvdmVyZWQgcG9pbnRzIG11c3QgYmUgaW50ZXJwb2xhdGVkIGZvcgorCXRoaXMgdHVwbGUgc2ltaWxhciB0byB0aGUgSVVQIGJ5dGVjb2RlIGluc3RydWN0aW9uLiAgRXhhbXBsZXMgdGhhdAorCW5lZWQgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBnbHlwaHMgYE9zbGFzaCcgYW5kIGBRJyBpbiBTa2lhLnR0Zi4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfZGVsdGFfc2hpZnQsIHR0X2RlbHRhX2ludGVycG9sYXRlLAorCXR0X2hhbmRsZV9kZWx0YXMpOiBOZXcgZnVuY3Rpb25zLgorCShUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMpOiBSZW5hbWVkIHRvLi4uCisJKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogLi4uIHRoaXM7IGl0IGRpcmVjdGx5IHByb2Nlc3NlcyB0aGUKKwlwb2ludHMgYW5kIGRvZXMgbm8gbG9uZ2VyIHJldHVybiBhbiBhcnJheSBvZiBkZWx0YXMuCisJQWRkIHRyYWNpbmcgaW5mb3JtYXRpb24uCisJQ2FsbCBgdHRfaGFuZGxlX2RlbHRhcycgdG8gaW50ZXJwb2xhdGUgbWlzc2luZyBkZWx0YXMuCisJQWxzbyBmaXggYSBtaW5vciBtZW1vcnkgbGVhayBpbiBjYXNlIG9mIGVycm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwKKwlsb2FkX3RydWV0eXBlX2dseXBoKTogVXBkYXRlZC4KKworMjAxNS0wNS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbiBHWCwgbWFrZSBpbnRlcm1lZGlhdGUgdHVwbGV0cyB3b3JrIGF0IGV4dHJlbWEuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9hcHBseV90dXBsZSk6IEZpeCByYW5nZSBjb25kaXRpb24uCisKKzIwMTUtMDUtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWRkIHRyYWNpbmcgaW5mb3JtYXRpb24gdG8gR1ggY29kZS4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfYXZhciwgZnRfdmFyX2xvYWRfZ3ZhciwKKwlmdF92YXJfYXBwbHlfdHVwbGUsIFRUX0dldF9NTV9WYXIsIFRUX1NldF9NTV9CbGVuZCwKKwlUVF9TZXRfVmFyX0Rlc2lnbiwgdHRfZmFjZV92YXJ5X2N2dCk6IERvIGl0LgorCisyMDE1LTA1LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90b29scy9hcGluYW1lcy5jIChuYW1lc19kdW1wKTogRml4IGludmFsaWQgcmVmZXJlbmNlLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBHdXptYW4gTW9zcXVlZGEsIEpvc2UgUgorCTxqb3NlLnIuZ3V6bWFuLm1vc3F1ZWRhQGludGVsLmNvbT4uCisKKzIwMTUtMDUtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IGNvbW1pdCBmcm9tIDIwMTUtMDUtMjIuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMsIHNyYy90cnVldHlwZS90dGludGVycC5jOiBHdWFyZCBuZXcgY29kZQorCXdpdGggYFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORycuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE5pa29sYXVzIFdheHdlaWxlciA8bWFkaWdlbnNAZ21haWwuY29tPi4KKworMjAxNS0wNS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggcmV0dXJuIHZhbHVlcyBvZiBHRVRJTkZPIGJ5dGVjb2RlIGluc3RydWN0aW9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBOZXcgZmllbGRzCisJYHZlcnRpY2FsX2xjZCcgYW5kIGBncmF5X2NsZWFydHlwZScuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2xvYWRlcl9pbml0KTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzLgorCUNoYW5nZSBgc3ltbWV0cmljYWwgc21vb3RoaW5nJyB0byBUUlVFLCBzaW5jZSBGcmVlVHlwZSBwcm9kdWNlcworCWV4YWN0bHkgdGhpcy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19HRVRJTkZPKTogRml4IHNlbGVjdG9yL3JldHVybiBiaXQKKwl2YWx1ZXMgZm9yIHN5bW1ldHJpY2FsIHNtb290aGluZywgbmFtZWx5IDExLzE4LgorCUhhbmRsZSBiaXRzIGZvciB2ZXJ0aWNhbCBMQ0Qgc3VicGl4ZWxzICg4LzE1KSBhbmQgR3JheSBDbGVhclR5cGUKKwkoMTIvMTkpLgorCisyMDE1LTA1LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHQpOgorCSBzL3N1YnBpeGVsL3N1YnBpeGVsX2hpbnRpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMsIHNyYy90cnVldHlwZS90dGdsb2FkLmg6IFVwZGF0ZWQuCisKKzIwMTUtMDUtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gU3VwcG9ydCBzZWxlY3RvciBpbmRleCAzIG9mIHRoZSBJTlNUQ1RSTCBpbnN0cnVjdGlvbi4KKworCVRoaXMgZmxhZyBhY3RpdmF0ZXMgYG5hdGl2ZSBDbGVhclR5cGUgaGludGluZycsIGRpc2FibGluZyBiYWNrd2FyZHMKKwljb21wYXRpYmlsaXR5IG1vZGUgYXMgZGVzY3JpYmVkIGluIEdyZWcgSGl0Y2hjb2NrcyB3aGl0ZXBhcGVyLiAgSW4KKwlvdGhlciB3b3JkcywgaXQgZW5hYmxlcyB1bnJlc3RyaWN0ZWQgZnVuY3Rpb25hbGl0eSBvZiBhbGwgVHJ1ZVR5cGUKKwlpbnN0cnVjdGlvbnMgaW4gQ2xlYXJUeXBlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9nZXRfbWV0cmljcyk6IENhbGwgYHNwaF9zZXRfdHdlYWtzJworCXVuY29uZGl0aW9uYWxseS4KKwkodHRfbG9hZGVyX2luaXQpOiBVbnNldCBgaWdub3JlX3hfbW9kZScgZmxhZyBpZiBiaXQgMiBvZgorCWBHUy5pbnN0cnVjdF9jb250cm9sJyBpcyBhY3RpdmUuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSU5TVENUUkwpOiBIYW5kbGUgc2VsZWN0b3IgaW5kZXggMy4KKwkoSW5zX0dFVElORk8pOiBVcGRhdGVkLgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDE1LTA1LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoU2V0U3VwZXJSb3VuZCk6IEZpeCB0eXBlIG9mIGBHcmlkUGVyaW9kJworCWFyZ3VtZW50LgorCisyMDE1LTA1LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBsb2FkaW5nIG9mIGNvbXBvc2l0ZSBnbHlwaHMuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfQ29tcG9zaXRlX0dseXBoKTogSWYgdGhlCisJQVJHU19BUkVfWFlfVkFMVUVTIGZsYWcgaXMgbm90IHNldCwgaGFuZGxlIGFyZ3VtZW50IHZhbHVlcyBhcworCXVuc2lnbmVkLiAgSSB0cnVzdCBgdHR4JyAod2hpY2ggaGFzIGV4YWN0bHkgc3VjaCBjb2RlKSB0aGF0IGl0IGRvZXMKKwl0aGUgcmlnaHQgdGhpbmcgaGVyZS4uLgorCisJVGhlIHJlYXNvbiB0aGF0IG5vb25lIGhhcyBldmVyIG5vdGljZWQgdGhpcyBidWcgaXMgcHJvYmFibHkgdGhlIGZhY3QKKwl0aGF0IHBvaW50LWFsaWduZWQgc3ViZ2x5cGhzIGFyZSByYXJlLCBhcyBhcmUgc3ViZ2x5cGhzIHdpdGggYQorCW51bWJlciBvZiBwb2ludHMgaW4gdGhlIHJhbmdlIFsxMjg7MjU1XSwgd2hpY2ggaXMgcXVpdGUgbGFyZ2UgKG9yCisJZXZlbiBpbiB0aGUgcmFuZ2UgWzMyNzY4OzY1NTM1XSwgd2hpY2ggaXMgZXh0cmVtZWx5IHVubGlrZWx5KS4KKworMjAxNS0wNS0xMiAgQ2hyaXMgTGlkZGVsbCAgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+CisKKwlbY2ZmXSBNYWtlIHRoZSBgKmN1cnZldG8nIG9wZXJhdG9ycyBtb3JlIHRvbGVyYW50LgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBUaGUgb3Bjb2RlcworCWB2dmN1cnZldG8nLCBgaGhjdXJ2ZXRvJywgYHZoY3VydmV0bycsIGFuZCBgaHZjdXJ2ZXRvJyBhbGwgaXRlcmF0ZSwKKwlwdWxsaW5nIHZhbHVlcyBvZmYgdGhlIHN0YWNrIHVudGlsIHRoZSBzdGFjayBpcyBleGhhdXN0ZWQuCisJSW1wbGljaXRseSB0aGUgc3RhY2sgbXVzdCBiZSBhIG11bHRpcGxlIChvciBmb3Igc3VidGx5IGRpZmZlcmVudAorCWJlaGF2aW91cikgYSBtdWx0aXBsZSBwbHVzIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGV4dHJhIHZhbHVlcyBkZWVwLgorCUlmIHRoYXQncyBub3QgdGhlIGNhc2UsIGVuZm9yY2UgaXQgKGFzIHRoZSBvbGQgY29kZSBkaWQpLgorCisyMDE1LTA1LTEyICBDaHJpcyBMaWRkZWxsICA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KKworCVtjZmZdIGZpeCBpbmNyZW1lbnRhbCBpbnRlcmZhY2Ugd2l0aCBuZXcgY2ZmIGNvZGUuCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2dldFNlYWNDb21wb25lbnQpOiBXaGVuIHVzaW5nIHRoZSBpbmNyZW1lbnRhbAorCWludGVyZmFjZSB0byByZXRyaWV2ZSBnbHlwaCBkYXRhIGZvciBhIFNFQUMsIGl0IGJlIGxlZnQgdG8gdGhlCisJaW5jcmVtZW50YWwgaW50ZXJmYWNlIGNhbGxiYWNrIHRvIGFwcGx5IHRoZSBlbmNvZGluZyB0byByYXcKKwljaGFyYWN0ZXIgaW5kZXggKGFzIGl0IHdhcyBpbiB0aGUgcHJldmlvdXMgY29kZSkuCisKKzIwMTUtMDQtMjkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2F1dG9maXRdIFNwZWVkIHVwIElVUC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9pdXBfaW50ZXJwKTogU2VwYXJhdGUgdHJpdmlhbCBzbmFwcGluZyB0bworCXRoZSBzYW1lIHBvc2l0aW9uIGZyb20gdHJ1ZSBpbnRlcnBvbGF0aW9uLCB1c2UgYHNjYWxlJyB0byByZWR1Y2UKKwlkaXZpc2lvbnMuCisKKzIwMTUtMDQtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFVzZSBgbmFtZScgdGFibGUgZm9yIFBTIG5hbWUgaWYgd2UgaGF2ZSBhIFNGTlQtQ0ZGLgorCisJVGhpcyBmb2xsb3dzIHRoZSBPcGVuVHlwZSAxLjcgc3BlY2lmaWNhdGlvbi4gIFNlZQorCisJICBodHRwOi8vdHVnLm9yZy9waXBlcm1haWwvdGV4LWxpdmUvMjAxNS1BcHJpbC8wMzY2MzQuaHRtbAorCisJZm9yIGEgZGlzY3Vzc2lvbi4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X3BzX25hbWUpOiBVc2UgdGhlIGBzZm50JyBzZXJ2aWNlIGlmIHdlCisJaGF2ZSBhbiBTRk5ULgorCisyMDE1LTA0LTI3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gU3BlZWQgdXAgSVVQLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoX2l1cF93b3JrZXJfaW50ZXJwb2xhdGUpOiBTZXBhcmF0ZSB0cml2aWFsCisJc25hcHBpbmcgdG8gdGhlIHNhbWUgcG9zaXRpb24gZnJvbSB0cnVlIGludGVycG9sYXRpb24uCisKKzIwMTUtMDQtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBCeSBkZWZhdWx0LCBlbmFibGUgd2FycGluZyBjb2RlIGJ1dCBzd2l0Y2ggb2ZmIHdhcnBpbmcuCisKKwlTdWdnZXN0ZWQgYnkgQmVoZGFkLgorCisJKiBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oOiBEZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChhZl9hdXRvZml0dGVyX2luaXQpOiBJbml0aWFsaXplIGB3YXJwaW5nJworCXdpdGggYGZhbHNlJy4KKworMjAxNS0wNC0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTUtMDQtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbnRyb2R1Y2UgYHdhcnBpbmcnIHByb3BlcnR5LgorCisJVGhpcyBjb2RlIHJlcGxhY2VzIHRoZSBkZWJ1Z2dpbmcgaG9vayBmcm9tIHRoZSBwcmV2aW91cyBjb21taXQgd2l0aAorCWEgYmV0dGVyLCBtb3JlIGdlbmVyaWMgc29sdXRpb24uCisKKwkqIGluY2x1ZGUvZnRhdXRvaC5oOiBEb2N1bWVudCBpdC4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuaCAoQUZfTW9kdWxlUmVjKQorCVtBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVJdOiBBZGQgYHdhcnBpbmcnIGZpZWxkLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChfYWZfZGVidWdfZGlzYWJsZV93YXJwZXIpOiBSZW1vdmUuCisJKGFmX3Byb3BlcnR5X3NldCwgYWZfcHJvcGVydHlfZ2V0LCBhZl9hdXRvZml0dGVyX2luaXQpCisJW0FGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUl06IEhhbmRsZSBgd2FycGluZycgb3B0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0hJTlRTX0RPX1dBUlApOiBSZW1vdmUgdXNlIG9mIHRoZSBubworCWxvbmdlciBleGlzdGluZyBgX2FmX2RlYnVnX2Rpc2FibGVfd2FycGVyJy4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2luaXQpLCBzcmMvYXV0b2ZpdC9hZmxhdGluLmMKKwkoYWZfbGF0aW5faGludHNfaW5pdCksIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9oaW50c19pbml0KQorCVtBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVJdOiBBZGQgYEFGX1NDQUxFUl9GTEFHX05PX1dBUlBFUicgdG8gdGhlCisJc2NhbGVyIGZsYWdzIGlmIHdhcnBpbmcgaXMgb2ZmLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmg6IFVwZGF0ZWQuCisKKzIwMTUtMDQtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgZGVidWdnaW5nIGhvb2sgdG8gZGlzYWJsZSB3YXJwZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKF9hZl9kZWJ1Z19kaXNhYmxlX3dhcnBlcikKKwlbRlRfREVCVUdfQVVUT0ZJVF06IE5ldyBnbG9iYWwgdmFyaWFibGUuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaDogVXBkYXRlZC4KKwkoQUZfU0NBTEVSX0ZMQUdfTk9fV0FSUEVSKTogTmV3IG1hY3JvIChub3QgYWN0aXZlbHkgdXNlZCB5ZXQpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0hJTlRTX0RPX1dBUlApOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9hdXRvZmkvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19hcHBseSkKKwlbQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSXTogVXNlIGBBRl9ISU5UU19ET19XQVJQJyB0byBjb250cm9sIHVzZQorCW9mIHdhcnBlci4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2luaXQsIGFmX2Nqa19oaW50c19hcHBseSkKKwlbQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSXTogU3luY2hyb25pemUgd2l0aCBgYWZsYXRpbi5jJy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX2hpbnRzX2FwcGx5KQorCVtBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVJdOiBTeW5jaHJvbml6ZSB3aXRoIGBhZmxhdGluLmMnLgorCisyMDE1LTA0LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBVcGRhdGUgYWR2YW5jZSB3aWR0aCBoYW5kbGluZyB0byBPcGVuVHlwZSAxLjcuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEJlaGRhZC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2FkdmFuY2VzKTogSGFuZGxlIFNGTlQgY2FzZQorCXNlcGFyYXRlbHkuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFVzZSBhZHZhbmNlIHdpZHRoIGFuZCBzaWRlCisJYmVhcmluZyB2YWx1ZXMgZnJvbSBgaG10eCcgdGFibGUgaWYgcHJlc2VudC4KKworMjAxNS0wNC0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292IDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogVXNlIGRvLXdoaWxlIGxvb3AuCisKKzIwMTUtMDQtMDIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRfZWRnZXMpOiBSZWR1Y2UgbG9naWMuCisKKzIwMTUtMDQtMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2F1dG9maXRdIEZpbmlzaCB0aGUgdGhvdWdodC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9kaXJlY3Rpb25fY29tcHV0ZSk6IG1ha2Ugc3VyZSB0aGUgbG9uZyBhcm0KKwlpcyBuZXZlciBuZWdhdGl2ZSBzbyB0aGF0IGl0cyBgRlRfQUJTJyBpcyBub3QgbmVjZXNzYXJ5LgorCisyMDE1LTA0LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gQ2FsbCBkdW1wZXIgZnVuY3Rpb25zIGZvciB0cmFjaW5nLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfYXBwbHkpOiBSZW1vdmUgZGVhZCBjb2RlLgorCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyk6IE1pbm9yCisJaW1wcm92ZW1lbnQuCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChhZl9hdXRvZml0dGVyX2xvYWRfZ2x5cGgpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTUtMDQtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNYWtlIGRlYnVnZ2luZyBzdHVmZiB3b3JrIGFnYWluLgorCisJVGhlIGludGVyZmFjZSB0byBmdGdyaWQgd2FzIGJyb2tlbiBpbiB0aGUgc2VyaWVzIG9mIGNvbW1pdHMgc3RhcnRpbmcKKwl3aXRoCisKKwkgIFthdXRvZml0XSBBbGxvY2F0ZSBBRl9Mb2FkZXIgb24gdGhlIHN0YWNrIGluc3RlYWQgb2YgQUZfTW9kdWxlLgorCisJZnJvbSAyMDE1LTAxLTE0LgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChfYWZfZGVidWdfaGludHNfcmVjKSBbRlRfREVCVUdfQVVUT0ZJVF06CisJVXNlIGEgZ2xvYmFsIEFGX0dseXBoSGludHNSZWMgb2JqZWN0IGZvciBkZWJ1Z2dpbmcuCisJKGFmX2F1dG9maXR0ZXJfZG9uZSwgYWZfYXV0b2ZpdHRlcl9sb2FkX2dseXBoKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2luaXQsIGFmX2xvYWRlcl9kb25lKTogVXBkYXRlZC4KKworMjAxNS0wNC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2RvbmUpOiBGaXggbWlub3IgdGhpbmtvLgorCisyMDE1LTAzLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBGaXggU2F2YW5uYWggYnVnICM0NDYyOS4KKworCSogc3JjL2NmZi9jZjJmb250LmggKENGMl9NQVhfU1VCUiksIHNyYy9jZmYvY2ZmZ2xvYWQuaAorCShDRkZfTUFYX1NVQlJTX0NBTExTKTogU2V0IHRvIDE2LgorCisyMDE1LTAzLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTEsIHRydWV0eXBlXSBNYWtlIHRoZSBNTSBBUEkgbW9yZSBmbGV4aWJsZSB3LnIudC4gYG51bV9jb29yZHMnLgorCisJVGhpcyBjb21taXQgYWxsb3dzIGBudW1fY29vcmRzJyB0byBiZSBsYXJnZXIgb3Igc21hbGxlciB0aGFuIHRoZQorCW51bWJlciBvZiBhdmFpbGFibGUgYXhlcyB3aGlsZSBzZWxlY3RpbmcgYSBkZXNpZ24gaW5zdGFuY2UsIGVpdGhlcgorCWlnbm9yaW5nIGV4Y2VzcyBkYXRhIG9yIHVzaW5nIGRlZmF1bHRzIGlmIGRhdGEgaXMgbWlzc2luZy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X01NX0JsZW5kLCBUVF9TZXRfVmFyX0Rlc2lnbik6CisJSW1wbGVtZW50IGl0LgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX1NldF9NTV9CbGVuZCwgVDFfU2V0X01NX0Rlc2lnbiwKKwlUMV9TZXRfVmFyX0Rlc2lnbik6IERpdHRvLgorCisyMDE1LTAzLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTFdIE1pbm9yLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX1NldF9NTV9CbGVuZCwgVDFfU2V0X01NX0Rlc2lnbik6IFVzZQorCUZUX1RIUk9XLgorCShUMV9TZXRfVmFyX0Rlc2lnbik6IFVzZSBUMV9NQVhfTU1fQVhJUyBhbmQgRlRfVEhST1cuCisKKzIwMTUtMDMtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFRyYWNlIGNoYXJzdHJpbmcgbmVzdGluZyBsZXZlbHMuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRDQUxMR1NVQlIsCisJY2YyX2NtZENBTExTVUJSLCBjZjJfY21kUkVUVVJOPjogSW1wbGVtZW50IGl0LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxjZmZfb3BfY2FsbHN1YnIsIGNmZl9vcF9jYWxsZ3N1YnIsIGNmZl9vcF9yZXR1cm4+OiBEaXR0by4KKworMjAxNS0wMy0yMSAgQWxleGVpIFBvZHRlbGV6aG5pa292IDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gT3B0aW1pemUgYEZUX0FuZ2xlX0RpZmYnLgorCisJVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgd2UgYXJlIHVzdWFsbHkgY2xvc2UgdG8gdGhlIGRlc2lyZWQgcmFuZ2UKKwlvZiBhbmdsZSB2YWx1ZXMsIHNvIHRoYXQgdGhlIHJlbWFpbmRlciBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeS4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfQW5nbGVfRGlmZik6IFVzZSBsb29wcyBpbnN0ZWFkIG9mIHJlbWFpbmRlci4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9BTkdMRV9ESUZGKTogRGl0dG8gaW4gdGhlIHVudXNlZCBtYWNyby4KKworMjAxNS0wMy0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXByb3ZlIGBndmFyJyBoYW5kbGluZy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMpOiBDb3JyZWN0bHkgaGFuZGxlCisJc2luZ2xlLWVsZW1lbnQgcnVucy4gIENmLiBnbHlwaCBgUScgaW4gU2tpYS50dGYgd2l0aCB3ZWlnaHRzIGxhcmdlcgorCXRoYW4gdGhlIGRlZmF1bHQuCisKKzIwMTUtMDMtMjAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChGVF9WZWN0b3JfUm90YXRlKTogTWlub3IgcmVmYWN0b3JpbmcuCisKKzIwMTUtMDMtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDQ0MTIgKHBhcnQgMikuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKEZUX1NpbiwgRlRfQ29zLCBGVF9UYW4pOiBDYWxsIGBGVF9WZWN0b3JfVW5pdCcuCisKKzIwMTUtMDMtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQXJhYmljIHNjcmlwdC4KKworCVRoYW5rcyB0byBUaXR1cyBOZW1ldGggPHRuQHRudHlwb2dyYXBoeS5ldT4gZm9yIGd1aWRhbmNlIQorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEFyYWJpYy4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEFyYWJpYyBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jOiBBZGQgQXJhYmljIGRhdGEuCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBBcmFiaWMgZGF0YS4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAxNS0wMy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVuYW1lIGBzdnhmODZubS5oJyB0byBgc3ZmbnRmbXQuaCc7IHVwZGF0ZSByZWxhdGVkIHN5bWJvbHMuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX1NFUlZJQ0VfWEZSRUU4Nl9OQU1FX0gpOiBSZW5hbWVkCisJdG8uLi4KKwkoRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9IKTogVGhpcy4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oIChGVF9YRjg2X0ZPUk1BVF8qKTogUmVuYW1lZAorCXRvIC4uLgorCShGVF9GT05UX0ZPUk1BVF8qKTogVGhpcy4KKworCXNyYy9iYXNlL2Z0Zm50Zm10LmMsIHNyYy9iZGYvYmRmZHJpdnIuYywgc3JjL2NmZi9jZmZkcml2ci5jLAorCXNyYy9jaWQvY2lkcml2ZXIuYywgc3JjL3BjZi9wY2Zkcml2ci5jLCBzcmMvcGZyL3BmcmRyaXZyLmMsCisJc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMsIHNyYy90eXBlMS90MWRyaXZlci5jLAorCXNyYy90eXBlNDIvdDQyZHJpdnIuYywgc3JjL3dpbmZvbnRzL3dpbmZudC5jOiBVcGRhdGVkLgorCisyMDE1LTAzLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gUmVuYW1lIGBGVF9YRlJFRTg2X0gnIHRvIGBGVF9GT05UX0ZPUk1BVFNfSCcuCisKKwkqIGluY2x1ZGUvY29uZmlnL2Z0aGVhZGVyLmg6IEltcGxlbWVudCBpdC4KKwkqIHNyYy9iYXNlL2Z0Zm50Zm10LmMsIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNS0wMy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIFJlbmFtZSBgRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCcgdG8gYEZUX0dldF9Gb250X0Zvcm1hdCcuCisKKwkqIGluY2x1ZGUvZnRmbnRmbXQuaCwgc3JjL2Jhc2UvZnRmbnRmbXQuYzogSW1wbGVtZW50IGl0LgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTUtMDMtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBhdXRvbWF0aWMgY29weXJpZ2h0IHVwZGF0aW5nLgorCisJKiBzcmMvdG9vbHMvdXBkYXRlLWNvcHlyaWdodDogTWFrZSBzY2FubmluZyBvZiBgbm8tY29weXJpZ2h0JworCWFjdHVhbGx5IHdvcmsuCisKKwkqIHNyYy90b29scy9uby1jb3B5cmlnaHQ6IERvbid0IGluY2x1ZGUgUkVBRE1FIGluIGdlbmVyYWwuCisKKzIwMTUtMDMtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlbmFtZSBgZnR4Zjg2LltjaF0nIHRvIGBmdGZudGZtdC5bY2hdJy4KKworCUNNYWtlTGlzdHMudHh0LCBidWlsZHMvYW1pZ2EvbWFrZWZpbGUsIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQsCisJYnVpbGRzL2FtaWdhL3NtYWtlZmlsZSwgYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0LAorCWJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0LCBidWlsZHMvc3ltYmlhbi9ibGQuaW5mLAorCWJ1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcCwgYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLmZpbHRlcnMsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwgZG9jcy9JTlNUQUxMLkFOWSwKKwlpbmNsdWRlL2NvbmZpZy9mdGhlYWRlci5oLCBpbmNsdWRlL2Z0Zm50Zm10LmgsIG1vZHVsZXMuY2ZnLAorCXNyYy9iYXNlL2Z0Zm50Zm10LmMsIHZtc19tYWtlLmNvbTogVXBkYXRlZC4KKworMjAxNS0wMy0xMCAgQWxleGVpIFBvZHRlbGV6aG5pa292IDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICM0NDQxMiAocGFydCAxKS4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoZnRfc3Ryb2tlcl9pbnNpZGUpOiBIYW5kbGUgbmVhciBVLXR1cm5zLgorCisyMDE1LTAzLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gUmVuYW1lIGBGVF9CaXRtYXBfTmV3JyB0byBgRlRfQml0bWFwX0luaXQnLgorCisJKiBpbmNsdWRlL2Z0Yml0bWFwLmgsIHNyYy9iYXNlL2Z0Yml0bWFwLmM6IEltcGxlbWVudCBpdC4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNS0wMy0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2ZvbnRfZGlyKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKwlGb3VuZCBieSBBbGV4ZWkuCisKKzIwMTUtMDMtMDUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jOiBTaW1wbGlmeS4KKworMjAxNS0wMy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBTb21lIGZpeGVzIGFuZCBjb2RlIHJlZmFjdG9yaW5nIGluIGB0dGd4dmFyLmMnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZHBvaW50cyk6IEZpeCByZXR1cm4gdmFsdWUKKwlvZiBgcG9pbnRfY250JyBpZiB0d28gYnl0ZXMgYXJlIHJlYWQuCisJVXNlIGEgbW9yZSB2ZXJ0aWNhbCBjb2Rpbmcgc3R5bGUuCisJKGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzKTogVXNlIEZUX1VJbnQgZm9yIGBkZWx0YV9jbnQnIHBhcmFtZXRlci4KKwlVc2UgYSBtb3JlIHZlcnRpY2FsIGNvZGluZyBzdHlsZS4KKworMjAxNS0wMy0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBTYXZhbm5haCBidWcgIzQ0MjQxLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IFJlamVjdCBnbHlwaHMKKwl3aXRoIGxlc3MgdGhhbiAzIHBvaW50cy4KKworMjAxNS0wMy0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJU2ltcGxpZnkgYFRZUEVPRicgbWFjcm8uCisKKwlObyBuZWVkIGZvciB0d28gYXJndW1lbnRzLgorCisJKiBpbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oLCBidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwKKwlidWlsZHMvdm1zL2Z0Y29uZmlnLmggKFRZUEVPRik6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1BBRF9GTE9PUiwgRlRfUElYX0ZMT09SKSwKKwlzcmMvYXV0b2ZpdC9hZndhcnAuaCAoQUZfV0FSUEVSX0ZMT09SKTogVXBkYXRlZC4KKworMjAxNS0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVmFyaW91cyBjb21waWxlciB3YXJuaW5nIGZpeGVzIGZvciBgbWFrZSBtdWx0aScuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50c19jb21wdXRlX2JsdWVfZWRnZXMpLAorCXNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludF9jb21wdXRlX2JsdWVfZWRnZXMsCisJYWZfbGF0aW5faGludF9lZGdlcyksIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMKKwkoYWZfbGF0aW4yX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcywgYWZfbGF0aW4yX2hpbnRfZWRnZXMpOiBEZWNsYXJlCisJYXMgYHN0YXRpYycuCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKEZUQ19DTUFQX1FVRVJZX0hBU0gsIEZUQ19DTUFQX05PREVfSEFTSCk6CisJUmVtb3ZlZC4gIFVudXNlZC4KKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSC4KKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTFJVX0dFVF9NQU5BR0VSKTogUmVtb3ZlZC4gIFVudXNlZC4KKworCSogc3JjL2NmZi9jZjJpbnRycC5jOiBJbmNsdWRlIGBjZjJpbnRycC5oJy4KKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoUEFJUl9UQUcpOiBSZW1vdmVkLiAgVW51c2VkLgorCisJKiBzcmMvZ3ppcC9mdGd6aXAuYyAoTk9fRFVNTVlfREVDTCk6IFJlbW92ZWQuICBVbnVzZWQuCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5jIChhZm1fcGFyc2VyX3JlYWRfaW50KTogRGVjbGFyZSBhcyBgc3RhdGljJy4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAoU1RST05HRVIsIFBTSF9aT05FX01JTiwgUFNIX1pPTkVfTUFYKToKKwlSZW1vdmVkLiAgVW51c2VkLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKFJlbmRlcl9HbHlwaCk6IERlY2xhcmUgYXMgYHN0YXRpYycuCisKKwkqIHNyYy9zZm50L3R0cG9zdC5jIChsb2FkX2Zvcm1hdF8yMCk6IEZpeCBzaWduZWRuZXNzIHdhcm5pbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChQQUlSX1RBRyk6IFJlbW92ZWQuICBVbnVzZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyAoaXNfbWVtYmVyX29mX2ZhbWlseV9jbGFzcywKKwlpc19tZW1iZXJfb2Zfc3R5bGVfY2xhc3MpOiBEZWNsYXJlIGFzIGBzdGF0aWMnLgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9QYXJzZV9HbHlwaF9BbmRfR2V0X0NoYXJfU3RyaW5nKTogRGVjbGFyZQorCWFzIGBzdGF0aWMnLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jIChtbV9heGlzX3VubWFwLCBtbV93ZWlnaHRzX3VubWFwKTogRGVjbGFyZSBhcworCWBzdGF0aWMnLgorCShUMV9GSUVMRF9DT1VOVCk6IFJlbW92ZWQuICBVbnVzZWQuCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5oIChUMV9Eb25lX1RhYmxlKTogUmVtb3ZlZC4gIFVudXNlZC4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jIChUMV9Eb25lX1RhYmxlKTogUmVtb3ZlZC4gIFVudXNlZC4KKworMjAxNS0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBTaWduZWRuZXNzIGZpeGVzLgorCisJKiBpbmNsdWRlL2ludGVybmFsL3BzYXV4LmgsIHNyYy9wc2F1eC9hZm1wYXJzZS5jLAorCXNyYy9wc2F1eC9hZm1wYXJzZS5oLCBzcmMvcHNhdXgvcHNjb252LmMsIHNyYy9wc2F1eC9wc29ianMuYywKKwlzcmMvcHNhdXgvdDFjbWFwLmMsIHNyYy9wc2F1eC90MWRlY29kZS5jOiBBcHBseS4KKworMjAxNS0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW290dmFsaWRdIFNpZ25lZG5lc3MgZml4ZXMuCisKKwkqIHNyYy9vdHZhbGlkL290dmNvbW1uLmMsIHNyYy9vdHZhbGlkL290dmdkZWYuYywKKwlzcmMvb3R2YWxpZC9vdHZncG9zLmMsIHNyYy9vdHZhbGlkL290dmdzdWIuYywgc3JjL290dmFsaWQvb3R2bWF0aC5jOgorCUFwcGx5LgorCisyMDE1LTAyLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iemlwMi9mdGJ6aXAyLmMgKGZ0X2J6aXAyX2FsbG9jKTogU2lnbmVkbmVzcyBmaXguCisKKzIwMTUtMDItMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtsenddIFNpZ25lZG5lc3MgZml4ZXMuCisKKwkqIHNyYy9sencvZnR6b3Blbi5jLCBzcmMvbHp3L2Z0em9wZW4uaDogQXBwbHkuCisKKzIwMTUtMDItMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtneHZhbGlkXSBTaWduZWRuZXNzIGZpeGVzLgorCisJKiBzcmMvZ3h2YWxpZC9neHZic2xuLmMsIHNyYy9neHZhbGlkL2d4dmNvbW1uLmMsCisJc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaCwgc3JjL2d4dmFsaWQvZ3h2anVzdC5jLAorCXNyYy9neHZhbGlkL2d4dmtlcm4uYywgc3JjL2d4dmFsaWQvZ3h2bGNhci5jLCBzcmMvZ3h2YWxpZC9neHZtb3J0LmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYywgc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYywKKwlzcmMvZ3h2YWxpZC9neHZtb3J4LmMsIHNyYy9neHZhbGlkL2d4dm1vcngxLmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYywgc3JjL2d4dmFsaWQvZ3h2b3BiZC5jLAorCXNyYy9neHZhbGlkL2d4dnByb3AuYywgc3JjL2d4dmFsaWQvZ3h2dHJhay5jOiBBcHBseS4KKworMjAxNS0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NhY2hlXSBTaWduZWRuZXNzIGZpeGVzLgorCisJKiBzcmMvY2FjaGUvZnRjYmFzaWMuYywgc3JjL2NhY2hlL2Z0Y2NtYXAuYywgc3JjL2NhY2hlL2Z0Y2ltYWdlLmMsCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMsIHNyYy9jYWNoZS9mdGNzYml0cy5jOiBBcHBseS4KKworMjAxNS0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQ2hhbmdlIGRpbWVuc2lvbiBmaWVsZHMgaW4gYEZUQ19JbWFnZVR5cGVSZWMnIHRvIHVuc2lnbmVkIHR5cGUuCisKKwlUaGlzIGRvZXNuJ3QgYnJlYWsgQUJJLgorCisJKiBpbmNsdWRlL2Z0Y2FjaGUuaCAoRlRDX0ltYWdlVHlwZVJlYyk6IFVzZSB1bnNpZ25lZCB0eXBlcyBmb3IKKwlgd2lkdGgnIGFuZCBgaGVpZ2h0Jy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAxNS0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NhY2hlXSBEb24ndCB1c2UgYGxhYnMnLgorCisJVGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiBGcmVlVHlwZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIHdhcyB1c2VkLgorCisJKiBpbmNsdWRlL2NvbmZpZy9mdHN0ZGxpYi5oIChmdF9sYWJzKTogUmVtb3ZlLgorCisJKiBzcmMvY2FjaGUvZnRjaW1hZ2UuYyAoZnRjX2lub2RlX3dlaWdodCk6IFJlcGxhY2UgYGZ0X2xhYnMnIHdpdGgKKwlgRlRfQUJTJy4KKworMjAxNS0wMi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NhY2hlXSBSZXBsYWNlIGBGVF9QdHJEaXN0JyB3aXRoIGBGVF9PZmZzZXQnLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX05vZGVSZWMpOiBgRlRfT2Zmc2V0JyAoYS5rLmEuIGBzaXplX3QnKQorCWlzIGEgYmV0dGVyIGNob2ljZSBmb3IgYGhhc2gnIHRvIGhvbGQgYSBwb2ludGVyIHRoYW4gYEZUX1B0ckRpc3QnCisJKGEuay5hLiBgcHRyZGlmZl90JyksIGVzcGVjaWFsbHkgc2luY2UgdGhlIGxhdHRlciBpcyBzaWduZWQsCisJY2F1c2luZyB6aWxsaW9ucyBvZiBzaWduZWRuZXNzIHdhcm5pbmdzLiAgW05vdGUgdGhhdCBgaGFzaCcgd2FzIG9mCisJdHlwZSBgRlRfVUludDMyJyBiZWZvcmUgdGhlIGNoYW5nZSB0byBgRlRfUHRyRGlzdCcuXQorCVVwZGF0ZSBhbGwgdXNlcnMuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jLCBzcmMvY2FjaGUvZnRjY2FjaGUuYywgc3JjL2NhY2hlL2Z0Y2NtYXAuYywKKwlzcmMvY2FjaGUvZnRjZ2x5cGguYywgc3JjL2NhY2hlL2Z0Y2dseXBoLmg6IFVwZGF0ZWQuCisKKzIwMTUtMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzbW9vdGgsIHJhc3Rlcl0gUmUtZW5hYmxlIHN0YW5kYWxvbmUgY29tcGlsYXRpb24uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoRlRfUkVOREVSX1BPT0xfU0laRSwgRlRfTUFYKQorCVtfU1RBTkRBTE9ORV9dOiBEZWZpbmUgbWFjcm9zLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoRlRfUkVOREVSX1BPT0xfU0laRSwgRlRfTUFYLCBGVF9BQlMsCisJRlRfSFlQT1QpIFtfU1RBTkRBTE9ORV9dOiBEZWZpbmUgbWFjcm9zLgorCisyMDE1LTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc21vb3RoXSBTaWduZWRuZXNzIGZpeGVzLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYywgc3JjL3Ntb290aC9mdHNtb290aC5jOiBBcHBseS4KKworMjAxNS0wMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmM6IFVzZSB0aGUgZmlsZSdzIHR5cGVkZWZzIGV2ZXJ5d2hlcmUuCisKKzIwMTUtMDItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKGxvYWRfZm9ybWF0XzIwKTogRml4IGVycm9yIHRyYWNpbmcgbWVzc2FnZS4KKworCUJ1ZyBpbnRyb2R1Y2VkIDYgY29tbWl0cyBlYXJsaWVyLgorCisyMDE1LTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNoaW50ZXJdIEZpeCB0aGlua28uCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzaF9nbHlwaF9maW5kX3N0cm9uZ19wb2ludHMpOiBDb3JyZWN0bHkKKwljaGVjayBgY291bnQnLgorCUJ1ZyBpbnRyb2R1Y2VkIHR3byBjb21taXRzIGVhcmxpZXIuCisKKzIwMTUtMDItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIFNpZ25lZG5lc3MgZml4ZXMuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYywgc3JjL3Jhc3Rlci9mdHJlbmQxLmM6IEFwcGx5LgorCisyMDE1LTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNoaW50ZXJdIFNpZ25lZG5lc3MgZml4ZXMuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMsIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMsCisJc3JjL3BzaGludGVyL3BzaHJlYy5jOiBBcHBseS4KKworMjAxNS0wMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzaGludGVyXSBVc2UgbWFjcm9zIGZvciAodW5zaWduZWQpIGZsYWdzLCBub3QgZW51bWVyYXRpb25zLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5oIChQU0hfSGludF9GbGFncyk6IFJlcGxhY2Ugd2l0aCBtYWNyb3MuCisJVXBkYXRlZC4KKwkqIHNyYy9wc2hpbnRlci9wc2hyZWMuaCAoUFNfSGludF9GbGFncyk6IFJlcGxhY2Ugd2l0aCBtYWNyb3MuCisKKzIwMTUtMDItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaHJlYy5jOiBTaW1wbGlmeS4KKwkocHNfaGludHNfb3BlbiwgcHNfaGludHNfc3RlbSk6IFJlbW92ZSBzd2l0Y2ggc3RhdGVtZW50LgorCisyMDE1LTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gU2lnbmVkbmVzcyBmaXhlcy4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jLCBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRjbWFwLmMsCisJc3JjL3NmbnQvdHRrZXJuLmMsIHNyYy9zZm50L3R0bG9hZC5jLCBzcmMvc2ZudC90dHBvc3QuYywKKwlzcmMvc2ZudC90dHNiaXQuYzogQXBwbHkuCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jOiBBcHBseS4KKwkoc2ZudF9nZXRfcHNfbmFtZSk6IFNpbXBsaWZ5LgorCisyMDE1LTAyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBTaWduZWRuZXNzIGZpeGVzLgorCisJKiBzcmMvYmRmL2JkZi5oLCBzcmMvYmRmL2JkZmRyaXZyLmMsIHNyYy9iZGYvYmRmZHJpdnIuaCwKKwlzcmMvYmRmL2JkZmxpYi5jOiBBcHBseS4KKworMjAxNS0wMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX2F0b3VzKTogTmV3IGZ1bmN0aW9uLgorCShfYmRmX3BhcnNlX2dseXBocywgX2JkZl9wYXJzZV9zdGFydCk6IFVzZSBpdC4KKworMjAxNS0wMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gU2lnbmVkbmVzcyBmaXhlcy4KKworCSogc3JjL3BjZi9wY2YuaCwgc3JjL3BjZi9wY2Zkcml2ci5jOiBBcHBseS4KKwkqIHNyYy9wY2YvcGNmcmVhZC5jOiBBcHBseS4KKwkocGNmX2dldF9lbmNvZGluZ3MpOiBJZ25vcmUgaW52YWxpZCBuZWdhdGl2ZSBlbmNvZGluZyBvZmZzZXRzLgorCisyMDE1LTAyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYzogU2lnbmVkbmVzcyBmaXhlcy4KKworMjAxNS0wMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGU0Ml0gU2lnbmVkbmVzcyBmaXhlcy4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jLCBzcmMvdHlwZTQyL3Q0MnBhcnNlLmgsCisJc3JjL3R5cGU0Mi90NDJ0eXBlcy5oOiBBcHBseS4KKworMjAxNS0wMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Bmcl0gU2lnbmVkbmVzcyBmaXhlcy4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jLCBzcmMvcGZyL3Bmcmdsb2FkLmMsIHNyYy9wZnIvcGZybG9hZC5jLAorCXNyYy9wZnIvcGZybG9hZC5oLCBzcmMvcGZyL3Bmcm9ianMuYywgc3JjL3Bmci9wZnJzYml0LmMsCisJc3JjL3Bmci9wZnJ0eXBlcy5oOiBBcHBseS4KKworMjAxNS0wMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gTWlub3Igc2lnbmVkbmVzcyBmaXhlcyByZWxhdGVkIHRvIGxhc3QgY29tbWl0LgorCisJKiBzcmMvY2ZmL2NmMmZ0LmMsIHNyYy9jZmYvY2YyaW50cnAuYywgc3JjL2NmZi9jZmZnbG9hZC5jOiBBcHBseS4KKworMjAxNS0wMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gVGhpbmtvcyBpbiBiaWFzIGhhbmRsaW5nLgorCisJT25seSB0aGUgZmluYWwgcmVzdWx0IGlzIGFsd2F5cyBwb3NpdGl2ZS4KKworCUJ1ZyBpbnRyb2R1Y2VkIHRocmVlIGNvbW1pdHMgZWFybGllci4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jLCBzcmMvY2ZmL2NmZmdsb2FkLmg6IEFwcGx5LgorCisyMDE1LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2lkXSBGaXggc2lnbmVkbmVzcyBpc3N1ZXMgYW5kIGVtaXQgc29tZSBiZXR0ZXIgZXJyb3IgY29kZXMuCisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYywgc3JjL2NpZC9jaWRsb2FkLmgsIHNyYy9jaWQvY2lkb2Jqcy5jLAorCXNyYy9jaWQvY2lkcGFyc2UuaDogQXBwbHkuCisJKiBzcmMvY2lkL2NpZGxvYWQuYzogQXBwbHkuCisJKHBhcnNlX2ZkX2FycmF5KTogUmVqZWN0IG5lZ2F0aXZlIHZhbHVlcyBmb3IgbnVtYmVyIG9mIGRpY3Rpb25hcmllcy4KKwkqIHNyYy9jaWQvY2lkcGFyc2UuYzogQXBwbHkuCisJKGNpZF9wYXJzZXJfbmV3KTogUmVqZWN0IG5lZ2F0aXZlIHZhbHVlcyBmb3IgaGV4IGRhdGEgbGVuZ3RoLgorCisyMDE1LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBTaWduZWRuZXNzIGZpeGVzIGZvciBuZXcgZW5naW5lLgorCisJKiBzcmMvY2ZmL2NmMmFycnN0LmMsIHNyYy9jZmYvY2YyZml4ZWQuaCwgc3JjL2NmZi9jZjJmdC5jLAorCXNyYy9jZmYvY2YyZnQuaCwgc3JjL2NmZi9jZjJoaW50cy5jLCBzcmMvY2ZmL2NmMmludHJwLmM6IEFwcGx5LgorCisyMDE1LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBTaWduZWRuZXNzIGZpeGVzIGZvciBiYXNpYyBpbmZyYXN0cnVjdHVyZSBhbmQgb2xkIGVuZ2luZS4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9wc2hpbnRzLmgsIHNyYy9jZmYvY2ZmZHJpdnIuYywKKwlzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2ZmZ2xvYWQuaCwgc3JjL2NmZi9jZmZsb2FkLmMsCisJc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9jZmYvY2ZmcGFyc2UuYywgc3JjL3BzaGludGVyL3BzaHJlYy5jOiBBcHBseS4KKworMjAxNS0wMi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogSWdub3JlIGBjb3VudFNpemVQYWlycycuCisKKwlUaGlzIGlzIGhhcmQtY29kZWQgdG8gdmFsdWUgMiBpbiBgZnZhcicgdmVyc2lvbiAxLjAgKGFuZCBubyBuZXdlcgorCXZlcnNpb24gZXhpc3RzKSwgYnV0IHNvbWUgZm9udHMgc2V0IGl0IGluY29ycmVjdGx5LgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBBZGFtIFR3YXJkb2NoIDxhZGFtQGZvbnRsYWIuY29tPi4KKworMjAxNS0wMi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRW1pdCBiZXR0ZXIgZXJyb3IgY29kZSBmb3IgaW52YWxpZCBwcml2YXRlIGRpY3Qgc2l6ZS4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfcHJpdmF0ZV9kaWN0KTogUmVqZWN0IG5lZ2F0aXZlCisJdmFsdWVzIGZvciBzaXplIGFuZCBvZmZzZXQuCisKKzIwMTUtMDItMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggc2lnbmVkbmVzcyBpc3N1ZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmYW5nbGVzLmMsIHNyYy9hdXRvZml0L2FmY2prLmMsCisJc3JjL2F1dG9maXQvYWZnbG9iYWwuYywgc3JjL2F1dG9maXQvYWZoaW50cy5jLAorCXNyYy9hdXRvZml0L2FmbGF0aW4uYywgc3JjL2F1dG9maXQvYWZsYXRpbjIuYywgc3JjL2F1dG9maXQvYWZ3YXJwLmMsCisJc3JjL2F1dG9maXQvaGJzaGltLmM6IEFwcGx5LgorCisyMDE1LTAyLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gVXNlIG1hY3JvcyBmb3IgKHVuc2lnbmVkKSBmbGFncywgbm90IGVudW1lcmF0aW9ucy4KKworCVRoaXMgaGFybW9uaXplcyB3aXRoIG90aGVyIGNvZGUgaW4gRnJlZVR5cGUgKGFuZCByZWR1Y2VzIHRoZSBudW1iZXIKKwlvZiBuZWNlc3NhcnkgY2FzdHMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuaGluOiBNYWtlIGZsYWcgbWFjcm9zIHVuc2lnbmVkLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5oOiBSZXBsYWNlIGZsYWcgZW51bWVyYXRpb24gd2l0aCBtYWNyb3MuCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0ZsYWdzLCBBRl9FZGdlX0ZsYWdzKTogUmVwbGFjZSB3aXRoCisJbWFjcm9zLgorCSogc3JjL2F1dG9maXQvYWZoaW50cy5jOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmg6IFJlcGxhY2UgZmxhZyBlbnVtZXJhdGlvbnMgd2l0aCBtYWNyb3MuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMsIHNyYy9hdXRvZml0L2FmbGF0aW4yLmM6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfU2NhbGVyRmxhZ3MpOiBSZXBsYWNlIHdpdGggbWFjcm9zLgorCisyMDE1LTAyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTFdIEZpeCBzaWduZWRuZXNzIGlzc3Vlcy4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9wc2F1eC5oLCBpbmNsdWRlL2ludGVybmFsL3QxdHlwZXMuaCwKKwlzcmMvcHNhdXgvcHNvYmpzLmMsIHNyYy9wc2F1eC9wc29ianMuaCwgc3JjL3BzYXV4L3QxZGVjb2RlLmMsCisJc3JjL3R5cGUxL3QxZ2xvYWQuYywgc3JjL3R5cGUxL3QxbG9hZC5jLCBzcmMvdHlwZTEvdDFwYXJzZS5jOiBBcHBseS4KKworMjAxNS0wMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4LCB0eXBlMV0gRml4IG1pbm9yIEFGTSBpc3N1ZXMuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvdDF0eXBlcy5oIChBRk1fS2VyblBhaXJSZWMpOiBNYWtlIGluZGljZXMKKwl1bnNpZ25lZC4KKwlVcGRhdGUgdXNlcnMuCisJKEFGTV9Gb250SW5mb1JlYyk6IE1ha2UgZWxlbWVudCBjb3VudGVycyB1bnNpZ25lZC4KKwlVcGRhdGUgdXNlcnMuCisJKiBzcmMvcHNhdXgvYWZtcGFyc2UuaCAoQUZNX1ZhbHVlUmVjKTogQWRkIHVuaW9uIG1lbWJlciBmb3IgdW5zaWduZWQKKwlpbnQuCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5jIChhZm1fcGFyc2VfdHJhY2tfa2VybiwgYWZtX3BhcnNlX2tlcm5fcGFpcnMpOgorCVJlamVjdCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIG51bWJlciBvZiBrZXJuaW5nIGVsZW1lbnRzLgorCisJKiBzcmMvdHlwZTEvdDFhZm0uYywgc3JjL3Rvb2xzL3Rlc3RfYWZtLmM6IFVwZGF0ZWQuCisKKzIwMTUtMDItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCURvbid0IHVzZSBgRlRfUHRyRGlzdCcgZm9yIGxlbmd0aHMuCisKKwlVc2UgRlRfVUludCBpbnN0ZWFkLgorCisJKiBpbmNsdWRlL2ludGVybmFsL3BzYXV4LmggKFBTX1RhYmxlX0Z1bmNzUmVjLCBQU19UYWJsZVJlYywKKwlUMV9EZWNvZGVyUmVjKTogRG8gaXQuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9Gb250UmVjKTogRGl0dG8uCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfcGFyc2VfZGljdCk6IFVwZGF0ZWQuCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2V4dHJhX2l0ZW1fbG9hZF9mb250X2lkKTogRGl0dG8uCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3RhYmxlX2FkZCksIHNyYy9wc2F1eC9wc29ianMuaDogRGl0dG8uCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2JsZW5kX2F4aXNfdHlwZXMsIHBhcnNlX2VuY29kaW5nLAorCXBhcnNlX2NoaGFyc3RyaW5ncywgcGFyc2VfZGljdCk6IERpdHRvLgorCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2VfZW5jb2RpbmcsIHQ0Ml9wYXJzZV9jaGFyc3RyaW5ncywKKwl0NDJfcGFyc2VfZGljdCk6IERpdHRvLgorCisyMDE1LTAyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wc19nZXRfZm9udF92YWx1ZSk6IENsZWFuIHVwLgorCVRoaXMgaGFuZGxlcyBuZWdhdGl2ZSB2YWx1ZXMgYmV0dGVyLCBhdm9pZGluZyBtYW55IGNhc3RzLgorCisyMDE1LTAyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gRml4IFNhdmFubmFoIGJ1ZyAjNDQyODQuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxGaXgpOiBUeXBvcy4KKworMjAxNS0wMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaW5pc2ggY29tcGlsZXIgd2FybmluZyBmaXhlcyBmb3Igc2lnbmVkbmVzcyBpc3N1ZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMsIHNyYy90cnVldHlwZS90dHN1YnBpeC5jLAorCXNyYy90cnVldHlwZS90dHN1YnBpeC5oOiBBcHBseS4KKworMjAxNS0wMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYzogQWRkaW5nIG1pc3NpbmcgYHN0YXRpYycga2V5d29yZHMuCisKKzIwMTUtMDItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gTW9yZSBzaWduZWRuZXNzIGZpeGVzLgorCisJKiBpbmNsdWRlL2ludGVybmFsL3R0dHlwZXMuaCwgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmgsCisJc3JjL3RydWV0eXBlL3R0b2Jqcy5oLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYywKKwlzcmMvdHJ1ZXR5cGUvdHRvYmpzLmM6IEFwcGx5LgorCisyMDE1LTAyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFZhcmlvdXMgc2lnbmVkbmVzcyBmaXhlcy4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9mdGdsb2Fkci5oLCBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jOiBBcHBseS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogQXBwbHkuCisJKFRUX0dldF9WTWV0cmljcyk6IFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIGFzY2VuZGVycyBhbmQgZGVzY2VuZGVycworCXdoaWxlIGNvbnN0cnVjdGluZyBhZHZhbmNlIGhlaWdodC4KKworMjAxNS0wMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIEZpbmlzaCBjb21waWxlciB3YXJuaW5nIGZpeGVzIGZvciBzaWduZWRuZXNzIGlzc3Vlcy4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jLCBzcmMvYmFzZS9mdGxjZGZpbC5jLCBzcmMvYmFzZS9mdHN0cm9rZS5jOgorCUFwcGx5LgorCisyMDE1LTAyLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvdHR0YWJsZXMuaCAoVFRfT1MyKTogYGZzVHlwZScgbXVzdCBiZSBGVF9VU2hvcnQuCisKKzIwMTUtMDItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1vcmUgbWlub3Igc2lnbmVkbmVzcyB3YXJuaW5nIGZpeGVzLgorCisJKiBzcmMvYmFzZS9mdGJib3guYywgc3JjL2Jhc2UvZnRiaXRtYXAuYywgc3JjL2Jhc2UvZnR0cmlnb24uYywKKwlzcmMvYmFzZS9mdHV0aWwuYzogQXBwbHkuCisKKzIwMTUtMDItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU5leHQgcm91bmQgb2YgbWlub3IgY29tcGlsZXIgd2FybmluZyBmaXhlcy4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9mdHJmb3JrLmggKEZUX1JGb3JrX1JlZik6IENoYW5nZSBgb2Zmc2V0JyBtZW1iZXIKKwl0eXBlIHRvIGBGVF9Mb25nJy4KKwkoQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9CRUdJTik6IEFkZCBgc3RhdGljJyBrZXl3b3JkLgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0c3RyZWFtLmggKEZUX1N0cmVhbV9Qb3MpOiBSZXR1cm4gYEZUX1VMb25nJy4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jLCBzcmMvYmFzZS9mdHJmb3JrLmMsIHNyYy9iYXNlL2Z0c3RyZWFtLmM6CisJU2lnbmVkZXNzIGZpeGVzLgorCisyMDE1LTAyLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlWYXJpb3VzIG1pbm9yIHNpZ25lZG5lc3MgZml4ZXMuCisKKwkqIGluY2x1ZGUvZnRhZHZhbmMuaCwgaW5jbHVkZS9pbnRlcm5hbC9mdG9ianMuaCwKKwlzcmMvYmFzZS9mdGdsb2Fkci5jLCBzcmMvYmFzZS9mdG9ianMuYzogQXBwbHkuCisKKzIwMTUtMDItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU5ldyBgVFlQRU9GJyBtYWNyby4KKworCVRoaXMgaGVscHMgc3VwcHJlc3Mgc2lnbmVkbmVzcyB3YXJuaW5ncywgYXZvaWRpbmcgaXNzdWVzIHdpdGgKKwlpbXBsaWNpdCBjb252ZXJzaW9uIGNoYW5nZXMuCisKKwkqIGluY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgsIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLAorCWJ1aWxkcy92bXMvZnRjb25maWcuaCAoVFlQRU9GKTogRGVmaW5lLgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9QQURfRkxPT1IsIEZUX1BJWF9GTE9PUiksCisJc3JjL2F1dG9maXQvYWZ3YXJwLmggKEFGX1dBUlBFUl9GTE9PUik6IFVzZSBpdC4KKworMjAxNS0wMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHN5c3RlbS5jOiBVc2UgY2FzdHMgaW4gc3RhbmRhcmQgQyBmdW5jdGlvbiB3cmFwcGVycy4KKwkoZnRfYWxsb2MsIGZ0X3JlYWxsb2MsIGZ0X2Fuc2lfc3RyZWFtX2lvLCBGVF9TdHJlYW1fT3Blbik6IERvIGl0LgorCisyMDE1LTAyLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0NDI2MS4KKworCSogYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rIChzZXR1cCkgW3VuaXhdOiBTZXQgYENPTkZJR19TSEVMTCcgaW4gdGhlCisJZW52aXJvbm1lbnQgYWxzbyB3aGlsZSBjYWxsaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCisyMDE1LTAyLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRtZW1vcnkuaDogQWRkIHNvbWUgYEZUX09mZnNldCcgY2FzdHMuCisJKEZUX01FTV9TRVQsIEZUX01FTV9DT1BZLCBGVF9NRU1fTU9WRSwgRlRfQVJSQVlfWkVSTywgRlRfQVJSQVlfQ09QWSwKKwlGVF9NRU1fTU9WRSk6IERvIGl0LgorCisyMDE1LTAyLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gQ2xlYW4gdXAgc2lnbmVkbmVzcyBpc3N1ZXMgaW4gYGZ0ZGJnbWVtLmMnLgorCisJQWxzbyBmaXggb3RoZXIgbWlub3IgaXNzdWVzLgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChGVF9NZW1UYWJsZVJlYyk6IFJlcGxhY2UgYWxsIEZUX1VMb25nIHR5cGVzCisJd2l0aCBGVF9Mb25nIGZvciBjb25zaXN0ZW5jeS4KKwkoZnRfbWVtX3ByaW1lcyk6IENoYW5nZSB0eXBlIHRvIGBGVF9JbnQnLgorCShmdF9tZW1fY2xvc2VzdF9wcmltZSwgZnRfbWVtX3RhYmxlX3NldCk6IFVwZGF0ZWQuCisKKwkoZnRfbWVtX2RlYnVnX3BhbmljLCBmdF9tZW1fZGVidWdfYWxsb2MsIGZ0X21lbV9kZWJ1Z19mcmVlLAorCWZ0X21lbV9kZWJ1Z19yZWFsbG9jKTogVXNlIGBzdGF0aWMnIGtleXdvcmQgYW5kIGZpeCBzaWduZWRuZXNzCisJd2FybmluZ3Mgd2hlcmUgbmVjZXNzYXJ5LgorCisJKGZ0X21lbV90YWJsZV9yZXNpemUsIGZ0X21lbV90YWJsZV9uZXcsIGZ0X21lbV90YWJsZV9kZXN0cm95LAorCWZ0X21lbV90YWJsZV9nZXRfbm9kZXAsIGZ0X21lbV9kZWJ1Z19pbml0LCBGVF9EdW1wTWVtb3J5KTogRml4IHR5cGVzCisJYW5kIGFkZCBvciByZW1vdmUgY2FzdHMgdG8gYXZvaWQgc2lnbmVkbmVzcyB3YXJuaW5ncy4KKworMjAxNS0wMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIENsZWFuIHVwIHNpZ25lZG5lc3MgaW4gYXJpdGhtZXRpYyBmdW5jdGlvbnMuCisKKwlUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUgYW5kIHJlZHVjZXMgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxEaXYsIEZUX011bERpdl9Ob19Sb3VuZCwgRlRfTXVsRml4LAorCUZUX0RpdkZpeCk6IENvbnZlcnQgaW5wdXQgcGFyYW1ldGVycyB0byB1bnNpZ25lZCwgZG8gdGhlCisJY29tcHV0YXRpb24sIHRoZW4gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gc2lnbmVkLgorCShmdF9jb3JuZXJfb3JpZW50YXRpb24pOiBGaXggY2FzdHMuCisKKzIwMTUtMDItMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggU2F2YW5uYWggYnVnICM0NDE4NC4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKGNoZWNrX3RhYmxlX2RpciwgdHRfZmFjZV9sb2FkX2ZvbnRfZGlyKTogTm8KKwlsb25nZXIgcmVqZWN0IGBodG14JyBhbmQgYHZtdHgnIHRhYmxlcyB3aXRoIGludmFsaWQgbGVuZ3RoIGJ1dAorCXNhbml0aXplIHRoZW0uCisKKzIwMTUtMDItMDYgIEpvbiBBbmRlcnNvbiAgPGpvbkB3ZWJzdXBlcmdvby5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCByZWdyZXNzaW9uIGluIHRoZSBpbmNyZW1lbnRhbCBnbHlwaCBsb2FkZXIuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGb3IgaW5jcmVtZW50YWwKKwlmb250cywgdGhlIGdseXBoIGluZGV4IG1heSBiZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBnbHlwaHMKKwlpbmRpY2F0ZWQsIHNvIGd1YXJkIHRoZSBjaGVjayB3aXRoIGEgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsLgorCisyMDE1LTAyLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IHBvdGVudGlhbCBtZW1vcnkgbGVhay4KKworCVdoaWxlIHRoaXMgZG9lc24ndCBzaG93IHVwIHdpdGggRnJlZVR5cGUsIGV4YWN0bHkgdGhlIHNhbWUgY29kZQorCWxlYWtzIHdpdGggdHRmYXV0b2hpbnQncyBtb2RpZmllZCBhdXRvLWhpbnRlciBjb2RlICh3aGljaCBnZXRzIHVzZWQKKwlpbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXkpLgorCisJSXQgY2VydGFpbmx5IGRvZXNuJ3QgaGFybSBzaW5jZSBpdCBpcyBzaW1pbGFyIHRvIGFscmVhZHkgZXhpc3RpbmcKKwljaGVja3MgaW4gdGhlIGNvZGUgZm9yIGVtYmVkZGVkIGFycmF5cy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19yZWxvYWQpOiBTZXQgYG1heF9jb250b3VycycKKwlhbmQgYG1heF9wb2ludHMnIGZvciBhbGwgY2FzZXMuCisKKzIwMTUtMDEtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgVGhhaSBzY3JpcHQuCisKKwlUaGFua3MgdG8gQmVuIE1pdGNoZWxsIDxiZW5Acm9zZXR0YXR5cGUuY29tPiBmb3IgZ3VpZGFuY2Ugd2l0aCBibHVlCisJem9uZSBjaGFyYWN0ZXJzIQorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFRoYWkuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBUaGFpIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmM6IEFkZCBUaGFpIGRhdGEuCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBUaGFpIGRhdGEuCisKKzIwMTUtMDEtMjMgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3Jhc3Rlcl0gSGFuZGxlIGBGVF9SQVNURVJfRkxBR19BQScgY29ycmVjdGx5LgorCisJVGhpcyBmaXhlcyBhIGJyZWFrYWdlIGNhdXNlZCBieSB0aGUgY29tbWl0IGBbcmFzdGVyXSBSZW1vdmUKKwk1LWxldmVsIGdyYXkgQUEgbW9kZSBmcm9tIG1vbm9jaHJvbWUgcmFzdGVyaXplci4nLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPi4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChmdF9ibGFja19yZW5kZXIpOiBIYW5kbGUKKwlgRlRfUkFTVEVSX0ZMQUdfQUEnLgorCisJKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBSZW1vdmUgZ3JheSBBQSBtb2RlCisJcmVtbmFudHMuCisKKzIwMTUtMDEtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19MaWJyYXJ5KTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTUtMDEtMTggIENocmlzIExpZGRlbGwgIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgorCisJW3Jhc3Rlcl0gRml4IFNhdmFubmFoIGJ1ZyAjNDQwMjIuCisKKwlBZGQgZmFsbGJhY2sgZm9yIGdseXBocyB3aXRoIGRlZ2VuZXJhdGUgYm91bmRpbmcgYm94ZXMuCisKKwlJZiBhIGdseXBoIGhhcyBvbmx5IG9uZSB2ZXJ5IG5hcnJvdyBmZWF0dXJlLCB0aGUgYmJveCBjYW4gZW5kIHVwCisJd2l0aCBlaXRoZXIgdGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgYmJveCBiZWluZyAwLCBpbiB3aGljaCBjYXNlCisJbm8gcmFzdGVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG5vIGF0dGVtcHQgaXMgbWFkZSB0byByZW5kZXIgdGhlCisJZ2x5cGguICBUaGlzIGlzIGxlc3MgdGhhbiBpZGVhbCB3aGVuIHRoZSBkcm9wLW91dCBjb21wZW5zYXRpb24gaW4KKwl0aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgYWN0dWFsbHkgcmVzdWx0IGluIHRoZSBnbHlwaCBiZWluZworCXJlbmRlcmVkLgorCisJVGhpcyBwcm9ibGVtIGNhbiBiZSBvYnNlcnZlZCB3aXRoIHRoZSBgSScgZ2x5cGggKGdpZCA0NykgaW4gdGhlCisJQXV0b2Rlc2sgUm9tYW5TIFRydWVUeXBlIGZvbnQuCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IEFkZCBhIGZhbGxiYWNrIGlmIGVpdGhlcgorCWRpbWVuc2lvbiBpcyB6ZXJvIHRvIGV4cGxpY2l0bHkgcm91bmQgdXAvZG93biAoaW5zdGVhZCBvZiBzaW1wbHkKKwlyb3VuZCkuCisKKzIwMTUtMDEtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBzb21lIHRvb2xzIHRvIGhhbmRsZSB5ZWFybHkgY29weXJpZ2h0IG5vdGljZSB1cGRhdGVzLgorCisJV2UgYXJlIG5vdyBmb2xsb3dpbmcgdGhlIEdOVSBndWlkZWxpbmVzOiBBIG5ldyByZWxlYXNlIGF1dG9tYXRpY2FsbHkKKwltZWFucyB0aGF0IHRoZSBjb3B5cmlnaHQgeWVhciBvZiBhbGwgYWZmZWN0ZWQgZmlsZXMgZ2V0cyB1cGRhdGVkOyBpdAorCWlzIG5vIGxvbmdlciB1c2VkIHRvIHRyYWNrIHllYXJzIG9mIG1vZGlmaWNhdGlvbiBjaGFuZ2VzLgorCisJKiBzcmMvdG9vbHMvdXBkYXRlLWNvcHlyaWdodC15ZWFyOiBOZXcgUGVybCBzY3JpcHQuCisJKiBzcmMvdG9vbHMvdXBkYXRlLWNvcHlyaWdodDogTmV3IHNoZWxsIHNjcmlwdCB0aGF0IGNhbGxzCisJYHVwZGF0ZS1jb3B5cmlnaHQteWVhcicgb24gYWxsIGZpbGVzLgorCSogc3JjL3Rvb2xzL25vLWNvcHlyaWdodDogRXhjZXB0aW9ucyB0aGF0IHNob3VsZCBub3QgYmUgaGFuZGxlZCBieQorCWB1cGRhdGUtY29weXJpZ2h0JworCisyMDE1LTAxLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZCwgdXNpbmcgYSBkZXNjcmlwdGlvbiBmcm9tIEJlaGRhZC4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX2F1dG9maXR0ZXJfZG9uZSk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCisyMDE1LTAxLTE0ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVthdXRvZml0XSBBZGQgZW1iZWRkZWQgYXJyYXkgb2Ygc2VnbWVudHMgYW5kIGVkZ2VzLgorCisJQXZvaWRzIG11bHRpcGxlIG1hbGxvY3MgcGVyIHR5cGljYWwgZ2x5cGhzLgorCisJV2l0aCB0aGlzIGFuZCByZWNlbnQgY2hhbmdlcyB0byBhdm9pZCBtYWxsb2NzLCB0aGUgdGhyZWFkLXNhZmUKKwlzdGFjay1iYXNlZCBsb2FkZXIgaXMgbm93IGFzIGZhc3QgYXMgdGhlIHByZXZpb3VzIG1vZGVsIHRoYXQgaGFkIG9uZQorCWNhY2hlZCBzaW5nbGV0b24uCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfU0VHTUVOVFNfRU1CRURERUQsIEFGX0VER0VTX0VNQkVEREVEKToKKwlOZXcgbWFjcm9zLgorCShBRl9BeGlzSGludHNSZWMpOiBBZGQgdHdvIGFycmF5cyBmb3Igc2VnbWVudHMgYW5kIGVkZ2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2F4aXNfaGludHNfbmV3X3NlZ21lbnQpOiBPbmx5IGFsbG9jYXRlCisJZGF0YSBpZiBudW1iZXIgb2Ygc2VnbWVudHMgZXhjZWVkcyBnaXZlbiB0aHJlc2hvbGQgdmFsdWUuCisJKGFmX2F4aXNfaGludHNfbmV3X2VkZ2UpOiAgT25seSBhbGxvY2F0ZSBkYXRhIGlmIG51bWJlciBvZiBlZGdlcworCWV4Y2VlZHMgZ2l2ZW4gdGhyZXNob2xkIHZhbHVlLgorCShhZl9nbHlwaF9oaW50c19kb25lKTogVXBkYXRlZC4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbYXV0b2ZpdF0gQWRkIGVtYmVkZGVkIGFycmF5cyBmb3IgcG9pbnRzIGFuZCBjb250b3Vycy4KKworCVRoaXMgYXZvaWRzIGF0IGxlYXN0IHR3byBtYWxsb2MgY2FsbHMgZm9yIHR5cGljYWwgZ2x5cGhzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX1BPSU5UU19FTUJFRERFRCwgQUZfQ09OVE9VUlNfRU1CRURERUQpOgorCU5ldyBtYWNyb3MuCisJKEFGX0dseXBoSGludHNSZWMpOiBBZGQgdHdvIGFycmF5cyBmb3IgY29udG91cnMgYW5kIHBvaW50cy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19pbml0LCBhZl9nbHlwaF9oaW50c19kb25lKToKKwlVcGRhdGVkLgorCShhZl9nbHlwaF9oaW50c19yZWxvYWQpOiBPbmx5IGFsbG9jYXRlIGRhdGEgaWYgbnVtYmVyIG9mIGNvbnRvdXJzIG9yCisJcG9pbnRzIGV4Y2VlZHMgZ2l2ZW4gdGhyZXNob2xkIHZhbHVlcy4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbYXV0b2ZpdF0gQWxsb2NhdGUgaGludHMgb2JqZWN0IG9uIHRoZSBzdGFjay4KKworCVRoaXMgYXZvaWRzIG9uZSBtYWxsb2MgcGVyIGxvYWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmggKEFGX0xvYWRlclJlYyk6IENoYW5nZSB0eXBlIG9mIGBoaW50cycgdG8KKwlgQUZfR2x5cGhIaW50cycuCisJVXBkYXRlIHByb3RvdHlwZS4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2luaXQpOiBVc2UgYEFGX0dseXBoSGludHMnCisJcGFyYW1ldGVyIGluc3RlYWQgb2YgYEZUX01lbW9yeScuCisJKGFmX2xvYWRlcl9kb25lKTogRGlyZWN0bHkgcmVzZXQgYGxvYWRfaGludHMnLgorCShhZl9sb2FkZXJfbG9hZF9nKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfYXV0b2ZpdHRlcl9sb2FkX2dseXBoKTogVXNlIGxvY2FsCisJYGhpbnRzJyBvYmplY3QuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW2F1dG9maXRdIFJldXNlIHNsb3QgZ2x5cGggbG9hZGVyLgorCisJTm8gbmVlZCB0byBjcmVhdGUgYSBuZXcgZ2x5cGggbG9hZGVyOyB3ZSBjYW4gcmV1c2UgdGhlIG9uZSBmcm9tCisJYHNsb3QtPmludGVybmFsLT5sb2FkZXInLiAgSXQncyBoYXJkIHRvIHRlbGwgd2h5IGl0IHdhcyB3cml0dGVuIHRoYXQKKwl3YXkgb3JpZ2luYWxseSwgYnV0IG5ldyBjb2RlIGxvb2tzIHNvdW5kIGFuZCBjb3JyZWN0IHRvIG1lLCBhbmQKKwlhdm9pZHMgbG90cyBvZiBhbGxvY2F0aW9ucy4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2luaXQpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8KKwlgdm9pZCcuCisJRG9uJ3QgY2FsbCBgRlRfR2x5cGhMb2FkZXJfTmV3Jy4KKwkoYWZfbG9hZGVyX3Jlc2V0KTogRG9uJ3QgY2FsbCBgRlRfR2x5cGhMb2FkZXJfUmV3aW5kJy4KKwkoYWZfbG9hZGVyX2xvYWRfZyk6IFVwZGF0ZSBjb2RlIHRvIHVzZSBgaW50ZXJuYWwtPmxvYWRlcicsIHdoaWNoCisJZG9lc24ndCBuZWVkIGNvcHlpbmcgb2YgZGF0YS4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuaCAoQUZfTG9hZGVyUmVjKTogUmVtb3ZlIGBnbG9hZGVyJyBtZW1iZXIuCisJVXBkYXRlIHByb3RvdHlwZS4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfYXV0b2ZpdHRlcl9sb2FkX2dseXBoKTogVXBkYXRlZC4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbYXV0b2ZpdF0gUmVtb3ZlICh1bnVzZWQpIHN1cHBvcnQgZm9yIGNvbXBvc2l0ZSBnbHlwaHMuCisKKwlXZSBuZXZlciBoYXZlIHRvIGRlYWwgd2l0aCBjb21wb3NpdGUgZ2x5cGhzIGluIHRoZSBhdXRvaGludGVyLCBhcworCXRob3NlIHdpbGwgYmUgbG9hZGVkIGludG8gRk9STUFUX09VVExJTkUgYnkgdGhlIHJlY3Vyc2VkCisJYEZUX0xvYWRfR2x5cGgnIGZ1bmN0aW9uLgorCisJSW4gdGhlIHJhcmUgY2FzZXMgdGhhdCBGVF9MT0FEX05PX1JFQ1VSU0UgaXMgc2V0LCBpdCB3aWxsIGltcGx5CisJRlRfTE9BRF9OT19TQ0FMRSBhcyBwZXIgYEZUX0xvYWRfR2x5cGgnLCB3aGljaCB0aGVuIGltcGxpZXMKKwlGVF9MT0FEX05PX0hJTlRJTkc6CisKKwkgIC8qIHJlc29sdmUgbG9hZCBmbGFncyBkZXBlbmRlbmNpZXMgKi8KKworCSAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19SRUNVUlNFICkKKwkgICAgbG9hZF9mbGFncyB8PSBGVF9MT0FEX05PX1NDQUxFICAgICAgICAgfAorCSAgICAgICAgICAgICAgICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTsKKworCSAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApCisJICB7CisJICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19ISU5USU5HIHwKKwkgICAgICAgICAgICAgICAgICBGVF9MT0FEX05PX0JJVE1BUDsKKworCSAgICBsb2FkX2ZsYWdzICY9IH5GVF9MT0FEX1JFTkRFUjsKKwkgIH0KKworCWFuZCBhcyBzdWNoIHRoZSBhdXRvLWhpbnRlciBpcyBuZXZlciBjYWxsZWQuICBUaHVzLCB0aGUgcmVjdXJzaW9uIGluCisJYGFmX2xvYWRlcl9sb2FkX2cnIG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMuICBTbyByZW1vdmUgdGhlIGRlcHRoCisJY291bnRlciBhcyB3ZWxsLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogUmVtb3ZlIGBkZXB0aCcKKwlwYXJhbWV0ZXIuCisJPEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEU+OiBSZW1vdmUgYXNzb2NpYXRlZCBjb2RlLgorCShhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IFVwZGF0ZWQuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3Jhc3Rlcl0gRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KKworCUFwcGFyZW50bHkgYHJhcy5jUHJvZmlsZScgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4gIFRoaXMgd2lsbCBiZSB0aGUKKwljYXNlIGlmIGByYXMudG9wID09IHJhcy5jUHJvZmlsZS0+b2Zmc2V0JywgYXMgY2FuIGJlIHNlZW4gaW4KKwlgRW5kX1Byb2ZpbGUnLiAgVGhlIG92ZXJzaG9vdCBjb2RlIGludHJvZHVjZWQgaW4gYSBjaGFuZ2UgYEZpeCBCL1cKKwlyYXN0ZXJpemF0aW9uIG9mIHN1YmdseXBocyB3aXRoIGRpZmZlcmVudCBkcm9wLW91dCBtb2Rlcy4nIChmcm9tCisJMjAwOS0wNi0xOCkgdmlvbGF0ZWQgdGhpcywgYWNjZXNzaW5nIGByYXMuY1Byb2ZpbGUtPmZsYWdzJworCXVuY29uZGl0aW9uYWxseSBqdXN0IGJlZm9yZSBjYWxsaW5nIGBFbmRfUHJvZmlsZScgKHdoaWNoIHRoZW4KKwlkZXRlY3RlZCB0aGF0IGBjUHJvZmlsZScgaXMgdW5pbml0aWFsaXplZCBhbmQgZGlkbid0IHRvdWNoIGl0KS4KKworCVRoaXMgd2FzIGhhcm1sZXNzLCBhbmQgd2FzIG5vdCBkZXRlY3RlZCBieSB2YWxncmluZCBiZWZvcmUgYmVjYXVzZQorCXRoZSBvYmplY3RzIHdlcmUgYWxsb2NhdGVkIG9uIHRoZSBgcmFzdGVyX3Bvb2wnLCB3aGljaCB3YXMgYWx3YXlzCisJaW5pdGlhbGl6ZWQuICBXaXRoIHJlY2VudCBjaGFuZ2UgdG8gYWxsb2NhdGUgcmFzdGVyIGJ1ZmZlcnMgb24gdGhlCisJc3RhY2ssIHZhbGdyaW5kIG5vdyByZXBvcnRlZCB0aGlzIGludmFsaWQgYWNjZXNzLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKENvbnZlcnRfR2x5cGgpOiBEb24ndCBhY2Nlc3MgYW4KKwl1bmluaXRpYWxpemVkIGBjUHJvZmlsZScuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3Ntb290aF0gRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KKworCUxvb2tzIGxpa2UgYHJhcy5zcGFuX3knIGNvdWxkIGFsd2F5cyBiZSB1c2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCisJVGhpcyB3YXMgbmV2ZXIgZGV0ZWN0ZWQgYnkgdmFsZ3JpbmQgYmVmb3JlIGJlY2F1c2UgdGhlIGxpYnJhcnktd2lkZQorCWByYXN0ZXJfcG9vbCcgd2FzIHVzZWQgZm9yIHRoZSB3b3JrZXIgb2JqZWN0IGFuZCBgcmFzdGVyX3Bvb2wnIHdhcworCW9yaWdpbmFsbHkgemVybydlZC4gIEJ1dCBzdWJzZXF1ZW50IHJldXNlcyBvZiBpdCB3ZXJlIHVzaW5nIGBzcGFuX3knCisJdW5pbml0aWFsaXplZC4gIFdpdGggdGhlIHJlY2VudCBjaGFuZ2UgdG8gbm90IHVzZSBgcmVuZGVyX3Bvb2wnIGFuZAorCWFsbG9jYXRlIHdvcmtlciBhbmQgYnVmZmVyIG9uIHRoZSBzdGFjaywgdmFsZ3JpbmQgbm93IGRldGVjdHMgdGhpcworCXVuaW5pdGlhbGl6ZWQgYWNjZXNzLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogSW5pdGlhbGl6ZQorCWByYXMuc3Bhbl95Jy4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbYmFzZV0gRG9uJ3QgaW5pdGlhbGl6ZSB1bnVzZWQgYGRyaXZlci0+Z2x5cGhfbG9hZGVyJy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKERlc3Ryb3lfRHJpdmVyKTogRG9uJ3QgY2FsbAorCWBGVF9HbHlwaExvYWRlcl9Eb25lJy4KKwkoRlRfQWRkX01vZHVsZSk6IERvbid0IGNhbGwgYEZUX0dseXBoTG9hZGVyX05ldycuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW2Jhc2VdIERvbid0IGFsbG9jYXRlIGBsaWJyYXJ5LT5yYXN0ZXJfcG9vbCcgYW55bW9yZS4KKworCUl0J3MgdW51c2VkIGFmdGVyIHRoZSBmb2xsb3dpbmcgY29tbWl0czoKKworCSAgW3Jhc3Rlcl0gQWxsb2NhdGUgcmVuZGVyIHBvb2wgZm9yIG1vbm8gcmFzdGVyaXplciBvbiB0aGUgc3RhY2suCisJICBbcmFzdGVyXSBSZW1vdmUgNS1sZXZlbCBncmF5IEFBIG1vZGUgZnJvbSBtb25vY2hyb21lIHJhc3Rlcml6ZXIuCisKKwlUaGUgdmFsdWUgb2YgRlRfUkVOREVSX1BPT0xfU0laRSBzdGlsbCBzZXJ2ZXMgdGhlIHB1cnBvc2UgaXQgdXNlZCB0bworCXNlcnZlLCB3aGljaCBpcywgdG8gYWRqdXN0IHRoZSBwb29sIHNpemUuICBCdXQgdGhlIHBvb2wgaXMgbm93CisJYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvbiBkZW1hbmQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9OZXdfTGlicmFyeSwgRlRfRG9uZV9MaWJyYXJ5KTogSW1wbGVtZW50LgorCisyMDE1LTAxLTE0ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVtiYXNlXSBEbyBub3QgcmVvcmRlciBsaWJyYXJ5LT5yZW5kZXJlcnMgdXBvbiB1c2UuCisKKwlJbnN0ZWFkIG9mIGtlZXBpbmcgYGxpYnJhcnktPnJlbmRlcmVycycgaW4gYSBNUlUgb3JkZXIsIGp1c3QgbGVhdmUKKwlpdCBhcy1pcy4gIFRoZSBNUlUgbWFjaGluZXJ5IHdhc24ndCB0aHJlYWQtc2FmZS4KKworCVdpdGggdGhpcyBwYXRjaCwgcmFzdGVyaXppbmcgZ2x5cGhzIGZyb20gZGlmZmVyZW50IGZhY2VzIGZyb20KKwlkaWZmZXJlbnQgdGhyZWFkcyBkb2Vzbid0IGZhaWwgY2hvb3NpbmcgcmFzdGVyaXplcgorCShGVF9FcnJfQ2Fubm90X1JlbmRlcl9HbHlwaCkuCisKKwlFYXNpZXN0IHRvIHNlZSB0aGF0IGNyYXNoIHdhcyB0byBhZGQgYSBgcHJpbnRmJyAob3Igb3RoZXJ3aXNlIGxldAorCXRocmVhZCB5aWVsZCBpbiBGVF9UaHJvdyB3aXRoIGRlYnVnZ2luZyBlbmFibGVkKS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCksIHNyYy9iYXNlL2Z0b3V0bG4uYworCShGVF9PdXRsaW5lX1JlbmRlcik6IERvbid0IGNhbGwgYEZUX1NldF9SZW5kZXJlcicuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3Jhc3Rlcl0gQWxsb2NhdGUgcmVuZGVyIHBvb2wgZm9yIG1vbm8gcmFzdGVyaXplciBvbiB0aGUgc3RhY2suCisKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgcmVuZGVyX3Bvb2wnIG1lbWJlciBvZiBgRlRfTGlicmFyeScgdGhhdCBpcworCXByb3ZpZGVkIGRvd24gdG8gdGhlIHJhc3Rlcml6ZXIsIGNvbXBsZXRlbHkgaWdub3JlIHRoYXQgYW5kIGFsbG9jYXRlCisJbmVlZGVkIG9iamVjdHMgb24gdGhlIHN0YWNrIGluc3RlYWQuCisKKwlXaXRoIHRoaXMgcGF0Y2gsIHJhc3Rlcml6aW5nIGdseXBocyBmcm9tIGRpZmZlcmVudCBmYWNlcyBmcm9tCisJZGlmZmVyZW50IHRocmVhZHMgZG9lc24ndCBjcmFzaCBpbiB0aGUgbW9ub2Nocm9tZSByYXN0ZXJpemVyLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKGJsYWNrX1RSYXN0ZXIpOiBSZW1vdmUgYGJ1ZmZlcicsCisJYGJ1ZmZlcl9zaXplJywgYW5kIGB3b3JrZXInIG1lbWJlcnMuCisKKwkoZnRfYmxhY2tfcmVuZGVyKTogQ3JlYXRlIGBidWZmZXInIGxvY2FsbHkuCisJKGZ0X2JsYWNrX3Jlc2V0KTogVXBkYXRlZC4KKworMjAxNS0wMS0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbcmFzdGVyXSBSZW1vdmUgNS1sZXZlbCBncmF5IEFBIG1vZGUgZnJvbSBtb25vY2hyb21lIHJhc3Rlcml6ZXIuCisKKwlJdCB3YXMgb2ZmIGJ5IGRlZmF1bHQgYW5kIGNvdWxkbid0IGJlIHR1cm5lZCBvbiBhdCBydW50aW1lLiAgQW5kIHRoZQorCXNtb290aCByYXN0ZXJpemVyIHN1cGVyY2VkZWQgaXQgb3ZlciB0ZW4geWVhcnMgYWdvLiAgTm8gcG9pbnQgaW4KKwlrZWVwaW5nLiAgQ29tbWVudHMgc3VnZ2VzdGVkIHRoYXQgaXQgd2FzIHRoZXJlIGZvciBjb21wYXRpYmlsaXR5CisJd2l0aCBGcmVlVHlwZSAxLgorCisJNTUwIGxpbmVzIGRvd24uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HLAorCVJBU1RFUl9HUkFZX0xJTkVTKTogUmVtb3ZlIG1hY3JvcyBhbmQgYWxsIGFzc29jaWF0ZWQgY29kZS4KKworCShibGFja19UV29ya2VyKTogUmVtb3ZlIGBncmF5X21pbl94JyBhbmQgYGdyYXlfbWF4X3gnLgorCShibGFja19UUmFzdGVyKTogUmVtb3ZlIGBncmF5cycgYW5kIGBncmF5X3dpZHRoJy4KKworCShWZXJ0aWNhbF9Td2VlcF9Jbml0LCBWZXJ0aWNhbF9Td2VlcF9TcGFuLCBWZXJ0aWNhbF9Td2VlcF9Ecm9wLAorCWZ0X2JsYWNrX3JlbmRlcik6IFVwZGF0ZWQuCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IFNpbXBsaWZ5IGNvZGUuCisJKGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3MpOiBSZW1vdmVkLgorCisyMDE1LTAxLTE0ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVtzbW9vdGhdIEFsbG9jYXRlIHJlbmRlciBwb29sIGZvciBzbW9vdGggcmFzdGVyaXplciBvbiB0aGUgc3RhY2suCisKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgcmVuZGVyX3Bvb2wnIG1lbWJlciBvZiBgRlRfTGlicmFyeScgdGhhdCBpcworCXByb3ZpZGVkIGRvd24gdG8gdGhlIHJhc3Rlcml6ZXIsIGNvbXBsZXRlbHkgaWdub3JlIHRoYXQgYW5kIGFsbG9jYXRlCisJbmVlZGVkIG9iamVjdHMgb24gdGhlIHN0YWNrIGluc3RlYWQuCisKKwlXaXRoIHRoaXMgcGF0Y2gsIHJhc3Rlcml6aW5nIGdseXBocyBmcm9tIGRpZmZlcmVudCBmYWNlcyBmcm9tCisJZGlmZmVyZW50IHRocmVhZHMgZG9lc24ndCBjcmFzaCBpbiB0aGUgc21vb3RoIHJhc3Rlcml6ZXIuCisKKwlCdWdzOgorCisJICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTY3ODM5NworCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDA0MzE1CisJICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTExNjU0NzEKKwkgIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDM0CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X1RSYXN0ZXIpOiBSZW1vdmUgYGJ1ZmZlcicsCisJYGJ1ZmZlcl9zaXplJywgYGJhbmRfc2l6ZScsIGFuZCBgd29ya2VyJyBtZW1iZXJzLgorCisJKGdyYXlfcmFzdGVyX3JlbmRlcik6IENyZWF0ZSBgYnVmZmVyJywgYGJ1ZmZlcl9zaXplJywgYW5kCisJYGJhbmRfc2l6ZScgbG9jYWxseS4KKwkoZ3JheV9yYXN0ZXJfcmVzZXQpOiBVcGRhdGVkLgorCisyMDE1LTAxLTE0ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVt0cnVldHlwZV0gQWxsb2NhdGUgVFRfRXhlY0NvbnRleHQgaW4gVFRfU2l6ZSBpbnN0ZWFkIG9mIFRUX0RyaXZlci4KKworCVByZXZpb3VzbHkgdGhlIGNvZGUgaGFkIHN0aXB1bGF0aW9uIGZvciB1c2luZyBhIHBlci1UVF9TaXplIGV4ZWMKKwljb250ZXh0IGlmIGBzaXplLT5kZWJ1Zycgd2FzIHRydWUuICBCdXQgdGhlcmUgd2FzIG5vIHdheSB0aGF0CisJYHNpemUtPmRlYnVnJyBjb3VsZCAqZXZlciogYmUgdHJ1ZS4gIEFzIHN1Y2gsIHRoZSBjb2RlIHdhcyBhbHdheXMKKwl1c2luZyB0aGUgc2luZ2xldG9uIGBUVF9FeGVjQ29udGV4dCcgdGhhdCB3YXMgc3RvcmVkIGluIGBUVF9Ecml2ZXInLgorCVRoaXMgd2FzLCBjbGVhcmx5LCBub3QgdGhyZWFkc2FmZS4KKworCVdpdGggdGhpcyBwYXRjaCwgbG9hZGluZyBnbHlwaHMgZnJvbSBkaWZmZXJlbnQgZmFjZXMgZnJvbSBkaWZmZXJlbnQKKwl0aHJlYWRzIGRvZXNuJ3QgY3Jhc2ggaW4gdGhlIGJ5dGVjb2RlIGxvYWRlciBjb2RlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX1NpemVSZWMpOiBSZW1vdmUgYGRlYnVnJyBtZW1iZXIuCisJKFRUX0RyaXZlclJlYyk6IFJlbW92ZSBgY29udGV4dCcgbWVtYmVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXApOiBSZW1vdmUKKwlgVFRfRXhlY0NvbnRleHQnIGNvZGUgcmVsYXRlZCB0byBhIGdsb2JhbCBgVFRfRHJpdmVyJyBvYmplY3QuCisKKwkodHRfZHJpdmVyX2RvbmUpOiBEb24ndCByZW1vdmUgYFRUX0V4ZWNDb250ZXh0JyBvYmplY3QgaGVyZSBidXQgLi4uCisJKHR0X3NpemVfZG9uZV9ieXRlY29kZSk6IC4uLiBoZXJlLgorCisJKHR0X2RyaXZlcl9pbml0KTogRG9uJ3QgY3JlYXRlIGBUVF9FeGVjQ29udGV4dCcgb2JqZWN0IGhlcmUgYnV0IC4uLgorCSh0dF9zaXplX2luaXRfYnl0ZWNvZGUpOiAuLi4gaGVyZSwgb25seSBvbiBkZW1hbmQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9SdW5fQ29udGV4dCk6IFJlbW92ZSBkZWZ1bmN0IGRlYnVnCisJY29kZS4KKwkoVFRfTmV3X0NvbnRleHQpOiBSZW1vdmUgYFRUX0V4ZWNDb250ZXh0JyBjb2RlIHJlbGF0ZWQgdG8gYSBnbG9iYWwKKwlgVFRfRHJpdmVyJyBvYmplY3QuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoLCB0dF9sb2FkZXJfaW5pdCk6IFVwZGF0ZWQuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW2F1dG9maXRdIEFsbG9jYXRlIEFGX0xvYWRlciBvbiB0aGUgc3RhY2sgaW5zdGVhZCBvZiBBRl9Nb2R1bGUuCisKKwlTdG9wIHNoYXJpbmcgYSBnbG9iYWwgYEFGX0xvYWRlcicuICBBbGxvY2F0ZSBvbmUgb24gdGhlIHN0YWNrIGR1cmluZworCWdseXBoIGxvYWQuCisKKwlSaWdodCBub3cgdGhpcyByZXN1bHRzIGluIGFib3V0IDI1JSBzbG93ZG93biwgdG8gYmUgZml4ZWQgaW4gYQorCWZvbGxvd2luZyBjb21taXQuCisKKwlXaXRoIHRoaXMgcGF0Y2ggbG9hZGluZyBnbHlwaHMgZnJvbSBkaWZmZXJlbnQgZmFjZXMgZnJvbSBkaWZmZXJlbnQKKwl0aHJlYWRzIGRvZXNuJ3QgaW1tZWRpYXRlbHkgY3Jhc2ggaW4gdGhlIGF1dG9oaW50aW5nIGxvYWRlciBjb2RlLgorCisJQnVnczoKKworCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMTY0OTQxCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9pbml0KTogUGFzcworCWBBRl9Mb2FkZXInIGFuZCBgRlRfTWVtb3J5JyBpbnN0ZWFkIG9mIGBBRl9Nb2R1bGUnIGFzIGFyZ3VtZW50cy4KKwkoYWZfbG9hZGVyX3Jlc2V0LCBhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IEFsc28gcGFzcyBgbG9hZGVyJyBhcworCWFyZ3VtZW50LgorCShhZl9sb2FkZXJfZG9uZSk6IFVzZSBgQUZfTG9hZGVyJyBpbnN0ZWFkIG9mIGBBRl9Nb2R1bGUnIGFzCisJYXJndW1lbnQuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX2F1dG9maXR0ZXJfaW5pdCk6IERvbid0IGNhbGwKKwlgYWZfbG9hZGVyX2luaXQnLgorCShhZl9hdXRvZml0dGVyX2RvbmUpOiBEb24ndCBjYWxsIGBhZl9sb2FkZXJfZG9uZScuCisJKGFmX2F1dG9maXR0ZXJfbG9hZF9nbHlwaCk6IFVzZSBhIGxvY2FsIGBBRl9Mb2FkZXInIG9iamVjdC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuaDogSW5jbHVkZSBgYWZtb2R1bGUuaCcuCisJVXBkYXRlIHByb3RvdHlwZXMuCisJTW92ZSB0eXBlZGVmIGZvciBgQUZfTW9kdWxlJyB0by4uLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5oOiAuLi4gdGhpcyBwbGFjZS4KKwlObyBsb25nZXIgaW5jbHVkZSBgYWZsb2FkZXIuaCcuCisKKzIwMTUtMDEtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuaCAoVDQyX0RyaXZlclJlYyk6IFJlbW92ZSB1bnVzZWQgbWVtYmVyLgorCisyMDE1LTAxLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0Mzk3Ni4KKworCUFzc3VyZSB0aGF0IEZyZWVUeXBlJ3MgaW50ZXJuYWwgaW5jbHVkZSBkaXJlY3RvcmllcyBhcmUgZm91bmQgYmVmb3JlCisJYENQUEZMQUdTJyAod2hpY2ggbWlnaHQgYmUgc2V0IGJ5IHRoZSB1c2VyIGluIHRoZSBlbnZpcm9ubWVudCksIGFuZAorCWBDUFBGTEFHUycgYmVmb3JlIGBDRkxBR1MnLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKEZUX0NGTEFHUyk6IERvbid0IGFkZCBgSU5DTFVERV9GTEFHUycuCisJKEZUX0NPTVBJTEUpOiBNYWtlIHRoaXMgYSBzcGVjaWFsIHZhcmlhYmxlIGZvciBjb21waWxpbmcgb25seSB0aGUKKwlmaWxlcyBoYW5kbGVkIGluIGBmcmVldHlwZS5taycuCisJKC5jLiRPKTogUmVtb3ZlZCwgdW51c2VkLgorCisJKiBzcmMvKi9ydWxlcy5tayAoKl9DT01QSUxFKTogRml4IG9yZGVyIG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMuCisKKzIwMTUtMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJldHR5ZmluZy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKHByb2plY3QsIGR1YWxwcm9qLCBmYXN0X3Byb2plY3QsCisJZmFzdF9kdWFscHJvaik6IFJlbmFtZSB0by4uLgorCShQUk9KRUNULCBEVUFMUFJPSiwgRkFTVF9QUk9KRUNULCBGQVNUX0RVQUxQUk9KKTogLi4uIHRoaXMuCisKKzIwMTUtMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19KUk9ULCBJbnNfSlJPRik6IFNpbXBsaWZ5LgorCisJQmFzZWQgb24gYSBwYXRjaCBmcm9tIEJlaGRhZC4KKworMjAxNS0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1N4VlRMKTogU2ltcGxpZnkgZnVuY3Rpb24gY2FsbC4KKworMjAxNS0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoTm9ybWFsaXplKTogUmVtb3ZlIHVudXNlZCBhcmd1bWVudC4KKworMjAxNS0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIG1hY3JvIGV4cGFuc2lvbnMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChGVF9VTlVTRURfRVhFQyk6IFJlbW92ZSBtYWNybyBieQorCWV4cGFuc2lvbi4KKworMjAxNS0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIG1hY3JvIGV4cGFuc2lvbnMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJTlNfQVJHKTogUmVtb3ZlIG1hY3JvIGJ5IGV4cGFuc2lvbiwKKwlhZGp1c3RpbmcgZnVudGlvbiBjYWxscyB3aGVyZSBuZWNlc3NhcnkuCisJKEZUX1VOVVNFRF9BUkcpOiBSZW1vdmVkLCBubyBsb25nZXIgbmVlZGVkLgorCisyMDE1LTAxLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1vcmUgbWFjcm8gZXhwYW5zaW9ucy4KKworCUJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBCZWhkYWQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChET18qKTogRXhwYW5kIG1hY3JvcyBpbnRvIGNvcnJlc3BvbmRpbmcKKwlgSW5zXyonIGZ1bmN0aW9ucy4KKwkoVFRfUnVuSW5zKTogUmVwbGFjZSBgRE9fKicgbWFjcm9zIHdpdGggYEluc18qJyBmdW5jdGlvbiBjYWxscy4KKwkoQVJSQVlfQk9VTkRfRVJST1IpOiBSZW1vdmUgc2Vjb25kIGRlZmluaXRpb24sIHdoaWNoIGlzIG5vIGxvbmdlcgorCW5lZWRlZC4KKwkoSW5zX1NWVENBLCBJbnNfU1BWVENBLCBJbnNfU0ZWVENBKTogUmVwbGFjZWQgd2l0aC4uLgorCShJbnNfU3h5VENBKTogTmV3IGZ1bmN0aW9uLgorCisyMDE1LTAxLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSBUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSC4KKworCUJlaGRhZCBzdWdnZXN0ZWQgdGhpcyBjb2RlIHNpbXBsaWZpY2F0aW9uLCBhbmQgbm9ib2R5IG9iamVjdGVkLi4uCisKKwkqIGluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX09QVElPTl9JTlRFUlBSRVRFUl9TV0lUQ0gpOiBSZW1vdmUuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIFtUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSF06CisJUmVtb3ZlIHJlbGF0ZWQgY29kZS4KKwkoQVJSQVlfQk9VTkRfRVJST1IpOiBVc2UgZG8td2hpbGUgbG9vcC4KKworMjAxNS0wMS0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIG1hY3JvIGV4cGFuc2lvbnMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoRVhFQ19BUkdfLAorCUVYRUNfQVJHKTogUmVtb3ZlIGJ5IHJlcGxhY2luZyB3aXRoIGV4cGFuc2lvbi4KKworMjAxNS0wMS0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIG1hY3JvIGV4cGFuc2lvbnMuCisKKwlCYXNlZCBvbiBhIHBhdGNoIGZyb20gQmVoZGFkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoU0tJUF9Db2RlLCBHRVRfU2hvcnRJbnMsIE5PUk1hbGl6ZSwKKwlTRVRfU3VwZXJSb3VuZCwgUk9VTkRfTm9uZSwgSU5TX0dvdG9fQ29kZVJhbmdlLCBDVVJfRnVuY19tb3ZlLAorCUNVUl9GdW5jX21vdmVfb3JpZywgQ1VSX0Z1bmNfcm91bmQsIENVUl9GdW5jX2N1cl9wcGVtLAorCUNVUl9GdW5jX3JlYWRfY3Z0LCBDVVJfRnVuY193cml0ZV9jdnQsIENVUl9GdW5jX21vdmVfY3Z0LAorCUNVUlJFTlRfUmF0aW8sIElOU19TeFZUTCwgQ09NUFVURV9GdW5jcywgQ09NUFVURV9Sb3VuZCwKKwlDT01QVVRFX1BvaW50X0Rpc3BsYWNlbWVudCwgTU9WRV9acDJfUG9pbnQpOiBSZW1vdmUgYnkgcmVwbGFjaW5nCisJd2l0aCBleHBhbnNpb24uCisKKwkoQ3VyX0Z1bmNfcHJvamVjdCwgQ1VSX0Z1bmNfZHVhbHByb2osIENVUl9mYXN0X3Byb2plY3QsCisJQ1VSX2Zhc3RfZHVhbHByb2opOiBSZXBsYWNlIHdpdGggbWFjcm9zIGBwcm9qZWN0JywgYGR1YWxwcm9qJywKKwlgZmFzdF9wcm9qZWN0JywgYGZhc3RfZHVhbHByb2onLgorCisyMDE1LTAxLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1vcmUgbWFjcm8gZXhwYW5zaW9ucy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEVYRUNfT1BfLCBFWEVDX09QKTogUmVtb3ZlIGJ5IHJlcGxhY2luZworCXdpdGggZXhwYW5zaW9uLgorCisyMDE1LTAxLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSBjb2RlIGZvciBzdGF0aWMgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIuCisKKwlUaGlzIGlzIGEgZm9sbG93LXVwIHBhdGNoLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYywgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmgKKwlbVFRfQ09ORklHX09QVElPTl9TVEFUSUNfSU5URVJQUkVURVIsCisJVFRfQ09ORklHX09QVElPTl9TVEFUSUNfUkFTVEVSXTogUmVtb3ZlIG1hY3JvcyBhbmQgcmVsYXRlZCBjb2RlLgorCisyMDE1LTAxLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChDVVIpOiBSZW1vdmUgYnkgcmVwbGFjaW5nIHdpdGggZXhwYW5zaW9uLgorCisJVGhpcyBzdGFydHMgYSBzZXJpZXMgb2YgcGF0Y2hlcyB0aGF0IHNpbXBsaWZpZXMgdGhlIGNvZGUgb2YgdGhlCisJYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuCisKKzIwMTQtMTItMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjUuNSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTUtNScuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi41LjUuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjUuNC8yLjUuNS8sIHMvMjU0LzI1NS8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gNS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDE3OjQ6MTEuCisJKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9QQVRDSCk6IFNldCB0byA1LgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBidWlsZHMvdG9wbGV2ZWwubWsgKGRpc3QpOiBGaXggdHlwb3MuCisKKzIwMTQtMTItMjQgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEZvcm1hdHRpbmcgYW5kIG5hbm9vcHRpbWl6YXRpb25zLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYywKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmM6IFJldmlzZSBzaWduIHJlc3RvcmF0aW9uLgorCisyMDE0LTEyLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfcmVhZF9UT0MpOiBJbXByb3ZlIGZpeCBmcm9tIDIwMTQtMTItMDguCisKKzIwMTQtMTItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rIChkaXN0KTogVXNlIG9sZGVyIFBPU0lYIHN0YW5kYXJkIGZvciBgdGFyJy4KKworCUFwcGFyZW50bHksIEJTRCB0YXIgaXNuJ3QgY2FwYWJsZSB5ZXQgb2YgaGFuZGxpbmcgUE9TSVgtMS4yMDAxCisJKGNvbnRyYXJ5IHRvIEdOVSB0YXIpLCBzbyBmb3JjZSB0aGUgUE9TSVgtMS4xOTg4IGZvcm1hdC4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgU3RlcGhlbiBGaXNoZXIgPHNmaXNoZXJAU0RGLk9SRz4uCisKKzIwMTQtMTItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2Vfc2ZudHMpOiBSZWplY3QgaW52YWxpZCBUVEYgc2l6ZS4KKworMjAxNC0xMi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0dseXBoX05hbWUpOiBGaXggb2ZmLWJ5LW9uZSBjaGVjay4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgRGVubmlzIEZlbHNpbmcgPGRlbm5pc0BmZWxzaW45LmRlPi4KKworMjAxNC0xMi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMgKHQ0Ml9wYXJzZV9zZm50cyk6IENoZWNrIGBzdHJpbmdfc2l6ZScuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IERlbm5pcyBGZWxzaW5nIDxkZW5uaXNAZmVsc2luOS5kZT4uCisKKzIwMTQtMTItMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbZ3h2YWxpZF0gRml4IGEgbmFtaW5nIGNvbnZlbnRpb24gY29uZmxpY3Rpbmcgd2l0aCBmdHZhbGlkLgorCisJU2VlIHByZXZpb3VzIGNoYW5nZXNldCBmb3Igb3R2YWxpZC4KKworCSogc3JjL2d4dmFsaWQve2d4dmNvbW1uLmgsIGd4dm1vcnQuaCwgZ3h2bW9yeC5ofTogUmVwbGFjZQorCWB2YWxpZCcgYnkgYGd4dmFsaWQnLgorCSogc3JjL2d4dmFsaWQve2d4dmJzbG4uYywgZ3h2Y29tbW4uYywgZ3h2ZmVhdC5jLCBneHZqdXN0LmMsCisJZ3h2a2Vybi5jLCBneHZsY2FyLmMsIGd4dm1vcnQuYywgZ3h2bW9ydDAuYywgZ3h2bW9ydDEuYywKKwlneHZtb3J0Mi5jLCBneHZtb3J0NC5jLCBneHZtb3J0NS5jLCBneHZtb3J4LmMsIGd4dm1vcngwLmMsCisJZ3h2bW9yeDEuYywgZ3h2bW9yeDIuYywgZ3h2bW9yeDQuYywgZ3h2bW9yeDUuYywgZ3h2b3BiZC5jLAorCWd4dnByb3AuYywgZ3h2dHJhay5jfTogUmVwbGFjZSBgdmFsaWQnIGJ5IGBneHZhbGlkJyBpZgorCWl0IGlzIHR5cGVkIGFzIEdYVl9WYWxpZGF0b3IuCisKKzIwMTQtMTItMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbb3R2YWxpZF0gRml4IGEgbmFtaW5nIGNvbnZlbnRpb24gY29uZmxpY3Rpbmcgd2l0aCBmdHZhbGlkLgorCisJU29tZSBwcm90b3R5cGVzIGluIGZ0dmFsaWQuaCB1c2UgYHZhbGlkJyBmb3IgdGhlIHZhcmlhYmxlcworCXR5cGVkIGFzIEZUX1ZhbGlkYXRvci4gIFRoZWlyIGltcGxlbWVudGF0aW9ucyBpbiBzcmMvYmFzZS8KKwlmdG9ianMuYyBhbmQgdXRpbGl6YXRpb25zIGluIHNyYy9zZm50L3R0Y21hcC5jIGRvIHNpbWlsYXIuCisKKwlTb21lIG1hY3JvcyBpbiBvdHZjb21tbi5oIGFzc3VtZSB0aGUgZXhpc3Qgb2YgdGhlIHZhcmlhYmxlCisJYHZhbGlkJyB0eXBlZCBhcyBPVFZfVmFsaWRhdG9yIGluIHRoZSBjYWxsZXIuCisKKwlNaXhpbmcgdGhlc2UgdHdvIGNvbnZlbnRpb25zIGNhdXNlIGludmFsaWQgcG9pbnRlciBjb252ZXJzaW9uCisJYW5kIHVuZXhwZWN0ZWQgU0VHViBpbiBsb25nam1wLiAgVG8gcHJldmVudCBpdCwgYWxsIHZhcmlhYmxlcworCXR5cGVkIGFzIE9UVl9WYWxpZGF0b3IgYXJlIHJlbmFtZWQgdG8gYG90dmFsaWQnLgorCisJKiBzcmMvb3R2YWxpZC9vdHZjb21tbi5oOiBSZXBsYWNlIGB2YWxpZCcgYnkgYG90dmFsaWQnLgorCSogc3JjL290dmFsaWQve290dmNvbW1uLmMsIG90dmJhc2UuYywgb3R2Z2RlZi5jLCBvdHZncG9zLmMsCisJb3R2Z3N1Yi5jLCBvdHZqc3RmLmMsIG90dm1hdGguY306IFJlcGxhY2UgYHZhbGlkJyBieSBgb3R2YWxpZCcKKwlpZiBpdCBpcyB0eXBlZCBhcyBPVFZfVmFsaWRhdG9yLgorCisyMDE0LTEyLTA5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2Z0dmFsaWRdIEludHJvZHVjZSBGVF9USFJPVygpIGluIEZUX0lOVkFMSURfWFhYIG1hY3Jvcy4KKworCU9yaWdpbmFsIHBhdGNoIGlzIGRlc2lnbmVkIGJ5IFdlcm5lciBMZW1iZXJnLiAgRXh0cmEgcGFydAorCWZvciBvdHZhbGlkIGFuZCBneHZhbGlkIGFyZSBhZGRlZCBieSBzdXp1a2kgdG9zaGl5YSwgc2VlCisJZGlzY3Vzc2lvbjoKKwlodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNC0xMi9tc2cwMDAwMi5odG1sCisJaHR0cDovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTQtMTIvbXNnMDAwMDcuaHRtbAorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0dmFsaWQuaDogSW50cm9kdWNlIEZUX1RIUk9XKCkgaW4gRlRfSU5WQUxJRF8oKS4KKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmg6IERpdHRvLgorCSogc3JjL290dmFsaWQvb3R2Y29tbW4uaDogRGl0dG8uCisKKzIwMTQtMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwY2ZdIEZpeCBTYXZhbm5haCBidWcgIzQzNzc0LgorCisJV29yayBhcm91bmQgYGZlYXR1cmVzJyBvZiBYMTEncyBgcGNmV3JpdGVGb250JyBhbmQgYHBjZlJlYWRGb250JworCWZ1bmN0aW9ucy4gIFNpbmNlIHRoZSBQQ0YgZm9ybWF0IGRvZXNuJ3QgaGF2ZSBhbiBvZmZpY2lhbAorCXNwZWNpZmljYXRpb24sIHdlIGhhdmUgdG8gZXhhY3RseSBmb2xsb3cgdGhlc2UgZnVuY3Rpb25zJyBiZWhhdmlvdXIuCisKKwlUaGUgcHJvYmxlbSB3YXMgdW52ZWlsZWQgd2l0aCBhIHBhdGNoIGZyb20gMjAxNC0xMS0wNiwgZml4aW5nIGlzc3VlCisJIzQzNTQ3LgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX3JlYWRfVE9DKTogRG9uJ3QgY2hlY2sgdGFibGUgc2l6ZSBmb3IgbGFzdAorCWVsZW1lbnQuICBJbnN0ZWFkLCBhc3NpZ24gcmVhbCBzaXplLgorCisyMDE0LTEyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBCb3JsYW5kJ3MgQysrIGNvbXBpbGVyLgorCisJU2VlCisKKwkgIGh0dHA6Ly9xYy5lbWJhcmNhZGVyby5jb20vd2MvcWNtYWluLmFzcHg/ZD0xMTg5OTgKKworCWZvciBCb3JsYW5kJ3MgYnVnIHRyYWNrZXIgZW50cnkuCisKKwlSZXBvcnRlZCBieSBZdWxpYW5hIFppZ2FuZ2lyb3ZhIDx6aWdhbmdpcm92YUBpbmJveC5ydT4sCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTQtMDQvbXNnMDAwMDEuaHRtbC4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9mdHZhbGlkLmggKEZUX1ZhbGlkYXRvclJlYyksIHNyYy9zbW9vdGgvZnRncmF5cy5jCisJKGdyYXlfVFdvcmtlcl8pOiBNb3ZlIGBmdF9qbXBfYnVmJyBmaWVsZCB0byBiZSB0aGUgZmlyc3QgZWxlbWVudC4KKworMjAxNC0xMi0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBEZWNvcmF0ZSBoZXggY29uc3RhbnRzIHdpdGggYFUnIGFuZCBgTCcgd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMTQtMTItMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJldmVudCBtZW1vcnkgbGVhayBmb3IgYnVnZ3kgZm9udHMuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9kb25lKTogVW5jb25kaXRpb25hbGx5IGNhbGwKKwlgdHRfc2l6ZV9kb25lX2J5dGVjb2RlJy4KKworMjAxNC0xMi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNS40IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNS00Jy4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjUuNC4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNS4zLzIuNS40Lywgcy8yNTMvMjU0Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA0LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTc6MzoxMS4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDQuCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTQtMTItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCWRvY3MvQ0hBTkdFUzogVXBkYXRlZCwgZm9ybWF0dGVkLgorCisyMDE0LTEyLTA0ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW2NmZl0gTW9kaWZ5IGFuIEZUX0FTU0VSVC4KKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9tYXApOiBBZnRlciB0aGUgZml4IGZvciBTYXZhbm5haAorCWJ1ZyAjNDM2NjEsIHRoZSB0ZXN0IGZvbnQgYC4uLmFzcGFydGFtLm90Zicgc3RpbGwgdHJpZ2dlcnMgYW4KKwlGVF9BU1NFUlQuICBTaW5jZSBoaW50bWFwIHN0aWxsIHdvcmtzIHdpdGggY291bnQ9PTAsIC4uLgorCShjZjJfZ2x5cGhwYXRoX2xpbmVUbywgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKTogLi4uIGFkZCB0aGF0IHRlcm0gdG8KKwlzdXBwcmVzcyB0aGUgYXNzZXJ0LgorCisyMDE0LTEyLTA0ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjNDM2NjEuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRIU1RFTSwKKwljZjJfY21kVlNURU0sIGNmMl9jbWRISU5UTUFTSz46IERvbid0IGFwcGVuZCB0byBzdGVtIGFycmF5cyBhZnRlcgorCWhpbnRtYXNrIGlzIGNvbnN0cnVjdGVkLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2J1aWxkKTogQWRkIGRlZmVuc2l2ZSBjb2RlIHRvCisJYXZvaWQgcmVhZGluZyBwYXN0IGVuZCBvZiBoaW50bWFzay4KKworMjAxNC0xMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE0LTEyLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gQmV0dGVyIGZpeCBmb3IgY29udmVyc2lvbiBzcGVjaWZpZXJzIGluIGRlYnVnIG1lc3NhZ2VzLgorCisJVXNpbmcgYCVsZCcgZm9yIHBvaW50ZXIgZGlmZmVyZW5jZXMgY2F1c2VzIHdhcm5pbmdzIG9uIDMyYml0CisJcGxhdGZvcm1zLiAgVGhlIGNvcnJlY3QgdHlwZSB3b3VsZCBiZSAodGhlIHJlbGF0aXZlbHkgbmV3KSBgJXRkJywKKwlob3dldmVyLCB0aGlzIGlzIG1pc3Npbmcgb24gc29tZSBpbXBvcnRhbnQgcGxhdGZvcm1zLgorCisJVGhpcyBwYXRjaCBpbXByb3ZlcyB0aGUgY2hhbmdlIGZyb20gMjAxNC0xMS0yOC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChBRl9JTkRFWF9OVU0pOiBVc2UgYGludCcgdHlwZWNhc3QuICBPdXIKKwlwb2ludGVyIGRpZmZlcmVuY2VzIGFyZSBhbHdheXMgc3VmZmljaWVudGx5IHNtYWxsLgorCShhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cywgYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cywKKwlhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2UpOiBSZXZlcnQgdG8gYCVkJyBhbmQgdXNlIGBBRl9JTkRFWF9OVU0nLgorCisyMDE0LTEyLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGVF9TZm50X1RhZzogcy9mdF9zZm50X3h4eC9GVF9TRk5UX1hYWC8gZm9yIG9ydGhvZ29uYWxpdHkuCisKKwlBbGwgcHVibGljIEZyZWVUeXBlIGVudW1lcmF0aW9uIGFuZCBmbGFnIHZhbHVlcyBhcmUgdXBwZXJjYXNlLi4uCisKKwkqIGluY2x1ZGUvdHR0YWJsZXMuaCAoRlRfU2ZudF9UYWcpOiBJbXBsZW1lbnQgaXQuICBGb3IgYmFja3dhcmRzCisJY29tcGF0aWxpYml0eSwgcmV0YWluIHRoZSBvbGQgdmFsdWVzIGFzIG1hY3Jvcy4KKworCSogc3JjL2Jhc2UvZnRmc3R5cGUuYyAoRlRfR2V0X0ZTVHlwZV9GbGFncyksIHNyYy9zZm50L3NmZHJpdmVyLmMKKwkoZ2V0X3NmbnRfdGFibGUpOiBVcGRhdGVkLgorCisyMDE0LTEyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvKjogSW1wcm92ZSBzdHJ1Y3R1cmUgb2YgZG9jdW1lbnRhdGlvbi4KKworCS4gQWRkIGFuZCB1cGRhdGUgbWFueSBgPE9yZGVyPicgdGFncy4KKwkuIEFwcGx5IHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KKwkuIFJlbW92ZSBkZXRhaWxzIHRvIGRlcHJlY2F0ZWQgKG9yIG5ldmVyIGltcGxlbWVudGVkKSBkYXRhLgorCisyMDE0LTEyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEFsd2F5cyBoYW5kbGUgYDxPcmRlcj4nIHNlY3Rpb24gZWxlbWVudHMuCisKKwlQcmV2aW91c2x5LCB0aG9zZSBlbGVtZW50cyB3ZXJlIGhhbmRsZWQgb25seSBmb3Igc2VjdGlvbnMgcHJlc2VudCBpbgorCWEgYDxTZWN0aW9ucz4nIGNoYXB0ZXIgZWxlbWVudC4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkgKENvbnRlbnRQcm9jZXNzb3I6OmZpbmlzaCk6CisJSW1wbGVtZW50IGl0LgorCisyMDE0LTEyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIFByb3Blcmx5IGhhbmRsZSBlbXB0eSByb3dzIGluIFN5bm9wc2lzLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5IChIdG1sRm9ybWF0dGVyOjpzZWN0aW9uX2VudGVyKTogRW1pdAorCWAmbmJzcDsnIGZvciBlbXB0eSBmaWVsZHMuCisKKzIwMTQtMTItMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gVGhpbmtvLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSAoRG9jQmxvY2s6OmdldF9tYXJrdXBfd29yZHNfYWxsKToKKwlFbWl0IGAvZW1wdHkvJyBzdHJpbmcgZm9yIGZpcnN0IGVsZW1lbnQgYWxzby4KKworMjAxNC0xMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY21ha2VyXSBIb25vdXIgZW1wdHkgbGluZXMgaW4gYDxPcmRlcj4nIHNlY3Rpb24gZWxlbWVudC4KKworCVRoaXMgZ3JlYXRseSBpbXByb3ZlcyB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIGBTeW5vcHNpcycgbGlua3MuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IChEb2NCbG9jazo6Z2V0X21hcmt1cF93b3Jkc19hbGwpOgorCUluc2VydCBzdHJpbmcgYC9lbXB0eS8nIGJldHdlZW4gaXRlbXMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9mb3JtYXR0ZXIucHkgKEZvcm1hdHRlcjo6c2VjdGlvbl9kdW1wKTogTWFrZSBpdAorCXJvYnVzdCBhZ2FpbnN0IG5vbmV4aXN0ZW50IGtleXMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6OnNlY3Rpb25fZW50ZXIpOiBFbWl0CisJZW1wdHkgPHRkPiBlbGVtZW50cyBmb3IgYC9lbXB0eS8nLgorCisyMDE0LTEyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEVuc3VyZSBQeXRob24gMyBjb21wYXRpYmlsaXR5LgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSAoQ29udGVudFByb2Nlc3Nvcjo6c2V0X3NlY3Rpb24sCisJQ29udGVudFByb2Nlc3Nvcjo6ZmluaXNoKTogUmVwbGFjZSBgaGFzX2tleScgZnVuY3Rpb24gd2l0aCBgaW4nCisJa2V5d29yZC4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL2Zvcm1hdHRlci5weSAoRm9ybWF0dGVyOjpfX2luaXRfXyk6IFJlcGxhY2UKKwlzb3J0aW5nIGZ1bmN0aW9uIHdpdGggYSBrZXkgZ2VuZXJhdG9yLgorCShGb3JtYXR0ZXI6OmFkZF9pZGVudGlmaWVyKTogUmVwbGFjZSBgaGFzX2tleScgZnVuY3Rpb24gd2l0aCBgaW4nCisJa2V5d29yZC4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoSHRtbEZvcm1hdHRlcjo6aHRtbF9zb3VyY2VfcXVvdGUpOgorCVJlcGxhY2UgYGhhc19rZXknIGZ1bmN0aW9uIHdpdGggYGluJyBrZXl3b3JkLgorCShIdG1sRm9ybWF0dGVyOjppbmRleF9leGl0LCBIdG1sRm9ybWF0dGVyOjpzZWN0aW9uX2VudGVyKTogVXNlCisJaW50ZWdlciBkaXZpc2lvbi4KKwlzLzw+Lz4vLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdXRpbHMucHk6IEltcG9ydCBgaXRlcnRvb2xzJy4KKwkoaW5kZXhfc29ydCk6IFJlcGxhY2VkIGJ5Li4uCisJKGluZGV4X2tleSk6IC4uLiB0aGlzIG5ldyBrZXkgZ2VuZXJhdG9yIChkb2luZyBleGFjdGx5IHRoZSBzYW1lKS4KKworMjAxNC0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY21ha2VyXSBEb24ndCBvdXRwdXQgYSBibG9jayBtdWx0aXBsZSB0aW1lcy4KKworCVRoaXMgYnVnIHdhcyBoaWRkZW4gYnkgbm90IHByb2Nlc3NpbmcgYWxsIGxpbmVzIG9mIGA8T3JkZXI+JyBibG9ja3MuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9mb3JtYXR0ZXIucHkgKEZvcm1hdHRlcjo6c2VjdGlvbl9kdW1wKTogRmlsdGVyCisJb3V0IGZpZWxkIG5hbWVzLgorCisyMDE0LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIFVzZSBmaWVsZCB2YWx1ZXMgYXMgSFRNTCBsaW5rIHRhcmdldHMgd2hlcmUgcG9zc2libGUuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6Om1ha2VfYmxvY2tfdXJsKToKKwlBY2NlcHQgc2Vjb25kLCBvcHRpb25hbCBhcmd1bWVudCB0byBzcGVjaWZ5IGEgbmFtZS4KKwkoSHRtbEZvcm1hdHRlcjo6aHRtbF9zb3VyY2VfcXVvdGUpOiBMaW5rIHRvIGZpZWxkIElEIGlmIHBvc3NpYmxlLgorCShIdG1sRm9ybWF0dGVyOjpwcmludF9odG1sX2ZpZWxkX2xpc3QpOiBFbWl0IGBpZCcgYXR0cmlidXRlLgorCisyMDE0LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEFsbG93IGVtcHR5IGxpbmVzIGluIGA8T3JkZXI+JyBibG9ja3MuCisKKwlCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIHN1Z2dlc3RlZCBvcmRlciBvZiBlbnRyaWVzIHN0b3BwZWQgYXQgdGhlCisJZmlyc3QgZW1wdHkgbGluZS4KKworCU9idmlvdXNseSwgbm9ib2R5IG5vdGljZWQgdGhhdCB0aGlzIHByb2JsZW0gY2F1c2VkIGEgbXVjaCByZWR1Y2VkCisJc2V0IG9mIGxpbmtzIGluIHRoZSBgU3lub3BzaXMnIHNlY3Rpb25zOyBpbiBwYXJ0aWN1bGFyLCB0aGUKKwlgPE9yZGVyPicgYmxvY2tzIGNvbnRhaW4gYSBsb3Qgb2YgZW50cmllcyB0aGF0IHdvdWxkbid0IGJlIGxpc3RlZAorCW90aGVyd2lzZS4uLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSAoRG9jQmxvY2s6OmdldF9tYXJrdXBfd29yZHNfYWxsKToKKwlOZXcgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFsbCBpdGVtcy4KKwkoRG9jU2VjdGlvbjo6cHJvY2Vzcyk6IFVzZSBpdC4KKworMjAxNC0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weSAoY29sdW1uKSBbRm9ybWF0IDJdOiBGaXggcmVnZXhwLgorCisJQWZ0ZXIgdGhlIHNpbmdsZSBhc3RlcmlzayB0aGVyZSBtdXN0IGJlIG5vIG90aGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZworCWFzdGVyaXNrLgorCisyMDE0LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHk6IEltcHJvdmUgQ1NTIGZvciB2ZXJ0aWNhbCBzcGFjaW5nLgorCisyMDE0LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEltcHJvdmUgSFRNTCBjb2RlIGZvciB0YWJsZSBvZiBjb250ZW50cy4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogSW50cm9kdWNlIGEgbmV3IHRhYmxlIGNsYXNzIGB0b2MnLAorCXRvZ2V0aGVyIHdpdGggcHJvcGVyIENTUy4KKworMjAxNC0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY21ha2VyXSBQcm92aWRlIGhpZ2hlci1sZXZlbCBtYXJrdXAgYW5kIHNpbXBsaWZ5IEhUTUwuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHk6IEluc3RlYWQgb2YgdXNpbmcgZXh0cmFuZW91cyBgPGRpdj4nCisJZWxlbWVudHMsIHVzZSBDU1MgZGVzY2VuZGFudHMgKG9mIGNsYXNzIGBzZWN0aW9uJykgdG8gZm9ybWF0IHRoZQorCWRhdGEuCisKKwlBbHNvIHJlbW92ZSByZWR1bnRhbnQgPHA+IGFuZCA8YnI+IGVsZW1lbnRzLCByZXBsYWNpbmcgdGhlbSB3aXRoCisJcHJvcGVyIENTUy4KKworCUdsb2JhbGx5IHJlZHVjZSBwYWdlIHdpZHRoIHRvIDc1JS4KKworCShibG9ja19oZWFkZXIpOiBSZW5hbWUgPGRpdj4gY2xhc3MgdG8gYHNlY3Rpb24nLgorCisyMDE0LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEFkZCBgdG9wJyBsaW5rcyBhZnRlciBibG9ja3MuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKGJsb2NrX2Zvb3Rlcl9taWRkbGUpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTQtMTEtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogSW1wcm92ZSBDU1MgZm9yIGZpZWxkcy4KKworCU1ha2UgZmllbGRzIGFsaWduIGhvcml6b250YWxseSByZWxhdGl2ZSB0byBmdWxsIGxpbmUgd2lkdGguCisKKzIwMTQtMTEtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogRml4IGluZGV4IGFuZCBUT0MgdGVtcGxhdGVzLgorCisJVGhpcyB0aGlua28gd2FzIGludHJvZHVjZWQgMjAxNC0xMS0yNy4KKworMjAxNC0xMS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY21ha2VyXSBGb3JtYXQgZmllbGQgbGlzdHMgd2l0aCBDU1MuCisKKwlUaGlzIGFsc28gc2ltcGxpZmllcyB0aGUgaW5zZXJ0ZWQgSFRNTCBjb2RlLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5CisJKEh0bWxGb3JtYXR0ZXI6OnByaW50X2h0bWxfZmllbGRfbGlzdCk6IERvIGl0LgorCisyMDE0LTExLTI4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IGNvbXBpbGVyIHdhcm5pbmcgdG8gdGhlIGNvbXBhcmlzb24gYmV0d2VlbiBzaWduZWQgYW5kCisJdW5zaWduZWQgdmFyaWFibGUuCisKKwkqIHNyYy9wZnIvcGZyc2JpdC5jIChwZnJfc2xvdF9sb2FkX2JpdG1hcCk6IEZpeCB0aGUgY29tcGFyaXNvbgorCWJldHdlZW4gYHlwb3MgKyB5c2l6ZScgYW5kIEZUX0lOVF97TUFYLE1JTn0uCisKKzIwMTQtMTEtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gUmVwbGFjZSBlbXB0eSBgPHRkPicgd2l0aCBDU1MuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6OnNlY3Rpb25fZW50ZXIpOiBEbworCWl0LgorCisyMDE0LTExLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIFJlcGxhY2Ugc29tZSBgPHRhYmxlPicgdGFncyB3aXRoIGA8aDQ+JyBhbmQgYDxkaXY+Jy4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAobWFya2VyXyopOiBVc2UgYDxoND4nLgorCShzb3VyY2VfKik6IFVzZSBgPGRpdj4nLgorCShIdG1sRm9ybWF0dGVyOjpibG9ja19lbnRlcik6IHMvPGg0Pi88aDM+Ly4KKworMjAxNC0xMS0yOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBjb21waWxlciB3YXJuaW5nIHRvIGNvbnZlcnNpb24gc3BlY2lmaWVycyBpbiBkZWJ1ZyBtZXNzYWdlcy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyk6IEFkZCBsZW5ndGgKKwltb2RpZmllciB0byBkdW1wIGxvbmcgaW50ZWdlcnMuCisJKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMsIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMpOiBEaXR0by4KKworMjAxNC0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5OiBVc2UgbW9yZSBDU1MgZm9yIGluZGV4LgorCisyMDE0LTExLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIFJlcGxhY2UgYG5hbWUnIGF0dHJpYnV0ZSBvZiBgPGE+JyB3aXRoIGBpZCcuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6OmJsb2NrX2VudGVyKTogRG8gaXQuCisKKzIwMTQtMTEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogUmVtb3ZlIHJlbWFpbmluZyBgd2lkdGgnIGF0dHJpYnV0ZXMuCisKKwlGb3IgYEluZGV4JyBhbmQgYFRPQycgbGlua3MsIHdlIG5vdyBzaW1wbHkgdXNlIHRoZSBgdGV4dC1hbGlnbicgQ1NTCisJcHJvcGVydHkgb2YgYDx0ZD4nIHRvIGVuZm9yY2UgZmx1c2gtbGVmdCBhbmQgZmx1c2gtcmlnaHQsCisJZWxpbWluYXRpbmcgdGhlIGhhY2sgd2l0aCBhbiBlbXB0eSwgZnVsbC13aWR0aCBgPHRkPicgZWxlbWVudAorCWluYmV0d2Vlbi4KKworCVRoZSBjaGFuZ2UgYWxzbyBlbmZvcmNlcyB0aGUgc2FtZSAoc21hbGxlcikgc2l6ZSBmb3IgYWxsIGluZGV4IGFuZAorCVRPQyBsaW5rcy4KKworMjAxNC0xMS0yNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2NmZi9jZjJmb250LmM6IEluY2x1ZGUgYGZ0Y2FsYy5oJyB0byB1c2UgRlRfTVNCKCksCisJY2YyZm9udC5jIGNvdWxkIG5vdCBmaW5kIGl0IHVuZGVyIGBtYWtlIG11bHRpJyBidWlsZC4KKworMjAxNC0xMS0yNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBSZW1vdmUKKwl1bnJlcXVpcmVkIG5lZ2F0aXZlIHZhbHVlIGNoZWNrIGZvciBgd2lkdGgnIGFuZCBgaGVpZ2h0Jy4KKworMjAxNC0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5OiBNb3JlIEhUTUwgdGFibGUgcmVmYWN0b3JpbmcuCisKKwlSZXBsYWNlIHNvbWUgYDx0YWJsZT4nIHRhZ3Mgd2l0aCBgPGRpdj4nIHRvIHNpbXBsaWZ5IHN0cnVjdHVyZS4KKworCU1vdmUgYGJnY29sb3InIGF0dHJpYnV0ZSB0byBDU1MuCisKKwlSZXBsYWNlIG1vc3QgYHdpZHRoJyBhdHRyaWJ1dGVzIHdpdGggQ1NTLiAgVGhlIHJlbWFpbmluZyBpbnN0YW5jZXMKKwkocHJvdmlkaW5nIGEgc2ltaWxhciBlZmZlY3QgYXMgTGFUZVgncyBgXGhmaWxsJyBjb21tYW5kKSBhcmUgcmVtb3ZlZAorCWluIGEgbGF0ZXIgcGF0Y2guCisKKzIwMTQtMTEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogUmVwbGFjZSA8Zm9udD4gd2l0aCBDU1MuCisKKzIwMTQtMTEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogQ2VudGVyIDx0YWJsZT4gd2l0aCBDU1MuCisKKzIwMTQtMTEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogUmVwbGFjZSBgPGNlbnRlcj4nIHdpdGggYDxkaXY+Jy4KKworMjAxNC0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5OiBSZW1vdmUgcmVkdW5kYW50IGA8Y2VudGVyPicgdGFncy4KKworCVRoaXMgc3RhcnRzIGEgc2VyaWVzIG9mIGNvbW1pdHMgaW50byB0aGUgZGlyZWN0aW9uIG9mIGdlbmVyYXRpbmcKKwl2YWxpZCBIVE1MIDUgY29kZSwgZXNwZWNpYWxseSB1c2luZyBtdWNoIG1vcmUgQ1NTLgorCisyMDE0LTExLTI3ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUHJldmVudCB0b28gbmVnYXRpdmUgdmFsdWVzICg8IEZUX0lOVF9NSU4pIGluIGJpdG1hcCBtZXRyaWNzLAorCXN1Z2dlc3RlZCBieSBBbGV4ZWkuCisKKwkqIHNyYy9wZnIvcGZyc2JpdC5jIChwZnJfc2xvdF9sb2FkX2JpdG1hcCk6IFByZXZlbnQgdG9vCisJbmVnYXRpdmUgdmFsdWVzIGluIGB4cG9zJyBhbmQgYHlwb3MgKyB5c2l6ZScuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IFByZXZlbnQKKwl0b28gbmVnYXRpdmUgdmFsdWVzIGluIGB4X2xlZnQnIGFuZCBgeV90b3AnLiAgRWl0aGVyIG5lZ2F0aXZlCisJdmFsdWVzIGluIGB3aWR0aCcgYW5kIGBoZWlnaHQnIGFyZSBjaGVja2VkLgorCisyMDE0LTExLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIFByb2R1Y2UgYmV0dGVyIEhUTUwgY29kZS4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogQWx3YXlzIHVzZSBkb3VibGUgcXVvdGVzIGZvcgorCWF0dHJpYnV0ZSB2YWx1ZXMuCisJKHNvdXJjZV9mb290ZXIpOiBDbG9zZSBgdGQnIGFuZCBgdHInIGdyb3Vwcy4KKworMjAxNC0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVXNlIGJldHRlciB3YXkgdG8gZGlzYWJsZSBjcmVhdGlvbiBvZiAucHljIGZpbGVzIGZvciBgbWFrZSByZWZkb2MnLgorCisJUHl0aG9uIDIuNiB3YXMgcmVsZWFzZWQgaW4gMjAwOC4uLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKHJlZmRvYyk6IFVzZSBweXRob24ncyBgLUInIG9wdGlvbi4KKworCSogYnVpbGRzL2RldGVjdC5tayAoc3RkX3NldHVwLCBkb3Nfc2V0dXApOiBNZW50aW9uIHJlcXVpcmVkIHB5dGhvbgorCXZlcnNpb24gZm9yIGByZWZkb2MnIHRhcmdldC4KKworMjAxNC0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weSAocmVfYm9sZCwgcmVfaXRhbGljKTogVXNlCisJbm9uLWdyb3VwaW5nIHBhcmVudGhlc2VzLgorCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoSHRtbEZvcm1hdHRlcjo6bWFrZV9odG1sX3dvcmQpOgorCVVwZGF0ZWQuCisKKzIwMTQtMTEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9HbHlwaF9OYW1lKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKwlJbnRyb2RydWNlZCBpbiBwcmV2aW91cyBjaGFuZ2UuICBSZXBvcnRlZCBieSBBbGV4ZWkuCisKKzIwMTQtMTEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjLyo6IEFkZCBjaGVja3MgZm9yIHBhcmFtZXRlcnMgb2YgQVBJIGZ1bmN0aW9ucyB3aGVyZSBtaXNzaW5nLgorCisJYEFQSSBmdW5jdGlvbnMnIGFyZSBmdW5jdGlvbnMgdGFnZ2VkIHdpdGggYEZUX0VYUE9SVF9ERUYnLgorCisJQmVzaWRlcyB0cml2aWFsIGZpeGVzLCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgYXJlIGluY2x1ZGVkLCB0b28uCisKKwkqIHNyYy9iYXNlL2Z0YmRmLmMgKEZUX0dldF9CREZfQ2hhcnNldF9JRCwgRlRfR2V0X0JERl9Qcm9wZXJ0eSk6IFNldAorCWVycm9yIGNvZGUgaWYgbm8gc2VydmljZSBpcyBhdmFpbGFibGUuCisKKwkqIHNyYy9iYXNlL2Z0aW5pdC5jIChGVF9Eb25lX0ZyZWVUeXBlKTogQ2hhbmdlIHJldHVybiB2YWx1ZSBmb3IKKwlpbnZhbGlkIGBsaWJyYXJ5JyBwYXJhbWV0ZXIgdG8gYEludmFsaWRfTGlicmFyeV9IYW5kbGUnLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTmV3X1NpemUpOiBDaGFuZ2UgcmV0dXJuIHZhbHVlIGZvciBpbnZhbGlkCisJYGFzaXplJyBwYXJhbWV0ZXIgdG8gYEludmFsaWRfQXJndW1lbnQnLgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfQ29weSk6IENoYW5nZSByZXR1cm4gdmFsdWUgZm9yCisJaW52YWxpZCBgc291cmNlJyBhbmQgYHRhcmdldCcgcGFyYW1ldGVycyB0byBgSW52YWxpZF9PdXRsaW5lJy4KKwkoRlRfT3V0bGluZV9Eb25lX0ludGVybmFsKTogQ2hhbmdlIHJldHVybiB2YWx1ZSBmb3IgaW52YWxpZAorCWBvdXRsaW5lJyBwYXJhbWV0ZXIgdG8gYEludmFsaWRfT3V0bGluZScuCisKKzIwMTQtMTEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmM6IFVzZSBzaW5nbGUgY2FsbHMgdG8gYEZUX1RSQUNFJy4KKworMjAxNC0xMS0yNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmouYyAoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IEFkZGl0aW9uYWwKKwlvdmVyZmxvdyBjaGVjayBpbiB0aGUgc3VtbWF0aW9uIG9mIFBPU1QgZnJhZ21lbnQgbGVuZ3RocywKKwlzdWdnZXN0ZWQgYnkgTWF0ZXVzeiBKdXJjenlrIDxtanVyY3p5a0Bnb29nbGUuY29tPi4KKworMjAxNC0xMS0yNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBJbnNlcnQgY29tbWVudHMKKwlhbmQgZm9sZCB0b28gbG9uZyB0cmFjaW5nIG1lc3NhZ2VzLgorCisyMDE0LTExLTI2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDM1NDAuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKHBhcnNlX2ZvbmQpOiBQcmV2ZW50IGEgYnVmZmVyIG92ZXJydW4KKwljYXVzZWQgYnkgYSBmb250IGluY2x1ZGluZyB0b28gbWFueSAoPiA2Mykgc3RyaW5ncyB0byBzdG9yZQorCW5hbWVzW10gdGFibGUuCisKKzIwMTQtMTEtMjYgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChNYWNfUmVhZF9QT1NUX1Jlc291cmNlKTogVXNlIHVuc2lnbmVkIGxvbmcKKwl2YXJpYWJsZXMgdG8gcmVhZCB0aGUgbGVuZ3RocyBpbiBQT1NUIGZyYWdtZW50cy4gIFN1Z2dlc3RlZCBieQorCU1hdGV1c3ogSnVyY3p5ayA8bWp1cmN6eWtAZ29vZ2xlLmNvbT4uCisKKzIwMTQtMTEtMjYgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MzUzOS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBGaXggaW50ZWdlciBvdmVyZmxvdworCWJ5IGEgYnJva2VuIFBPU1QgdGFibGUgaW4gcmVzb3VyY2UtZm9yay4KKworMjAxNC0xMS0yNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBTYXZhbm5haCBidWcgIzQzNTM4LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IEZpeCBpbnRlZ2VyIG92ZXJmbG93CisJYnkgYSBicm9rZW4gUE9TVCB0YWJsZSBpbiByZXNvdXJjZS1mb3JrLgorCisyMDE0LTExLTI2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IEF2b2lkIG1lbW9yeSBsZWFrCisJYnkgYSBicm9rZW4gUE9TVCB0YWJsZSBpbiByZXNvdXJjZS1mb3JrLiAgUmV0dXJuIGFmdGVyIGZyZWVpbmcKKwl0aGUgYnVmZmVyZWQgUE9TVCB0YWJsZSB3aGVuIGl0IGlzIGZvdW5kIHRvIGJlIGJyb2tlbi4KKworMjAxNC0xMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBzL0ludmFsaWRfQXJndW1lbnQvSW52YWxpZF9TaXplX0hhbmRsZS8gd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMTQtMTEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSovKjogcy9JbnZhbGlkX0FyZ3VtZW50L0ludmFsaWRfU3RyZWFtX0hhbmRsZS8gd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMTQtMTEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSovKjogcy9JbnZhbGlkX0FyZ3VtZW50L0ludmFsaWRfTGlicmFyeV9IYW5kbGUvIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDE0LTExLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IHMvSW52YWxpZF9Bcmd1bWVudC9JbnZhbGlkX091dGxpbmUvIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDE0LTExLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IHMvSW52YWxpZF9Bcmd1bWVudC9JbnZhbGlkX0ZhY2VfSGFuZGxlLyB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAxNC0xMS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW1NhdmFubmFoIGJ1ZyAjNDM2ODJdIEFkanVzdCBzb21lIHJlbmRlcmVyIGNhbGxiYWNrcy4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChmdF9ibGFja19zZXRfbW9kZSk6IENoYW5nZSByZXR1cm4gdHlwZSB0bworCWBpbnQnIHRvIHN0YXkgaW4gc3luYyB3aXRoIGBGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYycgcHJvdG90eXBlLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfc2V0X21vZGUpOiBOZXcgZHVtbXkgZnVuY3Rpb24KKwlmb3Igb3J0aG9nb25hbGl0eS4KKwkoZnRfZ3JheXNfcmFzdGVyKTogVXNlIGl0LgorCisyMDE0LTExLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbU2F2YW5uYWggYnVnICM0MzY4Ml0gUHJvcGVybHkgaGFuZGxlIG1pc3NpbmcgcmV0dXJuIGVycm9ycy4KKworCVRoZSBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaCAqZG8qIHJldHVybiBub24tdHJpdmlhbCBlcnJvcnMgdGhhdCBtdXN0CisJYmUgdGFrZW4gY2FyZSBvZi4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyksIHNyYy9iYXNlL2Z0b2Jqcy5jCisJKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCksIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9SZW5kZXIpLAorCXNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpIDxjZmZfb3BfZW5kY2hhcj4sCisJc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19wYXJzZXJfbG9hZF9maWVsZF90YWJsZSksIHNyYy9wc2F1eC90MWRlY29kZQorCSh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKSA8b3BfZW5kY2hhcj4sIHNyYy90cnVldHlwZS90dGdsb2FkLmMKKwkobG9hZF90cnVldHlwZV9nbHlwaCA8c3ViZ2x5cGggbG9vcD4sIHR0X2xvYWRlcl9pbml0LAorCVRUX0xvYWRfR2x5cGgpLCBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfTU1fQmxlbmQpLAorCXNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9ydW5fZnBnbSwgdHRfc2l6ZV9ydW5fcHJlcCk6IERvIGl0LgorCisyMDE0LTExLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbU2F2YW5uYWggYnVnICM0MzY4Ml0gQWRkL3JlbW92ZSBgdm9pZCcgY2FzdHMgdG8gc29tZSBmdW5jdGlvbnMuCisKKwlXZSB1c2UgYSBjYXN0IHRvIGluZGljYXRlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBpZ25vcmUgYSBmdW5jdGlvbidzCisJcmV0dXJuIHZhbHVlLiAgSG93ZXZlciwgdGhpcyBkb2Vzbid0IGFwcGx5IHRvIEFQSSBmdW5jdGlvbnMgd2hlcmUKKwllcnJvcnMgY2FuIG9ubHkgaGFwcGVuIGZvciB0cml2aWFsbHkgaW52YWxpZCBpbnB1dC4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoRlRfR2x5cGhfU3Ryb2tlLCBGVF9HbHlwaF9TdHJva2VCb3JkZXIpLAorCXNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKSwgc3JjL2NmZi9jZmZnbG9hZC5jCisJKGNmZl9zbG90X2xvYWQpLCBzcmMvcGZyL3BmcmRyaXZyLmMgKHBmcl9nZXRfa2VybmluZyksCisJc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9lbmNvZGluZyksIHNyYy90eXBlNDIvdDQycGFyc2UuYworCSh0NDJfcGFyc2VfZW5jb2RpbmcpOiBEbyBpdC4KKworMjAxNC0xMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW1NhdmFubmFoIGJ1ZyAjNDM2ODJdIENoYW5nZSBzb21lIHNpZ25hdHVyZXMgdG8gYHZvaWQnIHJldHVybiB0eXBlLgorCisJKiBpbmNsdWRlL2ludGVybmFsL3BzaGludHMuaCAoUFNIX0dsb2JhbHNfU2V0U2NhbGVGdW5jKSwKKwlpbmNsdWRlL2ludGVybmFsL3NmbnQuaCAoVFRfR2V0X01ldHJpY3NfRnVuYyksCisJc3JjL3BzaGludGVyL3BzaGdsb2IuYyAocHNoX2dsb2JhbHNfc2V0X3NjYWxlKSwKKwlzcmMvcHNoaW50ZXIvcHNocmVjLmMgKHBzX2hpbnRzX2luaXQpLCBzcmMvc2ZudC90dG10eC5jCisJKHR0X2ZhY2VfZ2V0X21ldHJpY3MpLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfR290b19Db2RlUmFuZ2UsCisJVFRfU2V0X0NvZGVSYW5nZSwgVFRfQ2xlYXJfQ29kZVJhbmdlLCBUVF9Eb25lX0NvbnRleHQsCisJVFRfU2F2ZV9Db250ZXh0KTogRG8gaXQuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmgsIHNyYy9wc2hpbnRlci9wc2hyZWMuaCwgc3JjL3NmbnQvdHRtdHguaCwKKwlzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoKSwgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMKKwkoVFRfUnVuX0NvbnRleHQpLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCwgc3JjL3RydWV0eXBlL3R0b2Jqcy5jCisJKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXApOiBVcGRhdGVkLgorCisyMDE0LTExLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgYWxsIGNvZGUgcmVsYXRlZCB0byBGVF9NQVhfQ0hBUk1BUF9DQUNIRUFCTEUuCisKKwlUaGlzIGlzIG5vIGxvbmdlciB1c2VkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYywgc3JjL2NhY2hlL2Z0Y2NtYXAuYywgc3JjL2NmZi9jZmZvYmpzLmMsCisJc3JjL3NmbnQvdHRjbWFwLmM6IERvIGl0LgorCisyMDE0LTExLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDM2ODAuCisKKwlUaGlzIGFkZHMgYW4gYWRkaXRpb25hbCBjb25zdHJhaW50IHRvIG1ha2UgdGhlIGZpeCBmcm9tIDIwMTMtMDEtMjUKKwlyZWFsbHkgd29yay4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKSA8aW5kZXhfZm9ybWF0PT00PjoKKwlDaGVjayBgcCcgYmVmb3JlIGBudW1fZ2x5cGhzJy4KKworMjAxNC0xMS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICM0MzY3OS4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBDaGVjayBtaW5pbXVtIHNpemUgb2YKKwlgcmVjb3JkX3NpemUnLgorCisyMDE0LTExLTI0ICBKYXJra28gUMO2eXJ5ICA8amFya2tvLnBveXJ5QGdtYWlsLmNvbT4KKworCVtjZmYsIHBmciwgcHNhdXgsIHdpbmZvbnRzXSBGaXggU2F2YW5uYWggYnVnICM0MzY3Ni4KKworCURvbid0IGNhc3QgY21hcCBpbml0IGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGFuIGluY29tcGF0aWJsZSB0eXBlLgorCisJV2l0aG91dCB0aGlzIHBhdGNoLCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYmV0d2VlbiBkZWNsYXJhdGlvbiBhbmQKKwl0aGUgcmVhbCBzaWduYXR1cmUgZGlmZmVycy4gIENhbGxpbmcgc3VjaCBhIGZ1bmN0aW9uIHJlc3VsdHMgaW4KKwl1bmRlZmluZWQgYmVoYXZpb3IuCisKKwkgIElTTy9JRUMgOTg5OTpUQzMgKENvbW1pdHRlZSBEcmFmdCBTZXB0ZW1iZXIgNywgMjAwNykKKwkgICAgNi41LjIuMiBGdW5jdGlvbiBjYWxscworCSAgICAgIDkgSWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aCBhIHR5cGUgdGhhdCBpcyBub3QKKwkgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgdHlwZSAob2YgdGhlIGV4cHJlc3Npb24pIHBvaW50ZWQgdG8gYnkKKwkgICAgICAgIHRoZSBleHByZXNzaW9uIHRoYXQgZGVub3RlcyB0aGUgY2FsbGVkIGZ1bmN0aW9uLCB0aGUKKwkgICAgICAgIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKworCU9uIGNlcnRhaW4gcGxhdGZvcm1zIChjIC0+IGpzIHdpdGggZW1zY3JpcHRlbikgdGhpcyBjYXVzZXMKKwl0ZXJtaW5hdGlvbiBvZiBleGVjdXRpb24gb3IgaW52YWxpZCBjYWxscyBiZWNhdXNlIGluIHRoZSBlbXNjcmlwdGVuCisJaW1wbGVtZW50YXRpb24sIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIGRpZmZlcmVudCB0eXBlcyBhcmUgc3RvcmVkIGluCisJZGlmZmVyZW50IHBvaW50ZXIgYXJyYXlzLiAgSW5jb3JyZWN0IHBvaW50ZXIgdHlwZSBoZXJlIHJlc3VsdHMgaW4KKwlpbmRleGluZyBvZiBhbiBpbmNvcnJlY3QgYXJyYXkuCisKKwkqIHNyYy9jZmYvY2ZmY21hcC5jIChjZmZfY21hcF9lbmNvZGluZ19pbml0LCBjZmZfY21hcF91bmljb2RlX2luaXQpLAorCXNyYy9wZnIvcGZyY21hcC5jIChwZnJfY21hcF9pbml0KSwgc3JjL3BzYXV4L3QxY21hcC5jCisJdDFfY21hcF9zdGFuZGFyZF9pbml0LCB0MV9jbWFwX2V4cGVydF9pbml0LCB0MV9jbWFwX2N1c3RvbV9pbml0LAorCXQxX2NtYXBfdW5pY29kZV9pbml0KSwgc3JjL3dpbmZvbnRzL3dpbmZudC5jIChmbnRfY21hcF9pbml0KTogRml4CisJc2lnbmF0dXJlLgorCisyMDE0LTExLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDM2NzIuCisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2Vybik6IFVzZSBjb3JyZWN0IHZhbHVlIGZvcgorCW1pbmltdW0gdGFibGUgbGVuZ3RoIHRlc3QuCisKKzIwMTQtMTEtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMSwgdHlwZTQyXSBBbm90aGVyIGZpeCBmb3IgU2F2YW5uYWggYnVnICM0MzY1NS4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyksIHNyYy90eXBlNDIvdDQycGFyc2UuYworCSh0NDJfcGFyc2VfY2hhcnN0cmluZ3MpOiBBZGQgYW5vdGhlciBib3VuZGFyeSB0ZXN0aW5nLgorCisyMDE0LTExLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZG9jbWFrZXJdIEZvcm1hdHRpbmcsIGNvcHlyaWdodCwgaW1wcm92ZWQgZG9jdW1lbnRhdGlvbi4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyLyo6IE5vIGNvZGUgY2hhbmdlcyBiZXNpZGVzIHRyaXZpYWwKKwltb2RpZmljYXRpb25zLgorCisyMDE0LTExLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVnICM0MzY2MC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9nbHlwaHMpIDwiRU5ERk9OVCI+OiBDaGVjaworCWBfQkRGX0dMWVBIX0JJVFMnLgorCisyMDE0LTExLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTQyXSBBbGxvdyBvbmx5IGVtYmVkZGVkIFRydWVUeXBlIGZvbnRzLgorCisJVGhpcyBpcyBhIGZvbGxvdy11cCB0byBTYXZhbm5haCBidWcgIzQzNjU5LgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IEV4Y2x1c2l2ZWx5IHVzZSB0aGUKKwlgdHJ1ZXR5cGUnIGZvbnQgZHJpdmVyIGZvciBsb2FkaW5nIHRoZSBmb250IGNvbnRhaW5lZCBpbiB0aGUgYHNmbnRzJworCWFycmF5LgorCisyMDE0LTExLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTQyXSBGaXggU2F2YW5uYWggYnVnICM0MzY1OS4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9PcGVuX0ZhY2UpOiBJbml0aWFsaXplIGBmYWNlLT50dGZfc2l6ZScuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX3NmbnRzKTogQWx3YXlzIHNldAorCWBmYWNlLT50dGZfc2l6ZScgZGlyZWN0bHkuICBUaGlzIGVuc3VyZXMgYSBjb3JyZWN0IHN0cmVhbSBzaXplIGluCisJdGhlIGNhbGwgdG8gYEZUX09wZW5fRmFjZScsIHdoaWNoIGZvbGxvd3MgYWZ0ZXIgcGFyc2luZywgZXZlbiBmb3IKKwlidWdneSBpbnB1dCBkYXRhLgorCUZpeCBlcnJvciBtZXNzYWdlcy4KKworMjAxNC0xMS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjNDM2NTguCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2J1aWxkZXJfbGluZVRvLCBjZjJfYnVpbGRlcl9jdWJlVG8pOiBIYW5kbGUKKwlyZXR1cm4gdmFsdWVzIG9mIHBvaW50IGFsbG9jYXRpb24gcm91dGluZXMuCisKKzIwMTQtMTEtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggU2F2YW5uYWggYnVnICM0MzY1Ni4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXA0X3ZhbGlkYXRlKTogRml4IG9yZGVyIG9mIHZhbGlkaXR5CisJdGVzdHMuCisKKzIwMTQtMTEtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMSwgdHlwZTQyXSBGaXggU2F2YW5uYWggYnVnICM0MzY1NS4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyksIHNyYy90eXBlNDIvdDQycGFyc2UuYworCSh0NDJfcGFyc2VfY2hhcnN0cmluZ3MpOiBGaXggYm91bmRhcnkgdGVzdGluZy4KKworMjAxNC0xMS0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9tZXRyaWNzKTogU2FuaXRpemUgaW52YWxpZCBtZXRyaWNzLgorCisyMDE0LTExLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZnRsY2RmaWxdIE9iZXkgZmxvdyBkaXJlY3Rpb24uCisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKF9mdF9sY2RfZmlsdGVyX2ZpciwgX2Z0X2xjZF9maWx0ZXJfbGVnYWN5KToKKwlIYW5kbGUgYHVwJyBmbG93LgorCisyMDE0LTExLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9Db252ZXJ0KTogSW1wcm92ZS4KKworCVRoaXMgY29tbWl0IGNvbXBsZXRlcyBhcmd1bWVudCBjaGVja3MgYW5kIGFkZHMgc3VwcG9ydCBmb3IgZGlmZmVyZW50CisJZmxvdyBkaXJlY3Rpb25zLgorCisyMDE0LTExLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9Db3B5KTogSW1wcm92ZS4KKworCVRoaXMgY29tbWl0IGFkZHMgYXJndW1lbnQgY2hlY2tzIGFuZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZmxvdworCWRpcmVjdGlvbnMuCisKKzIwMTQtMTEtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX05ldyk6IENoZWNrIGFyZ3VtZW50LgorCisyMDE0LTExLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDaGFuZ2Ugc29tZSBmaWVsZHMgaW4gYEZUX0JpdG1hcCcgdG8gdW5zaWduZWQgdHlwZS4KKworCVRoaXMgZG9lc24ndCBicmVhayBBQkkuCisKKwkqIGluY2x1ZGUvZnRpbWFnZS5oIChGVF9CaXRtYXApOiBNYWtlIGByb3dzJywgYHdpZHRoJywgYG51bV9ncmF5cycsCisJYHBpeGVsX21vZGUnLCBhbmQgYHBhbGV0dGVfbW9kZScgdW5zaWduZWQgdHlwZXMuCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmM6IFVwZGF0ZWQuCisJKEZUX0JpdG1hcF9Db3B5KTogRml4IGNhc3RzLgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYywgc3JjL3Jhc3Rlci9mdHJhc3Rlci5jLCBzcmMvc2ZudC9wbmdzaGltLmM6CisJVXBkYXRlZC4KKworMjAxNC0xMS0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgRlRfQml0bWFwX0NvbnZlcnQnIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgYHBpdGNoJyB2YWx1ZXMuCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9Db252ZXJ0KTogQWx3YXlzIHVzZSBwb3NpdGl2ZSB2YWx1ZQorCWZvciB0aGUgcGl0Y2ggd2hpbGUgY29weWluZyBkYXRhLgorCUNvcnJlY3RseSBzZXQgcGl0Y2ggc2lnbiBpbiB0YXJnZXQgYml0bWFwLgorCisyMDE0LTExLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNaW5vciBjb2RlIGltcHJvdmVtZW50IGluIGBGVF9CaXRtYXBfRW1ib2xkZW4nLgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChGVF9CaXRtYXBfRW1ib2xkZW4pIDxGVF9QSVhFTF9NT0RFX0dSQVlbMjRdPjoKKwlGaXggdGhpbmtvLgorCisyMDE0LTExLTE5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmM6IFVzZSBkZWRpY2F0ZWQgYEZUX0FuZ2xlJyBmb3IgYXJjdGFuIHRhYmxlLgorCisyMDE0LTExLTE5ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCUF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHg4Ni02NCBmb3IgYEZUX011bEZpeCcuCisKKwlgRlRfTXVsRml4JyB0YWtlcyBgRlRfTG9uZycgcGFyYW1ldGVycyBhcyBkZWZpbmVkIGluIGBmcmVldHlwZS5oJywKKwlidXQgc2V2ZXJhbCBpbmxpbmUgaW1wbGVtZW50YXRpb25zIG9mIGl0IGluIGBmdGNhbGMuaCcgdGFrZQorCWBGVF9JbnQzMicgYXJndW1lbnRzLiAgVGhpcyBpcyBjYXVzaW5nIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHg4Ni02NDoKKwlJZiBwYXJhbWV0ZXJzIG9mIHR5cGUgYEZUX0ZpeGVkJyAoPSBgRlRfTG9uZycpIGFyZSBwYXNzZWQgdG8gdGhlCisJaW5saW5lIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24sIGludGVnZXIgdmFsdWVzIGFyZSB0cnVuY2F0ZWQKKwlmcm9tIDY0Yml0IHRvIDMyYml0LgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oIChGVF9NdWxGaXgpIFtGVF9NVUxGSVhfQVNTRU1CTEVSXTogQWRkCisJY2FzdHMuCisKKzIwMTQtMTEtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggU2F2YW5uYWggYnVnICM0MzU5Ny4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChMb2FkX1NCaXRfUG5nKTogUHJvdGVjdCBhZ2FpbnN0IHRvbyBsYXJnZQorCWJpdG1hcHMuCisKKzIwMTQtMTEtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggU2F2YW5uYWggYnVnICM0MzU5MS4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9pbml0KTogUHJvdGVjdCBhZ2FpbnN0IGFkZGl0aW9uCisJYW5kIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93LgorCisyMDE0LTExLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDM1OTAuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChjaGVja190YWJsZV9kaXIsIHR0X2ZhY2VfbG9hZF9mb250X2Rpcik6CisJUHJvdGVjdCBhZ2FpbnN0IGFkZGl0aW9uIG92ZXJmbG93LgorCisyMDE0LTExLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDM1ODkuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jICh3b2ZmX29wZW5fZm9udCk6IFByb3RlY3QgYWdhaW5zdCBhZGRpdGlvbgorCW92ZXJmbG93LgorCisyMDE0LTExLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDM1ODguCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwOF92YWxpZGF0ZSwgdHRfY21hcDEwX3ZhbGlkYXRlLAorCXR0X2NtYXAxMl92YWxpZGF0ZSwgdHRfY21hcDEzX3ZhbGlkYXRlLCB0dF9jbWFwMTRfdmFsaWRhdGUpOiBQcm90ZWN0CisJYWdhaW5zdCBvdmVyZmxvdyBpbiBhZGRpdGlvbnMgYW5kIG11bHRpcGxpY2F0aW9ucy4KKworMjAxNC0xMS0xMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIENPUkRJQyBpbXByb3ZlbWVudHMuCisKKwlUaGUgc2NhbGluZyBiZXR3ZWVuIHRoZSBoeXBvdGVudXNlIGFuZCBpdHMgQ09SRElDIGFwcHJveGltYXRpb24gaXMKKwliYXNlZCBvbiByZWdyZXNzaW9uIGFuYWx5c2lzLiBUaGUgc21hbGxlciBwYWRkaW5nIGZvciBgdGhldGEnIGlzCisJanVzdGlmZWQgYnkgaXRzIG1heGltdW0gZXJyb3Igb2YgbGVzcyB0aGFuIDYuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKGZ0X3RyaWdfZG93bnNjYWxlKTogQm9ycm93IGNvZGUgZnJvbQorCS4vZnRjYWxjLmMgKGZ0X211bHRvNjQpLCBjaGFuZ2UgbGluZWFyIGludGVyY2VwdC4KKwkoZnRfdHJpZ19wc2V1ZG9fcG9sYXJpemUpOiBEZWNyZWFzZSBgdGhldGEnIHBhZGRpbmcuCisKKzIwMTQtMTEtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoZnRfc3Ryb2tlcl9pbnNpZGUpOiBGaXggYm9yZGVyIGludGVyc2VjdGlvbnMuCisKKwlPbmUgbW9yZSBwbGFjZSB0byBjaGVjayB3aGV0aGVyIGByYWRpdXMnIGlzIHplcm8uCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmNvIFdlcnR6IDxtYXJjby53ZXJ0ekBnbXguZGU+LgorCisyMDE0LTExLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVnICM0MzUzNS4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9zdHJuY21wKTogTmV3IG1hY3JvIHRoYXQgY2hlY2tzIG9uZQorCWNoYXJhY3RlciBtb3JlIHRoYW4gYHN0cm5jbXAnLgorCXMvZnRfc3RybmNtcC9fYmRmX3N0cm5jbXAvIGV2ZXJ5d2hlcmUuCisKKzIwMTQtMTEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwY2ZdIEZpeCBTYXZhbm5haCBidWcgIzQzNTQ4LgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9lbmNvZGluZ3MpOiBBZGQgc2FuaXR5IGNoZWNrcyBmb3Igcm93CisJYW5kIGNvbHVtbiB2YWx1ZXMuCisKKzIwMTQtMTEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwY2ZdIEZpeCBTYXZhbm5haCBidWcgIzQzNTQ3LgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX3JlYWRfVE9DKTogQ2hlY2sgYHNpemUnIGFuZCBgb2Zmc2V0JworCXZhbHVlcy4KKworMjAxNC0xMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX3JlYWRfVE9DKTogQXZvaWQgbWVtb3J5IGxlYWsuCisKKzIwMTQtMTEtMDMgIEluZmluYWxpdHkgIDxpbmZpbmFsaXR5QGluZmluYWxpdHkubmV0PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyAoQ09NUEFUSUJJTElUWV9NT0RFX1J1bGVzKTogVXBkYXRlZC4KKworCVRoZSBwcmV2aW91cyBjb21taXQgZGV0ZXJpb3JhdGVzIHJlbmRlcmluZyBvZiBEZWphVnUgYW5kIHNpbWlsYXIKKwlmb250czsgdGhpcyBnZXRzIGNvbXBlbnNhdGVkIHdpdGggdGhpcyBydWxlLgorCisyMDE0LTExLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfREVMVEFQKTogRml4IHN1YnBpeGVsIGhpbnRpbmcuCisKKwlCZWZvcmUgdGhpcyBwYXRjaCwgaXQgd2FzIGltcG9zc2libGUgdG8gZXZlciBjYWxsIERFTFRBUFsxMjNdIGluCisJc3VicGl4ZWwgaGludGluZyBtb2RlIGFzIGRlc2NyaWJlZCBpbiB0aGUgQ2xlYXJUeXBlIHdoaXRlcGFwZXI7IGl0CisJb25seSB3b3JrZWQgaWYgaW4gYGNvbXBhdGliaWxpdHkgbW9kZScuICBIb3dldmVyLCBjb21wYXRpYmlsaXR5IG1vZGUKKwllc3NlbnRpYWxseSBkaXNhYmxlcyBTSFBJWCwgY29tcGxldGVseSBydWluaW5nIGhpbnRpbmcgb2YKKwl0dGZhdXRvaGludCBvdXRwdXQsIGZvciBleGFtcGxlLgorCisJV2Ugbm93IGZvbGxvdyB0aGUgd2hpdGVwYXBlciBtb3JlIGNsb3NlbHkgc28gdGhhdCBERUxUQVBbMTIzXQorCWluc3RydWN0aW9ucyBmb3IgdG91Y2hlZCBwb2ludHMgaW4gdGhlIG5vbi1zdWJwaXhlbCBkaXJlY3Rpb24gYXJlCisJZXhlY3V0ZWQuCisKKzIwMTQtMTAtMzEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIEltcHJvdmUgY29kZSByZWFkYWJpbGl0eS4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBSZWFycmFuZ2UgY29kZS4KKworMjAxNC0xMC0zMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gUmVkdWNlIG91dGxpbmUgdHJhbnNsYXRpb25zIGR1cmluZyByZW5kZXJpbmcuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogVHJhbnNsYXRlIG9yaWdpbgorCXZpcnR1YWxseSBieSBtb2RpZnlpbmcgY2JveCwgYWN0dWFsbHkgdHJhbnNsYXRlIG91dGxpbmUgaWYgY3VtdWxhdGl2ZQorCXNoaWZ0IGlzIG5vdCB6ZXJvLgorCisyMDE0LTEwLTMwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBGaXggU2F2YW5uYWggYnVnICMzNTYwNCAoY29udCdkKS4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBSZW1vdmUgY2hlY2tzIGFuZAorCWNhc3RzIHRoYXQgYmVjYW1lIHVubmVjZXNzYXJ5IGFmdGVyIHRoZSB2YXJpYWJsZSB0eXBlIHVwZ3JhZGVzLgorCisyMDE0LTEwLTI5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBJbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogUmVhcnJhbmdlIGNvZGUuCisKKzIwMTQtMTAtMjkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVVuaWZ5IGh5cG90ZW51c2UgYXBwcm94aW1hdGlvbnMuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRjYWxjLmggKEZUX0hZUE9UKTogTW92ZSBtYWNybyBmcm9tIGhlcmUuLi4KKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmg6IC4uLiB0byBoZXJlLCBuZXh0IHRvIHJlcXVpcmVkIGBGVF9BQlMnLgorCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2N1YmljKTogVXNlIGl0IGhlcmUuCisKKzIwMTQtMTAtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFRlc3QgdmFsaWQgZGFya2VuaW5nIHBhcmFtZXRlciBtYWNyb3MgaW4gYGZ0b3B0aW9uLmgnLgorCisJV2Ugbm8gbG9uZ2VyIG5lZWQgYW4gb3RoZXJ3aXNlIHVudXNlZCB0eXBlZGVmIHRoYXQgY2FuIGNhdXNlIGEgZ2NjCisJd2FybmluZy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEFsZXhlaS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9kcml2ZXJfaW5pdCk6IFVzZQorCWBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1hYWCcgbWFjcm9zIGRpcmVjdGx5LgorCShTRVRfREFSS0VOSU5HX1BBUkFNRVRFUlMpOiBSZW1vdmVkLgorCUNvbXBpbGUgdGltZSB0ZXN0cyBhcmUgbm93IC4uLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oOiAuLi4gaGVyZS4KKworMjAxNC0xMC0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJSW1wcm92ZSBmbGF0IGNvcm5lciBkZWZpbml0aW9uLgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oIChGVF9IWVBPVCk6IE1hY3JvIHRvIGFwcHJveGltYXRlIEV1Y2xpZGVhbgorCWRpc3RhbmNlIHdpdGggdGhlIGFscGhhIG1heCBwbHVzIGJldGEgbWluIGFsZ29yaXRobS4KKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChmdF9jb3JuZXJfaXNfZmxhdCk6IFVzZSBpdCBpbnN0ZWFkIG9mIFRheGljYWIKKwltZXRyaWMuCisKKzIwMTQtMTAtMjMgIERhdmlkIFdlacOfICA8RGF2aWQuV2Vpc3NAcHR2Z3JvdXAuY29tPgorCisJW2J1aWxkXSBJbXByb3ZlIHByb3BlcnR5IGZpbGUgZm9yIHZjMjAxMC4KKworCVVzZXItZGVmaW5lZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBlbXB0eSBieSBkZWZhdWx0IHRvIHByZXZlbnQgbGlua2VyCisJZmFpbHVyZXMuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS51c2VyLnByb3BzLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOgorCXMvT3B0aW9uc0RpcmVjdG9yeS9Vc2VyT3B0aW9uRGlyZWN0b3J5Ly4KKwlDb21tZW50IG91dCBhbGwgdXNlciBvcHRpb25zLgorCisyMDE0LTEwLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBXb3JrIGFyb3VuZCBidWcgaW4gcHJlcHJvY2Vzc29yIG9mIE1TVkMgMjAxMC4KKworCVdlIGhhdmUgYmVlbiBoaXQgYnkKKworCSAgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlvL2ZlZWRiYWNrL2RldGFpbHMvNzE4OTc2L21zdmMtcHIKKworCSogZGV2ZWwvZnRvcHRpb24uaCwgaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaDogUmVwbGFjZQorCWBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSUycgd2l0aCBlaWdodCBtYWNyb3MKKwlgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl97WCxZfXsxLDIsMyw0fScuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChTRVRfREFSS0VOSU5HX1BBUkFNRVRFUlMpOiBSZW1vdmVkLiAgV2Ugbm8KKwlsb25nZXIgbmVlZCBkb3VibGUgZXhwYW5zaW9uLgorCShTRVRfREFSS0VOSU5HX1BBUkFNRVRFUlNfMCk6IFJlbmFtZWQgdG8gLi4uCisJKFNFVF9EQVJLRU5JTkdfUEFSQU1FVEVSUyk6IC4uLiB0aGlzLgorCVVwZGF0ZSBjYWxsLgorCisyMDE0LTEwLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2JpdF0gTWlub3IgZml4ZXMuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc2JpdCkgW1RUX1NCSVRfVEFCTEVfVFlQRV9TQklYXToKKwlBY2NlcHQgb3ZlcmxheSBmb3JtYXQgYWxzbywgYnV0IGVtaXQgd2FybmluZyBtZXNzYWdlIGluIHRoYXQgY2FzZS4KKwkodHRfc2JpdF9kZWNvZGVyX2xvYWRfbWV0cmljcyk6IEFkZCBtaXNzaW5nIG5ld2xpbmUgdG8gZXJyb3IKKwltZXNzYWdlLgorCSh0dF9zYml0X2xvYWRfc2JpeF9pbWFnZSk6IEFkZCBgcmdibCcgZ3JhcGhpYyB0eXBlIChhcyB1c2VkIG9uIGlPUworCTcuMSkgdG8gdGhlIGxpc3Qgb2YgdW5zdXBwb3J0ZWQgZm9ybWF0cy4KKworMjAxNC0xMC0xOSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBDbGVhbiB1cCBieXRlY29kZSByb3VuZGluZy4KKworCVplcm8gZGlzdGFuY2UgZG9lcyBub3QgaGF2ZSB0byBiZSB0cmVhdGVkIHNwZWNpYWxseSBpZiB5b3UgZm9sbG93CisJc3BlY2lmaWNhdGlvbnMgYW5kIGNoZWNrIHRoZSBzaWduIGFzIHRoZSB2ZXJ5IGxhc3Qgc3RlcCBvZiByb3VuZGluZy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFJvdW5kX05vbmUsIFJvdW5kX1RvX0dyaWQsCisJUm91bmRfRG93bl9Ub19HcmlkLCBSb3VuZF9VcF9Ub19HcmlkLCBSb3VuZF9Ub19Eb3VibGVfR3JpZCk6IFVzZQorCW1hY3JvcyB3aGVuIGF2YWlsYWJsZSwgZG8gbm90IGNoZWNrIGZvciBub24temVybyBkaXN0YW5jZS4KKwkoUm91bmRfVG9fSGFsZl9HcmlkLCBSb3VuZF9TdXBlciwgUm91bmRfU3VwZXJfNDUpOiBEaXR0bywgcmV0dXJuIHBoYXNlCisJaWYgc2lnbiBjaGFuZ2VkLgorCisyMDE0LTEwLTE4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIFVud3JhcCBlbmdpbmUgY29tcGVuc2F0aW9uIHNldHRpbmdzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfaW5pdF9ieXRlY29kZSk6IFVwZGF0ZWQuCisKKzIwMTQtMTAtMTggIERhdmlkIFdlacOfICA8RGF2aWQuV2Vpc3NAcHR2Z3JvdXAuY29tPgorCisJW2J1aWxkXSBBZGQgcHJvcGVydHkgZmlsZSB0byB2YzIwMTAgcHJvamVjdC4KKworCVRoaXMgc2ltcGxpZmllcyBjdXN0b20gYnVpbGQgY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgZm9yCisJYXV0b21hdGVkIGJ1aWxkIGVudmlyb25tZW50cy4KKworCSogYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnVzZXIucHJvcHM6IE5ldyBjb25maWd1cmF0aW9uIGZpbGUuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOiBJbmNsdWRlCisJYGZyZWV0eXBlLnVzZXIucHJvcHMnIGFuZCB1c2UgaXRzIGRhdGEgZmllbGRzLgorCisJKiBidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbDogVXBkYXRlZC4KKworMjAxNC0xMC0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFkZCBibHVlLXpvbmUgc3VwcG9ydCBmb3IgVGVsdWd1LgorCisJVGhpcyBlc3NlbnRpYWxseSBtb3ZlcyB0aGUgVGVsdWd1IHNjcmlwdCBmcm9tIHRoZSBgSW5kaWMnIGhpbnRlciB0bworCXRoZSBgTGF0aW4nIGhpbnRlci4KKworCU5vdGUgdGhhdCB0aGlzIGlzIGEgZmlyc3Qgc2hvdCBhbmQgcXVpdGUgY2VydGFpbmx5IG5lZWRzCisJcmVmaW5lbWVudHMuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgVGVsdWd1LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgVGVsdWd1IHN0YW5kYXJkIGNoYXJhY3RlcnMgYW5kIG1vdmUKKwlkYXRhIG91dCBvZiBBRl9DT05GSUdfT1BUSU9OX0lORElDIGJsb2NrLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jOiBNb3ZlIFRlbHVndSBkYXRhIG91dCBvZgorCUFGX0NPTkZJR19PUFRJT05fSU5ESUMgYmxvY2suCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IFVwZGF0ZSBUZWx1Z3UgZGF0YTsgaW4gcGFydGljdWxhciwgdXNlCisJQUZfV1JJVElOR19TWVNURU1fTEFUSU4uCisKKzIwMTQtMTAtMTggIERhdmlkIFdpbXNleSAgPGRhdmlkQHdpbXNleS51cz4KKworCVtjbWFrZV0gQWRkIGlPUyBidWlsZCBzdXBwb3J0LgorCUZyb20gU2F2YW5uYWggcGF0Y2ggIzg0OTcuCisKKwkqIGJ1aWxkcy9jbWFrZS9pT1MuY21ha2U6IE5ldyBmaWxlLiAgVW5pdmVyc2FsIGJpbmFyaWVzIGFyZSBidWlsdAorCXdpdGggYm90aCAzMiBhbmQgNjQgYml0IGFybSBhcmNoaXRlY3R1cmVzLgorCisJKiBDTWFrZUxpc3RzLnR4dCAoSU9TX1BMQVRGT1JNKTogTmV3IHZhcmlhYmxlIGZvciBydW5uaW5nIHRoZSBpT1MKKwl0b29sY2hhaW4uICBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBPUycgdG8gYnVpbGQgb24gaU9TLCBvcgorCWBTSU1VTEFUT1InIHRvIGJ1aWxkIG9uIEFQUExFLgorCisyMDE0LTEwLTE2ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWRkIGBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSUycgY29uZmlnIG1hY3JvLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oCisJKENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJTKTogTmV3IG1hY3JvLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoU0VUX0RBUktFTklOR19QQVJBTUVURVJTLAorCVNFVF9EQVJLRU5JTkdfUEFSQU1FVEVSU18wKTogTmV3IG1hY3Jvcy4KKwkoY2ZmX2RyaXZlcl9pbml0KTogVXNlIG5ldyBtYWNyb3MuCisKKzIwMTQtMTAtMTQgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gTGltaXQgZGVsdGEgc2hpZnQgcmFuZ2UuCisKKwlUaGUgdmFsaWQgcmFuZ2UgZm9yIGRlbHRhIHNoaWZ0IGlzIHplcm8gdGhyb3VnaCBzaXguICBOZWdhdGl2ZSB2YWx1ZXMKKwlhcmUgaW52YWxpZCBhY2NvcmRpbmcgdG8KKworCSAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNC9DaGFwNC5odG1sI2RlbHRhJTIwc2hpZnQKKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChkZWx0YV9zaGlmdCwgZGVsdGFfYmFzZSk6IE1ha2UgdW5zaWduZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoRE9fU0RTKTogVGhyb3cgYW4gZXJyb3IgaWYgYGRlbHRhX3NoaWZ0JworCWlzIG91dCBvZiByYW5nZS4KKwkoSW5zX0RFTFRBUCwgSW5zX0RFTFRBQyk6IE9wdGltaXplIGZvciB2YWxpZCBgZGVsdGFfc2hpZnQnLgorCisyMDE0LTEwLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBIGJldHRlciBmaXggZm9yIFNhdmFubmFoIGJ1ZyAjNDMzOTIuCisJU3VnZ2VzdGVkIGJ5IERvdWcgRmVsdCA8ZG91Z2ZlbHRAZ21haWwuY29tPi4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX21ldHJpY3MpOiBTZXQKKwlgdmVydEFkdmFuY2UnIHRvIHplcm8uLi4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IC4uLiBhbmQgc2V0IGhlcmUgYSBkZWZhdWx0CisJdmFsdWUgZm9yIGB2ZXJ0QWR2YW5jZScgYmFzZWQgb24gYGxpbmVhclZlcnRBZHZhbmNlJyBpbiBjYXNlCisJYHZlcnRBZHZhbmNlJyBpcyB6ZXJvLiAgTm90ZSB0aGF0IHRoZSBwcmV2aW91cyBjb21wdXRlZCBhZC1ob2MgdmFsdWUKKwlmb3IgYGxpbmVhclZlcnRBZHZhbmNlJyB3YXMgYXBwYXJlbnRseSBub3QgdGVzdGVkIGluIGEgcmVhbC1saWZlCisJc2l0dWF0aW9uLgorCisyMDE0LTEwLTE0ICBEYXZpZCBXZWnDnyAgPERhdmlkLldlaXNzQHB0dmdyb3VwLmNvbT4KKworCVtidWlsZF0gQmV0dGVyIG9wdGltaXphdGlvbiBzZXR0aW5ncyBmb3IgdmMyMDEwIHNvbHV0aW9uIGZpbGUuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS5zbG4sCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2o6IFVwZGF0ZWQuCisKKzIwMTQtMTAtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGp1c3QgRGV2ZW5hZ2FyaSBjaGFyYWN0ZXIgcmFuZ2UuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMgKGFmX2RldmFfdW5pcmFuZ2VzKTogT21pdCBjaGFyYWN0ZXJzIHRoYXQKKwlhcmUgY29tbW9uIHRvIGFsbCBvdGhlciBJbmRpYyBzY3JpcHRzLgorCisyMDE0LTEwLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjNDMzOTIuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzKTogRG9uJ3QgbGV0CisJdmVydGljYWwgbWV0cmljcyB1bmluaXRpYWxpemVkLgorCisyMDE0LTEwLTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gU21hbGwgYmJveCBjb3JyZWN0aW9uLgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoRlRfT3V0bGluZV9HZXRfQkJveCk6IFN0YXJ0IGZyb20gbm9uc2Vuc2UgYmJveAorCWluc3RlYWQgb2YgaW5pdGlhbCBwb2ludCB0aGF0IGNvdWxkIGJlIGBvZmYnIGluIGNvbmljIG91dGxpbmVzLgorCisyMDE0LTEwLTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IFNhdmFubmFoIGJ1ZyAjNDMzNTYuCisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X01vdmVfVG8sIEJCb3hfQ29uaWNfVG8pOiBVcGRhdGUgYmJveCBpbiBjYXNlCisJb2YgaW1wbGljaXQgYHRvJy4KKwkoQkJveF9MaW5lX1RvKTogTmV3IGVtaXR0ZXIgdGhhdCBkb2VzIG5vdCB1cGRhdGUgYmJveC4KKworMjAxNC0xMC0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEludHJvZHVjZSBhbmQgdXNlIG5ldyBtYWNybyBgRlRfVVBEQVRFX0JCT1gnCisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChGVF9VUERBVEVfQkJPWCk6IE5ldyBtYWNyby4KKwkoRlRfT3V0bGluZV9HZXRfQkJveCk6IFVzZSBpdCBoZXJlLgorCisyMDE0LTEwLTAyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gU2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9mIGBmdF9kaXY2NGJ5MzInCisKKwlXZSBzaGlmdCBhcyBtYW55IGJpdHMgYXMgd2UgY2FuIGludG8gdGhlIGhpZ2ggcmVnaXN0ZXIsIHBlcmZvcm0KKwkzMi1iaXQgZGl2aXNpb24gd2l0aCBtb2R1bG8gdGhlcmUsIHRoZW4gd29yayB0aHJvdWdoIHRoZSByZW1haW5pbmcKKwliaXRzIHdpdGggbG9uZyBkaXZpc2lvbi4gVGhpcyBvcHRpbWl6YXRpb24gaXMgZXNwZWNpYWxseSBub3RpY2VhYmxlCisJZm9yIHNtYWxsZXIgZGl2aWRlbmRzIHRoYXQgYmFyZWx5IHVzZSB0aGUgaGlnaCByZWdpc3Rlci4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKGZ0X2RpdjY0YnkzMik6IFVwZGF0ZWQuCisKKzIwMTQtMTAtMDIgIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+CisKKwlbY2ZmXSBGaXggU2F2YW5uYWggYnVnICM0MzI3MS4KKworCSogc3JjL2NmZi9jZjJmb250LmMgKGNmMl9jb21wdXRlRGFya2VuaW5nKTogQ2hhbmdlIG92ZXJmbG93CisJZGV0ZWN0aW9uIHRvIHVzZSBsb2dhcml0aG1zIGFuZCBjbGFtcCBgc2NhbGVkU3RlbScuCisKKzIwMTQtMTAtMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmM6IFJlbW92ZSBtaXNjZWxsYW5lb3VzIHR5cGUgY2FzdHMuCisKKzIwMTQtMTAtMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBVc2UgbW9yZSBjb21tb24gYEZUX01TQicgaW1wbGVtZW50YXRpb24gd2l0aCBtYXNrcy4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX01TQik6IFVwZGF0ZWQuCisKKzIwMTQtMDktMzAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBDbGVhbiB1cC4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX01PVkVfU0lHTik6IE5ldyBtYWNybyBmb3IgZnJlcXVlbnRseSB1c2VkCisJY29kZS4KKworMjAxNC0wOS0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEF2b2lkIHVubmVjZXNzYXJ5IGxvbmcgZGl2aXNpb24uCisKKwlUaGlzIGFwcGxpZXMgdG8gYEZUX011bERpdicgYnV0IG5vdCB0byBgRlRfRGl2Rml4Jywgd2hlcmUgb3ZlcmZsb3dzIG9yCisJbGFjayB0aGVyZW9mIGFyZSBwcmVkaWN0ZWQgYWNjdXJhdGVseS4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKGZ0X2RpdjY0YnkzMik6IEltcHJvdmUgcmVhZGFiaWxpdHkuCisJKEZUX011bERpdiwgRlRfTXVsRGl2X05vX1JvdW5kKSBbIUZUX0xPTkc2NF06IFVzZSBzdHJhaWdodCBkaXZpc2lvbgorCXdoZW4gbXVsdGlwbGljYXRpb24gc3RheWVkIHdpdGhpbiAzMiBiaXRzLgorCisyMDE0LTA5LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTWlub3IgY2xlYW4tdXBzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKEFGX0ZMQUdTKTogUmVtb3ZlIG9ic29sZXRlIHZhbHVlcy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cywKKwlhZl9nbHlwaF9oaW50c19hbGlnbl9zdHJvbmdfcG9pbnRzKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzLAorCWFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpLCBzcmMvYXV0b2ZpdC9hZmNqay5jCisJKGFmX2Nqa19oaW50c19saW5rX3NlZ21lbnRzKSwgc3JjL2F1dG9maXQvYWZsYXRpbjIuYworCShhZl9sYXRpbjJfaGludHNfbGlua19zZWdtZW50cywgYWZfbGF0aW4yX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpOgorCVRoZXJlIGFyZSBubyBsb25nZXIgZmFrZSBzZWdtZW50cyBzaW5jZSBtb3JlIHRoYW4gMTAgeWVhcnMuLi4KKworMjAxNC0wOS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1pbm9yIGNvZGUgc3RyZWFtbGluaW5nLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2F4aXNfaGludHNfbmV3X2VkZ2UpOiBSZW1vdmUgcmVkdW5kYW50CisJaW5pdGlhbGl6YXRpb24uCisKKzIwMTQtMDktMTkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmM6IEhhcm1vbml6ZSBjb2RlLgorCisyMDE0LTA5LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gVGlnaHRlbiB0aGUgb3ZlcmZsb3cgY2hlY2sgaW4gYEZUX011bERpdicuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxEaXYpIFshRlRfTE9ORzY0XTogVXBkYXRlZC4KKworMjAxNC0wOS0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDMxNTMuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9Ub0ZpeGVkKTogQWRkIHByb3RlY3Rpb24gYWdhaW5zdAorCW92ZXJmbG93IGluIGBkaXZpZGVyJy4KKworMjAxNC0wOS0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIFRpZ2h0ZW4gdGhlIG92ZXJmbG93IGNoZWNrIGluIGBGVF9EaXZGaXgnLgorCisJVGhpcyBmaXhlcyBhIDEzLXllYXIgb2xkIGJ1Zy4gVGhlIG9yaWdpbmFsIG92ZXJmbG93IGNoZWNrIHNob3VsZCBoYXZlCisJYmVlbiB1cGRhdGVkIHdoZW4gcm91bmRpbmcgd2FzIGludHJvZHVjZWQgaW50byB0aGlzIGZ1bmN0aW9uCisJKGMyY2QwMDQ0M2IpLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfRGl2Rml4KSBbIUZUX0xPTkc2NF06IFVwZGF0ZWQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlLmggKEZUX0RpdkZpeCk6IFVwZGF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMjAxNC0wOS0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIFRpZ2h0ZW4gdGhlIG92ZXJmbG93IGNoZWNrIGluIGBGVF9NdWxGaXgnLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KSBbIUZUX0xPTkc2NF06IFVwZGF0ZWQuCisKKzIwMTQtMDktMDIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gU2hvcnRjdXQgcHBlbSBjYWxjdWxhdGlvbnMgZm9yIHNxdWFyZSBwaXhlbHMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9FeGVjQ29udGV4dFJlYyk6IE5ldyBmaWVsZAorCWBjdXJfcHBlbV9mdW5jJyB3aXRoIGEgZnVuY3Rpb24gcG9pbnRlci4KKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9SdW5JbnMpOiBJbml0aWFsaXplIGBjdXJfcHBlbV9mdW5jJworCWRlcGVuZGluZyBvbiB0aGUgcGl4ZWwgZ2VvbWV0cnkgdG8gZWl0aGVyLi4uCisJKEN1cnJlbnRfUHBlbV9TdHJldGNoZWQpOiAuLi4gdGhpcyBmb3Igc3RyZXRjaGVkIHBpeGVscy4KKwkoQ3VycmVudF9QcGVtKTogLi4uIG9yIHRoaXMgZm9yIHNxdWFyZSBwaXhlbHMuCisJKERPX01QUEVNLCBET19NUFMsIEluc19ERUxUQVAsIEluc19ERUxUQUMpOiBVc2UgYGN1cl9wcGVtX2Z1bmMnLgorCisyMDE0LTA4LTMxICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCURvbid0IHVzZSBgcmVnaXN0ZXInIGtleXdvcmQuICBGaXhlcyBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX0FkZDY0KSBbIUZUX0xPTkc2NF06IERvIGl0LgorCSogc3JjL2d6aXAvaW5mdHJlZXMuYyAoaHVmdF9idWlsZCk6IERpdHRvLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX011bEZpeDE0X2FybSk6IERpdHRvLgorCisyMDE0LTA4LTI0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIE9wdGltaXplIERFTFRBUCBhbmQgREVMVEFDLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0RFTFRBUCwgSW5zX0RFTFRBQyk6IE1vdmUgcHBlbQorCWNhbGN1bGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBsb29wLgorCisyMDE0LTA4LTIxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MzAzMy4KKworCSogaW5jbHVkZS9jb25maWcvZnRjb25maWcuaCwgYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sCisJYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIFtGVF9MT05HNjRdOiBEbyBub3QgZGlzYWJsZSB0aGUgbWFjcm8gd2hlbgorCTY0LWJpdCB0eXBlIGlzIGBsb25nJy4KKworMjAxNC0wOC0yMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIFNtYWxsIG9wdGltaXphdGlvbiBvZiBgRlRfTXVsRml4Jy4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bEZpeCk6IExvb3NlbiB1cCB0aGUgY29uZGl0aW9uIGZvciBkaXJlY3QKKwkzMi1iaXQgY2FsY3VsYXRpb25zLgorCisyMDE0LTA4LTE5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gVXNlIHVuc2lnbmVkIGNhbGN1bGF0aW9uIGluIGBGVF9NdWxEaXYnLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRGl2KTogVXBkYXRlZCB0byBleHBhbmQgMzItYml0IHJhbmdlLgorCisyMDE0LTA4LTE4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gUmVtb3ZlIHRydW5jYXRpb24gaW4gYEZUX0RpdkZpeCcuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXZGaXgpOiBVcGRhdGVkLgorCisyMDE0LTA4LTE0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlNaW5vciByZWZhY3RvcmluZy4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bERpdiwgRlRfTXVsRGl2X05vX1JvdW5kKTogVXBkYXRlZC4KKworMjAxNC0wOC0xNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJVHVybiBGVF9NU0IgaW50byBhIG1hY3JvIHdoZW4gdXNpbmcgZ2NjIGJ1aWx0aW5zLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYywgaW5jbHVkZS9pbnRlcm5hbC9mdGNhbGMuaDogVXBkYXRlZC4KKworMjAxNC0wOC0xMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEF2b2lkIHVuZGVmaW5lZCBGVF9NU0IgaW4gYEJCb3hfQ3ViaWNfQ2hlY2snLgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoQkJveF9DdWJpY19DaGVjayk6IFVwZGF0ZS4KKwkodXBkYXRlX2N1YmljX21heCk6IFJlcGFsY2Ugd2l0aC4uLgorCShjdWJpY19wZWFrKTogLi4uIHRoaXMsIHdoaWNoIG5vdyBoYW5kbGVzIHVwc2NhbGluZy4KKworMjAxNC0wOC0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEhhbmRsZSBjb2xsYXBzZWQgb3V0bGluZXMgdG8gYXZvaWQgdW5kZWZpbmVkIEZUX01TQi4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbik6IFVwZGF0ZS4KKworMjAxNC0wOC0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIFJlc3RvcmUgRlRfTXVsRml4IGlubGluaW5nLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlLmggKEZUX011bEZpeCk6IFVuY29uZGl0aW9uYWxseSBkZWZpbmVkLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyBbRlRfTVVMRklYX0FTU0VNQkxFUl06IE1vdmUgY29kZSBmcm9tIGhlcmUuLi4KKworCSogaW5jbHVkZS9pbnRlcm5hbC9mdGNhbGMuaCBbRlRfTVVMRklYX0FTU0VNQkxFUl06IC4uLiB0byBoZXJlLAorCXdoaWNoIGNvbmRpdGlvbmFsbHkgcmVwbGFjZXMgdGhlIGZ1bmN0aW9uIHdpdGggYW4gaW5saW5lIHZlcnNpb24KKwl0aHJvdWdoIHRoZSBtYWNyby4KKworMjAxNC0wOC0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChmdF9ncmF5X2Zvcl9wcmVtdWx0aXBsaWVkX3NyZ2JfYmdyYSk6IFJlZmFjdG9yLgorCisyMDE0LTA3LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBGaXggdHlwby4KKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQpOiBVc2UgY29ycmVjdAorCW9mZnNldHMgaW4gdGhpcmQgcXVhZHJhbnQuCisKKwlSZXBvcnRlZCBieSBtYWtzIDxtYWtzcXdlMUB1a3IubmV0Pi4KKworMjAxNC0wNy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDI3ODguCisKKwkqIHNyYy9wZnIvcGZyb2Jqcy5jOiBJbmNsdWRlIGBmdGNhbGMuaCcuCisKKzIwMTQtMDctMTYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVJlcGxhY2UgYGZ0X2hpZ2hwb3cyJyBmdW5jdGlvbi4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2dldF9rZXJuaW5nKTogVXNlIGBGVF9NU0InIGluc3RlYWQgb2YKKwlgZnRfaGlnaHBvdzInLgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYywgaW5jbHVkZS9pbnRlcm5hbC9mdG9ianMuaCAoZnRfaGlnaHBvdzIpOiBSZW1vdmUKKwlpdC4KKworMjAxNC0wNy0xNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTVNCKTogVXRpbGl6ZSBnY2MgYnVpbHRpbnMuCisKKzIwMTQtMDctMTUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBNb3ZlIGFzc2VtYmxlciBjb2RlIGJhY2sgaW4gdGhlIHNvdXJjZSBmaWxlLgorCisJRlRfTXVsRml4IGFzc2VtYmxlciB1c2VkIHRvIHJlc2lkZSBpbiBmdGNhbGMuYyBiZWZvcmUgZjQ3ZDI2M2YxYi4KKworCSogaW5jbHVkZS9jb25maWcvZnRjb25maWcuaCwgYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sCisJYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIFtGVF9NVUxGSVhfQVNTRU1CTEVSXTogTW92ZSBjb2RlIGZyb20gaGVyZS4uLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyBbRlRfTVVMRklYX0FTU0VNQkxFUl06IC4uLiB0byBoZXJlLgorCisyMDE0LTA3LTE0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRnVydGhlciBjbGVhbiB1cCBjb2xvciBiaXRtYXAgY29udmVyc2lvbi4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEpOiBTdG9wCisJdXNpbmcgRlRfTXVsRml4IGFuZCBGVF9EaXZGaXggc2luY2UgYWxsIGNhbGN1bGF0aW9ucyBmaXQgaW50byAzMiBiaXRzLgorCisyMDE0LTA3LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEltcHJvdmUgaGFuZGxpbmcgb2YgYnVnZ3kgYHByZXAnIHRhYmxlcy4KKworCUluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIGBwcmVwJyB0YWJsZSwgbm8gbG9uZ2VyIHRyeSB0byBleGVjdXRlIGl0CisJYWdhaW4gYW5kIGFnYWluLiAgVGhpcyBtYWtlcyBGcmVlVHlwZSBoYW5kbGUgZW5kbGVzcyBsb29wcyBpbiBidWdneQorCWZvbnRzIG11Y2ggZmFzdGVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX1NpemVSZWMpOiBUaGUgZmllbGRzIGBieXRlY29kZV9yZWFkeScKKwlhbmQgYGN2dF9yZWFkeScgYXJlIG5vdyBuZWdhdGl2ZSBpZiBub3QgaW5pdGlhbGl6ZWQgeWV0LCBvdGhlcndpc2UKKwl0aGV5IGluZGljYXRlIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBsYXN0IHJ1bi4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3J1bl9mcGdtLCB0dF9zaXplX3J1bl9wcmVwLAorCXR0X3NpemVfZG9uZV9ieXRlY29kZSwgdHRfc2l6ZV9pbml0X2J5dGVjb2RlLAorCXR0X3NpemVfcmVhZHlfYnl0ZWNvZGUsIHR0X3NpemVfaW5pdCwgdHRfc2l6ZV9kb25lLCB0dF9zaXplX3Jlc2V0KToKKwlVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9sb2FkZXJfaW5pdCk6IFVwZGF0ZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogRm9yY2UgcmVleGVjdXRpb24gb2YgYGZwZ20nCisJYW5kIGBwcmVwJyBvbmx5IGlmIHdlIGFyZSBpbiB0aGUgYGdseWYnIHRhYmxlLgorCisyMDE0LTA3LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy92bXMvZnRjb25maWcuaDogU3luY2hyb25pemUuCisJUHJvYmxlbSByZXBvcnRlZCBieSBBbGV4ZWkuCisKKzIwMTQtMDctMTEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBDbGVhbiB1cCBiaXRtYXAgY29udmVyc2lvbi4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEpOiBVc2UKKwlhcHByb3ByaWF0ZSBGVF9EaXZGaXggYW5kIHJlbW92ZSBzdXBlcmZsdW91cyB1cHNjYWxpbmcuCisKKzIwMTQtMDctMDQgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBTbWFsbCBvcHRpbWl6YXRpb24gb2YgdGhlIGFuY2llbnQgY29kZS4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bERpdiwgRlRfTXVsRGl2X05vX1JvdW5kKTogTG9vc2VuIHVwIHRoZQorCWNvbmRpdGlvbiBmb3IgZGlyZWN0IDMyLWJpdCBjYWxjdWxhdGlvbnMuCisKKzIwMTQtMDYtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBBcHBsZSBzdGFuZGFyZCBnbHlwaCBuYW1lcy4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKHR0X3Bvc3RfZGVmYXVsdF9uYW1lcyk6IFN5bmNocm9uaXplIHdpdGgKKwlgdG9vbHMvZ2xuYW1lcy5weScKKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgQWRhbSBUd2FyZG9jaCA8YWRhbUBmb250bGFiLmNvbT4uCisKKzIwMTQtMDYtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVBhcnRpYWxseSByZXZlcnQgY29tbWl0IGZyb20gMjAxNC0wNi0xMy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBNb3ZlCisJZGVjbGFyYXRpb24gb2YgYHBfZmlyc3QnIGFuZCBgcF9sYXN0JyBvdXQgb2YgdGhlIGxvb3AuCisKKzIwMTQtMDYtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00OiBzL0FDX1BBVEhfUFJPRy9BQ19QQVRIX1RPT0wvLgorCisJVGhpcyBzaW1wbGlmaWVzIGNyb3NzLWNvbXBpbGluZy4KKworMjAxNC0wNi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IG1vcmUgY29tcGlsZXIgd2FybmluZ3MuCisJUmVwb3J0ZWQgYnkgV29qY2llY2ggTWFtcmFrIDx3bWFtcmFrQGdtYWlsLmNvbT4uCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19jb21wdXRlX3N0eWxlX2NvdmVyYWdlKToKKwlNYWtlIGludGVnZXIgY29uc3RhbnQgdW5zaWduZWQuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpCisJPFRUX1NCSVRfVEFCTEVfVFlQRV9TQklYPjogRml4IHR5cGVzLgorCSh0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZCwgdHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UpOiBBZGQgcHJvcGVyCisJY2FzdHMuCisKKzIwMTQtMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKwlSZXBvcnRlZCBieSBXb2pjaWVjaCBNYW1yYWsgPHdtYW1yYWtAZ21haWwuY29tPi4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc3R5bGVfY292ZXJhZ2UpLAorCXNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX3Byb3BlcnR5X3NldCk6IEZpeCBgc2lnbmVkJyB2cy4KKwlgdW5zaWduZWQnIGlzc3Vlcy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBNYWtlIGNvbXBpbGVyCisJaGFwcHkuCisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKF9mdF9sY2RfZmlsdGVyX2Zpcik6IFVzZSBvbmx5IGZvdXIgZWxlbWVudHMKKwlmb3IgYGZpcicuCisJRml4IGBzaWduZWQnIHZzLiBgdW5zaWduZWQnIGlzc3Vlcy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKFdSSVRFX0JZVEUpOiBSZW1vdmVkLCB1bnVzZWQuCisJKFdSSVRFX1VTSE9SVCwgV1JJVEVfVUxPTkcpOiBBZGQgcHJvcGVyIGNhc3RzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9HZXRfVk1ldHJpY3MpOiBBZGQgcHJvcGVyIGNhc3RzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0RFTFRBUCk6IEFkZCBwcm9wZXIgY2FzdHMgZm9yIGBCMScKKwlhbmQgYEIyJy4KKworMjAxNC0wNS0xNiAgQWxleGV5IFBldHJ1Y2hpayAgPGFsZXhleS5wZXRydWNoaWtAZ21haWwuY29tPgorCisJW2NtYWtlXSBBZGQgb3B0aW9uIHRvIGJ1aWxkIE9TIFggZnJhbWV3b3JrLgorCisJKiBDTWFrZUxpc3RzLnR4dDogVXBkYXRlIGFjY29yZGluZ2x5LgorCisJKiBidWlsZHMvbWFjL2ZyZWV0eXBlLUluZm8ucGxpc3Q6IE5ldyBmaWxlLgorCisyMDE0LTA1LTEzICBQYXZlbCBLb3NoZXZveSAgPHBrb3NoZXZveUBnbWFpbC5jb20+CisKKwkqIENNYWtlTGlzdHMudHh0IChCQVNFX1NSQ1MpOiBBZGQgbWlzc2luZyBgZnRiZGYuYycuCisKKzIwMTQtMDUtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX3JlbG9hZCk6IEFzc2lnbiBkZWZhdWx0CisJdmFsdWVzIHRvIGBpbl9kaXInIGFuZCBgb3V0X2RpcicgZm9yIGFsbCBwb2ludHMuCisKKzIwMTQtMDUtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggY3Jhc2ggd2l0aCBmb250IGBDYWJpblNrZXRjaC1Cb2xkLnR0ZicuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+LgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX3JlbG9hZCk6IEZpeCB0aHJlc2hvbGQgZm9yCisJZmluZGluZyBmaXJzdCBub24tbmVhciBwb2ludC4KKwlQcm9wZXJseSBpbml0aWFsaXplIG5vbi1uZWFyIHBvaW50IGRlbHRhcy4KKworMjAxNC0wNS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFkZCBibHVlLXpvbmUgc3VwcG9ydCBmb3IgRGV2YW5hZ2FyaS4KKworCVRoaXMgZXNzZW50aWFsbHkgbW92ZXMgdGhlIERldmFuYWdhcmkgc2NyaXB0IGZyb20gdGhlIGBJbmRpYycgaGludGVyCisJdG8gdGhlIGBMYXRpbicgaGludGVyLiAgVGhhbmtzIHRvIEdpcmlzaCBEYWx2aQorCTxnaXJpc2guZGFsdmlAZ21haWwuY29tPiBmb3IgZ3VpZGFuY2Ugd2l0aCBibHVlIHpvbmUgY2hhcmFjdGVycyEKKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBEZXZhbmFnYXJpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgRGV2YW5hZ2FyaSBzdGFuZGFyZCBjaGFyYWN0ZXJzIGFuZAorCW1vdmUgZGF0YSBvdXQgb2YgQUZfQ09ORklHX09QVElPTl9JTkRJQyBibG9jay4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYzogTW92ZSBEZXZhbmFnYXJpIGRhdGEgb3V0IG9mCisJQUZfQ09ORklHX09QVElPTl9JTkRJQyBibG9jay4KKwlNb3ZlIFUrMjBCOSwgKG5ldykgUnVwZWUgc2lnbiwgZnJvbSBMYXRpbiB0byBEZXZhbmFnYXJpLgorCisJKiBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBVcGRhdGUgRGV2YW5hZ2FyaSBkYXRhOyBpbiBwYXJ0aWN1bGFyLCB1c2UKKwlBRl9XUklUSU5HX1NZU1RFTV9MQVRJTi4KKworMjAxNC0wNS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBoYW5kbGluZyBvZiBuZXV0cmFsIGJsdWUgem9uZXMgaW4gc3RlbXMuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfRWRnZV9GbGFncyk6IE5ldyB2YWx1ZQorCWBBRl9FREdFX05FVVRSQUwnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcyk6IFRyYWNlCisJbmV1dHJhbCBibHVlIHpvbmVzIHdpdGggQUZfRURHRV9ORVVUUkFMLgorCShhZl9sYXRpbl9oaW50X2VkZ2VzKTogU2tpcCBuZXV0cmFsIGJsdWUgem9uZXMgaWYgbmVjZXNzYXJ5LgorCisyMDE0LTA0LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW50cm9kdWNlIG5ldXRyYWwgYmx1ZSB6b25lcyB0byB0aGUgbGF0aW4gbW9kdWxlLgorCisJU3VjaCBibHVlIHpvbmVzIG1hdGNoIGVpdGhlciB0aGUgdG9wIG9yIHRoZSBib3R0b20gb2YgYSBjb250b3VyLiAgV2UKKwluZWVkIHRoZW0gZm9yIHNjcmlwdHMgd2hlcmUgYWNjZW50LWxpa2UgZWxlbWVudHMgZGlyZWN0bHkgdG91Y2ggdGhlCisJYmFzZSBjaGFyYWN0ZXIgKGZvciBleGFtcGxlLCBzb21lIHZvd2VsIHNpZ25zIGluIERldmFuYWdhcmksIGNmLgorCVUrMDkxMyBvciBVKzA5MTQpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuaGluIChBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwpOiBOZXcKKwlwcm9wZXJ0eS4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmggKEFGX0xBVElOX0lTX05FVVRSQUxfQkxVRSk6IE5ldyBtYWNyby4KKwkoQUZfTEFUSU5fQkxVRV9ORVVUUkFMKTogTmV3IGVudW1lcmF0aW9uIHZhbHVlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcywKKwlhZl9sYXRpbl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMpOiBIYW5kbGUgbmV1dHJhbCBibHVlIHpvbmVzLgorCisyMDE0LTA0LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jOiBQYXJ0aWFsbHkgcmV2ZXJ0IGNvbW1pdCBmcm9tIDIwMTQtMDQtMTcuCisKKwlVc2luZyBpbnB1dCBnbHlwaCBjb3ZlcmFnZSBkYXRhIGlzIHNpbXBseSB3cm9uZy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgTmlrb2xhdXMgV2F4d2VpbGVyIDxtYWRpZ2Vuc0BnbWFpbC5jb20+IGFuZAorCU1hbnRhcyBNaWt1bMSXbmFzIDxncmF3aXR5QGdtYWlsLmNvbT4uCisKKzIwMTQtMDQtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChWZXJ0aWNhbF9Td2VlcF9TcGFuKTogVXNlIGRyb3Atb3V0IG1vZGUuCisKKwlUaGlzIHNwb3QgaGFzIGJlZW4gbWlzc2VkIHdoaWxlIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIHZhcmlvdXMKKwlkcm9wLW91dCBtb2RlcyB5ZWFycyBhZ28gKGluY2x1ZGluZyBubyBkcm9wLW91dCBtb2RlLCB3aGljaCB0aGlzCisJY29tbWl0IGZpeGVzKS4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgUGF0cmljayBUaG9tYXMgPHB0aG9tYXM1MDVAZ21haWwuY29tPi4KKworMjAxNC0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKGVycm9yX2NhbGxiYWNrKTogcy9sb25nam1wL2Z0X2xvbmdqbXAvLgorCisyMDE0LTA0LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IFNhdmFubmFoIGJ1ZyAjNDIxNDguCisKKwlUaGUgYWRhcHRhdGlvbiBvZiB0aGUgY2prIGF1dG8taGludGVyIG1vZHVsZSB0byBibHVlIHN0cmluZ3NldHMgaW4KKwkyMDEzLTA4LTI1IGhhZCB0aHJlZSBzZXZlcmUgYnVncy4gIE1lYSBjdWxwYS4KKworCTEuIENvbnRyYXJ5IHRvIHRoZSBsYXRpbiBhdXRvLWhpbnRlciwgY2hhcmFjdGVycyBmb3IgcmVmZXJlbmNlIGFuZAorCSAgIG92ZXJzaG9vdCB2YWx1ZXMgb2YgYSBibHVlIHpvbmUgYXJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LiAgRHVlIHRvCisJICAgdGhlIHNjcmV3ZWQtdXAgY2hhbmdlIGl0IGRpZG4ndCB3b3JrIGF0IGFsbC4KKworCTIuIEEgYm9vbGVhbiBjb21wYXJpc29uIHdhcyBlcnJvbmVvdXNseSByZXBsYWNlZCB3aXRoIGEgY2FzdCwKKwkgICBjYXVzaW5nIGludmFsaWQgcmVzdWx0cyB3aXRoIHRoZSBgXicgb3BlcmF0b3IgbGF0ZXIgb24uICBUaGUKKwkgICB2aXN1YWwgYXJ0aWZhY3QgY2F1c2VkIGJ5IHRoaXMgcHJvYmxlbSBpcyB0aGUgdG9waWMgb2YgdGhlIGJ1ZworCSAgIHJlcG9ydC4KKworCTMuIFR3byBmbGFnIHZhbHVlcyB3ZXJlIGludmVydGVkLCBjYXVzaW5nIGluY29ycmVjdCBhc3NpZ25tZW50IG9mCisJICAgcmVmZXJlbmNlIGFuZCBvdmVyc2hvb3QgdmFsdWVzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBGaXggQ0pLIGJsdWVzdHJpbmdzLCBpbnRyb2R1Y2luZyBhIG5ldworCXN5bnRheCB0byBoYXZlIGJvdGggcmVmZXJlbmNlIGFuZCBvdmVyc2hvb3QgY2hhcmFjdGVycyBpbiBhIHNpbmdsZQorCXN0cmluZy4gIFRoaXMgaXMgZXJyb3IgIzEuCisJQWRkIGV4dGVuc2l2ZSBjb21tZW50cy4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmhpbiAoQUZfQkxVRV9QUk9QRVJUWV9DSktfRklMTCk6IFJlbW92ZWQsIG5vCisJbG9uZ2VyIHVzZWQuCisJKEFGX0JMVUVfUFJPUEVSVFlfQ0pLX1RPUCwgQUZfQkxVRV9QUk9QRVJUWV9DSktfSE9SSVopOiBGaXggdmFsdWVzLgorCVRoaXMgaXMgZXJyb3IgIzMuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2luaXRfYmx1ZXMpOiBDb3JyZWN0IGVycm9yICMxLgorCVVzZSBjaGFyYWN0ZXIgYHwnIHRvIHNlcGFyYXRlIGNoYXJhY3RlcnMgZm9yIHJlZmVyZW5jZSBhbmQgb3ZlcnNob290CisJdmFsdWVzLgorCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcywgc3luY2hyb25pemluZyB0aGVtIHdpdGggdGhlIGxhdGluCisJYXV0by1oaW50ZXIuCisJKGFmX2Nqa19oaW50c19jb21wdXRlX2JsdWVfZWRnZXMpOiBGaXggdmFsdWUgb2YgYGlzX3RvcF9yaWdodF9ibHVlJy4KKwlUaGlzIGlzIGVycm9yICMyLgorCShhZl9jamtfYWxpZ25fbGlua2VkX2VkZ2UpOiBBZGQgdHJhY2luZyBtZXNzYWdlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5oIChBRl9DSktfSVNfRklMTEVEX0JMVUUpOiBSZW1vdmVkLCBubyBsb25nZXIKKwl1c2VkLgorCisyMDE0LTA0LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTW9yZSBjb3ZlcmFnZSBmaXhlcyBmb3IgY29tcGxleCBzY3JpcHRzLgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYyAoYWZfZ2V0X2NvdmVyYWdlKTogTWVyZ2UgaW5wdXQgZ2x5cGggY292ZXJhZ2UKKwlvZiBHU1VCIGxvb2t1cHMgaW50byBvdXRwdXQgY292ZXJhZ2UuICBPdGhlcndpc2UsIGxpZ2F0dXJlcyBhcmUgbm90CisJaGFuZGxlZCBwcm9wZXJseS4KKwlEb24ndCBjaGVjayBibHVlIHpvbmUgY2hhcmFjdGVycyBmb3IgZGVmYXVsdCBjb3ZlcmFnZS4KKworMjAxNC0wNC0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgRlRfR2V0X1N1YkdseXBoX0luZm8nIGFjdHVhbGx5IHdvcmsuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HZXRfU3ViR2x5cGhfSW5mbyk6IFJldHVybiBGVF9FcnJfT2sKKwlpZiB0aGVyZSBpcyBubyBlcnJvci4KKworMjAxNC0wNC0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2FmYmx1ZS5wbF06IE1pbm9yIGltcHJvdmVtZW50cy4KKworCSogc3JjL3Rvb2xzL2FmYmx1ZS5wbDogQWxsb3cgd2hpdGVzcGFjZSBiZWZvcmUgY29tbWVudHMuCisJSWdub3JlIHdoaXRlc3BhY2UgaW4gc3RyaW5ncy4KKworMjAxNC0wNC0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgY292ZXJhZ2UgaGFuZGxpbmcuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jIChhZl9nZXRfY292ZXJhZ2UpOiBEb24ndCBleGNsdWRlIGdseXBocworCWFwcGVhcmluZyBpbiB0aGUgR1BPUyB0YWJsZSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgZGVmYXVsdAorCWNvdmVyYWdlLgorCisyMDE0LTA0LTEzICBEYXZpZCBXZWJlciA8d2ViZXIuYXVsZW5kb3JmQGdvb2dsZW1haWwuY29tPgorCisJW3Ntb290aF0gRml4IHN0YW5kLWFsb25lIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoRlRfQkVHSU5fU1RNTlQsIEZUX0VORF9TVE1OVCk6IERlZmluZS4KKworMjAxNC0wNC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFJlZGVzaWduIHRoZSByZWNvZ25pdGlvbiBhbGdvcml0aG0gb2Ygc3Ryb25nIHBvaW50cy4KKworCUluIHBhcnRpY3VsYXIsIGxvY2FsIGV4dHJlbWEgd2l0aG91dCBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNlZ21lbnRzCisJYXJlIGJldHRlciByZWNvZ25pemVkOgorCisJICArIEEgICAgICAgICAgICAgICAgKyBECisJICAgXCAgICAgICAgICAgICAgICAvCisJICAgIFwgICAgICAgICAgICAgIC8KKwkgICAgIFwgICAgICAgICAgICAvCisJICAgICAgXCAgICAgICAgICAvCisJICAgICAgIFwgICAgICAgICsgQworCSAgICAgICAgXCAgICAvCisJICAgICAgIEIgKy8KKworCUlmIHRoZSBkaXN0YW5jZXMgQUIgYW5kIENEIGFyZSBsYXJnZSwgcG9pbnQgQiB3YXNuJ3QgcHJldmlvdXNseQorCWRldGVjdGVkIGFzIGFuIGV4dHJlbXVtIHNpbmNlIHRoZSBgZnRfY29ybmVyX2lzX2ZsYXQnIGZ1bmN0aW9uCisJYHN3YWxsb3dlZCcgQkMgcmVnYXJkbGVzcyBvZiBpdHMgZGlyZWN0aW9uLCB0YWdnaW5nIHBvaW50IEIgYXMgd2Vhay4KKwlUaGUgbmV4dCBpdGVyYXRpb24gc3RhcnRlZCBhdCBCIGFuZCBtYWRlIGBmdF9jb3JuZXJfaXNfZmxhdCcgc3dhbGxvdworCXBvaW50IEMsIHRhZ2dpbmcgaXQgYXMgd2VhayBhbHNvLCBldCB2b2lsw6AuCisKKwlUbyBpbXByb3ZlIHRoYXQsIGFub3RoZXIgcGFzcyBnZXRzIG5vdyBwZXJmb3JtZWQgYmVmb3JlIGNhbGxpbmcKKwlgZnRfY29ybmVyX2lzX2ZsYXQnIHRvIGltcHJvdmUgdGhlIGB0b3BvbG9neScgb2YgYW4gb3V0bGluZTogQQorCXNlcXVlbmNlIG9mIG5vbi1ob3Jpem9udGFsIG9yIG5vbi12ZXJ0aWNhbCB2ZWN0b3JzIHRoYXQgcG9pbnQgaW50bworCXRoZSBzYW1lIHF1YWRyYW50IGFyZSBoYW5kbGVkIGFzIGEgc2luZ2xlLCBsYXJnZSB2ZWN0b3IuCisKKwlBZGRpdGlvbmFsbHksIGRpc3RhbmNlcyBvZiBuZWFyIHBvaW50cyBhcmUgbm93IGFjY3VtdWxhdGVkLCB3aGljaAorCW1ha2VzIHRoZSBhdXRvLWhpbnRlciBoYW5kbGUgdGhlbSBhcyBpZiB0aGV5IHdlcmUgcHJlcGVuZGVkIHRvIHRoZQorCW5leHQgbm9uLW5lYXIgdmVjdG9yLgorCisJVGhpcyBnZW5lcmFsbHkgaW1wcm92ZXMgdGhlIGF1dG8taGludGVyJ3MgcmVuZGVyaW5nIHJlc3VsdHMuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogSW1wbGVtZW50IGl0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0ZMQUdTKTogUmVtb3ZlIG5vIGxvbmdlciB1c2VkIGZsYWcKKwlgQUZfRkxBR19ORUFSJy4KKworMjAxNC0wNC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgc2NvcmluZyBhbGdvcml0aG0gZm9yIGlkZW50aWZ5aW5nIHN0ZW1zLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBLYXJzdGVuIEzDvGNrZSA8a2Fyc3Rlbi5sdWVja2VAa2x0Zi5kZT4uCisKKwlUaGUgbmV3IGFsZ29yaXRobSB0YWtlcyBjYXJlIG9mIHRoZSB3aWR0aCBvZiBzdGVtczogSWYgdGhlIGRpc3RhbmNlCisJYmV0d2VlbiB0d28gc2VnbWVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3Qgc3RlbSB3aWR0aCwgdGhlCisJZGVtZXJpdHMgcXVpY2tseSBpbmNyZWFzZSBmb3IgbGFyZ2VyIGRpc3RhbmNlcy4gIFRoaXMgaW1wcm92ZXMKKwloaW50aW5nIG9mIHNsYW50ZWQgZm9udHMgKGVzcGVjaWFsbHkgaWYgdGhlIGlubmVyIHBhcnRzIG9mIHNlcmlmcworCWhhdmUgbm9uLWhvcml6b250YWwgYHNob3VsZGVycycpLCBhdm9pZGluZyBmYWxzZSBzdGVtIGxpbmtzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2xpbmtfc2VnbWVudHMpOiBVc2UgbGFyZ2VzdAorCXN0ZW0gd2lkdGggKGlmIGF2YWlsYWJsZSkgdG8gY29tcHV0ZSBiZXR0ZXIgZGVtZXJpdHMgZm9yIGRpc3RhbmNlcworCWJldHdlZW4gc3RlbXMuCisJKGFmX2xhdGluX2hpbnRzX2RldGVjdF9mZWF0dXJlcyk6IFBhc3Mgc3RlbSB3aWR0aCBhcnJheSBhbmQgYXJyYXkKKwlzaXplLgorCShhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzKTogVXBkYXRlZCB0byB1c2Ugb3JpZ2luYWwgYWxnb3JpdGhtLgorCShhZl9sYXRpbl9oaW50c19hcHBseSk6IFVwZGF0ZWQgdG8gdXNlIG5ldyBhbGdvcml0aG0uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaDogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmY2prLmM6IFVwZGF0ZWQuCisKKzIwMTQtMDQtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCURvbid0IHJlcXVpcmUgYGd6aXAnIG1vZHVsZSBmb3IgYHNmbnQnLgorCisJUmVwb3J0ZWQgYnkgUHJlZXQgPHByaXNtYXRpYy5wcm9qZWN0QGdtYWlsLmNvbT4uCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jICh3b2ZmX29wZW5fZm9udCk6IEd1YXJkIHVzZSBvZgorCUZUX0d6aXBfVW5jb21wcmVzcyB3aXRoIEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIuCisKKzIwMTQtMDMtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM4MjM1LgorCisJV29yayBhcm91bmQgYSBidWcgaW4gcGtnLWNvbmZpZyB2ZXJzaW9uIDAuMjggYW5kIGVhcmxpZXI6IElmIGEKKwl2YXJpYWJsZSB2YWx1ZSBnZXRzIHN1cnJvdW5kZWQgYnkgZG91YmxlcXVvdGVzIChpbiBwYXJ0aWN1bGFyIHZhbHVlcworCWZvciB0aGUgYHByZWZpeCcgdmFyaWFibGUpLCB0aGUgcHJlZml4IG92ZXJyaWRlIG1lY2hhbmlzbSBmYWlscy4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluOiBEb24ndCB1c2UgZG91YmxlcXVvdGVzLgorCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGZyZWV0eXBlLnBjKTogRXNjYXBlIHNwYWNlcyBpbiBkaXJlY3RvcnkKKwluYW1lcyB3aXRoIGJhY2tzbGFzaGVzLgorCisyMDE0LTAzLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MTk0Ni4KKworCUJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBNYXJlayBLYcWhw61rIDxta2FzaWtAcmVkaGF0LmNvbT4uCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKExJQlNfQ09ORklHKTogUmVtb3ZlLgorCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluIChsaWJzKTogSGFyZC1jb2RlIHZhbHVlLgorCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW46IFVwZGF0ZWQuCisKKzIwMTQtMDMtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFub3RoZXIgcmV2ZXJ0IGZvciB0aGUgY2hhbmdlIGZyb20gMjAxNC0wMy0xOC4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgTmlrb2xhdXMgV2F4d2VpbGVyIDxtYWRpZ2Vuc0BnbWFpbC5jb20+LgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KTogRW5zdXJlIHRoYXQgYW4gYEZUX011bEZpeCcgc3ltYm9sCisJZ2V0cyBhbHdheXMgZXhwb3J0ZWQuCisKKzIwMTQtMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUNNYWtlTGlzdHMudHh0OiBBbm90aGVyIGZpeCBmb3IgaW5jbHVkZSBkaXJlY3Rvcmllcy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgVGF5bG9yIEhvbGJlcnRvbiA8dGF5bG9yY2hvbGJlcnRvbkBnbWFpbC5jb20+LgorCisyMDE0LTAzLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDTWFrZUxpc3RzLnR4dDogRml4IGluY2x1ZGUgZGlyZWN0b3JpZXMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFRheWxvciBIb2xiZXJ0b24gPHRheWxvcmNob2xiZXJ0b25AZ21haWwuY29tPi4KKworMjAxNC0wMy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUGFydGlhbGx5IHJldmVydCBsYXN0IGNvbW1pdC4KKworCUZvdW5kIGJ5IEFsZXhlaS4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBJbml0aWFsaXppbmcKKwl0aG9zZSB2YXJpYWJsZXMgaXMgcGxhaW4gd3JvbmcsIHNpbmNlIHdlIGFyZSBpbiBhIGxvb3AuCisKKzIwMTQtMDMtMTggIFNlYW4gTWNCcmlkZSAgPHNlYW5Acm9ndWUtcmVzZWFyY2guY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY2xhbmcgd2FybmluZ3MuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKTogSW5pdGlhbGl6ZQorCXNvbWUgdmFyaWFibGVzLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KTogT25seSB1c2UgY29kZSBpZgorCWBGVF9NVUxGSVhfSU5MSU5FRCcgaXMgbm90IGRlZmluZWQuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoYmRmX2NtYXBfY2xhc3MpLCBzcmMvY2FjaGUvZnRjYmFzaWMuYworCShmdGNfYmFzaWNfaW1hZ2VfZmFtaWx5X2NsYXNzLCBmdGNfYmFzaWNfaW1hZ2VfY2FjaGVfY2xhc3MsCisJZnRjX2Jhc2ljX3NiaXRfZmFtaWx5X2NsYXNzLCBmdGNfYmFzaWNfc2JpdF9jYWNoZV9jbGFzcyksCisJc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoZnRjX2NtYXBfY2FjaGVfY2xhc3MpLCBzcmMvY2FjaGUvZnRjbWFuYWcuYworCShmdGNfc2l6ZV9saXN0X2NsYXNzLCBmdGNfZmFjZV9saXN0X2NsYXNzKSwgc3JjL3BjZi9wY2Zkcml2ci5jCisJKHBjZl9jbWFwX2NsYXNzKSwgc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfbWV0cmljc19zZXJ2aWNlX3JlYyk6IE1ha2UKKwlmdW5jdGlvbiBzdGF0aWMuCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wc19nZXRfZm9udF92YWx1ZSk6IFJlbW92ZSByZWR1bmRhbnQKKwljb2RlLgorCisyMDE0LTAzLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MTg2OS4KKworCVRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSB3aXRoIEhhcmZCdXp6ICg8PSAwLjkuMjYpLCB3aGljaCBkb2Vzbid0CisJdmFsaWRhdGUgZ2x5cGggaW5kaWNlcyByZXR1cm5lZCBieQorCWBoYl9vdF9sYXlvdXRfbG9va3VwX2NvbGxlY3RfZ2x5cGhzJy4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmMgKGFmX2dldF9jb3ZlcmFnZSk6IEd1YXJkIGBpZHgnLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTQtMDMtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogRG9uJ3Qgc2hvdyBlcnJvciBtZXNzYWdlcyBvZiBgd2hpY2gnLgorCisyMDE0LTAzLTA5ICBBbGFuIENvb3BlcnNtaXRoICA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorCisJRml4IGNwcGNoZWNrIDEuNjQgd2FybmluZy4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX25ldyk6IENhdGNoIE5VTEwgcG9pbnRlcgorCWRlcmVmZXJlbmNlIGluIGNhc2Ugb2YgZXJyb3IuCisKKzIwMTQtMDMtMDkgIFNlYW4gTWNCcmlkZSAgPHNlYW5Acm9ndWUtcmVzZWFyY2guY29tPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfZmFjZV9idWlsZF9jbWFwcyk6IFJlbW92ZSBjbGFuZyB3YXJuaW5nLgorCisyMDE0LTAzLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi41LjMgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi01LTMnLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNS4zLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi41LjIvMi41LjMvLCBzLzI1Mi8yNTMvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDMuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxNzoyOjExLgorCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMy4KKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNC0wMy0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4ZXMgZm9yIGNvbXBpbGF0aW9uIHdpdGggQysrLgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYyAoc2NyaXB0cyk6IENoYW5nZSB0eXBlIHRvIGBoYl9zY3JpcHRfdCcuCisJKGFmX2dldF9jb3ZlcmFnZSk6IFVwZGF0ZWQuCisJKENPVkVSQUdFKTogQWRkIGNhc3QuCisKKzIwMTQtMDMtMDYgIFNlYW4gTWNCcmlkZSAgPHNlYW5Acm9ndWUtcmVzZWFyY2guY29tPgorCisJUmVtb3ZlIG1vcmUgY2xhbmcgYW5hbHl6ZXIgd2FybmluZ3MuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcmVhZHN0cmVhbSksIHNyYy90cnVldHlwZS90dGdsb2FkLmMKKwkoVFRfTG9hZF9HbHlwaCk6IFJlbW92ZSBkZWFkIHN0b3Jlcy4KKworMjAxNC0wMy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBTaW1wbGlmeS4KKworMjAxNC0wMy0wNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBhIGJ1ZyBpbiBjb25maWd1cmUgaW4gbGlicmFyeSBkZXBlbmRlbmN5IHNldHRpbmcKKwlSZXBvcnRlZCBpbiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY1Mi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogVXNlIGB4IiR7eHh4fSIgIT0geG5vJyBzdHlsZS4KKworMjAxNC0wMy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWlub3IgZml4IGZvciBgbWFrZSBkZXZlbCcuCisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoSU5DTFVERV9GTEFHUykgW0RFVkVMX0RJUl06IERvbid0IHVzZQorCXBrZy1jb25maWcgZm9yIGJ6aXAyIHNpbmNlIG5vdCBhbGwgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMgaGF2ZQorCWBiemlwMi5wYycgKGFuZCB0aGUgaGVhZGVyIGZpbGUgYGJ6bGliLmgnIGlzIGxvY2F0ZWQgaW4gL3Vzci9pbmNsdWRlCisJbm9ybWFsbHkpLgorCisyMDE0LTAzLTA0ICBTZWFuIE1jQnJpZGUgIDxzZWFuQHJvZ3VlLXJlc2VhcmNoLmNvbT4KKworCUZpeCBzZXZlcmFsIGNsYW5nIHN0YXRpYyBhbmFseXplciBkZWFkIHN0b3JlIHdhcm5pbmdzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX3JlbG9hZCwKKwlhZl9nbHlwaF9oaW50c19hbGlnbl93ZWFrX3BvaW50cyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBhc3NpZ25tZW50cy4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoYmRmX2ZvbnRfbG9hZCk6IERpdHRvLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jIChwc2hfZ2x5cGhfY29tcHV0ZV9leHRyZW1hLAorCXBzaF9nbHlwaF9pbnRlcnBvbGF0ZV9vdGhlcl9wb2ludHMpOiBEaXR0by4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9TZXRfTU1fQmxlbmQpOiBEaXR0by4KKworMjAxNC0wMy0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmV3cml0ZSBsaWJyYXJ5IG9wdGlvbiBoYW5kbGluZyBpbiBgY29uZmlndXJlJy4KKworCW8gSW50cm9kdWNlIGBhdXRvJyB2YWx1ZSBmb3IgYC0td2l0aC1YWFgnIGxpYnJhcnkgb3B0aW9uczsgdGhpcyBpcworCSAgbm93IHRoZSBkZWZhdWx0LgorCisJbyBGaXJzdCB1c2UgYHBrZy1jb25maWcnIGZvciBsaWJyYXJ5IGRldGVjdGlvbiwgdGhlbiBmYWxsIGJhY2sgdG8KKwkgIG90aGVyIHRlc3RzLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICgtLXdpdGgtemxpYiwgLS13aXRoLWJ6aXAyLCAtLXdpdGgtcG5nLAorCS0td2l0aC1oYXJmYnV6eik6IFJld3JpdGUuCisJVXNlIG5ldyBgeHh4X3JlcXByaXYnLCBgeHh4X2xpYnByaXYnLCBhbmQgYHh4eF9saWJzdGF0aWNjb25mJworCXZhcmlhYmxlcyB0byBjb2xsZWN0IGRhdGEgZm9yIGBmcmVldHlwZTIucGMnIGFuZCBgZnJlZXR5cGUtY29uZmlnJy4KKwkoRlQyX0VYVFJBX0xJQlMpOiBSZW5hbWVkIHRvIC4uLgorCShmdDJfZXh0cmFfbGlicyk6IFRoaXMgc2luY2UgaXQgZ2V0cyBubyBsb25nZXIgc3Vic3RpdHV0ZWQuCisJKFJFUVVJUkVTX1BSSVZBVEUsIExJQlNfUFJJVkFURSwgTElCU19DT05GSUcsIExJQlNTVEFUSUNfQ09ORklHKToKKwlOZXcgb3V0cHV0IHZhcmlhYmxlcywgcmVwbGFjaW5nIGBYWFhfUEtHJyBhbmQgYExJQlhYWCcuCisJQWRkIG5vdGljZSBhdCB0aGUgZW5kIG9mIGBjb25maWd1cmUnIHNob3dpbmcgdGhlIGxpYnJhcnkKKwljb25maWd1cmF0aW9uLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4gKC0tc3RhdGljKTogTmV3IGNvbW1hbmQgbGluZQorCW9wdGlvbi4KKwkobGlicyk6IFVwZGF0ZWQuCisJKHN0YXRpY2xpYnMpOiBOZXcgdmFyaWFibGUsIHRvIGJlIHVzZWQgaWYgYC0tc3RhdGljJyBpcyBnaXZlbi4KKwkqIGRvY3MvZnJlZXR5cGUtY29uZmlnLjE6IERvY3VtZW50IGAtLXN0YXRpYycuCisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5pbiwgYnVpbGRzL3VuaXgvdW5peC1kZWYuaW46IFVwZGF0ZWQuCisKKzIwMTQtMDMtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUF2b2lkIGBsb25nIGxvbmcnIHdhcm5pbmdzIHdpdGggb2xkZXIgZ2NjIGNvbXBpbGVycy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IERvbid0IHVzZSBnY2MncyBgLXBlZGFudGljJyBmbGFnIGZvcgorCXZlcnNpb25zIDwgNC42LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgTWF4IE9TIFggc2luY2UgdGhpcworCU9TIHJ1bnMgYSBnY2MgdmFyaWFudCAob3IgZW11bGF0aW9uKSBiYXNlZCBvbiB2ZXJzaW9uIDQuMi4xLgorCisyMDE0LTAzLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvSU5TVEFMTC5DUk9TUzogUmV2aXNlZCBhbmQgdXBkYXRlZC4KKworMjAxNC0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgbWFrZSBjbGVhbicgcmVtb3ZlIGBmcmVldHlwZTIucGMnLgorCisJVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlIGF0IGJ1aWxkIHRpbWUsIG5vdCBjb25maWd1cmUgdGltZS4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKERJU1RDTEVBTik6IE1vdmUgYGZyZWV0eXBlMi5wYycgdG8gLi4uCisJKENMRUFOKTogVGhpcyB2YXJpYWJsZS4KKworMjAxNC0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVXNlIHBrZy1jb25maWcgZm9yIGRldGVjdGluZyBsaWJwbmcgYW5kIGxpYmJ6MiBhbHNvLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3IChIQVZFX1BLRyk6IE5ldyB2YXJpYWJsZS4KKwlTZWFyY2ggZm9yIGxpYmJ6MiB1c2luZyBgcGtnLWNvbmZpZyc7IHMvQloyL0JaSVAyLy4KKwlTZWFyY2ggZm9yIGxpYnBuZyB1c2luZyBgcGtnLWNvbmZpZycuCisJRml4IGRlZmluaXRpb24gb2YgYExJQkhBUkZCVVpaJyB2YXJpYWJsZS4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbiAoJGxpYnMpOiBVcGRhdGVkLgorCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluOiBBZGQgYFVSTCcgZmllbGQuCisJVXBkYXRlIGBSZXF1aXJlcy5wcml2YXRlJyBhbmQgYExpYnMucHJpdmF0ZScuCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbjogVXBkYXRlZC4KKworMjAxNC0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIGNvbmZpZ3VyZSBzdXBwb3J0IGZvciBIYXJmQnV6ei4KKworCSogYnVpbGRzL3VuaXgvcGtnLm00OiBOZXcgZmlsZS4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IFNlYXJjaCBmb3IgbGliaGFyZmJ1enogdXNpbmcKKwlgcGtnLWNvbmZpZycuCisJQWRkIGAtLXdpdGhvdXQtaGFyZmJ1enonIG9wdGlvbi4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbiwgYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluLAorCWJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChmcmVldHlwZS1jb25maWcsIGZyZWV0eXBlMi5wYyk6IEhhbmRsZQorCUhhcmZCdXp6LgorCisJKiBkb2NzL0lOU1RBTEwuVU5JWDogRG9jdW1lbnQgaW50ZXJkZXBlbmRlbmN5IG9mIEZyZWV0eXBlIHdpdGgKKwlIYXJmQnV6ei4KKworMjAxNC0wMi0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2NmZl0gTWF0aCBzaW1wbGlmaWNhdGlvbnMuCisKKwkqIHNyYy9jZjJibHVlcy5jIChjZjJfYmx1ZXNfaW5pdCk6IFVzZSBgRlRfTXVsRGl2Jy4KKwkqIHNyYy9jZjJmdC5jIChjZjJfZ2V0U2NhbGVBbmRIaW50RmxhZyk6IFVzZSBzaW1wbGUgZGl2aXNpb24uCisKKzIwMTQtMDItMjggIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+CisKKwlbY2ZmXSBGaXggU2F2YW5uYWggYnVnICM0MTY5NywgcGFydCAyLgorCisJKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIsCisJY2YyX2luaXRHbG9iYWxSZWdpb25CdWZmZXIpOiBJdCBpcyBwb3NzaWJsZSBmb3IgYSBjaGFyc3RyaW5nIHRvIGNhbGwKKwlhIHN1YnJvdXRpbmUgaWYgbm8gc3Vicm91dGluZXMgZXhpc3QuICBUaGlzIGlzIGFuIGVycm9yIGJ1dCBzaG91bGQKKwlub3QgdHJpZ2dlciBhbiBhc3NlcnQuICBTcGxpdCB0aGUgYXNzZXJ0IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKzIwMTQtMDItMjggIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+CisKKwlbY2ZmXSBGaXggU2F2YW5uYWggYnVnICM0MTY5NywgcGFydCAxLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2J1aWxkKTogUmV0dXJuIHdoZW4gYGhpbnRNYXNrJyBpcworCWludmFsaWQuICBJbiB0aGlzIGNhc2UsIGl0IGlzIG5vdCBzYWZlIHRvIHVzZSB0aGUgbGVuZ3RoIG9mCisJYGhTdGVtSGludEFycmF5JzsgdGhlIGV4Y2VwdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlY29yZGVkIGluCisJYGhpbnRNYXNrJy4KKworMjAxNC0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEZpeCBTYXZhbm5haCBidWcgIzQxNjk2LgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDBfdmFsaWRhdGUsIHR0X2NtYXAyX3ZhbGlkYXRlLAorCXR0X2NtYXA0X3ZhbGlkYXRlLCB0dF9jbWFwMTRfdmFsaWRhdGUpOiBGaXggbGltaXQgdGVzdHMuCisKKzIwMTQtMDItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt3aW5mbnRdIEZpeCBTYXZhbm5haCBidWcgIzQxNjk0LgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9Mb2FkX0dseXBoKTogQ2hlY2sgZ2x5cGggb2Zmc2V0LgorCisyMDE0LTAyLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBGaXggU2F2YW5uYWggYnVnICM0MTY5My4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKENGRl9Mb2FkX0ZEX1NlbGVjdCk6IFJlamVjdCBlbXB0eSBhcnJheS4KKworMjAxNC0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjNDE2OTIuCisKKwliZGZsaWIgcHV0cyBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSBpbnRvIGEgYnVmZmVyIGluIGNodW5rcyBvZgorCTEwMjQgYnl0ZXMuICBUaGUgZGF0YSBpdHNlbGYgZ2V0cyB0aGVuIHBhcnNlZCBsaW5lIGJ5IGxpbmUsIHNpbXBseQorCWluY3JlYXNpbmcgdGhlIGN1cnJlbnQgcG9pbnRlciBpbnRvIHRoZSBidWZmZXI7IGlmIHRoZSBzZWFyY2ggZm9yCisJdGhlIGZpbmFsIG5ld2xpbmUgY2hhcmFjdGVyIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLCBtb3JlIGRhdGEgZ2V0cworCXJlYWQuCisKKwlIb3dldmVyLCBpbiBjYXNlIHRoZSBjdXJyZW50IGxpbmUncyBlbmQgaXMgdmVyeSBuZWFyIHRvIHRoZSBidWZmZXIKKwllbmQsIGFuZCB0aGUga2V5d29yZCB0byBjb21wYXJlIHdpdGggaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQKKwlsaW5lJ3MgbGVuZ3RoLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgbWlnaHQgaGFwcGVuIHNpbmNlIGBtZW1jbXAnCisJZG9lc24ndCBzdG9wIHByb3Blcmx5IGF0IHRoZSBzdHJpbmcgZW5kLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jOiBzL2Z0X21lbWNtcC9mdF9zdHJuY21wLyB0byBtYWtlIGNvbXBhcmlzb25zCisJc3RvcCBhdCBzdHJpbmcgZW5kcy4KKworMjAxNC0wMi0xNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVthdXRvZml0XSBGaXggYG1ha2UgbXVsdGknIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYzogSW5jbHVkZSBgYWZnbG9iYWwuaCcgYW5kIGBhZnR5cGVzLmgnLgorCisyMDE0LTAyLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisJICAgIFNpbW9uIELDvG56bGkgIDx6ZW5pa29AZ21haWwuY29tPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzI5MDIuCisKKwlQYXRjaCB0YWtlbiBmcm9tCisKKwkgIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avc3VtYXRyYXBkZi9zb3VyY2UvYnJvd3NlL3RydW5rL2V4dC9fcGF0Y2hlcy9mcmVldHlwZTIucGF0Y2g/c3BlYz1zdm44NjIwJnI9ODYyMCM4NworCisJd2l0aCBzbGlnaHQgbW9kaWZpY2F0aW9ucy4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCk6IEFkZCBoZXVyaXN0aWMgdGVzdCB0bworCWhhbmRsZSBmb250cyB0aGF0IGluY29ycmVjdGx5IHVzZSBcciBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGVleGVjCisJYmxvY2suCisKKzIwMTQtMDItMTkgIFNpbW9uIELDvG56bGkgIDx6ZW5pa29AZ21haWwuY29tPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDE1OTAuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZW5jb2RpbmcpOiBQcm90ZWN0IGFnYWluc3QgaW52YWxpZAorCW51bWJlci4KKworMjAxNC0wMi0xMiAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCVtjZmZdIE9wdGltaXplIGJ5IHVzaW5nIGBGVF9NdWxEaXYnLgorCVN1Z2dlc3RlZCBieSBBbGV4ZWkuCisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfY29tcHV0ZURhcmtlbmluZyk6IERvIGl0LgorCisyMDE0LTAyLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MTQ2NS4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKENMRUFOKTogQWRkIGBmcmVldHlwZS1jb25maWcnLgorCShESVNUQ0xFQU4pOiBSZW1vdmUgYGZyZWV0eXBlLWNvbmZpZycuCisKKzIwMTQtMDItMDggIFNlYW4gTWNCcmlkZSAgPHNlYW5Acm9ndWUtcmVzZWFyY2guY29tPgorCisJRml4IGNsYW5nIHN0YXRpYyBhbmFseXplciBhbmQgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfYWxpZ25fd2Vha19wb2ludHMpLAorCXNyYy9hdXRvZml0L2FmbG9hZGVyIChhZl9sb2FkZXJfbG9hZF9nKSA8RlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURT4sCisJc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX01TQiksIHNyYy9iYXNlL2Z0b3V0bG4uYworCShGVF9PdXRsaW5lX0RlY29tcG9zZSksIHNyYy9iZGYvYmRmZHJpdnIuYyAoYmRmX2ludGVycHJldF9zdHlsZSksCisJc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfaW50ZWdlciksIHNyYy9jaWQvY2lkcGFyc2UuYworCShjaWRfcGFyc2VyX25ldyksIHNyYy9wZnIvcGZybG9hZC5jIChwZnJfcGh5X2ZvbnRfbG9hZCksCisJc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChEZWNvbXBvc2VfQ3VydmUpLCBzcmMvc2ZudC9zZmRyaXZlci5jCisJKHNmbnRfZ2V0X3BzX25hbWUpLCBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDEyX25leHQsCisJdHRfY21hcDEzX25leHQpLCBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9obGluZSk6IFJlbW92ZSBkZWFkCisJY29kZS4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfcHJvcGVydHlfZ2V0X2ZhY2VfZ2xvYmFscywKKwlhZl9wcm9wZXJ0eV9zZXQsIGFmX3Byb3BlcnR5X2dldCksIHNyYy9iYXNlL2Z0Yml0bWFwLmMKKwkoZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEpOiBNYWtlIGZ1bmN0aW9ucyBzdGF0aWMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9yZW1vdmVfcmVuZGVyZXIpOiBQcm90ZWN0IGFnYWluc3QKKwlsaWJyYXJ5ID09IE5VTEwuCisJKGZ0X3Byb3BlcnR5X2RvKTogTWFrZSBmdW5jdGlvbiBzdGF0aWMuCisKKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYzogSW5jbHVkZSBgZnRiYXNlLmgnLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UpCisJWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkddLCBzcmMvdHlwZTEvdDFnbG9hZC5jCisJKFQxX0NvbXB1dGVfTWF4X0FkdmFuY2UpOiBBdm9pZCBjb21waWxlciB3YXJuaW5nLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTmV3X0NvbnRleHQpOiBSZWR1Y2Ugc2NvcGUgb2YKKwl2YXJpYWJsZS4KKworMjAxNC0wMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFdpbmRvd3MgYnVpbGQgZGlyZWN0b3JpZXMuCisKKwlUaGUgYnVpbGQgdGFyZ2V0IGlzIG5vdyBgd2luZG93cycgaW5zdGVhZCBvZiBgd2luMzInLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBOaWNrb2xhcyBHZW9yZ2UgPGRhcmtub3ZhLmNsYW5AZ21haWwuY29tPi4KKworCSogYnVpbGRzL21vZHVsZXMubWs6IERvbid0IHVzZSBgd2luMzInIGFuZCBgd2luMTYnICghKSBidXQKKwlgd2luZG93cycuCisKKwkqIGJ1aWxkcy93aW5kb3dzL2RldGVjdC5taywgYnVpbGRzL3dpbmRvd3Mvd2luMzItZGVmLm1rOgorCXMvd2luMzIvd2luZG93cy8uCisKKzIwMTQtMDItMDggIEV1Z2VuIFNhd2luICA8ZXNhd2luQG1vemlsbGEuY29tPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDE1MDcuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRtYXApCisJWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkddIDwxNywgMTcsIDE5PjogRml4IGVycm9yIGhhbmRsaW5nLgorCisyMDE0LTAyLTA4ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW2NmZl0gRml4IG1pbm9yIHBlcmZvcm1hbmNlIGJ1Zy4KKworCSogc3JjL2NmZi9jZjJmb250LmMgKGNmMl9mb250X3NldHVwKTogRGFya2VuaW5nIGFtb3VudCBhbmQgYmx1ZSB6b25lCisJY2FsY3VsYXRpb25zIGFyZSBub3cgY2FjaGVkIGFuZCBub3QgcmVjb21wdXRlZCBvbiBlYWNoIGdseXBoLgorCisyMDE0LTAyLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggcHJvYmxlbXMgd2l0aCBwZXJsIDUuOC44IGFzIGRpc3RyaWJ1dGVkIHdpdGggY3VycmVudCBNaW5HVy4KKworCSogc3JjL3Rvb2xzL2FmYmx1ZS5wbDogV29yay1hcm91bmQgZm9yIFBlcmwgYnVnICM2MzQwMi4KKwkoc3RyaW5nX3JlKTogQXZvaWQgYHBvc3Nlc3NpdmUgcXVhbnRpZmllcnMnLCB3aGljaCBoYXZlIGJlZW4KKwlpbnRyb2R1Y2VkIGluIFBlcmwgdmVyc2lvbiA1LjEwLgorCisyMDE0LTAyLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY29tcGlsYXRpb24gd2l0aCBNaW5HVy4KKworCVJpZ2h0IG5vdywgY29tcGlsYXRpb24gb3V0IG9mIHRoZSBib3ggd2l0aCBsYXRlc3QgTWluR1cgaXMgYnJva2VuCisJZHVlIHRvIGJ1Z3MgaW4gaGVhZGVyIGZpbGVzIG9mIG1pbmd3cnQgNC4wLjMgaW4gc3RyaWN0IEFOU0kgbW9kZSwKKwljZi4KKworCSAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9taW5ndy9idWdzLzIwMjQvCisJICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL21pbmd3L2J1Z3MvMjA0Ni8KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogRG9uJ3Qgc2V0IGAtYW5zaScgZmxhZyBmb3IgTWluR1cuCisKKzIwMTQtMDItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNaW5vciBmaXguCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzKSwKKwlzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMpOiBGaXggaGFuZGxpbmcKKwlvZiBhbHRlcm5hdGl2ZSBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCVRoaXMgYWxzbyBmaXhlcyBhIGNvbXBpbGF0aW9uIHdhcm5pbmcgaW4gbm9uLWRlYnVnIG1vZGUuCisKKzIwMTQtMDItMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBTYXZhbm5haCBidWcgIzQxMzYzLgorCisJKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9jaGVja1RyYW5zZm9ybSk6IENvbnZlcnQgYXNzZXJ0aW9uIGludG8KKwlwYXJhbWV0ZXIgY2hlY2suCisJKGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogQ2FsbCBgY2YyX2NoZWNrVHJhbnNmb3JtJyBvbmx5IGlmCisJd2UgYXJlIHNjYWxpbmcgdGhlIG91dGxpbmUuCisJKGNmMl9nZXRQcGVtWSk6IFJlbW92ZSBwcm9ibGVtYXRpYyBhc3NlcnRpb24uCisKKzIwMTQtMDEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbnRyb2R1Y2UgdHdvIG1vcmUgc2xvdHMgZm9yIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwlUaGlzIGlzIHVzZWZ1bCBmb3IgT3BlblR5cGUgZmVhdHVyZXMgbGlrZSBgYzJzYycgKGNhcHMgdG8gc21hbGwKKwljYXBzKSB0aGF0IGRvbid0IGhhdmUgbG93ZXJjYXNlIGxldHRlcnMgYnkgZGVmaW5pdGlvbiwgb3Igb3RoZXIKKwlmZWF0dXJlcyB0aGF0IG1haW5seSBvcGVyYXRlIG9uIG51bWVyYWxzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgbW9yZSBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmg6IFVwZGF0ZSB1c2Ugb2YgYFNDUklQVCcgbWFjcm8uCisJKEFGX1NjcmlwdENsYXNzUmVjKTogQWRkIG1lbWJlcnMgdG8gaG9sZCB0d28gbW9yZSBzdGFuZGFyZAorCWNoYXJhY3RlcnMuCisJKEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jLCBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5oLAorCSogc3JjL2F1dG9maXQvYWZwaWMuYywgc3JjL2F1dG9maXQvYWZyYW5nZXMuaCwgc3JjL2F1dG9maXQvaGJzaGltLmM6CisJVXBkYXRlIHVzZSBvZiBgU0NSSVBUJyBtYWNyby4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3NfaW5pdF93aWR0aHMpLAorCXNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyk6IFNjYW4gdHdvIG1vcmUKKwlzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisyMDE0LTAxLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MTMyMC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpCisJPEFGX0xBVElOX0lTX0xPTkdfQkxVRT46IEF2b2lkIG5lZ2F0aXZlIGluZGV4IG9mIGBsYXN0Jy4KKworMjAxNC0wMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDEzMTAuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRtYXApIDxnbHlwaF9mb3JtYXQ9PTU+OgorCURvbid0IGNoZWNrIG1ldHJpY3MsIHdoaWNoIHRoaXMgZm9ybWF0IGRvZXNuJ3QgaGF2ZS4KKwlUaGlzIGlzIGFub3RoZXIgY29ycmVjdGlvbiB0byB0aGUgY29tbWl0IGZyb20gMjAxMy0xMS0yMS4KKworMjAxNC0wMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDEzMDkuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAodDFfcGFyc2VfZm9udF9tYXRyaXgpOiBQcm9wZXJseSBoYW5kbGUgcmVzdWx0CisJb2YgYFQxX1RvRml4ZWRBcnJheScuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfcGFyc2VfZm9udF9tYXRyaXgpOiBTeW5jaHJvbml6ZSB3aXRoCisJYHQxX3BhcnNlX2ZvbnRfbWF0cml4Jy4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2VfZm9udF9tYXRyaXgpOiBTeW5jaHJvbml6ZSB3aXRoCisJYHQxX3BhcnNlX2ZvbnRfbWF0cml4Jy4KKwkodDQyX3BhcnNlX2VuY29kaW5nKTogU3luY2hyb25pemUgd2l0aCBgdDFfcGFyc2VfZW5jb2RpbmcnLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3BhcnNlcl9sb2FkX2ZpZWxkKSA8VDFfRklFTERfVFlQRV9CQk9YPiwKKwk8VDFfRklFTERfVFlQRV9NTU9YPjogUHJvcGVybHkgaGFuZGxlIHJlc3VsdCBvZiBgcHNfdG9maXhlZGFycmF5Jy4KKworMjAxNC0wMS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYyAoYWZfZ2V0X2NvdmVyYWdlKTogRml4IG1lbW9yeSBsZWFrcy4KKworMjAxNC0wMS0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgdHJhY2luZyBvZiBzdHlsZSBjb3ZlcmFnZXMuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYGFmZ2xvYmFsJyBmb3IgdHJhY2luZyBzdHlsZQorCWNvdmVyYWdlcy4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgorCShGVF9DT01QT05FTlQpOiBEZWZpbmUuCisJKGFmX2ZhY2VfZ2xvYmFsc19jb21wdXRlX3N0eWxlX2NvdmVyYWdlKTogVHJhY2UgYGdzdHlsZXMnIGFycmF5CisJZGF0YS4KKworMjAxNC0wMS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDExNTguCisKKwkqIGJ1aWxkcy91bml4L2luc3RhbGwubWsgKGluc3RhbGwpOiBDcmVhdGUgbWFuIHBhZ2UgZGlyZWN0b3J5LgorCisyMDE0LTAxLTA4ICBDaG9uZ3l1IFpodSAgPGxlbWJhY29uQGdtYWlsLmNvbT4KKworCVthcm1dIEZpeCBTYXZhbm5haCBidWcgIzQxMTM4LCBwYXJ0IDIuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluIChGVF9NdWxGaXhfYXJtKSwgaW5jbHVkZS9jb25maWcvZnRjb25maWcuaAorCShGVF9NdWxGaXhfYXJtKSwgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX011bEZpeDE0X2FybSk6IEZpeAorCXByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgZm9yIGBhZGQudycuCisKKzIwMTQtMDEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggU2F2YW5uYWggYnVnICM0MTEzOCwgcGFydCAxLgorCisJKiBzcmMvdG9vbHMvYWZibHVlLnBsIDxIYW5kbGluZyAjZW5kaWY+OiBQcm9kdWNlIGNvcnJlY3QgYXV4aWxpYXJ5CisJZW51bWVyYXRpb24gbmFtZXMgZm9yIGdlbmVyYXRlZCBgI2Vsc2UnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKzIwMTQtMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBtYW51YWwgcGFnZSBmb3IgYGZyZWV0eXBlLWNvbmZpZycuCisJQ29udHJpYnV0ZWQgYnkgTmlzIE1hcnRlbnNlbiA8bmlzLm1hcnRlbnNlbkB3ZWIuZGU+LgorCisJKiBkb2NzL2ZyZWV0eXBlLWNvbmZpZy4xOiBOZXcgZmlsZS4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKG1hbmRpcik6IERlZmluZS4KKwkqIGJ1aWxkcy91bml4L2luc3RhbGwubWsgKGluc3RhbGwsIHVuaW5zdGFsbCk6IEhhbmRsZSBtYW5wYWdlLgorCisyMDE0LTAxLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTWlub3IgZml4ZXMgZm9yIGBhZmJsdWUucGwnLgorCisJKiBzcmMvdG9vbHMvYWZibHVlLnBsIChhdXhfbmFtZSk6IERvbid0IHVzZSBgcmV2ZXJzZScuCisJPEhhbmRsaW5nICNlbmRpZj46IFVzZSBwcm9wZXIgaW5kZW50YXRpb24gZm9yIGdlbmVyYXRlZCBgI2Vsc2UnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKzIwMTQtMDEtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggSW5kaWMgc2NyaXB0cy4KKworCVNwbGl0IHRoZSBzaW5nbGUsIGluY29ycmVjdCBJbmRpYyBlbnRyeSBpbnRvIHNlcGFyYXRlIHNjcmlwdHMgc28KKwl0aGF0IHRoZSBjb3ZlcmVkIHJhbmdlcyBhcmUgdGhlIHNhbWU6IEJlbmdhbGksIERldmFuYWdhcmksIEd1amFyYXRpLAorCUd1cm11a2hpLCBLYW5uYWRhLCBMaW1idSwgTWFsYXlhbGFtLCBPcml5YSwgU2luaGFsYSwgU3VuZGFuZXNlLAorCVN5bG90aSBOYWdyaSwgVGFtaWwsIFRlbHVndSwgYW5kIFRpYmV0YW4uICBBdCB0aGUgc2FtZSB0aW1lLCByZW1vdmUKKwllbnRyaWVzIGZvciBNZWV0YWkgTWF5YWsgYW5kIFNoYXJhZGEg4oCTIHRoZSBVbmljb2RlIHJhbmdlcyB3ZXJlCisJaW5jb3JyZWN0IChhbmQgbm9ib2R5IGhhcyBjb21wbGFpbmVkIGFib3V0IHRoYXQpLCBmb250cyBhcmUgc2NhcmNlCisJZm9yIHRob3NlIHNjcmlwdHMsIGFuZCB0aGUgSW5kaWMgYXV0by1oaW50ZXIgc3VwcG9ydCBpcyBydWRpbWVudGFyeQorCWFueXdheXMuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IFVwZGF0ZWQsIHVzaW5nIEFGX0NPTkZJR19PUFRJT05fSU5ESUMgYW5kCisJQUZfQ09ORklHX09QVElPTl9DSksuCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmggKFNUWUxFX0RFRkFVTFRfSU5ESUMpOiBOZXcgYXV4aWxpYXJ5IG1hY3JvLgorCVVzZSBpdCwgdG9nZXRoZXIgd2l0aCBBRl9DT05GSUdfT1BUSU9OX0lORElDIGFuZAorCUFGX0NPTkZJR19PUFRJT05fQ0pLLCB0byB1cGRhdGUuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMgW0FGX0NPTkZJR19PUFRJT05fSU5ESUNdOiBVcGRhdGVkLgorCVshQUZfQ09ORklHX09QVElPTl9JTkRJQywgIUFGX0NPTkZJR19PUFRJT05fQ0pLXTogUmVtb3ZlZC4KKwlTb3J0IGVudHJpZXMgYnkgdGFncy4KKworMjAxNC0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFRoaW5rby4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmMgKGFmX2dldF9jaGFyX2luZGV4KTogU2ltaWxhciB0bworCWBhZl9nZXRfY292ZXJhZ2UnLCByZWplY3QgZ2x5cGhzIHdoaWNoIGFyZSBub3Qgc3Vic3RpdHV0ZWQuCisKKzIwMTQtMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggaGFuZGxpbmcgb2YgZGVmYXVsdCBjb3ZlcmFnZXMuCisKKwlXaXRoIHRoaXMgY29tbWl0LCB0aGUgaW1wbGVtZW50YXRpb24gb2YgY292ZXJhZ2UgaGFuZGxpbmcgaXMKKwljb21wbGV0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jIChhZl9nZXRfY292ZXJhZ2UpOiBFeGl0IGVhcmx5IGlmIG5vdGhpbmcgdG8KKwlkby4KKwlSZWplY3QgY292ZXJhZ2VzIHdoaWNoIGRvbid0IGNvbnRhaW4gYXBwcm9wcmlhdGUgZ2x5cGhzIGZvciBibHVlCisJem9uZXMuCisKKzIwMTQtMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggaGFuZGxpbmcgb2YgZGVmYXVsdCBjb3ZlcmFnZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19jb21wdXRlX3N0eWxlX2NvdmVyYWdlKToKKwlGaXJzdCBoYW5kbGUgbm9uLWRlZmF1bHQgY292ZXJhZ2VzLCB0aGVuIHRoZSBkZWZhdWx0IGNvdmVyYWdlIG9mIHRoZQorCWRlZmF1bHQgc2NyaXB0LCBhbmQgZmluYWxseSB0aGUgb3RoZXIgZGVmYXVsdCBjb3ZlcmFnZXMuCisKKzIwMTQtMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggc2NhbGluZyBvZiBIYXJmQnV6eiBzaGFwaW5nLgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYyAoYWZfZ2V0X2NoYXJfaW5kZXgpOiBTY2FsZSB0byB1bml0cyBwZXIgRU0uCisKKzIwMTQtMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBCZXR0ZXIgZnRncmlkIHN1cHBvcnQuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfZ2V0X3NlZ21lbnRfb2Zmc2V0KTogQWRkCisJcGFyYW1ldGVycyBgaXNfYmx1ZScgYW5kIGBibHVlX29mZnNldCcuCisKKzIwMTQtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBSZW1vdmUgc29tZSBzdHlsZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmY292ZXIuaDogUmVtb3ZlIGNvdmVyYWdlcyBmb3IgYWx0ZXJuYXRpdmUgZnJhY3Rpb25zLAorCWRlbm9taW5hdG9ycywgbnVtZXJhdG9ycywgYW5kIGZyYWN0aW9ucy4KKworCSogc3JjL2F1dG9maXQvYWZzdHlsZXMuaCAoTUVUQV9TVFlMRV9MQVRJTik6IFVwZGF0ZWQuCisKKzIwMTQtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgbW9yZSBzdHlsZXMuCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmggKFNUWUxFX0xBVElOLCBNRVRBX1NUWUxFX0xBVElOKTogTmV3CisJYXV4aWxpYXJ5IG1hY3JvczsgdXNlIHRoZW0gdG8gZGVmaW5lIHN0eWxlcyBmb3IgQ3lyaWxsaWMsIEdyZWVrLCBhbmQKKwlMYXRpbi4KKworCSogc3JjL2F1dG9maXQvYWZjb3Zlci5oOiBSZW1vdmUgY292ZXJhZ2UgZm9yIG9sZHN0eWxlIGZpZ3VyZXMuCisJU2luY2UgdGhvc2UgZGlnaXRzIGFyZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3JkaW5hcnkgbGV0dGVycywgaXQKKwltYWtlcyBubyBzZW5zZSB0byBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5LgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfZ2V0X21ldHJpY3MpOiBEb24ndCBsaW1pdAorCWBvcHRpb25zJyBwYXJhbWV0ZXIgdG8gNCBiaXRzLgorCisyMDE0LTAxLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IHN0eWxlIGFzc2lnbm1lbnRzIHRvIGdseXBocy4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmMgKGFmX2dldF9jb3ZlcmFnZSkKKwlbRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlpdOiBTY2FuIEdQT1MgY292ZXJhZ2Ugb2YgZmVhdHVyZXMgYWxzbworCXNvIHRoYXQgd2UgY2FuIHNraXAgZ2x5cGhzIHRoYXQgaGF2ZSBib3RoIEdTVUIgYW5kIEdQT1MgZGF0YS4KKworMjAxNC0wMS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uYzogcy97bG9va3VwcyxnbHlwaHN9L2dzdWJfe2xvb2t1cHMsZ2x5cGhzfS8uCisKKzIwMTQtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbXBsZW1lbnQgYW5kIHVzZSBgYWZfZ2V0X2NoYXJfaW5kZXgnIHdpdGggSGFyZkJ1enouCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jIChDT1ZFUkFHRSkgW0ZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaXToKKwlSZWRlZmluZSB0byBjb25zdHJ1Y3QgSGFyZkJ1enogZmVhdHVyZXMuCisJKGFmX2dldF9jaGFyX2luZGV4KSBbRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlpdOiBSZXdyaXR0ZW4uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKTogVXNlCisJYHlfb2Zmc2V0JyB0byBhZGp1c3QgYGJlc3RfeScuCisKKzIwMTMtMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBzL0FGX1NUWUxFXy4uLi5fREVGQVVMVC9BRl9TVFlMRV8uLi4uX0RGTFQvaS4KKworMjAxMy0xMi0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBpbnRlcmZhY2Ugb2YgYGFmX2dldF9jaGFyX2luZGV4Jy4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmMgKGFmX2dldF9jaGFyX2luZGV4KTogUmV0dXJuIGVycm9yIHZhbHVlLgorCUFkZCBhcmd1bWVudCBmb3IgeSBvZmZzZXQgKHRvIGJlIHVzZWQgaW4gYSB5ZXQtdG8tY29tZSBwYXRjaCkuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5oLCBzcmMvYXV0b2ZpdC9hZmNqay5jLAorCXNyYy9hdXRvZml0L2FmbGF0aW4uYzogVXBkYXRlZC4KKworMjAxMy0xMi0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIERvbid0IGNvbWJpbmUgbXVsdGlwbGUgZmVhdHVyZXMgaW50byBvbmUgc2V0LgorCisJQ29tYmluaW5nIHRoZW0sIGFzIG9yaWdpbmFsbHkgZW52aXNpb25lZCwgd291bGQgbGVhZCB0byBtdWNoIG1vcmUKKwljb21wbGljYXRlZCBjb2RlLCBhcyBpbnZlc3RpZ2F0aW9ucyBoYXZlIHNob3duIG1lYW53aGlsZS4gIFRoZSBtYWpvcgorCWRyYXdiYWNrIGlzIHRoYXQgd2UgcnVuIG91dCBvZiBhdmFpbGFibGUgc3R5bGUgc2xvdHMgbXVjaCBlYXJsaWVyLgorCUhvd2V2ZXIsIHRoaXMgaXMgb25seSBhIHRoZW9yZXRpY2FsIGlzc3VlIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYQorCWxhcmdlIG51bWJlciBvZiBzY3JpcHRzIGN1cnJlbnRseS4KKworCSogc3JjL2F1dG9maXQvYWZjb3Zlci5oOiBSZXBsYWNlIGBDT1ZFUkFHRV97MSwyLDN9JyBtYWNyb3Mgd2l0aAorCWEgc2luZ2xlLWVsZW1lbnQgYENPVkVSQUdFJyBtYWNybywgc29ydCB0aGUgZWxlbWVudHMgYnkgdGhlIGZlYXR1cmUKKwl0YWdzLCBhbmQgYWRkIGVudHJ5IGZvciBgcnVieScuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaDogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jOiBVcGRhdGVkLgorCisyMDEzLTEyLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gQ29kZSBzaHVmZmxpbmcgdG8gcmVkdWNlIHVzZSBvZiBjcHAgbWFjcm9zLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zdHlsZV9jb3ZlcmFnZSk6CisJQ2FsbCBgYWZfZ2V0X2NvdmVyYWdlJyB1bmNvbmRpdGlvbmFsbHkuCisKKwkqIHNyYy9hdXRvZml0L2F1dG9maXQuYzogSW5jbHVkZSBgaGJzaGltLmMnIHVuY29uZGl0aW9uYWxseS4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmMgKGFmX2dldF9jb3ZlcmFnZSkKKwlbIUZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaXTogUHJvdmlkZSBkdW1teSBmdW5jdGlvbi4KKworCSogc3JjL2F1dG9maXQvaGJzaGltLmg6IFByb3ZpZGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisJdW5jb25kaXRpb25hbGx5LgorCisyMDEzLTEyLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gQWRkIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGBGVF9HZXRfQ2hhcl9JbmRleCcuCisKKwlZZXQtdG8tY29tZSBjaGFuZ2VzIHdpbGwgcHJvdmlkZSBIYXJmQnV6eiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV3CisJZnVuY3Rpb24uCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jIChhZl9nZXRfY2hhcl9pbmRleCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9hdXRvZml0L2hic2hpbS5oOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19pbml0X3dpZHRocywKKwlhZl9jamtfbWV0cmljc19pbml0X2JsdWVzLCBhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMsCisJYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzLCBhZl9sYXRpbl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyk6CisJVXBkYXRlZC4KKworMjAxMy0xMi0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFVzZSBgZ2xvYmFsJyBIYXJmQnV6eiBmb250IG9iamVjdC4KKworCVdlIG5vdyB1c2UgYGhiX2ZvbnQnIGluc3RlYWQgb2YgYGhiX2ZhY2UnIHNpbmNlIHlldC10by1jb21lIGNoYW5nZXMKKwluZWVkIHRoaXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmg6IEluY2x1ZGUgYGhic2hpbS5oJy4KKwkoQUZfRmFjZUdsb2JhbHNSZWMpIFtGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWl06IE5ldyBtZW1iZXIKKwlgaGJfZm9udCcuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19uZXcpCisJW0ZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaXTogQ3JlYXRlIGBoYl9mb250Jy4KKwkoYWZfZmFjZV9nbG9iYWxzX2ZyZWUpIFtGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWl06IERlc3Ryb3kKKwlgaGJfZm9udCcuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5oOiBJbmNsdWRlIEhhcmZCdXp6IGhlYWRlcnMuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jOiBJbmNsdWRlIGBoYnNoaW0uaCcgaW5zdGVhZCBvZiBIYXJmQnV6egorCWhlYWRlcnMuCisJKGFmX2dldF9jb3ZlcmFnZSk6IFVwZGF0ZWQuCisKKzIwMTMtMTItMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBIYW5kbGUgYERGTFQnIE9wZW5UeXBlIHNjcmlwdCBmb3IgY292ZXJhZ2VzLgorCisJKiBpbmNsdWRlL2Z0YXV0b2guaDogRG9jdW1lbnQgbmV3IGBkZWZhdWx0LXNjcmlwdCcgcHJvcGVydHkuCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jIChhZl9nZXRfY292ZXJhZ2UpOiBVc2UgYEFGX0ZhY2VHbG9iYWxzJyBmb3IKKwl0eXBlIG9mIGZpcnN0IHBhcmFtZXRlci4KKwkoc2NyaXB0X3RhZ3MpOiBBZGQgb25lIG1vcmUgZWxlbWVudC4KKwkoYWZfZ2V0X2NvdmVyYWdlKTogQWRqdXN0IGBzY3JpcHRfdGFncycgdG8gaGFuZGxlIGBERkxUJyBzY3JpcHQgdGFnLgorCisJKiBzcmMvYXV0b2ZpdC9oYnNoaW0uaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc3R5bGVfY292ZXJhZ2UpOgorCVVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmggKEFGX1NDUklQVF9ERUZBVUxUKTogTmV3IG1hY3JvLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5oIChBRl9Nb2R1bGVSZWMpOiBOZXcgYGRlZmF1bHRfc2NyaXB0JworCW1lbWJlci4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfcHJvcGVydHlfc2V0LCBhZl9wcm9wZXJ0eV9nZXQpOiBIYW5kbGUKKwlgZGVmYXVsdC1zY3JpcHQnIHByb3BlcnR5LgorCShhZl9hdXRvZml0dGVyX2luaXQpOiBVcGRhdGVkLgorCisyMDEzLTEyLTI3ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2Z0cmZvcmtdIEZpeCB0aGUgZmFjZSBvcmRlciBkaWZmZXJlbmNlIGJldHdlZW4gUE9TSVggYW5kIENhcmJvbi4KKworCVRoZSBmcmFnbWVudGVkIHJlc291cmNlcyBpbiBTdWl0Y2FzZSBhbmQgLmRmb250IHNob3VsZCBiZSByZW9yZGVyZWQKKwl3aGVuIGBQT1NUJyByZXNvdXJjZSBmb3IgVHlwZTEgaXMgYmVpbmcgcmVzdG9yZWQsIGJ1dCByZW9yZGVyaW5nIG9mCisJc2ZudCByZXNvdXJjZXMgaW5kdWNlcyB0aGUgZGlmZmVyZW50IGZhY2Ugb3JkZXIuICBOb3cgdGhlIG9yZGVyaW5nCisJaXMgcmVzdHJpY3RlZCB0byBgUE9TVCcgcmVzb3VyY2Ugb25seSwgdG8gcHJldmVudCB0aGUgZGlmZmVyZW50CisJb3JkZXIgaXNzdWUgKGUuZy4gdGhlIGZhY2UgaW5kZXggaW4gdGhlIGZvbnRjb25maWcgY2FjaGUgZ2VuZXJhdGVkCisJd2l0aCBDYXJib24gZnJhbWV3b3JrIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoYXQgYnkgRnJlZVR5cGUgMgorCXdpdGhvdXQgQ2FyYm9uIGZyYW1ld29yay4pICBGb3VuZCBieSBLaGFsZWQgSG9zbnkgYW5kIEhpbi1UYWsgTGV1bmcuCisKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMy0wMi9tc2cwMDAzNS5odG1sCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTMtMTIvbXNnMDAwMjcuaHRtbAorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKTogQWRkIGEgc3dpdGNoCisJYHNvcnRfYnlfcmVzX2lkJyB0byBjb250cm9sIHRoZSBmcmFnbWVudGVkIHJlc291cmNlIG9yZGVyaW5nLgorCSogaW5jbHVkZS9pbnRlcm5hbC9mdHJmb3JrLmg6IERlY2xhcmUgbmV3IHN3aXRjaC4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChJc01hY1Jlc291cmNlKTogRW5hYmxlIHRoZSBzb3J0aW5nIGZvciBgUE9TVCcKKwlyZXNvdXJjZSwgYW5kIGRpc2FibGUgdGhlIHNvcnRpbmcgZm9yIGBzZm50JyByZXNvdXJjZS4KKworMjAxMy0xMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDA5OTcuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IE9ubHkgdXNlIE9SIG9wZXJhdG9yIHRvCisJYWRqdXN0IGZhY2UgZmxhZ3Mgc2luY2UgRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSBtaWdodCBhbHJlYWR5CisJYmUgc2V0LgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBEaXR0by4KKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChjaWRfZmFjZV9pbml0KTogRGl0dG8uCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IERpdHRvLgorCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogRGl0dG8uCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IERpdHRvLgorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfRmFjZV9Jbml0KTogRGl0dG8uCisKKzIwMTMtMTItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbnRyb2R1Y2UgYGNvdmVyYWdlcycuCisKKwlDb3ZlcmFnZXMgYXJlIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEhhcmZCdXp6IGxpYnJhcnkgdG8gYWNjZXMKKwlPcGVuVHlwZSBmZWF0dXJlcyBmb3IgaGFuZGxpbmcgZ2x5cGhzIG5vdCBhZGRyZXNzYWJsZSBieSB0aGUgY21hcC4KKworCVJpZ2h0IG5vdywgY29tcGlsYXRpb24gb2YgSGFyZkJ1enogaXMgb25seSBhZGRlZCB0byB0aGUgZGV2ZWxvcG1lbnQKKwlidWlsZC4gIEEgc29sdXRpb24gZm9yIHN0YW5kYXJkIGJ1aWxkIG1vZGUgd2lsbCBiZSBkZWxheWVkIHVudGlsCisJSGFyZkJ1enogZ2V0cyBzcGxpdCBpbnRvIHR3byBsaWJyYXJpZXMgdG8gYXZvaWQgbXV0dWFsIGRlcGVuZGVuY2llcworCWJldHdlZW4gRnJlZVR5cGUgYW5kIEhhcmZCdXp6LgorCisJTm90ZSB0aGF0IHRoaXMgaXMgb25seSBhIGZpcnN0IHN0ZXAgaW4gaGFuZGxpbmcgY292ZXJhZ2VzLCBiYXNpY2FsbHkKKwlwcm92aWRpbmcgdGhlIGZyYW1ld29yayBvbmx5LiAgQ29kZSBmb3IgaGFuZGxpbmcgc2VsZWN0ZWQgT3BlblR5cGUKKwlmZWF0dXJlcyAodGhpcyBpcywgYWN0dWFsbHkgdXNpbmcgdGhlIGRhdGEgaW4gYGFmY292ZXIuaCcpIHdpbGwKKwlmb2xsb3cuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlopOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9hdXRvZml0L2hic2hpbS5jLCBzcmMvYXV0b2ZpdC9oYnNoaW0uaCwgc3JjL2F1dG9maXQvYWZjb3Zlci5oOgorCU5ldyBmaWxlcy4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEhhcmZCdXp6IHNjcmlwdCBuYW1lIHRhZ3MuCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBkZWZhdWx0IGNvdmVyYWdlIGVudW1lcmF0aW9uIHZhbHVlcy4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oOiBVcGRhdGUgdXNlIG9mIGBTQ1JJUFQnIGFuZCBgU1RZTEUnIG1hY3Jvcy4KKwkoQUZfQ292ZXJhZ2UpOiBOZXcgZW51bWVyYXRpb24gKGdlbmVyYXRlZCBieSBgYWZjb3Zlci5oJykuCisJKEFGX1N0eWxlQ2xhc3NSZWMpOiBOZXcgbWVtYmVyIGBjb3ZlcmFnZScuCisJKEFGX0RFRklORV9TVFlMRV9DTEFTUyk6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYGFmaGFyZmJ1enonIGZvciB0cmFjaW5nIGNvdmVyYWdlCisJZGF0YS4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaDogVXBkYXRlIHVzZSBvZiBgU0NSSVBUJyBhbmQgYFNUWUxFJyBtYWNyb3MuCisJKEFGX1NDUklQVF9GQUxMQkFDSyk6IFJlbmFtZWQgdG8gLi4uCisJKEFGX1NUWUxFX0ZBTExCQUNLKTogLi4uIHRoaXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmM6IEluY2x1ZGUgYGhic2hpbS5jJy4KKwlVcGRhdGUgdXNlIG9mIGBTQ1JJUFQnIGFuZCBgU1RZTEUnIG1hY3Jvcy4KKwkoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc3R5bGVfY292ZXJhZ2UpCisJW0ZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaXTogQ2FsbCBgYWZfZ2V0X2NvdmVyYWdlJy4KKwlVcGRhdGUuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmggKEFGX01vZHVsZVJlYyk6CisJcy9mYWxsYmFja19zY3JpcHQvZmFsbGJhY2tfc3R5bGUvLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChhZl9wcm9wZXJ0eV9zZXQpOiBBZGFwdCBoYW5kbGluZyBvZgorCWBmYWxsYmFjay1zY3JpcHQnIHByb3BlcnR5IHRvIHNldCBhIGZhbGxiYWNrIHN0eWxlLgorCShhZl9wcm9wZXJ0eV9nZXQsIGFmX2F1dG9maXR0ZXJfaW5pdCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IFVwZGF0ZSB1c2Ugb2YgYFNDUklQVCcgYW5kIGBTVFlMRScgbWFjcm9zLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5oOiBVcGRhdGUgdXNlIG9mIGBTQ1JJUFQnIG1hY3JvLgorCisJKiBzcmMvYXV0b2ZpdC9hdXRvZml0LmMgW0ZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaXTogSW5jbHVkZQorCWBoYnNoaW0uYycuCisKKwkqIHNyYy9hdXRvZml0L3J1bGVzLm1rIChBVVRPRl9EUlZfU1JDKTogQWRkIGBoYnNoaW0uYycuCisJKEFVVE9GX0RSVl9IKTogQWRkIGBhZmNvdmVyLmgnLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKElOQ0xVREVfRkxBR1MpIFtERVZFTF9ESVJdOiBVc2UgcGtnLWNvbmZpZyBmb3IKKwlhbGwgbGlicmFyaWVzIG5lZWRlZCBieSBGcmVlVHlwZS4KKworMjAxMy0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDA5NzUgKHNvcnQgb2YpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lQKTogRml4IHNpZ24gdHlwbyB0byBtYWtlIEZyZWVUeXBlCisJYmVoYXZlIHRoZSBzYW1lIGFzIHRoZSBXaW5kb3dzIFRydWVUeXBlIGVuZ2luZSBmb3IgdGhlIGludmFsaWQgY2FzZS4KKworMjAxMy0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1ha2UgUElDIG1vZGUgd29yayBhY3R1YWxseS4KKworCSogc3JjL2F1dG9maXQvYWZwaWMuaCAoQUZNb2R1bGVQSUMpOiBGaXggYXJyYXkgc2l6ZXMgdG8gZml0IHRoZQorCWVudW1lcmF0aW9uIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBpbmNsdWRpbmcgYGFmc2NyaXB0LmgnCisJYW5kIGZyaWVuZHMuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmMgKGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KTogVXBkYXRlZC4KKworMjAxMy0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFBJQyBsaW5raW5nLgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0cmZvcmsuaCAoQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9CRUdJTik6IEZpeAorCWdlbmVyYXRlZCBmdW5jdGlvbiBuYW1lLgorCisJKiBzcmMvYmFzZS9iYXNlcGljLmMgKEZUX0luaXRfVGFibGVfcmFjY2Vzc19ndWVzc190YWJsZSk6IFJlbmFtZQorCXRvIC4uLgorCShGVF9Jbml0X1RhYmxlX2Z0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUpOiAuLi4gdGhpcyBzbyB0aGF0IHRoZQorCWZ1bmN0aW9uIG5hbWUgY29ycmVjdGx5IGNvcnJlc3BvbmRzIHRvIHdoYXQgdGhlIG1hY3JvIGZyYW1ld29yaworCWV4cGVjdHMuCisKKwkqIHNyYy9wc25hbWVzL3J1bGVzLm1rIChQU05BTUVTX0RSVl9TUkNfUyk6IFVzZSBjb3JyZWN0IGZpbGUgbmFtZSBzbworCXRoYXQgUElDIGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQgYWxzby4KKworMjAxMy0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyB0byBNYWtlZmlsZS4KKworCSogc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKTogQWRkIGBiYXNlcGljLmMnIGFuZCBgZnRwaWMuYycuCisJKEJBU0VfSCk6IEFkZCBgYmFzZXBpYy5oJy4KKworMjAxMy0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBQSUMgY29tcGlsYXRpb24uCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzKSwKKwlzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMpCisJW0ZUX0NPTkZJR19PUFRJT05fUElDXTogRGVjbGFyZSBgZ2xvYmFscycuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmM6IEFsd2F5cyBjYWxsIEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MsIGFuZAorCUFGX0RFRklORV9TVFlMRV9DTEFTUy4KKworCSogc3JjL2F1dG9maXQvYWZwaWMuYzogSW5jbHVkZSBgYWZnbG9iYWwuaCcuCisJKGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KTogVHlwby4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9ERUZJTkVfU0NSSVBUX0NMQVNTLAorCUFGX0RFRklORV9TVFlMRV9DTEFTUyk6IERvbid0IHVzZSB0aGUgc2FtZSBpZGVudGlmaWVyIGZvciBtYWNybworCXBhcmFtZXRlciBhbmQgc3RydWN0dXJlIG1lbWJlci4KKworMjAxMy0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEludHJvZHVjZSBgc3R5bGVzJy4KKworCVRoaXMgaXMgdGhlIG5ldyB0b3AtbGV2ZWwgc3RydWN0dXJlIGZvciBoYW5kbGluZyBnbHlwaCBpbnB1dCBkYXRhOworCXNjcmlwdHMgYXJlIG5vdyBkZWZpbmVkIHNlcGFyYXRlbHkuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoU0NSSVBUKTogVXBkYXRlZC4KKwkoQUZfU2NyaXB0Q2xhc3NSZWMpOiBNb3ZlIGBibHVlX3N0cmluZ3NldCcgYW5kIGB3cml0aW5nX3N5c3RlbScKKwltZW1iZXJzIHRvIC4uLgorCShBRl9TdHlsZV9DbGFzc1JlYyk6IC4uLiB0aGlzIG5ldyBzdHJ1Y3R1cmUuCisJKEFGX1N0eWxlKTogTmV3IGVudW1lcmF0aW9uLgorCShBRl9TdHlsZU1ldHJpY3NSZWMpOiBSZXBsYWNlIGBzY3JpcHQnIGVudW1lcmF0aW9uIHdpdGgKKwlgc3R5bGVfY2xhc3MnIHBvaW50ZXIuCisJKEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MsIEFGX0RFQ0xBUkVfU0NSSVBUX0NMQVNTKTogVXBkYXRlZC4KKwkoQUZfREVGSU5FX1NUWUxFX0NMQVNTLCBBRl9ERUNMQVJFX1NUWUxFX0NMQVNTKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogTmV3IGZpbGUsIHVzaW5nIGRhdGEgZnJvbSBgYWZzY3JpcHQuaCcuCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19pbml0X3dpZHRocywKKwlhZl9jamtfbWV0cmljc19pbml0X2JsdWVzLCBhZl9jamtfaGludF9lZGdlcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKFNDUklQVCk6IFVwZGF0ZWQuCisJKFNUWUxFKTogUmVkZWZpbmUgbWFjcm8gdG8gbG9hZCBgYWZzdHlsZXMuaCcuCisJKGFmX3NjcmlwdF9uYW1lcykgW0ZUX0RFQlVHX0xFVkVMX1RSQUNFXTogUmVwbGFjZSB3aXRoLi4uCisJKGFmX3N0eWxlX25hbWVzKTogLi4uIHRoaXMgYXJyYXkuCisJKGFmX2ZhY2VfZ2xvYmFsc19jb21wdXRlX3NjcmlwdF9jb3ZlcmFnZSk6IFJlbmFtZWQgdG8uLi4KKwkoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc3R5bGVfY292ZXJhZ2UpOiAuLi4gdGhpcy4KKwlVcGRhdGVkLgorCShhZl9mYWNlX2dsb2JhbHNfbmV3LCBhZl9mYWNlX2dsb2JhbHNfZnJlZSwKKwlhZl9mYWNlX2dsb2JhbHNfZ2V0X21ldHJpY3MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5oIChTQ1JJUFQpOiBVcGRhdGVkLgorCShTVFlMRSk6IFJlZGVmaW5lIG1hY3JvIHRvIGxvYWQgYGFmc3R5bGVzLmgnLgorCShBRl9TQ1JJUFRfRkFMTEJBQ0spOiBVcGRhdGUgZGVmaW5pdGlvbi4gIFRoaXMgd2lsbCBnZXQgbW9yZQorCXJlZmluZW1lbnRzIHdpdGggbGF0ZXIgb24uCisJKEFGX1NDUklQVF9VTkFTU0lHTkVEKTogUmVwbGFjZSB3aXRoLi4uCisJKEFGX1NUWUxFX1VOQVNTSUdORUQpOiAuLi4gdGhpcyBtYWNyby4KKwkoQUZfRmFjZUdsb2JhbHNSZWMpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMsCisJYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzLCBhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSwKKwlhZl9sYXRpbl9oaW50X2VkZ2VzKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX21ldHJpY3NfaW5pdF93aWR0aHMpOiBVcGRhdGVkLgorCShhZl9sdG4yX3VuaXJhbmdlcyk6IFJlbW92ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2csIGFmX2xvYWRlcl9sb2FkX2dseXBoKToKKwlVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5jIChhdXRvZml0X21vZHVsZV9jbGFzc19waWNfaW5pdCk6IFVwZGF0ZWQuCisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5oIChBRl9TVFlMRV9DTEFTU0VTX0dFVCk6IE5ldyBtYWNyby4KKwkoQUZNb2R1bGVQSUMpOiBBZGQgYGFmX3N0eWxlX2NsYXNzZXMnIGFuZCBgYWZfc3R5bGVfY2xhc3Nlc19yZWMnCisJbWVtYmVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvcnVsZXMubWsgKEFVVE9GX0RSVl9IKTogQWRkIGBhZnN0eWxlcy5oJy4KKworMjAxMy0xMi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZhY3RvciBzY3JpcHRzIGFuZCB1bmlyYW5nZXMgb3V0IG9mIHdyaXRpbmcgc3lzdGVtIGZpbGVzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5oOiBOZXcgZmlsZXMuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEV4dGVuZCBgU0NSSVBUJyBtYWNybyB3aXRoIG1vcmUKKwlwYXJhbWV0ZXJzLCB0YWtpbmcgZGF0YSBmcm9tIHRoZSB3cml0aW5nIHN5c3RlbSBmaWxlcy4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jOiBJbmNsdWRlIGBhZnJhbmdlcy5oJy4KKwlMb2FkIGBhZnNjcmlwdC5oJyB0byBjYWxsIEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MuCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jOiBJbmNsdWRlIGBhZnJhbmdlcy5oJy4KKwlMb2FkIGBhZnNjcmlwdC5oJyB0byBjYWxsIEFGX0RFQ0xBUkVfU0NSSVBUX0NMQVNTLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jLCBzcmMvYXV0b2ZpdC9hZmNqay5oOiBVcGRhdGVkLgorCSogc3JjL2F1dG9maXQvYWZkdW1teS5jLCBzcmMvYXV0b2ZpdC9hZmR1bW15Lmg6IFVwZGF0ZWQuCisJKiBzcmMvYXV0b2ZpdC9hZmluZGljLmMsIHNyYy9hdXRvZml0L2FmaW5kaWMuaDogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYywgc3JjL2F1dG9maXQvYWZsYXRpbi5oOiBVcGRhdGVkLgorCSogc3JjL2F1dG9maXQvYWZsYXRuMi5jLCBzcmMvYXV0b2ZpdC9hZmxhdG4yLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZmlyL2F1dG9maXQuYzogSW5jbHVkZSBgYWZyYW5nZXMuYycuCisJKiBzcmMvYXV0b2ZpdC9ydWxlcy5tayAoQVVUT0ZfRFJWX1NSQyk6IEFkZCBgYWZyYW5nZXMuYycuCisKKzIwMTMtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNb3JlIGNvZGUgb3J0aG9nb25hbGl0eS4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9TdHlsZU1ldHJpY3MpOiBSZXBsYWNlIGBzY3JpcHRfY2xhc3MnCisJcG9pbnRlciB0byBhbiBgQUZfU2NyaXB0Q2xhc3MnIHN0cnVjdHVyZSB3aXRoIGBzY3JpcHQnIGluZGV4IG9mIHR5cGUKKwlgQUZfU2NyaXB0Jy4KKwlNb3ZlIHNvbWUgY29kZSBhcm91bmQuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmM6IEluY2x1ZGUgYGFmcGljLmgnLgorCShhZl9jamtfbWV0cmljc19pbml0X3dpZHRocywgYWZfY2prX21ldHJpY3NfaW5pdF9ibHVlcywKKwlhZl9jamtfaGludF9lZGdlcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYzogSW5jbHVkZSBgYWZwaWMuaCcuCisJKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMsIGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcywKKwlhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSwgYWZfbGF0aW5faGludF9lZGdlcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19nZXRfbWV0cmljcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2csIGFmX2xvYWRlcl9sb2FkX2dseXBoKToKKwlVcGRhdGVkLgorCisyMDEzLTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gcy9TY3JpcHRNZXRyaWNzL1N0eWxlTWV0cmljcy8uCisKKzIwMTMtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBzL3NjcmlwdF97bWV0cmljcyxoaW50c30vc3R5bGVfe21ldHJpY3MsaGludHN9LworCisyMDEzLTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gcy9nc2NyaXB0cy9nc3R5bGVzLy4KKworMjAxMy0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIHMvZ2x5cGhfc2NyaXB0cy9nbHlwaF9zdHlsZXMvLgorCisJVGhpcyBpcyB0aGUgZmlyc3QgY29tbWl0IG9mIGEgc2VyaWVzIHRvIGNyZWF0ZSBhIG5ldyB0b3AtbGV2ZWwKKwlzdHJ1Y3R1cmUgKGEgYHN0eWxlJykgZm9yIGhhbmRsaW5nIHNjcmlwdHMsIHdyaXRpbmdfc3lzdGVtcywgYW5kCisJc29vbi10by1iZS1hZGRlZCBjb3ZlcmFnZXMuCisKKzIwMTMtMTItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBzL0FGX1NjcmlwdF8vQUZfV3JpdGluZ1N5c3RlbV8vIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDEzLTEyLTExICBJbmZpbmFsaXR5ICA8aW5maW5hbGl0eUBpbmZpbmFsaXR5Lm5ldD4KKworCVt0cnVldHlwZV0gU2ltcGxpZnkgbG9naWMgb2YgcmVuZGVyaW5nIG1vZGVzLgorCisJVGhpcyBwYXRjaCB1bmlmaWVzIHRoZSBzdWJwaXhlbCBhbmQgbm9uLXN1YnBpeGVsIGNhc2VzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBSZW1vdmUKKwlgZ3JheXNjYWxlX2hpbnRpbmcnOyBhbGwgY29kZSBzaG91bGQgcmVmZXIgdG8gYGdyYXlzY2FsZScgaW5zdGVhZC4KKwlSZW1vdmUgdW51c2VkIGBuYXRpdmVfaGludGluZycgbWVtYmVyLgorCVJlbmFtZSBgc3VicGl4ZWxfaGludGluZycgbWVtYmVyIHRvIGBzdWJwaXhlbC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTE9BREVSX1NFVF9QUCk6IFVwZGF0ZWQuCisJKHR0X2xvYWRlcl9pbml0KTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19HRVRJTkZPKTogU2ltcGxpZnkuCisJVXBkYXRlZC4KKworMjAxMy0xMi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY3VtZW50YXRpb25dIEFkZCBzZWN0aW9uIGhvdyB0byBpbmNsdWRlIEZyZWVUeXBlIGhlYWRlciBmaWxlcy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IERhdmlkIEthc3RydXAgPGRha0BnbnUub3JnPi4KKworCVN1cnByaXNpbmdseSwgYSBkZXNjcmlwdGlvbiBob3cgdG8gZG8gdGhhdCB3YXMgY29tcGxldGVseSBtaXNzaW5nIGluCisJdGhlIEFQSSByZWZlcmVuY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUuaCwgaW5jbHVkZS9mdGNoYXB0ZXJzLmg6IE5ldyBkb2N1bWVudGF0aW9uCisJc2VjdGlvbiBgaGVhZGVyX2luY2x1c2lvbicuCisKKzIwMTMtMTItMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBzL0RGTFQvTk9ORS8sIHMvZGZsdC9ub25lLy4KKworMjAxMy0xMi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIHMvQUZfU0NSSVBUX05PTkUvQUZfU0NSSVBUX1VOQVNTSUdORUQvLgorCisyMDEzLTEyLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBzY2FsaW5nIG9mIHZlcnRpY2FsIHBoYW50b20gcG9pbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogU2NhbGUgcHAzLnggYW5kCisJcHA0LnggYWxzby4KKworMjAxMy0xMi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggcG9zaXRpb25pbmcgb2YgY29tcG9zaXRlIGdseXBocy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE5pZ2VsIFRhbyA8bmlnZWx0YW9AZ29sYW5nLm9yZz4uCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0hpbnRfR2x5cGgpOiBSZW1vdmUgY29kZSB0aGF0IHNoaWZ0cworCXRoZSBnbHlwaCAoY29tcG9uZW50KSBieSBhIGZyYWN0aW9uYWwgdmFsdWUgY29tcHV0ZWQgZnJvbSB0aGUgTFNCCisJcGhhbnRvbSBwb2ludC4gIFRoaXMgaXMgd3JvbmcsIHNpbmNlIHRoZSBob3Jpem9udGFsIHBoYW50b20gcG9pbnRzCisJZ2V0IHJvdW5kZWQgaG9yaXpvbnRhbGx5IGxhdGVyIG9uLgorCisyMDEzLTEyLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi41LjIgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi01LTInLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNS4yLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi41LjEvMi41LjIvLCBzLzI1MS8yNTIvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDIuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxNzoxOjExLgorCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMi4KKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0xMi0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBOZXh0IHJvdW5kIGluIHBoYW50b20gcG9pbnQgaGFuZGxpbmcuCisKKwlHcmVnIEhpdGNoY29jayBwcm92aWRlZCB2ZXJ5IGludGVyZXN0aW5nIGluc2lnaHRzIGludG8gdGhlCisJY29tcGxpY2F0ZWQgaGlzdG9yeSBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbnMgb2YgdGhlIFRTQiBhbmQgQlNCCisJcGhhbnRvbSBwb2ludHMuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xPQURFUl9TRVRfUFApCisJW1RUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElOR106IFVzZSBgc3VicGl4ZWxfaGludGluZycgYW5kCisJYGdyYXlzY2FsZV9oaW50aW5nJyBmbGFncyBhcyBjb25kaXRpb25hbHMgZm9yIHRoZSB4IHBvc2l0aW9uIG9mIFRTQgorCWFuZCBCU0IuCisKKzIwMTMtMTItMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChGVF9DQyk6IFJlbW92ZWQuICBVbnVzZWQuCisKKzIwMTMtMTItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggaGFuZGxpbmcgb2YgZW1iZWRkZWQgYml0bWFwIHN0cmlrZXMuCisKKwlUaGlzIGNvcnJlY3RzIHRoZSBjb21taXQgZnJvbSAyMDEzLTExLTIxLiAgUHJvYmxlbSByZXBvcnRlZCBieQorCUFuZHJleSBQYW5vdiA8cGFub3ZAY2Fub3B1cy5pYWNwLmR2by5ydT4uCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRtYXApOiBGaXggbG9naWMgdG8KKwlkZXRlY3QgZXhjZXNzaXZlIGJ5dGVzIGZvciBiaXQtYWxpZ25lZCBiaXRtYXBzLgorCisyMDEzLTEyLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSBkZWFkIGNvZGUuCisKKwlSZXBvcnRlZCBieSBOaWdlbCBUYW8gPG5pZ2VsdGFvQGdvbGFuZy5vcmc+LgorCisJKiBpbmNsdWRlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfTG9hZGVyUmVjKTogUmVtb3ZlIHVudXNlZAorCWBwcmVzZXJ2ZV9wcHMnIGZpZWxkLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfSGludF9HbHlwaCk6IFVwZGF0ZWQuCisKKzIwMTMtMTItMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IHBoYW50b20gcG9pbnQgaGFuZGxpbmcuCisKKwlUaGlzIGlzIGEgZnVydGhlciBpbXByb3ZlbWVudCB0byB0aGUgY2hhbmdlcyBmcm9tIDIwMTMtMTEtMDYuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0hpbnRfR2x5cGgpOiBIb3Jpem9udGFsIHBoYW50b20gcG9pbnRzCisJYXJlIHJvdW5kZWQgaG9yaXpvbnRhbGx5LCB2ZXJ0aWNhbCBvbmVzIGFyZSByb3VuZGVkIHZlcnRpY2FsbHkuCisJKFRUX0xPQURFUl9TRVRfUFApOiBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB2ZXJ0aWNhbCBwaGFudG9tCisJcG9pbnRzIGluIHByZS1DbGVhclR5cGUgbW9kZSBpcyB6ZXJvLCBhcyBzaG93biBpbiB0aGUgT3BlblR5cGUKKwlzcGVjaWZpY2F0aW9uLgorCisyMDEzLTEyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBjaGFuZ2UgZnJvbSAyMDEzLTExLTIwLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBBa2lyYSBLYWt1dG8gPGtha3V0b0BmdWsua2luZGFpLmFjLmpwPi4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBQcm90ZWN0IGNhbGwgdG8KKwlgVXBkYXRlX01heCcgd2l0aCBib3RoIGEgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGd1YXJkIGFuZCBhCisJYElTX0hJTlRFRCcgY2xhdXNlLgorCUFsc28gcmVtb3ZlIHJlZHVuZGFudCBjaGVjayB1c2luZyBgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zJyDigJMgaW4KKwlzaW1wbGUgZ2x5cGhzLCB0aGUgYnl0ZWNvZGUgZGF0YSBjb21lcyBiZWZvcmUgdGhlIG91dGxpbmUgZGF0YSwgYW5kCisJYSB2YWxpZGl0eSB0ZXN0IGZvciB0aGlzIGlzIGFscmVhZHkgcHJlc2VudC4KKworMjAxMy0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCB1c2Ugb2YgZHVtcGluZyBmdW5jdGlvbnMgaW4gYGZ0Z3JpZCcgZGVtbyBwcm9ncmFtLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKEFGX0RVTVApIFtGVF9ERUJVR19BVVRPRklUXTogTmV3IG1hY3JvLgorCShhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cywgYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cywKKwlhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzKSBbRlRfREVCVUdfQVVUT0ZJVF06IEFkZCBwYXJhbWV0ZXIgdG8KKwloYW5kbGUgb3V0cHV0IHRvIHN0ZG91dC4KKwlVc2UgQUZfRFVNUC4KKwkoYWZfZ2x5cGhfaGludHNfZHVtcF9wb2ludHMsIGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMsCisJYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcykgWyFGVF9ERUJVR19BVVRPRklUXTogUmVtb3ZlZC4KKworMjAxMy0xMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNS4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNS0xJy4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjUuMS4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNS4wLzIuNS4xLywgcy8yNTAvMjUxLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTc6MDoxMS4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDEuCisJKiBkb2NzL0NIQU5HRVMsIGRvY3MvcmVsZWFzZTogVXBkYXRlZC4KKworMjAxMy0xMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXTogQWRkIHRyaWNreSBmb250IG5hbWVzIGBoa3Njc2lpYy50dGYnIGFuZCBgaWljb3JlLnR0ZicuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoVFJJQ0tfTkFNRVNfTUFYX0NIQVJBQ1RFUlMsCisJVFJJQ0tfTkFNRVNfQ09VTlQpOiBVcGRhdGVkLgorCSh0cmlja19uYW1lcyk6IEFkZCBmYW1pbHkgbmFtZSBmb3IgdGhlIHR3byBmb250cy4KKworMjAxMy0xMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0bWFwKTogVHlwby4KKworMjAxMy0xMS0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFR5cG8uCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFJldHVybiBjb3JyZWN0IGBic2l6ZS0+d2lkdGgnCisJdmFsdWUgaWYgdGhlIGZvbnQgbGFja3MgYW4gYE9TLzInIHRhYmxlLgorCisyMDEzLTExLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gSW1wcm92ZSBoYW5kbGluZyBvZiBidWdneSBlbWJlZGRlZCBiaXRtYXAgc3RyaWtlcy4KKworCVdlIGFyZSBub3cgYWJsZSB0byBzdWNjZXNzZnVsbHkgbG9hZCBgQXBwbGVNeW91bmdKby50dGYnLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcCk6IERvbid0IHRydXN0IGdseXBoCisJZm9ybWF0LgorCisyMDEzLTExLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIERvbid0IHRydXN0IGBtYXhwJ3MgYG1heFNpemVPZkluc3RydWN0aW9ucycuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD47IHNlZQorCisJICBodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMy0wOC9tc2cwMDAwNS5odG1sCisKKwlmb3IgZGV0YWlscy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBDaGVjayBzaXplIG9mIGBmcGdtJyBhbmQgYHByZXAnCisJdGFibGVzIGFsc28gZm9yIHNldHRpbmcgYGF1dG9oaW50Jy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBVc2UgY29kZSBmcm9tCisJYFRUX1Byb2Nlc3NfQ29tcG9zaXRlX0dseXBoJyBmb3IgaGFuZGxpbmcgdW5yZWxpYWJsZSB2YWx1ZXMgb2YKKwlgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zJy4KKworMjAxMy0xMS0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEZpeCBgT1MvMicgdGFibGUgdmVyc2lvbiA1IHN1cHBvcnQuCisKKwlXZSBub3cgZm9sbG93IHRoZSBgb2ZmaWNpYWwnIGFubm91bmNlbWVudCBmcm9tIE1pY3Jvc29mdCAob24gdGhlCisJT3BlblR5cGUgbWFpbGluZyBsaXN0LCB3aGljaCB1bmZvcnR1bmF0ZWx5IGhhc24ndCBhIHB1YmxpYyBhcmNoaXZlKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIChUVF9PUzIpOgorCXMvdXNMb3dlclBvaW50U2l6ZS91c0xvd2VyT3B0aWNhbFBvaW50U2l6ZS8sCisJcy91c1VwcGVyUG9pbnRTaXplL3VzVXBwZXJPcHRpY2FsUG9pbnRTaXplLy4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9vczIpOiBVcGRhdGUsIGFuZCBzZXQgY29ycmVjdAorCWRlZmF1bHQgdmFsdWVzLgorCisyMDEzLTExLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2Z0MnVuaXguaDogUmVtb3ZlLiAgTm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IFVwZGF0ZWQuCisKKzIwMTMtMTEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVNpbXBsaWZ5IGhlYWRlciBmaWxlIGhpZXJhcmNoeS4KKworCVRoaXMgbGFyZ2UgcGF0Y2ggY2hhbmdlcyB0aGUgaGVhZGVyIGZpbGUgZGlyZWN0b3J5IGxheW91dCBmcm9tCisJYGluY2x1ZGUvZnJlZXR5cGUvLi4uJyB0byBgaW5jbHVkZS8uLi4nLCBlZmZlY3RpdmVseSByZW1vdmluZyBvbmUKKwlsZXZlbC4gIFNpbmNlIHRoZSBmaWxlIGBmdDJidWlsZC5oJyBpcyBhbHNvIGxvY2F0ZWQgaW4gYGluY2x1ZGUnCisJKGFuZCBpdCBzdGF5cyB0aGVyZSBldmVuIGFmdGVyIGluc3RhbGxhdGlvbiksIGFsbCBGcmVlVHlwZSBoZWFkZXIKKwlmaWxlcyBhcmUgbm93IGluIGEgc2luZ2xlIGRpcmVjdG9yeS4KKworCUFwcGxpY2F0aW9ucyB0aGF0IHVzZSAoYSkgYGZyZWV0eXBlLWNvbmZpZycgb3IgRnJlZVR5cGUncworCWBwa2ctY29uZmlnJyBmaWxlIHRvIGdldCB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgZm9yIHRoZSBjb21waWxlciwgYW5kCisJKGIpIHRoZSBkb2N1bWVudGVkIHdheSBmb3IgaGVhZGVyIGluY2x1c2lvbiBsaWtlCisKKwkgICNpbmNsdWRlIDxmdDJidWlsZC5oPgorCSAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCSAgLi4uCisKKwlkb24ndCBuZWVkIGFueSBjaGFuZ2UgdG8gdGhlIHNvdXJjZSBjb2RlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlLyo6IE1vdmUgdXAgdG8uLi4KKwkqIGluY2x1ZGUvKjogLi4uIHRoaXMgZGlyZWN0b3J5LgorCisJKiBidWlsZHMvYW1pZ2EvaW5jbHVkZS9mcmVldHlwZS8qOiBNb3ZlIHVwIHRvLi4uCisJKiBidWlsZHMvYW1pZ2EvaW5jbHVkZS8qOiAuLi4gdGhpcyBkaXJlY3RvcnkuCisKKwkqLyo6IEVzc2VudGlhbGx5IGRvIGBzQC9mcmVldHlwZS9AL0AnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBDTWFrZUxpc3QudHh0OiBTaW1wbGlmeS4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbiwgYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluOiBGb3IKKwlgLS1jZmxhZ3MnLCByZXR1cm4gYSBzaW5nbGUgZGlyZWN0b3J5LgorCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IE5vIGxvbmdlciB0cnkgdG8gcmVtb3ZlIGBjYWNoZScKKwlhbmQgYGludGVybmFsJyBzdWJkaXJlY3RvcmllczsgaW5zdGVhZCwgcmVtb3ZlIHRoZSBgZnJlZXR5cGUnCisJc3ViZGlyZWN0b3J5LgorCisyMDEzLTExLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBsYXN0IGB0cnVldHlwZScgY29tbWl0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9nZXRfbWV0cmljcyk6IFByZXNlcnZlIHN0cmVhbSBwb3NpdGlvbi4KKwlSZXR1cm4gZXJyb3IgdmFsdWUuCisJKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBVcGRhdGVkLgorCisyMDEzLTExLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ01BS0U6IE5ldyBkdW1teSBmaWxlLgorCisyMDEzLTExLTA4ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW2NmZl0gRml4IGZvciBoaW50cyB0aGF0IHRvdWNoLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2luc2VydEhpbnQpOiBGaXggY29uZGl0aW9uIGZvcgorCWZpbmRpbmcgaW5kZXggdmFsdWUgb2YgaW5zZXJ0aW9uIHBvaW50LgorCisyMDEzLTExLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBoYW5kbGluZyBvZiBwaGFudG9tIHBvaW50cyBpbiBjb21wb3NpdGUgZ2x5cGhzLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgTmlnZWwgVGFvIDxuaWdlbHRhb0Bnb2xhbmcub3JnPi4KKworCVRoaXMgaXMgYSBmb2xsb3ctdXAgY29tbWl0IHRvIHRoZSBwcmV2aW91cyBvbmUuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBDYWxsCisJYHR0X2dldF9tZXRyaWNzJyBhZnRlciBsb2FkaW5nIHRoZSBnbHlwaCBoZWFkZXIuCisKKzIwMTMtMTEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW1wcm92ZSBlbXVsYXRpb24gb2YgdmVydGljYWwgbWV0cmljcy4KKworCVRoaXMgY29tbWl0IGFsc28gaW1wcm92ZXMgdGhlIHN0YXJ0IHZhbHVlcyBvZiB2ZXJ0aWNhbCBwaGFudG9tCisJcG9pbnRzLiAgS3Vkb3MgdG8gR3JlZyBIaXRjaGNvY2sgZm9yIGhlbHAuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0dldF9WTWV0cmljcyk6IEFkZCBwYXJhbWV0ZXIgdG8gcGFzcworCWB5TWF4JyB2YWx1ZS4gIFJlcGxhY2UgY29kZSB3aXRoIGZpeGVkIE1pY3Jvc29mdCBkZWZpbml0aW9uLgorCSh0dF9nZXRfbWV0cmljcyk6IFVwZGF0ZWQuCisJKFRUX0xPQURFUl9TRVRfUFApOiBBZGQgZXhwbGFuYXRpb24gaG93IHRvIGluaXRpYWxpemUgcGhhbnRvbQorCXBvaW50cywgdGFrZW4gZnJvbSBib3RoIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGFuZCBwcml2YXRlCisJY29tbXVuaWNhdGlvbiB3aXRoIEdyZWcgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBhZGRlZCB0byB0aGUKKwlzdGFuZGFyZCkuCisJRml4IGhvcml6b250YWwgcG9zaXRpb24gb2YgYHBwMycgYW5kIGBwcDQnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2FkdmFuY2VzKTogVXBkYXRlZC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDEzLTExLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOiBzL3YxMTAvdjEwMC8uCisJUGxhdGZvcm1Ub29sU2V0IHZlcnNpb24gMTEwIGlzIGZvciBWQzIwMTIuCisKKwlQcm9ibGVtIHJlcG9ydGVkICh3aXRoIHNvbHV0aW9uKSBieSBEYXZlIEFybm9sZCA8ZGFybm9sZEBhZG9iZS5jb20+LgorCisyMDEzLTExLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIENvcnJlY3RseSByZXNldCBwb2ludCB0YWdzIGZvciBnbHlwaCBjb21wb25lbnRzLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgTmlnZWwgVGFvIDxuaWdlbHRhb0Bnb2xhbmcub3JnPi4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19Db21wb3NpdGVfR2x5cGgpOiBGaXggbG9vcC4KKworMjAxMy0xMS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggR0VUSU5GTyBvcGNvZGUgaGFuZGxpbmcgb2Ygc3VicGl4ZWwgaGludGluZyBiaXRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0dFVElORk8pOiBEb24ndCByZXF1ZXN0IGJpdCA2IHNldCB0bworCWdldCBpbmZvIG9uIHN1YnBpeGVsIGhpbnRpbmcuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0xMS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjNDA0NTEuCisKKwlTaW1wbHkgYXBwbHkgdGhlIHBhdGNoIGZyb20gdGhlIGJ1ZyByZXBvcnQuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLCBidWlsZHMvdm1zL2Z0Y29uZmlnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogVGhlIHVzZWQgI3ByYWdtYSBkaXJlY3RpdmVzIG9ubHkKKwl3b3JrIHdpdGggZ2NjIHZlcnNpb25zIDQuNiBhbmQgaGlnaGVyLgorCisyMDEzLTExLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0xMS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNaW5vciBjb2RlIHJlZmFjdG9yaW5nLgorCisJVHdvIGJlbmVmaXRzOiBUaGUgYWxsb2NhdGVkIEZERUYgKGFuZCBJREVGKSBhcnJheSBnZXRzIHNsaWdodGx5CisJc21hbGxlciwgYW5kIHRoZSBgdHRkZWJ1ZycgZGVtbyBwcm9ncmFtIGhhcyBhY2Nlc3MgdG8gZnVuY3Rpb24KKwludW1iZXJzIHdpdGhvdXQgYWRkaXRpb25hbCBjb3N0cy4KKworCUZvcnR1bmF0ZWx5LCBubyBjaGFuZ2VzIHRvIEZvbnRGb3JnZSBhcmUgbmVjZXNzYXJ5IOKAkyB0aGlzIGlzIHRoZQorCW9ubHkgZXh0ZXJuYWwgVHJ1ZVR5cGUgZGVidWdnZXIgSSBrbm93IG9mLCBidXQgb3RoZXJzIG1heSBleGlzdCBhbmQKKwlzaG91bGQgY2hlY2sgdGhlIGNvZGUgYWNjb3JkaW5nbHkuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9DYWxsUmVjKTogUmVwbGFjZSBgQ3VyX1Jlc3RhcnQnIGFuZAorCWBDdXJfRW5kJyB3aXRoIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZyBgVFRfRGVmUmVjb3JkJworCXN0cnVjdHVyZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERPX0pST1QsIERPX0pNUFIsIERPX0pST0YsIEluc19FTkRGLAorCUluc19DQUxMLCBJbnNfTE9PUENBTEwsIEluc19VTktOT1dOLCBUVF9SdW5JbnMgPEludmFsaWRfT3Bjb2RlPik6CisJVXBkYXRlZC4KKworMjAxMy0xMC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEltcGxlbWVudCBzdXBwb3J0IGZvciBgT1MvMicgdGFibGUgdmVyc2lvbiA1LgorCisJU2VlCisKKwkgIGh0dHA6Ly90eXBlZHJhd2Vycy5jb20vZGlzY3Vzc2lvbi80NzAvbmV3LW1pY3Jvc29mdC1zaXplLXNwZWNpZmljLWRlc2lnbi1zZWxlY3Rpb24tbWVjaGFuaXNtCisKKwlmb3IgdGhlIGFubm91bmNlbWVudC4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIChUVF9PUzIpOiBBZGQgZmllbGRzCisJYHVzTG93ZXJQb2ludFNpemUnIGFuZCBgdXNVcHBlclBvaW50U2l6ZScuICBTaW5jZSBGcmVlVHlwZSByZXR1cm5zCisJdGhpcyBzdHJ1Y3R1cmUgb25seSBhcyBhIHBvaW50ZXIgdGhyb3VnaCBgRlRfR2V0X1NmbnRfVGFibGUnLCB0aGVyZQorCXNob3VsZG4ndCBiZSBhbnkgQUJJIHByb2JsZW1zLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX29zMik6IEltcGxlbWVudCBpdC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDEzLTEwLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFJFQURNRS5naXQsIGRvY3MvQ0hBTkdFUywgZG9jcy9JTlNUQUxMOiBVcGRhdGVkLgorCisyMDEzLTEwLTI0ICBKb2huIENhcnkgIDxjYXJ5QHR4Y29ycC5jb20+CisKKwlQcm92aWRlIGNtYWtlIHN1cHBvcnQuCisKKwkqIENNYWtlTGlzdHMudHh0OiBOZXcgZmlsZS4KKworMjAxMy0xMC0yMyAgS2VubmV0aCBNaWxsZXIgIDxrZW5uZXRoYWRhbW1pbGxlckB5YWhvby5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByb3ZpZGUgc3VwcG9ydCBmb3IgeDY0IGJ1aWxkcyBpbiBWaXN1YWwgQysrIHByb2plY3QgZmlsZXMuCisKKwkqIHNyYy9idWlsZHMvd2luMzI6IFJlbmFtZWQgdG8uLi4KKwkqIHNyYy9idWlsZHMvd2luZG93czogVGhpcy4KKworCSogc3JjL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC8qOiBVcGRhdGVkIHRvIGhhbmRsZSB4NjQgdGFyZ2V0LgorCisJKiBzcmMvYnVpbGRzL3dpbmRvd3MvKi5taywgZG9jcy9JTlNUQUxMLkdOVTogcy93aW4zMi93aW5kb3dzLyB3aGVyZQorCWFwcHJvcHJpYXRlLgorCisyMDEzLTEwLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL21kNS5jLCBzcmMvYmFzZS9tZDUuaDogVXBkYXRlZCB0byByZWNlbnQgdmVyc2lvbi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IFVwZGF0ZWQ7IGBtZDUuYycgbm8gbG9uZ2VyIHVzZXMgYGZyZWUnLgorCisJVGhlIGNhbm9uaWNhbCBVUkwgdG8gZ2V0IHVwZGF0ZXMgZm9yIHRoaXMgZmlsZSBpcworCisJICBodHRwOi8vY3Zzd2ViLm9wZW53YWxsLmNvbS9jZ2kvY3Zzd2ViLmNnaS9Pd2wvcGFja2FnZXMvcG9wYTNkL3BvcGEzZC9tZDUvCisKKwlhcyB0aGUgYXV0aG9yIHRvbGQgbWUgaW4gcHJpdmF0ZSBjb21tdW5pY2F0aW9uLgorCisyMDEzLTEwLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gcy9TTUFMTF9UT1AvWF9IRUlHSFQvLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMsIHNyYy9hdXRvZml0L2FmbGF0aW4uaCwKKwlzcmMvYXV0b2ZpdC9hdGxhdGluMi5jOiBVcGRhdGVkLgorCisyMDEzLTEwLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IHMvTUlOT1IvREVTQ0VOREVSLy4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworMjAxMy0xMC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFkZCBkZXNjcmlwdGlvbiBzdHJpbmdzIHRvIHNjcmlwdCBlbnRyaWVzLgorCisJQ3VycmVudGx5LCB0aGlzIGlzIHVudXNlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogRG8gaXQuCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jLCBzcmMvYXV0b2ZpdC9hZnBpYy5jLAorCXNyYy9hdXRvZml0L2FmdHlwZXMuaDogVXBkYXRlZC4KKworMjAxMy0xMC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgdHJhY2luZyBtZXNzYWdlIGZvciBleHRyYSBsaWdodCBmbGFnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKTogRG8gaXQuCisKKzIwMTMtMTAtMTUgIENob25neXUgWmh1ICA8bGVtYmFjb25AZ21haWwuY29tPgorCisJW2FybV0gRml4IHRodW1iMiBpbmxpbmUgYXNzZW1ibHkgdW5kZXIgTExWTS4KKworCVdoZW4gdXNpbmcgYEFERCcgd2l0aCBhbiBpbW1lZGlhdGUgb3BlcmFuZCwgdGhlIGluc3RydWN0aW9uIGlzCisJYWN0dWFsbHkgYEFERCBSZCwgUm4sICM8aW1tMTI+JywgdGhhdCBpcywgdGhlIG1heGltdW0gb2YgdGhlCisJaW1tZWRpYXRlIG9wZXJhbmQgY2Fubm90IGV4Y2VlZCA0MDk1LiAgSXQgd2lsbCBmYWlsIHRvIGNvbXBpbGUgd2l0aAorCUxMVk0uCisKKwlIb3dldmVyLCBpbiBHQ0MsIGR1ZSB0byBzb21lIGxlZ2FjeSBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zLAorCWBBREQuVycgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVtaXR0ZWQgd2hlbiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgaXMKKwlsYXJnZXIgdGhhbiA0MDk1LgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAorCShGVF9NdWxGaXhfYXJtKSBbX19HTlVDX19dOiBTdXBwb3J0IGNsYW5nIGNvbXBpbGVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTXVsRml4MTRfYXJtKSBbX19HTlVDX19dOiBEaXR0by4KKworMjAxMy0xMC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgdHJhY2luZyBvZiBgbGF0aW4nIGhpbnRlci4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBSZXBvcnQgYmx1ZQorCXpvbmUgdHlwZXMuCisJKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKTogUmVwb3J0IHNjYWxpbmcgY2hhbmdlcyBkdWUgdG8geCBoZWlnaHQKKwlhbGlnbm1lbnQuCisJUmVwb3J0IHNjYWxlZCBzdHJva2Ugd2lkdGggYW5kIGJsdWUgem9uZSB2YWx1ZXMuCisKKzIwMTMtMTAtMDMgIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+CisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfY29tcHV0ZURhcmtlbmluZyk6IEF2b2lkIGRpdmlzaW9uIGJ5IHplcm8uCisKKwlOb3RlIHRoYXQgdGhlIG9sZCBjb2RlIGF2b2lkZWQgdXNpbmcgYSByZWdpb24gb2YgdGhlIHBpZWNld2lzZQorCWxpbmVhciBmdW5jdGlvbiB3aGVyZSB0aGUgc2xvcGUgd2FzIHplcm8uICBUaGUgcmVjb3Zlcnkgd2FzIHRvIHVzZSBhCisJZGlmZmVyZW50IHNlY3Rpb24gb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBwcm9kdWNlZCBhIGRpZmZlcmVudCwKKwlpbmNvcnJlY3QgYW1vdW50IG9mIGRhcmtlbmluZy4KKworMjAxMy0xMC0wMiAgRGFycmVsbCBCZWxsZXJ0ICA8ZGFycmVsbC5iZWxsZXJ0QGhsLmtvbmljYW1pbm9sdGEudXM+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfcGNsdCk6IEZpeCBgcGNsdF9maWVsZHMnLgorCisyMDEzLTEwLTAyICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJKiBzcmMvY2ZmL2NmMmZvbnQuYyAoY2YyX2NvbXB1dGVEYXJrZW5pbmcpOiBJbml0aWFsaXplIGRhcmtlbkFtb3VudC4KKworCVRoaXMgbGluZSB3YXMgbG9zdCBpbiBjb21taXQgODljYTFmZDYgKGZyb20gMjAxMy0wNi0yNSkuICBUaGUgZWZmZWN0CisJaXMgdG8gdXNlIGEgcHJldmlvdXMgZGFya2VuaW5nIGFtb3VudCB3aGVuIHByb2R1Y2luZyBhbiB1bmhpbnRlZCwKKwl1bnNjYWxlZCBvdXRsaW5lLiAgVGhpcyBjYW4gY2F1c2UgYXV0b2hpbnQgc2FtcGxlcyBpbiBmdGdyaWQgYW5kCisJZnR2aWV3IHRvIGJlIGJhc2VkIG9uIGRhcmtlbmVkIENGRiBvdXRsaW5lcyBpbnN0ZWFkIG9mIHVuaGludGVkLAorCXVuZGFya2VuZWQgb25lcy4KKworMjAxMy0wOS0yOSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCUZpeCBTYXZhbm5haCBidWcgIzM5Mjk1LgorCisJVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IHN3aXRjaGluZyB0byB0aGUgaW5pdGlhbCBoaW50bWFwICh0aGUgb25lIGluCisJZWZmZWN0IHdoZW4gYG1vdmV0bycgZXhlY3V0ZXMpIGp1c3QgYmVmb3JlIGRyYXdpbmcgdGhlIGZpbmFsIGVsZW1lbnQKKwlpbiB0aGUgY2hhcnN0cmluZy4gIFRoaXMgZW5zdXJlZCB0aGF0IHRoZSBwYXRoIHdhcyBjbG9zZWQgKGluIGJvdGgKKwlDaGFyYWN0ZXIgU3BhY2UgYW5kIERldmljZSBTcGFjZSkuICBCdXQgaWYgdGhlIGZpbmFsIGVsZW1lbnQgd2FzIGEKKwljdXJ2ZSBhbmQgaWYgdGhlIGZpbmFsIGhpbnRtYXAgd2FzIGRpZmZlcmVudCBlbm91Z2ggZnJvbSB0aGUgaW5pdGlhbAorCW9uZSwgdGhlbiB0aGUgY3VydmUgd2FzIHZpc2libHkgZGlzdG9ydGVkLgorCisJVGhlIGZpcnN0IHBhcnQgb2YgdGhlIGZpeCBpcyB0byBkcmF3IHRoZSBmaW5hbCBjdXJ2ZSB1c2luZyB0aGUgZmluYWwKKwloaW50bWFwIGFzIHNwZWNpZmllZCBieSB0aGUgY2hhcnN0cmluZy4gIFRoaXMgY29ycmVjdHMgdGhlCisJZGlzdG9ydGlvbiBidXQgZG9lcyBub3QgZW5zdXJlIGNsb3NpbmcgaW4gRGV2aWNlIFNwYWNlLiAgSXQgbWF5CisJcmVxdWlyZSB0aGUgcmFzdGVyaXplciB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGFuIGV4dHJhIGNsb3NpbmcKKwlsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSBoaW50bWFwIGRpZmZlcmVuY2VzLCB0aGlzIGxpbmUgY291bGQgYmUgZnJvbQorCXplcm8gdG8gYSBjb3VwbGUgcGl4ZWxzIGluIGxlbmd0aC4KKworCVRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZml4IGNvdmVycyB0aGUgY2FzZSB3aGVyZSB0aGUgY2hhcnN0cmluZworCXN1YnBhdGggaXMgY2xvc2VkIHdpdGggYW4gZXhwbGljaXQgbGluZS4gIFdlIG5vdyBtb2RpZnkgdGhhdCBsaW5lJ3MKKwllbmQgcG9pbnQgdG8gYXZvaWQgdGhlIGRpc3RvcnRpb24uCisKKwlTb21lIGdseXBocyBpbiB0aGUgYnVnIHJlcG9ydCBmb250IChUZXhHeXJlSGVyb3MtUmVndWxhcikgdGhhdCBzaG93CisJdGhlIGNoYW5nZSBhcmU6CisKKwkgIDI1cHBlbSAgICBTICg5OCkKKwkgIDI0cHBlbSAgICBlaWdodCAoNTIpCisJICAyNS41cHBlbSAgcCAoODUpCisKKwlDdXJ2ZXMgYXQgdGhlICplbmQqIG9mIGEgc3VicGF0aCBhcmUgbm8gbG9uZ2VyIGRpc3RvcnRlZC4gIEhvd2V2ZXIsCisJc29tZSBvZiB0aGVzZSBnbHlwaHMgaGF2ZSBiYWQgaGludCBzdWJzdGl0dXRpb25zIGluIHRoZSBtaWRkbGUgb2YgYQorCXN1YnBhdGgsIGFuZCB0aGVzZSBhcmUgbm90IGFmZmVjdGVkLgorCisJVGhlIHBhdGNoIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgc2V0IG9mIDEwNiBmb250cyB0aGF0IHNoaXBwZWQgd2l0aAorCUFkb2JlIENyZWF0aXZlIFN1aXRlIDQsIHRvZ2V0aGVyIHdpdGggNzU2IE9wZW4gU291cmNlIENGRiBmb250cyBmcm9tCisJR29vZ2xlIEZvbnRzLiAgVGhlcmUgYXJlIDEuNSBtaWxsaW9uIGdseXBocywgb2Ygd2hpY2ggc29tZSAyMGsgYXJlCisJY2hhbmdlZCB3aXRoIHRoZSBmaXguICBBIHNhbXBsaW5nIG9mIGEgZmV3IGh1bmRyZWQgb2YgdGhlc2UgY2hhbmdlcworCWhhdmUgYmVlbiBleGFtaW5lZCBtb3JlIGNsb3NlbHksIGFuZCB0aGUgY2hhbmdlcyBsb29rIGdvb2QgKG9yIGF0CisJbGVhc3QgYWNjZXB0YWJsZSkuCisKKwkqIHNyYy9jZmYvY2YyaGludHMuaCAoQ0YyX0dseXBoUGF0aFJlYyk6IE5ldyBlbGVtZW50IGBwYXRoSXNDbG9zaW5nJworCXRvIGluZGljYXRlIHRoYXQgd2Ugc3ludGhlc2l6ZSBhIGNsb3NlcGF0aCBsaW5lLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9nbHlwaHBhdGhfaW5pdCk6IFVwZGF0ZWQuCisJKGNmMl9nbHlwaHBhdGhfcHVzaFByZXZFbGVtKTogSWYgY2xvc2luZywgdXNlIGZpcnN0IGhpbnQgbWFwIChmb3IKKwlgbGluZXRvJyBvcGVyYXRvcikgYW5kIGFkanVzdCBoaW50IHpvbmUuCisJRm9yIHN5bnRoZXNpemVkIGNsb3NpbmcgbGluZXMsIHVzZSBlbmQgcG9pbnQgaW4gZmlyc3QgaGludCB6b25lLgorCShjZjJfZ2x5cGhwYXRoX2xpbmVUbyk6IFRha2UgY2FyZSBvZiBzeW50aGVzaXplZCBjbG9zaW5nIGxpbmVzLiAgSW4KKwlwYXJ0aWN1bGFyLCBzaGlmdCB0aGUgZGV0ZWN0aW9uIG9mIHplcm8tbGVuZ3RoIGxpbmVzIGZyb20gY2hhcmFjdGVyCisJc3BhY2UgdG8gZGV2aWNlIHNwYWNlLgorCShjZjJfZ2x5cGhwYXRoX2Nsb3NlT3BlblBhdGgpOiBSZW1vdmUgYXNzZXJ0aW9uLgorCVVwZGF0ZWQuCisKKzIwMTMtMDktMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl97Z3JlayxjeXJsfV91bmlyYW5nZXMpOiBGaXggYXJyYXlzLgorCisyMDEzLTA5LTI1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2JkZiwgcGNmXSBSZWZ1c2Ugbm9uLXplcm8gZmFjZV9pbmRleC4KKworCVN1Z2dlc3RlZCBieSBBa2lyYSBUYWdvaCwgc2VlCisKKwkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDEzLTA5L21zZzAwMDMwLmh0bWwKKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogUmV0dXJuIGBJbnZhbGlkX0FyZ3VtZW50JworCWVycm9yIGlmIHRoZSBmb250IGNvdWxkIGJlIG9wZW5lZCBidXQgbm9uLXplcm8gYGZhY2VfaW5kZXgnIGlzCisJZ2l2ZW4uCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9GYWNlX0luaXQpOiBEaXR0by4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQpOiBSZW1vdmUgdW5yZXF1aXJlZCBGVF9VTlVTRUQKKwltYWNybyBmb3IgYGZhY2VfaW5kZXgnIGJlY2F1c2UgaXQgaXMgdmFsaWRhdGVkIGxhdGVyLgorCisyMDEzLTA5LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICM0MDA5MC4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3Nfc2NhbGUpOiBSZXZlcnQgY29tbWl0CisJMzA2ZjhjNWQgKGZyb20gMjAxMy0wOC0yNSkgYWZmZWN0aW5nIHRoaXMgZnVuY3Rpb24uCisKKzIwMTMtMDktMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBEaXN1bmlmeSBDeXJpbGxpYyBhbmQgR3JlZWsgaGFuZGxpbmcgZnJvbSBMYXRpbi4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEN5cmlsbGljIGFuZCBHcmVlay4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdCAoQUZfQkxVRV9TVFJJTkdTRVRfR1JFSywKKwlBRl9CTFVFX1NUUklOR1NFVF9DWVJMKTogQWRkIGJsdWUgem9uZXMgZm9yIEdyZWVrIGFuZCBDeXJpbGxpYy4KKwkoQUZfQkxVRV9TVFJJTkdTRVRfTEFUTik6IEZpeCB0eXBvLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9ncmVrX3VuaXJhbmdlcywgYWZfY3lybF91bmlyYW5nZXMpOiBOZXcKKwlhcnJheXMuCisJKGFmX2dyZWtfc2NyaXB0X2NsYXNzLCBhZl9jeXJsX3NjcmlwdF9jbGFzcyk6IE5ldyBzY3JpcHRzLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5oOiBVcGRhdGVkLgorCisyMDEzLTA5LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0wOS0yMCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlGaXggdmVydGljYWwgc2l6ZSBvZiBlbWJvbGRlbmVkIGdseXBocy4KKworCUNmLiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg2NzA5CisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogQWRqdXN0IGBob3JpQmVhcmluZ1knCisJYWxzby4KKworMjAxMy0wOS0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaDogQ29ycmVjdCBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbgorCWFsZ29yaXRobSBkZXNjcmlwdGlvbi4KKworMjAxMy0wOS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgSGVicmV3IHJlbmRlcmluZy4KKworCVRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgYmx1ZSB6b25lIHByb3BlcnR5CisJYEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORycgdG8gbWFrZSB0aGUgYXV0by1oaW50ZXIgaWdub3JlIHNob3J0CisJdG9wIHNlZ21lbnRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBGaXggSGVicmV3IGJsdWUgc3RyaW5ncy4KKwlVc2UgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9MT05HIGZvciBBRl9CTFVFX1NUUklOR19IRUJSRVdfVE9QLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuaGluIChBRl9CTFVFX1BST1BFUlRZX0xBVElOX0xPTkcpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBIYW5kbGUKKwlgQUZfTEFUSU5fSVNfTE9OR19CTFVFJy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5oIChBRl9MQVRJTl9JU19MT05HX0JMVUUpOiBOZXcgbWFjcm8uCisKKzIwMTMtMDgtMjggIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJW3NmbnRdIEZpeCBmcmFtZSBhY2Nlc3Mgd2hpbGUgcmVhZGluZyBXT0ZGIHRhYmxlIGRpcmVjdG9yeS4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHdvZmZfb3Blbl9mb250KTogVXNpbmcgc2luZ2xlIG1lbW9yeSBmcmFtZQorCXdoaWxlIHJlYWRpbmcgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGZvciB0aGUgd2hvbGUgbG9vcC4KKworMjAxMy0wOC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorICAgICAgICAgICAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGdvb2dsZS5jb20+CisKKwlJbXBsZW1lbnQgc3VwcG9ydCBmb3IgV09GRiBjb250YWluZXJzLgorCisJV2Ugc2ltcGx5IHN5bnRoZXNpemUgYSBTRk5UIGZyb20gdGhlIFdPRkYsIGNyZWF0ZSBhIG1lbW9yeSBzdHJlYW0KKwlmb3IgdGhlIG5ldyBkYXRhLCBhbmQgbG9hZCB0aGUgU0ZOVCBhcyB1c3VhbC4KKworCURvZXMgTk9UIGFkZCBhbnkgQVBJIHRvIGFjY2VzcyBXT0ZGIG1ldGFkYXRhIG9yIHByaXZhdGUgYmxvY2tzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoV09GRl9IZWFkZXJSZWMsCisJV09GRl9UYWJsZVJlYyk6IE5ldyBzdHJ1Y3R1cmVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oIChUVEFHX3dPRkYpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9PcGVuX0ZhY2UpOiBTZXQgYHN0cmVhbScgYWZ0ZXIgY2FsbGluZworCWBvcGVuX2ZhY2UnLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyBbRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQl06IEluY2x1ZGUKKwlgRlRfR1pJUF9IJy4KKwkoV1JJVEVfQllURSwgV1JJVEVfVVNIT1JULCBXUklURV9VTE9ORyk6IE5ldyB0ZW1wb3JhcnkgbWFjcm9zIGZvcgorCXdyaXRpbmcgdG8gYSBzdHJlYW0uCisJKHNmbnRfc3RyZWFtX2Nsb3NlLCBjb21wYXJlX29mZnNldHMsIHdvZmZfb3Blbl9mb250KTogTmV3IGZ1bmN0aW9ucy4KKwkoc2ZudF9vcGVuX2ZvbnQpOiBIYW5kbGUgYFRUQUdfd09GRicuCisJKHNmbnRfaW5pdF9mYWNlKTogU2V0IGBzdHJlYW0nIGFmdGVyIGNhbGxpbmcgYHNmbnRfb3Blbl9mb250Jy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBTZXQgYHN0cmVhbScgYWZ0ZXIgY2FsbGluZworCWBzZm50LT5pbml0X2ZhY2UnLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAob3Blbl9mYWNlKTogVXNlIGEgcG9pbnRlciB0byBGVF9TdHJlYW0gYXMgYW4KKwlhcmd1bWVudCBzbyB0aGF0IGEgY2hhbmdlZCBzdHJlYW0gc3Vydml2ZXMuCisJVXBkYXRlIGNhbGxlcnMuCisKKzIwMTMtMDgtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtnemlwXSBOZXcgZnVuY3Rpb24gYEZUX0d6aXBfVW5jb21wcmVzcycuCisKKwlUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgemxpYidzIGB1bmNvbXByZXNzJyBmdW5jdGlvbi4gIFdlIG5lZWQgdGhpcworCWZvciBXT0ZGIHN1cHBvcnQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgsIHNyYy9nemlwL2Z0Z3ppcC5jIChGVF9HemlwX1VuY29tcHJlc3MpOgorCU5ldyBmdW5jdGlvbi4KKworCSogc3JjL2d6aXAvcnVsZXMubWs6IFJld3JpdGUgdG8gYmV0dGVyIHJlZmxlY3QgZGVwZW5kZW5jaWVzLgorCisyMDEzLTA4LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IGBtYWtlIG11bHRpJyBjb21waWxhdGlvbi4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmNpbiwgc3JjL2F1dG9maXQvYWZibHVlLmM6IERvbid0IGluY2x1ZGUKKwlgYWZibHVlLmgnIGJ1dCBgYWZ0eXBlcy5oJy4KKwkqIHNyYy9hdXRvZml0L2FmY2prLmM6IERvbid0IGluY2x1ZGUgYGFmdHlwZXMuaCcgYnV0IGBhZmdsb2JhbC5oJy4KKworMjAxMy0wOC0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBDKysgY29tcGlsYXRpb24uCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19nZXRfbWV0cmljcyksCisJc3JjL2F1dG9maXQvYWZkdW1teS5jIChhZl9kZmx0X3NjcmlwdF9jbGFzcyksIHNyYy9hdXRvZml0L2FmaW5kaWMuYworCShhZl9kZXZhX3NjcmlwdF9jbGFzcyk6IFVzZSBwcm9wZXIgY2FzdHMuCisKKzIwMTMtMDgtMjcgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2ZvbnRfZGlyKTogRml4IHNpZ24gdHlwb3MuCisKKzIwMTMtMDgtMjcgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJRlRfT3Blbl9GYWNlOiBJbXByb3ZlIGV4dGVybmFsIHN0cmVhbSBoYW5kbGluZy4KKworCUlmIHRoZSBmb250J3MgYGNsYXp6LT5pbml0X2ZhY2UnIGZ1bmN0aW9uIHdhbnRzIHRvIHN3YXAgdG8gbmV3CisJc3RyZWFtLCBoYW5kbGluZyBvZiB3aGV0aGVyIG9yaWdpbmFsIHN0cmVhbSB3YXMgZXh0ZXJuYWwgY291bGQKKwlyZXN1bHQgdG8gZWl0aGVyIG1lbW9yeSBsZWFrIG9yIGRvdWJsZSBmcmVlLiAgTWFyayBleHRlcm5hbGl0eSBpbnRvCisJZmFjZSBmbGFncyBiZWZvcmUgY2FsbGluZyBgaW5pdF9mYWNlJyBzdWNoIHRoYXQgdGhlIGNsYXp6IGNhbiBoYW5kbGUKKwlleHRlcm5hbCBzdHJlYW1zIHByb3Blcmx5LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogTW92ZSBjb2RlIHRvIHNldAorCUZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gdG8uLi4KKwkob3Blbl9mYWNlKTogVGhpcyBmdW5jdGlvbi4KKworMjAxMy0wOC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGBGVF9TcXJ0Rml4ZWQnIGZ1bmN0aW9uLgorCisJSXQncyBubyBsb25nZXIgdXNlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCwgc3JjL2Jhc2UvZnRjYWxjLmM6IERvIGl0LgorCisyMDEzLTA4LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gV2hpbGUgdHJhY2luZywgcmVwb3J0IHNjcmlwdCBuYW1lcyBpbnN0ZWFkIG9mIElEIHZhbHVlcy4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfc2NyaXB0X25hbWVzKSBbRlRfREVCVUdfTEVWRUxfVFJBQ0VdOgorCU5ldyBhcnJheS4KKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzLAorCWFmX2Nqa19oaW50X2VkZ2VzKTogVXNlIGBhZl9zY3JpcHRfbmFtZXMnLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzLAorCWFmX2xhdGluX2hpbnRfZWRnZXMpOiBEaXR0by4KKworMjAxMy0wOC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFJlcG9ydCB1c2VkIHNjcmlwdCB3aGlsZSBoaW50aW5nIGEgZ2x5cGguCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50X2VkZ2VzKSwgc3JjL2F1dG9maXQvYWZsYXRpbi5jCisJKGFmX2xhdGluX2hpbnRfZWRnZXMpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTMtMDgtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgSGVicmV3IHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgc3RyaW5ncyBmb3IgSGVicmV3LgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9oZWJyX3VuaXJhbmdlcyk6IE5ldyBhcnJheS4KKwkoYWZfaGVicl9zY3JpcHRfY2xhc3MpOiBOZXcgc2NyaXB0LgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5oLCBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBVcGRhdGVkLgorCisyMDEzLTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW1wcm92ZSB0cmFjaW5nIG1lc3NhZ2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19pbml0X3dpZHRocyk6IE1lbnRpb24gc2NyaXB0CisJSUQgaW4gdHJhY2luZyBtZXNzYWdlLgorCShhZl9jamtfbWV0cmljc19pbml0X2JsdWVzKTogSW5pdGlhbGl6ZSBgYXhpcycgb3V0c2lkZSBvZiB0aGUgaW5uZXIKKwlsb29wLgorCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcy4KKwkoYWZfY2prX2hpbnRfZWRnZXMpIFtGVF9ERUJVR19MRVZFTF9UUkFDRV06IE5ldyB2YXJpYWJsZQorCWBudW1fYWN0aW9ucycgdG8gY291bnQgaGludGluZyBhY3Rpb25zLgorCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzKTogTWVudGlvbgorCXNjcmlwdCBJRCBpbiB0cmFjaW5nIG1lc3NhZ2UuCisJKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcywgYWZfbGF0aW5faGludF9lZGdlcyk6IEltcHJvdmUgdHJhY2luZworCW1lc3NhZ2VzLgorCisyMDEzLTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlCZXR0ZXIgdHJhY2luZyBvZiBsb2FkZWQgZ2x5cGhzLgorCisJUHJldmlvdXNseSwgdGhlIGxvYWRpbmcgb2YgYSBnbHlwaCB3YXMgdHJhY2VkIGF0IGxldmVsIDQsIGlmIGF0IGFsbC4KKwlXaXRoIHRoaXMgY2hhbmdlLCBhbGwgZm9udCBsb2FkaW5nIHJvdXRpbmVzIGVtaXQgYSB0cmFjaW5nIG1lc3NhZ2UKKwlhdCBsZXZlbCAxLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHNlbGVjdCB0cmFjaW5nIG91dHB1dCAoZm9yIGV4YW1wbGUKKwl1c2luZyBGMl9ERUJVRz0iYW55OjEgYWZoaW50czo3IGFmbGF0aW46NyIpLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKTogQWRkIHRyYWNpbmcgbWVzc2FnZS4KKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dseXBoX2xvYWQpOiBEaXR0by4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcHJlcGFyZSk6IEltcHJvdmUgdHJhY2luZworCW1lc3NhZ2VzLgorCSogc3JjL2NpZC9jaWRnbG9hZC5jIChjaWRfbG9hZF9nbHlwaCk6IFVzZSBsZXZlbCAxIGZvciB0cmFjaW5nCisJbWVzc2FnZS4KKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0dseXBoX0xvYWQpOiBEaXR0by4KKwkqIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfc2xvdF9sb2FkKTogQWRkIHRyYWNpbmcgbWVzc2FnZS4KKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpOiBEaXR0by4KKwkqIHNyYy90eXBlNDIvdDQyb2Jqcy5jIChUNDJfR2x5cGhTbG90X0xvYWQpOiBEaXR0by4KKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpOiBEaXR0by4KKworMjAxMy0wOC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBzY3JpcHQgc2VsZWN0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfZ2V0X21ldHJpY3MpOiBVc2UKKwlgQUZfU0NSSVBUX0RGTFQnLCBub3QgdmFsdWUgMC4KKwlTaW1wbGlmeSBjb2RlLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBTb3J0IGJ5IHNjcmlwdCBuYW1lLgorCisyMDEzLTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTWFrZSBgZHVtbXknIGhpbnRlciB3b3JrIGFzIGV4cGVjdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmR1bW15LmMgKGFmX2R1bW15X2hpbnRzX2luaXQpOiBQcm9wZXJseSBzZXQgc2NhbGluZworCWluZm9ybWF0aW9uLgorCShhZl9kdW1teV9oaW50c19hcHBseSk6IFNjYWxlIHRoZSBnbHlwaHMuCisKKzIwMTMtMDgtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNYWtlIGBjamsnIG1vZHVsZSB1c2UgYmx1ZSBzdHJpbmdzZXRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChBRl9DSktfTUFYX1RFU1RfQ0hBUkFDVEVSUyk6IFJlbW92ZWQuCisJKGFmX2Nqa19oYW5pX2JsdWVfY2hhcnMpOiBSZW1vdmVkLgorCShBRl9DSktfQkxVRV9UWVBFXyopOiBSZW1vdmVkLgorCShhZl9jamtfbWV0cmljc19pbml0X2JsdWVzKTogUmVwbGFjZSBBRl9DSktfTUFYX1RFU1RfQ0hBUkFDVEVSUyB3aXRoCisJQUZfQkxVRV9TVFJJTkdfTUFYX0xFTi4KKwlDaGFuZ2UgbG9vcHMgdG8gdXNlIG9mZnNldHMgKGluIGZpbGUgYGFmYmx1ZS5oJykgaW50byB0aGUgbmV3IGFycmF5cworCWBhZl9ibHVlX3N0cmluZ3NldHMnIGFuZCBgYWZfYmx1ZV9zdHJpbmdzJyAoaW4gZmlsZSBgYWZibHVlLmMnKS4KKwlJbnN0ZWFkIG9mIHRocmVlIGRpbWVuc2lvbnMgKGFzIHVzZWQgaW4gdGhlIG9sZCBibHVlIHN0cmluZyBhcnJheSkKKwl3ZSBub3cgdXNlIHByb3BlcnRpZXMgdG8gZG8gdGhlIHNhbWUsIHNhdmluZyBvbmUgbG9vcCBuZXN0aW5nIGxldmVsLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5oOiBSZW1vdmUgb2xkIGVudW1lcmF0aW9uIHZhbHVlcyBzdXBlcnNlZGVkIGJ5CisJdGhlIG5ldyBkYXRhIGluIGBhZmJsdWUuaCcuCisJKEFGX0NKS19JU19UT1BfQkxVRSwgQUZfQ0pLX0lTX0hPUklaX0JMVUUsIEFGX0NKS19JU19GSUxMRURfQkxVRSwKKwlBRl9DSktfSVNfUklHSFRfQkxVRSk6IE5ldyBtYWNyb3MsIHRvIGJlIHVzZWQgaW4KKwlgYWZfY2prX21ldHJpY3NfaW5pdF9ibHVlcycuCisJKEFGX0NKS19CTFVFX0lTX1JJR0hUKTogUmVtb3ZlIHRoaXMgbm93IHJlZHVuZGFudCBlbnVtIHZhbHVlLgorCShBRl9DSktfQkxVRV9JU19UT1ApOiBSZW5hbWVkIHRvLi4uCisJKEFGX0NKS19CTFVFX1RPUCk6IFRoaXMuCisJKEFGX0NKS19NQVhfQkxVRVMpOiBSZW1vdmUuCisJKEFGX0NKS0F4aXNSZWMpOiBVcGRhdGVkLgorCisyMDEzLTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gVHlwby4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmhpbiwgc3JjL2F1dG9maXQvYWZibHVlLmMgKEdFVF9VVEY4X0NIQVIpOiBVc2UKKwljYXN0LgorCisyMDEzLTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gU3luY2hyb25pemUgYGNqaycgd2l0aCBgbGF0aW4nIG1vZHVsZSAoYW5kIHZpY2UgdmVyc2EpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19pbml0X3dpZHRocyk6IEFkZCB0cmFjaW5nCisJbWVzc2FnZXMuCisJKGFmX2Nqa19tZXRyaWNzX2luaXRfYmx1ZXMpOiBEb24ndCBwYXNzIGJsdWUgc3RyaW5nIGFycmF5IGFzCisJYXJndW1lbnQgYnV0IHVzZSB0aGUgZ2xvYmFsIGFycmF5IGRpcmVjdGx5LgorCVVzZSBgb3V0bGluZScgZGlyZWN0bHkuCisJVXBkYXRlIGFuZCBhZGQgdHJhY2luZyBtZXNzYWdlcy4KKwkoYWZfY2prX21ldHJpY3NfaW5pdCk6IFNpbXBsaWZ5IGNvZGUuCisJKGFmX2Nqa19tZXRyaWNzX3NjYWxlX2RpbSk6IEltcHJvdmUgdHJhY2luZyBtZXNzYWdlLgorCShhZl9jamtfbWV0cmljc19zY2FsZSk6IFN5bmNocm9uaXplLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMsCisJYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKTogSW1wcm92ZSBhbmQgYWRkIHRyYWNpbmcgbWVzc2FnZXMuCisKKzIwMTMtMDgtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNYWtlIGBsYXRpbicgbW9kdWxlIHVzZSBibHVlIHN0cmluZ3NldHMuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoQUZfTEFUSU5fTUFYX1RFU1RfQ0hBUkFDVEVSUyk6IFJlbW92ZWQuCisJKGFmX2xhdGluX2JsdWVfY2hhcnMpOiBSZW1vdmVkLgorCShhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBSZXBsYWNlIEFGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlMKKwl3aXRoIEFGX0JMVUVfU1RSSU5HX01BWF9MRU4uCisJQ2hhbmdlIGxvb3BzIHRvIHVzZSBvZmZzZXRzIChpbiBmaWxlIGBhZmJsdWUuaCcpIGludG8gdGhlIG5ldyBhcnJheXMKKwlgYWZfYmx1ZV9zdHJpbmdzZXRzJyBhbmQgYGFmX2JsdWVfc3RyaW5ncycgKGluIGZpbGUgYGFmYmx1ZS5jJykuCisJVXNlIGBBRl9MQVRJTl9JU19TTUFMTF9UT1BfQkxVRScgbWFjcm8uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaDogUmVtb3ZlIG9sZCBlbnVtZXJhdGlvbiB2YWx1ZXMgc3VwZXJzZWRlZCBieQorCXRoZSBuZXcgZGF0YSBpbiBgYWZibHVlLmgnLgorCShBRl9MQVRJTl9JU19UT1BfQkxVRSk6IFVwZGF0ZWQgZGVmaW5pdGlvbi4KKwkoQUZfTEFUSU5fSVNfU01BTExfVE9QX0JMVUUpOiBOZXcgbWFjcm8uCisJKEFGX0xBVElOX01BWF9CTFVFUyk6IFJlbW92ZS4KKwkoQUZfTGF0aW5BeGlzUmVjKTogVXBkYXRlZC4KKworMjAxMy0wOC0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFkZCBibHVlIHN0cmluZ3NldHMuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaDogSW5jbHVkZSBgYWZibHVlLmgnLgorCShBRl9TY3JpcHRDbGFzc1JlYyk6IEFkZCBgYmx1ZV9zdHJpbmdzZXQnIGZpZWxkLgorCShBRl9ERUZJTkVfU0NSSVBUX0NMQVNTKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYXV0b2ZpdC5jOiBJbmNsdWRlIGBhZmJsdWUuYycuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2hhbmlfc2NyaXB0X2NsYXNzKSwgc3JjL2F1dG9maXQvYWZkdW1teS5jCisJKGFmX2RmbHRfc2NyaXB0X2NsYXNzKSwgc3JjL2F1dG9maXQvYWZpbmRpYy5jCisJKGFmX2RldmFfc2NyaXB0X2NsYXNzKSwgc3JjL2F1dG9maXQvYWZsYXRpbi5jCisJKGFmX2xhdG5fc2NyaXB0X2NsYXNzKSwgc3JjL2F1dG9maXQvYWZsYXRpbjIuYworCShhZl9sdG4yX3NjcmlwdF9jbGFzcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L3J1bGVzLm1rIChBVVRPRl9EUlZfU1JDKTogQWRkIGBhZmJsdWUuYycuCisKKzIwMTMtMDgtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbnRyb2R1Y2UgZGF0YSBmaWxlIGZvciBibHVlIHN0cmluZ3MuCisKKwlUaGUgaWRlYSBpcyB0byBoYXZlIGEgY2VudHJhbCBmaWxlIHdoaWNoIGdldHMgcHJvY2Vzc2VkIGJ5IGEgUGVybAorCXNjcmlwdCB0byBjcmVhdGUgcHJvcGVyIGAuYycgYW5kIGAuaCcgZmlsZXMgdXNpbmcgdGVtcGxhdGVzLiAgVGhlcmUKKwlhcmUgdHdvIG90aGVyIHJlYXNvbnMgdG8gZG8gdGhhdDoKKworCSAgLiBUaGUgZGF0YSBmaWxlIHNob3VsZCBiZSBlYXNpbHkgcmVhZGFibGUuICBXZSB1c2UgVVRGLTggZW5jb2RpbmcKKwkgICAgd2hpY2ggdGhlbiBnZXRzIGNvbnZlcnRlZCB0byBzaW5nbGUgYnl0ZXMuCisKKwkgIC4gU2luY2UgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc2NyaXB0cyB3aWxsIGluY3JlYXNlIHNvb24sIHRoZQorCSAgICBjdXJyZW50IHVzYWdlIG9mIGJsdWUgc3RyaW5nIGFycmF5cyBpcyBhIHdhc3RlIG9mIHNwYWNlLiAgVXNpbmcKKwkgICAgdGhlIFBlcmwgc2NyaXB0IGl0IGlzIHBvc3NpYmxlIHRvIGltaXRhdGUgamFnZ2VkIGFycmF5cywKKwkgICAgZGVmaW5pbmcgZW51bWVyYXRpb24gY29uc3RhbnRzIGFzIG9mZnNldHMgaW50byB0aGUgYXJyYXlzLgorCisJVGhpcyBjb21taXQgb25seSBhZGRzIGZpbGVzIHdpdGhvdXQgY2hhbmdpbmcgYW55IGZ1bmN0aW9uYWxpdHkuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IE5ldyBkYXRhIGZpbGUuCisJKiBzcmMvdG9vbHMvYWZibHVlLnBsOiBOZXcgUGVybCBzY3JpcHQgZm9yIHByb2Nlc3NpbmcgYGFmYmx1ZS5kYXQnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuY2luLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaGluOiBOZXcgdGVtcGxhdGUgZmlsZXMKKwlmb3IuLi4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuYzogTmV3IHNvdXJjZSBmaWxlcy4KKwlUbyBhdm9pZCBhIGRlcGVuZGVuY3kgb24gUGVybCwgd2UgYWRkIHRoZW0gdG9vLgorCisyMDEzLTA4LTE5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRW5hYmxlIG5ldyBhbGdvcml0aG0gZm9yIGBCQm94X0N1YmljX0NoZWNrJy4KKworCSogc3JjL2Jhc2UvZnRiYm94LmM6IEVuYWJsZSBuZXcgQkJveF9DdWJpY19DaGVjayBhbGdvcml0aG0sIHJlbW92ZQorCXRoZSBvbGQgb25lLgorCUltcHJvdmUgY29tbWVudHMuCisKKzIwMTMtMDgtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGZyZWV0eXBlMi5wYyk6IERvbid0IHNldCBleGVjdXRhYmxlIGJpdC4KKworMjAxMy0wOC0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzk4MDQuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKExJQlBORyk6IERlZmluZSBhbmQgZXhwb3J0LgorCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluLCBidWlsZHMvdW5peC9mcmVldHlwZTIuaW46IEhhbmRsZQorCWxpYnBuZy4KKworMjAxMy0wOC0xNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIENsZWFuIHVwIEJCb3hfQ29uaWNfQ2hlY2suCisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0NvbmljX0NoZWNrKTogUmVtb3ZlIHJlZHVuZGFudCBjaGVja3MgZm9yCisJZXh0cmVtdW0gYXQgdGhlIHNlZ21lbnQgZW5kcywgd2hpY2ggYXJlIGFscmVhZHkgd2l0aGluIHRoZSBiYm94LgorCVNsaWdodGx5IG1vZGlmeSBjYWxjdWxhdGlvbnMuCisKKzIwMTMtMDgtMTUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBGaW5pc2ggZXhwZXJpbWVudGFsIChkaXNhYmxlZCkgQkJveF9DdWJpY19DaGVjayBpbXBsZW1lbnRhdGlvbi4KKworCSogc3JjL2Jhc2UvZnRiYm94LmMgKEJCb3hfQ3ViaWNfQ2hlY2spOiBTY2FsZSBhcmd1bWVudHMgdG8gaW1wcm92ZQorCWFjY3VyYWN5IGFuZCBhdm9pZCBvdmVyZmxvd3MuCisKKzIwMTMtMDgtMTMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBSZWZhY3RvciBleHBlcmltZW50YWwgKGRpc2FibGVkKSBCQm94X0N1YmljX0NoZWNrLgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoQkJveF9DdWJpY19DaGVjayk6IEltcGxlbWVudCB0aGUgbWluaW11bSBzZWFyY2gKKwlhcyB0aGUgbWlycm9yIGltYWdlIG9mIHRoZSBtYXhpbXVtIHNlYXJjaCBpbXBsZW1lbnRlZCBoZXJlLi4uCisJKHVwZGF0ZV9tYXgpOiBOZXcgZnVuY3Rpb24uCisKKzIwMTMtMDgtMDYgIEpvaG4gVHl0Z2F0ICA8Sm9obi5UeXRnYXRAZXNrby5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMzOTcwMi4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9pbmRleF9nZXRfcG9pbnRlcnMpOiBDaGVjayBmb3IgYGN1cl9vZmZzZXQKKwkhPSAwJzsgdGhpcyBzdHJvbmdlciB0ZXN0IGlzIG1hbmRhdGVkIGJ5IHRoZSBDRkYgc3BlY2lmaWNhdGlvbi4KKwlGaXggdGVzdCBmb3IgSU5ERVggc3RydWN0dXJlcyB3aGljaCBoYXZlIG9uZSBvciBtb3JlIGVtcHR5IGVudHJpZXMKKwlhdCB0aGUgZW5kLgorCisyMDEzLTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggZ2NjIHByYWdtYXMsIHBhcnQgMi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX011bEZpeDE0X2xvbmdfbG9uZywKKwlUVF9Eb3RGaXgxNF9sb25nX2xvbmcpOiBgI3ByYWdtYSBnY2MgZGlhZ25vc3RpYyB7cHVzaCxwb3B9JyBoYXMgYmVlbgorCWludHJvZHVjZWQgd2l0aCBnY2MgdmVyc2lvbiA0LjYuCisKKzIwMTMtMDgtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBnY2MgcHJhZ21hcy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX011bEZpeDE0X2xvbmdfbG9uZywKKwlUVF9Eb3RGaXgxNF9sb25nX2xvbmcpOiBPbGRlciBnY2MgdmVyc2lvbnMgZG9uJ3QgYWNjZXB0IGRpYWdub3N0aWMKKwlwcmFnbWFzIHdpdGhpbiBhIGZ1bmN0aW9uIGJvZHkuCisKKzIwMTMtMDgtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM5NzAwLgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5oOiBTeW5jaHJvbml6ZSB3aXRoCisJYGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgnLgorCisJKiBidWlsZHMvdm1zL2Z0Y29uZmlnLmg6IERpdHRvLgorCU1ha2UgdGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBtYXN0ZXIgYGZ0Y29uZmlnLmgnIGZpbGUgYXMgc21hbGwgYXMKKwlwb3NzaWJsZSBmb3IgZWFzaWVyIG1haW50YWluYW5jZS4KKworMjAxMy0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgaGFuZGxpbmcgb2YgYG5lYXInIHBvaW50cy4KKworCVBvaW50cyB3aGljaCBhcmUgdmVyeSBuZWFyIHRvIGVhY2ggb3RoZXIgYXJlIG5vdyBtYXJrZWQgYXMgc3VjaC4KKwlUaGUgYHdlYWsnIGZsYWcgaXMgdGhlbiBjb21wdXRlZCBieSB1c2luZyB0aGUgYGluJyB2ZWN0b3Igb2YgdGhlCisJZmlyc3QgYW5kIHRoZSBgb3V0JyB2ZWN0b3Igb2YgdGhlIGxhc3QgcG9pbnQgb2YgYSBncm91cCBvZiBuZWFyCisJcG9pbnRzLgorCisJRm9yIGV4YW1wbGUsIHRoaXMgZml4ZXMgdGhlIHJlbmRlcmluZyBvZiBnbHlwaCBgT3NsYXNoJyBpbgorCWBSb2JvdG8tVGhpbi50dGYnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0ZsYWdzKTogTmV3IHZhbHVlIGBBRl9GTEFHU19ORUFSJy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19yZWxvYWQpOiBJbnRyb2R1Y2UKKwl0aGUgaGV1cmlzdGljIHZhbHVlIGBuZWFyX2xpbWl0JyB0byBkZWNpZGUgd2hldGhlciB0aGUgY3VycmVudCBwb2ludAorCWlzIG5lYXIgdG8gdGhlIHByZXZpb3VzIG9uZSwgdGhlbiBzZXQgYEFGX0ZMQUdfTkVBUicgYWNjb3JkaW5nbHkuCisJU3RvcmUgZ29vZCBgaW4nIHZlY3RvciAob2YgbGFzdCBub24tbmVhciBwb2ludCkgaW4KKwlgbGFzdF9nb29kX2luX3t4LHl9JyBhbmQgdXNlIGl0IGFzIGFuIGFyZ3VtZW50IHRvCisJYGZ0X2Nvcm5lcl9pc19mbGF0JyBpZiBuZWNlc3NhcnkuCisKKzIwMTMtMDgtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCisJVGhpcyBpcyBiYXNlZCBvbiBibG9nIGVudHJpZXMgZnJvbSBEYXZpZCBMZW1vbiBhbmQgRGF2ZSBBcm5vbGQgKGJvdGgKKwlmcm9tIEFkb2JlKSB3aXRoIGtpbmQgcGVybWlzc2lvbi4gIERhdmUgYWxzbyBoZWxwZWQgaW4KKwlwcm9vZi1yZWFkaW5nLgorCisyMDEzLTA4LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTW92ZSBkZWNsYXJhdGlvbiBvZiBzY3JpcHRzIGludG8gc2VwYXJhdGUgZmlsZS4KKworCVRoaXMgaGFzIHRoZSBiZW5lZml0IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUgdGhlIGRhdGEgYXQKKwlkaWZmZXJlbnQgcGxhY2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBOZXcgZmlsZS4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9TY3JpcHQpOiBJbmNsdWRlIGBhZnNjcmlwdC5oJyB0byBkZWZpbmUKKwl0aGUgZW51bWVyYXRpb24gdmFsdWVzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jOiBJbmNsdWRlIGBhZnNjcmlwdC5oJyB0byBnZXQgdGhlIHNjcmlwdAorCXNwZWNpZmljIGhlYWRlciBmaWxlcy4KKwkoYWZfc2NyaXB0X2NsYXNzZXMpOiBJbmNsdWRlIGBhZnNjcmlwdC5oJyB0byBmaWxsIHRoaXMgYXJyYXkuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IEluY2x1ZGUgYGFmc2NyaXB0LmgnIHRvIGdldCB0aGUgc2NyaXB0CisJc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgorCShhdXRvZml0X21vZHVsZV9jbGFzc19waWNfaW5pdCk6IEluY2x1ZGUgYGFmc2NyaXB0LmgnIGZvcgorCWluaXRpYWxpemF0aW9uLgorCSogc3JjL2F1dG9maXQvYWZwaWMuaCAoQUZfU0NSSVBUX0NMQVNTRVNfQ09VTlQsCisJQUZfU0NSSVBUX0NMQVNTRVNfUkVDX0NPVU5UKTogUmVtb3ZlZC4gIFVzZSBgQUZfU0NSSVBUX01BWCcgaW5zdGVhZC4KKworCSogc3JjL2F1dG9maXQvcnVsZXMubWsgKEFVVE9GX0RSVl9IKTogVXBkYXRlZC4KKworMjAxMy0wOC0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1vdmUgZGVjbGFyYXRpb24gb2Ygd3JpdGluZyBzeXN0ZW1zIGludG8gc2VwYXJhdGUgZmlsZS4KKworCVRoaXMgaGFzIHRoZSBiZW5lZml0IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUgdGhlIGRhdGEgYXQKKwlkaWZmZXJlbnQgcGxhY2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZndydHN5cy5oOiBOZXcgZmlsZS4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9Xcml0aW5nU3lzdGVtKTogSW5jbHVkZSBgYWZ3cnRzeXMuaCcgdG8KKwlkZWZpbmUgdGhlIGVudW1lcmF0aW9uIHZhbHVlcy4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYzogSW5jbHVkZSBgYWZ3cnRzeXMuaCcgdG8gZ2V0IHRoZSB3cml0aW5nCisJc3lzdGVtIHNwZWNpZmljIGhlYWRlciBmaWxlcy4KKwlJbmNsdWRlIGBhZnBpYy5oJy4KKwkoYWZfd3JpdGluZ19zeXN0ZW1fY2xhc3Nlcyk6IEluY2x1ZGUgYGFmd3J0c3lzLmgnIHRvIGZpbGwgdGhpcworCWFycmF5LgorCisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5jOiBJbmNsdWRlIGBhZndydHN5cy5oJyB0byBnZXQgdGhlIHdyaXRpbmcKKwlzeXN0ZW0gc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgorCShhdXRvZml0X21vZHVsZV9jbGFzc19waWNfaW5pdCk6IEluY2x1ZGUgYGFmd3J0c3lzLmgnIGZvcgorCWluaXRpYWxpemF0aW9uLgorCSogc3JjL2F1dG9maXQvYWZwaWMuaCAoQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19DT1VOVCwKKwlBRl9XUklUSU5HX1NZU1RFTV9DTEFTU0VTX1JFQ19DT1VOVCk6IFJlbW92ZWQuICBVc2UKKwlgQUZfV1JJVElOR19TWVNURU1fTUFYJyBpbnN0ZWFkLgorCisyMDEzLTA4LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IGNvbXBpbGF0aW9uIHdpdGggZysrLgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKGVycm9yX2NhbGxiYWNrLCByZWFkX2RhdGFfZnJvbV9GVF9zdHJlYW0pOiBVc2UKKwljYXN0LgorCShMb2FkX1NCaXRfUG5nKTogUGFjaWZ5IGNvbXBpbGVyLgorCisyMDEzLTA4LTAyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorICAgICAgICAgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBgbWFrZSBtdWx0aScuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX0xPQ0FMX0FSUkFZLAorCUZUX0xPQ0FMX0FSUkFZX0RFRik6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMsCisJYWZfc2NyaXB0X2NsYXNzZXMpOiBVc2UgRlRfTE9DQUxfQVJSQVlfREVGLgorCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaDogRGVjbGFyZSBgYWZfd3JpdGluZ19zeXN0ZW1fY2xhc3NlcycgYW5kCisJYGFmX3NjcmlwdF9jbGFzc2VzJy4KKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmM6IEluY2x1ZGUgYGFmcGljLmgnLgorCisyMDEzLTA4LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBbm90aGVyIHJvdW5kIG9mIGNwcGNoZWNrIG5pdHBpY2tzLgorCisJVGhlIGNhbGwgd2FzIChmcm9tIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIEZyZWVUeXBlIHRyZWUpOgorCisJICBjcHBjaGVjayAtLWZvcmNlIFwKKwkgICAgICAgICAgIC0tZW5hYmxlPWFsbCBcCisJICAgICAgICAgICAtSSAvdXNyL2luY2x1ZGUgXAorCSAgICAgICAgICAgLUkgL3Vzci9sb2NhbC9pbmNsdWRlIFwKKwkgICAgICAgICAgIC1JIC91c3IvbGliL2djYy9pNTg2LXN1c2UtbGludXgvNC43L2luY2x1ZGUgXAorCSAgICAgICAgICAgLUkgaW5jbHVkZSBcCisJICAgICAgICAgICAtSSBpbmNsdWRlL2ZyZWV0eXBlIFwKKwkgICAgICAgICAgIC1JIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnIFwKKwkgICAgICAgICAgIC1JIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwgXAorCSAgICAgICAgICAgLURGVDJfQlVJTERfTElCUkFSWSBcCisJICAgICAgICAgICAuICY+IGNwcGNoZWNrLmxvZworCisJdXNpbmcgY3BwY2hlY2sgZ2l0IGNvbW1pdCBmN2U5M2Y5OS4KKworCU5vdGUgdGhhdCBjcHBjaGVjayBzdGlsbCBjYW4ndCBoYW5kbGUgYCNpbmNsdWRlIEZPTycgKHdpdGggYEZPTycgYQorCW1hY3JvKS4KKworCSovKiBJbXByb3ZlIHZhcmlhYmxlIHNjb3Blcy4KKwkqLyogUmVtb3ZlIHJlZHVuZGFudCBpbml0aWFsaXphdGlvbnMgd2hpY2ggZ2V0IG92ZXJ3cml0dGVuLgorCisJKiBzcmMvZ3h2YWxpZC8qOiBDb21tZW50IG91dCByZWR1bmRhbnQgY29kZSBvciBndWFyZCBpdCB3aXRoCisJRlRfREVCVUdfTEVWRUxfVFJBQ0UuCisKKzIwMTMtMDctMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbnRyb2R1Y2UgYHdyaXRpbmcgc3lzdGVtcycuCisKKwlUaGlzIHBhdGNoIGFkZHMgYSBuZXcgdG9wIGxldmVsIHRvIHRoZSBhdXRvLWhpbnRlcidzIHNjcmlwdCBjbGFzcworCWhpZXJhcmNoeS4gIEl0IGRlZmluZXMgYHdyaXRpbmcgc3lzdGVtcycgd2hpY2ggY2FuIGNvbnRhaW4gbXVsdGlwbGUKKwlzY3JpcHRzLgorCisJRm9yIGV4YW1wbGUsIHRoZSBgbGF0aW4nIHdyaXRpbmcgc3lzdGVtIChpbiBmaWxlIGBhZmxhdGluLmMnKSBpcworCWFibGUgdG8gc3VwcG9ydCBzY3JpcHRzIGxpa2UgTGF0aW4sIEN5cmlsbGljLCBBcm1lbmlhbiwgZXRjLiwgd2hpY2gKKwljYW4gYmUgaGFuZGxlZCBzaW1pbGFybHkuCisKKwlTY3JpcHRzIGFyZSBub3cgbmFtZWQgdXNpbmcgZm91ci1sZXR0ZXIgT3BlblR5cGUgdGFncy4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9TY3JpcHRDbGFzc1JlYyk6IE1vdmUgcmVsZXZhbnQgbWVtYmVycworCXRvLi4uCisJKEFGX1dyaXRpbmdTeXN0ZW1DbGFzc1JlYyk6IFRoaXMgbmV3IHN0cnVjdHVyZS4gIEl0IGhvbGRzIHBvaW50ZXJzCisJdG8gZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBzaGFyZWQgYW1vbmcgcmVsYXRlZCBzY3JpcHRzLgorCShBRl9Xcml0aW5nU3lzdGVtKTogTmV3IGVudW1lcmF0aW9uLgorCShBRl9TY3JpcHQpOiBSZXZpc2VkIHZhbHVlcyB1c2luZyBmb3VyLWxldHRlciB0YWdzLgorCShBRl9ERUZJTkVfV1JJVElOR19TWVNURU1fQ0xBU1MpOiBOZXcgbWFjcm8uCisJKEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzKTogTmV3IGdsb2JhbCwKKwljb25zdGFudCBhcnJheS4KKwkoYWZfc2NyaXB0X2NsYXNzZXMpOiBVcGRhdGVkLgorCShhZl9mYWNlX2dsb2JhbHNfZnJlZSk6IFVwZGF0ZWQuCisJUmVtb3ZlIGFzc2VydGlvbi4KKwkoYWZfZmFjZV9nbG9iYWxzX2dldF9tZXRyaWNzKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaCAoQUZfU0NSSVBUX0ZBTExCQUNLKQorCVshQUZfQ09ORklHX09QVElPTl9DSktdOiBIYW5kbGUgdGhpcyBjYXNlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nLCBhZl9sb2FkZXJfbG9hZF9nbHlwaCk6CisJVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZwaWMuYyAoYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX2luaXQpOiBVcGRhdGVkOworCWluaXRpYWxpemUgc3RydWN0dXJlcyBmb3IgYm90aCB3cml0aW5nIHN5c3RlbXMgYW5kIHNjcmlwdHMuCisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5oOiBVcGRhdGVkLgorCShBRl9XUklUSU5HX1NZU1RFTV9DTEFTU0VTX0dFVCk6IE5ldyBtYWNyby4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX3dyaXRpbmdfc3lzdGVtX2NsYXNzKTogTmV3IHdyaXRpbmcKKwlzeXN0ZW0uCisJKGFmX2Nqa191bmlyYW5nZXMpOiBSZW5hbWVkIHRvLi4uCisJKGFmX2hhbmlfdW5pcmFuZ2VzKTogVGhpcy4KKwkoYWZfY2prX3NjcmlwdF9jbGFzcyk6IFJlZHVjZWQgYW5kIHJlbmFtZWQgdG8uLi4KKwkoYWZfaGFuaV9zY3JpcHRfY2xhc3MpOiBUaGlzLgorCSogc3JjL2F1dG9maXQvYWZjamsuaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZkdW1teS5jIChhZl9kdW1teV93cml0aW5nX3N5c3RlbV9jbGFzcyk6IE5ldyB3cml0aW5nCisJc3lzdGVtLgorCShhZl9kdW1teV9zY3JpcHRfY2xhc3MpOiBSZWR1Y2VkIGFuZCByZW5hbWVkIHRvLi4uCisJKGFmX2RmbHRfc2NyaXB0X2NsYXNzKTogVGhpcy4KKwkqIHNyYy9hdXRvZml0L2FmZHVtbXkuaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZpbmRpYy5jIChhZl9pbmRpY193cml0aW5nX3N5c3RlbV9jbGFzcyk6IE5ldyB3cml0aW5nCisJc3lzdGVtLgorCShhZl9pbmRpY191bmlyYW5nZXMpOiBSZW5hbWVkIHRvLi4uCisJKGFmX2RldmFfdW5pcmFuZ2VzKTogVGhpcy4KKwkoYWZfaW5kaWNfc2NyaXB0X2NsYXNzKTogUmVkdWNlZCBhbmQgcmVuYW1lZCB0by4uLgorCShhZl9kZXZhX3NjcmlwdF9jbGFzcyk6IFRoaXMuCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5oOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3dyaXRpbmdfc3lzdGVtX2NsYXNzKTogTmV3IHdyaXRpbmcKKwlzeXN0ZW0uCisJKGFmX2xhdGluX3VuaXJhbmdlcyk6IFJlbmFtZWQgdG8uLi4KKwkoYWZfbGF0bl91bmlyYW5nZXMpOiBUaGlzLgorCShhZl9sYXRpbl9zY3JpcHRfY2xhc3MpOiBSZWR1Y2VkIGFuZCByZW5hbWVkIHRvLi4uCisJKGFmX2xhdG5fc2NyaXB0X2NsYXNzKTogVGhpcy4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX3dyaXRpbmdfc3lzdGVtX2NsYXNzKTogTmV3CisJd3JpdGluZyBzeXN0ZW0uCisJKGFmX2xhdGluMl91bmlyYW5nZXMpOiBSZW5hbWVkIHRvLi4uCisJKGFmX2x0bjJfdW5pcmFuZ2VzKTogVGhpcy4KKwlTeW5jaHJvbml6ZSByYW5nZXMgd2l0aCBgbGF0aW4nLgorCShhZl9sYXRpbjJfc2NyaXB0X2NsYXNzKTogUmVkdWNlZCBhbmQgcmVuYW1lZCB0by4uLgorCShhZl9sdG4yX3NjcmlwdF9jbGFzcyk6IFRoaXMuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5oOiBVcGRhdGVkLgorCisyMDEzLTA3LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gVmFyaWFibGUgcmVuYW1pbmcuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfU2NyaXB0TWV0cmljc1JlYyk6CisJcy9jbGF6ei9zY3JpcHRfY2xhc3MvLgorCVVwZGF0ZSBhbGwgdXNlcnMuCisKKzIwMTMtMDctMzAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlJZ25vcmUgbGlicG5nLWNvbmZpZyB1bmRlciBjcm9zcy1idWlsZGluZyBjb25maWd1cmF0aW9uLAorCWJlY2F1c2UgaXQgd2lsbCByZXR1cm4gdGhlIGZsYWdzIGZvciB0aGUgaG9zdGluZyBlbnZpcm9ubWVudC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogSWdub3JlIGxpYnBuZy1jb25maWcgd2hlbgorCWBjcm9zc19jb21waWxpbmcnID09IHllcy4KKworMjAxMy0wNy0zMCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGdvb2dsZS5jb20+CisKKwlQcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8gYnkgYSB0cmFuc3BhcmVudCBjb2xvci4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEpOgorCVJldHVybiAwIGltbWVkaWF0ZWx5LCB3aGVuIGFscGhhIGNoYW5uZWwgaXMgemVyby4KKworMjAxMy0wNy0yNSAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGdvb2dsZS5jb20+CisKKwlBZGQgRlRfRkFDRV9GTEFHX0NPTE9SIGFuZCBGVF9IQVNfQ09MT1IuCisKKwlBbHNvIGRpc2FtYmlndWF0ZSBHb29nbGUncyBjb2xvciBiaXRtYXAgdGFibGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0ZBQ0VfRkxBR19DT0xPUiwgRlRfSEFTX0NPTE9SKToKKwlOZXcgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfU2JpdFRhYmxlVHlwZSk6IEFkZAorCVRUX1NCSVRfVEFCTEVfVFlQRV9DQkxDLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBIYW5kbGUgRlRfRkFDRV9GTEFHX0NPTE9SLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3NiaXQsCisJdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzLCB0dF9mYWNlX2xvYWRfc2JpdF9pbWFnZSk6IEhhbmRsZQorCVRUX1NCSVRfVEFCTEVfVFlQRV9DQkxDLgorCisyMDEzLTA3LTI0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3NmbnRdIEZpeCBmb3IgYG1ha2UgbXVsdGknIHRhcmdldC4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChMb2FkX1NCaXRfUG5nKTogVXNlIEZUX0xPQ0FMX0RFRigpLgorCisyMDEzLTA3LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvSU5TVEFMTC5HTlU6IFVwZGF0ZWQuCisKKzIwMTMtMDctMjAgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJW3NmbnRdIEZpeCBgc2JpeCcgdGFibGUgdmVyc2lvbiBoYW5kbGluZy4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zYml0KSBbVFRfU0JJVF9UQUJMRV9UWVBFX1NCSVhdOgorCVVTSE9SVCB2ZXJzaW9uIG51bWJlcnMgYXJlIHRvIGJlIGNvbnNpZGVyZWQgYXMgYG1pbm9yJy4KKworMjAxMy0wNy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBzZWdtZW50IGNsYXNzaWZpY2F0aW9uIGZvciBibHVlIHpvbmVzLgorCisJVGhlIG9sZCBjb2RlIChlc3NlbnRpYWxseSB1bmNoYW5nZWQgc2luY2UgdGhlIHZlcnkgYmVnaW5uaW5nKQorCWluY29ycmVjdGx5IGhhbmRsZWQgdGhpcyBjb25maWd1cmF0aW9uCisKKwkgICAgICAgICAgICAgICB4IC1vLSB4CisJICAgICAgICAgICAgICAgIC8gICBcCisJICAgICAgICAgICAgICAgLyAgICAgXAorCSAgICAgICAgICAgICAgLyAgICAgICBcCisJICAgICAgICAgICAgIG8gICAgICAgICBvCisKKwlhcyBmbGF0IGFuZCB0aGlzCisKKwkgICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KKwkgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgLworCSAgICAgICAgICAgICB4fCAgICAgICAgICAgICAgeHwKKwkgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisJICAgICAgICAgICAgICBvLS0tLS0tLS0tLS0tLS0tbworCisJYXMgcm91bmQuICAoYG8nIGFuZCBgeCcgYXJlIG9uIGFuZCBvZmYgcG9pbnRzLCByZXNwZWN0aXZlbHkpLgorCisJVGhpcyBpcyBhIG1ham9yIGNoYW5nZSB3aGljaCBzaG91bGQgaW1wcm92ZSB0aGUgcmVuZGVyaW5nIHJlc3VsdHMKKwllbm9ybW91c2x5IGZvciBtYW55IFRydWVUeXBlIGZvbnRzLCBlc3BlY2lhbGx5IGluIHRoZSByYW5nZSBhcHByb3guCisJMjAtNDBwcGVtLCBmaXhpbmcgdGhlIGFwcGVhcmFuY2Ugb2YgbWFueSBvdmVyc2hvb3RzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IExvb2sgYXQgdGhlCisJZmlyc3QgYW5kIGxhc3QgcG9pbnRzIG9mIHRoZSBzZWdtZW50LCBub3QgdGhlIHBvaW50cyByaWdodCBiZWZvcmUKKwlhbmQgYWZ0ZXIuCisKKzIwMTMtMDctMTkgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJW3NmbnRdIGBzYml4JyBmaXgtdXBzLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBBcHBsZSdzIGBzYml4JyBjb2xvciBiaXRtYXBzCisJYXJlIHJlbmRlcmVkIHNjYWxlZCBhbmQgdGhlbiB0aGUgYGdseWYnIG91dGxpbmUgcmVuZGVyZWQgb24gdG9wLiAgV2UKKwlkb24ndCBzdXBwb3J0IHRoYXQgeWV0LCBzbyBqdXN0IGlnbm9yZSB0aGUgYGdseWYnIG91dGxpbmUgYW5kCisJYWR2ZXJ0aXNlIGl0IGFzIGEgYml0bWFwLW9ubHkgZm9udC4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcykKKwlbVFRfU0JJVF9UQUJMRV9UWVBFX1NCSVhdOiBSZXR1cm4gbWV0cmljcyBpbiAyNi42IHVuaXRzLgorCSh0dF9mYWNlX2xvYWRfc2JpeF9pbWFnZSk6IFR5cG8uCisKKzIwMTMtMDctMTggIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJW3NmbnRdIEFkZCBzdXBwb3J0IGZvciBBcHBsZSdzIGBzYml4JyBjb2xvciBiaXRtYXAgdGFibGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9TQml0X01ldHJpY3NSZWMpOiBXaWRlbgorCWZpZWxkcyB0byBGVF9TaG9ydCBhbmQgRlRfVVNob3J0LCByZXNwZWN0aXZlbHkuCisJKFRUX1NCaXRUYWJsZVR5cGUpOiBOZXcgZW51bWVyYXRpb24uCisJKFRUX0ZhY2VSZWMpOiBBZGQgYHNiaXRfdGFibGVfdHlwZScgZmllbGQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggKFRUQUdfc2JpeCk6IE5ldyBtYWNyby4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChMb2FkX1NCaXRfUG5nKTogUGFzcyBhIG1vcmUgZ2VuZXJpYworCUZUX0dseXBoU2xvdCBhcmd1bWVudCBpbnN0ZWFkIEZUX0JpdG1hcC4KKwlBZGQgZmxhZyB0byBjb250cm9sIG1hcCBhbmQgbWV0cmljcyBoYW5kbGluZy4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYzogSW5jbHVkZSBgdHRtdHguaCcuCisJKHR0X2ZhY2VfbG9hZF9lYmxjKTogUmVuYW1lZCB0by4uLgorCSh0dF9mYWNlX2xvYWRfc2JpdCk6IFRoaXMuCisJSGFuZGxpYyBgc2JpeCcgYml0bWFwcy4KKwkodHRfZmFjZV9mcmVlX2VibGMpOiBSZW5hbWVkIHRvLi4uCisJKHR0X2ZhY2VfbG9hZF9zYml0KTogVGhpcy4KKwlVcGRhdGVkLgorCSh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpOiBIYW5kbGUgYHNiaXgnIGJpdG1hcHMuCisJKHR0X2ZhY2VfbG9hZF9zYml4X2ltYWdlKTogTmV3IGZ1bmN0aW9uLgorCSh0dF9zYml0X2RlY29kZXJfYWxsb2NfYml0bWFwLCB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSwKKwl0dF9zYml0X2RlY29kZXJfbG9hZF9ieXRlX2FsaWduZWQsIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkLAorCXR0X3NiaXRfZGVjb2Rlcl9sb2FkX2NvbXBvdW5kLCB0dF9zYml0X2RlY29kZXJfbG9hZF9wbmcsCisJdHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UsIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcCk6IERvbid0IHBhc3MKKwlhbmQgaGFuZGxlIGxvYWQgZmxhZ3MuCisJKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcCkgWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkddOiBCZXR0ZXIKKwloYW5kbGUgZm9ybWF0cyAxNy0xOS4KKwlNb3ZlIGNvbG9yIHRvIGdyYXlzY2FsZSBjb252ZXJzaW9uIHRvLi4uCisJKHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogSGVyZS4KKwlIYW5kbGUgYHNiaXgnIGJpdG1hcHMuCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uaDogVXBkYXRlZC4KKwkqIHNyYy9zZm50L3R0c2JpdC5oOiBVcGRhdGVkLgorCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogVXBkYXRlZC4KKworMjAxMy0wNy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIElnbm9yZSBpbnZhbGlkIG1hZ2ljIG51bWJlciBpbiBgaGVhZCcgb3IgYGJoZWQnLgorCisJT3RoZXIgZm9udCBlbmdpbmVzIHNlZW0gdG8gaWdub3JlIGl0IGFsc28uICBQcm9ibGVtIHJlcG9ydGVkIGJ5CisJSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKGNoZWNrX3RhYmxlX2Rpcik6IERvbid0IGFib3J0IGJ1dCB3YXJuIG9ubHkgaWYKKwl3ZSBoYXZlIGFuIGludmFsaWQgbWFnaWMgbnVtYmVyLgorCisyMDEzLTA3LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc21vb3RoXSBGaXggc2VnZmF1bHQgY2F1c2VkIGJ5IHByZXZpb3VzIGNvbW1pdC4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfc2V0X2NlbGwpOiBBbHdheXMgY29tcHV0ZQorCWByYXMuaW52YWxpZCcuCisKKzIwMTMtMDctMTYgIERhdmlkIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwlbc21vb3RoXSBJbXByb3ZlIHBlcmZvcm1hbmNlLgorCisJUHJvdmlkZSBhIHdvcmstYXJvdW5kIGZvciBhbiBBUk0tc3BlY2lmaWMgcGVyZm9ybWFuY2UgYnVnIGluIEdDQy4KKwlUaGlzIHNwZWVkcyB1cCB0aGUgcmFzdGVyaXplciBieSBtb3JlIHRoYW4gNSUuCisKKwlBbHNvIHNsaWdodGx5IG9wdGltaXplIGBzZXRfZ3JheV9jZWxsJyBhbmQgYGdyYXlfcmVjb3JkX2NlbGwnICh3aGljaAorCWFsc28gaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb24gb3RoZXIgcGxhdGZvcm1zIGJ5IGEgdGlueSBiaXQgKDwxJSkuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChGVF9ESVZfTU9EKTogTmV3IG1hY3JvLgorCVVzZSBpdCB3aGVyZSBhcHByb3ByaWF0ZS4KKworCShncmF5X3JlY29yZF9jZWxsLCBncmF5X3NldF9jZWxsLCBncmF5X21vdmVfdG8sCisJZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKTogU3RyZWFtbGluZSBjb25kaXRpb24gaGFuZGxpbmcuCisKKzIwMTMtMDctMTYgIERhdmlkIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwlbdHJ1ZXR5cGVdIEFkZCBhc3NlbWJsZXIgY29kZSBmb3IgVFRfTXVsRml4MTQgYW5kIFRUX0RvdEZpeDE0LgorCisJVGhpcyBwYXRjaCBwcm92aWRlcyBzbGlnaHRseSBvcHRpbWl6ZWQgdmVyc2lvbnMgZm9yIEFSTSwgeDg2LCBhbmQKKwl4ODZfNjQgQ1BVcyBpZiBidWlsdCB3aXRoIEdDQy4KKworCUFsc28gcmVtb3ZlIHNvbWUgZGVhZCBjb2RlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTXVsRml4MTRfYXJtLCBUVF9NdWxGaXgxNF9sb25nX2xvbmcsCisJVFRfRG90Rml4MTRfbG9uZ19sb25nKTogTmV3IGZ1bmN0aW9ucy4KKworMjAxMy0wNy0xNiAgRGF2aWQgVHVybmVyICA8ZGlnaXRAZ29vZ2xlLmNvbT4KKworCU9wdGltaXplIEZUX011bEZpeCBmb3IgeDg2XzY0IEdDQyBidWlsZHMuCisKKwlUaGlzIHBhdGNoIHByb3ZpZGVzIGFuIG9wdGltaXplZCBgRlRfTXVsRml4JyBpbXBsZW1lbnRhdGlvbiBmb3IKKwl4ODZfNjQgbWFjaGluZXMgd2hlbiBGcmVlVHlwZSBpcyBidWlsdCB3aXRoIEdDQywgb3IgY29tcGF0aWJsZQorCWNvbXBpbGVycyBsaWtlIENsYW5nLgorCisJRXhhbXBsZToKKwkgIGJpbi9mdGJlbmNoIC1wIC10IDUgLXMgMTQgLWYgMDAwOCBBcmlhbC50dGYKKworCUJlZm9yZToKKworCSAgTG9hZCAgICAgICAgICAgICAgICAgICAgICAgNC44NjMgdXMvb3AKKwkgIExvYWRfQWR2YW5jZXMgKE5vcm1hbCkgICAgIDQuODE2IHVzL29wCisJICBMb2FkX0FkdmFuY2VzIChGYXN0KSAgICAgICAwLjAyOCB1cy9vcAorCSAgUmVuZGVyICAgICAgICAgICAgICAgICAgICAgMi43NTMgdXMvb3AKKwkgIEdldF9HbHlwaCAgICAgICAgICAgICAgICAgIDAuNDYzIHVzL29wCisJICBHZXRfQ0JveCAgICAgICAgICAgICAgICAgICAwLjA3NyB1cy9vcAorCSAgR2V0X0NoYXJfSW5kZXggICAgICAgICAgICAgMC4wMjMgdXMvb3AKKwkgIEl0ZXJhdGUgQ01hcCAgICAgICAgICAgICAgMTMuODk4IHVzL29wCisJICBOZXdfRmFjZSAgICAgICAgICAgICAgICAgIDEyLjM2OCB1cy9vcAorCSAgRW1ib2xkZW4gICAgICAgICAgICAgICAgICAgMC4wMjggdXMvb3AKKwkgIEdldF9CQm94ICAgICAgICAgICAgICAgICAgIDAuMzAyIHVzL29wCisKKwlBZnRlcjoKKworCSAgTG9hZCAgICAgICAgICAgICAgICAgICAgICAgNC42MTcgdXMvb3AKKwkgIExvYWRfQWR2YW5jZXMgKE5vcm1hbCkgICAgIDQuNjQ1IHVzL29wCisJICBMb2FkX0FkdmFuY2VzIChGYXN0KSAgICAgICAwLjAyNyB1cy9vcAorCSAgUmVuZGVyICAgICAgICAgICAgICAgICAgICAgMi43ODkgdXMvb3AKKwkgIEdldF9HbHlwaCAgICAgICAgICAgICAgICAgIDAuNDYwIHVzL29wCisJICBHZXRfQ0JveCAgICAgICAgICAgICAgICAgICAwLjA3NyB1cy9vcAorCSAgR2V0X0NoYXJfSW5kZXggICAgICAgICAgICAgMC4wMjQgdXMvb3AKKwkgIEl0ZXJhdGUgQ01hcCAgICAgICAgICAgICAgMTMuNDAzIHVzL29wCisJICBOZXdfRmFjZSAgICAgICAgICAgICAgICAgIDEyLjI3OCB1cy9vcAorCSAgRW1ib2xkZW4gICAgICAgICAgICAgICAgICAgMC4wMjggdXMvb3AKKwkgIEdldF9CQm94ICAgICAgICAgICAgICAgICAgIDAuMzAxIHVzL29wCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCisJKEZUX011bEZpeF94ODZfNjQpOiBOZXcgZnVuY3Rpb24uCisKKzIwMTMtMDctMTYgIERhdmlkIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwlTcGVlZCB1cCBBUk12NyBzdXBwb3J0LgorCisJV2hlbiBidWlsZGluZyBmb3IgQVJNdjcgd2l0aCB0aHVtYjIgaW5zdHJ1Y3Rpb25zLCB0aGUgb3B0aW1pemVkCisJYEZUX011bEZpeF9hcm0nIGFzc2VtYmx5IHJvdXRpbmUgd2FzIG5vdCBiZWluZyB1c2VkLgorCisJVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBpbiB0aGUgYGZ0Y29uZmlnLmgnIGhlYWRlciwgbmFtZWx5OgorCisJLSBUaGUgYXNzZW1ibHkgcm91dGluZSB1c2VzIHRoZSBgc211bGwnIGluc3RydWN0aW9uIHdoaWNoIGlzIG5vdAorCSAgYXZhaWxhYmxlIHdoZW4gZ2VuZXJhdGluZyBUaHVtYi0xIG1hY2hpbmUgY29kZS4gIEl0IGlzIGF2YWlsYWJsZQorCSAgaW4gVGh1bWItMiBtb2RlLCB0aG91Z2guCisKKwktIFRoZSBoZWFkZXIgd2FzIHdyaXR0ZW4gYSBsb25nIHRpbWUgYWdvIGJlZm9yZSBUaHVtYi0yIGJlY2FtZQorCSAgd2lkZWx5IHBvcHVsYXIgKGUuZy4gd2l0aCBBbmRyb2lkKS4gIFNvIGl0IHNpbXBseSBkb2Vzbid0IHVzZSB0aGUKKwkgIGFzc2VtYmx5IHJvdXRpbmUgaWYgdGhlIGBfX3RodW1iX18nIGJ1aWx0LWluIG1hY3JvIGlzIGRlZmluZWQuCisKKwktIFdoZW4gY29tcGlsaW5nIGluIFRodW1iLTIgbW9kZSwgdGhlIGNvbXBpbGVyIHdpbGwgZGVmaW5lIGJvdGgKKwkgIGBfX3RodW1iX18nIGFuZCBgX190aHVtYjJfXycuCisKKwlCeSBjaGVja2luZyBmb3IgYChfX3RodW1iMl9fIHx8ICFfX3RodW1iX18pJywgd2UgZW5zdXJlIHRoYXQgdGhlCisJYXNzZW1ibHkgcm91dGluZSBpcyBvbmx5IGF2b2lkZWQgd2hlbiBnZW5lcmF0aW5nIFRodW1iLTEgY29kZS4KKworCUdpdmVuIHRoYXQgdGhpcyBpcyBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgZnVuY3Rpb24sIHRoaXMgaW1wcm92ZXMKKwlgZnRiZW5jaCcgYXMgZm9sbG93cyBvbiBhIEdhbGF4eSBOZXh1czoKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSAodXMvb3ApICAgQWZ0ZXIgKHVzL29wKQorCisJICAtIGxvYWRpbmcgQXJpYWwudHRmIGdseXBocyBhdCAxNCBwcGVtIFsxXQorCisJICAgICAgTG9hZCAgICAgICAgICAgICAgICAgICAzNC4yODUgICAgICAgICAgMzMuMDk4CisKKwkgIC0gc2FtZSBvcGVyYXRpb24gd2l0aCB0aGUgbGlnaHQgYXV0by1oaW50ZXIgWzJdCisKKwkgICAgICBMb2FkICAgICAgICAgICAgICAgICAgIDMxLjMxNyAgICAgICAgICAyOS41OTAKKworCSAgLSBzYW1lIG9wZXJhdGlvbiB3aXRob3V0IGhpbnRpbmcgWzNdCisKKwkgICAgICBMb2FkICAgICAgICAgICAgICAgICAgICA2LjE0MyAgICAgICAgICAgNS4zNzYKKworCSAgLSBsb2FkaW5nIEFyaWFsLnR0ZiBhZHZhbmNlcyBhdCAxNCBwcGVtIFs0XQorCisJICAgICAgTG9hZF9BZHZhbmNlcyAobm9ybWFsKSAzNC4yMTYgICAgICAgICAgMzMuMDE2CisJICAgICAgTG9hZF9BZHZhbmNlcyAoZmFzdCkgICAgMC4xNzYgICAgICAgICAgIDAuMTc2CisKKwkgIFsxXSBmdGJlbmNoIC10IDUgLXAgLXMgMTQgLWIgYSAtZiAwMDA4IEFyaWFsLnR0ZgorCSAgWzJdIGZ0YmVuY2ggLXQgNSAtcCAtcyAxNCAtYiBhIC1yIDEgLWYgMDAyOCBBcmlhbC50dGYKKwkgIFszXSBmdGJlbmNoIC10IDUgLXAgLXMgMTQgLWIgYSAtZiAwMDBhIEFyaWFsLnR0ZgorCSAgWzRdIGZ0YmVuY2ggLXQgNSAtcCAtcyAxNCAtYiBiIC1mIDAwMDggQXJpYWwudHRmCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCisJKEZUX01VTEZJWF9BU1NFTUJMRVIpOiBGaXggaGFuZGxpbmcgZm9yIEFSTXY3LgorCisyMDEzLTA2LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9Mb2FkX0dseXBoKTogRml4IGJpdG1hcCB3aWR0aCBndWFyZC4KKworMjAxMy0wNi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWRkIGRhcmtlbmluZyBsaW1pdCB0byBgZGFya2VuaW5nLXBhcmFtZXRlcnMnLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wcm9wZXJ0eV9zZXQpOiBBZGQgY2hlY2suCisKKzIwMTMtMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEFkZCBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2Lmg6IERvY3VtZW50IGl0LgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wcm9wZXJ0eV9zZXQsIGNmZl9wcm9wZXJ0eV9nZXQpOiBIYW5kbGUKKwlgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5LgorCisJKiBzcmMvY2ZmL2NmMmZvbnQuaCAoQ0YyX0ZvbnRSZWMpOiBBZGQgYGRhcmtlblBhcmFtcycgYXJyYXkuCisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfY29tcHV0ZURhcmtlbmluZyk6IEFkZCBgZGFya2VuUGFyYW1zJworCWFyZ3VtZW50IGFuZCB1c2UgaXQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogQ29weQorCWBkYXJrZW5fcGFyYW1zJyB2YWx1ZXMuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oIChDRkZfRHJpdmVyUmVjKTogQWRkIGBkYXJrZW5fcGFyYW1zJyBhcnJheS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9kcml2ZXJfaW5pdCk6IFNldCBkZWZhdWx0IHZhbHVlcyBmb3IKKwlgZGFya2VuX3BhcmFtcycuCisKKzIwMTMtMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gQ29kZSBzaHVmZmxpbmcuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKHJlX3VybCk6IE1vdmUgcmVnZXhwLi4uCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weTogLi4uIHRvIHRoaXMgZmlsZS4KKworMjAxMy0wNi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2RvY21ha2VyXSBSZW1vdmUgdW51c2VkIGZ1bmN0aW9ucy4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkgKERvY01hcmt1cC5nZXRfc3RhcnQsCisJRG9jQmxvY2suZ2V0X21hcmt1cF9uYW1lKTogUmVtb3ZlZC4KKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKGh0bWxfcXVvdGUwLCBkdW1wX2h0bWxfY29kZSwKKwlIdG1sRm9ybWF0dGVyLm1ha2VfaHRtbF93b3Jkcyk6IFJlbW92ZWQuCisKKzIwMTMtMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChkbGwpOiBSZW1vdmUgdGFyZ2V0LgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBKw7ZyZyBHw7xubmV3aWcgPGpvZXJnLmd1ZW5uZXdpZ0Bnb29nbGVtYWlsLmNvbT4uCisKKzIwMTMtMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gUmVjb2duaXNlIFVSTHMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKHJlX3VybCk6IE5ldyByZWd1bGFyIGV4cHJlc3Npb24uCisJKG1ha2VfaHRtbF9wYXJhKTogVXNlIGl0LgorCisyMDEzLTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi41LjAuMSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNS0wLTEnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBVbmRlZmluZQorCUNGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUuCisJKiBkZXZlbC9mdG9wdGlvbi5oOiBEZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORS4KKworMjAxMy0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChpbnN0YWxsKTogRG9uJ3QgY3JlYXRlIGBjYWNoZScgZGlyZWN0b3J5LgorCisJRm91bmQgYnkgUGV0ZXIgQnJlaXRlbmxvaG5lciA8cGViQG1wcG11Lm1wZy5kZT4uCisKKzIwMTMtMDYtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjUuMCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTUtMCcuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi41LjAuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwKKwlidWlsZHMvd2luMzIvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMDgvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLCBidWlsZHMvd2luMzIvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLCBidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjQuMTIvMi41LjAvLCBzLzI0MTIvMjUwLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUik6IFNldCB0byA1LgorCShGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAwLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTY6MjoxMC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IFBhY2lmeSBjb21waWxlci4KKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTVNJUlAsIEluc19NSVJQKTogRGl0dG8uCisKKzIwMTMtMDYtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM5MjY5LgorCisJKiBzcmMvYmFzZS9mdGdsb2Fkci5jIChGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cyk6IEZyZWUgbWVtb3J5IGluCisJY2FzZSBvZiByZWFjb2xsb2NhdGlvbiBmYWlsdXJlcy4KKworMjAxMy0wNi0xOCAgQW5kcmV3IENodXJjaCAgPGFjaHVyY2grc2F2YW5uYWhAYWNodXJjaC5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzOTI2Ni4KKworCUlmIG1lbW9yeSBhbGxvY2F0aW9ucyBmYWlsIGF0IGNlcnRhaW4gcG9pbnRzIHdoaWxlIG9wZW5pbmcgYSBmb250LAorCUZyZWVUeXBlIGNhbiBlaXRoZXIgY3Jhc2ggZHVlIHRvIGEgTlVMTCBkZXJlZmVyZW5jZSBvciBsZWFrIG1lbW9yeS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuYyAoRlRfRmFjZV9JbnRlcm5hbFJlYywKKwlGVF9MaWJyYXJ5UmVjKTogTWFrZSBgcmVmY291bnQnIGEgc2lnbmVkIGludGVnZXIuICBJZiwgZm9yIGV4YW1wbGUsCisJRlRfT3Blbl9GYWNlKCkgZmFpbHMgaW4gYSBtZW1vcnkgYWxsb2NhdGlvbiBiZWZvcmUgdGhlIGZhY2UncworCXJlZmVyZW5jZSBjb3VudCBpcyBzZXQgdG8gMSwgYSBzdWJzZXF1ZW50IGBGVF9Eb25lX0xpYnJhcnknIGNhbGwKKwl3b3VsZCBvdGhlcndpc2UgbG9vcCBvdmVyIGBGVF9Eb25lX0ZhY2UnIDJeMzIgdGltZXMgYmVmb3JlIGZyZWVpbmcKKwl0aGUgZmFjZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKG9wZW5fZmFjZSk6IEluaXRpYWxpemUgYHN0cmVhbScgYW5kIGZyaWVuZHMKKwllYXJsaWVyLgorCShGVF9PcGVuX0ZhY2UpIDxGYWlsPjogQmVoYXZlIGNvcnJlY3RseSBpZiBgbm9kZScgaXMgTlVMTC4KKwkoRlRfRGVzdHJveV9Nb2R1bGUpIDxGYWlsPjogQ2hlY2sgdGhhdCBgcmVuZGVyZXJfY2xhenonIGlzIHZhbGlkLgorCisyMDEzLTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIE9uZSBmaW5hbCBwcmFnbWEgdG8gc2lsZW5jZSA2NC1iaXQgTVNWQy4KKworMjAxMy0wNi0wNiAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWRkIGNvZGUgdG8gQWRvYmUncyBlbmdpbmUgdG8gaGFuZGxlIHBwZW0gPiAyMDAwLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9zbG90X2xvYWQpOiBJZiB3ZSBnZXQKKwlGVF9FcnJfR2x5cGhfVG9vX0JpZywgcmV0cnkgdW5oaW50ZWQgYW5kIHNjYWxlIHVwIGxhdGVyIG9uLgorCisyMDEzLTA2LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBbm90aGVyIHRyeSBvbiBwcmFnbWFzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaDogTW92ZSBwcmFnbWFzIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmg6IC4uLiB0aGlzIGZpbGUgc2luY2UgaXQgZ2V0cworCWluY2x1ZGVkIGJ5IGFsbCBzb3VyY2UgZmlsZXMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oOiBSZW1vdmUgcHJhZ21hIHdoaWNoIGhhcyBubworCWVmZmVjdC4KKworMjAxMy0wNi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaDogRGlzYWJsZSBNU1ZDIHdhcm5pbmcgQzQxMjcuCisKKwlUaGlzIHBhcnRpYWxseSB1bmRvZXMgY29tbWl0IDNmNmUwZTBjLgorCisyMDEzLTA2LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNb3JlIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMuCisKKwkqLyo6IFVzZSBjYXN0IHRvIGBGVF9Cb29sJyAob3IgYEJvb2wnKSB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAxMy0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXByb3ZlIGhhbmRsaW5nIG9mIGJyb2tlbiBzYml0IGFkdmFuY2Ugd2lkdGhzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKTogVXNlIHRoZSBnbHlwaCdzIChzY2FsZWQpCisJYGxpbmVhckhvcmlBZHZhbmNlJyBpZiB0aGUgc2JpdCdzIGBob3JpQWR2YW5jZScgdmFsdWUgaXMgemVyby4KKworCUNmLiBmb250IGBGaXhlZHN5cyBFeGNlbHNpb3InIHYzLjAxIChGU0VYMzAwLnR0ZiksIGdseXBoIEEsIDE2cHBlbS4KKworMjAxMy0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEltcHJvdmUgZW1iZWRkZWQgYml0bWFwIHRyYWNpbmcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZXF1ZXN0X1NpemUpOiBNb3ZlIHRyYWNlIG1lc3NhZ2UgcmVnYXJkaW5nCisJYml0bWFwIHN0cmlrZSBtYXRjaCB0by4uLgorCShGVF9NYXRjaF9TaXplKTogVGhpcyBmdW5jdGlvbi4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX21ldHJpY3MsCisJdHRfc2JpdF9kZWNvZGVyX2xvYWRfYnl0ZV9hbGlnbmVkLCB0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZCwKKwl0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZCwgdHRfc2JpdF9kZWNvZGVyX2xvYWRfcG5nLAorCXR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKTogRGVjb3JhdGUgd2l0aCB0cmFjaW5nIG1lc3NhZ2VzLgorCisyMDEzLTA2LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzOTE2MC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19TRFBWVEwpOiBTZXQgcHJvamVjdGlvbiB2ZWN0b3IgdG9vCisJZm9yIHRoZSBkZWdlbmVyYXRlIGNhc2UuCisKKzIwMTMtMDYtMDkgIERhdmlkIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTWFuYWdlcl9SZXNldCk6IEFkZCBtaXNzaW5nIGNhY2hlIGZsdXNoLgorCisJVGhpcyBjb2RlLCBwcmVzZW50IHNpbmNlIGVpZ2h0KCEpIHllYXJzIGluIHRoZSB1bnVzZWQgYENBQ0hFJworCWJyYW5jaCwgaGFzIGJlZW4gZm9yZ290dGVuIHRvIGFwcGx5IHRvIHRoZSBtYXN0ZXIgYnJhbmNoLiAgSXQncworCXJlYWxseSBhbWF6aW5nIHRoYXQgbm9vbmUgaGFzIGV2ZXIgY29tcGxhaW5lZCBzaW5jZQorCWBGVENfTWFuYWdlcl9SZXNldCcgaXMgcHJldHR5IHVzZWxlc3Mgd2l0aG91dCBmbHVzaGluZyB0aGUgY2FjaGUuCisKKzIwMTMtMDYtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBhbmQgaW1wcm92ZSBwcmFnbWFzIGZvciBNU1ZDIGNvbXBpbGVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaDogUmVtb3ZlIHByYWdtYXMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oOiBVc2UgcHVzaCBhbmQgcG9wIGZvciBwcmFnbWFzLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg6IEhhbmRsZSB3YXJuaW5nIEM0MzI0LgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IFVzZSBwdXNoIGFuZCBwb3AgZm9yIHByYWdtYXMuCisJKiBzcmMvZ3ppcC9mdGd6aXAuYzogSGFuZGxlIHdhcm5pbmcgQzQyNDQuCisKKzIwMTMtMDYtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIHMvY2YyX2dldEdseXBoV2lkdGgvY2YyX2dldEdseXBoT3V0bGluZS8uCisKKwkqIHNyYy9jZmYvY2YyZm9udC5jLCBzcmMvY2ZmL2NmMmZvbnQuaCwgc3JjL2NmZi9jZjJmdC5jOiBEbyBpdC4KKworMjAxMy0wNi0wNiAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCVtjZmZdIEFkZCBlYXJseSBleGl0IGZlYXR1cmUgZm9yIHdpZHRoLW9ubHkgY2FsbHMuCisKKwlUaGlzIGlzIGZvciBgRlRfR2V0X0FkdmFuY2UnLgorCisJVGhlcmUgYXJlIDcgcGxhY2VzIHdoZXJlIHRoZSBzcGVjIHNheXMgdGhlIHdpZHRoIGNhbiBiZSBkZWZpbmVkOgorCisJICBoc3RlbS9oc3RlbWhtCisJICB2c3RlbS92c3RlbWhtCisJICBjbnRybWFzay9oaW50bWFzaworCSAgaG1vdmV0bworCSAgdm1vdmV0bworCSAgcm1vdmV0bworCSAgZW5kY2hhcgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9kb1N0ZW1zKTogRXhpdCBlYXJseSBmb3Igd2lkdGgtb25seSBjYWxscywKKwlpZiBwb3NzaWJsZS4KKworCShjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZEhTVEVNPiwgPGNmMl9jbWRWU1RFTT4sCisJPGNmMl9jbWRWTU9WRVRPPiwgPGNmMl9jbWRFTkRDSEFSPiwgPGNmMl9jbWRISU5UTUFTSz4sCisJPGNmMl9jbWRSTU9WRVRPPiwgPGNmMl9jbWRITU9WRVRPPjogRXhpdCBlYXJseSBmb3Igd2lkdGgtb25seSBjYWxscy4KKworMjAxMy0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTmV4dCByb3VuZCBvZiBjb21waWxlciBmaXhlcy4KKworCSogYnVpbGRzL3dpbjMyL2Z0ZGVidWcuYywgYnVpbGRzL3dpbmNlL2Z0ZGVidWcuYyAoZnRfZGVidWdfaW5pdCk6CisJQWRkIHByb3BlciBjYXN0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9TRVJWSUNFX1VOQVZBSUxBQkxFKTogRml4CisJY2FzdC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaDogRGVjb3JhdGUgc3RyZWFtIGFuZCBmcmFtZQorCW1hY3JvcyB3aXRoIGBGVF9Mb25nJyBhbmQgYEZUX1VMb25nJyBhcyBhcHByb3ByaWF0ZS4KKworCSogc3JjL2Jhc2UvZnRyZm9yay5jIChyYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzLAorCXJhY2Nlc3NfZ3Vlc3NfZGFyd2luX25ld3Zmcyk6IFVzZSBjYXN0LgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3NldF9kZWZhdWx0X3NwYWNpbmcpOiBVc2UgY2FzdC4KKworCSogc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKEZUQ19NYW5hZ2VyX0NoZWNrKTogRml4IGNhc3QuCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuaCAoRlRDX01hbmFnZXJSZWMpOiBEaXR0by4KKworCSogc3JjL2NmZi9jZjJhcnJzdC5jIChjZjJfYXJyc3RhY2tfc2V0TnVtX0VsZW1lbnRzKTogVXNlIGNhc3QuCisJKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9mcmVlU2VhY0NvbXBvbmVudCk6IERpdHRvLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKHJlbW92ZV9zdWJzZXRfcHJlZml4LCByZW1vdmVfc3R5bGUpOiBEaXR0by4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VyX25ldyk6IFVzZSBjYXN0LgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9HbHlwaF9Mb2FkKTogVXNlIGNhc3QuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocmVhbGxvY2F0ZV90MV90YWJsZSk6IEZpeCBhcmd1bWVudCB0eXBlLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKGZ0X2JsYWNrX3Jlc2V0KTogVXNlIGNhc3QuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX1N0cmVhbV9GVGVsbCk6IFVzZSBjYXN0LgorCShBTExfUE9JTlRTKTogRml4IGNhc3QuCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wc19nZXRfZm9udF92YWx1ZSk6IEFkZCBjYXN0cy4KKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKFQxX0dldF9Qcml2YXRlX0RpY3QpOiBBZGQgY2FzdC4KKworMjAxMy0wNi0wNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCUZpeCBtb3JlIE1TVkMgV2luMzIgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBGaXggdHlwbyBpbiBNUyBwcmFnbWEuCisKKwkqIHNyYy9iYXNlL2JkZmxpYi5jIChfYmRmX3NldF9kZWZhdWx0X3NwYWNpbmcsIF9iZGZfYWRkX3Byb3BlcnR5KToKKwlgbGluZW5vJyBpcyBvbmx5IHVzZWQgaW4gZGVidWcgbW9kZS4KKworCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfYnVpbGRlcl9tb3ZlVG8pOiBgcGFyYW1zJyBpcyBvbmx5IHVzZWQgaW4KKwlkZWJ1ZyBtb2RlLgorCisyMDEzLTA2LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaDogRGVjb3JhdGUgbWVtb3J5IGFsbG9jYXRpb24KKwltYWNyb3Mgd2l0aCBgRlRfTG9uZycgd2hlcmUgYXBwcm9wcmlhdGUuCisJUmVtb3ZlIGR1cGxpY2F0ZSBvZiBGVF9NRU1fUVJFTkVXX0FSUkFZIGRlZmluaXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKGZ0X2dyYXlfZm9yX3ByZW11bHRpcGxpZWRfc3JnYl9iZ3JhKTogVXNlCisJY2FzdC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEFkZCB3YXJuaW5nIGRpc2FibGluZyBwcmFnbWEgZm9yIE1TVkMgd2hpbGUKKwlpbmNsdWRpbmcgYG1kNS5jJy4KKworCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZEVTQz46IEFkZAorCWNhc3QuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZCk6IEZpeCBjYXN0cy4KKwkodHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0bWFwKTogQmVhdXRpZmljYXRpb24uCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogSW5pdGlhbGl6ZQorCXZhcmlhYmxlcyAoZWFybGllcikuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoKTogUGFjaWZ5IGNvbXBpbGVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogVXNlIHVuc2lnbmVkIGNvbnN0YW50cworCXdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX0dldF9NTV9WYXIpOiBEaXR0by4KKworMjAxMy0wNi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmMmZvbnQuYyAoY2YyX2dldEdseXBoV2lkdGgpOiBJbml0aWFsaXplIGBhZHZXaWR0aCcuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEluZ21hciBTaXR0bCA8aW5nbWFyLnNpdHRsQGVsZWt0cm9iaXQuY29tPi4KKworMjAxMy0wNi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQXBwbHkgZml4ZXMgZm9yIGNwcGNoZWNrIG5pdHBpY2tzLgorCisJICBodHRwOi8vY3BwY2hlY2suc291cmNlZm9yZ2UubmV0LworCisJVGhlIGNhbGwgd2FzIChmcm9tIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIEZyZWVUeXBlIHRyZWUpOgorCisJICBjcHBjaGVjayAtLWZvcmNlIFwKKwkgICAgICAgICAgIC0tZW5hYmxlPWFsbCBcCisJICAgICAgICAgICAtSSBpbmNsdWRlIFwKKwkgICAgICAgICAgIC1JIGluY2x1ZGUvZnJlZXR5cGUvIFwKKwkgICAgICAgICAgIC1JIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnLyBcCisJICAgICAgICAgICAtSSBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsLyBcCisJICAgICAgICAgICAuICY+IGNwcGNoZWNrLmxvZworCisJTm90ZSB0aGF0IHRoZSBjdXJyZW50IHZlcnNpb24gaGVhdmlseSBjaG9rZXMgb24gRnJlZVR5cGUsIGRlbGl2ZXJpbmcKKwltYW55IHdyb25nIHJlc3VsdHMuICBJIHdpbGwgcmVwb3J0IHRob3NlIGlzc3VlcyB0byB0aGUgY3BwY2hlY2sgdGVhbQorCXNvIHRoYXQgYSBuZXdlciB2ZXJzaW9uIGdpdmVzIGltcHJvdmVkIHJlc3VsdHMgaG9wZWZ1bGx5LgorCisJKi8qIEltcHJvdmUgdmFyaWFibGUgc2NvcGVzLgorCSovKiBSZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9ucyB3aGljaCBnZXQgb3ZlcndyaXR0ZW4uCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMsIGJ1aWxkcy9tYWMvZnRtYWMuYyAoY291bnRfZmFjZXNfc2NhbGFibGUpOgorCVJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKGZ0X21lbV90YWJsZV9kZXN0cm95KTogYHRhYmxlJyBjYW4ndCBiZSB6ZXJvLgorCisJKiBzcmMvZ3h2YWxpZC9neHZrZXJuLmMgKGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfZW50cnlfdmFsaWRhdGUpOgorCVJlbW92ZSBmdW5jdGlvbmxlc3MgY29kZS4KKworCSogc3JjL3Rvb2xzL2Z0cmFuZG9tLmMgKG1haW4pOiBGaXggbWVtb3J5IGxlYWsuCisKKzIwMTMtMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCisJVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSBvbGQgRnJlZVR5cGUgQ0ZGIGVuZ2luZSBnZXRzIGNvbXBpbGVkIGludG8KKwlGcmVlVHlwZS4gIEl0IGlzIG5vdyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX3Byb3BlcnR5X3NldCksIHNyYy9jZmYvY2ZmZ2xvYWQuYworCShDRkZfT3BlcmF0b3IsIGNmZl9hcmd1bWVudF9jb3VudHMsIGNmZl9idWlsZGVyX2FkZF9wb2ludCwKKwljZmZfb3BlcmF0b3Jfc2VhYywgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MsIGNmZl9zbG90X2xvYWQpLAorCXNyYy9jZmYvY2ZmZ2xvYWQuaCwgc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9kcml2ZXJfaW5pdCk6IFVzZQorCUNGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgdG8gZ3VhcmQgdGhlIGFmZmVjdGVkIGNvZGUuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFBORyBsaWJyYXJ5IGhhbmRsaW5nLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBEb24ndCB1c2UgTElCUE5HX0xJQlMgYnV0CisJTElCUE5HX0xERkxBR1MuCisKKzIwMTMtMDUtMjMgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBnb29nbGUuY29tPgorCisJQWRkIHN1cHBvcnQgZm9yIGNvbG9yIGVtYmVkZGVkIGJpdG1hcHMgKGVnLiBjb2xvciBlbW9qaSkuCisKKwlBIG5ldyBsb2FkIGZsYWcsIEZUX0xPQURfQ09MT1IsIG1ha2VzIEZyZWVUeXBlIGxvYWQgY29sb3IKKwllbWJlZGRlZC1iaXRtYXBzLCBmb2xsb3dpbmcgdGhpcyBkcmFmdCBzcGVjaWZpY2F0aW9uCisKKwkgIGh0dHBzOi8vY29sb3ItZW1vamkuZ29vZ2xlY29kZS5jb20vZ2l0L3NwZWNpZmljYXRpb24vdjEuaHRtbAorCisJd2hpY2ggZGVmaW5lcyB0d28gbmV3IFNGTlQgdGFibGVzLCBgQ0JEVCcgYW5kIGBDQkxDJyAobmFtZWQgYW5kCisJbW9kZWxlZCBhZnRlciBgRUJEVCcgYW5kIGBFQkxDJywgcmVzcGVjdGl2ZWx5KS4gIFRoZSBjb2xvciBiaXRtYXBzCisJYXJlIHN0b3JlZCBpbiB0aGUgbmV3IEZUX1BJWEVMX01PREVfQkdSQSBmb3JtYXQgdG8gcmVwcmVzZW50IEJHUkEKKwlwcmUtbXVsdGlwbGllZCBzUkdCIGltYWdlcy4gIElmIFBORyBzdXBwb3J0IGlzIGF2YWlsYWJsZSwgUE5HIGNvbG9yCisJaW1hZ2VzIGFzIGRlZmluZWQgaW4gdGhlIHNhbWUgcHJvcG9zZWQgc3BlY2lmaWNhdGlvbiBhcmUgc3VwcG9ydGVkCisJYWxzby4KKworCU5vdGUgdGhhdCBjb2xvciBiaXRtYXBzIGFyZSBjb252ZXJ0ZWQgdG8gZ3JheXNjYWxlIGlmIGNsaWVudCBkaWRuJ3QKKwlhc2sgZm9yIGNvbG9yLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBTZWFyY2ggZm9yIGxpYnBuZy4KKwlBZGQgYC0td2l0aG91dC1wbmcnIG9wdGlvbi4KKworCSogZGV2ZWwvZnRvcHRpb24uaCwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9DT0xPUik6IE5ldyBsb2FkIGZsYWcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9QaXhlbF9Nb2RlKTogQWRkCisJYEZUX1BJWEVMX01PREVfQkdSQScuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggKFRUQUdfQ0JEVCwgVFRBR19DQkxDKTogTmV3IHRhZ3MuCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9FbWJvbGRlbik6IFVwZGF0ZWQuCisJKGZ0X2dyYXlfZm9yX3ByZW11bHRpcGxpZWRfc3JnYl9iZ3JhKTogTmV3IGZ1bmN0aW9uLgorCShGVF9CaXRtYXBfQ29udmVydCk6IEhhbmRsZSBGVF9QSVhFTF9NT0RFX0JHUkEuCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYywgc3JjL3NmbnQvcG5nc2hpbS5oOiBOZXcgZmlsZXMuCisKKwkqIHNyYy9zZm50L3NmbnQuYzogSW5jbHVkZSBgcG5nc2hpbS5jJy4KKworCSogc3JjL3NmbnQvdHRzYml0LmM6IEluY2x1ZGUgRlRfQklUTUFQX0ggYW5kIGBwbmdzaGltLmgnCisJKHR0X2ZhY2VfbG9hZF9lYmxjKTogTG9hZCBgQ0JMQycuCisJKHR0X3NiaXRfZGVjb2Rlcl9pbml0KTogTG9hZCBgQ0JEVCcuCisJKHR0X3NiaXRfZGVjb2Rlcl9hbGxvY19iaXRtYXApOiBQYXNzIGxvYWQgZmxhZ3MgdG8gc2VsZWN0IGJldHdlZW4KKwljb2xvciBhbmQgZ3JheXNjYWxlIGJpdG1hcHMuCisJU2V0IGBudW1fZ3JheXMnLiAgVGhpcyBpcyB1c2VkIGJ5IGBmdHZpZXcnIHRvIGNob29zZSB0aGUgYmxlbmRpbmcKKwlhbGdvcml0aG0uCisJKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZCwKKwl0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZCwgdHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQsCisJdHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UpOiBQYXNzIGxvYWQgZmxhZy4KKwlzL3dyaXRlL3B3cml0ZS8uCisJRG9uJ3QgY2FsbCBgdHRfc2JpdF9kZWNvZGVyX2FsbG9jX2JpdG1hcCcuCisJVXBkYXRlZC4KKwkodHRfc2JpdF9kZWNvZGVyX2xvYWRfcG5nKSBbRlRfQ09ORklHX09QVElPTl9VU0VfUE5HXTogTmV3IGZ1bmN0aW9uLgorCSh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRtYXApOiBQYXNzIGxvYWQgZmxhZy4KKwlIYW5kbGUgbmV3IGdseXBoIGZvcm1hdHMgMTcsIDE4LCBhbmQgMTkuCisJQ2FsbCBgdHRfc2JpdF9kZWNvZGVyX2FsbG9jX2JpdG1hcCcuCisJRmxhdHRlbiBjb2xvciBiaXRtYXBzIGlmIG5lY2Vzc2FyeS4KKwkodHRfZmFjZV9sb2FkX3NiaXRfaW1hZ2UpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogQWRkIGBwbmdzaGltLmMnLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTMtMDUtMjQgIEd1ZW50ZXIgIDxpbmZvQGdrbncubmV0PgorCisJQXBwbHkgU2F2YW5uYWggcGF0Y2ggIzgwNTUuCisKKwlNYWtlIGBhcGluYW1lcycgY3JlYXRlIGFuIGltcG9ydCBmaWxlIGZvciBOZXRXYXJlLgorCisJKiBzcmMvdG9vbHMvYXBpbmFtZXMuYyAoUFJPR1JBTV9WRVJTSU9OKTogU2V0IHRvIDAuMi4KKwkoT3V0cHV0Rm9ybWF0KTogQWRkIGBPVVRQVVRfTkVUV0FSRV9JTVAnLgorCShuYW1lc19kdW1wKTogSGFuZGxlIGl0LgorCSh1c2FnZSk6IFVwZGF0ZWQuCisJKG1haW4pOiBIYW5kbGUgbmV3IGNvbW1hbmQgbGluZSBmbGFnIGAtd04nLgorCisyMDEzLTA1LTIzICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCUNvbXBpbGF0aW9uIGZpeC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucykKKwlbIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElOR106IE1ha2UgaXQgd29yay4KKworMjAxMy0wNS0yMiAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIEZvcm1hdHRpbmcgYW5kIGFuIGFkZGl0aW9uYWwgc3VicGl4ZWwgdHdlYWsuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0hQSVgpOiBGb3JtYXR0aW5nIGZpeC4KKwkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5jIChTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMpOgorCVJldmVydCBwcmV2aW91cyBtb2RpZmljYXRpb24gZm9yIFZlcmRhbmEgY2xvbmVzLgorCisyMDEzLTA1LTIyICBJbmZpbmFsaXR5ICA8aW5maW5hbGl0eUBpbmZpbmFsaXR5Lm5ldD4KKworCVt0cnVldHlwZV0gQWRqdXN0IHN1YnBpeGVsIHpwMiBtb3ZlcyBhbmQgdHdlYWsgcnVsZXMuCisKKwlUaGVzZSBtb2RpZmljYXRpb25zIGZpeCB0aGluIGRpYWdvbmFsIHN0ZW1zIGluIHNvbWUgbGVnYWN5IGZvbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRGlyZWN0X01vdmVfWCk6IFJlbW92ZSB1bnVzZWQgbWFjcm8uCisJKE1vdmVfWnAyX1BvaW50KTogRG9uJ3QgYWx3YXlzIGRpc2FibGUgeCBtb3ZlcyBmb3Igc3VicGl4ZWwgcmVuZGVyaW5nLgorCShJbnNfU0hQKTogRGlzYWJsZSB4IG1vdmVzIGhlcmUgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKwkoSW5zX1NIUElYKTogT25seSBkaXNhYmxlIHggbW92ZXMgaW4gY29tcGF0aWJpbGl0eSBtb2RlLgorCVNwbGl0IG91dCB6cDIgbW92ZSByZXZlcnNhbHMgYW5kIHJlb3JkZXIgY29uZGl0aW9uYWwgcmVzcGVjdGl2ZWx5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyAoU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzKTogRml4IG92ZXJzaWdodC4KKwlPbmx5IGFkanVzdCBWZXJkYW5hIGNsb25lcyBmb3IgMTcgcHBlbS4KKwkoU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMpOiBBZGQgQ291cmllciBOZXcuCisJKEFMV0FZU19TS0lQX0RFTFRBUF9SdWxlcyk6IEZvdW5kIGFkZGl0aW9uYWwgY2FzZXMgZm9yIEFyaWFsIGBzJy4KKworMjAxMy0wNS0yMCAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIFNpbXBsaWZ5IGFuZCBpbXByb3ZlIHN1YnBpeGVsIGZ1bmN0aW9uIGRldGVjdGlvbi4KKworCVNvbWUgc21hbGwgZW5oYW5jZW1lbnRzIGhhdmUgYWxsb3dlZCB0aGUgcmVtb3ZhbCBvZiBtYW55IG1hY3JvcyBhbmQKKwl0aGUgc2ltcGxpZmljYXRpb24gb2YgZXhpc3RpbmcgcnVsZXMgaW4gYHR0c3VicGl4LmMnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaCAoU1BIX1RXRUFLX0FMTE9XX1hfRE1PVkVYLAorCVNQSF9UV0VBS19BTExPV19YX01PVkVfWlAyLAorCVNQSF9UV0VBS19ERUxUQVBfU0tJUF9FWEFHR0VSQVRFRF9WQUxVRVMsCisJU1BIX1RXRUFLX1NLSVBfSU5MSU5FX0RFTFRBUywgU1BIX1RXRUFLX01JUlBfQ1ZUX1pFUk8pOiBSZW1vdmVkLgorCShTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTX0RFTFRBUCk6IE5ldyBydWxlIG1hY3JvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYzogVXBkYXRlZCBhZmZlY3RlZCBydWxlcy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERpcmVjdF9Nb3ZlX1gpOiBVcGRhdGVkLgorCShJTlNfRkRFRik6IEFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uIGRldGVjdGlvbi4KKwkoSU5TX0VOREYpOiBTZXQgcnVudGltZSBmbGFnLgorCShJbnNfQ0FMTCk6IFNraXAgdGhlIGNhbGwgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorCVJlbW92ZSBiYWQgY29kZS4KKwkoSW5zX0xPT1BDQUxMKTogU2tpcCB0aGUgY2FsbCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCisJUmVtb3ZlIGJhZCBjb2RlLgorCShNb3ZlX1pwMl9Qb2ludCk6IFVwZGF0ZWQuCisJKEluc19TSFBJWCk6IFVwZGF0ZWQuCisJU2tpcCB0aGUgbW92ZSB1bmRlciBzb21lIHNpdHVhdGlvbnMuCisJKEluc19NSUFQKTogSW1wcm92ZSBjb25kaXRpb25zLgorCShJbnNfTUlSUCk6IFVwZGF0ZWQuCisJKEluc19ERUxUQVApOiBTa2lwIG1vdmUgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorCVNpbXBsaWZ5IGNvbmRpdGlvbnMuCisJKFRUX1J1bklucyk6IFVwZGF0ZWQuCisJQWRkIGNvZGUgdG8gaGFuZGxlIG5ldyBmdW5jdGlvbiBkZXRlY3Rpb24uCisJVHJhY2UgbWVzc2FnZXMuCisKKzIwMTMtMDUtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVVwZGF0ZSBtb3JlIEZUX0Vycl9YWFggbWFjcm9zIHVzaW5nIEZUX0VSUiBhbmQgRlRfVEhST1c7CisKKwkqIGJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jLCBidWlsZHMvbWFjL2Z0bWFjLmMsCisJYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYywgYnVpbGRzL3Ztcy9mdHN5c3RlbS5jOiBEbyBpdC4KKworMjAxMy0wNS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBBZGQgYGludGVycHJldGVyLXZlcnNpb24nIHByb3BlcnR5LgorCisJVGhpcyBtYWtlcyB0aGUgb3B0aW9uIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBjb250cm9sbGFibGUKKwlhdCBydW50aW1lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaDogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX1RSVUVUWVBFX0RSSVZFUl9IKTogTmV3CisJbWFjcm8uCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jOiBJbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ILgorCSh0dF9wcm9wZXJ0eV9zZXQsIHR0X3Byb3BlcnR5X2dldCk6IEZpbGwgdGVtcGxhdGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX0RyaXZlclJlYyk6IEFkZCBgaW50ZXJwcmV0ZXJfdmVyc2lvbicKKwltZW1iZXIuCisJUmVtb3ZlIHVudXNlZCBgZXh0ZW5zaW9uX2NvbXBvbmVudCcgbWVtYmVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBJbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ILgorCSh0dF9nZXRfbWV0cmljcywgVFRfSGludF9HbHlwaCwgVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgsCisJY29tcHV0ZV9nbHlwaF9tZXRyaWNzLCB0dF9sb2FkZXJfaW5pdCk6IFVzZSBgaW50ZXJwcmV0ZXJfdmVyc2lvbicuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBJbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ILgorCShTVUJQSVhFTF9ISU5USU5HKTogTmV3IG1hY3JvIHRvIGNoZWNrIGBpbnRlcnByZXRlcl92ZXJzaW9uJyBmbGFnLgorCVVwZGF0ZSBhbGwgYWZmZWN0ZWQgZnVuY3Rpb25zIHRvIHVzZSBpdC4KKwlVc2UgVFRfSU5URVJQUkVURVJfVkVSU0lPTl9YWFggd2hlcmUgYXBwcm9wcmlhdGUuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYzogSW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSC4KKwkodHRfZHJpdmVyX2luaXQpOiBJbml0aWFsaXplIGBpbnRlcnByZXRlcl92ZXJzaW9uJy4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmM6IEluY2x1ZGUgRlRfVFJVRVRZUEVfRFJJVkVSX0guCisJVXNlIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fWFhYIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDEzLTA1LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEF2b2lkIGVtcHR5IHNvdXJjZSBmaWxlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyBbIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElOR106CisJUHJvdmlkZSBkdW1teSB0eXBlZGVmLgorCisyMDEzLTA1LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfZ2V0R2x5cGhXaWR0aCk6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorCisJRml4IHN1Z2dlc3RlZCBieSBWYWliaGF2IE5hZ2FybmFpayA8dm5hZ2FybmFpa0BnbWFpbC5jb20+LgorCisyMDEzLTA1LTEzICBCcmlhbiBOaXhvbiAgPGJuaXhvbkB5YWhvby5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMzODk3MC4KKworCSogc3JjL2Jhc2UvZnRkZWJ1Zy5jLCBidWlsZHMvd2luMzIvZnRkZWJ1Zy5jLAorCWJ1aWxkcy93aW5jZS9mdGRlYnVnLmMsIGJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMKKwkoZnRfZGVidWdfaW5pdCk6IERvbid0IHJlYWQgcGFzdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRlQyX0RFQlVHLgorCisyMDEzLTA1LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEFkZCBmcmFtZXdvcmsgZm9yIFRydWVUeXBlIHByb3BlcnRpZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0guCisJKHR0X3Byb3BlcnR5X3NldCwgdHRfcHJvcGVydHlfZ2V0KTogTmV3IGZ1bmN0aW9ucywgc3RpbGwgZW1wdHkuCisJRGVmaW5lIGB0dF9zZXJ2aWNlX3Byb3BlcnRpZXMnIHNlcnZpY2UuCisJVXBkYXRlIGB0dF9zZXJ2aWNlcycuCisKKwkqIHNyYy90cnVldHlwZS90dHBpYy5oOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ILgorCShUVF9TRVJWSUNFX1BST1BFUlRJRVNfR0VUKTogTmV3IG1hY3JvLgorCShUVE1vZHVsZVBJQyk6IEFkZCBgdHRfc2VydmljZV9wcm9wZXJ0aWVzJy4KKworMjAxMy0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzg5NjcuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXZGaXgpIFtGVF9MT05HNjRdOiBGaXggY2FzdC4KKworMjAxMy0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW50cm9kdWNlIHVuc2lnbmVkIDY0Yml0IHR5cGUgKGlmIGF2YWlsYWJsZSkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IERlZmluZSBGVF9VSU5UNjQgaWYgYXZhaWxhYmxlLgorCVtGVF9MT05HNjRdOiBQcm92aWRlIEZUX1VJbnQ2NC4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IFN5bmNocm9uaXplZC4KKworMjAxMy0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzg5NjguCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaDogQWRkIGBGVF9FWFBPUlQnIHRvCisJRlRfUHJvcGVydHlfe1NldCxHZXR9LgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEFkZCBgRlRfRVhQT1JUX0RFRicgdG8KKwlGVF9Qcm9wZXJ0eV97U2V0LEdldH0uCisKKzIwMTMtMDUtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBDbGVhbiB1cCBiaXRtYXAgY29kZS4KKworCSogc3JjL3NmbnQvdHRzYml0LmM6IERlbGV0ZWQuCisJKiBzcmMvc2ZudC90dHNiaXQwLmM6IFJlbmFtZWQgdG8gYHR0c2JpdC5jJy4KKwkqIHJ1bGVzLm1rIChTRk5UX0RSVl9IKTogVXBkYXRlZC4KKworMjAxMy0wNS0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qIFtGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFNdOiBSZW1vdmUgbWFjcm8gYW5kIGd1YXJkZWQgY29kZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCitMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQoraW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKK2Z1bGx5LgorCisKK0xvY2FsIFZhcmlhYmxlczoKK3ZlcnNpb24tY29udHJvbDogbmV2ZXIKK2NvZGluZzogdXRmLTgKK0VuZDoKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjAgYi9mcmVldHlwZS0yLjYvQ2hhbmdlTG9nLjIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYWU1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvQ2hhbmdlTG9nLjIwCkBAIC0wLDAgKzEsMjYxMyBAQAorMjAwMi0wMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBSRUFETUU6IEZpeCB0eXBvLgorCSogZG9jcy9DSEFOR0VTOiBNaW5vciBmaXhlcy4KKworCisJKiBWZXJzaW9uIDIuMC44IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyMDAyLTAyLTA4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRpbmcgZm9yIDIuMC44LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IFNldHRpbmcgYFBBVENIX0xFVkVMJyB0byA4IGFuZAorCXJlbW92aW5nIGBGVF9HZXRfTmV4dF9DaGFyJyBmcm9tIHRoZSBBUEkgKHRlbXBvcmFyaWx5KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oOiBBZGRpbmcgY29tbWVudHMgdG8gRlRfR2V0X05leHRfQ2hhcjsKKwlub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtaWdodCB0ZW1wb3JhcmlseSBiZSByZW1vdmVkIGZvciB0aGUgMi4wLjgKKwlyZWxlYXNlLgorCisyMDAyLTAyLTA3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfbG9hZF9mb250KTogUmVtb3ZlZCBpbW1hdHVyZSBzdXBwb3J0IG9mCisJdGhlIEFWRVJBR0VfV0lEVEggcHJvcGVydHkuCisKKzIwMDItMDItMDYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKFNGTlRfTG9hZF9GYWNlKTogU2luY2UgbWFueSBmb250cyBlbWJlZGRlZCBpbgorCVBERiBkb2N1bWVudHMgZG8gbm90IGluY2x1ZGUgJ2NtYXAnLCAncG9zdCcgYW5kICduYW1lJyB0YWJsZXMsIHRoZQorCVNGTlQgZmFjZSBsb2FkZXIgaGFzIGJlZW4gY2hhbmdlZCB0byBub3QgaW1tZWRpYXRlbHkgcmVwb3J0IGFuCisJZXJyb3IgaWYgdGhlc2UgYXJlIG5vdCBwcmVzZW50LgorCisJTm90ZSB0aGF0IHRoZSBzcGVjaWZpY2F0aW9uIF9yZXF1aXJlc18gdGhlc2UgdGFibGVzLCBidXQgQWRvYmUKKwlzZWVtcyB0byBpZ25vcmUgaXQgY29tcGxldGVseS4KKworCSogc3JjL3NmbnQvdHRjbWFwLmM6IFJlbW92aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX3JlYWRfVE9DKTogVXNlIEZUX1VJbnQuCisJKHBjZl9wYXJzZV9tZXRyaWMsIHBjZl9wYXJzZV9jb21wcmVzc2VkX21ldHJpYyk6IFJlbW92ZWQuICBDb2RlCisJaXMgbm93IGluIC4uLgorCShwY2ZfZ2V0X21ldHJpYyk6IEhlcmUuCisJKHBjZlNlZWtUb1R5cGUpOiBSZW5hbWVkIHRvIC4uLgorCShwY2Zfc2Vla190b190YWJsZV90eXBlKTogVGhpcy4KKwlVc2UgRlRfSW50LgorCShwY2ZIYXNUeXBlKTogUmVuYW1lZCB0byAuLi4KKwkocGNmX2hhc190YWJsZV90eXBlKTogVGhpcy4KKwlVc2UgRlRfSW50LgorCShmaW5kX3Byb3BlcnR5KTogUmVuYW1lZCB0byAuLi4KKwkocGNmX2ZpbmRfcHJvcGVydHkpOiBUaGlzLgorCVVzZSBGVF9JbnQuCisJKHBjZl9nZXRfYml0bWFwcywgcGNmX2dldF9lbmNvZGluZ3MpOiBIYW5kbGUgaW52YWxpZCBQQ0YgZm9udHMKKwliZXR0ZXIgKGRlbGF5aW5nIGZvcm1hdCBjaGVja3Mgb3V0IG9mIEZUX0FjY2Vzc19GcmFtZSAuLgorCUZUX0ZvcmdldF9GcmFtZSBibG9ja3MgdG8gYXZvaWQgbGVhdmluZyB0aGUgc3RyZWFtIGluIGFuIGluY29ycmVjdAorCXN0YXRlIHdoZW4gZW5jb3VudGVyaW5nIGFuIGludmFsaWQgUENGIGZvbnQpLgorCisJKiBzcmMvcGNmL3BjZmRyaXZlci5jIChQQ0ZfRG9uZV9GYWNlKTogUmVuYW1lZCB0byAuLi4KKwkoUENGX0ZhY2VfRG9uZSk6IFRoaXMuCisJKFBDRl9Jbml0X0ZhY2UpOiBSZW5hbWVkIHRvIC4uLgorCShQQ0ZfRmFjZV9Jbml0KTogVGhpcy4KKwkoUENGX0dldF9DaGFyX0luZGV4KTogUmVuYW1lZCB0byAuLi4KKwkoUENGX0NoYXJfR2V0X0luZGV4KTogVGhpcy4KKwkoUENGX0dldF9OZXh0X0NoYXIpOiBSZW5hbWVkIHRvIC4uLgorCShQQ0ZfQ2hhcl9HZXRfTmV4dCk6IFRoaXMuCisJKHBjZl9kcml2ZXJfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvcGNmL3BjZi5oIChQQ0ZfRG9uZV9GYWNlKTogUmVtb3ZlZC4KKworMjAwMi0wMi0wNiAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKEZUX0RvbmVfRmFjZSk6IEZpeGVkIHNtYWxsIG1lbW9yeSBsZWFrLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IE5vdyBoYW5kbGVzIHRoZSBgQVZFUkFHRV9XSURUSCcKKwlwcm9wZXJ0eSB0byByZXR1cm4gY29ycmVjdCBjaGFyYWN0ZXIgcGl4ZWwgKHdpZHRoL2hlaWdodCkgcGFpcnMgZm9yCisJZW1iZWRkZWQgYml0bWFwcy4KKworMjAwMi0wMi0wNCAgS2VpdGggUGFja2FyZCAgPGtlaXRocEBrZWl0aHAuY29tPgorCisJQWRkaW5nIHRoZSBmdW5jdGlvbiBgRlRfR2V0X05leHRfQ2hhcicsIGRvaW5nIHRoZSBvYnZpb3VzIHRoaW5nCisJdy5yLnQuIHRoZSBzZWxlY3RlZCBjaGFybWFwLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IEFkZCBwcm90b3R5cGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmg6IEFkZCBgRlREcml2ZXJfZ2V0TmV4dENoYXInCisJdHlwZWRlZi4KKwkoRlRfRHJpdmVyX0NsYXNzKTogVXNlIGl0LgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc25hbWVzLmg6IEFkZCBgUFNfTmV4dF9Vbmljb2RlX0Z1bmMnCisJdHlwZWRlZi4KKwkoUFNOYW1lc19JbnRlcmZhY2UpOiBVc2UgaXQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaDogQWRkIGBUVF9DaGFyTmV4dF9GdW5jJworCXR5cGVkZWYuCisJKFRUX0NNYXBUYWJsZSk6IFVzZSBpdC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9OZXh0X0NoYXIpOiBOZXcgZnVuY3Rpb24sIGltcGxlbWVudGluZworCWhpZ2gtbGV2ZWwgQVBJLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X25leHRfY2hhcik6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX2RyaXZlcl9jbGFzcyk6IEFkZCBpdC4KKwkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoQ2lkX0dldF9OZXh0X0NoYXIpOiBOZXcgZnVuY3Rpb24uCisJKHQxY2lkX2RyaXZlcl9jbGFzcyk6IEFkZCBpdC4KKwkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKFBDRl9HZXRfTmV4dF9DaGFyKTogTmV3IGZ1bmN0aW9uLgorCShwY2ZfZHJpdmVyX2NsYXNzKTogQWRkIGl0LgorCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyAoUFNfTmV4dF9Vbmljb2RlKTogTmV3IGZ1bmN0aW9uLgorCShwc25hbWVzX2ludGVyZmFjZSk6IEFkZCBpdC4KKwkqIHNyYy9zZm50L3R0Y21hcC5jIChjb2RlX3RvX25leHQwLCBjb2RlX3RvX25leHQyLCBjb2RlX3RvX25leHQ0LAorCWNvZGVfdG9fbmV4dDYsIGNvZGVfdG9fbmV4dF84XzEyLCBjb2RlX3RvX25leHRfMTApOiBOZXcgYXV4aWxpYXJ5CisJZnVuY3Rpb25zLgorCShUVF9DaGFyTWFwX0xvYWQpOiBVc2UgdGhlbS4KKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChHZXRfTmV4dF9DaGFyKTogTmV3IGZ1bmN0aW9uLgorCSh0dF9kcml2ZXJfY2xhc3MpOiBBZGQgaXQuCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAoR2V0X05leHRfQ2hhcik6IE5ldyBmdW5jdGlvbi4KKwkodDFfZHJpdmVyX2NsYXNzKTogQWRkIGl0LgorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfR2V0X05leHRfQ2hhcik6IE5ldyBmdW5jdGlvbi4KKwkod2luZm50X2RyaXZlcl9jbGFzcyk6IEFkZCBpdC4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9sb2FkX2ZvbnQpOiBGb3Igbm93LCByZXBvcnQgVW5pY29kZSBmb3IKKwlVbmljb2RlIGFuZCBMYXRpbiAxIGVuY29kaW5ncy4KKworMjAwMi0wMi0wMiAgS2VpdGggUGFja2FyZCAgPGtlaXRocEBrZWl0aHAuY29tPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IEFkZCBtaXNzaW5nIGBmaScuCisKKworCSogVmVyc2lvbiAyLjAuNyByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMjAwMi0wMi0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IEluY3JlYXNpbmcgRlJFRVRZUEVfUEFUQ0ggdG8gNworCWZvciB0aGUgbmV3IHJlbGVhc2UuCisKKzIwMDItMDEtMzEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogUkVBRE1FLCBSRUFETUUuVU5YLCBkb2NzL0NIQU5HRVM6IFVwZGF0aW5nIGRvY3VtZW50YXRpb24gZm9yIHRoZQorCTIuMC43IHJlbGVhc2UuCisKKzIwMDItMDEtMzAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogSU5TVEFMTDogTW92ZWQgdG8gLi4uCisJKiBkb2NzL0lOU1RBTEw6IEhlcmUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIGBpbnN0YWxsJyBzY3JpcHQgb24KKwlXaW5kb3dzLCB3aGVyZSB0aGUgZmlsZXN5c3RlbSBkb2Vzbid0IHByZXNlcnZlIGNhc2UuCisKKzIwMDItMDEtMjkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogY29uZmlndXJlOiBGaXhlZCB0aGUgc2NyaXB0LiAgSXQgcHJldmlvdXNseSBkaWRuJ3QgYWNjZXB0IG1vcmUKKwl0aGFuIG9uZSBhcmd1bWVudCBjb3JyZWN0bHkuICBGb3IgZXhhbXBsZSwgd2hlbiB0eXBpbmc6CisKKwkgIC4vY29uZmlndXJlIC0tZGlzYWJsZS1zaGFyZWQgLS1kaXNhYmxlLW5scworCisJdGhlIGAtLWRpc2FibGUtbmxzJyB3YXMgaW5jb3JyZWN0bHkgc2VudCB0byB0aGUgYG1ha2UnIHByb2dyYW0uCisKKzIwMDItMDEtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogUkVBRE1FLlVOWDogRml4IHR5cG8uCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rICh1bmluc3RhbGwpOiBGaXggbGlicmFyeSBuYW1lIGZvciBsaWJ0b29sLgorCisyMDAyLTAxLTI4ICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkgIDxGcmFuY2VzY28uWmFwcGEuTmFyZGVsbGlAZW5zLmZyPgorCisJKiBzcmMvcGNmL3BjZmRyaXZlci5jIChQQ0ZfRG9uZV9GYWNlKTogRml4IGluY29ycmVjdCBkZXN0cnVjdGlvbiBvZgorCXRoZSBmYWNlIG9iamVjdCAoZmFjZS0+dG9jLnRhYmxlcywgZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSwKKwlmYWNlLT5yb290LmF2YWlsYWJsZV9zaXplLCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nLAorCWZhY2UtPmNoYXJzZXRfcmVnaXN0cnkgYXJlIG5vdyBmcmVlZCkuICBUaGFua3MgdG8gTmllbHMgTW9zZWxleS4KKworMjAwMi0wMS0yOCAgUm9iZXJ0byBBbGFtZWRhICA8b2phbmNhbm9AZ2Vla21haWwuZGU+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZW5jb2RpbmcpOiBTZXQgYGxvYWRlci0+bnVtX2NoYXJzJy4KKworMjAwMi0wMS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX3N1YnJzLCBwYXJzZV9jaGFyc3RyaW5ncyk6IFVzZSBjb3B5CisJb2YgYGJhc2UnIHN0cmluZyBmb3IgZGVjcnlwdGluZyB0byBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBkYXRhLgorCUJhc2VkIG9uIGEgcGF0Y2ggYnkgSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLm9yZy5wbD4uCisKKzIwMDItMDEtMjcgIEdpdWxpYW5vIFBvY2hpbmkgIDxwb2NoaW5pQHNoaW55Lml0PgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfc2NhbmxpbmUpOiBGaXggYnVnIHdoaWNoIGNhdXNlZAorCWJhZCByZW5kZXJpbmcgb2YgdGhpbiBsaW5lcyAobGVzcyB0aGFuIG9uZSBwaXhlbCB0aGljaykuCisKKzIwMDItMDEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X25hbWVfaW5kZXgpOiBNYWtlIGxhc3QgcGF0Y2ggd29yaworCWFjdHVhbGx5LgorCisyMDAyLTAxLTI1ICBNYXJ0aW4gWmluc2VyICA8emluc2VyQGRlY3VzLmRlPgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfZG9uZSwgZnRjX25vZGVfZGVzdHJveSk6IEZpeAorCWNvbXBpbGF0aW9uIHdhcm5pbmdzLgorCSogc3JjL2Jhc2UvZGVzY3JpcC5tbXMgKE9CSlMpOiBBZGQgYGZ0bW0ub2JqJy4KKwkqIHNyYy9jYWNoZS9kZXNjcmlwLm1tcyAoZnRjYWNoZS5vYmopOiBEZXBlbmRlbmNpZXMgYWRkZWQuCisKKzIwMDItMDEtMjUgIFdBTkcgWWkgIDx3YW5neWlAZm91bmRlci5jb20uY24+CisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9uYW1lX2luZGV4KTogRml4IGRlYWxsb2NhdGlvbiBidWcuCisKKzIwMDItMDEtMjEgIEFudG9pbmUgTGVjYSAgPEFudG9pbmUtRnJlZXR5cGVATGVjYS1NYXJ0aS5vcmc+CisKKwkqIGRvY3MvUEFURU5UUzogVHlwbyBmaXhlZCAodGhhbmtzIHRvIERldGxlZiBgSGF3a2V5ZScgV8O8cmtuZXIpIGluCisJdGhlIFVSTCBmb3IgdGhlIG9ubGluZSByZXNvdXJjZS4KKworMjAwMi0wMS0xOCAgSWFuIEJyb3duICA8aWFuLmJyb3duQHByaW50c29mdC5kZT4KKworCSogYnVpbGRzL3dpbjMyL2Z0ZGVidWcuYzogTmV3IGZpbGUuCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFVwZGF0ZWQuCisKKzIwMDItMDEtMTggIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRzeXN0ZW0uYzogVXBkYXRlZCBmb3IgQW1pZ2FPUyAzLjkuCisJKiBidWlsZHMvYW1pZ2EvUkVBRE1FOiBVcGRhdGVkLgorCisyMDAyLTAxLTE4ICBJYW4gQnJvd24gIDxpYW4uYnJvd25AcHJpbnRzb2Z0LmRlPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFVwZGF0ZWQuCisKKzIwMDItMDEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmE0OiBUaGUgc2NyaXB0IHdhcyBzdGlsbCBidWdneS4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogTWFrZSBpdCByZWFsbHkgd29yayBmb3IgYW55IGluc3RhbGwKKwlwcmVmaXguCisKKzIwMDItMDEtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmE0OiBGaXggc29tZSBzZXJpb3VzIGJ1Z3MuCisKKzIwMDItMDEtMDkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBCdWlsZCB0b3AtbGV2ZWwgSmFtZmlsZS4KKworMjAwMi0wMS0wOSAgTWF4aW0gU2hlbWFuYXJldiAgPG1jc2VlbWFnZ0B5YWhvby5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9saW5lKTogU21hbGwgb3B0aW1pemF0aW9uIHRvCisJdGhlIHNtb290aCBhbnRpLWFsaWFzZWQgcmVuZGVyZXIgdGhhdCBkZWFscyB3aXRoIHZlcnRpY2FsIHNlZ21lbnRzLgorCVRoaXMgcmVzdWx0cyBpbiBhIDUtNyUgc3BlZWR1cCBpbiByZW5kZXJpbmcgc3BlZWQuCisKKzIwMDItMDEtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUFkZGVkIHNvbWUgd3JhcHBlciBzY3JpcHRzIHRvIG1ha2UgdGhlIGluc3RhbGxhdGlvbiBtb3JlCisJVW5peC1mcmllbmRseS4KKworCSogY29uZmlndXJlLCBpbnN0YWxsOiBOZXcgZmlsZXMuCisKKwkqIElOU1RBTEwsIFJFQURNRS5VTlg6IFVwZGF0ZWQgaW5zdGFsbGF0aW9uIGRvY3VtZW50YXRpb24gdG8gdXNlIHRoZQorCW5ldyAnY29uZmlndXJlJyBhbmQgJ2luc3RhbGwnIHNjcmlwdHMuCisKKzIwMDItMDEtMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMC42IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJKiBkb2NzL0JVR1MsIGRvY3MvQ0hBTkdFUzogVXBkYXRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgMi4wLjYgcmVsZWFzZS4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyLnB5OiBGaXhlZCBIVE1MIHF1b3RpbmcgaW4gc291cmNlcy4KKwkoaHRtbF9mb3JtYXQpOiBSZXBsYWNlZCB3aXRoIC4uLgorCShodG1sX3F1b3RlKTogTmV3IGZ1bmN0aW9uLgorCShodG1sX3F1b3RlMCk6IE5ldyBmdW5jdGlvbi4KKwkoRG9jQ29kZTo6ZHVtcF9odG1sKTogU21hbGwgaW1wcm92ZW1lbnQuCisJKERvY1BhcmFncmFwaDo6ZHVtcCwgRG9jQmxvY2s6Omh0bWwpOiBVc2UgaHRtbF9xdW90ZTAgYW5kIGh0bWxfcXVvdGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6IFNldHRpbmcgZGVmYXVsdCBvcHRpb25zIGZvcgorCWEgcmVsZWFzZSBidWlsZCAoZGVidWdnaW5nIG9mZiwgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgb2ZmKS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMsIHNyYy9iYXNlL2Z0b3V0bG4uYywgc3JjL2NhY2hlL2Z0Y2NtYXAuYywKKwlzcmMvY2ZmL2NmZmxvYWQuYywgc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jLAorCXNyYy9zZm50L3R0bG9hZC5jLCBzcmMvc2ZudC90dHNiaXQuYzogUmVtb3Zpbmcgc21hbGwgY29tcGlsZXIKKwl3YXJuaW5ncyAoaW4gcGVkYW50aWMgY29tcGlsYXRpb24gbW9kZXMpLgorCisyMDAyLTAxLTA1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfYWxpZ25fbGlua2VkX2VkZ2UpOiBNb2RpZmllZCBjb21wdXRhdGlvbgorCW9mIGF1dG8taGludGVkIHN0ZW0gd2lkdGhzOyB0aGlzIGF2b2lkcyBjb2xvciBmcmluZ2VzIGluCisJYENsZWFyVHlwZS1saWtlJyByZW5kZXJpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGhfSGVhZGVyLAorCVRUX0xvYWRfU2ltcGxlX0dseXBoLCBUVF9Mb2FkX0NvbXBvc2l0ZV9HbHlwaCwgbG9hZF90cnVldHlwZV9nbHlwaCk6CisJTW9kaWZpZWQgdGhlIFRydWVUeXBlIGxvYWRlciB0byBtYWtlIGl0IG1vcmUgcGFyYW5vaWQ7IHRoaXMgYXZvaWRzCisJbmFzdHkgYnVmZmVyIG92ZXJmbG93cyBpbiB0aGUgY2FzZSBvZiBpbnZhbGlkIGdseXBoIGRhdGEgKGFzCisJZW5jb3VudGVyZWQgaW4gdGhlIG91dHB1dCBvZiBzb21lIGJ1Z2d5IGZvbnQgY29udmVydGVycykuCisKKzIwMDItMDEtMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogUkVBRE1FLlVOWDogQWRkZWQgc3BlY2lhbCBSRUFETUUgZmlsZSBmb3IgVW5peCB1c2Vycy4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYyAoRlRfTmV3X1N0cmVhbSk6IEZpeGVkIHR5cG8uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBBZGRlZCAjaW5jbHVkZSBGVF9PVVRMSU5FX0ggdG8gZ2V0IHJpZAorCW9mIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfQ2hlY2spOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworMjAwMi0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IEFkZCBjYXN0IHRvIGF2b2lkIGNvbXBpbGVyCisJd2FybmluZy4KKworMjAwMi0wMS0wMyAgS2VpdGggUGFja2FyZCAgPGtlaXRocEBrZWl0aHAuY29tPgorCisJKiBidWlsZHMvdW5peC9mdHN5c3RlbS5jIChGVF9OZXdfU3RyZWFtKTogQWRkZWQgYSBmaXggdG8gZW5zdXJlIHRoYXQKKwlhbGwgRnJlZVR5cGUgaW5wdXQgc3RyZWFtcyBhcmUgY2xvc2VkIGluIGNoaWxkIHByb2Nlc3NlcyBvZiBhIGBmb3JrJworCW9uIFVuaXggc3lzdGVtcy4gIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIChwb3RlbnRpYWwpIGFjY2VzcworCWNvbnRyb2wgaXNzdWVzLgorCisyMDAyLTAxLTAzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogRml4ZWQgYSBidWcgdGhhdCBjcmFzaGVkIHRoZQorCWxpYnJhcnkgd2hlbiBkZWFsaW5nIHdpdGggY2VydGFpbiB3ZWlyZCBmb250cyBsaWtlIGBTdGFsaW5ncmFkJywgaW4KKwlgc2Fkbi5wZmInICh0aGlzIGZvbnQgaGFzIG5vIGZ1bGwgZm9udCBuYW1lIGVudHJ5KS4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCAoRlRfT3V0bGluZV9DaGVjayk6CisJTmV3IGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiBvdXRsaW5lIGRhdGEuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVXNlIGBGVF9PdXRsaW5lX0NoZWNrJyB0bworCWVuc3VyZSB0aGF0IGxvYWRlZCBnbHlwaHMgYXJlIHZhbGlkLiAgVGhpcyBhbGxvd3MgY2VydGFpbiBmb250cyBsaWtlCisJYHR0MTA5NW1fLnR0ZicgdG8gYmUgbG9hZGVkIGV2ZW4gdGhvdWdoIGl0IGFwcGVhcnMgdGhleSBjb250YWluCisJcmVhbGx5IGZ1bmt5IGdseXBocy4KKworCVRoZXJlIHN0aWxsIGlzIGEgYnVnIHRoZXJlLCB0aG91Z2guCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXggZXJyb3IgY29uZGl0aW9uLgorCisyMDAxLTEyLTMwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWQpOiBGaXggYWR2YW5jZSB3aWR0aAorCWNvbXB1dGF0aW9uIG9mIGF1dG8taGludGVkIGdseXBocy4gIFRoaXMgbm90aWNlYWJseSBpbXByb3ZlcyB0aGUKKwlzcGFjaW5nIG9mIGxldHRlcnMgaW4gS0RFIGFuZCBHbm9tZS4KKworMjAwMS0xMi0yNSAgQW50b2luZSBMZWNhICA8QW50b2luZS1GcmVldHlwZUBMZWNhLU1hcnRpLm9yZz4KKworCSogYnVpbGRzL2Rvcy9kZXRlY3QubWs6IENvcnJlY3RpbmcgdGhlIG9yZGVyIGZvciBCb3JsYW5kIGNvbXBpbGVyczoKKwkxNi1iaXQgYmNjIHdhcyBuZXZlciBzZWxlY3RlZCwgYWx3YXlzIG92ZXJyaWRkZW4gYnkgMzItYml0IGJjYzMyLgorCisyMDAxLTEyLTIyICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkgIDxGcmFuY2VzY28uWmFwcGEuTmFyZGVsbGlAZW5zLmZyPgorCisJKiBzcmMvcGZjL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IEhhbmRsZSBwcm9wZXJ0eSBgUE9JTlRfU0laRScKKwlhbmQgZml4IGluY29ycmVjdCBjb21wdXRhdGlvbiBvZiBgYXZhaWxhYmxlX3NpemVzJy4KKworMjAwMS0xMi0yMiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkKTogQXV0by1oaW50ZWQgZ2x5cGhzIGhhZCBhbgorCWluY29ycmVjdCBnbHlwaCBhZHZhbmNlIGluIHRoZSBjYXNlIG9mIG1vbm8td2lkdGggZm9udHMgKGxpa2UKKwlDb3VyaWVyLCBBbmRhbGUgTW9ubywgYW5kIG90aGVycykuCisKKzIwMDEtMTItMjIgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2EvKjogQWRhcHRhdGlvbnMgdG8gbGF0ZXN0IGNoYW5nZXMuCisJU3VwcG9ydCBhZGRlZCBmb3IgTW9ycGhPUy4KKworMjAwMS0xMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNocmVjLmMgKEZUX0NPTVBPTkVOVCk6IFJlZGVmaW5lIHRvIGB0cmFjZV9wc2hyZWMnLgorCShwc19tYXNrX3RhYmxlX21lcmdlLCBwc19oaW50c19vcGVuLCBwc19oaW50c19zdGVtLAorCXBzX2hpbnRzX3Qxc3RlbTMsIHBzX2hpbnRzX3QybWFzaywgcHNfaGludHNfdDJjb3VudGVyKTogRml4CisJRlRfRVJST1IgbWVzc2FnZXMuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAoRlRfQ09NUE9ORU5UKTogRGVmaW5lIGFzCisJYHRyYWNlX3BzaGFsZ28xJy4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChGVF9DT01QT05FTlQpOiBEZWZpbmUgYXMKKwlgdHJhY2VfcHNoYWxnbzInLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggKEZUX1RyYWNlKTogVXBkYXRlZC4KKworCSogZG9jcy9tb2R1bGVzLnR4dDogTmV3IGZpbGUuCisKKzIwMDEtMTItMjEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaHJlYy5jIChwc19oaW50c190Mm1hc2ssIHBzX2hpbnRzX3QyY291bnRlcik6CisJSWdub3JlIGludmFsaWQgYGhpbnRtYXNrJyBhbmQgYGNudHJtYXNrJyBvcGVyYXRvcnMgKGluc3RlYWQgb2YKKwlyZXR1cm5pbmcgYW4gZXJyb3IpLiAgR2x5cGggMjAyOCBvZiB0aGUgQ0ZGIGZvbnQgYE1TdW5nLUxpZ2h0LUFjcm8nCisJY291bGRuJ3QgYmUgcmVuZGVyZWQgb3RoZXJ3aXNlIChpdCBzZWVtcyBpdHMgY2hhcnN0cmluZyBpcyBidWdneSwKKwl0aG91Z2ggdGhpcyByZXF1aXJlcyBtb3JlIGFuYWx5c2lzKS4KKwkoRlRfQ09NUE9ORU5UKTogRGVmaW5lLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKENGRl9QYXJzZV9DaGFyU3RyaW5ncyksIHNyYy9wc2F1eC90MWRlY29kZS5jCisJKFQxX0RlY29kZXJfUGFyc2VfQ2hhcnN0cmluZ3MpLCBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAoKiksIEZpeGVkIGEKKwlidWcgd2hlcmUgdGhlIFggYW5kIFkgYXhpcyB3aGVyZSBpbnZlcnRlZCBpbiB0aGUgcG9zdHNjcmlwdCBoaW50ZXIuCisJVGhpcyBjYXVzZWQgcHJvYmxlbSB3aGVuIGRpc3BsYXlpbmcgb24gbm9uLXNxdWFyZSBzdXJmYWNlcy4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmM6IHMvdmVydGljYWwvZGltZW5zaW9uLy4KKworCSogc3JjL3BzaGludGVyL3BzaGdsb2IuYyAocHNoX2dsb2JhbHNfbmV3KTogUmVwbGFjZWQgYSBmbG9hdGluZworCXBvaW50IGNvbnN0YW50IHdpdGggYSBmaXhlZC1mbG9hdCBlcXVpdmFsZW50LiAgRm9yIHNvbWUgcmVhc29ucyBub3QKKwlhbGwgY29tcGlsZXJzIGFyZSBjYXBhYmxlIG9mIGRpcmVjdGx5IGNvbXB1dGluZyBhIGZsb2F0aW5nIHBvaW50ZXIKKwljb25zdGFudCBjYXN0ZWQgdG8gRlRfRml4ZWQsIGFuZCB3aWxsIGxpbmsgYSBtYXRoIGxpYnJhcnkgaW5zdGVhZC4KKworMjAwMS0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfZGVzdHJveSwgZnRjX2NhY2hlX2xvb2t1cCk6IEZpeAorCXRyYWNpbmcgc3RyaW5ncy4KKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKGZ0Y19jbWFwX2ZhbWlseV9pbml0KTogRGl0dG8uCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoZnRjX2ZhbWlseV90YWJsZV9hbGxvYywKKwlmdGNfZmFtaWx5X3RhYmxlX2ZyZWUsIEZUQ19NYW5hZ2VyX0NoZWNrKTogRGl0dG8uCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3NiaXRfbm9kZV9sb2FkKTogRGl0dG8uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Eb25lX0xpYnJhcnkpOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworMjAwMS0xMi0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkZWQgUG9zdFNjcmlwdCBoaW50ZXIgc3VwcG9ydCB0byB0aGUgQ0ZGIGFuZCBDSUQgZHJpdmVycy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oIChDRkZfRm9udCk6IE5ldyBtZW1iZXIKKwlgcHNoaW50ZXInLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKENGRl9HZXRfU3RhbmRhcmRfRW5jb2RpbmcpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogVXBkYXRlZC4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX0luaXRfQnVpbGRlcik6IFJlbmFtZWQgdG8gLi4uCisJKENGRl9CdWlsZGVyX0luaXQpOiBUaGlzLgorCUFkZGVkIG5ldyBhcmd1bWVudCBgaGludGluZycuCisJKENGRl9Eb25lX0J1aWxkZXIpOiBSZW5hbWVkIHRvIC4uLgorCShDRkZfQnVpbGRlcl9Eb25lKTogVGhpcy4KKwkoQ0ZGX0luaXRfRGVjb2Rlcik6IEFkZGVkIG5ldyBhcmd1bWVudCBgaGludGluZycuCisJKENGRl9QYXJzZV9DaGFyU3RyaW5ncyk6IEltcGxlbWVudCB2c3RlbSBzdXBwb3J0LgorCShDRkZfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisJQWRkIGhpbnRpbmcgc3VwcG9ydC4KKwkoY2ZmX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSk6IFVzZSBDRkZfR2V0X1N0YW5kYXJkX0VuY29kaW5nKCkuCisJKGNmZl9hcmd1bWVudF9jb3VudHMpOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZnbG9hZC5oOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZvYmpzLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ILgorCShDRkZfU2l6ZV9HZXRfR2xvYmFsc19GdW5jcywgQ0ZGX1NpemVfRG9uZSwgQ0ZGX1NpemVfSW5pdCwKKwlDRkZfU2l6ZV9SZXNldCwgQ0ZGX0dseXBoU2xvdF9Eb25lLCBDRkZfR0x5cGhTbG90X0luaXQpOiBOZXcKKwlmdW5jdGlvbnMuCisJKENGRl9Jbml0X0ZhY2UpOiBSZW5hbWVkIHRvIC4uLgorCShDRkZfRmFjZV9Jbml0KTogVGhpcy4KKwlBZGQgaGludGVyIHN1cHBvcnQuCisJKENGRl9Eb25lX0ZhY2UpOiBSZW5hbWVkIHRvIC4uLgorCShDRkZfRmFjZV9Eb25lKTogVGhpcy4KKwkoQ0ZGX0luaXRfRHJpdmVyKTogUmVuYW1lZCB0byAuLi4KKwkoQ0ZGX0RyaXZlcl9Jbml0KTogVGhpcy4KKwkoQ0ZGX0RvbmVfRHJpdmVyKTogUmVuYW1lZCB0byAuLi4KKwkoQ0ZGX0RyaXZlcl9Eb25lKTogVGhpcy4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKENJRF9GYWNlUmVjKTogTmV3IG1lbWJlcgorCWBwc2hpbnRlcicuCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKENJRF9Mb2FkX0dseXBoKTogQWRkIGhpbnRlciBzdXBwb3J0LgorCSogc3JjL2NpZC9jaWRvYmpzLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ILgorCShDSURfR2x5cGhTbG90X0RvbmUsIENJRF9HbHlwaFNsb3RfSW5pdCwgQ0lEX1NpemVfR2V0X0dsb2JhbHNfRnVuY3MsCisJQ0lEX1NpemVfRG9uZSwgQ0lEX1NpemVfSW5pdCwgQ0lEX1NpemVfUmVzZXQpOiBOZXcgZnVuY3Rpb25zLgorCShDSURfRG9uZV9GYWNlKTogUmVuYW1lZCB0byAuLi4KKwkoQ0lEX0ZhY2VfRG9uZSk6IFRoaXMuCisJKENJRF9Jbml0X0ZhY2UpOiBSZW5hbWVkIHRvIC4uLgorCShDSURfRmFjZV9Jbml0KTogVGhpcy4KKwlBZGQgaGludGluZyBzdXBwb3J0LgorCShDSURfSW5pdF9Ecml2ZXIpOiBSZW5hbWVkIHRvIC4uLgorCShDSURfRHJpdmVyX0luaXQpOiBUaGlzLgorCShDSURfRG9uZV9Ecml2ZXIpOiBSZW5hbWVkIHRvIC4uLgorCShDSURfRHJpdmVyX0RvbmUpOiBUaGlzLgorCSogc3JjL2NpZC9jaWRvYmpzLmg6IFVwZGF0ZWQuCisJKiBzcmMvY2lkcml2ZXIuYzogVXBkYXRlZC4KKworCSogc3JjL3BzaGludGVyL3BzaHJlYy5jICh0Ml9oaW50X3N0ZW1zKTogRml4ZWQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Eb25lX0xpYnJhcnkpOiBGaXhlZCBhIHN0dXBpZCBidWcgdGhhdAorCWNyYXNoZWQgdGhlIGxpYnJhcnkgb24gZXhpdC4KKworCSogc3JjL3R5cGUxL3QxZ2xvYWQuYyAoVDFfTG9hZF9HbHlwaCk6IEVuYWJsZSBmb250IG1hdHJpeAorCXRyYW5zZm9ybWF0aW9uIG9mIGhpbnRlZCBnbHlwaHMuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfcmVhZF9zdWJycyk6IEZpeCBlcnJvciBjb25kaXRpb24uCisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChDSURfRmFjZV9Eb25lKTogRml4ZWQgYSBtZW1vcnkgbGVhazsgdGhlIHN1YnJzCisJcm91dGluZXMgd2VyZSBuZXZlciByZWxlYXNlZCB3aGVuIENJRCBmYWNlcyB3ZXJlIGRlc3Ryb3llZC4KKworCSogc3JjL2NmZi9jZmZsb2FkLmgsIHNyYy9jZmYvY2ZmbG9hZC5jLCBzcmMvY2ZmL2NmZmdsb2FkLmM6IFVwZGF0ZWQKKwl0byBtb3ZlIHRoZSBkZWZpbml0aW9uIG9mIGVuY29kaW5nIHRhYmxlcyBiYWNrIHdpdGhpbiBgY2ZmbG9hZC5jJworCWluc3RlYWQgb2YgbWFraW5nIHRoZW0gcGFydCBvZiBhIHNoYXJlZCBoZWFkZXIgKGNhdXNpbmcgcHJvYmxlbXMgaW4KKwlgbXVsdGknIGJ1aWxkcykuICBUaGlzIHJldmVydHMgY2hhbmdlIDIwMDEtMDgtMDguCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZCBmb3IgMi4wLjYgcmVsZWFzZS4KKwkqIGRvY3MvVE9ETzogQWRkZWQgYHN0ZW0zIGFuZCBjb3VudGVyIGhpbnRzIHN1cHBvcnQnIHRvIHRoZSBUT0RPCisJbGlzdCBmb3IgdGhlIFBvc3RzY3JpcHQgaGludGVyLgorCSogZG9jcy9CVUdTOiBDbG9zZWQgdGhlIEFVVE9ISU5ULU5PLVNCSVRTIGJ1Zy4KKworMjAwMS0xMi0xOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2FjaGUuaDogQWRkZWQgY29tbWVudHMgdG8gaW5kaWNhdGUgdGhhdAorCXNvbWUgb2YgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucworCXRoYXQgbmVlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGNhY2hlIHR5cGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjdXJfdG9fb3JnLCBvcmdfdG9fY3VyKTogRml4ZWQgYSBuYXN0eSBidWcKKwl0aGF0IHByZXZlbnRlZCBjb21wb3NpdGVzIGZyb20gbG9hZGluZyBjb3JyZWN0bHksIGR1ZSB0byBtaXNzaW5nCisJcGFyZW50aGVzZXMgYXJvdW5kIG1hY3JvIHBhcmFtZXRlcnMuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChTRk5UX0xvYWRfRmFjZSk6IE1ha2UgdGhlIGBwb3N0JyBhbmQgYG5hbWUnCisJdGFibGVzIG9wdGlvbmFsIHRvIGxvYWQgUENMIGZvbnRzIHByb3Blcmx5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKSwgc3JjL2Jhc2UvZnRvYmpzLmMKKwkoRlRfTG9hZF9HbHlwaCksIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9TQklUU19PTkxZKToKKwlgRml4ZWQnIHRoZSBidWcgdGhhdCBwcmV2ZW50ZWQgZW1iZWRkZWQgYml0bWFwcyB0byBiZSBsb2FkZWQgd2hlbgorCXRoZSBhdXRvLWhpbnRlciBpcyB1c2VkLiAgVGhpcyBhY3R1YWxseSBpcyBhIGhhY2sgYnV0IHdpbGwgYmUgZW5vdWdoCisJdW50aWwgdGhlIGludGVybmFsIHJlLWRlc2lnbiBzY2hlZHVsZWQgZm9yIEZyZWVUeXBlIDIuMS4KKworCSogc3JjL3Jhc3Rlci9mdHJlbmQxLmMgKGZ0X3Jhc3RlcjFfcmVuZGVyKTogRml4ZWQgYSBuYXN0eSBvdXRsaW5lCisJc2hpZnRpbmcgYnVnIGluIHRoZSBtb25vY2hyb21lIHJlbmRlcmVyLgorCisJKiBSRUFETUU6IFVwZGF0ZWQgdmVyc2lvbiBudW1iZXJzIHRvIDIuMC42LgorCisyMDAxLTEyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXggdGVzdCBmb3IgaW52YWxpZAorCWdseXBoIGhlYWRlci4KKworMjAwMS0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX1RvX0JpdG1hcCk6IFJlbW92ZSBjb21waWxlciB3YXJuaW5nLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmggKEZUQ19Ob2RlX1VucmVmKTogUmVtb3ZlZC4gIEl0IGlzCisJYWxyZWFkeSBpbiBmdGNtYW5hZy5oLgorCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKGZ0Y19zYml0X25vZGVfbG9hZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKwlgZ2ZhbScuCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoZnRjX2ZhbWlseV90YWJsZV9hbGxvYywKKwkqIGZ0Y19mYW1pbHlfdGFibGVfZnJlZSk6IFVzZSBGVF9FWFBPUlRfREVGLgorCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNtYW5hZy5oOiBVcGRhdGVkLgorCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKGZ0Y19ub2RlX2Rlc3Ryb3kpOiBVc2UgRlRfRVhQT1JUX0RFRi4KKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKGZ0Y19jbWFwX25vZGVfaW5pdCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKwlgY2ZhbScuCisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisJKEZUQ19DTWFwQ2FjaGVfTG9va3VwKTogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLgorCShmdGNfY21hcF9mYW1pbHlfaW5pdCk6IERpdHRvLgorCShGVENfQ01hcENhY2hlX0xvb2t1cCk6IERpdHRvLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWM6IEluY3JlYXNlIGB2ZXJzaW9uX2luZm8nIHRvIDg6MDoyLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworMjAwMS0xMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvbWFjL1JFQURNRTogVXBkYXRlZC4KKworMjAwMS0xMi0xNCAgU2NvdHQgTG9uZyAgPHNjb3R0QHN3aWZ0dmlldy5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXhpbmcgY3Jhc2ggd2hlbgorCWRlYWxpbmcgd2l0aCBpbnZhbGlkIGZvbnRzIChpLmUuIGdseXBoIHNpemUgPCAxMCBieXRlcykuCisKKzIwMDEtMTItMTQgIFNhbSBMYXRpbmdhICA8c2xvdWtlbkBkZXZvbHV0aW9uLmNvbT4KKworCSogYnVpbGRzL21hYy9mcmVldHlwZS5tYWtlOiBBIG5ldyBNYWtlZmlsZSB0byBidWlsZCB3aXRoIE1QVyBvbgorCU1hY09TIGNsYXNzaWMuCisKKzIwMDEtMTItMTQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCksIHNyYy90eXBlMS90MWdsb2FkLmMKKwkoVDFfTG9hZF9HbHlwaCksIHNyYy9jaWQvY2lkZ2xvYWQuYyAoQ0lEX0xvYWRfR2x5cGgpLAorCXNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX0xvYWRfR2x5cGgpOiBGaXhlZCBhIHNlcmlvdXMgYnVnIGNvbW1vbiB0bworCWFsbCBmb250IGRyaXZlcnMgKHRoZSBhZHZhbmNlIHdpZHRoIHdhcyBuZXZlciBoaW50ZWQgd2hlbiBpdAorCXNob3VsZCkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBOZXcgbWFjcm8uCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChkZWJ1Z19tZW1fZHVtbXkpIFshRlRfREVCVUdfTUVNT1JZXTogRG9uJ3QKKwl1c2UgYGV4dGVybicga2V5d29yZC4KKworMjAwMS0xMi0xMiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfYmx1ZXNfc2NhbGVfem9uZXMsIHBzaF9ibHVlc19zbmFwX3N0ZW0KKwlwc2hfZ2xvYmFsc19uZXcpOiBBZGRpbmcgY29ycmVjdCBCbHVlU2NhbGUvQmx1ZVNoaWZ0IHN1cHBvcnQsIHBsdXMKKwlmYW1pbHkgYmx1ZXMgcHJvY2Vzc2luZy4KKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmggKFBTSF9CbHVlc1JlYyk6IFVwZGF0ZWQuCisKKwlTdGFydGVkIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUG9zdHNjcmlwdCBoaW50ZXIgaW4gdGhlIENGRiBtb2R1bGUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0guCisJKENGRl9QYXJzZV9DaGFyU3RyaW5ncyk6IEltcGxlbWVudCBpdC4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuaDogVXBkYXRlZC4KKworMjAwMS0xMi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIubTQ6IFNvbWUgcG9ydGFiaWxpdHkgZml4ZXMuCisKKzIwMDEtMTItMTEgIEpvdWsgSmFuc2VuICA8am91a2pAaHJlbS5zdG0udHVkZWxmdC5ubD4KKworCSogc3JjL2Jhc2UvZGVzY3JpcC5tbXMgKE9CSlMpOiBBZGQgZnRkZWJ1Zy5vYmouCisKKzIwMDEtMTItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfR2VuZXJpY19IZWFkZXIpOiBUeXBvcy4KKworMjAwMS0xMi0xMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IE1vZGlmaWVkIHRoZSBzY3JpcHQgdG8gcHJldmVudAorCXBhc3NpbmcgYC1ML3Vzci9saWInIHRvIGdjYy4KKworCSogZG9jcy9GVEwuVFhUOiBTaW1wbGUgZml4IChjaGFuZ2UgYExJQ0VOU0UuVFhUJyB0byBgRlRMLlRYVCcpLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIubTQ6IE5ldyBmaWxlIGZvciBjaGVja2luZyBjb25maWd1cmUgcGF0aHMuCisJV2UgbmVlZCB0byBpbnN0YWxsIGl0IGluICQocHJlZml4KS9zaGFyZS9hY2xvY2FsL2ZyZWV0eXBlMi5tNCBidXQgSQorCWRpZG4ndCBtb2RpZnkgYnVpbGRzL3VuaXgvaW5zdGFsbC5tayB5ZXQuCisKKwkqIElOU1RBTEw6IFVwZGF0ZWQgdGhlIGluc3RydWN0aW9ucyB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIHdpdGgKKwlKYW0uICBUaGV5IHdlcmUgc2ltcGx5IHdyb25nLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChGVF9Db3MpOiBGaXhlZCBhIHNtYWxsIGJ1ZyB0aGF0IGNhdXNlZAorCXNsaWdodGx5IGltcHJvcGVyIHJlc3VsdHMgZm9yIGBGVF9Db3MnIGFuZCBgRlRfU2luJyAoZXhhbXBsZToKKwlGVF9TaW4oMCkgPT0gLTEhKS4KKworMjAwMS0xMi0xMSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCAoR0VUX0xvbmdMRSwgR0VUX1VMb25nTEUpOgorCUZpeGVkIGluY29ycmVjdCBhcmd1bWVudCB0eXBlcy4KKworMjAwMS0xMi0xMCAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpICA8RnJhbmNlc2NvLlphcHBhLk5hcmRlbGxpQGVucy5mcj4KKworCSogc3JjL3BjZi9wY2Zkcml2ZXIuYyAoUENGX0luaXRfRmFjZSk6IEFsbG93IFhmdCB0byB1c2UgUENGIGZvbnRzCisJYnkgc2V0dGluZyB0aGUgYGZhY2UtPm1ldHJpY3MubWF4X2FkdmFuY2UnIGNvcnJlY3RseS4KKworMjAwMS0xMi0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2NtYXAuaCwgc3JjL2NhY2hlL2Z0Y2NtYXAuYzogQWRkZWQgbmV3CisJY2hhcm1hcCBjYWNoZS4KKwkqIHNyYy9jYWNoZS9mdGNhY2hlLmM6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2hpbnRfZWRnZXMpOiBzL1VOVVNFRC9GVF9VTlVTRUQvLgorCisyMDAxLTEyLTA2ICBMZW9uYXJkIFJvc2VudGhvbCAgPGxlb25hcmRyQGxhemVyd2FyZS5jb20+CisKKwlBZGRlZCBzdXBwb3J0IGZvciByZWFkaW5nIC5kZm9udCBmaWxlcyBvbiBNYWMgT1MgWC4gIEFsc28gYWRkZWQgYQorCW5ldyByb3V0aW5lIHdoaWNoIGxvb2tzIHVwIGEgZ2l2ZW4gZm9udCBieSBuYW1lIGluIHRoZSBNYWMgT1MgYW5kCisJcmV0dXJucyB0aGUgZGlzayBmaWxlIHdoZXJlIGl0IHJlc2lkZXMuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IEluY2x1ZGUgPEZpbGVzLmg+IGFuZCA8VGV4dFV0aWxzLmg+LgorCShpc19kZm9udCk6IE5ldyBhdXhpbGlhcnkgZnVuY3Rpb24uCisJKEZUX05ld19GYWNlX0Zyb21fZGZvbnQpOiBOZXcgZnVuY3Rpb24uCisJKEZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSk6IE5ldyBleHBvcnRlZCBmdW5jdGlvbi4KKwkoRlRfTmV3X0ZhY2UpOiBVcGRhdGVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oOiBVcGRhdGVkLgorCisyMDAxLTEyLTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jYWNoZS9KYW1maWxlLCBzcmMvY2FjaGUvcnVsZXMubWs6IFVwZGF0ZWQuCisKKzIwMDEtMTItMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogSU5TVEFMTDogU21hbGwgdXBkYXRlLgorCisyMDAxLTEyLTA1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2x5cGhfVG9fQml0bWFwKTogUmUtb3JkZXJlZCBjb2RlIGZvcgorCWRlYnVnZ2luZyBwdXJwb3Nlcy4KKwlDb21tZW50IG91dCB1c2Ugb2YgYG9yaWdpbicuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcik6IEZpeGVkIGEgbmFzdHkgaGlkZGVuIGJ1ZworCXdoZXJlIG91dGxpbmUgc2hpZnRpbmcgd2Fzbid0IGNvcnJlY3RseSB1bmRvbmUgYWZ0ZXIgYml0bWFwCisJcmFzdGVyaXphdGlvbi4gIFRoaXMgY3JlYXRlZCBwcm9ibGVtcyB3aXRoIGNlcnRhaW4gZ2x5cGhzIChsaWtlICciJworCW9mIGNlcnRhaW4gZm9udHMpIGFuZCB0aGUgY2FjaGUgc3lzdGVtLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHNoMV9oaW50X3RhYmxlX2luaXQpOiBGaXggdHlwby4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChwc2gyX2hpbnRfdGFibGVfaW5pdCk6IEZpeCB0eXBvLgorCShwczJfaGludHNfYXBwbHkpOiBTbWFsbCBmaXguCisKKzIwMDEtMTItMDUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmMgKHBzaDJfaGludF90YWJsZV9pbml0KSwKKwlzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHNoMV9oaW50X3RhYmxlX2luaXQpOiBSZW1vdmVkIGNvbXBpbGVyCisJd2FybmluZ3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLyosIHNyYy9jYWNoZS8qOgorCVlldCBhbm90aGVyIG1hc3NpdmUgcmV3cml0ZSBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIGluIG9yZGVyIHRvCisJYm90aCBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgYWxsb3cgc2ltcGxlciBjYWNoZSBzdWItY2xhc3NpbmcuICBBcworCWFuIGV4YW1wbGUsIHRoZSBjb2RlIGZvciB0aGUgaW1hZ2UgYW5kIHNiaXQgY2FjaGVzIGlzIG5vdyBtdWNoCisJc2ltcGxlci4KKworCUkgc3RpbGwgbmVlZCB0byB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gaW4KKwl3d3cvZnJlZXR5cGUyL2RvY3MvY2FjaGUuaHRtbCB0byByZWZsZWN0IHRoZSBuZXcgZGVzaWduIHRob3VnaC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfQ0FDSEVfQ0hBUk1BUF9IKTogTmV3CisJbWFjcm8uCisJKEZUX0NBQ0hFX0lOVEVSTkFMX0NBQ0hFX0gpOiBVcGRhdGVkLgorCisyMDAxLTEyLTA1ICBEYXZpZCBLcmF1c2UgIDxmcmVldHlwZUBkYXZpZGtyYXVzZS5jb20+CisKKwkqIGRvY3MvbGljZW5zZS50eHQ6IHMvWCBXaW5kb3dzL1ggV2luZG93IFN5c3RlbS8uCisKKzIwMDEtMTItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jOiBGaXggZGVmaW5pdGlvbiBjb25kaXRpb24gb2YgTUVNX1NldCgpLgorCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKE1fWSk6IENoYW5nZSB2YWx1ZSB0byAxOTIuCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChmdF9tZW1fdGFibGVfZGVzdHJveSk6IEZpeCBwcmludGYoKSBwYXJhbWV0ZXIuCisJUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jIChmdGNfaW1hZ2Vfbm9kZV9pbml0LAorCWZ0Y19pbWFnZV9ub2RlX2NvbXBhcmUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5jIChmdGNfc2JpdF9ub2RlX3dlaWdodCk6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZS4KKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoTUVNX1NldCk6IE1vdmUgZGVmaW5pdGlvbiBkb3duIHRvIGF2b2lkCisJY29tcGlsZXIgd2FybmluZy4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2hpbnRfZWRnZXMpOiBVc2UgVU5VU0VEKCkgdG8KKwlhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKwkqIHNyYy9wY2YvcGNmcmVhZC5jICh0YWJsZU5hbWVzKTogVXNlIGBjb25zdCcuCisJKHBjZl9yZWFkX1RPQyk6IENoYW5nZSBjb3VudGVyIG5hbWUgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KKwlVc2UgYGNvbnN0Jy4KKwkqIHNyYy9wc2hpbnRlci9wc2hyZWMuYyAocHNfaGludHNfY2xvc2UpOiBSZW1vdmUgcmVkdW5kYW50CisJZGVjbGFyYXRpb24uCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHNoMV9oaW50X3RhYmxlX2luaXQpOiBSZW5hbWUgdmFyaWFibGVzCisJdG8gYXZvaWQgc2hhZG93aW5nLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmMgKHBzaDJfaGludF90YWJsZV9hY3RpdmF0ZV9tYXNrKTogRGl0dG8uCisJKiBzcmMvdHlwZTEvdDFvYmpzLmg6IFJlbW92ZSBkb3VibGUgZGVjbGFyYXRpb25zIG9mIGBUMV9TaXplX0luaXQoKScKKwlhbmQgYFQxX1NpemVfRG9uZSgpJy4KKworMjAwMS0xMS0yMCAgQW50b2luZSBMZWNhICA8YW50b2luZWxlY2FAbXVsdGltYW5pYS5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaDogQWRkZWQgc29tZSBuZXcgTWljcm9zb2Z0IGxhbmd1YWdlCisJY29kZXMgYW5kIExDSURzIGFzIGZvdW5kIGluIE1TRE4gKFBhc3Nwb3J0IFNESykuICBBbHNvIGFkZGVkCisJY29tbWVudHMgYWJvdXQgdGhlIG1lYW5pbmcgb2YgYml0IDU3IG9mIHRoZSBgT1MvMicgdGFibGUKKwkoVFRfVUNSX1NVUlJPR0FURVMpIHdoaWNoICh3aXRoIE9wZW5UeXBlIHYuMS4zKSBub3cgbWVhbnMgYHRoZXJlIGlzCisJYSBjaGFyYWN0ZXIgYmV5b25kIDB4RkZGRiBpbiB0aGlzIGZvbnQnLiAgVGhhbmtzIHRvIERldGxlZiBXw7xya25lcgorCTxUZXRpU29mdEBhcGcubGFobi5kZT4gZm9yIG5vdGljaW5nIHRoaXMuCisKKzIwMDEtMTEtMjAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzaGludGVyL3twc2hhbGdvMi5jLCBwc2hhbGdvMS5jfTogRml4ZWQgc3R1cGlkIGJ1ZyBpbiBzb3J0aW5nCisJcm91dGluZSB0aGF0IGNyZWF0ZWQgbmFzdHkgYWxpZ25tZW50IGFydGVmYWN0cy4KKworCSogc3JjL3BzaGludGVyL3BzaHJlYy5jLCB0ZXN0cy9ndmlldy5jOiBEZWJ1Z2dpbmcgdXBkYXRlcy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmM6IERlLWFjdGl2YXRlZCBleHBlcmltZW50YWwgZ2FtbWEgc3VwcG9ydC4KKwlBcHBhcmVudGx5LCBgb3B0aW1hbCcgZ2FtbWEgdGFibGVzIGRlcGVuZCBvbiB0aGUgbW9uaXRvciB0eXBlLAorCXJlc29sdXRpb24gYW5kIGdlbmVyYWwga2FybWEsIHNvIGl0J3MgYmV0dGVyIHRvIGNvbXB1dGUgdGhlbSBvdXRzaWRlCisJb2YgdGhlIHJhc3Rlcml6ZXIgaXRzZWxmLgorCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBVc2UgYHZvbGF0aWxlJyBrZXl3b3JkLgorCisyMDAxLTEwLTI5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGRpbmcgZXhwZXJpbWVudGFsIGBnYW1tYScgc3VwcG9ydC4gIFRoaXMgcHJvZHVjZXMgc21vb3RoZXIgZ2x5cGhzCisJYXQgc21hbGwgc2l6ZXMgZm9yIHZlcnkgbGl0dGxlIGNvc3QuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5c19pbml0X2dhbW1hKTogTmV3IGZ1bmN0aW9uLgorCShncmF5X3Jhc3Rlcl9uZXcpOiBVc2UgaXQuCisKKwlWYXJpb3VzIGZpeGVzIHRvIHRoZSBhdXRvLWhpbnRlci4gIFRoZXkgbWVyZWx5IGltcHJvdmUgdGhlIG91dHB1dCBvZgorCXNhbnMtc2VyaWYgZm9udHMuICBOb3RlIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHByb2JsZW1zIHdpdGggc2VyaWZlZAorCWZvbnRzIGFuZCBjb21wb3NpdGVzIChhY2NlbnRlZCBjaGFyYWN0ZXJzKS4KKworCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguYyAoYWhfb3V0bGluZV9sb2FkLAorCWFoX291dGxpbmVfbGlua19zZWdtZW50cyk6IEltcGxlbWVudCBpdC4KKwlGaXggdHlwb3MuCisJKGFoX291dGxpbmVfc2F2ZSwgYWhfb3V0bGluZV9jb21wdXRlX3NlZ21lbnRzKTogRml4IHR5cG9zLgorCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9hbGlnbl9zZXJpZl9lZGdlKTogTmV3IGFyZ3VtZW50CisJYHZlcnRpY2FsJy4gIEltcGxlbWVudCBpbXByb3ZlbWVudC4KKwkoYWhfaGludF9lZGdlc18zLCBhaF9oaW50ZXJfaGludF9lZGdlcyk6IEltcGxlbWVudCBpdC4KKwlGaXggdHlwb3MuCisJKGFoX2hpbnRlcl9hbGlnbl9zdHJvbmdfcG9pbnRzLCBhaF9oaW50ZXJfYWxpZ25fd2Vha19wb2ludHMpOiBGaXgKKwl0eXBvcy4KKwkoYWhfaGludGVyX2xvYWQpOiBTZXQgYGFoX2RlYnVnX2hpbnRlcicgaWYgREVCVUdfSElOVEVSIGlzIGRlZmluZWQuCisJKiBzcmMvYXV0b2hpbnQvYWhtb2R1bGUuYzogSW1wbGVtZW50IHN1cHBvcnQgZm9yIERFQlVHX0hJTlRFUiBtYWNyby4KKwkqIHNyYy9hdXRvaGludC9haHR5cGVzLmg6IERpdHRvLgorCShBSF9IaW50ZXIpOiBSZW1vdmUgYGRpc2FibGVfaG9yel9lZGdlcycgYW5kIGBkaXNhYmxlX3ZlcnRfZWRnZXMnCisJKG1ha2luZyB0aGVtIGdsb2JhbCBhcyBgYWhfZGVidWdfZGlzYWJsZV9ob3J6JyBhbmQKKwlgYWhfZGVidWdfZGlzYWJsZV92ZXJ0JykuCisJRml4IHR5cG9zLgorCisJKiB0ZXN0cy9ndmlldy5jOiBVcGRhdGVkIHRoZSBkZWJ1Z2dpbmcgZ2x5cGggdmlld2VyIHRvIHNob3cgdGhlCisJaGludHMgZ2VuZXJhdGVkIGJ5IHRoZSBgYXV0b2hpbnQnIG1vZHVsZS4KKworMjAwMS0xMC0yNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjY2h1bmsuYyAoZnRjX2NodW5rX2NhY2hlX2xvb2t1cCk6IEZpeGVkIGEgYnVnIHRoYXQKKwljb25zaWRlcmFibHkgbG93ZXJlZCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGFic3RyYWN0IGNodW5rIGNhY2hlLgorCisyMDAxLTEwLTI2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLyouaCwKKwlzcmMvY2FjaGUvKi5jOiBNYWpvciByZS1kZXNpZ24gb2YgdGhlIGNhY2hlIHN1Yi1zeXN0ZW0gdG8gcHJvdmlkZQorCWJldHRlciBwZXJmb3JtYW5jZSBhcyB3ZWxsIGFzIGFuIGBBY3F1aXJlJy9gUmVsZWFzZScgQVBJLiAgU2VlbXMgdG8KKwl3b3JrIHdlbGwgaGVyZSwgYnV0IHByb2JhYmx5IG5lZWRzIGEgYml0IG1vcmUgdGVzdGluZy4KKworMjAwMS0xMC0yNiAgTGVvbmFyZCBSb3NlbnRob2wgIDxsZW9uYXJkckBsYXplcndhcmUuY29tPgorCisJKiBidWlsZHMvbWFjL1JFQURNRTogVXBkYXRlZCB0byByZWZsZWN0IG15IHRha2luZyBvdmVyIHRoZSBwcm9qZWN0CisJYW5kIHRoYXQgaXMgbm93IGJlaW5nIGFjdGl2ZWx5IG1haW50YWluZWQuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKHBhcnNlX2ZvbmQpOiBBcHBsaWVkIHBhdGNoZXMgZnJvbSBQYXVsIE1pbGxlcgorCTxwYXVsbUBwcm9mb3VuZGVmZmVjdHMuY29tPiB0byBzdXBwb3J0IGxvYWRpbmcgYSBmYWNlIG90aGVyIHRoYW4gdGhlCisJZmlyc3QgZnJvbSBhIEZPTkQgcmVzb3VyY2UuCisJKEZUX05ld19GYWNlX0Zyb21fRk9ORCk6IFVwZGF0ZWQuCisKKzIwMDEtMTAtMjUgIExlb25hcmQgUm9zZW50aG9sICA8bGVvbmFyZHJAbGF6ZXJ3YXJlLmNvbT4KKworCSogYnVpbGRzL21hYy9mdGxpYi5wcmo6IFVwZGF0ZSBvZiBDb2RlV2FycmlvciBwcm9qZWN0IGZpbGUgZm9yIE1hYworCU9TIGZvciBsYXRlc3QgdmVyc2lvbiAoNykgb2YgQ1dQcm8gYW5kIGZvciByZWNlbnQgY2hhbmdlcyB0byB0aGUgRlQKKwlzb3VyY2UgdHJlZS4KKworMjAwMS0xMC0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBVcGRhdGVkIGNvbW1lbnRzIHRvIGV4cGxhaW4KKwlwcmVjaXNlbHkgaG93IHRvIHVzZSBwcm9qZWN0LXNwZWNpZmljIG1hY3JvIGRlZmluaXRpb25zIHdpdGhvdXQKKwltb2RpZnlpbmcgdGhpcyBmaWxlIG1hbnVhbGx5LgorCisJKEZUX0NPTkZJR19GT1JDRV9JTlQ2NCk6IERlZmluZS4KKworCShGVF9ERUJVR19NRU1PUlkpOiBOZXcgbWFjcm8uCisKKzIwMDEtMTAtMjQgIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX05ld19NZW1vcnkpOiBBZGRlZCBhIG1pc3NpbmcgYHsnLgorCisyMDAxLTEwLTIzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCwgc3JjL2Jhc2UvZnRkYmdtZW0uYzoKKwlJbXByb3ZlbWVudHMgdG8gdGhlIG1lbW9yeSBkZWJ1Z2dlciB0byByZXBvcnQgbW9yZSBpbmZvcm1hdGlvbiBpbgorCWNhc2Ugb2YgZXJyb3JzLiAgQWxzbywgc29tZSBhbGxvY2F0aW9ucyB0aGF0IG9jY3VycmVkIHRocm91Z2ggUkVBTExPQworCWNvdWxkbid0IGJlIHByZXZpb3VzbHkgY2F1Z2h0IGNvcnJlY3RseS4KKworCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguYyAoYWhfb3V0bGluZV9jb21wdXRlX3NlZ21lbnRzLAorCWFoX291dGxpbmVfY29tcHV0ZV9lZGdlcyksIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoZnRfYmxhY2tfbmV3KSwKKwlzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfc3BhbiwgZ3JheV9yYXN0ZXJfbmV3KTogUmVwbGFjZWQKKwlsaWJlcmFsIHVzZXMgb2YgbWVtc2V0KCkgYnkgdGhlIE1FTV9TZXQoKSBtYWNyby4KKworMjAwMS0xMC0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKFVwZGF0ZSk6IFJlbW92ZWQgdG8gYmUgaW5saW5lZCBpbiAuLi4KKwkoU29ydCk6IFVwZGF0ZWQuCisKKzIwMDEtMTAtMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYyAoRlRfTmV3X01lbW9yeSwgRlRfRG9uZV9NZW1vcnkpLAorCWJ1aWxkcy92bXMvZnRzeXN0ZW0uYyAoRlRfTmV3X01lbW9yeSwgRlRfRG9uZV9NZW1vcnkpLAorCWJ1aWxkcy9hbWlnYS9mdHN5c3RlbS5jIChGVF9OZXdfTWVtb3J5LCBGVF9Eb25lX01lbW9yeSksCisJc3JjL2Jhc2UvZnRkYmdtZW0uYzogVXBkYXRlZCB0aGUgbWVtb3J5IGRlYnVnZ2VyIGFuZAorCXBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBgZnRzeXN0ZW0nIGluIG9yZGVyIHRvIGJlIGFibGUKKwl0byBkZWJ1ZyBtZW1vcnkgYWxsb2NhdGlvbnMgb24gVW5peCwgVk1TIGFuZCBBbWlnYSB0b28hCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChwc2gyX2hpbnRfdGFibGVfcmVjb3JkX21hc2spOiBSZW1vdmVkCisJc29tZSBib2d1cyB3YXJuaW5ncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oLCBzcmMvYmFzZS9mdGRiZ21lbS5jOgorCU1vZGlmaWVkIHRoZSBkZWJ1Z2dpbmcgbWVtb3J5IG1hbmFnZXIgdG8gcmVwb3J0IHRoZSBsb2NhdGlvbiAoc291cmNlCisJZmlsZSBuYW1lICsgbGluZSBudW1iZXIpIHdoZXJlIGxlYWtlZCBtZW1vcnkgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgaW4KKwl0aGUgc291cmNlIGZpbGUuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmM6IE5ldyBkZWJ1Z2dpbmcgbWVtb3J5IG1hbmFnZXIuICBZb3UgbXVzdAorCWRlZmluZSB0aGUgRlRfREVCVUdfTUVNT1JZIG1hY3JvIGluIGBmdG9wdGlvbi5oJyB0byBlbmFibGUgaXQuICBJdAorCXdpbGwgcmVjb3JkIGV2ZXJ5IG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgYW5kIHJlcG9ydCBzaW1wbGUgZXJyb3JzCisJbGlrZSBtZW1vcnkgbGVha3MgYW5kIGRvdWJsZSBkZWxldGVzLgorCisJKiBzcmMvYmFzZS9KYW1maWxlOiBJbmNsdWRlIGZ0ZGJnbWVtLgorCSogc3JjL2Jhc2UvcnVsZXMubWs6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRiYXNlLmM6IEluY2x1ZGUgZnRkYmdtZW0uYy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDogQWRkZWQgdGhlIEZUX0RFQlVHX01FTU9SWQorCW1hY3JvIGRlZmluaXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0c3lzdGVtLmMgKEZUX05ld19NZW1vcnksIEZUX0RvbmVfTWVtb3J5KTogTW9kaWZpZWQgdGhlCisJYmFzZSBjb21wb25lbnQgdG8gdXNlIHRoZSBkZWJ1Z2dpbmcgbWVtb3J5IG1hbmFnZXIgd2hlbiB0aGUgbWFjcm8KKwlGVF9ERUJVR19NRU1PUlkgaXMgZGVmaW5lZC4KKworMjAwMS0xMC0yMSAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKENGRl9Eb25lX0ZvbnQpOiBGcmVlIHN1YmZvbnRzIGFycmF5IG9ubHkgaWYKKwl3ZSBhcmUgd29ya2luZyB3aXRoIGEgQ0lEIGtleWVkIENGRiBmb250LiAgT3RoZXJ3aXNlLCBhIHZhcmlhYmxlCisJdGhhdCB3YXMgbmV2ZXIgYWxsb2NhdGVkIG1lbW9yeSBtaWdodCBmcmVlZC4gIFRoaXMgaXMgYSBjb3JyZWN0aW9uCisJdG8gdGhlIHByZXZpb3VzIHBhdGNoIGZvciBmcmVlaW5nIHN1YmZvbnRzLgorCisyMDAxLTEwLTIxICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoQ0ZGX0RvbmVfRm9udCk6IEZyZWUgdGhlIHN1YmZvbnRzIGFycmF5IHRvCisJYXZvaWQgYSBtZW1vcnkgbGVhay4KKworMjAwMS0xMC0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYywgc3JjL3BzaGludGVyL3BzaGFsZ28xLmMsCisJc3JjL3BzaGludGVyL3BzaGdsb2IuYzogUmVtb3ZpbmcgY29tcGlsZXIgd2FybmluZ3MgaW4gcGVkYW50aWMgbW9kZXMKKwkoaW4gbXVsdGktb2JqZWN0IGNvbXBpbGF0aW9uIG1vZGUsIG1haW5seSkuCisKKzIwMDEtMTAtMjAgIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZW5jb2RpbmcpOiBBZGQgYSB0ZXN0IHRvIG1ha2Ugc3VyZQorCXRoYXQgY3VzdG9tIGVuY29kaW5ncyAoaS5lLiwgbmVpdGhlciBTdGFuZGFyZEVuY29kaW5nIG5vcgorCUV4cGVydEVuY29kaW5nKSBhcmUgbm90IGxvYWRlZCB0d2ljZSB3aGVuIHRoZSBUeXBlIDEgZm9udCBpcworCXN5bnRoZXRpYy4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9mb250X25hbWUsIHBhcnNlX3N1YnJzKTogQWRkZWQgYSB0ZXN0CisJZm9yIHdoZW4gbG9hZGluZyBzeW50aGV0aWMgZm9udHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZvbnQgbmFtZQorCWFuZCBzdWJyb3V0aW5lcyBhcmUgbm90IGxvYWRlZCB0d2ljZS4gIFRoaXMgaXMgdG8gcmVtb3ZlIGEgbWVtb3J5CisJbGVhayB0aGF0IG9jY3VycmVkIGJlY2F1c2UgdGhlIG9yaWdpbmFsIG1lbW9yeSBibG9ja3MgZm9yIHRoZXNlCisJb2JqZWN0cyB3ZXJlIG5vdCBkZWFsbG9jYXRlZCB3aGVuIHRoZSBvYmplY3RzIHdlcmUgcGFyc2VkIHRoZQorCXNlY29uZCB0aW1lLgorCisyMDAxLTEwLTE5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jLCBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5oLAorCXNyYy9wc2hpbnRlci9wc2hyZWMuYywgc3JjL3BzaGludGVyL3BzaGFsZ28yLmM6IEdldHRpbmcgcmlkIG9mCisJY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9wc2hpbnRlci9tb2R1bGUubWssIHNyYy9wc2hpbnRlci9ydWxlcy5tazogQWRkaW5nIGNvbnRyb2wKKwlmaWxlcyB0byBidWlsZCB0aGUgUG9zdFNjcmlwdCBoaW50ZXIgd2l0aCB0aGUgYG9sZCcgYnVpbGQgc3lzdGVtLgorCisyMDAxLTEwLTE5ICBKYWNvYiBKYW5zZW4gIDxqb3VrakBocmVtLnN0bS50dWRlbGZ0Lm5sPgorCisJKiBkZXNjcmlwLm1tcywgc3JjL3BzaGludGVyL2Rlc2NyaXAubW1zOiBVcGRhdGVzIHRvIHRoZSBWTVMgYnVpbGQKKwlmaWxlcy4KKworMjAwMS0xMC0xOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oLCBzcmMvdG9vbHMvZ2xuYW1lcy5weTogUmV3cm90ZSB0aGUKKwlgZ2xuYW1lcy5weScgc2NyaXB0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGBwc3RhYmxlcy5oJyBoZWFkZXIgZmlsZS4KKwlUaGUgb2xkIG9uZSBjb250YWluZWQgYSBzZXJpb3VzIGJ1ZyB0aGF0IG1hZGUgRnJlZVR5cGUgcmV0dXJuCisJaW5jb3JyZWN0IGdseXBoIG5hbWVzIGZvciBjZXJ0YWluIGdseXBocy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKFNldF9DaGFyX1NpemVzKTogQ2hhbmdpbmcgY29tcHV0YXRpb24gb2YKKwlwaXhlbCBzaXplIGZyb20gY2hhcmFjdGVyIHNpemUgdG8gdXNlIHJvdW5kaW5nLiAgVGhpcyBpcyBhbgorCWV4cGVyaW1lbnQgdG8gc2VlIHdoZXRoZXIgdGhpcyBnaXZlcyB2YWx1ZXMgc2ltaWxhciB0byBXaW5kb3dzIGZvcgorCXNjYWxlZCBhc2NlbnQvZGVzY2VudC9ldGMuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXY2NGJ5MzIpOiBDaGFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlvbgorCXNsaWdodGx5IHNpbmNlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXMtY29tcGlsZWQgb24gTWFjIG1hY2hpbmVzCisJdXNpbmcgdGhlIE1QVyBDIGNvbXBpbGVyLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfUmVhbGxvYyk6IFdoZW4gYSBtZW1vcnkgYmxvY2sgd2FzIGdyb3duCisJdGhyb3VnaCBGVF9SZWFsbG9jKCksIHRoZSBuZXcgYnl0ZXMgd2VyZSBub3Qgc2V0IHRvIDAsIHdoaWNoIGNyZWF0ZWQKKwlzb21lIHN0cmFuZ2UgYnVncyBpbiB0aGUgUG9zdFNjcmlwdCBoaW50ZXIuCisJKGRlc3Ryb3lfZmFjZSk6IERvbid0IGRlYWxsb2NhdGUgdW5jb25kaXRpb25hbGx5LgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKENJRF9Db21wdXRlX01heF9BZHZhbmNlLCBDSURfTG9hZF9HbHlwaCk6CisJQWRkaW5nIHN1cHBvcnQgdG8gbmV3IFBvc3RTY3JpcHQgaGludGVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzZ2xvYmFsLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaCwgc3JjL3BzaGludGVyL0phbWZpbGUsCisJc3JjL3BzaGludGVyL3BzaGFsZ28uaCwgc3JjL3BzaGludGVyL3BzaGFsZ28xLmgsCisJc3JjL3BzaGludGVyL3BzaGFsZ28xLmMsIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5oLAorCXNyYy9wc2hpbnRlci9wc2hhbGdvMi5jLCBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5oLAorCXNyYy9wc2hpbnRlci9wc2hnbG9iLmMsIHNyYy9wc2hpbnRlci9wc2hpbnRlci5jLAorCXNyYy9wc2hpbnRlci9wc2htb2QuYywgc3JjL3BzaGludGVyL3BzaG1vZC5oLCBzcmMvcHNoaW50ZXIvcHNocmVjLmMsCisJc3JjL3BzaGludGVyL3BzaHJlYy5oOiBBZGRpbmcgbmV3IFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oLCBzcmMvcHNhdXgvcHNvYmpzLmMsCisJc3JjL3BzYXV4L3Bzb2Jqcy5oLCBzcmMvcHNhdXgvdDFkZWNvZGUuaCwgc3JjL3BzYXV4L3QxZGVjb2RlLmMsCisJc3JjL3R5cGUxL3QxZHJpdmVyLmMsIHNyYy90eXBlMS90MWdsb2FkLmMsIHNyYy90eXBlMS90MW9ianMuYywKKwlzcmMvdHlwZTEvdDFvYmpzLmg6IFVwZGF0ZXMgdG8gdXNlIHRoZSBuZXcgUG9zdFNjcmlwdCBoaW50ZXIuCisKKwkqIHRlc3RzL0phbWZpbGUsIHRlc3RzL2d2aWV3LmM6IEFkZGluZyBhIG5ldyBnbHlwaCBoaW50aW5nCisJdmlld2VyL2RlYnVnZ2VyIHRvIHRoZSBzb3VyY2UgdHJlZS4gIE5vdGUgdGhhdCB5b3Ugd2lsbCBfbm90XyBiZQorCWFibGUgdG8gY29tcGlsZSBpdCBzaW5jZSBpdCBkZXBlbmRzIG9uIGFuIHVuYXZhaWxhYmxlIGdyYXBoaWNzCisJbGlicmFyeSBuYW1lZCBgTmlydmFuYScgdG8gcmVuZGVyIHZlY3RvciBpbWFnZXMuCisKKzIwMDEtMTAtMTcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMC41IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgsIGluY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmgsCisJc3JjL2Jhc2UvZnRvYmpzLmMsIHNyYy90eXBlMS90MWRyaXZlci5jOiBBZGRpbmcgYSBuZXcgZnVuY3Rpb24gbmFtZWQKKwknRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZScgdG8gcmV0cmlldmUgdGhlIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuCisJZm9udC4gIFNob3VsZCB3b3JrIHdpdGggYWxsIGZvcm1hdHMgZXhjZXB0IHB1cmUgQ0ZGL0NFRiBmb250cyAodGhpcworCXdpbGwgYmUgYWRkZWQgc29vbikuCisKKwkqIHNyYy9jaWQvY2lkcml2ZXIgKGNpZF9nZXRfcG9zdHNjcmlwdF9uYW1lKTogTmV3IGZ1bmN0aW9uLgorCShDSURfR2V0X0ludGVyZmFjZSk6IEhhbmRsZSBgcG9zdHNjcmlwdF9uYW1lJyBpbnRlcmZhY2UuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGdldF9zZm50X3Bvc3RzY3JpcHRfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkoU0ZOVF9HZXRfSW50ZXJmYWNlKTogSGFuZGxlIGBwb3N0c2NyaXB0X25hbWUnIGludGVyZmFjZS4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKHQxX2dldF9wc19uYW1lKTogTmV3IGZ1bmN0aW9uLgorCShHZXRfSW50ZXJmYWNlKTogSGFuZGxlIGBwb3N0c2NyaXB0X25hbWUnIGludGVyZmFjZS4KKworCSogUkVBRE1FLCBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQgZm9yIDIuMC41IHJlbGVhc2UuCisKKzIwMDEtMTAtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUZpeGVkIGEgYnVnIGluIGBnbG5hbWVzLnB5JyB0aGF0IHByZXZlbnRlZCBpdCBmcm9tIGdlbmVyYXRpbmcKKwljb3JyZWN0IGdseXBoIG5hbWVzIHRhYmxlcy4gIFRoaXMgcmVzdWx0ZWQgaW4gdGhlIHVuYXZhaWxhYmlsaXR5IG9mCisJY2VydGFpbiBnbHlwaHMgbGlrZSBgQ2FjdXRlJywgYGNhY3V0ZScgYW5kIGBsc2xhc2gnIGluIFVuaWNvZGUKKwljaGFybWFwcywgZXZlbiBpZiB0aGVzZSB3ZXJlIHByZXNlbnQgaW4gdGhlIGZvbnQgKGNhdXNpbmcgcHJvYmxlbXMKKwlmb3IgUG9saXNoIHVzZXJzKS4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHkgKG1hY19zdGFuZGFyZF9uYW1lcyk6IEZpeGVkLgorCSh0MV9zdGFuZGFyZF9zdHJpbmdzKTogU29tZSBmaXhlcyBhbmQgcmVuYW1lZCB0byAuLi4KKwkoc2lkX3N0YW5kYXJkX25hbWVzKTogVGhpcy4KKwkodDFfZXhwZXJ0X2VuY29kaW5nKTogRml4ZWQuCisJKHRoZV9hZG9iZV9nbHlwaF9saXN0KTogUmVuYW1lZCB0byAuLi4KKwkoYWRvYmVfZ2x5cGhfbmFtZXMpOiBUaGlzLgorCSh0aGVfYWRvYmVfZ2x5cGhzKTogUmVuYW1lZCB0byAuLi4KKwkoYWRvYmVfZ2x5cGhfdmFsdWVzKTogVGhpcy4KKwkoZHVtcF9tYWNfaW5kaWNlcywgZHVtcF9nbHlwaF9saXN0LCBkdW1wX3VuaWNvZGVfdmFsdWVzLCBtYWluKToKKwlVcGRhdGVkLgorCSogc3JjL3BzbmFtZXMvcHN0YWJsZXMuaDogUmVnZW5lcmF0ZWQuCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChQU19Vbmljb2RlX1ZhbHVlKTogRml4IG9mZnNldC4KKwlGaXggcmV0dXJuIHZhbHVlLgorCVVzZSBgc2lkX3N0YW5kYXJkX3RhYmxlJyBhbmQgYHBzX25hbWVzX3RvX3VuaWNvZGUnIGluc3RlYWQgb2YKKwlgdDFfc3RhbmRhcmRfZ2x5cGhzJyBhbmQgYG5hbWVzX3RvX3VuaWNvZGUnLgorCShQU19NYWNpbnRvc2hfTmFtZSk6IFVzZSBgcHNfZ2x5cGhfbmFtZXMnIGluc3RlYWQgb2YKKwlgc3RhbmRhcmRfZ2x5cGhfbmFtZXMnLgorCShQU19TdGFuZGFyZF9TdHJpbmdzKTogVXNlIGBzaWRfc3RhbmRhcmRfbmFtZXMnIGluc3RlYWQgb2YKKwlgdDFfc3RhbmRhcmRfZ2x5cGhzJy4KKworCSogZG9jL0JVR1MsIGRvYy9UT0RPOiBOZXcgZG9jdW1lbnRzLgorCisyMDAxLTEwLTA3ICBSaWNoYXJkIEJhcmJlciAgPHJpY2hAc29sdXRpb251ay5jb20+CisKKwkqIHNyYy9jYWNoZS9mdGxydS5jIChGVF9McnVfTG9va3VwX05vZGUpOiBGaXhlZCBhIGJ1ZyB0aGF0IHByZXZlbnRlZAorCWNvcnJlY3QgTFJVIGJlaGF2aW91ci4KKworMjAwMS0xMC0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJc2V0am1wKCkgYW5kIGxvbmdqbXAoKSBhcmUgbm93IHVzZWQgZm9yIHJvbGxiYWNrIChpLmUuIHdoZW4gbWVtb3J5CisJcG9vbCBvdmVyZmxvdyBvY2N1cnMpLgorCisJRnVuY3Rpb24gbmFtZXMgYXJlIG5vdyBhbGwgdW5pZm9ybWx5IHByZWZpeGVkIHdpdGggYGdyYXlfJy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmM6IEluY2x1ZGUgPHNldGptcC5oPi4KKwkoRXJyUmFzdGVyX01lbW9yeU92ZXJmbG93KTogTmV3IG1hY3JvLgorCShUQXJlYSk6IE5ldyB0eXBlIHRvIHN0b3JlIGFyZWEgdmFsdWVzIGluIGVhY2ggY2VsbCAodXNpbmcgYGludCcgd2FzCisJdG9vIHNtYWxsIG9uIDE2LWJpdCBzeXN0ZW1zKS4gIDxsaW1pdHMuaD4gaXMgaW5jbHVkZWQgdG8gcHJvcGVybHkKKwlnZXQgdGhlIG5lZWRlZCBkYXRhIHR5cGUuCisJKFRDZWxsLCBUUmFzdGVyKTogVXNlIGl0LgorCShUUmFzdGVyKTogTmV3IGVsZW1lbnQgYGp1bXBfYnVmZmVyJy4KKwkoZ3JheV9jb21wdXRlX2Nib3gpOiBVc2UgYFJBU19BUkcnIGFzIHRoZSBvbmx5IHBhcmFtZXRlciBhbmQgZ2V0CisJYG91dGxpbmUnIGZyb20gaXQuCisJKGdyYXlfcmVjb3JkX2NlbGwpOiBVc2UgbG9uZ2ptcCgpLgorCShncmF5X3NldF9jZWxsKTogVXNlIGdyYXlfcmVjb3JkX2NlbGwoKSBmb3IgZXJyb3IgaGFuZGxpbmcuCisJKGdyYXlfcmVuZGVyX2xpbmUsIGdyYXlfcmVuZGVyX2NvbmljLCBncmF5X3JlbmRlcl9jdWJpYyk6IFNpbXBsaWZ5LgorCShncmF5X2NvbnZlcnRfZ2x5cGhfaW5uZXIpOiBOZXcgZnVuY3Rpb24sIHVzaW5nIHNldGptcCgpLgorCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBVc2UgaXQuCisKKzIwMDEtMTAtMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVByb3ZpZGUgYSBwdWJsaWMgQVBJIHRvIG1hbmFnZSBtdWx0aXBsZSBzaXplIG9iamVjdHMgZm9yIGEgZ2l2ZW4KKwlGVF9GYWNlIGluIHRoZSBuZXcgaGVhZGVyIGZpbGUgYGZ0c2l6ZXMuaCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oOiBOZXcgaGVhZGVyIGZpbGUsCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBVc2UgaXQuCisJUmVtb3ZlIGRlY2xhcmF0aW9ucyBvZiBGVF9OZXdfU2l6ZSBhbmQgRlRfRG9uZV9TaXplIChtb3ZlZCB0bworCWZ0c2l6ZXMuaCkuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9TSVpFU19IKTogTmV3IG1hY3JvLgorCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0FjdGl2YXRlX1NpemUpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYzogSW5jbHVkZSBmdHNpemVzLmguCisJKGZ0Y19tYW5hZ2VyX2luaXRfc2l6ZSwgZnRjX21hbmFnZXJfZmx1c2hfc2l6ZSk6IFVzZQorCUZUX0FjdGl2YXRlX1NpemUuCisKKzIwMDEtMDktMjAgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2EvKjogQWRkZWQgcG9ydCB0byBBbWlnYSB3aXRoIHRoZSBTQVMvQyBjb21waWxlci4KKworMjAwMS0wOS0xNSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9Eb25lX0FGTSk6IEZyZWUgYGFmbScuCisKKzIwMDEtMDktMTAgIFlhbyBaaGFuZyAgPHl6aGFuZ0BzaGFyZW1lZGlhLmNvbT4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKGNvZGVfdG9faW5kZXgyKTogSGFuZGxlIGNvZGUgdmFsdWVzIHdpdGgKKwloaS1ieXRlID09IDAgY29ycmVjdGx5LgorCisyMDAxLTA5LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9saW5rLXN0ZC5tayAoJChQUk9KRUNUX0xJQlJBUlkpKTogRml4IHR5cG8uCisKKzIwMDEtMDgtMzAgIE1hcnRpbiBNdXNrZW5zICA8bW11c2tlbnNAYXVyZWxvbi5jb20+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZm9udF9tYXRyaXgpOiBBIG5ldyB3YXkgdG8gY29tcHV0ZSB0aGUKKwl1bml0cyBwZXIgRU0gd2l0aCBncmVhdGVyIGFjY3VyYWN5IChpbXBvcnRhbnQgZm9yIGVtYmVkZGVkIFQxIGZvbnRzCisJaW4gUERGIGRvY3VtZW50cyB0aGF0IHdlcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBUcnVlVHlwZQorCW9uZXMpLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKGlzX2FscGhhKTogTm93IHN1cHBvcnRzIGArJyBpbiBmb250IG5hbWVzOworCXRoaXMgaXMgdXNlZCBpbiBlbWJlZGRlZCBmb250cy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChQU19UYWJsZV9BZGQpOiBGaXhlZCBhIHJlYWxsb2NhdGlvbiBidWcgdGhhdAorCWdlbmVyYXRlZCBhIGRhbmdsaW5nIHBvaW50ZXIgcmVmZXJlbmNlLgorCisyMDAxLTA4LTMwICBBbnRob255IEZlaWsgIDxhZmVpY2tAaG90bWFpbC5jb20+CisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9SZWFkX0FmbSk6IE5vdyBjb3JyZWN0bHkgc2V0cyB0aGUgZmxhZworCUZUX0ZBQ0VfRkxBR19LRVJOSU5HIHdoZW4gYXBwcm9wcmlhdGUgZm9yIFR5cGUxICsgQUZNIGZpbGVzLgorCisyMDAxLTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChUVF9Mb2FkX0NNYXApOiBGaXggZnJhbWUgbGVuZ3RoIG9mCisJYGNtYXBfcmVjX2ZpZWxkcycuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaCBbIUZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlNdOgorCVVuZGVmaW5lIEZUX0VSUl9CQVNFIGJlZm9yZSBkZWZpbmluZyBhZ2Fpbi4KKworMjAwMS0wOC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaDogRml4IHByb3RvdHlwZSBvZiBUVF9Nb3ZlX0Z1bmMuCisKKzIwMDEtMDgtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2Rvcy9kb3MtZGVmLm1rIChOT19PVVRQVVQpOiBEb24ndCB1c2UgYCY+JyBidXQgYD4nLgorCisyMDAxLTA4LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6IENoYW5nZWQgdGhlIGRlZmF1bHQgc2V0dGluZworCWZvciBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTIHRvIHVuZGVmaW5lZCwgc2luY2UgaXQgYnJlYWtzCisJc291cmNlIGNvbXBhdGliaWxpdHkgaW4gYSBmZXcgY2FzZXMuICBVcGRhdGVkIHRoZSBjb21tZW50IHRvIGV4cGxhaW4KKwl0aGF0IHRvby4KKworMjAwMS0wOC0xNyAgTWFydGluIE11c2tlbnMgIDxtbXVza2Vuc0BhdXJlbG9uLmNvbT4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bERpdik6IEZpeGVkIHNlcmlvdXMgdHlwby4KKworMjAwMS0wOC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVXBkYXRpbmcgdG8gT3BlblR5cGUgMS4zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfQ01hcDAsIFRUX0NNYXAyLCBUVF9DTWFwNCwKKwlUVF9DTWFwNik6IEFkZGluZyBmaWVsZCBgbGFuZ3VhZ2UnLgorCShUVF9DTWFwVGFibGUpOiBSZW1vdmluZyBmaWVsZCBgbGFuZ3VhZ2UnLgorCVR5cGUgb2YgYGxlbmd0aCcgZmllbGQgY2hhbmdlZCB0byBGVF9VTG9uZy4KKwlBZGRpbmcgZmllbGRzIGZvciBjbWFwcyBmb3JtYXQgOCwgMTAsIGFuZCAxMi4KKwkoVFRfQ01hcEdyb3VwKTogTmV3IGF1eGlsaWFyeSBzdHJ1Y3R1cmUuCisJKFRUX0NNYXA4XzEyLCBUVF9DTWFwMTApOiBOZXcgc3RydWN0dXJlcy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaCAoVFRfSG9yaUhlYWRlciwgVFRfVmVydEhlYWRlcik6CisJUmVtb3ZlZCBsYXN0IGVsZW1lbnQgb2YgYFJlc2VydmVkJyBhcnJheS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaCAoVFRfUExBVEZPUk1fQ1VTVE9NLCBUVF9NU19JRF9VQ1NfNCwKKwlUVF9OQU1FX0lEX0NJRF9GSU5ERk9OVF9OQU1FKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKFRUX0NoYXJNYXBfTG9hZCk6IFVwZGF0ZWQgbG9hZGluZyBvZiBgbGFuZ3VhZ2UnCisJZmllbGQgdG8gdGhlIG5ldyBzdHJ1Y3R1cmVzLgorCUZpeGVkIGZyZWVpbmcgb2YgYXJyYXlzIGluIGNhc2Ugb2YgdW5zdWNjZXNzZnVsIGxvYWRzLgorCUFkZGVkIHN1cHBvcnQgZm9yIGxvYWRpbmcgZm9ybWF0IDgsIDEwLCBhbmQgMTIgY21hcHMuCisJKFRUX0NoYXJNYXBfRnJlZSk6IEFkZGVkIHN1cHBvcnQgZm9yIGZyZWVpbmcgZm9ybWF0IDgsIDEwLCBhbmQgMTIKKwljbWFwcy4KKwkoY29kZV90b19pbmRleDQpOiBTbWFsbCBpbXByb3ZlbWVudC4KKwkoY29kZV90b19pbmRleDYpOiBEaXR0by4KKwkoY29kZV90b19pbmRleDhfMTIsIGNvZGVfdG9faW5kZXgxMCk6IE5ldyBmdW5jdGlvbnMuCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9NZXRyaWNzX0hlYWRlcik6IFVwZGF0ZWQgdG8gbmV3CisJc3RydWN0dXJlLgorCShUVF9Mb2FkX0NNYXApOiBEaXR0by4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X2VuY29kaW5ncyk6IEFkZCBNUyBVQ1M0IHRhYmxlIChiZWZvcmUgTVMKKwlVbmljb2RlKS4KKworMjAwMS0wOC0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfZ2V0X25hbWVfaW5kZXgpOiBGaXggY29tcGlsZXIgd2FybmluZy4KKworMjAwMS0wOC0wOSAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChnZXRfY2ZmX2dseXBoX25hbWUpOiBSZW5hbWVkIHRvCisJY2ZmX2dldF9nbHlwaF9uYW1lIGZvciBjb25zaXN0ZW5jeS4KKworCShjZmZfZ2V0X2dseXBoX2luZGV4KTogTWlub3IgZG9jdW1lbnRhdGlvbiBjaGFuZ2UuCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9nZXRfbmFtZV9pbmRleCk6IE5ldyBmdW5jdGlvbiB1c2VkIGluCisJR2V0X0ludGVyZmFjZSBhcyB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgd2hlbiB0aGUgYG5hbWVfaW5kZXgnCisJZnVuY3Rpb24gaXMgcmVxdWVzdGVkLgorCisJKGdldF90MV9nbHlwaF9uYW1lKTogUmVuYW1lZCB0byB0MV9nZXRfZ2x5cGhfbmFtZSBmb3IgY29uc2lzdGVuY3kuCisKKzIwMDEtMDgtMDggIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jOiBSZW1vdmVkIGRlZmluaXRpb25zIG9mIGNmZl9pc29hZG9iZV9jaGFyc2V0LAorCWNmZl9leHBlcnRfY2hhcnNldCwgY2ZmX2V4cGVydHN1YnNldF9jaGFyc2V0LCBjZmZfc3RhbmRhcmRfZW5jb2RpbmcsCisJYW5kIGNmZl9leHBlcnRfZW5jb2RpbmcgYXJyYXlzIHRvIGNmZmxvYWQuaC4KKworCSogc3JjL2NmZi9jZmZsb2FkLmg6IEFkZGVkIGRlZmluaXRpb25zIG9mIGNmZl9pc29hZG9iZV9jaGFyc2V0LAorCWNmZl9leHBlcnRfY2hhcnNldCwgY2ZmX2V4cGVydHN1YnNldF9jaGFyc2V0LCBjZmZfc3RhbmRhcmRfZW5jb2RpbmcsCisJYW5kIGNmZl9leHBlcnRfZW5jb2RpbmcgYXJyYXlzLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfbmFtZV9pbmRleCk6IE5ldyBmdW5jdGlvbiwgcmV0dXJuZWQKKwl3aGVuIGBjZmZfZ2V0X2ludGVyZmFjZScgaXMgY2FsbGVkIHdpdGggYSByZXF1ZXN0IGZvciB0aGUKKwlgbmFtZV9pbmRleCcgZnVuY3Rpb24uCisKKwkoY2ZmX2dldF9pbnRlcmZhY2UpOiBNb2RpZmllZCBzbyB0aGF0IGl0IHJldHVybnMgdGhlIGZ1bmN0aW9uCisJYGNmZl9nZXRfbmFtZV9pbmRleCcgd2hlbiB0aGUgYG5hbWVfaW5kZXgnIGZ1bmN0aW9uIGlzIHJlcXVlc3RlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9OYW1lX0luZGV4KTogTmV3IGZ1bmN0aW9uLCB1c2VkIHRvCisJcmV0dXJuIGEgZ2x5cGggaW5kZXggZm9yIGEgZ2l2ZW4gZ2x5cGggbmFtZSBvbmx5IGlmIHRoZSBkcml2ZXIKKwlzdXBwb3J0cyBnbHlwaCBuYW1lcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfTmFtZV9JbmRleF9SZXF1ZXN0ZXIpOgorCU5ldyBmdW5jdGlvbiBwb2ludGVyIHR5cGUgZGVmaW5pdGlvbiB1c2VkIGluIHRoZSBmdW5jdGlvbgorCUZUX0dldF9OYW1lX0luZGV4LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0dldF9OYW1lX0luZGV4KTogQWRkZWQKKwlkb2N1bWVudGF0aW9uIGFuZCBwcm90b3R5cGUuCisKKzIwMDEtMDctMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2N5Z3dpbi8qOiBSZW1vdmVkLiAgVXNlIHRoZSB1bml4IHN0dWZmIGluc3RlYWQuCisKKzIwMDEtMDctMjYgIEpvdWsgSmFuc2VuICA8am91a2pAaHJlbS5zdG0udHVkZWxmdC5ubD4KKworCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIChGVF9DQUxMQkFDS19ERUYpOiBVcGRhdGVkIHRvIGNoYW5nZSBkYXRlZAorCTIwMDEtMDYtMjcuCisKKzIwMDEtMDctMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChQU19UYWJsZSk6IFVzZSBGVF9PZmZzZXQgZm9yCisJYGN1cnNvcicgYW5kIGBjYXBhY2l0eScuCisJKiBzcmMvcHNhdXgvcHNvYmpjLmMgKHJlYWxsb2NhdGVfdDFfdGFibGUpOiBVc2UgRlRfTG9uZyBmb3Igc2Vjb25kCisJcGFyYW1ldGVyLgorCShQU19UYWJsZV9BZGQpOiBVc2UgRlRfT2Zmc2V0IGZvciBgbmV3X3NpemUnLgorCisJQWRkIHN1cHBvcnQgZm9yIHZlcnNpb24gMC41IG1heHAgdGFibGVzLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9NYXhQcm9maWxlKTogSW1wbGVtZW50IGl0LgorCShUVF9Mb2FkX09TMik6IEluaXRpYWxpemUgc29tZSB2YWx1ZXMuCisKKzIwMDEtMDctMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRzeW50aC5jOiBJbmNsdWRlIGZ0Y2FsYy5oIHVuY29uZGl0aW9uYWxseS4KKworMjAwMS0wNy0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYywgc3JjL3BjZi9wY2ZyZWFkOgorCVJlbW92ZWQgcGVkYW50aWMgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMKKwljb21waWxlZCBpbi4KKworMjAwMS0wNy0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9hbGlnbl93ZWFrX3BvaW50cyk6IFJlbW92ZQorCXVudXNlZCB2YXJpYWJsZSBgZWRnZXMnLgorCShhaF9oaW50ZXJfbG9hZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBvbGRfd2lkdGgnIGFuZAorCWBuZXdfd2lkdGgnLgorCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9kZWNyeXB0KTogVXNlIGBVJyBmb3IgY29uc3RhbnQgKGFnYWluKS4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoVDFfRGVjcnlwdCk6IERpdHRvLgorCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCk6IERpdHRvLgorCisyMDAxLTA2LTI4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvZnRzdHJlYW0uaDogTW9kaWZpZWQgdGhlIGRlZmluaXRpb25zCisJb2YgdGhlIEZUX0dFVF9YWFhYIGFuZCBORVhUX1hYWFggbWFjcm9zIGZvciAxNi1iaXQgY29ycmVjdG5lc3MuCisKKzIwMDEtMDYtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMsIHNyYy9jaWQvY2lkbG9hZC5oIChjaWRfZGVjcnlwdCk6IFVzZSBGVF9PZmZzZXQKKwlpbnN0ZWFkIG9mIEZUX0ludCBhcyB0eXBlIGZvciBgbGVuZ3RoJyBwYXJhbWV0ZXIuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFBTQXV4X0ludGVyZmFjZSk6IFVwZGF0ZWQuCisKKzIwMDEtMDYtMjcgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMsIHNyYy9wc2F1eC9wc29ianMuaCAoVDFfRGVjcnlwdCk6IFVzZSBGVF9PZmZzZXQKKwlpbnN0ZWFkIG9mIEZUX0ludCBhcyB0eXBlIGZvciBgbGVuZ3RoJyBwYXJhbWV0ZXIuCisKKworCSogVmVyc2lvbiAyLjAuNCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMjAwMS0wNi0yNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogQ2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKwlGVF9DQUxMQkFDS19ERUYgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjb25maWcuaCwgc3JjLyovKi5jOiBDaGFuZ2VkIHRoZSBkZWZpbml0aW9uIGFuZAorCXVzZSBvZiB0aGUgRlRfQ0FMTEJBQ0tfREVGIG1hY3JvIGluIG9yZGVyIHRvIHN1cHBvcnQgMTYtYml0CisJY29tcGlsZXJzLgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogQ2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKwlGVF9DQUxMQkFDS19ERUYgbWFjcm8uCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChUVF9Mb2FkX0tlcm4pOiBUaGUga2VybiB0YWJsZSBsb2FkZXIgbm93IGVuc3VyZXMKKwl0aGF0IHRoZSBrZXJuaW5nIHRhYmxlIGlzIGNvcnJlY3RseSBzb3J0ZWQgKHNvbWUgcHJvYmxlbSBmb250cyBkb24ndAorCWhhdmUgYSBjb3JyZWN0IGtlcm4gdGFibGUpLgorCisyMDAxLTA2LTI2ICBXb2xmZ2FuZyBEb21yw7ZzZSAgPHBvcnRob3MuZG9tcm9lc2VAaGFyei5kZT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oIChGVF9HRVRfT0ZGM19MRSk6IEZpeCB0eXBvLgorCisyMDAxLTA2LTI0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChmdF9kaXY2NGJ5MzIpOiBGaXhlZCB0aGUgc291cmNlIHRvIHdvcmsKKwljb3JyZWN0bHkgb24gMTYtYml0IHN5c3RlbXMuCisKKzIwMDEtMDYtMjMgIEFudGhvbnkgRm9rICA8Zm9rQGRlYmlhbi5vcmc+CisKKwkqIGRlYmlhbi8qOiBBZGRlZCBEZWJpYW4gcGFja2FnZSBidWlsZCBkaXJlY3RvcnkgZm9yIDIuMC40LgorCisyMDAxLTA2LTIyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGRvY3MvUEFURU5UUzogQWRkZWQgcGF0ZW50cyBkaXNjbGFpbWVyLiAgVGhpcyBvbmUgd2FzIG1pc3NpbmchCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy90b2RvOiBVcGRhdGVkIGZvciB0aGUgdXBjb21pbmcgMi4wLjQgcmVsZWFzZS4KKworMjAwMS0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBBZGQgdHdvIG1vcmUgYEwncyB0bworCWNvbnN0YW50cy4KKwlBZGQgbWlzc2luZyBzZW1pY29sb25zLgorCisJKiBidWlsZHMvdG9wbGV2ZWwubWs6IERvIHNpbWlsYXIgY2hhbmdlIGFzIGZvcgorCWJ1aWxkcy91bml4L2RldGVjdC5tay4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9FTkNfVEFHKTogTmV3IHZlcnNpb24gdG8gbWFrZSBpdAorCWVhc2llciB0byByZWRlZmluZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9JTUFHRV9UQUcpOiBEaXR0by4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfZW5jb2RpbmdzKTogQWRkIGNhc3QuCisKKzIwMDEtMDYtMTkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sOgorCVVwZGF0ZWQgdGhlIFZpc3VhbCBDKysgcHJvamVjdCAoZm9yIHRoZSAyLjAuNCByZWxlYXNlKS4KKworCSogYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rOiBBZGRlZCBydWxlIGZvciBBSVggZGV0ZWN0aW9uICh3aGljaCB1c2VzCisJL3Vzci9zYmluL2luaXQgaW5zdGVhZCBvZiAvc2Jpbi9pbml0KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oLCBzcmMvKi8qZXJyKi5oOiBVcGRhdGVkIHNvbWUgb2YgdGhlCisJZXJyb3IgbWFjcm9zIHRvIHNpbXBsaWZ5IGhhbmRsaW5nIG9mIG5ldyBlcnJvciBzY2hlbWUuCisKKzIwMDEtMDYtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmggKEZUX0VSUk9SX01PRFVMRSk6IE5ldyBtYWNyby4KKworMjAwMS0wNi0xOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJUmVtb3ZpbmcgX2xvdHNfIG9mIGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gdGhlIG1vc3QgcGVkYW50aWMgd2FybmluZworCWxldmVscyBvZiBWaXN1YWwgQysrIGFuZCBCb3JsYW5kIEMrKyBhcmUgdXNlZC4gIFRvbyBtYW55IGZpbGVzIHRvIGJlCisJbGlzdGVkIGhlcmUsIGJ1dCBGVDIgbm93IGNvbXBpbGVzIHdpdGhvdXQgd2FybmluZ3Mgd2l0aCBWQysrIGFuZCB0aGUKKwlgL1c0JyB3YXJuaW5nIGxldmVsIChsaW50LXN0eWxlKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9OZXdfTWVtb3J5X0ZhY2UpOiBVcGRhdGVkCisJZG9jdW1lbnRhdGlvbi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oIChGVF9CT09MKTogTmV3IG1hY3JvLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg6IEFkZCAjcHJhZ21hIGZvciBWaXN1YWwgQysrCisJdG8gc3VwcHJlc3Mgd2FybmluZy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCAoRlRfR0VUX1NIT1JUX3tCRSxMRX0sCisJRlRfR0VUX09GRjNfe0JFLExFfSwgRlRfR0VUX0xPTkdfe0JFLExFfSk6IE5ldyBtYWNyb3MuCisJKE5FWFRfKik6IFVzZSB0aGVtLgorCSogc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSC4KKwkoRlRfTmV3X01lbW9yeV9GYWNlKTogQWRkIGBjb25zdCcgdG8gZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKKzIwMDEtMDYtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1pbm9yIGNsZWFudXBzIHRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5ncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNtYW5hZy5oIChGVENfTUFYX0JZVEVTX0RFRkFVTFQpOiBVc2UKKwlgTCcgZm9yIGNvbnN0YW50LgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoRlRfUkVOREVSX1BPT0xfU0laRSk6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bERpdik6IFVzZSBgTCcgZm9yIGNvbnN0YW50LgorCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9HZXRfQ0JveCk6IFJlbW92ZSBgZXJyb3InIHZhcmlhYmxlLgorCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoZnRfdHJpZ19hcmN0YW5fdGFibGUpOiBVc2UgYEwnIGZvciBjb25zdGFudHMuCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfRG9uZV9TaXplKTogRml4IHJldHVybiB2YWx1ZS4KKwkoRlRfU2V0X0NoYXJfU2l6ZSwgRlRfU2V0X1BpeGVsX1NpemVzLCBGVF9HZXRfS2VybmluZyk6IFJlbW92ZQorCXVudXNlZCBgbWVtb3J5JyB2YXJpYWJsZS4KKwkqIHNyYy9hdXRvaGludC9haGdseXBoLmMgKGFoX2dldF9vcmllbnRhdGlvbik6IFVzZSBgTCcgZm9yIGNvbnN0YW50LgorCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9oaW50X2VkZ2VzXzMsCisJYWhfaGludGVyX2FsaWduX2VkZ2VfcG9pbnRzKTogUmVtb3ZlIHVudXNlZCBgYmVmb3JlJyBhbmQgYGFmdGVyJworCXZhcmlhYmxlcy4KKwkoYWhfaGludGVyX2FsaWduX3dlYWtfcG9pbnRzKTogUmVtb3ZlIHVudXNlZCBgZWRnZV9saW1pdCcgdmFyaWFibGUuCisJKGFoX2hpbnRlcl9sb2FkKTogUmVtb3ZlIHVudXNlZCBgbmV3X2FkdmFuY2UnLCBgc3RhcnRfY29udG91cicsCisJYW5kIGBtZXRyaWNzJyB2YXJpYWJsZXMuCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoQ0ZGX0xvYWRfRW5jb2RpbmcpOiBSZW1vdmUgZGVhZCBjb2RlIHRvIGF2b2lkCisJY29tcGlsZXIgd2FybmluZy4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChDRkZfSW5pdF9GYWNlKTogUmVtb3ZlIHVudXNlZCBgYmFzZV9vZmZzZXQnCisJdmFyaWFibGUuCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKENGRl9QYXJzZV9DaGFyU3RyaW5ncyk6IFJlbW92ZSB1bnVzZWQKKwlgb3V0bGluZScgdmFyaWFibGUuCisJKGNmZl9jb21wdXRlX2JpYXMpOiBVc2UgYFUnIGZvciBjb25zdGFudC4KKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfZGVjcnlwdCk6IERpdHRvLgorCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChUMV9EZWNyeXB0KTogRGl0dG8uCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyU3RyaW5ncyk6IERpdHRvLgorCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfS2Vybik6IFJlbW92ZSB1bnVzZWQgYHZlcnNpb24nCisJdmFyaWFibGUuCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoVFRfTG9hZF9TQml0X0ltYWdlKTogUmVtb3ZlIHVudXNlZCBgdG9wJworCXZhcmlhYmxlLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IFJlbW92ZSB1bnVzZWQKKwlgbnVtX2NvbnRvdXJzJyBhbmQgYGluc19vZmZzZXQnIHZhcmlhYmxlcy4KKwkoY29tcHV0ZV9nbHlwaF9tZXRyaWNzKTogUmVtb3ZlIHVudXNlZCBgVG9wJyBhbmQgYHhfc2NhbGUnCisJdmFyaWFibGVzLgorCShUVF9Mb2FkX0dseXBoKTogUmVtb3ZlIHVudXNlZCBgbWVtb3J5JyB2YXJpYWJsZS4KKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5c19yYXN0ZXJfcmVuZGVyKTogVXNlIGBMJyBmb3IgY29uc3RhbnRzLgorCisyMDAxLTA2LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNYWtlIHRoZSBuZXcgZXJyb3Igc2NoZW1lIHNvdXJjZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgRlQgdmVyc2lvbnMKKwlieSBpbnRyb2R1Y2luZyBhbm90aGVyIGxheWVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmggKEZUX0VSUk9SREVGXywgRlRfTk9FUlJPUkRFRl8pOiBOZXcKKwltYWNyb3MuCisJKEZUX05PRVJST1JERUYpOiBSZW1vdmVkLgorCSogaW5jbHVkZS8qLyplcnIqLmg6IFVzZSBGVF9FUlJPUkRFRl8gYW5kIEZUX05PRVJST1JERUZfLgorCisyMDAxLTA2LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRU5DX1RBRyk6IE5ldyBtYWNyby4KKwkoRlRfRW5jb2RpbmdfKTogVXNlIGl0LgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX0lNQUdFX1RBRyk6IERlZmluZSBpdAorCWNvbmRpdGlvbmFsbHkuCisKKzIwMDEtMDYtMTQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCU1vZGlmaWVkIHRoZSBUcnVlVHlwZSBpbnRlcnByZXRlciB0byBsZXQgaXQgdXNlIHRoZSBuZXcKKwl0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyBwcm92aWRlZCBpbiBgZnR0cmlnb24uaCcuICBUaGlzIGdldHMgcmlkIG9mCisJc29tZSBvbGQgNjQtYml0IGNvbXB1dGF0aW9uIHJvdXRpbmVzLCBhcyB3ZWxsIGFzIG1hbnkgd2FybmluZ3Mgd2hlbgorCWNvbXBpbGluZyB0aGUgbGlicmFyeSB3aXRoIHRoZSBgbG9uZyBsb25nJyA2NC1iaXQgaW50ZWdlciB0eXBlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBVbmRlZmluZQorCUZUX0NPTkZJR19PUFRJT05fT0xEX0NBTENTLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaDogUmVhcnJhbmdlIHVzZSBvZgorCUZUX0NPTkZJR19PUFRJT05fT0xEX0NBTENTLgorCSogc3JjL2Jhc2UvZnRjYWxjLmM6IEFkZCBkZWNsYXJhdGlvbiBvZiBGVF9JbnQ2NCBpZgorCUZUX0NPTkZJR19PUFRJT05fT0xEX0NBTENTIGlzbid0IGRlZmluZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogVXNlIEZUX1RSSUdPTk9NRVRSWV9ILgorCShOb3JtKTogQWRkIGEgc3BlY2lhbCB2ZXJzaW9uIGlmIEZUX0NPTkZJR19PUFRJT05fT0xEX0NBTENTIGlzbid0CisJZGVmaW5lZC4KKwkoQ3VycmVudF9SYXRpbywgTm9ybWFsaXplKTogU2ltcGxpZnkgY29kZS4KKworMjAwMS0wNi0xMSAgTWlrZSBPd2VucyAgPE1Pd2Vuc0BhbXRkYXRhc291dGguY29tPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRGl2LCBGVF9EaXZGaXgsIEZUX1NxcnQ2NCk6IFJlbW92ZQorCWNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDAxLTA2LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5pbjogUmVuYW1lZCB0byAuLi4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogVGhpcyB0byBtYWtlIHN1cmUgdGhhdCBhdXRvY29uZiAyLjUwIGlzCisJbmVlZGVkLgorCVJ1biBgYXV0b3VwZGF0ZScgb24gaXQuCisJSW5jcmVhc2UgYHZlcnNpb25faW5mbycgdG8gNzowOjEuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisyMDAxLTA2LTA4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWRfZ2x5cGgpOiBGaXhlZCBhIGJ1ZyB0aGF0CisJY29ycnVwdGVkIHRyYW5zZm9ybWVkIGdseXBocyB0aGF0IHdlcmUgYXV0by1oaW50ZWQgKHRoZSB0cmFuc2Zvcm0KKwl3YXMgYXBwbGllZCB0d2ljZSkuCisKKwlGaXhlZCBhIGJ1ZyB0aGF0IHJldHVybmVkIGFuIGludmFsaWQgbGluZWFyIHdpZHRoIGZvciBjb21wb3NpdGUKKwlUcnVlVHlwZSBnbHlwaHMuCisKKwkqIGluY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9Mb2FkZXJfKTogVHdvIG5ldyBlbGVtZW50cyBgbGluZWFyJworCWFuZCBgbGluZWFyX2RlZicuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoLAorCWNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IFVzZSBpdC4KKworCSogaW5jbHVkZS9mdHR5cGVzLmggKEZUX0VSUk9SX0JBU0UpOiBOZXcgbWFjcm8uCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlLCBGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBVc2UgaXQKKwl0byBtYWtlIHNvdXJjZSBjb2RlIHdvcmsgd2l0aCB0aGUgbmV3IGVycm9yIHNjaGVtZSBpbXBsZW1lbnRlZCBieQorCVdlcm5lci4KKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9SZW5kZXIpOiBEaXR0by4KKworMjAwMS0wNi0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVXBkYXRpbmcgdG8gbGlidG9vbCAxLjQuMCBhbmQgYXV0b2NvbmYgMi41MC4KKworCSogYnVpbGRzL3VuaXgvbHRjb25maWc6IFJlbW92ZWQuCisJKiBidWlsZHMvdW5peC9sdG1haW4uc2gsIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5pbiwKKwlidWlsZHMvdW5peC9hY2xvY2FsLm00OiBVcGRhdGVkLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworMjAwMS0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQ29tcGxldGUgcmVkZXNpZ24gb2YgZXJyb3IgY29kZXMuICBQbGVhc2UgY2hlY2sgZnRtb2RlcnIuaCBmb3IgbW9yZQorCWRldGFpbHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmZXJycy5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHRlcnJvcnMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxZXJyb3JzLmg6IFJlbW92ZWQuICBSZXBsYWNlZCB3aXRoIGZpbGVzCisJbG9jYWwgdG8gdGhlIG1vZHVsZS4gIEFsbCBleHRyYSBlcnJvciBjb2RlcyBoYXZlIGJlZW4gbW92ZWQgdG8KKwlgZnRlcnJvcnMuaCcuCisKKwkqIHNyYy9zZm50L3R0cG9zdC5oOiBNb3ZlIGVycm9yIGNvZGVzIHRvIGBmdGVycm9ycy5oJy4KKworCSogc3JjL2F1dG9oaW50L2FoZXJyb3JzLmgsIHNyYy9jYWNoZS9mdGNlcnJvci5oLCBzcmMvY2ZmL2NmZmVycnMuaCwKKwlzcmMvY2lkL2NpZGVycnMuaCwgc3JjL3BjZi9wY2ZlcnJvci5oLCBzcmMvcHNhdXgvcHNhdXhlcnIuaCwKKwlzcmMvcHNuYW1lcy9wc25hbWVyci5oLCBzcmMvcmFzdGVyL3Jhc3RlcnJzLmgsIHNyYy9zZm50L3NmZXJyb3JzLmgsCisJc3JjL3Ntb290aC9mdHNtZXJycy5oLCBzcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCwKKwlzcmMvdHlwZTEvdDFlcnJvcnMuaCwgc3JjL3dpbmZvbnRzL2ZudGVycnMuaDogTmV3IGZpbGVzIGRlZmluaW5nIHRoZQorCWVycm9yIG5hbWVzIGZvciB0aGUgbW9kdWxlIGl0IGJlbG9uZ3MgdG8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaDogTmV3IGZpbGUsIGRlZmluaW5nIHRoZSBtb2R1bGUgZXJyb3IKKwlvZmZzZXRzLiAgSXRzIHN0cnVjdHVyZSBpcyBzaW1pbGFyIHRvIGBmdGVycm9ycy5oJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oIChGVF9OT0VSUk9SREVGKTogTmV3IG1hY3JvLgorCShGVF9FUlJPUkRFRik6IFJlZGVmaW5lZCB0byB1c2UgbW9kdWxlIGVycm9yIG9mZnNldHMuCisJQWxsIGludGVybmFsIGVycm9yIGNvZGVzIGFyZSBub3cgcHVibGljOyB1bnVzZWQgZXJyb3IgY29kZXMgaGF2ZQorCWJlZW4gcmVtb3ZlZCwgc29tZSBhcmUgbmV3LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9NT0RVTEVfRVJST1JTX0gpOiBOZXcKKwltYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyk6IE5ldyBtYWNyby4KKworCUFsbCBvdGhlciBzb3VyY2UgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgZXJyb3IgY29kZXM7CisJc29tZSBhbHJlYWR5IGV4aXN0aW5nIChpbnRlcm5hbCkgZXJyb3IgY29kZXMgbG9jYWwgdG8gYSBtb2R1bGUgaGF2ZQorCWJlZW4gcmVuYW1lZCB0byBnaXZlIHRoZW0gdGhlIHNhbWUgbmFtZSBhcyBpbiB0aGUgYmFzZSBtb2R1bGUuCisKKwlBbGwgbWFrZSBmaWxlcyBoYXZlIGJlZW4gdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBsb2NhbCBlcnJvciBmaWxlcy4KKworMjAwMS0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2lkL2NpZHRva2Vucy5oOiBSZXBsYWNlZCB3aXRoLi4uCisJKiBzcmMvY2lkL2NpZHRva2VuLmg6IFRoaXMgZmlsZSBmb3IgOCszIGNvbnNpc3RlbmN5LgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmM6IFVzZSBtYWNyb3MgZm9yIGhlYWRlciBmaWxlIG5hbWVzLgorCisJKiBzcmMvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIChUVF9Ib3JpSGVhZGVyXywgVFRfVmVydEhlYWRlcl8pOgorCUZpeCBsZW5ndGggb2YgYFJlc2VydmVkJyBhcnJheS4gIE5vdGUgdGhhdCB0aGlzIGlzbid0IHRoZSByZWFsIGZpeAorCXNpbmNlIHJlY2VudCBPcGVuVHlwZSBzcGVjcyBoYXZlIGludHJvZHVjZWQgYSBgQ2FyZXRPZmZzZXQnIGZpZWxkCisJaW5zdGVhZCBvZiB0aGUgZmlyc3QgcmVzZXJ2ZWQgYnl0ZS4KKworMjAwMS0wNS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBJTlNUQUxMOiBNaW5vciBmaXhlcy4KKworCisJKiBWZXJzaW9uIDIuMC4zIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyMDAxLTA1LTI5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIElOU1RBTEwsIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMS0wNS0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJTW92ZWQgc2V2ZXJhbCBkb2N1bWVudHMgZnJvbSB0aGUgdG9wLWxldmVsIHRvIHRoZSBgZG9jcycgZGlyZWN0b3J5LgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfRGl2Rml4KTogU21hbGwgZml4IHRvIHJldHVybiB2YWx1ZS4KKworMjAwMS0wNS0xNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogRml4ZWQgYSBidWcgaW4gdGhlCisJY29tcG9zaXRlIGxvYWRlci4gIFNwb3R0ZWQgYnkgS2VpdGggUGFja2FyZC4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HbHlwaExvYWRlcl9DaGVja19Qb2ludHMsCisJRlRfR2x5cGhMb2FkZXJfQ2hlY2tfU3ViZ2x5cGhzKTogRGl0dG8uCisKKzIwMDEtMDUtMTQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUZpeGVkIHRoZSBpbmNvcnJlY3QgYmx1ZSB6b25lIGNvbXB1dGF0aW9ucywgYW5kIGltcHJvdmVkIHRoZQorCWNvbXBvc2l0ZSBzdXBwb3J0LiAgTm90ZSB0aGF0IHRoZXNlIGNoYW5nZXMgcmVzdWx0IGluIGltcHJvdmVkCisJcmVuZGVyaW5nLCB3aGlsZSBzb21ldGltZXMgaW50cm9kdWNpbmcgdGhlaXIgb3duIGFydGVmYWN0cy4gIFRoaXMgaXMKKwlwcm9iYWJseSB0aGUgbGFzdCBiaWcgY2hhbmdlIHRvIHRoZSBhdXRvaGludGVyIGJlZm9yZSB0aGUKKwlpbnRyb2R1Y3Rpb24gb2YgYSBjb21wbGV0ZSByZXBsYWNlbWVudC4KKworCSogc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMgKHNvcnRfdmFsdWVzKTogRml4IGxvb3AuCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jOiBSZW1vdmVkIHNvbWUgb2Jzb2xldGUgY29kZS4KKwkoYWhfb3V0bGluZV9jb21wdXRlX2VkZ2VzKTogTW9kaWZ5IGNvZGUgdG8gc2V0IHRoZSBhaF9lZGdlX3JvdW5kCisJZmxhZy4KKwkoYWhfb3V0bGluZV9jb21wdXRlX2JsdWVfZWRnZXMpOiBBZGQgY29kZSB0byBjb21wdXRlIGFjdGl2ZSBibHVlCisJem9uZXMuCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9nbHlwaF9sb2FkKTogQ2hhbmdlIGxvYWRfZmxhZ3MKKwl2YWx1ZS4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX0RpdkZpeCk6IEZpeGVkIGEgYnVnIGluIHRoZSA2NC1iaXQgY29kZSB0aGF0CisJY3JlYXRlZCBpbmNvcnJlY3Qgc2NhbGUgZmFjdG9ycyEKKwkoRlRfUm91bmRfRml4LCBGVF9DZWlsRml4LCBGVF9GbG9vckZpeCk6IE1pbm9yIGltcHJvdmVtZW50cy4KKworMjAwMS0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oOiBGVEJCT1hfSCAtPiBfX0ZUQkJPWF9IX18uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmg6IF9fRlRfVFJJR09OT01FVFJZX0hfXyAtPgorCV9fRlRUUklHT05fSF9fLgorCUluY2x1ZGUgRlRfRlJFRVRZUEVfSC4KKwlCZWF1dGlmaWVkOyBhZGRlZCBjb3B5cmlnaHQuCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jOiBCZWF1dGlmaWVkOyBhZGRlZCBjb3B5cmlnaHQuCisKKzIwMDEtMDUtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfZm9udF9tYXRyaXgpLCBzcmMvY2lkL2NpZGxvYWQuYworCShwYXJzZV9mb250X21hdHJpeCksIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZm9udF9tYXRyaXgpOiBGaXhlZAorCXRoZSBpbmNvcnJlY3QgRU0gc2l6ZSBjb21wdXRhdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oLCBzcmMvYmFzZS9mdHRyaWdvbi5jOiBOZXcgZmlsZXMsCisJYWRkaW5nIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIHRvIHRoZSBjb3JlIEFQSSAodXNpbmcgQ29yZGljCisJYWxnb3JpdGhtcykuCisJKiBzcmMvYmFzZS9mdGJhc2UuYywgc3JjL2Jhc2UvSmFtZmlsZSwgc3JjL2Jhc2UvcnVsZXMubWs6IFVzZSB0aGVtLgorCisJKiBidWlsZHMvbmV3bGluZTogTmV3IGZpbGUuCisJKiBidWlsZHMvdG9wX2xldmVsLm1rLCBidWlsZHMvZGV0ZWN0Lm1rOiBVc2UgaXQuICBUaGlzIGZpeGVzCisJcHJvYmxlbXMgd2l0aCBNYWtlIG9uIFdpbmRvd3MgMjAwMCwgYXMgd2VsbCBhcyBwcm9ibGVtcyB3aGVuIGBtYWtlCisJZGlzdGNsZWFuJyBpcyBpbnZva2VkIG9uIGEgbm9uLVVuaXggcGxhdGZvcm0gd2hlbiB0aGVyZSBpcyBubworCWBjb25maWcubWsnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rOiBGaXhlZCBhIHByb2JsZW0gd2l0aCBvYmplY3QgZGVsZXRpb25zIHVuZGVyCisJRG9zL1dpbmRvd3MvT1MvMiBzeXN0ZW1zLgorCisJQWRkZWQgbmV3IGRpcmVjdG9yeSB0byBob2xkIHRvb2xzIGFuZCB0ZXN0IHByb2dyYW1zLgorCisJKiBkb2NzL2RvY21ha2VyLnB5LCBkb2NzL2dsbmFtZXMucHk6IE1vdmVkIHRvLi4uCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIucHksIHNyYy90b29scy9nbG5hbWVzLnB5OiBUaGlzIHBsYWNlLgorCSogc3JjL3Rvb2xzL2NvcmRpYy5weTogTmV3IGZpbGUgdXNlZCB0byBjb21wdXRlIGFyY3RhbmdlbnQgdGFibGUKKwluZWVkZWQgYnkgZnR0cmlnb24uYy4KKwkqIHNyYy90b29scy90ZXN0X2Jib3guYywgc3JjL3Rvb2xzL3Rlc3RfdHJpZy5jOiBOZXcgdGVzdCBmaWxlcy4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyLnB5OiBJbXByb3ZlZCB0aGUgc2NyaXB0IHRvIGFkZCB0aGUgY3VycmVudCBkYXRlCisJYXQgdGhlIGZvb3RlciBvZiBlYWNoIHdlYiBwYWdlICh1c2VmdWwgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorCXZlcnNpb25zKS4KKworCSogSmFtZmlsZTogRml4ZWQgaW5jb3JyZWN0IEhEUk1BQ1JPIGFyZ3VtZW50LgorCisJKiBUT0RPOiBSZW1vdmVkIHRoZSBjdWJpYyBhcmMgYmJveCBjb21wdXRhdGlvbiBub3RlLCBzaW5jZSBpdCBoYXMgYmVlbgorCWZpeGVkIHJlY2VudGx5LgorCSogc3JjL2Jhc2UvZnRiYm94LmMgKHRlc3RfY3ViaWNfemVybyk6IFJlbmFtZWQgdG8uLi4KKwkodGVzdF9jdWJpY19leHRyZW1hKTogVGhpcyBmdW5jdGlvbi4gIFVzZSBgVUwnIGZvciB1bnNpZ25lZCBsb25nCisJY29uc3RhbnRzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6CisJRm9ybWF0dGluZy4KKworMjAwMS0wNS0xMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogRml4ZWQgYSBzbWFsbCBtZW1vcnkgbGVhaworCXdoaWNoIGhhcHBlbmVkIHdoZW4gdHJ5aW5nIHRvIG9wZW4gMC1zaXplIGZvbnQgZmlsZXMhCisKKzIwMDEtMDUtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaDogTW92ZSBkZWNsYXJhdGlvbiBvZgorCUZUX1NxcnRGaXhlZCgpIG91dCBvZiBgI2lmZGVmIEZUX0xPTkc2NCcuCisKKzIwMDEtMDUtMDggIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaSAgPEZyYW5jZXNjby5aYXBwYS5OYXJkZWxsaUBlbnMuZnI+CisKKwkqIHNyYy9wY2Zkcml2ZXIuYyAoUENGX0xvYWRfR2x5cGgpOiBGaXhlZCBpbmNvcnJlY3QgYml0bWFwIHdpZHRoCisJY29tcHV0YXRpb24uCisKKzIwMDEtMDUtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9kb2NtYWtlci5weTogVXBkYXRlZCB0aGUgRG9jTWFrZXIgc2NyaXB0IGluIG9yZGVyIHRvIGFkZAorCWNvbW1hbmQgbGluZSBvcHRpb25zICgtLW91dHB1dCwtLXByZWZpeCwtLXRpdGxlKSwgZml4IHRoZSBlcnJvbmVvdXMKKwlsaW5lIG51bWJlcnMgcmVwb3J0ZWQgZHVyaW5nIGVycm9ycyBhbmQgd2FybmluZ3MsIGFuZCBvdGhlcgorCWZvcm1hdHRpbmcgaXNzdWVzLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRGl2LCBGVF9NdWxGaXgsIEZUX0RpdkZpeCk6IFZhcmlvdXMgdGlueQorCWZpeGVzIHJlbGF0ZWQgdG8gcm91bmRpbmcgaW4gNjQtYml0cyByb3V0aW5lcyBhbmQKKwlwc2V1ZG8tYG9wdGltaXphdGlvbnMnLgorCisyMDAxLTA0LTI3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0N1YmljX0NoZWNrKTogRml4ZWQgdGhlIGNvZWZmaWNpZW50CisJbm9ybWFsaXphdGlvbiBhbGdvcml0aG0gKGludmFsaWQgZmluYWwgYml0IHBvc2l0aW9uLCBhbmQgaW52YWxpZAorCXNoaWZ0IGNvbXB1dGF0aW9uKS4KKworMjAwMS0wNC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsIGJ1aWxkcy91bml4L2NvbmZpZy5zdWI6IFVwZGF0ZWQgdG8KKwlsYXRlc3QgdmVyc2lvbnMgZnJvbSBnbnUub3JnLgorCisJKiBidWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tazogQWRkIGAtV25vLWxvbmctbG9uZycgZmxhZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaDogRGVmaW5lIEZUX1NxcnRGaXhlZCgpCisJdW5jb25kaXRpb25hbGx5LgorCSogc3JjL2Jhc2UvZnRiYm94LmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jOiBGaXggKHBvdGVudGlhbCkgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDEtMDQtMjYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX1NxcnRGaXhlZCk6IENvcnJlY3RlZC9vcHRpbWl6ZWQgdGhlIDMyLWJpdAorCWZpeGVkLXBvaW50IHNxdWFyZSByb290IGNvbXB1dGF0aW9uLiAgSXQgaXMgbm93IHVzZWQgZXZlbiB3aXRoCisJNjQtYml0cyBpbnRlZ2VycywgYXMgaXQgaXMgX211Y2hfIGZhc3RlciB0aGFuIGNhbGxpbmcgRlRfU3FydDY0IDotKQorCisJKiBzcmMvYmFzZS9mdGJib3guYzogUmVtb3ZlZCBpbnZhbGlkIGAjaW5jbHVkZSBGVF9CRVpJRVJfSCcgbGluZS4KKworMjAwMS0wNC0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoQkJveF9DdWJpY19DaGVjayk6IFJld3JvdGUgZnVuY3Rpb24gdG8gdXNlCisJZGlyZWN0IGNvbXB1dGF0aW9ucyB3aXRoIDE2LjE2IHZhbHVlcyBpbnN0ZWFkIG9mIHN1Yi1kaXZpc2lvbnMuICBJdAorCWlzIG5vdyBzbG93ZXIsIGJ1dCBwcm92ZXMgYSBwb2ludCA6LSkKKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jLCBzcmMvc21vb3RoL2Z0Z3JheXMuYywgc3JjL2Jhc2UvZnRiYm94LmM6CisJRml4ZWQgdGhlIELDqXppZXIgc3RhY2sgZGVwdGhzLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KTogTWlub3Igcm91bmRpbmcgZml4LgorCisJKiBidWlsZHMvYmVvczogQWRkZWQgQmVPUy1zcGVjaWZpYyBmaWxlcyB0byB0aGUgb2xkIGJ1aWxkIHN5c3RlbQorCShubyBjaGFuZ2VzIHdlcmUgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgQmVPUyBpbiB0aGUgSmFtZmlsZSB0aG91Z2gpLgorCisyMDAxLTA0LTIwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGZ0Y29uZmlnLmgsIGZ0b3B0aW9uLmg6IFVwZGF0ZWQgYGZ0Y29uZmlnLmgnIHRvIGRldGVjdCA2NC1iaXQgaW50CisJdHlwZXMgb24gcGxhdGZvcm1zIHdoZXJlIEF1dG9jb25mIGlzIG5vdCBhdmFpbGFibGUpLiAgQWxzbyByZW1vdmVkCisJRlRDQUxDX1VTRV9MT05HX0xPTkcgYW5kIHJlcGxhY2VkIGl0IHdpdGgKKwlGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0LgorCisJKiBidWlsZHMvd2luMzIvZnJlZXR5cGUuZHNwOiBVcGRhdGVkIHRoZSBWaXN1YWwgQysrIHByb2plY3QgZmlsZS4KKwlEb2Vzbid0IGNyZWF0ZSBhIERMTCB5ZXQuCisKKwkqIGNmZmdsb2FkLmM6IFJlbW92ZWQgYSBjb21waWxhdGlvbiB3YXJuaW5nLgorCisyMDAxLTA0LTEwICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiB0MWxvYWQuYyAocGFyc2VfY2hhcnN0cmluZ3MpOiBDaGFuZ2VkIGNvZGUgZm9yIHBsYWNpbmcgLm5vdGRlZgorCWdseXBoIGludG8gc2xvdCAwIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIGhhdmUgYSBtZW1vcnkgYWNjZXNzCisJdmlvbGF0aW9uLgorCisJKiB0MWxvYWQuaDogSW4gc3RydWN0dXJlIFQxX0xvYWRlciwgYWRkZWQgc3dhcF90YWJsZSAob2YgdHlwZQorCVBTX1RhYmxlKSB0byBmYWNpbGl0YXRlIHBsYWNpbmcgdGhlIC5ub3RkZWYgZ2x5cGggaW50byBzbG90IDAuCisKKzIwMDEtMDQtMTAgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaSAgPGZyYW5jZXNjby56YXBwYS5uYXJkZWxsaUBlbnMuZnI+CisKKwkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKFBDRl9HZXRfQ2hhcl9JbmRleCk6IEZpeCByZXR1cm4gdmFsdWUuCisKKzIwMDEtMDQtMDkgIExhdXJlbmNlIFdpdGhlcnMgIDxsd2l0aGVyc0Bsd2l0aGVycy5kZW1vbi5jby51az4KKworCSogYnVpbGRzL2Rvcy9kZXRlY3QubWs6IEFkZCBzdXBwb3J0IGZvciBiYXNoLgorCisyMDAxLTA0LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9vczIvKi5tazogVGhlc2UgZmlsZXMgaGF2ZSBiZWVuIGZvcmdvdHRlbiB0byB1cGRhdGUgdG8KKwl0aGUgc3RydWN0dXJlIG9mIHNpbWlsYXIgbWFrZWZpbGVzLgorCSogYnVpbGRzL2Rvcy8qLm1rOiBEaXR0by4KKwkqIGJ1aWxkcy9hbnNpLyoubWs6IERpdHRvLgorCisJKiBidWlsZHMvd2luMzIvd2luMzItZGVmLm1rIChCVUlMRCk6IEZpeCB0eXBvLgorCisJKiBidWlsZHMvY29tcGlsZXIvKi5tayAoQ0xFQU5fTElCUkFSWSk6IERvbid0IHVzZSBOT19PVVRQVVQuCisJVGhpcyBpcyBhbHJlYWR5IHVzZWQgaW4gdGhlIGxpbmtfKi5tayBmaWxlcy4KKworMjAwMS0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvKi9KYW1maWxlOiBTbGlnaHQgY2hhbmdlcwl0byBtYWtlIGZpbGVzIG1vcmUgY3J5cHRpYy4KKworMjAwMS0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBKYW1maWxlLCBzcmMvSmFtZmlsZSwgc3JjLyovSmFtZmlsZTogRm9ybWF0dGVkLiAgU2xpZ2h0IGNoYW5nZXMKKwl0byBnaXZlIGZpbGVzIGlkZW50aWNhbCBzdHJ1Y3R1cmUuCisKKzIwMDEtMDQtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogQ0hBTkdFUzogUmVmb3JtYXR0ZWQsIG1pbm9yIGZpeGVzLgorCSogVE9ETzogVXBkYXRlZC4KKwkqIFJFQURNRTogRm9ybWF0dGluZy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogRm9ybWF0dGluZy4KKworCSogSmFtZmlsZTogRml4IHR5cG8uCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYzogTW92ZSBlcnJvciBjb2RlICNkZWZpbmVzIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZmVycnMuaDogVGhpcyBmaWxlLgorCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZm9ianMuYywgc3JjL2NmZi9jZmZsb2FkLmM6IFJlcGxhY2VkCisJYEZUX0Vycl8qJyB3aXRoIGBDRkZfRXJyXyonLgorCSogc3JjL2NpZC9jaWRwYXJzZS5jOiBSZXBsYWNlZCBgRlRfRXJyXyonIHdpdGggYFQxX0Vycl8qJy4KKwkqIHNyYy9wc2F1eC9wc29ianMuYywgc3JjL3BzYXV4L3QxZGVjb2RlLmM6IERpdHRvLgorCSogc3JjL3NmbnQvc2ZvYmNzLmMsIHNyYy9zZm50L3R0bG9hZC5jOiBSZXBsYWNlZCBgRlRfRXJyXyonIHdpdGgKKwlgVFRfRXJyXyonLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywgc3JjL3RydWV0eXBlL3R0b2Jqcy5jOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MWdsb2FkLmMsIHNyYy90eXBlMS90MWxvYWQuYywgc3JjL3R5cGUxL3Qxb2Jqcy5jLAorCXNyYy90eXBlMS90MXBhcnNlLmM6IFJlcGxhY2VkIGBGVF9FcnJfKicgd2l0aCBgVDFfRXJyXyonLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZmVycnMuaDogQWRkCisJYENGRl9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdCcuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxZXJyb3JzLmg6IEFkZAorCWBUMV9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdCcuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0ZXJyb3JzLmg6IEFkZAorCWBUVF9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdCcuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBBZGQgYGNmZl8qX2VuY29kaW5nJyBhbmQgYGNmZl8qX2NoYXJzZXQnCisJcmVmZXJlbmNlcy4KKwkqIHNyYy9wc2F1eC9wc29ianMuYzogSW5jbHVkZSBgRlRfSU5URVJOQUxfVFlQRTFfRVJST1JTX0gnLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX0luaXRfRmFjZSwgQ0ZGX0RvbmVfRmFjZSk6IFVzZQorCUZUX0xPQ0FMX0RFRi4KKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChDSURfRG9uZV9Ecml2ZXIpOiBEaXR0by4KKwkqIHNyYy90cnV0eXBlL3R0b2Jqcy5jIChUVF9Jbml0X0ZhY2UsIFRUX0RvbmVfRmFjZSwgVFRfSW5pdF9TaXplKToKKwlEaXR0by4KKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRG9uZV9Ecml2ZXIpOiBEaXR0by4KKwkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKFBDRl9Eb25lX0ZhY2UpOiBEaXR0by4KKwkqIHNyYy9wY2YvcGNmLmg6IFVzZSBGVF9MT0NBTCBmb3IgYFBDRl9Eb25lX0ZhY2UnLgorCisyMDAxLTA0LTAyICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9NZXRyaWNzKTogRml4IGFuIGltcHJvcGVyIHBvaW50ZXIKKwlkZXJlZmVyZW5jZS4gIFN1Ym1pdHRlZCBieSBIZXJiZXJ0IER1ZXJyIDxkdWVyckBzdW4uY29tPi4KKworMjAwMS0wMy0yNiAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogQ2hhbmdlZCBoZXhhZGVjaW1hbAorCWNvbnN0YW50cyB0byB1c2Ugc3VmZml4IFUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBIUC1VWCdzIGM4OQorCWNvbXBpbGVyLiAgU3VibWl0dGVkIGJ5IEcuVy4gTHVjYXMgPGdsdWNhc0Bzb25hbHlzdHMuY29tPi4KKworMjAwMS0wMy0yNCAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCSogSmFtcnVsZXMsIEphbWZpbGUsIHNyYy9KYW1maWxlLCBzcmMvKi9KYW1maWxlOiBBZGRpbmcgamFtZmlsZXMgdG8KKwl0aGUgc291cmNlIHRyZWUuICBTZWUgd3d3LmZyZWV0eXBlLm9yZy9qYW0vaW5kZXguaHRtbCBmb3IgZGV0YWlscy4KKworCisJKiBWZXJzaW9uIDIuMC4yIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyMDAxLTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy93aW4zMi9kZXRla3QubWs6IEZpeCAuUEhPTlkgdGFyZ2V0IGZvciBJbnRlbCBjb21waWxlci4KKworMjAwMS0wMy0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCwgaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oOgorCVJlbmFtZWQgYGZ0bmFtZXMuaCcgdG8gYGZ0c25hbWVzLmgnLCBhbmQgRlRfTkFNRVNfSCB0bworCUZUX1NGTlRfTkFNRVNfSC4KKworCSogZG9jcy9kb2NtYWtlci5weTogQWRkZWQgZ2VuZXJhdGlvbiBvZiBJTkRFWCBsaW5rIGluIHRhYmxlIG9mCisJY29udGVudHMuCisKKwkqIElOU1RBTEwsIGRvY3MvQlVJTEQ6IFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBpbmRpY2F0ZSB0aGF0IHRoZQorCWNvbXBpbGF0aW9uIHByb2Nlc3MgaGFzIGNoYW5nZWQgc2xpZ2h0bHkgKG5vIG1vcmUgYHNyYycgcmVxdWlyZWQgaW4KKwl0aGUgaW5jbHVkZSBwYXRoKS4KKworCSogYnVpbGRzLyovKi1kZWYubWs6IENoYW5nZWQgdGhlIG9iamVjdHMgZGlyZWN0b3J5IGZyb20gYG9iaicgdG8KKwlgb2JqcycuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg6IFJlbW92ZWQgb2Jzb2xldGUgbWFjcm9zIGxpa2UKKwlGVF9TT1VSQ0VfRklMRSwgZXRjLiBhbmQgYWRkZWQgY2FjaGUtc3BlY2lmaWMgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdAorCXdlcmUgcHJldmlvdXNseSBkZWZpbmVkIGluIDxmcmVldHlwZS9mdGNhY2hlLmg+LiAgQWRkZWQgY29tbWVudHMgdG8KKwliZSBpbmNsdWRlZCBpbiBhIG5ldyBBUEkgUmVmZXJlbmNlIHNlY3Rpb24uCisKKwkqIHNyYy8qLyo6IFJlbW92ZWQgdGhlIHVzZSBvZiBGVF9TT1VSQ0VfRklMRSwgZXRjLiAgTm93LCBlYWNoCisJY29tcG9uZW50IG5lZWRzIHRvIGFkZCBpdHMgb3duIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRoIGF0CisJY29tcGlsZSB0aW1lLiAgTW9kaWZpZWQgYWxsIGBydWxlcy5taycgYW5kIGBkZXNjcmlwLm1tcycKKwlhY2NvcmRpbmdseS4KKworMjAwMS0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuaW46IEFkZCAkZnRfdmVyc2lvbi4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogVXNlIGl0LgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBVcGRhdGVkLgorCisyMDAxLTAzLTE5ICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2ZvbnRfbWF0cml4KTogQXNzaWduIHRoZSB1bml0cyBwZXIgZW0KKwl2YWx1ZSBhbiB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgZmlyc3QgYnkgc2hpZnRpbmcgcmlnaHQgMTYgYml0cywKKwl0aGVuIGJ5IGNhc3RpbmcgdGhlIHJlc3VsdHMgdG8gRlRfVVNob3J0LgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9mb250X2Jib3gpOiBBc3NpZ24gdGhlIHVuaXRzIHBlciBlbQorCXZhbHVlIGFuIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBmaXJzdCBieSBzaGlmdGluZyByaWdodCAxNiBiaXRzLAorCXRoZW4gYnkgY2FzdGluZyB0aGUgcmVzdWx0cyB0byBGVF9VU2hvcnQuCisKKzIwMDEtMDMtMTcgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5jLCBzcmMvY2lkL2NpZGxvYWQuYywgc3JjL3BjZi9wY2ZyZWFkLmMsCisJc3JjL3R5cGUxL3QxbG9hZC5jLCBzcmMvdHlwZTEvdDFvYmpzLmM6IEFkZGVkIGEgZmV3IGNhc3RzIHRvIHJlbW92ZQorCWNvbXBpbGVyIHdhcm5pbmdzIGluIHBlZGFudGljIG1vZGVzLgorCisJKiBpbmNsdWRlL2NvbmZpZy9mdDJidWlsZC5oLCBpbmNsdWRlL2NvbmZpZy9mdGhlYWRlci5oOiBUaGUgZmlsZQorCWBmdDJidWlsZC5oJyB3YXMgcmVuYW1lZCB0byBgZnRoZWFkZXIuaCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlCisJdG9wLWxldmVsIDxmdDJidWlsZC5oPi4KKworCSogaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaDogQWRkZWQgbmV3IHNlY3Rpb24gZGVzY3JpYmluZyB0aGUgI2luY2x1ZGUKKwltYWNyb3MuCisKKzIwMDEtMDMtMTcgIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZvbnRfYmJveCk6IE9idGFpbiByb3VuZGVkIEZUX0ZpeGVkCisJdmFsdWVzIGZvciB0aGUgYm91bmRpbmcgYm94IG51bWJlcnMuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChDRkZfSW5pdF9GYWNlKTogV2hlbiBwcm9jZXNzaW5nIGEgQ0ZGL0NFRiBmb250LAorCXNldCBgcm9vdC0+YXNjZW5kZXInIChgcm9vdC0+ZGVzY2VuZGVyJykgdG8gdGhlIGludGVnZXIgcGFydCBvZgorCWByb290LT5iYm94LnlNYXgnIChgcm9vdC0+YmJveC55TWluJywgcmVzcGVjdGl2ZWx5KS4KKworMjAwMS0wMy0xNiAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChnZXRfY2ZmX2dseXBoX25hbWUpOiAgTmV3IGZ1bmN0aW9uLiAgVXNlZCBpbgorCWNmZl9nZXRfaW50ZXJmYWNlIHRvIGZhY2lsaXRhdGUgZ2V0dGluZyBhIGdseXBoIG5hbWUgZm9yIGdseXBoIGluZGV4CisJdmlhIEZUX0dldF9HbHlwaF9OYW1lKCkuCisKKwkoY2ZmX2dldF9pbnRlcmZhY2UpOiBBZGRlZCBzdXBwb3J0IGZvciBnZXR0aW5nIGEgZ2x5cGggbmFtZSB2aWEgdGhlCisJYGdseXBoX25hbWUnIG1vZHVsZSBpbnRlcmZhY2UuICBVc2VzIHRoZSBuZXcgZnVuY3Rpb24KKwlnZXRfY2ZmX2dseXBoX25hbWUoKS4KKwlTdWJtaXR0ZWQgYnkgU2FuZGVyIHZhbiBkZXIgV2FsIDxzdmR3YWxAeHM0YWxsLm5sPi4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKENGRl9Jbml0X0ZhY2UpOiBMb2dpY2FsIG9yIHRoZSBmYWNlIGZsYWdzIHdpdGgKKwlGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgb25seSBpZiBGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTIGlzCisJbm90IGRlZmluZWQuICBUaGlzIGlzIHRvIGFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIGEgZ2x5cGggbmFtZSBmcm9tIGEKKwlnbHlwaCBpbmRleCB2aWEgRlRfR2V0X0dseXBoX05hbWUoKS4KKwlTdWJtaXR0ZWQgYnkgU2FuZGVyIHZhbiBkZXIgV2FsIDxzdmR3YWxAeHM0YWxsLm5sPi4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChDRkZfUGFyc2VfQ2hhclN0cmluZ3MpOiBBZGRlZCBzdXBwb3J0IGZvcgorCWRlcHJlY2F0ZWQgb3BlcmF0b3IgYGRvdHNlY3Rpb24nLgorCVN1Ym1pdHRlZCBieSBTYW5kZXIgdmFuIGRlciBXYWwgPHN2ZHdhbEB4czRhbGwubmw+LgorCisyMDAxLTAzLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jIChUMV9EZWNvZGVyX1BhcnNlX0NoYXJzdHJpbmdzKTogRml4IGVycm9yCisJbWVzc2FnZXMuCisKKwkqIElOU1RBTEwsIGRvY3MvQlVJTEQ6IFdlIG5lZWQgR05VIG1ha2UgMy43OC4xIG9yIG5ld2VyLgorCisyMDAxLTAzLTEyICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg6ICBDaGFuZ2VkIHRoZSBsZW5JViBtZW1iZXIgb2YKKwl0aGUgVDFfRGVjb2Rlcl8gc3RydWN0IHRvIGJlIGFuIEZUX0ludCBpbnN0ZWFkIG9mIGFuIEZUX1VJbnQuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jIChUMV9EZWNvZGVyX1BhcnNlX0NoYXJzdHJpbmdzKTogIEFkanVzdAorCWZvciBsZW5JViBzZWVkIGJ5dGVzIGF0IHRoZSBzdGFydCBvZiBhIGRlY3J5cHRlZCBzdWJyb3V0aW5lLgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX3JlYWRfc3VicnMpOiBEZWNyeXB0IHN1YnJvdXRpbmVzIG9ubHkKKwlpZiBsZW5JViA+PSAwLgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9sb2FkX2dseXBoKTogRGVjcnlwdCBjaGFyc3RyaW5ncyBvbmx5CisJaWYgbGVuSVYgPj0gMC4KKworMjAwMS0wMy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBUT0RPOiBVcGRhdGVkLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYzogUHV0IFJFQURfRmllbGRzKCkgYWx3YXlzIGluIGEgY29uZGl0aW9uYWwgdG8KKwlhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAwMS0wMy0xMCAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogVE9ETzogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogQWRkZWQgcHJvdG90eXBlcyBhbmQgbm90ZXMgZm9yCisJdGhyZWUgbmV3IGZ1bmN0aW9uczogRlRfUm91bmRGaXgsIEZUX0NlaWxGaXgsIGFuZCBGVF9GbG9vckZpeC4KKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9Sb3VuZEZpeCwgRlRfQ2VpbEZpeCwgRlRfRmxvb3JGaXgpOiBBZGRlZAorCWltcGxlbWVudGF0aW9uIGNvZGUuCisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChDSURfSW5pdF9GYWNlKTogVXNlIGNhbGN1bGF0ZWQgdW5pdHNfcGVyX0VNLAorCWFuZCBpZiB0aGF0IGlzIG5vdCBhdmFpbGFibGUsIGRlZmF1bHQgdG8gMTAwMCB1bml0cyBwZXIgRU0uICBDaGFuZ2VkCisJYXNzaWdubWVudCBjb2RlIGZvciBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHZhbHVlcy4KKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChwYXJzZV9mb250X21hdHJpeCk6IEFkZGVkIHVuaXRzX3Blcl9FTQorCXByb2Nlc3NpbmcuCisJKHBhcnNlX2ZvbnRfYmJveCk6IENoYW5nZWQgdG8gdXNlIEZUX0ZpeGVkIG51bWJlciBoYW5kbGluZy4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9Jbml0X0ZhY2UpOiBDaGFuZ2VkIHRoZSBhc3NpZ25tZW50IGNvZGUKKwlmb3IgYXNjZW5kZXIsIGRlc2NlbmRlciwgYW5kIG1heF9hZHZhbmNlX3dpZHRoLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9mb250X2Jib3gpOiBDaGFuZ2VkIHRvIHVzZSBGVF9GaXhlZAorCW51bWJlciBoYW5kbGluZy4KKworMjAwMS0wMy0xMCAgSGVucmlrIEdydWJic3Ryw7ZtICA8Z3J1YmJhQHJveGVuLmNvbT4KKworCSogc3JjLyovKi5jOiBBZGRlZCBtYW55IGNhc3RzIHRvIG1ha2UgY29kZSBtb3JlIDY0Yml0LXNhZmUuCisKKzIwMDEtMDMtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogSU5TVEFMTCwgZG9jcy9CVUlMRDogV2UgbmVlZCBHTlUgbWFrZSAzLjc4IG9yIG5ld2VyLgorCisyMDAxLTAzLTA3ICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0luaXRfRmFjZSk6IE1pbm9yIGNvcnJlY3Rpb246IFdlIG11c3Qgd2FpdAorCXVudGlsIHBhcnNlX2ZvbnRfYmJveCBpcyBjaGFuZ2VkIGJlZm9yZSB3ZSB1c2UgbG9naWNhbCBzaGlmdCByaWdodHMKKwlpbiB0aGUgYXNzaWdubWVudHMgb2YgYHJvb3QtPmFzY2VuZGVyJywgYHJvb3QtPmRlc2NlbmRlcicsIGFuZAorCWByb290LT5tYXhfYWR2YW5jZV93aWR0aCcuCisKKwkoVDFfRG9uZV9GYWNlKTogRnJlZSBgY2hhcl9uYW1lJyB0YWJsZSB0byBhdm9pZCBhIG1lbW9yeSBsZWFrLgorCVN1Ym1pdHRlZCBieSBTYW5kZXIgdmFuIGRlciBXYWwgPHN2ZHdhbEB4czRhbGwubmw+LgorCisyMDAxLTAzLTA1ICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKENGRl9Mb2FkX0dseXBoKTogU2V0IGdseXBoIGNvbnRyb2wgZGF0YSB0byB0aGUKKwl0aGUgVHlwZSAyIGdseXBoIGNoYXJzdHJpbmcgKHVzZWQgYnkgY29udmVyc2lvbiBwcm9ncmFtcykuCisJU3VibWl0dGVkIGJ5IEhhIFNoYW8gPGhhc2hhb0BjaGluZXNlLmNvbT4uCisKKzIwMDEtMDMtMDQgIEFudG9pbmUgTGVjYSAgPEFudG9pbmUuTGVjYUByZW5hdWx0LmZyPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IENvcnJlY3QgYSBzdHVwaWQgdHlwbyB3aGljaCBwcmV2ZW50ZWQKKwljb3JyZWN0IGNvbXBpbGF0aW9uIChUVF9NU19MQU5HSURfVElHUklHTkFfRVRISU9QSUEgYXBwZWFyZWQgdHdpY2UpLgorCisyMDAxLTAzLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haHR5cGVzLmggKEFIX0hpbnRlcik6IEFkZCBlbGVtZW50cworCWBkaXNhYmxlX2hvcnpfZWRnZXMnLCBgZGlzYWJsZV92ZXJ0X2VkZ2VzJy4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYwkoYWhfaGludF9lZGdlc18zLCBhaF9oaW50ZXJfaGludF9lZGdlcyk6IFVzZQorCXRoZW0gKGFuZCByZW1vdmUgc3RhdGljIHZhcmlhYmxlcyB3aXRoIHRoZSBzYW1lIG5hbWVzKS4KKwkqIHNyYy9wY2YvcGNmdXRpbC5jIChCaXRPcmRlckludmVydCk6IEFkZCBgY29uc3QnLgorCSogZG9jcy9nbG5hbWVzLnB5OiBVcGRhdGVkIHRvIGxhdGVzdCBwc3RhYmxlcy5oIGNoYW5nZXMuCisKKwkqIGJ1aWxkcy91bml4L2RldGVjdC5tazogQWRkIHRlc3QgZm9yIEh1cmQuCisJKiBidWlsZHMvaHVyZC9kZXRlY3QubWs6IFJlbW92ZWQuCisKKzIwMDEtMDMtMDQgIFNhbmRlciB2YW4gZGVyIFdhbCAgPHN2ZHdhbEB4czRhbGwubmw+CisKKwkqIHNyYy9wc25hbWVzL3BzdGFibGVzLmg6IEFkZCBtb3JlIGBjb25zdCcuCisJKiBzcmMvcGNmL3BjZnV0aWwuYzogRGl0dG8uCisKKzIwMDEtMDMtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Ub19CaXRtYXApOiBGaXhpbmcgdHlwbworCShGVF9HbHlwaF9Eb25lIC0+IEZUX0RvbmVfR2x5cGgpLgorCisyMDAxLTAzLTAxICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLkxlY2FAcmVuYXVsdC5mcj4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oOiBBZGRlZCBzb21lIG5ldyBNaWNyb3NvZnQgbGFuZ3VhZ2UKKwljb2RlcyBhbmQgTENJRHMgYXMgZm91bmQgaW4gT2ZmaWNlIFhwLgorCisyMDAxLTAyLTI4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBidWlsZHMvaHVyZC9kZXRlY3QubWs6IE5ldyBmaWxlLiAgQWRkZWQgc3VwcG9ydCB0byBkZXRlY3QgdGhlIEdOVQorCUh1cmQgb3BlcmF0aW5nIHN5c3RlbSBhcyBVbml4LWxpa2UuICBGaXggc3VibWl0dGVkIGJ5IEFudGhvbnkgRm9rCisJPGZva2FAZGViaWFuLm9yZz4uCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpOiBTZXQgZ2x5cGggY29udHJvbCBkYXRhIHRvIHRoZQorCXRoZSBUeXBlIDEgZ2x5cGggY2hhcnN0cmluZyAodXNlZCBieSBjb252ZXJzaW9uIHByb2dyYW1zKS4KKwlTdWJtaXR0ZWQgYnkgSGEgU2hhbyA8aGFzaGFvQGNoaW5lc2UuY29tPi4KKworMjAwMS0wMi0yMiAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRncmF5cy5jIChncmF5c19zd2VlcCk6IFRoZSBmdW5jdGlvbiBkaWRuJ3QgZXhpdAorCWltbWVkaWF0ZWx5IGlmIGBudW1fY2VsbHMnIHdhcyAwIGFzIGl0IHNob3VsZC4gIFRoYW5rcyB0byBCb3JpcyBmb3IKKwlmaW5kaW5nIHRoaXMgb3V0LgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX1RvX0JpdG1hcCk6IEZpeGVkIG1lbW9yeSBsZWFrIHdoZW4KKwliaXRtYXAgcmVuZGVyaW5nIGZhaWxzICh0aGFua3MgdG8gR3JhaGFtIEFzaGVyKS4KKworMjAwMS0wMi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL2RvY21ha2VyLnB5IChEb2NTZWN0aW9uOjphZGRfZWxlbWVudCk6IFVzZQorCWBzZWxmLnByaW50X2Vycm9yKCknLgorCisJKiBidWlsZHMvdW5peC9jb25maWcue2d1ZXNzLHN1Yn06IFVwZGF0ZWQgKGZyb20gZnRwLmdudS5vcmcpLgorCisyMDAxLTAyLTEzICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBkb2NzL2RvY21ha2VyLnB5LCBpbmNsdWRlL2ZyZWV0eXBlLyouaDogVXBkYXRlZCB0aGUgRG9jTWFrZXIKKwlzY3JpcHQgdG8gc3VwcG9ydCBjaGFwdGVycyBhbmQgc2VjdGlvbiBibG9jayBvcmRlcmluZy4gIFVwZGF0ZWQgdGhlCisJcHVibGljIGhlYWRlciBmaWxlcyBhY2NvcmRpbmdseS4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Db3B5KTogQWR2YW5jZSB3aWR0aCBhbmQgZ2x5cGggZm9ybWF0CisJd2VyZSBub3QgY29ycmVjdGx5IGNvcGllZC4KKworMjAwMS0wMi0wOCAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfZm9udF9tYXRyaXgpOiBSZW1vdmVkIGFuCisJdW5uZWNlc3NhcnkgZnByaW50Ziggc3RkZXJyLCAuLi4gKS4KKworMjAwMS0wMi0wNyAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9Jbml0X0ZhY2UpOiBBZGRlZCBjb2RlIHRvIGdldCB0aGUKKwl1bml0c19wZXJfRU0gZnJvbSB0aGUgdmFsdWUgYXNzaWduZWQgaW4gcGFyc2VfZm9udF9tYXRyaXgsIGlmCisJYXZhaWxhYmxlLiAgRGVmYXVsdCB0byAxMDAwIGlmIG5vdCBhdmFpbGFibGUuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KTogQWRkZWQgbG9naWMgdG8gZ2V0CisJdGhlIHVuaXRzX3Blcl9FTSBmcm9tIHRoZSBGb250TWF0cml4LgorCisJKGNmZl9wYXJzZV9maXhlZF90aG91c2FuZCk6IE5ldyBmdW5jdGlvbi4gIEdldHMgYSByZWFsIG51bWJlciBmcm9tCisJdGhlIENGRiBmb250LCBidXQgbXVsdGlwbGllcyBieSAxMDAwICh0aGlzIGlzIHRvIGF2b2lkIHJvdW5kaW5nCisJZXJyb3JzIHdoZW4gcGxhY2luZyB0aGlzIHJlYWwgbnVtYmVyIGludG8gYSAxNi4xNiBmaXhlZCBudW1iZXIpLgorCisJKGNmZl9wYXJzZV9yZWFsKTogQWRkZWQgY29kZSBzbyB0aGF0IHRoZSBpbnRlZ2VyIHBhcnQgaXMgbW92ZWQKKwlpbnRvIHRoZSBoaWdoIHNpeHRlZW4gYml0cyBvZiB0aGUgMTYuMTYgZml4ZWQgbnVtYmVyLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX0luaXRfRmFjZSk6IEFkZGVkIGxvZ2ljIHRvIGdldCB0aGUgdW5pdHMKKwlwZXIgRU0gZnJvbSB0aGUgQ0ZGIGRpY3Rpb25hcnksIGlmIGF2YWlsYWJsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oOiBJbiBzdHJ1Y3QgQ0ZGX0ZvbnRfRGljdF8sCisJYWRkZWQgYSB1bml0c19wZXJfZW0gbWVtYmVyIHRvIGZhY2lsaXRhdGUgcGFzc2luZyBvZiB1bml0c19wZXJfZW0KKwlmcm9tIGZ1bmN0aW9uIGNmZl9wYXJzZV9mb250X21hdHJpeC4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChpc19hbHBoYSk6IE1ha2UgYC0nIGEgbGVnYWwgYWxwaGFudW1lcmljCisJY2hhcmFjdGVyLiAgVGhpcyBpcyBzbyB0aGF0IGZvbnQgbmFtZXMgd2l0aCBgLScgYXJlIGZ1bGx5IHBhcnNlZCwKKwlldGMuLi4KKworMjAwMS0wMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHNoaWZ0X2VsZW1lbnRzKTogUmVtb3ZlIGlmIGNsYXVzZSAod2hpY2ggaXMKKwlvYnNvbGV0ZSBub3cpLgorCisJKHJlYWxsb2NhdGVfdDFfdGFibGUsIFBTX1RhYmxlX0RvbmUpOiBSZXBsYWNlIFJFQUxMT0MoKSB3aXRoIEFMTE9DKCkKKwkrIE1FTV9Db3B5KCkgdG8gYXZvaWQgYSBtZW1vcnkgYnVnLgorCisyMDAxLTAyLTAxICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBkb2NzL2RvY21ha2VyLnB5OiBJbXByb3ZlZCB0aGUgaW5kZXggc29ydGluZyByb3V0aW5lIHRvIHBsYWNlCisJY2FwaXRhbCBsZXR0ZXJzIGJlZm9yZSBzbWFsbCBvbmVzLiAgQWRkZWQgdGhlIGA8b3JkZXI+JyBtYXJrZXIgdG8KKwlzZWN0aW9uIGJsb2NrcyBpbiBvcmRlciB0byBnaXZlIHRoZSBvcmRlciBvZiBibG9ja3MuCisKKzIwMDEtMDEtMzAgIEFudG9pbmUgTGVjYSAgPEFudG9pbmUuTGVjYUByZW5hdWx0LmZyPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IExhdGVzdCB1cGRhdGVzIHRvIE1pY3Jvc29mdCBsYW5ndWFnZQorCUlEIGNvZGVzLgorCisyMDAxLTAxLTI0ICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2ZmL3QxbG9hZC5jIChwYXJzZV9mb250X21hdHJpeCk6IEFkZGVkIGhldXJpc3RpYyB0byBnZXQKKwl1bml0c19wZXJfRU0gZnJvbSB0aGUgZm9udCBtYXRyaXguCisKKwkocGFyc2VfZGljdCk6IERlbGV0ZWQgdGVzdCB0byBzZWUgd2hldGhlciB0aGUgRm9udEluZm8ga2V5d29yZCBoYXMKKwliZWVuIHNlZW4uICBEZWxldGlvbiBvZiB0aGlzIHRlc3QgYWxsb3dzIGZvbnRzIHdpdGhvdXQgRm9udEluZm8KKwlkaWN0aW9uYXJpZXMgdG8gYmUgcGFyc2VkIGJ5IHRoZSBUeXBlIDEgZHJpdmVyLgorCisJKFQxX09wZW5fRmFjZSk6IERlbGV0ZWQgZW1wdHkgc3Vicm91dGluZXMgYXJyYXkgdGVzdCB0byBtYWtlIHN1cmUKKwlmb250cyB3aXRoIG5vIHN1YnJvdXRpbmVzIHN0aWxsIGFyZSBwYXJzZWQuCisKKzIwMDEtMDEtMTcgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaSAgPGZyYW5jZXNjby56YXBwYS5uYXJkZWxsaUBlbnMuZnI+CisKKwkqIHNyYy9wY2ZyZWFkLmMgKHBjZl9nZXRfcHJvcGVydGllcywgcGNmX2dldF9tZXRyaWNzLAorCXBjZl9nZXRfYml0bWFwcyk6IEZpeCBjb21waWxlciBlcnJvcnMuCisKKzIwMDEtMDEtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jOiBSZW1vdmVkIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MgcmVsYXRlZAorCXRvIGNvbXBhcmlzb24gb2Ygc2lnbmVkIHZzLiB1bnNpZ25lZCBpbnRlZ2Vycy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg6IENoYW5nZWQgdGhlIGRlYnVnIHRyYWNlCisJY29uc3RhbnRzIGZyb20gdHJhY2VfdDJ4eHh4IHRvIHRyYWNlX2NmZnh4eHggdG8gYmUgYWJsZSB0byBjb21waWxlCisJdGhlIENGRiBkcml2ZXIgaW4gZGVidWcgbW9kZS4KKworMjAwMS0wMS0xMSAgTWF0dGhldyBDcm9zYnkgIDxtY3Jvc2J5QG1hcnRob24ub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IEZpeCBwcm9ibGVtcyB3aXRoIHNlcGFyYXRlCisJLS1wcmVmaXggYW5kIC0tZXhlYy1wcmVmaXguCisKKzIwMDEtMDEtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqIGRvY3MvZG9jbWFrZXIucHk6IEFkZGVkIGNyb3NzLXJlZmVyZW5jZXMgZ2VuZXJhdGlvbiBhcyB3ZWxsIGFzCisJbW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgcGF0aG5hbWUgd2lsZGNhcmQgbWF0Y2hpbmcuCisKKzIwMDEtMDEtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9kb2NtYWtlci5weTogTWlub3IgaW1wcm92ZW1lbnRzIHRvIHJlZHVjZSB1bndhbnRlZCBzcGFjZXMKKwlhbmQgZW1wdHkgbGluZXMgaW4gb3V0cHV0LgorCisyMDAxLTAxLTA5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBkb2NzL2RvY21ha2VyLnB5OiBJbXByb3ZlZCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGFibGUgb2YgY29udGVudHMKKwlhbmQgaW5kZXggcGFnZXMuICBJdCBhbHNvIHN1cHBvcnRzIHdpbGRjYXJkcyBvbiBub24gVW5peCBzeXN0ZW1zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlLyouaCwgaW5jbHVkZS9mcmVldHlwZS9jYWNoZS8qLmg6IFVwZGF0ZWQgY29tbWVudHMKKwl0byBpbmNsdWRlIHNlY3Rpb24gZGVmaW5pdGlvbnMvZGVsaW1pdGF0aW9ucyBmb3IgdGhlIEFQSSBSZWZlcmVuY2UKKwlnZW5lcmF0b3IuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogTW92ZWQgZGVjbGFyYXRpb24gb2YKKwlgRlRfR2VuZXJpY19GaW5hbGl6ZXInIGFuZCB0aGUgYEZUX0dlbmVyaWMnIHN0cnVjdHVyZSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmg6IGhlcmUuCisKKzIwMDEtMDEtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oOiBVcGRhdGVkIFVuaWNvZGUgY29kZSByYW5nZSBjb21tZW50cy4KKworMjAwMS0wMS0wMyAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi9ydWxlcy5tazogVXNlIGNmZmdsb2FkLntjLGh9IGluc3RlYWQgb2YgdDJnbG9hZC57YyxofS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oOiBDaGFuZ2VkIHRvIHVzZSBjZmZ0eXBlcy5oCisJKGNmZmVycnMuaCkgaW5zdGVhZCBvZiB0MnR5cGVzLmggKHQyZXJyb3JzLmgsIHJlc3BlY3RpdmVseSkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaDogTWVyZ2VkIGluIGNoYW5nZXMgZnJvbQorCXQydHlwZXMuaCBhbmQgbWFkZSB0aGlzIHRoZSBjYW5vbmljYWwgYHR5cGVzJyBoZWFkZXIgZm9yIHRoZSBDRkYKKwlkcml2ZXIuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDJ0eXBlcy5oOiBUaGlzIGZpbGUgd2FzIG1lcmdlZCB3aXRoCisJY2ZmdHlwZXMuaCBhbmQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MmVycm9ycy5oOglSZW5hbWVkIHRvIGNmZmVycnMuaC4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9jZmYvY2Zmb2Jqcy5oLCBzcmMvY2ZmL2NmZnBhcnNlLmMsCisJc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZi5jLCBzcmMvY2ZmL2NmZmxvYWQuYywKKwlzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2ZmZ2xvYWQuaDogQ2hhbmdlZCB0byB1c2UKKwljZmZnbG9hZC57YyxofSBpbnN0ZWFkIG9mIHQyZ2xvYWQue2MsaH0uICBBbGwgb2NjdXJyZW5jZXMgb2YgdDJfCisJKFQyXykgd2VyZSByZXBsYWNlZCB3aXRoIGNmZl8gKENGRl8sIHJlc3BlY3RpdmVseSkuCisKKwkqIHNyYy9jZmYvdDJnbG9hZC5oOiBSZW5hbWVkIGNmZmdsb2FkLmguCisKKwkqIHNyYy9jZmYvdDJnbG9hZC5jOiBSZW5hbWVkIGNmZmdsb2FkLmMKKworMjAwMC0wMS0wMiAgSm91ayBKYW5zZW4gIDxqb3VrakBocmVtLnN0bS50dWRlbGZ0Lm5sPgorCisJKiBidWlsZHMvdm1zOiBTdXBwb3J0IGZpbGVzIGZvciBWTVMgYXJjaGl0ZWN0dXJlIGFkZGVkLgorCSogZGVzY3JpcC5tbXMsIHNyYy8qL2Rlc2NyaXAubW1zOiBWTVMgbWFrZWZpbGVzIGFkZGVkLgorCSogUkVBRE1FLlZNUzogTmV3IGZpbGUuCisKKzIwMDAtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogTElDRU5TRS5UWFQ6IEFkZGVkIGluZm8gYWJvdXQgUENGIGRyaXZlciBsaWNlbnNlLgorCisyMDAxLTAxLTAxICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkgIDxmcmFuY2VzY28uemFwcGEubmFyZGVsbGlAZW5zLmZyPgorCisJKiBzcmMvcGNmLyo6IE5ldyBkcml2ZXIgbW9kdWxlIGZvciBQQ0YgZm9udCBmb3JtYXQgKHVzZWQgaW4KKwlYIFdpbmRvdyBTeXN0ZW0pLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggKEZUX1RyYWNlKTogQWRkZWQgdmFsdWVzIGZvcgorCVBDRiBkcml2ZXIuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BjZnR5cGVzLmg6IE5ldyBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogQWRkZWQgUENGIGRyaXZlciBtb2R1bGUuCisKKzIwMDEtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfR2V0X0NoYXJfSW5kZXgpOiBGaXggcGFyYW1ldGVyIHR5cGUuCisKKzIwMDAtMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL21vZHVsZXMubWsgKGNsZWFuX21vZHVsZV9saXN0KTogRml4ZWQgZGVsZXRpb24gb2YgbW9kdWxlCisJZmlsZSBpbiBjYXNlIGBtYWtlIG1ha2VfbW9kdWxlX2xpc3QnIGlzIGNhbGxlZCBiZWZvcmUgYG1ha2Ugc2V0dXAnLgorCisyMDAwLTEyLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChDRkZfTG9hZF9DaGFyc2V0KTogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZXMuCisJKENGRl9Mb2FkX0NoYXJzZXQsIENGRl9Mb2FkX0VuY29kaW5nKTogUmVtb3ZlIHVubmVjZXNzYXJ5IHZhcmlhYmxlCisJZGVmaW5pdGlvbi4KKworMjAwMC0xMi0zMCAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MnR5cGVzLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oOiBDaGFuZ2VkIHRoZSBzdHJ1Y3R1cmVzIGZvcgorCUNGRl9FbmNvZGluZyBhbmQgQ0ZGX0VuY29kaW5nIGZvciB0aGUgbmV3IGltcGxlbWVudGF0aW9ucyBvZiB0aGUKKwljaGFyc2V0IGFuZCBlbmNvZGluZyBwYXJzZXJzIGluIHRoZSBDRkYgZHJpdmVyLgorCisJKiBzcmMvY2ZmL3QyZ2xvYWQuYyAodDJfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlLAorCXQyX29wZXJhdG9yX3NlYWMpOiBBZGRlZCB0aGVzZSBmdW5jdGlvbnMgZm9yIHVzZSBpbiBpbXBsZW1lbnRpbmcgdGhlCisJc2VhYyBlbXVsYXRpb24gcHJvdmlkZWQgYnkgdGhlIFR5cGUgMiBlbmRjaGFyIG9wZXJhdG9yLgorCShUMl9QYXJzZV9DaGFyU3RyaW5ncyk6IEFkZGVkIHNlYWMgZW11bGF0aW9uIGZvciB0aGUgZW5kY2hhcgorCW9wZXJhdG9yLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoQ0ZGX0xvYWRfRW5jb2RpbmcsIENGRl9Mb2FkX0NoYXJzZXQsCisJQ0ZGX0RvbmVfRW5jb2RpbmcsIENGRl9Eb25lX0NoYXJzZXQpOiBFeHRlbmRlZCB0byBsb2FkIGFuZCBwYXJzZSB0aGUKKwljaGFyc2V0L2VuY29kaW5nIHRhYmxlcywgYW5kIGZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZW0gd2hlbiB0aGUKKwlDRkYgZHJpdmVyIGlzIGZpbmlzaGVkIHdpdGggdGhlbS4gIEFkZGVkIHRhYmxlcworCisJICAgIGNmZl9pc29hZG9iZV9jaGFyc2V0CisJICAgIGNmZl9leHBlcnRfY2hhcnNldAorCSAgICBjZmZfZXhwZXJ0c3Vic2V0X2NoYXJzZXQKKwkgICAgY2ZmX3N0YW5kYXJkX2VuY29kaW5nCisJICAgIGNmZl9leHBlcnRfZW5jb2RpbmcKKworCXNvIHRoYXQgdGhlIGVuY29kaW5nL2NoYXJzZXQgcGFyc2VyIGNhbiBoYW5kbGUgcHJlZGVmaW5lZCBlbmNvZGluZ3MgYW5kCisJY2hhcnNldHMuCisKKzIwMDAtMTItMjQgIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jZmYvdDJnbG9hZC5jIChUMl9Mb2FkX0dseXBoKTogQWRkZWQgY29kZQlzbyB0aGF0IHRoZSBmb250CisJdHJhbnNmb3JtIGlzIGFwcGxpZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KTogQWRkZWQgY29kZSBzbyB0aGF0CisJdGhlIGZvbnQgbWF0cml4IG51bWJlcnMJYXJlIHNjYWxlZCBieSAxLyhtYXRyaXgtPnl5KS4gIEFsc28sIHRoZQorCW9mZnNldCB2ZWN0b3Igbm93IGNvbnRhaW5zIGludGVnZXIgdmFsdWVzIGluc3RlYWQgb2YgMTYuMTYgZml4ZWQKKwludW1iZXJzLgorCisyMDAwLTEyLTIyICBUb20gS2Fjdmluc2t5ICA8dGthY3ZpbnNAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkX2dseXBoKToKKwlSZW1vdmVkIHVubmVjZXNzYXJ5IGNvbW1lbnRzIGFuZCBjb21tZW50ZWQtb3V0IGNvZGUuCisKKzIwMDAtMTItMjEgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkYWZtLmMsIHNyYy9jaWQvY2lkYWZtLmg6IHJlbW92ZWQgdW4tbmVlZGVkIGZpbGVzLAorCXdlJ2xsIHdvcmsgb24gc3VwcG9ydGluZyBDSUQgQUZNIGZpbGVzIGxhdGVyIEkgZ3Vlc3MgOi0pCisKKzIwMDAtMTItMjEgIFRvbSBLYWN2aW5za3kgIDx0a2Fjdmluc0BmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWQsIGFoX2hpbnRlcl9sb2FkX2dseXBoKToKKwlDaGFuZ2VkIHNvIHRoYXQgZm9udHMgd2l0aCBhIG5vbi1zdGFuZGFyZCBGb250TWF0cml4IHJlbmRlcgorCWNvcnJlY3RseS4gIFByZXZpb3VzbHksIHRoZSBmaXJzdCBnbHlwaCByZW5kZXJlZCBmcm9tIHN1Y2ggYQorCWZvbnQgZGlkIG5vdCBoYXZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllZC4KKworMjAwMC0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiAqLm1rOiBBZGRlZCBsb3RzIG9mIGAuUEhPTlknIHRhcmdldHMuCisKKzIwMDAtMTItMTcgIEthcnN0ZW4gRmxlaXNjaGVyICA8a2ZsZWlzYzFAZm9yZC5jb20+CisKKwkqICoubWs6IEltcGxlbWVudGVkIGBwbGF0Zm9ybScgdGFyZ2V0IHRvIGRpc2FibGUgYXV0by1kZXRlY3Rpb24uCisKKzIwMDAtMTItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9kZXNpZ24vbW9kdWxlcy5odG1sOiBSZW1vdmVkLiAgQ292ZXJlZCBieSBkZXNpZ24tKi5odG1sLgorCisJKiBJTlNUQUxMOiBBZGRlZCBpbmZvIGFib3V0IG1ha2VwcC4KKworMjAwMC0xMi0xNCAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCUFkZGVkIHN1cHBvcnQgZm9yIGNsaXBwZWQgZGlyZWN0IHJlbmRlcmluZyBpbiB0aGUgc21vb3RoIHJlbmRlcmVyLgorCVRoaXMgc2hvdWxkIG5vdCBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eSBvZiBleGlzdGluZyBhcHBsaWNhdGlvbnMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaDogTW92ZQorCWRlZmluaXRpb24gb2YgdGhlIEZUX0JCb3ggc3RydWN0dXJlIGZyb20gdGhlIGZvcm1lciB0byB0aGUgbGF0dGVyLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmg6IEFkZCBgZnRfcmFzdGVyX2ZsYWdfY2xpcCcgdmFsdWUgdG8KKwlGVF9SYXN0ZXJfRmxhZyBlbnVtZXJhdGlvbi4KKwlBZGQgYGNsaXBfYm94JyBlbGVtZW50IHRvIEZUX1Jhc3Rlcl9QYXJhbXMgc3RydWN0dXJlLgorCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlzX2NvbnZlcnRfZ2x5cGgpOiBJbXBsZW1lbnQgaXQuCisKKwkqIElOU1RBTEw6IFVwZGF0ZWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBvbiBXaW4zMiwgbGlzdGluZyB0aGUKKwluZXcgYG1ha2Ugc2V0dXAgbGlzdCcgdGFyZ2V0IHVzZWQgdG8gbGlzdCBzdXBwb3J0ZWQKKwljb21waWxlcnMvdGFyZ2V0cy4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChmdF9ibGFja19yZW5kZXIpOiBUZXN0IGZvciB1bnN1cHBvcnRlZAorCWRpcmVjdCByZW5kZXJpbmcgYmVmb3JlIHRlc3RpbmcgYXJndW1lbnRzLgorCisyMDAwLTEyLTEzICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdDJidWlsZC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaDogRml4ZWQgaGVhZGVyIGluY2x1c2lvbiBtYWNyb3MKKwl0byB1c2UgZGlyZWN0IGRlZmluaXRpb25zLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZG8gdGhlc2UgdGhpbmdzCisJaW4gYSBwb3J0YWJsZSB3YXkgOi0oICBUaGUgcmVzdCBvZiB0aGUgY29kZSBzaG91bGQgZm9sbG93IHNob3J0bHkKKwl0aG91Z2ggZXZlcnl0aGluZyBjb21waWxlcyBub3cuCisKKwkqIGJ1aWxkcy9jb21waWxlci9pbnRlbGMubWssIGJ1aWxkcy9jb21waWxlci93YXRjb20ubWs6IE5ldyBmaWxlcy4KKworCSogYnVpbGRzL3dpbjMyL2RldGVjdC5tazogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEludGVsIEMvQysrCisJY29tcGlsZXIsIGFzIHdlbGwgYXMgX3ByZWxpbWluYXJ5XyAocmVhZDogZG9lc24ndCB3b3JrISkgc3VwcG9ydCBmb3IKKwlXYXRjb20uICBBbHNvIGFkZGVkIGEgbmV3IHNldHVwIHRhcmdldC4gIFR5cGUgYG1ha2Ugc2V0dXAgbGlzdCcgZm9yCisJYSBsaXN0IG9mIHN1cHBvcnRlZCBjb21tYW5kLWxpbmUgY29tcGlsZXJzIG9uIFdpbjMyLgorCisJKiBzcmMvYmFzZS9mdGRlYnVnLmM6IEFkZGVkIGR1bW15IHN5bWJvbCB0byBhdm9pZCBlbXB0eSBmaWxlIGlmCisJY29uZGl0aW9uYWxzIGFyZSBvZmYuCisKKzIwMDAtMTItMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYzogRml4ZWQgdHlwb3MuICBGaXhlZCBpbmNsdXNpb24gb2Ygd3JvbmcKKwlmdGNvbmZpZy5oIGZpbGUuCisKKzIwMDAtMTItMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnQyYnVpbGQuaCAoRlQyX1JPT1QsIEZUMl9DT05GSUdfUk9PVCk6CisJUmVtb3ZlZC4gIEFOU0kgQyBkb2Vzbid0IChleHBsaWNpdGx5KSBhbGxvdyBtYWNybyBleHBhbnNpb24gaW4KKwlhcmd1bWVudHMgdXNpbmcgYCMjJy4KKwkoRlQyX1BVQkxJQ19GSUxFLCBGVDJfQ09ORklHX0ZJTEUsIEZUMl9JTlRFUk5BTF9GSUxFKTogVXNlIGRpcmVjdG9yeQorCW5hbWVzIGRpcmVjdGx5LiAgTWFrZSB0aGVtIGNvbmZpZ3VyYWJsZS4gIFVzZSBgIyMnIHRvIHN0cmlwIGxlYWRpbmcKKwlhbmQgdHJhaWxpbmcgc3BhY2VzIGZyb20gYXJndW1lbnRzLgorCisJKiBidWlsZHMvdW5peC9mdDJ1bml4Lmg6IEFkYXB0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0c3lzdGVtLmMgKGZ0X2FsbG9jLCBmdF9yZWFsbG9jLCBmdF9mcmVlLCBmdF9pb19zdHJlYW0sCisJZnRfY2xvc2Vfc3RyZWFtKTogVXNlIEZUX0NBTExCQUNLX0RFRi4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYzogVXNlIG5ldyBoZWFkZXIgc2NoZW1lLgorCShGVF9Eb25lX01lbW9yeSk6IFVzZSBmcmVlKCkgZnJvbSBGVF9NZW1vcnkgc3RydWN0dXJlLgorCisJKiBzcmMvYmFzZS9mdGluaXQuYywgc3JjL2Jhc2UvZnRtYWMuYzogSGVhZGVyIHNjaGVtZSBmaXhlcy4KKworMjAwMC0xMi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdDJidWlsZC5oIChGVDJfQ09ORklHX1JPT1QsCisJRlQyX1BVQkxJQ19GSUxFLCBGVDJfQ09ORklHX0ZJTEUsIEZUMl9JTlRFUk5BTF9GSUxFLAorCUZUX1NPVVJDRV9GSUxFKTogVXNlIGAjIycgb3BlcmF0b3IgdG8gYmUgcmVhbGx5IEFOU0kgQyBjb21wbGlhbnQuCisKKzIwMDAtMTItMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rOiBSZW1vdmUgdW51c2VkIFVTRV9DRkxBR1MgdmFyaWFibGUuCisKKzIwMDAtMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogKi8qLmg6IENoYW5nZWQgYm9keSBpbmNsdXNpb24gbWFjcm8gbmFtZXMgdG8gc3RhcnQgYW5kIGVuZCB3aXRoCisJYF9fJyAodGhvc2Ugd2hpY2ggaGF2ZW4ndCBjb252ZXJ0ZWQgeWV0KS4gIEZpeGVkIG1pbm9yIGNvbnZlcnNpb24KKwlpc3N1ZXMuCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYzogVXBkYXRlZCB0byBuZXcgaGVhZGVyIGluY2x1c2lvbiBzY2hlbWUuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBSZW1vdmUgdW51c2VkIENBTENfTGVuZ3RoKCkgbWFjcm8uCisKKzIwMDAtMTItMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqICovKi5bY2hdOiBDaGFuZ2VkIHNvdXJjZSBmaWxlcyB0byBhZGhlcmUgdG8gdGhlIG5ldworCWhlYWRlciBpbmNsdXNpb24gc2NoZW1lLiAgTm90IGNvbXBsZXRlbHkgdGVzdGVkIGJ1dCB3b3JrcyBmb3Igbm93CisJaGVyZS4KKworCSogc3JjL2NmZi90MmRyaXZlci5jOiBSZW5hbWVkIGFuZCB1cGRhdGVkIHRvLi4uCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90MmRyaXZlci5oOiBSZW5hbWVkIGFuZCB1cGRhdGVkIHRvLi4uCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmg6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90MmxvYWQuYzogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZsb2FkLmM6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90MmxvYWQuaDogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZsb2FkLmg6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90Mm9ianMuYzogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZvYmpzLmM6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90Mm9ianMuaDogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZvYmpzLmg6IE5ldyBmaWxlLgorCSogc3JjL2NmZi90MnBhcnNlLmM6IFJlbmFtZWQgYW5kIHVwZGF0ZWQgdG8uLi4KKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYzogTmV3IGZpbGUuCisJKiBzcmMvY2ZmL3QycGFyc2UuaDogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZwYXJzZS5oOiBOZXcgZmlsZS4KKwkqIHNyYy9jZmYvdDJ0b2tlbnMuaDogUmVuYW1lZCBhbmQgdXBkYXRlZCB0by4uLgorCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBOZXcgZmlsZS4KKworCSogc3JjL2NmZi9jZmYuYywgc3JjL2NmZi9ydWxlcy5tazogVXBkYXRlZC4KKworMjAwMC0xMi0wNiAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NhY2hlL2Z0bHJ1LmMgKEZUX0xydV9Eb25lKTogRml4ZWQgbWVtb3J5IGxlYWsuCisKKzIwMDAtMTItMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL21vZHVsZS5tazogUmVwbGFjZWQgYHh4eCAjJyB3aXRoIGB4eHgkKHNwYWNlKS4KKwkqIGJ1aWxkcy9vczIvZGV0ZWt0Lm1rLCBidWlsZHMvd2luMzIvZGV0ZWt0Lm1rOiBNb3ZlZCBjb21tZW50IHRvCisJYXZvaWQgdHJhaWxpbmcgc3BhY2VzIGluIHZhcmlhYmxlLgorCSogYnVpbGRzL2ZyZWV0eXBlLm1rOiBVc2UgJChEKSBpbnN0ZWFkIG9mICREIHRvIG1ha2Ugc3RhdGVtZW50IG1vcmUKKwlyZWFkYWJsZS4KKworCSogZG9jcy9kb2NtYWtlci5weTogRm9ybWF0dGluZy4KKworMjAwMC0xMi0wNSAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzYXV4L3BzYXV4bW9kLmM6IEZpeGVkIGEgYnJva2VuIGluY2x1c2lvbiBvZiBjb21wb25lbnQKKwloZWFkZXIgZmlsZXMgKGFuIEZUX0ZMQVRfQ09NUElMRSB0ZXN0IHdhcyBtaXNzaW5nKS4KKworCSogc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKEZUQ19NYW5hZ2VyX0RvbmUpOiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZAorCWFuIG9jY2FzaW9uYWwgY3Jhc2ggd2hlbiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCAoZHVlIHRvIGEgZGFuZ2xpbmcKKwlwb2ludGVyKS4KKworCSogc3JjL2Jhc2UvZnRzeXN0ZW0uYyAoRlRfRG9uZV9NZW1vcnkpOiBGaXhlZCBhbiBvYnZpb3VzIGJ1ZzoKKwlUaGUgQU5TSSBgZnJlZSgpJyBmdW5jdGlvbiB3YXMgY2FsbGVkIGluc3RlYWQgb2YgYG1lbW9yeS0+ZnJlZSgpJy4KKworCSogZG9jcy9kb2NtYWtlci5weTogQWRkZWQgc2VjdGlvbiBmaWx0ZXJpbmcsIG11bHRpLXBhZ2UgZ2VuZXJhdGlvbgorCShpbmRleCBwYWdlIGdlbmVyYXRpb24gaXMgc3RpbGwgbWlzc2luZyB0aG91Z2gpLgorCisyMDAwLTEyLTA0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZC50dXJuZXJAZnJlZXR5cGUub3JnPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rLCBidWlsZHMvdW5peC9mdDJ1bml4Lmg6IFRoZSBmaWxlIGBmdDJ1bml4LmgnCisJaXMgbm93IGluc3RhbGxlZCBhcyA8ZnQyYnVpbGQuaD4gZm9yIFVuaXggc3lzdGVtcy4gIE5vdGUgdGhhdCB3ZQorCXN0aWxsIHVzZSB0aGUgYGZyZWV0eXBlMi9mcmVldHlwZScgaW5zdGFsbGF0aW9uIHBhdGggZm9yIG5vdy4KKworCSogKi8qLltjaF06IE5vdyB1c2luZyA8ZnQyYnVpbGQuaD4gYXMgdGhlIGRlZmF1bHQgYnVpbGQgYW5kIHNldHVwCisJY29uZmlndXJhdGlvbiBmaWxlIGluIGFsbCBwdWJsaWMgaGVhZGVycy4gIEludGVybmFsIHNvdXJjZSBmaWxlcworCXN0aWxsIG5lZWQgc29tZSBjaGFuZ2VzIHRob3VnaC4KKworCSogYnVpbGRzL2RldmVsL2Z0MmJ1aWxkLmgsIGJ1aWxkcy9kZXZlbC9mdG9wdGlvbi5oOiBDcmVhdGVkIGEgbmV3CisJZGlyZWN0b3J5IHRvIGhvbGQgYWxsIGRldmVsb3BtZW50IG9wdGlvbnMgZm9yIGJvdGggdGhlIFVuaXggYW5kCisJV2luMzIgZGV2ZWxvcGVyIGJ1aWxkcy4KKworCSogYnVpbGRzL3dpbjMyL2RldGVjdC5taywgYnVpbGRzL3dpbjMyL3czMi1iY2NkLm1rLAorCWJ1aWxkcy93aW4zMi93MzItZGV2Lm1rOiBDaGFuZ2VkIHRoZSBkZXZlbG9wZXIgYnVpbGQgdGFyZ2V0cyB0bworCWBkZXZlbC1nY2MnIGFuZCBgZGV2ZWwtYmNjJyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGRldmVsb3Agd2l0aCB0aGUKKwlCb3JsYW5kIEMrKyBjb21waWxlci4KKworMjAwMC0xMi0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWQudHVybmVyQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMC4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuaW4sIGJ1aWxkcy91bml4L2NvbmZpZ3VyZSwKKwlidWlsZHMvY3lnd2luL2NvbmZpZ3VyZS5pbiwgYnVpbGRzL2N5Z3dpbi9jb25maWd1cmU6IFNldHRpbmcKKwlgdmVyc2lvbl9pbmZvJyB0byA2OjE6MCBmb3IgdGhlIDIuMC4xIHJlbGVhc2UuCisKKwkqIENIQU5HRVM6IEFkZGVkIGEgc3VtbWFyeSBvZiBjaGFuZ2VzIGJldHdlZW4gMi4wLjEgYW5kIDIuMC4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy9jeWd3aW4vZnRjb25maWcuaW46IENoYW5nZXMKKwl0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBVbml4IHdpdGggdGhlIFVuaXgtc3BlY2lmaWMgY29uZmlnCisJZmlsZXMuCisKKzIwMDAtMTItMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogSU5TVEFMTDogUmV2aXNlZC4KKwkqIGJ1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rLCBidWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rLAorCWJ1aWxkcy9jb21waWxlci9iY2MubWssIGJ1aWxkcy93aW4zMi93MzItYmNjLm1rLAorCWJ1aWxkcy93aW4zMi93MzItYmNjZC5tazogUmV2aXNlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0YnVpbGQuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmg6IFJldmlzZWQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaDogVXBkYXRlZCB0byBuZXcgaGVhZGVyIGluY2x1c2lvbiBzY2hlbWUuCisKKzIwMDAtMTEtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rICguUEhPTlkpOiBBZGRpbmcgYGRpc3RjbGVhbicuCisJKiBidWlsZHMvdW5peC9kZXRlY3QubWsgKC5QSE9OWSk6IEFkZGluZyBgZGV2ZWwnLCBgdW5peCcsIGBsY2MnLAorCWBzZXR1cCcuCisKKzIwMDAtMTEtMzAgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vZ3I+CisKKwkqIElOU1RBTEw6IFNsaWdodGx5IHVwZGF0ZWQgdGhlIHF1aWNrIHN0YXJ0ZXIgZG9jdW1lbnRhdGlvbiB0bworCWluY2x1ZGUgSURFIGNvbXBpbGF0aW9uLCBwcmV2ZW50IGFnYWluc3QgQlNEIE1ha2UsIGFuZCBzcGVjaWZ5IGBtYWtlCisJc2V0dXAnIGluc3RlYWQgb2YgYSBzaW5nbGUgYG1ha2UnIGZvciBidWlsZCBjb25maWd1cmF0aW9uLgorCisJKiBpbmNsdWRlL2NvbmZpZy9mdGJ1aWxkLmgsIGluY2x1ZGUvaW50ZXJuYWwvaW50ZXJuYWwuaDogQWRkZWQgbmV3CisJY29uZmlndXJhdGlvbiBmaWxlcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbG9jYXRpb24gb2YgYWxsIHB1YmxpYywKKwljb25maWd1cmF0aW9uLCBhbmQgaW50ZXJuYWwgaGVhZGVyIGZpbGVzIGZvciBGcmVlVHlwZSAyLiAgTW9kaWZpZWQKKwlhbGwgaGVhZGVycyB1bmRlciBgaW5jbHVkZS9mcmVldHlwZScgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZS4gIE5vdGUKKwl0aGF0IHdlIHN0aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSBsaWJyYXJ5IHNvdXJjZSBmaWxlcyB0aGVtc2VsdmVzCisJdGhvdWdoLgorCisJKiBidWlsZHMvY29tcGlsZXIvYmNjLm1rLCBidWlsZHMvY29tcGlsZXIvYmNjLWRldi5taywKKwlidWlsZHMvd2luMzIvdzMyLWJjYy5taywgYnVpbGRzL3dpbjMyL3czMi1iY2NkLm1rLAorCWJ1aWxkcy93aW4zMi9kZXRlY3QubWs6IEFkZGVkIG5ldyBmaWxlcyB0byBzdXBwb3J0IGNvbXBpbGF0aW9uIHdpdGgKKwl0aGUgZnJlZSBCb3JsYW5kIEMrKyBjb21tYW5kLWxpbmUgY29tcGlsZXIuICBNb2RpZmllZCB0aGUgZGV0ZWN0aW9uCisJcnVsZXMgdG8gcmVjb2duaXplIHRoZSBuZXcgYGJjYzMyJyB0YXJnZXQgaW4gYG1ha2Ugc2V0dXAgYmNjMzInLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYywgc3JjL3NmbnQvdHRwb3N0LmMsIHNyYy9zZm50L3R0c2JpdC5jLAorCXNyYy90cnVldHlwZS90dG9ianMuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywKKwlzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogRml4ZWQgYSBmZXcgY29tcGFyaXNvbnMgdGhhdCBCb3JsYW5kIEMrKworCWRpZG4ndCByZWFsbHkgbGlrZS4gIEJhc2ljYWxseSwgdGhpcyBjb21waWxlciBjb21wbGFpbnMgd2hlbiBGVF9VSW50CisJaXMgY29tcGFyZWQgdG8gRlRfVVNob3J0IChhcHBhcmVudGx5LCBpdCBwcm9tb3RlcyBgVVNob3J0JyB0byBgSW50JworCWluIHRoZXNlIGNhc2VzKS4KKworMjAwMC0xMS0zMCAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogdDJvYmpzLmMgKFQyX0luaXRfRmFjZSk6IEFkZGVkIGNhbGN1bGF0aW9uIG9mIGBmYWNlLT5oZWlnaHQnIGZvcgorCXB1cmUgQ0ZGIGZvbnRzLgorCisJKiB0MW9ianMuYyAoVDFfSW5pdF9GYWNlKTogRml4ZWQgY29tcHV0YXRpb24gb2YgYGZhY2UtPmhlaWdodCcuCisKKzIwMDAtMTEtMjkgIERhdmlkIFR1cm5lciAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0NvbmljX0NoZWNrKTogRml4ZWQgYSByZWFsbHkgc3R1cGlkCisJYnVnIGluIHRoZSBmb3JtdWxhIHVzZWQgdG8gY29tcHV0ZSB0aGUgY29uaWMgQsOpemllciBleHRyZW1hCisJb2Ygbm9uLW1vbm90b25vdXMgYXJjcy4KKworMjAwMC0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfU3FydEZpeGVkKSwgc3JjL2Jhc2UvZnRvYmpzLmMKKwkoRlRfU2V0X1JlbmRlcmVyKTogVXNlIEZUX0VYUE9SVF9ERUYuCisJKiBzcmMvY2FjaGUvZnRjaW1hZ2UuYyAoRlRDX0ltYWdlX0NhY2hlX0xvb2t1cCksCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKEZUQ19NYW5hZ2VyX0RvbmUsIEZUQ19NYW5hZ2VyX1Jlc2V0LAorCUZUQ19NYW5hZ2VyX0xvb2t1cF9GYWNlLCBGVENfTWFuYWdlcl9Mb29rdXBfU2l6ZSwKKwlGVENfTWFuYWdlcl9SZWdpc3Rlcl9DYWNoZSksIHNyYy9jYWNoZS9mdGNzYml0cy5jCisJKEZUQ19TQml0X0NhY2hlX0xvb2t1cCk6IERpdHRvLgorCisJKiBzcmMvaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNnbHlwaC5oIChGVENfR2x5cGhOb2RlX0luaXQpLAorCXNyYy9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmggKEZUX05ld19GYWNlX0Zyb21fRk9ORCk6IFVzZSBGVF9FWFBPUlQuCisKKzIwMDAtMTEtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSB0dHNiaXQuaCBhbmQgdHRwb3N0Lmggb25seQorCWNvbmRpdGlvbmFsbHkuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChTZXRfQ2hhcl9TaXplcywgU2V0X1BpeGVsX1NpemVzKTogU2V0CisJYHNpemUtPnN0cmlrZV9pbmRleCcgb25seSBjb25kaXRpb25hbGx5LgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYywgc3JjL3R5cGUxL3Qxb2Jqcy5jOiBJbmNsdWRlIHQxYWZtLmggb25seQorCWNvbmRpdGlvbmFsbHkuCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuaDogTW92ZSBhbGwgdHlwZSBkZWZpbml0aW9ucyB0by4uLgorCSogc3JjL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZm50dHlwZXMuaDogTmV3IGZpbGUuCisJKiBzcmMvd2luZm9udHMvd2luZm50LmM6IFVzZSBpdC4KKworMjAwMC0xMS0yOSAgPz8/ID8/PyAgPGRhcmluQGVhemVsLmNvbT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg6IFJlcGxhY2VkIEZUX0NBVCBhbmQgRlRfWENBVAorCXdpdGggYSBkaXJlY3Qgc29sdXRpb24gKHdoaWNoIGFsc28gc2F0aXNmaWVzIHBpY2t5IGNvbXBpbGVycykuCisKKzIwMDAtMTEtMjggIFlBTUFOTy1VQ0hJIEhpZGV0b3NoaSAgPG1lckBkaW4ub3IuanA+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoVFRfSW5pdF9TaXplKTogRml4ICNpZmRlZidzIHRvIHdvcmsgd2l0aAorCWRpc2FibGVkIGludGVycHJldGVyIGFsc28uCisKKwkqIHNyYy9iYXNlL2Z0bmFtZXMuYyAoRlRfR2V0X1NmbnRfTmFtZV9Db3VudCk6IEZpeCBpbmNvcnJlY3QKKwlwYXJlbnRoZXNlcy4KKworMjAwMC0xMS0yNiAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi90Mmdsb2FkLmMgKFQyX1BhcnNlX0NoYXJTdHJpbmdzKTogQWRkZWQgbG9naWMgdG8gZ2x5cGgKKwl3aWR0aCBzZXR0aW5nIGNvZGUgdG8gdGFrZSBpbnRvIGFjY291bnQgZXZlbi9vZGQgYXJndW1lbnQgY291bnRzCisJYW5kIGdseXBoIHdpZHRoIG9wZXJhbmQgYmVmb3JlIGVuZGNoYXIvaG1vdmV0by92bW92ZXRvLgorCisyMDAwLTExLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9hbnNpL2Fuc2kubWs6IEZpeCBpbmNsdXNpb24gb3JkZXIgb2YgZmlsZXMuCisKKzIwMDAtMTEtMjYgIEtlaXRoIFBhY2thcmQgIDxrZWl0aHBAa2VpdGhwLmNvbT4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9Jbml0X0ZhY2UpOiBDb21wdXRlIHN0eWxlIGZsYWdzLgorCisyMDAwLTExLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9jb21waWxlci9hbnNpLWNjLm1rIChDTEVBTl9MSUJSQVJZKTogRml4IHJ1bGUgYW5kCisJY29uZGl0aW9uYWwuCisKKzIwMDAtMTEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9zdWJycywgcGFyc2VfY2hhcnN0cmluZ3MpOiBVc2UgZGVjcnlwdAorCWZ1bmN0aW9uIGZyb20gUFNBdXggbW9kdWxlLgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChUMV9Eb25lX1BhcnNlKTogUmVuYW1lZCB0by4uLgorCShUMV9GaW5hbGl6ZV9QYXJzZXIpOiBOZXcgZnVuY3Rpb24gKHRvIGF2b2lkIG5hbWUgY2xhc2ggd2l0aCBhCisJZnVuY3Rpb24gaW4gdGhlIFBTQXV4IG1vZHVsZSkuCisJKFQxX0RlY3J5cHQpOiBSZW1vdmVkIHNpbmNlIGl0IGlzIGR1cGxpY2F0ZWQgaW4gdGhlIFBTQXV4IG1vZHVsZS4KKwkoVDFfR2V0X1ByaXZhdGVfRGljdCk6IEFkZGVkIGBwc2F1eCcgYXMgbmV3IHBhcmFtZXRlcjsgdXNlIGRlY3J5cHQKKwlmdW5jdGlvbiBmcm9tIFBTQXV4IG1vZHVsZS4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuaDogQWRhcHRlZC4KKworMjAwMC0xMS0yMiAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NmZi90Mm9ianMuYyAoVDJfSW5pdF9GYWNlKTogRm9yIHB1cmUgQ0ZGIGZvbnRzLCBzZXQKKwlgcm9vdC0+bnVtX2ZhY2VzJyB0byBgY2ZmLT5udW1fZmFjZXMnIGFuZCBzZXQgYHVuaXRzX3Blcl9FTScKKwl0byAxMDAwLgorCisJKiBzcmMvY2ZmL3QycGFyc2UuYyAocGFyc2VfdDJfcmVhbCk6IEZpeGVkIHJlYWwgbnVtYmVyIHBhcnNpbmcKKwlsb29wLgorCisJKiBzcmMvY2ZmL3QybG9hZC5jIChUMl9HZXRfU3RyaW5nKTogQ2FsbGVkIFQyX0dldF9OYW1lIHdpdGggYQorCXNpZCB0aGF0IHdhcyBvZmYgYnkgb25lLgorCisyMDAwLTExLTE2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haHR5cGVzLmggKEFIX0hpbnRlcik6IEFkZGVkIG5ldyBmaWVsZHMgdG8gY29udHJvbAorCWF1dG8taGludGluZyBvZiBzeW50aGV0aWMgVHlwZSAxIGZvbnRzLgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkLCBhaF9oaW50ZXJfbG9hZF9nbHlwaCk6CisJQWRkZWQgYXV0by1oaW50aW5nIHN1cHBvcnQgb2Ygc3ludGhldGljIFR5cGUgMSBmb250cy4KKworMjAwMC0xMS0xMiAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvb2tVcF9UYWJsZSwgVFRfTG9hZF9HZW5lcmljX1RhYmxlKTogQ2hhbmdlCisJdHJhY2luZyBvdXRwdXQuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChTRk5UX0xvYWRfRmFjZSk6IFNldCBib29sZWFuIHZhcmlhYmxlCisJYGhhcy1vdXRsaW5lJyB0byB0cnVlIG9ubHkgaWYgdGhlIGZvbnQgaGFzIGEgYGdseWYnIG9yIGBDRkYgJyB0YWJsZS4KKworMjAwMC0xMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IEZpeCByYXN0ZXIxLT5yYXN0ZXIgYW5kCisJdHlwZTF6LT50eXBlMS4KKworMjAwMC0xMS0xMSAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluLCBidWlsZHMvY3lnd2luL2ZyZWV0eXBlLWNvbmZpZy5pbjoKKwlBZGRlZCBhIC0tbGlidG9vbCBvcHRpb24uICBXaGVuIGZyZWV0eXBlLWNvbmZpZyAtLWxpYnRvb2wgaXMKKwlpbnZva2VkLCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5CisJaXMgcmV0dXJuZWQuCisKKzIwMDAtMTEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2N5Z3dpbi9jeWd3aW4tZGVmLmluOiBTYW1lIGZpeCBhcyBwcmV2aW91cy4KKworMjAwMC0xMS0xMCAgVG9tIEthY3ZpbnNreSAgPHRrYWN2aW5zQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW46IEFkZAorCisJICAgIElOU1RBTExfUFJPR1JBTSA6PSBASU5TVEFMTF9QUk9HUkFNQAorCSAgICBJTlNUQUxMX1NDUklQVCAgOj0gQElOU1RBTExfU0NSSVBUQAorCisJc28gdGhhdCBpbnN0YWxsYXRpb24gb2YgZnJlZXR5cGUtY29uZmlnIGRvZXMgbm90IGZhaWwuCisKKzIwMDAtMTEtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2N5Z3dpbi9mcmVldHlwZS1jb25maWcuaW4sIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjoKKwlNb3ZlIHRlc3QgZG93biBmb3IgZW1wdHkgLS1leGVjLXByZWZpeC4KKwlGaXggLS12ZXJzaW9uLgorCisJKiBidWlsZHMvY3lnd2luL2luc3RhbGwubWssIGJ1aWxkcy91bml4L2luc3RhbGwubWs6IFVzZQorCSQoSU5TVEFMTF9TQ1JJUFQpIGZvciBpbnN0YWxsYXRpb24gb2YgZnJlZXR5cGUtY29uZmlnLgorCisJKiBidWlsZHMvY3lnd2luL2luc3RhbGwubWs6IEZpeCBjbGVhbiB0YXJnZXQgbmFtZXMuCisKKzIwMDAtMTEtMDkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDAwLTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKK2FuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKK0xJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CitpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorZnVsbHkuCisKKworTG9jYWwgVmFyaWFibGVzOgordmVyc2lvbi1jb250cm9sOiBuZXZlcgorY29kaW5nOiB1dGYtOAorRW5kOgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L0NoYW5nZUxvZy4yMSBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmOGJlNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjEKQEAgLTAsMCArMSw5NDM5IEBACisyMDA1LTA2LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKworCSogVmVyc2lvbiAyLjEuMTAgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJKiBzcmMvcGNmL3JlYWRtZTogUmVuYW1lZCB0by4uLgorCSogc3JjL3BjZi9SRUFETUU6IFRoaXMuCisKKzIwMDUtMDYtMDcgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2EvKjogQWRkZWQgY29weXJpZ2h0IG5vdGVzLCByZXdvcmtlZCBzb21lIGNvbW1lbnRzLgorCisyMDA1LTA2LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIEFkZCBjb3B5cmlnaHQgbm90aWNlcyB0byBhbGwgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSBvbmUuCisKKwkqIGRvY3MvbGljZW5zZS50eHQ6IFJlbmFtZWQgdG8uLi4KKwkqIGRvY3MvTElDRU5TRS5UWFQ6IFRoaXMuCisJKiBkb2NzL0ZUTC50eHQ6IFJlbmFtZWQgdG8uLi4KKwkqIGRvY3MvRlRMLlRYVDogVGhpcy4KKwkqIGRvY3MvR1BMLnR4dDogUmVuYW1lZCB0by4uLgorCSogZG9jcy9HUEwuVFhUOiBUaGlzLgorCisJKiBkb2NzL1BBVEVOVFM6IFNsaWdodGx5IHJld29yZGVkLiAgU3VnZ2VzdGVkIGJ5IFN5bHZhaW4gQmV1Y2xlcgorCTxiZXVjQGdudS5vcmc+LgorCisyMDA1LTA2LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9PdXRsaW5lX01vdmVUb0Z1bmMsCisJRlRfT3V0bGluZV9MaW5lVG9GdW5jLCBGVF9PdXRsaW5lX0NvbmljVG9GdW5jLAorCUZUX091dGxpbmVfQ3ViaWNUb0Z1bmMsIEZUX1Jhc3Rlcl9SZW5kZXJGdW5jKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmggKEZUX0dseXBoX1RyYW5zZm9ybUZ1bmMsCisJRlRfUmVuZGVyZXJfUmVuZGVyRnVuYywgRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYyk6IERvbid0IHVzZQorCWBjb25zdCcgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggRnJlZVR5cGUgMi4xLjkuCisKKzIwMDUtMDYtMDEgIEFkYW0gRC4gTW9zcyAgPGFkYW1AZ2ltcC5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKGZ0X3N0cm9rZXJfaW5zaWRlKTogUmV2ZXJ0IGBzaWdtYScgcGF0Y2ggZnJvbQorCTIwMDQtMDctMTE7IHRoaXMgZ2l2ZXMgbXVjaCBiZXR0ZXIgcmVzdWx0cyB1bmRlciBub3JtYWwKKwljaXJjdW1zdGFuY2VzLgorCisyMDA1LTA1LTMwICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oIChGVF9CaXRtYXBfRW1ib2xkZW4pOiBNaW5vcgorCWRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCAoRlRfT3V0bGluZV9FbWJvbGRlbik6IEZpeCB0eXBvcy4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0VtYm9sZGVuKTogQWRkIHN1cHBvcnQgZm9yIGJpdG1hcAorCW9mIHBpeGVsX21vZGUgRlRfUElYRUxfTU9ERV9HUkFZMiBvciBGVF9QSVhFTF9NT0RFX0dSQVk0LgorCUlmIHhzdHIgaXMgbGFyZ2VyIHRoYW4gOCBhbmQgYml0bWFwIGlzIG9mIHBpeGVsX21vZGUKKwlGVF9QSVhFTF9NT0RFX01PTk8sIHNldCB4c3RyIHRvIDggaW5zdGVhZCBvZiByZXR1cm5pbmcgZXJyb3IuCisKKzIwMDUtMDUtMjkgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChGVF9CaXRtYXBfRW1ib2xkZW4pOiBGaXggZW1ib2xkZW5pbmcgYml0bWFwCisJb2YgbW9kZSBGVF9QSVhFTF9NT0RFX0dSQVkuICBBbHNvIGFkZCBzdXBwb3J0IGZvciBtb2RlCisJRlRfUElYRUxfTU9ERV9MQ0QgYW5kIEZUX1BJWEVMX01PREVfTENEX1YuCisJKGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKTogRlRfUElYRUxfTU9ERV9MQ0QgYW5kIEZUX1BJWEVMX01PREVfTENEX1YKKwlzaG91bGQgaGF2ZSBwcGIgKHBpeGVsIHBlciBieXRlKSAxLgorCVplcm8gdGhlIHBhZGRpbmcgd2hlbiB0aGVyZSdzIG5vIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmMgKEZUX0dseXBoU2xvdF9FbWJvbGRlbik6IEhhbmRsZSBzbG90LT5hZHZhbmNlCisJdG9vLgorCU1vcmUgc3VpdGVkIGVtYm9sZGVuaW5nIHN0cmVuZ3RoLgorCisyMDA1LTA1LTI4ICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0VtYm9sZGVuKTogSGFuZGxlIG5lZ2F0aXZlIHBpdGNoLgorCUhhbmRsZSBGVF9QSVhFTF9NT0RFX0dSQVkgd2l0aCBudW1fZ3JheSAhPSAyNTYuCisJSW1wcm92ZSBzcGVlZCBmb3IgRlRfUElYRUxfTU9ERV9HUkFZLgorCShmdF9iaXRtYXBfYXNzdXJlX2J1ZmZlcik6IEFjY2VwdCBGVF9QSVhFTF9NT0RFX0xDRCBhbmQKKwlGVF9QSVhFTF9NT0RFX0xDRF9WLgorCisyMDA1LTA1LTI3ICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL2Jhc2UvZnRzeW50aC5jIChGVF9HbHlwaFNsb3RfRW1ib2xkZW4pOiBJbml0aWFsaXplIGBlcnJvcicuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9jbWFwX2RvbmVfaW50ZXJuYWwpOiBOZXcgZnVuY3Rpb24uCisJKEZUX0NNYXBfRG9uZSk6IFJlbW92ZSBjbWFwIGZyb20gY21hcCBsaXN0LgorCShkZXN0cm95X2NoYXJtYXBzLCBGVF9DTWFwX05ldyk6IERvbid0IGNhbGwgRlRfQ01hcF9Eb25lIGJ1dAorCWZ0X2NtYXBfZG9uZV9pbnRlcm5hbC4KKworMjAwNS0wNS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0dQTC50eHQ6IFVwZGF0ZSBwb3N0YWwgYWRkcmVzcyBvZiBGU0YuCisKKzIwMDUtMDUtMjYgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmggKEZUX0JpdG1hcF9FbWJvbGRlbik6IEltcHJvdmUKKwlkb2N1bWVudGF0aW9uLgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmMgKEZUX0JPTERfVEhSRVNIT0xEKTogUmVtb3ZlZC4KKwkoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogQ2hlY2sgd2hldGhlciBzbG90IGlzIGJpdG1hcCBvd25lci4KKwlBbHdheXMgbW9kaWZ5IHRoZSBtZXRyaWNzLgorCisyMDA1LTA1LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNS0wNS0yNCAgQ2hpYSBJIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaCAoRlRfQml0bWFwX0VtYm9sZGVuKTogTmV3IGRlY2xhcmF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCAoRlRfT3V0bGluZV9FbWJvbGRlbik6IE5ldyBkZWNsYXJhdGlvbi4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOiBOZXcgYXV4aWxpYXJ5CisJZnVuY3Rpb24uCisJKEZUX0JpdG1hcF9FbWJvbGRlbik6IE5ldyBmdW5jdGlvbi4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0VtYm9sZGVuKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmM6IERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19IIGFuZAorCUZUX1RSSUdPTk9NRVRSWV9IIGJ1dCBGVF9CSVRNQVBfSC4KKwkoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogVXNlIEZUX091dGxpbmVfRW1ib2xkZW4gb3IKKwlGVF9CaXRtYXBfRW1ib2xkZW4uCisKKzIwMDUtMDUtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBBbHdheXMgcmVtb3ZlIGNvbmZpZy5taywgYnVpbGRzL3VuaXgvdW5peC1kZWYubWssIGFuZAorCWJ1aWxkcy91bml4L3VuaXgtY2MubWsuICBUaGlzIGZpeGVzIHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBzY3JpcHQuCisJUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlIGFuZCBCZWhkYWQgRXNmYWhib2QuCisKKwkqIFJFQURNRS5DVlM6IE1lbnRpb24gZmlsZSBwZXJtaXNzaW9ucy4KKworMjAwNS0wNS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0IChXQVJOSU5HUyksIGJ1aWxkcy9jb21waWxlci9nY2MtZGV2Lm1rCisJKENGTEFHUyksIGJ1aWxkcy9jb21waWxlci9nY2MubWsgKENGTEFHUyk6IFJlbW92ZQorCS1mbm8tc3RyaWN0LWFsaWFzaW5nLgorCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogRG9uJ3QgaW5jbHVkZSB0dHNiaXQwLmMgLS0KKwlpdCBpcyBjdXJyZW50bHkgbG9hZGVkIGZyb20gdHRzYml0LmMuCisKKzIwMDUtMDUtMjMgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBjcy50b3JvbnRvLmVkdT4KKworCVNheSB5b3UgaGF2ZSBgKEZvbyopeCcgYW5kIHdhbnQgdG8gYXNzaWduLCBwYXNzLCBvciByZXR1cm4gaXQgYXMKKwlgKEJhciopJy4gIElmIHlvdSBzaW1wbHkgc2F5IGB4JyBvciBgKEJhciopeCcsIHRoZW4gdGhlIEMgY29tcGlsZXIKKwl3b3VsZCB3YXJuIHlvdSB0aGF0IHR5cGUgY2FzdGluZyBpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBlcyBicmVha3MKKwlzdHJpY3QtYWxpYXNpbmcuICBUaGUgc29sdXRpb24gaXMgdG8gY2FzdCB0byBgKHZvaWQqKScgaW5zdGVhZCB3aGljaAorCWlzIHRoZSBnZW5lcmljIHBvaW50ZXIgdHlwZSwgc28gdGhlIGNvbXBpbGVyIGtub3dzIHRoYXQgaXQgc2hvdWxkCisJbWFrZSBubyBzdHJpY3QtYWxpYXNpbmcgYXNzdW1wdGlvbiBvbiBgeCcuICBCdXQgdGhlIHByb2JsZW0gd2l0aAorCWAodm9pZCopeCcgaXMgdGhhdCBzZWVtcyBsaWtlIGluIEMrKywgdW5saWtlIEMsIGB2b2lkKicgaXMgbm90IGEKKwlnZW5lcmljIHBvaW50ZXIgdHlwZSBhbmQgYXNzaWduaW5nIGB2b2lkKicgdG8gYEJhcionIHdpdGhvdXQgYSBjYXN0CisJY2F1c2VzIGFuIGVycm9yLiAgVGhlIHNvbHV0aW9uIGlzIHRvIGNhc3QgdG8gYEJhcionIHRvbywgd2l0aAorCWAoQmFyKikodm9pZCopeCcgYXMgdGhlIHJlc3VsdCAtLSB0aGlzIGlzIHdoYXQgdGhlIHBhdGNoIGRvZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX0NBQ0hFX0xPT0tVUF9DTVApLAorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjbXJ1LmggKEZUQ19NUlVMSVNUX0xPT0tVUF9DTVApOiBSZW1vdmUKKwljYXN0IG9uIGx2YWx1ZSwgdXNlIGEgdGVtcG9yYXJ5IHBvaW50ZXIgaW5zdGVhZC4KKwlDYXN0IHRlbXBvcmFyaWx5IHRvICh2b2lkKikgdG8gbm90IGJyZWFrIHN0cmljdCBhbGlhc2luZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChGVF9NRU1fQUxMT0MsCisJRlRfTUVNX1JFQUxMT0MsIEZUX01FTV9RQUxMT0MsIEZUX01FTV9RUkVBTExPQywgRlRfTUVNX0ZSRUUpLAorCXNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2x5cGhfVG9fQml0bWFwKTogQ2FzdCB0ZW1wb3JhcmlseSB0byAodm9pZCopCisJdG8gbm90IGJyZWFrIHN0cmljdCBhbGlhc2luZy4KKworCSogc3JjL2Jhc2UvZnRpbml0LmMgKEZUX1VTRV9NT0RVTEUpOiBGaXggd3JvbmcgdHlwZSBpbmZvcm1hdGlvbi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjIChYWF9DRkxBR1MpOiBSZW1vdmUgLWZuby1zdHJpY3QtYWxpYXNpbmcuCisKKzIwMDUtMDUtMjMgIERhdmlkIFR1cm5lciAgPGR0dXJuZXJAZnJlZXR5cGUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMTIyMTMgKGluY29ycmVjdCBiZWhhdmlvdXIgb2YgdGhlIGNhY2hlIHN1Yi1zeXN0ZW0KKwlpbiBsb3ctbWVtb3J5IGNvbmRpdGlvbnMpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DQUNIRV9UUllMT09QLAorCUZUQ19DQUNIRV9UUllMT09QX0VORCk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChGVENfQ2FjaGVfTmV3Tm9kZSksIHNyYy9jYWNoZS9mdGNzYml0cy5jCisJKGZ0Y19zbm9kZV9jb21wYXJlKTogVXNlIEZUX0NBQ0hFX1RSWUxPT1AgYW5kIEZUQ19DQUNFX1RSWUxPT1BfRU5ELgorCisyMDA1LTA1LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX1NSQyk6IERvbid0IGFkZCBmdHN5bnRoLmMgaGVyZSBidXQuLi4KKwkoQkFTRV9FWFRfU1JDKTogSGVyZS4KKworMjAwNS0wNS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKHJhY2Nlc3NfZ3Vlc3NfYXBwbGVfZ2VuZXJpYyk6IE1hcmsKKwlgdmVyc2lvbl9udW1iZXInIGFuZCBgZW50cnlfbGVuZ3RoJyBhcyB1bnVzZWQuCisJKHJhY2Nlc3NfZ3Vlc3NfbGludXhfZG91YmxlX2Zyb21fZmlsZV9uYW1lKTogUmVtb3ZlIGBtZW1vcnknLgorCShyYWNjZXNzX21ha2VfZmlsZV9uYW1lKTogTWFyayBgZXJyb3InIGFzIHVudXNlZC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9wcm9wZXJ0aWVzKTogUmVtb3ZlIGBtZW1vcnknLgorCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfaW5pdCk6IFJlbW92ZSBgcHNuYW1lcycuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFJlbW92ZSBgbWVtb3J5Jy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMsCisJZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMsIGZ0X3Zhcl9sb2FkX2F2YXIpOiBNYXJrIGBlcnJvcicgYXMgdW51c2VkLgorCisJKiBzcmMvYmFzZS9ydWxlcy5tayAoQkFTRV9TUkMpOiBBZGQgZnRzeW50aC5jLgorCisyMDA1LTA1LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogRml4IGEgYnVnIHRoYXQKKwlwcm9kdWNlZCB1bnBsZWFzYW50IGFydGVmYWN0cyB3aGVuIHRyeWluZyB0byBlbWJvbGRlbiB2ZXJ5IHNoYXJwCisJY29ybmVycy4KKworMjAwNS0wNS0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDUtMDUtMjAgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jOiBEb24ndCBpbmNsdWRlIEZUX0ZSRUVUWVBFX0ggYW5kIEZUX0lNQUdFX0gKKwlidXQgRlRfQklUTUFQX0guCisJKEZUX0JpdG1hcF9Db3B5KTogTmV3IGZ1bmN0aW9uIChmcm9tIGZ0Z2x5cGguYykuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaCAoRlRfQml0bWFwX0NvcHkpOiBOZXcgcHVibGljCisJZGVmaW5pdGlvbi4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jOiBJbmNsdWRlIEZUX0JJVE1BUF9ILgorCShmdF9iaXRtYXBfY29weSk6IE1vdmUgdG8gZnRiaXRtYXAuYy4KKwkoZnRfYml0bWFwX2dseXBoX2luaXQpOiBSZW1vdmUgYG1lbW9yeScgdmFyaWFibGUuCisJQ3JlYXRlIG5ldyBiaXRtYXAgb2JqZWN0IGlmIEZUX0dMWVBIX09XTl9CSVRNQVAgaXNuJ3Qgc2V0LgorCShmdF9iaXRtYXBfZ2x5cGhfY29weSk6IFVzZSBGVF9CaXRtYXBfQ29weS4KKwkoZnRfYml0bWFwX2dseXBoX2RvbmUpOiBVc2UgRlRfQml0bWFwX0RvbmUuCisJKGZ0X291dGxpbmVfZ2x5cGhfaW5pdCk6IFVzZSBGVF9PdXRsaW5lX0NvcHkuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9Db3B5KTogSGFuZGxlIHNvdXJjZSA9PSB0YXJnZXQuCisJKEZUX091dGxpbmVfRG9uZV9JbnRlcm5hbCk6IENoZWNrIGZvciB2YWxpZCBgbWVtb3J5JyBwb2ludGVyLgorCShGVF9PdXRsaW5lX1RyYW5zbGF0ZSwgRlRfT3V0bGluZV9SZXZlcnNlLCBGVF9PdXRsaW5lX1JlbmRlciwKKwlGVF9PdXRsaW5lX1RyYW5zZm9ybSk6IENoZWNrIGZvciB2YWxpZCBgb3V0bGluZScgcG9pbnRlci4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19HbHlwaFNsb3QpOiBQcmVwZW5kIGdseXBoIHNsb3QgdG8KKwlmYWNlLT5nbHlwaCwgb3RoZXJ3aXNlIGEgbmV3IHNlY29uZCBnbHlwaCBzbG90IGNhbm5vdCBiZSBjcmVhdGVkLgorCShGVF9Eb25lX0dseXBoU2xvdCk6IEZpeCBtZW1vcnkgbGVhay4KKwkoRlRfT3Blbl9GYWNlKTogVXBkYXRlZCAtLSBmYWNlLT5nbHlwaCBpcyBhbHJlYWR5IG1hbmFnZWQgYnkKKwlGVF9OZXdfR2x5cGhTbG90LgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0dseXBoU2xvdF9Eb25lKTogVXBkYXRlZC4KKworMjAwNS0wNS0yMCAgS2lyaWxsIFNtZWxrb3YgIDxraXJyQG1ucy5zcGIucnU+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9SYXN0ZXJfUGFyYW1zKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCAoRlRfT3V0bGluZV9UcmFuc2xhdGUsCisJRlRfT3V0bGluZV9UcmFuc2Zvcm0pLCBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfVHJhbnNsYXRlLAorCUZUX091dGxpbmVfVHJhbnNmb3JtKTogRGVjb3JhdGUgcGFyYW1ldGVycyB3aXRoIGBjb25zdCcgd2hlcmUKKwlhcHByb3ByaWF0ZS4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoZnRfYmxhY2tfcmVzZXQpLCBzcmMvc21vb3RoL2Z0Z3JheXMuYworCShncmF5X3Jhc3Rlcl9yZXNldCk6IFJlbW92ZSBgY29uc3QnIGZyb20gYHBvb2xfYmFzZScgYXJndW1lbnQuCisKKzIwMDUtMDUtMTggIEtpcmlsbCBTbWVsa292ICA8a2lyckBtbnMuc3BiLnJ1PgorCisJKiBzcmMvcmFzdGVyL2Z0bWlzYy5oOiBOZXcgZmlsZS4gIE9ubHkgbmVlZGVkIGlmIGZ0cmFzdGVyLmMgaXMKKwljb21waWxlZCBhcyBzdGFuZC1hbG9uZS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jOiBBZGQgY29tbWVudCBob3cgdG8gY29tcGlsZSBhcyBzdGFuZC1hbG9uZS4KKwlzL0ZUX0NPTkZJR19PUFRJT05fU1RBVElDX1JBU1RFUi9GVF9TVEFUSUNfUkFTVEVSLy4KKwlzL1RUX1NUQVRJQ19SQVNURVIvRlRfU1RBVElDX1JBU1RFUi8uCisJW19TVEFOREFMT05FX106IEluY2x1ZGUgZnRpbWFnZS5oIGFuZCBmdG1pc2MuaC4KKwkoRlRfVFJBQ0UxLCBGVF9UUkFDRTYsIGZ0X21lbXNldCwgRlRfTUVNX1pFUk8pOiBEZWZpbmUKKwljb25kaXRpb25hbGx5LgorCShSZW5kZXJfR2x5cGgsIFJlbmRlcl9HcmF5X0dseXBoKTogUmV0dXJuIFJhc3Rlcl9FcnJfTm9uZSAob3IKKwlSYXN0ZXJfRXJyX1Vuc3VwcG9ydGVkKS4KKwkoZnRfYmxhY2tfbmV3KSBbX1NUQU5EQUxPTkVfXTogRml4IHR5cGUgb2YgYHRoZV9yYXN0ZXInLgorCShmdF9ibGFja19pbml0LCBmdF9ibGFja19yZXNldCwgZnRfYmxhY2tfc2V0X21vZGUsIGZ0X2JsYWNrX3JlbmRlcik6CisJVXNlIGByYXMnLCBub3QgYHJhc3RlcicuCisJKGZ0X2JsYWNrX2RvbmUpOiBVc2UgRlRfVU5VU0VEX1JBU1RFUi4KKwkoSG9yaXpvbnRhbF9Td2VlcF9Jbml0LCBIb3Jpem9udGFsX1N3ZWVwX1N0ZXAsCisJSG9yaXpvbnRhbF9HcmF5X1N3ZWVwX1NwYW4pOiBVc2UgRlRfVU5VU0VEX1JBU1RFUi4KKworMjAwNS0wNS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL2Fubm91bmNlOiBTdGFydCB1cGRhdGluZy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA1LTA1LTE2ICBWaXRhbGl5IFBhc3Rlcm5hayAgPHZfYV9wYXN0ZXJuYWtAbWFpbC5ydT4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qOiBVcGRhdGVkLgorCUV4Y2x1ZGUgZGVidWcgaW5mbyBmb3IgYFJlbGVhc2UnIHZlcnNpb25zIHRvIHJlZHVjZSBsaWJyYXJ5IHNpemUuCisKKzIwMDUtMDUtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IE1ha2UgaXQgd29yayBhcyBkb2N1bWVudGVkLCB0aGlzCisJaXMsIGlnbm9yZSBgYWZhY2UnIGNvbXBsZXRlbHkgaWYgZmFjZV9pbmRleCA8IDAuICBSZXBvcnRlZCBieSBEYXZpZAorCU9zYm9ybiA8c3BhbUBoYWJpdHVhbGhpYXR1cy5jb20+LgorCisyMDA1LTA1LTE2ICBLaXJpbGwgU21lbGtvdiAgPGtpcnJAbW5zLnNwYi5ydT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX091dGxpbmVfTW92ZVRvRnVuYywKKwlGVF9PdXRsaW5lX0xpbmVUb19GdW5jLCBGVF9PdXRsaW5lX0NvbmljVG9GdW5jLAorCUZUX091dGxpbmVfQ3ViaWNUb0Z1bmMpLCBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfY29uaWMsCisJZ3JheV9yZW5kZXJfY3ViaWMsIGdyYXlfbW92ZV90bywgZ3JheV9saW5lX3RvLCBncmF5X2NvbmljX3RvLAorCWdyYXlfY3ViaWNfdG8sIGdyYXlfcmVuZGVyX3NwYW4sIGdyYXlfc3dlZXApOiBEZWNvcmF0ZSBwYXJhbWV0ZXJzCisJd2l0aCBgY29uc3QnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDA1LTA1LTExICBLaXJpbGwgU21lbGtvdiAgPGtpcnJAbW5zLnNwYi5ydT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX1Jhc3Rlcl9SZW5kZXJGdW5jKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmggKEZUX0dseXBoX1RyYW5zZm9ybUZ1bmMsCisJRlRfUmVuZGVyZXJfUmVuZGVyX0Z1bmMsIEZUX1JlbmRlcmVyX1RyYW5zZm9ybUZ1bmMpLAorCXNyYy9iYXNlL2Z0Z2x5cGguYyAoZnRfb3V0bGluZV9nbHlwaF90cmFuc2Zvcm0pLAorCXNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3RyYW5zZm9ybSwgZnRfcmFzdGVyMV9yZW5kZXIpLAorCXNyYy9zbW9vdGgvZnRncmF5cy5jIChGVF9PdXRsaW5lX0RlY29tcG9zZSwgZ3JheV9yYXN0ZXJfcmVuZGVyKSwKKwlzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF90cmFuc2Zvcm0sCisJZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljLCBmdF9zbW9vdGhfcmVuZGVyLCBmdF9zbW9vdGhfcmVuZGVyX2xjZCwKKwlmdF9zbW9vdGhfcmVuZGVyX2xjZF92KTogRGVjb3JhdGUgcGFyYW1ldGVycyB3aXRoIGBjb25zdCcgd2hlcmUKKwlhcHByb3ByaWF0ZS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChSQVNURVJfUkVOREVSX1BPT0wpOiBSZW1vdmVkLiAgT2Jzb2xldGUuCisJKGZ0X2JsYWNrX3JlbmRlcik6IERlY29yYXRlIHBhcmFtZXRlcnMgd2l0aCBgY29uc3QnIHdoZXJlCisJYXBwcm9wcmlhdGUuCisKKzIwMDUtMDUtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXA0X3NldF9yYW5nZSk6IEZpeCB0eXBvIChGVF9QRUVLX1NIT1JUIC0+CisJRlRfUEVFS19VU0hPUlQpIHdoaWNoIGNhdXNlZCBjcmFzaGVzLiAgUmVwb3J0ZWQgYnkgSXNtYWlsIERvbm1legorCTxpc21haWxAa2RlLm9yZy50cj4uCisKKzIwMDUtMDUtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKQorCVtfX2NwbHVzcGx1c106IEZpeCB0eXBvLgorCisyMDA1LTA1LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlIYW5kbGUgdW5zb3J0ZWQgU0ZOVCB0eXBlIDQgY21hcHMgY29ycmVjdGx5IChyZXBvcnRlZCBieSBEaXJjaworCUJsYXNrZXkgPGxpc3R0YXJnZXRAZGFuYmFsYS5jb20+KS4KKworCSogc3JjL3NmbnQvdHRjbWFwLmggKFRUX0NNYXApOiBBZGQgbWVtYmVyIGB1bnNvcnRlZCcuCisJKiBzcmMvc2ZudC90dGNtYWMuYzogVXNlIFNGTlRfRXJyX09rIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKHR0X2NtYXAwX3ZhbGlkYXRlLCB0dF9jbWFwMl92YWxpZGF0ZSwgdHRfY21hcDZfdmFsaWRhdGUsCisJdHRfY21hcDhfdmFsaWRhdGUsIHR0X2NtYXAxMF92YWxpZGF0ZSwgdHRfY21hcDEyX3ZhbGlkYXRlKTogVXNlCisJYEZUX0Vycm9yJyBhcyByZXR1cm4gdHlwZS4KKwkodHRfY21hcDRfdmFsaWRhdGUpOiBVc2UgYEZUX0Vycm9yJyBhcyByZXR1cm4gdHlwZS4KKwlSZXR1cm4gZXJyb3IgY29kZSBmb3IgdW5zb3J0ZWQgY21hcC4KKwkodHRfY21hcDRfY2hhcl9pbmRleCwgdHRfY21hcDRfY2hhcl9uZXh0KTogVXNlIG9sZCBjb2RlIGZvciB1bnNvcnRlZAorCWNtYXBzLgorCSh0dF9mYWNlX2J1aWxkX2NtYXBzKTogU2V0IGB1bnNvcnRlZCcgdmFyaWFibGUgaW4gY21hcC4KKworMjAwNS0wNS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2dldF9sb2NhdGlvbik6IEZpeCB0eXBvLgorCisyMDA1LTA1LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogU2V0IHBwZW0gdmFsdWUgaW4gdG9wCisJZGljdGlvbmFyeSBmb3IgU0ZOVC1iYXNlZCBDRkYuCisKKzIwMDUtMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUhhbmRsZSBtYWxmb3JtZWQgYGxvY2EnIHRhYmxlIGVudHJpZXMuCisKKwkqIGRvY3MvVE9ETzogQWRkIHNvbWUgYnVncyB3aGljaCBzaG91bGQgYmUgZml4ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKTogQWRkIGBnbHlmX2xlbicKKwllbGVtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2xvYWRfbG9jYSk6IEdldCBsZW5ndGggb2YgYGdseWYnCisJdGFibGUuCisJKHR0X2ZhY2VfZ2V0X2xvY2F0aW9uKTogRml4IGNvbXB1dGF0aW9uIG9mIGBhc2l6ZScgZm9yIG1hbGZvcm1lZAorCWBsb2NhJyBlbnRyaWVzLgorCisyMDA1LTA1LTAxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIEphbWZpbGU6IFJlbW92ZSBgb3R2YWxpZCcgZnJvbSB0aGUgbGlzdCBvZiBjb21waWxlZCBtb2R1bGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oOiBBZGQgY29tcGlsZXIgcHJhZ21hcyB0byBnZXQKKwlyaWQgb2YgYW5ub3lpbmcgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrIGNvbXBpbGVyIGluIG1heGltdW0gd2FybmluZworCW1vZGUuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYywgc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvYmFzZS9mdHN0cm9rZS5jLAorCXNyYy9iZGYvYmRmZHJpdnIuYywgc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMsIHNyYy9jYWNoZS9mdGNjbWFwLmMsCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMsIHNyYy9jZmYvY2ZmbG9hZC5jLCBzcmMvY2lkL2NpZGxvYWQuYywKKwlzcmMvbHp3L3pvcGVuLmMsIHNyYy9vdHZhbGlkL290dmdkZWYuYywgc3JjL3BjZi9wY2ZyZWFkLmMsCisJc3JjL3NmbnQvc2ZvYmpzLmMsIHNyYy90cnVldHlwZS90dGd4dmFyLmM6IFJlbW92ZSBjb21waWxlciB3YXJuaW5ncy4KKworMjAwNS0wNC0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL1RPRE86IFVwZGF0ZWQuCisKKzIwMDUtMDQtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290dmFsaWQvb3R2Y29tbW4uYworCShvdHZfR1NVQkdQT1NfaGF2ZV9NYXJrQXR0YWNobWVudFR5cGVfZmxhZyk6IEhhbmRsZSB0YWJsZSA9PSAwLgorCisyMDA1LTA0LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogU2V0IGRlZmF1bHQgdXBlbSB2YWx1ZSBpbiB0b3AKKwlmb250IGRpY3QgYWxzby4KKwlIYW5kbGUgZm9udCBtYXRyaXggc2V0dGluZ3MgaW4gc3ViZm9udHMuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFVzZSB0aGUgY29ycmVjdCBmb250IG1hdHJpeAorCWZvciBDSUQta2V5ZWQgZm9udHMgd2l0aCBzdWJmb250cy4KKworCSogZG9jcy9mb3JtYXRzLnR4dDogVXBkYXRlZC4KKworMjAwNS0wNC0xNCAgS2lyaWxsIFNtZWxrb3YgIDxraXJyQG1ucy5zcGIucnU+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfVmVjdG9yX1RyYW5zZm9ybSksCisJaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX1Jhc3Rlcl9QYXJhbXMpLAorCWluY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oLCBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X0NCb3gsCisJRlRfT3V0bGluZV9Db3B5LCBGVF9PdXRsaW5lX1RyYW5zZm9ybSwgRlRfVmVjdG9yX1RyYW5zZm9ybSwKKwlGVF9PdXRsaW5lX0dldF9CaXRtYXApLCBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKGZ0X2JsYWNrX3JlbmRlciksCisJc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmFzdGVyX3JlbmRlcik6IERlY29yYXRlIHBhcmFtZXRlcnMgd2l0aAorCWBjb25zdCcgd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMDUtMDQtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyk6IENhdGNoIHRoaXMgbm9uLXN0YW5kYXJkCisJYmVnaW5uaW5nIG9mIHRoZSAvQ2hhclN0cmluZ3MgZGljdGlvbmFyeToKKworCSAgL0NoYXJTdHJpbmdzIDExOCBkaWN0IGRlZgorCSAgUHJpdmF0ZSBiZWdpbgorCSAgQ2hhclN0cmluZ3MgYmVnaW4KKworCSogc3JjL3NmbnQvdHRzYml0MC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSk6IEZpeCBhcmd1bWVudHMKKwl0byBjYWxsIG9mIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcC4KKworMjAwNS0wNC0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL1RPRE86IFVwZGF0ZWQuCisKKwkqIGF1dG9nZW4uc2g6IFVzZSBgLS1mb3JjZScgZm9yIGFsbCBjb21tYW5kcy4KKworMjAwNS0wNC0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jIChwc19oaW50c19hcHBseSk6IENoYW5nZSBzY2FsaW5nIHZhbHVlcworCW9ubHkgaWYgYGZpdHRlZCcgaXMgbm90IHplcm8uCisKKzIwMDUtMDQtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfZmFjZV9nZXRfbWV0cmljcykgW0ZUX09QVElNSVpFX01FTU9SWV06CisJRml4IHR5cG8gd2hpY2ggc29tZXRpbWVzIGNhdXNlcyB3cm9uZyBtZXRyaWNzIGZvciB0aGUgbGFzdCBnbHlwaC4KKworMjAwNS0wNC0wNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKEZUX09QVElNSVpFX01FTU9SWSk6IENvbW1lbnQgb3V0IHRoaXMgbWFjcm8gZm9yIHRoZSB1cGNvbWluZyAyLjEuMTAKKwlyZWxlYXNlLgorCSgqX0NIRVNURVJfKik6IFJlbW92ZWQuICBObyBsb25nZXIgdXNlZC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9heGlzX2hpbnRzX25ld19zZWdtZW50LAorCWFmX2F4aXNfaGludHNfbmV3X2VkZ2UpOiBTbWFsbCB0d2VhayB0byB1c2UgbGVzcyBoZWFwIG1lbW9yeS4KKworMjAwNS0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChUMV9OZXdfUGFyc2VyKTogUmVsYXggdGhlIGNoZWNrIGZvciBhIHZhbGlkCisJZmlyc3QgbGluZSBpbiB0aGUgZm9udC4KKworMjAwNS0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVMsIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogSW1wcm92ZSBkb2N1bWVudGF0aW9uCisJb2YgRlRfU2V0X1BpeGVsX1NpemVzIGFuZCBGVF9TZXRfQ2hhcl9TaXplLgorCisyMDA1LTAzLTI2ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmMgKGZ0X2FtaWdhX3N0cmVhbV9pbyk6IEZpeCBidWZmZXIKKwlvZmZzZXRzIGFmdGVyIGEgbGFyZ2UgcmVhZC4KKworMjAwNS0wMy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfZ2V0X21ldHJpY3MpOgorCXMvaW5kZXgvZ2lkeC8uCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UpOiBGaXggY29tcGlsZXIKKwl3YXJuaW5ncy4KKworCSogc3JjL3NmbnQvcnVsZXMubWsgKFNGTlRfRFJWX1NSQyk6IEFkZCB0dHNiaXQwLmMuCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuaDogRHVtbXkgZmlsZSBmb3IgYnVpbGQgd2l0aCBgbWFrZScuCisKKzIwMDUtMDMtMjYgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJVXBkYXRlIG9mIHRoZSBBbWlnYSBwb3J0LgorCisJKiBidWlsZHMvYW1pZ2EvbWFrZWZpbGUsIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQsCisJYnVpbGRzL2FtaWdhL3NtYWtlZmlsZTogSW5jbHVkZWQgdGhlIGJhc2UgZXh0ZW5zaW9uIGZpbGVzCisJKGZ0Yml0bWFwLmMsIGZ0b3R2YWwuYywgZnRwZnIuYywgZnRzdHJva2UuYywgZnR4Zjg2LmMpLgorCisyMDA1LTAzLTI1ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCVVwZGF0ZSBvZiB0aGUgQW1pZ2EgcG9ydC4KKworCSogYnVpbGRzL2FtaWdhL21ha2VmaWxlLCBidWlsZHMvYW1pZ2Evc21ha2VmaWxlOiBIYW5kbGUgbmV3IG1vZHVsZXMuCisKKwkqIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQ6IE1ha2VmaWxlIGZvciBBbWlnYU9TNCBTREsuCisKKwkqIGJ1aWxkcy9hbWlnYS9SRUFETUU6IFVwZGF0ZWQuCisKKwkqIGJ1aWxkcy9hbWlnYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBIYW5kbGUgZ2NjIGZvcgorCUFtaWdhT1M0LgorCisJKiBidWlsZHMvYW1pZ2EvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogSGFuZGxlIG5ldworCW1vZHVsZXMuCisKKwkqIGJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmM6IFVwZGF0ZWQgdG8gY3VycmVudCB2ZXJzaW9uIG9mCisJZGVmYXVsdCBmdGRlYnVnLmMuCisJQWRkIHZhcmlvdXMgaW5jbHVkZSBmaWxlcyBhbmQgbWFjcm9zIHRvIGhhdmUgcHJvcGVyIHN1cHBvcnQgZm9yCisJYm90aCBBbWlnYU9TNCBhbmQgb2xkZXIgQW1pZ2FPUyB2ZXJzaW9ucy4KKwlEb24ndCBkZWNsYXJlIEtWUHJpbnRGIGV4cGxpY2l0bHkuCisJUmVwbGFjZSBnZXRlbnYgd2l0aCBHZXRWYXIuCisJQWN0dWFsbHkgZW5hYmxlIGRlYnVnZ2luZyBjb2RlLgorCisJKiBidWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRzeXN0ZW0uYzogTWFqb3IgcmV3cml0ZS4KKworMjAwNS0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiB0ZXN0cy8qOiBSZW1vdmVkLgorCisyMDA1LTAzLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9JTlNUQUxMLkFOWTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oOiBSZXBsYWNlIGBBdXRvaGludCcgd2l0aCBgQXV0b2ZpdCcuCisJQWRkIGBPVHZhbGlkJy4KKworCSogc3JjL2F1dG9maXQvYWZlcnJvcnMuaDogTmV3IGZpbGUuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMsIHNyYy9hdXRvZml0L2FmaGludHMuYywKKwlzcmMvYXV0b2ZpdC9hZmxhdGluLmMsIHNyYy9hdXRvZml0L2FmbG9hZGVyLmM6IHMvRlRfRXJyXy9BRl9FcnJfLy4KKwlJbmNsdWRlIGFmZXJyb3JzLmguCisKKwkqIHNyYy9hdXRvZml0L3J1bGVzLm1rIChBVVRPRl9EUlZfSCk6IEluY2x1ZGUgYWZlcnJvcnMuaC4KKworCSogc3JjL290dmFsaWQvb3R2ZXJyb3IuaDogcy9GVF9Nb2RfRXJyX09UVi9GVF9Nb2RfRXJyX09UdmFsaWQvLgorCisyMDA1LTAzLTIyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC8qOiBSZW1vdmVkLgorCSogSmFtZmlsZTogVXBkYXRlZC4KKworMjAwNS0wMy0xNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmRmL2JkZmxpYi5jOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MuCisJKGhhc2hfcmVoYXNoLCBoYXNoX2luaXQpOiBEb24ndCBjYWxsIEZUX01FTV9aRVJPLgorCShfYmRmX2xpc3RfdCk6IEFkZCBgbWVtb3J5JyBmaWVsZC4KKwkoX2JkZl9saXN0X2luaXQsIF9iZGZfbGlzdF9kb25lLCBfYmRmX2xpc3RfZW5zdXJlKTogTmV3IGZ1bmN0aW9ucy4KKwkoX2JkZl9zaGlmdCwgX2JkZl9qb2luKTogUmVuYW1lIHRvLi4uCisJKF9iZGZfbGlzdF9zaGlmdCwgX2JkZl9saXN0X2pvaW4pOiBUaGlzLgorCShfYmRmX3NwbGl0KTogUmVuYW1lZCB0by4uLgorCShfYmRmX2xpc3Rfc3BsaXQpOiBUaGlzLiAgVXNlIG5ldyBmdW5jdGlvbnMuCisJKGJkZl9pbnRlcm5hbF9yZWFkc3RyZWFtKTogUmVtb3ZlZC4KKwkoTk9fU0tJUCk6IE5ldyBtYWNyby4KKwkoX2JkZl9yZWFkc3RyZWFtKTogUmV3cml0dGVuLgorCShiZGZfY3JlYXRlX3Byb3BlcnR5LCBfYmRmX2FkZF9jb21tZW50KTogSW1wcm92ZSBhbGxvY2F0aW9uLgorCShfYmRmX3NldF9kZWZhdWx0X3NwYWNpbmcsIF9iZGZfcGFyc2VfZ2x5cGhzKTogVXBkYXRlZC4gIEltcHJvdmUKKwlhbGxvY2F0aW9uLgorCShfYmRmX3BhcnNlX3Byb3BlcnRpZXMsIF9iZGZfcGFyc2Vfc3RhcnQpOiBVcGRhdGVkLgorCShiZGZfbG9hZF9mb250KTogVXBkYXRlZCB0byB1c2UgbmV3IGZ1bmN0aW9ucy4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoY2hlY2tfdHlwZTFfZm9ybWF0KTogTmV3IGZ1bmN0aW9uLgorCShUMV9OZXdfUGFyc2VyKTogVXNlIGl0IHRvIGNoZWNrIGZvbnQgaGVhZGVyIGJlZm9yZSBhbGxvY2F0aW5nCisJYW55dGhpbmcgb24gdGhlIGhlYXAuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYwkodDQyX3BhcnNlcl9pbml0KTogTW9kaWZ5IGZ1bmN0aW9ucyB0byBjaGVjaworCXRoZSBmb250IGhlYWRlciBiZWZvcmUgYWxsb2NhdGluZyBhbnl0aGluZyBvbiB0aGUgaGVhcC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChGVF9BUlJBWV9NQVgsCisJRlRfQVJSQVlfQ0hFQ0spOiBOZXcgbWFjcm9zLgorCisJKiBzcmMvYmFzZS9mdHN0cmVhbS5jIChGVF9TdHJlYW1fVHJ5UmVhZCk6IE5ldyBmdW5jdGlvbi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaDogVXBkYXRlZC4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9yZWFkX1RPQyksIHNyYy9wY2YvcGNmdXRpbC5jCisJKEJpdE9yZGVySW52ZXJ0LCBUd29CeXRlU3dhcCwgRm91ckJ5dGVTd2FwKTogTWlub3IgZml4ZXMgYW5kCisJc2ltcGxpZmljYXRpb25zLiAgVHJ5IHRvIHByb3RlY3QgdGhlIFBDRiBkcml2ZXIgZnJvbSBkb2luZyBzdHVwaWQKKwl0aGluZ3Mgd2l0aCBicm9rZW4gZm9udHMuCisKKwkqIHNyYy9sencvZnRsencuYyAoRlRfU3RyZWFtX09wZW5MWlcpOiBDaGVjayB0aGUgTFpXIGhlYWRlciBiZWZvcmUKKwlkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgaGVhcCBhbGxvY2F0aW9ucworCSg0MDBLQnl0ZSBvZiBoZWFwIG1lbW9yeSBmb3IgdGhlIExaVyBkZWNvZGVyKS4KKworCSogc3JjL2d6aXAvZnRnemlwLmMgKEZUX1N0cmVhbV9PcGVuR1ppcCk6IERpdHRvIGZvciB0aGUgZ3ppcAorCWRlY29kZXIsIGFsdGhvdWdoIHRoZSBjb2RlIHNhdmluZ3MgYXJlIHNtYWxsZXIuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNS0wMy0xMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdG9vbHMvZ2xuYW1lcy5weTogQWRkIGNvbW1lbnQgdG8gZXhwbGFpbiB0aGUgY29tcHJlc3Npb24KKwliZWluZyB1c2VkIGZvciB0aGUgQWRvYmUgR2x5cGggTGlzdC4KKworMjAwNS0wMy0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2xvYWRfY3Z0LCB0dF9mYWNlX2xvYWRfZnBnbSk6CisJRml4IHNlcmlvdXMgdHlwbyB3aGljaCBwcmV2ZW50ZWQgY29ycmVjdCBUVCByZW5kZXJpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaDogVW5kbyBjaGFuZ2UgZnJvbSAyMDA1LTAzLTAzLgorCVRvIHN1cHByZXNzIHdhcm5pbmdzIGl0IGlzIHN1ZmZpY2llbnQgdG8gdXNlIGAtZm5vLXN0cmljdC1hbGlhc2luZycuCisKKzIwMDUtMDMtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHk6IEZvcm1hdHRlZC4KKwlGb3JtYXQgb3V0cHV0IHRvIGJlIGluIHN5bmMgd2l0aCBvdGhlciBGcmVlVHlwZSBjb2RlLgorCUltcG9ydCBgcmUnIGFuZCBgb3MucGF0aCcuCisJKFN0cmluZ1RhYmxlKSA8X19pbml0X18+OiBBZGQgcGFyYW1ldGVyIHRvIGluaXRpYWxpemUgbWFzdGVyIHRhYmxlCisJbmFtZS4KKwkoU3RyaW5nVGFibGUpIDxkdW1wPjogRG9uJ3QgcGFzcyBtYXN0ZXIgdGFibGUgbmFtZS4KKwkoU3RyaW5nVGFibGUpIDxkdW1wX3N1Ymxpc3Q+OiBFbWl0IGV4cGxhbmF0b3J5IGNvbW1lbnQuCisJU2ltcGxpZnkgYW5kIG1ha2Ugb3V0cHV0IG1vcmUgaHVtYW4gcmVhZGFibGUuCisJKHQxX2JpYXMsIGdseXBoX2xpc3QsIGFkb2JlX2dseXBoX25hbWVzKTogUmVtb3ZlZC4gIFVudXNlZC4KKwkobWFpbik6IFVzZSBgYmFzZW5hbWUnIGZvciBmaWxlIG5hbWUgaW4gaGVhZGVyLgorCisJKiBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oOiBSZWdlbmVyYXRlZC4KKworMjAwNS0wMy0wOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdG9vbHMvZ2xuYW1lcy5weTogUmV3cml0ZSB0aGUgZ2VuZXJhdG9yIGZvciB0aGUgYHBzdGFibGVzLmgnCisJaGVhZGVyIGZpbGUgd2hpY2ggY29udGFpbnMgdmFyaW91cyBjb25zdGFudCB0YWJsZXMgcmVsYXRlZCB0byBnbHlwaAorCW5hbWVzLiAgSXQgbm93IHVzZXMgYSBkaWZmZXJlbnQsIG1vcmUgY29tcGFjdCBzdG9yYWdlIHNjaGVtZSB0aGF0CisJc2F2ZXMgYWJvdXQgMjBLQi4gIFRoaXMgYWxzbyBjbG9zZXMgU2F2YW5uYWggYnVnICMxMjI2Mi4KKworCSogc3JjL3BzbmFtZXMvcHN0YWJsZXMuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzX3VuaWNvZGVfdmFsdWUpOiBVc2UKKwlgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4JywgYSBuZXcgZnVuY3Rpb24gZGVmaW5lZCBpbiBgcHN0YWJsZXMuaCcuCisJKHBzX2dldF9tYWNpbnRvc2hfbmFtZSwgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MpOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZXMpOiBIYW5kbGUgZnJhY3Rpb25hbCBzaXplcworCW1vcmUgY2FyZWZ1bGx5LiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzEyMjYzLgorCisyMDA1LTAzLTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9vdHZhbGlkL290dmdzdWIuYywgc3JjL290dmFsaWQvb3R2Z3Bvcy5jOiBNYWtlIHN0YXRpYyB0YWJsZXMKKwljb25zdGFudC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXQpOiBGaXggU2F2YW5uYWggYnVnCisJIzEyMjEyIChhdXRvLWhpbnRlciByZWZ1c2VzIHRvIHdvcmsgaWYgbm8gVW5pY29kZSBjaGFybWFwIGluIGZvbnQpLgorCisyMDA1LTAzLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGF1dG9nZW4uc2g6IE5ldyBzY3JpcHQgZm9yIGJvb3RzdHJhcHBpbmcuCisKKwkqIFJFQURNRS5DVlM6IE5ldyBmaWxlIHdoaWNoIGRvY3VtZW50cyBib290c3RyYXBwaW5nLgorCisJKiBidWlsZHMvdW5peC9hY2xvY2FsLm00LCBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsCisJYnVpbGRzL3VuaXgvY29uZmlnLnN1YiwgYnVpbGRzL3VuaXgvY29uZmlndXJlLAorCWJ1aWxkcy91bml4L2x0bWFpbi5zaDogUmVtb3ZlZC4KKworMjAwNS0wMy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0guCisKKzIwMDUtMDMtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVZhcmlvdXMgZml4ZXMgZm9yIEMgYW5kIEMrKyBjb21waWxpbmcuCisKKwkqIHNyYy9hdXRvZml0Lyo6IEFkZCBjb3B5cmlnaHQgbWVzc2FnZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfZG9uZSk6IERvbid0IHVzZQorCWBBRl9EaW1lbnNpb24nIGJ1dCBgaW50JyBmb3IgbG9vcCBjb3VudGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMpOiBEb24ndCB1c2UKKwlgQUZfRGltZW5zaW9uJyBidXQgYGludCcgZm9yIGxvb3AgY291bnRlci4KKwlVc2UgcHJvcGVyIGVudW1lcmF0aW9uIHZhbHVlIGZvciBgcmVuZGVyX21vZGUnLgorCShhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSk6IERvbid0IHNoYWRvdyB2YXJpYWJsZXMuCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpOiBVc2UgcHJvcGVyIGNhc3QgZm9yIGBtYWpvcl9kaXInCisJYW5kIGBzZWdtZW50X2RpcicuCisJKGFmX2xhdGluX2FsaWduX2xpbmtlZF9lZGdlLCBhZl9sYXRpbl9oaW50X2VkZ2VzKTogRml4IGFyZ3VtZW50cyBvZiBjYWxsIHRvCisJYGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCcuCisJKGFmX2xhdGluX2hpbnRzX2FwcGx5KTogRG9uJ3QgdXNlIGBBRl9EaW1lbnNpb24nIGJ1dCBgaW50JyBmb3IgbG9vcAorCWNvdW50ZXIuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKGZ0X21lbV90YWJsZV9nZXRfc291cmNlLCBGVF9EdW1wTWVtb3J5KTogVXNlCisJcHJvcGVyIGNhc3QgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfa2VybmluZyk6IFVzZSBwcm9wZXIgY2FzdCBmb3IKKwlpbml0aWFsaXphdGlvbiBvZiBgc2ZudCcuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmM6IEluY2x1ZGUgYHR0a2Vybi5oJy4KKworCSogc3JjL3NmbnQvdHRrZXJuLmMgKHR0X2ZhY2VfZ2V0X2tlcm5pbmcpOiBEb24ndCBzaGFkb3cgdmFyaWFibGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBJbmNsdWRlIGB0dHBsb2FkLmgnLgorCisyMDA1LTAzLTAzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfQUxMT0MsIEZUX1JFQUxMT0MsCisJRlRfUUFMTE9DLCBGVF9RUkVBTExPQykgW2djYyA+PSAzLjNdOiBQcm92aWRlIG1hY3JvIHZlcnNpb25zIHdoaWNoCisJYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisJKEZUX05FVywgRlRfTkVXX0FSUkFZLCBGVF9SRU5FV19BUlJBWSwgRlRfUU5FVywgRlRfUU5FV19BUlJBWSwKKwlGVF9RUkVORVdfQVJSQVksIEZUX0FMTE9DX0FSUkFZLCBGVF9SRUFMTE9DX0FSUkFZKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfRkFDRV9GSU5EX1NFUlZJQ0UsCisJRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFLCBGVF9GQUNFX0xPT0tVUF9TRVJWSUNFKSBbX19jcGx1c3BsdXNdOgorCVByb3ZpZGUgbWFjcm8gdmVyc2lvbnMgd2hpY2ggYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9oaWdocG93Mik6IE5ldyB1dGlsaXR5IGZ1bmN0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBVcGRhdGVkLgorCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2dldF9naW5kZXgsIHBmcl9jb21wYXJlX2tlcm5fcGFpcnMsCisJcGZyX3NvcnRfa2VybmluZ19wYWlycyk6IERvbid0IGRlZmluZSBpZiBGVF9PUFRJTUlaRV9NRU1PUlkgaXMgc2V0LgorCShwZnJfcGh5X2ZvbnRfZG9uZSk6IERvbid0IGhhbmRsZSBga2Vybl9wYWlycycgaWYgRlRfT1BUSU1JWkVfTUVNT1JZCisJaXMgc2V0LgorCShwZnJfcGh5X2ZvbnRfbG9hZCk6IERvbid0IGNhbGwgYHBmcl9zb3J0X2tlcm5pbmdfcGFpcnMnIGlmCisJRlRfT1BUSU1JWkVfTUVNT1JZIGlzIHNldC4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9zbG90X2xvYWQpOiBDb21tZW50IG91dCBzb21lIGNvZGUgd2hpY2gKKwlkb2Vzbid0IHdvcmsgd2l0aCBicm9rZW4gZm9udHMuCisJKHBmcl9mYWNlX2dldF9rZXJuaW5nKSBbRlRfT1BUSU1JWkVfTUVNT1JZXTogSW1wbGVtZW50LgorCisJKiBzcmMvcGZyL3BmcnR5cGVzLmggKFBGUl9LZXJuSXRlbVJlYyk6IE9wdGltaXplIG1lbWJlciB0eXBlcy4KKwkoUEZSX05FWFRfS1BBSVIpOiBOZXcgbWFjcm8uCisJKFBGUl9QaHlGb250UmVjKTogRG9uJ3QgZGVmaW5lIGBrZXJuX3BhaXJzJyBpZiBGVF9PUFRJTUlaRV9NRU1PUlkgaXMKKwlzZXQuCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UpOiBJbnRyb2R1Y2UKKwl0ZW1wb3JhcnkgdmFyaWFibGUgdG8gYXZvaWQgZ2NjIHdhcm5pbmcuCisJKHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogTWFyayB1bnVzZWQgdmFyaWFibGVzIHdpdGggRlRfVU5VU0VELgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2xvYWRfbG9jYSkgW0ZUX09QVElNSVpFX01FTU9SWV06CisJUmVtb3ZlIHJlZHVuZGFudCB2YXJpYWJsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogTW92aW5nIHRoZSBvcmRlciBvZiBkcml2ZXJzIHRvCisJc3BlZWQgdXAgZm9udCBsb2FkaW5nLiAgVGhlIFBDRiBhbmQgQkRGIGxvYWRlcnMgYXJlIHN0aWxsIHNsb3cgYW5kCisJY29uc3VtZSBmYXIgdG9vIG11Y2ggbWVtb3J5LgorCisyMDA1LTAzLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRldmVsL2Z0b3B0aW9uLmg6IFVwZGF0ZWQgdG8gcmVjZW50IGNoYW5nZXMuCisKKzIwMDUtMDMtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZkdW1teS5jLCBzcmMvYXV0b2ZpdC9hZmR1bW15LmgKKwkoYWZfZHVtbXlfc2NyaXB0X2NsYXNzKTogRml4IHR5cGUuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYywgc3JjL2F1dG9maXQvYWZsYXRpbi5oCisJKGFmX2xhdGluX3NjcmlwdF9jbGFzcyk6IEZpeCB0eXBlLgorCisJKiBzcmMvYXV0b2ZpdC9ydWxlcy5tayAoQVVUT0ZfRFJWX1NSQyk6IEZpeCB0eXBvLgorCisyMDA1LTAzLTAxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2VybiwgdHRfZmFjZV9nZXRfa2VybmluZyksCisJc3JjL3NmbnQvdHRzYml0MC5jICh0dF9mYWNlX2xvYWRfc2JpdF9zdHJpa2VzLAorCXR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZCwgdHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQsCisJdHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UpLCBzcmMvc2ZudC90dGxvYWQuYworCSh0dF9mYWNlX2xvYWRfbWV0cmljcyk6IFJlbW92ZSBjb21waWxlciB3YXJuaW5ncworCS0tIHJlZHVuZGFudCB2YXJpYWJsZXMsIG1pc3NpbmcgaW5pdGlhbGl6YXRpb25zLCBldGMuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5oOiBIYW5kbGUgRlRfT1BUSU1JWkVfTUVNT1JZLgorCisJKiBzcmMvYXV0b2ZpdC9ydWxlcy5taywgc3JjL2F1dG9maXQvbW9kdWxlLm1rLAorCXNyYy9hdXRvZml0L2FmYW5nbGVzLmg6IE5ldyBmaWxlcy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9heGlzX2hpbnRzX25ld19zZWdtZW50LAorCWFmX2F4aXNfaGludHNfbmV3X2VkZ2UpOiBOZXcgZnVuY3Rpb25zLgorCShhZl9nbHlwaF9oaW50c19kb25lKTogRG8gcHJvcGVyIGRlYWxsb2NhdGlvbi4KKwkoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogT25seSByZWFsbG9jYXRlIHBvaW50cyBhcnJheS4gIFRoaXMKKwlkcmFzdGljYWxseSByZWR1Y2VzIGhlYXAgdXNhZ2UuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfUG9pbnRSZWMsIEFGX1NlZ21lbnRSZWMpOiBPcHRpbWl6ZQorCW1lbWJlciB0eXBlcyBhbmQgcG9zaXRpb25zLgorCShBRl9BeGlzSGludHNSZWMpOiBBZGQgYG1heF9zZWdtZW50cycgYW5kIGBtYXhfZWRnZXMnLgorCShhZl9heGlzX2hpbnRzX25ld19zZWdtZW50LCBhZl9heGlzX2hpbnRzX25ld19lZGdlKTogTmV3IHByb3RvdHlwZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc2Nfc2NhbGUpOiBEb24ndCBjYWxsCisJQUZfU0NBTEVSX0VRVUFMX1NDQUxFUy4KKwkoYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyk6IENoYW5nZSByZXR1cm4gdHlwZSB0byBGVF9FcnJvci4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJSW1wcm92ZSBzZWdtZW50IGFsbG9jYXRpb24uCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gRlRfRXJyb3IuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCUltcHJvdmUgZWRnZSBhbGxvY2F0aW9uIGFuZCBsaW5rIGhhbmRsaW5nLgorCShhZl9sYXRpbl9oaW50c19kZXRlY3RfZmVhdHVyZXMpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gRlRfRXJyb3IuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpCisJPEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FPjogQXNzdXJlIGF4aXMtPm51bV9lZGdlcyA+IDEuICBUaGlzIGZpeGVzCisJYSBidWcgd2l0aCBjZXJ0YWluIGZvbnRzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oOiBUaGUgYXV0by1maXR0ZXIgaXMgbm93IHRoZQorCW9ubHkgc3VwcG9ydGVkIGF1dG8taGludGluZyBtb2R1bGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggKEZUX0lOVF9NQVgpOiBOZXcgbWFjcm8uCisKKzIwMDUtMDItMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2xvY2EpOiBGaXggdHlwby4KKworCSogc3JjL3NmbnQvdHRrZXJuLmM6IEluY2x1ZGUgYHR0a2Vybi5oJy4KKwkoRlRfQ09NUE9ORU5UKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IEFkZCBlbnRyeSBmb3IgYHR0a2VybicuCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYzogcy9GVF9FcnJfL1NGTlRfRXJyXy8uCisJRGVjb3JhdGUgY29uc3RhbnRzIHdpdGggYFUnIGFuZCBgTCcgd2hlcmUgbmVjZXNzYXJ5LgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfbmV4dCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisKKzIwMDUtMDItMjggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRkYmdtZW0uYyAoRlRfRHVtcE1lbW9yeSk6IEFkZGVkIHNvcnRpbmcgb2YgbWVtb3J5CisJc291cmNlcyBhY2NvcmRpbmcgdG8gZGVjcmVhc2luZyBtYXhpbXVtIGN1bXVsYXRpdmUgYWxsb2NhdGlvbnMuCisJKGZ0X21lbV9zb3VyY2VfY29tcGFyZSk6IE5ldyBhdXhpbGlhcnkgZnVuY3Rpb24uCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYzogTmV3IGZpbGUsIGltcGxlbWVudGluZyBhIGhlYXAtb3B0aW1pemVkCisJZW1iZWRkZWQgYml0bWFwIGxvYWRlci4KKworCSogc3JjL3NmbnQvdHRzYml0LmM6IEluY2x1ZGUgYGZ0MmJ1aWxkLmgnLCBGVF9JTlRFUk5BTF9ERUJVR19ILAorCUZUX0lOVEVSTkFMX1NUUkVBTV9ILCBGVF9UUlVFVFlQRV9UQUdTX0guCisJTG9hZCBgdHRzYml0MC5jJyBpZiBGVF9PUFRJTUlaRV9NRU1PUlkgaXMgc2V0LCBvdGhlcndpc2UgdXNlCisJZmlsZSBjb250ZW50cy4KKwkodHRfZmFjZV9sb2FkX3NiaXRfc3RyaWtlcyk6IFNldCB1cCByb290IGZpZWxkcyB0byBpbmRpY2F0ZSB0aGUKKwlzdHJpa2VzLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzEyMTA3LgorCVVzZSBgc3RhdGljJyBrZXl3b3JkIGZvciBgc2JpdF9saW5lX21ldHJpY3NfZmllbGQnLAorCWBzdHJpa2Vfc3RhcnRfZmllbGRzJywgYHN0cmlrZV9lbmRfZmllbGRzJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBEZWZpbmUKKwlgc2JpdF90YWJsZScsIGBzYml0X3RhYmxlX3NpemUnLCBgc2JpdF9udW1fc3RyaWtlcycgaWYKKwlGVF9PUFRJTUlaRV9NRU1PUlkgaXMgc2V0LgorCURvbid0IGRlZmluZSBgbnVtX3NiaXRfc3RyaWtlcycgYW5kIGBzYml0X3N0cmlrZXMnIGlmCisJRlRfT1BUSU1JWkVfTUVNT1JZIGlzIHNldC4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKHNiaXRfc2l6ZV9yZXNldCk6IEhhbmRsZSBGVF9PUFRJTUlaRV9NRU1PUlkuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IEZpeGVkIGJ1ZyB0aGF0IHByZXZlbnRlZAorCWxvYWRpbmcgU0ZOVCBmb250cyB3aXRob3V0IGEgYGtlcm4nIHRhYmxlLgorCVByb3Blcmx5IHBhc3Mgcm9vdC0+ZmFjZV9mbGFncy4KKwlSZW1vdmUgY29kZSBmb3IgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2ludGVyZmFjZSkKKwlbVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTXTogRG9uJ3QgdXNlIGB0dF9maW5kX3NiaXRfaW1hZ2UnCisJYW5kIGB0dF9sb2FkX3NiaXRfbWV0cmljcycuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jOiBPcHRpbWl6ZSBsaW5lYXIgY2hhcm1hcCBzY2FubmluZyBmb3IgRm9ybWF0IDQuCisJKE9QVF9DTUFQNCk6IE5ldyBtYWNyby4KKwkoVFRfQ01hcDRSZWMpIFtPUFRfQ01BUDRdOiBOZXcgc3RydWN0dXJlLgorCSh0dF9jbWFwNF9pbml0LCB0dF9jbWFwNF9zZXRfcmFuZ2UsIHR0X2NtYXA0X25leHQsIHR0X2NtYXA0X3Jlc2V0KQorCVtPUFRfQ01BUDRdOiBOZXcgZnVuY3Rpb25zLgorCSh0dF9jbWFwNF9jaGFyX25leHQpIFtPUFRfQ01BUDRdOiBVc2UgYHR0X2NtYXA0X25leHQnIGFuZAorCWB0dF9jbWFwNF9yZXNldCcuCisJKHR0X2NtYXA0X2NsYXNzX3JlYykgW09QVF9DTUFQNF06IFVzZSBgVFRfQ01hcDRSZWMnIGFuZAorCWB0dF9jbWFwNF9pbml0Jy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jIChSZXNldF9TQml0X1NpemUpOiBIYW5kbGUKKwlGVF9PUFRJTUlaRV9NRU1PUlkuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfUG9pbnRSZWMsIEFGX1NlZ21lbnRSZWMsIEFGX0VkZ2VSZWMpOgorCU9wdGltaXplIG1lbWJlciB0eXBlcy4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2RvbmUpOiBDYWxsCisJYGFmX2dseXBoX2hpbnRzX2RvbmUnLgorCisyMDA1LTAyLTI3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2Vybik6IEZpeCBhIHNtYWxsIGJ1ZyB3aGljaAorCWNhdXNlZCBpbnZhbGlkIChyYW5kb20pIHJldHVybiB2YWx1ZXMgZm9yIHRoZSBob3Jpem9udGFsIGtlcm5pbmcuCisKKzIwMDUtMDItMjUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUltcGxlbWVudCBzZXZlcmFsIG1lbW9yeSBvcHRpbWl6YXRpb25zIHRvIGRyYXN0aWNhbGx5IHJlZHVjZSB0aGUKKwloZWFwIHVzYWdlIG9mIEZyZWVUeXBlLCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIG1lbW9yeS1tYXBwZWQKKwlmaWxlcy4gIFRoZSBpZGVhIGlzIHRvIGF2b2lkIGxvYWRpbmcgYW5kIGRlY29kaW5nIHRhYmxlcyBpbiB0aGUKKwloZWFwLCBhbmQgaW5zdGVhZCBhY2Nlc3MgdGhlIHJhdyBkYXRhIHdoZW5ldmVyIHBvc3NpYmxlIChpLmUuLCB3aGVuCisJaXQgZG9lc24ndCBjb21wcm9taXNlIHBlcmZvcm1hbmNlKS4KKworCVRoaXMgaGFzIHNldmVyYWwgYmVuZWZpdHM6IEZvciBleGFtcGxlLCBvcGVuaW5nIHZlcmEudHRmIG5vdyB1c2VzCisJanVzdCBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgKGV2ZW4gd2hlbiB0aGUgRlRfTGlicmFyeSBmb290cHJpbnQgaXMKKwlhY2NvdW50ZWQgZm9yKSwgdW50aWwgeW91IHN0YXJ0IGxvYWRpbmcgZ2x5cGhzLiAgRXZlbiB0aGVuLCB5b3Ugc2F2ZQorCWF0IGxlYXN0IDIwS0IgY29tcGFyZWQgdG8gdGhlIG5vbi1vcHRpbWl6ZWQgY2FzZS4gIFBlcmZvcm1hbmNlIG9mCisJdmFyaW91cyBvcGVyYXRpb25zLCBpbmNsdWRpbmcgb3BlbiBhbmQgY2xvc2UsIGhhcyBhbHNvIGJlZW4KKwlkcmFtYXRpY2FsbHkgaW1wcm92ZWQuCisKKwlNb3JlIG9wdGltaXphdGlvbnMgdG8gY29tZSwgZXNwZWNpYWxseSBmb3IgdGhlIGF1dG8taGludGVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfRmFjZV9HZXRLZXJuaW5nRnVuYyk6IE5ldworCWZ1bmN0aW9uIHR5cGUuCisJKFNGTlRfSW50ZXJmYWNlKTogQWRkIGl0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfSGRteEVudHJ5UmVjLCBUVF9IZG14UmVjLAorCVRUX0tlcm4wX1BhaXJSZWMpOiBEb24ndCBkZWZpbmUgaWYgRlRfT1BUSU1JWkVfTUVNT1JZIGlzIHNldC4KKwkoVFRfRmFjZVJlYyk6IERlZmluZSBgaG9yel9tZXRyaWNzJywgYGhvcnpfbWV0cmljc19zaXplJywKKwlgdmVydF9tZXRyaWNzJywgYHZlcnRfbWV0cmljc19zaXplJywgYGhkbXhfdGFibGUnLAorCWBoZG14X3RhYmxlX3NpemUnLCBgaGRteF9yZWNvcmRfY291bnQnLCBgaGRteF9yZWNvcmRfc2l6ZScsCisJYGhkbXhfcmVjb3JkX3NpemVzJywgYGtlcm5fdGFibGUnLCBga2Vybl90YWJsZV9zaXplLAorCWBudW1fa2Vybl90YWJsZXMnLCBga2Vybl9hdmFpbF9iaXRzJywgYGtlcm5fb3JkZXJfYml0cycgaWYKKwlGVF9PUFRJTUlaRV9NRU1PUlkgaXMgc2V0LgorCURvbid0IGRlZmluZSBgaGRteCcsIGBudW1fa2Vybl9wYWlycycsIGBrZXJuX3RhYmxlX2luZGV4JywKKwlga2Vybl9wYWlycycgaWYgRlRfT1BUSU1JWkVfTUVNT1JZIGlzIHNldC4KKworCSogc3JjL2Jhc2UvZnRkYmdtZW0uYyAoZnRfbWVtX3RhYmxlX3NldCk6IERvbid0IHNoYWRvdyB2YXJpYWJsZS4KKwlGaXggY29tcGlsZXIgd2FybmluZy4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChHZXRfS2VybmluZyk6IFJlbmFtZWQgdG8uLi4KKwkoY2ZmX2dldF9rZXJuaW5nKTogVGhpcy4gIFNpbXBsaWZ5LgorCShjZmZfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKworCSogc3JjL3NmbnQvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGQgYHR0a2VybicuCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogQWRkIGB0dGtlcm4uYycuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfaW50ZXJmYWNlKTogQWRkIGB0dF9mYWNlX2dldF9rZXJuaW5nJy4KKworCSogc3JjL3NmbnQvc2ZudC5jOiBJbmNsdWRlIGB0dGtlcm4uYycuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jOiBJbmNsdWRlIGB0dGtlcm4uaCcuCisJKHNmbnRfbG9hZF9mYWNlKTogQ29uc2lkZXIgdGhlIGBrZXJuJyBhbmQgYGdhc3AnIHRhYmxlIGFzIG9wdGlvbmFsLgorCShzZm50X2RvbmVfZmFjZSk6IENhbGwgYHR0X2ZhY2VfZG9uZV9rZXJuJy4KKwlIYW5kbGUgaG9yaXpvbnRhbCBtZXRyaWNzIGZvciBGVF9PUFRJTUlaRV9NRU1PUlkuCisKKwkqIHNyYy9zZm50L3R0a2Vybi5jLCBzcmMvc2ZudC90dGtlcm4uaDogTmV3IGZpbGVzLiAgQ29kZSBoYXMgYmVlbgorCXRha2VuIGZyb20gYHR0bG9hZC5jJyBhbmQgYHR0bG9hZC5oJy4KKwlQcm92aWRlIHNwZWNpYWwgdmVyc2lvbnMgb2YgYHR0X2ZhY2VfbG9hZF9rZXJuJywKKwlgdHRfZmFjZV9nZXRfa2VybmluZycsIGFuZCBgdHRfZmFjZV9kb25lX2tlcm4nIGZvcgorCUZUX09QVElNSVpFX01FTU9SWS4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9tZXRyaWNzLCB0dF9mYWNlX2xvYWRfaGRteCwKKwl0dF9mYWNlX2ZyZWVfaGRteCk6IFByb3ZpZGUgdmVyc2lvbiBmb3IgRlRfT1BUSU1JWkVfTUVNT1JZLgorCSh0dF9mYWNlX2xvYWRfa2VybiwgdHRfa2Vybl9wYWlyX2NvbXBhcmUsIFRUX0tFUk5fSU5ERVgpOiBNb3ZlZCB0bworCWB0dGtlcm4uYycuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5oOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoc2JpdF9tZXRyaWNzX2ZpZWxkKTogQWRkIGBzdGF0aWMnIGtleXdvcmQuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChHZXRfS2VybmluZyk6IFJlbmFtZWQgdG8uLi4KKwkodHRfZ2V0X2tlcm5pbmcpOiBUaGlzLiAgU2ltcGxpZnkuCisJKHR0X2RyaXZlcl9jbGFzcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0dldF9NZXRyaWNzKTogUmVuYW1lZCB0by4uLgorCSh0dF9mYWNlX2dldF9tZXRyaWNzKTogVGhpcy4gIFByb3ZpZGUgdmVyc2lvbiBmb3IgRlRfT1BUSU1JWkVfTUVNT1JZLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoR2V0X0FkdmFuY2VfV2lkdGhzKTogUmVwbGFjZWQgd2l0aC4uLgorCShHZXRfQWR2YW5jZV9XaWR0aFB0cik6IFRoaXMuICBQcm92aWRlIHZlcnNpb24gZm9yCisJRlRfT1BUSU1JWkVfTUVNT1JZLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuaDogVXBkYXRlZC4KKworMjAwNS0wMi0yMiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jOiBQYXJ0bHkgcmV3cml0dGVuLiAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gbGlzdAorCWFsbCBhbGxvY2F0aW9uIHNpdGVzIGluIHRoZSBtZW1vcnkgZGVidWdnZXIuICBBbHNvIGEgbmV3IGZ1bmN0aW9uCisJRlRfRHVtcE1lbW9yeSgpIHdhcyBhZGRlZC4gIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGluIGJ1aWxkcyB3aXRoCisJRlRfREVCVUdfTUVNT1JZIGRlZmluZWQsIGFuZCB5b3UgbXVzdCBkZWNsYXJlIGl0IGluIHlvdXIgb3duIGNvZGUgdG8KKwl1c2UgaXQsIGkuZS4sIHdpdGggc29tZXRoaW5nIGxpa2U6CisKKwkgIGV4dGVybiB2b2lkIEZUX0R1bXBNZW1vcnkoIEZUX01lbW9yeSApOworCisJICAuLi4KKworCSAgRlRfRHVtcE1lbW9yeSggbWVtb3J5ICk7CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUik6IENvbW1lbnQgb3V0IGRlZmluaXRpb24gLS0KKwlhZ2Fpbi4KKwkoRlRfT1BUSU1JWkVfTUVNT1JZKTogTmV3IGNvbmZpZ3VyYXRpb24gbWFjcm8gdG8gY29udHJvbCB2YXJpb3VzCisJb3B0aW1pemF0aW9ucyBmb3IgcmVkdWNpbmcgdGhlIGhlYXAgZm9vdHByaW50IG9mIG1lbW9yeS1tYXBwZWQKKwlUcnVlVHlwZSBmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChGVF9BUlJBWV9aRVJPKTogTmV3CisJY29udmVuaWVuY2UgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKQorCVtGVF9PUFRJTUlaRV9NRU1PUlldOiBVc2Ugb3B0aW1pemVkIHR5cGVzIGZvciBgbnVtX2xvY2F0aW9ucycgYW5kCisJYGdseXBoX2xvY2F0aW9ucycuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBDYWxsCisJYHR0X2ZhY2VfZ2V0X2xvY2F0aW9uJy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBJbXByb3ZlIGVycm9yIGhhbmRsaW5nLgorCSh0dF9mYWNlX2RvbmUpOiBDYWxsIGB0dF9mYWNlX2RvbmVfbG9jYScuCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfZ2V0X2xvY2F0aW9uLCB0dF9mYWNlX2RvbmVfbG9jYSk6CisJTmV3IGZ1bmN0aW9ucy4gIElmIEZUX09QVElNSVpFX01FTU9SWSBpcyBzZXQsIHRoZSBsb2NhdGlvbnMgdGFibGUgaXMKKwlyZWFkIGRpcmVjdGx5IGZyb20gbWVtb3J5LW1hcHBlZCBzdHJlYW1zLCBpbnN0ZWFkIG9mIGJlaW5nIGRlY29kZWQKKwlpbnRvIHRoZSBoZWFwLgorCSh0dF9mYWNlX2xvYWRfbG9jYSkgW0ZUX09QVElNSVpFX01FTU9SWV06IE5ldyBpbXBsZW1lbnRhdGlvbi4KKwkodHRfZmFjZV9sb2FkX2N2dCwgdHRfZmFjZV9sb2FkX2ZwZ20pOiBPbmx5IGxvYWQgdGFibGUgaWYgdGhlCisJYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMgY29tcGlsZWQgaW4uCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvaGludC9haGdseXBoLmMgKGFoX291dGxpbmVfbG9hZCk6IEltcHJvdmUgYWxsb2NhdGlvbgorCWxvZ2ljLgorCisyMDA1LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2x0bWFpbi5zaDogUmVnZW5lcmF0ZWQgd2l0aCBgbGlidG9vbGl6ZSAtLWZvcmNlCisJLS1jb3B5JyBmcm9tIGxpYnRvb2wgMS41LjE0LgorCSogYnVpbGRzL3VuaXgvYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgd2l0aCBgYWNsb2NhbCAtSSAuJyBmcm9tCisJYXV0b21ha2UgMS45LjQuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZy5ndWVzcywgYnVpbGRzL3VuaXgvY29uZmlnLnN1YjogVXBkYXRlZCBmcm9tCisJYGNvbmZpZycgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLXNoLCBidWlsZHMvdW5peC9ta2luc3RhbGxkaXJzOiBVcGRhdGVkIGZyb20KKwlgdGV4aW5mbycgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisyMDA1LTAyLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmY21hcC5jIChjZmZfY21hcF91bmljb2RlX2luaXQpOiBEb24ndCB0cnkgdG8gYnVpbGQKKwlhIGNtYXAgZm9yIGEgQ0lELWtleWVkIGZvbnQgd2hpY2ggZG9lc24ndCBoYXZlIFNJRHMuCisKKzIwMDUtMDItMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChyZWFkX2JpbmFyeV9kYXRhKTogUmV0dXJuIG1vcmUgbWVhbmluZ2Z1bAorCXZhbHVlLgorCShwYXJzZV9lbmNvZGluZywgcGFyc2Vfc3VicnMsIHBhcnNlX2NoYXJzdHJpbmdzLCBwYXJzZV9kaWN0KTogQ2hlY2sKKwlwYXJzZXIgZXJyb3IgdmFsdWUgYWZ0ZXIgY2FsbCB0byBUMV9Ta2lwX1BTX1Rva2VuICh3aGVyZSBuZWNlc3NhcnkpLgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChUMV9HZXRfUHJpdmF0ZV9EaWN0KTogQ2hlY2sgcGFyc2VyIGVycm9yCisJdmFsdWUgYWZ0ZXIgY2FsbCB0byBUMV9Ta2lwX1BTX1Rva2VuLgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogQ2hlY2sgcGFyc2VyIGVycm9yIHZhbHVlCisJYWZ0ZXIgY2FsbCB0byBjaWRfcGFyc2VyX3NraXBfUFNfdG9rZW4uCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX2VuY29kaW5nLCB0NDJfcGFyc2Vfc2ZudHMsCisJdDQyX3BhcnNlX2NoYXJzdHJpbmdzLCB0NDJfcGFyc2VfZGljdCk6IENoZWNrIHBhcnNlciBlcnJvciB2YWx1ZQorCWFmdGVyIGNhbGwgdG8gVDFfU2tpcF9QU19Ub2tlbiAod2hlcmUgbmVjZXNzYXJ5KS4KKworCSogc3JjL3BzYXV4L3Bzb2JqYy5jIChza2lwX3N0cmluZywgcHNfcGFyc2VyX3NraXBfUFNfdG9rZW4sCisJcHNfdG9ieXRlcyk6IEFkZCBlcnJvciBtZXNzYWdlcy4KKworMjAwNS0wMi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IE91dHB1dCBtb3JlIHZhcmlhYmxlcyB0byB0aGUgY3JlYXRlZCBNYWtlZmlsZSBzbyB0aGF0CisJaXQgY2FuIGJlIHVzZWQgZm9yIGZ0MmRlbW9zIGFsc28gKGlmIHRoZSBGVDJERU1PUyB2YXJpYWJsZSBpcworCWRlZmluZWQpLgorCisyMDA1LTAyLTEwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWQpOiBGaXggYW4gdW5ib3VuZGVkIGdyb3dpbmcKKwlkeW5hbWljIGFycmF5IHdoZW4gbG9hZGluZyBhIGdseXBoIGZyb20gYSBQRlIgZm9udCAoU2F2YW5uYWggYnVnCisJIzExOTIxKS4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0NvbnZlcnQpOiBTbWFsbCBpbXByb3ZlbWVudHMgdG8gdGhlCisJY29udmVyc2lvbiBmdW5jdGlvbiAobWFpbmx5IHN0dXBpZCBvcHRpbWl6YXRpb24pLgorCisJKiBzcmMvYmFzZS9KYW1maWxlOiBBZGRpbmcgZnRiaXRtYXAuYyB0byB0aGUgbGlzdCBvZiBjb21waWxlZCBmaWxlcy4KKworMjAwNS0wMi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IEFkZCBuZXcgZmxhZyBgLS1mdHZlcnNpb24nIHRvCisJcmV0dXJuIHRoZSBGcmVlVHlwZSB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IEdlb3JnZSBXaWxsaWFtcworCTxnd3dAc2lsY29tLmNvbT4uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNS0wMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3R2YWxpZC9vdHZtb2QuYyAob3R2X3ZhbGlkYXRlKTogRGVhbGxvY2F0ZSBhcnJheXMgaW4gY2FzZQorCW9mIGVycm9yLiAgUmVwb3J0ZWQgYnkgWUFNQU5PLVVDSEkgSGlkZXRvc2hpIDxtZXJAZGluLm9yLmpwPi4KKworMjAwNS0wMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8b3BfY2xvc2VwYXRoPjogQWNjZXB0IGBUMV9QYXJzZV9IYXZlX01vdmV0bycgc3RhdGUgYWxzbyB3aGljaCBjYW4KKwloYXBwZW4gaW4gZW1wdHkgZ2x5cGhzLiAgUmVwb3J0ZWQgYnkgSWFuIEJyb3duCisJPGlhbi5icm93bkBwcmludHNvZnQuZGU+IChTYXZhbm5haCBidWcgIzExODU2KS4KKworMjAwNS0wMi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3RsYXlvdXQvKjogUmVtb3ZlZC4gIE9ic29sZXRlLgorCisyMDA0LTEyLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2x0bWFpbi5zaDogUmVnZW5lcmF0ZWQgd2l0aCBgbGlidG9vbGl6ZSAtLWZvcmNlCisJLS1jb3B5JyBmcm9tIGxpYnRvb2wgMS41LjEwLgorCSogYnVpbGRzL3VuaXgvYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgd2l0aCBgYWNsb2NhbCAtSSAuJyBmcm9tCisJYXV0b21ha2UgMS45LjQuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkIHdpdGggYXV0b2NvbmYgMi41OWIuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZy5ndWVzcywgYnVpbGRzL3VuaXgvY29uZmlnLnN1YjogVXBkYXRlZCBmcm9tCisJYGNvbmZpZycgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLXNoOiBVcGRhdGVkIGZyb20KKwlgdGV4aW5mbycgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisJKiBidWlsZHMvdW5peC9mdHN5c3RlbS5jIChGVF9TdHJlYW1fT3Blbik6IEFkZCBwcm9wZXIgY2FzdCBmb3IKKwlmdF9hbGxvYy4KKwlGaXggY29tcGlsZXIgd2FybmluZy4KKworMjAwNC0xMi0yNyAgRGlyY2sgQmxhc2tleSAgPGxpc3R0YXJnZXRAZGFuYmFsYS5jb20+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogSW1wcm92ZSBjb21wdXRhdGlvbiBvZgorCUZUX1NUWUxFX0JPTERfRkxBRy4KKworMjAwNC0xMi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IEEgQ0ZGIHdpdGhpbiBhbiBTRk5UIGNhbiBoYXZlCisJb25seSBhIHNpbmdsZSBmb250LiAgVGhpcyBpcyB1bmRvY3VtZW50ZWQgYnV0IGhhcyBiZWVuIHZlcmlmaWVkIG9uCisJdGhlIG9wZW50eXBlIGxpc3QuCisKKzIwMDQtMTItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogSmFtZmlsZSAoRlQyX0NPTVBPTkVOVFMpOiBBZGQgYG90dmFsaWQnLgorCisyMDA0LTEyLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9Db252ZXJ0KTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDQtMTItMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogdm1zX21ha2UuY29tOiBBZGQgZnRiaXRtYXAub2JqLgorCisyMDA0LTEyLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMsIGluY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaDogTmV3IGZpbGVzIGZvcgorCWhhbmRsaW5nIHZhcmlvdXMgYml0bWFwIGZvcm1hdHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0JJVE1BUF9IKTogTmV3IG1hY3JvLgorCisJKiBzcmMvYmFzZS9ydWxlcy5tayAoQkFTRV9FWFRfU1JDKTogQWRkIGZ0Yml0bWFwLmMuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0dseXBoX0xvYWQpOiBEb24ndCBjb252ZXJ0IGJpdG1hcHMgdG8gOGJwcAorCWJ1dCByZXR1cm4gdGhlbSBhcy1pcy4KKworCSogZG9jcy9DSEFOR0VTOiBNZW50aW9uIG5ldyBiaXRtYXAgQVBJLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXIuczogVXBkYXRlZC4KKworMjAwNC0xMi0xMSAgUm9iZXJ0IENsYXJrICA8ZnJlZXR5cGVAcmF0dHkub3JnLnVrPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0tlcm5pbmcpOiBNYWtlIGtlcm5pbmcgYW1vdW50CisJZGVwZW5kZW50IG9uIHBwZW0gYnkgc2NhbGluZyBkb3duIGZvciBwcGVtIDwgMjUsIHRoZW4gZG8gbm9ybWFsCisJcm91bmRpbmcuICBUaGlzIGdpdmVzIHNsaWdodGx5IGJldHRlciByZXN1bHRzIHRoYW4gcm91bmRpbmcgdG93YXJkcworCXplcm8uCisKKzIwMDQtMTItMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9LZXJuaW5nKTogQWx3YXlzIHJvdW5kIHRvd2FyZHMgemVybworCWZvciBGVF9LRVJOSU5HX0RFRkFVTFQuICBUaGlzIGdyZWF0bHkgZW5oYW5jZXMgdGhlIGtlcm5pbmcgZm9yCisJc21hbGwgcHBlbSB2YWx1ZXMuCisKKzIwMDQtMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9jbGVhcik6IFJlc2V0IGBsc2JfZGVsdGEnIGFuZAorCWByc2JfZGVsdGEnLgorCisyMDA0LTEyLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2luc3RhbGwubWsgKGluc3RhbGwpOiBVc2UgJChPQkpfQlVJTEQpIGZvciBmdGNvbmZpZy5oLgorCisyMDA0LTEyLTAzICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLUZyZWV0eXBlQExlY2EtTWFydGkub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IFVwZGF0ZWQgdG8gbGF0ZXN0CisJc3BlY2lmaWNhdGlvbnMgZnJvbSBNaWNyb3NvZnQuCisKKzIwMDQtMTEtMjYgIEpvdWsgSmFuc2VuICA8am91a2pAaHJlbS5zdG0udHVkZWxmdC5ubD4KKworCSogdm1zX21ha2UuY29tOiBJbmNsdWRlIGZ0YmJveC5jLgorCUZpeCBgY2NvcHQnLgorCUhhbmRsZSBgb3R2YWxpZCcgbW9kdWxlLgorCVVwZGF0ZSBgdm1zbGliLmRhdCcgZGVmYXVsdCB2YWx1ZXMuCisJRml4ZXMgdG8gYGxpYnMub3B0Jy4KKworMjAwNC0xMS0yMyAgQW5kZXJzIEthc2VvcmcgIDxhbmRlcnNAa2FzZW9yZy5jb20+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3JpZW50YXRpb25FeHRyZW11bVJlYywKKwlmdF9vcmllbnRhdGlvbl9leHRyZW11bV9jb21wdXRlKTogUmVtb3ZlZC4KKwkoRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBSZXdyaXR0ZW4sIHNpbXBsaWZpZWQuCisKKwkqIHNyYy9hdXRvaGludC9haGdseXBoLmM6IEluY2x1ZGUgRlRfT1VUTElORV9ILgorCShhaF90ZXN0X2V4dHJlbXVtLCBhaF9nZXRfb3JpZW50YXRpb24pOiBSZW1vdmVkLgorCShhaF9vdXRsaW5lX2xvYWQpOiBVc2UgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoZnRfdGVzdF9leHRyYW1hLCBmdF9nZXRfb3JpZW50YXRpb24pOiBSZW1vdmVkLgorCShGVF9HbHlwaFNsb3RfRW1ib2xkZW4pOiBVc2UgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24uCisKKzIwMDQtMTEtMjMgIEZlcm5hbmRvIFBhcGEgIDxmcGFwYUBuZXRnYXRlLmNvbS51eT4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmg6IEZpeCB0eXBvLgorCisyMDA0LTExLTIyICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLUZyZWV0eXBlQExlY2EtTWFydGkub3JnPgorCisJKiBidWlsZHMvd2luMzIvZGV0ZWN0Lm1rOiBDb3JyZWN0ZWQgbG9naWMgdGhhdCBkZXRlY3RzIFdpbmRvd3MgTlQgdG8KKwl1c2UgdGhlIHByZXZpb3VzIGNoYW5nZSBldmVuIGlmIHdpbjMyIGlzIGZvcmNlZC4gIENvcnJlY3RlZAorCWRldGVjdGlvbiBvZiB3aW4zMiBvbiBXaW45WC4KKworCSogYnVpbGRzL2Rvcy9kZXRlY3QubWs6IEFkZGVkIHNhbWUgY29ycmVjdGlvbiBhcyBmb3Igd2luMzIgYWJvdXQKKwlDT1BZIG9uIFdpbmRvd3MgTlQuICBEZXRlY3Rpb24gb2YgcGxhaW4gRE9TIDcueC4KKworMjAwNC0xMS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvZGV0ZWN0Lm1rOiBVbmRvIGNoYW5nZSBmcm9tIDIwMDQtMTEtMjAuCisJKiBidWlsZHMvd2luMzIvZGV0ZWN0Lm1rOiBJZiB0aGUgYE9TJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucworCWBXaW5kb3dzX05UJywgdXNlIGBjbWQuZXhlIC9jIGNvcHknIGZvciBjb3B5aW5nIGZpbGVzLgorCisyMDA0LTExLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9kZXRlY3QubWsgKGRvc19zZXR1cCk6IFVzZSBgY21kLmV4ZScgZm9yIGNvcHlpbmcKKwkkKENPTkZJR19NSykgdG8gZm9yY2UgbG93ZXJjYXNlIGZpbGUgbmFtZSB1bmRlciBXaW5kb3dzLgorCisyMDA0LTExLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggYSBzZXJpb3VzIGJ1ZyBpbiB0aGUgVFQgaGludGVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCk6IERvbid0IHNoaWZ0CisJcG9pbnRzIHZlcnRpY2FsbHkgYmVmb3JlIGhpbnRpbmcuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmMgKEZUQ19HTm9kZV9VbnNlbGVjdEZhbWlseSwKKwlGVENfR0NhY2hlX0xvb2t1cCk6IEEgbmV3IHRyeSB0byBmaXggY29tcGFyaXNvbiB3aXRoIHplcm8uCisKKzIwMDQtMTEtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBBZGQgYC1mbm8tc3RyaWN0LWFsaWFzaW5nJyBpZiBnY2MgaXMKKwl1c2VkLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZy5ndWVzcywgYnVpbGRzL3VuaXgvY29uZmlnLnN1YjogVXBkYXRlZCBmcm9tCisJYGNvbmZpZycgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisyMDA0LTExLTE2ICBEci4gTWFydGluIFAuSi4gWmluc2VyICA8emluc2VyQGRlY3VzLmRlPgorCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguYyAoRlRDX0dOb2RlX1Vuc2VsZWN0RmFtaWx5LAorCUZUQ19HQ2FjaGVfTG9va3VwKTogRml4IGNvbXBhcmlzb24gd2l0aCB6ZXJvLgorCisJKiBkb2NzL0lOU1RBTEwuVk1TOiBVcGRhdGVkLgorCisJKiB2bXNfbWFrZS5jb206IFVwZGF0ZWQuICBBbGwgYGRlc2NyaXAubW1zJyBmaWxlcyBhcmUgbm93IGNyZWF0ZWQKKwlhdXRvbWF0aWNhbGx5LgorCisJKiBzcmMvKi9kZXNjcmlwLm1tczogUmVtb3ZlZC4KKworMjAwNC0xMS0xNiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogU3VwcHJlc3MgLUwkbGliZGlyIGZvcgorCS91c3IvbGliNjQgYXMgd2VsbCBhcyAvdXNyL2xpYi4gIChSZXBvcnRlZCBieSBEYW4gV2luc2hpcCAtCisJaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMzkxOTkpCisKKzIwMDQtMTEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKwkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoY2lkX3NlcnZpY2VfcHNfaW5mbyk6IFVwZGF0ZWQuCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZyLmMgKHQ0Ml9wc19nZXRfZm9udF9wcml2YXRlKTogTmV3IGZ1bmN0aW9uLgorCSh0NDJfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2VfZGljdCk6IFJlbW92ZSBjb21waWxlciB3YXJuaW5nLgorCisyMDA0LTExLTExICBEYXZpZCBCZXZhbiAgPGRiZXZhbkBlbXRleC5jb20+CisKKwlBZGQgbmV3IGZ1bmN0aW9uIEZUX0dldF9QU19Gb250X1ByaXZhdGUoKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCisJKFBTX0dldEZvbnRQcml2YXRlRnVuYyk6IE5ldyBzZXJ2aWNlIGZ1bmN0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgsIHNyYy9iYXNlL2Z0dHlwZTEuYworCShGVF9HZXRfUFNfRm9udF9Qcml2YXRlKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfcHNfZ2V0X2ZvbnRfcHJpdmF0ZSk6IE5ldyBmdW5jdGlvbi4KKwkodDFfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKworMjAwNC0xMC0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oOiBJbmNsdWRlIGBzdGRkZWYuaCcuCisJKGZ0X3B0cmRpZmZfdCk6IERlZmluZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmggKEZUX1B0ckRpc3QpOiBVc2UgYGZ0X3B0cmRpZmZfdCcuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfcGFyc2VfZGljdCksIHNyYy90eXBlMS90MWxvYWQuYworCShwYXJzZV9kaWN0KTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDQtMTAtMTEgIEpvc2h1YSBOZWFsICA8am5lYWxAY3NkYWlseS5jb20+CisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9mYWNlX2J1aWxkX2NtYXBzKTogQ2hlY2sgZm9yIHBvaW50ZXIKKwlvdmVyZmxvdy4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9oZG14KTogUHJvdGVjdCBhZ2FpbnN0IGJhZCBpbnB1dC4KKwlEb24ndCB1c2UgRlRfUU5FV19BUlJBWSBidXQgRlRfTkVXX0FSUkFZIHRvIG1ha2UgZGVhbGxvY2F0aW9uIHdvcmsKKwlpbiBjYXNlIG9mIGZhaWx1cmUuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jIChMb2FkX1NCaXRfUmFuZ2UpOiBDaGVjayByYW5nZSBpbnRlcnZhbHMuCisJKHR0X2ZhY2VfbG9hZF9zYml0X3N0cmlrZXMpOiBBbGxvY2F0ZSBgc3RyaWtlX3NiaXRfcmFuZ2VzJyBhZnRlcgorCWZyYW1lIHRlc3QuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUTG9hZF9TaW1wbGVfR2x5cGgpOiBBZGQgYXNzZXJ0aW9uIGZvcgorCWBmbGFnJy4KKworMjAwNC0xMC0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMTAtMDkgIEJvcmlzIExldG9jaGEgIDxiLmxldG9jaGFAY3ouZ21jLm5ldD4KKworCUZpeCBoYW5kbGluZyBvZiBOUFVTSFcgaWYgc2tpcHBlZCBpbiBkYXRhIHN0cmVhbS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKG9wY29kZV9sZW5ndGgpOiBTZXQgdmFsdWUgZm9yIE5QVVNIVworCXRvIC0yLgorCShTa2lwQ29kZSwgVFRfUnVuSW5zKTogVXNlIG9wY29kZV9sZW5ndGggdmFsdWUgZm9yIGNvbXB1dGF0aW9uIG9mCisJYnl0ZXMgdG8gYmUgc2tpcHBlZC4KKworMjAwNC0wOS0xMCAgSm91ayBKYW5zZW4gIDxqb3VrakBocmVtLnN0bS50dWRlbGZ0Lm5sPgorCisJKiB2bXNfbWFrZS5jb206IFVwZGF0ZWQuCisKKzIwMDQtMDktMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZGluZyBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZS4gIFRoZSBjb2RlIGlzIGJhc2VkIG9uIHRoZQorCSh1bmZpbmlzaGVkKSBgb3RsYXlvdXQnIG1vZHVsZSBidXQgaGFzIGJlZW4gaGVhdmlseSBtb2RpZmllZCB0byBtYWtlCisJaXQgbXVjaCBtb3JlIGNvbXBhY3QuCisKKwkqIHNyYy9vdHZhbGlkLyo6IE5ldyBtb2R1bGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oLCBzcmMvYmFzZS9mdG90dmFsLmMsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmg6IE5ldyBmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogQWRkIG90dl9tb2R1bGVfY2xhc3MuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9PUEVOVFlQRV9WQUxJREFURV9IKTogTmV3CisJbWFjcm8uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oCisJKEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSCk6IE5ldyBtYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oIChvdHZtb2R1bGUsIG90dmNvbW1vbiwKKwlvdHZiYXNlLCBvdHZnZGVmLCBvdHZncG9zLCBvdHZnc3ViLCBvdHZqc3RmKTogTmV3IHRyYWNlIGNvbXBvbmVudHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjaGFwdGVycy5oOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9KYW1maWxlIChMaWJyYXJ5KSwgc3JjL2Jhc2UvZGVzY3JpcC5tbXMgKE9CSlMpLAorCXNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX0VYVF9TUkMpOiBVcGRhdGVkLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDktMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkgKHJlX3NvdXJjZV9ibG9ja19mb3JtYXQyKSA8Y29sdW1uPjoKKwlVc2UgbG9va2FoZWFkIGFzc2VydGlvbiB0byBub3QgbWF0Y2ggYCovJy4gIFRoaXMgcmVtb3ZlcyBzcHVyaW91cworCWluc2VydGlvbnMgb2YgYC8nIGluIHRoZSBIVE1MIG91dHB1dC4KKworMjAwNC0wOS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMpOiBGaXggY2FsbCB0bworCUZUX05FV19BUlJBWS4KKworMjAwNC0wOS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBEb24ndCBpbmNsdWRlCisJRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSC4KKwkoRlRfVmFsaWRhdG9yLCBGVF9WYWxpZGF0aW9uTGV2ZWwsIEZUX1ZhbGlkYXRvclJlYywgRlRfVkFMSURBVE9SLAorCWZ0X3ZhbGlkYXRvcl9pbml0LCBmdF92YWxpZGF0b3JfcnVuLCBmdF92YWxpZGF0b3JfZXJyb3IsIEZUX0lOVkFMSUQsCisJRlRfSU5WQUxJRF9UT09fU0hPUlQsIEZUX0lOVkFMSURfT0ZGU0VULCBGVF9JTlZBTElEX0ZPUk1BVCwKKwlGVF9JTlZBTElEX0dMWVBIX0lELCBGVF9JTlZBTElEX0RBVEEpOiBNb3ZlIHRvLi4uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oOiBOZXcgZmlsZS4KKwlNYWtlIEZUX0lOVkFMSUQgcmV0dXJuIG1vZHVsZS1zcGVjaWZpYyBlcnJvciBjb2Rlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9WQUxJREFURV9IKTogTmV3CisJbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaDogVW5kZWZpbmUgRlRfRVJSX1BSRUZJWCBvbmx5IGlmCisJRlRfS0VFUF9FUlJfUFJFRklYIGlzbid0IGRlZmluZWQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0guCisKKwkqIHNyYy9zZm50L3R0Y21hcC5oOiBEb24ndCBpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSCBidXQKKwlGVF9JTlRFUk5BTF9WQUxJREFURV9ILgorCisJKiBzcmMvc2ZudC90dGNtYXAuYzogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0ggYnV0CisJRlRfSU5URVJOQUxfVkFMSURBVEVfSC4KKwlJbmNsdWRlIHNmZXJyb3JzLmggYmVmb3JlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0guCisJcy9GVF9FcnJfT2svU0ZOVF9FcnJfT2svLgorCisJKiBzcmMvc2ZudC9zZmVycm9ycy5oOiBEZWZpbmUgRlRfS0VFUF9FUlJfUFJFRklYLgorCisJKiBzcmMvdHlwZTEvdDFhZm0uYzogSW5jbHVkZSB0MWVycm9ycy5oLgorCisyMDA0LTA5LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0ZGVidWcuYyAoZnRfZGVidWdfaW5pdCk6IEhpZ2hlc3QgZGVidWcgbGV2ZWwgaXMgNywKKwlub3QgNi4KKwkqIGRvY3MvREVCVUc6IFVwZGF0ZWQuCisKKzIwMDQtMDgtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19CQVNFLCBUVEFHX0dERUYsIFRUQUdfR1BPUywKKwlUVEFHX0pTVEYpOiBOZXcgdGFncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmggKEZUX0J5dGVzLCBGVF9UYWcpOiBOZXcgdHlwZWRlZnMuCisJKEZUX0ludCk6IEFkZCBgc2lnbmVkJy4KKworMjAwNC0wOC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ3Bvcy5jIChvdGxfZ3Bvc19zdWJ0YWJsZV92YWxpZGF0ZSk6IEFkZCBhcmd1bWVudAorCXRvIHBhc3MgbnVtYmVyIG9mIGxvb2t1cHMuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCURvbid0IGNhbGwgb3RsX2xvb2t1cF9saXN0X3ZhbGlkYXRlIGJ1dCBvdGxfbG9va3VwX3ZhbGlkYXRlLgorCShvdGxfZ3Bvc192YWxpZGF0ZSk6IENhbGwgb3RsX2xvb2t1cF9saXN0X3ZhbGlkYXRlIGluc3RlYWQgb2YKKwlvdGxfZ3Bvc19zdWJ0YWJsZV92YWxpZGF0ZS4KKworCSogc3JjL290bGF5b3V0L290bGdwb3MuaDogVXBkYXRlZC4KKworCSogc3JjL290bGF5b3V0L290bGpzdGYuYyAob3RsX2pzdGZfbWF4X3ZhbGlkYXRlKTogQWRkIGFyZ3VtZW50IHRvCisJcGFzcyBudW1iZXIgb2YgbG9va3Vwcy4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisKKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfcmVhbCk6IHMvZXhwL2V4cG9uZW50LyB0byBhdm9pZAorCWNvbXBpbGVyIHdhcm5pbmcuCisKKworCSogc3JjL3NmbnQvdHRjbWFwMC5jLCBzcmMvc2ZudC90dGNtYXAwLmg6IFJlbmFtZWQgdG8uLi4KKwkqIHNyYy9zZm50L3R0Y21hcC5jLCBzcmMvc2ZudC90dGNtYXAuaDogVGhpcy4KKwkqIHNyYy9zZm50L0phbWZpbGUsIHNyYy9zZm50L3J1bGVzLm1rLCBzcmMvc2ZudC9zZmRyaXZlci5jLAorCXNyYy9zZm50L3NmbnQuYywgc3JjL3NmbnQvc2ZvYmpzLmM6IFVwZGF0ZWQuCisKKworCSogYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsgKENGTEFHUyk6IERvbid0IGFkZCBgLVduZXN0ZWQtZXh0ZXJucycKKwlpZiBjb21waWxlciBpcyBnKysgKHYzLjMuMyBlbWl0cyBhIHdhcm5pbmcgb3RoZXJ3aXNlKS4KKworMjAwNC0wOC0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ3Bvcy5jIChvdGxfdmFsdWVfbGVuZ3RoKTogUmV0dXJuIG51bWJlciBvZiBieXRlcywKKwlub3QgbnVtYmVyIG9mIDE2Yml0IGVudGl0aWVzLgorCShvdGxfZ3Bvc19sb29rdXAyX3ZhbGlkYXRlKTogQ2hlY2sgY2xhc3MgZGVmaW5pdGlvbiB0YWJsZXMgZm9yCisJZm9ybWF0IDIuCisJRml4IGxvb3AgZm9yIGZvcm1hdCAyLgorCShvdGxfbGlnYV9tYXJrMl92YWxpZGF0ZSk6IEZpeCBvZmZzZXQgZm9yIG90bF9hbmNob3JfdmFsaWRhdGUuCisKKzIwMDQtMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogRG9uJ3QgaW5jbHVkZSB0cnVldHlwZS90dG9ianMuaC4KKwlEb24ndCBpbmNsdWRlIHR5cGUxL3Qxb2Jqcy5oLgorCShGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYykgWyFfX01XRVJLU19fXTogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA0LTA4LTI3ICBNYXRoaWV1IE1hbGF0ZXJyZSAgPG1hdGhpZXVAbWFsYXRlcnJlLmNvbT4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogSGFuZGxlIE9TX0lOTElORSBmb3IgeGxjIGNvbXBpbGVyIGFsc28uCisKKzIwMDQtMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290bGF5b3V0L290bGF5b3V0Lmg6IEFkZCBjb3B5cmlnaHQuCisJKE9UTF9JTlZBTElEX09GRlNFVCk6IFJlbW92ZWQuCisKKwkqIHNyYy9vdGxheW91dC9vdGxnZGVmLmg6IEluY2x1ZGUgb3RsYXlvdXQuaC4KKwlDb21tZW50IG91dCBpbmNsdXNpb24gb2Ygb3RsdGFibGUuaC4KKworCSogc3JjL290bGF5b3V0L290bGdwb3MuYyAob3RsX2dwb3NfbG9va3VwNF92YWxpZGF0ZSk6IEZpeCBjYWxsCisJdG8gb3RsX2Jhc2VfYXJyYXlfdmFsaWRhdGUuCisJKG90bF9saWdhX21hcmsyX3ZhbGlkYXRlKTogRml4IGBmb3InIGxvb3AuCisKKwkqIHNyYy9vdGxheW91dC9vdGxnc3ViLmMgKG90bF9saWdhdHVyZV92YWxpZGF0ZSk6IENoZWNrIGBnbHlwaF9pZCcsCisJbm90IGNvbXBvbmVudHMgYXJyYXkuCisKKwkqIHNyYy9vdGxjb21tbi5jIChvdGxfbG9va3VwX2dldF9jb3VudCwgb3RsX2ZlYXR1cmVfZ2V0X2NvdW50KToKKwlDb21tZW50IG91dC4KKwkob3RsX2xvb2t1cF9saXN0X2dldF9jb3VudCwgb3RsX2ZlYXR1cmVfbGlzdF9nZXRfY291bnQpOiBBY3RpdmF0ZS4KKwkob3RsX2ZlYXR1cmVfbGlzdF92YWxpZGF0ZSwgb3RsX2dzdWJncG9zX2dldF9sb29rdXBfY291bnQpOgorCXMvb3RsX2xvb2t1cF9nZXRfY291bnQvb3RsX2xvb2t1cF9saXN0X2dldF9jb3VudC8uCisJKG90bF9zY3JpcHRfbGlzdF92YWxpZGF0ZSk6CisJcy9vdGxfZmVhdHVyZV9nZXRfY291bnQvb3RsX2ZlYXR1cmVfbGlzdF9nZXRfY291bnQvLgorCShvdGxfc2NyaXB0X3ZhbGlkYXRlKTogQ2FsbCBvdGxfbGFuZ192YWxpZGF0ZSBmb3IgZGVmYXVsdCBsYW5ndWFnZS4KKworCSogc3JjL290bGF5b3V0L290bGNvbW1uLmg6IFVwZGF0ZWQuCisKKzIwMDQtMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290bGF5b3V0L290bGdwb3MuYyAob3RsX2dwb3NfbG9va3VwMV92YWxpZGF0ZSwKKwlvdGxfZ3Bvc19sb29rdXAyX3ZhbGlkYXRlLCBvdGxfZ3Bvc19sb29rdXAzX3ZhbGlkYXRlLAorCW90bF9ncG9zX2xvb2t1cDRfdmFsaWRhdGUsIG90bF9ncG9zX2xvb2t1cDVfdmFsaWRhdGUsCisJb3RsX2dwb3NfbG9va3VwNl92YWxpZGF0ZSwgb3RsX2dwb3NfbG9va3VwOV92YWxpZGF0ZSwKKwlvdGxfZ3Bvc192YWxpZGF0ZSk6IFVwZGF0ZQorCWZ1bmN0aW9uIGFyZ3VtZW50cy4KKwkob3RsX2dwb3NfbG9va3VwN192YWxpZGF0ZSwgb3RsX2dwb3NfbG9va3VwOF92YWxpZGF0ZSk6IFVwZGF0ZQorCWZ1bmN0aW9uIGFyZ3VtZW50cy4KKwlIYW5kbGUgTlVMTCBvZmZzZXRzIGNvcnJlY3RseS4KKwlDaGVjayBzZXF1ZW5jZSBhbmQgbG9va3VwIGluZGljZXMgZm9yIGZvcm1hdCAzLgorCShvdGxfcG9zX3J1bGVfdmFsaWRhdGUsIG90bF9jaGFpbl9wb3NfcnVsZV92YWxpZGF0ZSk6IEFkZCBhcmd1bWVudAorCXRvIHBhc3MgbG9va3VwIGNvdW50LgorCUNoZWNrIHNlcXVlbmNlIGFuZCBnbHlwaCBpbmRpY2VzLgorCShvdGxfZ3Bvc19zdWJ0YWJsZV92YWxpZGF0ZSk6IFVwZGF0ZSBmdW5jdGlvbiBhcmd1bWVudHMuCisJVXBkYXRlIGNhbGxlcnMuCisKKwkqIHNyYy9vdGxheW91dC9vdGxncG9zLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9vdGxheW91dC9vdGxnc3ViLmMgKG90bF9nc3ViX2xvb2t1cDFfdmFsaWRhdGUsCisJb3RsX2dzdWJfbG9va3VwM192YWxpZGF0ZSwgb3RsX2dzdWJfbG9va3VwOF92YWxpZGF0ZSk6IFVwZGF0ZQorCWZ1bmN0aW9uIGFyZ3VtZW50cy4KKwlBZGQgZ2x5cGggaW5kZXggY2hlY2tzLgorCShvdGxfc2VxdWVuY2VfdmFsaWRhdGUsIG90bF9hbHRlcm5hdGVfc2V0X3ZhbGlkYXRlLAorCW90bF9saWdhdHVyZV92YWxpZGF0ZSk6IEFkZCBhcmd1bWVudCB0byBwYXNzIGdseXBoIGNvdW50LgorCVVwZGF0ZSBjYWxsZXJzLgorCUFkZCBnbHlwaCBpbmRleCBjaGVjay4KKwkob3RsX2dzdWJfbG9va3VwMl92YWxpZGF0ZSwgb3RsX2dzdWJfbG9va3VwNF92YWxpZGF0ZSk6IFVwZGF0ZQorCWZ1bmN0aW9uIGFyZ3VtZW50cy4KKwkob3RsX2xpZ2F0dXJlX3NldF92YWxpZGF0ZSk6IEFkZCBhcmd1bWVudCB0byBwYXNzIGdseXBoIGNvdW50LgorCVVwZGF0ZSBjYWxsZXIuCisJKG90bF9zdWJfY2xhc3NfcnVsZV92YWxpZGF0ZSwKKwlvdGxfc3ViX2NsYXNzX3J1bGVfc2V0X3ZhbGlkYXRlKTogUmVtb3ZlZC4KKwkob3RsX3N1Yl9ydWxlX3ZhbGlkYXRlLCBvdGxfY2hhaW5fc3ViX3J1bGVfdmFsaWRhdGUpOiBBZGQgYXJndW1lbnQKKwl0byBwYXNzIGxvb2t1cCBjb3VudC4KKwlVcGRhdGUgY2FsbGVycy4KKwlBZGQgbG9va3VwIGluZGV4IGNoZWNrLgorCShvdGxfc3ViX3J1bGVfc2V0X3ZhbGlkYXRlLCBvdGxfY2hhaW5fc3ViX3J1bGVfc2V0X3ZhbGlkYXRlKTogQWRkCisJYXJndW1lbnQgdG8gcGFzcyBsb29rdXAgY291bnQuCisJVXBkYXRlIGNhbGxlcnMuCisJKG90bF9nc3ViX2xvb2t1cDVfdmFsaWRhdGUpOiBVcGRhdGUgZnVuY3Rpb24gYXJndW1lbnRzLgorCUhhbmRsZSBOVUxMIG9mZnNldHMgY29ycmVjdGx5LgorCURvbid0IGNhbGwgb3RsX3N1Yl9jbGFzc19ydWxlX3NldF92YWxpZGF0ZSBidXQKKwlvdGxfc3ViX3J1bGVfc2V0X3ZhbGlkYXRlLgorCUNoZWNrIHNlcXVlbmNlIGFuZCBsb29rdXAgaW5kaWNlcyBmb3IgZm9ybWF0IDMuCisJKG90bF9nc3ViX2xvb2t1cDZfdmFsaWRhdGUpOiBVcGRhdGUgZnVuY3Rpb24gYXJndW1lbnRzLgorCUhhbmRsZSBOVUxMIG9mZnNldHMgY29ycmVjdGx5LgorCUNoZWNrIHNlcXVlbmNlIGFuZCBsb29rdXAgaW5kaWNlcyBmb3IgZm9ybWF0IDMuCisJKG90bF9nc3ViX2xvb2t1cDdfdmFsaWRhdGUsIG90bF9nc3ViX3ZhbGlkYXRlKTogVXBkYXRlIGZ1bmN0aW9uCisJYXJndW1lbnRzLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5oOiBVcGRhdGVkLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsYmFzZS5jIChvdGxfYmFzZV92YWxpZGF0ZSk6IEhhbmRsZSBOVUxMIG9mZnNldHMKKwljb3JyZWN0bHkuCisKKwkqIHNyYy9vdGxheW91dC9vdGxjb21tbi5jIChvdGxfY2xhc3NfZGVmaW5pdGlvbl92YWxpZGF0ZSk6IEZpeAorCWNvbXBpbGVyIHdhcm5pbmcuCisJKG90bF9jb3ZlcmFnZV9nZXRfZmlyc3QsIG90bF9jb3ZlcmFnZV9nZXRfbGFzdCk6IE5ldyBmdW5jdGlvbnMuCisJKG90bF9sb29rdXBfdmFsaWRhdGUpOiBBZGQgYXJndW1lbnRzIHRvIHBhc3MgbG9va3VwIGFuZCBnbHlwaAorCWNvdW50cy4KKwlVcGRhdGUgY2FsbGVycy4KKwkob3RsX2xvb2t1cF9saXN0X3ZhbGlkYXRlKTogQWRkIGFyZ3VtZW50IHRvIHBhc3MgZ2x5cGggY291bnQuCisJVXBkYXRlIGNhbGxlcnMuCisKKwkqIHNyYy9vdGxheW91dC9vdGxjb21tbi5oOiBVcGRhdGVkLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsanN0Zi5jIChvdGxfanN0Zl9leHRlbmRlcl92YWxpZGF0ZSwKKwlvdGxfanN0Zl9tYXhfdmFsaWRhdGUsIG90bF9qc3RmX3NjcmlwdF92YWxpZGF0ZSwKKwlvdGxfanN0Zl9wcmlvcml0eV92YWxpZGF0ZSwgb3RsX2pzdGZfbGFuZ192YWxpZGF0ZSk6IEFkZCBwYXJhbWV0ZXIKKwl0byB2YWxpZGF0ZSBnbHlwaCBpbmRpY2VzLgorCVVwZGF0ZSBjYWxsZXJzLgorCShvdGxfanN0Zl92YWxpZGF0ZSk6IEFkZCBwYXJhbWV0ZXIgd2hpY2ggc3BlY2lmaWVzIG51bWJlciBvZiBnbHlwaHMKKwlpbiBmb250LgorCisJKiBzcmMvb3RsYXlvdXQvb3RsanN0Zi5oOiBVcGRhdGVkLgorCisyMDA0LTA4LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9vdGxheW91dC9vdGxncG9zLmMgKG90bF9saWdhX21hcmsyX3ZhbGlkYXRlKTogQWRkIHBhcmFtZXRlcgorCXRvIGhhbmRsZSBwb3NzaWJsZSBOVUxMIHZhbHVlcyBwcm9wZXJseS4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisKKzIwMDQtMDgtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290bGF5b3V0L2dwb3MuYzogUmVuYW1lIGNvdW50aW5nIHZhcmlhYmxlcyB0byBiZSBtb3JlCisJbWVhbmluZ2Z1bC4KKwlBZGQgY29weXJpZ2h0LgorCShvdGxfbGlnYV9hdHRhY2hfdmFsaWRhdGUpOiBSZW5hbWVkIHRvLi4uCisJKG90bF9saWdhX21hcmsyX3ZhbGlkYXRlKTogVGhpcy4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKG90bF9tYXJrMl9hcnJheV92YWxpZGF0ZSk6IFJlbW92ZWQuCisJKG90bF9ncG9zX2xvb2t1cDZfdmFsaWRhdGUpOiBDYWxsIG90bF9saWdhX21hcmsyX3ZhbGlkYXRlLCBub3QKKwlvdGxfbWFyazJfYXJyYXlfdmFsaWRhdGUuCisJKG90bF9wb3NfY2xhc3Nfc2V0X3ZhbGlkYXRlLCBvdGxfcG9zX2NsYXNzX3J1bGVfdmFsaWRhdGUpOiBSZW1vdmVkLgorCShvdGxfZ3Bvc19sb29rdXA3X3ZhbGlkYXRlKTogQ29tcGxldGUgY29kZSBmb3IgZm9ybWF0IDIuCisJKG90bF9jaGFpbl9wb3NfY2xhc3NfcnVsZV92YWxpZGF0ZSwKKwlvdGxfY2hhaW5fcG9zX2NsYXNzX3NldF92YWxpZGF0ZSk6IFJlbW92ZWQuCisJKG90bF9ncG9zX2xvb2t1cDhfdmFsaWRhdGUpOiBEb24ndCBjYWxsCisJb3RsX2NoYWluX3Bvc19jbGFzc19zZXRfdmFsaWRhdGUgYnV0CisJb3RsX2NoYWluX3Bvc19ydWxlX3NldF92YWxpZGF0ZS4KKwlTaW1wbGlmeSBzb21lIGNvZGUuCisKKwkqIHNyYy9vdGxheW91dC9vdGxncG9zLmg6IEFkZCBjb3B5cmlnaHQuCisKKzIwMDQtMDgtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290bGF5b3V0L290bGpzdGYuYyAob3RsX2pzdGZfZ3N1Yl9tb2RzX3ZhbGlkYXRlKTogUmVtb3ZlZC4KKwkob3RsX2pzdGZfZ3Bvc19tb2RzX3ZhbGlkYXRlKTogUmVuYW1lZCB0by4uLgorCShvdGxfanN0Zl9nc3ViZ3Bvc19tb2RzX3ZhbGlkYXRlKTogVGhpcy4KKwlUZXN0IHdoZXRoZXIgbG9va3VwX2NvdW50IGlzIHplcm8uCisJKG90bF9qc3RmX3ByaW9yaXR5X3ZhbGlkYXRlKTogVXNlIG90bF9qc3RmX2dzdWJncG9zX21vZHNfdmFsaWRhdGUuCisJKG90bF9qc3RmX3ZhbGlkYXRlKTogSW5pdGlhbGl6ZSBnc3ViX2xvb2t1cF9jb3VudCBhbmQKKwlncG9zX2xvb2t1cF9jb3VudCBpZiBnc3ViIG9yIGdwb3MgaXMgemVyby4KKworCSogc3JjL290bGF5b3V0L290bGdzdWIuYzogUmVuYW1lIGNvdW50aW5nIHZhcmlhYmxlcyB0byBiZSBtb3JlCisJbWVhbmluZ2Z1bC4KKwlBZGQgY29weXJpZ2h0LgorCShvdGxfZ3N1Yl9sb29rdXAxX3ZhbGlkYXRlKTogU2ltcGxpZnkgY29kZS4KKwkob3RsX2dzdWJfbG9va3VwMl92YWxpZGF0ZSwgb3RsX2dzdWJfbG9va3VwM192YWxpZGF0ZSwKKwlvdGxfZ3N1Yl9sb29rdXA0X3ZhbGlkYXRlLCBvdGxfZ3N1Yl9sb29rdXA3X3ZhbGlkYXRlKTogUmVtb3ZlIHVudXNlZAorCXZhcmlhYmxlcy4KKwkob3RsX2dzdWJfbG9va3VwNV92YWxpZGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisJRml4IGNhbGwgdG8gb3RsX3N1Yl9ydWxlX3NldF92YWxpZGF0ZSBhbmQKKwlvdGxfc3ViX2NsYXNzX3J1bGVfc2V0X3ZhbGlkYXRlLgorCShvdGxfY2hhaW5fc3ViX2NsYXNzX3J1bGVfdmFsaWRhdGUsCisJb3RsX2NoYWluX3N1Yl9jbGFzc19zZXRfdmFsaWRhdGUpOiBSZW1vdmVkLgorCShvdGxfZ3N1Yl9sb29rdXA2X3ZhbGlkYXRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwlGaXggY2FsbCB0byBvdGxfY2hhaW5fc3ViX3J1bGVfc2V0X3ZhbGlkYXRlLgorCShvdGxfZ3N1Yl9sb29rdXA3X3ZhbGlkYXRlKTogSGFuZGxlIGxvb2t1cCB0eXBlIDggYWxzby4KKwkob3RsX2dzdWJfbG9va3VwOF92YWxpZGF0ZTogTmV3IGZ1bmN0aW9uLgorCShvdGxfZ3N1Yl9sb29rdXAxX2FwcGx5LCBvdGxfZ3N1Yl9sb29rdXAyX2FwcGx5LAorCW90bF9nc3ViX2xvb2t1cDNfYXBwbHkpOiBDb21tZW50ZWQgb3V0LgorCShvdGxfZ3N1Yl92YWxpZGF0ZV9mdW5jcyk6IEFkZCBvdGxfZ3N1Yl9sb29rdXA3X3ZhbGlkYXRlIGFuZAorCW90bF9nc3ViX2xvb2t1cDhfdmFsaWRhdGUuCisJKG90bF9nc3ViX3ZhbGlkYXRlKTogVXBkYXRlZC4KKworCSogc3JjL290bGF5b3V0L290bGdzdWIuaDogQWRkIGNvcHlyaWdodC4KKworCSogc3JjL290bGF5b3V0L290bGNvbW1uLmMsIHNyYy9vdGxheW91dC9vdGxjb21tbi5oCisJKG90bF9jb3ZlcmFnZV9nZXRfaW5kZXgpOiBDb21tZW50IG91dC4KKworMjAwNC0wOC0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3RsYXlvdXQvb3RsY29tbW4uYyAob3RsX2dzdWJncG9zX2dldF9sb29rdXBfY291bnQpOiBOZXcKKwlmdW5jdGlvbi4KKwkqIHNyYy9vdGxheW91dC9vdGxjb21tbi5oOiBVcGRhdGVkLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsYmFzZS5jOiBSZW5hbWUgY291bnRpbmcgdmFyaWFibGVzIHRvIGJlIG1vcmUKKwltZWFuaW5nZnVsLgorCUFkZCBjb3B5cmlnaHQgbWVzc2FnZS4KKwkqIHNyYy9vdGxheW91dC9vdGxiYXNlLmg6IEFkZCBjb3B5cmlnaHQgbWVzc2FnZS4KKworCSogc3JjL290bGF5b3V0L290bGdkZWYuYzogUmVuYW1lIGNvdW50aW5nIHZhcmlhYmxlcyB0byBiZSBtb3JlCisJbWVhbmluZ2Z1bC4KKwlBZGQgY29weXJpZ2h0IG1lc3NhZ2UuCisJVXNlIE9UTF9DSEVDSyBldmVyeXdoZXJlLgorCShvdGxfY2FyZXRfdmFsdWVfdmFsaWRhdGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCShvdGxfZ2RlZl92YWxpZGF0ZSk6IEFsbCB0YWJsZXMgYXJlIG9wdGlvbmFsLgorCSogc3JjL290bGF5b3V0L290bGdkZWYuaDogQWRkIGNvcHlyaWdodCBtZXNzYWdlLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsanN0Zi5jOiBSZW5hbWUgY291bnRpbmcgdmFyaWFibGVzIHRvIGJlIG1vcmUKKwltZWFuaW5nZnVsLgorCUFkZCBjb3B5cmlnaHQgbWVzc2FnZS4KKwkob3RsX2pzdGZfZ3N1Yl9tb2RzX3ZhbGlkYXRlLCBvdGxfanN0Zl9ncG9zX21vZHNfdmFsaWRhdGUpOiBBZGQKKwlwYXJhbWV0ZXIgdG8gcGFzcyBsb29rdXAgY291bnQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCUNoZWNrIGxvb2t1cCBhcnJheS4KKwkob3RsX2pzdGZfbWF4X3ZhbGlkYXRlKToKKwlzL290bF9ncG9zX3N1YnRhYmxlX2NoZWNrL290bF9ncG9zX3N1YnRhYmxlX3ZhbGlkYXRlLy4KKwkob3RsX2pzdGZfcHJpb3JpdHlfdmFsaWRhdGUsIG90bF9qc3RmX2xhbmdfdmFsaWRhdGUsCisJb3RsX2pzdGZfc2NyaXB0X3ZhbGlkYXRlKTogQWRkIHR3byBwYXJhbWV0ZXJzIHRvIHBhc3MgbG9va3VwIGNvdW50cy4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKG90bF9qc3RmX3ZhbGlkYXRlKTogQWRkIHR3byBwYXJhbWV0ZXJzIHRvIHBhc3MgR1BPUyBhbmQgR1NVQgorCXRhYmxlIG9mZnNldHM7IHVzZSBvdGxfZ3N1Ymdwb3NfZ2V0X2xvb2t1cF9jb3VudCB0byBjb252ZXJ0IGV4dHJhY3QKKwlsb29rdXAgY291bnRzLgorCUZpeCB0eXBvLgorCSogc3JjL290bGF5b3V0L290bGpzdGYuaDogVXBkYXRlZC4KKwlBZGQgY29weXJpZ2h0IG1lc3NhZ2UuCisKKwkqIHNyYy9vdGxheW91dC9vdGxncG9zLmMgKG90bF9ncG9zX3N1YnRhYmxlX3ZhbGlkYXRlKTogTmV3IGZ1bmN0aW9uLgorCShvdGxfZ3Bvc192YWxpZGF0ZSk6IFVzZSBpdC4KKwkqIHNyYy9vdGxheW91dC9vdGxncG9zLmg6IFVwZGF0ZWQuCisKKzIwMDQtMDgtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290bGF5b3V0L290Y29tbW4uYzogVXNlIE9UTF9DSEVDSyBldmVyeXdoZXJlLgorCShvdGxfY292ZXJhZ2VfdmFsaWRhdGUpOiBJbml0aWFsaXplIGBwJywKKwlzL2NvdW50L251bV9nbHlwaHMvLgorCXMvc3RhcnRfY292ZXIvc3RhcnRfY292ZXJhZ2UvLgorCShvdGxfY292ZXJhZ2VfZ2V0X2luZGV4KTogUmV0dXJuIE9UTF9Mb25nLCBub3QgT1RMX0ludC4KKwlSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKwkob3RsX2NsYXNzX2RlZmluaXRpb25fdmFsaWRhdGUpOiBzL2NvdW50L251bV9nbHlwaHMvLgorCVJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgorCShvdGxfY2xhc3NfZGVmaW5pdGlvbl9nZXRfdmFsdWUsIG90bF9kZXZpY2VfdGFibGVfZ2V0X3N0YXJ0LAorCW90bF9kZXZpY2VfdGFibGVfZ2V0X2VuZCwgb3RsX2RldmljZV90YWJsZV9nZXRfZGVsdGEsCisJb3RsX2xvb2t1cF9nZXRfdGFibGUsIG90bF9sb29rdXBfbGlzdF9nZXRfY291bnQsCisJb3RsX2xvb2t1cF9saXN0X2dldF9sb29rdXAsIG90bF9sb29rdXBfbGlzdF9nZXRfdGFibGUsCisJb3RsX2ZlYXR1cmVfZ2V0X2xvb2t1cHMsIG90bF9mZWF0dXJlX2xpc3RfZ2V0X2NvdW50LAorCW90bF9mZWF0dXJlX2xpc3RfZ2V0X2ZlYXR1cmUsIG90bF9sYW5nX2dldF9jb3VudCwKKwlvdGxfbGFuZ19nZXRfcmVxX2ZlYXR1cmUsIG90bF9sYW5nX2dldF9mZWF0dXJlcyk6IENvbW1lbnRlZCBvdXQKKwl0ZW1wb3JhcmlseSB1bnRpbCB3ZSByZWFsbHkgbmVlZCBpdC4KKwkob3RsX2xvb2t1cF92YWxpZGF0ZSk6IFJlbW92ZWQuCisJKG90bF9sb29rdXBfdGFibGVfdmFsaWRhdGUpOiBSZW5hbWVkIHRvIC4uLgorCShvdGxfbG9va3VwX3ZhbGlkYXRlKTogVGhpcy4gIFVwZGF0ZSBjYWxsZXJzLgorCShvdGxfbG9va3VwX2xpc3RfdmFsaWRhdGUpOiBSZW1vdmUgYWxyZWFkeSBjb21tZW50ZWQgb3V0IGRlZmluaXRpb24KKwlhbmQgbW92ZSB0aGUgb3RoZXIgZGVmaW5pdGlvbiB1cC4KKwkob3RsX2ZlYXR1cmVfdmFsaWRhdGUpOiBBZGQgcGFyYW1ldGVyIHRvIHBhc3MgbnVtYmVyIG9mIGxvb2t1cHMuCisJVXBkYXRlIGNhbGxlcnMuCisJQ2hlY2sgbG9va3VwIGluZGljZXMuCisJKG90bF9mZWF0dXJlX2xpc3RfdmFsaWRhdGUpOiBBZGQgcGFyYW1ldGVyIHRvIHBhc3MgbG9va3VwIHRhYmxlLgorCVVwZGF0ZSBjYWxsZXJzLgorCShvdGxfbGFuZ192YWxpZGF0ZSk6IEFkZCBwYXJhbWV0ZXIgdG8gcGFzcyBudW1iZXIgb2YgZmVhdHVyZXMuCisJVXBkYXRlIGNhbGxlcnMuCisJSGFuZGxlIHJlcV9mZWF0dXJlIGFuZCBjaGVjayBmZWF0dXJlIGluZGljZXMuCisJKG90bF9zY3JpcHRfdmFsaWRhdGUpOiBBZGQgcGFyYW1ldGVyIHRvIHBhc3MgbnVtYmVyIG9mIGZlYXR1cmVzLgorCVVwZGF0ZSBjYWxsZXJzLgorCShvdGxfc2NyaXB0X2xpc3RfdmFsaWRhdGUpOiBBZGQgcGFyYW1ldGVyIHRvIHBhc3MgZmVhdHVyZSB0YWJsZS4KKwlVcGRhdGUgY2FsbGVycy4KKworCSogc3JjL290bGF5b3V0L290Y29tbW4uaDogcy9MT0NBTERFRi9MT0NBTC8uCisJQ29tbWVudCBvdXQgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGluIG90Y29tbW4uYy4KKwkob3RsX3NjcmlwdF9saXN0X2dldF9zY3JpcHQpOiBSZW1vdmVkLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5jIChvdGxfZ3N1Yl9sb29rdXAxX2FwcGx5KTogQ2hhbmdlIGBpbmRleCcgdG8KKwl0eXBlIE9UTF9Mb25nLgorCShvdGxfZ3N1Yl9sb29rdXAyX2FwcGx5LCBvdGxfZ3N1Yl9sb29rdXAzX2FwcGx5KTogQ2hhbmdlIGBpbmRleCcgdG8KKwl0eXBlIE9UTF9Mb25nLgorCUZpeCB0ZXN0LgorCShvdGxfZ3N1Yl92YWxpZGF0ZSk6IEZpeCBvcmRlciBvZiB2YWxpZGF0aW9uLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ3Bvcy5jIChvdGxfZ3Bvc192YWxpZGF0ZSk6IEZpeCBvcmRlciBvZgorCXZhbGlkYXRpb24uCisKKzIwMDQtMDgtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2Ugb3RsYXlvdXQgbW9kdWxlIGNvbXBpbGUgKHdpdGhvdXQgYWN0dWFsbHkgd29ya2luZykuCisKKwkqIHNyYy9vdGxheW91dC8qOiBzL09UTF9WYWxpZC9PVExfVmFsaWRhdG9yLy4KKwlzL05VTEwvMC8uCisKKwkqIHNyYy9vdGxheW91dC9vdGxheW91dC5oOiBGaXggdmFyaW91cyB0eXBvcy4KKwkoT1RMX0Jvb2wpOiBOZXcgdHlwZWRlZi4KKwkoT1RMX0ludCwgT1RMX0xvbmcsIE9UTF9JbnQxNiwgT1RMX0ludDMyKTogVXNlIGBzaWduZWQnIGtleXdvcmQuCisJKE9UTF9FcnJfSW52YWxpZEFyZ3VtZW50KTogUmVtb3ZlZC4KKwkoT1RMX0Vycl9JbnZhbGlkRGF0YSwgT1RMX0Vycl9JbnZhbGlkU2l6ZSk6IE5ldyBlbnVtIHZhbHVlcy4KKwkoT1RMX01BS0VfVEFHKTogQWRkIG1pc3NpbmcgcGFyZW50aGVzaXMuCisJKE9UTF9JTlZBTElEX0RBVEEpOiBVc2UgT1RMX0Vycl9JbnZhbGlkRGF0YS4KKwkoT1RMX0lOVkFMSURfVE9PX1NIT1JUKTogVXNlIE9UTF9FcnJfSW52YWxpZFNpemUuCisJKE9UTF9JTlZBTElEX0ZPUk1BVCwgT1RMX0lOVkFMSURfT0ZGU0VUKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL290bGF5b3V0L290bGdwb3MuYzogcy9GVF8vT1RMXy8uCisJcy9PVExfU2hvcnQvT1RMX0ludDE2Ly4KKwkob3RsX2dwb3NfcGFpcnNldF92YWxpZGF0ZSk6IEFkZCByZXR1cm4gdHlwZS4KKwkob3RsX2Jhc2VfYXJyYXlfdmFsaWRhdGUpOiBGaXggY2FsbCB0byBvdGxfYW5jaG9yX3ZhbGlkYXRlLgorCShvdGxfbGlnYV9hcnJheV92YWxpZGF0ZSk6IEZpeCBjYWxsIHRvIG90bF9saWdhX2F0dGFjaF92YWxpZGF0ZS4KKwkob3RsX2dwb3NfbG9va3VwNV92YWxpZGF0ZSk6IEZpeCB0eXBvcy4KKwkob3RsX2dwb3NfbG9va3VwNl92YWxpZGF0ZSk6IEZpeCBjYWxsIHRvIG90bF9tYXJrMl9hcnJheV92YWxpZGF0ZS4KKwkob3RsX2dwb3NfbG9va3VwN192YWxpZGF0ZSk6IENvbW1lbnQgb3V0IHVuZmluaXNoZWQgY29kZS4KKwlGaXggdHlwb3MuCisKKwkqIHNyYy9vdGxheW91dC9vdGxnc3ViLmM6IEFkZCBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvcgorCW90bF9nc3ViX3ZhbGlkYXRlX2Z1bmNzLgorCShvdGxfZ3N1Yl9sb29rdXAxX2FwcGx5LCBvdGxfZ3N1Yl9sb29rdXAyX2FwcGx5LAorCW90bF9nc3ViX2xvb2t1cDNfYXBwbHkpOiBGaXggY2FsbCB0byBvdGxfcGFyc2VyX2NoZWNrX3Byb3BlcnR5LgorCXMvb3RsX2NvdmVyYWdlX2xvb2t1cC9vdGxfY292ZXJhZ2VfZ2V0X2luZGV4Ly4KKwkob3RsX2xpZ2F0dXJlX3ZhbGlkYXRlKTogQWRkIG1pc3NpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24uCisJKG90bF9zdWJfcnVsZV92YWxpZGF0ZSk6IEZpeCB0eXBvLgorCShvdGxfc3ViX2NsYXNzX3J1bGVfdmFsaWRhdGUpOiBBZGQgbWlzc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKwlGaXggdHlwby4KKwkob3RsX2dzdWJfbG9va3VwNV92YWxpZGF0ZSk6IEZpeCB0eXBvLgorCShvdGxfZ3N1Yl9sb29rdXA2X3ZhbGlkYXRlKTogRml4IGNhbGwgdG8KKwlvdGxfY2hhaW5fc3ViX2NsYXNzX3NldF92YWxpZGF0ZS4KKwkob3RsX2dzdWJfdmFsaWRhdGVfZnVuY3MpOiBEb24ndCB1c2UgYGNvbnN0Jy4KKworCSogc3JjL290bGF5b3V0L290bGNvbW1uLmMgKG90bF9jbGFzc19kZWZpbml0aW9uX2dldF92YWx1ZSwKKwlvdGxfZGV2aWNlX3RhYmxlX3ZhbGlkYXRlLCBvdGxfZGV2aWNlX3RhYmxlX2dldF9kZWx0YSwKKwlvdGxfbG9va3VwX3ZhbGlkYXRlLCBvdGxfc2NyaXB0X3ZhbGlkYXRlKTogQWRkIG1pc3NpbmcKKwl2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCisJKG90bF9sb29rdXBfbGlzdF92YWxpZGF0ZSk6IENvbW1lbnQgb3V0IGZpcnN0IGRlZmluaXRpb24uCisJKG90bF9sb29rdXBfbGlzdF9mb3JlYWNoLCBvdGxfZmVhdHVyZV9saXN0X2ZvcmVhY2gpOiBDb21tZW50IG91dC4KKwkob3RsX2ZlYXR1cmVfbGlzdF92YWxpZGF0ZSk6CisJcy9vdGxfZmVhdHVyZV90YWJsZV92YWxpZGF0ZS9vdGxfZmVhdHVyZV92YWxpZGF0ZS8uCisJKG90bF9zY3JpcHRfbGlzdF92YWxpZGF0ZSk6CisJcy9vdGxfc2NyaXB0X3RhYmxlX3ZhbGlkYXRlL290bF9zY3JpcHRfdmFsaWRhdGUvLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsY29tbW4uaDogQ29tbWVudCBvdXQgZmlyc3QgZGVjbGFyYXRpb24uCisJKG90bF9sb29rdXBfbGlzdF9mb3JlYWNoLCBvdGxfZmVhdHVyZV9saXN0X2ZvcmVhY2gpOiBDb21tZW50IG91dC4KKworCSogc3JjL290bGF5b3V0L290bGJhc2UuYyAob3RsX2Jhc2VfY29vcmRfdmFsaWRhdGUpOiBGaXggY2FsbCB0bworCW90bF9kZXZpY2VfdGFibGVfdmFsaWRhdGUuCisJKG90bF9iYXNlX3NjcmlwdF92YWxpZGF0ZSk6IEFkZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKwkob3RsX2Jhc2Vfc2NyaXB0X2xpc3RfdmFsaWRhdGUpOiBGaXggY2FsbCB0bworCW90bF9iYXNlX3NjcmlwdF92YWxpZGF0ZS4KKwkob3RsX2F4aXNfdGFibGVfdmFsaWRhdGUpOiBGaXggY2FsbHMgdG8gb3RsX2Jhc2VfdGFnX2xpc3RfdmFsaWRhdGUKKwlhbmQgb3RsX2Jhc2Vfc2NyaXB0X2xpc3RfdmFsaWRhdGUuCisJKG90bF9iYXNlX3ZhbGlkYXRlKTogRml4IGNhbGxzIHRvIG90bF9heGlzX3RhYmxlX3ZhbGlkYXRlLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsZ2RlZi5jIChvdGxfYXR0YWNoX2xpc3RfdmFsaWRhdGUpOiBGaXggY2FsbCB0bworCW90bF9hdHRhY2hfcG9pbnRfdmFsaWRhdGUuCisJKG90bF9jYXJldF92YWx1ZV92YWxpZGF0ZSk6IEFkZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorCUZpeCBjYWxsIHRvIG90bF9kZXZpY2VfdGFibGVfdmFsaWRhdGUuCisJKG90bF9saWdhdHVyZV9nbHlwaF92YWxpZGF0ZSk6IEZpeCBjYWxsIHRvIG90bF9jYXJldF92YWx1ZV92YWxpZGF0ZS4KKwkob3RsX2xpZ2F0dXJlX2NhcmV0X2xpc3RfdmFsaWRhdGUpOiBGaXggY2FsbCB0bworCW90bF9saWdhdHVyZV9nbHlwaF92YWxpZGF0ZS4KKwkob3RsX2dkZWZfdmFsaWRhdGUpOiBGaXggY2FsbHMgdG8gb3RsX2NsYXNzX2RlZmluaXRpb25fdmFsaWRhdGUsCisJb3RsX2F0dGFjaF9saXN0X3ZhbGlkYXRlLCBvdGxfbGlnYXR1cmVfY2FyZXRfbGlzdF92YWxpZGF0ZSwgYW5kCisJb3RsX2NsYXNzX2RlZmluaXRpb25fdmFsaWRhdGUuCisKKwkqIHNyYy9vdGxheW91dC9vdGx0YWJsZS5oIChvdGxfdGFibGVfdmFsaWRhdGUsIG90bF90YWJsZV9pbml0LAorCW90bF90YWJsZV9zZXRfc2NyaXB0KTogQ29tbWVudCBvdXQuCisKKwkqIHNyYy9vdGxheW91dC9vdGxwYXJzZS5oIChPVExfUGFyc2VyUmVjKToKKwlzL09UTF9BbHRlcm5hdGUvT1RMX0dTVUJfQWx0ZXJuYXRlLy4KKwkoT1RMX1BhcnNlRXJyb3IpOiBBZGQgT1RMX0Vycl9QYXJzZXJfTWVtb3J5IGFuZAorCU9UTF9FcnJfUGFyc2VyX0ludGVybmFsLgorCShvdGxfcGFyc2VyX2Vycm9yKTogRml4IHR5cG8uCisJKG90bF9wYXJzZXJfY2hlY2tfcHJvcGVydHkpOiBSZW1vdmUgdGhpcmQgYXJndW1lbnQuCisKKwkqIHNyYy9vdGxheW91dC9vdGxwYXJzZS5jIChvdGxfc3RyaW5nX2Vuc3VyZSk6CisJcy9PVExfUGFyc2VfRXJyX01lbW9yeS9PVExfRXJyX1BhcnNlcl9NZW1vcnkvLgorCShPVExfU1RSSU5HX0VOU1VSRSwgb3RsX3BhcnNlcl9lcnJvciwgb3RsX3BhcnNlcl9nZXRfaW5kZXgsCisJb3RsX3BhcnNlcl9yZXBsYWNlXzEsIG90bF9wYXJzZXJfcmVwbGFjZV9uKTogRml4IHR5cG9zLgorCShPVExfUEFSU0VSX1VOQ09WRVJFRCk6IFJlbW92ZWQuCisJKG90bF9wYXJzZXJfY2hlY2tfcHJvcGVydHkpOiBSZW1vdmUgdGhpcmQgYXJndW1lbnQuCisKKwkqIHNyYy9vdGxheW91dC9vdGxqc3RmLmMgKG90bF9qc3RmX3ByaW9yaXR5X3ZhbGlkYXRlKTogQWRkIG1pc3NpbmcKKwl2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKworCSogc3JjL290bGF5b3V0L290bHV0aWxzLmggKE9UTF9NRU1fUkVBTExPQyk6IEZpeCB0eXBvLgorCisyMDA0LTA4LTExICBEYW5ueSAgPGRhbm55Ym95bm93QHlhaG9vLmNvbT4KKworCSogc3JjL2Jhc2UvZnRzdHJlYW0uYyAoRlRfU3RyZWFtX0Nsb3NlKTogRG9uJ3QgcmVzZXQgc3RyZWFtLT5jbG9zZQorCXRvIE5VTEwuICBUaGlzIGFsbG93cyBjdXN0b20gY2xvc2UgZnVuY3Rpb25zIHRvIGRlbGV0ZSB0aGUgRlRfU1RSRUFNCisJb2JqZWN0LgorCisyMDA0LTA4LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgQVBJIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBTRk5UIHRhYmxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaAorCShGVF9TRk5UX1RhYmxlX0luZm9fRnVuYyk6IE5ldyB0eXBlZGVmLgorCShTRk5UX1RhYmxlKTogQWRkIGl0LgorCisJKiBzcmMvYmFzZS9mdG9ianMgKEZUX1NmbnRfVGFibGVfSW5mbyk6IE5ldyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X3RhYmxlX2luZm8pOiBOZXcgZnVuY3Rpb24uCisJKHNmbnRfc2VydmljZV9zZm50X3RhYmxlKTogQWRkIGl0LgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOTo4OjMuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFVwZGF0ZWQuCisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvajogcy8yMTkvMjExMC8sIHMvMi4xLjkvMi4xLjEwLy4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpLCBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyk6CisJcy8yLjEuOS8yLjEuMTAvLgorCisJKiBkb2NzL0NIQU5HRVMsIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZWQuCisKKzIwMDQtMDgtMTEgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKEZUX1JhY2Nlc3NfR3Vlc3MpCisJWyFGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX0ZPUktdOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworMjAwNC0wOC0wNiAgQWRhbSBQaW90cm93c2tpICA8c3RfaW50ZWxAcG9jenRhLm9uZXQucGw+CisKKwkqIHNyYy9wZnIvcGZybG9hZC5jIChwZnJfc29ydF9rZXJuaW5nX3BhaXJzKTogU2luZ2xlLWJ5dGUKKwlhZGp1c3RtZW50cyBhcmUgdW5zaWduZWQsIG5vdCBzaWduZWQuCisKKzIwMDQtMDgtMDUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCWBBY3RpdmF0ZScgZ3JheS1zY2FsZSBzcGVjaWZpbmcgaGludGluZyB3aXRoaW4gdGhlIFRydWVUeXBlCisJYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHdoaWNoCisJc2hvdWxkIHByb2JhYmx5IGJlIG1hZGUgb3B0aW9uYWwuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAorCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBNb3ZlIHRoZSBjb2RlIHRvIHNldCB0aGUgcGVkYW50aWNfaGludGluZyBmbGFnCisJdG8uLi4KKwkoVFRfTG9hZF9HbHlwaCk6IEhlcmUuCisJU2V0IGBncmF5c2NhbGUnIGZsYWcgZXhjZXB0IGZvciBgRlRfTE9BRF9UQVJHRVRfTU9OTycuCisKKwkqIHNyYy90cnVldHllcC90dGludGVycC5jIChJbnNfR0VUSU5GTyk6IFJldHVybiBNUyByYXN0ZXJpemVyCisJdmVyc2lvbiAxLjcuCisJUmV0dXJuIHJvdGF0aW9uIGFuZCBzdHJldGNoaW5nIGluZm8gb25seSBpZiBnbHlwaCBpcyByb3RhdGVkIG9yCisJc3RyZXRjaGVkLCByZXNwZWN0aXZlbHkuCisJSGFuZGxlIGdyYXlzY2FsZSBpbmZvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBBZGQgYGdyYXlzY2FsZScKKwltZW1iZXIuCisKKzIwMDQtMDgtMDIgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfQXR0YWNoX0ZpbGUpOiBJbml0aWFsaXplIGBvcGVuLnN0cmVhbScuCisKKzIwMDQtMDgtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA0LTA4LTAxICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCUZyZWVUeXBlIG5vdyBjYW4gcmVhZCBrZXJuaW5nIHZhbHVlcyBmcm9tIFBGTSBmaWxlcy4KKworCSogc3JjL3R5cGUxL3QxYWZtLmMgKFQxX0RvbmVfQUZNKTogUmVuYW1lZCB0by4uLgorCShUMV9Eb25lX01ldHJpY3MpOiBUaGlzLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoVDFfUmVhZF9BRk0pOiBNYWtlIGl0IHN0YXRpYy4KKwlEb24ndCBlbnRlciBhbmQgbGVhdmUgYSBmcmFtZS4KKwkoTElUVExFX0VORElBTl9VU0hPUlQsIExJVFRMRV9FTkRJQU5fVUlOVCk6IE5ldyBtYWNyb3MuCisJKFQxX1JlYWRfUEZNKTogTmV3IGZ1bmN0aW9uLgorCShUMV9SZWFkX01ldHJpY3MpOiBOZXcgaGlnaGVyLWxldmVsIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW5zdGVhZCBvZgorCVQxH1JlYWRfQUZNLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKworMjAwNC0wNy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQgKHBjZl9sb2FkX2ZvbnQpLCBzcmMvYmRmL2JkZmRyaXZyLmMKKwkoQkRGX0ZhY2VfSW5pdCksIHNyYy90cnVldHlwZS90dGd4dmFyIChUVF9HZXRfTU1fVmFyLAorCXR0X2ZhY2VfdmFyeV9jdnQpOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDQtMDctMjYgIFPDuHJlbiBTYW5kbWFubiAgPHNhbmRtYW5uQGRhaW1pLmF1LmRrPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2ludGVycHJldF9zdHlsZSk6IEFsd2F5cyBhbGxvY2F0ZSBtZW1vcnkgZm9yCisJZmFjZS0+c3R5bGVfbmFtZS4KKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0ZhY2VfRG9uZSk6IEZyZWUgYHN0eWxlX25hbWUnLgorCisyMDA0LTA3LTI2ICBEYXJyZW4gSiBMb25naG9ybiAgPGRhcnJlbi5sb25naG9ybkByZWRjb20uY28udWs+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX1NJWkVPRl9MT05HKTogUmVjb2duaXplCisJZml2ZS1ieXRlIGBsb25nJyAod2hpY2ggaXMgYXZvaWRlZCB0aGVuKS4KKworMjAwNC0wNy0yNSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX1NldF9QaXhlbF9TaXplKTogQ29tcGFyZSBoZWlnaHRzLCBub3QKKwlwcGVtIHZhbHVlcy4KKwkoUENGX1NldF9Qb2ludF9TaXplKTogRG9uJ3QgY2FsbCBQQ0ZfU2V0X1BpeGVsX1NpemUgYnV0IHByb3ZpZGUgb3duCisJY29kZSB0byBjb21wYXJlIHBwZW0gdmFsdWVzLgorCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfU2V0X1BpeGVsX1NpemUpOiBDb21wYXJlIGhlaWdodHMsIG5vdAorCXBwZW0gdmFsdWVzLgorCShCREZfU2V0X1BvaW50X1NpemUpOiBEb24ndCBjYWxsIEJERl9TZXRfUGl4ZWxfU2l6ZSBidXQgcHJvdmlkZSBvd24KKwljb2RlIHRvIGNvbXBhcmUgcHBlbSB2YWx1ZXMuCisKKzIwMDQtMDctMjUgIEtvcm5mZWxkIEVsaXlhaHUgUGV0ZXIgIDxwZXRlckBlLWthZG1vbi5uZXQ+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IEhhbmRsZQorCVRUX05BTUVfSURfUFJFRkVSUkVEX0ZBTUlMWSBhbmQgVFRfTkFNRV9JRF9QUkVGRVJSRURfU1VCRkFNSUxZLgorCisyMDA0LTA3LTI0ICBEZXJlayBCLiBOb29uYnVyZyAgPGRlcmVrbkBmb29sYWJzLmNvbT4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9mb250X2xvYWQpOiBBbHdheXMgY3JlYXRlIGludmVyc2UgbWFwcGluZy4KKwlFdmVuIGlmIHRoZSBjaGFyc3RyaW5nIGNvdW50IGlzIHRoZSBzYW1lIGFzIHRoZSBDSUQgY291bnQsIGl0IGlzCisJc3RpbGwgcG9zc2libGUgdGhhdCB0aGUgZm9udCB1c2VzIGEgZGlmZmVyZW50IENJRCAtPiBHSUQgbWFwcGluZy4KKworMjAwNC0wNy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IEFjY2VwdCAweDAwMDIwMDAwIGZvcm1hdCB0YWcKKwlmb3VuZCBpbiBzb21lIEFycGhpYyBmb250cyBtYWRlIGZvciBDaGluZXNlIHZlcnNpb24gb2YgV2luZG93cyAzLjEuCisKKzIwMDQtMDctMTcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUZpeGVkIGEgZGFuZ2xpbmcgcG9pbnRlciBidWcgaW4gdGhlIGNhY2hlIGNvZGUgdGhhdCBoYXBwZW5lZCBpbiB2ZXJ5CisJcmFyZSBjYXNlcywgaS5lLiwgd2hlbiBhIG5ldyBmYW1pbHkgb2JqZWN0IHdhcyBkZXN0cm95ZWQgYnkgYW4KKwlvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiBkdXJpbmcgYSBnbHlwaCBub2RlIGluaXRpYWxpemF0aW9uLiAgVGhlCisJZnVuY3Rpb24gRlRDX0NhY2hlX0xvb2t1cCB3b3VsZCBmbHVzaCB0aGUgY2FjaGUgYW5kIHJlc3RhcnQgdGhlCisJbG9va3VwIHdpdGggYSBiYWQgcG9pbnRlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNnbHlwaC5oIChGVENfRkFNSUxZX1RSRUUpOiBOZXcgbWFjcm8uCisJKEZUQ19HQ0FDSEVfTE9PS1VQX0NNUCk6IFVzZSBpdC4KKwlIYW5kbGUgcmVmZXJlbmNlIGNvdW50IGluIGBudW1fbm9kZXMnIGNvcnJlY3RseS4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmMgKEZUQ19HTm9kZV9VbnNlbGVjdEZhbWlseSk6IFVzZQorCUZUQ19GQU1JTFlfRlJFRS4KKwkoRlRDX0dDYWNoZV9Mb29rdXApOiBIYW5kbGUgcmVmZXJlbmNlIGNvdW50IGluIGBudW1fbm9kZXMnIGNvcnJlY3RseS4KKworCSogc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKEZUQ19NYW5hZ2VyX0ZsdXNoTik6IEZpeGVkIGEgY2FjaGUgZmx1c2hpbmcKKwlidWcuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChOb3JtYWxpemUpOiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZAorCWxvbmcgYW5kIHVubmVjZXNzYXJ5IGRlbGF5cyB3aGlsZSBub3JtYWxpemluZyBodWdlIHZlY3RvcnMuCisKKzIwMDQtMDctMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyX1BhcnNlT3V0bGluZSk6IEZpeCBjb21waWxlcgorCXdhcm5pbmcuCisKKzIwMDQtMDctMTUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoRlRfU3Ryb2tlcl9QYXJzZU91dGxpbmUpOiBTaW5nbGUgcG9pbnRzCisJYXJlIG5vdCBzdHJva2VkLCBwcmV2ZW50aW5nIGEgYnVnIHdpdGggcGFsYS50dGYgYW5kIG90aGVyCisJZm9udHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaDogVXBkYXRpbmcgZG9jdW1lbnRhdGlvbiBjb21tZW50cy4KKworMjAwNC0wNy0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChmdF9zdHJva2VfYm9yZGVyX3JldmVyc2UpOiBSZW1vdmVkLiAgVW51c2VkLgorCisyMDA0LTA3LTEyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKGZ0X3N0cm9rZV9ib3JkZXJfY2xvc2UpOiBBZGQgc2Vjb25kIHBhcmFtZXRlcgorCXRvIGluZGljYXRlIHJldmVyc2lvbiBvZiBwb2ludHMuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShmdF9zdHJva2VfYm9yZGVyX3JldmVyc2UpOiBGaXggaW5pdGlhbGl6YXRpb24gb2YgYHBvaW50MScgYW5kCisJYHRhZzEnLgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3Nub2RlX2xvYWQpOiBGaXhpbmcgYWR2YW5jZSBjb21wdXRhdGlvbgorCWZvciB0cmFuc2Zvcm1lZCBnbHlwaHMuCisKKzIwMDQtMDctMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUZpeCBidWdzIHRoYXQgcHJldmVudGVkIHRoZSBzdHJva2VyIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSBzdHJva2VkCisJcGF0aHMgZnJvbSBjbG9zZWQgcGF0aHMsIGkuZS4sIG5lYXJseSBhbGwgZ2x5cGhzIGluIHZlY3RvcmlhbCBmb250cy4KKworCVRoZSBjb2RlIGlzIHN0aWxsIF92ZXJ5XyBidWdneSB0aG91Z2g7IHRyZWF0IHdpdGggc3BlY2lhbCBjYXJlLgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TVFJPS0VfVEFHX0JFR0lOX0VORCk6IE5ldyBtYWNyby4KKwkoZnRfc3Ryb2tlX2JvcmRlcl9yZXZlcnNlKTogTmV3IGZ1bmN0aW9uLgorCShmdF9zdHJva2VyX2luc2lkZSk6IFJlbW92ZSBsb2NhbCB2YXJpYWJsZSBgc2lnbWEnOyB1c2UgZGlmZmVyZW50CisJdGhyZXNob2xkLgorCShmdF9zdHJva2VyX2FkZF9yZXZlcnNlX2xlZnQpOiBTd2l0Y2ggYmVnaW4vZW5kIHRhZ3MgaWYgbmVjZXNzYXJ5LgorCShGVF9TdHJva2VyX0VuZFN1YlBhdGgpOiBDYWxsIGZ0X3N0cm9rZXJfaW5zaWRlIGFuZAorCWZ0X3N0cm9rZV9ib3JkZXJfcmV2ZXJzZS4KKworMjAwNC0wNi0yNiAgUGV0ZXIgS292YXIgIDxwZXRlci5rb3ZhckByMy5yb2J1cm5ldC5zaz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEZpeCB0eXBvLgorCisyMDA0LTA2LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChhZm1fYXRvaW5kZXgpOiBGaXggYm91bmRhcnkgdGVzdC4gIFJlcG9ydGVkCisJYnkgRGlyY2sgQmxhc2tleS4KKworMjAwNC0wNi0yNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisKKwkqIFZlcnNpb24gMi4xLjkgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMsIHNyYy90cnVldHlwZS90dHhndmFyLmM6IFJlbW92aW5nCisJY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDQtMDYtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIFtGVF9ERUJVR19NRU1PUlldOiBEZWNsYXJlCisJRlRfUUFsbG9jX0RlYnVnIGFuZCBGVF9RUmVhbGxvY19EZWJ1Zy4KKworCSogc3JjL2Jhc2UvZnR1dGlsLmMgKEZUX1FBbGxvYyk6IEZpeCBlcnJvciBhbmQgZGVidWcgbWVzc2FnZXMuCisJKEZUX1FSZWFsbG9jKTogQ2FsbCBGVF9RQWxsb2MgaWYgb3JpZ2luYWwgcG9pbnRlciBpcyBOVUxMLgorCUZpeCBlcnJvciBtZXNzYWdlLgorCisyMDA0LTA2LTIzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCwgc3JjL2Jhc2UvZnR1dGlsLmMKKwkoRlRfUUFsbG9jLCBGVF9RUmVhbGxvYyksIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKEZUX1FBbGxvY19EZWJ1ZywKKwlGVF9RUmVhbGxvY19EZWJ1Zyk6IE5ldyBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGFsbG9jYXRpb24gd2l0aG91dAorCXplcm8taW5nIG91dCB0aGUgY29ycmVzcG9uZGluZyBibG9ja3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfTUVNX1FBTExPQywKKwlGVF9NRU1fUVJFQUxMT0MsIEZUX01FTV9RTkVXLCBGVF9NRU1fUU5FV19BUlJBWSwKKwlGVF9NRU1fUVJFTkVXX0FSUkFZLCBGVF9RQUxMT0MsIEZUX1FSRUFMTE9DLCBGVF9RTkVXLCBGVF9RTkVXX0FSUkFZLAorCUZUX1FSRU5FV19BUlJBWSk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9iYXNlL2Z0c3RyZWFtLmMgKEZUX1N0cmVhbV9FbnRlckZyYW1lKTogVXNlIEZUX1FBTExPQy4KKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChGVF9TdHJlYW1fT3Blbkd6aXApOiAgVXNlIEZUX1FORVdfQVJSQVkuCisJKiBzcmMvc2ZudC9zZm9ianMuYyAodHRfZmFjZV9nZXRfbmFtZSk6IFVzZSBGVF9RTkVXX0FSUkFZLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2RpcmVjdG9yeSwgdHRfZmFjZV9sb2FkX21ldHJpY3MsCisJdHRfZmFjZV9sb2FkX2dhc3ApOiBVc2UgRlRfUU5FV19BUlJBWS4KKwkodHRfZmFjZV9sb2FkX2tlcm4pOiBVc2UgRlRfUU5FV19BUlJBWS4KKwlTbWFsbCBvcHRpbWl6YXRpb24gaW4gdGhlIGtlcm5pbmcgdGFibGUgdmVyaWZpZXI7IHRoaXMgc3BlZWRzIHVwCisJVHJ1ZVR5cGUgZmFjZSBvcGVuaW5nIGJ5IGFib3V0IDclLgorCSh0dF9mYWNlX2xvYWRfaGRteCk6IFVzZSBGVF9RTkVXX0FSUkFZIGFuZCBGVF9RQUxMT0MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IENoYW5nZWQgdGhlIG9yZGVyIG9mIG1vZHVsZXMsCisJcHV0dGluZyBUcnVlVHlwZSBhbmQgVHlwZSAxIGZpcnN0LiAgVGhpcyBkcmFtYXRpY2FsbHkgaW1wcm92ZXMgdGhlCisJcGVyZm9ybWFuY2Ugb2YgZmFjZSBvcGVuL2Nsb3NlIG9wZXJhdGlvbnMuICBGb3IgZXhhbXBsZSwgcHV0dGluZyB0aGUKKwlUcnVlVHlwZSBkcml2ZXIgZmlyc3QgaW4gdGhlIGxpc3QgcmVzdWx0cyBpbiBhIDV4IHNwZWVkdXAgd2hlbgorCW9wZW5pbmcgYFZlcmEudHRmJy4KKworCVRoZSB2ZXJ5IHByb2JsZW0gaXMgdGhhdCBib3RoIHRoZSBQQ0YgYW5kIEJERiBkcml2ZXJzIGRvIGEgbG90IG1vcmUKKwl0aGFuIG5lY2Vzc2FyeSB0byBkZXRlY3QgdGhhdCB0aGV5IGNhbm5vdCBoYW5kbGUgYSBmb250IGZpbGUuCisKKzIwMDQtMDYtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9yZWFkX1RPQywgcGNmX2dldF9wcm9wZXJ0aWVzLAorCXBjZl9nZXRfbWV0cmljcywgcGNmX2dldF9iaXRtYXBzLCBwY2ZfZ2V0X2VuY29kaW5ncyk6IEltcHJvdmUKKwlkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoRlRfQ09NUE9NRU5UKTogTW92ZSB1cC4KKwkoUENGX0ZhY2VfSW5pdCk6IFNpbXBsaWZ5IGNvZGUuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuaCAoQkRGX0ZhY2VSZWMpOiBOZXcgZWxlbWVudCBgZGVmYXVsdF9nbHlwaCcuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfYWRkX3Byb3BlcnR5LCBfYmRmX3BhcnNlX3N0YXJ0KSwKKwlzcmMvYmRmL2JkZi5oIChiZGZfZm9udF90KTogcy9kZWZhdWx0X2dseXBoL2RlZmF1bHRfY2hhci8uCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IEZpeCBudW1iZXIgb2YgZ2x5cGhzLgorCVNldCBgZGVmYXVsdF9nbHlwaCcuCisJKEJERl9HbHlwaF9Mb2FkKTogVXNlIGBkZWZhdWx0X2dseXBoJyBmb3IgdW5kZWZpbmVkIGdseXBoLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDYtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA0LTA2LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAorCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBEb24ndCBhY2Nlc3MgKHVucm91bmRlZCkKKwlgVFRfU2l6ZS5yb290Lm1ldHJpY3MnIGJ1dCAocm91bmRlZCkgYFRUX1NpemUubWV0cmljcycuICBUaGlzIGZpeGVzCisJYSBzY2FsaW5nIGJ1ZyB0aGF0IGNhdXNlZCBpbmNvcnJlY3QgcmVuZGVyaW5nIHdoZW4gdGhlIGJ5dGVjb2RlCisJaW50ZXJwcmV0ZXIgd2FzIGVuYWJsZWQuCisKKzIwMDQtMDYtMTQgIEh1dyBEIE0gRGF2aWVzICA8aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs+CisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCk6IFNldCB4X3BwZW0gYW5kIHlfcHBlbQorCWJhc2VkIG9uIHBpeGVsX3dpZHRoIGFuZCBwaXhlbF9oZWlnaHQuCisJKEZOVF9TaXplX1NldF9QaXhlbHMpOiBVcGRhdGVkLgorCisyMDA0LTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9sencvem9wZW4uYzogQ29tbWVudCBvdXQgaW5jbHVzaW9uIG9mIHNpZ25hbC5oIGFuZCB1bmlzdGQuaC4KKwlSZXBvcnRlZCBieSBIeXbDpHJpbmVuIEp5cmtpIEp1aGFuaS4KKworMjAwNC0wNi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDYtMTAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmplY3QuYywgc3JjL2Jhc2UvZnRoYXNoLmMsIHNyYy9iYXNlL2Z0ZXhjZXB0LmMsCisJc3JjL2Jhc2UvZnRzeXNpby5jLCBzcmMvYmFzZS9mdHN5c21lbS5jLCBzcmMvYmFzZS9mdGxpc3QuYzogUmVtb3ZlZC4KKwlPYnNvbGV0ZS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChBbGlnbm1lbnQsIFBBbGlnbm1lbnQpOiBOZXcgdW5pb24gdG8gZml4CisJcHJvYmxlbXMgd2l0aCA2NGJpdCBzeXN0ZW1zLgorCShBbGlnblByb2ZpbGVTaXplKTogVXNlIGl0LgorCisyMDA0LTA2LTA4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfR2x5cGhNZXRyaWNzKTogTW92ZSBgbHNiX2RlbHRhJworCWFuZCBgcnNiX2RlbHRhJyBlbGVtZW50cyB0by4uLgorCShGVF9HbHlwaFNsb3RSZWMpOiBIZXJlIHRvIHJldGFpbiBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyCisJRnJlZVR5cGUgdmVyc2lvbnMuCisJVXBkYXRlIGFsbCB1c2Vycy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X2ZhY2VfZ2V0X25hbWUpOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfTG9hZF9HbHlwaCk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemF0aW9uCisJb2Ygc2xvdC0+bWV0cmljcy53aWR0aCBhbmQgc2xvdC0+bWV0cmljcy5oZWlnaHQgd2hlbiBsb2FkaW5nIGEKKwlXaW5kb3dzIEZOVCBnbHlwaC4gIFRoYW5rcyB0byBIdXcgRGF2aWVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21ydS5oIChGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyk6IENoYW5nZQorCXJldHVybiB0eXBlIHRvIEZUX0Jvb2wuCisKKwkqIHNyYy9jYWNoZS9mdGJhc2ljLmMgKGZ0Y19iYXNpY19mYW1pbHlfY29tcGFyZSk6IENoYW5nZSByZXR1cm4KKwl0eXBlIHRvIEZUX0Jvb2wuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChGVENfQ2FjaGVfSW5pdCwgZnRjX2NhY2hlX2luaXQpOiBNYWtlCisJdGhlIGZvcm1lciBjYWxsIHRoZSBsYXR0ZXIsIG5vdCB2aWNlIHZlcnNhLgorCShGVENfQ2FjaGVfRG9uZSwgZnRjX2NhY2hlX2RvbmUpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmMgKEZUQ19HTm9kZV9Db21wYXJlLCBmdGNfZ25vZGVfY29tcGFyZSk6IE1ha2UKKwl0aGUgZm9ybWVyIGNhbGwgdGhlIGxhdHRlciwgbm90IHZpY2UgdmVyc2EuCisJKEZUQ19HQ2FjaGVfSW5pdCwgZnRjX2djYWNoZV9pbml0KTogRGl0dG8uCisJKEZUQ19HQ2FjaGVfRG9uZSwgZnRjX2djYWNoZV9kb25lKTogRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jIChGVENfSU5vZGVfRnJlZSwgZnRjX2lub2RlX2ZyZWUpOiBNYWtlIHRoZQorCWZvcm1lciBjYWxsIHRoZSBsYXR0ZXIsIG5vdCB2aWNlIHZlcnNhLgorCShGVENfSU5vZGVfV2VpZ2h0LCBmdGNfaW5vZGVfd2VpZ2h0KTogRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChmdGNfc2l6ZV9ub2RlX2NvbXBhcmUsCisJZnRjX3NpemVfbm9kZV9jb21wYXJlX2ZhY2VpZCwgZnRjX2ZhY2Vfbm9kZV9jb21wYXJlKTogQ2hhbmdlIHJldHVybgorCXR5cGUgdG8gRlRfQm9vbC4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKEZUQ19TTm9kZV9GcmVlLCBmdGNfc25vZGVfZnJlZSk6IE1ha2UgdGhlCisJZm9ybWVyIGNhbGwgdGhlIGxhdHRlciwgbm90IHZpY2UgdmVyc2EuCisJKEZUQ19TTm9kZV9XZWlnaHQsIGZ0Y19zbm9kZV93ZWlnaHQpOiBEaXR0by4KKwkoRlRDX1NOb2RlX0NvbXBhcmUsIGZ0Y19zbm9kZV9jb21wYXJlKTogRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5jOiBGaXggc29tZSBidWdzIGFuZCBpbmVmZmljaWVuY2llcyBpbiB0aGUgY2FjaGUKKwlzdWItc3lzdGVtLgorCisyMDA0LTA2LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpOiBTZXQgYGxzYl9kZWx0YScgYW5kCisJYHJzYl9kZWx0YScgaW4gc2xvdC0+bWV0cmljcyBhbmQgdHVuZSBzaWRlIGJlYXJpbmdzIHNsaWdodGx5LgorCisyMDA0LTA2LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNC0wNi0wNCAgRGF2aWQgQ2hlc3RlciAgPGRhdmlkY2hlc3RlckBnbXgubmV0PgorCisJSW1wcm92ZSBpbnRlci1sZXR0ZXIgc3BhY2luZyBmb3IgYXV0b2hpbnRlZCBnbHlwaHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfR2x5cGhfTWV0cmljcyk6IEFkZCBlbGVtZW50cworCWBsc2JfZGVsdGEnIGFuZCBgcnNiX2RlbHRhJy4KKworCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9oaW50ZXJfbG9hZCk6IFNldCBgbHNiX2RlbHRhJyBhbmQKKwlgcnNiX2RlbHRhJyBpbiBzbG90LT5tZXRyaWNzIGFuZCB0dW5lIHNpZGUgYmVhcmluZ3Mgc2xpZ2h0bHkuCisKKzIwMDQtMDYtMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvKjogSW1wb3J0YW50IGZpeGVzIHRvIHRoZSBhdXRvLWZpdHRlci4gIFRoZSBvdXRwdXQKKwlub3cgc2VlbXMgdG8gYmUgMTAwJSBlcXVpdmFsZW50IHRvIHRoZSBhdXRvLWhpbnRlciwgd2hpbGUgYmVpbmcKKwlhYm91dCAyJSBmYXN0ZXIgKHdoaWNoIHByb3ZlcyB0aGF0IHNjcmlwdC1zcGVjaWZpYyBhbGdvcml0aG0KKwlzZWxlY3Rpb24gaXNuJ3QgYSBwZXJmb3JtYW5jZSBwcm9ibGVtKS4KKworCVRvIHRlc3QgaXQsIGNoYW5nZSBgYXV0b2hpbnQnIHRvIGBhdXRvZml0JyBpbgorCTxmcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaD4gYW5kIHJlY29tcGlsZS4KKworCUEgZmV3IG1vcmUgdGVzdGluZyBpcyBuZWVkZWQgYmVmb3JlIG1ha2luZyB0aGlzIHRoZSBvZmZpY2lhbAorCWF1dG8taGludGluZyBtb2R1bGUuCisKKzIwMDQtMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoY29tcHV0ZV9nbHlwaF9tZXRyaWNzKTogRml4IGNvbXBpbGVyCisJd2FybmluZ3MuCisKKzIwMDQtMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X2ZhY2VfZ2V0X25hbWUpOiBNYWtlIHN1cmUgdGhhdCBhbiBFbmdsaXNoCisJbmFtZSByZWNvcmQgZm9yIHRoZSBBcHBsZSBwbGF0Zm9ybSBpcyBwcmVmZXJyZWQgdG8gYSBub24tRW5nbGlzaAorCWVudHJ5IGZvciB0aGUgTWljcm9zb2Z0IHBsYXRmb3JtLiAgUHJvYmxlbSByZXBvcnRlZCBieSBIQU5EQQorCUtlbidpY2hpLgorCisyMDA0LTA1LTE5ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChtbV9heGlzX3VubWFwLCBtbV93ZWlnaHRzX3VubWFwKTogTmV3CisJYXV4aWxpYXJ5IGZ1bmN0aW9ucy4KKwkoVDFfR2V0X01NX1Zhcik6IFByb3ZpZGUgYXhpcyB0YWdzLgorCVVzZSBtbV9heGlzX3VubWFwIGFuZCBtbV93ZWlnaHRzX3VubWFwIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMKKwlmb3IgZGVzaWduIGFuZCBub3JtYWxpemVkIGF4aXMgY29vcmRpbmF0ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaCAoUFNfRGVzaWduTWFwUmVjKTogQ2hhbmdlIHR5cGUgb2YKKwlgZGVzaWduX3BvaW50cycgdG8gRlRfTG9uZy4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA0LTA1LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0NvbmljX0NoZWNrKTogRml4IGJvdW5kYXJ5IGNhc2VzLgorCVJlcG9ydGVkIGJ5IE1pa2V5IEFuYmFyeSA8bWFuYmFyeUB2aXpydC5jb20+LgorCisyMDA0LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2RvbmVfZmFjZSk6IEZyZWUgZmFjZS0+cG9zdHNjcmlwdF9uYW1lLgorCisyMDA0LTA1LTE1ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9tYXhfcHJvZmlsZSk6IEFsd2F5cyBzZXQKKwlmYWNlLT5yb290Lm51bV9nbHlwaHMuCisKKzIwMDQtMDUtMTQgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKwkgICAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChzZm50X2Rpcl9jaGVjayk6IEhhbmRsZSBgYmhlZCcgcHJvcGVybHkuCisKKzIwMDQtMDUtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgKGZ0Y19iYXNpY19mYW1pbHlfY29tcGFyZSwKKwlmdGNfYmFzaWNfZmFtaWx5X2luaXQsIGZ0Y19iYXNpY19mYW1pbHlfZ2V0X2NvdW50LAorCWZ0Y19iYXNpY19mYW1pbHlfbG9hZF9iaXRtYXAsIGZ0Y19iYXNpY19mYW1pbHlfbG9hZF9nbHlwaCwKKwlmdGNfYmFzaWNfZ25vZGVfY29tcGFyZV9mYWNlaWQpOiBBZGp1c3QgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzCisJdG8gcHJvdG90eXBlcyBnaXZlbiBpbiBoZWFkZXIgZmlsZXMgZnJvbSBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLgorCVVzZSBjYXN0cyB0byBwcm9wZXIgdHlwZXMgbG9jYWxseS4KKwkoZnRjX2Jhc2ljX2ltYWdlX2ZhbWlseV9jbGFzcywgZnRjX2Jhc2ljX2ltYWdlX2NhY2hlX2NsYXNzLAorCWZ0Y19iYXNpY19zYml0X2ZhbWlseV9jbGFzcywgZnRjX2Jhc2ljX3NiaXRfY2FjaGVfY2xhc3MpOiBSZW1vdmUKKwljYXN0cy4KKworCSogc3JjL2NhY2hlL2Z0Y2NiYWNrLmg6IEFkanVzdCBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMgdG8KKwlwcm90b3R5cGVzIGdpdmVuIGluIGhlYWRlciBmaWxlcyBmcm9tIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUuCisKKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jIChmdGNfaW5vZGVfZnJlZSwgZnRjX2lub2RlX25ldywKKwlmdGNfaW5vZGVfd2VpZ2h0KTogQWRqdXN0IHBhcmFtZXRlcnMgYW5kIHJldHVybiB0eXBlcyB0byBwcm90b3R5cGVzCisJZ2l2ZW4gaW4gaGVhZGVyIGZpbGVzIGZyb20gaW5jbHVkZS9mcmVldHlwZS9jYWNoZS4gIFVzZSBjYXN0cyB0bworCXByb3BlciB0eXBlcyBsb2NhbGx5LgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3Nub2RlX2ZyZWUsIGZ0Y19zbm9kZV9uZXcsCisJZnRjX3Nub2RlX3dlaWdodCwgZnRjX3Nub2RlX2NvbXBhcmUpOiBBZGp1c3QgcGFyYW1ldGVycyBhbmQgcmV0dXJuCisJdHlwZXMgdG8gcHJvdG90eXBlcyBnaXZlbiBpbiBoZWFkZXIgZmlsZXMgZnJvbQorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUuICBVc2UgY2FzdHMgdG8gcHJvcGVyIHR5cGVzIGxvY2FsbHkuCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKGZ0Y19jbWFwX25vZGVfZnJlZSwgZnRjX2NtYXBfbm9kZV9uZXcsCisJZnRjX2NtYXBfbm9kZV93ZWlnaHQsIGZ0Y19jbWFwX25vZGVfY29tcGFyZSwKKwlmdGNfY21hcF9ub2RlX3JlbW92ZV9mYWNlaWQpOiBBZGp1c3QgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzIHRvCisJcHJvdG90eXBlcyBnaXZlbiBpbiBoZWFkZXIgZmlsZXMgZnJvbSBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLiAgVXNlCisJY2FzdHMgdG8gcHJvcGVyIHR5cGVzIGxvY2FsbHkuCisJKGZ0Y19jbWFwX2NhY2hlX2NsYXNzKTogUmVtb3ZlIGNhc3RzLgorCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguYyAoZnRjX2dub2RlX2NvbXBhcmUsIGZ0Y19nY2FjaGVfaW5pdCwKKwlmdGNfZ2NhY2hlX2RvbmUpOiBBZGp1c3QgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzIHRvIHByb3RvdHlwZXMKKwlnaXZlbiBpbiBoZWFkZXIgZmlsZXMgZnJvbSBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLiAgVXNlIGNhc3RzIHRvCisJcHJvcGVyIHR5cGVzIGxvY2FsbHkuCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChmdGNfc2l6ZV9ub2RlX2RvbmUsIGZ0Y19zaXplX25vZGVfY29tcGFyZSwKKwlmdGNfc2l6ZV9ub2RlX2luaXQsIGZ0Y19zaXplX25vZGVfcmVzZXQsCisJZnRjX3NpemVfbm9kZV9jb21wYXJlX2ZhY2VpZCwgZnRjX2ZhY2Vfbm9kZV9pbml0LAorCWZ0Y19mYWNlX25vZGVfZG9uZSwgZnRjX2ZhY2Vfbm9kZV9jb21wYXJlOiBBZGp1c3QgcGFyYW1ldGVycyBhbmQKKwlyZXR1cm4gdHlwZXMgdG8gcHJvdG90eXBlcyBnaXZlbiBpbiBoZWFkZXIgZmlsZXMgZnJvbQorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUuICBVc2UgY2FzdHMgdG8gcHJvcGVyIHR5cGVzIGxvY2FsbHkuCisKKwkoZnRjX3NpemVfbGlzdF9jbGFzcywgZnRjX2ZhY2VfbGlzdF9jbGFzcyk6IFJlbW92ZSBjYXN0cy4KKworMjAwNC0wNS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2hpbnQvYWhtb2R1bGUuYyAoZnRfYXV0b2hpbnRlcl9pbml0LCBmdF9hdXRvaGludGVyX2RvbmUpOgorCVVzZSBGVF9Nb2R1bGUgYXMgcGFyYW1ldGVyIGFuZCBkbyBhIGNhc3QgdG8gRlRfQXV0b0hpbnRlciBsb2NhbGx5LgorCShhdXRvaGludF9tb2R1bGVfY2xhc3MpOiBSZW1vdmUgY2FzdHMuCisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoZnRfYml0bWFwX2dseXBoX2luaXQsIGZ0X2JpdG1hcF9nbHlwaF9jb3B5LAorCWZ0X2JpdG1hcF9nbHlwaF9kb25lLCBmdF9iaXRtYXBfZ2x5cGhfYmJveCwgZnRfb3V0bGluZV9nbHlwaF9pbml0LAorCWZ0X291dGxpbmVfZ2x5cGhfZG9uZSwgZnRfb3V0bGluZV9nbHlwaF9jb3B5LAorCWZ0X291dGxpbmVfZ2x5cGhfdHJhbnNmb3JtLCBmdF9vdXRsaW5lX2dseXBoX2Jib3gsCisJZnRfb3V0bGluZV9nbHlwaF9wcmVwYXJlKTogVXNlIEZUX0dseXBoIGFzIHBhcmFtZXRlciBhbmQgZG8gYSBjYXN0CisJdG8gRlRfWFhYR2x5cGggbG9jYWxseS4KKwlVc2UgRlRfQ0FMTEJBQ0tfREVGIHRocm91Z2hvdXQuCisJKGZ0X2JpdG1hcF9nbHlwaF9jbGFzcywgZnRfb3V0bGluZV9nbHlwaF9jbGFzcyk6IFJlbW92ZSBjYXN0cy4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChiZGZfY21hcF9pbml0LCBiZGZfY21hcF9kb25lLAorCWJkZl9jbWFwX2NoYXJfaW5kZXgsIGJkZl9jbWFwX2NoYXJfbmV4dCk6IFVzZSBGVF9DTWFwIGFzIHBhcmFtZXRlcgorCWFuZCBkbyBhIGNhc3QgdG8gQkRGX0NNYXAgbG9jYWxseS4KKwkoYmRmX2NtYXBfY2xhc3MpOiBSZW1vdmUgY2FzdHMuCisKKzIwMDQtMDUtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5oIChDRkZfQnVpbGRlcik6IFJlbW92ZSBgZXJyb3InLgorCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFJlcGxhY2UKKwlgTWVtb3J5X0Vycm9yJyB3aXRoIGBGYWlsJyB1bmQgdXBkYXRlIGFsbCB1c2Vycy4KKworMjAwNC0wNS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX1BhcnNlU3RhdGUpOiBOZXcKKwllbnVtZXJhdGlvbi4KKwkoVDFfQnVpbGRlclJlYyk6IFJlcGxhY2UgYHBhdGhfYmVndW4nIHdpdGggYHBhcnNlX3N0YXRlJy4KKwlSZW1vdmUgYGVycm9yJy4KKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogUmVwbGFjZQorCWBNZW1vcnlfRXJyb3InIHdpdGggYEZhaWwnIGFuZCB1cGRhdGUgYWxsIHVzZXJzLgorCURvbid0IHVzZSBgYnVpbGRlci0+ZXJyb3InLgorCVJlcGxhY2UgYHBhdGhfYmVndW4nIHdpdGggYHBhcnNlX3N0YXRlJyBhbmQgY2hlY2sgcGFyc2luZyBzdGF0ZXMuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfYnVpbGRlcl9pbml0LCB0MV9idWlsZGVyX3N0YXJ0X3BvaW50KToKKwlSZXBsYWNlIGBwYXRoX2JlZ3VuJyB3aXRoIGBwYXJzZV9zdGF0ZScgYW5kIGNoZWNrIHBhcnNpbmcgc3RhdGVzLgorCisyMDA0LTA1LTEwICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0eGd2YXIuYyAoZnRfdmFyX2xvYWRfYXZhcik6IERvIGZyZWUgYXJyYXlzIGluIGNhc2UKKwlvZiBlcnJvciAtLSBgYXZhcicgaXMgb3B0aW9uYWwgc28gd2UgY2FuJ3QgcmVseSBvbiB0dF9kb25lX2JsZW5kCisJYmVpbmcgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCisKKzIwMDQtMDUtMDkgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHR4Z3Zhci5jIChmdF92YXJfbG9hZF9hdmFyLCBmdF92YXJfbG9hZF9ndmFyKTogRml4CisJZXJyb3IgaGFuZGxpbmcuCisKKzIwMDQtMDUtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMsIHNyYy9wZnIvcGZyb2Jqcy5oIChwZnJfZmFjZV9pbml0LAorCXBmcl9mYWNlX2RvbmUsIHBmcl9mYWNlX2dldF9rZXJuaW5nLCBwZnJfc2xvdF9pbml0LCBwZnJfc2xvdF9kb25lLAorCXBmcl9zbG90X2xvYWQpOiBEb24ndCB1c2UgUEZSX1hYWCBidXQgRlRfWFhYIGFyZ3VtZW50cyB3aGljaCBhcmUKKwl0eXBlY2FzdCB0byB0aGUgcHJvcGVyIFBGUl9YWFggdHlwZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KKwlVcGRhdGUgY29kZSBhY2NvcmRpbmdseS4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfZ2V0X2tlcm5pbmcsIHBmcl9nZXRfYWR2YW5jZSwKKwlwZnJfZ2V0X21ldHJpY3MsIHBmcl9nZXRfc2VydmljZSk6IERvbid0IHVzZSBQRlJfWFhYIGJ1dCBGVF9YWFgKKwlhcmd1bWVudHMgd2hpY2ggYXJlIHR5cGVjYXN0IHRvIHRoZSBwcm9wZXIgUEZSX1hYWCB0eXBlcyB3aXRoaW4gdGhlCisJZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJVXNlIEZUX0NBTExCQUNLX0RFRiB0aHJvdWdob3V0LgorCShwZnJfbWV0cmljc19zZXJ2aWNlX3JlYywgcGZyX2RyaXZlcl9jbGFzcyk6IFJlbW92ZSBjYXN0cy4KKworMjAwNC0wNS0wNiAgTWFzYXRha2UgWUFNQVRPICA8amV0QGd5dmUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9ndmFyKTogVXNlIEZUX0ZBQ0VfU1RSRUFNLgorCSgqKTogUmVuYW1lIGxvY2FsIHZhcmlhYmxlIE9mZnNldFRvRGF0YSB0byBvZmZzZXRUb0RhdGEuCisKKzIwMDQtMDUtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX2RvbmUsIGNmZl9zaXplX2luaXQsIGNmZl9zaXplX3Jlc2V0LAorCWNmZl9zbG90X2RvbmUsIGNmZl9zbG90X2luaXQsIGNmZl9mYWNlX2luaXQsIGNmZl9mYWNlX2RvbmUpOiBBY2Nlc3MKKwlyb290IGZpZWxkcyBkaXJlY3RseS4KKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoTG9hZF9HbHlwaCk6IEFjY2VzcyByb290IGZpZWxkcyBkaXJlY3RseS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBTYXZlIGN1cnJlbnQKKwlmcmFtZSBiZWZvcmUgY2FsbGluZyBUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0NNYXBSZWMpOiBSZW5hbWUgYGNtYXAnIHRvIGByb290JyBmb3IKKwljb25zaXN0ZW5jeS4KKwkocGNmX2NtYXBfaW5pdCwgcGNmX2NtYXBfZG9uZSwgcGNmX2NtYXBfY2hhcl9pbmRleCwKKwlwY2ZfY21hcF9jaGFyX25leHQpOiBEb24ndCB1c2UgUENGX1hYWCBidXQgRlRfWFhYIGFyZ3VtZW50cyB3aGljaAorCWFyZSB0eXBlY2FzdCB0byB0aGUgcHJvcGVyIFBDRl9YWFggdHlwZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KKwlVcGRhdGUgY29kZSBhY2NvcmRpbmdseS4KKwkocGNmX2NtYXBfY2xhc3MpOiBSZW1vdmUgY2FzdHMuCisJKFBDRl9GYWNlX0RvbmUsIFBDRl9GYWNlX0luaXQsIFBDRl9TZXRfUGl4ZWxfU2l6ZSk6IERvbid0IHVzZQorCVBDRl9YWFggYnV0IEZUX1hYWCBhcmd1bWVudHMgd2hpY2ggYXJlIHR5cGVjYXN0IHRvIHRoZSBwcm9wZXIKKwlQQ0ZfWFhYIHR5cGVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJVXNlIEZUX0NBTExCQUNLX0RFRiB0aHJvdWdob3V0LgorCShQQ0ZfU2V0X1BvaW50X1NpemUpOiBOZXcgd3JhcHBlciBmdW5jdGlvbi4KKwkoUENGX0dseXBoX0xvYWQsIHBjZl9kcml2ZXJfcmVxdWVzdGVyKTogVXNlIEZUX0NBTExCQUNLX0RFRi4KKwkocGNmX2RyaXZlcl9jbGFzcyk6IFJlbW92ZSBjYXN0cy4KKworMjAwNC0wNS0wNCAgU3RldmUgSGFydHdlbGwgIDxzaHNwYW1zaW5rQGNvbWNhc3QubmV0PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2RyaXZlcl9kb25lKTogRml4IHR5cG8uCisKKzIwMDQtMDUtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Eb25lLCBCREZfRmFjZV9Jbml0LAorCUJERl9TZXRfUGl4ZWxfU2l6ZSk6IERvbid0IHVzZSBCREZfWFhYIGJ1dCBGVF9YWFggYXJndW1lbnRzIHdoaWNoCisJYXJlIHR5cGVjYXN0IHRvIHRoZSBwcm9wZXIgQkRGX1hYWCB0eXBlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLgorCVVwZGF0ZSBjb2RlIGFjY29yZGluZ2x5LgorCVVzZSBGVF9DQUxMQkFDS19ERUYgdGhyb3VnaG91dC4KKwkoQkRGX1NldF9Qb2ludF9TaXplKTogTmV3IHdyYXBwZXIgZnVuY3Rpb24uCisJKGJkZl9kcml2ZXJfY2xhc3MpOiBSZW1vdmUgY2FzdHMuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoR2V0X0tlcm5pbmcsIExvYWRfR2x5cGgsIGNmZl9nZXRfaW50ZXJmYWNlKToKKwlEb24ndCB1c2UgQ0ZGX1hYWCBidXQgRlRfWFhYIGFyZ3VtZW50cyB3aGljaCBhcmUgdHlwZWNhc3QgdG8gdGhlCisJcHJvcGVyIENGRl9YWFggdHlwZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KKwlVcGRhdGUgY29kZSBhY2NvcmRpbmdseS4KKwlVc2UgRlRfQ0FMTEJBQ0tfREVGIHRocm91Z2hvdXQuCisJKGNmZl9kcml2ZXJfY2xhc3MpOiBSZW1vdmUgY2FzdHMuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oLCBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX3NpemVfZG9uZSwKKwljZmZfc2l6ZV9pbml0LCBjZmZfc2l6ZV9yZXNldCwgY2ZmX3Nsb3RfZG9uZSwgY2ZmX3Nsb3RfaW5pdCwKKwljZmZfZmFjZV9pbml0LCBjZmZfZmFjZV9kb25lLCBjZmZfZHJpdmVyX2luaXQsIGNmZl9kcml2ZXJfZG9uZSk6CisJRG9uJ3QgdXNlIENGRl9YWFggYnV0IEZUX1hYWCBhcmd1bWVudHMgd2hpY2ggYXJlIHR5cGVjYXN0IHRvIHRoZQorCXByb3BlciBDRkZfWFhYIHR5cGVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJKGNmZl9wb2ludF9zaXplX3Jlc2V0KTogTmV3IHdyYXBwZXIgZnVuY3Rpb24uCisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5oLCBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX3Nsb3RfZG9uZSwKKwljaWRfc2xvdF9pbml0LCBjaWRfc2l6ZV9kb25lLCBjaWRfc2l6ZV9pbml0LCBjaWRfc2l6ZV9yZXNldCwKKwljaWRfZmFjZV9kb25lLCBjaWRfZmFjZV9pbml0LCBjaWRfZHJpdmVyX2luaXQsIGNpZF9kcml2ZXJfZG9uZSk6CisJRG9uJ3QgdXNlIENJRF9YWFggYnV0IEZUX1hYWCBhcmd1bWVudHMgd2hpY2ggYXJlIHR5cGVjYXN0IHRvIHRoZQorCXByb3BlciBDSURfWFhYIHR5cGVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJKGNpZF9wb2ludF9zaXplX3Jlc2V0KTogTmV3IHdyYXBwZXIgZnVuY3Rpb24uCisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYywgc3JjL2NpZC9jaWRnbG9hZC5oIChjaWRfc2xvdF9sb2FkX2dseXBoKToKKwlEb24ndCB1c2UgQ0lEX1hYWCBidXQgRlRfWFhYIGFyZ3VtZW50cyB3aGljaCBhcmUgdHlwZWNhc3QgdG8gdGhlCisJcHJvcGVyIENJRF9YWFggdHlwZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KKwlVcGRhdGUgY29kZSBhY2NvcmRpbmdseS4KKworCSogc3JjL2NpZC9jaWRyaXZlci5jIChjaWRfZ2V0X2ludGVyZmFjZSk6CisJRG9uJ3QgdXNlIENJRF9YWFggYnV0IEZUX1hYWCBhcmd1bWVudHMgd2hpY2ggYXJlIHR5cGVjYXN0IHRvIHRoZQorCXByb3BlciBDSURfWFhYIHR5cGVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJVXNlIEZUX0NBTExCQUNLX0RFRi4KKwkodDFjaWRfZHJpdmVyX2NsYXNzKTogUmVtb3ZlIGNhc3RzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2ludGVyZmFjZSk6IFVzZSBGVF9DQUxMQkFDS19ERUYuCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9hdmFyKTogRG9uJ3QgZnJlZSBub24tbG9jYWwKKwl2YXJpYWJsZXMgKHRoaXMgaXMgZG9uZSBsYXRlcikuCisJKGZ0X3Zhcl9sb2FkX2F2YXIpOiBGaXggY2FsbCB0byBGVF9GUkFNRV9FTlRFUi4KKwkoVFRfR2V0X01NX1Zhcik6IEZpeCBzaXplIGZvciBgZnZhcl9maWVsZHMnLgorCShUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMpOiBIYW5kbGUgZGVhbGxvY2F0aW9uIG9mIGxvY2FsIHZhcmlhYmxlcworCWNvcnJlY3RseS4KKworCSogc3JjL2Jhc2UvZnRkYmdtZW0uYyAoZnRfbWVtX2RlYnVnX3JlYWxsb2MpOiBEb24ndCBhYm9ydCBpZgorCWN1cnJlbnQgc2l6ZSBpcyB6ZXJvLgorCisyMDA0LTA1LTAzICBTdGV2ZSBIYXJ0d2VsbCAgPHNoc3BhbXNpbmtAY29tY2FzdC5uZXQ+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuaCwgc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQsCisJdHRfZmFjZV9kb25lLCB0dF9zaXplX2luaXQsIHR0X3NpemVfZG9uZSwgdHRfZHJpdmVyX2luaXQsCisJdHRfZHJpdmVyX2RvbmUpOiBEb24ndCB1c2UgVFRfWFhYIGJ1dCBGVF9YWFggYXJndW1lbnRzIHdoaWNoIGFyZQorCXR5cGVjYXN0IHRvIHRoZSBwcm9wZXIgVFRfWFhYIHR5cGVzIHdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChHZXRfS2VybmluZywgU2V0X0NoYXJfU2l6ZXMsCisJU2V0X1BpeGVsX1NpemVzLCBMb2FkX0dseXBoLCB0dF9nZXRfaW50ZXJmYWNlKTogRG9uJ3QgdXNlIFRUX1hYWCBidXQKKwlGVF9YWFggYXJndW1lbnRzIHdoaWNoIGFyZSB0eXBlY2FzdCB0byB0aGUgcHJvcGVyIFRUX1hYWCB0eXBlcworCXdpdGhpbiB0aGUgZnVuY3Rpb24uCisJVXBkYXRlIGNvZGUgYWNjb3JkaW5nbHkuCisJKHR0X2RyaXZlcl9jbGFzcyk6IFJlbW92ZSBjYXN0cy4KKworMjAwNC0wNS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9mcmVlX25hbWVzKTogQ2hlY2sgdGhhdCBgdGFibGUtPm5hbWVzJworCWlzIG5vdCBOVUxMLiAgUmVwb3J0ZWQgYnkgR29yZG9uIENoaWxkcyA8Z2NoaWxkc0BxdWlja2N1dC5jb20uYXU+LgorCisyMDA0LTA0LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvZm9ybWF0cy50eHQ6IEFkZCBtb3JlIGluZm9ybWF0aW9uIG9uIFBGUiBmb3JtYXQuCisKKzIwMDQtMDQtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9mb3JtYXRzLnR4dDogTmV3IGZpbGUuCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDQtMjggIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKEdYX0JsZW5kUmVjXykKKwlbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEZpeCBhIHR5cG8uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX0JsZW5kUmVjXyk6IEZpeCBhIHR5cG8uCisKKzIwMDQtMDQtMjcgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogVXNlIEZUX0xPQ0FMIGluc3RlYWQgb2YgRlRfTE9DQUxfREVGCisJZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKworMjAwNC0wNC0yNSAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9hcHBseV90dXBsZSk6IEZpeCB0eXBvLgorCisyMDA0LTA0LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS9KYW1maWxlLCBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDQtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2Zkcml2ci5jOiBSZXZlcnQgY2hhbmdlIGZyb20gMjAwNC0wNC0xNy4KKwkqIHNyYy9wY2YvcGNmdXRpbC5jOiBVc2UgRlRfTE9DQUxfREVGLgorCSogc3JjL3BjZi9wY2Z1dGlsLmg6IEluY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ILgorCVVzZSBGVF9CRUdJTl9IRUFERVIgYW5kIEZUX0VORF9IRUFERVIuCisJVXNlIEZUX0xPQ0FMLgorCisyMDA0LTA0LTI0ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCUFkZCBzdXBwb3J0IGZvciBBcHBsZSdzIGRpc3RvcnRhYmxlIGZvbnQgdGVjaG5vbG9neSAoaW4gR1ggZm9udHMpLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIChGVF9WYXJfQXhpcywgRlRfVmFyX05hbWVkX1N0eWxlLAorCUZUX01NX1Zhcik6IE5ldyBzdHJ1Y3R1cmVzLgorCShGVF9HZXRfTU1fVmFyLCBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywKKwlGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKTogTmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggKEZUX0dldF9NTV9WYXJfRnVuYywKKwlGVF9TZXRfVmFyX0Rlc2lnbl9GdW5jKTogTmV3IHR5cGVkZWZzLgorCVVwZGF0ZSBNdWx0aU1hc3RlcnMgc2VydmljZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKKwlbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEluY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ILgorCShHWF9CbGVuZCkgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBOZXcgdHlwZWRlZi4KKwkoVFRfRmFjZSkgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBOZXcgbWVtYmVycyBgZG9ibGVuZCcKKwlhbmQgYGJsZW5kJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19hdmFyLCBUVEFHX2N2YXIsIFRUQUdfZ3Zhcik6IE5ldworCW1hY3Jvcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IEFkZCBgdHRneHZhcicuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfR2V0X01NX1ZhciwgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyk6IE5ldyBmdW5jdGlvbnMuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSkKKwlbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IFNldCBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUworCWZsYWcgZm9yIEdYIHZhciBmb250cy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYywgc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogTmV3IGZpbGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYyBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEluY2x1ZGUKKwl0dGd4dmFyLmMuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSW5jbHVkZQorCUZUX01VTFRJUExFX01BU1RFUlNfSCwgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0gsIGFuZCB0dGd4dmFyLmguCisJKHR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycykgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOgorCU5ldyBzZXJ2aWNlLgorCSh0dF9zZXJ2aWNlcykgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSW5jbHVkZQorCXR0Z3h2YXIuaC4KKwkoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgsIGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpCisJW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdIDpTdXBwb3J0IEdYIHZhciBmb250cy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSW5jbHVkZQorCXR0Z3h2YXIuaC4KKwkodHRfZG9uZV9mYWNlKSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IENhbGwKKwl0dF9kb25lX2JsZW5kLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSW5jbHVkZQorCXR0Z3h2YXIuaC4KKwkodHRfZmFjZV9sb2FkX2N2dCkgIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogQ2FsbAorCXR0X2ZhY2VfdmFyeV9jdnQuCisKKwkqIHNyYy90cnVldHlwZS9ydWxlcy5tayAoVFRfRFJWX1NSQyk6IEFkZCB0dGd4dmFyLmMuCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMpOiBBZGQgVDFfR2V0X01NX1ZhcgorCWFuZCBUMV9TZXRfVmFyX0Rlc2lnbi4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChGVF9JTlRfVE9fRklYRUQsIEZUX0ZJWEVEX1RPX0lOVCk6IE5ldyBtYWNyb3MuCisJKFQxX0dldF9NTV9WYXIsIFQxX1NldF9WYXJfRGVzaWduKTogTmV3IGZ1bmN0aW9ucy4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5oIChUMV9HZXRfTU1fVmFyLCBUMV9TZXRfVmFyX0Rlc2lnbik6IE5ldworCWZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKworMjAwNC0wNC0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaCAoRlRfR2V0X0NoYXJNYXBfSW5kZXgpOiBSZW5hbWUKKwlkZWNsYXJhdGlvbiBhbmQgbW92ZSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9HZXRfQ2hhcm1hcF9JbmRleCk6IEhlcmUuCisJKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDkuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HZXRfQ2hhcm1hcF9JbmRleCk6IE5ldyBmdW5jdGlvbi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOTo3OjMuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFVwZGF0ZWQuCisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvajogcy8yMTgvMjE5Ly4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpLCBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyk6CisJcy8yLjEuOC8yLjEuOS8uCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlZC4KKworMjAwNC0wNC0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZXJfcnVuKSwgc3JjL3BzYXV4L3Bzb2Jqcy5jCisJKHBzX3BhcnNlcl9sb2FkX2ZpZWxkKTogVXNlIEZUX0NIQVJfQklULgorCisyMDA0LTA0LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKworCSogVmVyc2lvbiAyLjEuOCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBGaXggYSBzbWFsbCBtZW1vcnkgbGVhay4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyksIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMKKwkoYWZfYXV0b2ZpdHRlcl9sb2FkX2dseXBoKSwgc3JjL2Jhc2UvZnRkZWJ1Zy5jIChGVF9UcmFjZV9HZXRfTmFtZSk6CisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmg6IFVuZGVmaW5lIEFGX0RFQlVHLgorCisJKiBzcmMvbHp3L3pvcGVuLmMgKHJtYXNrKSwgc3JjL3BjZi9wY2Zkcml2ci5jIChwY2Zfc2VydmljZV9iZGYsCisJcGNmX3NlcnZpY2VzKSwgc3JjL3BjZi9wY2ZyZWFkLmMgKHRhYmxlTmFtZXMpLCBzcmMvcHNhdXgvcHNvYmpzLmMKKwkoZnRfY2hhcl90YWJsZSksIHNyYy90eXBlNDIvdDQyZHJpdnIuYyAodDQyX3NlcnZpY2VfZ2x5cGhfZGljdCwKKwl0NDJfc2VydmljZV9wc19mb250X25hbWUpOiBEZWNvcmF0ZSBkYXRhIGFycmF5cyB3aXRoIGBjb25zdCcgdG8KKwlhdm9pZCBwb3B1bGF0aW5nIHRoZSBgLmRhdGEnIHNlZ21lbnQuCisKKwkqIHNyYy9sencvSmFtZmlsZTogTmV3IGZpbGUuCisKKzIwMDQtMDQtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChUMVJhZGl4KTogUmVuYW1lZCB0by4uLgorCShwc19yYWRpeCk6IFRoaXMuCisJVXBkYXRlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDQtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCAoVFRfTG9hZF9HbHlwaCksCisJc3JjL3R0ZHJpdmVyLmMgKExvYWRfR2x5cGgpOiBDaGFuZ2UgdHlwZSBvZiBgZ2x5cGhfaW5kZXgnIHRvCisJRlRfVUludC4gIEZyb20gTGV4IFdhcm5lcnMuCisKKzIwMDQtMDQtMTcgIENoaXNhdG8gWWFtYXVjaGkgIDxjeWFtYXVjaEBhLnBoeXMubmFnb3lhLXUuYWMuanA+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfc2ZudF9oZWFkZXIpOiBSZWFsbHkgZml4IGNoYW5nZQorCWZyb20gMjAwNC0wMy0xOS4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogVXNlIGBmdF9zdHJsZW4nLgorCisJKiBzcmMvcGNmL3BjZnV0aWwuYywgc3JjL3BjZi9wY2Z1dGlsLmg6IERlY29yYXRlIGZ1bmN0aW9ucyB3aXRoCisJYHN0YXRpYycuCisJUmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBgUmVwYWRCaXRtYXAnLgorCSogc3JjL3BjZi9wY2Zkcml2ci5jOiBEb24ndCBpbmNsdWRlIHBjZnV0aWwuaC4KKworMjAwNC0wNC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4gKHVzYWdlKTogRml4IGFuZCBpbXByb3ZlIHVzYWdlCisJaW5mb3JtYXRpb24uCisKKzIwMDQtMDQtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaDogRGVmaW5lCisJRlRfQ0hBUl9CSVQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogRG9uJ3QgYXBwbHkgYXV0b2hpbnRpbmcgaWYKKwlnbHlwaCBpcyB2ZXJ0aWNhbGx5IGRpc3RvcnRlZCBvciBtaXJyb3JlZC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKTogSGFuZGxlIHplcm8gYHNpemUnIHByb3Blcmx5CisJZm9yIGVtYmVkZGVkIGJpdG1hcHMuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNC0wNC0xNSAgYnl0ZXNvZnR3YXJlICA8Ynl0ZXNvZnR3YXJlQGJ0aW50ZXJuZXQuY29tPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLCBzcmMvYmFzZS9mdHN0cmVhbS5jCisJKEZUX1N0cmVhbV9SZWFkRmllbGRzKTogTW9yZSBmaXhlcyB1c2luZyBGVF9DSEFSX0JJVC4KKworMjAwNC0wNC0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9DSEFSX0JJVCk6IE5ldyBtYWNyby4KKworMjAwNC0wNC0xNCAgQWxleCBTdHJlbG5pa292ICA8cHRrdHlyZkBtYWlsLnJ1PgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3Nub2RlX2xvYWQpOiBJbml0aWFsaXplIGAqYXNpemUnIGluIGNhc2UKKwlvZiBlcnJvci4KKworMjAwNC0wNC0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIFtfX0dOVUNfX106IERlZmluZSBPU19JTkxJTkUuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWM6IERvbid0IHRyeSB0byByZW1vdmUgYC1hbnNpJyBjb21waWxhdGlvbgorCXN3aXRjaCBvbiB0aGUgTWFjLgorCisJKiBidWlsZHMvdW5peC9sdG1haW4uc2g6IFJlZ2VuZXJhdGVkIHdpdGggYGxpYnRvb2xpemUgLS1mb3JjZQorCS0tY29weScgZnJvbSBsaWJ0b29sIDEuNS42LgorCSogYnVpbGRzL3VuaXgvYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgd2l0aCBgYWNsb2NhbCAtSSAuJyBmcm9tCisJYXV0b21ha2UgMS44YS4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogUmVnZW5lcmF0ZWQgd2l0aCBhdXRvY29uZiAyLjU5YS4KKworMjAwNC0wNC0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBVc2UgQ0hBUl9CSVQgdG8gZGVmaW5lCisJc2l6ZSBvZiBGVF9TSVpFT0ZfeHh4LgorCisyMDA0LTA0LTEyICBDaGlzYXRvIFlhbWF1Y2hpICA8Y3lhbWF1Y2hAYS5waHlzLm5hZ295YS11LmFjLmpwPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfRmluZF9TQml0X0ltYWdlX0Z1bmMsCisJVFRfTG9hZF9TQml0X01ldHJpY3NfRnVuYyk6IE5ldyB0eXBlZGVmcy4KKwkoU0ZOVF9JbnRlcmZhY2UpOiBBZGQgZmluZF9zYml0X2ltYWdlIGFuZCBsb2FkX3NiaXRfbWV0cmljcy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9pbnRlcmZhY2UpOiBVcGRhdGVkLgorCSogc3JjL3NmbnQvdHRzYml0LmggKHR0X2ZpbmRfc2JpdF9pbWFnZSwgdHRfbG9hZF9zYml0X21ldHJpY3MpOiBOZXcKKwlkZWNsYXJhdGlvbnMuCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoZmluZF9zYml0X2ltYWdlKTogUmVuYW1lZCB0by4uLgorCSh0dF9maW5kX3NiaXRfaW1hZ2UpOiBUaGlzLgorCVVwZGF0ZWQgYWxsIGNhbGxlcnMuCisJKGxvYWRfc2JpdF9tZXRyaWNzKTogUmVuYW1lZCB0by4uLgorCSh0dF9sb2FkX3NiaXRfbWV0cmljcyk6IFRoaXMuCisJVXBkYXRlZCBhbGwgY2FsbGVycy4KKworMjAwNC0wNC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IEFjY2VwdCBtYWtlcHAgYWxzby4KKworCSogYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rOiBVc2UgcHJvcGVyIHBhdGggdG8gdW5peC1kZWYubWsuCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbiAoQlVJTERfRElSLCBQTEFURk9STSk6IFJlbW92ZS4KKwkqIGJ1aWxkcy91bml4L3VuaXgubWsgKEJVSUxEX0RJUiwgUExBVEZPUk0pOiBEZWZpbmUuCisJVXNlIEJVSUxEX0RJUi4KKworCSogZG9jcy9JTlNUQUxMLCBkb2NzL0lOU1RBTEwuR05VLCBkb2NzL0lOU1RBTEwuVU5YOiBVcGRhdGUKKwlkb2N1bWVudGF0aW9uIG9uIG1ha2VwcC4KKworMjAwNC0wNC0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvbHp3L3pvcGVuLmM6IERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggYW5kIHN5cy9zdGF0LmguCisKKzIwMDQtMDQtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2x6dy9mdGx6dy5jOiBJbmNsdWRlIHpvcGVuLmggZGVwZW5kZW50IG9uCisJRlRfQ09ORklHX09QVElPTl9VU0VfTFpXLgorCisJKiBzcmMvYmFzZS9mdGRlYnVnLmM6IHMvaW5kZXgvaWR4LyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAwNC0wNC0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9sdG1haW4uc2g6IFJlZ2VuZXJhdGVkIHdpdGggYGxpYnRvb2xpemUgLS1mb3JjZQorCS0tY29weScgZnJvbSBsaWJ0b29sIDEuNS4yLgorCSogYnVpbGRzL3VuaXgvYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgd2l0aCBgYWNsb2NhbCAtSSAuJyBmcm9tCisJYXV0b21ha2UgMS44YS4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogUmVnZW5lcmF0ZWQgd2l0aCBhdXRvY29uZiAyLjU5YS4KKworMjAwNC0wNC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mdC1tdW5tYXAubTQgKEZUX01VTk1BUF9QQVJBTSk6IEZpeCBhcmd1bWVudHMgb2YKKwlBQ19DT01QSUxFX0lGRUxTRS4KKwkqIGJ1aWxkcy91bml4L2FjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkIHdpdGggYGFjbG9jYWwgLUkgLicgZnJvbQorCWF1dG9tYWtlIDEuOGEuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkIHdpdGggYXV0b2NvbmYgMi41OWEuCisJKiBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsIGJ1aWxkcy91bml4L2NvbmZpZy5zdWI6IFVwZGF0ZWQgZnJvbQorCWBjb25maWcnIENWUyBtb2R1bGUgYXQgc3VidmVyc2lvbnMuZ251Lm9yZy4KKwkqIGJ1aWxkcy91bml4L2luc3RhbGwtc2gsIGJ1aWxkcy91bml4L21raW5zdGFsbGRpcnM6IFVwZGF0ZWQgZnJvbQorCWB0ZXhpbmZvJyBDVlMgbW9kdWxlIGF0IHN1YnZlcnNpb25zLmdudS5vcmcuCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKHJlZmRvYyk6IFVwZGF0ZWQuCisKKzIwMDQtMDMtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUhhbmRsZSBicm9rZW4gRk5UIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgYSB0cmFpbGluZyBOVUxMIGJ5dGUKKwlpbiB0aGUgZmFjZSBuYW1lIHN0cmluZy4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5oIChGTlRfRm9udFJlYyk6IE5ldyBtZW1iZXIgYGZhbWlseV9uYW1lJy4KKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoZm50X2ZvbnRfZG9uZSk6IEZyZWUgZm9udC0+ZmFtaWx5X25hbWUuCisJKEZOVF9GYWNlX0luaXQpOiBBcHBlbmQgYSBmaW5hbCB6ZXJvIGJ5dGUgdG8gdGhlIGZvbnQgZmFjZSBuYW1lLgorCisyMDA0LTAzLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfc2ZudF9oZWFkZXIpOiBGaXggY2hhbmdlIGZyb20KKwkyMDA0LTAzLTE5LgorCisyMDA0LTAzLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Rlc2NyaXAubW1zIChPQkpTKTogQWRkIGZ0YmJveC5vYmouCisKKzIwMDQtMDMtMjYgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJQWRkIHZlcnRpY2FsIHBoYW50b20gcG9pbnRzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfTG9hZGVyUmVjKTogQWRkCisJYHRvcF9iZWFyaW5nJywgYHZhZHZhbmNlJywgYHBwMycsIGFuZCBgcHA0Jy4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyk6IEhhbmRsZSB0d28gbW9yZSBwb2ludHMuCisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWQpOiBIYW5kbGUgdHdvIG1vcmUgcG9pbnRzLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoR2V0X1ZNZXRyaWNzKTogTmV3IGZ1bmN0aW9uLgorCShUVF9Mb2FkX1NpbXBsZV9HbHlwaCwgVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBIYW5kbGUgdHdvIG1vcmUKKwlwb2ludHMuCisJKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBVc2UgR2V0X1ZNZXRyaWNzLgorCUhhbmRsZSB0d28gbW9yZSBwb2ludHMuCisJKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IFRoYW5rcyB0byB2ZXJ0aWNhbCBwaGFudG9tIHBvaW50cyB3ZSBub3cKKwljYW4gYWx3YXlzIGNvbXB1dGUgYGFkdmFuY2VfaGVpZ2h0JyBhbmQgYHRvcF9iZWFyaW5nJy4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuaCAoVFRfU3ViZ2x5cGhSZWMpOiBBZGQgdmVydGljYWwgcGhhbnRvbQorCXBvaW50cy4KKworCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jIChhaF9vdXRsaW5lX2xvYWQpOiBGaXggYWxsb2NhdGlvbiBvZgorCWBuZXdzJy4KKworMjAwNC0wMy0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKTogRml4IGxlZnQgc2lkZSBiZWFyaW5nLgorCisyMDA0LTAzLTIwICBTdGV2ZSBIYXJ0d2VsbCAgPHNoc3BhbXNpbmtAY29tY2FzdC5uZXQ+CisKKwkqIHNyYy9jYWNoZS9mdGNtcnUuYyAoRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKTogSGFuZGxlIGEgTlVMTAorCXZhbHVlIGZvciBgc2VsZWN0aW9uJyBhcyBgc2VsZWN0IGFsbCcuCisKKzIwMDQtMDMtMTkgIFN0ZXZlIEhhcnR3ZWxsICA8c2hzcGFtc2lua0Bjb21jYXN0Lm5ldD4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9zZm50X2hlYWRlcik6IFJlamVjdCBmYWNlX2luZGV4CisJdmFsdWVzID4gMCBpZiBsb2FkaW5nIG5vbi1UVEMgZm9udHMuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKG9wZW5fZmFjZV9mcm9tX2J1ZmZlcik6IFNldCBwb3NpdGl2ZSBmYWNlX2luZGV4CisJdG8gemVybyBiZWZvcmUgY2FsbGluZyBGVF9PcGVuX0ZhY2UuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNC0wMy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBKYW1maWxlLCB2bXNfbWFrZS5jb20sIGJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS92Y3Byb2osIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaDoKKwlBZGQgTFpXIG1vZHVsZS4KKworCSogSmFtZmlsZS5pbjogUmVtb3ZlZC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBzL01JTi9GVF9NSU4vLCBzL01BWC9GVF9NQVgvLAorCXMvQUJTL0ZUX0FCUy8uICBVcGRhdGVkIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2RpY3QpLCBzcmMvcGNmL3BjZmRyaXZyLmMKKwkoUENGX0ZhY2VfSW5pdCk6IFVzZSBGVF9FUlJPUl9CQVNFLgorCisyMDA0LTAzLTA0ICBBbGJlcnQgQ2hpbiAgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KKworCUFkZCBzdXBwb3J0IGZvciBQQ0YgZm9udHMgY29tcHJlc3NlZCB3aXRoIExaVyAoZXh0ZW5zaW9uIC5wY2YuWiwKKwljcmVhdGVkIHdpdGggYGNvbXByZXNzJykuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9VU0VfTFpXKTogTmV3IG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3Lmg6IE5ldyBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfTFpXX0gpOiBOZXcgbWFjcm8gZm9yCisJZnRsencuaC4KKworCSogc3JjL2x6dy8qOiBOZXcgZmlsZXMuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYzogSW5jbHVkZSBGVF9MWldfSC4KKwkoUENGX0ZhY2VfSW5pdCk6IFRyeSBMWlcgYWxzby4KKworCSogc3JjL2d6aXAvZnRnemlwLmM6IHMvMC9HemlwX0Vycl9Pay8gd2hlcmUgYXBwcm9wcmlhdGUuCisJQmVhdXRpZnkuCisKKzIwMDQtMDMtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNoX2hpbnRfdGFibGVfaW5pdCk6IFNpbXBsaWZ5IGNvZGUuCisKKzIwMDQtMDMtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCB0byBDRkYgZHJpdmVyLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuaCAoQ0ZGX1NpemVSZWMpOiBOZXcgc3RydWN0dXJlLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9idWlsZGVyX2luaXQpOiBVcGRhdGVkLgorCShjZmZfc2xvdF9sb2FkKTogVXBkYXRlZC4KKwlbVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTXTogTG9hZCBzYml0LgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoc2JpdF9zaXplX3Jlc2V0KQorCVtUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNdOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9zaXplX2dldF9nbG9iYWxzX2Z1bmNzLCBjZmZfc2l6ZV9kb25lLCBjZmZfc2l6ZV9pbml0KTogVXBkYXRlZC4KKwkoY2ZmX3NpemVfcmVzZXQpOiBVcGRhdGVkLgorCVtUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNdOiBDYWxsIHNiaXRfc2l6ZV9yZXNldC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChMb2FkX0dseXBoKTogVXBkYXRlZC4KKwkoY2ZmX2RyaXZlcl9jbGFzcyk6IFVzZSBDRkZfU2l6ZVJlYy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA0LTAzLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMgKHBzaF9nbG9iYWxzX3NjYWxlX3dpZHRocyk6IERvbid0IHVzZQorCUZUX1JvdW5kRml4IGJ1dCBGVF9QSVhfUk9VTkQuCisJKHBzaF9ibHVlc19zbmFwX3N0ZW0pOiBEb24ndCB1c2UgYmx1ZV9zaGlmdCBidXQgYmx1ZV90aHJlc2hvbGQuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKFBTSF9TVFJPTkdfVEhSRVNIT0xEX01BWElNVU0pOiBOZXcgbWFjcm8uCisJKHBzaF9nbHlwaF9maW5kX3N0cmluZ19wb2ludHMpOiBVc2UgUFNIX1NUUk9OR19USFJFU0hPTERfTUFYSU1VTS4KKwkocHNoX2dseXBoX2ZpbmRfYmx1ZV9wb2ludHMpOiBOZXcgZnVuY3Rpb24uICBOZWVkZWQgZm9yIGZvbnRzIGxpa2UKKwlwMDUyMDAzbC5wZmIgKFVSVyBQYWxsYWRpbyBMIFJvbWFuKSB3aGljaCBoYXZlIGZsZXggY3VydmVzIGF0IHRoZQorCWJhc2UgbGluZSB3aXRoaW4gYmx1ZSB6b25lcywgYnV0IHRoZSBmbGV4IGN1cnZlcyBhcmVuJ3QgY292ZXJlZCBieQorCWhpbnRzLgorCShwc19oaW50c19hcHBseSk6IFVzZSBwc2hfZ2x5cGhfZmluZF9ibHVlX3BvaW50cy4KKworMjAwNC0wMi0yNyAgR2FycmljayBNZWVrZXIgIDxnYXJyaWNrQGRpZ2l0YWxhbmFyY2h5LmNvbT4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBGaXggY29tcGlsZXIgZmxhZ3MgZm9yCisJYC0td2l0aC1vbGQtbWFjLWZvbnRzJy4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IHMvVEFSR0VUX0FQSV9NQUNfQ0FSQk9OLyFUQVJHRVRfQVBJX01BQ19PUzgvLgorCShGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlKTogTmV3IGZ1bmN0aW9uLgorCShGVF9OZXdfRmFjZSk6IFVzZSBGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlLgorCShGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyk6IFVzZSBGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlLgorCVtfX01XRVJLU19fXTogRG9uJ3QgaW5jbHVkZSBGU3BfZm9wZW4uaC4KKworMjAwNC0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfZ2xvYmFsc19uZXcpOiBGaXggdmFsdWUgb2YKKwlgZGltLT5zdGR3LmNvdW50Jy4KKwlEb24ndCBhc3NpZ24gZGVmYXVsdCB2YWx1ZXMgdG8gYmx1ZSBzY2FsZSBhbmQgYmx1ZSBzaGlmdC4KKworMjAwNC0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDItMjUgIEdhcnJpY2sgTWVla2VyICA8Z2Fycmlja0BkaWdpdGFsYW5hcmNoeS5jb20+CisJICAgIFN0ZXZlIEhhcnR3ZWxsICA8c2hzcGFtc2lua0Bjb21jYXN0Lm5ldD4KKworCUltcHJvdmUgTWFjT1MgZm9uZCBzdXBwb3J0LiAgUHJvdmlkZSBhIG5ldyBBUEkKKwlgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMnIHNpbWlsYXIgdG8gYEZUX05ld19GYWNlJy4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyBbX19NV0VSS1NfX106IEluY2x1ZGUgRlNwX2Zwb3Blbi5oLgorCVNUUkVBTV9GSUxFIFtfX01XRVJLU19fXTogTmV3IG1hY3JvLgorCShmdF9GU3Bfc3RyZWFtX2Nsb3NlLCBmdF9GU3Bfc3RyZWFtX2lvKSBbX19NV0VSS1NfX106IE5ldyBmdW5jdGlvbnMuCisJKGZpbGVfc3BlY19mcm9tX3BhdGgpIFtfX01XRVJLU19fXTogVXBkYXRlZCAjaWYgc3RhdGVtZW50LgorCShnZXRfZmlsZV90eXBlLCBtYWtlX2x3Zm5fc3BlYyk6IFVzZSBgY29uc3QnIGZvciBhcmd1bWVudC4KKwkoaXNfZGZvbnQpIFtUQVJHRVRfQVBJX01BQ19DQVJCT05dOiBSZW1vdmVkLgorCShjb3VudF9mYWNlX3NmbnQsIGNvdW50X2ZhY2VzKTogTmV3IGZ1bmN0aW9ucy4KKwkocGFyc2VfZm9uZCk6IERvIHNvbWUgcmFuZ2UgY2hlY2tpbmcuCisJKHJlYWRfbHdmbik6IENoYW5nZSB0eXBlIG9mIHNlY29uZCBhcmd1bWVudC4KKwlObyBsb25nZXIgY2FsbCBGU3BPcGVuUmVzRmlsZS4KKwkoT3BlbkZpbGVBc1Jlc291cmNlKTogTmV3IGZ1bmN0aW9uLgorCShGVF9OZXdfRmFjZV9Gcm9tX0xXRk4pOiBVc2UgYGNvbnN0JyBmb3Igc2Vjb25kIGFyZ3VtZW50LgorCVVzZSBPcGVuRmlsZUFzUmVzb3VyY2UuCisJKEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UpOiBDaGFuZ2UgdHlwZSBvZiBzZWNvbmQgYXJndW1lbnQuCisJTm8gbG9uZ2VyIGNhbGwgRlNwT3BlblJlc0ZpbGUuCisJTG9vcCBvdmVyIGFsbCByZXNvdXJjZSBpbmRpY2VzLgorCShGVF9OZXdfRmFjZV9Gcm9tX2Rmb250KSBbVEFSR0VUX0FQSV9NQUNfQ0FSQk9OXTogUmVtb3ZlZC4KKwkoRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lKTogVXNlIGBjb25zdCcgZm9yIGZpcnN0IGFyZ3VtZW50LgorCShSZXNvdXJjZUZvcmtTaXplKTogUmVtb3ZlZC4KKwkoRlRfTmV3X0ZhY2UpOiBVcGRhdGVkIHRvIHVzZSBuZXcgZnVuY3Rpb25zLgorCShGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyk6IE5ldyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oOiBVcGRhdGVkLgorCisyMDA0LTAyLTI0ICBNYWxjb2xtIFRheWxvciAgPG10YXlsb3JAY2xlYXIubmV0Lm56PgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkKSA8RlRfR0xZUEhfRk9STUFUX09VVExJTkU+OgorCUhhbmRsZSBjYXNlIHdoZXJlIG91dGxpbmUtPm51bV92ZWRnZXMgaXMgemVybyB3aGlsZSBjb21wdXRpbmcgaGludGVkCisJbWV0cmljcy4KKworMjAwNC0wMi0yNCAgR29yZG9uIENoaWxkcyAgPGdjaGlsZHNAcXVpY2tjdXQuY29tLmF1PgorCisJKiBzcmMvY2ZmL2NmZmNtYXAuYyAoY2ZmX2NtYXBfdW5pY29kZV9pbml0KTogUHJvdmlkZSBjb3JyZWN0IHZhbHVlCisJZm9yIGBjb3VudCcuCisKKzIwMDQtMDItMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIChQU19Qcml2YXRlUmVjKTogQWRkCisJYGV4cGFuc2lvbl9mYWN0b3InLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYiAocHNoX2JsdWVzX3NjYWxlX3pvbmVzKTogRml4IGNvbXB1dGF0aW9uCisJb2YgYmx1ZXMtPm5vX292ZXJzaG9vdHMgLS0gYGJsdWVzX3NjYWxlJyBpcyBzdG9yZWQgd2l0aCBhCisJbWFnbmlmaWNhdGlvbiBvZiAxMDAwLCBhbmQgYHNjYWxlJyByZXR1cm5zIGZyYWN0aW9uYWwgcGl4ZWxzLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX09wZW5fRmFjZSk6IEluaXRpYWxpemUgYGJsdWVfc2hpZnQnLAorCWBibHVlX2Z1enonLCBgZXhwYW5zaW9uX2ZhY3RvcicsIGFuZCBgYmx1ZV9zY2FsZScgYWNjb3JkaW5nIHRvIHRoZQorCVR5cGUgMSBzcGVjaWZpY2F0aW9uLgorCisJKiBzcmMvdHlwZTEvdDF0b2tlbnMuaDogSGFuZGxlIGBFeHBhbnNpb25GYWN0b3InLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDItMjQgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCVByb3ZpZGUgZ2VuZXJpYyBhY2Nlc3MgdG8gTWFjT1MgcmVzb3VyY2UgZm9ya3MuCisKKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYywgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmg6IE5ldworCWZpbGVzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9SRk9SS19ILgorCShNYWNfUmVhZF9QT1NUX1Jlc291cmNlLCBNYWNfUmVhZF9zZm50X1Jlc291cmNlKTogUmVtb3ZlIGFyZ3VtZW50cworCWByZXNvdXJjZV9saXN0b2Zmc2V0JyBhbmQgYHJlc291cmNlX2RhdGEnIGFuZCBhZGFwdCBjb2RlCisJYWNjb3JkaW5nbHkuICBUaGVzZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24KKwlub3cuCisJQWRkIG5ldyBhcmd1bWVudCBgb2Zmc2V0cycuCisJKElzTWFjUmVzb3VyY2UpOiBVc2UgYEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8nIGFuZAorCWBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cycuCisJKGxvYWRfZmFjZV9pbl9lbWJlZGRlZF9yZm9yayk6IE5ldyBmdW5jdGlvbi4KKwkobG9hZF9tYWNfZmFjZSk6IFVzZSBsb2FkX2ZhY2VfaW5fZW1iZWRkZWRfcmZvcmsuCisJKGZ0X2lucHV0X3N0cmVhbV9uZXcpOiBSZW5hbWVkIHRvLi4uCisJKEZUX1N0cmVhbV9OZXcpOiBUaGlzLiAgVXNlIEZUX0JBU0VfREVGLiAgVXBkYXRlZCBhbGwgY2FsbGVycy4KKwkoZnRfaW5wdXRfc3RyZWFtX2ZyZWUpOiBSZW5hbWVkIHRvLi4uCisJKEZUX1N0cmVhbV9GcmVlKTogVGhpcy4gIFVzZSBGVF9CQVNFX0RFRi4gIFVwZGF0ZWQgYWxsIGNhbGxlcnMuCisKKwkqIHNyYy9iYXNlL2Z0YmFzZS5jOiBJbmNsdWRlIGZ0cmZvcmsuYy4KKworCSogc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKSwgc3JjL2Jhc2UvSmFtZmlsZTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9SRk9SS19IKToKKwlOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGRlZCBgcmZvcmsnIGFzIGEgbmV3CisJdHJhY2UgZGVmaW5pdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oOiBEZWNsYXJlIEZUX1N0cmVhbV9OZXcgYW5kCisJRlRfU3RyZWFtX0ZyZWUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSyk6IE5ldyBvcHRpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggKGZ0X3N0cnJjaHIpOiBOZXcgbWFjcm8uCisKKzIwMDQtMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaDogSW5jbHVkZSBGVF9GUkVFVFlQRV9ILgorCisyMDA0LTAyLTIzICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+CisKKwlQcm92aWRlIGEgc2ltcGxlIEFQSSB0byBjb250cm9sIEZyZWVUeXBlJ3MgdHJhY2luZyBsZXZlbHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oIChGVF9UcmFjZV9HZXRfQ291bnQsCisJRlRfVHJhY2VfR2V0X05hbWUpOiBOZXcgZGVjbGFyYXRpb25zLgorCisJKiBzcmMvYmFzZS9mdGRlYnVnLmMgKEZUX1RyYWNlX0dldF9Db3VudCwgRlRfVHJhY2VfR2V0X05hbWUpOiBOZXcKKwlmdW5jdGlvbnMuCisKKzIwMDQtMDItMjMgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jLCBzcmMvYXV0b2ZpdC9hZmhpbnRzLmgsCisJc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jLCBzcmMvdHlwZXMuaDogR3JhdmUKKwlidWdzIGhhdmUgYmVlbiBmaXhlZC4gIFRoZSBhdXRvLWZpdHRlciB3b3JrcywgZG9lc24ndCBjcmFzaCwgYnV0CisJc3RpbGwgcHJvZHVjZXMgdW5leHBlY3RlZCByZXN1bHRzLi4uCisKKzIwMDQtMDItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAoUFNIX1NUUk9OR19USFJFU0hPTEQpOiBDaGFuZ2VkIHRvIGhvbGQKKwl0aGUgYWNjZXB0ZWQgc2hpZnQgZm9yIHN0cm9uZyBwb2ludHMgaW4gZnJhY3Rpb25hbCBwaXhlbHMgKHdoaWNoCisJaXMgYSBoZXVyaXN0aWMgdmFsdWUpLgorCShwc2hfZ2x5cGhfZmluZF9zdHJvbmdfcG9pbnRzKTogQ29tcHV0ZSB0aHJlc2hvbGQgZm9yCisJcHNoX2hpbnRfdGFibGVfZmluZF9zdHJvbmdfcG9pbnRzLgorCShwc2hfaGludF90YWJsZV9maW5kX3N0cm9uZ19wb2ludCk6IEFkZCBwYXJhbWV0ZXIgdG8gcGFzcyB0aHJlc2hvbGQuCisKKzIwMDQtMDItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaHJlYy5jIChwc19tYXNrX3RhYmxlX3NldF9iaXRzKTogRG9uJ3QgY2FsbAorCXBzX21hc2tfdGFibGVfYWxsb2MgYnV0IHBzX21hc2tfdGFibGVfbGFzdC4KKwkocHNfaGludHNfdDJtYXNrKTogVXNlIGNvcnJlY3QgcG9zaXRpb24gYW5kIG51bWJlciBmb3IgdmVydGljYWwKKwlhbmQgaG9yaXpvbnRhbCBoaW50ZXIgbWFzayBiaXRzLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDItMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoRlRfR2x5cGhfU3Ryb2tlQm9yZGVyKTogRml4IGVudW0gaGFuZGxpbmcuCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfY21hcF9pbmZvKTogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDQtMDItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oOiBEb2N1bWVudCBGVF9MT0FEX1RBUkdFVF9YWFggcHJvcGVybHkuCisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoZnRfYml0bWFwX2dseXBoX2NsYXNzLAorCWZ0X291dGxpbmVfZ2x5cGhfY2xhc3MpOiBUYWcgd2l0aCBGVF9DQUxMQkFDS19UQUJMRV9ERUYuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcik6IEhhbmRsZQorCUZUX1JFTkRFUl9NT0RFX0xJR0hULgorCisyMDA0LTAyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY2FsbGJhY2sgZnVuY3Rpb25zIGluIGNhY2hlIG1vZHVsZS4KKworCSogc3JjL2NhY2hlL2Z0Y2NiYWNrLmg6IE5ldyBmaWxlIGZvciBjYWxsYmFjayBkZWNsYXJhdGlvbnMuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChmdGNfYmFzaWNfZmFtaWx5X2NvbXBhcmUsCisJZnRjX2Jhc2ljX2ZhbWlseV9pbml0LCBmdGNfYmFzaWNfZmFtaWx5X2dldF9jb3VudCwKKwlmdGNfYmFzaWNfZmFtaWx5X2xvYWRfYml0bWFwLCBmdGNfYmFzaWNfZmFtaWx5X2xvYWRfZ2x5cGgsCisJZnRjX2Jhc2ljX2dub2RlX2NvbXBhcmVfZmFjZWlkKTogVXNlIEZUX0NBTExCQUNLX0RFRi4KKwkoZnRjX2Jhc2ljX2ltYWdlX2ZhbWlseV9jbGFzcywgZnRjX2Jhc2ljX2ltYWdlX2NhY2hlX2NsYXNzLAorCWZ0Y19iYXNpY19zYml0X2ZhbWlseV9jbGFzcywgZnRjX2Jhc2ljX3NiaXRfY2FjaGVfY2xhc3MpOgorCVVzZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgYW5kIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYzogSW5jbHVkZSBmdGNjYmFjay5oLgorCShmdGNfY2FjaGVfaW5pdCwgZnRjX2NhY2hlX2RvbmUpOiBOZXcgd3JhcHBlciBmdW5jdGlvbnMgd2hpY2ggdXNlCisJRlRfTE9DQUxfREVGLgorCisJKiBzcmMvY2FjaGUvZnRjY21hcC5jOiBJbmNsdWRlIGZ0Y2NiYWNrLmguCisJKGZ0Y19jbWFwX2NhY2hlX2NsYXNzKTogVXNlIGxvY2FsIHdyYXBwZXIgZnVuY3Rpb25zLgorCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguYzogSW5jbHVkZSBmdGNjYmFjay5oLgorCShmdGNfZ25vZGVfY29tcGFyZSwgZnRjX2djYWNoZV9pbml0LCBmdGNfZ2NhY2hlX2RvbmUpOiBOZXcgd3JhcHBlcgorCWZ1bmN0aW9ucyB3aGljaCB1c2UgRlRfTE9DQUxfREVGLgorCisJKiBzcmMvY2FjaGUvZnRjaW1hZ2UuYzogSW5jbHVkZSBmdGNjYmFjay5oLgorCShmdGNfaW5vZGVfZnJlZSwgZnRjX2lub2RlX25ldywgZnRjX2lub2RlX3dlaWdodCk6IE5ldyB3cmFwcGVyCisJZnVuY3Rpb25zIHdoaWNoIHVzZSBGVF9MT0NBTF9ERUYuCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChmdGNfc2l6ZV9saXN0X2NsYXNzLCBmdGNfZmFjZV9saXN0X2NsYXNzKToKKwlVc2UgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGLgorCisJKiBzcmMvY2FjaGU7L2Z0Y3NiaXRzLmM6IEluY2x1ZGUgZnRjY2JhY2suaC4KKwkoZnRjX3Nub2RlX2ZyZWUsIGZ0Y19zbm9kZV9uZXcsIGZ0Y19zbm9kZV93ZWlnaHQsCisJZnRjX3Nub2RlX2NvbXBhcmUpOiBOZXcgd3JhcHBlciBmdW5jdGlvbnMgd2hpY2ggdXNlIEZUX0xPQ0FMX0RFRi4KKworCSogc3JjL2NhY2hlL3J1bGVzLm1rIChDQUNIRV9EUlZfSCk6IEFkZCBmdGNjYmFjay5oLgorCisyMDA0LTAyLTE3ICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaCAoRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lKTogRml4IGEgdHlwbworCShGVF9FWFBPUlRfREVGIC0+IEZUX0VYUE9SVCkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnR4Zjg2LmggKEZUX0dldF9YMTFfRm9udF9Gb3JtYXQpOiBEaXR0by4KKworMjAwNC0wMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZSk6IEZpeCB0eXBvLgorCisyMDA0LTAyLTE0ICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmM6IEluY2x1ZGUgZXJybm8uaC4KKwkoZnRfY2xvc2Vfc3RyZWFtKTogUmVuYW1lZCB0by4uLgorCShmdF9jbG9zZV9zdHJlYW1fYnlfbXVubWFwKTogVGhpcy4KKwkoZnRfY2xvc2Vfc3RyZWFtX2J5X2ZyZWUpOiBOZXcgZnVuY3Rpb24uCisJKEZUX1N0cmVhbV9PcGVuKTogVXNlIGZhbGxiYWNrIG1ldGhvZCBpZiBtbWFwIGZhaWxzLgorCVVzZSBwcm9wZXIgZnVuY3Rpb24gZm9yIGNsb3NpbmcgdGhlIHN0cmVhbS4KKworMjAwNC0wMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2RpY3QpOiBJbml0aWFsaXplIGBzdGFydF9iaW5hcnknLgorCisyMDA0LTAyLTEzICBSb2JlcnQgRXRoZXJpZGdlICA8cm9iZXJ0ZUBzdGNjLmNjLnR4LnVzPgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCksIHNyYy90eXBlMS90MW9ianMuYworCShUMV9GYWNlX0luaXQpLCBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfaW5pdCk6IEZpeCBjb21wdXRhdGlvbgorCW9mIHVuZGVybGluZV9wb3NpdGlvbiBhbmQgdW5kZXJsaW5lX3RoaWNrbmVzcy4KKworMjAwNC0wMi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZSk6IFJldHVybiBpbW1lZGlhdGVseSBpZgorCXBwZW0gdmFsdWVzIGRvbid0IGNoYW5nZS4gIFN1Z2dlc3RlZCBieSBHcmFoYW0gQXNoZXIuCisKKzIwMDQtMDItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9mYWNlX29wZW4pOiBBbHdheXMgYWxsb2NhdGUKKwlmYWNlLT5jaWRfc3RyZWFtIHNvIHRoYXQgd2UgY2FuIGRlYWxsb2NhdGUgaXQgc2FmZWx5LgorCisyMDA0LTAyLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNYWtlIHRoZSBQUyBwYXJzZXIgbW9yZSB0b2xlcmFudCB3LnIudC4gbm9uLXN0YW5kYXJkIGZvbnQgZGF0YS4gIEluCisJZ2VuZXJhbCwgYW4gZXJyb3IgaXMgb25seSByZXBvcnRlZCBpbiBjYXNlIG9mIGEgc3ludGF4IGVycm9yOyBhCisJd3JvbmcgdHlwZSBpcyBub3cgc2ltcGx5IGlnbm9yZWQgKGlmIHBvc3NpYmxlKS4gIFRvIGJlIGluZGVwZW5kZW50CisJb2YgdGhlIG9yZGVyIG9mIHZhcmlvdXMgTU0tc3BlY2lmaWMga2V5d29yZHMsIHRoZSBwYXJzZV9zaGFyZWRfZGljdAorCXJvdXRpbmUgaGFzIGJlZW4gcmVtb3ZlZCAtLSB0aGUgUFMgcGFyc2VyIGlzIG5vdyBjYXBhYmxlIHRvIHNraXAKKwl0aGlzIGRhdGEuICBJdCBubyBsb25nZXIgZmFpbHMgb24gcGFyc2luZyBlLmcuCisKKwkgIGR1cCAvV2VpZ2h0VmVjdG9yIGV4Y2ggZGVmCisKKwlTaW5jZSB0aGUgdG9rZW4gZm9sbG93aW5nIC9XZWlnaHRWZWN0b3IgaXNuJ3QgYFsnIChzdGFydGluZyBhbgorCWFycmF5KSBpdCBpcyBzaW1wbHkgaWdub3JlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oOiBEZWZpbmUgYEZUX0Vycl9JZ25vcmUnICgweEEyKSBhcyBhCisJbmV3IGludGVybmFsIGVycm9yIHZhbHVlLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2JsZW5kX2F4aXNfdHlwZXMsCisJcGFyc2VfYmxlbmRfZGVzaWduX3Bvc2l0aW9ucywgcGFyc2VfYmxlbmRfZGVzaWduX21hcCk6IFJldHVybgorCVQxX0Vycl9JZ25vcmUgaWYgbm8gcHJvcGVyIGFycmF5IGlzIGZvbGxvd2luZyB0aGUga2V5d29yZC4KKwkocGFyc2Vfd2VpZ2h0X3ZlY3Rvcik6IFVzZSBUMV9Ub1Rva2VuQXJyYXksIGluaXRpYWxpemluZyBgYmxlbmQnCisJc3RydWN0dXJlLCBpZiBuZWNlc3NhcnkuCisJUmV0dXJuIFQxX0Vycl9JZ25vcmUgaWYgbm8gcHJvcGVyIGFycmF5IGlzIGZvbGxvd2luZyB0aGUga2V5d29yZC4KKwkocGFyc2Vfc2hhcmVkX2RpY3QpOiBSZW1vdmVkLgorCShwYXJzZV9lbmNvZGluZyk6IFNldCBwYXJzZXItPnJvb3QuZXJyb3IgdG8gcmV0dXJuIFQxX0Vycl9JZ25vcmUKKwlpZiBubyByZXN1bHQgY2FuIGJlIG9idGFpbmVkLgorCUNoZWNrIGZvciBlcnJvcnMgYmVmb3JlIGFjY2Vzc2luZyBgZWxlbWVudHMnIGFycmF5LgorCSh0MV9rZXl3b3Jkcyk6IFJlbW92ZSAvc2hhcmVkZGljdC4KKwkocGFyc2VfZGljdCk6IFJlc2V0IGVycm9yIGlmIHQxX2xvYWRfa2V5d29yZCByZXR1cm5zIFQxX0Vycl9JZ25vcmUuCisJU2V0IGtleXdvcmRfZmxhZyBvbmx5IGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKwlDaGVjayBlcnJvciBjb2RlIGlmIHNraXBwaW5nIGFuIHVucmVjb2duaXplZCB0b2tlbi4KKwkoVDFfT3Blbl9GYWNlKSBbIVQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVF06IENhbGwgVDFfRG9uZV9CbGVuZAorCWlmIGJsZW5kIGNvbW1hbmRzIGhhdmVuJ3Qgc2V0IHVwIGEgcHJvcGVyIE1NIGZvbnQuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfcGFyc2VyX2xvYWRfZmllbGRfdGFibGUpOiBSZW1vdmUgc3BlY2lhbAorCWNvZGUgZm9yIHN5bnRoZXRpYyBmb250cy4KKwlSZXR1cm4gUFNhdXhfRXJyX0lnbm9yZSBpZiBubyBwcm9wZXIgdmFsdWUgaGFzIGJlZW4gZm91bmQuCisKKzIwMDQtMDItMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX2VuZGNoYXI+OiBQcmVzZXJ2ZSBnbHlwaCB3aWR0aCBiZWZvcmUgY2FsbGluZworCWNmZl9vcGVyYXRvcl9zZWFjLgorCisyMDA0LTAyLTA5ICBNYXJ0aW4gTXVza2VucyAgPG1tdXNrZW5zQGF1cmVsb24uY29tPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogSGFuZGxlIHNwZWNpYWwKKwlmaXJzdCBhcmd1bWVudCBmb3IgYGhpbnRtYXNrJyBhbmQgYGNudHJtYXNrJyBvcGVyYXRvcnMgYWxzby4KKworMjAwNC0wMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuaW46IENhbGwgQUNfU1VCU1QgZm9yIGBlbmFibGVfc2hhcmVkJywKKwlgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYycsIGFuZCBgd2wnLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluOiBNYWtlIC0tcHJlZml4IGFuZCAtLWV4ZWMtcHJlZml4CisJYWN0dWFsbHkgd29yay4KKwlSZXBvcnQgYSBwcm9wZXIgLS1ycGF0aCAob3IgLVIpIHZhbHVlIGZvciAtLWxpYnMgYXJndW1lbnQgaWYgYQorCXNoYXJlZCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDItMDcgIEtlaXRoIFBhY2thcmQgIDxrZWl0aHBAa2VpdGhwLmNvbT4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0LCBCREZfU2V0X1BpeGVsX1NpemUpOiBGaXgKKwljb21wdXRhdGlvbiBvZiB2YXJpb3VzIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG1ldHJpYyB2YWx1ZXMuCisKKwkqIHNyYy9wY2Zkcml2ci5jIChQQ0ZfU2V0X1BpeGVsX1NpemUpLCBzcmMvcGNmcmVhZCAocGNmX2xvYWRfZm9udCk6CisJRGl0dG8uCisKKzIwMDQtMDItMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHN3LCBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDQtMDItMDcgIFZpdGFsaXkgUGFzdGVybmFrICA8dl9hX3Bhc3Rlcm5ha0BtYWlsLnJ1PgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5zbG4sCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qOiBOZXcgZmlsZXMgZm9yIFZTLk5FVCAyMDAzLgorCisyMDA0LTAyLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX0NBQ0hFX0xPT0tVUF9DTVApOgorCUluaXRpYWxpemUgYG5vZGUnLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9kaWN0KTogSW5pdGlhbGl6ZSBgaGF2ZV9pbnRlZ2VyJy4KKworMjAwNC0wMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2RpY3QpOiBIYW5kbGUgYFJEJyBhbmQgYC18JyBjb21tYW5kcworCW91dHNpZGUgb2YgL1N1YnJzIG9yIC9DaGFyU3RyaW5ncy4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcworCWFkZGl0aW9uYWwgY29kZSBtYW5pcHVsYXRpbmcgdGhvc2UgdHdvIGFycmF5cyBzbyB0aGF0IEZyZWVUeXBlCisJZG9lc24ndCByZWNvZ25pemUgdGhlbSBwcm9wZXJseS4KKwkoVDFfT3Blbl9GYWNlKTogSW1wcm92ZSBhbiBlcnJvciBtZXNzYWdlLgorCisyMDA0LTAyLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfY2hhcnN0cmluZ3MpOiBFeGl0IGltbWVkaWF0ZWx5IGlmCisJdGhlcmUgYXJlIG5vIGVsZW1lbnRzIGluIC9DaGFyU3RyaW5ncy4gIFRoaXMgaXMgbmVlZGVkIGZvciBmb250cworCWxpa2UgT3B0aW1hLU9ibGlxdWUgd2hpY2ggbm90IG9ubHkgZGVmaW5lIC9DaGFyU3RyaW5ncyBidXQgYWNjZXNzIGl0CisJYWxzby4KKworMjAwNC0wMi0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC9KYW1maWxlOiBSZW1vdmluZyBgdHRjbWFwJyBmcm9tIHRoZSBsaXN0IG9mIHNvdXJjZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX0NBQ0hFX0xPT0tVUF9DTVApCisJPEZUQ19JTkxJTkU+OiBQcm92aWRlIG1hY3JvIHZlcnNpb24gd2hpY2ggZG9lc24ndCB1c2UgaW5saW5lIGNvZGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2dseXBoLmggKEZUQ19HQ0FDSEVfTE9PS1VQX0NNUCkKKwk8RlRDX0lOTElORT46IERpdHRvLgorCVVzZSBGVENfTVJVTElTVF9MT09LVVBfQ01QLgorCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNtcnUuaCAoRlRDX01SVUxJU1RfTE9PS1VQX0NNUCk6IE5ldworCW1hY3JvLgorCShGVENfTVJVTElTVF9MT09LVVApOiBVc2UgaXQuCisKKwkqIHNyYy9jYWNoZS9KYW1maWxlIChfc291cmNlcyksIHNyYy9jYWNoZS9kZXNjcmlwLm1tczogVXBkYXRlZC4KKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoRlRDX01hbmFnZXJfTG9va3VwU2l6ZSwKKwlGVENfTWFuYWdlcl9Mb29rdXBGYWNlKSA8RlRDX0lOTElORT46IFVzZSBGVENfTVJVTElTVF9MT09LVVBfQ01QLgorCSogc3JjL2NhY2hlL2Z0Y21ydS5jIChGVENfTXJ1TGlzdF9GaW5kKTogRml4IGEgYnVnIChmb3VuZCBhZnRlcgorCWhlYXZ5IHRlc3RpbmcpLgorCisJKiBKYW1maWxlOiBVcGRhdGluZyBgcmVmZG9jJyB0YXJnZXQsIGFuZCBhZGRpbmcgYGF1dG9oaW50JyB0byB0aGUKKwlsaXN0IG9mIG1vZHVsZXMgdG8gYnVpbGQuICBCb3RoIHRoZSBhdXRvaGludGVyIGFuZCBhdXRvZml0dGVyIHdpbGwKKwliZSBidWlsdCBieSBkZWZhdWx0LiAgQnV0IHdoaWNoIG9uZSB3aWxsIGJlIHVzZWQgaXMgZGV0ZXJtaW5lZCBieQorCXRoZSBjb250ZW50IG9mIGBmdG1vZHVsZS5oJy4KKworCSogc3JjL2F1dG9maXQvKjogTWFueSB1cGRhdGVzLCBidXQgdGhlIGNvZGUgaXMgc3RpbGwgYnVnZ3kuLi4KKworMjAwNC0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9vcGVyYXRvcl9zZWFjKTogRml4IG1hZ25pdHVkZSBvZgorCWFjY2VudCBvZmZzZXQuCisJVXBkYXRlIGNvZGUgc2ltaWxhcmx5IHRvIHRoZSBzZWFjIHN1cHBvcnQgZm9yIFR5cGUgMSBmb250cy4KKwkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpIDxjZmZfb3BfZW5kY2hhcj46IEZpeCBtYWduaXR1ZGUKKwlvZiBhY2NlbnQgb2Zmc2V0LgorCURvbid0IGhpbnQgZ2x5cGhzIHR3aWNlIGlmIHNlYWMgaXMgZW11bGF0ZWQuCisJPGNmZl9vcF9mbGV4PjogQXNzaWduIGNvcnJlY3QgcG9pbnQgdGFncy4KKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNC0wMS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChUMV9HZXRfUHJpdmF0ZV9EaWN0KTogVXNlIEZUX01FTV9NT1ZFLCBub3QKKwlGVF9NRU1fQ09QWSwgZm9yIGNvcHlpbmcgdGhlIHByaXZhdGUgZGljdC4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9zdWJycyk6IEFzc2lnbiBudW1iZXIgb2Ygc3VicnMgb25seQorCWluIGZpcnN0IHJ1bi4KKwkocGFyc2VfY2hhcnN0cmluZ3MpOiBQYXJzZSAvQ2hhclN0cmluZ3MgaW4gc2Vjb25kIHJ1biB3aXRob3V0CisJYXNzaWduaW5nIHZhbHVlcy4KKwkocGFyc2VfZGljdCk6IFNraXAgYWxsIC9DaGFyU3RyaW5ncyBhcnJheXMgYnV0IHRoZSBmaXJzdC4gIFdlIG5lZWQKKwl0aGlzIGZvciBub24tc3RhbmRhcmQgZm9udHMgbGlrZSBgT3B0aW1hJyB3aGljaCBoYXZlIGRpZmZlcmVudAorCW91dGxpbmVzIGRlcGVuZGluZyBvbiB0aGUgcmVzb2x1dGlvbi4gIE5vdGUgdGhhdCB0aGVyZSBpcyBubworCWd1YXJhbnRlZSB0aGF0IHdlIGdldCBmaXR0aW5nIC9TdWJycyBhbmQgL0NoYXJTdHJpbmdzIGFycmF5czsgdGhpcworCWNhbiBvbmx5IGJlIGRvbmUgYnkgYSByZWFsIFBTIGludGVycHJldGVyLgorCisyMDA0LTAxLTI5ICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLUZyZWV0eXBlQExlY2EtTWFydGkub3JnPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sOiBOZXcgZmlsZSwgZ2l2aW5nIGRldGFpbGVkCisJZXhwbGFuYXRpb25zIGFib3V0IGZvcmNpbmcgQ1IrTEYgbGluZSBlbmRpbmdzIGZvciB0aGUgVkMrKyBwcm9qZWN0CisJZmlsZXMuCisKKzIwMDQtMDEtMjIgIEdhcnJpY2sgTWVla2VyICA8Z2Fycmlja0BkaWdpdGFsYW5hcmNoeS5jb20+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfc3ViZm9udF9sb2FkKTogSW5pdGlhbGl6ZSBgZGljdCcuCisKKzIwMDQtMDEtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBzdXBwb3J0IGZvciB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEKKwlzdGFydGVkIHdpdGggYFN0YXJ0RGF0YScgaW4gQ0lELWtleWVkIFR5cGUgMSBmb250cy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKENJRF9GYWNlUmVjKTogQWRkIG5ldworCW1lbWJlcnMgYGJpbmFyeV9kYXRhJyBhbmQgYGNpZF9zdHJlYW0nLgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX3JlYWRfc3VicnMpOiBVc2UgYGZhY2UtPmNpZF9zdHJlYW0nLgorCShjaWRfaGV4X3RvX2JpbmFyeSk6IE5ldyBhdXhpbGlhcnkgZnVuY3Rpb24uCisJKGNpZF9mYWNlX29wZW4pOiBBZGQgbmV3IGFyZ3VtZW50IGBmYWNlX2luZGV4JyB0byByZXR1cm4gcXVpY2tseQorCWlmIGxlc3MgdGhhbiB6ZXJvLiAgVXBkYXRlZCBhbGwgY2FsbGVycy4KKwlDYWxsIGBjaWRfaGV4X3RvX2JpbmFyeScsIHRoZW4gb3BlbiBhbmQgYXNzaWduIG1lbW9yeSBzdHJlYW0gdG8KKwlgZmFjZS0+Y2lkX3N0cmVhbScgaWYgYHBhcnNlci0+YmluYXJ5X2xlbmd0aCcgaXMgbm9uLXplcm8uCisJKiBzcmMvY2lkL2NpZGxvYWQuaDogVXBkYXRlZC4KKworCSogc3JjL2NpZC9jaWRvYmpzLmMgKGNpZF9mYWNlX2RvbmUpOiBGcmVlIGBiaW5hcnlfZGF0YScgYW5kCisJYGNpZF9zdHJlYW0nLgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogQ2hlY2sgYXJndW1lbnRzIHRvCisJYFN0YXJ0RGF0YScgYW5kIHNldCBwYXJzZXItPmJpbmFyeV9sZW5ndGggYWNjb3JkaW5nbHkuCisJKiBzcmMvY2lkL2NpZHBhcnNlLmggKENJRF9QYXJzZXIpOiBOZXcgbWVtYmVyIGBiaW5hcnlfbGVuZ3RoJy4KKworCSogc3JjL2NpZC9jaWRnbG9hZC5jIChjaWRfbG9hZF9nbHlwaCk6IFVzZSBgZmFjZS0+Y2lkX3N0cmVhbScuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNC0wMS0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfYXRvaSk6IFJlcGxhY2VkIHdpdGguLi4KKwkoZnRfYXRvbCk6IFRoaXMuCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jOiBzL2F0b2wvZnRfYXRvbC8uCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZyLmM6IHMvZnRfYXRvaS9mdF9hdG9sLy4KKworMjAwNC0wMS0yMCAgTWFzYXRha2UgWUFNQVRPICA8amV0QGd5dmUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaDogRGVsZXRlIGR1cGxpY2F0ZWQgZGVmaW5pdGlvbiBvZgorCUZUQ19GYWNlSUQuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9jbWFwX2luZm8pOiBDYWxsIHNmbnQgbW9kdWxlJ3MgVFQgQ01hcAorCUluZm8gc2VydmljZSBmdW5jdGlvbiBpZiB0aGUgY21hcCBjb21lcyBmcm9tIHNmbnQuICBSZXR1cm4gMCBpZiB0aGUKKwljbWFwIGlzIHN5dGhlc2l6ZWQgaW4gY2ZmIG1vZHVsZS4KKworMjAwNC0wMS0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoZnRjX3NpemVfbm9kZV9jb21wYXJlKTogQ2FsbAorCUZUX0FjdGl2YXRlX1NpemUuCisKKzIwMDQtMDEtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCk6IFNraXAgZXhhY3RseSBvbmUKKwlDUiwgTEYsIG9yIENSL0xGIGFmdGVyIGBlZXhlYycuCisKKzIwMDQtMDEtMTggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2Vfc2V0X3NiaXRfc3RyaWtlKTogUmVtb3ZlIGNvbXBpbGVyCisJd2FybmluZy4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyLyo6IFVwZGF0aW5nIGJlYXV0aWZpZXIgdG9vbC4KKworMjAwNC0wMS0xNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKGZ0X29yaWVudGF0aW9uX2V4dHJlbXVtX2NvbXB1dGUpOiBGaXgKKwlpbmZpbml0ZSBsb29wIGJ1Zy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oOiBJbmNsdWRlIEZUX0dMWVBIX0guCisJKEZUX1N0cm9rZXJfUmV3aW5kLCBGVF9HbHlwaF9TdHJva2UsIEZUX0dseXBoX1N0cm9rZUJvcmRlcik6IE5ldworCWRlY2xhcmF0aW9ucy4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0guCisJKEZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlcik6IEludmVyc2UgcmVzdWx0LgorCShGVF9TdHJva2VyX1Jld2luZCwgRlRfR2x5cGhfU3Ryb2tlLCBGVF9HbHlwaFN0cm9rZUJvcmRlcik6IE5ldworCWZ1bmN0aW9ucy4KKwkoRlRfU3Ryb2tlcl9FbmRTdWJQYXRoKTogQ2xvc2UgcGF0aCBpZiBuZWVkZWQuCisJKEZUX1N0cm9rZXJfU2V0LCBGVF9TdHJva2VyX1BhcnNlT3V0bGluZSk6IFVzZSBGVF9TdHJva2VyX1Jld2luZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNtYW5hZy5oIChGVENfU2NhbGVyUmVjLAorCUZUQ19NYW5hZ2VyX0xvb2t1cFNpemUpOiBNb3ZlZCB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmggKEZUQ19TY2FsZXJSZWMsCisJRlRDX01hbmFnZXJfTG9va3VwU2l6ZSk6IEhlcmUuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9kb2NiZWF1dHkucHk6IE5ldyBmaWxlIHRvIGJlYXV0aWZ5IHRoZQorCWRvY3VtZW50YXRpb24gY29tbWVudHMgKGUuZy4sIHRvIGNvbnZlcnQgdGhlbSB0byBzaW5nbGUgYmxvY2sgYm9yZGVyCisJbW9kZSkuCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvZG9jbWFrZXIucHkgKGZpbGVfZXhpc3RzLCBtYWtlX2ZpbGVfbGlzdCk6CisJTW92ZWQgdG8uLi4KKwkqIHNyYy90b29scy9kb2NtYWtlci91dGlscy5weSAoZmlsZV9leGlzdHMsIG1ha2VfZmlsZV9saXN0KTogSGVyZS4KKworMjAwNC0wMS0xNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggKEZUX0FSUkFZX0NPUFksCisJRlRfQVJSQVlfTU9WRSk6IE5ldyBtYWNyb3MgdG8gbWFrZSBjb3B5aW5nIGFycmF5cyBlYXNpZXIuCisJVXBkYXRlZCBhbGwgcmVsZXZhbnQgY29kZSB0byB1c2UgdGhlbS4KKworMjAwNC0wMS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IExvYWQgY2hhcnN0cmluZ3NfaW5kZXggZWFybGllci4KKwlVc2UgbnVtYmVyIG9mIGNoYXJzdHJpbmdzIGFzIGFyZ3VtZW50IHRvIENGRl9Mb2FkX0ZEX1NlbGVjdCAoYXMKKwlkb2N1bWVudGVkIGluIHRoZSBDRkYgc3BlY3MpLgorCisyMDA0LTAxLTEzICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzaF9nbHlwaF9pbml0KTogTW92ZSBhc3NpZ25tZW50IG9mCisJYGdseXBoLT5tZW1vcnknIHVwIHRvIGZyZWUgYXJyYXlzIHByb3Blcmx5IGluIGNhc2Ugb2YgZmFpbHVyZS4KKworMjAwNC0wMS0xMCAgTWFzYXRha2UgWUFNQVRPICA8amV0QGd5dmUub3JnPgorCisJTWFrZSBgRlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQnIHdvcmsgd2l0aCBDRkYuICBCdWcgcmVwb3J0ZWQgYnkKKwlTdGV2ZSBIYXJ0d2VsbCA8c2hzcGFtc2lua0Bjb21jYXN0Lm5ldD4uCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSC4KKwkoY2ZmX3NlcnZpY2VzKTogQWRkZWQgYW4gZW50cnkgZm9yIEZUX1NFUlZJQ0VfSURfVFRfQ01BUC4KKwkoY2ZmX2dldF9jbWFwX2luZm8pOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8pIE5ldyBlbnRyeSBmb3IgY2ZmX3NlcnZpY2VzLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmM6IEV4aXQgbG9vcCBhZnRlciBhIGZvcm1hdCBtYXRjaCBoYXMgYmVlbiBmb3VuZC4KKwlTdWdnZXN0ZWQgYnkgU3RldmUgSGFydHdlbGwgPHNoc3BhbXNpbmtAY29tY2FzdC5uZXQ+LgorCisyMDA0LTAxLTAzICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChkZXN0cm95X2NoYXJtYXBzKTogTmV3IGZ1bmN0aW9uLgorCShkZXN0cm95X2ZhY2UsIG9wZW5fZmFjZSk6IFVzZSBgZGVzdHJveV9jaGFybWFwcycuCisKKzIwMDQtMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA0LTAxLTAxICBNaWNoYWVsIEphbnNzb24gIDxtamFuQGVtMi1zb2x1dGlvbnMuY29tPgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9TaXplX1NldF9QaXhlbHMpOiBGaXggc2lnbiBvZgorCXNpemUtPm1ldHJpY3MuZGVzY2VuZGVyLgorCisyMDAzLTEyLTMxICBXb2xmZ2FuZyBEb21yw7ZzZSAgPHBvcnRob3MuZG9tcm9lc2VAaGFyei5kZT4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwlbRlRfREVCVUdfTEVWRUxfVFJBQ0VdOiBVc2UgYCVsZCcgaW4gRlRfVFJBQ0U0LgorCTxjZmZfb3BfZmxleDE+OiBDaGFuZ2UgdHlwZSBvZiBkeCBhbmQgZHkgdG8gRlRfUG9zIGFuZCByZW1vdmUKKwljYXN0IGZvciBhY2Nlc3NpbmcgYXJndW1lbnRzLgorCisyMDAzLTEyLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogUmV2ZXJ0IHByZXZpb3VzCisJY2hhbmdlLiAgSXQncyBub3QgbmVjZXNzYXJ5LgorCisyMDAzLTEyLTI5ICBTbWl0aCBDaGFybGVzICA8c21pdGguY2hhcmxlc0BmcmVlLmZyPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IEhhbmRsZSBgcmVwZWF0ZWQKKwlmbGFncyBzZXQnIGNvcnJlY3RseS4KKworMjAwMy0xMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IEZpeCBtZW1vcnkgbGVhayBieSBkZWFsbG9jYXRpbmcKKwlgZnVsbCcgYW5kIGB3ZWlnaHQnIHByb3Blcmx5LgorCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX2hpbnRtYXNrPiBbRlRfREVCVUdfTEVWRUxfVFJBQ0VdOiBVc2UgYDB4JyBhcyBwcmVmaXggZm9yCisJdHJhY2luZyBvdXRwdXQuCisKKzIwMDMtMTItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFRUX1NldF9TQml0X1N0cmlrZV9GdW5jKToKKwlVc2UgRlRfVUludCBmb3IgcHBlbSB2YWx1ZXMuCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9zZXRfc2JpdF9zdHJpa2UpOiBVc2UgRlRfVUludCBmb3IKKwlwcGVtIHZhbHVlcy4KKwkqIHNyYy9zZm50L3R0c2JpdC5oOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X1BpeGVsX1NpemVzKTogRG9uJ3QgYWxsb3cgcHBlbSB2YWx1ZXMKKwlsYXJnZXIgdGhhbiAtMEZGRkYuCisKKzIwMDMtMTItMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYywgc3JjL2Jhc2UvZnRnbG9hZHIuYzogSW5sdWRlCisJRlRfSU5URVJOQUxfT0JKRUNUU19ILgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlciwKKwlGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIpOiBzL29yL28vIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoCisJQysrIGNvbXBpbGVycy4KKworCSogc3JjL2NhY2hlL2Z0Y21ydS5jLCBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21ydS5oOgorCXMvc2VsZWN0L3NlbGVjdGlvbi8gdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBzL3NlbGVjdC9mdHNlbGVjdC8gdG8gYXZvaWQgcG90ZW50aWFsCisJY29tcGlsZXIgd2FybmluZy4KKworMjAwMy0xMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoRlRDX1NOb2RlX1dlaWdodCk6CisJcy9GVENfU0JJVF9JVEVNX1BFUl9OT0RFL0ZUQ19TQklUX0lURU1TX1BFUl9OT0RFLy4KKworMjAwMy0xMi0yNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBGaXhlZCBjb21waWxhdGlvbiBwcm9ibGVtcyBpbiB0aGUgY2FjaGUgc3ViLXN5c3RlbS4KKworCSogUGFydGlhbCB1cGRhdGVzIHRvIHNyYy9hdXRvZml0LgorCisJKiBKYW1maWxlIChGVDJfQ09NUE9ORU5UUyk6IEFkZCBhdXRvZml0IG1vZHVsZS4KKworMjAwMy0xMi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUpOiBIYW5kbGUKKwlDSUQta2V5ZWQgZm9udHMuCisKKzIwMDMtMTItMjMgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfUEFEX0ZMT09SLCBGVF9QQURfUk9VTkQsCisJRlRfUEFEX0NFSUwsIEZUX1BJWF9GTE9PUiwgRlRfUElYX1JPVU5ELCBGVF9DRUlMKTogTmV3IG1hY3Jvcy4gIFRoZXkKKwlhcmUgdXNlZCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyB3aXRoIHZlcnkgcGVkYW50aWMgY29tcGlsZXJzLgorCU5vdGUgdGhhdCBgKHgpICYgLTY0JyBjYXVzZXMgYSB3YXJuaW5nIGlmICh4KSBpcyBub3Qgc2lnbmVkLiAgVXNlCisJYCh4KSAmIH42MycgaW5zdGVhZCEKKwlVcGRhdGVkIGFsbCByZWxhdGVkIGNvZGUuCisKKwlBZGQgc3VwcG9ydCBmb3IgZXh0cmFjdGlvbiBvZiBgaW5zaWRlJyBhbmQgYG91dHNpZGUnIGJvcmRlcnMuCisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKEZUX1N0cm9rZXJCb3JkZXIpOiBOZXcgZW51bWVyYXRpb24uCisJKEZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyLCBGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIsCisJRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMsIEZUX1N0cm9rZXJfRXhwb3J0Qm9yZGVyKTogTmV3IGZ1bmN0aW9ucy4KKwkoRlRfU3Ryb2tlQm9yZGVyUmVjKTogTmV3IGJvb2xlYW4gbWVtYmVyIGB2YWxpZCcuCisJKGZ0X3N0cm9rZV9ib3JkZXJfZ2V0X2NvdW50cyk6IFVwZGF0ZWQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmg6IFVwZGF0ZWQuCisKKzIwMDMtMTItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oIChGVF9XaW5GTlRfSURfKik6IE5ldyBkZWZpbml0aW9ucworCXRvIGRlc2NyaWJlIHRoZSBgY2hhcnNldCcgZmllbGQgaW4gRlRfV2luRk5UX0hlYWRlclJlYy4KKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCk6IFNldCBlbmNvZGluZyB0bworCUZUX0VOQ09ESU5HX05PTkUgZXhjZXB0IGZvciBGVF9XaW5GTlRfSURfTUFDLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0VuY29kaW5nKTogSW1wcm92ZSBjb21tZW50LAorCWJhc2VkIG9uIHdvcmsgYnkgRGV0bGVmIFfDvHJrbmVyIDxUZXRpU29mdEBhcGcubGFobi5kZT4uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMy0xMi0yMiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21hbmFnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNjYWNoZS5oLAorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjbWFuYWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21ydS5oIChhZGRlZCksCisJaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGxydS5oIChyZW1vdmVkKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y3NiaXRzLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNpbWFnZS5oLAorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjZ2x5cGguaCwKKwlzcmMvY2FjaGUvZnRjbXJ1LmMsCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMsCisJc3JjL2NhY2hlL2Z0Y2NhY2hlLmMsCisJc3JjL2NhY2hlL2Z0Y2dseXBoLmMsCisJc3JjL2NhY2hlL2Z0Y2ltYWdlLmMsCisJc3JjL2NhY2hlL2Z0Y3NiaXRzLmMsCisJc3JjL2NhY2hlL2Z0Y2NtYXAuYywKKwlzcmMvY2FjaGUvZnRjYmFzaWMuYyAoYWRkZWQpLAorCXNyYy9jYWNoZS9mdGNscnUuYyAocmVtb3ZlZCk6CisKKwkgICpDb21wbGV0ZSogcmV3cml0ZSBvZiB0aGUgY2FjaGUgc3ViLXN5c3RlbSB0byBgc29sdmUnIHRoZQorCSAgZm9sbG93aW5nIHBvaW50czoKKworCSAgICAtIGFsbCBwdWJsaWMgQVBJcyBoYXZlIGJlZW4gbW92ZWQgdG8gRlRfQ0FDSEVfSCwgZXZlcnl0aGluZworCSAgICAgIHVuZGVyIGBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlJyBpcyBvbmx5IG5lZWRlZCBieSBjbGllbnQKKwkgICAgICBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IHRvIGltcGxlbWVudCB0aGVpciBvd24gY2FjaGVzCisKKwkgICAgLSBhIG5ldyBmdW5jdGlvbiBuYW1lZCBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQgdG8gZGVhbAorCSAgICAgIHdpdGggdGhlIHVuaW5zdGFsbGF0aW9uIG9mIEZhY2VJRHMKKworCSAgICAtIHRoZSBpbWFnZSBhbmQgc2JpdCBjYWNoZSBhcmUgbm93IGFic3RyYWN0IGNsYXNzZXMsIHRoYXQKKwkgICAgICBjYW4gYmUgZXh0ZW5kZWQgbXVjaCBtb3JlIGVhc2lseSBieSBjbGllbnQgYXBwbGljYXRpb25zCisKKwkgICAgLSBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gY2VydGFpbiBhcmVhcy4gIEZ1cnRoZXIgb3B0aW1pemF0aW9ucworCSAgICAgIHRvIGNvbWUgc2hvcnRseSBhbnl3YXkuLi4KKworCSAgICAtIHRoZSBGVENfQ01hcENhY2hlX0xvb2t1cCBmdW5jdGlvbiBoYXMgY2hhbmdlZCBpdHMgc2lnbmF0dXJlLAorCSAgICAgIGNoYXJtYXBzIGNhbiBub3cgb25seSBiZSByZXRyaWV2ZWQgYnkgaW5kZXgKKworCSAgICAtIEZUQ19NYW5hZ2VyX0xvb2t1cF9GYWNlID0+IEZUQ19NYW5hZ2VyX0xvb2t1cEZhY2UKKwkgICAgICBGVENfTWFuYWdlcl9Mb29rdXBfU2l6ZSA9PiBGVENfTWFuYWdlcl9Mb29rdXBTaXplIChzdGlsbCBpbgorCSAgICAgIHByaXZhdGUgaGVhZGVyIGZvciB0aGUgbW9tZW50KQorCisyMDAzLTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZGljdCk6IFN0b3AgcGFyc2luZyBpZiBgZWV4ZWMnIGtleXdvcmQKKwlpcyBlbmNvdW50ZXJlZC4KKworMjAwMy0xMi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9NQVhfQ0lEX0ZPTlRTKTogSW5jcmVhc2UgdG8gMzIuICBGb3IKKwlleGFtcGxlLCB0aGUgSmFwYW5lc2UgSGlyYWdpbm8gZm9udCBhbHJlYWR5IGNvbnRhaW5zIDE1IHN1YmZvbnRzLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IERlYWxsb2NhdGUgYHNpZHMnIGFycmF5IGZvcgorCUNJRC1rZXllZCBmb250cy4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogRGVmaW5lIEZUX0RFQlVHX01FTU9SWS4KKworMjAwMy0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmggKFRUX0FET0JFX0lEX0xBVElOXzEpOiBOZXcgbWFjcm8uCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFVzZSBUVF9BRE9CRV9JRCogdmFsdWVzLgorCisyMDAzLTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX0ZvbnRSZWNEaWN0UmVjKTogQ2hhbmdlIHR5cGUgb2YKKwlgY2lkX2NvdW50JyB0byBgRlRfVUxvbmcnLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9zbG90X2xvYWQpOiBUYWtlIGNhcmUgb2YgZW1wdHkgYGNpZHMnCisJYXJyYXkuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfY2hhcnNldF9kb25lKTogRnJlZSBgY2lkcycgYXJyYXkuCisJKGNmZl9mb250X2xvYWQpOiBDcmVhdGUgY2lkcyBhcnJheSBvbmx5IGZvciBDSUQta2V5ZWQgZm9udHMgd2hpY2gKKwlhcmUgc3Vic2V0dGVkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IENoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YKKwl0aGUgUFNOYW1lcyBtb2R1bGVzIGZvciBub24tcHVyZSBDRkZzIGFsc28uCisJU2V0IEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyBmb3IgYSBub24tcHVyZSBDRkYgYWxzbyBpZiBpdCBpc24ndAorCUNJRC1rZXllZC4KKworCSogc3JjL2NmZi9ydWxlcy5tayAoQ0ZGX0RSVl9IKTogQWRkIGNmZnR5cGVzLmguCisKKzIwMDMtMTItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogRG9uJ3Qgc2V0CisJRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIGlmIHRoZSBmb250IGNvbnRhaW5zIGEgdmVyc2lvbiAzLjAgYHBvc3QnCisJdGFibGUuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMy0xMi0xNyAgTWFzYXRha2UgWUFNQVRPICA8amV0QGd5dmUub3JnPgorCisJQWRkIG5ldyBmdW5jdGlvbiBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCB0byBleHRyYWN0IHRoZSBsYW5ndWFnZSBJRAorCWZvciBUcnVlVHlwZS9zZm50IGZvbnRzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg6IE5ldyBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfU0VSVklDRV9UVF9DTUFQX0gpOiBBZGQKKwlzdnR0Y21hcC5oLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jOiBJbmNsdWRlIHR0Y21hcDAuaC4KKwkodHRfc2VydmljZV9nZXRfY21hcF9pbmZvKTogTmV3IHNlcnZpY2UuCisJKHNmbnRfc2VydmljZXMpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2NtYXAqX2dldF9pbmZvKTogTmV3IGZ1bmN0aW9ucy4KKwkodHRfY21hcCpfY2xhc3NfcmVjKTogQWRkIHR0X2NtYXAqX2dldF9pbmZvIG1lbWJlcnMuCisJKHR0X2dldF9jbWFwX2luZm8pOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvc2ZudC90dGNtYXAwLmg6IEluY2x1ZGUgRlRfU0VSVklDRV9UVF9DTUFQX0guCisJKFRUX0NNYXBfQ2xhc3NSZWMpOiBOZXcgZmllbGQgYGdldF9jbWFwX2luZm8nLgorCSh0dF9nZXRfY21hcF9pbmZvKTogTmV3IGRlY2xhcmF0aW9uLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSC4KKwkoRlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQpOiBOZXcgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmggKEZUX0dldF9DTWFwX0xhbmd1YWdlX0lEKTogTmV3CisJZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKKzIwMDMtMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMsIHNyYy9zZm50L3R0Y21hcC5oOiBSZW1vdmVkLiAgT2Jzb2xldGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIChTRk5UX0ludGVyZmFjZSk6IFJlbW92ZQorCW9ic29sZXRlIGZpZWxkcyBgbG9hZF9jaGFybWFwJyBhbmQgYGZyZWVfY2hhcm1hcCcuCisJKFRUX0NoYXJNYXBfTG9hZF9GdW5jLCBUVF9DaGFyTWFwX0ZyZWVfRnVuYyk6IFJlbW92ZWQuCisJKiBzcmMvc2ZudC9zZm50LmM6IERvbid0IGluY2x1ZGUgdHRjbWFwLmMuCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogRG9uJ3QgaW5jbHVkZSB0dGNtYXAuYy4KKwkqIHNyYy9zZm50L3R0bG9hZC5jOiBEb24ndCBpbmNsdWRlIHR0Y21hcC5oLgorCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogRG9uJ3QgaW5jbHVkZSB0dGNtYXAuaC4KKwkoc2ZudF9pbnRlcmZhY2UpOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfVGFibGVEaXJSZWMsCisJVFRfQ01hcERpclJlYywgVFRfQ01hcERpckVudHJ5UmVjLCBUVF9DTWFwMCwgVFRfQ01hcDJTdWJIZWFkZXJSZWMsCisJVFRfQ01hcDJSZWMsIFRUX0NNYXA0U2VnbWVudCwgVFRfQ01hcDRSZWMsIFRUX0NNYXA2LAorCVRUX0NNYXBHcm91cFJlYywgVFRfQ01hcDhfMTJSZWMsIFRUX0NNYXAxMFJlYywgVFRfQ2hhck1hcF9GdW5jLAorCVRUX0NoYXJOZXh0X0Z1bmMsIFRUX0NNYXBUYWJsZVJlYywgVFRfQ2hhck1hcFJlYyk6IFJlbW92ZWQuCisJT2Jzb2xldGUuCisJKiBzcmMvY2ZmL2NmZm9ianMuaCAoQ0ZGX0NoYXJNYXBSZWMpOiBSZW1vdmVkLiAgT2Jzb2xldGUuCisKKzIwMDMtMTItMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDAzLTEyLTE1ICBXb2xmZ2FuZyBEb21yw7ZzZSAgPHBvcnRob3MuZG9tcm9lc2VAaGFyei5kZT4KKworCSogYnVpbGRzL2F0YXJpLyo6IE5ldyBkaXJlY3RvcnkgZm9yIGJ1aWxkaW5nIEZyZWVUeXBlIDIgb24gQXRhcmkKKwl3aXRoIHRoZSBQdXJlQyBjb21waWxlci4KKworMjAwMy0xMi0xMiAgV29sZmdhbmcgRG9tcsO2c2UgIDxwb3J0aG9zLmRvbXJvZXNlQGhhcnouZGU+CisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpOiBBZGQKKwljYXN0LgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHNfaGFzX2dseXBoX25hbWVzKTogQXNzdXJlIHRoYXQgcmV0dXJuCisJdmFsdWUgaXMgZWl0aGVyIDAgb3IgMS4KKworMjAwMy0xMi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfZ2x5cGhfbmFtZSk6IEltcHJvdmUgZXJyb3IgbWVzc2FnZS4KKwkoY2ZmX2dldF9uYW1lX2luZGV4KTogUmV0dXJuIGlmIG5vIFBTTmFtZXMgc2VydmljZSBpcyBhdmFpbGFibGUuCisJKGNmZl9wc19oYXNfZ2x5cGhfbmFtZXMpOiBIYW5kbGUgQ0lELWtleWVkIGZvbnRzIGNvcnJlY3RseS4KKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX0NoYXJzZXRSZWMpOiBOZXcgZmllbGQgYGNpZHMnLCB1c2VkIGZvcgorCUNJRC1rZXllZCBmb250cy4gIFRoaXMgaXMgdGhlIGludmVyc2UgbWFwcGluZyBvZiBgc2lkcycuCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfbG9hZCk6IE5ldyBhcmd1bWVudCBgaW52ZXJ0Jy4KKwlJbml0aWFsaXplIGNoYXJzZXQtPmNpZHMgaWYgYGludmVydCcgaXMgc2V0LgorCShjZmZfZm9udF9sb2FkKTogSW4gY2FsbCB0byBjZmZfY2hhcnNldF9sb2FkLCBzZXQgYGludmVydCcgdG8gdHJ1ZQorCWZvciBDSUQta2V5ZWQgZm9udHMuCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9zbG90X2xvYWQpOiBIYW5kbGUgZ2x5cGggaW5kZXggYXMgQ0lECisJYW5kIG1hcCBpdCB0byB0aGUgcmVhbCBnbHlwaCBpbmRleC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDAzLTEyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogRG9uJ3Qgc2V0CisJRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIGZvciBDSUQta2V5ZWQgZm9udHMuCisJRG9uJ3QgY29uc3RydWN0IGEgY21hcCBmb3IgQ0lELWtleWVkIGZvbnRzLgorCisyMDAzLTEyLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlVc2UgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgU0lEIHZhbHVlIDB4RkZGRiB0byBpbmRpY2F0ZSB0aGF0CisJYSBkaWN0aW9uYXJ5IGVsZW1lbnQgaXMgbWlzc2luZy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBJbml0aWFsaXplIGFsbCBmaWVsZHMKKwl3aGljaCBob2xkIFNJRHMgdG8gMHhGRkZGLgorCShjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcpOiBIYW5kbGUgU0lEIHZhbHVlIDB4RkZGRi4KKwlIYW5kbGUgY2FzZSB3aGVyZSBgcHNuYW1lcycgaXMgemVyby4KKwkoY2ZmX2ZvbnRfbG9hZCk6IFVwZGF0ZWQuCisJRG9uJ3QgbG9hZCBlbmNvZGluZyBmb3IgQ0lELWtleWVkIENGRnMuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogVXBkYXRlZC4KKwlEb24ndCBjaGVjayBmb3IgUFNOYW1lcyBtb2R1bGUgaWYgZm9udCBpcyBDSUQta2V5ZWQuCisJQ29tcHV0ZSBzdHlsZSBuYW1lIHByb3Blcmx5ICh1c2luZyB0aGUgc2FtZSBhbGdvcml0aG0gYXMgaW4gdGhlCisJQ0lEIGRyaXZlcikuCisJRml4IGNvbXB1dGF0aW9uIG9mIHN0eWxlIGZsYWdzLgorCisJKiBzcmMvY2ZmL2NmZnRva2VuLmg6IENvbW1lbnQgb3V0IGhhbmRsaW5nIG9mIGJhc2VfZm9udF9uYW1lLgorCVJlbmFtZSBgcG9zdHNjcmlwdCcgZmllbGQgdG8gYGVtYmVkZGVkX3Bvc3RzY3JpcHQnCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9Gb250UmVjRGljdFJlYyk6IFJlbW92ZSBgYmFzZV9mb250X25hbWUnCisJYW5kIGBwb3N0c2NyaXB0Jy4KKworMjAwMy0xMi0xMCAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2dldF9jaGFyc2V0X2lkKTogTmV3IGZ1bmN0aW9uIChhIGNsb25lCisJb2YgdGhlIHNpbWlsYXIgQkRGIGZ1bmN0aW9uKS4KKwkocGNmX3NlcnZpY2VfYmRmKTogVXNlIGl0LgorCisyMDAzLTEyLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFNldCBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMKKwlvbmx5IGlmIGEgYHBvc3QnIHRhYmxlIGlzIHByZXNlbnQuCisKKzIwMDMtMTItMDkgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAobG9hZF9tYWNfZmFjZSk6IFJlY2VudCB2ZXJzaW9ucyBvZiBMaW51eAorCXN1cHBvcnQgTWFjJ3MgSEZTKyBmaWxlIHN5c3RlbSwgdGh1cyBlbmFibGUgY29kZSB0byByZWFkIC9yc3JjIG9uCisJbm9uLU1hY2ludG9zaCBwbGF0Zm9ybXMgYWxzby4KKworMjAwMy0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFBTX1RhYmxlUmVjKTogQ2hhbmdlIHR5cGUKKwlvZiBgbGVuZ3RocycgdG8gRlRfUHRyRGlzdC4KKwkoVDFfRGVjb2RlclJlYyk6IENoYW5nZSB0eXBlIG9mIGBzdWJyc19sZW4nIHRvIEZUX1B0ckRpc3QuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCAoVDFfRm9udFJlYyk6IENoYW5nZSB0eXBlCisJb2YgYHN1YnJzX2xlbicgYW5kIGBjaGFyc3RyaW5nc19sZW4nIHRvIEZUX1B0ckRpc3QuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChNYWNfUmVhZF9QT1NUX1Jlc291cmNlKTogUmVwbGFjZSBganVuaycKKwl2YXJpYWJsZSB3aXRoIGJldHRlciBzb2x1dGlvbi4KKwkoSXNNYWNSZXNvdXJjZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG1hcF9sZW4nLgorCVJlcGxhY2UgYGp1bmsnIHZhcmlhYmxlIHdpdGggYmV0dGVyIHNvbHV0aW9uLgorCShGVF9PcGVuX0ZhY2UpIFshRlRfTUFDSU5UT1NIXTogQWRkIGNvbmRpdGlvbmFsCisJRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMuCisKKzIwMDMtMTItMDggIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9oaW50X2VkZ2VzLAorCWFoX2hpbnRlcl9hbGlnbl9zdHJvbmdfcG9pbnRzKTogQWRkIHNvbWUgY2FzdHMuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3JpZW50YXRpb25FeHRyZW11bVJlYyk6IENoYW5nZSB0eXBlCisJb2YgYHBvcycgdG8gRlRfTG9uZy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UsCisJTWFjX1JlYWRfc2ZudF9SZXNvdXJjZSk6IENoYW5nZSB0eXBlIG9mIGBsZW4nIHRvIEZUX0xvbmcuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX2RpY3QpOiBBZGQgY2FzdCBmb3IgYG5fa2V5d29yZHMnLgorCisyMDAzLTEyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvcmFzdGVyLnR4dDogTmV3IGZpbGUsIHRha2VuIGZyb20gRnJlZVR5cGUgMSBhbmQgY29tcGxldGVseQorCXJldmlzZWQuCisKKzIwMDMtMTItMDQgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKEdldF9JbnRlcmZhY2UpOiBSZW1vdmUgRlRfVU5VU0VEIGZvcgorCXQxX2ludGVyZmFjZS4gIHQxX2ludGVyZmFjZSBpcyB1c2VkLgorCisyMDAzLTExLTI3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9wZnIvcGZyZHJpdnIuYyAocGZyX2dldF9tZXRyaWNzKTogUmV2ZXJ0IGluY29ycmVjdCBjaGFuZ2Ugb2YKKwkyMDAzLTExLTIzOiBGb3IgUEZSIGZvbnRzLCBtZXRyaWNzLT54X3NjYWxlIGFuZCBtZXRyaWNzLT55X3NjYWxlIGFyZQorCXRoZSBzY2FsaW5nIHZhbHVlcyBmb3Igb3V0bGluZSB1bml0cywgbm90IGZvciBtZXRyaWMgdW5pdHMuCisKKzIwMDMtMTEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMsIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKKwkoRlRfTXVsRGl2X05vX1JvdW5kKTogU3Vycm91bmQgY29kZSB3aXRoIGAjaWZkZWYKKwlUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIC4uLiAjZW5kaWYnLgorCisyMDAzLTExLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxEaXZfTm9fUm91bmQpOiBOZXcgZnVuY3Rpb24gKDMyIGFuZAorCTY0IGJpdCB2ZXJzaW9uKS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9NVUxESVZfTk9fUk9VTkQpOiBOZXcgbWFjcm8uCisJKFRUX0lOVDY0KTogUmVtb3ZlZC4KKwkoRE9fRElWKTogVXNlIFRUX01VTERJVl9OT19ST1VORC4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfZ2V0X21ldHJpY3MpOiBEaXJlY3RseSB1c2UKKwltZXRyaWNzLT54X3NjYWxlIGFuZCBtZXRyaWNzLT55X3NjYWxlLgorCisyMDAzLTExLTIyICBSb2dpZXIgdmFuIERhbGVuICA8Ui5DLnZhbi5EYWxlbkB1bWFpbC5sZWlkZW51bml2Lm5sPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoQ1VSX0Z1bmNfbW92ZV9vcmlnKTogTmV3IG1hY3JvLgorCShEaXJlY3RfTW92ZV9PcmlnLCBEaXJlY3RfTW92ZV9PcmlnX1gsIERpcmVjdF9Nb3ZlX09yaWdfWSk6IE5ldworCWZ1bmN0aW9ucy4gIFNpbWlsYXIgdG8gRGlyZWN0X01vdmUsIERpcmVjdF9Nb3ZlX1gsIGFuZAorCURpcmVjdF9Nb3ZlX1kgYnV0IHdpdGhvdXQgdG91Y2hpbmcuCisJKENvbXB1dGVfRnVuY3MpOiBVc2UgbmV3IGZ1bmN0aW9ucy4KKworCShSb3VuZF9Ob25lLCBSb3VuZF9Ub19HcmlkLCBSb3VuZF9Ub19IYWxmX0dyaWQsIFJvdW5kX0Rvd25fVG9fR3JpZCwKKwlSb3VuZF9VcF9Ub19HcmlkLCBSb3VuZF9Ub19Eb3VibGVfR3JpZCwgUm91bmRfU3VwZXIsCisJUm91bmRfU3VwZXJfNDUpOiBGaXggcm91bmRpbmcgb2YgdmFsdWUgemVyby4KKworCShET19ESVYpOiBEb24ndCB1c2UgVFRfTVVMRElWLgorCisJKEluc19TSEMpOiBUaGlzIGluc3RydWN0aW9uIGFjdHVhbGx5IHRvdWNoZXMgdGhlIHBvaW50cy4KKwkoSW5zX01TSVJQKTogRml4IHVuZG9jdW1lbnRlZCBiZWhhdmlvdXIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9FeGVjQ29udGV4dFJlYyk6IFVwZGF0ZWQuCisKKzIwMDMtMTEtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9WRVJTSU9OLkRMTCwgZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZSk6IE1ha2UgbWV0cmljcy0+eF9zY2FsZSBhbmQKKwltZXRyaWNzLT55X3NjYWxlIHJlYWxseSBwcmVjaXNlLgorCisJKEZUX0xvYWRfR2x5cGgpOiBVcGRhdGUgY29tcHV0YXRpb24gb2YgbGluZWFySG9yaUFkdmFuY2UgYW5kCisJbGluZWFyVmVydEFkdmFuY2UuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChVcGRhdGVfTWF4KTogVXNlIEZUX1JFQUxMT0MuCisKKzIwMDMtMTEtMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvKjogTW9yZSB1cGRhdGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDguCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWMgKHZlcnNpb25faW5mbyk6IFNldCB0byA5OjY6My4KKwkqIFJFQURNRTogVXBkYXRlZC4KKworMjAwMy0xMS0xMyAgSm9obiBBLiBCb3lkIEpyLiAgPGphYm95ZGpyQG5ldHdhbGsuY29tPgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKGJkZl9pbnRlcnByZXRfc3R5bGUpLCBzcmMvcGNmL3BjZnJlYWQuYworCShwY2ZfaW50ZXJwcmV0X3N0eWxlKTogUmVwbGFjZSBzcGFjZXMgd2l0aCBkYXNoZXMgaW4gcHJvcGVydGllcworCVNFVFdJRFRIX05BTUUgYW5kIEFERF9TVFlMRV9OQU1FIHRvIHNpbXBsaWZ5IHBhcnNpbmcuCisKKzIwMDMtMTEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDAzLTExLTExICBKb2huIEEuIEJveWQgSnIuICA8amFib3lkanJAbmV0d2Fsay5jb20+CisKKwlIYW5kbGUgU0VUV0lEVEhfTkFNRSBhbmQgQUREX1NUWUxFX05BTUUgcHJvcGVydGllcyBmb3IgQkRGIGFuZCBQQ0YKKwlmb250cy4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChiZGZfaW50ZXJwcmV0X3N0eWxlKTogTmV3IGF1eGlsaWFyeSBmdW5jdGlvbi4KKwkoQkRGX0ZhY2VfSW5pdCk6IERvbid0IGhhbmRsZSBzdHlsZSBwcm9wZXJ0aWVzIGJ1dCBjYWxsCisJYmRmX2ludGVycHJldF9zdHlsZS4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9pbnRlcnByZXRfc3R5bGUpOiBOZXcgYXV4aWxpYXJ5IGZ1bmN0aW9uLgorCShwY2ZfbG9hZF9mb250KTogRG9uJ3QgaGFuZGxlIHN0eWxlIHByb3BlcnRpZXMgYnV0IGNhbGwKKwlwY2ZfaW50ZXJwcmV0X3N0eWxlLgorCisyMDAzLTExLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKworCSogVmVyc2lvbiAyLjEuNyByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA3LgorCisJKiBidWlsZHMvdW5peC9mdDJ1bml4Lmg6IEZpeCBjb21tZW50cy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IFN5bmNocm9uaXplZCB3aXRoIEFOU0kgdmVyc2lvbi4KKwlVc2UgYCN1bmRlZicgaW4gdGVtcGxhdGVzIGFzIHJlY29tbWVuZGVkIGluIHRoZSBhdXRvY29uZgorCWRvY3VtZW50YXRpb24uCisJU2luY2UgcmVhbCBgI3VuZGVmJyBsaW5lcyBkb24ndCBzdXJ2aXZlIGR1cmluZyBjb25maWd1cmF0aW9uLCB1c2UKKwlgL3VuZGVmJyBpbnN0ZWFkOyB0aGUgcG9zdHByb2Nlc3NpbmcgZmFjaWxpdHkgb2YgdGhlCisJQUNfQ09ORklHX0hFQURFUlMgYXV0b2NvbmYgbWFjcm8gY29udmVydHMgdGhlbSB0byBgI3VuZGVmJy4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IEluc3RhbGwgVW5peCB2ZXJzaW9uIG9mCisJYGZ0Y29uZmlnLmgnLgorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluIChDRkxBR1MpOiBTZXQgRlRfQ09ORklHX0NPTkZJR19IIG1hY3JvCisJdG8gaW5jbHVkZSB0aGUgY29ycmVjdCBgZnRjb25maWcuaCcgZmlsZS4KKworCSogYnVpbGRzL3VuaXgvZnQtbXVubWFwLm00IChGVF9NVU5NQVBfREVDTCk6IFJlbW92ZWQuCisJKEZUX01VTk1BUF9QQVJBTSk6IFVwZGF0ZWQgc3ludGF4IHRvIGF1dG9jb25mIDIuNTkuCisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5tNDogVXBkYXRlZCBzeW50YXggdG8gYXV0b2NvbmYgMi41OS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBVc2UgQUNfQ09ORklHX0hFQURFUlMgaW5zdGVhZCBvZgorCUFDX0NPTkZJR19IRUFERVIgdG8gY3JlYXRlIGZ0Y29uZmlnLmgsIGFuZCB1c2Ugc2Vjb25kIGFyZ3VtZW50CisJdG8gcmVwbGFjZSBgL3VuZGVmJyB3aXRoIGAjdW5kZWYnLgorCURvbid0IHVzZSBGVF9NVU5NQVBfREVDTCBidXQgQUNfQ0hFQ0tfREVDTFMgdG8gY2hlY2sgZm9yIG11bm1hcC4KKwlVc2UgQVNfSEVMUF9TVFJJTkcgaW4gQUNfQVJHX1dJVEguCisJVXBkYXRlIHN5bnRheCB0byBhdXRvY29uZiAyLjU5LgorCisJKiBidWlsZHMvdW5peC9sdG1haW4uc2g6IFJlZ2VuZXJhdGVkIHdpdGggYGxpYnRvb2xpemUgLS1mb3JjZQorCS0tY29weScgZnJvbSBsaWJ0b29sIDEuNS4KKwkqIGJ1aWxkcy91bml4L2FjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkIHdpdGggYGFjbG9jYWwgLUkgLicgZnJvbQorCWF1dG9tYWtlIDEuNy44LgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZCB3aXRoIGF1dG9jb25mIDIuNTkuCisJKiBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsIGJ1aWxkcy91bml4L2NvbmZpZy5zdWI6IFVwZGF0ZWQgZnJvbQorCWBjb25maWcnIENWUyBtb2R1bGUgYXQgc3VidmVyc2lvbnMuZ251Lm9yZworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC1zaCwgYnVpbGRzL3VuaXgvbWtpbnN0YWxsZGlyczogVXBkYXRlZCBmcm9tCisJYHRleGluZm8nIENWUyBtb2R1bGUgYXQgc3VidmVyc2lvbnMuZ251Lm9yZy4KKworCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oOiBTeW5jaHJvbml6ZWQgd2l0aCBBTlNJIHZlcnNpb24uCisKKwkqIGRvY3MvQ1VTVE9NSVpFOiBGaXggZG9jdW1lbnRhdGlvbiBlcnJvci4KKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTCwgZG9jcy9yZWxlYXNlOiBVcGRhdGVkLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKHJlZmRvYyk6IFVwZGF0ZWQgLS10aXRsZS4KKworMjAwMy0xMS0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisKKwkqIFZlcnNpb24gMi4xLjYgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwkqIGluc3RhbGw6IFJlbW92ZWQuICBPYnNvbGV0ZS4KKworMjAwMy0xMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfU0ZOVF9ILgorCShzZm50X3NlcnZpY2Vfc2ZudF90YWJsZSk6IE5ldyBzZXJ2aWNlLgorCShzZm50X3NlcnZpY2VzKTogVXBkYXRlZC4KKworCSogZG9jcy9saWNlbnNlLnR4dDogUmV3b3JkZWQuCisKKzIwMDMtMTEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS8qOiBBZGQgYSBndWFyZCB0byBhbGwgcHVibGljIGhlYWRlciBmaWxlcyB3aGljaAorCWxvYWQgRlRfRlJFRVRZUEVfSCB0byByZWplY3QgZnJlZXR5cGUuaCBmcm9tIEZyZWVUeXBlIDEuCisKKzIwMDMtMTEtMDIgIFBhdHJpY2sgV2VsY2hlICA8cHJsdzFAbmV3bi5jYW0uYWMudWs+CisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5tNCwgYnVpbGRzL3VuaXgvZnQtbXVubWFwLm00OiBQcm90ZWN0CisJZmlyc3QgYXJndW1lbnQgb2YgQUNfREVGVU4gd2l0aCBicmFja2V0cyB0byBhdm9pZCBwb3NzaWJsZQorCWV4cGFuc2lvbi4KKworMjAwMy0xMS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2dseXBoLmg6IERvbid0IGluY2x1ZGUgc3RkZGVmLmguCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogRml4IGNoZWNrIGZvciBmdDJidWlsZC5oLgorCisyMDAzLTExLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogQ2hlY2sgdGhhdCBmdDJidWlsZC5oIGhhcyBiZWVuCisJbG9hZGVkIGZpcnN0LgorCisJKiBzcmMvYmFzZS9mdHR5cGUxLmMgKEZUX0dldF9QU19Gb250X0luZm8pOiBGaXggaW5jb3JyZWN0bHkgYXBwbGllZAorCXBhdGNoLgorCisyMDAzLTEwLTMxICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogc3JjL2Jhc2UvZnR0eXBlMS5jIChGVF9HZXRfUFNfRm9udF9JbmZvLCBGVF9IYXNfUFNfR2x5cGhfTmFtZXMpOgorCUZpeCBwYXJhbWV0ZXIgb3JkZXIgaW4gY2FsbHMgdG8gRlRfRkFDRV9GSU5EX1NFUlZJQ0UuCisKKzIwMDMtMTAtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaAorCShGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSCk6IFJlbW92ZWQuICBVbnVzZWQuCisKKwkqIHNyYy90eXBlNDIvdDQyZHJpdnIuYyAodDQyX3NlcnZpY2VzKTogVXBkYXRlZC4KKworMjAwMy0xMC0yOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2JkZnR5cGVzLmg6IFJlbW92ZWQuICBPYnNvbGV0ZS4KKwkqIHNyYy9iYXNlL2Z0YmRmLmM6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaDogTW92ZWQgdG8uLi4KKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaDogVGhpcyBwbGFjZSBzaW5jZSBubyBvdGhlciBtb2R1bGUgbmVlZHMgdG8KKwlrbm93IGFib3V0IHRob3NlIHR5cGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3Q0MnR5cGVzLmg6IE1vdmVkIHRvLi4uCisJKiBzcmMvdHlwZTQyL3Q0MnR5cGVzLmg6IFRoaXMgcGxhY2Ugc2luY2Ugbm8gb3RoZXIgbW9kdWxlIG5lZWRzIHRvCisJa25vdyBhYm91dCB0aG9zZSB0eXBlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oOiBJbmNsdWRlIEZUX0JERl9ILgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNuYW1lLmg6IFJlbmFtZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaDogVGhpcy4KKwlVcGRhdGVkIGBGVF9TZXJ2aWNlX1BzTmFtZXMnIC0+IGBGVF9TZXJ2aWNlX1BzQ01hcHMnIGFuZAorCWBQT1NUU0NSSVBUX05BTUVTJyAtPiBgUE9TVFNDUklQVF9DTUFQUycgZXZlcnl3aGVyZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oOiBOZXcgZmlsZSwgcHJvdmlkaW5nCisJUG9zdFNjcmlwdCBpbmZvIHNlcnZpY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ILAorCUZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gpOiBOZXcgbWFjcm9zIGZvciBzdnBzY21hcC5oIGFuZAorCXN2cHNpbmZvLmguCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmggKEZUX0lOVEVSTkFMX1RZUEU0Ml9UWVBFU19ILAorCUZUX0lOVEVSTkFMX0NGRl9UWVBFU19ILCBGVF9JTlRFUk5BTF9CREZfVFlQRVNfSCk6IFJlbW92ZWQuCisKKwkqIHNyYy9iYXNlL2Z0dHlwZTEuYzogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19IIGFuZAorCUZUX0lOVEVSTkFMX1RZUEU0Ml9UWVBFU19IIGJ1dCBGVF9JTlRFUk5BTF9TRVJWSUNFX0ggYW5kCisJRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSC4KKwkoRlRfR2V0X1BTX0ZvbnRfSW5mbywgRlRfSGFzX1BTX0dseXBoX05hbWVzKTogVXNlIG5ldworCVBPU1RTQ1JJUFRfSU5GTyBzZXJ2aWNlLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSC4KKwkoY2ZmX3BzX2hhc19nbHlwaF9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX3NlcnZpY2VfcHNfaW5mbyk6IE5ldyBzZXJ2aWNlLgorCShjZmZfc2VydmljZXMpOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuaCwgc3JjL2NmZi9jZmZvYmpzLmgsIHNyYy9jZmYvY2ZmcGFyc2UuaDogRG9uJ3QKKwlpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19IIGJ1dCBjZmZ0eXBlcy5oIGRpcmVjdGx5LgorCisJKiBzcmMvY2lmL2NpZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSC4KKwkoY2lkX3BzX2dldF9mb250X2luZm8pOiBOZXcgZnVuY3Rpb24uCisJKGNpZF9zZXJ2aWNlX3BzX2luZm8pOiBOZXcgc2VydmljZS4KKwkoY2lkX3NlcnZpY2VzKTogVXBkYXRlZC4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSC4KKwkodDFfcHNfZ2V0X2ZvbnRfaW5mbywgdDFfcHNfaGFzX2dseXBoX25hbWVzKTogTmV3IGZ1bmN0aW9ucy4KKwkodDFfc2VydmljZV9wc19pbmZvKTogTmV3IHNlcnZpY2UuCisJKHQxX3NlcnZpY2VzKTogVXBkYXRlZC4KKworCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0guCisJKHQ0Ml9wc19nZXRfZm9udF9pbmZvLCB0NDJfcHNfaGFzX2dseXBoX25hbWVzKTogTmV3IGZ1bmN0aW9ucy4KKwkodDQyX3NlcnZpY2VfcHNfaW5mbyk6IE5ldyBzZXJ2aWNlLgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuaDogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFNDJfVFlQRVNfSAorCWJ1dCB0NDJ0eXBlcy5oIGRpcmVjdGx5LgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc25hbWVzX2ludGVyZmFjZSwgcHNuYW1lc19zZXJ2aWNlcyk6CisJUmVuYW1lZCB0by4uLgorCShwc2NtYXBzX2ludGVyZmFjZSwgcHNjbWFwc19zZXJ2aWNlcyk6IFRoaXMuCisJVXBkYXRlZCBhbGwgdXNlcnMuCisKKworCSogc3JjL2d6aXAvaW5mYmxvY2suYyAoaW5mbGF0ZV9ibG9ja3MpOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworMjAwMy0xMC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2VuY29kaW5nKTogSGFuZGxlIGAvRW5jb2RpbmcgWyAuLi4gXScuCisKKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKFQxX0dldF9Qcml2YXRlX0RpY3QpOiBUZXN0IHdoZXRoZXIgYGVleGVjJworCWlzIHJlYWwuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX2VuY29kaW5nKTogSW1wcm92ZSBib3VuZGFyeQorCWNoZWNraW5nIHdoaWxlIHBhcnNpbmcuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMy0xMC0yMSAgSm9zc2VsaW4gTW91ZXR0ZSAgPGpvc3NAZGViaWFuLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKFQxX0ZvbnRSZWMpOiBgcGFpbnRfdHlwZScKKwlhbmQgYHN0cm9rZV93aWR0aCcgYXJlbid0IHBvaW50ZXJzLgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfRG9uZSksIHNyYy90eXBlMS90MW9ianMuYworCShUMV9GYWNlX0RvbmUpOiBEb24ndCBmcmVlIGBwYWludF90eXBlJyBhbmQgYHN0cm9rZV93aWR0aCcuCisKKzIwMDMtMTAtMjAgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChmbnRfY21hcF9jbGFzcyk6IEZpeCBwb3NpdGlvbiBvZiBgY29uc3QnLgorCisyMDAzLTEwLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWRfZ2x5cGgpOiBQYXRjaCBmcm9tCisJMjAwMy0wOC0xOCBpbnRyb2R1Y2VkIGEgc2V2ZXJlIGJ1ZyAoRlRfUmVuZGVyX0dseXBoIHdhcyBjYWxsZWQKKwl0d2ljZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGNhdXNpbmcgc3RyYW5nZSByZXN1bHRzKS4gIFRoaXMKKwlpcyBmaXhlZCBub3cgYnkgY2xlYXJpbmcgdGhlIEZUX0xPQURfUkVOREVSIGJpdCBvZiBgbG9hZF9mbGFncycuCisKKwkqIHNyYy9iYXNlL2Z0cGZyLmMgKEZUX0dldF9QRlJfTWV0cmljcyk6IEluaXRpYWxpemUgYGVycm9yJy4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfdG9ieXRlcyk6IEluaXRpYWxpemUgYG4nLgorCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2Vfc2ZudHMpOiBJbml0aWFsaXplIGBzdHJpbmdfc2l6ZScuCisKKzIwMDMtMTAtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUNvbXBsZXRlbHkgcmV2aXNlZCBUeXBlIDQyIHBhcnNlci4gIEl0IG5vdyBoYW5kbGVzIGJvdGggZm9udHMKKwlwcm9kdWNlZCB3aXRoIHR0ZnRvdDQyICh0ZXN0ZWQgdmVyc2lvbiAwLjMuMSkgYW5kCisJVHJ1ZVR5cGVUb1R5cGU0Mi5wcyAodGVzdGVkIHZlcnNpb24gTWF5IDIwMDE7IGl0IGlzIG5lY2Vzc2FyeSB0bworCWZpeCB0aGUgYnJva2VuIGhlYWRlciBjb21tZW50IHRvIGJlIGAlIVBTLVRydWVUeXBlRm9udC4uLicpLgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0dseXBoU2xvdF9Mb2FkKTogQ2hhbmdlIGZvdXJ0aAorCXBhcmFtZXRlciB0byBgRlRfVUludCcuCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuaDogVXBkYXRlZC4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5oIChUNDJfUGFyc2VyUmVjKTogQ2hhbmdlIHR5cGUgb2YgYGluX21lbW9yeScKKwl0byBGVF9Cb29sLgorCShUNDJfTG9hZGVyKTogQ2hhbmdlIHR5cGUgb2YgYG51bV9jaGFycycgYW5kIGBudW1fZ2x5cGhzJyB0bworCUZUX1VJbnQuCisJQWRkIGBzd2FwX3RhYmxlJyBlbGVtZW50LgorCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jIChUNDJfS0VZV09SRF9DT1VOVCwgVDFfVG9GaXhlZCwKKwlUMV9Ub0Nvb3JkQXJyYXksIFQxX1RvVG9rZW5BcnJheSk6IFJlbW92ZWQuCisJKFQxX1RvQnl0ZXMpOiBOZXcgbWFjcm8uCisJKHQ0Ml9pc19hbHBoYSwgdDQyX2hleHZhbCk6IFJlbW92ZWQuCisJKHQ0Ml9pc19zcGFjZSk6IEhhbmRsZSBgXDAnLgorCSh0NDJfcGFyc2VfZW5jb2RpbmcpOiBVcGRhdGVkIHRvIHVzZSBuZXcgUG9zdFNjcmlwdCBwYXJzZXIgcm91dGluZXMKKwlmcm9tIHBzYXV4LgorCUhhbmRsZSBgL0VuY29kaW5nIFsgLi4uIF0nIGFsc28uCisJKFQ0Ml9Mb2FkX1N0YXR1cyk6IE5ldyBlbnVtZXJhdGlvbi4KKwkodDQyX3BhcnNlX3NmbnRzKTogVXBkYXRlZCB0byB1c2UgbmV3IFBvc3RTY3JpcHQgcGFyc2VyIHJvdXRpbmVzCisJZnJvbSBwc2F1eC4KKwkodDQyX3BhcnNlX2NoYXJzdHJpbmdzKTogVXBkYXRlZCB0byB1c2UgbmV3IFBvc3RTY3JpcHQgcGFyc2VyCisJcm91dGluZXMgZnJvbSBwc2F1eC4KKwlIYW5kbGUgYC9DaGFyU3RyaW5ncyA8PCAuLi4gPj4nIGFsc28uCisJRG9uJ3QgZXhwZWN0IHRoYXQgLy5ub3RkZWYgaXMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gZGljdGlvbmFyeS4gIENvcHkKKwljb2RlIGZyb20gdHlwZTEgbW9kdWxlIHRvIGhhbmRsZSB0aGlzLgorCSh0NDJfcGFyc2VfZGljdCk6IFVwZGF0ZWQgdG8gdXNlIG5ldyBQb3N0U2NyaXB0IHBhcnNlciByb3V0aW5lcworCWZyb20gcHNhdXguCisJUmVtb3ZlIGNvZGUgZm9yIHN5bnRoZXRpYyBmb250cyAod2hpY2ggY2FuJ3Qgb2NjdXIgaW4gVHlwZSA0MgorCWZvbnRzKS4KKwkodDQyX2xvYWRlcl9kb25lKTogUmVsZWFzZSBgc3dhcF90YWJsZScuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoc2tpcF9zdHJpbmcpOiBJbmNyZWFzZSBgY3VyJyBwcm9wZXJseS4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyk6IE1ha2UgdGVzdCBmb3IgYC5ub3RkZWYnCisJZmFzdGVyLgorCisyMDAzLTEwLTE1ICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwkqIHNyYy9hdXRvaGludC9haGdsb2JhbC5jIChibHVlX2NoYXJzKSwgc3JjL3dpbmZvbnRzL3dpbmZudC5jCisJKGZudF9jbWFwX2NsYXNzX3JlYywgZm50X2NtYXBfY2xhc3MpLCBzcmMvYmRmL2JkZmxpYi5jIChlbXB0eSwKKwlfbnVtX2JkZl9wcm9wZXJ0aWVzKSwgc3JjL2d6aXAvaW5mdXRpbC5jIChpbmZsYXRlX21hc2spLAorCXNyYy9nemlwL2luZmZpeGVkLmggKGZpeGVkX2JsLCBmaXhlZF9iZCwgZml4ZWRfdGwsIGZpeGVkX3RkKSwKKwlzcmMvZ3ppcC9pbmZ0cmVlcy5oIChpbmZsYXRlX3RyZWVzX2ZpeGVkKSwgc3JmL2d6aXAvaW5mdHJlZXMuYworCShpbmZsYXRlX3RyZWVzX2ZpeGVkKTogRGVjb3JhdGUgd2l0aCBtb3JlIGBjb25zdCcgdG8gYXZvaWQKKwl3cml0YWJsZSBnbG9iYWwgdmFyaWFibGVzIHdoaWNoIGFyZSBkaXNhbGxvd2VkIG9uIEFSTS4KKworMjAwMy0xMC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2ZvbnRfbWF0cml4LCBwYXJzZV9jaGFyc3RyaW5ncyk6IFJlbW92ZQorCWNvZGUgc3BlY2lhbGx5IGZvciBzeW50aGV0aWMgZm9udHM7IHRoaXMgaXMgaGFuZGxlZCBlbHNld2hlcmUuCisJKHBhcnNlX2VuY29kaW5nKTogUmVtb3ZlIGNvZGUgc3BlY2lhbGx5IGZvciBzeW50aGV0aWMgZm9udHM7IHRoaXMgaXMKKwloYW5kbGVkIGVsc2V3aGVyZS4KKwlJbXByb3ZlIGJvdW5kYXJ5IGNoZWNraW5nIHdoaWxlIHBhcnNpbmcuCisJKHBhcnNlX2RpY3QpOiBJbXByb3ZlIGJvdW5kYXJ5IGNoZWNraW5nIHdoaWxlIHBhcnNpbmcuCisJVXNlIGZ0X21lbWNtcCB0byBzaW1wbGlmeSBjb2RlLgorCisyMDAzLTEwLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2Vfc3VicnMsIHBhcnNlX2RpY3QpOiBIYW5kbGUgc3ludGhldGljCisJZm9udHMgcHJvcGVybHkuCisJKHBhcnNlX2NoYXJzdHJpbmdzKTogQ29weSBjb3JyZWN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIGludG8KKwlgbmFtZV90YWJsZScuCisKKzIwMDMtMTAtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUhlYXZ5IG1vZGlmaWNhdGlvbiBvZiB0aGUgUFMgcGFyc2VyIHRvIGhhbmRsZSBjb21tZW50cyBhbmQgc3RyaW5ncworCWNvcnJlY3RseS4gIFRoaXMgZG9lc24ndCBzbG93IGRvd24gdGhlIGxvYWRpbmcgb2YgUFMgZm9udHMKKwlzaWduaWZpY2FudGx5IHNpbmNlIGNoYXJzdHJpbmdzIGFyZW4ndCBhZmZlY3RlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfeGRpZ2l0KTogUmVuYW1lZCB0by4uLgorCShmdF9pc3hkaWdpdCk6IFRoaXMuICBVcGRhdGVkIGFsbCBjYWxsZXJzLgorCShmdF9pc2RpZ2l0KTogTmV3IGFsaWFzIHRvIGBpc2RpZ2l0Jy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChQU19QYXJzZXJfRnVuY3NSZWMpOiBSZW5hbWVkCisJYHNraXBfYWxwaGEnIHRvIGBza2lwX1BTX3Rva2VuJy4KKwlBZGQgcGFyYW1ldGVyIHRvIGB0b19ieXRlcycgYW5kIGNoYW5nZSBzb21lIGFyZ3VtZW50IHR5cGVzLgorCisJKiBzcmMvcHNhdXgvcHNhdXhtb2QuYyAocHNfcGFyc2VyX2Z1bmNzKTogVXBkYXRlZC4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoZnRfY2hhcl90YWJsZSk6IE5ldyBhcnJheSB0byBtYXAgY2hhcmFjdGVyCisJY29kZXMgKEFTQ0lJIGFuZCBFQkNESUMpIG9mIGRpZ2l0cyB0byBudW1iZXJzLgorCShPUCk6IE5ldyBhdXhpbGlhcnkgbWFjcm8gaG9sZGluZyBlaXRoZXIgYD49JyBvciBgPCcgZGVwZW5kaW5nIG9uCisJdGhlIGNoYXJhY3RlciBlbmNvZGluZy4KKwkoc2tpcF9jb21tZW50KTogTmV3IGZ1bmN0aW9uLgorCShza2lwX3NwYWNlcyk6IFVzZSBpdC4KKwkoc2tpcF9hbHBoYSk6IFJlbW92ZWQuCisJKHNraXBfbGl0ZXJhbF9zdHJpbmcsIHNraXBfc3RyaW5nKTogTmV3IGZ1bmN0aW9ucy4KKwkocHNfcGFyc2VyX3NraXBfUFNfdG9rZW4pOiBOZXcgZnVuY3Rpb24uICBUaGlzIGlzIGEgYmV0dGVyCisJcmVwbGFjZW1lbnQgb2YuLi4KKwkocHNfcGFyc2VyX3NraXBfYWxwaGEpOiBSZW1vdmVkLgorCShwc19wYXJzZXJfdG9fdG9rZW4sIHBzX3BhcnNlcl90b190b2tlbl9hcnJheSk6IFVwZGF0ZWQuCisJKFQxUmFkaXgpOiBSZXdyaXR0ZW4sIHVzaW5nIGBmdF9jaGFyX3RhYmxlJy4KKwkodDFfdG9pbnQpOiBSZW5hbWVkIHRvLi4uCisJKHBzX3RvaW50KTogVGhpcy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KKwlVc2UgYGZ0X2NoYXJfdGFibGUnLgorCShwc190b2J5dGVzKTogQWRkIHBhcmFtZXRlciB0byBoYW5kbGUgZGVsaW1pdGVycyBhbmQgY2hhbmdlIHNvbWUKKwlhcmd1bWVudCB0eXBlcy4KKwlVc2UgYGZ0X2NoYXJfdGFibGUnLgorCSh0MV90b2ZpeGVkKTogUmVuYW1lZCB0by4uLgorCShwc190b2ZpeGVkKTogVGhpcy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KKwlVc2UgYGZ0X2NoYXJfdGFibGUnLgorCSh0MV90b2Nvb3JkYXJyYXkpOiBSZW5hbWVkIGFuZCB1cGRhdGVkIHRvLi4uCisJKHBzX3RvY29vcmRhcnJheSk6IFRoaXMuICBVcGRhdGUgYWxsIGNhbGxlcnMuCisJKHQxX3RvZml4ZWRhcnJheSk6IFJlbmFtZWQgYW5kIHVwZGF0ZWQgdG8uLi4KKwkocHNfdG9maXhlZGFycmF5KTogVGhpcy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KKwkodDFfdG9ib29sKTogUmVuYW1lZCB0by4uLgorCShwc190b2Jvb2wpOiBUaGlzLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgorCShwc19wYXJzZXJfbG9hZF9maWVsZCk6IFVwZGF0ZWQuCisJKHBzX3BhcnNlcl9sb2FkX2ZpZWxkX3RhYmxlKTogVXNlIGBUMV9NQVhfVEFCTEVfRUxFTUVOVFMnCisJZXZlcnl3aGVyZS4KKwkocHNfcGFyc2VyX3RvX2ludCwgcHNfcGFyc2VyX3RvX2ZpeGVkLCBwc19wYXJzZXJfdG9fY29vcmRfYXJyYXksCisJcHNfcGFyc2VyX3RvX2ZpeGVkX2FycmF5KTogU2tpcCBzcGFjZXMuICBVcGRhdGVkLgorCShwc19wYXJzZXJfdG9fYnl0ZXMpOiBBZGQgcGFyYW1ldGVyIHRvIGhhbmRsZSBkZWxpbWl0ZXJzIGFuZCBjaGFuZ2UKKwlzb21lIGFyZ3VtZW50IHR5cGVzLiAgVXBkYXRlZC4KKwkqIHNyYy9wc2F1eC9wc29ianMuaDogVXBkYXRlZC4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9wYXJzZV9kaWN0KTogVXBkYXRlZC4KKwkqIHNyYy9jaWQvY2lkcGFyc2UuYyAoY2lkX3BhcnNlcl9uZXcpOiBDaGVjayB3aGV0aGVyIHRoZSBgU3RhcnREYXRhJworCXRva2VuIHdhcyByZWFsbHkgZm91bmQuCisJKiBzcmMvY2lkL2NpZHBhcnNlLmggKGNpZF9wYXJzZXJfc2tpcF9hbHBoYSk6IFVwZGF0ZWQgYW5kIHJlbmFtZWQKKwl0by4uLgorCShjaWRfcGFyc2VyX3NraXBfUFNfdG9rZW4pOiBUaGlzLgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5oIChUMV9QYXJzZXJSZWMpOiBVc2UgYEZUX0Jvb2wnIGZvciBib29sZWFuCisJZmllbGRzLgorCShUMV9Ta2lwX0FscGhhKTogUmVwbGFjZWQgd2l0aC4uLgorCShUMV9Ta2lwX1BTX1Rva2VuKTogVGhpcyBuZXcgbWFjcm8uCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChoZXhhX3ZhbHVlKTogUmVtb3ZlZC4KKwkoVDFfR2V0X1ByaXZhdGVfRGljdCk6IFVzZSBgZnRfaXN4ZGlnaXQnIGFuZAorCWBwc2F1eC0+cHNfcGFyc2VyX2Z1bmNzX3RvX2J5dGVzJyBmb3IgaGFuZGxpbmcgQVNDSUkgaGV4YWRlY2ltYWwKKwllbmNvZGluZy4KKwlBZnRlciBkZWNyeXB0aW5nLCByZXBsYWNlIHRoZSBmb3VyIHJhbmRvbSBieXRlcyBhdCB0aGUgYmVnaW5uaW5nCisJd2l0aCB3aGl0ZXNwYWNlLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jICh0MV9hbGxvY2F0ZV9ibGVuZCk6IFVzZSBwcm9wZXIgZXJyb3IgdmFsdWVzLgorCShwYXJzZXJfYmxlbmRfZGVzaWduX3Bvc2l0aW9ucywgcGFyc2VfYmxlbmRfZGVzaWduX21hcCwKKwlwYXJzZV93ZWlnaHRfdmVjdG9yKTogVXBkYXRlZC4KKwkoaXNfc3BhY2UpOiBIYW5kbGUgYFxmJyBhbHNvLgorCShpc19uYW1lX2NoYXIpOiBSZW1vdmVkLgorCShyZWFkX2JpbmFyeV9kYXRhKTogVXBkYXRlZC4KKwkocGFyc2VfZW5jb2RpbmcpOiBVc2UgYGZ0X2lzZGlnaXQnLgorCVVwZGF0ZWQuCisJKHBhcnNlX3N1YnJzKTogVXBkYXRlZC4KKwkoVEFCTEVfRVhURU5EKTogTmV3IG1hY3JvLgorCShwYXJzZV9jaGFyc3RyaW5ncyk6IFVwZGF0ZWQuCisJUHJvdmlkZSBhIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGZvbnRzIHdoaWNoIGhhdmUgbW9yZSBlbnRyaWVzIGluIHRoZQorCS9DaGFyU3RyaW5ncyBkaWN0aW9uYXJ5IHRoZW4gZXhwZWN0ZWQ7IHRoZSBmdW5jdGlvbiBub3cgYWRkcyBzb21lCisJc2xvdHMgYW5kIHNraXBzIGVudHJpZXMgd2hpY2ggc3RpbGwgZXhjZWVkIHRoZSBuZXcgbGltaXQuCisJKHBhcnNlX2RpY3QpOiBVcGRhdGVkLgorCVRlcm1pbmF0ZSBvbiB0aGUgdG9rZW4gYGNsb3NlZmlsZScuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAoVDFfU2tpcF9BbHBoYSk6IFJlcGxhY2VkIHdpdGguLi4KKwkoVDFfU2tpcF9QU19Ub2tlbik6IFRoaXMgbmV3IG1hY3JvLiAgVXBkYXRlZCBhbGwgY2FsbGVycy4KKwkodDQyX3BhcnNlX2VuY29kaW5nKTogVXNlIGBmdF9pc2RpZ2l0Jy4KKworCisJKiBzcmMvYmFzZS9mdG1tLmMgKGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UpOiBSZXR1cm4gRlRfRXJyX09LIGlmCisJc3VjY2Vzcy4KKworMjAwMy0xMC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kdWxlLmg6IFJlbmFtZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaDogVGhpcyB0byBhdm9pZCBkdXBsaWNhdGUgZmlsZSBuYW1lcy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX01PRFVMRV9IKTogVXBkYXRlZC4KKworMjAwMy0xMC0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX09yaWVudGF0aW9uRXh0cmVtdW1SZWMsCisJRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBUcml2aWFsIHR5cG8gZml4ZXMgdG8gbWFrZSBpdCBjb21waWxlLgorCisyMDAzLTEwLTAyICBNYXJrdXMgRi5YLkouIE9iZXJodW1lciAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZUX1dpbkZOVF9IZWFkZXJSZWMpOiBgY29sb3JfdGFibGVfb2Zmc2V0JworCWhhcyBmb3VyIGJ5dGVzLCBub3QgdHdvLgorCUZpeCBhbGwgdXNlcnMuCisJKGZudF9mb250X2xvYWQsIEZOVF9Mb2FkX0dseXBoKTogQWRkIG1vcmUgZm9udCB2YWxpZGl0eSB0ZXN0cy4KKworMjAwMy0xMC0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC8qOiBBZGRpbmcgZmlyc3Qgc291cmNlIGZpbGVzIG9mIHRoZSBuZXcgbXVsdGktc2NyaXB0CisJYGF1dG8tZml0dGVyJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmggKEZUX09yaWVudGF0aW9uKTogTmV3IGVudW1lcmF0aW9uLgorCShGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbik6IE5ldyBkZWNsYXJhdGlvbi4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PcmllbnRhdGlvbkV4dHJlbXVtUmVjKTogTmV3IHN0cnVjdHVyZS4KKwkoZnRfb3JpZW50YXRpb25fZXh0cmVtdW1fY29tcHV0ZSk6IE5ldyBhdXhpbGlhcnkgZnVuY3Rpb24uCisJKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogTmV3IGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGZpbGwKKwlvcmllbnRhdGlvbiBvZiBhIGdpdmVuIGdseXBoIG91dGxpbmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UpOiBGaXhlZAorCXRyaXZpYWwgYnVnIHdoaWNoIGNvdWxkIGNyYXNoIHRoZSBmb250IGVuZ2luZSB3aGVuIGEgY2FjaGVkIHNlcnZpY2UKKwlwb2ludGVyIHdhcyByZXRyaWV2ZWQuCisKKzIwMDMtMDktMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9wYXJzZV9kaWN0KTogU2tpcCB0b2tlbiBpZiBubyBrZXl3b3JkIGlzCisJZm91bmQuCisKKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKElTX1QxX1dISVRFU1BBQ0UsIElTX1QxX0xJTkVTUEFDRSwKKwlJU19UMV9TUEFDRSk6IFJlbW92ZWQuCisJKFBGQl9UYWcpOiBSZW1vdmVkLgorCShyZWFkX3BmYl90YWcpOiBEb24ndCB1c2UgUEZCX1RhZy4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfaXNfc3BhY2UpOiBIYW5kbGUgYFxmJyBhbHNvLgorCSh0NDJfcGFyc2VfZW5jb2RpbmcpOiBIYW5kbGUgc3ludGhldGljIGZvbnRzLgorCisyMDAzLTA5LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oOiBEb24ndCBpbmNsdWRlCisJRlRfSU5URVJOQUxfT0JKRUNUU19IIGJ1dCBGVF9JTlRFUk5BTF9TRVJWSUNFX0guCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmM6IERvbid0IGluY2x1ZGUKKwlGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSC4KKworMjAwMy0wOS0yOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkZWQgbmV3IHNlcnZpY2UgdG8gaGFuZGxlIGdseXBoIG5hbWUgZGljdGlvbmFyaWVzLCByZXBsYWNpbmcgdGhlCisJb2xkIGludGVybmFsIGhlYWRlciBuYW1lZCBgcHNuYW1lcy5oJyBieSBgc2VydmljZXMvc3Zwc25hbWUuaCcuCisJTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYHNlcnZpY2VzL3N2cG9zdG5tLmgnIHdoaWNoIG9ubHkKKwloYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgUG9zdFNjcmlwdCBmb250IG5hbWVzIGZvciBhIGdpdmVuIGZhY2UuCisJKFNob3VsZCB3ZSBtZXJnZSB0aGVzZSB0d28gc2VydmljZXMgaW50byBhIHNpbmdsZSBoZWFkZXI/KQorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzbmFtZXMuaDogUmVtb3ZlZC4gIE1vc3Qgb2YgaXRzCisJY29udGVudHMgaXMgbW92ZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc25hbWUuaDogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaAorCShGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfTkFNRSk6IFJlcGxhY2VkIHdpdGguLi4KKwkoRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSk6IE5ldyBtYWNyby4KKwkoUHNOYW1lKTogU2VydmljZSBuYW1lZCBjaGFuZ2VkIHRvLi4uCisJKFBzRm9udE5hbWUpOiBUaGlzLgorCVVwZGF0ZWQgYEZUX1NlcnZpY2VfUHNOYW1lJyAtPiBgRlRfU2VydmljZV9Qc0ZvbnROYW1lJyBhbmQKKwlgUE9TVFNDUklQVF9OQU1FJyAtPiBgUE9TVFNDUklQVF9GT05UX05BTUUnIGV2ZXJ5d2hlcmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAorCShGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0gpOiBSZW1vdmVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oOiBJbmNsdWRlCisJRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisJKFQxX0RlY29kZXJSZWMpOiBVcGRhdGVkIHR5cGUgb2YgYHBzbmFtZXMnLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmg6IERvbid0IGluY2x1ZGUKKwlGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0ggYnV0IEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FU19ILgorCUluY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ILgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90NDJ0eXBlcy5oOiBEb24ndCBpbmNsdWRlCisJRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19ILgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9GQUNFX0ZJTkRfU0VSVklDRSk6IENoYW5nZWQKKwlvcmRlciBvZiBwYXJhbWV0ZXJzLiAgQWxsIGNhbGxlcnMgdXBkYXRlZC4KKwkoRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKTogTmV3IG1hY3JvIHRvIGxvb2sgdXAgYSBzZXJ2aWNlCisJZ2xvYmFsbHksIGNoZWNraW5nIGFsbCBtb2R1bGVzLgorCShGVF9TZXJ2aWNlQ2FjaGVSZWMpOiBVcGRhdGVkLgorCShGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSCk6IE5ldyBtYWNybyBmb3IgYWNjZXNzaW5nCisJYHN2cHNuYW1lLmgnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLCBzcmMvYmFzZS9mdG9ianMuYworCShmdF9tb2R1bGVfZ2V0X3NlcnZpY2UpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0gKKwlidXQgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisJKGNmZl9nZXRfZ2x5cGhfbmFtZSwgY2ZmX2dldF9uYW1lX2luZGV4KTogVXNlIG5ldyBQT1NUU0NSSVBUX05BTUVTCisJc2VydmljZS4KKwkqIHNyYy9jZmYvY2ZmY21hcC5jIChjZmZfY21hcF91bmljb2RlX2luaXQpOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZsb2FkLmMsIHNyYy9jZmYvY2ZmbG9hZC5oOiAgRG9uJ3QgaW5jbHVkZQorCUZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfTkFNRVNfSCBidXQgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisJKGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyk6IFVwZGF0ZWQuCisJKiBzcmMvY2ZmL2NmZm9ianMuYzogIERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19ICisJYnV0IEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FU19ILgorCShjZmZfZmFjZV9pbml0KTogVXNlIG5ldyBQT1NUU0NSSVBUX05BTUVTIHNlcnZpY2UuCisJKiBzcmMvY2ZmL2NmZm9ianMuaDogIERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19ICisJYnV0IEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FU19ILgorCisJKiBzcmMvY2lkL2NpZG9ianMuYzogIERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19ICisJYnV0IEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FU19ILgorCShjaWRfZmFjZV9pbml0KTogVXNlIG5ldyBQT1NUU0NSSVBUX05BTUVTIHNlcnZpY2UuCisJKiBzcmMvY2lkL2NpZHJpdmVyLmM6IERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19ILgorCisJKiBzcmMvcHNhdXgvdDFjbWFwLmMgKHQxX2NtYXBfc3RkX2luaXQsIHQxX2NtYXBfdW5pY29kZV9pbml0KTogVXNlCisJbmV3IFBPU1RTQ1JJUFRfTkFNRVMgc2VydmljZS4KKwkqIHNyYy9wc2F1eC90MWRlY29kZS5oICh0MV9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUsCisJdDFfZGVjb2RlX2luaXQpOiBVc2UgbmV3IFBPU1RTQ1JJUFRfTkFNRVMgc2VydmljZS4KKwkqIHNyYy9wc2F1eC90MWNtYXAuaCwgc3JjL3BzYXV4L3QxZGVjb2RlLmg6IERvbnQnIGluY2x1ZGUKKwlGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0guCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmM6ICBEb24ndCBpbmNsdWRlCisJRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19IIGJ1dCBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSC4KKwkocHNfYnVpbGRfdW5pY29kZV90YWJsZSk6IFJlbmFtZWQgdG8uLi4KKwkocHNfdW5pY29kZXNfaW5pdCk6IFRoaXMuCisJKHBzX2xvb2t1cF91bmljb2RlKTogUmVuYW1lZCB0by4uLgorCShwc191bmljb2Rlc19jaGFyX2luZGV4KTogVGhpcy4KKwkocHNfbmV4dF91bmljb2RlKTogUmVuYW1lZCB0by4uLgorCShwc191bmljb2Rlc19jaGFyX25leHQpOiBUaGlzLgorCShwc25hbWVzX2ludGVyZmFjZSk6IFVwZGF0ZWQuCisJKHBzbmFtZXNfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkocHNuYW1lc19nZXRfc2VydmljZSk6IE5ldyBmdW5jdGlvbi4KKwkocHNuYW1lc19tb2R1bGVfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYzogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0gKKwlidXQgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisJKHNmbnRfaW5pdF9mYWNlKTogVXNlIG5ldyBQT1NUU0NSSVBUX05BTUVTIHNlcnZpY2UuCisJKiBzcmMvc2ZudC90dHBvc3QuYzogRG9uJ3QgaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0gKKwlidXQgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisJKHR0X2ZhY2VfZ2V0X3BzX25hbWUpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmM6ICBEb24ndCBpbmNsdWRlCisJRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19IIGJ1dCBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSC4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmM6ICBEb24ndCBpbmNsdWRlCisJRlRfSU5URVJOQUxfUE9TVFNDUklQVF9OQU1FU19IIGJ1dCBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRVNfSC4KKwkqIHNyYy90eXBlMS90MW9ianMuYzogIERvbid0IGluY2x1ZGUKKwlGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX05BTUVTX0ggYnV0IEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FU19ILgorCShUMV9GYWNlX0luaXQpOiBVc2UgbmV3IFBPU1RTQ1JJUFRfTkFNRVMgc2VydmljZS4KKworCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jICh0NDJfZ2V0X3BzX25hbWUpOiBSZW5hbWVkIHRvLi4uCisJKHQ0Ml9nZXRfcHNfZm9udF9uYW1lKTogVGhpcy4KKwkodDQyX3NlcnZpY2VfcHNfbmFtZSk6IFJlbmFtZWQgdG8uLi4KKwkodDQyX3NlcnZpY2VfcHNfZm9udF9uYW1lKTogVGhpcy4KKwkodDQyX3NlcnZpY2VzKTogVXBkYXRlZC4KKwkqIHNyYy90eXBlNDIvdDQyb2Jqcy5jIChUNDJfRmFjZV9Jbml0KTogVXNlIG5ldyBQT1NUU0NSSVBUX05BTUVTCisJc2VydmljZS4KKwkqIHNyYy90eXBlNDIvdDQyb2Jqcy5oOiAgRG9uJ3QgaW5jbHVkZQorCUZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfTkFNRVNfSCBidXQgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVTX0guCisKKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HZXRfR2x5cGgpOiBEb24ndCBhY2Nlc3MgYHNsb3QnIGJlZm9yZQorCXRlc3RpbmcgaXRzIHZhbGlkaXR5LiAgUmVwb3J0ZWQgYnkgSGVucnkgTWFkZG9ja3MKKwk8bWFkZG9ja3NAbWV0c2VydmljZS5jb20+LgorCisyMDAzLTA5LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0ZBQ0VfRklORF9TRVJWSUNFKToKKwlGaXggY29tcGlsYXRpb24gd2FybmluZyAocy9wcHRyL1BwdHIvKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9QRlJfSCwKKwlGVF9JTlRFUk5BTF9GTlRfVFlQRVNfSCk6IFJlbW92ZWQuCisKKzIwMDMtMDktMjEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCU1pZ3JhdGluZyB0aGUgUEZSIGFuZCBXSU5GTlQgZHJpdmVycyB0byB0aGUgbmV3IHNlcnZpY2UtYmFzZWQKKwlpbnRlcm5hbCBBUEkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZm50dHlwZXMuaDogUmVtb3ZlZC4gIE1vc3Qgb2YgaXRzIGRhdGEKKwlhcmUgbW92ZWQgdG8gd2luZm50LmggYW5kLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg6IE5ldyBmaWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3Bmci5oOiBSZW1vdmVkLiAgTW9zdCBvZiBpdHMgZGF0YSBhcmUKKwltb3ZlZCB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oOiBOZXcgZmlsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfRkFDRV9GSU5EX1NFUlZJQ0UsCisJRlRfRkFDRV9MT09LVVBfU0VSVklDRSk6IFNpbXBsaWZ5IGZpeCBvZiAyMDAzLTA5LTE2IGJ5IHJlbW92aW5nCisJcG9pbnRlciB0eXBlIGFyZ3VtZW50LgorCVVwZGF0ZWQgYWxsIGNhbGxlcnMuCisJVXBkYXRlIG1hY3JvIG5hbWVzIG9mIHNlcnZpY2VzIGhlYWRlciBmaWxlcy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9OYW1lX0luZGV4KTogU2ltcGxpZmllZCBjb2RlLgorCisJKiBzcmMvYmFzZS9mdHBmci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUEZSX0ggaW5zdGVhZCBvZgorCUZUX0lOVEVSTkFMX1BGUl9ILgorCShmdF9wZnJfY2hlY2ssIEZUX0dldF9QRlJfTWV0cmljcywgRlRfR2V0X1BGUl9LZXJuaW5nLAorCUZUX0dldF9QRlJfQWR2YW5jZSk6IFVzZSBzZXJ2aWNlcyBwcm92aWRlZCBpbiBgUEZSX01FVFJJQ1MnLgorCisJKiBzcmMvYmFzZS9mdHdpbmZudC5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfV0lORk5UX0ggaW5zdGVhZCBvZgorCUZUX0lOVEVSTkFMX0ZOVF9UWVBFU19ILgorCShGVF9HZXRfV2luRk5UX0hlYWRlcik6IFVzZSBzZXJ2aWNlIHByb3ZpZGVkIGluIGBXSU5GTlQnLgorCisJKiBzcmMvcGZyL3BmcmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QRlJfSCBhbmQKKwlGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9IIGluc3RlYWQgb2YgRlRfSU5URVJOQUxfUEZSX0guCisJKHBmcl9zZXJ2aWNlX2JkZik6IFVwZGF0ZWQuCisJKHBmcl9zZXJ2aWNlcyk6IE5ldyBzZXJ2aWNlcyBsaXN0LgorCShwZnJfZ2V0X3NlcnZpY2UpOiBOZXcgZnVuY3Rpb24uCisJKHBmcl9kcml2ZXJfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmM6IEluY2x1ZGUgRlRfU0VSVklDRV9XSU5GTlRfSCBhbmQKKwlGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9IIGluc3RlYWQgb2YgRlRfSU5URVJOQUxfRk5UX1RZUEVTX0guCisJKHdpbmZudF9nZXRfaGVhZGVyLCB3aW5mbnRfZ2V0X3NlcnZpY2UpOiBOZXcgZnVuY3Rpb25zLgorCSh3aW5mbnRfc2VydmljZV9yZWMpOiBOZXcgc3RydWN0dXJlIHByb3ZpZGluZyBXSU5GTlQgc2VydmljZXMuCisJKHdpbmZudF9zZXJ2aWNlcyk6IE5ldyBzZXJ2aWNlcyBsaXN0LgorCSh3aW5mbnRfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKwkqIHNyYy93aW5mb250cy93aW5mbnQuaDogQWRkIG1vc3Qgb2YgdGhlIHJlbW92ZWQgZm50dHlwZXMuaCBkYXRhLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X3NlcnZpY2VfcHNfbmFtZSk6IEZpeCB0eXBvLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfc2VydmljZV9wc19uYW1lKTogRml4IHR5cG8uCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jLCBzcmMvY2lkL2NpZG9ianMuYywgc3JjL3Bmci9wZnJzYml0LmMsCisJc3JjL3BzYXV4L3Bzb2Jqcy5jLCBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3RydWV0eXBlL3R0b2Jqcy5jLAorCXNyYy90eXBlMS90MW9ianMuYywgc3JjL3R5cGU0Mi90NDJvYmpzLmM6IFJlbW92aW5nIHZhcmlvdXMgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworMjAwMy0wOS0xOSAgRGF2aWQgQmV2YW4gIDxkYmV2YW5AZW10ZXguY29tPgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5jIChwZmJfdGFnX2ZpZWxkcyk6IFJlbW92ZWQuCisJKHJlYWRfcGZiX3RhZyk6IEZpeCBjb2RlIHNvIHRoYXQgaXQgZG9lc24ndCBmYWlsIG9uIGVuZC1vZi1maWxlCisJaW5kaWNhdG9yICgweDgwMDMpLgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDAzLTA5LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0ZBQ0VfRklORF9TRVJWSUNFLAorCUZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UpOiBBZGQgcGFyYW1ldGVyIHRvIHBhc3MgcG9pbnRlciB0eXBlLgorCVVnbHksIEkga25vdywgYnV0IHRoaXMgaXMgbmVlZGVkIGZvciBjb21waWxhdGlvbiB3aXRoIEMrKyAtLQorCW1heWJlIHNvbWVvbmUga25vd3MgYSBiZXR0ZXIgc29sdXRpb24/CisJVXBkYXRlZCBhbGwgY2FsbGVycy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9OYW1lX0luZGV4LCBGVF9HZXRfR2x5cGhfTmFtZSk6IFJlbW92ZQorCUMrKyBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRiZGYuYyAoRlRfR2V0X0JERl9DaGFyc2V0X0lELCBGVF9HZXRfQkRGX1Byb3BlcnR5KToKKwlGaXggb3JkZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byBGVF9GQUNFX0ZJTkRfU0VSVklDRS4KKworMjAwMy0wOS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQXZvaWQgaGVhZGVyIGZpbGVzIHdpdGggaWRlbnRpY2FsIG5hbWVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL2JkZi5oOiBSZW5hbWVkIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmg6IFRoaXMuCisJQWRkIGNvcHlyaWdodCBub3RpY2UuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL2dseWZkaWN0Lmg6IFJlbmFtZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaDogVGhpcy4KKwlBZGQgY29weXJpZ2h0IG5vdGljZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvbXVsdG1hc3QuaDogUmVuYW1lZCB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg6IFRoaXMuCisJQWRkIGNvcHlyaWdodCBub3RpY2UuCisJQWRkIEZUX0JFR0lOX0hFQURFUiBhbmQgRlRfRU5EX0hFQURFUi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc2ZudC5oOiBSZW5hbWVkIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oOiBUaGlzLgorCUFkZCBjb3B5cmlnaHQgbm90aWNlLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9wb3N0bmFtZS5oOiBSZW5hbWVkIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmg6IFRoaXMuCisJQWRkIGNvcHlyaWdodCBub3RpY2UuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3hmODZuYW1lLmg6IFJlbmFtZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z4Zjg2bm0uaDogVGhpcy4KKwlBZGQgY29weXJpZ2h0IG5vdGljZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaDogQWRkIEZUX0JFR0lOX0hFQURFUiBhbmQKKwlGVF9FTkRfSEVBREVSLgorCUFkZCBjb3B5cmlnaHQgbm90aWNlLgorCVVwZGF0ZSBtYWNybyBuYW1lcyBvZiBzZXJ2aWNlcyBoZWFkZXIgZmlsZXMuCisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoU0VSVklDRVNfRElSKTogTmV3IHZhcmlhYmxlLgorCShCQVNFX0gpOiBBZGQgc2VydmljZXMgaGVhZGVyIGZpbGVzLgorCisyMDAzLTA5LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tayAoZGlzdGNsZWFuKTogUmVtb3ZlIGBidWlsZHMvdW5peC9mcmVldHlwZTIucGMnLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IERvbid0IGxvYWQgaGVhZGVycyB0d2ljZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfU0VSVklDRV9TRk5UX0gpOiBOZXcgbWFjcm8uCisJKiBzcmMvYmFzZS9mdG9ianMuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1NGTlRfSC4KKworCSogc3JjL2NmZi9jZmZjbWFwLmM6IEluY2x1ZGUgYGNmZmVycnMuaCcuCisJKiBzcmMvcGZyL3BmcmRyaXZyLmM6IEluY2x1ZGUgYHBmcmVycm9yLmgnLgorCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSBgc2ZlcnJvcnMuaCcuCisJKiBzcmMvcHNhdXgvcHNvYmpzLmg6IEFkZCBkZWNsYXJhdGlvbiBmb3IgYHBzX3BhcnNlcl90b19ieXRlcycuCisKKzIwMDMtMDktMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGBtb2R1bGUgc2VydmljZXMnLiAgVGhpcyBpcyB0aGUgZmlyc3QKKwlzdGVwIHRvd2FyZHMgYSBtYXNzaXZlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBlbmdpbmUncyBpbnRlcm5hbHMsIGluCisJb3JkZXIgdG8gZ2V0IHJpZCBvZiB2YXJpb3VzIG51bWJlcnMgb2YgaGFja3MuCisKKwlOb3RlIHRoYXQgdGhlc2UgY2hhbmdlcyB3aWxsIGJyZWFrIHNvdXJjZSAmIGJpbmFyeSBjb21wYXRpYmlsaXR5IGZvcgorCWF1dGhvcnMgb2YgZXh0ZXJuYWwgZm9udCBkcml2ZXJzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9CRUdJTl9TVE1OVCwgRlRfRU5EX1NUTU5ULAorCUZUX0RVTU1ZX1NUTU5UKTogTmV3IG1hY3Jvcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaDogTmV3IGZpbGUsIGNvbnRhaW5pbmcgdGhlIG5ldworCXN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0byBwcm92aWRlIGBzZXJ2aWNlcycuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaCAoRlRfSU5URVJOQUxfRVhURU5TSU9OX0gsCisJRlRfSU5URVJOQUxfRVhURU5EX0gsIEZUX0lOVEVSTkFMX0hBU0hfSCwgRlRfSU5URVJOQUxfT0JKRUNUX0gpOgorCVJlbW92ZWQsIG9ic29sZXRlLgorCShGVF9JTlRFUk5BTF9TRVJWSUNFX0gpOiBOZXcgbWFjcm8gZm9yIGBmdHNlcnYuaCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvYmRmLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9nbHlmZGljdC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvcG9zdG5hbWUuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3hmODZuYW1lLmg6IE5ldyBmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1tLmggKEZUX0dldF9NTV9GdW5jLCBGVF9TZXRfTU1fRGVzaWduX0Z1bmMsCisJRlRfU2V0X01NX0JsZW5kX0Z1bmMpOiBGdW5jdGlvbiBwb2ludGVycyBtb3ZlZCAoaW4gbW9kaWZpZWQgZm9ybSkKKwl0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9tdWx0bWFzdC5oOiBOZXcgZmlsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfSW50ZXJmYWNlKTogYGdldF9pbnRlcmZhY2UnCisJaXMgbm93IG9mIHR5cGUgYEZUX01vZHVsZV9SZXF1ZXN0ZXInLgorCShTRk5UX0dldF9JbnRlcmZhY2VfRnVuYywgU0ZOVF9Mb2FkX1RhYmxlX0Z1bmMpOiBGdW5jdGlvbiBwb2ludGVycworCW1vdmVkIChpbiBtb2RpZmllZCBmb3JtKSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zZm50Lmg6IE5ldyBmaWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmggKEZUX0dldF9TZm50X1RhYmxlX0Z1bmMpOiBGdW5jdGlvbgorCXBvaW50ZXIgbW92ZWQgKGluIG1vZGlmaWVkIGZvcm0pIHRvIGBzZXJ2aWNlcy9zZm50LmgnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kdWxlLmggKEZUX01vZHVsZV9JbnRlcmZhY2UpOiBNYWtlIGl0IGEKKwlhIHR5cGVkZWYgdG8gYEZUX1BvaW50ZXInLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IEFkZAorCWBwb3N0c2NyaXB0X25hbWUnLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfRmFjZV9JbnRlcm5hbFJlYyk6IFJlbW92ZQorCWBwb3N0c2NyaXB0X25hbWUnLgorCUFkZCBgc2VydmljZXMnIGVsZW1lbnQuCisJKEZUX0xpYnJhcnlSZWMpOiBSZW1vdmUgYG1ldGFfY2xhc3MnLgorCisJKiBzcmMvYmFzZS9mdGJkZi5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfQkRGX0guCisJKHRlc3RfZm9udF90eXBlKTogUmVtb3ZlZC4KKwkoRlRfR2V0X0JERl9DaGFyc2V0X0lELCBGVF9HZXRfQkRGX1Byb3BlcnR5KTogVXNlIHNlcnZpY2VzCisJcHJvdmlkZWQgaW4gYEZUX1NFUlZJQ0VfSURfQkRGJy4KKworCSogc3JjL2Jhc2UvZnRtbS5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ILgorCShmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKTogTmV3IGF1eGlsaWFyeSBmdW5jdGlvbiB0byBnZXQgc2VydmljZXMKKwlmcm9tIGBGVF9TRVJWSUNFX0lEX01VTFRJX01BU1RFUlMnLgorCShGVF9HZXRfTXVsdGlfTWFzdGVyLCBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzLAorCUZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcyk6IFVzZSBgZnRfZmFjZV9nZXRfbW1fc2VydmljZScuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0ggYW5kCisJRlRfU0VSVklDRV9HTFlQSF9ESUNUX0guCisJKGZ0X3NlcnZpY2VfbGlzdF9sb29rdXApOiBOZXcgZnVuY3Rpb24gdG8gZ2V0IGEgc3BlY2lmaWMgc2VydmljZS4KKwkoZGVzdHJveV9mYWNlKTogVXBkYXRlZC4KKwkoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IFNpbXBsaWZ5IHNvbWUgY29kZS4KKwkoSXNNYWNSZXNvdXJjZSk6IEZpeCB3YXJuaW5ncy4KKwkoRlRfR2V0X05hbWVfSW5kZXgsIEZUX0dldF9HbHlwaF9OYW1lKTogVXNlIHNlcnZpY2VzIHByb3ZpZGVkIGluCisJYEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCcuCisJKEZUX0dldF9Qb3N0c2NyaXB0X05hbWUpOiBVc2Ugc2VydmljZSBwcm92aWRlZCBpbgorCWBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfTkFNRScuCisJKEZUX0dldF9TZm50X1RhYmxlLCBGVF9Mb2FkX1NmbnRfVGFibGUpOiBVc2Ugc2VydmljZXMgcHJvdmlkZWQgaW4KKwlgRlRfU0VSVklDRV9JRF9TRk5UX1RBQkxFJy4KKworCSogc3JjL2Jhc2UvZnR4Zjg2LmM6IEluY2x1ZGUgRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSC4KKwkoRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCk6IFVzZSBzZXJ2aWNlIHByb3ZpZGVkIGluCisJYEZUX1NFUlZJQ0VfSURfWEY4Nl9OQU1FJy4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfQkRGX0ggYW5kCisJRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSC4KKwkoYmRmX2dldF9jaGFyc2V0X2lkKTogTmV3IGZ1bmN0aW9uLgorCShiZGZfc2VydmljZV9iZGYpOiBOZXcgc3RydWN0dXJlIHByb3ZpZGluZyBCREYgc2VydmljZXMuCisJKGJkZl9zZXJ2aWNlcyk6IE5ldyBzZXJ2aWNlcyBsaXN0LgorCShiZGZfZHJpdmVyX3JlcXVlc3Rlcik6IFVzZSBgZnRfc2VydmljZV9saXN0X2xvb2t1cCcuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9IIGFuZAorCUZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ILgorCShjZmZfc2VydmljZV9nbHlwaF9kaWN0KTogTmV3IHN0cnVjdHVyZSBwcm92aWRpbmcgQ0ZGIHNlcnZpY2VzLgorCShjZmZfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkoY2ZmX2dldF9pbnRlcmZhY2UpOiBVc2UgYGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAnLgorCisJKiBzcmMvY2lkL2NpZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSCBhbmQKKwlGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9ILgorCShjaWRfc2VydmljZV9wc19uYW1lKTogTmV3IHN0cnVjdHVyZSBwcm92aWRpbmcgQ0lEIHNlcnZpY2VzLgorCShjaWRfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkoY2lkX2dldF9pbnRlcmZhY2UpOiBVc2UgYGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAnLgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9CREZfSCBhbmQKKwlGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9ILgorCShwY2Zfc2VydmljZV9iZGYpOiBOZXcgc3RydWN0dXJlIHByb3ZpZGluZyBQQ0Ygc2VydmljZXMuCisJKHBjZl9zZXJ2aWNlcyk6IE5ldyBzZXJ2aWNlcyBsaXN0LgorCShwY2ZfZHJpdmVyX3JlcXVlc3Rlcik6IFVzZSBgZnRfc2VydmljZV9saXN0X2xvb2t1cCcuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9HTFlQSF9ESUNUX0ggYW5kCisJRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSC4KKwkoZ2V0X3NmbnRfZ2x5cGhfbmFtZSk6IFJlbmFtZWQgdG8uLi4KKwkoc2ZudF9nZXRfZ2x5cGhfbmFtZSk6IFRoaXMuCisJKGdldF9zZm50X3Bvc3RzY3JpcHRfbmFtZSk6IFJlbmFtZWQgdG8uLi4KKwkoc2ZudF9nZXRfcHNfbmFtZSk6IFRoaXMuCisJVXBkYXRlZC4KKwkoc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QsIHNmbnRfc2VydmljZV9wc19uYW1lKTogTmV3IHN0cnVjdHVyZXMKKwlwcm92aWRpbmcgc2VydmljZXMuCisJKHNmbnRfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkoc2ZudF9nZXRfaW50ZXJmYWNlKTogVXNlIGBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwJy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSC4KKwkodHRfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkodHRfZ2V0X2ludGVyZmFjZSk6IFVzZSBgZnRfc2VydmljZV9saXN0X2xvb2t1cCcuCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ILAorCUZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ILCBGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9ILCBhbmQKKwlGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ILgorCSh0MV9zZXJ2aWNlX2dseXBoX2RpY3QsIHQxX3NlcnZpY2VfcHNfbmFtZSwKKwl0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMpOiBOZXcgc3RydWN0dXJlcyBwcm92aWRpbmcgVHlwZSAxIHNlcnZpY2VzLgorCSh0MV9zZXJ2aWNlcyk6IE5ldyBzZXJ2aWNlcyBsaXN0LgorCShHZXRfSW50ZXJmYWNlKTogVXNlIGBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwJy4KKworCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfWEZSRUU4Nl9OQU1FX0gsCisJRlRfU0VSVklDRV9HTFlQSF9ESUNUX0gsIGFuZCBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ILgorCSh0NDJfc2VydmljZV9nbHlwaF9kaWN0LCB0NDJfc2VydmljZV9wc19uYW1lKTogTmV3IHN0cnVjdXJlcworCXByb3ZpZGluZyBUeXBlIDQyIHNlcnZpY2VzLgorCSh0NDJfc2VydmljZXMpOiBOZXcgc2VydmljZXMgbGlzdC4KKwkoVDQyX0dldF9JbnRlcmZhY2UpOiBVc2UgYGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAnLgorCisKKwkqIFJFQURNRSwgZG9jcy9DSEFOR0VTOiBVcGRhdGluZyB2ZXJzaW9uIG51bWJlcnMgZm9yIDIuMS42LCBhbmQKKwlyZW1vdmluZyBvYnNvbGV0ZSB3YXJuaW5ncyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gNi4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6NTozLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNvcmUuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZXhjZXB0LmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2JqZWN0Lmg6IFJlbW92ZWQuICBPYnNvbGV0ZS4KKworMjAwMy0wOS0wOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4aW5nIFBGUiBrZXJuaW5nIHN1cHBvcnQuICBUaGUgdGFibGVzIHdpdGhpbiB0aGUgZm9udCBmaWxlIGNvbnRhaW4KKwkoY2hhcmNvZGUsY2hhcmNvZGUpIGtlcm5pbmcgcGFpcnMsIHdlIG5lZWQgdG8gY29udmVydCB0aGVtIHRvCisJKGdpbmRleCxnaW5kZXgpLgorCisJKiBzcmMvYmFzZS9mdHBmci5jIChmdF9wZnJfY2hlY2spOiBGaXggc2VyaW91cyB0eXBvLgorCSogc3JjL3Bmci9wcmZsb2FkLmM6IFJlbW92ZSBkZWFkIGNvZGUuCisJKHBmcl9nZXRfZ2luZGV4LCBwZnJfY29tcGFyZV9rZXJuX3BhaXJzLCBwZnJfc29ydF9rZXJuaW5nX3BhaXJzKToKKwlOZXcgZnVuY3Rpb25zLgorCShwZnJfcGh5X2ZvbnRfZG9uZSk6IEZyZWUgYGtlcm5fcGFpcnMnLgorCShwZnJfcGh5X2ZvbnRfbG9hZCk6IENhbGwgYHBmcl9zb3J0X2tlcm5pbmdfcGFpcnMnLgorCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2dldF9rZXJuaW5nKTogRml4IGtlcm5pbmcgZXh0cmFjdGlvbi4KKwkqIHNyYy9wZnIvcGZydHlwZXMuaCAoUEZSX0tFUk5fUEFJUl9JTkRFWCk6IE5ldyBtYWNyby4KKwkoUEZSX0tlcm5QYWlyUmVjKTogTWFrZSBga2VybmluZycgYW4gRlRfSW50LgorCShQRlJfUGh5Rm9udFJlYyk6IE5ldyBlbGVtZW50IGBrZXJuX3BhaXJzJy4KKwkoUEZSX0tlcm5GbGFncyk6IFZhbHVlcyBvZiBQRlJfS0VSTl8yQllURV9DSEFSIGFuZAorCVBGUl9LRVJOXzJCWVRFX0FESiB3ZXJlIGVycm9uZW91c2x5IHJldmVyc2VkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3B0aW9uLmg6IENvbW1lbnRpbmcgb3V0IHRoZSBtYWNybworCVRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIuCisKKzIwMDMtMDktMDIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMS41IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyMDAzLTA4LTMxICBNYW5pc2ggU2luZ2ggIDx5b3NoQGdpbXAub3JnPgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3JlYWRzdHJlYW0pOiBEb24ndCB1c2UgRlRfTUVNX0NPUFkgYnV0CisJRlRfTUVNX01PVkUuCisKKzIwMDMtMDgtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9FTkNPRElOR19TSklTLCBGVF9FTkNPRElOR19HQjIzMTIsCisJRlRfRU5DT0RJTkdfQklHNSwgRlRfRU5DT0RJTkdfV0FOU1VORywgRlRfRU5DT0RJTkdfSk9IQUIpOiBOZXcKKwllbnVtZXJhdGlvbnMgb2YgRlRfRW5jb2RpbmcuICBUaGUgRlRfRU5DT0RJTkdfTVNfKiB2YXJpYW50cyBleGNlcHQKKwlGVF9FTkNPRElOR19NU19TWU1CT0wgYXJlIG5vdyBkZXByZWNhdGVkLgorCVVwZGF0ZWQgYWxsIHVzZXJzLgorCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwMy0wOC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBBY2NlcHQgbG93ZXJjYXNlIGNoYXJhY3RlcnMKKwlmb3Igc3BhY2luZy4KKworMjAwMy0wOC0yNyAgTWlrZSBGQUJJQU4gIDxtZmFiaWFuQHN1c2UuZGU+CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfbG9hZF9mb250KSwgc3JjL2JkZi9iZGZkcml2ci5jCisJKEJERl9GYWNlX0luaXQpOiBBY2NlcHQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgZm9yIHNsYW50IGFuZCB3ZWlnaHQuCisKKzIwMDMtMDgtMTggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDogRGlzYWJsaW5nIFRydWVUeXBlIGJ5dGVjb2RlCisJaW50ZXJwcmV0ZXIgdW50aWwgdGhlIFVOUEFURU5URURfSElOVElORyB3b3JrcyBhcyBhZHZlcnRpc2VkLgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkX2dseXBoKTogVXNlIGB8JyBmb3IKKwlzZXR0aW5nIGBsb2FkX2ZsYWdzJy4KKworCSogSmFtZmlsZTogQWRkaW5nIHRoZSBgcmVmZG9jJyB0YXJnZXQgdG8gdGhlIEphbWZpbGUgaW4gb3JkZXIgdG8KKwlidWlsZCB0aGUgQVBJIFJlZmVyZW5jZSBpbiBgZG9jcy9yZWZlcmVuY2UnIGF1dG9tYXRpY2FsbHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaCAoUFNfRm9udEluZm9SZWMpLCBzcmMvY2lkL2NpZHRva2VuLmgsCisJc3JjL3R5cGUxL3QxdG9rZW5zLmgsIHNyYy90eXBlNDIvdDQycGFyc2UuYzogUmVzZXR0aW5nIHRoZSB0eXBlcyBvZgorCWBpdGFsaWNfYW5nbGUnLCBgdW5kZXJsaW5lX3Bvc2l0aW9uJywgYW5kIGB1bmRlcmxpbmVfdGhpY2tuZXNzJyB0bworCXRoZWlyIHByZXZpb3VzIHZhbHVlcyAoaS5lLiwgbG9uZywgc2hvcnQsIGFuZCB1c2hvcnQpIGluIG9yZGVyIHRvCisJYXZvaWQgYnJlYWtpbmcgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR1bnBhdC5oOiBGaXhpbmcgZG9jdW1lbnRhdGlvbiBjb21tZW50LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCBkZXZlbC9mdG9wdGlvbi5oCisJKFRUX0NPTkZJR19PUFRJT05fT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HKTogUmVwbGFjZWQKKwl3aXRoLi4uCisJKFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HKTogVGhpcy4gIFVwZGF0ZWQgYWxsIHVzZXJzLgorCShUVF9DT05GSUdfT1BUSU9OX0ZPUkNFX1VOUEFURU5URURfSElOVElORyk6IFJlbW92ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0RFQlVHX0hPT0tfVFlQRTEpOiBSZW1vdmVkLgorCShGVF9ERUJVR19IT09LX1VOUEFURU5URURfSElOVElORyk6IE5ldyBtYWNyby4gIFVzZSB0aGlzIHdpdGgKKwlgRlRfU2V0X0RlYnVnX0hvb2snIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIHJlbW92ZWQKKwlUVF9DT05GSUdfT1BUSU9OX0ZPUkNFX1VOUEFURU5URURfSElOVElORy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBVc2UKKwlgRlRfREVCVUdfSE9PS19VTlBBVEVOVEVEX0hJTlRJTkcnLgorCisyMDAzLTA4LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpLCBzcmMvY2ZmL2NmZmdsb2FkLmMKKwkoY2ZmX3Nsb3RfbG9hZCksIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX3Nsb3RfbG9hZF9nbHlwaCk6IEZpeAorCXByZXZpb3VzIGNoYW5nZS4KKworMjAwMy0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKSwgc3JjL2NmZi9jZmZnbG9hZC5jCisJKGNmZl9zbG90X2xvYWQpLCBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9zbG90X2xvYWRfZ2x5cGgpOiBBcHBseQorCWZvbnQgbWF0cml4IHRvIGFkdmFuY2Ugd2lkdGggYWxzby4KKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMy0wNy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWMgKHZlcnNpb25faW5mbyk6IFNldCB0byA5OjQ6My4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogVXBkYXRlZC4KKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9HbHlwaFNsb3QpOiBDaGFuZ2UgMjAwMy0wNi0xNgorCWFsc28gYnJlYWtzIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgUmVpbnRyb2R1Y2UgYW4gdW5zaWduZWQgaW50ZWdlcgorCWF0IHRoZSBvbGQgcG9zaXRpb24gb2YgYGZsYWdzJyBjYWxsZWQgYHJlc2VydmVkJy4KKworMjAwMy0wNy0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBBUEkgcmVmZXJlbmNlIHZhbGlkIEhUTUwgNC4wMSB0cmFuc2l0aW9uYWwuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKGh0bWxfaGVhZGVyXzEpOiBBZGQgZG9jdHlwZQorCWFuZCBjaGFyc2V0LgorCShodG1sX2hlYWRlcl8yKTogRml4IHN0eWxlIGVsZW1lbnRzIGFuZCBhZGQgc29tZSBtb3JlLgorCUZpeCBzeW50YXguCisJKGJsb2NrX2hlYWRlciwgYmxvY2tfZm9vdGVyLCBkZXNjcmlwdGlvbl9oZWFkZXIsIGRlc2NyaXB0aW9uX2Zvb3RlciwKKwltYXJrZXJfaGVhZGVyLCBtYXJrZXJfZm9vdGVyLCBzb3VyY2VfaGVhZGVyLCBzb3VyY2VfZm9vdGVyLAorCWNoYXB0ZXJfaGVhZGVyKTogRG9uJ3QgdXNlIDxjZW50ZXI+Li4uPC9jZW50ZXI+IGJ1dCBgYWxpZ249Y2VudGVyJworCXRhYmxlIGF0dHJpYnV0ZS4KKwkoY2hhcHRlcl9pbnRlciwgY2hhcHRlcl9mb290ZXIpOiBBZGQgPGxpPiBhbmQgdXNlIHNwZWNpYWwgPHVsPgorCWNsYXNzLgorCVVzZSBkb3VibGUgcXVvdGVzIGFyb3VuZCB0YWJsZSB3aWR0aHMgZ2l2ZW4gaW4gcGVyY2VudC4KKwkoa2V5d29yZF9wcmVmaXgsIGtleXdvcmRfc3VmZml4KTogRG9uJ3QgY2hhbmdlIGZvbnQgY29sb3VyIGRpcmVjdGx5CisJYnV0IHVzZSBhIG5ldyA8c3Bhbj4gY2xhc3MuCisJKHNlY3Rpb25fc3lub3BzaXNfaGVhZGVyLCBzZWN0aW9uX3N5bm9wc2lzX2Zvb3Rlcik6IERvbid0IGNoYW5nZQorCWNvbG91ci4KKwkoY29kZV9oZWFkZXIsIGNvZGVfZm9vdGVyKTogRG9uJ3QgY2hhbmdlIGZvbnQgY29sb3VyIGRpcmVjdGx5IGJ1dAorCXVzZSBhIHNwZWNpYWwgPHByZT4gY2xhc3MuCisJKHByaW50X2h0bWxfZmllbGQpOiA8dHI+IGdldHMgdGhlIGB2YWxpZ24nIGF0dHJpYnV0ZSwgbm90IDx0YWJsZT4uCisJKHByaW50X2h0bWxfZmllbGRfbGlzdCk6IERpdHRvLgorCShpbmRleF9leGl0KTogRG9uJ3QgdXNlIDxjZW50ZXI+Li4uPC9jZW50ZXI+IGJ1dCBgYWxpZ249Y2VudGVyJworCXRhYmxlIGF0dHJpYnV0ZS4KKwkoc2VjdGlvbl9lbnRlcik6IERpdHRvLgorCSh0b2NfZXhpdCk6IERvbid0IGVtaXQgPC90YWJsZT4uCisJKGJsb2NrX2VudGVyKTogVXNlIDxoND48YT4sIG5vdCA8YT48aDQ+LgorCShfX2luaXRfXyk6IEZpeCB0YWcgb3JkZXIgaW4gc2VsZi5odG1sX2Zvb3Rlci4KKworMjAwMy0wNy0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJVGhpcyBjaGFuZ2UgcmVpbXBsZW1lbnRzIGZpeCBmcm9tIDIwMDMtMDUtMzAgd2l0aG91dCBicmVha2luZworCWJpbmFyeSBjb21wYXRpYmlsaXR5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmggKFBTX0ZvbnRJbmZvUmVjKTogYGl0YWxpY19hbmdsZScsCisJYGlzX2ZpeGVkX3BpdGNoJywgYHVuZGVybGluZV9wb3NpdGlvbicsIGB1bmRlcmxpbmVfdGhpY2tuZXNzJyBhcmUKKwlyZXZlcnRlZCB0byBiZSBub3JtYWwgdmFsdWVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0ZpZWxkVHlwZSk6IFJlbW92ZQorCWBUMV9GSUVMRF9UWVBFX0JPT0xfUCcsIGBUMV9GSUVMRF9UWVBFX0lOVEVHRVJfUCcsCisJYFQxX0ZJRUxEX1RZUEVfRklYRURfUCcsIGBUMV9GSUVMRF9UWVBFX0ZJWEVEXzEwMDBfUCcuCisJKFQxX0ZJRUxEX1RZUEVfQk9PTF9QLCBUMV9GSUVMRF9OVU1fUCwgVDFfRklFTERfRklYRURfUCwKKwlUMV9GSUVMRF9GSVhFRF8xMDAwX1ApOiBSZW1vdmVkLgorCShUMV9GSUVMRF9UWVBFX0JPT0wpOiBSZW5hbWVkIHRvLi4uCisJKFQxX0ZJRUxEX0JPT0wpOiBOZXcgbWFjcm8uICBVcGRhdGVkIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmM6IGBpdGFsaWNfYW5nbGUnLCBgaXNfZml4ZWRfcGl0Y2gnLAorCWB1bmRlcmxpbmVfcG9zaXRpb24nLCBgdW5kZXJsaW5lX3RoaWNrbmVzcycsIGBwYWludF90eXBlJywKKwlgc3Ryb2tlX3dpZHRoJyBhcmUgcmV2ZXJ0ZWQgdG8gYmUgbm9ybWFsIHZhbHVlcy4KKwkoVDQyX0tFWVdPUkRfQ09VTlQpOiBOZXcgbWFjcm8uCisJKHQ0Ml9wYXJzZV9kaWN0KTogTmV3IGFycmF5IGBrZXl3b3JkX2ZsYWdzJyB0byBtYXJrIHRoYXQgYSB2YWx1ZSBoYXMKKwlhbHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gYSBkaWN0aW9uYXJ5IGVudHJ5LgorCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQsIFQ0Ml9GYWNlX0RvbmUpOiBVcGRhdGVkLgorCisJKiBzcmMvY2lkL2NpZHRva2VuLmg6IGBpdGFsaWNfYW5nbGUnLCBgaXNfZml4ZWRfcGl0Y2gnLAorCWB1bmRlcmxpbmVfcG9zaXRpb24nLCBgdW5kZXJsaW5lX3RoaWNrbmVzcycgYXJlIHJldmVydGVkIHRvIGJlCisJbm9ybWFsIHZhbHVlcy4KKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChjaWRfZmFjZV9kb25lLCBjaWRfZmFjZV9pbml0KTogVXBkYXRlZC4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19wYXJzZXJfbG9hZF9maWVsZCk6IFVwZGF0ZWQuCisKKwkqIHNyYy90eXBlMS90MXRva2Vucy5oOiBgaXRhbGljX2FuZ2xlJywgYGlzX2ZpeGVkX3BpdGNoJywKKwlgdW5kZXJsaW5lX3Bvc2l0aW9uJywgYHVuZGVybGluZV90aGlja25lc3MnLCBgcGFpbnRfdHlwZScsCisJYHN0cm9rZV93aWR0aCcgYXJlIHJldmVydGVkIHRvIGJlIG5vcm1hbCB2YWx1ZXMuCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfRG9uZSwgVDFfRmFjZV9Jbml0KTogVXBkYXRlZC4KKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfRklFTERfQ09VTlQpOiBOZXcgbWFjcm8uCisJKHBhcnNlX2RpY3QpOiBBZGQgcGFyYW1ldGVyIGZvciBrZXl3b3JkIGZsYWdzLgorCVJlY29yZCBvbmx5IGZpcnN0IGluc3RhbmNlIG9mIGEgZmllbGQuCisJKFQxX09wZW5fRmFjZSk6IE5ldyBhcnJheSBga2V5d29yZF9mbGFncycuCisKKzIwMDMtMDctMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA1LgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTA6MDozLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBVcGRhdGVkLgorCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpOiBGaXggLS10aXRsZS4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL1ZFUlNJT04uRExMLCBSRUFETUU6IFVwZGF0ZWQuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5IChyZV9jcm9zc3JlZik6IEZpeCByZWd1bGFyCisJZXhwcmVzc2lvbiB0byBoYW5kbGUgdHJhaWxpbmcgcHVuY3R1YXRpb24gY2hhcmFjdGVycy4KKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKG1ha2VfaHRtbF93b3JkKTogVXBkYXRlZC4KKworCSogZG9jcy9yZWxlYXNlOiBOZXcgZmlsZS4KKworMjAwMy0wNy0yMyAgWUFNQU5PLVVDSEkgSGlkZXRvc2hpICA8bWVyQGRpbi5vci5qcD4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChQU19QYXJzZXJfRnVuY3NSZWMpOiBOZXcKKwltZW1iZXIgZnVuY3Rpb24gYHRvX2J5dGVzJy4KKworCSogc3JjL3BzYXV4L3BzYXV4bW9kLmMgKHBzX3BhcnNlcl9mdW5jcyk6IE5ldyBtZW1iZXIKKwlgcHNfcGFyc2VyX3RvX2J5dGVzJy4KKwkocHNhdXhfbW9kdWxlX2NsYXNzKTogSW5jcmVhc2UgdmVyc2lvbiB0byAweDIwMDAwTC4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChJU19UMV9MSU5FU1BBQ0UpOiBBZGQgXGYuCisJKElTX1QxX05VTExTUEFDRSk6IE5ldyBtYWNyby4KKwkoSVNfVDFfU1BBQ0UpOiBBZGQgaXQuCisJKHNraXBfc3BhY2VzLCBza2lwX2FscGhhKTogTmV3IGZ1bmN0aW9ucy4KKwkocHNfcGFyc2VyX3NraXBfc3BhY2VzLCBwc19wYXJzZXJfc2tpcF9hbHBoYSk6IFVzZSB0aGVtLgorCShwc190b2J5dGVzLCBwc19wYXJzZXJfdG9fYnl0ZXMpOiBOZXcgZnVuY3Rpb25zLgorCisyMDAzLTA3LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoRE9DX0RJUik6IE5ldyB2YXJpYWJsZS4KKwkocmVmZG9jKTogVXNlICpfRElSIHZhcmlhYmxlcy4KKwkoZGlzdGNsZWFuKTogUmVtb3ZlIGRvY3VtZW50YXRpb24gZmlsZXMuCisKKwkqIGJ1aWxkcy9kZXRlY3QubWsgKHN0ZF9zZXR1cCwgZG9zX3NldHVwKTogTWVudGlvbiBgbWFrZSByZWZkb2MnLgorCisJKiBjb25maWd1cmU6IFNldCBET0NfRElSIHZhcmlhYmxlLgorCisyMDAzLTA3LTA3ICBQYXRyaWsgSMOkZ2dsdW5kICA8cGF0cmlrLmhhZ2dsdW5kQGJyZWRiYW5kLm5ldD4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpOiBOZXcgdGFyZ2V0IHRvIGJ1aWxkIHRoZQorCWRvY3VtZW50YXRpb24uCisJKC5QSE9OWSk6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEZUX0NoYXJNYXAuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UsaDogRml4IGRvY3VtZW50YXRpb24gb2YgRlRfT1VUTElORV9GTEFHUy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaDogRG9jdW1lbnQgRlRfU2ZudF9UYWcuCisKKzIwMDMtMDctMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KSwgc3JjL3BjZi9wY2ZyZWFkLmMKKwkocGNmX2xvYWRfZm9udCk6IEZpeCBjb21wdXRhdGlvbiBvZiBoZWlnaHQgaWYgUElYRUxfU0laRSBwcm9wZXJ0eSBpcworCW1pc3NpbmcuCisKKzIwMDMtMDctMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKGZ0Y19zYml0X25vZGVfY29tcGFyZSk6IE9ubHkgYWRkIGBzaXplJyBpZgorCXRoZXJlIGlzIG5vIGVycm9yLiAgUmVwb3J0ZWQgYnkgS251dCBTdC4gT3NtdW5kc2VuCisJPGJpcmQtZnJlZXR5cGVAYW5kdWluLm5ldD4uCisKKzIwMDMtMDYtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUEgbmV3IHRyeSB0byBzeW5jaHJvbml6ZSBiaXRtYXAgZm9udCBhY2Nlc3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfQml0bWFwX1NpemUpOiBgaGVpZ2h0JyBpcyBub3cKKwlkZWZpbmVkIHRvIHJldHVybiB0aGUgYmFzZWxpbmUtdG8tYmFzZWxpbmUgZGlzdGFuY2UuICBUaGlzIHdhcworCWFscmVhZHkgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBCREYgYW5kIFBDRiBkcml2ZXJzLgorCisJVGhlIGB3aWR0aCcgZmllbGQgbm93IGdpdmVzIHRoZSBhdmVyYWdlIHdpZHRoLiAgSSB3YXNuJ3QgYWJsZSB0bworCWZpbmQgc29tZXRoaW5nIGJldHRlci4gIEl0IHNob3VsZCBiZSB0YWtlbiBhcyBpbmZvcm1hdGl2ZSBvbmx5LgorCisJTmV3IGZpZWxkcyBgc2l6ZScsIGB4X3BwZW0nLCBhbmQgYHlfcHBlbScuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfbG9hZF9mb250KTogVXBkYXRlZCB0byBwcm9wZXJseSBmaWxsCisJRlRfQml0bWFwX1NpemUuCisJRG8gcHJvcGVyIHJvdW5kaW5nIGFuZCBjb252ZXJzaW9uIGZyb20gNzIuMjcgdG8gNzIgcG9pbnRzLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBVcGRhdGVkIHRvIHByb3Blcmx5IGZpbGwKKwlGVF9CaXRtYXBfU2l6ZS4KKwlEbyBwcm9wZXIgcm91bmRpbmcgYW5kIGNvbnZlcnNpb24gZnJvbSA3Mi4yNyB0byA3MiBwb2ludHMuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFVwZGF0ZWQgdG8gcHJvcGVybHkgZmlsbAorCUZUX0JpdG1hcF9TaXplLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBVcGRhdGVkIHRvIHByb3Blcmx5IGZpbGwKKwlGVF9CaXRtYXBfU2l6ZS4KKworMjAwMy0wNi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVkZXNpZ25pbmcgdGhlIEZOVCBkcml2ZXIgdG8gcmV0dXJuIG11bHRpcGxlIGZhY2VzLCBub3QgbXVsdGlwbGUKKwlzdHJpa2VzLiAgQXQgbGVhc3Qgb25lIGZvbnQgKGFwcDg1MC5mb24gZnJvbSBXaW5NRSkgY29udGFpbnMKKwlkaWZmZXJlbnQgRk5UIGNoYXJtYXBzIGZvciBpdHMgc3ViZm9udHMuICBDb25zZXF1ZW50bHksIHRoZSBwcmV2aW91cworCWRlc2lnbiBvZiBoYXZpbmcgbXVsdGlwbGUgYml0bWFwIHN0cmlrZXMgaW4gYSBzaW5nbGUgZm9udCBmYWNlIGZhaWxzCisJc2luY2Ugd2UgaGF2ZSBvbmx5IG9uZSBjaGFybWFwIHBlciBmYWNlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ZudHR5cGVzLmggKEZOVF9TaXplX1JlYyk6IFJlbW92ZWQuCisJKEZOVF9GYWNlUmVjKTogUmVtb3ZlIGBudW1fZm9udHMnIGZpZWxkIGFuZCByZXBsYWNlIGBmb250cycgd2l0aAorCWBmb250Jy4KKworCSogc3JjL2Jhc2UvZnR3aW5mbnQuYyAoRlRfR2V0X1dpbkZOVF9IZWFkZXIpOiBVcGRhdGVkLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKGZudF9mb250X2xvYWQpOiBEb24ndCBzZXQgcGl4ZWxfd2lkdGggZXF1YWwKKwl0byBwaXhlbF9oZWlnaHQuCisJKGZudF9mYWNlX2RvbmVfZm9udHMpOiBSZW1vdmVkLgorCShmbnRfZmFjZV9nZXRfZGxsX2ZvbnRzKTogUmVuYW1lZCB0by4uLgorCShmbnRfZmFjZV9nZXRfZGxsX2ZvbnQpOiBUaGlzLiAgQWRkIHNlY29uZCBmdW5jdGlvbiBhcmd1bWVudCB0bworCXNlbGVjdCBmYWNlIGluZGV4LgorCVVwZGF0ZWQgdG8gbG9hZCBqdXN0IG9uZSBzdWJmb250LgorCShmbnRfZm9udF9kb25lLCBGTlRfRmFjZV9Eb25lKTogVXBkYXRlZC4KKwkoRk5UX0ZhY2VfSW5pdCk6IEhhbmRsZSBgZmFjZV9pbmRleCcuCisJVXBkYXRlZC4KKwkoRk5UX1NpemVfU2V0X1BpeGVscyk6IFNpbXBsaWZpZWQ7IHNpbWlsYXIgdG8gQkRGIGFuZCBQQ0YsIHRoZQorCWJpdG1hcCB3aWR0aCBpcyBub3cgaWdub3JlZC4KKwkoRk5UX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCUZpeCBnbHlwaCBpbmRleCBjb21wdXRhdGlvbi4KKwkod2luZm50X2RyaXZlcl9jbGFzcyk6IFVwZGF0ZWQuCisKKzIwMDMtMDYtMjUgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBEb24ndCBhc3NpZ24KKwludW1fcmVjb3JkcyB1bnRpbCB3ZSBhY3R1YWxseSBkZWNpZGUgdG8gbG9hZCB0aGUgdGFibGUsCisJb3RoZXJ3aXNlLCB3ZSdsbCBzZWdmYXVsdCBpbiB0dF9mYWNlX2ZyZWVfaGRteC4KKworMjAwMy0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfZ2x5cGhfbmFtZSk6IFByb3RlY3QgYWdhaW5zdCB6ZXJvCisJZ2x5cGggbmFtZSBwb2ludGVyLiAgUmVwb3J0ZWQgYnkgTWlrZXkgQW5iYXJ5IDxtYW5iYXJ5QHZpenJ0LmNvbT4uCisKKzIwMDMtMDYtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHk6IFVwZGF0ZWQgdG8gQUdMIDIuMC4KKwkqIHNyYy9wc25hbWVzL3BzdGFibGVzLmg6IFJlZ2VuZXJhdGVkLgorCisyMDAzLTA2LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjZ2x5cGguaCwgaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oLAorCXNyYy9iYXNlL2Z0Y2FsYy5jLCBzcmMvYmFzZS9mdHRyaWdvbi5jLCBzcmMvY2ZmL2NmZmdsb2FkLmMsCisJc3JjL290bGF5b3V0L290bGdzdWIuYywgc3JjL3BzaGludGVyL3BzaHJlYy5jLAorCXNyYy9wc25hbWVzL3BzbW9kdWxlLmMsIHNyYy9zZm50L3Nmb2Jqcy5jLCBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzoKKwlEZWNvcmF0ZSBjb25zdGFudHMgd2l0aCBgVScgYW5kIGBMJyBpZiBhcHByb3ByaWF0ZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oOiBVcGRhdGVkIHRvIGluY2x1ZGUgcmVjZW50IG1vZHVsZQorCWFkZGl0aW9ucy4KKworCSogc3JjL3BzaGludGVyL3BzaG50ZXJyLmggKEZUX0VSUl9CQVNFKTogRGVmaW5lIGFzCisJYEZUX01vZF9FcnJfUFNoaW50ZXInLgorCSogc3JjL3R5cGU0Mi90NDJlcnJvci5oIChGVF9FUlJfQkFTRSk6IERlZmluZSBhcworCWBGVF9Nb2RfRXJyX1R5cGU0MicuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hyZWMuaCAoUFNfSElOVFNfTUFHSUMpOiBSZW1vdmVkLiAgTm90IHVzZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggW19fTVdFUktTX19dOiBEZWZpbmUgRlRfTE9ORzY0CisJYW5kIEZUX0lOVDY0LgorCisyMDAzLTA2LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpOiBVc2UgZmlyc3RfY2hhciBpbgorCWNvbXB1dGF0aW9uIG9mIGdseXBoX2luZGV4LgorCShGTlRfU2l6ZV9TZXRfUGl4ZWxzKTogVG8gZmluZCBhIHN0cmlrZSwgZmlyc3QgY2hlY2sgcGl4ZWxfaGVpZ2h0CisJb25seSwgdGhlbiB0cnkgdG8gZmluZCBhIGJldHRlciBoaXQgYnkgY29tcGFyaW5nIHBpeGVsX3dpZHRoIGFsc28uCisJV2l0aG91dCB0aGlzIGZpeCBpdCBpc24ndCBwb3NzaWJsZSB0byBhY2Nlc3MgYWxsIHN0cmlrZXMuCisJQWxzbyBjb21wdXRlIG1ldHJpY3MubWF4X2FkdmFuY2UgdG8gYmUgaW4gc3luYyB3aXRoIG90aGVyIGJpdG1hcAorCWRyaXZlcnMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcl9TaXplKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgorCShGVF9TZXRfUGl4ZWxfU2l6ZSk6IEFzc2lnbiB2YWx1ZSB0byBgbWV0cmljcycgYWZ0ZXIgdmFsaWRhdGlvbiBvZgorCWFyZ3VtZW50cy4KKworMjAwMy0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJU3luY2hyb25pemUgY29tcHV0YXRpb24gb2YgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgYml0bWFwIHN0cmlrZXMuICBUaGUKKwlgd2lkdGgnIGZpZWxkIGluIHRoZSBGVF9CaXRtYXBfU2l6ZSBzdHJ1Y3R1cmUgaXMgbm93IG9ubHkgdXNlZnVsIHRvCisJZW51bWVyYXRlIGRpZmZlcmVudCBzdHJpa2VzLiAgVGhlIGBtYXhfYWR2YW5jZScgZmllbGQgb2YgdGhlCisJRlRfU2l6ZV9NZXRyaWNzIHN0cnVjdHVyZSBzaG91bGQgYmUgdXNlZCB0byBnZXQgdGhlIChtYXhpbXVtKSB3aWR0aAorCW9mIGEgc3RyaWtlLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBEb24ndCB1c2UgQVZFUkFHRV9XSURUSCBmb3IKKwljb21wdXRpbmcgYGF2YWlsYWJsZV9zaXplcy0+d2lkdGgnIGJ1dCBtYWtlIGl0IGFsd2F5cyBlcXVhbCB0bworCWBhdmFpbGFibGVfc2l6ZXMtPmhlaWdodCcuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfbG9hZF9mb250KTogRG9uJ3QgdXNlIFJFU09MVVRJT05fWCBmb3IKKwljb21wdXRpbmcgYGF2YWlsYWJsZV9zaXplcy0+d2lkdGgnIGJ1dCBtYWtlIGl0IGFsd2F5cyBlcXVhbCB0bworCWBhdmFpbGFibGVfc2l6ZXMtPmhlaWdodCcuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChTZXRfUGl4ZWxfU2l6ZXMpOiBQYXNzIG9ubHkgc2luZ2xlCisJYXJndW1lbnQgdG8gZnVuY3Rpb24uCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzX3VuaWNvZGVfdmFsdWUpOiBIYW5kbGUgYC4nIGFmdGVyCisJYHVuaVhYWFgnIGFuZCBgdVhYWFhbWFtYXV0nLgorCisyMDAzLTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYzogcy9GVF9FcnJfL0JERl9FcnIvLgorCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMsIHNyYy9jYWNoZS9mdGNzYml0cy5jLCBzcmMvY2FjaGUvZnRscnUuYzoKKwlzL0ZUX0Vycl8vRlRDX0Vycl8vLgorCSogc3JjL2NmZi9jZmZjbWFwLmM6IHMvRlRfRXJyXy9DRkZfRXJyXy8uCisJKiBzcmMvcGNmL3BjZmRyaXZyLmM6IHMvRlRfRXJyXy9QQ0ZfRXJyXy8uCisJKiBzcmMvcHNhdXgvdDFjbWFwLmM6IEluY2x1ZGUgcHNhdXhlcnIuaC4KKwlzL0ZUX0Vycl8vUFNhdXhfRXJyXy8uCisJKiBzcmMvcHNoaW50ZXIvcHNobnRlcnIuaDogTmV3IGZpbGUuCisJKiBzcmMvcHNoaW50ZXIvcnVsZXMubWs6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jLCBzcmMvcHNoaW50ZXIvcHNocmVjLmM6IEluY2x1ZGUgcHNobnRlcnIuaC4KKwlzL0ZUX0Vycl8vUFNIX0Vycl8vLgorCSogc3JjL3Bmci9wZnJkcml2ci5jLCBzcmMvcGZyL3Bmcm9ianMuYywgc3JjL3Bmci9wZnJzYml0LmM6CisJcy9GVF9FcnJfL1BGUl9FcnJfLy4KKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMsIHNyYy9zZm50L3Nmb2Jqcy5jLCBzcmMvc2ZudC90dGNtYXAwLmMsCisJc3JjL3NmbnQvdHRsb2FkLmM6IHMvRlRfRXJyXy9TRk5UX0Vycl8vLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogcy9GVF9FcnJfL1RUX0Vycl8vLgorCSogc3JjL2d6aXAvZnRnemlwLmM6IExvYWQgRlRfTU9EVUxFX0VSUk9SU19IIGFuZCBkZWZpbmUKKwlGVF9FUlJfUFJFRklYIGFuZCBGVF9FUlJfQkFTRS4KKwlzL0ZUX0Vycl8vR3ppcF9FcnJfLy4KKworMjAwMy0wNi0xOSAgRGlyY2sgQmxhc2tleSAgPGxpc3R0YXJnZXRAZGFuYmFsYS5jb20+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZCAoY2ZmX2VuY29kaW5nX2xvYWQpOiBgbmxlZnQnIG11c3QgYmUgRlRfVUludCwKKwlvdGhlcndpc2UgYWRkaW5nIDEgbWlnaHQgd3JhcCB0aGUgcmVzdWx0LgorCisyMDAzLTA2LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzX3VuaWNvZGVfdmFsdWUpOiBBZGQgc3VwcG9ydCB0bworCXJlY29nbml6ZSBgdVhYWFhbWFtYXV0nIGdseXBoIG5hbWVzLgorCURvbid0IGhhbmRsZSBnbHlwaCBuYW1lcyBzdGFydGluZyB3aXRoIGB1bmknIHdoaWNoIGhhdmUgbW9yZSB0aGFuCisJZm91ciBkaWdpdHMuCisKKzIwMDMtMDYtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9PcGVuX0ZsYWdzKTogUmVwbGFjZWQgd2l0aAorCSNkZWZpbmVzIGZvciB0aGUgY29uc3RhbnRzLgorCShGVF9PcGVuX0FyZ3MpOiBDaGFuZ2UgdHlwZSBvZiBgZmxhZ3MnIHRvIEZUX1VJbnQuCisJKEZUX0dseXBoU2xvdCk6IE1vdmUgYGZsYWdzJyB0byBGVF9TbG90X0ludGVybmFsLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCAoRlRfT3V0bGluZV9GbGFncywgRlRfUmFzdGVyX0ZsYWcpOgorCVJlcGxhY2VkIHdpdGggI2RlZmluZXMgZm9yIHRoZSBjb25zdGFudHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1Nsb3RfSW50ZXJuYWwpOiBOZXcKKwlmaWVsZCBgZmxhZ3MnIChmcm9tIEZUX0dseXBoU2xvdCkuCisJVXBkYXRlZCBhbGwgYWZmZWN0ZWQgc291cmNlIGZpbGVzLgorCShGVF9HTFlQSF9PV05fQklUTUFQKTogTmV3IG1hY3JvIChmcm9tIGZ0Z2xvYWRyLmgpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmggKEZUX0dMWVBIX09XTl9CSVRNQVApOiBNb3ZlZAorCXRvIGZ0b2Jqcy5oLgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX1RvX0JpdG1hcCk6IFVzZSBkdW1teQorCUZUX0dseXBoU2xvdF9JbnRlcm5hbCBvYmplY3QuCisKKzIwMDMtMDYtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2NvbXBpbGVyL2djYy5taywgYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsgKENGTEFHUyk6CisJQWRkIC1mbm8tc3RyaWN0LWFsaWFzaW5nIHRvIGdldCByaWQgb2YgemlsbGlvbiB3YXJuaW5ncyBmcm9tIGdjYworCXZlcnNpb24gMy4zLgorCisyMDAzLTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oIChmdF9nbHlwaF9iYm94X3Vuc2NhbGVkLAorCWZ0X2dseXBoX2Jib3hfc3VicGl4ZWxzLCBmdF9nbHlwaF9iYm94X2dyaWRmaXQsCisJZnRfZ2x5cGhfYmJveF90cnVuY2F0ZSwgZnRfZ2x5cGhfYmJveF9waXhlbHMpOiBSZXBsYWNlZCB3aXRoCisJRlRfR0xZUEhfQkJPWF9VTlNDQUxFRCwgRlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMsCisJRlRfR0xZUEhfQkJJWF9HUklERklULCBGVF9HTFlQSF9CQk9YX1RSVU5DQVRFLCBGVF9HTFlQSF9CQk9YX1BJWEVMUy4KKwlUaGUgbG93ZXJjYXNlIHZhcmlhbnRzIGFyZSBub3cgKGRlcHJlY2F0ZWQgYWxpYXNlcykgdG8gdGhlIHVwcGVyY2FzZQorCXZlcnNpb25zLgorCVVwZGF0ZWQgYWxsIG90aGVyIGZpbGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kdWxlLmggKGZ0X21vZHVsZV9mb250X2RyaXZlciwKKwlmdF9tb2R1bGVfcmVuZGVyZXIsIGZ0X21vZHVsZV9oaW50ZXIsIGZ0X21vZHVsZV9zdHlsZXIsCisJZnRfbW9kdWxlX2RyaXZlcl9zY2FsYWJsZSwgZnRfbW9kdWxlX2RyaXZlcl9ub19vdXRsaW5lcywKKwlmdF9tb2R1bGVfZHJpdmVyX2hhc19oaW50ZXIpOiBSZXBsYWNlZCB3aXRoIEZUX01PRFVMRV9GT05UX0RSSVZFUiwKKwlGVF9NT0RVTEVfUkVOREVSRVIsIEZUX01PRFVMRV9ISU5URVIsIEZUX01PRFVMRV9TVFlMRVIsCisJRlRfTU9EVUxFX0RSSVZFUl9TQ0FMQUJMRSwgRlRfTU9EVUxFX0RSSVZFUl9OT19PVVRMSU5FUywKKwlGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIuCisJVGhlIGxvd2VyY2FzZSB2YXJpYW50cyBhcmUgbm93IChkZXByZWNhdGVkIGFsaWFzZXMpIHRvIHRoZSB1cHBlcmNhc2UKKwl2ZXJzaW9ucy4KKwlVcGRhdGVkIGFsbCBvdGhlciBmaWxlcy4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9HZXRfQ0JveCk6IEhhbmRsZSBiYm94X21vZGUgYmV0dGVyCisJYXMgZW51bWVyYXRpb24uCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2RyaXZlcl9jbGFzcyksIHNyYy93aW5mb250cy93aW5mbnQuYworCSh3aW5mbnRfZHJpdmVyX2NsYXNzKSwgc3JjL2JkZi9iZGZkcml2ci5jIChiZGZfZHJpdmVyX2NsYXNzKTogQWRkCisJdGhlIEZUX01PRFVMRV9EUklWRVJfTk9fT1VUTElORVMgZmxhZy4KKworMjAwMy0wNi0xMyAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfc2xvdF9sb2FkKTogQXBwbHkgZm9udCBtYXRyaXguCisKKzIwMDMtMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2Rvcy9kZXRlY3QubWs6IFRlc3Qgbm90IG9ubHkgZm9yIGBEb3MnIGJ1dCBmb3IgYERPUycgYWxzby4KKworCSogYnVpbGRzL2Rvcy9kb3MtZW14Lm1rLCBidWlsZHMvY29tcGlsZXIvZW14Lm1rOiBOZXcgZmlsZXMgZm9yCisJRU1YIGdjYyBjb21waWxlci4KKwkqIGJ1aWxkcy9kb3MvZGV0ZWN0Lm1rOiBBZGQgdGFyZ2V0IGBlbXgnLgorCisJKiBidWlsZHMvY29tcGlsZXIvd2F0Y29tLm1rIChMSU5LX0xJQlJBUlkpOiBHTlUgTWFrZSBmb3IgRE9TIGRvZXNuJ3QKKwlsaWtlIGEgdHJhaWxpbmcgc2VtaWNvbG9uOyBhZGQgYSBkdW1teSBjb21tYW5kLgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYzogUmVtb3ZlIHBhcnNlX2ZvbnRfYmJveCBjb2RlIChhbHJlYWR5IGVuY2xvc2VkCisJd2l0aCAjaWYgMCAuLi4gI2VuZGlmKS4KKworCSogc3JjL3R5cGUxL3QxdG9rZW5zLmg6IEhhbmRsZSAvRm9udE5hbWUuCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2ZvbnRfbmFtZSk6IFJlbW92ZWQuCisJUmVtb3ZlIHBhcnNlX2ZvbnRfYmJveCBjb2RlIChhbHJlYWR5IGVuY2xvc2VkIHdpdGggI2lmIDAgLi4uCisJI2VuZGlmKS4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2VfZm9udF9uYW1lKTogUmVtb3ZlZC4KKwlSZW1vdmUgdDQyX3BhcnNlX2ZvbnRfYmJveCBjb2RlIChhbHJlYWR5IGVuY2xvc2VkIHdpdGggI2lmIDAgLi4uCisJI2VuZGlmKS4KKwkodDQyX2tleXdvcmRzKTogSGFuZGxlIC9Gb250TmFtZSB3aXRoIFQxX0ZJRUxEX0tFWS4KKworMjAwMy0wNi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0ZpZWxkVHlwZSk6IEFkZAorCVQxX0ZJRUxEX1RZUEVfS0VZLgorCShUMV9GSUVMRF9LRVkpOiBOZXcgbWFjcm8uCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3BhcnNlcl9sb2FkX2ZpZWxkKTogSGFuZGxlCisJVDFfRklFTERfVFlQRV9LRVkuCisKKwkqIHNyYy9jaWQvY2lkdG9rZW4uaDogVXNlIFQxX0ZJRUxEX0tFWSBmb3IgL0NJREZvbnROYW1lLgorCisyMDAzLTA2LTExICBBbGV4YW5kZXIgTWFsbWJlcmcgIDxhbGV4YW5kZXJAbWFsbWJlcmcub3JnPgorCisJKiBzcmMvY2FjaGUvZnRscnUuYyAoRlRfTHJ1TGlzdF9SZW1vdmVfU2VsZWN0aW9uKTogRGVjcmVhc2UKKwludW1iZXIgb2Ygbm9kZXMuCisJKEZUX0xydUxpc3RfTG9va3VwKTogRml4IGFzc2VydGlvbiBmb3Igb3V0LW9mLW1lbW9yeSBjYXNlLgorCisyMDAzLTA2LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfZGVjcnlwdCk6IFJlbW92ZWQuCisJKGNpZF9yZWFkX3N1YnJzKTogVXNlIHQxX2RlY3J5cHQgZnJvbSBwc2F1eCBtb2R1bGUuCisJKiBzcmMvY2lkL2NpZGxvYWQuaDogVXBkYXRlZC4KKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpOiBVc2UgdDFfZGVjcnlwdCBmcm9tIHBzYXV4CisJbW9kdWxlLgorCisyMDAzLTA2LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5jOiBBcHBseSBjaGFuZ2UgMjAwMy0wNS0zMSBmcm9tIDxSb24uRGV2QGdteC5kZT4uCisJQ29tcHV0ZSBzdHlsZSBmbGFncy4KKwlGaXggY29tcHV0YXRpb24gb2Ygcm9vdC0+aGVpZ2h0LgorCSogc3JjL2NpZC9jaWR0b2tlbi5oOiBIYW5kbGUgRm9udEJCb3guCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX2xvYWRfa2V5d29yZCk6IEhhbmRsZQorCVQxX0ZJRUxEX0xPQ0FUSU9OX0JCT1guCisJKHBhcnNlX2ZvbnRfYmJveCk6IENvbW1lbnRlZCBvdXQuCisJKGNpZF9maWVsZF9yZWNvcmQpOiBDb21tZW50IG91dCBlbGVtZW50IGZvciBwYXJzaW5nIEZvbnRCQm94LgorCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMgKHQ0Ml9wYXJzZV9mb250X2Jib3gpOiBDb21tZW50ZWQgb3V0LgorCSh0NDJfa2V5d29yZHMpOiBIYW5kbGUgRm9udEJCb3ggd2l0aCBUMV9GSUVMRF9CQk9YLCBub3Qgd2l0aAorCVQxX0ZJRUxEX0NBTExCQUNLLgorCSh0NDJfcGFyc2VfZm9udF9iYm94KTogQ29tbWVudGVkIG91dC4KKwkodDQyX2xvYWRfa2V5d29yZCk6IEhhbmRsZSBUMV9GSUVMRF9MT0NBVElPTl9CQk9YLgorCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQpOiBBcHBseSBjaGFuZ2UgMjAwMy0wNS0zMQorCWZyb20gPFJvbi5EZXZAZ214LmRlPi4KKworMjAwMy0wNi0wOSAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChTZXRTdXBlclJvdW5kKSA8MHgzMD46IEZvbGxvdyBBcHBsZSdzCisJVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbi4KKwkoSW5zX01EUlAsIEluc19NSVJQKTogRml4IHNpbmdsZSB3aWR0aCBjdXQtaW4gdGVzdC4KKworMjAwMy0wNi0wOSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jOiAoaW5mbGF0ZV9tYXNrKTogUmVwbGFjZWQgd2l0aC4uLgorCShOT19JTkZMQVRFX01BU0spOiBUaGlzLgorCSogc3JjL2d6aXAvaW5mdXRpbC5oOiBEZWNsYXJlIGBpbmZsYXRlX21hc2snIGNvbmRpdGlvbmFsbHkgYnkKKwlOT19JTkZMQVRFX01BU0suCisKKzIwMDMtMDYtMDkgIEFsZXhpcyBTLiBMLiBDYXJ2YWxobyAgPGFsZXhpc0BjZWNtLnVzcC5icj4KKworCSogc3JjL2d6aXAvZnRnemlwLmMgKGZ0X2d6aXBfZmlsZV9maWxsX291dHB1dCk6IEhhbmRsZSBaX1NUUkVBTV9FTkQKKwljb3JyZWN0bHkuCisKKzIwMDMtMDYtMDkgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfZ2xvYmFsc19uZXcpOiBDaGFuZ2UgY2FsY3VsYXRpb24gb2YKKwlkaW0tPnN0ZHcuY291bnQgdG8gYXZvaWQgY29tcGlsZXIgcHJvYmxlbS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBNb3ZlIHRoZSBibG9jaworCXZhcmlhYmxlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiB0byBhdm9pZCBjb21waWxlcgorCXByb2JsZW1zLgorCUFkZCBjYXN0cyBuZWNlc3NhcnkgZm9yIDE2Yml0IGNvbXBpbGVycy4KKworMjAwMy0wNi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGZyL3J1bGVzLm1rIChQRlJfRFJWX1NSQyk6IEFkZCBwZnJzYml0LmMuCisJKFBGUl9EUlZfSCk6IEFkZCBwZnJ0eXBlcy5oLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBzL19fTVdLU19fL19fTVdFUktTX18vLgorCisyMDAzLTA2LTA4ICBLYXJsIFNjaHVsdHogIDxrc2NodWx0ekByc2luYy5jb20+CisKKwkqIHNyYy9wZnIvcGZyc2JpdC5jIChwZnJfYml0d3JpdGVyX2luaXQpOiBDaGFuZ2UgdHlwZSBvZiB0aGlyZAorCWFyZ3VtZW50IHRvIEZUX0Jvb2wuCisJKHBmcl9sb29rdXBfYml0bWFwX2RhdGEpOiBDaGFuZ2UgdHlwZSBvZiB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50CisJdG8gRlRfVUludC4gIFVwZGF0ZWQgY2FsbGVyLgorCShwZnJfbG9hZF9iaXRtYXBfYml0cyk6IENoYW5nZSB0eXBlIG9mIGZvdXJ0aCBhcmd1bWVudCB0byBGVF9Cb29sLgorCisyMDAzLTA2LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDb21wbGV0ZWx5IHJldmlzZWQgRnJlZVR5cGUncyBtYWtlIG1hbmFnZW1lbnQuCisKKwkuIEluIGFsbCBtYWtlZmlsZXMgYC8nIGlzIHVzZWQgYXMgdGhlIHBhdGggc2VwYXJhdG9yLiAgVGhlCisJICBjb252ZXJzaW9uIHRvIHRoZSByZWFsIHBhdGggc2VwYXJhdG9ycyBpcyBkb25lIGFzIGxhdGUgYXMKKwkgIHBvc3NpYmxlIHVzaW5nICQoc3Vic3QgLi4uKS4KKworCS4gJChIT1NUU0VQKSBubyBsb25nZXIgZXhpc3RzLiAgTm93LCAkKFNFUCkgZ2l2ZXMgdGhlIHBhdGggc2VwYXJhdG9yCisJICBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB0aGUgbmV3ICQoQ09NUElMRVJfU0VQKSB0aGUgcGF0aAorCSAgc2VwYXJhdG9yIGZvciB0aGUgY29tcGlsZXIgdG9vbHMuCisKKwkuICQoQlVJTEQpIGhhcyBiZWVuIHJlbmFtZWQgdG8gJChCVUlMRF9ESVIpLiAgSW4gZ2VuZXJhbCwgYWxsCisJICBkaXJlY3RvcnkgdmFyaWFibGVzIGVuZCB3aXRoIGBfRElSJy4gIFRoZSB2YXJpYW50cyBlbmRpbmcgaW4gYF8nCisJICAobGlrZSBgQkFTRV8nIGhhdmUgYmVlbiByZW1vdmVkKS4KKworCVRoZSBmb2xsb3dpbmcgQ2hhbmdlTG9nIGVudHJpZXMgb25seSBkZXNjcmliZSBjaGFuZ2VzIHdoaWNoIGFyZQorCW5vdCByZWxhdGVkIHRvIHRoZSByZWRlc2lnbi4KKworCSogYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsgKEJVSUxEX0RJUik6IEZpeCB0eXBvLgorCSogYnVpbGRzL2NvbXBpbGVyL3dhdGNvbS5tayAoTElOS19MSUJSQVJZKTogRml4IGxpbmtlciBjYWxsIHRvIGF2b2lkCisJb3ZlcmxvbmcgYXJndW1lbnRzIGFzIHN1Z2dlc3RlZCBieSBKLiBBbGkgSGFybG93CisJPGFsaUBhdnJjLmNpdHkuYWMudWs+LgorCSogYnVpbGRzL2Rvcy9kb3Mtd2F0Lm1rOiBOZXcgZmlsZS4KKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoRlJFRVRZUEVfSCk6IEluY2x1ZGUgaGVhZGVyIGZpbGVzIGZyb20gdGhlCisJYGRldmVsJyBzdWJkaXJlY3RvcnkuCisKKwkqIGJ1aWxkcy9vczIvb3MyLWRldi5taywgYnVpbGRzL3VuaXgvdW5peGRkZWYubWssCisJYnVpbGRzL3VuaXgvdW5peGRkZWYubWssIGJ1aWxkcy93aW4zMi93MzItYmNjZC5taywKKwlidWlsZHMvd2luMzIvdzMyLWRldi5tayAoQlVJTERfRElSKTogRml4IHBhdGguCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYywgYnVpbGRzL3VuaXgvY29uZmlndXJlOiBVcGRhdGVkLgorCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKERJU1RDTEVBTik6IEFkZCBgZnJlZXR5cGUyLnBjJy4KKworMjAwMy0wNi0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIChGVF9OZXdfRmFjZV9Gcm9tX1NGTlQpOiBzL3JsZW4vc2ZudF9zaXplLyB0bworCW1ha2UgaXQgY29tcGlsZS4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogVXBkYXRlZC4KKworMjAwMy0wNi0wNyAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCwgc3JjL3RydWV0eXBlL3R0Z2xvYWQuaDoKKwlzL2luZGV4L2lkeC8gdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBVc2UgbW9yZSBgdm9sYXRpbGUnIHRvCisJZml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChCVUlMREZJWEVEKTogUmVtb3ZlZC4KKwkqIHNyYy9nemlwL2luZnRyZWVzLmMgKGluZmxhdGVfdHJlZXNfZml4ZWQpIFshQlVJTERGSVhFRF06IFVzZQorCUZUX1VOVVNFRCB0byByZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworMjAwMy0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlci5oOiBSZW5hbWVkIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmg6IFRoaXMuCisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlci5jOiBSZW5hbWVkIHRvLi4uCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jOiBUaGlzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9TVFJPS0VSX0gpOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9kZXNjcmlwLm1tcywgc3JjL2Jhc2UvSmFtZmlsZSwgc3JjL2Jhc2UvcnVsZXMubWs6CisJVXBkYXRlZC4KKworCSogc3JjL3BjZi9wY2Zkcml2ZXIuYzogUmVuYW1lZCB0by4uLgorCSogc3JjL3BjZi9wY2Zkcml2ci5jOiBUaGlzLgorCSogc3JjL3BjZi9wY2Zkcml2ZXIuaDogUmVuYW1lZCB0by4uLgorCSogc3JjL3BjZi9wY2Zkcml2ci5oOiBUaGlzLgorCisJKiBzcmMvcGNmL0phbWZpbGUsIHNyYy9wY2YvcnVsZXMubWs6IFVwZGF0ZWQuCisKKzIwMDMtMDYtMDUgIFdlbmxpbiBJbnN0aXR1dGUgKFRvbSBCaXNob3ApICA8d2VubGluQHdlbmxpbi5jb20+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKGZpbGVfc3BlY19mcm9tX3BhdGgpIFtUQVJHRVRfQVBJX01BQ19DQVJCT05dOgorCUFkZCBgI2lmICFkZWZpbmVkKF9fTVdFUktTX18pJy4KKworMjAwMy0wNi0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0ZpZWxkVHlwZSk6IEFkZAorCVQxX0ZJRUxEX1RZUEVfRklYRURfMTAwMCBhbmQgVDFfRklFTERfVFlQRV9GSVhFRF8xMDAwX1AuCisJKFQxX0ZJRUxEX0ZJWEVEXzEwMDAsIFQxX0ZJRUxEX0ZJWEVEXzEwMDBfUCk6IE5ldyBtYWNyb3MuCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3BhcnNlcl9sb2FkX2ZpZWxkKTogSGFuZGxlCisJVDFfRklFTERfVFlQRV9GSVhFRF8xMDAwIGFuZCBUMV9GSUVMRF9UWVBFX0ZJWEVEXzEwMDBfUC4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfa2luZF9maXhlZF90aG91c2FuZCk6IE5ldyBlbnVtZXJhdGlvbi4KKwkoQ0ZGX0ZJRUxEX0ZJWEVEXzEwMDApOiBOZXcgbWFjcm8uCisJKGNmZl9wYXJzZXJfcnVuKTogSGFuZGxlIGNmZl9raW5kX2ZpeGVkX3Rob3VzYW5kLgorCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBVc2UgQ0ZGX0ZJRUxEX0ZJWEVEXzEwMDAgZm9yIGJsdWVfc2NhbGUuCisJKiBzcmMvY2ZmL2NmZmxvYWQgKGNmZl9zdWJmb250X2xvYWQpOiBGaXggZGVmYXVsdCB2YWx1ZXMgb2YKKwlleHBhbnNpb25fZmFjdG9yIGFuZCBibHVlX3NjYWxlLgorCisJKiBzcmMvY2lmL2NpZHRva2VuLmgsIHNyYy90eXBlMS90MXRva2Vucy5oOiBVc2UgVDFfRklFTERfRklYRURfMTAwMAorCWZvciBibHVlX3NjYWxlLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfZ2xvYmFsc19uZXcpOiBGaXggZGVmYXVsdCB2YWx1ZSBvZgorCWJsdWVfc2NhbGUuCisKKzIwMDMtMDYtMDQgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgsIHNyYy9jaWQvY2lkZ2xvYWQuYywKKwlzcmMvcHNhdXgvcHNvYmpzLmMsIHNyYy9wc2F1eC90MWRlY29kZS5jLCBzcmMvcHNhdXgvcHNvYmpzLmgsCisJc3JjL3BzaGludGVyL3BzaHJlYy5jLCBzcmMvcHNoaW50ZXIvcHNoYWxnby5jLAorCXNyYy9wc25hbWVzL3BzbW9kdWxlLmMsIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYywgc3JjL3NmbnQvc2ZvYmpzLmMsCisJc3JjL3Ntb290aC9mdGdyYXlzLmMsIHNyYy9zbW9vdGgvZnRzbW9vdGguYywgc3JjL3RydWV0eXBlL3R0b2Jqcy5jLAorCXNyYy90cnVldHlwZS90dGRyaXZlci5jLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jLCBzcmMvdHlwZTEvdDFhZm0uYywKKwlzcmMvdHlwZTEvdDFnbG9hZC5jLCBzcmMvdHlwZTEvdDFnbG9hZC5oLCBzcmMvdHlwZTEvdDFsb2FkLmMsCisJc3JjL3R5cGUxL3Qxb2Jqcy5jLCBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMsIHNyYy90eXBlNDIvdDQycGFyc2UuaDoKKwlNYW55IGNhc3RzIGFuZCBzbGlnaHQgYXJndW1lbnQgdHlwZSBjaGFuZ2VzIHRvIG1ha2UgaXQgd29yayB3aXRoCisJYSAxNmJpdCBjb21waWxlci4KKworMjAwMy0wNi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBEZWZpbmluZworCVRUX0NPTkZJR19PUFRJT05fRk9SQ0VfVU5QQVRFTlRFRF9ISU5USU5HIGJ5IGRlZmF1bHQgaXMgYSBiYWQgaWRlYQorCXNpbmNlIHNvbWUgZm9udHMgKGUuZy4gQXJpYWwpIHByb2R1Y2Ugd29yc2UgcmVzdWx0cyB0aGFuIHdpdGhvdXQKKwloaW50aW5nLiAgUmV2ZXJ0ZWQuCisKKzIwMDMtMDYtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCkKKwlbVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUl06IENhbGwKKwlGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cyBiZWZvcmUgYWRkaW5nIHBoYW50b20gcG9pbnRzLiAgVGhpcyBmaXhlcworCWEgc2VnZmF1bHQgYnVnIHdpdGggZm9udHMgKGUuZy4gaHRzdDMudHRmKSB3aGljaCBoYXZlIG5lc3RlZAorCXN1YmdseXBocyBtb3JlIHRoYW4gb25lIGxldmVsIGRlZXAuICBSZXBvcnRlZCBieSBBbnRob255IEZvay4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDogRGVmaW5lCisJVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiwKKwlUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HLCBhbmQKKwlUVF9DT05GSUdfT1BUSU9OX0ZPUkNFX1VOUEFURU5URURfSElOVElORyB0byBtYWtlIGl0IHRoZSBuZXcKKwlkZWZhdWx0LgorCisyMDAzLTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2hpbnRfZWRnZXMpOiBSZW1vdmVkLiAgSnVzdCBhCisJd3JhcHBlciBmb3IgYWhfaGludF9lZGdlcy4KKwkoYWhfaGludF9lZGdlcyk6IFJlbmFtZWQgdG8uLi4KKwkoYWhfaGludGVyX2hpbnRfZWRnZXMpOiBUaGlzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0hpbnRfRmxhZ3MpOiBSZW1vdmVkLiAgVW51c2VkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXJSZWMpLAorCXNyYy9jZmYvY2ZmZ2xvYWQuaCAoQ0ZGX0J1aWxkZXIpOiBSZW1vdmUgYGhpbnRfZmxhZ3MnIGZpZWxkLgorCVVudXNlZC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfYnVpbGRlcl9pbml0KTogVXBkYXRlZC4KKwkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpIDxjZmZfb3BfZW5kY2hhcj46IENhbGwgaGludGVyLT5hcHBseQorCXdpdGggZGVjb2Rlci0+aGludF9tb2RlIGluc3RlYWQgb2YgYnVpbGRlci0+aGludF9mbGFncy4KKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX2luaXQpOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZXIuYyAoZnRfc3Ryb2tlX2JvcmRlcl9leHBvcnQpOiBzL2luZGV4L2lkeC8uCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IENvbW1lbnRlZCBvdXQgY29kZSB3aGljaAorCWluY3JlYXNlZCByb290LT5oZWlnaHQgYnkgMTUlIGlmIHRoZSBsaW5lIGdhcCB3YXMgemVyby4gIFRoZXJlIGV4aXN0CisJZm9udHMgKGNvbnRhaW5pbmcgZS5nLiBmb3JtIGRyYXdpbmcgY2hhcmFjdGVycykgd2hpY2ggaW50ZW50aW9uYWxseQorCWhhdmUgYSB6ZXJvIGxpbmUgZ2FwIHZhbHVlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRnJlZV9Qcm9qZWN0LCBDVVJfRnVuY19mcmVlUHJvaik6CisJUmVtb3ZlZC4gIFVudXNlZC4KKwlVcGRhdGVkIGFsbCBjYWxsZXJzLgorCisyMDAzLTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogVXNlIHN5bWJvbGljIG5hbWVzIGZvcgorCUFkb2JlIHNwZWNpZmljIGVuY29kaW5nIElEcyAodGhlcmUgd2FzIGEgd3JvbmcgRUlEIHZhbHVlIGZvciBjdXN0b20KKwllbmNvZGluZykuCisKKwkqIHNyYy9jZmYvY2ZmY21hcC5oIChDRkZfQ01hcFN0ZFJlYyk6IFJlbW92ZSBgY291bnQnLgorCSogc3JjL2NmZi9jZmZjbWFwLmMgKGNmZl9jbWFwX2VuY29kaW5nX2luaXQsCisJY2ZmX2NtYXBfZW5jb2RpbmdfZG9uZSk6IFVwZGF0ZWQuCisJKGNmZl9jbWFwX2VuY29kaW5nX2NoYXJfaW5kZXgsIGNmZl9jbWFwX2VuY29kaW5nX2NoYXJfbmV4dCk6IFVzZQorCTI1NiBhcyBsaW1pdCBmb3IgY2hhcmFjdGVyIGNvZGUuCisKKzIwMDMtMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfTG9hZF9HbHlwaCk6IFJldmVydCBjaGFuZ2UgZnJvbQorCTIwMDMtMDMtMjAuCisKKzIwMDMtMDUtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oIChGVF9WZWN0b3JfTm9ybWFsaXplKTogUmVtb3ZlZC4KKworMjAwMy0wNS0zMSAgICA8Um9uLkRldkBnbXguZGU+CisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogSW1wcm92ZSBhbGdvcml0aG0gZm9yIGd1ZXNzaW5nCisJdGhlIGZvbnQgc3R5bGUgYnkgaWdub3Jpbmcgc3BhY2VzIGFuZCBoeXBoZW5zLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIuaW46IEZpeCBgVmVyc2lvbicgZmllbGQuCisKKzIwMDMtMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUF2b2lkIG92ZXJ3cml0aW5nIG9mIG51bWVyaWMgZm9udCBkaWN0aW9uYXJ5IGVudHJpZXMgZm9yIHN5bnRoZXRpYworCWZvbnRzLiAgQWRkaXRpb25hbGx5LCBzb21lIGVudHJpZXMgd2VyZSBoYW5kbGVkIGFzIGBpbnRlZ2VyJyBpbnN0ZWFkCisJb2YgYG51bWJlcicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoVDFfRmllbGRUeXBlKTogQWRkCisJVDFfRklFTERfVFlQRV9CT09MX1AsIFQxX0ZJRUxEX1RZUEVfSU5URUdFUl9QLCBhbmQKKwlUMV9GSUVMRF9UWVBFX0ZJWEVEX1AuCisJKFQxX0ZJRUxEX0JPT0xfUCwgVDFfRklFTERfTlVNX1AsIFQxX0ZJRUxEX0ZJWEVEX1ApOiBOZXcgbWFjcm9zLgorCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19wYXJzZXJfbG9hZF9maWVsZCk6IEhhbmRsZSBuZXcgZmllbGQgdHlwZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaCAoQ0ZGX0ZvbnRSZWNEaWN0KSwKKwlzcmMvY2ZmL2NmZnRva2VuLmg6IENoYW5nZSB0eXBlIG9mIHVuZGVybGluZV9wb3NpdGlvbiBhbmQKKwl1bmRlcmxpbmVfdGhpY2tuZXNzIHRvIEZUX0ZpeGVkLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBGaXggZGVmYXVsdCB2YWx1ZXMgb2YKKwl1bmRlcmxpbmVfcG9zaXRpb24gYW5kIHVuZGVybGluZV90aGlja25lc3MuCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IFNldCB1bmRlcmxpbmVfcG9zaXRpb24KKwlhbmQgdW5kZXJsaW5lX3RoaWNrbmVzcyBpbiBgcm9vdCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9Gb250KTogQ2hhbmdlIHBvaW50X3R5cGUKKwlhbmQgc3Ryb2tlX3dpZHRoIHRvIHBvaW50ZXJzLgorCSogaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIChQU19Gb250SW5mbyk6IENoYW5nZSBpdGFsaWNfYW5nbGUsCisJaXNfZml4ZWRfcGl0Y2gsIHVuZGVybGluZV9wb3NpdGlvbiwgYW5kIHVuZGVybGluZV90aGlja25lc3MgdG8KKwlwb2ludGVycy4KKwkqIHNyYy90eXBlMS90MXRva2Vucy5oOiBDaGFuZ2UgaXRhbGljX2FuZ2xlLCBpc19maXhlZF9waXRjaCwKKwl1bmRlcmxpbmVfcG9zaXRpb24sIGFuZCB1bmRlcmxpbmVfdGhpY2tuZXNzIHRvIHBvaW50ZXJzLiAgQ2hhbmdlCisJdGhlIHR5cGUgb2YgdGhlIGxhdHRlciB0d28gdG8gYGZpeGVkJy4KKwlDaGFuZ2UgdHlwZSBvZiBzdHJva2Vfd2lkdGggdG8gYGZpeGVkJyBhbmQgbWFrZSBpdCBhIHBvaW50ZXIuCisJQ2hhbmdlIHBhaW50X3R5cGUgdG8gcG9pbnRlci4KKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Eb25lKTogVXBkYXRlZC4KKwkoVDFfRmFjZV9Jbml0KTogVXBkYXRlZC4KKwlGaXggYXNzaWdubWVudCBvZiB1bmRlcmxpbmVfcG9zaXRpb24gYW5kIHVuZGVybGluZV90aGlja25lc3MuCisKKwkqIHNyYy9jaWQvY2lkdG9rZW4uaDogQ2hhbmdlIGl0YWxpY19hbmdsZSwgaXNfZml4ZWRfcGl0Y2gsCisJdW5kZXJsaW5lX3Bvc2l0aW9uLCBhbmQgdW5kZXJsaW5lX3RoaWNrbmVzcyB0byBwb2ludGVycy4gIENoYW5nZQorCXRoZSB0eXBlIG9mIHRoZSBsYXR0ZXIgdHdvIHRvIGBmaXhlZCcuCisJQ2hhbmdlIHR5cGUgb2Ygc3Ryb2tlX3dpZHRoIHRvIGBmaXhlZCcuCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfZG9uZSk6IFVwZGF0ZWQuCisJKGNpZF9mYWNlX2luaXQpOiBVcGRhdGVkLgorCUZpeCBhc3NpZ25tZW50IG9mIHVuZGVybGluZV9wb3NpdGlvbiBhbmQgdW5kZXJsaW5lX3RoaWNrbmVzcy4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jOiBDaGFuZ2UgaXRhbGljX2FuZ2xlLCBpc19maXhlZF9waXRjaCwKKwl1bmRlcmxpbmVfcG9zaXRpb24sIGFuZCB1bmRlcmxpbmVfdGhpY2tuZXNzIHRvIHBvaW50ZXJzLiAgQ2hhbmdlIHRoZQorCXR5cGUgb2YgdGhlIGxhdHRlciB0d28gdG8gYGZpeGVkJy4KKwlDaGFuZ2UgdHlwZSBvZiBzdHJva2Vfd2lkdGggdG8gYGZpeGVkJyBhbmQgbWFrZSBpdCBhIHBvaW50ZXIuCisJQ2hhbmdlIHBhaW50X3R5cGUgdG8gcG9pbnRlci4KKwkqIHNyYy90eXBlNDIvdDQyb2Jqcy5jIChUNDJfRmFjZV9Jbml0KTogVXBkYXRlZC4KKwlGaXggYXNzaWdubWVudCBvZiB1bmRlcmxpbmVfcG9zaXRpb24gYW5kIHVuZGVybGluZV90aGlja25lc3MuCisJKFQ0Ml9GYWNlX0RvbmUpOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAob3Blbl9mYWNlX2Zyb21fYnVmZmVyKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jLCBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCisJKHBzaF9nbG9iYWxzX3NldF9zY2FsZSk6IE1ha2UgaXQgYSBsb2NhbCBmdW5jdGlvbi4KKworCSogdGVzdC9ndmlldy5jOiBGaXggcmVuYW1pbmcgcHMzLT5wcyB0eXBvLgorCUZvcm1hdHRpbmcuCisKKzIwMDMtMDUtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28xLltjaF0sIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5bY2hdOiBSZW1vdmVkLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28uaDogUmVtb3ZlZC4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLltjaF06IFJlbmFtZWQgdG8uLi4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLltjaF06IE5ldyBmaWxlcy4KKwlzL1BTSDMvUFNILy4KKwlzL3BzaDMvcHNoLy4KKwlzL3BzMy9wcy8uCisKKwkqIHNyYy9wc2hpbnRlci9wc2hyZWMuYywgc3JjL3BzaGludGVyL3BzaGludGVyLmM6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcnVsZXMubWssIHNyYy9wc2hpbnRlci9KYW1maWxlOiBVcGRhdGVkLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5bY2hdIChwc2hfZGltZW5zaW9uX3NuYXBfd2lkdGgpOiBDb21tZW50ZWQKKwlvdXQuCisKKwkqIHRlc3RzL2d2aWV3LmM6IFJlbW92ZSBjb2RlIGZvciBwc2hhbGdvMSBhbmQgcHNoYWxnbzIuCisJVXBkYXRlZC4KKworMjAwMy0wNS0yOCAgTWFydGluIFppbnNlciAgPHppbnNlckBkZWN1cy5kZT4KKworCSogdm1zX21ha2UuY29tOiBSZXdvcmtlZCBzdXBwb3J0IGZvciBzaGFyZWFibGUgaW1hZ2VzIG9uIFZNUy4gIFRoZQorCWZpcnN0IHZlcnNpb24gd2FzIGtpbmQgb2YgYSBoYWNrOyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKwlwcm9jZWR1cmUgdG8gZXh0cmFjdCB0aGUgcmVxdWlyZWQgc3ltYm9scyBpcyBtdWNoIGNsZWFuZXIuCisKKwlSZXdvcmtlZCBjcmVhdGlvbiBvZiBNTVMgZmlsZXMsIGF2b2lkaW5nIGEgbnVtYmVyIG9mIHRlbXBvcmFyeSBmaWxlcworCXdoaWNoIHdlcmUgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4KKworCUZ1cnRoZXIgd29yayBvbiBjcmVhdGluZyBkZXNjcmlwLm1tcyBmaWxlcyBvbiB0aGUgZmx5LgorCisJKiBidWlsZHMvdm1zL2Rlc2NyaXAubW1zLCBzcmMvYXV0b2hpbnQvZGVzY3JpcC5tbXMsCisJc3JjL3R5cGUxL2Rlc2NyaXAubW1zOiBSZW1vdmVkLgorCisyMDAzLTA1LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5jIChwc2gzX2dseXBoX2NvbXB1dGVfZXh0cmVtYSk6IFNraXAKKwljb250b3VycyB3aXRoIG9ubHkgYSBzaW5nbGUgcG9pbnQgdG8gYXZvaWQgc2VnZmF1bHQuCisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2x5cGhfVG9fQml0bWFwKTogQWN0aXZhdGUgY29kZSBmb3IKKwloYW5kbGluZyBgb3JpZ2luJy4KKworMjAwMy0wNS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2hpbnQvYWh0eXBlcy5oIChBSF9PUFRJT05fTk9fU1RST05HX0lOVEVSUE9MQVRJT04pOgorCVJlbW92ZWQgc2luY2UgdW51c2VkLgorCisyMDAzLTA1LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggKGZ0X3N0cmNhdCk6IE5ldyB3cmFwcGVyIG1hY3JvCisJZm9yIHN0cmNhdC4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyAoY3JlYXRlX2x3Zm5fbmFtZSk6IHMvaXN1cHBlci9mdF9pc3VwcGVyLy4KKwkocGFyc2VfZm9udCk6IHMvbWVtY3B5L2Z0X21lbWNweS8uCisJKGlzX2Rmb250KSBbVEFSR0VUX0FQSV9NQUNfQ0FSQk9OXTogcy9tZW1jbXAvZnRfbWVtY21wLy4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChsb2FkX21hY19mYWNlKSBbRlRfTUFDSU5UT1NIXToKKwlzL3N0cmxlbi9mdF9zdHJsZW4vLgorCXMvc3RyY2F0L2Z0X3N0cmNhdC8uCisJcy9zdHJjcHkvZnRfc3RyY3B5Ly4KKwkqIHNyYy9nemlwL3p1dGlsLmg6IHMvbWVtc2V0L2Z0X21lbXNldC8uCisJcy9tZW1jbXAvZnRfbWVtY21wLy4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KSwgc3JjL3BjZi9wY2Zkcml2ZXIuYworCShQQ0ZfRmFjZV9Jbml0KTogVGVzdCBmb3IgY2hhcnNldCByZWdpc3RyeSBjYXNlLWluc2Vuc2l0aXZlbHkuCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChmdF9nemlwX2ZpbF9pbyk6IFJldmVydCBjaGFuZ2UgZnJvbSB5ZXN0ZXJkYXk7CisJaXQgaGFzIGFscmVhZHkgYmVlbiBmaXhlZCBkaWZmZXJlbnRseS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERPX1NGVlRMKTogQWRkIG1pc3NpbmcgYnJhY2VzIGFyb3VuZAorCWlmLWNsYXVzZS4KKworMjAwMy0wNS0yMSAgTWFydGluIFppbnNlciAgPHppbnNlckBkZWN1cy5kZT4KKworCSogdDFsb2FkLmMgKHBhcnNlX2JsZW5kX2F4aXNfdHlwZXMpOiBGaXggY29tcGlsZXIgd2FybmluZy4KKworCSogZGVzY3JpcC5tbXM6IFJlbW92ZWQuICBOb3cgY3JlYXRlZCBieS4uLgorCisJKiB2bXNfbWFrZS5jb206IE5ldyBmaWxlLgorCisyMDAzLTA1LTIxICBXZWlxaSBHYW8gIDx3ZWlxaWdhb0BuZXR3b3JrdXNhLm5ldD4KKworCSogc3JjL2d6aXAvZnRnemlwLmMgKGZ0X2d6aXBfZmlsZV9pbyk6IEF2b2lkIHplcm8gdmFsdWUgb2YgYGRlbHRhJworCXRvIHByZXZlbnQgaW5maW5pdGUgbG9vcC4KKworMjAwMy0wNS0yMSAgTGFycyBDbGF1c2VuICA8bHJjbGF1c2VAY3MudWl1Yy5lZHU+CisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFByb3ZpZGUgYmV0dGVyIGF1dG9jb25mIHNuaXBwZXQgdG8gY2hlY2sKKwlGcmVlVHlwZSB2ZXJzaW9uLgorCisyMDAzLTA1LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChvcGVuX2ZhY2UpOiBGcmVlIGBpbnRlcm5hbCcgbm90CisJYGZhY2UtPmludGVybmFsJyBpbiBjYXNlIG9mIGVycm9yIHRvIGF2b2lkIHBvc3NpYmxlIHNlZ2ZhdWx0LgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYyAocHMzX2hpbnRzX2FwcGx5KTogQ2hlY2sgd2hldGhlciB3ZQorCWFjdHVhbGx5IGhhdmUgYW4gb3V0bGluZS4KKworMjAwMy0wNS0yMCAgRGF2aWQgQ2hlc3RlciAgPGRhdmlkY2hlc3RlckBxbXgubmV0PgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYyAocHMzX2hpbnRzX2FwcGx5KTogVHJ5IHRvIG9wdGltaXplCisJeV9zY2FsZSBzbyB0aGF0IHRoZSB0b3Agb2Ygbm9uLWNhcGl0YWwgbGV0dGVycyBpcyBhbGlnbmVkIG9uIGEgcGl4ZWwKKwlib3VuZGFyeSB3aGVuZXZlciBwb3NzaWJsZS4KKworCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9oaW50X2VkZ2VzKTogTWFrZSBzdXJlIHRoYXQgbG93ZXJjYXNlCisJbSdzIG1haW50YWluIHRoZWlyIHN5bW1ldHJ5LgorCisyMDAzLTA1LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWRfZ2x5cGgpOiBPb3BzISAgRGF2aWQncworCXBhdGNoIGZyb20geWVzdGVyZGF5IGhhcyBiZWVuIHJlc29sdmVkIGFscmVhZHkgaW4gYSBkaWZmZXJlbnQKKwl3YXkuICBSZXZlcnRlZC4KKworMjAwMy0wNS0xOSAgRGF2aWQgQ2hlc3RlciAgPGRhdmlkY2hlc3RlckBxbXgubmV0PgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkX2dseXBoKTogRG9uJ3Qgc2NhbGUKKwl5X3NjYWxlIGxvY2FsbHkgYnV0IGZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2FsZS4KKworMjAwMy0wNS0xOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2NtYXA0X2NoYXJfbmV4dCk6IFNlbGVjdCBwcm9wZXIgc3RhcnQKKwl2YWx1ZSBmb3IgYGhpJyB0byBhdm9pZCBpbmZpbml0ZSBsb29wLgorCisyMDAzLTA1LTE4ICBZb25nIFN1biAgPHN1bnlvbmdAbmpzdGFyLmNvbT4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChJbnNlcnRfWV9UdXJuKTogRml4IG92ZXJmbG93IHRlc3QuCisKKzIwMDMtMDUtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCBbRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFNdOgorCU5ldyBtYWNyby4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBVc2UgaXQgdG8gY29udHJvbCBtYWMgZm9udCBzdXBwb3J0IG9uIG5vbi1tYWMKKwlwbGF0Zm9ybXMuCisKKzIwMDMtMDUtMTcgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJSW1wbGVtZW50IHBhcnRpYWwgc3VwcG9ydCBvZiBNYWMgZm9udHMgb24gbm9uLU1hYyBwbGF0Zm9ybXMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChtZW1vcnlfc3RyZWFtX2Nsb3NlLCBuZXdfbWVtb3J5X3N0cmVhbSwKKwlvcGVuX2ZhY2VfZnJvbV9idWZmZXIsIE1hY19SZWFkX1BPU1RfUmVzb3VyY2UsCisJTWFjX1JlYWRfc2ZudF9SZXNvdXJjZSwgSXNNYWNSZXNvdXJjZSwgSXNNYWNCaW5hcnksIGxvYWRfbWFjX2ZhY2UpCisJWyFGVF9NQUNJTlRPU0hdOiBOZXcgZnVuY3Rpb25zLgorCShGVF9PcGVuX0ZhY2UpIFshRlRfTUFDSU5UT1NIXTogVXNlIGxvYWRfbWFjX2ZhY2UuCisKKzIwMDMtMDUtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBTY2FsZSBsaW5lYXIgYWR2YW5jZSB3aWR0aCBvbmx5CisJaWYgRlRfRkFDRV9GTEFHX1NDQUxBQkxFIGlzIHNldCAob3RoZXJ3aXNlIHdlIGhhdmUgYSBkaXZpc2lvbiBieQorCXplcm8gc2luY2UgRk5UIGFuZCBmcmllbmRzIGRvbid0IGRlZmluZSBgZmFjZS0+dW5pdHNfcGVyX0VNJykuCisKKzIwMDMtMDUtMTUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfVmVjdG9yX1JvdGF0ZSk6IEF2b2lkIHJvdW5kaW5nIGVycm9ycworCWZvciBzbWFsbCB2YWx1ZXMuCisKKzIwMDMtMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoQUhfUG9pbnRSZWMpOiBSZW1vdmUgdW51c2VkIGBpbl9hbmdsZScKKwlhbmQgYG91dF9hbmdsZScgZmllbGRzLgorCisyMDAzLTA1LTE0ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyAoRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKTogSGFuZGxlIENGRiBmaWxlcyBhbHNvLgorCisyMDAzLTA1LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogRml4IHR5cG8gaW4gY29tbWVudAorCShGVF9IQVNfRklYRURfU0laRVMpLgorCisyMDAzLTA1LTEwICBEYW4gV2lsbGlhbXMgIDxkYW5AYmlndy5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2FjbG9jYWwubTQ6IENvbW1lbnQgb3V0IGRlZmluaXRpb24gb2YKKwlgYWxsb3dfdW5kZWZpbmVkX2ZsYWcnIGZvciBEYXJ3aW4gMS4zLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBBZGQgb3B0aW9uIC0td2l0aC1vbGQtbWFjLWZvbnRzLgorCSogYnVpbGRzL3VuaXgvbHRtYWluLnNoOiBGaXggdmVyc2lvbiBudW1iZXJpbmcgZm9yIERhcndpbiAxLjMuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBGaXggY29uZGl0aW9ucyBmb3IgZGVmaW5pbmcKKwlgRlRfTUFDSU5UT1NIJy4KKwkqIHNyYy9iYXNlL2Z0YmFzZS5jOiBJbmNsdWRlIGBmdG1hYy5jJyBjb25kaXRpb25hbGx5LgorCSogc3JjL2Jhc2UvZnRtYWMuYzogSGFuZGxlIF9fR05VQ19fLgorCisyMDAzLTA1LTA3ICBZQU1BTk8tVUNISSBIaWRldG9zaGkgIDxtZXJAZGluLm9yLmpwPgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAoaXNfYWxwaGEpOiBSZW1vdmVkLgorCShjaWRfcGFyc2VfZGljdCk6IFVzZSBgY2lkX3BhcnNlcl9za2lwX2FscGhhJyBpbnN0ZWFkIG9mIGBpc19hbHBoYScuCisKKzIwMDMtMDUtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9oaW50L2Fob3B0aW0uYywgc3JjL2F1dG9oaW50L2Fob3B0aW0uaDogT2Jzb2xldGUsIHJlbW92ZWQuCisKKzIwMDMtMDUtMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguYyAoYWhfc2V0dXBfdXYpOiBFeGNoYW5nZSBgZm9yJyBsb29wIGFuZAorCWBzd2l0Y2gnIHN0YXRlbWVudCB0byBtYWtlIGl0IHJ1biBmYXN0ZXIuCisJKGFoX291dGxpbmVfY29tcHV0ZV9zZWdtZW50cyk6IFJlc2V0IGBzZWdtZW50LT5zY29yZScgYW5kCisJYHNlZ21lbnQtPmxpbmsnLgorCShhaF9vdXRsaW5lX2xpbmtfc2VnbWVudHMpOiBQcm92aWRlIGFsdGVybmF0aXZlIGNvZGUgd2hpY2ggZG9lcworCXRoZSBzYW1lIGJ1dCBydW5zIG11Y2ggZmFzdGVyLgorCUhhbmRsZSBtYWpvciBkaXJlY3Rpb24gYWxzby4KKwkoYWhfb3V0bGluZV9jb21wdXRlX2VkZ2VzKTogU2NhbGUgYGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkJyBkb3duCisJYWZ0ZXIgcm91bmRpbmcgaW5zdGVhZCBvZiBzY2FsaW5nIGNvbXBhcmlzb24gdmFsdWUgaW4gbG9vcC4KKworCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9oaW50ZXJfYWxpZ25fc3RvbmdfcG9pbnRzKTogUHJvdmlkZQorCWFsdGVybmF0aXZlIGNvZGUgd2hpY2ggcnVucyBmYXN0ZXIuCisJSGFuZGxlIGBiZWZvcmUtPnNjYWxlID09IDAnLgorCisJKiBzcmMvYXV0b2hpbnQvYWh0eXBlcy5oIChBSF9TZWdtZW50UmVjKTogTW92ZSBzb21lIGZpZWxkcyBkb3duLgorCShBSF9FZGdlUmVjKTogTW92ZSBzb21lIGZpZWxkcyBpbiBzdHJ1Y3R1cmUuCisJTmV3IGZpZWxkIGBzY2FsZScuCisKKwkqIHNyYy9zZm50L3R0Y21hcDAuYyAodHRfY21hcDRfY2hhcl9uZXh0KTogVXNlIGJpbmFyeSBzZWFyY2guCisKKzIwMDMtMDUtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9oaW50L2Fob3B0aW0uYyAoTE9HKTogUmVuYW1lZCB0by4uLgorCShBSF9PUFRJTV9MT0cpOiBUaGlzLgorCShBSF9EdW1wX1NwcmluZ3MpOiBGaXggbG9nIG1lc3NhZ2UgZm9ybWF0LgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRfZWRnZXNfMyk6IFJlbmFtZWQgdG8uLi4KKwkoYWhfaGludF9lZGdlcyk6IFRoaXMuCisKKzIwMDItMDUtMDIgIEtlaXRoIFBhY2thcmQgIDxrZWl0aHBAa2VpdGhwLmNvbT4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfU2V0X1BpeGVsX1NpemUpOiBJbml0aWFsaXplIGBtYXhfYWR2YW5jZScuCisKKzIwMDMtMDUtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguYyAoYWhfdGVzdF9leHRyZW1hKTogUmVuYW1lZCB0by4uLgorCShhaF90ZXN0X2V4dHJlbXVtKTogVGhpcy4KKworMjAwMy0wNC0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWM6IEdlbmVyYXRlIGBmcmVldHlwZS5wYycgZnJvbQorCWBmcmVldHlwZS5pbicuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCwgdW5pbnN0YWxsKTogSGFuZGxlIGBmcmVldHlwZS5wYycuCisKKzIwMDMtMDQtMjggIEd1c3Rhdm8gSi4gQS4gTS4gQ2FybmVpcm8gIDxnamNAaW5lc2Nwb3J0by5wdD4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluOiBOZXcgZmlsZS4gIENvbnRhaW5zIGJ1aWxkaW5nIGluZm9ybWF0aW9uCisJZm9yIHRoZSBgcGtnLWNvbmZpZycgcGFja2FnZS4KKworMjAwMy0wNC0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IEZpeCBib3VuZGFyeSBjaGVjayBmb3IKKwlgZ2x5cGhfaW5kZXgnLgorCisyMDAzLTA0LTI1OiAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJQWRkZWQgdGhlIG9wdGlvbmFsIHVucGF0ZW50ZWQgaGludGluZyBzeXN0ZW0gZm9yIFRydWVUeXBlLiAgSXQKKwlhbGxvd3MgdHlwZWZhY2VzIHdoaWNoIG5lZWQgaGludGluZyB0byBwcm9kdWNlIGNvcnJlY3QgZ2x5cGggZm9ybXMKKwkoZS5nLiwgQ2hpbmVzZSB0eXBlZmFjZXMgZnJvbSBEeW5hbGFiKSB0byB3b3JrIGFjY2VwdGFibHkgd2l0aG91dAorCWluZnJpbmdpbmcgQXBwbGUgcGF0ZW50cy4gIFRoaXMgc3lzdGVtIGlzIGNvbXBpbGVkIG9ubHkgaWYKKwlUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HIGlzIGRlZmluZWQgaW4KKwlmdG9wdGlvbi5oLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaDogTmV3IGZpbGUuICBEZWZpbmVzCisJRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfVFJVRVRZUEVfVU5QQVRFTlRFRF9IKTogTmV3CisJbWFjcm8gdG8gdXNlIHdoZW4gaW5jbHVkaW5nIHR0dW5wYXQuaC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HLAorCVRUX0NPTkZJR19PUFRJT05fRk9SQ0VfVU5QQVRFTlRFRF9ISU5USU5HKTogTmV3IGNvbmZpZ3VyYXRpb24gbWFjcm9zCisJKG5vdCBkZWZpbmVkLCBidXQgaW4gY29tbWVudHMpIGZvciB0aGUgdW5wYXRlbnRlZCBoaW50aW5nIHN5c3RlbS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpCisJW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkddOiBOZXcgZWxlbWVudCBgRlRfQm9vbAorCXVucGF0ZW50ZWRfaGludGluZycuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChOT19BUFBMRV9QQVRFTlQsIEFQUExFX1RIUkVTSE9MRCk6CisJUmVtb3ZlZC4KKwkoR1VFU1NfVkVDVE9SKTogTmV3IG1hY3JvLgorCShUVF9SdW5fQ29udGV4dCkgW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkddOgorCVNldCBgYm90aF94X2F4aXMnLgorCSh0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlKQorCVtUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HXTogVXBkYXRlZC4KKwkoQ3VycmVudF9SYXRpbykgW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkddOgorCUhhbmRsZSBgdW5wYXRlbnRlZF9oaW50aW5nJy4KKwkoRGlyZWN0X01vdmUpIFtOT19BUFBMRV9QQVRFTlRdOiBSZW1vdmVkLgorCVtUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HXTogSW5zZXJ0IGFzc2VydGlvbi4KKwkoUHJvamVjdCwgRnJlZVByb2plY3QpCisJW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkddOiBJbnNlcnQgYXNzZXJ0aW9uLgorCShDb21wdXRlX0Z1bmNzKSBbVFRfQ09ORklHX09QVElPTl9DT01QSUxFX1VOUEFURU5URURfSElOVElOR106CisJSW1wbGVtZW50IHVucGF0ZW50ZWQgaGludGluZy4KKwkoRE9fU1BWVENBLCBET19TRlZUQ0EsIERPX1NQVlRMLCBET19TRlZUTCwgRE9fU1BWRlMsIERPX1NGVkZTLAorCUluc19TRFBWVEwpOiBDYWxsIGBHVUVTU19WRUNUT1InLgorCShET19HUFYsIERPX0dGVikgW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkddOgorCUhhbmRsZSBgdW5wYXRlbnRlZF9oaW50aW5nJy4KKwkoQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQpIFtOT19BUFBMRV9QQVRFTlRdOiBSZW1vdmVkLgorCVtUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HXTogSW1wbGVtZW50IHVucGF0ZW50ZWQKKwloaW50aW5nLgorCShNb3ZlX1pwMl9Qb2ludCwgSW5zX1NIUElYLCBJbnNfREVMVEFQLCBJbnNfREVMVEFDKQorCVtUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HXTogSW1wbGVtZW50IHVucGF0ZW50ZWQKKwloaW50aW5nLgorCShUVF9SdW5JbnMpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKKwlbVFRfQ09ORklHX09QVElPTl9DT01QSUxFX1VOUEFURU5URURfSElOVElOR106IEluY2x1ZGUKKwlGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0guCisJKHR0X2ZhY2VfaW5pdCkgW1RUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkcsCisJVFRfQ09ORklHX09QVElPTl9GT1JDRV9VTlBBVEVOVEVEX0hJTlRJTkddOiBDaGVjaworCUZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuaCAoVFRfR3JhcGhpY3NTdGF0ZSkKKwlbVFRfQ09ORklHX09QVElPTl9DT01QSUxFX1VOUEFURU5URURfSElOVElOR106IEFkZCBgYm90aF94X2F4aXMnLgorCisyMDAzLTA0LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKGhhc2hfYnVja2V0LCBoYXNoX2xvb2t1cCk6IFVzZSBgY29uc3QnIGZvciBmaXJzdAorCWFyZ3VtZW50LgorCShiZGZfZ2V0X2ZvbnRfcHJvcGVydHkpOiBVc2UgYGNvbnN0JyBmb3IgdGhpcmQgYXJndW1lbnQuCisJVXBkYXRlZCBhbGwgY2FsbGVycy4KKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IFNldCBwaXhlbCB3aWR0aCBhbmQgaGVpZ2h0CisJc2ltaWxhciB0byB0aGUgUENGIGRyaXZlci4KKwkqIHNyYy9iZGYvYmRmLmggKF9oYXNobm9kZSk6IFVzZSBgY29uc3QnIGZvciBga2V5Jy4KKwlVcGRhdGVkLgorCisJKiBzcmMvZ3ppcC9mdGd6aXAuYzogQysrIGRvZXNuJ3QgbGlrZSB0aGF0IHRoZSBhcnJheSBgaW5mbGF0ZV9tYXNrJworCWlzIGRlY2xhcmVkIHR3aWNlLiAgSXQgaXMgcGVyaGFwcyBiZXR0ZXIgdG8gbW9kaWZ5IHRoZSB6bGliIHNvdXJjZQorCWZpbGVzIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhpcyBoYWNrLgorCSh6Y2FsbG9jLCB6ZnJlZSwgZnRfZ3ppcF9zdHJlYW1fY2xvc2UsIGZ0X2d6aXBfc3RyZWFtX2lvKTogQWRkIGNhc3RzCisJdG8gbWFrZSBidWlsZCB3aXRoIGcrKyBzdWNjZXNzZnVsLgorCisyMDAzLTA0LTI0ICBNYW5pc2ggU2luZ2ggIDx5b3NoQGdpbXAub3JnPgorCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfaW5pdCksIHNyYy90eXBlMS90MW9ianMuYworCShUMV9GYWNlX0luaXQpLCBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IFNwbGl0IG9uIGAtJworCWFsc28gZm9yIHNlYXJjaGluZyB0aGUgc3R5bGUgbmFtZS4KKworMjAwMy0wNC0yNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IEZpeGVkIHRoZSBjb21wdXRhdGlvbiBvZgorCWZhY2UtPm51bV9nbHlwaHMuICBXZSBtdXN0IGluY3JlYXNlIHRoZSB2YWx1ZSBieSAxIHRvIHJlc3BlY3QgdGhlCisJY29udmVudGlvbiB0aGF0IGdseXBoIGluZGV4IDAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZSBgbWlzc2luZworCWdseXBoJy4KKworMjAwMy0wNC0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluIChDRkxBR1MpOiBBZGQgQENQUEZMQUdTQC4KKworMjAwMy0wNC0yNCAgRGlldGVyIEJhcm9uICA8ZGlsbG9AbmV0YnNkLm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluIChjZmxhZ3MpOiBFbWl0IEZyZWVUeXBlIDIncyBpbmNsdWRlCisJZmlsZXMgZmlyc3QuICBPdGhlcndpc2UgdGhlcmUgYXJlIGNvbmZsaWN0cyB3aXRoIEZyZWVUeXBlIDEKKwlpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuCisKKzIwMDMtMDQtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeGluZyBidWdzIHJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKworCSogc3JjL2Jhc2UvZnRzdHJva2VyLmMgKEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lKTogUmVtb3ZlIHVudXNlZAorCXZhcmlhYmxlIGBpbl9wYXRoJy4KKworCSogc3JjL2Jhc2UvZnRvYmpzIChmdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCk6IENoYW5nZSB0eXBlIG9mCisJc2Vjb25kIGFyZ3VtZW50IHRvIGBGVF9CeXRlKicuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBVcGRhdGVkLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3JlYWRzdHJlYW0pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGByZXMnLgorCShfYmRmX3BhcnNlX2dseXBocyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5leHQnLgorCU1hcmsgYGNhbGxfZGF0YScgYXMgdW51c2VkLgorCisJKiBzcmMvY2FjaGUvZnRscnUuYyAoRlRfTHJ1TGlzdF9Mb29rdXApOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisJYHBsYXN0Jy4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9zZWVrX3RvX3RhYmxlX3R5cGUpOiBTbGlnaHQgcmVjb2RpbmcgdG8KKwlhY3R1YWxseSB1c2UgYGVycm9yJy4KKwkocGNmX2xvYWRfZm9udCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGF2Z3cnLgorCisJKiBzcmMvcGZyL3Bmcm9ianMuYyAocGZyX2ZhY2VfZ2V0X2tlcm5pbmcpOiBDaGFuZ2UgcmV0dXJuIHR5cGUKKwl0byBgdm9pZCcuCisJTWFyayBgZXJyb3InIGFzIHVudXNlZC4KKwkqIHNyYy9wZnIvcGZyb2Jqcy5oOiBVcGRhdGVkLgorCSogc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfZ2V0X2tlcm5pbmcpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoc2ZudF9kaXJfY2hlY2spOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisJYGZvcm1hdF90YWcnLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2NtYXA2X3ZhbGlkYXRlLCB0dF9jbWFwMTBfdmFsaWRhdGUpOiBSZW1vdmUKKwl1bnVzZWQgdmFyaWFibGUgYHN0YXJ0Jy4KKwkodHRfY21hcDEwX2NoYXJfbmV4dCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHJlc3VsdCcKKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X2ZhY2VfZ2V0X25hbWUpOiBNYXJrIGBlcnJvcicgYXMgdW51c2VkLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChnZXRfc2ZudF9wb3N0c2NyaXB0X25hbWUpOiBNYXJrIGBlcnJvcicgYXMKKwl1bnVzZWQuCisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCWBwc2hpbnRlcicuCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpOiBVc2UgYGdseXBoX2RhdGFfbG9hZGVkJworCW9ubHkgZm9yIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwuCisKKzIwMDMtMDQtMjMgIEFraXRvIEhpcmFpICA8YWtpdG9Aa2RlLmdyLmpwPgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2NtYXA0X3ZhbGlkYXRlKTogUHJvdmlkZSBhIHdlYWsgdmFyaWFudAorCW9mIHRoZSBnbHlwaCBJRCBib3VuZGluZyBjaGVjayBpZiBGVF9WQUxJREFURV9USUdIVCBpcyBub3QgYWN0aXZlLgorCVdpdGhvdXQgdGhpcyBjaGFuZ2UsIG1hbnkgQ0pLIGZvbnRzIGZyb20gRHluYWxhYiBhcmUgcmVqZWN0ZWQuCisKKzIwMDMtMDQtMjMgIEpvZSBNYXJjdXMgQ2xhcmtlICA8bWFyY3VzQEZyZWVCU0Qub3JnPgorCisJKiBzcmMvYmFzZS9mdGJkZi5jIChGVF9HZXRfQkRGX1Byb3BlcnR5KTogQ2hlY2sgZm9yIHZhbGlkCisJYGdldF9pbnRlcmZhY2UnLgorCisyMDAzLTA0LTIzICBQYXVsIE1pbGxlciAgPHBhdWxtQHByb2ZvdW5kZWZmZWN0cy5jb20+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKHBhcnNlX2ZvbmQpOiBGaXggaGFuZGxpbmcgb2Ygc3R5bGUgbmFtZXMuCisKKzIwMDMtMDQtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Bmci9wZnJsb2FkLmMgKHBmcl9leHRyYV9pdGVtX2xvYWRfZm9udF9pZCk6IFVzZSBGVF9QdHJEaXN0CisJaW5zdGVhZCBvZiBGVF9VaW50IGZvciBgbGVuJy4KKworMjAwMy0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvZ3ppcC9mdGd6aXAuYyAoemNhbGxvYykgWyFGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCXToKKwlDb252ZXJ0IEsmUiBmb3JtYXQgdG8gbW9kZXJuIEMgdXNhZ2UuCisJKEZUX1N0cmVhbV9PcGVuR3ppcCk6IFVzZSBsb25nIGNvbnN0YW50LgorCisyMDAzLTA0LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfY2FjaGVfbG9va3VwKTogUmVtb3ZlIHNoYWRvdyBkZWNsYXJhdGlvbgorCW9mIGBtYW5hZ2VyJy4KKworMjAwMy0wNC0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2MvSU5TVEFMTC5VTlg6IENsZWFuZWQgdXAuCisKKzIwMDMtMDQtMDkgIFRvcnJleSBMeW9ucyAgPHRvcnJleUBtcmNsYS5jb20+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKG9wZW5fZmFjZV9mcm9tX2J1ZmZlcik6IFJlbW92ZWQgYSBkb3VibGUtZnJlZQorCWJ1ZyB0aGF0IGhhZCBuYXN0eSBjb25zZXF1ZW5jZXMgd2hlbiB0cnlpbmcgdG8gb3BlbiBhbiBgaW52YWxpZCcKKwlmb250IG9uIGEgTWFjLgorCisyMDAzLTA0LTA5ICBNaWtlIEZhYmlhbiAgPG1mYWJpYW5Ac3VzZS5kZT4KKworCSogc3JjL2JkZi9iZGZkcml2ci5oIChCREZfZW5jb2RpbmdfZWwpLCBzcmMvcGNmL3BjZi5oCisJKFBDRl9FbmNvZGluZ1JlYyk6IENoYW5nZWQgRlRfU2hvcnQgdG8gRlRfVVNob3J0IGluIG9yZGVyIHRvIGJlIGFibGUKKwl0byBhY2Nlc3MgbW9yZSB0aGFuIDMyNzY4IGdseXBocyBpbiBmb250cy4KKworMjAwMy0wNC0wOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisKKwkqIFZlcnNpb24gMi4xLjQgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzIwMDMtMDQtMDMgIE1hcnRpbiBNdXNrZW5zICA8bW11c2tlbnNAYXVyZWxvbi5jb20+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfT3Blbl9GYWNlKTogRml4ZWQgdGhlIGNvZGUgdG8gbWFrZSBpdAorCWhhbmRsZSBzcGVjaWFsIGNhc2VzIHdoZXJlIGEgZm9udCBvbmx5IGNvbnRhaW5zIGEgYC5ub3RkZWYnIGdseXBoCisJKGhhcHBlbnMgaW4gUERGLWVtYmVkZGVkIGZvbnRzKS4gIE90aGVyd2lzZSwgRlRfUGFuaWMgd2FzIGNhbGxlZC4KKworMjAwMy0wMy0yNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBSRUFETUU6IFVkcGF0ZWQuCisKKwkqIFJFQURNRS5VTlg6IFJlbW92ZWQgKG5vdyByZXBsYWNlZCBieSBkb2NzL0lOU1RBTEwuVU5YKS4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmM6IFRoZSBoaW50ZXIgbm93IHBlcmZvcm1zIGFzIGluIDIuMS4zIGFuZAorCXdpbGwgaWdub3JlIHN0ZW0gcXVhbnRpemF0aW9uIG9ubHkgd2hlbiBGVF9MT0FEX1RBUkdFVF9TTU9PVEggaXMKKwl1c2VkLgorCShwc2gzX2RpbWVuc2lvbl9xdWFudGl6ZV9sZW4pOiBFbmFibGVkLgorCShwc2gzX2hpbnRfYWxpZ24pOiBFbmFibGUgY29tbWVudGVkIGNvZGUuCisJKHBzaDNfaGludF9hbGlnbl9saWdodCk6IENvbW1lbnRlZCBvdXQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcl9TaXplKTogQ2hhbmdlZCB0aGUgZGVmYXVsdAorCWNvbXB1dGF0aW9ucyB0byBpbmNsdWRlIHJvdW5kaW5nIGluIGFsbCBjYXNlczsgdGhpcyBpcyByZXF1aXJlZCB0bworCXByb3ZpZGUgYWNjdXJhdGUga2VybmluZyBkYXRhIHdoZW4gbmF0aXZlIFRydWVUeXBlIGhpbnRpbmcgaXMKKwllbmFibGVkLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKGlzX25hbWVfY2hhcik6IFRoZSBUeXBlIDEgbG9hZGVyIG5vdyBhY2NlcHRzCisJbW9yZSBnZW5lcmFsIG5hbWVzIGFjY29yZGluZyB0byB0aGUgUG9zdFNjcmlwdCBzcGVjaWZpY2F0aW9uICh0aGUKKwlwcmV2aW91cyBvbmUgd2FzIHRvbyByZXN0cmljdGl2ZSkuCisJKHBhcnNlX2ZvbnRfbmFtZSwgcGFyc2VfZW5jb2RpbmcsIHBhcnNlX2NoYXJzdHJpbmdzLCBwYXJzZV9kaWN0KToKKwlVc2UgYGlzX25hbWVfY2hhcicuCisJKHBhcnNlX3N1YnJzKTogSGFuZGxlIGVtcHR5IGFycmF5cy4KKworMjAwMy0wMy0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJU2VyaW91cyByZXdyaXRpbmcgb2YgdGhlIGRvY3VtZW50YXRpb24uCisKKwkqIGRvY3MvQlVHUywgZG9jcy9CVUlMRDogUmVtb3ZlZC4KKwkqIGRvY3MvREVCVUcuVFhUOiBSZW5hbWVkIHRvLi4uCisJKiBkb2NzL0RFQlVHOiBUaGlzLgorCSogZG9jcy9DVVNUT01JWkUsIGRvY3MvVFJVRVRZUEUsIGRvY3MvVVBHUkFERS5VTlg6IE5ldyBmaWxlcy4KKwkqIGRvY3MvSU5TVEFMTC5BTlksIGRvY3MvSU5TVEFMTC5VTlgsIGRvY3MvSU5TVEFMTC5HTlUgTmV3IGZpbGVzLAorCWNvbnRhaW5pbmcgcGxhdGZvcm0gc3BlY2lmaWMgaW5mb3JtYXRpb24gcHJldmlvdXNseSBpbiBJTlNUQUxMLgorCSogZG9jcy9yZWFkbWUudm1zOiBSZW5hbWVkIHRvLi4uCisJKiBkb2NzL0lOU1RBTEwuVk1TOiBUaGlzLgorCisJKiBkb2NzLyo6IFVwZGF0ZWQuCisKKwlJbnRyb2R1Y2VkIHRocmVlIG5ldyBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGdseXBoIGJpdG1hcHMgd2l0aGluCisJRlRfR2x5cGhTbG90IG9iamVjdHM6CisKKwkgIGZ0X2dseXBoc2xvdF9mcmVlX2JpdG1hcAorCSAgZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcAorCSAgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAKKworCVRoZXNlIGZ1bmN0aW9ucyBhcmUgbXVjaCBtb3JlIGNvbnZlbmllbnQgdG8gdXNlIHRoYW4gbWFuYWdpbmcgdGhlCisJRlRfR0xZUEhfT1dOX0JJVE1BUCBmbGFnIG1hbnVhbGx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXAsCisJZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCwgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXApOiBOZXcgZnVuY3Rpb25zLgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEltcGxlbWVudCB0aGVtLgorCShmdF9nbHlwaHNsb3RfZG9uZSk6IFVzZSBmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXAuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0dseXBoX0xvYWQpLCBzcmMvcGNmL3BjZmRyaXZlci5jCisJKFBDRl9HbHlwaF9Mb2FkKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbWVtb3J5Jy4KKwlVc2UgYGZ0X2dseXBoc2xvdF8qJyBmdW5jdGlvbnMuCisJRG9uJ3Qgc2V0IGBGVF9HTFlQSF9PV05fQklUTUFQJy4KKworCSogc3JjL3Bmci9wZnJzYml0LmMgKHBmcl9zbG90X2xvYWRfYml0bWFwKTogVXNlCisJYGZ0X2dseXBoc2xvdF9hbGxvY19iaXRtYXAnLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoTG9hZF9TQml0X0ltYWdlKTogQ2hhbmdlIDV0aCBhcmd1bWVudCB0byB0eXBlCisJYEZUX0dseXBoU2xvdCcuCisJQWRkaW5nIGFyZ3VtZW50IGBkZXB0aCcgdG8gaGFuZGxlIHJlY3Vyc2l2ZSBjYWxscy4KKwlVc2UgYGZ0X2dseXBoc2xvdF9hbGxvY19iaXRtYXAnLgorCSh0dF9mYWNlX2xvYWRfc2JpdF9pbWFnZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG1lbW9yeScuCisJRG9uJ3QgaGFuZGxlIGBGVF9HTFlQSF9PV05fQklUTUFQJy4KKwlVcGRhdGUgY2FsbCB0byBMb2FkX1NCaXRfSW1hZ2UuCisKKwkqIHNyYy90eXBlNDIvdDQyb2Jqcy5jIChmdF9nbHlwaHNsb3RfY2xlYXIpOiBSZW5hbWVkIHRvLi4uCisJKHQ0Ml9nbHlwaHNsb3RfY2xlYXIpOiBUaGlzLiAgVXBkYXRlZCBjYWxsZXIuCisJQ2FsbCBgZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwJy4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfTG9hZF9HbHlwaCk6IFVzZQorCWBmdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCcuCisJRG9uJ3QgaGFuZGxlIGBGVF9HTFlQSF9PV05fQklUTUFQJy4KKworCSogc3JjL2NhY2hlL2Z0bHJ1LmMgKEZUX0xydUxpc3RfTG9va3VwKTogRml4ZWQgYW4gaW52YWxpZCBhc3NlcnRpb24KKwljaGVjay4KKworCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguYyAoYWhfb3V0bGluZV9sb2FkKTogQWRkIHR3byBzY2FsaW5nCisJYXJndW1lbnRzLgorCSogc3JjL2F1dG9oaW50L2FoZ2x5cGguaDogVXBkYXRlZC4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2xvYWQpOiBVcGRhdGVkLgorCSogc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMgKGFoX2hpbnRlcl9jb21wdXRlX3dpZHRocyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfZmFtaWx5X2RvbmUpOiBGaXhlZCBzbWFsbCBidWcgdGhhdCBjb3VsZAorCWNyYXNoIHRoZSBjYWNoZSBpbiByYXJlIGNpcmN1bXN0YW5jZXMgKG1vc3RseSB3aXRoIGJyb2tlbiBmb250cykuCisKKzIwMDMtMDMtMTUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKFNldF9DaGFyX1NpemVzKTogRml4ZWQgYSBzbWFsbCByb3VuZGluZworCWJ1Zy4gIEFjdHVhbGx5LCBpdCBzZWVtcyB0aGF0IHByZXZpb3VzIHZlcnNpb25zIG9mIEZyZWVUeXBlIGRpZG4ndAorCXBlcmZvcm0gVHJ1ZVR5cGUgcm91bmRpbmcgZXhhY3RseSBhcyBhcHByb3ByaWF0ZS4KKworMjAwMy0wMy0xNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAoU2V0X0NoYXJfU2l6ZXMpOiBGaXhpbmcgdGhlIHNtYWxsCisJVHJ1ZVR5cGUgbmF0aXZlIHJlbmRlcmluZyBnbGl0Y2hlczsgdGhleSBjYW1lIGZyb20gYSBzbWFsbCByb3VuZGluZworCWVycm9yLgorCisyMDAzLTAzLTEzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGRlZCBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGNvbnRyb2wgbWVtb3J5IGRlYnVnZ2luZyB3aXRoCisJRnJlZVR5cGUuICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGBGVDJfREVCVUdfTUVNT1JZJywKKwlgRlQyX0FMTE9DX1RPVEFMX01BWCcgYW5kIGBGVDJfQUxMT0NfQ09VTlRfTUFYJyBpbiBERUJVRy5UWFQuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKEZUX01lbVRhYmxlUmVjKTogQWRkIGBhbGxvY19jb3VudCcsCisJYGJvdW5kX3RvdGFsJywgYGFsbG9jX3RvdGFsX21heCcsIGBib3VuZF9jb3VudCcsIGBhbGxvY19jb3VudF9tYXgnLgorCShmdF9tZW1fZGVidWdfYWxsb2MpOiBIYW5kbGUgbmV3IHZhcmlhYmxlcy4KKwkoZnRfbWVtX2RlYnVnX2luaXQpOiBzL0ZUX0RFQlVHX01FTU9SWS9GVDJfREVCVUdfTUVNT1JZLy4KKwlIYW5kbGUgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwkqIGRvY3MvREVCVUcuVFhUOiBVcGRhdGVkLgorCisJRml4ZWQgdGhlIGNhY2hlIHN1Yi1zeXN0ZW0gdG8gY29ycmVjdGx5IGRlYWwgd2l0aCBvdXQtb2YtbWVtb3J5CisJY29uZGl0aW9ucy4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKGZ0Y19ub2RlX2Rlc3Ryb3kpOiBDb21tZW50IG91dCBnZW5lcmljCisJY2hlY2suCisJKGZ0Y19jYWNoZV9sb29rdXApOiBJbXBsZW1lbnQgbG9vcC4KKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmM6IERlZmluZSBGVF9DT01QT05FTlQuCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3NiaXRfbm9kZV9sb2FkKTogSGFuZGxlCisJRlRfRXJyX091dF9PZl9NZW1vcnkuCisJKiBzcmMvY2FjaGUvZnRscnUuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgorCShGVF9McnVMaXN0X0xvb2t1cCk6IEltcGxlbWVudCBsb29wLgorCisJKiBzcmMvcGZyL3Bmcm9ianMuYyAocGZyX2ZhY2VfZG9uZSk6IEZpeCBtZW1vcnkgbGVhay4KKwkocGZyX2ZhY2VfaW5pdCk6IEZpeGluZyBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChyZWFsbG9jYXRlX3QxX3RhYmxlKTogRml4ZWQgYSBidWcgKG1lbW9yeQorCWxlYWspIHRoYXQgb25seSBoYXBwZW5lZCB3aGVuIGEgdHJ5IHRvIHJlc2l6ZSBhbiBhcnJheSB3b3VsZCBlbmQgaW4KKwlhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbi4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfY29udmVydF9nbHlwaCk6IFJlbW92ZWQgY29tcGlsZXIKKwl3YXJuaW5ncyAvIHZvbGF0aWxlIGJ1Zy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9nbHlwaHpvbmVfZG9uZSk6IFJlbW92ZWQgc2VnbWVudGF0aW9uCisJZmF1bHQgdGhhdCBoYXBwZW5lZCBpbiB0aWdodCBtZW1vcnkgZW52aXJvbm1lbnRzLgorCisyMDAzLTAyLTI4ICBQaXhlbCAgPHBpeGVsQG1hbmRyYWtlc29mdC5jb20+CisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChmdF9nemlwX2ZpbGVfZG9uZSk6IEZpeGVkIG1lbW9yeSBsZWFrOiBUaGUgWkxpYgorCXN0cmVhbSB3YXMgbm90IHByb3Blcmx5IGZpbmFsaXplZC4KKworMjAwMy0wMi0yNSAgQW50aG9ueSBGb2sgIDxhbnRob255QHRoaXpsaW51eC5jb20+CisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmM6IEluY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0guCisJKGZ0Y19jbWFwX2ZhbWlseV9pbml0KTogVGhlIGNtYXAgY2FjaGUgbm93CisJc3VwcG9ydHMgVUNTLTQgY2hhcm1hcHMgd2hlbiBhdmFpbGFibGUgaW4gQXNpYW4gZm9udHMuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jLCBzcmMvYmFzZS9mdG9ianMuYzogQ2hhbmdlZCBgYXNpYW4nIHRvIGBBc2lhbicKKwlpbiBjb21tZW50cy4KKworMjAwMy0wMi0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvZ3ppcC9mdGd6aXAuYyAoZnRfZ3ppcF9maWxlX2ZpbGxfb3V0cHV0KTogRml4ZWQgYSBidWcgdGhhdAorCWNhdXNlZCBGcmVlVHlwZSB0byBsb29wIGVuZGxlc3NseSB3aGVuIHRyeWluZyB0byByZWFkIGNlcnRhaW4KKwljb21wcmVzc2VkIGd6aXAgZmlsZXMuICBUaGUgZm9sbG93aW5nIHRlc3QgcmV2ZWFscyB0aGUgYnVnOgorCisJICB0b3VjaCAwMTIzNDU2Nzg5IDsgZ3ppcCAwMTIzNDU2Nzg5IDsgZnRkdW1wIDAxMjM0NTY3ODkuZ3oKKworCVNldmVyYWwgZml4ZXMgdG8gdGhlIFBGUiBmb250IGRyaXZlcjoKKworCS0gVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGVtYmVkZGVkIGJpdG1hcHMgd2FzIG5vdCBjb3JyZWN0bHkgc2V0IGluCisJICB0aGUgcm9vdCBGVF9GYWNlUmVjIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBmYWNlLgorCisJLSBUaGUgZ2x5cGggbG9hZGVyIGFsd2F5cyB0cmllZCB0byBsb2FkIHRoZSBvdXRsaW5lcyB3aGVuCisJICBGVF9MT0FEX1NCSVRTX09OTFkgd2FzIHNwZWNpZmllZC4KKworCS0gVGhlIHRhYmxlIGxvYWRlZCBub3cgc2NhbnMgZm9yICp1bmRvY3VtZW50ZWQqIGVsZW1lbnRzIG9mIGEKKwkgIHBoeXNpY2FsIGZvbnQncyBhdXhpbGlhcnkgZGF0YSByZWNvcmQuICBUaGlzIGlzIG5lY2Vzc2FyeSB0bworCSAgcmV0cmlldmUgdGhlIGByZWFsJyBmYW1pbHkgYW5kIHN0eWxlIG5hbWVzLgorCisJTk9URSBUSEFUIFRIRVNFIENIQU5HRVMgVEhFIEZBTUlMWSBOQU1FIE9GIE1BTlkgUEZSIEZPTlRTIQorCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2F1eF9uYW1lX2xvYWQpOiBOZXcgZnVuY3Rpb24uCisJKHBmcl9waHlfZm9udF9kb25lKTogRnJlZSBgZmFtaWx5X25hbWUnIGFuZCBgc3R5bGVfbmFtZScgYWxzby4KKwlSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKwkocGZyX3BoeV9mb250X2xvYWQpOiBFeHRyYWN0IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhdXhpbGlhcnkKKwlieXRlcy4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2RvbmUpOiBTZXQgcG9pbnRlcnMgdG8gTlVMTC4KKwkocGZyX2ZhY2VfaW5pdCk6IFByb3ZpZGUgZmFsbGJhY2sgdmFsdWVzIGZvciBgZmFtaWx5X25hbWUnIGFuZAorCWBzdHlsZV9uYW1lJy4KKwlIYW5kbGUgc3RyaWtlcy4KKwkocGZyX3Nsb3RfbG9hZCk6IEhhbmRsZSBGVF9MT0FEX1NCSVRTX09OTFkuCisJKiBzcmMvcGZyL3BmcnR5cGVzLmggKFBGUl9QaHlGb250UmVjKTogQWRkIGZpZWxkcyBgYXNjZW50JywKKwlgZGVzY2VudCcsIGBsZWFkaW5nJywgYGZhbWlseV9uYW1lJywgYW5kIGBzdHlsZV9uYW1lJy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKFNldF9DaGFyX1NpemVzKTogRml4ZWQgYSByb3VuZGluZyBidWcKKwl3aGVuIGNvbXB1dGluZyB0aGUgc2NhbGUgZmFjdG9ycyBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIgc2l6ZSBpbgorCXBvaW50cyB3aXRoIHJlc29sdXRpb24uCisKKwkqIGRldmVsL2Z0MmJ1aWxkLmgsIGRldmVsL2Z0b3B0aW9uLmg6IE5ldyBmaWxlcyAoaW4gYSBuZXcgZGlyZWN0b3J5KQorCXdoaWNoIGFyZSBzcGVjaWFsIGRldmVsb3BtZW50IHZlcnNpb25zIG9mIGluY2x1ZGUvZnQyYnVpbGQuaCBhbmQKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCByZXNwZWN0aXZlbHkuCisKKzIwMDMtMDItMTggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUZpeGluZyB0aGUgc2xpZ2h0IGRpc3RvcnRpb24gcHJvYmxlbSB0aGF0IG9jY3VycmVkIGR1ZSB0byB0aGUgbGF0ZXN0CisJYXV0by1oaW50ZXIgY2hhbmdlcy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3JlY29tcHV0ZV9zY2FsZWRfbWV0cmljcyk6IEZpeCByb3VuZGluZy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKFNldF9DaGFyX1NpemVzKTogTmV3IHZhcmlhYmxlIGBtZXRyaWNzMicuCisJWyFUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSXTogUmVtb3ZlZC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChUVF9TaXplUmVjKTogTmV3IGZpZWxkIGBtZXRyaWNzJy4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoUmVzZXRfT3V0bGluZV9TaXplKTogRml4IGluaXRpYWxpemF0aW9uIG9mCisJYG1ldHJpY3MnLgorCVtGVF9DT05GSUdfQ0hFU1RFUl9BU0NFTkRFUl06IENvZGUgcmVtb3ZlZC4KKwkoUmVzZXRfU0JpdF9TaXplKTogRml4IGluaXRpYWxpemF0aW9uIG9mIGBtZXRyaWNzJy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX0xvYWRfQ29udGV4dCk6IEZpeCBpbml0aWFsaXphdGlvbiBvZgorCWBleGVjLT5tZXRyaWNzJy4KKworCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9oaW50ZXJfbG9hZCk6IERpc2FibGVkIHRoZSBhZHZhbmNlIHdpZHRoCisJYGNvcnJlY3Rpb24nIHdoaWNoIHNlZW1lZCB0byBwcm92aWRlIG1vcmUgdHJvdWJsZSB0aGFuIGJlbmVmaXRzLgorCisyMDAzLTAyLTEzICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwlDaGFuZ2VkIHRoZSBpbmNyZW1lbnRhbCBsb2FkaW5nIGludGVyZmFjZSBpbiBhIHdheSB0aGF0IG1ha2VzIGl0CisJc2ltcGxlciBhbmQgYWxsb3dzIGdseXBoIG1ldHJpY3MgdG8gYmUgY2hhbmdlZCAoZS5nLiwgYnkgYWRkaW5nIGEKKwljb25zdGFudCwgYXMgcmVxdWlyZWQgYnkgQ0ZGIGZvbnRzKSByYXRoZXIgdGhhbiBqdXN0IG92ZXJyaWRkZW4uCisJVGhpcyB3YXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgR2hvc3RTY3JpcHQtdG8tRnJlZVR5cGUgYnJpZGdlIHdvcmsuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCkgW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOgorCUFsbG93IG1ldHJpY3MgdG8gYmUgb3ZlcnJpZGRlbi4KKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXToKKwlEaXR0by4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCkKKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IFNpbXBsaWZ5LgorCShjb21wdXRlX2dseXBoX21ldHJpY3MpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogQ29kZSBibG9jaworCW1vdmVkIGRvd24uCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmg6IFVwZGF0ZWQuCisKKzIwMDMtMDEtMzEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL1ZFUlNJT04uRExMLCBkb2NzL1RPRE86IFVwZGF0aW5nIGRvY3VtZW50YXRpb24KKwlmb3IgdGhlIDIuMS40IHJlbGVhc2UuCisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sOiBVcGRhdGluZyB0aGUgcHJvamVjdCBmaWxlIGZvcgorCTIuMS40LgorCisJKiBzcmMvZ3ppcC9hZGxlcjMyLmMsIHNyYy9nemlwL2Z0Z3ppcC5jLCBzcmMvZ3ppcC9pbmZibG9jay5jLAorCXNyYy9nemlwL2luZmNvZGVzLmMsIHNyYy9nemlwL2luZmxhdGUuYywgc3JjL2d6aXAvaW5mdHJlZXMuYywKKwlzcmMvZ3ppcC9pbmZ1dGlsLmM6IFJlbW92ZWQgb2xkLXN0eWxlIChLJlIpZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisJVGhpcyBhdm9pZHMgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrIGF0IGl0cyBtb3N0IHBlZGFudGljIG1vZGUuCisKKwkqIHNyYy9wZnIvcGZyc2JpdC5jOiBSZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvY2FjaGUvZnRjY21hcC5jIChmdGNfY21hcF9mYW1pbHlfaW5pdCk6IENoYW5nZWQgYW4gRlRfRVJST1IKKwlpbnRvIGFuIEZUX1RSQUNFMSBzaW5jZSBpdCBjYXVzZWQgYGZ0dmlldycgYW5kIG90aGVycyB0byBkdW1wIHRvbworCW11Y2gganVuayB3aGVuIHRyeWluZyB0byBkaXNwbGF5IGEgd2F0ZXJmYWxsIHdpdGggYSBmb250IHdpdGhvdXQgYQorCVVuaWNvZGUgY2hhcm1hcCAoZS5nLiAgU1lNQk9MLlRURikuCisKKwlJbXBsZW1lbnRlZCBGVF9DT05GSUdfQ0hFU1RFUl9CTFVFX1NDQUxFLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYXN0CisJcGF0Y2ggZnJvbSBEYXZpZCBDaGVzdGVyLCBidXQgd2l0aCBhIG11Y2ggc2ltcGxlciAoYW5kIHNhbmVyKQorCWltcGxlbWVudGF0aW9uLgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRlcl9sb2FkX2dseXBoKQorCVtGVF9DT05GSUdfQ0hFU1RFUl9CTFVFX1NDQUxFXTogVHJ5IHRvIG9wdGltaXplIHRoZSB5X3NjYWxlIHNvIHRoYXQKKwl0aGUgdG9wIG9mIG5vbi1jYXBpdGFsIGxldHRlcnMgaXMgYWxpZ25lZCBvbiBhIHBpeGVsIGJvdW5kYXJ5CisJd2hlbmV2ZXIgcG9zc2libGUuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcl9TaXplKQorCVtGVF9DT05GSUdfQ0hFU1RFUl9CTFVFX1NDQUxFXTogUm91bmQgZGlmZmVyZW50bHkuCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAoU2V0X0NoYXJfU2l6ZXMpCisJW1RUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVJdOiBEbyBzb21lIHJvdW5kaW5nIG9ubHkKKwlpZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoUmVzZXRfT3V0bGluZV9TaXplKQorCVtGVF9DT05GSUdfQ0hFU1RFUl9BU0NFTkRFUl06IFJvdW5kIGRpZmZlcmVudGx5LgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYzogSW1wcm92ZWQgdGhlIFBvc3RzY3JpcHQgaGludGVyLiAgR2V0dGluZworCXJpZCBvZiBzdGVtIHNuYXBwaW5nIHNlZW1zIHRvIHdvcmsgd2VsbCBoZXJlICh0aG91Z2ggdGhlIHN0ZW1zIGFyZQorCXN0aWxsIHNsaWdodGx5IG1vdmVkIHRvIGluY3JlYXNlIGNvbnRyYXN0KS4KKwkocHNoM19kaW1lbnNpb25fcXVhbnRpemVfbGVuKTogQ29tbWVudGVkIG91dC4KKwkocHNoM19oaW50X2FsaWduX2xpZ2h0KTogTmV3IGZ1bmN0aW9uLgorCShwc2gzX2hpbnRfYWxpZ24pOiBDb21tZW50IG91dCBzb21lIGNvZGUuCisKKwlUSElTIElNUFJPVkVTIEFOVEktQUxJQVNFRCBSRU5ERVJJTkcsIEJVVCBNT05PQ0hST01FIEFORCBMQ0QgTU9ERVMKKwlTVElMTCBTVUNLLgorCisyMDAzLTAxLTIyICBEYXZpZCBDaGVzdGVyICA8ZGF2aWRjaGVzdGVyQHFteC5uZXQ+CisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfY29tcHV0ZV9zdGVtX3dpZHRoKTogU21hbGwgZml4IHRvIHRoZQorCXN0ZW0gd2lkdGggb3B0aW1pemF0aW9uLgorCisyMDAzLTAxLTIyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGRpbmcgYSBuZXcgQVBJIGBGVF9HZXRfQkRGX1Byb3BlcnR5JyB0byByZXRyaWV2ZSB0aGUgQkRGCisJcHJvcGVydGllcyBvZiBhIGdpdmVuIFBDRiBvciBCREYgZm9udC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oIChCREZfUHJvcGVydHlUeXBlKTogTmV3IGVudW1lcmF0aW9uLgorCShCREZfUHJvcGVydHksIEJERl9Qcm9wZXJ0eVJlYyk6IE5ldyBzdHJ1Y3R1cmUuCisJRlRfR2V0X0JERl9Qcm9wZXJ0eSk6IE5ldyBmdW5jdGlvbi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYmRmdHlwZXMuaDogSW5jbHVkZSBGVF9CREZfSC4KKwkoQkRGX0dldFByb3BlcnR5RnVuYyk6IE5ldyBmdW5jdGlvbiBwb2ludGVyLgorCisJKiBzcmMvYmFzZS9mdGJkZi5jICh0ZXN0X2ZvbnRfdHlwZSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24uCisJKEZUX0dldF9CREZfQ2hhcnNldF9JRCk6IFVzZSBgdGVzdF9mb250X3R5cGUnLgorCShGVF9HZXRfQkRGX1Byb3BlcnR5KTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmM6IEluY2x1ZGUgRlRfQkRGX0guCisJKGJkZl9nZXRfYmRmX3Byb3BlcnR5LCBiZGZfZHJpdmVyX3JlcXVlc3Rlcik6IE5ldyBmdW5jdGlvbnMuCisJKGJkZl9kcml2ZXJfY2xhc3MpOiBVc2UgYGJkZl9kcml2ZXJfcmVxdWVzdGVyJy4KKworCSogc3JjL3BjZi9wY2Zkcml2ci5jOiBJbmNsdWRlIEZUX0JERl9ILgorCShwY2ZfZ2V0X2JkZl9wcm9wZXJ0eSwgcGRjX2RyaXZlcl9yZXF1ZXN0ZXIpOiBOZXcgZnVuY3Rpb25zCisJKHBjZl9kcml2ZXJfY2xhc3MpOiBVc2UgYHBjZl9kcml2ZXJfcmVxdWVzdGVyJy4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmM6IEluY2x1ZGUgYHBjZnJlYWQuaCcuCisJKHBjZl9maW5kX3Byb3BlcnR5KTogRGVjb3JhdGUgaXQgd2l0aCBGVF9MT0NBTF9ERUYuCisJKiBzcmMvcGNmL3BjZnJlYWQuaDogTmV3IGZpbGUsIHByb3ZpZGluZyBgcGNmX2ZpbmRfcHJvcGVydHknLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoc2ZudF9kaXJfY2hlY2spOiBSZWxheGVkIHRoZSBgaGVhZCcgdGFibGUgc2l6ZQorCXZlcmlmaWNhdGlvbiB0byBhY2NlcHQgYSBmZXcgYnJva2VuIGZvbnRzIHdobyBwYWQgdGhlIHNpemUKKwlpbmNvcnJlY3RseSAodGhlIHRhYmxlIHNob3VsZCBiZSBwYWRkZWQsIGJ1dCBpdHMgYHNpemUnIGZpZWxkCisJc2hvdWxkbid0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbikuCisKKzIwMDMtMDEtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvbHRtYWluLnNoOiBSZWdlbmVyYXRlZCB3aXRoIGBsaWJ0b29saXplIC0tZm9yY2UKKwktLWNvcHknIGZyb20gbGlidG9vbCAxLjQuMy4KKwkqIGJ1aWxkcy91bml4L2FjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkIHdpdGggYGFjbG9jYWwgLUkgLicgZnJvbQorCWF1dG9tYWtlIDEuNy4xLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBSZWdlbmVyYXRlZCB3aXRoIGF1dG9jb25mIDIuNTQuCisJKiBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsIGJ1aWxkcy91bml4L2NvbmZpZy5zdWI6IFVwZGF0ZWQgZnJvbQorCWBjb25maWcnIENWUyBtb2R1bGUgYXQgc3VidmVyc2lvbnMuZ251Lm9yZy4KKwkqIGJ1aWxkcy91bml4L2luc3RhbGwtc2gsIGJ1aWxkcy91bml4L21raW5zdGFsbGRpcnM6IFVwZGF0ZWQgZnJvbQorCWBhdXRvbWFrZScgQ1ZTIG1vZHVsZSBhdCBzdWJ2ZXJzaW9ucy5nbnUub3JnLgorCisyMDAzLTAxLTE1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogRml4ZWQgZG9jdW1lbnRhdGlvbiBmb3IKKwlGVF9TaXplX01ldHJpY3MuCisKKzIwMDMtMDEtMTUgIEphbWVzIFN1ICA8c3V6aGVAdHVyYm9saW51eC5jb20uY24+CisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChmdF9nemlwX2NoZWNrX2hlYWRlcik6IEJ1Z2ZpeDogY291bGRuJ3QgcmVhZAorCWNlcnRhaW4gZ3ppcC1lZCBmb250IGZpbGVzICh0eXBvOiBgJiYnIC0+IGAmJykuCisKKzIwMDMtMDEtMTUgIEh1dyBEIE0gRGF2aWVzICA8aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs+CisKKwlBZGRlZCBhIFdpbmRvd3MgLkZOVCBzcGVjaWZpYyBBUEkgKG1vc3RseSBmb3IgV2luZSkuICBBbHNvIGZpeGVkIGEKKwluYXN0eSBidWcgaW4gdGhlIGhlYWRlciBsb2FkZXIgd2hpY2ggd291bGQgY2F1c2UgaW52YWxpZCBtZW1vcnkKKwlvdmVyd3JpdGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9XSU5GT05UU19IKTogTmV3IG1hY3JvCisJZm9yIGZ0d2luZm50LmguCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ZudHR5cGVzLmg6IEluY2x1ZGUgRlRfV0lORk9OVFNfSC4KKwkoRk5UX0ZvbnRSZWMpOiBVcGRhdGVkLgorCU1vdmUgV2luZG93cyBGTlQgZGVmaW5pdGlvbiB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oOiBUaGlzIG5ldyBmaWxlLgorCShGVF9XaW5GTlRfSGVhZGVyUmVjKTogUmVuYW1lIGByZXNlcnZlZDInIHRvIGByZXNlcnZlZDEnLgorCSogc3JjL2Jhc2UvZnR3aW5mbnQuYzogTmV3IGZpbGUsIHByb3ZpZGluZyBgRlRfR2V0X1dpbkZOVF9IZWFkZXInLgorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jICh3aW5mbnRfaGVhZGVyX2ZpZWxkcyk6IFVwZGF0ZWQuCisJUmVuYW1lIGByZXNlcnZlZDInIHRvIGByZXNlcnZlZDEnLgorCShmbnRfZm9udF9sb2FkKTogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvSmFtZmlsZSwgc3JjL2Jhc2UvZGVzY3JpcC5tbXMsIHNyYy9iYXNlL3J1bGVzLm1rOgorCVVwZGF0ZWQuCisKKzIwMDMtMDEtMTQgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmgsIHNyYy9iYXNlL2Z0Z2x5cGguYzogQWRkZWQgYGNvbnN0JyB0bworCXRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byBGVF9NYXRyaXhfTXVsdGlwbHksIHdoaWNoIGlzbid0CisJY2hhbmdlZCAtLSB0aGlzIGFkZHMgZG9jdW1lbnRhdGlvbiBhbmQgY29udmVuaWVuY2UuCisKKzIwMDMtMDEtMTMgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9tZXRyaWNzKQorCVtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogVHJ1ZVR5cGUgdHlwZWZhY2VzIHdpdGhvdXQKKwlob3Jpem9udGFsIG1ldHJpY3MgKHdpdGhvdXQgdGhlIGBobXR4JyB0YWJsZSkgYXJlIG5vdyB0b2xlcmF0ZWQgaWYKKwlhbiBpbmNyZW1lbnRhbCBpbnRlcmZhY2UgaGFzIGJlZW4gc3BlY2lmaWVkIHRoYXQgaGFzIGEKKwlnZXRfZ2x5cGhfbWV0cmljcyBmdW5jdGlvbiwgaW1wbHlpbmcgdGhhdCBtZXRyaWNzIHdpbGwgYmUgc3VwcGxpZWQKKwlmcm9tIG91dHNpZGUuICBUaGlzIGhhcHBlbnMgZm9yIGNlcnRhaW4gVHlwZSA0MiBmb250cyBwYXNzZWQgZnJvbQorCUdob3N0U2NyaXB0LgorCisyMDAzLTAxLTExICBEYXZpZCBDaGVzdGVyICA8ZGF2aWRjaGVzdGVyQHFteC5uZXQ+CisKKwlQYXRjaGVzIHRvIHRoZSBhdXRvLWhpbnRlciBpbiBvcmRlciB0byBzbGlnaHRseSBpbXByb3ZlIHRoZSBvdXRwdXQuCisJTm90ZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBuZXcKKwlGVF9DT05GSUdfT1BUSU9OX0NIRVNURVJfSElOVFMgZGVmaW5lZCBpbiBgZnRvcHRpb24uaCcuICBUaGVyZSBhcmUKKwlhbHNvIGluZGl2aWR1YWwgRlRfQ09ORklHX0NIRVNURVJfWFhYIG1hY3JvcyB0byBjb250cm9sIGluZGl2aWR1YWwKKwlgZmVhdHVyZXMnLgorCisJTm90ZSB0aGF0IGFsbCBpbXByb3ZlbWVudHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZQorCXR3ZWFrZWQgZm9yIG9wdGltaXphdGlvbiBhbmQgdGVzdGluZyBwdXJwb3Nlcy4gIFRoZSBjb25maWd1cmF0aW9uCisJbWFjcm9zIHdpbGwgbW9zdCBsaWtlbHkgZGlzYXBwZWFyIGluIHRoZSBzaG9ydCBmdXR1cmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9DSEVTVEVSX0hJTlRTKTogTmV3IG1hY3JvLgorCShGVF9DT05GSUdfQ0hFU1RFUl97U01BTExfRixBU0NFTkRFUixTRVJJRixTVEVNLEJMVUVfU0NBTEV9KQorCVtGVF9DT05GSUdfT1BUSU9OX0NIRVNURVJfSElOVFNdOiBOZXcgbWFjcm9zIHRvIGNvbnRyb2wgaW5kaXZpZHVhbAorCWZlYXR1cmVzLgorCisJKiBzcmMvYXV0b2hpbnQvYWhnbG9iYWwuYyAoYmx1ZV9jaGFycykgW0ZUX0NPTkZJR19DSEVTVEVSX1NNQUxMX0ZdOgorCUFkZCBibHVlIHpvbmUgZm9yIGBmaWprZGJoJy4KKwkqIHNyYy9hdXRvaGludC9haGdsb2JhbC5oIChBSF9JU19UT1BfQkxVRSkKKwlbRlRfQ09ORklHX0NIRVNURVJfU01BTExfRl06IFVzZSBgQUhfQkxVRV9TTUFMTF9GX1RPUCcuCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jIChhaF9vdXRsaW5lX2NvbXB1dGVfZWRnZXMpCisJW0ZUX0NPTkZJR19DSEVTVEVSX1NFUklGXTogVXNlIGBBSF9FREdFX1NFUklGJy4KKwkoYWhfb3V0bGluZV9jb21wdXRlX2JsdWVfZWRnZXMpIFtGVF9DT05GSUdfQ0hFU1RFUl9TTUFMTF9GXToKKwlJbmNyZWFzZSB0aHJlc2hvbGQgZm9yIGBiZXN0X2Rpc3QnLgorCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9jb21wdXRlX3N0ZW1fd2lkdGgpCisJW0ZUX0NPTkZJR19DSEVTVEVSX1NFUklGXTogUHJvdmlkZSBuZXcgdmVyc2lvbiBmb3IgaW1wcm92ZWQgc2VyaWYKKwloYW5kbGluZy4KKwkoYWhfYWxpZ25fbGlua2VkX2VkZ2UpIFtGVF9DT05GSUdfQ0hFU1RFUl9TRVJJRl06IFVzZSBzcGVjaWFsCisJdmVyc2lvbiBvZiBgYWhfY29tcHV0ZV9zdGVtX3dpZHRoJy4KKwkoYWhfaGludF9lZGdlc18zKSBbRlRfQ09ORklHX0NIRVNURVJfU1RFTV06IEEgbmV3IGFsZ29yaXRobSBmb3Igc3RlbQorCWFsaWdubWVudCB3aGVuIHN0ZW0gd2lkdGhzIGFyZSBsZXNzIHRoYW4gMS41IHBpeGVscyB3aWRlIGNlbnRlcnMgdGhlCisJc3RlbSBzbGlnaHRseSBvZmYtY2VudGVyIG9mIHRoZSBjZW50ZXIgb2YgYSBwaXhlbCAodGhpcyBpbmNyZWFzZXMKKwlzaGFycG5lc3MgYW5kIGNvbnNpc3RlbmN5KS4KKwlbRlRfQ09ORklHX0NIRVNURVJfU0VSSUZdOiBVc2Ugc3BlY2lhbCB2ZXJzaW9uIG9mCisJYGFoX2NvbXB1dGVfc3RlbV93aWR0aCcuCisJKiBzcmMvYXV0b2hpbnQvYWh0eXBlcy5oIFtGVF9DT05GSUdfQ0hFU1RFUl9TTUFMTF9GXTogQWRkCisJYEFIX0JMVUVfU01BTExfRl9UT1AnLgorCisyMDAzLTAxLTExICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZm50dHlwZXMuaCAoV2luRk5UX0hlYWRlclJlYyk6IEluY3JlYXNlCisJc2l6ZSBvZiBgcmVzZXJ2ZWQyJyB0byBhdm9pZCBtZW1vcnkgb3ZlcndyaXRlcy4KKworMjAwMy0wMS0wOCAgSHV3IERhdmllcyAgPGh1d0Bjb2Rld2VhdmVycy5jb20+CisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAod2luZm50X2hlYWRlcl9maWVsZHMpOiBSZWFkIDE2IGJ5dGVzIGludG8KKwlgcmVzZXJ2ZWQyJywgbm90IGByZXNlcnZlZCcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmaW5kX3VuaWNvZGVfY2hhcm1hcCk6IEZpeGVkIHRoZSBlcnJvciBjb2RlCisJcmV0dXJuZWQgd2hlbiB0aGUgZm9udCBkb2Vzbid0IGNvbnRhaW4gYSBVbmljb2RlIGNoYXJtYXAuICBUaGlzCisJYWxsb3dzIEZUMiB0byBsb2FkIGBzeW1ib2wudHRmJyBhbmQgYSBmZXcgb3RoZXJzIGNvcnJlY3RseSBzaW5jZSB0aGUKKwlsYXN0IHJlbGVhc2UuCisJKG9wZW5fZmFjZSk6IEZpeCByZXR1cm4gdmFsdWUuCisKKzIwMDMtMDEtMDggIE93ZW4gVGF5bG9yICA8b3dlbkByZWRoYXQuY29tPgorCisJSW1wbGVtZW50ZWQgdGhlIEZUX1JFTkRFUl9NT0RFX0xJR0hUIGhpbnRpbmcgbW9kZSBpbiB0aGUgYXV0byBhbmQKKwlwb3N0c2NyaXB0IGhpbnRlcnMuCisKKwkqIHNyYy9hdXRvaGludC9haHR5cGVzLmggKEFIX0hpbnRlclJlYyk6IEFkZCBgZG9fc3RlbV9hZGp1c3QnLgorCSogc3JjL2F1dG9oaW50L2FoaGludC5jIChhaF9jb21wdXRlX3N0ZW1fd2lkdGgpOiBIYW5kbGUKKwloaW50ZXItPmRvX3N0ZW1fYWRqdXN0LgorCShhaF9oaW50ZXJfbG9hZF9nbHlwaCk6IFNldCBoaW50ZXItPmRvX3N0ZW1fYWRqdXN0LgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuaCAoUFNIM19HbHlwaFJlYyk6IEFkZCBgZG9fc3RlbV9hZGp1c3QnLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmMgKHBzaDNfaGludF9hbGlnbik6IFVzZSBgZG9fc3RlbV9hZGp1c3QnLgorCShwczNfaGludHNfYXBwbHkpOiBIYW5kbGUgRlRfUkVOREVSX01PREVfTElHSFQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfUmVuZGVyX01vZGUpOiBBZGQKKwlGVF9SRU5ERVJfTU9ERV9MSUdIVC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogRml4aW5nIHRoZSBUcnVlVHlwZSBsb2FkZXIgdG8gaGFuZGxlCisJaW52YWxpZCBjb21wb3NpdGVzIGNvcnJlY3RseSBieSBsaW1pdGluZyB0aGUgcmVjdXJzaW9uIGRlcHRoLgorCShUVF9NQVhfQ09NUE9TSVRFX1JFQ1VSU0UpOiBOZXcgbWFjcm8uCisJKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBBZGQgYXJndW1lbnQgYHJlY3Vyc2VfY291bnQnLgorCUxvYWQgYSBjb21wb3NpdGUgb25seSBpZiB0aGUgbnVtYmVycyBvZiBjb250b3VycyBpcyAtMSwgZW1pdCBlcnJvcgorCW90aGVyd2lzZS4KKwkoVFRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisKKzIwMDMtMDEtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogSmFtcnVsZXMsIEphbWZpbGUsIEphbWZpbGUuaW4sIHNyYy8qL0phbWZpbGU6IFNtYWxsIGNoYW5nZXMgdG8KKwlzdXBwb3J0IHRoZSBjb21waWxhdGlvbiBvZiBGcmVlVHlwZSAyIGFzIHBhcnQgb2YgbGFyZ2VyIHByb2plY3RzCisJd2l0aCB0aGVpciBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIChvbmx5IHdpdGggSmFtKS4KKworMjAwMy0wMS0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZXIuYzogUHJvYmFibHkgdGhlIGxhc3QgYnVnLWZpeGVzIHRvIHRoZSBzdHJva2VyOworCXRoZSBBUEkgaXMgbGlrZWx5IHRvIGNoYW5nZSwgaG93ZXZlci4KKwkoZnRfc3Ryb2tlX2JvcmRlcl9jbG9zZSk6IERvbid0IHJlY29yZCBlbXB0eSBwYXRocy4KKwkoZnRfc3Ryb2tlX2JvcmRlcl9nZXRfY291bnRzKTogSW5jcmVhc2UgYG51bV9wb2ludHMnIGFsc28gaW4gZm9yIGxvb3AuCisJKGZ0X3N0cm9rZV9ib3JkZXJfZXhwb3J0KTogRG9uJ3QgaW5jcmVhc2UgYHdyaXRlJyB0d2ljZSBpbiBmb3IgbG9vcHMuCisJKGZ0X3N0cm9rZXJfb3V0c2lkZSk6IEhhbmRsZSBgcGhpJyB0b2dldGhlciB3aXRoIGB0aGV0YScuCisJKEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChGVF9BbmdsZV9EaWZmKTogRml4aW5nIGZ1bmN0aW9uOiBJdCByZXR1cm5lZAorCWludmFsaWQgdmFsdWVzIGZvciBsYXJnZSBuZWdhdGl2ZSBhbmdsZSBkaWZmZXJlbmNlcyAocmVzdWx0aW5nIGluCisJaW5jb3JyZWN0IHN0cm9rZXIgY29tcHV0YXRpb25zLCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfaGFzaF91bmxpbmspOiBSZW1vdmluZyBpbmNvcnJlY3QKKwlhc3NlcnRpb24sIGFuZCBjaGFuZ2luZyBjb2RlIHRvIGF2b2lkIGhhc2ggdGFibGUgc2l6ZSBjb250cmFjdGlvbi4KKworCSogc3JjL2Jhc2UvSmFtZmlsZSwgc3JjL2Jhc2UvcnVsZXMubWssIHNyYy9iYXNlL2Rlc2NyaXAubW1zOiBBZGRpbmcKKwlgZnRzdHJva2VyJyB0byBkZWZhdWx0IGJ1aWxkLCBhcyBvcHRpb25hbCBjb21wb25lbnQuCisKKzIwMDItMTItMjYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2d6aXAvYWRsZXIzMi5jLCBzcmMvZ3ppcC9pbmZibG9jay5jLCBzcmMvZ3ppcC9pbmZsYXRlLmMsCisJc3JjL2d6aXAvaW5mdHJlZXMuYywgc3JjL2d6aXAvemNvbmYuaCwgc3JjL2d6aXAvemxpYi5oLAorCXNyYy9nemlwL3p1dGlsLmg6IFVwZGF0ZXMgdG8gYWxsb3cgY29tcGlsYXRpb24gd2l0aG91dCBjb21waWxlcgorCXdhcm5pbmdzIHdpdGggTENDLVdpbjMyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDQuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWMgKHZlcnNpb25faW5mbyk6IEluY3JlYXNlZCB0byA5OjM6My4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGVkLgorCisyMDAyLTEyLTIzICBBbnRob255IEZvayAgPGFudGhvbnlAdGhpemxpbnV4LmNvbT4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjLCBidWlsZHMvdW5peC91bml4LWNjLmluIChMSU5LX0xJQlJBUlkpLAorCWJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChTWVNURU1fWkxJQik6IFNtYWxsIGZpeCB0byBjb25maWd1cmUKKwlzdWItc3lzdGVtIG9uIFVuaXggdG8gYWxsb3cgb3RoZXIgcHJvZ3JhbXMgdG8gY29ycmVjdGx5IGxpbmsgd2l0aAorCXpsaWIgd2hlbiBuZWVkZWQuCisKKzIwMDItMTItMTkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfTG9hZF9UYWJsZV9GdW5jKTogTmV3CisJZnVuY3Rpb24gcG9pbnRlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIChGVF9Mb2FkX1NmbnRfVGFibGUpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvYmFzZS9mdG9ianMuYzogSW1wbGVtZW50IGl0LgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9pbnRlcmZhY2UpOiBIYW5kbGUgYGxvYWRfc2ZudCcKKwltb2R1bGUgcmVxdWVzdC4KKworMjAwMi0xMi0xNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZmluZF91bmljb2RlX2NoYXJtYXApOiBBZGRlZCBzb21lIGNvbW1lbnRzIHRvCisJYmV0dGVyIGV4cGxhaW4gd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4KKwkob3Blbl9mYWNlKTogSW5jbHVkZWQgR3JhaGFtIEFzaGVyJ3MgZml4IHRvIHByZXZlbnQgZmFjZXMgd2l0aG91dAorCVVuaWNvZGUgY2hhcm1hcHMgZnJvbSBsb2FkaW5nLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmM6IEluY2x1ZGVkIEdlb3JnZSBXaWxsaWFtcydzIGZpeCB0byBzdXBwb3J0CisJdmVyc2lvbiAyIGZvbnRzIGNvcnJlY3RseS4KKwkod2luZm50X2hlYWRlcl9maWVsZHMpOiBVcGRhdGVkLgorCShmbnRfZm9udF9sb2FkKTogSGFuZGxlIHZlcnNpb24gMiBmb250cy4KKwkoRk5UX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCisyMDAyLTEyLTE2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0aW5nIGRvY3VtZW50IHRvIGJldHRlciBleHBsYWluIHRoZQorCWRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHRocmVlIHZlcnNpb24gbnVtYmVycyBiZWluZyB1c2VkIG9uIFVuaXgsIGFzCisJd2VsbCBhcyBwcm92aWRpbmcgYW4gYXV0b2NvbmYgZnJhZ21lbnQgcHJvdmlkZWQgYnkgTGFycyBDbGF1c2VuLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfY29uaWMpOiBGaXhlZCBzbWFsbCBidWcgdGhhdAorCXByZXZlbnRlZCBCw6l6aWVyIGFyY3Mgd2l0aCBuZWdhdGl2ZSB2ZXJ0aWNhbCBjb29yZGluYXRlcyB0byBiZQorCXJlbmRlcmVkIGFwcHJvcHJpYXRlbHkuCisKKzIwMDItMTItMDIgIEFudG9pbmUgTGVjYSAgPEFudG9pbmUtRnJlZXR5cGVATGVjYS1NYXJ0aS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBNb2RpZmllZCB0aGUgbG9naWMgdG8gZ2V0IFVuaWNvZGUgY2hhcm1hcHMuCisJTm93IGl0IGxvYWRzIFVDUy00IGNoYXJtYXBzIHdoZW4gdGhlcmUgaXMgb25lLgorCShmaW5kX3VuaWNvZGVfY2hhcm1hcCk6IE5ldyBmdW5jdGlvbi4KKwkob3Blbl9mYWNlKTogUmVmZXIgdG8gdGhlIGFib3ZlIG9uZS4KKwkoRlRfU2VsZWN0X0NoYXJtYXApOiBJZGVtLgorCisyMDAyLTExLTI5ICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLUZyZWV0eXBlQExlY2EtTWFydGkub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oOiBDb3JyZWN0IHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGluZworCW1hY3JvICh3YXMgX19GVFhGODZfSF9fIC4uLikuCisKKzIwMDItMTEtMjcgIFZpbmNlbnQgQ2Fyb24gIDx2LmNhcm9uQHplcm9kZXV4Lm5ldD4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4sIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbiwKKwlidWlsZHMvdW5peC9jb25maWd1cmUuYWMsIHNyYy9nemlwL3J1bGVzLm1rLCBzcmMvZ3ppcC9mdGd6aXAuYworCVtGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCXTogQWRkaW5nIHN1cHBvcnQgZm9yIHN5c3RlbSB6bGliCisJaW5zdGFsbGF0aW9ucyBpZiBhdmFpbGFibGUgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSAoVW5peCBvbmx5KS4KKworMjAwMi0xMS0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfbG9hZCwgY2ZmX2VuY29kaW5nX2xvYWQpOiBNb2RpZmllZAorCWNoYXJzZXQgbG9hZGVyIHRvIGFjY2VwdCBwcmUtZGVmaW5lZCBjaGFyc2V0cywgZXZlbiB3aGVuIHRoZSBmb250CisJY29udGFpbnMgZmV3ZXIgZ2x5cGhzLiAgQWxzbyBlbmZvcmNlZCBtb3JlIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB3ZQorCW5ldmVyIG92ZXJmbG93IHRoZSBjaGFyYWN0ZXIgY29kZXMgYXJyYXkgaW4gdGhlIGVuY29kaW5nLgorCisyMDAyLTExLTIyICBBbnRvaW5lIExlY2EgIDxBbnRvaW5lLUZyZWV0eXBlQExlY2EtTWFydGkub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IFVwZGF0ZWQgdG8gbGF0ZXN0IE9wZW5UeXBlCisJc3BlY2lmaWNhdGlvbi4KKworMjAwMi0xMS0xOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisKKwkqIFZlcnNpb24gMi4xLjMgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzIwMDItMTEtMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXQuYyAoZnRjX3NiaXRfbm9kZV9sb2FkKTogRml4ZWQgYSBzbWFsbCBidWcgdGhhdAorCWNhdXNlZCBwcm9ibGVtcyB3aXRoIGVtYmVkZGVkIGJpdG1hcHMuCisKKwkqIHNyYy9vdGxheW91dC9vdGxheW91dC5oLCBzcmMvb3RseWFvdXQvb3RsY29uZi5oLAorCXNyYy9vdGxheW91dC9vdGxnc3ViLmMsIHNyYy9vdGxheW91dC9vdGxnc3ViLmgsCisJc3JjL290bGF5b3V0L290bHBhcnNlLmMsIHNyYy9vdGxheW91dC9vdGxwYXJzZS5oLAorCXNyYy9vdGxheW91dC9vdGx1dGlscy5oOiBVcGRhdGluZyB0aGUgT3BlblR5cGUgTGF5b3V0IGNvZGUsIGFkZGluZworCXN1cHBvcnQgZm9yIHRoZSBmaXJzdCBHU1VCIGxvb2t1cHMuICBOb3RoaW5nIHRoYXQgcmVhbGx5IGNvbXBpbGVzCisJZm9yIG5vdyB0aG91Z2guCisKKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfYWxpZ25fc2VyaWZfZWRnZSk6IERpc2FibGVkIHNlcmlmIHN0ZW0KKwl3aWR0aCBxdWFudGl6YXRpb24uICBJdCBwcm9kdWNlcyBzbGlnaHRseSBiZXR0ZXIgc2hhcGVzIHRob3VnaCB0aGlzCisJaXMgbm90IGRpc3Rpbmd1aXNoYWJsZSB3aXRoIG1hbnkgZm9udHMuCisJUmVtb3ZlIG90aGVyIGRlYWQgY29kZS4KKworCSogc3JjL0phbWZpbGUsIHNyYy8qL0phbWZpbGU6IFNpbXBsaWZpZWQuCisJVXNlICQoRlQyX1NSQ19ESVIpLgorCisyMDAyLTExLTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9UQVJHRVRfTElHSFQpOiBOZXcgbWFjcm8uCisJKEZUX0xPQURfVEFSR0VULCBGVF9MT0FEX1RBUkdFVF9NT0RFKTogVXNlIGAmIDE1JyBpbnN0ZWFkIG9mIGAmIDcnLgorCisyMDAyLTExLTA1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIHNyYy9nemlwL2Z0Z3ppcC5jOiBBZGRlZAorCXN1cHBvcnQgZm9yIHRoZSBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCIG9wdGlvbiwgdXNlZCB0byBzcGVjaWZ5CisJdGhlIHVzZSBvZiBzeXN0ZW0td2lkZSB6bGliLgorCisJTm90ZSB0aGF0IHRoaXMgbWFjcm8sIGFzIHdlbGwgYXMKKwlUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSLCBpcyBub3QgI3VuZGVmLWVkIGFueW1vcmUuCisJVGhpcyBhbGxvd3MgdGhlIGJ1aWxkIHN5c3RlbSB0byBkZWZpbmUgdGhlbSBkZXBlbmRpbmcgb24gdGhlCisJY29uZmlndXJhdGlvbiAodHlwaWNhbGx5IGJ5IGFkZGluZyAtRCBmbGFncyBhdCBjb21waWxlIHRpbWUpLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmMgKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBSZW1vdmVkIGNvbXBpbGVyCisJd2FybmluZ3MgaW4gb3B0aW1pemVkIG1vZGUgcmVsYXRpdmUgdG8gdGhlIGB2b2xhdGlsZScgbG9jYWwKKwl2YXJpYWJsZXMuICBUaGlzIHdhcyBub3QgYSBjb21waWxlciBidWcgYWZ0ZXIgYWxsLCBidXQgdGhlIGZhY3QgdGhhdAorCWEgcG9pbnRlciB0byBhIHZvbGF0aWxlIHZhcmlhYmxlIGlzIG5vdCB0aGUgc2FtZSBhcyBhIHZvbGF0aWxlCisJcG9pbnRlciB0byBhIHZhcmlhYmxlIDotKQorCisJVGhlIGZpeCB3YXMgdG8gY2hhbmdlCisJICBgdm9sYXRpbGUgRlRfQnl0ZSogcCcKKwlpbnRvCisJICBgRlRfQnl0ZSogdm9sYXRpbGUgcCcuCisKKwkqIHNyYy9wZnIvcGZybG9hZC5jIChwZnJfcGh5X2ZvbnRfbG9hZCksIHNyYy9wZnIvcGZyZHJpdnIuYworCShwZnJfZ2V0X21ldHJpY3MpLCBzcmMvZ3ppcC9pbmZ0cmVlcy5jOiBSZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmdzIGluCisJb3B0aW1pemVkIG1vZGVzLgorCisJKiBzcmMvZ3ppcC8qLltoY106IE1vZGlmaWVkIG91ciB6bGliIGNvcHkgaW4gb3JkZXIgdG8gcHJldmVudAorCWV4cG9ydGluZyBhbnkgemxpYiBmdW5jdGlvbiBuYW1lcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQuICBUaGlzCisJcHJldmVudHMgbGlua2luZyBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3Jtcywgd2hlbiBhcHBsaWNhdGlvbnMgd2FudAorCXRvIGxpbmsgRnJlZVR5cGUgX2FuZF8gemxpYiB0b2dldGhlci4KKworMjAwMi0xMS0wNSAgSnVsaXVzeiAgPGpjaEBwcHMuanVzc2lldS5mcj4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc190YWJsZV9hZGQpOiBNb2RpZmllZCBpbmNyZW1lbnQgbG9vcCBpbgorCW9yZGVyIHRvIGltcGxlbWVudCBleHBvbmVudGlhbCBiZWhhdmlvdXIuCisKKzIwMDItMTEtMDEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUFkZGVkIFBGUi1zcGVjaWZpYyBwdWJsaWMgQVBJLiAgRml4ZWQgdGhlIGtlcm5pbmcgcmV0cmlldmVsIHJvdXRpbmUKKwkoaXQgcmV0dXJuZWQgaW52YWxpZCB2YWx1ZXMgd2hlbiB0aGUgb3V0bGluZSBhbmQgbWV0cmljcyByZXNvbHV0aW9uCisJZGlmZmVyKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oLCBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3Bmci5oOiBOZXcKKwlmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9QRlJfSCk6IE5ldworCW1hY3JvIGZvciBwZnIuaC4KKworCSogc3JjL2Jhc2UvZnRwZnIuYzogTmV3IGZpbGUuCisJKiBzcmMvYmFzZS9KYW1maWxlLCBzcmMvYmFzZS9kZXNjcmlwLm1tczogVXBkYXRlZC4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1BGUl9ILgorCShwZnJfZ2V0X2tlcm5pbmcsIHBmcl9nZXRfYWR2YW5jZSwgcGZyX2dldF9tZXRyaWNzKTogTmV3IGZ1bmN0aW9ucy4KKwkocGZyX3NlcnZpY2VfcmVjKTogTmV3IGZvcm1hdCBpbnRlcmZhY2UuCisJKHBmcl9kcml2ZXJfY2xhc3MpOiBVc2UgYHBmcl9zZXJ2aWNlX3JlYycuCisJUmVwbGFjZSBgcGZyX2ZhY2VfZ2V0X2tlcm5pbmcnIHdpdGggYHBmcl9nZXRfa2VybmluZycuCisJKiBzcmMvcGZyL3Bmcm9ianMuYzogUmVtb3ZlIGRlYWQgY29kZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9jbGVhcik6IFNtYWxsIGludGVybmFsIGZpeCB0bworCWJldHRlciBzdXBwb3J0IGJpdG1hcC1iYXNlZCBmb250IGZvcm1hdHMuCisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogRml4IGhhbmRsaW5nIG9mCisJYHNjYWxlJy4KKwlGaXggYXJndW1lbnRzIHRvIGBGVF9WZWN0b3JfRnJvbV9Qb2xhcicuCisKKzIwMDItMTAtMzEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUFkZCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgaGFuZGxpbmcgb2YgZ3ppcC1jb21wcmVzc2VkIFBDRiBmaWxlcy4KKworCSogc3JjL2d6aXAvKjogTmV3IGZpbGVzLCB0YWtlbiBmcm9tIHRoZSB6bGliIHBhY2thZ2UgKGV4Y2VwdAorCWZ0Z3ppcC5jKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaCwgc3JjL2d6aXAvZnRnemlwLmM6IE5ldyBmaWxlcy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0daSVBfSCk6IE5ldyBtYWNybyBmb3IKKwlgZnRnemlwLmgnLgorCisJKiBzcmMvcGNmL3BjZmRyaXZlci5jOiBJbmNsdWRlIEZUX0daSVBfSCBhbmQgRlRfRVJST1JTX0guCisJKFBDRl9GYWNlX0luaXQpOiBJZiBub3JtYWwgb3BlbiBmYWlscywgdHJ5IHRvIG9wZW4gZ3ppcCBzdHJlYW0uCisJKFBDRl9GYWNlX0RvbmUpOiBDbG9zZSBnemlwIHN0cmVhbS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wY2Z0eXBlcy5oIChQQ0ZfUHVibGljX0ZhY2VSZWMpLAorCXNyYy9wY2YvcGNmLmggKFBDRl9GYWNlUmVjKTogQWRkIGBnemlwX3N0cmVhbScgYW5kIGBnemlwX3NvdXJjZScuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIpOgorCU5ldyBtYWNyby4KKwkoVDFfQ09ORklHX09QVElPTl9ESVNBQkxFX0hJTlRFUiwgRlRfQ09ORklHX09QVElPTl9VU0VfQ01BUFMKKwlGVF9DT05GSUdfT1BUSU9OX05PX0NPTlZFTklFTkNFX0ZVTkNTLAorCUZUX0NPTkZJR19PUFRJT05fQUxURVJOQVRFX0dMWVBIX0ZPUk1BVFMpOiBSZW1vdmVkLgorCisJKEZUX0VYUE9SVCwgRlRfRVhQT1JUX0RFRiwgRlRfREVCVUdfTEVWRUxfRVJST1IsCisJRlRfREVCVUdfTEVWRUxfVFJBQ0UsIEZUX0RFQlVHX01FTU9SWSk6IENvbW1lbnQgb3V0IGRlZmluaXRpb25zIHNvCisJdGhhdCBwbGF0Zm9ybSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgY2FuIG92ZXJyaWRlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg6IEluY2x1ZGUgRlRfU1lTVEVNX0guCisKKzIwMDItMTAtMzAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogRnJlZVR5cGUgMi4xLjNyYzMgcmVsZWFzZWQuCisKKzIwMDItMTAtMjUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmggKEZUX1BPSU5URVJfVE9fVUxPTkcpOiBOZXcgbWFjcm8uCisJKEZUQ19GQUNFX0lEX0hBU0gpOiBSZXdyaXR0ZW4sIHVzaW5nIEZUX1BPSU5URVJfVE9fVUxPTkcuCisKKzIwMDItMTAtMjIgIEdpdXNlcHBlIEdoaWLDsiAgPGdoaWJvQG1hbmRyYWtlc29mdC5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRW5jb2RpbmcpOiBGaXggZW50cnkgZm9yIGxhdGluLTIuCisKKzIwMDItMTAtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9PcGVuX0ZhY2UpOiBVc2UgYGNvbnN0JyBmb3IgYGFyZ3MnCisJKHN1Z2dlc3RlZCBieSBHcmFoYW0pLgorCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IFVwZGF0ZWQuCisJKGZ0X2lucHV0X3N0cmVhbV9uZXcpOiBEaXR0by4KKworMjAwMi0xMC0wNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkaW5nIHN1cHBvcnQgZm9yIGVtYmVkZGVkIGJpdG1hcHMgdG8gdGhlIFBGUiBkcml2ZXIsIGFuZCByZXdyaXRpbmcKKwlpdHMga2VybmluZyBsb2FkZXIvaGFuZGxlciB0byB1c2UgYWxsIGtlcm5pbmcgcGFpcnMgaW4gYSBwaHlzaWNhbAorCWZvbnQgKGFuZCBub3QganVzdCB0aGUgZmlyc3QgaXRlbSkuCisKKwkqIHNyYy9wZnIvcGZyLmM6IEluY2x1ZGUgYHBmcnNiaXQuYycuCisJKiBzcmMvcGZyL3Bmcmdsb2FkLmM6IEluY2x1ZGUgYHBmcnNiaXQuaCcuCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzKTogUmV3cml0dGVuLgorCShwZnJfcGh5X2ZvbnRfZG9uZSwgcGZyX3BoeV9mb250X2xvYWQpOiBVcGRhdGVkLgorCSogc3JjL3Bmci9wZnJvYmtzLmM6IEluY2x1ZGUgYHBmcnNiaXQuaCcuCisJKHBmcl9mYWNlX2luaXQpOiBIYW5kbGUga2VybmluZyBhbmQgZW1iZWRkZWQgYml0bWFwcy4KKwkocGZyX3Nsb3RfbG9hZCk6IExvYWQgZW1iZWRkZWQgYml0bWFwcy4KKwkoUEZSX0tFUk5fSU5ERVgpOiBSZW1vdmVkLgorCShwZnJfZmFjZV9nZXRfa2VybmluZyk6IFJld3JpdHRlbi4KKwkqIHNyYy9wZnIvcGZyc2JpdC5jLCBzcmMvcGZyL3BmcnNiaXQuaDogTmV3IGZpbGVzLgorCSogc3JjL3Bmci9wZnJ0eXBlcy5oIChQRlJfS2Vybkl0ZW1SZWMpOiBOZXcgc3RydWN0dXJlLgorCShQRlJfS0VSTl9JTkRFWCk6IE5ldyBtYWNyby4KKwkoUEZSX1BoeUZvbnRSZWMpOiBBZGQgaXRlbXMgZm9yIGtlcm5pbmcgYW5kIGVtYmVkZGVkIGJpdG1hcHMuCisJKiBzcmMvcGZyL0phbWZpbGUgKF9zb3VyY2VzKSBbRlQyX01VTFRJXTogQWRkIGBwZnJzYml0Jy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBEb24ndCBsb2FkIGJpdG1hcCBmb250cyBpZgorCUZUX0xPQURfTk9fUkVDVVJTRSBpcyBzZXQuCisJTG9hZCBlbWJlZGRlZCBiaXRtYXBzIG9ubHkgaWYgRlRfTE9BRF9OT19CSVRNQVAgaXNuJ3Qgc2V0LgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSwgc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHksCisJc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weTogRml4aW5nIGEgZmV3IG5hc3R5IGJ1Z3MuCisKKwkqIHNyYy9zZm50L3R0Y21hcDAuYyAodHRfY21hcDRfdmFsaWRhdGUpOiBUaGUgdmFsaWRhdG9yIGZvciBmb3JtYXQgNAorCXN1Yi10YWJsZXMgaXMgbm93IGNhcGFibGUgb2YgZGVhbGluZyB3aXRoIGludmFsaWQgYGxlbmd0aCcgZmllbGRzIGF0CisJdGhlIHN0YXJ0IG9mIHRoZSBzdWItdGFibGUuICBUaGlzIGFsbG93cyBmb250cyBsaWtlIGBtZ19fX19fXy50dGYnCisJKGkuZS4gIE1hcnJpYWdlKSB0byByZXR1cm4gYWNjdXJhdGUgY2hhcm1hcHMuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwMi0xMC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoU1VCUElYRUxTKTogQWRkIGNhc3QgdG8gYFRQb3MnLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoVFJVTkMpOiBBZGQgY2FzdCB0byBgVENvb3JkJy4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKFRSYXN0ZXIpOiBVc2UgYFRQb3MnIGZvciBtaW5fZXgsIG1heF9leCwgbWluX2V5LCBtYXhfZXksIGFuZAorCWxhc3RfZXkuCisJVXBkYXRlIGFsbCBjYXN0cy4KKwkoZ3JheV9yZW5kZXJfbGluZSk6IEZpeCBjYXN0cyBmb3IgYHAnIGFuZCBgZmlyc3QnLgorCisyMDAyLTEwLTAyICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoYmRmX2xvYWRfZm9udCk6IEFsbG9jYXRlIHRoZSBfYmRmX3BhcnNlX3QKKwlzdHJ1Y3R1cmUgd2l0aCBGVF9BTExPQyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzdGFjay4KKworMjAwMi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKG51bV9zYml0X3N0cmlrZXMsCisJbnVtX3NiaXRfc2NhbGVzKTogVXNlIGBGVF9VTG9uZycuCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBVcGRhdGVkIGFjY29yZGluZ2x5LgorCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2Vfc2V0X3NiaXRfc3RyaWtlKTogRGl0dG8uCisJKGZpbmRfc2JpdF9pbWFnZSk6IFJlbW92ZSBjYXN0LgorCSogc3JjL3Jhc3Rlci9mdHJlbmQxLmMgKGZ0X3Jhc3RlcjFfcmVuZGVyKTogRml4IGNhc3QuCisKKzIwMDItMDktMjcgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX25hbWVzKTogVXNlIGNhc3QuCisJKiBzcmMvc2ZudC90dGNtYXAuYyAoY29kZV90b19uZXh0Mik6IFVzZSBsb25nIGNvbnN0YW50LgorCShjb2RlX3RvX2luZGV4NCk6IFVzZSBjYXN0LgorCShjb2RlX3RvX2luZGV4OF8xMik6IEZpeCBjYXN0LgorCSogc3JjL3NmbnQvdHRjbWFwMC5jICh0dF9jbWFwNF9jaGFyX25leHQsIHR0X2NtYXA4X2NoYXJfaW5kZXgsCisJdHRfY21hcDEyX2NoYXJfaW5kZXgpOiBVc2UgY2FzdCBmb3IgYHJlc3VsdCcuCisJKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBVc2UgY2FzdC4KKwkqIHNyYy9zZm50L3Nmb2Jqcy5jICh0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fdWNzNCk6IFVzZSBjYXN0IGZvcgorCWBjb2RlJy4KKwkoc2ZudF9sb2FkX2ZhY2UpOiBVc2UgRlRfSW50MzIgZm9yIGBmbGFncycuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9zY2FubGluZSwgZ3JheV9yZW5kZXJfbGluZSwKKwlncmF5X2NvbXB1dGVfY2JveCwgZ3JheV9jb252ZXJ0X2dseXBoLCBncmF5X3Jhc3Rlcl9yZXNldCk6IEFkZCBjYXN0cworCXRvIGBUQ29vcmQnIGFuZCBgaW50Jy4KKwlNb3JlIDE2Yml0IGZpeGVzLgorCXMvRlRfUG9zL1RQb3MvLgorCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBBZGQgY2FzdHMuCisKKzIwMDItMDktMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKGxvYWRfcG9zdF9uYW1lcywgdHRfZmFjZV9mcmVlX3BzX25hbWVzLAorCXR0X2ZhY2VfZ2V0X3BzX25hbWUpOiBSZXBsYWNlIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aCBpZiBjbGF1c2VzIHRvCisJbWFrZSBpdCBtb3JlIHBvcnRhYmxlLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IERpdHRvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kdWxlLmggKEZUX01vZHVsZV9DbGFzcyk6IFVzZSBgRlRfTG9uZycgZm9yCisJYG1vZHVsZV9zaXplJy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaCAoRlRfR2x5cGhfQ2xhc3NfKTogVXNlIGBGVF9Mb25nJyBmb3IKKwlgZ2x5cGhfc2l6ZScuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZW5kZXJfR2x5cGgpOiBDaGFuZ2Ugc2Vjb25kIHBhcmFtZXRlciB0bworCWBGVF9SZW5kZXJfTW9kZScuCisJKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCk6IENoYW5nZSB0aGlyZCBwYXJhbWV0ZXIgdG8KKwlgRlRfUmVuZGVyX01vZGUnLgorCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Ub19CaXRtYXApOiBDaGFuZ2Ugc2Vjb25kIHBhcmFtZXRlcgorCXRvIGBGVF9SZW5kZXJfTW9kZScuCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IENoYW5nZSB0aGlyZCBwYXJhbWV0ZXIKKwl0byBgRlRfUmVuZGVyX01vZGUnLgorCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyLCBmdF9zbW9vdGhfcmVuZGVyX2xjZCwKKwlmdF9zbW9vdGhfcmVuZGVyX2xjZF92KTogRGl0dG8uCisJKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IENoYW5nZSB0aGlyZCBhbmQgZmlmdGggcGFyYW1ldGVyIHRvCisJYEZUX1JlbmRlcl9Nb2RlJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oLCBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLAorCWluY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKExvYWRfR2x5cGgpLCBzcmMvcGNmL3BjZmRyaXZlci5jCisJKFBDRl9HbHlwaF9Mb2FkKSwgc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9zbG90X2xvYWQpLAorCXNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpLCBzcmMvdDQyL3Q0Mm9ianMuYworCShUNDJfR2x5cGhTbG90X0xvYWQpLCBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKTogQ2hhbmdlCisJZm91cnRoIHBhcmFtZXRlciB0byBgRlRfSW50MzInLgorCisJKiBzcmMvcGZyL3Bmcm9ianMuYyAocGZyX2ZhY2VfaW5pdCk6IEFkZCB0d28gbWlzc2luZyBwYXJhbWV0ZXJzCisJYW5kIGRlY2xhcmUgdGhlbSBhcyB1bnVzZWQuCisKKwkqIHNyYy9jaWQvY2lkcGFyc2UuaCAoQ0lEX1BhcnNlcik6IFVzZSBGVF9Mb25nIGZvciBgcG9zdHNjcmlwdF9sZW4nLgorCisJKiBzcmMvcHNuYW1lcy9wc25hbWVzLmggKFBTX1VuaWNvZGVfVmFsdWVfRnVuYyk6IENoYW5nZSByZXR1cm4KKwl2YWx1ZSB0byBGVF9VSW50MzIuCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc191bmljb2RlX3ZhbHVlLCBwc19idWlsZF91bmljb2RlX3RhYmxlKToKKwlVcGRhdGVkIGFjY29yZGluZ2x5LgorCisyMDAyLTA5LTI2ICBXb2xmZ2FuZyBEb21yw7ZzZSAgPHBvcnRob3MuZG9tcm9lc2VAaGFyei5kZT4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChHZXRfS2VybmluZyk6IFVzZSBGVF9Mb25nIGZvciBgbWlkZGxlJy4KKwkoY2ZmX2dldF9nbHlwaF9uYW1lKTogVXNlIGNhc3QgZm9yIHJlc3VsdCBvZiBmdF9zdHJsZW4uCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9yZWFsKTogVXNlciBjYXN0IGZvciBhc3NpZ25pbmcKKwlgZXhwJy4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKTogVXNlIEZUX1VMb25nIGZvcgorCXNvbWUgbG9jYWwgdmFyaWFibGVzLgorCShjZmZfY2hhcnNldF9sb2FkLCBjZmZfZW5jb2RpbmdfbG9hZCk6IFVzZSBjYXN0cyB0byBGVF9VSW50IGZvciBzb21lCisJc3dpdGNoIHN0YXRlbWVudHMuCisJKGNmZl9mb250X2xvYWQpOiBVc2UgY2FzdCBpbiBjYWxsIHRvIENGRl9Mb2FkX0ZEX1NlbGVjdC4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfc2l6ZV9pbml0KTogVXNlIG1vcmUgY2FzdHMuCisJKGNmZl9mYWNlX2luaXQpOiBVc2UgRlRfSW50MzIgZm9yIGBmbGFncycuCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9vcGVyYXRvcl9zZWFjKTogVXNlIGNhc3QgZm9yIGFzc2lnbmluZworCWBhZHgnIGFuZCBgYWR5Jy4KKwkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBVc2UgRlRfVUxvbmcgZm9yIHRoaXJkIHBhcmFtZXRlci4KKwlVc2UgbW9yZSBjYXN0cy4KKwkqIHNyYy9jZmYvY2ZmY21hcC5jIChjZmZfY21hcF91bmljb2RlX2luaXQpOiBVc2UgY2FzdCBmb3IgYGNvdW50Jy4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9yZWFkX3N1YnJzKTogVXNlIEZUX1VMb25nIGZvciBgbGVuJy4KKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpOiBBZGQgbWlzc2luZyBjYXN0IGZvcgorCWBjaWRfZ2V0X29mZnNldCcuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKSA8MTg+OiBVc2UKKwljYXN0IGZvciBgbnVtX3BvaW50cycuCisJKHQxX2RlY29kZXJfaW5pdCk6IFVzZSBjYXN0IGZvciBhc3NpZ25pbmcgYGRlY29kZXItPm51bV9nbHlwaHMnLgorCisJKiBzcmMvYmFzZS9mdGRlYnVnLmMgKGZ0X2RlYnVnX2luaXQpOiBVc2UgRlRfSW50LgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIChGVF9TbG90X0xvYWRGdW5jKTogVXNlCisJYEZUX0ludDMyJyBmb3IgZm91cnRoIHBhcmFtZXRlci4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChvcGVuX2ZhY2UpOiBVc2UgY2FzdCBmb3IgY2FsbGluZworCWNsYXp6LT5pbml0X2ZhY2UuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoU2V0X0hpZ2hfUHJlY2lzaW9uKTogVXNlIGAxJyBpbnN0ZWFkIG9mCisJYDFMJy4KKwkoRmluYWxpemVfUHJvZmlsZV9UYWJsZSwgTGluZV9VcCwgZnRfYmxhY2tfaW5pdCk6IFVzZSBjYXN0cy4KKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IERpdHRvLgorCisJKiBzcmMvc2ZudC9zZm50X2Rpcl9jaGVjazogQ29tcGFyZSBgbWFnaWMnIHdpdGggdW5zaWduZWQgbG9uZworCWNvbnN0YW50LgorCisyMDAyLTA5LTI2ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IFVwZGF0ZWQuCisKKzIwMDItMDktMjUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoQUhfSElOVF9NRVRSSUNTKTogRGlzYWJsaW5nIG1ldHJpY3MKKwloaW50aW5nIGluIHRoZSBhdXRvLWhpbnRlci4gIFRoaXMgcHJvZHVjZXMgbXVjaCBiZXR0ZXIgYW50aS1hbGlhc2VkCisJdGV4dC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGluZyB0aGUgY2hhbmdlcyBkb2N1bWVudGF0aW9uLgorCisyMDAyLTA5LTI1ICBBbnRob255IEZvayAgPGFudGhvbnlAdGhpemxpbnV4LmNvbT4KKworCSogc3JjL3NmbnQvdHRjbWFwMC5jICh0dF9jbWFwNF92YWxpZGF0ZSwgdHRfY21hcDRfY2hhcl9pbmRleCwKKwl0dF9jbWFwNF9jaGFyX25leHQpOiBBZGRlZCBzdXBwb3J0IGZvciBvcGVuc19fXy50dGYgKGl0IGNvbnRhaW5zIGEKKwljaGFybWFwIHRoYXQgdXNlcyBvZmZzZXQ9MHhGRkZGVSBpbnN0ZWFkIG9mIDB4MDAwMCB0byBpbmRpY2F0ZSBhCisJbWlzc2luZyBnbHlwaCkuCisKKzIwMDItMDktMjEgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAoTG9hZF9HbHlwaCk6IEZvdXJ0aCBwYXJhbWV0ZXIgbXVzdCBiZQorCUZUX0ludDMyLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCAoVFRfTG9hZF9HbHlwaCk6CisJRGl0dG8uCisKKzIwMDItMDktMTkgIFdvbGZnYW5nIERvbXLDtnNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgorCisJTW9yZSAxNmJpdCBmaXhlcy4KKworCSogc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMgKHNvcnRfdmFsdWVzKTogVXNlIEZUX1BvcyBmb3IgYHN3YXAnLgorCShhaF9oaW50ZXJfY29tcHV0ZV93aWR0aHMpOiBVc2UgRlRfUG9zIGZvciBgZGlzdCcuCisJVXNlIEFIX01BWF9XSURUSFMuCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jIChhaF9vdXRsaW5lX3NjYWxlX2JsdWVfZWRnZXMpOiBVc2UgRlRfUG9zCisJZm9yIGBkZWx0YScuCisJKGFoX291dGxpbmVfY29tcHV0ZV9lZGdlcyk6IFJlcGxhY2Ugc29tZSBpbnRzIHdpdGggRlRfSW50IGFuZAorCUZUX1Bvcy4KKwkoYWhfdGVzdF9leHRyZW1hKTogQ2xlYW4gdXAgY29kZS4KKwkoYWhfZ2V0X29yaWVudGF0aW9uKTogVXNlIDQgRlRfSW50IHZhcmlhYmxlcyBpbnN0ZWFkIG9mIEZUX0JCb3ggdG8KKwlob2xkIGluZGljZXMuCisJKiBzcmMvYXV0b2hpbnQvYWh0eXBlcy5oIChBSF9TZWdtZW50UmVjKTogQ2hhbmdlIHR5cGUgb2YgYHNjb3JlJworCXRvIEZUX1Bvcy4KKworMjAwMi0wOS0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3MsIGJ1aWxkcy91bml4L2NvbmZpZy5zdWI6IFVwZGF0ZWQgdG8KKwlyZWNlbnQgdmVyc2lvbnMuCisKKzIwMDItMDktMTggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xpYnJhcnlfVmVyc2lvbik6IEJ1Z2ZpeC4KKworCSogRnJlZVR5cGUgMi4xLjNyYzIgKHJlbGVhc2UgY2FuZGlkYXRlIDIpIGlzIHJlbGVhc2VkIQorCisyMDAyLTA5LTE3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgsCisJaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZXIuaCwgaW5jbHVkZS9mcmVldHlwZS9mdHN5c2lvLmgsCisJaW5jbHVkZS9mcmVldHlwZS9mdHN5c21lbS5oLCBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IFVwZGF0aW5nCisJdGhlIGluLXNvdXJjZSBkb2N1bWVudGF0aW9uLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5OiBVcGRhdGluZyB0aGUgSFRNTCBmb3JtYXR0ZXIgaW4gdGhlCisJRG9jTWFrZXIgdG9vbC4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyLnB5OiBSZW1vdmVkLgorCisyMDAyLTA5LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNb3JlIDE2Yml0IGZpeGVzLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHJlYWxsb2NhdGVfdDFfdGFibGUpOiBVc2UgRlRfTG9uZyBmb3IKKwlzZWNvbmQgcGFyYW1ldGVyLgorCisyMDAyLTA5LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkxNmJpdCBmaXhlcyBmcm9tIFdvbGZnYW5nIERvbXLDtnNlLgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5oIChUMV9QYXJzZXJSZWMpOiBDaGFuZ2UgdHlwZSBvZiBgYmFzZV9sZW4nCisJYW5kIGBwcml2YXRlX2xlbicgdG8gRlRfTG9uZy4KKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKFQxX0dldF9Qcml2YXRlX0RpY3QpOiBSZW1vdmUgY2FzdCBmb3IKKwlgcHJpdmF0ZV9sZW4nLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jOiBVc2UgRlRfSW50IGNhc3QgZm9yIG1vc3QgY2FsbHMgb2YgVDFfVG9JbnQuCisJVXNlIEZUX1B0ckRpc3Qgd2hlcmUgYXBwcm9wcmlhdGUuCisJKHBhcnNlX2VuY29kaW5nKTogVXNlIEZUX0xvbmcgZm9yIGBjb3VudCcgYW5kIGBuJy4KKwkocmVhZF9iaW5hcnlfZGF0YSk6IFVzZSBGVF9Mb25nKiBmb3Igc2Vjb25kIHBhcmFtZXRlci4KKwkqIHNyYy90eXBlMS90MWFmbS5jIChhZm1fYXRvaW5kZXgpOiBVc2UgRlRfUHRyRGlzdC4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKGZ0Y19zYml0X25vZGVfbG9hZCk6IFJlbW92ZSB1bnVzZWQgbGFiZWwuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYyAocHNoM19oaW50X2FsaWduKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKworMjAwMi0wOS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFraW5nIGZ0Z3JheXMuYyBjb21waWxlIHN0YW5kLWFsb25lIGFnYWluLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaDogSW5jbHVkZSBmdDJidWlsZC5oIG9ubHkgaWYgX1NUQU5EQUxPTkVfCisJaXNuJ3QgZGVmaW5lZC4KKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIFtfU1RBTkRBTE9ORV9dOiBEZWZpbmUgZnRfbWVtc2V0LAorCUZUX0JFR0lOX0hFQURFUiwgRlRfRU5EX0hFQURFUi4KKwkoRlRfTUVNX1pFUk8pOiBEZWZpbmUuCisJKFRSYXN0ZXIpIFtHUkFZU19VU0VfR0FNTUFdOiBVc2UgYHVuc2lnbmVkIGNoYXInIGluc3RlYWQgb2YgRlRfQnl0ZS4KKwkoZ3JheV9yZW5kZXJfc3BhbiwgZ3JheV9pbml0X2dhbW1hKTogRG9uJ3QgdXNlIGBGVF9VSW50Jy4KKwlEb24ndCBjYXN0IHdpdGggYEZUX0J5dGUnLgorCShncmF5c19pbml0X2dhbW1hKTogRG9uJ3QgdXNlIGBGVF9VSW50Jy4KKworMjAwMi0wOS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGluaXQuYyAoRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyk6IEltcHJvdmUgZXJyb3IgbWVzc2FnZS4KKwkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKFBDRl9GYWNlX0RvbmUpOiBJbXByb3ZlIHRyYWNpbmcgbWVzc2FnZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX01BWF9NT0RVTEVTKTogSW5jcmVhc2VkCisJdG8gMzIuCisKKzIwMDItMDktMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToyOjMuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlZC4KKworMjAwMi0wOS0wOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAocHNoMl9nbHlwaF9maW5kX3N0cm9uZ19wb2ludHMpLAorCXNyYy9wc2hpbnRlci9wc2hhbGdvMy5jIChwc2gzX2dseXBoX2ZpbmRfc3Ryb25nX3BvaW50cyk6IEFkZGluZyBmaXgKKwl0byBwcmV2ZW50IHNlZyBmYXVsdCB3aGVuIGhpbnRzIGFyZSBwcm92aWRlZCBpbiBhbiBlbXB0eSBnbHlwaC4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmkgKEdFTl9DQUNIRV9MT09LVVApIFtGVF9ERUJVR19MRVZFTF9FUlJPUl06CisJUmVtb3ZlZCBjb25kaXRpb25hbCBjb2RlLiAgVGhpcyBmaXhlcyBhIGJ1ZyB0aGF0IHByZXZlbnRlZAorCWNvbXBpbGF0aW9uIGluIGRlYnVnIG1vZGUgb2YgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmg6IFJlbW92ZWQgaW5jb3JyZWN0IGB6ZnRfJyBkZWZpbml0aW9ucworCWFuZCB1cGRhdGVkIGNvbnN0YW50cyBkb2N1bWVudGF0aW9uIGNvbW1lbnRzLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZXJfcnVuKTogRml4ZWQgdGhlIENGRiB0YWJsZSBsb2FkZXIuCisJSXQgZGlkbid0IGFjY2VwdCBlbXB0eSBhcnJheXMsIGFuZCB0aGlzIHByZXZlbnRlZCB0aGUgbG9hZGluZyBvZgorCWNlcnRhaW4gZm9udHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRmFjZVJlYyk6IFVwZGF0aW5nIGRvY3VtZW50YXRpb24KKwljb21tZW50LiAgVGhlIGBkZXNjZW5kZXInIHZhbHVlIGlzIGFsd2F5cyAqbmVnYXRpdmUqLCBub3QgcG9zaXRpdmUuCisKKzIwMDItMDktMDkgIE93ZW4gVGF5bG9yICA8b3dlbkByZWRoYXQuY29tPgorCisJKiBzcmMvcGNmL3BjZmRyaXZlci5jIChQQ0ZfR2x5cGhfTG9hZCk6IEZpeGluZyBpbmNvcnJlY3QgY29tcHV0YXRpb24KKwlvZiBiaXRtYXAgbWV0cmljcy4KKworMjAwMi0wOS0wOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJVmFyaW91cyB1cGRhdGVzIHRvIGNvcnJlY3RseSBzdXBwb3J0IHN1Yi1waXhlbCByZW5kZXJpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IEFkZCB0d28gcmVuZGVyZXJzIGZvciBMQ0QuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVXBkYXRlZC4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2xjZCwKKwlmdF9zbW9vdGhfcmVuZGVyX2xjZF92KTogU2V0IEZUX1BJWEVMX01PREVfTENEIGFuZAorCUZUX1BJWEVMX01PREVfTENEX1YsIHJlc3BlY3RpdmVseS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNpbWFnZS5oIChGVENfSW1hZ2VUeXBlUmVjKTogTmV3CisJc3RydWN0dXJlLgorCVVwZGF0ZWQgYWxsIHVzZXJzLgorCShGVENfSW1hZ2VEZXNjKTogUmVtb3ZlZC4KKwkoRlRDX0ltYWdlQ2FjaGVfTG9va3VwKTogU2Vjb25kIHBhcmFtZXRlciBpcyBub3cgb2YgdHlwZQorCWBGVENfSW1hZ2VUeXBlJy4KKwlVcGRhdGVkIGFsbCB1c2Vycy4KKwkoRlRDX0lNQUdFX0RFU0NfQ09NUEFSRSk6IFVwZGF0ZWQgYW5kIHJlbmFtZWQgdG8uLi4KKwkoRlRDX0lNQUdFX1RZUEVfQ09NUEFSRSk6IFRoaXMuCisJKEZUQ19JTUFHRV9ERVNDX0hBU0gpOiBVcGRhdGVkIGFuZCByZW5hbWVkIHRvLi4uCisJKEZUQ19JTUFHRV9UWVBFX0hBU0gpOiBUaGlzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y3NiaXRzLmggKEZUQ19TQml0UmVjKTogRmllbGQgYG51bV9ncmF5cycKKwlyZXBsYWNlZCB3aXRoIGBtYXhfZ3JheXMnLgorCWBwaXRjaCcgaXMgbm93IEZUX1Nob3J0LgorCShGVENfU0JpdENhY2hlX0xvb2t1cCk6IFNlY29uZCBwYXJhbWV0ZXIgaXMgbm93IG9mIHR5cGUKKwlgRlRDX0ltYWdlVHlwZScuCisJVXBkYXRlZCBhbGwgdXNlcnMuCisKKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jIChGVENfSW1hZ2VRdWVyeVJlYywgRlRDX0ltYWdlRmFtaWx5UmVjKToKKwlVcGRhdGVkLgorCShmdGNfaW1hZ2Vfbm9kZV9pbml0KTogVXBkYXRlZC4KKwlNb3ZlZCBjb2RlIHRvIGNvbnZlcnQgdHlwZSBmbGFncyB0byBsb2FkIGZsYWdzIHRvLi4uCisJKEZUQ19JbWFnZV9DYWNoZV9Mb29rdXApOiBUaGlzIGZ1bmN0aW9uLgorCShmdGNfaW1hZ2VfZmFtaWx5X2luaXQpOiBVcGRhdGVkLgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdC5jIChGVENfU0JpdFF1ZXJ5UmVjLCBGVENfU0JpdEZhbWlseVJlYyk6CisJVXBkYXRlZC4KKwkoZnRjX3NiaXRfbm9kZV9sb2FkKTogVXBkYXRlZC4KKwlNb3ZlZCBjb2RlIHRvIGNvbnZlcnQgdHlwZSBmbGFncyB0byBsb2FkIGZsYWdzIHRvLi4uCisJKEZUQ19TQml0Q2FjaGVfTG9va3VwKTogVGhpcyBmdW5jdGlvbi4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoQUhfSGludGVyUmVjKTogUmVwbGFjZSBgbm9fKl9oaW50cycgd2l0aAorCWBkb18qX3NuYXBwaW5nJy4KKwlVcGRhdGUgYWxsIHVzZXJzICh3aXRoIG5lZ2F0aW9uKS4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfY29tcHV0ZV9zdGVtX3dpZHRoKTogRml4IHRocmVzaG9sZCBmb3IKKwlgZGlzdCcgZm9yIGBkZWx0YScgPCA0MC4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmggKFBTSDNfR2x5cGhSZWMpOiBSZXBsYWNlIGBub18qX2hpbnRzJyB3aXRoCisJYGRvXypfc25hcHBpbmcnLgorCVVwZGF0ZSBhbGwgdXNlcnMgKHdpdGggbmVnYXRpb24pLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmMgKHBzaDNfZGltZW5zaW9uX3F1YW50aXplX2xlbik6IE5ldworCWZ1bmN0aW9uLgorCShwc2gzX2hpbnRfYWxpZ24pOiBVc2UgaXQuCisJSW1wcm92ZSBoaW50aW5nIGNvZGUuCisJW1NUUk9OR0VSXTogUmVtb3ZlZC4KKwkoU1RST05HRVIpOiBSZW1vdmVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX1NldF9IaW50X0ZsYWdzLCBGVF9ISU5UXyopOgorCVJlbW92ZWQuCisKKzIwMDItMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRvYmpzLmMgKENJRF9TaXplX0luaXQpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9zaXplX2luaXQpOiBUaGlzLgorCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChUMV9CdWlsZGVyX0FkZF9Qb2ludDEpOiBSZW5hbWVkIHRvLi4uCisJKHQxX2J1aWxkZXJfYWRkX3BvaW50MSk6IFRoaXMuCisKKwlVcGRhdGVkIGFsbCBhZmZlY3RlZCBjb2RlLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYyAocHNoM19oaW50X2FsaWduKTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCSogc3JjL3R5cGUxL3QxZ2xvYWQuYyAoVDFfQ29tcHV0ZV9NYXhfQWR2YW5jZSk6IERpdHRvLgorCisyMDAyLTA5LTA0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogQ29ycmVjdGVkIHRoZSBkZWZpbml0aW9uIG9mCisJZnRfZW5jb2Rpbmdfc3ltYm9sIHRvIGJlIEZUX0VOQ09ESU5HX01TX1NZTUJPTCAoaW5zdGVhZCBvZgorCXRoZSBlcnJvbmVvdXMgRlRfRU5DT0RJTkdfU1lNQk9MKS4KKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGRhdGFkaXIpOiBJbml0aWFsaXplIGl0ICh0aGFua3MgdG8KKwlBbnRob255IEZvaykuCisKKzIwMDItMDgtMjkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVNsaWdodCBtb2RpZmljYXRpb24gdG8gdGhlIFBvc3RzY3JpcHQgaGludGVyIHRvIHNsaWdodGx5IGluY3JlYXNlCisJdGhlIGNvbnRyYXN0IG9mIHNtb290aCBoaW50aW5nLiAgVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gd2hhdCB0aGUKKwlhdXRvLWhpbnRlciBkb2VzIHdoZW4gaXQgY29tZXMgdG8gc3RlbSB3aWR0aCBjb21wdXRhdGlvbnMuICBIb3dldmVyLAorCWl0IHByb2R1Y2VzIGJldHRlciByZXN1bHRzIHdpdGggd2VsbC1oaW50ZWQgZm9udHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoVDFfRGVjb2Rlcl9GdW5jc1JlYyk6IEFkZCBoaW50CisJbW9kZSB0byBgaW5pdCcgbWVtYmVyIGZ1bmN0aW9uLgorCShUMV9EZWNvZGVyUmVjKTogQWRkIGhpbnQgbW9kZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cyAoVDFfSGludHNfQXBwbHlGdW5jLAorCVQyX0hpbnRzX0FwcGx5RnVuYyk6IFBhc3MgYGhpbnRfbW9kZScsIG5vdCBgaGludF9mbGFncycuCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9pbml0KTogQWRkIGhpbnQgbW9kZSBhcmd1bWVudC4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMS5jIChwczFfaGludHNfYXBwbHkpOiBQYXNzIGhpbnQgbW9kZSwgbm90CisJaGludCBmbGFncy4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChwczJfaGludHNfYXBwbHkpOiBEaXR0by4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5jIChwczNfaGludHNfYXBwbHkpOiBEaXR0by4KKwkoU1RST05HRVIpOiBOZXcgbWFjcm8uCisJKHBzaDNfaGludF9hbGlnbiwgcHNoM19oaW50X3RhYmxlX2FsaWduX2hpbnRzKTogUGFzcyBgZ2x5cGgnIGluc3RlYWQKKwlvZiBgaGludF9mbGFncycuCisJSW1wbGVtZW50IGFubm91bmNlZCBjaGFuZ2VzLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmggKFBTSDNfR2x5cGhSZWMpOiBBZGQgZmxhZ3MgdG8gY29udHJvbAorCXZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGhpbnRzIGFuZCBzbmFwcGluZy4KKworCSogUkVBRE1FLCBkb2NzL0NIQU5HRVM6IFVwZGF0aW5nIGZvciB0aGUgMi4xLjMgcmVsZWFzZS4KKworMjAwMi0wOC0yNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBNYXNzaXZlIHJlLWZvcm1hdHRpbmcgY2hhbmdlcyB0byBtYW55LCBtYW55IHNvdXJjZSBmaWxlcy4gIEkgZG9uJ3QKKwl3YW50IHRvIGxpc3QgdGhlbSBhbGwgaGVyZS4gIFRoZSBvcGVyYXRpb25zIHBlcmZvcm1lZCB3ZXJlIGFsbAorCWxvZ2ljYWwgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBzb3VyY2VzOgorCisJLSB0cnlpbmcgdG8gY29udmVydCBhbGwgZW51bXMgYW5kIGNvbnN0YW50cyB0byBDQVBJVEFMSVpFRF9TVFlMRSwKKwkgICN3aXRoIGRlZmluZSBkZWZpbml0aW9ucyBsaWtlCisKKwkgICAgI2RlZmluZSBteV9vbGRfY29uc3RhbnRzICAgTVlfTkVXX0NPTlNUQU5UCisKKwktIGJpZywgYmlnIHVwZGF0ZSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBjb21tZW50cworCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgsIHNyYy9iYXNlL2Z0b2Jqcy5jLAorCXNyYy9zbW9vdGgvZnRzbW9vdGguYywgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmg6IEFkZGluZyBzdXBwb3J0CisJZm9yIExDRC1vcHRpbWl6ZWQgcmVuZGVyaW5nIHRob3VnaCB0aGUgbmV3IGNvbnN0YW50cy9lbnVtczoKKworCSAgRlRfUkVOREVSX01PREVfTENELCBGVF9SRU5ERVJfTU9ERV9MQ0RfVgorCSAgRlRfUElYRUxfTU9ERV9MQ0QsICBGVF9QSVhFTF9NT0RFX0xDRF9WCisKKwlUaGlzIGlzIHN0aWxsIHdvcmsgaW4gcHJvZ3Jlc3MsIGRvbid0IGV4cGVjdCBldmVyeXRoaW5nIHRvIHdvcmsKKwljb3JyZWN0bHkgdGhvdWdoIG1vc3Qgb2YgdGhlIGZlYXR1cmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4KKworCSogQWRkaW5nIG5ldyBGVF9MT0FEX1hYWCBmbGFncywgdXNlZCB0byBzcGVjaWZ5IGJvdGggaGludGluZyBhbmQKKwlyZW5kZXJpbmcgdGFyZ2V0czoKKworCSAgRlRfTE9BRF9UQVJHRVRfTk9STUFMIDo6IGFudGktYWxpYXNlZCBoaW50aW5nICYgcmVuZGVyaW5nCisJICBGVF9MT0FEX1RBUkdFVF9NT05PICAgOjogbW9ub2Nocm9tZSBiaXRtYXBzCisJICBGVF9MT0FEX1RBUkdFVF9MQ0QgICAgOjogaG9yaXpvbnRhbCBSR0IvQkdSIGRlY2ltYXRlZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRpbmcgJiByZW5kZXJpbmcKKwkgIEZUX0xPQURfVEFSR0VUX0xDRF9WICA6OiB2ZXJ0aWNhbCBSR0IvQkdSIGRlY2ltYXRlZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRpbmcgJiByZW5kZXJpbmcKKworCU5vdGUgdGhhdCBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgaXMgMCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVmYXVsdAorCWJlaGF2aW91ciBvZiB0aGUgZm9udCBlbmdpbmUgaXMgX3VuY2hhbmdlZF8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oCisJKEZUX091dGxpbmVfe01vdmUsTGluZSxDb25pYyxDdWJpY31Ub19GdW5jKTogUmVuYW1lZCB0by4uLgorCShGVF9PdXRsaW5lX3tNb3ZlLExpbmUsQ29uaWMsQ3ViaWN9VG9GdW5jKTogVGhpcy4KKwkoRlRfUmFzdGVyX1NwYW5fRnVuYyk6IFJlbmFtZWQgdG8gLi4uCisJKEZUX1NwYW5GdW5jKTogVGhpcy4KKwkoRlRfUmFzdGVyX3tOZXcsRG9uZSxSZXNldCxTZXRfTW9kZSxSZW5kZXJ9X0Z1bmMpOiBSZW5hbWVkIHRvIC4uLgorCShGVF9SYXN0ZXJfe05ldyxEb25lLFJlc2V0LFNldE1vZGUsUmVuZGVyfUZ1bmN9OiBUaGlzLgorCisJVXBkYXRlZCBhbGwgYWZmZWN0ZWQgY29kZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCisJKEZUX0dseXBoX3tJbml0LERvbmUsVHJhbnNmb3JtLEJCb3gsQ29weSxQcmVwYXJlfV9GdW5jKTogUmVuYW1lZAorCXRvIC4uLgorCShGVF9HbHlwaF97SW5pdCxEb25lLFRyYW5zZm9ybSxHZXRCQm94LENvcHksUHJlcGFyZX1GdW5jKTogVGhpcy4KKwkoRlRSZW5kZXJlcl97cmVuZGVyLHRyYW5zZm9ybSxnZXRDQm94LHNldE1vZGV9KTogUmVuYW1lZCB0byAuLi4KKwkoRlRfUmVuZGVyZXJfe1JlbmRlckZ1bmMsVHJhbnNmb3JtRnVuYyxHZXRDQm94RnVuYyxTZXRlTW9kZUZ1bmN9KToKKwlUaGlzLgorCisJVXBkYXRlZCBhbGwgYWZmZWN0ZWQgY29kZS4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoQUhfUG9pbnQsIEFIX1NlZ21lbnQsIEFIX0VkZ2UsIEFIX0dsb2JhbHMsCisJQUhfRmFjZV9HbG9iYWxzLCBBSF9PdXRsaW5lLCBBSF9IaW50ZXIpOiBUaGVzZSB0eXBlZGVmcyBhcmUgbm93CisJcG9pbnRlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYCpSZWMnIHN0cnVjdHVyZXMuICBBbGwgc291cmNlIGZpbGVzCisJaGF2ZSBiZWVuIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfaW5pdCk6IEFkZCBoaW50IG1vZGUgYXMgcGFyYW1ldGVyLgorCSogc3JjL2NmZi9jZmZnbG9hZC5oIChDRkZfRGVjb2Rlcik6IEFkZCBgaGludF9tb2RlJyBlbGVtZW50LgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKENJRF9Db21wdXRlX01heF9BZHZhbmNlKTogUmVuYW1lZCB0by4uLgorCShjaWRfZmFjZV9jb21wdXRlX21heF9hZHZhbmNlKTogVGhpcy4KKwkoQ0lEX0xvYWRfR2x5cGgpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9zbG90X2xvYWRfZ2x5cGgpOiBUaGlzLgorCSogc3JjL2NpZC9jaWRsb2FkLmMgKENJRF9PcGVuX0ZhY2UpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9mYWNlX29wZW4pOiBUaGlzLgorCSogc3JjL2NpZC9jaWRvYmpzLmMgKENJRF9HbHlwaFNsb3Rfe0RvbmUsSW5pdH0pOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9zbG90X3tkb25lLGluaXR9KTogVGhpcy4KKwkoQ0lEX1NpemVfe0dldF9HbG9iYWxzX0Z1bmNzLERvbmUsUmVzZXQpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9zaXplX3tnZXRfZ2xvYmFsc19mdW5jcyxkb25lLHJlc2V0KTogVGhpcy4KKwkoQ0lEX0ZhY2Vfe0RvbmUsSW5pdH0pOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9mYWNlX3tkb25lLGluaXR9KTogVGhpcy4KKwkoQ0lEX0RyaXZlcl97RG9uZSxJbml0fTogUmVuYW1lZCB0by4uLgorCShjaWRfZHJpdmVyX3tkb25lLGluaXR9OiBUaGlzLgorCSogc3JjL2NpZC9jaWRwYXJzZS5jIChDSURfe05ldyxEb25lfV9QYXJzZXIpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9wYXJzZXJfe25ldyxkb25lfSk6IFRoaXMuCisJKiBzcmMvY2lkL2NpZHBhcnNlLmggKENJRF9Ta2lwX3tTcGFjZXMsQWxwaGF9KTogUmVuYW1lZCB0by4uLgorCShjaWRfcGFyc2VyX3NraXBfe3NwYWNlcyxhbHBoYX0pOiBUaGlzLgorCShDSURfVG97SW50LEZpeGVkLENvb3JkQXJyYXksRml4ZWRBcnJheSxUb2tlbixUb2tlbkFycmF5fSk6IFJlbmFtZWQKKwl0by4uLgorCShjaWRfcGFyc2VyX3RvX3tpbnQsZml4ZWQsY29vcmRfYXJyYXksZml4ZWRfYXJyYXksdG9rZW4sdG9rZW5fYXJyYXl9KToKKwlUaGlzLgorCShDSURfTG9hZF97RmllbGQsRmllbGRfVGFibGUpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9wYXJzZXJfbG9hZF97ZmllbGQsZmllbGRfdGFibGV9KTogVGhpcy4KKwkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoQ0lEX0dldF9JbnRlcmZhY2UpOiBSZW5hbWVkIHRvLi4uCisJKGNpZF9nZXRfaW50ZXJmYWNlKTogVGhpcy4KKworCVVwZGF0ZWQgYWxsIGFmZmVjdGVkIGNvZGUuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoUFNfVGFibGVfKik6IFJlbmFtZWQgdG8uLi4KKwkocHNfdGFibGVfKik6IFRoaXMuCisJKFQxX0J1aWxkZXJfKik6IFJlbmFtZWQgdG8uLi4KKwkodDFfYnVpbGRlcl8qKTogVGhpcy4KKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jIChUMV9EZWNvZGVyXyopOiBSZW5hbWVkIHRvLi4uCisJKHQxX2RlY29kZXJfKik6IFRoaXMuCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKFBTXyopOiBSZW5hbWVkIHRvLi4uCisJKHBzXyopOiBUaGlzLgorCisJVXBkYXRlZCBhbGwgYWZmZWN0ZWQgY29kZS4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIgKFNGTlRfR2V0X0ludGVyZmFjZSk6IFJlbmFtZWQgdG8uLi4KKwkoc2ZudF9nZXRfaW50ZXJmYWNlKTogVGhpcy4KKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChTRk5UXyopOiBSZW5hbWVkIHRvLi4uCisJKHNmbnRfKik6IFRoaXMuCisJKiBzcmMvc2ZudC90dGNtYXAuYyAoVFRfQ2hhck1hcF97TG9hZCxGcmVlfSk6IFJlbmFtZWQgdG8uLi4KKwkodHRfZmFjZV97bG9hZCxmcmVlfV9jaGFybWFwKTogVGhpcy4KKwkqIHNyYy9zZm50L3R0Y21hcDAuYyAoVFRfQnVpbGRfQ01hcHMpOiBSZW5hbWVkIHRvLi4uCisJKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBUaGlzLgorCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUXyopOiBSZW5hbWVkIHRvLi4uCisJKHR0X2ZhY2VfKik6IFRoaXMuCisJKiBzcmMvc2ZudC90dHBvc3QuYyAoVFRfUG9zdF9EZWZhdWx0X05hbWVzKTogUmVuYW1lZCB0by4uLgorCSh0dF9wb3N0X2RlZmF1bHRfbmFtZXMpOiBUaGlzLgorCShMb2FkXyopOiBSZW5hbWVkIHRvLi4uCisJKGxvYWRfKik6IFRoaXMuCisJKFRUXyopOiBSZW5hbWVkIHRvLi4uCisJKHR0X2ZhY2VfKik6IFRoaXMuCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoVFRfKik6IFJlbmFtZWQgdG8uLi4KKwkodHRfZmFjZV8qKTogVGhpcy4KKwkoe0ZpbmQsTG9hZCxDcm9wfV8qKTogUmVuYW1lZCB0by4uLgorCSh7ZmluZCxsb2FkLGNyb3B9XyopOiBUaGlzLgorCisJVXBkYXRlZCBhbGwgYWZmZWN0ZWQgY29kZS4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyKTogUmVuYW1lZCB0by4uLgorCShmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBUaGlzLgorCU1ha2UgZnVuY3Rpb24gbW9yZSBnZW5lcmljIGJ5IGFkZGluZyB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBzY2FsaW5nCisJZmFjdG9ycy4KKwkoZnRfc21vb3RoX3JlbmRlciwgZnRfc21vb3RoX3JlbmRlcl9sY2QsIGZ0X3Ntb290aF9yZW5kZXJfbGNkX3YpOgorCU5ldyBmdW5jdGlvbnMuCisKKwkoZnRfc21vb3RoX2xvY2RfcmVuZGVyZXJfY2xhc3MsIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzKTogTmV3CisJY2xhc3Nlcy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jIChUVF97RG9uZSxOZXd9X0dseXBoWm9uZSk6IFJlbmFtZWQgdG8uLi4KKwkodHRfZ2x5cGh6b25lX3tkb25lLG5ld30pOiBUaGlzLgorCShUVF97RmFjZSxTaXplLERyaXZlcn1fKik6IFJlbmFtZWQgdG8uLi4KKwkodHRfe2ZhY2Usc2l6ZSxkcml2ZXJ9XyopOiBUaGlzLgorCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAoVFRfTG9hZF9Mb2NhdGlvbnMpOiBSZW5hbWVkIHRvLi4uCisJKHR0X2ZhY2VfbG9hZF9sb2NhKTogVGhpcy4KKwkoVFRfTG9hZF9Qcm9ncmFtcyk6IFJlbmFtZWQgdG8uLi4KKwkodHRfZmFjZV9sb2FkX2ZwZ20pOiBUaGlzLgorCShUVF8qKTogUmVuYW1lZCB0by4uLgorCSh0dF9mYWNlXyopOiBUaGlzLgorCisyMDAyLTA4LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IE5ldyBmaWxlLgorCisyMDAyLTA4LTIzICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX29wZXJhdG9yX3NlYWMpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBJbmNyZW1lbnRhbCBmb250cyAoYWN0dWFsbHkgbm90CisJaW5jcmVtZW50YWwgaW4gdGhlIGNhc2Ugb2YgQ0ZGIGJ1dCBqdXN0IHVzaW5nIGNhbGxiYWNrcyB0byBnZXQgZ2x5cGgKKwlyZWNpcGVzKSBwYXNzIHRoZSBjaGFyYWN0ZXIgY29kZSwgbm90IHRoZSBnbHlwaCBpbmRleCwgdG8gdGhlCisJZ2V0X2dseXBoX2RhdGEgZnVuY3Rpb247IHRoZXkgaGF2ZSBubyB2YWxpZCBjaGFyc2V0IHRhYmxlLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IFJlbW92ZWQgc3BlY2lhbCBjYXNlcyBmb3IKKwlGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMLCB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeTsgQ0ZGCisJZm9udHMgcHJvdmlkZWQgdmlhIHRoZSBpbmNyZW1lbnRhbCBpbnRlcmZhY2Ugbm93IGhhdmUgdG8gY29uZm9ybQorCW1vcmUgY2xvc2VseSB0byB0aGUgQ0ZGIGZvbnQgZm9ybWF0LgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuaCAoY2ZmX2ZvbnRfbG9hZCk6IFJlbW92ZWQgYXJndW1lbnQgbm93IHVubmVlZGVkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IENoYW5nZWQgY2FsbCB0byBjZmZfZm9udF9sb2FkCisJdG8gY29uZm9ybSB3aXRoIG5ldyBzaWduYXR1cmUuCisKKzIwMDItMDgtMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmplY3QuYywgc3JjL2Jhc2UvZnRzeW50aC5jLCBzcmMvYmFzZS9mdHN0cm9rZXIuYywKKwlzcmMvYmRmL2JkZmRyaXZyLmM6IFJlbW92ZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDItMDgtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmMgKHBzaDNfZ2x5cGhfY29tcHV0ZV9pbmZsZWN0aW9ucywKKwlwc2gzX2dseXBoX2NvbXB1dGVfZXh0cmVtYSwgcHNoM19oaW50X3RhYmxlX2ZpbmRfc3Ryb25nX3BvaW50KTogRml4CisJY29tcGlsZXIgd2FybmluZ3MgYW5kIHJlc29sdmUgc2hhZG93aW5nIG9mIGxvY2FsIHZhcmlhYmxlcy4KKworMjAwMi0wOC0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJVGhlIGF1dG9tYXRpYyBhbmQgUG9zdHNjcmlwdCBoaW50ZXIgbm93IGF1dG9tYXRpY2FsbHkgZGV0ZWN0CisJaW5mbGVjdGlvbiBwb2ludHMgaW4gZ2x5cGggb3V0bGluZXMgYW5kIHRyZWF0cyB0aGVtIHNwZWNpYWxseS4gIFRoaXMKKwlpcyB2ZXJ5IHVzZWZ1bCB0byBwcmV2ZW50IG5hc3R5IGVmZmVjdCBsaWtlIHRoZSBkaXNhcHBlYXJpbmcKKwlkaWFnb25hbHMgb2YgYFMnIGFuZCBgcycgaW4gbWFueSwgbWFueSBmb250cy4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoYWhfZmxhZ19pbmZsZWN0aW9uKTogTmV3IG1hY3JvLgorCSogc3JjL2F1dG9oaW50L2FoYW5nbGVzLmMgKGFoX2FuZ2xlX2RpZmYpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvYXV0b2hpbnQvYWhhbmdsZXMuaDogVXBkYXRlZC4KKwkqIHNyYy9hdXRvaGludC9haGdseXBoLmMgKGFoX291dGxpbmVfY29tcHV0ZV9pbmZsZWN0aW9ucyk6IE5ldworCWZ1bmN0aW9uLgorCShhaF9vdXRsaW5lX2RldGVjdF9mZWF0dXJlcyk6IFVzZSBpdC4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoYWhfaGludGVyX2FsaWduX3N0cm9uZ19wb2ludHMpCisJWyFBSF9PUFRJT05fTk9fV0VBS19JTlRFUlBPTEFUSU9OXTogSGFuZGxlIGluZmxlY3Rpb24uCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weSwgc3JjL3Rvb2xzL2RvY21ha2VyL3V0aWxzLnB5LAorCXNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHk6IFVwZGF0aW5nIHRoZSBEb2NNYWtlciB0b29sLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IENoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBgbG9hZF9mbGFncycKKwlwYXJhbWV0ZXIgZnJvbSBgRlRfSW50JyB0byBgRlRfSW50MzInLCB0aGlzIGluIG9yZGVyIHRvIHN1cHBvcnQgbW9yZQorCW9wdGlvbnMuICBUaGlzIHNob3VsZCBvbmx5IGJyZWFrIGJpbmFyeSBhbmQvb3Igc291cmNlIGNvbXBhdGliaWxpdHkKKwlvbiAxNi1iaXQgcGxhdGZvcm1zIChBdGFyaT8pLgorCShGVF9MT0FEX05PX0FVVE9ISU5UKTogTmV3IG1hY3JvLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisJSGFuZGxlIEZUX0xPQURfTk9fQVVUT0hJTlQuCisJKEZUX0xvYWRfQ2hhcik6IFVwZGF0ZWQuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5jLCBzcmMvYmFzZS9mdG9ianMuYywgc3JjL2Jhc2UvZnRvYmplY3QuYywKKwlzcmMvYXV0b2hpbnQvYWhnbHlwaC5jLCBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IEZpeGluZyB0eXBvcworCWFuZCByZW1vdmluZyBjb21waWxlciB3YXJuaW5ncy4KKworMjAwMi0wOC0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9HZXRfTWV0cmljcyk6IEFkZCBndWFyZCBmb3IgayA9IDAuCisKKzIwMDItMDgtMjAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28xLmMsIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jLAorCXNyYy9wc2hpbnRlci9wc2hnbG9iLmMsIHNyYy9wc2hpbnRlci9wc2hyZWMuYywKKwlzcmMvYXV0b2hpbnQvYWhtb2R1bGUuYyBbREVCVUdfSElOVEVSXTogUmVtb3ZpbmcgY29tcGlsZXIgd2FybmluZ3MKKwkob25seSB1c2VkIGluIGRldmVsb3BtZW50IGJ1aWxkcyBhbnl3YXkpLgorCisJSW1wcm92ZSBzdXBwb3J0IG9mIGxvY2FsIGV4dHJlbWEgYW5kIHN0ZW0gZWRnZSBwb2ludHMuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5oIChQU0gzX0hpbnRfVGFibGVSZWMpOiBVc2UgUFNIM19ab25lUmVjCisJZm9yIGB6b25lcycuCisJKFBTSDNfRElSX1VQLCBQU0gzX0RJUl9ET1dOKTogRXhjaGFuZ2UgdmFsdWVzLgorCShQU0gzX0RJUl9IT1JJWk9OVEFMLCBQU0gzX0RJUl9WRVJUSUNBTCk6IE5ldyBtYWNyb3MuCisJKFBTSDNfRElSX0NPTVBBUkUsIFBTSDNfRElSX0lTX0hPUklaT05UQUwsIFBTSDNfSVNfVkVSVElDQUwpOiBOZXcKKwltYWNyb3MuCisJKFBTSDNfUE9JTlRfSU5GTEVYKTogTmV3IGVudW0uCisJKHBzaDNfcG9pbnRfe2lzLHNldH1fe29mZixpbmZsZXh9KTogTmV3IG1hY3Jvcy4KKwkoUFNIM19QT0lOVF97RVhUUkVNVU0sUE9TSVRJVkUsTkVHQVRJVkUsRURHRV9NSU4sRURHRV9NQVgpOiBOZXcKKwllbnVtIHZhbHVlcy4KKwkocHNoM19wb2ludF97aXMsc2V0fV97ZXh0cmVtdW0scG9zaXRpdmUsbmVnYXRpdmUsZWRnZV9taW4sZWRnZV9tYXh9KToKKwlOZXcgbWFjcm9zLgorCShQU0gzX1BvaW50UmVjKTogTmV3IG1lbWJlcnMgYGZsYWdzMicgYW5kIGBvcmdfdicuCisJKFBTSDNfUE9JTlRfRVFVQUxfQVJHLCBQU0gzX1BPSU5UX0FOR0xFKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmMgW0RFQlVHX0hJTlRFUl06IFJlbW92aW5nIGNvbXBpbGVyCisJd2FybmluZ3MuCisJKENPTVBVVEVfSU5GTEVYUyk6IE5ldyBtYWNyby4KKwkocHNoM19oaW50X2FsaWduKTogU2ltcGxpZnkgc29tZSBiYXNpYyBhcml0aG1ldGljIGNvbXB1dGF0aW9ucy4KKwkocHNoM19wb2ludF9pc19leHRyZW11bSk6IFJlbW92ZWQuCisJKHBzaDNfZ2x5cGhfY29tcHV0ZV9pbmZsZWN0aW9ucykgW0NPTVBVVEVfSU5GTEVYU106IE5ldyBmdW5jdGlvbi4KKwkocHNoM19nbHlwaF9pbml0KSBbQ09NUFVURV9JTkZMRVhTXTogVXNlIGl0LgorCShwc2gzX2dseXBoX2NvbXB1dGVfZXh0cmVtYSk6IE5ldyBmdW5jdGlvbi4KKwkoUFNIM19TVFJPTkdfVEhSRVNIT0xEKTogSW5jcmVhc2VkIHRvIDMwLgorCShwc2gzX2hpbnRfdGFibGVfZmluZF9zdHJvbmdfcG9pbnQpOiBJbXByb3ZlZC4KKwkocHNoM19nbHlwaF9maW5kX3N0cm9uZ19wb2ludHMsCisJcHNoM19nbHlwaF9pbnRlcnBvbGF0ZV9zdHJvbmdfcG9pbnRzKTogVXBkYXRlZC4KKwkocHNoM19oaW50c19hcHBseSk6IFVzZSBwc2gzX2dseXBoX2NvbXB1dGVfZXh0cmVtYS4KKworCSogdGVzdC9ndmlldy5jIChkcmF3X3BzM19oaW50LCBwczNfZHJhd19jb250cm9sX3BvaW50cyk6IE5ldworCWZ1bmN0aW9ucy4KKwlPdGhlciBzbWFsbCB1cGRhdGVzLgorCisJKiBKYW1maWxlOiBTbWFsbCB1cGRhdGVzLgorCisyMDAyLTA4LTE4ICBBcmthZGl1c3ogTWlza2lld2ljeiAgPG1pc2lla0BwbGQuT1JHLlBMPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChpbnN0YWxsLCB1bmluc3RhbGwpOiBBZGQgJChERVNURElSKSB0bworCW1ha2UgbGlmZSBlYXNpZXIgZm9yIHBhY2thZ2UgbWFpbnRhaW5lcnMuCisKKzIwMDItMDgtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2Zkcml2ZXIuYyAoUENGX0dseXBoX0xvYWQpOiBGaXggY29tcHV0YXRpb24gb2YKKwlob3JpQmVhcmluZ1guCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaExvYWQpOiBGaXggY29tcHV0YXRpb24gb2YKKwlob3JpQmVhcmluZ1kuCisKKzIwMDItMDgtMTYgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJQWRkIHN1cHBvcnQgZm9yIEFwcGxlIGNvbXBvc2l0ZSBnbHlwaHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRCk6IE5ldyBtYWNyby4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoT1ZFUkxBUF9DT01QT1VORCwgU0NBTEVEX0NPTVBPTkVOVF9PRkZTRVQsCisJVU5TQ0FMRURfQ09NUE9ORU5UX09GRlNFVCk6IE5ldyBtYWNyb3MgZm9yIGFkZGl0aW9uYWwgT3BlblR5cGUKKwlnbHlwaCBsb2FkaW5nIGZsYWdzLgorCShsb2FkX3RydWV0eXBlX2dseXBoKTogSW1wbGVtZW50IGl0LgorCisyMDAyLTA4LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2ZyZWVfZ2x5cGhfZGF0YSksCisJc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9mb250X2xvYWQpOiBVc2UgRlRfVU5VU0VELgorCisyMDAyLTA4LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2x5cGhfVG9fQml0bWFwKTogSW5pdGlhbGl6ZSBgZXJyb3InLgorCSogc3JjL3NmbnQvc2ZvYmpzLmMgKFNGTlRfTG9hZF9GYWNlKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDItMDgtMTUgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCUltcGxlbWVudGVkIHRoZSBpbmNyZW1lbnRhbCBmb250IGxvYWRpbmcgc3lzdGVtIGZvciB0aGUgQ0ZGIGRyaXZlci4KKwlUZXN0ZWQgdXNpbmcgdGhlIEdob3N0U2NyaXB0LXRvLUZyZWVUeXBlIGJyaWRnZSAodW5kZXIgZGV2ZWxvcG1lbnQpLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9nZXRfZ2x5cGhfZGF0YSwgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSk6IE5ldworCWZ1bmN0aW9ucy4KKwkoY2ZmX29wZXJhdG9yX3NlYWMsIGNmZl9jb21wdXRlX21heF9hZHZhbmNlLCBjZmZfc2xvdF9sb2FkKTogVXNlCisJdGhlbS4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogQWRkIGBmYWNlJyBwYXJhbWV0ZXIuCisJTG9hZCBjaGFyc2V0IGFuZCBlbmNvZGluZyBvbmx5IGlmIHRoZXJlIGFyZSBnbHlwaHMuCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBJbmNyZW1lbnRhbCBmb250cyBkb24ndCBuZWVkCisJY2hhcmFjdGVyIHJlY2lwZXMuCisJKiBzcmMvY2ZmL2NmZmxvYWQuaCwgc3JjL2NmZi9jZmZvYmpzLmM6IFVwZGF0ZWQuCisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBDb3JyZWN0ZWQgdGhlIGluY3JlbWVudGFsIGZvbnQKKwlsb2FkaW5nIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgbmV3IHN5c3RlbSBpbnRyb2R1Y2VkIG9uCisJMjAwMi0wOC0wMS4KKworMjAwMi0wOC0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmNtYXAuYzogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLgorCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMsIHNyYy9jYWNoZS9mdGNjYWNoZS5pLAorCXNyYy9wZnIvcGZybG9hZC5jLCBzcmMvcGZyL3Bmcmdsb2FkLmM6IHMvaW5kZXgvaWR4Ly4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jOiBzL3NlbGVjdC9mZHNlbGVjdC8uCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmM6IHMvd2FpdC93YWl0aW5nLy4KKworMjAwMi0wOC0wMSAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX09wZW5fRmFjZSk6IFRvbGVyYXRlIGEgZmFjZSB3aXRoIG5vCisJY2hhcnN0cmluZ3MgaWYgdGhlcmUgaXMgYW4gaW5jcmVtZW50YWwgbG9hZGluZyBpbnRlcmZhY2UuICBUeXBlIDEKKwlmYWNlcyBzdXBwbGllZCBieSBQb3N0U2NyaXB0IGludGVycHJldGVycyBsaWtlIEdob3N0U2NyaXB0IHdpbGwKKwl0eXBpY2FsbHkgbm90IHByb3ZpZGUgYW55IGNoYXJzdHJpbmdzIGF0IGxvYWQgdGltZSwgc28gdGhpcyBpcworCWVzc2VudGlhbCBpZiB0aGV5IGFyZSB0byB3b3JrLgorCisyMDAyLTA4LTAxICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwlNb2RpZmllZCBpbmNyZW1lbnRhbCBsb2FkaW5nIGludGVyZmFjZSB0byBiZSBjbG9zZXIgdG8gRGF2aWQncworCXByZWZlcmVuY2VzLiAgVGhlIGhlYWRlciBmcmVldHlwZS5oIGlzIG5vdCBub3cgYWZmZWN0ZWQsIHRoZQorCWludGVyZmFjZSBpcyBzcGVjaWZpZWQgdmlhIGFuIEZUX1BhcmFtZXRlciwgdGhlIHBvaW50ZXIgdG8gdGhlCisJaW50ZXJmYWNlIGlzIGhpZGRlbiBpbiBhbiBpbnRlcm5hbCBwYXJ0IG9mIHRoZSBmYWNlIHJlY29yZCwgYW5kIGFsbAorCXRoZSBkZWZpbml0aW9ucyBhcmUgaW4gZnRpbmNyZW0uaC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXToKKwlSZW1vdmVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCBbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06CisJSW5jbHVkZSBGVF9JTkNSRU1FTlRBTF9ILgorCShGVF9GYWNlX0ludGVybmFsUmVjKSBbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IEFkZAorCWBpbmNyZW1lbnRhbF9pbnRlcmZhY2UnLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAob3Blbl9mYWNlLCBGVF9PcGVuX0ZhY2UpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBVcGRhdGVkLgorCSogc3JjL3NmbnQvc2ZvYmpzLmMgKFNGTlRfTG9hZF9GYWNlKSBbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06CisJVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCkKKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IFVwZGF0ZWQuCisJRnJlZSBsb2FkZWQgZ2x5cGggZGF0YSBwcm9wZXJseS4KKwkoY29tcHV0ZV9nbHlwaF9tZXRyaWNzLCBUVF9Mb2FkX0dseXBoKQorCVtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogVXBkYXRlZC4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoVFRfRmFjZV9Jbml0KQorCVtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogVXBkYXRlZC4KKworCSogc3JjL3R5cGUxL3QxZ2xvYWQuYyAoVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZykKKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IFVwZGF0ZWQuCisJKFQxX1BhcnNlX0dseXBoKSBbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IFVwZGF0ZWQuCisJRnJlZSBsb2FkZWQgZ2x5cGggZGF0YSBwcm9wZXJseS4KKwkoVDFfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBGcmVlIGxvYWRlZCBnbHlwaCBkYXRhIHByb3Blcmx5LgorCisyMDAyLTA3LTMwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaDogQWRkaW5nIG5ldyBleHBlcmltZW50YWwgaGVhZGVyIGZpbGUKKwl0byBkZW1vbnN0cmF0ZSBhIGBjbGVhbmVyJyBBUEkgdG8gc3VwcG9ydCBpbmNyZW1lbnRhbCBmb250IGxvYWRpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0lOQ1JFTUVOVEFMX0gpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy90b29scy9kb2NtYWtlci8qOiBBZGRpbmcgbmV3IChtb3JlIGFkdmFuY2VkKSB2ZXJzaW9uIG9mCisJdGhlIERvY01ha2VyIHRvb2wsIHVzaW5nIFB5dGhvbidzIHNvcGhpc3RpY2F0ZWQgcmVnZXhwcy4KKworMjAwMi0wNy0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJcy9mdF9tZW1zZXQvRlRfTUVNX1NFVC8uCisJcy9GVF9NRU1fU0VUL0ZUX01FTV9aRVJPLyB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAwMi0wNy0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoc2ZudF9kaXJfY2hlY2spOiBNYWtlIGl0IHdvcmsgd2l0aCBUVENzLgorCisyMDAyLTA3LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBzL21lbXNldC9mdF9tZW1zZXQvLgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2hpbnRfZWRnZXNfMyk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9lbmNvZGluZ19sb2FkKTogUmVtb3ZlIGBtZW1vcnknIHZhcmlhYmxlLgorCSogc3JjL2NmZi9jZmZjbWFwLmMgKGNmZl9jbWFwX2VuY29kaW5nX2luaXQpOiBSZW1vdmUgYHBzbmFtZXMnCisJdmFyaWFibGUuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogUmVtb3ZlIHN0YXRlbWVudAorCXdpdGhvdXQgZWZmZWN0LgorCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyIChHZXRfQ2hhcl9JbmRleCwgR2V0X05leHRfQ2hhcik6IFJlbW92ZWQuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5jIChwc2gzX2hpbnRfdGFibGVfcmVjb3JkLAorCXBzaDNfaGludF90YWJsZV9pbml0LCBwc2gzX2hpbnRfdGFibGVfYWN0aXZhdGVfbWFzayk6IEZpeCBlcnJvcgorCW1lc3NhZ2UuCisKKzIwMDItMDctMjQgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jOiBGaXggZm9yIGJ1ZyByZXBvcnRlZCBieSBTdmVuIE5ldW1hbm4KKwlbc3ZlbkBnaW1wLm9yZ10gb24gdGhlIEZyZWVUeXBlIGRldmVsb3BtZW50IGZvcnVtOiBgSWYKKwlGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMIGlzIHVuZGVmaW5lZCAodGhpcyBpcyB0aGUgZGVmYXVsdCksIHRoZQorCVRydWVUeXBlIGxvYWRlciBjcmFzaGVzIGluIGxpbmUgODUyIG9mIHNyYy90cnVldHlwZS90dGdsb2FkLmMgd2hlbgorCWl0IHRyaWVzIHRvIGFjY2VzcyBmYWNlLT5nbHlwaF9sb2NhdGlvbnMuJworCisyMDAyLTA3LTE4ICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwlBZGRlZCB0eXBlcyBhbmQgc3RydWN0dXJlcyB0byBzdXBwb3J0IGluY3JlbWVudGFsIHR5cGVmYWNlIGxvYWRpbmcuCisJVGhlIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZSBzdHJ1Y3R1cmUsIGRlZmluZWQgaW4gZnJlZXR5cGUuaCwgaXMKKwlkZXNpZ25lZCB0byBiZSBwYXNzZWQgdG8gRlRfT3Blbl9GYWNlIHRvIHByb3ZpZGUgY2FsbGJhY2sgZnVuY3Rpb25zCisJdG8gb2J0YWluIGdseXBoIHJlY2lwZXMgYW5kIG1ldHJpY3MsIGZvciBmb250cyBsaWtlIHRob3NlIHBhc3NlZAorCWZyb20gUG9zdFNjcmlwdCB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSBwcm92aWRlIGFsbCwgb3IgYW55LCBnbHlwaAorCWluZm9ybWF0aW9uLCB3aGVuIGZpcnN0IG9wZW5lZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCk6CisJTmV3IGNvbmZpZ3VyYXRpb24gbWFjcm8gdG8gZW5hYmxlIGluY3JlbWVudGFsIGZhY2UgbG9hZGluZy4gIEJ5CisJZGVmYXVsdCBpdCBpcyBub3QgZGVmaW5lZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9CYXNpY19HbHlwaF9NZXRyaWNzLAorCUZUX0dldF9HbHlwaF9EYXRhX0Z1bmMsIEZUX0dldF9HbHlwaF9NZXRyaWNzX0Z1bmMsCisJRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlX0Z1bmNzLCBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2UpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBOZXcuCisJKEZUX09wZW5fQXJncywgRlRfRmFjZVJlYykgW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBOZXcgZmllbGQKKwlgaW5jcmVtZW50YWxfaW50ZXJmYWNlJy4KKwkoRlRfT3Blbl9GbGFncykgW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBOZXcgZW51bQorCWBmdF9vcGVuX2luY3JlbWVudGFsJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmg6IEluY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ILgorCShGVF9EYXRhKTogTmV3IHN0cnVjdHVyZSB0byByZXByZXNlbnQgYmluYXJ5IGRhdGEuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChvcGVuX2ZhY2UpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXToKKwlBZGQgcGFyYW1ldGVyIGZvciBpbmNyZW1lbnRhbCBsb2FkaW5nLgorCShGVF9PcGVuX0ZhY2UpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogVXNlIGluY3JlbWVudGFsCisJaW50ZXJmYWNlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKQorCVtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogQWRkZWQgdGhlIGluY3JlbWVudGFsIGxvYWRpbmcgc3lzdGVtCisJZm9yIHRoZSBUcnVlVHlwZSBkcml2ZXIuCisJKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IFJldHVybiBGVF9FcnJvci4KKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IENoZWNrIGZvciBvdmVycmlkaW5nIG1ldHJpY3MuCisJKFRUX0xvYWRfR2x5cGgpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogRG9uJ3QgbG9vayBmb3IKKwl0aGUgZ2x5cGggdGFibGUgd2hpbGUgaGFuZGxpbmcgYW4gaW5jcmVtZW50YWwgZm9udC4KKwlHZXQgZ2x5cGggb2Zmc2V0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKFRUX0ZhY2VfSW5pdCkKKwlbRlRfQ09ORklHX09QVElPTl9JTkNPUkVNRU5UQUxdOiBBZGRlZCB0aGUgaW5jcmVtZW50YWwgbG9hZGluZworCXN5c3RlbSBmb3IgdGhlIFRydWVUeXBlIGRyaXZlci4KKworCSogc3JjL2NpZC9jaWRnbG9hZC5jIChjaWRfbG9hZF9nbHlwaCkKKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IEFkZGVkIHRoZSBpbmNyZW1lbnRhbCBsb2FkaW5nIHN5c3RlbQorCWZvciB0aGUgQ0lEIGRyaXZlci4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKFNGTlRfTG9hZF9GYWNlKSBbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06CisJQ2hhbmdlcyB0byBzdXBwb3J0IGluY3JlbWVudGFsIFR5cGUgNDIgZm9udHM6IEFzc3VtZSBhIGZvbnQgaGFzCisJZ2x5cGhzIGlmIGl0IGhhcyBhbiBpbmNyZW1lbnRhbCBpbnRlcmZhY2Ugb2JqZWN0LgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9QYXJzZV9HbHlwaCk6IFJlbmFtZWQgdG8uLi4KKwkoVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyk6IFRoaXMuCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBBZGRlZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbGx5CisJbG9hZGVkIFR5cGUgMSBmYWNlcy4KKwkoVDFfUGFyc2VfR2x5cGgpOiBOZXcgZnVuY3Rpb24uCisJKFQxX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCisyMDAyLTA3LTE3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlDbGVhbmluZyB1cCB0aGUgY2FjaGUgc3ViLXN5c3RlbSBjb2RlOyBsaW5lYXIgaGFzaGluZyBpcyBub3cgdGhlCisJZGVmYXVsdC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNjYWNoZS5oLCBzcmMvY2FjaGUvZnRjY2FjaGUuaSwKKwlzcmMvY2FjaGUvZnRjY2FjaGUuYyBbIUZUQ19DQUNIRV9VU0VfTElORUFSX0hBU0hJTkddOiBSZW1vdmVkLgorCShGVENfQ0FDSEVfVVNFX0xJTkVBUl9IQVNISU5HOiBSZW1vdmVkIGFsc28uCisKKwlGVF9DT05GSUdfT1BUSU9OX1VTRV9DTUFQUyBpcyBub3cgdGhlIGRlZmF1bHQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaCAoRlRfRHJpdmVyX0NsYXNzUmVjKTogUmVtb3ZlCisJYGdldF9jaGFyX2luZGV4JyBhbmQgYGdldF9uZXh0X2NoYXInLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oLCBzcmMvYmFzZS9mdG9ianMuYywKKwlzcmMvYmRmL2JkZmRyaXZyLmMsIHNyYy9jZmYvY2Zmb2Jqcy5jLCBzcmMvcGNmL3BjZmRyaXZyLmMsCisJc3JjL3Bmci9wZnJkcml2ci5jLCBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRjbWFwMC5jLAorCXNyYy9zZm50L3R0Y21hcDAuaCwgc3JjL3NmbnQvdHRsb2FkLmMsIHNyYy90eXBlMS90MW9ianMuYywKKwlzcmMvdHlwZTQyL3Q0Mm9ianMuYywgc3JjL3dpbmZvbnRzL3dpbmZudC5jCisJWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9DTUFQU106IFJlbW92ZWQuICBUaGUgbmV3IGNtYXAgY29kZSBpcyBub3cKKwl0aGUgZGVmYXVsdC4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9DTWFwX0NoYXJJbmRleCwgVDQyX0NNYXBfQ2hhck5leHQpOgorCVJlbW92ZWQuCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuaDogVXBkYXRlZC4KKworCSogc3JjL2NpZC9jaWRyaXZlci5jIChDaWRfR2V0X0NoYXJfSW5kZXgsIENpZF9HZXRfTmV4dF9DaGFyKToKKwlSZW1vdmVkLgorCSh0MV9jaWRfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9kcml2ZXJfY2xhc3MpOiBVcGRhdGVkLgorCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKEdldF9DaGFyX0luZGV4LCBHZXRfTmV4dF9DaGFyKTogUmVtb3ZlZAorCSh0MV9kcml2ZXJfY2xhc3MpOiBVcGRhdGVkLgorCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jICh0NDJfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKG9wZW5fZmFjZSk6IFNlbGVjdCBVbmljb2RlIGNtYXAgYnkgZGVmYXVsdC4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfU0ZOVF9IZWFkZXIpOiBGaXhlZCBhIHJlY2VudCBidWcgdGhhdAorCXByZXZlbnRlZCBPcGVuVHlwZSBmb250cyB0byBiZSByZWNvZ25pemVkIGJ5IEZyZWVUeXBlLgorCisyMDAyLTA3LTExICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlDaGFuZ2luZyB0aGUgU0ZOVCBsb2FkZXIgdG8gY2hlY2sgZm9yIFNGTlQtYmFzZWQgZm9udCBmaWxlcworCWRpZmZlcmVudGx5LiAgV2Ugbm93IGlnbm9yZSB0aGUgcmFuZ2UgYGhlbHBlcicgZmllbGRzIGFuZCBjaGVjayB0aGUKKwlgaGVhZCcgdGFibGUncyBtYWdpYyBudW1iZXIgaW5zdGVhZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFNGTlRfSGVhZGVyUmVjKTogQWRkIGBvZmZzZXQnCisJZmllbGQuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChzZm50X2Rpcl9jaGVjayk6IE5ldyBmdW5jdGlvbi4KKwkoVFRfTG9hZF9TRk5UX0hlYWRlclJlYyk6IFJlbmFtZWQgdG8uLi4KKwkoVFRfTG9hZF9TRk5UX0hlYWRlcik6IFRoaXMuCisJSW1wbGVtZW50IG5ldyBmdW5jdGlvbmFsaXR5LgorCSogc3JjL3NmbnQvdHRsb2FkLmg6IFVwZGF0ZWQuCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2ludGVyZmFjZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0b2JqZWN0LmMsIHNyYy9iYXNlL2Z0aGFzaC5jOiBVcGRhdGVkIG9iamVjdCBzdWItc3lzdGVtCisJYW5kIGR5bmFtaWMgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiAoc3RpbGwgZXhwZXJpbWVudGFsLCBkb24ndAorCXVzZSkuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oOiBVcGRhdGVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfTGlicmFyeVJlYyk6IE5ldyBtZW1iZXIKKwlgbWV0YV9jbGFzcycuCisKKwlGaXhpbmcgYSBidWcgaW4gdGhlIFR5cGUgMSBsb2FkZXIgdGhhdCBwcmV2ZW50ZWQgdmFsaWQgZm9udCBib3VuZGluZworCWJveGVzIHRvIGJlIGxvYWRlZCBmcm9tIG11bHRpcGxlIG1hc3RlciBmb250cy4KKworCSogaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIChQU19CbGVuZFJlYyk6IEFkZCBgYmJveGVzJyBmaWVsZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChUMV9GaWVsZFR5cGUpOiBBZGQKKwlgVDFfRklFTERfVFlQRV9CQk9YJy4KKwkoVDFfRmllbGRMb2NhdGlvbik6IEFkZCBgVDFfRklFTERfTE9DQVRJT05fQkJPWCcuCisJKFQxX0ZJRUxEX0JCT1gpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoUFNfUGFyc2VyX0xvYWRGaWVsZCk6IEhhbmRsZSBUMV9GSUVMRF9UWVBFX0JCT1guCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHQxX2FsbG9jYXRlX2JsZW5kKTogQ3JlYXRlIGJsZW5kLT5iYm94ZXMuCisJKFQxX0RvbmVfQmxlbmQpOiBGcmVlIGJsZW5kLT5iYm94ZXMuCisJKHQxX2xvYWRfa2V5d29yZCk6IEhhbmRsZSBUMV9GSUVMRF9MT0NBVElPTl9CQk9YLgorCShwYXJzZV9mb250X2Jib3gpOiBDb21tZW50ZWQgb3V0LgorCSh0MV9rZXl3b3Jkcyk6IENvbW1lbnQgb3V0IGBwYXJzZV9mb250X2Jib3gnLgorCSogc3JjL3R5cGUxL3QxdG9rZW5zLmg6IERlZmluZSBgRm9udEJCb3gnIGZpZWxkLgorCisyMDAyLTA3LTEwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jOiBTbWFsbCBmaXggdG8gc2VsZWN0IHRoZSBVbmljb2RlIGNoYXJtYXAgYnkKKwlkZWZhdWx0IHdoZW4gbmVlZGVkLgorCVNtYWxsIGZpeCB0byBhbGxvdyBPcGVuVHlwZSBmb250cyB0byBzdXBwb3J0IEFkb2JlIGNoYXJtYXBzIHdoZW4KKwluZWVkZWQuCisKKwkqIHNyYy9jZmYvY2ZmY21hcC5jLCBzcmMvY2ZmL2NmZmNtYXAuaDogTmV3IGZpbGVzIHRvIHN1cHBvcnQKKwljaGFybWFwcyBmb3IgQ0ZGIGZvbnRzLgorCisJKiBzcmMvY2ZmL2NmZi5jLCBzcmMvY2ZmL0phbWZpbGUsIHNyYy9jZmYvcnVsZXMubWs6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaCAoQ0ZGX0VuY29kaW5nUmVjKTogVXNlCisJZml4ZWQtbGVuZ3RoIGFycmF5cyBmb3IgYHNpZHMnIGFuZCBgY29kZXMnLiAgQWRkIGBjb3VudCcgbWVtYmVyLgorCShDRkZfRm9udFJlYyk6IEFkZCBgcHNuYW1lcycgbWVtYmVyLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMsIHNyYy9jZmYvY2ZmbG9hZC5jLCBzcmMvY2ZmL2NmZmxvYWQuaCwKKwlzcmMvY2ZmL2NmZm9ianMuYywgc3JjL2NmZi9jZmZvYmpzLmgsIHNyYy9jZmYvY2ZmcGFyc2UuYywKKwlzcmMvY2ZmcGFyc2UuaCwgc3JjL2NmZi9jZmZnbG9hZC5jLCBzcmMvY2ZmL2NmZmdsb2FkLmg6IEFkZGluZworCXN1cHBvcnQgZm9yIENGRiBjaGFybWFwcywgcmVmb3JtYXR0aW5nIHRoZSBzb3VyY2VzLCBhbmQgcmVtb3ZpbmcKKwlzb21lIGJ1Z3MgaW4gdGhlIEVuY29kaW5nIGFuZCBDaGFyc2V0IGxvYWRlcnMuCisJTWFueSBmb250cyByZW5hbWVkIHRvIHVzZSBsb3dlcmNhc2Ugb25seToKKworCSAgQ0ZGX0J1aWxkZXJfSW5pdCAtPiBjZmZfYnVpbGRlcl9pbml0CisJICBDRkZfQnVpbGRlcl9Eb25lIC0+IGNmZl9idWlsZGVyX2RvbmUKKwkgIENGRl9Jbml0X0RlY29kZXIgLT4gY2ZmX2RlY29kZXJfaW5pdAorCSAgQ0ZGX1BhcnNlX0NoYXJTdHJpbmdzIC0+IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzCisJICBDRkZfTG9hZF9HbHlwaCAtPiBjZmZfc2xvdF9sb2FkCisJICBDRkZfSW5pdF9EZWNvZGVyIC0+IGNmZl9kZWNvZGVyX2luaXQKKwkgIENGRl9QcmVwYXJlX0RlY29kZXIgLT4gY2ZmX2RlY29kZXJfcHJlcGFyZQorCSAgQ0ZGX0dldF9TdGFuZGFyZF9FbmNvZGluZyAtPiBjZmZfZ2V0X3N0YW5kYXJkX2VuY29kaW5nCisJICBDRkZfQWNjZXNzX0VsZW1lbnQgLT4gY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50CisJICBDRkZfRm9yZ2V0X0VsZW1lbnQgLT4gY2ZmX2luZGV4X2ZvcmdldF9lbGVtZW50CisJICBDRkZfR2V0X05hbWUgLT4gY2ZmX2luZGV4X2dldF9uYW1lCisJICBDRkZfR2V0X1N0cmluZyAtPiBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcKKwkgIENGRl9HZXRfRkQgLT4gY2ZmX2ZkX3NlbGVjdF9nZXQKKwkgIENGRl9Eb25lX0NoYXJzZXQgLT4gY2ZmX2NoYXJzZXRfZG9uZQorCSAgQ0ZGX0xvYWRfQ2hhcnNldCAtPiBjZmZfY2hhcnNldF9sb2FkCisJICBDRkZfRG9uZV9FbmNvZGluZyAtPiBjZmZfZW5jb2RpbmdfZG9uZQorCSAgQ0ZGX0xvYWRfRW5jb2RpbmcgLT4gY2ZmX2VuY29kaW5nX2xvYWQKKwkgIENGRl9Eb25lX1N1YkZvbnQgLT4gY2ZmX3N1YmZvbnRfZG9uZQorCSAgQ0ZGX0xvYWRfRm9udCAtPiBjZmZfZm9udF9sb2FkCisJICBDRkZfRG9uZV9Gb250IC0+IGNmZl9mb250X2RvbmUKKwkgIENGRl9TaXplX0dldF9HbG9iYWxfRnVuY3MgLT4gY2ZmX3NpemVfZ2V0X2dsb2JhbF9mdW5jcworCSAgQ0ZGX1NpemVfRG9uZSAtPiBjZmZfc2l6ZV9kb25lCisJICBDRkZfU2l6ZV9Jbml0IC0+IGNmZl9zaXplX2luaXQKKwkgIENGRl9TaXplX1Jlc2V0IC0+IGNmZl9zaXplX3Jlc2V0CisJICBDRkZfR2x5cGhTbG90X0RvbmUgLT4gY2ZmX3Nsb3RfZG9uZQorCSAgQ0ZGX0dseXBoU2xvdF9Jbml0IC0+IGNmZl9zbG90X2luaXQKKwkgIENGRl9TdHJDb3B5IC0+IGNmZl9zdHJjcHkKKwkgIENGRl9GYWNlX0luaXQgLT4gY2ZmX2ZhY2VfaW5pdAorCSAgQ0ZGX0ZhY2VfRG9uZSAtPiBjZmZfZmFjZV9kb25lCisJICBDRkZfRHJpdmVyX0luaXQgLT4gY2ZmX2RyaXZlcl9pbml0CisJICBDRkZfRHJpdmVyX0RvbmUgLT4gY2ZmX2RyaXZlcl9kb25lCisJICBDRkZfUGFyc2VyX0luaXQgLT4gY2ZmX3BhcnNlcl9pbml0CisJICBDRkZfUGFyc2VyX1J1biAtPiBjZmZfcGFyc2VyX3J1bgorCisJICBhZGRfcG9pbnQgLT4gY2ZmX2J1aWxkZXJfYWRkX3BvaW50CisJICBhZGRfcG9pbnQxIC0+IGNmZl9idWlsZGVyX2FkZF9wb2ludDEKKwkgIGFkZF9jb250b3VyIC0+IGNmZl9idWlsZGVyX2FkZF9jb250b3VyCisJICBjbG9zZV9jb250b3VyIC0+IGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIKKwkgIGNmZl9leHBsaWNpdF9pbmRleCAtPiBjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzCisKKzIwMDItMDctMDkgIE93ZW4gVGF5bG9yICA8b3dlbkByZWRoYXQuY29tPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfZ2xvYmFsc19uZXcpOiBGaXhlZCBhIGJ1ZyB0aGF0CisJcHJldmVudGVkIHRoZSBoaW50ZXIgZnJvbSB1c2luZyBjb3JyZWN0IHN0YW5kYXJkIHdpZHRoIGFuZCBoZWlnaHQKKwl2YWx1ZXMsIHJlc3VsdGluZyBpbiBoaW50aW5nIGJ1Z3Mgd2l0aCBjZXJ0YWluIGZvbnRzIChlLmcuIFV0b3BpYSkuCisKKzIwMDItMDctMDcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Ub19CaXRtYXApOiBBZGRlZCBjb2RlIHRvIHJldHVybgorCXN1Y2Nlc3NmdWxseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIGJpdG1hcCBnbHlwaCAodGhlCisJcHJldmlvdXMgY29kZSBzaW1wbHkgcmV0dXJuZWQgd2l0aCBhbiBlcnJvcikuCisKKwkqIGRvY3MvREVCVUcuVFhUOiBBZGRpbmcgZGVidWdnaW5nIHN1cHBvcnQgZG9jdW1lbnRhdGlvbi4KKworCSogc3JjL2Jhc2UvZnRkZWJ1Zy5jIChmdF9kZWJ1Z19pbml0KSwgYnVpbGRzL3dpbjMyL2Z0ZGVidWcuYworCShmdF9kZWJ1Z19pbml0KSwgYnVpbGRzL2FtaWdhL3NyYy9mdGRlYnVnLmMgKGZ0X2RlYnVnX2luaXQpOiBDaGFuZ2VkCisJdGhlIHN5bnRheCBvZiB0aGUgRlQyX0RFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZWQgdG8gY29udHJvbAorCWRlYnVnZ2luZyBvdXRwdXQgKGkuZS4gbG9nZ2luZyBhbmQgZXJyb3IgbWVzc2FnZXMpLiAgSXQgbXVzdCBub3cKKwlsb29rIGxpa2U6CisKKwkgIGFueTo2IG1lbW9yeTo0IGlvOjMgICBvcgorCSAgYW55OjYsbWVtb3J5OjQsaW86MyAgIG9yCisJICBhbnk6NjttZW1vcnk6NDtpbzozCisKKzIwMDItMDctMDcgIE93ZW4gVGF5bG9yICA8b3dlbkByZWRoYXQuY29tPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfYmx1ZXNfc25hcF9zdGVtKTogQWRkaW5nIHN1cHBvcnQgZm9yCisJYmx1ZSBmdXp6LgorCSogc3JjL3BzaGludGVyL3BzaGdsb2IuaCAoUFNIX0JsdWVzUmVjKTogQWRkIGBibHVlX2Z1enonIGZpZWxkLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9PcGVuX0ZhY2UpOiBJbml0aWFsaXplIGBibHVlX2Z1enonLgorCisJQWRkaW5nIHN1cHBvcnQgZm9yIGhpbnRlci1zcGVjaWZpYyBiaXQgZmxhZ3MsIGFuZCB0aGUgbmV3CisJRlRfU2V0X0hpbnRfRmxhZ3MgaGlnaC1sZXZlbCBBUEkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfU2V0X0hpbnRfRmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisJKEZUX0hJTlRfTk9fSU5URUdFUl9TVEVNLCBGVF9ISU5UX05PX0hTVEVNX0FMSUdOLAorCUZUX0hJTlRfTk9fVlNURU1fQUxJR04pOiBOZXcgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKTogQWRkCisJYGhpbnRfZmxhZ3MnIG1lbWJlci4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1NldF9IaW50X0ZsYWdzKTogTmV3IGZ1bmN0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXJSZWMpOiBBZGQgYGhpbnRfZmxhZ3MnCisJbWVtYmVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaCAoVDFfSGludHNfQXBwbHlGdW5jLAorCVQyX0hpbnRzX0FwcGx5RnVuYyk6IEFkZCBwYXJhbWV0ZXIgdG8gcGFzcyBoaW50IGZsYWdzLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyc3RyaW5ncywKKwlUMV9EZWNvZGVyX0luaXQpOiBVc2UgZGVjb2Rlci0+aGludF9mbGFncy4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuaCAoQ0ZGX0J1aWxkZXIpOiBBZGQgYGhpbnRfZmxhZ3MnIGZpZWxkLgorCSogc3JjL2NmZi9jZmZnbG9hZC5jIChDRkZfQnVpbGRlcl9Jbml0KTogU2V0IGJ1aWxkZXItPmhpbnRfZmxhZ3MuCisJKENGRl9QYXJzZV9DaGFyU3RyaW5ncyk6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHMxX2hpbnRzX2FwcGx5KTogQWRkIHBhcmFtZXRlciB0byBoYW5kbGUKKwloaW50IGZsYWdzICh1bnVzZWQpLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28xLmg6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAocHMyX2hpbnRzX2FwcGx5KTogQWRkIHBhcmFtZXRlciB0byBoYW5kbGUKKwloaW50IGZsYWdzICh1bnVzZWQpLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmg6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzMuYyAocHMzX2hpbnRzX2FwcGx5KTogQWRkIHBhcmFtZXRlciB0byBoYW5kbGUKKwloaW50IGZsYWdzLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmg6IFVwZGF0ZWQuCisKKzIwMDItMDctMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9zbG90X2xvYWQpOiBGaXhlZCBhIHNtYWxsIGJ1ZyB0aGF0IHJldHVybmVkCisJaW5jb3JyZWN0IGFkdmFuY2VzIHdoZW4gdGhlIG91dGxpbmUgcmVzb2x1dGlvbiB3YXMgZGlmZmVyZW50IGZyb20KKwl0aGUgbWV0cmljcyByZXNvbHV0aW9uLgorCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmM6IFJlbW92aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jOiBzL0ZUX01FTV9TRVQvRlRfWkVSTy8gd2hlcmUgYXBwcm9wcmlhdGUuCisJKGFoX291dGxpbmVfbGlua19zZWdtZW50cyk6IFNsaWdodCBpbXByb3ZlbWVudHMgdG8gdGhlIHNlcmlmCisJZGV0ZWN0aW9uIGNvZGUuICBNb3JlIHdvcmsgaXMgbmVlZGVkIHRob3VnaC4KKworMjAwMi0wNy0wMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJU21hbGwgaW1wcm92ZW1lbnRzIHRvIHRoZSBhdXRvbWF0aWMgaGludGVyLiAgVW5ldmVuIHN0ZW0td2lkdGhzIGhhdmUKKwlub3cgZGlzYXBwZWFyZWQgYW5kIGV2ZXJ5dGhpbmcgbG9va3MgbXVjaCBiZXR0ZXIsIGV2ZW4gaWYgdGhlcmUgYXJlCisJc3RpbGwgaXNzdWVzIHdpdGggc2VyaWZlZCBmb250cy4KKworCSogc3JjL2F1dG9oaW50L2FodHlwZXMuaCAoQUhfR2xvYmFscyk6IEFkZGVkIGBzdGRzJyBhcnJheS4KKwkqIHNyYy9hdXRvaGludC9haGhpbnQuYyAoT1BUSU1fU1RFTV9TTkFQKTogTmV3ICNkZWZpbmUuCisJKGFoX3NuYXBfd2lkdGgpOiBDb21tZW50ZWQgb3V0LgorCShhaF9hbGlnbl9saW5rZWRfZWRnZSk6IFJlbmFtZWQgdG8uLi4KKwkoYWhfY29tcHV0ZV9zdGVtX3dpZHRoKTogVGhpcy4KKwlEb24ndCBhbGxvdyB1bmV2ZW4gc3RlbS13aWR0aHMuCisJKGFoX2FsaWduX2xpbmtlZF9lZGdlKTogTmV3IGZ1bmN0aW9uLgorCShhaF9hbGlnbl9zZXJpZmVkX2VkZ2UpOiBEb24ndCBzdHJlbmd0aGVuIHNlcmlmcy4KKwkoYWhfaGludF9lZGdlc18zLCBhaF9oaW50ZXJfc2NhbGVfZ2xvYmFscyk6IFVwZGF0ZWQuCisKKzIwMDItMDctMDMgIE93ZW4gVGF5bG9yICA8b3dlbkByZWRoYXQuY29tPgorCisJQWRkaW5nIG5ldyBhbGdvcml0aG0gYmFzZWQgb24gT3dlbiBUYXlsb3IncyByZWNlbnQgd29yay4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28zLmMsIHNyYy9wc2hpbnRlci9wc2hhbGdvMy5oOiBOZXcgZmlsZXMuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5oOiBVcGRhdGVkLgorCVVzZSBwc2hhbGdvMyBieSBkZWZhdWx0LgorCSogc3JjL3BzaGludGVyL3BzaGludGVyLmM6IEluY2x1ZGUgcHNoYWxnbzMuYy4KKworCSogc3JjL3BzaGludGVyL0phbWZpbGUsIHNyYy9wc2hpbnRlci9ydWxlcy5tazogVXBkYXRlZC4KKworMjAwMi0wNy0wMSAgT3dlbiBUYXlsb3IgIDxvd2VuQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChwc2gyX2dseXBoX2ZpbmRfc3Ryb25nX3BvaW50cyk6IEZpeCBhIGJ1ZworCXdoZXJlLCBpZiBhIGdseXBoIGhhcyBtb3JlIHRoYW4gaGludCBtYXNrLCB0aGUgc2Vjb25kIG1hc2sgZ2V0cworCWFwcGxpZWQgdG8gcG9pbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjb3ZlcmVkIGJ5IHRoZSBmaXJzdCBtYXNrLgorCisyMDAyLTA3LTAxICBLZWl0aCBQYWNrYXJkICA8a2VpdGhwQGtlaXRocC5jb20+CisKKwkqIHNyYy9zZm50L3R0Y21hcDAuYyAodHRfY21hcDhfY2hhcl9uZXh0LCB0dF9jbWFwMTJfY2hhcl9uZXh0KToKKwlGaXhpbmcgdGhlIGNtYXAgOCBhbmQgMTIgcGFyc2luZyByb3V0aW5lcy4KKworMjAwMi0wNy0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmM6IEluY2x1ZGUgRlRfVFJJR09OT01FVFJZX0guCisJKEZUX091dGxpbmVfRW1ib2xkZW4pOiBSZW5hbWVkIHRvLi4uCisJKEZUX0dseXBoU2xvdF9FbWJvbGRlbik6IFRoaXMuCisJVXBkYXRlZCB0byBuZXcgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMuCisJKEZUX091dGxpbmVfT2JsaXF1ZSk6IFJlbmFtZWQgdG8uLi4KKwkoRlRfR2x5cGhTbG90X09ibGlxdWUpOiBUaGlzLgorCShmdF9ub3JtKTogUmVtb3ZlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oOiBVcGRhdGVkLgorCisyMDAyLTA2LTI2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmplY3QuaDogVXBkYXRpbmcgdGhlIG9iamVjdAorCXN1Yi1zeXN0ZW0gZGVmaW5pdGlvbnMgKHN0aWxsIGV4cGVyaW1lbnRhbCkuCisKKwkqIHNyYy9iYXNlL2Z0aGFzaC5jIChmdF9oYXNoX3JlbW92ZSk6IEZpeGluZyBhIHNtYWxsIHJlYWxsb2NhdGlvbgorCWJ1Zy4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfVmVjdG9yX0Zyb21fUG9sYXIsIEZUX0FuZ2xlX0RpZmYpOiBOZXcKKwlmdW5jdGlvbnMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmg6IFVwZGF0ZWQuCisKKworCUFkZGluZyBwYXRoIHN0cm9rZXIgY29tcG9uZW50ICh3b3JrIGluIHByb2dyZXNzKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZXIuaCwgc3JjL2Jhc2UvZnRzdHJva2VyLmM6IE5ldyBmaWxlcy4KKwkqIHNyYy9iYXNlL0phbWZpbGU6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX1NUUk9LRVJfSCk6IE5ldyBtYWNyby4KKworCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0NvbXBvc2l0ZV9HbHlwaCksCisJc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9WZWN0b3JfVHJhbnNmb3JtKTogRml4ZWQgV2VybmVyJ3MgbGF0ZXN0IGZpeC4KKwlGVF9WZWN0b3JfVHJhbnNmb3JtIHdhc24ndCBidWdneSwgdGhlIFRydWVUeXBlIGNvbXBvc2l0ZSBsb2FkZXIgd2FzLgorCisyMDAyLTA2LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMy4KKworMjAwMi0wNi0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisKKwkqIFZlcnNpb24gMi4xLjIgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzIwMDItMDYtMjEgIFJvYmVydG8gQWxhbWVkYSAgPG9qYW5jYW5vQGdlZWttYWlsLmRlPi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90NDJ0eXBlcy5oIChUNDJfRm9udCk6IFJlbW92ZWQgc2luY2UKKwlpdCBpcyBhbHJlYWR5IGluIHQ0Mm9ianMuaC4KKwkoVDQyX0ZhY2UpOiBVc2UgVDFfRm9udFJlYy4KKworCSogc3JjL2Jhc2UvZnR0eXBlMS5jIChGVF9HZXRfUFNfRm9udF9JbmZvKTogVXBkYXRlZC4KKwkoRlRfSGFzX1BTX0dseXBoX05hbWVzKTogQ2hlY2sgZm9yIHR5cGU0MiBkcml2ZXIgbmFtZSBhbHNvLgorCSogc3JjL3R5cGU0Mi90NDJvYmpzLmg6IEluY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTQyX1RZUEVTX0guCisJKFQ0Ml9GYWNlKTogUmVtb3ZlZCBzaW5jZSBpdCBpcyBhbHJlYWR5IGluIHQ0MnR5cGVzLmguCisKKzIwMDItMDYtMjEgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBzcmMvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWRfY29tcG91bmQpOiBGaXggbG9hZGluZyBvZiBjb21wb3NpdGUKKwlnbHlwaHMuCisKKzIwMDItMDYtMjEgIFN2ZW4gTmV1bWFubiAgPHN2ZW5AY29udmVyZ2VuY2UuZGU+CisKKwkqIHNyYy9wcmYvcGZydHlwZXMuaCAoUEZSX0tlcm5QYWlyKTogTmV3IHN0cnVjdHVyZS4KKwkoUEZSX1BoeUZvbnQpOiBVc2UgaXQuCisJKFBGUl9LZXJuRmxhZ3MpOiBOZXcgZW51bWVyYXRpb24uCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzKTogTmV3CisJZnVuY3Rpb24uCisJKHBmcl9waHlfZm9udF9leHRyYV9pdGVtcyk6IFVzZSBpdC4KKwkocGZyX3BoeV9mb250X2RvbmUpOiBVcGRhdGVkLgorCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBTZXQga2VybmluZyBmbGFnIGNvbmRpdGlvbmFsbHkuCisJKHBmcl9mYWNlX2dldF9rZXJuaW5nKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3Bmci9wZnJvYmpzLmg6IFVwZGF0ZWQuCisJKiBzcmMvcGZyL3BmcmRyaXZyLmMgKHBmcl9kcml2ZXJfY2xhc3MpOiBVcGRhdGVkLgorCisyMDAyLTA2LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIFJFQURNRSwgZG9jcy9DSEFOR0VTOiBQcmVwYXJpbmcgdGhlIDIuMS4yIHJlbGVhc2UuCisKKzIwMDItMDYtMTkgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBzcmMvYmFzZS9mdHR5cGUxLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTQyX1RZUEVTX0guCisJKHQxX2ZhY2VfY2hlY2tfY2FzdCk6IFJlbW92ZWQuCisJKEZUX0dldF9QU19Gb250X0luZm8pOiBNYWtlIGl0IHdvcmsgd2l0aCBDSUQgYW5kIFR5cGUgNDIgZHJpdmVycworCWFsc28uCisKKzIwMDItMDYtMTkgIFNlYmFzdGllbiBCQVJSRSAgPGh0dHA6Ly9iYXJyZS5ub20uZnIvY29udGFjdC5odG1sI2VtYWlsPgorCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMgKHQ0Ml9wYXJzZV9zZm50cyk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCisyMDAyLTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfVmVjdG9yX1RyYW5zZm9ybSk6IEZpeCBzZXJpb3VzIHR5cG8KKwkoeHkgPC0+IHl4KS4KKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBSZXBsYWNlIGB8JyB3aXRoCisJYHx8JyB0byBtYWtlIGNvZGUgZWFzaWVyIHRvIHJlYWQuCisKKzIwMDItMDYtMTggIFJvYmVydG8gQWxhbWVkYSAgPG9qYW5jYW5vQGdlZWttYWlsLmRlPi4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKHQ0Ml9jaGVja19zaXplX2NoYW5nZSk6IFJlbW92ZWQuCisJKFQ0Ml9TaXplX1NldENoYXJzLCBUNDJfU2l6ZV9TZXRQaXhlbHMpOiBVc2UgRlRfQWN0aXZhdGVfU2l6ZQorCWluc3RlYWQuCisJKFQ0Ml9HbHlwaFNsb3RfTG9hZCk6IFJlbW92ZSBjYWxsIHRvIHQ0Ml9jaGVja19zaXplX2NoYW5nZS4KKworMjAwMi0wNi0xOCAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wc2F1eC90MWNtYXAuYyAodDFfY21hcF9jdXN0b21fY2hhcl9pbmRleCwKKwl0MV9jbWFwX2N1c3RvbV9jaGFyX25leHQpOiBGaXggaW5kZXggY29tcHV0YXRpb24gLS0gaW5kaWNlcyBzdGFydAorCXdpdGggMCBhbmQgbm90IHdpdGggY21hcC0+Zmlyc3QuCisKKwlQcm92aWRlIGRlZmF1bHQgY2hhcm1hcHMuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCksIHNyYy9wY2YvcGNmZHJpdmVyLmMKKwkoUENGX0ZhY2VfSW5pdCksIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfZmFjZV9pbml0KSwKKwlzcmMvdHlwZTEvdDFvYmpzIChUMV9GYWNlX0luaXQpLCBzcmMvd2luZm9udHMvd2luZm50LmMKKwkoRk5UX0ZhY2VfSW5pdCk6IEltcGxlbWVudCBpdC4KKworMjAwMi0wNi0xNyAgU3ZlbiBOZXVtYW5uICA8c3ZlbkBnaW1wLm9yZz4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBGaXggdHlwby4KKworMjAwMi0wNi0xNiAgTGVvbmFyZCBSb3NlbnRob2wgIDxsZW9uYXJkckBsYXplcndhcmUuY29tPgorCisJVXBkYXRlZCBXaW4zMi9WQysrIHByb2plY3RzIHRvIGluY2x1ZGUgdGhlIG5ldyBQRlIgZHJpdmVyLgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFVwZGF0ZWQuCisKKzIwMDItMDYtMTYgIEFudGhvbnkgRm9rICA8Zm9rQGRlYmlhbi5vcmc+CisKKwlJbnN0YWxsIGZyZWV0eXBlMi5tNC4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCwgdW5pbnN0YWxsKTogSGFuZGxlIGl0LgorCisyMDAyLTA2LTE2ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCVNhbWUgZml4IGZvciBQRlIgZHJpdmVyLgorCisJKiBzcmMvcGZyL3BmcmNtYXAuYyAocGZyX2NtYXBfY2hhcl9pbmRleCwgcGZyX2NtYXBfY2hhcl9uZXh0KToKKwlJbmNyZWFzZSByZXR1cm4gdmFsdWUgYnkgMS4KKwkqIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfc2xvdF9sb2FkKTogRGVjcmVhc2UgaW5kZXggYnkgMS4KKworMjAwMi0wNi0xNSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwlGaXggZ2x5cGggaW5kaWNlcyB0byBtYWtlIGluZGV4IHplcm8gYWx3YXlzIHRoZSB1bmRlZmluZWQgZ2x5cGguCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoYmRmX2NtYXBfaW5pdCk6IERvbid0IGRlY3JlYXNlCisJY21hcC0+bnVtX2VuY29kaW5ncy4KKwkoYmRmX2NtYXBfY2hhcl9pbmRleCwgYmRmX2NtYXBfY2hhcl9uZXh0LCBCREZfR2V0X0NoYXJfSW5kZXgpOgorCUluY3JlYXNlIHJlc3VsdCBieSAxIGZvciBub3JtYWwgY2FzZXMuCisJKEJERl9HbHlwaF9Mb2FkKTogRGVjcmVhc2UgaW5kZXggYnkgMS4KKworCSogc3JjL3BjZi9wY2Zkcml2ZXIuYyAocGNmX2NtYXBfY2hhcl9pbmRleCwgcGNmX2NtYXBfY2hhcl9uZXh0LAorCVBDRl9DaGFyX0dldF9JbmRleCk6IEluY3JlYXNlIHJlc3VsdCBieSAxIGZvciBub3JtYWwgY2FzZXMuCisJKFBDRl9HbHlwaF9Mb2FkKTogRGVjcmVhc2UgaW5kZXggYnkgMS4KKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X2VuY29kaW5ncyk6IERvbid0IGRlY3JlYXNlIGogZm9yCisJYWxsb2NhdGluZyBgZW5jb2RpbmcnLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCwgRlRfR2V0X0dseXBoX05hbWUpOiBGaXgKKwlib3VuZGluZyB0ZXN0cy4KKworMjAwMi0wNi0xNCAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwlBZGQgbmV3IGNtYXAgc3VwcG9ydCB0byBCREYgZHJpdmVyLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9DTWFwUmVjKSBbRlRfQ09ORklHX09QVElPTl9VU0VfQ01BUFNdOgorCU5ldyBzdHJ1Y3R1cmUuCisJKGJkZl9jbWFwX2luaXQsIGJkZl9jbWFwX2RvbmUsIGJkZl9jbWFwX2NoYXJfaW5kZXgsCisJYmRmX2NtYXBfY2hhcl9uZXh0KSBbRlRfQ09ORklHX09QVElPTl9VU0VfQ01BUFNdOiBOZXcgZnVuY3Rpb25zLgorCShCREZfR2V0X0NoYXJfSW5kZXgpIFshRlRfQ09ORklHX09QVElPTl9VU0VfQ01BUFNdOiBVc2Ugb25seQorCWNvbmRpdGlvbmFsbHkuCisJKEJERl9GYWNlX0luaXQpOiBIYW5kbGUgYEFWRVJBR0VfV0lEVEgnIGFuZCBgUE9JTlRfU0laRScga2V5d29yZHMuCisJSW1wbGVtZW50IG5ldyBjbWFwIGhhbmRsaW5nLgorCShiZGZfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KKworMjAwMi0wNi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBNYWtlZmlsZSwgY29uZmlndXJlLCAqLyoubWssIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluLAorCWRvY3MvQ0hBTkdFUywgZG9jcy9JTlNUQUxMOiBzL1RPUC9UT1BfRElSLy4KKworMjAwMi0wNi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmRmL2JkZmxpYi5jOiBzL0ZUX1Nob3J0L3Nob3J0LyBmb3IgY29uc2lzdGVuY3kuCisKKzIwMDItMDYtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogYnVpbGRzL3dpbjMyL2Z0ZGVidWcuYzogQWRkZWQgYSBtaXNzaW5nICNlbmRpZi4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMsIHNyYy9iZGYvYmRmbGliLmM6IFJlbW92aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCisJUmVtb3ZlZCB0aGUgYnVnIGluIFR5cGUgNDIgZHJpdmVyIHRoYXQgcHJldmVudGVkIHVuLWhpbnRlZCBvdXRsaW5lcworCXRvIGJlIGxvYWRlZC4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQpOiBDYWxsIEZUX0RvbmVfU2l6ZS4KKwkoVDQyX1NpemVfSW5pdCk6IENhbGwgRlRfQWN0aXZhdGVfU2l6ZS4KKwkodDQyX2NoZWNrX3NpemVfY2hhbmdlKTogTmV3IGZ1bmN0aW9uLgorCShUNDJfU2l6ZV9TZXRDaGFycywgVDQyX1NpemVfU2V0UGl4ZWxzKTogVXNlIGl0LgorCShmdF9nbHlwaHNsb3RfY2xlYXIpOiBSZXBsYWNlIEZUX01FTV9TRVQgd2l0aCBGVF9aRVJPLgorCShUNDJfR2x5cGhTbG90X0xvYWQpOiBVc2UgdDQyX2NoZWNrX3NpemVfY2hhbmdlLgorCUluaXRpYWxpemUgbW9yZSBmaWVsZHMgb2YgYGdseXBoJy4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwOiBVcGRhdGVkLgorCisyMDAyLTA2LTA5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKworCSogVmVyc2lvbiAyLjEuMSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMjAwMi0wNi0wOCAgSnVsaXVzeiBDaHJvYm9jemVrICA8amNoQHBwcy5qdXNzaWV1LmZyPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLCBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jLAorCXNyYy9iYXNlL2Z0b2Jqcy5jLCBzcmMvc2ZudC90dGNtYXAwLmMsIHNyYy9zbW9vdGgvZnRncmF5cy5jOiBEb24ndAorCXVzZSBgc2V0am1wJywgYGxvbmdqbXAnLCBhbmQgYGptcF9idWYnIGJ1dCBgZnRfc2V0am1wJywgYGZ0X2xvbmdqbXAnLAorCWFuZCBgZnRfam1wX2J1ZicuCisJUmVtb3ZlZCBkaXJlY3QgcmVmZXJlbmNlcyB0byA8c3RkaW8uaD4gYW5kIDxzZXRqbXAuaD4gd2hlbgorCWFwcHJvcHJpYXRlLCB0byBldmVudHVhbGx5IHJlcGxhY2UgdGhlbSB3aXRoIGEKKwlGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ILiAgVXNlZnVsIGZvciB0aGUgWEZyZWU4NiBGb250IFNlcnZlcgorCWJhY2tlbmQgYmFzZWQgb24gRlQyLgorCisJKiBzcmMvYmFzZS9mdHR5cGUxLmMgKEZUX0hhc19QU19HbHlwaF9OYW1lcyk6IEZpeCByZXR1cm4gdmFsdWUuCisKKzIwMDItMDYtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BjZi9wY2Zkcml2ZXIuYyAocGNmX2NtYXBfY2hhcl9uZXh0KTogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQKKwl0aGUgZnVuY3Rpb24gdG8gcmV0dXJuIGludmFsaWQgdmFsdWVzLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuaTogUmVtb3ZpbmcgYSB0eXBvIHRoYXQgcHJldmVudGVkCisJdGhlIHNvdXJjZSdzIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfaGFzaF91bmxpbmspOiBGaXhlZCBhCisJYnVnIHRoYXQgY2F1c2VkIG5hc3R5IG1lbW9yeSBvdmVyd3JpdGVzLiAgVGhlIGhhc2ggdGFibGUncworCWJ1Y2tldHMgYXJyYXkgd2Fzbid0IGNvcnJlY3RseSByZXNpemVkIHdoZW4gc2hydW5rLgorCisyMDAyLTA2LTA4ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL3NtYWtlZmlsZSwgYnVpbGRzL2FtaWdhL21ha2VmaWxlOiBVcGRhdGVkLgorCisyMDAyLTA2LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfbm9kZV9oYXNoX3VubGluaywgZnRjX25vZGVfaGFzaF9saW5rKQorCVtGVENfQ0FDSEVfVVNFX0xJTkVBUl9IQVNISU5HXTogRml4IHJldHVybmVkIGVycm9yIGNvZGUuCisJRml4IGRlYnVnZ2luZyBtZXNzYWdlcy4KKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5pIChHRU5fQ0FDSEVfTE9PS1VQKTogTW92ZSBkZWNsYXJhdGlvbiBvZgorCWBmYW1pbHknIGFuZCBgaGFzaCcgdXAgdG8gbWFrZSBpdCBjb21waWxhYmxlIHdpdGggZysrLgorCisJKiBzcmMvdHlwZTQyL3Q0MmVycm9yLmg6IE5ldyBmaWxlLgorCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jLCBzcmMvdHlwZTQyL3Q0Mm9ianMuYywKKwlzcmMvdHlwZTQyL3Q0MnBhcnNlLmM6IFVzZSB0NDIgZXJyb3IgY29kZXMuCisJKiBzcmMvdHlwZTQyL3J1bGVzLm1rOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdG5hbWVzLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0guCisKKzIwMDItMDYtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYzogR0VOX0NBQ0hFX0ZBTUlMWV9DT01QQVJFLAorCUdFTl9DQUNIRV9OT0RFX0NPTVBBUkUsIEdFTl9DQUNIRV9MT09LVVApIFtGVENfQ0FDSEVfVVNFX0lOTElORV06CisJTmV3IG1hY3Jvcy4KKwkoZnRjX2NtYXBfY2FjaGVfbG9va3VwKSBbIUZUQ19DQUNIRV9VU0VfSU5MSU5FXTogVHlwZWRlZiB0bworCWZ0Y19jYWNoZV9sb29rdXAuCisJKEZUQ19DTWFwQ2FjaGVfTG9va3VwKTogVXBkYXRlZC4KKworCUFkZGluZyB2YXJpb3VzIGV4cGVyaW1lbnRhbCBvcHRpbWl6YXRpb25zIHRvIHRoZSBjYWNoZSBtYW5hZ2VyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DQUNIRV9VU0VfSU5MSU5FLAorCUZUQ19DQUNIRV9VU0VfTElORUFSX0hBU0hJTkcpOiBOZXcgb3B0aW9ucy4KKwkoRlRDX0NhY2hlUmVjKSBbRlRDX0NBQ0hFX1VTRV9MSU5FQVJfSEFTSElOR106IE5ldyBlbGVtZW50cyBgcCcsCisJYG1hc2snLCBhbmQgYHNsYWNrJy4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKEZUQ19IQVNIX01BWF9MT0FELCBGVENfSEFTSF9NSU5fTE9BRCwKKwlGVENfSEFTSF9TVUJfTE9BRCkgW0ZUQ19DQUNIRV9VU0VfTElORUFSX0hBU0hJTkcsCisJRlRDX0hBU0hfSU5JVElBTF9TSVpFXTogTmV3IG1hY3Jvcy4KKwkoZnRjX25vZGVfbXJ1X2xpbmssIGZ0Y19ub2RlX21ydV91cCk6IE9wdGltaXplZC4KKwkoZnRjX25vZGVfaGFzaF91bmxpbmssIGZ0Y19ub2RlX2hhc2hfbGluaykKKwlbRlRDX0NBQ0hFX1VTRV9MSU5FQVJfSEFTSElOR106IE5ldyB2YXJpYW50cy4KKwkoRlRDX1BSSU1FU19NSU4sIEZUQ19QUklNRVNfTUFYLCBmdGNfcHJpbWVzLCBmdGNfcHJpbWVfY2xvc2VzdCwKKwlGVENfQ0FDSEVfUkVTSVpFX1RFU1QsIGZ0Y19jYWNoZV9yZXNpemUpCisJWyFGVENfQ0FDSEVfVVNFX0xJTkVBUl9IQVNISU5HXTogRGVmaW5lIGl0IGNvbmRpdGlvbmFsbHkuCisJKGZ0Y19jYWNoZV9pbml0LCBmdGNfY2FjaGVfY2xlYXIpIFtGVENfQ0FDSEVfVVNFX0xJTkVBUl9IQVNISU5HXToKKwlVcGRhdGVkLgorCShmdGNfY2FjaGVfbG9va3VwKSBbRlRDX0NBQ0hFX1VTRV9MSU5FQVJfSEFTSElOR106IEltcGxlbWVudCBpdC4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmk6IE5ldyBmaWxlLgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoR0VOX0NBQ0hFX0ZBTUlMWV9DT01QQVJFLAorCUdFTl9DQUNIRV9OT0RFX0NPTVBBUkUsIEdFTl9DQUNIRV9MT09LVVApIFtGVENfQ0FDSEVfVVNFX0lOTElORV06CisJTmV3IG1hY3Jvcy4KKwkoZnRjX3NiaXRfY2FjaGVfbG9va3VwKSBbIUZUQ19DQUNIRV9VU0VfSU5MSU5FXTogVHlwZWRlZiB0bworCWZ0Y19jYWNoZV9sb29rdXAuCisJKEZUQ19TQml0Q2FjaGVfTG9va3VwKTogVXBkYXRlZC4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jOiBSZW1vdmluZyBkdXBsaWNhdGUgZnVuY3Rpb24uCisKKzIwMDItMDYtMDcgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCk6IENoYW5nZWQgZGVmaW5pdGlvbgorCWZyb20gRlRfRVhQT1JUX0RFRiB0byBGVF9CQVNFX0RFRi4KKworMjAwMi0wNi0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4ZWQgdGhlIGJ1ZyB0aGF0IHByZXZlbnRlZCB0aGUgY29ycmVjdCBkaXNwbGF5IG9mIGZvbnRzIHdpdGgKKwlgZnR2aWV3Jy4KKworCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jOiBTcGxpdCBpbnRvLi4uCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZyLmgsIHNyYy90eXBlNDIvdDQycGFyc2UuYywKKwlzcmMvdHlwZTQyL3Q0MnBhcnNlLmgsIHNyYy90eXBlNDIvdDQyb2Jqcy5oLCBzcmMvdHlwZTQyL3Q0Mm9ianMuYywKKwlzcmMvdHlwZTQyL3R5cGU0Mi5jOiBOZXcgZmlsZXMuCisKKwkodDQyX2dldF9nbHlwaF9uYW1lLCB0NDJfZ2V0X3BzX25hbWUsIHQ0Ml9nZXRfbmFtZV9pbmRleCk6IFVzZQorCWBmYWNlLT50eXBlMScuCisKKwkoR2V0X0ludGVyZmFjZSk6IFJlbmFtZWQgdG8uLi4KKwkoVDQyX0dldF9JbnRlcmZhY2UpOiBUaGlzLgorCVVwZGF0ZWQuCisJKFQ0Ml9PcGVuX0ZhY2UsIFQ0Ml9GYWNlX0RvbmUpOiBVcGRhdGVkLgorCShUNDJfRmFjZV9Jbml0KTogQWRkIG5ldyBjbWFwIHN1cHBvcnQuCisJVXBkYXRlZC4KKwkoVDQyX0RyaXZlcl9Jbml0LCBUNDJfRHJpdmVyX0RvbmUsIFQ0Ml9TaXplX0luaXQsIFQ0Ml9TaXplX0RvbmUsCisJVDQyX0dseXBoU2xvdF9Jbml0LCBUNDJfR2x5cGhTbG90X0RvbmUpOiBVcGRhdGVkLgorCShHZXRfQ2hhcl9JbmRleCwgR2V0X05leHRfQ2hhcik6IFJlbmFtZWQgdG8uLi4KKwkoVDQyX0NNYXBfQ2hhckluZGV4LCBUNDJfQ01hcF9DaGFyTmV4dCk6IFRoaXMuCisJVXBkYXRlZC4KKwkoVDQyX0NoYXJfU2l6ZSwgVDQyX1BpeGVsX1NpemUpOiBSZW5hbWVkIHRvLi4uCisJKFQ0Ml9TaXplX1NldENoYXJzLCBUNDJfU2l6ZV9TZXRQaXhlbHMpOiBUaGlzLgorCShUNDJfTG9hZF9HbHlwaCk6IFJlbmFtZWQgdG8uLi4KKwkoVDQyX0dseXBoU2xvdF9Mb2FkKTogVGhpcy4KKworCSh0NDJfaW5pdF9sb2FkZXIsIHQ0Ml9kb25lX2xvYWRlcik6IFJlbmFtZWQgdG8uLi4KKwkodDQyX2xvYWRlcl9pbml0LCB0NDJfbG9hZGVyX2RvbmUpOiBUaGlzLgorCShUNDJfTmV3X1BhcnNlciwgVDQyX0ZpbmFsaXplX1BhcnNlcik6IFJlbmFtZWQgdG8uLi4KKwkodDQyX3BhcnNlcl9pbml0LCB0NDJfcGFyc2VyX2RvbmUpOiBUaGlzLgorCShwYXJzZV9kaWN0KTogUmVuYW1lZCB0by4uLgorCSh0NDJfcGFyc2VfZGljdCk6IFRoaXMuCisJKGlzX2FscGhhLCBpc19zcGFjZSwgaGV4dmFsKTogUmVuYW1lZCB0by4uLgorCSh0NDJfaXNfYWxwaGEsIHQ0Ml9pc19zcGFjZSwgdDQyX2hleHZhbCk6IFRoaXMuCisJKHBhcnNlX2ZvbnRfbmFtZSwgcGFyc2VfZm9udF9iYm94LCBwYXJzZV9mb250X21hdHJpeCwKKwlwYXJzZV9lbmNvZGluZywgcGFyc2Vfc2ZudHMsIHBhcnNlX2NoYXJzdHJpbmdzLCBwYXJzZV9kaWN0KToKKwlSZW5hbWVkIHRvLi4uCisJKHQ0Ml9wYXJzZV9mb250X25hbWUsIHQ0Ml9wYXJzZV9mb250X2Jib3gsIHQ0Ml9wYXJzZV9mb250X21hdHJpeCwKKwl0NDJfcGFyc2VfZW5jb2RpbmcsIHQ0Ml9wYXJzZV9zZm50cywgdDQyX3BhcnNlX2NoYXJzdHJpbmdzLAorCXQ0Ml9wYXJzZV9kaWN0KTogVGhpcy4KKwlVcGRhdGVkLgorCisJKHQ0Ml9rZXl3b3Jkcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy90eXBlNDIvSmFtZmlsZSwgc3JjL3R5cGU0Mi9kZXNjcmlwLm1tczogVXBkYXRlZC4KKworMjAwMi0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIDhicHAgc3VwcG9ydCB0byBCREYgZHJpdmVyLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3BhcnNlX3N0YXJ0KTogSGFuZGxlIDhicHAuCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKTogRGl0dG8uCisJKiBzcmMvYmRmL1JFQURNRTogVXBkYXRlZC4KKworMjAwMi0wNi0wMiAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9wZnIvcGZybG9hZC5jIChwZnJfcGh5X2ZvbnRfZG9uZSk6IEZyZWUgYGJsdWVfdmFsdWVzJyBhcnJheS4KKworMjAwMi0wNS0yOSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcmVhZHN0cmVhbSk6IEFsbG9jYXRlIGBidWYnIGR5bmFtaWNhbGx5LgorCShfYmRmX3BhcnNlX2dseXBocyk6IFVzZSBjb3JyZWN0IHNpemUgZm9yIGFsbG9jYXRpbmcKKwlgZm9udC0+dW5lbmNvZGVkJy4KKwkoYmRmX2xvYWRfZm9udCk6IEZyZWUgYXJyYXkgY29uZGl0aW9uYWxseS4KKwlSZXR1cm4gcHJvcGVyIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogTWFrZSBpdCBtb3JlIHJvYnVzdCBhZ2FpbnN0CisJdW51c3VhbCBmb250cy4KKworMjAwMi0wNS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmRmL2Rlc2NyaXAubW1zLCBzcmMvdHlwZTQyL2Rlc2NyaXAubW1zOiBOZXcgZmlsZXMuCisJKiBkZXNjcmlwLm1tcyAoYWxsKTogVXBkYXRlZC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9nbHlwaHMpOiBGaXggdHlwbyB3aGljaCBwcmV2ZW50ZWQKKwljb21waWxhdGlvbi4KKwkqIHNyYy9wc2hnbG9iLmMgKHBzaF9ibHVlc19zY2FsZV96b25lcyk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCisyMDAyLTA1LTI4ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL21ha2VmaWxlLCBidWlsZHMvYW1pZ2Evc21ha2VmaWxlLAorCWFtaWdhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IFVwZGF0ZWQgdG8gaW5jbHVkZQorCXN1cHBvcnQgZm9yIEJERiBhbmQgVHlwZTQyIGRyaXZlcnMuCisKKwkqIGRvY3MvbW9kdWxlcy50eHQ6IFVwZGF0ZWQuCisKKzIwMDUtMDUtMjggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGluZyBmaWxlIGZvciBuZXh0IHJlbGVhc2UgKDIuMS4xKS4KKworCSogc3JjL2JkZi9iZGZsaWIuYzogUmVtb3ZpbmcgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnR4Zjg2LmgsIHNyYy9iYXNlL2Z0eGY4Ni5jOiBOZXcgZmlsZXMuCisJVGhleSBwcm92aWRlIGEgbmV3IEFQSSAoRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCkgdG8gcmV0cmlldmUgYW4KKwlYMTEtY29tcGF0aWJsZSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZm9udCBmb3JtYXQgb2YgYSBnaXZlbiBmYWNlLgorCVRoaXMgd2FzIHB1dCBpbiBhIG5ldyBvcHRpb25hbCBiYXNlIHNvdXJjZSBmaWxlLCBjb3JyZXNwb25kaW5nIHRvIGEKKwluZXcgcHVibGljIGhlYWRlciAobmFtZWQgRlRfWEZSRUU4Nl9IIHNpbmNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkCisJb25seSBiZSB1c2VkIHdpdGhpbiB0aGUgWEZyZWU4NiBmb250IHNlcnZlciBJTU8pLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9YRlJFRTg2X0gpOiBOZXcgbWFjcm8gKG5vdAorCWRvY3VtZW50ZWQgeWV0KS4KKworCSogc3JjL2Jhc2UvZnR0eXBlMS5jOiBOZXcgZmlsZSwgcHJvdmlkaW5nIHR3byBuZXcgQVBJIGZ1bmN0aW9ucworCShGVF9HZXRfUFNfRm9udF9JbmZvIGFuZCBGVF9IYXNfUFNfR2x5cGhfTmFtZXMpLgorCSogaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9KYW1maWxlLCBzcmMvYmFzZS9ydWxlcy5taywgc3JjL2Jhc2UvZGVzY3JpcC5tbXM6CisJVXBkYXRpbmcgYnVpbGQgY29udHJvbCBmaWxlcyBmb3IgdGhlIG5ldyBmaWxlcyBgZnR4Zjg2LmMnIGFuZAorCWBmdHR5cGUxLmMnIGluIHNyYy9iYXNlLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfYmx1ZXNfc2NhbGVfem9uZXMpOiBGaXhlZCBhIGJ1ZyB0aGF0CisJcHJldmVudGVkIGZhbWlseSBibHVlIHpvbmVzIHN1YnN0aXR1dGlvbiBmcm9tIGhhcGVubmluZyBjb3JyZWN0bHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaCBGVF9HZXRfQkRGX0NoYXJzZXRfSUQpOiBBZGRpbmcKKwlkb2N1bWVudGF0aW9uIGNvbW1lbnQuCisKKzIwMDItMDUtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRuYW1lcy5jIChGVF9HZXRfU2ZudF9OYW1lKTogRG9uJ3QgdXNlIEZUX1NUUkVBTV9SRUFEX0FUCisJYnV0IEZUX1NUUkVBTV9SRUFELgorCURlY2xhcmUgYHN0cmVhbScgdmFyaWFibGUuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKTogUmVwbGFjZSBmbG9hdGluZyBwb2ludCBtYXRoCisJd2l0aCBjYWxscyB0byBgRlRfTXVsRGl2Jy4KKworMjAwMi0wNS0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4aW5nIHRoZSBTRk5UIG5hbWUgdGFibGUgbG9hZGVyIHRvIHN1cHBvcnQgdmFyaW91cyBidWdneSBmb250cy4KKwlJdCBub3cgaWdub3JlcyBlbXB0eSBuYW1lIGVudHJpZXMsIGVudHJpZXMgd2l0aCBpbnZhbGlkIHBvaW50ZXIKKwlPZmZzZXRzIGFuZCBjZXJ0YWluIGZvbnRzIGNvbnRhaW5pbmcgdGFibGVzIHdpdGggYnJva2VuCisJYHN0b3JhZ2VPZmZzZXQnIGZpZWxkcy4KKworCU5hbWUgc3RyaW5ncyBhcmUgbm93IGxvYWRlZCBvbiBkZW1hbmQsIHdoaWNoIHJlZHVjZXMgdGhlIG1lbW9yeQorCXJlcXVpcmVtZW50cyBmb3IgYSBnaXZlbiBGVF9GYWNlIHRyZW1lbmRvdXNseSAoZm9yIGV4YW1wbGUsIHRoZSBuYW1lCisJdGFibGUgb2YgQXJpYWwudHRmIGlzIGFib3V0IDEwS2IgYW5kIGNvbnRhaW5zIDcwIG5hbWVzKS4KKworCVRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4LiAgVGhlIHdob2xlIG5hbWUgdGFibGUgbG9hZGVyIGFuZCBpbnRlcmZhY2UKKwl3aWxsIGJlIHJld3JpdHRlbiBpbiBhIG11Y2ggbW9yZSBjbGVhbmx5IHdheSBzaG9ydGx5LCBvbmNlIENTRUggaGF2ZQorCWJlZW4gaW50cm9kdWNlZCBpbiB0aGUgc291cmNlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX05hbWVFbnRyeVJlYyk6IENoYW5nZQorCXR5cGUgb2YgYHN0cmluZ09mZnNldCcgdG8gRlRfVUxvbmcuCisJKFRUX05hbWVUYWJsZVJlYyk6IENoYW5nZSB0eXBlIG9mIGBudW1OYW1lUmVjb3JkcycgYW5kCisJYHN0b3JhZ2VPZmZzZXQnIHRvIEZUX1VJbnQuCisJUmVwbGFjZSBgc3RvcmFnZScgd2l0aCBgc3RyZWFtJy4KKwkqIHNyYy9iYXNlL2Z0bmFtZXMuYyAoRlRfR2V0X1NmbnRfTmFtZSk6IExvYWQgbmFtZSBvbiBkZW1hbmQuCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChnZXRfc2ZudF9wb3N0c2NyaXB0X25hbWUpOiBEaXR0by4KKwlNYWtlIGNvZGUgbW9yZSByb2J1c3QuCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoVFRfTmFtZUVudHJ5X0NvbnZlcnRGdW5jKTogTmV3IHR5cGVkZWYuCisJKHR0X2ZhY2VfZ2V0X25hbWUpOiBVc2UgaXQuCisJTWFrZSBjb2RlIG1vcmUgcm9idXN0LgorCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfTmFtZXMpOiBVc2UgYHN0YXRpYycgZm9yIGFycmF5cy4KKwlIYW5kbGUgaW52YWxpZCBgc3RvcmFnZU9mZnNldCcgZGF0YSBiZXR0ZXIuCisJU2V0IGxlbmd0aCBmaWVsZHMgdG8gemVybyBmb3IgaW52YWxpZCBvciBpZ25vcmVkIGRhdGEuCisJUmVtb3ZlIGNvZGUgd2l0aGluIEZUX0RFQlVHX0xFVkVMX1RSQUNFLgorCShUVF9GcmVlX05hbWVzKTogVXBkYXRlZC4KKworMjAwMi0wNS0yNCAgVGltIE1vb25leSAgPGVuY2hhbnRlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGJ1aWxkcy91bml4L2Z0LW11bm1hcC5tNDogTmV3IGZpbGUsIGV4dHJhY3RlZCBGVF9NVU5NQVBfREVDTCBhbmQKKwlGVF9NVU5NQVBfUEFSQU0gZnJvbSBhY2xvY2FsLm00IGludG8gaGVyZSwgc28gYWNsb2NhbC5tNCBjYW4gYmUKKwlyZWJ1aWx0IGZyb20gc291cmNlcy4gIFNldCBtYWNybyBzZXJpYWwgdG8gMSwgYW5kIHVzZSB0aGlyZCBhcmd1bWVudAorCXRvIEFDX0RFRklORSBmb3Igb3VyIHR3byBjdXN0b20gc3ltYm9scywgc28gZnRjb25maWcuaW4gY291bGQgb25lIGRheQorCWJlIHJlYnVpbHQgd2l0aCBhdXRvaGVhZGVyIChub3QgcmVjb21tZW5kZWQgbm93LCBmdGNvbmZpZy5pbiBpcyBhCisJY3VzdG9tIHNvdXJjZSBmaWxlKQorCisyMDAyLTA1LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0JFWklFUl9IKTogUmVtb3ZlZC4KKwkoRlRfQkRGX0gpOiBOZXcgbWFjcm8gZm9yIGFjY2Vzc2luZyBgZnRiZGYuaCcuCisKKwkqIHNyYy90eXBlNDIvdDQyZHJpdnIuYyAoaGV4dmFsKTogRml4IHR5cG8uCisKKzIwMDItMDUtMjEgIE1hcnRpbiBNdXNrZW5zICA8bW11c2tlbnNAYXVyZWxvbi5jb20+CisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoVDFSYWRpeCk6IE5ldyBmdW5jdGlvbi4KKwkodDFfdG9pbnQpOiBVc2UgaXQgdG8gaGFuZGxlIG51bWJlcnMgaW4gcmFkaXggZm9ybWF0LgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyc3RyaW5ncyk6IEFkZCBkdW1teQorCWZvciB1bmRvY3VtZW50ZWQsIG9ic29sZXRlIG9wY29kZSAxNS4KKworMjAwMi0wNS0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmRmL2JkZmxpYi5jOiBSZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmcsIGFuZCBjaGFuZ2VkIGFsbCB0YWJsZXMKKwl0byB0aGUgYHN0YXRpYyBjb25zdCcgc3RvcmFnZSBzcGVjaWZpZXIgKGluc3RlYWQgb2Ygc2ltcGx5CisJYHN0YXRpYycpLgorCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZyLmMgKGhleHZhbCk6IFVzZSBtb3JlIGVmZmljaWVudCBjb2RlLgorCVJlbW92aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCSogc3JjL2JkZi9iZGZkcml2ci5jOiBSZW1vdmluZyBjb21waWxlciB3YXJuaW5ncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGJkZi5oLCBzcmMvYmFzZS9mdGJkZi5jLAorCXNyYy9iYXNlL2Rlc2NyaXAubW1zLCBzcmMvYmFzZS9KYW1maWxlLCBzcmMvYmFzZS9ydWxlcy5taworCShGVF9HZXRfQkRGX0NoYXJzZXRfSUQpOiBOZXcgQVBJIHRvIHJldHJpZXZlIEJERi1zcGVjaWZpYyBzdHJpbmdzCisJZnJvbSBhIGZhY2UuICBUaGlzIGlzIG11Y2ggY2xlYW5lciB0aGFuIGFjY2Vzc2luZyB0aGUgaW50ZXJuYWwgdHlwZXMKKwlgQkRGX1B1YmxpY19GYWNlJyBkZWZpbmVkIGluIEZUX0lOVEVSTkFMX0JERl9UWVBFU19ILgorCisyMDAyLTA1LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iZGYvUkVBRE1FOiBNZW50aW9uIE1pY3Jvc29mdCdzIFNCSVQgdG9vbC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2lkL2NpZHJpdmVyLmMsIHNyYy9wY2YvcGNmZHJpdmVyLmMsCisJc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMsIHNyYy90eXBlMS90MWRyaXZlci5jLAorCXNyYy93aW5mb250cy93aW5mbnQuYywgc3JjL3R5cGU0Mi90NDJkcml2ci5jLCBzcmMvYmRmL2JkZmRyaXZyLmMKKwlbRlRfQ09ORklHX09QVElPTl9EWU5BTUlDX0RSSVZFUlNdOiBDb21wbGV0ZWx5IHJlbW92ZWQuICBJdCBoYXMKKwliZWVuIG5ldmVyIHVzZWQuCisKKzIwMDItMDUtMjEgIFJvYmVydG8gQWxhbWVkYSAgPG9qYW5jYW5vQGdlZWttYWlsLmRlPi4KKworCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jOiBzL1Q0Ml9FTkNPRElOR19UWVBFXy9UMV9FTkNPRElOR19UWVBFXy8uCisJKHBhcnNlX2ZvbnRfbWF0cml4KTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNvZGUuCisJKHBhcnNlX3NmbnRzKTogSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcy4KKwkodDQyX2RyaXZlcl9jbGFzcykgW1RUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVJdOiBVc2UKKwlmdF9tb2R1bGVfZHJpdmVyX2hhc19oaW50ZXIgY29uZGl0aW9uYWxseS4KKwlNb3ZlZCBzb21lIHR5cGUgNDIgc3BlY2lmaWMgc3RydWN0dXJlIGRlZmluaXRpb25zIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3Q0MnR5cGVzLmg6IE5ldyBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9UNDJfVFlQRVNfSCk6CisJTmV3IG1hY3JvLgorCisyMDAyLTA1LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjc2JpdHMuaCAoRlRDX1NCaXQpOiBBZGRlZCBhIG5ldyBmaWVsZAorCWBudW1fZ3JheXMnIGZvciBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBncmF5IGxldmVscy4KKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5jIChmdGNfc2JpdF9ub2RlX2xvYWQpOiBJbml0aWFsaXplIGl0LgorCisyMDAyLTA1LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGRpbmcgYSBkcml2ZXIgZm9yIEJERiBmb250cyB3cml0dGVuIGJ5IEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCTxGcmFuY2VzY28uWmFwcGEuTmFyZGVsbGlAZW5zLmZyPi4gIEhlYXZpbHkgbW9kaWZpZWQgYnkgbWUgdG8KKwliZXR0ZXIgYWRhcHQgaXQgdG8gRnJlZVR5cGUsIHJlbW92aW5nIHVubmVlZGVkIHN0dWZmLiAgQWRkaXRpb25hbGx5LAorCWl0IG5vdyBzdXBwb3J0cyBNYXJrIExlaXNoZXIncyBCREYgZXh0ZW5zaW9uIGZvciBhbnRpLWFsaWFzZWQKKwliaXRtYXAgZ2x5cGhzIHdpdGggMiBhbmQgNCBicHAuCisKKwkqIHNyYy9iZGYvKjogTmV3IGRyaXZlci4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYmRmdHlwZXMuaDogTmV3IGZpbGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkZWQgQkRGIGRyaXZlciBjb21wb25lbnRzLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oOiBBZGRlZCBlcnJvciBjb2RlcyBmb3IgQkRGIGRyaXZlci4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgsIHNyYy9KYW1maWxlOiBVcGRhdGVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9CREZfVFlQRVNfSCk6CisJTmV3IG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oIChmdF9zcHJpbnRmKTogTmV3IGFsaWFzIGZvcgorCXNwcmludGYuCisKKzIwMDItMDUtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IEFkZGVkIFR5cGUgNDIgZHJpdmVyCisJY29tcG9uZW50LgorCSogc3JjL3R5cGU0Mi90NDJkcml2ci5jOiBVc2UgaXQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaCAoRlRfSU5URVJOQUxfUENGX1RZUEVTX0gpOgorCU5ldyBtYWNyby4KKworMjAwMi0wNS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTQyL0phbWZpbGU6IE5ldyBmaWxlLgorCisyMDAyLTA1LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGRpbmcgYSBkcml2ZXIgZm9yIFR5cGU0MiBmb250cyB3cml0dGVuIGJ5IFJvYmVydG8gQWxhbWVkYQorCTxvamFuY2Fub0BnZWVrbWFpbC5kZT4uCisKKwkqIHNyYy90eXBlNDIvKjogTmV3IGRyaXZlci4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgsIHNyYy9KYW1maWxlOiBVcGRhdGVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfeGRpZ2l0LCBmdF9tZW1jbXAsCisJZnRfYXRvaSk6IE5ldyBhbGlhc2VzIGZvciB4ZGlnaXQsIG1lbWNtcCwgYW5kIGF0b2ksIHJlc3BlY3RpdmVseS4KKworMjAwMi0wNS0xMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChUVF9Mb29rVXBfVGFibGUpOiBQcm90ZWN0IGFnYWluc3QgdGFibGVzCisJd2l0aCBhIHplcm8gbGVuZ3RoIHZhbHVlLgorCisyMDAyLTA1LTEyICBNaWNoYWVsIFBmZWlmZmVyICA8bWljaGFlbC5wZmVpZmZlckB1dGFuZXQuYXQ+CisKKwkqIGJ1aWxkcy9iZW9zL2Jlb3MubWs6IEluY2x1ZGUgYGxpbmstc3RkLm1rJy4KKworMjAwMi0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmggKFQxX0xvYWRlcik6IFJlbmFtZWQgdG8uLi4KKwkoVDFfTG9hZGVyUmVjKTogVGhpcy4KKwkoVDFfTG9hZGVyKTogTm93IHBvaW50ZXIgdG8gVDFfTG9hZGVyUmVjLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCwgc3JjL3R5cGUxL3QxbG9hZC5jLAorCXNyYy90eXBlMS90MW9ianMuYzoKKwlzL1QxX0VOQ09ESU5HX1RZUEVfRVhQT1JUL1QxX0VOQ09ESU5HX1RZUEVfRVhQRVJULy4KKworMjAwMi0wNS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBSRUFETUU6IEFkZCBhIG5vdGUgcmVnYXJkaW5nIGxpYnR0ZiB2cy4gbGliZnJlZXR5cGUuCisKKzIwMDItMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZyZWVUeXBlIDIgY2FuIG5vdyBiZSBidWlsdCBpbiBhbiBleHRlcm5hbCBkaXJlY3Rvcnkgd2l0aCB0aGUKKwljb25maWd1cmUgc2NyaXB0IGFsc28uCisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoSU5DTFVERVMpOiBBZGQgYE9CSl9ESVInLgorCisJKiBidWlsZHMvdW5peC9kZXRlY3QubWsgKGhhdmVfbWspOiBOZXcgdmFyaWFibGUgdG8gdGVzdCBmb3IKKwlleHRlcm5hbCBidWlsZC4KKwkodW5peC1kZWYubWspOiBEZWZpbmVkIGFjY29yZGluZyB0byB2YWx1ZSBvZiBgaGF2ZV9taycuCisJKiBidWlsZHMvdW5peC91bml4Lm1rIChoYXZlX21rKTogTmV3IHZhcmlhYmxlIHRvIHRlc3QgZm9yCisJZXh0ZXJuYWwgYnVpbGQuCisJU2VsZWN0IGluY2x1ZGUgcGF0aHMgZm9yIHVuaXgtZGVmLm1rIGFuZCB1bml4LWNjLm1rIGFjY29yZGluZworCXRvIHZhbHVlIG9mIGBoYXZlX21rJy4KKwkqIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChPQkpfQlVJTEQpOiBOZXcgdmFyaWFibGUuCisJKERJU1RDTEVBTik6IFVzZSBpdC4KKwkqIGJ1aWxkcy91bml4L3VuaXgtY2MuaW4gKExJQlRPT0wpOiBEZWZpbmUgZGVmYXVsdCB2YWx1ZSBvbmx5CisJaWYgbm90IHlldCBkZWZpbmVkLgorCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IFVzZSBgT0JKX0JVSUxEJyBmb3IgaW5zdGFsbGluZworCWZyZWV0eXBlLWNvbmZpZy4KKworCSogY29uZmlndXJlOiBEb24ndCBkZXBlbmQgb24gYmFzaCBmZWF0dXJlcy4KKwkoZnQyX2RpciwgYWJzX2N1cnJfZGlyLCBhYnNfZnQyX2Rpcik6IE5ldyB2YXJpYWJsZXMgKGNvZGUKKwlwYXJ0aWFsbHkgdGFrZW4gZnJvbSBBdXRvY29uZikuCisJQnVpbGQgYSBkdW1teSBNYWtlZmlsZSBpZiBub3QgYnVpbGRpbmcgaW4gc291cmNlIHRyZWUuCisKKwkqIGRvY3MvSU5TVEFMTDogRG9jdW1lbnQgaXQuCisKKzIwMDItMDUtMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IEZpbmFsbHkgZml4aW5nIHRoZSBsYXN0CisJYnVnIHRoYXQgcHJldmVudGVkIEZyZWVUeXBlIDIueCBhbmQgRnJlZVR5cGUgMS54IHRvIHByb2R1Y2UKKwliaXQtYnktYml0IGlkZW50aWNhbCBtb25vY2hyb21lIGdseXBoIGJpdG1hcHMgd2l0aCBuYXRpdmUgVHJ1ZVR5cGUKKwloaW50aW5nLiAgVGhlIGN1bHByaXQgd2FzIGEgc2luZ2xlLWJpdCBmbGFnIHRoYXQgd2Fzbid0IHNldAorCWNvcnJlY3RseSBieSB0aGUgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsYXlvdXQuaCwgc3JjL290bGF5b3V0L290bGJhc2UuYywKKwlzcmMvb3RsYXlvdXQvb3RsYmFzZS5oLCBzcmMvb3RsYXlvdXQvb3RsY29uZi5oLAorCXNyYy9vdGxheW91dC9vdGxnZGVmLmMsIHNyYy9vdGxheW91dC9vdGxnZGVmLmgsCisJc3JjL290bGF5b3V0L290bGdwb3MuYywgc3JjL290bGF5b3V0L290bGdwb3MuaCwKKwlzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5jLCBzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5oLAorCXNyYy9vdGxheW91dC9vdGxqc3RmLmMsIHNyYy9vdGxheW91dC9vdGxqc3RmLmgsCisJc3JjL290bGF5b3V0L290bHRhYmxlLmMsIHNyYy9vdGxheW91dC9vdGx0YWJsZS5oLAorCXNyYy9vdGxheW91dC9vdGx0YWdzLmg6IE5ldyBPcGVuVHlwZSBMYXlvdXQgc291cmNlIGZpbGVzLiAgVGhlCisJbW9kdWxlIGlzIHN0aWxsIGluY29tcGxldGUuCisKKzIwMDItMDUtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRjbWFwMC5jICh0dF9jbWFwNF9jaGFyX2luZGV4KTogRml4IHNlcmlvdXMgdHlwbworCSgweEZGRlUgLT4gMHhGRkZGVSkuCisKKzIwMDItMDUtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9JTlNUQUxMOiBGaXggVVJMIG9mIG1ha2VwcC4KKworMjAwMi0wNS0wMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAodHRfZmFjZV9nZXRfbmFtZSk6IEZpeGluZyBhIGJ1ZyB0aGF0IGNhdXNlZAorCUZyZWVUeXBlIHRvIGNyYXNoIHdoZW4gY2VydGFpbiBicm9rZW4gZm9udHMgKGUuZy4gYGh5YTZnYi50dGYnKQorCXdlcmUgb3BlbmVkLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9OYW1lcyk6IEFwcGxpZWQgYSBzbWFsbCB3b3JrLWFyb3VuZCB0bworCW1hbmFnZSBmb250cyBjb250YWluaW5nIGEgYnJva2VuIG5hbWUgdGFibGUgKGUuZy4gYGh5YTZnYi50dGYnKS4KKworCSogc3JjL3NmbnQvdHRjbWFwMC5jICh0dF9jbWFwNF92YWxpZGF0ZSk6IEZpeGVkIG92ZXItcmVzdHJpY3RpdmUKKwl2YWxpZGF0aW9uIHRlc3QuICBUaGUgY2hhcm1hcCB2YWxpZGF0b3Igbm93IGFjY2VwdHMgb3ZlcmxhcHBpbmcKKwlyYW5nZXMgaW4gZm9ybWF0IDQgY2hhcm1hcHMuCisKKwkqIHNyYy9zZm50L3R0Y21hcDAuYyAodHRfY21hcDRfY2hhcl9pbmRleCk6IFN3aXRjaGVkIHRvIGEgYmluYXJ5CisJc2VhcmNoIGFsZ29yaXRobS4gIENlcnRhaW4gZm9udHMgY29udGFpbiBtb3JlIHRoYW4gMTcwIGRpc3RpbmN0CisJc2VnbWVudHMhCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmg6IEFkZGluZyBhbiBhbGlhcyBmb3IgdGhlIGBleGl0JworCWZ1bmN0aW9uLiAgVGhpcyB3aWxsIGJlIHVzZWQgaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBhbmljIGluIGNhc2Ugb2YKKwl1bmV4cGVjdGVkIGV4Y2VwdGlvbiAod2hpY2ggc2hvdWxkbid0IGhhcHBlbiBpbiB0aGVvcnkpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oLCBzcmMvYmFzZS9mdGhhc2guYzogTmV3IGZpbGVzLgorCVRoaXMgaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBkeW5hbWljIGhhc2ggdGFibGVzIHVzaW5nIGEgbGluZWFyCisJYWxnb3JpdGhtICh0byBnZXQgcmlkIG9mIGBzdGFsbHMnIGR1cmluZyByZXNpemVzKS4gIEluIHRoZSBmdXR1cmUKKwl0aGlzIHdpbGwgYmUgdXNlZCBpbiBhdCBsZWFzdCB0aHJlZSBwYXJ0cyBvZiB0aGUgbGlicmFyeTogdGhlIGNhY2hlCisJc3ViLXN5c3RlbSwgdGhlIG9iamVjdCBzdWItc3lzdGVtLCBhbmQgdGhlIG1lbW9yeSBkZWJ1Z2dlci4KKworCSogc3JjL2Jhc2UvSmFtZmlsZTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9IQVNIX0gsCisJRlRfSU5URVJOQUxfT0JKRUNUX0gpOiBOZXcgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y29yZS5oOiBOZXcgZmlsZSB0byBncm91cCBhbGwgbmV3CisJZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBleGNlcHRpb24gaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiAgSXQKKwlpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSB3aWxsIGRpc2FwcGVhciBvciBiZSByZW5hbWVkIGluIHRoZQorCWZ1dHVyZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9iamVjdC5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzbWVtLmg6CisJQWRkaW5nIGNvbW1lbnRzIHRvIGJldHRlciBleHBsYWluIHRoZSBvYmplY3Qgc3ViLXN5c3RlbSBhcyB3ZWxsIGFzCisJdGhlIG5ldyBtZW1vcnkgbWFuYWdlciBpbnRlcmZhY2UuCisKKzIwMDItMDQtMzAgIFdlbmxpbiBJbnN0aXR1dGUgKFRvbSBCaXNob3ApICA8d2VubGluQHdlbmxpbi5jb20+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKHAyY19zdHIpOiBSZW1vdmVkLgorCShmaWxlX3NwZWNfZnJvbV9wYXRoKSBbVEFSR0VUX0FQSV9NQUNfQ0FSQk9OXTogQWRkZWQgc3VwcG9ydCBmb3IKKwlPUyBYLgorCShpc19kZm9udCkgW1RBUkdFVF9BUElfTUFDX0NBUkJPTl06IERlZmluZSBvbmx5IGZvciBPUyBYLgorCUhhbmRsZSBgbmFtZUxlbicgPD0gNiBhbHNvLgorCShwYXJzZV9mb25kKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbmFtZV90YWJsZScuCisJVXNlIGZ1bmN0aW9uYWxpdHkgb2Ygb2xkIHAyY19zdHIgZGlyZWN0bHkuCisJQWRkIHNhZmV0eSBjaGVja3MuCisJKHJlYWRfbHdmbik6IEluaXRpYWxpemUgYHNpemVfcCcuCisJQ2hlY2sgZm9yIHNpemVfcCA9PSBOVUxMLgorCShuZXdfbWVtb3J5X3N0cmVhbSwgb3Blbl9mYWNlX2Zyb21fYnVmZmVyKTogVXBkYXRlZCB0byBGcmVlVHlwZSAyLjEuCisJKEZUX05ld19GYWNlX0Zyb21fTFdGTik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG1lbW9yeScuCisJUmVtb3ZlIHNvbWUgZGVhZCBjb2RlLgorCShGVF9OZXdfRmFjZV9Gcm9tX1NGTlQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzdHJlYW0nLgorCShGVF9OZXdfRmFjZV9Gcm9tX2Rmb250KSBbVEFSR0VUX0FQSV9NQUNfQ0FSQk9OXTogRGVmaW5lIG9ubHkgZm9yCisJT1MgWC4KKwkoRlRfTmV3X0ZhY2VfRnJvbV9GT05EKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgZXJyb3InLgorCShSZXNvdXJjZUZvcmtTaXplKTogTmV3IGZ1bmN0aW9uLgorCShGVF9OZXdfRmFjZSk6IFVzZSBpdC4KKwlIYW5kbGUgZW1wdHkgcmVzb3VyY2UgZm9ya3MuCisJQ29uZGl0aW9uYWxpemUgc29tZSBjb2RlIGZvciBPUyBYLgorCUFkZCBjb2RlIHRvIGNhbGwgbm9ybWFsIGxvYWRlciBhcyBhIGZhbGxiYWNrLgorCisyMDAyLTA0LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlgaW50ZXJmYWNlJyBpcyByZXNlcnZlZCBvbiB0aGUgTWFjLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCwgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgsCisJc3JjL2Jhc2UvZnRvdXRsbi5jOiBzL2ludGVyZmFjZS9mdW5jX2ludGVyZmFjZS8uCisJKiBzcmMvYmFzZS9mdGJib3guYyAoRlRfT3V0bGluZV9HZXRfQkJveCk6CisJcy9pbnRlcmZhY2UvYmJveF9pbnRlcmZhY2UvLgorCSogc3JjL2NmZi9jZmZkcml2ci5jOiBzL2ludGVyZmFjZS9tb2R1bGVfaW50ZXJmYWNlLy4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jLCBzcmMvY2ZmL2NmZmxvYWQuaDoKKwlzL2ludGVyZmFjZS9wc25hbWVzX2ludGVyZmFjZS8uCisJKiBzcmMvY2lkL2NpZHJpdmVyLmM6IHMvaW50ZXJmYWNlL2NpZF9pbnRlcmZhY2UvLgorCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogcy9pbnRlcmZhY2UvbW9kdWxlX2ludGVyZmFjZS8uCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogcy9pbnRlcmZhY2UvZnVuY19pbnRlcmZhY2UvLgorCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmM6IHMvaW50ZXJmYWNlL3R0X2ludGVyZmFjZS8uCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYzogcy9pbnRlcmZhY2UvdDFfaW50ZXJmYWNlLy4KKworCVNvbWUgbW9yZSB2YXJpYWJsZSByZW5hbWVzIHRvIGF2b2lkIHRyb3VibGVzIG9uIHRoZSBNYWMuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYzoKKwlzL1Vua25vd258QXNjZW5kaW5nfERlc2NlbmRpbmd8RmxhdC9cMV9TdGF0ZS8uCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogcy9UU2Nhbi9UQ29vcmQvLgorCisJT3RoZXIgY2hhbmdlcyBmb3IgdGhlIE1hYy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogRGVmaW5lIEZUX01BQ0lOVE9TSCBmb3IKKwlNYWMgcGxhdGZvcm1zLgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IHMvbWFjaW50b3NoL0ZUX01BQ0lOVE9TSC8uCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IE1ha2UgYHBpdGNoJyBhbHdheXMKKwlhbiBldmVuIG51bWJlci4KKworMjAwMi0wNC0yOSAgSm91ayBKYW5zZW4gIDxqb3VrakBocmVtLnN0bS50dWRlbGZ0Lm5sPgorCisJKiBkZXNjcmlwLm1tcyAoYWxsKTogQWRkIHBmciBkcml2ZXIuCisKKzIwMDItMDQtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Bmci9wZnJlcnJvci5oOiBOZXcgZmlsZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaDogQWRkIFBGUiBlcnJvciBjb2Rlcy4KKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYzogSW5jbHVkZSBwZnJlcnJvci5oLgorCVVzZSBQQ0YgZXJyb3IgY29kZXMuCisJKHBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyk6IEZpeCBkZWJ1ZyBtZXNzYWdlLgorCSogc3JjL3Bmci9wZnJnbG9hZC5jOiBJbmNsdWRlIHBmcmVycm9yLmguCisJVXNlIFBDRiBlcnJvciBjb2Rlcy4KKwkocGZyX2V4dHJhX2l0ZW1fbG9hZF9iaXRtYXBfaW5mbywgcGZyX2dseXBoX2xvYWRfc2ltcGxlLAorCXBmcl9nbHlwaF9sb2FkX2NvbXBvdW5kKTogRml4IGRlYnVnIG1lc3NhZ2UuCisJKiBzcmMvcGZyL3Bmcm9ianMuYzogSW5jbHVkZSBwZnJlcnJvci5oLgorCVVzZSBQQ0YgZXJyb3IgY29kZXMuCisJKHBmcl9mYWNlX2luaXQpOiBSZXR1cm4gUEZSX0Vycl9Vbmtub3duX0ZpbGVfRm9ybWF0LgorCSogc3JjL3Bmci9ydWxlcy5tayAoUEZSX0RSVl9IKTogSW5jbHVkZSBwZnJlcnJvci5oLgorCisJKiBzcmMvcGNmL3BjZmRyaXZlci5jIChQQ0ZfRmFjZV9Jbml0KSBbIUZUX0NPTkZJR19PUFRJT05fVVNFX0NNQVBTXToKKwlgcm9vdCcgLT4gYGZhY2UtPnJvb3QnLgorCSogc3JjL3NmbnQvdHRjbWFwMC5jIChUVF9CdWlsZF9DTWFwcykgWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9DTUFQU106CisJUmVtb3ZlZC4KKwkqIHNyYy9zZm50L3R0Y21hcDAuYzogRGVjbGFyZSBUVF9CdWlsZF9DTWFwcyBvbmx5IGZvcgorCUZUX0NPTkZJR19PUFRJT05fVVNFX0NNQVBTLgorCisyMDAyLTA0LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfY2FjaGVfbG9va3VwKSwKKwlzcmMvY2FjaGUvZnRjY21hcC5jIChmdGNfY21hcF9mYW1pbHlfaW5pdCksCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKGZ0Y19mYW1pbHlfdGFibGVfYWxsb2MpLAorCXNyYy9jYWNoZS9mdGNzYml0cy5jIChGVENfU0JpdF9DYWNoZV9Mb29rdXApOiBVc2UgRlRDX0Vycl8qLgorCXNyYy9jYWNoZS9mdGNpbWFnZS5jIChGVENfSW1hZ2VfQ2FjaGVfTG9va3VwKTogVXNlIEZUQ19FcnJfKi4KKwkoRlRDX0ltYWdlQ2FjaGVfTG9va3VwKTogRml4IGhhbmRsaW5nIG9mIGludmFsaWQgYXJndW1lbnRzLgorCisyMDAyLTA0LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogU2V0IGB2ZXJzaW9uX2luZm8nIHRvIDk6MTozIChGVDIKKwl2ZXJzaW9uIDIuMC45IGhhcyA5OjA6MykuCisJKiBidWlsZHMvdW5peC9jb25maWd1cmU6IFJlZ2VuZXJhdGVkICh1c2luZyBhdXRvY29uZiAyLjUzKS4KKworMjAwMi0wNC0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2V4dHJhX2l0ZW1zX2ZhcnNlKTogRml4IGRlYnVnIG1lc3NhZ2UuCisJKHBmcl9waHlfZm9udF9sb2FkKTogcy9zaXplL1NpemUvIGZvciBsb2NhbCB2YXJpYWJsZSB0byBhdm9pZAorCWNvbXBpbGVyIHdhcm5pbmcuCisJKiBzcmMvcGZyL3Bmcm9ianMuYyAocGZyX2ZhY2VfaW5pdCk6IEZpeCBkZWJ1ZyBtZXNzYWdlLgorCShwZnJfc2xvdF9sb2FkKTogUmVtb3ZlIHJlZHVuZGFudCBsb2NhbCB2YXJpYWJsZS4KKworMjAwMi0wNC0xOSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWRkaW5nIGEgUEZSIGZvbnQgZHJpdmVyIHRvIHRoZSBGcmVlVHlwZSBzb3VyY2VzLiAgTm90ZSB0aGF0IGl0CisJZG9lc24ndCBzdXBwb3J0IGVtYmVkZGVkIGJpdG1hcHMgb3Iga2VybmluZyB0YWJsZXMgeWV0LgorCisJc3JjL3Bmci8qOiBOZXcgZmlsZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgsIHNyYy9KYW1lZmlsZTogVXBkYXRlZC4KKworCSogc3JjL3R5cGUxL3QxZ2xvYWQuaCAoVDFfTG9hZF9HbHlwaCksIHNyYy90eXBlMS90MWdsb2FkLmMKKwkoVDFfTG9hZF9HbHlwaCk6IEZpeGVkIGluY29ycmVjdCBwYXJhbWV0ZXIgc2lnbi1uZXNzIGluIGNhbGxiYWNrCisJZnVuY3Rpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfTUVNX1pFUk8sIEZUX1pFUk8pOiBOZXcKKwltYWNyb3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCAoRlRfTkVYVF9PRkYzLCBGVF9ORVhUX1VPRkYzLAorCUZUX05FWFRfT0ZGM19MRSwgRlRfTkVYVF9VT0ZGM19MRSk6IE5ldyBtYWNyb3MgdG8gcGFyc2UgaW4tbWVtb3J5CisJMjQtYml0IGludGVnZXJzLgorCisyMDAyLTA0LTE4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jLCBidWlsZHMvd2luMzIvZnRkZWJ1Zy5jLAorCWJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmM6IFZlcnNpb24gMi4xLjAgY291bGRuJ3QgYmUgbGlua2VkCisJYWdhaW5zdCBhcHBsaWNhdGlvbnMgaW4gV2luMzIgYW5kIEFtaWdhIGJ1aWxkcyBkdWUgdG8gY2hhbmdlcyB0bworCWBzcmMvYmFzZS9mdGRlYnVnLmMnIHRoYXQgd2VyZSBub3QgcHJvcGVybHkgcHJvcGFnYXRlZCB0bworCWBidWlsZHMvd2luMzInIGFuZCBgYnVpbGRzL2FtaWdhJy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmplY3QuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZXhjZXB0LmgsIGluY2x1ZGUvZnJlZXR5cGUvZnRzeXNtZW0uaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzaW8uaCwgc3JjL2Jhc2UvZnRzeXNtZW0uYywgc3JjL2Jhc2UvZnRzeXNpby5jOgorCU5ldyBleHBlcmltZW50YWwgZmlsZXMuCisKKzIwMDItMDQtMTcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMS4wIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyMDAyLTA0LTE3ICBNaWNoYWVsIEphbnNzb24gIDxtamFuQGVtMi1zb2x1dGlvbnMuY29tPgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Db21wdXRlX01heF9BZHZhbmNlKTogRml4ZWQgYSBzbWFsbCBidWcKKwl0aGF0IHByZXZlbnRlZCB0aGUgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlLgorCisyMDAyLTA0LTE2ICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkgIDxGcmFuY2VzY28uWmFwcGEuTmFyZGVsbGlAZW5zLmZyPgorCisJKiBzcmMvcGNmL3BjZnJlYWQgKHBjZl9nZXRfYWNjZWxsKTogRml4IHBhcnNpbmcgb2YgYWNjZWxlcmF0b3IKKwl0YWJsZXMuCisKKzIwMDItMDQtMTUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9GVEwudHh0OiBGb3JtYXR0aW5nLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBSZWR1Y2UgdGhlIHNpemUgb2YgdGhlCisJcmVuZGVyIHBvb2wgZnJvbSAzMmtCeXRlIHRvIDE2a0J5dGUuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2Zfc2Vla190b190YWJsZV90eXBlKTogUmVtb3ZlIGNvbXBpbGVyCisJd2FybmluZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoRlRfTUFYX0VYVEVOU0lPTlMpOiBSZW1vdmVkLgorCisJKiBkb2NzL0NIQU5HRVM6IFByZXBhcmluZyAyLjEuMCByZWxlYXNlLgorCisyMDAyLTA0LTEzICBXZXJuZXIgTEVNQkVSRyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX1BhcnNlX0NoYXJTdHJpbmdzKTogcy9yYW5kL1JhbmQvIHRvIGF2b2lkCisJY29tcGlsZXIgd2FybmluZy4KKworMjAwMi0wNC0xMiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBSRUFETUUuVU5YOiBVcGRhdGVkIHRoZSBVbml4LXNwZWNpZmljIHF1aWNrLWNvbXBpbGF0aW9uIGd1aWRlIHRvCisJd2FybiBhYm91dCB0aGUgR05VIE1ha2UgcmVxdWlyZW1lbnQgYXQgY29tcGlsZSB0aW1lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oLAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwKKworCXNyYy9hdXRvaGludC9haG9wdGltLmMsCisKKwlzcmMvYmFzZS9mdGRiZ21lbS5jLCBzcmMvYmFzZS9mdGRlYnVnLmMsIHNyYy9iYXNlL2Z0bWFjLmMsCisJc3JjL2Jhc2UvZnRvYmpzLmMsIHNyYy9iYXNlL2Z0c3lzdGVtLmMsCisKKwlzcmMvY2FjaGUvZnRjaW1hZ2UuYywgc3JjL2NhY2hlL2Z0Y3NiaXRzLmMsCisKKwlzcmMvY2ZmL2NmZmRyaXZlci5jLCBzcmMvY2ZmL2NmZmxvYWQuYywgc3JjL2NmZi9jZmZvYmpzLmMsCisKKwlzcmMvY2lkL2NpZGxvYWQuYywgc3JjL2NpZC9jaWRwYXJzZS5jLCBzcmMvY2lkL2NpZHJpdmVyLmMsCisKKwlzcmMvcGNmL3BjZmRyaXZlci5jLCBzcmMvcGNmL3BjZnJlYWQuYywKKworCXNyYy9wc2F1eC90MWNtYXAuYywgc3JjL3BzYXV4L3QxZGVjb2RlLmMsCisKKwlzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYywgc3JjL3BzaGludGVyL3BzaGFsZ28yLmMsCisJc3JjL3BzaGludGVyL3BzaHJlYy5jLAorCisJc3JjL3BzbmFtZXMvcHNtb2R1bGUuYywKKworCXNyYy9yYXN0ZXIvZnRyYXN0ZXIuYywKKworCXNyYy9zZm50L3NmZHJpdmVyLmMsIHNyYy9zZm50L3R0bG9hZC5jLAorCisJc3JjL3Ntb290aC9mdGdyYXlzLmMsCisKKwlzcmMvdHlwZTEvdDFhZm0uYywgc3JjL3R5cGUxL3QxZHJpdmVyLmMsIHNyYy90eXBlMS90MWdsb2FkLmMsCisJc3JjL3R5cGUxL3QxbG9hZC5jLCBzcmMvdHlwZTEvdDFvYmpzLmMsIHNyYy90eXBlMS90MXBhcnNlLmMsCisKKwlidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwgYnVpbGRzL3Ztcy9mdGNvbmZpZy5oLAorCisJYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYzoKKworCUFkZGVkIHRoZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlIGBmdHN0ZGxpYi5oJyB1c2VkIHRvIGRlZmluZQorCWFsaWFzZXMgZm9yIGFsbCBJU08gQyBsaWJyYXJ5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBlbmdpbmUKKwkoZS5nLiBzdHJsZW4sIHFzb3J0LCBzZXRqbXAsIGV0Yy4pLgorCisJVGhpcyBlYXNlcyB0aGUgcG9ydGluZyBvZiBGcmVlVHlwZSAyIHRvIGVudmlyb25tZW50cyBsaWtlCisJWEZyZWU4NiBtb2R1bGVzL2V4dGVuc2lvbnMuCisKKwlBbHNvIHJlbW92ZWQgbWFueSAjaW5jbHVkZSA8c3RyaW5nLmg+LCAjaW5jbHVkZSA8c3RkbGliLmg+LCBldGMuCisJZnJvbSB0aGUgZW5naW5lJ3Mgc291cmNlcyB3aGVyZSB0aGV5IGFyZSBub3QgbmVlZGVkLgorCisJKiBzcmMvc2ZudC90dHBvc3QuYzogVXNlIG1hY3JvIG5hbWUgZm9yIHBzbmFtZXMuaC4KKworMjAwMi0wNC0xMiAgVmluY2VudCBDYXJvbiAgPHYuY2Fyb25AemVyb2RldXgubmV0PgorCisJKiBjb25maWd1cmUsIGJ1aWxkcy9kZXRlY3QubWs6IFVwZGF0ZWQgdGhlIGJ1aWxkIHN5c3RlbSB0byBwcmludAorCWEgd2FybmluZyBtZXNzYWdlIGluIGNhc2UgR05VIE1ha2UgaXNuJ3QgdXNlZCB0byBidWlsZCB0aGUgbGlicmFyeS4KKworMjAwMi0wNC0xMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBSRUFETUUsIGRvY3MvQ0hBTkdFUywgSmFtZmlsZS5pbjogVXBkYXRlcyBmb3IgdGhlIDIuMS4wIHJlbGVhc2UuCisKKwkqIGRvY3MvRlRMLnR4dDogVXBkYXRlZCBsaWNlbnNlIHRleHQgdG8gcHJvdmlkZSBhIHByZWZlcnJlZAorCWRpc2NsYWltZXIgYW5kIGFkanVzdCBjb3B5cmlnaHQgZGF0ZXMvZXh0ZW50cy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNnbHlwaC5oOiBSZW1vdmluZyBvYnNvbGV0ZSAoYW5kCisJY29uZnVzaW5nKSBjb21tZW50LgorCisJKiBKYW1maWxlLmluOiBOZXcgZmlsZS4KKworMjAwMi0wNC0xMSAgTWF4aW0gU2hlbWFuYXJldiAgPG1jc2VlbWFnZ0B5YWhvby5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lKTogTWlub3Igb3B0aW1pemF0aW9uLgorCisyMDAyLTA0LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXhlcyBmcm9tIHRoZSBzdGFibGUgYnJhbmNoOgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oIChGVF9DT05GSUdfT1BUSU9OX09MRF9DQUxDUyk6CisJUmVtb3ZlZC4KKwlbRlRfQ09ORklHX09QVElPTl9PTERfQ0FMQ1NdOiBSZW1vdmVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCwgc3JjL2Jhc2UvZnRjYWxjLmMKKwlbRlRfQ09ORklHX09QVElPTl9PTERfQ0FMQ1NdOiBSZW1vdmVkLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChGVF9WZWN0b3JfTGVuZ3RoKTogQ2hhbmdlIGFsZ29yaXRobSB0byBtYXRjaAorCW91dHB1dCBvZiBGcmVlVHlwZSAxLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIChwc2hfZ2xvYmFsc19zY2FsZV93aWR0aHMpOiBGaXhlZCBhIHNtYWxsCisJYnVnIHRoYXQgY3JlYXRlZCB1bi1ldmVuIHN0ZW0gd2lkdGhzIHdoZW4gaGludGluZyBQb3N0c2NyaXB0IGZvbnRzLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYywgc3JjL3R5cGUxL3QxcGFyc2UuYzogMTZiaXQgZml4ZXMuCisKKzIwMDItMDQtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogMTZiaXQgZml4ZXMuCisJKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogSW1wcm92ZSBkZWJ1ZyBtZXNzYWdlcy4KKwkobG9hZF90cnVldHlwZV9nbHlwaCk6IFJlbW92ZSBkZWFkIGNvZGUuCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogMTZiaXQgZml4ZXMuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmM6IERpdHRvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgsIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oLAorCXNyYy9jZmYvY2ZmbG9hZC5oLCBzcmMvcHNhdXgvcHNvYmpzLmgsIHNyYy90cnVldHlwZS90dGludGVycC5bY2hdLAorCXNyYy9zZm50L3R0cG9zdC5oOiBzL2luZGV4L2lkeC8uCisKKzIwMDItMDMtMzEgIFlhbyBaaGFuZyAgPHlhb3pAdmlkYXIubmlhYWEubmloLmdvdj4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jIChUVF9TaXplX0luaXQpOiBGaXggdHlwby4KKworMjAwMi0wMy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvb3RsYXlvdXQvb3RsY29tbW4uYywgc3JjL290bGF5b3V0L290bGNvbW1uLmg6IHMvaW5kZXgvaWR4Ly4KKwkqIHNyYy9wc2F1eC90MWNtYXAuYzogRGl0dG8uCisJKiBzcmMvc2ZudC90dGNtYXAwLmM6IERpdHRvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfR290b19UYWJsZV9GdW5jKTogUmVuYW1lZCB0byAuLi4KKwkoVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMpOiBUaGlzLgorCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKFQxX0RlY29kZXJfUGFyc2VfQ2hhcnN0cmluZ3MpOiBGaXggZGVidWcKKwltZXNzYWdlcy4KKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzbmFtZXNfaW50ZXJmYWNlKQorCVshRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUXTogRml4IHR5cG8uCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChnZXRfc2ZudF90YWJsZSk6IDE2Yml0IGZpeC4KKwkqIHNyYy9zZm50L3R0Y21hcC5jOiAxNmJpdCBmaXhlcyAoMHhGRkZGIC0+IDB4RkZGRlUpLgorCSogc3JjL3NmbnQvdHRjbWFwMC5jOiAxNmJpdCBmaXhlcy4KKwkoVFRfQnVpbGRfQ01hcHMpOiBTaW1wbGlmeSBkZWJ1ZyBtZXNzYWdlcy4KKwkodHRfY21hcDEyX2NoYXJfbmV4dCk6IEZpeCBvZmZzZXQuCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9OYW1lcywgVFRfTG9hZF9DTWFwKTogRml4IGRlYnVnCisJbWVzc2FnZXMuCisJKFRUX0xvYWRfT1MyKTogMTZiaXQgZml4LgorCisyMDAyLTAzLTMwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oOiBBZGRpbmcgY29tbWVudHMgdG8gc29tZSBvZgorCXRoZSBUVF9GYWNlUmVjIGZpZWxkcy4KKworCSogc3JjL3NmbnQvdHRjbWFwMC5jIChUVF9CdWlsZF9DTWFwcyk6IFJlbW92ZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jICh0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fe3V0ZjE2LHVjczQsb3RoZXJ9OgorCU5ldyBmdW5jdGlvbnMuCisJKHR0X2ZhY2VfZ2V0X25hbWUpOiBVc2UgdGhlbSB0byBwcm9wZXJseSBleHRyYWN0IGFuIGFzY2lpIGZvbnQgbmFtZS4KKworMjAwMi0wMy0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmggKHQxX2JsZW5kX21heCk6IEZpeCB0eXBvLgorCSogc3JjL2Jhc2UvZnRzdHJlYW0uYzogU2ltcGxpZnkgRlRfRVJST1IgY2FsbHMuCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfZ2x5cGhfbmFtZSk6IEZpeCBkZWJ1ZyBtZXNzYWdlLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX0RyaXZlcl9Jbml0LCBDRkZfRHJpdmVyX0RvbmUpCisJW1RUX0NPTkZJR19PUFRJT05fRVhURU5EX0VOR0lORV06IFJlbW92ZWQuCisJKiBzcmMvY2ZmL3Nmb2Jqcy5jIChTRk5UX0xvYWRfRmFjZSkKKwlbVFRfQ09ORklHX09QVElPTl9FWFRFTkRfRU5HSU5FXTogRGl0dG8uCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKFRUX0luaXRfRHJpdmVyLCBUVF9Eb25lX0RyaXZlcikKKwlbVFRfQ09ORklHX09QVElPTl9FWFRFTkRfRU5HSU5FXTogRGl0dG8uCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jLCBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMsCisJc3JjL3RydWV0eXBlL3R0b2Jqcy5oOiBSZW5hbWluZyBkcml2ZXIgZnVuY3Rpb25zIHRvIHRoZQorCUZUXzxTdWJqZWN0Pl88QWN0aW9uPiBzY2hlbWU6CisKKwkgIFRUX0luaXRfRHJpdmVyID0+IFRUX0RyaXZlcl9Jbml0CisJICBUVF9Eb25lX0RyaXZlciA9PiBUVF9Ecml2ZXJfRG9uZQorCSAgVFRfSW5pdF9GYWNlICAgPT4gVFRfRmFjZV9Jbml0CisJICBUVF9Eb25lX0ZhY2UgICA9PiBUVF9GYWNlX0RvbmUKKwkgIFRUX0luaXRfU2l6ZSAgID0+IFRUX1NpemVfSW5pdAorCSAgVFRfRG9uZV9TaXplICAgPT4gVFRfU2l6ZV9Eb25lCisJICBUVF9SZXNldF9TaXplICA9PiBUVF9TaXplX1Jlc2V0CisKKzIwMDItMDMtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oOiBSZW5hbWUgTE9DQUxfREVGIGFuZCBMT0NBTF9GVU5DIHRvCisJRlRfTE9DQUwgYW5kIEZUX0xPQ0FMX0RFRiwgcmVzcGVjdGl2ZWx5LCBhcyB3aXRoIG90aGVyIGZ0Y29uZmlnLmgKKwlmaWxlcy4KKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluOiBBZGQgYXJndW1lbnQgdG8gRlRfTE9DQUwgYW5kCisJRlRfTE9DQUxfREVGLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IHMvRlRfQXNzZXJ0L0ZUX0FTU0VSVC8uCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUuYWM6IFRlbXBvcmFyaWx5IGRlYWN0aXZhdGUgY3JlYXRpb24gb2YKKwkuLi8uLi9KYW1maWxlLgorCSogYnVpbGRzL3VuaXgvY29uZmlndXJlOiBVcGRhdGVkLgorCisyMDAyLTAzLTI4ICBLVVNBTk8gVGFrYXl1a2kgIDxBRTVULUtTTkBhc2FoaS1uZXQub3IuanA+CisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGdldF9zZm50X3Bvc3RzY3JpcHRfbmFtZSk6IEZpeCBzZXJpb3VzIHR5cG9zLgorCisyMDAyLTAzLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoUFNBdXhfU2VydmljZVJlYyk6IEZpeAorCWNvbXBpbGVyIHdhcm5pbmdzLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKFQxX0ZhY2VSZWMpOiBVc2UgYGNvbnN0JyBmb3IKKwlzb21lIG1lbWJlcnMuCisJKiBzcmMvYmFzZS9mdGFwaS5jIChGVF9OZXdfTWVtb3J5X1N0cmVhbSk6IEZpeCB0eXBvcy4KKwkqIHNyYy9wc2F1eC90MWNtYXAuYyAodDFfY21hcF9zdGRfaW5pdCwgdDFfY21hcF91bmljb2RlX2luaXQpOiBBZGQKKwljYXN0LgorCSh0MV9jbWFwX3tzdGFuZGFyZCxleHBlcnQsY3VzdG9tLHVuaWNvZGV9X2NsYXNzX3JlYyk6IFVzZQorCWBGVF9DQUxMQkFDS19UQUJMRV9ERUYnLgorCSogc3JjL3BzYXV4L3QxY21hcC5oOiBVcGRhdGVkLgorCSogc3JjL3NmbnQvdHRjbWFwMC5jIChUVF9CdWlsZF9DTWFwcyk6IFVzZSBgZnRfZW5jb2Rpbmdfbm9uZScKKwlpbnN0ZWFkIG9mIHplcm8uCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFVzZSBjYXN0cy4KKworMjAwMi0wMy0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jLCBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRjbWFwMC5jOgorCUZpeGVkIGEgc21hbGwgYnVnIGluIHRoZSBGVF9DTWFwcyBzdXBwb3J0IGNvZGUuCisKKzIwMDItMDMtMjUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKE5vcm0pOiBSZXBsYWNlZCB3aXRoLi4uCisJKFRUX1ZlY0xlbik6IFRoaXMuCisJKFRUX011bEZpeDE0LCBUVF9Eb3RGaXgxNCk6IE5ldyBmdW5jdGlvbnMuCisJKFByb2plY3QsIER1YWxfUHJvamVjdCwgRnJlZV9Qcm9qZWN0LCBDb21wdXRlX1BvaW50X0Rpc3BsYWNlbWVudCwKKwlJbnNfU0hQSVgsIEluc19NSUFQLCBJbnNfTUlSUCk6IFVzZSB0aGVtLgorCVtGVF9DT05GSUdfT1BUSU9OX09MRF9DQUxDU106IFJlbW92ZWQgYWxsIGNvZGUuCisKKzIwMDItMDMtMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMsIHNyYy9zZm50L3R0Y21hcDAuYywgc3JjL3R5cGUxL3Qxb2Jqcy5jOgorCVZhcmlvdXMgZml4ZXMgdG8gbWFrZSB0aGUgRlRfQ01hcHMgc3VwcG9ydCB3b3JrIGNvcnJlY3RseSAobW9yZQorCXRlc3RzIGFyZSBzdGlsbCBuZWVkZWQpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLCBzcmMvc2ZudC9KYW1maWxlLAorCXNyYy9zZm50L3J1bGVzLm1rLCBzcmMvc2ZudC9zZm50LmMsIHNyYy9zZm50L3Nmb2Jqcy5jLAorCXNyYy9zZm50L3R0bG9hZC5jLCBzcmMvc2ZudC90dGNtYXAwLmMsIHNyYy9zZm50L3R0Y21hcDAuaDogVXBkYXRlZAorCXRoZSBTRk5UIGNoYXJtYXAgc3VwcG9ydCB0byB1c2UgRlRfQ01hcHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaDogTmV3IGZpbGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmg6IEluY2x1ZGUgaXQuICBJdCBjb250YWlucyBhbGwgZXJyb3IKKwljb2Rlcy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0VSUk9SX0RFRklOSVRJT05TX0gpOiBOZXcKKwltYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oLCBhbmQgYSBsb3Qgb2Ygb3RoZXIgZmlsZXM6CisJQ2hhbmdlZCB0aGUgbmFtZXMgb2YgbWVtb3J5IG1hY3Jvcy4gIEV4YW1wbGVzOgorCisJICBNRU1fU2V0ICAgPT4gRlRfTUVNX1NFVAorCSAgTUVNX0NvcHkgID0+IEZUX01FTV9DT1BZCisJICBNRU1fTW92ZSAgPT4gRlRfTUVNX01PVkUKKworCSAgQUxMT0MgICAgID0+IEZUX0FMTE9DCisJICBGUkVFICAgICAgPT4gRlRfRlJFRQorCSAgUkVBTExPQyAgID0gPkZUX1JFQUxMT0MKKworCUZUX05FVyB3YXMgaW50cm9kdWNlZCB0byBhbGxvY2F0ZSBhIG5ldyBvYmplY3QgZnJvbSBhIF90eXBlZF8KKwlwb2ludGVyLgorCisJTm90ZSB0aGF0IEFMTE9DX0FSUkFZIGFuZCBSRUFMTE9DX0FSUkFZIGhhdmUgYmVlbiByZXBsYWNlZCBieQorCUZUX05FV19BUlJBWSBhbmQgRlRfUkVORVdfQVJSQVkgd2hpY2ggdGFrZSBfdHlwZWRfIHBvaW50ZXIKKwlhcmd1bWVudHMuCisKKwlUaGlzIHJlc3VsdHMgaW4gX2xvdHNfIG9mIHNvdXJjZXMgYmVpbmcgY2hhbmdlZCwgYnV0IG1ha2VzIHRoZSBjb2RlCisJbW9yZSBnZW5lcmljIGFuZCBsZXNzIGVycm9yLXByb25lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgsIHNyYy9iYXNlL2Z0c3RyZWFtLmMsCisJc3JjL2NmZi9jZmZsb2FkLmMsIHNyYy9wY2YvcGNmcmVhZC5jLCBzcmMvc2ZudC90dGNtYXAuYywKKwlzcmMvc2ZudC90dGNtYXAwLmMsIHNyYy9zZm50L3R0bG9hZC5jLCBzcmMvc2ZudC90dHBvc3QuYywKKwlzcmMvc2ZudC90dHNiaXQuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywgc3JjL3RydWV0eXBlL3R0cGxvYWQuYywKKwlzcmMvd2luZm9udHMvd2luZm50LmM6IENoYW5nZWQgdGhlIGRlZmluaXRpb25zIG9mIHN0cmVhbSBtYWNyb3MuCisJRXhhbXBsZXM6CisKKwkgIE5FWFRfQnl0ZSAgICAgPT4gRlRfTkVYVF9CWVRFCisJICBORVhUX1Nob3J0ICAgID0+IEZUX05FWFRfU0hPUlQKKwkgIE5FWFRfVVNob3J0TEUgPT4gRlRfTkVYVF9VU0hPUlRfTEUKKwkgIFJFQURfU2hvcnQgICAgPT4gRlRfUkVBRF9TSE9SVAorCSAgR0VUX0xvbmcgICAgICA9PiBGVF9HRVRfTE9ORworCSAgZXRjLgorCisJQWxzbyBpbnRyb2R1Y2VkIHRoZSBGVF9QRUVLX1hYWFggZnVuY3Rpb25zLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX0J1aWxkX1VuaWNvZGVfQ2hhcm1hcCk6IFJlbW92ZWQgY29tbWVudGVkCisJb3V0IGZ1bmN0aW9uLgorCShmaW5kX2VuY29kaW5nKTogUmVtb3ZlZC4KKwkoQ0ZGX0ZhY2VfSW5pdCk6IFJlbW92ZSBjaGFybWFwIHN1cHBvcnQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX0NPTkZJR19PUFRJT05fVVNFX0NNQVBTLAorCVRUX0NPTkZJR19DTUFQX0ZPUk1BVHswLDIsNCw2LDgsMTAsMTJ9KTogTmV3IG1hY3JvcyB0byBmaW5lLXR1bmUKKwlzdXBwb3J0IG9mIGNtYXBzLgorCisyMDAyLTAzLTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jLCBzcmMvcGNmL3BjZmRyaXZlci5jLCBzcmMvcGNmL3BjZnJlYWQuYzogVXBkYXRlZAorCXRvIG5ldyBGVF9DTWFwIGRlZmluaXRpb25zLgorCisJKiBzcmMvcHNhdXgvdDFjbWFwLmgsIHNyYy9wc2F1eC90MWNtYXAuYywgc3JjL3R5cGUxL3QxY21hcC5oLAorCXNyYy90eXBlMS90MWNtYXAuYzogVXBkYXRpbmcgYW5kIG1vdmluZyB0aGUgVHlwZSAxIEZUX0NNYXAgc3VwcG9ydAorCWZyb20gYHNyYy90eXBlMScgdG8gYHNyYy9wc2F1eCcgc2luY2UgaXQgaXMgZ29pbmcgdG8gYmUgc2hhcmVkIGJ5CisJdGhlIFR5cGUgMSBhbmQgQ0lEIGZvbnQgZHJpdmVycy4KKworCSogc3JjL3BzYXV4L0phbWZpbGUsIHNyYy9wc2F1eC9wc2F1eC5jLCBzcmMvcHNhdXgvcHNhdXhtb2QuYywKKwlzcmMvcHNhdXgvcnVsZXMubWssIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaDogQWRkZWQgc3VwcG9ydAorCWZvciBUeXBlIDEgRlRfQ01hcHMuCisKKzIwMDItMDMtMjAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRnbG9hZHIuYyAoRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMpOiBGaXhlZCBhCisJbWVtb3J5IGFsbG9jYXRpb24gYnVnIHRoYXQgd2FzIGR1ZSB0byB1bi1jYXJlZnVsIHJlbmFtaW5nIG9mIHRoZQorCUZUX1N1YkdseXBoIHR5cGUuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKGZ0X21lbV90YWJsZV9kZXN0cm95KTogRml4ZWQgYSBzbWFsbCBidWcgdGhhdAorCWNhdXNlZCB0aGUgbGlicmFyeSB0byBjcmFzaCB3aXRoIEVsZWN0cmljIEZlbmNlIHdoZW4gbWVtb3J5CisJZGVidWdnaW5nIGlzIHVzZWQuCisKKwkqIFJlbmFtaW5nIHN0cmVhbSBtYWNyb3MuICBFeGFtcGxlczoKKworCSAgRklMRV9Ta2lwICAgID0+IEZUX1NUUkVBTV9TS0lQCisJICBGSUxFX1JlYWQgICAgPT4gRlRfU1RSRUFNX1JFQUQKKwkgIEFDQ0VTU19GcmFtZSA9PiBGVF9GUkFNRV9FTlRFUgorCSAgRk9SR0VUX0ZyYW1lID0+IEZUX0ZSQU1FX0VYSVQKKwkgIGV0Yy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoZ2V0X3NmbnRfcG9zdHNjcmlwdF9uYW1lKTogRml4ZWQgbWVtb3J5IGxlYWsuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg6IENoYW5naW5nIHRoZSBkZWZpbml0aW9uIG9mCisJRlRfQ01hcF9DaGFyTmV4dEZ1bmMgc2xpZ2h0bHkuCisKKwkqIHNyYy9jZmYvKi5jOiBVcGRhdGluZyBDRkYgdHlwZSBkZWZpbml0aW9ucy4KKworMjAwMi0wMy0xNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgsIHNyYy9hdXRvaGludC9haG1vZHVsZS5jLAorCXNyYy9iYXNlL2Z0YXBpLmMsIHNyYy9iYXNlL2Z0b2Jqcy5jOiBVcGRhdGluZyB0aGUgdHlwZSBkZWZpbml0aW9ucworCWZvciB0aGUgYXV0by1oaW50ZXIgbW9kdWxlLgorCisJICBGVF9BdXRvSGludGVyX0ludGVyZmFjZSAgPT4gRlRfQXV0b0hpbnRlcl9TZXJ2aWNlUmVjCisJICBGVF9BdXRvSGludGVyX0ludGVyZmFjZSogPT4gRlRfQXV0b0hpbnRlcl9TZXJ2aWNlCisJICBldGMuCisKKwkgIEZUX0F1dG9IaW50ZXJfR2V0X0dsb2JhbF9GdW5jICA9PiBGVF9BdXRvSGludGVyX0dsb2JhbEdldEZ1bmMKKwkgIEZUX0F1dG9IaW50ZXJfRG9uZV9HbG9iYWxfRnVuYyA9PiBGVF9BdXRvSGludGVyX0dsb2JhbERvbmVGdW5jCisJICBldGMuCisKKwkqIGFobG9hZGVyLmggW19TVEFOREFMT05FX106IFJlbW92ZWQgYWxsIGNvbmRpdGlvbmFsIGNvZGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaCwgc3JjL2NmZi8qLmM6IFVwZGF0aW5nIHRoZQorCXR5cGUgZGVmaW5pdGlvbnMgb2YgdGhlIENGRiBmb250IGRyaXZlci4KKworCSAgQ0ZGX0ZvbnQgID0+IENGRl9Gb250UmVjCisJICBDRkZfRm9udCogPT4gQ0ZGX0ZvbnQKKwkgIGV0Yy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mbnR0eXBlcy5oLCBzcmMvd2luZm9udHMvKi5jOiBVcGRhdGluZworCXR5cGUgZGVmaW5pdGlvbnMgb2YgdGhlIFdpbmRvd3MgRk5UIGZvbnQgZHJpdmVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwgc3JjL2Jhc2UvZnRhcGkuYywKKwlzcmMvYmFzZS9mdG9ianMuYywgc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZmRyaXZyLmgsCisJc3JjL2NpZC9jaWRyaXZlci5jLCBzcmMvY2lkL2NpZHJpdmVyLmgsIHNyYy9wY2YvcGNmZHJpdmVyLmMsCisJc3JjL3BjZi9wY2Zkcml2ZXIuaCwgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMsCisJc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgsIHNyYy90eXBlMS90MWRyaXZlci5jLCBzcmMvdHlwZTEvdDFkcml2ZXIuaCwKKwlzcmMvd2luZm9udHMvd2luZm50LmMsIHNyYy93aW5mb250cy93aW5mbnQuaDogVXBkYXRpbmcgdHlwZQorCWRlZmluaXRpb25zIGZvciBmb250IGRyaXZlcnMuCisKKwkgIEZURHJpdmVyX2luaXRGYWNlICAgICAgPT4gRlRfRmFjZV9Jbml0RnVuYworCSAgRlREcml2ZXJfaW5pdEdseXBoU2xvdCA9PiBGVF9TbG90X0luaXRGdW5jCisJICBldGMuCisKKwkqIHNyYy9jaWQvY2lkb2Jqcy5jIChDSURfRmFjZV9Jbml0KTogUmVtb3ZlIGRlYWQgY29kZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwgc3JjL2Jhc2UvZnRvYmpzLmM6IFVwZGF0ZWQgYQorCWZldyBmYWNlIG1ldGhvZCBkZWZpbml0aW9uczoKKworCSAgRlRfUFNOYW1lX1JlcXVlc3RlciAgICAgPT4gRlRfRmFjZV9HZXRQb3N0c2NyaXB0TmFtZUZ1bmMKKwkgIEZUX0dseXBoX05hbWVfUmVxdWVzdGVyID0+IEZUX0ZhY2VfR2V0R2x5cGhOYW1lRnVuYworCSAgRlRfTmFtZV9JbmRleF9SZXF1ZXN0ZXIgPT4gRlRfRmFjZV9HZXRHbHlwaE5hbWVJbmRleEZ1bmMKKworCSogc3JjL2Jhc2UvZnRhcGkuYzogTmV3IGZpbGUuICBJdCBjb250YWlucyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorCWZ1bmN0aW9ucy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oLCBzcmMvY2lkL2NpZGxvYWQuYywKKwlzcmMvY2lkdG9rZW4uaCwgc3JjL3BzYXV4L3Bzb2Jqcy5jLCBzcmMvcHNhdXgvcHNvYmpzLmgsCisJc3JjL3BzYXV4L3QxZGVjb2RlLmMsIHN0Yy90eXBlMS90MWxvYWQuYywgc3JjL3R5cGUxL3QxdG9rZW5zLmg6CisJVXBkYXRlZCBjb21tb24gUG9zdFNjcmlwdCB0eXBlIGRlZmluaXRpb25zLgorCVJlbmFtZWQgYWxsIGVudW1lcmF0aW9uIHZhbHVlcyBsaWtlIHRvIHVwcGVyY2FzZSB2YXJpYW50czoKKworCSAgdDFfdG9rZW5fYW55ICAgICAgPT4gVDFfVE9LRU5fVFlQRV9BTlkKKwkgIHQxX2ZpZWxkX2NpZF9pbmZvID0+IFQxX0ZJRUxEX0xPQ0FUSU9OX0NJRF9JTkZPCisJICBldGMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNnbG9iYWxzLmg6IFJlbW92ZWQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaCwgc3JjL3BzaGludGVyL3BzaGdsb2IuaDoKKwlVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCwgc3JjL2Jhc2UvZnRuYW1lcy5jLAorCXNyYy9jZmYvY2ZmZHJpdnIuYywgc3JjL3NmbnQvKi5jLCBzcmMvdHJ1ZXR5cGUvKi5jOiBVcGRhdGVkCisJU0ZOVC9UcnVlVHlwZSB0eXBlIGRlZmluaXRpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgsIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaDoKKwlVcGRhdGluZyB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgZ2x5cGggbG9hZGVyLgorCisyMDAyLTAzLTEzICBBbnRvaW5lIExlY2EgIDxhbnRvaW5lQG9yaW9sbmV0LmNvbT4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDogQ2hhbmdlZCB0aGUgYXV0b21hdGljCisJZGV0ZWN0aW9uIG9mIE1pY3Jvc29mdCBDIGNvbXBpbGVycyB0byBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgNjQtYml0CisJaW50ZWdlcnMgb25seSBzaW5jZSByZXZpc2lvbiA5LjAwIChpLmUuID49IFZpc3VhbCBDKysgMi4wKS4KKworMjAwMi0wMy0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYyAoRlRfUmVhbGxvYyk6IFVzZSBNRU1fU2V0IGluc3RlYWQgb2YgbWVtc2V0LgorCisyMDAyLTAzLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKGZ0X21lbV90YWJsZV9yZXNpemUsIGZ0X21lbV90YWJsZV9uZXcsCisJZnRfbWVtX3RhYmxlX3NldCwgZnRfbWVtX2RlYnVnX2FsbG9jLCBmdF9tZW1fZGVidWdfZnJlZSwKKwlmdF9tZW1fZGVidWdfcmVhbGxvYywgZnRfbWVtX2RlYnVnX2RvbmUsIEZUX0FsbG9jX0RlYnVnLAorCUZUX1JlYWxsb2NfRGVidWcsIEZUX0ZyZWVfRGVidWcpOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KTogRGl0dG8uCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfbmFtZV9pbmRleCk6IERpdHRvLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKENGRl9TaXplX0dldF9HbG9iYWxfRnVuY3MsIENGRl9TaXplX0luaXQsCisJQ0ZGX0dseXBoU2xvdF9Jbml0KTogRGl0dG8uCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoQ0lEX0dseXBoU2xvdF9Jbml0LAorCUNJRF9TaXplX0dldF9HbG9iYWxzX0Z1bmNzKTogRGl0dG8uCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX1NpemVfR2V0X0dsb2JhbHNfRnVuY3MsIFQxX0dseXBoU2xvdF9Jbml0KToKKwlEaXR0by4KKwkqIHNyYy9wc2hpbnRlci9wc2htb2QuYyAocHNoaW50ZXJfaW50ZXJmYWNlKTogVXNlIGBzdGF0aWMgY29uc3QnLgorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfR2V0X05leHRfQ2hhcik6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoVDFfQnVpbGRlcl9GdW5jcyk6IFJlbmFtZWQKKwl0by4uLgorCShUMV9CdWlsZGVyX0Z1bmNzUmVjKTogVGhpcy4KKwkoVDFfQnVpbGRlcl9GdW5jcyk6IE5ldyB0eXBlZGVmLgorCShQU0F1eF9JbnRlcmZhY2UpOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MuCisJKiBzcmMvcHNhdXgvcHNhdXhtb2QuYyAodDFfYnVpbGRlcl9mdW5jcyksIHNyYy9wc2F1eC9wc29ianMuaAorCSh0MV9idWlsZGVyX2Z1bmNzKTogVXBkYXRlZC4KKworCSogc3JjL3BzaGludGVyL3BzaGdsb2IuaCAoUFNIX0JsdWVfQWxpZ24pOiBSZXBsYWNlZCB3aXRoIC4uLgorCShQU0hfQkxVRV9BTElHTl97Tk9ORSxUT1AsQk9UfSk6IE5ldyBkZWZpbmVzLgorCShQU0hfQWxpZ25tZW50UmVjKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oIChHRVRfQ2hhciwgR0VUX0J5dGUpOiBGaXgKKwl0eXBvLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oIChGVF9TdWJHbHlwaCk6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRzdHJlYW0gKEZUX0dldF9DaGFyKTogUmVuYW1lIHRvLi4uCisJKEZUX1N0cmVhbV9HZXRfQ2hhcik6IFRoaXMuCisKKwkqIHNyYy9iYXNlL2Z0bmFtZXMuYyAoRlRfR2V0X1NmbnRfTmFtZSk6IHMvaW5kZXgvaWR4LyAtLSBgaW5kZXgnIGlzCisJYSBidWlsdC1pbiBmdW5jdGlvbiBpbiBnY2MsIGNhdXNpbmcgd2FybmluZyBtZXNzYWdlcyB3aXRoIGdjYyAzLjAuCisJKiBzcmMvYXV0b2hpbnQvYWhnbHlwaC5jIChhaF9vdXRsaW5lX2xvYWQpOiBEaXR0by4KKwkqIHNyYy9hdXRvaGludC9haGdsb2JhbC5jIChhaF9oaW50ZXJfY29tcHV0ZV9ibHVlcyk6IERpdHRvLgorCSogc3JjL2NhY2hlL2Z0Y21hbmFnLmMgKGZ0Y19mYW1pbHlfdGFibGVfYWxsb2MsCisJZnRjX2ZhbWlseV90YWJsZV9mcmVlLCBGVENfTWFuYWdlcl9Eb25lLCBGVENfTWFuYWdlcl9SZWdpc3Rlcl9DYWNoZSk6CisJRGl0dG8uCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX25ld19pbmRleCwgY2ZmX2RvbmVfaW5kZXgsCisJY2ZmX2V4cGxpY2l0X2luZGV4LCBDRkZfQWNjZXNzX0VsZW1lbnQsIENGRl9Gb3JnZXRfRWxlbWVudCwKKwlDRkZfR2V0X05hbWUsIENGRl9HZXRfU3RyaW5nLCBDRkZfTG9hZF9TdWJGb250LCBDRkZfTG9hZF9Gb250LAorCUNGRl9Eb25lX0ZvbnQpOiBEaXR0by4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoUFNfVGFibGVfQWRkLCBQU19QYXJzZXJfTG9hZEZpZWxkKTogRGl0dG8uCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyc3RyaW5ncyk6IERpdHRvLgorCSogc3JjL3BzaGludGVyL3BzaHJlYy5jIChwc19tYXNrX3Rlc3RfYml0LCBwc19tYXNrX2NsZWFyX2JpdCwKKwlwc19tYXNrX3NldF9iaXQsIHBzX2RpbWVuc2lvbl9hZGRfdDFzdGVtLCBwc19oaW50c190MXN0ZW0zLAorCSogc3JjL3BzaGludGVyL3BzaGFsZ28xLmMgKHBzaDFfaGludF90YWJsZV9yZWNvcmQsCisJcHNoMV9oaW50X3RhYmxlX3JlY29yZF9tYXNrLCBwc2gxX2hpbnRfdGFibGVfYWN0aXZhdGVfbWFzayk6IERpdHRvLgorCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmMgKHBzaDJfaGludF90YWJsZV9yZWNvcmQsCisJcHNoMl9oaW50X3RhYmxlX3JlY29yZF9tYXNrLCBwc2gyX2hpbnRfdGFibGVfYWN0aXZhdGVfbWFzayk6IERpdHRvLgorCSogc3JjL3NmbnQvdHRwb3N0LmMgKExvYWRfRm9ybWF0XzIwLCBMb2FkX0Zvcm1hdF8yNSwKKwlUVF9HZXRfUFNfTmFtZSk6IERpdHRvLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfR2V0X01ldHJpY3MsIEdldF9ITWV0cmljcywKKwlsb2FkX3RydWV0eXBlX2dseXBoKTogRGl0dG8uCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX3N1YnJzLCBUMV9PcGVuX0ZhY2UpOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9HZXRfS2VybmluZyk6IERpdHRvLgorCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNtYW5hZy5oIChmdGNfZmFtaWx5X3RhYmxlX2ZyZWUpOiBEaXR0by4KKworMjAwMi0wMy0wNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCksIHNyYy9jaWQvY2lkb2Jqcy5jCisJKENJRF9GYWNlX0luaXQpOiBGaXhlZCBhbm90aGVyIGJ1ZyByZWxhdGVkIHRvIHRoZQorCWFzY2VuZGVyL2Rlc2NlbmRlci90ZXh0IGhlaWdodCBvZiBQb3N0c2NyaXB0IGZvbnRzLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAocHJpbnRfem9uZSk6IFJlbmFtZWQgdG8gLi4uCisJKHBzaDJfcHJpbnRfem9uZSk6IFRoaXMuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHJpbnRfem9uZSk6IFJlbmFtZWQgdG8gLi4uCisJKHBzaDFfcHJpbnRfem9uZSk6IFRoaXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwKKwlzcmMvYmFzZS9mdG9ianMuYzogQWRkaW5nIHRoZSBuZXcgRlRfTGlicmFyeV9WZXJzaW9uIEFQSSB0byByZXR1cm4KKwl0aGUgbGlicmFyeSdzIGN1cnJlbnQgdmVyc2lvbiBpbiBkeW5hbWljIGxpbmtzLgorCSogc3JjL2Jhc2UvZnRpbml0LmMgKEZUX0luaXRfRnJlZVR5cGUpOiBVcGRhdGVkLgorCisyMDAyLTAzLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmggKFBTSF9EaW1lbnNpb25SZWMpOiBzL3N0ZC9zdGR3Ly4KKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMgKHBzaF9nbG9iYWxfc2NhbGVfd2lkdGhzLAorCXBzaF9kaW1lbnNpb25fc25hcF93aWR0aCwgcHNoX2dsb2JhbHNfZGVzdHJveSwgcHNoX2dsb2JhbHNfbmV3KToKKwlEaXR0by4KKworMjAwMi0wMy0wNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCksIHNyYy9jZmYvY2Zmb2Jqcy5jCisJKENGRl9GYWNlX0luaXQpLCBzcmMvY2lkL2NpZG9ianMuYyAoQ0lEX0ZhY2VfSW5pdCk6IFJlbW92aW5nIHRoZSBidWcKKwl0aGF0IHJldHVybmVkIGdsb2JhbCBCQm94IHZhbHVlcyBpbiAxNi4xNiBmaXhlZCBmb3JtYXQgKGluc3RlYWQgb2YKKwlpbnRlZ2VyIGZvbnQgdW5pdHMpLgorCisJKiBzcmMvY2lkL2NpZHJpdmVyLmMgKGNpZF9nZXRfcG9zdHNjcmlwdF9uYW1lKTogRml4ZWQgYSBidWcgdGhhdAorCWNhdXNlZCB0aGUgQ0lEIGRyaXZlciB0byByZXR1cm4gUG9zdHNjcmlwdCBmb250IG5hbWVzIHdpdGggYSBsZWFkaW5nCisJc2xhc2ggKGAvJykgYXMgaW4gYC9NT0VLYWktUmVndWxhcicuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChUVF9Mb2FkX05hbWVzKSwgc3JjL3NmbnQvc2ZvYmpzLmMgKEdldF9OYW1lKSwKKwlzcmMvc2ZudC9zZmRyaXZlci5jIChnZXRfc2ZudF9wb3N0c2NyaXB0X25hbWUpOiBGaXhlZCB0aGUgbG9hZGVyIHNvCisJdGhhdCBpdCBhY2NlcHRzIGJyb2tlbiBmb250cyBsaWtlIGBmb3hqdW1wLnR0ZicsIHdoaWNoIG1hZGUgRnJlZVR5cGUKKwljcmFzaCB3aGVuIHRyeWluZyB0byBsb2FkIHRoZW0uCisKKwlBbHNvIGltcHJvdmVkIHRoZSBuYW1lIHRhYmxlIHBhcnNlciB0byBiZSBhYmxlIHRvIGxvYWQKKwlXaW5kb3dzLWVuY29kZWQgZW50cmllcyBiZWZvcmUgTWFjaW50b3NoIG9yIFVuaWNvZGUgb25lcywgc2luY2UgaXQKKwlzZWVtcyBzb21lIGZvbnRzIGRvbid0IGhhdmUgcmVsaWFibGUgdmFsdWVzIGhlcmUgYW55d2F5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzbmFtZXMuaDogQWRkIHR5cGVkZWYgZm9yCisJYFBTTmFtZXNfU2VydmljZScuCisKKzIwMDItMDMtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvYWNsb2NhbC5tNCwgYnVpbGRzL3VuaXgvbHRtYWluLnNoOiBVcGRhdGUgdG8gbGlidG9vbAorCTEuNC4yLgorCUFwcGx5IGEgc21hbGwgcGF0Y2ggZm9yIEFJWCB0byBtYWtlIHNoYXJlZCBsaWJyYXJpZXMgd29yayAodGhpcworCXBhdGNoIGlzIGFscmVhZHkgaW4gdGhlIENWUyB2ZXJzaW9uIG9mIGxpYnRvb2wpLgorCisJKiBidWlsZHMvdW5peC9jb25maWcuc3ViLCBidWlsZHMvdW5peC9jb25maWcuZ3Vlc3M6IFVwZGF0ZWQgdG8KKwlyZWNlbnQgdmVyc2lvbnMuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogRml4IHR5cG8KKwkoQUNfQ09ORklHX0ZJTEUtPkFDX0NPTkZJR19GSUxFUykuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKzIwMDItMDItMjggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNvbmZpZy5oOiBDaGFuZ2VkIGBGVF9MT0NBTCB4eHh4JyB0bworCWBGVF9MT0NBTCggeHh4eCApJyBldmVyeXdoZXJlIGluIHRoZSBzb3VyY2UuICBUaGUgc2FtZSBnb2VzIGZvcgorCWBGVF9MT0NBTF9ERUYgeHh4eCcgd2hpY2ggaXMgdHJhbnNsYXRlZCB0byBgRlRfTE9DQUxfREVGKCB4eHh4eCApJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUiwgRlJFRVRZUEVfUEFUQ0gpOgorCUNoYW5naW5nIHZlcnNpb24gdG8gMi4xLjAgdG8gaW5kaWNhdGUgYW4gdW5zdGFibGUgYnJhbmNoLgorCUFkZGVkIHRoZSBkZWNsYXJhdGlvbnMgb2YgRlRfR2V0X0ZpcnN0X0NoYXIgYW5kIEZUX0dldF9OZXh0X0NoYXIuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBJbXBsZW1lbnQgRlRfR2V0X0ZpcnN0X0NoYXIgYW5kCisJRlRfR2V0X05leHRfQ2hhci4KKworCSogaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oOiBSZW5hbWluZyBzdHJ1Y3R1cmUgdHlwZXMuICBUaGlzCisKKwkgIHR5cGVkZWYgIFQxX1N0cnVjdF8KKwkgIHsKKwkgIH0gVDFfU3RydWN0OworCisJYmVjb21lcworCisJICB0eXBlZGVmICBQU19TdHJ1Y3RSZWNfCisJICB7CisJICB9IFBTX1N0cnVjdFJlYywgKlBTX1N0cnVjdDsKKworCSAgdHlwZWRlZiBQU19TdHJ1Y3RSZWMgIFQxX1N0cnVjdDsgIC8qIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5ICovCisKKwlIZW5jZSwgd2UgaW5jcmVhc2UgdGhlIGNvaGVyZW5jeSBvZiB0aGUgc291cmNlIGNvZGUgYnkgZWZmZWN0aXZlbHkKKwl1c2luZyB0aGUgYFJlYycgcHJlZml4IGZvciBzdHJ1Y3R1cmUgdHlwZXMuCisKKzIwMDItMDItMjcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfTmFtZXMpOiBTaW1wbGlmeWluZyBhbmQgc2VjdXJpbmcgdGhlCisJbmFtZXMgdGFibGUgbG9hZGVyLiAgSW52YWxpZCBpbmRpdmlkdWFsIG5hbWUgZW50cmllcyBhcmUgbm93IGhhbmRsZWQKKwljb3JyZWN0bHkuICBUaGlzIGFsbG93cyB0aGUgbG9hZGluZyBvZiB2ZXJ5IGJ1Z2d5IGZvbnRzIGxpa2UKKwlgZm94anVtcC50dGYnIHdpdGhvdXQgYWxsb2NhdGluZyB0b25zIG9mIG1lbW9yeSBhbmQgY2F1c2luZyBjcmFzaGVzLgorCisJKiBzcmMvb3RsYXlvdXQvb3RsY29tbW9uLmgsIHNyYy9vdGxheW91dC9vdGxjb21tb24uYzogQWRkaW5nIChzdGlsbAorCWV4cGVyaW1lbnRhbCkgY29kZSBmb3IgT3BlblR5cGUgTGF5b3V0IHRhYmxlcyB2YWxpZGF0aW9uIGFuZAorCXBhcnNpbmcuCisKKwkqIHNyYy90eXBlMS90MWNtYXAuaCwgc3JjL3R5cGUxL3QxY21hcC5jOiBBZGRpbmcgKHN0aWxsCisJZXhwZXJpbWVudGFsKSBjb2RlIGZvciBUeXBlIDEgY2hhcm1hcCBwcm9jZXNzaW5nLgorCisJKiBzcmMvc2ZudC90dGNtYXAwLmM6IE5ldyBmaWxlLiAgSXQgY29udGFpbnMgYSBuZXcsIHN0aWxsCisJZXhwZXJpbWVudGFsIFNGTlQgY2hhcm1hcCBwcm9jZXNzaW5nIHN1cHBvcnQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg6IEFkZGluZyB2YWxpZGF0aW9uIHN1cHBvcnQgYXMKKwl3ZWxsIGFzIGludGVybmFsIGNoYXJtYXAgb2JqZWN0IGRlZmluaXRpb25zIChGVF9DTWFwICE9IEZUX0NoYXJNYXApLgorCisyMDAyLTAyLTI0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIFJlbmFtaW5nIHN0cmVhbSBmdW5jdGlvbnMgdG8gdGhlIEZUXzxTdWJqZWN0Pl88QWN0aW9uPiBzY2hlbWU6CisKKwkgIEZUX1NlZWtfU3RyZWFtICAgID0+IEZUX1N0cmVhbV9TZWVrCisJICBGVF9Ta2lwX1N0cmVhbSAgICA9PiBGVF9TdHJlYW1fU2tpcAorCSAgRlRfUmVhZF9TdHJlYW0gICAgPT4gRlRfU3RyZWFtX1JlYWQKKwkgIEZUX1JlYWRfU3RyZWFtX0F0ID0+IEZUX1N0cmVhbV9SZWFkX0F0CisJICBGVF9BY2Nlc3NfRnJhbWUgICA9PiBGVF9TdHJlYW1fRW50ZXJfRnJhbWUKKwkgIEZUX0ZvcmdldF9GcmFtZSAgID0+IEZUX1N0cmVhbV9FeGl0X0ZyYW1lCisJICBGVF9FeHRyYWN0X0ZyYW1lICA9PiBGVF9TdHJlYW1fRXh0cmFjdF9GcmFtZQorCSAgRlRfUmVsZWFzZV9GcmFtZSAgPT4gRlRfU3RyZWFtX1JlbGVhc2VfRnJhbWUKKwkgIEZUX0dldF9YWFhYICAgICAgID0+IEZUX1N0cmVhbV9HZXRfWFhYWAorCSAgRlRfUmVhZF9YWFhYICAgICAgPT4gRlRfU3RyZWFtX1JlYWRfWFhYWAorCisJICBGVF9OZXdfU3RyZWFtKCBmaWxlbmFtZSwgc3RyZWFtICkgPT4KKwkgICAgRlRfU3RyZWFtX09wZW4oIHN0cmVhbSwgZmlsZW5hbWUgKQorCisJICAgIChUaGUgZnVuY3Rpb24gZG9lc24ndCBjcmVhdGUgdGhlIEZUX1N0cmVhbSBzdHJ1Y3R1cmUsIGl0IHNpbXBseQorCSAgICBpbml0aWFsaXplcyBpdCBmb3IgcmVhZGluZy4pCisKKwkgIEZUX05ld19NZW1vcnlfU3RyZWFtKCBsaWJyYXJ5LCBGVF9CeXRlKiAgYmFzZSwgc2l6ZSwgc3RyZWFtICkgPT4KKwkgICAgRlRfU3RyZWFtX09wZW5fTWVtb3J5KCBzdHJlYW0sIGNvbnN0IEZUX0J5dGUqIGJhc2UsIHNpemUgKQorCisJICBGVF9Eb25lX1N0cmVhbSAgPT4gRlRfU3RyZWFtX0Nsb3NlCisJICBGVF9TdHJlYW1fSU8gICAgPT4gRlRfU3RyZWFtX0lPRnVuYworCSAgRlRfU3RyZWFtX0Nsb3NlID0+IEZUX1N0cmVhbV9DbG9zZUZ1bmMKKworCSAgZnRfY2xvc2Vfc3RyZWFtID0+IGZ0X2Fuc2lfc3RyZWFtX2Nsb3NlIChpbiBiYXNlL2Z0c3lzdGVtLmMgb25seSkKKwkgIGZ0X2lvX3N0cmVhbSAgICA9PiBmdF9hbnNpX3N0cmVhbV9pbyAgICAoaW4gYmFzZS9mdHN5c3RlbS5jIG9ubHkpCisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jOiBOZXcgZmlsZS4gIENvbnRhaW5zIGFsbCBtZW1vcnkgYW5kIGxpc3QKKwltYW5hZ2VtZW50IGNvZGUgKHByZXZpb3VzbHkgaW4gYGZ0b2Jqcy5jJyBhbmQgYGZ0bGlzdC5jJywKKwlyZXNwZWN0aXZlbHkpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBNb3ZpbmcgYWxsIGNvZGUgcmVsYXRlZCB0bworCWdseXBoIGxvYWRlcnMgdG8gLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmg6IFRoaXMgbmV3IGZpbGUuCisJYEZUX0dseXBoTG9hZGVyJyBpcyBub3cgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUKKwlgRlRfR2x5cGhMb2FkZXJSZWMnLgorCShmdF9nbHlwaF9vd25fYml0bWFwKTogUmVuYW1lZCB0byAuLi4KKwkoRlRfR0xZUEhfT1dOX0JJVE1BUCk6IFRoaXMuCisJKiBzcmMvYmFzZS9mdG9ianMuYzogTW92aW5nIGFsbCBjb2RlIHJlbGF0ZWQgdG8gZ2x5cGggbG9hZGVycworCXRvIC4uLgorCSogc3JjL2Jhc2UvZnRnbG9hZHIuYzogVGhpcyBuZXcgZmlsZS4KKworMjAwMi0wMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaCAoRlRfVHJhY2UpOiBSZW1vdmUgY29tbWEgaW4KKwllbnVtIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDAyLTAyLTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlNb2RpZmllZCB0aGUgZGVidWcgc3ViLXN5c3RlbSBpbml0aWFsaXphdGlvbi4gIFRyYWNlIGxldmVscyBjYW4gbm93CisJYmUgc3BlY2lmaWVkIHdpdGhpbiB0aGUgYEZUMl9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgdGhlCisJY29tbWVudHMgd2l0aGluIGBmdGRlYnVnLmMnIGZvciBtb3JlIGRldGFpbHMuCisKKwkqIHNyYy9iYXNlL2Z0ZGVidWcuYzogKEZUX1NldFRyYWNlTGV2ZWwpOiBSZW1vdmVkLgorCShmdF9kZWJ1Z19pbml0KTogTmV3IGZ1bmN0aW9uLgorCShmdF9kZWJ1Z19kdW1teSk6IFJlbW92ZWQuCisJVXBkYXRlZCB0byBjaGFuZ2VzIGluIGZ0ZGVidWcuaAorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaDogQWx3YXlzIGRlZmluZQorCUZUX0RFQlVHX0xFVkVMX0VSUk9SIGlmIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGlzIGRlZmluZWQuCisJKEZUX0Fzc2VydCk6IFJlbmFtZWQgdG8gLi4uCisJKEZUX0FTU0VSVCk6IFRoaXMuCisJU29tZSBzdHVmZiBmcm9tIGZ0ZGVidWcuaCBoYXMgYmVlbiBtb3ZlZCB0byAuLi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IE5ldyBmaWxlLCB0byBkZWZpbmUgdGhlIHRyYWNlCisJbGV2ZWxzIHVzZWQgZm9yIGRlYnVnZ2luZy4gIEl0IGlzIHVzZWQgYm90aCB0byBkZWZpbmUgZW51bXMgYW5kCisJdG9nZ2xlIG5hbWVzIGZvciBGVDJfREVCVUcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaDogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMsIHNyYy9iYXNlL2Z0c3RyZWFtLmM6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRleHRlbmQuaCwgc3JjL2Jhc2UvZnRleHRlbmQuYzoKKwlSZW1vdmVkLiAgQm90aCBmaWxlcyBhcmUgbm93IGNvbXBsZXRlbHkgb2Jzb2xldGUuCisJKiBzcmMvYmFzZS9KYW1maWxlLCBzcmMvYmFzZS9ydWxlcy5tazogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oOiBBZGRpbmcgYCN1bmRlZiBGVF9FUlJfQ0FUJyBhbmQKKwlgI3VuZGVmIEZUX0VSUl9YQ0FUJyB0byBhdm9pZCB3YXJuaW5ncyB3aXRoIGNlcnRhaW4gY29tcGlsZXJzIChsaWtlCisJTENDKS4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28yLmMgKHByaW50X3pvbmUpOiBSZW5hbWVkIHRvIC4uLgorCShwc2gyX3ByaW50X3pvbmUpOiBUaGlzIHRvIGF2b2lkIGVycm9ycyBkdXJpbmcgY29tcGlsYXRpb24gb2YgZGVidWcKKwlsaWJyYXJ5LgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoRlRfQ09NUE9ORU5UKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gYXMKKwlgdHJhY2Vfc21vb3RoJy4KKworMjAwMi0wMi0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBSRUFETUU6IEFkZGluZyBgZGV2ZWxAZnJlZXR5cGUub3JnJyBhZGRyZXNzIGZvciBidWcgcmVwb3J0cy4KKworMjAwMi0wMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChjaGVjayk6IE5ldyBkdW1teSB0YXJnZXQuCisJKC5QSE9OWSk6IEFkZCBpdC4KKworMjAwMi0wMi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKEZUX0NGTEFHUyk6IFVzZSAkKElOQ0xVREVfRkxBR1MpIGZpcnN0LgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX2NhY2hlX3Jlc2l6ZSk6IE1hcmsgYGVycm9yJyBhcyB1bnVzZWQKKwl0byBhdm9pZCBjb21waWxlciB3YXJuaW5nLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKENGRl9HZXRfU3RyaW5nKTogRGl0dG8uCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX1N0ckNvcHkpOiBEaXR0by4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoUFNfVGFibGVfRG9uZSk6IERpdHRvLgorCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9zZWVrX3RvX3RhYmxlX3R5cGUpOiBEaXR0by4KKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGdldF9zZm50X3Bvc3RzY3JpcHRfbmFtZSk6IERpdHRvLgorCShwY2ZfZ2V0X2JpdG1hcHMpOiBUaGUgc2FtZSBmb3IgYHNpemViaXRtYXBzJy4KKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jIChUMV9EZWNvZGVfUGFyc2VfQ2hhcnN0cmluZ3MpOiBUaGUgc2FtZSBmb3IKKwlgb3JpZ195Jy4KKwkodDFvcGVyYXRvcl9zZWFjKTogQ29tbWVudCBvdXQgbW9yZSBkZWFkIGNvZGUuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAocHMyX2hpbnRzX2FwcGx5KTogQWRkIGBERUJVR19ISU5URVInCisJY29uZGl0aW9uYWwuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwKKwlsb2FkX3RydWV0eXBlX2dseXBoKTogQWRkIGBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSJworCWNvbmRpdGlvbmFsLgorCisyMDAyLTAyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvaGludC9haGdseXBoLmMgKGFoX291dGxpbmVfbGlua19zZWdtZW50cyk6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZXMuCisJKiBzcmMvYXV0b2hpbnQvYWhoaW50LmMgKGFoX2FsaWduX3NlcmlmX2VkZ2UpOiBVc2UgRlRfVU5VU0VEIGluc3RlYWQKKwlvZiBVTlVTRUQuCisJKiBzcmMvYXV0b2hpbnQvYWhtb2R1bGUuYyAoZnRfYXV0b2hpbnRlcl9yZXNldCk6IERpdHRvLgorCSogc3JjL3BzaGludGVyL3BzaHJlYy5jIChwc19tYXNrX3RhYmxlX21lcmdlKTogRml4IHR5cG8gaW4gdmFyaWFibGUKKwlzd2FwcGluZyBjb2RlLgorCSogc3JjL3BzaGludGVyL3BzaGdsb2IuaCAoUFNIX0JsdWVfQWxpZ24pOiBBZGQgUFNIX0JMVUVfQUxJR05fTk9ORS4KKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMgKHBzaF9ibHVlc19zbmFwX3N0ZW0pOiBVc2UgaXQuCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzEuYyAocHNoMV9oaW50X3RhYmxlX29wdGltaXplKTogRGl0dG8uCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnbzIuYyAocHNoMl9oaW50X2FsaWduKTogRGl0dG8uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChVTlVTRUQpOiBSZW1vdmVkLgorCisyMDAyLTAyLTEwICBSb2JlcnRvIEFsYW1lZGEgIDxvamFuY2Fub0BnZWVrbWFpbC5kZT4KKworCUFkZCBzdXBwb3J0IGZvciBJU09MYXRpbjEgUFMgZW5jb2RpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoZnRfZW5jb2RpbmdfbGF0aW5fMSk6IE5ldyB0YWcKKwkoYGxhdDEnKS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9FbmNvZGluZ19UeXBlKTogQWRkCisJYHQxX2VuY29kaW5nX2lzb2xhdGluMScuCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAoR2V0X0NoYXJfSW5kZXgsIEdldF9OZXh0X0NoYXIpOiBIYW5kbGUKKwlmdF9lbmNvZGluZ19sYXRpbl8xLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9lbmNvZGluZyk6IEhhbmRsZSBgSVNPTGF0aW4xRW5jb2RpbmcnLgorCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9GYWNlX0luaXQpOiBIYW5kbGUgYHQxX2VuY29kaW5nX2lzb2xhdGluMScuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDItMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKK2luZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CitmdWxseS4KKworCitMb2NhbCBWYXJpYWJsZXM6Cit2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCitjb2Rpbmc6IHV0Zi04CitFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvQ2hhbmdlTG9nLjIyIGIvZnJlZXR5cGUtMi42L0NoYW5nZUxvZy4yMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM1ODc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L0NoYW5nZUxvZy4yMgpAQCAtMCwwICsxLDI4MzcgQEAKKzIwMDYtMDUtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCisJKiBWZXJzaW9uIDIuMi4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMi0xJy4KKworMjAwNi0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weSAocmVfc291cmNlX2tleXdvcmRzKTogQWRkIHdvcmQKKwlib3VuZGFyeSBtYXJrZXJzLgorCSogc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkgKHJlX2ZpZWxkKTogQWxsb3cgYC4nIGluIGZpZWxkIG5hbWVzCisJKGJ1dCBub3QgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQpLgorCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoaHRtbF9oZWFkZXJfMSk6IFVzZSBgdXRmLTgnIGNoYXJzZXQuCisJKGJsb2NrX2Zvb3Rlcik6IFNwbGl0IGludG8uLi4KKwkoYmxvY2tfZm9vdGVyX3N0YXJ0LCBibG9ja19mb290ZXJfbWlkZGxlLCBibG9ja19mb290ZXJfZW5kKTogVGhpcyB0bworCWFkZCBuYXZpZ2F0aW9uIGJ1dHRvbnMuCisJKEh0bWxGb3JtYXR0ZXI6OmJsb2NrX2V4aXQpOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlLyo6IE1hbnkgbWlub3IgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMgKGFkZGluZworCWxpbmtzLCBzcGVsbGluZyBlcnJvcnMsIGV0Yy4pLgorCisyMDA2LTA1LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFJFQURNRTogTWlub3IgdXBkYXRlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS8qOiBzL3NjYWxlL3NjYWxpbmcgdmFsdWUvIHdoZXJlIGFwcHJvcHJpYXRlLgorCU1hbnkgb3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5IChyZV9pdGFsaWMsIHJlX2JvbGQpOiBIYW5kbGUKKwl0cmFpbGluZyBwdW5jdHVhdGlvbi4KKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6Om1ha2VfaHRtbF93b3JkKTogQWRkCisJd2FybmluZyBtZXNzYWdlIGZvciB1bmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlcy4KKwlVcGRhdGUgaGFuZGxpbmcgb2YgcmVfaXRhbGljIGFuZCByZV9ib2xkLgorCisyMDA2LTA1LTExICBNYXNhdGFrZSBZQU1BVE8gIDxqZXRAZ3l2ZS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX1N0cmVhbV9PcGVuKTogQ2hlY2sgZXJybm8gb25seSBpZgorCXJlYWQgc3lzdGVtIGNhbGwgcmV0dXJucyAtMS4KKwlSZW1vdmUgYSByZWR1bmRhbnQgcGFyZW50aGVzaXMuCisKKzIwMDYtMDUtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYyAoRlRfU3RyZWFtX09wZW4pOiBBdm9pZCBpbmZpbml0ZSBsb29wIGlmCisJZ2l2ZW4gYW4gZW1wdHksIHVuLW1tYXAoKWFibGUgZmlsZS4gIFJlcG9ydGVkIGFuZCBzdWdnZXN0ZWQgZml4IGluCisJU2F2YW5uYWggYnVnICMxNjU1NS4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpOiBXcml0ZS1wcm90ZWN0IHRoZSBgZG9jbWFrZXInCisJZGlyZWN0b3J5IHRvIHN1cHByZXNzIGdlbmVyYXRpb24gb2YgLnB5YyBmaWxlcy4gIEFjY29yZGluZyB0byB0aGUKKwlQeXRob24gZG9jcyB0aGVyZSBpc24ndCBhIG1vcmUgZWxlZ2FudCBzb2x1dGlvbiAoY3VycmVudGx5KS4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rIChkaXN0KTogTmV3IHRhcmdldCB3aGljaCBidWlsZHMgLnRhci5neiwKKwkudGFyLmJ6MiwgYW5kIC56aXAgZmlsZXMuICBOb3RlIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGlzIHN0aWxsCisJaGFyZC1jb2RlZC4KKwkoZG8tZGlzdCk6IFN1Yi10YXJnZXQgb2YgYGRpc3QnLgorCShDT05GSUdfR1VFU1MsIENPTkZJR19TVUIpOiBOZXcgdmFyaWFibGVzLgorCSguUEhPTlkpOiBVcGRhdGVkLgorCisyMDA2LTA1LTA5ICBSYWplZXYgUGFodWphICA8cnBhaHVqYUBlc3JpLmNvbT4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuc2xuLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvajogVXBncmFkZWQgdG8gVlMuTkVUIDIwMDUgZnJvbQorCVZTLk5FVCAyMDAzCisJQWRkZWQgZmlsZXMgZnRiYm94LmMsIGZ0dHlwZTEuYywgZnR3aW5mbnQuYywgZnRzeW50aC5jLgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sOiBVcGRhdGVkLgorCisyMDA2LTA1LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlQdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbnRvIHRoZSBjb25maWd1cmUgc2NyaXB0LiAgUmVwb3J0ZWQgYnkgUGF1bAorCVdhdHNvbiA8cHdhdHNvbkByZWRsaW5lcHkuY29tPi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjOiBSZW5hbWVkIHRvLi4uCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBUaGlzIHdoaWNoIG5vdyBzZXJ2ZXMgKHdpdGggYXBwcm9wcmlhdGUKKwltb2RpZmljYXRpb25zKSBhcyBhIHRlbXBsYXRlIGZvciBjb25maWd1cmUuYWMuCisKKwkqIHZlcnNpb24uc2VkOiBOZXcgc2NyaXB0LgorCisJKiBhdXRvZ2VuLnNoOiBHZW5lcmF0ZSBjb25maWd1cmUuYWMgZnJvbSBjb25maWd1cmUucmF3LCB1c2luZworCUZSRUVUWVBFX01BSk9SLCBGUkVFVFlQRV9NSU5PUiwgYW5kIEZSRUVUWVBFX1BBVENIIGZyb20gZnJlZXR5cGUuaC4KKworMjAwNi0wNS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDEuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MTA6My4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvZnJlZXR5cGUubWsgKHJlZmRvYyksCisJSmFtZmlsZSAoUmVmRG9jKSwgUkVBRE1FOiBzLzIyMC8yMjEvLCBzLzIuMi4wLzIuMi4xLy4KKwlNaW5vciB1cGRhdGVzLgorCisJKiBkb2NzL0NIQU5HRVMsIGRvY3MvVkVSU0lPTi5ETEwsIGRvY3MvUFJPQkxFTVMsIFJFQURNRS5DVlM6CisJVXBkYXRlZC4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC1zaDogVXBkYXRlZCBmcm9tIGB0ZXhpbmZvJyBDVlMgbW9kdWxlIGF0CisJc2F2YW5uYWguZ251Lm9yZy4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogU3luY2hyb25pemUgd2l0aAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmguCisKKzIwMDYtMDUtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2x6dy9mdGx6dzIuYzogUmVuYW1lZCB0by4uLgorCSogc3JjL2x6dy9mdGx6dy5jOiBUaGlzLgorCisJKiBzcmMvbHp3L0phbWZpbGUsIHNyYy9sencvcnVsZXMubWs6IFVwZGF0ZWQuCisKKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dDogVXBkYXRlZC4KKworMjAwNi0wNS0wMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJQWxsb3cgY29tcGlsYXRpb24gYWdhaW4gd2l0aCBDKysgY29tcGlsZXJzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggKEZUX0FTU0lHTlAsCisJRlRfQVNTSUdOUF9JTk5FUik6IE5ldyBtYWNyb3Mgd2hpY2ggZG8gdGhlIGFjdHVhbCBhc3NpZ25tZW50LCBhbmQKKwl3aGljaCBleGlzdCBpbiB0d28gdmFyaWFudHMgKGZvciBDIGFuZCBDKyspLgorCVVwZGF0ZSBjYWxsZXJzIGFjY29yZGluZ2x5LgorCisyMDA2LTA1LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX1NUUklDVF9BTElBU0lORyk6IFJlbW92ZWQuCisKKzIwMDYtMDUtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oOiBzL25ldy9uZXdzei8gKGZvciBDKyspLgorCShGVF9BTExPQyk6IFJlbW92ZSByZWR1bmRhbnQgcmVkZWZpbml0aW9uLgorCisJKiBidWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tayAoQ0ZMQUdTKSBbZysrXTogRG9uJ3QgdXNlCisJYC1Xc3RyaWN0LXByb3RvdHlwZXMnLgorCisJKiBzcmMvYmFzZS9mdHN0cmVhbS5jIChGVF9TdHJlYW1fRW50ZXJGcmFtZSk6IEFkZCBjYXN0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9CQVNFX0RFRikgW19fY3BsdXNwbHVzXToKKwlSZW1vdmUgYGV4dGVybicuCisKKzIwMDYtMDUtMDIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVVwZGF0ZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFuZCBtYWNyb3MgdG8gc2FmZWx5IGRlYWwKKwl3aXRoIGFycmF5IHNpemUgYnVmZmVyIG92ZXJmbG93cy4gIFRoaXMgY29ycmVzcG9uZHMgdG8gYXR0ZW1wdHMgdG8KKwlhbGxvY2F0ZSBhcnJheXMgdGhhdCBhcmUgdG9vIGxhcmdlLiAgRm9yIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZQorCWZvbGxvd2luZyBjb2RlOgorCisJICBjb3VudCA9IHJlYWRfdWludDMyX2Zyb21fZmlsZSgpOyBhcnJheSA9IG1hbGxvYyggc2l6ZW9mICggSXRlbSApICoKKwkgIGNvdW50ICk7IGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisJICAgIGFycmF5W25uXSA9IHJlYWRfaXRlbV9mcm9tX2ZpbGUoKTsKKworCUlmIGBjb3VudCcgaXMgbGFyZ2VyIHRoYW4gYEZUX1VJTlRfTUFYL3NpemVvZihJdGVtKScsIHRoZQorCW11bHRpcGxpY2F0aW9uIG92ZXJmbG93cywgYW5kIHRoZSBhcnJheSBhbGxvY2F0ZWQgb3Mgc21hbGxlciB0aGFuCisJdGhlIGRhdGEgcmVhZCBmcm9tIHRoZSBmaWxlLiAgSW4gdGhpcyBjYXNlLCB0aGUgaGVhcCB3aWxsIGJlCisJdHJhc2hlZCwgYW5kIHRoaXMgY2FuIGJlIHVzZWQgYXMgYSBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2ssIG9yIG1ha2UKKwl0aGUgZW5naW5lIGNyYXNoIGxhdGVyLgorCisJVGhlIEZUX0FSUkFZX05FVyBhbmQgRlRfQVJSQVlfUkVORVcgbWFjcm9zIG5vdyBlbnN1cmUgdGhhdCB0aGUgbmV3CisJY291bnQgaXMgbm8gbGFyZ2VyIHRoYW4gYEZUX0lOVF9NQVgvaXRlbV9zaXplJywgb3RoZXJ3aXNlIGEgbmV3CisJZXJyb3IgY29kZSBgRlRfRXJyX0FycmF5X1Rvb19MYXJnZScgd2lsbCBiZSByZXR1cm5lZC4KKworCU5vdGUgdGhhdCB0aGUgbWVtb3J5IGRlYnVnZ2VyIG5vdyB3b3JrcyBhZ2FpbiB3aGVuIEZUX0RFQlVHX01FTU9SWQorCWlzIGRlZmluZWQuICBGVF9TVFJJQ1RfQUxJQVNJTkcgaGFzIGRpc2FwcGVhcmVkOyB0aGUgY29ycmVzcG9uZGluZworCWNvZGUgaXMgbm93IHRoZSBkZWZhdWx0LgorCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX0JBU0VfREVGKSBbIV9fY3BsdXNwbHVzXToKKwlEb24ndCB1c2UgYGV4dGVybicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCAoRlRfRXJyX0FycmF5X1Rvb19MYXJnZSk6IE5ldyBlcnJvcgorCWNvZGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfREVCVUdfSU5ORVIpCisJW0ZUX0RFQlVHX01FTU9SWV06IE5ldyBtYWNyby4KKwkoZnRfbWVtX3JlYWxsb2MsIGZ0X21lbV9xcmVhbGxvYyk6IFBhc3MgbmV3IG9iamVjdCBzaXplIGNvdW50IGFsc28uCisJKGZ0X21lbV9hbGxvY19kZWJ1ZywgZnRfbWVtX3FhbGxvY19kZWJ1ZywgZnRfbWVtX3JlYWxsb2NfZGVidWcsCisJZnRfbWVtX3FyZWFsbG9jX2RlYnVnLCBmdF9tZW1fZnJlZV9kZWJ1Zyk6IFJlbW92ZWQuCisJKEZUX01FTV9BTExPQywgRlRfTUVNX1JFQUxMT0MsIEZUX01FTV9RQUxMT0MsIEZUX01FTV9RUkVBTExPQywKKwlGVF9NRU1fRlJFRSk6IFJlZGVmaW5lLgorCShGVF9NRU1fTkVXX0FSUkFZLCBGVF9NRU1fUkVORVdfQVJSQVksIEZUX01FTV9RTkVXX0FSUkFZLAorCUZUX01FTV9RUkVORVdfQVJSQVkpOiBSZWRlZmluZS4KKwkoRlRfQUxMT0NfTVVMVCwgRlRfUkVBTExPQ19NVUxULCBGVF9NRU1fUUFMTE9DX01VTFQsCisJRlRfTUVNX1FSRUFMTE9DX01VTFQpOiBOZXcgbWFjcm9zLiAgVXBkYXRlIGNhbGxlcnMgd2hlcmUKKwlhcHByb3ByaWF0ZS4KKwkoRlRfTUVNX1NFVF9FUlJPUik6IFNsaWdodGx5IHJlZGVmaW5lLgorCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKF9mdF9kZWJ1Z19maWxlLCBfZnRfZGVidWdfbGluZW5vKQorCVtGVF9ERUJVR19NRU1PUlldOiBOZXcgZ2xvYmFsIHZhcmlhYmxlcywgcmVwbGFjaW5nLi4uCisJKEZUX01lbVRhYmxlX1JlYykgW0ZUX0RFQlVHX01FTU9SWV06IFJlbW92ZSBgZmlsZW5hbWUnIGFuZAorCWBsaW5lX25vJy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoZnRfbWVtX2RlYnVnX2FsbG9jKSBbRlRfREVCVUdfTUVNT1JZXTogQXZvaWQgcG9zc2libGUgaW50ZWdlcgorCW92ZXJmbG93LgorCShmdF9tZW1fYWxsb2NfZGVidWcsIGZ0X21lbV9yZWFsbG9jX2RlYnVnLCBmdF9tZW1fcWFsbG9jX2RlYnVnLAorCWZ0X21lbV9xcmVhbGxvY19kZWJ1ZywgZnRfbWVtX2ZyZWVfZGVidWcpOiBSZW1vdmVkLgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIChyZWFkX2x3Zm4pOiBDYXRjaCBpbnRlZ2VyIG92ZXJmbG93LgorCSogc3JjL2Jhc2UvZnRyZm9yay5jIChyYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKTogRGl0dG8uCisJKiBzcmMvYmFzZS9mdHV0aWwuYzogUmVtb3ZlIHNwZWNpYWwgY29kZSBmb3IgRlRfU1RSSUNUX0FMSUFTSU5HLgorCShmdF9tZW1fYWxsb2MsIGZ0X21lbV9yZWFsbG9jLCBmdF9tZW1fcXJlYWxsb2MpOiBSZXdyaXRlLgorCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzdHJlYW0uaCAoRlRfRlJBTUVfRU5URVIsIEZUX0ZSQU1FX0VYSVQsCisJRlRfRlJBTUVfRVhUUkFDVCwgRlRfRlJBTUVfUkVMRUFTRSk6IFVzZSBGVF9ERUJVR19JTk5FUiB0byByZXBvcnQgdGhlCisJcGxhY2Ugd2hlcmUgdGhlIGZyYW1lcyB3ZXJlIGVudGVyZWQsIGV4dHJhY3RlZCwgZXhpdGVkIG9yIHJlbGVhc2VkCisJaW4gdGhlIG1lbW9yeSBkZWJ1Z2dlci4KKworCSogc3JjL2Jhc2UvZnRzdHJlYW0uYyAoRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSkgW0ZUX0RFQlVHX01FTU9SWV06CisJQ2FsbCBmdF9tZW1fZnJlZS4KKwkoRlRfU3RyZWFtX0VudGVyRnJhbWUpIFtGVF9ERUJVR19NRU1PUlldOiBVc2UgZnRfbWVtX3FhbGxvYy4KKwkoRlRfU3RyZWFtX0V4aXRGcmFtZSkgW0ZUX0RFQlVHX01FTU9SWV06IFVzZSBmdF9tZW1fZnJlZS4KKworMjAwNi0wNC0zMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBDb3JyZWN0IHBmYl9wb3MKKwlpbml0aWFsaXphdGlvbiwgcmVtb3ZlIGV4dHJhIGNhc3QgdG8gY29weSB0byBwZmJfbGVucG9zLiAgVGhpcyBmaXhlcworCXBhcnNpbmcgb2YgUEZCIGZvbnRzIHdpdGggTWFjT1MgcmVzb3VyY2UgZm9yayAoYnVnIGludHJvZHVjZWQKKwkyMDAzLTA5LTExKS4gIFBhdGNoIHByb3ZpZGVkIGJ5IEh1aWItSmFuIEltYmVucyA8ZnRAaW1iZW5zLm5sPi4KKworMjAwNi0wNC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRnVydGhlciBDIGxpYnJhcnkgYWJzdHJhY3Rpb24uICBCYXNlZCBvbiBhIHBhdGNoIGZyb20KKwltc24yQGJpZHl1dC5jb20uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggKEZUX0NIQVJfQklULCBGVF9GSUxFLAorCWZ0X2ZvcGVuLCBmdF9mY2xvc2UsIGZ0X2ZzZWVrLCBmdF9mdGVsbCwgZnRfZnJlYWQsIGZ0X3NtYWxsb2MsCisJZnRfc2NhbGxvYywgZnRfc3JlYWxsb2MsIGZ0X3NmcmVlLCBmdF9sYWJzKTogTmV3IHdyYXBwZXIgbWFjcm9zIGZvcgorCUMgbGlicmFyeSBmdW5jdGlvbnMuICBVcGRhdGUgYWxsIHVzZXJzIGFjY29yZGluZ2x5IChhbmQgY2F0Y2ggc29tZQorCW90aGVyIHBsYWNlcyB3aGVyZSB0aGUgQyBsaWJyYXJ5IGZ1bmN0aW9uIHdhcyB1c2VkIGluc3RlYWQgb2YgdGhlCisJd3JhcHBlciBmdW5jdGlvbnMpLgorCisJKiBzcmMvYmFzZS9mdHN5c3RlbS5jOiBEb24ndCBpbmNsdWRlIHN0ZGlvLmggYW5kIHN0ZGxpYi5oLgorCSogc3JjL2d6aXAvenV0aWwuaCBbTVNET1MgJiYgIShfX1RVUkJPQ19fIHx8IF9fQk9STEFORENfXyldOiBEb24ndAorCWluY2x1ZGUgbWFsbG9jLmguCisKKworCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGRhdGFyb290ZGlyKTogRGVmaW5lLCBmb3IgYXV0b2NvbmYgMi41OWMKKwlhbmQgZm9ydGhjb21pbmcgdmVyc2lvbnMuCisKKzIwMDYtMDQtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2x6dy9mdGx6dy5jLCBzcmMvbHp3L3pvcGVuLmMsIHNyYy9sencvem9wZW4uaDogUmVtb3ZlZCwKKwlvYnNvbGV0ZS4KKworMjAwNi0wNC0yNyAgeWkgbHVvICA8bHVveWkubHlAZ21haWwuY29tPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2o6IFVwZGF0ZWQuCisKKzIwMDYtMDQtMjYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCisJKiBWZXJzaW9uIDIuMiByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi0yLTAnLgorCisyMDA2LTA0LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAoc2hpZnRfZWxlbWVudHMpOiBEb24ndCB1c2UgRlRfTG9uZyBidXQKKwlGVF9QdHJEaWZmIGZvciBgZGVsdGEnLiAgUmVwb3J0ZWQgYnkgQ8OpbGluZSBQSUxMRVQKKwk8Q2VsaW5lLlBpbGxldEBUYWdnaW5mby5jb20+LgorCisyMDA2LTA0LTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaDogRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCShGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2UpOiBOZXcgdHlwZWRlZi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaDoKKwlEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogRG9jdW1lbnRhdGlvbiB1cGRhdGUuCisJKEZUX0hBU19GQVNUX0dMWVBIUyk6IEFsd2F5cyBzZXQgdG8gMC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oLCBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyX05ldyk6CisJVGFrZSBhbiBGVF9MaWJyYXJ5IGFyZ3VtZW50IGluc3RlYWQgb2YgRlRfTWVtb3J5LgorCisJKiBzcmMvc2ZudC90dGNtYXAuYzogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzIChnY2MtNC4wLjIpLgorCisyMDA2LTA0LTEzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9pbml0LCBhZl9sb2FkZXJfbG9hZF9nKTogUmVtb3ZlCisJc3VwZXJmbHVvdXMgY29kZSBpbiB0aGUgYXV0by1maXR0ZXIncyBsb2FkZXIuCisKKzIwMDYtMDQtMDUgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2EvbWFrZWZpbGUsIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQsCisJYnVpbGRzL2FtaWdhL3NtYWtlZmlsZTogQWRkZWQgRlQyX0JVSUxEX0xJQlJBUlkgZGVmaW5lLgorCisyMDA2LTA0LTAzICBsdW95aSAgPGx1b3lpLmx5QGdtYWlsLmNvbT4KKworCSogYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5tayAoVEUpOiBOZXcgdmFyaWFibGUuCisJKEFOU0lGTEFHUyk6IFVwZGF0ZWQuCisKKzIwMDYtMDQtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL2V4cG9ydHMubWsgKGNsZWFuX3N5bWJvbHNfbGlzdCwgY2xlYW5fYXBpbmFtZXMpOiBSZW1vdmVkLgorCShDTEVBTik6IEFkZCAkKEVYUE9SVFNfTElTVCkgYW5kICQoQVBJTkFNRVNfRVhFKS4KKwkoLlBIT05ZKTogVXBkYXRlZC4KKworCSogY29uZmlndXJlLmFjOiBNaW5vciBmaXhlcyB0byBpbXByb3ZlIC0taGVscCBvdXRwdXQuCisKKworCSogZG9jcy9QUk9CTEVNUzogTmV3IGZpbGUuCisKKzIwMDYtMDQtMDEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaCwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaDoKKwlVcGRhdGUgZG9jdW1lbnRhdGlvbiBjb21tZW50cy4KKworMjAwNi0wNC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rICh1bmluc3RhbGwpOiBEb24ndCBoYW5kbGUgYGNhY2hlJworCWRpcmVjdG9yeSB3aGljaCBubyBsb25nZXIgZXhpc3RzLgorCisyMDA2LTAzLTI5ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogc3JjL3BzYXV4L3BzY29udi5jOiBDaGFuZ2VkIHNvbWUgdmFyaWFibGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0bworCWhvbGQgbmVnYXRpdmUgdmFsdWVzIGZyb20gYGNoYXInIHRvIGBGVF9DaGFyJyB0byBhbGxvdyBidWlsZGluZyB3aXRoCisJYSBjb21waWxlciB3aGVyZSBgY2hhcicgaXMgdW5zaWduZWQgYnkgZGVmYXVsdC4KKworMjAwNi0wMy0yNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC90dGtlcm4uYyAodHRfZmFjZV9nZXRfa2VybmluZyk6IEZpeCBhIHNlcmlvdXMgYnVnIHRoYXQKKwljYXVzZXMgc29tZSBwcm9ncmFtcyB0byBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBkZWFsaW5nIHdpdGgKKwlmb250cyB0aGF0IGRvbid0IGhhdmUgYSBwcm9wZXJseSBzb3J0ZWQga2VybmluZyBzdWItdGFibGUuCisKKzIwMDYtMDMtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoRVJSTVNHNCk6IE5ldyBtYWNyby4KKwkoX2JkZl9wYXJzZV9nbHlwaHMpOiBIYW5kbGUgaW52YWxpZCBCQlggdmFsdWVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggKEZUX0Vycl9CYnhfVG9vX0JpZyk6IE5ldyBlcnJvcgorCW1hY3JvLgorCisyMDA2LTAzLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5IChodG1sX2hlYWRlcl8yKTogQWRkIGhvcml6b250YWwKKwlwYWRkaW5nIGJldHdlZW4gdGFibGUgZWxlbWVudHMuCisJKGh0bWxfaGVhZGVyXzEpOiBUaGUgYERPQ1RZUEUnIGNvbW1lbnQgbXVzdCBiZSBpbiB1cHBlcmNhc2UuCisJKG1ha2VfaHRtbF9wYXJhKTogQ29udmVydCBgLi4uJyBxdW90YXRpb25zIGludG8gcmVhbCBsZWZ0IGFuZAorCXJpZ2h0IHNpbmdsZSBxdW90ZXMuCisJVXNlIGBwYXJhX2hlYWRlcicgYW5kIGBwYXJhX2Zvb3RlcicuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5IChyZV9ib2xkLCByZV9pdGFsaWMpOiBBY2NlcHQgIiciCisJYWxzby4KKworMjAwNi0wMy0yMyAgRGF2aWQgVHVybmVyIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGQgRlRfR2V0X1N1YkdseXBoX0luZm8gQVBJIHRvIHJldHJpZXZlIHN1YmdseXBoIGRhdGEuICBOb3RlIHRoYXQKKwl3ZSBkbyBub3QgZXhwb3NlIHRoZSBGVF9TdWJHbHlwaFJlYyBzdHJ1Y3R1cmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaCAoRlRfU1VCR0xZUEhfRkxBR1NfKik6IE1vdmVkCisJdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfU1VCR0xZUEhfRkxBR1NfKik6IEhlcmUuCisJKEZUX0dldF9TeWJHbHlwaF9JbmZvKTogTmV3IGRlY2xhcmF0aW9uLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X1N1YkdseXBoX0luZm8pOiBOZXcgZnVuY3Rpb24uCisKKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyk6IENvbXB1dGUgbHNiX2RlbHRhIGFuZAorCXJzYl9kZWx0YSBjb3JyZWN0bHkgaW4gZWRnZSBjYXNlcy4KKworMjAwNi0wMy0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYywgKGZ0Y19ub2RlX21ydV91cCwgRlRDX0NhY2hlX0xvb2t1cCkKKwlbIUZUQ19JTkxJTkVdOiBDb21waWxlIGNvbmRpdGlvbmFsbHkuCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuaDogVXBkYXRlZC4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmMgKEZUQ19HTm9kZV9Jbml0LCBGVENfR05vZGVfVW5zZWxlY3RGYW1pbHksCisJRlRDX0dOb2RlX0RvbmUsIEZUQ19HTm9kZV9Db21wYXJlLCBGVENfRmFtaWx5X0luaXQsIEZUQ19HQ2FjaGVfTmV3KToKKwlzL0ZUX0VYUE9SVC9GVF9MT0NBTC8uCisJKEZUQ19HQ2FjaGVfSW5pdCwgRlRDX0dDYWNoZV9Eb25lKTogQ29tbWVudGVkIG91dC4KKwkoRlRDX0dDYWNoZV9Mb29rdXApIFshRlRDX0lOTElORV06IENvbXBpbGUgY29uZGl0aW9uYWxseS4KKwlzL0ZUX0VYUE9SVC9GVF9MT0NBTC8uCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguaDogVXBkYXRlZC4KKworCSogc3JjL2NhY2hlL2Z0Y2ltYWdlLmMgKEZUQ19JTm9kZV9GcmVlLCBGVENfSU5vZGVfTmV3KToKKwlzL0ZUX0VYUE9SVC9GVF9MT0NBTC8uCisJKEZUQ19JTm9kZV9XZWlnaHQpOiBDb21tZW50ZWQgb3V0LgorCSogc3JjL2NhY2hlL2Z0Y2ltYWdlLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9jYWNoZS9mdG1hbmFnLmMgKEZUQ19NYW5hZ2VyX0NvbXByZXNzLAorCUZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGUsIEZUQ19NYW5hZ2VyX0ZsdXNoTik6CisJcy9GVF9FWFBPUlQvRlRfTE9DQUwvLgorCSogc3JjL2NhY2hlL2Z0bWFuYWcuaDogVXBkYXRlZC4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKEZUQ19TTm9kZV9GcmVlLCBGVENfU05vZGVfTmV3LAorCUZUQ19TTm9kZV9Db21wYXJlKTogcy9GVF9FWFBPUlQvRlRfTE9DQUwvLgorCShGVENfU05vZGVfV2VpZ2h0KTogQ29tbWVudGVkIG91dC4KKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5oOiBVcGRhdGVkLgorCisyMDA2LTAzLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jLCBzcmMvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX05vZGVfRGVzdHJveSk6CisJUmVtb3ZlLCB1bnVzZWQuCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmg6IFJlbW92ZSwgdW51c2VkLgorCisJKiBzcmMvY2FjaGUvcnVsZXMubWsgKENBQ0hFX0RSVl9IKTogUmVtb3ZlIGZ0Y2NtYXAuaC4KKworMjAwNi0wMy0yMSAgWmhlIFN1ICA8amFtZXMuc3VAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogSW1wcm92ZQorCWFsZ29yaXRobS4KKworMjAwNi0wMy0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9DaGFyc2V0UmVjKTogQWRkIGBtYXhfY2lkJyBtZW1iZXIuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfY2hhcnNldF9sb2FkKTogU2V0IGBjaGFyc2V0LT5tYXhfY2lkJy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKTogQ2hhbmdlIHR5cGUgb2YgdGhpcmQgcGFyYW1ldGVyCisJdG8gYEZUX1VJbnQnLgorCUNoZWNrIHJhbmdlIG9mIGBnbHlwaF9pbmRleCcuCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmg6IFVwZGF0ZWQuCisKKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBIYW5kbGUgaW52YWxpZCBvZmZzZXQKKwljb3JyZWN0bHkuCisKKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpLCBkb2NzL0NIQU5HRVMsIEphbWZpbGUgKFJlZkRvYyksCisJUkVBRE1FOiBzLzIuMS4xMC8yLjIvLgorCisyMDA2LTAzLTIxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19zY2FsZSk6IEZpeCBzbWFsbCBidWcKKwl0aGF0IGNyYXNoZXMgdGhlIGF1dG8taGludGVyIChpbnRyb2R1Y2VkIGJ5IHByZXZpb3VzIHBhdGNoKS4KKworMjAwNi0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKENBQ0hFX0RJUiwgQ0FDSEVfSCk6IFJlbW92ZS4KKwkoRlJFRVRZUEVfSCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jYWNoZS9ydWxlcy5tayAoQ0FDSEVfSF9ESVIpOiBSZW1vdmUuCisJKENBQ0hFX0RSVl9IKTogVXBkYXRlZC4KKworMjAwNi0wMy0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2NhY2hlLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNjbWFwLmgsIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjZ2x5cGguaAorCWluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjaW1hZ2UuaCBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21hbmFnLmgKKwlpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y21ydS5oIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjc2JpdHMuaDoKKwlNb3ZlIHRvLi4uCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5oLCBzcmMvY2FjaGUvZnRjZ2x5cGguaCwgc3JjL2NhY2hlL2Z0Y2ltYWdlLmgsCisJc3JjL2NhY2hlL2Z0Y3NiaXRzLmgsIHNyYy9jYWNoZS9mdGNtYW5hZy5oLCBzcmMvY2FjaGUvZnRjY21hcC5oLAorCXNyYy9jYWNoZS9mdGNtcnUuaDogVGhpcyBuZXcgbG9jYXRpb24uCisJVXBkYXRlIGRlY2xhcmF0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKwlzb3VyY2UgZmlsZXMuCisKKwlOb3RlIHRoYXQgdGhlc2UgZmlsZXMgYXJlIG5vdCB1c2VkIGJ5IEZyZWVUeXBlIGNsaWVudHM7IGFsbCBwdWJsaWMKKwlBUElzIG9mIHRoZSBjYWNoZSBtb2R1bGUgaGF2ZSBiZWVuIGFscmVhZHkgbW92ZWQgdG8KKwlgaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgnLCBhbmQgYWxsIEZUX0NBQ0hFX0lOVEVSTkFMX1hYWFhfSAorCW1hY3JvcyByZXNvbHZlIHRvIGl0LgorCisJUmVhc29uIGZvciB0aGUgbW92ZSBpcyB0byBhbGxvdyBtb2RpZmljYXRpb25zIG9mIHRoZSBpbnRlcm5hbHMKKwl3aXRob3V0IGludGVyZmVyZW5jZXMgd2l0aCByb2d1ZSBjbGllbnRzLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBubworCWtub3duIGNsaWVudHMgdGhhdCBhY2Nlc3MgdGhlIGNhY2hlIGludGVybmFscyBhdCB0aGUgbW9tZW50LgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChpbnN0YWxsKTogRG9uJ3QgaW5zdGFsbCBoZWFkZXJzIGZyb20KKwkkKENBQ0hFX0gpLgorCVJlbW92ZSBgZnJlZXR5cGUvY2FjaGUnIGZyb20gdGhlIHRhcmdldCBkaXJlY3RvcnkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0NBQ0hFX01BTkFHRVJfSCwKKwlGVF9DQUNIRV9JTlRFUk5BTF9NUlVfSCwgRlRfQ0FDSEVfSU5URVJOQUxfTUFOQUdFUl9ILAorCUZUX0NBQ0hFX0lOVEVSTkFMX0NBQ0hFX0gsIEZUX0NBQ0hFX0lOVEVSTkFMX0dMWVBIX0gsCisJRlRfQ0FDSEVfSU5URVJOQUxfSU1BR0VfSCwgRlRfQ0FDSEVfSU5URVJOQUxfU0JJVFNfSCk6IFBvaW50IHRvCisJRlRfQ0FDSEVfSC4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMsIHNyYy9jYWNoZS9mdGNjYWNoZS5oLCBzcmMvY2FjaGUvZnRjY2JhY2suaCwKKwlzcmMvY2FjaGUvZnRjY21hcC5jLCBzcmMvY2FjaGUvZnRjZ2x5cGguYywgc3JjL2NhY2hlL2Z0Y2dseXBoLmgsCisJc3JjL2NhY2hlL2Z0Y2ltYWdlLmMsIHNyYy9jYWNoZS9mdGNpbWFnZS5oLCBzcmMvY2FjaGUvZnRjbWFuYWcuYywKKwlzcmMvY2FjaGUvZnRjbWFuYWcuaCwgc3JjL2NhY2hlL2Z0Y21ydS5oLCBzcmMvY2FjaGUvZnRjc2JpdHMuYywKKwlzcmMvY2FjaGUvZnRjc2JpdHMuaDogRG9uJ3QgdXNlIHRoZSBGVF9DQUNIRV9JTlRFUk5BTF9YWFhfSCBtYWNyb3MKKwlidXQgaW5jbHVkZSB0aGUgaGVhZGVycyBkaXJlY3RseSAod2hpY2ggYXJlIG5vdyBpbiBgc3JjL2NhY2hlJykuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jOiAgRG9uJ3QgdXNlIHRoZSBGVF9DQUNIRV9JTlRFUk5BTF9YWFhfSAorCW1hY3JvcyBidXQgaW5jbHVkZSB0aGUgaGVhZGVycyBkaXJlY3RseS4KKwkoRlRDX0NhY2hlX0luaXQsIEZUQ19DYWNoZV9Eb25lLCBGVENfQ2FjaGVfTmV3Tm9kZSwKKwlGVENfQ2FjaGVfTG9va3VwLCBGVENfQ2FjaGVfUmVtb3ZlRmFjZUlEKTogRGVjbGFyZSBhcyBGVF9MT0NBTF9ERUYuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jOiAgRG9uJ3QgdXNlIHRoZSBGVF9DQUNIRV9JTlRFUk5BTF9YWFhfSAorCW1hY3JvcyBidXQgaW5jbHVkZSB0aGUgaGVhZGVycyBkaXJlY3RseS4KKwkoRlRDX01ydU5vZGVfUHJlcGVuZCwgRlRDX01ydU5vZGVfVXAsIEZUQ19NcnVOb2RlX1JlbW92ZSwKKwlGVENfTXJ1TGlzdF9Jbml0LCBGVENfTXJ1TGlzdF9SZXNldCwgRlRDX01ydUxpc3RfRG9uZSwKKwlGVENfTXJ1TGlzdF9OZXcsIEZUQ19NcnVMaXN0X1JlbW92ZSwgRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKToKKwlEZWNsYXJlIGFzIEZUX0xPQ0FMX0RFRi4KKwkoRlRDX01ydUxpc3RGaW5kLCBGVENfTXJ1TGlzdF9Mb29rdXApIFshRlRDX0lOTElORV06IENvbXBpbGUKKwljb25kaXRpb25hbGx5LgorCURlY2xhcmUgYXMgRlRfTE9DQUxfREVGLgorCisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcDogVXBkYXRlIHByb2plY3QgZmlsZSwgYWRkCisJbWlzc2luZyBiYXNlIHNvdXJjZSBmaWxlcyAoZnRzdHJva2UuYywgZnR4Zjg2LmMsIGV0Yy4pLgorCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMsIHNyYy9hdXRvZml0L2FmbGF0aW4uYywgc3JjL2Jhc2UvZnRvYmpzLmMsCisJc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9jaWQvY2lkb2Jqcy5jLCBzcmMvcGZyL3Bmcm9ianMuYywKKwlzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRtdHguYywgc3JjL3R5cGUxL3QxYWZtLmMsCisJc3JjL3R5cGUxL3Qxb2Jqcy5jOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBidWlsZGluZyB3aXRoCisJVmlzdWFsIEMrKyA2IGFuZCAvVzQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfaW5pdCk6IERpc2FibGUgaG9yaXpvbnRhbAorCWhpbnRpbmcgZm9yIGl0YWxpYy9vYmxpcXVlIGZvbnRzLgorCisKKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYywgc3JjL3RydWV0eXBlL3R0cGxvYWQuaAorCSh0dF9mYWNlX2dldF9kZXZpY2VfbWV0cmljcyk6IENoYW5nZSBzZWNvbmQgYXJndW1lbnQgdG8gYEZUX1VJbnQnLgorCisyMDA2LTAzLTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTWFuYWdlcl9Mb29rdXBfU2l6ZSk6IFByZXZlbnQgY3Jhc2hlcyBpbgorCU1vemlsbGEvRmlyZUZveCBwcmludCBwcmV2aWV3IGluIFVidW50dSBIb2FyeS4KKworMjAwNi0wMi0yOCAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9tZW1fcWFsbG9jKSBbRlRfU1RSSUNUX0FMSUFTSU5HXTogRG8gbm90CisJcmV0dXJuIGVycm9yIHdoZW4gc2l6ZSA9PSAwLgorCisyMDA2LTAyLTI4ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0RvbmVfTGlicmFyeSk6IFJlbW92ZSBtb2R1bGVzIGluIHJldmVyc2UKKwlvcmRlciBzbyB0aGF0IHR5cGU0MiBtb2R1bGUgaXMgcmVtb3ZlZCBiZWZvcmUgdHJ1ZXR5cGUgbW9kdWxlLiAgVGhpcworCWF2b2lkcyBkb3VibGUgZnJlZSBpbiBzb21lIG9jY2FzaW9ucy4KKworMjAwNi0wMi0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBSZWxlYXNlIGNhbmRpZGF0ZSBWRVItMi0yLTAtUkM0LgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKzIwMDYtMDItMjggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIG1vZHVsZXMuY2ZnIChCQVNFX0VYVEVOU0lPTlMpOiBDb21waWxlIGluIGZ0Z3h2YWwuYyBieSBkZWZhdWx0IHRvCisJYnVpbGQgZnR2YWxpZCBpbiBmdDJkZW1vcy4gIEl0IHdvcmtzIGFzIGR1bW15IEFCSSBpZiBneHZhbGlkIGlzIG5vdAorCWJ1aWx0LgorCisyMDA2LTAyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjY2FjaGUuaAorCVtGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFNdOiBSZW1vdmUgZGVjbGFyYXRpb24gb2YKKwlmdGNfbm9kZV9kb25lLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfZGVzdHJveSkKKwlbIUZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMU106IE1hcmsgYXMgRlRfTE9DQUxfREVGLiAgVGhpcworCXNob3VsZCBub3cgZml4IGFsbCBwb3NzaWJsZSBjb21waWxhdGlvbiBvcHRpb25zLgorCisyMDA2LTAyLTI3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9tZW1fYWxsb2MsIGZ0X21lbV9xYWxsb2MsIGZ0X21lbV9yZWFsbG9jLAorCWZ0X21lbV9xcmVhbGxvYyk6IFJldHVybiBhbiBlcnJvciBpZiBhIG5lZ2F0aXZlIHNpemUgaXMgcGFzc2VkIGluCisJcGFyYW1ldGVycy4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKGZ0Y19ub2RlX2Rlc3Ryb3kpOiBNYXJrIGFzIEZUX0JBU0VfREVGIHNpbmNlCisJaXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgZm9yIHJvZ3VlIGNsaWVudHMuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMgKHBzaF9ibHVlc19zZXRfem9uZXNfMCk6IFByZXZlbnQgcHJvYmxlbXMKKwl3aXRoIG1hbGZvcm1lZCBmb250cyB3aGljaCBoYXZlIGFuIG9kZCBudW1iZXIgb2YgYmx1ZSB2YWx1ZXMgKHRoZXNlCisJYXJlIGJyb2tlbiBhY2NvcmRpbmcgdG8gdGhlIHNwZWNzKS4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpLCBzcmMvdHlwZTEvdDFsb2FkLmMKKwkoVDFfT3Blbl9GYWNlKTogTW9kaWZ5IHRoZSBsb2FkZXJzIHRvIGZvcmNlIGV2ZW4tbmVzcyBvZgorCWBudW1fYmx1ZV92YWx1ZXMnLgorCisJKGNmZl9pbmRleF9hY2Nlc3NfZWxlbWVudCk6IElnbm9yZSBpbnZhbGlkIGVudHJpZXMgaW4gaW5kZXggZmlsZXMuCisKKzIwMDYtMDItMjcgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZSk6IENoZWNrIHRoZSBjYXNlIHdoZXJlIHdpZHRoCisJb3IgaGVpZ2h0IGlzIDAuCisKKzIwMDYtMDItMjcgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dDogVXBkYXRlIHRvIG5ldyBoZWFkZXIKKwlpbmNsdXNpb24gaW50cm9kdWNlZCBvbiAyMDA2LTAyLTE2LgorCisyMDA2LTAyLTI3ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEdSSURfRklUX01FVFJJQ1MpOiBOZXcgbWFjcm8uCisJKGZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzLCBGVF9Mb2FkX0dseXBoKSBbR1JJRF9GSVRfTUVUUklDU106CisJUmUtZW5hYmxlIGdseXBoIG1ldHJpY3MgZ3JpZC1maXR0aW5nLiAgSXQgaXMgbm93IGRvbmUgaW4gdGhlIGJhc2UKKwlsYXllci4KKwkoRlRfU2V0X0NoYXJfU2l6ZSwgRlRfU2V0X1BpeGVsX1NpemVzKTogTWFrZSBzdXJlIHRoZSB3aWR0aCBhbmQKKwloZWlnaHQgYXJlIG5vdCB0b28gc21hbGwgb3IgdG9vIGxhcmdlLCBqdXN0IGxpa2Ugd2Ugd2VyZSBkb2luZyBpbgorCTIuMS4xMC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyk6IFRoZSB2ZXJ0aWNhbCBtZXRyaWNzCisJYXJlIG5vdCBzY2FsZWQuCisKKzIwMDYtMDItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9yZWxlYXNlOiBNaW5vciBhZGRpdGlvbnMgYW5kIGNsYXJpZmljYXRpb25zLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQgdG8gcmVmbGVjdCBtYW55IGZpeGVzIGZvciBiYWNrd2FyZHMKKwljb21wYXRpYmlsaXR5LiAgU3RpbGwgaW5jb21wbGV0ZS4KKworMjAwNi0wMi0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfcmVjb21wdXRlX3NjYWxlZF9tZXRyaWNzKTogUmUtZW5hYmxlCisJY29uc2VydmF0aXZlIHJvdW5kaW5nIG9mIG1ldHJpY3MgdG8gYXZvaWQgYnJlYWtpbmcgY2xpZW50cyBsaWtlCisJUGFuZ28gKHNlZSBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjc4NTIpLgorCisyMDA2LTAyLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRldmVsL2Z0b3B0aW9uLmg6IFN5bmNocm9uaXplIHdpdGgKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoZnRjX25vZGVfZGVzdHJveSk6IFVzZSBGVF9MT0NBTF9ERUYgKGFnYWluKS4KKworMjAwNi0wMi0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFzIHdlbGwgYXMgQysrIGNvbXBpbGF0aW9uIHByb2JsZW1zLgorCUFkZCBtaXNzaW5nIHByb3RvdHlwZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMsIHNyYy9iYXNlL2Z0b2Jqcy5jLCBzcmMvYmFzZS9mdHV0aWwuYywKKwlzcmMvYmRmL2JkZmRyaXZyLmMsIHNyYy9jZmYvY2ZmY21hcC5jLCBzcmMvY2ZmL2NmZm9ianMuYywKKwlzcmMvcHNhdXgvYWZtcGFyc2UuYywsIHNyYy9wc2F1eC90MWNtYXAuYywgc3JjL3Ntb290aC9mdGdyYXlzLmMKKwlzcmMvdG9vbHMvYXBpbmFtZXMuYywgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmM6IEFkZCB2YXJpb3VzIGNhc3RzLAorCWluaXRpYWxpemUgdmFyaWFibGVzLCBhbmQgZGVjb3JhdGUgZnVuY3Rpb25zIHdpdGggRlRfQ0FMTEJBQ0tfREVGLAorCWV0Yy4sIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncyAoYW5kIEMrKyBjb21waWxpbmcgZXJyb3JzKS4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmM6IEZpeCBgLVdtaXNzaW5nLXByb3RvdHlwZXMnIHdhcm5pbmdzIHdpdGgKKwlnY2MuCisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmM6IERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19IIGJ1dAorCUZUX0lOVEVSTkFMX1NUUkVBTV9ILgorCisJKiBzcmMvYmFzZS9mdHN5c3RlbS5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ILgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9QRlJfSCk6IE5ldyBtYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoRlRfU1RSSUNUX0FMSUFTSU5HKTogRG9uJ3QKKwlkZWZpbmUgZm9yIEMrKy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmg6IERvbid0IGluY2x1ZGUKKwlGVF9PUEVOVFlQRV9WQUxJREFURV9IIGJ1dCBGVF9JTlRFUk5BTF9WQUxJREFURV9ILgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmg6IEluY2x1ZGUgRlRfUEZSX0guCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jOiBJbmNsdWRlIEZUX0daSVBfSC4KKworCSogc3JjL2x6dy9mdGx6dy5jLCBzcmMvbHp3L2Z0bHp3Mi5jOiBJbmNsdWRlIEZUX0xaV19ILgorCisJKiBzcmMvc2ZudC90dGJkZi5jICh0dF9mYWNlX2xvYWRfYmRmX3Byb3BzKTogUmVhcnJhbmdlIGNvZGUuCisKKzIwMDYtMDItMjQgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX09VVExJTkVfR0VUX0NPTlRPVVIsIGZ0X2NvbnRvdXJfaGFzLAorCWZ0X2NvbnRvdXJfZW5jbG9zZWQsIGZ0X291dGxpbmVfZ2V0X29yaWVudGF0aW9uKTogQ29tbWVudGVkIG91dC4gIFdlCisJaGF2ZSB0byB3YWl0IHVudGlsIGBGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCcgaXMgc3RhYmlsaXplZC4KKwkoRlRfT3V0bGluZV9FbWJvbGRlbik6IFVzZSBgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24nLgorCisyMDA2LTAyLTI0ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oIChGVF9CaXRtYXBfRW1ib2xkZW4pOiBVcGRhdGUKKwlkb2N1bWVudGF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaCAoRlRfR2x5cGhTbG90X093bl9CaXRtYXApLAorCXNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X093bl9CaXRtYXApOiBOZXcgZnVuY3Rpb24gdG8gbWFrZQorCXN1cmUgYSBnbHlwaCBzbG90IG93bnMgaXRzIGJpdG1hcC4gIEl0IGlzIGFsc28gbWFya2VkIGV4cGVyaW1lbnRhbAorCWFuZCBkdWUgdG8gY2hhbmdlLgorCShGVF9HbHlwaFNsb3RfRW1ib2xkZW4pOiBVbmRvIHRoZSBsYXN0IGNoYW5nZS4gIEl0IHR1cm5zIG91dCB0aGF0CisJcmVuZGVyaW5nIHRoZSBvdXRsaW5lIGNvbmZ1c2VzIHNvbWUgYXBwbGljYXRpb25zLgorCisyMDA2LTAyLTI0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIFJlbGVhc2UgY2FuZGlkYXRlIFZFUi0yLTItMC1SQzMuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJKiBzcmMvY2FjaGUvZnRjYmFzaWMuYzogQ29ycmVjdCBjb21wYXRpYmlsaXR5IGhhY2sgYnVnLgorCisyMDA2LTAyLTI0ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9TaXplX1JlcXVlc3RSZWMpOiBDaGFuZ2UgdGhlIHR5cGUKKwlvZiBgd2lkdGgnIGFuZCBgaGVpZ2h0JyB0byBgRlRfTG9uZycuCisJKGVudW0gRlRfU2l6ZV9SZXF1ZXN0X1R5cGUpLCBzcmMvYmFzZS9mdG9ianMuYyAoRlRfUmVxdWVzdF9NZXRyaWNzKToKKwlOZXcgcmVxdWVzdCB0eXBlIGBGVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVMnIHRvIHNwZWNpZnkgdGhlIHNjYWxlcworCWRpcmVjdGx5LgorCisyMDA2LTAyLTIzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlUd28gQkRGIHBhdGNoZXMgZnJvbSBEZWJpYW4gbGliZnJlZXR5cGU2IGZvciAyLjEuMTAuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKTogRml4IGEgYnVnIHdpdGggemVyby13aWR0aAorCWdseXBocy4KKwlGaXggYSBwcm9ibGVtIHdpdGggbGFyZ2UgZW5jb2RpbmdzLgorCisKKwlGaXggYmluYXJ5IGNvbXBhdGliaWxpdHkgaXNzdWVzIGZvciBnbnVzdGVwLWJhY2sgKEdOVXN0ZXAgYmFja2VuZAorCW1vZHVsZSkgd2hpY2ggc3RpbGwgY3Jhc2hlcyB1bmRlciBTYXJnZS4KKworCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoRlRDX09sZENNYXBUeXBlLCBGVENfT2xkQ01hcElkUmVjLAorCUZUQ19PbGRDTWFwRGVzYykgW0ZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMU106IE5ldyBkYXRhCisJc3RydWN0dXJlcyBhbmQgZW51bWVyYXRpb25zLgorCShGVENfQ01hcENhY2hlX0xvb2t1cCkgW0ZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMU106IE5ldworCWNvbXBhdGliaWxpdHkgY29kZS4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmM6IEZpeCBhIHNpbGx5IGJ1ZyB0aGF0IHByZXZlbnRlZCBvdXIgYGhhY2snIHRvCisJc3VwcG9ydCByb2d1ZSBjbGllbnRzIGNvbXBpbGVkIGFnYWluc3QgMi4xLjcgdG8gd29yayBjb3JyZWN0bHkuCisJVGhpcyBwcm9iYWJseSBleHBsYWlucyB0aGUgR05Vc3RlcCBjcmFzaGVzIHdpdGggdGhlIHNlY29uZCByZWxlYXNlCisJY2FuZGlkYXRlLgorCisyMDA2LTAyLTIzICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmggKGVudW0gRlRfT3JpZW50YXRpb24pOiBOZXcgdmFsdWUKKwlgRlRfT1JJRU5UQVRJT05fTk9ORScuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT1VUTElORV9HRVRfQ09OVE9VUiwgZnRfY29udG91cl9oYXMsCisJZnRfY29udG91cl9lbmNsb3NlZCwgZnRfb3V0bGluZV9nZXRfb3JpZW50YXRpb24pOiBBbm90aGVyIHZlcnNpb24gb2YKKwlgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24nLiAgVGhpcyB2ZXJzaW9uIGRpZmZlcnMgZnJvbSB0aGUgcHVibGljCisJb25lIGluIHRoYXQgZWFjaCBwYXJ0IChjb250b3VyIG5vdCBlbmNsb3NlZCBpbiBhbm90aGVyIGNvbnRvdXIpIG9mIHRoZQorCW91dGxpbmUgaXMgY2hlY2tlZCBmb3Igb3JpZW50YXRpb24uCisJKEZUX091dGxpbmVfRW1ib2xkZW4pOiBVc2UgYGZ0X291dGxpbmVfZ2V0X29yaWVudGF0aW9uJy4KKworCSogc3JjL2Jhc2UvZnRzeW50aC5jIChGVF9HbHlwaFNsb3RfRW1ib2xkZW4pOiBSZW5kZXIgdGhlIG91dGxpbmUgYW5kCisJdXNlIGJpdG1hcCdzIGVtYm9sZGVuIHJvdXRpbmUgd2hlbiB0aGUgb3V0bGluZSBvbmUgZmFpbGVkLgorCisyMDA2LTAyLTIyICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogbW9kdWxlcy5jZmc6IENvbXBpbGUgaW4gZnRvdHZhbC5jIGFuZCBmdHhmODYuYyBieSBkZWZhdWx0IGZvciBBQkkKKwljb21wYXRpYmlsaXR5LgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9kb25lX2ZhY2UpOiBGaXggYSBtZW1vcnkgbGVhay4KKworCSogc3JjL3NmbnQvdHRzYml0MC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZCwKKwl0dF9zYml0X2RlY29kZXJfbG9hZF9ieXRlX2FsaWduZWQpIFtGVF9PUFRJTUlaRV9NRU1PUlldOiBGaXggc2JpdAorCWxvYWRpbmcuICAoT25seSB0ZXN0ZWQgd2l0aCBiaXQgYWxpZ25lZCBzYml0IHdpdGggeF9wb3MgPT0gMC4pCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfbG9hZF9oZG14LAorCXR0X2ZhY2VfZ2V0X2RldmljZV9tZXRyaWNzKSBbRlRfT1BUSU1JWkVfTUVNT1JZXTogYGhkbXgnIGlzIG5vdAorCWFjdHVhbGx5IHVzZWQuCisKKzIwMDYtMDItMjEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUFkZCBhIG5ldyBBUEkgbmFtZWQgRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlIHRvIGRldGVybWluZSB3aGV0aGVyCisJd2UgaGF2ZSBhIHBhdGVudGVkLCB1bnBhdGVudGVkLCBvciB1bmltcGxlbWVudGVkIFRydWVUeXBlIGJ5dGVjb2RlCisJaW50ZXJwcmV0ZXIuCisKKwlUaGUgRlRfR2V0X01vZHVsZV9GbGFncyBBUEkgd2FzIHJlbW92ZWQgY29uc2VxdWVudGx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmggKEZUX01vZHVsZV9HZXRfRmxhZ3MpOiBSZW1vdmVkLgorCVJlcGxhY2VkIHdpdGguLi4KKwkoRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlKTogVGhpcy4KKwkoRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlKTogTmV3IGVudW1lcmF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9IKToKKwlOZXcgbWFjcm8uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0guCisJKEZUX01vZHVsZV9HZXRfRmxhZ3MpOiBSZW1vdmVkLiAgUmVwbGFjZWQgd2l0aC4uLgorCShGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUpOiBUaGlzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9ILgorCSh0dF9zZXJ2aWNlX3RydWV0eXBlX2VuZ2luZSk6IE5ldyBzZXJ2aWNlIHN0cnVjdHVyZS4KKwkodHRfc2VydmljZXMpOiBSZWdpc3RlciBpdC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg6IE5ldyBmaWxlLgorCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IEZpeCBzaWxseSBidWcgdGhhdCBwcmV2ZW50ZWQKKwllbWJlZGRlZCBiaXRtYXBzIGZyb20gYmVpbmcgY29ycmVjdGx5IGxpc3RlZCBhbmQgdXNlZC4KKworCisJKiBzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2xvYWRfaG10eCk6IERpc2FibGUgbWVtb3J5IG9wdGltaXphdGlvbgorCWlmIEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyBpcyB1c2VkLiAgVGhlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCisJbGliWGZvbnQgaXMgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBITVRYIGRhdGEsIHVuZm9ydHVuYXRlbHkuCisJRml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCisJKHR0X2ZhY2VfZ2V0X21ldHJpY3MpOiBEaXR0by4KKworCisJKiBzcmMvcGZyL3BmcnNiaXQuYyAocGZyX3Nsb3RfbG9hZF9iaXRtYXApOiBGaXggaGFuZGxpbmcgb2YKKwljaGFyYWN0ZXIgYWR2YW5jZXMuCisKKzIwMDYtMDItMjAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVN1cHBvcnQgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgWC5Pcmcgc2VydmVyJ3MgWGZvbnQgbGlicmFyeS4KKwlOb3RlIHRoYXQgdGhpcyBjaGFuZ2UgdW5mb3J0dW5hdGVseSBwcmV2ZW50cyBtZW1vcnkgb3B0aW1pemF0aW9ucworCWZvciB0aGUgZW1iZWRkZWQgYml0bWFwIGxvYWRlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfSW50ZXJmYWNlKTogTW92ZQorCWBzZXRfc2JpdF9zdHJpa2UnIGFuZCBgbG9hZF9zYml0X21ldHJpY3MnIGZpZWxkcyB0byB0aGUgbG9jYXRpb24gb2YKKwl2ZXJzaW9uIDIuMS44LgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jICh0dF9mYWNlX3NldF9zYml0X3N0cmlrZV9zdHViKTogQ2FsbAorCUZUX1NpemVfUmVxdWVzdC4KKwkoc2ZudF9pbnRlcmZhY2UpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyBbRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTXTogRG9uJ3QgbG9hZAorCXR0c2JpdDAuYy4KKwkodHRfbG9hZF9zYml0X21ldHJpY3MpOiBNYWtlIGBzYml0X3NtYWxsX21ldHJpY3NfZmllbGRzJyBzdGF0aWMuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5oOiBVcGRhdGVkLgorCisyMDA2LTAyLTE3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L3VuaXgtY2MuaW4gKExJTktfTElCUkFSWSk6IERvbid0IGZpbHRlciBvdXQgZXhwb3J0ZWQKKwlmdW5jdGlvbnMgYW55bW9yZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBGVF9CQVNFIGludGVybmFsIGZ1bmN0aW9ucworCWFyZSBhdmFpbGFibGUgZm9yIGR5bmFtaWMgbGlua2luZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmggKEZUQ19JTUFHRV9UWVBFX0NPTVBBUkUsCisJRlRDX0lNQUdFX1RZUEVfSEFTSCksIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChGVENfT2xkRm9udFJlYywKKwlGVENfT2xkSW1hZ2VEZXNjUmVjLCBGVENfSW1hZ2VDYWNoZV9Mb29rdXAsIEZUQ19JbWFnZV9DYWNoZV9OZXcsCisJRlRDX09sZEltYWdlX0Rlc2MsIEZUQ19PTERfSU1BR0VfRk9STUFULCBmdGNfb2xkX2ltYWdlX3h4eCwKKwlmdGNfaW1hZ2VfdHlwZV9mcm9tX29sZF9kZXNjLCBGVENfSW1hZ2VfQ2FjaGVfTG9va3VwLAorCUZUQ19TQml0Q2FjaGVfTG9va3VwLCBGVENfU0JpdF9DYWNoZV9OZXcsIEZUQ19TQml0X0NhY2hlX0xvb2t1cCkKKwlbRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTXTogVHJ5IHRvIHJldml2ZSBvbGQgZnVuY3Rpb25zIG9mIHRoZQorCWNhY2hlIHN1Yi1zeXN0ZW0uICBXZSB0cnkgdG8gcmVjb2duaXplIG9sZCBsZWdhY3kgc2lnbmF0dXJlcyB3aXRoIGEKKwlncm9zcyBoYWNrIChob3BlIGl0IHdvcmtzKS4KKworMjAwNi0wMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkZXZlbC9mdG9wdGlvbi5oOiBTeW5jaHJvbml6ZSB3aXRoCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaC4KKworMjAwNi0wMi0xNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJTWFzc2l2ZSBjaGFuZ2VzIHRvIHRoZSBpbnRlcm5hbHMgdG8gcmVzcGVjdCB0aGUgaW50ZXJuYWwgb2JqZWN0CisJbGF5b3V0cyBhbmQgZXhwb3J0ZWQgZnVuY3Rpb25zIG9mIEZyZWVUeXBlIDIuMS43LiAgTm90ZSB0aGF0IHRoZQorCWNhY2hlIHN1Yi1zeXN0ZW0gY2Fubm90IGJlIGZ1bGx5IHJldHJvZml0dGVkLCB1bmZvcnR1bmF0ZWx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyk6IE5ldyBtYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgsIGluY2x1ZGUvZnJlZXR5cGUvY2FjaGUvZnRjY2FjaGUuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlL2Z0Y2NtYXAuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgsIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oLCBzcmMvYmFzZS9mdGNhbGMuYywKKwlzcmMvYmFzZS9mdGRiZ21lbS5jLCBzcmMvYmFzZS9mdG9ianMuYywgc3JjL2Jhc2UvZnR1dGlsLmMsCisJc3JjL2JkZi9iZGZkcml2ci5jLCBzcmMvY2FjaGUvZnRjY2FjaGUuYywgc3JjL2NhY2hlL2Z0Y2NiYWNrLmgsCisJc3JjL2NhY2hlL2Z0Y21hbmFnLmMsIHNyYy9jZmYvY2ZmZHJpdnIuYywgc3JjL2NpZC9jaWRyaXZlci5jLAorCXNyYy9wY2YvcGNmZHJpdnIuYywgc3JjL3Bmci9wZnJkcml2ci5jLCBzcmMvcHNhdXgvcHNhdXhtb2QuYywKKwlzcmMvc2ZudC9zZmRyaXZlci5jLCBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYywgc3JjL3R5cGUxL3QxZHJpdmVyLmMsCisJc3JjL3R5cGUxL3Qxb2Jqcy5jLCBzcmMvdHlwZTQyL3Q0MmRyaXZyLmMsIHNyYy93aW5mb250cy93aW5mbnQuYzoKKwlVc2UgRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTIHRvIHJldml2ZSBvbGQgZnVuY3Rpb25zIGFuZCBkYXRhCisJc3RydWN0dXJlcy4KKworCU1vdmUgbmV3bHkgYWRkZWQgc3RydWN0dXJlIGVsZW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGFmZmVjdGVkCisJc3RydWN0dXJlIGFuZCBhZGQgc3R1YiBmaWVsZHMgKGlmIEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyBpcworCWRlZmluZWQpIHRvIGFzc3VyZSBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIEZyZWVUeXBlCisJdmVyc2lvbnMuCisJVXNlIEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyB0byBhZGQgZnVuY3Rpb24gc3R1YnMgZm9yIG9sZAorCWZ1bmN0aW9uczoKKworCSAgZnRfc3R1Yl9zZXRfY2hhcl9zaXplcworCSAgZnRfc3R1Yl9zZXRfcGl4ZWxfc2l6ZXMKKworCVJlbmFtZSB0aGUgZm9sbG93aW5nIGludGVybmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZSBvbGQgZnVuY3Rpb24KKwluYW1lcyBhcyBzdHViczoKKworCSAgRlRfQWxsb2MgICAgICAgICAgLT4gZnRfbWVtX2FsbG9jCisJICBGVF9RQWxsb2MgICAgICAgICAtPiBmdF9tZW1fcWFsbG9jCisJICBGVF9SZWFsbG9jICAgICAgICAtPiBmdF9tZW1fcmVhbGxvYworCSAgRlRfUVJlYWxsb2MgICAgICAgLT4gZnRfbWVtX3FyZWFsbG9jCisJICBGVF9GcmVlICAgICAgICAgICAtPiBmdF9tZW1fZnJlZQorCSAgRlRfQWxsb2NfRGVidWcgICAgLT4gZnRfbWVtX2FsbG9jX2RlYnVnCisJICBGVF9RQWxsb2NfRGVidWcgICAtPiBmdF9tZW1fcWFsbG9jX2RlYnVnCisJICBGVF9SZWFsbG9jX0RlYnVnICAtPiBmdF9tZW1fcmVhbGxvY19kZWJ1ZworCSAgRlRfUVJlYWxsb2NfRGVidWcgLT4gZnRfbWVtX3FyZWFsbG9jX2RlYnVnCisJICBGVF9GcmVlX0RlYnVnICAgICAtPiBmdF9tZW1fZnJlZV9kZWJ1ZworCisyMDA2LTAyLTE1ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfRmFjZV9JbnRlcm5hbFJlYyk6IFJlbW92ZQorCXVudXNlZCBgbWF4X3BvaW50cycgYW5kIGBtYXhfY29udG91cnMnLgorCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfaW5pdCksIHNyYy90eXBlMS90MW9ianMuYworCShUMV9GYWNlX0luaXQpLCBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IFVwZGF0ZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBSZW1vdmUgdW51c2VkCisJYG1heF9jb21wb25lbnRzJy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggKFRUX0V4ZWNDb250ZXh0UmVjKTogUmVtb3ZlIHVudXNlZAorCWBsb2FkU2l6ZScgYW5kIGBsb2FkU3RhY2snLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfRG9uZV9Db250ZXh0LCBUVF9Mb2FkX0NvbnRleHQpLAorCXNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbWF4cCk6IFVwZGF0ZS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmggKGNmZl9zaXplX3NlbGVjdCksIHNyYy9zZm50L3NmZHJpdmVyLmMKKwkoc2ZudF9pbnRlcmZhY2UpLCBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogRml4CisJY29tcGlsZXIgZXJyb3JzL3dhcm5pbmdzIHdoZW4gVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTIGlzIG5vdAorCWRlZmluZWQuCisKKwkqIHNyYy9zZm50L3R0bXR4LmMgKHR0X2ZhY2VfbG9hZF9obXR4LCB0dF9mYWNlX2dldF9tZXRyaWNzKTogRml4CisJcG9zc2libGUgc2VnbWVudCBmYXVsdHMgZm9yIHRoZSBub24tRlRfT1BUSU1JWkVfTUVNT1JZJ2VkIHZlcnNpb25zLgorCShmaW5hbGx5ISkKKworCisJRm9yIG1vc3QgT3BlblR5cGUgdGFibGVzLCBgdHRfZmFjZV9sb2FkX3h4eHgnIHNpbXBseSBsb2FkcyB0aGUgdGFibGUKKwlhbmQgYGZhY2UtPnJvb3QnIGlzIHNldCBsYXRlciBpbiBgc2ZudF9sb2FkX2ZhY2UnLiAgSGVyZSwgd2UgdHJ5IHRvCisJbWFrZSB0aGlzIHdvcmsgZm9yIF9hbGxfIHRhYmxlcy4gIEFsc28gaW1wcm92ZSB0cmFjaW5nIG1lc3NhZ2VzLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYywgc3JjL3NmbnQvdHRzYml0MC5jLCBzcmMvc2ZudC90dGxvYWQuYywKKwlzcmMvc2ZudC90dG10eC5jOiBhbGwgYHR0X2ZhY2VfbG9hZF94eHh4JyBzaG91bGQgbG9hZCB0aGUgdGFibGUgYW5kCisJdGhlbiBleGl0LiAgRXJyb3IgaGFuZGxpbmcgb3Igc2V0dGluZyBmYWNlLT5yb290IGlzIGRvbmUgbGF0ZXIgaW4KKwlgc2ZudF9sb2FkX2ZhY2UnLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBXb3JrIGhhcmRlci4KKwlNYWMgYml0bWFwLW9ubHkgZm9udHMgYXJlIG5vdCBzY2FsYWJsZS4KKwlDaGVjayB0aGF0IGBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNJyBpcyBub3QgemVyby4KKwkoTE9BRF8sIExPQURNXyk6IEVtaXQgcHJldHR5IHRyYWNlIG1lc3NhZ2VzLgorCisJKiBzcmMvc2ZudC90dHNiaXQwLmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyk6IFJlYWQgbWV0cmljcworCWZyb20gYGVibGMnLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfZmFjZV9idWlsZF9jbWFwcyksIHNyYy9zZm50L3R0cG9zdC5jCisJKGxvYWRfZm9ybWF0XzIwLCBsb2FkX2Zvcm1hdF8yNSwgdHRfZmFjZV9nZXRfcHNfbmFtZSk6IFVzZQorCWZhY2UtPm1heF9wcm9maWxlLm51bUdseXBocywgaW5zdGVhZCBvZiBmYWNlLT5yb290Lm51bV9nbHlwaHMuCisKKzIwMDYtMDItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmggKEZUX091dGxpbmVfRW1ib2xkZW4pOiBNZW50aW9uIGluCisJZG9jdW1lbnRhdGlvbiB0aGF0IG5lZ2F0aXZlIHN0cmVuZ3RoIHZhbHVlcyBhcmUgcG9zc2libGUuCisJR2l2ZSBhbiBleGFtcGxlIGNhbGwuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfR2x5cGhTbG90UmVjKTogSW1wcm92ZQorCWRvY3VtZW50YXRpb24gb2YgYG91dGxpbmUnIGZpZWxkLgorCisJKiBzcmMvc2ZudC9zZm9iamMuczogSW5ja3VkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgorCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSB0dG10eC5oLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jOiBJbmNsdWRlIGFmdHlwZXMuaCBhbmQgYWZsYXRpbi5oLgorCisyMDA2LTAyLTE0ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3NmbnQvdHRtdHguYyAodHRfZmFjZV9nZXRfbWV0cmljcyk6IFR5cG8uCisKKzIwMDYtMDItMTQgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2xvYWRfaGhlYSwgdHRfZmFjZV9sb2FkX2htdHgpOiBTaW1wbHkKKwlyZXR1cm4gZXJyb3IgaWYgdGFibGUgaXMgbWlzc2luZy4KKwlDaGVjayB0YWJsZSBsZW5ndGggaW4gbm9uLUZUX09QVElNSVpFX01FTU9SWSdlZCBgdHRfZmFjZV9sb2FkX2htdHgnLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBUYWtlIGNhcmUgb2YgbWlzc2luZyBtZXRyaWNzCisJdGFibGVzLiAgVGhlIGxhc3QgY2hhbmdlIG1ha2VzIE1hYyBiaXRtYXAtb25seSBmb250IG5vdCBsb2FkIGFuZAorCXRoaXMgZml4ZXMgaXQuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXggY29tcGlsYXRpb24KKwllcnJvciB3aGVuIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgaXMgZGVmaW5lZC4KKworMjAwNi0wMi0xMyAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwlDbGVhbiB1cCB0aGUgU0ZOVF9JbnRlcmZhY2UuICBJbiB0aGlzIGZpbmFsIHBhc3MsIGBsb2FkX2htdHgnIGlzCisJc3BsaXQgZnJvbSBgbG9hZF9oaGVhJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgsIHNyYy9zZm50L3NmZHJpdmVyLmMsCisJc3JjL3NmbnQvdHRtdHguYywgc3JjL3NmbnQvdHRtdHguaDogU3BsaXQgYGhtdHgnIGZyb20gYGhoZWEnLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBVcGRhdGUuCisKKzIwMDYtMDItMTMgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvc2ZudC90dG10eC5oLCBzcmMvc2ZudC90dG10eC5jOiBXaHkgYXJlIHRoZXJlIHR3byBjb3BpZXMgb2YKKwljb2RlLi4uCisKKzIwMDYtMDItMTMgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJQ2xlYW4gdXAgdGhlIFNGTlRfSW50ZXJmYWNlLiAgSW4gdGhpcyBwYXNzLCB3ZSB3YW50IHRvIHRyZWF0IHRoZQorCWZvbnQgZGlyZWN0b3J5IChvZmZzZXQgdGFibGUgYW5kIHRhYmxlIGRpcmVjdG9yeSkgYXMgYSBub3JtYWwgdGFibGUKKwlsaWtlIHRoZSBvdGhlcnMuICBUaGlzIGFsc28gbWVhbnMgdGhhdCBUVENzIGFyZSBubyBsb25nZXIgcmVjb2duaXplZAorCXRoZXJlIGJ1dCBpbiBgaW5pdF9mYWNlJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfSW50ZXJmYWNlKSwKKwlzcmMvc2ZudC9zZmRyaXZlci5jOiBgbG9hZF9zZm50X2hlYWRlcicgYW5kIGBsb2FkX2RpcmVjdG9yeScgYXJlCisJY29tYmluZWQgYW5kIHJlbmFtZWQgdG8gYGxvYWRfZm9udF9kaXInLgorCisJKiBzcmMvc2ZudC90dGxvYWQuaCwgc3JjL3NmbnQvdHRsb2FkLmM6CisJcy9zZm50X2Rpcl9jaGVjay9jaGVja190YWJsZV9kaXIvLgorCWBzZm50X2luaXQnIGlzIG1vdmVkIHRvIHNmb2Jqcy5jIGFuZCByZW5hbWVkIHRvIGBzZm50X29wZW5fZm9udCcuCisJYHR0X2ZhY2VfbG9hZF9zZm50X2hlYWRlcicgYW5kIGB0dF9mYWNlX2xvYWRfZGlyZWN0b3J5JyBhcmUgY29tYmluZWQKKwlhbmQgcmVuYW1lZCB0byBgdHRfZmFjZV9sb2FkX2ZvbnRfZGlyJy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogUmVjb2duaXplIFRUQyBoZXJlLgorCisyMDA2LTAyLTEzICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCUNsZWFuIHVwIHRoZSBTRk5UX0ludGVyZmFjZS4gIFRhYmxlIGxvYWRpbmcgZnVuY3Rpb25zIGFyZSBub3cgbmFtZWQKKwlhZnRlciB0aGUgdGFibGVzJyB0YWdzOyBgaGRteCcgaXMgVHJ1ZVR5cGUtc3BlY2lmaWMgYW5kIHRodXMgdGhlCisJY29kZSBpcyBtb3ZlZCB0byB0aGUgdHJ1ZXR5cGUgbW9kdWxlOyBgZ2V0X21ldHJpY3MnIGlzIG1vdmVkIGhlcmUKKwlmcm9tIHRoZSB0cnVldHlwZSBtb2R1bGUgc28gdGhhdCB0aGUgY29kZSBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGNmZgorCW1vZHVsZS4KKworCVRoaXMgcGFzcyBpbnZvbHZlcyBubyByZWFsIGNoYW5nZXMuICBUaGF0IGlzLCB0aGUgY29kZSBpcyBtb3ZlZAorCXZlcmJhdGltIG1vc3RseS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mCisJYHR0X2ZhY2VfZ2V0X21ldHJpY3MnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCwgc3JjL3NmbnQvcnVsZXMubWssCisJc3JjL3NmbnQvc2Zkcml2ZXIuYywgc3JjL3NmbnQvc2ZudC5jLCBzcmMvc2ZudC9zZm9ianMuYywKKwlzcmMvc2ZudC90dGxvYWQuYywgc3JjL3NmbnQvdHRsb2FkLmgsIHNyYy9zZm50L3R0c2JpdC5jLAorCXNyYy9zZm50L3R0c2JpdC5oLCBzcmMvc2ZudC90dHNiaXQwLmM6IENsZWFuIHVwIHRoZSBTRk5UX0ludGVyZmFjZS4KKworCSogc3JjL3NmbnQvdHRtdHguYywgc3JjL3NmbnQvdHRtdHguaDogTmV3IGZpbGVzLiAgTWV0cmljcy1yZWxhdGVkCisJdGFibGVzJyBsb2FkaW5nIGFuZCBwYXJzaW5nIGNvZGUgaXMgbW92ZWQgdG8gaGVyZS4KKwlNb3ZlIGB0dF9mYWNlX2dldF9tZXRyaWNzJyBoZXJlIGZyb20gdGhlIHRydWV0eXBlIG1vZHVsZS4gIFRoZQorCXJldHVybiB2YWx1ZSBpcyBjaGFuZ2VkIGZyb20gYHZvaWQnIHRvIGBGVF9FcnJvcicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBOZXcgdHJhY2U6IHR0bXR4LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jLCBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oOiBgaGRteCcgbG9hZGluZyBhbmQKKwlwYXJzaW5nIGNvZGUgaXMgbW92ZWQgaGVyZS4KKwlOZXcgZnVuY3Rpb24gYHR0X2ZhY2VfbG9hZF9wcmVwJyBzcGxpdCBmcm9tIGB0dF9mYWNlX2xvYWRfZnBnbScuCisJYHR0X2ZhY2VfbG9hZF9mcGdtJyByZXR1cm5zIGBGVF9FcnJfT2snIGlmIGBmcGdtJyBkb2Vzbid0IGV4aXN0LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2Zmb2Jqcy5jOiBVcGRhdGUuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMsIHNyYy90cnVldHlwZS90dG9ianMuYzogVXBkYXRlLgorCisyMDA2LTAyLTExICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3NfaW5pdCk6IEZpeCBhIHN0dXBpZCBidWcuLi4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzKTogVXNlCisJQUZfTGF0aW5NZXRyaWNzUmVjIGFzIHRoZSBkdW1teSBtZXRyaWNzIGJlY2F1c2Ugd2UgY2FzdCB0aGUgbWV0cmljcworCXRvIGl0IGxhdGVyIGluIGBhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzJy4KKworMjAwNi0wMi0xMSAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEFGX0NPTkZJR19PUFRJT05fQ0pLKTogI2RlZmluZQorCXRvIGVuYWJsZSBhdXRvZml0IENKSyBzY3JpcHQgc3VwcG9ydC4gICgjZGVmaW5lJ2QgYnkgZGVmYXVsdC4pCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaCAoQUZfTEFUSU5fQ09OU1RBTlQpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyk6IE1ha2Ugc3VyZQorCXRoYXQgYGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkJyBpcyBhbHdheXMgc2V0LgorCShhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzKTogUG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIGJ1Zy4KKwlVc2UgbGF0aW4gY29uc3RhbnQgaW4gdGhlIHNjb3JpbmcgZm9ybXVsYS4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYzogTWlub3IgdXBkYXRlcyBkdWUgdG8gdGhlIGFib3ZlIHRocmVlIGNoYW5nZXMuCisKKwkqIGRvY3MvVE9ETywgZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA2LTAyLTA5ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCUludHJvZHVjZSBleHBlcmltZW50YWwgYXV0b2ZpdCBDSksgbW9kdWxlIGJhc2VkIG9uIGFraXRvJ3MgYXV0b2hpbnQKKwlwYXRjaC4gIFlvdSBuZWVkIHRvICNkZWZpbmUgQUZfTU9EX0NKSyBpbiBhZmNqay5jIHRvIGVuYWJsZSBpdC4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYywgc3JjL2F1dG9maXQvYWZjamsuaCwgc3JjL2F1dG9maXQvYWZjamsuYywKKwlzcmMvYXV0b2ZpdC9ydWxlcy5taywgc3JjL2F1dG9maXQvYXV0b2ZpdC5jLCBzcmMvYXV0b2ZpdC9hZnR5cGVzLmg6CisJQWRkIENKSyBtb2R1bGUgYmFzZWQgb24gYWtpdG8ncyBhdXRvaGludCBwYXRjaC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5oIChBRl9TZWdtZW50UmVjKTogTmV3IGZpZWxkIGBsZW4nIGZvciB0aGUKKwlvdmVybGFwIGxlbmd0aCBvZiB0aGUgc2VnbWVudHMuCisJKEFGX1NFR01FTlRfTEVOLCBBRl9TRUdNRU5UX0RJU1QpOiBOZXcgbWFjcm9zLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmggKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMpLAorCXNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyk6IE1hZGUKKwlgRlRfTE9DQUwnLgorCVVzZSB0aGUgY2hhcmFjdGVyIGdpdmVuIGJ5IHRoZSBjYWxsZXIuCisJKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMsIGFmX2xhdGluX2hpbnRzX2xpbmtfc2VnbWVudHMpOiBTY2FsZQorCXRoZSB0aHJlc2hvbGRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogUmVzcGVjdAorCUFGX1NDQUxFUl9GTEFHX05PX0FEVkFOQ0UuCisKKzIwMDYtMDItMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VfbmV3KTogUmVtb3ZlIHNoYWRvd2luZyB2YXJpYWJsZS4KKworMjAwNi0wMi0wOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VfbmV3KTogRml4IGZvciBhYm5vcm1hbGx5IHNob3J0IG9yCisJYnJva2VuIENJREZvbnQuICBSZXBvcnRlZCBieSBUYWVrIEt3YW4oVEspIExlZSAoc2VlIGZ0LWRldmVsCisJMjAwNS0xMS0wMikuCisKKzIwMDYtMDItMDggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogRml4IGJ1ZyBmb3IgYC0td2l0aC1vbGQtbWFjLWZvbnRzJworCW9wdGlvbiBvbiBVTklYIHBsYXRmb3JtLiAgSXQgaGFzIGJlZW4gYnJva2VuIHNpbmNlIDIwMDYtMDEtMTEuCisKKzIwMDYtMDItMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290dmFsaWQvbW9kdWxlLm1rOiBzL290dmFsaWRfbW9kdWxlX2NsYXNzL290dl9tb2R1bGVfY2xhc3MvLgorCSogc3JjL2d4dmFsaWQvbW9kdWxlLm1rOiBzL2d4dmFsaWRfbW9kdWxlX2NsYXNzL2d4dl9tb2R1bGVfY2xhc3MvLgorCisJKiBidWlsZHMvdW5peC91bml4ZGRlZi5tazogQWN0dWFsbHkgZG8gZGVmaW5lIFBMQVRGT1JNIChmaXhpbmcKKwljaGFuZ2UgZnJvbSAyMDA2LTAxLTMxKS4KKwkoVE9QX0RJUiwgT0JKX0RJUik6IFVwZGF0ZS4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IEZpeCBwYXRoIGZvciBmdG1vZHVsZS5oLgorCisJKiBNYWtlZmlsZSwgKi5taywgYnVpbGRzL3VuaXgvdW5peC1jYy5pbiwgYnVpbGRzL3VuaXgtZGVmLmluOiBVc2UKKwlgPz0nIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBidWlsZHMvZGV0ZWN0Lm1rIChUT1BfRElSKSwgYnVpbGRzL29zMi9vczItZGV2Lm1rIChUT1BfRElSKSwKKwlidWlsZHMvd2luMzIvdzMyLWRldi5tayAoVE9QX0RJUik6IFJlbW92ZWQuICBEZWZpbmVkIGVsc2V3aGVyZS4KKworMjAwNi0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wbGVtZW50IG5ldywgc2ltcGxpZmllZCBtb2R1bGUgc2VsZWN0aW9uLiAgV2l0aCBHTlUgbWFrZSBpdCBpcyBub3cKKwlzdWZmaWNpZW50IHRvIG1vZGlmeSBhIHNpbmdsZSBmaWxlLCBgbW9kdWxlcy5jZmcnLCB0byBjb250cm9sIHRoZQorCWluY2x1c2lvbiBvZiBtb2R1bGVzIGFuZCBiYXNlIGV4dGVuc2lvbiBmaWxlcy4KKworCVRoaXMgY2hhbmdlIGFsc28gZml4ZXMgdGhlIGNyZWF0aW9uIG9mIGZ0bW9kdWxlLmg7IGl0IG5vdyBkZXBlbmRzIG9uCisJYG1vZHVsZXMuY2ZnJyBhbmQgdGh1cyBpcyByZWJ1aWx0IG9ubHkgaWYgbmVjZXNzYXJ5LgorCisJRmluYWxseSwgYSB2ZXJzaW9uIG9mIGBmdG9wdGlvbi5oJyBpbiBPQkpfRElSIGlzIHByZWZlcnJlZCBvdmVyIHRoZQorCWRlZmF1bHQgbG9jYXRpb24uCisKKwkqIG1vZHVsZXMuY2ZnOiBOZXcgZmlsZS4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rOiBEb24ndCBpbmNsdWRlIGBtb2R1bGVzLm1rJy4KKwlJbmNsdWRlIGFsbCBgcnVsZXMubWsnIGZpbGVzIGFzIHNwZWNpZmllZCBpbiBgbW9kdWxlcy5jZmcnLgorCShGVE9QVElPTl9GTEFHLCBGVE9QVElPTl9IKTogTmV3IHZhcmlhYmxlcy4KKwkoRlRfQ0ZMQUdTKTogQWRkIG1hY3JvIGRlZmluaXRpb24gZm9yIEZUX0NPTkZJR19NT0RVTEVTX0guCisJQWRkIEZUT1BUSU9OX0ZMQUcuCisJKCQoRlRfSU5JVF9PQkopKTogRG9uJ3QgdXNlIEZUX01PRFVMRV9MSVNULgorCShDT05GSUdfSCk6IEFkZCBGVE1PRFVMRV9IIGFuZCBGVE9QVElPTl9ILgorCShJTkNMVURFUyk6IEFkZCBERVZFTF9ESVIuCisJKElOQ0xVREVfRkxBR1MsIEZUU1lTX1NSQywgRlRTWVNfT0JKLCBGVERFQlVHX1NSQywgRlRERUJVR19PQkosCisJT0JKX00sIE9CSl9TKTogVXNlIGA6PScsIG5vdCBgPScuCisJKHJlbW92ZV9mdG1vZHVsZV9oKTogTmV3IHBob255IHRhcmdldCB0byBkZWxldGUgYGZ0bW9kdWxlLmgnLgorCShkaXN0Y2xlYW4pOiBBZGQgcmVtb3ZlX2Z0bW9kdWxlX2guCisKKwkqIGJ1aWxkcy9tb2R1bGVzLm1rOiAoTU9EVUxFX0xJU1QpOiBSZW1vdmVkLgorCShtYWtlX21vZHVsZV9saXN0LCBjbGVhbl9tb2R1bGVfbGlzdCk6IFJlcGxhY2UgdGFyZ2V0cworCXdpdGguLi4KKwkoRlRNT0RVTEVfSF9JTklULCBGVE1PRFVMRV9IX0NSRUFURSwgRlRNT0RVTEVfSF9ET05FKTogTmV3CisJdmFyaWFibGVzLiAgUmVhc29uIGZvciB0aGUgY2hhbmdlIGlzIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUKKwlhIHBob255IHByZXJlcXVpc2l0ZSB3aGljaCBpcyBydW4gb25seSBpZiB0aGUgdGFyZ2V0IGZpbGUgbXVzdCBiZQorCXJlYnVpbHQgKHBob255IHByZXJlcXVpc2l0ZXMgYWN0IGxpa2Ugc3Vicm91dGluZXMgYW5kIGFyZSAqYWx3YXlzKgorCWV4ZWN1dGVkKS4gIFdlIG9ubHkgd2FudCB0byByZWJ1aWxkIGBmdG1vZHVsZS5oJyBpZiBgbW9kdWxlLmNmZycgaXMKKwljaGFuZ2VkLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoJEZUTU9EVUxFX0gpKTogUnVsZSB0byBjcmVhdGUgYGZ0bW9kdWxlLmgnLCBkZXBlbmRpbmcgb24KKwlgbW9kdWxlcy5jZmcnLgorCisJKiBidWlsZHMvdG9wbGV2ZWwubWs6IFJld3JpdGUgYW5kIHNpbXBsaWZ5IG1vZHVsZSBoYW5kbGluZy4KKwkoTU9EVUxFU19DRkcsIEZUTU9EVUxFX0gpOiBOZXcgdmFyaWFibGVzLgorCUluY2x1ZGUgTU9EVUxFU19DRkcuCisJKE1PRFVMRVMpOiBOZXcgdmFyaWFibGUgdG8gaW5jbHVkZSBhbGwgYG1vZHVsZS5taycgYW5kIGBydWxlcy5taycKKwlmaWxlcy4gIFdlIG5vIGxvbmdlciB1c2UgbWFrZSdzIGB3aWxkY2FyZCcgZnVuY3Rpb24gZm9yIHRoaXMuCisKKwkqIE1ha2VmaWxlIChVU0VfTU9EVUxFUyk6IFJlbW92ZS4gIFVwZGF0ZSBhbGwgdXNlcnMuCisJKE9CSl9ESVIpOiBEZWZpbmUgaXQgaGVyZS4KKworCSogc3JjLyovbW9kdWxlLm1rOiBDaGFuZ2UKKworCSAgICBtYWtlX21vZHVsZV9saXN0OiBmb28KKwkgICAgZm9vOiAuLi4KKworCXRvCisKKwkgICAgRlRNT0RVTEVfSF9DT01NQU5EUyArPSBGT08KKwkgICAgZGVmaW5lIEZPTworCSAgICAuLi4KKwkgICAgZW5kZWYKKworCWluIGFsbCBmaWxlcy4gIGBGVE1PRFVMRV9IX0NPTU1BTkRTJyBpcyB1c2VkIGluIGBGVE1PRFVMRV9IX0NSRUFURScuCisKKwkqIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX0VYVF9TUkMpOiBVc2UgQkFTRV9FWFRFTlNJT05TLgorCisJKiBidWlsZHMvdW5peC9kZXRlY3QubWsgKHNldHVwKTogQWx3YXlzIGV4ZWN1dGUgYGNvbmZpZ3VyZScgc2NyaXB0LgorCShoYXZlX21rKTogUmVuYW1lIHRvLi4uCisJKGhhdmVfTWFrZWZpbGUpOiBUaGlzLgorCURvbid0IHVzZSBgc3RyaXAnIGZ1bmN0aW9uLgorCisJKiBidWlsZHMvdW5peC91bml4Lm1rOiBJbmNsdWRlIGBpbnN0YWxsLm1rJyBvbmx5IGlmIEJVSUxEX1BST0pFQ1QgaXMKKwlkZWZpbmVkLgorCShoYXZlX21rKTogRG9uJ3QgdXNlIGBzdHJpcCcgZnVuY3Rpb24uCisJVGVzdCBmb3IgdW5peC1kZWYubWsgaW4gT0JKX0RJUiwgbm90IEJVSUxEX0RJUiAoYW5kIGludmVydCB0aGUgdGVzdAorCWFjY29yZGluZ2x5KS4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCwgdW5pbnN0YWxsKTogSGFuZGxlIGBmdG1vZHVsZS5oJy4KKworCSogYnVpbGRzL29zMi9vczItZGV2Lm1rLCBidWlsZHMvdW5peC91bml4LWRldi5taywKKwlidWlsZHMvd2luMzIvdzMyLWJjY2QubWssIGJ1aWxkcy93aW4zMi93MzItZGV2Lm1rOiBEb24ndCBkZWZpbmUKKwlCVUlMRF9ESVIgYnV0IERFVkVMX0RJUiBmb3IgZGV2ZWxvcG1lbnQgaGVhZGVyIGZpbGVzLgorCisJKiBidWlsZHMvYW5zaS9hbnNpLWRlZi5tayAoVE9QX0RJUiwgT0JKX0RJUiksCisJYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsgKFRPUF9ESVIsIE9CSl9ESVIpLCBidWlsZHMvdW5peC91bml4LWRlZi5pbgorCShUT1BfRElSLCBPQkpfRElSKTogUmVtb3ZlZC4gIERlZmluZWQgZWxzZXdoZXJlLgorCisJKiBidWlsZHMvZG9zL2Rvcy1kZWYubWsgKE9CSl9ESVIpLCBidWlsZHMvb3MyL29zMi1kZWYubWsgKE9CSl9ESVIpLAorCWJ1aWxkcy93aW4zMi93aW4zMi1kZWYubWsgKE9CSl9ESVIpOiBSZW1vdmVkLiAgRGVmaW5lZCBlbHNld2hlcmUuCisKKwkqIGJ1aWxkcy91bml4L3VuaXhkZGVmLm1rOiBEb24ndCBkZWZpbmUgQlVJTERfRElSIGJ1dCBERVZFTF9ESVIgZm9yCisJZGV2ZWxvcG1lbnQgaGVhZGVyIGZpbGVzLgorCURvbid0IGRlZmluZSBQTEFURk9STS4KKworCSogY29uZmlndXJlOiBDb3B5IGBtb2R1bGVzLmNmZycgdG8gYnVpbGRkaXIgaWYgYnVpbGRkaXIgIT0gc3JjZGlyLgorCVVwZGF0ZSBzbmlwcGV0IHRha2VuIGZyb20gYXV0b2NvbmYncyBtNHNoLm00IHRvIGN1cnJlbnQgQ1ZTIHZlcnNpb24uCisJQmUgbW9yZSB2ZXJib3NlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oOiBBZGQgY29tbWVudHMgLS0gdGhpcyBmaWxlIGlzCisJbm8gbG9uZ2VyIHVzZWQgaWYgRnJlZVR5cGUgaXMgYnVpbHQgd2l0aCBHTlUgbWFrZS4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL0NVU1RPTUlaRSwgZG9jcy9JTlNUQUxMLCBkb2NzL0lOU1RBTEwuQU5ZLAorCWRvY3MvSU5TVEFMTC5HTlUsIGRvY3MvSU5TVEFMTC5VTlg6IERvY3VtZW50IG5ldyBidWlsZCBtZWNoYW5pc20uCisJT3RoZXIgbWlub3IgdXBkYXRlcy4KKworCSogbW9kdWxlcy50eHQ6IFJlbW92ZWQuICBDb250ZW50cyBpbmNsdWRlZCBpbiBgbW9kdWxlcy5jZmcnLgorCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfUUFsbG9jX0RlYnVnLAorCUZUX0ZyZWVfRGVidWcpIFtGVF9TVFJJQ1RfQUxJQVNJTkddOiBGaXggdHlwb3MuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKEZUX0FsbG9jX0RlYnVnLCBGVF9SZWFsbG9jX0RlYnVnLAorCUZUX1FBbGxvY19EZWJ1ZywgRlRfUVJlYWxsb2NfRGVidWcsIEZUX0ZyZWVfRGVidWcpCisJW0ZUX1NUUklDVF9BTElBU0lOR106IEltcGxlbWVudC4KKworMjAwNi0wMS0zMSAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KSwgc3JjL2NpZC9jaWRvYmpzLmMKKwkoY2lkX2ZhY2VfaW5pdCksIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfZmFjZV9pbml0KSwKKwlzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFNldCBmYWNlLT5oZWlnaHQgdG8gTUFYKDEuMiAqCisJdW5pdHNfcGVyX0VNLCBhc2NlbmRlciAtIGRlc2NlbmRlcikuCisKKzIwMDYtMDEtMzEgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCAoQUZNX0ZvbnRJbmZvKSwKKwlzcmMvcHNhdXgvYWZtcGFyc2UuYywgc3JjL3Rvb2xzL3Rlc3RfYWZtLmM6IFJlYWQgYEZvbnRCQm94JywKKwlgQXNjZW5kZXInLCBhbmQgYERlc2NlbmRlcicgZnJvbSBhbiBBRk0uCisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9SZWFkX01ldHJpY3MpOiBVc2UgdGhlIG1ldHJpY3MgZnJvbSB0aGUgQUZNLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0ZhY2VSZWMpOiBNZW50aW9uIHRoYXQgZmllbGRzIG1heQorCWJlIGNoYW5nZWQgYWZ0ZXIgZmlsZSBhdHRhY2htZW50LgorCisyMDA2LTAxLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy8qL21vZHVsZS5tayAoLlBIT05ZKTogQWRkLgorCisyMDA2LTAxLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFJFQURNRSwgZG9jcy9GVEwuVFhUOiBGaXggZW1haWwgYWRkcmVzcyBmb3IgYnVnIHJlcG9ydHMuCisJT3RoZXIgbWlub3IgZm9ybWF0dGluZy4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogU3luY2hyb25pemUgd2l0aAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmguCisKKwkqIHNyYy9hdXRvZml0L21vZHVsZS5tayAoYWRkX2F1dG9maXRfbW9kdWxlKSwgc3JjL2JkZi9tb2R1bGUubWsKKwkoYWRkX2JkZl9tb2R1bGUpLCBzcmMvdHlwZTQyL21vZHVsZS5tayAoYWRkX3R5cGU0Ml9kcml2ZXIpOiBGaXgKKwl3aGl0ZXNwYWNlLgorCisJKiBzcmMvc21vb3RoL21vZHVsZS5tayAoYWRkX3Ntb290aF9yZW5kZXJlcik6IEFkZCBsY2QgYW5kIGxjZHYKKwlyZW5kZXJlciBjbGFzc2VzLgorCisyMDA2LTAxLTI3ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogRml4IGJ1aWxkIHByb2JsZW0gb24gQ3lnd2luLgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChpbnN0YWxsKTogRG9uJ3QgaW5zdGFsbCB0aGUgaW50ZXJuYWwKKwloZWFkZXJzLCBhbmQgcmVtb3ZlIGV4aXN0aW5nIG9uZXMgaWYgZm91bmQgaW4gdGhlIHRhcmdldCBpbnN0YWxsCisJZGlyZWN0b3J5LgorCisJKiBzcmMvYXV0b2ZpdC9hZndhcnAuYzogQWRkIHNpbXBsZSAjaWZkZWYgdG8gcHJldmVudCBjb21waWxhdGlvbgorCWlmIHRoZSB3YXJwIGhpbnRlciBpc24ndCBhY3RpdmUgKGl0IHNob3VsZG4ndCwgc3RpbGwgZXhwZXJpbWVudGFsKS4KKworCSogSmFtZmlsZSwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogUmVtb3ZlIGBneHZhbGlkJworCWFuZCBgb3R2YWxpZCcgZnJvbSB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgYXJlIGxpbmtlZCBzdGF0aWNhbGx5CisJdG8gYSBnaXZlbiBGcmVlVHlwZSBsaWJyYXJ5LiAgRnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUKKwlgZnR2YWxpZCcgQ1ZTIG1vZHVsZS4KKworCU5vdGUgYWxzbyB0aGF0IGN1cnJlbnQgTWFrZS1iYXNlZCBidWlsZCBzeXN0ZW0gc3RpbGwgY29tcGlsZXMgdGhlCisJbW9kdWxlcyB0aG91Z2guCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX1NUUklDVF9BTElBU0lORyk6IE5ldyBtYWNybworCXdoaWNoIGNvbnRyb2xzIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRvCisJYXZvaWQgd2FybmluZ3Mgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgR0NDLiAgVGhpcyBtYWNybyBpcyBvbmx5IGhlcmUKKwl0byBiZSBkaXNhYmxlZCwgaW4gY2FzZSB3ZSBkZXRlY3QgcHJvYmxlbXMgd2l0aCB0aGUgbmV3IHNjaGVtZS4KKworCU5PVEU6IERpc2FibGUgbWFjcm8gdG8gdXNlIHRoZSBtZW1vcnkgZGVidWdnZXIgLS0gdGhpcyB3aWxsIGJlIGZpeGVkCisJICAgICAgbGF0ZXIhCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCwgc3JjL2Jhc2UvZnR1dGlsLmMgKEZUX0FsbG9jLAorCUZUX1FBbGxvYywgRlRfUmVhbGxvYywgRlRfUVJlYWxsb2MsIEZUX0ZyZWUpIFtGVF9TVFJJQ1RfQUxJQVNJTkddOgorCU5ldyB2ZXJzaW9ucy4KKworCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFVwZGF0aW5nIHByb2plY3QgZmlsZSB0bworCWRlZmluZSBGVDJfQlVJTERfTElCUkFSWSwgYW5kIHJlbW92ZSBneHZhbGlkICsgb3R2YWxpZCBtb2R1bGVzIGZyb20KKwljb21waWxhdGlvbi4KKworCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKEZUX0NGTEFHUyksIEphbWZpbGUgKERFRklORVMpOiBEZWZpbmUgdGhlCisJbWFjcm8gRlQyX0JVSUxEX0xJQlJBUlkgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg6IFJlbW92ZSBpbmNsdXNpb25zIG9mIGludGVybmFsCisJaGVhZGVycyBleGNlcHQgaWYgdGhlIG1hY3JvIEZUMl9CVUlMRF9MSUJSQVJZIGlzIGRlZmluZWQuCisKKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChBRk1fS2VyblBhaXIsIEFGTV9UcmFja0tlcm4sCisJQUZNX0ZvbnRJbmZvKTogTW92ZSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaDogVGhpcyBmaWxlLgorCisKKwkqIChtYW55IGZpbGVzKTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCVZhcmlvdXMgbWlub3IgcmVvcmdhbml6YXRpb25zLgorCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9kb25lKTogRG9uJ3QgZnJlZSBzdGF0aWMgYXJyYXkKKwlgc3ViZm9udHMnLgorCisJKiBzcmMvb3R2YWxpZC9vdHZjb21tbi5jIChvdHZfQ2xhc3NEZWZfdmFsaWRhdGUpLAorCXNyYy9vdHZhbGlkL290dmdwb3MuYyAob3R2X3hfc3h5KTogRml4IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworCisJR2V0IHJpZCBvZiB3cml0YWJsZSBzdGF0aWMgdmFyaWFibGVzIChpLmUuLCB0aGUgc3RyaW5nIHRhYmxlKSBpbgorCWFmbXBhcnNlLCBhbmQgZml4IGNvbXBpbGF0aW9uIGluIEZUMl9NVUxUSSBtb2RlLgorCisJKiBzcmMvcHNhdXgvYWZtcGFyc2UuYzogSW5jbHVkZSBmdDJidWlsZC5oIGFuZCBGVF9GUkVFVFlQRV9ILgorCShBRk1fTUFYX0FSR1VNRU5UUyk6IERlZmluZS4uLgorCSogc3JjL3BzYXV4L2FmbXBhcnNlLmg6IEhlcmUuCisJKiBzcmMvcHNhdXgvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGQgYWZtcGFyc2UuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYzogSW5jbHVkZSBwc2NvbnYuaC4KKworCSogc3JjL3R5cGUxL3QxYWZtLmM6IERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSCBidXQKKwlGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ILgorCSogc3JjL3R5cGUxL3QxYWZtLmg6IEluY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSC4KKworMjAwNi0wMS0yMyAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfU2VsZWN0X1NpemUpOiBSZW5hbWUgdGhlIHNlY29uZAorCWFyZ3VtZW50IGZyb20gYGlkeCcgdG8gYHN0cmlrZV9pbmRleCcuCisJKEZUX1NpemVfUmVxdWVzdF9UeXBlKTogQWRkIEZUX1NJWkVfUkVRVUVTVF9UWVBFX01BWCB0byB0aGUgZW5kIG9mCisJdGhpcyBlbnVtLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9SRVFVRVNUX1dJRFRILAorCUZUX1JFUVVFU1RfSEVJR0hUKTogTmV3IG1hY3JvcyB0byBnZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYQorCXJlcXVlc3QsIGluIGZyYWN0aW9uYWwgcGl4ZWxzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9TZWxlY3RfTWV0cmljcywKKwlGVF9SZXF1ZXN0X01ldHJpY3MpLCBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2VsZWN0X01ldHJpY3MsCisJRlRfUmVxdWVzdF9NZXRyaWNzKTogTmV3IGJhc2UgZnVuY3Rpb25zIHRvIHNldCB0aGUgZm9udCBtZXRyaWNzLiAgVGhleQorCXdlcmUgcGFydCBvZiBGVF9TZWxlY3RfU2l6ZS9GVF9SZXF1ZXN0X1NpemUgYW5kIGFyZSBtYWRlIGluZGVwZW5kZW50CisJZnVuY3Rpb25zIHNvIHRoYXQgbWV0cmljcyBhcmUgbm90IHNldCBhZ2FpbiBhbmQgYWdhaW4uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZWxlY3RfU2l6ZSwgRlRfUmVxdWVzdF9TaXplKTogTWV0cmljcyBhcmUgc2V0CisJb25seSB3aGVuIGRyaXZlcidzIHNpemVfc2VsZWN0L3NpemVfcmVxdWVzdCBpcyBOVUxMLiAgVGhhdCBpcywgZHJpdmVycworCXNob3VsZCBzZXQgdGhlIG1ldHJpY3MgdGhlbXNlbHZlcy4KKwkoRlRfTWF0Y2hfU2l6ZSk6IFJvdW5kIGJlZm9yZSBtYXRjaGluZy4gIFRoaXMgd2FzIHdoYXQgd2UgZGlkIGFuZCBpdAorCWRvZXMgY2F1c2Ugc29tZSBwcm9ibGVtcyB3aXRob3V0IHJvdW5kaW5nLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX3NpemVfc2VsZWN0KSwgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKKwkodHRfc2l6ZV9zZWxlY3QpOiBTZXQgdGhlIGZvbnQgbWV0cmljcy4KKwlzL2luZGV4L3N0cmlrZV9pbmRleC8uCisJVGhlIHNjYWxlZCBtZXRyaWNzIGFyZSBhbHdheXMgcHJlZmVycmVkIG92ZXIgc3RyaWtlcycgbWV0cmljcywgZXZlbgorCXdoZW4gc29tZSBzdHJpa2UgaXMgc2VsZWN0ZWQuICBUaGlzIGlzIGRvbmUgYmVjYXVzZSB0aGUgc3RyaWtlcycKKwltZXRyaWNzIGFyZSBub3QgcmVsaWFibGUsIGUuZy4sIHRoZSBzaWduIG9mIHRoZSBkZXNjZW5kZXIgaXMgd3JvbmcgZm9yCisJc29tZSBmb250cy4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX3JlcXVlc3QpLCBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYworCSh0dF9zaXplX3JlcXVlc3QpOiBTZXQgdGhlIGZvbnQgbWV0cmljcy4KKwlDYWxsIGNmZl9zaXplX3NlbGVjdC90dF9zaXplX3NlbGVjdCB3aGVuIHNvbWUgc3RyaWtlIGlzIG1hdGNoZWQuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYywgc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9jaWQvY2lkb2Jqcy5jLAorCXNyYy9wY2YvcGNmZHJpdnIuYywgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMsIHNyYy90eXBlMS90MW9ianMuYywKKwlzcmMvdHlwZTEvdDFvYmpzLmgsIHNyYy90eXBlNDIvdDQyb2Jqcy5jLCBzcmMvd2luZm9udHMvd2luZm50LmM6CisJU2V0IHRoZSBmb250IG1ldHJpY3MuCisJcy9pbmRleC9zdHJpa2VfaW5kZXgvLgorCisJKiBzcmMvdG9vbHMvdGVzdF9hZm0uYywgc3JjL3BzYXV4L3BzY29udi5jOiBPbGRlciB2ZXJzaW9ucyBvZiB0aGVzZQorCWZpbGVzIHdlcmUgY29tbWl0dGVkLiAgSnVzdCBhIGNhdGNoLXVwLgorCShQU19Db252X1RvRml4ZWQpOiBSZW1vdmUgdGhlIGBnb3RvJy4KKwkoUFNfQ29udl9BU0NJSUhleERlY29kZSwgUFNfQ29udl9FZXhlY0RlY29kZSk6IFNwZWVkIHVwIGEgbGl0dGxlLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3NiaXRfc3RyaWtlcywKKwl0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpLCBzcmMvc2ZudC90dHNiaXQwLmMKKwkodHRfZmFjZV9sb2FkX3NiaXRfc3RyaWtlcywgdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzKTogVGhlCisJYWR2ZXJ0aXNlZCBtZXRyaWNzIGluIGBhdmFpbGFibGVfc2l6ZXMnIGFyZSBkaWZmZXJlbnQgZnJvbSB0aG9zZQorCWFjdHVhbGx5IHVzZWQuCisKKzIwMDYtMDEtMjMgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvcHNhdXgvcHNhdXguYyBzcmMvcHNhdXgvcHNhdXhtb2QuYyBzcmMvdHlwZTEvdDFkcml2ZXIuYzogTWFrZQorCUFGTSBwYXJzZXIgb3B0aW9uYWwsIGNvbnRyb2xsZWQgYnkgYFQxX0NPTkZJR19PUFRJT05fTk9fQUZNJy4KKworMjAwNi0wMS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLXNoLCBidWlsZHMvdW5peC9ta2luc3RhbGxkaXJzOiBVcGRhdGVkIGZyb20KKwlgdGV4aW5mbycgQ1ZTIG1vZHVsZSBhdCBzYXZhbm5haC5nbnUub3JnLgorCisyMDA2LTAxLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L3J1bGVzLm1rIChBVVRPRl9EUlZfU1JDKTogQWRkIGFmd2FycC5jLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogTW92ZSBBRl9VU0VfV0FSUEVSIHVwCisJdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9hdXRvZml0L2Fmd2FycC5jIChhZl93YXJwZXJfY29tcHV0ZV9saW5lX2Jlc3QpOiBSZW1vdmUKKwlzaGFkb3dpbmcgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorCUZpeCB3YXJuaW5nIHBhcmFtZXRlcnMgYW5kIHJlcGxhY2UgcHJpbnRmIHdpdGggQUZfTE9HLgorCShhZl93YXJwZXJfY29tcHV0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisKKzIwMDYtMDEtMjAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUFkZGluZyBleHBlcmltZW50YWwgaW1wbGVtZW50YXRpb24gb2YgYHdhcnAgaGludGluZycgKG5ldyBoaW50aW5nCisJYWxnb3JpdGhtIGZvciBncmF5LWxldmVsIGFuZCBMQ0QgcmVuZGVyaW5nKS4gIEl0IGlzIGRpc2FibGVkIGJ5CisJZGVmYXVsdCwgeW91IG5lZWQgdG8gI2RlZmluZSBBRl9VU0VfV0FSUEVSIGluIGFmdHlwZXMuaC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19zY2FsZV9kaW0pIFtBRl9VU0VfV0FSUEVSXToKKwlOZXcgZnVuY3Rpb24uCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyBbQUZfVVNFX1dBUlBFUl06IEluY2x1ZGUgYWZ3YXJwLmguCisJKGFmX2xhdGluX2hpbnRzX2luaXQpIFtBRl9VU0VfV0FSUEVSXTogUmVzZXQgbW9kZSB0bworCUZUX1JFTkRFUl9NT0RFX05PUk1BTCBpZiBhbiBMQ0QgbW9kZSBpcyBzZWxlY3RlZC4KKwkoYWZfbGF0aW5faGludHNfYXBwbHkpIFtBRl9VU0VfV0FSUEVSXTogQ2FsbCBhZl93YXJwZXJfY29tcHV0ZQorCWFwcHJvcHJpYXRlbHkuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpIFshQUZfVVNFUl9XQVJQRVJdOgorCUlzb2xhdGUgY29kZSBmb3IgYWRqdXN0aW5nIG1ldHJpY3MuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfVVNFX1dBUlBFUik6IE5ldyBtYWNybyAoY29tbWVudGVkIG91dCBieQorCWRlZmF1bHQpLgorCisJKiBzcmMvYXV0b2ZpdC9hZndhcnAuYywgc3JjL2F1dG9maXQvYWZ3YXJwLmg6IE5ldyBmaWxlcy4KKworCSogc3JjL2F1dG9maXQvYXV0b2ZpdC5jIFtBRl9VU0VfV0FSUEVSXTogSW5jbHVkZSBhZndhcnAuYy4KKworCSogc3JjL2F1dG9maXQvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGQgYWZ3YXJwLgorCisyMDA2LTAxLTE5ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYyAodHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzKTogRml4IHNtYWxsIGJ1ZworCXRoYXQgcHJldmVudGVkIGNvbXBpbGF0aW9uIHdoZW4gRlRfT1BUSU1JWkVfTUVNT1JZIGlzIGRlZmluZWQuCisKKzIwMDYtMDEtMTkgIEJyaWFuIFdlZWQgIDxid0BpbWFnaW5lbmdpbmUuY29tPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFVwZGF0ZWQuCisKKzIwMDYtMDEtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVVzZSBwc2NtYXAgc2VydmljZSBpbiBDRkYgbW9kdWxlLgorCisJKiBzcmMvY2ZmL2NmZmNtYXAuYyAoY2ZmX2NtYXBfdW5pX3BhaXJfY29tcGFyZSk6IFJlbW92ZWQuCisJKGNmZl9zaWRfdG9fZ2x5cGhfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX2NtYXBfdW5pY29kZV9pbml0LCBjZmZfY21hcF91bmljb2RlX2RvbmUsCisJY2ZmX2NtYXBfdW5pY29kZV9jaGFyX2luZGV4LCBjZmZfY21hcF91bmljb2RlX2NoYXIgbmV4dCk6IFVzZSBwc2NtYXAKKwlzZXJ2aWNlLgorCShjZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYyk6IFVwZGF0ZWQuCisJKiBzcmMvY2ZmL2NmZmNtYXAuaCAoQ0ZGX0NNYXBVbmljb2RlLCBDRkZfQ01hcF9VbmlQYWlyKTogUmVtb3ZlZC4KKworCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc191bmljb2Rlc19jaGFyX25leHQpOiBGaXggYHVuaWNvZGUnCisJcmV0dXJuIHZhbHVlLgorCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5jIChhZm1fcGFyc2VyX3JlYWRfdmFscyk6IFVzZSBkb3VibGUgY2FzdGluZworCXRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHJlZ2FyZGluZyB0eXBlLXB1bm5pbmcuCisKKzIwMDYtMDEtMTYgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvcHNhdXgvYWZtcGFyc2UuYywgc3JjL3BzYXV4L2FmbXBhcnNlLmg6IE5ldyBmaWxlcyB3aGljaAorCWltcGxlbWVudCBhbiBBRk0gcGFyc2VyLgorCisJKiBzcmMvcHNhdXgvcHNjb252LmMsIHNyYy9wc2F1eC9wc2NvbnYuaDogTmV3IGZpbGVzIHRvIHByb3ZpZGUKKwljb252ZXJzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgUFMgcmVhbCBudW1iZXIgPT4gRlRfRml4ZWQpIGZvciB0aGUKKwlQU19QYXJzZXIgYW5kIEFGTV9QYXJzZXIuICBTb21lIG9mIHRoZSBmdW5jdGlvbnMgYXJlIHRha2VuLCB3aXRoCisJc29tZSBtb2RpZmljYXRpb25zLCBmcm9tIHRoZSBmaWxlIHBzb2Jqcy5jLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmM6IFVzZSBmdW5jdGlvbnMgZnJvbSBwc2NvbnYuYy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oLCBzcmMvcHNhdXgvcHNhdXhtb2QuYzogQWRkCisJYEFGTV9QYXJzZXInIHRvIHRoZSBgcHNhdXgnIHNlcnZpY2UuCisKKwkqIHNyYy9wc2F1eC9wc2F1eC5jLCBzcmMvcHNhdXgvcnVsZXMubWsgKFBTQVVYX0RSVl9TUkMpOiBJbmNsdWRlCisJdGhvc2UgbmV3IGZpbGVzLgorCisJKiBzcmMvdG9vbHMvdGVzdF9hZm0uYzogQSB0ZXN0IHByb2dyYW0gZm9yIEFGTSBwYXJzZXIuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmg6IE5ldyBmaWxlIHByb3ZpZGluZyBhCisJYEtlcm5pbmcnIHNlcnZpY2UuICBJdCBpcyBjdXJyZW50bHkgb25seSB1c2VkIHRvIGdldCB0aGUgdHJhY2sKKwlrZXJuaW5nIGluZm9ybWF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9TRVJWSUNFX0tFUk5JTkdfSCk6IE5ldworCW1hY3JvLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYywgc3JjL3R5cGUxL3Qxb2Jqcy5jLCBzcmMvdHlwZTEvdDFhZm0uYywKKwlzcmMvdHlwZTEvdDFhZm0uaDogVXBkYXRlIHRvIHVzZSB0aGUgQUZNIHBhcnNlci4KKwlQcm92aWRlIHRoZSBgS2VybmluZycgc2VydmljZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oLCBzcmMvYmFzZS9mdG9ianMuYzogTmV3IEFQSQorCWBGVF9HZXRfVHJhY2tfS2VybmluZycuCisKKzIwMDYtMDEtMTUgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLCBzcmMvYmFzZS9mdG9ianMuYywKKwlzcmMvYmRmL2JkZmRyaXZyLmMsIHNyYy9jZmYvY2ZmZ2xvYWQuYywgc3JjL2NpZC9jaWRnbG9hZC5jLAorCXNyYy9wY2YvcGNmZHJpdnIuYywgc3JjL3R5cGUxL3QxZ2xvYWQuYywgc3JjL3dpbmZvbnRzL3dpbmZudC5jOgorCXMvZnRfZmFrZV92ZXJ0aWNhbF9tZXRyaWNzL2Z0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcy8uCisKKwkqIGRvY3MvQ0hBTkdFUzogTWVudGlvbiB0aGF0IHZlcnRpY2FsIG1ldHJpY3MgYXJlIHN5bnRoZXNpemVkIGZvcgorCWZvbnRzIG5vdCBoYXZpbmcgdGhpcyBpbmZvLgorCisyMDA2LTAxLTE1ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoZnRfZmFrZV92ZXJ0aWNhbF9tZXRyaWNzKSwKKwlzcmMvYmFzZS9mdG9ianMuYyAoZnRfZmFrZV92ZXJ0aWNhbF9tZXRyaWNzKTogTmV3IGZ1bmN0aW9uIHRvIGZha2UKKwl2ZXJ0aWNhbCBtZXRyaWNzLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jaWQvY2lkZ2xvYWQuYywgc3JjL3BjZi9wY2Zkcml2ci5jLAorCXNyYy90eXBlMS90MWdsb2FkLmMsIHNyYy93aW5mb250cy93aW5mbnQuYzogRmFrZSB2ZXJ0aWNhbCBtZXRyaWNzLAorCXdoaWNoIGFyZSBtb25vdG9uZS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoY29tcHV0ZV9nbHlwaF9tZXRyaWNzKTogU29tZSBmaXhlcyBhbmQKKwlmb3JtYXR0aW5ncyBpbiB2ZXJ0aWNhbCBtZXRyaWNzIGZha2luZy4gIFRoZXJlIGlzIHN0aWxsIHJvb20gZm9yCisJaW1wcm92ZW1lbnRzIChhbmQgc28gZG9lcyB0aGUgQ0ZGIG1vZHVsZSkuCisKKzIwMDYtMDEtMTUgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKSwgc3JjL3BjZi9wY2Zkcml2ci5jCisJKFBDRl9HbHlwaF9Mb2FkKSwgc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfTG9hZF9HbHlwaCk6IERvbid0IHNldAorCXRoZSBsaW5lYXIgYWR2YW5jZSBmaWVsZHMgYXMgdGhleSBhcmUgb25seSB1c2VkIGJ5IHRoZSBvdXRsaW5lCisJZ2x5cGhzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQKKwljbGFyaWZpY2F0aW9ucy4KKwlUaGUgbWVhbmluZyBvZiBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UIGlzIGNoYW5nZWQgc28gdGhhdCBubyByZWFsCisJY2hhbmdlIG5lZWQgYmUgbWFkZSB0byB0aGUgY29kZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBSZXNvbHZlIGZsYWcgZGVwZW5kZW5jaWVzIGFuZAorCWRlY2lkZSB3aGV0aGVyIHRvIHVzZSB0aGUgYXV0by1oaW50ZXIgYWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24uCisJVGhlcmUgc2hvdWxkIHRvIGJlIG5vIHJlYWwgZGlmZmVyZW5jZS4KKwlTb21lIGNoZWNrcyAoZS5nLiwgaXMgdGV4dCBoZWlnaHQgcG9zaXRpdmU/KSBhZnRlciB0aGUgZ2x5cGggaXMKKwlsb2FkZWQuCisJKEZUX1NlbGVjdF9TaXplLCBGVF9SZXF1ZXN0X1NpemUpOiBTY2FsZXMgYXJlIHNldCB0byB3cm9uZyB2YWx1ZXMuCisJQmUgY2FyZWZ1bCB0aGF0IHNjYWxlcyB3b24ndCBiZSBuZWdhdGl2ZS4KKworMjAwNi0wMS0xNCAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIGRvY3MvQ0hBTkdFUzogTWVudGlvbiB0aGUgc2l6ZSBzZWxlY3Rpb24gY2hhbmdlLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9TaXplX1JlcXVlc3QsIEJERl9TaXplX1NlbGVjdCksCisJc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfU2l6ZV9SZXF1ZXN0LCBQQ0ZfU2l6ZV9TZWxlY3QpLAorCXNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX1NpemVfUmVxdWVzdCwgRk5UX1NpemVfU2VsZWN0KTogRG8gc2l6ZQorCW1hdGNoaW5nIGZvciByZXF1ZXN0cyBvZiB0eXBlIE5PTUlOQUwgYW5kIFJFQUxfRElNLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBQcmludCB0cmFjZSBtZXNzYWdlIHdoZW4KKwlgcGl4ZWxfaGVpZ2h0JyBpcyB1c2VkIGZvciBub21pbmFsIGhlaWdodC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlcXVlc3RfU2l6ZSk6IENhbGwgYEZUX01hdGNoX1NpemUnIGlmIHRoZQorCWZhY2UgaXMgYml0bWFwIG9ubHkgYW5kIGRyaXZlciBkb2Vzbid0IHByb3ZpZGUgYHJlcXVlc3Rfc2l6ZScuICBUaGlzCisJaXMgYWRkZWQgbWVyZWx5IGZvciBjb21wbGV0aW9uIGFzIG5vIGRyaXZlciBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbnMuCisKKzIwMDYtMDEtMTMgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJSW50cm9kdWNlIG5ldyBzaXplIHNlbGVjdGlvbiBpbnRlcmZhY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaCAoc3RydWN0IEZUX0RyaXZlcl9DbGFzc1JlYyk6CisJUmVwbGFjZSBgc2V0X2NoYXJfc2l6ZXMnIGFuZCBgc2V0X3BpeGVsX3NpemVzJyBieSBgcmVxdWVzdF9zaXplJyBhbmQKKwlgc2VsZWN0X3NpemUnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX1NlbGVjdF9TaXplLCBGVF9TaXplX1JlcXVlc3RfVHlwZSwKKwlGVF9TaXplX1JlcXVlc3QsIEZUX1JlcXVlc3RfU2l6ZSwgRlRfU2VsZWN0X1NpemUpLCBzcmMvYmFzZS9mdG9ianMuYworCShGVF9TZWxlY3RfU2l6ZSwgRlRfUmVxdWVzdF9TaXplKTogQVBJIGFkZGl0aW9ucyB0byBleHBvcnQgdGhlIG5ldworCXNpemUgc2VsZWN0aW9uIGludGVyZmFjZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1NldF9DaGFyX1NpemUsIEZUX1NldF9QaXhlbF9TaXplcyk6IFVzZQorCWBGVF9SZXF1ZXN0X1NpemUnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9NYXRjaF9TaXplKSwKKwlzcmMvYmFzZS9mdG9ianMuYyAoRlRfTWF0Y2hfU2l6ZSk6IE5ldyBmdW5jdGlvbiB0byBtYXRjaCBhIHNpemUKKwlyZXF1ZXN0IGFnYWluc3QgYGF2YWlsYWJsZV9zaXplcycuICBEcml2ZXJzIHN1cHBvcnRpbmcgYml0bWFwIHN0cmlrZXMKKwljYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGByZXF1ZXN0X3NpemUnLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMsIHNyYy9jaWQvY2lkb2Jqcy5jLCBzcmMvY2lkL2NpZG9ianMuaCwKKwlzcmMvY2lkL2NpZHJpdmVyLmMsIHNyYy9wY2YvcGNmZHJpdnIuYywgc3JjL3R5cGUxL3QxZHJpdmVyLmMsCisJc3JjL3R5cGUxL3Qxb2Jqcy5jLCBzcmMvdHlwZTEvdDFvYmpzLmgsIHNyYy90eXBlNDIvdDQyZHJpdnIuYywKKwlzcmMvdHlwZTQyL3Q0Mm9ianMuYywgc3JjL3R5cGU0Mi90NDJvYmpzLmgsIHNyYy93aW5mb250cy93aW5mbnQuYzoKKwlVcGRhdGUgdG8gbmV3IHNpemUgc2VsZWN0aW9uIGludGVyZmFjZS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2Zmb2Jqcy5jLAorCXNyYy9jZmYvY2Zmb2Jqcy5oLCBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywKKwlzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMsIHNyYy90cnVldHlwZS90dG9ianMuaDogVXBkYXRlIHRvIG5ldyBzaXplCisJc2VsZWN0aW9uIGludGVyZmFjZS4KKwlNYWtlIGBzdHJpa2VfaW5kZXgnIEZUX1VMb25nIGFuZCBhbHdheXMgZGVmaW5lZC4KKwlVc2UgYGxvYWRfc3RyaWtlX21ldHJpY3MnIHByb3ZpZGVkIGJ5IFNGTlQgaW50ZXJmYWNlLgorCisyMDA2LTAxLTEzICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfSW50ZXJmYWNlKTogTmV3IG1ldGhvZAorCWBsb2FkX3N0cmlrZV9tZXRyaWNzJyB1c2VkIHRvIGxvYWQgdGhlIHN0cmlrZSdzIG1ldHJpY3MuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMsIHNyYy9zZm50L3R0c2JpdC5jLCBzcmMvc2ZudC90dHNiaXQuaCwKKwlzcmMvc2ZudC90dHNiaXQwLmM6IE5ldyBmdW5jdGlvbiBgdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzJy4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBTZXQgRlRfQml0bWFwX1NpemUgY29ycmVjdGx5LgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBVc2UgYG5vbWluYWxfcG9pbnRfc2l6ZScgZm9yCisJbm9taW5hbCBzaXplIHVubGVzcyBpdCBpcyBvYnZpb3VzbHkgaW5jb3JyZWN0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0JpdG1hcF9TaXplKTogVXBkYXRlIHRoZSBjb21tZW50cyBvbgorCUZOVCBkcml2ZXIuCisKKzIwMDYtMDEtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByZXBhcmUgdXNlIG9mIHBzY21hcCBzZXJ2aWNlIHdpdGhpbiBDRkYgbW9kdWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmg6IEluY2x1ZGUKKwlGVF9JTlRFUk5BTF9PQkpFQ1RTX0guCisJKFBTX1VuaWNvZGVfSW5kZXhfRnVuYyk6IFJlbW92ZWQuICBVbnVzZWQuCisJKFBTX01hY2ludG9zaF9OYW1lX0Z1bmMpOiBSZW5hbWVkIHRvLi4uCisJKFBTX01hY2ludG9zaF9OYW1lRnVuYyk6IFRoaXMuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShQU19BZG9iZV9TdGRfU3RyaW5nc19GdW5jKTogUmVuYW1lZCB0by4uLgorCShQU19BZG9iZV9TdGRfU3RyaW5nc0Z1bmMpOiBUaGlzLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoUFNfVW5pY29kZXNSZWMpOiBUaGlzIGlzIHRoZSBmb3JtZXIgYFBTX1VuaWNvZGVzJyBzdHJ1Y3R1cmUuCisJQWRkIGBjbWFwJyBtZW1iZXIuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShQU19Vbmljb2Rlcyk6IFRoaXMgaXMgbm93IGEgdHlwZWRlZidkIHBvaW50ZXIgdG8gUFNfVW5pY29kZXNSZWMuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShQU19HbHlwaF9OYW1lRnVuYyk6IE5ldyB0eXBlZGVmLgorCShQU19Vbmljb2Rlc19Jbml0RnVuYyk6IENoYW5nZSBhcmd1bWVudHMgdG8gZXhwZWN0IGEgZnVuY3Rpb24KKwlhbmQgZ2VuZXJpYyBkYXRhIHBvaW50ZXIgd2hpY2ggcmV0dXJucyBhIGdseXBoIG5hbWUgZnJvbSBhIGdpdmVuCisJaW5kZXguCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzX3VuaWNvZGVzX2luaXQsIHBzX3VuaWNvZGVzX2NoYXJfaW5kZXgsCisJcHNfdW5pY29kZXNfY2hhcl9uZXh0LCBwc2NtYXBzX2ludGVyZmFjZSk6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9GYWNlUmVjKTogVXBkYXRlZC4KKworCSogc3JjL3BzYXV4L3QxY21hcC5oIChUMV9DbWFwU3RkUmVjKTogVXBkYXRlZC4KKwkoVDFfQ21hcFVuaWNvZGUsIFQxX0NtYXBVbmljb2RlUmVjKTogUmVtb3ZlZC4KKworCSogc3JjL3BzYXV4L3QxY21hcC5jICh0MV9nZXRfZ2x5cGhfbmFtZSk6IE5ldyBjYWxsYmFjayBmdW5jdGlvbi4KKwkodDFfY21hcF91bmljb2RlX2luaXQsIHQxX2NtYXBfdW5pY29kZV9kb25lLAorCXQxX2NtYXBfdW5pY29kZV9jaGFyX2luZGV4LCB0MV9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0LAorCXQxX2NtYXBfdW5pY29kZV9jbGFzc19yZWMpOiBVcGRhdGVkLgorCisJKiBzcmMvdHlwZTQyL3Q0MnR5cGVzLmggKFQ0Ml9GYWNlUmVjKTogVXBkYXRlZC4KKworMjAwNi0wMS0xMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oOiBBZGQgZGVjbGFyYXRpb24gb2YgbmV3IGZ1bmN0aW9ucworCUZUX05ld19GYWNlX0Zyb21fRlNSZWYgYW5kIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUgdGhhdAorCXdlcmUgaW50cm9kdWNlZCBieSB0aGUganVtYm8gcGF0Y2ggb24gIDIwMDYtMDEtMTEuCisKKzIwMDYtMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzE1MDU2IGFuZCB1c2UgcHNjbWFwIHNlcnZpY2UgaW4gcHNhdXggbW9kdWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmggKFBTX1VuaU1hcCk6IFVzZQorCUZUX1VJbnQzMiBmb3IgYGdseXBoX2luZGV4Jy4KKwkoUFNfVW5pY29kZXNfSW5pdEZ1bmMpOiBVc2UgRlRfU3RyaW5nIGZvciBgZ2x5cGhfbmFtZXMnLgorCShQU19Vbmljb2Rlc19DaGFySW5kZXhGdW5jKTogVXNlIEZUX1VJbnQzMiBmb3IgYHVuaWNvZGUnLgorCShQU19Vbmljb2Rlc19DaGFyTmV4dEZ1bmMpOiBNYWtlIHNlY29uZCBhcmd1bWVudCBhIHBvaW50ZXIgdG8KKwlGVF9VSW50MzIuCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKFZBUklBTlRfQklULCBCQVNFX0dMWVBIKTogTmV3IG1hY3Jvcy4KKwkocHNfdW5pY29kZV92YWx1ZSk6IFNldCBWQVJJQU5UX0JJVCBpbiByZXR1cm4gdmFsdWUgaWYgZ2x5cGggaXMgYQorCXZhcmlhbnQgZ2x5cGggKHRoaXMgaXMsIGl0IGhhcyBub24tbGVhZGluZyBgLicgaW4gaXRzIG5hbWUpLgorCShjb21wYXJlX3VuaV9tYXBzKTogU29ydCBiYXNlIGdseXBocyBiZWZvcmUgdmFyaWFudCBnbHlwaHMuCisJKHBzX3VuaWNvZGVzX2luaXQpOiBVc2UgRlRfU3RyaW5nIGZvciBgZ2x5cGhfbmFtZXMnIGFyZ3VtZW50LgorCVJlYWxsb2NhdGUgb25seSBpZiBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIG11Y2ggc21hbGxlci4KKwlVcGRhdGVkIHRvIGhhbmRsZSB2YXJpYW50IGdseXBocy4KKwkocHNfdW5pY29kZXNfY2hhcl9pbmRleCwgcHNfdW5pY29kZXNfY2hhcl9uZXh0KTogUHJlZmVyIGJhc2UgZ2x5cGhzCisJb3ZlciB2YXJpYW50IGdseXBocy4KKwlTaW1wbGlmeSBjb2RlLgorCisJKiBzcmMvcHNhdXgvdDFjbWFwLmMgKHQxX2NtYXBfdW5pX3BhaXJfY29tcGFyZSk6IFJlbW92ZWQuCisJKHQxX2NtYXBfdW5pY29kZV9pbml0LCB0MV9jbWFwX3VuaWNvZGVfY2hhcl9pbmRleCwKKwl0MV9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0KTogVXNlIHBzY21hcCBzZXJ2aWNlLgorCSh0MV9jbWFwX3VuaWNvZGVfZG9uZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9wc2F1eC90MWNtYXAuaCAoVDFfQ01hcFVuaVBhaXIpOiBSZW1vdmVkLgorCShUMV9DTWFwVW5pY29kZSk6IFVzZSBQU19Vbmljb2RlcyBzdHJ1Y3R1cmUuCisKKzIwMDYtMDEtMTEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlKdW1ibyBwYXRjaCB0byBmaXggYGRlcHJlY2F0ZWQnIHdhcm5pbmcgb2YgY3Jvc3MtYnVpbGQgZm9yIFRpZ2VyIG9uCisJSW50ZWwsIGFzIHJlcG9ydGVkIGJ5IFNlYW4gTWNCcmlkZSA8c2VhbkByb2d1ZS1yZXNlYXJjaC5jb20+IG9uCisJMjAwNS0wOC0yNC4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogSGVhdnkgY2hhbmdlIHRvIGJ1aWxkIHdpdGhvdXQgZGVwcmVjYXRlZCBDYXJib24KKwlmdW5jdGlvbnMgb24gVGlnZXIuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYzogQWRkIG9wdGlvbnMgYW5kIGF1dG9jaGVja3MgZm9yIENhcmJvbgorCWZ1bmN0aW9ucyBhdmFpbGFiaWxpdGllcywgZm9yIE1hY09TIFguCisKKwkqIGJ1aWxkcy9tYWMvYXNjaWkybXB3LnB5OiBBZGQgY29udmVydGVyIGZvciBjaGFyYWN0ZXIgYFwzMDUnLgorCSogYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX3tmYXJ8Y2ZtfS5tYWtlLnR4dDogQWRkIGNvbmRpdGlvbmFsCisJbWFjcm9zIHRvIGF2b2lkIHVuYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKwlmdG1hYy5jIG11c3QgYmUgY29tcGlsZWQgd2l0aG91dCBgLXN0cmljdCBhbnNpJywgYmVjYXVzZSBpdCBkaXNhYmxlcworCWNwcCBtYWNybyB0byB1c2UgVG9vbEJveCBzeXN0ZW0gY2FsbC4KKworCSogYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfe2NsYXNzaWN8Y2FyYm9ufS5tYWtlLnR4dDogQWRkIGNvbmRpdGlvbmFsCisJbWFjcm9zIHRvIGF2b2lkIHVuYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKworCSogYnVpbGRzL21hYy9SRUFETUU6IERldGFpbGVkIG5vdGVzIG9uIGZ1bmN0aW9uIGF2YWlsYWJpbGl0aWVzLgorCisJKiBkb2NzL0NIQU5HRVM6IE5vdGVzIGFib3V0IChwb3NzaWJsZSkgaW5jb21wYXRpYmlsaXRpZXMuCisKKzIwMDYtMDEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA2LTAxLTA4ICBIdXcgRCBNIERhdmllcyAgPGguZGF2aWVzMUBwaHlzaWNzLm94LmFjLnVrPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmggKEZUX01vZHVsZV9HZXRfRmxhZ3MpOiBOZXcKKwlkZWNsYXJhdGlvbi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX01vZHVsZV9HZXRfRmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisKKzIwMDYtMDEtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfYml0bWFwcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKwlgYml0bWFwcycuICBSZXBvcnRlZCBieSBZdSBMZWkgPHl1bGVpMEBnbWFpbC5jb20+LgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYyAoZnRfaGlnaHBvdzIpOiBzL0ZUX0JBU0UvRlRfQkFTRV9ERUYvLgorCVJlcG9ydGVkIGJ5IE5pZWxzIEJvbGR0IDxuaWVsc2JvbGR0QGdtYWlsLmNvbT4uCisKKzIwMDUtMTItMjggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9zZm50L3NmbnQvdHRiZGYuYzogQWRkIG5ld2xpbmUgJ1xuJyB0byB0aGUgZW5kIG9mIGZpbGUsIGZvcgorCU1QVyBjb21waWxlci4KKworMjAwNS0xMi0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBKYW1maWxlIChSZWZEb2MpLCBkb2NzL3JlZmVyZW5jZS9SRUFETUU6IEZpeCBpdCBzbyB0aGF0IGBqYW0KKwlyZWZkb2MnIHdvcmtzIGNvcnJlY3RseSB0byBnZW5lcmF0ZSB0aGUgQVBJIHJlZmVyZW5jZSBpbgorCWBkb2NzL3JlZmVyZW5jZScuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKHByaW50X2h0bWxfZmllbGQsCisJcHJpbnRfaHRtbF9maWVsZF9saXN0KTogVXBkYXRlIHRvIG91dHB1dCBuaWNlciBmaWVsZHMgbGlzdHMgaW4gdGhlCisJQVBJIHJlZmVyZW5jZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBGVF9MT0FEX1RBUkdFVF9MSUdIVCBub3cKKwlmb3JjZXMgYXV0by1oaW50aW5nLgorCisJKiBmcmVldHlwZS9mcmVldHlwZS5oOiBVcGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKwlGVF9MT0FEX1RBUkdFVF9YWFggYW5kIEZUX1JlbmRlcl9Nb2RlIHZhbHVlcy4KKworMjAwNS0xMi0yMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyAoRlRfTmV3X0ZhY2VfRnJvbV9TdWl0Y2FzZSk6IENvdW50IHNjYWxhYmxlIGZhY2VzCisJaW4gc3VwcG9ydGVkIGZvcm1hdHMgKHNmbnQsIExXRk4pIG9ubHksIGFuZCBpZ25vcmUgYml0bWFwIGZhY2VzIGluCisJdW5zdXBwb3J0ZWQgZm9ybWF0cyAoZmJpdCwgTkZOVCkuICBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmYWNlcyBhcmUKKwlwYXNzZWQgdmlhIGZhY2UtPm51bV9mYWNlcy4gIElmIGJpdG1hcCBmYWNlcyBhcmUgZW1iZWRkZWQgaW4gc2ZudAorCXJlc291cmNlLCBmYWNlLT5udW1fZml4ZWRfc2l6ZSBpcyBjb3JyZWN0bHkgc2V0LiAgSW4gcHVibGljIEFQSSwKKwlGVF9OZXdfRmFjZSgpIGFuZCBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYygpIGNvdW50IHRoZSBmYWNlcyBhcworCUZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSgpLCB3aGljaCBpZ25vcmVzIE5GTlQgcmVzb3VyY2VzLgorCisJKiBkb2MvQ0hBTkdFUzogTWVudGlvbiB0aGUgY2hhbmdlcy4KKworMjAwNS0xMi0xNyAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChVcGRhdGVfTWF4KTogU2V0IGN1cnJlbnQgc2l6ZSBvZiBidWZmZXIKKwljb3JyZWN0bHkgKHNvIHRoYXQgbWVtb3J5IGRlYnVnIHN5c3RlbSB3b24ndCBwYW5pYykuCisKKzIwMDUtMTItMTYgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChmdF9nbHlwaHNsb3RfZ3JpZF9maXRfbWV0cmljcyksCisJc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzKTogUmVtb3ZlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3JlY29tcHV0ZV9zY2FsZWRfbWV0cmljcyk6IERvIG5vdCByb3VuZC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jCisJKGNpZF9zbG90X2xvYWRfZ2x5cGgpLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpLAorCXNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpOiBEbyBub3Qgcm91bmQgZ2x5cGggbWV0cmljcy4KKworCSogZG9jL0NIQU5HRVM6IE1lbnRpb24gdGhlIGNoYW5nZXMuCisKKzIwMDUtMTItMTMgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCUNoYW5nZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIExJR0hUIGhpbnRpbmcgbW9kZSB0byBjb21wbGV0ZWx5CisJZGlzYWJsZSBob3Jpem9udGFsIGhpbnRpbmcuICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBlZmZvcnQgdG8KKwlpbnRlZ3JhdGUgRGF2aWQgQ2hlc3RlcidzIGxhdGVzdCBwYXRjaCB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXIKKwloaW50aW5nIG1vZGVzIGFzIHdlbGwuCisKKwlOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGZvcmNlIGF1dG8taGludGluZyBmb3IgYWxsIGZvbnRzLCBob3dldmVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX3JlbG9hZCk6IERvbid0IHNldAorCXNjYWxlcl9maWFncyBoZXJlIGJ1dC4uLgorCShhZl9nbHlwaF9oaW50c19yZXNjYWxlKTogSGVyZS4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19pbml0KTogRGlzYWJsZSBob3Jpem9udGFsCisJaGludGluZyBmb3IgYGxpZ2h0JyBoaW50aW5nIG1vZGUuCisKKworCSogSmFtZmlsZTogU21hbGwgZml4IHRvIGVuc3VyZSB0aGF0IGZ0ZXhwb3J0LnN5bSBpcyBwbGFjZWQgaW50byB0aGUKKwlzYW1lIGxvY2F0aW9uIGFzIG90aGVyIGdlbmVyYXRlZCBvYmplY3RzIChpLmUuLCB3aXRoaW4gdGhlIGBvYmpzJworCWRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkpLgorCisKKwlBZGQgc3VwcG9ydCBmb3IgYW4gZW1iZWRkZWQgYEJERiAnIHRhYmxlIHdpdGhpbiBTRk5ULWJhc2VkIGJpdG1hcAorCWZvbnQgZmlsZXMuICBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgYXRvbXMgJiBwcm9wZXJ0aWVzIGZyb20gdGhlCisJb3JpZ2luYWwgQkRGIGZvbnRzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBmb250IGZpbGUuCisKKwlUaGUgZmVhdHVyZSBpcyBjb250cm9sbGVkIGJ5IFRUX0NPTkZJR19PUFRJT05fQkRGIHdpdGhpbgorCWBmdG9wdGlvbi5oJyBhbmQgaXMgdXNlZCB0byBpbXBsZW1lbnQgRlRfR2V0X0JERl9Qcm9wZXJ0eSBmb3IgdGhlc2UKKwlmb250IGZpbGVzLgorCisJQXQgdGhlIG1vbWVudCwgdGhpcyBpcyBzdGlsbCBleHBlcmltZW50YWwsIHRoZSBCREYgdGFibGUgZm9ybWF0CisJaXNuJ3QgY2FzdCBpbnRvIHN0b25lIHlldC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoVFRfQ09ORklHX09QVElPTl9CREYpOiBOZXcKKwltYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfbWVtY2hyKTogTmV3IG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfQkRGUmVjLCBUVF9CREYpCisJW1RUX0NPTkZJR19PUFRJT05fQkRGXTogTmV3IHN0cnVjdHVyZS4KKwkoVFRfRmFjZVJlYykgW1RUX0NPTkZJR19PUFRJT05fQkRGXTogTmV3IG1lbWJlciBgYmRmJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dGFncy5oIChUVEFHX0JERik6IE5ldyBtYWNyby4KKworCSogc3JjL3NmbnQvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGQgdHRiZGYuCisKKwkqIHNyYy9zZm50L3J1bGVzLm1rIChTRk5UX0RSVl9TUkMpOiBBZGQgdHRiZGYuYy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyBbVFRfQ09ORklHX09QVElPTl9CREZdOiBJbmNsdWRlIHR0YmRmLmggYW5kCisJRlRfU0VSVklDRV9CREZfSC4KKwkoc2ZudF9nZXRfY2hhcnNldF9pdCkgW1RUX0NPTkZJR19PUFRJT05fQkRGXTogTmV3IGZ1bmN0aW9uLgorCShzZm50X3NlcnZpY2VfYmRmKSBbVFRfQ09ORklHX09QVElPTl9CREZdOiBOZXcgc2VydmljZS4KKwkoc2ZudF9zZXJ2aWNlcykgW1RUX0NPTkZJR19PUFRJT05fQkRGXTogQWRkIHNmbnRfc2VydmljZV9iZGYuCisKKwkqIHNyYy9zZm50L3NmbnQuYyBbVFRfQ09ORklHX09QVElPTl9CREZdOiBJbmNsdWRlIHR0YmRmLmMuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIFtUVF9DT05GSUdfT1BUSU9OX0JERl06IEluY2x1ZGUgdHRiZGYuaC4KKwkoc2ZudF9kb25lX2ZhY2UpIFtUVF9DT05GSUdfT1BUSU9OX0JERl06IENhbGwKKwl0dF9mYWNlX2ZyZWVfYmRmX3Byb3BzLgorCisJKiBzcmMvc2ZudC90dGJkZi5oLCBzcmMvc2ZudC90dGJkZi5jOiBOZXcgZmlsZXMuCisKKzIwMDUtMTItMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpjLmMgKHNmbnRfaW5pdF9mYWNlKTogTW92ZSB0YWcgY2hlY2sgdG8uLi4KKwkqIHNyYy9zZm50L3R0bG9hZC5jIChzZm50X2luaXQpOiBIZXJlLCBiZWZvcmUgaGFuZGxpbmcgVFRDcy4KKworMjAwNS0xMi0wNiAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9pbml0KTogc2l6ZS0+dHRtZXRyaWNzLnZhbGlkIGlzCisJaW5pdGlhbGl6ZWQgdHdpY2UuCisJc2l6ZS0+c3RyaWtlX2luZGV4IGlzIG5vdCBpbml0aWFsaXplZC4KKworMjAwNS0xMi0wMiAgVGFlayBLd2FuKFRLKSBMZWUgIDx0YWVrbGVlQGdtYWlsLmNvbT4KKworCSogc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQpOiBSZXBsYWNlIGNhbGwgdG8KKwlGVF9OZXdfTWVtb3J5X0ZhY2Ugd2l0aCBjYWxsIHRvIEZUX09wZW5fRmFjZSB0byBwYXNzIGBwYXJhbXMnLgorCisyMDA1LTExLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgZnRkdW1wJ3MgYC12JyBvcHRpb24uCisJRG9jdW1lbnQgbGF0ZXN0IGNoYXJtYXAgY29kZSBjaGFuZ2VzLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYywgc3JjL3NmbnQvdHRjbWFwLmg6CisJcy9UVF9DTUFQX0ZMQUdfT1ZFUkxBUFBFRC9UVF9DTUFQX0ZMQUdfT1ZFUkxBUFBJTkcvLgorCisyMDA1LTExLTMwICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXA0X2NoYXJfbWFwX2JpbmFyeSwKKwl0dF9jbWFwMTJfY2hhcl9tYXBfYmluYXJ5KTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA1LTExLTI5ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCU1ham9yIHVwZGF0ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuc29ydGVkIGFuZCBvdmVybGFwcGluZworCXNlZ21lbnRzIGZvciBjbWFwIGZvcm1hdCA0LiAgRm9yIG92ZXJsYXBwaW5nIGJ1dCBzb3J0ZWQgc2VnbWVudHMsCisJd2hpY2ggaXMgcHJldmlvdXNseSBjb25zaWRlcmVkIHVuc29ydGVkLCB3ZSBzdGlsbCB1c2UgYmluYXJ5IHNlYXJjaC4KKworCSogc3JjL3NmbnQvdHRjbWFwLmggKFRUX0NNYXBSZWNfKTogUmVwbGFjZSBgdW5zb3J0ZWQnIGJ5IGBmbGFncycuCisJKFRUX0NNQVBfRkxBR19VTlNPUlRFRCwgVFRfQ01BUF9GTEFHX09WRVJMQVBQRUQpOiBOZXcgbWFjcm9zLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAoT1BUX0NNQVA0KTogUmVtb3ZlZCBhcyBpdCBpcyBhbHdheXMgZGVmaW5lZC4KKwkoVFRfQ01hcDRSZWNfKTogUmVtb3ZlIGBvbGRfY2hhcmNvZGUnIGFuZCBgdGFibGVfbGVuZ3RoJy4KKwkodHRfY21hcDRfcmVzZXQpOiBSZW1vdmVkLgorCSh0dF9jbWFwNF9pbml0KTogVXBkYXRlZCBhY2NvcmRpbmdseS4KKwkodHRfY21hcDRfbmV4dCk6IFVwZGF0ZWQgYWNjb3JkaW5nbHkuCisJVGFrZSBjYXJlIG9mIG92ZXJsYXBwaW5nIHNlZ21lbnRzLgorCSh0dF9jbWFwNF92YWxpZGF0ZSk6IE1ha2Ugc3VyZSB0aGUgc3VidGFibGUgaXMgbGFyZ2UgZW5vdWdoLgorCURvIG5vdCBjaGVjayBnbHlwaF9pZHMgYmVjYXVzZSBzb21lIGZvbnRzIHNldCB0aGUgbGVuZ3RoIHdyb25nbHkuCisJQWxzbywgaWYgYWxsIHNlZ21lbnRzIGhhdmUgb2Zmc2V0IDAsIGdseXBoX2lkcyBpcyBhbHdheXMgaW52YWxpZC4KKwlJdCBkb2VzIG5vdCBjYXVzZSBhbnkgcHJvYmxlbSBzbyBmYXIgb25seSBiZWNhdXNlIHRoZSBjaGVjayBtaXNzZXMKKwllcXVhbGl0eS4KKwlEaXN0aW5ndWlzaCBiZXR3ZWVuIHVuc29ydGVkIGFuZCBvdmVybGFwcGluZyBzZWdtZW50cy4KKwkodHRfY21hcDRfY2hhcl9tYXBfbGluZWFyLCB0dF9jbWFwNF9jaGFyX21hcF9iaW5hcnkpOiBOZXcgZnVuY3Rpb25zCisJdG8gZG8gYGNoYXJjb2RlID0+IGdseXBoIGluZGV4JyBieSBsaW5lYXIvYmluYXJ5IHNlYXJjaC4KKwkodHRfY21hcDRfY2hhcl9pbmRleCwgdHRfY21hcDRfY2hhcl9uZXh0KTogVXNlCisJdHRfY21hcDRfY2hhcl9tYXBfbGluZWFyIGFuZCB0dF9jbWFwNF9jaGFyX21hcF9iaW5hcnkuCisJKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBUcmVhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIHZhbGlkYXRvciBhcyBmbGFncworCWZvciBjbWFwLgorCisyMDA1LTExLTI5ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKFRUX0NNYXAxMlJlY18sIHR0X2NtYXAxMl9pbml0LCB0dF9jbWFwMTJfbmV4dCk6CisJTmV3IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgZmFzdCBgbmV4dCBjaGFyJy4KKwkodHRfY21hcDEyX2NoYXJfbWFwX2JpbmFyeSk6IE5ldyBmdW5jdGlvbiB0byBkbyBgY2hhcmNvZGUgPT4gZ2x5cGgKKwlpbmRleCcgYnkgYmluYXJ5IHNlYXJjaC4KKwkodHRfY21hcDEyX2NoYXJfaW5kZXgsIHR0X2NtYXAxMl9jaGFyX25leHQpOiBVc2UKKwl0dF9jbWFwMTJfY2hhcl9tYXBfYmluYXJ5LgorCSh0dF9mYWNlX2J1aWxkX2NtYXBzKTogQ2hlY2sgdGFibGUgYW5kIG9mZnNldCBjb3JyZWN0bHkgKGVxdWFsaXR5IGlzCisJbWlzc2luZykuCisKKzIwMDUtMTEtMTUgIERldGxlZiBXw7xya25lciAgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPgorCisJKiBidWlsZHMvYW1pZ2Evc21ha2VmaWxlOiBBZGp1c3RlZCB0aGUgY29tcGlsZXIgb3B0aW9ucworCXRvIHRoZSBjdXJyZW50IHNvdXJjZXMsIG5vdyByZWFsbHkgYnVpbGRzIHRoZSBneHZhbGlkLCBnemlwCisJYW5kIHBzbmFtZXMgbW9kdWxlcy4KKworCSogYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmM6IFRoZSBhc3N1bWVkIFNlZWsoKSBwb3NpdGlvbgorCWluIHRoZSBmaWxlIGNhY2hlIHdhcyBvZmYgYnkgb25lIGJ5dGUgd2hpY2ggY291bGQgY2F1c2UgZmFsc2UKKwllcnJvcnMgaW4gZm9udCBmaWxlcy4KKworMjAwNS0xMS0yNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfY2ZtLm1ha2UudHh0LAorCWJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NsYXNzaWMubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2FyYm9uLm1ha2UudHh0OgorCVVwZGF0ZWQgZm9yIE1QVyB0byBidWlsZCBhbGwgYXZhaWxhYmxlIG1vZHVsZXMuCisKKzIwMDUtMTEtMjEgIEjDpXZhcmQgV2FsbCAgPGhhYXZhcmR3QGlmaS51aW8ubm8+CisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoYmRmX2ludGVycHJldF9zdHlsZSwgQkRGX0ZhY2VfRG9uZSk6IEZpeCBzbWFsbAorCW1lbW9yeSBsZWFrLgorCisyMDA1LTExLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChzZm50X2luaXQpOiBBZGQgdHJhY2luZyBtZXNzYWdlLgorCisyMDA1LTExLTIxICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3NmbnQvdHRzYml0MC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSk6IEltYWdlX29mZnNldCB3YXMKKwlhZGRlZCB0d2ljZSB0byBpbWFnZV9zdGFydCBpZiBpbWFnZV9mb3JtYXQgd2FzIDIgb3IgNS4KKworMjAwNS0xMS0yMSAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IENoZWNrIHRoYXQgZm9ybWF0X3RhZyBpcyBrbm93bgorCWJlZm9yZSBsb2FkaW5nIHRoZSB0YWJsZSBkaXJlY3RvcnkuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfc2ZudF9oZWFkZXIsCisJdHRfZmFjZV9sb2FkX2RpcmVjdG9yeSk6IERlbGF5IHNmbnRfZGlyX2NoZWNrIGZyb20KKwl0dF9mYWNlX2xvYWRfc2ZudF9oZWFkZXIgdG8gdHRfZmFjZV9sb2FkX2RpcmVjdG9yeS4KKworMjAwNS0xMS0yMCAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jIChzZm50X2Rpcl9jaGVjayk6IENsZWFuIHVwIGFuZCByZXR1cm4gY29ycmVjdAorCWVycm9yIGNvZGUuCisJKHNmbnRfaW5pdCk6IE5ldyBmdW5jdGlvbiB0byBmaWxsIGluIGZhY2UtPnR0Y19oZWFkZXIuICBBIG5vbi1UVEMgZm9udAorCWlzIHN5bnRoZXNpemVkIGludG8gYSBUVEMgZm9udCB3aXRoIG9uZSBvZmZzZXQgdGFibGUuCisJKHR0X2ZhY2VfbG9hZF9zZm50X2hlYWRlcik6IFVzZSBzZm50X2luaXQuCisJRml4IGFuIGludmFsaWQgYWNjZXNzIGlmIHRoZSBmb250IGlzIFRUQyBhbmQgZmFjZV9pbmRleCBpcyAtMS4KKworMjAwNS0xMS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX21ldHJpY3MpOiBJZ25vcmUgZXhjZXNzIG51bWJlcgorCW9mIG1ldHJpY3MgaW5zdGVhZCBvZiBhYm9ydGluZy4gIFBhdGNoIHN1Z2dlc3RlZCBieSBEZXJlayBOb29uYnVyZy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jCisJKGNpZF9zbG90X2xvYWRfZ2x5cGgpLCBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKTogU2NhbGUKKwl0aGUgZ2x5cGggcHJvcGVybHkgaWYgbm8gaGludGVyIGlzIGF2YWlsYWJsZS4KKworCSogZG9jcy9DSEFOR0VTOiBNZW50aW9uIHNjYWxpbmcgYnVnLgorCisyMDA1LTExLTE4ICBzdXN1emtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgsIHNyYy9iYXNlL2Z0Z3h2YWwuYworCShGVF9UcnVlVHlwZUdYX0ZyZWUsIEZUX0NsYXNzaWNLZXJuX0ZyZWUpOiBOZXcgZnVuY3Rpb25zIHRvIGZyZWUKKwlidWZmZXJzIGFsbG9jYXRlZCBieSBneHZhbGlkIG1vZHVsZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oLCBzcmMvYmFzZS9mdG90dmFsLmMKKwkoRlRfT3BlblR5cGVfRnJlZSk6IE5ldyBmdW5jdGlvbiB0byBmcmVlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKwlvdHZhbGlkIG1vZHVsZS4KKworMjAwNS0xMS0xOCAgQ2hpYS1JIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX1N0cmVhbV9PcGVuLCBGVF9OZXdfTWVtb3J5LAorCUZUX0RvbmVfTWVtb3J5KSwgYnVpbGRzL3Ztcy9mdHN5c3RlbS5jIChGVF9TdHJlYW1fT3BlbiwgRlRfTmV3X01lbW9yeSwKKwlGVF9Eb25lX01lbW9yeSksIGJ1aWxkcy93aW4zMi9mdGRlYnVnLmMgKEZUX01lc3NhZ2UsIEZUX1BhbmljKToKKwlzL0ZUX0VYUE9SVC9GVF9CQVNFLy4KKworMjAwNS0xMS0xNyAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwkqIGJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMgKEZUX1RyYWNlX0dldF9Db3VudCwKKwlGVF9UcmFjZV9HZXRfTmFtZSwgRlRfTWVzc2FnZSwgRlRfUGFuaWMpLAorCWJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jIChGVF9OZXdfTWVtb3J5LCBGVF9Eb25lX01lbW9yeSwKKwlGVF9TdHJlYW1fT3Blbik6IHMvRlRfRVhQT1JUL0ZUX0JBU0UvLgorCisyMDA1LTExLTE3ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL21ha2VmaWxlLCBidWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0LAorCWJ1aWxkcy9hbWlnYS9zbWFrZWZpbGUsCisJYnVpbGRzL2FtaWdhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6IFVwZGF0ZWQgdGhlIEFtaWdhCisJYnVpbGQgZmlsZXMgKGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBneHZhbGlkIG1vZHVsZSkuCisKKzIwMDUtMTEtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCB2ZXJ0aWNhbCBtZXRyaWNzIHN1cHBvcnQgdG8gT3BlblR5cGUgQ0ZGIG91dGxpbmVzLiAgQmFzZWQgb24gYQorCXBhdGNoIGZyb20gTWlrZSBNb2VuaW5nIDxNaWtlTUBSZXRla1NvbHV0aW9ucy5jb20+LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9mYWNlX2dldF92ZXJ0aWNhbF9tZXRyaWNzKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfc2xvdF9sb2FkKTogVXNlIGNmZl9mYWNlX2dldF92ZXJ0aWNhbF9tZXRyaWNzLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDUtMTEtMTcgIENoaWEtSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsVG82NCk6IENvbW1lbnRlZCBvdXQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEZUX1NxcnRGaXhlZCksCisJc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX1NxcnRGaXhlZCksCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggKEZUX1RyYWNlX0dldF9Db3VudCwKKwlGVF9UcmFjZV9HZXRfTmFtZSwgRlRfTWVzc2FnZSwgRlRfUGFuaWMpLCBzcmMvYmFzZS9mdGRlYnVnLmMKKwkoRlRfVHJhY2VfR2V0X0NvdW50LCBGVF9UcmFjZV9HZXRfTmFtZSwgRlRfTWVzc2FnZSwgRlRfUGFuaWMpLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX05ld19NZW1vcnksIEZUX0RvbmVfTWVtb3J5KSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmggKEZUX1N0cmVhbV9PcGVuKSwKKwlzcmMvYmFzZS9mdHN5c3RlbS5jIChGVF9OZXdfTWVtb3J5LCBGVF9Eb25lX01lbW9yeSwgRlRfU3RyZWFtX09wZW4pOgorCXMvRlRfRVhQT1JUL0ZUX0JBU0UvLgorCisJKiBidWlsZHMvZXhwb3J0cy5tazogTWFudWFsbHkgYWRkIFRUX05ld19Db250ZXh0IHRvIEVYUE9SVFNfTElTVAorCXRvby4KKworMjAwNS0xMS0xNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChmdF90cmlnX3ByZW5vcm0pOiBGaXggYSBidWcgdGhhdCBjcmVhdGVkCisJaW52YWxpZCBjb21wdXRhdGlvbnMsIHJlc3VsdGluZyBpbiB2ZXJ5IHdlaXJkIGJ1Z3MgaW4gVHJ1ZVR5cGUKKwlieXRlY29kZSBoaW50ZWQgZm9udHMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChGVF9VTlVTRURfRVhFQyk6IERvbid0IHBlcmZvcm0gYQorCXN0cnVjdHVyZSBjb3B5IGVhY2ggdGltZS4KKworMjAwNS0xMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoRlRDX0NhY2hlX0NsZWFyKSwgc3JjL2NhY2hlL2Z0Y21hbmFnLmMKKwkoRlRDX01hbmFnZXJfQ2hlY2spOiBSZW1vdmUgRlRfRVhQT1JUX0RFRiB0YWcuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9BZGQ2NCk6IFJlbW92ZSBGVF9FWFBPUlRfREVGIHRhZy4KKwkoRlRfRGl2NjRieTMyLCBGVF9TcXJ0MzIpOiBDb21tZW50ZWQgb3V0LiAgVW51c2VkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChTUVJUXzMyKTogUmVtb3ZlZC4gIFVudXNlZC4KKwkoRlRfU3FydDMyKTogQ29tbWVudGVkIG91dC4gIFVudXNlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jYWNoZS9mdGNjYWNoZS5oOgorCXMvZnRjX25vZGVfZGVzdHJveS9GVENfTm9kZV9EZXN0cm95Ly4KKworCSogc3JjL2NhY2hlL2Z0Y2NiYWNrLmggKGZ0Y19ub2RlX2Rlc3Ryb3kpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfbm9kZV9kZXN0cm95KTogVXNlIEZUX0xPQ0FMX0RFRiB0YWcuCisJKEZUQ19Ob2RlX0Rlc3Ryb3kpOiBOZXcgZXhwb3J0ZWQgd3JhcHBlciBmdW5jdGlvbiBmb3IKKwlmdGNfbm9kZV9kZXN0cm95LgorCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYzogSW5jbHVkZSBmdGNjYmFjay5jLgorCisyMDA1LTExLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmYW5nbGVzLmMsIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoYWZfYW5nbGVfZGlmZik6CisJQ29tbWVudCBvdXQuICBVbnVzZWQuCisKKwkqIGJ1aWxkcy9leHBvcnRzLm1rICgkKEVYUE9SVFNfTElTVCkpOiBBZGQgVFRfUnVuSW5zLgorCisyMDA1LTExLTEwICBDaHJpc3RpYW4gQmllc2luZ2VyICA8Y2JpZXNpbmdlckB3ZWIuZGU+CisKKwkqIGJ1aWxkcy9iZW9zL2Jlb3MubWs6IENhbGwgYmVvcy1kZWYubWsgYmVmb3JlIGFueXRoaW5nIGVsc2UgdG8KKwlkZWZpbmUgdGhlIHNlcGFyYXRvci4KKworCSogYnVpbGRzL3VuaXgvdW5peC1jYy5pbiAoTElOS19MSUJSQVJZKTogQWRkIGAtbm8tdW5kZWZpbmVkJyBmbGFnLgorCisyMDA1LTExLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9SZWFkX1BGTSk6IFplcm8gb2Zmc2V0IG1lYW5zIGBubyBrZXJuaW5nCisJdGFibGUgYXZhaWxhYmxlJy4gIEZyb20gU2VyZ2V5IFRvbHN0b3YgPHN0b2xzdG92QGVzcmkuY29tPi4KKworMjAwNS0xMS0wMyAgVmlsbGUgU3lyasOkbMOkICA8c3lyamFsYUBzY2kuZmk+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9PcGVuX0ZhY2UpOiBBdm9pZCBwb3NzaWJsZSBtZW1vcnkgbGVhay4KKworMjAwNS0xMS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBjb21waWxpbmcgaW5zdHJ1Y3Rpb25zIGluIGRvY3MvQ1VTVE9NSVpFIHdvcmsgYWdhaW4uCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtY2MuaW4gKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLgorCShDRkxBR1MpOiBEb24ndCBpbmNsdWRlIEBDUFBGTEFHU0AuCisJKiBidWlsZHMvZnJlZXR5cGUubWsgKEZUX0NGTEFHUyk6IEFkZCBDUFBGTEFHUy4KKworMjAwNS0xMC0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJVXBkYXRlIGJ1aWxkIHN5c3RlbSB0byBzdXBwb3J0IHRoZSBnZW5lcmF0aW9uIG9mIGEgbGlzdCBvZiBleHBvcnRlZAorCXN5bWJvbHMgb3IgV2luZG93cyAuREVGIGZpbGVzIGJ5IHBhcnNpbmcgdGhlIHB1YmxpYyBoZWFkZXJzIHdpdGggdGhlCisJYGFwaW5hbWVzJyB0b29sIGxvY2F0ZWQgaW4gc3JjL3Rvb2xzL2FwaW5hbWVzLmMuCisKKwlPbmx5IHRlc3RlZCBvbiBVbml4IGF0IHRoZSBtb21lbnQuICBPbiBXaW5kb3dzLCB0aGUgLkRFRiBmaWxlIGlzCisJZ2VuZXJhdGVkIGJ1dCBpc24ndCB1c2VkIHlldCB0byBnZW5lcmF0ZSBhIERMTC4KKworCSogYnVpbGRzL2V4cG9ydHMubWs6IE5ldyBmaWxlLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWs6IEluY2x1ZGUgZXhwb3J0cy5tay4KKwkoZGxsKTogTmV3IHRhcmdldC4KKwkoY2xlYW5fcHJvamVjdF9kb3MpOiBGaXggcnVsZS4KKworCSogYnVpbGRzL2NvbXBpbGVyL3Zpc3VhbGMubWsgKFRFKSwgYnVpbGRzL2Rvcy9kb3MtZGVmLm1rIChFKSwKKwlidWlsZHMvb3MyL29zMi1kZWYubWsgKEUpLCBidWlsZHMvd2luMzIvd2luMzItZGVmLm1rIChFKTogTmV3CisJdmFyaWFibGVzIGZvciBjb250cm9sbGluZyBleGVjdXRhYmxlIGV4dGVuc2lvbnMuCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtY2MuaW4gKEVYUE9SVFNfTElTVCwgQ0NleGUpLAorCWJ1aWxkcy93aW4zMi93MzItYmNjLm1rLCBidWlsZHMvd2luMzIvdzMyLWdjYy5taywKKwlidWlsZHMvd2luMzIvdzMyLWljYy5taywgYnVpbGRzL3dpbjMyL3czMi1pY2MubWssCisJYnVpbGRzL3dpbjMyL3czMi1taW5ndzMyLm1rLCBidWlsZHMvd2luMzIvdzMyLXZjYywKKwlidWlsZHMvd2luMzIvdzMyLXdhdC5tayAoRVhQT1JUU19MSVNULCBFWFBPUlRfT1BUSU9OUywKKwlBUElOQU1FU19PUFRJT05TKTogTmV3IHRhcmdldHMgZm9yIGNvbnRyb2xsaW5nIHRoZSBgYXBpbmFtZXMnIHRvb2wuCisKKwkqIEphbWZpbGUgKEdlbkV4cG9ydFN5bWJvbHMpOiBVcGRhdGVkLgorCisKKwkqIHNyYy9wZnIvcGZydHlwZXMuaCwgc3JjL3Bmci9wZnJsb2FkLmMsIHNyYy9wZnIvcGZyb2Jqcy5jCisJWyFGVF9PUFRJTUlaRV9NRU1PUlldOiBGb2xkIG1lbW9yeSBvcHRpbWl6YXRpb24gY29kZSBpbnRvCisJRlRfT1BUSU1JWkVfTUVNT1JZIGNodW5rcyBmb3IgYmV0dGVyIG1haW50YWluYWJpbGl0eSBhbmQgc2ltcGxpY2l0eS4KKworCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChmdF90cmlnX3ByZW5vcm0pLCBzcmMvYmFzZS9mdGNhbGMuYworCShGVF9NdWxGaXgpOiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLgorCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaCAoRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCwKKwlGVF9HTFlQSExPQURFUl9DSEVDS19DLCBGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMpOiBOZXcgbWFjcm9zIGZvcgorCWNoZWNraW5nIHBvaW50cyBhbmQgY29udG91cnMuICBVcGRhdGUgY2FsbGVycyB0byB1c2UKKwlGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMgaW5zdGVhZCBvZiBGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cworCWF0IHByb2ZpbGUtZGV0ZWN0ZWQgaG90LXNwb3RzLgorCisJKiBzcmMvYmFzZS9mdGdsb2Fkci5jIChGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cyk6IFNldCBgYWRqdXN0JworCXRvIDAgdG8gbm90IGNhbGwgYEFkanVzdFBvaW50cycgZXZlcnkgdGltZS4KKworCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmggKEFGX0FOR0xFX0RJRkYpOiBOZXcgbWFjcm8gdG8gaW5saW5lCisJRlRfQW5nbGVfRGlmZi4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9kaXJlY3Rpb25fY29tcHV0ZSk6IFJlLWltcGxlbWVudC4KKwkoYWZfZ2x5cGhfaGludHNfY29tcHV0ZV9pbmZsZWN0aW9ucywgYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogVXNlCisJQUZfQU5HTEVfRElGRiB0byBzcGVlZCB1cCB0aGUgZGV0ZWN0aW9uIG9mIGluZmxleGlvbnMuCisKKworCSogc3JjL3Rvb2xzL2FwaW5hbWVzLmM6IEluY2x1ZGUgPHN0cmluZy5oPi4KKwkoT3V0cHV0Rm9ybWF0KTogTmV3IGVudW1lcmF0aW9uLgorCShuYW1lc19kdW1wKTogQWRkIHR3byBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgb3V0cHV0IGZvcm1hdCBhbmQgRExMCisJbmFtZS4KKwkobmFtZXNfZHVtcF93aW5kZWYpOiBSZW1vdmVkLiAgQ29kZSBmb2xkZWQgaW50byBgbmFtZXNfZHVtcCcuCisJKHJlYWRfaGVhZGVyX2ZpbGUpOiBVc2UgaXNhbG51bSwgbm90IGlzYWxwaGEuICBPdGhlcndpc2UgZnVuY3Rpb24KKwluYW1lcyB3aXRoIGRpZ2l0cyBhcmVuJ3QgcmVhZCBjb3JyZWN0bHkuCisJKHVzYWdlKTogVXBkYXRlZC4KKwkobWFpbik6IE5ldyBvcHRpb24gYC1vJyB0byBjb250cm9sIG91dHB1dCBmaWxlIG5hbWUuCisJTmV3IG9wdGlvbiBgLWQnIHRvIGluZGljYXRlIERMTCBmaWxlIG5hbWUuCisJRXh0ZW5kIGAtdycgZmxhZyB0byBoYW5kbGUgQm9ybGFuZCBhbmQgV2F0Y29tIGNvbXBpbGVycyBhbmQgbGlua2Vycy4KKworMjAwNS0xMC0yOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGRzL21hYy9mdGxpYi5wcmosIGJ1aWxkcy9tYWMvZnJlZXR5cGUubWFrOiBSZW1vdmVkLgorCWZ0bGliLnByaiBpcyB1bm1haW50YWluZWQgYW5kIGluY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgdHJlZS4KKwlmcmVldHlwZS5tYWsgaXMgdW5yZWNvdmVyYWJseSBicm9rZW4uCisKKwkqIGJ1aWxkcy9tYWMvZnRsaWIucHJqLnhtbDogQWRkZWQuCisJR2VuZXJhdGVkIGJ5IE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IgOS4wLgorCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0LAorCWJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQsCisJYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQ6IEFkZGVkLgorCVNrZWxldG9uIGZpbGVzIG9mIE1QVyBtYWtlZmlsZXMuCisKKwkqIGJ1aWxkcy9tYWMvYXNjaWkybXB3LnB5OiBBZGRlZC4KKwlQeXRob24gc2NyaXB0IHRvIG1ha2UgTVBXIG1ha2VmaWxlIGZyb20gc2tlbGV0b24uCisKKwkqIGJ1aWxkcy9tYWMvUkVBRE1FOiBVcGRhdGVkLgorCUFsbW9zdCByZXdyaXR0ZW4gdG8gdXNlIG5ldyBmaWxlcy4KKworMjAwNS0xMC0yOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogRml4IGludmFsaWQgY2FzdHMgZnJvbSBOVUxMIHRvIGludGVnZXIgdHlwZWQKKwl2YXJpYWJsZXMuICBBZHZpc2VkIGJ5IERhdmlkIFR1cm5lciwgTWFzYXRha2UgWUFNQVRPLCBTZWFuIE1jQnJpZGUsCisJYW5kIEdlb3JnZSBXaWxsaWFtcy4KKworMjAwNS0xMC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzbWVtLmgsIGluY2x1ZGUvZnJlZXR5cGUvZnRzeXNpby5oOiBSZW1vdmVkLgorCU9ic29sZXRlLgorCisyMDA1LTEwLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfaW50ZXJmYWNlKTogTW92ZSBvdXQKKwlgdHRfZmFjZV9nZXRfa2VybmluZycgZnJvbSBhICNpZmRlZiBjbGF1c2UuICBSZXBvcnRlZCBieSBUb255IEouCisJSWJicyA8dGlic0Bzai5jby51az4uCisKKzIwMDUtMTAtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRkYmdtZW0uYyAoZnRfbWVtX2RlYnVnX3JlYWxsb2MpOiBNYWtlIGl0IGNvbXBpbGUgd2l0aAorCUMrKy4KKworMjAwNS0xMC0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChmdF9tZW1fdGFibGVfc2V0LCBmdF9tZW1fZGVidWdfcmVhbGxvYyk6CisJQW5vdGhlciByZWFsbG9jIG1lbW9yeSBjb3VudGluZyBidWcgZml4LgorCisJKiBzcmMvdG9vbHMvSmFtZmlsZTogQWRkIG1pc3NpbmcgZmlsZS4KKworCSogc3JjL2x6dy9KYW1maWxlOiBGaXggaW5jb3JyZWN0IHNvdXJjZSBmaWxlIHJlZmVyZW5jZS4KKworMjAwNS0xMC0yMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChmdF9tZW1fdGFibGVfc2V0LCBmdF9tZW1fdGFibGVfcmVtb3ZlLAorCWZ0X21lbV9kZWJ1Z19hbGxvYywgZnRfbWVtX2RlYnVnX2ZyZWUsIGZ0X21lbV9kZWJ1Z19yZWFsbG9jKTogRml4ZXMKKwl0byBiZXR0ZXIgYWNjb3VudCBmb3IgbWVtb3J5IHJlYWxsb2NhdGlvbnMuCisKKwkqIHNyYy9sencvZnRsencyLmMsIHNyYy9sencvZnR6b3Blbi5oLCBzcmMvbHp3L2Z0em9wZW4uYywKKwlzcmMvbHp3L3J1bGVzLm1rOiBGaXJzdCB2ZXJzaW9uIG9mIExaVyBsb2FkZXIgcmUtaW1wbGVtZW50YXRpb24uCisJQXBwYXJlbnRseSwgdGhpcyBzYXZlcyBhYm91dCAzMzAgS0Igb2YgaGVhcCBtZW1vcnkgd2hlbiBsb2FkaW5nCisJdGltUjI0LnBjZi5aLgorCisyMDA1LTEwLTIwICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oIChGVF9CaXRtYXBfQ29weSwgRlRfQml0bWFwX0VtYm9sZGVuKSwKKwlzcmMvYmFzZS9mdGJkZi5jIChGVF9HZXRfQkRGX1Byb3BlcnR5KSwgc3JjL2NhY2hlL2Z0Y21ydS5jCisJKEZUQ19NcnVMaXN0X1Jlc2V0LCBGVENfTXJ1TGlzdF9Eb25lLCBGVENfTXJ1TGlzdF9Mb29rdXApOiBGaXgKKwlGVF9FWFBPUlQvRlRfRVhQT1JUX0RFRiB0YWdnaW5nLgorCisyMDA1LTEwLTE5ICBDaGlhLUkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IEFsbG93IHNpemUtPnR0bWV0cmljcyB0bworCWJlIGludmFsaWQgd2hlbiBGVF9MT0FEX05PX1NDQUxFIGlzIHNldC4KKworMjAwNS0xMC0xNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogRG9uJ3QgY2FsbCBGVF9OZXdfR2x5cGhTbG90IGFuZAorCUZUX05ld19TaXplIGlmIHdlIGFyZSBvcGVuaW5nIGEgZmFjZSB3aXRoIGZhY2VfaW5kZXggPCAwICh3aGljaCBpcworCW9ubHkgdXNlZCBmb3IgdGVzdGluZyB0aGUgZm9ybWF0KS4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYyAoZ3h2X21vcnRfc3VidGFibGVfdHlwZTBfZW50cnlfdmFsaWRhdGUpOgorCVJlbW92ZSBjb21waWxlciB3YXJuaW5nLgorCisyMDA1LTEwLTE2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90b29scy9hcGluYW1lcy5jOiBBZGQgbmV3IHRvb2wgdG8gZXh0cmFjdCBwdWJsaWMgQVBJIGZ1bmN0aW9uCisJbmFtZXMgZnJvbSBoZWFkZXIgZmlsZXMuCisKKzIwMDUtMTAtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBGVF9GQUNFX0ZMQUdfSElOVEVSIHRvIGluZGljYXRlIHRoYXQgYSBzcGVjaWZpYyBmb250IGRyaXZlciBoYXMKKwlhIGhpbnRpbmcgZW5naW5lIG9mIGl0cyBvd24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRkFDRV9GTEFHX0hJTlRFUik6IE5ldyBtYWNyby4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpLCBzcmMvY2lkL2NpZG9ianMuYworCShjaWRfZmFjZV9pbml0KSwgc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpCisJW1RUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVJdLCBzcmMvdHlwZTEvdDFvYmpzLmMKKwkoVDFfRmFjZV9Jbml0KSwgc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQpCisJW1RUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVJdOiBVcGRhdGUgZmFjZSBmbGFncy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwNS0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIubTQ6IEFkZCBsaWNlbnNlIGV4Y2VwdGlvbiBzbyB0aGF0IHRoZSBmaWxlCisJY2FuIGJlIHVzZWQgaW4gYW55IG90aGVyIGF1dG9jb25mIHNjcmlwdC4KKworMjAwNS0wOS0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCk6IEZpeCBiYWQKKwljb21wdXRhdGlvbiBvZiB0aGUgYHZlcnRpY2FsJyBmbGFnLCBjYXVzaW5nIHVnbHkgdGhpbmdzIGluIExDRCBtb2RlCisJYW5kIG90aGVycy4KKworMjAwNS0wOS0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2luaXQpOiBGaXggYSBidWcgdGhhdAorCXByZXZlbnRlZCBpbnRlcm5hbCBoaW50IG1vZGUgYml0ZmxhZ3MgZnJvbSBiZWluZyBjb21wdXRlZCBjb3JyZWN0bHkuCisKKwkqIHNyYy9iYXNlL0phbWZpbGU6IEFkZGluZyBzcmMvYmFzZS9mdGd4dmFsLmMuCisKKwkqIHNyYy9neHZhbGlkL2d4dmJzbG4uYywgc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYywKKwlzcmMvZ3h2YWxpZC9neHZmZWF0LmMsIHNyYy9neHZhbGlkL2d4dmp1c3QuYywgc3JjL2d4dmFsaWQvZ3h2a2Vybi5jLAorCXNyYy9neHZhbGlkL2d4dmxjYXIuYywgc3JjL2d4dmFsaWQvZ3h2bW9ydC5jLAorCXNyYy9neHZhbGlkL2d4dm1vcnQwLmMsIHNyYy9neHZhbGlkL2d4dm1vcnQxLmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYywgc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYywKKwlzcmMvZ3h2YWxpZC9neHZtb3J0NS5jLCBzcmMvZ3h2YWxpZC9neHZtb3J4LmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYywgc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYywKKwlzcmMvZ3h2YWxpZC9neHZtb3J4Mi5jLCBzcmMvZ3h2YWxpZC9neHZtb3J4NS5jLAorCXNyYy9neHZhbGlkL2d4dm9wYmQuYywgc3JjL2d4dmFsaWQvZ3h2cHJvcC5jLAorCXNyYy90cnVldHlwZS90dGdsb2FkLmM6IFJlbW92ZSBfbWFueV8gY29tcGlsZXIgd2FybmluZ3Mgd2hlbgorCWNvbXBpbGluZyB3aXRoIFZpc3VhbCBDKysgYXQgbWF4aW11bSBsZXZlbCAoL1c0KS4KKworCSogc3JjL2F1dG9maXQvYWZhbmdsZXMuYyAoYWZfYW5nbGVfYXRhbik6IFJlcGxhY2VkIENPUkRJQy1iYXNlZAorCWltcGxlbWVudGF0aW9uIHdpdGggb25lIHVzaW5nIGxvb2t1cCB0YWJsZXMuICBUaGlzIHNpbXBsZSB0aGluZworCXNwZWVkcyB1cCBnbHlwaCBsb2FkaW5nIGJ5IDE4JSwgYWNjb3JkaW5nIHRvIGZ0YmVuY2ghCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X2ludGVyZmFjZSk6IERvbid0IGNoZWNrIGZvcgorCWBnZXRfc2ZudCcgYW5kIGBsb2FkX3NmbnQnIG1vZHVsZSBpbnRlcmZhY2VzLgorCisyMDA1LTA5LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogTWVudGlvbiBTSU5HIEdseXBobGV0IHN1cHBvcnQuCisKKzIwMDUtMDktMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvSmFtZmlsZTogRGlzYWJsZSBjb21waWxhdGlvbiBvZiBmdGd4dmFsIG1vZHVsZQorCXRlbXBvcmFyaWx5LgorCisyMDA1LTA5LTE5ICBEYXZpZCBTb21lcnMgIDxkc29tZXJzQG9tejEzLmNvbT4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHNmbnRfZGlyX2NoZWNrKTogTW9kaWZpZWQgdG8gYWxsb3cgYQorCWZvbnQgdG8gaGF2ZSBubyBgaGVhZCcgdGFibGUgaWYgdGFibGVzIGBTSU5HJyBhbmQgYE1FVEEnIGFyZQorCXByZXNlbnQ7IHRoaXMgaXMgdG8gc3VwcG9ydCBgU0lORyBHbHlwaGxldCcuCisKKwlgU0lORyBHbHlwaGxldCcgaXMgYW4gZXh0ZW5zaW9uIHRvIE9wZW5UeXBlIGRldmVsb3BlZCBieSBBZG9iZQorCXByaW1hcmlseSB0byBmYWNpbGl0YXRlIGFkZGluZyBzdXBwbGVtZW50YWwgZ2x5cGhzIHRvIGFuIE9wZW5UeXBlCisJZm9udCAod2l0aCBlbXBoYXNpcyBvbiwgYnV0IG5vdCBuZWNlc3NhcmlseSBsaW1pdGVkIHRvLCBnYWlqaSB0byBhCisJQ0pLIGZvbnQpLiAgQSBTSU5HIEdseXBobGV0IEZvbnQgaXMgYW4gT3BlblR5cGUgZm9udCB0aGF0IGNvbnRhaW5zCisJdGhlIG91dGxpbmUocyksIGVpdGhlciBpbiBhIGBnbHlmJyBvciBgQ0ZGJyB0YWJsZSwgZm9yIGEgZ2x5cGg7CisJYGNtYXAnLCBgQkFTRScsIGFuZCBgR1NVQicgdGFibGVzIGFyZSBwcmVzZW50IHdpdGggdGhlIHNhbWUgZm9ybWF0CisJYW5kIGZ1bmN0aW9uYWxpeSBhcyBhIHJlZ3VsYXIgT3BlblR5cGUgZm9udDsgdGhlcmUgYXJlIG5vIGBuYW1lJywKKwlgaGVhZCcsIGBPUy8yJywgYW5kIGBwb3N0JyB0YWJsZXM7IHRoZXJlIGFyZSB0d28gbmV3IHRhYmxlcywgYFNJTkcnCisJd2hpY2ggY29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgZ2x5cGhsZXQsIGFuZCBgTUVUQScgd2hpY2ggY29udGFpbnMKKwltZXRhZGF0YS4KKworCUZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIFNJTkcgR2x5cGhsZXQgZm9ybWF0IGNhbiBiZSBmb3VuZCBhdDoKKworCSAgaHR0cDovL3d3dy5hZG9iZS5jb20vcHJvZHVjdHMvaW5kZXNpZ24vc2luZ19nYWlqaS5odG1sCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHRhZ3MuaCAoVFRBR19TSU5HLCBUVEFHX01FVEEpOiBOZXcgbWFjcm9zIGZvcgorCXRoZSBPcGVuVHlwZSB0YWJsZXMgYFNJTkcnIGFuZCBgTUVUQScuICBUaGVzZSB0d28gdGFibGVzIGFyZSB1c2VkIGluCisJU0lORyBHbHlwaGxldCBGb3JtYXQgZm9udHMuCisKKzIwMDUtMDktMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogUmVhY3RpdmF0ZSBjb2RlIHRvIHNldAorCUZUX0ZBQ0VfRkxBR19LRVJOSU5HIHdoaWNoIGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQgZXJyb25lb3VzbHkuCisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMDUtMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeGVzIGZvciBgbWFrZSBtdWx0aScgYW5kIHVzaW5nIEMrKyBjb21waWxlci4KKworCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoZ3h2X3NldF9sZW5ndGhfYnlfdXNob3J0X29mZnNldCwKKwlneHZfc2V0X2xlbmd0aF9ieV91bG9uZ19vZmZzZXQsIGd4dl9hcnJheV9nZXRsaW1pdHNfYnl0ZSwKKwlneHZfYXJyYXlfZ2V0bGltaXRzX3VzaG9ydCk6IERlY2xhcmUgd2l0aCBGVF9MT0NBTF9ERUYuCisJKGd4dl9jb21wYXJlX3Jhbmdlcyk6IE1ha2UgaXQgc3RhdGljLgorCShneHZfTG9va3VwVGFibGVfZm10MF92YWxpZGF0ZSwgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfdmFsaWRhdGUsCisJZ3h2X0xvb2t1cFRhYmxlX2ZtdDRfdmFsaWRhdGUsIGd4dl9Mb29rdXBUYWJsZV9mbXQ2X3ZhbGlkYXRlLAorCWd4dl9Mb29rdXBUYWJsZV9mbXQ4X3ZhbGlkYXRlLCBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUpOiBJbXByb3ZlCisJdHJhY2UgbWVzc2FnZXMuCisJKGd4dl9TdGF0ZUFycmF5X3ZhbGlkYXRlLCBneHZfWFN0YXRlQXJyYXlfdmFsaWRhdGUpOiBzL2NsYXNzL2NsYXp6Ly4KKwkoR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUsIEdYVl9TVEFURUhFQURFUl9TSVpFLAorCUdYVl9YU1RBVEVUQUJMRV9IRUFERVJfU0laRSwgR1hWX1hTVEFURUhFQURFUl9TSVpFKTogTW92ZSB0bworCWd4dmNvbW1uLmguCisKKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmg6IEFkZCBwcm90b3R5cGVzIGZvcgorCWd4dl9TdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwLCBneHZfWFN0YXRlVGFibGVfc3VidGFibGVfc2V0dXAsCisJZ3h2X1hTdGF0ZVRhYmxlX3ZhbGlkYXRlLCBneHZfYXJyYXlfZ2V0bGltaXRzX2J5dGUsCisJZ3h2X2FycmF5X2dldGxpbWl0c191c2hvcnQsIGd4dl9zZXRfbGVuZ3RoX2J5X3VzaG9ydF9vZmZzZXQsCisJZ3h2X3NldF9sZW5ndGhfYnlfdWxvbmdfb2Zmc2V0LCBneHZfb2R0ZWN0X2FkZF9yYW5nZSwKKwlneHZfb2R0ZWN0X3ZhbGlkYXRlLgorCShHWFZfU1RBVEVUQUJMRV9IRUFERVJfU0laRSwgR1hWX1NUQVRFSEVBREVSX1NJWkUsCisJR1hWX1hTVEFURVRBQkxFX0hFQURFUl9TSVpFLCBHWFZfWFNUQVRFSEVBREVSX1NJWkUpOiBNb3ZlZCBmcm9tCisJZ3h2Y29tbW4uYy4KKworCSogc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIChneHZfYnNsbl9Mb29rdXBWYWx1ZV92YWxpZGF0ZSwKKwlneHZfYnNsbl9wYXJ0c19mbXQxX3ZhbGlkYXRlKTogSW1wcm92ZSB0cmFjZSBtZXNzYWdlcy4KKworCSogc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jOiBTcGxpdCBvZmYgcHJlZGVmaW5lZCByZWdpc3RyeSBzdHVmZiB0by4uLgorCSogc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oOiBOZXcgZmlsZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2anVzdC5jIChneHZfanVzdF93ZGNfZW50cnlfdmFsaWRhdGUpOiBJbXByb3ZlIHRyYWNlCisJbWVzc2FnZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2a2Vybi5jIChHWFZfa2Vybl9EaWFsZWN0KTogQWRkIEtFUk5fRElBTEVDVF9VTktOT1dOLgorCShneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX3ZhbHVlVGFibGVfbG9hZCwKKwlneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX3N1YnRhYmxlX3NldHVwLAorCWd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfZW50cnlfdmFsaWRhdGUpOiBGaXggQysrIGNvbXBpbGVyIGVycm9ycy4KKwkoZ3h2X2tlcm5fY292ZXJhZ2VfdmFsaWRhdGUpOiBVc2UgS0VSTl9ESUFMRUNUX1VOS1dPV04uCisJSW1wcm92ZSB0cmFjZSBtZXNzYWdlLgorCShneHZfa2Vybl92YWxpZGF0ZV9nZW5lcmljKTogRml4IEMrKyBjb21waWxlciBlcnJvci4KKwlJbXByb3ZlIHRyYWNlIG1lc3NhZ2UuCisJKGd4dl9rZXJuX3ZhbGlkYXRlX2NsYXNzaWMpOiBGaXggQysrIGNvbXBpbGVyIGVycm9yLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0MC5jIChneHZfbW9ydF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSk6IERlY2xhcmUKKwl3aXRoIEZUX0xPQ0FMX0RFRi4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYworCShneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJzdGl0dXRpb25UYWJsZV9sb2FkLAorCWd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnRhYmxlX3NldHVwKTogRml4IEMrKyBjb21waWxlciBlcnJvcnMuCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnN0VGFibGVfdmFsaWRhdGUpOiBJbXByb3ZlIHRyYWNlCisJbWVzc2FnZS4KKwkoZ3h2X21vcnRfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUpOiBEZWNsYXJlIHdpdGggRlRfTE9DQUxfREVGLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0Mi5jIChneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9vcHR0YWJsZV9sb2FkLAorCWd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX3N1YnRhYmxlX3NldHVwLAorCWd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX2xpZ0FjdGlvbk9mZnNldF92YWxpZGF0ZSwKKwlneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9saWdhdHVyZVRhYmxlX3ZhbGlkYXRlKTogRml4IEMrKyBjb21waWxlcgorCWVycm9ycy4KKwkoZ3h2X21vcnRfc3VidGFibGVfdHlwZTJfdmFsaWRhdGUpOiBEZWNsYXJlIHdpdGggRlRfTE9DQUxfREVGLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0NC5jIChneHZfbW9ydF9zdWJ0YWJsZV90eXBlNF92YWxpZGF0ZSk6IERlY2xhcmUKKwl3aXRoIEZUX0xPQ0FMX0RFRi4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYyAoZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfc3VidGFibGVfc2V0dXAsCisJZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfSW5zZXJ0TGlzdF92YWxpZGF0ZSk6IEZpeCBDKysgY29tcGlsZXIKKwllcnJvcnMuCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU1X3ZhbGlkYXRlKTogRGVjbGFyZSB3aXRoIEZUX0xPQ0FMX0RFRi4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydC5jOiBJbmNsdWRlIGd4dmZlYXQuaC4KKwkoZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlLCBneHZfbW9ydF9jb3ZlcmFnZV92YWxpZGF0ZSk6CisJRGVjbGFyZSB3aXRoIEZUX0xPQ0FMX0RFRi4KKwkoZ3h2X21vcnRfc3VidGFibGVzX3ZhbGlkYXRlLCBneHZfbW9ydF92YWxpZGF0ZSk6IEltcHJvdmUgdHJhY2UKKwltZXNzYWdlcy4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydC5oIChneHZfbW9ydF9mZWF0dXJlX3ZhbGlkYXRlKTogUmVtb3ZlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4MC5jIChneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSk6IERlY2xhcmUKKwl3aXRoIEZUX0xPQ0FMX0RFRi4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9zdWJzdGl0dXRpb25UYWJsZV9sb2FkLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3N1YnRhYmxlX3NldHVwLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX2VudHJ5X3ZhbGlkYXRlLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3N1YnN0aXR1dGlvblRhYmxlX3ZhbGlkYXRlKTogRml4IEMrKworCWNvbXBpbGVyIGVycm9ycy4KKwkoZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUpOiBEZWNsYXJlIHdpdGggRlRfTE9DQUxfREVGLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4Mi5jIChneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl9vcHR0YWJsZV9sb2FkLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX3N1YnRhYmxlX3NldHVwLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX2xpZ0FjdGlvbkluZGV4X3ZhbGlkYXRlLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX2xpZ2F0dXJlVGFibGVfdmFsaWRhdGUpOiBGaXggQysrIGNvbXBpbGVyCisJZXJyb3JzLgorCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl92YWxpZGF0ZSk6IERlY2xhcmUgd2l0aCBGVF9MT0NBTF9ERUYuCisJRml4IHR5cG8uCisKKwkqIHNyYy9neHZhbGlkL2d4dm1vcng0LmMgKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU0X3ZhbGlkYXRlKTogRGVjbGFyZQorCXdpdGggRlRfTE9DQUxfREVGLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4NS5jIChneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9pbnNlcnRpb25HbHlwaF9sb2FkLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X3N1YnRhYmxlX3NldHVwKTogRml4IEMrKyBjb21waWxlciBlcnJvci4KKwkoZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfdmFsaWRhdGUpOiBEZWNsYXJlIHdpdGggRlRfTE9DQUxfREVGLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4LmMgKGd4dl9tb3J4X3N1YnRhYmxlc192YWxpZGF0ZSwKKwlneHZfbW9yeF92YWxpZGF0ZSk6IEltcHJvdmUgdHJhY2UgbWVzc2FnZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2b3BiZC5jIChneHZfb3BiZF9Mb29rdXBGbXQ0X3RyYW5zaXQpOiBGaXggY29tcGlsZXIKKwl3YXJuaW5ncy4KKwkoZ3h2X29wYmRfdmFsaWRhdGUpOiBJbXByb3ZlIHRyYWNlIG1lc3NhZ2UuCisKKwkqIHNyYy9neHZhbGlkL2d4dnByb3AuYzogRGVjb3JhdGUgY29uc3RhbnRzIHdpdGggYFUnIGFuZCBgTCcgd2hlcmUKKwlhcHByb3ByaWF0ZS4KKwkoZ3h2X3Byb3BfemVyb19hZHZhbmNlX3ZhbGlkYXRlLCBneHZfcHJvcF92YWxpZGF0ZSk6IEltcHJvdmUgdHJhY2UKKwltZXNzYWdlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZ0cmFrLmMgKGd4dl90cmFrX3RyYWNrVGFibGVfdmFsaWRhdGUpOiBSZW1vdmUgdW51c2VkCisJcGFyYW1ldGVyLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgorCShneHZfdHJha192YWxpZGF0ZSk6IEltcHJvdmUgdHJhY2UgbWVzc2FnZS4KKworCSogcnVsZXMubWsgKEdYVl9EUlZfSCk6IEFkZCBneHZmZWF0LmguCisKKzIwMDUtMDktMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIChHWFZfQlNMTl9WQUxVRV9FTVBUWSk6IEFkZCBgVScuCisKKwkqIHNyYy9neHZhbGlkL2d4bW9ydDEuYyAoR1hWX01PUlRfU1VCVEFCTEVfVFlQRTFfSEVBREVSX1NJWkUpLAorCXNyYy9neHZhbGlkL2d4bW9ydDIuYyAoR1hWX01PUlRfU1VCVEFCTEVfVFlQRTJfSEVBREVSX1NJWkUpOiBGaXgKKwl0eXBvLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4MC5jLCBzcmMvZ3h2YWxpZC9neHZtb3J4MS5jLAorCXNyYy9neHZhbGlkL2d4dm1vcngyLmMsIHNyYy9neHZhbGlkL2d4dm1vcng0LmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYywgc3JjL2d4dmFsaWQvZ3h2bW9ydC5jOiBJbXByb3ZlIHRyYWNlCisJbWVzc2FnZXMuCisJRGVjb3JhdGUgY29uc3RhbnRzIHdpdGggYFUnIGFuZCBgTCcgd2hlcmUgYXBwcm9wcmlhdGUuCisJRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA1LTA4LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXggdHlwby4KKworCSogc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIChneHZfYnNsbl92YWxpZGF0ZSk6IEZpeCB0cmFjZSBtZXNzYWdlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZjb21tbi5jIChneHZfb2R0ZWN0X2FkZF9yYW5nZSk6IFVzZSBgY29uc3QnLgorCisJKiBzcmMvZ3h2YWxpZC9neHZmZWF0LmMsIHNyYy9neHZhbGlkL2d4dmp1c3QuYywKKwlzcmMvZ3h2YWxpZC9neHZrZXJuLmMsIHNyYy9neHZhbGlkL2d4dmxjYXIuYywgc3JjL2d4dmFsaWQvZ3h2bW9kLmMsCisJc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYywgc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYywKKwlzcmMvZ3h2YWxpZC9neHZtb3J0Mi5jLCBzcmMvZ3h2YWxpZC9neHZtb3J0NC5jLAorCXNyYy9neHZhbGlkL2d4dm1vcnQ1LmMsIHNyYy9neHZhbGlkL2d4dm1vcnQuYzogSW1wcm92ZSB0cmFjZQorCW1lc3NhZ2VzLgorCURlY29yYXRlIGNvbnN0YW50cyB3aXRoIGBVJyBhbmQgYEwnIHdoZXJlIGFwcHJvcHJpYXRlLgorCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKworMjAwNS0wOC0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvZ3h2YWxpZC9SRUFETUU6IFJldmlzZWQuCisJKiBzcmMvZ3h2YWxpZC9neHZic2xuLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncy4KKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncy4KKwkoZ3h2X1hFbnRyeVRhYmxlX3ZhbGlkYXRlLCBneHZfY29tcGFyZV9yYW5nZXMpOiBSZW1vdmUgdW51c2VkCisJcGFyYW1ldGVyLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgorCUltcHJvdmUgdHJhY2UgbWVzc2FnZXMuCisJU29tZSBmb3JtYXR0aW5nLgorCisyMDA1LTA4LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwgaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmg6IEFkZAorCWEgcHJlbGltaW5hcnkgc2VjdGlvbiB3aXRoIHNvbWUgZXhwbGFuYXRpb25zIGFib3V0IHVzZXIgYWxsb2NhdGlvbi4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoSHRtbEZvcm1hdHRlci5zZWN0aW9uX2VudGVyKToKKwlEb24ndCBhYm9ydCBpZiB0aGVyZSBhcmUgbm8gZGF0YSB0eXBlcywgZnVuY3Rpb25zLCBldGMuLCBpbiBhCisJc2VjdGlvbi4KKwlQcmludCBzeW5vcHNpcyBvbmx5IGlmIHdlIGhhdmUgYSBkYXRhIHR5cGUsIGZ1bmN0aW9uLCBldGMuCisKKwkqIGRvY3MvSU5TVEFMTC5BTlksIGRvY3MvSU5TVEFMTCwgZG9jcy9JTlNUQUxMLlVOWCwgZG9jcy9DVVNUT01JWkUsCisJZG9jcy9JTlNUQUxMLkdOVSwgZG9jcy9UUlVFVFlQRSwgZG9jcy9ERUJVRywgZG9jcy9VUEdSQURFLlVOWCwKKwlkb2NzL1ZFUlNJT04uRExMLCBkb2NzL2Zvcm1hdHMudHh0OiBSZXZpc2VkLCBmb3JtYXR0ZWQuCisKKzIwMDUtMDgtMjggIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIFtUVF9NQVhfQ09NUE9TSVRFX1JFQ1VSU0VdOiBSZW1vdmVkLgorCShsb2FkX3RydWV0eXBlX2dseXBoKTogTGltaXQgcmVjdXJzaW9uIGRlcHRoIGJ5IGBtYXhDb21wb25lbnREZXB0aCcuCisKKzIwMDUtMDgtMjUgIEouIEFsaSBIYXJsb3cgIDxhbGlAYXZyYy5jaXR5LmFjLnVrPgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIuaW4gKENGbGFncyk6IEFkZCBtaXNzaW5nIGRpcmVjdG9yeS4KKworMjAwNS0wOC0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IE1lbnRpb24gZ3h2YWxpZCBtb2R1bGUuCisKKzIwMDUtMDgtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlKTogSW5pdGlhbGl6ZQorCXJlbmRlciBtb2RlIHByb3Blcmx5LiAgUmVwb3J0ZWQgYnkgY2hyaXNAZG9rZWluLmNvLnVrLgorCisyMDA1LTA4LTIzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJQWRkIGd4dmFsaWQgbW9kdWxlIHRvIHZhbGlkYXRlIFRydWVUeXBlIEdYL0FBVCB0YWJsZXMuCisKKwlNb2RpZmljYXRpb25zIG9uIGV4aXN0aW5nIGZpbGVzOgorCisJKiBKYW1maWxlOiBSZWdpc3RlciBneHZhbGlkIG1vZHVsZS4KKwkqIHNyYy9iYXNlL0phbWZpbGU6IFJlZ2lzdGVyIGZ0Z3h2YWwuYy4KKwkqIHNyYy9iYXNlL3J1bGUubWs6IFJlZ2lzdGVyIGZ0Z3h2YWwuYy4KKwkqIGRvY3MvSU5TVEFMTC5BTlk6IFJlZ2lzdGVyIGd4dmFsaWQvZ3h2YWxpZC5jLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9HWF9WQUxJREFURV9IKTogTmV3IG1hY3JvCisJdG8gaW5jbHVkZSBneHZhbGlkIGhlYWRlciBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaDogUmVnaXN0ZXIgZ3h2X21vZHVsZV9jbGFzcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmg6IEFkZCBjb21tZW50IGFib3V0IGd4X3ZhbGlkYXRpb24uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaDogQ2hhbmdlIGtleXdvcmQgRlRfVkFMSURBVEVfWFhYCisJdG8gRlRfVkFMSURBVEVfT1RYWFggdG8gY28tZXhpc3Qgd2l0aCBneHZhbGlkLgorCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaDogQWRkIHRhZ3MgZm9yIFRydWVUeXBlIEdYL0FBVCB0YWJsZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSCk6IE5ldworCW1hY3JvIGZvciBneHZhbGlkIHNlcnZpY2UuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIHRyYWNlIGZhY2lsaXRpZXMgZm9yCisJZ3h2YWxpZC4KKworCU5ldyBmaWxlcyBvbiBleGlzdGluZyBkaXJlY3RvcmllczoKKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmg6IFJlZ2lzdHJhdGlvbiBvZgorCXZhbGlkYXRpb24gc2VydmljZSBmb3IgVHJ1ZVR5cGUgR1gvQUFUIGFuZCBjbGFzc2ljIGtlcm4gdGFibGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaDogUHVibGljIEFQSSBkZWZpbml0aW9uIHRvIHVzZSBneHZhbGlkLgorCSogc3JjL2Jhc2UvZnRneHZhbC5jOiBQdWJsaWMgQVBJIG9mIGd4dmFsaWQuCisKKwlOZXcgZmlsZXMgdW5kZXIgc3JjL2d4dmFsaWQvOgorCisJKiBzcmMvZ3h2YWxpZC9KYW1maWxlIHNyYy9neHZhbGlkL1JFQURNRSBzcmMvZ3h2YWxpZC9tb2R1bGUubWsKKwlzcmMvZ3h2YWxpZC9ydWxlcy5tayBzcmMvZ3h2YWxpZC9neHZhbGlkLmMgc3JjL2d4dmFsaWQvZ3h2YWxpZC5oCisJc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIHNyYy9neHZhbGlkL2d4dmNvbW1uLmMgc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaAorCXNyYy9neHZhbGlkL2d4dmVycm9yLmggc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jIHNyYy9neHZhbGlkL2d4dmZnZW4uYworCXNyYy9neHZhbGlkL2d4dmp1c3QuYyBzcmMvZ3h2YWxpZC9neHZrZXJuLmMgc3JjL2d4dmFsaWQvZ3h2bGNhci5jCisJc3JjL2d4dmFsaWQvZ3h2bW9kLmMgc3JjL2d4dmFsaWQvZ3h2bW9kLmggc3JjL2d4dmFsaWQvZ3h2bW9ydC5jCisJc3JjL2d4dmFsaWQvZ3h2bW9ydC5oIHNyYy9neHZhbGlkL2d4dm1vcnQwLmMgc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYworCXNyYy9neHZhbGlkL2d4dm1vcnQyLmMgc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYyBzcmMvZ3h2YWxpZC9neHZtb3J0NS5jCisJc3JjL2d4dmFsaWQvZ3h2bW9yeC5jIHNyYy9neHZhbGlkL2d4dm1vcnguaCBzcmMvZ3h2YWxpZC9neHZtb3J4MC5jCisJc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYyBzcmMvZ3h2YWxpZC9neHZtb3J4Mi5jIHNyYy9neHZhbGlkL2d4dm1vcng0LmMKKwlzcmMvZ3h2YWxpZC9neHZtb3J4NS5jIHNyYy9neHZhbGlkL2d4dm9wYmQuYyBzcmMvZ3h2YWxpZC9neHZwcm9wLmMKKwlzcmMvZ3h2YWxpZC9neHZ0cmFrLmM6IE5ldyBmaWxlcywgZ3h2YWxpZCBib2R5LgorCisyMDA1LTA4LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpOiBPbmx5IHRyYW5zbGF0ZSBvdXRsaW5lCisJdG8gKDAsMCkgaWYgYml0IDEgb2YgdGhlIGBoZWFkJyB0YWJsZSBpc24ndCBzZXQuICBUaGlzIGltcHJvdmVzCisJcmVuZGVyaW5nIG9mIGJ1Z2d5IGZvbnRzLgorCisyMDA1LTA4LTIwICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKExvYWRfR2x5cGgpOiBEb24ndCBjaGVjayB0aGUgdmFsaWRpdHkgb2YKKwl0dG1ldHJpY3MgaGVyZS4gIFRydWVUeXBlIGZvbnRzIHdpdGggb25seSBzYml0cyBhbHdheXMgaGF2ZQorCXR0bWV0cmljcy52YWxpZCBzZXQgdG8gZmFsc2UuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpOiBDaGVjayB0aGF0IHR0bWV0cmljcyBpcworCXZhbGlkIGJlZm9yZSBsb2FkaW5nIG91dGxpbmUgZ2x5cGguCisKKwkqIHNyYy9jYWNoZS9mdGNpbWFnZS5jIChGVENfSU5vZGVfTmV3KTogRml4IGEgbWVtb3J5IGxlYWsuCisKKzIwMDUtMDgtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9tZXRyaWNzX2hlYWRlcik6IElnbm9yZSBtaXNzaW5nCisJYGhoZWEnIHRhYmxlIGZvciBTRk5UIE1hYyBmb250cy4gIENoYW5nZSBiYXNlZCBvbiBhIHBhdGNoIGJ5CisJbXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanAuCisKKzIwMDUtMDgtMjAgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCSogc3JjL290dmFsaWQvb3R2bW9kLmMgKG90dl92YWxpZGF0ZSk6IFVzZSBmdF92YWxpZGF0b3JfcnVuIGluc3RlYWQKKwlvZiBmdF9zZXRqbXAuCisKKzIwMDUtMDgtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEZpeCBjb21waWxlcgorCXdhcm5pbmdzLgorCisyMDA1LTA4LTE2ICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMsIHNyYy90cnVldHlwZS90dGludGVycC5oOiBVcGRhdGUgY29weXJpZ2h0CisJbWVzc2FnZXMuCisKKzIwMDUtMDgtMTYgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYywgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmg6IFJlbW92ZSBvcmlnaW5hbAorCVRUX0RvbmVfQ29udGV4dCBhbmQgcmVuYW1lIFRUX0Rlc3Ryb3lfQ29udGV4dCB0byBUVF9Eb25lX0NvbnRleHQKKwl3aXRoIHNsaWdodCBjaGFuZ2VzLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoVFRfTmV3X0NvbnRleHQpOiBOb3cgdGFrZXMgVFRfRHJpdmVyIGFyZ3VtZW50IGRpcmVjdGx5LgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oICh0dF9zbG90X2luaXQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2RyaXZlcl9pbml0KTogSW5pdGlhbGl6ZSBleGVjdXRpb24KKwljb250ZXh0IGhlcmUuCisJKHR0X3Nsb3RfaW5pdCk6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgZXh0cmEgcG9pbnRzIGZvciB0aGUgaW50ZXJuYWwKKwlnbHlwaCBsb2FkZXIuICBXZSB0aGVuIHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCBvZiBmYWNlJ3MgZ2x5cGgKKwlsb2FkZXIsIHdoZW4gbG9hZGluZyBnbHlwaC4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X2RyaXZlcl9jbGFzcyk6IFVzZSB0dF9zbG90X2luaXQgZm9yCisJZ2x5cGggc2xvdCBpbml0aWFsaXphdGlvbi4KKwkoTG9hZF9HbHlwaCk6IExvYWQgZmxhZyBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgaGVyZS4gIFJldHVybiBlcnJvcgorCWlmIHNpemUgaXMgTlVMTC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogSGVhdnkgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcuCisJKG9yZ190b19jdXIpOiBSZW1vdmVkLgorCShUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IENhbGwgRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMuCisJKFRUX0hpbnRfR2x5cGgpOiBOZXcgZnVuY3Rpb24gdG8gaGludCBhIHpvbmUsIHByZXBhcmVkIGJ5IGNhbGxlci4KKwkoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBzL2xvYWQvbG9hZGVyLy4KKwlVc2UgbG9hZGVyLT5wcCB2YWx1ZXMgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW9uLgorCVVzZSBUVF9IaW50X0dseXBoLgorCU5vIG5lZWQgdG8gc2F2ZS9yZXN0b3JlIGxvYWRlci0+c3RyZWFtIGJlZm9yZSBhbmQgYWZ0ZXIKKwlUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMgbm93LgorCShUVF9MT0FERVJfU0VUX1BQKTogTmV3IG1hY3JvIHRvIGNhbGN1bGF0ZSBhbmQgc2V0IHRoZSBmb3VyIHBoYW50b20KKwlwb2ludHMuCisJKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBOZXZlciBzZXQgZXhlYy0+Z2x5cGhTaXplIHRvIDAuICBUaGlzIGNsb3NlcworCVNhdmFubmFoIGJ1ZyAjMTMxMDcuCisJRm9yZ2V0IGdseXBoIGZyYW1lIGJlZm9yZSBjYWxsaW5nIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLgorCVVzZSBUVF9MT0FERVJfU0VUX1BQLgorCVNjYWxlIGFsbCBmb3VyIHBoYW50b20gcG9pbnRzLgorCVNwbGl0IG9mZiBzb21lIGZ1bmN0aW9uYWxpdHkgdG8gLi4uCisJKFRUX1Byb2Nlc3NfQ29tcG9zaXRlX0NvbXBvbmVudCwgVFRfUHJvY2Vzc19Db21wb3NpdGVfR2x5cGgpOiBUaGVzZQorCW5ldyBmdW5jdGlvbnMuCisJKFRUX0xvYWRfR2x5cGgpOiBTZXQgdmFyaW91cyBmaWVsZHMgb2YgYGdseXBoJyBoZXJlLCBub3QgaW4KKwlsb2FkX3RydWV0eXBlX2dseXBoIGFuZCBjb21wdXRlX2dseXBoX21ldHJpY3MuCisJU3BsaXQgb2ZmIHNvbWUgZnVuY3Rpb25hbGl0eSB0byAuLi4KKwkobG9hZF9zYml0X2ltYWdlLCB0dF9sb2FkZXJfaW5pdCk6IFRoZXNlIG5ldyBmdW5jdGlvbnMuCisJKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IENhbGwgRlRfT3V0bGluZV9HZXRfQ0JveC4KKworMjAwNS0wOC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0lOU1RBTEwuQU5ZOiBVcGRhdGVkLgorCisyMDA1LTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciksCisJc3JjL3BzYXV4L3Bzb2Jqcy5jICh0MV9idWlsZGVyX2Nsb3NlX2NvbnRvdXIpOiBQcm90ZWN0IGFnYWluc3QKKwl6ZXJvIGBvdXRsaW5lJyBwb2ludGVyLgorCisJKiBzcmMvYmFzZS9mdGdsb2Fkci5jIChGVF9HbHlwaExvYWRlcl9BZGQpOiBQcm90ZWN0IGFnYWluc3QgemVybworCWBsb2FkZXInIGFkZHJlc3MuCisKKzIwMDUtMDgtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9pbnRlcmZhY2UpIFtGVF9PUFRJTUlaRV9NRU1PUlldOgorCVJlYWN0aXZhdGUgcG9pbnRlcnMgdG8gdHRfZmluZF9zYml0X2ltYWdlIGFuZCB0dF9sb2FkX3NiaXRfbWV0cmljcworCXRvIG1ha2UgWCB3b3JrIGFnYWluLgorCisyMDA1LTA4LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9vdHZhbGlkL290dmNvbW1uLmg6IFJlbW92ZSBkZWFkIGNvZGUuCisKKzIwMDUtMDctMzEgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXApOiBOZXcKKwlmdW5jdGlvbnMuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9ydW5fZnBnbSwgdHRfc2l6ZV9ydW5fcHJlcCk6IE5ldworCWZ1bmN0aW9ucy4KKwkodHRfc2l6ZV9pbml0KTogQWRkIDQsIGluc3RlYWQgb2YgMiwgKHBoYW50b20pIHBvaW50cyB0byB0d2lsaWdodAorCXpvbmUuCisJTW92ZSBjb2RlIHRoYXQgcnVucyBmcGdtIHRvIHR0X3NpemVfcnVuX2ZwZ20uCisJKFJlc2V0X091dGxpbmVfU2l6ZSk6IE1vdmUgY29kZSB0aGF0IHJ1bnMgcHJlcCB0byB0dF9zaXplX3J1bl9wcmVwLgorCSh0dF9nbHlwaHpvbmVfbmV3KTogQWxsb2NhdGUgcmlnaHQgc2l6ZSBvZiBhcnJheXMuCisJU2V0IG1heF9wb2ludHMgYW5kIG1heF9jb250b3VycyBwcm9wZXJseS4KKworMjAwNS0wNy0yNiAgQ2hpYSBJIFd1ICA8YjkwMjAxMDQ3QG50dS5lZHUudHc+CisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChTZXRfQ2hhcl9TaXplcyk6IEF2b2lkIHVubmVjZXNzYXJ5CisJY29tcHV0YXRpb25zIGFuZCBjbGVhbiB1cC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChzdHJ1Y3QgVFRfU2l6ZVJlY18pOiBDb21tZW50IG9uIHRoZQorCWludGVybmFsIGNvcHkgb2YgbWV0cmljcy4KKworMjAwNS0wNy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCAoRlRfT3V0bGluZV9FbWJvbGRlbik6IEZpeCBwcm90b3R5cGUuCisJUmVwb3J0ZWQgYnkgWGVyeGVzLgorCisyMDA1LTA3LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfUkVBTExPQ19BUlJBWSk6IEZpeCB0eXBvLgorCVJlcG9ydGVkIGJ5IEJyZXR0IEh1dGxleS4KKworMjAwNS0wNi0zMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc2ZudC9mdGJpdG1hcC5jLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jLCBzcmMvc2ZudC90dGNtYXAuYzoKKwlSZW1vdmluZyBjb21waWxlciB3YXJuaW5ncyAoVmlzdWFsIEMrKyAvVzQpLgorCisKKwlJbXBsZW1lbnQgYSB3b3JrLWFyb3VuZCBmb3IgYnJva2VuIEMgcHJlcHJvY2Vzc29yIGluIFZpc3VhbCBDKysgKGl0CisJaGFzIGJlZW4gY29uZmlybWVkIGJ5IHRoZSBNUyBkZXZlbG9wZXJzIHRoYXQgaXQgaXMgaW5kZWVkIGEgYnVnCisJd2hpY2ggd29uJ3QgYmUgZml4ZWQgaW4gdGhlIHZlcnkgbmVhciBmdXR1cmUpLgorCisJKiBKYW1maWxlIChGVDJfQ09NUE9ORU5UUyk6IEluY2x1ZGUgb3R2YWxpZCAoYWdhaW4pLgorCisJKiBzcmMvb3R2YWxpZC9vdHZjb21tbi5oIChPVFZfTkFNRSwgT1RWX0ZVTkMpOiBOZXcgbWFjcm9zLgorCShPVFZfTkVTVDEsIE9UVl9ORVNUMiwgT1RWX05FU1QzKTogVXNlIE9UVl9OQU1FIGFuZCBPVFZfRlVOQyB0bworCWF2b2lkIGFyZ3VtZW50IGV4cGFuc2lvbiBieSBhcmd1bWVudCBwcmVzY2FuLgorCUFwcGVuZCBgRnVuYycgdG8gYWxsIGFmZmVjdGVkIG1hY3JvcyBhbmQgY2hhbmdlIHRoZW0gdG8gdGFrZSBqdXN0IGEKKwlzaW5nbGUgYXJndW1lbnQuICBFeGFtcGxlOiBgQXR0YWNoTGlzdCcgaXMgcmVuYW1lZCB0bworCWBBdHRhY2hMaXN0RnVuYycuCisKKwkqIHNyYy9vdHZhbGlkL290dmdkZWYuYywgc3JjL290dmFsaWQvb3R2Z3Bvcy5jLAorCXNyYy9vdHZhbGlkL290dmdzdWIuYywgc3JjL290dmpzdGYuYzogQXBwZW5kIGBGdW5jJyB0byBtYWNyb3MKKwlhZmZlY3RlZCBieSB0aGUgY2hhbmdlcyB0byBPVFZfTkVTVHggYW5kIG1vZGlmeSB0aGVtIHRvIHRha2UganVzdCBhCisJc2luZ2xlIGFyZ3VtZW50LgorCisyMDA1LTA2LTIwICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCwgc3JjL2Jhc2UvZnRvYmpzLmM6IE5ldyBmdW5jdGlvbgorCWZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpOiBVc2UKKwlmdF9nbHlwaHNsb3RfZ3JpZF9maXRfbWV0cmljcy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jCisJKGNpZF9zbG90X2xvYWRfZ2x5cGgpLCBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKTogVXNlCisJZnRfZ2x5cGhzbG90X2dyaWRfZml0X21ldHJpY3MuCisJRlRfT3V0bGluZV9HZXRfQ0JveCBpcyBjYWxsZWQgdHdpY2UuCisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogTW9kaWZ5IG1ldHJpY3MgdG8gbW9yZQorCXJlYXNvbmFibGUgdmFsdWVzIHdoZW4gZW1ib2xkZW5pbmcgb3V0bGluZSBnbHlwaHMuICBUaGUgdGhlb3JldGljCisJb25lcyBhcmUgdW5yZWFsaXN0aWMuCisKKzIwMDUtMDYtMTYgIENoaWEgSSBXdSAgPGI5MDIwMTA0N0BudHUuZWR1LnR3PgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfRW1ib2xkZW4pOiBTdHJlbmd0aCBzaG91bGQgYmUKKwloYWx2ZWQuCisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogQ2hhbmdlIHRoZSBkZWZhdWx0CisJc3RyZW5ndGguCisJRG9uJ3QgaW5jcmVhc2Ugc2xvdC0+YWR2YW5jZS55LgorCisyMDA1LTA2LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfTUlOT1IpOiBTZXQgdG8gMi4KKwkoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLmFjICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOTo5OjMuCisJQ3VycmVudGx5LCB3ZSBhcmUgc3RpbGwgYmluYXJ5IGNvbXBhdGlibGUuCisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvajogcy8yMTkvMjExMC8sIHMvMi4xLjkvMi4xLjEwLy4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rIChyZWZkb2MpLCBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyk6CisJcy8yLjEuOS8yLjEuMTAvLgorCisJKiBkb2NzL0NIQU5HRVMsIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZWQuCisKKwkqIENoYW5nZUxvZzogU3BsaXQgb2ZmIG9sZGVyIGVudHJpZXMgaW50by4uLgorCSogQ2hhbmdlTG9nLjIwLCBDaGFuZ2VMb2cuMjE6IFRoZXNlIG5ldyBmaWxlcy4KKworMjAwNS0wNi0xNSAgS2lyaWxsIFNtZWxrb3YgIDxraXJyQG1ucy5zcGIucnU+CisKKwlUaGUgbmV4dCByZWxlYXNlIHdpbGwgYmUgMi4yLjAsIHNvIGRvbid0IHdvcnJ5IGFib3V0IHNvdXJjZSBjb2RlCisJYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9PdXRsaW5lX01vdmVUb0Z1bmMsCisJRlRfT3V0bGluZV9MaW5lVG9GdW5jLCBGVF9PdXRsaW5lX0NvbmljVG9GdW5jLAorCUZUX091dGxpbmVfQ3ViaWNUb0Z1bmMsIEZUX1NwYW5GdW5jLCBGVF9SYXN0ZXJfUmVuZGVyRnVuYyksCisJaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oIChGVF9HbHlwaF9UcmFuc2Zvcm1GdW5jLAorCUZUX1JlbmRlcmVyX1JlbmRlckZ1bmMsIEZUX1JlbmRlcmVyX1RyYW5zZm9ybUZ1bmMpOiBEZWNvcmF0ZQorCXBhcmFtZXRlcnMgd2l0aCBgY29uc3QnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDA1LTA2LTE1ICBDaGlhIEkgV3UgIDxiOTAyMDEwNDdAbnR1LmVkdS50dz4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogQ29tcHV0ZSB2ZXJ0QmVhcmluZ1kKKwl0byBtYWtlIGdseXBocyBjZW50ZXJlZCB2ZXJ0aWNhbGx5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpOiBDb21wdXRlCisJdmVydEJlYXJpbmdZIHRvIG1ha2UgZ2x5cGhzIGNlbnRlcmVkIHZlcnRpY2FsbHkuCisJRml4IHNvbWUgYnVncyBpbiB2ZXJ0aWNhbCBtZXRyaWNzOgorCisJICAuIGxvYWRlci0+cHAzLnkgYW5kIGxvYWRlci0+cHA0LnkgYXJlIGluIDI2LjYgZm9ybWF0LCBub3QgaW4gZm9udAorCSAgICB1bml0cy4KKwkgIC4gQXMgd2UgdXNlIHRoZSBnbHlwaCdzIGNib3ggdG8gY2FsY3VsYXRlIHRoZSB0b3AgYmVhcmluZyBub3cKKwkgICAgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGp1c3QgYHRvcCcuCisKKzIwMDUtMDYtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL290dmFsaWQvb3R2Y29tbW4uaCAoT1RWX09QVElPTkFMX1RBQkxFKTogVXNlIEZUX1VTaG9ydCB0byBiZQorCWluIHN5bmMgd2l0aCBPVFZfT1BUSU9OQUxfT0ZGU0VULiAgUmVwb3J0ZWQgYnkgWUFNQVRPIE1hc2F0YWtlLgorCisyMDA1LTA2LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvcmVsZWFzZTogVXBkYXRlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA1LTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKK2FuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKK0xJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CitpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorZnVsbHkuCisKKworTG9jYWwgVmFyaWFibGVzOgordmVyc2lvbi1jb250cm9sOiBuZXZlcgorY29kaW5nOiB1dGYtOAorRW5kOgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L0NoYW5nZUxvZy4yMyBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmZDMzYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjMKQEAgLTAsMCArMSw3OTQ4IEBACisyMDEwLTAyLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi4zLjEyIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtMTInLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi4zLjEyLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi4zLjExLzIuMy4xMi8sIHMvMjMxMS8yMzEyLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxMi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDEwOjA6NC4KKworMjAxMC0wMi0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUltcHJvdmUgYXV0b3Rvb2wgdmVyc2lvbiBjaGVja2luZyB0byB3b3JrIHdpdGggYmV0YSByZWxlYXNlcy4KKworCSogYXV0b2dlbi5zaCAoY2hlY2tfdG9vbF92ZXJzaW9uKTogSW1wcm92ZSB0aGUgZXh0cmFjdGlvbiBvZiB2ZXJzaW9uCisJbnVtYmVyIGZyb20gInRvb2wgLS12ZXJzaW9uIiBvdXRwdXQuICBTb21lIGJldGEgcmVsZWFzZXMgb2YKKwlhdXRvdG9vbHMgaGF2ZSBleHRyYSBzdHJpbmdzIGJlZm9yZSB2ZXJzaW9uIG51bWJlci4KKworMjAxMC0wMi0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBvdmVyYWxsb2NhdGluZyBidWcgaW4gRlRfT3V0bGluZV9OZXdfSW50ZXJuYWwoKS4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX05ld19JbnRlcm5hbCk6IFRoZSBsZW5ndGggb2YKKwlGVF9PdXRsaW5lLT5wb2ludHNbXSBzaG91bGQgYmUgbnVtUG9pbnRzLCBub3QgMiAqIG51bVBvaW50cy4KKwlGb3VuZCBieSBQYXVsIE1lc3NtZXIsIHNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEwLTAyL21zZzAwMDAzLmh0bWwKKworMjAxMC0wMi0xMCAgS2VuIFNoYXJwICA8a2VuLnNoYXJwQGFydGlmZXguY29tPgorCisJUmVhbGx5IGZpeCBTYXZhbm5haCBidWcgIzI4Njc4IChwYXJ0IDIpLgorCisJU2luY2Ugd2UgY29uc2lkZXIgYHNidycgZm9yIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiBvbmx5LCB3ZSBzdGlsbCBoYXZlCisJdG8gc3ludGhlc2l6ZSB2ZXJ0aWNhbCBtZXRyaWNzIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHVzZSB0aGUgdmVydGljYWwKKwl3cml0aW5nIGRpcmVjdGlvbi4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jCisJKGNpZF9zbG90X2xvYWRfZ2x5cGgpLCBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKToKKwlTeW50aGVzaXplIHZlcnRpY2FsIG1ldHJpY3MgKG9ubHkpIGlmIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIGlzCisJc2V0LgorCisyMDEwLTAyLTEwICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlSZWFsbHkgZml4IFNhdmFubmFoIGJ1ZyAjMjg2NzggKHBhcnQgMSkuCisKKwlBZnRlciBsb25nIGRpc2N1c3Npb24sIHdlIG5vdyBjb25zaWRlciB0aGUgY2hhcmFjdGVyIHdpZHRoIHZlY3RvcgorCSh3eCx3eSkgcmV0dXJuZWQgYnkgdGhlIGBzYncnIFR5cGUgMSBvcGVyYXRvciBhcyBiZWluZyBwYXJ0IG9mICpvbmUqCisJZGlyZWN0aW9uIG9ubHkuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyB0aGUgaG9yaXpvbnRhbAorCXdyaXRpbmcgZGlyZWN0aW9uLCB5b3UgZ2V0IHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjb21wb25lbnRzIG9mCisJdGhlIGFkdmFuY2Ugd2lkdGggZm9yIHRoaXMgZGlyZWN0aW9uLiAgTm90ZSB0aGF0IE9wZW5UeXBlIGFuZCBDRkYgZm9udHMKKwlkb24ndCBoYXZlIHN1Y2ggYSB2ZXJ0aWNhbCBjb21wb25lbnQ7IGluc3RlYWQsIHRoZSBHUE9TIHRhYmxlIGNhbiBiZQorCXVzZWQgdG8gZ2VuZXJhdGUgdHdvLWRpbWVuc2lvbmFsIGFkdmFuY2Ugd2lkdGhzIChidXQgdGhpcyBpc24ndAorCWhhbmRsZWQgYnkgRnJlZVR5cGUpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmggKEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMpOiBBZGQKKwlgYWR2YW5jZV92JyBmaWVsZCB0byBob2xkIHRoZSB2ZXJ0aWNhbCBjb21wb25lbnQgb2YgdGhlIGFkdmFuY2UKKwl2YWx1ZS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfZ2V0X21ldHJpY3MpLCBzcmMvY2ZmL2NmZmdsb2FkLmMKKwkoY2ZmX3Nsb3RfbG9hZCksIHNyYy90eXBlMS90MWdsb2FkLmMKKwkoVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyksIHNyYy9jaWQvY2lkZ2xvYWQuYworCShjaWRfbG9hZF9nbHlwaCk6IFVzZSBpdC4KKworMjAxMC0wMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkZXZlbC9mdG9wdGlvbi5oIFtGVF9DT05GSUdfT1BUSU9OX1BJQ106IERlZmluZS4KKworMjAxMC0wMi0wNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHBhc3NlZCB0byBGVF9Nb2R1bGVfUmVxdWVzdGVyLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9pbnRlcmZhY2UpOiBEb24ndCB1c2UgYG1vZHVsZScuCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc25hbWVzX2dldF9pbnRlcmZhY2UpOiBEaXR0by4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2ludGVyZmFjZSk6IENoZWNrIE5VTEwgYGRyaXZlcicuCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2ludGVyZmFjZSk6IERpdHRvLgorCisyMDEwLTAxLTI5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IG1lbW9yeSBsZWFrcyBpbiBwcmV2aW91cyBwYXRjaC4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogRG9uJ3Qgb3ZlcndyaXRlIHRoZSBzdHJpbmdzCisJYWxsb2NhdGVkIGZvciBmYWNlLT5yb290LmZhbWlseV9uYW1lIGFuZCBzdHlsZV9uYW1lLgorCisyMDEwLTAxLTI5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJTmV3IHBhcmFtZXRlcnMgZm9yIEZUX09wZW5fRmFjZSgpIHRvIGlnbm9yZSBwcmVmZXJyZWQgZmFtaWx5IG5hbWVzLgorCisJUHJlZmVycmVkIGZhbWlseSBuYW1lcyBzaG91bGQgYmUgdXNlZCBmb3IgbGVnYWN5IHN5c3RlbXMgdGhhdAorCWNhbiBob2xkIG9ubHkgYSBmZXcgZmFjZXMgKDw9IDQpIGZvciBhIGZhbWlseSBuYW1lLiBTdWdnZXN0ZWQgYnkKKwlBbmRyZWFzIEhlaW5yaWNoLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDEwLTAxL21zZzAwMDAxLmh0bWwKKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oIChGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9GQU1JTFksCisJRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfU1VCRkFNSUxZKTogRGVmaW5lLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBDaGVjayB0aGUgYXJndW1lbnRzIGFuZAorCWlnbm9yZSBwcmVmZXJyZWQgZmFtaWx5IGFuZCBzdWJmYW1pbHkgbmFtZXMgaWYgcmVxdWVzdGVkLgorCisyMDEwLTAxLTI3ICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMyODY3OC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jCisJKGNpZF9sb2FkX2dseXBoKTogSGFuZGxlIHZlcnRpY2FsIG1ldHJpY3MgY29ycmVjdGx5LgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9QYXJzZV9HbHlwaF9BbmRfR2V0X0NoYXJfU3RyaW5nKTogSGFuZGxlCisJdmVydGljYWwgbWV0cmljcyBjb3JyZWN0bHkuCisJKFQxX0xvYWRfR2x5cGgpOiBEb24ndCBzeW50aGVzaXplIHZlcnRpY2FsIG1ldHJpY3MuCisKKzIwMTAtMDEtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2UgRlRfU2V0X1RyYW5zZm9ybSB3b3JrIGlmIG5vIHJlbmRlcmVyIGlzIGF2YWlsYWJsZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBBcHBseSBgc3RhbmRhcmQnIHRyYW5zZm9ybWF0aW9uCisJaWYgbm8gcmVuZGVyZXIgaXMgY29tcGlsZWQgaW50byB0aGUgbGlicmFyeS4KKworMjAxMC0wMS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbXBpbGF0aW9uIHdhcm5pbmcuCisKKwkqIHNyYy9iYXNlL2Z0YmFzZS5oOiBzL0xPQ0FMX0RFRi9MT0NBTC8uCisJKiBzcmMvYmFzZS9mdG9iamMuczogSW5jbHVkZSBmdGJhc2UuaCBjb25kaXRpb25hbGx5LgorCisyMDEwLTAxLTExICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKwlQcm92aWRlIGlubGluZSBhc3NlbWJseSBjb2RlIGZvciBSVkNUIGNvbXBpbGVyLgorCVRoaXMgaXMgU2F2YW5uYWggcGF0Y2ggIzcwNTkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX01VTEZJWF9BU1NFTUJMRVIsCisJRlRfTXVsRml4X2FybSkgW19fQ0NfQVJNIHx8IF9fQVJNX0NDXTogRGVmaW5lLgorCisyMDEwLTAxLTA4ICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMyODUyMS4KKworCUlzc3VlICMyODIyNiBpbnZvbHZlZCBhIHdvcmstYXJvdW5kIGZvciBhIGZvbnQgd2hpY2ggdXNlZCB0aGUKKwlgc2V0Y3VycmVudHBvaW50JyBvcGVyYXRvciBpbiBhbiBpbnZhbGlkIHdheTsgdGhpcyBvcGVyYXRvciBpcyBvbmx5CisJc3VwcG9zZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSByZXN1bHQgb2YgT3RoZXJTdWJycywgYW5kIHRoZSBmb250IHVzZWQKKwlpdCBkaXJlY3RseS4gIFRoZSBzdXBwbGllZCBwYXRjaCByZW1vdmVkIHRoZSBibG9jayBvZiBjb2RlIHdoaWNoCisJY2hlY2tlZCB0aGlzIHVzYWdlIGVudGlyZWx5LgorCisJVGhpcyB0dXJucyBvdXQgdG8gYmUgYSBCYWQgVGhpbmcuICBJZiBgc2V0Y3VycmVudHBvaW50JyBpcyBiZWluZworCXVzZWQgY29ycmVjdGx5IGl0IHNob3VsZCByZXNldCB0aGUgZmxleCBmbGFnIGluIHRoZSBkZWNvZGVyLiAgSWYgd2UKKwlkb24ndCBkbyB0aGlzIHRoZW4gdGhlIGZsYWcgbmV2ZXIgZ2V0cyByZXNldCBhbmQgd2Ugb21pdCBhbnkgZnVydGhlcgorCWNvbnRvdXJzIGZyb20gdGhlIGdseXBoIChhdCBsZWFzdCB1bnRpbCB3ZSBjbG9zZSB0aGUgcGF0aCBvcgorCXNpbWlsYXIpLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8b3Bfc2V0Y3VycmVudHBvaW50PjogSGFuZGxlIGBmbGV4X3N0YXRlJyBjb3JyZWN0bHkuCisKKzIwMTAtMDEtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFwcGx5IHJlcG9ydHMgZnJvbSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisKKwkqIHNyYy9sencvZnRsencuYyAoZnRfbHp3X2ZpbGVfaW5pdCksIHNyYy9iYXNlL2Z0c3Ryb2tlLmMKKwkoRlRfU3Ryb2tlcl9QYXJzZU91dGxpbmUpLCBzcmMvYmFzZS9mdHN5bnRoLmMKKwkoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogUmVtb3ZlIGRlYWQgY29kZS4KKworCSogc3JjL2Jhc2UvZnRwYXRlbnQuYyAoX3R0X2NoZWNrX3BhdGVudHNfaW5fdGFibGUpOiBJbml0aWFsaXplCisJYG9mZnNldF9pJyBhbmQgYGxlbmd0aF9pJy4KKworMjAxMC0wMS0wNSAgUmFscGggR2lsZXMgIDxnaWxlc0BnaG9zdHNjcmlwdC5jb20+CisKKwlFbmFibGUgdGhlIGluY3JlbWVudGFsIGZvbnQgaW50ZXJmYWNlIGJ5IGRlZmF1bHQuCisKKwlHaG9zdHNjcmlwdCByZXF1aXJlcyB0aGUgaW5jcmVtZW50YWwgZm9udCBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nCisJc29tZSBQb3N0c2NyaXB0IGRvY3VtZW50cy4gIEl0IGlzIG1vdmluZyB0byB1c2luZyBGcmVlVHlwZSBhcyBpdHMKKwlwcmltYXJ5IHJlbmRlcmVyOyBzdXBwb3J0aW5nIHRoaXMgaW4gdGhlIGRlZmF1bHQgYnVpbGQgbWFrZXMgaXQKKwlHaG9zdHNjcmlwdCB0byBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3lzdGVtIEZyZWVUeXBlIHdoZW4gb25lIGlzCisJYXZhaWxhYmxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oIChGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMKToKKwlVbmNvbW1lbnQuCisKKzIwMTAtMDEtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzI4Mzk1LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAoTG9hZF9HbHlwaCksIHNyYy90eXBlMS90MWdsb2FkLmMKKwkoVDFfTG9hZGFfR2x5cGgpOiBEb24ndCBjaGVjayBgbnVtX2dseXBocycgaWYgaW5jcmVtZW50YWwgaW50ZXJmYWNlCisJaXMgdXNlZC4KKworMjAxMC0wMS0wNSAgS2VuIFNoYXJwICA8a2VuLnNoYXJwQGFydGlmZXguY29tPgorCisJTWFrZSBUeXBlIDEgYHNlYWMnIG9wZXJhdG9yIHdvcmsgd2l0aCBpbmNyZW1lbnRhbCBpbnRlcmZhY2UuCisJVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzI4NDgwLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFvcGVyYXRvcl9zZWFjKTogRG9uJ3QgY2hlY2sgYGdseXBoX25hbWVzJworCWlmIGluY3JlbWVudGFsIGludGVyZmFjZSBpcyB1c2VkLgorCisyMDEwLTAxLTA0ICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlNYWtlIGluY3JlbWVudGFsIGludGVyZmFjZSB3b3JrIHdpdGggVHJ1ZVR5cGUgZm9udHMuCisJVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzI4NDc4LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogRG9uJ3QgY2hlY2sKKwlgZ2x5Zl9vZmZzZXQnIGlmIGluY3JlbWVudGFsIGludGVyZmFjZSBpcyB1c2VkLgorCisyMDA5LTEyLTMxICBMYXJzIEFicmFoYW1zc29uICA8d29ua29Ab3BlcmEuY29tPgorCisJTWFrZSBjb21waWxhdGlvbiB3aXRoIEZUX0NPTkZJR19PUFRJT05fUElDIHdvcmsgYWdhaW4uCisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2x5cGhfVG9fQml0bWFwKSBbRlRfQ09ORklHX09QVElPTl9QSUNdOgorCURlY2xhcmUgYGxpYnJhcnknIGZvciBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VULgorCisJKiBzcmMvYmFzZS9mdGluaXQuYyAoZnRfZGVzdHJveV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzLAorCWZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKTogVXNlIHByb3BlciBjYXN0cyAobmVlZGVkIGZvciBDKysKKwljb21waWxhdGlvbikuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwMTNfY2xhc3NfcmVjKTogVXNlIEZUX0RFRklORV9UVF9DTUFQLgorCisyMDA5LTEyLTIyICBNYXJjIEtsZWluZS1CdWRkZSAgPG1rbEBwZW5ndXRyb25peC5kZT4KKworCU1ha2UgZnJlZXR5cGUtY29uZmlnIGF3YXJlIG9mICRTWVNST09ULgorCVRoaXMgaXMgU2F2YW5uYWggcGF0Y2ggIzcwNDAuCisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogRGVjb3JhdGUgd2l0aCAke1NZU1JPT1R9IHdoZXJlCisJYXBwcm9wcmlhdGUuCisKKzIwMDktMTItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5nLgorCVJlcG9ydGVkIGJ5IFNlYW4uCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgWyFGVF9ERUJVR19NRU1PUlldOiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5CisJc291cmNlIGZpbGVzOyBob3dldmVyLCBzb21lIGNvbXBpbGVycyB3YXJuIGFib3V0IGFuIHVudXNlZCB2YXJpYWJsZQorCWRlY2xhcmF0aW9uLiAgVGhpcyBpcyBub3cgcmVwbGFjZWQgd2l0aCBhIHR5cGVkZWYuCisKKzIwMDktMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzI4MzIwLgorCisJVGhlcmUgZXhpc3QgY29ycnVwdCwgc3Vic2V0dGVkIGZvbnRzIChlbWJlZGRlZCBpbiBQREYgZmlsZXMpIHdoaWNoCisJY29udGFpbiBhIHByaXZhdGUgZGljdCB0aGF0IGVuZHMgd2l0aCBhbiB1bnRlcm1pbmF0ZWQgZmxvYXRpbmcgcG9pbnQKKwludW1iZXIgKG5vIG9wZXJhdG9yIGZvbGxvd2luZykuICBXZSBub3cgaWdub3JlIHRoaXMgZXJyb3IgKGFzCisJYWNyb2JhdCBkb2VzKS4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VyX3J1bik6IERvbid0IGVtaXQgYSBzeW50YXggZXJyb3IgZm9yCisJdW50ZXJtaW5hdGVkIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisKKzIwMDktMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlYWxseSBmaXggY29tcGlsZXIgd2FybmluZ3MuCisJUmVwb3J0ZWQgYnkgU2Vhbi4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoR1hfUFRfUE9JTlRTX0FSRV9XT1JEUywKKwlHWF9QVF9QT0lOVF9SVU5fQ09VTlRfTUFTSyk6IENvbnZlcnQgZW51bSB2YWx1ZXMgdG8gbWFjcm9zLgorCisyMDA5LTEyLTE2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJSW1wcm92ZSBjb25maWd1cmUucmF3IHRvIGNvcHkgc29tZSBvcHRpb25zIGZyb20gQ0ZMQUdTIHRvIExERkxBR1MuCisJVGhlIGxpbmtlciBvZiBNYWMgT1MgWCAxMC42IGlzIHNlbnNpdGl2ZSB0byB0aGUgYXJjaGl0ZWN0dXJlLiAgSWYKKwl0aGUgYXJjaGl0ZWN0dXJlcyBhcmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkgZm9yIHRoZSBDIGNvbXBpbGVyLCB0aGUKKwlsaW5rZXIgcmVxdWlyZXMgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9ucyB0b28uCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IFJlcGxhY2UgYC1pc3lzcm9vdCcgb3B0aW9uIHBhcnNlciBieQorCW1vcmUgZ2VuZXJpYyBhcmd1bWVudCBwYXJzZXIuCisKKzIwMDktMTItMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKwlSZXBvcnRlZCBieSBTZWFuLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyk6IEZpeCBjb3VudGVyIGRhdGEKKwl0eXBlLgorCisyMDA5LTEyLTE0ICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlJZ25vcmUgaW52YWxpZCBgc2V0Y3VycmVudHBvaW50JyBvcGVyYXRpb25zIGluIFR5cGUgMSBmb250cy4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjgyMjYuCisKKwlBdCBsZWFzdCB0d28gd2lsZCBQb3N0U2NyaXB0IGZpbGVzIG9mIHVua25vd24gcHJvdmVuYW5jZSBjb250YWluCisJVHlwZSAxIGZvbnRzLCBhcHBhcmVudGx5IGNvbnZlcnRlZCBmcm9tIFRydWVUeXBlIGZvbnRzIGluIGVhcmxpZXIKKwlQREYgdmVyc2lvbnMgb2YgdGhlIGZpbGVzLCB3aGljaCB1c2UgdGhlIGBzZXRjdXJyZW50cG9pbnQnIG9wZXJhdG9yCisJaW5hcHByb3ByaWF0ZWx5LgorCisJRnJlZVR5cGUgY3VycmVudGx5IHRocm93cyBhbiBlcnJvciBpbiB0aGlzIGNhc2UsIGJ1dCBHaG9zdHNjcmlwdCBhbmQKKwlBZG9iZSBEaXN0aWxsZXIgYm90aCBhY2NlcHQgdGhlIGZvbnRzIGFuZCBpZ25vcmUgdGhlIHByb2JsZW0uICBUaGlzCisJY29tbWl0ICNpZmRlZnMgb3V0IHRoZSBjaGVjayBzbyBQb3N0U2NyaXB0IGludGVycHJldGVycyB1c2luZworCUZyZWVUeXBlIGNhbiByZW5kZXIgdGhlc2UgZmlsZXMuCisKKwlUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIGBzZXRjdXJyZW50cG9pbnQnIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gc2V0CisJdGhlIHBvaW50IGFmdGVyIGEgYFN1YnInIGNhbGwsIGJ1dCB0aGVzZSBmb250cyB1c2UgaXQgdG8gc2V0IHRoZQorCWluaXRpYWwgcG9pbnQgdG8gKDAsMCkuICBVbm5lY2Vzc2FyaWx5IHNvLCBhcyB0aGV5IGNvcnJlY3RseSB1c2UgYW4KKwlgaHNidycgb3BlcmF0aW9uIHdoaWNoIGltcGxpY2l0bHkgc2V0cyB0aGUgaW5pdGlhbCBwb2ludC4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJPG9wX3NldGN1cnJlbnRwb2ludD46IENvbW1lbnQgb3V0IGNvZGUuCisKKzIwMDktMTItMTQgIEJyYW0gVGFzc3lucyAgPGJyYW10QGVuZm9jdXMuYmU+CisKKwlGaXggcGFyc2luZyBvZiAvQ0lERm9udFZlcnNpb24uCisJVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzI4Mjg3LgorCisJKiBzcmMvY2lkL2NpZHRva2VuLmg6IGBjaWRfdmVyc2lvbicgaW4gQ0lEX0ZhY2VJbmZvUmVjIChpbgorCXQxdGFibGVzLmgpIGlzIG9mIHR5cGUgRlRfRml4ZWQuCisKKzIwMDktMTItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVRyYWNlIGdseXBoIGluZGV4IGluIENJRCBtb2R1bGUuCisJU3VnZ2VzdGVkIGluIFNhdmFubmFoIHBhdGNoICM3MDIzLgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9sb2FkX2dseXBoKTogQWRkIHRyYWNpbmcgbWVzc2FnZS4KKworMjAwOS0xMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9nZXRfbWV0cmljcyk6IFB1dCBgRXhpdCcgbGFiZWwgaW50byB0aGUKKwlwcm9wZXIgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsLgorCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9zbG90X2xvYWQpOiBQYWNpZnkgZ2NjLgorCisyMDA5LTExLTI1ICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJQmV0dGVyIGhhbmRsaW5nIG9mIHN0YXJ0IG9mIGBlZXhlYycgc2VjdGlvbi4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjgwOTAuCisKKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKFQxX0dldF9Qcml2YXRlX0RpY3QpOiBTa2lwIGFsbCB3aGl0ZXNwYWNlCisJY2hhcmFjdGVycyBiZWZvcmUgc3RhcnQgb2YgYGVleGVjJyBzZWN0aW9uLgorCisyMDA5LTExLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNzc0Mi4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoZnRfc3Ryb2tlcl9vdXRzaWRlKTogQXZvaWQgc2lsZW50IGRpdmlzaW9uIGJ5CisJemVybywgdXNpbmcgYSB0aHJlc2hvbGQgZm9yIGB0aGV0YScuCisKKzIwMDktMTEtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzI4MDM2LgorCisJKiBzcmMvdHlwZTEvdDFhZm0uYyAodDFfZ2V0X2luZGV4KTogRml4IGNvbXBhcmlzb24uCisKKzIwMDktMTEtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKwlSZXBvcnRlZCBieSBLZXZpbiBCbGVua2luc29wcCA8YXJxb25AcHJvbW9kZS5vcmc+LgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoY2hlY2tfdGFibGVfZGlyKTogVXNlIHByb3BlciBkYXRhIHR5cGUuCisKKzIwMDktMTEtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlYWxseSBmaXggRnJlZURlc2t0b3AgYnVnICMyMTE5Ny4KKwlUaGlzIGFsc28gZml4ZXMgU2F2YW5uYWggYnVnICMyODAyMS4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyksCisJc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX21ldHJpY3NfY2hlY2tfZGlnaXRzKTogRml4IGxvb3AuCisKKzIwMDktMTEtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCB0cmFjaW5nIG1lc3NhZ2VzIGZvciBhZHZhbmNlIHZhbHVlcy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCisJKFRUX0dldF9ITWV0cmljcywgVFRfR2V0X1ZNZXRyaWNzKTogRG8gaXQuCisKKzIwMDktMTEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5nLgorCVJlcG9ydGVkIGJ5IEplcmVteSBNYW5zb24gPGplcmVteS5tYW5zb25AZ21haWwuY29tPi4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEluaXRpYWxpemUgYGVycm9yJy4KKworMjAwOS0xMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisJUmVwb3J0ZWQgYnkgU2VhbiBNY0JyaWRlIDxzZWFuQHJvZ3VlLXJlc2VhcmNoLmNvbT4uCisKKwkqIHNyYy90b29scy9hcGluYW1lcy5jIChyZWFkX2hlYWRlcl9maWxlKTxTVEFURV9UWVBFPjogVXNlIGEgY2FzdCB0bworCWBpbnQnLCBhcyBzcGVjaWZpZWQgaW4gdGhlIHByaW50ZigzKSBtYW4gcGFnZS4KKworMjAwOS0xMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjc5MjEuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KSwgc3JjL2NpZC9jaWRvYmpzLmMKKwkoY2lkX2ZhY2VfaW5pdCksIHNyYy90eXBlMS90MWFmbS5jIChUMV9SZWFkX01ldHJpY3MpLAorCXNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogRG9uJ3QgdXNlIHVuc2lnbmVkIGNvbnN0YW50CisJdmFsdWVzIGZvciByb3VuZGluZyBpZiB0aGUgYXJndW1lbnQgY2FuIGJlIG5lZ2F0aXZlLgorCisyMDA5LTExLTAzICBCcmFtIFRhc3N5bnMgIDxicmFtdEBlbmZvY3VzLmJlPgorCisJQWRkIGJhc2ljIHN1cHBvcnQgZm9yIFR5cGUxIGNoYXJzdHJpbmdzIGluIENGRi4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjc5MjIuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX09wZXJhdG9yLCBjZmZfYXJndW1lbnRfY291bnRzKTogSGFuZGxlCisJYHNlYWMnLCBgc2J3JywgYW5kIGBzZXRjdXJyZW50cG9pbnQnIG9wY29kZXMuCisJKGNmZl9jb21wdXRlX2JpYXMpOiBBZGQgcGFyYW1ldGVyIHRvIGluZGljYXRlIHRoZSBjaGFyc3RyaW5nIHR5cGUuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShjZmZfb3BlcmF0b3Jfc2VhYyk6IEFkZCBwYXJhbWV0ZXIgZm9yIHNpZGUgYmVhcmluZy4KKwkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBVcGRhdGVkIGZvciBtb3JlIFR5cGUxIHN1cHBvcnQuCisKKzIwMDktMTEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJldHVybiBjb3JyZWN0IGBsaW5lYXJIb3JpQWR2YW5jZScgdmFsdWUgZm9yIGVtYmVkZGVkIFRUIGJpdG1hcHMgdG9vLgorCVJlcG9ydGVkIGJ5IEplcmVteSBNYW5zb24gPGplcmVteS5tYW5zb25AZ21haWwuY29tPi4KKworCXNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBBZGQgcGFyYW1ldGVyIHRvCisJcXVpY2tseSBsb2FkIHRoZSBnbHlwaCBoZWFkZXIgb25seS4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKHR0X2xvYWRlcl9pbml0KTogQWRkIHBhcmFtZXRlciB0byBxdWlja2x5IGxvYWQgdGhlIGBnbHlmJyB0YWJsZQorCW9ubHkuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShUVF9Mb2FkX0dseXBoKTogQ29tcHV0ZSBsaW5lYXIgYWR2YW5jZSB2YWx1ZXMgZm9yIGVtYmVkZGVkIGJpdG1hcAorCWdseXBocyB0b28uCisKKzIwMDktMTEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcHJvdmUgY29kZSByZWFkYWJpbGl0eS4KKworCSogc3JjL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IE1vdmUgbWV0cmljcyBjYWxjdWxhdGlvbgorCXRvLi4uCisJKHR0X2dldF9tZXRyaWNzKTogVGhpcyBuZXcgZnVuY3Rpb24uCisKKzIwMDktMTAtMjYgIEJyYW0gVGFzc3lucyAgPGJyYW10QGVuZm9jdXMuYmU+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNzgxMS4KKworCSogc3JjL3RydWV0eXBlL3R0eGd2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMpOiBGaXgKKwlzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2guCisKKzIwMDktMTAtMTkgIE5pbmcgRG9uZyAgPGZsaW50bmluZ0AxNjMuY29tPgorCisJRml4IGhhbmRsaW5nIG9mIGBnZXQnIGFuZCBgcHV0JyBDRkYgaW5zdHJ1Y3Rpb25zLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKSA8Y2ZmX29wX2dldCwKKwljZmZfb3BfcHV0PjogQXBwZW5kaXggQiBvZiBBZG9iZSBUZWNobm90ZSAjNTE3NyBsaW1pdHMgdGhlIG51bWJlciBvZgorCWVsZW1lbnRzIGZvciB0aGUgYGdldCcgYW5kIGBwdXQnIG9wZXJhdG9ycyB0byAzMi4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuaCAoQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyk6IERlZmluZS4KKwkoQ0ZGX0RlY29kZXIpOiBVc2UgaXQgZm9yIGBidWlsZGNoYXInIGFuZCByZW1vdmUgYGxlbl9idWlsZGNoYXInLgorCisyMDA5LTEwLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggaGFuZGxpbmcgb2YgYGR1cCcgQ0ZGIGluc3RydWN0aW9uLgorCVByb2JsZW0gYW5kIHNvbHV0aW9uIHJlcG9ydGVkIGJ5IE5pbmcgRG9uZyA8ZmxpbnRuaW5nQDE2My5jb20+LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKSA8Y2ZmX29wX2R1cD46CisJSW5jcmVhc2UgYGFyZ3MnIGJ5IDIsIG5vdCAxLgorCisyMDA5LTEwLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi4zLjExIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtMTEnLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuMy4xMS4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qOiBzLzIuMy4xMC8yLjMuMTEvLCBzLzIzMTAvMjMxMS8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMTEuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byA5OjIyOjMuCisKKzIwMDktMTAtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL3JlbGVhc2U6IFVwZGF0ZWQuCisKKzIwMDktMTAtMTAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X3Byb3BlcnRpZXMpOiBGaXggYSBidWcgaW4gdGhlIG5wcm9wcworCXRydW5jYXRpb24uICBSZXBvcnRlZCBieSBNYXJ0aW4gdm9uIEdhZ2VybiBhbmQgUGV0ZXIgVm9sa292LgorCWh0dHBzOi8vYnVncy5nZW50b28ub3JnLzI4ODM1NyBhbmQgaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvMjg4MjU2CisKKzIwMDktMTAtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjMuMTAgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMy0xMCcuCisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tayAobWFqb3IsIG1pbm9yLCBwYXRjaCk6IEZpeCByZWdleHAgdG8gYWxsb3cgbW9yZQorCXRoYW4gYSBzaW5nbGUgZGlnaXQuCisJKGRpc3QpOiBXZSBub3cgdXNlIGdpdC4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjMuMTAuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvajogcy8yLjMuOS8yLjMuMTAvLCBzLzIzOS8yMzEwLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MjE6My4KKworMjAwOS0xMC0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGBtYWtlIG11bHRpJy4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMsIHNyYy9jYWNoZS9mdGNzYml0cy5jIChGVF9DT01QT05FTlQpOiBEZWZpbmUuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSC4KKworMjAwOS0wOS0yNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gRml4IFNhdmFubmFoIGJ1ZyAjMjc0NDEsIGNsZWFuIHVwIFJlZGhhdCBidWd6aWxsYSAjNTEzNTgyLgorCVRyaWNreSBjYXN0cyBpbiBGVENfe0NBQ0hFLEdDQUNIRSxNUlVMSVNUfV9MT09LVVBfQ01QKCkgYXJlIHJlbW92ZWQuCisJTm93IHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIHdpdGggRlRDX05vZGUgb3IgRlRDX01ydU5vZGUKKwl2YXJpYWJsZSwgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGNhc3QgdGhlbSB0byBhcHByb3ByaWF0ZSBwb2ludGVycyB0bworCWNvbmNyZXRlIGRhdGEuICBUaGVzZSB0cmlja3kgY2FzdHMgY2FuIEdDQy00LjQgb3B0aW1pemVyICgtTzIpCisJY29uZnVzZWQgYW5kIHRoZSBjcmFzaGluZyBiaW5hcmllcyBhcmUgZ2VuZXJhdGVkLgorCisJKiBzcmMvY2FjaGUvZnRjbXJ1LmggKEZUQ19NUlVMSVNUX0xPT0tVUF9DTVApOiBEcm9wIHRyaWNreSBjYXN0LgorCU5vdyB0aGUgNHRoIGFyZ3VtZW50IGBub2RlJyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB0eXBlZCBhcworCUZUQ19NcnVOb2RlLgorCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguaCAoRlRDX0dDQUNIRV9MT09LVVBfQ01QKTogRm9yIGlubGluZQorCWltcGxlbWVudGF0aW9uLCBuZXcgdGVtcG9yYWwgdmFyaWFibGUgRlRDX01ydU5vZGUgYF9tcnVub2RlJyB0byB0YWtlCisJdGhlIHBvaW50ZXIgZnJvbSBGVENfTVJVTElTVF9MT09LVVBfQ01QKCkuICBGb3Igbm9uLWlubGluZQorCWltcGxlbWVudGF0aW9uLCB0cmlja3kgY2FzdCBpcyBkcm9wcGVkLgorCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoRlRDX1NJWkVfTk9ERSk6IE5ldyBtYWNybyBjYXN0aW5nCisJdG8gRlRDX1NpemVOb2RlLgorCShGVENfTWFuYWdlcl9Mb29rdXBTaXplKTogUmVwbGFjZSBGVENfU2l6ZU5vZGUgYG5vZGUnIGJ5IEZUQ19NcnVOb2RlCisJYG1ydW5vZGUnLCBhbmQgRlRDX1NJWkVfTk9ERSgpIGlzIGluc2VydGVkLgorCShGVENfRkFDRV9OT0RFKTogTmV3IG1hY3JvIGNhc3RpbmcgdG8gRlRDX0ZhY2VOb2RlLgorCShGVENfTWFuYWdlcl9Mb29rdXBGYWNlKSBSZXBsYWNlIEZUQ19GYWNlTm9kZSBgbm9kZScgYnkgRlRDX01ydU5vZGUKKwlgbXJ1bm9kZScsIGFuZCBGVENfRkFDRV9OT0RFKCkgaXMgaW5zZXJ0ZWQuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChGVENfSW1hZ2VDYWNoZV9Mb29rdXApOiBDaGFuZ2UgdGhlIHR5cGUgb2YKKwlgbm9kZScgZnJvbSBGVENfSU5vZGUgdG8gRlRDX05vZGUuICBFeHRyYSBjYXN0aW5nIG1hY3JvIEZUQ19OT0RFKCkKKwlpcyBkcm9wcGVkLgorCShGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXIpOiBEaXR0by4KKwkoRlRDX1NCaXRDYWNoZV9Mb29rdXApOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYG5vZGUnIGZyb20gRlRDX1NOb2RlIHRvCisJRlRDX05vZGUuICBFeHRyYSBjYXN0aW5nIG1hY3JvIEZUQ19OT0RFKCkgaXMgZHJvcHBlZC4gIEZUQ19TTk9ERSgpCisJaXMgaW5zZXJ0ZWQuCisJKEZUQ19TQml0Q2FjaGVfTG9va3VwU2NhbGVyKTogRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKEZUQ19DTWFwQ2FjaGVfTG9va3VwKTogQ2hhbmdlIHRoZSB0eXBlIG9mCisJYG5vZGUnIGZyb20gRlRDX0NNYXBOb2RlIHRvIEZUQ19Ob2RlLiAgRXh0cmEgY2FzdGluZyBtYWNybworCUZUQ19OT0RFKCkgaXMgZHJvcHBlZCwgRlRDX0NNQVBfTk9ERSgpIGlzIGluc2VydGVkLgorCisyMDA5LTA5LTI1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2NhY2hlLCBwc2F1eCwgdHlwZTFdIEZpeCBmb3IgbXVsdGkgYnVpbGQuCisJSW4gbXVsdGkgYnVpbGQsIHNvbWUgY3BwIGZ1bmN0aW9ucyBhcmUgbGVmdCBhcyB1bnJlc29sdmVkIHN5bWJvbHMuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0ggZm9yIEZUX1RSQUNFMSgpLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0ggZm9yCisJRklYRURfVE9fSU5UKCkuCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MW9ianMuYzogRGl0dG8uCisKKzIwMDktMDktMjUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2ZpdF0gRml4IGZvciBtdWx0aSBidWlsZC4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuaDogSW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0ggdG8gdXNlCisJRlRfREVDTEFSRV9NT0RVTEUoKSBtYWNybyBpbiBtdWx0aSBidWlsZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jOiBJbmNsdWRlIDxmdDJidWlsZC5oPiB0byBoYW5kbGUKKwlGVF9BRFZBTkNFU19IIGNvcnJlY3RseSBpbiBtdWx0aSBidWlsZC4KKworMjAwOS0wOS0yNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gQ2hlY2sgdGhlIGZhY2UgZmlsbGVkIGJ5IEZUQ19NYW5hZ2VyX0xvb2t1cEZhY2UoKS4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgKGZ0Y19iYXNpY19mYW1pbHlfZ2V0X2NvdW50KTogUmV0dXJuCisJaW1tZWRpYXRlbHkgaWYgRlRDX01hbmFnZXJfTG9va3VwRmFjZSgpIGZpbGxzIGZhY2UgYnkgTlVMTC4gIFN1Y2gKKwljYXNlIGNhbiBvY2N1ciB3aGVuIHRoZSBjb2RlIGlzIG9wdGltaXplZCBieSBHQ0MtNC4yLnguCisKKzIwMDktMDktMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA5LTA5LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcmFzdGVyXSBGaXggNS1sZXZlbHMgZ3JheXNjYWxlIG91dHB1dC4KKwlUaGlzIHdhcyBicm9rZW4gc2luY2UgdmVyc2lvbiAyLjMuMC4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChjb3VudF90YWJsZSk6IFVzZSBwcmUtMi4zLjAgdmFsdWVzICh3aGljaAorCXdlcmUgdGhlbiBjb21wdXRlZCBkeW5hbWljYWxseSkuCisJKFZlcnRpY2FsX0dyYXlfU3dlZXBfU3RlcCk6IFVwZGF0ZWQuCisKKwkoZnRfYmxhY2tfcmVuZGVyKTogSW5pdGlhbGl6ZSBgd29ya2VyLT5ncmF5X2xpbmVzJyAocHJvYmxlbSBmb3VuZCBieQorCXZhbGdyaW5kKS4KKworCShGVF9SQVNURVJfT1BUSU9OX0FOVElfQUxJQVNJTkcsIERFQlVHX1JBU1RFUik6IERvbnQnICN1bmRlZiwganVzdAorCWNvbW1lbnQgb3V0LgorCisyMDA5LTA5LTEyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJSW1wcm92ZSBjb25maWd1cmUucmF3IGZvciBjcm9zcyBidWlsZC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogUmVtb3ZlIHRlbXBvcmFsIGZpbGVzIGNyZWF0ZWQgYnkgdGhlCisJc3VmZml4IGNoZWNraW5nIGZvciBDQ19CVUlMRC4gIFNldCBYWF9BTlNJRkxBR1MgYW5kIFhYX0NGTEFHUyB3aGVuCisJY3Jvc3MgY29tcGlsZXIgaXMgR0NDLiAgQUNfUFJPR19DQyBjaGVja3Mgd2hldGhlciB0aGUgY3Jvc3MgY29tcGlsZXIKKwlpcyBHQ0MsIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluIEdDQy4KKworMjAwOS0wOS0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtCREZdIE1vZGlmeSBoYXNoIEFQSSB0byB0YWtlIHNpemVfdCB2YWx1ZSBpbnN0ZWFkIG9mIHZvaWQgKi4KKworCVRoZSBoYXNoIEFQSSBpbiBCREYgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGJlIGdlbmVyaWMsIGl0IHRha2VzCisJdm9pZCAqIHR5cGVkIGRhdGEuICBCdXQgQkRGIGRyaXZlciBhbHdheXMgZ2l2ZXMgYW4gdW5zaWduZWQgbG9uZworCWludGVnZXIgKHRoZSBpbmRleCB0byBhIHByb3BlcnR5KS4gIFRvIHJlZHVjZSBub24tZXNzZW50aWFsCisJY2FzdHMgZnJvbSB1bnNpZ25lZCBsb25nIHRvIHZvaWQqIGFuZCBmcm9tIHZvaWQqIHRvIHVuc2lnbmVkCisJbG9uZywgdGhlIGhhc2ggQVBJIGlzIGNoYW5nZWQgdG8gdGFrZSBzaXplX3QgaW50ZWdlci4KKwlUaGUgaXNzdWUgb2YgaW5jb21wYXRpYmxlIGNhc3QgYmV0d2VlbiB1bnNpZ25lZCBsb25nIGFuZCB2b2lkKgorCW9uIExMUDY0IHBsYXRmb3JtIGlzIHJlcG9ydGVkIGJ5IE5pZ2h0U3RyaWtlIGZyb20gTWluR1ctV2luNjQKKwlwcm9qZWN0LiAgU2VlCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDkvbXNnMDAwMDAuaHRtbAorCisJKiBzcmMvYmRmL2JkZi5oOiBUaGUgdHlwZSBvZiBoYXNobm9kZS0+ZGF0YSBpcyBjaGFuZ2VkIGZyb20KKwl2b2lkKiB0byBzaXplX3QuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKGhhc2hfaW5zZXJ0KTogR2V0IHNpemVfdCBkYXRhLCBpbnN0ZWFkIG9mCisJdm9pZCogZGF0YS4KKwkoYmRmX2NyZWF0ZV9wcm9wZXJ0eSk6IEdldCB0aGUgbmFtZSBsZW5ndGggb2YgbmV3IHByb3BlcnR5IGJ5CisJc2l6ZV90IHZhcmlhYmxlLCB3aXRoIGEgY3V0LW9mZiBhdCBGVF9VTE9OR19NQVguCisJKF9iZGZfc2V0X2RlZmF1bHRfc3BhY2luZyk6IEdldCB0aGUgbmFtZSBsZW5ndGggb2YgdGhlIGZhY2UgYnkKKwlzaXplX3QgdmFyaWFibGUsIHdpdGggYSBjdXQtb2ZmIGF0IDI1Ni4KKwkoYmRmX2dldF9wcm9wZXJ0eSk6IEdldCB0aGUgcHJvcGVydHkgaWQgYnkgc2l6ZV90IHZhcmlhYmxlIHRvCisJcmVkdWNlIHRoZSBjYXN0cyBiZXR3ZWVuIDMyLWJpdCBwcm9wIElEICYgaGFzaG5vZGUtPmRhdGEgZHVyaW5nCisJc2ltcGxlIGNvcHlpbmcuCisJKF9iZGZfYWRkX3Byb3BlcnR5KTogRGl0dG8uCisJKF9iZGZfcGFyc2Vfc3RhcnQpOiBDYWxjdWxhdGUgdGhlIGluZGV4IHRvIHRoZSBwcm9wZXJ0eSBhcnJheQorCWJ5IHNpemVfdCB2YXJpYWJsZS4KKwkoYmRmX2dldF9mb250X3Byb3BlcnR5KTogRHJvcCBhIGNhc3QgdG8gdW5zaWduZWQgbG9uZy4KKworMjAwOS0wOS0xMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtXaW42NF0gSW1wcm92ZSB0aGUgY29tcHV0YXRpb24gb2YgcmFuZG9tIHNlZWQgZnJvbSBzdGFjayBhZGRyZXNzLgorCisJT24gTExQNjQgcGxhdGZvcm0sIHRoZSBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBGVF9GaXhlZCBuZWVkCisJdG8gZHJvcCBoaWdoZXIgMzItYml0LiAgRXhwbGljdCBjYXN0cyBhcmUgcmVxdWlyZWQuIFJlcG9ydGVkIGJ5CisJTmlnaHRTdHJpa2UgZnJvbSBNaW5HVy13NjQgcHJvamVjdC4gIFNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDA5LTA5L21zZzAwMDAwLmh0bWwKKworCSogc3JjL2NmZi9jZmZnbG9hZC5jOiBDb252ZXJ0IHRoZSBwb2ludGVycyB0byBGVF9GaXhlZCBleHBsaWNpdGx5LgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYzogRGl0dG8uCisKKworMjAwOS0wOS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Jhc3Rlcl0gSW1wcm92ZW1lbnRzIGZvciBzdGFuZC1hbG9uZSBtb2RlLgorCisJKiBzcmMvcmFzdGVyL3J1bGVzLm1rOiBEb24ndCBoYW5kbGUgZnRtaXNjLmguICBJdCBpcyBuZWVkZWQgZm9yCisJc3RhbmQtYWxvbmUgbW9kZSBvbmx5LgorCisJKiBzcmMvcmFzdGVyL2Z0bWlzYy5oIChGVF9NZW1vcnlSZWMgLCBGVF9BbGxvY19GdW5jLCBGVF9GcmVlX0Z1bmMsCisJRlRfUmVhbGxvY19GdW5jKTogQ29weSBkZWNsYXJhdGlvbnMgZnJvbSBmdHN5c3RlbS5oLgorCisyMDA5LTA5LTAyICBCcmFtIFRhc3N5bnMgIDxicmFtdEBlbmZvY3VzLmJlPgorCisJSW1wcm92ZSB2ZXJ0aWNhbCBtZXRyaWNzIGNhbGN1bGF0aW9uIChTYXZhbm5haCBidWcgIzI3MzY0KS4KKworCVRoZSBjYWxjdWxhdGlvbiBvZiBgdmVydEJlYXJpbmdYJyBpcyBub3QgZGVmaW5lZCBpbiB0aGUgT1RGIGZvbnQKKwlzcGVjIHNvIEZyZWVUeXBlIGRvZXMgYSBgYmVzdCBlZmZvcnQnIGF0dGVtcHQuICBIb3dldmVyLCB0aGlzIHZhbHVlCisJaXMgZGVmaW5lZCBpbiB0aGUgUERGIGFuZCBQb3N0U2NyaXB0IHNwZWNzLCBhbmQgdGhhdCBhbGdvcml0aG0gaXMKKwliZXR0ZXIgdGhhbiB0aGUgb25lIEZyZWVUeXBlIGN1cnJlbnRseSB1c2VzOgorCisJICBGcmVlVHlwZTogVXNlIHRoZSBtaWRkbGUgb2YgdGhlIGJvdW5kaW5nIGJveCBhcyB0aGUgWCBjb29yZGluYXRlCisJICAgICAgICAgICAgb2YgdGhlIHZlcnRpY2FsIG9yaWdpbi4KKworCSAgQWRvYmUgUERGIHNwZWM6IFVzZSB0aGUgbWlkZGxlIG9mIHRoZSBob3Jpem9udGFsIGFkdmFuY2UgdmVjdG9yIGFzCisJICAgICAgICAgICAgICAgICAgdGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdmVydGljYWwgb3JpZ2luLgorCisJRnJlZVR5cGUncyBhbGdvcml0aG0gZ29lcyB3cm9uZyBpZiB5b3UgaGF2ZSBhIHJlYWxseSBzbWFsbCBnbHlwaAorCShsaWtlIHRoZSBmdWxsLXdpZHRoLCBjaXJjbGUtbGlrZSBkb3QgYXQgdGhlIGVuZCBvZiB0aGUgc2VudGVuY2UsIGFzCisJdXNlZCBpbiBDSksgc2NyaXB0cykgd2l0aCBsYXJnZSBiZWFyaW5ncy4gIFdpdGggdGhlIEZyZWVUeXBlCisJYWxnb3JpdGhtIHRoaXMgZG90IGdldHMgY2VudGVyZWQgb24gdGhlIGJhc2VsaW5lOyB3aXRoIHRoZSBQREYKKwlhbGdvcml0aG0gaXQgZ2V0cyB0aGUgY29ycmVjdCBsb2NhdGlvbiAoaW4gdGhlIHRvcCByaWdodCkuICBOb3RlCisJdGhhdCB0aGlzIGlzIGEgc2VyaW91cyBpc3N1ZSwgaXQncyBsaWtlIHByaW50aW5nIHRoZSBkb3QgYXQgdGhlIGVuZAorCW9mIGEgUm9tYW4gc2VudGVuY2UgYXQgdGhlIGNlbnRlciBvZiB0aGUgdGV4dGxpbmUgaW5zdGVhZCBvZiBvbiB0aGUKKwliYXNlbGluZSBsaWtlIGl0IHNob3VsZC4gU28gaSBiZWxpZXZlIHRoZSBQREYgc3BlYydzIGFsZ29yaXRobQorCXNob3VsZCBiZSB1c2VkIGluIEZyZWVUeXBlIGFzIHdlbGwuCisKKwlUaGUgYHZlcnRCZWFyaW5nWScgdmFsdWUgZm9yIHN1Y2ggc21hbGwgZ2x5cGhzIGlzIGFsc28gdmVyeSBzdHJhbmdlCisJaWYgbm8gYHZtdHgnIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIHNpbmNlIHRoZSBoZWlnaHQgb2YgdGhlIGJib3ggaXMKKwlub3QgcmVwcmVzZW50YWJsZSBmb3IgdGhlIGhlaWdodCBvZiB0aGUgZ2x5cGggdmlzdWFsbHkgKHRoZQorCXdoaXRlc3BhY2UgdXAgdG8gdGhlIGJhc2VsaW5lIGlzIHBhcnQgb2YgdGhlIGdseXBoKS4gIFRoZSBmaXggYWxzbworCWluY2x1ZGVzIHNvbWUgY29kZSBmb3IgYSBiZXR0ZXIgZXN0aW1hdGUgb2YgYHZlcnRCZWFyaW5nWScuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MpOiBgdmVydEJlYXJpbmdYJworCWlzIG5vdyBjYWxjdWxhdGVkIGFzIGRlc2NyaWJlZCBieSB0aGUgQWRvYmUgUERGIFNwZWMuICBFc3RpbWF0ZSBmb3IKKwlgdmVydEJlYXJpbmdZJyBub3cgd29ya3MgYmV0dGVyIGZvciBzbWFsbCBnbHlwaHMgY29tcGxldGVseSBhYm92ZSBvcgorCWJlbG93IHRoZSBiYXNlbGluZSBpbnRvIGFjY291bnQuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IGB2ZXJ0QmVhcmluZ1gnIGlzIG5vdworCWNhbGN1bGF0ZWQgYXMgZGVzY3JpYmVkIGJ5IHRoZSBBZG9iZSBQREYgU3BlYy4gIFZlcnRpY2FsIG1ldHJpY3MKKwlpbmZvcm1hdGlvbiB3YXMgYWx3YXlzIGlnbm9yZWQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFMKKwl3YXMgbm90IGRlZmluZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IGB2ZXJ0QmVhcmluZ1gnIGlzCisJbm93IGNhbGN1bGF0ZWQgYXMgZGVzY3JpYmVkIGJ5IHRoZSBBZG9iZSBQREYgU3BlYy4KKworMjAwOS0wOS0wMSAgSm9obiBUeXRnYXQgIDxKb2huLlR5dGdhdEBlc2tvLmNvbT4KKworCUZpeCBjdXN0b20gY21hcCBmb3IgZW1wdHkgVHlwZSAxIGZvbnQgKFNhdmFubmFoIGJ1ZyAjMjcyOTQpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCAoVDFfRW5jb2RpbmdSZWNSZWNfKTogVXBkYXRlCisJY29tbWVudCB0byByZWZsZWN0IHJldmlzZWQgY29kZV9sYXN0IG1lYW5pbmcuCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX09wZW5fRmFjZSksIHNyYy90eXBlNDIvdDQyb2Jqcy5jCisJKFQ0Ml9PcGVuX0ZhY2UpOiBBc3NpZ24gbWF4X2NoYXIgYXMgaGlnaGVzdCBjaGFyYWN0ZXIgY29kZSArIDEgYW5kCisJdXNlIHRoaXMgZm9yIFQxX0VuY29kaW5nUmVjUmVjXzo6Y29kZV9sYXN0LgorCSogc3JjL3BzYXV4L3QxY21hcC5jICh0MV9jbWFwX2N1c3RvbV9pbml0KTogRm9sbG93IHJldmlzZWQKKwlUMV9FbmNvZGluZ1JlY1JlY186OmNvZGVfbGFzdCBtZWFuaW5nLgorCisyMDA5LTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggcmVuZGVyaW5nIG9mIGhvcml6b250YWxseSBjb21wcmVzc2VkIENGRnMuCisJQnVnIHJlcG9ydGVkIGJ5IEl2YW4gTmluY2ljIDxpbmluY2ljQHBkZnRyb24uY29tPi4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfc2xvdF9sb2FkKTogVGhpbmtvOiBDaGVjayBgeHgnIGVsZW1lbnQgb2YKKwlgZm9udF9tYXRyaXgnIGFsc28uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOS0wOC0wMyAgc3V5dTA5MjVAZ21haWwuY29tCisKKwlEb24ndCBjYWxsIGBmdF9mc2VlaycgZXZlcnkgdGltZSB3aGVuIGV4ZWN1dGluZyBgZnRfZnJlYWQnLgorCisJKiBzcmMvYmFzZS9mdHN0cmVhbS5jIChGVF9TdHJlYW1fU2VlayksIHNyYy9iYXNlL2Z0c3lzdGVtLmMKKwkoZnRfYW5zaV9zdHJlYW1faW8pOiBJbXBsZW1lbnQgaXQuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzZm50OiBDYXN0IGEgY2hhcmNvZGUgdG8gMzItYml0IGluIGNtYXAgZm9ybWF0IDE0IHBhcnNlci4KKwkKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwMTRfY2hhcl92YXJfaW5kZXgsCisJdHRfY21hcDE0X2NoYXJfdmFyX2lzZGVmYXVsdCwgdHRfY21hcDE0X2NoYXJfdmFyaWFudHMsCisJdHRfY21hcDE0X3ZhcmlhbnRfY2hhcnMpOiBDb3JyZWN0IG1pc21hdGNoZXMgZnJvbQorCUZUX0NNYXBfQ2hhclZhckluZGV4RnVuYyBwcm90b3R5cGUsIEZUX1VMb25nIGFyZ3VtZW50cworCWFyZSByZXBsYWNlZCBieSBGVF9VSW50MzIgYXJndW1lbnRzLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc2ZudDogQ2FzdCBhIGNoYXJjb2RlIHRvIDMyLWJpdCBpbiBjbWFwIGZvcm1hdCAxMiBwYXJzZXIuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwMTJfY2hhcl9uZXh0KToKKwlJbnNlcnQgZXhwbGljaXQgY2FzdCBmcm9tIEZUX1VGYXN0IHRvIEZUX1VJbnQzMgorCWZvciByZXR1cm4gdmFsdWUuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwc2F1eDogRml4IGEgZmV3IGNhc3RzIHRvIEZUX0ludDMyIHZhbHVlLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6CisJRml4IGEgZmV3IGNhc3RzIHNldHRpbmcgYHZhbHVlJyBmcm9tIEZUX0xvbmcgdG8gRlRfSW50MzIsCisJYmVjYXVzZSBgdmFsdWUnIGlzIHR5cGVkIGFzIEZUX0ludDMyIHNpbmNlIDIwMDktMDYtMjIuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzZm50OiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDEzX2NoYXJfbmV4dCk6IEZpeCB0aGUKKwl0eXBlIG9mIGBnaW5kZXgnIGZyb20gRlRfVUxvbmcgdG8gRlRfVUludCBiZWNhdXNlCisJaXQgaXMgc2V0IGJ5IEZUX1VJbnQgdHRfY21hcDEzX2NoYXJfbWFwX2JpbmFyeSgpIG9yCisJVFRfQ01hcDEzLT5jdXJfZ2luZGV4LgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc2ZudDogRXh0ZW5kIGEgZmV3IGxvY2FsIHZhcmlhYmxlcyB0byBsb2FkIDMyLWJpdCB2YWx1ZXMuCisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2Vybik6IEV4dGVuZCBgY291bnQnCisJYW5kIGBrZXJuJyB0byBsb2FkIDMyLWJpdCB2YWx1ZXMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwZnI6IEV4dGVuZCBgbnVtX2F1eCcgdG8gdGFrZSAzMi1iaXQgdmFsdWUuCisKKwkqIHNyYy9wZnIvcGZybG9hZC5jIChwZnJfcGh5X2ZvbnRfbG9hZCk6IEV4dGVuZAorCWBudW1fYXV4JyB0byBsb2FkIDMyLWJpdCB2YWx1ZS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBjZjogVHJ1bmNhdGUgRlRfVUxvbmcgYG5wcm9wcycgdG8gZml0IHRvIGludCBQQ0ZfRmFjZS0+bnByb3BzLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9wcm9wZXJ0aWVzKTogTG9hZCBgbnByb3BzJworCWFzIEZUX1VMb25nIHZhbHVlIGZyb20gUENGIGZpbGUsIGJ1dCB0cnVuY2F0ZSBpdCBhcworCWludCB0byBmaXQgUENGX0ZhY2UtPm5wcm9wcy4gIFRoZSBudW1iZXIgb2YgdHJ1bmNhdGVkCisJcHJvcGVydGllcyBpcyBzaG93biBpbiB0aGUgdHJhY2UgbWVzc2FnZS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWd4dmFsaWQ6IEV4dGVuZCBhIGZldyBsb2NhbCB2YXJpYWJsZXMgdG8gcmVkdWNlIHRoZSBjYXN0cy4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9yeC5jIChneHZfbW9yeF9zdWJ0YWJsZXNfdmFsaWRhdGUpOgorCUV4dGVuZCBgdHlwZScgYW5kIGByZXN0JyB0byB0YWtlIEZUX1VMb25nIHZhbHVlcy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWd4dmFsaWQ6IEV4dGVuZCBgc2V0dGluZ1RhYmxlJyB0byB0YWtlIDMyLWJpdCBvZmZzZXQuCisKKwkqIHNyYy9neHZhbGlkL2d4dmZlYXQuYyAoZ3h2X2ZlYXRfbmFtZV92YWxpZGF0ZSk6CisJRXh0ZW5kIGBzZXR0aW5nVGFibGUnIHRvIHRha2UgMzItYml0IG9mZnNldC4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWF1dG9maXQ6IENhc3QgRlRfTG9uZyBnbHlwaF9jb3VudCB0byBjb21wYXJlIHdpdGggRlRfVUludCBHSUQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19pc19kaWdpdCwKKwlhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zY3JpcHRfY292ZXJhZ2UpOiBDYXN0IEZUX0xvbmcKKwlnbG9iYWxzLT5nbHlwaF9jb3VudCB0byBGVF9VTG9uZywgdG8gY29tcGFyZSB3aXRoIEZUX1VJbnQKKwlnaW5kZXguCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzbW9vdGg6IEV4Y2x1ZGUgMTYtYml0IHN5c3RlbSBpbiBpbnZhbGlkIHBpdGNoL2hlaWdodCBjaGVjay4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOgorCXBpdGNoIGFuZCBoZWlnaHQgYXJlIHR5cGVkIGFzIEZUX1VJbnQgYnV0IGNoZWNrZWQgdG8gZml0CisJMTYtYml0IHJhbmdlLCB0byBhdm9pZCB0aGUgb3ZlcmZsb3dzLiAgT24gMTYtYml0IHN5c3RlbSwKKwl0aGlzIGNoZWNraW5nIGluc2VydHMgYSBjb25kaXRpb25hbCB0aGF0IG5ldmVyIG9jY3Vycy4KKworMjAwOS0wNy0wMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWNmZjogVHlwZSBsYXJnZSBjb25zdGFudHMgPiAweDdGRkYgYXMgbG9uZyBmb3IgMTYtYml0IHN5c3RlbXMuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfY2hhcnNldF9sb2FkKTogVHlwZSBsYXJnZQorCWNvbnN0YW50cyA+IDB4N0ZGRiBhcyBsb25nLCBiZWNhdXNlIG5vcm1hbCBjb25zdGFudHMKKwlhcmUgdHlwZWQgc2lnbmVkIGludGVnZXIgdGhhdCBpcyBsZXNzIHRoYW4gMHg4MDAwIG9uCisJMTYtYml0IHN5c3RlbXMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwliYXNlOiBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlLgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX1RvX0JpdG1hcCk6IFJlbW92ZSBhbgorCXVudXNlZCB2YXJpYWJsZSBgbGlicmFyeScuICBnbHlwaC0+bGlicmFyeSBpcyB1c2VkLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJY2FjaGU6IENoZWNrIGhpZ2hlciBiaXRzIGluIGZsYWdzIGZvciBub24gSUxQMzIgc3lzdGVtcy4KKworCTQgcHVibGljIGZ1bmN0aW9ucyBvdWdodCB0byB0YWtlIEZUX1VMb25nIGZsYWdzLCBidXQgdGFrZQorCUZUX1VJbnQgZmxhZ3MuIFRvIGtlZXAgYmluYXJ5IGNvbXBhdGliaWxpdHksIHdlIGRyb3AgaGlnaGVyCisJYml0cyBvbiBub24gSUxQMzIgcGxhdGZvcm1zLAorCQlJTFA2NCBzeXN0ZW1zOiBObyBkcm9wIG9jY3Vycy4KKwkJTFA2NCBzeXN0ZW1zOiBIaWdoZXIgYml0cyBhcmUgbm90IHVzZWQuCisJCTE2LWJpdCBzeXN0ZW1zOiBEcm9wIGNhbiBvY2N1ci4KKwlTZWUKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOC0xMi9tc2cwMDA2NS5odG1sCisJVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgcmVmaW5lZCB0byB0YWtlIEZUX1VMb25nIGZsYWdzIGluCisJbmV4dCBidW1wIHdpdGggaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2UuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChGVENfSW1hZ2VDYWNoZV9Mb29rdXApOgorCUNoZWNrIGBmbGFncycgaW4gYHR5cGUnLCB0aGUgMm5kIGFyZ3VtZW50LgorCShGVENfU0JpdENhY2hlX0xvb2t1cCk6IERpdHRvLgorCShGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXIpOiBDaGVjayBgbG9hZF9mbGFncycsCisJdGhlIDNyZCBhcmd1bWVudC4KKwkoRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIpOiBEaXR0by4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXNmbnQ6IElnbm9yZSBpbnZhbGlkIEdJRHMgaW4gZ2x5cGggbmFtZSBsb29rdXAuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOgorCU5ldyB0cmFjZSBtb2R1bGUgZm9yIHNmZHJpdmVyLmMgaXMgYWRkZWQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X25hbWVfaW5kZXgpOgorCVJlc3RyaWN0IGdseXBoIG5hbWUgbG9va3VwIHRvIEZUX1VJbnQgR0lELgorCUdlbnVpbmUgVHJ1ZVR5cGUgY2FuIGhvbGQgMTYtYml0IGdseXBocy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBjZjogRml4IGEgY29tcGFyaXNvbiBiZXR3ZWVuIEZUX0xvbmcgYW5kIEZUX1VMb25nLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9iaXRtYXBzKTogUmV0dXJuIGFuIGVycm9yCisJaWYgUENGX0ZhY2UtPm5lbWV0cmljcyBpcyBuZWdhdGl2ZS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWd4dmFsaWQ6IEd1YXJhbnRlZSBgbkZlYXR1cmVGbGFncycgc2l6ZSB1cCB0byAzMi1iaXQuCisKKwkqIHNyYy9neHZhbGlkL2d4dm1vcnQuYyAoZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlKToKKwlFeHRlbmQgdGhlIDNyZCBhcmd1bWVudCBgbkZlYXR1cmVGbGFncycgdG8gRlRfVUxvbmcuCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0Lmg6IERpdHRvLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc2ZudDogSW5zZXJ0IGV4cGxpY2l0IGNhc3QgZm9yIExQNjQgc3lzdGVtLgorCisJKiBzcmMvc2ZudC90dGtlcm4uYyAodHRfZmFjZV9sb2FkX2tlcm4pOiBJbnNlcnQKKwljYXN0IGZyb20gdW5zaWduZWQgbG9uZyB0byBGVF9VSW50MzIuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlneHZhbGlkOiBHdWFyYW50ZWUgYGp1c3QnIHRhYmxlIHNpemUgdXB0byAzMi1iaXQuCisKKwkqIHNyYy9neHZhbGlkL2d4dmp1c3QuYyAoZ3h2X2p1c3RfdmFsaWRhdGUpOgorCVRoZSB0eXBlIG9mIGBvZmZzZXQnIGlzIGNoYW5nZWQgZnJvbSBGVF9VSW50IHRvCisJRlRfT2Zmc2V0LCBmb3IgMTYtYml0IHBsYXRmb3Jtcy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWd4dmFsaWQ6IEd1YXJhbnRlZSBgdHJhaycgdGFibGUgc2l6ZSB1cHRvIDMyLWJpdC4KKworCSogc3JjL2d4dmFsaWQvZ3h2dHJhay5jIChneHZfdHJha192YWxpZGF0ZSk6CisJVGhlIHR5cGUgb2YgYG9mZnNldCcgaXMgY2hhbmdlZCBmcm9tIEZUX1VJbnQgdG8KKwlGVF9PZmZzZXQsIGZvciAxNi1iaXQgcGxhdGZvcm1zLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJdHlwZTE6IEZpeCBhIGRhdGEgdHlwZSBtaXNtYXRjaGluZyB3aXRoIGl0cyBzb3VyY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oOiBUaGUgdHlwZSBvZgorCVQxX0ZhY2UtPmJ1aWxkY2hhciBpcyBtYXRjaGVkIHdpdGggVDFfRGVjb3JkZXItPnRvcC4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBmcjogRml4IGEgZGF0YSB0eXBlIG1pc21hdGNoaW5nIHdpdGggaXRzIHNvdXJjZS4KKworCSogc3JjL3Bmci9wZnJ0eXBlcy5oOiBUaGUgdHlwZSBvZiBQRlJfS2Vybkl0ZW0tPm9mZnNldAorCWlzIGV4dGVuZGVkIGZyb20gRlRfVUludDMyIHRvIEZUX09mZnNldCwgYmVjYXVzZSBpdCBpcworCWNhbGN1bGF0ZWQgd2l0aCB0aGUgcG9pbnRlciBkaWZmZXJlbmNlLCBpbgorCXBmcl9leHRyYV9pdGVtX2xvYWRfa2VybmluZ19wYWlycygpLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJcGZyOiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgorCisJKiBzcmMvcGZyL3BmcnR5cGVzLmg6IFRoZSB0eXBlIG9mIFBGUl9QaHlzRm9udC0+Y2hhcnNfb2Zmc2V0CisJaXMgZXh0ZW5kZWQgZnJvbSBGVF9VSW50MzIgdG8gRlRfT2Zmc2V0LCBiZWNhdXNlIGl0IGlzCisJY2FsY3VsYXRlZCB3aXRoIHRoZSBwb2ludGVyIGRpZmZlcmVuY2UgaW4gcGZyX3BoeV9mb250X2xvYWQoKS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBmcjogRml4IGEgZGF0YSB0eXBlIG1pc21hdGNoaW5nIHdpdGggaXRzIHNvdXJjZS4KKworCSogc3JjL3Bmci9wZnJ0eXBlcy5oOiBUaGUgdHlwZSBvZiBQRlJfUGh5Rm9udC0+YmN0X29mZnNldAorCWlzIGV4dGVuZGVkIGZyb20gRlRfVUludDMyIHRvIEZUX0xvbmcsIGJlY2F1c2UgaXQgaXMKKwlsb2FkZWQgYnkgRlRfU1RSRUFNX1BPUygpIGluIHBmcl9waHlfZm9udF9sb2FkKCkuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzbW9vdGg6IEltcHJvdmUgdGhlIGZvcm1hdCBpbiBkZWJ1ZyBtZXNzYWdlLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9kdW1wX2NlbGxzKTogSW1wcm92ZSB0aGUKKwlmb3JtYXQgc3BlY2lmaWNhdGlvbnMgdG8gZHVtcCB2YXJpYWJsZXMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzZm50OiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBUaGUgdHlwZSBvZgorCWxvY2FsIGBmbGFncycgaXMgbWF0Y2hlZCB3aXRoIEZUX0ZhY2UtPmZhY2VfZmxhZ3MuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwc2F1eDogRml4IGEgZGF0YSB0eXBlIG1pc21hdGNoaW5nIHdpdGggaXRzIHNvdXJjZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oOiBUaGUgdHlwZSBvZgorCVQxX0RlY29yZGVyUmVjLmJ1aWxkY2hhciBpcyBtYXRjaGVkIHdpdGgKKwlUMV9EZWNvcmRlclJlYy50b3AuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0cnVldHlwZTogRXh0ZW5kIFRydWVUeXBlIEdYIHBhY2tlZCBkZWx0YXMgdG8gRlRfT2Zmc2V0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyk6CisJVGhlIHR5cGUgb2YgMm5kIGFyZ3VtZW50IGBkZWx0YV9jbnQnIGlzIGNoYW5nZWQgZnJvbQorCUZUX0ludCB0byBGVF9PZmZzZXQsIGJlY2F1c2UgaXRzIHNvdXJjZSBjYW4gYmUgY3Z0CisJdGFibGUgc2l6ZSBjYWxjdWxhdGVkIGZyb20gc3RyZWFtIHBvc2l0aW9uLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJdHJ1ZXR5cGU6IEV4dGVuZCBtbXZhcl9sZW4gdG8gaG9sZCBzaXplX3QgdmFsdWVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBUaGUgdHlwZSBvZgorCUdYX0JsZW5kUmVjLm1tdmFyX2xlbiBpcyBjaGFuZ2VkIGZyb20gRlRfSW50IHRvCisJRlRfT2Zmc2V0LCBiZWNhdXNlIFRUX0dldF9NTV9WYXIoKSBjYWxjdWxhdGVzIGl0CisJYnkgc2l6ZW9mKCkgcmVzdWx0cy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXRydWV0eXBlOiBDaGVjayBpbnZhbGlkIGZ1bmN0aW9uIG51bWJlciBpbiBJREVGIGluc3RydWN0aW9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lERUYpOiBDaGVjaworCWlmIHRoZSBvcGVyYW5kIGZpdHMgdG8gOC1iaXQgb3Bjb2RlIGxpbWl0YXRpb24uCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0cnVldHlwZTogQ2hlY2sgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgaW4gRkRFRiBpbnN0cnVjdGlvbi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19GREVGKTogQ2hlY2sKKwlpZiB0aGUgb3BlcmFuZCBmaXRzIDE2LWJpdCBmdW5jdGlvbiBudW1iZXIuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0cnVldHlwZTogVHJ1bmNhdGUgdGhlIGRlbHRhcyBvZiBjb21wb3NpdGUgZ2x5cGggYXQgMTYtYml0IHZhbHVlcy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6CisJSW5zZXJ0IGNhc3QgZnJvbSBGVF9Mb25nIChkZWx0YXNbaV0ue3gseX0pIHRvCisJRlRfSW50MTYgaW4gdGhlIHN1bW1hdGlvbiBvZiBkZWx0YXNbXSBmb3IgY29tcG9zaXRlCisJZ2x5cGhzLiAgQmVjYXVzZSBkZWx0YXNbaV0gaXMgdHlwZWQgYXMgRlRfUG9zLAorCWl0cyBjb21wb25lbnQgeCwgeSBhcmUgdHlwZWQgYXMgRlRfTG9uZywgYnV0CisJdGhlaXIgc291cmNlcyBhcmUgYWx3YXlzIEZUX0ludDE2IHdoZW4gdGhleSBhcmUKKwlsb2FkZWQgYnkgZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoKS4gIEhvd2V2ZXIsCisJdGhlIGxpbWl0YXRpb24gYWJvdXQgdGhlIHN1bW1lZCBkZWx0YXMgaXMgdW5jbGVhci4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXRydWV0eXBlOiBUcnVuY2F0ZSB0aGUgaW5zdHJ1Y3Rpb25zIHVwdG8gMTYtYml0IHBlciBhIGdseXBoLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoKTogVHJ1bmNhdGUKKwl0aGUgaW5zdHJ1Y3Rpb25zIHVwdG8gMTYtYml0IGxlbmd0aCBwZXIgYSBnbHlwaC4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXRydWV0eXBlOiBDYXN0IHRoZSBudW1lcmljYWwgb3BlcmFuZHMgdG8gMzItYml0IGZvciBMUDY0IHN5c3RlbXMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU1BISVgsIElOU19NSUFQLAorCUluc19NSVJQKTogSW5zZXJ0IGNhc3QgZnJvbSBsb25nIChhcmdzW10sIHRoZQorCW9wZXJhbmRzIHBhc3NlZCB0byBUcnVlVHlwZSBvcGVyYXRvcikgdG8gRlRfSW50MzIKKwkodGhlIGFyZ3VtZW50IG9mIFRUX011bEZpeDE0KCkpLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJdHJ1ZXR5cGU6IENhc3QgdGhlIHByb2plY3QgdmVjdG9yIHRvIDMyLWJpdCBmb3IgTFA2NCBzeXN0ZW0uCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChQcm9qZWN0LCBEdWFsUHJvamVjdCk6CisJSW5zZXJ0IGNhc3RzIGZyb20gRlRfUG9zICh0aGUgYXJndW1lbnRzIGBkeCcsIGBkeScpCisJdG8gRlRfVUludDMyICh0aGUgYXJndW1lbnQgdG8gVFRfRG90Rml4MTQoKSkuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0cnVldHlwZTogQ2FzdCB0aGUgc2NhbGluZyBwYXJhbXMgdG8gMzItYml0IGZvciBMUDY0IHN5c3RlbS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19Db21wb3NpdGVfQ29tcG9uZW50KToKKwlJbnNlcnQgY2FzdHMgZnJvbSBsb25nIChyZXR1cm4gdmFsdWUgb2YgRlRfTXVsRml4KCkpIHRvCisJRlRfSW50MzIgKHRoZSBhcmd1bWVudCB0byBGVF9TcXJ0Rml4ZWQoKSkuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzZm50OiBDYXN0IGEgY2hhcmFjdGVyIGNvZGUgdG8gRlRfVUludDMyIGZvciBMUDY0IHN5c3RlbS4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAxNF9jaGFyX21hcF9ub25kZWZfYmluYXJ5LAorCXR0X2NtYXAxNF92YXJpYW50cywgdHRfY21hcDE0X2NoYXJfdmFyaWFudHMsCisJdHRfY21hcDE0X2RlZl9jaGFyX2NvdW50LCB0dF9jbWFwMTRfZ2V0X2RlZl9jaGFycywKKwl0dF9jbWFwMTRfZ2V0X25vbmRlZl9jaGFycywgdHRfY21hcDE0X3ZhcmlhbnRfY2hhcnMpCisJSW5zZXJ0IGNhc3RzIHdoZW4gRlRfVUludDMyIHZhcmlhYmxlIGlzIGxvYWRlZCBieQorCVRUX05FWFRfe1VJTlQyNHxVTE9OR30uICBCZWNhdXNlIG1vc3Qgb2YgdGhlbSBhcmUKKwljb21wYXJlZCB3aXRoIEZUX1VJbnQzMiB2YWx1ZXMgaW4gcHVibGljIEFQSSwgcmVwbGFjaW5nCisJRlRfVUZhc3QgaXMgbm90IHJlY29tbWVuZGVkLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc2ZudDogQ2FzdCBhIGNoYXJhY3RlciBjb2RlIHRvIEZUX1VJbnQzMiBmb3IgTFA2NCBzeXN0ZW0uCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwNF9pbml0LCB0dF9jbWFwNF9uZXh0KToKKwlJbnNlcnQgdGhlIGNhc3RzIGZyb20gdW5zaWduZWQgbG9uZyBjb25zdGFudCB0bworCUZUX1VJbnQzMi4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXNmbnQ6IEV4dGVuZCBUVF9CREYtPnN0cmluZ3Nfc2l6ZSB0byBGVF9VTG9uZyBmb3IgaHVnZSBCREYuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oOiBUaGUgdHlwZQorCW9mIFRUX0JERi0+c3RyaW5nX3NpemUgaXMgZXh0ZW5kZWQgZnJvbSBGVF9VSW50MzIKKwl0byBGVF9VTG9uZywgYmVjYXVzZSBCREYgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdAorCXJlc3RyaWN0IHRoZSBsZW5ndGggb2Ygc3RyaW5nLgorCSogc3JjL3NmbnQvdHRiZGYuYzogVGhlIHNjcmF0Y2ggdmFyaWFibGUgYHN0cmluZ3MnCisJdG8gbG9hZCBUVF9CREYtPnN0cmluZ19zaXplIGlzIG1hdGNoZWQgd2l0aAorCVRUX0JERi0+c3RyaW5nX3NpemUuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwc2F1eDogSGFuZGxlIHRoZSBzdHJpbmcgbGVuZ3RoIGJ5IEZUX09mZnNldCB2YXJpYWJsZXMuCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5jIChhZm1fcGFyc2VyX25leHRfa2V5LAorCWFmbV90b2tlbml6ZSwgYWZtX3BhcnNlX3RyYWNrX2tlcm4sCisJYWZtX3BhcnNlX2tlcm5fcGFpcnMsIGFmbV9wYXJzZV9rZXJuX2RhdGEsCisJYWZtX3BhcnNlcl9za2lwX3NlY3Rpb24sIGFmbV9wYXJzZXJfcGFyc2UpOgorCVRoZSBsZW5ndGggb2Yga2V5IGlzIGhhbmRsZWQgYnkgRlRfT2Zmc2V0LAorCWluc3RlYWQgb2YgRlRfVUludC4gIEFsdGhvdWdoIHRoZSBsZW5ndGggb2YKKwlQb3N0U2NyaXB0IHN0cmluZ3Mgb3IgbmFtZSBvYmplY3QgaXMgMTYtYml0LAorCUFGTV9TVFJFQU1fS0VZX0xFTigpIGNhbGN1bGF0ZXMgdGhlIGxlbmd0aAorCWZyb20gdGhlIHBvaW50ZXIgZGlmZmVyZW5jZS4KKworCSogc3JjL3BzYXV4L2FmbXBhcnNlLmggKGFmbV9wYXJzZXJfbmV4dF9rZXkpOgorCURpdHRvLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJcGNmOiBGaXggc29tZSBkYXRhIHR5cGVzIG1pc21hdGNoaW5nIHdpdGggdGhlaXIgc291cmNlcy4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfYml0bWFwcyk6IFRoZSB0eXBlcworCW9mIGBuYml0bWFwcycsIGBpJywgYHNpemViaXRtYXBzJyBhcmUgbWF0Y2hlZCB3aXRoCisJdGhlIHR5cGUgb2YgYXJlYSBGVF9CaXRtYXAucGl0Y2ggKiBGVF9CaXRtYXAucm93cy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBjZjogSGFuZGxlIHRoZSBzdHJpbmcgbGVuZ3RoIGJ5IHNpemVfdCB2YXJpYWJsZXMuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfaW50ZXJwcmV0X3N0eWxlKTogVGhlIHR5cGVzCisJb2Ygbm4sIGxlbiwgbGVuZ3Roc1s0XSBhcmUgY2hhbmdlZCB0byBzaXplX3QsIGJlY2F1c2UKKwl0aGV5IGFyZSBsb2FkZWQgYnkgKG9yIGNvbXBhcmVkIHdpdGgpIGZ0X3N0cmxlbigpLgorCisJKiBzcmMvcGNmL3BjZnV0aWwuYyAoQml0T3JkZXJJbnZlcnQsIFR3b0J5dGVTd2FwLAorCUZvdXJCeXRlU3dhcCk6IFRoZSB0eXBlIG9mIHRoZSAybmQgYXJndW1lbnQgYG5ieXRlcycKKwlpcyBjaGFuZ2VkIHRvIHNpemVfdCwgZm9yIHNpbWlsYXJpdHkgd2l0aCBBTlNJIEMKKwlzdHJpbmcgZnVuY3Rpb25zLgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9HbHlwaF9Mb2FkKTogVGhlIHR5cGUgb2YKKwlgYnl0ZXMnIGlzIGNoYW5nZWQgdG8gRlRfT2Zmc2V0LCBiZWNhdXNlIGl0IGlzIHBhc3NlZAorCXRvIEZUX0FMTE9DKCksIHZpYSBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwKCkuICBBdAorCWxlYXN0LCB1c2luZyB1bnNpZ25lZCB0eXBlIGlzIGJldHRlci4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBjZjogRml4IHNvbWUgZGF0YSB0eXBlcyBtaXNtYXRjaGluZyB3aXRoIHRoZWlyIHNvdXJjZXMuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2Zfc2Vla190b190YWJsZV90eXBlLAorCXBjZl9oYXNfdGFibGVfdHlwZSk6IFRoZSB0eXBlIG9mIDNyZCBhcmd1bWVudAorCWBudGFibGVzJyBpcyBtYXRjaGVkIHdpdGggUENGX1RvYy0+Y291bnQuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlvdHZhbGlkOiBUcnVuY2F0ZSB0aGUgZ2x5cGggaW5kZXggdG8gMTYtYml0LgorCisJKiBzcmMvb3R2YWxpZC9vdHZhbGlkLmMgKG90dl92YWxpZGF0ZSk6IENoZWNrcworCWZhY2UtPm51bV9nbHlwaHMgZG9lcyBub3QgZXhjZWVkIDE2LWJpdCBsaW1pdCwKKwlwYXNzIEZUX1VJbnQgbnVtX2dseXBocyB0byBiYWNrZW5kIGZ1bmN0aW9ucworCW90dl97R1BPU3xHU1VCfEdERUZ8SlNURnxNQVRIfV92YWxpZGF0ZSgpLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJY2FjaGU6IEluc2VydCBleHBsaWN0IGNhc3RzIGZvciBMUDY0IHN5c3RlbXMuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChGVENfSW1hZ2VDYWNoZV9Mb29rdXAsCisJRlRDX1NCaXRDYWNoZV9Mb29rdXApOiBUaGUgdHlwZSBvZiBGVENfSW1hZ2VUeXBlLT53aWR0aAorCWlzIEZUX0ludCwgc28gdGhlIGNhc3QgdG8gdW5zaWduZWQgbGFyZ2VyIHR5cGUgRlRfVUxvbmcKKwlpcyBpbnRyb2R1Y2VkIGZvciB0aGUgY29tcGFyaXNvbnMgd2l0aCAweDEwMDAwTCBmb3IKKwlMUDY0IHBsYXRmb3JtLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJY2FjaGU6IEZpeCBzb21lIGRhdGEgdHlwZXMgbWlzbWF0Y2hpbmcgd2l0aCB0aGVpciBzb3VyY2VzLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuaDogVGhlIHR5cGUgb2YgcmV0dXJuIHZhbHVlCisJYnkgRlRDX05vZGVfV2VpZ2h0RnVuYyBmdW5jdGlvbiBpcyBjaGFuZ2VkIHRvCisJRlRfT2Zmc2V0LiAgVGhlIHR5cGUgb2YgRlRDX0NhY2hlQ2xhc3MtPmNhY2hlX3NpemUKKwlpcyBjaGFuZ2VkIHRvIEZUX09mZnNldCwgdG9vLgorCisJKiBzcmMvY2FjaGUvZnRjY2JhY2suaCAoZnRfaW5vZGVfd2VpZ2h0LAorCWZ0Y19zbm9kZV93ZWlnaHQpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoZnRjX2NtYXBfbm9kZV93ZWlnaHQpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2ltYWdlLmMgKGZ0Y19pbm9kZV93ZWlnaHQsCisJRlRDX0lOb2RlX1dlaWdodCk6IERpdHRvLgorCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3Nub2RlX3dlaWdodCwKKwlGVENfU05vZGVfV2VpZ2h0KTogRGl0dG8uCisKKwkqIHNyYy9jYWNoZS9mdGNtcnUuaDogVGhlIHR5cGUgb2YKKwlGVENfTXJ1TGlzdENsYXNzLT5ub2RlX3NpemUgaXMgY2hhbmdlZCB0byBGVF9PZmZzZXQsCisJYmVjYXVzZSBpdCBpcyBwYXNzZWQgdG8gRlRfQUxMT0MoKSB0byBzcGVjaWZ5IHRoZQorCXNpemUgb2YgYnVmZmVyLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJWFhYX2NtYXBfZW5jb2RpbmdfY2hhcl9uZXh0KCkgcmV0dXJuIEZUX1VJbnQzMiB2YWx1ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaDoKKwlUaGUgc2l6ZSBvZiB0aGUgY2hhcmNvZGUgdmFsdWUgcmV0dXJuZWQgYnkKKwl0aGUgZnVuY3Rpb24gdHlwZWQgUFNfVW5pY29kZXNfQ2hhck5leHRGdW5jIGlzCisJbWF0Y2hlZCB3aXRoIGl0cyBpbnB1dCBjaGFyY29kZSB2YWx1ZS4KKworCSogc3JjL2NmZi9jZmZtYXAuYyAoY2ZmX2NtYXBfZW5jb2RpbmdfY2hhcl9uZXh0LAorCWNmZl9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0KTogRGl0dG8uCisKKwkqIHNyYy9wZnIvcGZybWFwLmMgKHBmcl9jbWFwX2VuY29kaW5nX2NoYXJfbmV4dCk6CisJRGl0dG8uCisKKwkqIHNyYy9wc2F1eC90MWNtYXAuYyAodDFfY21hcF9zdGRfY2hhcl9uZXh0LAorCXQxX2NtYXBfY3VzdG9tX2NoYXJfbmV4dCwgdDFfY21hcF91bmljb2RlX2NoYXJfbmV4dCk6CisJRGl0dG8uCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzX3VuaWNvZGVzX2NoYXJfbmV4dCk6CisJRGl0dG8uCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoZm50X2NtYXBfY2hhcl9uZXh0KToKKwlEaXR0by4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAwX2NoYXJfbmV4dCwKKwl0dF9jbWFwMl9jaGFyX25leHQsIHR0X2NtYXA0X2NoYXJfbmV4dCwKKwl0dF9jbWFwNl9jaGFyX25leHQsIHR0X2NtYXAxMF9jaGFyX25leHQsCisJdHRfY21hcDEyX2NoYXJfbmV4dCwgdHRfY21hcDEzX2NoYXJfbmV4dCk6IERpdHRvLgorCSh0dF9jbWFwMTRfY2hhcl92YXJpYW50cyk6IEhhbmRsZSBiYXNlIHVuaWNvZGUKKwljb2RlcG9pbnQgYnkgRlRfVUludDMyIHZhcmlhYmxlIHRvIGF2b2lkIG92ZXJmbG93CisJb24gMTYtYml0IHBsYXRmb3Jtcy4KKwkodHRfY21hcDE0X2Vuc3VyZSk6IFRoZSB0eXBlIG9mIGBudW1fcmVzdWx0cycgaXMKKwlleHRlbmQgdG8gRlRfVUludDMyLCB0byBjb3ZlciB1bnNpZ25lZCAzMi1iaXQKKwlgbnVtVmFyU2VsZWN0b3JSZWNvcmRzJyBpbiBjbWFwMTQgdGFibGUgaGVhZGVyLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJdHJ1ZXR5cGU6IEV4dGVuZCBUVF9GYWNlLT5udW1fbG9jYXRpb25zIGZvciBicm9rZW4gVFRGcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmg6CisJVFRfRmFjZS0+bnVtX2xvY2F0aW9ucyBhcmUgZXh0ZW5kZWQgZnJvbSBGVF9VSW50CisJdG8gRlRfVUxvbmcsIHRvIHN0YW5kIHdpdGggYnJva2VuIGh1Z2UgbG9jYSB0YWJsZS4KKwlTb21lIHBlb3BsZSBpbnNpc3RzIHRoZXJlIGFyZSBicm9rZW4gVFRGIGluY2x1ZGluZworCXRoZSBnbHlwaHMgb3ZlciAxNi1iaXQgbGltaXRhdGlvbiwgaW4gUFJDIG1hcmtldC4KKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfbG9hZF9sb2NhKToKKwlSZW1vdmUgdW5yZXF1aXJlZCAxNi1iaXQgdHJ1bmNhdGlvbiBmb3IgRlRfVUludAorCVRUX0ZhY2UtPm51bV9sb2NhdGlvbnMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzbW9vdGg6IEZpeCBzb21lIGRhdGEgdHlwZXMgbWlzbWF0Y2hpbmcgd2l0aCB0aGVpciBzb3VyY2VzLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogVGhlIHR5cGUgb2YgYFRDb29yZCcgaXMKKwltYXRjaGVkIHRvIGBUUG9zJywgYmVjYXVzZSB0aGV5IGFyZSBtaXhlZCBpbgorCWdyYXlfc2V0X2NlbGwoKS4gIFRoZSB0eXBlIG9mIFRDZWxsLT54IGlzIGV4dGVuZGVkCisJdG8gYFRQb3MnLCBiZWNhdXNlIGdyYXlfZmluZF9jZWxsKCkgc2V0cyBpdCBieQorCVRXb3JrZXIuZXguICBUaGUgdHlwZSBvZiBUQ2VsbC0+Y292ZXIgaXMgZXh0ZW5kZWQKKwl0byBgVENvb3JkJywgYmVjYXVzZSBncmF5X3JlbmRlcl9zY2FubGluZSgpIGFkZHMKKwlUQ29vcmQgdmFsdWUgdG8gaXQuICBUaGUgdHlwZSBvZiBUV29yay5jb3ZlciBpcyBtYXRjaGVkCisJd2l0aCBUQ2VsbC0+Y292ZXIuICBUaGUgdHlwZXMgb2YKKwlUV29yay57bWF4X2NlbGxzLG51bV9jZWxsc30gYXJlIGNoYW5nZWQgdG8gRlRfUHRyRGlzdCwKKwliZWNhdXNlIHRoZXkgYXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbWVtb3J5IGFkZHJlc3Nlcy4KKwlUaGUgdHlwZSBvZiBUV29yay55Y291bnQgaXMgY2hhbmdlZCB0byBUUG9zLCBiZWNhdXNlCisJaXQgaXMgY2FsY3VsYXRlZCBmcm9tIFRQb3MgdmFyaWFibGVzLgorCShncmF5X2ZpbmRfY2VsbCk6IFRoZSB0eXBlIG9mIGB4JyBpcyBtYXRjaGVkIHdpdGgKKwlpdHMgaW5pdGlhbCB2YWx1ZSByYXMuZXguCisJKGdyYXlfcmVuZGVyX3NjYW5saW5lKTogVGhlIHR5cGVzIG9mIGBtb2QnLCBgbGlmdCcKKwlhbmQgYHJlbScgYXJlIGNoYW5nZWQgdG8gVENvb3JkLCBiZWNhdXNlIHRoZWlyIHZhbHVlcworCWFyZSBzZXQgd2l0aCBleHBsaWNpdCBjYXN0cyB0byBUQ29vcmQuICBXaGVuIHJhcy5hcmVhCisJaXMgdXBkYXRlZCBieSB0aGUgZGlmZmVyZW50aWFsIHZhbHVlcyBpbmNsdWRpbmcKKwlgZGVsdGEnLCB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3QgdG8gVEFyZWEsIGJlY2F1c2UKKwl0aGUgdHlwZSBvZiBgZGVsdGEnIGlzIG5vdCBUQXJlYSBidXQgVENvb3JkLgorCShncmF5X3JlbmRlcl9saW5lKTogVGhlIHR5cGUgb2YgYG1vZCcgaXMgZXh0ZW5kZWQKKwlmcm9tIGludCB0byBUQ29vcmQsIGJlY2F1c2UgKFRDb29yZClkeSBpcyBhZGRlZCB0byBtb2QuCisJKGdyYXlfaGxpbmUpOiBUaGUgYXJndW1lbnQgYGFjb3VudCcgaXMgZXh0ZW5kZWQgdG8KKwlUQ29vcmQsIHRvIG1hdGNoIHdpdGggdGhlIHBhcmFtZXRlcnMgaW4gdGhlIGNhbGxlcnMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwljZmY6IEZpeCBzb21lIGRhdGEgdHlwZXMgbWlzbWF0Y2hpbmcgd2l0aCB0aGVpciBzb3VyY2VzLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IFRoZSB0eXBlIG9mCisJYHNjYWxpbmcnIGlzIG1hdGNoZWQgd2l0aCB0aGUgc2NhbGluZyBwYXJhbWV0ZXIKKwlpbiBGVF9NYXRyaXhfTXVsdGlwbHlfU2NhbGVkKCkgYW5kCisJRlRfVmVjdG9yX1RyYW5zZm9ybV9TY2FsZWQoKS4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfcmVhbCk6IFRoZSB0eXBlIG9mCisJYHBvd2VyX3RlbicsIGBzY2FsaW5nJywgYGV4cG9uZW50X2FkZCcsCisJYGludGVnZXJfbGVuZ3RoJywgYGZyYWN0aW9uX2xlbmd0aCcsCisJYG5ld19mcmFjdGlvbl9sZW5ndGgnIGFuZCBgc2hpZnQnIGFyZSBtYXRjaGVkIHdpdGgKKwl0aGUgdHlwZSBvZiBgZXhwb25lbnQnIHRvIGF2b2lkIHVuZXhwZWN0ZWQgdHJ1bmNhdGlvbi4KKwkoY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCk6IFRoZSB0eXBlIG9mIGBzY2FsaW5nJyBpcworCW1hdGNoZWQgd2l0aCB0aGUgYHNjYWxpbmcnIGFyZ3VtZW50IHRvCisJY2ZmX3BhcnNlX3JlYWwoKS4KKwkoY2ZmX3BhcnNlX2ZpeGVkX2R5bmFtaWMpOiBEaXR0by4KKwkoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KTogVGhlIHR5cGUgb2YgYHNjYWxpbmcnIGlzCisJbWF0Y2hlZCB3aXRoIHRoZSBgc2NhbGluZycgYXJndW1lbnQgdG8KKwljZmZfcGFyc2VfZHluYW1pYygpLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJYXV0b2ZpdDogRml4IHNvbWUgZGF0YSB0eXBlcyBtaXNtYXRjaGluZyB3aXRoIHRoZWlyIHNvdXJjZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmM6IENvcnJlY3QgdGhlIHR5cGUgb2YKKwlBRl9GYWNlR2xvYmFsc1JlYy5nbHlwaF9jb3VudCB0byBtYXRjaCB3aXRoCisJRlRfRmFjZS0+bnVtX2dseXBocy4KKwkoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc2NyaXB0X2NvdmVyYWdlKToKKwlJbnNlcnQgZXhwbGljaXQgY2FzdCB0byBjb21wYXJlCisJRlRfTG9uZyBBRl9GYWNlR2xvYmFsc1JlYy5nbHlwaF9jb3VudCB2ZXJzdXMKKwlGVF9VSW50IGdpbmRleC4gIFRoZSB0eXBlIG9mIGBubicgaXMgY2hhbmdlZAorCXRvIHNjYW4gZ2x5cGggaW5kZXggdXB0byBBRl9GYWNlR2xvYmFsc1JlYy5nbHlwaF9jb3VudC4KKwkoYWZfZmFjZV9nbG9iYWxzX2dldF9tZXRyaWNzKTogVGhlIHR5cGUgb2YgYHNjcmlwdF9tYXgnCisJaXMgY2hhbmdlZCB0byBjb3ZlciBzaXplX3QgdmFsdWUuICBJbnNlcnQgZXhwbGljaXQgY2FzdAorCXRvIGNvbXBhcmUgRlRfTG9uZyBBRl9GYWNlR2xvYmFsc1JlYy5nbHlwaF9jb3VudCB2ZXJzdXMKKwlGVF9VSW50IGdpbmRleC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9heGlzX2hpbnRzX25ld19zZWdtZW50KToKKwlJbnNlcnQgZXhwbGljaXQgY2FzdCB0byBjYWxjdWxhdGUgYGJpZ19tYXgnIGZyb20KKwlpbnRlZ2VyIGFuZCBzaXplX3QgdmFsdWVzLgorCShhZl9heGlzX2hpbnRzX25ld19lZGdlKTogRGl0dG8uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKToKKwlUaGUgdHlwZSBvZiBgYmVzdF95JyBpcyBtYXRjaGVkIHRvIEZUX1ZlY3Rvci55LgorCShhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgpOiBUaGUgdHlwZSBvZiBgZGVsdGEnIGlzCisJbWF0Y2hlZCB0byBgZGlzdCcgYW5kIGBvcmdfZGlzdCcuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlhdXRvZml0OiBDb3VudCB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IG9iamVjdCBieSBwdHJkaWZmX3QuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50X2VkZ2VzKTogVGhlCisJbnVtYmVyIG9mIGVkZ2VzIGBuX2VkZ2VzJyBzaG91bGQgYmUgY291bnRlZCBieQorCUZUX1B0ckRpc3QgdmFyaWFibGUgaW5zdGVhZCBvZiBGVF9JbnQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludF9lZGdlcyk6CisJRGl0dG8uCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaDogSW4gQUZfU2NyaXB0Q2xhc3NSZWMsCisJdGhlIHNpemUgb2YgbWV0cmljIGBzY3JpcHRfbWV0cmljc19zaXplJyBzaG91bGQKKwliZSBjb3VudGVkIGJ5IEZUX09mZnNldCB2YXJpYWJsZSBpbnN0ZWFkIG9mIEZUX1VJbnQuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYworCShhZl9nbHlwaF9oaW50c19hbGlnbl9zdHJvbmdfcG9pbnRzKTogVGhlIGN1cnNvcnMKKwlmb3IgdGhlIGVkZ2VzIGBtaW4nLCBgbWF4JywgYG1pZCcgaW4gdGhlIG1lbW9yeQorCWJ1ZmZlciBzaG91bGQgYmUgdHlwZWQgRlRfUHRyRGlzdC4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWF1dG9maXQ6IEZpeCBmb3IgdW51c2VkIHZhcmlhYmxlIGBmaXJzdCcuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogSW5zZXJ0CisJRlRfVU5VU0VEKCkgdG8gaGlkZSB0aGUgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlJbXByb3ZlIGJpdG1hcCBzaXplIG9yIHBpeGVsIHZhcmlhYmxlcyBmb3IgMTYtYml0IHN5c3RlbXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmg6IEludHJvZHVjZQorCUZUX0lOVF9NSU4sIHRvIHVzZSBpbiBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBpbgorCTE2LWJpdCBhbmQgNjQtYml0IHBsYXRmb3Jtcy4KKwkKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYSB0cmFjZXIKKwl0byBmdHN5bnRoLmMuCisJCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChGVF9CaXRtYXBfRW1ib2xkZW4pOiBDaGVjaworCWludmFsaWQgc3RyZW5ndGggY2F1c2luZyBpbnRlZ2VyIG92ZXJmbG93IG9uIDE2LWJpdAorCXBsYXRmb3JtLgorCQorCSogc3JjL2Jhc2UvZnRjYWxjLmMgKGZ0X2Nvcm5lcl9vcmllbnRhdGlvbik6IENoYW5nZQorCXRoZSBpbnRlcm5hbCBjYWxjdWxhdGlvbiBmcm9tIEZUX0ludCB0byBGVF9Mb25nLCB0bworCWF2b2lkIGFuIG92ZXJmbG93IG9uIDE2LWJpdCBwbGF0Zm9ybXMuICBUaGUgY2FsbGVyIG9mCisJdGhpcyBmdW5jdGlvbiBzaG91bGQgdXNlIG9ubHkgdGhlIHNpZ24gb2YgcmVzdWx0LAorCXNvIHRoZSBjYXN0IHRvIEZUX0ludCBpcyBhY2NlcHRhYmxlLgorCQorCSogc3JjL2Jhc2UvZnRzeW50aC5jOiBJbnRyb2R1Y2UgYSB0cmFjZXIgZm9yIHN5bnRoIG1vZHVsZS4KKwkoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogQ2hlY2sgaW52YWxpZCBzdHJlbmd0aCBjYXVzaW5nCisJaW50ZWdlciBvdmVyZmxvdyBvbiAxNi1iaXQgcGxhdGZvcm0uCisJCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBUaGUgZ2x5cGggaW5kZXgKKwlpbiBGVDIgQVBJIGlzIHR5cGVkIGFzIEZUX1VJbnQsIGFsdGhvdWdoIEJERiBkcml2ZXIKKwljYW4gaGFuZGxlIHVuc2lnbmVkIGxvbmcgZ2x5cGggaW5kZXggaW50ZXJuYWxseS4gIFRvCisJYXZvaWQgaW50ZWdlciBvdmVyZmxvdyBvbiAxNi1iaXQgcGxhdGZvcm0sIHRvbyBsYXJnZQorCWdseXBoIGluZGV4IHNob3VsZCBiZSBleGNsdWRlZC4KKwkoQkRGX0dseXBoX0xvYWQpOiBUaGUgZ2x5cGggcGl0Y2ggaW4gRlQyIGlzIHR5cGVkIGFzCisJRlRfVUludCwgYWx0aG91Z2ggQkRGIGRyaXZlciBjYW4gaGFuZGxlIHVuc2lnbmVkIGxvbmcKKwlnbHlwaCBwaXRjaCBpbnRlcm5hbGx5LiAgVG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdyBvbgorCTE2LWJpdCBwbGF0Zm9ybSwgdG9vIGxhcmdlIGdseXBoIHBpdGNoIHNob3VsZCBub3QgYmUKKwlyZXR1cm5lZC4KKwkKKwkqIHNyYy9wZnIvcGZyc2JpdC5jIChwZnJfc2xvdF9sb2FkX2JpdG1hcCk6IFRoZSBnbHlwaAorCXBpdGNoIGluIEZUMiBpcyB0eXBlZCBhcyBGVF9VSW50LCBhbHRob3VnaCBQRlIgZm9udAorCWZvcm1hdCBjYW4gaW5jbHVkZSBodWdlIGJpdG1hcCBnbHlwaCB3aXRoIDI0LWJpdCBwaXRjaAorCShob3dldmVyLCBhIGdseXBoIHNwZW5kcyAxNi43IHBpeGVsLCBpdCdzIG5vdCByZWFsaXN0aWMpLgorCVRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgb24gMTYtYml0IHBsYXRmb3JtLCBodWdlCisJYml0bWFwIGdseXBoIHNob3VsZCBiZSBleGNsdWRlZC4KKwkKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lKTogQXMgRlRfU3Bhbi54IGlzCisJdHJ1bmNhdGVkIHRvIGZpdCBpdHMgdHlwZSAoMTYtYml0IHNob3J0KSwgRlRfU3Bhbi55CisJc2hvdWxkIGJlIHRydW5jYXRlZCB0byBmaXQgaXRzIHR5cGUgKEZUX0ludCkuCisJCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfcm9zKTogQ0ZGIHNwZWNpZmljYXRpb24KKwlkZWZpbmVzIHRoZSBzdXBwbGVtZW50IGluIFJPUyBhcyBhIHJlYWwgbnVtYmVyLgorCVRydW5jYXRlIGl0IHRvIGZpdCBwdWJsaWMgRlQyIEFQSS4KKwkKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2NpZF9yb3MpOiBXYXJuIHRoZQorCXN1cHBsZW1lbnQgaWYgaXQgaXMgdHJ1bmNhdGVkIG9yIHJvdW5kZWQgaW4gY2ZmX2dldF9yb3MoKS4KKwkKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaDogQ2hhbmdlIHRoZSB0eXBlIG9mIGludGVybmFsIHZhcmlhYmxlCisJYHN1cHBsZW1lbnQnIGZyb20gRlRfTG9uZyB0byBGVF9VTG9uZyB0byBmaXQgdGhlIHNpZ25lZG5lc3MKKwl0byB0aGUgdHlwZSBpbiBwdWJsaWMgQVBJLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJcHNhdXg6IFByZXZlbnQgaW52YWxpZCBhcmd1bWVudHMgdG8gYWZtX3BhcnNlcl9yZWFkX3ZhbHMoKS4KKworCSogc3JjL3BzYXV4L2FmbXBhcnNlLmMgKGFmbV9wYXJzZXJfcmVhZF92YWxzKTogQ2hhbmdlCisJdGhlIHR5cGUgb2YgYG4nIHRvIHByZXZlbnQgbmVnYXRpdmUgbnVtYmVyIGhvdyBtYW55CisJYXJndW1lbnRzIHNob3VsZCBiZSBwYXJzZWQuCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5oIChhZm1fcGFyc2VyX3JlYWRfdmFscyk6IERpdHRvLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJYmFzZTogUHJldmVudCBzb21lIG92ZXJmbG93cyBvbiBMUDY0IHN5c3RlbXMuCisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jZS5jIChGVF9HZXRfQWR2YW5jZXMpOiBDYXN0IHRoZQorCXVuc2lnbmVkIGxvbmcgY29uc3RhbnQgRlRfTE9BRF9BRFZBTkNFX09OTFkgdG8gRlRfVUludDMyCisJZm9yIExQNjQgcGxhdGZvcm1zLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfU3FydDMyKTogQWxsIGludGVybmFsIHZhcmlhYmxlcworCWFyZSBjaGFuZ2VkIHRvIEZUX1VJbnQzMiBmcm9tIEZUX1VMb25nLgorCShGVF9NdWxEaXYpOiBJbnNlcnQgY2FzdHMgdG8gRlRfSW50MzIgZm9yIExQNjQgcGxhdGZvcm1zLgorCVRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIDMyLWJpdCBpbnRlZ2VyLCBhbHRob3VnaAorCXRoZWlyIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlIGFyZSBGVF9Mb25nLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0NoYXJfSW5kZXgpOiBDaGVjayBgY2hhcmNvZGUnCisJaXMgd2l0aGluIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGZvciBMUDY0IHBsYXRmb3Jtcy4KKwkoRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4KTogQ2hlY2sgYGNoYXJjb2RlJyBhbmQKKwlgdmFyaWFudFNlbGVjdG9yJyBhcmUgd2l0aGluIDMyLWJpdCBpbnRlZ2VyIGZvciBMUDY0CisJcGxhdGZvcm1zLgorCShGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50KTogQ2hlY2sgYHZhcmlhbnRTZWxlY3RvcicgaXMKKwl3aXRoaW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgZm9yIExQNjQgcGxhdGZvcm1zLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChmdF90cmlnX2Rvd25zY2FsZSk6IFRoZSBGVF9GaXhlZAorCXZhcmlhYmxlIGB2YWwnIGFuZCB1bnNpZ25lZCBsb25nIGNvbnN0YW50IEZUX1RSSUdfU0NBTEUKKwlhcmUgY2FzdCB0byBGVF9VSW50MzIsIHdoZW4gY2FsY3VsYXRlcyBGVF9VSW50MzIuCisJKEZUX1ZlY3Rvcl9Sb3RhdGUpOiBUaGUgbG9uZyBjb25zdGFudCAxTCBpcyBjYXN0IHRvCisJRlRfSW50MzIgdG8gY2FsY3VsYXRlIEZUX0ludDMyIGBoYWxmJy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWNmZjogQ2FzdCB0aGUgbG9uZyB2YXJpYWJsZXMgdG8gMzItYml0IGZvciBMUDY0IHN5c3RlbXMuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9hZHZhbmNlcyk6IEluc2VydAorCWV4cGxpY2l0IGNhc3QgdG8gbW9kaWZ5IGEgMzItYml0IGZsYWcgYnkgdW5zaWduZWQKKwlsb25nIGNvbnN0YW50LgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IERpdHRvLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKToKKwlSZXBsYWNlIHRoZSBjYXN0cyB0byBGVF9Mb25nIGJ5IHRoZSBjYXN0cyB0byBGVF9JbnQzMgorCWZvciBMUDY0IHBsYXRmb3Jtcy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCXBjZjogSW1wcm92ZSBQQ0ZfUHJvcGVydHlSZWMudmFsdWUgbmFtZXMgb24gTFA2NCBwbGF0Zm9ybXMuCisKKwkqIHNyYy9wY2YvcGNmLmg6IEluIFBDRl9Qcm9wZXJ0eVJlYy52YWx1ZSwgdGhlIG1lbWJlcgorCWBpbnRlZ2VyJyBpcyByZXBsYWNlZCBieSBgbCcsIGBjYXJkaW5hbCcgaXMgcmVwbGFjZWQKKwlieSBgdWwnLCB0byBmaXggdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbmFtZSBhbmQKKwl0aGUgdHlwZXMgb24gTFA2NCBwbGF0Zm9ybXMuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2dldF9iZGZfcHJvcGVydHkpOiBSZWZsZWN0CisJUENGX1Byb3BlcnR5UmVjLnZhbHVlIGNoYW5nZSwgd2l0aCBhcHByb3ByaWF0ZSBjYXN0cworCXRvIEZUX0ludDMyL0ZUX1VJbnQzMi4gIFRoZWlyIGRlc3RpbmF0aW9ucworCUJERl9Qcm9wZXJ0eVJlYy57aW50ZWdlcnxjYXJkaW5hbH0gYXJlIHB1YmxpYyBhbmQKKwlleHBsaWNpdGx5IGRlZmluZWQgYXMgRlRfSW50MzIvRlRfVUludDMyLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9wcm9wZXJ0aWVzLCBwY2ZfbG9hZF9mb250KToKKwlSZWZsZWN0IFBDRl9Qcm9wZXJ0eVJlYy52YWx1ZSBjaGFuZ2UuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwY2Y6IEZpeCBzb21lIGRhdGEgdHlwZXMgbWlzbWF0Y2hpbmcgd2l0aCB0aGVpciBzb3VyY2VzLgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKHBjZl9jbWFwX2NoYXJfaW5kZXgpOiBUaGUgdHlwZSBvZgorCWBjb2RlJyBpcyBtYXRjaGVkIHRvIFBDRl9FbmNvZGluZy0+ZW5jLgorCShwY2ZfY21hcF9jaGFyX25leHQpOiBUaGUgdHlwZSBvZiBgY2hhcmNvZGUnIGlzIG1hdGNoZWQKKwl0byBQQ0ZfRW5jb2RpbmctPmVuYy4gIFdoZW4gKmFjaGFyY29kZSBpcyBzZXQgYnkgY2hhcmNvZGUsCisJYW4gb3ZlcmZsb3cgaXMgY2hlY2tlZCBhbmQgY2FzdCB0byB1bnNpZ25lZCAzMi1iaXQKKwlpbnRlZ2VyLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJYmRmOiBJbXByb3ZlIGJkZl9wcm9wZXJ0eV90LnZhbHVlIG5hbWVzIGZvciBMUDY0IHBsYXRmb3Jtcy4KKworCSogc3JjL2JkZi9iZGYuaDogSW4gYmRmX3Byb3BlcnR5X3QudmFsdWUsIHRoZSBtZW1iZXIKKwlgaW50MzInIGlzIHJlcGxhY2VkIGJ5IGBsJywgYGNhcmQzMicgaXMgcmVwbGFjZWQgYnkKKwlgdWwnLCB0byBmaXggdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbmFtZSBhbmQgdGhlCisJdHlwZXMgb24gTFA2NCBwbGF0Zm9ybXMuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IFJlZmxlY3QKKwliZGZfcHJvcGVydHlfdC52YWx1ZSBjaGFuZ2UuCisJKGJkZl9nZXRfYmRmX3Byb3BlcnR5KTogUmVmbGVjdCBiZGZfcHJvcGVydHlfdC52YWx1ZQorCWNoYW5nZSwgd2l0aCBhcHByb3ByaWF0ZSBjYXN0cyB0byBGVF9JbnQzMi9GVF9VSW50MzIuCisJVGhlaXIgZGVzdGluYXRpb25zIEJERl9Qcm9wZXJ0eVJlYy57aW50ZWdlcnxjYXJkaW5hbH0KKwlhcmUgcHVibGljIGFuZCBleHBsaWNpdGx5IGRlZmluZWQgYXMgRlRfSW50MzIvRlRfVUludDMyLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX2FkZF9wcm9wZXJ0eSk6IFJlZmxlY3QKKwliZGZfcHJvcGVydHlfdC52YWx1ZSBjaGFuZ2UuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwliZGY6IEZpeCBzb21lIGRhdGEgdHlwZXMgbWlzbWF0Y2hpbmcgd2l0aCB0aGVpciBzb3VyY2VzLgorCisJKiBzcmMvYmRmL2JkcmRyaXZyLmMgKGJkZl9jbWFwX2NoYXJfaW5kZXgpOiBUaGUgdHlwZQorCW9mIGBjb2RlJyBpcyBtYXRjaGVkIHdpdGggQkRGX2VuY29kaW5nX2VsLT5lbmMuCisJKGJkZl9jbWFwX2NoYXJfbmV4dCk6IFRoZSB0eXBlIG9mIGBjaGFyY29kZScgaXMKKwltYXRjaGVkIHdpdGggQkRGX2VuY29kaW5nX2VsLT5lbmMuICBXaGVuICphY2hhcmNvZGUKKwlpcyBzZXQgYnkgY2hhcmNvZGUsIGFuIG92ZXJmbG93IGlzIGNoZWNrZWQgYW5kCisJY2FzdCB0byB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWF1dG9maXQ6IEltcHJvdmUgVW5pY29kZSByYW5nZSBkZWZpbml0aW9ucy4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9VTklSQU5HRV9SRUMpOiBOZXcgbWFjcm8KKwl0byBkZWNsYXJlIGEgcmFuZ2UgYnkgdHdvIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLAorCXRvIGF2b2lkIDY0LWJpdCByYW5nZSBkZWZpbml0aW9uIG9uIExQNjQgcGxhdGZvcm1zLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3VuaXJhbmdlcyk6IERpdHRvLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfdW5pcmFuZ2VzKTogRGl0dG8uCisKKwkqIHNyYy9hdXRvZml0L2FmaW5kaWMuYyAoYWZfaW5kaWNfdW5pcmFuZ2VzKTogRGl0dG8uCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa191bmlyYW5nZXMpOiBEZWNsYXJlCisJdGhlIHJhbmdlcyBieSBBRl9VTklSQU5HRV9SRUMuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlzbW9vdGg6IEZpeCBhIGRhdGEgdHlwZSBtaXNtYXRjaGluZyB3aXRoIGl0cyBzb3VyY2UuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3N3ZWVwKTogVGhlIHR5cGUgb2YKKwlgYXJlYScgaXMgbWF0Y2hlZCB3aXRoIHRoZSAzcmQgYXJndW1lbnQgYGFyZWEnCisJb2YgZ3JheV9obGluZSgpLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc21vb3RoOiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfbGluZSk6IFRoZSB0eXBlCisJb2YgYGFyZWEnIGlzIG1hdGNoZWQgd2l0aCBUV29ya2VyLmFyZWEuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwljYWNoZTogRGlzYWJsZSB0aGUgbGVnYWN5IGNvbXBhdGliaWxpdHkgaWYgMTYtYml0IHN5c3RlbS4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgKEZUQ19JbWFnZUNhY2hlX0xvb2t1cCk6IEV4Y2x1ZGUKKwl0aGUgbGVnYWN5IGJlaGF2aW91ciBmcm9tIDE2LWJpdCBwbGF0Zm9ybSwgYmVjYXVzZSB0aGUKKwljdXJyZW50IGhhY2sgY2Fubm90IGRldGVjdCB0aGUgY2FsbGVyIHVzZXMgdGhpcyBmdW5jdGlvbgorCXZpYSBsZWdhY3kgY29udmVuc2lvbi4KKwkoRlRDX1NCaXRDYWNoZV9Mb29rdXApOiBEaXR0by4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWNhY2hlOiBDaGVjayAzMi1iaXQgZ2x5cGggaW5kZXggb24gMTYtYml0IHN5c3RlbXMuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChmdGNfYmFzaWNfZmFtaWx5X2dldF9jb3VudCk6CisJQ2hlY2sgb3ZlcmZsb3cgY2F1c2VkIGJ5IHRoZSBmYWNlIGluY2x1ZGluZyBsYXJnZQorCW51bWJlciBvZiBnbHlwaHMgPiA2NGsuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwljYWNoZTogRml4IHNvbWUgZGF0YSB0eXBlcyBtaXNtYXRjaGluZyB3aXRoIHRoZWlyIHNvdXJjZXMuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfY2FjaGVfcmVzaXplKTogVGhlIHR5cGVzIG9mCisJYHAnLCBgbWFzaycsIGBjb3VudCcgYXJlIG1hdGNoZWQgd2l0aCBGVENfQ2FjaGUtPntwLG1hc2t9LgorCShGVENfQ2FjaGVfQ2xlYXIpOiBUaGUgdHlwZSBvZiBgb2xkX2luZGV4JyBpcyBtYXRjaGVkIHRvCisJRlRDX0NhY2hlLT57cCxtYXNrfS4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DQUNIRV9MT09LVVBfQ01QKTogVGhlIHR5cGUKKwlvZiBgX2lkeCcgaXMgbWF0Y2hlZCB3aXRoIEZUQ19DYWNoZS0+e3AsbWFza30uCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwljYWNoZTogRml4IHNvbWUgZGF0YSB0eXBlcyBtaXNtYXRjaGluZyB3aXRoIHRoZWlyIHNvdXJjZXMuCisKKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5jIChmdGNfc25vZGVfbG9hZCk6IFRoZSB0eXBlcworCW9mIGB4YWR2YW5jZScgYW5kIGB5YWR2YW5jZScgYXJlIG1hdGNoZWQgd2l0aAorCUZUX0dseXBoU2xvdC0+YWR2YW5jZS57eHx5fS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWNhY2hlOiBDYXN0IE5VTEwgdG8gYSByZXF1aXJlZCBmdW5jdGlvbiB0eXBlIGV4cGxpY2l0bHkuCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQpOgorCUluc2VydCBleHBsaWNpdCBjYXN0IGZyb20gTlVMTCB0byBmdW5jdGlvbiB0eXBlLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJZnR0eXBlcy5oOiBDYXN0IEZUX01BS0VfVEFHIG91dHB1dCB0byBGVF9UYWcgZXhsaWNpdGx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaCAoRlRfTUFLRV9UQUcpOgorCUNhc3QgdGhlIHJlc3VsdCB0byBGVF9UYWcuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwc25hbWVzOiBIYW5kbGUgVW5pY29kZSBjb2RlcG9pbnRzIGJ5IEZUX1VJbnQzMiB2YXJpYWJsZXMuCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKEJBU0VfR0xZUEgpOiBDYXN0IHRoZSByZXN1bHQKKwl0byB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBmb3IgTFA2NCBwbGF0Zm9ybS4KKwkocHNfdW5pY29kZV92YWx1ZSk6IFJldHVybiB0aGUgdmFsdWUgYnkgdW5zaWduZWQgMzItYml0CisJaW50ZWdlciBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlwc2F1eDogVXNlIHNpemVfdCB2YXJpYWJsZSB0byBwYXNzIHRoZSBidWZmZXIgc2l6ZS4KKworCSogc3JjL3BzYXV4L3BzYXV4LmggKHRvX2J5dGVzKTogVGhlIHR5cGUgb2YgYG1heF9ieXRlcycKKwkodGhlIGFyZ3VtZW50IHRvIHBhc3MgdGhlIGJ1ZmZlciBzaXplKSBpcyBjaGFuZ2VkIHRvCisJc2l6ZV90LCB0byBtYXRjaCB3aXRoIEFOU0kgQyBzdHJpbmcgZnVuY3Rpb25zLgorCisJKiBzcmMvcHNhdXgvcHNjb252LmggKFBTX0NvbnZfU3RyaW5nRGVjb2RlLAorCVBTX0NvbnZfQVNDSUlIZXhEZWNvZGUsIFBTX0NvbnZfRWV4ZWNEZWNvZGUpOiBEaXR0by4KKworCSogc3JjL3BzYXV4L3BzY29udi5jIChQU19Db252X1N0cmluZ0RlY29kZSwKKwlQU19Db252X0FTQ0lJSGV4RGVjb2RlLCBQU19Db252X0VleGVjRGVjb2RlKTogRGl0dG8uCisKKwkqIHNyYy9wc2F1eC9wc29ianMuaCAocHNfcGFyc2VyX3RvX2J5dGVzKTogRGl0dG8uCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfcGFyc2VyX3RvX2J5dGVzKTogRGl0dG8uCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0eXBlMTogVXNlIHNpemVfdCB2YXJpYWJsZSB0byBwYXNzIHRoZSBzdHJpbmcgbGVuZ3RoLgorCisJKiBwc2F1eC5oOiBUaGUgdHlwZSBvZiBgbGVuJyAodGhlIGFyZ3VtZW50IHRvIHBhc3MKKwl0aGUgYnVmZmVyIHNpemUgdG8gdGhlIGZ1bmN0aW9uIGluIEFGTV9QYXJzZXJSZWMpCisJaXMgY2hhbmdlZCB0byBzaXplX3QsIHRvIG1hdGNoIHdpdGggQU5TSSBDIHN0cmluZworCWZ1bmN0aW9ucy4KKworCSogdDFhZm0uYyAodDFfZ2V0X2luZGV4KTogRGl0dG8uCisKKwkqIHRlc3RfYWZtLmMgKGR1bW15X2dldF9pbmRleCk6IERpdHRvLgorCisJKiBhZm1wYXJzZS5jIChhZm1fcGFyc2VyX3JlYWRfdmFscyk6IFRvIGNhbGwKKwlBRk1fUGFyc2VyUmVjLmdldF9pbmRleCwgdGhlIGxlbmd0aCBvZiB0b2tlbgorCWBsZW4nIGlzIGNhc3QgdG8gc2l6ZV90LgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJY2lkOiBGaXggc29tZSBkYXRhIHR5cGVzIG1pc21hdGNoaW5nIHdpdGggdGhlaXIgc291cmNlcy4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VyX25ldyk6IFRoZSB0eXBlcyBvZgorCWByZWFkX2xlbicgYW5kIGBzdHJlYW1fbGVuJyBhcmUgbWF0Y2hlZCB0bworCUZUX1N0cmVhbS0+c2l6ZS4gIFVucmVxdWlyZWQgY2FzdCBpcyByZW1vdmVkLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJY2ZmOiBGaXggZm9yIHVudXNlZCB2YXJpYWJsZSBgcmVzdCcuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX3JlYWwpOiBJbnNlcnQKKwlGVF9VTlVTRUQoKSB0byBoaWRlIHRoZSB1bnVzZWQgdmFyaWFibGUgd2FybmluZy4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWNmZjogRml4IHNvbWUgZGF0YSB0eXBlcyBtaXNtYXRjaGluZyB3aXRoIHRoZWlyIHNvdXJjZXMuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFRoZSB0eXBlcyBvZgkKKwlgdG9wX3VwbScgYW5kIGBzdWJfdXBtJyBhcmUgbWF0Y2hlZCB3aXRoCisJQ0ZGX0ZvbnRSZWNEaWN0LT51bml0c19wZXJfZW0uCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfc2l6ZV9zZWxlY3QpOiBEaXR0by4KKwkoY2ZmX3NpemVfcmVxdWVzdCk6IERpdHRvLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJYmRmOiBGaXggc29tZSBkYXRhIHR5cGVzIG1pc21hdGNoaW5nIHdpdGggdGhlaXIgc291cmNlcy4KKworCSogYmRmbGliLmMgKF9iZGZfbGlzdF9lbnN1cmUpOiBUaGUgdHlwZSBvZiBgbnVtX2l0ZW1zJworCWlzIG1hdGNoZWQgd2l0aCBfYmRmX2xpc3RfdC51c2VkLiAgQWxzbyB0aGUgdHlwZXMgb2YKKwlgb2xkc2l6ZScsIGBuZXdzaXplJywgYGJpZ3NpemUnIGFyZSBtYXRjaGVkIHRvby4KKwkoX2JkZl9yZWFkc3RyZWFtKTogYGN1cnNvcicgaXMgdXNlZCBhcyBhbiBvZmZzZXQgdG8KKwl0aGUgcG9pbnRlciwgaXQgc2hvdWxkIGJlIHR5cGVkIGFzIEZUX09mZnNldC4gIEFsc28KKwl0aGUgdHlwZXMgb2YgYGJ5dGVzJywgYHN0YXJ0JywgYGVuZCcsIGBhdmFpbCcgYXJlIG1hdGNoZWQuCisKKwkqIGJkZmRyaXZyLmM6IFRoZSB0eXBlIG9mIEJERl9DTWFwLT5udW1fZW5jb2RpbmdzIGlzCisJbWF0Y2hlZCB3aXRoIEZUX0NNYXAtPmNsYXp6LT5zaXplLgorCShiZGZfY21hcF9jaGFyX2luZGV4KTogVGhlIHR5cGVzIG9mIGBtaW4nLCBgbWF4JywgYG1pZCcKKwlhcmUgbWF0Y2hlZCB3aXRoIEJERl9DTWFwLT5udW1fZW5jb2RpbmdzLiAgVGhlIHR5cGUgb2YKKwlgcmVzdWx0JyBpcyBtYXRjaGVkIHdpdGggZW5jb2RpbmctPmdseXBoLgorCShiZGZfY21hcF9jaGFyX25leHQpOiBEaXR0bywgdGhlIHR5cGUgb2YgYGNvZGUnIGlzCisJbWF0Y2hlZCB3aXRoIEJERl9lbmNvZGluZ19lbC5lbmMuCisJKGJkZl9pbnRlcnByZXRfc3R5bGUpOiBUaGUgdHlwZSBvZiBgbGVuZ3RocycgaXMgY2hhbmdlZAorCXRvIHNpemVfdCwgdG8gdGFrZSB0aGUgdmFsdWUgYnkgZnRfc3RybGVuKCkuICBBbHNvIHRoZQorCXR5cGVzIG9mIGBsZW4nLCBgbm4nLCBgbW0nIGFyZSBtYXRjaGVkLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc2ZudDogQ291bnQgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBvYmplY3QgYnkgcHRyZGlmZl90LgorCisJKiBzcmMvc2ZudC90dGJkZi5jICh0dF9mYWNlX2ZpbmRfYmRmX3Byb3ApOiBUaGUgdHlwZSBvZgorCWBwZXJvcGVydHlfbGVuJyBpcyBjaGFuZ2VkIGZyb20gRlRfVUludCB0byBGVF9PZmZzZXQsCisJdG8gbWF0Y2ggd2l0aCBzaXplX3QsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZQorCW9iamVjdCBpbiB0aGUgbWVtb3J5IGJ1ZmZlci4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWx6dzogQ291bnQgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBvYmplY3QgYnkgcHRyZGlmZl90LgorCisJKiBzcmMvbHp3L2Z0em9wZW4uaDogVGhlIHR5cGVzIG9mIEZUX0x6d1N0YXRlLT57YnVmX3RvdGFsLAorCXN0YWNrX3NpemV9IGFyZSBjaGFuZ2VkIGZyb20gRlRfVUludCB0byBGVF9PZmZzZXQsIHRvIG1hdGNoCisJd2l0aCBzaXplX3QsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZSBvYmplY3QgaW4KKwl0aGUgbWVtb3J5IGJ1ZmZlci4KKworCSogc3JjL2x6dy9mdHpvcGVuLmMgKGZ0X2x6d3N0YXRlX3N0YWNrX2dyb3cpOiBUaGUgdHlwZXMgb2YKKwlgb2xkX3NpemUnIGFuZCBgbmV3X3NpemUnIGFyZSBjaGFuZ2VkIGZyb20gRlRfVUludCB0bworCUZUX09mZnNldCwgdG8gbWF0Y2ggd2l0aCBzaXplX3QsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHR5cGUKKwlmb3IgdGhlIG9iamVjdCBpbiB0aGUgbWVtb3J5IGJ1ZmZlci4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCW90dmFsaWQ6IENvdW50IHRoZSB0YWJsZSBzaXplIG9uIG1lbW9yeSBieSBwdHJkaWZmX3QuCisKKwkqIHNyYy9vdHZhbGlkL290dmdwb3MuYyAob3R2X1ZhbHVlUmVjb3JkX3ZhbGlkYXRlKToKKwlDaGFuZ2UgdGhlIHR5cGUgb2YgdGFibGUgc2l6ZSBmcm9tIEZUX1VJbnQgdG8KKwlGVF9QdHJEaXN0IGJlY2F1c2UgaXQgaXMgY2FsY3VsYXRlZCBieSB0aGUgbWVtb3J5CisJYWRkcmVzc2VzLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJb3R2YWxpZDogUHJldmVudCBhbiBvdmVyZmxvdyBieSBHUE9TL0dTVUIgMzJiLWJpdCBvZmZzZXQuCisKKwkqIHNyYy9vdHZhbGlkL290dmdwb3MuYyAob3R2X0V4dGVuc2lvblBvc192YWxpZGF0ZSk6CisJRXh0ZW5kIEV4dGVuc2lvbk9mZnNldCBmcm9tIEZUX1VJbnQgdG8gRlRfVUxvbmcsIHRvCisJY292ZXIgMzItYml0IG9mZnNldCBvbiAxNi1iaXQgcGxhdGZvcm0uCisKKwkqIHNyYy9vdHZhbGlkL290dmdzdWIuYyAob3R2X0V4dGVuc2lvblN1YnN0X3ZhbGlkYXRlKToKKwlEaXR0by4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWZ0b2Jqcy5jOiBQcmV2ZW50IGFuIG92ZXJmbG93IGluIGdseXBoIGluZGV4IGhhbmRsaW5nLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudCk6CisJSW1wcm92ZSB0aGUgY2FzdCBpbiBjb21wYXJpc29uIHRvIGF2b2lkIHRoZSB0cnVuY2F0aW9uLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJSW1wcm92ZSB0aGUgdmFyaWFibGUgdHlwZXMgaW4gcmFjY2Vzc19tYWtlX2ZpbGVfbmFtZSgpLgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKHJhY2Nlc3NfbWFrZV9maWxlX25hbWUpOgorCUNoYW5nZSB0aGUgdHlwZSBvZiBjdXJzb3IgdmFyaWFibGUgYHRtcCcgdG8gY29uc3QgY2hhciosCisJdG8gcHJldmVudCB0aGUgdW5leHBlY3RlZCBtb2RpZmljYXRpb24gb2Ygb3JpZ2luYWwgcGF0aG5hbWUuCisJKHJhY2Nlc3NfbWFrZV9maWxlX25hbWUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgbmV3X2xlbmd0aAorCXRvIHNpemVfdC4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWZ0cGF0ZW50LmM6IEZpeCBmb3IgdW51c2VkIHZhcmlhYmxlIGBlcnJvcicuCisKKwkqIHNyYy9iYXNlL2Z0cGF0ZW50LmMgKF90dF9jaGVja19wYXRlbnRzX2luX3JhbmdlKToKKwlGaXggd2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlIGBlcnJvcicuCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwl0eXBlMTogQ2hlY2sgaW52YWxpZCBzdHJpbmcgbG9uZ2VyIHRoYW4gUG9zdFNjcmlwdCBsaW1pdC4KKworCSogc3JjL3R5cGUxL3QxYWZtLmMgKHQxX2dldF9pbmRleCk6IENoZWNrIGludmFsaWQgc3RyaW5nCisJd2hpY2ggZXhjZWVkcyB0aGUgbGltaXQgb2YgUG9zdFNjcmlwdCBzdHJpbmcvbmFtZSBvYmplY3RzLgorCisyMDA5LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJZ3ppcDogVXNlIEZUMiB6Y2FsbG9jKCkgJiB6ZnJlZSgpIGluIGZ0Z3ppcC5jIGJ5IGRlZmF1bHQuCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jICh6Y2FsbG9jLCB6Y2ZyZWUpOiBEaXNhYmxlIGFsbAorCXpjYWxsb2MoKSAmIHpmcmVlKCkgYnkgemxpYiBpbiB6dXRpbC5jLCB0aG9zZSBpbgorCWZ0Z3ppcC5jIGJ5IEZUMiBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiAgVG8gdXNlCisJemxpYiB6Y2FsbG9jKCkgJiB6ZnJlZSgpLCBkZWZpbmUgVVNFX1pMSUJfWkNBTExPQy4KKwlTZWUgZGlzY3Vzc2lvbjoKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wMi9tc2cwMDAwMC5odG1sCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlnemlwOiBEaXN0aW5ndWlzaCBQdXJlQyBmcm9tIFR1cmJvQyBvbiBNU0RPUy4KKworCSogc3JjL2d6aXAvenV0aWwuYyAoemNhbGxvYywgemNmcmVlKTogRW5hYmxlIG9ubHkgZm9yCisJTVNET1MgcGxhdGZvcm0uCisKKzIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlneHZhbGlkOiBJbnNlcnQgUHVyZUMgcHJhZ21hIHRvIGFsbG93IHVuZXZhbHVhdGVkIHZhcmlhYmxlcy4KKworCSogYnVpbGRzL2F0YXJpL0FUQVJJLkg6IEluc2VydCBQdXJlQyBwcmFnbWEgbm90IHRvCisJd2FybiBhZ2FpbnN0IHNldC1idXQtdW5ldmFsdWF0ZWQgdmFyaWFibGUgaW4gZ3h2YWxpZAorCW1vZHVsZS4KKworMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCWd4dmFsaWQ6IFBhc3MgdGhlIHVuaW9uIGJ5IHRoZSBwb2ludGVyIGluc3RlYWQgb2YgdGhlIHZhbHVlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZjb21tbi5oOgorCSAgLSBEZWNsYXJlIG5ldyB0eXBlIGBHWFZfTG9va3VwVmFsdWVDUHRyJy4KKwkgIC0gVXBkYXRlIHRoZSB0eXBlIG9mIHRoZSAybmQgYXJndW1lbnQgdG8gcGFzcyBHWFZfTG9va3VwVmFsdWVEZXNjCisJICAgIGRhdGEgdG8gdGhlIGZ1bmN0aW9uIHByb3RvdHlwZWQgYXMgR1hWX0xvb2t1cF9WYWx1ZV9WYWxpZGF0ZV9GdW5jLAorCSAgICBmcm9tIEdYVl9Mb29rdXBWYWx1ZURlc2MgdG8gR1hWX0xvb2t1cFZhbHVlQ1B0ci4KKwkgIC0gTGlrZXdpc2UgZm9yIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVkIGFzCisJICAgIEdYVl9Mb29rdXBfRm10NF9UcmFuc2l0X0Z1bmMuCisKKwkgIC0gRGVjbGFyZSBuZXcgdHlwZSBgR1hWX1N0YXRlVGFibGVfR2x5cGhPZmZzZXRDUHRyJy4KKwkgIC0gVXBkYXRlIHRoZSB0eXBlIG9mIHRoZSAzcmQgYXJndW1lbnQgdG8gcGFzcworCSAgICBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MgZGF0YSB0byB0aGUgZnVuY3Rpb24gcHJvdG90eXBlZAorCSAgICBhcyBHWFZfU3RhdGVUYWJsZV9FbnRyeV9WYWxpZGF0ZV9GdW5jLCBmcm9tCisJICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0RGVzYyB0byBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIuCisKKwkgIC0gRGVjbGFyZSBuZXcgdHlwZSBgR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0cicuCisJICAtIFVwZGF0ZSB0aGUgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50IHRvIHBhc3MKKwkgICAgR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0RGVzYyBkYXRhIHRvIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVkCisJICAgIGFzIEdYVl9YU3RhdGVUYWJsZV9FbnRyeV9WYWxpZGF0ZV9GdW5jLAorCSAgICBmcm9tIEdYVl9YU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MKKwkgICAgdG8gR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ci4KKworCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoZ3h2X0xvb2t1cFRhYmxlX2ZtdDBfdmFsaWRhdGUsCisJZ3h2X1hDbGFzc1RhYmxlX2xvb2t1cHZhbF92YWxpZGF0ZSwKKwlneHZfWENsYXNzVGFibGVfbG9va3VwZm10NF90cmFuc2l0KToKKwlVcGRhdGUgZnJvbSBHWFZfTG9va3VwVmFsdWVEZXNjIHRvIEdYVl9Mb29rdXBWYWx1ZUNQdHIuCisJCisJKiBzcmMvZ3h2YWxpZC9neHZic2xuLmMgKGd4dl9ic2xuX0xvb2t1cFZhbHVlX3ZhbGlkYXRlLAorCWd4dl9ic2xuX0xvb2t1cEZtdDRfdHJhbnNpdCk6IERpdHRvLgorCQorCSogc3JjL2d4dmFsaWQvZ3h2anVzdC5jCisJKGd4dl9qdXN0X3BjVGFibGVfTG9va3VwVmFsdWVfZW50cnlfdmFsaWRhdGUsCisJZ3h2X2p1c3RfY2xhc3NUYWJsZV9lbnRyeV92YWxpZGF0ZSwKKwlneHZfanVzdF93ZGNUYWJsZV9Mb29rdXBWYWx1ZV92YWxpZGF0ZSk6IERpdHRvLgorCQorCSogc3JjL2d4dmFsaWQvZ3h2a2Vybi5jCisJKGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfZW50cnlfdmFsaWRhdGUpOiBEaXR0by4KKwkKKwkqIHNyYy9neHZhbGlkL2d4dmxjYXIuYyAoZ3h2X2xjYXJfTG9va3VwVmFsdWVfdmFsaWRhdGUsCisJZ3h2X2xjYXJfTG9va3VwRm10NF90cmFuc2l0KTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZvcGJkLmMgKGd4dl9vcGJkX0xvb2t1cFZhbHVlX3ZhbGlkYXRlLAorCWd4dl9vcGJkX0xvb2t1cEZtdDRfdHJhbnNpdCk6IERpdHRvLgorCQorCSogc3JjL2d4dmFsaWQvZ3h2cHJvcC5jIChneHZfcHJvcF9Mb29rdXBWYWx1ZV92YWxpZGF0ZSwKKwlneHZfcHJvcF9Mb29rdXBGbXQ0X3RyYW5zaXQpOiBEaXR0by4KKwkKKwkqIHNyYy9neHZhbGlkL2d4dm1vcnQ0LmMKKwkoZ3h2X21vcnRfc3VidGFibGVfdHlwZTRfbG9va3VwdmFsX3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0MC5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUwX2VudHJ5X3ZhbGlkYXRlKTogVXBkYXRlCisJZnJvbSBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MKKwl0byBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIuCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0MS5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0Mi5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0NS5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU1X2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4Mi5jCisJKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4NS5jCisJKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J4MS5jCisJKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX2VudHJ5X3ZhbGlkYXRlKTogRGl0dG8uCisJKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX0xvb2t1cFZhbHVlX3ZhbGlkYXRlLAorCWd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX0xvb2t1cEZtdDRfdHJhbnNpdCk6CisJVXBkYXRlIGZyb20gR1hWX0xvb2t1cFZhbHVlRGVzYyB0byBHWFZfTG9va3VwVmFsdWVDUHRyLgorCQorCSogc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF9lbnRyeV92YWxpZGF0ZSk6IFVwZGF0ZQorCWZyb20gR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0RGVzYworCXRvIEdYVl9YU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIuCisKKzIwMDktMDctMjkgIEZhYnJpY2UgQmVsbGV0ICA8ZmFicmljZUBiZWxsZXQuaW5mbz4KKworCUZpeCBSZWRoYXQgYnVnemlsbGEgIzUxMzU4MiBhbmQgU2F2YW5uYWggYnVnICMyNjg0OS4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DQUNIRV9MT09LVVBfQ01QKSA8RlRDX0lOTElORT46IEZpeAorCWFsaWFzaW5nIGJ1Zy4KKworMjAwOS0wNy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRG9jdW1lbnQgcmVjZW50IGxpYnJhcnkgY2hhbmdlcy4KKworCSogZG9jcy9DSEFOR0VTOiBEbyBpdC4KKworMjAwOS0wNy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjM3ODYuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9pbml0X2J5dGVjb2RlKTogRG9uJ3QgcmVzZXQgeF9wcGVtCisJYW5kIHlfcHBlbS4gIE90aGVyd2lzZSB0aGUgYCpfQ1ZUX1N0cmV0Y2hlZCcgZnVuY3Rpb25zIGluIHR0aW50ZXJwLmMKKwlnZXQgbmV2ZXIgY2FsbGVkLgorCUFuIGFub255bW91cyBndXkgc3VnZ2VzdGVkIHRoaXMgY2hhbmdlIG9uIFNhdmFubmFoLCBhbmQgaXQgc2VlbXMgdG8KKwliZSB0aGUgcmlnaHQgc29sdXRpb24uCisKKzIwMDktMDctMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9yZWxlYXNlOiBVcGRhdGVkLgorCisyMDA5LTA3LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSRUFETUUuQ1ZTIC0+IFJFQURNRS5naXQKKworCSogUkVBRE1FLkNWUzogUmVuYW1lZCB0by4uLgorCSogUkVBRE1FLmdpdDogVGhpcy4KKwlVcGRhdGVkLgorCisyMDA5LTA3LTE1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJQm9ybGFuZCBDKysgY29tcGlsZXIgcGF0Y2ggcHJvcG9zZWQgYnkgTWlyY28gQmFiaW4uCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDcvbXNnMDAwMTYuaHRtbC4KKworCSogYnVpbGRzL2V4cG9ydHMubWs6IERlbGV0ZSB1bnVzZWQgZmxhZ3MsIENDZXhlX3tDRkxBR1MsTERGTEFHU30uCisJRml4IEFQSU5BTUVTX0MgYW5kIEFQSU5BTUVTX0VYRSBwYXRobmFtZXMgdG8gcmVmbGVjdCB0aGUgcGxhdGZvcm0KKwlzcGVjaWZpYyBwYXRobmFtZSBzeW50YXguCisJKiBidWlsZHMvY29tcGlsZXIvYmNjLm1rOiBSZW1vdmUgdW51c2VkIGZsYWcsIENDZXhlX0xERkxBR1MuCisJRGVmaW5lIFRFID0gYC1lJyBzZXBhcmF0ZWx5IChiY2MzMiBjYW5ub3Qgc3BlY2lmeSB0aGUgcGF0aG5hbWUgb2YKKwliaW5hcnkgZXhlY3V0YWJsZSBieSBUID0gYC1vJykuCisJRXh0ZW5kIHRoZSBsYXJnZSBwYWdlIHNpemUgaW4gbGlua2luZyBmcmVldHlwZS5saWIuCisJQWRkIGV4dHJhIENMRUFOIHRhcmdldCB0byBkZWxldGUgYmNjIHNwZWNpZmljIHRlbXBvcmFyeSBmaWxlcy4KKwkqIGJ1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rOiBEaXR0by4KKworMjAwOS0wNy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjcwMjYuCisKKwkqIGJ1aWxkcy93aW4zMi92YzIwMDUvZnJlZXR5cGUuc2xuOiBVc2UgY29ycmVjdCB2ZXJzaW9uIG51bWJlci4KKworMjAwOS0wNy0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUFkZCBhIHNjcmlwdCB0byBjaGVjayB0aGUgdW5kZWZpbmVkIGFuZCB1bnVzZWQgdHJhY2UgbWFjcm9zLgorCisJKiBzcmMvdG9vbHMvY2hrdHJjbXAucHk6IEEgc2NyaXB0IHRvIGNoZWNrIHRyYWNlX1hYWFggbWFjcm9zCisJdGhhdCBhcmUgdXNlZCBpbiBDIHNvdXJjZSBidXQgdW5kZWZpbmVkIGluIGZ0dHJhY2UuaCwgb3IKKwlkZWZpbmVkIGluIGZ0dHJhY2UuaCBidXQgdW51c2VkIGluIEMgc291cmNlcy4gIFNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA3L21zZzAwMDEzLmh0bWwuCisJKiBkb2NzL0RFQlVHOiBNZW50aW9uIG9uIGNoa3RyY21wLnB5LgorCSogZG9jcy9yZWxlYXNlOiBEaXR0by4KKworMjAwOS0wNy0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0cmFzdGVyXSBNYWtlIGl0IGNvbXBpbGUgYWdhaW4gd2l0aCAtRF9TVEFOREFMT05FXy4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIFtfU1RBTkRBTE9ORV9dOiBEZWZpbmUKKwlGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ILgorCUluY2x1ZGUgYHN0cmluZy5oJy4KKwlEb24ndCBpbmNsdWRlIGByYXN0cGljLmgnLgorCURlZmluZSBGVF9ERUZJTkVfUkFTVEVSX0ZVTkNTLgorCisyMDA5LTA3LTA5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJc21vb3RoOiBDaGVjayBnbHlwaCBzaXplIGJ5IHdpZHRoL2hlaWdodCwgaW5zdGVhZCBvZiBwaXRjaC9oZWlnaHQuCisJU3VnZ2VzdGVkIGJ5IGRlciBNb3VzZSA8bW91c2VAUm9kZW50cy1Nb250cmVhbC5PUkc+LgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEltcHJvdmUKKwl0aGUgY2hlY2sgZm9yIHRvbyBsYXJnZSBnbHlwaC4gIFJlcGxhY2UgdGhlIHBhaXIgb2YgYHBpdGNoJyBhbmQKKwlgaGVpZ2h0JyBieSB0aGUgcGFpciBvZiBgd2lkdGgnIGFuZCBgaGVpZ2h0Jy4gIGBwaXRjaCcgY2Fubm90CisJYmUgZ3JlYXRlciB0aGFuIGBoZWlnaHQnLiAgVGhlIHJlcXVpcmVkIGlzIGNoZWNraW5nIHRoZSBwcm9kdWN0CisJYHBpdGNoJyAqIGBoZWlnaHQnIDw9IEZUX1VMT05HX01BWCwgYnV0IHdlIHVzZSBjaGVhcCBjaGVja3MgZm9yCisJdGhlIHJlYWxpc3RpYyBjYXNlIG9ubHkuCisKKzIwMDktMDctMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlSZWdpc3RlciAyIG1pc3NpbmcgdHJhY2UgY29tcG9uZW50cywgdDFhZm0gYW5kIHR0YmRmLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIEZUX1RSQUNFX0RFRiggdDFhZm0gKQorCWFuZCBGVF9UUkFDRV9ERUYoIHR0YmRmICkuICBTZWUKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNy9tc2cwMDAxMy5odG1sCisKKzIwMDktMDctMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlSZWdpc3RlciBhIHRyYWNlIGNvbXBvbmVudCBmb3IgZnRnbG9hZHIuYy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IEFkZCBGVF9UUkFDRV9ERUYoIGdsb2FkZXIgKS4KKwlUaGUgbWFjcm8gYHRyYWNlX2dsb2FkZXInIHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhlIGluaXRpYWwgdmVyc2lvbgorCW9uIDIwMDItMDItMjQuCisKKzIwMDktMDctMDggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlQcmV2ZW50IHRoZSBvdmVyZmxvd3MgYnkgYSBnbHlwaCB3aXRoIHRvbyBtYW55IHBvaW50cyBvciBjb250b3Vycy4KKwlUaGUgYnVnIGlzIHJlcG9ydGVkIGJ5IEJvcmlzIExldG9jaGEgPGIubGV0b2NoYUBnbWMubmV0Pi4gIFNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA2L21zZzAwMDMxLmh0bWwKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNy9tc2cwMDAwMi5odG1sCQorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCAoRlRfT1VUTElORV9DT05UT1VSU19NQVgsCisJRlRfT1VUTElORV9QT0lOVFNfTUFYKTogTmV3IG1hY3JvcyB0byBkZWNsYXJlIHRoZSBtYXhpbXVtCisJdmFsdWVzIG9mIEZUX091dGxpbmUue25fY29udG91cnMsbl9wb2ludHN9LgorCSogc3JjL2Jhc2UvZnRnbG9hZHIuYyAoRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMpOiBDaGVjayB0aGUKKwl0b3RhbCBudW1iZXJzIG9mIHBvaW50cyBhbmQgY29udG91cnMgY2F1c2Ugbm8gb3ZlcmZsb3dzIGluCisJRlRfT3V0bGluZS57bl9jb250b3VycyxuX3BvaW50c30uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaCAoRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCwKKwlGVF9HTFlQSExPQURFUl9DSEVDS19DKTogQ29tcGFyZSB0aGUgbnVtYmVycyBvZiBwb2ludHMgYW5kCisJY29udG91cnMgYXMgdW5zaWduZWQgbG9uZyBudW1iZXIsIGluc3RlYWQgb2Ygc2lnbmVkIGludCwgdG8KKwlwcmV2ZW50IHRoZSBvdmVyZmxvd3Mgb24gMTYtYml0IHN5c3RlbXMuCisKKzIwMDktMDctMDUgIEJyYW0gVGFzc3lucyAgPGJyYW10QGVuZm9jdXMuYmU+CisKKwlJbXByb3ZlIGNvbXBhdGliaWxpdHkgdG8gQWNyb3JlYWQuCisJVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzI2OTQ0LgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzKTogRm9yIG11bHRpcGxlIEdJRCB0bworCXNpbmdsZSBDSUQgbWFwcGluZ3MsIG1ha2UgdGhlIGxvd2VzdCB2YWx1ZSB3aW4uCisKKzIwMDktMDYtMjggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlmdHBhdGVudDogRml4IGEgYnVnIGJ5IHdyb25nIHVzYWdlIG9mIHNlcnZpY2UtPnRhYmxlX2luZm8oKS4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOC0xMi9tc2cwMDAzOS5odG1sCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50Lmg6IEV4dGVuZAorCUZUX1NGTlRfVGFibGVJbmZvRnVuYygpIHRvIHRha2UgbmV3IGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgb2Zmc2V0CisJdG8gdGhlIHNwZWNpZmllZCB0YWJsZS4KKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfdGFibGVfaW5mbyk6IEV4dGVuZCB0byByZXR1cm4gdGhlCisJdGFibGUtb2Zmc2V0IHRvIHRoZSBjYWxsZXIgZnVuY3Rpb24uCisJKiBzcmMvYmFzZS9mdHBhdGVudC5jIChfdHRfY2hlY2tfcGF0ZW50c19pbl90YWJsZSk6IFVzZSBuZXcKKwlzZXJ2aWNlLT50YWJsZV9pbmZvKCkuCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2ZudF9UYWJsZV9JbmZvKTogU3luY2hyb25pemUgdG8gbmV3CisJc2VydmljZS0+dGFibGVfaW5mbygpLgorCisyMDA5LTA2LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXgsIGNmZl0gUHJvdGVjdCBhZ2FpbnN0IG5lc3RlZCBgc2VhYycgY2FsbHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoVDFfRGVjb2RlciksIHNyYy9jZmYvY2ZmZ2xvYWQuaAorCShDRkZfRGVjb2Rlcik6IEFkZCBgc2VhYycgYm9vbGVhbiB2YXJpYWJsZS4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfb3BlcmF0b3Jfc2VhYyksIHNyYy9wc2F1eC90MWRlY29kZS5jCisJKHQxb3BlcmF0b3Jfc2VhYyk6IFVzZSBpdC4KKworMjAwOS0wNi0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVGhpbmtvLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFvcGVyYXRvcl9zZWFjKQorCVtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXTogVGVzdCBmb3IgZXhpc3RlbmNlIG9mIGluY3JlbWVudGFsCisJaW50ZXJmYWNlLgorCisyMDA5LTA2LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRldmVsL2Z0b3B0aW9uLmggW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBEZWZpbmUuCisKKzIwMDktMDYtMjcgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlBZGQgdG9vbHMgdG8gcHJlcHJvY2VzcyB0aGUgc291cmNlIGZpbGVzIGZvciBBdGFyaVNUIFB1cmVDLgorCisJKiBidWlsZHMvYXRhcmkvZGVmbGluZWpvaW5lci5hd2s6IE5ldyBmaWxlIHRvIGZpbHRlciBDIHNvdXJjZSBmaWxlcworCWZvciBicm9rZW4gQyBwcmVwcm9jZXNzb3Igb2YgUHVyZUMgY29tcGlsZXIuCisKKwkqIGJ1aWxkcy9hdGFyaS9nZW4tcHVyZWMtcGF0Y2guc2g6IE5ldyBmaWxlIHRvIGdlbmVyYXRlIGEgcGF0Y2ggc2V0CisJZm9yIFB1cmVDLCBieSB1c2luZyBkZWZsaW5lam9pbmVyLmF3ay4KKworMjAwOS0wNi0yNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUtlZXAgZXhpc3RpbmcgbW9kdWxlcy5jZmcgaW4gdGhlIGJ1aWxkaW5nIHRyZWUuCisKKwkqIGNvbmZpZ3VyZTogSWYgYGNvbmZpZ3VyZScgaXMgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgc291cmNlIHRyZWUsCisJYW4gZXhpc3RpbmcgYG1vZHVsZXMuY2ZnJyBmaWxlIGluIHRoZSBidWlsZCBkaXJlY3Rvcnkgc2hvdWxkIGJlCisJa2VwdCwgbm90IG92ZXJ3cml0dGVuIGJ5IHRoZSB2ZXJzaW9uIGluIHRoZSBzb3VyY2UgdHJlZS4KKworMjAwOS0wNi0yNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpbHRlciAtLXNyY2Rpcj0gb3B0aW9uIGJlZm9yZSBpbnZva2luZyBidWlsZHMvdW5peC9jb25maWd1cmUuCisKKwkqIGNvbmZpZ3VyZTogSWYgYnVpbGRzL3VuaXgvY29uZmlndXJlIGlzIGludm9rZWQgd2l0aCAtLXNyY2RpcgorCW9wdGlvbiwgdGhlIG9wdGlvbiBzaG91bGQgdGFrZSBgYnVpbGRzL3VuaXgnIGRpcmVjdG9yeSBpbnN0ZWFkIG9mCisJdGhlIHRvcCBzb3VyY2UgZGlyZWN0b3J5LiAgVGh1cyB0aGUgY29uZmlndXJlIHNjcmlwdCBpbiB0aGUgdG9wCisJZGlyZWN0b3J5IHNob3VsZCBtb2RpZnkgdGhlIC0tc3JjZGlyPSBvcHRpb24gaWYKKwlgYnVpbGRzL3VuaXgvY29uZmlndXJlJyBpcyBpbnZva2VkLgorCisyMDA5LTA2LTI3ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJSW1wcm92ZSBjb25maWd1cmUucmF3IGZvciBjcm9zcy1idWlsZGluZyBvbiBleGUtc3VmZml4ZWQgc3lzdGVtcy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogRml4IGEgYnVnIGluIHNlZCBzY3JpcHQgdG8gZXh0cmFjdAorCW5hdGl2ZSBzdWZmaXggZm9yIGJpbmFyeSBleGVjdXRhYmxlcywgcGF0Y2ggYnkgUGV0ZXIgQnJlaXRlbmxvaG5lci4KKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNC9tc2cwMDAzNi5odG1sCisKKzIwMDktMDYtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUmVtb3ZlIFRUX1N1YkdseXBoUmVjLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX1N1YkdseXBoUmVjKTogUmVtb3ZlZCwgdW51c2VkLgorCisyMDA5LTA2LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqICovKjogRm9yIHdhcm5pbmcgbWVzc2FnZXMsIHJlcGxhY2UgRlRfRVJST1Igd2l0aCBGVF9UUkFDRTAuCisKKwlGVF9FUlJPUiBpcyBub3cgdXNlZCBvbmx5IGlmIGEgZnVuY3Rpb24gcHJvZHVjZXMgYSBub24temVybyBgZXJyb3InCisJdmFsdWUuCisKKwlGb3JtYXR0aW5nLCBpbXByb3ZpbmcgYW5kIGhhcm1vbml6aW5nIGRlYnVnIHN0cmluZ3MuCisKKzIwMDktMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByb3ZpZGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBiZXR0ZXIuCisKKwkqIHNyYy9iYXNlL2Z0aW5pdC5jIChGVF9Jbml0X0ZyZWVUeXBlKTogRG9uJ3Qgc2V0IHZlcnNpb24gaGVyZQorCWJ1dC4uLgorCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19MaWJyYXJ5KTogSGVyZS4KKworMjAwOS0wNi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVXNlIDE2LjE2IGZvcm1hdCB3aGlsZSBwYXJzaW5nIFR5cGUgMSBjaGFyc3RyaW5ncy4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjY4NjcuCisKKwlQcmV2aW91c2x5LCBvbmx5IGludGVnZXJzIGhhdmUgYmVlbiB1c2VkIHdoaWNoIGNhbiBsZWFkIHRvIHNlcmlvdXMKKwlyb3VuZGluZyBlcnJvcnMuCisKKwlIb3dldmVyLCBmcmFjdGlvbmFsIHZhbHVlcyBhcmUgb25seSB1c2VkIGludGVybmFsbHk7IGFmdGVyIHRoZQorCWNoYXJzdHJpbmdzIChvZiBlaXRoZXIgVHlwZSAxIG9yIDIpIGhhdmUgYmVlbiBwcm9jZXNzZWQsIHRoZQorCXJlc3VsdGluZyBjb29yZGluYXRlcyBnZXQgcm91bmRlZCB0byBpbnRlZ2VycyBjdXJyZW50bHkgLS0gYmVmb3JlCisJYXBwbHlpbmcgc2NhbGluZy4gIFRoaXMgc2hvdWxkIGJlIGZpeGVkOyBhdCB0aGUgc2FtZSB0aW1lIGEgbmV3IGxvYWQKKwlmbGFnIHNob3VsZCBiZSBpbnRyb2R1Y2VkLCB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGgKKwlGVF9MT0FEX05PX1NDQUxFLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBmb250IHVuaXRzIGFyZSByZXR1cm5lZCBpbgorCTE2LjE2IGZvcm1hdC4gIFNpbWlsYXJseSwgdGhlIGluY3JlbWVudGFsIGludGVyZmFjZSBzaG91bGQgYmUKKwlleHRlbmRlZCB0byBhbGxvdyBmcmFjdGlvbmFsIHZhbHVlcyBmb3IgbWV0cmljcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChUMV9CdWlsZGVyUmVjKTogUmVtb3ZlIGBzaGlmdCcKKwlmaWVsZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oIChUMV9IaW50c19TZXRTdGVtRnVuYywKKwlUMV9IaW50c19TZXRTdGVtM0Z1bmMpOiBVc2UgRlRfRml4ZWQgZm9yIGNvb3JkaW5hdGVzLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCSh0MV9idWlsZF9hZGRfcG9pbnQpOiBBbHdheXMgY29udmVydCBmaXhlZCB0byBpbnRlZ2VyLgorCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOgorCVVzZSAxNi4xNiBmb3JtYXQgZXZlcnl3aGVyZSAoZXhjZXB0IGZvciBsYXJnZSBpbnRlZ2VycyBmb2xsb3dlZCBieSBhCisJYGRpdicpLgorCVtDQU5fSEFORExFX05PTl9JTlRFR1JBTF9UMV9PUEVSQU5EU106IFJlbW92ZSAjaWZkZWYgYW5kIGFjdGl2YXRlCisJY29kZSB1bmNvZGl0aW9uYWxseS4KKwlBZGQgc3VwcG9ydCBmb3IgcmFuZG9tIG51bWJlcnMgYW5kIHVwZGF0ZSByZW1haW5pbmcgY29kZQorCWFjY29yZGluZ2x5OyB0aGlzIHNob3VsZCB3b3JrIG5vdy4KKwkodDFfb3BlcmF0b3Jfc2VhYyk6IFVwZGF0ZWQuCisJKiBzcmMvcHNhdXgvcHNocmVjLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCShwc19oaW50c190MXN0ZW0zLCB0MV9oaW50c19zdGVtKTogVXBkYXRlZC4KKworCSogc3JjL2NpZC9jaWRnbG9hZC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KKwkoY2lkX2xvYWRfZ2x5cGgpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXSwKKwkoY2lkX2ZhY2VfY29tcHV0ZV9tYXhfYWR2YW5jZSwgY2lkX3Nsb3RfbG9hZF9nbHlwaCk6IFVwZGF0ZWQuCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdLCAoVDFfR2V0X0FkdmFuY2VzLCBUMV9Mb2FkX0dseXBoKToKKwlVcGRhdGVkLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogVXBkYXRlZC4KKworMjAwOS0wNi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNocmVjLmM6IFVzZSBQU0hfRXJyX09rLgorCisyMDA5LTA2LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDb2RlIGJlYXV0aWZpY2F0aW9uLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKEZUX0lOVF9UT19GSVhFRCk6IFJlbW92ZWQuCisJUmVwbGFjZSBldmVyeXdoZXJlIHdpdGggSU5UX1RPX0ZJWEVELgorCShGVF9GSVhFRF9UT19JTlQpOiBNb3ZlIHRvIC4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoRklYRURfVE9fSU5UKTogSGVyZS4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA5LTA2LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChUMV9CdWlsZGVyUmVjKSwKKwlzcmMvY2ZmL2NmZmdsb2FkLmggKENGRl9CdWlsZGVyKTogUmVtb3ZlIGBsYXN0Jy4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA5LTA2LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIENoZWNrIGxhcmdlIGludGVnZXJzIHdoaWxlIHBhcnNpbmcgY2hhcnN0cmluZ3MuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogTGFyZ2UKKwlpbnRlZ2VycyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgYGRpdicgb3BlcmF0b3IuCisKKzIwMDktMDYtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFJldmVydCBsYXN0IGNoYW5nZS4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IERvIGl0LgorCU5leHQgdGltZSwgZG9uJ3QgY29uZnVzZSBUeXBlIDIgY2hhcnN0cmluZyBvcGNvZGVzIHdpdGggVE9QIERJQ1QKKwl2YWx1ZXMuLi4KKworMjAwOS0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKTogRml4CisJY29tcGlsZXIgd2FybmluZy4KKworMjAwOS0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvY29tcGlsZXIvZ2NjLm1rIChDRkxBR1MpOiBVc2UgLU8zLCBub3QgLU82LgorCisyMDA5LTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBGaXggaGFuZGxpbmcgb2YgcmVzZXJ2ZWQgYnl0ZSAweEZGLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogQWJvcnQgaWYgYnl0ZQorCTB4RkYgaXMgZW5jb3VudGVyZWQuCisKKzIwMDktMDYtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcHJvdmUgZGVidWcgbWVzc2FnZXMgZm9yIFR5cGUxIGNoYXJzdHJpbmdzLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEVtaXQgbmV3bGluZXMKKwlhZnRlciBpbnN0cnVjdGlvbnMuCisJUHJldHRpZnkgb3V0cHV0LgorCisyMDA5LTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNb3JlIGZ0Z3JheSBmaXhlcyBmb3IgRlRfU1RBVElDX1JBU1RFUi4KKwlQcm9ibGVtcyByZXBvcnRlZCBieSBzdXl1QGNvb2VlLmNuLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9tb3ZlX3RvLCBncmF5X3Jhc3Rlcl9yZW5kZXIpOiBVc2UKKwlSQVNfVkFSLgorCisyMDA5LTA2LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOS0wNi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IEIvVyByYXN0ZXJpemF0aW9uIG9mIHN1YmdseXBocyB3aXRoIGRpZmZlcmVudCBkcm9wLW91dCBtb2Rlcy4KKworCU5vcm1hbGx5LCB0aGUgU0NBTk1PREUgaW5zdHJ1Y3Rpb24gKGlmIHByZXNlbnQpIHRvIHNldCB0aGUgZHJvcC1vdXQKKwltb2RlIGluIGEgVHJ1ZVR5cGUgZm9udCBpcyBsb2NhdGVkIGluIHRoZSBgcHJlcCcgdGFibGUgb25seSBhbmQgdGh1cworCXZhbGlkIGZvciBhbGwgZ2x5cGhzLiAgSG93ZXZlciwgdGhlcmUgYXJlIGZvbnRzIGxpa2UgYHBhbGEudHRmJworCXdoaWNoIGFkZGl0aW9uYWxseSBjb250YWluIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gdGhlIGhpbnRpbmcgY29kZSBvZgorCXNvbWUgZ2x5cGhzIChidXQgbm90IGFsbCkuICBBcyBhIHJlc3VsdCBpdCBjYW4gaGFwcGVuIHRoYXQgYQorCWNvbXBvc2l0ZSBnbHlwaCBuZWVkcyBtdWx0aXBsZSBkcm9wLW91dCBtb2RlcyBmb3IgaXRzIHN1YmdseXBocworCXNpbmNlIHRoZSByZW5kZXJpbmcgc3RhdGUgZ2V0cyByZXNldCBmb3IgZWFjaCBzdWJnbHlwaC4KKworCUZyZWVUeXBlIGNvbGxlY3RzIHRoZSBoaW50ZWQgb3V0bGluZXMgZnJvbSBhbGwgc3ViZ2x5cGhzLCB0aGVuIGl0CisJc2VuZHMgdGhlIGRhdGEgdG8gdGhlIHJhc3Rlcml6ZXIuICBJdCBhbHNvIHNlbmRzIHRoZSBkcm9wLW91dCBtb2RlCisJLS0gYWZ0ZXIgaGludGluZyBoYXMgYmVlbiBhcHBsaWVkIC0tIGFuZCBoZXJlIGlzIHRoZSBlcnJvcjogSXQgc2VuZHMKKwl0aGUgZHJvcC1vdXQgbW9kZSBvZiB0aGUgbGFzdCBzdWJnbHlwaCBvbmx5OyBkcm9wLW91dCBtb2RlcyBvZiBhbGwKKwlvdGhlciBzdWJnbHlwaHMgYXJlIGxvc3QuCisKKwlUaGlzIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtOyBpdCBhZGRzIGEgc2Vjb25kLCBhbHRlcm5hdGl2ZQorCW1lY2hhbmlzbSB0byBwYXNzIHRoZSBkcm9wLW91dCBtb2RlOiBGb3IgZWFjaCBjb250b3VyLCB0aGUKKwlyYXN0ZXJpemVyIG5vdyBjaGVja3MgdGhlIGZpcnN0IGB0YWdzJyBhcnJheSBlbGVtZW50LiAgSWYgYml0IDIgaXMKKwlzZXQsIGJpdHMgNS03IGNvbnRhaW4gdGhlIGNvbnRvdXIncyBkcm9wLW91dCBtb2RlLCBvdmVycmlkaW5nIHRoZQorCWdsb2JhbCBkcm9wLW91dCBtb2RlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCAoRlRfQ1VSVkVfVEFHX0hBU19TQ0FOTU9ERSk6IE5ldyBtYWNyby4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfSGludF9HbHlwaCk6IFN0b3JlIGRyb3Atb3V0IG1vZGUgaW4KKwlgdGFnc1swXScuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoRmxvd19VcCwgT3ZlcnNob290X1RvcCwgT3ZlcnNob290X0JvdHRvbSk6CisJVXNlIGJpdHMgMy01IGluc3RlYWQgb2YgMC0yLgorCShOZXdfUHJvZmlsZSk6IFNldCB0aGUgZHJvcC1vdXQgbW9kZSBpbiB0aGUgcHJvZmlsZSdzIGBmbGFncycgZmllbGQuCisJKERlY29tcG9zZV9DdXJ2ZSk6IENoZWNrIGB0YWdzWzBdJyBhbmQgc2V0IGBkcm9wT3V0Q29udHJvbCcgaWYKKwluZWNlc3NhcnkuCisJKFZlcnRpY2FsX1N3ZWVwX0Ryb3AsIEhvcml6b250YWxfU3dlZXBfRHJvcCwKKwlIb3Jpem9udGFsX0dyYXlfU3dlZXBfRHJvcCwgRHJhd19Td2VlcCk6IFVzZSB0aGUgcHJvZmlsZSdzIGRyb3Atb3V0CisJbW9kZS4KKworMjAwOS0wNi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wcm92ZSBzY2FuIGNvbnZlcnNpb24gcnVsZXMgNCBhbmQgNi4KKworCVR3byBuZXcgY29uc3RyYWludHMgYXJlIGludHJvZHVjZWQgdG8gYmV0dGVyIGlkZW50aWZ5IGEgYHN0dWInIC0tIGEKKwljb25jZXB0IHdoaWNoIGlzIG9ubHkgdmFndWVseSBkZXNjcmliZWQgaW4gdGhlIE9wZW5UeXBlCisJc3BlY2lmaWNhdGlvbi4gIFRoZSBvbGQgY29kZSB3YXMgdG9vIHJpZ29yb3VzIGFuZCBzdXBwcmVzc2VkIG1vcmUKKwlwaXhlbCB0aGFuIGl0IHNob3VsZC4KKworCSAgLiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcHJvZmlsZXMgd2l0aCB0aGUgc2NhbmxpbmUgaXMgbGVzcworCSAgICB0aGFuIGEgaGFsZiBwaXhlbC4gIENvZGUgcmVsYXRlZCB0byB0aGlzIHdhcyBhbHJlYWR5IHByZXNlbnQgaW4KKwkgICAgdGhlIHNvdXJjZXMgYnV0IGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQuCisKKwkgIC4gVGhlIGVuZHBvaW50IG9mIHRoZSBvcmlnaW5hbCBjb250b3VyIGZvcm1pbmcgYSBwcm9maWxlIGhhcyBhCisJICAgIGRpc3RhbmNlIChgb3ZlcnNob290JykgbGVzcyB0aGFuIGhhbGYgYSBwaXhlbCB0byB0aGUgc2NhbmxpbmUuCisKKwlOb3RlIHRoYXQgdGhlIHR3byBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgZml4IGFsbW9zdCBhbGwgZGlmZmVyZW5jZXMKKwl0byB0aGUgV2luZG93cyByYXN0ZXJpemVyLCBidXQgc29tZSBwcm9ibGVtYXRpYyBjYXNlcyByZW1haW4uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoT3ZlcnNob290X1RvcCwgT3ZlcnNob290X0JvdHRvbSk6IE5ldworCW1hY3JvcyBmb3IgdGhlIGBmbGFncycgZmllbGQgaW4gdGhlIGBUUHJvZmlsZScgc3RydWN0dXJlLgorCShJU19CT1RUT01fT1ZFUlNIT09ULCBJU19UT1BfT1ZFUlNIT09UKTogTmV3IG1hY3Jvcy4KKwkoTmV3X1Byb2ZpbGUsIEVuZF9Qcm9maWxlKTogUGFzcyBvdmVyc2hvb3QgZmxhZyBhcyBhbiBhcmd1bWVudCBhbmQKKwlzZXQgaXQgYWNjb3JkaW5nbHkuCisJVXBkYXRlIGNhbGxlcnMuCisJKFZlcnRpY2FsX1N3ZWVwX0Ryb3AsIEhvcml6b250YWxfU3dlZXBfRHJvcCk6IEltcGxlbWVudCB0aGUgdHdvIG5ldworCWNvbnN0cmFpbnRzLgorCisyMDA5LTA2LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbmNyZWFzZSBwcmVjaXNpb24gZm9yIEIvVyByYXN0ZXJpemVyLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKFNldF9IaWdoX1ByZWNpc2lvbik6IEFkZCB0d28gbW9yZSBiaXRzIHRvCisJdGhlIHByZWNpc2lvbi4gIFRoaXMgY29ycmVjdHMgcmVuZGVyaW5nIG9mIHNvbWUgc21hbGwgZ2x5cGhzLCBmb3IKKwlleGFtcGxlLCBnbHlwaCBgeGknIGluIHZlcmRhbmEudHRmIGF0IDEzIHBwZW0uICBUZXN0aW5nIHdpdGggZnRiZW5jaAorCW9uIG15IEdOVS9MaW51eCBib3ggSSBkb24ndCBzZWUgYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4KKworMjAwOS0wNi0wOCAgTWljaGFlbCBadWNjaGkgIDxub3R6ZWRAZ21haWwuY29tPgorCisJSGFuZGxlIEZUX1NUUk9LRVJfTElORUNBUF9CVVRULgorCVRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMyNjc1Ny4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoZnRfc3Ryb2tlcl9jYXApOiBJbXBsZW1lbnQgaXQuCisKKzIwMDktMDYtMDcgIEhhcmFsZCBGZXJuZW5nZWwgIDxoYXJyeUBrZGV2ZWxvcC5vcmc+CisKKwlGaXggc29tZSBwb3RlbnRpYWwgb3V0LW9mLW1lbW9yeSBjcmFzaGVzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X2RvbmUpOiBDaGVjayBgc2xvdC0+aW50ZXJuYWwnLgorCSogc3JjL2Jhc2UvZnRzdHJlYW0uYyAoRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSk6IENoZWNrIGBzdHJlYW0nLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX05ld19Db250ZXh0KTogQXZvaWQgZG91YmxlLWZyZWUgb2YKKwlgZXhlYycgaW4gY2FzZSBvZiBmYWlsdXJlLgorCisyMDA5LTA2LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlTaW1wbGlmeSBtYXRoLgorCVN1Z2dlc3RlZCBieSBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgPGFwb2R0ZWxlQGdtYWlsLmNvbT4uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVmVydGljYWxfU3dlZXBfRHJvcCwgSG9yaXpvbnRhbF9Td2VlcF9Ecm9wLAorCUhvcml6b250YWxfR3JheV9Td2VlcF9Ecm9wKTogRG8gaXQuCisKKzIwMDktMDYtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByZXBhcmF0aW9uIGZvciBmaXhpbmcgc2NhbiBjb252ZXJzaW9uIHJ1bGVzIDQgYW5kIDYuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVEZsb3cpOiBSZXBsYWNlIGVudW1lcmF0aW9uIHdpdGguLi4KKwkoRmxvd19VcCk6IFRoaXMgbWFjcm8uCisJKFRQcm9maWxlKTogUmVwbGFjZSBgZmxvdycgbWVtYmVyIHdpdGggYGZsYWdzJyBiaXQgZmllbGQuCisJVXBkYXRlIGFsbCBhZmZlY3RlZCBjb2RlLgorCisyMDA5LTA1LTI5ICBKYW1lcyBDbG9vcyAgPGNsb29zQGpoY2xvb3MuY29tPgorCisJRW5hYmxlIGF1dG9oaW50aW5nIGZvciBnbHlwaHMgcm90YXRlZCBieSBtdWx0aXBsZXMgb2YgOTDCsC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBBbHRlciBjaGVjayBmb3IgcGVybWl0dGVkCisJbWF0cmljZXMgdG8gYWxsb3cgcm90YXRpb25zIGJ5IG11bHRpcGxlcyBvZiA5MMKwLCBub3Qgb25seSB1bnJvdGF0ZWQsCisJcG9zc2libHkgc2xhbnRlZCBtYXRyaWNlcy4KKworMjAwOS0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisJUmVwb3J0ZWQgYnkgS3J6eXN6dG9mIEtvd2FsY3p5ayA8a2tvd2FsY3p5a0BnbWFpbC5jb20+LgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfaGludF9lZGdlcyk6IE1vdmUgZGVjbGFyYXRpb24gb2YKKwlgbl9lZGdlcycgaW50byBgI2lmJyBibG9jay4KKworMjAwOS0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBjb21waWxhdGlvbiB3b3JrIHdpdGggRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiBub3QgZGVmaW5lZC4KKwlSZXBvcnRlZCBieSBLcnp5c3p0b2YgS293YWxjenlrIDxra293YWxjenlrQGdtYWlsLmNvbT4uCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0ZhY2VfSW5pdCkgWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCXToKKwlNYWtlIGl0IHdvcmsuCisJU2ltcGxpZnkgI2lmZGVmIGxvZ2ljLgorCisyMDA5LTA1LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbXByb3ZlIGIvdyByYXN0ZXJpemVyLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgS3J6eXN6dG9mIEtvdGxlbmdhIDxwb2Nla0B1c2Vycy5zZi5uZXQ+LgorCisJKiBzcmMvcmFzdGVyL3Jhc3Rlci5jIChWZXJ0aWNhbF9Td2VlcF9Ecm9wLCBIb3Jpem9udGFsX1N3ZWVwX0Ryb3AsCisJSG9yaXpvbnRhbF9HcmF5X1N3ZWVwX0Ryb3ApOiBGb3Igc21hcnQgZHJvcC1vdXQgbW9kZSwgaWYKKwlpbnRlcnNlY3Rpb25zIGFyZSBlcXVhbGx5IGRpc3RhbnQgcmVsYXRpdmUgdG8gbmV4dCBwaXhlbCBjZW50ZXIsCisJc2VsZWN0IHRoZSBsZWZ0IHBpeGVsLCBub3QgdGhlIHJpZ2h0IG9uZS4KKworMjAwOS0wNS0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjY2MDAuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX2xvYWRfa2V5d29yZCk6IEhhbmRsZQorCVQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkEuCisKKzIwMDktMDQtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCURvY3VtZW50IHJlY2VudCBjaGFuZ2VzIHRvIGZ0dmlldy4KKworCSogZG9jcy9DSEFOR0VTOiBEbyBpdC4KKworMjAwOS0wNC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJYXV0b2hpbnRlcjogRG9uJ3QgY2hhbmdlIGRpZ2l0IHdpZHRocyBpZiBhbGwgd2lkdGhzIGFyZSB0aGUgc2FtZS4KKwlUaGlzIGZpeGVzIEZyZWVEZXNrdG9wIGJ1ZyAjMjExOTcuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKEFGX0RJR0lUKTogTmV3IG1hY3JvLgorCShhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zY3JpcHRfY292ZXJhZ2UpOiBNYXJrIEFTQ0lJIGRpZ2l0cyBpbgorCWBnbHlwaF9zY3JpcHRzJyBhcnJheS4KKwkoYWZfZmFjZV9nbG9iYWxzX2dldF9tZXRyaWNzKTogVXBkYXRlZC4KKwkoYWZfZmFjZV9nbG9iYWxzX2lzX2RpZ2l0KTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaDogVXBkYXRlZC4KKwkoQUZfU2NyaXB0TWV0cmljc1JlYyk6IEFkZCBgZGlnaXRzX2hhdmVfc2FtZV93aWR0aCcgZmxhZy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jOiBJbmNsdWRlIEZUX0FEVkFOQ0VTX0guCisJKGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKTogTmV3IGZ1bmN0aW9uLgorCShhZl9sYXRpbl9tZXRyaWNzX2luaXQpOiBVc2UgaXQuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmg6IFVwZGF0ZWQuCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19pbml0KTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYzogU2ltaWxhciBjaGFuZ2VzIGFzIHdpdGggYWZsYXRpbi5jLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogVGVzdCBkaWdpdCB3aWR0aC4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwOS0wNC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBmdGdyYXlzIGNvbXBpbGUgd2l0aCBfU1RBTkRBTE9ORV8gYW5kIEZUX1NUQVRJQ19SQVNURVIgYWdhaW4uCisJUHJvYmxlbXMgcmVwb3J0ZWQgYnkgc3V5dUBjb29lZS5jbi4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTLAorCUZUX0RFRklORV9SQVNURVJfRlVOQ1MpIFtfU1RBTkRBTE9ORV9dOiBEZWZpbmUuCisJWyFfU1RBTkRBTE9ORV9dOiBJbmNsdWRlIGZ0c3BpYy5oIG9ubHkgaGVyZS4KKwkocmFzKTogRGVmaW5lL2RlY2xhcmUgYWZ0ZXIgZGVmaW5pdGlvbiBvZiBgVFdvcmtlcicuCisJVXNlIGBSQVNfVkFSXycgd2hlcmUgbmVjZXNzYXJ5LgorCisyMDA5LTA0LTIxICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgorCisJRml4IEFDX0NIRUNLX0ZUMi4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00OiBPbmx5IGNoZWNrIFBBVEggZm9yIGZyZWV0eXBlLWNvbmZpZyBpZgorCXdlIGRpZCBub3QgYWxyZWFkeSBmaW5kIGl0IGZyb20gYSBwcmVmaXggb3B0aW9uLgorCisyMDA5LTA0LTA1ICBPcmFuIEFncmEgIDxvcmFuQG1vbmZvcnQuY28uaWw+CisKKwlBZGQgI2Vycm9yIHRvIG1vZHVsZXMgYW5kIGZpbGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDIHlldC4KKworCVdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCB0aGUgZm9sbG93aW5nIGZpbGVzIHdpbGwKKwljcmVhdGUgI2Vycm9yOgorCSogc3JjL2JkZi9iZGZkcml2ci5oCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYworCSogc3JjL2NpZC9jaWRyaXZlci5oCisJKiBzcmMvZ3h2YWxpZC9neHZtb2QuaAorCSogc3JjL2d6aXAvZnRnemlwLmMKKwkqIHNyYy9sencvZnRsencuYworCSogc3JjL290dmFsaWQvb3R2bW9kLmgKKwkqIHNyYy9wY2YvcGNmZHJpdnIuaAorCSogc3JjL3Bmci9wZnJkcml2ci5oCisJKiBzcmMvcHNhdXgvcHNhdXhtb2QuaAorCSogc3JjL3R5cGUxL3QxZHJpdmVyLmgKKwkqIHNyYy90eXBlNDIvdDQyZHJpdnIuaAorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5oCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCVBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykgc3VwcG9ydCBpbiBhdXRvZml0IG1vZHVsZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oIGFkZCBtYWNyb3MgdG8gaW5pdAorCWluc3RhbmNlcyBvZiBGVF9BdXRvSGludGVyX1NlcnZpY2VSZWMuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmggZGVjbGFyZSBhdXRvZml0X21vZHVsZV9jbGFzcworCXVzaW5nIG1hY3JvcyBmcm9tIGZ0bW9kYXBpLmgsCisJd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGNyZWF0ZSBhbmQgZGVzdHJveQorCWZ1bmN0aW9ucyB3aWxsIGJlIGRlY2xhcmVkLgorCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwlhZl9hdXRvZml0dGVyX3NlcnZpY2UgYW5kIGF1dG9maXRfbW9kdWxlX2NsYXNzIHN0cnVjdHMKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gYWZwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlbS4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIGFkZCBtYWNyb3MgdG8gaW5pdCBhbmQgZGVjbGFyZQorCWluc3RhbmNlcyBvZiBBRl9TY3JpcHRDbGFzc1JlYy4KKworCSogc3JjL2F1dG9maXQvYWZjamsuaCBkZWNsYXJlIGFmX2Nqa19zY3JpcHRfY2xhc3MKKwl1c2luZyBtYWNyb3MgZnJvbSBhZnR5cGVzLmgsCisJd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGluaXQgZnVuY3Rpb24gd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJYWZfY2prX3NjcmlwdF9jbGFzcyBzdHJ1Y3Qgd2lsbCBoYXZlIGZ1bmN0aW9uIHRvIGluaXQgaXQgaW5zdGVhZCBvZgorCWJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmR1bW15LmggZGVjbGFyZSBhZl9kdW1teV9zY3JpcHRfY2xhc3MKKwl1c2luZyBtYWNyb3MgZnJvbSBhZnR5cGVzLmgsCisJd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGluaXQgZnVuY3Rpb24gd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9hdXRvZml0L2FmZHVtbXkuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwlhZl9kdW1teV9zY3JpcHRfY2xhc3Mgc3RydWN0IHdpbGwgaGF2ZSBmdW5jdGlvbiB0byBpbml0IGl0IGluc3RlYWQgb2YKKwliZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZS4KKworCSogc3JjL2F1dG9maXQvYWZpbmRpYy5oIGRlY2xhcmUgYWZfaW5kaWNfc2NyaXB0X2NsYXNzCisJdXNpbmcgbWFjcm9zIGZyb20gYWZ0eXBlcy5oLAorCXdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBpbml0IGZ1bmN0aW9uIHdpbGwgYmUgZGVjbGFyZWQuCisJKiBzcmMvYXV0b2ZpdC9hZmluZGljLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJYWZfaW5kaWNfc2NyaXB0X2NsYXNzIHN0cnVjdCB3aWxsIGhhdmUgZnVuY3Rpb24gdG8gaW5pdCBpdCBpbnN0ZWFkIG9mCisJYmVpbmcgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaCBkZWNsYXJlIGFmX2xhdGluX3NjcmlwdF9jbGFzcworCXVzaW5nIG1hY3JvcyBmcm9tIGFmdHlwZXMuaCwKKwl3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgaW5pdCBmdW5jdGlvbiB3aWxsIGJlIGRlY2xhcmVkLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCWFmX2xhdGluX3NjcmlwdF9jbGFzcyBzdHJ1Y3Qgd2lsbCBoYXZlIGZ1bmN0aW9uIHRvIGluaXQgaXQgaW5zdGVhZCBvZgorCWJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUNoYW5nZSBhZl9sYXRpbl9ibHVlX2NoYXJzIHRvIGJlIFBJQy1jb21wYXRpYmxlIGJ5IGJlaW5nIGEgdHdvCisJZGltZW50aW9uYWwgYXJyYXkgcmF0aGVyIHRoYW4gYXJyYXkgb2YgcG9pbnRlcnMuCisKKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuaCBkZWNsYXJlIGFmX2xhdGluMl9zY3JpcHRfY2xhc3MKKwl1c2luZyBtYWNyb3MgZnJvbSBhZnR5cGVzLmgsCisJd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGluaXQgZnVuY3Rpb24gd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJYWZfbGF0aW4yX3NjcmlwdF9jbGFzcyBzdHJ1Y3Qgd2lsbCBoYXZlIGZ1bmN0aW9uIHRvIGluaXQgaXQgaW5zdGVhZCBvZgorCWJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUNoYW5nZSBhZl9sYXRpbjJfYmx1ZV9jaGFycyB0byBiZSBQSUMtY29tcGF0aWJsZSBieSBiZWluZyBhIHR3bworCWRpbWVudGlvbmFsIGFycmF5IHJhdGhlciB0aGFuIGFycmF5IG9mIHBvaW50ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCWFmX3NjcmlwdF9jbGFzc2VzIGFycmF5IGluaXRpYWxpemF0aW9uIHdhcyBtb3ZlZCB0byBhZnBpYy5jIGFuZAorCWlzIGxhdGVyIHJlZmVyZWQgdXNpbmcgbWFjcm9zIGRlZmVpbmVkIGluIGFmcGljLmguCisKKwlOZXcgRmlsZXM6CisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIGF1dG9maXQKKwltb2R1bGUgYW5kIG1hY3JvcyB0byBhY2Nlc3MgdGhlbS4KKwkqIHNyYy9hdXRvZml0L2FmcGljLmMgaW1wbGVtZW50IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSwgZGVzdHJveSBhbmQKKwlpbml0aWFsaXplIFBJQyBnbG9iYWxzIGZvciBhdXRvZml0IG1vZHVsZS4KKworCSogc3JjL2F1dG9maXQvYXV0b2ZpdC5jIGFkZCBuZXcgZmlsZSB0byBidWlsZDogYWZwaWMuYy4KKwkqIHNyYy9hdXRvZml0L2phbWZpbGUgYWRkIG5ldyBmaWxlcyB0byBGVDJfTVVMVEkgYnVpbGQ6IGFmcGljLmMuCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCVBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykgc3VwcG9ydCBpbiBwc2hpbnRlciBtb2R1bGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oIGFkZCBtYWNyb3MgdG8gaW5pdAorCWluc3RhbmNlcyBvZiBQU0hpbnRlcl9JbnRlcmZhY2UuCisKKwkqIHNyYy9wc2hpbnRlci9wc2htb2QuaCBkZWNsYXJlIHBzaGludGVyX21vZHVsZV9jbGFzcworCXVzaW5nIG1hY3JvcyBmcm9tIGZ0bW9kYXBpLmgsCisJd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGNyZWF0ZSBhbmQgZGVzdHJveQorCWZ1bmN0aW9ucyB3aWxsIGJlIGRlY2xhcmVkLgorCSogc3JjL3BzaGludGVyL3BzaG1vZC5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCXBzaGludGVyX2ludGVyZmFjZSBhbmQgcHNoaW50ZXJfbW9kdWxlX2NsYXNzIHN0cnVjdHMKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gcHNocGljLmggaW4gb3JkZXIgdG8gYWNjZXNzIHRoZW0uCisKKwlOZXcgRmlsZXM6CisJKiBzcmMvcHNoaW50ZXIvcHNocGljLmggZGVjbGFyZSBzdHJ1Y3QgdG8gaG9sZCBQSUMgZ2xvYmFscyBmb3IgcHNoaW50ZXIKKwltb2R1bGUgYW5kIG1hY3JvcyB0byBhY2Nlc3MgdGhlbS4KKwkqIHNyYy9wc2hpbnRlci9wc2hwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIHBzaGludGVyIG1vZHVsZS4KKworCSogc3JjL3BzaGludGVyL3BzaGludGVyLmMgYWRkIG5ldyBmaWxlIHRvIGJ1aWxkOiBwc2hwaWMuYy4KKwkqIHNyYy9wc2hpbnRlci9qYW1maWxlIGFkZCBuZXcgZmlsZXMgdG8gRlQyX01VTFRJIGJ1aWxkOiBwc2hwaWMuYy4KKworMjAwOS0wNC0wNSAgT3JhbiBBZ3JhICA8b3JhbkBtb25mb3J0LmNvLmlsPgorCisJUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKSBzdXBwb3J0IGluIHBzbmFtZXMgbW9kdWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIEZUX1NlcnZpY2VfUHNDTWFwc1JlYy4KKworCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBkZWNsYXJlIHBzbmFtZXNfbW9kdWxlX2NsYXNzCisJdXNpbmcgbWFjcm9zIGZyb20gZnRtb2RhcGkuaCwKKwl3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgY3JlYXRlIGFuZCBkZXN0cm95CisJZnVuY3Rpb25zIHdpbGwgYmUgZGVjbGFyZWQuCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCXBzY21hcHNfaW50ZXJmYWNlIGFuZCBwc2NtYXBzX3NlcnZpY2VzIHN0cnVjdHMKKwlhbmQgcHNuYW1lc19tb2R1bGVfY2xhc3MgYXJyYXkKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gcHNwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlbS4KKworCU5ldyBGaWxlczoKKwkqIHNyYy9wc25hbWVzL3BzcGljLmggZGVjbGFyZSBzdHJ1Y3QgdG8gaG9sZCBQSUMgZ2xvYmFscyBmb3IgcHNuYW1lcworCW1vZHVsZSBhbmQgbWFjcm9zIHRvIGFjY2VzcyB0aGVtLgorCSogc3JjL3BzbmFtZXMvcHNwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIHBzbmFtZXMgbW9kdWxlLgorCisJKiBzcmMvcHNuYW1lcy9wc25hbWVzLmMgYWRkIG5ldyBmaWxlIHRvIGJ1aWxkOiBwc3BpYy5jLgorCSogc3JjL3BzbmFtZXMvamFtZmlsZSBhZGQgbmV3IGZpbGVzIHRvIEZUMl9NVUxUSSBidWlsZDogcHNwaWMuYy4KKworMjAwOS0wNC0wNSAgT3JhbiBBZ3JhICA8b3JhbkBtb25mb3J0LmNvLmlsPgorCisJUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKSBzdXBwb3J0IGluIHJhc3RlciByZW5kZXJlci4KKworCSogc3JjL3Jhc3Rlci9mdHJlbmQxLmggZGVjbGFyZSBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzCisJYW5kIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3MKKwl1c2luZyBtYWNyb3MgZnJvbSBmdHJlbmRlci5oLAorCXdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBjcmVhdGUgYW5kIGRlc3Ryb3kKKwlmdW5jdGlvbnMgd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9zbW9vdGgvZnRyZW5kMS5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCWZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3MgYW5kIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3Mgc3RydWN0cworCXdpbGwgaGF2ZSBmdW5jdGlvbnMgdG8gaW5pdCBvciBjcmVhdGUgYW5kIGRlc3Ryb3kgdGhlbQorCWluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUuCisJTWFjcm9zIHdpbGwgYmUgdXNlZCBmcm9tIHJhc3RwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MKKwlmdF9zdGFuZGFyZF9yYXN0ZXIgZnJvbSB0aGUgcGljX2NvbnRhaW5lciAoYWxsb2NhdGVkIGluIGZ0cmFzdGVyLmMpLgorCUluIGZ0X3Jhc3RlcjFfcmVuZGVyIHdoZW4gUElDIGlzIGVuYWJsZWQsIHRoZSBsYXN0IGxldHRlciBvZgorCW1vZHVsZV9uYW1lIGlzIHVzZWQgdG8gdmVyZnkgdGhlIHJlbmRlcmVyIGNsYXNzIHJhdGhlciB0aGFuIHRoZQorCWNsYXNzIHBvaW50ZXIuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwlmdF9zdGFuZGFyZF9yYXN0ZXIgc3RydWN0IHdpbGwgaGF2ZSBmdW5jdGlvbiB0byBpbml0IGl0CisJaW5zdGVhZCBvZiBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZS4KKworCU5ldyBGaWxlczoKKwkqIHNyYy9yYXN0ZXIvcmFzdHBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIHJhc3RlcgorCXJlbmRlcmVyIGFuZCBtYWNyb3MgdG8gYWNjZXNzIHRoZW0uCisJKiBzcmMvcmFzdGVyL3Jhc3RwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIHJhc3RlciByZW5kZXJlci4KKworCSogc3JjL3Jhc3Rlci9yYXN0ZXIuYyBhZGQgbmV3IGZpbGUgdG8gYnVpbGQ6IHJhc3RwaWMuYy4KKwkqIHNyYy9yYXN0ZXIvamFtZmlsZSBhZGQgbmV3IGZpbGVzIHRvIEZUMl9NVUxUSSBidWlsZDogcmFzdHBpYy5jLgorCisyMDA5LTA0LTA1ICBPcmFuIEFncmEgIDxvcmFuQG1vbmZvcnQuY28uaWw+CisKKwlQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUMpIHN1cHBvcnQgaW4gc21vb3RoIHJlbmRlcmVyLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmggZGVjbGFyZSBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MsCisJZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyBhbmQgZnRfc21vb3RoX2xjZF92X3JlbmRlcmVyX2NsYXNzCisJdXNpbmcgbWFjcm9zIGZyb20gZnRyZW5kZXIuaCwKKwl3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgY3JlYXRlIGFuZCBkZXN0cm95CisJZnVuY3Rpb25zIHdpbGwgYmUgZGVjbGFyZWQuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJdGhlIGZvbGxvd2luZyBzdHJ1Y3RzOgorCWZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcworCWFuZCBmdF9zbW9vdGhfbGNkX3ZfcmVuZGVyZXJfY2xhc3MKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gZnRzcGljLmggaW4gb3JkZXIgdG8gYWNjZXNzCisJZnRfZ3JheXNfcmFzdGVyIGZyb20gdGhlIHBpY19jb250YWluZXIgKGFsbG9jYXRlZCBpbiBmdGdyYXlzLmMpLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuaCBpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBOT1QgZGVmaW5lZAorCWZ1bmNfaW50ZXJmYWNlIHdhcyBtb3ZlZCBmcm9tIGdyYXlfY29udmVydF9nbHlwaF9pbm5lciBmdW5jdGlvbgorCXRvIHRoZSBnbG9iYWwgc2NvcGUuCisJV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJZnVuY19pbnRlcmZhY2UgYW5kIGZ0X2dyYXlzX3Jhc3RlciBzdHJ1Y3RzCisJd2lsbCBoYXZlIGZ1bmN0aW9ucyB0byBpbml0IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBmdW5jX2ludGVyZmFjZSB3aWxsIGJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgb2YKKwlncmF5X2NvbnZlcnRfZ2x5cGhfaW5uZXIuCisKKwlOZXcgRmlsZXM6CisJKiBzcmMvc21vb3RoL2Z0c3BpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIHNtb290aAorCXJlbmRlcmVyIGFuZCBtYWNyb3MgdG8gYWNjZXNzIHRoZW0uCisJKiBzcmMvc21vb3RoL2Z0c3BpYy5jIGltcGxlbWVudCBmdW5jdGlvbnMgdG8gYWxsb2NhdGUsIGRlc3Ryb3kgYW5kCisJaW5pdGlhbGl6ZSBQSUMgZ2xvYmFscyBmb3Igc21vb3RoIHJlbmRlcmVyLgorCisJKiBzcmMvc21vb3RoL3Ntb290aC5jIGFkZCBuZXcgZmlsZSB0byBidWlsZDogZnRzcGljLmMuCisJKiBzcmMvc21vb3RoL2phbWZpbGUgYWRkIG5ldyBmaWxlcyB0byBGVDJfTVVMVEkgYnVpbGQ6IGZ0c3BpYy5jLgorCisyMDA5LTA0LTA1ICBPcmFuIEFncmEgIDxvcmFuQG1vbmZvcnQuY28uaWw+CisKKwlQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUMpIHN1cHBvcnQgaW4gY2ZmIGRyaXZlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oIGFkZCBtYWNyb3MgdG8gaW5pdAorCWluc3RhbmNlcyBvZiBGVF9TZXJ2aWNlX0NJRFJlYy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaCBhZGQgbWFjcm9zIHRvIGluaXQKKwlpbnN0YW5jZXMgb2YgRlRfU2VydmljZV9Qc0luZm9SZWMuCisKKwkqIHNyYy9jZmYvY2ZmY21hcC5oIGRlY2xhcmUgY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjCisJYW5kIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjIHVzaW5nIG1hY3JvcyBmcm9tCisJZnRvYmpzLmgsIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBjcmVhdGUgYW5kIGRlc3Ryb3kKKwlmdW5jdGlvbnMgd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9jZmYvY2ZmY21hcC5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCXRoZSBmb2xsb3dpbmcgc3RydWN0czoKKwljZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMgYW5kIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjCisJd2lsbCBoYXZlIGZ1bmN0aW9ucyB0byBpbml0IG9yIGNyZWF0ZSBhbmQgZGVzdHJveSB0aGVtCisJaW5zdGVhZCBvZiBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5oIGRlY2xhcmUgY2ZmX2RyaXZlcl9jbGFzcyB1c2luZyBtYWNyb3MgZnJvbQorCWZ0ZHJpdmVyLmgsIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBjcmVhdGUgYW5kIGRlc3Ryb3kKKwlmdW5jdGlvbnMgd2lsbCBiZSBkZWNsYXJlZC4KKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwl0aGUgZm9sbG93aW5nIHN0cnVjdHM6CisJY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCwgY2ZmX3NlcnZpY2VfcHNfaW5mbywgY2ZmX3NlcnZpY2VfcHNfbmFtZQorCWNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8sIGNmZl9zZXJ2aWNlX2NpZF9pbmZvLCBjZmZfZHJpdmVyX2NsYXNzLAorCWFuZCBjZmZfc2VydmljZXMgYXJyYXkKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gY2ZmcGljLmggaW4gb3JkZXIgdG8gYWNjZXNzIHRoZW0KKwlmcm9tIHRoZSBwaWNfY29udGFpbmVyLgorCVVzZSBtYWNyb3MgZnJvbSBjZmZwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlCisJc3RydWN0cyBhbGxvY2F0ZWQgaW4gY2ZmY21hcC5jCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIFVzZSBtYWNyb3MgZnJvbSBjZmZwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlCisJc3RydWN0cyBhbGxvY2F0ZWQgaW4gY2ZmY21hcC5jCisKKwkqIHNyYy9jZmYvcGFyc2VyLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJaW1wbGVtZW50IGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY2ZmX2ZpZWxkX2hhbmRsZXJzIGFycmF5CisJaW5zdGVhZCBvZiBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZS4KKwlBbmQgbWFjcm9zIHdpbGwgYmUgdXNlZCBmcm9tIGNmZnBpYy5oIGluIG9yZGVyIHRvIGFjY2VzcyBpdAorCWZyb20gdGhlIHBpY19jb250YWluZXIuCisKKwlOZXcgRmlsZXM6CisJKiBzcmMvY2ZmL2NmZnBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIGNmZgorCWRyaXZlciBhbmQgbWFjcm9zIHRvIGFjY2VzcyB0aGVtLgorCSogc3JjL2NmZi9jZmZwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIGNmZiBkcml2ZXIuCisKKwkqIHNyYy9jZmYvY2ZmLmMgYWRkIG5ldyBmaWxlIHRvIGJ1aWxkOiBjZmZwaWMuYy4KKwkqIHNyYy9jZmYvamFtZmlsZSBhZGQgbmV3IGZpbGVzIHRvIEZUMl9NVUxUSSBidWlsZDogY2ZmcGljLmMuCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCVBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykgc3VwcG9ydCBpbiBzZm50IGRyaXZlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oIGFkZCBtYWNyb3MgdG8gaW5pdAorCWluc3RhbmNlcyBvZiBGVF9TZXJ2aWNlX0JERlJlYy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBhZGQgbWFjcm9zIHRvIGluaXQKKwlpbnN0YW5jZXMgb2YgRlRfU2VydmljZV9HbHlwaERpY3RSZWMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZVJlYy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaCBhZGQgbWFjcm9zIHRvIGluaXQKKwlpbnN0YW5jZXMgb2YgRlRfU2VydmljZV9UVENNYXBzUmVjLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIFNGTlRfSW50ZXJmYWNlLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5oIGRlY2xhcmUgc2ZudF9tb2R1bGVfY2xhc3MgdXNpbmcgbWFjcm9zIGZyb20KKwlmdG1vZGFwaS5oLCB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgY3JlYXRlIGFuZCBkZXN0cm95CisJZnVuY3Rpb25zIHdpbGwgYmUgZGVjbGFyZWQuCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIHdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZAorCXRoZSBmb2xsb3dpbmcgc3RydWN0czoKKwlzZm50X3NlcnZpY2Vfc2ZudF90YWJsZSwgc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QsIHNmbnRfc2VydmljZV9wc19uYW1lCisJdHRfc2VydmljZV9nZXRfY21hcF9pbmZvLCBzZm50X3NlcnZpY2VfYmRmLCBzZm50X2ludGVyZmFjZSwKKwlzZm50X21vZHVsZV9jbGFzcywgYW5kIHNmbnRfc2VydmljZXMgYXJyYXkKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gc2ZudHBpYy5oIGluIG9yZGVyIHRvIGFjY2VzcyB0aGVtCisJZnJvbSB0aGUgcGljX2NvbnRhaW5lci4KKworCSogc3JjL3NmbnQvdHRjbWFwLmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIFRUX0NNYXBfQ2xhc3NSZWMuCisJKiBzcmMvc2ZudC90dGNtYXAuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwl0aGUgZm9sbG93aW5nIHN0cnVjdHM6CisJdHRfY21hcDBfY2xhc3NfcmVjLCB0dF9jbWFwMl9jbGFzc19yZWMsIHR0X2NtYXA0X2NsYXNzX3JlYworCXR0X2NtYXA2X2NsYXNzX3JlYywgdHRfY21hcDhfY2xhc3NfcmVjLCB0dF9jbWFwMTBfY2xhc3NfcmVjLAorCXR0X2NtYXAxMl9jbGFzc19yZWMsIHR0X2NtYXAxNF9jbGFzc19yZWMgYW5kIHR0X2NtYXBfY2xhc3NlcyBhcnJheQorCXdpbGwgaGF2ZSBmdW5jdGlvbnMgdG8gaW5pdCBvciBjcmVhdGUgYW5kIGRlc3Ryb3kgdGhlbQorCWluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUuCisJQW5kIG1hY3JvcyB3aWxsIGJlIHVzZWQgZnJvbSBzZm50cGljLmggaW4gb3JkZXIgdG8gYWNjZXNzIHRoZW0KKwlmcm9tIHRoZSBwaWNfY29udGFpbmVyLgorCVRoZSBjb250ZW50IG9mIHR0X2NtYXBfY2xhc3NlcyBpcyBub3cgZGVzY3JpYmVkIGluIHRoZQorCW5ldyBmaWxlICd0dGNtYXBjLmgnLgorCisJTmV3IEZpbGVzOgorCSogc3JjL3NmbnQvc2ZudHBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIHNmbnQKKwlkcml2ZXIgYW5kIG1hY3JvcyB0byBhY2Nlc3MgdGhlbS4KKwkqIHNyYy9zZm50L3NmbnRwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIHNmbnQgZHJpdmVyLgorCSogc3JjL3NmbnQvdHRjbWFwYy5oIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YKKwl0dF9jbWFwX2NsYXNzZXMgYWxsb2NhdGVkIGluIHR0Y21hcC5jCisKKwkqIHNyYy9zZm50L3NmbnQuYyBhZGQgbmV3IGZpbGUgdG8gYnVpbGQ6IHNmbnRwaWMuYy4KKwkqIHNyYy9zZm50L2phbWZpbGUgYWRkIG5ldyBmaWxlcyB0byBGVDJfTVVMVEkgYnVpbGQ6IHNmbnRwaWMuYy4KKworMjAwOS0wNC0wNSAgT3JhbiBBZ3JhICA8b3JhbkBtb25mb3J0LmNvLmlsPgorCisJUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKSBzdXBwb3J0IGluIHRydWV0eXBlIGRyaXZlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggYWRkIG1hY3JvcyB0byBpbml0CisJaW5zdGFuY2VzIG9mIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oIGFkZCBtYWNyb3MgdG8gaW5pdAorCWluc3RhbmNlcyBvZiBGVF9TZXJ2aWNlX1RUR2x5ZlJlYy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmggZGVjbGFyZSB0dF9kcml2ZXJfY2xhc3MgdXNpbmcgbWFjcm9zIGZyb20KKwlmdGRyaXZlci5oLCB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgY3JlYXRlIGFuZCBkZXN0cm95CisJZnVuY3Rpb25zIHdpbGwgYmUgZGVjbGFyZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKKwl0aGUgZm9sbG93aW5nIHN0cnVjdHM6CisJdHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzLCB0dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYsIHR0X2RyaXZlcl9jbGFzcworCWFuZCB0dF9zZXJ2aWNlcyBhcnJheSwKKwl3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXQgb3IgY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KKwlpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCUFuZCBtYWNyb3Mgd2lsbCBiZSB1c2VkIGZyb20gdHRwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlbQorCWZyb20gdGhlIHBpY19jb250YWluZXIuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgY2hhbmdlIHRyaWNrX25hbWVzIGFycmF5IHRvIGJlCisJUElDLWNvbXBhdGlibGUgYnkgYmVpbmcgYSB0d28gZGltZW50aW9uYWwgYXJyYXkgcmF0aGVyIHRoYW4gYXJyYXkKKwlvZiBwb2ludGVycy4KKworCU5ldyBGaWxlczoKKwkqIHNyYy90cnVldHlwZS90dHBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIHRydWV0eXBlCisJZHJpdmVyIGFuZCBtYWNyb3MgdG8gYWNjZXNzIHRoZW0uCisJKiBzcmMvdHJ1ZXR5cGUvdHRwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlLCBkZXN0cm95IGFuZAorCWluaXRpYWxpemUgUElDIGdsb2JhbHMgZm9yIHRydWV0eXBlIGRyaXZlci4KKworCSogc3JjL3RydWV0eXBlL3RydWV0eXBlLmMgYWRkIG5ldyBmaWxlIHRvIGJ1aWxkOiB0dHBpYy5jLgorCSogc3JjL3RydWV0eXBlL2phbWZpbGUgYWRkIG5ldyBmaWxlcyB0byBGVDJfTVVMVEkgYnVpbGQ6IHR0cGljLmMuCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCVBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykgc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmUgaW4gYmFzZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCBhZGQgRlRfQ09ORklHX09QVElPTl9QSUMKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggQWRkIHBpY19jb250YWluZXIgbWVtYmVyIHRvCisJRlRfTGlicmFyeVJlYy4KKwlBZGQgbWFjcm9zIHRvIGRlY2xhcmUgYW5kIGluaXQgaW5zdGFuY2VzIG9mIEZUX0NNYXBfQ2xhc3NSZWMuCisJQWRkIG1hY3JvcyB0byBpbml0IGluc3RhbmNlcyBvZiBGVF9PdXRsaW5lX0Z1bmNzIGFuZCBGVF9SYXN0ZXJfRnVuY3MuCisJQWRkIG1hY3JvcyB0byBkZWNsYXJlLCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBtb2R1bGVzCisJKEZUX01vZHVsZV9DbGFzcykuCisJQWRkIG1hY3JvcyB0byBkZWNsYXJlLCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZW5kZXJlcnMKKwkoRlRfUmVuZGVyZXJfQ2xhc3MpLgorCUFkZCBtYWNybyB0byBpbml0IGluc3RhbmNlcyBvZiBGVF9HbHlwaF9DbGFzcy4KKwlBZGQgbWFjcm9zIHRvIGRlY2xhcmUsIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRyaXZlcnMKKwkoRlRfRHJpdmVyX0NsYXNzUmVjKS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaCBuZXcgZmlsZSB0byBkZWNsYXJlIHRoZQorCUZUX1BJQ19Db250YWluZXIgc3RydWN0IGFuZCB0aGUgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIGFuZCBkZXRyb3kgaXQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIGFkZCBtYWNyb3MgdG8gYWxsb2NhdGUgYW5kCisJZGVzdG9yeSBhcnJheXMgb2YgRlRfU2VydmljZURlc2NSZWMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmggZGVmaW5lIG1hY3JvIHRvIGluY2x1ZGUKKwlmdHBpYy5oLgorCisJTmV3IEZpbGVzOgorCSogc3JjL2Jhc2UvZnRwaWMuYyBpbXBsZW1lbnQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIGFuZCBkZXN0b3J5IHRoZQorCWdsb2JhbCBwaWNfY29udGFpbmVyLgorCSogc3JjL2Jhc2UvYmFzZXBpYy5oIGRlY2xhcmUgc3RydWN0IHRvIGhvbGQgUElDIGdsb2JhbHMgZm9yIGJhc2UgYW5kCisJbWFjcm9zIHRvIGFjY2VzcyB0aGVtLgorCSogc3JjL2Jhc2UvYmFzZXBpYy5jIGltcGxlbWVudCBmdW5jdGlvbnMgdG8gYWxsb2NhdGUsIGRlc3Ryb3kgYW5kCisJaW5pdGlhbGl6ZSBQSUMgZ2xvYmFscyBmb3IgYmFzZS4KKworCSogc3JjL2Jhc2UvZnRpbml0LmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGltcGxlbWVudAorCWZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlIGFuZCBkZXN0cm95IGZ0X2RlZmF1bHRfbW9kdWxlcyBhY2NvcmRpbmcgdG8KKwlGVF9DT05GSUdfTU9EVUxFU19IIGluIHRoZSBwaWNfY29udGFpbmVyIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBzY29wZQorCWFuZCB1c2UgbWFjcm8gZnJvbSBiYXNlcGljLmggdG8gYWNjZXNzIGl0LgorCSogc3JjL2Jhc2UvZnRvYmpzLmMgYWRkIGNhbGxzIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSBhbmQKKwlkZXN0cm95IHRoZSBnbG9iYWwgcGljX2NvbnRhaW5lciB3aGVuIHRoZSBsaWJyYXJ5IGlzIGNyZWF0ZWQgYW5kCisJZGVzdHJveWVkLgorCisJKiBzcmMvYmFzZS9qYW1maWxlIGFkZCBuZXcgZmlsZXMgdG8gRlQyX01VTFRJIGJ1aWxkOgorCWZ0cGljLmMgYW5kIGJhc2VwaWMuYy4KKwkqIHNyYy9iYXNlL2Z0YmFzZS5jIGFkZCBuZXcgZmlsZXMgdG8gYnVpbGQ6CisJZnRwaWMuYyBhbmQgYmFzZXBpYy5jLgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkCisJZnRfYml0bWFwX2dseXBoX2NsYXNzIGFuZCBmdF9vdXRsaW5lX2dseXBoX2NsYXNzIHdpbGwgYmUgYWxsb2NhdGVkCisJaW4gdGhlIHBpY19jb250YWluZXIgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIHNjb3BlIGFuZCB1c2UgbWFjcm9zIGZyb20KKyAJYmFzZXBpYy5oIHRvIGFjY2VzcyB0aGVtLgorCSogc3JjL2Jhc2UvZnRiYm94LmMgYWxsb2NhdGUgYmJveF9pbnRlcmZhY2Ugc3RyYWN0IG9uIHRoZSBzdGFjaworCWluc3RlYWQgb2YgdGhlIGdsb2JhbCBzY29wZSB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQuCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIGFjY2VzcyBmdF9vdXRsaW5lX2dseXBoX2NsYXNzIGFsbG9jYXRlZCBpbgorCWZ0Z2x5cGguYyB2aWEgbWFjcm9zIGZyb20gYmFzZXBpYy5oCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCVByZXBhcmluZyBjaGFuZ2VzIGluIGNmZiBwYXJzZXIgbGF0ZXIgbmVlZGVkIGZvciBQSUMgdmVyc2lvbi4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMsIHNyYy9jZmYvY2ZmbG9hZC5oLCBzcmMvY2ZmL2NmZm9ianMuYywKKwlzcmMvY2ZmL2NmZnBhcnNlLmMsIHNyYy9jZmYvY2ZmcGFyc2UuaDogQWRkIGxpYnJhcnkgcG9pbnRlciB0bworCSdDRkZfUGFyc2VyUmVjJyBzZXQgYnkgYGNmZl9wYXJzZXJfaW5pdCcuCisJUm91dGUgbGlicmFyeSBwb2ludGVyIGZyb20gJ2NmZl9mYWNlX2luaXQnIHRvICdjZmZfc3ViZm9udF9sb2FkJworCWZvciBgY2ZmX3BhcnNlcl9pbml0Jy4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChDRkZfRmllbGRfSGFuZGxlcik6IE1vdmUgaXQgdG8uLi4KKwkqIHNyYy9jZmYvY2ZmcGFyc2UuaDogVGhpcyBmaWxlLCB0byBiZSB1c2VkIGJ5IG90aGVyIEMgZmlsZXMuCisKKzIwMDktMDQtMDUgIE9yYW4gQWdyYSAgPG9yYW5AbW9uZm9ydC5jby5pbD4KKworCU1pbm9yIGNoYW5nZSBpbiBmdHN0cm9rZS5jLgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyUmVjKTogUmVwbGFjZSBgbWVtb3J5JyBtZW1iZXIgd2l0aAorCWBsaWJyYXJ5JyBuZWVkZWQgZm9yIFBJQyB2ZXJzaW9uLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKworMjAwOS0wNC0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJZnRuYW1lcy5jIC0+IGZ0c25hbWVzLmMKKworCSogc3JjL2Jhc2UvZnRuYW1lcy5jOiBSZW5hbWUgdG8uLi4KKwkqIHNyYy9iYXNlL2Z0c25hbWVzLmM6IFRoaXMuCisJKiBzcmMvYmFzZS9KYW1maWxlLCBzcmMvYmFzZS9ydWxlcy5taywgc3JjL2Jhc2UvZnRiYXNlLmM6IFVwZGF0ZWQuCisKKzIwMDktMDQtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBzdXBwb3J0IGZvciBjbWFwIHR5cGUgMTMuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX0NNQVBfRk9STUFUXzEzKTogTmV3IG1hY3JvLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAoVFRfQ01hcDEzUmVjLCB0dF9jbWFwMTNfaW5pdCwKKwl0dF9jbWFwMTNfdmFsaWRhdGUsIHR0X2NtYXAxM19jaGFyX2luZGV4LCB0dF9jbWFwMTNfY2hhcl9uZXh0LAorCXR0X2NtYXAxM19nZXRfaW5mbywgdHRfY21hcDEzX2NoYXJfbWFwX2RlZl9iaW5hcnksCisJdHRfY21hcDE0X2NsYXNzX3JlYyk6IE5ldyBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIGNtYXAgMTMKKwlzdXBwb3J0LgorCSh0dF9jbWFwX2NsYXNzZXMpOiBSZWdpc3RlciB0dF9jbWFwMTNfY2xhc3NfcmVjLgorCisJKiBkb2NzL0NIQU5HRVM6IE1lbnRpb24gY21hcCAxMyBzdXBwb3J0LgorCisyMDA5LTA0LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJZ25vcmUgZW1wdHkgY29udG91cnMgaW4gQ0ZGIGdseXBocy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgQWxiZXJ0IEFzdGFscyBDaWQgPGFhY2lkQGtkZS5vcmc+LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIpOiBTeW5jaHJvbml6ZSB3aXRoCisJdDFfYnVpbGRlcl9jbG9zZV9jb250b3VyLgorCisyMDA5LTAzLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBbm90aGVyIHJlZHVuZGFudCBoZWFkZXIgaW5jbHVzaW9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jOiBGaXggR2hvc3RzY3JpcHQgQ292ZXJpdHkgaXNzdWUgIzQwNDEuCisKKzIwMDktMDMtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlbW92ZSByZWR1bmRhbnQgaGVhZGVyIGluY2x1c2lvbnMuCisKKwlUaGlzIGNvdmVycyBtYW55IEdob3N0c2NyaXB0IENvdmVyaXR5IGlzc3Vlcy4KKworCSogc3JjLyo6IERvIGl0LgorCisyMDA5LTAzLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggR2hvc3RzY3JpcHQgQ292ZXJpdHkgaXNzdWUgIzM5MDQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKTogUHJvdGVjdCBhZ2FpbnN0CisJaW52YWxpZCB2YWx1ZXMgb2YgYHJ1bmNudCcuCisKKzIwMDktMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBgbWFrZSBtdWx0aScgcnVuLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmg6IEluY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSC4KKworMjAwOS0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjU5MjMuCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmMgKEZUQ19DTUFQX0hBU0gpOiBGaXggdHlwby4KKworMjAwOS0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUHJvdGVjdCBhZ2FpbnN0IHRvbyBsYXJnZSBnbHlwaHMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFRhdmlzIE9ybWFuZHkgPHRhdmlzb0Bnb29nbGUuY29tPi4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBEb24ndCBhbGxvdworCWBwaXRjaCcgb3IgYGhlaWdodCcgdG8gYmUgbGFyZ2VyIHRoYW4gMHhGRkZGLgorCisyMDA5LTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisJICAgIFRhdmlzIE9ybWFuZHkgIDx0YXZpc29AZ29vZ2xlLmNvbT4KKworCUZpeCB2YWxpZGF0aW9uIGZvciB2YXJpb3VzIGNtYXAgdGFibGUgZm9ybWF0cy4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXA4X3ZhbGlkYXRlLCB0dF9jbWFwMTBfdmFsaWRhdGUsCisJdHRfY21hcDEyX3ZhbGlkYXRlKTogQ2hlY2sgYGxlbmd0aCcgY29ycmVjdGx5LgorCSh0dF9jbWFwXzE0X3ZhbGlkYXRlKTogQ2hlY2sgYGxlbmd0aCcgYW5kIGBudW1NYXBwaW5ncycgY29ycmVjdGx5LgorCisyMDA5LTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlQcm90ZWN0IGFnYWluc3QgbWFsZm9ybWVkIGNvbXByZXNzZWQgZGF0YS4KKworCSogc3JjL2x6dy9mdHpvcGVuLmMgKGZ0X2x6d3N0YXRlX2lvKTogVGVzdCB3aGV0aGVyIGBzdGF0ZS0+cHJlZml4JyBpcworCXplcm8uCisKKzIwMDktMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFNJRCB2YWx1ZXMgaW4gQ0ZGcy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgVGF2aXMgT3JtYW5keSA8dGF2aXNvQGdvb2dsZS5jb20+LgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfbG9hZCk6IFJlamVjdCBTSUQgdmFsdWVzIGxhcmdlcgorCXRoYW4gNjQ5OTkuCisKKzIwMDktMDMtMTkgIFZpbmNlbnQgUmljaG9tbWUgIDxyaWNob20udkBmcmVlLmZyPgorCisJVXBkYXRlIFdpbkNFIFZpc3VhbCBDIHByb2plY3QgZmlsZXMuCisKKwkqIGJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qOiBBZGQgbWlzc2luZyBiYXNlIGV4dGVuc2lvbgorCWZpbGVzLgorCisyMDA5LTAzLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgdW51c2VkIFdpbjMyIGNvZGUuCisKKwkqIGJ1aWxkcy93aW5jZS9mdGRlYnVnLmM6IFJlbW92ZSBjb2RlIGd1YXJkZWQgd2l0aCBgIV9XSU4zMl9XQ0UnLgorCVNpbmNlIFdpbjMyIGlzIGhhbmRsZWQgc2VwYXJhdGVseSB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQuCisKKzIwMDktMDMtMTkgIFZpbmNlbnQgUmljaG9tbWUgIDxyaWNob20udkBmcmVlLmZyPgorCisJTWFrZSBgZ3ppcCcgbW9kdWxlIGNvbXBpbGUgb24gV2luQ0UuCisKKwkqIHNyYy9nemlwL3pjb25mLmggW19XSU4zMl9XQ0VdOiBEZWZpbmUgTk9fRVJSTk9fSC4KKworMjAwOS0wMy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIHVudXNlZCBXaW5DRSBjb2RlLgorCisJKiBidWlsZHMvd2luMzIvZnRkZWJ1Zy5jOiBSZW1vdmUgY29kZSBndWFyZGVkIHdpdGggYF9XSU4zMl9XQ0UnLgorCVNpbmNlIFdpbkNFIGlzIGhhbmRsZWQgc2VwYXJhdGVseSB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQuCisKKzIwMDktMDMtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCWRvY21ha2VyOiBEb24ndCBpZ25vcmUgc2luZ2xlLWxpbmUgY29kZSBibG9ja3MuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IChEb2NCbG9jazo6X2luaXRfXyk6IEZpeCBjaGFuZ2UgZnJvbQorCTIwMDktMDEtMzEuCisKKzIwMDktMDMtMTUgIFN0ZXZlIExhbmdhc2VrICA8c3RldmUubGFuZ2FzZWtAY2Fub25pY2FsLmNvbT4KKworCVVzZSBfX2FzbV9fIGZvciBkZWNsYXJpbmcgYXNzZW1ibHkgaW5zdGVhZCBvZiBhc20uCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluIChGVF9NdWxGaXhfYXJtKTogVXNlIF9fYXNtX18gaW5zdGVhZCBvZgorCWFzbSBvbiBhcm0sIGZpeGluZyBhIGJ1aWxkIGZhaWx1cmUgb24gYXJtZWwgd2l0aCAtcGVkYW50aWMuCisKKzIwMDktMDMtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCB2YWxncmluZCB3YXJuaW5nLgorCisJKiBzcmMvc2ZudC90dHNiaXQwLmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkKTogRG9uJ3QgcmVhZAorCXBhc3QgdGhlIGVuZCBvZiB0aGUgZnJhbWUuCisKKzIwMDktMDMtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjMuOSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtOScuCisKKzIwMDktMDMtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluOiBNb3ZlIEBGVDJfRVhUUkFfTElCU0AgdG8gYExpYnMucHJpdmF0ZScuCisKKzIwMDktMDMtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBzb21lIEZyZWVUeXBlIENvdmVyaXR5IGlzc3VlcyBhcyByZXBvcnRlZCBmb3IgR2hvc3RzY3JpcHQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9OZXdfRmFjZSwgRlRfTmV3X01lbW9yeV9GYWNlKTogSW5pdGlhbGl6ZQorCWBhcmdzLnN0cmVhbScgKCMzODc0LCAjMzg3NSkuCisJKG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKTogSW1wcm92ZSBlcnJvciBtYW5hZ2VtZW50ICgjMzc4NikuCisJKiBzcmMvYmFzZS9mdG1tLmMgKGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UpOiBGaXggY2hlY2sgb2YgYGFzZXJ2aWNlJworCSgjMzg3MCkuCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChmdF9zdHJva2VfYm9yZGVyX2dldF9jb3VudHMpOiBSZW1vdmUgZGVhZAorCWNvZGUgKCMzNzkwKS4KKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAocmFjY2Vzc19ndWVzc19hcHBsZV9nZW5lcmljKTogQ2hlY2sgZXJyb3IKKwl2YWx1ZSBvZiBgRlRfU3RyZWFtX1NraXAnICgjMzc4NCkuCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0xvYWRfR2x5cGgpOiBDaGVjayBgc2l6ZScgYmVmb3JlIGFjY2Vzc2luZworCWl0ICgjMzg3MikKKworCSogc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfR2x5cGhfTG9hZCk6IENoZWNrIGBmYWNlJyBiZWZvcmUgYWNjZXNzaW5nCisJaXQgKCMzODcxKS4KKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X21ldHJpY3MpOiBIYW5kbGUgcmV0dXJuIHZhbHVlIG9mCisJYHBjZl9nZXRfbWV0cmljJyAoIzM3ODksICMzNzgyKS4KKwkocGNmX2dldF9wcm9wZXJ0aWVzKTogVXNlIEZUX1NUUkVBTV9TS0lQICgjMzc4MykuCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTWFuYWdlcl9SZWdpc3RlckNhY2hlKTogRml4IGNoZWNrIG9mCisJYGFjYWNoZScgKCMzNzk3KQorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wc19nZXRfZm9udF9pbmZvKTogRml4IGNoZWNrIG9mIGBjZmYnCisJKCMzNzk2KS4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcHJlcGFyZSk6IENoZWNrIGBzaXplJyAoIzM3OTUpLgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9pbmRleF9nZXRfcG9pbnRlcnMpOiBBZGQgY29tbWVudCAoIzM3OTQpLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX2FkZF9wcm9wZXJ0eSk6IENoZWNrIGBmcC0+dmFsdWUuYXRvbScKKwkoIzM3OTMpLgorCShfYmRmX3BhcnNlX3N0YXJ0KTogQWRkIGNvbW1lbnQgKCMzNzkyKS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChGaW5hbGl6ZV9Qcm9maWxlX1RhYmxlKTogQ2hlY2sKKwlgcmFzLmZQcm9maWxlJyAoIzM3OTEpLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoTG9hZF9TQml0X0ltYWdlKTogVXNlIEZUX1NUUkVBTV9TS0lQICgjMzc4NSkuCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChmdF9nemlwX2dldF91bmNvbXByZXNzZWRfc2l6ZSk6IFByb3Blcmx5IGlnbm9yZQorCXNlZWsgZXJyb3IgKCMzNzgxKS4KKworMjAwOS0wMy0xMSAgTWljaGFlbCBUb2Z0ZGFsICA8dG9mdGRhbEBnbWFpbC5jb20+CisKKwlFeHRlbmQgQ0lEIHNlcnZpY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBDSUQta2V5ZWQgQ0ZGcyBhcyBDSUQgZm9udHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaCAoRlRfR2V0X0NJRF9Jc19JbnRlcm5hbGx5X0NJRF9rZXllZCwKKwlGVF9HZXRfQ0lEX0Zyb21fR2x5cGhfSW5kZXgpOiBOZXcgZnVuY3Rpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKKwkoRlRfQ0lEX0dldElzSW50ZXJuYWxseUNJREtleWVkRnVuYywKKwlGVF9DSURfR2V0Q0lERnJvbUdseXBoSW5kZXhGdW5jKTogTmV3IGZ1bmN0aW9uIHR5cGVkZWZzLgorCShDSUQgU2VydmljZSk6IFVzZSB0aGVtLgorCisJKiBzcmMvYmFzZS9mdGNpZC5jOiBJbmNsdWRlIEZUX0NJRF9ILgorCShGVF9HZXRfQ0lEX0lzX0ludGVybmFsbHlfQ0lEX2tleWVkLCBGVF9HZXRfQ0lEX0Zyb21fR2x5cGhfSW5kZXgpOgorCU5ldyBmdW5jdGlvbnMuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9pc19jaWQsIGNmZl9nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgpOgorCU5ldyBmdW5jdGlvbnMuCisJKGNmZl9zZXJ2aWNlX2NpZF9pbmZvKTogQWRkIHRoZW0uCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IERvbid0IGZyZWUgYGZvbnQtPmNoYXJzZXQuc2lkcycKKwktLSBpdCBpcyBuZWVkZWQgZm9yIGFjY2VzcyBhcyBhIENJRC1rZXllZCBmb250LiAgSXQgZ2V0cyBkZWxldGVkCisJbGF0ZXIgb24uCisKKwkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoY2lkX2dldF9pc19jaWQsIGNpZF9nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgpOgorCU5ldyBmdW5jdGlvbnMuCisJKGNpZF9zZXJ2aWNlX2NpZF9pbmZvKTogQWRkIHRoZW0uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOS0wMy0xMSAgQnJhbSBUYXNzeW5zICA8YnJhbXRAZW5mb2N1cy5iZT4KKworCUZpeCBTYXZhbm5haCBidWcgIzI1NTk3LgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9yZWFsKTogRG9uJ3QgYWxsb3cgZnJhY3Rpb25fbGVuZ3RoCisJdG8gYmVjb21lIGxhcmdlciB0aGFuIDkuCisKKzIwMDktMDMtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzI1ODE0LgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIuaW46IEFzIHN1Z2dlc3RlZCBpbiB0aGUgYnVnIHJlcG9ydCwgbW92ZQorCUBMSUJaQCB0byBgTGlicy5wcml2YXRlJy4KKworMjAwOS0wMy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjU3ODEuCisJV2Ugbm93IHNpbXBseSBjaGVjayBmb3IgYSB2YWxpZCBgb2Zmc2V0Jywgbm8gbG9uZ2VyIGhhbmRsaW5nIGBkZWx0YQorCT0gMScgc3BlY2lhbGx5LgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfdmFsaWRhdGUpOiBEb24ndCBjaGVjayBgZGVsdGEnIGZvcgorCWxhc3Qgc2VnbWVudC4KKwkodHRfY21hcDRfc2V0X3JhbmdlLCB0dF9jbWFwNF9jaGFyX21hcF9saW5lYXIsCisJdHRfY21hcDRfY2hhcl9tYXBfYmluYXJ5KTogQ2hlY2sgb2Zmc2V0LgorCisyMDA5LTAzLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL0phbWZpbGU6IEZpeCBoYW5kbGluZyBvZiBmdGFkdmFuYy5jLgorCVJlcG9ydGVkIGJ5IE9yYW4gQWdyYSA8b3JhbkBtb25mb3J0LmNvLmlsPi4KKworMjAwOS0wMy0xMCAgVmluY2VudCBSaWNob21tZSAgPHJpY2hvbS52QGZyZWUuZnI+CisKKwlSZXN0cnVjdHVyZSBXaW4zMiBhbmQgV2luY2UgY29tcGlsZXIgc3VwcG9ydC4KKworCSogc3JjL2J1aWxkcy93aW4zMjogUmVtb3ZlIGZpbGVzIGZvciBXaW5DRS4KKwlNb3ZlIFZDIDIwMDUgc3VwcG9ydCB0byBhIHNlcGFyYXRlIGRpcmVjdG9yeS4KKwlBZGQgZGlyZWN0b3J5IGZvciBWQyAyMDA4IHN1cHBvcnQuCisKKwkqIHNyYy9idWlsZHMvd2luY2U6IE5ldyBkaXJlY3RvcnkgaGllcmFyY2h5IGZvciBXaW5DRSBjb21waWxlcnMKKwkoVkMgMjAwNSBhbmQgVkMgMjAwOCkuCisKKzIwMDktMDMtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1vcmUgcHJlcGFyYXRpb25zIGZvciAyLjMuOSByZWxlYXNlLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIEphbWZpbGUsIFJFQURNRTogcy8yLjMuOC8yLjMuOS8sIHMvMjM4LzIzOS8uCisKKzIwMDktMDMtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvcnVsZXMubWsgKFNGTlRfRFJWX0gpOiBBZGQgdHRzYml0MC5jLgorCisyMDA5LTAzLTA5ICBBbGV4ZXkgS3J5dWtvdiAgPGFuYWdub3N0QHlhbmRleC5ydT4KKworCUZpeCBoYW5kbGluZyBvZiBFQkRUIGZvcm1hdHMgOCBhbmQgOSAocGFydCAyKS4KKworCVRoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBwcm9ibGVtcyBpbiB0dHNiaXQwLmM6CisKKwkuIEJpdG1hcHMgZm9yIGNvbXBvdW5kIGdseXBocyB3ZXJlIG5ldmVyIGFsbG9jYXRlZC4KKworCS4gYFNCaXREZWNvZGVyJyByZWZ1c2VkIHRvIGxvYWQgbWV0cmljcyBpZiBzb21lIG90aGVyIG1ldHJpY3MgaGF2ZQorCSAgYWxyZWFkeSBiZWVuIGxvYWRlZC4gIFRoaXMgY29uZGl0aW9uIGNlcnRhaW5seSBtYWtlcyBubyBzZW5zZSBmb3IKKwkgIHJlY3Vyc2l2ZSBjYWxscywgc28gSSd2ZSBqdXN0IGRpc2FibGVkIGl0LiAgQW5vdGhlciBwb3NzaWJpbGl0eQorCSAgd291bGQgYmUgcmVzZXR0aW5nIGBkZWNvZGVyLT5tZXRyaWNzX2xvYWRlZCcgdG8gZmFsc2UgYmVmb3JlCisJICBsb2FkaW5nIGVhY2ggY29tcG9zaXRlIGNvbXBvbmVudC4gIEhvd2V2ZXIsIHdlIG11c3QgcmVzdG9yZSB0aGUKKwkgIG9yaWdpbmFsIG1ldHJpY3MgYWZ0ZXIgZmluaXNoaW5nIHRoZSByZWN1cnNpb247IG90aGVyd2lzZSB3ZSBjYW4KKwkgIGdldCBhIG1pc2FsaWduZWQgZ2x5cGguCisKKwkuIGB0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZCcgaW5jb3JyZWN0bHkgaGFuZGxlZCBgeF9wb3MnLAorCSAgY2F1c2luZyBzb21lIGdseXBoIGNvbXBvbmVudHMgdG8gYmUgc2hpZnRlZCB0b28gZmFyIHRvIHRoZSByaWdodAorCSAgKGVzcGVjaWFsbHkgbm90aWNlYWJsZSBmb3Igc21hbGwgc2l6ZXMpLgorCisJTm90ZSB0aGF0IHN1cHBvcnQgZm9yIGdyYXlzY2FsZSBiaXRtYXBzIChub3QgbmVjZXNzYXJpbHkgY29tcG91bmQpIGlzCisJY29tcGxldGVseSBicm9rZW4gaW4gdHRzYml0MC5jLgorCisJKiBzcmMvc2ZudC90dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzOiBBbHdheXMgbG9hZCBtZXRyaWNzLgorCSh0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZCk6IEhhbmRsZSBgeF9wb3MnIGNvcnJlY3RseSBpbiBjYXNlCisJb2YgYGggPT0gaGVpZ2h0Jy4KKwkodHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQpOiBSZXNldCBtZXRyaWNzIGFmdGVyIGxvYWRpbmcKKwljb21wb25lbnRzLgorCUFsbG9jYXRlIGJpdG1hcC4KKworMjAwOS0wMy0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToyMDozLgorCisyMDA5LTAzLTAzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlQcm90ZWN0IFNGTlQga2VybmluZyB0YWJsZSBwYXJzZXIgYWdhaW5zdCBtYWxmb3JtZWQgdGFibGVzLgorCisJVGhpcyBjbG9zZXMgU2F2YW5uYWggQlVHICMyNTc1MC4KKworCSogc3JjL3NmbnQvdHRrZXJuLmMgKHR0X2ZhY2VfbG9hZF9rZXJuLCB0dF9mYWNlX2dldF9rZXJuaW5nKTogRml4IGEKKwlidWcgd2hlcmUgYSBtYWxmb3JtZWQgdGFibGUgd291bGQgYmUgc3VjY2Vzc2Z1bGx5IGxvYWRlZCBidXQgbGF0ZXIKKwljcmFzaCB0aGUgZW5naW5lIGR1cmluZyBwYXJzaW5nLgorCisyMDA5LTAzLTAzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0byAyLjMuOS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oOiBCdW1wIHBhdGNoIHZlcnNpb24gdG8gOS4KKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgdGhlIEFCSSBicmVhayBpbiAyLjMuOC4KKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSB2ZXJzaW9uIG51bWJlcnMgdGFibGUgZm9yIDIuMy45LgorCisyMDA5LTAzLTAzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlSZW1vdmUgQUJJLWJyZWFraW5nIGZpZWxkIGluIHB1YmxpYyBQU19JbmZvRm9udFJlYyBkZWZpbml0aW9uLgorCisJSW5zdGVhZCwgd2UgZGVmaW5lIGEgbmV3IGludGVybmFsIFBTX0ZvbnRFeHRyYVJlYyBzdHJ1Y3R1cmUgdG8KKwlob2xkIHRoZSBhZGRpdGlvbmFsIGZpZWxkLCB0aGVuIHBsYWNlIGl0IGluIHZhcmlvdXMgaW50ZXJuYWwKKwlwb3NpdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRlRfRmFjZSBkZXJpdmVkIG9iamVjdHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaCAoUFNfRm9udEluZm9SZWMpOiBSZW1vdmUgdGhlCisJYGZzX3R5cGUnIGZpZWxkIGZyb20gdGhlIHB1YmxpYyBzdHJ1Y3R1cmUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0ZpZWxkTG9jYXRpb24pOiBOZXcKKwllbnVtZXJhdGlvbiBgVDFfRklFTERfTE9DQVRJT05fRk9OVF9FWFRSQScuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCAoUFNfRm9udEV4dHJhUmVjKTogTmV3CisJc3RydWN0dXJlLgorCShUMV9Gb250UmVjLCBDSURfRmFjZVJlYyk6IEFkZCBpdC4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9sb2FkX2tleXdvcmQpOiBIYW5kbGUKKwlUMV9GSUVMRF9MT0NBVElPTl9GT05UX0VYVFJBLgorCSogc3JjL2NpZC9jaWR0b2tlbi5oLCBzcmMvdHlwZTEvdDF0b2tlbnMuaCwgc3JjL3R5cGU0Mi90NDJwYXJzZS5jOgorCUFkanVzdCBGVF9TVFJVQ1RVUkUgYW5kIFQxQ09ERSBwcm9wZXJseSB0byBoYW5kbGUgYEZTVHlwZScuCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHQxX2xvYWRfa2V5d29yZCk6IEhhbmRsZQorCVQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkEuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaCAoUHNJbmZvIHNlcnZpY2UpOgorCUFkZCBgUFNfR2V0Rm9udEV4dHJhRnVuYycgZnVuY3Rpb24gdHlwZWRlZi4KKworCSogc3JjL2Jhc2UvZnRmc3R5cGUuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0ggYW5kCisJRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSC4KKwkoRlRfR2V0X0ZTVHlwZV9GbGFncyk6IFVzZSBQT1NUU0NSSVBUX0lORk8gc2VydmljZS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKwkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoY2lkX3BzX2dldF9mb250X2V4dHJhKTogTmV3IGZ1bmN0aW9uLgorCShjaWRfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wc19nZXRfZm9udF9leHRyYSk6IE5ldyBmdW5jdGlvbi4KKwkodDFfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKwkqIHNyYy90eXBlNDIvdDQyZHJpdnIuYyAodDQyX3BzX2dldF9mb250X2V4dHJhKTogTmV3IGZ1bmN0aW9uLgorCSh0NDJfc2VydmljZV9wc19pbmZvKTogVXBkYXRlZC4KKworMjAwOS0wMy0wMiAgQWxleGV5IEtyeXVrb3YgIDxhbmFnbm9zdEB5YW5kZXgucnU+CisKKwlGaXggaGFuZGxpbmcgb2YgRUJEVCBmb3JtYXRzIDggYW5kIDkuCisKKwlUaGUgbWFpbiBjeWNsZSBpbiBgYmxpdF9zYml0JyBtYWtlcyB0b28gbWFueSBpdGVyYXRpb25zOiBpdCBhY3R1YWxseQorCW5lZWRzIHRoZSBjb3VudCBvZiBsaW5lcyBpbiB0aGUgc291cmNlIGJpdG1hcCByYXRoZXIgdGhhbiBpbiB0aGUKKwl0YXJnZXQgaW1hZ2UuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jIChibGl0X3NiaXQpIFtGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFNdOgorCUFkZCBwYXJhbWV0ZXIgYHNvdXJjZV9oZWlnaHQnIGFuZCB1c2UgaXQgZm9yIG1haW4gbG9vcC4KKwkoTG9hZF9TQml0X1NpbmdsZSkgW0ZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMU106IFVwZGF0ZWQuCisKKzIwMDktMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzI1NjY5LgorCisJKiBzcmMvYmFzZS9mdGFkdmFuYy5oIChGVF9HZXRfQWR2YW5jZXMpOiBGaXggc2VyaW91cyB0eXBvLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2VsZWN0X01ldHJpY3MsIEZUX1JlcXVlc3RfTWV0cmljcyk6IEZpeAorCXNjYWxpbmcgZmFjdG9yIGZvciBub24tc2NhbGFibGUgZm9udHMuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9hZHZhbmNlcyk6IFVzZSBjb3JyZWN0IGFkdmFuY2Ugd2lkdGgKKwl2YWx1ZSB0byBwcmV2ZW50IGluY29ycmVjdCBzY2FsaW5nLgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDA5LTAyLTE1ICBNYXR0IEdvZGJvbHQgIDxtYXR0QGdvZGJvbHQub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjU1ODguCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluIChGVF9NdWxGaXhfYXJtKTogVXNlIGNvcnJlY3Qgc3ludGF4IGZvcgorCWBvcnInIGluc3RydWN0aW9uLgorCisyMDA5LTAyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzcyk6IEFkZCBgREZLYWlTaHUnLgorCVJlcG9ydGVkIGJ5IERhdmlkIEJldmFuIDxkYmV2YW5AZW10ZXguY29tPi4KKworMjAwOS0wMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjU0OTUuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFRlc3QgZm9yIGJpdG1hcCBzdHJpa2VzIGJlZm9yZQorCXNldHRpbmcgbWV0cmljcyBhbmQgYmJveCB2YWx1ZXMuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY2hlY2sgZm9yIGEKKwlmb250IHdpdGggbmVpdGhlciBhIGBnbHlmJyB0YWJsZSBub3IgYml0bWFwIHN0cmlrZXMgY2FuIGJlIHBlcmZvcm1lZAorCWVhcmx5IGVub3VnaCB0byBzZXQgbWV0cmljcyBhbmQgYmJveCB2YWx1ZXMgdG9vLgorCisyMDA5LTAyLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNTQ4MC4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluOiBGb3IgLS1mdHZlcnNpb24sIGRvbid0IHVzZSAkcHJlZml4CisJYnV0ICRpbmNsdWRlZGlyLgorCisyMDA5LTAxLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNaW5vciBkb2NtYWtlciBpbXByb3ZlbWVudHMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IChEb2NCbG9jazo6X19pbml0X18pOiBJZ25vcmUgZW1wdHkKKwljb2RlIGJsb2Nrcy4KKworMjAwOS0wMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNDQU5DVFJMIGhhbmRsaW5nIGluIFRURnMuCisJUHJvYmxlbSByZXBvcnRlZCBieSBBbGV4ZXkgS3J5dWtvdiA8YW5hZ25vc3RAeWFuZGV4LnJ1Pi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19TQ0FOQ1RSTCk6IEZpeCB0aHJlc2hvbGQgaGFuZGxpbmcuCisKKzIwMDktMDEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1vdmUgRlRfR2V0X0ZTVHlwZV9GbGFncyB0byBhIHNlcGFyYXRlIGZpbGUuCisJUHJvYmxlbSByZXBvcnRlZCBieSBNaWNrZXkgR2FiZWwgPG1pY2tleUBtb25mb3J0LmNvLmlsPi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9GU1R5cGVfRmxhZ3MpOiBNb3ZlIHRvLi4uCisJKiBzcmMvYmFzZS9mdGZzdHlwZS5jOiBUaGlzIG5ldyBmaWxlLgorCisJKiBtb2R1bGVzLmNmZyAoQkFTRV9FWFRFTlNJT04pOiBBZGQgZnRmc3R5cGUuYy4KKworCSogZG9jcy9JTlNUQUxMLkFOWTogVXBkYXRlZC4KKworCSogYnVpbGRzL21hYy8qLnR4dCwgYnVpbGRzL2FtaWdhLyptYWtlZmlsZSosCisJYnVpbGRzL3dpbjMyL3t2aXN1YWxjLHZpc3VhbGNlfS9mcmVldHlwZS4qLCBidWlsZHMvc3ltYmlhbi8qOgorCVVwZGF0ZWQuCisKKzIwMDktMDEtMjIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX1N0cmVhbV9PcGVuKTogRml4IDIgZXJyb3IKKwltZXNzYWdlcyBlbmRpbmcgd2l0aG91dCAiXG4iLgorCisyMDA5LTAxLTIyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMjUzNDcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChvcGVuX2ZhY2VfUFNfZnJvbV9zZm50X3N0cmVhbSk6IFJld2luZAorCXRoZSBzdHJlYW0gdG8gdGhlIG9yaWdpbmFsIHBvc2l0aW9uIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLAorCXdoZW4gZnRfbG9va3VwX1BTX2luX3NmbnRfc3RyZWFtKCkgZmFpbGVkLgorCShNYWNfUmVhZF9zZm50X1Jlc291cmNlKTogUmV3aW5kIHRoZSBzdHJlYW0gdG8gdGhlIGhlYWQgb2YKKwlzZm50IHJlc291cmNlIGJvZHksIHdoZW4gb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0oKQorCWZhaWxlZC4KKworMjAwOS0wMS0xOSAgTWljaGFlbCBMb3R6ICA8bW1sckBtbG90ei5jaD4KKworCUZpeCBTYXZhbm5haCBidWcgIzI1MzU1LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9NdWxGaXhfaTM4Nik6IE1ha2UKKwlhc3NlbWJsZXIgY29kZSB3b3JrIHdpdGggZ2NjIDIuOTUuMyAoYXMgdXNlZCBieSB0aGUgSGFpa3UgcHJvamVjdCkuCisJQWRkIGBjYycgcmVnaXN0ZXIgdG8gdGhlIGNsb2JiZXIgbGlzdC4KKworMjAwOS0wMS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUHJvdGVjdCBGVF9HZXRfTmV4dF9DaGFyLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfc2V0X3JhbmdlKTogQXBwbHkgZml4IHNpbWlsYXIgdG8KKwljaGFuZ2UgZnJvbSAyMDA4LTA3LTIyLgorCisJUGF0Y2ggZnJvbSBSb25lbiBHaG9zaGFsIDxyZ2hvc2hhbEBlbXRleC5jb20+LgorCisyMDA5LTAxLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbXBsZW1lbnQgRlRfR2V0X05hbWVfSW5kZXggZm9yIFNGTlQgZHJpdmVyLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9uYW1lX2luZGV4KTogTmV3IGZ1bmN0aW9uLgorCShzZm50X3NlcnZpY2VfZ2x5cGhfZGljdCk6IFVzZSBpdC4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgVHJ1YyBUcnVvbmcgPHRydWN0dkBuZWNzdi5jb20+LgorCisyMDA5LTAxLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaCAoRlRfT3V0bGluZV9HZXRJbnNpZGVCb3JkZXIpOiBGaXgKKwlkb2N1bWVudGF0aW9uLiAgUHJvYmxlbSByZXBvcnRlZCBieSBUcnVjIFRydW9uZyA8dHJ1Y3R2QG5lY3N2LmNvbT4uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOS0wMS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuMy44IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMy04Jy4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjMuOC4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qOiBzLzIuMy43LzIuMy44Lywgcy8yMzcvMjM4Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA4LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToxOTozLgorCisJKiBkb2NzL3JlbGVhc2U6IFVwZGF0ZWQuCisKKzIwMDktMDEtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rIChkaXN0KTogQ29tcHJlc3MgYmV0dGVyLgorCisyMDA5LTAxLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HZXRfRlNUeXBlX0ZsYWdzKTogQ2FzdCBmb3IgY29tcGlsYXRpb24KKwl3aXRoIEMrKy4KKworMjAwOS0wMS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRG9uJ3QgdXNlIHN0ZGxpYi5oIGFuZCBmcmllbmRzIGRpcmVjdGx5LgorCVJlcG9ydGVkIGJ5IE1pY2tleSBHYWJlbCA8bWlja2V5QG1vbmZvcnQuY28uaWw+LgorCisJKiBzcmMvYmFzZS9mdGRiZ21lbS5jOiBzLzxzdGRsaWIuaD4vRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSC8uCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jLCBzcmMvbHp3L2Z0bHp3LmMsIHNyYy9yYXN0ZXIvZnRtaXNjLmg6CisJcy88c3RyaW5nLmg+L0ZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gvLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmgsIHNyYy9hdXRvZml0L2FmaGludHMuYywKKwlzcmMvcHNoaW50ZXIvcHNoYWxnby5jOiBzLzxzdGRpby5oPi9GVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ILworCisJKiBzcmMvbHp3L2Z0bHp3LmMsIHNyYy9iYXNlL2Z0ZGJnbWVtLmM6IERvbid0IGluY2x1ZGUgc3RkaW8uaC4KKworMjAwOS0wMS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqICovKjogcy9kbyA7IHdoaWxlICggMCApL2RvIHsgfSB3aGlsZSAoIDAgKS8uCisJUmVwb3J0ZWQgYnkgU2VhbiBNY0JyaWRlIDxzZWFuQHJvZ3VlLXJlc2VhcmNoLmNvbT4uCisKKzIwMDktMDEtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBzdGRsaWIgZGVwZW5kZW5jaWVzLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBNaWNrZXkgR2FiZWwgPG1pY2tleUBtb25mb3J0LmNvLmlsPi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfZXhpdCk6IFJlbW92ZWQuICBVbnVzZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYywgc3JjL2Jhc2UvZnRsY2RmaWwuYywgc3JjL3Ntb290aC9mdHNtb290aC5jOgorCXMvbWVtY3B5L2Z0X21lbWNweS8uCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYzogcy9tZW1zZXQvZnRfbWVtc2V0Lywgcy9tZW1jcHkvZnRfbWVtY3B5Ly4KKworMjAwOS0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL2Zvcm1hdHMudHh0OiBBZGQgbGluayB0byBQQ0Ygc3BlY2lmaWNhdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oIChGVF9HZXRfQkRGX1Byb3BlcnR5KTogSW1wcm92ZQorCWRvY3VtZW50YXRpb24uCisKKzIwMDktMDEtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jLmMgKF9mdF9mYWNlX3NjYWxlX2FkdmFuY2VzLCBGVF9HZXRfQWR2YW5jZSwKKwlGVF9HZXRfQWR2YW5jZXMpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgbG9hZF9mbGFncyBmcm9tIEZUX1VJbnQzMiB0bworCUZUX0ludDMyLCB0byBtYXRjaCB3aXRoIHRoZSBmbGFncyBmb3IgRlRfTG9hZF9HbHlwaCgpLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2FkdmFuY2VzKTogRGl0dG8uCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2FkdmFuY2VzKTogRGl0dG8uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmggKEZUX0dldF9BZHZhbmNlLCBGVF9HZXRfQWR2YW5jZXMpOgorCURpdHRvLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIChGVF9GYWNlX0dldEFkdmFuY2VzRnVuYyk6CisJRGl0dG8uCisKKzIwMDktMDEtMDkgIERhbmllbCBaaW1tZXJtYW5uICA8bmV0emltbWVAYW9sLmNvbT4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydC5jIChneHZfbW9ydF9mZWF0dXJlX3ZhbGlkYXRlKTogRml4IHdyb25nCisJbGVuZ3RoIGNoZWNrLiAgRnJvbSBTYXZhbm5haCBwYXRjaCAjNjY4Mi4KKworMjAwOS0wMS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHByb2JsZW0gd2l0aCBUMV9GSUVMRF97TlVNLEZJWEVEfV9UQUJMRTIuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfcGFyc2VyX2xvYWRfZmllbGRfdGFibGUpOiBEb24ndCBoYW5kbGUKKwlgY291bnRfb2Zmc2V0JyBpZiBpdCBpcyB6ZXJvIChpLmUuLCB1bnVzZWQpLiAgT3RoZXJ3aXNlLCB0aGUgZmlyc3QKKwllbGVtZW50IG9mIHRoZSBzdHJ1Y3R1cmUgd2hpY2ggaG9sZHMgdGhlIGRhdGEgaXMgZXJyb25lb3VzbHkKKwltb2RpZmllZC4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgQ2hpIE5ndXllbiA8Y2hpbnRAbmVjc3YuY29tPi4KKworMjAwOS0wMS0wOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRhZHZhbmMuYyAoX2Z0X2ZhY2Vfc2NhbGVfYWR2YW5jZXMsIEZUX0dldF9BZHZhbmNlLAorCUZUX0dldF9BZHZhbmNlcyk6IEV4dGVuZCB0aGUgdHlwZSBvZiBsb2FkX2ZsYWdzIGZyb20gRlRfVUludCB0bworCUZUX1VJbnQzMiwgdG8gcGFzcyAzMi1iaXQgZmxhZ3Mgb24gMTZiaXQgcGxhdGZvcm1zLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2FkdmFuY2VzKTogRGl0dG8uCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2FkdmFuY2VzKTogRGl0dG8uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmggKEZUX0dldF9BZHZhbmNlLCBGVF9HZXRfQWR2YW5jZXMpOgorCURpdHRvLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIChGVF9GYWNlX0dldEFkdmFuY2VzRnVuYyk6CisJRGl0dG8uCisKKzIwMDktMDEtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Eb25lX0xpYnJhcnkpOiBJc3N1ZSBhbiBlcnJvciBtZXNzYWdlIHdoZW4KKwlGVF9Eb25lX0ZhY2UoKSBjYW5ub3QgZnJlZSBhbGwgZmFjZXMuIElmIHRoZSBsaXN0IG9mIHRoZSBvcGVuZWQKKwlmYWNlcyBpbmNsdWRlcyBicm9rZW4gZmFjZSB3aGljaCBGVF9Eb25lX0ZhY2UoKSBjYW5ub3QgZnJlZSwKKwlGVF9Eb25lX0xpYnJhcnkoKSByZXRyaWVzIEZUX0RvbmVfRmFjZSgpIGFuZCBpdCBjYW4gZmFsbCBpbnRvCisJYW4gZW5kbGVzcyBsb29wLiBTZWUgdGhlIGRpc2N1c3Npb246CisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDgtMDkvbXNnMDAwNDcuaHRtbAorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA4LTEwL21zZzAwMDAwLmh0bWwKKworMjAwOS0wMS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IG5ldyBrZXkgYGEnIGluIGZ0ZGlmZi4KKworMjAwOS0wMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBhdXRvZ2VuLnNoOiBEb24ndCB1c2UgR05VaXNtcyB3aGlsZSBjYWxsaW5nIHNlZC4gIFByb2JsZW0gcmVwb3J0ZWQKKwlieSBTZWFuIE1jQnJpZGUuCisKKzIwMDktMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0NvbnZlcnQpOiBIYW5kbGUgRlRfUElYRUxfTU9ERV9MQ0QKKwlhbmQgRlRfUElYRUxfTU9ERV9MQ0RfVi4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgQ2hpIE5ndXllbgorCTxjaGludEBuZWNzdi5jb20+LgorCisyMDA5LTAxLTA2ICBEaWVnbyBQZXR0ZW7DsiAgPGZsYW1lZXllc0BnbWFpbC5jb20+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IERvbid0IGNhbGwgQUNfQ0FOT05JQ0FMX0JVSUxEIGFuZAorCUFDX0NBTk9OSUNBTF9UQVJHRVQgYW5kIHVzZSAkaG9zdF9vcyBvbmx5LiAgQSBuaWNlIGV4cGxhbmF0aW9uIGZvcgorCXRoaXMgY2hhbmdlIGNhbiBiZSBmb3VuZCBhdAorCWh0dHA6Ly9ibG9nLmZsYW1lZXllcy5ldS9zL2Nhbm9uaWNhbC10YXJnZXQuCisKKwlGcm9tIFNhdmFubmFoIHBhdGNoICM2NzEyLgorCisyMDA5LTAxLTA2ICBTZWFuIE1jQnJpZGUgIDxzZWFuQHJvZ3VlLXJlc2VhcmNoLmNvbT4KKworCSogc3JjL2Jhc2UvZnRkYmdtZW0uYyAoX2RlYnVnX21lbV9kdW1teSk6IE1ha2UgaXQgc3RhdGljLgorCisJKiBzcmMvYmFzZS9mdG1hYy5jOiBSZW1vdmUgc29tZSAjdW5kZWZzLgorCisyMDA4LTEyLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlTZXQgYGZhY2VfaW5kZXgnIGZpZWxkIGluIEZUX0ZhY2UgZm9yIGFsbCBmb250IGZvcm1hdHMuCisKKwkqIGNmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpLCB3aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCksCisJc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBEbyBpdC4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwOC0xMi0yMiAgU3RldmUgR3J1YmIKKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYyAoRlRfU3RyZWFtX09wZW4pOiBSZWplY3QgemVyby1sZW5ndGggZmlsZXMuCisJUGF0Y2ggZnJvbSBTYXZhbm5haCBidWcgIzI1MTUxLgorCisyMDA4LTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wZnIvcGZyZHJpdnIuYywgc3JjL3dpbmZvbnRzL3dpbmZudC5jLCBzcmMvY2FjaGUvZnRjbWFuYWcuYywKKwlzcmMvc21vb3RoL2Z0Z3JheXMuYywgc3JjL2Jhc2UvZnRvYmpjLnMsIHNyYy9zZm9ianMuYzoKKwlzL19FcnJfQmFkX0FyZ3VtZW50L19FcnJfSW52YWxpZF9Bcmd1bWVudC8uICBUaGUgZm9ybWVyIGlzIGZvcgorCWVycm9ycyBpbiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgb25seS4KKworMjAwOC0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHBmci5jIChGVF9HZXRfUEZSX01ldHJpY3MpOiBQcm90ZWN0IGFnYWluc3QgTlVMTAorCWFyZ3VtZW50cy4KKwlGaXggcmV0dXJuIHZhbHVlIGZvciBub24tUEZSIGZvbnRzLiAgQm90aCBwcm9ibGVtcyByZXBvcnRlZCBieSBDaGkKKwlOZ3V5ZW4gPGNoaW50QG5lY3N2LmNvbT4uCisKKzIwMDgtMTItMjEgIGFub255bW91cworCisJRlRfVVNFX01PRFVMRSBkZWNsYXJlcyB0aGluZ3MgYXM6CisKKwkgIGV4dGVybiBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MKKworCShvciBzaW1pbGFyIGZvciBDKyspLiAgSG93ZXZlciwgdGhlIGFjdHVhbCB0eXBlcyBvZiB0aGUgdmFyaWFibGVzCisJYmVpbmcgZGVjbGFyZWQgYXJlIG9mdGVuIGRpZmZlcmVudCwgZS5nLiwgRlRfRHJpdmVyX0NsYXNzUmVjIG9yCisJRlRfUmVuZGVyZXJfQ2xhc3MuICAoU29tZSBhcmUsIGluZGVlZCwgRlRfTW9kdWxlX0NsYXNzLikKKworCVRoaXMgd29ya3Mgd2l0aCBtb3N0IEMgY29tcGlsZXJzIChzaW5jZSB0aG9zZSBzdHJ1Y3RzIGJlZ2luIHdpdGggYW4KKwlGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0KSwgYnV0IHRlY2huaWNhbGx5IGl0J3MgdW5kZWZpbmVkIGJlaGF2aW9yLgorCisJVG8gcXVvdGUgdGhlIElTTy9JRUMgOTg5OTpUQzIgZmluYWwgY29tbWl0dGVlIGRyYWZ0LCBzZWN0aW9uIDYuMi43CisJcGFyYWdyYXBoIDI6CisKKwkgIEFsbCBkZWNsYXJhdGlvbnMgdGhhdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3Qgb3IgZnVuY3Rpb24gc2hhbGwKKwkgIGhhdmUgY29tcGF0aWJsZSB0eXBlOyBvdGhlcndpc2UsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCisKKwkoQW5kIHRoZXkgYXJlIG5vdCBjb21wYXRpYmxlIHR5cGVzLikKKworCU1vc3QgQyBjb21waWxlcnMgZG9uJ3QgcmVqZWN0IChvciBldmVuIGRldGVjdCEpIGNvZGUgd2hpY2ggaGFzIHRoaXMKKwlpc3N1ZSwgYnV0IHRoZSBHQ0MgTFRPIGRldmVsb3BtZW50IGJyYW5jaCBjb21waWxlciBkb2VzLiAgKEl0CisJb3V0cHV0cyB0aGUgdHlwZXMgb2YgdGhlIG9iamVjdHMgd2hpbGUgZ2VuZXJhdGluZyAubyBmaWxlcywgYWxvbmcKKwl3aXRoIGEgYnVuY2ggb2Ygb3RoZXIgaW5mb3JtYXRpb24sIHRoZW4gY29tcGFyZXMgdGhlbSB3aGVuIGRvaW5nIHRoZQorCWZpbmFsIGxpbmstdGltZSBjb2RlIGdlbmVyYXRpb24gcGFzcy4pCisKKwlQYXRjaCBmcm9tIFNhdmFubmFoIGJ1ZyAjMjUxMzMuCisKKwkqIHNyYy9iYXNlL2Z0aW5pdC5jIChGVF9VU0VfTU9EVUxFKTogSW5jbHVkZSB2YXJpYWJsZSB0eXBlLgorCisJKiBidWlsZHMvYW1pZ2EvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oLCAqL21vZHVsZS5tazogVXBkYXRlZCB0byBkZWNsYXJlCisJcGFzcyBjb3JyZWN0IHR5cGVzIHRvIEZUX1VTRV9NT0RVTEUuCisKKzIwMDgtMTItMjEgIEhvbmdibyBOaSAgPGhvbmdib0BuanN0YXIuY29tPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRfZWRnZXMpLAorCXNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9oaW50X2VkZ2VzKSwgc3JjL2F1dG9maXQvYWZjamsuYworCShhZl9jamtfaGludF9lZGdlcyk6IFByb3RlY3QgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvLiAgVGhpcyBmaXhlcworCVNhdmFubmFoIGJ1ZyAjMjUxMjQuCisKKzIwMDgtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA4LTEyLTE4ICBCZXZhbiwgRGF2aWQgIDxkYmV2YW5AZW10ZXguY29tPgorCisJUHJvdmlkZSBBUEkgZm9yIGFjY2Vzc2luZyBlbWJlZGRpbmcgYW5kIHN1YnNldHRpbmcgcmVzdHJpY3Rpb24KKwlpbmZvcm1hdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS5oIChGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HLAorCUZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HLAorCUZUX0ZTVFlQRV9QUkVWSUVXX0FORF9QUklOVF9FTUJFRERJTkcsIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcsCisJRlRfRlNUWVBFX05PX1NVQlNFVFRJTkcsIEZUX0ZTVFlQRV9CSVRNQVBfRU1CRURESU5HX09OTFkpOiBOZXcKKwltYWNyb3MuCisJKEZUX0dldF9GU1R5cGVfRmxhZ3MpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HZXRfRlNUeXBlX0ZsYWdzKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvY2lkL2NpZHRva2VuLmgsIHNyYy90eXBlMS90MXRva2Vucy5oLCBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMKKwkodDQyX2tleXdvcmRzKTogSGFuZGxlIGBGU1R5cGUnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmggKFBTX0ZvbnRJbmZvUmVjKTogQWRkIGBmc190eXBlJyBmaWVsZC4KKworMjAwOC0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmMgKEZUX0dseXBoU2xvdF9FbWJvbGRlbik6IERvbid0IHVzZSBpbnRlcm5hbAorCW1hY3JvcyBzbyB0aGF0IGNvcHlpbmcgdGhlIHNvdXJjZSBjb2RlIGludG8gYW4gYXBwbGljYXRpb24gd29ya3MKKwlvdXQgb2YgdGhlIGJveC4KKworMjAwOC0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaCwgc3JjL2Jhc2UvZnRzeW50aC5jOiBNb3ZlCisJRlRfR2x5cGhTbG90X093bl9CaXRtYXAgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaCwgc3JjL2Jhc2UvZnRiaXRtYXAuYzogVGhlc2UgZmlsZXMuCisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMDgtMTItMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUdlbmVyYWxpemUgdGhlIGNvbmNlcHQgb2YgYHRyaWNreScgZm9udHMgYnkgaW50cm9kdWNpbmcKKwlGVF9GQUNFX0ZMQUdfVFJJQ0tZIHRvIGluZGljYXRlIHRoYXQgdGhlIGZvbnQgZm9ybWF0J3MgaGludGluZworCWVuZ2luZSBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgcmVuZGVyaW5nLgorCisJQXQgdGhlIHNhbWUgdGltZSwgc2xpZ2h0bHkgbW9kaWZ5IHRoZSBiZWhhdmlvdXIgb2YgdHJpY2t5IGZvbnRzOgorCUZUX0xPQURfTk9fSElOVElORyBpcyBub3cgaWdub3JlZC4gIFRvIHJlYWxseSBmb3JjZSByYXcgbG9hZGluZworCW9mIHRyaWNreSBmb250cyAod2l0aG91dCBoaW50aW5nKSwgYm90aCBGVF9MT0FEX05PX0hJTlRJTkcgYW5kCisJRlRfTE9BRF9OT19BVVRPSElOVCBtdXN0IGJlIHVzZWQuCisKKwlGaW5hbGx5LCB0cmlja3kgVHJ1ZVR5cGUgZm9udHMgYWx3YXlzIHVzZSB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIKKwlldmVuIGlmIHRoZSBwYXRlbnRlZCBjb2RlIGlzIHVzZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRkFDRV9GTEFHX1RSSUNLWSwgRlRfSVNfVFJJQ0tZKToKKwlOZXcgbWFjcm9zLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAoTG9hZF9HbHlwaCk6IEhhbmRsZSBuZXcgbG9hZCBmbGFncworCXNlbWFudGljcyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzcyk6IE5ldyBmdW5jdGlvbiwgdXNpbmcKKwljb2RlIG9mIC4uLgorCSh0dF9mYWNlX2luaXQpOiBUaGlzIGZ1bmN0aW9uLCBub3cgc2ltcGxpZmllZCBhbmQgdXBkYXRlZCB0byBuZXcKKwlzZW1hbnRpY3MuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogRG9uJ3QgdXNlIGF1dG9oaW50ZXIgZm9yIHRyaWNreQorCWZvbnRzLgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDA4LTEyLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZWFsbHkgZml4IFNhdmFubmFoIGJ1ZyAjMjUwMTA6IEFuIFNGTlQgZm9udCB3aXRoIG5laXRoZXIgb3V0bGluZXMKKwlub3IgYml0bWFwcyBjYW4gYmUgY29uc2lkZXJlZCBhcyBjb250YWluaW5nIHNwYWNlIGBnbHlwaHMnIG9ubHkuCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfbG9hZF9sb2NhKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlCisJYSBgZ2x5ZicgdGFibGUgaXMgbWlzc2luZy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEFib3J0IGlmIHdlIGhhdmUgbm8KKwlgZ2x5ZicgdGFibGUgYnV0IGEgbm9uLXplcm8gYGxvY2EnIGVudHJ5LgorCSh0dF9sb2FkZXJfaW5pdCk6IEhhbmRsZSBtaXNzaW5nIGBnbHlmJyB0YWJsZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBVbmRvIGNoYW5nZSAyMDA4LTEyLTA1LgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBBIGZvbnQgd2l0aCBuZWl0aGVyIG91dGxpbmVzCisJbm9yIGJpdG1hcHMgaXMgc2NhbGFibGUuCisKKzIwMDgtMTItMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3VuaXJhbmdlcyk6IEFkZCBtb3JlIHJhbmdlcy4gIFRoaXMKKwlmaXhlcyBTYXZhbm5haCBidWcgIzIxMTkwIHdoaWNoIGFsc28gcHJvdmlkZXMgYSBiYXNpYyBwYXRjaC4KKworMjAwOC0xMi0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9BRFZBTkNFX09OTFkpOiBVc2UgdmFsdWUKKwkweDEwMCBpbnN0ZWFkIG9mIDB4MTAwMDA7IHRoZSBsYXR0ZXIgdmFsdWUgaXMgYWxyZWFkeSBvY2N1cGllZCBieQorCUZUX0xPQURfVEFSR0VUX0xJR0hULiAgQnVnIHJlcG9ydGVkIGJ5IEphbWVzIENsb29zLgorCisKKwlIYW5kbGUgU0ZOVCB3aXRoIG5laXRoZXIgb3V0bGluZXMgbm9yIGJpdG1hcHMuICBUaGlzIGZpeGVzIFNhdmFubmFoCisJYnVnICMyNTAxMC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBSZWplY3QgZm9udHMgd2l0aCBuZWl0aGVyCisJb3V0bGluZXMgbm9yIGJpdG1hcHMuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IERvbid0IHJldHVybiBhbiBlcnJvciBpZiB0aGVyZQorCWlzIG5vIHRhYmxlIHdpdGggZ2x5cGhzLgorCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvb2t1cF90YWJsZSk6IEltcHJvdmUgZGVidWdnaW5nCisJbWVzc2FnZS4KKworMjAwOC0xMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJR0RFRiB0YWJsZXMgbmVlZCBgZ2x5cGhfY291bnQnIHRvbyBmb3IgdmFsaWRhdGlvbi4gIFByb2JsZW0gcmVwb3J0ZWQKKwlieSBDaGkgTmd1eWVuIDxjaGludEBuZWNzdi5jb20+LgorCisJKiBzcmMvb3R2YWxpZC9vdHZnZGVmLmMgKG90dl9HREVGX3ZhbGlkYXRlKSwgc3JjL290dmFsaWQvb3R2YWxpZC5oCisJKG90dl9HREVGX3ZhbGlkYXRlKSwgc3JjL290dmFsaWQvb3R2bW9kLmMgKG90dl92YWxpZGF0ZSk6IFBhc3MKKwlgZ2x5cGhfY291bnQnLgorCisyMDA4LTExLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMsIHNyYy9iYXNlL2Z0b3V0bG4uYywgc3JjL2Jhc2UvZnRyZm9yay5jLAorCXNyYy9iZGYvYmRmZHJpdnIuYywgc3JjL2d4dmFsaWQvZ3h2bW9yeC5jLCBzcmMvb3R2YWxpZC9vdHZtYXRoLmMsCisJc3JjL3BjZi9wY2Zkcml2ci5jLCBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oLCBzcmMvc21vb3RoL2Z0Z3JheXMuYywKKwlzcmMvdG9vbHMvZ2xuYW1lcy5weSwgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMsIHNyYy90eXBlMS90MWxvYWQuYywKKwlzcmMvdHlwZTQyL3Q0Mm9ianMuYywgc3JjL3dpbmZvbnRzL3dpbmZudC5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MKKwkoQXRhcmkgUHVyZUMpLgorCisyMDA4LTExLTI5ICBKYW1lcyBDbG9vcyAgPGNsb29zQGpoY2xvb3MuY29tPgorCisJKiBzcmMvdHlwZS90MWxvYWQuYyAobW1fYXhpc191bm1hcCk6IFJldmVydCBwcmV2aW91cyBwYXRjaCBhbmQgZml4CisJaXQgY29ycmVjdGx5IGJ5IHVzaW5nIEZUX0lOVF9UT19GSVhFRCAoRnJlZVR5cGUgZXhwZWN0cyAxNi4xNiB2YWx1ZXMKKwlpbiB0aGUgL0JsZW5kRGVzaWduTWFwIHNwYWNlKS4KKworMjAwOC0xMS0yOSAgSmFtZXMgQ2xvb3MgIDxjbG9vc0BqaGNsb29zLmNvbT4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChtbV9heGlzX3VubWFwKTogYGJsZW5kX3BvaW50cycgaXMgRlRfRml4ZWQqLAorCXdoZXJlYXMgYGRlc2lnbl9wb2ludHMnIGlzIEZUX0xvbmcqLiAgVGhlcmVmb3JlLCByZXR1cm4gYmxlbmQgcmF0aGVyCisJdGhhbiBkZXNpZ24gcG9pbnRzLgorCisyMDA4LTExLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX3JlYWwpOiBIYW5kbGUgbW9yZSB0aGFuIG5pbmUKKwlzaWduaWZpY2FudCBkaWdpdHMgY29ycmVjdGx5LiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzI0OTUzLgorCisyMDA4LTExLTI1ICBEYW5pZWwgWmltbWVybWFubiAgPG5ldHppbW1lQGFvbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0c3RyZWFtLmMgKEZUX1N0cmVhbV9SZWFkRmllbGRzKTogRG9uJ3QgYWNjZXNzIHN0cmVhbQorCWJlZm9yZSB0aGUgTlVMTCBjaGVjay4gIEZyb20gU2F2YW5uYWggcGF0Y2ggIzY2ODEuCisKKzIwMDgtMTEtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeGVzIGZyb20gdGhlIGdudXdpbjMyIHBvcnQuCisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmM6IHMvRVhQT1JUL0VYUE9SVF9ERUYvLgorCisJKiBzcmMvYmFzZS9mdG90dmFsLmM6IEluY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSC4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc190YWJsZV9hZGQpOiBDaGVjayBgbGVuZ3RoJy4KKworMjAwOC0xMS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAodHRfZGVmYXVsdF9ncmFwaGljc19zdGF0ZSk6IFRoZSBkZWZhdWx0CisJdmFsdWUgZm9yIGBzY2FuX3R5cGUnIGlzIHplcm8sIGFzIGNvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jayBmcm9tCisJTWljcm9zb2Z0LiAgUHJvYmxlbSByZXBvcnRlZCBieSBNaWNoYWwgTm93YWtvd3NraQorCTxtaXN6a2FAbGltZXMuY29tLnBsPi4KKworMjAwOC0xMS0xMiAgVG9yIEFuZGVyc3NvbiAgPHRvci5hbmRlcnNzb25AZ21haWwuY29tPgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfY21hcF9pbmZvKTogSW5pdGlhbGl6ZSBgZm9ybWF0JyBmaWVsZC4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjQ4MTkuCisKKzIwMDgtMTEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogUmVtb3ZlICNpZiAwLyNlbmRpZiBndWFyZHMKKwlzaW5jZSBPcGVuVHlwZSB2ZXJzaW9uIDEuNSBoYXMgYmVlbiByZWxlYXNlZC4KKworCSogaW5jbHVkZS90dG5hbWVpZC5oIChUVF9OQU1FX0lEX1dXU19GQU1JTFksCisJVFRfTkFNRV9JRF9XV1NfU1VCRkFNSUxZKTogTmV3IG1hY3JvcyBmb3IgT3BlblR5cGUgMS41LgorCShUVF9VUkNfQ09QVElDLCBUVF9VUkNfVkFJLCBUVF9VUkNfTktPLCBUVF9VUkNfQkFMSU5FU0UsCisJVFRfVVJDX1BIQUdTUEEsIFRUX1VSQ19OT05fUExBTkVfMCwgVFRfVVJDX1BIT0VOSUNJQU4sCisJVFRfVVJDX1RBSV9MRSwgVFRfVVJDX05FV19UQUlfTFVFLCBUVF9VUkNfQlVHSU5FU0UsCisJVFRfVVJDX0dMQUdPTElUSUMsIFRUX1VSQ19ZSUpJTkcsIFRUX1VSQ19TWUxPVElfTkFHUkksCisJVFRfVVJDX0xJTkVBUl9CLCBUVF9VUkNfQU5DSUVOVF9HUkVFS19OVU1CRVJTLCBUVF9VUkNfVUdBUklUSUMsCisJVFRfVVJDX09MRF9QRVJTSUFOLCBUVF9VUkNfU0hBVklBTiwgVFRfVVJDX09TTUFOWUEsCisJVFRfVVJDX0NZUFJJT1RfU1lMTEFCQVJZLCBUVF9VUkNfS0hBUk9TSFRISSwgVFRfVVJDX1RBSV9YVUFOX0pJTkcsCisJVFRfVVJDX0NVTkVJRk9STSwgVFRfVVJDX0NPVU5USU5HX1JPRF9OVU1FUkFMUywgVFRfVVJDX1NVTkRBTkVTRSwKKwlUVF9VUkNfTEVQQ0hBLCBUVF9VUkNfT0xfQ0hJS0ksIFRUX1VSQ19TQVVSQVNIVFJBLCBUVF9VUkNfS0FZQUhfTEksCisJVFRfVVJDX1JFSkFORywgVFRfVVJDX0NIQU0sIFRUX1VSQ19BTkNJRU5UX1NZTUJPTFMsCisJVFRfVVJDX1BIQUlTVE9TX0RJU0MsIFRUX1VSQ19PTERfQU5BVE9MSUFOLCBUVF9VUkNfR0FNRV9USUxFUyk6IE5ldworCW1hY3JvcyBmb3IgT3BlblR5cGUgMS41LgorCisyMDA4LTExLTA4ICBXZW5saW4gSW5zdGl0dXRlICA8d2VubGluQHdlbmxpbi5jb20+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXApOiBQcm90ZWN0IGFnYWluc3QKKwlzbG90LT5pbnRlcm5hbCA9PSBOVUxMLiAgUmVwb3J0ZWQgYnkgR3JhaGFtIEFzaGVyLgorCisyMDA4LTExLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jICh0dF9mYWNlX2dldF9uYW1lKTogTW9kaWZpZWQgdG8gcmV0dXJuIGFuIGVycm9yCisJY29kZSBzbyB0aGF0IG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20KKwltaXNzaW5nIHRhYmxlIGVudHJpZXMuICBSZXBvcnRlZCBieSBHcmFoYW0gQXNoZXIuCisJKEdFVF9OQU1FKTogTmV3IG1hY3JvLgorCShzZm50X2xvYWRfZmFjZSk6IFVzZSBpdC4KKworMjAwOC0xMS0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJW1RUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVJdOiBVbmRlZmluZQorCVRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HLiAgVGhpcyBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mCisJYEZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZScgKGFuZCBtYWtlcyBpdCB3b3JrIGFzIGRvY3VtZW50ZWQpLgorCVJlcG9ydGVkIGluIGJ1ZyAjNDQxNjM4IG9mIGJ1Z3ppbGxhLm5vdmVsbC5jb20uCisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMDgtMTEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9zdWJycyk6IFVzZSBhbiBlbmRsZXNzIGxvb3AuICBUaGVyZSBhcmUKKwlmb250cyAobGlrZSBIRUxWSS5QRkIgdmVyc2lvbiAwMDMuMDAxLCB1c2VkIG9uIE9TLzIpIHdoaWNoIGRlZmluZQorCXNvbWUgYHN1YnJzJyBlbGVtZW50cyBtb3JlIHRoYW4gb25jZS4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgUGV0ZXIKKwlXZWlsYmFjaGVyIDxtb3ppbGxhQHdlaWxiYWNoZXIub3JnPi4KKworMjAwOC0xMC0xNSAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvc2ZudC90dHBvc3QuYyAodHRfcG9zdF9kZWZhdWx0X25hbWVzKTogQWRkIGBjb25zdCcuCisKKzIwMDgtMTAtMTUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X01NX0JsZW5kKTogRGlzYW1iaWd1YXRlIGZvcgorCW1lZGRsZXNvbWUgY29tcGlsZXJzJyB3YXJuaW5nIGFnYWluc3QgYGZvciAoIC4uLjsgLi4uOyAuLi4pIDsnLgorCisyMDA4LTEwLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisJU3VnZ2VzdGVkIGJ5IEJyYW0gVGFzc3lucyBpbiBTYXZhbm5haCBwYXRjaCAjNjY1MS4KKworMjAwOC0xMC0xMiAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBGaXggY29tcHV0YXRpb24gb2YKKwlgdW5kZXJsaW5lX3Bvc2l0aW9uJy4KKworMjAwOC0xMC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDgtMTAtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNDQ2OC4KKworCUFjY29yZGluZyB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oLCB0aGUgYXBwcm9wcmlhdGUKKwl0eXBlIHRvIGludGVyY2hhbmdlIHNpbmdsZSBjaGFyYWN0ZXIgY29kZXBvaW50IGlzIEZUX1VJbnQzMi4gSXQKKwlzaG91bGQgYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIEZUX1VJbnQgd2hpY2ggY2FuIGJlIDE2Yml0IGludGVnZXIuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwNF9jaGFyX21hcF9saW5lYXIpOiBDaGFuZ2UgdGhlIHR5cGUKKwlvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGBwY2hhcmNvZGUnIGZyb20gRlRfVUludCogdG8gRlRfVUludDMyKi4KKwkodHRfY21hcDRfY2hhcl9tYXBfYmluYXJ5KTogRGl0dG8uCisJKHR0X2NtYXAxNF9nZXRfbm9uZGVmX2NoYXJzKTogQ2hhbmdlIHRoZSB0eXBlIG9mIHJldHVybiB2YWx1ZQorCWZyb20gRlRfVUludCogdG8gRlRfVUludDMyKi4KKworMjAwOC0xMC0wOCAgSm9obiBUeXRnYXQgIDxKb2huLlR5dGdhdEBlc2tvLmNvbT4KKworCUZpeCBTYXZhbm5haCBidWcgIzI0NDg1LgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2NoYXJzdHJpbmdzKTogQXNzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUKKwlhIC5ub3RkZWYgZ2x5cGguCisKKzIwMDgtMTAtMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IEluY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19IIGZvciBtdWx0aSBidWlsZC4KKwkqIGJ1aWxkcy9tYWMvZnRtYWMuYzogRGl0dG8uCisKKzIwMDgtMTAtMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggKFRUQUdfVFlQMSwgVFRBR190eXAxKTogRml4IGRlZmluaXRpb25zLgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEluY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ILgorCisyMDA4LTEwLTA1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9vcGVuX2ZvbnQpOiBBbGxvdyBgdHlwMScgdmVyc2lvbiB0YWcgaW4KKwl0aGUgYmVnaW5uaW5nIG9mIHNmbnQgY29udGFpbmVyLgorCSogc3JjL3NmbnQvdHRsb2FkLmMgKGNoZWNrX3RhYmxlX2Rpcik6IFJldHVybgorCWBTRk5UX0Vycl9UYWJsZV9NaXNzaW5nJyB3aGVuIHNmbnQgdGFibGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcworCWNvcnJlY3QgYnV0IGVzc2VudGlhbCB0YWJsZXMgZm9yIFRydWVUeXBlIGZvbnRzIChgaGVhZCcsIGBiaGVkJyBvcgorCWBTSU5HJykgYXJlIG1pc3NpbmcuICBPdGhlciBlcnJvcnMgYXJlIHJldHVybmVkIGJ5CisJU0ZOVF9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IFdoZW4gVHJ1ZVR5cGUgZHJpdmVyIHJldHVybnMKKwlgRlRfRXJyX1RhYmxlX01pc3NpbmcnLCB0cnkgYG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtJy4gIEl0IGlzCisJZW5hYmxlZCBvbmx5IHdoZW4gb2xkIG1hYyBmb250IHN1cHBvcnQgaXMgY29uZmlndXJlZC4KKworMjAwOC0xMC0wNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19DSUQsIFRUQUdfRk9ORCwgVFRBR19MV0ZOLAorCVRUQUdfUE9TVCwgVFRBR19zZm50LCBUVEFHX1RZUDEsIFRUQUdfdHlwMSk6IE5ldyB0YWdzIHRvIHNpbXBsaWZ5CisJdGhlIHJlcGVhdGVkIGNhbGN1bGF0aW9ucyBvZiB0aGVzZSB2YWx1ZXMgaW4gZnRvYmpzLmMgYW5kIGZ0bWFjLmMuCisJKiBzcmMvYmFzZS9mdG9ianMuYzogUmVwbGFjZSBhbGwgRlRfTUFLRV9UQUcgYnkgbmV3IHRhZ3MuCisJKiBzcmMvYmFzZS9mdG1hYy5jOiBEaXR0by4KKwkqIGJ1aWxkcy9tYWMvZnRtYWMuYzogRGl0dG8uCisKKzIwMDgtMTAtMDQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9sb29rdXBfUFNfaW5fc2ZudF9zdHJlYW0pOiBSZW1vdmUgd3JvbmcKKwlpbml0aWFsaXphdGlvbiBvZiAqaXNfc2ZudF9jaWQuCisKKzIwMDgtMTAtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKTogUmVtb3ZlIGNvbXBpbGVyCisJd2FybmluZ3MuCisKKzIwMDgtMTAtMDQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9sb29rdXBfUFNfaW5fc2ZudCk6IFJlcGxhY2VkIGJ5Li4uCisJKGZ0X2xvb2t1cF9QU19pbl9zZm50X3N0cmVhbSk6IFRoaXMuCisJKG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKTogTmV3IGZ1bmN0aW9uLiAgSXQgY2hlY2tzIHdoZXRoZXIKKwl0aGUgc3RyZWFtIGlzIHNmbnQtd3JhcHBlZCBUeXBlMSBQUyBmb250IG9yIHNmbnQtd3JhcHBlZCBDSUQta2V5ZWQKKwlmb250LCB0aGVuIHRyeSB0byBvcGVuIGEgZmFjZSBmb3IgZ2l2ZW4gZmFjZV9pbmRleC4KKwkoTWFjX1JlYWRfc2ZudF9SZXNvdXJjZSk6IFJlcGxhY2UgdGhlIGNvbWJpbmF0aW9uIG9mCisJYGZ0X2xvb2t1cF9QU19pbl9zZm50JyBhbmQgYG9wZW5fZmFjZV9mcm9tX2J1ZmZlcicgYnkKKwlgb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0nLgorCSogc3JjL2Jhc2UvZnRtYWMuYyAoRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKTogRGl0dG8uCisJKiBidWlsZHMvbWFjL2Z0bWFjLmMgKEZUX05ld19GYWNlX0Zyb21fU0ZOVCk6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRiYXNlLmg6IFJlbW92ZSBgZnRfbG9va3VwX1BTX2luX3NmbnQnIGFuZCBhZGQKKwlgb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0nLgorCisyMDA4LTEwLTAzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfbG9va3VwX1BTX2luX3NmbnQpOiBTZXQgKmlzX3NmbnRfY2lkIHRvCisJRkFMU0UgaWYgbmVpdGhlciBgQ0lEICcgbm9yIGBUWVAxJyBpcyBmb3VuZCBpbiB0aGUgc2ZudCBjb250YWluZXIuCisKKzIwMDgtMTAtMDMgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IERlZmluZSBGVF9NQUNJTlRPU0ggd2hlbiBTQyBvcgorCU1yQyBjb21waWxlciBvZiBNUFcgaXMgdXNlZC4gIFRoZXNlIGNvbXBpbGVycyBkbyBub3QgZGVmaW5lIHRoZQorCW1hY3JvIF9fQVBQTEVfXyBieSB0aGVtc2VsdmVzLgorCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IERpdHRvLgorCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oOiBEaXR0by4KKwkqIHNyYy9iYXNlL2Z0YmFzZS5jOiBVc2UgRlRfTUFDSU5UT1NIIGluc3RlYWQgb2YgX19BUFBMRV9fLCB0bworCWluY2x1ZGUgZnRtYWMuYyBpZiBGcmVlVHlwZSAyIGlzIGJ1aWx0IGJ5IE1QVy4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBVc2UgRlRfTUFDSU5UT1NIIGluc3RlYWQgb2YgX19BUFBMRV9fLCB0bworCWVuYWJsZSBzaGFyZWQgZnVuY3Rpb25zIGZvciBmdG1hYy5jIGlmIEZyZWVUeXBlIDIgaXMgYnVpbHQgYnkgTVBXLgorCisJKiBidWlsZHMvbWFjL2Z0bWFjLmM6IEluY2x1ZGUgZnRiYXNlLmguCisJKG1lbW9yeV9zdHJlYW1fY2xvc2UpOiBSZW1vdmVkLgorCShuZXdfbWVtb3J5X3N0cmVhbSk6IERpdHRvLgorCShvcGVuX2ZhY2VfZnJvbV9idWZmZXIpOiBSZW1vdmVkLiAgVXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbgorCWZ0b2Jqcy5jLgorCShmdF9sb29rdXBfUFNfaW5fc2ZudCk6IERpdHRvLgorCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0OiBCdWlsZCBmdG1hYy5jIGFzIGFuCisJaW5jbHVkZWQgcGFydCBvZiBmdGJhc2UuYywgdG8gc2hhcmUgdGhlIGZ1bmN0aW9ucyBpbiBmdG9ianMuYy4gIFRoZQorCXJ1bGUgY29tcGlsaW5nIGZ0bWFjLmMgc2VwYXJhdGVseSBpcyByZW1vdmVkIGFuZCB0aGUgcnVsZSBjb3B5aW5nCisJZnRiYXNlLmMgZnJvbSBzcmMvYmFzZS9mdGJhc2UuYyB0byBidWlsZHMvbWFjL2Z0YmFzZS5jIGlzIGFkZGVkLgorCSogYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dDogRGl0dG8uCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0OiBEaXR0by4KKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dDogRGl0dG8uCisKKzIwMDgtMTAtMDIgIEJyYW0gVGFzc3lucyAgPGJyYW10QGVuZm9jdXMuYmU+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IE1hcCBDSUQgMCB0byBHSUQgMC4gIFRoaXMKKwlmaXhlcyBTYXZhbm5haCBidWcgIzI0NDMwLgorCisyMDA4LTEwLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9mcmVldHlwZS5tayAoQkFTRV9IKTogUmVuYW1lIHRvLi4uCisJKElOVEVSTkFMX0gpOiBUaGlzLgorCShGUkVFVFlQRV9IKTogVXBkYXRlZC4KKwkqIHNyYy9iYXNlL3J1bGVzLm1rOiAoQkFTRV9PQkpfUywgT0JKX0RJUi8lLiRPKTogQWRkIEJBU0VfSC4KKwkqIHNyYy9iZGYvcnVsZXMubWsgKEJERl9EUlZfSCk6IEFkZCBiZGZlcnJvci5oLgorCSogc3JjL2NhY2hlL3J1bGVzLm1rIChDQUNIRV9EUlZfSCk6IEFkZCBmdGNjYWNoZS5oIGFuZCBmdGNzYml0cy5oLgorCSogc3JjL3BjZi9ydWxlcy5tayAoUENGX0RSVl9IKTogQWRkIHBjZnJlYWQuaC4KKwkqIHNyYy9yYXN0ZXIvcnVsZXMubWsgKFJBU1RFUl9EUlZfSCk6IEFkZCBmdG1pc2MuaC4KKwkqIHNyYy90eXBlNDIvcnVsZXMubWsgKFQ0Ml9EUlZfSCk6IEFkZCB0NDJ0eXBlcy5oLgorCisyMDA4LTEwLTAyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdGJhc2UuaDogTmV3IGZpbGUgdG8gZGVjbGFyZSB0aGUgcHJpdmF0ZSB1dGlsaXR5CisJZnVuY3Rpb25zIHNoYXJlZCBieSB0aGUgc291cmNlcyBvZiBiYXNlIG1vZHVsZXMuICBDdXJyZW50bHksCisJYGZ0X2xvb2t1cF9QU19pbl9zZm50JyBhbmQgYG9wZW5fZmFjZV9mcm9tX2J1ZmZlcicgYXJlIGRlY2xhcmVkIHRvCisJc2hhcmUgYmV0d2VlbiBmdG9ianMuYyBhbmQgZnRtYWMuYy4KKworCSogc3JjL2Jhc2UvcnVsZS5tazogQWRkIGZ0YmFzZS5oLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYzogSW5jbHVkZSBmdGJhc2UuaC4KKwkobWVtb3J5X3N0cmVhbV9jbG9zZSk6IEJ1aWxkIG9uIGFueSBwbGF0Zm9ybSB3aGVuIG9sZCBNYWNPUyBmb250CisJc3VwcG9ydCBpcyBlbmFibGVkLgorCShuZXdfbWVtb3J5X3N0cmVhbSk6IERpdHRvLgorCShvcGVuX2ZhY2VfZnJvbV9idWZmZXIpOiBCdWlsZCBvbiBhbnkgcGxhdGZvcm0gd2hlbiBvbGQgTWFjT1MgZm9udAorCXN1cHBvcnQgaXMgZW5hYmxlZC4gIFRoZSBjb3VudGluZyBvZiB0aGUgZmFjZSBpbiBhIGZvbnQgZmlsZSBpcworCXNsaWdodGx5IGRpZmZlcmVudCBiZXR3ZWVuIENhcmJvbi1kZXBlbmRlbnQgcGFyc2VyIGFuZCBDYXJib24tZnJlZQorCXBhcnNlci4gIFRoZXkgYXJlIG1lcmdlZCB3aXRoIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25kaXRpb25hbC4KKwkoZnRfbG9va3VwX1BTX2luX3NmbnQpOiBEaXR0by4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogSW5jbHVkZSBmdGJhc2UuaC4KKwkobWVtb3J5X3N0cmVhbV9jbG9zZSk6IFJlbW92ZWQuCisJKG5ld19tZW1vcnlfc3RyZWFtKTogRGl0dG8uCisJKG9wZW5fZmFjZV9mcm9tX2J1ZmZlcik6IFJlbW92ZWQuICBVc2UgdGhlIGltcGxlbWVudGF0aW9uIGluCisJZnRvYmpzLmMuCisJKGZ0X2xvb2t1cF9QU19pbl9zZm50KTogRGl0dG8uCisKKzIwMDgtMTAtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogYHBzbmFtZXNfZXJyb3InIGlzIG9ubHkgbmVlZGVkCisJaWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIGlzIGRlZmluZWQuCisKKzIwMDgtMTAtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2RvbmUpLCBzcmMvY2ZmL2NmZm9ianMuYworCShjZmZfZmFjZV9kb25lKSwgc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2RvbmUpLAorCXNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0ZhY2VfRG9uZSksIHNyYy9jaWQvY2lkb2Jqcy5jCisJKGNpZF9mYWNlX2RvbmUpLCBzcmMvYmRmL2JkZmRyaXZyLiAoQkRGX0ZhY2VfRG9uZSksCisJc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfZmFjZV9kb25lKTogUHJvdGVjdCBhZ2FpbnN0IGZhY2UgPT0gMC4KKwlSZXBvcnRlZCBieSBHcmFoYW0gQXNoZXIuCisKKzIwMDgtMDktMzAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL3J1bGVzLm1rOiBBZGQgY29uZGl0aW9uYWwgc291cmNlIHRvIEJBU0VfU1JDLCBmb3IgYG1ha2UKKwltdWx0aScgb24gTWFjIE9TIFguICBJZiB0aGUgbWFjcm8gJChmdG1hY19jKSBpcyBkZWZpbmVkLAorCSQoQkFTRV9ESVIpLyQoZnRtYWNfYykgaXMgYWRkZWQgdG8gQkFTRV9TUkMuICBJbiBhIG5vcm1hbCBidWlsZCwgdGhlCisJbGFjayBvZiBmdG1hYy5jIGluIEJBU0VfU1JDIGlzIG5vdCBzZXJpb3VzIGJlY2F1c2UgZnRiYXNlLmMgaW5jbHVkZXMKKwlmdG1hYy5jLgorCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW46IEFkZCBhIG1hY3JvIGRlZmluaXRpb24gb2YgJChmdG1hY19jKS4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IEFkZCBwcm9jZWR1cmUgdG8gc2V0IHVwIGFwcHJvcHJpYXRlCisJdmFsdWUgb2YgJChmdG1hY19jKSB3aXRoIHRoZSBjb25zaWRlcmF0aW9uIG9mIHRoZSBhdmFpbGFiaWxpdHkgb2YKKwlDYXJib24gZnJhbWV3b3JrLgorCisyMDA4LTA5LTMwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9KYW1maWxlOiBBZGQgdGFyZ2V0IGZvciBtdWx0aSBidWlsZCBieSBqYW0gb24gTWFjIE9TIFguCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTmV3X0ZhY2UpOiBGaXggdGhlIGNvbmRpdGlvbiB0byBpbmNsdWRlIHRoaXMKKwlmdW5jdGlvbiBmb3IgTVBXIGJ1aWxkaW5nLiAgSXQgaXMgc3luY2hyb25pemVkIHRoZSBjb25kaXRpb24gdG8KKwlpbmNsdWRlIGZ0bWFjLmMgc291cmNlIGludG8gZnRiYXNlLmMuCisKKzIwMDgtMDktMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChDRkZfT3BlcmF0b3IsIGNmZl9hcmd1bWVudF9jb3VudHMsCisJY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBIYW5kbGUgKGludmFsaWQpCisJYGNhbGxvdGhlcnN1YnInIGFuZCBgcG9wJyBpbnN0cnVjdGlvbnMuCisKKzIwMDgtMDktMjIgIEpvaG4gVHl0Z2F0ICA8Sm9obi5UeXRnYXRAZXNrby5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNDMwNy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKENJRF9GYWNlUmVjKSwKKwlzcmMvdHlwZTQyL3Q0MnR5cGVzLmggKFQ0Ml9GYWNlUmVjKTogQ29tbWVudCBvdXQgYGFmbV9kYXRhJy4KKworMjAwOC0wOS0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogRG9uJ3QgZGVyZWZlcmVuY2UKKwlgdGFyZ2V0X21hcCcgaWYgRlRfUkFTVEVSX0ZMQUdfRElSRUNUIGlzIHNldC4gIFByb2JsZW0gcmVwb3J0ZWQgYnkKKwlTdGVwaGFuIFQuIExhdmF2ZWogPHN0bEBudXdlbi5uZXQ+LgorCisyMDA4LTA5LTIxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvb3R2YWxpZC9KYW1maWxlOiBBZGQgbWlzc2luZyB0YXJnZXQgYG90dm1hdGgnIGZvciBtdWx0aSBidWlsZAorCWJ5IGphbS4KKwkqIHNyYy9zZm50L0phbWZpbGU6IEFkZCBtaXNzaW5nIHRhcmdldCBgdHRtdHgnIGZvciBtdWx0aSBidWlsZCBieQorCWphbS4KKworMjAwOC0wOS0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9maW5kX2NlbGwpOiBGaXggdGhyZXNob2xkLiAgVGhlIHZhbHVlcworCXBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBhbHJlYWR5IGBub3JtYWxpemVkJy4gIFByb2JsZW0gcmVwb3J0ZWQKKwlieSBTdGVwaGFuIFQuIExhdmF2ZWogPHN0bEBudXdlbi5uZXQ+LgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDA4LTA5LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgorCShGVF9PdXRsaW5lX0RlY29tcG9zZSk6IERlY29yYXRlIHdpdGggdHJhY2luZyBtZXNzYWdlcy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgW0RFQlVHX0dSQVlTXTogUmVwbGFjZSB3aXRoCisJRlRfREVCVUdfTEVWRUxfVFJBQ0UuCisJW19TVEFOREFMT05FXyAmJiBGVF9ERUJVR19MRVZFTF9UUkFDRV06IEluY2x1ZGUgc3RkaW8uaCBhbmQKKwlzdGRhcmcuaC4KKworCShGVF9UUkFDRSkgW19TVEFOREFMT05FX106IFJlbW92ZS4KKwkoRlRfTWVzc2FnZSkgW19TVEFOREFMT05FXyAmJiBGVF9ERUJVR19MRVZFTF9UUkFDRV06IE5ldyBmdW5jdGlvbi4KKwkoRlRfVFJBQ0U1LCBGVF9UUkFDRTcpIFtfU1RBTkRBTE9ORV9dOiBOZXcgbWFjcm9zLgorCShGVF9FUlJPUikgW19TVEFOREFMT05FX106IFVwZGF0ZWQuCisKKwkoZ3JheV9obGluZSkgW0ZUX0RFQlVHX0xFVkVMX1RSQUNFXTogRml4IGNvbmRpdGlvbi4KKwlVc2UgRlRfVFJBQ0U3LgorCShncmF5X2R1bXBfY2VsbHMpOiBNYWtlIGl0IGBzdGF0aWMgdm9pZCcuCisJKGdyYXlfY29udmVydF9nbHlwaCk6IFVzZSBGVF9UUkFDRTcuCisKKwkoRlRfT3V0bGluZV9EZWNvbXBvc2UpIFtfU1RBTkRBTE9ORV9dOiBTeW5jaHJvbml6ZSB3aXRoIHZlcnNpb24gaW4KKwlmdG91dGxuLmMuCisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jLmMgKEZUX0dldF9BZHZhbmNlLCBGVF9HZXRfQWR2YW5jZXMpOiBVc2UKKwlGVF9FUlJPUl9CQVNFLgorCisJKiBkb2NzL2Zvcm1hdHMudHh0OiBVcGRhdGVkLgorCisyMDA4LTA5LTE5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jOiBJbXBvcnQgc2ZudC13cmFwcGVkIFR5cGUxIGFuZCBzZm50LXdyYXBwZWQKKwlDSUQta2V5ZWQgZm9udCBzdXBwb3J0LgorCSogYnVpbGRzL21hYy9mdG1hYy5jOiBEaXR0by4KKworMjAwOC0wOS0xOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX3NmbnRfUmVzb3VyY2UpOiBGaXggZG91YmxlIGZyZWUgYnVnIGluCisJc2ZudC13cmFwcGVkIFR5cGUxIGFuZCBzZm50LXdyYXBwZWQgQ0lELWtleWVkIGZvbnQgc3VwcG9ydCBjb2RlLgorCWBvcGVuX2ZhY2VfZnJvbV9idWZmZXInIGZyZWVzIHRoZSBwYXNzZWQgYnVmZmVyIGlmIGl0IGNhbm5vdCBvcGVuIGEKKwlmYWNlIGZyb20gdGhlIGJ1ZmZlciwgc28gdGhlIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0LgorCisyMDA4LTA5LTE5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfc2ZudF9SZXNvdXJjZSk6IEFkZCBpbml0aWFsIHN1cHBvcnQKKwlmb3Igc2ZudC13cmFwcGVkIFR5cGUxIGFuZCBzZm50LXdyYXBwZWQgQ0lELWtleWVkIGZvbnQuCisJKGZ0X2xvb2t1cF9QU19pbl9zZm50KTogTmV3IGZ1bmN0aW9uIHRvIGxvb2sgdXAgYFRZUDEnIG9yIGBDSUQgJworCXRhYmxlIGluIHNmbnQgdGFibGUgZGlyZWN0b3J5LiAgSXQgaXMgdXNlZCBiZWZvcmUgbG9hZGluZyBUcnVlVHlwZQorCWZvbnQgZHJpdmVyLgorCisJKiBkb2NzL0NIQU5HRVM6IEFkZCBub3RlIGFib3V0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiBzZm50LXdyYXBwZWQKKwlUeXBlMSBhbmQgc2ZudC13cmFwcGVkIENJRC1rZXllZCBmb250IHN1cHBvcnQuCisKKzIwMDgtMDktMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRzeXN0ZW0uYyAoRlRfRG9uZV9NZW1vcnkpOiBVc2UgZnRfc2ZyZWUgZGlyZWN0bHkgZm9yCisJb3J0aG9nb25hbGl0eSAoZnRfZnJlZSBhbmQgZnRfc2ZyZWUgY291bGQgYmVsb25nIHRvIGRpZmZlcmVudCBtZW1vcnkKKwlwb29scykuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjQyOTcuCisKKzIwMDgtMDktMTggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogVXNlIFRUQUdfT1RUTyBkZWZpbmVkCisJaW4gdHRhZ3MuaCBpbnN0ZWFkIG9mIG51bWVyaWNhbCB2YWx1ZSAweDRGNTQ1NDRGTC4KKworMjAwOC0wOS0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmgsIHNyYy9jZmYvY2ZmZ2xvYWQuYworCShjZmZfZGVjb2Rlcl9zZXRfd2lkdGhfb25seSk6IEVsaW1pbmF0ZSBmdW5jdGlvbiBjYWxsLgorCisyMDA4LTA5LTE1ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCUZpeCBTYXZhbm5haCBidWcgIzI0MTc5LCByZXBvcnRlZCBieSBCcmFtIFRhc3N5bnMuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAobW1fYXhpc191bm1hcCwgVDFfR2V0X01NX1Zhcik6IEZpeCBjb21wdXRhdGlvbgorCW9mIGRlZmF1bHQgdmFsdWVzLgorCisyMDA4LTA5LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90b29scy9nbG5hbWVzLnB5IChtYWluKTogU3Vycm91bmQgYGZ0X2dldF9hZG9iZV9nbHlwaF9pbmRleCcKKwlhbmQgYGZ0X2Fkb2JlX2dseXBoX2xpc3QnIHdpdGggRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUIHRvCisJcHJldmVudCB1bmNvbmRpdGlvbmFsIGRlZmluaXRpb24uICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjQyNDEuCisKKwkqIHNyYy9wc25hbWVzL3BzdGFibGVzLmg6IFJlZ2VuZXJhdGVkLgorCisyMDA4LTA5LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGF1dG9nZW4uc2gsIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCwgYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IE1pbm9yCisJYmVhdXRpZnlpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaCwgaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmg6IFByb3RlY3QgYWdhaW5zdCBGcmVlVHlwZSAxLgorCVNvbWUgb3RoZXIgbWlub3IgZml4ZXMuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmg6IFN5bmNocm9uaXplIHdpdGgKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLgorCisyMDA4LTA5LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0YmFzZS5jOiBJbmNsdWRlIGZ0YWR2YW5jLmMuCisKKzIwMDgtMDktMTEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluOiBEdXBsaWNhdGUgdGhlIGNwcCBjb21wdXRhdGlvbiBvZgorCUZUX1NJWkVPRl97SU5UfExPTkd9IGZyb20gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaC4KKwkoRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUyk6IE5ldyBtYWNyby4gIElmIGRlZmluZWQsIHRoZSBjcHAKKwljb21wdXRhdGlvbiBpcyBkaXNhYmxlZCBhbmQgdGhlIHN0YXRpY2FsbHkgY29uZmlndXJlZCBzaXplcyBhcmUKKwl1c2VkLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzIxMjUwLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBBZGQgdGhlIGNoZWNrcyB0byBjb21wYXJlIHRoZSBjcHAKKwljb21wdXRhdGlvbiByZXN1bHRzIG9mIHRoZSBiaXQgbGVuZ3RoIG9mIGludCBhbmQgbG9uZyB2ZXJzdXMgdGhlCisJc2l6ZXMgZGV0ZWN0ZWQgYnkgcnVubmluZyBgY29uZmlndXJlJy4gIElmIHRoZSByZXN1bHRzIGFyZQorCWRpZmZlcmVudCwgRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUyBpcyBkZWZpbmVkIHRvIHByaW9yaXRpemUgdGhlCisJcmVzdWx0cy4KKwlOZXcgb3B0aW9uIC0te2VuYWJsZXxkaXNhYmxlfS1iaWFyY2gtY29uZmlnIGlzIGFkZGVkIHRvIGRlZmluZSBvcgorCXVuZGVmaW5lIEZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMgbWFudWFsbHkuCisKKzIwMDgtMDktMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENsZWFyIEZUMl9FWFRSQV9MSUJTIHdoZW4gQ2FyYm9uIG9yCisJQXBwbGljYXRpb25TZXJ2aWNlIGZyYW1ld29yayBpcyBtaXNzaW5nLiAgQWx0aG91Z2ggdGhpcyB2YWx1ZSBpcyBub3QKKwl1c2VkIGluIGJ1aWxkaW5nIG9mIEZyZWVUeXBlMiwgaXQgaXMgd3JpdHRlbiBpbiBgZnJlZXR5cGUyLnBjJyBhbmQKKwlgZnJlZXR5cGUtY29uZmlnJy4KKworMjAwOC0wOS0wMSAgZGF2aWQgdHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2FjaGUvZnRjY21hcC5jIChGVENfQ01hcENhY2hlX0xvb2t1cCk6IEFjY2VwdCBhIG5lZ2F0aXZlIGNtYXAKKwlpbmRleCB0byBtZWFuIGB1c2UgZGVmYXVsdCBjYWNoZWQgRlRfRmFjZSdzIGNoYXJtYXAnLiAgVGhpcyBmaXhlcworCVNhdmFubmFoIGJ1ZyAjMjI2MjUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaDogRG9jdW1lbnQgaXQuCisKKworCU1ha2UgRlRfTXVsRml4IGFuIGlubGluZWQgZnVuY3Rpb24uICBUaGlzIGlzIGRvbmUgdG8gc3BlZWQgdXAKKwlGcmVlVHlwZSBhIGxpdHRsZSAob24geDg2IDMlIHdoZW4gbG9hZGluZytoaW50aW5nLCAxMCUgd2hlbgorCXJlbmRlcmluZywgQVJNIHNhdmluZ3MgYXJlIG1vcmUgaW1wb3J0YW50IHRob3VnaCkuICBEaXNhYmxlIHRoaXMgYnkKKwl1bmRlZmluaW5nIEZUX0NPTkZJR19PUFRJT05fSU5MSU5FX01VTEZJWC4KKworCVVzZSBvZiBhc3NlbWJsZXIgY29kZSBjYW4gbm93IGJlIGNvbnRyb2xsZWQgd2l0aAorCUZUX0NPTkZJR19PUFRJT05fTk9fQVNTRU1CTEVSLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLCBidWlsZHMvdW5peC9mdGNvbmZpZy5pbgorCVshRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVJdIChGVF9NdWxGaXhfYXJtKTogTmV3IGFzc2VtYmxlcgorCWltcGxlbWVudGF0aW9uLgorCVshRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVJdIChGVF9NdWxGaXhfaTM4Nik6IEFzc2VtYmxlcgorCWltcGxlbWVudGF0aW9uIHRha2VuIGZyb20gYGZ0Y2FsYy5jJy4KKwlbIUZUX0NPTkZJR19PUFRJT05fTk9fQVNTRU1CTEVSXSAoRlRfTVVMRklYX0FTU0VNQkxFUik6IE5ldyBtYWNybworCXdoaWNoIGlzIGRlZmluZWQgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbgorCW9mIEZUX011bEZpeC4KKwlbRlRfQ09ORklHX09QVElPTl9JTkxJTkVfTVVMRklYICYmIEZUX01VTEZJWF9BU1NFTUJMRVJdCisJKEZUX01VTEZJWF9JTkxJTkVEKTogTmV3IG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oIChGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUiwKKwlGVF9DT05GSUdfT1BUSU9OX0lOTElORV9NVUxGSVgpOiBOZXcgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IFVwZGF0ZWQgdG8gaGFuZGxlIEZUX01VTEZJWF9JTkxJTkVELgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYzogVXBkYXRlZCB0byB1c2UgRlRfTVVMRklYX0FTU0VNQkxFUiBhbmQKKwlGVF9NVUxGSVhfSU5MSU5FRC4KKworCisJQWRkIGEgbmV3IGhlYWRlciBuYW1lZCBGVF9BRFZBTkNFU19IIGRlY2xhcmluZyBzb21lIG5ldyBBUElzIHRvCisJZXh0cmFjdCB0aGUgYWR2YW5jZXMgb2Ygb25lIG9yIG1vcmUgZ2x5cGhzIHdpdGhvdXQgbmVjZXNzYXJpbHkKKwlsb2FkaW5nIHRoZWlyIG91dGxpbmVzLiAgQWxzbyBwcm92aWRlIGBmYXN0IGxvYWRlcnMnIGZvciB0aGUKKwlUcnVlVHlwZSwgVHlwZTEsIGFuZCBDRkYgZm9udCBkcml2ZXJzIChtb3JlIHRvIGNvbWUgbGF0ZXIpLgorCisJKiBzcmMvYmFzZS9mdGFkdmFuYy5jLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmg6IE5ldyBmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfQURWQU5DRVNfSCk6IE5ldyBtYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9BRFZBTkNFX09OTFkpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaCAoRlRfRmFjZV9HZXRBZHZhbmNlc0Z1bmMpOgorCWBmbGFncycgYW5kIGBhZHZhbmNlcycgYXJlIG5vdyBvZiB0eXBlIGBGVF9VSW50JyBhbmQgYEZUX0ZpeGVkJywKKwlyZXNwZWN0aXZlbHkuCisKKwkqIHNyYy9iYXNlL0phbWZpbGUgKF9zb3VyY2VzKSwgc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKTogQWRkCisJZnRhZHZhbmMuYy4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2FkdmFuY2VzKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfZHJpdmVyX2NsYXNzKTogUmVnaXN0ZXIgaXQuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfc2V0X3dpZHRoX29ubHkpOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogSGFuZGxlIGB3aWR0aF9vbmx5Jy4KKwkoY2ZmX3Nsb3RfbG9hZCk6IEhhbmRsZSBGVF9MT0FEX0FEVkFOQ0VfT05MWS4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5oIChjZmZfZGVjb2Rlcik6IE5ldyBlbGVtZW50IGB3aWR0aF9vbmx5Jy4KKwkoY2ZmX2RlY29kZXJfc2V0X3dpZHRoX29ubHkpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9nZXRfYWR2YW5jZXMpOiBOZXcgZnVuY3Rpb24uCisJKHR0X2RyaXZlcl9jbGFzcyk6IFJlZ2lzdGVyIGl0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChHZXRfSE1ldHJpY3MsIEdldF9WTWV0cmljcyk6IFJlbmFtZWQgdG8uLi4KKwkoVFRfR2V0X0hNZXRyaWNzLCBUVF9HZXRfVk1ldHJpY3MpOiBUaGlzLgorCVVwZGF0ZSBjYWxsZXJzLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuaDogRGVjbGFyZSB0aGVtLgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5oLCBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9HZXRfQWR2YW5jZXMpOiBOZXcKKwlmdW5jdGlvbi4KKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9kcml2ZXJfY2xhc3MpOiBSZWdpc3RlciBUMV9HZXRfQWR2YW5jZXMuCisKKworCUFkZCBjaGVja3MgZm9yIG1pbmltdW0gdmVyc2lvbiBvZiB0aGUgYGF1dG90b29scycgc3R1ZmYuCisKKwkqIGF1dG9nZW4uc2g6IEltcGxlbWVudCBpdC4KKwkoZ2V0X21ham9yX3ZlcnNpb24sIGdldF9taW5vcl92ZXJzaW9uLCBnZXRfcGF0Y2hfdmVyc2lvbiwKKwljb21wYXJlX3RvX21pbmltdW1fdmVyc2lvbiwgY2hlY2tfdG9vbF92ZXJzaW9uKTogTmV3IGF1eGlsaWFyeQorCWZ1bmN0aW9ucy4KKworCSogUkVBRE1FLkNWUzogRG9jdW1lbnQgaXQuCisKKzIwMDgtMDgtMjkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X29wZW5fZm9udCk6IFVzZSBUVEFHX09UVE8gZGVmaW5lZCBpbgorCXR0YWdzLmggaW5zdGVhZCBvZiBGVF9NQUtFX1RBRyggJ08nLCAnVCcsICdUJywgJ08nICkuCisKKzIwMDgtMDgtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9lbmNvZGluZyk6IFByb3RlY3QgYWdhaW5zdCBpbmZpbml0ZQorCWxvb3AuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjQxNTAgKHdoZXJlIGEgcGF0Y2ggaGFzIGJlZW4gcG9zdGVkCisJdG9vKS4KKworMjAwOC0wOC0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZS90MWFmbS5jIChjb21wYXJlX2tlcm5fcGFpcnMpLCBzcmMvcHhhdXgvYWZtcGFyc2UuYworCShhZm1fY29tcGFyZV9rZXJuX3BhaXJzKTogRml4IGNvbXBhcmlzb24uICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZworCSMyNDExOS4KKworMjAwOC0wOC0xOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1N0cmVhbV9OZXcpOiBJbml0aWFsaXplICphc3RyZWFtIGFsd2F5cywKKwlldmVuIGlmIHBhc3NlZCBsaWJyYXJ5IG9yIGFyZ3VtZW50cyBhcmUgaW52YWxpZC4gIFRoaXMgZml4ZXMgYSBidWcKKwl0aGF0IGFuIHVuaW5pdGlhbGl6ZWQgc3RyZWFtIGlzIGZyZWVkIHdoZW4gYW4gaW52YWxpZCBsaWJyYXJ5IGhhbmRsZQorCWlzIHBhc3NlZC4gIE9yaWdpbmFsbHkgcHJvcG9zZWQgYnkgTWlrZSBGYWJpYW4sIDIwMDgvMDgvMTggb24KKwlmcmVldHlwZS1kZXZlbC4KKwkoRlRfT3Blbl9GYWNlKTogRGl0dG8gKHN0cmVhbSkuCisJKGxvYWRfZmFjZV9pbl9lbWJlZGRlZF9yZm9yayk6IERpdHRvIChzdHJlYW0yKS4KKworMjAwOC0wOC0xOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogQWRkIGEgZmFsbGJhY2sgdG8gZ3Vlc3MgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUKKwlgUmVzb3VyY2VJbmRleCcgdHlwZS4gIEl0IGlzIHVzZWQgd2hlbiBidWlsdCB3aXRob3V0IGNvbmZpZ3VyZQorCShlLmcuLCBhIGJ1aWxkIHdpdGggSmFtKS4KKwkqIGJ1aWxkcy9tYWMvZnRtYWMuYzogRGl0dG8uCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBTZXQgSEFWRV9UWVBFX1JFU09VUkNFX0lOREVYIHRvIDEgb3IgMAorCWV4cGxpY2l0bHksIGV2ZW4gaWYgYFJlc291cmNlSW5kZXgnIGlzIHVuYXZhaWxhYmxlLgorCisyMDA4LTA4LTE4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBJbiBjaGVja2luZyBvZiBNYWMgT1MgWCBmZWF0dXJlcywKKwlhbGwtaW4tb25lIGhlYWRlciBmaWxlIGBDYXJib24uaCcgaXMgcmVwbGFjZWQgYnkgdGhlIG1pbmltdW0KKwloZWFkZXIgZmlsZSBgQ29yZVNlcnZpY2VzLmgnLCBzaW1pbGFyIHRvIGN1cnJlbnQgc3JjL2Jhc2UvZnRtYWMuYy4KKworMjAwOC0wOC0xOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAyX3ZhbGlkYXRlKTogU2tpcCB0aGUgdmFsaWRhdGlvbiBvZgorCXN1Yi1oZWFkZXIgd2hlbiBpdHMgY29kZV9jb3VudCBpcyAwLiAgTWFueSBKYXBhbmVzZSBEeW5hbGFiIGZvbnRzCisJaW5jbHVkZSBzdWNoIGFuIGVtcHR5IHN1Yi1oZWFkZXIgKGNvZGVfY291bnQgPT0gMCwgZmlyc3RfY29kZSA9PSAwCisJZGVsdGEgPT0gMCwgYnV0IG9mZnNldCAhPSAwKSBhcyB0aGUgc2Vjb25kIHN1Yi1oZWFkZXIgaW4gU0pJUyBjbWFwLgorCisyMDA4LTA4LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MXRva2Vucy5oOiBIYW5kbGUgYEZvcmNlQm9sZCcga2V5d29yZC4gIFRoaXMgZml4ZXMKKwlTYXZhbm5haCBidWcgIzIzOTk1LgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAocGFyc2VfZXhwYW5zaW9uX2ZhY3Rvcik6IE5ldyBjYWxsYmFjayBmdW5jdGlvbi4KKwkoY2lkX2ZpZWxkX3JlY29yZHMpOiBVc2UgaXQgZm9yIGBFeHBhbnNpb25GYWN0b3InLgorCSogc3JjL2NvZC9jaWR0b2tlbi5oOiBIYW5kbGUgYEZvcmNlQm9sZCcga2V5d29yZC4KKwlEb24ndCBoYW5kbGUgYEV4cGFuc2lvbkZhY3RvcicuCisKKzIwMDgtMDgtMDQgIEJyYW0gVGFzc3lucyAgPGJyYW10QGVuZm9jdXMuYmU+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCk6IEZpeCB0aGlua28gd2hpY2gKKwlyZXN1bHRlZCBpbiBpbmNvcnJlY3Qgc2NhbGluZy4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMyMzk3My4KKworMjAwOC0wOC0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQmUgbW9yZSB0b2xlcmFudCB3LnIudC4gaW52YWxpZCBlbnRyaWVzIGluIFNGTlQgdGFibGUgZGlyZWN0b3J5LgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoY2hlY2tfdGFibGVfZGlyKTogSWdub3JlIGludmFsaWQgZW50cmllcyBhbmQKKwlhZGp1c3QgdGFibGUgY291bnQuCisJQWRkIG1vcmUgdHJhY2UgbWVzc2FnZXMuCisJKHR0X2ZhY2VfbG9hZF9mb250X2Rpcik6IFVwZGF0ZWQuCisKKzIwMDgtMDctMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IE5vIGxvbmdlcgorCWFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBvbiB0aGUgc3RhY2sgaXMgdGhlIGJvdHRvbS1tb3N0CisJZWxlbWVudC4gIFR3byByZWFzb25zOgorCisJICBvIEFjY29yZGluZyB0byBwZW9wbGUgZnJvbSBBZG9iZSBpdCBpcyBtaXNzaW5nIGluIHRoZSBUeXBlIDIKKwkgICAgc3BlY2lmaWNhdGlvbiB0aGF0IHB1c2hpbmcgb2YgYWRkaXRpb25hbCwgc3VwZXJmbHVvdXMgYXJndW1lbnRzCisJICAgIG9uIHRoZSBzdGFjayBpcyBwcm9oaWJpdGVkLgorCisJICBvIEFjcm9yZWFkIGluIGdlbmVyYWwgaGFuZGxlcyBmb250cyBkaWZmZXJlbnRseSwgbmFtZWx5IGJ5IHBvcHBpbmcKKwkgICAgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbmVlZGVkIGZvciBhIHBhcnRpY3VsYXIgb3BlcmFuZCAoYXMgYSBQUworCSAgICBpbnRlcnByZXRlciB3b3VsZCBkbykuICBJbiBjYXNlIG9mIGJ1Z2d5IGZvbnRzIHRoaXMgY2F1c2VzIGEKKwkgICAgZGlmZmVyZW50IGludGVycHJldGF0aW9uIHdoaWNoIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgc3RhY2sgYXJlCisJICAgIHN1cGVyZmx1b3VzIGFuZCB3aGljaCBub3QuCisKKwlTaW5jZSB0aGVyZSBhcmUgQ0ZGIHN1YmZvbnRzIChlbWJlZGRlZCBpbiBQREZzKSB3aGljaCByZWx5IG9uCisJQWNyb3JlYWQncyBiZWhhdmlvdXIsIEZyZWVUeXBlIG5vdyBkb2VzIHRoZSBzYW1lLgorCisyMDA4LTA3LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgZXh0cmEgbWFwcGluZ3MgZm9yIGBUY29tbWFhY2NlbnQnIGFuZCBgdGNvbW1hYWNjZW50Jy4gIFRoaXMKKwlmaXhlcyBTYXZhbm5haCBidWcgIzIzOTQwLgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChXR0xfRVhUUkFfTElTVF9TSVpFKTogUmVuYW1lIHRvLi4uCisJKEVYVFJBX0dMWVBIX0xJU1RfU0laRSk6IFRoaXMuCisJSW5jcmVhc2UgYnkgMi4KKwkoZnRfd2dsX2V4dHJhX3VuaWNvZGVzKTogUmVuYW1lIHRvLi4uCisJKGZ0X2V4dHJhX2dseXBoX3VuaWNvZGVzKTogVGhpcy4KKwlBZGQgdHdvIGNvZGUgdmFsdWVzLgorCShmdF93Z2xfZXh0cmFfZ2x5cGhfbmFtZXMpOiBSZW5hbWUgdG8uLi4KKwkoZnRfZXh0cmFfZ2x5cGhfbmFtZXMpOiBUaGlzLgorCUFkZCB0d28gZ2x5cGhzLgorCShmdF93Z2xfZXh0cmFfZ2x5cGhfbmFtZV9vZmZzZXRzKTogUmVuYW1lIHRvLi4uCisJKGZ0X2V4dHJhX2dseXBoX25hbWVfb2Zmc2V0cyk6IFRoaXMuCisJQWRkIHR3byBvZmZzZXRzLgorCisJKHBzX2NoZWNrX3dnbF9uYW1lLCBwc19jaGVja193Z2xfdW5pY29kZSk6IFJlbmFtZSB0by4uLgorCShwc19jaGVja19leHRyYV9nbHlwaF9uYW1lLCBwc19jaGVja19leHRyYV9nbHlwaF91bmljb2RlKTogVGhpcy4KKwlVcGRhdGVkLgorCShwc191bmljb2Rlc19pbml0KTogVXBkYXRlZC4KKworMjAwOC0wNy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3ByZXBhcmUsCisJY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBJbXByb3ZlIGRlYnVnIG91dHB1dC4KKworMjAwOC0wNy0yMiAgTWFydGluIE1jQnJpZGUgIDxtbWNicmlkZUBlbXRleC5jb20+CisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwNF92YWxpZGF0ZSwgdHRfY21hcDRfY2hhcl9tYXBfbGluZWFyLAorCXR0X2NtYXA0X2NoYXJfbWFwX2JpbmFyeSk6IEhhbmRsZSBmb250cyB3aGljaCB0cmVhdCB0aGUgbGFzdCBzZWdtZW50CisJc3BlY2lhbGx5LiAgQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLCBzdWNoIGZvbnRzIHdvdWxkIGJlCisJaW52YWxpZCBidXQgYWNyb3JlYWQgYWNjZXB0cyB0aGVtLgorCisyMDA4LTA3LTE2ICBKb24gRm9zdGVyICA8Sm9uLkZvc3RlckBjYWJvdC5jby51az4KKworCSogc3JjL3Bmci9wZnJkcml2ci5jIChwZnJfZ2V0X2FkdmFuY2UpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvci4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bEZpeCk6IEZpeCBwb3J0YWJpbGl0eSBpc3N1ZS4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKE1BQ19OQU1FKSBbIUZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FU106CisJRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDgtMDctMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUhhbmRsZSBDSUQta2V5ZWQgZm9udHMgd3JhcHBlZCBpbiBhbiBTRk5UICh3aXRoIGNtYXBzKSBjb3JyZWN0bHkuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogUGFzcyBgcHVyZV9jZmYnLgorCUludmVydCBzaWRzIHRhYmxlIG9ubHkgaWYgYHB1cmVfY2ZmJyBpcyBzZXQuCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogVWRwYXRlZC4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBVcGRhdGVkLgorCVNldCBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIG9ubHkgaWYgcHVyZV9jZmYgaXMgc2V0LgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDgtMDctMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2xvY2EpOiBIYW5kbGUgYnVnZ3kgZm9udHMKKwl3aGVyZSBudW1fbG9jYXRpb25zIDwgbnVtX2dseXBocy4gIFByb2JsZW0gcmVwb3J0ZWQgYnkgRGluZyBMaS4KKworMjAwOC0wNy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJU2luY2UgRnJlZVR5cGUgdXNlcyBgJCh2YWx1ZSAuLi4pJywgd2Ugbm93IG5lZWQgR05VIG1ha2UgMy44MCBvcgorCW5ld2VyLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzIzNjQ4LgorCisJKiBjb25maWd1cmU6IHpzaCBkb2Vzbid0IGxpa2UgJHsxKyIkQCJ9LgorCVVwZGF0ZSBuZWVkZWQgR05VIG1ha2UgdmVyc2lvbi4KKwkqIGJ1aWxkcy90b3BsZXZlbC5tazogQ2hlY2sgZm9yIGAkKGV2YWwgLi4uKScuCisJKiBkb2NzL0lOU1RBTEwuR05VLCBkb2NzL0lOU1RBTEwuQ1JPU1MsIGRvY3MvSU5TVEFMTC5VTklYOiBEb2N1bWVudAorCWl0LgorCisyMDA4LTA3LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoRHJhd19Td2VlcCk6IElmIHNwYW4gaXMgc21hbGxlciB0aGFuIG9uZQorCXBpeGVsLCBvbmx5IGNoZWNrIGZvciBkcm9wb3V0cyBpZiBuZWl0aGVyIHN0YXJ0IG5vciBlbmQgcG9pbnQgbGllcworCW9uIGEgcGl4ZWwgY2VudGVyLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzIzNzYyLgorCisyMDA4LTA2LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi4zLjcgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi0zLTcnLgorCisJKiBkb2NzL0NIQU5HRVMsIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wCisJdmVyc2lvbiBudW1iZXIgdG8gMi4zLjcuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvajogcy8yLjMuNi8yLjMuNy8sIHMvMjM2LzIzNy8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gNy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MTg6My4KKworCSogZG9jcy9yZWxlYXNlOiBVcGRhdGVkLgorCisyMDA4LTA2LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9mdGdseXBoLmMgKEZUX01hdHJpeF9NdWx0aXBseSwgRlRfTWF0cml4X0ludmVydCk6IE1vdmUgdG8uLi4KKwkqIHNyYy9mdGNhbGMuYzogSGVyZS4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMyMzcyOS4KKworMjAwOC0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKFZlcnRpY2FsX1N3ZWVwX0Ryb3AsIEhvcml6b250YWxfU3dlZXBfRHJvcCwKKwlIb3Jpem9udGFsX0dyYXlfU3dlZXBfRHJvcCk6IFRlc3QgZm9yIGludGVyc2VjdGlvbnMgd2hpY2gKKwlkZWdlbmVyYXRlIHRvIGEgc2luZ2xlIHBvaW50IGNhbiBiZSBpZ25vcmVkOyB0aGlzIGhhcyBiZWVuIGNvbmZpcm1lZAorCWJ5IEdyZWcgSGl0Y2hjb2NrIGZyb20gTWljcm9zb2Z0LiAgKFRoaXMgd2FzIGNvbW1lbnRlZCBvdXQgY29kZS4pCisKKzIwMDgtMDYtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcHJvdmUgbmF2aWdhdGlvbiBpbiBBUEkgcmVmZXJlbmNlLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5IChodG1sX2hlYWRlcl8zKTogUmVuYW1lZCB0by4uLgorCShodG1sX2hlYWRlcl82KTogVGhpcy4KKwkoaHRtbF9oZWFkZXJfMywgaHRtbF9oZWFkZXJfM2ksIGh0bWxfaGVhZGVyXzQsIGh0bWxfaGVhZGVyXzUsCisJaHRtbF9oZWFkZXJfNXQpOiBOZXcgc3RyaW5ncy4KKwkodG9jX2Zvb3Rlcl9zdGFydCwgdG9jX2Zvb3Rlcl9lbmQpOiBOZXcgc3RyaW5ncy4KKwkoSHRtbEZvcm1hdHRlcjo6aHRtbF9oZWFkZXIpOiBVcGRhdGVkLgorCShIdG1sRm9ybWF0dGVyOjpodG1sX2luZGV4X2hlYWRlciwgSHRtbEZvcm1hdHRlcjo6aHRtbF90b2NfaGVhZGVyKToKKwlOZXcgc3RyaW5ncy4KKwkoSHRtbEZvcm1hdHRlcjo6aW5kZXhfZW50ZXIpOiBVc2UgYGh0bWxfaW5kZXhfaGVhZGVyJy4KKwkoSHRtbEZvcm1hdHRlcjo6aW5kZXhfZXhpdCk6IFByaW50IGBodG1sX2Zvb3RlcicuCisJKEh0bWxGb3JtYXR0ZXI6OnRvY19lbnRlcik6IFVzZSBgaHRtbF90b2NfaGVhZGVyJy4KKwkoSHRtbEZvcm1hdHRlcjo6dG9jX2V4aXQpOiBQcmludCBwcm9wZXIgZm9vdGVyLgorCisJQ29udmVydCB+IHRvIG5vbi1icmVha2FibGUgc3BhY2UuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKG1ha2VfaHRtbF9wYXJhKTogSW1wbGVtZW50IGl0LgorCVVwZGF0ZSBoZWFkZXIgZmlsZXMgYWNjb3JkaW5nbHkuCisKKzIwMDgtMDYtMjQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENoZWNrIHR5cGUgYFJlc291cmNlSW5kZXgnIGV4cGxpY2l0bHkKKwlhbmQgZGVmaW5lIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCBpZiBpdCBpcyBkZWZpbmVkLiAgTWFjIE9TIFggMTAuNQorCWJ1bmRsZXMgMTAuNHUgU0RLIHdpdGggTUFDX09TX1hfVkVSU0lPTl8xMF81IG1hY3JvIGJ1dCB3aXRob3V0CisJUmVzb3VyY2VJbmRleCB0eXBlIGRlZmluaXRpb24uICBUaGUgbWFjcm8gZG9lcyBub3QgaW5mb3JtIHRoZSB0eXBlCisJYXZhaWxhYmlsaXR5LgorCSogc3JjL2Jhc2UvZnRtYWMuYzogTW9yZSBwYXJlbnRoZXNlcyBhcmUgaW5zZXJ0ZWQgdG8gY2xhcmlmeSB0aGUKKwljb25kaXRpb25hbHMgdG8gZGlzYWJsZSBsZWdhY3kgQVBJcyBpbiBgMTAuNSBhbmQgbGF0ZXInIGNhc2VzLiAgSWYKKwlIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggaXMgbm90IGRlZmluZWQsIFJlc291cmNlSW5kZXggaXMgZGVmaW5lZC4KKworMjAwOC0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NDQU5UWVBFKTogRG9uJ3QgY2hlY2sgcmVuZGVyaW5nCisJbW9kZS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChSZW5kZXJfR2x5cGgsIFJlbmRlcl9HcmF5X0dseXBoLAorCURyYXdfU3dlZXApOiBOby1kcm9wb3V0IG1vZGUgaXMgdmFsdWUgMiwgbm90IHZhbHVlIDAuCisJKERyYXdfU3dlZXApOiBSZWFsbHkgc2tpcCBkcm9wb3V0IGhhbmRsaW5nIGZvciBuby1kcm9wb3V0IG1vZGUuCisKKzIwMDgtMDYtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jICh0MV9idWlsZGVyX2Nsb3NlX2NvbnRvdXIpOiBEb24ndCBhZGQgY29udG91cgorCWlmIGl0IGNvbnNpc3RzIG9mIG9uZSBwb2ludCBvbmx5LiAgQmFzZWQgb24gYSBwYXRjaCBmcm9tIFNhdmFubmFoCisJYnVnICMyMzY4MyAoZnJvbSBKb2huIFR5dGdhdCkuCisKKzIwMDgtMDYtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IFByb3RlY3QgYnl0ZWNvZGUgc3R1ZmYKKwl3aXRoIElTX0hJTlRFRC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDA4LTA2LTIyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBJZiBDRkxBR1MgaGFzIGAtaXN5c3Jvb3QgWFhYJyBvcHRpb24KKwlidXQgTERGTEFHUyBkb2VzIG5vdCwgaW1wb3J0IGl0IHRvIExERkxBR1MuICBUaGUgb3B0aW9uIGlzIHVzZWQgdG8KKwlzcGVjaWZ5IG5vbi1kZWZhdWx0IFNESyBvbiBNYWMgT1MgWCAoZS5nLiwgdW5pdmVyc2FsIGJpbmFyeSBTREsgZm9yCisJTWFjIE9TIFggMTAuNCBvbiBQb3dlclBDIHBsYXRmb3JtKS4gIEFsdGhvdWdoIEFwcGxlIFRlY2hOb3RlIDIxMzcKKwlyZWNvbW1lbmRzIHRvIGFkZCB0aGUgb3B0aW9uIG9ubHkgdG8gQ0ZMQUdTLCBMREZMQUdTIHNob3VsZCBpbmNsdWRlCisJaXQgYmVjYXVzZSBsaWJmcmVldHlwZS5sYSBpcyBidWlsdCB3aXRoIC1uby11bmRlZmluZWQuICBUaGlzIGZpeGVzIGEKKwlidWcgcmVwb3J0ZWQgYnkgUnlhbiBTY2htaWR0IGluIE1hY1BvcnRzLAorCWh0dHA6Ly90cmFjLm1hY3BvcnRzLm9yZy90aWNrZXQvMTUzMzEuCisKKzIwMDgtMDYtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUVuYWJsZSBhY2Nlc3MgdG8gdGhlIHZhcmlvdXMgZHJvcG91dCBydWxlcyBvZiB0aGUgQiZXIHJhc3Rlcml6ZXIuCisJUGFzcyBkcm9wb3V0IHJ1bGVzIGZyb20gdGhlIFRUIGJ5dGVjb2RlIGludGVycHJldGVyIHRvIHRoZQorCXJhc3Rlcml6ZXIuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTLAorCUZUX09VVExJTkVfRVhDTFVERV9TVFVCUyk6IE5ldyBmbGFncyBmb3IgRlRfT3V0bGluZS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChWZXJ0aWNhbF9Td2VlcF9Ecm9wLCBIb3Jpem9udGFsX1N3ZWVwX0Ryb3AsCisJSG9yaXpvbnRhbF9HcmF5X1N3ZWVwX0Ryb3ApOiBVc2Ugc2FtZSBtb2RlIG51bWJlcnMgYXMgZ2l2ZW4gaW4gdGhlCisJT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4KKwlGaXggbW9kZSA0IGNvbXB1dGF0aW9uLgorCShSZW5kZXJfR2x5cGgsIFJlbmRlcl9HcmF5X0dseXBoKTogSGFuZGxlIG5ldyBvdXRsaW5lIGZsYWdzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKSBDb252ZXJ0IHNjYW4gY29udmVyc2lvbgorCW1vZGUgdG8gRlRfT1VUTElORV9YWFggZmxhZ3MuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0NBTkNUUkwpOiBFbmFibGUgcHBlbSBjaGVjay4KKworMjAwOC0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IENvbXB1dGUgZmluYWwKKwlgZGljdC0+dW5pdHNfcGVyX2VtJyB2YWx1ZSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvCisJYGNmZmZhY2UtPnVuaXRzX3Blcl9FTScuICBPdGhlcndpc2UsIENGRnMgd2l0aG91dCBzdWJmb250cyBhcmUKKwlzY2FsZWQgaW5jb3JyZWN0bHkgaWYgdGhlIGZvbnQgbWF0cml4IGlzIG5vbi1zdGFuZGFyZC4gIFRoaXMgZml4ZXMKKwlTYXZhbm5haCBidWcgIzIzNjMwLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDgtMDYtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFNsaWdodGx5IGltcHJvdmUgYWxnb3JpdGhtIGZpeAorCWZyb20gMjAwOC0wNi0xOS4KKworMjAwOC0wNi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZS90MW9ianMuYyAoVDFfRmFjZV9Jbml0KTogRml4IGNoYW5nZSBmcm9tIDIwMDgtMDMtMjEuCisJUmVwb3J0ZWQgYnkgUGV0ZXIgV2VpbGJhY2hlciA8bW96aWxsYUB3ZWlsYmFjaGVyLm9yZz4uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOC0wNi0xNSAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy9vdHZhbGlkL290dmdwb3MuYyAob3R2X01hcmtCYXNlUG9zX3ZhbGlkYXRlKTogU2V0CisJYHZhbGlkLT5leHRyYTInIHRvIDEuICBUaGlzIGlzIHVuZG9jdW1lbnRlZCBpbiB0aGUgT3BlblR5cGUgMS41CisJc3BlY2lmaWNhdGlvbi4KKworMjAwOC0wNi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRml4KSA8YXNtPjogUHJvdGVjdCByZWdpc3RlcnMgY29ycmVjdGx5CisJZnJvbSBjbG9iYmVyaW5nLiAgUGF0Y2ggZnJvbSBTYXZhbm5haCBidWcgcmVwb3J0ICMyMzU1Ni4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwOC0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBhdXRvZ2VuLnNoOiBBZGQgb3B0aW9uIGAtLWluc3RhbGwnIHRvIGxpYnRvb2xpemUuCisKKzIwMDgtMDYtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjMuNiByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtNicuCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAKKwl2ZXJzaW9uIG51bWJlciB0byAyLjMuNi4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qOiBzLzIuMy41LzIuMy42Lywgcy8yMzUvMjM2Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA2LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToxNzozLgorCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoVDFfQnVpbGRlclJlYyk6IFJlbW92ZSBgc2NhbGVfeCcKKwlhbmQgYHNjYWxlX3knLgorCSogc3JjL2NmZi9jZmZnbG9hZC5oIChDRkZfQnVpbGRlcik6IFJlbW92ZSBgc2NhbGVfeCcgYW5kIGBzY2FsZV95Jy4KKworCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSC4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSC4KKworMjAwOC0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAob3Blbl9mYWNlKTogQ2hlY2sgYGNsYXp6LT5pbml0X2ZhY2UnIGFuZAorCWBjbGF6ei0+ZG9uZV9mYWNlJy4KKworMjAwOC0wNi0wOSAgVmFEaU0gIDxzX3NsaXZhQHJhbWJsZXIucnU+CisKKwlTdXBwb3J0IGRlYnVnZ2luZyBvbiBXaW5DRS4gIEZyb20gU2F2YW5uYWggcGF0Y2ggIzY1MzY7IHRoaXMgZml4ZXMKKwlidWcgIzIzNDk3LgorCisJKiBidWlsZHMvd2luMzIvZnRkZWJ1Zy5jIChPdXRwdXREZWJ1Z1N0cmluZ0V4KTogTmV3IGZ1bmN0aW9uL21hY3JvCisJYXMgYSByZXBsYWNlbWVudCBmb3IgT3V0cHV0RGVidWdTdHJpbmdBICh3aGljaCBXaW5DRSBkb2Vzbid0IGhhdmUpLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoZnRfZGVidWdfaW5pdCkgW19XSU4zMl9DRV06IFdpbkNFIGFwcGFyZW50bHkgZG9lc24ndCBoYXZlCisJZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisyMDA4LTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFJFQURNRS5DVlM6IFVwZGF0ZWQuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcsIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogVXBkYXRlZAorCWZvciBuZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZiBhbmQgZnJpZW5kcy4KKworMjAwOC0wNi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFwYXJzZS5oIChUMV9QYXJzZXJSZWMpOiBNYWtlIGBiYXNlX2xlbicgYW5kCisJYHByaXZhdGVfbGVuJyB1bnNpZ25lZC4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAocmVhZF9wZmJfdGFnKTogTWFrZSBgYXNpemUnIHVuc2lnbmVkIGFuZCByZWFkCisJaXQgYXMgc3VjaC4KKwkoVDFfTmV3X1BhcnNlciwgVDFfR2V0X1ByaXZhdGVfRGljdCk6IE1ha2UgYHNpemUnIHVuc2lnbmVkLgorCisKKwkqIHNyYy9iYXNlL2Z0c3RyZWFtLmMgKEZUX1N0cmVhbV9Ta2lwKTogUmVqZWN0IG5lZ2F0aXZlIHZhbHVlcy4KKworCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2JsZW5kX2Rlc2lnbl9wb3NpdGlvbnMpOiBDaGVjayBgbl9heGlzJworCWZvciBzYW5lIHZhbHVlLgorCUZpeCB0eXBvLgorCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfdGFibGVfYWRkKTogQ2hlY2sgYGlkeCcgY29ycmVjdGx5LgorCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycCAoSW5zX1NIQyk6IFVzZSBCT1VORFMoKSB0byBjaGVjaworCWBsYXN0X3BvaW50Jy4KKworCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX21heF9wcm9maWxlKTogTGltaXQKKwlgbWF4VHdpbGlnaHRQb2ludHMnLgorCisyMDA4LTA2LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVApOiBIYW5kbGUgY2FzZSBgb3JnX2Rpc3QgPT0gMCcKKwljb3JyZWN0bHkuICBUaGlzIGZpeGVzIGdseXBocyBgdCcgYW5kIGBoJyBvZiBBcmlhbCBOYXJyb3cgYXQgMTJwcGVtLgorCisyMDA4LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oIChGVENfRmFjZUlEKTogQ2hhbmdlIHR5cGUgYmFjayB0bworCUZUX1BvaW50ZXIuICBSZXBvcnRlZCBieSBJYW4gQnJpdHRlbiA8YnJpdHRlbkBjYXJpcy5jb20+LgorCisyMDA4LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlFbWl0IGhlYWRlciBpbmZvIGZvciBkZWZpbmVkIEZyZWVUeXBlIG9iamVjdHMgaW4gcmVmZXJlbmNlLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSAocmVfaGVhZGVyX21hY3JvKTogTmV3IHJlZ2V4cC4KKwkoQ29udGVudFByb2Nlc3Nvcjo6X19pbml0X18pOiBJbml0aWFsaXplIG5ldyBkaWN0aW9uYXJ5IGBoZWFkZXJzJy4KKwkoRG9jQmxvY2s6Ol9faW5pdF9fKTogQ29sbGVjdCBtYWNybyBoZWFkZXIgZGVmaW5pdGlvbnMuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKGhlYWRlcl9sb2NhdGlvbl9oZWFkZXIsCisJaGVhZGVyX2xvY2F0aW9uX2Zvb3Rlcik6IE5ldyBzdHJpbmdzLgorCShIdG1sRm9ybWF0dGVyOjpfX2luaXRfXyk6IFBhc3MgYGhlYWRlcnMnIGRpY3Rpb25hcnkuCisJKEh0bWxGb3JtYXR0ZXI6OnByaW50X2h0bWxfZmllbGQpOiBEb24ndCBlbWl0IHBhcmFncmFwaCB0YWdzLgorCShIdG1sRm9ybWF0dGVyOjpwcmludF9odG1sX2ZpZWxkX2xpc3QpOiBFbWl0IGVtcHR5IHBhcmFncmFwaC4KKwkoSHRtbEZvcm1hdHRlcjo6YmxvY2tfZW50ZXIpOiBFbWl0IGhlYWRlciBpbmZvLgorCisyMDA4LTA2LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX1VOUEFURU5URURfSElOVElOR19ILAorCUZUX0lOQ1JFTUVOVEFMX0gpOiBBZGRlZC4KKworMjAwOC0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weSAoU291cmNlQmxvY2s6Ol9faW5pdF9fKTogV2hpbGUKKwlsb29raW5nIGZvciBtYXJrdXAgdGFncywgcmV0dXJuIGltbWVkaWF0ZWx5IGFzIHNvb24gYSBzaW5nbGUgb25lIGlzCisJZm91bmQuCisKKzIwMDgtMDUtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRCk6IFRoZSBNRCBpbnN0cnVjdGlvbiBhbHNvIHVzZXMKKwlvcmlnaW5hbCwgdW5zY2FsZWQgaW5wdXQgdmFsdWVzLiAgQ29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrIGZyb20KKwlNaWNyb3NvZnQuCisKKzIwMDgtMDUtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoYmxvY2tfZm9vdGVyX3N0YXJ0LAorCWJsb2NrX2Zvb3Rlcl9taWRkbGUpOiBCZWF1dGlmeSBvdXRwdXQuCisKKzIwMDgtMDUtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChmY19ibGFja19yZW5kZXIpOiBSZXR1cm4gMCB3aGVuIHdlIGFyZQorCXRyeWluZyB0byByZW5kZXIgaW50byBhIHplcm8td2lkdGgvaGVpZ2h0IGJpdG1hcCwgbm90IGFuIGVycm9yIGNvZGUuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBNb3ZlIGluaXRpYWxpemF0aW9uCisJb2YgdGhlIGdyYXBoaWNzIHN0YXRlIGZvciBzdWJnbHlwaHMgdG8uLi4KKwkoVFRfSGludF9HbHlwaCk6IFRoaXMgZnVuY3Rpb24uCisJSGludGluZyBpbnN0cnVjdGlvbnMgZm9yIGEgY29tcG9zaXRlIGdseXBoIGFwcGFyZW50bHkgcmVmZXIgdG8gdGhlCisJanVzdCBoaW50ZWQgc3ViZ2x5cGhzLCBub3QgdGhlIHVuaGludGVkLCB1bnNjYWxlZCBvdXRsaW5lLiAgVGhpcworCXNlZW1zIHRvIGZpeCBTYXZhbm5haCBidWdzICMyMDk3MyBhbmQgKGF0IGxlYXN0IHBhcnRpYWxseSkgIzIzMzEwLgorCisyMDA4LTA1LTIwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIChGVF9OZXdfRmFjZV9Gcm9tX1N1aXRjYXNlKTogQ2hlY2sgaWYgdmFsaWQKKwlgYWZhY2UnIGlzIHJldHVybmVkIGJ5IEZUX05ld19GYWNlX0Zyb21fRk9ORCgpLiAgVGhlIHBhdGNoIHdhcworCXByb3Bvc2VkIGJ5IGFuIGFub255bW91cyByZXBvcnRlciBvZiBTYXZhbm5haCBidWcgIzIzMjA0LgorCisyMDA4LTA1LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzX2hpbnRzX2FwcGx5KTogUmVzZXQgc2NhbGUgdmFsdWVzIGFmdGVyCisJY29ycmVjdGlvbiBmb3IgcGl4ZWwgYm91bmRhcnkuICBXaXRob3V0IHRoaXMgcGF0Y2gsIHRoZSBlZmZlY3QgY2FuCisJYmUgY3VtdWxhdGl2ZSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIG1ha2luZyBnbHlwaHMgdGFsbGVyIGFuZAorCXRhbGxlciBhZnRlciBlYWNoIGNhbGwuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMTk5NzYuCisKKzIwMDgtMDUtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRkZWJ1Zy5jIChGVF9NZXNzYWdlLCBGVF9QYW5pYyk6IFNlbmQgb3V0cHV0IHRvIHN0ZGVyci4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMjMyODAuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOC0wNS0xOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChmdF93Z2xfZXh0cmFfdW5pY29kZXMsCisJZnRfd2dsX2V4dHJhX2dseXBoX25hbWVzLCBmdF93Z2xfZXh0cmFfZ2x5cGhfbmFtZV9vZmZzZXRzLAorCXBzX2NoZWNrX3dnbF9uYW1lLCBwc19jaGVja193Z2xfdW5pY29kZSk6IFVzZSBgc3RhdGljJyB0byBtYWtlCisJZGVjbGFyYXRpb25zIG5vbi1nbG9iYWwuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYzogQWRkIG1pc3NpbmcgY29tbWVudC4KKworMjAwOC0wNS0xNyAgU2FtIEhvY2V2YXIgIDxzYW1oPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IEhhbmRsZSB6ZXJvLWNvbnRvdXIKKwlnbHlwaHMgY29ycmVjdGx5LiAgUGF0Y2ggZnJvbSBTYXZhbm5haCBidWcgIzIzMjc3LgorCisyMDA4LTA1LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwOC0wNS0xNiAgU2VyZ2V5IFRvbHN0b3YgIDxzdG9sc3RvdkBlc3JpLmNvbT4KKworCUltcHJvdmUgc3VwcG9ydCBmb3IgV0dMNCBlbmNvZGVkIGZvbnRzLgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChXR0xfRVhUUkFfTElTVF9TSVpFKTogTmV3IG1hY3JvLgorCShmdF93Z2xfZXh0cmFfdW5pY29kZXMsIGZ0X3dnbF9leHRyYV9nbHlwaF9uYW1lcywKKwlmdF93Z2xfZXh0cmFfZ2x5cGhfbmFtZV9vZmZzZXRzKTogTmV3IGFycmF5cy4KKwkocHNfY2hlY2tfd2dsX25hbWUsIHBzX2NoZWNrX3dnbF91bmljb2RlKTogTmV3IGZ1bmN0aW9ucy4KKwkocHNfdW5pY29kZXNfaW5pdCk6IFVzZSB0aGVtIHRvIGFkZCBhZGRpdGlvbmFsIFVuaWNvZGUgbWFwcGluZ3MuCisKKzIwMDgtMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJPG9wX2Nsb3NlcGF0aD46IGBjbG9zZXBhdGgnIHdpdGhvdXQgYSBwYXRoIGlzIGEgbm8tb3AsIG5vdCBhbiBlcnJvcgorCShjZi4gdGhlIFBTIHJlZmVyZW5jZSBtYW51YWwpLgorCisJUmVwb3J0ZWQgYnkgTWFydGluIE1jQnJpZGUuCisKKzIwMDgtMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rIChDT05GSUdfR1VFU1MsIENPTkZJR19TVUIpOiBVcGRhdGVkLgorCisyMDA4LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2Vfc3VicnMpOiBBY2NlcHQgZm9udHMgd2l0aCBhIHN1YnJzIGFycmF5CisJd2hpY2ggY29udGFpbnMgYSBzaW5nbGUgYnV0IGVtcHR5IGVudHJ5LiAgVGhpcyBpcyB0ZWNobmljYWxseQorCWludmFsaWQgKHNpbmNlIGl0IG11c3QgZW5kIHdpdGggYHJldHVybicpLCBidXQuLi4KKworCVJlcG9ydGVkIGJ5IE1hcnRpbiBNY0JyaWRlLgorCisyMDA4LTA1LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaW5pc2ggZml4IG9mIHNjYWxpbmcgYnVnIG9mIENJRC1rZXllZCBDRkYgc3ViZm9udHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgsIHNyYy9iYXNlL2Z0Y2FsYy5jCisJKEZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQsIEZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkKTogTmV3CisJZnVuY3Rpb25zLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuaCAoQ0ZGX0ludGVybmFsKTogTmV3IHN0cnVjdC4gIEl0IGlzIHVzZWQgdG8KKwlwcm92aWRlIGdsb2JhbCBoaW50aW5nIGRhdGEgZm9yIGJvdGggdGhlIHRvcC1mb250IGFuZCBhbGwgc3ViZm9udHMKKwkod2l0aCBwcm9wZXIgc2NhbGluZykuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfbWFrZV9wcml2YXRlX2RpY3QpOiBOZXcgZnVuY3Rpb24sIHVzaW5nCisJY29kZSBmcm9tIGBjZmZfc2l6ZV9pbml0Jy4KKwkoY2ZmX3NpemVfaW5pdCwgY2ZmX3NpemVfZG9uZSwgY2ZmX3NpemVfc2VsZWN0LCBjZmZfc2l6ZV9yZXF1ZXN0KToKKwlVc2UgQ0ZGX0ludGVybmFsIGFuZCBoYW5kbGUgc3ViZm9udHMuCisJKGNmZl9mYWNlX2luaXQpOiBIYW5kbGUgdG9wLWRpY3QgYW5kIHN1YmZvbnQgbWF0cmljZXMgY29ycmVjdGx5OworCWFwcGx5IHNvbWUgaGV1cmlzdGljIGluIGNhc2Ugb2YgdW5saWtlbHkgbWF0cml4IGNvbmNhdGVuYXRpb24KKwlyZXN1bHRzLiAgVGhpcyBoYXMgYmVlbiBkaXNjdXNzZWQgd2l0aCBwZW9wbGUgZnJvbSBBZG9iZSAodGhhbmtzCisJZ29lcyBtYWlubHkgdG8gRGF2aWQgTGVtb24pIHdobyBjb25maXJtIHRoYXQgdGhlIENGRiBzcGVjcyBhcmUgZnV6enkKKwlhbmQgbm90IGNvcnJlY3QuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuaCAoY2ZmX2RlY29kZXJfcHJlcGFyZSk6IEFkZCBgc2l6ZScgYXJndW1lbnQuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2J1aWxkZXJfaW5pdCk6IFVwZGF0ZWQuCisJKGNmZl9kZWNvZGVyX3ByZXBhcmUpOiBIYW5kbGUgaGludHMgZ2xvYmFscyBmb3Igc3ViZm9udHMuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCShjZmZfc2xvdF9sb2FkKTogSGFuZGxpbmcgc2NhbGluZyBvZiBzdWJmb250cyBwcm9wZXJseS4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KTogVXNlIGl0LgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9Gb250RGljdFJlYyk6IE1ha2UgYHVuaXRzX3Blcl9lbScKKwlGVF9VTG9uZy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwOC0wNS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKGZudF9mYWNlX2dldF9kbGxfZm9udCwgRk5UX0ZhY2VfSW5pdCk6CisJSGFuZGxlIGNhc2UgYGZhY2VfaW5kZXggPCAwJy4KKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMDgtMDUtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpcnN0IHN0ZXBzIHRvIGZpeCB0aGUgc2NhbGluZyBidWcgb2YgQ0lELWtleWVkIENGRiBzdWJmb250cywKKwlyZXBvcnRlZCBieSBEaW5nIExpIG9uIDIwMDgvMDMvMjggb24gZnJlZXR5cGUtZGV2ZWwuCisKKwkqIHNyYy9iYXNlL2NmZi9jZmZwYXJzZS5jIChwb3dlcl90ZW5zKTogTmV3IGFycmF5LgorCShjZmZfcGFyc2VfcmVhbCk6IFJld3JpdHRlbiB0byBpbnRyb2R1Y2UgYSBmb3VydGggcGFyYW1ldGVyIHdoaWNoCisJcmV0dXJucyB0aGUgYHNjYWxpbmcnIG9mIHRoZSByZWFsIG51bWJlciBzbyB0aGF0IHdlIGhhdmUgbm8KKwlwcmVjaXNpb24gbG9zcy4gIFRoaXMgaXMgbm90IHVzZWQgeWV0LgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoY2ZmX3BhcnNlX2ZpeGVkX3Rob3VzYW5kKTogUmVwbGFjZSB3aXRoLi4uCisJKGNmZl9wYXJzZV9maXhlZF9zY2FsZWQpOiBUaGlzIGZ1bmN0aW9uLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgorCisyMDA4LTA1LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogQ2FsbCB0aGUgYXV0by1oaW50ZXIgd2l0aG91dAorCXRyYW5zZm9ybWF0aW9uIHNpbmNlIGl0IHJlY3Vyc2l2ZWx5IGNhbGxzIEZUX0xvYWRfR2x5cGguICBUaGlzIGZpeGVzCisJU2F2YW5uYWggYnVnICMyMzE0My4KKworMjAwOC0wNC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0J1aWxkZXJSZWMpOiBNYXJrIGBzY2FsZV94JworCWFuZCBgc2NhbGVfeScgYXMgb2Jzb2xldGUgc2luY2UgdGhleSBhcmVuJ3QgdXNlZC4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfYnVpbGRlcl9pbml0KTogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5oIChDRkZfQnVpbGRlcik6IE1hcmsgYHNjYWxlX3gnIGFuZCBgc2NhbGVfeScgYXMKKwlvYnNvbGV0ZSBzaW5jZSB0aGV5IGFyZW4ndCB1c2VkLgorCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfYnVpbGRlcl9pbml0KTogVXBkYXRlZC4KKworMjAwOC0wNC0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9GYWNlX0luaXQpOiBQcm90ZWN0IGNhbGwgdG8KKwlgRlRfU3RyZWFtX09wZW5MWlcnIHdpdGggYEZUX0NPTkZJR19PUFRJT05fVVNFX0xaJy4gIEZyb20gU2F2YW5uYWgKKwlidWcgIzIyOTA5LgorCisyMDA4LTA0LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9Ub0ZpeGVkKTogSW5jcmVhc2UgcHJlY2lzaW9uIGlmCisJaW50ZWdlciBwYXJ0IGlzIHplcm8uCisKKzIwMDgtMDQtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxhdGlvbiB3aXRoIGcrKyA0LjEgKHdpdGggYm90aCBgc2luZ2xlJyBhbmQgYG11bHRpJworCXRhcmdldHMpLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogRG9uJ3QgZGVmaW5lIGEgdmFyaWFibGUgaW4gYmxvY2sKKwl3aGljaCBpcyBjcm9zc2VkIGJ5IGEgYGdvdG8nLgorCisJKiBzcmMvb3R2YWxpZC9vdHZhbGlkLmggKG90dl9NQVRIX3ZhbGlkYXRlKTogQWRkIHByb3RvdHlwZS4KKworMjAwOC0wMy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHN1cHBvcnQgZm9yIHN1YnNldHRlZCBDSUQta2V5ZWQgQ0ZGcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVELAorCUZUX0lTX0NJRF9LRVlFRCk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogU2V0IG51bWJlciBvZiBnbHlwaHMgdG8gdGhlCisJbWF4aW11bSBDSUQgdmFsdWUgaW4gQ0lELWtleWVkIENGRnMuCisJSGFuZGxlIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgZmxhZy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworCisJRml4IENGRiBmb250IG1hdHJpeCBjYWxjdWxhdGlvbiBhbmQgaW1wcm92ZSBwcmVjaXNpb24uCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX3JlYWwpOiBJbmNyZWFzZSBwcmVjaXNpb24gaWYgaW50ZWdlcgorCXBhcnQgaXMgemVyby4KKwkoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KTogU2ltcGxpZnkgY29tcHV0YXRpb24gb2YgYHVuaXRzX3Blcl9lbSc7CisJdGhpcyBwcmV2ZW50cyBvdmVyZmxvdyBhbHNvLgorCisKKwlTdXBwb3J0IEZUX0dldF9DSURfUmVnaXN0cnlfT3JkZXJpbmdfU3VwcGxlbWVudCBmb3IgUFMgQ0lEIGZvbnRzLgorCisJKiBzcmMvY2lkL2NpZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9DSURfSC4KKwkoY2lkX2dldF9yb3MpOiBOZXcgZnVuY3Rpb24uCisJKGNpZF9zZXJ2aWNlX2NpZF9pbmZvKTogTmV3IHNlcnZpY2Ugc3RydWN0dXJlLgorCShjaWRfc2VydmljZXMpOiBSZWdpc3RlciBpdC4KKworMjAwOC0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRqdXN0bWVudHMgZm9yIFZpc3VhbCBDKysgOC4wLCBhcyByZXBvcnRlZCBieSBSYWluZXIgRGV5a2UuCisKKwkqIGJ1aWxkcy9jb21waWxlci92aXN1YWxjLm1rIChDRkxBR1MpOiBSZW1vdmUgL1c1LgorCShBTlNJRkxBR1MpOiBBZGQgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFLgorCisyMDA4LTAzLTIxICBMYXVyZW5jZSBEYXJieSAgPGxkYXJieT4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9GYWNlX0luaXQpOiBVc2UgYC9XZWlnaHQnLiAgUGF0Y2ggZnJvbQorCVNhdmFubmFoIGJ1ZyAjMjI2NzUuCisKKzIwMDgtMDMtMTMgIERlcmVrIENsZWdnICA8ZGNsZWdnQGFwcGxlLmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEZpeCBuYW1lZCBzdHlsZSBsb29wLgorCVBhdGNoIGZyb20gU2F2YW5uYWggYnVnICMyMjU0MS4KKworMjAwOC0wMy0wMyAgTWFzYXRvc2hpIEtpbXVyYSAgPFZZVjAzMzU0QG5pZnR5Lm5lLmpwPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDE0X2NoYXJfbWFwX25vbmRlZl9iaW5hcnksCisJdHRfY21hcDE0X2ZpbmRfdmFyaWFudCk6IFJldHVybiBjb3JyZWN0IHZhbHVlLgorCSh0dF9jbWFwMTRfdmFyaWFudF9jaGFycyk6IEZpeCBjaGVjayBmb3IgYGRpJy4KKworMjAwOC0wMi0yOSAgV2VybWVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDgtMDItMjkgIFdvbGYKKworCUFkZCBidWlsZCBzdXBwb3J0IGZvciBzeW1iaWFuIHBsYXRmb3JtLiAgRnJvbSBTYXZhbm5haCBidWcgIzIyNDQwLgorCisJKiBidWlsZHMvc3ltYmlhbi8qOiBOZXcgZmlsZXMuCisKKzIwMDgtMDItMjEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKHBhcnNlX2ZvbmQpOiBGaXggYSBidWcgb2YgUG9zdFNjcmlwdCBmb250IG5hbWUKKwlzeW50aGVzaXMuICBGb3IgYW55IGZhY2Ugb2YgYSBzcGVjaWZpZWQgRk9ORCwgYWx3YXlzIHRoZSBuYW1lIGZvcgorCXRoZSBmaXJzdCBmYWNlIHdhcyB1c2VkLiAgRXhjZXB0IG9mIGEgRk9ORCB0aGF0IHJlZmVycyBtdWx0aXBsZQorCVR5cGUxIGZvbnQgZmlsZXMsIHdyb25nIHN5bnRoZXNpemVkIGZvbnQgbmFtZXMgYXJlIG5vdCB1c2VkIGF0IGFsbCwKKwlzbyB0aGlzIGlzIGFuIGludmlzaWJsZSBidWcuICBBIGZldyBsaW1pdCBjaGVja3MgYXJlIGFkZGVkIHRvby4KKworCSogYnVpbGRzL21hYy9mdG1hYy5jOiBEaXR0by4KKworMjAwOC0wMi0yMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogU3BsaXQgY29tcGlsZXIgb3B0aW9uIHRvIGxpbmsgQ2FyYm9uCisJZnJhbWV3b3JrcyB0byBvbmUgb3B0aW9uIGZvciBDb3JlU2VydmljZXMgZnJhbWV3b3JrIGFuZCBhbm90aGVyCisJb3B0aW9uIGZvciBBcHBsaWNhdGlvblNlcnZpY2VzIGZyYW1ld29yay4gIFRoZSBzcGxpdCBvcHRpb25zIGNhbiBiZQorCW1hbmFnZWQgYnkgR05VIGxpYnRvb2wgdG8gYXZvaWQgdW5yZXF1aXJlZCBkdXBsaWNhdGlvbiB3aGVuIEZyZWVUeXBlCisJaXMgbGlua2VkIHdpdGggb3RoZXIgYXBwbGljYXRpb25zLiAgU3VnZ2VzdGVkIGJ5IERhbmllbCBNYWNrcywKKwlTYXZhbm5haCBidWcgIzIyMzY2LgorCisyMDA4LTAyLTE4ICBWaWN0b3IgU3Rpbm5lciAgPHZpY3Rvci5zdGlubmVyQGhheXBvY2FsYy5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVVQKTogQ2hlY2sgbnVtYmVyIG9mIHBvaW50cy4gIEZpeAorCWZyb20gU2F2YW5uYWggYnVnICMyMjM1Ni4KKworMjAwOC0wMi0xNyAgSm9uYXRoYW4gQmxvdyAgPGpvbkBudW1iZXItbm9uZS5jb20+CisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2csIGFmX2xvYWRlcl9sb2FkX2dseXBoKToKKwlDaGVjayBmb3IgdmFsaWQgY2FsbGJhY2sgcG9pbnRlcnMuCisKKzIwMDgtMDItMTUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKEZUX05ld19GYWNlX0Zyb21fU0ZOVCk6IENoZWNrIHRoZSBzZm50IHJlc291cmNlCisJaGFuZGxlIGJ5IGl0cyB2YWx1ZSBpbnN0ZWFkIG9mIFJlc0Vycm9yKCksIGZpeCBwcm92aWRlZCBieSBEZXJvbgorCUthem1haWVyLiAgQWNjb3JkaW5nIHRvIHRoZSBSZXNvdXJjZSBNYW5hZ2VyIFJlZmVyZW5jZSwKKwlHZXRSZXNvdXJjZSgpLCBHZXQxUmVzb3VyY2UoKSwgR2V0TmFtZWRSZXNvdXJjZSgpLAorCUdldDFOYW1lZFJlc291cmNlKCkgYW5kIFJHZXRSZXNvdXJjZSgpIHNldCBub0VyciBidXQgcmV0dXJuIE5VTEwKKwloYW5kbGUgd2hlbiB0aGV5IGNhbiBub3QgZmluZCB0aGUgcmVxdWVzdGVkIHJlc291cmNlLiAgVGhlc2UKKwlmdW5jdGlvbnMgbmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZXMsIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8KKwljaGVjayBpZiB0aGUgaGFuZGxlIGlzIG5vdCBOVUxMLgorCisJKiBidWlsZHMvbWFjL2Z0bWFjLmMgKEZUX05ld19GYWNlX0Zyb21fU0ZOVCk6IERpdHRvLgorCisyMDA4LTAyLTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdGJhc2UuYzogPGZ0bWFjLmM+IGlzIHJlcGxhY2VkIGJ5ICJmdG1hYy5jIiBhcyBvdGhlcgorCWluY2x1c2lvbiBzdHlsZXMuICBOb3cgaXQgYWx3YXlzIGluY2x1ZGVzIHNyYy9iYXNlL2Z0bWFjLmM7CisJYnVpbGRzL21hYy9mdG1hYy5jIGlzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBjb25maWd1cmF0aW9uLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBQcmludCB3YXJuaW5nIGlmIGNvbmZpZ3VyZSBpcyBleGVjdXRlZAorCXdpdGggb3B0aW9ucyB0byBzcGVjaWZ5IENhcmJvbiBmdW5jdGlvbmFsaXRpZXMgZXhwbGljaXRseS4KKworCSogZG9jcy9JTlNUQUxMLk1BQzogTm90ZSB0aGF0IGxlZ2FjeSBidWlsZHMvbWFjL2Z0bWFjLmMgaXMgbm90CisJaW5jbHVkZWQgYXV0b21hdGljYWxseSBhbmQgbWFudWFsIHJlcGxhY2VtZW50IGlzIHJlcXVpcmVkLgorCisyMDA4LTAyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy9tb2R1bGVzLm1rIChDTE9TRV9NT0RVTEUsIFJFTU9WRV9NT0RVTEUpLCBidWlsZHMvZGV0ZWN0Lm1rCisJKGRvc19zZXR1cCksIGJ1aWxkcy9mcmVldHlwZS5tayAoY2xlYW5fcHJvamVjdF9kb3MsCisJZGlzdGNsZWFuX3Byb2plY3RfZG9zKTogRG9uJ3QgdXNlIFwgYnV0ICQoU0VQKS4gIFJlcG9ydGVkIGJ5IER1bmNhbgorCU11cmRvY2guCisKKzIwMDgtMDEtMTggIFN5bHZhaW4gUGFzY2hlICA8c3lsdmFpbi5wYXNjaGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChfZnRfbGNkX2ZpbHRlcl9sZWdhY3kpOiBVcGRhdGVkIGNvbW1lbnQgdG8KKwltZW50aW9uIGludHJhLXBpeGVsIGFsZ29yaXRobS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9SZW5kZXJfTW9kZSk6IE1lbnRpb24gdGhhdAorCUZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBmcmluZ2VzLgorCisyMDA4LTAxLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoZnRfYmxhY2tfcmVuZGVyKTogQ2hlY2sgYG91dGxpbmUnIGJlZm9yZQorCXVzaW5nIGl0LiAgUmVwb3J0ZWQgYnkgQWxsYW4gWWFuZy4KKworMjAwOC0wMS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKEZUX0NPTkZJR19PUFRJT05fNV9HUkFZX0xFVkVMUyk6IFJlbW92ZS4KKworMjAwOC0wMS0xMiAgQWxsYW4gWWFuZywgSmlhbiBIdWEgLSBTSCAgPEFsbGFuLllhbmdAZm1jLmZ1aml0c3UuY29tPgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKGZ0X2JsYWNrX2luaXQpCisJW0ZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lOR106IEZpeCBjb21waWxhdGlvbi4KKworMjAwOC0wMS0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogSGFuZGxlIHRoZSBjYXNlCisJd2hlcmUgdGhlIG51bWJlciBvZiBjb250b3VycyBpbiBhIHNpbXBsZSBnbHlwaCBpcyB6ZXJvIChhbmQgd2hpY2gKKwlkb2VzIGNvbnRhaW4gYW4gZW50cnkgaW4gdGhlIGBnbHlmJyB0YWJsZSkuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZworCSMyMTk5MC4KKworMjAwOC0wMS0wNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZvcm1hdHRpbmcgc3VnZ2VzdGVkIGJ5IFNlYW4gTWNCcmlkZS4KKworCSogYnVpbGRzL21hYy9mdG1hYy5jOiBGb3JtYXR0aW5nICh0YWIgZXhwYW5kZWQpLgorCSogc3JjL2F1dG9maXQvYWZpbmRpYy5jOiBEaXR0by4KKwkqIHNyYy9iYXNlL2Z0Y2lkLmM6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRtYWMuYzogRGl0dG8uCisKKzIwMDctMTItMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmFzdGVyX3JlbmRlcik6IENoZWNrIGBvdXRsaW5lJworCWNvcnJlY3RseS4KKworMjAwNy0xMi0yMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUltcHJvdmVtZW50IG9mIFBPU0lYIHJlc291cmNlLWZvcmsgYWNjZXNzb3IgdG8gbG9hZCB1bnNvcnRlZAorCXJlZmVyZW5jZXMgaW4gYSByZXNvdXJjZS4gIEluIEhlbHZlTFRNTSAocmVzb3VyY2UtZm9yayBQb3N0U2NyaXB0CisJVHlwZTEgZm9udCBidW5kbGVkIHdpdGggTWFjIE9TIFggc2luY2UgMTAuMy54KSwgdGhlIGFwcGVhcmFuY2Ugb3JkZXIKKwlvZiBQRkIgY2h1bmtzIGlzIG5vdCBzb3J0ZWQ7IHNvcnRpbmcgdGhlIGNodW5rcyBieSByZWZlcmVuY2UgSURzIGlzCisJcmVxdWlyZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oIChGVF9SRm9ya19SZWYpOiBOZXcgc3RydWN0dXJlCisJdHlwZSB0byBzdG9yZSBhIHBhaXIgb2YgcmVmZXJlbmNlIElEIGFuZCBvZmZzZXQgdG8gdGhlIGNodW5rLgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKGZ0X3JhY2Nlc3Nfc29ydF9yZWZfYnlfaWQpOiBOZXcgZnVuY3Rpb24gdG8KKwlzb3J0IEZUX1JGb3JrX1JlZiBieSB0aGVpciByZWZlcmVuY2UgSURzLgorCisJKEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKTogUmV0dXJucyBhbiBhcnJheSBvZiBvZmZzZXRzIHRoYXQgaXMKKwlzb3J0ZWQgYnkgcmVmZXJlbmNlIElELgorCisyMDA3LTEyLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX3JlYWwpOiBEb24ndCBhcHBseSBgcG93ZXJfdGVuJworCWRpdmlzaW9uIHRvbyBlYXJseTsgb3RoZXJ3aXNlIHRoZSBtb3N0IHNpZ25pZmljYW50IGRpZ2l0KHMpIG9mIHRoZQorCWZpbmFsIHJlc3VsdCBhcmUgbG9zdCBhcyB0aGUgdmFsdWUgaXMgdHJ1bmNhdGVkIHRvIGFuIGludGVnZXIuICBUaGlzCisJZml4ZXMgU2F2YW5uYWggYnVnICMyMTc5NCAod2hlcmUgdGhlIHBhdGNoIGhhcyBiZWVuIHBvc3RlZCB0b28pLgorCisyMDA3LTEyLTA2ICBGaXggIDw0ZDg3NmI4MkBnbWFpbC5jb20+CisKKwlQYXNzIG9wdGlvbnMgZnJvbSBvbmUgY29uZmlndXJlIHNjcmlwdCB0byBhbm90aGVyIGFzLWlzIChub3QKKwlleHBhbmRlZCkuICBUaGlzIGlzIG5lZWRlZCBmb3Igb3B0aW9ucyBsaWtlCisJLS1pbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScuCisKKwkqIGJ1aWxkcy91bml4L2RldGVjdC5taywgY29uZmlndXJlOiBQcmV2ZW50IGFyZ3VtZW50IGV4cGFuc2lvbiBpbgorCWNhbGwgdG8gdGhlIChyZWFsKSBgY29uZmlndXJlJyBzY3JpcHQuCisKKzIwMDctMTItMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEZpeCBjb21waWxhdGlvbiBpZgorCVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiBpc24ndCBkZWZpbmVkLgorCisyMDA3LTEyLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlUaGVyZSBleGlzdCBDRkZzIHdoaWNoIGNvbnRhaW4gb3Bjb2RlcyBmb3IgdGhlIFR5cGUgMSBvcGVyYXRvcnMKKwlgaHNidycgYW5kIGBjbG9zZXBhdGgnIHdoaWNoIGFyZSBib3RoIGludmFsaWQgaW4gVHlwZSAyIGNoYXJzdHJpbmdzLgorCUhvd2V2ZXIsIGl0IGRvZXNuJ3QgaGFybSB0byBzdXBwb3J0IHRoZW0uCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX09wZXJhdG9yKTogQWRkIGBjZmZfb3BfaHNidycgYW5kCisJYGNmZl9vcF9jbG9zZXBhdGguJworCShjZmZfYXJndW1lbnRfY291bnRzKTogRGl0dG8uCisKKwkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBIYW5kbGUgVHlwZSAxIG9wY29kZXMgOSAoY2xvc2VwYXRoKQorCWFuZCAxMyAoaHNidykgd2hpY2ggYXJlIGludmFsaWQgaW4gVHlwZSAyIGNoYXJzdHJpbmdzLgorCisyMDA3LTEyLTA2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKHJhY2Nlc3NfZ3Vlc3NfZGFyd2luX25ld3Zmcyk6IE5ldyBmdW5jdGlvbiB0bworCXN1cHBvcnQgbmV3IHBhdGhuYW1lIHN5bnRheCBgLi5uYW1lZGZvcmsvcnNyYycgdG8gYWNjZXNzIGEgcmVzb3VyY2UKKwlmb3JrIG9uIE1hYyBPUyBYLiAgVGhlIGxlZ2FjeSBzeW50YXggYC9yc3JjJyBkb2VzIG5vdCB3b3JrIG9uCisJY2FzZS1zZW5zaXRpdmUgSEZTKy4KKwkocmFjY2Vzc19ndWVzc19kYXJ3aW5faGZzcGx1cyk6IEZpeCBhIGJ1ZyBpbiB0aGUgY2FsY3VsYXRpb24gb2YKKwlidWZmZXIgc2l6ZSB0byBzdG9yZSBhIHBhdGhuYW1lLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmg6IEluY3JlbWVudCB0aGUgbnVtYmVyIG9mCisJcmVzb3VyY2UgZm9yayBndWVzc2luZyBydWxlLgorCisyMDA3LTEyLTA2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBJbXByb3ZlIHRoZSBjb21waWxlIHRlc3RzIHRvIHNlYXJjaAorCUNhcmJvbiBmdW5jdGlvbnMuCisJKiBidWlsZHMvbWFjL2Z0bWFjLmM6IEltcG9ydCBmaXhlcyBmb3IgQ2FyYm9uIGluY29tcGF0aWJpbGl0aWVzCisJcHJvcG9zZWQgYnkgU2VhbiBNY0JyaWRlIGZyb20gc3JjL2Jhc2UvZnRtYWMuYyAoc2VlIDIwMDctMTEtMTYpLgorCisyMDA3LTEyLTA2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJVGhlIGRvY3VtZW50cyBhbmQgY29tbWVudHMgZm9yIE1hYyBPUyBYIGFyZSBpbXByb3ZlZCBieSBTZWFuCisJTWNCcmlkZS4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogRml4IGEgY29tbWVudC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaDogRGl0dG8uCisJKiBkb2NzL0lOU1RBTEwuTUFDOiBJbXByb3ZlIEVuZ2xpc2ggYW5kIGFkZCBjb21tZW50IG9uIGxvd2VzdAorCXN5c3RlbSB2ZXJzaW9uIHNwZWNpZmllZCBieSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQuCisKKzIwMDctMTItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBEb24ndCB1c2UgbG9naWNhbCBPUiB0bworCWNvbmNhdGVuYXRlIGVycm9yIGNvZGVzLgorCSogc3JjL3NmbnQvdHRzYml0LmMgKExvYWRfU0JpdF9SYW5nZSk6IERpdHRvLgorCisyMDA3LTEyLTA0ICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KTogRG9uJ3QgdXNlIGxvZ2ljYWwgT1IgdG8KKwljb25jYXRlbmF0ZSBlcnJvciBjb2Rlcy4KKworMjAwNy0xMi0wNCAgU2VhbiBNY0JyaWRlICA8c2VhbkByb2d1ZS1yZXNlYXJjaC5jb20+CisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWRfY29tcG91bmQpOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5nLgorCisyMDA3LTExLTIwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IE1hY09TIGxlZ2FjeSBmb250IHN1cHBvcnQgYnkgTWFzYXRha2UgWWFtYXRvIG9uIE1hYyBPUyBYLiAgSXQgaXMKKwlub3Qgd29ya2luZyBzaW5jZSAyLjMuNS4gIEluIEZUX09wZW5fTmV3KCksIGlmIEZUX05ld19TdHJlYW0oKQorCWNhbm5vdCBtbWFwKCkgdGhlIHNwZWNpZmllZCBmaWxlIGFuZCBjYW5ub3Qgc2VlayB0byBoZWFkIG9mIHRoZQorCXNwZWNpZmllZCBmaWxlLCBpdCByZXR1cm5zIE5VTEwgc3RyZWFtIGFuZCBGVF9PcGVuX05ldygpIHJldHVybnMgdGhlCisJZXJyb3IgaW1tZWRpYXRlbHkuICBPbiBNYWNPUywgbW9zdCBsZWdhY3kgTWFjT1MgZm9udHMgZmFsbCBpbnRvIHN1Y2gKKwlhIHNjZW5hcmlvIGJlY2F1c2UgdGhlaXIgZGF0YSBmb3JrcyBhcmUgemVyby1zaXplZCBhbmQgY2Fubm90IGJlCisJc291Z2h0LiAgVG8gcHJvY2VlZCB0byBndWVzc2luZyBvZiByZXNvdXJjZSBmb3JrIGZvbnRzLCB0aGUKKwlmdW5jdGlvbnMgZm9yIGxlZ2FjeSBNYWNPUyBmb250IG11c3QgcHJvcGVybHkgaGFuZGxlIHRoZSBOVUxMIHN0cmVhbQorCXJldHVybmVkIGJ5IEZUX05ld19TdHJlYW0oKS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKElzTWFjQmluYXJ5KTogUmV0dXJuIGVycm9yCisJRlRfRXJyX0ludmFsaWRfU3RyZWFtX09wZXJhdGlvbiBpbW1lZGlhdGVseSB3aGVuIE5VTEwgc3RyZWFtIGlzCisJcGFzc2VkLgorCShGVF9PcGVuX0ZhY2UpOiBFdmVuIHdoZW4gRlRfTmV3X1N0cmVhbSgpIHJldHVybnMgYW4gZXJyb3IsIHByb2NlZWQKKwl0byBmYWxsYmFjay4gIE9yaWdpbmFsbHksIGxlZ2FjeSBNYWNPUyBmb250IGlzIHRlc3RlZCBpbiB0aGUgY2FzZXMKKwlvZiBGVF9FcnJfSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uIChvY2N1cnMgd2hlbiBkYXRhIGZvcmsgaXMgZW1wdHkpCisJb3IgRlRfRXJyX1Vua25vd25fRmlsZV9Gb3JtYXQgKG9jY3VycyB3aGVuIEFwcGxlU2luZ2xlIGhlYWRlciBvcgorCS5kZm9udCBoZWFkZXIgaXMgY29tYmluZWQpLiAgTm93IHRoZSBjYXNlIG9mCisJRlRfRXJyX0Nhbm5vdF9PcGVuX1N0cmVhbSBpcyBpbmNsdWRlZC4KKworCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0d1ZXNzKTogV2hlbiBwYXNzZWQgc3RyZWFtIGlzIE5VTEwsCisJc2tpcCBGVF9TdHJlYW1fU2VlaygpLCB3aGljaCBzZWVrcyB0byB0aGUgaGVhZCBvZiBzdHJlYW0sIGFuZAorCXByb2NlZWQgdG8gdW5pdCB0ZXN0aW5nIG9mIHJhY2Nlc3NfZ3Vlc3NfWFhYKCkuICBGVF9TdHJlYW1fU2VlaygpCisJZm9yIGEgTlVMTCBzdHJlYW0gY2F1c2VzIGEgQnVzIGVycm9yIG9uIE1hYyBPUyBYLgorCShyYWNjZXNzX2d1ZXNzX2FwcGxlX2RvdWJsZSk6IFJldHVybiBGVF9FcnJfQ2Fubm90X09wZW5fU3RyZWFtCisJaW1tZWRpYXRlbHkgaWYgcGFzc2VkIHN0cmVhbSBpcyBOVUxMLgorCShyYWNjZXNzX2d1ZXNzX2FwcGxlX3NpbmdsZSk6IERpdHRvLgorCisyMDA3LTExLTE2ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IGZvciBDYXJib24gaW5jb21wYXRpYmlsaXRpZXMgc2luY2UgTWFjIE9TIFggMTAuNSwKKwlwcm9wb3NlZCBieSBTZWFuIE1jQnJpZGUuCisKKwkqIGRvYy9JTlNUQUxMLk1BQzogQ29tbWVudCBvbiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaDogRGVwcmVjYXRlIEZUX05ld19GYWNlX0Zyb21fRk9ORCBhbmQKKwlGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZS4gIFNpbmNlIE1hYyBPUyBYIDEwLjUsIGNhbGxpbmcKKwlDYXJib24gZnVuY3Rpb25zIGZyb20gYSBmb3JrZWQgcHJvY2VzcyBpcyBjbGFzc2lmaWVkIGFzIHVuc2FmZQorCWJ5IEFwcGxlLiAgQWxsIENhcmJvbi1kZXBlbmRlbnQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZXByZWNhdGVkLgorCisJKiBzcmMvYmFzZS9mdG1hYy5jOiBVc2UgZXNzZW50aWFsIGhlYWRlciBmaWxlcworCTxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+IGFuZAorCTxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4gaW5zdGVhZCBvZgorCWFsbC1pbi1vbmUgaGVhZGVyIGZpbGUgPENhcmJvbi9DYXJib24uaD4uCisKKwlJbmNsdWRlIDxzeXMvc3lzbGltaXRzLmg+IGFuZCByZXBsYWNlIEhGU19NQVhQQVRITEVOIGJ5IEFwcGxlCisJZ2VudWluZSBtYWNybyBQQVRIX01BWC4KKworCUFkZCBmYWxsYmFjayBtYWNybyBmb3Iga0FUU09wdGlvbkZsYWdzVW5SZXN0cmljdGVkU2NvcGUgd2hpY2gKKwlpcyBub3QgZm91bmQgaW4gTWFjIE9TIFggMTAuMC4KKworCU11bHRpLWNoYXJhY3RlciBjb25zdGFudHMgKCdQT1NUJywgJ3NmbnQnIGV0YykgYXJlIHJlcGxhY2VkIGJ5CisJNjRiaXQgY29uc3RhbnRzIGNhbGN1bGF0ZWQgYnkgRlRfTUFLRV9UQUcoKSBtYWNyby4KKworCUZvciB0aGUgaW5kZXggaW4gdGhlIHNlZ21lbnQgb2YgcmVzb3VyY2UgZm9yaywgbmV3IHBvcnRhYmxlCisJdHlwZSBSZXNvdXJjZUluZGV4IGlzIGludHJvZHVjZWQgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5LgorCVRoaXMgdHlwZSBpcyBzaW5jZSBNYWMgT1MgWCAxMC41LCBzbyBpdCBpcyBkZWZpbmVkIGFzIHNob3J0CisJd2hlbiBidWlsdCBvbiBvbGRlciBwbGF0Zm9ybXMuCisKKwkoRlRfQVRTRm9udEdldEZpbGVSZWZlcmVuY2UpOiBJZiBidWlsZCB0YXJnZXQgaXMgb25seSB0aGUgc3lzdGVtcworCTEwLjUgYW5kIG5ld2VyLCBpdCBjYWxscyBBcHBsZSBnZW51aW5lIEFUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCkuCisKKwkoRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSk6IFJldHVybiBhbiBlcnJvciBpZiBzeXN0ZW0gaXMgMTAuNQorCWFuZCBuZXdlciBvciA2NGJpdCBwbGF0Zm9ybSwgYmVjYXVzZSBsZWdhY3kgdHlwZSBGU1NwZWMgdHlwZSBpcworCXJlbW92ZWQgY29tcGxldGVseS4KKworCShGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyk6IERpdHRvLgorCisyMDA3LTExLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2RvbmVfZmFjZSk6IENoZWNrIGBzZm50JyBldmVyeXdoZXJlLiAgVGhpcworCWZpeGVzIFNhdmFubmFoIGJ1ZyAjMjE0ODUuCisKKzIwMDctMTAtMjkgIERhbmllbCBTdm9ib2RhICA8ZGFzdm9AcGxhbmV0YUBjej4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfRmFjZV9Jbml0KTogQ2hlY2sgZmlyc3QgdGhhdCB0aGUgZHJpdmVyCisJY2FuIGhhbmRsZSB0aGUgZm9udCBhdCBhbGwsIHRoZW4gY2hlY2sgYGZhY2VfaW5kZXgnLiAgT3RoZXJ3aXNlLCB0aGUKKwlkcml2ZXIgbWlnaHQgcmV0dXJuIHRoZSB3cm9uZyBlcnJvciBjb2RlLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcKKwkjMjE0NjguCisKKzIwMDctMTAtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogU3VwcG9ydCBiaXQgOSBhbmQgcHJlcGFyZQorCXN1cHBvcnQgZm9yIGJpdCA4IG9mIHRoZSBgZnNTZWxlY3Rpb24nIGZpZWxkIGluIHRoZSBgT1MvMicgdGFibGUuCisJTVMgaXMgYWxyZWFkeSB1c2luZyB0aGlzOyBob3BlZnVsbHksIHRoaXMgYmVjb21lcyBwYXJ0IG9mIE9wZW5UeXBlCisJMS41LgorCVByZXBhcmUgYWxzbyBzdXBwb3J0IGZvciBgbmFtZScgSURzIDIxIChXV1NfRkFNSUxZKSBhbmQgMjIKKwkoV1dTX1NVQkZBTUlMWSkuCisKKzIwMDctMTAtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSAoaHRtbF9oZWFkZXJfMik6IEZpeCB0eXBvLgorCUFkZCBgdGQubGVmdCcgZWxlbWVudCB0byBDU1MuCisJKHRvY19zZWN0aW9uX2VudGVyKTogVXNlIGl0LgorCisyMDA3LTEwLTE4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwgc3JjL2Jhc2UvZnRvYmpzLmM6IFJlbmFtZSBBUEkKKwlmdW5jdGlvbnMgcmVsYXRlZCB0byBjbWFwIHR5cGUgMTQgc3VwcG9ydCB0byB0aGUKKwlgRlRfT2JqZWN0X0FjdGlvbk5hbWUnIHNjaGVtZToKKworCSAgRlRfR2V0X0NoYXJfVmFyaWFudF9pbmRleCAgICAgLT4gRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4CisJICBGVF9HZXRfQ2hhcl9WYXJpYW50X0lzRGVmYXVsdCAtPiBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0CisJICBGVF9HZXRfVmFyaWFudF9TZWxlY3RvcnMgICAgICAtPiBGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMKKwkgIEZUX0dldF9WYXJpYW50c19PZl9DaGFyICAgICAgIC0+IEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIKKwkgIEZUX0dldF9DaGFyc19PZl9WYXJpYW50ICAgICAgIC0+IEZUX0ZhY2VfR2V0Q2hhcnNPZlZhcmlhbnQKKworCVVwZGF0ZSBkb2N1bWVudGF0aW9uIGFjY29yZGluZ2x5LgorCisJKiBzcmMvc2ZudC90dGNtYXAuYzogU3Ryb25nZXIgY21hcCAxNCB2YWxpZGF0aW9uLgorCU1ha2UgdGhlIGNvZGUgYSBsaXR0bGUgbW9yZSBjb25zaXN0ZW50IHdpdGggRnJlZVR5cGUgY29kaW5nCisJY29udmVudGlvbnMgYW5kIG1vZGlmeSB0aGUgY21hcDE0IGZ1bmN0aW9ucyB0aGF0IHJldHVybmVkIGEgbmV3bHkKKwlhbGxvY2F0ZWQgYXJyYXkgdG8gdXNlIGEgcGVyc2lzdGVudCB2ZWN0b3IgZnJvbSB0aGUgVFRfQ01hcDE0IG9iamVjdAorCWluc3RlYWQuCisKKwkoVFRfQ01hcDE0UmVjKTogUHJvdmlkZSBhcnJheSBhbmQgYXV4aWxpYXJ5IGRhdGEgZm9yIHJlc3VsdC4KKwkodHRfY21hcDE0X2RvbmUsIHR0X2NtYXAxNF9lbnN1cmUpOiBOZXcgZnVuY3Rpb25zLgorCisJKHR0X2NtYXAxNF9pbml0LCB0dF9jbWFwMTRfdmFsaWRhdGUsIHR0X2NtYXAxNF9jaGFyX21hcF9kZWZfYmluYXJ5LAorCXR0X2NtYXAxNF9jaGFyX21hcF9ub25kZWZfYmluYXJ5LCB0dF9jbWFwMTRfZmluZF92YXJpYW50LAorCXR0X2NtYXAxNF9jaGFyX3Zhcl9pbmRleCwgdHRfY21hcDE0X3ZhcmlhbnRzLAorCXR0X2NtYXAxNF9jaGFyX3ZhcmlhbnRzLCB0dF9jbWFwMTRfZGVmX2NoYXJfY291bnQsCisJdHRfY21hcDE0X2dldF9kZWZfY2hhcnMsIHR0X2NtYXAxNF9nZXRfbm9uZGVmX2NoYXJzLAorCXR0X2NtYXAxNF92YXJpYW50X2NoYXJzLCB0dF9jbWFwMTRfY2xhc3NfcmVjKTogVXBkYXRlZCBhbmQgaW1wcm92ZWQuCisKKzIwMDctMTAtMTUgIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJQWRkIHN1cHBvcnQgZm9yIGNtYXAgdHlwZSAxNC4KKworCSogZGV2ZWwvZnRvcHRpb24uaCwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTQpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0NNYXBfQ2hhclZhckluZGV4RnVuYywKKwlGVF9DTWFwX0NoYXJWYXJJc0RlZmF1bHRGdW5jLCBGVF9DTWFwX1ZhcmlhbnRMaXN0RnVuYywKKwlGVF9DTWFwX0NoYXJWYXJpYW50TGlzdEZ1bmMsIEZUX0NNYXBfVmFyaWFudENoYXJMaXN0RnVuYyk6IE5ldworCXN1cHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcy4KKwkoRlRfQ01hcF9DbGFzc1JlYyk6IEFkZCB0aGVtLgorCVVwZGF0ZSBhbGwgdXNlcnMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaCAoVFRfQVBQTEVfSURfVkFSSUFOVF9TRUxFQ1RPUik6IE5ldworCW1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0dldF9DaGFyX1ZhcmlhbnRfSW5kZXgsCisJRlRfR2V0X0NoYXJfVmFyaWFudF9Jc0RlZmF1bHQsIEZUX0dldF9WYXJpYW50X1NlbGVjdG9ycywKKwlGVF9HZXRfVmFyaWFudHNfT2ZfQ2hhciwgRlRfR2V0X0NoYXJzX09mX1ZhcmlhbnQpOiBOZXcgQVBJCisJZnVuY3Rpb25zLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZmluZF92YXJpYW50X3NlbGVjdG9yX2NoYXJtYXApOiBOZXcgYXV4aWxpYXJ5CisJZnVuY3Rpb24uCisJKEZUX1NldF9DaGFybWFwKTogRGlzYWxsb3cgY21hcHMgb2YgdHlwZSAxNC4KKwkoRlRfR2V0X0NoYXJfVmFyaWFudF9JbmRleCwgRlRfR2V0X0NoYXJfVmFyaWFudF9Jc0RlZmF1bHQsCisJRlRfR2V0X1ZhcmlhbnRfU2VsZWN0b3JzLCBGVF9HZXRfVmFyaWFudHNfT2ZfQ2hhciwKKwlGVF9HZXRfQ2hhcnNfT2ZfVmFyaWFudCk6IE5ldyBBUEkgZnVuY3Rpb25zLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAoVFRfUEVFS19VSU5UMjQsIFRUX05FWFRfVUlOVDI0KTogTmV3IG1hY3Jvcy4KKworCShUVF9DTWFwMTRSZWMsIHR0X2NtYXAxNF9pbml0LCB0dF9jbWFwMTRfdmFsaWRhdGUsCisJdHRfY21hcDE0X2NoYXJfaW5kZXgsIHR0X2NtYXAxNF9jaGFyX25leHQsIHR0X2NtYXAxNF9nZXRfaW5mbywKKwl0dF9jbWFwMTRfY2hhcl9tYXBfZGVmX2JpbmFyeSwgdHRfY21hcDE0X2NoYXJfbWFwX25vbmRlZl9iaW5hcnksCisJdHRfY21hcDE0X2ZpbmRfdmFyaWFudCwgdHRfY21hcDE0X2NoYXJfdmFyX2luZGV4LAorCXR0X2NtYXAxNF9jaGFyX3Zhcl9pc2RlZmF1bHQsIHR0X2NtYXAxNF92YXJpYW50cywKKwl0dF9jbWFwMTRfY2hhcl92YXJpYW50cywgdHRfY21hcDE0X2RlZl9jaGFyX2NvdW50LAorCXR0X2NtYXAxNF9nZXRfZGVmX2NoYXJzLCB0dF9jbWFwMTRfZ2V0X25vbmRlZl9jaGFycywKKwl0dF9jbWFwMTRfdmFyaWFudF9jaGFycywgdHRfY21hcDE0X2NsYXNzX3JlYyk6IE5ldyBmdW5jdGlvbnMgYW5kCisJc3RydWN0dXJlcyBmb3IgY21hcCAxNCBzdXBwb3J0LgorCSh0dF9jbWFwX2NsYXNzZXMpOiBSZWdpc3RlciB0dF9jbWFwMTRfY2xhc3NfcmVjLgorCSh0dF9mYWNlX2J1aWxkX2NtYXBzKTogT25lIG1vcmUgZXJyb3IgbWVzc2FnZS4KKworCSogZG9jcy9DSEFOR0VTOiBNZW50aW9uIGNtYXAgMTQgc3VwcG9ydC4KKworMjAwNy0xMC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZmluZF91bmljb2RlX2NoYXJtYXApOiBJZiBzZWFyY2ggZm9yIGEgVUNTLTQKKwljaGFybWFwIGZhaWxzLCBkbyB0aGUgbG9vcCBhZ2FpbiB3aGlsZSBzZWFyY2hpbmcgYSBVQ1MtMiBjaGFybWFwLgorCVRoaXMgZmF2b3VycyBNUyBjaGFybWFwcyBvdmVyIEFwcGxlIG9uZXMuCisKKzIwMDctMDgtMjkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IEludHJvZHVjdGlvbiBvZiBhYnN0cmFjdCBgc2hvcnQnIGRhdGEgdHlwZXMsCisJUmVzRmlsZVJlZk51bSBhbmQgUmVzSUQuICBUaGVzZSB0eXBlcyB3ZXJlIGludHJvZHVjZWQgZm9yIENvcGxhbmQsCisJdGhlbiBiYWNrcG9ydGVkIHRvIE1QVy4gIFRoZSB2YXJpYWJsZXMgZXhjaGFuZ2VkIHdpdGggRmlsZU1hbmFnZXIKKwlRdWlja0RyYXcgZnJhbWV3b3JrcyBhcmUgcmVkZWZpbmVkIGJ5IHRoZXNlIGRhdGEgdHlwZXMuICBQYXRjaCB3YXMKKwlwcm9wb3NlZCBieSBTZWFuIE1jQnJpZGUuCisJKiBidWlsZHMvbWFjL2Z0bWFjLmM6IERpdHRvLgorCisyMDA3LTA4LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9vdHZhbGlkL290dmNtbW4uYyAob3R2X3hfeV91eF9zeSk6IFNraXAgY29udGV4dCBnbHlwaHMuICBGb3VuZAorCWJ5IEltcmFuIFlvdXNhZi4gIEZpeGVzIFNhdmFubmFoIGJ1ZyAjMjA3NzMuCisKKwkob3R2X0xvb2t1cF92YWxpZGF0ZSk6IENvcnJlY3QgaGFuZGxpbmcgb2YgTG9va3VwVHlwZS4gIEZvdW5kIGJ5CisJSW1yYW4gWW91c2FmLiAgRml4ZXMgU2F2YW5uYWggYnVnICMyMDc4Mi4KKworMjAwNy0wOC0xNyAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy9vdHZhbGlkL290dmdzdWIuYyAob3R2X1NpbmdsZVN1YnN0X3ZhbGlkYXRlKTogRml4IGhhbmRsaW5nIG9mCisJU2luZ2xlU3Vic3RGb3JtYXQxLgorCisyMDA3LTA4LTExICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBGaXggYSBidWcgd2hpY2ggc2V0cyBDQ19CVUlMRCBieQorCSR7YnVpbGQtZ2NjfSAodW5jaGVja2VkKSBpbnN0ZWFkIG9mIGJ5ICR7YnVpbGR9LWdjYyAoY2hlY2tlZCkuCisJRm91bmQgYnkgUnlhbiBIaWxsLgorCisyMDA3LTA4LTExICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KKworCSogc3JjL290dmFsaWQvb3R2Y29tbW4uYywgc3JjL290dmFsaWQvb3R2Y29tbW4uaAorCShvdHZfQ292ZXJhZ2VfdmFsaWRhdGUpOiBBZGQgZm91cnRoIGFyZ3VtZW50IHRvIHBhc3MgYW4gZXhwZWN0ZWQKKwljb3VudCB2YWx1ZS4gIFVwZGF0ZSBhbGwgdXNlcnMuCisJQ2hlY2sgZ2x5cGggSURzLgorCShvdHZfQ2xhc3NEZWZfdmFsaWRhdGUpOiBDaGVjayBgU3RhcnRHbHlwaCcuCisKKwkqIHNyYy9vdHZhbGlkL290dmdzdWIuYyAob3R2X1NpbmdsZVN1YnN0X3ZhbGlkYXRlKTogTW9yZSBnbHlwaCBJRAorCWNoZWNrcy4KKworCSogc3JjL290dmFsaWQvb3R2bWF0aC5jIChvdHZfTWF0aENvbnN0YW50c192YWxpZGF0ZSk6IFRoZXJlIGFyZSBvbmx5CisJNTYgY29uc3RhbnRzLgorCShvdHZfR2x5cGhBc3NlbWJseV92YWxpZGF0ZSwgb3R2X01hdGhHbHlwaENvbnN0cnVjdGlvbl92YWxpZGF0ZSk6CisJQ2hlY2sgZ2x5cGggSURzLgorCisyMDA3LTA4LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9vdHZhbGlkL290dmJhc2UuYywgc3JjL290dmFsaWQvb3R2Y29tbW4uYywKKwlzcmMvb3R2YWxpZC9vdHZnZGVmLmMsIHNyYy9vdHZhbGlkL290dmdwb3MuYywgc3JjL290dmFsaWQvb3R2Z3N1Yi5jLAorCXNyYy9vdHZhbGlkL290dmpzdGYuYzogcy9GVF9JTlZBTElEX0RBVEEvRlRfSU5WQUxJRF9GT1JNQVQvIHdoZXJlCisJYXBwcm9wcmlhdGUuICBSZXBvcnRlZCBieSBHZW9yZ2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBEZWZpbmUgYHRyYWNlX290dm1hdGgnLgorCisJKiBzcmMvb3R2YWxpZC9ydWxlcy5tayAoT1RWX0RSVl9TUkMpOiBBZGQgb3R2bWF0aC5jLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDctMDgtMDggIEdlb3JnZSBXaWxsaWFtcyAgPGd3d0BzaWxjb20uY29tPgorCisJQWRkIGBNQVRIJyB2YWxpZGF0aW5nIHN1cHBvcnQgdG8gb3R2YWxpZCBtb2R1bGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggKFRUQUdfTUFUSCk6IE5ldyBtYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oIChGVF9WQUxJREFURV9NQVRIKTogTmV3IG1hY3JvLgorCShGVF9WQUxJREFURV9PVCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9vdHZhbGlkL290bWF0aC5jOiBOZXcgZmlsZS4KKworCSogc3JjL290dmFsaWQvb3R2YWxpZC5jOiBJbmNsdWRlIG90dm1hdGguYy4KKwkqIHNyYy9vdHZhbGlkL290dm1vZC5jIChvdHZfdmFsaWRhdGUpOiBIYW5kbGUgYE1BVEgnIHRhYmxlLgorCisyMDA3LTA4LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IEFkZCBjYWxsIHRvIEFDX0xJQlRPT0xfV0lOMzJfRExMLgorCUZpeGVzIFNhdmFubmFoIGJ1ZyAjMjA2ODYuCisKKzIwMDctMDgtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuYzogRml4IHVzYWdlIG9mCisJRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIG1hY3JvLiAgUmVwb3J0ZWQgYnkgR3JhaGFtIEFzaGVyLgorCisyMDA3LTA3LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIChvcGVuX2ZhY2VfZnJvbV9idWZmZXIpOiBUaGUgYXJndW1lbnQKKwlgZHJpdmVyX25hbWUnIGlzIHR5cGVkIGFzIGBjb25zdCBjaGFyKicgdG8gbWF0Y2ggd2l0aCB0aGUKKwljYWxsZXJzIGluIEZUX05ld19GYWNlX0Zyb21fTFdGTiBhbmQgRlRfTmV3X0ZhY2VfRnJvbV9TRk5ULgorCVRoaXMgaXMgc2FtZSB3aXRoIG9wZW5fZmFjZV9mcm9tX2J1ZmZlciBpbiBzcmMvYmFzZS9mdG9ianMuYy4KKwlGb3VuZCBhbmQgZml4ZWQgYnkgU2VhbiBNY0JyaWRlLgorCisyMDA3LTA3LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoY291bnRfdGFibGUpOiBNYWtlIGl0IGNvbmRpdGlvbmFsLgorCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19MaWJyYXJ5KTogQ2hlY2sgRlRfUkVOREVSX1BPT0xfU0laRSB3aXRoCisJYSBwcmVwcm9jZXNzb3Igc3RhdGVtZW50LgorCisyMDA3LTA3LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9UcmFuc2xhdGUpOiBDaGVjayBgb3V0bGluZScgYmVmb3JlCisJZmlyc3QgdXNhZ2UuICBGcm9tIFNhdmFubmFoIHBhdGNoICM2MTE1LgorCisyMDA3LTA3LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNy0wNy0xNiAgRGVyZWsgQ2xlZ2cgIDxkY2xlZ2dAYXBwbGUuY29tPgorCisJQWRkIG5ldyBzZXJ2aWNlIGZvciBnZXR0aW5nIHRoZSBST1MgZnJvbSBhIENJRCBmb250LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9DSURfSCk6IE5ldyBtYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaDogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX1NFUlZJVkVfQ0lEX0gpOiBOZXcgbWFjcm8uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmg6IE5ldyBmaWxlLgorCisJKiBzcmMvYmFzZS9mdGNpZC5jOiBOZXcgZmlsZS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfQ0lEX0guCisJKGNmZl9nZXRfcm9zKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfc2VydmljZV9jaWRfaW5mbyk6IE5ldyBzZXJ2aWNlIHN0cnVjdHVyZS4KKwkoY2ZmX3NlcnZpY2VzKTogUmVnaXN0ZXIgaXQuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9kb25lKTogRnJlZSByZWdpc3RyeSBhbmQgb3JkZXJpbmcuCisKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX0ZvbnRSZWMpOiBBZGQgYHJlZ2lzdHJ5JyBhbmQgYG9yZGVyaW5nJy4KKworCSogbW9kdWxlcy5jZmcgKEJBU0VfRVhURU5TSU9OUyk6IEFkZCBmdGNpZC5jLgorCisyMDA3LTA3LTExICBEZXJlayBDbGVnZyAgPGRjbGVnZ0BhcHBsZS5jb20+CisKKwlBZGQgc3VwcG9ydCBmb3IgcG9zdHNjcmlwdCBuYW1lIHNlcnZpY2UgdG8gQ0ZGIGRyaXZlci4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0guCisJKGNmZl9nZXRfcHNfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX3NlcnZpY2VfcHNfbmFtZSk6IE5ldyBzZXJ2aWNlIHN0cnVjdHVyZS4KKwkoY2ZmX3NlcnZpY2VzKTogUmVnaXN0ZXIgaXQuCisKKzIwMDctMDctMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Db3B5KTogRml4IGluaXRpYWxpemF0aW9uIG9mCisJYHRhcmdldCcuICBSZXBvcnRlZCBieSBTZWFuIE1jQnJpZGUuCisKKzIwMDctMDctMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3Bmci9wZnJjbWFwLmM6IEluY2x1ZGUgcGZyZXJyb3IuaC4KKworCSogc3JjL2F1dG9maXQvYWZpbmRpYy5jOiBBZGQgc29tZSBleHRlcm5hbCBkZWNsYXJhdGlvbnMgdG8gcGFjaWZ5CisJYG1ha2UgbXVsdGknIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9sb2FkX2dseXBoKTogUGFjaWZ5IGNvbXBpbGVyLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wc19nZXRfZm9udF9pbmZvKSwgc3JjL2NmZi9jZmZvYmpzLmMKKwkoY2ZmX3N0cmNweSksIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaCAoRlRfTUVNX1NUUkRVUCksCisJc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzKSwKKwlzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfY29tcHV0ZV9lZGdlcyksIHNyYy9zZm50L3R0bXR4LmMKKwkodHRfZmFjZV9nZXRfbWV0cmljcyksIHNyYy9iYXNlL2Z0b2Jqcy5jIChvcGVuX2ZhY2UpCisJW0ZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUxdOiBGaXggY29tcGlsYXRpb24gd2l0aCBDKysgY29tcGlsZXIuCisKKwkqIGRvY3MvcmVsZWFzZTogTWVudGlvbiB0ZXN0IGNvbXBpbGF0aW9uIHRhcmdldHMuCisKKzIwMDctMDctMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9QUk9CTEVNUzogTWVudGlvbiB0aGF0IHNvbWUgUFMgYmFzZWQgZm9udHMgY2FuJ3QgYmUKKwloYW5kbGVkIGNvcnJlY3RseSBieSBGcmVlVHlwZS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEFsd2F5cyBhbGxvdyBhCisJcmVjdXJzaW9uIGRlcHRoIG9mIDEuICBUaGlzIHdhcyB0aGUgbWF4aW11bSB2YWx1ZSBpbiBUcnVlVHlwZSAxLjAsCisJYW5kIHNvbWUgb2xkZXIgZm9udHMgZG9uJ3Qgc2V0IHRoaXMgZmllbGQgY29ycmVjdGx5LgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0MS5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnN0VGFibGVfdmFsaWRhdGUpOiBGaXggdHJhY2luZyBtZXNzYWdlLgorCisyMDA3LTA3LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKTogSW5pdGlhbGl6ZQorCWByb3VuZCcgdG8gcGFjaWZ5IGNvbXBpbGVyLgorCisyMDA3LTA3LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKworCSogVmVyc2lvbiAyLjMuNSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtNScuCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAKKwl2ZXJzaW9uIG51bWJlciB0byAyLjMuNS4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qOiBzLzIuMy40LzIuMy41Lywgcy8yMzQvMjM1Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA1LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToxNjozLgorCisyMDA3LTA3LTAxICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwgc3JjL2Jhc2UvZnRwYXRlbnQuYworCShGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nKTogTmV3IGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IGNoYW5nZQorCXRoZSBzZXR0aW5nIGFmdGVyIGEgZmFjZSBpcyBjcmVhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IEZpeCBhIHNtYWxsIGJ1ZworCXRoYXQgY3JlYXRlZCBkaXN0b3J0aW9ucyBpbiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgcmVzdWx0cy4KKworMjAwNy0wNi0zMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lVUCk6IEFkZCBtaXNzaW5nIHZhcmlhYmxlCisJaW5pdGlhbGl6YXRpb24uCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljX2luaXRfYmx1ZXMpOiBHZXQgcmlkIG9mIGFuCisJaW5maW5pdGUgbG9vcCBpbiB0aGUgY2FzZSBvZiBkZWdlbmVyYXRlIGZvbnRzLgorCisyMDA3LTA2LTI2ICBSYWh1bCBCaGFsZXJhbyAgPGIucmFodWwucG1AZ21haWwuY29tPgorCisJQWRkIGF1dG9maXQgbW9kdWxlIGZvciBJbmRpYyBzY3JpcHRzLiAgVGhpcyBjdXJyZW50bHkganVzdCByZXVzZXMKKwl0aGUgQ0pLLXNwZWNpZmljIGZ1bmN0aW9ucy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoQUZfQ09ORklHX09QVElPTl9JTkRJQyk6IE5ldworCW1hY3JvLgorCSogZGV2ZWwvZnRvcHRpb24uaDogU3luY2hyb25pemUgd2l0aAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmguCisKKwkqIHNyYy9hdXRvZml0L2FmaW5kaWMuYywgc3JjL2F1dG9maXQvYWZpbmRpYy5oOiBOZXcgZmlsZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMsIHNyYy9hdXRvZml0L2FmdHlwZXMuaCwKKwlzcmMvYXV0b2ZpdC9hdXRvZml0LmM6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L0phbWZpbGUgKF9zb3VyY2VzKSwgKiBzcmMvYXV0b2ZpdC9ydWxlcy5taworCShBVVRPRl9EUlZfU1JDKTogVXBkYXRlZC4KKworMjAwNy0wNi0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZSk6IEZpeCBjaGFuZ2UgZnJvbQorCTIwMDctMDYtMTYgdGhhdCBwcmV2ZW50ZWQgdGhlIFRydWVUeXBlIG1vZHVsZSBmcm9tIGxvYWRpbmcgbW9zdAorCWdseXBocy4KKworMjAwNy0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9zbG90X2xvYWQpOiBGaXggbG9naWMgb2YgMjAwNy0wNS0yOAorCWNoYW5nZS4KKworMjAwNy0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2VuY29kaW5nKTogSGFuZGxlIG9uZSBtb3JlIGVycm9yLgorCisyMDA3LTA2LTE5ICBEbWl0cnkgVGltb3Noa292ICA8ZG1pdHJ5QGNvZGV3ZWF2ZXJzLmNvbT4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChmbnRfZmFjZV9nZXRfZGxsX2ZvbnQpOiBSZXR1cm4gZXJyb3IKKwlGTlRfRXJyX0ludmFsaWRfRmlsZV9Gb3JtYXQgaWYgZmlsZSBmb3JtYXQgd2FzIHJlY29nbml6ZWQgYnV0CisJdGhlIGZpbGUgZG9lc24ndCBjb250YWluIGFueSBGTlQoTkUpIG9yIFJUX0ZPTlQoUEUpIHJlc291cmNlcy4KKwlBZGQgdmVyYm9zZSBkZWJ1ZyBsb2dzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIGZhaWxpbmcgbG9hZAorCWF0dGVtcHRzLgorCShGTlRfRmFjZV9Jbml0KTogQSBzaW5nbGUgRk5UIGZvbnQgY2FuJ3QgY29udGFpbiBtb3JlIHRoYW4gMSBmYWNlLAorCXNvIHJldHVybiBhbiBlcnJvciBpZiByZXF1ZXN0ZWQgZmFjZSBpbmRleCBpcyA+IDAuCisJRG8gbm90IGRvIGZ1cnRoZXIgYXR0ZW1wdCB0byBsb2FkIGZvbnRzIGlmIGEgcHJldmlvdXMgYXR0ZW1wdCBoYXMKKwlmYWlsZWQgYnV0IHJldHVybmVkIGVycm9yIEZOVF9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCwgaS5lLiwgdGhlCisJZmlsZSBmb3JtYXQgaGFzIGJlZW4gcmVjb2duaXplZCBidXQgbm8gZm9udHMgZm91bmQgaW4gdGhlIGZpbGUuCisKKzIwMDctMDctMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IEFwcGx5IHBhdGNoZXMgcHJvcG9zZWQgYnkgU2VhbiBNY0JyaWRlLgorCShGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUpOiBJbnNlcnQgRlRfVU5VU0VEIG1hY3JvcyB0byBmaXgKKwl0aGUgY29tcGlsZXIgd2FybmluZ3MgYWdhaW5zdCB1bnVzZWQgYXJndW1lbnRzLgorCShGVF9BVFNGb250R2V0RmlsZVJlZmVyZW5jZSk6IERpdHRvLgorCShGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lKTogRGl0dG8uCisJKEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKTogRGl0dG8uCisJKGxvb2t1cF9sd2ZuX2J5X2ZvbmQpOiBGaXggd3JvbmcgY29tbWVudC4KKwlSZXBsYWNlIGBjb25zdCBTdHJpbmdQdHInIGJ5IG1vcmUgYXBwcm9wcmlhdGUgdHlwZQorCWBDb25zdFN0cjI1NVBhcmFtJy4KKwlGU1JlZk1ha2VQYXRoUGF0aCBhbHdheXMgcmV0dXJucyBVVEY4IFBPU0lYIHBhdGhuYW1lIGluCisJTWFjaC1PLCB0aHVzIEhGUyBwYXRobmFtZSBzdXBwb3J0IGlzIGRyb3BwZWQuCisJKGNvdW50X2ZhY2VzKTogUmVtb3ZlIEhMb2NrIGFuZCBIVW5sb2NrIHdoaWNoIGlzIG5vdAorCXJlcXVpcmVkIG9uIE1hYyBPUyBYIGFueW1vcmUuCisJKEZUX05ld19GYWNlX0Zyb21fU0ZOVCk6IERpdHRvLgorCShGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQpOiBEaXR0by4KKwkqIGJ1aWxkcy9tYWMvZnRtYWMuYzogU3luY2hyb25pemUgdG8gc3JjL2Jhc2UvZnRtYWMuYywKKwlleGNlcHQgb2YgSEZTIHBhdGhuYW1lIHN1cHBvcnQgYW5kIEhMb2NrL0hVbmxvY2suCisJVGhleSBhcmUgcmVxdWlyZWQgb24gY2xhc3NpYyBDRk0gZW52aXJvbm1lbnQuCisKKzIwMDctMDYtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19wYXJzZXJfc2tpcF9QU190b2tlbik6IFJlbW92ZSBpbmNvcnJlY3QKKwlhc3NlcnRpb24uCisJKHBzX3BhcnNlcl90b19ieXRlcyk6IEZpeCBlcnJvciBtZXNzYWdlLgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX09wZW5fRmFjZSk6IEhhbmRsZSBvbmUgbW9yZSBlcnJvci4KKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX3NmbnRzKTogcy9hbGxvYy9hbGxvY2F0ZWQvLgorCURvbid0IGFsbG93IG1peGVkIGJpbmFyeSBhbmQgaGV4IHN0cmluZ3MuCisJSGFuZGxlIHN0cmluZ19zaXplID09IDAgYW5kIHN0cmluZ19idWYgPT0gMC4KKwkodDQyX3BhcnNlX2VuY29kaW5nKTogSGFuZGxlIG9uZSBtb3JlIGVycm9yLgorCisyMDA3LTA2LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfdG9maXhlZGFycmF5LCBwc190b2Nvb3JkYXJyYXkpOiBGaXggZXhpdAorCWxvZ2ljLgorCShwc19wYXJzZXJfbG9hZF9maWVsZCkgPFQxX0ZJRUxEX1RZUEVfQkJPWD46IFNraXAgZGVsaW1pdGVycworCWNvcnJlY3RseS4KKwkocHNfcGFyc2VyX2xvYWRfZmllbGRfdGFibGUpOiBVc2UgYGZpZWxkcy0+YXJyYXlfbWF4JyBpbnN0ZWFkIG9mCisJVDFfTUFYX1RBQkxFX0VMRU1FTlRTIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3ByZXBhcmUpOiBGaXggY2hhbmdlIGZyb20KKwkyMDA3LTA2LTA2LgorCisyMDA3LTA2LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90b29scy9mdHJhbmRvbS5jIChmb250X3NpemUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgorCShUZXN0RmFjZSk6IFVzZSBpdC4KKwkobWFpbik6IEhhbmRsZSBuZXcgb3B0aW9uIGAtLXNpemUnIHRvIHNldCBgZm9udF9zaXplJy4KKwkoVXNhZ2UpOiBVcGRhdGVkLgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKGZudF9mYWNlX2dldF9kbGxfZm9udCk6IEV4aXQgaW4gY2FzZSBvZgorCWludmFsaWQgZm9udC4KKwkoRk5UX0xvYWRfR2x5cGgpOiBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBiaXRtYXAgd2lkdGguCisKKzIwMDctMDYtMTYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfZmluZF9jZWxsLCBncmF5X3NldF9jZWxsLCBncmF5X2hsaW5lKToKKwlQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gcmVuZGVyaW5nIHZlcnkgbGFyZ2Ugb3V0bGluZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogQ2hlY2sgdGhlCisJd2VsbC1mb3JtZWRuZXNzIG9mIHRoZSBjb250b3VycyBhcnJheSB3aGVuIGxvYWRpbmcgYSBnbHlwaC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX0xvYWRfQ29udGV4dCk6IEluaXRpYWxpemUgYHpwMCcsIGB6cDEnLAorCWFuZCBgenAyJy4KKwkoSW5zX0lQKTogQ2hlY2sgYXJndW1lbnQgcmFuZ2VzIHRvIHJlamVjdCBib2d1cyBvcGVyYXRpb25zIHByb3Blcmx5LgorCShJVVBfV29ya2VyUmVjKTogQWRkIGBtYXhfcG9pbnRzJyBtZW1iZXIuCisJKF9pdXBfd29ya2VyX2ludGVycG9sYXRlKTogQ2hlY2sgYXJndW1lbnQgcmFuZ2VzLgorCShJbnNfSVVQKTogSWdub3JlIGVtcHR5IG91dGxpbmVzLgorCisyMDA3LTA2LTE2ICBEbWl0cnkgVGltb3Noa292ICA8ZG1pdHJ5QGNvZGV3ZWF2ZXJzLmNvbT4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5oOiBBZGQgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIFBFIHJlc291cmNlCisJcGFyc2luZy4KKwkoV2luUEUzMl9IZWFkZXJSZWMpOiBOZXcgc3RydWN0dXJlLgorCShXaW5QRTMyX1NlY3Rpb25SZWMpOiBOZXcgc3RydWN0dXJlLgorCShXaW5QRV9Sc3JjRGlyUmVjKTogTmV3IHN0cnVjdHVyZS4KKwkoV2luUEVfUnNyY0RpckVudHJ5UmVjKTogTmV3IHN0cnVjdHVyZS4KKwkoV2luUEVfUnNyY0RhdGFFbnRyeVJlYyk6IE5ldyBzdHJ1Y3R1cmUuCisJKEZOVF9Gb250UmVjKTogUmVtb3ZlIHVudXNlZCBgc2l6ZV9zaGlmdCcgZmllbGQuCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoZm50X2ZhY2VfZ2V0X2RsbF9mb250KTogQWRkIHN1cHBvcnQgZm9yCisJbG9hZGluZyBiaXRtYXAgLmZvbiBmaWxlcyBpbiBQRSBmb3JtYXQuCisKKzIwMDctMDYtMTUgIERtaXRyeSBUaW1vc2hrb3YgIDxkbWl0cnlAY29kZXdlYXZlcnMuY29tPgorCisJKiBidWlsZHMvd2luMzIvZnRkZWJ1Zy5jOiBVbmlmeSBkZWJ1ZyBsZXZlbCBoYW5kbGluZyB3aXRoIG90aGVyCisJcGxhdGZvcm1zLgorCisyMDA3LTA2LTE0ICBEbWl0cnkgVGltb3Noa292ICA8ZG1pdHJ5QGNvZGV3ZWF2ZXJzLmNvbT4KKworCSogYnVpbGRzL3dpbjMyL2Z0ZGVidWcuYyAoRlRfTWVzc2FnZSk6IFNlbmQgZGVidWcgb3V0cHV0IHRvIHRoZQorCWNvbnNvbGUgYXMgd2VsbCBhcyB0byB0aGUgZGVidWdnZXIuCisKKzIwMDctMDYtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl91bmlyYW5nZXMpOiBFeHBhbmQgc3RydWN0dXJlIHRvCisJY292ZXIgYWxsIHJhbmdlcyB3aGljaCBjb3VsZCBwb3NzaWJseSBiZSBoYW5kbGVkIGJ5IHRoZSBhZmxhdGluCisJbW9kdWxlIChzaW5jZSB0aGUgZGVmYXVsdCBmYWxsYmFjayBmb3IgdW5rbm93biByYW5nZXMgaXMgbm93IHRoZQorCWFmY2prIG1vZHVsZSkuICBJdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZmluZS10dW5lIHRoaXMgZnVydGhlciBieQorCXNwbGl0dGluZyBvZmYgbW9kdWxlcyBmb3IgR3JlZWssIEN5cmlsbGljLCBvciBvdGhlciBibG9ja3MuCisKKzIwMDctMDYtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzKTogRml4CisJaW5jb3JyZWN0IHNlZ21lbnQgbGlua2luZyBjb21wdXRhdGlvbi4gIFRoaXMgd2FzIHRoZSByb290IGNhdXNlIG9mCisJU2F2YW5uYWggYnVnICMxOTU2NS4KKworCisJKiBzcmMvYXV0b2ZpdC8qIFtGVF9PUFRJT05fQVVUT0ZJVDJdOiBTb21lIHZlcnkgZXhwZXJpbWVudGFsIGNoYW5nZXMKKwl0byBpbXByb3ZlIHRoZSBMYXRpbiBhdXRvLWhpbnRlci4gIE5vdGUgdGhhdCB0aGUgbmV3IGNvZGUgaXMKKwlkaXNhYmxlZCBieSBkZWZhdWx0IHNpbmNlIGl0IGlzIG5vdCBzdGFiaWxpemVkIHlldC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYywgc3JjL2F1dG9maXQvYWZsYXRpbjIuaDogTmV3IGZpbGVzCisJKGRpc2FibGVkIGN1cnJlbnRseSkuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYzogUmVtb3ZlIGRlYWQgY29kZS4KKwkoYWZfYXhpc19oaW50c19uZXdfZWRnZSk6IEFkZCBhcmd1bWVudCB0byBoYW5kbGUgc2VnbWVudCBkaXJlY3Rpb25zLgorCShhZl9lZGdlX2ZsYWdzX3RvX3N0cmluZyk6IE5ldyBmdW5jdGlvbi4KKwkoYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cywgYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyk6IEhhbmRsZQorCW9wdGlvbiBmbGFncy4KKwkoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogQWRkIGFyZ3VtZW50IHRvIGhhbmRsZSBpbmZsZWN0aW9ucy4KKwlTaW1wbGlmeS4KKwkoYWZfZGlyZWN0aW9uX2NvbXB1dGUpOiBGaW5lIHR1bmluZy4KKwkoYWZfZ2x5cGhfaGludHNfYWxpZ25fZWRnZV9wb2ludHMpOiBGaXggbG9naWMuCisJKGFmX2dseXBoX2hpbnRzX2FsaWduX3N0cm9uZ19wb2ludHMpOiBEbyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbAorCWVkZ2UgY291bnRzLgorCShhZl9nbHlwaF9oaW50c19hbGlnbl93ZWFrX3BvaW50cyk6IFNraXAgYW55IHRvdWNoZWQgbmVpZ2hib3JzLgorCShhZl9pdXBfc2hpZnQpOiBIYW5kbGUgemVybyBgZGVsdGEnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmg6IFVwZGF0ZWQuCisJKEFGX1NPUlRfU0VHTUVOVFMpOiBOZXcgbWFjcm8gKGRpc2FibGVkKS4KKwkoQUZfQXhpc0hpbnRzUmVjKSBbQUZfU09SVF9TRUdNRU5UU106IE5ldyBtZW1iZXIgYG1pZF9zZWdtZW50cycuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19nZXRfbWV0cmljcyk6IEFkZAorCWFyZ3VtZW50IHRvIHBhc3Mgb3B0aW9uIGZsYWdzIGZvciBoYW5kbGluZyBzY3JpcHRzLgorCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaDogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYzogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYzogVXBkYXRlZC4KKwkoYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW0pOiBEb24ndCByZWR1Y2Ugc2NhbGUgYnkgMiUuCisKKwkoYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cykgW0FGX0hJTlRfTUVUUklDU106IFJlbW92ZSBkZWFkIGNvZGUuCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMpIFtBRl9ISU5UX01FVFJJQ1NdOiBSZW1vdmUgZGVhZCBjb2RlLgorCURvbid0IHNldCBgZWRnZS0+ZGlyJworCShhZl9sYXRpbl9oaW50X2VkZ2VzKTogQWRkIG1vcmUgbG9nZ2luZy4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYzogVXBkYXRlZC4KKworMjAwNy0wNi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMuCisKKzIwMDctMDYtMTAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBTbGlnaHQgc3BlZWQtdXAgdG8KKwl0aGUgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBDbGFyaWZ5IGRvY3VtZW50YXRpb24KKwlyZWdhcmRpbmcgdW5wYXRlbnRlZCBoaW50aW5nLgorCisKKwlBZGQgbmV3IGBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzJyBBUEkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyk6IE5ldworCWRlY2xhcmF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgsCisJc3JjL2Jhc2UvZnRwYXRlbnQuYzogTmV3IGZpbGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSCk6CisJTmV3IG1hY3JvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSCBhbmQKKwlgdHRwbG9hZC5oJy4KKwkodHRfc2VydmljZV90cnVldHlwZV9nbHlmKTogTmV3IHNlcnZpY2Ugc3RydWN0dXJlLgorCSh0dF9zZXJ2aWNlcyk6IFJlZ2lzdGVyIGl0LgorCisJKiBtb2R1bGVzLmNmZyAoQkFTRV9FWFRFTlNJT05TKSwgc3JjL2Jhc2UvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGQKKwlgZnRwYXRlbnQuYycuCisKKzIwMDctMDYtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogVW5kbyBjaGFuZ2UgZnJvbSAyMDA3LTA0LTI4LgorCUZvbnRzIHdpdGhvdXQgYSBjbWFwIG11c3QgYmUgaGFuZGxlZCBjb3JyZWN0bHkgYnkgRnJlZVR5cGUgKGFueXRoaW5nCisJZWxzZSB3b3VsZCBiZSBhIGJ1ZykuCisKKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJW0ZUX0RFQlVHX0xFVkVMX1RSQUNFXTogSW1wcm92ZSB0cmFjaW5nIG1lc3NhZ2UuCisKKzIwMDctMDYtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRzYml0MC5jICh0dF9zYml0X2RlY29kZXJfaW5pdCwKKwl0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSk6IFByb3RlY3QgYWdhaW5zdCBpbnRlZ2VyIG92ZXJmbG93cy4KKworCisJKiBzcmMvcGZyL3Bmcmdsb2FkLmMgKHBmcl9nbHlwaF9sb2FkX3NpbXBsZSk6IE1vcmUgYm91bmRpbmcgY2hlY2tzCisJZm9yIGB4X2NvbnRyb2wnIGFuZCBgeV9jb250cm9sJy4KKworMjAwNy0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfRGVjb21wb3NlKTogQ2hlY2sgYGxhc3QnLgorCisKKwkqIHNyYy9wZnIvcGZyY21hcC5jIChwZnJfY21hcF9pbml0KTogQ29udmVydCBhc3NlcnRpb24gaW50byBub3JtYWwKKwlGcmVlVHlwZSBlcnJvci4KKworCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKGZudF9mYWNlX2dldF9kbGxfZm9udCk6IERvIGEgcm91Z2ggY2hlY2sgb2YKKwlgZm9udF9jb3VudCcuCisKKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9mb250X21hdHJpeCk6IENoZWNrIGB0ZW1wX3NjYWxlJy4KKworCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3ByZXBhcmUpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8KKwlgRlRfRXJyb3InLgorCUNoZWNrIGBmZF9pbmRleCcuCisJKGNmZl9zbG90X2xvYWQpOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZnbG9hZC5oOiBVcGRhdGVkLgorCisyMDA3LTA2LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2RvbmUpOiBDb21tZW50IG91dCB1bnVzZWQgY29kZS4KKwkocGZyX2dseXBoX2xvYWRfc2ltcGxlKTogQ29udmVydCBhc3NlcnRpb24gaW50byBub3JtYWwgRnJlZVR5cGUKKwllcnJvci4KKwlDaGVjayBgaWR4Jy4KKwkocGZyX2dseXBoX2xvYWRfY29tcG91bmQsIHBmcl9nbHlwaF9jdXJ2ZV90bywgcGZyX2dseXBoX2xpbmVfdG8pOgorCUNvbnZlcnQgYXNzZXJ0aW9uIGludG8gbm9ybWFsIEZyZWVUeXBlIGVycm9yLgorCisJKiBzcmMvcGZyL3BmcnR5cGVzLmggKFBGUl9HbHlwaFJlYyk6IENvbW1lbnQgb3V0IHVudXNlZCBjb2RlLgorCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCk6IENoZWNrIGBmYW1pbHlfc2l6ZScuCisKKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc190b2Nvb3JkYXJyYXksIHBzX3RvZml4ZWRhcnJheSk6IFJldHVybiAtMQorCWluIGNhc2Ugb2YgcGFyc2luZyBlcnJvci4KKwkocHNfcGFyc2VyX2xvYWRfZmllbGQpOiBVcGRhdGVkLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2ZvbnRfbWF0cml4KTogVXBkYXRlZC4KKworMjAwNy0wNi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9sb2FkX2dseXBoKTogQ2hlY2sgYGZkX3NlbGVjdCcuCisKKwkqIHNyYy90b29scy9mdHJhbmRvbS9NYWtlZmlsZTogRGVwZW5kIG9uIGBsaWJmcmVldHlwZS5hJy4KKworMjAwNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZnRyYW5kb20vKjogQWRkIHRoZSBgZnRyYW5kb20nIHRlc3QgcHJvZ3JhbSB3cml0dGVuIGJ5CisJR2VvcmdlIFdpbGxpYW1zICh3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucykuCisKKzIwMDctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGRlc3Ryb3lfY2hhcm1hcHMpLCBzcmMvdHlwZTEvdDFvYmpzLmMKKwkoVDFfRmFjZV9Eb25lKSwgc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfRmFjZV9Eb25lKTogQ2hlY2sgZm9yCisJZmFjZSA9PSBOVUxMLiAgU3VnZ2VzdGVkIGJ5IEdyYWhhbSBBc2hlci4KKworMjAwNy0wNi0wMyAgSXNtYWlsIETDtm5tZXogIDxpc21haWxAcGFyZHVzLm9yZy50cj4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlcXVlc3RfTWV0cmljcyk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCisyMDA3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCAoRlRfRXJyX0NvcnJ1cHRlZF9Gb250X0hlYWRlciwKKwlGVF9FcnJfQ29ycnVwdGVkX0ZvbnRfR2x5cGhzKTogTmV3IGVycm9yIGNvZGVzIGZvciBCREYgZmlsZXMuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKGJkZl9sb2FkX2ZvbnQpOiBVc2UgdGhlbS4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9zdGFydCk6IENoZWNrIGBGT05UJyBiZXR0ZXIuCisKKzIwMDctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlcXVlc3RfTWV0cmljcyksIHNyYy9jYWNoZS9mdGNjbWFwLmMKKwkoRlRDX0NNYXBDYWNoZV9Mb29rdXApOiBSZW1vdmUgdW51c2VkIGNvZGUuCisKKzIwMDctMDYtMDEgIFNlYW4gTWNCcmlkZSAgPHNlYW5Acm9ndWUtcmVzZWFyY2guY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoTnVsbF9WZWN0b3IsIE5VTExfVmVjdG9yKTogUmVtb3ZlZCwKKwl1bnVzZWQuCisKKzIwMDctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VyX25ldyk6IERvbid0IGNvbnRpbnVlIHNlY29uZCBzZWFyY2gKKwlwYXNzIGZvciBgU3RhcnREYXRhJyBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuCisJRXhpdCBwcm9wZXJseSBpZiBubyBgU3RhcnREYXRhJyBoYXMgYmVlbiBzZWVuIGF0IGFsbC4KKworCSogYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYyAoRlRfU3RyZWFtX09wZW4pOiBEb24ndCB1c2UgVUxPTkdfTUFYIGJ1dAorCUxPTkdfTUFYIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuICBTdWdnZXN0ZWQgYnkgU2VhbiBNY0JyaWRlLgorCisyMDA3LTA1LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2Vfc3VicnMsIHBhcnNlX2NoYXJzdHJpbmdzKTogUHJvdGVjdAorCWFnYWluc3QgdG9vIHNtYWxsIGJpbmFyeSBkYXRhIHN0cmluZ3MuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKTogQ2hlY2sgYFNUQVJUQ0hBUicgYmV0dGVyLgorCisyMDA3LTA1LTI4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IERvIG5vdCBhcHBseSB0aGUgaWRlbnRpdHkKKwl0cmFuc2Zvcm1hdGlvbi4gIFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBsb2FkaW5nIHRpbWUgb2YgQ0ZGCisJZ2x5cGhzLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKEFGX1NDUklQVF9MSVNUX0RFRkFVTFQpOiBDaGFuZ2UgZGVmYXVsdAorCWhpbnRpbmcgc2NyaXB0IHRvIENKSywgc2luY2UgaXQgd29ya3Mgd2VsbCB3aXRoIG1vcmUgc2NyaXB0cyB0aGFuCisJbGF0aW4uICBUaGFua3MgdG8gUmFodWwgQmhhbGVyYW8gPGIucmFodWwucG1AZ21haWwuY29tPiBmb3IgcG9pbnRpbmcKKwl0aGlzIG91dCEKKworMjAwNy0wNS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMDctMDUtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oICh0dF9zaXplX3JlYWR5X2J5dGVjb2RlKTogTW92ZSBkZWNsYXJhdGlvbgorCWludG8gVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIHByZXByb2Nlc3NvciBibG9jay4KKworMjAwNy0wNS0yNCAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUpCisJWyFUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVJdOiBSZW1vdmVkLiAgVW51c2VkLgorCisyMDA3LTA1LTIyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBGaXggbGFzdCBjaGFuZ2UgdG8KKwlhdm9pZCBjcmFzaGVzIGluIGNhc2UgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIGlzIG5vdCB1c2VkLgorCisKKwlBdm9pZCBoZWFwIGJsb3d1cCB3aXRoIHZlcnkgbGFyZ2UgLlogZm9udCBmaWxlcy4gIFRoaXMgZml4ZXMKKwlTYXZhbm5haCBidWcgIzE5OTEwLgorCisJKiBzcmMvbHp3L2Z0em9wZW4uaCAoRlRfTHp3U3RhdGVSZWMpOiBSZW1vdmUgYGluX2N1cnNvcicsCisJYGluX2xpbWl0JywgYHBhZCcsIGBwYWRfYml0cycsIGFuZCBgaW5fYnVmZicgbWVtYmVycy4KKwlBZGQgYGJ1Zl90YWInLCBgYnVmX29mZnNldCcsIGBidWZfc2l6ZScsIGBidWZfY2xlYXInLCBhbmQKKwlgYnVmX3RvdGFsJyBtZW1iZXJzLgorCisJKiBzcmMvbHp3L2Z0em9wZW4uYyAoZnRfbHp3c3RhdGVfZ2V0X2NvZGUpOiBSZXdyaXR0ZW4uICBJdCBub3cgdGFrZXMKKwlvbmx5IG9uZSBhcmd1bWVudC4KKwkoZnRfbHp3c3RhdGVfcmVmaWxsLCBmdF9sendzdGF0ZV9yZXNldCwgZnRfbHp3c3RhdGVfaW8pOiBVcGRhdGVkLgorCisyMDA3LTA1LTIwICBJc21haWwgRMO2bm1leiAgPGlzbWFpbEBwYXJkdXMub3JnLnRyPgorCisJKiBzcmMvcHNoaW50ZXIvcHNocmVjLmMgKHBzX21hc2tfdGFibGVfc2V0X2JpdHMpOiBBZGQgYGNvbnN0Jy4KKwkocHNfZGltZW5zaW9uX3NldF9tYXNrX2JpdHMpOiBSZW1vdmUgYGNvbnN0Jy4KKworMjAwNy0wNS0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2dldF9tZXRyaWNzKQorCVshRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTXTogQW5vdGhlciB0eXBlLXB1bm5pbmcgZml4LgorCisyMDA3LTA1LTE5ICBEZXJlayBDbGVnZyAgPGRjbGVnZ0BhcHBsZS5jb20+CisKKwlTYXZhbm5haCBwYXRjaCAjNTkyOS4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oLCBzcmMvYmFzZS9mdG9iamNzLmMKKwkoRlRfR2V0X0NNYXBfRm9ybWF0KTogTmV3IGZ1bmN0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmMgKFRUX0NNYXBJbmZvKTogQWRkCisJYGZvcm1hdCcgbWVtYmVyLgorCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXB7MCwyLDQsNiw4LDEwLDEyfV9nZXRfaW5mbyk6IFNldAorCWNtYXBfaW5mby0+Zm9ybWF0LgorCisyMDA3LTA1LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBTYXZlIGdyYXBoaWNzIHN0YXRlCisJYmVmb3JlIGhhbmRsaW5nIHN1YmdseXBocyBzbyB0aGF0IGl0IGNhbiBiZSByZWluaXRpYWxpemVkIGVhY2ggdGltZS4KKwlUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMTk4NTkuCisKKzIwMDctMDUtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKGZ0Y19ub2RlX21ydV9saW5rLCBmdGNfbm9kZV9tcnVfdW5saW5rKSwKKwlzcmMvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX0NBQ0hFX0xPT0tVUF9DTVApLCBzcmMvY2FjaGUvZnRjZ2x5cGguaAorCShGVENfR0NBQ0hFX0xPT0tVUF9DTVApLCBzcmMvcHNoaW50ZXIvcHNobW9kLmMgKHBzX2hpbnRlcl9pbml0KSwKKwlzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2xvYWRfaG10eCwgdHRfZmFjZV9sb2FkX2hoZWEsCisJdHRfZmFjZV9nZXRfbWV0cmljcyk6IEZpeCB0eXBlLXB1bm5pbmcgaXNzdWVzLgorCisyMDA3LTA1LTE1ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaDogQXMgc3VnZ2VzdGVkIGJ5IEdyYWhhbSBBc2hlciwKKwllbnN1cmUgdGhhdCBmdF9pc2FsbnVtLCBmdF9pc2RpZ2l0LCBldGMuLCB1c2UgaGFyZC1jb2RlZCB2YWx1ZXMKKwlpbnN0ZWFkIG9uIHJlbHlpbmcgb24gdGhlIGxvY2FsZS1kZXBlbmRlbnQgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5CisJPGN0eXBlcy5oPi4KKworMjAwNy0wNS0xNSAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfY29tcHV0ZV9lZGdlcyk6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZS4KKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpOiBEaXR0by4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3ZhbGlkYXRvcl9lcnJvcik6IFVzZSBgZnRfam1wX2J1ZicuCisJKG9wZW5fZmFjZV9mcm9tX2J1ZmZlcik6IEluaXRpYWxpemUgYHN0cmVhbScuCisJKEZUX1JlcXVlc3RfTWV0cmljcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisJUmVtb3ZlIHJlZHVuZGFudCBgYnJlYWsnIHN0YXRlbWVudHMuCisJKEZUX0dldF9UcmFja19LZXJuaW5nKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKworCSogc3JjL3BzYXV4L2FmbXBhcnNlLmMgKGFmbV9wYXJzZV90cmFja19rZXJuLCBhZm1fcGFyc2Vfa2Vybl9wYWlycywKKwlhZm1fcGFyc2Vfa2Vybl9kYXRhKTogUmVtb3ZlIHJlZHVuZGFudAorCWBicmVhaycgc3RhdGVtZW50cy4KKwkoYWZtX3BhcnNlcl9wYXJzZSk6IERpdHRvLgorCURvbid0IHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKworCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyAoVkFSSUFOVF9CSVQpOiBEZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4KKwlVc2UgYHwnIG9wZXJhdG9yIGluc3RlYWQgb2YgYF4nIHRvIHNldCBpdC4KKwlVcGRhdGUgYWxsIHVzZXJzLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfZmFjZV9idWlsZF9jbWFwcyk6IFVzZSBgZnRfam1wX2J1ZicuCisJKiBzcmMvc2ZudC90dGtlcm4uYyAodHRfZmFjZV9sb2FkX2tlcm4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IFJlbW92ZSByZWR1bmRhbnQKKwljb21wYXJpc29uLgorCShUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCk6IFVzZSBGVF9VSW50IGZvciBgbl9wb2ludHMnIGFuZCBgaScuCisJKFRUX0xvYWRfR2x5cGgpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCisyMDA3LTA1LTEzICBEZXJlayBDbGVnZyAgPGRjbGVnZ0BhcHBsZS5jb20+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9OZXdfTGlicmFyeSk6IE9ubHkgYWxsb2NhdGUgcmVuZGVyaW5nIHBvb2wKKwlpZiBGVF9SRU5ERVJfUE9PTF9TSVpFIGlzID4gMC4gIEZyb20gU2F2YW5uYWggcGF0Y2ggIzU5MjguCisKKzIwMDctMDUtMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2NhY2hlL2Z0YmFzaWMuYywgaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKKwkoRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyLCBGVENfU0JpdF9DYWNoZV9Mb29rdXBTY2FsZXIpOiBUd28gbmV3CisJZnVuY3Rpb25zIHRoYXQgYWxsb3cgdXMgdG8gbG9vayB1cCBnbHlwaHMgdXNpbmcgYW4gRlRDX1NjYWxlciBvYmplY3QKKwl0byBzcGVjaWZ5IHRoZSBzaXplLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gdXNlIGZyYWN0aW9uYWwgcGl4ZWwKKwlzaXplcy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3JlYWR5X2J5dGVjb2RlKTogU2V0CisJYHNpemUtPmN2dF9yZWFkeScuICBSZXBvcnRlZCBieSBCb3JpcyBMZXRvY2hhLgorCisyMDA3LTA1LTA5ICBHcmFoYW0gQXNoZXIgIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVApLCBzcmMvYXV0b2ZpdC9hZmxhdGluLmMKKwkoYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW0pOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDctMDUtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnNsbjogUmVtb3ZlZCwgYXMgcmVxdWVzdGVkIGJ5CisJVmluY2VudC4KKworMjAwNy0wNS0wNCAgVmluY2VudCBSSUNIT01NRSAgPHJpY2hvbS52QGZyZWUuZnI+CisKKwkqIGJ1aWxkcy93aW4zMi92aXN1YWxjZS8qOiBBZGQgVmlzdWFsIEMrKyBwcm9qZWN0IGZpbGVzIGZvciBQb2NrZXQKKwlQQyB0YXJnZXRzLgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IHRoZW0uCisKKzIwMDctMDUtMDQgIDxoYXJyeUBrZGV2ZWxvcC5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX1N0cmVhbV9PcGVuKTogSGFuZGxlIHJldHVybiB2YWx1ZSAwIG9mCisJbW1hcCAod2hpY2ggbWlnaHQgaGFwcGVuIG9uIHNvbWUgUlRPUykuICBGcm9tIFNhdmFubmFoIHBhdGNoICM1OTA5LgorCisyMDA3LTA1LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcl9TaXplKTogU2ltcGxpZnkgY29kZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfU2V0X0NoYXJfU2l6ZSk6IFVwZGF0ZQorCWRvY3VtZW50YXRpb24uCisKKzIwMDctMDQtMjggIFZpY3RvciBTdGlubmVyICA8dmljdG9yLnN0aW5uZXJAaW5sLmZyPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBDaGVjayBlcnJvciBjb2RlIGFmdGVyIGxvYWRpbmcKKwlgY21hcCcuCisKKzIwMDctMDQtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBDaGVjayBmb3IgbmVnYXRpdmUKKwludW1iZXIgb2YgcG9pbnRzIGluIGNvbnRvdXJzLiAgUHJvYmxlbSByZXBvcnRlZCBieSBWaWN0b3IgU3Rpbm5lcgorCTx2aWN0b3Iuc3Rpbm5lckBoYXlwb2NhbGMuY29tPi4KKwkoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBTeW5jaHJvbml6ZSB2YXJpYWJsZSB0eXBlcy4KKworMjAwNy0wNC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX0NvcHkpOiBBbHdheXMgc2V0IHNlY29uZCBhcmd1bWVudCB0bworCXplcm8gaW4gY2FzZSBvZiBlcnJvci4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMxOTY4OS4KKworMjAwNy0wNC0yNSAgQm9yaXMgTGV0b2NoYSAgPGIubGV0b2NoYUBjei5nbWMubmV0PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmM6IEZpeCBhIHR5cG8gdGhhdCBjcmVhdGVkIGEgc3BlZWQgcmVncmVzc2lvbgorCWluIHRoZSBUcnVlVHlwZSBieXRlY29kZSBsb2FkZXIuCisKKzIwMDctMDQtMTAgIE1hcnRpbiBIb3JhayAgPGhvcmFrbUBjZW50cnVtLmN6PgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpIFtGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMXToKKwlJZ25vcmUgYGhoZWEnIHRhYmxlLiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzE5MjYxLgorCisyMDA3LTA0LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKworCSogVmVyc2lvbiAyLjMuNCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTMtNCcuCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAKKwl2ZXJzaW9uIG51bWJlciB0byAyLjMuNC4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2o6IHMvMi4zLjMvMi4zLjQvLCBzLzIzMy8yMzQvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDQuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byA5OjE1OjMuCisKKzIwMDctMDQtMDkgIE1hcnRpbiBIb3JhayAgPGhvcmFrbUBjZW50cnVtLmN6PgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogU2F2ZSBhbmQgcmVzdG9yZQorCW1lbW9yeSBzdHJlYW0gdG8gYXZvaWQgYSBjcmFzaCB3aXRoIHRoZSBpbmNyZW1lbnRhbCBtZW1vcnkKKwlpbnRlcmZhY2UgKFNhdmFubmFoIGJ1ZyAjMTkyNjApLgorCisyMDA3LTA0LTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0YmltYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOiBGaXggYnVmZmVyLW92ZXJ3cml0ZSBidWcKKwkoU2F2YW5uYWggYnVnICMxOTUzNikuCisKKzIwMDctMDQtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCisJKiBWZXJzaW9uIDIuMy4zIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMy0zJy4KKworCSogZG9jcy9DSEFOR0VTOiBNZW50aW9uIENWRS0yMDA3LTEzNTEuCisKKzIwMDctMDQtMDMgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1NldF9DaGFyX1NpemUpOiBBcyBzdWdnZXN0ZWQgYnkgSmFtZXMgQ2xvb3MsCisJaWYgb25lIG9mIHRoZSByZXNvbHV0aW9uIHZhbHVlcyBpcyAwLCB0cmVhdCBpdCBhcyBpZiBpdCB3ZXJlIHRoZQorCXNhbWUgYXMgdGhlIG90aGVyIHZhbHVlLgorCisyMDA3LTA0LTAyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGQgc3BlY2lhbCBjb2RlIHRvIGRldGVjdCBgZXh0cmEtbGlnaHQnIGZvbnRzIGFuZCBkbyBub3Qgc25hcCB0aGVpcgorCXN0ZW0gd2lkdGhzIHRvbyBtdWNoIHRvIGF2b2lkIGJpemFycmUgaGludGluZyBlZmZlY3RzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmggKEFGX0xhdGluQXhpc1JlYyk6IEFkZCBgc3RhbmRhcmRfd2lkdGgnIGFuZAorCWBleHRyYV9saWdodCcgbWVtYmVycy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzKTogSW5pdGlhbGl6ZQorCXRoZW0uCisJKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKTogU2V0IGBleHRyYV9saWdodCcuCisJKGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCk6IFVzZSBgZXh0cmFfbGlnaHQnLgorCisyMDA3LTAzLTI4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKTogRml4IHplcm8taW5nIG9mIHRoZQorCXBhZGRpbmcuCisKKzIwMDctMDMtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoc2V0c2JpdCwgc2JpdHNldCk6IEhhbmRsZSB2YWx1ZXMgPj0gMTI4CisJZ3JhY2VmdWxseS4KKwkoX2JkZl9zZXRfZGVmYXVsdF9zcGFjaW5nKTogSW5jcmVhc2UgYG5hbWUnIGJ1ZmZlciBzaXplIHRvIDI1NiBhbmQKKwlpc3N1ZSBhbiBlcnJvciBmb3IgbG9uZ2VyIG5hbWVzLiAgVGhpcyBmaXhlcyBDVkUtMjAwNy0xMzUxLgorCShfYmRmX3BhcnNlX2dseXBocyk6IExpbWl0IGFsbG93ZWQgbnVtYmVyIG9mIGdseXBocyBpbiBmb250IHRvIHRoZQorCW51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBVbmljb2RlLgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osIFJFQURNRTogcy8yLjMuMi8yLjMuMy8sCisJcy8yMzIvMjMzLy4KKworCSogZG9jcy9DSEFOR0VTOiBNZW50aW9uIGZ0ZGlmZi4KKworMjAwNy0wMy0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyBbRklYX0JZVEVDT0RFXTogUmVtb3ZlIGl0IGFuZAorCWNvcnJlc3BvbmRpbmcgY29kZS4KKwkoSW5zX01EKTogTGFzdCByZWdyZXNzaW9uIGZpeC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBGaXggYmx1ZXMKKwljb21wdXRhdGlvbnMgaW4gb3JkZXIgdG8gaWdub3JlIHNpbmdsZS1wb2ludCBjb250b3Vycy4gIFRoZXNlIGFyZQorCW5ldmVyIHJhc3Rlcml6ZWQgYW5kIGNvcnJlc3BvbmQgaW4gY2VydGFpbiBmb250cyB0byBtYXJrLWF0dGFjaAorCXBvaW50cyB0aGF0IGFyZSB2ZXJ5IGZhciBmcm9tIHRoZSBnbHlwaCdzIHJlYWwgb3V0bGluZSwgcnVpbmluZyB0aGUKKwljb21wdXRhdGlvbi4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZyk6IEluIHRoZSBjYXNlIG9mCisJbW9ub3NwYWNlZCBmb250cywgYWx3YXlzIHNldCBgcnNiX2RlbHRhJyBhbmQgYGxzYl9kZWx0YScgdG8gMC4KKwlPdGhlcndpc2UgY29kZSB0aGF0IHVzZXMgdGhlbSB3aWxsIG1vc3QgY2VydGFpbmx5IHJ1aW4gdGhlIGZpeGVkCisJYWR2YW5jZSBwcm9wZXJ0eS4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL1ZFUlNJT04uRExMLCBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyk6IFVwZGF0ZQorCWRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8gMi4zLjMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MTQ6My4KKworMjAwNy0wMy0yNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IERpc2FibGUgQ2FyYm9uIGZyYW1ld29yayBkZXBlbmRlbmN5IG9uCisJNjRiaXQgQUJJIG9uIE1hYyBPUyBYIDEwLjQueCAocHBjICYgaTM4NikuICBGb3VuZCBieSBTZWFuIE1jQnJpZGUuCisJKiBidWlsZHMvdm1zL2Z0Y29uZmlnLmg6IERpdHRvLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogRGl0dG8uCisKKzIwMDctMDMtMjIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2Z0c3lzdGVtLmMgKEZUX1N0cmVhbV9PcGVuKTogVGVtcG9yYXJ5IGZpeCB0byBwcmV2ZW50CisJMzJiaXQgdW5zaWduZWQgbG9uZyBvdmVyZmxvdyBieSA2NGJpdCBmaWxlc2l6ZSBvbiBMUDY0IHBsYXRmb3JtLCBhcworCXByb3Bvc2VkIGJ5IFNlYW4gTWNCcmlkZToKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNy0wMy9tc2cwMDAzMi5odG1sCisKKzIwMDctMDMtMjIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluOiBTdXBwcmVzcyBTR0kgY29tcGlsZXIncyB3YXJuaW5nIGFnYWluc3QKKwlzZXRqbXAsIHByb3Bvc2VkIGJ5IFNlYW4gTWNCcmlkZToKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNy0wMy9tc2cwMDAzMi5odG1sCisKKzIwMDctMDMtMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IERlcXVvdGUgYE9TX0lOTElORScgaW4gY29tbWVudCBvZgorCWNvbmZ0ZXN0LmMsIHRvIGF2b2lkIHVuZXhwZWN0ZWQgc2hlbGwgZXZhbHVhdGlvbi4gIFBvc3NpYmx5IGl0IGlzIGEKKwlidWcgb3IgdW5kb2N1bWVudGVkIGJlaGF2aW91ciBvZiBhdXRvY29uZi4KKworMjAwNy0wMy0xOCAgRGF2aWQgVHVybmVyICAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQKTogQW5vdGhlciBieXRlY29kZSByZWdyZXNzaW9uCisJZml4OyB0ZXN0aW5nIHN0aWxsIG5lZWRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRCk6IEFub3RoZXIgYnl0ZWNvZGUgcmVncmVzc2lvbiBmaXguCisKKzIwMDctMDMtMTcgIERhdmlkIFR1cm5lciAgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVApOiBGaXggd3JvbmcgaGFuZGxpbmcgb2YgdGhlCisJKHVuZG9jdW1lbnRlZCkgdHdpbGlnaHQgem9uZSBzcGVjaWFsIGNhc2UuCisKKzIwMDctMDMtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCisJKiBWZXJzaW9uIDIuMy4yIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMy0yJy4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLCBSRUFETUU6IHMvMi4zLjEvMi4zLjIvLAorCXMvMjMxLzIzMi8uCisKKzIwMDctMDMtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGVkIGZvciB1cGNvbWluZyByZWxlYXNlLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gOToxMzozLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDIuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKTogcy8yLjMuMS8yLjMuMi8uCisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9tZW1fc3RyY3B5bik6IEZpeCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCB0aGUKKwlmdW5jdGlvbiB0byB3b3JrIHByb3Blcmx5LCBvdmVyLXdyaXRpbmcgdXNlci1wcm92aWRlZCBidWZmZXJzIGluCisJc29tZSBjYXNlcy4gIFJlcG9ydGVkIGJ5IEphbWVzIENsb29zIDxjbG9vc0BqaGNsb29zLmNvbT4uCisKKworMjAwNy0wMy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oIChmdF9zdHJzdHIpOiBOZXcgd3JhcHBlcgorCW1hY3JvIGZvciBgc3Ryc3RyJy4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBVc2UgZnRfc3Ryc3RyIGZvciBzY2FubmluZworCWB0cmlja19uYW1lcycsIGFzIHN1Z2dlc3RlZCBieSBJdmFuIE5pbmNpYy4KKworMjAwNy0wMy0wNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdGluaXQuYyAoRlRfSW5pdF9GcmVlVHlwZSk6IEZpeCBhIHNtYWxsIG1lbW9yeSBsZWFrIGluCisJY2FzZSBGVF9Jbml0X0ZyZWVUeXBlIGZhaWxzIGZvciBzb21lIHJlYXNvbi4gIFByb2JsZW0gcmVwb3J0ZWQgYnkKKwlNYXhpbWlsaWFuIFNjaHdlcmluIDxtYXhpbWlsaWFuLnNjaHdlcmluQGJ1ZWxvd3NzaWVnZS5kZT4uCisKKwkqIHNyYy90cnVldHlwZS90dG9icy5jICh0dF9zaXplX2luaXRfYnl0ZWNvZGUpOiBDbGVhciB0aGUgYHhfcHBlbScKKwlhbmQgYHlfcHBlbScgZmllbGRzIG9mIHRoZSBgVFRfU2l6ZS5tZXRyaWNzJyBzdHJ1Y3R1cmUsIG5vdCB0aG9zZSBvZgorCWBUVF9TaXplLnJvb3QubWV0cmljcycuICBQcm9ibGVtIHJlcG9ydGVkIGJ5IERhbmllbCBHbMO2Y2tuZXIKKwk8ZGFuaWVsLWdsQGdteC5uZXQ+LgorCisJKiBzcmMvdHlwZTEvdDFhZm0uYyAoVDFfUmVhZF9QRk0pOiBSZWFkIGtlcm5pbmcgdmFsdWVzIGFzIDE2LWJpdAorCXNpZ25lZCB2YWx1ZXMsIG5vdCB1bnNpZ25lZCBvbmVzLiAgUHJvYmxlbSByZXBvcnRlZCBieSBKb2hhbm5lcworCVdhbHRoZXIgPGpvaF93YWx0QHlhaG9vLmRlPi4KKworMjAwNy0wMi0yMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jIChwc2hfaGludF9hbGlnbik6IEZpeCBhIGJ1ZyBpbiB0aGUgaGludGluZworCW9mIHNtYWxsIGFuZCBnaG9zdCBzdGVtcyBpbiB0aGUgUG9zdHNjcmlwdCBpbnRlcnByZXRlci4KKworMjAwNy0wMi0yMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyAoRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSk6IEZpeCBtZW1vcnkKKwlsZWFrLCBwYXRjaCBieSAiSmpnb2QgSmlhbmciIDxnempqZ29kQGdtYWlsLmNvbT4uCisJKiBidWlsZHMvbWFjL2Z0bWFjLmMgKEZUX0dldEZpbGVSZWZfRnJvbV9NYWNfQVRTX05hbWUpOiBEaXR0by4KKworMjAwNy0wMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01EKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyk6IERpdHRvLgorCisyMDA3LTAyLTE0ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlJdCBzZWVtcyB0aGF0IHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmaXggbW9zdCBvZiB0aGUga25vd24KKwlpbnRlcnByZXRlciBwcm9ibGVtcyB3aXRoIG15IGZvbnRzLCBidXQgbW9yZSB0ZXN0aW5nIGlzIG5lZWRlZCwKKwl0aG91Z2guCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChGSVhfQllURUNPREUpOiBBY3RpdmF0ZS4KKwkoVFRfTXVsRml4MTQpOiBSZXdyaXRlLgorCShJbnNfTUQsIEluc19NRFJQLCBJbnNfSVApIFtGSVhfQllURUNPREVdOiBJbXByb3ZlZCBhbmQgdXBkYXRlZC4KKwkoSW5zX01JUlApOiBEaXR0by4KKworMjAwNy0wMi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUHJvamVjdF94LCBQcm9qZWN0X3kpOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9pbnRlcnByZXRfc3R5bGUpLCBzcmMvYmRmL2JkZmRyaXZyLmMKKwkoYmRmX2ludGVycHJldF9zdHlsZSk6IERpdHRvLgorCisyMDA3LTAyLTEyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlTaW1wbGlmeSBwcm9qZWN0aW9uIGFuZCBkdWFsLXByb2plY3Rpb24gY29kZSBpbnRlcmZhY2UuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9Qcm9qZWN0X0Z1bmMpOiBVc2UgYEZUX1BvcycsIG5vdAorCUZUX1ZlY3RvcicgYXMgYXJndW1lbnQgdHlwZS4KKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChDVVJfRnVuY19wcm9qZWN0LCBDVVJfRnVuY19kdWFscHJvaik6CisJVXBkYXRlZC4KKwkoQ1VSX2Zhc3RfcHJvamVjdCwgQ1VSX2Zhc3RfZHVhbHByb2opOiBOZXcgbWFjcm9zLgorCShQcm9qZWN0LCBEdWFsX1Byb2plY3QsIFByb2plY3RfeCwgUHJvamVjdF95KTogVXBkYXRlZC4KKwkoSW5zX0dDLCBJbnNfU0NGUywgSW5zX01EQVAsIEluc19NSUFQLCBJbnNfSVApOiBVc2UgbmV3IGBmYXN0JworCW1hY3Jvcy4KKworCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogSW1wcm92ZSBzcGFjaW5nCisJYWRqdXN0bWVudHMgZm9yIHRoZSBub24tbGlnaHQgYXV0by1oaW50ZWQgbW9kZXMuICBHZXRzIHJpZCBvZgorCWBpbnRlci1sZXR0ZXIgc3BhY2luZyBpcyB0b28gd2lkZScgcHJvYmxlbXMuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cywKKwlhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzKTogU2xpZ2h0IG9wdGltaXphdGlvbiBvZiB0aGUgc2VnbWVudAorCWxpbmtlciBhbmQgYmV0dGVyIGhhbmRsaW5nIG9mIHNlcmlmIHNlZ21lbnRzIHRvIGdldCByaWQgb2YgYnJva2VuCisJYDknIGluIEFyaWFsIGF0IDlwdCAoOTZkcGkpLgorCisKKwlJbnRyb2R1Y2UgbmV3IHN0cmluZyBmdW5jdGlvbnMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG1hY3JvcyB0byBnZXQKKwlyaWQgb2YgdmFyaW91cyB1c2VzIG9mIHN0cmNweSBhbmQgb3RoZXIgYGV2aWwnIGZ1bmN0aW9ucywgYXMgd2VsbCBhcworCXRvIHNpbXBsaWZ5IGEgZmV3IHRoaW5ncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChmdF9tZW1fc3RyZHVwLCBmdF9tZW1fZHVwLAorCWZ0X21lbV9zdHJjcHluKTogTmV3IGRlY2xhcmF0aW9ucy4KKwkoRlRfTUVNX1NUUkRVUCwgRlRfU1RSRFVQLCBGVF9NRU1fRFVQLCBGVF9EVVAsIEZUX1NUUkNQWU4pOiBOZXcKKwltYWNyb3MuCisJKiBzcmMvYmFzZS9mdHV0aWwuYyAoZnRfbWVtX2R1cCwgZnRfbWVtX3N0cmR1cCwgZnRfbWVtX3N0cmNweW4pOiBOZXcKKwlmdW5jdGlvbnMuCisKKwkqIHNyYy9iZmQvYmZkZHJpdnIuYyAoYmRmX2ludGVycHJldF9zdHlsZSwgQkRGX0ZhY2VfSW5pdCksCisJc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9hZGRfcHJvcGVydHkpLCBzcmMvcGNmL3BjZnJlYWQuYworCShwY2ZfZ2V0X3Byb3BlcnRpZXMsIHBjZl9pbnRlcnByZXRfc3R5bGUsIHBjZl9sb2FkX2ZvbnQpLAorCXNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9nbHlwaF9uYW1lKSwgc3JjL2NmZi9jZmZsb2FkLmMKKwkoY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKSwgc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zdHJjcHkpLAorCXNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X2dseXBoX25hbWUpLCBzcmMvdHlwZTEvdDFkcml2ZXIuYworCSh0MV9nZXRfZ2x5cGhfbmFtZSksIHNyYy90eXBlNDIvdDQyZHJpdnIuYyAodDQyX2dldF9nbHlwaF9uYW1lLAorCXQ0Ml9nZXRfbmFtZV9pbmRleCk6IFVzZSBuZXcgZnVuY3Rpb25zIGFuZCBzaW1wbGlmeSBjb2RlLgorCisJKiBidWlsZHMvbWFjL2Z0bWFjLmMgKEZUX0ZTUGF0aE1ha2VTcGVjKTogRG9uJ3QgdXNlIEZUX01JTi4KKworMjAwNy0wMi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogRG9uJ3QgY2hhbmdlIHdpZHRoIGZvcgorCW5vbi1zcGFjaW5nIGdseXBocy4KKworMjAwNy0wMi0wNyAgVG9tIFBhcmtlciAgPHBhbGZyZXlAdGV2cC5uZXQ+CisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9uYW1lX2luZGV4KTogUHJvdGVjdCBhZ2FpbnN0IE5VTEwKKwlwb2ludGVyLgorCisyMDA3LTAyLTA1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmggKEZUX0RFUFJFQ0FURURfQVRUUklCVVRFKToKKwlJbnRyb2R1Y2UgX19hdHRyaWJ1dGUoKGRlcHJlY2F0ZWQpKV9fIHRvIHdhcm4gZnVuY3Rpb25zCisJd2hpY2ggdXNlIG5vbi1BTlNJIGRhdGEgdHlwZXMgaW4gaXRzIGludGVyZmFjZXMuCisJKEZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSk6IERlcHJlY2F0ZWQsIHVzaW5nIEZTU3BlYy4KKwkoRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSk6IERlcHJlY2F0ZWQsIHVzaW5nIEZTU3BlYy4KKwkoRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMpOiBEZXByZWNhdGVkLCB1c2luZyBGU1NwZWMuCisJKEZUX05ld19GYWNlX0Zyb21fRlNSZWYpOiBEZXByZWNhdGVkLCB1c2luZyBGU1JlZi4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogUHJlZGVmaW5lIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFIGFzIHZvaWQKKwl0byBhdm9pZCB3YXJuaW5nIGluIGJ1aWxkaW5nIEZyZWVUeXBlLgorCSogYnVpbGRzL21hYy9mdG1hYy5jOiBEaXR0by4KKworMjAwNy0wMi0wNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRiYXNlLmM6IEZpeCB0byB1c2UgYnVpbGRzL21hYy9mdG1hYy5jLCBpZiBjb25maWd1cmVkCisJYC0td2l0aC1mc3NwZWMnIGV0Yy4gIFJlcGxhY2UgI2luY2x1ZGUgImZ0bWFjLmMiIHdpdGgKKwkjaW5jbHVkZSA8ZnRtYWMuYz4uCisKKzIwMDctMDItMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaCAoRlRfR2V0RmlsZVBhdGhfRnJvbV9NYWNfQVRTX05hbWUpOgorCUludHJvZHVjZWQgYXMgcmVwbGFjZW1lbnQgb2YgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZS4KKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKEZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lKTogRGl0dG8uCisJKEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUpOiBSZXdyaXR0ZW4gYXMgd3JhcHBlciBvZgorCUZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lLgorCSogYnVpbGRzL21hYy9mdG1hYy5jOiBEaXR0by4KKworMjAwNy0wMi0wNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oOiBGaXhlZCB3cm9uZyBjb21tZW50OiBGU1NwZWMgb2YKKwlGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUsIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUgYXJlCisJZm9yIHBhc3NpbmcgdG8gRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMuCisKKzIwMDctMDItMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENoZWNrIHdoZXRoZXIgTWFjIE9TIFggc3lzdGVtIGhlYWRlcnMKKwljYW4gYmUgYnVpbHQgdW5kZXIgQU5TSSBDIG1vZGUuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKE9TX0lOTElORSk6IFJlZGVmaW5lIE9TX0lOTElORSBieSBhIHZlcnNpb24KKwljb21wYXRpYmxlIHRvIEFOU0kgQyBpbiBjYXNlIHN5c3RlbSBoZWFkZXJzIGFyZSBBTlNJIEMgaW5jb21wYXRpYmxlLgorCSogYnVpbGRzL21hYy9mdG1hYy5jIChPU19JTkxJTkUpOiBEaXR0by4KKworMjAwNy0wMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmggKFRUX01TX0xBTkdJRF9EWk9OR0hLQV9CSFVUQU4pOgorCUV4cGxhaW4gd2h5IGFwcGxpY2F0aW9ucyBzaG91bGRuJ3QgdXNlIGl0LiAgRm91bmQgYnkgQWxleGVpLgorCisyMDA3LTAyLTAxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5tNCAoQUNfQ0hFQ0tfRlQyKTogRml4IHNwZWxsaW5nIG9mIHdhcm5pbmcKKwltZXNzYWdlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0MS5jCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnN0VGFibGVfdmFsaWRhdGUpOiBGaXggZGVidWdnaW5nCisJbWVzc2FnZS4KKworMjAwNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisKKwkqIFZlcnNpb24gMi4zLjEgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi0zLTEtRklOQUwnLgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qOiBzLzIzMC8yMzEvLgorCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbDogcy8yMjEvMjMxLy4KKworCSogdm1zX21ha2UuY29tOiBBZGQgYGZ0Z2FzcCcuCisKKzIwMDctMDEtMzAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCVRhZyBzb3VyY2VzIHdpdGggVkVSLTItMy0xIHRvIHByZXBhcmUgcmVsZWFzZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxLgorCisJKiBkb2NzL1ZFUlNJT04uRExMLCBkb2NzL3JlbGVhc2UsIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKToKKwlzLzIuMy4wLzIuMy4xLy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MTI6My4KKworCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmggKEFGX1VTRV9XQVJQRVIpLCBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jCisJKGFmX2xvYWRlcl9sb2FkX2cpOiBEaXNhYmxlIHRoZSB3YXJwZXIgKGkuZS4sIHRoZSBsaWdodCBoaW50aW5nCisJaW1wcm92ZW1lbnRzKSB0byBtYWtlIGEgMi4zLjEgYnVnZml4IHJlbGVhc2UgYmVmb3JlIGludHJvZHVjaW5nIGEKKwluZXcgZmVhdHVyZS4gIFRoaXMgc2hvdWxkIGdpdmUgdXMgbW9yZSB0aW1lIHRvIHR1bmUgYW5kIGltcHJvdmUgdGhlCisJd2FycGVyIGZvciB0aGUgbmV4dCByZWxlYXNlLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZSBhY2NvcmRpbmdseS4KKworMjAwNy0wMS0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRm9yIGxpZ2h0IGF1dG8taGludGluZywgaW1wcm92ZSBnbHlwaCBhZHZhbmNlIHdpZHRocyBhbmQgcmVzdXJyZWN0CisJbm9ybWFsL2Z1bGwgaGludGluZyB0byBpdHMgbm9ybWFsIHF1YWxpdHkuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfR2x5cGhIaW50c1JlYyk6IE5ldyBtZW1iZXJzIGB4bWluX2RlbHRhJworCWFuZCBgeG1heF9kZWx0YScuCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX3JlbG9hZCk6IFJlc2V0IGB4bWluX2RlbHRhJworCWFuZCBgeG1heF9kZWx0YScuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpIDxBRl9VU0VfV0FSUEVSPjogUmVwbGFjZQorCXByZXByb2Nlc3NvciBjb25kaXRpb25hbCB3aXRoIGlmLWNsYXVzZSwgaGFuZGxpbmcgYm90aCBsaWdodCBhbmQKKwlub3JtYWwgbW9kZS4KKworCSogc3JjL2F1dG9maXQvYWZ3YXJwLmMgKEFGX1dhcnBTY29yZSk6IEZpbmUtdHVuZSBhZ2Fpbi4KKwkoYWZfd2FycGVyX2NvbXB1dGUpOiBIYW5kbGUgYHhtaW5fZGVsdGEnIGFuZCBgeG1heF9kZWx0YScuCisKKzIwMDctMDEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9yZWxlYXNlOiBVcGRhdGVkIC0tIFNhdmFubmFoIHVzZXMgYSBuZXcgdXBsb2FkaW5nIHNjaGVtZS4KKworMjAwNy0wMS0yNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2luZGV4X2dldF9wb2ludGVycyk6IEltcHJvdmUgcHJldmlvdXMgZml4LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxjZmZfb3BfY2FsbHN1YnIsIGNmZl9vcF9jYWxsZ3N1YnI+OiBGaXggc2FuaXR5IGNoZWNrIGZvciBlbXB0eQorCWZ1bmN0aW9ucy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBsaWdodCBhdXRvLWhpbnRpbmcgaW1wcm92ZW1lbnQuCisKKzIwMDctMDEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9pbmRleF9nZXRfcG9pbnRlcnMpOiBIYW5kbGUgbGFzdCBlbnRyeQorCWNvcnJlY3RseSBpbiBhIHNhbml0eSBjaGVjay4gIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvCisJbG9hZCBsb2NhbCBhbmQgZ2xvYmFsIGZ1bmN0aW9ucywgYW55IGNoYXJzdHJpbmcgdGhhdCBjYWxsZWQgdGhlIGxhc3QKKwlsb2NhbC9nbG9iYWwgZnVuY3Rpb24gd291bGQgZmFpbCBvdGhlcndpc2UuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZworCSMxODg2Ny4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAwNy0wMS0yMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUpOiBGaXggdHlwbyB0aGF0CisJcHJldmVudGVkIGNvbXBpbGF0aW9uIHdoZW4gZGlzYWJsaW5nIGJvdGggdGhlIHVucGF0ZW50ZWQgYW5kIHRoZQorCWJ5dGVjb2RlIGludGVycHJldGVyIGluIHRoZSBUcnVlVHlwZSBmb250IGRyaXZlci4KKworCisJRml4IGFuZCBlbmFibGUgdGhlIHdhcnBlciB0byBpbXByb3ZlIGBsaWdodCcgaGludGluZyBtb2RlLiAgVGhpcyBpcworCW5vdCBuZWNlc3NhcmlseSBhIGZpbmFsIHZlcnNpb24sIGJ1dCBpdCBzZWVtcyB0byB3b3JrIHdlbGwuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfaW5pdCkgW0FGX1VTRV9XQVJQRVJdOgorCURpc2FibGUgY29kZS4KKwkoYWZfbGF0aW5faGludHNfYXBwbHkpIFtBRl9VU0VfV0FSUEVSXTogSGFuZGxlIEZUX1JFTkRFUl9NT0RFX0xJR0hULgorCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oOiBBY3RpdmF0ZSBBRl9VU0VfV0FSUEVSLgorCisJKiBzcmMvYXV0b2ZpdC9hZndhcnAuYyAoQUZfV2FycFNjb3JlKTogVHVuZSB0YWJsZS4KKwkoYWZfd2FycGVyX2NvbXB1dGVfbGluZV9iZXN0KTogRml4IGFycmF5IHNpemUgb2YgYHNjb3JlcycuCisJKGFmX3dhcnBlcl9jb21wdXRlKTogQmV0dGVyIGhhbmRsaW5nIG9mIGJvcmRlciBjYXNlcy4KKwkqIHNyYy9hdXRvZml0L2Fmd2FycC5oIChBRl9XYXJwZXJSZWMpOiBSZW1vdmUgdW51c2VkIG1lbWJlcnMgYFgxJworCWFuZCBgWDInLgorCisyMDA3LTAxLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIENoYW5nZUxvZzogU3BsaXQgb2ZmIG9sZGVyIGVudHJpZXMgaW50by4uLgorCSogQ2hhbmdlTG9nLjIyOiBUaGlzIG5ldyBmaWxlLgorCisyMDA3LTAxLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgU0haIGZpeC4KKworMjAwNy0wMS0yMSAgR2VvcmdlIFdpbGxpYW1zICA8Z3d3QHNpbGNvbS5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0haKTogU0haIGRvZXNuJ3QgbW92ZSBwaGFudG9tCisJcG9pbnRzLgorCisyMDA3LTAxLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0bXR4LmMgKHR0X2ZhY2VfZ2V0X21ldHJpY3MpCisJWyFGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFNdOiBGaXggbGltaXQgY2hlY2suCisKKzIwMDctMDEtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCisJKiBWZXJzaW9uIDIuMy4wIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItMy0wLUZJTkFMJy4KKworMjAwNy0wMS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL3JlbGVhc2U6IFVwZGF0ZWQuCisKKzIwMDctMDEtMTYgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKSwKKwlzcmMvY2ZmL2NmZmRyaXZlci5jIChjZmZfcHNfZ2V0X2ZvbnRfaW5mbyksIHNyYy90cnVldHlwZS90dG9ianMuYworCSh0dF9mYWNlX2luaXQpLCBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NIQyk6IEZpeCBjb21waWxlcgorCXdhcm5pbmdzLgorCisyMDA3LTAxLTE1ICBEZXRsZWYgV8O8cmtuZXIgIDxUZXRpU29mdEBhcGcubGFobi5kZT4KKworCSogYnVpbGRzL2FtaWdhL21ha2VmaWxlLCBidWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0LAorCWJ1aWxkcy9hbWlnYS9zbWFrZWZpbGU6IEFkZCBgZnRnYXNwLmMnIGFuZCBgZnRsY2RmaWwuYycuCisKKwkqIGJ1aWxkcy9hbWlnYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBTeW5jaHJvbml6ZS4KKworMjAwNy0wMS0xNCAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CisKKwlGaXggdmFyaW91cyBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfc2VsZWN0KSwgc3JjL2NmZi9jZmZvYmpzLmgsCisJc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX3JlcXVlc3QpLCBzcmMvdHlwZTQyL3Q0Mm9ianMuaDoKKwlzL2luZGV4L3N0cmlrZV9pbmRleC8uCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTWF0Y2hfU2l6ZSk6IHMvaW5kZXgvc2l6ZV9pbmRleC8uCisKKwkqIHNyYy9neHZhbGlkL2d4dm1vcng1LmMKKwkoZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfSW5zZXJ0TGlzdF92YWxpZGF0ZSk6IHMvaW5kZXgvdGFibGVfaW5kZXgvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQpLAorCXNyYy9wY2YvcGNmcmVhZC5jIChwY2Zfc2Vla190b190YWJsZV90eXBlKTogQXZvaWQgcG9zc2libHkKKwl1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKworMjAwNy0wMS0xMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL0lOU1RBTEwuTUFDOiBJbXByb3ZlbWVudHMuCisKKzIwMDctMDEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxYWZtLmMgKFQxX1JlYWRfTWV0cmljcyk6IE1TIFdpbmRvd3MgYWxsb3dzIFBGTQorCXZlcnNpb25zIHVwIHRvIDB4M0ZGIHdpdGhvdXQgY29tcGxhaW5pbmcuCisKKzIwMDctMDEtMTMgIERlcmVrIENsZWdnICA8ZGNsZWdnQGFwcGxlLmNvbT4KKworCUFkZCBGVF9HZXRfUFNfRm9udF9JbmZvIGludGVyZmFjZSB0byBDRkYgZHJpdmVyLgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmg6IEluY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0guCisJKENGRl9Gb250UmVjKTogQWRkIGBmb250X2luZm8nIGZpZWxkLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYzogSW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSC4KKwkoY2ZmX2ZvbnRfZG9uZSk6IEZyZWUgZm9udC0+Zm9udF9pbmZvIGlmIG5lY2Vzc2FyeS4KKworCSogc3JjL2NmZi9jZmZkcnZyLmMgKGNmZl9wc19nZXRfZm9udF9pbmZvKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfc2VydmljZV9wc19pbmZvKTogUmVnaXN0ZXIgY2ZmX3BzX2dldF9mb250X2luZm8uCisKKzIwMDctMDEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbik6IEZpeCBjb21waWxhdGlvbgorCXdpdGggQysrIGNvbXBpbGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMsCisJYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyk6IERpdHRvLgorCisJKiBzcmMvYmFzZS9ydWxlcy5tayAoQkFTRV9TUkMpOiBSZW1vdmUgZnRnYXNwLmMgKGl0J3MgYWxyZWFkeSBpbgorCWBtb2R1bGVzLmNmZycpLgorCisJKiBzcmMvc2ZudC90dHNiaXQwLmg6IFJlbW92ZS4KKworCSogc3JjL3NmbnQvcnVsZXMubWsgKFNGTlRfRFJWX1NSQyk6IERvbid0IGluY2x1ZGUgdHRzYml0MC5jLgorCisyMDA3LTAxLTEyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKTogRml4IG1lbW9yeSBzdG9tcGluZworCWJ1ZyBpbiB0aGUgYml0bWFwIGVtYm9sZGVuZXIgaWYgdGhlIHBpdGNoIG9mIHRoZSBzb3VyY2UgYml0bWFwIGlzCisJbXVjaCBsYXJnZXIgdGhhbiBpdHMgd2lkdGguCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChVcGRhdGVfTWF4KTogRml4IGFsaWFzaW5nLXJlbGF0ZWQKKwljb21waWxhdGlvbiB3YXJuaW5nLgorCisyMDA3LTAxLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2luc3RhbGwtc2gsIGJ1aWxkcy91bml4L21raW5zdGFsbGRpcnM6IFVwZGF0ZWQgZnJvbQorCWBhdXRvbWFrZScgQ1ZTIG1vZHVsZSBmcm9tIHNvdXJjZXMucmVkaGF0LmNvbS4KKworMjAwNy0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKGlzX3NwYWNlKTogUmVtb3ZlZC4KKwkocGFyc2VfZW5jb2RpbmcsIHBhcnNlX2NoYXJzdHJpbmdzKTogVXNlIElTX1BTX0RFTElNLgorCShwYXJzZV9jaGFyc3RyaW5ncyk6IFVzZSBJU19QU19UT0tFTi4KKworCisJKiBhdXRvZ2VuLnNoOiBBdm9pZCBiYXNoIHNwZWNpZmljIHN5bnRheC4KKworMjAwNy0wMS0xMSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFNtYWxsIHVwZGF0ZS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDk6MTE6My4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKElzTWFjUmVzb3VyY2UpOiBGaXggYSBzbWFsbCBidWcgdGhhdCBjYXVzZWQgYQorCWNyYXNoIHdpdGggc29tZSBNYWMgT1MgWCAuZGZvbnQgZmlsZXMuICBTdWJtaXR0ZWQgYnkgTWFzYXRha2UKKwlZYW1hdG8uCisKKwkqIGF1dG9nZW4uc2g6IFNtYWxsIGZpeCB0byBnZXQgaXQgd29ya2luZyBvbiBNYWMgT1MgWCBwcm9wZXJseToKKwlUaGUgaXNzdWUgaXMgdGhhdCBHTlUgbGlidG9vbCBpcyBjYWxsZWQgYGdsaWJ0b29sJyBvbiB0aGlzIHBsYXRmb3JtLAorCWFuZCB3ZSBtdXN0IGNhbGwgYGdsaWJ0b29saXplJywgc2luY2UgYGxpYnRvb2xpemUnIGRvZXNuJ3QgZXhpc3QuCisKKzIwMDctMDEtMTAgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogYWxsLXNvdXJjZXM6IFRhZyBhbGwgc291cmNlcyB3aXRoIFZFUi0yLTMtMC1SQzEgYW5kCisJVkVSLTItMy0wLgorCisJKiBKYW1maWxlIChSZWZEb2MpLCBSRUFETUUsIGJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZQorCXZlcnNpb24gbnVtYmVyIHRvIDIuMy4wLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX01JTk9SKTogU2V0IHRvIDMuCisJKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDAuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjaGFwdGVycy5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaDogVXBkYXRlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIHdpdGgKKwlHQVNQIHN1cHBvcnQgYW5kIExDRCBmaWx0ZXJpbmcgc2VjdGlvbnMuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzaF9nbHlwaF9jb21wdXRlX2luZmxlY3Rpb25zKTogRml4IGEgdHlwbworCXdoaWNoIGNyZWF0ZWQgYW4gZW5kbGVzcyBsb29wIHdpdGggc29tZSBtYWxmb3JtZWQgZm9udCBmaWxlcy4KKworMjAwNy0wMS0xMCAgRGVyZWsgQ2xlZ2cgIDxkY2xlZ2dAYXBwbGUuY29tPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX0dldF9NTV9WYXIpOiBBbHdheXMgcmV0dXJuIGZpeGVkLXBvaW50CisJdmFsdWVzLgorCisyMDA3LTAxLTA4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCwgc3JjL2Jhc2UvZnRnYXNwLmM6IE5ldyBmaWxlcyB3aGljaCBhZGQKKwlhIG5ldyBBUEkgYEZUX0dldF9HYXNwJyB0byByZXR1cm4gZW50cmllcyBvZiB0aGUgYGdhc3AnIHRhYmxlCisJY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGNoYXJhY3RlciBwaXhlbCBzaXplLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2dhc3ApOiBBZGQgdmVyc2lvbiBjaGVjayBmb3IgdGhlCisJYGdhc3AnIHRhYmxlLCBpbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBsYXRlcgorCXZlcnNpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9HQVNQX0gpOiBOZXcgbWFjcm8gZm9yCisJPGZyZWV0eXBlL2Z0Z2FzcC5oPi4KKworCSogc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKSwgc3JjL2Jhc2UvSmFtZmlsZSAoX3NvdXJjZXMpLAorCW1vZHVsZXMuY2ZnIChCQVNFX0VYVEVOU0lPTlMpLCBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qOiBBZGQgc3JjL2Jhc2UvZnRnYXNwLmMgdG8gdGhlCisJZGVmYXVsdCBidWlsZC4KKworMjAwNy0wMS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvcgorCVR5cGUgMTEgZm9udHMuCisJU2NhbiBmb3IgYC9zZm50cycgdG9rZW4uCisKKzIwMDctMDEtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VyX25ldyk6IFJlamVjdCBUeXBlIDExIGZvbnRzLgorCisyMDA3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfaW5kZXhfaW5pdCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisJKGNmZl9pbmRleF9yZWFkX29mZnNldCk6IHMvcGVycm9yL2Vycm9ycC8gdG8gYXZvaWQgZ2xvYmFsIHNoYWRvd2luZy4KKworMjAwNy0wMS0wNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvcGZyL3Bmcm9ianMuYyAocGZyX2ZhY2VfaW5pdCk6IERldGVjdCBub24tc2NhbGFibGUgZm9udHMKKwljb3JyZWN0bHkuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMTc4NzYuCisKKworCURvIG5vdCBhbGxvY2F0ZSBpbnRlcnByZXRlci1zcGVjaWZpYyB0YWJsZXMgaW4gbWVtb3J5IGlmIHdlIGFyZSBub3QKKwlnb2luZyB0byBsb2FkIGdseXBocyB3aXRoIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciBhbnl3YXkuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2xvYWRlcl9pbml0KTogTG9hZCBleGVjdXRpb24gY29udGV4dAorCW9ubHkgaWYgZ2x5cGggaXMgaGludGVkLgorCVVwZGF0ZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX1NpemVSZWMpOiBBZGQgbWVtYmVycyBgYnl0ZWNvZGVfcmVhZHknCisJYW5kIGBjdnNfcmVhZHknLgorCUFkZCBgdHRfc2l6ZV9yZWFkeV9ieXRlY29kZScgZGVjbGFyYXRpb24uCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfZG9uZV9ieXRlY29kZSwKKwl0dF9zaXplX2luaXRfYnl0ZWNvZGUsIHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUpOiBOZXcgZnVuY3Rpb25zLgorCSh0dF9zaXplX2luaXQpOiBNb3ZlIG1vc3QgY29kZSBpbnRvIGB0dF9zaXplX2luaXRfYnl0ZWNvZGUnLgorCSh0dF9zaXplX2RvbmUpOiBNb3ZlIG1vc3QgY29kZSBpbnRvIGB0dF9zaXplX2RvbmVfYnl0ZWNvZGUnLgorCSh0dF9zaXplX3Jlc2V0KTogTW92ZSBzb21lIGNvZGUgdG8gYHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUnLgorCisKKwlEb24ndCBleHRyYWN0IHRoZSBtZXRyaWNzIHRhYmxlIGZyb20gdGhlIFNGTlQgZm9udCBmaWxlLiAgSW5zdGVhZCwKKwlyZXBhcnNlIGl0IG9uIGVhY2ggZ2x5cGggbG9hZC4gIFRoZSBydW50aW1lIGRpZmZlcmVuY2UgaXMgbm90CisJbm90aWNlYWJsZSwgYW5kIGl0IGNhbiBzYXZlIGEgbG90IG9mIGhlYXAgbWVtb3J5IHdoZW4gbWVtb3J5LW1hcHBlZAorCWZpbGVzIGFyZSBub3QgdXNlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBBZGQgbWVtYmVycworCWBob3J6X21ldHJpY3Nfb2Zmc2V0JyBhbmQgYHZlcnRfbWV0cmljc19vZnNldCcuCisJKiBzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2xvYWRfaG10eCwgdHRfZmFjZV9nZXRfbWV0cmljcyk6CisJVXBkYXRlZC4KKworCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfdmFsaWRhdGUpOiBTbGlnaHQgb3B0aW1pemF0aW9uLgorCisKKwlEbyBub3QgbG9hZCB0aGUgQ0ZGIGluZGV4IG9mZnNldHMgaW50byBtZW1vcnksIHNpbmNlIHRoaXMgd2FzdGVzIGEKKwkqbG90KiBvZiBoZWFwIG1lbW9yeSB3aXRoIGxhcmdlIEFzaWFuIENGRiBmb250cy4gIFRoZXJlIGlzIG5vCisJc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgbG9zcy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmg6IEFkZCBgY2ZmX2NoYXJzZXRfY2lkX3RvX2dpbmRleCcgZGVjbGFyYXRpb24uCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9JbmRleFJlYyk6IEFkZCBmaWVsZHMgYHN0YXJ0JyBhbmQKKwlgZGF0YV9zaXplJy4KKwkoQ0ZGX0NoYXJzZXRSZWMpOiBBZGQgZmllbGQgYG51bV9nbHlwaHMnLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2luZGV4X3JlYWRfb2Zmc2V0LCBjZmZfaW5kZXhfbG9hZF9vZmZzZXRzLAorCWNmZl9jaGFyc2V0X2NpZF90b19naW5kZXgpOiBOZXcgZnVuY3Rpb25zLgorCShjZmZfbmV3X2luZGV4KTogUmVuYW1lZCB0by4uLgorCShjZmZfaW5kZXhfaW5pdCk6IFRoaXMuICBVcGRhdGUgYWxsIGNhbGxlcnMuCisJVXBkYXRlZCAtLSBzb21lIGNvZGUgaGFzIGJlZW4gbW92ZWQgdG8gYGNmZl9pbmRleF9sb2FkX29mZnNldHMnLgorCShjZmZfZG9uZV9pbmRleCk6IFJlbmFtZWQgdG8uLi4KKwkoY2ZmX2luZGV4X2RvbmUpOiBUaGlzLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgorCShjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzLCBjZmZfaW5kZXhfYWNjZXNzX2VsZW1lbnQpOiBVcGRhdGVkIHRvIHVzZQorCXN0cmVhbSBvZmZzZXRzLgorCShjZmZfY2hhcnNldF9jb21wdXRlX2NpZHMpOiBTZXQgYG51bV9nbHlwaHMnIGZpZWxkLgorCShjZmZfZW5jb2RpbmdfbG9hZCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFVwZGF0ZWQuCisKKzIwMDctMDEtMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogZG9jcy9JTlNUQUxMLlVOSVg6IFNpbXBsaWZ5IHNvbWUgcGFydHMsIGFkZCByZWZlcmVuY2UgdG8KKwlhdXRvZ2VuLnNoIGFuZCBwb2ludGVyIHRvIFJFQURNRS5DVlMuCisKKwkqIFJFQURNRS5DVlM6IEFkZCBjb21tb24gcHJvYmxlbSBkZXNjcmlwdGlvbiBhbmQgc29sdXRpb24KKwl3aGVuIHJ1bm5pbmcgYXV0b2dlbi5zaC4KKworCSogZG9jcy9JTlNUQUxMOiBBZGQgcmVmZXJlbmNlIHRvIE1hY09TIFguCisKKwkqIGRvY3MvTUFLRVBQLCBkb2NzL0lOU1RBTEwuTUFDOiBOZXcgZG9jdW1lbnRhdGlvbiBmaWxlcy4KKworCSogZG9jcy9UT0RPOiBSZW1vdmUgb2Jzb2xldGUgaXRlbXMuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYzogKFRSYXN0ZXJfSW5zdGFuY2UpOiBSZXBsYWNlIGl0IHdpdGguLi4KKwkoVFdvcmtlcik6IFRoaXMuCisJUmVtb3ZlIGBjb3VudF90YWJsZScgYW5kIGBtZW1vcnknLgorCU1ha2UgYGdyYXlzJyBhIHBvaW50ZXIuCisJKFRSYXN0ZXIpOiBOZXcgc3RydWN0dXJlLgorCShjb3VudF90YWJsZSk6IE5ldyBzdGF0aWMgYXJyYXkuCisJKFJBU19BUkdTLCBSQVNfQVJHLCBSQVNfVkFSUywgUkFTX1ZBUiwgRlRfVU5VU0VEX1JBU1RFUiwgY3VyX3JhcywKKwlWZXJ0aWNhbF9HcmF5X1N3ZWVwX1N0ZXAsIGZ0X2JsYWNrX25ldywgZnRfYmxhY2tfZG9uZSwKKwlmdF9ibGFja19zZXRfbW9kZSwgZnRfYmxhY2tfcmVuZGVyKTogVXBkYXRlZC4KKwkoZnRfYmxhY2tfaW5pdCk6IERvbid0IGluaXRpYWxpemUgYGNvdW50X3RhYmxlJy4KKwkoZnRfYmxhY2tfcmVzZXQpOiBVc2UgdGhlIHJlbmRlciBwb29sLiAgVGhpcyBzYXZlcyBhYm91dCA2S0Igb2YKKwloZWFwIHNwYWNlIGZvciBlYWNoIEZUX0xpYnJhcnkgaW5zdGFuY2UuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChUUmFzdGVyKTogUmVwbGFjZWQgd2l0aC4uLgorCShUV29ya2VyKTogVGhpcy4KKwlSZW1vdmUgYG1lbW9yeScuCisJKFRSYXN0ZXIpOiBOZXcgc3RydWN0dXJlLgorCisJKFJBU19BUkdfLCBSQVNfQVJHLCBSQVNfVkFSXywgUkFTX1ZBUiwgcmFzLCBncmF5X3JlbmRlcl9saW5lLAorCWdyYXlfbW92ZV90bywgZ3JheV9saW5lX3RvLCBncmF5X2NvbmljX3RvLCBncmF5X2N1YmljX3RvLAorCWdyYXlfcmVuZGVyX3NwYW4sIGdyYXlfcmFzdGVyX3JlbmRlcik6IFVwZGF0ZWQuCisJKGdyYXlfcmFzdGVyX3Jlc2V0KTogVXNlIHRoZSByZW5kZXIgcG9vbC4gIFRoaXMgc2F2ZXMgYWJvdXQgNktCIG9mCisJaGVhcCBzcGFjZSBmb3IgZWFjaCBGVF9MaWJyYXJ5IGluc3RhbmNlLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRrZXJuLmMsIHNyYy9zZm50L3R0a2Vybi5oLAorCXNyYy9zZm50L3R0bXR4LmMsIHNyYy9zZm50L3R0c2JpdC5jLCBzcmMvc2ZudC90dHNiaXQuaCwKKwlzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBSZW1vdmUKKwlGVF9PUFRJTUlaRV9NRU1PUlkgbWFjcm8gKGFuZCBjb2RlIGZvciAhRlRfT1BUSU1JWkVfTUVNT1JZKSBzaW5jZQorCXRoZSBvcHRpbWl6YXRpb24gaXMgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbC4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNoX2dseXBoX2ludGVycG9sYXRlX25vcm1hbF9wb2ludHMpOgorCVJlbW92ZSBhIHR5cG8gdGhhdCByZXN1bHRzIGluIG5vIGhpbnRpbmcgYW5kIGEgbWVtb3J5IGxlYWsgd2l0aCBzb21lCisJbGFyZ2UgQXNpYW4gQ0ZGIGZvbnRzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfRG9uZV9MaWJyYXJ5KTogUmVtb3ZlIGEgc3VidGxlIG1lbW9yeSBsZWFrCisJd2hpY2ggaGFwcGVucyB3aGVuIEZUX0RvbmVfTGlicmFyeSBpcyBjYWxsZWQgd2l0aCBzdGlsbCBvcGVuZWQKKwlDRkZfRmFjZXMgaW4gaXQuICBXZSBuZWVkIHRvIGNsb3NlIGFsbCBmYWNlcyBiZWZvcmUgZGVzdHJveWluZyB0aGUKKwltb2R1bGVzLCBvciBlbHNlIHNvbWUgYmFkIHRoaW5ncyAobWVtb3J5IGxlYWtzKSBtYXkgaGFwcGVuLgorCisyMDA3LTAxLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9neHZhbGlkL2d4dmtlcm4uYyAoZ3h2X2tlcm5fc3VidGFibGVfZm10MF9wYWlyc192YWxpZGF0ZSk6CisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDctMDEtMDIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmM6IEFkZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQuCisKKzIwMDYtMTItMzEgIE1hc2F0YWtlIFlBTUFUTyAgPGpldEBneXZlLm9yZz4KKworCSogc3JjL2d4dmFsaWQvZ3h2a2Vybi5jIChneHZfa2Vybl9zdWJ0YWJsZV9mbXQwX3BhaXJzX3ZhbGlkYXRlKTogTmV3CisJZnVuY3Rpb24uCisJQ2hlY2sgdW5pcXVlbmVzcyBvZiB0aGUgZ2lkIHBhaXJzLgorCShneHZfa2Vybl9zdWJ0YWJsZV9mbXQwX3ZhbGlkYXRlKTogTW92ZSBzb21lIGNvZGUgdG8KKwlgZ3h2X2tlcm5fc3VidGFibGVfZm10MF9wYWlyc192YWxpZGF0ZScuCisKKzIwMDYtMTItMjIgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworCSogYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qOiBBZGQgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFCisJdG8gYXZvaWQgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrIDguCisKKzIwMDYtMTItMTYgIEFuZGVycyBLYXNlb3JnICA8YW5kZXJzQGthc2VvcmcuY29tPgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChGVF9MaWJyYXJ5X1NldExjZEZpbHRlcikKKwlbRlRfRk9SQ0VfTElHSFRfTENEX0ZJTFRFUl06IEZpeCB0eXBvLgorCisyMDA2LTEyLTE1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaDogQWRkIGB2b2xhdGlsZScgdG8KKwlzeW5jIHdpdGggdGhlIG1vZGlmaWNhdGlvbiBieSBKZW5zIENsYXVkaXVzIG9uIDIwMDYtMDgtMjI7IGNmLgorCSAgaHR0cDovL2N2cy5zYXZhbm5haC5nbnUub3JnL3ZpZXdjdnMvZnJlZXR5cGUvZnJlZXR5cGUyL3NyYy9vdHZhbGlkL290dm1vZC5jP3IxPTEuNCZyMj0xLjUKKworMjAwNi0xMi0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogU3BlY2lhbGl6ZWQgZm9yIE1hYyBPUyBYIG9ubHkuCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogRml4ZWQgZm9yIHBwYzY0IG1pc3NpbmcgQ2FyYm9uIGZyYW1ld29yay4KKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IERpdHRvLiAgV2hlbiBleHBsaWNpdCBzd2l0Y2hlcyBmb3IKKwlGU1NwZWMvRlNSZWYvUXVpY2tEcmF3L0FUUyBhdmFpbGFiaWxpdHkgYXJlIGdpdmVuIHRvIGNvbmZpZ3VyZSwKKwlidWlsZHMvbWFjL2Z0bWFjLmMgaXMgdXNlZCBpbnN0ZWFkIG9mIGRlZmF1bHQgc3JjL2Jhc2UvZnRtYWMuYy4KKworMjAwNi0xMi0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGRzL21hYy9mdG1hYy5jOiBDb3BpZWQgc3JjL2Jhc2UvZnRtYWMuYyBmb3IgbGVnYWN5IHN5c3RlbS4KKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQ6IEZpeCB0byB1c2UgYnVpbGRzL21hYy9mdG1hYy5jCisJaW5zdGVhZCBvZiBzcmMvYmFzZS9mdG1hYy5jCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQ6IERpdHRvLgorCSogYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dDogRGl0dG8uCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0OiBEaXR0bywgYW5kIGV4Y2x1ZGUgZ3h2YWxpZC5jCisJdGhhdCBjYW5ub3QgYmUgYnVpbHQgYXQgcHJlc2VudC4KKworMjAwNi0xMi0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEltcHJvdmVtZW50IG9mIHJlc291cmNlIGZvcmsgaGFuZGxlciBmb3IKKwlQT1NJWCwgY2YuCisJICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNi0xMC9tc2cwMDAyNS5odG1sCisJKE1hY19SZWFkX3NmbnRfUmVzb3VyY2UpOiBDb3VudCBvbmx5IGBzZm50JyByZXNvdXJjZSBvZiBzdWl0Y2FzZSBmb250CisJZm9ybWF0IG9yIC5kZm9udCwgdG8gc2ltdWxhdGUgdGhlIGZhY2UgaW5kZXggbnVtYmVyIGNvdW50ZWQgYnkgZnRtYWMuYy4KKwkoSXNNYWNSZXNvdXJjZSk6IFJldHVybiB0aGUgbnVtYmVyIG9mIHNjYWxhYmxlIGZhY2VzIGNvcnJlY3RseS4KKworMjAwNi0xMi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdG9wbGV2ZWwubWsgKHZlcnNpb24pOiBQcm90ZWN0IGFnYWluc3QgYGRpc3RjbGVhbicgdGFyZ2V0LgorCisyMDA2LTEyLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy8qLypkZWYubWssIGJ1aWxkcy8qL2RldGVjdC5tayAoQ0FUKTogRGVmaW5lIHRvIGVpdGhlciBgY2F0JworCW9yIGB0eXBlJy4KKworCSogYnVpbGRzL2ZyZWV0eXBlLm1rICh2ZXJzaW9uKTogRXh0cmFjdGVkIGZyb20gZnJlZXR5cGUuaCwgdXNpbmcKKwlHTlUgbWFrZSdzIGJ1aWx0LWluIHN0cmluZyBmdW5jdGlvbnMuCisJKHJlZmRvYyk6IFVzZSAkKHZlcnNpb24pIGluc3RlYWQgb2Ygc3RhdGljIHZlcnNpb24gbnVtYmVyLgorCisyMDA2LTEyLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tayAoZGlzdCk6IEV4dHJhY3QgdmVyc2lvbiBudW1iZXIgZnJvbSBmcmVldHlwZS5oLgorCisyMDA2LTEyLTA4ICBWbGFkaW1pciBWb2xvdmljaCAgPHZ2dkB2c3UucnU+CisKKwkqIHNyYy90b29scy9hcGluYW1lcy5jIChTdGF0ZSk6IFJlbW92ZSBmaW5hbCBjb21tYSBpbiBzdHJ1Y3R1cmUgLS0KKwl4bGMgdjUgdW5kZXIgQUlYIDQuMyBkb2Vzbid0IGxpa2UgdGhpcy4KKworMjAwNi0xMi0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogU21hbGwgYWRqdXN0bWVudAorCXRvIHRoZSBzcGFjaW5nIG9mIGF1dG8tZml0dGVkIGdseXBocy4gIFRoaXMgb25seSBpbXBhY3RzIHJhcmUKKwljYXNlcyAoZS5nLiwgQXJpYWwgQm9sZCBhdCByYXRoZXIgc21hbGwgY2hhcmFjdGVyIHNpemVzKS4KKworMjAwNi0xMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogQWRkIHR0c2JpdDAuYy4KKworMjAwNi0xMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAodHRfZmFjZV9nZXRfbmFtZSk6IEFsbCBVbmljb2RlIHN0cmluZ3MgYXJlCisJZW5jb2RlZCBpbiBVVEYtMTZCRS4gIFBhdGNoIGZyb20gUmFqZWV2IFBhaHVqYSA8cnBhaHVqYUBlc3JpLmNvbT4uCisJKHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV91Y3M0KTogUmVtb3ZlZC4KKworCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0eGY4Ni5oOiBGaXggYW5kIGV4dGVuZCBjb21tZW50IHNvIHRoYXQgaXQKKwlhcHBlYXJzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2hhcHRlcnMuaDogQWRkIGBmb250X2Zvcm1hdCcgc2VjdGlvbi4KKworCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5IChIdG1sRm9ybWF0dGVyOjppbmRleF9leGl0KTogQWRkIGxpbmsKKwl0byBUT0MgaW4gaW5kZXggcGFnZS4KKworMjAwNi0xMS0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogUmV0dXJuIDAgd2hlbiB3ZSBhcmUKKwl0cnlpbmcgdG8gcmVuZGVyIGludG8gYSB6ZXJvLXdpZHRoL2hlaWdodCBiaXRtYXAsIG5vdCBhbiBlcnJvciBjb2RlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IEZpeCB0eXBvIGluIHByZXZpb3VzIHBhdGNoLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogUmVtb3ZlIGhhcmQtY29kZWQgZXJyb3IgdmFsdWVzOyB1c2UgRnJlZVR5cGUKKwlvbmVzIGluc3RlYWQuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cyk6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZS4KKworMjAwNi0xMS0yNiAgUGllcnJlIEhhbnNlciAgPGhhbnNlckBjbHViLWludGVybmV0LmZyPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IFByb3RlY3QgYWdhaW5zdCBOVUxMIHBvaW50ZXIuCisKKzIwMDYtMTEtMjUgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jCShhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cywKKwlhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzLCBhZl9nbHlwaF9oaW50c19kdW1wZWRnZXMpIFshQUZfREVCVUddOgorCUFkZCBzdHVicyB0byBsaW5rIHRoZSBgZnRncmlkJyB0ZXN0IHByb2dyYW0gd2hlbiBkZWJ1Z2dpbmcgaXMKKwlkaXNhYmxlZCBpbiB0aGUgYXV0by1oaW50ZXIuCisKKzIwMDYtMTEtMjMgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jLCBzcmMvYXV0b2ZpdC9hZmhpbnRzLmgsIHNyYy9hdXRvZml0L2FmbGF0aW4uYywKKwlzcmMvYXV0b2ZpdC9hZnR5cGVzLmg6IE1pc2NlbGxhbmVvdXMgYXV0by1oaW50ZXIgaW1wcm92ZW1lbnRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMpIFtBRl9ERUJVR106CisJRW1pdCBtb3JlIHNlbnNpYmxlIGluZm9ybWF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX1NlZ21lbnRSZWMpOiBBZGQgYGhlaWdodCcgbWVtYmVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKTogSW1wcm92ZQorCXJvdW5kaW5nIG9mIGJsdWUgdmFsdWVzLgorCShhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKTogSGludCBzZWdtZW50IGhlaWdodHMuCisJKGFmX2xhdGluX2hpbnRzX2xpbmtfc2VnbWVudHMpOiBSZWR1Y2UgYGxlbl9zY29yZScgdmFsdWUuCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMpOiBJbmNyZWFzZSBgc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkJworCXZhbHVlIGFuZCB1c2UgYGhlaWdodCcgbWVtYmVyIGZvciBjb21wYXJpc29ucy4KKwkoYWZfbGF0aW5faGludF9lZGdlcyk6IEV4dGVuZCBsb2dnaW5nIG1lc3NhZ2UuCisJSW1wcm92ZSBoYW5kbGluZyBvZiByZW1haW5pbmcgZWRnZXMuCisKKzIwMDYtMTEtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzE1NTUzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9sb2FkZXJfaW5pdCk6IFJlLWV4ZWN1dGUgdGhlIENWVAorCXByb2dyYW0gYWZ0ZXIgYSBjaGFuZ2UgZnJvbSBtb25vIHRvIGdyYXlzY2FsaW5nIChhbmQgdmljZSB2ZXJzYSkuCisJVXNlIGNvcnJlY3QgY29uc3RhbnQgZm9yIGNvbXBhcmlzb24gdG8gZ2V0IGBleGVjLT5ncmF5c2NhbGUnLgorCisyMDA2LTExLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlCZWNhdXNlIEZUX0xvYWRfR2x5cGggZXhwZWN0cyBDSUQgdmFsdWVzIGZvciBDSUQta2V5ZWQgZm9udHMsIHRoZQorCXRlc3QgZm9yIGEgdmFsaWQgZ2x5cGggaW5kZXggbXVzdCBiZSBkZWZlcnJlZCB0byB0aGUgZm9udCBkcml2ZXJzLgorCVRoaXMgcGF0Y2ggZml4ZXMgU2F2YW5uYWggYnVnICMxODMwMS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBEb24ndCBjaGVjayBgZ2x5cGhfaW5kZXgnLgorCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfR2x5cGhfTG9hZCksIHNyYy9jZmYvY2ZmZ2xvYWQuYworCShjZmZfc2xvdF9sb2FkKSwgc3JjL2NpZC9jaWRnbG9hZC5jIChjaWRfc2xvdF9sb2FkX2dseXBoKSwKKwlzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9HbHlwaF9Mb2FkKSwgc3JjL3Bmci9wZnJvYmpzLmMKKwkocGZyX3Nsb3RfbG9hZCksIHNyYy90cnVldHlwZS90dGRyaXZlci5jIChMb2FkX0dseXBoKSwKKwlzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKSwgc3JjL3dpbmZvbnRzL3dpbmZudC5jCisJKEZOVF9Mb2FkX0dseXBoKTogQ2hlY2sgdmFsaWRpdHkgb2YgYGdseXBoX2luZGV4Jy4KKworMjAwNi0xMS0xMyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRklYX0JZVEVDT0RFKTogVW5kZWZpbmUuICBUaGUgaW50ZXJwcmV0ZXIKKwlgZW5oYW5jZW1lbnRzJyBhcmUgc3RpbGwgdG9vIGJ1Z2d5IGZvciBnZW5lcmFsIHVzZS4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYzogQWRkIHN1cHBvcnQgZm9yIEZUX0ZPUkNFX0xJR0hUX0xDRF9GSUxURVIgYW5kCisJRlRfRk9SQ0VfTEVHQUNZX0xDRF9GSUxURVIgYXQgY29tcGlsZSB0aW1lLiAgRGVmaW5lIHRoZXNlIG1hY3JvcworCXdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IExDRCBmaWx0ZXIgdG8gYmUKKwl1c2VkLiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgZXhwZXJpbWVudGF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmg6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgorCisyMDA2LTExLTEwICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYzogQVBJIGNoYW5nZSBmb3IgdGhlIExDRAorCWZpbHRlci4gIFRoZSBGVF9MY2RGaWx0ZXIgdmFsdWUgaXMgYW4gZW51bWVyYXRpb24gZGVzY3JpYmluZyB3aGljaAorCWZpbHRlciB0byBhcHBseSwgd2l0aCBuZXcgdmFsdWVzIEZUX0xDRF9GSUxURVJfTElHSFQgYW5kCisJRlRfTENEX0ZJTFRFUl9MRUdBQ1kgKHRoZSBsYXR0ZXIgaW1wbGVtZW50cyB0aGUgTGliWGZ0IG9yaWdpbmFsCisJYWxnb3JpdGhtIHdoaWNoIHByb2R1Y2VzIHN0cm9uZyBjb2xvciBmcmluZ2VzIGZvciBldmVyeXRoaW5nCisJZXhjZXB0IHZlcnktd2VsbCBoaW50ZWQgdGV4dCkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCAoRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIpOiBDaGFuZ2UKKwlzZWNvbmQgcGFyYW1ldGVyIHRvIGFuIGVudW0gdHlwZS4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoVVNFX0xFR0FDWSk6IERlZmluZS4KKwkoX2Z0X2xjZF9maWx0ZXIpOiBSZW5hbWUgdG8uLi4KKwkoX2Z0X2xjZF9maWx0ZXJfZmlyKTogVGhpcy4KKwlVcGRhdGUgcGFyYW1ldGVycy4KKwkoX2Z0X2xjZF9maWx0ZXJfbGVnYWN5KSBbVVNFX0xFR0FDWV06IE5ldyBmaWx0ZXIgZnVuY3Rpb24uCisJKEZUX0xpYnJhcnlfU2V0X0xjZEZpbHRlcik6IFVwZGF0ZSBwYXJhbWV0ZXJzLgorCUhhbmRsZSBuZXcgZmlsdGVyIG1vZGVzLgorCisJKiBpbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oOiBJbmNsdWRlIEZUX0xDRF9GSUxURVJfSC4KKwkoRlRfQml0bWFwX0xjZEZpbHRlckZ1bmMpOiBDaGFuZ2UgdGhpcmQgYXJndW1lbnQgdG8gYEZUX0xpYnJhcnknLgorCShGVF9MaWJyYXJ5UmVjKSBbRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBBZGQgZmlsdGVyaW5nCisJY2FsbGJhY2sgYW5kIHVwZGF0ZSBvdGhlciBmaWVsZHMuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKQorCVtGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IFVwZGF0ZS4KKwlPdGhlciBtaW5vciBpbXByb3ZlbWVudHMuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYzogVmFyaW91cyB0aW55IGltcHJvdmVtZW50cyB0aGF0IGRyYXN0aWNhbGx5CisJaW1wcm92ZSB0aGUgaGFuZGxpbmcgb2Ygc2VyaWYgZm9udHMgYW5kIG9mIExDRC9MQ0RfViBoaW50aW5nIG1vZGVzLgorCShhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzKTogRml4IHR5cG8uCisJKGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCk6IFRha2UgYmV0dGVyIGNhcmUgb2YgZGlhZ29uYWwgc3RlbXMuCisKKzIwMDYtMTEtMDkgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNoX2dseXBoX2NvbXB1dGVfaW5mbGVjdGlvbnMpOiBGaXgKKwl0eXBvIHdoaWNoIGNyZWF0ZWQgYSB2YXJpYWJsZS11c2VkLWJlZm9yZS1pbml0aWFsaXplZCBidWcuCisKKzIwMDYtMTEtMDcgIFpoZSBTdSAgPGphbWVzLnN1QGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRzeW50aC5jIChGVF9HbHlwaFNsb3RfRW1ib2xkZW4pOiBIYW5kbGUgdmVydGljYWwgbGF5b3V0CisJYWxzby4KKworMjAwNi0xMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYzogRG9uJ3QgdXNlIGBsb25nIGxvbmcnIGJ1dCBgRlRfSW50NjQnLgorCisyMDA2LTExLTAyICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlBZGQgYSBmZXcgdHdlYWtzIHRvIGJldHRlciBoYW5kbGUgc2VyaWYgZm9udHMuCisJQWRkIG1vcmUgZGVidWdnaW5nIG1lc3NhZ2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMpOiBJZ25vcmUKKwlzZWdtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gMS41IHBpeGVscyBoaWdoLiAgVGhpcyBnZXRzIHJpZCBvZgorCSptYW55KiBjb3JuZXIgY2FzZXMgd2l0aCBzZXJpZnMuCisJKGFmX2xhdGluX2FsaWduX2xpbmtlZF9lZGdlKTogQWRkIGxvZ2dpbmcgbWVzc2FnZS4KKwkoYWZfbGF0aW5faGludF9lZGdlcyk6IFVzZSBBRl9ISU5UU19ET19CTFVFUy4KKwlBZGQgbG9nZ2luZyBtZXNzYWdlcy4KKwlIYW5kbGUgQUZfRURHRV9GTEFHIGZsYWcgc3BlY2lhbGx5LgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIFtBRl9ERUJVR106IEFkZCBfYWZfZGVidWcsCisJX2FmX2RlYnVnX2Rpc2FibGVfYmx1ZV9oaW50cywgYW5kIF9hZl9kZWJ1Z19oaW50cyB2YXJpYWJsZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfTE9HKSBbQUZfREVCVUddOiBVc2UgX2FmX2RlYnVnLgorCVVwZGF0ZSBleHRlcm5hbCBkZWNsYXJhdGlvbnMuCisJKGFmX2Nvcm5lcl9vcmllbnRhdGlvbiwgYWZfY29ybmVyX2lzX2ZsYXQpOiBSZXBsYWNlZCBieS4uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChmdF9jb3JuZXJfb3JpZW50YXRpb24sCisJZnRfY29ybmVyX2lzX2ZsYXQpOiBUaGVzZSBkZWNsYXJhdGlvbnMuCisKKwkqIHNyYy9hdXRvZml0L2FmYW5nbGVzLmMgKGFmX2Nvcm5lcl9vcmllbnRhdGlvbiwgYWZfY29ybmVyX2lzX2ZsYXQpOgorCUNvbW1lbnQgb3V0LiAgUmVwbGFjZWQgYnkuLi4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmggKGZ0X2Nvcm5lcl9vcmllbnRhdGlvbiwgZnRfY29ybmVyX2lzX2ZsYXQpOgorCVRoZXNlIGZ1bmN0aW9ucy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KKwkoRlRfQWRkNjQpIFshRlRfTE9ORzY0XTogU2ltcGxpZnkuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0guCisJKGFmX2RpcmVjdGlvbl9jb21wdXRlKTogQWRkIGEgbWlzc2luZyBGVF9BQlMgY2FsbC4gIFRoaXMgYnVnIGNhdXNlZAorCXByb2R1Y3Rpb24gb2YgZ2FyYmFnZSBieSBtaXNzaW5nIGxvdHMgb2Ygc2VnbWVudHMuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuaCAoQUZfSElOVFNfRE9fQkxVRVMpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9pbml0LCBhZl9sb2FkZXJfZG9uZSkKKwlbQUZfREVCVUddOiBTZXQgX2FmX2RlYnVnX2hpbnRzLgorCisKKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCShwc2hfY29ybmVyX2lzX2ZsYXQsIHBzaF9jb3JuZXJfb3JpZW50YXRpb24pOiBVc2UgZnRfY29ybmVyX2lzX2ZsYXQKKwlhbmQgZnRfY29ybmVyX29yaWVudGF0aW9uLgorCisKKwkqIHNyYy9nemlwL2luZnRyZWVzLmMgKGh1ZnRfYnVpbGQpOiBSZW1vdmUgY29tcGlsZXIgd2FybmluZy4KKworMjAwNi0xMC0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2VuY29kaW5nX2xvYWQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2VsZWN0X0NoYXJtYXApOiBEaXNhbGxvdyBGVF9FTkNPRElOR19OT05FCisJYXMgYXJndW1lbnQuCisKKzIwMDYtMTAtMjMgIFpoZSBTdSAgPHpzdUBub3ZlbGwuY29tPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogUmUtaW1wbGVtZW50IHRvCisJYmV0dGVyIGRlYWwgd2l0aCBicm9rZW4gQXNpYW4gZm9udHMgd2l0aCBzdHJhbmdlIGdseXBocywgaGF2aW5nCisJc2VsZi1pbnRlcnNlY3Rpb25zIGFuZCBvdGhlciBwZWN1bGlhcml0aWVzLiAgVGhlIHVzZWQgYWxnb3JpdGhtIGlzCisJYmFzZWQgb24gdGhlIG5vbnplcm8gd2luZGluZyBydWxlLgorCisyMDA2LTEwLTIzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CisKKwlTcGVlZCB1cCB0aGUgQ0ZGIGZvbnQgbG9hZGVyLiAgV2l0aCBzb21lIGxhcmdlIENGRiBmb250cywKKwlGVF9PcGVuX0ZhY2UgaXMgbm93IG1vcmUgdGhhbiB0aHJlZSB0aW1lcyBmYXN0ZXIuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZ2V0X29mZnNldCk6IFJlbW92ZWQuCisJKGNmZl9uZXdfaW5kZXgpOiBJbmxpbmUgZnVuY3Rpb25hbGl0eSBvZiBgY2ZmX2dldF9vZmZzZXQnLgorCShjZmZfY2hhcnNldF9jb21wdXRlX2NpZHMsIGNmZl9jaGFyc2V0X2ZyZWVfY2lkcyk6IE5ldyBmdW5jdGlvbnMuCisJKGNmZl9jaGFyc2V0X2RvbmUpOiBDYWxsIGBjZmZfY2hhcnNldF9mcmVlX2NpZHMnLgorCShjZmZfY2hhcnNldF9sb2FkKTogQ2FsbCBgY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzJy4KKwkoY2ZmX2VuY29kaW5nX2xvYWQpIDxQb3B1bGF0ZT46IERpdHRvLCB0byByZXBsYWNlIGluZWZmaWNpZW50IGxvb3AuCisKKwkqIHNyYy9zZm50L3R0bXR4LmMgKHR0X2ZhY2VfbG9hZF9obXR4KTogUmVwbGFjZSBjYWxscyB0byBGVF9HRVRfWFhYCisJd2l0aCBGVF9ORVhUX1hYWC4KKworCisJU3BlZWQgdXAgdGhlIFBvc3RzY3JpcHQgaGludGVyLCB3aXRoIG1vcmUgdGhhbiAxMDAlIHNwZWVkIGluY3JlYXNlCisJb24gbXkgbWFjaGluZS4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNoX2Nvcm5lcl9pc19mbGF0LAorCXBzaF9jb3JuZXJfb3JpZW50YXRpb24pOiBOZXcgZnVuY3Rpb25zLgorCShwc2hfZ2x5cGhfY29tcHV0ZV9pbmZsZWN0aW9ucyk6IE1lcmdlIGxvb3BzIGZvciBlZmZpY2llbmN5LgorCVVzZSBgcHNoX2Nvcm5lcl9vcmllbnRhdGlvbicuCisJKHBzaF9nbHlwaF9pbml0KTogVXNlIGBwc2hfY29ybmVyX2lzX2ZsYXQnLgorCShwc2hfaGludF90YWJsZV9maW5kX3N0cm9uZ19wb2ludCk6IFJlbmFtZWQgdG8uLi4KKwkocHNoX2hpbnRfdGFibGVfZmluZF9zdHJvbmdfcG9pbnRzKTogVGhpcy4KKwlSZXdyaXRlLCBhZGRpbmcgYXJndW1lbnQgdG8gaGFuZGxlIGFsbCBwb2ludHMgYXQgb25jZS4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKFBTSF9NQVhfU1RST05HX0lOVEVSTkFMKTogTmV3IG1hY3JvLgorCShwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfbm9ybWFsX3BvaW50cyk6IFJld3JpdGUgZm9yIGVmZmljaWVuY3kuCisKKzIwMDYtMTAtMTUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIHNyYy9iYXNlL2Z0bWFjLmMgKEZUX05ld19GYWNlX0Zyb21fRk9ORCk6IEluaXRpYWxpemUgdmFyaWFibGUKKwlgZXJyb3InIHdpdGggRlRfRXJyX09rLgorCisyMDA2LTEwLTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBkb2NzL0lOU1RBTEwuQ1JPU1M6IE5ldyBkb2N1bWVudCBmaWxlIGZvciBjcm9zcy1idWlsZGluZy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogUHJlbGltaW5hcnkgY3Jvc3MtYnVpbGRpbmcgc3VwcG9ydC4KKwlGaW5kIG5hdGl2ZSBDIGNvbXBpbGVyIGFuZCBwYXNzIGl0IGJ5IENDX0JVSUxELCBhbmQKKwlmaW5kIHN1ZmZpeCBmb3IgbmF0aXZlIGV4ZWN1dGFibGUgYW5kIHBhc3MgaXQgYnkgRVhFRVhUX0JVSUxELgorCUFsc28gc3VmZml4IGZvciB0YXJnZXQgZXhlY3V0YWJsZSBpcyBwYXNzZWQgYnkgRVhFRVhULgorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluIChDQ3Jhd19idWlsZCwgRV9CVUlMRCk6IE5ldyB2YXJpYWJsZXMgdG8KKwlidWlsZCBgYXBpbmFtZXMnIHdoaWNoIHJ1bnMgb24gYnVpbGRpbmcgc3lzdGVtLiAgVGhleSBhcmUgc2V0IGJ5CisJQ0NfQlVJTEQgYW5kIEVYRUVYVF9CVUlMRC4KKworCSogYnVpbGRzL2V4cG9ydHMubWsgKEFQSU5BTUVTX0VYRSk6IENoYW5nZSB0aGUgZXh0ZW5zaW9uIGZvcgorCWFwaW5hbWVzIGZyb20gdGhlIHN1ZmZpeCBmb3IgdGFyZ2V0IChFKSB0byB0aGF0IGZvciBidWlsZGluZyBob3N0CisJKEVfQlVJTEQpLgorCisyMDA2LTEwLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvSU5TVEFMTC5VTlgsIGRvY3MvVVBHUkFERS5VTlg6IFJlbmFtZWQgdG8uLi4KKwkqIGRvY3MvSU5TVEFMTC5VTklYLCBkb2NzL1VQR1JBREUuVU5JWDogVGhpcy4gIFVwZGF0ZSBhbGwgZG9jdW1lbnRzCisJd2hpY2ggcmVmZXJlbmNlIHRob3NlIGZpbGVzLgorCisyMDA2LTEwLTEyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3IChGVDJfRVhUUkFfTElCUyk6IE5ldyB2YXJpYWJsZS4gIEl0IGlzCisJZW1iZWRkZWQgaW4gZnJlZXR5cGUyLnBjIGFuZCBmcmVldHlwZS1jb25maWcuICBVc2UgaXQgdG8gcmVjb3JkCisJQ2FyYm9uIGRlcGVuZGVuY3kgb2YgTWFjT1NYLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZTIuaW46IEVtYmVkIEZUMl9FWFRSQV9MSUJTLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IERpdHRvLgorCisyMDA2LTEwLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRldmVsL2Z0b3B0aW9uLmggKEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HKTogRGVmaW5lIGZvcgorCWRldmVsb3BtZW50LgorCisyMDA2LTEwLTAzICBKZW5zIENsYXVkaXVzICA8amVucy5jbGF1ZGl1c0B5YWhvby5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmg6IENhc3QgYXdheSB2b2xhdGlsZW5lc3MgZnJvbQorCWFyZ3VtZW50IHRvIGZ0X3NldGptcC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmg6IEFkZCBjb21tZW50IHRoYXQKKwlmdF92YWxpZGF0b3JfcnVuIG11c3Qgbm90IGJlIHVzZWQuCisKKzIwMDYtMTAtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRiYXNlLmM6IFVuZG8gY2hhbmdlIGZyb20gMjAwNi0wOS0zMC4KKworCSogc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKTogUmVtb3ZlIGBmdGxjZGZpbC5jJy4KKworMjAwNi0wOS0zMCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKToKKwlzL3VucGF0ZW50ZWRfaGludGluZy9pZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXIvLgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBSZWZpbmUgdGhlIGFsZ29yaXRobSB3aGV0aGVyCisJYXV0by1oaW50aW5nIHNoYWxsIGJlIHVzZWQgb3Igbm90LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IERpdHRvLgorCisyMDA2LTA5LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX1NSQyk6IFJlbW92ZSBgZnRhcGkuYycgKHdoaWNoIGlzIG5vIGxvbmdlcgorCWluIHVzZSkuCisKKwkqIHNyYy9iYXNlL2Z0YmFzZS5jOiBJbmNsdWRlIGBmdGxjZGZpbC5jJy4KKworMjAwNi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfY2hhcl9tYXBfYmluYXJ5KTogRml4IGFsZ29yaXRobSBmb3IKKwlvdmVybGFwcGluZyBzZWdtZW50cy4gIEJ1ZyByZXBvcnRlZCBieSBTdGVmYW4gS29jaC4KKworMjAwNi0wOS0yOCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4IGEgYnVnIGluIHRoZSBhdXRvbWF0aWMgdW5wYXRlbnRlZCBoaW50aW5nIHN1cHBvcnQgd2hpY2ggcHJldmVudHMKKwlub3JtYWwgYnl0ZWNvZGUgaGludGluZyB0byB3b3JrIHByb3Blcmx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKToKKwlzL2ZvcmNlX2F1dG9oaW50L3VucGF0ZW50ZWRfaGludGluZy8uICBVcGRhdGUgYWxsIGNhbGxlcnMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVXBkYXRlZCBjb2RlLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmggKEFGX0RFQlVHKTogVW5kZWZpbmUgdG8gZ2V0IHJpZCBvZiB0cmFjZXMuCisKKzIwMDYtMDktMjcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9GUkVFVFlQRV9QQVRDSCk6IFNldCB0byAyLgorCisKKwlBZGQgYSBuZXcgQVBJIHRvIHN1cHBvcnQgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGdseXBoIGJpdG1hcHMuCisJSW4gYSBkZWZhdWx0IGJ1aWxkLCB0aGUgZnVuY3Rpb24gYEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyJyByZXR1cm5zCisJYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnOyB5b3UgbmVlZCB0byAjZGVmaW5lCisJRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaW4gZnRvcHRpb24uaCB0byBjb21waWxlIHRoZQorCXJlYWwgaW1wbGVtZW50YXRpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCwgc3JjL2Jhc2UvZnRsY2RmaWwuYzogTmV3IGZpbGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyk6IE5ldworCXR5cGVkZWYuCisJKEZUX0xpYnJhcnlSZWMpIFtGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IE5ldyBtZW1iZXJzCisJYGxjZF9maWx0ZXJfd2VpZ2h0cycgYW5kIGBsY2RfZmlsdGVyJy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBSZW1vdmUgYXJndW1lbnRzCisJYGhtdWwnIGFuZCBgdm11bCcuCisKKwlIYW5kbGUgc3VicGl4ZWwgcmVuZGVyaW5nLgorCVNpbXBsaWZ5IGZ1bmN0aW9uLgorCShmdF9zbW9vdGhfcmVuZGVyX2xjZCk6IFVzZSBgRlRfUkVOREVSX01PREVfTENEJy4KKwkoZnRfc21vb3RoX3JlbmRlcl9sY2Rfdik6IFVzZSBgRlRfUkVOREVSX01PREVfTENEX1YnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9MQ0RfRklMVEVSX0gpOiBOZXcgbWFjcm8sCisJcG9pbnRpbmcgdG8gPGZyZWV0eXBlL2Z0bGNkZmlsLmg+LgorCisJKiBzcmMvYmFzZS9KYW1maWxlIChfc291cmNlcyksIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX1NSQyksCisJdm1zX21ha2UuY29tOiBBZGQgYGZ0bGNkZmlsLmMnIHRvIHRoZSBsaXN0IG9mIGNvbXBpbGVkIHNvdXJjZSBmaWxlcy4KKworCSogbW9kdWxlcy5jZmcgKEJBU0VfRVhURU5TSU9OUyk6IEFkZCBmdGxjZGZpbC5jLgorCisyMDA2LTA5LTI2ICBEYXZpZCBCdXN0aW4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2dldF9rZXJuaW5nKTogU2tpcCBhZGp1c3RtZW50IGJ5dGVzCisJY29ycmVjdGx5LiAgUmVwb3J0ZWQgYXMgU2F2YW5uYWggYnVnICMxNzg0My4KKworMjAwNi0wOS0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0hJTlRTX0RPX0hPUklaT05UQUwsCisJQUZfSElOVFNfRE9fVkVSVElDQUwsIEFGX0hJTlRTX0RPX0FEVkFOQ0UpOiBOZXcgbWFjcm9zIHRvIGRpc2FibGUKKwlob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBoaW50aW5nIGZvciB0aGUgcHVycG9zZSBvZiBkZWJ1Z2dpbmcgdGhlCisJYXV0by1maXR0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKF9hZl9kZWJ1Z19kaXNhYmxlX2hvcnpfaGludHMsCisJX2FmX2RlYnVnX2Rpc2FibGVfdmVydF9oaW50cykgW0FGX0RFQlVHXTogTmV3IGdsb2JhbCB2YXJpYWJsZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCBbQUZfREVCVUddOiBEZWNsYXJlIGFib3ZlIHZhcmlhYmxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCwgZGV2ZWwvZnRvcHRpb24uaAorCShGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyk6IE5ldyBtYWNybyB0byBjb250cm9sIHdoZXRoZXIKKwl3ZSB3YW50IHRvIGNvbXBpbGUgTENELW9wdGltaXplZCByZW5kZXJpbmcgY29kZSAow6AgbGEgQ2xlYXJUeXBlKSBvcgorCW5vdC4gIFRoZSBtYWNybyAqbXVzdCogYmUgZGlzYWJsZWQgaW4gZGVmYXVsdCBidWlsZHMgb2YgdGhlIGxpYnJhcnkKKwlmb3IgcGF0ZW50IHJlYXNvbnMuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogRGlzYWJsZQorCUxDRC1zcGVjaWZpYyByZW5kZXJpbmcgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworCWlzbid0IGRlZmluZWQgYXQgY29tcGlsZSB0aW1lLiAgVGhpcyBvbmx5IGNoYW5nZXMgdGhlIGNvbnRlbnQgb2YgdGhlCisJcmVuZGVyZWQgZ2x5cGggdG8gbWF0Y2ggdGhlIG9uZSBvZiBub3JtYWwgZ3JheS1sZXZlbCByZW5kZXJpbmcsCisJaGVuY2UgY2xpZW50cyBzaG91bGQgbm90IG5lZWQgdG8gYmUgbW9kaWZpZWQuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAwNi0wOS0xOCAgR2FycmljayBNZWVrZXIgIDxnYXJyaWNrQGRpZ2l0YWxhbmFyY2h5LmNvbT4KKworCSogc3JjL2Jhc2UvZnRtYWMuYyAoRlRfTmV3X0ZhY2VfRnJvbV9GT05EKTogRmFsbCBiYWNrIHRvIFNGTlQgaWYKKwlMV0ZOIGZhaWxzIGFuZCBib3RoIGFyZSBhdmFpbGFibGUuCisKKzIwMDYtMDktMTEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X2ZhY2VfZ2V0X25hbWUpOiBTdXBwb3J0IHNvbWUgZm9udHMgd2hpY2gKKwlyZXBvcnQgdGhlaXIgRW5nbGlzaCBuYW1lcyB0aHJvdWdoIGFuIEFwcGxlIFJvbWFuCisJKHBsYXRmb3JtLGVuY29kaW5nKSBwYWlyLCB3aXRoIGxhbmd1YWdlX2lkICE9IEVuZ2xpc2guCisKKwlJZiB0aGUgZm9udCB1c2VzIGFub3RoZXIgbmFtZSBlbnRyeSB3aXRoIGxhbmd1YWdlX2lkID09IEVuZ2xpc2gsIGl0CisJd2lsbCBiZSBzZWxlY3RlZCBjb3JyZWN0bHksIHRob3VnaC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBBZGQgdW5wYXRlbnRlZCBoaW50aW5nCisJc2VsZWN0aW9uIGZvciBgbWluZ2xpLnR0ZicuCisKKzIwMDYtMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBIYW5kbGUgYHJlY29yZF9zaXplJworCXZhbHVlcyB3aGljaCBoYXZlIHRoZSB1cHBlciB0d28gYnl0ZXMgc2V0IHRvIDB4RkYgaW5zdGVhZCBvZiAweDAwCisJKGFzIGl0IGhhcHBlbnMgaW4gYXQgbGVhc3QgdHdvIENKS1YgZm9udHMsIGBIQU4gTk9NIEEudHRmJyBhbmQKKwlgSEFOIE5PTSBCLnR0ZicpLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyBbR1JBWVNfVVNFX0dBTU1BXTogUmVhbGx5IHJlbW92ZSBhbGwgY29kZS4KKworMjAwNi0wOS0wNSAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJTWlub3Igc291cmNlIGNsZWFudXBzIGFuZCBvcHRpbWl6YXRpb25zLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoR1JBWVNfQ09NUEFDVCk6IFJlbW92ZWQuCisJKFRSYXN0ZXIpOiBSZW1vdmUgYGNvdW50X2V4JyBhbmQgYGNvdW50X2V5Jy4KKwkoZ3JheV9maW5kX2NlbGwpOiBSZW1vdmUgMm5kIGFuZCAzcmQgYXJndW1lbnQuCisJKGdyYXlfYWxsb2NfY2VsbCk6IE1lcmdlZCB3aXRoIGBncmF5X2ZpbmRfY2VsbCcuCisJKGdyYXlfcmVjb3JkX2NlbGwpOiBTaW1wbGlmeS4KKwkoZ3JheV9zZXRfY2VsbCk6IFJld3JpdGUuCisJKGdyYXlfc3RhcnRfY2VsbCk6IEFwcGx5IG9mZnNldHMgdG8gYHJhcy5leCcgYW5kIGByYXMuZXknLgorCShncmF5X3JlbmRlcl9zcGFuKTogRG9uJ3QgdXNlIEZUX01FTV9TRVQgZm9yIHNtYWxsIHZhbHVlcy4KKwkoZ3JheV9kdW1wX2NlbGxzKSBbREVCVUdfR1JBWVNdOiBOZXcgZnVuY3Rpb24uCisJKGdyYXlfc3dlZXApOiBBdm9pZCBidWZmZXIgb3ZlcndyaXRlcyB3aGVuIHRvIGRyYXdpbmcgdGhlIGVuZCBvZiBhCisJYml0bWFwIHNjYW5saW5lLgorCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBGaXggc3BlZWQtdXAuCisKKzIwMDYtMDktMDQgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfY29udmVydF9nbHlwaHMpOiBNYWtlIGl0IHdvcmsgd2l0aAorCTY0Yml0IHByb2Nlc3NvcnMuCisKKzIwMDYtMDktMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogU3luY2hyb25pemUgd2l0aAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmguCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlY29yZF9jZWxsKTogUmVtb3ZlIHNoYWRvd2luZworCXZhcmlhYmxlIGRlY2xhcmF0aW9uLgorCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDYtMDktMDEgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBVcGRhdGUgdGhlIFRydWVUeXBlIGxvYWRlcgorCXRvIHJlY29nbml6ZSBhIGZldyBmb250cyB0aGF0IHJlcXVpcmUgdGhlIGF1dG9tYXRpYyB1bnBhdGVudGVkCisJbG9hZGVyLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogT3B0bWl6ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGFudGktYWxpYXNlZAorCXJhc3Rlcml6ZXIuICBUaGUgc3BlZWQgaW1wcm92ZW1lbnQgaXMgYmV0d2VlbiAxNSUgYW5kIDI1JSwgZGVwZW5kaW5nCisJb24gdGhlIGZvbnQgZGF0YS4KKworCShHUkFZU19VU0VfR0FNTUEsIEdSQVlTX0NPTVBBQ1QpOiBSZW1vdmVkLCBhbmQgYWxsIGFzc29jaWF0ZWQgY29kZS4KKwkoVENlbGwpOiBSZWRlZmluZS4KKwkoVFJhc3Rlcik6IE5ldyBtZW1iZXJzIGBidWZmZXInLCBgYnVmZmVyX3NpemUnLCBgeWNlbGxzJywgYHljb3VudCcuCisJKGdyYXlfaW5pdF9jZWxscyk6IFVwZGF0ZWQuCisJKGdyYXlfZmluZF9jZWxsLCBncmF5X2FsbG9jX2NlbGwpOiBOZXcgZnVuY3Rpb25zLgorCShncmF5X3JlY29yZF9jZWxsKTogUmV3cml0dGVuIHRvIHVzZSBgZ3JheV9maW5kX2NlbGwnIGFuZAorCWBncmF5X2FsbG9jX2NlbGwnLgorCShQQUNLLCBMRVNTX1RIQU4sIFNXQVBfQ0VMTFMsIERFQlVHX1NPUlQsIFFVSUNLX1NPUlQsIFNIRUxMX1NPUlQsCisJUVNPUlRfVEhSRVNIT0xEKToKKwlSZW1vdmVkLgorCShncmF5X3NoZWxsX3NvcnQsIGdyYXlfcXVpY2tfc29ydCwgZ3JheV9jaGVja19zb3J0LAorCWdyYXlfZHVtcF9jZWxscyk6IFJlbW92ZWQuCisJKGdyYXlfc3dlZXApOiBSZXdyaXR0ZW4uCisJKGdyYXlfY29udmVydF9nbHlwaCk6IFJld3JpdGUgY29kZSB3aGljaCB1c2VkIG9uZSBvZiB0aGUgc29ydGluZworCWZ1bmN0aW9ucy4KKwkoZ3JheV9yYXN0ZXJfcmVuZGVyKTogVXBkYXRlZC4KKworMjAwNi0wOC0yOSAgRHIuIFdlcm5lciBGaW5rICA8d2VybmVyQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZTogTWFrZSBpdCBwb3NzaWJsZSB0byBoYW5kbGUgY29uZmlndXJlIG9wdGlvbnMgd2hpY2gKKwloYXZlIHN0cmluZ3MgY29udGFpbmluZyBzcGFjZXMuCisKKzIwMDYtMDgtMjcgIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCAoVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSKToKKwlOZXcgbWFjcm8sIGRlZmluZWQgaWYgZWl0aGVyIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKKwlvciBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyBpcyBkZWZpbmVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oLCBzcmMvYmFzZS9mdGNhbGMuYywKKwlzcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYywgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMsCisJc3JjL3RydWV0eXBlL3R0Z2xvYWQuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCwKKwlzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYywgc3JjL3RydWV0eXBlL3R0b2Jqcy5jLAorCXNyYy90cnVldHlwZS90dG9ianMuaCwgc3JjL3RydWV0eXBlL3R0cGxvYWQuYywgc3JjL3R5cGU0Mi90NDJkcml2ci5jOgorCXMvVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUi9UVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKTogTmV3CisJbWVtYmVyIGBmb3JjZV9hdXRvaGludCcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVXNlIGBmb3JjZV9hdXRvaGludCcuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KTogUHJlcGFyZSBjb2RlIGZvciB0ZXN0aW5nCisJYWdhaW5zdCBhIGxpc3Qgb2YgZm9udCBuYW1lcyB3aGljaCBuZWVkIHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4KKworMjAwNi0wOC0yNyAgSmVucyBDbGF1ZGl1cyAgPGplbnMuY2xhdWRpdXNAeWFob28uY29tPgorCisJRml4IG1pc2NlbGxhbmVvdXMgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg6IENsb3NlIGNvbW1lbnQgd2l0aCBgKi8nIHRvCisJYXZvaWQgYC8qIGluIGNvbW1lbnQnIGNvbXBpbGVyIHdhcm5pbmcuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKGZ0X21lbV90YWJsZV9nZXRfc291cmNlKTogVHVybiBjYXN0CisJYChGVF9VSW50MzIpKHZvaWQqKScgaW50byBgKEZUX1VJbnQzMikoRlRfUHRyRGlzdCkodm9pZCopJyBzaW5jZSBvbgorCTY0LWJpdCBwbGF0Zm9ybXMgdm9pZCogaXMgbGFyZ2VyIHRoYW4gRlRfVUludDMyLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAodF92YWxpZGF0b3JfZXJyb3IpOiBDYXN0IGF3YXkKKwl2b2xhdGlsZW5lc3Mgb2YgYXJndW1lbnQgdG8gZnRfbG9uZ2ptcC4gIFNwb3R0ZWQgYnkgV2VybmVyCisJYFB1dHpmcmF1JyBMZW1iZXJnLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChiZGZfbG9hZF9mb250KTogSW5pdGlhbGl6ZSBsb2NhbAorCXZhcmlhYmxlIGBsaW5lbm8nLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb2QuYyAoY2xhc3NpY19rZXJuX3ZhbGlkYXRlKTogTWFyayBsb2NhbCB2YXJpYWJsZQorCWBlcnJvcicgYXMgdm9sYXRpbGUuCisKKzIwMDYtMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IFN5bmNocm9uaXplIHdpdGggbWFpbiBmdGNvbmZpZy5oLgorCVJlcG9ydGVkIGJ5IEplbnMuCisKKzIwMDYtMDgtMjIgIEplbnMgQ2xhdWRpdXMgIDxqZW5zLmNsYXVkaXVzQHlhaG9vLmNvbT4KKworCUZpeCBmb3IgcHJldmlvdXMgY29tbWl0LCB3aGljaCBjYXVzZWQgbWFueSBjb21waWxlciB3YXJuaW5ncy9lcnJvcnMKKwlhYm91dCBhZGRyZXNzZXMgb2Ygdm9sYXRpbGUgb2JqZWN0cyBwYXNzZWQgYXMgZnVuY3Rpb24gYXJndW1lbnRzIGFzCisJbm9uLXZvbGF0aWxlIHBvaW50ZXJzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaDogTWFrZSBGVF9WYWxpZGF0b3IgdHlwZWRlZiBhCisJcG9pbnRlciB0byBhIHZvbGF0aWxlIG9iamVjdC4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9kLmMgKGd4dl9sb2FkX3RhYmxlKTogTWFrZSBmdW5jdGlvbiBhcmd1bWVudAorCWB0YWJsZScgYSBwb2ludGVyIHRvIGEgdm9sYXRpbGUgb2JqZWN0LgorCisJKiBzcmMvb3R2YWxpZC9vdHZtb2QuYyAob3R2X2xvYWRfdGFibGUpOiBNYWtlIGZ1bmN0aW9uIGFyZ3VtZW50CisJYHRhYmxlJyBhIHBvaW50ZXIgdG8gYSB2b2xhdGlsZSBvYmplY3QuCisKKzIwMDYtMDgtMTggIEplbnMgQ2xhdWRpdXMgIDxqZW5zLmNsYXVkaXVzQHlhaG9vLmNvbT4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9kLmMgKEdYVl9UQUJMRV9ERUNMKTogTWFyayBsb2NhbCB2YXJpYWJsZSBgX3NmbnQnCisJYXMgdm9sYXRpbGUgc2luY2UgaXQgbXVzdCBrZWVwIGl0cyB2YWx1ZSBhY3Jvc3MgYSBjYWxsIHRvIGZ0X3NldGptcC4KKwkoZ3h2X3ZhbGlkYXRlKTogU2FtZSBmb3IgbG9jYWwgdmFyaWFibGVzIGBtZW1vcnknIGFuZCBgdmFsaWQnLgorCShjbGFzc2ljX2tlcm5fdmFsaWRhdGUpOiBTYW1lIGZvciBsb2NhbCB2YXJpYWJsZXMgYG1lbW9yeScsCisJYGNrZXJuJywgYW5kIGB2YWxpZCcuCisKKwkqIHNyYy9vdHZhbGlkL290dm1vZC5jIChvdHZfdmFsaWRhdGUpOiBTYW1lIGZvciBmdW5jdGlvbiBwYXJhbWV0ZXIKKwlgZmFjZScgYW5kIGxvY2FsIHZhcmlhYmxlcyBgYmFzZScsIGBnZGVmJywgYGdwb3MnLCBgZ3N1YicsIGBqc3RmJywKKwlhbmQgJ3ZhbGlkJy4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBTYW1lIGZvciBsb2NhbCB2YXJpYWJsZQorCWBjbWFwJy4KKworMjAwNi0wOC0xNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvY2lkL2NpZGdsb2FkLmMgKGNpZF9zbG90X2xvYWRfZ2x5cGgpOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3ZhbGlkYXRvcl9ydW4pOiBEaXNhYmxlIGZ1bmN0aW9uOyBpdCBpcworCWJ1Z2d5IGJ5IGRlc2lnbi4gIEFsd2F5cyByZXR1cm4gLTEuCisKKworCUltcHJvdmVtZW50cyB0byBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZy4gIFRoaXMgaXMgYSBmaXJzdCB0cnksCisJY29udHJvbGxlZCBieSB0aGUgRklYX0JZVEVDT0RFIG1hY3JvIGluIHNyYy90cnVldHlwZS90dGludGVycC5jLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmggKEZUX0dseXBoTG9hZFJlYyk6IEFkZCBtZW1iZXIKKwlgZXh0cmFfcG9pbnRzMicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9HbHlwaFpvbmVSZWMpOiBBZGQgbWVtYmVyCisJYG9ydXMnLgorCisJKiBzcmMvYmFzZS9mdGdsb2Fkci5jIChGVF9HbHlwaExvYWRlcl9SZXNldCwKKwlGVF9HbHlwaExvYWRlcl9BZGp1c3RfUG9pbnRzLCBGVF9HbHlwaExvYWRlcl9DcmVhdGVFeHRyYSwKKwlGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cywgRlRfR2x5cGhMb2FkZXJfQ29weVBvaW50cyk6IFVwZGF0ZWQgdG8KKwloYW5kbGUgYGV4dHJhX3BvaW50czInLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9wcmVwYXJlX3pvbmUpOiBIYW5kbGUgYG9ydXMnLgorCVJlbW92ZSBjb21waWxlciB3YXJuaW5nLgorCShjdXJfdG9fYXJnKTogUmVtb3ZlIG1hY3JvLgorCShUVF9IaW50X0dseXBoKTogVXBkYXRlZC4KKwkoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBIYW5kbGUgYG9ydXMnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRklYX0JZVEVDT0RFKTogTmV3IG1hY3JvLgorCShJbnNfTUQsIEluc19NRFJQLCBJbnNfSVApIFtGSVhfQllURUNPREVdOiBIYW5kbGUgYG9ydXMnLgorCShMT0NfSW5zX0lVUCk6IFJlbmFtZWQgdG8uLi4KKwkoSVVQX1dvcmtlclJlYyk6IFRoaXMuCisJQWRkIGBvcnVzJyBtZW1iZXIuCisJKFNoaWZ0KTogUmVuYW1lZCB0by4uLgorCShfaXVwX3dvcmtlcl9zaGlmdCk6IFRoaXMuCisJVXBkYXRlZC4KKwkoSW50ZXJwKTogUmVuYW1lZCB0by4uLgorCShfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZSk6IFRoaXMuCisJVXBkYXRlZCB0byBoYW5kbGUgYG9ydXMnLgorCShJbnNfSVVQKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9nbHlwaHpvbmVfZG9uZSwgdHRfZ2x5cGh6b25lX25ldyk6CisJSGFuZGxlIGBvcnVzJy4KKworMjAwNi0wOC0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogbW9kdWxlcy5jZmcgKEJBU0VfRVhURU5TSU9OUyk6IENvbXBpbGUgaW4gZnRneHZhbC5jIGJ5IGRlZmF1bHQgdG8KKwlidWlsZCBmdHZhbGlkIGluIGZ0MmRlbW9zLiAgVGhpcyBoYXMgYmVlbiBpbmFkdmVydGVkbHkgY2hhbmdlZAorCTIwMDYtMDgtMTMuCisKKzIwMDYtMDgtMTUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlgZnRfdmFsaWRhdG9yX3J1bicgd3JhcHBpbmcgYHNldGptcCcgY2FuIGNhdXNlIGEgY3Jhc2gsIGFzIGZvdW5kIGJ5CisJSmVuczoKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNi0wOC9tc2cwMDAwNC5odG0uCisKKwkqIHNyYy9vdHZhbGlkL290dm1vZC5jOiBSZXBsYWNlIGBmdF92YWxpZGF0b3JfcnVuJyBieSBgZnRfc2V0am1wJy4KKwlJdCByZXZlcnRzIHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBvbiAyMDA1LTA4LTIwLgorCisJKiBzcmMvZ3h2YWxpZC9neHZtb2QuYzogRGl0dG8uCisKKzIwMDYtMDgtMTMgIEplbnMgQ2xhdWRpdXMgIDxqZW5zLmNsYXVkaXVzQHlhaG9vLmNvbT4KKworCSogZmluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaDogKFQxX1Rva2VuVHlwZSk6IEFkZAorCVQxX1RPS0VOX1RZUEVfS0VZLgorCShUMV9GaWVsZFJlYyk6IEFkZCBgZGljdCcuCisJKFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QsIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSk6IE5ldyBtYWNyb3MuCisJKFQxX05FV19YWFgsIFQxX0ZJRUxEX1hYWCk6IFVwZGF0ZSB0byB0YWtlIHRoZSBkaWN0aW9uYXJ5IHdoZXJlIGEgUFMKKwlrZXl3b3JkIGlzIGV4cGVjdGVkIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jOiAoY2lkX2ZpZWxkX3JlY29yZHMpOiBBZGp1c3QgaW52b2NhdGlvbnMgb2YKKwlUMV9GSUVMRF9YWFguCisKKwkqIHNyYy9jaWQvY2lkdG9rZW4uaDogQWRqdXN0IGludm9jYXRpb25zIG9mIFQxX0ZJRUxEX1hYWC4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jOiBBZGQgbWFjcm8gRlRfQ09NUE9ORU5UIGZvciB0cmFjaW5nLgorCShwc19wYXJzZXJfdG9fdG9rZW4pOiBSZXBvcnQgYSBQb3N0U2NyaXB0IGtleSBhcyBUMV9UT0tFTl9UWVBFX0tFWSwKKwlub3QgVDFfVE9LRU5fVFlQRV9BTlkuCisJKHBzX3BhcnNlcl9sb2FkX2ZpZWxkKTogTWFrZSBzdXJlIGEgdG9rZW4gdGhhdCBzaG91bGQgYmUgYSBzdHJpbmcgb3IKKwluYW1lIGlzIHJlYWxseSBhIHN0cmluZyBvciBuYW1lLgorCUF2b2lkIG1lbW9yeSBsZWFrIGlmIGEga2V5d29yZCBoYXMgYmVlbiBhbHJlYWR5IGVuY291bnRlcmVkIGFuZCBpdHMKKwl2YWx1ZSBpcyBvdmVyd3JpdHRlbi4KKwkqIHNyYy90eXBlMS90MWxvYWQuYzogKHQxX2tleXdvcmRzKTogQWRqdXN0IGludm9jYXRpb25zIG9mCisJVDFfRklFTERfWFhYLgorCShwYXJzZV9kaWN0KTogSWdub3JlIGtleXdvcmRzIHRoYXQgb2NjdXIgaW4gdGhlIHdyb25nIGRpY3Rpb25hcnkKKwkoZS5nLiwgaW4gYFByaXZhdGUnIGluc3RlYWQgb2YgYEZvbnREaWN0JykuCisKKwkqIHNyYy90eXBlMS90MXRva2Vucy5oOiBBZGp1c3QgaW52b2NhdGlvbnMgb2YgVDFfRklFTERfWFhYLgorCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmM6ICh0NDJfa2V5d29yZHMpOiBBZGp1c3QgaW52b2NhdGlvbnMgb2YKKwlUMV9GSUVMRF9YWFguCisKKzIwMDYtMDctMTggIEplbnMgQ2xhdWRpdXMgIDxqZW5zLmNsYXVkaXVzQHlhaG9vLmNvbT4KKworCU1vdmUgY3JlYXRpb24gb2YgZmllbGQgYGJ1aWxkY2hhcicgb2YgVDFfRGVjb2RlclJlYyBvdXQgb2YKKwlgdDFfZGVjb2Rlcl9pbml0JyBhbmQgbGV0IHRoZSBjYWxsZXIgb2YgYHQxX2RlY29kZXJfaW5pdCcgdGFrZSBjYXJlCisJb2YgaXQuCisKKwlDYWxsIHRoZSBmaW5pc2hlciBmb3IgVDFfRGVjb2RlciBpbiBgY2lkX2ZhY2VfY29tcHV0ZV9tYXhfYWR2YW5jZScKKwlhbmQgYFQxX0NvbXB1dGVfTWF4X0FkdmFuY2UnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXJSZWMpOiBSZW1vdmUgZmllbGQKKwlgZmFjZScsIGFkZCBgbGVuX2J1aWxkY2hhcicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9GYWNlUmVjKTogQWRkIGZpZWxkCisJYGJ1aWxkY2hhcicuCisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2ZhY2VfY29tcHV0ZV9tYXhfYWR2YW5jZSk6IENhbGwgZmluaXNoZXIKKwlmb3IgVDFfRGVjb2Rlci4KKwkoY2lkX3Nsb3RfbG9hZF9nbHlwaCk6IERvIG5vdCBpZ25vcmUgZmFpbHVyZSB3aGVuIGluaXRpYWxpemluZyB0aGUKKwlUMV9EZWNvZGVyLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFVwZGF0ZWQuCisJKHQxX2RlY29kZXJfaW5pdCk6IFJlbW92ZSBpbml0aWFsaXphdGlvbiBvZiBmaWVsZHMgYGJ1aWxkY2hhcicgYW5kCisJYGxlbl9idWlsZGNoYXInLgorCSh0MV9kZWNvZGVyX2RvbmUpOiBSZW1vdmUgZGVhbGxvY2F0aW9uIG9mIGZpZWxkIGBidWlsZGNoYXInLgorCisJKiBmcmVldHlwZS9zcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Db21wdXRlX01heF9BZHZhbmNlKTogSW5pdGlhbGl6ZQorCVQxX0RlY29kZXIncyBgYnVpbGRjaGFyJyBhbmQgYGxlbl9idWlsZGNoYXInOyBjYWxsIGZpbmlzaGVyIGZvcgorCVQxX0RlY29kZXIuCisJKFQxX0xvYWRfR2x5cGgpOiBJbml0aWFsaXplIFQxX0RlY29kZXIncyBgYnVpbGRjaGFyJyBhbmQKKwlgbGVuX2J1aWxkY2hhcic7IG1ha2Ugc3VyZSB0byBjYWxsIGZpbmlzaGVyIGZvciBUMV9EZWNvZGVyIGV2ZW4gaW4KKwljYXNlIG9mIGVycm9yLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX09wZW5fRmFjZSk6IEFsbG9jYXRlIG5ldyBmaWVsZCBgYnVpbGRjaGFyJworCW9mIFQxX0ZhY2VSZWMuCisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRmFjZV9Eb25lKTogRnJlZSBuZXcgZmllbGQgYGJ1aWxkY2hhcicgb2YKKwlUMV9GYWNlUmVjLgorCisyMDA2LTA3LTE0ICBKZW5zIENsYXVkaXVzICA8amVucy5jbGF1ZGl1c0B5YWhvby5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaDogTmV3IG1hY3JvcyBJU19QU19ORVdMSU5FLAorCUlTX1BTX1NQQUNFLCBJU19QU19TUEVDSUFMLCBJU19QU19ERUxJTSwgSVNfUFNfRElHSVQsIElTX1BTX1hESUdJVCwKKwlhbmQgSVNfUFNfQkFTRTg1IChmcm9tIHNyYy9wc2F1eC9wc2NvbnYuaCkuCisJKFQxX0ZpZWxkTG9jYXRpb24pOiBBZGQgVDFfRklFTERfTE9DQVRJT05fTE9BREVSLAorCVQxX0ZJRUxEX0xPQ0FUSU9OX0ZBQ0UsIGFuZCBUMV9GSUVMRF9MT0NBVElPTl9CTEVORC4KKwkoVDFfRGVjb2RlclJlYyk6IE5ldyBmaWVsZHMgYGJ1aWxkY2hhcicgYW5kIGBmYWNlJy4KKwkoSVNfUFNfVE9LRU4pOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIChUMV9GYWNlUmVjKTogTmV3IGZpZWxkcworCWBuZHZfaWR4JywgYGNkdl9pZHgnLCBhbmQgYGxlbl9idWlsZGNoYXInLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmggKFBTX0JsZW5kUmVjKTogTmV3IGZpZWxkcworCWBkZWZhdWx0X2Rlc2lnbl92ZWN0b3InIGFuZCBgbnVtX2RlZmF1bHRfZGVzaWduX3ZlY3RvcicuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuaDogTW92ZSBtYWNyb3MgSVNfUFNfTkVXTElORSwgSVNfUFNfU1BBQ0UsCisJSVNfUFNfU1BFQ0lBTCwgSVNfUFNfREVMSU0sIElTX1BTX0RJR0lULCBJU19QU19YRElHSVQsIGFuZAorCUlTX1BTX0JBU0U4NSB0byBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmguCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfcGFyc2VyX3RvX3Rva2VuX2FycmF5KTogQWxsb3cgYHRva2VuJworCWFyZ3VtZW50IHRvIGJlIE5VTEwgaWYgd2Ugd2FudCBvbmx5IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdG9rZW5zLgorCShwc190b2Nvb3JkYXJyYXkpOiBBbGxvdyBgY29vcmRzJyBhcmd1bWVudCB0byBiZSBOVUxMIGlmIHdlIGp1c3QKKwl3YW50IHRvIHNraXAgdGhlIGFycmF5LgorCShwc190b2ZpeGVkYXJyYXkpOiBBbGxvdyBgdmFsdWVzJyBhcmd1bWVudCB0byBiZSBOVUxMIGlmIHdlIGp1c3QKKwl3YW50IHRvIHNraXAgdGhlIGFycmF5LgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEFkZCBzdXBwb3J0CisJZm9yIChwYXJ0aWFsbHkgY29tbWVudGVkIG91dCkgb3RoZXJzdWJycyAxOS0yNSwgMjcsIGFuZCAyOC4KKwkodDFfZGVjb2Rlcl9pbml0KTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzIGBmYWNlJyBhbmQgYGJ1aWxkY2hhcicuCisJKHQxX2RlY29kZXJfZG9uZSk6IFJlbGVhc2UgbmV3IGZpZWxkIGBidWlsZGNoYXInLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2J1aWxkY2hhciwgcGFyc2VfcHJpdmF0ZSk6IE5ldworCWZ1bmN0aW9ucy4KKwkodDFfa2V5d29yZHMpOiBSZWdpc3RlciB0aGVtLgorCSh0MV9hbGxvY2F0ZV9ibGVuZCk6IFVwZGF0ZWQuCisJKHQxX2xvYWRfa2V5d29yZCk6IEhhbmRsZSBmaWVsZCB0eXBlcyBUMV9GSUVMRF9MT0NBVElPTl9MT0FERVIsCisJVDFfRklFTERfTE9DQVRJT05fRkFDRSBhbmQgVDFfRklFTERfTE9DQVRJT05fQkxFTkQuCisJKHBhcnNlX2RpY3QpOiBSZW1vdmUgYGtleXdvcmRfZmxhZ3MnIGFyZ3VtZW50LgorCVVzZSBuZXcgbWFjcm8gSVNfUFNfVE9LRU4uCisJQ2hhbmdlZCBmdW5jdGlvbiBzbyB0aGF0IGxhdGVyIFBvc3RTY3JpcHQgZGVmaW5pdGlvbnMgb3ZlcnJpZGUKKwllYXJsaWVyIG9uZXMuCisJKHQxX2luaXRfbG9hZGVyKTogSW5pdGlhbGl6ZSBuZXcgZmllbGQgYGtleXdvcmRzX2VuY291bnRlcmVkJy4KKwkoVDFfT3Blbl9GYWNlKTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzIGBuZHZfaWR4JywgYGNkdl9pZHgnLCBhbmQKKwlgbGVuX2J1aWxkY2hhcicuCisJUmVtb3ZlIGBrZXl3b3Jkc19mbGFncycuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuaCAoVDFfTG9hZGVyUmVjdCk6IE5ldyBmaWVsZAorCWBrZXl3b3Jkc19lbmNvdW50ZXJlZCcuCisJKFQxX1BSSVZBVEUsIFQxX0ZPTlRESVJfQUZURVJfUFJJVkFURSk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy90eXBlMS90MXRva2Vucy5oIFshVDFfQ09ORklHX09QVElPTl9OT19NTV9TVVBQT1JUXTogTmV3CisJZW50cmllcyBmb3IgcGFyc2luZyAvTkRWLCAvQ0RWLCBhbmQgL0Rlc2lnblZlY3Rvci4KKworMjAwNi0wNy0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIG1hbnkgY2hlY2tzIHRvIHByb3RlY3QgYWdhaW5zdCBtYWxmb3JtZWQgUENGIGZpbGVzLgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9GYWNlX0RvbmUpOiBQcm90ZWN0IGFnYWluc3QgTlVMTCBwb2ludGVycy4KKwkoUENGX0ZhY2VfSW5pdCk6IEFkZCBjYWxscyB0byBQQ0ZfRmFjZV9Eb25lIGluIGNhc2Ugb2YgZXJyb3JzLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX3JlYWRfVE9DKTogUHJvdGVjdCBhZ2FpbnN0IG1hbGZvcm1lZCB0YWJsZQorCWRhdGEgYW5kIGNoZWNrIHRoYXQgdGFibGVzIGRvbid0IG92ZXJsYXAgKHVzaW5nIGEgc2ltcGxlCisJYnViYmxlc29ydCkuCisJKFBDRl9NRVRSSUNfU0laRSwgUENGX0NPTVBSRVNTRURfTUVUUklDX1NJWkUsIFBDRl9QUk9QRVJUWV9TSVpFKToKKwlOZXcgbWFjcm9zIHdoaWNoIGdpdmUgdGhlIHNpemUgb2YgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBkYXRhCisJc3RyZWFtLgorCShwY2ZfZ2V0X3Byb3BlcnRpZXMpOiBVc2Ugcm91Z2ggZXN0aW1hdGVzIHRvIGdldCBhcnJheSBzaXplIGxpbWl0cy4KKwlBc3NpZ24gYGZhY2UtPm5wcm9wcycgYW5kIGBmYWNlLT5wcm9wZXJ0aWVzJyBlYXJsaWVyIHNvIHRoYXQgYSBjYWxsCisJdG8gUENGX0ZhY2VfRG9uZSBjYW4gZG8gdGhlIGNsZWFuLXVwIGluIGNhc2Ugb2YgZXJyb3IuCisJUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgc3RyaW5nIG9mZnNldHMuCisJKHBjZl9nZXRfbWV0cmljcyk6IENsZWFuIHVwIGNvZGUuCisJQWRqdXN0IHRyYWNpbmcgbWVzc2FnZSBsZXZlbHMuCisJVXNlIHJvdWdoIGVzdGltYXRlIHRvIGdldCBhcnJheSBzaXplIGxpbWl0LgorCShwY2ZfZ2V0X2JpdG1hcHMpOiBDbGVhbiB1cCBjb2RlLgorCUFkanVzdCB0cmFjaW5nIG1lc3NhZ2UgbGV2ZWxzLgorCVVzZSByb3VnaCBlc3RpbWF0ZXMgdG8gZ2V0IG9mZnNldCBsaW1pdHMuCisJKHBjZl9nZXRfZW5jb2RpbmdzKTogQWRqdXN0IHRyYWNpbmcgbWVzc2FnZSBsZXZlbC4KKwkocGNmX2dldF9hY2NlbCk6IENsZWFuIHVwIGNvZGUuCisKKzIwMDYtMDYtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogSGFuZGxlIGZvbnRzIGNvcnJlY3RseSB3aGljaAorCWRvbid0IGhhdmUgYSBQT0lOVF9TSVpFIHByb3BlcnR5LiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzE2OTE0LgorCisyMDA2LTA2LTI2ICBKZW5zIENsYXVkaXVzICA8amVucy5jbGF1ZGl1c0B5YWhvby5jb20+CisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jIChUMV9PcGVyYXRvciwgdDFfYXJnc19jb3VudCk6IEFkZCBvcGNvZGUgMTUuCisJKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBPcGVyYXRvciB3aXRoCisJb3Bjb2RlIDE1IHBvcHMgaXRzIHR3byBhcmd1bWVudHMuCisJSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwb3BzIG9mIGFuIG90aGVyc3ViciBtYXkgYmUgcGFydCBvZiBhCisJc3Vicm91dGluZS4KKwlIYW5kbGUgdW5rbm93biBvdGhlcnN1YnJzIGdyYWNlZnVsbHk6IGNvdW50IHRoZWlyIG9wZXJhbmRzIGFuZCBsZXQKKwl0aGUgZm9sbG93aW5nIHBvcCBvcGVyYXRvcnMgcHVzaCB0aGUgb3BlcmFuZHMgYXMgdGhlIHJlc3VsdHMgb250bworCXRoZSBUeXBlMSBzdGFjay4KKwlJbXByb3ZlIGhhbmRsaW5nIG9mIHNldGN1cnJlbnRwb2ludCBvcGNvZGUuCisKKzIwMDYtMDYtMjUgIEplbnMgQ2xhdWRpdXMgIDxqZW5zLmNsYXVkaXVzQHlhaG9vLmNvbT4KKworCVRoZSBUeXBlIDEgcGFyc2VyIG5vdyBza2lwcyBvdmVyIHRvcC1sZXZlbCBwcm9jZWR1cmVzIGFzIHJlcXVpcmVkCisJZm9yIGEgYFNpbXBsaWZpZWQgUGFyc2VyJy4gIFRoaXMgbWFrZXMgdGhlIHBhcnNlciBtb3JlIHJvYnVzdCBhcyBpdAorCWRvZXNuJ3QgcG9rZSBhcm91bmQgaW4gUG9zdFNjcmlwdCBjb2RlLiAgQWRkaXRpb25hbGx5LCBpdCBtYWtlcyB0aGUKKwlGb250RGlyZWN0b3J5IGhhY2tlcnkgaW4gc3JjL3R5cGUxL3QxbG9hZC5jIHVubmVjZXNzYXJ5LgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKElTX09DVEFMX0RJR0lUKTogTmV3IG1hY3JvLgorCShza2lwX2xpdGVyYWxfc3RyaW5nKTogQWRkIEZUX0Vycm9yIGFzIHJldHVybiB2YWx1ZS4KKwlIYW5kbGUgZXNjYXBlcyBiZXR0ZXIuCisJKHNraXBfc3RyaW5nKTogQWRkIEZUX0Vycm9yIGFzIHJldHVybiB2YWx1ZS4KKwlEb24ndCBzZXQgYHBhcnNlci0+ZXJyb3InIGJ1dCByZXR1cm4gZXJyb3IgY29kZSBkaXJlY3RseS4KKwkoc2tpcF9wcm9jZWR1cmUpOiBOZXcgZnVuY3Rpb24uCisJKHBzX3BhcnNlcl9za2lwX1BTX3Rva2VuKTogSGFuZGxlIHByb2NlZHVyZXMuCisJVXBkYXRlIGNvZGUuCisJKHBzX3BhcnNlcl90b190b2tlbik6IFVwZGF0ZSBjb2RlLgorCShwc19wYXJzZXJfbG9hZF9maWVsZF90YWJsZSk6IEhhbmRsZSBiYm94IGVudHJpZXMgYWxzby4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9kaWN0KTogUmVtb3ZlIEZvbnREaXJlY3RvcnkgaGFja2VyeS4KKwlBZGQgY29tbWVudGVkLW91dCBjb2RlIGZvciBzeW50aGV0aWMgZm9udHMuCisKKzIwMDYtMDYtMjQgIEV1Z2VuaXkgTWVzaGNoZXJ5YWtvdiAgPGV1Z2VuQHVuaXYua2lldi51YT4KKworCUZpeCB0d28gaGludGluZyBidWdzIGFzIHJlcG9ydGVkIGluCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDYtMDYvbXNnMDAwNTcuaHRtbC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0dseXBoWm9uZVJlYyk6IEFkZAorCWBmaXJzdF9wb2ludCcgbWVtYmVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9wcmVwYXJlX3pvbmUpOiBJbml0aWFsaXplCisJYGZpcnN0X3BvaW50Jy4KKwkoVFRfUHJvY2Vzc19Db21wb3NpdGVfR2x5cGgpOiBBbHdheXMgdW50b3VjaCBwb2ludHMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0hDKTogRml4IGNvbXB1dGF0aW9uIG9mCisJYGZpcnN0X3BvaW50JyBhbmQgYGxhc3RfcG9pbnQnIGluIGNhc2Ugb2YgY29tcG9zaXRlIGdseXBocy4KKwkoSW5zX0lVUCk6IEZpeCBjb21wdXRhdGlvbiBvZiBgZW5kX3BvaW50Jy4KKworMjAwNi0wNi0yMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUluc2VydCBFbmRpYW5TMTZfQnRvTiBhbmQgRW5kaWFuUzMyX0J0b04gYXMgd29ya2Fyb3VuZCBmb3IgSW50ZWwKKwlNYWMuICBUaGUgb3JpZ2luYWwgcGF0Y2ggd2FzIHdyaXR0ZW4gYnkgRGF2aWQgU2FjaGl0YW5vIGFuZCBMYXdyZW5jZQorCUNvb3BldCwgYW5kIG1vZGlmaWVkIGJ5IFNlYW4gTWNCcmlkZSBmb3IgTVBXIGNvbXBhdGliaWxpdHkuICBPbmx5CisJcmVxdWlyZWQgZGF0YSBhcmUgY29udmVydGVkOyB1bnVzZWQgZGF0YSBhcmUgbGVmdCBpbiBiaWcgZW5kaWFuLgorCisJKiBzcmMvYmFzZS9mdG1hYy5jOiBJbmNsdWRlIDxFbmRpYW4uaD4gZm9yIGJ5dGVvcmRlciBtYWNyb3MgZm9yIG5vbgorCU1hYyBPUyBYIHBsYXRmb3Jtcy4KKwkoT1NfSU5MSU5FKTogVW5kZWZpbmUgYmVmb3JlIGRlZmluaXRpb24uCisJKGNvdW50X2ZhY2VzX3NmbnQpOiBJbnNlcnQgRW5kaWFuUzE2X0J0b04gdG8gcGFyc2UgdGhlIGhlYWRlciBvZgorCUZvbnRBc3NvY2lhdGlvbiB0YWJsZSBpbiBGT05EIHJlc291cmNlLgorCShjb3VudF9mYWNlc19zY2FsYWJsZSk6IEluc2VydCBFbmRpYW5TMTZfQnRvTiB0byBwYXJzZSB0aGUgaGVhZGVyCisJYW5kIGZvbnRTaXplIGF0IGVhY2ggZW50cnkgb2YgRm9udEFzc29jaWF0aW9uIHRhYmxlIGluIEZPTkQKKwlyZXNvdXJjZS4KKwkocGFyc2VfZm9uZCk6IEluc2VydCBFbmRpYW5TMTZfQnRvTiBhbmQgRW5kaWFuUzMyX0J0b04gdG8gcGFyc2UKKwlmZlN0eWxPZmYgb2YgRmFtaWx5UmVjb3JkIGhlYWRlciBvZiBGT05EIHJlc291cmNlLCB0aGUgaGVhZGVyLAorCWZvbnRTaXplLCBmb250SUQgYXQgZWFjaCBlbnRyeSBvZiBGb250QXNzb2NpYXRpb24gdGFibGUsIGFuZAorCVN0eWxlTWFwcGluZyB0YWJsZS4KKwkoY291bnRfZmFjZXMpOiBDYWxsIGBIVW5sb2NrJyBhZnRlciBhbGwgRk9ORCB1dGlsaXphdGlvbi4KKworMjAwNi0wNi0wOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVB1YmxpYyBBUEkgb2YgVHJ1ZVR5cGVHWCwgT3BlblR5cGUsIGFuZCBjbGFzc2ljIGtlcm4gdGFibGUgdmFsaWRhdG9yCisJc2hvdWxkIHJldHVybiBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgdmFsaWRhdGlvbiBzZXJ2aWNlCisJaXMgdW5hdmFpbGFibGUgKGRpc2FibGVkIGluIGBtb2R1bGVzLmNmZycpLiAgSXQgaXMgb3JpZ2luYWxseQorCXN1Z2dlc3RlZCBieSBEYXZpZCBUdXJuZXIsIGNmLgorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA1LTExL21zZzAwMDc4Lmh0bWwKKworCSogc3JjL2Jhc2UvZnRneHZhbC5jIChGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlKTogUmV0dXJuCisJRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZSBpZiBUcnVlVHlwZUdYIHZhbGlkYXRpb24gc2VydmljZSBpcworCXVuYXZhaWxhYmxlLgorCShGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSk6IFJldHVybiBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlIGlmCisJY2xhc3NpYyBrZXJuIHRhYmxlIHZhbGlkYXRpb24gc2VydmljZSBpcyB1bmF2YWlsYWJsZS4KKworCSogc3JjL2Jhc2UvZnRvdHZhbC5jIChGVF9PcGVuVHlwZV9WYWxpZGF0ZSk6IFJldHVybgorCUZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUgaWYgT3BlblR5cGUgdmFsaWRhdGlvbiBzZXJ2aWNlIGlzCisJdW5hdmFpbGFibGUuCisKKzIwMDYtMDYtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoYmRmX2xvYWRfZm9udCk6IEZpeCBtZW1vcnkgbGVha3MgaW4gY2FzZSBvZgorCWVycm9ycy4KKworMjAwNi0wNi0wNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFhZm0uYyAoS0VSTl9JTkRFWCk6IE1ha2UgaXQgbW9yZSByb2J1c3QuCisJKFQxX1JlYWRfTWV0cmljcyk6IEZpeCBtZW1vcnkgbGVhayB3aGljaCBoYXBwZW5lZCB3aGVuIHRoZSBtZXRyaWNzCisJZmlsZSBkb2Vzbid0IGhhdmUga2VybmluZyBwYWlycy4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMxNjc2OC4KKworMjAwNi0wNi0wNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJRml4IG1lbW9yeSBsZWFrIGRlc2NyaWJlZCBpbiBTYXZhbm5haCBidWcgIzE2NzU5LgorCisJV2UgY2hhbmdlIGBwc191bmljb2Rlc19pbml0JyBzbyB0aGF0IGl0IGFsc28gdGFrZXMgYQorCWBmcmVlX2dseXBoX25hbWUnIGNhbGxiYWNrIHRvIHJlbGVhc2UgdGhlIGdseXBoIG5hbWVzIHJldHVybmVkIGJ5CisJYGdldF9nbHlwaF9uYW1lJworCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmggKFBTX0dseXBoX05hbWVGdW5jKToKKwlSZW5hbWVkIHRvIC4uLgorCShQU19HZXRHbHlwaE5hbWVGdW5jKTogVGhpcy4KKwkoUFNfRnJlZUdseXBoTmFtZUZ1bmMpOiBOZXcgdHlwZWRlZi4KKwkoUFNfVW5pY29kZXNfSW5pdEZ1bmMpOiBBZGQgdmFyaWFibGUgZm9yIFBTX0ZyZWVHbHlwaE5hbWVGdW5jLgorCisJKiBzcmMvY2ZmL2NmZmNtYXAuYyAoY2ZmX3NpZF90b19nbHlwaF9uYW1lKTogVXNlIGBUVF9GYWNlJyBmb3IgZmlyc3QKKwlhcmd1bWVudC4KKwkoY2ZmX3NpZF9mcmVlX2dseXBoX25hbWUpOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9jbWFwX3VuaWNvZGVfaW5pdCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9wc2F1eC90MWNtYXAuYyAodDFfY21hcF91bmljb2RlX2luaXQpOiBVcGRhdGVkLgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc191bmljb2Rlc19pbml0KTogQWRkIHZhcmlhYmxlIGZvcgorCVBTX0ZyZWVHbHlwaE5hbWVGdW5jIGFuZCB1c2UgaXQuCisKKworMjAwNi0wNi0wNCAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYyAoZnRfbWVtX3FyZWFsbG9jKTogRml4IHRoZSBmdW5jdGlvbiB0byBhY2NlcHQKKwlgaXRlbV9zaXplID09IDAnIGFzIHdlbGwgLS0gdGhvdWdoIHRoaXMgc291bmRzIHdlaXJkLCBpdCBjYW4KKwl0aGVvcmV0aWNhbGx5IGhhcHBlbi4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMxNjY2OS4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBGaXggdGhlIGNvbXB1dGF0aW9uCisJb2YgYGZhY2UtPm51bV9nbHlwaHMnIHdoaWNoIG1pc3NlZCB0aGUgbGFzdCBnbHlwaCwgZHVlIHRvCisJdGhlIG9mZnNldC1ieS0xIGNvbXB1dGF0aW9uLCBzaW5jZSB0aGUgUEZSIGZvcm1hdCBkb2Vzbid0CisJZ3VhcmFudGVlIHRoYXQgZ2x5cGggaW5kZXggMCBjb3JyZXNwb25kcyB0byB0aGUgYG1pc3NpbmcKKwlnbHlwaC4gIFRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMxNjY2OC4KKworMjAwNi0wNS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluIChMSU5LX0xJQlJBUlkpOiBEb24ndCBjb21tZW50IG91dAorCWAtbm8tdW5kZWZpbmVkJy4gIFJlcG9ydGVkIGJ5IENocmlzdGlhbiBCaWVzaW5nZXIuCisKKzIwMDYtMDUtMTkgIEJyaWFuIFdlZWQgIDxid0BpbWFnaW5lbmdpbmUuY29tPgorCisJKiBidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3A6IFJlbGVhc2UgbGlicmFyaWVzIG5vIGxvbmdlcgorCWhhdmUgZGVidWcgaW5mb3JtYXRpb24sIGFuZCBkZWJ1ZyBsaWJyYXJpZXMgdXNlIGBDNyBjb21wYXRpYmxlJworCWRlYnVnIGluZm8uCisKKzIwMDYtMDUtMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlBcHBseSBwYXRjaCBieSBEZXJlayBDbGVnZyB0byBmaXggdHdvIG1lbW9yeSBsZWFrcyBpbiB0aGUgTWFjT1MKKwlyZXNvdXJjZSBmb3JrIGhhbmRsZXIuICBUaGlzIGZpeGVzIFNhdmFubmFoIGJ1ZyAjMTY2MzEuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChsb2FkX2ZhY2VfaW5fZW1iZWRkZWRfcmZvcmspOiBSZXBsYWNlCisJYEZUX1N0cmVhbV9DbG9zZScgYnkgYEZUX1N0cmVhbV9GcmVlJyB0byBmaXggbWVtb3J5IGxlYWsuCisKKwkqIHNyYy9iYXNlL2Z0cmZyay5jIChyYWNjZXNzX2d1ZXNzX2xpbnV4X2RvdWJsZV9mcm9tX2ZpbGVfbmFtZSk6CisJUmVwbGFjZSBgRlRfU3RyZWFtX0Nsb3NlJyBieSBgRlRfU3RyZWFtX0ZyZWUnIHRvIGZpeCBtZW1vcnkgbGVhay4KKworMjAwNi0wNS0xOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCSogYnVpbGQvdW5peC9jb25maWd1cmUucmF3OiBBZGQgYSBmYWxsYmFjayB0byBkaXNhYmxlIENhcmJvbgorCWRlcGVuZGVuY3ksIGlmIGNvbmZpZ3VyZWQgd2l0aCBubyBvcHRpb25zIG9uIE1hYyBPUyBYLgorCisyMDA2LTA1LTE5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBzcmMvYmFzZS9mdG1hYy5jIChvcGVuX2ZhY2VfZnJvbV9idWZmZXIpOiBEZWFsbG9jYXRlIHN0cmVhbSB3aGVuCisJaXRzIGNvbnRlbnQgY2Fubm90IGJlIHBhcnNlZCBhcyBzdXBwb3J0ZWQgZm9udC4gIFRoaXMgZml4ZXMKKwl0aGUgc2Vjb25kIHBhcnQgb2YgU2F2YW5uYWggYnVnICMxNjU5MC4KKworMjAwNi0wNS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0NvbXBvc2l0ZV9HbHlwaCkKKwlbRlRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUl06IE1ha2UgaXQgY29tcGlsYWJsZSBhZ2Fpbi4KKworMjAwNi0wNS0xNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgorCisJVGhpcyBpcyBhIG1ham9yIHBhdGNoIHVzZWQgdG8gZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YKKwlsb2FkaW5nIGdseXBocy4gIFRoaXMgYm90aCBzcGVlZHMgdXAgbG9hZGluZyB0aGUgZ2x5cGggdmVjdG9ycworCXRoZW1zZWx2ZXMgYW5kIHRoZSBhdXRvLWZpdHRlciBtb2R1bGUuCisKKwlXZSBub3cgdXNlIGlubGluZSBhc3NlbWJsZXIgY29kZSB3aXRoIEdDQyB0byBpbXBsZW1lbnQgYEZUX011bEZpeCcsCisJd2hpY2ggaXMgcHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlCisJZW5naW5lJ3MgcGVyZm9ybWFuY2UuCisKKwlUaGUgcmVzdWx0aW5nIHNwZWVkLXVwIGlzIGFib3V0IDI1JS4KKworCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfTG9hZGVyUmVjKTogQWRkIGZpZWxkcworCWBjdXJzb3InIGFuZCBgbGltaXQnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jIChhZl9jb3JuZXJfaXNfZmxhdCwgYWZfY29ybmVyX29yaWVudGF0aW9uKToKKwlOZXcgZnVuY3Rpb25zLgorCShBRl9BVEFOX0JJVFMsIGFmX2FyY3RhbiwgYWZfYW5nbGVfYXRhbik6IENvbW1lbnQgb3V0LgorCVtURVNUXTogUmVtb3ZlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChBRl9TY3JpcHRfVW5pUmFuZ2VSZWMpOiBDb21tZW50IG91dCB0ZXN0CisJY29kZS4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9heGlzX2hpbnRzX25ld19zZWdtZW50KTogRG9uJ3QgY2FsbAorCWBGVF9aRVJPJworCShhZl9kaXJlY3Rpb25fY29tcHV0ZSwgYWZfZ2x5cGhfaGludHNfY29tcHV0ZV9pbmZsZWN0aW9ucyk6IFJld3JpdHRlbi4KKwkoYWZfZ2x5cGhfaGludHNfcmVsb2FkOiBSZXdyaXRlIHJlY29nbml0aW9uIG9mIHdlYWsgcG9pbnRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpOiBNb3ZlCisJY29uc3RhbnQgdmFsdWVzIG91dCBvZiB0aGUgbG9vcHMuCisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaDogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bEZpeCk6IFVzZSBpbmxpbmUgYXNzZW1ibGVyIGNvZGUuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBVc2UgdmVjdG9yCisJcHJvZHVjdCB0byBnZXQgb3JpZW50YXRpb24uCisKKwkqIHNyYy9nemlwL2Z0Z3ppcC5jIChmdF9nZXRfdW5jb21wcmVzc2VkX3NpemUpOiBOZXcgZnVuY3Rpb24uCisJKEZUX1N0cmVhbV9PcGVuR3ppcCk6IFVzZSBpdCB0byBoYW5kbGUgc21hbGwgZmlsZXMgZGlyZWN0bHkgaW4KKwltZW1vcnkuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9BU0NJSUhleERlY29kZSwgUFNfQ29udkVleGVjRGVjb2RlKToKKwlJbXByb3ZlIHBlcmZvcm1hbmNlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9BY2Nlc3NfR2x5cGhfRnJhbWUpOiBTZXQgYGN1cnNvcicgYW5kCisJYGxpbWl0Jy4KKworCShUVF9Mb2FkX0dseXBoX0hlYWRlciwgVFRfTG9hZF9TaW1wbGVfR2x5cGgsCisJVFRfTG9hZF9Db21wb3NpdGVfR2x5cGgpOiBVcGRhdGVkLiAgQWRkIHRocmVzaG9sZCB0byBwcm90ZWN0IGFnYWluc3QKKwlleGNlZWRpbmdseSBsYXJnZSB2YWx1ZXMgb2YgbnVtYmVyIG9mIGNvbnRvdXJzLiAgU3BlZWQgdXAgYnkKKwlyZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGxvb3BzLgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9Mb2FkX0dseXBoKTogRG9uJ3QgYXBwbHkgdW5pdCBtYXRyaXguCisKKworCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoRlRDX0NNYXBDYWNoZV9Mb29rdXApOiBDaGFuZ2UgdGhlIHRocmVzaG9sZAorCXVzZWQgdG8gZGV0ZWN0IHJvZ3VlIGNsaWVudHMgZnJvbSA0IHRvIDE2LiAgVGhpcyBpcyB0byBwcmV2ZW50IHNvbWUKKwlzZWdtZW50YXRpb24gZmF1bHRzIHdpdGggZm9udHMgbGlrZSBgS296TWluUHJvVkktUmVndWxhci5vdGYnIHdoaWNoCisJY29tZXMgZnJvbSB0aGUgSmFwYW5lc2UgQWRvYmUgUmVhZGVyIEFzaWFuIEZvbnQgcGFjay4KKworMjAwNy0wNS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfZG9uZSk6IERlYWxsb2NhdGUgc3ViZm9udCBhcnJheS4gIFRoaXMKKwlmaXhlcyB0aGUgZmlyc3QgcGFydCBvZiBTYXZhbm5haCBidWcgIzE2NTkwLgorCisyMDA2LTA1LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvUFJPQkxFTVM6IFVwZGF0ZWQgaWNsIGlzc3Vlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCitMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQoraW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKK2Z1bGx5LgorCisKK0xvY2FsIFZhcmlhYmxlczoKK3ZlcnNpb24tY29udHJvbDogbmV2ZXIKK2NvZGluZzogdXRmLTgKK0VuZDoKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9DaGFuZ2VMb2cuMjQgYi9mcmVldHlwZS0yLjYvQ2hhbmdlTG9nLjI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjExOWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvQ2hhbmdlTG9nLjI0CkBAIC0wLDAgKzEsNjM2MCBAQAorMjAxMy0wNS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC4xMiByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTEyJy4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjQuMTIuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwKKwlidWlsZHMvd2luMzIvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMDgvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLCBidWlsZHMvd2luMzIvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLCBidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjQuMTEvMi40LjEyLywgcy8yNDExLzI0MTIvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDEyLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTY6MToxMC4KKworMjAxMy0wNS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTMtMDUtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSk6IFR5cG8uCisKKzIwMTMtMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVN5bmNocm9uaXplIGBmdGNvbmZpZy5oJy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IFVwZGF0ZWQuCisKKzIwMTMtMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxhdGlvbiB3aXRoIEMrKy4KKworCSogc3JjL2Jhc2UvbWQ1LmMgKGJvZHkpOiBVc2UgcHJvcGVyIGNhc3QuCisKKzIwMTMtMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCA2NGJpdCBjb21waWxhdGlvbiBpc3N1ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggW0ZUX0xPTkc2NF06IFR5cGVkZWYKKwlgRlRfSW50NjQnIGhlcmUuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jOiBSZW1vdmUgdHlwZWRlZiBvZiBgRlRfSW50NjQnLgorCShGVF9EaXZGaXgpOiBGaXggY2FzdC4KKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmM6IFJlbW92ZSB0eXBlZGVmIG9mIGBGVF9JbnQ2NCcuCisKKzIwMTMtMDUtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIEZpeCBjbGFuZyBpc3N1ZXMuCisKKwlGaXggc3VnZ2VzdGVkIGJ5IDxvY3RvcGxvaWRAeWFuZGV4LmNvbT4uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVUxvbmcpOiBOZXcgdHlwZWRlZi4KKwkoU0NBTEVEKTogQWRkIHByb3BlciBjYXN0LgorCisyMDEzLTA1LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggY2xhbmcgZml4ZXMuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKGZ0X3RyaWdfcHJlbm9ybSwgRlRfVmVjdG9yX1JvdGF0ZSk6IFVzZQorCWNvcnJlY3QgdHlwZXMuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGRlZmF1bHQ+OiBGb3JjZQorCXVuc2lnbmVkIGZvciBjb21wdXRhdGlvbnMuCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogRGl0dG8uCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9pbnRlZ2VyKTogRGl0dG8uCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogRGl0dG8uCisKKzIwMTMtMDUtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIE1ha2UgQWRvYmUgQ0ZGIGVuZ2luZSB3b3JrIGNvcnJlY3RseSBvbiA2NGJpdCBob3N0cy4KKworCVJlcG9ydGVkIGJ5IG51bWVyb3VzIHBlb3BsZSBvbiB0aGUgYGZyZWV0eXBlLWRldmVsJyBsaXN0LiAgV2l0aG91dAorCXRoaXMgZml4LCBnbHlwaHMgYXJlbid0IHByb3Blcmx5IGFsaWduZWQgb24gYSBjb21tb24gYmFzZWxpbmUuCisKKwlPbiA2NGJpdCBzeXN0ZW1zLCBgRlRfUG9zJyBleHBhbmRzIHRvIGBsb25nIGludCcsIGhhdmluZyBhIHdpZHRoIG9mCisJNjRiaXQuICBgQ0YyX0ZpeGVkJyBleHBhbmRzIHRvIGBpbnQnIHdoaWNoIGlzIG5vcm1hbGx5IDMyYml0IHdpZGUgb24KKwk2NGJpdCBob3N0cyBhbHNvLiAgV3JvbmcgY2FzdHMgZmlsbGVkIHVwIHRoZSBibHVlcyBhcnJheXMgd2l0aAorCWluY29ycmVjdCB2YWx1ZXMuICBOb3RlIHRoYXQgYWxsIGJsdWVzIHZhbHVlcyBhcmUgYWNjZXNzZWQgd2l0aCB0aGUKKwlgY2YyX2JsdWVUb0ZpeGVkJyBtYWNybyB3aGljaCBoYW5kbGVzIHRoZSA2NGJpdCB0byAzMmJpdCBjb252ZXJzaW9uLgorCisJKiBzcmMvY2ZmL2NmMmZ0LmggKGNmMl9nZXRCbHVlVmFsdWVzLCBjZjJfZ2V0T3RoZXJCbHVlcywKKwljZjJfZ2V0RmFtaWx5Qmx1ZXMsIGNmMl9nZXRGYW1pbHlPdGhlckJsdWVzKTogVXNlIGBGVF9Qb3MnIGZvcgorCWBkYXRhJywgbm90IGBDRjJfRml4ZWQnLgorCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZ2V0Qmx1ZVZhbHVlcywgY2YyX2dldE90aGVyQmx1ZXMsCisJY2YyX2dldEZhbWlseUJsdWVzLCBjZjJfZ2V0RmFtaWx5T3RoZXJCbHVlcyk6IFVwZGF0ZWQuCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19pbml0KTogVXBkYXRlZC4KKworMjAxMy0wNS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTW9yZSBmaXhlcyBmb3IgY2xhbmcncyBgc2FuaXRpemUnIGZlYXR1cmUuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXZGaXgpOiBVc2UgdW5zaWduZWQgdmFsdWVzIGZvcgorCWNvbXB1dGF0aW9ucyB3aGljaCB1c2UgdGhlIGxlZnQgc2hpZnQgb3BlcmF0b3IgYW5kIGNvbnZlcnQgdG8gc2lnbmVkCisJYXMgdGhlIGxhc3Qgc3RlcC4KKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKGZ0X3RyaWdfcHJlbm9ybSwgRlRfVmVjdG9yX1JvdGF0ZSwKKwlGVF9WZWN0b3JfTGVuZ3RoLCBGVF9WZWN0b3JfUG9sYXJpemUpOiBEaXR0by4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFNpbXBsaWZ5LgorCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBGaXggY29uc3RhbnQuCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9pbnRlZ2VyLCBjZmZfcGFyc2VfcmVhbCwgZG9fZml4ZWQsCisJY2ZmX3BhcnNlX2ZpeGVkX2R5bmFtaWMpOiBVc2UgdW5zaWduZWQgdmFsdWVzIGZvciBjb21wdXRhdGlvbnMgd2hpY2gKKwl1c2UgdGhlIGxlZnQgc2hpZnQgb3BlcmF0b3IgYW5kIGNvbnZlcnQgdG8gc2lnbmVkIGFzIHRoZSBsYXN0IHN0ZXAuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfZ2V0X29mZnNldCk6IERpdHRvLgorCisJKiBzcmMvcHNhdXgvcHNjb252LmMgKFBTX0NvbnZfVG9GaXhlZCk6IERpdHRvLgorCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBEaXR0by4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX011bEZpeDE0LCBUVF9Eb3RGaXgxNCk6IERpdHRvLgorCisyMDEzLTA1LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggZXJyb3JzIHJlcG9ydGVkIGJ5IGNsYW5nJ3MgYHNhbml0aXplJyBmZWF0dXJlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg6IFNpbXBsaWZ5IGFuZCBmaXggaW50ZWdlcgorCWV4dHJhY3Rpb24gbWFjcm9zLgorCShGVF9JTlQ4XywgRlRfQllURV9JMTYsIEZUX0JZVEVfSTMyLCBGVF9JTlQ4X0kxNiwgRlRfSU5UOF9JMzIsCisJRlRfSU5UOF9JMzIsIEZUX0lOVDhfVTMyKTogUmVtb3ZlZC4KKwkoRlRfUEVFS19TSE9SVCwgRlRfUEVFS19MT05HLCBGVF9QRUVLX09GRjMsIEZUX1BFRUtfU0hPUlRfTEUsCisJRlRfUEVFS19MT05HX0xFLCBGVF9QRUVLX09GRjNfTEUpOiBVc2UgdW5zaWduZWQgdmFsdWVzIGZvcgorCWNvbXB1dGF0aW9ucyBhbmQgY29udmVydCB0byBzaWduZWQgYXMgdGhlIGxhc3Qgc3RlcC4KKworCSogc3JjL2NmZi9jZjJmaXhlZC5oIChjZjJfaW50VG9GaXhlZCwgY2YyX2ZpeGVkVG9JbnQsCisJY2YyX2ZyYWNUb0ZpeGVkKTogQXZvaWQgc2hpZnRzIG9mIG5lZ2F0aXZlIHZhbHVlcy4KKwkoY2YyX2ludFRvRnJhYywgY2YyX2ZpeGVkVG9GcmFjLCBjZjJfZml4ZWRUbzI2RG90Nik6IFJlbW92ZWQsCisJdW51c2VkLgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjZjJfY21kRVhURU5ERUROTUJSLAorCWRlZmF1bHQ+OiBVc2UgdW5zaWduZWQgdmFsdWVzIGZvciBjb21wdXRhdGlvbnMgYW5kIGNvbnZlcnQgdG8gc2lnbmVkCisJYXMgdGhlIGxhc3Qgc3RlcC4KKwlVc2UgcHJvcGVyIHR5cGVzIGluIHRyYWNpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBVc2UgdW5zaWduZWQKKwl2YWx1ZXMgZm9yIGNvbXB1dGF0aW9uIG9mIG9wZXJhbmRzIGFuZCBjb252ZXJ0IHRvIHNpZ25lZCBhcyB0aGUgbGFzdAorCXN0ZXAuCisJVXNlIHByb3BlciB0eXBlIGluIHRyYWNpbmcgbWVzc2FnZS4KKworMjAxMy0wNS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmM6IFJlbW92ZSBkZWFkIGNvZGUuCisKKzIwMTMtMDUtMDIgIENocmlzIExpZGRlbGwgIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmM6IEluY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ILgorCisyMDEzLTA0LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKwkqIFJFQURNRTogSW1wcm92ZWQuCisKKzIwMTMtMDQtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEFkZCBhIG5ldyBUeXBlIDIgaW50ZXJwcmV0ZXIgYW5kIGhpbnRlci4KKworCVRoaXMgd29yaywgd3JpdHRlbiBieSBEYXZlIEFybm9sZCA8ZGFybm9sZEBhZG9iZS5jb20+IGFuZCBmdWxseQorCWludGVncmF0ZWQgaW50byBGcmVlVHlwZSBieSBtZSwgaXMgYSBkb25hdGlvbiBieSBBZG9iZSBpbgorCWNvbGxhYm9yYXRpb24gd2l0aCBHb29nbGUuICBJdCBpcyB2YXN0bHkgc3VwZXJpb3IgdG8gdGhlIG9sZCBDRkYKKwllbmdpbmUsIGFuZCBpdCB3aWxsIHJlcGxhY2UgaXQgc29vbi4gIFJpZ2h0IG5vdywgaXQgaXMgc3RpbGwgb2ZmIGJ5CisJZGVmYXVsdCwgYW5kIHlvdSBoYXZlIHRvIGV4cGxpY2l0bHkgc2VsZWN0IGl0IHVzaW5nIHRoZSBuZXcKKwlgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mIHRoZSBjZmYgZHJpdmVyLgorCisJRm9yIGNvbnZlbmllbmNlLCAobW9zdCBvZikgdGhlIG5ldyBmaWxlcyBhcmUgY29tbWl0dGVkIHNlcGFyYXRlbHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0NGRl9EUklWRVJfSCk6IE5ldyBtYWNyby4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaDogTmV3IGZpbGUgdG8gYWNjZXNzIENGRiBkcml2ZXIKKwlwcm9wZXJ0aWVzLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oIChGVF9FcnJfR2x5cGhfVG9vX0JpZyk6IE5ldyBlcnJvcgorCWNvZGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIGBjZjJibHVlcycsIGBjZjJoaW50cycsCisJYW5kIGBjZjJpbnRlcnAnLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmggKENGRl9TdWJGb250KTogTmV3IG1lbWJlciBgY3VycmVudF9zdWJmb250Jy4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oIChDRkZfRHJpdmVyUmVjKTogTmV3IG1lbWJlcnMgYGhpbnRpbmdfZW5naW5lJworCWFuZCBgbm9fc3RlbV9kYXJrZW5pbmcnLgorCSogc3JjL2NmZi9jZmZ0eXBlcy5oIChDRkZfRm9udFJlYyk6IE5ldyBtZW1iZXIgYGNmMl9pbnN0YW5jZScuCisKKwkqIHNyYy9jZmYvY2ZmLmM6IEluY2x1ZGUgbmV3IGZpbGVzLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHJvcGVydHlfc2V0LCBjZmZfcHJvcGVydHlfZ2V0KTogSGFuZGxlCisJYGhpbnRpbmctZW5naW5lJyBhbmQgYG5vLXN0ZW0tZGFya2VuaW5nJyBwcm9wZXJ0aWVzIChvbmx5IHRoZSBBZG9iZQorCWVuZ2luZSBsaXN0ZW5zIHRvIHRoZW0pLgorCSogc3JjL2NmZi9jZmZnbG9hZC5jOiBJbmNsdWRlIGBjZjJmdC5oJy4KKwkoY2ZmX2RlY29kZXJfcHJlcGFyZSk6IEluaXRpYWxpemUgYGN1cnJlbnRfc3ViZm9udCcuCisJKGNmZl9idWlsZF9hZGRfcG9pbnQpOiBIYW5kbGUgQWRvYmUgZW5naW5lIHdoaWNoIHVzZXMgMTYuMTYKKwljb29yZGluYXRlcy4KKwkoY2ZmX3Nsb3RfbG9hZCk6IEhhbmRsZSBGVF9MT0FEX05PX1NDQUxFIGFuZCBGVF9MT0FEX05PX0hJTlRJTkcKKwlzZXBhcmF0ZWx5LgorCUNob29zZSByZW5kZXJpbmcgZW5naW5lIGJhc2VkIG9uIGBoaW50aW5nX2VuZ2luZScgcHJvcGVydHkuCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfZG9uZSk6IENhbGwgZmluYWxpemVyIG9mIHRoZSBBZG9iZQorCWVuZ2luZS4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jOiBJbmNsdWRlIEZUX0NGRl9EUklWRVJfSC4KKwkoY2ZmX2RyaXZlcl9pbml0KTogU2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzLgorCisJKiBzcmMvY2ZmL3J1bGVzLm1rIChDRkZfRFJWX1NSQywgQ0ZGX0RSVl9IKTogQWRkIG5ldyBmaWxlcy4KKworCSogc3JjL2NmZi9jZjIqLio6IE5ldyBmaWxlcywgY29udGFpbmluZyB0aGUgQWRvYmUgZW5naW5lLgorCisyMDEzLTA0LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBNaW5vciBjb2RlIGFkbWluaXN0cmF0aW9uIGlzc3Vlcy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjaGVja19wb2ludHMpOiBSZW5hbWUgdG8uLi4KKwkoY2ZmX2NoZWNrX3BvaW50cyk6IC4uLnRoaXMgYW5kIG1ha2UgaXQgRlRfTE9DQUwuCisJKGNmZl9idWlsZGVyX2FkZF9wb2ludCwgY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSwKKwljZmZfYnVpbGRlcl9zdGFydF9wb2ludCwgY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciwKKwljZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlLCBjZmZfZ2V0X2dseXBoX2RhdGEsCisJY2ZmX2ZyZWVfZ2x5cGhfZGF0YSk6IE1ha2UgdGhlbSBGVF9MT0NBTC4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5oOiBVcGRhdGVkLgorCisyMDEzLTA0LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgb3V0cHV0IGJpdG1hcCBjaGVja3N1bXMuCisKKwlVc2UgYEZUMl9ERUJVRz1iaXRtYXA6MycgZm9yIHRyYWNpbmcuCisKKwkqIHNyYy9iYXNlL21kNS5jLCBzcmMvYmFzZS9tZDUuaDogTmV3IGZpbGVzLCB0YWtlbiBmcm9tCisKKwkgIGh0dHA6Ly9vcGVud2FsbC5pbmZvL3dpa2kvcGVvcGxlL3NvbGFyL3NvZnR3YXJlL3B1YmxpYy1kb21haW4tc291cmNlLWNvZGUvbWQ1CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYGJpdG1hcCcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIFtGVF9ERUJVR19MRVZFTF9UUkFDRV06IEluY2x1ZGUgYG1kNS5jJworCisJKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCkgW0ZUX0RFQlVHX0xFVkVMX1RSQUNFXTogRm9yIHRyYWNpbmcsCisJY29udmVydCByZXN1bHRpbmcgYml0bWFwIHRvIGEgdW5pZm9ybSBmb3JtYXQgYW5kIGNvbXB1dGUgYSBjaGVja3N1bS4KKwlVc2UgYGJpdG1hcCcgY2F0ZWdvcnkgZm9yIHRoZSB0cmFjaW5nIG1lc3NhZ2UuCisKKwkqIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX0gpOiBVcGRhdGVkLgorCisJKiBkb2NzL0xJQ0VOU0UuVFhUOiBVcGRhdGVkLgorCisyMDEzLTA0LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBBZGQgZnJhbWV3b3JrIGZvciBDRkYgcHJvcGVydGllcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNyk6CisJTmV3IG1hY3JvLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0guCisJKGNmZl9wcm9wZXJ0eV9zZXQsIGNmZl9wcm9wZXJ0eV9nZXQpOiBOZXcgZnVuY3Rpb25zLCBzdGlsbCBlbXB0eS4KKwlEZWZpbmUgYGNmZl9zZXJ2aWNlX3Byb3BlcnRpZXMnIHNlcnZpY2UuCisJVXBkYXRlIGBjZmZfc2VydmljZXMnLgorCisJKiBzcmMvY2ZmL2NmZnBpYy5oOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ILgorCShDRkZfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCk6IE5ldyBtYWNyby4KKwkoQ2ZmTW9kdWxlUElDKTogQWRkIGBjZmZfc2VydmljZV9wcm9wZXJ0aWVzJy4KKworMjAxMy0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzg1ODkuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcmVhZHN0cmVhbSk6IFRoaW5rby4KKworMjAxMy0wMy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IFVzZSBlZ3JlcCwgbm90IGdyZXAuCisKKwlQcm9ibGVtIHJlcG9ydGVkIE1vamNhIE1pa2xhdmVjIDxtb2pjYS5taWtsYXZlYy5saXN0c0BnbWFpbC5jb20+LgorCisyMDEzLTAzLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaDogQWRkIGRlc2NyaXB0aW9uIG9mIGNvbG9yIGZpbHRlcmluZy4KKworCUJhc2VkIG9uIGEgY29udHJpYnV0aW9uIGZyb20gQW50dGkgUy4gTGFua2lsYSA8YWxhbmtpbGFAYmVsLmZpPgorCShTYXZhbm5haCBidWcgIzM4NjA3KS4KKworMjAxMy0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1pbm9yLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIChhZl9wcm9wZXJ0eV9zZXQpOiBUeXBvLgorCShhZl9hdXRvZml0dGVyX2luaXQsIGFmX2F1dG9maXR0ZXJfZG9uZSk6IFVzZSBjYXN0LgorCisyMDEzLTAzLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogQXV0b21hdGljYWxseSB0ZXN0IGZvciBgZ21ha2UnIGFsc28uCisKKwlTdWdnZXN0ZWQgYnkgTW9qY2EgTWlrbGF2ZWMgPG1vamNhLm1pa2xhdmVjLmxpc3RzQGdtYWlsLmNvbT4uCisKKzIwMTMtMDMtMjEgIFBldGVyIEJyZWl0ZW5sb2huZXIgIDxwZWJAbXBwbXUubXBnLmRlPgorCisJUmVzcGVjdCBDT05GSUdfU0hFTEwgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisKKwlTb21lIGxhcmdlIHBhY2thZ2VzIHVzaW5nIEZyZWVUeXBlIGhhdmUgdG8gdXNlIGEgYnJva2VuIChkZWZpY2llbnQpCisJL2Jpbi9zaC4gIFRoZSBjb25maWd1cmUgc2NyaXB0cyAoYXMgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mKSBhcmUKKwljbGV2ZXIgZW5vdWdoIHRvIGZpbmQgYSBiZXR0ZXIgc2hlbGwgYW5kIHB1dCB0aGF0IG9uZSBpbnRvIHRoZQorCWVudmlyb25tZW50IHZhcmlhYmxlIENPTkZJR19TSEVMTC4gIElmIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKKwlhbHJlYWR5IHNldCB0aGUgc2NyaXB0IHNraXBzIHRoZSB0ZXN0IGFuZCBhc3N1bWVzIHRvIGJlIGFscmVhZHkKKwlydW5uaW5nIHVuZGVyIGEgZ29vZCBzaGVsbC4KKworCSogYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rOiBIb25vdXIgQ09ORklHX1NIRUxMLgorCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKFNIRUxMKTogRGVmaW5lLgorCisyMDEzLTAzLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggcGF0Y2ggIzc5NzEuCisKKwkqIGNvbmZpZ3VyZTogSGFuZGxlIE1BS0UgZW52aXJvbm1lbnQgdmFyaWFibGUgYWxzby4KKworMjAxMy0wMy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzg1MzguCisKKwkqIGJ1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMsIGJ1aWxkcy93aW4zMi9mdGRlYnVnLmMsCisJYnVpbGRzL3dpbmNlL2Z0ZGVidWcuYyAoRlRfVGhyb3cpOiBBZGQgZnVuY3Rpb24uCisKKzIwMTMtMDMtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIFJlbW92ZSBkZWFkIGNvZGUuCisKKwkqIHNyYy9yYXN0ZXIvcmFzdHBpYy5jIChmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KQorCXNyYy9zbW9vdGgvZnRzcGljLmMgKGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCk6IERvIGl0LgorCisyMDEzLTAzLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wc2hpbnRlci9wc2hwaWMuaCAoR0VUX1BJQyk6IFVzZSBjb3JyZWN0IGNvbnRhaW5lci4KKworMjAxMy0wMy0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmg6IEZpeCBjb21taXQgZnJvbSAyMDEzLTAzLTExLgorCisJVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzIG5vdCBiYWNrd2FyZHMgY29tcGF0aWJsZS4gIFJlcG9ydGVkIGJ5CisJQmVoZGFkLgorCisyMDEzLTAzLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IFVzZSBGVF9FUlJfRVEsIEZUX0VSUl9ORVEsIGFuZCBGVF9FUlIgd2hlcmUgYXBwcm9wcmlhdGUuCisKKwlGVF9FcnJfWFhYIGFuZCBmcmllbmRzIGFyZSBubyBsb25nZXIgZGlyZWN0bHkgdXNlZCBpbiB0aGUgc291cmNlCisJY29kZS4KKworMjAxMy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTmV3IGVycm9yIG1hbmFnZW1lbnQgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmggKEZUX0VSUl9YQ0FULCBGVF9FUlJfQ0FUKTogTW92ZSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmg6IC4uLiB0aGlzIGZpbGUuCisJKEZUX0VSUiwgRlRfRVJSX0VRLCBGVF9FUlJfTkVRLCBGVF9NT0RFUlJfRVEsIEZUX01PREVSUl9ORVEpOiBOZXcKKwltYWNyb3MuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaDogVXBkYXRlZC4KKworMjAxMy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBVc2UgRlRfRXJyX09rIG9ubHkuCisKKwlUaGlzIGlzIGEgcHVyZWx5IG1lY2hhbmljYWwgY29udmVyc2lvbi4KKworMjAxMy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBVc2UgYEZUX1RIUk9XJy4KKworCVRoaXMgaXMgZXNzZW50aWFsbHkgYSBtZWNoYW5pY2FsIGNvbnZlcnNpb24sIGFkZGluZyBpbmNsdXNpb24gb2YKKwlgRlRfSU5URVJOQUxfREVCVUdfSCcgd2hlcmUgbmVjZXNzYXJ5LCBhbmQgcHJvdmlkaW5nIHRoZSBtYWNyb3MgZm9yCisJc3RhbmQtYWxvbmUgY29tcGlsaW5nIG1vZGVzIG9mIHRoZSByYXN0ZXJpemVyIG1vZHVsZXMuCisKKwlUbyBjb252ZXJ0IHRoZSByZW1haW5pbmcgb2NjdXJyZW5jZXMgb2YgRlRfRXJyX1hYWCBhbmQgZnJpZW5kcyBpdCBpcworCW5lY2Vzc2FyeSB0byByZXdyaXRlIHRoZSBjb2RlLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBpdCBkb2Vzbid0IGhhcm0KKwlpZiBzb21lIGNhc2VzIGFyZSBub3QgaGFuZGxlZCBzaW5jZSBGVF9USFJPVyBpcyBhIG5vLW9wLgorCisyMDEzLTAzLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbnRyb2R1Y2UgYEZUX1RIUk9XJyBtYWNyby4KKworCVRoZSBpZGVhIGlzIHRvIHJlcGxhY2UgY29kZSBsaWtlCisKKwkgIHJldHVybiBGVF9FcnJfRm9vX0JhcjsKKworCW9yCisKKwkgIHJldHVybiBDRkZfRXJyX0Zvb19CYXI7CisKKwl3aXRoCisKKwkgIHJldHVybiBGVF9USFJPVyggRm9vX0JhciApOworCisJVGhlIEZUX1RIUk9XIG1hY3JvIGhhcyB0d28gZnVuY3Rpb25zOgorCisJICAuIEl0IGhpZGVzIHRoZSBtb2R1bGUgc3BlY2lmaWMgcHJlZml4LgorCisJICAuIEluIGRlYnVnIG1vZGUsIGl0IGNhbGxzIHRoZSBlbXB0eSBmdW5jdGlvbiBgRlRfVGhyb3cnIHdoaWNoIGNhbgorCSAgICBiZSB0aHVzIHVzZWQgdG8gc2V0IGEgYnJlYWtwb2ludC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggKEZUX1RIUk9XKTogTmV3IG1hY3JvLgorCShGVF9UaHJvdyk6IE5ldyBwcm90b3R5cGUuCisJKiBzcmMvYmFzZS9mdGRlYnVnLmMgKEZUX1Rocm93KTogTmV3IGZ1bmN0aW9uLgorCisyMDEzLTAzLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgYEZUX0tFRVBfRVJSX1BSRUZJWCcuCisKKwlUaGUgaWRlYSBpcyB0byBhbHdheXMgaGF2ZSBGVF9FUlJfUFJFRklYIGF2YWlsYWJsZSBpbnRlcm5hbGx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmg6IFVzZSBGVDJfQlVJTERfTElCUkFSWSB0byBndWFyZAorCXVuZGVmaW5pdGlvbiBvZiBGVF9FUlJfUFJFRklYCisKKwkqIHNyYy9neHZhbGlkL2d4dmVycm9yLmgsIHNyYy9vdHZhbGlkL290dmVycm9yLmgsCisJc3JjL3NmbnQvc2ZlcnJvcnMuaDogVXBkYXRlZC4KKworMjAxMy0wMy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2d4dmFsaWRdIEZpeCBtb2R1bGUgZXJyb3IuCisKKwkqIHNyYy9neHZhbGlkL2d4dmVycm9yLmggKEZUX0VSUl9CQVNFKTogRGVmaW5lIGFzCisJRlRfTW9kX0Vycl9HWHZhbGlkLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oOiBBZGQgbW9kdWxlIGVycm9yIGZvciBgR1h2YWxpZCcuCisKKzIwMTMtMDMtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFsd2F5cyB1c2UgbW9kdWxlIHJlbGF0ZWQgZXJyb3IgY29kZXMuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KSwgc3JjL3R5cGUxL3Qxb2Jqcy5jCisJKFQxX0ZhY2VfSW5pdCksIHNyYy90eXBlNDIvdDQyb2Jqcy5jIChUNDJfRmFjZV9Jbml0KTogVXNlCisJYEZUX0VSUk9SX0JBU0UnLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2VuY29kaW5nKTogVXNlCisJVDFfRXJyX1Vua25vd25fRmlsZV9Gb3JtYXQuCisKKzIwMTMtMDMtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFNldCBgbGluZWFye0hvcmksVmVydH1BZHZhbmNlJyBmb3IgZW1iZWRkZWQgYml0bWFwcyBhbHNvLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4uCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IEltcGxlbWVudCBpdC4KKworMjAxMy0wMi0yMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEZpeCBjb21taXQgYWIwMmQ5ZTguCisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0N1YmljX0NoZWNrKTogQ2hhbmdlIHNjYWxpbmcgdG8gbXNiIG9mIDIyLgorCisyMDEzLTAyLTE5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gTmV3IGJpc2VjdGluZyBCQm94X0N1YmljX0NoZWNrIChkaXNhYmxlZCkuCisKKwkqIHNyYy9iYXNlL2Z0YmJveC5jIChCQm94X0N1YmljX0NoZWNrKTogTmV3IGJpc2VjdGluZyBhbGdvcml0aG0KKwlmb3IgZXh0cmVtdW0gc2VhcmNoIGJ1aWx0IGFyb3VuZCBzaW1wbGUgY29uZGl0aW9uIHRoYXQgZGVmaW5lcworCXdoaWNoIGhhbGYgY29udGFpbnMgdGhlIGV4dHJlbXVtLgorCisyMDEzLTAyLTE4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdG9vbHNdIFVwZGF0ZSBCQm94IHRlc3RpbmcgdG9vbC4KKworCSogc3JjL3Rvb2xzL3Rlc3RfYmJveC5jOiBBZGQgYW5vdGhlciBjdWJpYyBvdXRsaW5lIHdpdGggZXhhY3QgQkJveC4KKwkoUkVQRUFUKTogSW5jcmVhc2UgdGhlIG51bWJlciBvZiBiZW5jaG1hcmtpbmcgY3ljbGVzLgorCShwcm9maWxlX291dGxpbmUpOiBUd2VhayBvdXRwdXQgZm9ybWF0dGluZy4KKworMjAxMy0wMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzgyMzUuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IERvbid0IGdlbmVyYXRlIGBmcmVldHlwZS1jb25maWcnIGFuZAorCWBmcmVldHlwZS5wYycuCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChGVDJfRVhUUkFfTElCUywgTElCQloyLCBMSUJaLAorCWJ1aWxkX2xpYnRvb2xfbGlicywgZnRfdmVyc2lvbik6IE5ldyB2YXJpYWJsZXMgdG8gYmUgc3Vic3RpdHV0ZWQuCisJKGZyZWV0eXBlLWNvbmZpZywgZnJlZXR5cGUucGMpOiBOZXcgcnVsZXMgdG8gZ2VuZXJhdGUgdGhvc2UgZmlsZXMuCisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogUmVtb3ZlIGNvZGUgZm9yIGhhbmRsaW5nIGBycGF0aCcuCisJVGhlIHVzZSBvZiAkcnBhdGggaGFzIGJlZW4gYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gYSBwYXRjaCBmcm9tCisJMjAwOS0xMi0yMiwgYW5kIGFwcGFyZW50bHkgbm9vbmUgaGFzIG1pc3NlZCBpdCBzaW5jZS4KKwlVc2UgYCUnIGluc3RlYWQgb2YgYEAnIGFzIGEgdmFyaWFibGUgc3Vic3RpdHV0aW9uIG1hcmtlci4KKwlVc2UgcXVvdGVzLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS5pbjogVXNlIGAlJyBpbnN0ZWFkIG9mIGBAJyBhcyBhIHZhcmlhYmxlCisJc3Vic3RpdHV0aW9uIG1hcmtlci4KKwlVc2UgcXVvdGVzLgorCisyMDEzLTAyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9ydW5fcHJlcCk6IFJlc2V0IG1vcmUgR1MgdmFyaWFibGVzLgorCisJQlRXLCBHcmVnIGFncmVlcyB0aGF0IHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGlzIG1pc3NpbmcgdGhlIGxpc3QKKwlvZiBHUyB2YXJpYWJsZXMgd2hpY2ggd2lsbCBhbHdheXMgYmUgcmVzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzCisJYWZ0ZXIgdGhlIGBwcmVwJyB0YWJsZSBoYXMgYmVlbiBleGVjdXRlZC4KKworMjAxMy0wMi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcnVuX3ByZXApOiBSZXNldCByZWZlcmVuY2UgcG9pbnRzLgorCisJVXAgdG8gbm93LCB3ZSBzaW1wbHkgdG9vayBhIHNuYXBzaG90IG9mIHRoZSBHcmFwaGljcyBTdGF0ZSBhZnRlciB0aGUKKwlgcHJlcCcgdGFibGUgaGFzIGJlZW4gZXhlY3V0ZWQsIGFuZCByaWdodCBiZWZvcmUgYSBnbHlwaCdzIGJ5dGVjb2RlCisJd2FzIHJ1biBpdCBnb3QgcmVsb2FkZWQuICBIb3dldmVyLCBhcyBHcmVnIEhpdGNoY29jayBoYXMgdG9sZCB1cyBpbgorCXByaXZhdGUgY29tbXVuaWNhdGlvbiwgcmVmZXJlbmNlIHBvaW50cyBnZXQgcmVzZXQgdG8gemVybyBpbiB0aGUgTVMKKwlyYXN0ZXJpemVyIGFuZCB3ZSBmb2xsb3cgaW4gZHVlIGNvdXJzZS4gIFdoaWxlIHJlYXNvbmFibGUsIHRoaXMgaXMKKwl1bmRvY3VtZW50ZWQgYmVoYXZpb3VyLgorCisJTW9zdCBub3RhYmx5LCB0aGlzIGZpeGVzIHRoZSByZW5kZXJpbmcgb2YgQXJpYWwncyBgeCcgZ2x5cGggaW4KKwlzdWJwaXhlbCBoaW50aW5nIG1vZGUuCisKKzIwMTMtMDItMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQSBiZXR0ZXIgZml4IGZvciBTYXZhbm5haCBidWcgIzM4MjExLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lQKTogSW1wbGVtZW50IGlkZW50aWNhbCBiZWhhdmlvdXIgdG8KKwlNUyByYXN0ZXJpemVyIGlmIHJwMSA9PSBycDIgKGNvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jaykuCisKKzIwMTMtMDItMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtwY2ZdIFN0cmVhbWxpbmUgcGFyc2luZyBvZiBQQ0YgZW5jb2RpbmcgdGFibGUuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X2VuY29kaW5ncyk6IFVzZSBzaW1wbGVyIGRvdWJsZSBmb3ItbG9vcC4KKwlSZWFsbG9jYXRlIGFycmF5IGluc3RlYWQgb2YgdXNpbmcgdGVtcG9yYXJ5IHN0b3JhZ2UuCisKKzIwMTMtMDItMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM4MjI3LgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IFNldCBMQ19BTEwuCisKKzIwMTMtMDItMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM4MjIxLgorCisJVGhpcyBjb21wbGVtZW50cyBjb21taXQgODNjMGViYWIuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxEaXZfTm9fUm91bmQpOiBEb24ndCBlbmNsb3NlIHdpdGgKKwlgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSJy4KKworMjAxMy0wMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzODIxMS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JUCk6IE1ha2UgRnJlZVR5cGUgYmVoYXZlIGlkZW50aWNhbAorCXRvIG90aGVyIGludGVycHJldGVycyBpZiBycDEgPT0gcnAyICh3aGljaCBpcyBpbnZhbGlkKS4KKworMjAxMy0wMS0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIFNtYWxsIG9wdGltaXphdGlvbiBvZiBCQm94IGNhbGN1bGF0aW9uLgorCisJKiBzcmMvYmFzZS9mdGJib3guYyAoQkJveF9DdWJpY19DaGVjayk6IFVzZSBGVF9NU0IgZnVuY3Rpb24gaW4KKwlzY2FsaW5nIGFsZ29yaXRobS4KKworMjAxMy0wMS0yNiAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yIGZvcm1hdHRpbmcgZml4LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogVXBkYXRlZC4KKwkoRE9fUlMpOiBGaXggaW5kZW50YXRpb24uCisKKzIwMTMtMDEtMjYgIEluZmluYWxpdHkgIDxpbmZpbmFsaXR5QGluZmluYWxpdHkubmV0PgorCisJW3RydWV0eXBlXSBGaXggcmFzdGVyaXplcl92ZXJzaW9uIGxvZ2ljIGluIHNwaC4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmM6IFVwZGF0ZWQuCisJKEFMV0FZU19TS0lQX0RFTFRBUF9SdWxlcyk6IFJlbW92ZSBydWxlIGZvciBUcmVidWNoZXQgTVMuCisJKHNwaF9zZXRfdHdlYWtzKTogRml4IGByYXN0ZXJpemVyX3ZlcnNpb24nIGxvZ2ljLgorCisyMDEzLTAxLTI2ICBJbmZpbmFsaXR5ICA8aW5maW5hbGl0eUBpbmZpbmFsaXR5Lm5ldD4KKworCVt0cnVldHlwZV0gQWxpZ24gbW9yZSB0byBDbGVhclR5cGUgd2hpdGVwYXBlciBmb3Igc3BoLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IEFkZCBmbGFncworCWZvciBkZXRlY3RlZCBvcGNvZGUgcGF0dGVybnMgYW5kIGNvbXBhdGliaWxpdHkgbW9kZS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfbG9hZGVyX2luaXQpOiBDb21wbGV0ZSBjb25kaXRpb25hbC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IFVwZGF0ZWQuCisJUmVtb3ZlIFNQSF9ERUJVRyBhbmQgcmVwbGFjZSB3aXRoIEZUX1RSQUNFNy4KKwkoRE9fUlMpOiBNb3JlIGNvbmRpdGlvbnMuCisJKEluc19GREVGKTogQWRkIG1vcmUgb3Bjb2RlIGRldGVjdGlvbiBwYXR0ZXJucy4KKwlNb3JlIHNwZWNpZmljIGNvbmRpdGlvbnMgd2hlbiBmbGFnZ2luZyBhbiBmZGVmLgorCU1ha2UgY29tcGF0aWJpbGl0eSBtb2RlIG9ubHkgdHVybiBvbiB3aGVuIGRlbHRhIGZkZWZzIGFyZSBmb3VuZC4KKwkoSW5zX0NBTEwsIEluc19MT09QQ0FMTCk6IFNldCBmbGFncyBmb3IgY3VycmVudGx5IGV4ZWN1dGVkIGZkZWYuCisJKEluc19TSFBJWCk6IFJlbW92ZSBsb2dpYyB0byBoYW5kbGUgdHRmYXV0b2hpbnRlZCBmb250cy4KKwlTaW1wbGlmeSBjb25kaXRpb25hbHMgd2hlcmUgcG9zc2libGUuCisJVXNlIGAmJyBpbnN0ZWFkIG9mIGAlJyBvcGVyYXRvciBmb3IgZHVtYiBjb21waWxlcnMuCisJKEluc19NSUFQKTogQWRqdXN0IHR3aWxpZ2h0IHpvbmUgY29uZGl0aW9uYWwuCisJRW5zdXJlIGBpZ25vcmVfeF9tb2RlJyBpcyBvbiB3aGVuIHRlc3Rpbmcgc3BoIGNvbmRpdGlvbmFscy4KKwkoSW5zX01JUlApOiBFbnN1cmUgYGlnbm9yZV94X21vZGUnIGlzIG9uIHdoZW4gdGVzdGluZyBzcGgKKwljb25kaXRpb25hbHMuCisJRG8gY3Z0IGN1dGluIGFsd2F5cyB3aGVuIGBpZ25vcmVfeF9tb2RlJyBpcyBhY3RpdmUuCisJUmVtb3ZlIHRlc3QgZm9yIHR0ZmF1dG9oaW50ZWQgZm9udHMuCisJKEluc19ERUxUQVApOiBFbnN1cmUgYGlnbm9yZV94X21vZGUnIGlzIG9uIHdoZW4gdGVzdGluZyBzcGgKKwljb25kaXRpb25hbHMuCisJRG8gY3Z0IGN1dGluIGFsd2F5cyB3aGVuIGBpZ25vcmVfeF9tb2RlJyBpcyBhY3RpdmUuCisJUmVtb3ZlIHRlc3QgZm9yIHR0ZmF1dG9oaW50ZWQgZm9udHMuCisJVXNlIGAmJyBpbnN0ZWFkIG9mIGAlJyBvcGVyYXRvciBmb3IgZHVtYiBjb21waWxlcnMuCisJKEluc19HRVRJTkZPKTogUmVtb3ZlIFNQSF9ERUJVRyBhbmQgcmVwbGFjZSB3aXRoIEZUX1RSQUNFNy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmg6IFVwZGF0ZWQuCisJKFRUX0V4ZWNDb250ZXh0UmVjKTogUmVtb3ZlIGNvbXBhdGliaWxpdHlfbW9kZSB2YXJpYWJsZS4KKwlBZGQgdmFyaWFibGUgdG8gaW5kaWNhdGUgd2hlbiBleGVjdXRpbmcgaW4gc3BlY2lhbCBmZGVmcyBmb3Igc3BoLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmg6IFVwZGF0ZWQuCisJKFRUX0RlZlJlY29yZCk6IEFkZCBmbGFncyB0byBpZGVudGlmeSBzcGVjaWFsIGZkZWZzIGZvciBzcGguCisJKFRUX1NpemVSZWMpOiBSZW1vdmUgdW5uZWNlc3NhcnkgdHRmYXV0b2hpbnRlZCB2YXJpYWJsZS4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmM6IFVwZGF0ZWQuCisJKENPTVBBVElCSUxJVFlfTU9ERV9SdWxlcyk6IFJlbW92ZSBhbGwuICBBdXRvLWRldGVjdGVkIG5vdy4KKwkoUElYRUxfSElOVElOR19SdWxlcyk6IFJlbW92ZSBhbGwuICBVbm5lY2Vzc2FyeSBhZnRlciBmaXhlcy4KKwkoU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzKTogUmVtb3ZlIFVidW50dS4KKwkoU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMpOiBBZGQgQXJpYWwgQm9sZCBgTicuCisJKFNLSVBfT0ZGUElYRUxfWV9NT1ZFU19SdWxlcyk6IFJlbW92ZSBhbGwuICBIYXBwZW5zIGF1dG9tYXRpY2FsbHkKKwlub3cuCisJKFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMpOiBSZW1vdmUgVWJ1bnR1LgorCShST1VORF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMpOiBSZW1vdmUgYWxsLgorCShOT1JNQUxfUk9VTkRfUnVsZXMpOiBSZW1vdmUgVmVyZGFuYS4KKwkoTk9fREVMVEFQX0FGVEVSX0lVUF9SdWxlcyk6IFJlbW92ZSBhbGwuCisJKHNwaF9zZXRfdHdlYWtzKTogUGVyZm9ybWFuY2UgZml4LiAgRG9uJ3QgcnVuIHByZXAgYWx3YXlzLgorCUFkanVzdCBjb25kaXRpb25hbCBmb3Igc3BoX2NvbXBhdGliaWxpdHlfbW9kZS4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4Lmg6IEFkZCBuZXcgZmRlZiBmbGFncyBmb3Igc3BoLgorCisyMDEzLTAxLTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IGJyb2tlbiBlbWJvbGRlbmluZyBhdCBzbWFsbCBzaXplcy4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0VtYm9sZGVuWFkpOiBEbyBub3QgYXR0ZW1wdCB0bworCW5vcm1hbGl6ZSB6ZXJvLWxlbmd0aCB2ZWN0b3JzLgorCisyMDEzLTAxLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzODE2Ny4KKworCVRoaXMgZml4ZXMgY29tbWl0IDgzYzBlYmFiIGZyb20gMjAxMi0wNi0yNy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmg6CisJcy9UVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSL1RUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUi8uCisKKzIwMTMtMDEtMjUgIFhpIFdhbmcgIDx4aS53YW5nQGdtYWlsLmNvbT4KKworCVtzZm50XSBGaXggYnJva2VuIHBvaW50ZXIgb3ZlcmZsb3cgY2hlY2tzLgorCisJTWFueSBjb21waWxlcnMgc3VjaCBhcyBnY2MgYW5kIGNsYW5nIG9wdGltaXplIGF3YXkgcG9pbnRlciBvdmVyZmxvdworCWNoZWNrcyBgcCArIG4gPCBwJywgYmVjYXVzZSBwb2ludGVyIG92ZXJmbG93IGlzIHVuZGVmaW5lZCBiZWhhdmlvci4KKwlVc2UgYSBzYWZlIGZvcm0gYG4gPiBwX2xpbWl0IC0gcCcgaW5zdGVhZC4KKworCUFsc28gYXZvaWQgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIGZvciBleGFtcGxlLCB1c2luZworCWBudW1fZ2x5cGhzID4gKCBwX2xpbWl0IC0gcCApIC8gMicgcmF0aGVyIHRoYW4gYG51bV9nbHlwaHMgKiAyJworCWdpdmVuIGEgbGFyZ2UgYG51bV9nbHlwaHMnLgorCisJKiBzcmMvc2ZudC90dHNiaXQwLmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKTogSW1wbGVtZW50IGl0LgorCisyMDEzLTAxLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gRml4IGBtYWtlIG11bHRpJy4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jLCBzcmMvYmFzZS9mdHRyaWdvbi5jOiBJbmNsdWRlCisJRlRfSU5URVJOQUxfQ0FMQ19ILgorCisyMDEzLTAxLTI1ICBEYXZpZCAnRGlnaXQnIFR1cm5lciAgPGRpZ2l0QGdvb2dsZS5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBDKysgY29tcGlsYXRpb24uCisKKwkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5oOiBVcGRhdGVkLgorCShTUEhfWF9TQ0FMSU5HX1JVTEVTX1NJWkUpOiBNb3ZlZCBhbmQgcmVuYW1lZCB0by4uLgorCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmMgKFhfU0NBTElOR19SVUxFU19TSVpFKTogVGhpcy4KKwkoc3BoX1hfU0NBTElOR19SdWxlcyk6IFJlbW92ZWQuCisJKHNjYWxlX3Rlc3RfdHdlYWspOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYy4KKwkoc3BoX3Rlc3RfdHdlYWtfeF9zY2FsaW5nKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCk6IFVwZGF0ZWQuCisKKzIwMTMtMDEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBNYWtlIGBGVF9IeXBvdCcgcmVhbGx5IGludGVybmFsLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmggKEZUX0h5cG90KTogTW92ZSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaDogVGhpcyBmaWxlLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChGVF9IeXBvdCk6IE1vdmUgdG8uLi4KKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jOiBUaGlzIGZpbGUuCisJSW5jbHVkZSBGVF9UUklHT05PTUVUUllfSC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogRG9uJ3QgaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSC4KKworMjAxMy0wMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBSZXZlcnQgY2hhbmdlIGZyb20gMjAxMy0wMS0yMi4KKworCUZyZWVUeXBlJ3MgYGhlaWdodCcgdmFsdWUgaXMgdGhlIGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlLi4uCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9yZXNldCk6IFVuZG8uCisKKzIwMTMtMDEtMjMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlLCB0cnVldHlwZV0gTmV3IGludGVybmFsIGBGVF9IeXBvdCcgZnVuY3Rpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaCAoRlRfSHlwb3QpOiBEZWNsYXJlIGl0LgorCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfSHlwb3QpOiBEZWZpbmUgaXQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQpOiBVc2UgaXQKKwlpbnN0ZWFkIG9mIGV4cGxpY2l0IGV4cHJlc3Npb25zLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEN1cnJlbnRfUmF0aW8sIE5vcm1hbGl6ZSk6IFVzZSBpdCBpbnN0ZWFkCisJb2YgVFRfVmVjTGVuLgorCShUVF9WZWNMZW4pOiBSZW1vdmVkLgorCisyMDEzLTAxLTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IGludGVnZXIgb3ZlcmZsb3cuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9FbWJvbGRlblhZKTogTm9ybWFsaXplIGluY29taW5nIGFuZAorCW91dGdvaW5nIHZlY3RvcnMgYW5kIHVzZSBmaXhlZCBwb2ludCBhcml0aG1ldGljLgorCisyMDEzLTAxLTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IGludGVnZXIgb3ZlcmZsb3cuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBTY2FsZSB0aGUKKwljb29yZGluYXRlcyBkb3duIHRvIGF2b2lkIG92ZXJmbG93LgorCisyMDEzLTAxLTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gU3BsaXQgb3V0IE1TQiBmdW5jdGlvbi4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoZnRfdHJpZ19wcmVub3JtKTogQm9ycm93IGZyb20gaGVyZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEZUX01TQik6IERlY2xhcmUgaGVyZS4KKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NU0IpOiBEZWZpbmUgaGVyZS4KKworMjAxMy0wMS0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggZm9udCBoZWlnaHQuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9yZXNldCk6IFRoZSBXaW5kb3dzIHJlbmRlcmluZworCWVuZ2luZSB1c2VzIHJvdW5kZWQgdmFsdWVzIG9mIHRoZSBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHRvIGNvbXB1dGUKKwl0aGUgVHJ1ZVR5cGUgZm9udCBoZWlnaHQuCisKKzIwMTMtMDEtMTYgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3NmbnRdIEZpeCBvcHRpbWl6ZWQgc2JpdCBsb2FkZXIuCisKKwlJdCB3YXMgbm90IHRha2luZyBiaXRfZGVwdGggaW50byBjb25zaWRlcmF0aW9uIHdoZW4gYmxpdHRpbmchCisKKwkqIHNyYy9zZm50L3R0c2JpdDAuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfYnl0ZV9hbGlnbmVkLAorCSogdHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0X2FsaWduZWQpOiBIYW5kbGUgYml0CisJZGVwdGguCisKKzIwMTMtMDEtMTYgIERhdmlkICdEaWdpdCcgVHVybmVyICA8ZGlnaXRAZ29vZ2xlLmNvbT4KKworCVt0cnVldHlwZV0gSW1wcm92ZSBzdWItcGl4ZWwgY29kZS4KKworCVRoaXMgcGF0Y2hlcyBmaXhlcyBtYW55IGlzc3VlcyB3aXRoIHRoZSB0dHN1YnBpeCBpbXBsZW1lbnRhdGlvbi4KKworCTEuIERhdGEgdGFibGVzIGFyZSBkZWZpbmVkLCBpbnN0ZWFkIG9mIGRlY2xhcmVkLCBpbiB0aGUgaGVhZGVyLCBhbmQKKwkgICB0aHVzIGNvcGllZCBpbnRvIGVhY2ggc291cmNlIGZpbGUgdGhhdCBpbmNsdWRlcyBpdC4KKworCTIuIFRoZXNlIHRhYmxlcyB3ZXJlIGRlZmluZWQgYXMgZ2xvYmFsLCBtdXRhYmxlLCB2aXNpYmxlIHZhcmlhYmxlcywKKwkgICBhbmQgdGh1cyBjb3N0aW5nIHByaXZhdGUgUkFNIHRvIGV2ZXJ5IHByb2Nlc3MgdGhhdCBsb2FkcyB0aGUKKwkgICBsaWJyYXJ5ICg+IDUwIEtCIC8gcHJvY2VzcywgdGhpcyBpcyBodWdlISkuCisKKwkgICBBZGRpdGlvbmFsbHksIHRoaXMgYWxzbyBtYWRlIHRoZSBsaWJyYXJ5IGV4cG9ydCB0aGUgc3ltYm9scworCSAgIGNvbXBsZXRlbHkgbmVlZGxlc3NseS4KKworCTMuIE1pc3NpbmcgYHNwaF8nIGFuZCBgU1BIXycgcHJlZml4ZXMgdG8gc29tZSBvZiB0aGUgZGVmaW5pdGlvbnMuCisKKwlOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHRyeSB0byBmaXggdGhlIGluY3JlZGlibHkgaW5lZmZpY2llbnQgc3RvcmFnZQorCWZvcm1hdCBmb3IgdGhlIGRhdGEgdGFibGVzIHVzZWQgYnkgdGhlIGNvZGUuICBUaGlzIG9uZSB3aWxsIHJlcXVpcmUKKwlhbm90aGVyIHBhc3MgaW4gdGhlIGZ1dHVyZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggKE1BWF9OQU1FX1NJWkUsIE1BWF9DTEFTU19NRU1CRVJTKToKKwlSZW5hbWVkIHRvLi4uCisJKFNQSF9NQVhfTkFNRV9TSVpFLCBTUEhfTUFYX0NMQVNTX01FTUJFUlMpOiBUaGlzLgorCVVwZGF0ZSBhbGwgdXNlcnMuCisKKwkoU1BIX1R3ZWFrUnVsZSwgU1BIX1NjYWxlUnVsZSk6IERlY29yYXRlIHdpdGggYGNvbnN0JyB3aGVyZQorCWFwcHJvcHJpYXRlLgorCisJKEZvbnRfQ2xhc3MpOiBSZW5hbWUgdG8uLi4KKwkoU1BIX0ZvbnRfQ2xhc3MpOiBUaGlzLiAgRGVjb3JhdGUgd2l0aCBgY29uc3QnIHdoZXJlIGFwcHJvcHJpYXRlLgorCQorCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmggKHNjYWxlX3Rlc3RfdHdlYWssIHNwaF90ZXN0X3R3ZWFrKToKKwlEZWNvcmF0ZSBhcmd1bWVudHMgd2l0aCBgY29uc3QnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJTW92ZSBmb250IHR3ZWFraW5nIHRhYmxlcyB0by4uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaWMuYzogVGhpcyBmaWxlIGFuZCBkZWNvcmF0ZSB0aGVtIHdpdGggYHN0YXRpYycKKwlhbmQgYGNvbnN0JyB3aGVyZSBhcHByb3ByaWF0ZS4KKworCShYX1NDQUxJTkdfUnVsZXMsIFhfU0NBTElOR19SVUxFU19TSVpFKTogUmVuYW1lZCB0by4uLgorCShzcHVfWF9TQ0FMSU5HX1J1bGVzLCBTUEhfWF9TQ0FMSU5HX1JVTEVTX1NJWkUpOiBUaGlzLgorCVVwZGF0ZSBhbGwgdXNlcnMuCisKKzIwMTMtMDEtMTIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gSW1wcm92ZSBhY2N1cmFjeSBvZiBub3JtYWxpemF0aW9uIG9mIHNob3J0IHZlY3RvcnMuCisKKwlVbml0IHZlY3RvciBjb21wb25lbnRzIGFyZSBzdG9yZWQgYXMgMi4xNCBmaXhlZC1wb2ludCBudW1iZXJzLiBJbgorCW9yZGVyIHRvIGNhbGN1bGF0ZSBhbGwgMTQgYml0cyBhY2N1cmF0ZWx5LCBhIHNob3J0IHZlY3RvciB0byBiZQorCW5vcm1hbGl6ZWQgaGFzIHRvIGJlIHVwc2NhbGVkIHRvIGF0IGxlYXN0IDE0IGJpdHMgYmVmb3JlIGl0cyBsZW5ndGgKKwlpcyBjYWxjdWxhdGVkLiBUaGlzIGhhcyBiZWVuIHNhZmUgc2luY2UgYWNjdXJhdGUgQ09SRElDIGFsZ29yaXRobXMKKwl3ZXJlIGFkb3B0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChOb3JtYWxpemUpOiBTY2FsZSBzaG9ydCB2ZWN0b3JzIGJ5IDB4NDAwMC4KKworMjAxMy0wMS0xMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBLaWxsIHZlcnkgb2xkIHZlY3RvciBub3JtYWxpemF0aW9uIGhhY2tzLgorCisJQmFjayBpbiB0aGUgZGF5cywgdmVjdG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgd2VyZSBub3QgdmVyeSBhY2N1cmF0ZQorCWFuZCB0aGUgdmVjdG9yIG5vcm1hbGl6YXRpb24gZnVuY3Rpb24sIE5vcm1hbGl6ZSwgaGFkIHRvIG1ldGljdWxvdXNseQorCWNvcnJlY3QgdGhlIGVycm9ycyBmb3IgbG9uZyB2ZWN0b3JzIFtjb21taXQgYjdlZjJiMDk2ODY3XS4gSXQgd2FzIG5vCisJbG9uZ2VyIG5lY2Vzc2FyeSBhZnRlciBhY2N1cmF0ZSBDT1JESUMgYWxnb3JpdGhtcyB3ZXJlIGFkb3B0ZWQsIGJ1dAorCXRoZSBjb2RlIHJlbWFpbmVkLiBJdCBpcyB0aW1lIHRvIGtpbGwgaXQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChOb3JtYWxpemUpOiBSZW1vdmUgZXJyb3IgY29tcGVuc2F0aW9uLgorCShUVF9WZWNMZW4pOiBSZW1vdmUgYW55IG1lbnRpb24gb2Ygb2xkIGxlc3MgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24uCisKKzIwMTMtMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCURpc2FibGUgRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTLgorCisJQWZ0ZXIgdGhlIG5leHQgcmVsZWFzZSB3ZSBhcmUgZ29pbmcgdG8gcmVtb3ZlIHRoZSBjb2RlIGNvbXBsZXRlbHkuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTKTogQ29tbWVudCBvdXQuCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDEzLTAxLTEwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gVXBkYXRlIHRoZSBvdmVyZmxvdyBwcm90ZWN0aW9uIGJpdC4KKworCVRoZSByZWNlbnQgb3B0aW1pemF0aW9ucyBvZiBDT1JESUMgaXRlcmF0aW9ucyBkcmFzdGljYWxseSByZWR1Y2UgdGhlCisJZXhwYW5zaW9uIGZhY3Rvci4gIFZlY3RvciBjb21wb25lbnRzIHdpdGggTVNCIG9mIDI5IGFyZSBub3cgc2FmZQorCWZyb20gb3ZlcmZsb3cuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKEZUX1RSSUdfU0FGRV9NU0IpOiBOZXcgbWFjcm8uCisJKGZ0X3RyaWdfcHJlbm9ybSk6IFVzZSBpdCBhbmQgcmVtb3ZlIGRlYWQgY29kZS4KKworMjAxMy0wMS0wOSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2UsIHBzaGludGVyXSBVc2UgRlRfQUJTLCBGVF9NSU4sIGFuZCBGVF9NQVggZm9yIHJlYWRhYmlsaXR5LgorCisJKiBzcmMvYmFzZS9mdGJib3guYzogVXBkYXRlZC4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBVcGRhdGVkLgorCSogc3JjL2Jhc2UvZnR0cmlnb24uYzogVXBkYXRlZC4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmM6IFVwZGF0ZWQuCisJKiBzcmMvcHNoaW50ZXIvcHNocmVjLmM6IFVwZGF0ZWQuCisKKzIwMTMtMDEtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBDbGVhbiB1cCB0cmlnb25vbWV0cmljIGNvcmUuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmM6IERvY3VtZW50IHRoZSBhbGdvcml0aG0gaW4gYSBsYXJnZSBjb21tZW50LgorCShGVF9UUklHX0NPU0NBTEUpOiBSZW1vdmUgbWFjcm8uCisJKEZUX1RhbjogVXNlIGBGVF9UUklHX1NDQUxFJyBpbnN0ZWFkLgorCShGVF9Db3MsIEZUX1ZlY3Rvcl9Vbml0KTogRGl0dG8gYW5kIHJvdW5kIHRoZSByZXR1cm4gdmFsdWVzLgorCisyMDEzLTAxLTAyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gVXNlIHJvdW5kaW5nIGluIENPUkRJQyBpdGVyYXRpb25zLgorCisJKiBzcmMvYmFzZS9mdHRyaWdvbi5jIChmdF90cmlnX3BzZXVkb19yb3RhdGUsCisJZnRfdHJpZ19wc2V1ZG9fcG9sYXJpemUpOiBJbXByb3ZlIGFjY3VyYWN5IGJ5IHJvdW5kaW5nLgorCisyMDEzLTAxLTAyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gUmVkdWNlIHRyaWdvbm9tZXRyaWMgYWxnb3JpdGhtcy4KKworCUFmdGVyIHdlIGdldCB3aXRoaW4gNDUgZGVncmVlcyBieSBtZWFucyBvZiB0cnVlIDkwLWRlZ3JlZSByb3RhdGlvbnMsCisJd2UgY2FuIHJlbW92ZSBpbml0aWFsIDQ1LWRlZ3JlZSBDT1JESUMgaXRlcmF0aW9uIGFuZCBzdGFydCBmcm9tCisJYXRhbigxLzIpIHBzZXVkb3JvdGF0aW9uLCByZWR1Y2luZyBleHBhbnNpb24gZmFjdG9yIHRoZXJlYnkuCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKEZUX1RSSUdfU0NBTEUsIEZUX1RSSUdfQ09TQ0FMRSk6IFVwZGF0ZSBtYWNyb3MuCisJKGZ0X3RyaWdfcHNldWRvX3JvdGF0ZSwgZnRfdHJpZ19wc2V1ZG9fcG9sYXJpemUpOiBVcGRhdGUuCisKKwkqIHNyYy90b29scy9jb3JkaWMucHk6IEJyaW5nIHVwIHRvIGRhdGUgd2l0aCB0cmlnb25vbWV0cmljIGNvcmUuCisKKwkqIGRvY3MvQ0hBTkdFUzogT2xkIHR5cG8uCisKKzIwMTMtMDEtMDIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uaDogUmVtb3ZlIHVudXNlZCBjb2RlLgorCisyMDEyLTEyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2xvYWRlcl9pbml0KTogQWRkIG1vcmUgdHJhY2luZy4KKworMjAxMi0xMi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBGaXggaGFuZGxpbmcgb2YgL0ZvbnRCQm94IGluIE1NIGZvbnRzLgorCVByb2JsZW0gcmVwb3J0ZWQgYnkgRGVsIE1lcnJpdHQgPGRlbEBhbHVtLm1pdC5lZHU+CisKKwlJZiB3ZSBoYXZlCisKKwkgIC9Gb250QkJveCB7IHsgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggfQorCSAgICAgICAgICAgICAgeyAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCB9CisJICAgICAgICAgICAgICB7IDMxIDMyIDMzIDM0IDM1IDM2IDM3IDM4IH0KKwkgICAgICAgICAgICAgIHsgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNDggfSB9CisKKwlpbiB0aGUgL0JsZW5kIGRpY3Rpb25hcnksICB0aGVuIHRoZSBmaXJzdCBCQm94IGlzIHsgMTEgMjEgMzEgNDEgfSwKKwl0aGUgc2Vjb25kIHsgMTIgMjIgMzIgNDIgfSwgZXRjLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0ZpZWxkVHlwZSk6IEFkZAorCWBUMV9GSUVMRF9UWVBFX01NX0JCT1gnIChmb3IgdGVtcG9yYXJ5IHVzZSkuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfcGFyc2VyX2xvYWRfZmllbGQpIDxUMV9GSUVMRF9UWVBFX01NX0JCT1g+OgorCUltcGxlbWVudCBpdC4KKworMjAxMi0xMi0yMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvdG9vbHMvY29yZGljLnB5OiBCcmluZyB1cCB0byBkYXRlIHdpdGggdHJpZ29ub21ldHJpYyBjb3JlLgorCisyMDEyLTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlDaGVjayBwYXJhbWV0ZXJzIG9mIGBGVF9PdXRsaW5lX05ldycuCisJUHJvYmxlbSByZXBvcnRlZCBieSBSb2JpbiBXYXR0cyA8cm9iaW4ud2F0dHNAYXJ0aWZleC5jb20+LgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfTmV3X0ludGVybmFsKTogRW5zdXJlIHRoYXQKKwlgbnVtQ29udG91cnMnIGFuZCBgbnVtUG9pbnRzJyBmaXQgaW50byBGVF9PdXRsaW5lJ3MgYG5fcG9pbnRzJyBhbmQKKwlgbl9jb250b3VycycsIHJlc3BlY3RpdmVseS4KKworMjAxMi0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC4xMSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTExJy4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL3JlbGVhc2U6IFVwZGF0ZWQuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi40LjExLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjEwLzIuNC4xMS8sIHMvMjQxMC8yNDExLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxMS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDE2OjA6MTAuCisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tayAoZGlzdCk6IERvbid0IGluY2x1ZGUgYC5tYWlsbWFwJy4KKworMjAxMi0xMi0yMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEltcHJvdmUgdHJpZ29ub21ldHJpYyBjb3JlLgorCisJRnJlZVR5cGUgdXNlZCB0byByZWx5IG9uIGEgMjQtc3RlcCBpdGVyYXRpb24gQ09SRElDIGFsZ29yaXRobSB0bworCWNhbGN1bGF0ZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyBhbmQgcm90YXRlIHZlY3RvcnMuIEl0IHR1cm5zIG91dAorCXRoYXQgb25jZSB0aGUgdmVjdG9yIGlzIGluIHRoZSByaWdodCBoYWxmLXBsYW5lLCB0aGUgaW5pdGlhbCByb3RhdGlvbgorCWJ5IDYzIGRlZ3JlZXMgaXMgbm90IG5lY2Vzc2FyeS4gVGhlIGFsZ29yaXRobSBpcyBwZXJmZWN0bHkgY2FwYWJsZQorCXRvIGNvbnZlcmdlIHRvIGFueSBhbmdsZSBzdGFydGluZyBmcm9tIHRoZSBzZWNvbmQgNDUgZGVncmVlIHJvdGF0aW9uLgorCVRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgZmlyc3Qgcm90YXRpb24gYW5kIG1ha2VzIGl0IGEgMjMtc3RlcCBDT1JESUMKKwlhbGdvcml0aG0uCisKKwkqIHNyYy9iYXNlL2Z0dHJpZ29uLmMgKEZUX1RSSUdfU0NBTEUsIEZUX1RSSUdfQ09TQ0FMRSk6IFVwZGF0ZSBtYWNybworCXZhbHVlcy4KKwkoZnRfdHJpZ19wc2V1ZG9fcm90YXRlLCBmdF90cmlnX3BzZXVkb19wb2xhcml6ZSk6IFJlbW92ZSBpbml0aWFsCisJcm90YXRpb24uCisKKzIwMTItMTItMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3Byb3BlcnR5X2RvKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTItMTItMTkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0d1ZXNzKTogU3dpdGNoIHRvIEZUX0ludCBjb3VudGVycy4KKworMjAxMi0xMi0xOSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIENsZWFuIHVwIHRyaWdvbm9tZXRyaWMgY29yZS4KKworCSogc3JjL2Jhc2UvZnR0cnJpZ29uLmMgKGZ0X3RyaWdfcHNldWRvX3BvbGFyaXplKTogQWxpZ24gYWxnb3JpdGhtCisJd2l0aCBgZnRfdHJpZ19wc2V1ZG9fcm90YXRlJy4KKworMjAxMi0xMi0xOCAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBVc2UgRlRfTXVsRml4CisJaW5zdGVhZCBvZiBGVF9NdWxEaXYuCisKKzIwMTItMTItMTcgIEluZmluYWxpdHkgIDxpbmZpbmFsaXR5QGluZmluYWxpdHkubmV0PgorCisJW3RydWV0eXBlXSBSZW1vdmUgdW51c3VlZCBjb2RlIGFuZCB2YXJpYWJsZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBVcGRhdGVkLgorCShJbnNfRkRFRik6IFJlbW92ZSBvcGNvZGUgcGF0dGVybnMgdGhhdCBhcmUgbm90IGJlaW5nIHVzZWQuCisKKzIwMTItMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVZhcmlvdXMgY29tcGlsZXIgd2FybmluZyBmaXhlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfU0VSVklDRV9VTkFWQUlMQUJMRSk6IFVzZQorCWBsb2dpY2FsIG5vdCcgb3BlcmF0b3IgaW5zdGVhZCBvZiBuZWdhdGlvbi4gIFRoZSBpZGVhIGlzIHRoYXQgYH4nCisJcmV0dXJucyBleGFjdGx5IHRoZSBkYXRhIHR5cGUgZW5mb3JjZWQgYnkgdGhlIGNhc3QgdG8gYSBwb2ludGVyIChiZQorCWl0IDMyYml0IG9yIDY0Yml0IG9yIHdoYXRldmVyKSwgd2hpbGUgYSBuZWdhdGl2ZSBpbnRlZ2VyIGhhcyBub3QKKwl0aGlzIGZsZXhpYmlsaXR5LgorCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoRlRDX0NNQVBfVU5LTk9XTik6IERpdHRvLgorCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoQUxMX1BPSU5UUywgVFRfR2V0X01NX1Zhcik6IERpdHRvLgorCSogc3JjL3R5cGUvdDFsb2FkLmMgKFQxX0dldF9NTV9WYXIpOiBEaXR0by4KKwkocGFyc2VfYmxlbmRfYXhpc190eXBlcyk6IFVzZSBjYXN0LgorCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9yZWFkc3RyZWFtKTogVXNlIGNhc3QuCisKKzIwMTItMTItMTYgIEluZmluYWxpdHkgIDxpbmZpbmFsaXR5QGluZmluYWxpdHkubmV0PgorCisJW3RydWV0eXBlXSBSZW1vdmUgdW51c3VlZCBjb2RlIGFuZCB2YXJpYWJsZXMuICBBZGQgbWlub3IgZml4ZXMuCisKKwkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5oOiBVcGRhdGVkLgorCShTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXNfRXhjZXB0aW9ucyk6IEFkZCBUcmVidWNoZXQgTVMuCisJKEFMTE9XX1hfRE1PVkVYX1J1bGVzKTogUmVtb3ZlIEFyaWFsIGNoYXJhY3RlcnMuCisJKEFMTE9XX1hfRE1PVkVfUnVsZXMpOiBSZW1vdmUgQXJpYWwgY2hhcmFjdGVycy4KKwkoUkFTVEVSSVpFUl8zNV9SdWxlcyk6IFZlcmRhbmEgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGhlcmUuCisJKFNLSVBfSVVQX1J1bGVzKTogRm9ybWF0dGluZyBmaXguCisJKERFTFRBUF9TS0lQX0VYQUdHRVJBVEVEX1ZBTFVFU19SdWxlcyk6IFJlbW92ZSBTZWdvZSBVSS4KKwkoQ09NUEFUSUJMRV9XSURUSFNfUnVsZXMpOiBBZGQgTW9uYWNvIGFuZCBUcmVidWNoZXQgTVMuCisJKFhfU0NBTElOR19SdWxlcyk6IEFkZCBtaXNjLiBjb3JyZWN0aXZlIGZpeGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBBZGp1c3QgY29ycmVjdGlvbgorCWZhY3RvciBmb3IgZW1ib2xkZW5pbmcgZHVyaW5nIHNjYWxpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oOiBVcGRhdGVkLgorCShUVF9FeGVjQ29udGV4dFJlYyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmg6IFVwZGF0ZWQuCisJKFRUX1NpemVSZWMpOiBBZGQgdHRmYXV0b2hpbnRlZCB2YXJpYWJsZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IFVwZGF0ZWQuCisJKEluc19GREVGKTogUmV3b3JrIGNvZGUgdG8gZml4IGJ1Z3MgYW5kIGFkZCBtb3JlIGRldGVjdGlvbi4KKwkoSW5zX0NBTEwpOiBSZW1vdmUgdW51c2VkIGNvZGUuCisJKEluc19MT09QQ0FMTCk6IFJlbW92ZSB1bnVzZWQgY29kZS4KKwkoVFRfUnVuSW5zKTogUmVtb3ZlIHVudXN1ZWQgY29kZS4KKwkoSW5zX1NIUElYKTogQWRkIGxvZ2ljIHRvIGhhbmRsZSB0dGZhdXRvaGludGVkIGZvbnRzLgorCShJbnNfTUlSUCk6IERvbid0IHJvdW5kIHggaW4gY3V0LWluIGNhbGN1bGF0aW9uLiAgQWRkIGxvZ2ljIHRvIGhhbmRsZQorCXR0ZmF1dG9oaW50ZWQgZm9udHMuCisKKzIwMTItMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggU2F2YW5uYWggYnVnICMzNzkzNi4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9nYXNwKTogQXZvaWQgbWVtb3J5IGxlYWsuCisKKzIwMTItMTItMTUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBGaXggMTEteWVhciBvbGQgYnVnLgorCisJU2luY2UgdGhlIGluaXRpYWwgY29tbWl0IChlYmU4NWY1OSkgdGhlIHZhbHVlIG9mIEZUX1RSSUdfU0NBTEUgaGFzCisJYWx3YXlzIGJlZW4gc2xpZ2h0bHkgbGVzcyB0aGFuIHRoZSBjb3JyZWN0IHZhbHVlLCB3aGljaCBoYXMgYmVlbgorCWdpdmVuIGluIHRoZSBjb21tZW50IGFzIGEgaGV4YWRlY2ltYWwuIEFzIGEgcmVzdWx0LCB2ZWN0b3IgbGVuZ3RocworCXdlcmUgdW5kZXJlc3RpbWF0ZWQgYW5kIHJvdGF0ZWQgdmVjdG9ycyB3ZXJlIHNob3J0ZW5lZC4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfVFJJR19TQ0FMRSk6IEZpeCBtYWNybyB2YWx1ZS4KKworMjAxMi0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzc5MDcuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKSA8RU5DT0RJTkc+OiBOb3JtYWxpemUKKwluZWdhdGl2ZSBzZWNvbmQgcGFyYW1ldGVyIG9mIGBFTkNPRElORycgZmllbGQgYWxzby4KKworMjAxMi0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzc5MDYuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKSA8RU5DT0RJTkc+OiBVc2UgY29ycmVjdCBhcnJheQorCXNpemUgZm9yIGNoZWNraW5nIGBnbHlwaF9lbmMnLgorCisyMDEyLTEyLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVnICMzNzkwNS4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9zdGFydCkgPFNUQVJUUFJPUEVSVElFUz46IFJlc2V0CisJYHByb3BzX3NpemUnIHRvIHplcm8gaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGVycm9yOyB0aGlzIHZhbHVlIGdldHMKKwl1c2VkIGluIGEgbG9vcCBpbiBgYmRmX2ZyZWVfZm9udCcuCisKKzIwMTItMTItMTAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gU2NhbGUgRl9kb3RfUCBkb3duLgorCisJVGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gZnJlZVZlY3RvciBhbmQgcHJvalZlY3RvciBvciBjb3NpbmUgb2YKKwl0aGUgYW5nbGUgYmV0d2VlbiB0aGVzZSBGVF9GMkRvdDE0IHVuaXQgdmVjdG9ycyB1c2VkIHRvIGJlIHNjYWxlZCB1cAorCWJ5IDQgYW5kIHJvdXRpbmVseSBvY2N1cGllZCAzMiBiaXRzIGluIGFuIEZUX0xvbmcgZmllbGQgRl9kb3RfUC4KKwlUaGlzIHBhdGNoIHNjYWxlcyB0aGUgdmFsdWUgZG93biBieSAyXjE0IGluc3RlYWQsIHdoaWNoIHNpbXBsaWZpZXMKKwlpdHMgdXNlIHRocm91Z2hvdXQgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyLgorCisJVGhpcyBkb2VzIG5vdCBsZWFkIHRvIHRoZSBsb3NzIG9mIHByZWNpc2lvbiBiZWNhdXNlIHRoZSBsb3dlciBiaXRzCisJYXJlIHVucmVsaWFibGUgYW55d2F5LiBDb25zaWRlciB0d28gdW5pdCB2ZWN0b3JzICgxLDApIGFuZCAoLjYsLjgpCisJZm9yIHdoaWNoIHRoZSB0cnVlIHZhbHVlIG9mIEZfZG90X1AgaXMgLjYgKiAweDQwMDAwMDAwID0gMHgyNjY2NjY2Ni4KKwlUaGVzZSB2ZWN0b3JzIGFyZSBzdG9yZWQgYXMgKDB4NDAwMCwwKSBhbmQgKDB4MjY2NiwweDMzMzMpIGFmdGVyCisJcm91bmRpbmcgYW5kIEZfZG90X1AgaXMgYXNzaWduZWQgMHgyNjY2MDAwMC4gVGhlIGxvd2VyIGJpdHMgd2VyZQorCWFscmVhZHkgbG9zdCB3aGlsZSByb3VuZGluZyB0aGUgdW5pdCB2ZWN0b3IgY29tcG9uZW50cy4KKworCUJlc2lkZXMgY29kZSBzaW1wbGlmaWNhdGlvbiwgdGhpcyBjaGFuZ2UgY2FuIGxlYWQgdG8gYmV0dGVyCisJcGVyZm9ybWFuY2Ugd2hlbiBGVF9NdWxEaXYgd2l0aCB0aGUgc2NhbGVkLWRvd24gRl9kb3RfUCBpcyBsZXNzCisJbGlrZWx5IHRvIHVzZSB0aGUgY29zdGx5IDY0LWJpdCBwYXRoLiBXZSBhcmUgbm90IGNoYW5naW5nIHRoZSB0eXBlCisJb2YgRl9kb3RfUCB0byBGVF9GMkRvdDE0IGF0IHRoaXMgcG9pbnQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChDb21wdXRlX0Z1bmNzKTogU2NhbGUgRl9kb3RfUCBkb3duIGJ5IDE0CisJYml0cyBhbmQgbW9kaWZ5IGl0cyB1c2UgYWNjb3JkaW5nbHkuCisJKERpcmVjdF9Nb3ZlLCBEaXJlY3RfTW92ZV9PcmlnLCBDb21wdXRlX1BvaW50X0Rpc3BsYWNlbWVudCk6IE1vZGlmeQorCXRoZSB1c2Ugb2YgRl9kb3RfUCBmaWVsZC4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9ydW5fZnBnbSk6IENoYW5nZSBhcmJpdHJhcnkKKwlhc3NpZ25tZW50IG9mIEZfZG90X1AgdG8gaXRzIHRoZW9yZXRpY2FsIG1heGltdW0gaW4gY2FzZSB3ZSBkZWNpZGUKKwl0byBzY2FsZSBiYWNrIGl0cyB0eXBlIGxhdGVyLgorCisyMDEyLTEyLTA5ICBKb2huc29uIFkuIFlhbiAgPHlpbnNlbl95YW5AZm94aXRzb2Z0d2FyZS5jb20+CisKKwlbdHlwZTFdIEFub3RoZXIgZml4IGZvciAyMDEyLTA5LTE3IGNvbW1pdC4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCkgPGZvdW5kPjogQ29ycmVjdGx5IHNldAorCWBsaW1pdCcgdmFsdWUuCisKKzIwMTItMTItMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gVHdlYWsgdGhlIHByZXZpb3VzIGNvbW1pdC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEN1cnJlbnRfUmF0aW8pOiBQdXQgdW5pdCB2ZWN0b3IKKwljb21wb25lbnRzIGFzIHRoZSBzZWNvbmQgVFRfTXVsRml4MTQgYXJndW1lbnRzLiBUaGlzIGlzIHJlcXVpcmVkCisJb24gMTYtYml0IHN5c3RlbXMuCisKKzIwMTItMTItMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gTWljcm9vcHRpbWl6YXRpb25zIGluIGJ5dGVjb2RlIGludGVycHJldGVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfRGl2Rml4MTQpOiBOZXcgbWFjcm8uCisJKE5vcm1hbGl6ZSk6IFVzZSBpdCBoZXJlLgorCShDdXJyZW50X1JhdGlvKTogVXNlIFRUX011bEZpeDE0IGluc3RlYWQgb2YgRlRfTXVsRGl2LgorCShJbnNfU0hQSVgpOiBDYW5jZWwgb3V0IHR3byBUVF9NdWxGaXgxNCBjYWxscy4KKworMjAxMi0xMi0wNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBDb3NtZXRpYyBpbXByb3ZlbWVudCBpbiBieXRlY29kZSBpbnRlcnByZXRlci4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IFVzZSBleHBsaWNpdCBjYWxscyB0byBGVF9NdWxEaXYsCisJRlRfTXVsRml4LCBhbmQgRlRfRGl2Rml4IGluc3RlYWQgb2YgbWFjcm9zLgorCisyMDEyLTEyLTAzICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJW3BzaGludGVyXSBDbGFtcCBCbHVlU2NhbGUgdmFsdWUuCisKKwlUaGlzIGlzIFNhdmFubmFoIGJ1ZyAjMzc4NTYuCisKKwkqIHNyYy9wc2hpbnRlci9wc2hnbG9iLmMgKHBzaF9jYWxjX21heF9oZWlnaHQpOiBOZXcgZnVuY3Rpb24uCisJKHBzaF9nbG9iYWxzX25ldyk6IFVzZSBpdCB0byBsaW1pdCBCbHVlU2NhbGUgdmFsdWUgdG8KKwlgMSAvIG1heF9vZl9ibHVlX3pvbmVfaGVpZ2h0cycuCisKKzIwMTItMTItMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZSwgdHlwZTFdIFJldmlzZSB0aGUgdXNlIG9mIEZUX011bERpdi4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYzogVXBkYXRlZC4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuYzogVXBkYXRlZC4KKwkqIHNyYy90eXBlMS90MWxvYWQuYzogVXBkYXRlZC4KKworMjAxMi0xMS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NvbmZpZ3VyZV0gUHJlc2VydmUgY3VzdG9taXplZCBgZnRvcHRpb24uaCcuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IERlbCBNZXJyaXR0IDxkZWxAYWx1bS5taXQuZWR1Pi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyA8Y3BwIGNvbXB1dGF0aW9uIG9mIGJpdCBsZW5ndGg+OiBEb24ndAorCXJlbW92ZSBleGlzdGluZyBGcmVlVHlwZSBjb25maWd1cmF0aW9uIGZpbGVzLgorCisyMDEyLTExLTI5ICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJW3R5cGUxXSBGaXggU2F2YW5uYWggYnVnICMzNzgzMS4KKworCVRoZSBidWcgcmVwb3J0IGFsc28gY29udGFpbnMgYSBwYXRjaC4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCkgPGZvdW5kPjogUmVhbGx5IGZpeAorCWNoYW5nZSBmcm9tIDIwMTItMDktMTcuCisKKzIwMTItMTEtMjggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gRml4IGZvcm1hdHRpbmcgYW5kIHR5cG8uCisKKzIwMTItMTEtMjcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtjaWQsIHR5cGUxLCB0eXBlNDJdIENsZWFuIHVwIHVuaXRzX3Blcl9FTSBjYWxjdWxhdGlvbnMuCisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfcGFyc2VfZm9udF9tYXRyaXgpOiBVcGRhdGVkLgorCSogc3JjL3R5cGUxL3QxbG9hZC5jICh0MV9wYXJzZV9mb250X21hdHJpeCk6IFVwZGF0ZWQuCisJKiBzcmMvdHlwZTQyL3Q0MnBhcnNlLmMgKHQ0Ml9wYXJzZV9mb250X21hdHJpeCk6IFVwZGF0ZWQuCisKKzIwMTItMTEtMjcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtmdHN0cm9rZV0gTWlub3IgaW1wcm92ZW1lbnQuCisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmM6IFJlcGxhY2UgbmVzdGVkIEZUX0RpdkZpeCBhbmQgRlRfTXVsRml4IHdpdGgKKwlGVF9NdWxEaXYuCisKKzIwMTItMTEtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoZnRfdHJpZ19kb3duc2NhbGUpOiBNYWtlIDY0Yml0IHZlcnNpb24gd29yay4KKworMjAxMi0xMS0xNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIEZpeCBpbnRlZ2VyIG92ZXJmbG93cyBpbiBkZDU3MThjN2Q2N2EuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9FbWJvbGRlblhZKTogVXNlIEZUX011bERpdi4KKworMjAxMi0xMS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFRyYWNlIHN0ZW0gd2lkdGhzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMpOiBBZGQgc29tZQorCUZUX1RSQUNFIGNhbGxzLgorCisyMDEyLTExLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBBZGQgc3VwcG9ydCBmb3IgT3BlblR5cGUgQ29sbGVjdGlvbnMgKE9UQykuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogU2VwYXJhdGUgc3ViZm9udCBhbmQgZmFjZQorCWluZGV4IGhhbmRsaW5nIHRvIGxvYWQgYm90aCBwdXJlIENGRnMgd2l0aCBtdWx0aXBsZSBzdWJmb250cyBhbmQKKwlPVENzICh3aXRoIG11bHRpcGxlIGZhY2VzIHdoZXJlIGVhY2ggZmFjZSBob2xkcyBleGFjdGx5IG9uZQorCXN1YmZvbnQpLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBVcGRhdGVkLgorCisyMDEyLTExLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gTWlub3IgaW1wcm92ZW1lbnQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfY29tcHV0ZV9ibHVlX2VkZ2VzKTogRml4CisJbG9vcC4KKworMjAxMi0xMS0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgdHJhY2luZy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50X2VkZ2VzKQorCVtGVF9ERUJVR19MRVZFTF9UUkFDRV06IENvdW50IG51bWJlciBvZiBhY3Rpb25zIGFuZCBlbWl0IHNvbWV0aGluZworCWlmIHRoZXJlIHdlcmVuJ3QgYW55LgorCisyMDEyLTExLTA0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRm9ydGlmeSBlbWJvbGRlbmluZyBjb2RlIGFnYWluc3QgZWdyZWdpb3VzIGRpc3RvcnRpb25zLgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfRW1ib2xkZW5YWSk6IFRocmVzaG9sZCBlbWJvbGRlbmluZworCXN0cmVuZ3RoIHdoZW4gaXQgbGVhZHMgdG8gc2VnbWVudCBjb2xsYXBzZS4KKworMjAxMi0xMS0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2VdIENsZWFuIHVwIGVtYm9sZGVuaW5nIGNvZGUgYW5kIGltcHJvdmUgY29tbWVudHMgdGhlcmUuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9FbWJvbGRlblhZKTogUmVwbGFjZSBzZXF1ZW50aWFsCisJY2FsbHMgdG8gRlRfTXVsRml4IGFuZCBGVF9EaXZGaXggd2l0aCBGVF9NdWxEaXYuCisJTWVudGlvbiB0aGF0IGJpc2VjdG9ycyBhcmUgdXNlZCB0byBmaWd1cmUgb3V0IHRoZSBzaGlmdCBkaXJlY3Rpb24uCisKKzIwMTItMTAtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgc3RhbmRhcmQgY2hhcmFjdGVyIHRvIGBBRl9TY3JpcHRDbGFzc1JlYycgc3RydWN0dXJlLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmggKEFGX1NjcmlwdENsYXNzUmVjKTogQWRkIGBzdGFuZGFyZF9jaGFyJworCW1lbWJlci4KKwkoQUZfREVGSU5FX1NDUklQVF9DTEFTUyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyk6IFVzZSBpdC4KKwkoYWZfbGF0aW5fbWV0cmljc19pbml0LCBhZl9sYXRpbl9zY3JpcHRfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluMl9tZXRyaWNzX2luaXRfd2lkdGhzKTogVXNlIGl0LgorCShhZl9sYXRpbjJfbWV0cmljc19pbml0LCBhZl9sYXRpbjJfc2NyaXB0X2NsYXNzKTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3NfaW5pdF93aWR0aHMpOiBVc2UgaXQuCisJKGFmX2Nqa19tZXRyaWNzX2luaXQsIGFmX2Nqa19zY3JpcHRfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmluZGljLmMJKGFmX2luZGljX21ldHJpY3NfaW5pdCwKKwlhZl9pbmRpY19zY3JpcHRfY2xhc3MpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5oLCBzcmMvYXV0b2ZpdC9hZmxhdGluLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmZHVtbXkuYzogVXBkYXRlZC4KKworMjAxMi0xMC0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE9ubHkgdXNlIFVuaWNvZGUgQ01hcC4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXQpOiBJbXBsZW1lbnQgaXQsIHRvIGJlCisJaW4gc3luYyB3aXRoIGBhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zY3JpcHRfY292ZXJhZ2UnLgorCisyMDEyLTEwLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEltcHJvdmUgcGFyc2luZyBvZiBpbnZhbGlkIG51bWJlcnMuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9TdHJ0b2wpOiBBbHdheXMgcGFyc2UgY29tcGxldGUgbnVtYmVyLAorCWV2ZW4gaW4gY2FzZSBvZiBvdmVyZmxvdy4KKwkoUFNfQ29udl9Ub0ludCk6IE9ubHkgaW5jcmVhc2UgY3Vyc29yIGlmIHBhcnNpbmcgd2FzIHN1Y2Nlc3NmdWwuCisJKFBTX0NvbnZfVG9GaXhlZCk6IERpdHRvLgorCVRyYWNlIHVuZGVyZmxvdyBhbmQgZGF0YSBlcnJvci4KKworMjAxMi0xMC0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gSW1wcm92ZSB0cmFjaW5nLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9zd2VlcCk6IFRyYWNlIGxhc3Qgc3dlZXAgbGluZSBvZgorCWN1cnJlbnQgYmFuZCBhbHNvLgorCisyMDEyLTEwLTIwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIENoZWFwZXIgd2F5IHRvIHRocmVzaG9sZCBhbmdsZXMgYmV0d2VlbiB2ZWN0b3JzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lTRUNUKTogVGhyZXNob2xkaW5nIHRhbmdlbnQgaXMgYSBsb3QKKwljaGVhcGVyIHRoYW4gdGhyZXNob2xkaW5nIHNpbmUuCisKKzIwMTItMTAtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEltcHJvdmUgcGFyc2luZyBvZiBpbnZhbGlkIHJlYWwgbnVtYmVycy4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfcmVhbCk6IEFsd2F5cyBwYXJzZSBjb21wbGV0ZSBudW1iZXIsCisJZXZlbiBpbiBjYXNlIG9mIG92ZXJmbG93IG9yIHVuZGVyZmxvdy4KKwlBbHNvIHRyYWNlIG9uZSBtb3JlIHVuZGVyZmxvdy4KKworMjAxMi0xMC0yMCAgQW5kcmVhcyBQZWhuYWNrICA8YW5kcmVhcy5wZWhuYWNrQG1lLmNvbT4KKworCVtzZm50XSBMb2FkIHB1cmUgQ0ZGIGZvbnRzIHdyYXBwZWQgaW4gU0ZOVCBjb250YWluZXIuCisKKwlTdWNoIGZvbnRzIG9ubHkgaGF2ZSBhIGBjbWFwJyBhbmQgYSBgQ0ZGJyB0YWJsZS4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9mb250X2Rpcik6IERvbid0IGNhbGwKKwlgY2hlY2tfdGFibGVfZGlyJyBpZiBmb250IHNpZ25hdHVyZSBpcyBgT1RUTycuCisKKzIwMTItMTAtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2F1eF0gRml4IHNvbWUgdmFsdWUgb3ZlcmZsb3dzIGFuZCBpbXByb3ZlIHRyYWNpbmcuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgorCShGVF9DT01QT05FTlQpOiBEZWZpbmUuCisJKFBTX0NvbnZfU3RydG9sKTogUmV0dXJuIEZUX0xvbmcuCisJSGFuZGxlIGJhZCBkYXRhIGFuZCBvdmVyZmxvdy4KKwlFbWl0IHNvbWUgdHJhY2luZyBtZXNzYWdlcyBpbiBjYXNlIG9mIGVycm9yLgorCShQU19Db252X1RvSW50KTogUmV0dXJuIEZUX0xvbmcuCisJKFBTX0NvbnZfVG9GaXhlZCk6IFVwZGF0ZWQuCisJKiBzcmMvcHNhdXgvcHNjb252Lmg6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgYHBzY29udicuCisKKzIwMTItMTAtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggYG1ha2UgbXVsdGkgQ0M9YysrJy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jOiBJbmNsdWRlCisJYGFmZ2xvYmFsLmgnLgorCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYzogRml4IG9yZGVyIG9mIGhlYWRlciBmaWxlcy4KKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmM6IEluY2x1ZGUgYGFmZ2xvYmFsLmgnIGFuZCBgYWZlcnJvcnMuaCcuCisKKzIwMTItMTAtMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBtb3JlIHZhbHVlIGVycm9ycyBhbmQgaW1wcm92ZSB0cmFjaW5nLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9pbnRlZ2VyKTogRW1pdCB0cmFjaW5nIG1lc3NhZ2UgaW4KKwljYXNlIG9mIGVycm9yLgorCShjZmZfcGFyc2VfcmVhbCk6IEhhbmRsZSBhbmQgdHJhY2Ugb3ZlcmZsb3csIHVuZGVyZmxvdywgYW5kIGJhZCBkYXRhCisJY29uc2lzdGVudGx5LgorCShkb19maXhlZCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24sIGhhbmRsaW5nIGFuZCB0cmFjaW5nIG92ZXJmbG93LgorCShjZmZfcGFyc2VfZml4ZWQsIGNmZl9wYXJzZV9maXhlZF9zY2FsZWQpOiBVc2UgYGRvX2ZpeGVkJy4KKworMjAxMi0xMC0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBGaXggc29tZSB2YWx1ZSBvdmVyZmxvd3MuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9Ub0ZpeGVkKTogSW1wbGVtZW50IGl0LgorCisyMDEyLTEwLTE3ICBCcmFtIFRhc3N5bnMgIDxCcmFtVEBlbmZvY3VzLmNvbT4KKworCVtjZmZdIEZpeCB2YWx1ZSBvdmVyZmxvdy4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfZml4ZWRfc2NhbGVkKTogSW1wbGVtZW50IGl0LgorCisyMDEyLTEwLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBTYXZhbm5haCBidWcgIzM3NTcyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lTRUNUKTogVXNlIGFuZ2xlIGJldHdlZW4gdmVjdG9ycyB0bworCWF2b2lkIGdyYXppbmcgaW50ZXJzZWN0aW9ucy4gIFRoZSBwcmV2aW91cyB0aHJlc2hvbGQgd2FzIHRvbyBjb2Fyc2UsCisJaW5jb3JyZWN0bHkgcmVqZWN0aW5nIHNob3J0IGJ1dCB2YWxpZCB2ZWN0b3JzLgorCisyMDEyLTA5LTMwICBHaWxsZXMgRXNwaW5hc3NlICA8Zy5lc3BAZnJlZS5mcj4KKworCVJlbW92ZSB1c2VsZXNzIGBybScgZGV0ZWN0aW9uLgorCisJYHJtIC1mJyBpcyBkaXJlY3RseSB1c2VkIGluIHRoZSBgY29uZmlndXJlJyBzY3JpcHQgY3JlYXRlZCBieQorCWF1dG9jb25mLCB0aHVzIG5vIGF2YWlsYWJpbGl0eSB0ZXN0IGlzIG5lY2Vzc2FyeS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAoUk1GKTogUmVtb3ZlIHRlc3QuCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbiAoREVMRVRFKTogVXBkYXRlZC4KKworMjAxMi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1pbm9yIG9wdGltaXphdGlvbi4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWxzLmMgKGFmX2ZhY2VfZ2xvYmFsc19jb21wdXRlX3NjcmlwdF9jb3ZlcmFnZSk6CisJQWRkIGxvb3AgY29uZGl0aW9uLgorCisyMDEyLTA5LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IHRoaW5rby4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9TQ1JJUFQpOgorCXMvQUZfU0NSSVBUX05PTkUvQUZfU0NSSVBUX0RVTU1ZLy4gIFdlIGFscmVhZHkgdXNlIGBBRl9TQ1JJUFRfTk9ORScKKwlhcyBhIGJpdCBtYXNrLgorCisJKiBzcmMvYXV0b2ZpdC9hZmR1bW15LmM6IFVwZGF0ZWQuCisKKzIwMTItMDktMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbXBsZW1lbnQgYGluY3JlYXNlLXgtaGVpZ2h0JyBwcm9wZXJ0eS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmggKEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0KTogTmV3CisJc3RydWN0dXJlLgorCisJKiBpbmNsdWRlL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfcHJvcGVydHlfZ2V0X2ZhY2VfZ2xvYmFscyk6IE5ldworCWZ1bmN0aW9uLCByZS11c2luZyBjb2RlIGZyb20gYGFmX3Byb3BlcnR5X2dldCcuCisJKGFmX3Byb3BlcnR5X3NldCwgYWZfcHJvcGVydHlfZ2V0KTogSGFuZGxlIGBpbmNyZWFzZS14LWhlaWdodCcuCisJVXBkYXRlZC4KKworMjAxMi0wOS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcGxlbWVudCBJbmZpbmFsaXR5J3MgYGluY3JlYXNlIGdseXBoIGhlaWdodHMnLgorCisJVGhpcyBpcyBhbiBpbXByb3ZlZCB2ZXJzaW9uIG9mIGEgc2ltaWxhciBmaXggY29udGFpbmVkIGluIHRoZQorCXNvLWNhbGxlZCBgSW5maW5hbGl0eSBwYXRjaCcsIHRha2VuIGZyb20KKworCSAgaHR0cDovL3d3dy5pbmZpbmFsaXR5Lm5ldC9mZWRvcmEvbGludXgvemlwcy9mcmVldHlwZS1pbmZpbmFsaXR5LTIuNC4xMC0yMDEyMDYxNl8wMS14ODZfNjQudGFyLmJ6MgorCisJd2hpY2ggYWRkcmVzc2VzIHZhcmlvdXMgZW5oYW5jZW1lbnRzIG9mIHRoZSBhdXRvLWhpbnRlci4gIFdpdGhvdXQKKwlwcm9wZXJ0aWVzIHRvIGNvbnRyb2wgYSBtb2R1bGUncyBtZXRhZGF0YSBpdCB3YXNuJ3QgcG9zc2libGUgdG8KKwlhZGFwdCB0aGUgcGF0Y2hlcyBiZWNhdXNlIGV2ZXJ5dGhpbmcgd2FzIG9yaWdpbmFsbHkgY29udHJvbGxlZCBieQorCWVudmlyb25tZW50IHZhcmlhYmxlcyB3aGljaCBJIGNvbnNpZGVyIG5vdCBzdWl0YWJsZSBpbiBnZW5lcmFsLgorCisJQSBwYXRjaCB0byBjb250cm9sIGBpbmNyZWFzZV94X2hlaWdodCcgZm9sbG93cy4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaCAoQUZfUFJPUF9JTkNSRUFTRV9YX0hFSUdIVF9NSU4sCisJQUZfUFJPUF9JTkNSRUFTRV9YX0hFSUdIVF9NQVgpOiBOZXcgbWFjcm9zLgorCShBRl9GYWNlR2xvYmFsc1JlYyk6IEFkZCBgaW5jcmVhc2VfeF9oZWlnaHQnIG1lbWJlci4KKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19uZXcpOiBJbml0aWFsaXplIGl0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKSwKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9tZXRyaWNzX3NjYWxlX2RpbSk6IEltcGxlbWVudAorCWhhbmRsaW5nIG9mIGBpbmNyZWFzZV94X2hlaWdodCcuCisKKzIwMTItMDktMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgaGllcmFyY2hpY2FsIHByb3BlcnR5IGFjY2VzcyB0byBzb21lIHN0cnVjdHVyZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmg6IEluY2x1ZGUgYGFmbW9kdWxlLmgnLgorCShBRl9GYWNlR2xvYmFsc1JlYyk6IEFkZCBgbW9kdWxlJyBtZW1iZXIuCisJKEFGX0ZhY2VHbG9iYWxzKTogVHlwZWRlZiBtb3ZlZCB0by4uLgorCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oOiBIZXJlLgorCShBRl9TY3JpcHRNZXRyaWNzUmVjKTogQWRkIGBnbG9iYWxzJyBtZW1iZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19uZXcsCisJYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc2NyaXB0X2NvdmVyYWdlLAorCWFmX2ZhY2VfZ2xvYmFsc19nZXRfbWV0cmljcyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9yZXNldCksIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMKKwkoYWZfcHJvcGVydHlfZ2V0KTogVXBkYXRlZC4KKworMjAxMi0wOS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBGaXggU2F2YW5uYWggYnVnICMzNzM1MC4KKworCSogc3JjL3R5cGUxL3QxcGFyc2UuYyAoVDFfR2V0X1ByaXZhdGVfRGljdCkgPGZvdW5kPjogQ2hlY2sgZm9yIEFTQ0lJCisJc3RvcmFnZSBvbmx5IGlmIHdlIGFjdHVhbGx5IGhhdmUgYXQgbGVhc3QgZm91ciBieXRlcy4KKworMjAxMi0wOS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcGxlbWVudCBgZmFsbGJhY2stc2NyaXB0JyBwcm9wZXJ0eS4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYzogcy9kZWZhdWx0X3NjcmlwdC9mYWxsYmFja19zY3JpcHQvLgorCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaDogcy9BRl9TQ1JJUFRfREVGQVVMVC9BRl9TQ1JJUFRfRkFMTEJBQ0svLgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jOiBzL2RlZmF1bHRfc2NyaXB0L2ZhbGxiYWNrX3NjcmlwdC8uCisJKGFmX3Byb3BlcnR5X3NldCwgYWZfcHJvcGVydHlfZ2V0KTogSW1wbGVtZW50IGBmYWxsYmFjay1zY3JpcHQnLgorCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuaDogcy9kZWZhdWx0X3NjcmlwdC9mYWxsYmFja19zY3JpcHQvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaDogRG9jdW1lbnQgaXQuCisKKzIwMTItMDktMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBDb3JyZWN0IHByZXZpb3VzIFVuaWNvZGUgNi4xLjAgY2hhbmdlLgorCisJVGhlIGF1dG8taGludGVyJ3MgbGF0aW4gbW9kdWxlIG9ubHkgaGFuZGxlcyBsYXRpbiBsaWdhdHVyZXMgaW4gdGhlCisJYEFscGhhYmV0aWNhbCBQcmVzZW50YXRpb24gRm9ybXMnIGJsb2NrLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3VuaXJhbmdlcyk6IEZpeCBpdC4KKworMjAxMi0wOS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jOiBzL0ZUX0Vycl8vQUZfRXJyXy8uCisKKzIwMTItMDktMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNYWtlIGRlZmF1bHQgc2NyaXB0IGEgZ2xvYmFsIHByb3BlcnR5LgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5oIChBRl9Nb2R1bGVSZWMpOiBBZGQgYGRlZmF1bHRfc2NyaXB0JyBmaWVsZC4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc2NyaXB0X2NvdmVyYWdlLAorCWFmX2ZhY2VfZ2xvYmFsc19uZXcpLCBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfcmVzZXQpLAorCXNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX3Byb3BlcnR5X2dldCkgPGdseXBoLXRvLXNjcmlwdC1tYXA+LAorCWFmX2F1dG9maXR0ZXJfaW5pdDoKKwlIYW5kbGUgZGVmYXVsdCBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmg6IFVwZGF0ZWQuCisKKzIwMTItMDktMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVVzZSBgRlRfTW9kdWxlJyBpbnN0ZWFkIG9mIGBGVF9MaWJyYXJ5JyBhcmd1bWVudCBpbiBwcm9wZXJ0eSBmdW5jcy4KKworCVRoaXMgaW50ZXJuYWwgY2hhbmdlIHNpbXBsaWZpZXMgYWNjZXNzIHRvIGdsb2JhbCBtb2R1bGUgZGF0YS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaAorCShGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMsIEZUX1Byb3BlcnRpZXNfR2V0RnVuYyk6IENoYW5nZSBhY2NvcmRpbmdseS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3Byb3BlcnR5X2RvKSwgc3JjL2F1dG9maXQvYWZtb2R1bGUuYworCShhZl9wcm9wZXJ0eV9zZXQsIGFmX3Byb3BlcnR5X2dldCk6IFVwZGF0ZWQuCisKKzIwMTItMDktMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBVcGRhdGUgdG8gVW5pY29kZSA2LjEuMC4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX3VuaXJhbmdlcyksIHNyYy9hdXRvZml0L2FmbGF0aW4uYworCShhZl9sYXRpbl91bmlyYW5nZXMpOiBBZGQgYW5kIGZpeCByYW5nZXMuCisKKzIwMTItMDktMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBQYXNzIGBBRl9Nb2R1bGUnIGluc3RlYWQgb2YgYEFGX0xvYWRlcicuCisKKwlXZSB3YW50IHRvIGFjY2VzcyB0aGUgKG5vdCB5ZXQgZXhpc3RpbmcpIG1vZHVsZSdzIGdsb2JhbCBkYXRhIGxhdGVyCisJb24uCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmM6IEluY2x1ZGUgYGFmbW9kdWxlLmgnLgorCShhZl9sb2FkZXJfaW5pdCwgYWZfbG9hZGVyX3Jlc2V0LCBhZl9sb2FkZXJfZG9uZSwKKwlhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IENoYW5nZSBhY2NvcmRpbmdseS4KKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKEFGX01vZHVsZVJlYyk6IE1vdmUgdG8gYGFmbW9kdWxlLmgnLgorCVVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmg6IEluY2x1ZGUgYGFmbG9hZGVyLmgnLgorCShBRl9Nb2R1bGVSZWMpOiBEZWZpbmUgaGVyZS4KKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmggKEFGX01vZHVsZSk6IERlZmluZSBoZXJlLgorCVVwZGF0ZWQuCisKKzIwMTItMDktMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggYG1ha2UgbXVsdGknLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIGBhZm1vZHVsZScuCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0guCisJKEZUX0NPTVBPTkVOVCk6IERlZmluZS4KKworMjAxMi0wOS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZm1vZHVsZS5jOiBzL0ZUX0F1dG9maXR0ZXIvQUZfTW9kdWxlLy4KKworMjAxMi0wOS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIE1pbm9yIHJlb3JnYW5pemF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChBRl9TQ1JJUFRfTElTVF9ERUZBVUxULAorCUFGX1NDUklQVF9MSVNUX05PTkUsIEFGX0RJR0lUKTogTW92ZSB0by4uLgorCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuaCAoQUZfU0NSSVBUX0RFRkFVTFQsIEFGX1NDUklQVF9MSVNUX05PTkUsCisJQUZfRElHSVQpOiBUaGlzIGFuZCB1cGRhdGUgY29kZS4KKworMjAxMi0wOS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcGxlbWVudCBgZ2x5cGgtdG8tc2NyaXB0LW1hcCcgcHJvcGVydHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRhdXRvaC5oOiBOZXcgcHVibGljIGhlYWRlciBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfQVVUT0hJTlRFUl9IKTogTmV3IG1hY3JvLgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChBRl9GYWNlR2xvYmFsc1JlYyk6IE1vdmUgc3RydWN0dXJlIHRvLi4uCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5oOiBUaGlzIGhlYWRlciBmaWxlLgorCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYzogSW5jbHVkZSBGVF9BVVRPSElOVEVSX0guCisJKGFmX3Byb3BlcnR5X2dldCk6IEhhbmRsZSBgZ2x5cGgtdG8tc2NyaXB0LW1hcCcuCisKKzIwMTItMDgtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbXBsZW1lbnQgcHJvcGVydGllcyBzZXJ2aWNlIGZyYW1ld29yay4KKworCU5vIHByb3BlcnRpZXMgYXJlIGFkZGVkIHlldC4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSC4KKwkoYWZfcHJvcGVydHlfc2V0LCBhZl9wcm9wZXJ0eV9nZXQpOiBOZXcgZHVtbXkgZnVuY3Rpb25zLgorCShhZl9zZXJ2aWNlX3Byb3BlcnRpZXMsIGFmX3NlcnZpY2VzLCBhZl9nZXRfaW50ZXJmYWNlKTogUHJvdmlkZQorCXNlcnZpY2Ugc2V0dXAuCisJKGF1dG9maXRfbW9kdWxlY2xhc3MpOiBBZGQgc2VydmljZSBpbnRlcmZhY2UuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IEFkZCBuZWNlc3NhcnkgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisJKGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KTogQWRkIGNvZGUgZm9yIHNlcnZpY2UgYWRkaXRpb24uCisJKGF1dG9maXRfbW9kdWxlX3BpY19mcmVlKTogQWRkIGNvZGUgZm9yIHNlcnZpY2UgcmVtb3ZhbC4KKwkqIHNyYy9hdXRvZml0L2FmcGljLmggKEFGX1NFUlZJQ0VTX0dFVCwgQUZfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCk6CisJTmV3IG1hY3JvcyB3aGljaCBwcm92aWRlIG5lY2Vzc2FyeSBzeW50YWN0aWNhbCBzdWdhciBmb3IgUElDCisJc3VwcG9ydC4KKworMjAxMi0wOC0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wbGVtZW50IHByb3BlcnRpZXMgdG8gY29udHJvbCBGcmVlVHlwZSBtb2R1bGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggKEZUX0Vycl9NaXNzaW5nX1Byb3BlcnR5KTogTmV3IGVycm9yCisJY29kZS4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaCAoRlRfUHJvcGVydHlfU2V0LCBGVF9Qcm9wZXJ0eV9HZXQpOgorCU5ldyBBUEkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg6IE5ldyBmaWxlLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gpOiBOZXcKKwltYWNyby4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0guCisJKGZ0X3Byb3BlcnR5X2RvLCBGVF9Qcm9wZXJ0eV9TZXQsIEZUX1Byb3BlcnR5X0dldCk6IE5ldyBmdW5jdGlvbnMuCisKKzIwMTItMDgtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gQWxsb3cgYC0nIGluIHRhZ3MgYW5kIGlkZW50aWZpZXJzLgorCisJKiBzcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weSAocmVfaWRlbnRpZmllciksCisJc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkgKHJlX21hcmt1cF90YWcxLCByZV9tYXJrdXBfdGFnMiwKKwlyZV9jcm9zc3JlZik6IEFkZCBgLScgaW4gcGF0dGVybnMuCisKKzIwMTItMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtGVF9DT05GSUdfT1BUSU9OX1BJQ10gRml4IGcrKyA0LjYuMiBjb21waWxlciB3YXJuaW5ncy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIChGVF9ERUZJTkVfRFJJVkVSKSwKKwlpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9ERUZJTkVfUkVOREVSRVIsCisJRlRfREVGSU5FX01PRFVMRSksIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKKwkoRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMSwgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMiwKKwlGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMzLCBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0LAorCUZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzUsIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzYpLAorCXNyYy9hdXRvZml0L2FmcGljLmMgKGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KSwKKwlzcmMvYmFzZS9iYXNlcGljLmMgKGZ0X2Jhc2VfcGljX2luaXQpLCBzcmMvYmFzZS9mdGluaXQuYworCShmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyksIHNyYy9jZmYvY2ZmcGFyc2UuYworCShGVF9DcmVhdGVfQ2xhc3NfY2ZmX2ZpZWxkX2hhbmRsZXJzKSwgc3JjL2NmZi9jZmZwaWMuYworCShjZmZfZHJpdmVyX2NsYXNzX3BpY19pbml0KSwgc3JjL3BzaGludGVyL3BzaHBpYy5jCisJKHBzaGludGVyX21vZHVsZV9jbGFzc19waWNfaW5pdCksIHNyYy9wc25hbWVzL3BzcGljLmMKKwkocHNuYW1lc19tb2R1bGVfY2xhc3NfcGljX2luaXQpLCBzcmMvcmFzdGVyL3Jhc3RwaWMuYworCShmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KSwgc3JjL3NmbnQvc2ZudHBpYy5jCisJKHNmbnRfbW9kdWxlX2NsYXNzX3BpY19pbml0KSwgc3JjL3NmbnQvdHRjbWFwLmMKKwkoRlRfQ3JlYXRlX0NsYXNzX3R0X2NtYXBfY2xhc3NlcyksIHNyYy9zbW9vdGgvZnRzcGljLmMKKwkoZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KSwgc3JjL3RydWV0eXBlL3R0cGljLmMKKwkodHRfZHJpdmVyX2NsYXNzX3BpY19pbml0KTogSW5pdGlhbGl6ZSBhbGxvY2F0aW9uIHZhcmlhYmxlLgorCisyMDEyLTA4LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBjb21waWxhdGlvbiB3YXJuaW5nLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChJU19ISU5URUQpOiBNb3ZlIG1hY3JvIHRvLi4uCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmg6IFRoaXMgaGVhZGVyIGZpbGUuCisKKzIwMTItMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0LCBjZmYsIHBzaGludGVyLCBwc25hbWVzXSBNb3JlIHJlbmFtaW5ncyBmb3Igb3J0aG9nb25hbGl0eS4KKworCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYywgc3JjL2F1dG9maXQvYWZwaWMuaDoKKwlzL0FGX0FVVE9GSVRURVJfL0FGXy8uCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYywgc3JjL2NmZi9jZmZvYmpzLmMsIHNyYy9jZmYvY2ZmcGFyc2UuYywKKwlzcmMvY2ZmL2NmZnBpYy5oOiBzL0ZUX0NGRl8vQ0ZGXy8uCisKKwkqIHNyYy9wc2hpbnRlci9wc2htb2QuYywgc3JjL3BzaGludGVyL3BzaHBpYy5oOgorCXMvRlRfUFNISU5URVJfL1BTSElOVEVSXy8uCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMsIHNyYy9wc25hbWVzL3BzcGljLmg6CisJcy9GVF9QU0NNQVBTL1BTQ01BUFNfLy4KKworMjAxMi0wOC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnQsIHRydWV0eXBlXSBNb3JlIHJlbmFtaW5ncyBmb3Igb3J0aG9nb25hbGl0eS4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYywgc3JjL3NmbnQvc2ZudHBpYy5oLCBzcmMvc2ZudC90dGNtYXAuYywKKwlzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYywgc3JjL3RydWV0eXBlL3R0cGljLmg6IHMvRlRfU0ZOVF8vU0ZOVF8vLAorCXMvRlRfVFRfL1RUXy8sIHMvR0VUX0NNQVBfSU5GT19HRVQvQ01BUF9JTkZPX0dFVC8uCisKKzIwMTItMDgtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBTb21lIG1hY3JvIGFuZCB2YXJpYWJsZSByZW5hbWluZ3MgZm9yIG9ydGhvZ29uYWxpdHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaCwgc3JjL2Jhc2UvZnRvYmpzLmMsCisJc3JjL2F1dG9maXQvYWZtb2R1bGUuYywgc3JjL2F1dG9maXQvYWZwaWMuYywgc3JjL2F1dG9maXQvYWZwaWMuaDoKKwlzL1NFUlZJQ0UvSU5URVJGQUNFLywgcy9zZXJ2aWNlL2ludGVyZmFjZS8sIHMvU2VydmljZS9JbnRlcmZhY2UvLgorCisyMDEyLTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzNzE3OC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IEluaXRpYWxpemUgYGVycm9yJyB3aXRoCisJYEZUX0Vycl9NaXNzaW5nX01vZHVsZScgYmVmb3JlIGxvb3AgdG8gaW5kaWNhdGUgYG5vIHZhbGlkIGRyaXZlcnMnLgorCisyMDEyLTA4LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X09ibGlxdWUpOiBGaXggc2hlYXIgYW5nbGUuCisKKwlUaGUgb2xkIHZhbHVlIHdhcyBmYXIgdG9vIGxhcmdlIChtb3JlIHRoYW4gMjDCsCkuICBUaGUgbmV3IG9uZQorCWNvcnJlc3BvbmRzIHRvIDEywrAsIHF1aXRlIGNvbW1vbiBpbiB0eXBvZ3JhcGh5LgorCisyMDEyLTA4LTEyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBGaXggU2F2YW5uYWggYnVnICMzNzAxNy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2N1YmljKTogVXNlIGEgZGlmZmVyZW50IHNldCBvZgorCWNoZWNrcyB3aGVuIGRldGVjdGluZyBzdXBlciBjdXJ2eSBzcGxpbmVzIHRvIGJlIHNwbGl0LgorCisyMDEyLTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW1wcm92ZSByZWNvZ25pdGlvbiBvZiBmbGF0IHNlZ21lbnRzLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBCcmFkIER1bnplciA8QkR1bnplckBleHRlbnNpcy5jb20+LgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IFdlIGhhdmUKKwlhIGZsYXQgc2VnbWVudCBpZiB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBvZiBiZXN0IG9uLXBvaW50cyBpcworCWxhcmdlciB0aGFuIGEgZ2l2ZW4gdGhyZXNob2xkLgorCisyMDEyLTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gVmFyaWFibGUgcmVuYW1pbmdzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IFJlcGxhY2UKKwlgZ2x5cGgnIHdpdGggYG91dGxpbmUnLgorCXMvYmVzdF9maXJzdC9iZXN0X2NvbnRvdXJfZmlyc3QvLgorCXMvYmVzdF9sYXN0L2Jlc3RfY29udG91cl9sYXN0Ly4KKworMjAxMi0wNy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBGaXggU2F2YW5uYWggYnVnICMzNzAwMC4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9lbmNvZGluZyk6IEZpeCBvcmRlciBvZiBjaGVja3MuCisKKzIwMTItMDctMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2F1eF0gRml4IFNhdmFubmFoIGJ1ZyAjMzY4MzMuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MW9wZXJhdG9yX3NlYWMpOiBgc2VhYycgaXMgbm90IGEgdmFsaWQKKwlvcGVyYXRvciBpZiB3ZSB3YW50IG1ldHJpY3Mgb25seS4KKworMjAxMi0wNy0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBGaXggU2F2YW5uYWggYnVnICMzNjgzMi4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyk6IFJlamVjdCBuZWdhdGl2ZSBudW1iZXIgb2YKKwlnbHlwaHMuCisKKzIwMTItMDctMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IFNhdmFubmFoIGJ1ZyAjMzY4MjkuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZW5jb2RpbmcpOiBDaGVjayBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIKKwljYWxsIHRvIFQxX1NraXBfUFNfVG9rZW4uCisKKzIwMTItMDctMTIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVJldmVydCB0aGUgbGFzdCBjb21taXQgNDUzMzdiMDcuCisKKwkqIHNyYy9iYXNlL2Z0c3Ryb2tlLmMgKEZUX1N0cm9rZXJfTmV3KTogUmV2ZXJ0IHRoZSBwcmV2aW91cyBjaGFuZ2UuCisKKzIwMTItMDctMTEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtmdHN0cm9rZV0gRml4IHVuaW5pdGlhbGl6ZWQgcmV0dXJuIHZhbHVlLgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyX05ldyk6IFJldHVybiBGVF9FcnJfT2sgaW5zdGVhZC4KKworMjAxMi0wNy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gQXZvaWQgbWVtb3J5IGxlYWsgaW4gY2FzZSBvZiBmYWlsdXJlLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IFVzZSBmbGFncyB0bworCWluZGljYXRlIHdoYXQgdG8gY2xlYW4gdXAgYWZ0ZXIgZmluaXNoaW5nIHRoZSBmdW5jdGlvbiwgd2l0aCBhbmQKKwl3aXRob3V0IGVycm9ycy4KKworMjAxMi0wNy0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbXBpbGF0aW9uIHdpdGggTVNWQyA1LjAuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFBldGVyIEJyZWl0ZW5sb2huZXIgYW5kIEFraXJhIEtha3V0by4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoZnRfc2V0am1wKTogVXBkYXRlZC4KKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9mYWNlX2J1aWxkX2NtYXBzKTogUmVtb3ZlIGNhc3QuCisKKzIwMTItMDctMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbXByb3ZlIGRlYnVnZ2luZyBtZXNzYWdlczsgZG8gc29tZSBjb2RlIGNsZWFudXAuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fYWxpZ25fbGlua2VkX2VkZ2UsCisJYWZfbGF0aW5faGludF9lZGdlcyk6IFN5bmNocm9uaXplIHdpdGggZm9ybWF0dGluZyB1c2VkIGluIHRoZQorCXR0ZmF1dG9oaW50IHByb2plY3QuCisKKzIwMTItMDctMDcgIEdpbGxlcyBFc3BpbmFzc2UgIDxnLmVzcEBmcmVlLmZyPgorCisJRml4IHN0cmljdC1hbGlhc2luZyB3YXJuaW5nLgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dseXBoX1RvX0JpdG1hcCk6IEF2b2lkIGRvdWJsZSBjYXN0LgorCisyMDEyLTA3LTA3ICBEYXZlIFRob21hcyAgPGRhdmUudGhvbWFzQG1ldGFmb3JpYy5jb20+CisKKwlbQVJNXSBGaXggRlRfTXVsRml4X2FybS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCAoRlRfTXVsRml4X2FybSkgW19fYXJtX19dOgorCUF2b2lkIEFERFMgaW5zdHJ1Y3Rpb24gdG8gY2xvYmJlciBjb25kaXRpb24gY29kZXMuCisKKzIwMTItMDctMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBEbyBzb21lIGNvZGUgY2xlYW51cC4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX25ldyk6IFNpbXBsaWZ5LgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmM6IFVzZSBgRlRfVFJBQ0U3JyBpbnN0ZWFkIG9mIGBwcmludGYnCisJZXZlcnl3aGVyZS4KKwkoRlRfQ09NUE9ORU5UKTogTmV3IG1hY3JvLgorCShhZl9nbHlwaF9oaW50c19kb25lKTogU2ltcGxpZnkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBVcGRhdGVkLgorCisyMDEyLTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW1wcm92ZSBvdXRwdXQgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMpOiBQcmludCBtb3JlCisJZGF0YTsgcmVwb3J0IG5vIGRhdGEuCisJKGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMpOiBSZXBvcnQgbm8gZGF0YS4KKworMjAxMi0wNy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBTYXZhbm5haCBidWcgIzM2MDkxLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyksCisJc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX21ldHJpY3NfaW5pdF9ibHVlcyk6IENoYW5nZSB0aGUKKwljb25zdHJhaW50IGZvciB0ZXN0aW5nIHJvdW5kIHZzLiBmbGF0IHNlZ21lbnQ6IEFjY2VwdCBlaXRoZXIgYQorCXNtYWxsIGRpc3RhbmNlIG9yIGEgc21hbGwgYW5nbGUuCisKKzIwMTItMDctMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBCZWF1dGlmeSBibHVlIHpvbmUgdHJhY2luZy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfYmx1ZXMpLAorCXNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9tZXRyaWNzX2luaXRfYmx1ZXMpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTItMDctMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBRdWFudGl6ZSBzdGVtIHdpZHRocy4KKworCSogc3JjL2F1dG9maXQvYWZhbmdsZXMuYyAoYWZfc29ydF93aWR0aHMpOiBSZW5hbWUgdG8uLi4KKwkoYWZfc29ydF9hbmRfcXVhbnRpemVfd2lkdGhzKTogVGhpcy4KKwlBZGQgY29kZSB0byBhdm9pZCBzdGVtIHdpZHRocyB3aGljaCBhcmUgYWxtb3N0IGlkZW50aWNhbC4KKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCwgc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvYXV0b2ZpdC9hZmNqay5jOgorCVVwZGF0ZWQuCisKKzIwMTItMDctMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBNaW5vciBzcGVlZC11cC4KKworCSogc3JjL2F1dG9maXQvYWZhbmdsZXMgKGFmX3NvcnRfcG9zLCBhZl9zb3J0X3dpZHRocyk6IERvbid0IHN3YXAKKwllbGVtZW50cyBpZiB0aGV5IGFyZSBlcXVhbC4KKworMjAxMi0wNi0zMCAgR2lsbGVzIEVzcGluYXNzZSAgPGcuZXNwQGZyZWUuZnI+CisKKwlGaXggYGNoZWNraW5nIGlmIGdjYyBzdGF0aWMgZmxhZyAtc3RhdGljIHdvcmtzJyB0ZXN0LgorCisJT24gbXkgbGludXggYnVpbGQgdHJlZSwgSSByZWNlaXZlIHllcyBhbnN3ZXIgaW4gaW4gZXZlcnkgcGFja2FnZSBJCisJYnVpbGQgZXhjZXB0IGZyZWV0eXBlIGZvciB0aGlzIHRlc3QgY2hlY2tpbmcgaWYgZ2NjIHN0YXRpYyBmbGFnCisJYC1zdGF0aWMnIHdvcmtzCisKKwlPbiBmcmVldHlwZSwgbm8gaXMgcmVjZWl2ZWQsIHVubGVzcyBiemlwMiBhbmQgemxpYiBhcmUgZGlzYWJsZWQgdXNpbmcKKworCSAgLi9jb25maWd1cmUgLS13aXRob3V0LWJ6aXAyIC0td2l0aG91dC16bGliCisKKwlUaGUgcmVhc29uIGlzIHRoYXQgYnppcDIgYW5kIHpsaWIgdGVzdHMgYWRkIGAtbHonIGFuZCBgLWxiejInIHRvCisJTERGTEFHUyBhbmQgdGhpcyBicm9rZSBzdGF0aWMgZmxhZyB0ZXN0LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBVcGRhdGUgQ0ZMQUdTIGFuZCBMREZMQUdTIG9ubHkgYWZ0ZXIKKwlMVF9JTklUIGhhcyBydW4uCisKKzIwMTItMDYtMjggIEluZmluYWxpdHkgIDxpbmZpbmFsaXR5QGluZmluYWxpdHkubmV0PgorCisJW3RydWV0eXBlXSBGaXggdmFyaW91cyBhcnRpZmFjdHMuCisKKwlWZXJkYW5hIHdhcyBicm9rZW4gaW4gdGhlIG9yaWdpbmFsIEluZmluYWxpdHkgY29tbWl0LiAgQWxzbworCWluY2x1ZGVzIG90aGVyIG1pbm9yIGZpeGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaDogVXBkYXRlZC4gIFJlbW92ZWQgdW51c2VkIG1hY3Jvcy4KKwkoUkFTVEVSSVpFUl8zNV9SdWxlcyk6IEFkZCBWZXJkYW5hLgorCShTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMpOiBBZGQgVGFob21hIGBzJy4KKwkoTUlSUF9DVlRfWkVST19SdWxlcyk6IFJlbW92ZSBWZXJkYW5hLgorCShBTFdBWVNfU0tJUF9ERUxUQVBfUnVsZXMpOiBBZGQgUnVzc2lhbiBjaGFyIDB4NDM4LgorCShDT01QQVRJQkxFX1dJRFRIU19SdWxlcyk6IFJlYXJyYW5nZSBzb21lIHJ1bGVzLgorCShYX1NDQUxJTkdfUnVsZXMpOiBBZGp1c3QgVmVyZGFuYSBgYScgYXQgMTIgYW5kIDEzIHBwZW0uCisKKwkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5jOiBVcGRhdGVkLgorCShzcGhfc2V0X3R3ZWFrcyk6IFJlLWV4ZWN1dGUgZnBnbSBhbHdheXMuCisKKzIwMTItMDYtMjggIEdpbGxlcyBFc3BpbmFzc2UgIDxnLmVzcEBmcmVlLmZyPgorCisJRml4IENGTEFHUyBhbmQgTERGTEFHUyBzaGFyZSBjb25maWd1cmUgdGVzdC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogRml4IHR5cG8uCisKKzIwMTItMDYtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gU2V0IHRoZSBgc3VicGl4ZWxfcG9zaXRpb25lZCcgZmxhZyB1bmNvbmRpdGlvbmFsbHkuCisKKwlUaGlzIGlzIGhvdyB0aGUgY29kZSBjdXJyZW50bHkgYmVoYXZlcy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfbG9hZGVyX2luaXQpOiBEbyBpdC4KKworMjAxMi0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvYmFzZS9iYXNlcGljLmM6IFVzZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUy4KKworMjAxMi0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChGVF9NdWxEaXZfTm9fUm91bmQpOiBEb24ndAorCWVuY2xvc2Ugd2l0aCBgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSJzsgd2Ugbm93IG5lZWQgdGhlIGZ1bmN0aW9uCisJZWxzZXdoZXJlIGFsc28uCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmg6IFVzZSBBRl9DT05GSUdfT1BUSU9OX0NKSy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfbG9hZGVyX2luaXQpOiBGaXggY29tcGlsZXIgd2FybmluZy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NU0lSUCk6IEZpeCBjb21waWxlciB3YXJuaW5nLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaDogVXNlCisJVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUi4KKworMjAxMi0wNi0yNiAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSB1bnVzZWQgcm91bmRpbmcgZnVuY3Rpb25hbGl0eS4KKworCVRoZSBzdWJwaXhlbCBoaW50aW5nIHBhdGNoIGNvbnRhaW5lZCB0aGUgY29uY2VwdCBvZiBhbiBhZGp1c3RhYmxlCisJbnVtYmVyIG9mIGdyaWRsaW5lcyBwZXIgcGl4ZWwuICBUaGlzIGlzIG5vIGxvbmdlciB1c2VkIGR1ZSB0byB4CisJYmVpbmcgY29tcGxldGVseSBpZ25vcmVkIGluc3RlYWQuICBUaGlzIHdpbGwgcmV0dXJuIHNvbWUgb2YgdGhlCisJY29kZSB0byBpdHMgZXhpc3Rpbmcgc3RhdGUgcHJpb3IgdG8gdGhlIG9yaWdpbmFsIEluZmluYWxpdHkKKwljb21taXQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1BJWF9GTE9PUl9HUklELAorCUZUX1BJWF9ST1VORF9HUklELCBGVF9QSVhfQ0VJTF9HUklEKTogUmVtb3ZlZC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IFVwZGF0ZWQuCisJKFJvdW5kX05vbmUsIFJvdW5kX1RvX0dyaWQsIFJvdW5kX1RvX0hhbGZfR3JpZCwgUm91bmRfRG93bl9Ub19HcmlkLAorCVJvdW5kX1VwX1RvX0dyaWQsIFJvdW5kX1RvX0RvdWJsZV9HcmlkLCBSb3VuZF9TdXBlciwgUm91bmRfU3VwZXJfNDUsCisJU2V0U3VwZXJSb3VuZCk6IFJlbW92ZSBwYXJhbWV0ZXIgdG8gaGFuZGxlIHRoZSBudW1iZXIgb2YgZ3JpZCBsaW5lcyBwZXIKKwlwaXhlbC4KKwkoU0VUX1N1cGVyUm91bmQsIFJPVU5EX05vbmUsIENVUl9GdW5jX3JvdW5kKTogVXBkYXRlZC4KKwkoRE9fU1JPVU5ELCBET1M0NVJPVU5ELCBET19PREQsIERPX0VWRU4pOiBVcGRhdGVkLgorCShET19ST1VORCwgRE9fTlJPVU5EKTogVXBkYXRlZC4KKwkoTW92ZV9acDJfUG9pbnQsIEluc19TSFBJWCwgSW5zX01TSVJQLCBJbnNfTURBUCwgSW5zX01JQVAsCisJSW5zX01EUlAsIEluc19NSVJQKTogUGVyZm9ybSBSb3VuZF9Ob25lIGluc3RlYWQgb2YgY2FsbGluZyBhIG1vZGlmaWVkCisJcm91bmRpbmcgZnVuY3Rpb24uICBSZW1vdmUgZ3JpZGxpbmVzX3Blcl9waXhlbC4gIENyZWF0ZSBhIGxvY2FsCisJdmFyaWFibGUgdG8gc3RvcmUgY29udHJvbCB2YWx1ZSBjdXRpbi4gU2ltcGxpZnkgdGhlIGNvbmRpdGlvbmFsIGZvcgorCWlnbm9yZV94X21vZGUuICBBZGp1c3Qgcm91bmRpbmcgY2FsbHMgdG8gcGFzcyBvbmx5IHR3byB2YWx1ZXMuCisKKzIwMTItMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBTYXZhbm5haCBidWcgIzM2NzA1LgorCisJSGFuZGxlIG51bWJlcnMgbGlrZSAyLjAwMSBjb3JyZWN0bHkuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX3JlYWwpOiBBdm9pZCBuZWdhdGl2ZSB2YWx1ZXMgZm9yCisJYHNoaWZ0Jy4KKworMjAxMi0wNi0xOCAgSW5maW5hbGl0eSAgPGluZmluYWxpdHlAaW5maW5hbGl0eS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIFN1cHBvcnQgc3VicGl4ZWwgaGludGluZy4KKworCVRoaXMgaXMgdGhlIGxhcmdlLCBmYW1vdXMgYEluZmluYWxpdHknIHBhdGNoIHRvIHN1cHBvcnQgQ2xlYXJUeXBlCisJYnl0ZWNvZGUgd2hpY2ggaGFzIGJlZW4gYXZhaWxhYmxlIGZyb20KKwlodHRwOi8vd3d3LmluZmluYWxpdHkubmV0L2Jsb2cvIGZvciBzb21lIHRpbWUsIGFuZCB3aGljaCBoYXMgYmVlbgorCXJlZmluZWQgb3ZlciB0aGUgbGFzdCB5ZWFycy4gIFdoaWxlIHN0aWxsIGV4cGVyaW1lbnRhbCwgaXQgaXMgbm93CisJbWF0dXJlIGVub3VnaCB0byBiZSBpbmNsdWRlZCBkaXJlY3RseSBpbnRvIEZyZWVUeXBlLgorCisJTW9zdCBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiB0aGUgQ2xlYXJUeXBlIHdoaXRlcGFwZXIgd3JpdHRlbiBieQorCUdyZWcgSGl0Y2hjb2NrCisKKwkgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4CisKKwl3aGljaCBnaXZlcyBhIGRldGFpbGVkIG92ZXJ2aWV3IG9mIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyB0byB0aGUKKwlNaWNyb3NvZnQgcmFzdGVyaXplciBzbyB0aGF0IG9sZGVyIGZvbnRzIGFyZSBzdXBwb3J0ZWQuICBIb3dldmVyLCBhCisJbG90IG9mIGRldGFpbHMgYXJlIHN0aWxsIG1pc3NpbmcsIGFuZCB0aGlzIHBhdGNoZXMgcHJvdmlkZXMgYQorCWZyYW1ld29yayB0byBlYXNpbHkgaGFuZGxlIHJlbmRlcmluZyBpc3N1ZXMgZG93biB0byB0aGUgZ2x5cGggbGV2ZWwKKwlvZiBjZXJ0YWluIGZvbnRzLgorCisJTm90ZSB0aGF0IENsZWFyVHlwZSBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZWx5IGltcGxlbWVudGVkISAgSW4KKwlwYXJ0aWN1bGFyLCBmdWxsIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25zIGBjb21wYXRpYmxlX3dpZHRocycsCisJYHN5bW1ldHJpY2FsX3Ntb290aGluZywgYW5kIGBiZ3InICh2aWEgdGhlIEdFVElORk8gYnl0ZWNvZGUKKwlpbnN0cnVjdGlvbikgaXMgbWlzc2luZy4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmM6IE5ldyBmaWxlLCBwcm92aWRpbmcgY29kZSB0byBoYW5kbGUKKwlgdHdlYWtzJywgdGhpcyBpcywgcnVsZXMgZm9yIGNlcnRhaW4gZ2x5cGhzIGluIGNlcnRhaW4gZm9udHMKKwkoaW5jbHVkaW5nIHdpbGRjYXJkcykgd2hpY2ggbmVlZCBhIHNwZWNpYWwgdHJlYXRtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaDogTmV3IGZpbGUsIGhvbGRpbmcgdGhlIHR3ZWFraW5nIHJ1bGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCBzcmMvZGV2ZWwvZnRvcHRpb24uaAorCShUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1BJWF9GTE9PUl9HUklELAorCUZUX1BJWF9ST1VORF9HUklELCBGVF9QSVhfQ0VJTF9HUklEKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL3RydWV0eXBlL3RydWV0eXBlLmMgW1RUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUl06IEluY2x1ZGUKKwlgdHRzdWJwaXguYycuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmM6IEluY2x1ZGUgYHR0c3VicGl4LmgnLgorCVtBbGwgY2hhbmdlcyBiZWxvdyBhcmUgZ3VhcmRlZCBieSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcuXQorCisJKHR0X2dldF9tZXRyaWNzKTogU2V0IHR3ZWFrIGZsYWdzLgorCShUVF9IaW50X0dseXBoKTogQ2FsbCBgRlRfT3V0bGluZV9FbWJvbGRlblhZJyBpZiBuZWNlc3NhcnkuCisJKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoKTogQ29tcGVuc2F0ZSBlbWJvbGRlbmluZyBpZiBuZWNlc3NhcnkuCisJKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IEhhbmRsZSBgY29tcGF0aWJsZSB3aWR0aHMnIG9wdGlvbi4KKwkodHRfbG9hZGVyX2luaXQpOiBIYW5kbGUgQ2xlYXJUeXBlIEdFVElORk8gaW5mb3JtYXRpb24gYml0cy4KKworCSogc3JjL3RydWV0eXBlL3J1bGVzLm1rIChUVF9EUkNfU1JDKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IEluY2x1ZGUgYHR0c3VicGl4LmgnLgorCVtXaGVyZSBuZWNlc3NhcnksIGNoYW5nZXMgYmVsb3cgYXJlIGd1YXJkZWQgYnkKKwlUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcuXQorCisJKERpcmVjdF9Nb3ZlLCBEaXJlY3RfTW92ZV9YKTogRXh0ZW5kZWQuCisJKFJvdW5kX05vbmUsIFJvdW5kX1RvX0dyaWQsIFJvdW5kX1RvX0hhbGZfR3JpZCwgUm91bmRfRG93bl9Ub19HcmlkLAorCVJvdW5kX1VwX1RvX0dyaWQsIFJvdW5kX1RvX0RvdWJsZV9HcmlkLCBSb3VuZF9TdXBlciwgUm91bmRfU3VwZXJfNDUsCisJU2V0U3VwZXJSb3VuZCk6IEFkZCBwYXJhbWV0ZXIgdG8gaGFuZGxlIHRoZSBudW1iZXIgb2YgZ3JpZCBsaW5lcyBwZXIKKwlwaXhlbC4KKwkoU0VUX1N1cGVyUm91bmQsIFJPVU5EX05vbmUsIENVUl9GdW5jX3JvdW5kKTogVXBkYXRlZC4KKwkoRE9fU1JPVU5ELCBET1M0NVJPVU5ELCBET19PREQsIERPX0VWRU4pOiBVcGRhdGVkLgorCShET19ST1VORCwgRE9fTlJPVU5EKTogVXBkYXRlZC4KKwkoRE9fUlMpOiBUYWtlIGNhcmUgb2YgYFR5cGVtYW4nIGJ5dGVjb2RlIHBhdHRlcm5zLgorCShJbnNfRkRFRik6IEFkZCBzb21lIGRlYnVnZ2luZyBjb2RlLiAgQ29tbWVudGVkIG91dC4KKwkoSW5zX0VOREYpOiBSZXN0b3JlIHN0YXRlLgorCShJbnNfQ0FMTCwgSW5zX0xPT1BDQUxMKTogSGFuZGxlIGlubGluZSBkZWx0YSBmdW5jdGlvbnMuCisJKEluc19NRCk6IEhhbmRsZSBgVmFjdWZvcm0nIHJvdW5kcy4KKwkoTW92ZV9acDJfUG9pbnQsIEluc19TSFBJWCwgSW5zX01TSVJQLCBJbnNfTURBUCwgSW5zX01JQVAsCisJSW5zX01EUlAsIEluc19NSVJQKTogSGFuZGxlIHR3ZWFrcy4KKwkoSW5zX0FMSUdOUlApOiBBZGQgdHdlYWsgZ3VhcmQuCisJKEluc19JVVAsIEluc19ERUxUQVApOiBIYW5kbGUgdHdlYWtzLgorCShJbnNfR0VUSU5GTyk6IEhhbmRsZSBuZXcgQ2xlYXJUeXBlIGJpdHMuCisJKFRUX1J1bklucyk6IEhhbmRsZSB0d2Vha3MuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oOiBVcGRhdGVkLgorCShTUEhfVHdlYWtSdWxlLCBTUEhfU2NhbGVSdWxlKTogTmV3IHN0cnVjdHVyZXMgZm9yIHR3ZWFrcy4KKwkoVFRfRXhlY0NvbnRleHRSZWMpOiBBZGQgbWVtYmVycyBmb3Igc3VicGl4ZWwgaGludGluZyBzdXBwb3J0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX0RlZlJlY29yZCk6IEFkZCBgaW5saW5lX2RlbHRhJyBtZW1iZXIuCisKKzIwMTItMDYtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjQuMTAgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTEwJy4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjQuMTAuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwKKwlidWlsZHMvd2luMzIvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMDgvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLCBidWlsZHMvd2luMzIvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLCBidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjQuOS8yLjQuMTAvLCBzLzI0OS8yNDEwLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDE1OjA6OS4KKworMjAxMi0wNi0xNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdHN5bnRoLmMgKEZUX0dseXBoU2xvdF9FbWJvbGRlbik6IEltcHJvdmUgc3BhY2luZy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDEyLTA2LTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJKiBidWlsZHMvZXhwb3J0cy5tazogQWRkIENDZXhlX0NGTEFHUyBhbmQgQ0NleGVfTERGTEFHUy4KKworCXRvIHBhc3Mgc3BlY2lhbCBjb21waWxlci9saW5rZXIgZmxhZ3MgdW5kZXIgY3Jvc3MgZGV2ZWxvcG1lbnQuCisJU3VnZ2VzdGVkIGJ5IFNhdmFubmFoIGJ1ZyAjMzYzNjcuCisKKwlDaGFuZ2VMb2cgb24gMjAxMC0wNy0xNSBzYXlpbmcgYXMgdGhleSB3ZXJlIHJlbW92ZWQgd2FzIHdyb25nCisJZm9yIHRoZSBvZmZpY2lhbCB0cnVuayBvZiBGcmVlVHlwZTIuICBUaGlzIGNvbW1pdCBpcyB0aGUgZmlyc3QKKwlpbnRyb2R1Y3Rpb24gb2YgdGhlbS4KKworMjAxMi0wNi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTItMDYtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbdHJ1ZXR5cGVdIEFkZCBuZXcgdmVyc2lvbnMgb2YgTkVDIEZBIGZhbWlseSB0byB0cmlja3kgZm9udCBsaXN0LgorCisJTkVDIEZBIGZhbWlseSBkYXRlZCBpbiAxOTk2IGhhdmUgZGlmZmVyZW50IGNoZWNrc3VtLgorCVJlcG9ydGVkIGJ5IEpvaG5zb24gWS4gWWFuIDx5aW5zZW5feWFuQGZveGl0c29mdHdhcmUuY29tPjsgc2VlCisKKwkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEyLTA2L21zZzAwMDIzLmh0bWwKKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzX3NmbnRfaWRzKTogNCBzZXRzCisJb2YgZnBnbSAmIHByZXAgdGFibGUgY2hlY2tzdW1zIGZvciBGQS1Hb3RoaWMsIEZBLU1pbmNob3UsCisJRkEtUm91bmRlZEdvdGhpY00sIEZBLVJvdW5kZWRHb3RoaWNCIGFyZSBhZGRlZC4gIFRoZSBmYW1pbHkKKwluYW1lcyBpbiBzYW1wbGUgUERGIGFyZSB0cnVuY2F0ZWQsIHRodXMgdGhlIGxpc3Qgb2YgdGhlCisJZmFtaWx5IG5hbWVzIGluIHR0X2NoZWNrX3RyaWNreW5lc3NfZmFtaWx5KCkgaXMgbm90IHVwZGF0ZWQgeWV0LgorCisyMDEyLTA2LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZnRyYXN0ZXJdIEZpeCByb3VuZGluZyBpc3N1ZSBjYXVzaW5nIHZpc3VhbCBhcnRpZmFjdHMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IGpvbGEgPGhhbnMtam9jaGVuLmxhdUBsaHN5c3RlbXMuY29tPjsgc2VlCisKKwkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEyLTA1L21zZzAwMDM2Lmh0bWwKKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChTTXVsRGl2X05vX1JvdW5kKTogTmV3IG1hY3JvLgorCShMaW5lX1VwKTogVXNlIGl0LgorCSogc3JjL3Jhc3Rlci9mdG1pc2MuaCAoRlRfTXVsRGl2X05vX1JvdW5kKTogQ29waWVkIGZyb20gYGZ0Y2FsYy5jJy4KKworMjAxMi0wNS0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogU2ltcGxpZnkuCisKKwlXZSBub3cgdXNlIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSBkaXJlY3Rpb24gdmVjdG9ycyB0byBjb21wdXRlIHRoZQorCW91dGxpbmUncyBvcmllbnRhdGlvbi4KKworMjAxMi0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTItMDUtMjggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCU5ldyBmdW5jdGlvbiBGVF9PdXRsaW5lX0VtYm9sZGVuWFkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oIChGVF9PdXRsaW5lX0VtYm9sZGVuWFkpOiBEZWZpbmUgaXQuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9FbWJvbGRlblhZKTogSW1wbGVtZW50IGl0LCB1c2luZyBhCisJc2ltcGxpZmllZCBlbWJvbGRpbmcgYWxnb3JpdGhtLgorCShGVF9PdXRsaW5lX0VtYm9sZGVuKTogTWFrZSBpdCBhIHNwZWNpYWwgY2FzZSBvZgorCWBGVF9PdXRsaW5lX0VtYm9sZGVuWFknCisKKzIwMTItMDUtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IFNhdmFubmFoIGJ1ZyAjMzYzODYuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAodDFfbG9hZF9rZXl3b3JkKTogSWdub3JlIGtleXdvcmQgaWYgY29udGV4dCBpcworCW5vdCB2YWxpZC4KKworMjAxMi0wNC0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpCisJWyFUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNdOiBBY2Nlc3MgYGdseXBoLT5mYWNlJyBkaXJlY3RseS4KKworMjAxMi0wMy0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFByb3Blcmx5IGNvcHkgc2NhbGVyIGZsYWdzIHRvIHNjcmlwdCBtZXRyaWNzIG9iamVjdC4KKworCVdpdGhvdXQgdGhpcyBwYXRjaCwgb25seSB0aGUgZHVtbXkgYW5kIGNqayBhdXRvaGludGVyIG1vZHVsZXMgZ2V0CisJdGhlbSAoc2luY2UgdGhleSBjb3B5IHRoZSB3aG9sZSBzY2FsZXIgb2JqZWN0KS4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlKSwKKwlzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfbWV0cmljc19zY2FsZSk6IEltcGxlbWVudCBpdC4KKworMjAxMi0wMy0yMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2JkZmxpYl0gUmVtb3ZlIHJlZHVuZGFudCBtYWNyby4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoaXNkaWdvayk6IFJlbW92ZSBhbmQgcmVwbGFjZSB3aXRoIHNiaXRzZXQsIHdoaWNoCisJaXMgZXhhY3RseSB0aGUgc2FtZS4KKworMjAxMi0wMy0yMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjb25maWd1cmVdIEZpeCBTYXZhbm5haCBidWcgIzM1NjQ0LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBDaGVjayBgLWFuc2knIGZsYWcgd29ya3MgZXZlbiBpZiBnY2MKKwlpcyB1c2VkLiAgQmlvbmljIGxpYmMgaGVhZGVycyBmb3IgQW5kcm9pZCBsb3NlIHRoZSBjb25zaXN0ZW5jeQorCXdoZW4gdGhleSBhcmUgcGFyc2VkIHdpdGggX19TVERDX1ZFUlNJT05fXyBvbGRlciB0aGFuIDE5OTkwMUwgb3IKKwlfX1NUUklDVF9BTlNJX18uCisKKzIwMTItMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEltcHJvdmVtZW50IHRvIFNhdmFubmFoIGJ1ZyAjMzU2NTYuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKGlzZGlnb2spOiBBZGQgY2FzdCwgYXMgc3VnZ2VzdGVkIGluIHJlcG9ydC4KKworMjAxMi0wMy0xNyAgQ2hyaXMgTGlkZGVsbCAgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+CisKKwlbdHlwZTFdIEZpeCBTYXZhbm5haCBidWcgIzM1ODQ3LgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX3N1YnJzKTogRml4IHRoZSBsb29wIGV4aXQgY29uZGl0aW9uOworCXdlIHdhbnQgdG8gZXhpdCB3aGVuIHdlIGhhdmUgcnVuIG91dCBvZiBkYXRhLgorCisyMDEyLTAzLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBSZWFsbHkgZml4IFNhdmFubmFoIGJ1ZyAjMzU2NTguCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfbGlzdF9zcGxpdCk6IEFkZCBvbmUgbW9yZSBgZmllbGQnIGluaXRpYWxpemVyLgorCisyMDEyLTAzLTE0ICBZYW5uIERyb25lYXVkICA8eWFubkBkcm9uZWF1ZC5mcj4KKworCVtzZm50XSBNYWtlIGFycmF5cyBzdGF0aWMgbGlrZSBhbGwgb3RoZXJzLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX21heHAsIHR0X2ZhY2VfbG9hZF9vczIpLAorCXNyYy9zZm50L3R0bXR4LmMgKHR0X2ZhY2VfbG9hZF9oaGVhKTogQWRkIGBzdGF0aWMnIGtleXdvcmQgdG8gZnJhbWUKKwlmaWVsZHMuCisKKzIwMTItMDMtMTQgIEh1dyBEYXZpZXMgIDxodXdAY29kZXdlYXZlcnMuY29tPgorCisJW3NmbnRdIEEgcmVmaW5lbWVudCBvZiB0aGUgcHJldmlvdXMgY29tbWl0LgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAodHRfbmFtZV9lbnRyeV9hc2NpaV9mcm9tX3V0ZjE2LAorCXR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV9vdGhlcik6IFN0b3AgYXQgbnVsbCBieXRlLgorCisyMDEyLTAzLTE0ICBIdXcgRGF2aWVzICA8aHV3QGNvZGV3ZWF2ZXJzLmNvbT4KKworCVtzZm50XSBBZGQgYG5hbWUnIHRhYmxlIGNvbXBhdGliaWxpdHkgdG8gTVMgV2luZG93cy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV91dGYxNiwKKwl0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fb3RoZXIpOiBEb24ndCByZXBsYWNlIGBcMCcgd2l0aCBxdWVzdGlvbgorCW1hcmtzIHdoZW4gY29udmVydGluZyBzdHJpbmdzLgorCisyMDEyLTAzLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTFdIEZpeCBTYXZhbm5haCBidWcgIzM1ODMzLgorCisJQmFzZWQgb24gdGhlIHBhdGNoIGdpdmVuIGluIHRoZSBidWcgcmVwb3J0LgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKElTX0lOQ1JFTUVOVEFMKTogTmV3IG1hY3JvLgorCShyZWFkX2JpbmFyeV9kYXRhKTogQWRkIHBhcmFtZXRlciBgaW5jcmVtZW50YWwnLgorCVVwZGF0ZSBhbGwgY2FsbGVycyB1c2luZyBgSVNfSU5DUkVNRU5UQUwnLgorCisyMDEyLTAzLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gUmV0dXJuIGNvcnJlY3QgbGluZWFyIGFkdmFuY2Ugd2lkdGggdmFsdWVzLgorCisJVGhpcyB3YXMgcXVpdGUgYSBzdWJ0bGUgYnVnIHdoaWNoIGFjY2lkZW50YWxseSBzaG93ZWQgdXAgd2l0aCBnbHlwaAorCWBhZmlpMTAwMjMnIG9mIGFyaWFsLnR0ZiAodmVyc2lvbiAyLjc2KS4gIFRoaXMgZ2x5cGggaXMgYSBjb21wb3NpdGU7CisJdGhlIGZpcnN0IGNvbXBvbmVudCwgYEUnLCBoYXMgYW4gYWR2YW5jZSB3aWR0aCBvZiAxMzY2IGZvbnQgdW5pdHMsCisJd2hpbGUgdGhlIGFkdmFuY2Ugd2lkdGggb2YgdGhlIGNvbXBvc2l0ZSBpdHNlbGYgKHdoaWNoIGxvb2tzIGxpa2UKKwl1cHBlcmNhc2UgYEUnIHdpdGggZGllcmVzaXMpIGlzIDEzNjcgZm9udCB1bml0cy4gIEkgdGhpbmsgdGhpcyBpcworCWFjdHVhbGx5IGEgYnVnIGluIHRoZSBmb250IGl0c2VsZiwgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdGhhdAorCXRoaXMgZ2x5cGggaGFzIG5vdCB0aGUgc2FtZSB3aWR0aCBhcyB1cHBlcmNhc2UgYEUnIHdpdGhvdXQgdGhlCisJZGllcmVzaXMuICBBbnl3YXksIGl0IGhlbHBlZCBpZGVudGlmeSB0aGlzIHByb2JsZW0uCisKKwlVc2luZyB0aGUgVHJ1ZVR5cGUgaGludGVyLCB0aGUgY29ycmVjdCB2YWx1ZSAoMTM2Nykgb2YgYGFmaWkxMDAyMycKKwl3YXMgcmV0dXJuZWQsIGJ1dCB0aGUgYXV0b2hpbnRlciBteXN0ZXJpb3VzbHkgcmV0dXJuZWQgMTM2Ni4KKworCURpZ2dpbmcgaW4gdGhlIGNvZGUgc2hvd2VkIHRoYXQgdGhlIGF1dG9oaW50ZXIgcmVjdXJzaXZlbHkgY2FsbHMKKwlGVF9Mb2FkX0dseXBoIHRvIGxvYWQgdGhlIGdseXBoLCBhZGRpbmcgdGhlIEZUX0xPQURfTk9fU0NBTEUgbG9hZAorCWZsYWcuICBIb3dldmVyLCB0aGUgYGxpbmVhckhvcmlBZHZhbmNlJyBmaWVsZCBpcyBzdGlsbCByZXR1cm5lZCBhcyBhCisJc2NhbGVkIHZhbHVlLiAgVG8gYXZvaWQgc2NhbGluZyB0d2ljZSwgdGhlIG9sZCBjb2RlIGluIGF1dG9maXQgcmVzZXQKKwlgbGluZWFySG9yaUFkdmFuY2UnLCB1c2luZyB0aGUgYGhvcmlBZHZhbmNlJyBmaWVsZC4gIFRoaXMgc2VlbWVkIHRvCisJd29yayBzaW5jZSBGVF9MT0FEX05PX1NDQUxFIHdhcyBpbiB1c2UsIGJ1dCBpdCBmYWlsZWQgYWN0dWFsbHksCisJYmVjYXVzZSBgaG9yaUFkdmFuY2UnIGlzIGRlZmluZWQgYXMgdGhlIGRpc3RhbmNlIG9mIHRoZSBmaXJzdAorCXN1YmdseXBoJ3MgcGhhbnRvbSBwb2ludHMsIHdoaWNoIGluIHR1cm4gYXJlIGluaXRpYWxpemVkIHVzaW5nIHRoZQorCWFkdmFuY2Ugd2lkdGggb2YgdGhlIGZpcnN0IHN1YmdseXBoLiAgQW5kIGFzIHRoZSBnaXZlbiBleGFtcGxlCisJc2hvd3MsIHRoZXNlIHdpZHRocyBjYW4gZGlmZmVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogVGVtcG9yYXJpbHkgc2V0CisJRlRfTE9BRF9MSU5FQVJfREVTSUdOIHdoaWxlIGNhbGxpbmcgRlRfTG9hZF9HbHlwaCB0byBnZXQgdW5zY2FsZWQKKwl2YWx1ZXMgZm9yIHRoZSBsaW5lYXIgYWR2YW5jZSB3aWR0aHMuCisKKzIwMTItMDMtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IFNTVyBpbnN0cnVjdGlvbi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERPX1NTVyk6IFNTVyAqZG9lcyogdXNlIGZvbnQgdW5pdHMuICBGb3IKKwl2ZXJpZmljYXRpb24sIGl0IHRvb2sgc29tZSB0aW1lIHRvIGZpbmQgYSBmb250IHdoaWNoIGFjdHVhbGx5IHVzZXMKKwl0aGlzIGluc3RydWN0aW9uLgorCisyMDEyLTAzLTA5ICBWaW5uaWUgRmFsY28gIDx2aW5uaWUuZmFsY29AZ21haWwuY29tPgorCisJUHJlcGFyZSBzb3VyY2UgY29kZSBmb3IgYW1hbGdhbWF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IFN3YXAgb3JkZXIgb2YgcHJlcHJvY2Vzc29yIGJsb2Nrcy4KKworMjAxMi0wMy0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC45IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNC05Jy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNC45LgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjgvMi40LjkvLCBzLzI0OC8yNDkvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDkuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxNDoxOjguCisKKzIwMTItMDMtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEFkZCBtaXNzaW5nIG92ZXJmbG93IGNoZWNrLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3BhcnNlX2dseXBocykgPEJJVE1BUD46IEFkZCB0aHJlc2hvbGQgZm9yCisJYGdseXBoLT5icHInLgorCisyMDEyLTAzLTA3ICBWaW5uaWUgRmFsY28gIDx2aW5uaWUuZmFsY29AZ21haWwuY29tPgorCisJUHJlcGFyZSBzb3VyY2UgY29kZSBmb3IgYW1hbGdhbWF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmVycm9ycy5oLCBzcmMvYmRmL2JkZmVycm9yLmgsIHNyYy9iemlwMi9mdGJ6aXAyLmMsCisJc3JjL2NhY2hlL2Z0Y2Vycm9yLmgsIHNyYy9jZmYvY2ZmZXJycy5oLCBzcmMvY2lkL2NpZGVycnMuaCwKKwlzcmMvZ3h2YWxpZC9neHZlcnJvci5oLCBzcmMvZ3ppcC9mdGd6aXAuYywgc3JjL2x6dy9mdGx6dy5jLAorCXNyYy9vdHZhbGlkL290dmVycm9yLmgsIHNyYy9wY2YvcGNmZXJyb3IuaCwgc3JjL3Bmci9wZnJlcnJvci5oLAorCXNyYy9wc2F1eC9wc2F1eGVyci5oLCBzcmMvcHNoaW50ZXIvcHNobnRlcnIuaCwKKwlzcmMvcHNuYW1lcy9wc25hbWVyci5oLCBzcmMvcmFzdGVyL3Jhc3RlcnJzLmgsIHNyYy9zZm50L3NmZXJyb3JzLmgsCisJc3JjL3Ntb290aC9mdHNtZXJycy5oLCBzcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCwKKwlzcmMvdHlwZTEvdDFlcnJvcnMuaCwgc3JjL3R5cGU0Mi90NDJlcnJvci5oLCBzcmMvd2luZm9udHMvZm50ZXJycy5oOgorCUFkZCAjdW5kZWYgRlRfRVJSX1BSRUZJWCBiZWZvcmUgI2RlZmluZSBGVF9FUlJfUFJFRklYLgorCisyMDEyLTAzLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzNTY2MC4KKworCUZvciBzb21lIGRpdmlzaW9ucywgd2UgdXNlIGNhc3RzIHRvIDMyYml0IGVudGl0aWVzLiAgQWx3YXlzIGd1YXJkCisJYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvIHdpdGggdGhlc2UgY2FzdHMgYWxzby4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKGZ0X2RpdjY0YnkzMik6IFJlbW92ZSByZWR1bmRhbnQgY2FzdC4KKwkoRlRfTXVsRGl2LCBGVF9NdWxEaXZfTm9fUm91bmQpOiBBZGQgMzJiaXQgY2FzdC4KKwkoRlRfRGl2Rml4KTogQWRkIDMyYml0IGNhc3QgKHRoaXMgb21pc3Npb24gdHJpZ2dlcmVkIHRoZSBidWcpLgorCisyMDEyLTAzLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEZpeCBoYW5kbGluZyBvZiB0cmFjayBrZXJuaW5nLgorCisJKiBzcmMvcHNhdXgvYWZtcGFyc2UuYyAoYWZtX3BhcnNlX3RyYWNrX2tlcm4pOiBEb24ndCBpbnZlcnNlIHNpZ24KKwlmb3IgYG1pbl9rZXJuJy4gIEl0IGlzIGluZGVlZCBxdWl0ZSBjb21tb24gdGhhdCB0cmFjayBrZXJuaW5nCisJKmluY3JlYXNlcyogc3BhY2luZyBmb3IgdmVyeSBzbWFsbCBzaXplcy4KKworMjAxMi0wMy0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzNTY4OS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9TaW1wbGVfR2x5cGgpOiBDaGVjayBmaXJzdCBvdXRsaW5lCisJcG9pbnQuCisKKzIwMTItMDMtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEZpeCBTYXZhbm5haCBidWcgIzM1NjU2LgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX3BhcnNlX2dseXBocykgPF9CREZfQklUTUFQPjogQ2hlY2sgdmFsaWRpdHkKKwlvZiBuaWJibGUgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIGFjY2Vzc2luZyBgYTJpJyBhcnJheS4KKworMjAxMi0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3dpbmZvbnRzXSBGaXggU2F2YW5uYWggYnVnICMzNTY1OS4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfRmFjZV9Jbml0KTogQ2hlY2sgbnVtYmVyIG9mIGdseXBocy4KKworMjAxMi0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2NTguCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfbGlzdF9zcGxpdCk6IEluaXRpYWxpemUgYGZpZWxkJyBlbGVtZW50cworCXByb3Blcmx5LgorCisyMDEyLTAzLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEZpeCBTYXZhbm5haCBidWcgIzM1NjU3LgorCisJSWYgaW4gZnVuY3Rpb24gYHNraXBfc3BhY2VzJyB0aGUgcm91dGluZSBgc2tpcF9jb21tZW50JyBjb21lcyB0byB0aGUKKwllbmQgb2YgYnVmZmVyLCBgY3VyJyBpcyBzdGlsbCBpbmNyZWFzZWQgYnkgb25lLCBzbyB3ZSBuZWVkIHRvIGNoZWNrCisJZm9yIGBwID49IGxpbWl0JyBhbmQgbm90IGBwID09IGxpbWl0Jy4KKworCSogc3JjL3BzYXV4L3BzY29udi5jIChQU19Db252X1N0cnRvbCwgUFNfQ29udl9Ub0ZpeGVkLAorCVBTX0NvbnZfQVNDSUlIZXhEZWNvZGUsIFBTX0NvbnZfRWV4ZWNEZWNvZGUpOiBGaXggYm91bmRhcnkgY2hlY2tpbmcuCisKKzIwMTItMDMtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2NDYuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTUlSUCk6IFR5cG8sIHByZXNlbnQgc2luY2UgYWdlcy4gIFRoZQorCWNvZGUgaXMgbm93IGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgb3BlcmF0b3JzIChlLmcuIE1TSVJQKSB3aGljaAorCW1vZGlmeSB0d2lsaWdodCBwb2ludHMuCisKKzIwMTItMDMtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEZpeCBTYXZhbm5haCBidWcgIzM1NjQzLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX2xpc3RfZW5zdXJlKTogQnJpbmcgY29kZSBpbiBzeW5jIHdpdGgKKwljb21tZW50IGJlZm9yZSBgX2JkZl9saXN0X3NwbGl0JywgdGhpcyBpcywgcmVhbGx5IGFsbG9jYXRlIGF0IGxlYXN0CisJZml2ZSBgZmllbGQnIGVsZW1lbnRzLgorCisyMDEyLTAzLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVnICMzNTY0MS4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9nbHlwaHMpIDxEV0lEVEgsIEJCWD46IEFib3J0IGlmCisJX0JERl9FTkNPRElORyBpc24ndCBzZXQuICBXZSBuZWVkIHRoaXMgYmVjYXVzZSBhY2Nlc3MgdG8gdGhlIGBnbHlwaCcKKwl2YXJpYWJsZSBtaWdodCBiZSB1bmRlZmluZWQgb3RoZXJ3aXNlLgorCisyMDEyLTAzLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBTYXZhbm5haCBidWcgIzM1NjQwLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoU2tpcENvZGUsIFRUX1J1bklucyk6IEZpeCBib3VuZGFyeSBjaGVjaworCWZvciBOUFVTSEIgYW5kIE5QVVNIVyBpbnN0cnVjdGlvbnMuCisKKzIwMTItMDItMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2MDEuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0haKTogVXNlIG51bWJlciBvZiBwb2ludHMgaW5zdGVhZCBvZgorCWxhc3QgcG9pbnQgZm9yIGxvb3AuCisJQWxzbyByZW1vdmUgcmVkdW5kYW50IGJvdW5kYXJ5IGNoZWNrLgorCisyMDEyLTAyLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSByZWR1bmRhbnQgY2hlY2suCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogUmVtb3ZlIHJlZHVuZGFudAorCXNlY29uZCBjaGVjayBmb3Igb3JkZXJlZCBjb250b3VyIHN0YXJ0IHBvaW50cy4KKworMjAxMi0wMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNYWtlIFNIQyBpbnN0cnVjdGlvbiBiZWhhdmUgc2ltaWxhciB0byBNUyByYXN0ZXJpemVyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NIQyk6IEhhbmRsZSB2aXJ0dWFsIGNvbnRvdXIgaW4KKwl0d2lsaWdodCB6b25lLgorCisyMDEyLTAyLTI5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlBdm9pZCBtb2R1bG8gb3BlcmF0b3JzIGFnYWluc3QgYSBwb3dlci1vZi10d28gZGVub21pbmF0b3IuCisKKwkqIHNyYy9hZmNqay5jIChhZl9oaW50X25vcm1hbF9zdGVtKSwgc3JjL2Jhc2UvZnRvdXRsbi5jCisJKGZ0X2NvbnRvdXJfaGFzKSwgc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX3Z2Y3VydmV0bywgY2ZmX29wX2hoY3VydmV0bywgY2ZmX29wX2h2Y3VydmV0bz4sCisJc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoR1hWXzMyQklUX0FMSUdOTUVOVF9WQUxJREFURSksCisJc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jIChneHZfZmVhdF9zZXR0aW5nX3ZhbGlkYXRlKTogUmVwbGFjZSBgJScgd2l0aAorCWAmJyBvcGVyYXRvci4KKworMjAxMi0wMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIERvbid0IHN5bmNocm9uaXplIGRpZ2l0IHdpZHRocyBmb3IgbGlnaHQgcmVuZGVyaW5nIG1vZGUuCisKKwlXZSBkb24ndCBoaW50IGhvcml6b250YWxseSBpbiB0aGlzIG1vZGUuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2cpIDxIaW50X01ldHJpY3M+OgorCUltcGxlbWVudCBpdC4KKworMjAxMi0wMi0yNiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3R5cGU0Ml0gTWlub3IgY29kZSBvcHRpbWl6YXRpb24gKGFnYWluKS4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2Vfc2ZudHMpOiBTaW1wbGlmeSBwcmV2aW91cyBjaGFuZ2UuCisKKzIwMTItMDItMjYgIE1hdGV1c3ogSnVyY3p5ayAgPG1qdXJjenlrQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzbW9vdGhdIEZpeCBTYXZhbm5haCBidWcgIzM1NjA0LgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IFVzZSBgRlRfUG9zJworCWluc3RlYWQgb2YgYEZUX1VJbnQnIGZvciBzb21lIHZhcmlhYmxlcyBhbmQgdXBkYXRlIGNvbXBhcmlzb25zCisJYWNjb3JkaW5nbHkuICBBIGRldGFpbGVkIGFuYWx5c2lzIGNhbiBiZSBmb3VuZCBpbiB0aGUgYnVnIHJlcG9ydC4KKworMjAxMi0wMi0yNiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3R5cGU0Ml0gTWlub3IgY29kZSBvcHRpbWl6YXRpb24uCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX3NmbnRzKTogVXNlIGJpdG1hc2sgaW5zdGVhZCBvZgorCW1vZHVsbyBvcGVyYXRvci4KKworMjAxMi0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTItMDItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2MDguCisKKwkqIHNyYy90eXBlMS90MXBhcnNlLmMgKFQxX0dldF9Qcml2YXRlX0RpY3QpOiBSZWplY3QgdG9vIHNob3J0CisJZGljdGlvbmFyaWVzLgorCisyMDEyLTAyLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBTdXBwb3J0IGBFTkNPRElORyAtMSA8bj4nIGZvcm1hdC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9wYXJzZV9nbHlwaHMpIDxFTkNPRElORz46IEltcGxlbWVudCBpdC4KKworMjAxMi0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2MDcuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKSA8RU5DT0RJTkc+OiBOb3JtYWxpemUKKwluZWdhdGl2ZSBlbmNvZGluZyB2YWx1ZXMuCisKKzIwMTItMDItMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2MDYuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2Vfc3VicnMpOiBBZGQgcHJvcGVyIGd1YXJkcyBmb3IgYHN0cm5jbXAnLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3BhcnNlcl9za2lwX1BTX3Rva2VuKTogRW1pdCBlcnJvciBtZXNzYWdlCisJb25seSBpZiBjdXIgPCBsaW1pdC4KKworMjAxMi0wMi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzU2MDMuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X3Byb3BlcnRpZXMpOiBBc3N1cmUgZmluYWwgemVybyBieXRlIGluCisJYHN0cmluZ3MnIGFycmF5LgorCisyMDEyLTAyLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTQyXSBGaXggU2F2YW5uYWggYnVnICMzNTYwMi4KKworCSogc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2Vfc2ZudHMpOiBDaGVjayBgc3RyaW5nX3NpemUnIG1vcmUKKwl0aG9yb3VnaGx5LgorCisyMDEyLTAyLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVncyAjMzU1OTkgYW5kICMzNTYwMC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoQUNNU0cxNik6IE5ldyB3YXJuaW5nIG1lc3NhZ2UuCisJKF9iZGZfcGFyc2VfZ2x5cGhzKSA8X0JERl9CSVRNQVA+OiBDaGVjayBsaW5lIGxlbmd0aC4KKworMjAxMi0wMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1Z3MgIzM1NTk3IGFuZCAjMzU1OTguCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfaXNfYXRvbSk6IEZpeCBoYW5kbGluZyBvZiBwcm9wZXJ0eSB2YWx1ZS4KKworMjAxMi0wMi0yNMKgIFZpbm5pZSBGYWxjbyAgPHZpbm5pZS5mYWxjb0BnbWFpbC5jb20+CisKKwlQcmVwYXJlIHNvdXJjZSBjb2RlIGZvciBhbWFsZ2FtYXRpb24gKDYvNikuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogcy9Mb2FkX0dseXBoL2NmZl9nbHlwaF9sb2FkLy4KKworCSogc3JjL2NpZC9jaWRsb2FkLmM6IHMvcGFyc2VfZm9udF9tYXRyaXgvY2lkX3BhcnNlX2ZvbnRfbWF0cml4Ly4KKwlzL3QxX2luaXRfbG9hZGVyL2NpZF9pbml0X2xvYWRlci8uCisJcy90MV9kb25lX2xvYWRlci9jaWRfZG9uZV9sb2FkZXIvLgorCisJKiBzcmMvcHhhdXgvdDFjbWFwLmM6IHMvdDFfZ2V0X2dseXBoX25hbWUvcHNhdXhfZ2V0X2dseXBoX25hbWUvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogcy9Mb2FkX0dseXBoL3R0X2dseXBoX2xvYWQvLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmM6IHMvcGFyc2VfZm9udF9tYXRyaXgvdDFfcGFyc2VfZm9udF9tYXRyaXgvLgorCisyMDEyLTAyLTI0wqAgVmlubmllIEZhbGNvICA8dmlubmllLmZhbGNvQGdtYWlsLmNvbT4KKworCVByZXBhcmUgc291cmNlIGNvZGUgZm9yIGFtYWxnYW1hdGlvbiAoNS82KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oOiBVbmRlZmluZSBGVF9LRUVQX0VSUl9QUkVGSVggYWZ0ZXIKKwl1c2luZyBpdC4KKworMjAxMi0wMi0yMsKgIFZpbm5pZSBGYWxjbyAgPHZpbm5pZS5mYWxjb0BnbWFpbC5jb20+CisKKwlQcmVwYXJlIHNvdXJjZSBjb2RlIGZvciBhbWFsZ2FtYXRpb24gKDQvNikuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jLCBzcmMvcmFzdGVyL2Z0cmFzdGVyLmM6IFVuZGVmaW5lIFJBU19BUkcsCisJUkFTX0FSR1MsIFJBU19WQVIsIGFuZCBSQVNfVkFSUyBiZWZvcmUgZGVmaW5pbmcgaXQuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jOiBzL1RSYXN0ZXIvYmxhY2tfVFJhc3Rlci8sCisJcy9QUmFzdGVyL2JsYWNrX1BSYXN0ZXIvLgorCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jOiBzL1RSYXN0ZXIvZ3JheV9UUmFzdGVyLywKKwlzL1BSYXN0ZXIvZ3JheV9QUmFzdGVyLy4KKworMjAxMi0wMi0yMMKgIFZpbm5pZSBGYWxjbyAgPHZpbm5pZS5mYWxjb0BnbWFpbC5jb20+CisKKwlQcmVwYXJlIHNvdXJjZSBjb2RlIGZvciBhbWFsZ2FtYXRpb24gKDMvNikuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jOiBzL1RXb3JrZXIvYmxhY2tfVFdvcmtlci8sCisJcy9QV29ya2VyL2JsYWNrX1BXb3JrZXIvLgorCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jOiBzL1RXb3JrZXIvZ3JheV9UV29ya2VyLywKKwlzL1BXb3JrZXIvZ3JheV9QV29ya2VyLy4KKworMjAxMi0wMi0yMMKgIFZpbm5pZSBGYWxjbyAgPHZpbm5pZS5mYWxjb0BnbWFpbC5jb20+CisKKwlQcmVwYXJlIHNvdXJjZSBjb2RlIGZvciBhbWFsZ2FtYXRpb24gKDIvNikuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jLCBzcmMvcmFzdGVyL2Z0cmFzdGVyLmM6IFVuZGVmaW5lIEZMT09SLAorCUNFSUxJTkcsIFRSVU5DLCBhbmQgU0NBTEVEIGJlZm9yZSBkZWZpbmluZyBpdC4KKworMjAxMi0wMi0yMMKgIFZpbm5pZSBGYWxjbyAgPHZpbm5pZS5mYWxjb0BnbWFpbC5jb20+CisKKwlQcmVwYXJlIHNvdXJjZSBjb2RlIGZvciBhbWFsZ2FtYXRpb24gKDEvNikuCisKKwlTZWUgZGlzY3Vzc2lvbiBzdGFydGluZyBhdAorCisJICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMi0wMS9tc2cwMDAzNy5odG1sCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jOiBzL1RCYW5kL2dyYXlfVEJhbmQvLgorCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jOiBzL1RCYW5kL2JsYWNrX1RCYW5kLy4KKworMjAxMi0wMi0xNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2F1dG9maXRdIEZpeCBvdXRsaW5lIGZsYWdzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogRG9uJ3QgcmVhc3NpZ24KKwlgb3V0bGluZS5mbGFncycgc28gdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHByZXNlcnZlZC4gIFNlZQorCWRpc2N1c3Npb24gc3RhcnRpbmcgYXQKKworCSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDIvbXNnMDAwNDYuaHRtbAorCisyMDEyLTAyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBTYXZhbm5haCBidWcgIzM1NDY2LgorCisJSnVtcCBpbnN0cnVjdGlvbnMgYXJlIG5vdyBib3VuZCB0byB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFRoZSBNUworCVdpbmRvd3MgcmFzdGVyaXplciBiZWhhdmVzIHRoZSBzYW1lLCBhcyBjb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2suCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9DYWxsUmVjKTogQWRkIGBDdXJfRW5kJyBlbGVtZW50LgorCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChUVF9EZWZSZWNvcmQpOiBBZGQgYGVuZCcgZWxlbWVudC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERPX0pST1QsIERPX0pNUFIsIERPX0pST0YpOiBDaGVjayB1cHBlcgorCWJvdW5kIG9mIGp1bXAgYWRkcmVzcy4KKwkoSW5zX0ZERUYsIEluc19DQUxMLCBJbnNfTE9PUENBTEwsIEluc19VTktOT1dOLCBUVF9SdW5JbnMpOiBVcGRhdGVkLgorCisyMDEyLTAyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlXZSBkb24ndCB1c2UgYGV4dGVuc2lvbnMnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9Ecml2ZXJSZWMpOiBSZW1vdmUKKwlgZXh0ZW5zaW9ucycgZmllbGQuCisKKzIwMTItMDItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUNsZWFuIHVwIGBnZW5lcmljJyBmaWVsZHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX01vZHVsZVJlYywgRlRfTGlicmFyeVJlYyk6CisJUmVtb3ZlIGBnZW5lcmljJyBmaWVsZCBzaW5jZSB1c2VycyBjYW4ndCBhY2Nlc3MgaXQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Eb25lX0dseXBoU2xvdCk6IENhbGwgYGdlbmVyaWMuZmluYWxpemVyJyBhcworCWFkdmVydGlzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgRlRfR2VuZXJpYy4KKwkoRGVzdHJveV9Nb2R1bGUsIEZUX0RvbmVfTGlicmFyeSk6IFVwZGF0ZWQgdG8gY2hhbmdlcyBpbiBgZnRvYmpzLmgnLgorCisyMDEyLTAyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSGFybW9uaXplIGZ1bmN0aW9uIGFyZ3VtZW50cy4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYywgc3JjL2F1dG9maXQvYWZsb2FkZXIuaDogVXNlIGBGVF9JbnQzMicgZm9yCisJYGxvYWRfZmxhZ3MnLgorCisyMDEyLTAyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzLgorCisyMDEyLTAxLTE3ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2d4dmFsaWRdIEZpeCBTYXZhbm5haCBidWcgIzM1Mjg2LgorCisJUGF0Y2ggc3VibWl0dGVkIGJ5IGFub255bW91cyByZXBvcnRlci4KKworCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoZ3h2X1hTdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwKToKKwlneHZfc2V0X2xlbmd0aF9ieV91bG9uZ19vZmZzZXQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIDMsIG5vdCA0LAorCXRoZSBudW1iZXIgb2YgdGhlIHN1YnRhYmxlcyBpbiB0aGUgc3RhdGUgdGFibGVzOyBjbGFzc1RhYmxlLAorCXN0YXRlQXJyYXksIGVudHJ5VGFibGUuCisKKzIwMTItMDEtMTcgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbcmFjY2Vzc10gTW9kaWZ5IGZvciBQSUMgYnVpbGQuCisKKwlCYXNlZCBvbiB0aGUgcGF0Y2ggcHJvdmlkZWQgYnkgRXJpayBEYWhsc3Ryb20gPGVkQG9wZXJhLmNvbT4sCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDEvbXNnMDAwMTAuaHRtbAorCisJQWxzbyBgcmFjY2Vzc19ndWVzc190YWJsZVtdJyBhbmQgYHJhY2Nlc3NfcnVsZV9ieV9kYXJ3aW5fdmZzKCknCisJYXJlIHJlbmFtZWQgd2l0aCBgZnRfJyBzdWZmaXhlcy4KKworCSogc3JjL2Jhc2UvZnRiYXNlLmg6IGByYWNjZXNzX3J1bGVfYnlfZGFyd2luX3ZmcygpJyBpcyByZW5hbWVkCisJdG8gYGZ0X3JhY2Nlc3NfcnVsZV9ieV9kYXJ3aW5fdmZzKCknLgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IERpdHRvLgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmM6IERlY2xhcmF0aW9ucyBvZiBGVF9SRm9ya19SdWxlLAorCXJhY2Nlc3NfZ3Vlc3NfcmVjLCBhcmUgbW92ZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oOiBIZXJlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaDoKKwlGVF9SRk9SS19SVUxFX0FSUkFZX3tCRUdJTixFTlRSWSxFTkR9IG1hY3JvcyBhcmUgZGVmaW5lZAorCXRvIHJlcGxhY2UgcmFjY2Vzc19ndWVzc190YWJsZVtdIGluIGJvdGggb2YgUElDIGFuZCBub24tUElDCisJbW9kZXMuCisJKiBzcmMvYmFzZS9mdHJmb3JrLmM6IHJhY2Nlc3NfZ3Vlc3NfdGFibGVbXSBhcnJheSBpcyByZXdyaXR0ZW4KKwlieSBGVF9SRk9SS19SVUxFX0FSUkFZX3tCRUdJTixFTlRSWSxFTkR9LgorCisJKiBzcmMvYmFzZS9iYXNlcGljLmggKEJhc2VQSUMpOiBBZGQgYGZ0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUnCisJc3RvcmFnZS4gIChGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVCk6IE5ldyBtYWNybyB0byByZXRyaWV2ZQorCXRoZSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYGZ0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUnIHN0b3JhZ2UgaW4KKwlgQmFzZVBJQycgc3RydWN0dXJlLgorCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0d1ZXNzKTogUmV3cml0dGVuIHdpdGgKKwlGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVC4KKwkocmFjY2Vzc19nZXRfcnVsZV90eXBlX2Zyb21fcnVsZV9pbmRleCk6IEFkZCBgbGlicmFyeScgYXMgdGhlCisJZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLCB0byByZXRyaWV2ZSB0aGUgc3RvcmFnZSBvZgorCWBmdF9yYWNjZXNzX2d1ZXNzX3RhYmxlJyBmcm9tIGl0LiAgQWxzbyBgcmFjY2Vzc19ndWVzc190YWJsZScKKwlpcyByZXBsYWNlZCBieSBGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVC4KKwkoZnRfcmFjY2Vzc19ydWxlX2J5X2Rhcndpbl92ZnMpOiBEaXR0by4KKworMjAxMi0wMS0xNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVJlbW92ZSB0cmFpbGluZyBzcGFjZXMuCisKKzIwMTItMDEtMTYgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGb3JtYXR0aW5nIFBJQyByZWxhdGVkIHNvdXJjZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IEhhcm1vbml6ZSB0byBGVDIgY29kaW5nIGNvbnZlbnRpb25zLgorCSogc3JjL2Jhc2UvYmFzZXBpYy5jOiBEaXR0by4KKwkqIHNyYy9iYXNlL2Z0cGljLmM6IERpdHRvLgorCSogc3JjL2NmZi9jZmZwaWMuYzogRGl0dG8uCisJKiBzcmMvcHNoaW50ZXIvcHNocGljLmM6IERpdHRvLgorCSogc3JjL3BzbmFtZXMvcHNwaWMuYzogRGl0dG8uCisJKiBzcmMvcmFzdGVyL3Jhc3RwaWMuYzogRGl0dG8uCisJKiBzcmMvc2ZudC9zZm50cGljLmM6IERpdHRvLgorCSogc3JjL3Ntb290aC9mdHNwaWMuYzogRGl0dG8uCisJKiBzcmMvdHJ1ZXR5cGUvdHRwaWMuYzogRGl0dG8uCisKKzIwMTItMDEtMTYgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2ZpdF0gRml4IHRoZSBpbmNsdXNpb24gb2YgYGFmbGF0aW4yLmgnIGluIFBJQyBmaWxlLgorCisJKiBzcmMvYXV0b2ZpdC9hZnBpYy5jOiBJbmNsdWRlIGBhZmxhdGluMi5oJyB3aGVuCisJRlRfT1BUSU9OX0FVVE9GSVQyIGlzIGRlZmluZWQsIGFzIGFmZ2xvYmFsLmMgZG9lcyBzby4KKwlVbmNvbmRpdGlvbmFsbHkgaW5jbHVzaW9uIGNhdXNlcyBkZWNsYXJlZCBidXQgdW5pbXBsZW1lbnRlZAorCXdhcm5pbmcgYnkgR0NDIDQuNi4KKworMjAxMi0wMS0xNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjZmZdIFJlbW92ZSByZWR1bmRhbnQgZGVjbGFyYXRpb25zIG9mIGNmZl9jbWFwX1hYWF9jbGFzc19yZWMuCisKKwkqIHNyYy9jZmYvY2ZmcGljLmM6IFRoZSBkZWNsYXJhdGlvbnMgb2YKKwlGVF9Jbml0X0NsYXNzX2NmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYygpIGFuZAorCUZUX0luaXRfQ2xhc3NfY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMoKSBhcmUgcmVtb3ZlZC4KKwlUaGV5IGNhbiBiZSBvYnRhaW5lZCBieSB0aGUgaW5jbHVzaW9uIG9mIGNmZmNtYXAuaC4KKwljZmZjbWFwLmggaW52b2tlcyBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoKSBhbmQgaXQgZGVjbGFyZXMKKwlGVF9Jbml0X0NsYXNzX2NmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYygpIGV0YyBpbiBQSUMgbW9kZS4KKworMjAxMi0wMS0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCByZWR1bmRhbnQgZGVjbGFyYXRpb24gd2FybmluZyBpbiBQSUMgbW9kZS4KKworCU9yaWdpbmFsbHkgRlRfREVGSU5FX3tEUklWRVIsTU9EVUxFLFJFTkRFUkVSfSgpIG1hY3JvcyB3ZXJlCisJZGVzaWduZWQgdG8gZGVjbGFyZSB4eHhfcGljX3tmcmVlLGluaXR9IGJ5IHRoZW1zZWx2ZXMuCisJQmVjYXVzZSB0aGVzZSBtYWNyb3MgYXJlIHVzZWQgYXQgdGhlIGVuZCBvZiB0aGUgbW9kdWxlCisJaW50ZXJmYWNlIChlLmcuIHR0ZHJpdmVyLmMpIGFuZCB0aGUgd3JhcHBlciBzb3VyY2UgdG8gYnVpbGQKKwlhIG1vZHVsZSBhcyBhIHNpbmdsZSBvYmplY3QgKGUuZy4gdHJ1ZXR5cGUuYykgaW5jbHVkZXMKKwl0aGUgUElDIGZpbGUgKGUuZy4gdHRwaWMuYykgYmVmb3JlIHRoZSBtb2R1bGUgaW50ZXJmYWNlLAorCXRoZXNlIG1hY3JvcyBhcmUgZXhwYW5kZWQgQUZURVIgeHh4X3BpY197ZnJlZSxpbml0fSBib2R5CisJd2hlbiB0aGUgbW9kdWxlcyBhcmUgYnVpbHQgYXMgc2luZ2xlIG9iamVjdC4KKwlUaGUgZGVjbGFyYXRpb24gYWZ0ZXIgdGhlIGltcGxlbWVudGF0aW9uIGNhdXNlcyB0aGUgcmVkdW5kYW50CisJZGVjbGFyYXRpb24gd2FybmluZ3MsIHNvIHRoZSBkZWNsYXJhdGlvbnMgYXJlIG1vdmVkIHRvIG1vZHVsZQorCVBJQyBoZWFkZXJzIChlLmcuIHR0cGljLmgpLiAgU2VwYXJhdGluZyB0byBvdGhlciBoZWFkZXIgZmlsZXMKKwlhcmUgbmVlZGVkIGZvciBtdWx0aSBidWlsZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIChGVF9ERUZJTkVfRFJJVkVSKToKKwlSZW1vdmUgY2xhc3NfIyNfcGljX2ZyZWUgYW5kIGNsYXNzXyMjX3BpY19pbml0IGRlY2xhcmF0aW9ucy4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0RFRklORV9SRU5ERVJFUiwKKwlGVF9ERUZJTkVfTU9EVUxFKTogRGl0dG8uCisKKwkqIHNyYy9iYXNlL2Jhc2VwaWMuaDogSW5zZXJ0IGEgY29tbWVudCBhbmQgZml4IGNvZGluZyBzdHlsZS4KKwkqIHNyYy9hdXRvZml0L2FmcGljLmg6IERlY2xhcmUgYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX3tmcmVlLAorCWluaXR9LgorCSogc3JjL2NmZi9jZmZwaWMuaDogRGVjbGFyZSBjZmZfZHJpdmVyX2NsYXNzX3BpY197ZnJlZSxpbml0fS4KKwkqIHNyYy9wc2hpbnRlci9wc2hwaWMuaDogRGVjbGFyZSBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX3tmcmVlLAorCWluaXR9LgorCSogc3JjL3BzbmFtZXMvcHNwaWMuaDogRGVjbGFyZSBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfe2ZyZWUsCisJaW5pdH0uCisJKiBzcmMvcmFzdGVyL3Jhc3RwaWMuaDogRGVjbGFyZQorCWZ0X3Jhc3RlcnsxLDV9X3JlbmRlcmVyX2NsYXNzX3BpY197ZnJlZSxpbml0fQorCSogc3JjL3NmbnQvc2ZudHBpYy5oOiBEZWNsYXJlIHNmbnRfbW9kdWxlX2NsYXNzX3BpY197ZnJlZSxpbml0fS4KKwkqIHNyYy9zbW9vdGgvZnRzcGljLmg6IERlY2xhcmUKKwlmdF9zbW9vdGhfeyxsY2RfLGxjZHZffXJlbmRlcmVyX2NsYXNzX3BpY197ZnJlZSxpbml0fS4KKwkqIHNyYy90cnVldHlwZS90dHBpYy5oOiBEZWNsYXJlIHR0X2RyaXZlcl9jbGFzc19waWNfe2ZyZWUsaW5pdH0uCisKKzIwMTItMDEtMTUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlNYWtlIHBzcGljLmMgdG8gaW5jbHVkZSBtb2R1bGUgZXJyb3IgaGVhZGVyIHRvIGZpeCBtdWx0aSBidWlsZC4KKworCSogc3JjL3BzbmFtZXMvcHNwaWMuYzogSW5jbHVkZSBgcHNuYW1lcnIuaCcuCisKKzIwMTItMDEtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYmFzZV0gRml4IGEgZGVyZWZlcmVuY2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBQSUMgbW9kZS4KKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HbHlwaF9Ub19CaXRtYXApOiBgZ2x5cGgnIG11c3QgYmUKKwlzZXQgYmVmb3JlIGRlcmVmZXJpbmcgdG8gb2J0YWluIGBsaWJyYXJ5Jy4gIFRoZSBpbml0aWFsaXphdGlvbgorCW9mIGBjbGF6eicsIGBnbHlwaCcsIGBsaWJyYXJ5JyBhbmQgTlVMTCBwb2ludGVyIGNoZWNrIGFyZQorCXJlb3JkZXJlZCB0byBtaW5pbWl6ZSBQSUMgY29uZGl0b25hbHMuCisKKzIwMTItMDEtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYmFzZV0gSW5zZXJ0IGV4cGxpY2l0IGNhc3QgZm9yIEdDQyA0LjYgaW4gUElDIG1vZGUuCisKKwkqIHNyYy9iYXNlL2Z0aW5pdC5jIChGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzKTogVW5kZXIgUElDCisJY29uZmlndXJhdGlvbiwgRlRfREVGQVVMVF9NT0RVTEVTX0dFVCByZXR1cm5zCisJRlRfTW9kdWxlX0NsYXNzKiogcG9pbnRlciwgR0NDIDQuNiB3YXJucyB0aGF0CisJY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCogdmFyaWFibGUgaXMgd2FybmVkIGFzCisJaW5hcHByb3ByaWF0ZSB0byBzdG9yZSBpdC4gIFRvIGNhbG0gaXQsIGV4cGxpY2l0IGNhc3QgaXMKKwlpbnNlcnRlZC4gIEFsc28gYGxpYnJhcnknIGlzIGNoZWNrZWQgdG8gcHJldmVudCB0aGUgTlVMTAorCXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gRlRfREVGQVVMVF9NT0RVTEVTX0dFVC4KKworMjAxMi0wMS0xMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBQSUMgYnVpbGQgYnJva2VuIGJ5IGQ5MTQ1MjQxZmUzNzgxMDRiYTRjMTJhNDI1MzQ1NDlmYWFjYzkyZTYuCisKKwlVbmRlciBQSUMgY29uZmlndXJhdGlvbiwgRlRfe0NGRixQU0NNQVBTLFNGTlQsVFR9X1NFUlZJQ0VTX0dFVAorCXRha2Ugbm8gYXJndW1lbnRzIGJ1dCBkZXJlZmVyIHRoZSB2YXJpYWJsZSBuYW1lZCBgbGlicmFyeScKKwlpbnRlcm5hbGx5LgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfaW50ZXJmYWNlKTogRGVjbGFyZSBgbGlicmFyeScgYW5kCisJc2V0IGl0IGlmIG5vbi1OVUxMIGRyaXZlciBpcyBwYXNzZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2ludGVyZmFjZSk6IERpdHRvLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9pbnRlcmZhY2UpOiBEZWNsYXJlIGBsaWJyYXJ5JworCXVuZGVyIFBJQyBjb25maWd1cmF0aW9uLCBhbmQgc2V0IGl0IGlmIG5vbi1OVUxMIG1vZHVsZSBpcyBnaXZlbi4KKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKHBzbmFtZXNfZ2V0X2ludGVyZmFjZSk6IERpdHRvLgorCisyMDEyLTAxLTEzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJTWFrZSBQSUMgZmlsZXMgaW5jbHVkZSBtb2R1bGUgZXJyb3IgaGVhZGVycywgdG8gdXNlIHRoZSBlcnJvciBjb2RlcworCXdpdGggcGVyLW1vZHVsZSBwcmVmaXguCisKKwkqIHNyYy9hdXRvZml0L2FmcGljLmM6IEluY2x1ZGUgYGFmZXJyb3JzLmgnLgorCSogc3JjL2NmZi9jZmZwaWMuYzogSW5jbHVkZSBgY2ZmZXJycy5oJy4KKwkqIHNyYy9wc2hpbnRlci9wc2hwaWMuYzogSW5jbHVkZSBgcHNobnRlcnIuaCcuCisJKiBzcmMvcmFzdGVyL3Jhc3RwaWMuYzogSW5jbHVkZSBgcmFzdGVycnMuaCcuCisJKiBzcmMvc2ZudC9zZm50cGljLmM6IEluY2x1ZGUgYHNmZXJyb3JzLmgnLgorCSogc3JjL3Ntb290aC9mdHNwaWMuYzogSW5jbHVkZSBgZnRzbWVycnMuaCcuCisJKiBzcmMvdHJ1ZXR5cGUvdHRwaWMuYzogSW5jbHVkZSBgdHRlcnJvcnMuaCcuCisKKzIwMTItMDEtMDQgIFRvYmlhcyBSaW5nc3Ryw7ZtICA8dG9iaWFzQHJpbmdpcy5zZT4KKworCVt0cnVldHlwZV0gRml4IElQIGluc3RydWN0aW9uIGlmIHhfcHBlbSAhPSB5X3BwZW0uCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVApOiBTY2FsZSBgb3J1cycgY29vcmRpbmF0ZXMKKwlwcm9wZXJseS4KKworMjAxMi0wMS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHRyYWNpbmcgbWVzc2FnZSBmb3IgYGxvY2EnIHRhYmxlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2dldF9sb2NhdGlvbik6IERvbid0IGVtaXQgYQorCXdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgbGFzdCBgbG9jYScgZW50cnkgcmVmZXJlbmNlcyBhbiBlbXB0eSBnbHlwaC4KKworMjAxMS0xMi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIHNvbWUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLgorCVJlcG9ydGVkIGJ5IFJpY2hhcmQgQ09PSyA8cnNjb29rQHVuaWNvZGUub3JnPi4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKHQxX3BzX2dldF9mb250X3ZhbHVlKTogSW5pdGlhbGl6ZSBgdmFsJy4KKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9jb25pYyk6IEluaXRpYWxpemUgYGxldmVscycKKwllYXJsaWVyLgorCisyMDExLTEyLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggc2VyaW91cyBzY2FsaW5nIGJ1ZyBpbiBgRlRfR2V0X0FkdmFuY2VzJy4KKworCSogc3JjL2Jhc2UvZnRhZHZhbmMuYyAoRlRfR2V0X0FkdmFuY2VzKTogQWR2YW5jZSB2YWx1ZXMgcmV0dXJuZWQgYnkKKwlgRlRfTG9hZF9HbHlwaCcgbXVzdCBiZSBzaW1wbHkgbXVsdGlwbGllZCBieSAxMDI0LgorCisyMDExLTEyLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2Vfc3RhcnQpOiBEcm9wIHJlZHVuZGFudCBlcnJvciB0cmFjaW5nLgorCisyMDExLTEyLTAyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW21hY10gVW5pZnkgREFSV0lOX05PX0NBUkJPTiB3aXRoIEZUX01BQ0lOVE9TSC4KKworCU9yaWdpbmFsbHkgRlRfTUFDSU5UT1NIIHdhcyBhIHB1cmUgYXV0byBtYWNybyBhbmQgREFSV0lOX05PX0NBUkJPTgorCXdhcyBhIGNvbmZpZ3VyYWJsZSBtYWNybyB0byBkaXNhYmxlIENhcmJvbi1kZXBlbmRlbnQgY29kZS4gIEJlY2F1c2UKKwlub3cgY29uZmlndXJlIHNjcmlwdCBzZXRzIERBUldJTl9OT19DQVJCT04gYnkgZGVmYXVsdCBhbmQgZGlzYWJsZXMKKwlEYXJ3aW4gJiBDYXJib24tZGVwZW5kZW50IGNvZGVzLCB0aGVzZSBtYWNyb3MgY2FuIGJlIHVuaWZpZWQuCisJRlRfTUFDSU5UT1NIICh1bmRlZmluZWQgYnkgZGVmYXVsdCkgaXMga2VwdCBhbmQgREFSV0lOX05PX0NBUkJPTgorCShkZWZpbmVkIGJ5IGRlZmF1bHQpIGlzIHJlbW92ZWQsIGJlY2F1c2UgREFSV0lOX05PX0NBUkJPTiB2aW9sYXRlcworCUZUX1hYWCBuYW1pbmcgY29udmVudGlvbiBvZiBwdWJsaWMgbWFjcm9zLCBhbmQgYSBtYWNybyBjb25maWd1cmVkIGJ5CisJZGVmYXVsdCBpcyBub3QgcG9ydGFibGUgZm9yIHRoZSBidWlsZGluZyB3aXRob3V0IGNvbmZpZ3VyZSAoZS5nLgorCW1ha2UgZGV2ZWwpLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBEZWZpbmUgRlRfTUFDSU5UT1NIIGlmIENhcmJvbi1iYXNlZAorCW9sZCBNYWMgZm9udCBzdXBwb3J0IGlzIHJlcXVlc3RlZCBhbmQgQ2FyYm9uIGlzIGF2YWlsYWJsZS4KKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluOiBVbmRlZmluZSBGVF9NQUNJTlRPU0ggd2hlbiB0aGUgc3VwcG9ydAorCWZvciBNYWMgT1MgWCB3aXRob3V0IENhcmJvbiAoZS5nLiAgTWFjIE9TIFggMTAuNCBmb3IgcHBjNjQpIGlzCisJcmVxdWVzdGVkLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaW46IERpdHRvLgorCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oOiBEaXR0by4KKworCSogc3JjL2Jhc2UvZnRiYXNlLmg6IFJlbW92ZSBEQVJXSU5fTk9fQ0FSQk9OLgorCSogc3JjL2Jhc2UvZnRiYXNlLmM6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRvYmpzLmM6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRyZm9yay5jOiBEaXR0by4KKworCSogc3JjL2Jhc2UvZnRtYWMuYzogQ29tcGlsZSB0aGUgYm9keSBpZiBGVF9NQUNJTlRPU0ggaXMgZGVmaW5lZAorCShzYW1lIHdpdGggVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGluIHR0aW50ZXJwLmMpLgorCSogYnVpbGRzL21hYy9mdG1hYy5jOiBEaXR0by4KKworCSogYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dDogRGVmaW5lIEZUX01BQ0lOVE9TSC4KKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19mYXIubWFrZS50eHQ6IERpdHRvLgorCSogYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dDogRGl0dG8uCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQ6IERpdHRvLgorCisyMDExLTExLTMwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzQ3MjggKGBtYWtlIGRldmVsJyBvbiBNYWMgT1MgWCkuCisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tazogQ2hlY2sgYC9kZXYvbnVsbCcgdG8gaWRlbnRpZnkgdGhlIFVuaXgtCisJbGlrZSBzeXN0ZW1zIHdpdGhvdXQgYGluaXQnIG5vciBgaHVyZCcgKGUuZy4gTWFjIE9TIFggPj0gMTAuNCkuCisJKiBidWlsZHMvdW5peC9kZXRlY3QubWs6IERpdHRvLgorCisyMDExLTExLTMwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2FwaW5hbWVzXSBGaXggdGhlIG92ZXJmbG93IG9mIHNpZ25lZCBpbnRlZ2VyIGhhc2guCisKKwkqIHNyYy90b29scy9hcGluYW1lcy5jIChuYW1lc19hZGQpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGgnIGZyb20KKwlpbnQgdG8gdW5zaWduZWQgaW50LCB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gdGhlCisJb3ZlcmZsb3cgb2Ygc2lnbmVkIGludGVnZXJzIChvdmVyZmxvdyBvZiB1bnNpZ25lZCBpbnQgaXMgZGVmaW5lZAorCXRvIGJlIHdyYXAgYXJvdW5kKS4gIEZvdW5kIGJ5IGNsYW5nIHRlc3Qgc3VnZ2VzdGVkIGJ5IFNlYW4KKwlNY0JyaWRlLgorCisyMDExLTExLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbd2luZm9udHNdIFJlbW92ZSBjYXN0cy4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jICh3aW5mbnRfZHJpdmVyX2NsYXNzKTogUmVtb3ZlIGFsbCBjYXN0cyBhbmQKKwl1cGRhdGUgYWZmZWN0ZWQgZnVuY3Rpb25zLgorCShGTlRfU2l6ZV9TZWxlY3QpOiBGaXggbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworMjAxMS0xMS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGU0Ml0gUmVtb3ZlIGNhc3RzLgorCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZlci5jICh0NDJfZHJpdmVyX2NsYXNzKTogUmVtb3ZlIGFsbCBjYXN0cyBhbmQKKwl1cGRhdGUgYWZmZWN0ZWQgZnVuY3Rpb25zLgorCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYywgc3JjL3R5cGU0Mi90NDJvYmpzLmg6IFVwZGF0ZWQgZm9yIHQ0MmRyaXZlcgorCWNoYW5nZXMuCisKKzIwMTEtMTEtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gUmVtb3ZlIGNhc3RzLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfZHJpdmVyX2NsYXNzKTogUmVtb3ZlIGFsbCBjYXN0cyBhbmQKKwl1cGRhdGUgYWZmZWN0ZWQgZnVuY3Rpb25zLgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jLCBzcmMvdHlwZTEvdDFnbG9hZC5oLCBzcmMvdHlwZTEvdDFvYmpzLmM6CisJVXBkYXRlZCBmb3IgdDFkcml2ZXIgY2hhbmdlcy4KKwlzcmMvdHlwZTEvdDFvYmpzLmggKFQxX0RyaXZlcik6IFJlbW92ZSB1bnVzZWQgdHlwZWRlZi4KKwlVcGRhdGVkIGZvciB0MWRyaXZlciBjaGFuZ2VzLgorCisyMDExLTExLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBGaXggU2F2YW5uYWggYnVnICMzNDg5Ni4KKworCUVOQ09ESU5HIG5vdyBjb3ZlcnMgdGhlIHdob2xlIFVuaWNvZGUgcmFuZ2UuCisKKwlOb3RlLCBob3dldmVyLCB0aGF0IHRoaXMgY2hhbmdlIGlzIHF1aXRlIGV4cGVuc2l2ZSBzaW5jZSBpdAorCWluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aHJlZSBhcnJheXMgYnkgYWxtb3N0IDQwMGtCeXRlIGluIHRvdGFsLiAgVGhlCisJcmlnaHQgZml4IGlzIHRvIHJlcGxhY2UgdGhlIGxvZ2ljIHdpdGggc29tZXRoaW5nIHNtYXJ0ZXIuCisJQWRkaXRpb25hbGx5LCB0aGVyZSBleGlzdCB2ZXJ5IG9sZCBCREZzIGZvciB0aHJlZS1ieXRlIENDQ0lJCisJZW5jb2Rpbmcgd2hpY2ggZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgVW5pY29kZSAoYW5vdGhlciByZWFzb24gdG8gaGF2ZQorCWEgc21hcnRlciBsb2dpYykuCisKKwkqIHNyYy9iZGYvYmRmLmggKGJkZl9mb250X3QpOiBJbmNyZWFzZSBzaXplIG9mIGBubW9kJyBhbmQgYHVtb2QnCisJYXJyYXlzLgorCSogc3JjL2JkZi9iZGZsaWIuYyAoYmRmX3BhcnNlX3QpOiBJbmNyZWFzZSBzaXplIG9mIGBoYXZlJyBhcnJheS4KKworMjAxMS0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gSW1wcm92ZSB0cmFjaW5nLgorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChEQkdNU0cxLCBEQkdNU0cyKTogTmV3IG1hY3Jvcy4KKwkoX2JkZl9wYXJzZV9nbHlwaHMpOiBVc2UgdGhlbS4KKworMjAxMS0xMS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wcm92ZSB0cmFjaW5nLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0RvbmUpLCBzcmMvcGNmL3BjZmRyaXZyLmMKKwkoUENGX0ZhY2VfRG9uZSk6IFJlbW92ZSB0cmFjaW5nIG1lc3NhZ2UuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCksIHNyYy9jZmYvY2Zmb2Jqcy5jCisJKGNmZl9mYWNlX2luaXQpLCBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2ZhY2VfaW5pdCksCisJc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpLCBzcmMvc2ZudC9zZm9ianMuYworCShzZm50X2luaXRfZmFjZSksIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KSwKKwlzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCksIHNyYy90eXBlNDIvdDQyb2Jqcy5jCisJKFQ0Ml9GYWNlX0luaXQpLCBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBBZGQKKwlgZ3JlZXRpbmcnIG1lc3NhZ2UuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X29wZW5fZm9udCksIHNyYy90eXBlNDIvdDQyb2Jqcy5jCisJKFQ0Ml9PcGVuX0ZhY2UpOiBJbXByb3ZlIHRyYWNpbmcuCisKKzIwMTEtMTEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjaWRdIEZpeCBlcnJvciBjb2RlLgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogRG8gaXQuCisKKzIwMTEtMTEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBlcnJvciBjb2RlLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IERvIGl0LgorCisyMDExLTExLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgbmV3IGVycm9yIGNvZGUgRlRfRXJyX01pc3NpbmdfTW9kdWxlLgorCisJUHJldmlvdXNseSwgRnJlZVR5cGUgbWlzbGVhZGluZ2x5IHJldHVybmVkCisJRlRfRXJyX1Vua25vd25fRmlsZV9Gb3JtYXQgaWYgYSBtb2R1bGUgd2FzIG1pc3NpbmcgKG9yIGEgdGVzdCB3YXMKKwltaXNzaW5nIGNvbXBsZXRlbHkpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggKEZUX0Vycl9NaXNzaW5nX01vZHVsZSk6IERlZmluZS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpLCBzcmMvY2ZmL2NmZmRyaXZyLmMKKwkoY2ZmX2dldF9nbHlwaF9uYW1lKSwgc3JjL2NpZC9jaWRvYmpzLmMgKGNpZF9mYWNlX2luaXQpLAorCXNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSksIHNyYy90cnVldHlwZS90dG9ianMuYworCSh0dF9mYWNlX2luaXQpLCBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCksCisJc3JjL3R5cGU0Mi90NDJvYmpzLmMgKFQ0Ml9GYWNlX0luaXQsIFQ0Ml9Ecml2ZXJfSW5pdCk6IFVwZGF0ZWQuCisKKwkqIHNyYy90eXBlMS90MWFmbS5jIChUMV9SZWFkX01ldHJpY3MpLCBzcmMvdHlwZS90MW9ianMuYworCShUMV9GYWNlX0luaXQpLCBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IFJlbW92ZSBub3cKKwlyZWR1bmRhbnQgdGVzdCBmb3IgYHBzYXV4Jy4KKworMjAxMS0xMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gQWRkIG1vcmUgZXJyb3IgbWVzc2FnZXMuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfc2V0X2RlZmF1bHRfc3BhY2luZywgX2JkZl9hZGRfcHJvcGVydHkpOgorCUFkZCBsaW5lIG51bWJlciBhcmd1bWVudC4KKwlVcGRhdGUgYWxsIGNhbGxlcnMuCisJKEVSUk1TRzUsIEVSUk1TRzYsIEVSUk1TRzcsIEVSUk1TRzgsIEVSUk1TRzkpOiBOZXcgbWFjcm9zLgorCShfYmRmX3JlYWRzdHJlYW0sIF9iZGZfc2V0X2RlZmF1bHRfc3BhY2luZywgX2JkZl9hZGRfcHJvcGVydHksCisJX2JkZl9wYXJzZV9nbHlwaHMsIF9iZGZfcGFyc2Vfc3RhcnQpOiBBZGQgZXJyb3IgbWVzc2FnZXMuCisKKzIwMTEtMTEtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oOiBSZW1vdmUgZGVhZCBjb2RlLgorCisyMDExLTExLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvcmVsZWFzZXM6IFVwZGF0ZWQuCisKKzIwMTEtMTEtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjQuOCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTQtOCcuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjQuOC4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLAorCWJ1aWxkcy93aW4zMi92YzIwMDUvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osIGJ1aWxkcy93aW4zMi92YzIwMTAvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsIGJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNC43LzIuNC44Lywgcy8yNDcvMjQ4Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA4LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTQ6MDo4LgorCisyMDExLTExLTEzICBDaHJpcyBMaWRkZWxsICA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KKworCUFkZCBGVF9HZXRfUFNfRm9udF9WYWx1ZSgpIEFQSS4KKworCVRoaXMgYWxsb3dzIGEgVHlwZSAxIGZvbnQgZmFjZSB0byBiZSBpbnRlcnJvZ2F0ZWQgdG8gcmV0cmlldmUgbW9zdAorCW9mIHRoZSBkaWN0aW9uYXJ5IGtleXMgKGtleXMgbm90IHJlbGV2YW50IHRvIEZyZWVUeXBlJ3MgVHlwZSAxCisJaW50ZXJwcmV0ZXIgYXJlIG5vdCBhdmFpbGFibGUpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKKwkoUFNfR2V0Rm9udFZhbHVlRnVuYyk6IE5ldyB0eXBlZGVmLgorCShQU0luZm8pOiBBZGQgYHBzX2dldF9mb250X3ZhbHVlJy4KKwkoRlRfREVGSU5FX1NFUlZJQ0VfUFNJTkZPUkVDKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmggKFQxX0VuY29kaW5nVHlwZSk6IE1vdmVkIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmg6IEhlcmUuCisJKFBTX0RpY3RfS2V5cyk6IE5ldyBlbnVtZXJhdGlvbi4KKwkoRlRfR2V0X1BTX0ZvbnRfVmFsdWUpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0dHlwZTEuYyAoRlRfR2V0X1BTX0ZvbnRfVmFsdWUpOiBOZXcgZnVuY3Rpb24uCisKKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wc19nZXRfZm9udF92YWx1ZSk6IFRoaXMgbmV3IGZ1bmN0aW9uCisJZG9lcyB0aGUgcmVhbCBqb2IuCisJKHQxX3NlcnZpY2VfcHNfaW5mbyk6IEFkZCBpdC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfc2VydmljZV9wc19pbmZvKSwgc3JjL2NpZC9jaWRyaXZlci5jCisJKGNpZF9zZXJ2aWNlX3BzX2luZm8pLCBzcmMvdHlwZTQyL3Q0MmRyaXZyLmMgKHQ0Ml9zZXJ2aWNlX3BzX2luZm8pOgorCVVwZGF0ZWQuCisKKzIwMTEtMTEtMDggIEJyYWRlbiBUaG9tYXMgIDxidGhvbWFzQGFwcGxlLmNvbT4KKworCVtjaWRdIFZhcmlvdXMgbG9hZGluZyBmaXhlcy4KKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKGNpZF9sb2FkX2tleXdvcmQpIDxkZWZhdWx0PiwKKwkocGFyc2VfZm9udF9tYXRyaXgsIHBhcnNlX2V4cGFuc2lvbl9mYWN0b3IpOiBDb3JyZWN0bHkgY2hlY2sgbnVtYmVyCisJb2YgZGljdGlvbmFyaWVzLgorCShjaWRfcmVhZF9zdWJycyk6IFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHZhbHVlcyBvZiBgbnVtX3N1YnJzJy4KKwlBc3N1cmUgdGhhdCB0aGUgZWxlbWVudHMgb2YgdGhlIGBvZmZzZXRzJyBhcnJheSBhcmUgYXNjZW5kaW5nLgorCisyMDExLTExLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFJFQURNRTogV2UgdXNlIGNvcHlyaWdodCByYW5nZXMgYWxzby4KKworCUFjY29yZGluZyB0bworCisJICBodHRwOi8vd3d3LmdudS5vcmcvcHJlcC9tYWludGFpbi9odG1sX25vZGUvQ29weXJpZ2h0LU5vdGljZXMuaHRtbAorCisJdGhpcyBzaG91bGQgYmUgbWVudGlvbmVkIGV4cGxpY2l0bHkuCisKKzIwMTEtMTAtMzAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbcmFjY2Vzc10gU3VwcGxlbWVudCBmb3IgcHJldmlvdXMgZml4LgorCisJKiBzcmMvYmFzZS9mdGJhc2UuaCAocmFjY2Vzc19ydWxlX2J5X2Rhcndpbl92ZnMpOiBEbyBub3QgZGVjbGFyZQorCWl0IG9uIG5hdGl2ZSBNYWMgT1MgWC4KKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAocmFjY2Vzc19nZXRfcnVsZV90eXBlX2Zyb21fcnVsZV9pbmRleCk6CisJSGlkZSByYWNjZXNzX2dldF9ydWxlX3R5cGVfZnJvbV9ydWxlX2luZGV4KCkgb24gbmF0aXZlIE1hYyBPUyBYCisJdG9vLgorCisyMDExLTEwLTMwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3JhY2Nlc3NdIEhpZGUgcmFjY2Vzc19ydWxlX2J5X2Rhcndpbl92ZnMoKSBvbiBuYXRpdmUgTWFjIE9TIFguCisKKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAocmFjY2Vzc19ydWxlX2J5X2Rhcndpbl92ZnMpOiBEbyBub3QKKwljb21waWxlIG9uIG5hdGl2ZSBNYWMgT1MgWCBiZWNhdXNlIGl0IGlzIG5vdCB1c2VkLgorCisyMDExLTEwLTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBNRCBpbnN0cnVjdGlvbiBmb3IgdHdpbGlnaHQgem9uZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRCk6IFdpdGhvdXQgdGhpcyBmaXgsIHRoZSBNRAorCWluc3RydWN0aW9uIGFwcGxpZWQgdG8gb3JpZ2luYWwgY29vcmRpbmF0ZXMgb2YgdHdpbGlnaHQgcG9pbnRzCisJYWx3YXlzIHJldHVybnMgemVyby4KKworMjAxMS0xMC0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC43IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNC03Jy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNC43LgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjYvMi40LjcvLCBzLzI0Ni8yNDcvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDcuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxMzoyOjcuCisKKzIwMTEtMTAtMTUgIEthbCBDb25sZXkgIDxrY2NvbmxleUBnbWFpbC5jb20+CisKKwlGaXggaGFuZGxpbmcgb2YgdHJhbnNmb3JtYXRpb25zIGlmIG5vIHJlbmRlcmVyIGlzIHByZXNlbnQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVGhpbmtvLgorCisyMDExLTEwLTE1ICBLYWwgQ29ubGV5ICA8a2Njb25sZXlAZ21haWwuY29tPgorCisJRml4IGNvbmRpdGlvbnMgZm9yIGF1dG9oaW50aW5nLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IEhhbmRsZQorCUZUX0xPQURfSUdOT1JFX1RSQU5TRk9STS4KKworMjAxMS0xMC0wNyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtneHZhbGlkXSBGaXggYSBidWcgdG8gZGV0ZWN0IHRvbyBsYXJnZSBvZmZzZXQgaW4gbW9yeCB0YWJsZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl9saWdBY3Rpb25JbmRleF92YWxpZGF0ZSk6IEZpeCBhIGJ1ZworCXRoYXQgdG9vIGxhcmdlIHBvc2l0aXZlIG9mZnNldCBjYW5ub3QgYmUgZGV0ZWN0ZWQuCisKKzIwMTEtMTAtMDEgIEJyYWRlbiBUaG9tYXMgIDxidGhvbWFzQGFwcGxlLmNvbT4KKworCUhhbmRsZSBzb21lIGJvcmRlciBjYXNlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCAoRlRfVVNIT1JUX01BWCk6IE5ldyBtYWNyby4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0NvbnZlcnQpOiBQcm90ZWN0IGFnYWluc3QgaW52YWxpZAorCXZhbHVlIG9mIGB0YXJnZXQtPnJvd3MnLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEFkZCBjaGVjayBmb3IKKwlmbGV4IHN0YXJ0LgorCisJKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBDaGVjayBgd2lkdGgnIGFuZAorCWBoZWlnaHQnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMpOiBQcm90ZWN0IGFnYWluc3QKKwlpbnZhbGlkIHZhbHVlcyBpbiBgbG9jYWxwb2ludHMnIGFycmF5LgorCisyMDExLTEwLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNuYW1lc10gSGFuZGxlIHphcGZkaW5nYmF0cy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE5pY29sYXMgUm91Z2llciA8Tmljb2xhcy5Sb3VnaWVyQGlucmlhLmZyPi4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHkgKGFkb2JlX2dseXBoX2xpc3QpOiBBZGQgZGF0YSBmcm9tIEFHTCdzCisJYHphcGZkaW5nYmF0cy50eHQnIGZpbGUuCisKKwkqIHNyYy9wc25hbWVzL3BzdGFibGVzLmg6IFJlZ2VuZXJhdGVkLgorCisyMDExLTA5LTI3ICBTaW1vbiBCw7xuemxpICA8emVuaWtvQGdtYWlsLmNvbT4KKworCVt0eXBlMV0gRml4IFNhdmFubmFoIGJ1ZyAjMzQxODkuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfT3Blbl9GYWNlKTogSW5pdGlhbGl6ZQorCWBmYWNlLT5sZW5fYnVpbGRjaGFyJy4KKworMjAxMS0wOS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRHVtcCBTSURzIHdoaWxlIHRyYWNpbmcuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogRG8gaXQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlcl9ydW4pIFtGVF9ERUJVR19MRVZFTF9UUkFDRV0KKwk8Y2ZmX2tpbmRfc3RyaW5nPjogSWRlbnRpZnkgYXMgU0lELgorCisyMDExLTA5LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgdW51c2VkIEZUX0FMSUdOTUVOVCBtYWNyby4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBEbyBpdC4KKworMjAxMS0wOS0xNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gU2xpZ2h0bHkgb3B0aW1pemUgY29uaWMgYW5kIGN1YmljIGZsYXR0ZXJuZXJzLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfY29uaWMsIGdyYXlfcmVuZGVyX2N1YmljKTogTW92ZQorCW91dCBzb21lIGNvZGUgZnJvbSB0aGUgbWFpbiBsb29wIHRvIHNwZWVkIGl0IHVwLgorCisyMDExLTA5LTExICBUb21hcyBIb2dlciAgPHRob2dlckByZWRoYXQuY29tPgorCisJU2xpZ2h0bHkgaW1wcm92ZSBMWldfQ0xFQVIgaGFuZGxpbmcuCisKKwkqIHNyYy9sencvZnR6b3Blbi5jIChmdF9sendzdGF0ZV9pbykgPEZUX0xaV19QSEFTRV9DT0RFPjoKKwlFbnN1cmUgdGhhdCBzdWJzZXF1ZW50IChtb2R1bG8gZ2FyYmFnZSBieXRlKHMpKSBMWldfQ0xFQVIgY29kZXMgYXJlCisJaGFuZGxlZCBhcyBjbGVhciBjb2Rlcy4gIFRoaXMgYWxzbyByZS1zZXRzIG9sZF9jb2RlIGFuZCBvbGRfY2hhciB0bworCXByZWRpY3RhYmxlIHZhbHVlcywgd2hpY2ggaXMgYSBsaXR0bGUgYmV0dGVyIHRoYW4gdXNpbmcgYHJhbmRvbScKKwlvbmVzIGlmIHRoZSBjb2RlIGZvbGxvd2luZyBMWldfQ0xFQVIgaXMgaW52YWxpZC4KKworMjAxMS0wOS0xMSAgVG9tYXMgSG9nZXIgIDx0aG9nZXJAcmVkaGF0LmNvbT4KKworCUFkZCBleHBsaWNpdCBMWlcgZGVjb21wcmVzc2lvbiBzdGFjayBzaXplIGxpbWl0LgorCisJU3RhY2sgbGFyZ2VyIHRoYW4gMTw8TFpXX01BWF9CSVRTIGlzIG5ldmVyIG5lZWRlZCBpZiBwcmVmaXggdGFibGUgaXMKKwljb25zdHJ1Y3RlZCBjb3JyZWN0bHkuICBJdCdzIGV2ZW4gbGVzcyB0aGFuIHRoYXQsIHNlZSBlLmcuCisJbGliYXJjaGl2ZSBjb2RlIGNvbW1lbnQgZm9yIGEgYmV0dGVyIHNpemUgdXBwZXIgYm91bmQ6CisKKwkgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJhcmNoaXZlL3NvdXJjZS9icm93c2UvdHJ1bmsvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfY29tcHJlc3MuYz9yPTM2MzUjMTIxCisKKwlUaGlzIHBhdGNoIGFkZHMgZXhwbGljaXQgc3RhY2sgc2l6ZSBsaW1pdCwgZW5mb3JjZWQgd2hlbiBzdGFjayBpcworCXJlYWxsb2NlZC4KKworCUFuIGFsdGVybmF0aXZlIGlzIHRvIGVuc3VyZSB0aGF0IGNvZGUgPCBzdGF0ZS0+cHJlZml4W2NvZGUgLSAyNTZdCisJd2hlbiB0cmF2ZXJzaW5nIHByZWZpeCB0YWJsZS4gIFN1Y2ggY2hlY2sgaXMgbGVzcyBlZmZpY2llbnQgYW5kCisJc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBpZiBwcmVmaXggdGFibGUgaXMgY29uc3RydWN0ZWQgY29ycmVjdGx5IGluCisJdGhlIGZpcnN0IHBsYWNlLgorCisJKiBzcmMvbHp3L2Z0em9wZW4uYyAoZnRfbHp3c3RhdGVfc3RhY2tfZ3Jvdyk6IEltcGxlbWVudCBpdC4KKworMjAxMS0wOS0xMSAgVG9tYXMgSG9nZXIgIDx0aG9nZXJAcmVkaGF0LmNvbT4KKworCVByb3RlY3QgYWdhaW5zdCBsb29wcyBpbiB0aGUgcHJlZml4IHRhYmxlLgorCisJTFpXIGRlY29tcHJlc3NvciBkaWQgbm90IHN1ZmZpY2llbnRseSBjaGVjayBjb2RlcyByZWFkIGZyb20gdGhlCisJaW5wdXQgTFpXIHN0cmVhbS4gIEEgc3BlY2lhbGx5LWNyYWZ0ZWQgb3IgY29ycnVwdGVkIGlucHV0IGNvdWxkCisJY3JlYXRlIGEgbG9vcCBpbiB0aGUgcHJlZml4IHRhYmxlLCB3aGljaCBsZWFkcyB0byBtZW1vcnkgdXNhZ2UKKwlzcGlrZXMsIGFzIHRoZXJlJ3Mgbm8gZGVjb21wcmVzc2lvbiBzdGFjayBzaXplIGxpbWl0LgorCisJKiBzcmMvbHp3L2Z0em9wZW4uYyAoZnRfbHp3c3RhdGVfaW8pIDxGVF9MWldfUEhBU0VfU1RBUlQ+OiBGaXJzdAorCWNvZGUgaW4gdmFsaWQgTFpXIHN0cmVhbSBtdXN0IGJlIDAuLjI1NS4KKwk8RlRfTFpXX1BIQVNFX0NPREU+OiBJbiB0aGUgc3BlY2lhbCBLd0t3SyBjYXNlLCBjb2RlID09IGZyZWVfZW50LAorCWNvZGUgPiBmcmVlX2VudCBpcyBpbnZhbGlkLgorCisyMDExLTA5LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlCZXR0ZXIgdHJhY2luZyBvZiBtZXRyaWNzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfUmVxdWVzdF9TaXplLCBGVF9TZWxlY3RfU2l6ZSk6IERlY29yYXRlIHdpdGgKKwlGVF9UUkFDRS4KKworMjAxMS0wOS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzM4MTYuCisKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX0ZvbnRSZWNEaWN0UmVjKTogTmV3IG1lbWJlcgorCWBoYXNfZm9udF9tYXRyaXgnLgorCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfZm9udF9tYXRyaXgpOiBTZXQgaXQuCisJVXBkYXRlIHRyYWNpbmcgb3V0cHV0LgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBVc2UgaXQgc28gdGhhdCB0aGUgaGV1cmlzdGljcworCWNhbiBiZSByZW1vdmVkLgorCisyMDExLTA4LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlCZXR0ZXIgdHJhY2luZyBvZiBtZXRyaWNzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2VsZWN0X01ldHJpY3MsIEZUX1JlcXVlc3RfTWV0cmljcyk6CisJRGVjb3JhdGUgd2l0aCBGVF9UUkFDRS4KKworMjAxMS0wOC0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQmV0dGVyIHRyYWNpbmcgb2YgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQsIGNmZl9mb250X2xvYWQpOiBEZWNvcmF0ZSB3aXRoCisJRlRfVFJBQ0UuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4LCBjZmZfcGFyc2VfZm9udF9iYm94LAorCWNmZl9wYXJzZV9wcml2YXRlX2RpY3QsIGNmZl9wYXJzZV9jaWRfcm9zKTogVXBkYXRlZC4KKwkoQ0ZGX0ZJRUxEX05VTSwgQ0ZGX0ZJRUxEX0ZJWEVELCBDRkZfRklFTERfRklYRURfMTAwMCwKKwlDRkZfRklFTERfU1RSSU5HLCBDRkZfRklFTERfQk9PTCwgQ0ZGX0ZJRUxEX0NBTExCQUNLLCBDRkZfRklFTEQsCisJQ0ZGX0ZJRUxEX0RFTFRBKTogQWRkIGFyZ3VtZW50IGZvciBJRC4KKwkoY2ZmX3BhcnNlcl9ydW4pOiBEZWNvcmF0ZSB3aXRoIEZUX1RSQUNFLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmggKENGRl9GaWVsZF9IYW5kbGVyKSBbRlRfREVCVUdfTEVWRUxfVFJBQ0VdOiBBZGQKKwlgaWQnIG1lbWJlci4KKworCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBBZGQgSURzIHRvIGFsbCBmaWVsZHMuCisKKzIwMTEtMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzM0MDIyLgorCisJKiBSRUFETUUsIGRvY3MvSU5TVEFMTDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gVVBHUkFERS5VTklYLgorCisyMDExLTA4LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzNDAxOC4KKworCSogZG9jcy9VUEdSQURFLlVOSVg6IFJlbW92ZWQuICBPYnNvbGV0ZS4KKworMjAxMS0wOC0xNSAgRGF2aWQgQmV2YW4gIDxkYXZpZC5iZXZhbkBwYi5jb20+CisKKwlGaXggU2F2YW5uYWggYnVnICMzMzk5Mi4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYyAoRlRfU3Ryb2tlcl9QYXJzZU91dGxpbmUpOiBGaXggYm9yZGVyIGNhc2UuCisKKzIwMTEtMDgtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW3RydWV0eXBlXSBGaXggZGVnZW5lcmF0ZSBjYXNlIGluIFN7UCxGLERQfVZUTCBvcGNvZGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1N4VlRMKTogSGFuZGxlIHAxID09IHAyIHNwZWNpYWxseS4KKwkoSW5zX1NEUFZUTCk6IEhhbmRsZSB2MSA9PSB2MiBzcGVjaWFsbHkuCisKKzIwMTEtMDgtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBTYXZhbm5haCBidWcgIzMzOTc1LgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9mb250X21hdHJpeCk6IEZpeCB0eXBvLgorCisyMDExLTA3LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi40LjYgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTYnLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi40LjYuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwKKwlidWlsZHMvd2luMzIvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMDgvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLCBidWlsZHMvd2luMzIvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9pbmRleC5odG1sLCBidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjQuNS8yLjQuNi8sIHMvMjQ1LzI0Ni8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gNi4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDEzOjE6Ny4KKworMjAxMS0wNy0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWRkIHNvbWUgbW9yZSB0cmFjaW5nIGluZm9zLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9mb250X21hdHJpeCwgY2ZmX3BhcnNlX2ZvbnRfYmJveCwKKwljZmZfcGFyc2VfY2lkX3Jvcyk6IEFkZCB0cmFjaW5nLgorCisyMDExLTA3LTIyICBEaXJrIE3DvGxsZXIgIDxkbXVlbGxlckBzdXNlLmRlPgorCisJW3BzYXV4LCB0eXBlMV0gRml4IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuCisKKwlGb3VuZCB3aXRoIGZvbnQgZnV6enlpbmcuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogQ2hlY2sKKwlgZGVjb2Rlci0+YnVpbGRjaGFyJy4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jICh0MV9sb2FkX2tleXdvcmQpOiBDaGVjayBgYmxlbmQtPm51bV9kZXNpZ25zJy4KKworMjAxMS0wNy0yMCAgQ2hyaXMgTW9yZ2FuICA8Y21vcmdhbkBjeWJleGludGwuY29tPgorCisJQWRkIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVC4KKworCVVzZWZ1bCBmb3IgZW1iZWRkZWQgc3lzdGVtcyB3aGljaCBkb24ndCBuZWVkIGZpbGUgc3RyZWFtIHN1cHBvcnQuCisKKwkqIHNyYy9iYXNlL2Z0c3lzdGVtLmMsIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TdHJlYW1fTmV3KTogSW1wbGVtZW50CisJaXQuCisKKzIwMTEtMDctMjAgIEVsdG9uIENodW5nICA8ZWx0b24zMjhAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdHBhdGVudC5jIChGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nKTogRml4IHR5cG8uCisKKzIwMTEtMDctMTYgIFN0ZXZlbiBDaHUgIDxzdGV2ZW4uZi5jaHVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBGaXggbWV0cmljcyBvbiBzaXplIHJlcXVlc3QgZm9yIHNjYWxhYmxlIGZvbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogRml4IGNvcHlpbmcgbWV0cmljcworCWZyb20gVFRfU2l6ZSB0byBGVF9TaXplIGlmIHNjYWxhYmxlIGZvbnQuCisKKwlTZWUKKworCSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDcvbXNnMDAwNDkuaHRtbAorCisJZm9yIHNvbWUgY29tcGFyaXNvbiBpbWFnZXMuCisKKzIwMTEtMDctMTQgIE1hdHRoaWFzIERyb2NobmVyICA8TS5Ecm9jaG5lckBmei1qdWVsaWNoLmRlPi4KKworCVtwc2F1eF0gRml4IHBvdGVudGlhbCBzaWduIGV4dGVuc2lvbiBwcm9ibGVtcy4KKworCVdoZW4gc2hpZnRpbmcgcmlnaHQgYSBzaWduZWQgdmFsdWUsIGl0IGlzIG5vdCBkZWZpbmVkIGJ5IHRoZQorCUMgc3RhbmRhcmQgd2hldGhlciBvbmUgZ2V0cyBhIHNpZ24gZXh0ZW5zaW9uIG9yIG5vdC4gIFVzZSBhIG1hY3JvIHRvCisJZG8gYW4gZXhwbGljaXQgY2FzdCBmcm9tIGEgc2lnbmVkIHNob3J0IChhc3N1bWluZyB0aGF0IHRoaXMgaXMKKwkxNmJpdCkgdG8gYW4gaW50LgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoRml4MkludCk6IE5ldyBtYWNyby4KKwlVc2UgaXQgd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMTEtMDctMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJPG9wX2NhbGxvdGhlcnN1YnI+OiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc3Vicm91dGluZSBpbmRleCAwLgorCUZyb20gTWF0dGhpYXMgRHJvY2huZXIgPE0uRHJvY2huZXJAZnotanVlbGljaC5kZT4uCisKKzIwMTEtMDctMTAgINCQ0LvQtdC60YHQtdC5INCf0L7QtNGC0LXQu9C10LbQvdC40LrQvtCyICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3BzYXV4XSBPcHRpbWl6ZSBwcmV2aW91cyBjb21taXQuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxvcF9jYWxsb3RoZXJzdWJyPjogTW92ZSBlcnJvciBjaGVjayBkb3duIHRvIGF2b2lkIHRlc3RpbmcgdHdpY2UgZm9yCisJZ29vZCBjYXNlcy4KKworMjAxMS0wNy0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBBZGQgYmV0dGVyIGFyZ3VtZW50IGNoZWNrIGZvciBgY2FsbG90aGVyc3VicicuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxvcF9jYWxsb3RoZXJzdWJyPjogUmVqZWN0IG5lZ2F0aXZlIGFyZ3VtZW50cy4KKworMjAxMS0wNy0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFRyeSBoYXJkZXIgdG8gZmluZCBub24temVybyB2YWx1ZXMgZm9yIGFzY2VuZGVyIGFuZCBkZXNjZW5kZXIuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IENvbnN1bHQgYE9TLzInIHRhYmxlIGluIGNhc2UKKwl0aGUgYGhoZWEnIHRhYmxlJ3MgdmFsdWVzIGFyZSB6ZXJvLgorCisyMDExLTA3LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggcHJldmlvdXMgY29tbWl0LgorCisJV2Ugd2FudCB0byB1bnNldCBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgb25seSBpZiB0aGVyZSBhcmUgYml0bWFwCisJc3RyaWtlcyBpbiB0aGUgZm9udC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBJbXBsZW1lbnQgaXQuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMS0wNy0wMiAgSnVzdCBGaWxsIEJ1Z3MgIDxtb3pidWdib3hAeWFob28uY29tLmF1PgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzMzI0Ni4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja19zaW5nbGVfbm90ZGVmKTogTmV3IGZ1bmN0aW9uLgorCSh0dF9mYWNlX2luaXQpOiBVc2UgaXQgdG8gdGVzdCBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUuCisKKzIwMTEtMDctMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDExLTA3LTAyICBEYXZpZCBCZXZhbiAgPGRhdmlkLmJldmFuQHBiLmNvbT4KKworCVtmdHN0cm9rZV0gTWFqb3IgcmV2aXNpb24uCisKKwlUaGUgbWFpbiBwcm9ibGVtcworCS0tLS0tLS0tLS0tLS0tLS0tCisKKwkgIG8gSWYgRlRfU1RST0tFUl9MSU5FSk9JTl9CRVZFTCB3YXMgc3BlY2lmaWVkLCB1bmxpbWl0ZWQgbWl0ZXIKKwkgICAgam9pbnMgKG5vdCBiZXZlbCBqb2lucykgd2VyZSBnZW5lcmF0ZWQuICBJbmRlZWQsIHRoZSBtZWFuaW5ncyBvZgorCSAgICBgbWl0ZXInIGFuZCBgYmV2ZWwnIHdlcmUgaW5jb3JyZWN0bHkgcmV2ZXJzZWQgKGNvbnNpc3RlbnRseSkgaW4KKwkgICAgYm90aCB0aGUgY29kZSBhbmQgY29tbWVudHMuCisKKwkgIG8gVGhlIHdheSBiZXZlbCBqb2lucyB3ZXJlIGNvbnN0cnVjdGVkICh3aGV0aGVyIHNwZWNpZmllZAorCSAgICBleHBsaWNpdGx5LCBvciBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIGV4Y2VlZGluZyB0aGUgbWl0ZXIgbGltaXQpCisJICAgIGRpZCBub3QgbWF0Y2ggd2hhdCBpcyByZXF1aXJlZCBmb3Igc3Ryb2tlZCB0ZXh0IGluIFBvc3RTY3JpcHQgb3IKKwkgICAgUERGLgorCisJVGhlIG1haW4gZml4ZXMKKwktLS0tLS0tLS0tLS0tLQorCisJICBvIFRoZSBiZWhhdmlvdXIgb2YgRlRfU1RST0tFUl9MSU5FSk9JTl9CRVZFTCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKwkgIG8gQSBuZXcgbGluZSBqb2luIHN0eWxlLCBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX0ZJWEVELCBoYXMgYmVlbgorCSAgICBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQgUG9zdFNjcmlwdCBhbmQgUERGIG1pdGVyIGpvaW5zLgorCisJICBvIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUgaGFzIGJlZW4gaW50cm9kdWNlZCBhcyBhbgorCSAgICBhbGlhcyBmb3IgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUi4KKworCUFkZGl0aW9uYWxseSwgYSB2YXJpZXR5IG9mIHN0cm9raW5nIGVycm9ycyBoYXZlIGJlZW4gZml4ZWQuICBUaGVzZQorCXdvdWxkIGNhdXNlIHZhcmlvdXMgYXJ0aWZhY3RzIChpbmNsdWRpbmcgcG9pbnRzIGBhdCBpbmZpbml0eScpLAorCWVzcGVjaWFsbHkgd2hlbiBzdHJva2luZyBwb29yIHF1YWxpdHkgZm9udHMuCisKKwlTZWUKKworCSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDcvbXNnMDAwMDEuaHRtbAorCisJZm9yIGV4YW1wbGUgZG9jdW1lbnRzLiAgVGhlIEZyZWVUeXBlIHN0cm9rZXIgbm93IHByb2R1Y2VzIHJlc3VsdHMKKwl2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBwcm9kdWNlZCBieSBHaG9zdFNjcmlwdCBhbmQgRGlzdGlsbGVyIGZvciB0aGVzZQorCWZvbnRzLgorCisJT3RoZXIgcHJvYmxlbXMKKwktLS0tLS0tLS0tLS0tLQorCisJVGhlIGZvbGxvd2luZyBwcm9ibGVtcyBoYXZlIGJlZW4gcmVzb2x2ZWQ6CisKKwkgIG8gSW5zaWRlIGNvcm5lcnMgY291bGQgYmUgZ2VuZXJhdGVkIGluY29ycmVjdGx5LiAgSW50ZXJzZWN0aW5nIHRoZQorCSAgICBpbnNpZGUgY29ybmVyIGNvdWxkIGNhdXNlIGEgbWlzc2luZyB0cmlhbmd1bGFyIGFyZWEgYW5kIG90aGVyCisJICAgIGVmZmVjdHMuCisKKwkgICAgVGhlIGludGVyc2VjdGlvbiBwb2ludCBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBqb2luIGlzIGJldHdlZW4KKwkgICAgdHdvIGxpbmVzIGFuZCBib3RoIGxpbmVzIGFyZSBsb25nIGVub3VnaC4gIFRoZSBgb3B0aW1pemF0aW9uJworCSAgICBjb25kaXRpb24gaW4gYGZ0X3N0cm9rZXJfaW5zaWRlJyBoYXMgYmVlbiBjb3JyZWN0ZWQ7IHRoaXMKKwkgICAgcmVxdWlyZXMgdGhlIGxpbmUgbGVuZ3RoIHRvIGJlIHBhc3NlZCBpbnRvIHZhcmlvdXMgZnVuY3Rpb25zIGFuZAorCSAgICBzdG9yZWQgaW4gYEZUX1N0cm9rZXJSZWMnLgorCisJICBvIEluY29ycmVjdCBjdWJpYyBjdXJ2ZXMgY291bGQgYmUgZ2VuZXJhdGVkLiAgVGhlIGFuZ2xlCisJICAgIGNhbGN1bGF0aW9ucyBpbiBgRlRfU3Ryb2tlcl9DdWJpY1RvJyBoYXZlIGJlZW4gY29ycmVjdGVkIHRvCisJICAgIGhhbmRsZSB0aGUgY2FzZSBvZiB0aGUgY3VydmUgY3Jvc3NpbmcgdGhlICsvLVBJIGRpcmVjdGlvbi4KKworCSAgbyBJZiB0aGUgYm9yZGVyIHJhZGl1cyB3YXMgZ3JlYXRlciB0aGFuIHRoZSByYWRpdXMgb2YgY3VydmF0dXJlIG9mCisJICAgIGEgY3VydmUsIHRoZW4gdGhlIG5lZ2F0aXZlIHNlY3RvciB3b3VsZCBlbmQgdXAgb3V0c2lkZSAobm90CisJICAgIGluc2lkZSkgdGhlIGJvcmRlci4gIFRoaXMgc2l0dWF0aW9uIGlzIG5vdyByZWNvZ25pemVkIGFuZCB0aGUKKwkgICAgbmVnYXRpdmUgc2VjdG9yIGlzIGNpcmN1bW5hdmlnYXRlZCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgorCSAgICAoSWYgcm91bmQgbGluZSBqb2lucyBhcmUgYmVpbmcgdXNlZCwgdGhpcyBjb2RlIGlzIGRpc2FibGVkCisJICAgIGJlY2F1c2UgdGhlIGxpbmUgam9pbiB3aWxsIGFsd2F5cyBjb3ZlciB0aGUgbmVnYXRpdmUgc2VjdG9yLikKKworCSAgbyBXaGVuIGEgY3VydmUgaXMgc3BsaXQsIHRoZSBhcmNzIG1heSBub3Qgam9pbiBzbW9vdGhseSAoZXNwZWNpYWxseQorCSAgICBpZiB0aGUgY3VydmUgdHVybnMgc2hhcnBseSBiYWNrIG9uIGl0c2VsZikuICBDaGFuZ2VzIGluCisJICAgIGRpcmVjdGlvbiBiZXR3ZWVuIGFkamFjZW50IGFyY3Mgd2VyZSBub3QgaGFuZGxlZC4gIEEgcm91bmQKKwkgICAgY29ybmVyIGlzIG5vdyBhZGRlZCBpZiB0aGUgZGV2aWF0aW9uIGZyb20gb25lIGFyYyB0byB0aGUgbmV4dCBpcworCSAgICBncmVhdGVyIHRoYW4gYSBzdWl0YWJsZSB0aHJlc2hvbGQuCisKKwkgIG8gVGhlIGN1cnJlbnQgZGlyZWN0aW9uIHdhc24ndCByZXRhaW5lZCBpZiBhIHRoZSBvdXRsaW5lIGNvbnRhaW5lZAorCSAgICBhIHplcm8gbGVuZ3RoIGxpbmV0byBvciBhIGN1cnZlIHRoYXQgd2FzIGRldGVybWluZWQgdG8gYmUKKwkgICAgYGJhc2ljYWxseSBhIHBvaW50Jy4gIFRoaXMgY291bGQgY2F1c2UgYSBzcHVyaW91cyBqb2luIHRvIGJlCisJICAgIGFkZGVkLgorCisJICBvIEN1YmljcyB3aXRoIGNsb3NlIGNvbnRyb2wgcG9pbnRzIGNvdWxkIGJlIG1pc2hhbmRsZWQuICBBbGwgZWlnaHQKKwkgICAgY2FzZXMgYXJlIG5vdyBkaXN0aW5ndWlzaGVkIGNvcnJlY3RseS4KKworCU90aGVyIGltcHJvdmVtZW50cworCS0tLS0tLS0tLS0tLS0tLS0tLQorCisJbyBCb3JkZXJzIGZvciBjdWJpYyBjdXJ2ZXMgY291bGQgYmUgdG9vIGBmbGF0Jy4KKwkgIEZUX1NNQUxMX0NVQklDX1RIUkVTSE9MRCBoYXMgYmVlbiByZWR1Y2VkIGEgbGl0dGxlIHRvIHByZXZlbnQKKwkgIHRoaXMuCisKKwlvIFRoZSBoYW5kbGluZyBhbmQgdXNlIG9mIG1vdmFibGUgcG9pbnRzIGhhcyBiZWVuIHNpbXBsaWZpZWQgYQorCSAgbGl0dGxlLgorCisJbyBWYXJpb3VzIHZhbHVlcyBhcmUgbm93IGNvbXB1dGVkIG9ubHkgaWYgdGhlIHJlc3VsdHMgYXJlIGFjdHVhbGx5CisJICBuZWVkZWQuCisKKwlvIFRoZSBkaXJlY3Rpb25zIG9mIHRoZSBvdXRlciBhbmQgaW5uZXIgYm9yZGVycyBoYXZlIGJlZW4gc3dhcHBlZCwKKwkgIGFzIHJlY29tbWVuZGVkIGJ5IEdyYWhhbSBBc2hlci4KKworCSogc3JjL2Jhc2UvZnRzdHJva2UuYzogUmV2aXNlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaDogVXBkYXRlZC4KKworMjAxMS0wNi0zMCAgxLBzbWFpbCBEw7ZubWV6IDxpc21haWxAbmFtdHJhYy5vcmc+CisKKwkqIGJ1aWxkcy90b3BsZXZlbC5tazogV2UgdXNlIGdpdCwgbm90IENWUywgdGh1cyBza2lwIGAuZ2l0aWdub3JlJy4KKworMjAxMS0wNi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzM2NjMuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKTogSGFuZGxlIG5lZ2F0aXZlIHZhbHVlcyBmb3IKKwlFTkNPRElORyBjb3JyZWN0bHkuCisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMTEtMDYtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjQuNSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTQtNScuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjQuNQorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjQvMi40LjUvLCBzLzI0NC8yNDUvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDUuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxMzowOjcuCisKKzIwMTEtMDYtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSk6IEZpeCBjaGFuZ2UKKwlmcm9tIDIwMTEtMDUtMDQuCisKKzIwMTEtMDYtMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbZ3h2YWxpZF0gbWFrZSB0aGUgYHByb3AnIHZhbGlkYXRpb24gdHJhY2luZyB2ZXJib3NlLgorCisJKiBzcmMvZ3h2YWxpZC9neHZwcm9wLmM6IEFkZCB0cmFjaW5nIG1lc3NhZ2VzIGZvciBlcnJvcnMuCisKKzIwMTEtMDYtMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2dlbi5zaF0gUmVmbGVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSUJUT09MSVpFLgorCisyMDExLTA2LTE4ICBXZXJuZXIgTGVtYmVyZyA8d2xAZ251Lm9yZz4KKworCVVwZGF0ZSBsaWNlbnNlIGRvY3VtZW50YXRpb24uCisKKwkqIGRvY3MvR1BMLlRYVDogUmVuYW1lZCB0by4uLgorCSogZG9jcy9HUEx2Mi5UWFQ6IFRoaXMuCisKKwkqIGRvY3MvTElDRU5TRS5UWFQ6IFVwZGF0ZWQuCisKKzIwMTEtMDYtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggZysrNC42IGNvbXBpbGVyIHdhcm5pbmdzIGluIG1vZHVsZSBkcml2ZXJzLgorCisJVGhlIGJhY2tncm91bmQgaXMgc2FtZSB3aXRoIHByZXZpb3VzIGNvbW1pdC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMpOgorCUluaXQgYHBvaW50cycuICAoVFRfVmFyeV9HZXRfR2x5cGhfRGVsdGFzKTogSW5pdAorCWBkZWx0YV94eScuICAoVFRfR2V0X01NX1Zhcik6IEluaXQgYG1tdmFyJy4KKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfR2V0X01NX1Zhcik6IERpdHRvLgorCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHNfZ2V0X2ZvbnRfaW5mbyk6IEluaXQKKwlgZm9udF9pbmZvJy4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKTogSW5pdCBgdCcuCisJKGNmZl9mb250X2xvYWQpOiBJbml0IGBzdWInLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX2luaXQpOiBJbml0IGBpbnRlcm5hbCcuCisJKGNmZl9mYWNlX2luaXQpOiBJbml0IGBjZmYnLgorCSogc3JjL3Bmci9wZnJsb2FkLmMgKHBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyk6CisJSW5pdCBgc25hcHMnLgorCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfcHJvcGVydGllcyk6IEluaXQgYHByb3BlcnRpZXMnLgorCShwY2ZfZ2V0X2JpdG1hcHMpOiBJbml0IGBvZmZzZXRzJy4gIChwY2ZfZ2V0X2VuY29kaW5ncyk6CisJSW5pdCBgdG1wRW5jb2RpbmcnLgorCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9nYXNwKTogSW5pdCBgZ2FzcHJhbmdlcycuCisJKiBzcmMvc2ZudC90dHNiaXQuYyAoTG9hZF9TQml0X0ltYWdlKTogSW5pdCBgY29tcG9uZW50cycuCisJKiBzcmMvY2FjaGUvZnRjbXJ1LmMgKEZUQ19NcnVMaXN0X05ldyk6IEluaXQgYG5vZGUnLgorCSogc3JjL2d6aXAvZnRnemlwLmMgKEZUX1N0cmVhbV9PcGVuR3ppcCk6IEluaXQgYHppcCcgYW5kCisJYHppcF9idWZmJy4KKwkqIHNyYy9sencvZnRsencuYyAoRlRfU3RyZWFtX09wZW5MWlcpOiBJbml0IGB6aXAnLgorCSogc3JjL2J6aXAyL2Z0YnppcDIuYyAoRlRfU3RyZWFtX09wZW5CemlwMik6IEluaXQgYHppcCcuCisKKzIwMTEtMDYtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYmFzZV0gRml4IGcrKzQuNiBjb21waWxlciB3YXJuaW5ncyBpbiBzcmMvYmFzZS8qLmMuCisKKwlQYXNzaW5nIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciB0byBGVF9ORVcoKSBmYW1pbGllcyBpcworCW5vdCBwcm9ibGVtYXRpYyB0aGVvcmV0aWNhbGx5IChhcyBmYXIgYXMgdGhlIHJldHVybmVkCisJcG9pbnRlciBpcyBjaGVja2VkIGJlZm9yZSB3cml0aW5nKSwgYnV0IGcrKzQuNiBkaXNsaWtlcworCWl0IGFuZCB3YXJucyBieSAtV3VuaW5pdGlhbGl6ZWQuICBJbml0aWFsaXplIHRoZW0gYnkgTlVMTC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1N0cmVhbV9OZXcpOiBJbml0IGBzdHJlYW0nLgorCShuZXdfbWVtb3J5X3N0cmVhbSk6IERpdHRvLgorCShGVF9OZXdfR2x5cGhTbG90KTogSW5pdCBgc2xvdCcuCisJKEZUX0NNYXBfTmV3KTogSW5pdCBgY21hcCcuCisJKG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKTogSW5pdCBgc2ZudF9wcycuCisJKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBJbml0IGBwZmJfZGF0YScuCisJKE1hY19SZWFkX3NmbnRfUmVzb3VyY2UpOiBJbml0IGBzZm50X2RhdGEnLgorCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyk6CisJSW5pdCBgb2Zmc2V0c19pbnRlcm5hbCcgYW5kIGByZWYnLgorCShyYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKTogSW5pdCBgbmV3cGF0aCcuCisJKHJhY2Nlc3NfZ3Vlc3NfZGFyd2luX25ld3Zmcyk6IERpdHRvLgorCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOgorCUluaXQgYGJ1ZmZlcicuCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyX05ldyk6IEluaXQgYHN0cm9rZXInLgorCisyMDExLTA2LTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2d4dmFsaWRdIENsZWFudXAuCisKKwlTb21lIGludmFsaWQsIG92ZXJydW5uaW5nLCB1bnJlY29tbWVuZGVkIG5vbi16ZXJvIHZhbHVlcworCWFyZSBjYXJlZCBpbiBwYXJhbm9pZCB2YWxpZGF0aW9uIG1vZGUgb25seS4gIFRoZXJlIGFyZQorCW1hbnkgbGluZXMgbG9va2luZyBsaWtlOgorCisJICBpZiAoIHZhbGlkLT5yb290LT5sZXZlbCA+PSBGVF9WQUxJREFURV9QQVJBTk9JRCApCisJICAgIEZUX0lOVkFMSURfeHh4OworCisJVG8gc2ltcGxpZnkgdGhlbSwgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIGVyciApIGlzCisJaW50cm9kdWNlZCBmb3IgbW9yZSBwYXJhbm9pZCB2YWxpZGF0aW9uIGluIGZ1dHVyZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaCAoSVNfUEFSQU5PSURfVkFMSURBVElPTik6CisJTmV3IG1hY3JvIHRvIGFzc3VyZSB2YWxpZC0+cm9vdC0+bGV2ZWwgaXMgbW9yZSBvcgorCWVxdWFsIHRvIEZUX1ZBTElEQVRFX1BBUkFOT0lELiAgKEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKToKKwlOZXcgbWFjcm8gdG8gcmFpc2UgYW4gZXJyb3IgaWYgaW4gcGFyYW5vaWQgdmFsaWRhdGlvbi4KKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmM6IFVzZSBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCgpLgorCSogc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jOiBEaXR0by4KKwkqIHNyYy9neHZhbGlkL2d4dmp1c3QuYzogRGl0dG8uCisJKiBzcmMvZ3h2YWxpZC9neHZrZXJuLmM6IERpdHRvLgorCSogc3JjL2d4dmFsaWQvZ3h2bW9ydC5jOiBEaXR0by4KKwkqIHNyYy9neHZhbGlkL2d4dm1vcnQwLmM6IERpdHRvLgorCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYzogRGl0dG8uCisJKiBzcmMvZ3h2YWxpZC9neHZtb3J0Mi5jOiBEaXR0by4KKwkqIHNyYy9neHZhbGlkL2d4dm1vcngxLmM6IERpdHRvLgorCSogc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYzogRGl0dG8uCisKKzIwMTEtMDYtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbZ3h2YWxpZF0gRml4IGdjYzQuNiBjb21waWxlciB3YXJuaW5ncyBpbiBneHZ0cmFrLmMuCisKKwkqIHNyYy9neHZhbGlkL2d4dnRyYWsuYyAoZ3h2X3RyYWtfdHJhY2tUYWJsZV92YWxpZGF0ZSk6CisJQ2hlY2sgZGlmZmVyZW50IGVudHJpZXMgcG9pbnRpbmcgc2FtZSB0cmFraW5nIHZhbHVlLgorCShneHZfdHJha192YWxpZGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRhYmxlX3NpemUnLgorCisyMDExLTA2LTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2d4dmFsaWRdIEZpeCBnY2M0LjYgY29tcGlsZXIgd2FybmluZ3MgaW4gZ3h2bW9yeCouYy4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9yeC5jIChneHZfbW9yeF9zdWJ0YWJsZXNfdmFsaWRhdGUpOgorCUNvbmRpdGlvbmFsaXplIHVudmFsaWRhdGVkIHZhcmlhYmxlIGBzdWJGZWF0dXJlRmxhZ3MnLgorCShneHZfbW9yeF9jaGFpbl92YWxpZGF0ZSk6IENvbmRpdGlvbmFsaXplIHVudmFsaWRhdGVkCisJdmFyaWFibGUgYGRlZmF1bHRGbGFncycuCisKKwkqIHNyYy9neHZhbGlkL2d4bW9yeDAuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF9lbnRyeV92YWxpZGF0ZSk6CisJQ29uZGl0aW9uYWxpemUgdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgbWFya0ZpcnN0JywKKwlgZG9udEFkdmFuY2UnLCBgbWFya0xhc3QnLCBgdmVyYicuCisKKwkqIHNyYy9neHZhbGlkL2d4bW9yeDEuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9lbnRyeV92YWxpZGF0ZSk6IENvbmRpdGlvbmFsaXplCisJdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgc2V0TWFyaycsIGBkb250QWR2YW5jZScuCisKKwkqIHNyYy9neHZhbGlkL2d4dm1vcngyLmMKKwkoZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfbGlnQWN0aW9uT2Zmc2V0X3ZhbGlkYXRlKToKKwlDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZCB2YXJpYWJsZXM7IGBsYXN0JywgYHN0b3JlJy4KKwlDaGVja2luZyBmb3Igb3ZlcnJ1bm5pbmcgb2Zmc2V0IGlzIGFkZGVkLgorCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl9lbnRyeV92YWxpZGF0ZSk6CisJQ29uZGl0aW9uYWxpemUgdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgc2V0Q29tcG9uZW50JywKKwlgZG9udEFkdmFuY2UnLCBgcGVyZm9ybUFjdGlvbicuCisJKGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX2xpZ2F0dXJlVGFibGVfdmFsaWRhdGUpOgorCUNoZWNrIGlmIHRoZSBHSUQgZm9yIGxpZ2F0dXJlIGRvZXMgbm90IGV4Y2VlZCB0aGUKKwltYXggR0lEIGluIGBtYXhwJyB0YWJsZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYworCShneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9JbnNlcnRMaXN0X3ZhbGlkYXRlKToKKwlDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZCBsb2FkaW5nIG9mIGBpbnNlcnRfZ2x5cGhJRCcKKwlhcnJheS4gIChneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9lbnRyeV92YWxpZGF0ZSk6CisJQ29uZGl0aW9uYWxpemUgdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgc2V0TWFyaycsCisJYGRvbnRBZHZhbmNlJywgYGN1cnJlbnRJc0thc2hpZGFMaWtlJywKKwlgbWFya2VkSXNLYXNoaWRhTGlrZScsIGBjdXJyZW50SW5zZXJ0QmVmb3JlJywKKwlgbWFya2VkSW5zZXJ0QmVmb3JlJy4KKworMjAxMS0wNi0xNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtneHZhbGlkXSBGaXggZ2NjNC42IGNvbXBpbGVyIHdhcm5pbmdzIGluIGd4dm1vcnQqLmMuCisKKwkqIHNyYy9neHZhbGlkL2d4dm1vcnQuYyAoZ3h2X21vcnRfc3VidGFibGVzX3ZhbGlkYXRlKToKKwlDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZCB2YXJpYWJsZSBgc3ViRmVhdHVyZUZsYWdzJy4KKwkoZ3h2X21vcnRfY2hhaW5fdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZAorCXZhcmlhYmxlIGBkZWZhdWx0RmxhZ3MnLgorCisJKiBzcmMvZ3h2YWxpZC9neG1vcnQwLmMKKwkoZ3h2X21vcnRfc3VidGFibGVfdHlwZTBfZW50cnlfdmFsaWRhdGUpOiBDaGVjayB0aGUKKwljb25mbGljdCBvZiB0aGUgbWFya3MgZm9yIHRoZSBnbHlwaHMuCisKKwkqIHNyYy9neHZhbGlkL2d4bW9ydDEuYworCShneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9vZmZzZXRfdG9fc3Vic3RfdmFsaWRhdGUpOgorCUxvY2FsIHZhcmlhYmxlcyBgbWluX2dpZCcsIGBtYXhfZ2lkJyBhcmUgcmVwbGFjZWQgYnkKKwl2YXJpYWJsZXMgaW4gdGhlIHZhbGlkYXRvci4KKwkoZ3h2X21vcnRfc3VidGFibGVfdHlwZTFfZW50cnlfdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZQorCXVudmFsaWRhdGVkIHZhcmlhYmxlczsgYHNldE1hcmsnLCBgZG9udEFkdmFuY2UnLgorCShneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJzdFRhYmxlX3ZhbGlkYXRlKToKKwlWYWxpZGF0ZSB0aGUgR0lEIGJ5IHRoZSBtaW4vbWF4IEdJRHMgaW4gdGhlIHZhbGlkYXRvci4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYworCShneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9saWdBY3Rpb25PZmZzZXRfdmFsaWRhdGUpOgorCUNvbmRpdGlvbmFsaXplIHVudmFsaWRhdGVkIHZhcmlhYmxlczsgYGxhc3QnLCBgc3RvcmUnLgorCUNoZWNraW5nIGZvciBvdmVycnVubmluZyBvZmZzZXQgaXMgYWRkZWQuCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX2VudHJ5X3ZhbGlkYXRlKToKKwlDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZCB2YXJpYWJsZXM7IGBzZXRDb21wb25lbnQnLAorCWBkb250QWR2YW5jZScuCisJKGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX2xpZ2F0dXJlVGFibGVfdmFsaWRhdGUpOgorCUNoZWNrIGlmIHRoZSBHSUQgZm9yIGxpZ2F0dXJlIGRvZXMgbm90IGV4Y2VlZCB0aGUKKwltYXggR0lEIGluIGBtYXhwJyB0YWJsZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYworCShneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV9JbnNlcnRMaXN0X3ZhbGlkYXRlKToKKwlDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZCBsb2FkaW5nIG9mIGBpbnNlcnRfZ2x5cGhJRCcKKwlhcnJheS4gIChneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV9lbnRyeV92YWxpZGF0ZSk6CisJQ29uZGl0aW9uYWxpemUgdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgc2V0TWFyaycsCisJYGRvbnRBZHZhbmNlJywgYGN1cnJlbnRJc0thc2hpZGFMaWtlJywKKwlgbWFya2VkSXNLYXNoaWRhTGlrZScsIGBjdXJyZW50SW5zZXJ0QmVmb3JlJywKKwlgbWFya2VkSW5zZXJ0QmVmb3JlJy4KKworMjAxMS0wNi0xNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtneHZhbGlkXSBGaXggZ2NjNC42IGNvbXBpbGVyIHdhcm5pbmdzIGluIGd4dmtlcm4uYy4KKworCSogc3JjL2d4dmFsaWQvZ3h2a2Vybi5jCisJKGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDBfcGFpcnNfdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZQorCXVudmFsaWRhdGVkIHZhcmlhYmxlIGBrZXJuVmFsdWUnLgorCShneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX2VudHJ5X3ZhbGlkYXRlKTogQ29uZGl0aW9uYWxpemUKKwl1bnZhbGlkYXRlZCB2YXJpYWJsZXM7IGBwdXNoJywgYGRvbnRBZHZhbmNlJywgYGtlcm5BY3Rpb24nLAorCWBrZXJuVmFsdWUnLgorCShneHZfa2Vybl9jb3ZlcmFnZV9uZXdfYXBwbGVfdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZQorCXRyYWNlLW9ubHkgdmFyaWFibGVzOyBga2VyblZlcnRpY2FsJywgYGtlcm5Dcm9zc1N0cmVhbScsCisJYGtlcm5WYXJpYXRpb24nLgorCShneHZfa2Vybl9jb3ZlcmFnZV9jbGFzc2ljX2FwcGxlX3ZhbGlkYXRlKTogQ29uZGl0aW9uYWxpemUKKwl0cmFjZS1vbmx5IHZhcmlhYmxlczsgYGhvcml6b250YWwnLCBgY3Jvc3Nfc3RyZWFtJy4KKwkoZ3h2X2tlcm5fY292ZXJhZ2VfY2xhc3NpY19taWNyb3NvZnRfdmFsaWRhdGUpOgorCUNvbmRpdGlvbmFsaXplIHRyYWNlLW9ubHkgdmFyaWFibGVzOyBgaG9yaXpvbnRhbCcsCisJYG1pbmltdW0nLCBgY3Jvc3Nfc3RyZWFtJywgYG92ZXJyaWRlJy4KKwkoZ3h2X2tlcm5fc3VidGFibGVfdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZSB0cmFjZS1vbmx5CisJdmFyaWFibGVzOyBgdmVyc2lvbicsIGB0dXBsZUluZGV4Jy4KKworMjAxMS0wNi0xNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtneHZhbGlkXSBGaXggZ2NjNC42IGNvbXBpbGVyIHdhcm5pbmdzIGluIGd4dmp1c3QuYy4KKworCSogc3JjL2d4dmFsaWQvZ3h2anVzdC5jIChneHZfanVzdF9jaGVja19tYXhfZ2lkKToKKwlOZXcgZnVuY3Rpb24gdG8gdW5pZnkgdGhlIGNoZWNrcyBvZiB0b28gbGFyZ2UgR0lELgorCShneHZfanVzdF93ZHBfZW50cnlfdmFsaWRhdGUpOiBDb25kaXRpb25hbGl6ZSB1bnZhbGlkYXRlZAorCXZhcmlhYmxlczsgYGJlZm9yZUdyb3dMaW1pdCcsIGBiZWZvcmVTaHJpbmtHcm93TGltaXQnLAorCWBhZnRlckdyb3dMaW1pdCcsIGBhZnRlclNocmlua0dyb3dMaW1pdCcsIGBncm93RmxhZ3MnLAorCWBzaHJpbmtGbGFncycuICBBZGRpdGlvbmFsIGNoZWNrIGZvciBub24temVybyB2YWx1ZXMgaW4KKwl1bnVzZWQgc3RvcmFnZSBganVzdENsYXNzJyBpcyBhZGRlZC4KKwkoZ3h2X2p1c3RfYWN0U3VicmVjb3JkX3R5cGUwX3ZhbGlkYXRlKTogQ29uZGl0aW9uYWxpemUKKwl1bnZhbGlkYXRlZCB2YXJpYWJsZSBgb3JkZXInLiAgR0lEIGlzIGNoZWNrZWQgYnkKKwlneHZfanVzdF9jaGVja19tYXhfZ2lkKCkuICBBZGRpdGlvbmFsIGNoZWNrIGZvciB1cHNpZGUtZG93bgorCXJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBsb3dlckxpbWl0JyBhbmQgYHVwcGVyTGltaXQnIGlzIGFkZGVkLgorCShneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTFfdmFsaWRhdGUpOiBHSUQgaXMgY2hlY2tlZCBieQorCWd4dl9qdXN0X2NoZWNrX21heF9naWQoKS4KKwkoZ3h2X2p1c3RfYWN0U3VicmVjb3JkX3R5cGUyX3ZhbGlkYXRlKTogQ29uZGl0aW9uYWxpemUKKwl1bnZhbGlkYXRlZCB2YXJpYWJsZSBgc3Vic3RUaHJlc2hob2xkJy4gIEdJRCBpcyBjaGVja2VkIGJ5CisJZ3h2X2p1c3RfY2hlY2tfbWF4X2dpZCgpLgorCShneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTVfdmFsaWRhdGUpOiBHSUQgaXMgY2hlY2tlZCBieQorCWd4dl9qdXN0X2NoZWNrX21heF9naWQoKS4KKwkoZ3h2X2p1c3RfY2xhc3NUYWJsZV9lbnRyeV92YWxpZGF0ZSk6IENvbmRpdGlvbmFsaXplCisJdW52YWxpZGF0ZWQgdmFyaWFibGVzOyBgc2V0TWFyaycsIGBkb250QWR2YW5jZScsCisJYG1hcmtDbGFzcycsIGBjdXJyZW50Q2xhc3MnLgorCisyMDExLTA2LTE0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2d4dmFsaWRdIFByZXBhcmF0aW9uIHRvIGZpeCBnY2M0LjYgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmggKEdYVl9MT0FEX1RSQUNFX1ZBUlMpOiBOZXcgbWFjcm8gdG8KKwljb25kaXRpb25hbGl6ZSB0aGUgdmFyaWFibGUgd2hpY2ggaXMgb25seSB1c2VkIGZvciB0cmFjZSBtZXNzYWdlcy4KKwlBdXRvbWF0aWNhbGx5IHNldCBieSBGVF9ERUJVR19MRVZFTF9UUkFDRS4KKwkoR1hWX0xPQURfVU5VU0VEX1ZBUlMpOiBOZXcgbWFjcm8gdG8gY29uZGl0aW9uYWxpemUgdGhlIGxvYWRpbmcgb2YKKwl1bnZhbGlkYXRlZCB2YXJpYWJsZXMuICBVbmRlZmluZWQgYnkgZGVmYXVsdCB0byBjYWxtIGdjYzQuNiB3YXJuaW5nLgorCShHWFZfVmFsaWRhdG9yUmVjLnttaW5fZ2lkLG1heF9naWR9KTogTmV3IHZhcmlhYmxlcyB0byBob2xkIGRlZmluZWQKKwlHSUQgcmFuZ2VzLCBmb3IgdGhlIGNvbXBhcmlzb24gb2YgR0lEIHJhbmdlcyBpbiBkaWZmZXJlbnQgc3VidGFibGVzLgorCisyMDExLTA2LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gUmVtb3ZlIHVudXNlZCBzdHJ1Y3R1cmUgbWVtYmVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX1NlZ21lbnRSZWMpOiBSZW1vdmUgYGNvbnRvdXInLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKSwKKwlzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfaGludHNfY29tcHV0ZV9zZWdtZW50cyk6IFVwZGF0ZWQuCisKKzIwMTEtMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBnKysgNC42IGNvbXBpbGF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMsCisJYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyk6IFVzZSBjYXN0LgorCisyMDExLTA1LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggZ2NjIDQuNiBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3NfaW5pdF9ibHVlcyk6IFVzZSBjYXN0cyBhbmQKKwlyZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfY29tcHV0ZV9lZGdlcyk6IENvbW1lbnQgb3V0CisJYHVwX2RpcicuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IFVzZSBgaGVpZ2h0X29yZycKKwlhbmQgYHdpZHRoX29yZycgY29uZGl0aW9uYWxpemVkLgorCisyMDExLTA1LTI4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW21hY10gQ29uZGl0aW9uYWxpemUgdGhlIGluY2x1c2lvbiBvZiBgQXZhaWxhYmlsaXR5TWFjcm9zLmgnLgorCisJVGhlIG5hdGl2ZSBTREsgb24gZWFybGllc3QgTWFjIE9TIFggKDEwLjAtMTAuMSkgZGlkIG5vdCBoYXZlCisJYEF2YWlsYWJpbGl0eU1hY3Jvcy5oJy4gIFRvIHByZXZlbnQgdGhlIGluY2x1c2lvbiBvZiBtaXNzaW5nCisJaGVhZGVyIGZpbGUsIEVDQU5DRUxFRCAoaW50cm9kdWNlZCBpbiAxMC4yKSBpbiBQT1NJWCBoZWFkZXIKKwlmaWxlIDxlcnJuby5oPiBpcyBjaGVja2VkIHRvIGRldGVjdCB0aGUgc3lzdGVtIHZlcnNpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IENvbmRpdGlvbmFsaXplIHRoZQorCWluY2x1c2lvbiBvZiBgQXZhaWxhYmlsaXR5TWFjcm9zLmgnLgorCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IERpdHRvLgorCSogYnVpbGRzL3Ztcy9mdGNvbmZpZy5oOiBEaXR0by4KKworMjAxMS0wNS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgdHJhY2luZyBvZiBoaW50aW5nIHByb2Nlc3MuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludF9lZGdlcyk6IEFkZCB0cmFjaW5nIG1lc3NhZ2UKKwlgQURKVVNUJy4KKworMjAxMS0wNS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCB0cmFjZSBtZXNzYWdlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRfZWRnZXMpOiBTaG93IGNvcnJlY3QgdmFsdWUgaW4KKwl0cmFjaW5nIG1lc3NhZ2UuCisKKzIwMTEtMDUtMjQgIERhbmllbCBaaW1tZXJtYW5uICA8bmV0emltbWVAZ29vZ2xlbWFpbC5jb20+CisKKwlSZWR1Y2Ugd2FybmluZ3MgZm9yIE1TIFZpc3VhbCBTdHVkaW8gMjAxMC4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzLAorCWFmX2dseXBoX2hpbnRzX2dldF9zZWdtZW50X29mZnNldCkgWyFGVF9ERUJVR19BVVRPRklUXTogUHJvdmlkZQorCXJldHVybiB2YWx1ZS4KKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IEFkZCBjYXN0LgorCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzX3NmbnRfaWRzKTogVXNlIHByb3BlcgorCWxvb3AgdmFyaWFibGUgdHlwZS4KKworMjAxMS0wNS0xNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUF1dG9tYWtlIGNvbXBvbmVudCBgYnVpbGRzL3VuaXgvaW5zdGFsbC1zaCcgaXMgcmVtb3ZlZC4KKworCSogYnVpbGRzL3VuaXgvaW5zdGFsbC1zaDogUmVtb3ZlZC4gIEl0IGlzIG5vdCBuZWVkZWQgdG8KKwlpbmNsdWRlIHJlcG9zaXRvcnksIGJlY2F1c2UgYXV0b2dlbi5zaCBpbnN0YWxscyBpdC4KKwkqIGJ1aWxkcy91bml4Ly5naXRpZ25vcmU6IFJlZ2lzdGVyIGluc3RhbGwtc2guCisKKzIwMTEtMDUtMTIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2ZpdF0gTWFrZSB0cmFjZSBtZXNzYWdlIGZvciBDSksgYmx1ZXpvbmUgbW9yZSB2ZXJib3NlLgorCisyMDExLTA1LTA4ICBKdXN0IEZpbGwgQnVncyAgPG1vemJ1Z2JveEB5YWhvby5jb20uYXU+CisgICAgICAgICAgICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2F1dG9maXRdIEFkZCBibHVlem9uZXMgZm9yIENKSyBJZGVvZ3JhcGhzLgorCisJVG8gcmVtb3ZlIGV4dHJlbWFzIG9mIHZlcnRpY2FsIHN0cm9rZXMgb2YgQ0pLIElkZW9ncmFwaHMgYXQKKwlsb3cgcmVzb2x1dGlvbiBhbmQgbWFrZSB0aGUgdG9wIGFuZCBib3R0b20gaG9yaXpvbnRhbCBzdGVtcworCWFsaWduZWQsIGJsdWV6b25lcyBmb3IgQ0pLIElkZW9ncmFwaHMgYXJlIGNhbGN1bGF0ZWQgZnJvbQorCXNhbXBsZSBnbHlwaHMuICBBdCBwcmVzZW50LCB2ZXJ0aWNhbCBibHVlem9uZXMgKGJsdWV6b25lcworCXRvIGFsaWduIHZlcnRpY2FsIHN0ZW1zKSBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEZvciBkZXRhaWwsIHNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA0L21zZzAwMDcwLmh0bWwKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA5Mi5odG1sCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDUvbXNnMDAwMDEuaHRtbAorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogTmV3IHRyYWNlIGNvbXBvbmVudCBgYWZjamsnLgorCSogc3JjL2F1dG9maXQvYWZjamsuaCAoQUZfQ0pLe0JsdWUsQXhpcyxNZXRyaWN9UmVjKTogQWRkIENKSyB2ZXJzaW9uCisJZm9yIEFGX0xhdGlue0JsdWUsQXhpcyxNZXRyaWN9UmVjLgorCShhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMpOiBEaXR0bywgc2hhcmVkIHdpdGggSW5kaWMgbW9kdWxlLgorCShhZl9jamtfbWV0cmljc19pbml0X3dpZHRocyk6IERpdHRvLgorCShhZl9jamtfbWV0cmljc19pbml0KTogVGFrZSBBRl9DSktNZXRyaWMgaW5zdGVhZCBvZiBBRl9MYXRpbk1ldHJpYy4KKwkoYWZfY2prX21ldHJpY3Nfc2NhbGUpOiBEaXR0byAoZGVjbGFyYXRpb24pLgorCShhZl9jamtfaGludHNfaW5pdCk6IERpdHRvIChkZWNsYXJhdGlvbikuCisJKGFmX2Nqa19oaW50c19hcHBseSk6IERpdHRvIChkZWNsYXJhdGlvbikuCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfbWV0cmljc19zY2FsZSk6IERpdHRvIChib2R5KS4KKwkoYWZfY2prX2hpbnRzX2luaXQpOiBEaXR0byAoYm9keSkuCisJKGFmX2Nqa19oaW50c19hcHBseSk6IERpdHRvIChib2R5KS4KKwkoYWZfY2prX21ldHJpY3NfaW5pdF93aWR0aHMpOiBEdXBsaWNhdGUgYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocy4KKwkoYWZfY2prX21ldHJpY3NfY2hlY2tfZGlnaXRzKTogRHVwbGljYXRlIGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzLgorCShhZl9jamtfbWV0cmljc19pbml0KTogQ2FsbCBDSksgYmx1ZXpvbmUgaW5pdGlhbGl6ZXIuCisJKGFmX2Nqa19tZXRyaWNzX3NjYWxlX2RpbSk6IEFkZCBjb2RlIHRvIHNjYWxlIGJsdWV6b25lcy4KKwkoYWZfY2prX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcyk6IE5ldyBmdW5jdGlvbiwgQ0pLIHZlcnNpb24gb2YKKwlhZl9sYXRpbl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMuCisJKGFmX2Nqa19tZXRyaWNzX2luaXRfYmx1ZXMpOiBOZXcgZnVuY3Rpb24sIENKSyB2ZXJzaW9uIG9mCisJYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzLgorCShhZl9jamtfaGludHNfZWRnZXMpOiBBZGQgY29kZSB0byBhbGlnbiB0aGUgZWRnZSBzdGVtcyB0byBibHVlIHpvbmVzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmluZGljLmMgKGFmX2luZGljX21ldHJpY3NfaW5pdCk6IFRha2UgQUZfQ0pLTWV0cmljCisJaW5zdGVhZCBvZiBBRl9MYXRpbk1ldHJpYywgYW5kIGluaXRpYWxpemUgYXMgYWZfY2prX21ldHJpY3NfaW5pdC4KKwlIb3dldmVyIGJsdWV6b25lcyBhcmUgbm90IGluaXRpYWxpemVkLgorCShhZl9pbmRpY19tZXRyaWNzX3NjYWxlKTogVGFrZSBBRl9DSktNZXRyaWMgaW5zdGVhZCBvZiBBRl9MYXRpbk1ldHJpYy4KKwkoYWZfaW5kaWNfaGludHNfaW5pdCk6IERpdHRvLgorCShhZl9pbmRpY19oaW50c19hcHBseSk6IERpdHRvLgorCisJKiBkb2NzL0NIQU5HRVM6IE5vdGUgYWJvdXQgQ0pLIGJsdWV6b25lIHN1cHBvcnQuCisKKzIwMTEtMDUtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBSZW1vdmUgdW51c2VkIHN0cnVjdCBtZW1iZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uaCAoQUZfTGF0aW5BeGlzKTogUmVtb3ZlIGBjb250cm9sX292ZXJzaG9vdCcuCisKKzIwMTEtMDUtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSk6IFNpbXBsaWZ5LgorCisyMDExLTA1LTAxICBKdXN0IEZpbGwgQnVncyAgPG1vemJ1Z2JveEB5YWhvby5jb20uYXU+CisgICAgICAgICAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gQWRkIG1vcmUgZGVidWdnaW5nIGZ1bmN0aW9ucy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzLAorCWFmX2dseXBoX2hpbnRzX2dldF9zZWdtZW50X29mZnNldCk6IE5ldyBmdW5jdGlvbnMuCisKKzIwMTEtMDUtMDEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlBZGQgbmV3IG9wdGlvbiBgLS1kaXNhYmxlLW1tYXAnIHRvIGNvbmZpZ3VyZSBzY3JpcHQuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IE5ldyBvcHRpb24gYC0tZGlzYWJsZS1tbWFwJworCWlzIGFkZGVkLiAgSXQgaXMgZm9yIHRoZSBkZXZlbG9wZXJzIHRvIHNpbXVsYXRlIHRoZSBzeXN0ZW1zCisJd2l0aG91dCBtbWFwKCkgKGxpa2UgNC4zQlNELCBtaW5peCBldGMpIG9uIFBPU0lYIHN5c3RlbXMuCisKKzIwMTEtMDQtMzAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbdHJ1ZXR5cGVdIEFsd2F5cyByZWNhbGN1bGF0ZSB0aGUgc2ZudCB0YWJsZSBjaGVja3N1bS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9nZXRfc2ZudF9jaGVja3N1bSk6IFJlY2FsY3VsYXRlCisJdGhlIHNmbnQgdGFibGUgY2hlY2tzdW0gZXZlbiBpZiBub24temVybyB2YWx1ZSBpcyB3cml0dGVuIGluCisJdGhlIFRydWVUeXBlIGZvbnQgaGVhZGVyLiAgU29tZSBiYWQgUERGIGdlbmVyYXRvcnMgd3JpdGUKKwl3cm9uZyB2YWx1ZXMuICBGb3IgZGV0YWlscyBzZWUgZXhhbXBsZXMgYW5kIGJlbmNobWFyayB0ZXN0cworCW9mIHRoZSBsYXRlbmN5IGJ5IHJlY2FsY3VsYXRpb246CisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwOTEuaHRtbAorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA0L21zZzAwMDk2Lmh0bWwKKworMjAxMS0wNC0zMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVt0cnVldHlwZV0gUmVnaXN0ZXIgYSBzZXQgb2YgdHJpY2t5IGZvbnRzLCBORUMgRkEgZmFtaWx5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMpOgorCUFkZCA4IGNoZWNrc3VtIHNldHMgZm9yIE5FQyBGQSBmYW1pbHkuICBGb3IgdGhlIHRyaWNreSBmb250cworCXdpdGhvdXQgc29tZSB0YWJsZXMgKGUuZy4gTkVDIEZBIGZvbnRzIGxhY2sgY3Z0IHRhYmxlKSwKKwlleHRyYSBjaGVjayBpcyBhZGRlZCB0byBhc3N1cmUgdGhhdCBhIHplcm8tbGVuZ3RoIHRhYmxlIGluIHRoZQorCXJlZ2lzdHJ5IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZm9udC4KKworMjAxMS0wNC0yOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVt0cnVldHlwZV0gRml4IGEgYnVnIGluIHRoZSBzZm50IHRhYmxlIGNoZWNrc3VtIGdldHRlci4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9nZXRfc2ZudF9jaGVja3N1bSk6IENoZWNrIHRoZQorCXJldHVybiB2YWx1ZSBvZiBmYWNlLT5nb3RvX3RhYmxlKCkgY29ycmVjdGx5LgorCisyMDExLTA0LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW1wcm92ZSB0cmFjaW5nIG1lc3NhZ2VzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcywKKwlhZl9sYXRpbl9hbGlnbl9saW5rZWRfZWRnZSwgYWZfbGF0aW5faGludF9lZGdlcyk6IERvIGl0LgorCisyMDExLTA0LTI1ICBLYW4tUnUgQ2hlbiAgPGthbnJ1QGthbnJ1LmluZm8+CisKKwlbdHJ1ZXR5cGVdIEFsd2F5cyBjaGVjayB0aGUgY2hlY2tzdW0gdG8gaWRlbnRpZnkgdHJpY2t5IGZvbnRzLgorCisJQmVjYXVzZSBzb21lIFBERiBnZW5lcmF0b3JzIG1hbmdsZSB0aGUgZmFtaWx5IG5hbWUgYmFkbHksCisJdGhlIHRyaWNreW5lc3MgY2hlY2sgYnkgdGhlIGNoZWNrc3VtIHNob3VsZCBiZSBpbnZva2VkIGFsd2F5cy4KKwlGb3Igc2FtcGxlIFBERiwgc2VlCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwNzMuaHRtbAorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3MpOiBFdmVuIHdoZW4KKwl0dF9jaGVja190cmlja3luZXNzX2ZhbWlseSgpIGZpbmRzIG5vIHRyaWNreW5lc3MsCisJdHRfY2hlY2tfdHJpY2t5bmVzc19zZm50X2lkcygpIGlzIGludm9rZWQuCisKKzIwMTEtMDQtMjIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2ZpdF0gQWRkIG1vcmUgSW5kaWMgc2NyaXB0cyB3aXRoIGhhbmdpbmcgYmFzZWxpbmUuCisKKwkqIHNyYy9hdXRvZml0L2FmaW5kaWMuYyAoYWZfaW5kaWNfdW5pcmFuZ2VzKTogVGliZXRhbiwgTGltYnUsCisJU3VuZGFuZXNlLCBNZWV0ZWkgTWF5YWssIFN5bG90aSBOYWdyaSBhbmQgU2hhcmFkYSBzY3JpcHRzIGFyZQorCWFkZGVkLgorCisyMDExLTA0LTIxICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCUFsd2F5cyBpZ25vcmUgZ2xvYmFsIGFkdmFuY2UuCisKKwlUaGlzIG1ha2VzIEZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIIHJlZHVuZGFudCwKKwlkZXByZWNhdGVkLCBhbmQgaWdub3JlZC4gIFRoZSBuZXcgYmVoYXZpb3IgaXMgd2hhdCBldmVyeSBtYWpvciB1c2VyCisJb2YgRnJlZVR5cGUgaGFzIGJlZW4gcmVxdWVzdGluZy4gIEdsb2JhbCBhZHZhbmNlIGlzIGJyb2tlbiBpbiBtYW55CisJQ0pLIGZvbnRzLiAgSnVzdCBpZ25vcmluZyBpdCBieSBkZWZhdWx0IG1ha2VzIG1vc3Qgc2Vuc2UuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9nZXRfYWR2YW5jZXMpLAorCXNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0dldF9ITWV0cmljcywgVFRfR2V0X1ZNZXRyaWNzLAorCXR0X2dldF9tZXRyaWNzLCBjb21wdXRlX2dseXBoX21ldHJpY3MsIFRUX0xvYWRfR2x5cGgpLAorCXNyYy90cnVldHlwZS90dGdsb2FkLmg6IEltcGxlbWVudCBpdC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDExLTA0LTIxICByYWlueTYxNDQgIDxyYWlueTYxNDRAZ21haWwuY29tPgorCisJW2F1dG9maXRdIEJsdXIgQ0pLIHN0ZW1zIGlmIHRvbyBtYW55IHRvIHByZXNlcnZlIHRoZWlyIGdhcHMuCisKKwlXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBzdGVtcyB0byBwcmVzZXJ2ZSB0aGVpciBnYXBzIGluIHRoZQorCXJhc3Rlcml6YXRpb24gb2YgQ0pLIElkZW9ncmFwaHMgYXQgYSBsb3cgcmVzb2x1dGlvbiwgYmx1ciB0aGUKKwlzdGVtcyBpbnN0ZWFkIG9mIHNob3dpbmcgY2x1bXBlZCBzdGVtcy4gIFNlZQorCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTAyL21zZzAwMDExLmh0bWwKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA0Ni5odG1sCisJZm9yIGRldGFpbHMuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50X2VkZ2VzKTogU3RvcmUgdGhlIHBvc2l0aW9uIG9mCisJdGhlIHByZXZpb3VzIHN0ZW0gYnkgYGhhc19sYXN0X3N0ZW0nIGFuZCBgbGFzdF9zdGVtX3BvcycsIGFuZCBza2lwCisJYSBzdGVtIGlmIHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBzdGVtIGFyZSB0b28gbmVhciB0byBwcmVzZXJ2ZQorCXRoZSBnYXAuCisKKzIwMTEtMDQtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUludGVncmF0ZSBhdXRvZml0dGVyIGRlYnVnZ2luZyBzdHVmZi4KKworCSogZGV2ZWwvZnRvcHRpb24uaCwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShGVF9ERUJVR19BVVRPRklUKTogTmV3IG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIHRyYWNlIGNvbXBvbmVudHMgZm9yCisJYXV0b2ZpdHRlci4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9MT0cpOiBSZW1vdmVkLgorCShfYWZfZGVidWcpOiBSZW1vdmVkLgorCisJKiBzcmMvYXV0b2ZpdC8qOiBzL0FGX0RFQlVHL0ZUX0RFQlVHX0FVVE9GSVQvLgorCXMvQUZfTE9HL0ZUX1RSQUNFNS8uCisJRGVmaW5lIEZUX0NPTVBPTkVOVCB3aGVyZSBuZWNlc3NhcnkuCisKKzIwMTEtMDQtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVN5bmNocm9uaXplIGNvbmZpZyBmaWxlcy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IENvcHkgbWlzc2luZyBhc3NlbWJsZXIgcm91dGluZXMgZnJvbQorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmguCisKKzIwMTEtMDQtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2F1eF0gRml4IFNhdmFubmFoIGJ1ZyAjMzMwNDcuCisKKwlQYXRjaCBzdWJtaXR0ZWQgYnkgYW5vbnltb3VzIHJlcG9ydGVyLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX3RhYmxlX2FkZCk6IFVzZSBGVF9QdHJEaXN0IGZvciBwb2ludGVyCisJZGlmZmVyZW5jZS4KKworMjAxMS0wNC0xMSAgS2FuLVJ1IENoZW4gIDxrYW5ydUBrYW5ydS5pbmZvPgorCisJRml4IHJlYWRpbmcgb2Ygc2lnbmVkIGludGVnZXJzIGZyb20gZmlsZXMgb24gNjRiaXQgcGxhdGZvcm1zLgorCisJUHJldmlvdXNseSwgc2lnbmVkIGludGVnZXJzIHdlcmUgY29udmVydGVkIHRvIHVuc2lnbmVkIGludGVnZXJzLCBidXQKKwl0aGlzIGNhbiBmYWlsIGJlY2F1c2Ugb2Ygc2lnbiBleHRlbnNpb24uICBGb3IgZXhhbXBsZSwgMHhhMzQ0YTFlYgorCWJlY29tZXMgMHhmZmZmZmZmZmEzNDRhMWViLgorCisJV2Ugbm93IGRvIHRoZSByZXZlcnNlIHdoaWNoIGlzIGFsd2F5cyBjb3JyZWN0IGJlY2F1c2UgdGhlIGludGVnZXIKKwlzaXplIGlzIHRoZSBzYW1lIGR1cmluZyB0aGUgY2FzdCBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oLCBzcmMvYmFzZS9mdHN0cmVhbS5jCisJKEZUX1N0cmVhbV9HZXQqKTogUmVwbGFjZSB3aXRoLi4uCisJKEZUX1N0cmVhbV9HZXRVKik6IEZ1bmN0aW9ucyB3aGljaCByZWFkIHVuc2lnbmVkIGludGVnZXJzLgorCVVwZGF0ZSBhbGwgbWFjcm9zIGFjY29yZGluZ2x5LgorCisJKiBzcmMvZ3ppcC9mdGd6aXAuYyAoZnRfZ3ppcF9nZXRfdW5jb21wcmVzc2VkX3NpemUpOiBVcGRhdGVkLgorCisyMDExLTA0LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlVcGRhdGUgVW5pY29kZSByYW5nZXMgZm9yIENKSyBhdXRvZml0dGVyOyBpbiBwYXJ0aWN1bGFyLCBhZGQgSGFuZ3VsLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfdW5pcmFuZ2VzKTogVXBkYXRlIHRvIFVuaWNvZGUgNi4wLgorCisyMDExLTA0LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggZm9ybWF0dGluZyBvZiBhdXRvZml0IGRlYnVnIGR1bXBzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzLAorCWFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMsIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMpOiBBZGp1c3QKKwljb2x1bW4gd2lkdGhzLgorCisyMDExLTAzLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfT3V0bGluZVJlYyk6IFJlbW92ZWQsIHVudXNlZC4KKworMjAxMS0wMy0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9NQVhfQ0lEX0ZPTlRTKTogSW5jcmVhc2UgdG8gMjU2LgorCVRoaXMgbGltaXQgaXMgZ2l2ZW4gb24gcC4gMzcgb2YgQWRvYmUgVGVjaG5pY2FsIE5vdGUgIzUwMTQuCisKKzIwMTEtMDMtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2xvY2EpOiBGaXggbWlzbWF0Y2ggd2FybmluZy4KKworMjAxMS0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9vcGVuX2ZvbnQpOiBDaGVjayBudW1iZXIgb2YgVFRDIHN1YmZvbnRzLgorCisyMDExLTAzLTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNb3JlIEMrKyBjb21waWxhdGlvbiBmaXhlcy4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cywKKwlhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzLCBhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzKQorCVtfX2NwbHVzcGx1c106IFByb3RlY3Qgd2l0aCBgZXh0ZXJuICJDIicuCisKKzIwMTEtMDMtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUMrKyBjb21waWxhdGlvbiBmaXhlcy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19hcHBseSksIHNyYy9hdXRvZml0L2FmY2prLmMKKwkoYWZfY2prX2hpbnRzX2FwcGx5KTogVXNlIGNhc3QgZm9yIGBkaW0nLgorCisyMDExLTAzLTE3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlBIGJldHRlciBmaXggZm9yIFNhdmFubmFoIGJ1ZyAjMzI2NzEuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9jb25pYyk6IENsZWFuIHVwIGNvZGUgYW5kCisJcmVwbGFjZSBXSElMRSBsb29wIHdpdGggYSBtb3JlIG5hdHVyYWwgRE8tV0hJTEUgY29uc3RydWN0LgorCisyMDExLTAzLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+LgorCisJKiBzcmMvYmFzZS9mdHN0cm9rZS5jIChGVF9TdHJva2VyUmVjKTogUmVtb3ZlIHVudXNlZCBgdmFsaWQnIGZpZWxkLgorCVN1Z2dlc3RlZCBieSBHcmFoYW0gQXNoZXIuCisKKzIwMTEtMDMtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2UgRlRfU2ZudF9UYWJsZV9JbmZvIHJldHVybiB0aGUgbnVtYmVyIG9mIFNGTlQgdGFibGVzLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X3RhYmxlX2luZm8pOiBJbXBsZW1lbnQgaXQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmg6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDExLTAzLTA3ICBCcmFtIFRhc3N5bnMgIDxicmFtdEBlbmZvY3VzLmJlPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjMjc5ODguCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChyZW1vdmVfc3R5bGUpOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9mYWNlX2luaXQpOiBVc2UgaXQgdG8gc3RyaXAgb2ZmIHRoZSBzdHlsZSBwYXJ0IG9mIHRoZSBmYW1pbHkKKwluYW1lLgorCisyMDExLTAzLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMS0wMy0wNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJUXVpY2sgZml4IGZvciBTYXZhbm5haCBidWcgIzMyNjcxLgorCisJVGhpcyBpc24ndCB0aGUgb3B0aW1hbCBzb2x1dGlvbiB5ZXQsIGJ1dCBpdCByZXN0b3JlcyB0aGUgcHJldmlvdXMKKwlyZW5kZXJpbmcgcXVhbGl0eSAobW9yZSBvciBsZXNzKS4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2NvbmljKTogRG8gbW9yZSBzcGxpdHRpbmcuCisKKzIwMTEtMDMtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBhdXRvaGludGluZyBmYWxsYmFjay4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBBc3N1cmUgdGhhdCB3ZSBvbmx5IGNoZWNrIFRURnMsCisJaWdub3JpbmcgQ0ZGLWJhc2VkIE9URnMuCisKKzIwMTEtMDItMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIgdG8gY29udHJvbCB0aGUgYXV0b2ZpdCB3YXJwZXIuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSKTogTmV3IG1hY3JvLgorCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9VU0VfV0FSUEVSKTogUmVtb3ZlLgorCisJKiBzcmMvYXV0b2ZpdC8qOiBzL0FGX1VTRV9XQVJQRVIvQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSLy4KKworCSogc3JjL2F1dG9maXQvYWZ3YXJwLmMgWyFBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVJdOiBSZXBsYWNlIGR1bW15CisJdmFyaWFibGUgYXNzaWdubWVudCB3aXRoIGEgdHlwZWRlZi4KKworMjAxMS0wMi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFNsaWdodCBzaW1wbGlmaWNhdGlvbnMuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyk6IFJlbW92ZQorCXRlc3Qgd2hpY2ggYWx3YXlzIHJldHVybnMgZmFsc2UuCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcyk6IFJlbW92ZSByZWR1bmRhbnQgYXNzaWdubWVudC4KKworMjAxMS0wMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkb2NzL1BST0JMRU1TOiBNZW50aW9uIHJlbmRlcmluZyBkaWZmZXJlbmNlcyBvbiBkaWZmZXJlbnQKKwlwbGF0Zm9ybXMuCisJU3VnZ2VzdGVkIGFuZCB3b3JkZWQgYnkgSmFzb24gT3dlbiA8amFzb24uYS5vd2VuQGdtYWlsLmNvbT4uCisKKzIwMTEtMDItMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBDb21tZW50IG91dCB1bnVzZWQgY29kZS4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jLCBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jCisJKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMpOiBEbyBpdC4KKworMjAxMS0wMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX0dseXBoSGludHMpOiBSZW1vdmUgdW51c2VkIGZpZWxkLgorCisyMDExLTAyLTIwICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2NhY2hlXSBGaXggYW4gb2ZmLWJ5LW9uZSBidWcgaW4gYEZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCcuCisJRm91bmQgYnkgPHljaGVuMTM5MjAwMUB5YWhvby5jb20uY24+LCBzZWUgZGV0YWlsIGluCisKKwkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDExLTAxL21zZzAwMDIzLmh0bWwKKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKEZUQ19DYWNoZV9SZW1vdmVGYWNlSUQpOiBDaGVjayB0aGUgbm9kZQorCWJ1Y2tldHNbY2FjaGUtPnAgKyBjYWNoZS0+bWFza10gdG9vLgorCisyMDExLTAyLTE5ICBLZXZpbiBLb2ZsZXIgIDxrZXZpbi5rb2ZsZXJAY2hlbGxvLmF0PgorCisJRmFsbCBiYWNrIHRvIGF1dG9oaW50aW5nIGlmIGEgVFRGL09URiBkb2Vzbid0IGNvbnRhaW4gYW55IGJ5dGVjb2RlLgorCVRoaXMgaXMgU2F2YW5uYWggcGF0Y2ggIzc0NzEuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogSW1wbGVtZW50IGl0LgorCisyMDExLTAyLTE5ICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJW2NmZl0gRml4IHN1YnNldCBwcmVmaXggcmVtb3ZhbC4KKwlUaGlzIGlzIFNhdmFubmFoIHBhdGNoICM3NDY1LgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAocmVtb3ZlX3N1YnNldF9wcmVmaXgpOiBVcGRhdGUgbGVuZ3RoIGFmdGVyCisJc3Vic2V0IHByZWZpeCByZW1vdmFsLgorCisyMDExLTAyLTEzICBCcmFkbGV5IEdyYWluZ2VyICA8YmdyYWluZ2VyQGxvZ29zLmNvbT4KKworCUFkZCBpbmxpbmUgYXNzZW1ibHkgdmVyc2lvbiBvZiBGVF9NdWxGaXggZm9yIE1TVkMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IFBvcnRlZCB0aGUgRlRfTXVsRml4X2kzODYKKwlmdW5jdGlvbiBmcm9tIEdOVSBpbmxpbmUgYXNzZW1ibHkgc3ludGF4IChzZWUgI2lmZGVmIF9fR05VQ19fIGJsb2NrCisJYWJvdmUpIHRvIE1BU00gc3ludGF4IGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKworMjAxMS0wMi0xMyAgQnJhZGxleSBHcmFpbmdlciAgPGJncmFpbmdlckBsb2dvcy5jb20+CisKKwlBZGQgcHJvamVjdCBhbmQgc29sdXRpb24gZmlsZXMgaW4gVmlzdWFsIFN0dWRpbyAyMDEwIGZvcm1hdC4KKworCSogYnVpbGRzL3dpbjMyLy5naXRpZ25vcmU6IElnbm9yZSB1c2VyLXNwZWNpZmljIGNhY2hlIGZpbGVzLgorCSogYnVpbGRzL3dpbjMyL3ZjMjAxMC86IEFkZCBWUzIwMTAgcHJvamVjdCAmIHNvbHV0aW9uIGZpbGVzLCBjcmVhdGVkCisJYnkgdXBncmFkaW5nIGJ1aWxkcy93aW4zMi92YzIwMDgvZnJlZXR5cGUudmNwcm9qLgorCSogb2Jqcy8uZ2l0aWdub3JlOiBJZ25vcmUgVmlzdWFsIFN0dWRpbyBvdXRwdXQgZmlsZXMuCisKKzIwMTEtMDItMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZkdW1teS5jOiBJbmNsdWRlIGBhZmVycm9ycy5oJy4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IENocmlzIExpZGRlbGwgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+LgorCisyMDExLTAyLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJZ25vcmUgdW5rbm93biBvcGVyYXRvcnMgaW4gY2hhcnN0cmluZ3MuCisJUGF0Y2ggc3VnZ2VzdGVkIGJ5IE1pbGVzLkxhdSA8c3VubGlhbmdfbGl1QGZveGl0c29mdHdhcmUuY29tPi4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEVtaXQgdHJhY2luZworCW1lc3NhZ2UgZm9yIHVua25vd24gb3BlcmF0b3JzIGFuZCBjb250aW51ZSBpbnN0ZWFkIG9mIGV4aXRpbmcgd2l0aCBhCisJc3ludGF4IGVycm9yLgorCisyMDExLTAyLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZUX0xPQURfUEVEQU5USUMgbm93IGFmZmVjdHMgYHByZXAnIGFuZCBgZnBnbScgYWxzby4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfbG9hZGVyX2luaXQpOiBIYW5kbGUKKwlgRlRfTE9BRF9QRURBTlRJQycuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXAsCisJdHRfc2l6ZV9pbml0X2J5dGVjb2RlLCB0dF9zaXplX3JlYWR5X2J5dGVjb2RlKTogTmV3IGFyZ3VtZW50IHRvCisJaGFuZGxlIHBlZGFudGljIG1vZGUuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmg6IFVwZGF0ZWQuCisKKzIwMTEtMDEtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJvdGVjdCBqdW1wIGluc3RydWN0aW9ucyBhZ2FpbnN0IGVuZGxlc3MgbG9vcHMuCisKKwkqIHNyYy90cnVldHlwZS9pbnRlcnAuYyAoRE9fSlJPVCwgRE9fSk1QUiwgRE9fSlJPRik6IEV4aXQgd2l0aCBlcnJvcgorCWlmIG9mZnNldCBpcyB6ZXJvLgorCisyMDExLTAxLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEltcHJvdmUgaGFuZGxpbmcgb2YgaW52YWxpZCByZWZlcmVuY2VzLgorCisJKiBzcmMvdHJ1ZXR5cGUvaW50ZXJwLmM6IFNldCBldmVuIG1vcmUgVFRfRXJyX0ludmFsaWRfUmVmZXJlbmNlCisJZXJyb3IgY29kZXMgb25seSBpZiBwZWRhbnRpYyBoaW50aW5nIGlzIGFjdGl2ZS4gIEF0IHRoZSBzYW1lIHRpbWUsCisJdHJ5IHRvIHByb3ZpZGUgc2FuZSB2YWx1ZXMgd2hpY2ggaG9wZWZ1bGx5IGFsbG93IHVzZWZ1bAorCWNvbnRpbnVhdGlvbi4gIEV4Y2VwdGlvbiB0byB0aGlzIGlzIENBTEwgYW5kIExPT1BDQUxMIOKAkyBkdWUgdG8KKwlwb3NzaWJsZSBzdGFjayBjb3JydXB0aW9uIGl0IGlzIG5lY2Vzc2FyeSB0byBiYWlsIG91dC4KKworMjAxMS0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXByb3ZlIGhhbmRsaW5nIG9mIHN0YWNrIHVuZGVyZmxvdy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucywgSW5zX0ZMSVBQVCwgSW5zX0RFTFRBUCwKKwlJbnNfREVMVEFDKTogRXhpdCB3aXRoIGVycm9yIG9ubHkgaWYgYHBlZGFudGljX2hpbnRpbmcnIGlzIHNldC4KKwlPdGhlcndpc2UsIHRyeSB0byBkbyBzb21ldGhpbmcgc2FuZS4KKworMjAxMS0wMS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dG10eC5jICh0dF9mYWNlX2xvYWRfaG10eCk6IEZpeCB0cmFjaW5nIG1lc3NhZ2UuCisKKzIwMTEtMDEtMzAgIExJVSBTdW4tTGlhbmcgIDxzdW5saWFuZ19saXVAZm94aXRzb2Z0d2FyZS5jb20+CisKKwlbdHJ1ZXR5cGVdOiBGaXggYmVoYXZpb3VyIG9mIE1JQVAgZm9yIGludmFsaWQgYXJndW1lbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01JQVApOiBTZXQgcmVmZXJlbmNlIHBvaW50cyBldmVuIGluCisJY2FzZSBvZiBlcnJvci4KKworMjAxMS0wMS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggaGFuZGxpbmcgb2YgTUlSUCBpbnN0cnVjdGlvbi4KKworCVRoYW5rcyB0byBHcmVnIEhpdGNoY29jayB3aG8gZXhwbGFpbmVkIHRoZSBpc3N1ZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NSVJQKTogUmVwbGFjZSBhIGA+PScgb3BlcmF0b3Igd2l0aAorCWA+JyBzaW5jZSB0aGUgZGVzY3JpcHRpb24gaW4gdGhlIHNwZWNpZmljYXRpb24gaXMgaW5jb3JyZWN0LgorCVRoaXMgZml4ZXMsIGZvciBleGFtcGxlLCBnbHlwaCBgdHdvJyBpbiBmb250IGBIZWx2ZXRpY2EgTmV1ZSBMVCBDb20KKwk2NSBtZWRpdW0nIGF0IDE1cHBlbS4KKworMjAxMS0wMS0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBBUk0gYXNzZW1ibHkgY29kZSBpbiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9NdWxGaXhfYXJtKToKKwlDb3B5IHRoZSBtYWludGFpbmVkIGNvZGUgZnJvbSBidWlsZHMvdW5peC9mdGNvbmZpZy5pbi4KKwlPbGQgR05VIGJpbnV0aWxzIGNvdWxkIG5vdCBhY2NlcHQgdGhlIHJlZHVjZWQgc3ludGF4CisJYG9yciAlMCwgJTIsIGxzbCAjMTYnLiAgVW4tb21pdHRlZCBzeW50YXggbGlrZSBSVkNULAorCWBvcnIgJTAsICUwLCAlMiwgbHNsICMxNicgaXMgYmV0dGVyLiAgUmVwb3J0ZWQgYnkKKwlKb2huc29uIFkuIFlhbi4gIFRoZSBidWcgcmVwb3J0IGJ5IFF0IGRldmVsb3BlcnMgaXMKKwljb25zaWRlcmVkIHRvby4KKworCWh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctNjUyMQorCisyMDExLTAxLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcmFzdGVyXSBNYWtlIGJib3ggaGFuZGxpbmcgdGhlIHNhbWUgYXMgd2l0aCBNaWNyb3NvZnQncyByYXN0ZXJpemVyLgorCisJUmlnaHQgYmVmb3JlIEIvVyByYXN0ZXJpemluZywgdGhlIGJib3ggZ2V0cyBzaW1wbHkgcm91bmRlZCB0bworCWludGVnZXJzLiAgVGhpcyBmaXhlcywgZm9yIGV4YW1wbGUsIGdseXBoIGB0aHJlZScgaW4gZm9udCBgSGVsdmV0aWNhCisJTmV1ZSBMVCBDb20gNjUgTWVkaXVtJyBhdCAxMXBwZW0uCisKKwlUaGFua3MgdG8gR3JlZyBIaXRjaGNvY2sgd2hvIGV4cGxhaW5lZCB0aGlzIGJlaGF2aW91ci4KKworCSogc3JjL3Jhc3Rlci9mdHJlbmQxLmMgKGZ0X3Jhc3RlcjFfcmVuZGVyKTogSW1wbGVtZW50IGl0LgorCisyMDExLTAxLTE1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJQ29weSAtbWNwdT0qICYgLW1hcmNoPSogb3B0aW9ucyBmcm9tIENGTEFHUyB0byBMREZMQUdTLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBDb25zaWRlciByZWNlbnQgZ2NjLXN0YW5kYXJkCisJZmxhZ3MgdG8gc3BlY2lmeSBhcmNoaXRlY3R1cmUgaW4gQ0ZMQUdTICYgTERGTEFHUworCWhhcm1vbml6YXRpb24uICBSZXF1ZXN0ZWQgYnkgU2F2YW5uYWggYnVnICMzMjExNCwgdG8KKwlzdXBwb3J0IG11bHRpbGliIGZlYXR1cmUgb2YgQnVpbGRSb290IFNESyBjb3JyZWN0bHkuCisKKzIwMTEtMDEtMTUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggb2ZmLWJ5LW9uZSBidWcgaW4gQ0ZMQUdTICYgTERGTEFHUyBoYXJtb25pemVyLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBTb21lIGltcG9ydGFudCBvcHRpb25zIHRoYXQKKwlpbmNsdWRlZCBpbiBDRkxBR1MgYnV0IG5vdCBpbiBMREZMQUdTIGFyZSBjb3BpZWQgdG8KKwlMREZMQUdTLCBidXQgdGhlIGxhc3Qgb3B0aW9uIGluIENGTEFHUyB3YXMgbm90IGNoZWNrZWQuCisKKzIwMTEtMDEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIEFkZCB1bmRvY3VtZW50ZWQgZHJvcC1vdXQgcnVsZSB0byB0aGUgb3RoZXIgYmJveCBzaWRlIGFsc28uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVmVydGljYWxfU3dlZXBfRHJvcCwKKwlIb3Jpem9udGFsX1N3ZWVwX0Ryb3ApOiBJbXBsZW1lbnQgaXQuCisKKzIwMTEtMDEtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtyYXN0ZXJdIFJlZHVjZSBqaXR0ZXIgdmFsdWUuCisKKwlUaGlzIGNhdGNoZXMgYSByZW5kZXJpbmcgcHJvYmxlbSB3aXRoIGdseXBoIGB4JyBmcm9tIFRhaG9tYSBhdAorCTEwcHBlbS4gIEl0IHNlZW1zIHRoYXQgdGhlIGluY3JlYXNlIG9mIHRoZSBwcmVjaXNpb24gaW4gdGhlIGNoYW5nZQorCWZyb20gMjAwOS0wNi0xMSBtYWtlcyBhIGxhcmdlciBqaXR0ZXIgdmFsdWUgdW5uZWNlc3NhcnkuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoU2V0X0hpZ2hfUHJlY2lzaW9uKTogSW1wbGVtZW50IGl0LgorCisyMDExLTAxLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcmFzdGVyXSBIYW5kbGUgZHJvcC1vdXRzIGF0IGdseXBoIGJvcmRlcnMgYWNjb3JkaW5nIHRvIE1pY3Jvc29mdC4KKworCUlmIGEgZHJvcC1vdXQgcnVsZSB3b3VsZCBzd2l0Y2ggb24gYSBwaXhlbCBvdXRzaWRlIG9mIHRoZSBnbHlwaCdzCisJYm91bmRpbmcgYm94LCB1c2UgdGhlIHJpZ2h0IChvciB0b3ApIHBpeGVsIGluc3RlYWQuICBUaGlzIGlzIGFuCisJdW5kb2N1bWVudGVkIGZlYXR1cmUsIGJ1dCBzb21lIGZvbnRzIGxpa2UgYEhlbHZldGljYSBOZXVlIExUIENvbSA2NQorCU1lZGl1bScgaGVhdmlseSByZWx5IG9uIGl0LgorCisJVGhhbmtzIHRvIEdyZWcgSGl0Y2hjb2NrIHdobyBleHBsYWluZWQgdGhpcyBiZWhhdmlvdXIuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVmVydGljYWxfU3dlZXBfRHJvcCwKKwlIb3Jpem9udGFsX1N3ZWVwX0Ryb3ApOiBJbXBsZW1lbnQgaXQuCisKKzIwMTEtMDEtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2FjaGVdIEZpeCBTYXZhbm5haCBidWcgIzMxOTIzLCBwYXRjaCBkcmFmdGVkIGJ5IEhhcnNoYS4KKworCVdoZW4gYSBub2RlIGNvbXBhcmF0b3IgY2hhbmdlcyB0aGUgY2FjaGVkIG5vZGVzIGR1cmluZyB0aGUKKwlzZWFyY2ggb2YgYSBub2RlIG1hdGNoaW5nIHdpdGggcXVlcmllZCBwcm9wZXJ0aWVzLCB0aGUKKwlwb2ludGVycyBvYnRhaW5lZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSB1cGRhdGVkIHRvCisJcHJldmVudCB0aGUgZGVyZWZlcmVuY2UgdG8gZnJlZWQgb3IgcmVhbGxvY2F0ZWQgbm9kZXMuCisJVG8gbWluaW1pemUgdGhlIHJlc2NhbiBvZiB0aGUgbGlua2VkIGxpc3QsIHRoZSB1cGRhdGUgaXMKKwlleGVjdXRlZCB3aGVuIHRoZSBjb21wYXJhdG9yIG5vdGlmaWVzIHRoZSBjaGFuZ2Ugb2YgY2FjaGVkCisJbm9kZXMuIFRoaXMgY2hhbmdlIGRlcGVuZHMgcHJldmlvdXMgY2hhbmdlOgorCTM4YjI3MmZmYmJkYWFlMjc2ZDYzNmFlYzRlZjg0YWY0MDdkMTYxODEKKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DQUNIRV9MT09LVVBfQ01QKTogUmVzY2FuIHRoZQorCXRvcCBub2RlIGlmIHRoZSBjYWNoZWQgbm9kZXMgYXJlIGNoYW5nZWQuCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuYyAoRlRDX0NhY2hlX0xvb2t1cCk6IERpdHRvLgorCisyMDExLTAxLTA5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2NhY2hlXSBOb3RpY2UgaWYgYSBjYWNoZSBxdWVyeSBpbmR1Y2VkIHRoZSBub2RlIGxpc3QgY2hhbmdlLgorCisJU29tZSBub2RlIGNvbXBhcmF0b3JzIChjb21wYXJpbmcgdGhlIGNhY2hlIG5vZGUgY29udGVudHMgYW5kIHRoZQorCXByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5IHRoZSBxdWVyeSkgY2FuIGZsdXNoIHRoZSBjYWNoZSBub2RlIHRvCisJcHJldmVudCB0aGUgY2FjaGUgaW5mbGF0aW9uLiAgVGhlIGNoYW5nZSBtYXkgaW52YWxpZGF0ZSB0aGUgcG9pbnRlcnMKKwl0byB0aGUgbm9kZSBvYnRhaW5lZCBiZWZvcmUgdGhlIG5vZGUgY29tcGFyaXNvbiwgc28gaXQgc2hvdWxkIGJlCisJbm90aWNlZCB0byB0aGUgY2FsbGVyLiAgVGhlIHByb2JsZW0gY2F1c2VkIGJ5IHRoZSBjYWNoZSBub2RlCisJY2hhbmdpbmcgaXMgcmVwb3J0ZWQgYnkgSGFyc2hhLCBzZWUgU2F2YW5uYWggYnVnICMzMTkyMy4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19Ob2RlX0NvbXBhcmVGdW5jKTogQWRkIG5ldyBhcmd1bWVudAorCWBGVF9Cb29sKiBsaXN0X2NoYW5nZWQnIHRvIGluZGljYXRlIHRoZSBjaGFuZ2Ugb2YgdGhlIGNhY2hlZCBub2RlcworCXRvIHRoZSBjYWxsZXIuCisJKEZUQ19DQUNIRV9MT09LVVBfQ01QKTogV2F0Y2ggdGhlIGNoYW5nZSBvZiB0aGUgY2FjaGVkIG5vZGVzIGJ5CisJYF9saXN0X2NoYW5nZWQnLgorCShGVENfQ0FDSEVfVFJZTE9PUF9FTkQpOiBUYWtlIG5ldyBtYWNybyBhcmd1bWVudCBgX2xpc3RfY2hhbmdlZCcKKwlhbmQgdXBkYXRlIGl0IHdoZW4gYEZUQ19NYW5hZ2VyX0ZsdXNoTicgZmx1c2hlcyBhbnkgbm9kZXMuCisKKwkqIHNyYy9jYWNoZS9mdGNjYmFjay5oIChmdGNfc25vZGVfY29tcGFyZSk6IFVwZGF0ZWQgdG8gZml0IHdpdGggbmV3CisJRlRDX05vZGVfQ29tcGFyZUZ1bmMgdHlwZS4KKwkoZnRjX2dub2RlX2NvbXBhcmUpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19IIHRvIHVzZQorCVRSVUUvRkFMU0UgbWFjcm9zLgorCShmdGNfYmFzaWNfZ25vZGVfY29tcGFyZV9mYWNlaWQpOiBOZXcgYXJndW1lbnQgYEZUX0Jvb2wqCisJbGlzdF9jaGFuZ2VkJyB0byBpbmRpY2F0ZSB0aGUgY2hhbmdlIG9mIHRoZSBjYWNoZSBub2RlcyAoYW55d2F5LCBpdAorCWlzIGFsd2F5cyBGQUxTRSkuCisKKwkqIHNyYy9jYWNoZS9mdGNjbWFwLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19IIHRvIHVzZQorCVRSVUUvRkFMU0UgbWFjcm9zLgorCShmdGNfY21hcF9ub2RlX2NvbXBhcmUpOiBOZXcgYXJndW1lbnQgYEZUX0Jvb2wqIGxpc3RfY2hhbmdlZCcgdG8KKwlpbmRpY2F0ZSB0aGUgY2hhbmdlIG9mIHRoZSBjYWNoZSBub2RlcyAoYW55d2F5LCBpdCBpcyBhbHdheXMgRkFMU0UpLgorCShmdGNfY21hcF9ub2RlX3JlbW92ZV9mYWNlaWQpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKEZUQ19DYWNoZV9OZXdOb2RlKTogUGFzcyBhIE5VTEwgcG9pbnRlciB0bworCWBGVENfQ0FDSEVfVFJZTE9PUF9FTkQnLCBiZWNhdXNlIHRoZSByZXN1bHQgaXMgbm90IG5lZWRlZC4KKwkoRlRDX0NhY2hlX0xvb2t1cCk6IFdhdGNoIHRoZSBjaGFuZ2Ugb2YgdGhlIGNhY2hlIG5vZGVzIGJ5CisJYGxpc3RfY2hhbmdlZCcuCisJKEZUQ19DYWNoZV9SZW1vdmVGYWNlSUQpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19IIHRvIHVzZQorCVRSVUUvRkFMU0UgbWFjcm9zLgorCShmdGNfZ25vZGVfY29tcGFyZSk6IE5ldyBhcmd1bWVudCBgRlRfQm9vbCogbGlzdF9jaGFuZ2VkJyB0bworCWluZGljYXRlIHRoZSBjaGFuZ2Ugb2YgdGhlIGNhY2hlIG5vZGVzIChhbnl3YXksIGl0IGlzIGFsd2F5cyBGQUxTRSkuCisJKEZUQ19HTm9kZV9Db21wYXJlKTogTmV3IGFyZ3VtZW50IGBGVF9Cb29sKiBsaXN0X2NoYW5nZWQnIHRvIGJlCisJcGFzc2VkIHRvIGBmdGNfZ25vZGVfY29tcGFyZScuCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguaCAoRlRDX0dOb2RlX0NvbXBhcmUpOiBEaXR0by4KKworCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKGZ0Y19zbm9kZV9jb21wYXJlKTogTmV3IGFyZ3VtZW50IGBGVF9Cb29sKgorCWxpc3RfY2hhbmdlZCcgdG8gaW5kaWNhdGUgdGhlIGNoYW5nZSBvZiB0aGUgY2FjaGUgbm9kZXMsIGFueXdheS4gIEl0CisJaXMgdXBkYXRlZCBieSBgRlRDX0NBQ0hFX1RSWUxPT1AnLgorCShGVENfU05vZGVfQ29tcGFyZSk6IE5ldyBhcmd1bWVudCBgRlRfQm9vbCogbGlzdF9jaGFuZ2VkJyB0byBiZQorCXBhc3NlZCB0byBgZnRjX3Nub2RlX2NvbXBhcmUnLgorCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmggKEZUQ19TTm9kZV9Db21wYXJlKTogRGl0dG8uCisKKzIwMTEtMDEtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2FjaGVdIEZpdCBgRlRDX0dOb2RlX0NvbXBhcmUnIHRvIGBGVENfTm9kZV9Db21wYXJlRnVuYycuCisKKwkqIHNyYy9jYWNoZS9mdGNnbHlwaC5oIChGVENfR05vZGVfQ29tcGFyZSk6IEFkZCB0aGUgM3JkCisJYXJndW1lbnQgYEZUQ19DYWNoZSAgY2FjaGUnIHRvIGZpdCBGVENfTm9kZV9Db21wYXJlRnVuYworCXByb3RvdHlwZS4KKwkqIHNyYy9jYWNoZS9mdGNnbHlwaC5jIChGVENfR05vZGVfQ29tcGFyZSk6IERpdHRvLiBBbnl3YXksCisJYGNhY2hlJyBpcyBub3QgdXNlZCBieSBpdHMgY2hpbGQgYGZ0Y19nbm9kZV9jb21wYXJlJy4KKworMjAxMS0wMS0wOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gRGVkdXBsaWNhdGUgdGhlIGNvZGUgdG8gZ2V0IHRoZSB0b3Agbm9kZSBieSBhIGhhc2guCisKKwlUaGVyZSBhcmUgc2V2ZXJhbCBkdXBsaWNhdGVkIGNvZGUgZnJhZ21lbnRzIGdldHRpbmcgdGhlIHRvcCBub2RlCisJZnJvbSBhIGNhY2hlIGJ5IGEgZ2l2ZW4gaGFzaCwgbGlrZToKKworCSAgICBpZHggPSBoYXNoICYgY2FjaGUtPm1hc2s7CisJICAgIGlmICggaWR4IDwgY2FjaGUtPnAgKQorCSAgICAgIGlkeCA9IGhhc2ggJiAoIGNhY2hlLT5tYXNrICogMiArIDEgKTsKKwkgICAgcG5vZGUgPSBjYWNoZS0+YnVja2V0cyArIGlkeDsKKworCVRvIHJlbW92ZSBkdXBsaWNhdGlvbiwgYSBjcHAtbWFjcm8gdG8gZG8gc2FtZSB3b3JrCisJYEZUQ19OT0RFX19UT1BfRk9SX0hBU0gnIGlzIGludHJvZHVjZWQuICBGb3Igbm9uLWlubGluZWQKKwljb25maWd1cmF0aW9uLCBub24tYGZ0Y19nZXRfdG9wX25vZGVfZm9yX2hhc2gnIGlzIGFsc28gaW50cm9kdWNlZC4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19OT0RFX19UT1BfRk9SX0hBU0gpOiBEZWNsYXJlCisJYW5kIGltcGxlbWVudCBpbmxpbmVkIHZlcnNpb24uCisJKEZUQ19DQUNIRV9MT09LVVBfQ01QKTogVXNlIGBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIJy4KKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5jIChmdGNfZ2V0X3RvcF9ub2RlX2Zvcl9oYXNoKTogTm9uLWlubGluZWQKKwl2ZXJzaW9uLgorCShmdGNfbm9kZV9oYXNoX3VubGluayk6IFVzZSBgRlRDX05PREVfX1RPUF9GT1JfSEFTSCcuCisJKGZ0Y19ub2RlX2hhc2hfbGluayk6IERpdHRvLgorCShGVENfQ2FjaGVfTG9va3VwKTogRGl0dG8uCisKKzIwMTEtMDEtMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2FjaGVdIGlubGluZS1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsaXplZC4KKworCSogc3JjL2NhY2hlL2Z0Y2dseXBoLmMgKEZUQ19HTm9kZV9Db21wYXJlKTogQ29uZGl0aW9uYWxpemVkIGZvcgorCWlubGluZWQgY29uZmlndXJhdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgYSB0aGluIHdyYXBwZXIgb2YKKwlgZnRjX2dub2RlX2NvbXBhcmUnIGZvciBpbmxpbmVkIGBGVENfQ0FDSEVfTE9PS1VQX0NNUCcgKHNlZQorCWBub2RlY21wJyBhcmd1bWVudCkuICBVbmRlciBub24taW5saW5lZCBjb25maWd1cmF0aW9uLAorCWBmdGNfZ25vZGVfY29tcGFyZScgaXMgaW52b2tlZCBieSBgRlRDX0NhY2hlX0xvb2t1cCcsIHZpYQorCWBGVENfQ2FjaGUtPmNsYXp6Lm5vZGVfY29tcGFyZScuCisKKwkqIHNyYy9jYWNoZS9mdGNnbHlwaC5oIChGVENfR05vZGVfQ29tcGFyZSk6IERpdHRvLgorCSogc3JjL2NhY2hlL2Z0Y3NiaXRzLmMgKEZUQ19TTm9kZV9Db21wYXJlKTogRGl0dG8sIGZvcgorCWBmdGNfc25vZGVfY29tcGFyZScuCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuaCAoRlRDX1NOb2RlX0NvbXBhcmUpOiBEaXR0by4KKworMjAxMS0wMS0wOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gQ29ycmVjdCBhIHR5cGUgbWlzbWF0Y2ggdW5kZXIgbm9uLWlubGluZWQgY29uZmlnLgorCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguaCAoRlRDX0dDQUNIRV9MT09LVVBfQ01QKTogYEZUQ19HQ2FjaGVfTG9va3VwJworCXRha2VzIHRoZSBub2RlIHZpYSBhIHBvaW50ZXIgYEZUQ19Ob2RlKicsIGRpZmZlcmVudGx5IGZyb20gY3BwLW1hY3JvCisJYEZUQ19DQUNIRV9MT09LVVBfQ01QJy4KKworMjAxMS0wMS0wNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVVwZGF0ZSBKYW1maWxlIHRvIGluY2x1ZGUgQnppcDIgc3VwcG9ydC4KKworCSogSmFtZmlsZTogSW5jbHVkZSBzcmMvYnppcDIgdG8gcHJvamVjdC4KKwlDb21tZW50cyBmb3IgbHp3LCBnemlwLCBiemlwMiBhcmUgY2hhbmdlZCB0byBjbGFyaWZ5IHRoYXQKKwl0aGV5IGFyZSBmb3IgY29tcHJlc3NlZCBQQ0YgZm9udHMsIG5vdCBvdGhlcnMuCisJKGUuZy4gY29tcHJlc3NlZCBCREYgZm9udHMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0KQorCisyMDExLTAxLTA1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJVXBkYXRlIFN5bWJpYW4gcHJvamVjdCBmaWxlcyB0byBpbmNsdWRlIEJ6aXAyIHN1cHBvcnQuCisKKwlDdXJyZW50bHksIGl0IHByb3ZpZGVzIGBGVF9TdHJlYW1fT3BlbkJ6aXAyJyB0aGF0IHJldHVybnMKKwl1bmltcGxlbWVudGVkIGVycm9yIGFsd2F5cywgdG8gcHJldmVudCB1bnJlc29sdmVkIHN5bWJvbAorCWVycm9yIGZvciB0aGUgYXBwbGljYXRpb25zIGRlc2lnbmVkIGZvciBVbml4IHN5c3RlbXMuCisKKwkqIGJ1aWxkcy9zeW1iaWFuL2JsZC5pbmY6IEluY2x1ZGUgZnRiemlwMi5oLgorCSogYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wOiBJbmNsdWRlIGZ0YnppcDIuYy4KKworMjAxMS0wMS0wNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVVwZGF0ZSBjbGFzc2ljIE1hY09TIG1ha2VmaWxlcyB0byBpbmNsdWRlIEJ6aXAyIHN1cHBvcnQuCisKKwlDdXJyZW50bHksIGl0IHByb3ZpZGVzIGBGVF9TdHJlYW1fT3BlbkJ6aXAyJyB0aGF0IHJldHVybnMKKwl1bmltcGxlbWVudGVkIGVycm9yIGFsd2F5cywgdG8gcHJldmVudCB1bnJlc29sdmVkIHN5bWJvbAorCWVycm9yIGZvciB0aGUgYXBwbGljYXRpb25zIGRlc2lnbmVkIGZvciBVbml4IHN5c3RlbXMuCisKKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQ6IEluY2x1ZGUgZnRiemlwMi5jLm8uCisJKiBidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0OiBEaXR0by4KKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dDogSW5jbHVkZSBmdGJ6aXAyLmMueC4KKwkqIGJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NsYXNzaWMubWFrZS50eHQ6IERpdHRvLgorCisyMDExLTAxLTA1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJVXBkYXRlIEFtaWdhIG1ha2VmaWxlcyB0byBpbmNsdWRlIEJ6aXAyIHN1cHBvcnQuCisKKwlDdXJyZW50bHksIGl0IHByb3ZpZGVzIGBGVF9TdHJlYW1fT3BlbkJ6aXAyJyB0aGF0IHJldHVybnMKKwl1bmltcGxlbWVudGVkIGVycm9yIGFsd2F5cywgdG8gcHJldmVudCB1bnJlc29sdmVkIHN5bWJvbAorCWVycm9yIGZvciB0aGUgYXBwbGljYXRpb25zIGRlc2lnbmVkIGZvciBVbml4IHN5c3RlbXMuCisKKwkqIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZTogSW5jbHVkZSBiemlwMi5wcGMubyBidWlsdCBmcm9tIGZ0YnppcDIuYy4KKwkqIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQ6IEluY2x1ZGUgYnppcDIubyBidWlsdCBmcm9tIGZ0YnppcDIuYy4KKwkqIGJ1aWxkcy9hbWlnYS9zbWFrZWZpbGU6IERpdHRvLgorCisyMDExLTAxLTA1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJVXBkYXRlIHBrZy1jb25maWcgdG9vbHMgdG8gcmVmbGVjdCBCemlwMiBzdXBwb3J0LgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IEluY2x1ZGUgYC1sYnoyJyB0bworCS0tbGlicyBvdXRwdXQsIGlmIGJ1aWx0IHdpdGggQnppcDIgc3VwcG9ydC4KKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5pbjogRGl0dG8uCisKKzIwMTEtMDEtMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IFJlbW92ZSBgU1lTVEVNX0JaMkxJQicgbWFjcm8uCisKKwlTWVNURU1fWkxJQiBpcyB1c2VkIHRvIHN3aXRjaCB0aGUgYnVpbHRpbiB6bGliIHNvdXJjZQorCW9yIHN5c3RlbSB6bGliIHNvdXJjZSBvdXQgb2YgRnJlZVR5cGUyLiAgQnV0IGZ0YnppcDIKKwltb2R1bGUgaGFzIG5vIGJ1aWx0aW4gYnppcDIgbGlicmFyeSBhbmQgYWx3YXlzIHJlcXVpcmVzCisJc3lzdGVtIGJ6aXAyIGxpYnJhcnkuICBUaHVzIFNZU1RFTV9CWjJMSUIgaXMgYWx3YXlzIHllcywKKwlpdCBpcyBub3QgdXNlZC4KKworMjAxMS0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi9ydWxlcy5tazogSGFuZGxlIGAqcGljLmMnIGZpbGVzLgorCisyMDEwLTEyLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX01BWF9DSURfRk9OVFMpOiBJbmNyZWFzZSB0byA2NC4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFRvbSBCaXNob3AgPHdlbmxpbkB3ZW5saW4uY29tPi4KKworMjAxMC0xMi0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wcm92ZSBiemlwMiBzdXBwb3J0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmg6IEFkZCBiemlwMi4KKworCSogZG9jcy9JTlNUQUxMLkFOWSwgZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBzcmMvcGNmL1JFQURNRTogVXBkYXRlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcGNmdHlwZXMuaDogT2Jzb2xldGUsIHJlbW92ZWQuCisKKzIwMTAtMTItMzEgIEpvZWwgS2xpbmdoZWQgIDx0aGVfamtAeWFob28uY29tPgorCisJQWRkIGJ6aXAyIGNvbXByZXNzaW9uIHN1cHBvcnQgdG8gaGFuZGxlICoucGNmLmJ6MiBmaWxlcy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogVGVzdCBmb3IgbGliYnoyIGxpYnJhcnkuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoRlRfQ09ORklHX09QVElPTl9VU0VfQlpJUDIpOiBEZWZpbmUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9CWklQMl9IKTogRGVmaW5lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaDogTmV3IGZpbGUuCisKKwkqIHNyYy9iemlwMi8qOiBOZXcgZmlsZXMuCisKKwkqIHNyYy9wY2YvcGNmLmg6IHMvZ3ppcF8vY29tcF8vLgorCSogc3JjL3BjZi9wY2ZkcnZyLmM6IEluY2x1ZGUgRlRfQlpJUDJfSC4KKwlzL2d6aXBfL2NvbXBfLy4KKwkoUENGX0ZhY2VfSW5pdCk6IEhhbmRsZSBiemlwMiBjb21wcmVzc2VkIGZpbGVzLgorCisJKiBkb2NzL2Zvcm1hdHMudHh0LCBtb2R1bGVzLmNmZzogVXBkYXRlZC4KKworMjAxMC0xMi0yNSAgSGFyc2hhICA8bW0uaGFyc2hhQGdtYWlsLmNvbT4KKworCUFwcGx5IFNhdmFubmFoIHBhdGNoICM3NDIyLgorCisJSWYgd2UgZW5jb3VudGVyIGEgc3BhY2UgaW4gYSBzdHJpbmcgdGhlbiB0aGUgc2JpdCBidWZmZXIgaXMgTlVMTCwKKwloZWlnaHQgYW5kIHdpZHRoIGFyZSAwcy4gIFNvIHRoZSBjaGVjayBpbiBmdGNfc25vZGVfY29tcGFyZSB3aWxsCisJYWx3YXlzIHBhc3MgZm9yIHNwYWNlcyAoY29tcGFyaXNpb24gd2l0aCAyNTUpLiAgSGVyZSB0aGUgY29tbWVudHMKKwlhYm92ZSB0aGUgY29uZGl0aW9uIGFyZSBwcm9wZXIgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QuICBXaGVuCisJd2UgY3JlYXRlIGFuIHNub2RlIEkgdGhpbmsgaXQgaXMgdGhlIHByb3BlciB3YXkgdG8gaW5pdGlhbGl6ZSB0aGUKKwl3aWR0aCB0byAyNTUgYW5kIHRoZW4gcHV0IGEgY2hlY2sgZm9yIGJlaW5nIGVxdWFsIHRvIDI1NSBpbiBzbm9kZQorCWNvbXBhcmUgZnVuY3Rpb24uCisKKwkqIHNyYy9jYWNoZS9mdGNzYml0cy5jIChGVENfU05vZGVfTmV3KTogSW5pdGlhbGl6ZSBzYml0IHdpZHRocyB3aXRoCisJdmFsdWUgMjU1LgorCShmdGNfc25vZGVfY29tcGFyZSk6IEZpeCBjb25kaXRpb24uCisKKzIwMTAtMTItMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBwYXJhbWV0ZXIgaGFuZGxpbmcgb2YgYEZUX1NldF9SZW5kZXJlcicuCisJUmVwb3J0ZWQgYnkgS2lyaWxsIFRpc2hpbiA8c2llZ2VAYmsucnU+LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X1JlbmRlcmVyKTogSW5jcmVtZW50IGBwYXJhbWV0ZXJzJy4KKworMjAxMC0xMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWxsb3cgYGhsaW5ldG8nIGFuZCBgdmxpbmV0bycgd2l0aG91dCBhcmd1bWVudHMuCisKKwlXZSBzaW1wbHkgaWdub3JlIHN1Y2ggaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyBpbnZhbGlkLCBidXQgaXQgZG9lc24ndAorCWhhcm07IGFuZCBpbmRlZWQsIHRoZXJlIGV4aXN0IHN1Y2ggc3Vic2V0dGVkIGZvbnRzIGluIFBERnMuCisKKwlSZXBvcnRlZCBieSBBbGJlcnQgQXN0YWxzIENpZCA8YWFjaWRAa2RlLm9yZz4uCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJW2NmZl9vcF9obGluZXRvXTogSWdub3JlIGluc3RydWN0aW9uIGlmIHRoZXJlIGFyZW4ndCBhbnkgYXJndW1lbnRzCisJb24gdGhlIHN0YWNrLgorCisyMDEwLTExLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi40LjQgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTQnLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi40LjQKKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLAorCWJ1aWxkcy93aW4zMi92YzIwMDUvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsIGJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNC4zLzIuNC40Lywgcy8yNDMvMjQ0Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byA0LgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTI6Mjo2LgorCisyMDEwLTExLTI4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbZnRzbW9vdGhdOiBNaW5vciBjb2RlIHNpbXBsaWZpY2F0aW9uLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMgKGdyYXlfcmVuZGVyX2N1YmljKTogRG8gb25seSBvbmUgY29tcGFyaXNvbgorCWluc3RlYWQgb2YgdHdvLgorCisyMDEwLTExLTI2ICBKb2huc29uIFkuIFlhbiAgPHlpbnNlbl95YW5AZm94aXRzb2Z0d2FyZS5jb20+CisKKwlbdHJ1ZXR5cGVdIEJldHRlciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX0xvYWRfQ29udGV4dCk6IFJlc2V0IGdseXBoIHpvbmUKKwlyZWZlcmVuY2VzLgorCisyMDEwLTExLTIzICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nKTogRXhwYW5kCisJc3RhcnRfcG9pbnQsIGNoZWNrX3BvaW50cywgYWRkX3BvaW50LCBhZGRfcG9pbnQxLCBjbG9zZV9jb250b3VyCisJbWFjcm9zLgorCVJlbW92ZSBhZGRfY29udG91ciBtYWNyby4KKwlSZXR1cm4gZXJyb3IgY29kZSBmcm9tIHQxX2J1aWxkZXJfc3RhcnRfcG9pbnQgYW5kCisJdDFfYnVpbGRlcl9jaGVja19wb2ludHMgd2hlbiB0aGVyZSB3YXMgb25lIChpbnN0ZWFkIG9mIHJldHVybmluZyAwKS4KKworMjAxMC0xMS0yMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVt0cnVldHlwZV0gSWRlbnRpZnkgdGhlIHRyaWNreSBmb250cyBieSBjdnQvZnBnbS9wcmVwIGNoZWNrc3Vtcy4KKwlTb21lIExhdGluIFRydWVUeXBlIGZvbnRzIGFyZSBzdGlsbCBleHBlY3RlZCB0byBiZSB1bmhpbnRlZC4KKwlGaXggU2F2YW5uYWggYnVnICMzMTY0NS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzKTogRGl2aWRlZCB0by4uLgorCSh0dF9jaGVja190cmlja3luZXNzX2ZhbWlseSk6IHRoaXMgY2hlY2tpbmcgZmFtaWx5IG5hbWUsIGFuZAorCSh0dF9jaGVja190cmlja3luZXNzX3NmbnRfaWRzKTogdGhpcyBjaGVja2luZyBjdnQvZnBnbS9wcmVwLgorCSh0dF9nZXRfc2ZudF9jaGVja3N1bSk6IEZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBzZm50IGNoZWNrc3VtCisJZm9yIHNwZWNpZmllZCBzdWJ0YWJsZSBldmVuIGlmIGNsZWFyZWQgYnkgbGF6eSBQREYgZ2VuZXJhdG9ycy4KKwkodHRfc3ludGhfc2ZudF9jaGVja3N1bSk6IEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0uCisKKzIwMTAtMTEtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IGBsb2NhJyBoYW5kbGluZyBmb3IgaW5jb25zaXN0ZW50IG51bWJlciBvZiBnbHlwaHMuCisJUmVwb3J0ZWQgYnkgSm9obnNvbiBZLiBZYW4gPHlpbnNlbl95YW5AZm94aXRzb2Z0d2FyZS5jb20+LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2xvYWRfbG9jYSk6IFdoaWxlIHNhbml0aXppbmcsCisJaGFuZGxlIGNhc2Ugd2hlcmUgYGxvY2EnIGlzIHRoZSBsYXN0IHRhYmxlIGluIHRoZSBmb250LgorCisyMDEwLTExLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gSWdub3JlIGFsbCBlcnJvcnMgd2hpbGUgbG9hZGluZyBgT1MvMicgdGFibGUuCisJU3VnZ2VzdGVkIGJ5IEpvaG5zb24gWS4gWWFuIDx5aW5zZW5feWFuQGZveGl0c29mdHdhcmUuY29tPi4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogRG8gaXQuCisKKzIwMTAtMTEtMTggIEpvaG5zb24gWS4gWWFuICA8eWluc2VuX3lhbkBmb3hpdHNvZnR3YXJlLmNvbT4KKworCVt0eXBlMV0gRml4IG1hdHJpeCBub3JtYWxpemF0aW9uLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX2ZvbnRfbWF0cml4KTogSGFuZGxlIHNpZ24gb2Ygc2NhbGluZworCWZhY3Rvci4KKworMjAxMC0xMS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBJbXByb3ZlIGd1YXJkIGFnYWluc3QgbWFsZm9ybWVkIGRhdGEuCisJQmFzZWQgb24gYSBwYXRjaCBzdWJtaXR0ZWQgYnkgSm9obnNvbiBZLiBZYW4KKwk8eWluc2VuX3lhbkBmb3hpdHNvZnR3YXJlLmNvbT4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChyZWFkX2JpbmFyeV9kYXRhKTogQ2hlY2sgYHNpemUnLgorCisyMDEwLTExLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gV2hpbGUgdHJhY2luZywgb3V0cHV0IHRhYmxlIGNoZWNrc3VtcyBhbHNvLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX2ZvbnRfZGlyKTogRG8gaXQuCisKKzIwMTAtMTEtMDQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbVVZTXSBGaXggYGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwJywgU2F2YW5uYWggYnVnICMzMTU0NS4KKworCVNpbmNlIDIwMTAtMDctMDQsIGBmaW5kX3ZhcmlhbnRfc2VsZWN0b3JfY2hhcm1hcCcgcmV0dXJucworCXRoZSBmaXJzdCBjbWFwIHN1YnRhYmxlIGFsd2F5cyB1bmRlciByb2d1ZS1jb21wYXRpYmxlCisJY29uZmlndXJhdGlvbiwgaXQgY2F1c2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQKKwltYWtlIFVWUy1yZWxhdGVkIGZ1bmN0aW9ucyBjcmFzaGVkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRml4IGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwKToKKwlSZXR1cm5zIFVWUyBjbWFwIGNvcnJlY3RseS4KKworMjAxMC0xMS0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Z0c21vb3RoXSBJbXByb3ZlIHJlbmRlcmluZy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChncmF5X3JlbmRlcl9jb25pYyk6IFNpbmNlIHZlcnNpb24gMi40LjMsCisJY3ViaWMgZGV2aWF0aW9ucyBoYXZlIGJlZW4gZXN0aW1hdGVkIF9hZnRlcl8gVVBTQ0FMRSwgd2hlcmVhcworCWNvbmljIG9uZXMgaGF2ZSBiZWVuIGV2YWx1YXRlZCBfYmVmb3JlXyBVUFNDQUxFLCB3aGljaCBwcm9kdWNlcworCWluZmVyaW9yIHJlbmRlcmluZyByZXN1bHRzLiAgRml4IHRoaXMuCisJUGFydGlhbGx5IHVuZG8gY2hhbmdlIGZyb20gMjAxMC0xMC0xNSBieSB1c2luZyBPTkVfUElYRUwvNDsgdGhpcyBoYXMKKwliZWVuIHRlc3RlZCB3aXRoIGRlbW8gaW1hZ2VzIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdC4gIFNlZQorCisJICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0xMC9tc2cwMDA1NS5odG1sCisKKwlhbmQgbGF0ZXIgbWFpbHMgaW4gdGhpcyB0aHJlYWQuCisKKzIwMTAtMTAtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdHJhc3Rlcl0gTWlub3IgZml4ZXMuCisKKwlSZXBvcnRlZCBieSBUb20gQmlzaG9wIDx3ZW5saW5Ad2VubGluLmNvbT4uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoVUxvbmcpOiBSZW1vdmUgdW51c2VkIHR5cGVkZWYuCisJKFRXb3JrZXIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBwcmVjaXNpb25fbWFzaycuCisKKzIwMTAtMTAtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdHJhc3Rlcl0gRml4IHJlbmRlcmluZy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgVG9tIEJpc2hvcCA8d2VubGluQHdlbmxpbi5jb20+OyBzZWUKKwl0aHJlYWQgc3RhcnRpbmcgd2l0aAorCisJICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMC0xMC9tc2cwMDA0OS5odG1sCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoTGluZV9VcCk6IFJlcGxhY2UgRk11bERpdiB3aXRoIFNNdWxEaXYKKwlzaW5jZSB0aGUgaW52b2x2ZWQgbXVsdGlwbGljYXRpb24gZXhjZWVkcyAzMiBiaXRzLgorCisyMDEwLTEwLTI1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUmV2ZXJ0IGEgY2hhbmdlIG9mIGBfaWR4JyB0eXBlIGluIGBGVENfQ0FDSEVfTE9PS1VQX0NNUCcuCisKKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5oIChGVENfQ0FDSEVfTE9PS1VQX0NNUCk6IFJldmVydAorCXRoZSB0eXBlIG9mIGBfaWR4JyBmcm9tIEZUX1B0ckRpc3QgKGJ5IHByZXZpb3VzIGNoYW5nZSkKKwl0byBvcmlnaW5hbCBGVF9VRmFzdCwgdG8gbWF0Y2ggd2l0aCBGVF9DYWNoZVJlYy4KKworMjAxMC0xMC0yNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gQ2hhbmdlIHRoZSBoYXNoIHR5cGVzIHRvIEZUX1B0ckRpc3QuCisKKwlPbiBMTFA2NCBwbGF0Zm9ybXMgKGUuZy4gV2luNjQpLCBGVF9VTG9uZyAoMzItYml0KQorCXZhcmlhYmxlcyBhcmUgaW5hcHByb3ByaWF0ZSB0byBjYWxjdWxhdGUgaGFzaCB2YWx1ZXMKKwlmcm9tIHRoZSBtZW1vcnkgYWRkcmVzcyAoNjQtYml0KS4gIFRoZSBoYXNoIHZhcmlhYmxlcworCWFyZSBleHRlbmRlZCBmcm9tIEZUX1VMb25nIHRvIEZUX1B0ckRpc3QgYW5kIG5ldworCWhhc2hpbmcgbWFjcm8gZnVuY3Rpb25zIGFyZSBpbnRyb2R1Y2VkLiAgVGhlIGhhc2gKKwl2YWx1ZXMgb24gMTYtYml0IG1lbW9yeSBwbGF0Zm9ybXMgYXJlIGNoYW5nZWQsIGJ1dAorCUlMUDMyIGFuZCBMUDY0IGFyZSBub3QgY2hhbmdlZC4gIFRoZSBoYXNoIHZhbHVlIGluCisJdGhlIGNhY2hlIHN1YnN5c3RlbSBpcyBub3QgcmV2ZXJ0ZWQgdG8gdGhlIG1lbW9yeQorCWFkZHJlc3MsIHNvIHVzaW5nIHNpZ25lZCB0eXBlIEZUX1B0ckRpc3QgaXMgc2FmZS4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKF9GVENfRkFDRV9JRF9IQVNIKTogTmV3IGhhc2gKKwlmdW5jdGlvbiB0byByZXBsYWNlIGBGVENfRkFDRV9JRF9IQVNIJyBmb3IgcG9ydGFiaWxpdHkuCisJKiBzcmMvY2FjaGUvZnRjbWFuYWcuaCAoRlRDX1NDQUxFUl9IQVNIKTogUmVwbGFjZQorCWBGVENfRkFDRV9JRF9IQVNIJyBieSBgX0ZUQ19GQUNFX0lEX0hBU0gnLgorCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoRlRDX0NNQVBfSEFTSCk6IERpdHRvLgorCisJKiBzcmMvY2FjaGUvZnRjY2FjaGUuaCAoRlRDX05vZGVSZWMpOiBUaGUgdHlwZSBvZiB0aGUKKwltZW1iZXIgYGhhc2gnIGlzIGNoYW5nZWQgZnJvbSBGVF9VSW50MzIgdG8gRlRfUHRyRGlzdC4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmggKEZUQ19DYWNoZV9Mb29rdXApOiBUaGUgdHlwZSBvZiB0aGUKKwlhcmd1bWVudCBgaGFzaCcgaXMgY2hhbmdlZCBmcm9tIEZUX1VJbnQzMiB0byBGVF9QdHJEaXN0LgorCShGVENfQ2FjaGVfTmV3Tm9kZSk6IERpdHRvLgorCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKGZ0Y19jYWNoZV9hZGQpOiBEaXR0by4KKwkoRlRDX0NhY2hlX0xvb2t1cCk6IERpdHRvLiAgKEZUQ19DYWNoZV9OZXdOb2RlKTogRGl0dG8uCisJKiBzcmMvY2FjaGUvZnRjZ2x5cGguaCAoRlRDX0dDYWNoZV9Mb29rdXApOiBEaXR0by4KKwkqIHNyYy9jYWNoZS9mdGNnbHlwaC5jIChGVENfR0NhY2hlX0xvb2t1cCk6IERpdHRvLgorCisJKiBzcmMvY2FjaGUvZnRjYmFzaWMuYyAoRlRDX0ltYWdlQ2FjaGVfTG9va3VwKTogVGhlIHR5cGUKKwlvZiB0aGUgaW50ZXJuYWwgdmFyaWFibGUgYGhhc2gnIGlzIGNoYW5nZWQgdG8gRlRfUHRyRGlzdAorCWZyb20gRlRfVUludDMyLiAgKEZUQ19JbWFnZUNhY2hlX0xvb2t1cFNjYWxlcik6IERpdHRvLgorCShGVENfU0JpdENhY2hlX0xvb2t1cCk6IERpdHRvLgorCShGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlcik6IERpdHRvLgorCSogc3JjL2NhY2hlL2Z0Y2NtYXAuYyAoRlRDX0NNYXBDYWNoZV9Mb29rdXApOiBEaXR0by4KKwkqIHNyYy9jYWNoZS9mdGNjYWNoZS5oIChGVENfQ0FDSEVfTE9PS1VQX0NNUCk6IERpdHRvLgorCUFsc28gdGhlIHR5cGUgb2YgdGhlIGludGVybmFsIHZhcmlhYmxlIGBfaWR4JyBpcyBjaGFuZ2VkIHRvCisJRlRfUHRyRGlzdCBmcm9tIEZUX1VGYXN0IGZvciBiZXR0ZXIgcG9pbnRlciBjYWxjdWxhdGlvbi4KKworMjAxMC0xMC0yNCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gSGlkZSBpbnRlcm5hbCBtYWNyb3MgaW5jb21wYXRpYmxlIHdpdGggTExQNjQuCisKKwlgRlRfUE9JTlRFUl9UT19VTE9ORycsIGBGVENfRkFDRV9JRF9IQVNIJywgYW5kCisJYEZUQ19JTUFHRV9UWVBFX0hBU0gnIGFyZSBlbmNsb3NlZCBieQorCUZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyBhbmQgaGlkZGVuIGZyb20KKwlub3JtYWwgY2xpZW50cy4KKworCUZvciB0aGUgaGlzdG9yeSBvZiB0aGVzZSBtYWNyb3MsIHNlZSB0aGUgaW52ZXN0aWdhdGlvbjoKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMC0xMC9tc2cwMDAyMi5odG1sCisKKzIwMTAtMTAtMjQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlDaGFuZ2UgdGhlIHR5cGUgb2YgYEZUX01FTV9WQUwnIGZyb20gRlRfVUxvbmcgdG8gRlRfUHRyRGlzdC4KKworCU9uIExMUDY0IHBsYXRmb3JtcyAoZS5nLiBXaW42NCksIHVuc2lnbmVkIGxvbmcgKDMyLWJpdCkKKwljYW5ub3QgY292ZXIgdGhlIG1lbW9yeSBhZGRyZXNzICg2NC1iaXQpLiAgYEZUX01FTV9WQUwnIGlzCisJdXNlZCBmb3IgaGFzaGluZyBvbmx5IGFuZCBub3QgZGVyZWZlcnJlZCwgc28gdXNpbmcgc2lnbmVkCisJdHlwZSBGVF9QdHJEaXN0IGlzIHNhZmUuCisKKwkqIHNyYy9iYXNlL2Z0ZGJnbWVtLmMgKEZUX01FTV9WQUwpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlCisJcmV0dXJuIHZhbHVlIGZyb20gRlRfVUxvbmcgdG8gRlRfUHRyRGlzdC4KKwkoZnRfbWVtX3RhYmxlX3Jlc2l6ZSk6IFRoZSB0eXBlIG9mIGhhc2ggaXMgY2hhbmdlZCB0bworCUZUX1B0ckRpc3QuICAoZnRfbWVtX3RhYmxlX2dldF9ub2RlcCk6IERpdHRvLgorCisyMDEwLTEwLTI0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUmVwbGFjZSAiJWx4IiBmb3IgbWVtb3J5IGFkZHJlc3MgYnkgIiVwIiwgTExQNjQgcGxhdGZvcm1zLgorCisJT24gTExQNjQgcGxhdGZvcm1zIChlLmcuIFdpbjY0KSwgbG9uZyAoMzItYml0KSBjYW5ub3QgY292ZXIKKwl0aGUgbWVtb3J5IGFkZHJlc3MgKDY0LWJpdCkuICBBbHNvIHRoZSBjYXN0cyBmcm9tIHRoZSBwb2ludGVyCisJdHlwZSB0byBsb25nIGludCBzaG91bGQgYmUgcmVtb3ZlZCB0byBwcmVzZXJ2ZSB0aGUgYWRkcmVzcworCWNvcnJlY3RseS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChOZXdfUHJvZmlsZSk6IFJlcGxhY2UgIiVseCIgYnkgIiVwIi4KKwkoRW5kX1Byb2ZpbGUpIERpdHRvLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluaXRfQ29udGV4dCk6IERpdHRvLgorCisyMDEwLTEwLTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlGaXggdGhpbmtvIGluIHNwbGluZSBmbGF0dGVuaW5nLgorCisJRlRfTUFYX0NVUlZFX0RFVklBVElPTiBpcyBkZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIE9ORV9QSVhFTC4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKEZUX01BWF9DVVJWRV9ERVZJQVRJT04pOiBSZW1vdmUgaXQgYW5kCisJcmVwbGFjZSBpdCBldmVyeXdoZXJlIHdpdGggT05FX1BJWEVMLzguCisKKzIwMTAtMTAtMTMgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbcmFjY2Vzc10gU2tpcCB1bnJlcXVpcmVkIHJlc291cmNlIGFjY2VzcyBydWxlcyBieSBEYXJ3aW4gVkZTLgorCisJV2hlbiBhIHJlc291cmNlIGZvcmsgYWNjZXNzIHJ1bGUgYnkgRGFyd2luIFZGUyBjb3VsZCBvcGVuIHRoZQorCXJlc291cmNlIGZvcmsgYnV0IG5vIGZvbnQgaXMgZm91bmQgaW4gaXQsIHRoZSByZXN0IG9mIHJ1bGVzCisJYnkgRGFyd2luIFZGUyBhcmUgc2tpcHBlZC4gIEl0IHJlZHVjZXMgdGhlIHdhcm5pbmdzIG9mIHRoZQorCWRlcHJlY2F0ZWQgcmVzb3VyY2UgZm9yayBhY2Nlc3MgbWV0aG9kIGJ5IHJlY2VudCBEYXJ3aW4ga2VybmVsLgorCUZpeCBNYWNQb3J0cyB0aWNrZXQgIzE4ODU5OgorCQlodHRwOi8vdHJhYy5tYWNwb3J0cy5vcmcvdGlja2V0LzE4ODU5CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChsb2FkX2ZhY2VfaW5fZW1iZWRkZWRfcmZvcmspOgorCVdoZW4gYEZUX1N0cmVhbV9OZXcnIHJldHVybnMgRlRfRXJyX0Nhbm5vdF9PcGVuX1N0cmVhbSwgaXQKKwltZWFucyB0aGF0IHRoZSBmaWxlIGlzIHBvc3NpYmxlIHRvIGJlIGBmb3BlbictZWQgYnV0IHplcm8tc2l6ZWQuCisJQWxzbyB0aGVyZSBpcyBhIGNhc2UgdGhhdCB0aGUgcmVzb3VyY2UgZm9yayBpcyBub3QgemVyby1zaXplZCwKKwlidXQgbm8gc3VwcG9ydGVkIGZvbnQgZXhpc3RzIGluIGl0LiAgSWYgYSBydWxlIGJ5IERhcndpbiBWRlMKKwlmYWxscyBpbnRvIHN1Y2ggY2FzZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdHJ5IG90aGVyIERhcndpbiBWRlMKKwlydWxlcyBhbnltb3JlLiAgU3VjaCBjYXNlcyBhcmUgbWFya2VkIGJ5IHZmc19yZm9ya19oYXNfbm9fZm9udC4KKwlJZiBpdCBpcyBUUlVFLCB0aGUgRGFyd2luIFZGUyBydWxlcyBhcmUgc2tpcHBlZC4KKworMjAxMC0xMC0xMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtyYWNjZXNzXSBHcm91cGluZyByZXNvdXJjZSBhY2Nlc3MgcnVsZXMgYmFzZWQgb24gRGFyd2luIFZGUy4KKworCU1hY09TIFgvRGFyd2luIGtlcm5lbCBzdXBwb3J0cyBhIGZldyB0cmlja3kgbWV0aG9kcyB0byBhY2Nlc3MKKwlhIHJlc291cmNlIGZvcmsgdmlhIEFOU0kgQyBvciBQT1NJWCBpbnRlcmZhY2UuICBDdXJyZW50IHJlc291cmNlCisJZm9yayBhY2Nlc3NvciB0cmllcyBhbGwgcG9zc2libGUgbWV0aG9kcyB0byBzdXBwb3J0IGFsbCBrZXJuZWxzLgorCUJ1dCBpZiBhIG1ldGhvZCBjb3VsZCBvcGVuIGEgcmVzb3VyY2UgZm9yayBidXQgbm8gZm9udCBpcyBmb3VuZCwKKwl0aGVyZSBpcyBubyBuZWVkIHRvIHRyeSBvdGhlciBtZXRob2RzIG9sZGVyIHRoYW4gdGVzdGVkIG1ldGhvZC4KKwlUbyBkZXRlcm1pbmUgd2hldGhlciB0aGUgcnVsZSBpbmRleCBpcyBmb3IgRGFyd2luIFZGUywgYSBsb2NhbAorCWZ1bmN0aW9uIGBmdHJmb3JrLmM6OnJhY2Nlc3NfcnVsZV9ieV9kYXJ3aW5fdmZzJyBpcyBpbnRyb2R1Y2VkLgorCVRvIHVzZSB0aGlzIGZ1bmN0aW9uIGluIGZ0b2Jqcy5jIGV0YyBidXQgaXQgc2hvdWxkIGJlIGlubGluZWQsCisJaXQgaXMgZXhwb3NlZCBieSBmdGJhc2UuaC4KKworCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SRm9ya19SdWxlKTogTmV3IGVudW0gdHlwZSB0byBpZGVudGlmeQorCXRoZSBydWxlcyB0byBhY2Nlc3MgdGhlIHJlc291cmNlIGZvcmsuCisJKHJhY2Nlc3NfZ3Vlc3NfcmVjKTogTmV3IHN0cnVjdHVyZSB0byBiaW5kIHRoZSBydWxlIGZ1bmN0aW9uIGFuZAorCXJ1bGUgZW51bSB0eXBlLgorCShGVF9SYWNjZXNzX0d1ZXNzKTogVGhlIGxpc3Qgb2YgdGhlIHJ1bGUgZnVuY3Rpb25zIGlzIHJlcGxhY2VkIGJ5CisJKHJhY2Nlc3NfZ3Vlc3NfdGFibGUpOiBUaGlzLiAgVGhpcyBpcyBleHBvc2VkIHRvIGJlIHVzZWQgYnkgb3RoZXIKKwlpbnRyYSBtb2R1bGUgZnVuY3Rpb25zLgorCShyYWNjZXNzX3J1bGVfYnlfZGFyd2luX3Zmcyk6IEEgZnVuY3Rpb24gdG8gcmV0dXJuIGEgYm9vbGVhbgorCWlmIHRoZSBydWxlIHNwZWNpZmllZCBieSB0aGUgcnVsZSBpbmRleCBpcyBiYXNlZCBvbiBEYXJ3aW4gVkZTLgorCisyMDEwLTEwLTEzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUHJldmVudCB0byBvcGVuIGEgRlRfU3RyZWFtIGZvciB6ZXJvLXNpemVkIGZpbGUgb24gbm9uLVVuaXguCisKKwlidWlsZHMvdW5peC9mdHN5c3RlbS5jIHByZXZlbnRzIHRvIG9wZW4gYW4gdXNlbGVzcyBzdHJlYW0gZnJvbQorCXplcm8tc2l6ZWQgZmlsZSBhbmQgcmV0dXJucyBGVF9FcnJfQ2Fubm90X09wZW5fU3RyZWFtLCBidXQgdGhlCisJc3RyZWFtIGRyaXZlcnMgZm9yIEFOU0kgQywgQW1pZ2EgYW5kIFZNUyByZXR1cm4gdXNlbGVzcyBzdHJlYW1zLgorCUZvciBjcm9zcy1wbGF0Zm9ybSBjb25zaXN0ZW5jeSwgYWxsIHN0cmVhbSBkcml2ZXJzIHNob3VsZCBhY3QKKwlzYW1lLgorCisJKiBzcmMvYmFzZS9mdHN5c3RlbS5jIChGVF9TdHJlYW1fT3Blbik6IElmIHRoZSBzaXplIG9mIHRoZSBvcGVuZWQKKwlmaWxlIGlzIHplcm8sIEZUX0Vycl9DYW5ub3RfT3Blbl9TdHJlYW0gaXMgcmV0dXJuZWQuCisJKiBidWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRzeXN0ZW0uYyAoRlRfU3RyZWFtX09wZW4pOiBEaXR0by4KKwkqIHNyYy92bXMvZnRzeXN0ZW0uYyAoRlRfU3RyZWFtX09wZW4pOiBEaXR0by4KKworMjAxMC0xMC0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzMTMxMC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMpOiBQcm90ZWN0IGFnYWluc3QKKwlpbnZhbGlkIGBydW5jbnQnIHZhbHVlcy4KKworMjAxMC0xMC0wOCAgQ2hyaXMgTGlkZGVsbCAgPGNocmlzLmxpZGRlbGxAYXJ0aWZleC5jb20+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjMzEyNzUuCisKKwkqIHNyYy9zZm50L3R0cG9zdC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0guCisKKzIwMTAtMTAtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW1wcm92ZSBlcnJvciBoYW5kbGluZyBvZiBgU0haJyBieXRlY29kZSBpbnN0cnVjdGlvbi4KKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IENocmlzIEV2YW5zIDxzY2FyeWJlYXN0c0BnbWFpbC5jb20+LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NIWik6IENoZWNrIGBsYXN0X3BvaW50Jy4KKworMjAxMC0xMC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzEyNTMuCisJUGF0Y2ggc3VibWl0dGVkIGJ5IGFuIGFub255bW91cyByZXBvcnRlci4KKworCSogY29uZmlndXJlOiBVc2UgYGF3aycgaW5zdGVhZCBvZiBgc2VkJyB0byBtYW5pcHVsYXRlIG91dHB1dCBvZiBgbHMKKwktaWQnLgorCisyMDEwLTEwLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi40LjMgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi00LTMnLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIGRvY3MvVkVSU0lPTi5ETEw6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBidW1wIHZlcnNpb24gbnVtYmVyIHRvCisJMi40LjMKKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLAorCWJ1aWxkcy93aW4zMi92YzIwMDUvZnJlZXR5cGUudmNwcm9qLCBidWlsZHMvd2luMzIvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbjMyL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2luZGV4Lmh0bWwsIGJ1aWxkcy93aW4zMi92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNC4yLzIuNC4zLywgcy8yNDIvMjQzLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAzLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTI6MTo2LgorCisyMDEwLTEwLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBdm9pZCBgY29uZmlndXJlJyBpc3N1ZXMgd2l0aCBzeW1ib2xpYyBsaW5rcy4KKwlCYXNlZCBvbiBhIHBhdGNoIGZyb20gQWxleGFuZGVyIFN0b2hyIDxBbGV4YW5kZXIuU3RvaHJAZ214LmRlPi4KKworCSogY29uZmlndXJlOiBDb21wYXJlIGRpcmVjdG9yaWVzIHVzaW5nIGBscyAtaWQnLgorCUNoZWNrIGV4aXN0ZW5jZSBvZiBgcmVmZXJlbmNlJyBzdWJkaXJlY3RvcnkgYmVmb3JlIGNyZWF0aW5nIGl0LgorCisyMDEwLTEwLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjMzEwODggKHNvcnQgb2YpLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX21heHApOiBBbHdheXMgYWxsb2NhdGUgYXQgbGVhc3QgNjQKKwlmdW5jdGlvbiBlbnRyaWVzLgorCisyMDEwLTEwLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc21vb3RoXSBGaXggc3BsaXR0aW5nIG9mIGN1YmljcyBmb3IgbmVnYXRpdmUgdmFsdWVzLgorCisJUmVwb3J0ZWQgYnkgUsOzYmVydCBNw6Fya2kgPGdzbWlrb0BnbWFpbC5jb20+OyBzZWUKKwlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMC0wOS9tc2cwMDAxOS5odG1sLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfY3ViaWMpOiBGaXggdGhpbmtvLgorCisyMDEwLTEwLTAxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzMTA0MC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKGZyZWVfYnVmZmVyX2luX3NpemUpOiBSZW1vdmUuCisJKFRUX1J1bklucyk6IFVwZGF0ZWQuCisKKzIwMTAtMDktMjAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbc2ZudF0gTWFrZSBlcnJvciBtZXNzYWdlIGZpbGxpbmcgTlVMTCBuYW1lcyBsZXNzIHZlcmJvc2UuCisKKwkqIHNyYy9zZm50L3R0cG9zdC5jIChsb2FkX2Zvcm1hdF8yMCk6IFNob3dpbmcgMSBzdW1tYXJ5IG1lc3NhZ2UKKwl3aGVuIHdlIGZpbGwgYHBvc3QnIG5hbWVzIGJ5IE5VTEwsIGluc3RlYWQgb2YgcGVyLWVudHJ5IG1lc3NhZ2UuCisKKzIwMTAtMDktMjAgIEdyYWhhbSBBc2hlciAgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4KKwkgICAgRGF2aWQgQmV2YW4gIDxkYXZpZC5iZXZhbkBwYi5jb20+CisKKwlbc21vb3RoXSBGaXggYW5kIGltcHJvdmUgc3BsaW5lIGZsYXR0ZW5pbmcuCisKKwlUaGlzIGZpeGVzIHRoZSBmbGF0dGVuaW5nIG9mIGN1YmljLCBTLXNoYXBlZCBjdXJ2ZXMgYW5kIHNwZWVkcyB1cAorCXRoZSBoYW5kbGluZyBvZiBib3RoIHRoZSBjb25pYyBhbmQgY3ViaWMgYXJjcy4KKworCVNlZSB0aGUgZGlzY3Vzc2lvbnMgb24gdGhlIGZyZWV0eXBlLWRldmVsIG1haWxpbmcgbGlzdCBpbiBsYXRlCisJQXVndXN0IGFuZCBTZXB0ZW1iZXIgMjAxMCBmb3IgZGV0YWlscy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKEZUX01BWF9DVVJWRV9ERVZJQVRJT04pOiBOZXcgbWFjcm8uCisJKFRXb3JrZXIpOiBSZW1vdmUgYGNvbmljX2xldmVsJyBhbmQgYGN1YmljX2xldmVsJyBlbGVtZW50cy4KKwkoZ3JheV9yZW5kZXJfY29uaWMpOiBTaW1wbGlmeSBhbGdvcml0aG0uCisJKGdyYXlfcmVuZGVyX2N1YmljKTogTmV3IGFsZ29yaXRobTsgZGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlIGNvZGUKKwljb21tZW50cy4KKwkoZ3JheV9jb252ZXJ0X2dseXBoKTogUmVtb3ZlIGhldXJpc3RpY3MuCisKKzIwMTAtMDktMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1pbm9yIGZpeGVzLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzKTogYGNoYXJzZXQtPnNpZHNbaV0nCisJaXMgYEZUX1VTaG9ydCcuCisJKGNmZl9pbmRleF9hY2Nlc3NfZWxlbWVudCk6IERvbid0IHVzZSBhZGRpdGlvbnMgaW4gY29tcGFyaXNvbi4KKwkqIHNyYy9zZm50L3R0cG9zdC5jIChsb2FkX2Zvcm1hdF8yMCk6IE1ha2UgYHBvc3RfbGltaXQnIG9mIHR5cGUKKwlgRlRfTG9uZycuCisJRG9uJ3QgdXNlIGFkZGl0aW9ucyBpbiBjb21wYXJpc29uLgorCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcy4KKwkobG9hZF9mb3JtYXRfMjUsIGxvYWRfcG9zdF9uYW1lcyk6IE1ha2UgYHBvc3RfbGltaXQnIG9mIHR5cGUKKwlgRlRfTG9uZycuCisKKzIwMTAtMDktMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2ZmXSBUcnVuY2F0ZSB0aGUgZWxlbWVudCBsZW5ndGggYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgorCVNlZSBTYXZhbm5haCBidWcgIzMwOTc1LgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50KTogYG9mZjInLCB0aGUgb2Zmc2V0CisJdG8gdGhlIG5leHQgZWxlbWVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHRvIHByZXZlbnQKKwlpbnZhbGlkIEkvTy4gIEFzIGBvZmYxJywgdGhlIG9mZnNldCB0byB0aGUgcmVxdWVzdGVkIGVsZW1lbnQgaGFzCisJYmVlbiBjaGVja2VkIGJ5IGBGVF9TVFJFQU1fU0VFSycsIGBvZmYyJyBzaG91bGQgYmUgY2hlY2tlZAorCXNpbWlsYXJseS4KKworMjAxMC0wOS0xOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjZmZdIElnbm9yZSBDSUQgPiAweEZGRkZVLgorCVNlZSBTYXZhbm5haCBidWcgIzMwOTc1LgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzKTogSWdub3JlIENJRCBpZgorCWdyZWF0ZXIgdGhhbiAweEZGRkZVLiAgQ0ZGIGZvbnQgc3BlYyBkb2VzIG5vdCBtZW50aW9uIG1heGltdW0gQ0lEIGluCisJdGhlIGZvbnQsIGJ1dCBQb3N0U2NyaXB0IGFuZCBQREYgc3BlYyBkZWZpbmUgdGhhdCBtYXhpbXVtIENJRCBpcworCTB4RkZGRlUuCisKKzIwMTAtMDktMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2ZmXSBNYWtlIHRyYWNlIG1lc3NhZ2UgaW5gIGNmZl9jaGFyc2V0X2xvYWQnIHZlcmJvc2UuCisJU2VlIFNhdmFubmFoIGJ1ZyAjMzA5NzUuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfY2hhcnNldF9sb2FkKTogUmVwb3J0IHRoZSBvcmlnaW5hbCBgbmxlZnQnCisJYW5kIHRydW5jYXRlZCBgbmxlZnQnLgorCisyMDEwLTA5LTE5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2NmZl0gQ29ycmVjdCBgbWF4X2NpZCcgZnJvbSBDSUQgYXJyYXkgbGVuZ3RoIHRvIG1heCBDSUQuCisJU2VlIFNhdmFubmFoIGJ1ZyAjMzA5NzUuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfY2hhcnNldF9jb21wdXRlX2NpZHMpOiBEb24ndCBpbmNyZW1lbnQKKwltYXhfY2lkIGFmdGVyIGRldGVjdGluZyBtYXggQ0lELiAgVGhlIGFycmF5IENGRl9DaGFyc2V0LT5jaWRzIGlzCisJYWxsb2NhdGVkIGJ5IG1heF9jaWQgKyAxLgorCShjZmZfY2hhcnNldF9jaWRfdG9fZ2luZGV4KTogUGVybWl0IENJRCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKwlDRkZfQ2hhcnNldC0+bWF4X2NpZC4KKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogRlRfRmFjZS0+bnVtX2dseXBocyBpcworCWNhbGN1bGF0ZWQgYXMgQ0ZGX0NoYXJzZXQtPm1heF9jaWQgKyAxLgorCisyMDEwLTA5LTE5ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3RydWV0eXBlXSBTYW5pdGl6ZSB0aGUgYnJva2VuIG9mZnNldHMgaW4gYGxvY2EnLgorCVNlZSBTYXZhbm5haCBidWcgIzMxMDQwLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2dldF9sb2NhdGlvbik6IElmIGBwb3MxJywgdGhlCisJb2Zmc2V0IHRvIHRoZSByZXF1ZXN0ZWQgZW50cnkgaW4gYGdseWYnIGV4Y2VlZHMgdGhlIGVuZCBvZiB0aGUKKwl0YWJsZSwgcmV0dXJuIG9mZnNldD0wLCBsZW5ndGg9MC4gIElmIGBwb3MyJywgdGhlIG9mZnNldCB0byB0aGUgbmV4dAorCWVudHJ5IGluIGBnbHlmJyBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIHRhYmxlLCB0cnVuY2F0ZSB0aGUgZW50cnkKKwlsZW5ndGggYXQgdGhlIGVuZCBvZiBgZ2x5ZicgdGFibGUuCisKKzIwMTAtMDktMTkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbc2ZudF0gUHJldmVudCBvdmVycnVubmluZyBpbiBgcG9zdCcgdGFibGUgcGFyc2VyLgorCVNlZSBTYXZhbm5haCBidWcgIzMxMDQwLgorCisJKiBzcmMvc2ZudC90dHBvc3QuYyAobG9hZF9wb3N0X25hbWVzKTogR2V0IHRoZSBsZW5ndGggb2YgYHBvc3QnCisJdGFibGUgYW5kIHBhc3MgdGhlIGxpbWl0IG9mIGBwb3N0JyB0YWJsZSB0byBgbG9hZF9mb3JtYXRfMjAnIGFuZAorCWBsb2FkX2Zvcm1hdF8yNScuCisJKGxvYWRfZm9ybWF0XzIwKTogU3RvcCB0aGUgcGFyc2luZyB3aGVuIHdlIHJlYWNoZWQgYXQgdGhlIGxpbWl0IG9mCisJYHBvc3QnIHRhYmxlLiAgSWYgbW9yZSBnbHlwaCBuYW1lcyBhcmUgcmVxdWlyZWQsIHRoZXkgYXJlIGZpbGxlZCBieQorCU5VTEwgbmFtZXMuCisKKzIwMTAtMDktMTcgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbdHJ1ZXR5cGVdIERvbid0IGR1cGxpY2F0ZSBzaXplLT50d2lsaWdodCBzdHJ1Y3R1cmUgdG8gYmUgZnJlZWQuCisJU2VlIFNhdmFubmFoIGJ1ZyAjMzEwNDAgZm9yIGRldGFpbC4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKGZyZWVfYnVmZmVyX2luX3NpemUpOiBEb24ndCBkdXBsaWNhdGUKKwlGVF9HbHlwaFpvbmVSZWMgc2l6ZS0+dHdpbGlnaHQgdG8gYmUgZnJlZWQuICBJZiBkdXBsaWNhdGVkLAorCWBGVF9GUkVFJyBlcmFzZXMgdGhlIGR1cGxpY2F0ZWQgcG9pbnRlcnMgb25seSBhbmQgbGVhdmUgb3JpZ2luYWwKKwlwb2ludGVycy4gIFRoZXkgY2FuIGNhdXNlIHRoZSBkb3VibGUtZnJlZSBjcmFzaCB3aGVuIHRoZSBidXJzdAorCWVycm9ycyBvY2N1ciBpbiBUcnVlVHlwZSBpbnRlcnByZXRlciBhbmQgYGZyZWVfYnVmZmVyX2luX3NpemUnIGlzCisJaW52b2tlZCByZXBlYXRlZGx5LgorCisyMDEwLTA5LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNYWtlIGJ5dGVjb2RlIGRlYnVnZ2luZyB3aXRoIEZvbnRGb3JnZSB3b3JrIGFnYWluLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogRG9uJ3QgY2FsbAorCWBmcmVlX2J1ZmZlcl9pbl9zaXplJyBpbiBjYXNlIG9mIGVycm9yIGlmIGEgZGVidWdnZXIgaXMgYWN0aXZlLgorCisyMDEwLTA5LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbXByb3ZlIHRyYWNpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9SdW5JbnMpOiBJbXByb3ZlIHdvcmRpbmcgb2YgdHJhY2luZworCW1lc3NhZ2UuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXApOiBBZGQKKwl0cmFjaW5nIG1lc3NhZ2UuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9sb2FkZXJfaW5pdCk6IEFkZCB0cmFjaW5nIG1lc3NhZ2UuCisJKiBzcmMvY2FjaGUvZnRjc2JpdHMuYyAoZnRjX3Nub2RlX2xvYWQpOiBFbWl0IHRyYWNpbmcgbWVzc2FnZSBpZgorCWdseXBoIGRvZXNuJ3QgZml0IGludG8gYSBzbWFsbCBiaXRtYXAgY29udGFpbmVyLgorCisyMDEwLTA5LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggbWlub3IgaXNzdWVzIHJlcG9ydGVkIGJ5IDxtdWt0aGEubmFyYXlhbkB3aXByby5jb20+LgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCk6IFJlbW92ZQorCXJlZHVuZGFudCBjb25kaXRpb25hbCBjaGVjay4KKwkqIHNyYy9iYXNlL2Z0c3ludGguYyAoRlRfR2x5cGhTbG90X0VtYm9sZGVuKTogRGl0dG8uCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2VuY29kaW5nX2xvYWQpOiBSZW1vdmUgY29uZGl0aW9uYWwgY2hlY2sKKwl3aGljaCBhbHdheXMgZXZhbHVhdGVzIHRvIGB0cnVlJy4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzX2dseXBoX2ludGVycG9sYXRlX3N0cm9uZ19wb2ludHMpOgorCURpdHRvLgorCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JVVApOiBEaXR0by4KKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX3Nsb3RfbG9hZF9nbHlwaCk6IERvbid0IGNoZWNrIGZvciBOVUxMIGlmCisJdmFsdWUgaXMgYWxyZWFkeSBkZXJlZmVyZW5jZWQuCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9Mb2FkX0dseXBoKTogRml4IGNoZWNrIG9mIGBmYWNlJy4KKworMjAxMC0wOC0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUlnbm9yZSB0aGUgZW52aXJvbm1lbnRhbCBzZXR0aW5nIG9mIExJQlRPT0wuCisJUGF0Y2ggaXMgc3VnZ2VzdGVkIGJ5IEFkcmlhbiBCdW5rLCB0byBwcmV2ZW50IHVuZXhwZWN0ZWQKKwlyZWZsZWN0aW9uIG9mIGVudmlyb25tZW50YWwgTElCVE9PTC4gIFNlZToKKwlodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wYXRjaC8/NzI5MAorCisJKiBidWlsZHMvdW5peC91bml4LWNjLmluOiBMSUJUT09MIGlzIHVuY29uZGl0aW9uYWxseSBzZXQgdG8KKwkkKEZUX0xJQlRPT0xfRElSKS9saWJ0b29sLiAgRlRfTElCVE9PTF9ESVIgaXMgc2V0IHRvICQoQlVJTERfRElSKQorCWJ5IGRlZmF1bHQuCisJKiBjb25maWd1cmU6IFdoZW4gY29uZmlndXJlZCBmb3IgdGhlIGJ1aWxkaW5nIG91dCBvZiBzb3VyY2UgdGVlLAorCUZUX0xJQlRPT0xfRElSIGlzIHNldCB0byAkKE9CSl9ESVIpLgorCisyMDEwLTA4LTMxICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3RydWV0eXBlXSBEZWNyZWFzZSB0aGUgdHJhY2UgbGV2ZWwgY2F0Y2hpbmcgdGhlIGludGVycHJldGVyIGVycm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogRGVjcmVhc2UgdGhlIHRyYWNlIGxldmVsCisJc2hvd2luZyB0aGUgZXJyb3Igd2hlbiB0aGUgaW50ZXJwcmV0ZXIgcmV0dXJucyB3aXRoIGFuIGVycm9yLAorCWZyb21gIEZUX1RSQUNFNycgdG8gYEZUX1RSQUNFMScuCisKKzIwMTAtMDgtMzAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbdHJ1ZXR5cGVdIFByZXZlbnQgYnl0ZWNvZGUgcmV1c2UgYWZ0ZXIgdGhlIGludGVycHJldGF0aW9uIGVycm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoZnJlZV9idWZmZXJfaW5fc2l6ZSk6IE5ldyBmdW5jdGlvbiB0bworCWZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGdseXBoLgorCShUVF9SdW5JbnMpOiBVbnNldCBGVF9GYWNlLT5zaXplLT57Y3Z0X3JlYWR5LGJ5dGVjb2RlX3JlYWR5fSBpZgorCWFuIGVycm9yIG9jY3VycyBpbiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uICBUaGUgaW50ZXJwcmV0YXRpb24KKwlvZiBpbnZhbGlkIGJ5dGVjb2RlIG1heSBicmVhayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHJlZmVycmluZworCXRoZW0gaW4gbGF0ZXIgaW50ZXJwcmV0YXRpb24gaXMgZGFuZ2VyLiAgQnkgdW5zZXR0aW5nIHRoZXNlIGZsYWdzLAorCWBmcGdtJyBhbmQgYHByZXAnIHRhYmxlcyBhcmUgZXhlY3V0ZWQgYWdhaW4gaW4gbmV4dCBpbnRlcnByZXRhdGlvbi4KKworCVRoaXMgZml4ZXMgU2F2YW5uYWggYnVnICMzMDc5OCwgcmVwb3J0ZWQgYnkgUm9iZXJ0IMWad2nEmWNraS4KKworMjAxMC0wOC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0cmFzdGVyXSBQYWNpZnkgY29tcGlsZXIuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoZnRfYmxhY2tfbmV3KSBbX1NUQU5EQUxPTkVfXTogYG1lbW9yeScgaXMKKwlub3QgdXNlZC4KKworMjAxMC0wOC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWxsb3cgU0lEcyA+PSA2NTAwMC4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9jaGFyc2V0X2xvYWQpOiBGaXggY2hhbmdlIGZyb20gMjAwOS0wMy0yMDoKKwlUaGUgdGhyZXNob2xkIGZvciBTSURzIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuICBJIG1pc2ludGVycHJldGVkIHRoZQorCWBTSUQgdmFsdWVzIDY1MDAwIGFuZCBhYm92ZSBhcmUgYXZhaWxhYmxlIGZvciBpbXBsZW1lbnRhdGlvbiB1c2UnCisJc2VudGVuY2UgaW4gdGhlIENGRiBzcGVjaWZpY2F0aW9uLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBJdmFuIE5pbsSNacSHIDxpbmluY2ljQHBkZnRyb24uY29tPi4KKworMjAxMC0wOC0yOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZvcmNlIGhpbnRpbmcgd2hlbiB0aGUgZm9udCBsYWNrcyBpdHMgZmFtaWx5bmFtZS4KKworCUluIFR5cGU0MiBvciBUeXBlMTEgZm9udCBlbWJlZGRlZCBpbiBQb3N0U2NyaXB0ICYgUERGLCBUcnVlVHlwZSBzZm50CisJc3RyZWFtIG1heSBsYWNrIGBuYW1lJyB0YWJsZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZXF1aXJlZC4gIEhpbnRpbmcKKwlmb3IgbmFtZWxlc3MgZm9udHMgaXMgc2FmZXIgZm9yIFBERnMgaW5jbHVkaW5nIGVtYmVkZGVkIENoaW5lc2UKKwlmb250cy4gIFdyaXR0ZW4gYnkgRGF2aWQgQmV2YW4sIHNlZToKKworCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEwLTA4L21zZzAwMDIxLmh0bWwKKwlodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL3BvcHBsZXIvMjAxMC1BdWd1c3QvMDA2MzEwLmh0bWwKKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzKTogSWYgYSBOVUxMIHBvaW50ZXIgYnkKKwluYW1lbGVzcyBmb250IGlzIGdpdmVuLCBUUlVFIGlzIHJldHVybmVkIHRvIGVuYWJsZSBoaW50aW5nLgorCisyMDEwLTA4LTI4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUmVnaXN0ZXIgeWV0IGFub3RoZXIgdHJpY2t5IFRydWVUeXBlIGZvbnQuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzcyk6IEFkZCBgSHVhVGlhbkthaVRpPycsCisJYSBLYWlzaHUgdHlwZWZhY2UgcGFpcmVkIHdpdGggYEh1YVRpYW5Tb25nVGk/JyBieSBIdWF0aWFuCisJSW5mb3JtYXRpb24gSW5kdXN0cnkuCisKKzIwMTAtMDgtMTcgIFRlaWpvIEtpbm51bmVuIDxUZWlqby5LaW5udW5lbkBudWFuY2UuY29tPgorCisJW2NhY2hlXSBGaXggU2F2YW5uYWggYnVnICMzMDc4OC4KKworCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKEZUQ19DYWNoZV9DbGVhcik6IENoZWNrIGBjYWNoZS0+YnVja2V0cycgZm9yCisJTlVMTCB0b28uCisKKzIwMTAtMDgtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVRyeSB0byBmaXggU2F2YW5uYWggYnVnICMzMDcxNyAoYW5kIHByb2JhYmx5ICMzMDcxOSB0b28pLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEFkZCBhbm90aGVyCisJb3ZlcmZsb3cgdGVzdCBmb3IgYHdpZHRoJyBhbmQgYGhlaWdodCcuCisKKzIwMTAtMDgtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjQuMiByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTQtMicuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogZG9jcy9WRVJTSU9OLkRMTDogVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kIGJ1bXAgdmVyc2lvbiBudW1iZXIgdG8KKwkyLjQuMgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjEvMi40LjIvLCBzLzI0MS8yNDIvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDIuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxMjowOjYuCisKKzIwMTAtMDgtMDYgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggU2F2YW5uYWggYnVnICMzMDY0OC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0RvbmVfTGlicmFyeSk6IFNwZWNpZnkgdGhlIG9yZGVyIG9mIGZvbnQKKwlkcml2ZXJzIGR1cmluZyB0aGUgZmFjZSBjbG9zaW5nIHByb2Nlc3MuICBUeXBlNDIgZmFjZXMgc2hvdWxkIGJlCisJY2xvc2VkIGJlZm9yZSBUcnVlVHlwZSBmYWNlcywgYmVjYXVzZSBhIFR5cGU0MiBmYWNlIHJlZmVycyB0bworCWFub3RoZXIgaW50ZXJuYWwgVHJ1ZVR5cGUgZmFjZSB3aGljaCBpcyBjcmVhdGVkIGZyb20gc2ZudFtdIGFycmF5IG9uCisJdGhlIG1lbW9yeS4KKworMjAxMC0wOC0wNiAgWXVyaXkgS2FtaW5za2l5ICA8eXVta2FtQG1haWwucnU+CisKKwlbcmFzdGVyXSBGaXggdmFsZ3JpbmQgd2FybmluZy4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChEZWNvbXBvc2VfQ3VydmUpIDxkZWZhdWx0PjogQWNjZXNzIHBvaW50WzBdCisJb25seSBpZiB3ZSBkb24ndCBoaXQgYGxpbWl0Jy4KKworMjAxMC0wOC0wNiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCUZpeCBTYXZhbm5haCBidWcgIzMwNjU4LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IENoZWNrIHRoYXQgdGhlIHRvdGFsCisJbGVuZ3RoIG9mIGNvbGxlY3RlZCBQT1NUIHNlZ21lbnRzIGRvZXMgbm90IG92ZXJydW4gdGhlIGFsbG9jYXRlZAorCWJ1ZmZlci4KKworMjAxMC0wOC0wNiAgWXVyaXkgS2FtaW5za2l5ICA8eXVta2FtQG1haWwucnU+CisKKwlGaXggY29uZGl0aW9uYWwgdXNhZ2Ugb2YgRlRfTXVsRml4X2kzODYuCisJV2l0aCAtYW5zaSBmbGFnLCBnY2MgZG9lcyBub3QgZGVmaW5lIGBpMzg2Jywgb25seSBgX19pMzg2X18nLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLCBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjoKKwlzL2kzODYvX19pMzg2X18vLgorCisyMDEwLTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBTYXZhbm5haCBidWcgIzMwNjU3LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoQk9VTkRTTCk6IE5ldyBtYWNyby4KKwlDaGFuZ2UgYEJPVU5EUycgdG8gYEJPVU5EU0wnIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBGaXggdHlwZSBvZgorCWBjdnRTaXplJy4KKworMjAxMC0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGU0Ml0gRml4IFNhdmFubmFoIGJ1ZyAjMzA2NTYuCisKKwkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX3NmbnRzKTogUHJvdGVjdCBhZ2FpbnN0IG5lZ2F0aXZlCisJc3RyaW5nX3NpemUuCisJRml4IGNvbXBhcmlzb24uCisKKzIwMTAtMDgtMDUgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2ZmXSBEb24ndCB1c2UgYW55IHZhbHVlcyBpbiBkZWNvZGVyIGFmdGVyIHBhcnNpbmcgZXJyb3IuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFNraXAgdGhlIGV2YWx1YXRpb25zCisJb2YgdGhlIHZhbHVlcyBpbiBkZWNvZGVyLCBpZiBgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MnCisJcmV0dXJucyBhbnkgZXJyb3IuCisKKzIwMTAtMDgtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBTYXZhbm5haCBidWcgIzMwNjQ0LgorCisJKiBzcmMvYmFzZS9mdHN0cmVhbS5jIChGVF9TdHJlYW1fRW50ZXJGcmFtZSk6IEZpeCBjb21wYXJpc29uLgorCisyMDEwLTA4LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlgbWFrZSBkZXZlbCcgZmFpbHMgaWYgRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTIGlzIHNldC4KKworCSogZGV2ZWwvZnRvcHRpb24uaDogU3luY2hyb25pemUgd2l0aAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmguCisKKzIwMTAtMDgtMDQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbY2ZmXSBJbXByb3ZlIHN0YWNrIG92ZXJmbG93IHRlc3QuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBDaGVjayBzdGFjaworCWFmdGVyIGV4ZWN1dGlvbiBvZiBvcGVyYXRpb25zIHRvby4KKworMjAxMC0wNy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIHJlZmVyZW5jZSBjb3VudGVycyBhbmQgdG8gRlRfTGlicmFyeSBhbmQgRlRfRmFjZSBvYmplY3RzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX1JlZmVyZW5jZV9GYWNlKTogTmV3IGZ1bmN0aW9uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oIChGVF9SZXJlcmVuY2VfTGlicmFyeSk6IE5ldyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfRmFjZV9JbnRlcm5hbFJlYywKKwlGVF9MaWJyYXJ5UmVjKTogTmV3IGZpZWxkIGByZWZjb3VudCcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9PcGVuX0ZhY2UsIEZUX05ld19MaWJyYXJ5KTogSGFuZGxlCisJYHJlZmNvdW50Jy4KKwkoRlRfUmVmZXJlbmNlX0ZhY2UsIEZUX1JlZmVyZW5jZV9MaWJyYXJ5KTogSW1wbGVtZW50IG5ldyBmdW5jdGlvbnMuCisJKEZUX0RvbmVfRmFjZSwgRlRfRG9uZV9MaWJyYXJ5KTogSGFuZGxlIGByZWZjb3VudCcuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxMC0wNy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNC0xJy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNC4xLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi40LjAvMi40LjEvLCBzLzI0MC8yNDEvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDEuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxMToxOjUuCisKKzIwMTAtMDctMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpbmFsIHRyeSB0byBmaXggYGhpbnRtYXNrJyBhbmQgYGNudHJtYXNrJyBsaW1pdCBjaGVjay4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgVG9iaWFzIFdvbGYgPHRvd29sZkBnbWFpbC5jb20+LgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxjZmZfb3BfaGludG1hc2s+OiBTaWdoLiAgSSdtIGFwcGFyZW50bHkgdG9vIHNpbGx5IHRvIGZpeCB0aGlzCisJY29ycmVjdGx5IGluIGxlc3MgdGhhbiB0aHJlZSB0cmllcy4KKworMjAxMC0wNy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNC4wIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNC0wJy4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBkb2NzL1ZFUlNJT04uRExMOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVtcCB2ZXJzaW9uIG51bWJlciB0bworCTIuNC4wLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksCisJYnVpbGRzL3dpbjMyL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osIGJ1aWxkcy93aW4zMi92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luMzIvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwgYnVpbGRzL3dpbjMyL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbjMyL3Zpc3VhbGMvaW5kZXguaHRtbCwgYnVpbGRzL3dpbjMyL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luMzIvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW4zMi92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi4zLjEyLzIuNC4wLywgcy8yMzEyLzI0MC8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfTUlOT1IpOiBTZXQgdG8gNC4KKwkoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDExOjA6NS4KKworMjAxMC0wNy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIEMrKyB3YXJuaW5ncy4KKworCSovKjogSW5pdGlhbGl6ZSBwb2ludGVycyB3aGVyZSBuZWNlc3NhcnkgdG8gbWFrZSBnKysgaGFwcHkuCisKKzIwMTAtMDctMTIgIG1hbGMgIDxhdjE0NzRAY29tdHYucnU+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlGaXggdHlwZS1wdW5uaW5nIGlzc3VlcyB3aXRoIEMrKy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIChGVF9BU1NJR05QKSBbX19jcGx1c3BsdXNdOgorCUVtdWxhdGUgYSBgdHlwZW9mJyBvcGVyYXRvciB3aXRoIGFuIGlubGluZSB0ZW1wbGF0ZSB3aGljaCB1c2VzCisJYHN0YXRpY19jYXN0Jy4KKworMjAxMC0wNy0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IEMrKyBjb21waWxhdGlvbiBpc3N1ZS4KKworCSogc3JjL3Rvb2xzL2FwaW5hbWVzLmMgKG5hbWVzX2R1bXApIDxPVVRQVVRfV0FUQ09NX0xCQz46IEZpeAorCXR5cGUgb2YgYGRvdCcgdmFyaWFibGUuCisKKzIwMTAtMDctMTAgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggYW5vdGhlciBjYXNlIHJlcG9ydGVkIGluIFNhdmFubmFoIGJ1ZyAjMzAzNzMuCisJUGVybWl0IGEgZmFjZSBmb3IgVHlwZTEsIFR5cGU0MiBhbmQgQ0ZGIHdpdGhvdXQgY2hhcm1hcCwKKwlwYXRjaCBieSBUb3IgQW5kZXJzc29uLgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFJlc2V0IHRoZSBlcnJvciBpZiBpdAorCWlzIEZUX0Vycl9Ob19Vbmljb2RlX0dseXBoX05hbWUuCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IERpdHRvLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBEaXR0by4KKworMjAxMC0wNy0wOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVVzZSBkZWZpbmVkIG1hY3JvcyB0byBzZXQge3BsYXRmb3JtLGVuY29kaW5nfV9pZC4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jOiBJbmNsdWRlIHR0bmFtZWlkLmggYW5kIHVzZSBtYWNyb3MgdG8KKwlzZXQgY2hhcm1hcC57cGxhdGZvbSxlbmNvZGluZ31faWQuCisJKiBzcmMvcGNmL3BjZmRyaXZyLmM6IERpdHRvLgorCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jOiBEaXR0by4KKwkqIHNyYy90eXBlMS90MW9ianMuYzogRGl0dG8uCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYzogRGl0dG8uCisJKiBzcmMvY2ZmL2NmZm9ianMuYzogRGl0dG8uCisJKiBzcmMvcGZyL3Bmcm9ianMuYzogRGl0dG8uCisKKzIwMTAtMDctMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggU2F2YW5uYWggYnVnICMzMDM3My4KKwlUb28gc2VyaW91cyBjaGVjayBvZiBlcnJvcnMgYnkgYEZUX0NNYXBfTmV3JyBzaW5jZSAyMDEwLTA3LTA0CisJaXMgZml4ZWQuIFJlcG9ydGVkIGJ5IFRvciBBbmRlcnNzb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaAorCShQU25hbWVzX0Vycl9Ob19Vbmljb2RlX0dseXBoX05hbWUpOiBOZXcgZXJyb3IgY29kZSB0bworCWluZGljYXRlIHRoZSBVbmljb2RlIGNoYXJtYXAgc3ludGhlc2lzIGZhaWxlZCBiZWNhdXNlCisJbm8gVW5pY29kZSBnbHlwaCBuYW1lIGlzIGZvdW5kLgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc191bmljb2Rlc19pbml0KTogUmV0dXJuCisJUFNuYW1lc19FcnJfTm9fVW5pY29kZV9HbHlwaF9OYW1lIHdoZW4gbm8gVW5pY29kZSBnbHlwaCBuYW1lCisJaXMgZm91bmQgaW4gdGhlIGZvbnQuCisJKiBzcmMvY2ZmL2NmZmNtYXAuYyAoY2ZmX2NtYXBfdW5pY29kZV9pbml0KTogUmV0dXJuCisJQ0ZGX0Vycl9Ob19Vbmljb2RlX0dseXBoX05hbWUgd2hlbiBubyBTSUQgaXMgYXZhaWxhYmxlLgorCisJKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX0ZhY2VfSW5pdCk6IFByb2NlZWQgaWYgYEZUX0NNYXBfTmV3JworCWlzIGZhaWxlZCBieSB0aGUgbGFjayBvZiBVbmljb2RlIGdseXBoIG5hbWUuCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IERpdHRvLgorCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBEaXR0by4KKworMjAxMC0wNy0wOSAgS2VuIFNoYXJwICA8a2VuLnNoYXJwQGFydGlmZXguY29tPgorCisJTWFrZSBmdHJhc3Rlci5jIGNvbXBpbGUgaW4gc3RhbmQtYWxvbmUgbW9kZSB3aXRoIE1TVkMgY29tcGlsZXIuCisKKwkqIHNyYy9yYXN0ZXIvZnRtaXNjLmggKEZUX0ludDY0KSBbX1dJTjMyLCBfV0lONjRdOiBGaXggdHlwZWRlZgorCXNpbmNlIHRoZXJlIGlzIG5vIGBpbnR0eXBlcy5oJyBmb3IgTVNWQy4KKworMjAxMC0wNy0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMzMDM2MS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JVVApOiBGaXggYm91bmRzIGNoZWNrLgorCisyMDEwLTA3LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlQYWNpZnkgY29tcGlsZXIuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKTogSW5pdGlhbGl6ZQorCWBuZXdfYnl0ZXMnLgorCisyMDEwLTA3LTA1ICBFdWdlbmUgQS4gU2hhdG9raGluICA8c3BlY3RyZUBpc3ByYXMucnU+CisKKwlGaXggU2F2YW5uYWggYnVnICMyNzY0OC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X3JlbW92ZV9yZW5kZXJlciwgRlRfQWRkX01vZHVsZSk6IENhbGwKKwlgcmFzdGVyX2RvbmUnIG9ubHkgaWYgd2UgaGF2ZSBhbiBvdXRsaW5lIGdseXBoIGZvcm1hdC4KKworMjAxMC0wNy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IFNhdmFubmFoIGJ1ZyAjMzAwMzAuCisKKwkqIGJ1aWxkcy93aW4zMi8qL2ZyZWV0eXBlLnZjcHJvajogQWRkIGZ0eGY4Ni5jLgorCisyMDEwLTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBOZXh0IHRyeSB0byBmaXggYGhpbnRtYXNrJyBhbmQgYGNudHJtYXNrJyBsaW1pdCBjaGVjay4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgbWFsYyA8YXYxNDc0QGNvbXR2LnJ1Pi4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX2hpbnRtYXNrPjogSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBqdXN0IGEgc2luZ2xlIGJ5dGUKKwlhZnRlciB0aGUgYGhpbnRtYXNrJyBvciBgY250cm1hc2snLCBlLmcuLCBhIGByZXR1cm4nIGluc3RydWN0aW9uLgorCisyMDEwLTA3LTA0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJUmVzdHJpY3QgdGhlIG51bWJlciBvZiB0aGUgY2hhcm1hcHMgaW4gYSByb2d1ZS1jb21wYXRpYmxlIG1vZGUuCisJRml4IGZvciBTYXZhbm5haCBidWcgIzMwMDU5LgorCisJKiBzcmMvY2FjaGUvZnRjY21hcC5jIChGVENfQ01hcENhY2hlX0xvb2t1cCk6IFJlcGxhY2UgYDE2JyB0aGUKKwltaW5pbXVtIGNoYXJhY3RlciBjb2RlIHBhc3NlZCBieSBhIGxlZ2FjeSByb2d1ZSBjbGllbnQgYnkuLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggKEZUX01BWF9DSEFSTUFQX0NBQ0hFQUJMRSk6CisJVGhpcy4gIEl0IGlzIHVuZGVmaW5lZCB3aGVuIEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyBpcworCXVuZGVmaW5lZCAodGh1cyB0aGUgcm9ndWUgY2xpZW50IGNvbXBhdGliaWxpdHkgaXMgbm90IHJlcXVpcmVkKS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBBYm9ydCB0aGUgYXV0b21hdGljCisJc2VsZWN0aW9uIG9yIHN5bnRoZXNpcyBvZiBVbmljb2RlIGNtYXAgc3VidGFibGUgd2hlbiB0aGUgY2hhcm1hcAorCWluZGV4IGV4Y2VlZHMgRlRfTUFYX0NIQVJNQVBfQ0FDSEVBQkxFLgorCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2ZhY2VfYnVpbGRfY21hcHMpOiBJc3N1ZSBlcnJvciBtZXNzYWdlCisJd2hlbiB0aGUgY2hhcm1hcCBpbmRleCBleGNlZWRzIEZUX01BWF9DSEFSTUFQX0NBQ0hFQUJMRS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZpbmRfdW5pY29kZV9jaGFybWFwKTogV2hlbiBVbmljb2RlIGNoYXJtYXAKKwlpcyBmb3VuZCBhZnRlciBGVF9NQVhfQ0hBUk1BUF9DQUNIRUFCTEUsIGlnbm9yZSBpdCBhbmQgc2VhcmNoCisJZWFybGllciBvbmUuCisJKGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwKTogV2hlbiBVVlMgY2hhcm1hcCBpcyBmb3VuZCBhZnRlcgorCUZUX01BWF9DSEFSTUFQX0NBQ0hFQUJMRSwgaWdub3JlIGl0IGFuZCBzZWFyY2ggZWFybGllciBvbmUuCisJKEZUX1NlbGVjdF9DaGFybWFwKTogV2hlbiBhIGNoYXJtYXAgbWF0Y2hpbmcgd2l0aCByZXF1ZXN0ZWQKKwllbmNvZGluZyBidXQgYWZ0ZXIgRlRfTUFYX0NIQVJNQVBfQ0FDSEVBQkxFLCBpZ25vcmUgYW5kIHNlYXJjaAorCWVhcmxpZXIgb25lLgorCShGVF9TZXRfQ2hhcm1hcCk6IFdoZW4gYSBjaGFybWFwIG1hdGNoaW5nIHdpdGggcmVxdWVzdGVkCisJY2hhcm1hcCBidXQgYWZ0ZXIgRlRfTUFYX0NIQVJNQVBfQ0FDSEVBQkxFLCBpZ25vcmUgYW5kIHNlYXJjaAorCWVhcmxpZXIgb25lLgorCShGVF9HZXRfQ2hhcm1hcF9JbmRleCk6IFdoZW4gYSByZXF1ZXN0ZWQgY2hhcm1hcCBpcyBmb3VuZAorCWFmdGVyIEZUX01BWF9DSEFSTUFQX0NBQ0hFQUJMRSwgcmV0dXJuIHRoZSBpbnZlcnRlZCBjaGFybWFwCisJaW5kZXguCisKKzIwMTAtMDctMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCBkZXZlbC9mdG9wdGlvbi5oCisJKFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIpOiBEZWZpbmUuCisJKFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HKTogVW5kZWZpbmUuCisKKwkqIGRvY3MvQ0hBTkdFUywgZG9jcy9JTlNUQUxMLCBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IFVwZGF0ZWQuCisJKiBkb2NzL1RSVUVUWVBFLCBkb2NzL1BBVEVOVFM6IFJlbW92ZWQuCisKKzIwMTAtMDctMDQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlDaGVjayBlcnJvciB2YWx1ZSBieSBgRlRfQ01hcF9OZXcnLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IENoZWNrIGVycm9yIHZhbHVlIGJ5CisJYEZUX0NNYXBfTmV3Jy4KKwkqIHNyYy9wZnIvcGZyb2Jqcy5jIChwZnJfZmFjZV9pbml0KTogRGl0dG8uCisJKiBzcmMvdHlwZTEvdDFqb2Jqcy5jIChUMV9GYWNlX0luaXQpOiBEaXR0by4KKwkqIHNyYy90eXBlNDIvdDQyam9ianMuYyAoVDQyX0ZhY2VfSW5pdCk6IERpdHRvLgorCisyMDEwLTA3LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlNYWtlIGZ0Z3JheXMuYyBjb21waWxlIHN0YW5kLWFsb25lIGFnYWluLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyBbX1NUQU5EQUxPTkVfXTogSW5jbHVkZSBgc3RkZGVmLmgnLgorCShGVF9JTlRfTUFYLCBGVF9QdHJEaXN0KVtfU1RBTkRBTE9ORV9dOiBEZWZpbmUuCisKKzIwMTAtMDctMDIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlBZGRpdGlvbmFsIGZpeCBmb3IgU2F2YW5uYWggYnVnICMzMDMwNi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBJZiB0aGUgdHlwZSBvZiB0aGUKKwlQT1NUIGZyYWdtZW50IGlzIDAsIHRoZSBzZWdtZW50IGlzIGNvbXBsZXRlbHkgaWdub3JlZC4gIFRoZSBkZWNsYXJlZAorCWxlbmd0aCBvZiB0aGUgc2VnbWVudCBpcyBub3QgY2FyZWQgYXQgYWxsLiAgQWNjb3JkaW5nIHRvIEFkb2JlCisJVGVjaG5pY2FsIE5vdGUgNTA0MCwgdHlwZSAwIHNlZ21lbnQgaXMgYSBjb21tZW50IG9ubHkgYW5kIHNob3VsZCBub3QKKwliZSBsb2FkZWQgZm9yIHRoZSBpbnRlcnByZXRlci4gIFJlcG9ydGVkIGJ5IFJvYmVydCDFmndpxJlja2kuCisKKzIwMTAtMDctMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJvdGVjdCBhZ2FpbnN0IGNvZGUgcmFuZ2UgdW5kZXJmbG93LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRE9fSlJPVCwgRE9fSk1QUiwgRE9fSlJPRik6IERvbid0IGFsbG93CisJbmVnYXRpdmUgSVAgdmFsdWVzLgorCisyMDEwLTA3LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEFkZCBydWRpbWVudGFyeSB0cmFjaW5nIGZvciBieXRlY29kZSBpbnN0cnVjdGlvbnMuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChvcGNvZGVfbmFtZSkgW0ZUX0RFQlVHX0xFVkVMX1RSQUNFXTogTmV3CisJYXJyYXkuCisJKFRUX1J1bklucyk6IFRyYWNlIG9wY29kZXMuCisKKzIwMTAtMDYtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzbW9vdGhdIEZpeCBTYXZhbm5haCBidWcgIzMwMjYzLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfc3Bhbik6IFVzZSBjYXN0IHRvIGB1bnNpZ25lZAorCWludCcgdG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBVc2Ugc21hbGxlcgorCXRocmVzaG9sZCB2YWx1ZXMgZm9yIGB3aWR0aCcgYW5kIGBoZWlnaHQnLiAgVGhpcyBpcyBub3QgZGlyZWN0bHkKKwlyZWxhdGVkIHRvIHRoZSBidWcgZml4IGJ1dCBtYWtlcyBzZW5zZSBhbnl3YXkuCisKKzIwMTAtMDctMDEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlJbml0aWFsIGZpeCBmb3IgU2F2YW5uYWggYnVnICMzMDMwNi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBDaGVjayBgcmxlbicsIHRoZQorCWxlbmd0aCBvZiBmcmFnbWVudCBkZWNsYXJlZCBpbiB0aGUgUE9TVCBmcmFnbWVudCBoZWFkZXIsIGFuZCBwcmV2ZW50CisJYW4gdW5kZXJmbG93IGluIGxlbmd0aCBjYWxjdWxhdGlvbi4gIFNvbWUgZm9udHMgc2V0IHRoZSBsZW5ndGggdG8KKwl6ZXJvIGluIHNwaXRlIG9mIHRoZSBleGlzdGVuY2Ugb2YgYSBmb2xsb3dpbmcgMTZiaXQgYHR5cGUnLgorCVJlcG9ydGVkIGJ5IFJvYmVydCDFmndpxJlja2kuCisKKzIwMTAtMDctMDEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlBZGRpdGlvbmFsIGZpeCBmb3IgU2F2YW5uYWggYnVnICMzMDI0OCBhbmQgIzMwMjQ5LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSk6IENoZWNrIHRoZSBidWZmZXIgc2l6ZQorCWR1cmluZyBnYXRoZXJpbmcgUEZCIGZyYWdtZW50cyBlbWJlZGRlZCBpbiBMYXNlcldyaXRlciBQUyBmb250IGZvcgorCU1hY2ludG9zaC4gIFJlcG9ydGVkIGJ5IFJvYmVydCDFmndpxJlja2kuCisKKzIwMTAtMDYtMzAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCU1pbm9yIG9wdGltaXphdGlvbnMgYnkgYXZvaWRpbmcgZGl2aXNpb25zLgorCisJKiBzcmMvc2ZudC90dGtlcm4uYyAodHRfZmFjZV9sb2FkX2tlcm4sIHR0X2ZhY2VfZ2V0X2tlcm5pbmcpOgorCVJlcGxhY2UgZGl2aXNpb25zIHdpdGggbXVsdGlwbGljYXRpb24gaW4gY29tcGFyaXNvbnMuCisKKzIwMTAtMDYtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBtaW5vciB0cmFjaW5nIGlzc3Vlcy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jLCBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBBZGp1c3QgdHJhY2luZyBsZXZlbHMuCisKKzIwMTAtMDYtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFJlYWxseSBmaXggYGhpbnRtYXNrJyBhbmQgYGNudHJtYXNrJyBsaW1pdCBjaGVjay4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX2hpbnRtYXNrPjogRml4IHRoaW5rbyBhbmQgaGFuZGxlIHRyYWNpbmcgYWxzby4KKworMjAxMC0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHZhbGdyaW5kIHdhcm5pbmcuCisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBJbml0aWFsaXplCisJYHJlc3VsdCcgYXJyYXkuCisKKzIwMTAtMDYtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBtZW1vcnkgbGVhay4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfb3BlcmF0b3Jfc2VhYyk6IEZyZWUgY2hhcnN0cmluZ3MgZXZlbiBpbgorCWNhc2Ugb2YgZXJyb3JzLgorCisyMDEwLTA2LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBgaGludG1hc2snIGFuZCBgY250cm1hc2snIG9wZXJhdG9ycy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKKwk8Y2ZmX29wX2hpbnRtYXNrPjogRW5zdXJlIHRoYXQgd2UgZG9uJ3QgZXhjZWVkIGBsaW1pdCcgd2hpbGUgcGFyc2luZworCXRoZSBiaXQgbWFza3Mgb2YgdGhlIGBoaW50bWFzaycgYW5kIGBjbnRybWFzaycgb3BlcmF0b3JzLgorCisyMDEwLTA2LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggUEZSIGNoYW5nZSAyMDEwLTA2LTI0LgorCisJKiBzcmMvcGZyL3Bmcmdsb2FkLmMgKHBmcl9nbHlwaF9sb2FkX3NpbXBsZSk6IFJlYWxseSBwcm90ZWN0IGFnYWluc3QKKwlpbnZhbGlkIGluZGljZXMuCisKKzIwMTAtMDYtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcHJvdmUgUEZSIHRyYWNpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWRfcmVjKTogRW1pdCB0cmFjaW5nIG1lc3NhZ2VzIGZvcgorCXNpbXBsZSBhbmQgY29tcG91bmQgZ2x5cGggb2Zmc2V0cy4KKworMjAxMC0wNi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGxhc3QgUEZSIGNoYW5nZS4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBGaXggcmVqZWN0aW9uIGxvZ2ljLgorCisyMDEwLTA2LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyNjIuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbWF4cCk6IExpbWl0IGBtYXhDb21wb25lbnREZXB0aCcKKwlhcmJpdHJhcmlseSB0byAxMDAgdG8gYXZvaWQgc3RhY2sgZXhoYXVzdGlvbi4KKworMjAxMC0wNi0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIHNvbWUgbWVtb3J5IGNoZWNrcyAobWFpbmx5IGZvciBkZWJ1Z2dpbmcpLgorCisJKiBzcmMvYmFzZS9mdHN0cmVhbS5jIChGVF9TdHJlYW1fRW50ZXJGcmFtZSk6IEV4aXQgd2l0aCBlcnJvcgorCWlmIHRoZSBmcmFtZSBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzdHJlYW0gc2l6ZS4KKworCSogc3JjL2Jhc2UvZnRzeXN0ZW0uYyAoZnRfYW5zaV9zdHJlYW1faW8pOiBFeGl0IHdpdGggZXJyb3IgaWYKKwlzZWVraW5nIGEgcG9zaXRpb24gbGFyZ2VyIHRoYW4gdGhlIHN0cmVhbSBzaXplLgorCisyMDEwLTA2LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGZyXSBGaXggU2F2YW5uYWggYnVnICMzMDI2MS4KKworCSogc3JjL3Bmci9wZnJvYmpzLmMgKHBmcl9mYWNlX2luaXQpOiBSZWplY3QgZm9udHMgd2hpY2ggY29udGFpbgorCW5laXRoZXIgb3V0bGluZSBub3IgYml0bWFwIGdseXBocy4KKworMjAxMC0wNi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyNTQuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKTogRG8gc2FuaXR5IGNoZWNrIGZvcgorCWZpcnN0IG9mZnNldCBhbHNvLgorCisyMDEwLTA2LTI1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJSW5pdGlhbCBmaXggZm9yIFNhdmFubmFoIGJ1ZyAjMzAyNDggYW5kICMzMDI0OS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX1BPU1RfUmVzb3VyY2UpOiBDaGVjayB0aGUgZXJyb3IgZHVyaW5nCisJcmVhZGluZyBhIFBGQiBmcmFnbWVudCBlbWJlZGRlZCBpbiBMYXNlcldyaXRlciBQUyBmb250IGZvciBNYWNpbnRvc2guCisJUmVwb3J0ZWQgYnkgUm9iZXJ0IMWad2nEmWNraS4KKworMjAxMC0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyNDcuCisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X21ldHJpY3MpOiBEaXNhbGxvdyAoaW52YWxpZCkgZm9udHMgd2l0aAorCXplcm8gbWV0cmljcy4KKworMjAxMC0wNi0yNCAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfY3ViaWMpOiBGaXggYWxnb3JpdGhtLgorCVRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyB0b28gYWdncmVzc2l2ZSwgYXMgZGVtb25zdHJhdGVkIGluCisJaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTAtMDYvbXNnMDAwMjAuaHRtbC4KKworMjAxMC0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBVc2UgbW9kdWxlIHNwZWNpZmljIGVycm9yIG5hbWVzIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDEwLTA2LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyMzYuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9mYWNlX2J1aWxkX2NtYXBzKTogSW1wcm92ZSBjaGVjayBmb3IgcG9pbnRlcgorCXRvIGBjbWFwX3RhYmxlJy4KKworMjAxMC0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Bmcl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyMzUuCisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWRfc2ltcGxlKTogUHJvdGVjdCBhZ2FpbnN0CisJaW52YWxpZCBpbmRpY2VzIGlmIHRoZXJlIGFyZW4ndCBhbnkgY29vcmRpbmF0ZXMgZm9yIGluZGV4aW5nLgorCisyMDEwLTA2LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXTogRm9udCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4KKworCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9yZWFkc3RyZWFtKTogVXNlIHNwZWNpYWwgZXJyb3IgY29kZSB0bworCWluZGljYXRlIGEgcmVkbyBvcGVyYXRpb24uCisJKF9iZGZfcGFyc2Vfc3RhcnQpOiBIYW5kbGUgYENIQVJTJyBrZXl3b3JkIGhlcmUgdG9vIGFuZCBwYXNzIGN1cnJlbnQKKwlpbnB1dCBsaW5lIHRvIGBfYmRmX3BhcnNlX2dseXBoJy4KKworMjAxMC0wNi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAyMjAuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaAorCShCREZfRXJyX01pc3NpbmdfRm9udGJvdW5kaW5nYm94X0ZpZWxkKTogTmV3IGVycm9yIGNvZGUuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2Vfc3RhcnQpOiBDaGVjayBmb3IgbWlzc2luZworCWBGT05UQk9VTkRJTkdCT1gnIGZpZWxkLgorCUF2b2lkIG1lbW9yeSBsZWFrIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBgRk9OVCcgbGluZXMgKHdoaWNoIGlzCisJaW52YWxpZCBidXQgZG9lc24ndCBodXJ0KS4KKworMjAxMC0wNi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Bmcl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAxNjguCisKKwkqIHNyYy9wZnIvcGZyZ2xvYWQuYyAocGZyX2dseXBoX2xvYWRfY29tcG91bmQpOiBMaW1pdCB0aGUgbnVtYmVyIG9mCisJc3ViZ2x5cGhzIHRvIGF2b2lkIGVuZGxlc3MgcmVjdXJzaW9uLgorCisyMDEwLTA2LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEZpeCBTYXZhbm5haCBidWcgIzMwMTQ1LgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHQxX2J1aWxkZXJfYWRkX2NvbnRvdXIpOiBQcm90ZWN0IGFnYWluc3QKKwlgb3V0bGluZSA9PSBOVUxMJyB3aGljaCBtaWdodCBoYXBwZW4gaW4gaW52YWxpZCBmb250cy4KKworMjAxMC0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAxMzUuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfbGlzdF9qb2luKTogRG9uJ3QgbW9kaWZ5IHZhbHVlIGluIHN0YXRpYworCXN0cmluZyBgZW1wdHknLgorCShfYmRmX3BhcnNlX2dseXBoKTogQXZvaWQgbWVtb3J5IGxlYWsgaW4gY2FzZSBvZiBlcnJvci4KKworMjAxMC0wNi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBTYXZhbm5haCBidWcgIzMwMTA4LgorCisJKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zY3JpcHRfY292ZXJhZ2UpOgorCVByb3Blcmx5IG1hc2sgQUZfRElHSVQgYml0IGluIGNvbXBhcmlzb24uCisKKzIwMTAtMDYtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2hpbnRlcl0gRml4IFNhdmFubmFoIGJ1ZyAjMzAxMDYuCisKKwlQb2ludCBudW1iZXJzIGZvciBGcmVlVHlwZSdzIGltcGxlbWVudGF0aW9uIG9mIGhpbnRpbmcgbWFza3MgYXJlCisJY29sbGVjdGVkIGJlZm9yZSB0aGUgZmluYWwgbnVtYmVyIG9mIHBvaW50cyBvZiBhIGdseXBoIGhhcyBiZWVuCisJZGV0ZXJtaW5lZDsgaW4gcGFydGljdWxhciwgdGhlIGNvZGUgZm9yIGhhbmRsaW5nIHRoZSBgZW5kY2hhcicKKwlvcGNvZGUgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBvaW50cy4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNoX2dseXBoX2ZpbmRfc3Ryb25nX3BvaW50cyk6IEFzc3VyZSB0aGF0CisJYGVuZF9wb2ludCcgaXMgbm90IGxhcmdlciB0aGFuIGBnbHlwaC0+bnVtX3BvaW50cycuCisKKzIwMTAtMDYtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdOiBJbXByb3ZlIGRlYnVnZ2luZyBvdXRwdXQuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJPGNmZl9vcF9oaW50bWFzaz46IEltcGxlbWVudCBpdC4KKworMjAxMC0wNi0xMCAgR3JhaGFtIEFzaGVyICA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPgorCisJZnRncmF5czogU3BlZWQgdXAgcmVuZGVyaW5nIG9mIHNtYWxsIGN1YmljIHNwbGluZXMuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9jdWJpYyk6IEltcGxlbWVudCBuZXcsCisJc2ltcGxpZmllZCBhbGdvcml0aG0gdG8gZmluZCBvdXQgd2hldGhlciB0aGUgc3BsaW5lIGNhbiBiZSByZXBsYWNlZAorCXdpdGggdHdvIHN0cmFpZ2h0IGxpbmVzLiAgU2VlIHRoaXMgdGhyZWFkIGZvciBtb3JlOgorCisJICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wNi9tc2cwMDAwMC5odG1sCisKKzIwMTAtMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBTYXZhbm5haCBidWcgIzMwMDgyLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxjZmZfb3BfY2FsbG90aGVyc3Vicj46IFByb3RlY3QgYWdhaW5zdCBzdGFjayB1bmRlcmZsb3cuCisKKzIwMTAtMDYtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBTYXZhbm5haCBidWcgIzMwMDUzLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9yZWFsKTogSGFuZGxlIGJvcmRlciBjYXNlIHdoZXJlCisJYGZyYWN0aW9uX2xlbmd0aCcgaGFzIHZhbHVlIDEwLgorCisyMDEwLTA2LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggU2F2YW5uYWggYnVnICMzMDA1Mi4KKwlUaGlzIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkIHdpdGggY29tbWl0IDI0MTVjYmYzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0ZpcnN0X0NoYXIsIEZUX0dldF9OZXh0X0NoYXIpOiBQcm90ZWN0CisJYWdhaW5zdCBlbmRsZXNzIGxvb3AgaW4gY2FzZSBvZiBjb3JydXB0ZWQgZm9udCBoZWFkZXIgZGF0YS4KKworMjAxMC0wNS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwlGb3VuZCBieSBHcmFoYW0uCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfcmVsb2FkKTogUmVtb3ZlIHVudXNlZAorCXZhcmlhYmxlIGBmaXJzdCcgaW4gZmlyc3QgYmxvY2suCisKKzIwMTAtMDUtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCB2YXJpb3VzIG1lbW9yeSBwcm9ibGVtcyBmb3VuZCBieSBsaW51eHRlc3Rpbmcub3JnLgorCisJKiBzcmMvYmFzZS9mdGd4dmFsLmMgKEZUX1RydWVUeXBlR1hfRnJlZSwgRlRfQ2xhc3NpY0tlcm5fRnJlZSksCisJc3JjL2Jhc2UvZnRvdHZhbC5jIChGVF9PcGVuVHlwZV9GcmVlKSwgc3JjL2Jhc2UvZnRwZnIuYworCShmdF9wZnJfY2hlY2spOiBDaGVjayBgZmFjZScuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9HZXRfQ2hhcm1hcF9JbmRleCk6IENoZWNrIGBjaGFybWFwJyBhbmQKKwlgY2hhcm1hcC0+ZmFjZScuCisJKEZUX1JlbmRlcl9HbHlwaCk6IENoZWNrIGBzbG90LT5mYWNlJy4KKwkoRlRfR2V0X1N1YkdseXBoX0luZm8pOiBDaGVjayBgZ2x5cGgtPnN1YmdseXBocycuCisKKzIwMTAtMDUtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCWF1dG9maXQ6IFJlbW92ZSBkZWFkIGNvZGUuCisJU3VnZ2VzdGVkIGJ5IEdyYWhhbS4KKworCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19jb21wdXRlX2luZmxlY3Rpb25zKToKKwlSZW1vdmVkLgorCShhZl9nbHlwaF9oaW50c19yZWxvYWQpOiBSZW1vdmUgdGhpcmQgYXJndW1lbnQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisyMDEwLTA1LTIxICBCcmFtIFRhc3N5bnMgIDxicmFtdEBlbmZvY3VzLmJlPgorCisJW2NmZl0gRml4IFNhdmFubmFoIGJ1ZyAjMjc5ODcuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChyZW1vdmVfc3Vic2V0X3ByZWZpeCk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX2ZhY2VfaW5pdCk6IFVzZSBpdCB0byBhZGp1c3QgYGNmZmZhY2UtPmZhbWlseV9uYW1lJy4KKworMjAxMC0wNS0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJVHJ1ZVR5cGU6IE1ha2UgRnJlZVR5cGUgaWdub3JlIG1heFNpemVPZkluc3RydWN0aW9ucyBpbiBgbWF4cCcuCisKKwlBY3JvcmVhZCBkb2VzIHRoZSBzYW1lLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9HbHlwaCk6IENhbGwKKwlgVXBkYXRlX01heCcgdG8gYWRqdXN0IHNpemUgb2YgaW5zdHJ1Y3Rpb25zIGFycmF5IGlmIG5lY2Vzc2FyeSBhbmQKKwlhZGQgYSByb3VnaCBzYWZldHkgY2hlY2suCisKKwkobG9hZF90cnVldHlwZV9nbHlwaCk6IFNhdmUgYGxvYWRlci0+Ynl0ZV9sZW4nIGJlZm9yZSByZWN1cnNpdmUKKwljYWxsLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCwgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFVwZGF0ZV9NYXgpOgorCURlY2xhcmUgaXQgYXMgRlRfTE9DQUwuCisKKzIwMTAtMDUtMTggIEhvbmdibyBOaSAgPGhvbmdib0BuanN0YXIuY29tPgorCisJQXBwbHkgU2F2YW5uYWggcGF0Y2ggIzcxOTYuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX3Nsb3RfbG9hZCk6IFByZXZlbnQgY3Jhc2ggaWYgQ0ZGIHN1YmZvbnQKKwlpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCisKKzIwMTAtMDUtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogZG9jcy9mb3JtYXRzLnR4dDogR2l2ZSBwb2ludGVyIHRvIFBDRiBkb2N1bWVudGF0aW9uLgorCUluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IEFsYW4gQ29vcGVyc21pdGgKKwk8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPi4KKworMjAxMC0wNS0xMCAgS2VuIFNoYXJwICA8a2VuLnNoYXJwQGFydGlmZXguY29tPgorCisJW3BzYXV4XSBGaXggU2F2YW5uYWggYnVnICMyOTg0Ni4KKworCVByZXZpb3VzbHkgd2UgZGlzY292ZXJlZCBmb250cyB3aGljaCB1c2VkIGBzZXRjdXJyZW50cG9pbnQnIHRvIHNldAorCXRoZSBpbml0aWFsIHBvaW50IG9mIGEgY29udG91ciB0byAwLDAuICBUaGlzIGNhdXNlZCBGcmVlVHlwZSB0bworCXJhaXNlIGFuIGVycm9yLCBiZWNhdXNlIHRoZSBgc2V0Y3VycmVudHBvaW50JyBvcGVyYXRvciBpcyBvbmx5CisJc3VwcG9zZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSByZXN1bHRzIGZyb20gYW4gT3RoZXJTdWJyIHN1YnJvdXRpbmUuCisKKwlUaGlzIHdhcyBmaXhlZCBieSBzaW1wbHkgaWdub3JpbmcgdGhlIGVycm9yIGFuZCBjYXJyeWluZyBvbi4KKworCU5vdyB3ZSBoYXZlIGZvdW5kIGEgZm9udCB3aGljaCB1c2VzIHNldGN1cnJlbnRwb2ludCB0byBhY3R1YWxseQorCWVzdGFibGlzaCBhIG5vbi16ZXJvIHBvaW50IGZvciBhIGNvbnRvdXIgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYQorCWdseXBoIHByb2dyYW0uICBGV0lXLCB0aGVzZSBmaWxlcyBtYXkgYmUgcHJvZHVjZWQgYnkgYW4gYXBwbGljYXRpb24KKwljYWxsZWQgYEludGFnbGlvJyBvbiB0aGUgTWFjLCB3aGVuIGNvbnZlcnRpbmcgVHJ1ZVR5cGUgZm9udHMgdG8KKwlUeXBlIDEuCisKKwlUaGUgZml4IGFsbG93cyB0aGUgbmV3IGludmFsaWQgYmVoYXZpb3VyLCB0aGUgb2xkIGludmFsaWQgYmVoYXZpb3VyCisJYW5kIHJlYWwgcHJvcGVyIHVzYWdlIG9mIHRoZSBvcGVyYXRvciB0byB3b3JrIHRoZSBzYW1lIHdheSBhcyBBZG9iZQorCWludGVycHJldGVycyBhcHBhcmVudGx5IGRvLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IE1ha2UKKwlgc2V0Y3VycmVudHBvaW50JyB1c2UgdGhlIHRvcCB0d28gZWxlbWVudHMgb2YgdGhlIHN0YWNrIHRvIGVzdGFibGlzaAorCXVuY29uZGl0aW9uYWxseSB0aGUgY3VycmVudCB4IGFuZCB5IGNvb3JkaW5hdGVzLgorCisJTWFrZSB0aGUgYGZsZXgnIHN1YnJvdXRpbmUgaGFuZGxpbmcgKE90aGVyU3ViciAwKSBwdXQgdGhlIGN1cnJlbnQKKwl4LHkgY29vcmRpbmF0ZXMgb250byB0aGUgc3RhY2ssIGluc3RlYWQgb2YgdHdvIGR1bW15IHVuaW5pdGlhbGlzZWQKKwl2YWx1ZXMuCisKKzIwMTAtMDQtMTQgIEtlbiBTaGFycCAgPGtlbi5zaGFycEBhcnRpZmV4LmNvbT4KKworCVtwc2F1eF0gRml4IFNhdmFubmFoIGJ1ZyAjMjk0NDQuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfYnVpbGRlcl9zdGFydF9wb2ludCk6IEFjY2VwdCAoaW52YWxpZCkKKwlgbGluZXRvJyBpbW1lZGlhdGVseSBhZnRlciBgaHNidycsIGluIGFjY29yZGFuY2Ugd2l0aCBBY3JvYmF0LCBHUywKKwlhbmQgb3RoZXJzLgorCisyMDEwLTA0LTE0ICBNaWNoYcWCIENpY2hvxYQgIDx0aGVkbWRAYXJ0aWZleG11bmRpLmNvbT4KKworCVtwc2F1eF0gRml4IFNhdmFubmFoIGJ1ZyAjMjc5OTkuCisKKwkqIHNyYy9jYWNoZS9mdGNtYW5hZy5jIChGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQpOiBPbmx5IHJlbW92ZQorCXNlbGVjdGVkIGVudHJ5LCBub3QgYWxsLgorCisyMDEwLTA0LTA2ICBKb25hdGhhbiBLZXcgIDxqZmt0aGFtZUBnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIEFkZCBvdmVyZmxvdyBjaGVjayB0byBgZnZhcicgdGFibGUuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBDaGVjayBheGlzIGFuZCBpbnN0YW5jZQorCWNvdW50LgorCisyMDEwLTA0LTA1ICBLZW4gU2hhcnAgIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+CisKKwlbcmFzdGVyXSBGaXggU2F2YW5uYWggYnVnICMyOTMzNS4KKworCSogc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIChMaW5lX1VwKTogVXNlIHNsb3cgbXVsdGlwbGljYXRpb24gdG8KKwlwcmV2ZW50IG92ZXJmbG93LiAgVGhpcyBzaG91bGRuJ3QgaGF2ZSBhbnkgc2VyaW91cyBpbXBhY3Qgb24gc3BlZWQsCisJaG93ZXZlci4KKworMjAxMC0wNC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIG5ldyBmdW5jdGlvbiBgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzJy4KKworCVRoaXMgaXMgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IExpZnRlcgorCTxodHRwOi8vdW5peGZvcnVtLm9yZy9pbmRleC5waHA/c2hvd3VzZXI9MTE2OTE+LiAgSXQgZml4ZXMKKwlGcmVlRGVza3RvcCBidWcgIzI3Mzg2LgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMpOiBOZXcKKwlmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oOiBVcGRhdGVkLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTAtMDQtMDEgIEpvaG4gVHl0Z2F0ICA8Sm9obi5UeXRnYXRAZXNrby5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBTYXZhbm5haCBidWcgIzI5NDA0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBSZXZlcnQgY2hhbmdlIDI3NTJiZDFhIChjaGVjayBvbiBiaXQgMQorCW9mIGBoZWFkJyB0YWJsZSBvZiBUcnVlVHlwZSBmb250cykuCisKKzIwMTAtMDMtMTQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlGaXggYG11bHRpIGJ1aWxkJyBmb3IgVHl0Z2F0J3MgQ0ZGIGRyaXZlciBpbXByb3ZlbWVudC4KKworCSogc3JjL2Jhc2UvY2ZmbG9hZC5oIChjZmZfaW5kZXhfZ2V0X25hbWUpOiBBZGRlZC4KKworMjAxMC0wMy0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVJlbW92ZSBkdXBsaWNhdGVkIGluY2x1c2lvbiBvZiBgRlRfT1VUTElORV9IJyBpbiBmdG9ianMuYy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IFJlbW92ZSAybmQgaW5jbHVzaW9uIG9mIGBGVF9PVVRMSU5FX0gnLgorCisyMDEwLTAzLTExICBDaHJpcyBMaWRkZWxsICA8Y2hyaXMubGlkZGVsbEBhcnRpZmV4LmNvbT4KKworCVtyYXN0ZXJdIEZpeCBTYXZhbm5haCBidWcgIzI3NDQyLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKGZ0X2JsYWNrX3Jlc2V0KTogRml4IGBidWZmZXJfc2l6ZScuCisKKzIwMTAtMDMtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisJUmVwb3J0ZWQgYnkgR3JhaGFtLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZV9yZWFsKTogUmVtb3ZlIGByZXN0Jy4KKworMjAxMC0wMy0wMiAgSm9obiBUeXRnYXQgIDxKb2huLlR5dGdhdEBlc2tvLmNvbT4KKworCVtjZmZdIEltcHJvdmUgQ0ZGIHN0cmluZyAoZXNwZWNpYWxseSBnbHlwaG5hbWUpIGxvb2t1cCBwZXJmb3JtYW5jZS4KKworCVdlIGRvIHRoaXMgYnkgYXZvaWRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZpbGUgSS9PLiAgVGhpcyBpcworCVNhdmFubmFoIHBhdGNoICM3MTA0LgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmg6IEluY2x1ZGUgUFMgY21hcHMgc2VydmljZSBhbmQKKwlGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0guCisJKENGRl9TdWJGb250UmVjKTogUmVtb3ZlIGBudW1fbG9jYWxfc3VicnMnLgorCShDRkZfRm9udFJlYyk6IEFkZCBgbnVtX3N0cmluZ3MnLCBgc3RyaW5ncycsIGFuZCBgc3RyaW5nX3Bvb2wnCisJZmllbGRzLgorCVJlbW92ZSBgc3RyaW5nX2luZGV4JyBhbmQgYG51bV9nbG9iYWxfc3VicnMnIGZpZWxkcy4KKwlVc2UgcmVhbCB0eXBlcyBpbnN0ZWFkIG9mIGB2b2lkJyBmb3IgYHBzaGludGVyJyBhbmQgYHBzbmFtZXMnIGZpZWxkcy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmM6IERvbid0IGluY2x1ZGUgUFMgY21hcHMgc2VydmljZS4KKwkoY2ZmX2luZGV4X2dldF9wb2ludGVycyk6IEFkZCBgcG9vbCcgcGFyYW1ldGVyIHdoaWNoIGFsbG93cyB0bworCWluc2VydCBhbiBleHRyYSBOVUwgY2hhcmFjdGVyIGZvciBlYWNoIFN0cmluZyBJTkRFWCBlbnRyeS4KKwkoY2ZmX2luZGV4X2dldF9uYW1lKTogTWFrZSBpdCBhIGxvY2FsIGZ1bmN0aW9uLgorCShjZmZfaW5kZXhfZ2V0X3N0cmluZyk6IE5ldyBmdW5jdGlvbi4KKwkoY2ZmX3N1YmZvbnRfbG9hZCk6IFVwZGF0ZWQuCisJKGNmZl9mb250X2xvYWQpOiBJbml0aWFsaXplIGBudW1fc3RyaW5ncycsIGBzdHJpbmdzJywgYW5kCisJYHN0cmluZ19wb29sJyBmaWVsZHMgaW4gdGhlIGBDRkZfRm9udFJlYycgc3RydWN0dXJlLgorCShjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcpOiBVc2UgYGNmZl9pbmRleF9nZXRfc3RyaW5nJyBpbnN0ZWFkIG9mCisJYGNmZl9pbmRleF9nZXRfbmFtZScuCisJKGNmZl9mb250X2RvbmUpOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogRG9uJ3QgaW5jbHVkZSBQUyBjbWFwcyBzZXJ2aWNlLgorCShjZmZfaW5kZXhfZ2V0X3N0cmluZyk6IEFkZGVkLgorCShjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcpOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYzogRG9uJ3QgaW5jbHVkZSBQUyBjbWFwcyBzZXJ2aWNlIGFuZAorCUZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSC4KKwkoY2ZmX3NpemVfZ2V0X2dsb2JhbHNfZnVuY3MsIGNmZl9zbG90X2luaXQpOiBVcGRhdGVkLgorCShjZmZfZmFjZV9pbml0KTogRm9sbG93IGBjZmZfaW5kZXhfZ2V0X25hbWUnLAorCWBjZmZfaW5kZXhfZ2V0X3N0cmluZycsIGFuZCBgY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nJyBjaGFuZ2VzLgorCisJKiBzcmMvY2ZmL2NmZmNtYXAuYyAoY2ZmX3NpZF9mcmVlX2dseXBoX25hbWUpOiBSZW1vdmVkLgorCShjZmZfc2lkX3RvX2dseXBoX25hbWUpOiBVc2UgYGNmZl9pbmRleF9nZXRfY2lkX3N0cmluZycuCisJKGNmZl9jbWFwX3VuaWNvZGVfaW5pdCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogRG9uJ3QgaW5jbHVkZSBQUyBjbWFwIHNlcnZpY2UuCisJKGNmZl9nZXRfZ2x5cGhfbmFtZSk6IEF2b2lkIHVubmVjZXNzYXJ5IGxvb2t1cCBmb3IgUE9TVFNDUklQVF9DTUFQUworCXNlcnZpY2UuCisJKGNmZl9nZXRfZ2x5cGhfbmFtZSwgY2ZmX3BzX2dldF9mb250X2luZm8sIGNmZl9nZXRfcm9zKTogRm9sbG93IEFQSQorCWBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcnIGNoYW5nZS4KKwkoY2ZmX2dldF9uYW1lX2luZGV4KTogVXNlIGBjZmZfaW5kZXhfZ2V0X3N0cmluZycgaW5zdGVhZCBvZgorCWBjZmZfaW5kZXhfZ2V0X25hbWUnLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmM6IERvbid0IGluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ILgorCShjZmZfZGVjb2Rlcl9pbml0LCBjZmZfZGVjb2Rlcl9wcmVwYXJlKTogVXBkYXRlZC4KKworMjAxMC0wMi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJU2ltcGxpZnkgY29kZS4KKwlTdWdnZXN0ZWQgYnkgQmVoZGFkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0ZpcnN0X0NoYXIpOiBEb24ndCB1c2UgYSBsb29wIHNpbmNlIHdlCisJY2FsbCBGVF9HZXRfTmV4dF9DaGFyIGFueXdheSBpZiBuZWNlc3NhcnkuCisKKzIwMTAtMDItMjYgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJSW1wcm92ZSBoYW5kbGluZyBvZiBpbnZhbGlkIGdseXBoIGluZGljZXMgaW4gY2hhci0+aW5kZXggZnVuY3Rpb25zLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0ZpcnN0X0NoYXIsIEZUX0dldF9OZXh0X0NoYXIpOiBVc2UgYQorCWxvb3AuCisKKzIwMTAtMDItMTggIENocmlzIExpZGRlbGwgIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgorCisJW3RydWV0eXBlXSBGaXggU2F2YW5uYWggYnVnICMyODkwNS4KKworCUluaXRpYWxpemUgcGhhbnRvbSBwb2ludHMgYmVmb3JlIGNhbGxpbmcgdGhlIGluY3JlbWVudGFsIGludGVyZmFjZQorCXRvIHVwZGF0ZSBnbHlwaCBtZXRyaWNzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcykKKwlbRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTF06IE5ldyBmdW5jdGlvbiwgc3BsaXQgb2ZmIGZyb20uLi4KKwkodHRfZ2V0X21ldHJpY3MpOiBUaGlzLgorCVVwZGF0ZWQuCisJKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBVc2UgdHRfZ2V0X21ldHJpY3NfaW5jcl9vdmVycmlkZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMTAtMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKK2luZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CitmdWxseS4KKworCitMb2NhbCBWYXJpYWJsZXM6Cit2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCitjb2Rpbmc6IHV0Zi04CitFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmEwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvSmFtZmlsZQpAQCAtMCwwICsxLDIwNCBAQAorIyBGcmVlVHlwZSAyIHRvcCBKYW1maWxlLgorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIFRoZSBIRFJNQUNSTyBpcyBhbHJlYWR5IGRlZmluZWQgaW4gRlRKYW0gYW5kIGlzIHVzZWQgdG8gYWRkCisjIHRoZSBjb250ZW50IG9mIGNlcnRhaW4gbWFjcm9zIHRvIHRoZSBsaXN0IG9mIGluY2x1ZGVkIGhlYWRlcgorIyBmaWxlcy4KKyMKKyMgV2UgY2FuIGNvbXBpbGUgRnJlZVR5cGUgMiB3aXRoIGNsYXNzaWMgSmFtIGhvd2V2ZXIgdGhhbmtzIHRvCisjIHRoZSBmb2xsb3dpbmcgY29kZQorIworaWYgISAkKEpBTV9UT09MU0VUKQoreworICBydWxlIEhEUk1BQ1JPCisgIHsKKyAgICAjIG5vdGhpbmcKKyAgfQorfQorCisKKyMgV2UgbmVlZCB0byBpbnZva2UgYSBTdWJEaXIgcnVsZSBpZiB0aGUgRlQyIHNvdXJjZSBkaXJlY3RvcnkgdG9wIGlzIG5vdCB0aGUKKyMgY3VycmVudCBkaXJlY3RvcnkuICBUaGlzIGFsbG93cyB1cyB0byBidWlsZCBGcmVlVHlwZSAyIGFzIHBhcnQgb2YgYSBsYXJnZXIKKyMgcHJvamVjdCBlYXNpbHkuCisjCitpZiAkKEZUMl9UT1ApICE9ICQoRE9UKQoreworICBTdWJEaXIgIEZUMl9UT1AgOworfQorCisKKyMgVGhlIGZvbGxvd2luZyBtYWNyb3MgZGVmaW5lIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSwgdGhlIHNvdXJjZSBkaXJlY3RvcnksCisjIGFuZCB0aGUgZmluYWwgbGlicmFyeSBuYW1lICh3aXRob3V0IGxpYnJhcnkgZXh0ZW5zaW9ucykuICBUaGV5IGNhbiBiZQorIyByZXBsYWNlZCBieSBvdGhlciBkZWZpbml0aW9ucyB3aGVuIHRoZSBsaWJyYXJ5IGlzIGNvbXBpbGVkIGFzIHBhcnQgb2YKKyMgYSBsYXJnZXIgcHJvamVjdC4KKyMKKworIyBOYW1lIG9mIEZyZWVUeXBlIGluY2x1ZGUgZGlyZWN0b3J5IGR1cmluZyBjb21waWxhdGlvbi4KKyMgVGhpcyBpcyByZWxhdGl2ZSB0byBGVDJfVE9QLgorIworRlQyX0lOQ0xVREVfRElSID89IGluY2x1ZGUgOworCisjIE5hbWUgb2YgRnJlZVR5cGUgc291cmNlIGRpcmVjdG9yeSBkdXJpbmcgY29tcGlsYXRpb24uCisjIFRoaXMgaXMgcmVsYXRpdmUgdG8gRlQyX1RPUC4KKyMKK0ZUMl9TUkNfRElSID89IHNyYyA7CisKKyMgTmFtZSBvZiBmaW5hbCBsaWJyYXJ5LCB3aXRob3V0IGV4dGVuc2lvbi4KKyMKK0ZUMl9MSUIgPz0gJChMSUJQUkVGSVgpZnJlZXR5cGUgOworCisKKyMgRGVmaW5lIEZUMl9CVUlMRF9JTkNMVURFIHRvIHBvaW50IHRvIHlvdXIgYnVpbGQtc3BlY2lmaWMgZGlyZWN0b3J5LgorIyBUaGlzIGlzIHByZXBlbmRlZCB0byBGVDJfSU5DTFVERV9ESVIuICBJdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisjIHRoZSBsb2NhdGlvbiBvZiBhIGN1c3RvbSA8ZnQyYnVpbGQuaD4gd2hpY2ggd2lsbCBwb2ludCB0byBjdXN0b20KKyMgdmVyc2lvbnMgb2YgYGZ0bW9kdWxlLmgnIGFuZCBgZnRvcHRpb24uaCcsIGZvciBleGFtcGxlLgorIworRlQyX0JVSUxEX0lOQ0xVREUgPz0gOworCisjIFRoZSBsaXN0IG9mIG1vZHVsZXMgdG8gY29tcGlsZSBvbiBhbnkgZ2l2ZW4gYnVpbGQgb2YgdGhlIGxpYnJhcnkuCisjIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBjb250YWluIF9hbGxfIG1vZHVsZXMgZGVmaW5lZCBpbiBGVDJfU1JDX0RJUi4KKyMKKyMgSU1QT1JUQU5UOiBZb3UnbGwgbmVlZCB0byBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYGZ0bW9kdWxlLmgnIGFzIHdlbGwKKyMgICAgICAgICAgICBpZiB5b3UgbW9kaWZ5IHRoaXMgbGlzdCBvciBwcm92aWRlIHlvdXIgb3duLgorIworRlQyX0NPTVBPTkVOVFMgPz0gYXV0b2ZpdCAgICAjIGF1dG8tZml0dGVyCisgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICMgYmFzZSBjb21wb25lbnQgKHB1YmxpYyBBUElzKQorICAgICAgICAgICAgICAgICAgYmRmICAgICAgICAjIEJERiBmb250IGRyaXZlcgorICAgICAgICAgICAgICAgICAgY2FjaGUgICAgICAjIGNhY2hlIHN1Yi1zeXN0ZW0KKyAgICAgICAgICAgICAgICAgIGNmZiAgICAgICAgIyBDRkYvQ0VGIGZvbnQgZHJpdmVyCisgICAgICAgICAgICAgICAgICBjaWQgICAgICAgICMgUG9zdFNjcmlwdCBDSUQta2V5ZWQgZm9udCBkcml2ZXIKKyAgICAgICAgICAgICAgICAgIHBjZiAgICAgICAgIyBQQ0YgZm9udCBkcml2ZXIKKyAgICAgICAgICAgICAgICAgIGJ6aXAyICAgICAgIyBzdXBwb3J0IGZvciBiemlwMi1jb21wcmVzc2VkIFBDRiBmb250CisgICAgICAgICAgICAgICAgICBnemlwICAgICAgICMgc3VwcG9ydCBmb3IgZ3ppcC1jb21wcmVzc2VkIFBDRiBmb250CisgICAgICAgICAgICAgICAgICBsencgICAgICAgICMgc3VwcG9ydCBmb3IgTFpXLWNvbXByZXNzZWQgUENGIGZvbnQKKyAgICAgICAgICAgICAgICAgIHBmciAgICAgICAgIyBQRlIvVHJ1ZURvYyBmb250IGRyaXZlcgorICAgICAgICAgICAgICAgICAgcHNhdXggICAgICAjIGNvbW1vbiBQb3N0U2NyaXB0IHJvdXRpbmVzIG1vZHVsZQorICAgICAgICAgICAgICAgICAgcHNoaW50ZXIgICAjIFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZQorICAgICAgICAgICAgICAgICAgcHNuYW1lcyAgICAjIFBvc3RTY3JpcHQgbmFtZXMgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICAgIHJhc3RlciAgICAgIyBtb25vY2hyb21lIHJhc3Rlcml6ZXIKKyAgICAgICAgICAgICAgICAgIHNtb290aCAgICAgIyBhbnRpLWFsaWFzZWQgcmFzdGVyaXplcgorICAgICAgICAgICAgICAgICAgc2ZudCAgICAgICAjIFNGTlQtYmFzZWQgZm9ybWF0IHN1cHBvcnQgcm91dGluZXMKKyAgICAgICAgICAgICAgICAgIHRydWV0eXBlICAgIyBUcnVlVHlwZSBmb250IGRyaXZlcgorICAgICAgICAgICAgICAgICAgdHlwZTEgICAgICAjIFBvc3RTY3JpcHQgVHlwZSAxIGZvbnQgZHJpdmVyCisgICAgICAgICAgICAgICAgICB0eXBlNDIgICAgICMgUG9zdFNjcmlwdCBUeXBlIDQyIChlbWJlZGRlZCBUcnVlVHlwZSkgZHJpdmVyCisgICAgICAgICAgICAgICAgICB3aW5mb250cyAgICMgV2luZG93cyBGT04vRk5UIGZvbnQgZHJpdmVyCisgICAgICAgICAgICAgICAgICA7CisKKworIyBEb24ndCB0b3VjaC4KKyMKK0ZUMl9JTkNMVURFICA9ICQoRlQyX0JVSUxEX0lOQ0xVREUpCisgICAgICAgICAgICAgICBbIEZUMl9TdWJEaXIgJChGVDJfSU5DTFVERV9ESVIpIF0gOworCitGVDJfU1JDICAgICAgPSBbIEZUMl9TdWJEaXIgJChGVDJfU1JDX0RJUikgXSA7CisKKyMgTG9jYXRpb24gb2YgQVBJIFJlZmVyZW5jZSBEb2N1bWVudGF0aW9uCisjCitpZiAkKERPQ19ESVIpCit7CisgIERPQ19ESVIgPSAkKERPQ0RJUjpUKSA7Cit9CitlbHNlCit7CisgIERPQ19ESVIgPSBkb2NzL3JlZmVyZW5jZSA7Cit9CisKKworIyBPbmx5IHVzZWQgYnkgRnJlZVR5cGUgZGV2ZWxvcGVycy4KKyMKK2lmICQoREVCVUdfSElOVEVSKQoreworICBDQ0ZMQUdTICs9IC1EREVCVUdfSElOVEVSIDsKK30KKworCisjIFdlIG5lZWQgYGZyZWV0eXBlMi9pbmNsdWRlJyBpbiB0aGUgY3VycmVudCBpbmNsdWRlIHBhdGggaW4gb3JkZXIgdG8KKyMgY29tcGlsZSBhbnkgcGFydCBvZiBGcmVlVHlwZSAyLgorIzogdXBkYXRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdXBjb21pbmcgcmVsZWFzZQorCitIRFJTICs9ICQoRlQyX0lOQ0xVREUpIDsKKworCisjIFdlIG5lZWQgdG8gI2RlZmluZSBGVDJfQlVJTERfTElCUkFSWSBzbyB0aGF0IG91ciBzb3VyY2VzIGZpbmQgdGhlCisjIGludGVybmFsIGhlYWRlcnMKKyMKK0RFRklORVMgKz0gRlQyX0JVSUxEX0xJQlJBUlkgOworCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMKKyMgZm9yIGVhY2ggRnJlZVR5cGUgMiBtb2R1bGUuICBUaGlzIGlzIG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCwgYW5kCisjIGlzIGJldHRlciBkZWZpbmVkIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFueXdheSEKKyMKKyMgRlQyX01VTFRJID0gdHJ1ZSA7CisKKworIyBUaGUgZmlsZSA8Y29uZmlnL2Z0aGVhZGVyLmg+IGlzIHVzZWQgdG8gZGVmaW5lIG1hY3JvcyB0aGF0IGFyZSBsYXRlciB1c2VkCisjIGluICNpbmNsdWRlIHN0YXRlbWVudHMuICBJdCBuZWVkcyB0byBiZSBwYXJzZWQgaW4gb3JkZXIgdG8gcmVjb3JkIHRoZXNlCisjIGRlZmluaXRpb25zLgorIworSERSTUFDUk8gIFsgRlQyX1N1YkRpciAgaW5jbHVkZSBmcmVldHlwZSBjb25maWcgZnRoZWFkZXIuaCBdIDsKK0hEUk1BQ1JPICBbIEZUMl9TdWJEaXIgIGluY2x1ZGUgZnJlZXR5cGUgaW50ZXJuYWwgaW50ZXJuYWwuaCBdIDsKKworCisjIE5vdyBpbmNsdWRlIHRoZSBKYW1maWxlIGluIGBmcmVldHlwZTIvc3JjJywgdXNlZCB0byBkcml2ZSB0aGUgY29tcGlsYXRpb24KKyMgb2YgZWFjaCBGcmVlVHlwZSAyIGNvbXBvbmVudCBhbmQvb3IgbW9kdWxlLgorIworU3ViSW5jbHVkZSAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSA7CisKKyMgSGFuZGxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBgZnRleHBvcnQuc3ltJyBmaWxlIHdoaWNoIGNvbnRhaW4gdGhlIGxpc3QKKyMgb2YgZXhwb3J0ZWQgc3ltYm9scy4gIFRoaXMgY2FuIGJlIHVzZWQgb24gVW5peCBieSBsaWJ0b29sLgorIworU3ViSW5jbHVkZSBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHRvb2xzIDsKKworcnVsZSBHZW5FeHBvcnRTeW1ib2xzCit7CisgIGxvY2FsICBhcGluYW1lcyA9IGFwaW5hbWVzJChTVUZFWEUpIDsKKyAgbG9jYWwgIGhlYWRlcnMgID0gWyBHbG9iICQoMikgOiAqLmggXSA7CisKKyAgTE9DQVRFIG9uICQoMSkgPSAkKEFMTF9MT0NBVEVfVEFSR0VUKSA7CisKKyAgQVBJTkFNRVMgb24gJCgxKSA9IGFwaW5hbWVzJChTVUZFWEUpIDsKKworICBEZXBlbmRzICAgICAgICAgICAgJCgxKSA6ICQoYXBpbmFtZXMpICQoaGVhZGVycykgOworICBHZW5FeHBvcnRTeW1ib2xzMSAgJCgxKSA6ICQoaGVhZGVycykgOworICBDbGVhbiAgICAgICAgICAgICAgY2xlYW4gOiAkKDEpIDsKK30KKworYWN0aW9ucyBHZW5FeHBvcnRTeW1ib2xzMSBiaW5kIEFQSU5BTUVTCit7CisgICQoQVBJTkFNRVMpICQoMikgPiAkKDEpCit9CisKK0dlbkV4cG9ydFN5bWJvbHMgIGZ0ZXhwb3J0LnN5bSA6IGluY2x1ZGUgaW5jbHVkZS9jYWNoZSA7CisKKyMgVGVzdCBmaWxlcyAoaGludGVyIGRlYnVnZ2luZykuICBPbmx5IHVzZWQgYnkgRnJlZVR5cGUgZGV2ZWxvcGVycy4KKyMKK2lmICQoREVCVUdfSElOVEVSKQoreworICBTdWJJbmNsdWRlIEZUMl9UT1AgdGVzdHMgOworfQorCitydWxlIFJlZkRvYworeworICBEZXBlbmRzICAkMSA6IGFsbCA7CisgIE5vdEZpbGUgICQxIDsKKyAgQWx3YXlzICAgJDEgOworfQorCithY3Rpb25zIFJlZkRvYworeworICBweXRob24gJChGVDJfU1JDKS90b29scy9kb2NtYWtlci9kb2NtYWtlci5weSAtLXByZWZpeD1mdDIgLS10aXRsZT1GcmVlVHlwZS0yLjYgLS1vdXRwdXQ9JChET0NfRElSKSAkKEZUMl9JTkNMVURFKS8qLmggJChGVDJfSU5DTFVERSkvY29uZmlnLyouaAorfQorCitSZWZEb2MgIHJlZmRvYyA7CisKKworIyBlbmQgb2YgdG9wIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9KYW1ydWxlcyBiL2ZyZWV0eXBlLTIuNi9KYW1ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQxOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L0phbXJ1bGVzCkBAIC0wLDAgKzEsNzEgQEAKKyMgRnJlZVR5cGUgMiBKYW1SdWxlcy4KKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEphbSBydWxlcyBuZWVkZWQgdG8gYnVpbGQgdGhlIEZyZWVUeXBlIDIgbGlicmFyeS4KKyMgSXQgaXMgc2hhcmVkIGJ5IGFsbCBKYW1maWxlcyBhbmQgaXMgaW5jbHVkZWQgb25seSBvbmNlIGluIHRoZSBidWlsZAorIyBwcm9jZXNzLgorIworCisKKyMgQ2FsbCBTdWJEaXJIZHJzIG9uIGEgbGlzdCBvZiBkaXJlY3Rvcmllcy4KKyMKK3J1bGUgQWRkU3ViRGlySGRycworeworICBsb2NhbCB4IDsKKworICBmb3IgeCBpbiAkKDwpCisgIHsKKyAgICBTdWJEaXJIZHJzICQoeCkgOworICB9Cit9CisKKworIyBEZXRlcm1pbmUgcHJlZml4IG9mIGxpYnJhcnkgZmlsZS4gIFdlIG11c3QgdXNlICJsaWJ4eHh4eCIgb24gVW5peCBzeXN0ZW1zLAorIyB3aGlsZSBhbGwgb3RoZXIgc2ltcGx5IHVzZSB0aGUgcmVhbCBuYW1lLgorIworaWYgJChVTklYKQoreworICBMSUJQUkVGSVggPz0gbGliIDsKK30KK2Vsc2UKK3sKKyAgTElCUFJFRklYID89ICIiIDsKK30KKworIyBGVDJfVE9QIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgRnJlZVR5cGUgc291cmNlIGRpcmVjdG9yeS4gIFlvdSBjYW4KKyMgc2V0IGl0IHRvIGEgc3BlY2lmaWMgdmFsdWUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgbGlicmFyeSBhcyBwYXJ0IG9mIGEKKyMgbGFyZ2VyIHByb2plY3QuCisjCitGVDJfVE9QID89ICQoRE9UKSA7CisKKyMgRGVmaW5lIGEgbmV3IHJ1bGUgdXNlZCB0byBkZWNsYXJlIGEgc3ViIGRpcmVjdG9yeSBvZiB0aGUgTmlydmFuYSBzb3VyY2UKKyMgdHJlZS4KKyMKK3J1bGUgRlQyX1N1YkRpcgoreworICBpZiAkKEZUMl9UT1ApID0gJChET1QpCisgIHsKKyAgICByZXR1cm4gWyBGRGlyTmFtZSAgJCg8KSBdIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gWyBGRGlyTmFtZSAgJChGVDJfVE9QKSAkKDwpIF0gOworICB9Cit9CisKKyMgV2UgYWxzbyBzZXQgQUxMX0xPQ0FURV9UQVJHRVQgaW4gb3JkZXIgdG8gcGxhY2UgYWxsIG9iamVjdCBhbmQgbGlicmFyeQorIyBmaWxlcyBpbiAib2JqcyIuCisjCitBTExfTE9DQVRFX1RBUkdFVCA/PSBbIEZUMl9TdWJEaXIgIG9ianMgXSA7CisKKworIyBlbmQgb2YgSmFtcnVsZXMKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9NYWtlZmlsZSBiL2ZyZWV0eXBlLTIuNi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA3YjBiCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L01ha2VmaWxlCkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgRnJlZVR5cGUgMiBidWlsZCBzeXN0ZW0gLS0gdG9wLWxldmVsIE1ha2VmaWxlCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIFByb2plY3QgbmFtZXMKKyMKK1BST0pFQ1QgICAgICAgOj0gZnJlZXR5cGUKK1BST0pFQ1RfVElUTEUgOj0gRnJlZVR5cGUKKworIyBUaGUgdmFyaWFibGUgVE9QX0RJUiBob2xkcyB0aGUgcGF0aCB0byB0aGUgdG9wbW9zdCBkaXJlY3RvcnkgaW4gdGhlIHByb2plY3QKKyMgZW5naW5lIHNvdXJjZSBoaWVyYXJjaHkuICBJZiBpdCBpcyBub3QgZGVmaW5lZCwgZGVmYXVsdCBpdCB0byBgLicuCisjCitUT1BfRElSID89IC4KKworIyBUaGUgdmFyaWFibGUgT0JKX0RJUiBnaXZlcyB0aGUgbG9jYXRpb24gd2hlcmUgb2JqZWN0IGZpbGVzIGFuZCB0aGUKKyMgRnJlZVR5cGUgbGlicmFyeSBhcmUgYnVpbHQuCisjCitPQkpfRElSID89ICQoVE9QX0RJUikvb2JqcworCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvdG9wbGV2ZWwubWsKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9SRUFETUUgYi9mcmVldHlwZS0yLjYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjA3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvUkVBRE1FCkBAIC0wLDAgKzEsODMgQEAKKyAgRnJlZVR5cGUgMi42CisgID09PT09PT09PT09PQorCisgIEhvbWVwYWdlOiBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZworCisgIEZyZWVUeXBlIGlzIGEgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0d2FyZSBsaWJyYXJ5IHRvIHJlbmRlciBmb250cy4KKworICBJdCAgaXMgIHdyaXR0ZW4gIGluICBDLCAgZGVzaWduZWQgdG8gIGJlICBzbWFsbCwgIGVmZmljaWVudCwgIGhpZ2hseQorICBjdXN0b21pemFibGUsIGFuZCAgcG9ydGFibGUgd2hpbGUgY2FwYWJsZSBvZiAgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eQorICBvdXRwdXQgIChnbHlwaCAgaW1hZ2VzKSBvZiAgbW9zdCAgdmVjdG9yICBhbmQgYml0bWFwICBmb250ICBmb3JtYXRzLgorCisgIFBsZWFzZSAgIHJlYWQgICB0aGUgIGRvY3MvQ0hBTkdFUyAgIGZpbGUsICAgaXQgIGNvbnRhaW5zICAgSU1QT1JUQU5UCisgIElORk9STUFUSU9OLgorCisgIFJlYWQgdGhlICBmaWxlcyBgZG9jcy9JTlNUQUxMKicgIGZvciBpbnN0YWxsYXRpb24gIGluc3RydWN0aW9uczsgc2VlCisgIHRoZSBmaWxlIGBkb2NzL0xJQ0VOU0UuVFhUJyBmb3IgdGhlIGF2YWlsYWJsZSBsaWNlbnNlcy4KKworICBUaGUgRnJlZVR5cGUgMiBBUEkgcmVmZXJlbmNlIGlzIGxvY2F0ZWQgaW4gYGRvY3MvcmVmZXJlbmNlJzsgdXNlIHRoZQorICBmaWxlICAgYGZ0Mi10b2MuaHRtbCcgICBhcyAgIHRoZSAgIHRvcCAgZW50cnkgICBwb2ludC4gICAgQWRkaXRpb25hbAorICBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIHBhY2thZ2UgZnJvbSBvdXIgc2l0ZXMuICBHbworICB0bworCisgICAgaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvZnJlZXR5cGUvCisKKyAgYW5kIGRvd25sb2FkIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpbGVzLgorCisgICAgZnJlZXR5cGUtZG9jLTIuNi50YXIuYnoyCisgICAgZnJlZXR5cGUtZG9jLTIuNi50YXIuZ3oKKyAgICBmdGRvYzI2LnppcAorCisgIFRvIHZpZXcgdGhlIGRvY3VtZW50YXRpb24gb25saW5lLCBnbyB0bworCisgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL2RvY3VtZW50YXRpb24uaHRtbAorCisKKyAgTWFpbGluZyBMaXN0cworICA9PT09PT09PT09PT09CisKKyAgVGhlIHByZWZlcnJlZCB3YXkgIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgRnJlZVR5cGUgIHRlYW0gaXMgdXNpbmcKKyAgZS1tYWlsIGxpc3RzLgorCisgICAgZ2VuZXJhbCB1c2UgYW5kIGRpc2N1c3Npb246ICAgICAgZnJlZXR5cGVAbm9uZ251Lm9yZworICAgIGVuZ2luZSBpbnRlcm5hbHMsIHBvcnRpbmcsIGV0Yy46IGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKyAgICBhbm5vdW5jZW1lbnRzOiAgICAgICAgICAgICAgICAgICBmcmVldHlwZS1hbm5vdW5jZUBub25nbnUub3JnCisKKyAgVGhlIGxpc3RzIGFyZSBtb2RlcmF0ZWQ7IHNlZQorCisgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvY29udGFjdC5odG1sCisKKyAgaG93IHRvIHN1YnNjcmliZS4KKworCisgIEJ1Z3MKKyAgPT09PQorCisgIFBsZWFzZSBzdWJtaXQgYnVnIHJlcG9ydHMgYXQKKworICAgIGh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZQorCisgIEFsdGVybmF0aXZlbHksICAgIHlvdSAgIG1pZ2h0ICAgIHJlcG9ydCAgICBidWdzICAgIGJ5ICAgZS1tYWlsICAgIHRvCisgIGBmcmVldHlwZS1kZXZlbEBub25nbnUub3JnJy4gICBEb24ndCAgZm9yZ2V0ICAgdG8gIHNlbmQgIGEgIGRldGFpbGVkCisgIGV4cGxhbmF0aW9uIG9mIHRoZSBwcm9ibGVtIC0tICB0aGVyZSBpcyBub3RoaW5nIHdvcnNlIHRoYW4gcmVjZWl2aW5nCisgIGEgdGVyc2UgbWVzc2FnZSB0aGF0IG9ubHkgc2F5cyBgaXQgZG9lc24ndCB3b3JrJy4KKworCisgIEVuam95IQorCisKKyAgICBUaGUgRnJlZVR5cGUgVGVhbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA2LTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLAorbW9kaWZpZWQsICBhbmQgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgdGVybXMgb2YgIHRoZSAgRnJlZVR5cGUgcHJvamVjdAorbGljZW5zZSwgIExJQ0VOU0UuVFhULiAgQnkgIGNvbnRpbnVpbmcgdG8gIHVzZSwgbW9kaWZ5LCAgb3IgZGlzdHJpYnV0ZQordGhpcyBmaWxlIHlvdSAgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkICB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZAorYW5kIGFjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIFJFQURNRSAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9SRUFETUUuZ2l0IGIvZnJlZXR5cGUtMi42L1JFQURNRS5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1MGU3OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9SRUFETUUuZ2l0CkBAIC0wLDAgKzEsNTAgQEAKK1RoZSBnaXQgIGFyY2hpdmUgZG9lc24ndCAgY29udGFpbiBwcmUtYnVpbHQgY29uZmlndXJhdGlvbiAgc2NyaXB0cyBmb3IKK1VOSVhpc2ggcGxhdGZvcm1zLiAgVG8gZ2VuZXJhdGUgdGhlbSBzYXkKKworICBzaCBhdXRvZ2VuLnNoCisKK3doaWNoIGluIHR1cm4gZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOgorCisgIGF1dG9tYWtlICgxLjEwLjEpCisgIGxpYnRvb2wgKDIuMi40KQorICBhdXRvY29uZiAoMi42MikKKworVGhlIHZlcnNpb25zIGdpdmVuICBpbiBwYXJlbnRoZXNlcyBhcmUga25vd24gdG8gIHdvcmsuICBOZXdlciB2ZXJzaW9ucworc2hvdWxkIHdvcmsgdG9vLCBvZiBjb3Vyc2UuICAgTm90ZSB0aGF0IGF1dG9nZW4uc2ggYWxzbyBzZXRzIHVwIHByb3BlcgorZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGBjb25maWd1cmUnIGFuZCBhdXhpbGlhcnkgc2NyaXB0cy4KKworVGhlIGF1dG9nZW4uc2ggc2NyaXB0ICBub3cgY2hlY2tzIHRoZSB2ZXJzaW9uIG9mICBhYm92ZSB0aHJlZSBwYWNrYWdlcword2hldGhlciB0aGV5IG1hdGNoIHRoZSBudW1iZXJzICBhYm92ZS4gIE90aGVyd2lzZSBpdCB3aWxsIGNvbXBsYWluIGFuZAorc3VnZ2VzdCBlaXRoZXIgdXBncmFkaW5nIG9yIHVzaW5nICBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludCB0bworYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSByZXF1aXJlZCB0b29sKHMpLgorCitOb3RlIHRoYXQgIGBhY2xvY2FsJyBpcyBwcm92aWRlZCAgYnkgdGhlIGBhdXRvbWFrZScgcGFja2FnZSAgb24gTGludXgsCithbmQgdGhhdCBgbGlidG9vbGl6ZScgaXMgY2FsbGVkIGBnbGlidG9vbGl6ZScgb24gRGFyd2luIChPUyBYKS4KKworCitGb3Igc3RhdGljIGJ1aWxkcyB3aGljaCAgZG9uJ3QgdXNlIHBsYXRmb3JtIHNwZWNpZmljIG9wdGltaXphdGlvbnMsIG5vCitjb25maWd1cmUgc2NyaXB0IGlzIG5lY2Vzc2FyeSBhdCBhbGw7IHNheWluZworCisgIG1ha2Ugc2V0dXAgYW5zaQorICBtYWtlCisKK3Nob3VsZCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSBHTlUgbWFrZSAob3IgbWFrZXBwKS4KKworCitTaW1pbGFybHksIGEgIGJ1aWxkIHdpdGggIGBjbWFrZScgY2FuICBiZSBkb25lICBkaXJlY3RseSBmcm9tICB0aGUgZ2l0CityZXBvc2l0b3J5LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDUtMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCittb2RpZmllZCwgIGFuZCBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICB0ZXJtcyBvZiAgdGhlICBGcmVlVHlwZSBwcm9qZWN0CitsaWNlbnNlLCAgTElDRU5TRS5UWFQuICBCeSAgY29udGludWluZyB0byAgdXNlLCBtb2RpZnksICBvciBkaXN0cmlidXRlCit0aGlzIGZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kCithbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgUkVBRE1FLmdpdCAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9hdXRvZ2VuLnNoIGIvZnJlZXR5cGUtMi42L2F1dG9nZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTcyOWFmNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9hdXRvZ2VuLnNoCkBAIC0wLDAgKzEsMTY2IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworcnVuICgpCit7CisgIGVjaG8gInJ1bm5pbmcgXGAkKiciCisgIGV2YWwgJCoKKworICBpZiB0ZXN0ICQ/ICE9IDAgOyB0aGVuCisgICAgZWNobyAiZXJyb3Igd2hpbGUgcnVubmluZyBcYCQqJyIKKyAgICBleGl0IDEKKyAgZmkKK30KKworZ2V0X21ham9yX3ZlcnNpb24gKCkKK3sKKyAgZWNobyAkMSB8IHNlZCAtZSAncy9cKFswLTldWzAtOV0qXClcLi4qL1wxL2cnCit9CisKK2dldF9taW5vcl92ZXJzaW9uICgpCit7CisgIGVjaG8gJDEgfCBzZWQgLWUgJ3MvWzAtOV1bMC05XSpcLlwoWzAtOV1bMC05XSpcKS4qL1wxL2cnCit9CisKK2dldF9wYXRjaF92ZXJzaW9uICgpCit7CisgICMgdHJpY2t5OiBzb21lIHZlcnNpb24gbnVtYmVycyBkb24ndCBpbmNsdWRlIGEgcGF0Y2gKKyAgIyBzZXBhcmF0ZWQgd2l0aCBhIHBvaW50LCBidXQgc29tZXRoaW5nIGxpa2UgMS40LXA2CisgIHBhdGNoPWBlY2hvICQxIHwgc2VkIC1lICdzL1swLTldWzAtOV0qXC5bMC05XVswLTldKlwuXChbMC05XVswLTldKlwpLiovXDEvZydgCisgIGlmIHRlc3QgIiRwYXRjaCIgPSAiJDEiOyB0aGVuCisgICAgcGF0Y2g9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXC1wXChbMC05XVswLTldKlwpLiovXDEvZydgCisgICAgIyBpZiB0aGVyZSBpc24ndCBhbnkgcGF0Y2ggbnVtYmVyLCBkZWZhdWx0IHRvIDAKKyAgICBpZiB0ZXN0ICIkcGF0Y2giID0gIiQxIjsgdGhlbgorICAgICAgcGF0Y2g9MAorICAgIGZpCisgIGZpCisgIGVjaG8gJHBhdGNoCit9CisKKyMgJDE6IHZlcnNpb24gdG8gY2hlY2sKKyMgJDI6IG1pbmltdW0gdmVyc2lvbgorCitjb21wYXJlX3RvX21pbmltdW1fdmVyc2lvbiAoKQoreworICBNQUpPUjE9YGdldF9tYWpvcl92ZXJzaW9uICQxYAorICBNQUpPUjI9YGdldF9tYWpvcl92ZXJzaW9uICQyYAorICBpZiB0ZXN0ICRNQUpPUjEgLWx0ICRNQUpPUjI7IHRoZW4KKyAgICBlY2hvIDAKKyAgICByZXR1cm4KKyAgZWxzZQorICAgIGlmIHRlc3QgJE1BSk9SMSAtZ3QgJE1BSk9SMjsgdGhlbgorICAgICAgZWNobyAxCisgICAgICByZXR1cm4KKyAgICBmaQorICBmaQorCisgIE1JTk9SMT1gZ2V0X21pbm9yX3ZlcnNpb24gJDFgCisgIE1JTk9SMj1gZ2V0X21pbm9yX3ZlcnNpb24gJDJgCisgIGlmIHRlc3QgJE1JTk9SMSAtbHQgJE1JTk9SMjsgdGhlbgorICAgIGVjaG8gMAorICAgIHJldHVybgorICBlbHNlCisgICAgaWYgdGVzdCAkTUlOT1IxIC1ndCAkTUlOT1IyOyB0aGVuCisgICAgICBlY2hvIDEKKyAgICAgIHJldHVybgorICAgIGZpCisgIGZpCisKKyAgUEFUQ0gxPWBnZXRfcGF0Y2hfdmVyc2lvbiAkMWAKKyAgUEFUQ0gyPWBnZXRfcGF0Y2hfdmVyc2lvbiAkMmAKKyAgaWYgdGVzdCAkUEFUQ0gxIC1sdCAkUEFUQ0gyOyB0aGVuCisgICAgZWNobyAwCisgIGVsc2UKKyAgICBlY2hvIDEKKyAgZmkKK30KKworIyBjaGVjayB0aGUgdmVyc2lvbiBvZiBhIGdpdmVuIHRvb2wgYWdhaW5zdCBhIG1pbmltdW0gdmVyc2lvbiBudW1iZXIKKyMKKyMgJDE6IHRvb2wgcGF0aAorIyAkMjogdG9vbCB1c3VhbCBuYW1lIChlLmcuIGBhY2xvY2FsJykKKyMgJDM6IHRvb2wgdmFyaWFibGUgIChlLmcuIGBBQ0xPQ0FMJykKKyMgJDQ6IG1pbmltdW0gdmVyc2lvbiB0byBjaGVjayBhZ2FpbnN0CisjICQ1OiBvcHRpb24gZmllbGQgaW5kZXggdXNlZCB0byBleHRyYWN0IHRoZSB0b29sIHZlcnNpb24gZnJvbSB0aGUKKyMgICAgIG91dHB1dCBvZiAtLXZlcnNpb24KKworY2hlY2tfdG9vbF92ZXJzaW9uICgpCit7CisgIGZpZWxkPSQ1CisgICMgYXNzdW1lIHRoZSBvdXRwdXQgb2YgIltUT09MXSAtLXZlcnNpb24iIGlzICJ0b29sbmFtZSAoR05VIHRvb2xuYW1lIGZvbyBiYXIpIHZlcnNpb24iCisgIGlmIHRlc3QgIiRmaWVsZCJ4ID0geDsgdGhlbgorICAgIGZpZWxkPTMgICMgZGVmYXVsdCB0byAzIGZvciBhbGwgR05VIGF1dG90b29scywgYWZ0ZXIgZmlsdGVyaW5nIGVuY2xvc2VkIHN0cmluZworICBmaQorICB2ZXJzaW9uPWAkMSAtLXZlcnNpb24gfCBoZWFkIC0xIHwgc2VkICdzLyhbXildKikvKCkvZycgfCBjdXQgLWQgJyAnIC1mICRmaWVsZGAKKyAgdmVyc2lvbl9jaGVjaz1gY29tcGFyZV90b19taW5pbXVtX3ZlcnNpb24gJHZlcnNpb24gJDRgCisgIGlmIHRlc3QgIiR2ZXJzaW9uX2NoZWNrInggPSAweDsgdGhlbgorICAgIGVjaG8gIkVSUk9SOiBZb3VyIHZlcnNpb24gb2YgdGhlIFxgJDInIHRvb2wgaXMgdG9vIG9sZC4iCisgICAgZWNobyAiICAgICAgIE1pbmltdW0gdmVyc2lvbiAkNCBpcyByZXF1aXJlZCAoeW91cnMgaXMgdmVyc2lvbiAkdmVyc2lvbikuIgorICAgIGVjaG8gIiAgICAgICBQbGVhc2UgdXBncmFkZSBvciB1c2UgdGhlICQzIHZhcmlhYmxlIHRvIHBvaW50IHRvIGEgbW9yZSByZWNlbnQgb25lLiIKKyAgICBlY2hvICIiCisgICAgZXhpdCAxCisgIGZpCit9CisKK2lmIHRlc3QgISAtZiAuL2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc7IHRoZW4KKyAgZWNobyAiWW91IG11c3QgYmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIFxgYXV0b2dlbi5zaCcuIgorICBlY2hvICJCb290c3RyYXBwaW5nIGRvZXNuJ3Qgd29yayBpZiBzcmNkaXIgIT0gYnVpbGRkaXIuIgorICBleGl0IDEKK2ZpCisKKyMgT24gTWFjT1MgWCwgdGhlIEdOVSBsaWJ0b29sIGlzIG5hbWVkIGBnbGlidG9vbCcuCitIT1NUT1M9YHVuYW1lYAoraWYgdGVzdCAiJExJQlRPT0xJWkUieCAhPSB4OyB0aGVuCisgIDoKK2VsaWYgdGVzdCAiJEhPU1RPUyJ4ID0gRGFyd2lueDsgdGhlbgorICBMSUJUT09MSVpFPWdsaWJ0b29saXplCitlbHNlCisgIExJQlRPT0xJWkU9bGlidG9vbGl6ZQorZmkKKworaWYgdGVzdCAiJEFDTE9DQUwieCA9IHg7IHRoZW4KKyAgQUNMT0NBTD1hY2xvY2FsCitmaQorCitpZiB0ZXN0ICIkQVVUT0NPTkYieCA9IHg7IHRoZW4KKyAgQVVUT0NPTkY9YXV0b2NvbmYKK2ZpCisKK2NoZWNrX3Rvb2xfdmVyc2lvbiAkQUNMT0NBTCAgICBhY2xvY2FsICAgIEFDTE9DQUwgICAgMS4xMC4xCitjaGVja190b29sX3ZlcnNpb24gJExJQlRPT0xJWkUgbGlidG9vbGl6ZSBMSUJUT09MSVpFIDIuMi40CitjaGVja190b29sX3ZlcnNpb24gJEFVVE9DT05GICAgYXV0b2NvbmYgICBBVVRPQ09ORiAgIDIuNjIKKworIyBUaGlzIHNldHMgZnJlZXR5cGVfbWFqb3IsIGZyZWV0eXBlX21pbm9yLCBhbmQgZnJlZXR5cGVfcGF0Y2guCitldmFsIGBzZWQgLW5mIHZlcnNpb24uc2VkIGluY2x1ZGUvZnJlZXR5cGUuaGAKKworIyBXZSBzZXQgZnJlZXR5cGUtcGF0Y2ggdG8gYW4gZW1wdHkgdmFsdWUgaWYgaXQgaXMgemVyby4KK2lmIHRlc3QgIiRmcmVldHlwZV9wYXRjaCIgPSAiLjAiOyB0aGVuCisgIGZyZWV0eXBlX3BhdGNoPQorZmkKKworY2QgYnVpbGRzL3VuaXgKKworZWNobyAiZ2VuZXJhdGluZyBcYGNvbmZpZ3VyZS5hYyciCitzZWQgLWUgInM7QFZFUlNJT05AOyRmcmVldHlwZV9tYWpvciRmcmVldHlwZV9taW5vciRmcmVldHlwZV9wYXRjaDsiIFwKKyAgPCBjb25maWd1cmUucmF3ID4gY29uZmlndXJlLmFjCisKK3J1biBhY2xvY2FsIC1JIC4gLS1mb3JjZQorcnVuICRMSUJUT09MSVpFIC0tZm9yY2UgLS1jb3B5IC0taW5zdGFsbAorcnVuIGF1dG9jb25mIC0tZm9yY2UKKworY2htb2QgK3ggbWtpbnN0YWxsZGlycworY2htb2QgK3ggaW5zdGFsbC1zaAorCitjZCAuLi8uLgorCitjaG1vZCAreCAuL2NvbmZpZ3VyZQorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9SRUFETUUgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTY4YjEwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9SRUFETUUKQEAgLTAsMCArMSwxMDkgQEAKKworUkVBRE1FIGZvciB0aGUgYnVpbGRzL2FtaWdhIHN1YmRpcmVjdG9yeS4KKworQ29weXJpZ2h0IDIwMDUtMjAxNSBieQorV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKK2luZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CitmdWxseS4KKworCitUaGUgbWFrZWZpbGUub3M0IGlzIGZvciB0aGUgQW1pZ2FPUzQgU0RLLiAgVG8gdXNlIGl0LCB0eXBlCisibWFrZSAtZiBtYWtlZmlsZS5vczQiLCBpdCBwcm9kdWNlcyBhIGxpbmsgbGlicmFyeSBsaWJmdDJfcHBjLmEuCisKK1RoZSBtYWtlZmlsZSBpcyBmb3IgcHBjLW1vcnBob3MtZ2NjLTIuOTUuMy1iaW4udGd6IChnY2MgMi45NS4zIGhvc3RlZCBvbgorNjhrLUFtaWdhIHByb2R1Y2luZyBNb3JwaE9TLVBQQy1iaW5hcmllcyBmcm9tIGh0dHA6Ly93d3cubW9ycGhvcy5kZSkuCitUbyB1c2UgaXQsIHR5cGUgIm1ha2UgYXNzaWduIiwgdGhlbiAibWFrZSI7IGl0IHByb2R1Y2VzIGEgbGluayBsaWJyYXJ5CitsaWJmdDJfcHBjLmEuCisKK1RoZSBzbWFrZWZpbGUgaXMgYSBtYWtlZmlsZSBmb3IgQW1pZ2EgU0FTL0MgNi41OCAobm8gbG9uZ2VyIGF2YWlsYWJsZSwKK2xhdGVzdCBzb2xkIHZlcnNpb24gd2FzIDYuNTAsIHVwZGF0ZXMgY2FuIGJlIGZvdW5kIGluIEFtaW5ldCkuICBJdCBpcworYmFzZWQgb24gdGhlIHZlcnNpb24gZm91bmQgaW4gdGhlIHNvdXJjZWNvZGUgb2YgdHRmLmxpYnJhcnkgMC44M2IgZm9yCitGcmVlVHlwZSAxLjMuMSBmcm9tIFJpY2hhcmQgR3JpZmZpdGggKHJhZ3JpZmZpQHNwcnluZXQuY29tLAoraHR0cDovL3JhZ3JpZmZpLmhvbWUuc3ByeW5ldC5jb20pLgorCitZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIGxhdGVzdCBpbmNsdWRlIGZpbGVzIGFuZCBhbWlnYS5saWIgZnJvbSB0aGUKK0FtaWdhIHdlYiBzaXRlIChodHRwOi8vd3d3LmFtaWdhLmNvbS8zLjkvZG93bmxvYWQvTkRLMy45LmxoYSkgZm9yCitBbWlnYU9TIDMuOTsgdGhlIGdlbmVyYXRlZCBjb2RlIHNob3VsZCB3b3JrIHVuZGVyIEFtaWdhT1MgMi4wNCBhbmQgdXAuCisKK1RvIHVzZSBpdCwgY2FsbCAic21ha2UgYXNzaWduIiBhbmQgdGhlbiAic21ha2UiIGZyb20gdGhlIGJ1aWxkcy9hbWlnYQorZGlyZWN0b3J5LiAgVGhlIHJlc3VsdHMgYXJlOgorCistIEEgbGluayBsaWJyYXJ5ICJmdDJfNjgweDAubGliIiAod2hlcmUgeCBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mCisgIHRoZSBDUFUgZW50cnkgaW4gdGhlIHNtYWtlZmlsZSkgY29udGFpbmluZyBhbGwgRnJlZVR5cGUyIHBhcnRzCisgIGV4Y2VwdCBvZiB0aGUgaW5pdCBjb2RlLCBkZWJ1Z2dpbmcgY29kZSwgYW5kIHRoZSBzeXN0ZW0gaW50ZXJmYWNlCisgIGNvZGUuCisKKy0gZnRzeXN0ZW0ubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQorICBzeXN0ZW0gaW50ZXJmYWNlIGNvZGUgd2hpY2ggdXNlcyBmb3BlbigpIGZjbG9zZSgpIGZyZWFkKCkgZnNlZWsoKQorICBmdGVsbCgpIG1hbGxvYygpIHJlYWxsb2MoKSBhbmQgZnJlZSgpIGZyb20gbGliOnNjLmxpYiAobm90IHB1cmUpLgorCistIGZ0c3lzdGVtcHVyZS5vLCBhbiBvYmplY3QgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIHB1cmUgdmVyc2lvbiBvZiB0aGUKKyAgc3lzdGVtIGludGVyZmFjZSBjb2RlIHdoaWNoIHVzZXMgT3BlbigpIENsb3NlKCkgUmVhZCgpIFNlZWsoKQorICBFeGFtaW5lRkgoKSBBc21BbGxvY1Bvb2xlZCgpIEFzbUZyZWVQb29sZWQoKSBldGMuICBUaGlzIHZlcnNpb24gY2FuCisgIGJlIHVzZWQgaW4gYm90aCBub3JtYWwgcHJvZ3JhbXMgYW5kIGluIEFtaWdhIHJ1bi10aW1lIHNoYXJlZCBzeXN0ZW0KKyAgbGlicmFyeXMgKGNhbiBiZSBsaW5rZWQgd2l0aCBsaWI6bGliaW5pdC5vLCBubyBjb3B5aW5nIG9mIERBVEEgYW5kCisgIEJTUyBodW5rcyBmb3IgZWFjaCBPcGVuTGlicmFyeSgpIG5lY2Vzc2FyeSkuICBTb3VyY2UgY29kZSBpcyBpbgorICBzcmMvYmFzZS9mdHN5c3RlbS5jLgorCistIGZ0ZGVidWcubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZQorICBkZWJ1Z2dpbmcgY29kZSB3aGljaCB1c2VzIHZwcmludGYoKSBhbmQgZXhpdCgpIChub3QgcHVyZSkuCisgIERlYnVnZ2luZyBjYW4gYmUgdHVybmVkIG9uIGluIEZUOmluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmggYW5kIHdpdGgKKyAgRlRfU2V0VHJhY2VMZXZlbCgpLgorCistIGZ0ZGVidWdwdXJlLm8sIGFuIG9iamVjdCBtb2R1bGUgY29udGFpbmluZyB0aGUgcHVyZSB2ZXJzaW9uIG9mIHRoZQorICBkZWJ1Z2dpbmcgY29kZSB3aGljaCB1c2VzIEtWUHJpbnRmKCkgZnJvbSBsaWI6ZGVidWcubGliIGFuZCBubworICBleGl0KCkuICBGb3IgZGVidWdnaW5nIG9mIEFtaWdhIHJ1bi10aW1lIHNoYXJlZCBzeXN0ZW0gbGlicmFyaWVzLgorICBTb3VyY2UgY29kZSBpcyBpbiBzcmMvYmFzZS9mdGRlYnVnLmMuCisKKy0gTk8gZnRpbml0Lm8uICBCZWNhdXNlIGxpbmtpbmcgd2l0aCBhIGxpbmsgbGlicmFyeSBzaG91bGQgcmVzdWx0IGluCisgIGxpbmtpbmcgb25seSB0aGUgbmVlZGVkIG9iamVjdCBtb2R1bGVzIGluIGl0LCBidXQgc3RhbmRhcmQKKyAgZnRzeXN0ZW0ubyB3b3VsZCBmb3JjZSBBTEwgRnJlZVR5cGUyIG1vZHVsZXMgdG8gYmUgbGlua2VkIHRvIHlvdXIKKyAgcHJvZ3JhbSwgSSBkZWNpZGVkIHRvIHVzZSBhIGRpZmZlcmVudCBzY2hlbWU6IFlvdSBtdXN0ICNpbmNsdWRlCisgIEZUOnNyYy9iYXNlL2Z0aW5pdC5jIGluIHlvdXIgc291cmNlY29kZSBhbmQgc3BlY2lmeSB3aXRoICNkZWZpbmUKKyAgc3RhdGVtZW50cyB3aGljaCBtb2R1bGVzIHlvdSBuZWVkLiAgU2VlIGluY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmguCisKKworVG8gdXNlIGluIHlvdXIgb3duIHByb2dyYW1zOgorCistIEluc2VydCB0aGUgI2RlZmluZSBhbmQgI2luY2x1ZGUgc3RhdGVtZW50cyBmcm9tIHRvcCBvZgorICBpbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oIGluIHlvdXIgc291cmNlIGNvZGUgYW5kIHVuY29tbWVudCB0aGUKKyAgI2RlZmluZSBzdGF0ZW1lbnRzIGZvciB0aGUgRnJlZVR5cGUyIG1vZHVsZXMgeW91IG5lZWQuCisKKy0gWW91IGNhbiB1c2UgZWl0aGVyIFBBUkFNRVRFUlM9UkVHSVNURVIgb3IgUEFSQU1FVEVSUz1TVEFDSyBmb3IKKyAgY2FsbGluZyB0aGUgRnJlZVR5cGUyIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGUgbGluayBsaWJyYXJ5IGFuZCB0aGUKKyAgb2JqZWN0IGZpbGVzIGFyZSBjb21waWxlZCB3aXRoIFBBUkFNRVRFUlM9Qk9USC4KKworLSAic21ha2UgYXNzaWduIiAoYXNzaWduICJGVDoiIHRvIHRoZSBGcmVlVHlwZTIgbWFpbiBkaXJlY3RvcnkpLgorCistIENvbXBpbGUgeW91ciBwcm9ncmFtLgorCistIExpbmsgd2l0aCBlaXRoZXIgZnRzeXN0ZW0ubyBvciBmdHN5c3RlbXB1cmUubywgaWYgZGVidWdnaW5nIGVuYWJsZWQKKyAgd2l0aCBlaXRoZXIgZnRkZWJ1Zy5vIG9yIChmdGRlYnVncHVyZS5vIGFuZCBsaWI6ZGVidWcubGliKSwgYW5kIHdpdGgKKyAgZnQyXzY4MHgwLmxpYiBhcyBsaW5rIGxpYnJhcnkuCisKKworVG8gYWRhcHQgdG8gb3RoZXIgY29tcGlsZXJzOgorCistIFRoZSBzdGFuZGFyZCBBTlNJIEMgbWF4aW11bSBsZW5ndGggb2YgMzEgc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBpbgorICBpZGVudGlmaWVycyBpcyBub3QgZW5vdWdoIGZvciBGcmVlVHlwZTIuICBDaGVjayBpZiB5b3VyIGNvbXBpbGVyIGhhcworICBhIG1pbmltdW0gbGVuZ3RoIG9mIDQwIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgb3IgY2FuIGJlIHN3aXRjaGVkIHRvCisgIGl0LiAgImlkbGVuPTQwIiBpcyB0aGUgb3B0aW9uIGZvciBTQVMvQy4gIFNldHRpbmcgI2RlZmluZQorICBIQVZFX0xJTUlUX09OX0lERU5UUyBpbiBhbiBpbmNsdWRlIGZpbGUgbWF5IGFsc28gd29yayAobm90IHRlc3RlZCkuCisKKy0gTWFrZSBzdXJlIHRoYXQgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IGluIGJ1aWxkcy9hbWlnYSBpcyBzZWFyY2hlZAorICBiZWZvcmUgdGhlIG5vcm1hbCBGcmVlVHlwZTIgaW5jbHVkZSBkaXJlY3RvcnksIHNvIHlvdSBhcmUgYWJsZSB0bworICByZXBsYWNlIHByb2JsZW1hdGljIGluY2x1ZGUgZmlsZXMgd2l0aCB5b3VyIG93biB2ZXJzaW9uIChzYW1lIG1heSBiZQorICB1c2VmdWwgZm9yIHRoZSBzcmMgZGlyZWN0b3J5KS4KKworLSBBbiBleGFtcGxlIG9mIGhvdyB0byByZXBsYWNlL3dvcmthcm91bmQgYSBwcm9ibGVtYXRpYyBpbmNsdWRlIGZpbGUKKyAgaXMgaW5jbHVkZS9jb25maWcvZnRjb25maWcuaDsgaXQgY2hhbmdlcyBhICNkZWZpbmUgdGhhdCB3b3VsZAorICBwcmV2ZW50IFNBUy9DIGZyb20gZ2VuZXJhdGluZyBYREVGJ3Mgd2hlcmUgaXQgc2hvdWxkIGRvIHRoYXQgYW5kCisgIHRoZW4gaW5jbHVkZXMgdGhlIHN0YW5kYXJkIEZyZWVUeXBlMiBpbmNsdWRlIGZpbGUuCisKK0xvY2FsIFZhcmlhYmxlczoKK2NvZGluZzogbGF0aW4tMQorRW5kOgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGVlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFtaWdhLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBob3cgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgRnJlZVR5cGUyIGhlYWRlciBmaWxlcworICogd2l0aCBBbWlnYS1zcGVjaWZpYyBjaGFuZ2VzLiBXaGVuIHRoZSBjb21waWxlciBzZWFyY2hlcyB0aGlzIGRpcmVjdG9yeQorICogYmVmb3JlIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSwgd2UgY2FuIGRvIHNvbWUgbW9kaWZpY2F0aW9ucy4KKyAqCisgKiBIZXJlIHdlIG11c3QgY2hhbmdlIEZUX0VYUE9SVF9ERUYgc28gdGhhdCBTQVMvQyBkb2VzCisgKiBnZW5lcmF0ZSB0aGUgbmVlZGVkIFhERUZzLgorICovCisKKyNpZiAwCisjZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICB4CisjZW5kaWYKKworI3VuZGVmIEZUX0VYUE9SVF9ERUYKKyNkZWZpbmUgRlRfRVhQT1JUX0RFRiggeCApICB4CisKKy8qIE5vdyBpbmNsdWRlIHRoZSBvcmlnaW5hbCBmaWxlICovCisjaWZuZGVmIF9fTU9SUEhPU19fCisjaWZkZWYgX19TQVNDCisjaW5jbHVkZSAiRlQ6aW5jbHVkZS9jb25maWcvZnRjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSAiL0ZUL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgiCisjZW5kaWYKKyNlbHNlCisvKiBXZSBtdXN0IGRlZmluZSB0aGF0LCBpdCBzZWVtcyB0aGF0CisgKiBsaWIvZ2NjLWxpYi9wcGMtbW9ycGhvcy8yLjk1LjMvaW5jbHVkZS9zeXNsaW1pdHMuaCBpcyBtaXNzaW5nIGluCisgKiBwcGMtbW9ycGhvcy1nY2MtMi45NS4zLWJpbi50Z3ogKGdjYyBmb3IgNjhrIHByb2R1Y2luZyBNb3JwaE9TIFBQQyBlbGYKKyAqIGJpbmFyaWVzIGZyb20gaHR0cDovL3d3dy5tb3JwaG9zLmRlKQorICovCisjZGVmaW5lIF9MSUJDX0xJTUlUU19IXworI2luY2x1ZGUgIi9GVC9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oIgorI2VuZGlmCisKKy8qCitMb2NhbCBWYXJpYWJsZXM6Citjb2Rpbmc6IGxhdGluLTEKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmggYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhNjZkYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW1pZ2EvaW5jbHVkZS9jb25maWcvZnRtb2R1bGUuaApAQCAtMCwwICsxLDE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRtb2R1bGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFtaWdhLXNwZWNpZmljIEZyZWVUeXBlIG1vZHVsZSBzZWxlY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRvIGF2b2lkIHRoYXQgYWxsIHlvdXIgcHJvZ3JhbXMgaW5jbHVkZSBhbGwgRnJlZVR5cGUgbW9kdWxlcywKKyAqIHlvdSBjb3B5IHRoZSBmb2xsb3dpbmcgcGllY2Ugb2Ygc291cmNlIGNvZGUgaW50byB5b3VyIG93bgorICogc291cmNlIGZpbGUgYW5kIHNwZWNpZnkgd2hpY2ggbW9kdWxlcyB5b3UgcmVhbGx5IG5lZWQgaW4geW91cgorICogYXBwbGljYXRpb24gYnkgdW5jb21tZW50aW5nIHRoZSBhcHByb3ByaWF0ZSBsaW5lcy4KKyAqLworLyoKKy8vI2RlZmluZSBGVF9VU0VfQVVUT0ZJVCAvLyBhdXRvZml0dGVyCisvLyNkZWZpbmUgRlRfVVNFX1JBU1RFUiAgLy8gbW9ub2Nocm9tZSByYXN0ZXJpemVyCisvLyNkZWZpbmUgRlRfVVNFX1NNT09USCAgLy8gYW50aS1hbGlhc2luZyByYXN0ZXJpemVyCisvLyNkZWZpbmUgRlRfVVNFX1RUICAgICAgLy8gdHJ1ZXR5cGUgZm9udCBkcml2ZXIKKy8vI2RlZmluZSBGVF9VU0VfVDEgICAgICAvLyB0eXBlMSBmb250IGRyaXZlcgorLy8jZGVmaW5lIEZUX1VTRV9UNDIgICAgIC8vIHR5cGU0MiBmb250IGRyaXZlcgorLy8jZGVmaW5lIEZUX1VTRV9UMUNJRCAgIC8vIGNpZC1rZXllZCB0eXBlMSBmb250IGRyaXZlciAgLy8gbm8gY21hcCBzdXBwb3J0CisvLyNkZWZpbmUgRlRfVVNFX0NGRiAgICAgLy8gb3BlbnR5cGUgZm9udCBkcml2ZXIKKy8vI2RlZmluZSBGVF9VU0VfQkRGICAgICAvLyBiZGYgYml0bWFwIGZvbnQgZHJpdmVyCisvLyNkZWZpbmUgRlRfVVNFX1BDRiAgICAgLy8gcGNmIGJpdG1hcCBmb250IGRyaXZlcgorLy8jZGVmaW5lIEZUX1VTRV9QRlIgICAgIC8vIHBmciBmb250IGRyaXZlcgorLy8jZGVmaW5lIEZUX1VTRV9XSU5GTlQgIC8vIHdpbmRvd3MgLmZudHwuZm9uIGJpdG1hcCBmb250IGRyaXZlcgorLy8jZGVmaW5lIEZUX1VTRV9PVFYgICAgIC8vIG9wZW50eXBlIHZhbGlkYXRvcgorLy8jZGVmaW5lIEZUX1VTRV9HWFYgICAgIC8vIHRydWV0eXBlIGd4IHZhbGlkYXRvcgorI2luY2x1ZGUgIkZUOnNyYy9iYXNlL2Z0aW5pdC5jIgorKi8KKworLyogTWFrZSBzdXJlIHRoYXQgdGhlIG5lZWRlZCBzdXBwb3J0IG1vZHVsZXMgYXJlIGJ1aWx0IGluLgorICogRGVwZW5kZW5jaWVzIGNhbiBiZSBmb3VuZCBieSBzZWFyY2hpbmcgZm9yIEZUX0dldF9Nb2R1bGUuCisgKi8KKworI2lmZGVmIEZUX1VTRV9UNDIKKyNkZWZpbmUgRlRfVVNFX1RUCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9UVAorI2RlZmluZSBGVF9VU0VfU0ZOVAorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfQ0ZGCisjZGVmaW5lIEZUX1VTRV9TRk5UCisjZGVmaW5lIEZUX1VTRV9QU0hJTlQKKyNkZWZpbmUgRlRfVVNFX1BTTkFNRVMKKyNlbmRpZgorCisjaWZkZWYgRlRfVVNFX1QxCisjZGVmaW5lIEZUX1VTRV9QU0FVWAorI2RlZmluZSBGVF9VU0VfUFNISU5UCisjZGVmaW5lIEZUX1VTRV9QU05BTUVTCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9UMUNJRAorI2RlZmluZSBGVF9VU0VfUFNBVVgKKyNkZWZpbmUgRlRfVVNFX1BTSElOVAorI2RlZmluZSBGVF9VU0VfUFNOQU1FUworI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfUFNBVVgKKyNkZWZpbmUgRlRfVVNFX1BTTkFNRVMKKyNlbmRpZgorCisjaWZkZWYgRlRfVVNFX1NGTlQKKyNkZWZpbmUgRlRfVVNFX1BTTkFNRVMKKyNlbmRpZgorCisvKiBOb3cgaW5jbHVkZSB0aGUgbW9kdWxlcyAqLworCisjaWZkZWYgRlRfVVNFX0FVVE9GSVQKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgYXV0b2ZpdF9tb2R1bGVfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfVFQKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdHRfZHJpdmVyX2NsYXNzICkKKyNlbmRpZgorCisjaWZkZWYgRlRfVVNFX1QxCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHQxX2RyaXZlcl9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9DRkYKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgY2ZmX2RyaXZlcl9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9UMUNJRAorRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0MWNpZF9kcml2ZXJfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfUEZSCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBmcl9kcml2ZXJfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfVDQyCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHQ0Ml9kcml2ZXJfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfV0lORk5UCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHdpbmZudF9kcml2ZXJfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfUENGCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBjZl9kcml2ZXJfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfUFNBVVgKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgcHNhdXhfbW9kdWxlX2NsYXNzICkKKyNlbmRpZgorCisjaWZkZWYgRlRfVVNFX1BTTkFNRVMKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgcHNuYW1lc19tb2R1bGVfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfUFNISU5UCitGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHBzaGludGVyX21vZHVsZV9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9SQVNURVIKK0ZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzICkKKyNlbmRpZgorCisjaWZkZWYgRlRfVVNFX1NGTlQKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgc2ZudF9tb2R1bGVfY2xhc3MgKQorI2VuZGlmCisKKyNpZmRlZiBGVF9VU0VfU01PT1RICitGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9PVFYKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgb3R2X21vZHVsZV9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9CREYKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgYmRmX2RyaXZlcl9jbGFzcyApCisjZW5kaWYKKworI2lmZGVmIEZUX1VTRV9HWFYKK0ZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgZ3h2X21vZHVsZV9jbGFzcyApCisjZW5kaWYKKworLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvZGluZzogbGF0aW4tMQorRW5kOgorKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW1pZ2EvbWFrZWZpbGUgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjQ1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL21ha2VmaWxlCkBAIC0wLDAgKzEsMjk5IEBACisjCisjIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIHBwYy1tb3JwaG9zLWdjYy0yLjk1LjMtYmluLnRnegorIyAoZ2NjIDIuOTUuMyBob3N0ZWQgb24gNjhrLUFtaWdhIHByb2R1Y2luZyBNb3JwaE9TLVBQQy1iaW5hcmllcyBmcm9tCisjIGh0dHA6Ly93d3cubW9ycGhvcy5kZSkKKyMKKworCisjIENvcHlyaWdodCAyMDA1LTIwMTUgYnkKKyMgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMKKyMgdG8gYnVpbGQgZnJvbSB0aGUgYnVpbGRzL2FtaWdhIGRpcmVjdG9yeSBjYWxsCisjCisjICBtYWtlIGFzc2lnbgorIyAgbWFrZQorIworIyBZb3VyIHByb2dyYW1zIHNvdXJjZSBjb2RlIHNob3VsZCBzdGFydCB3aXRoIHRoaXMKKyMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgorIyAtLS04PC0tLQorI2RlZmluZSBGVF9VU0VfQVVUT0ZJVCAvLyBhdXRvZml0dGVyCisjZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgorI2RlZmluZSBGVF9VU0VfU01PT1RIICAvLyBhbnRpLWFsaWFzaW5nIHJhc3Rlcml6ZXIKKyNkZWZpbmUgRlRfVVNFX1RUICAgICAgLy8gdHJ1ZXR5cGUgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1Q0MiAgICAgLy8gdHlwZTQyIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9UMUNJRCAgIC8vIGNpZC1rZXllZCB0eXBlMSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfQkRGICAgICAvLyBiZGYgYml0bWFwIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9QQ0YgICAgIC8vIHBjZiBiaXRtYXAgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9XSU5GTlQgIC8vIHdpbmRvd3MgLmZudHwuZm9uIGJpdG1hcCBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfT1RWICAgICAvLyBvcGVudHlwZSB2YWxpZGF0b3IKKyNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCisjaW5jbHVkZSAiRlQ6c3JjL2Jhc2UvZnRpbml0LmMiCisjIC0tLTg8LS0tCisjCisjIGxpbmsgeW91ciBwcm9ncmFtcyB3aXRoIGxpYmZ0Ml9wcGMuYSBhbmQgZWl0aGVyIGZ0c3lzdGVtLnBwYy5vIG9yIGZ0c3lzdGVtcHVyZS5wcGMubworIyAoYW5kIGVpdGhlciBmdGRlYnVnLnBwYy5vIG9yIGZ0ZGVidWdwdXJlLnBwYy5vIGlmIHlvdSBlbmFibGVkIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yCisjIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgpLgorCithbGw6CWxpYmZ0Ml9wcGMuYSBmdHN5c3RlbS5wcGMubyBmdHN5c3RlbXB1cmUucHBjLm8KKworYXNzaWduOgorCWFzc2lnbiBGVDogLy8KKworRlRTUkMgPSAvRlQvc3JjCisKK0NDID0gICAgIHBwYy1tb3JwaG9zLWdjYworQVIgPSAgICAgcHBjLW1vcnBob3MtYXIgcmMKK1JBTkxJQiA9IHBwYy1tb3JwaG9zLXJhbmxpYgorTEQgPSAgICAgcHBjLW1vcnBob3MtbGQKK0NGTEFHUyA9IC1ERlQyX0JVSUxEX0xJQlJBUlkgLU8yIC1JL2VtdS9lbXVsaW5jbHVkZS9pbmNsdWRlZ2NjIC1JL2VtdS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQoRlRTUkMpIC1JL0ZUL2luY2x1ZGUKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBiYXNlCisjCitmdGJhc2UucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRiYXNlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRpbml0LnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0aW5pdC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0c3lzdGVtLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0c3lzdGVtLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YworZnRzeXN0ZW1wdXJlLnBwYy5vOiBzcmMvYmFzZS9mdHN5c3RlbS5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0ZGVidWcucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRkZWJ1Zy5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKK2Z0ZGVidWdwdXJlLnBwYy5vOiBzcmMvYmFzZS9mdGRlYnVnLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBiYXNlIGV4dGVuc2lvbnMKKyMKK2Z0YmJveC5wcGMubzogJChGVFNSQykvYmFzZS9mdGJib3guYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCitmdGJkZi5wcGMubzogJChGVFNSQykvYmFzZS9mdGJkZi5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0Yml0bWFwLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0Yml0bWFwLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRjaWQucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRjaWQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCitmdGZudGZtdC5wcGMubzogJChGVFNSQykvYmFzZS9mdGZudGZtdC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0ZnN0eXBlLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0ZnN0eXBlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRnYXNwLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0Z2FzcC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0Z2x5cGgucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRnbHlwaC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0Z3h2YWwucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRneHZhbC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0bGNkZmlsLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0bGNkZmlsLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRtbS5wcGMubzogJChGVFNSQykvYmFzZS9mdG1tLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRvdHZhbC5wcGMubzogJChGVFNSQykvYmFzZS9mdG90dmFsLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRwYXRlbnQucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRwYXRlbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCitmdHBmci5wcGMubzogJChGVFNSQykvYmFzZS9mdHBmci5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKK2Z0c3Ryb2tlLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0c3Ryb2tlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnRzeW50aC5wcGMubzogJChGVFNSQykvYmFzZS9mdHN5bnRoLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnR0eXBlMS5wcGMubzogJChGVFNSQykvYmFzZS9mdHR5cGUxLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworZnR3aW5mbnQucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnR3aW5mbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IGF1dG9maXR0aW5nIG1vZHVsZQorIworYXV0b2ZpdC5wcGMubzogJChGVFNSQykvYXV0b2ZpdC9hdXRvZml0LmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBwb3N0c2NyaXB0IGhpbnRpbmcgbW9kdWxlCisjCitwc2hpbnRlci5wcGMubzogJChGVFNSQykvcHNoaW50ZXIvcHNoaW50ZXIuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFBTIHN1cHBvcnQgbW9kdWxlCisjCitwc2F1eC5wcGMubzogJChGVFNSQykvcHNhdXgvcHNhdXguYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFBTIGdseXBoIG5hbWVzIG1vZHVsZQorIworcHNuYW1lcy5wcGMubzogJChGVFNSQykvcHNuYW1lcy9wc25hbWVzLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBtb25vY2hyb21lIHJhc3RlciBtb2R1bGUKKyMKK3Jhc3Rlci5wcGMubzogJChGVFNSQykvcmFzdGVyL3Jhc3Rlci5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgYW50aS1hbGlhc2luZyByYXN0ZXIgbW9kdWxlCisjCitzbW9vdGgucHBjLm86ICQoRlRTUkMpL3Ntb290aC9zbW9vdGguYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5ICdzZm50JyBtb2R1bGUKKyMKK3NmbnQucHBjLm86ICQoRlRTUkMpL3NmbnQvc2ZudC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgZ2x5cGggYW5kIGltYWdlIGNhY2hpbmcgc3lzdGVtCisjCitmdGNhY2hlLnBwYy5vOiAkKEZUU1JDKS9jYWNoZS9mdGNhY2hlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBPcGVuVHlwZSBmb250IGRyaXZlcgorIworY2ZmLnBwYy5vOiAkKEZUU1JDKS9jZmYvY2ZmLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBUcnVlVHlwZSBmb250IGRyaXZlcgorIwordHJ1ZXR5cGUucHBjLm86ICQoRlRTUkMpL3RydWV0eXBlL3RydWV0eXBlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlMSBmb250IGRyaXZlcgorIwordHlwZTEucHBjLm86ICQoRlRTUkMpL3R5cGUxL3R5cGUxLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlNDIgZm9udCBkcml2ZXIKKyMKK3R5cGU0Mi5wcGMubzogJChGVFNSQykvdHlwZTQyL3R5cGU0Mi5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyCisjCit0eXBlMWNpZC5wcGMubzogJChGVFNSQykvY2lkL3R5cGUxY2lkLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBCREYgYml0bWFwIGZvbnQgZHJpdmVyCisjCitiZGYucHBjLm86ICQoRlRTUkMpL2JkZi9iZGYuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFBDRiBiaXRtYXAgZm9udCBkcml2ZXIKKyMKK3BjZi5wcGMubzogJChGVFNSQykvcGNmL3BjZi5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgZ3ppcCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2d6aXAucHBjLm86ICQoRlRTUkMpL2d6aXAvZnRnemlwLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIyBGcmVlVHlwZTIgbGlicmFyeSBiemlwMiBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2J6aXAyLnBwYy5vOiAkKEZUU1JDKS9iemlwMi9mdGJ6aXAyLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBjb21wcmVzcyBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2x6dy5wcGMubzogJChGVFNSQykvbHp3L2Z0bHp3LmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKKyMKK3Bmci5wcGMubzogJChGVFNSQykvcGZyL3Bmci5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgV2luZG93cyBGTlQvRk9OIGJpdG1hcCBmb250IGRyaXZlcgorIword2luZm50LnBwYy5vOiAkKEZUU1JDKS93aW5mb250cy93aW5mbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFRydWVUeXBlR1ggVmFsaWRhdG9yCisjCitneHZhbGlkLnBwYy5vOiAkKEZUU1JDKS9neHZhbGlkL2d4dmFsaWQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgorIworb3R2YWxpZC5wcGMubzogJChGVFNSQykvb3R2YWxpZC9vdHZhbGlkLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKKworQkFTRVBQQyA9IGZ0YmFzZS5wcGMubyBmdGJib3gucHBjLm8gZnRiZGYucHBjLm8gZnRiaXRtYXAucHBjLm8gZnRjaWQucHBjLm8gXAorCSAgZnRmbnRmbXQucHBjLm9mdGZzdHlwZS5wcGMubyBmdGdhc3AucHBjLm8gZnRnbHlwaC5wcGMubyAgICAgICAgICBcCisJICBmdGd4dmFsLnBwYy5vIGZ0bGNkZmlsLnBwYy5vIGZ0bW0ucHBjLm8gZnRvdHZhbC5wcGMubyAgICAgICAgICAgIFwKKwkgIGZ0cGF0ZW50LnBwYy5vIGZ0cGZyLnBwYy5vIGZ0c3Ryb2tlLnBwYy5vIGZ0c3ludGgucHBjLm8gICAgICAgICAgXAorCSAgZnR0eXBlMS5wcGMubyBmdHdpbmZudC5wcGMubworCitERUJVR1BQQyA9IGZ0ZGVidWcucHBjLm8gZnRkZWJ1Z3B1cmUucHBjLm8KKworQUZJVFBQQyA9IGF1dG9maXQucHBjLm8KKworR1hWUFBDID0gZ3h2YWxpZC5wcGMubworCitPVFZQUEMgPSBvdHZhbGlkLnBwYy5vCisKK1BTUFBDID0gcHNhdXgucHBjLm8gcHNuYW1lcy5wcGMubyBwc2hpbnRlci5wcGMubworCitSQVNURVJQUEMgPSByYXN0ZXIucHBjLm8gc21vb3RoLnBwYy5vCisKK0ZPTlREUFBDID0gY2ZmLnBwYy5vIHR5cGUxLnBwYy5vIHR5cGU0Mi5wcGMubyB0eXBlMWNpZC5wcGMubyB0cnVldHlwZS5wcGMub1wKKwkgICBiZGYucHBjLm8gcGNmLnBwYy5vIHBmci5wcGMubyB3aW5mbnQucHBjLm8KKworbGliZnQyX3BwYy5hOiAgICAkKEJBU0VQUEMpICQoQUZJVFBQQykgJChHWFZQUEMpICQoT1RWUFBDKSAkKFBTUFBDKSAkKFJBU1RFUlBQQykgc2ZudC5wcGMubyBmdGNhY2hlLnBwYy5vICQoRk9OVERQUEMpIGd6aXAucHBjLm8gYnppcDIucHBjLm8gbHp3LnBwYy5vCisJJChBUikgJEAgJChCQVNFUFBDKSAkKEFGSVRQUEMpICQoR1hWUFBDKSAkKE9UVlBQQykgJChQU1BQQykgJChSQVNURVJQUEMpIHNmbnQucHBjLm8gZnRjYWNoZS5wcGMubyAkKEZPTlREUFBDKSBnemlwLnBwYy5vIGJ6aXAyLnBwYy5vIGx6dy5wcGMubworCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCisKKyNMb2NhbCBWYXJpYWJsZXM6CisjY29kaW5nOiBsYXRpbi0xCisjRW5kOgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL21ha2VmaWxlLm9zNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODFmZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQKQEAgLTAsMCArMSwzMDMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIEZyZWVUeXBlMiBsaW5rIGxpYnJhcnkgdXNpbmcgZ2NjIDQuMC4zIGZyb20gdGhlCisjIEFtaWdhT1M0IFNESworIworCisKKyMgQ29weXJpZ2h0IDIwMDUtMjAxNSBieQorIyBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyB0byBidWlsZCBmcm9tIHRoZSBidWlsZHMvYW1pZ2EgZGlyZWN0b3J5IGNhbGwKKyMKKyMgIG1ha2UgLWYgbWFrZWZpbGUub3M0CisjCisjIFlvdXIgcHJvZ3JhbXMgc291cmNlIGNvZGUgc2hvdWxkIHN0YXJ0IHdpdGggdGhpcworIyAodW5jb21tZW50IHRoZSBwYXJ0cyB5b3UgZG8gbm90IG5lZWQgdG8ga2VlcCB0aGUgcHJvZ3JhbSBzbWFsbCk6CisjIC0tLTg8LS0tCisjZGVmaW5lIEZUX1VTRV9BVVRPRklUIC8vIGF1dG9maXR0ZXIKKyNkZWZpbmUgRlRfVVNFX1JBU1RFUiAgLy8gbW9ub2Nocm9tZSByYXN0ZXJpemVyCisjZGVmaW5lIEZUX1VTRV9TTU9PVEggIC8vIGFudGktYWxpYXNpbmcgcmFzdGVyaXplcgorI2RlZmluZSBGVF9VU0VfVFQgICAgICAvLyB0cnVldHlwZSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfVDEgICAgICAvLyB0eXBlMSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfVDQyICAgICAvLyB0eXBlNDIgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1QxQ0lEICAgLy8gY2lkLWtleWVkIHR5cGUxIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9DRkYgICAgIC8vIG9wZW50eXBlIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9CREYgICAgIC8vIGJkZiBiaXRtYXAgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1BDRiAgICAgLy8gcGNmIGJpdG1hcCBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfUEZSICAgICAvLyBwZnIgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1dJTkZOVCAgLy8gd2luZG93cyAuZm50fC5mb24gYml0bWFwIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9PVFYgICAgIC8vIG9wZW50eXBlIHZhbGlkYXRvcgorI2RlZmluZSBGVF9VU0VfR1hWICAgICAvLyB0cnVldHlwZSBneCB2YWxpZGF0b3IKKyNpbmNsdWRlICJGVDpzcmMvYmFzZS9mdGluaXQuYyIKKyMgLS0tODwtLS0KKyMKKyMgbGluayB5b3VyIHByb2dyYW1zIHdpdGggbGliZnQyX3BwYy5hIGFuZCBlaXRoZXIgZnRzeXN0ZW0ucHBjLm8gb3IgZnRzeXN0ZW1wdXJlLnBwYy5vCisjIChhbmQgZWl0aGVyIGZ0ZGVidWcucHBjLm8gb3IgZnRkZWJ1Z3B1cmUucHBjLm8gaWYgeW91IGVuYWJsZWQgRlRfREVCVUdfTEVWRUxfRVJST1Igb3IKKyMgRlRfREVCVUdfTEVWRUxfVFJBQ0UgaW4gaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaCkuCisKK2FsbDoJYXNzaWduIGxpYmZ0Ml9wcGMuYSBmdHN5c3RlbS5wcGMubyBmdHN5c3RlbXB1cmUucHBjLm8KKworYXNzaWduOgorCWFzc2lnbiBGVDogLy8KKworQ0MgPSAgICAgcHBjLWFtaWdhb3MtZ2NjCitBUiA9ICAgICBwcGMtYW1pZ2Fvcy1hcgorUkFOTElCID0gcHBjLWFtaWdhb3MtcmFubGliCisKK0RJUkZMQUdTICA9IC1JaW5jbHVkZSAtSS9GVC9zcmMgLUkvRlQvaW5jbHVkZSAtSS9TREsvaW5jbHVkZQorCitXQVJOSU5HUyA9IC1XYWxsIC1XIC1XdW5kZWYgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgXAorCSAgIC1XYWdncmVnYXRlLXJldHVybiAtV3dyaXRlLXN0cmluZ3MgLVdzaGFkb3cKKworT1BUSU9OUyAgPSAtREZUMl9CVUlMRF9MSUJSQVJZIC1ETkRFQlVHIC1mbm8tYnVpbHRpbgorT1BUSU1JWkUgPSAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZpbmxpbmUtZnVuY3Rpb25zCisKK0NGTEFHUyAgID0gLW1jcnQ9Y2xpYjIgJChESVJGTEFHUykgJChXQVJOSU5HUykgJChGVDJGTEFHUykgJChPUFRJT05TKSAkKE9QVElNSVpFKQorCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IGJhc2UKKyMKK2Z0YmFzZS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRiYXNlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0YmFzZS5jCisKK2Z0aW5pdC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRpbml0LmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0aW5pdC5jCisKK2Z0c3lzdGVtLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHN5c3RlbS5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdHN5c3RlbS5jCisKKyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKK2Z0c3lzdGVtcHVyZS5wcGMubzogc3JjL2Jhc2UvZnRzeXN0ZW0uYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCBzcmMvYmFzZS9mdHN5c3RlbS5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgYmFzZSBleHRlbnNpb25zCisjCitmdGJib3gucHBjLm86IEZUOnNyYy9iYXNlL2Z0YmJveC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGJib3guYworCitmdGJkZi5wcGMubzogRlQ6c3JjL2Jhc2UvZnRiZGYuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiZGYuYworCitmdGJpdG1hcC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRiaXRtYXAuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiaXRtYXAuYworCitmdGNpZC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRjaWQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRjaWQuYworCitmdGRlYnVnLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGRlYnVnLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0ZGVidWcuYworCisjIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCitmdGRlYnVncHVyZS5wcGMubzogc3JjL2Jhc2UvZnRkZWJ1Zy5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIHNyYy9iYXNlL2Z0ZGVidWcuYworCitmdGZudGZtdC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRmbnRmbXQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRmbnRmbXQuYworCitmdGZzdHlwZS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRmc3R5cGUuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRmc3R5cGUuYworCitmdGdhc3AucHBjLm86IEZUOnNyYy9iYXNlL2Z0Z2FzcC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGdhc3AuYworCitmdGdseXBoLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGdseXBoLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0Z2x5cGguYworCitmdGd4dmFsLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGd4dmFsLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0Z3h2YWwuYworCitmdGxjZGZpbC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRsY2RmaWwuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRsY2RmaWwuYworCitmdG1tLnBwYy5vOiBGVDpzcmMvYmFzZS9mdG1tLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0bW0uYworCitmdG90dmFsLnBwYy5vOiBGVDpzcmMvYmFzZS9mdG90dmFsLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0b3R2YWwuYworCitmdHBhdGVudC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRwYXRlbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRwYXRlbnQuYworCitmdHBmci5wcGMubzogRlQ6c3JjL2Jhc2UvZnRwZnIuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRwZnIuYworCitmdHN0cm9rZS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRzdHJva2UuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRzdHJva2UuYworCitmdHN5bnRoLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHN5bnRoLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0c3ludGguYworCitmdHR5cGUxLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHR5cGUxLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0dHlwZTEuYworCitmdHdpbmZudC5wcGMubzogRlQ6c3JjL2Jhc2UvZnR3aW5mbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnR3aW5mbnQuYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IGF1dG9maXR0aW5nIG1vZHVsZQorIworYXV0b2ZpdC5wcGMubzogRlQ6c3JjL2F1dG9maXQvYXV0b2ZpdC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBwb3N0c2NyaXB0IGhpbnRpbmcgbW9kdWxlCisjCitwc2hpbnRlci5wcGMubzogRlQ6c3JjL3BzaGludGVyL3BzaGludGVyLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgUFMgc3VwcG9ydCBtb2R1bGUKKyMKK3BzYXV4LnBwYy5vOiBGVDpzcmMvcHNhdXgvcHNhdXguYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3BzYXV4L3BzYXV4LmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBQUyBnbHlwaCBuYW1lcyBtb2R1bGUKKyMKK3BzbmFtZXMucHBjLm86IEZUOnNyYy9wc25hbWVzL3BzbmFtZXMuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCisjCityYXN0ZXIucHBjLm86IEZUOnNyYy9yYXN0ZXIvcmFzdGVyLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9yYXN0ZXIvcmFzdGVyLmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBhbnRpLWFsaWFzaW5nIHJhc3RlciBtb2R1bGUKKyMKK3Ntb290aC5wcGMubzogRlQ6c3JjL3Ntb290aC9zbW9vdGguYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3Ntb290aC9zbW9vdGguYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5ICdzZm50JyBtb2R1bGUKKyMKK3NmbnQucHBjLm86IEZUOnNyYy9zZm50L3NmbnQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3NmbnQvc2ZudC5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgZ2x5cGggYW5kIGltYWdlIGNhY2hpbmcgc3lzdGVtCisjCitmdGNhY2hlLnBwYy5vOiBGVDpzcmMvY2FjaGUvZnRjYWNoZS5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvY2FjaGUvZnRjYWNoZS5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgT3BlblR5cGUgZm9udCBkcml2ZXIKKyMKK2NmZi5wcGMubzogRlQ6c3JjL2NmZi9jZmYuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2NmZi9jZmYuYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFRydWVUeXBlIGZvbnQgZHJpdmVyCisjCit0cnVldHlwZS5wcGMubzogRlQ6c3JjL3RydWV0eXBlL3RydWV0eXBlLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy90cnVldHlwZS90cnVldHlwZS5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKKyMKK3R5cGUxLnBwYy5vOiBGVDpzcmMvdHlwZTEvdHlwZTEuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3R5cGUxL3R5cGUxLmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlNDIgZm9udCBkcml2ZXIKKyMKK3R5cGU0Mi5wcGMubzogRlQ6c3JjL3R5cGU0Mi90eXBlNDIuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3R5cGU0Mi90eXBlNDIuYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IENJRC1rZXllZCBUeXBlMSBmb250IGRyaXZlcgorIwordHlwZTFjaWQucHBjLm86IEZUOnNyYy9jaWQvdHlwZTFjaWQuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2NpZC90eXBlMWNpZC5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgorIworYmRmLnBwYy5vOiBGVDpzcmMvYmRmL2JkZi5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmRmL2JkZi5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgUENGIGJpdG1hcCBmb250IGRyaXZlcgorIworcGNmLnBwYy5vOiBGVDpzcmMvcGNmL3BjZi5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvcGNmL3BjZi5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgZ3ppcCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2d6aXAucHBjLm86IEZUOnNyYy9nemlwL2Z0Z3ppcC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvZ3ppcC9mdGd6aXAuYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IGJ6aXAyIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cworIworYnppcDIucHBjLm86IEZUOnNyYy9iemlwMi9mdGJ6aXAyLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iemlwMi9mdGJ6aXAyLmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBjb21wcmVzcyBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2x6dy5wcGMubzogRlQ6c3JjL2x6dy9mdGx6dy5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvbHp3L2Z0bHp3LmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKKyMKK3Bmci5wcGMubzogRlQ6c3JjL3Bmci9wZnIuYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3Bmci9wZnIuYworCisjCisjIEZyZWVUeXBlMiBsaWJyYXJ5IFdpbmRvd3MgRk5UL0ZPTiBiaXRtYXAgZm9udCBkcml2ZXIKKyMKK3dpbmZudC5wcGMubzogRlQ6c3JjL3dpbmZvbnRzL3dpbmZudC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvd2luZm9udHMvd2luZm50LmMKKworIworIyBGcmVlVHlwZTIgbGlicmFyeSBUcnVlVHlwZUdYIFZhbGlkYXRvcgorIworZ3h2YWxpZC5wcGMubzogRlQ6c3JjL2d4dmFsaWQvZ3h2YWxpZC5jCisJJChDQykgLWMgJChDRkxBR1MpIC1Xbm8tYWdncmVnYXRlLXJldHVybiAtbyAkQCAvRlQvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgT3BlblR5cGUgdmFsaWRhdG9yCisjCitvdHZhbGlkLnBwYy5vOiBGVDpzcmMvb3R2YWxpZC9vdHZhbGlkLmMKKwkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9vdHZhbGlkL290dmFsaWQuYworCitCQVNFID0gZnRiYXNlLnBwYy5vIGZ0YmJveC5wcGMubyBmdGJkZi5wcGMubyBmdGJpdG1hcC5wcGMubyBmdGNpZC5wcGMubyBcCisgICAgICAgZnRmbnRmbXQucHBjLm8gZnRmc3R5cGUucHBjLm8gZnRnYXNwLnBwYy5vIGZ0Z2x5cGgucHBjLm8gICAgICAgICBcCisgICAgICAgZnRneHZhbC5wcGMubyBmdGxjZGZpbC5wcGMubyBmdG1tLnBwYy5vIGZ0b3R2YWwucHBjLm8gICAgICAgICAgICBcCisgICAgICAgZnRwYXRlbnQucHBjLm8gZnRwZnIucHBjLm8gZnRzdHJva2UucHBjLm8gZnRzeW50aC5wcGMubyAgICAgICAgICBcCisgICAgICAgZnR0eXBlMS5wcGMubyBmdHdpbmZudC5wcGMubworCitERUJVRyA9IGZ0ZGVidWcucHBjLm8gZnRkZWJ1Z3B1cmUucHBjLm8KKworQUZJVCA9IGF1dG9maXQucHBjLm8KKworR1hWID0gZ3h2YWxpZC5wcGMubworCitPVFYgPSBvdHZhbGlkLnBwYy5vCisKK1BTID0gcHNhdXgucHBjLm8gcHNuYW1lcy5wcGMubyBwc2hpbnRlci5wcGMubworCitSQVNURVIgPSByYXN0ZXIucHBjLm8gc21vb3RoLnBwYy5vCisKK0ZPTlREID0gY2ZmLnBwYy5vIHR5cGUxLnBwYy5vIHR5cGU0Mi5wcGMubyB0eXBlMWNpZC5wcGMubyB0cnVldHlwZS5wcGMub1wKKwliZGYucHBjLm8gcGNmLnBwYy5vIHBmci5wcGMubyB3aW5mbnQucHBjLm8KKworbGliZnQyX3BwYy5hOiAgICAgICQoQkFTRSkgJChBRklUKSAkKEdYVikgJChPVFYpICQoUFMpICQoUkFTVEVSKSBzZm50LnBwYy5vIGZ0Y2FjaGUucHBjLm8gJChGT05URCkgZ3ppcC5wcGMubyBsencucHBjLm8KKwkkKEFSKSByICRAICQoQkFTRSkgJChBRklUKSAkKEdYVikgJChPVFYpICQoUFMpICQoUkFTVEVSKSBzZm50LnBwYy5vIGZ0Y2FjaGUucHBjLm8gJChGT05URCkgZ3ppcC5wcGMubyBsencucHBjLm8KKwkkKFJBTkxJQikgJEAKKworI0xvY2FsIFZhcmlhYmxlczoKKyNjb2Rpbmc6IGxhdGluLTEKKyNFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZSBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW1pZ2Evc21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmJlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZQpAQCAtMCwwICsxLDMwMyBAQAorIworIyBNYWtlZmlsZSBmb3IgRnJlZVR5cGUyIGxpbmsgbGlicmFyeSB1c2luZyBBbWlnYSBTQVMvQyA2LjU4CisjCisKKworIyBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5CisjIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAorIworIyAgc21ha2UgYXNzaWduCisjICBzbWFrZQorIworIyBZb3VyIHByb2dyYW1zIHNvdXJjZSBjb2RlIHNob3VsZCBzdGFydCB3aXRoIHRoaXMKKyMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgorIyAtLS04PC0tLQorI2RlZmluZSBGVF9VU0VfQVVUT0ZJVCAvLyBhdXRvZml0dGVyCisjZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgorI2RlZmluZSBGVF9VU0VfU01PT1RIICAvLyBhbnRpLWFsaWFzaW5nIHJhc3Rlcml6ZXIKKyNkZWZpbmUgRlRfVVNFX1RUICAgICAgLy8gdHJ1ZXR5cGUgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1Q0MiAgICAgLy8gdHlwZTQyIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9UMUNJRCAgIC8vIGNpZC1rZXllZCB0eXBlMSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfQkRGICAgICAvLyBiZGYgYml0bWFwIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9QQ0YgICAgIC8vIHBjZiBiaXRtYXAgZm9udCBkcml2ZXIKKyNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCisjZGVmaW5lIEZUX1VTRV9XSU5GTlQgIC8vIHdpbmRvd3MgLmZudHwuZm9uIGJpdG1hcCBmb250IGRyaXZlcgorI2RlZmluZSBGVF9VU0VfT1RWICAgICAvLyBvcGVudHlwZSB2YWxpZGF0b3IKKyNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCisjaW5jbHVkZSAiRlQ6c3JjL2Jhc2UvZnRpbml0LmMiCisjIC0tLTg8LS0tCisjCisjIGxpbmsgeW91ciBwcm9ncmFtcyB3aXRoIGZ0Ml82ODB4MC5saWIgYW5kIGVpdGhlciBmdHN5c3RlbS5vIG9yIGZ0c3lzdGVtcHVyZS5vCisjIChhbmQgZWl0aGVyIGZ0ZGVidWcubyBvciBmdGRlYnVncHVyZS5vIGlmIHlvdSBlbmFibGVkIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yCisjIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgpLgorCitPQkpCQVNFID0gZnRiYXNlLm8gZnRiYm94Lm8gZnRiZGYubyBmdGJpdG1hcC5vIGZ0Y2lkLm8gZnRmbnRmbXQubyBmdGZzdHlwZS5vIFwKKwkgIGZ0Z2FzcC5vIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRsY2RmaWwubyBmdG1tLm8gZnRvdHZhbC5vICAgICAgICAgICBcCisJICBmdHBhdGVudC5vIGZ0cGZyLm8gZnRzdHJva2UubyBmdHN5bnRoLm8gZnR0eXBlMS5vIGZ0d2luZm50Lm8KKworT0JKU1lTVEVNID0gZnRzeXN0ZW0ubyBmdHN5c3RlbXB1cmUubworCitPQkpERUJVRyA9IGZ0ZGVidWcubyBmdGRlYnVncHVyZS5vCisKK09CSkFGSVQgPSBhdXRvZml0Lm8KKworT0JKR1hWID0gZ3h2YWxpZC5vCisKK09CSk9UViA9IG90dmFsaWQubworCitPQkpQUyA9IHBzYXV4Lm8gcHNuYW1lcy5vIHBzaGludGVyLm8KKworT0JKUkFTVEVSID0gcmFzdGVyLm8gc21vb3RoLm8KKworT0JKU0ZOVCA9IHNmbnQubworCitPQkpDQUNIRSA9IGZ0Y2FjaGUubworCitPQkpGT05URCA9IGNmZi5vIHR5cGUxLm8gdHlwZTQyLm8gdHlwZTFjaWQub1wKKwkgICB0cnVldHlwZS5vIHdpbmZudC5vIGJkZi5vIHBjZi5vIHBmci5vCisKK0NPUkUgPSBGVDpzcmMvCisKK0NQVSAgICAgICA9IDY4MDAwCisjQ1BVICAgICAgPSA2ODAyMAorI0NQVSAgICAgID0gNjgwMzAKKyNDUFUgICAgICA9IDY4MDQwCisjQ1BVICAgICAgPSA2ODA2MAorCitPUFRJTUlaRVIgPSBvcHRpbmxvY2FsCisKK1NDRkxBR1MgPSBvcHRpbWl6ZSBvcHR0aW1lIG9wdHNjaGVkIHN0cm1lcmdlIGRhdGE9ZmFyb25seSBpZGxlbj01MCBjcHU9JChDUFUpXAorCSAgaWRpcj1pbmNsdWRlLyBpZGlyPSQoQ09SRSkgaWRpcj1GVDppbmNsdWRlLyBub3N0YWNrY2hlY2sgbm9jaGthYm9ydFwKKwkgIG5vaWNvbnMgaWdub3JlPTc5LDg1LDExMCwzMDYgcGFyYW1ldGVycz1ib3RoIGRlZmluZT1GVDJfQlVJTERfTElCUkFSWQorCitMSUIgID0gZnQyXyQoQ1BVKS5saWIKKworIyBzYW1wbGUgbGlua2VyIG9wdGlvbnMKK09QVFMgPSBsaW5rIGxpYj0kKExJQiksbGliOnNjLmxpYixsaWI6YW1pZ2EubGliLGxpYjpkZWJ1Zy5saWJcCisgICAgICAgc21hbGxjb2RlIHNtYWxsZGF0YSBub2ljb25zIHV0aWxsaWIKKworIyBzYW1wbGUgcHJvZ3JhbSBlbnRyeQorI215cHJvZzogbXlwcm9nLmMgZnRzeXN0ZW0ubyAkKExJQikKKyMJc2MgJDwgcHJvZ3JhbW5hbWU9JEAgZnRzeXN0ZW0ubyAkKFNDRkxBR1MpICQoT1BUUykKKworYWxsOgkkKExJQikgJChPQkpTWVNURU0pICQoT0JKREVCVUcpCisKK2Fzc2lnbjoKKwlhc3NpZ24gRlQ6IC8vCisKKyMgdXNlcyBzZXBhcmF0ZSBvYmplY3QgbW9kdWxlcyBpbiBsaWIgdG8gbWFrZSBmb3IgZWFzaWVyIGRlYnVnZ2luZworIyBhbHNvLCBjYW4gbWFrZSBzbWFsbGVyIHByb2dyYW1zIGlmIGVudGlyZSBlbmdpbmUgaXMgbm90IHVzZWQKK2Z0Ml8kKENQVSkubGliOiAgJChPQkpCQVNFKSAkKE9CSkFGSVQpICQoT0JKT1RWKSAkKE9CSlBTKSAkKE9CSlJBU1RFUikgJChPQkpTRk5UKSAkKE9CSkNBQ0hFKSAkKE9CSkZPTlREKSBsencubyBnemlwLm8gYnppcDIubworCW9tbCAkQCByICQoT0JKQkFTRSkgJChPQkpBRklUKSAkKE9CSk9UVikgJChPQkpQUykgJChPQkpSQVNURVIpICQoT0JKU0ZOVCkgJChPQkpDQUNIRSkgJChPQkpGT05URCkgbHp3Lm8gZ3ppcC5vIGJ6aXAyLm8KKworY2xlYW46CisJLWRlbGV0ZSBcIz8ubworCityZWFsY2xlYW46IGNsZWFuCisJLWRlbGV0ZSBmdDIkKENQVSkubGliCisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBiYXNlCisjCitmdGJhc2UubzogJChDT1JFKWJhc2UvZnRiYXNlLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKK2Z0aW5pdC5vOiAkKENPUkUpYmFzZS9mdGluaXQuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRzeXN0ZW0ubzogJChDT1JFKWJhc2UvZnRzeXN0ZW0uYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRzeXN0ZW1wdXJlLm86IHNyYy9iYXNlL2Z0c3lzdGVtLmMJIyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKK2Z0ZGVidWcubzogJChDT1JFKWJhc2UvZnRkZWJ1Zy5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CitmdGRlYnVncHVyZS5vOiBzcmMvYmFzZS9mdGRlYnVnLmMJIyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBiYXNlIGV4dGVuc2lvbnMKKyMKK2Z0YmJveC5vOiAkKENPUkUpYmFzZS9mdGJib3guYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRiZGYubzogJChDT1JFKWJhc2UvZnRiZGYuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRiaXRtYXAubzogJChDT1JFKWJhc2UvZnRiaXRtYXAuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRjaWQubzogJChDT1JFKWJhc2UvZnRjaWQuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRmbnRmbXQubzogJChDT1JFKWJhc2UvZnRmbnRmbXQuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRmc3R5cGUubzogJChDT1JFKWJhc2UvZnRmc3R5cGUuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRnYXNwLm86ICQoQ09SRSliYXNlL2Z0Z2FzcC5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CitmdGdseXBoLm86ICQoQ09SRSliYXNlL2Z0Z2x5cGguYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRneHZhbC5vOiAkKENPUkUpYmFzZS9mdGd4dmFsLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKK2Z0bGNkZmlsLm86ICQoQ09SRSliYXNlL2Z0bGNkZmlsLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKK2Z0bW0ubzogJChDT1JFKWJhc2UvZnRtbS5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CitmdG90dmFsLm86ICQoQ09SRSliYXNlL2Z0b3R2YWwuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRwYXRlbnQubzogJChDT1JFKWJhc2UvZnRwYXRlbnQuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRwZnIubzogJChDT1JFKWJhc2UvZnRwZnIuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRzdHJva2UubzogJChDT1JFKWJhc2UvZnRzdHJva2UuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorZnRzeW50aC5vOiAkKENPUkUpYmFzZS9mdHN5bnRoLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKK2Z0dHlwZTEubzogJChDT1JFKWJhc2UvZnR0eXBlMS5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CitmdHdpbmZudC5vOiAkKENPUkUpYmFzZS9mdHdpbmZudC5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBhdXRvZml0dGVyIG1vZHVsZQorIworYXV0b2ZpdC5vOiAkKENPUkUpYXV0b2ZpdC9hdXRvZml0LmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworIworIyBmcmVldHlwZSBsaWJyYXJ5IFBTIGhpbnRpbmcgbW9kdWxlCisjCitwc2hpbnRlci5vOiAkKENPUkUpcHNoaW50ZXIvcHNoaW50ZXIuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorIworIyBmcmVldHlwZSBsaWJyYXJ5IFBTIHN1cHBvcnQgbW9kdWxlCisjCitwc2F1eC5vOiAkKENPUkUpcHNhdXgvcHNhdXguYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgUFMgZ2x5cGggbmFtZXMgbW9kdWxlCisjCitwc25hbWVzLm86ICQoQ09SRSlwc25hbWVzL3BzbmFtZXMuYworCXNjICQoU0NGTEFHUykgY29kZT1mYXIgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCisjCityYXN0ZXIubzogJChDT1JFKXJhc3Rlci9yYXN0ZXIuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgYW50aS1hbGlhc2luZyByYXN0ZXIgbW9kdWxlCisjCitzbW9vdGgubzogJChDT1JFKXNtb290aC9zbW9vdGguYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgJ3NmbnQnIG1vZHVsZQorIworc2ZudC5vOiAkKENPUkUpc2ZudC9zZm50LmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworIworIyBmcmVldHlwZSBsaWJyYXJ5IGdseXBoIGFuZCBpbWFnZSBjYWNoaW5nIHN5c3RlbSAoc3RpbGwgZXhwZXJpbWVudGFsKQorIworZnRjYWNoZS5vOiAkKENPUkUpY2FjaGUvZnRjYWNoZS5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBPcGVuVHlwZSBmb250IGRyaXZlcgorIworY2ZmLm86ICQoQ09SRSljZmYvY2ZmLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworIworIyBmcmVldHlwZSBsaWJyYXJ5IFRydWVUeXBlIGZvbnQgZHJpdmVyCisjCit0cnVldHlwZS5vOiAkKENPUkUpdHJ1ZXR5cGUvdHJ1ZXR5cGUuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKKyMKK3R5cGUxLm86ICQoQ09SRSl0eXBlMS90eXBlMS5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTQyIGZvbnQgZHJpdmVyCisjCit0eXBlNDIubzogJChDT1JFKXR5cGU0Mi90eXBlNDIuYworCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyCisjCit0eXBlMWNpZC5vOiAkKENPUkUpY2lkL3R5cGUxY2lkLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBDSUQta2V5ZWQgVHlwZTEgZm9udCBkcml2ZXIgZXh0ZW5zaW9ucworIworI2NpZGFmbS5vOiAkKENPUkUpY2lkL2NpZGFmbS5jCisjCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgorIworYmRmLm86ICQoQ09SRSliZGYvYmRmLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworIworIyBmcmVldHlwZSBsaWJyYXJ5IFBDRiBiaXRtYXAgZm9udCBkcml2ZXIKKyMKK3BjZi5vOiAkKENPUkUpcGNmL3BjZi5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBnemlwIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cworIworZ3ppcC5vOiAkKENPUkUpZ3ppcC9mdGd6aXAuYworCXNjICQoU0NGTEFHUykgZGVmaW5lIEZBUiBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBiemlwMiBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKKyMKK2J6aXAyLm86ICQoQ09SRSliemlwMi9mdGJ6aXAyLmMKKwlzYyAkKFNDRkxBR1MpIGRlZmluZSBGQVIgb2JqbmFtZT0kQCAkPAorCisjCisjIGZyZWV0eXBlIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCisjCitsencubzogJChDT1JFKWx6dy9mdGx6dy5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKKyMKK3Bmci5vOiAkKENPUkUpcGZyL3Bmci5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBXaW5kb3dzIEZOVC9GT04gYml0bWFwIGZvbnQgZHJpdmVyCisjCit3aW5mbnQubzogJChDT1JFKXdpbmZvbnRzL3dpbmZudC5jCisJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CisKKyMKKyMgZnJlZXR5cGUgbGlicmFyeSBUcnVlVHlwZUdYIHZhbGlkYXRvcgorIworZ3h2YWxpZC5vOiAkKENPUkUpZ3h2YWxpZC9neHZhbGlkLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworIworIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgorIworb3R2YWxpZC5vOiAkKENPUkUpb3R2YWxpZC9vdHZhbGlkLmMKKwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKKworI0xvY2FsIFZhcmlhYmxlczoKKyNjb2Rpbmc6IGxhdGluLTEKKyNFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MWE1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRkZWJ1Zy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIGFtaWdhIChib2R5KS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBjb21wb25lbnQgY29udGFpbnMgdmFyaW91cyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGVhc2UgdGhlICovCisgIC8qIGRlYnVnZ2luZyBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLiAgSXRzIG1haW4gcHVycG9zZSBpcyBpbiBhc3NlcnRpb24gICAqLworICAvKiBjaGVja2luZywgdHJhY2luZywgYW5kIGVycm9yIGRldGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZXJlIGFyZSBub3cgdGhyZWUgZGVidWdnaW5nIG1vZGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSB0cmFjZSBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEVycm9yIGFuZCB0cmFjZSBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgbG9nIGZpbGUgKHdoaWNoIGNhbiBiZSB0aGUgKi8KKyAgLyogICBzdGFuZGFyZCBlcnJvciBvdXRwdXQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIGVycm9yIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgT25seSBlcnJvciBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSByZWxlYXNlIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE5vIGVycm9yIG1lc3NhZ2UgaXMgc2VudCBvciBnZW5lcmF0ZWQuICBUaGUgY29kZSBpcyBmcmVlIGZyb20gYW55ICAgKi8KKyAgLyogICBkZWJ1Z2dpbmcgcGFydHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qCisgICAqIEJhc2VkIG9uIHRoZSBkZWZhdWx0IGZ0ZGVidWcuYywKKyAgICogcmVwbGFjZWQgdnByaW50ZigpIHdpdGggS1ZQcmludEYoKSwKKyAgICogY29tbWVudGVkIG91dCBleGl0KCksCisgICAqIHJlcGxhY2VkIGdldGVudigpIHdpdGggR2V0VmFyKCkuCisgICAqLworCisjaW5jbHVkZSA8ZXhlYy90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxpdHkvdGFnaXRlbS5oPgorI2luY2x1ZGUgPGRvcy9leGFsbC5oPgorI2luY2x1ZGUgPGRvcy92YXIuaD4KKyNkZWZpbmUgX19OT0xJQkJBU0VfXworI2RlZmluZSBfX05PTE9CQUxJRkFDRV9fCisjZGVmaW5lIF9fVVNFX0lOTElORV9fCisjaW5jbHVkZSA8cHJvdG8vZG9zLmg+CisjaW5jbHVkZSA8Y2xpYi9kZWJ1Z19wcm90b3MuaD4KKworI2lmbmRlZiBfX2FtaWdhb3M0X18KKyAgZXh0ZXJuIHN0cnVjdCBMaWJyYXJ5ICpET1NCYXNlOworI2Vsc2UKKyAgZXh0ZXJuIHN0cnVjdCBET1NJRmFjZSAqSURPUzsKKyNlbmRpZgorCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKKyNpZiBkZWZpbmVkKCBGVF9ERUJVR19MRVZFTF9FUlJPUiApCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX01lc3NhZ2UoIGNvbnN0IGNoYXIqICBmbXQsCisgICAgICAgICAgICAgIC4uLiApCisgIHsKKyAgICB2YV9saXN0ICBhcDsKKworCisgICAgdmFfc3RhcnQoIGFwLCBmbXQgKTsKKyAgICBLVlByaW50RiggZm10LCBhcCApOworICAgIHZhX2VuZCggYXAgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX1BhbmljKCBjb25zdCBjaGFyKiAgZm10LAorICAgICAgICAgICAgLi4uICkKKyAgeworICAgIHZhX2xpc3QgIGFwOworCisKKyAgICB2YV9zdGFydCggYXAsIGZtdCApOworICAgIEtWUHJpbnRGKCBmbXQsIGFwICk7CisgICAgdmFfZW5kKCBhcCApOworCisvKiAgZXhpdCggRVhJVF9GQUlMVVJFICk7ICovCisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIGludCApCisgIEZUX1Rocm93KCBGVF9FcnJvciAgICAgZXJyb3IsCisgICAgICAgICAgICBpbnQgICAgICAgICAgbGluZSwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlICkKKyAgeworICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKKyAgICBGVF9VTlVTRUQoIGxpbmUgKTsKKyAgICBGVF9VTlVTRUQoIGZpbGUgKTsKKworICAgIHJldHVybiAwOworICB9CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLworCisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisKKyAgLyogYXJyYXkgb2YgdHJhY2UgbGV2ZWxzLCBpbml0aWFsaXplZCB0byAwICovCisgIGludCAgZnRfdHJhY2VfbGV2ZWxzW3RyYWNlX2NvdW50XTsKKworCisgIC8qIGRlZmluZSBhcnJheSBvZiB0cmFjZSB0b2dnbGUgbmFtZXMgKi8KKyNkZWZpbmUgRlRfVFJBQ0VfREVGKCB4ICkgICN4ICwKKworICBzdGF0aWMgY29uc3QgY2hhciogIGZ0X3RyYWNlX3RvZ2dsZXNbdHJhY2VfY291bnQgKyAxXSA9CisgIHsKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSQUNFX0gKKyAgICBOVUxMCisgIH07CisKKyN1bmRlZiBGVF9UUkFDRV9ERUYKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0ludCApCisgIEZUX1RyYWNlX0dldF9Db3VudCggdm9pZCApCisgIHsKKyAgICByZXR1cm4gdHJhY2VfY291bnQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIGNvbnN0IGNoYXIgKiApCisgIEZUX1RyYWNlX0dldF9OYW1lKCBGVF9JbnQgIGlkeCApCisgIHsKKyAgICBpbnQgIG1heCA9IEZUX1RyYWNlX0dldF9Db3VudCgpOworCisKKyAgICBpZiAoIGlkeCA8IG1heCApCisgICAgICByZXR1cm4gZnRfdHJhY2VfdG9nZ2xlc1tpZHhdOworICAgIGVsc2UKKyAgICAgIHJldHVybiBOVUxMOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEluaXRpYWxpemUgdGhlIHRyYWNpbmcgc3ViLXN5c3RlbS4gIFRoaXMgaXMgZG9uZSBieSByZXRyaWV2aW5nIHRoZSAgICAqLworICAvKiB2YWx1ZSBvZiB0aGUgYEZUMl9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUuICBJdCBtdXN0IGJlIGEgbGlzdCBvZiAgKi8KKyAgLyogdG9nZ2xlcywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgYDsnLCBvciBgLCcuICBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBleHBvcnQgRlQyX0RFQlVHPSJhbnk6MyBtZW1vcnk6NyBzdHJlYW06NSIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgcmVxdWVzdHMgdGhhdCBhbGwgbGV2ZWxzIGJlIHNldCB0byAzLCBleGNlcHQgdGhlIHRyYWNlIGxldmVsIGZvciAqLworICAvKiB0aGUgbWVtb3J5IGFuZCBzdHJlYW0gY29tcG9uZW50cyB3aGljaCBhcmUgc2V0IHRvIDcgYW5kIDUsICAgICAgICAgICAgKi8KKyAgLyogcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTZWUgdGhlIGZpbGUgPGluY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oPiBmb3IgZGV0YWlscyBvZiB0aGUgICAgICAgICAgKi8KKyAgLyogYXZhaWxhYmxlIHRvZ2dsZSBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDc7IDAgbWVhbnMgcXVpZXQgKGV4Y2VwdCBmb3Igc2VyaW91cyAgKi8KKyAgLyogcnVudGltZSBlcnJvcnMpLCBhbmQgNyBtZWFucyBfdmVyeV8gdmVyYm9zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQorICB7CisvKiAgY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9IGdldGVudiggIkZUMl9ERUJVRyIgKTsgKi8KKyAgICBjaGFyICAgICAgICAgYnVmWzI1Nl07CisgICAgY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9ICZidWZbMF07CisKKworLyogIGlmICggZnQyX2RlYnVnICkgKi8KKyAgICBpZiAoIEdldFZhciggIkZUMl9ERUJVRyIsIChTVFJQVFIpZnQyX2RlYnVnLCAyNTYsIExWX1ZBUiApID4gMCApCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgPSBmdDJfZGVidWc7CisgICAgICBjb25zdCBjaGFyKiAgcTsKKworCisgICAgICBmb3IgKCA7ICpwOyBwKysgKQorICAgICAgeworICAgICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgc2VwYXJhdG9ycyAqLworICAgICAgICBpZiAoICpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICcsJyB8fCAqcCA9PSAnOycgfHwgKnAgPT0gJz0nICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiByZWFkIHRvZ2dsZSBuYW1lLCBmb2xsb3dlZCBieSAnOicgKi8KKyAgICAgICAgcSA9IHA7CisgICAgICAgIHdoaWxlICggKnAgJiYgKnAgIT0gJzonICkKKyAgICAgICAgICBwKys7CisKKyAgICAgICAgaWYgKCAhKnAgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggKnAgPT0gJzonICYmIHAgPiBxICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgbiwgaSwgbGVuID0gKEZUX0ludCkoIHAgLSBxICk7CisgICAgICAgICAgRlRfSW50ICBsZXZlbCA9IC0xLCBmb3VuZCA9IC0xOworCisKKyAgICAgICAgICBmb3IgKCBuID0gMDsgbiA8IHRyYWNlX2NvdW50OyBuKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICB0b2dnbGUgPSBmdF90cmFjZV90b2dnbGVzW25dOworCisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHRvZ2dsZVtpXSAhPSBxW2ldICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBpID09IGxlbiAmJiB0b2dnbGVbaV0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvdW5kID0gbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcmVhZCBsZXZlbCAqLworICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZiAoICpwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOworICAgICAgICAgICAgaWYgKCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA3ICkKKyAgICAgICAgICAgICAgbGV2ZWwgPSAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIGZvdW5kID49IDAgJiYgbGV2ZWwgPj0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBmb3VuZCA9PSB0cmFjZV9hbnkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yIGBhbnknICovCisgICAgICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApCisgICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW25dID0gbGV2ZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1tmb3VuZF0gPSBsZXZlbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisjZWxzZSAgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQorICB7CisgICAgLyogbm90aGluZyAqLworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfSW50ICkKKyAgRlRfVHJhY2VfR2V0X0NvdW50KCB2b2lkICkKKyAgeworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9CQVNFX0RFRiggY29uc3QgY2hhciAqICkKKyAgRlRfVHJhY2VfR2V0X05hbWUoIEZUX0ludCAgaWR4ICkKKyAgeworICAgIEZUX1VOVVNFRCggaWR4ICk7CisKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisKKyNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvZGluZzogbGF0aW4tMQorRW5kOgorKi8KKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiM2NjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKQEAgLTAsMCArMSw1MzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c3lzdGVtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBbWlnYS1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLiAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEFtaWdhIGludGVyZmFjZSB1c2VkIGJ5IEZyZWVUeXBlIHRvIGFjY2VzcyAgICAgKi8KKyAgLyogbG93LWxldmVsLCBpLmUuIG1lbW9yeSBtYW5hZ2VtZW50LCBpL28gYWNjZXNzIGFzIHdlbGwgYXMgdGhyZWFkICAgICAgICovCisgIC8qIHN5bmNocm9uaXNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1haW50YWluZWQgYnkgRGV0bGVmIFf8cmtuZXIgPFRldGlTb2Z0QGFwZy5sYWhuLmRlPiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGZ0c3lzdGVtLmMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIG1vZGlmaWVkIHRvIGF2b2lkIGZvcGVuKCksIGZjbG9zZSgpLCBmcmVhZCgpLCBmc2VlaygpLCBmdGVsbCgpLCAgICAgICAqLworICAvKiBtYWxsb2MoKSwgcmVhbGxvYygpLCBhbmQgZnJlZSgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRob3NlIEMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIG9mdGVuIG5vdCB0aHJlYWQtc2FmZSBvciBjYW50IGJlICAgICAgICAqLworICAvKiB1c2VkIGluIGEgc2hhcmVkIEFtaWdhIGxpYnJhcnkuIElmIHRoYXQncyBub3QgYSBwcm9ibGVtIGZvciB5b3UsICAgICAgICovCisgIC8qIHlvdSBjYW4gb2YgY291cnNlIHVzZSB0aGUgZGVmYXVsdCBmdHN5c3RlbS5jIHdpdGggQyBsaWJyYXJ5IGNhbGxzICAgICAqLworICAvKiBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZXhlYyBWMzkrIGJlY2F1c2UgaXQgdXNlcyBBbGxvY1Bvb2xlZCgpIGV0YyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX19OT0xJQkJBU0VfXworI2RlZmluZSBfX05PR0xPQkFMSUZBQ0VfXworI2RlZmluZSBfX1VTRV9JTkxJTkVfXworI2luY2x1ZGUgPHByb3RvL2V4ZWMuaD4KKyNpbmNsdWRlIDxkb3Mvc3RkaW8uaD4KKyNpbmNsdWRlIDxwcm90by9kb3MuaD4KKyNpZmRlZiBfX2FtaWdhb3M0X18KK2V4dGVybiBzdHJ1Y3QgRXhlY0lGYWNlICpJRXhlYzsKK2V4dGVybiBzdHJ1Y3QgRE9TSUZhY2UgICpJRE9TOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgTGlicmFyeSAgICpTeXNCYXNlOworZXh0ZXJuIHN0cnVjdCBMaWJyYXJ5ICAgKkRPU0Jhc2U7CisjZW5kaWYKKworI2RlZmluZSBJT0JVRl9TSVpFIDUxMgorCisvKiBzdHJ1Y3R1cmUgdGhhdCBoZWxwcyB1cyB0byBhdm9pZAorICogdXNlbGVzcyBjYWxscyBvZiBTZWVrKCkgYW5kIFJlYWQoKQorICovCitzdHJ1Y3QgU3lzRmlsZQoreworICBCUFRSICBmaWxlOworICBVTE9ORyBpb2J1Zl9zdGFydDsKKyAgVUxPTkcgaW9idWZfZW5kOworICBVQllURSBpb2J1ZltJT0JVRl9TSVpFXTsKK307CisKKyNpZm5kZWYgX19hbWlnYW9zNF9fCisvKiBDIGltcGxlbWVudGF0aW9uIG9mIEFsbG9jVmVjUG9vbGVkIChzZWUgYXV0b2RvYyBleGVjL0FsbG9jUG9vbGVkKSAqLworQVBUUgorQWxsb2NfVmVjUG9vbGVkKCBBUFRSICAgcG9vbEhlYWRlciwKKyAgICAgICAgICAgICAgICAgVUxPTkcgIG1lbVNpemUgKQoreworICBVTE9ORyAgbmV3U2l6ZSA9IG1lbVNpemUgKyBzaXplb2YgKCBVTE9ORyApOworICBVTE9ORyAgKm1lbSA9IEFsbG9jUG9vbGVkKCBwb29sSGVhZGVyLCBuZXdTaXplICk7CisKKyAgaWYgKCAhbWVtICkKKyAgICByZXR1cm4gTlVMTDsKKyAgKm1lbSA9IG5ld1NpemU7CisgIHJldHVybiBtZW0gKyAxOworfQorCisvKiBDIGltcGxlbWVudGF0aW9uIG9mIEZyZWVWZWNQb29sZWQgKHNlZSBhdXRvZG9jIGV4ZWMvQWxsb2NQb29sZWQpICovCit2b2lkCitGcmVlX1ZlY1Bvb2xlZCggQVBUUiAgcG9vbEhlYWRlciwKKyAgICAgICAgICAgICAgICBBUFRSICBtZW1vcnkgKQoreworICBVTE9ORyAgKnJlYWxtZW0gPSAoVUxPTkcgKiltZW1vcnkgLSAxOworCisgIEZyZWVQb29sZWQoIHBvb2xIZWFkZXIsIHJlYWxtZW0sICpyZWFsbWVtICk7Cit9CisjZW5kaWYKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgRlRfVFlQRVNfSAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWSBNQU5BR0VNRU5UIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZG8gYW55IGVycm9yIGNoZWNraW5nIGZvciB0aGUgICAgICAgICAgICAgICAgICAqLworICAvKiBhbGxvY2F0aW9uLXJlbGF0ZWQgZnVuY3Rpb25zLiAgVGhpcyBpcyBkb25lIGJ5IHRoZSBoaWdoZXIgbGV2ZWwgICAgICAgKi8KKyAgLyogcm91dGluZXMgbGlrZSBmdF9tZW1fYWxsb2MoKSBvciBmdF9tZW1fcmVhbGxvYygpLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X2FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSA6OiBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSAgIDo6IFRoZSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGFkZHJlc3Mgb2YgbmV3bHkgYWxsb2NhdGVkIGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQqICkKKyAgZnRfYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgbG9uZyAgICAgICBzaXplICkKKyAgeworI2lmZGVmIF9fYW1pZ2FvczRfXworICAgIHJldHVybiBBbGxvY1ZlY1Bvb2xlZCggbWVtb3J5LT51c2VyLCBzaXplICk7CisjZWxzZQorICAgIHJldHVybiBBbGxvY19WZWNQb29sZWQoIG1lbW9yeS0+dXNlciwgc2l6ZSApOworI2VuZGlmCisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X3JlYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtZW1vcnkgcmVhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSAgIDo6IEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY3VyX3NpemUgOjogVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBibG9jay4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuZXdfc2l6ZSA6OiBUaGUgbmV3bHkgcmVxdWVzdGVkIHNpemUgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJsb2NrICAgIDo6IFRoZSBjdXJyZW50IGFkZHJlc3Mgb2YgdGhlIGJsb2NrIGluIG1lbW9yeS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBhZGRyZXNzIG9mIHRoZSByZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkKiApCisgIGZ0X3JlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICBsb25nICAgICAgIGN1cl9zaXplLAorICAgICAgICAgICAgICBsb25nICAgICAgIG5ld19zaXplLAorICAgICAgICAgICAgICB2b2lkKiAgICAgIGJsb2NrICkKKyAgeworICAgIHZvaWQqIG5ld19ibG9jazsKKworI2lmZGVmIF9fYW1pZ2FvczRfXworICAgIG5ld19ibG9jayA9IEFsbG9jVmVjUG9vbGVkICggbWVtb3J5LT51c2VyLCBuZXdfc2l6ZSApOworI2Vsc2UKKyAgICBuZXdfYmxvY2sgPSBBbGxvY19WZWNQb29sZWQgKCBtZW1vcnktPnVzZXIsIG5ld19zaXplICk7CisjZW5kaWYKKyAgICBpZiAoIG5ld19ibG9jayAhPSBOVUxMICkKKyAgICB7CisgICAgICBDb3B5TWVtICggYmxvY2ssIG5ld19ibG9jaywKKyAgICAgICAgICAgICAgICAoIG5ld19zaXplID4gY3VyX3NpemUgKSA/IGN1cl9zaXplIDogbmV3X3NpemUgKTsKKyNpZmRlZiBfX2FtaWdhb3M0X18KKyAgICAgIEZyZWVWZWNQb29sZWQgKCBtZW1vcnktPnVzZXIsIGJsb2NrICk7CisjZWxzZQorICAgICAgRnJlZV9WZWNQb29sZWQgKCBtZW1vcnktPnVzZXIsIGJsb2NrICk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIG5ld19ibG9jazsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSByZWxlYXNlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICA6OiBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBibG9jayAgIDo6IFRoZSBhZGRyZXNzIG9mIGJsb2NrIGluIG1lbW9yeSB0byBiZSBmcmVlZC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0X2ZyZWUoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICB2b2lkKiAgICAgIGJsb2NrICkKKyAgeworI2lmZGVmIF9fYW1pZ2FvczRfXworICAgIEZyZWVWZWNQb29sZWQoIG1lbW9yeS0+dXNlciwgYmxvY2sgKTsKKyNlbHNlCisgICAgRnJlZV9WZWNQb29sZWQoIG1lbW9yeS0+dXNlciwgYmxvY2sgKTsKKyNlbmRpZgorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0UgTUFOQUdFTUVOVCBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9pbworCisgIC8qIFdlIHVzZSB0aGUgbWFjcm8gU1RSRUFNX0ZJTEUgZm9yIGNvbnZlbmllbmNlIHRvIGV4dHJhY3QgdGhlICAgICAgICovCisgIC8qIHN5c3RlbS1zcGVjaWZpYyBzdHJlYW0gaGFuZGxlIGZyb20gYSBnaXZlbiBGcmVlVHlwZSBzdHJlYW0gb2JqZWN0ICovCisjZGVmaW5lIFNUUkVBTV9GSUxFKCBzdHJlYW0gKSAgKCAoc3RydWN0IFN5c0ZpbGUgKilzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9hbWlnYV9zdHJlYW1fY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZnVuY3Rpb24gdG8gY2xvc2UgYSBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0X2FtaWdhX3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgc3RydWN0IFN5c0ZpbGUqIHN5c2ZpbGU7CisKKyAgICBzeXNmaWxlID0gU1RSRUFNX0ZJTEUoIHN0cmVhbSApOworICAgIENsb3NlICggc3lzZmlsZS0+ZmlsZSApOworICAgIEZyZWVNZW0gKCBzeXNmaWxlLCBzaXplb2YgKCBzdHJ1Y3QgU3lzRmlsZSApKTsKKworICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gTlVMTDsKKyAgICBzdHJlYW0tPnNpemUgICAgICAgICAgICAgICA9IDA7CisgICAgc3RyZWFtLT5iYXNlICAgICAgICAgICAgICAgPSAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9hbWlnYV9zdHJlYW1faW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZnVuY3Rpb24gdG8gb3BlbiBhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9mZnNldCA6OiBUaGUgcG9zaXRpb24gaW4gdGhlIGRhdGEgc3RyZWFtIHRvIHN0YXJ0IHJlYWRpbmcuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVmZmVyIDo6IFRoZSBhZGRyZXNzIG9mIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb3VudCAgOjogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlIHN0cmVhbS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdW5zaWduZWQgbG9uZyApCisgIGZ0X2FtaWdhX3N0cmVhbV9pbyggRlRfU3RyZWFtICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIGNvdW50ICkKKyAgeworICAgIHN0cnVjdCBTeXNGaWxlKiBzeXNmaWxlOworICAgIHVuc2lnbmVkIGxvbmcgICByZWFkX2J5dGVzOworCisgICAgaWYgKCBjb3VudCAhPSAwICkKKyAgICB7CisgICAgICBzeXNmaWxlID0gU1RSRUFNX0ZJTEUoIHN0cmVhbSApOworCisgICAgICAvKiBoYW5kbGUgdGhlIHNlZWsgKi8KKyAgICAgIGlmICggKG9mZnNldCA8IHN5c2ZpbGUtPmlvYnVmX3N0YXJ0KSB8fCAob2Zmc2V0ICsgY291bnQgPiBzeXNmaWxlLT5pb2J1Zl9lbmQpICkKKyAgICAgIHsKKyAgICAgICAgLyogcmVxdWVzdGVkIG9mZnNldCBpbXBsaWVzIHdlIG5lZWQgYSBidWZmZXIgcmVmaWxsICovCisgICAgICAgIGlmICggIXN5c2ZpbGUtPmlvYnVmX2VuZCB8fCBvZmZzZXQgIT0gc3lzZmlsZS0+aW9idWZfZW5kICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGEgcGh5c2ljYWwgc2VlayBpcyBuZWNlc3NhcnkgKi8KKyAgICAgICAgICBTZWVrKCBzeXNmaWxlLT5maWxlLCBvZmZzZXQsIE9GRlNFVF9CRUdJTk5JTkcgKTsKKyAgICAgICAgfQorICAgICAgICBzeXNmaWxlLT5pb2J1Zl9zdGFydCA9IG9mZnNldDsKKyAgICAgICAgc3lzZmlsZS0+aW9idWZfZW5kID0gMDsgLyogdHJpZ2dlciBhIGJ1ZmZlciByZWZpbGwgKi8KKyAgICAgIH0KKworICAgICAgLyogaGFuZGxlIHRoZSByZWFkICovCisgICAgICBpZiAoIG9mZnNldCArIGNvdW50IDw9IHN5c2ZpbGUtPmlvYnVmX2VuZCApCisgICAgICB7CisgICAgICAgIC8qIHdlIGhhdmUgYnVmZmVyIGFuZCByZXF1ZXN0ZWQgYnl0ZXMgYXJlIGFsbCBpbnNpZGUgb3VyIGJ1ZmZlciAqLworICAgICAgICBDb3B5TWVtKCAmc3lzZmlsZS0+aW9idWZbb2Zmc2V0IC0gc3lzZmlsZS0+aW9idWZfc3RhcnRdLCBidWZmZXIsIGNvdW50ICk7CisgICAgICAgIHJlYWRfYnl0ZXMgPSBjb3VudDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogKHJlKWZpbGwgYnVmZmVyICovCisgICAgICAgIGlmICggY291bnQgPD0gSU9CVUZfU0laRSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiByZXF1ZXN0ZWQgYnl0ZXMgaXMgYSBzdWJzZXQgb2YgdGhlIGJ1ZmZlciAqLworICAgICAgICAgIHJlYWRfYnl0ZXMgPSBSZWFkKCBzeXNmaWxlLT5maWxlLCBzeXNmaWxlLT5pb2J1ZiwgSU9CVUZfU0laRSApOworICAgICAgICAgIGlmICggcmVhZF9ieXRlcyA9PSAtMVVMICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBlcnJvciAqLworICAgICAgICAgICAgcmVhZF9ieXRlcyA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBzeXNmaWxlLT5pb2J1Zl9lbmQgPSBvZmZzZXQgKyByZWFkX2J5dGVzOworICAgICAgICAgICAgQ29weU1lbSggc3lzZmlsZS0+aW9idWYsIGJ1ZmZlciwgY291bnQgKTsKKyAgICAgICAgICAgIGlmICggcmVhZF9ieXRlcyA+IGNvdW50ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVhZF9ieXRlcyA9IGNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiB3ZSBhY3R1YWxseSBuZWVkIG1vcmUgdGhhbiBvdXIgYnVmZmVyIGNhbiBob2xkLCBzbyB3ZSBkZWNpZGUKKyAgICAgICAgICAqKiB0byBkbyBhIHNpbmdsZSBiaWcgcmVhZCwgYW5kIHRoZW4gY29weSB0aGUgbGFzdCBJT0JVRl9TSVpFCisgICAgICAgICAgKiogYnl0ZXMgb2YgdGhhdCB0byBvdXIgaW50ZXJuYWwgYnVmZmVyIGZvciBsYXRlciB1c2UgKi8KKyAgICAgICAgICByZWFkX2J5dGVzID0gUmVhZCggc3lzZmlsZS0+ZmlsZSwgYnVmZmVyLCBjb3VudCApOworICAgICAgICAgIGlmICggcmVhZF9ieXRlcyA9PSAtMVVMICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBlcnJvciAqLworICAgICAgICAgICAgcmVhZF9ieXRlcyA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBVTE9ORyBidWZzaXplOworCisgICAgICAgICAgICBidWZzaXplID0gKCByZWFkX2J5dGVzID4gSU9CVUZfU0laRSApID8gSU9CVUZfU0laRSA6IHJlYWRfYnl0ZXM7CisgICAgICAgICAgICBzeXNmaWxlLT5pb2J1Zl9lbmQgPSBvZmZzZXQgKyByZWFkX2J5dGVzOworICAgICAgICAgICAgc3lzZmlsZS0+aW9idWZfc3RhcnQgPSBzeXNmaWxlLT5pb2J1Zl9lbmQgLSBidWZzaXplOworICAgICAgICAgICAgQ29weU1lbSggJmJ1ZmZlcltyZWFkX2J5dGVzIC0gYnVmc2l6ZV0gLCBzeXNmaWxlLT5pb2J1ZiwgYnVmc2l6ZSApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmVhZF9ieXRlcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHJlYWRfYnl0ZXM7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbiggRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKQorICB7CisgICAgc3RydWN0IEZpbGVJbmZvQmxvY2sqICBmaWI7CisgICAgc3RydWN0IFN5c0ZpbGUqICAgICAgICBzeXNmaWxlOworCisKKyAgICBpZiAoICFzdHJlYW0gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9IYW5kbGUgKTsKKworI2lmZGVmIF9fYW1pZ2FvczRfXworICAgIHN5c2ZpbGUgPSBBbGxvY01lbSAoIHNpemVvZiAoc3RydWN0IFN5c0ZpbGUgKSwgTUVNRl9TSEFSRUQgKTsKKyNlbHNlCisgICAgc3lzZmlsZSA9IEFsbG9jTWVtICggc2l6ZW9mIChzdHJ1Y3QgU3lzRmlsZSApLCBNRU1GX1BVQkxJQyApOworI2VuZGlmCisgICAgaWYgKCAhc3lzZmlsZSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX09wZW46IiApKTsKKyAgICAgIEZUX0VSUk9SKCggIiBjb3VsZCBub3Qgb3BlbiBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKyAgICB9CisgICAgc3lzZmlsZS0+ZmlsZSA9IE9wZW4oIChTVFJQVFIpZmlsZXBhdGhuYW1lLCBNT0RFX09MREZJTEUgKTsKKyAgICBpZiAoICFzeXNmaWxlLT5maWxlICkKKyAgICB7CisgICAgICBGcmVlTWVtICggc3lzZmlsZSwgc2l6ZW9mICggc3RydWN0IFN5c0ZpbGUgKSk7CisgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiICkpOworICAgICAgRlRfRVJST1IoKCAiIGNvdWxkIG5vdCBvcGVuIGAlcydcbiIsIGZpbGVwYXRobmFtZSApKTsKKworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIH0KKworICAgIGZpYiA9IEFsbG9jRG9zT2JqZWN0KCBET1NfRklCLCBOVUxMICk7CisgICAgaWYgKCAhZmliICkKKyAgICB7CisgICAgICBDbG9zZSAoIHN5c2ZpbGUtPmZpbGUgKTsKKyAgICAgIEZyZWVNZW0gKCBzeXNmaWxlLCBzaXplb2YgKCBzdHJ1Y3QgU3lzRmlsZSApKTsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgY291bGQgbm90IG9wZW4gYCVzJ1xuIiwgZmlsZXBhdGhuYW1lICkpOworCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisgICAgfQorICAgIGlmICggISggRXhhbWluZUZIKCBzeXNmaWxlLT5maWxlLCBmaWIgKSApICkKKyAgICB7CisgICAgICBGcmVlRG9zT2JqZWN0KCBET1NfRklCLCBmaWIgKTsKKyAgICAgIENsb3NlICggc3lzZmlsZS0+ZmlsZSApOworICAgICAgRnJlZU1lbSAoIHN5c2ZpbGUsIHNpemVvZiAoIHN0cnVjdCBTeXNGaWxlICkpOworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX09wZW46IiApKTsKKyAgICAgIEZUX0VSUk9SKCggIiBjb3VsZCBub3Qgb3BlbiBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKyAgICB9CisgICAgc3RyZWFtLT5zaXplID0gZmliLT5maWJfU2l6ZTsKKyAgICBGcmVlRG9zT2JqZWN0KCBET1NfRklCLCBmaWIgKTsKKworICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gKHZvaWQgKilzeXNmaWxlOworICAgIHN0cmVhbS0+cGF0aG5hbWUucG9pbnRlciAgID0gKGNoYXIqKWZpbGVwYXRobmFtZTsKKyAgICBzeXNmaWxlLT5pb2J1Zl9zdGFydCAgICAgICA9IDA7CisgICAgc3lzZmlsZS0+aW9idWZfZW5kICAgICAgICAgPSAwOworICAgIHN0cmVhbS0+cG9zICAgICAgICAgICAgICAgID0gMDsKKworICAgIHN0cmVhbS0+cmVhZCAgPSBmdF9hbWlnYV9zdHJlYW1faW87CisgICAgc3RyZWFtLT5jbG9zZSA9IGZ0X2FtaWdhX3N0cmVhbV9jbG9zZTsKKworICAgIGlmICggIXN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgZnRfYW1pZ2Ffc3RyZWFtX2Nsb3NlKCBzdHJlYW0gKTsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgb3BlbmVkIGAlcycgYnV0IHplcm8tc2l6ZWRcbiIsIGZpbGVwYXRobmFtZSApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fU3RyZWFtICk7CisgICAgfQorCisgICAgRlRfVFJBQ0UxKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgRlRfVFJBQ0UxKCggIiBvcGVuZWQgYCVzJyAoJWxkIGJ5dGVzKSBzdWNjZXNzZnVsbHlcbiIsCisgICAgICAgICAgICAgICAgZmlsZXBhdGhuYW1lLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworI2lmZGVmIEZUX0RFQlVHX01FTU9SWQorCisgIGV4dGVybiBGVF9JbnQKKyAgZnRfbWVtX2RlYnVnX2luaXQoIEZUX01lbW9yeSAgbWVtb3J5ICk7CisKKyAgZXh0ZXJuIHZvaWQKKyAgZnRfbWVtX2RlYnVnX2RvbmUoIEZUX01lbW9yeSAgbWVtb3J5ICk7CisKKyNlbmRpZgorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9NZW1vcnkgKQorICBGVF9OZXdfTWVtb3J5KCB2b2lkICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisKKyNpZmRlZiBfX2FtaWdhb3M0X18KKyAgICBtZW1vcnkgPSAoRlRfTWVtb3J5KUFsbG9jVmVjKCBzaXplb2YgKCAqbWVtb3J5ICksIE1FTUZfU0hBUkVEICk7CisjZWxzZQorICAgIG1lbW9yeSA9IChGVF9NZW1vcnkpQWxsb2NWZWMoIHNpemVvZiAoICptZW1vcnkgKSwgTUVNRl9QVUJMSUMgKTsKKyNlbmRpZgorICAgIGlmICggbWVtb3J5ICkKKyAgICB7CisjaWZkZWYgX19hbWlnYW9zNF9fCisgICAgICBtZW1vcnktPnVzZXIgPSBDcmVhdGVQb29sKCBNRU1GX1NIQVJFRCwgMTYzODQsIDE2Mzg0ICk7CisjZWxzZQorICAgICAgbWVtb3J5LT51c2VyID0gQ3JlYXRlUG9vbCggTUVNRl9QVUJMSUMsIDE2Mzg0LCAxNjM4NCApOworI2VuZGlmCisgICAgICBpZiAoIG1lbW9yeS0+dXNlciA9PSBOVUxMICkKKyAgICAgIHsKKyAgICAgICAgRnJlZVZlYyggbWVtb3J5ICk7CisgICAgICAgIG1lbW9yeSA9IE5VTEw7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIG1lbW9yeS0+YWxsb2MgICA9IGZ0X2FsbG9jOworICAgICAgICBtZW1vcnktPnJlYWxsb2MgPSBmdF9yZWFsbG9jOworICAgICAgICBtZW1vcnktPmZyZWUgICAgPSBmdF9mcmVlOworI2lmZGVmIEZUX0RFQlVHX01FTU9SWQorICAgICAgICBmdF9tZW1fZGVidWdfaW5pdCggbWVtb3J5ICk7CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWVtb3J5OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9Eb25lX01lbW9yeSggRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisjaWZkZWYgRlRfREVCVUdfTUVNT1JZCisgICAgZnRfbWVtX2RlYnVnX2RvbmUoIG1lbW9yeSApOworI2VuZGlmCisKKyAgICBEZWxldGVQb29sKCBtZW1vcnktPnVzZXIgKTsKKyAgICBGcmVlVmVjKCBtZW1vcnkgKTsKKyAgfQorCisvKgorTG9jYWwgVmFyaWFibGVzOgorY29kaW5nOiBsYXRpbi0xCitFbmQ6CisqLworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Fuc2kvYW5zaS1kZWYubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Fuc2kvYW5zaS1kZWYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViOWYzMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW5zaS9hbnNpLWRlZi5tawpAQCAtMCwwICsxLDc0IEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgYSBgbm9ybWFsJyBBTlNJIHN5c3RlbQorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworREVMRVRFICAgIDo9IHJtIC1mCitDQVQgICAgICAgOj0gY2F0CitTRVAgICAgICAgOj0gLworQlVJTERfRElSIDo9ICQoVE9QX0RJUikvYnVpbGRzL2Fuc2kKK1BMQVRGT1JNICA6PSBhbnNpCisKKworIyBUaGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBsaWJyYXJ5IGZpbGVzIGFyZSBwbGFjZWQuCisjCisjIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHNhbWUgYXMgJChPQkpfRElSKTsgaG93ZXZlciwgdGhpcyBjYW4gYmUgY2hhbmdlZAorIyB0byBzdWl0IHBhcnRpY3VsYXIgbmVlZHMuCisjCitMSUJfRElSIDo9ICQoT0JKX0RJUikKKworCisjIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5IGZpbGUuICBOb3RlIHRoYXQgdGhlIERPUy1zcGVjaWZpYyBNYWtlZmlsZQorIyB1c2VzIGEgc2hvcnRlciAoOC4zKSBuYW1lLgorIworTElCUkFSWSA6PSBsaWIkKFBST0pFQ1QpCisKKworIyBQYXRoIGluY2x1c2lvbiBmbGFnLiAgU29tZSBjb21waWxlcnMgdXNlIGEgZGlmZmVyZW50IGZsYWcgdGhhbiBgLUknIHRvCisjIHNwZWNpZnkgYW4gYWRkaXRpb25hbCBpbmNsdWRlIHBhdGguICBFeGFtcGxlcyBhcmUgYC9pPScgb3IgYC1KJy4KKyMKK0kgOj0gLUkKKworCisjIEMgZmxhZyB1c2VkIHRvIGRlZmluZSBhIG1hY3JvIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gb2YgYSBnaXZlbiBzb3VyY2UKKyMgb2JqZWN0LiAgVXN1YWxseSBpdCBpcyBgLUQnIGxpa2UgaW4gYC1EREVCVUcnLgorIworRCA6PSAtRAorCisKKyMgVGhlIGxpbmsgZmxhZyB1c2VkIHRvIHNwZWNpZnkgYSBnaXZlbiBsaWJyYXJ5IGZpbGUgb24gbGluay4gIE5vdGUgdGhhdAorIyB0aGlzIGlzIG9ubHkgdXNlZCB0byBjb21waWxlIHRoZSBkZW1vIHByb2dyYW1zLCBub3QgdGhlIGxpYnJhcnkgaXRzZWxmLgorIworTCA6PSAtbAorCisKKyMgVGFyZ2V0IGZsYWcuCisjCitUIDo9IC1vJChzcGFjZSkKKworCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworQ0ZMQUdTID89IC1jCisKKyMgQU5TSUZMQUdTOiBQdXQgdGhlcmUgdGhlIGZsYWdzIHVzZWQgdG8gbWFrZSB5b3VyIGNvbXBpbGVyIEFOU0ktY29tcGxpYW50LgorIworQU5TSUZMQUdTIDo9CisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW5zaS9hbnNpLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hbnNpL2Fuc2kubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxNmUxNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYW5zaS9hbnNpLm1rCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBhIGBub3JtYWwnIHBzZXVkbyBBTlNJIGNvbXBpbGVyL3N5c3RlbQorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9hbnNpL2Fuc2ktZGVmLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2NvbXBpbGVyL2Fuc2ktY2MubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19zdGQubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9BVEFSSS5IIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9BVEFSSS5ICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzhjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2F0YXJpL0FUQVJJLkgKQEAgLTAsMCArMSwyMCBAQAorI2lmIGRlZmluZWQoIF9fR1hWQUxJRF9IX18gKQorI3ByYWdtYSB3YXJuIC1hdXMgLyogdG9vIG1hbnkgdW5ldmFsdWF0ZWQgdmFyaWFibGVzIGluIGd4dmFsaWQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFUQVJJX0gKKyNkZWZpbmUgQVRBUklfSAorCisjcHJhZ21hIHdhcm4gLXN0dQorCisvKiBQdXJlQyBkb2Vzbid0IGxpa2UgMzJiaXQgZW51bWVyYXRpb25zICovCisKKyNpZm5kZWYgRlRfSU1BR0VfVEFHCisjZGVmaW5lIEZUX0lNQUdFX1RBRyggdmFsdWUsIF94MSwgX3gyLCBfeDMsIF94NCApIHZhbHVlCisjZW5kaWYgLyogRlRfSU1BR0VfVEFHICovCisKKyNpZm5kZWYgRlRfRU5DX1RBRworI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApIHZhbHVlCisjZW5kaWYgLyogRlRfRU5DX1RBRyAqLworCisjZW5kaWYgLyogQVRBUklfSCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9GTmFtZXMuU0lDIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9GTmFtZXMuU0lDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjU3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2F0YXJpL0ZOYW1lcy5TSUMKQEAgLTAsMCArMSwzNyBAQAorLyogdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGZpbGUgbmFtZXMgZm9yIFB1cmVDIHByb2plY3RzICovCisKK2lmIChhcmdjID4gMCkKK3sKKwlvcmRuZXIgPSBhcmd2WzBdOworCWlmIChiYXNlbmFtZShvcmRuZXIpID09ICIiKSAvKiBpc3QgT3JkbmVyICovCisJeworCQlDaGFuZ2VGaWxlbmFtZXMob3JkbmVyKTsKKwl9Cit9CisKK3Byb2MgQ2hhbmdlRmlsZW5hbWVzKGZvbGRlcikKK2xvY2FsIGksZW50cmllcyxkaXJlY3RvcnksZmlsZTsKK3sKKwllbnRyaWVzID0gZmlsZWxpc3QoZGlyZWN0b3J5LGZvbGRlcik7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7ICsraSkKKwl7CisJCWZpbGUgPSBkaXJlY3RvcnlbaSwwXTsKKwkJaWYgKChkaXJlY3RvcnlbaSwzXSYxNikgPiAwKSAvKiBzdWJkaXJlY3RvcnkgKi8KKwkJeworCQkJQ2hhbmdlRmlsZW5hbWVzKGZvbGRlcitmaWxlKyJcXCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKChzdHJpY21wKHN1ZmZpeChmaWxlKSwiLmgiKT09MCl8KHN0cmljbXAoc3VmZml4KGZpbGUpLCIuYyIpPT0wKSkKKwkJCUNoYW5nZUZpbGVuYW1lKGZvbGRlcixmaWxlKTsKKwkJfQorCX0KK30KKworcHJvYyBDaGFuZ2VGaWxlbmFtZShwYXRoLGRhdGVpKQorbG9jYWwgbmV3ZmlsZSxlcnI7Cit7CisJbmV3ZmlsZT1kYXRlaTsKKwluZXdmaWxlWzBdPShuZXdmaWxlWzBdIHwgMzIpIF4gMzI7CisJZXJyPWZpbGVzLnJlbmFtZSgiLXEiLHBhdGgrZGF0ZWksbmV3ZmlsZSk7Cit9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2F0YXJpL0ZSRUVUWVBFLlBSSiBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvRlJFRVRZUEUuUFJKCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzZhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2F0YXJpL0ZSRUVUWVBFLlBSSgpAQCAtMCwwICsxLDMyIEBACis7RnJlZVR5cGUgcHJvamVjdCBmaWxlCisKK0ZSRUVUWVBFLkxJQgorCisuQyBbLUsgLVAgLVIgLUFdCisuTCBbLUogLVZdCisuUworCis9CisKKy4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMKKy4uXC4uXHNyY1xiYXNlXGZ0ZGVidWcuYworCisuLlwuLlxzcmNcYmFzZVxmdGluaXQuYworLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jCisuLlwuLlxzcmNcYmFzZVxmdG1tCisuLlwuLlxzcmNcYmFzZVxmdGJib3gKKworLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMKKy4uXC4uXHNyY1xhdXRvaGludFxhdXRvaGludC5jCis7Li5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYworLi5cLi5cc3JjXGNmZlxjZmYuYworLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jCisuLlwuLlxzcmNccHNhdXhccHNhdXguYworLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMKKy4uXC4uXHNyY1xwc25hbWVzXHBzbmFtZXMuYworLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYworLi5cLi5cc3JjXHNmbnRcc2ZudC5jCisuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jCisuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYworLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMKKy4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvUkVBRE1FLlRYVCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvUkVBRE1FLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGVlYzYzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9SRUFETUUuVFhUCkBAIC0wLDAgKzEsNTEgQEAKK0NvbXBpbGluZyBGcmVlVHlwZSAyIHdpdGggUHVyZUMgY29tcGlsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1NlZSBiZWxvdyBmb3IgYSBHZXJtYW4gdmVyc2lvbi5dCisKK1RvIGNvbXBpbGUgRnJlZVR5cGUgMiBhcyBhIGxpYnJhcnkgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIG11c3QgYmUgYXBwbGllZDoKKworLSBBbGwgKi5jIGZpbGVzIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLgorICAoSW4gY2FzZSBHRU1TQ1JJUFQgaXMgYXZhaWxhYmxlOgorICBTaW1wbHkgZHJhZyB0aGUgd2hvbGUgRnJlZVR5cGUgMiBkaXJlY3RvcnkgdG8gdGhlIGZpbGUgYEZOYW1lcy5TSUMnLikKKworLSBZb3UgaGF2ZSB0byBjaGFuZ2UgdGhlIElOQ0xVREUgZGlyZWN0b3J5IGluIFB1cmVDJ3MgY29tcGlsZXIgb3B0aW9ucworICB0byBjb250YWluIGJvdGggdGhlIGBJTkNMVURFJyBhbmQgYGZyZWV0eXBlMlxpbmNsdWRlJyBkaXJlY3RvcnkuCisgIEV4YW1wbGU6CisKKyAgICBJTkNMVURFO0U6XGZyZWV0eXBlMlxpbmNsdWRlCisKKy0gVGhlIGZpbGUgYGZyZWV0eXBlMi9pbmNsdWRlL0Z0MmJ1aWxkLmgnIG11c3QgYmUgcGF0Y2hlZCBhcyBmb2xsb3dzIHRvCisgIGluY2x1ZGUgQVRBUkkuSDoKKworICAgICNpZm5kZWYgX19GVDJfQlVJTERfR0VORVJJQ19IX18KKyAgICAjZGVmaW5lIF9fRlQyX0JVSUxEX0dFTkVSSUNfSF9fCisKKyAgICAjaW5jbHVkZSAiQVRBUkkuSCIKKworCisKK0NvbXBpbGllcmVuIHZvbiBGcmVlVHlwZSAyIG1pdCBQdXJlQworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VtIEZyZWVUeXBlIDIgYWxzIGVpbmUgQmlibGlvdGhlayAobGlicmFyeSkgenUgY29tcGlsaWVyZW4sIG11c3MgZm9sZ2VuZGVzCitnZYRuZGVydCB3ZXJkZW46CisKKy0gQWxsZSAqLmMtZmlsZXMgbYFzc2VuIG1pdCBlaW5lbSBHUk9TU0JVQ0hTVEFCRU4gYmVnaW5uZW4uCisgIChGYWxscyBHRU1TQ1JJUFQgenVyIFZlcmaBZ3VuZyBzdGVodDoKKyAgRGVuIGtvbXBsZXR0ZW4gT3JkbmVyIGZyZWV0eXBlMiBhdWYgZGllIERhdGVpIGBGTmFtZXMuU0lDJyBkcmFnZ2VuLikKKworLSBJbiBkZW4gQ29tcGlsZXItT3B0aW9uZW4gdm9uIFB1cmVDIG11c3MgZGFzIElOQ0xVREUgZGlyZWN0b3J5IGF1ZiBJTkNMVURFCisgIHVuZCBmcmVldHlwZTJcaW5jbHVkZSB2ZXJ3ZWlzZW4uIFouQi46CisKKyAgICBJTkNMVURFO0U6XGZyZWV0eXBlMlxpbmNsdWRlCisKKy0gSW4gZGVyIERhdGVpIGZyZWV0eXBlMi9pbmNsdWRlL0Z0MmJ1aWxkLmggbXVzcyB6dSBCZWdpbm4KKyAgZWluICNpbmNsdWRlICJBVEFSSS5IIiB3aWUgZm9sZ3QgZWluZ2VmgWd0IHdlcmRlbjoKKworICAgICNpZm5kZWYgX19GVDJfQlVJTERfR0VORVJJQ19IX18KKyAgICAjZGVmaW5lIF9fRlQyX0JVSUxEX0dFTkVSSUNfSF9fCisKKyAgICAjaW5jbHVkZSAiQVRBUkkuSCIKKworLS0tIGVuZCBvZiBSRUFETUUuVFhUIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9kZWZsaW5lam9pbmVyLmF3ayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvZGVmbGluZWpvaW5lci5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkOWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvZGVmbGluZWpvaW5lci5hd2sKQEAgLTAsMCArMSwxODEgQEAKKyMhL3Vzci9iaW4vZW52IGF3aworCisKK2Z1bmN0aW9uIHNoaWZ0KCBhcnJheSwgXAorICAgICAgICAgICAgICAgIGp1bmssIGVsbTAsIGwgKQoreworICBlbG0wID0gYXJyYXlbMF0KKyAgZm9yICggbCA9IDA7IGwgPCBhc29ydGkoIGFycmF5LCBqdW5rICkgLSAxOyBsKysgKQorICAgIGFycmF5W2xdID0gYXJyYXlbbCsxXTsKKyAgZGVsZXRlIGFycmF5W2xdCisgIHJldHVybiBlbG0wCit9CisKKworZnVuY3Rpb24gaW5pdF9jcHBfc3JjX2xpbmUoKQoreworICBsb2dpY2FsX2xpbmUgPSAiIgorICBkZWxldGUgYnJlYWtfcG9zCit9CisKKworZnVuY3Rpb24gc2hpZnRfdmFsaWRfYnAoIGFycmF5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAganVuaywgZWxtICkKK3sKKyAgZWxtID0gLTEKKworICBpZiAoIDAgPCBhc29ydGkoIGFycmF5LCBqdW5rICkgKQorICAgIGRvIHsKKyAgICAgIGVsbSA9IHNoaWZ0KCBhcnJheSApCisgICAgfSB3aGlsZSAoIDAgPiBlbG0gKTsKKworICByZXR1cm4gZWxtCit9CisKKworZnVuY3Rpb24gY2hlY2tfY3BwX3NyY19saW5lX2JyZWFrX3BvcyggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwganVuayApCit7CisgIHByaW50ZiggImJyZWFrX3BvczoiICkKKyAgZm9yICggaSA9IDA7IGkgPCBhc29ydGkoIGJyZWFrX3BvcywganVuayApOyBpKysgKQorICAgIHByaW50ZiggIiAlZCIsIGJyZWFrX3Bvc1tpXSApOworICBwcmludGYoICJcbiIgKQorfQorCisKK2Z1bmN0aW9uIGNoZWNrX2NwcF9zcmNfbGluZSgpCit7CisgIHByaW50ZiggImxvZ2ljYWxfbGluZVslc11cbiIsIGxvZ2ljYWxfbGluZSApCisgIGNoZWNrX2NwcF9zcmNfbGluZV9icmVha19wb3MoKQorfQorCisKK2Z1bmN0aW9uIGFwcGVuZF9saW5lKCBwaHlzX2xpbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWx0X2xpbmUsIGJwX2xlbiApCit7CisgIGZpbHRfbGluZSA9IHBoeXNfbGluZQorICBzdWIoIC9cXCQvLCAiICIsIGZpbHRfbGluZSApCisgIGxvZ2ljYWxfbGluZSAgICA9IGxvZ2ljYWxfbGluZSBmaWx0X2xpbmUKKyAgYnBfbGVuID0gYXNvcnRpKCBicmVha19wb3MsIGp1bmsgKQorICBicmVha19wb3NbYnBfbGVuXSA9IGxlbmd0aCggbG9naWNhbF9saW5lICkgLSAxCit9CisKKworZnVuY3Rpb24gcHJpbnRfbGluZSggXAorICAgICAgICAgICAgICAgICAgICAgYzAsIGMxLCBpLCBqdW5rLCBwYXJ0X3N0ciApCit7CisgIGMwID0gMAorCisgIHdoaWxlKCBhc29ydGkoIGJyZWFrX3BvcywganVuayApID4gMSApCisgIHsKKyAgICBpZiAoICggYzEgPSBzaGlmdF92YWxpZF9icCggYnJlYWtfcG9zICkgKSA8IDEgKQorICAgIHsKKyAgICAgIHBhcnRfc3RyID0gc3Vic3RyKCBsb2dpY2FsX2xpbmUsIGMwICsgMSApCisgICAgICBwcmludGYoICIlc1xuIiwgcGFydF9zdHIgKQorICAgICAgcmV0dXJuCisgICAgfQorCisgICAgcGFydF9zdHIgPSBzdWJzdHIoIGxvZ2ljYWxfbGluZSwgYzAgKyAxLCBjMSAtIGMwICsgMSApCisgICAgZ3N1YiggLyAkLywgIlxcIiwgcGFydF9zdHIgKQorICAgIHByaW50ZiggIiVzXG4iLCBwYXJ0X3N0ciApCisgICAgYzAgPSBjMSArIDEKKyAgfQorCisgIHBhcnRfc3RyID0gc3Vic3RyKCBsb2dpY2FsX2xpbmUsIGMwICsgMSApCisgIHByaW50ZiggIiVzXG4iLCBwYXJ0X3N0ciApCit9CisKKworZnVuY3Rpb24gc2hyaW5rX3NwYWNlcyggcG9zLCBcCisgICAgICAgICAgICAgICAgICAgICAgICB0YWlsLCByZW1vdmVkX2xlbmd0aCwgayApCit7CisgIHRhaWwgPSBzdWJzdHIoIGxvZ2ljYWxfbGluZSwgcG9zICkKKyAgc3ViKCAvXlsgXHRdKy8sICIgIiwgdGFpbCApCisgIHJlbW92ZWRfbGVuZ3RoID0gbGVuZ3RoKCBsb2dpY2FsX2xpbmUgKSAtIHBvcyAtIGxlbmd0aCggdGFpbCApICsgMQorICBsb2dpY2FsX2xpbmUgPSBzdWJzdHIoIGxvZ2ljYWxfbGluZSwgMCwgcG9zIC0gMSApIHRhaWwKKworCisgIGZvciAoIGsgPSAwOyBrIDwgYXNvcnRpKCBicmVha19wb3MsIGp1bmsgKTsgaysrICkKKyAgICBpZiAoICggcG9zICsgcmVtb3ZlZF9sZW5ndGggKSA8PSBicmVha19wb3Nba10gKQorICAgICAgYnJlYWtfcG9zW2tdID0gYnJlYWtfcG9zW2tdIC0gcmVtb3ZlZF9sZW5ndGg7CisgICAgZWxzZSBpZiAoIHBvcyA8PSBicmVha19wb3Nba10gKQorICAgICAgYnJlYWtfcG9zW2tdID0gLTE7CisKKyAgcmV0dXJuIHJlbW92ZWRfbGVuZ3RoCit9CisKKworZnVuY3Rpb24gc2hyaW5rX3NwYWNlc190b19saW5lYnJlYWsoIHBvcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmssIHBhcnRfc3RyLCByZW1vdmVkX2xlbmd0aCwgaSApCit7CisgIGZvciAoIGkgPSAwOyBpIDwgYXNvcnRpKCBicmVha19wb3MsIGp1bmsgKSAmJiBicmVha19wb3NbaV0gPCBwb3MgOyBpKysgKQorICAgIDsKKworICBpZiAoIGJyZWFrX3Bvc1tpXSA8IDEgKQorICAgIHJldHVybjsKKworICBwYXJ0X3N0ciA9IHN1YnN0ciggbG9naWNhbF9saW5lLCBwb3MsIGJyZWFrX3Bvc1tpXSAtIHBvcyArIDEgKQorICBzdWIoIC9eWyBcdF0rLywgIiAiLCBwYXJ0X3N0ciApCisgIHJlbW92ZWRfbGVuZ3RoID0gKCBicmVha19wb3NbaV0gLSBwb3MgKyAxICkgLSBsZW5ndGgoIHBhcnRfc3RyICkKKworICB0YWlsID0gc3Vic3RyKCBsb2dpY2FsX2xpbmUsIHBvcyArIHJlbW92ZWRfbGVuZ3RoICkKKyAgbG9naWNhbF9saW5lID0gc3Vic3RyKCBsb2dpY2FsX2xpbmUsIDAsIHBvcyAtIDEgKSB0YWlsCisKKyAgZm9yICggOyBpIDwgYXNvcnRpKCBicmVha19wb3MsIGp1bmsgKTsgaSsrICkKKyAgICBicmVha19wb3NbaV0gLT0gcmVtb3ZlZF9sZW5ndGg7CisKKyAgcmV0dXJuIHJlbW92ZWRfbGVuZ3RoCit9CisKKworZnVuY3Rpb24gZGVsZXRlX2xpbmVicmVha3NfaW5fMm5kX3Rva2VuKCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCwgcGFyZW5fZGVwdGgsIGp1bmssIGksIGosIGssIGwgKQoreworICBpZiAoIGxvZ2ljYWxfbGluZSB+IC9eWyBcdF0qI1sgXHRdKmRlZmluZVsgXHRdK1swLTlBLVphLXpfXStcKC8gKQorICB7CisgICAgdGFpbCA9IGxvZ2ljYWxfbGluZQorICAgIHN1YiggL15bIFx0XSojWyBcdF0qZGVmaW5lWyBcdF0rWzAtOUEtWmEtel9dKy8sICIiLCB0YWlsICkKKworICAgIHBhcmVuX2RlcHRoID0gMAorICAgIGwgPSAwCisgICAgaSA9IGxlbmd0aCggbG9naWNhbF9saW5lICkgLSBsZW5ndGgoIHRhaWwgKSArIDEgIyBzZWVrIHRvIHRoZSAxc3Qgb3AgcGFyZW4KKyAgICBqID0gaQorICAgIGRvIHsKKyAgICAgIGlmICggc3Vic3RyKCBsb2dpY2FsX2xpbmUsIGosIDIgKSB+IC9bIFx0XVsgXHRdLyApCisgICAgICAgIGwgPSBzaHJpbmtfc3BhY2VzKCBqICk7CisgICAgICBlbHNlIGlmICggc3Vic3RyKCBsb2dpY2FsX2xpbmUsIGosIDEgKSA9PSAiKCIgKQorICAgICAgICBwYXJlbl9kZXB0aCArPSAxOworICAgICAgZWxzZSBpZiAoIHN1YnN0ciggbG9naWNhbF9saW5lLCBqLCAxICkgPT0gIikiICkKKyAgICAgICAgcGFyZW5fZGVwdGggLT0gMTsKKyAgICAgIGogKz0gMQorICAgIH0gd2hpbGUgKCBqIDwgbGVuZ3RoKCBsb2dpY2FsX2xpbmUgKSAmJiBwYXJlbl9kZXB0aCAhPSAwICkKKworICAgIGZvciAoIGsgPSAwOyBrIDwgYXNvcnRpKCBicmVha19wb3MsIGp1bmsgKTsgaysrICkKKyAgICAgIGlmICggaSA8PSBicmVha19wb3Nba10gJiYgYnJlYWtfcG9zW2tdIDwgaiApCisgICAgICAgIGJyZWFrX3Bvc1trXSA9IC0xOworCisgICAgaWYgKCBsID4gMCApCisgICAgICBzaHJpbmtfc3BhY2VzX3RvX2xpbmVicmVhayggaiApOworICB9Cit9CisKKworQkVHSU57CisgIGluaXRfY3BwX3NyY19saW5lKCkKK30KK3sKKyAgYXBwZW5kX2xpbmUoICQwICkKKyAgaWYgKCAkMCAhfiAvXFwkLyApCisgIHsKKyAgICBkZWxldGVfbGluZWJyZWFrc19pbl8ybmRfdG9rZW4oKQorICAgIHByaW50X2xpbmUoKQorICAgIGluaXRfY3BwX3NyY19saW5lKCkKKyAgfQorfQorRU5EeworICBpZiAoIDAgPCBsZW5ndGgoIGxvZ2ljYWxfbGluZSApICkKKyAgeworICAgIGRlbGV0ZV9saW5lYnJlYWtzX2luXzJuZF90b2tlbigpCisgICAgcHJpbnRfbGluZSgpCisgIH0KK30KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvZ2VuLXB1cmVjLXBhdGNoLnNoIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9hdGFyaS9nZW4tcHVyZWMtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWVjMDUwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYXRhcmkvZ2VuLXB1cmVjLXBhdGNoLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCitUT1BfRElSPS4KK09CSl9ESVI9LgorCitmb3IgeCBpbiAiJEAiCitkbworICBjYXNlIHgiJHgiIGluCisgIHgtLXNyY2Rpcj0qIHwgeC0tdG9wZGlyPSogKQorICAgIFRPUF9ESVI9YGVjaG8gJHggfCBzZWQgJ3MvXi0tW2Etel0qZGlyPS8vJ2AKKyAgICA7OworICB4LS1idWlsZGRpcj0qIHwgeC0tb2JqZGlyPSogKQorICAgIE9CSl9ESVI9YGVjaG8gJHggfCBzZWQgJ3MvXi0tW2Etel0qZGlyPS8vJ2AKKyAgICA7OworICBlc2FjCitkb25lCisKK21rZGlyIC1wICR7T0JKX0RJUn0vYnVpbGRzL2F0YXJpL3RtcC9vcmlnCisKKyggY2QgJHtUT1BfRElSfSAmJiBmaW5kIC4gLW5hbWUgJyouW0NIY2hdJyAtdHlwZSBmIHwgZmdyZXAgLXYgYnVpbGRzL2F0YXJpL3RtcCB8IGNwaW8gLW8gKSB8IFwKKyggY2QgJHtPQkpfRElSfS9idWlsZHMvYXRhcmkvdG1wL29yaWcgJiYgY3BpbyAtaWR1bSApCitjcCAke1RPUF9ESVJ9L2J1aWxkcy9hdGFyaS9kZWZsaW5lam9pbmVyLmF3ayAke09CSl9ESVJ9L2J1aWxkcy9hdGFyaS90bXAKKworcHVzaGQgJHtPQkpfRElSfS9idWlsZHMvYXRhcmkvdG1wCisKKyAgY3AgLXByIG9yaWcgcHVyZWMKKyAgZm9yIGYgaW4gYGNkIG9yaWcgJiYgZmluZCAuIC10eXBlIGZgCisgIGRvCisgICAgZWNobyBmaWx0ZXIgJGYKKyAgICBlbnYgTEFORz1DIGF3ayAtZiBkZWZsaW5lam9pbmVyLmF3ayA8IG9yaWcvJGYgPiBwdXJlYy8kZgorICBkb25lCisKKyAgZWNobyAnI2RlZmluZSBGVDJfQlVJTERfTElCUkFSWScgID4gIHB1cmVjL2luY2x1ZGUvZnQyYnVpbGQuaAorICBlY2hvICcjaW5jbHVkZSAiQVRBUkkuSCInICAgICAgICAgPj4gcHVyZWMvaW5jbHVkZS9mdDJidWlsZC5oCisgIGVudiBMQU5HPUMgYXdrIC1mIGRlZmxpbmVqb2luZXIuYXdrIDwgb3JpZy9pbmNsdWRlL2Z0MmJ1aWxkLmggPj4gcHVyZWMvaW5jbHVkZS9mdDJidWlsZC5oCisKKyAgZW52IExBTkc9QyBkaWZmIC11ciBvcmlnIHB1cmVjID4gLi4vcHVyZWMuZGlmZgorCitwb3BkCitybSAtcmYgJHtPQkpfRElSfS9idWlsZHMvYXRhcmkvdG1wCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZWRjMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYmVvcy9iZW9zLWRlZi5tawpAQCAtMCwwICsxLDc2IEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgYSBCZU9TIHN5c3RlbQorIworIyB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlICJhbnNpLWRlZi5tayIgZmlsZSwgZXhjZXB0IGZvciBCVUlMRCBhbmQgUExBVEZPUk0KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0RFTEVURSAgICA6PSBybSAtZgorQ0FUICAgICAgIDo9IGNhdAorU0VQICAgICAgIDo9IC8KK0JVSUxEX0RJUiA6PSAkKFRPUF9ESVIpL2J1aWxkcy9iZW9zCitQTEFURk9STSAgOj0gYmVvcworCisKKyMgVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgbGlicmFyeSBmaWxlcyBhcmUgcGxhY2VkLgorIworIyBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBzYW1lIGFzICQoT0JKX0RJUik7IGhvd2V2ZXIsIHRoaXMgY2FuIGJlIGNoYW5nZWQKKyMgdG8gc3VpdCBwYXJ0aWN1bGFyIG5lZWRzLgorIworTElCX0RJUiA6PSAkKE9CSl9ESVIpCisKKworIyBUaGUgbmFtZSBvZiB0aGUgZmluYWwgbGlicmFyeSBmaWxlLiAgTm90ZSB0aGF0IHRoZSBET1Mtc3BlY2lmaWMgTWFrZWZpbGUKKyMgdXNlcyBhIHNob3J0ZXIgKDguMykgbmFtZS4KKyMKK0xJQlJBUlkgOj0gbGliJChQUk9KRUNUKQorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC1JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gLUQKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gLWwKKworCisjIFRhcmdldCBmbGFnLgorIworVCA6PSAtbyQoc3BhY2UpCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK0NGTEFHUyA/PSAtYworCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKK0FOU0lGTEFHUyA6PQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Jlb3MvYmVvcy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvYmVvcy9iZW9zLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjN2ZjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Jlb3MvYmVvcy5tawpAQCAtMCwwICsxLDE5IEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgYSBCZU9TIHN5c3RlbQorIworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2Jlb3MvYmVvcy1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5taworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9saW5rX3N0ZC5taworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Jlb3MvZGV0ZWN0Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9iZW9zL2RldGVjdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjNmOTRlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9iZW9zL2RldGVjdC5tawpAQCAtMCwwICsxLDQxIEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRldGVjdCBhbiBCZU9TIGhvc3QgcGxhdGZvcm0uCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisuUEhPTlk6IHNldHVwCisKKworaWZlcSAoJChQTEFURk9STSksYW5zaSkKKworICBpZmRlZiBCRV9IT1NUX0NQVQorCisgICAgUExBVEZPUk0gOj0gYmVvcworCisgIGVuZGlmICMgdGVzdCBNQUNIVFlQRSBiZW9zCitlbmRpZgorCitpZmVxICgkKFBMQVRGT1JNKSxiZW9zKQorCisgIERFTEVURSAgICAgIDo9IHJtIC1mCisgIENBVCAgICAgICAgIDo9IGNhdAorICBTRVAgICAgICAgICA6PSAvCisgIEJVSUxEX0RJUiAgIDo9ICQoVE9QX0RJUikvYnVpbGRzL2Jlb3MKKyAgQ09ORklHX0ZJTEUgOj0gYmVvcy5taworCisgIHNldHVwOiBzdGRfc2V0dXAKKworZW5kaWYgICAjIHRlc3QgUExBVEZPUk0gYmVvcworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2NtYWtlL2lPUy5jbWFrZSBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY21ha2UvaU9TLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzBmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NtYWtlL2lPUy5jbWFrZQpAQCAtMCwwICsxLDI3NSBAQAorIyBpT1MuY21ha2UKKyMKKyMgQ29weXJpZ2h0IDIwMTQtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFdyaXR0ZW4gYnkgRGF2aWQgV2ltc2V5IDxkYXZpZEB3aW1zZXkudXM+CisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisjCisjCisjIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gdGhlIGZpbGVzIGBQbGF0Zm9ybS9EYXJ3aW4uY21ha2UnIGFuZAorIyBgUGxhdGZvcm0vVW5peFBhdGhzLmNtYWtlJywgd2hpY2ggYXJlIHBhcnQgb2YgQ01ha2UgMi44LjQuICBJdCBoYXMgYmVlbgorIyBhbHRlcmVkIGZvciBpT1MgZGV2ZWxvcG1lbnQuCisKKworIyBPcHRpb25zCisjIC0tLS0tLS0KKyMKKyMgICBJT1NfUExBVEZPUk0gPSBPUyB8IFNJTVVMQVRPUgorIworIyAgICAgVGhpcyBkZWNpZGVzIHdoZXRoZXIgU0RLUyBhcmUgc2VsZWN0ZWQgZnJvbSB0aGUgYGlQaG9uZU9TLnBsYXRmb3JtJyBvcgorIyAgICAgYGlQaG9uZVNpbXVsYXRvci5wbGF0Zm9ybScgZm9sZGVycy4KKyMKKyMgICAgIE9TIC0gdGhlIGRlZmF1bHQsIHVzZWQgdG8gYnVpbGQgZm9yIGlQaG9uZSBhbmQgaVBhZCBwaHlzaWNhbCBkZXZpY2VzLAorIyAgICAgICB3aGljaCBoYXZlIGFuIEFSTSBhcmNoaXRlY3R1cmUuCisjICAgICBTSU1VTEFUT1IgLSB1c2VkIHRvIGJ1aWxkIGZvciB0aGUgU2ltdWxhdG9yIHBsYXRmb3Jtcywgd2hpY2ggaGF2ZSBhbgorIyAgICAgICB4ODYgYXJjaGl0ZWN0dXJlLgorIworIyAgIENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCA9IC9wYXRoL3RvL3BsYXRmb3JtL0RldmVsb3BlciBmb2xkZXIKKyMKKyMgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgYXV0b21hdGljYWxseSBjaG9zZW4gYmFzZWQgb24gdGhlCisjICAgICBJT1NfUExBVEZPUk0gdmFsdWUgYWJvdmUuICBJZiB5b3UgbWFudWFsbHkgc2V0IHRoaXMgdmFyaWFibGUsIGl0CisjICAgICBvdmVycmlkZXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gYW5kIGZvcmNlcyB0aGUgdXNlIG9mIGEgcGFydGljdWxhcgorIyAgICAgRGV2ZWxvcGVyIFBsYXRmb3JtLgorIworIyAgIENNQUtFX0lPU19TREtfUk9PVCA9IC9wYXRoL3RvL3BsYXRmb3JtL0RldmVsb3Blci9TREtzL1NESyBmb2xkZXIKKyMKKyMgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgYXV0b21hdGljYWxseSBjaG9zZW4gYmFzZWQgb24gdGhlCisjICAgICBDTUFLRV9JT1NfREVWRUxPUEVSX1JPT1QgdmFsdWUuICBJbiB0aGlzIGNhc2UgaXQgaXMgYWx3YXlzIHRoZSBtb3N0CisjICAgICB1cC10by1kYXRlIFNESyBmb3VuZCBpbiB0aGUgQ01BS0VfSU9TX0RFVkVMT1BFUl9ST09UIHBhdGguICBJZiB5b3UKKyMgICAgIG1hbnVhbGx5IHNldCB0aGlzIHZhcmlhYmxlLCBpdCBmb3JjZXMgdGhlIHVzZSBvZiBhIHNwZWNpZmljIFNESworIyAgICAgdmVyc2lvbi4KKyMKKyMKKyMgTWFjcm9zCisjIC0tLS0tLQorIworIyAgIHNldF94Y29kZV9wcm9wZXJ0eSAoVEFSR0VUIFhDT0RFX1BST1BFUlRZIFhDT0RFX1ZBTFVFKQorIworIyAgICAgQSBjb252ZW5pZW5jZSBtYWNybyBmb3Igc2V0dGluZyBYY29kZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9uIHRhcmdldHMuCisjCisjICAgICBFeGFtcGxlOgorIworIyAgICAgICBzZXRfeGNvZGVfcHJvcGVydHkobXlpb3NsaWIgSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgIjMuMSIpCisjCisjICAgZmluZF9ob3N0X3BhY2thZ2UgKFBST0dSQU0gQVJHUykKKyMKKyMgICAgIEEgbWFjcm8gdG8gZmluZCBleGVjdXRhYmxlIHByb2dyYW1zIG9uIHRoZSBob3N0IHN5c3RlbSwgbm90IHdpdGhpbiB0aGUKKyMgICAgIGlPUyBlbnZpcm9ubWVudC4gIFRoYW5rcyB0byB0aGUgYGFuZHJvaWQtY21ha2UnIHByb2plY3QgZm9yIHByb3ZpZGluZworIyAgICAgdGhlIGNvbW1hbmQuCisKKworIyBzdGFuZGFyZCBzZXR0aW5ncworc2V0KENNQUtFX1NZU1RFTV9OQU1FIERhcndpbikKK3NldChDTUFLRV9TWVNURU1fVkVSU0lPTiAxKQorc2V0KFVOSVggVHJ1ZSkKK3NldChBUFBMRSBUcnVlKQorc2V0KElPUyBUcnVlKQorCisjIHJlcXVpcmVkIGFzIG9mIGNtYWtlIDIuOC4xMAorc2V0KENNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCAiIgorICBDQUNIRSBTVFJJTkcgIkZvcmNlIHVuc2V0IG9mIHRoZSBkZXBsb3ltZW50IHRhcmdldCBmb3IgaU9TIiBGT1JDRQorKQorCisjIGRldGVybWluZSB0aGUgY21ha2UgaG9zdCBzeXN0ZW0gdmVyc2lvbiBzbyB3ZSBrbm93IHdoZXJlIHRvIGZpbmQgdGhlIGlPUworIyBTREtzCitmaW5kX3Byb2dyYW0oQ01BS0VfVU5BTUUgdW5hbWUgL2JpbiAvdXNyL2JpbiAvdXNyL2xvY2FsL2JpbikKK2lmIChDTUFLRV9VTkFNRSkKKyAgZXhlY19wcm9ncmFtKHVuYW1lIEFSR1MgLXIgT1VUUFVUX1ZBUklBQkxFIENNQUtFX0hPU1RfU1lTVEVNX1ZFUlNJT04pCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeKFswLTldKylcXC4oWzAtOV0rKS4qJCIgIlxcMSIKKyAgICBEQVJXSU5fTUFKT1JfVkVSU0lPTiAiJHtDTUFLRV9IT1NUX1NZU1RFTV9WRVJTSU9OfSIpCitlbmRpZiAoQ01BS0VfVU5BTUUpCisKKyMgZm9yY2UgdGhlIGNvbXBpbGVycyB0byBnY2MgZm9yIGlPUworaW5jbHVkZShDTWFrZUZvcmNlQ29tcGlsZXIpCitDTUFLRV9GT1JDRV9DX0NPTVBJTEVSKGdjYyBnY2MpCitDTUFLRV9GT1JDRV9DWFhfQ09NUElMRVIoZysrIGcrKykKKworIyBza2lwIHRoZSBwbGF0Zm9ybSBjb21waWxlciBjaGVja3MgZm9yIGNyb3NzIGNvbXBpbGluZworc2V0KENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUyBUUlVFKQorc2V0KENNQUtFX0NfQ09NUElMRVJfV09SS1MgVFJVRSkKKworIyBhbGwgaU9TL0RhcndpbiBzcGVjaWZpYyBzZXR0aW5ncyAtIHNvbWUgbWF5IGJlIHJlZHVuZGFudAorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCAibGliIikKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVggIi5keWxpYiIpCitzZXQoQ01BS0VfU0hBUkVEX01PRFVMRV9QUkVGSVggImxpYiIpCitzZXQoQ01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVggIi5zbyIpCitzZXQoQ01BS0VfTU9EVUxFX0VYSVNUUyAxKQorc2V0KENNQUtFX0RMX0xJQlMgIiIpCisKK3NldChDTUFLRV9DX09TWF9DT01QQVRJQklMSVRZX1ZFUlNJT05fRkxBRworICAiLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAiKQorc2V0KENNQUtFX0NfT1NYX0NVUlJFTlRfVkVSU0lPTl9GTEFHCisgICItY3VycmVudF92ZXJzaW9uICIpCitzZXQoQ01BS0VfQ1hYX09TWF9DT01QQVRJQklMSVRZX1ZFUlNJT05fRkxBRworICAiJHtDTUFLRV9DX09TWF9DT01QQVRJQklMSVRZX1ZFUlNJT05fRkxBR30iKQorc2V0KENNQUtFX0NYWF9PU1hfQ1VSUkVOVF9WRVJTSU9OX0ZMQUcKKyAgIiR7Q01BS0VfQ19PU1hfQ1VSUkVOVF9WRVJTSU9OX0ZMQUd9IikKKworIyBoaWRkZW4gdmlzaWJpbGl0eSBpcyByZXF1aXJlZCBmb3IgY3h4IG9uIGlPUworc2V0KENNQUtFX0NfRkxBR1NfSU5JVCAiIikKK3NldChDTUFLRV9DWFhfRkxBR1NfSU5JVAorICAiLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcyAtZnZpc2liaWxpdHk9aGlkZGVuIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIpCisKK3NldChDTUFLRV9DX0xJTktfRkxBR1MKKyAgIi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0ICR7Q01BS0VfQ19MSU5LX0ZMQUdTfSIpCitzZXQoQ01BS0VfQ1hYX0xJTktfRkxBR1MKKyAgIi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0ICR7Q01BS0VfQ1hYX0xJTktfRkxBR1N9IikKKworc2V0KENNQUtFX1BMQVRGT1JNX0hBU19JTlNUQUxMTkFNRSAxKQorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV9DX0ZMQUdTCisgICItZHluYW1pY2xpYiAtaGVhZGVycGFkX21heF9pbnN0YWxsX25hbWVzIikKK3NldChDTUFLRV9TSEFSRURfTU9EVUxFX0NSRUFURV9DX0ZMQUdTCisgICItYnVuZGxlIC1oZWFkZXJwYWRfbWF4X2luc3RhbGxfbmFtZXMiKQorc2V0KENNQUtFX1NIQVJFRF9NT0RVTEVfTE9BREVSX0NfRkxBRworICAiLVdsLC1idW5kbGVfbG9hZGVyLCIpCitzZXQoQ01BS0VfU0hBUkVEX01PRFVMRV9MT0FERVJfQ1hYX0ZMQUcKKyAgIi1XbCwtYnVuZGxlX2xvYWRlciwiKQorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUworICAiLmR5bGliIiAiLnNvIiAiLmEiKQorCisjIGhhY2s6IElmIGEgbmV3IGNtYWtlICh3aGljaCB1c2VzIENNQUtFX0lOU1RBTExfTkFNRV9UT09MKSBydW5zIG9uIGFuIG9sZAorIyAgICAgICBidWlsZCB0cmVlICh3aGVyZSBgaW5zdGFsbF9uYW1lX3Rvb2wnIHdhcyBoYXJkY29kZWQpLCBhbmQgd2hlcmUKKyMgICAgICAgQ01BS0VfSU5TVEFMTF9OQU1FX1RPT0wgaXNuJ3QgaW4gdGhlIGNhY2hlIGFuZCBzdGlsbCBjbWFrZSBkaWRuJ3QKKyMgICAgICAgZmFpbCBpbiBgQ01ha2VGaW5kQmluVXRpbHMuY21ha2UnIChiZWNhdXNlIGl0IGlzbid0IHJlcnVuKSwgaGFyZGNvZGUKKyMgICAgICAgQ01BS0VfSU5TVEFMTF9OQU1FX1RPT0wgaGVyZSB0byBgaW5zdGFsbF9uYW1lX3Rvb2wnIHNvIGl0IGJlaGF2ZXMgYXMKKyMgICAgICAgaXQgZGlkIGJlZm9yZS4KK2lmIChOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX05BTUVfVE9PTCkKKyAgZmluZF9wcm9ncmFtKENNQUtFX0lOU1RBTExfTkFNRV9UT09MIGluc3RhbGxfbmFtZV90b29sKQorZW5kaWYgKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfTkFNRV9UT09MKQorCisjIHNldCB1cCBpT1MgcGxhdGZvcm0gdW5sZXNzIHNwZWNpZmllZCBtYW51YWxseSB3aXRoIElPU19QTEFURk9STQoraWYgKE5PVCBERUZJTkVEIElPU19QTEFURk9STSkKKyAgc2V0KElPU19QTEFURk9STSAiT1MiKQorZW5kaWYgKE5PVCBERUZJTkVEIElPU19QTEFURk9STSkKKworc2V0KElPU19QTEFURk9STSAke0lPU19QTEFURk9STX0gQ0FDSEUgU1RSSU5HICJUeXBlIG9mIGlPUyBQbGF0Zm9ybSIpCisKKyMgY2hlY2sgdGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBhbmQgc2V0dXAgZm9yIGRldmVsb3BlciByb290CitpZiAoJHtJT1NfUExBVEZPUk19IFNUUkVRVUFMICJPUyIpCisgIHNldChJT1NfUExBVEZPUk1fTE9DQVRJT04gImlQaG9uZU9TLnBsYXRmb3JtIikKKworICAjIHRoaXMgY2F1c2VzIHRoZSBpbnN0YWxsZXJzIHRvIHByb3Blcmx5IGxvY2F0ZSB0aGUgb3V0cHV0IGxpYnJhcmllcworICBzZXQoQ01BS0VfWENPREVfRUZGRUNUSVZFX1BMQVRGT1JNUyAiLWlwaG9uZW9zIikKKworZWxzZWlmICgke0lPU19QTEFURk9STX0gU1RSRVFVQUwgIlNJTVVMQVRPUiIpCisgIHNldChJT1NfUExBVEZPUk1fTE9DQVRJT04gImlQaG9uZVNpbXVsYXRvci5wbGF0Zm9ybSIpCisKKyAgIyB0aGlzIGNhdXNlcyB0aGUgaW5zdGFsbGVycyB0byBwcm9wZXJseSBsb2NhdGUgdGhlIG91dHB1dCBsaWJyYXJpZXMKKyAgc2V0KENNQUtFX1hDT0RFX0VGRkVDVElWRV9QTEFURk9STVMgIi1pcGhvbmVzaW11bGF0b3IiKQorCitlbHNlICgke0lPU19QTEFURk9STX0gU1RSRVFVQUwgIk9TIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJVbnN1cHBvcnRlZCBJT1NfUExBVEZPUk0gdmFsdWUgc2VsZWN0ZWQuICBQbGVhc2UgY2hvb3NlIE9TIG9yIFNJTVVMQVRPUi4iKQorCitlbmRpZiAoJHtJT1NfUExBVEZPUk19IFNUUkVRVUFMICJPUyIpCisKKyMgc2V0IHVwIGlPUyBkZXZlbG9wZXIgbG9jYXRpb24gdW5sZXNzIHNwZWNpZmllZCBtYW51YWxseSB3aXRoCisjIENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCAtLQorIyBub3RlIHRoYXQgWGNvZGUgNC4zIGNoYW5nZWQgdGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbjsgY2hvb3NlIHRoZSBtb3N0CisjIHJlY2VudCBvbmUgYXZhaWxhYmxlCitzZXQoWENPREVfUE9TVF80M19ST09UCisgICIvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvUGxhdGZvcm1zLyR7SU9TX1BMQVRGT1JNX0xPQ0FUSU9OfS9EZXZlbG9wZXIiKQorc2V0KFhDT0RFX1BSRV80M19ST09UCisgICIvRGV2ZWxvcGVyL1BsYXRmb3Jtcy8ke0lPU19QTEFURk9STV9MT0NBVElPTn0vRGV2ZWxvcGVyIikKKworaWYgKE5PVCBERUZJTkVEIENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCkKKyAgaWYgKEVYSVNUUyAke1hDT0RFX1BPU1RfNDNfUk9PVH0pCisgICAgc2V0KENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCAke1hDT0RFX1BPU1RfNDNfUk9PVH0pCisgIGVsc2VpZiAoRVhJU1RTICR7WENPREVfUFJFXzQzX1JPT1R9KQorICAgIHNldChDTUFLRV9JT1NfREVWRUxPUEVSX1JPT1QgJHtYQ09ERV9QUkVfNDNfUk9PVH0pCisgIGVuZGlmIChFWElTVFMgJHtYQ09ERV9QT1NUXzQzX1JPT1R9KQorZW5kaWYgKE5PVCBERUZJTkVEIENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCkKKworc2V0KENNQUtFX0lPU19ERVZFTE9QRVJfUk9PVCAke0NNQUtFX0lPU19ERVZFTE9QRVJfUk9PVH0KKyAgQ0FDSEUgUEFUSCAiTG9jYXRpb24gb2YgaU9TIFBsYXRmb3JtIgorKQorCisjIGZpbmQgYW5kIHVzZSB0aGUgbW9zdCByZWNlbnQgaU9TIFNESyB1bmxlc3Mgc3BlY2lmaWVkIG1hbnVhbGx5IHdpdGgKKyMgQ01BS0VfSU9TX1NES19ST09UCitpZiAoTk9UIERFRklORUQgQ01BS0VfSU9TX1NES19ST09UKQorICBmaWxlKEdMT0IgX0NNQUtFX0lPU19TREtTICIke0NNQUtFX0lPU19ERVZFTE9QRVJfUk9PVH0vU0RLcy8qIikKKyAgaWYgKF9DTUFLRV9JT1NfU0RLUykKKyAgICBsaXN0KFNPUlQgX0NNQUtFX0lPU19TREtTKQorICAgIGxpc3QoUkVWRVJTRSBfQ01BS0VfSU9TX1NES1MpCisgICAgbGlzdChHRVQgX0NNQUtFX0lPU19TREtTIDAgQ01BS0VfSU9TX1NES19ST09UKQorICBlbHNlIChfQ01BS0VfSU9TX1NES1MpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIk5vIGlPUyBTREsncyBmb3VuZCBpbiBkZWZhdWx0IHNlYXJjaCBwYXRoICR7Q01BS0VfSU9TX0RFVkVMT1BFUl9ST09UfS4gIE1hbnVhbGx5IHNldCBDTUFLRV9JT1NfU0RLX1JPT1Qgb3IgaW5zdGFsbCB0aGUgaU9TIFNESy4iKQorICBlbmRpZiAoX0NNQUtFX0lPU19TREtTKQorCisgIG1lc3NhZ2UoU1RBVFVTICJUb29sY2hhaW4gdXNpbmcgZGVmYXVsdCBpT1MgU0RLOiAke0NNQUtFX0lPU19TREtfUk9PVH0iKQorZW5kaWYgKE5PVCBERUZJTkVEIENNQUtFX0lPU19TREtfUk9PVCkKKworc2V0KENNQUtFX0lPU19TREtfUk9PVCAke0NNQUtFX0lPU19TREtfUk9PVH0KKyAgQ0FDSEUgUEFUSCAiTG9jYXRpb24gb2YgdGhlIHNlbGVjdGVkIGlPUyBTREsiCispCisKKyMgc2V0IHRoZSBzeXNyb290IGRlZmF1bHQgdG8gdGhlIG1vc3QgcmVjZW50IFNESworc2V0KENNQUtFX09TWF9TWVNST09UICR7Q01BS0VfSU9TX1NES19ST09UfQorICBDQUNIRSBQQVRIICJTeXNyb290IHVzZWQgZm9yIGlPUyBzdXBwb3J0IgorKQorCisjIHNldCB0aGUgYXJjaGl0ZWN0dXJlIGZvciBpT1MgLS0KKyMgbm90ZSB0aGF0IGN1cnJlbnRseSBib3RoIEFSQ0hTX1NUQU5EQVJEXzMyX0JJVCBhbmQKKyMgQVJDSFNfVU5JVkVSU0FMX0lQSE9ORV9PUyBzZXQgYXJtdjcgb25seSwgc28gc2V0IGJvdGggbWFudWFsbHkKK2lmICgke0lPU19QTEFURk9STX0gU1RSRVFVQUwgIk9TIikKKyAgc2V0KElPU19BUkNIICQoQVJDSFNfU1RBTkRBUkRfMzJfNjRfQklUKSkKK2Vsc2UgKCR7SU9TX1BMQVRGT1JNfSBTVFJFUVVBTCAiT1MiKQorICBzZXQoSU9TX0FSQ0ggaTM4NikKK2VuZGlmICgke0lPU19QTEFURk9STX0gU1RSRVFVQUwgIk9TIikKKworc2V0KENNQUtFX09TWF9BUkNISVRFQ1RVUkVTICR7SU9TX0FSQ0h9CisgIENBQ0hFIHN0cmluZyAiQnVpbGQgYXJjaGl0ZWN0dXJlIGZvciBpT1MiCispCisKKyMgc2V0IHRoZSBmaW5kIHJvb3QgdG8gdGhlIGlPUyBkZXZlbG9wZXIgcm9vdHMgYW5kIHRvIHVzZXIgZGVmaW5lZCBwYXRocworc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRICisgICR7Q01BS0VfSU9TX0RFVkVMT1BFUl9ST09UfQorICAke0NNQUtFX0lPU19TREtfUk9PVH0KKyAgJHtDTUFLRV9QUkVGSVhfUEFUSH0KKyAgQ0FDSEUgc3RyaW5nICAiaU9TIGZpbmQgc2VhcmNoIHBhdGggcm9vdCIKKykKKworIyBkZWZhdWx0IHRvIHNlYXJjaGluZyBmb3IgZnJhbWV3b3JrcyBmaXJzdAorc2V0KENNQUtFX0ZJTkRfRlJBTUVXT1JLIEZJUlNUKQorCisjIHNldCB1cCB0aGUgZGVmYXVsdCBzZWFyY2ggZGlyZWN0b3JpZXMgZm9yIGZyYW1ld29ya3MKK3NldChDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgKKyAgJHtDTUFLRV9JT1NfU0RLX1JPT1R9L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgJHtDTUFLRV9JT1NfU0RLX1JPT1R9L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzCisgICR7Q01BS0VfSU9TX1NES19ST09UfS9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzCispCisKKyMgb25seSBzZWFyY2ggdGhlIGlPUyBTREtzLCBub3QgdGhlIHJlbWFpbmRlciBvZiB0aGUgaG9zdCBmaWxlc3lzdGVtCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE9OTFkpCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkpCitzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkpCisKKyMgdGhpcyBsaXR0bGUgbWFjcm8gbGV0cyB5b3Ugc2V0IGFueSBYY29kZSBzcGVjaWZpYyBwcm9wZXJ0eQorbWFjcm8oc2V0X3hjb2RlX3Byb3BlcnR5IFRBUkdFVCBYQ09ERV9QUk9QRVJUWSBYQ09ERV9WQUxVRSkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke1RBUkdFVH0KKyAgICBQUk9QRVJUWSBYQ09ERV9BVFRSSUJVVEVfJHtYQ09ERV9QUk9QRVJUWX0gJHtYQ09ERV9WQUxVRX0pCitlbmRtYWNybyhzZXRfeGNvZGVfcHJvcGVydHkpCisKKyMgdGhpcyBtYWNybyBsZXRzIHlvdSBmaW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgb24gdGhlIGhvc3Qgc3lzdGVtCittYWNybyhmaW5kX2hvc3RfcGFja2FnZSkKKyAgc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBORVZFUikKKyAgc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBORVZFUikKKyAgc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBORVZFUikKKyAgc2V0KElPUyBGQUxTRSkKKworICBmaW5kX3BhY2thZ2UoJHtBUkdOfSkKKworICBzZXQoSU9TIFRSVUUpCisgIHNldChDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gT05MWSkKKyAgc2V0KENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZKQorICBzZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkpCitlbmRtYWNybyhmaW5kX2hvc3RfcGFja2FnZSkKKworIyBlb2YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY2NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci9hbnNpLWNjLm1rCkBAIC0wLDAgKzEsODAgQEAKKyMKKyMgRnJlZVR5cGUgMiBnZW5lcmljIHBzZXVkbyBBTlNJIGNvbXBpbGVyCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIENvbXBpbGVyIGNvbW1hbmQgbGluZSBuYW1lCisjCitDQyAgICAgICAgICAgOj0gY2MKK0NPTVBJTEVSX1NFUCA6PSAkKFNFUCkKKworCisjIFRoZSBvYmplY3QgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbiBiZQorIyAubywgLnRjbywgLm9iaiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK08gIDo9IG8KK1NPIDo9IG8KKworIyBUaGUgbGlicmFyeSBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuCisjIGJlIC5hLCAubGliLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworQSAgOj0gYQorU0EgOj0gYQorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC1JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gLUQKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gLWwKKworCisjIFRhcmdldCBmbGFnLgorIworVCA6PSAtbyQoc3BhY2UpCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK0NGTEFHUyA/PSAtYworCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKKyMgIHdlIGFzc3VtZSB0aGUgY29tcGlsZXIgaXMgYWxyZWFkeSBzdHJpY3RseSBBTlNJCisjCitBTlNJRkxBR1MgOj0KKworCisjIExpYnJhcnkgbGlua2luZworIworQ0xFQU5fTElCUkFSWSA/PSAkKERFTEVURSkgJChzdWJzdCAvLCQoU0VQKSwkKFBST0pFQ1RfTElCUkFSWSkpCitMSU5LX0xJQlJBUlkgICA9ICQoQVIpIC1yICRAICQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChPQkpFQ1RTX0xJU1QpKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2JjYy1kZXYubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2JjYy1kZXYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiOTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvYmNjLWRldi5tawpAQCAtMCwwICsxLDg2IEBACisjCisjICBGcmVlVHlwZSAyIEJvcmxhbmQgQysrLXNwZWNpZmljIHdpdGggTk8gT1BUSU1JWkFUSU9OUyArIERFQlVHR0lORworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBDb21waWxlciBjb21tYW5kIGxpbmUgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGJjYzMyCitDT01QSUxFUl9TRVAgOj0gJChTRVApCisKKworIyBUaGUgb2JqZWN0IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4gYmUKKyMgLm8sIC50Y28sIC5vYmosIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitPICA6PSBvYmoKK1NPIDo9IG9iagorCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBsaWIKK1NBIDo9IGxpYgorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC1JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gLUQKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0KKworCisjIFRhcmdldCBmbGFnIC0tIG5vIHRyYWlsaW5nIHNwYWNlLgorIworVCAgOj0gLW8KK1RFIDo9IC1lCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK0NGTEFHUyA/PSAtcSAtYyAteSAtZCAtdiAtT2QgLXctcGFyIC13LWNjYyAtdy1yY2ggLXctcHJvIC13LWF1cworCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKK0FOU0lGTEFHUyA6PSAtQQorCisKKyMgTGlicmFyeSBsaW5raW5nCisjCitDTEVBTl9MSUJSQVJZID89ICQoREVMRVRFKSAkKHN1YnN0IC8sJChTRVApLCQoUFJPSkVDVF9MSUJSQVJZKSkKK0xJTktfTElCUkFSWSAgID0gdGxpYiAvdSAvUDEyOCAkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoT0JKRUNUU19MSVNUOiU9KyUpKQorCisKKyMgQm9ybGFuZCBDKysgc3BlY2lmaWMgdGVtcG9yYXJ5IGZpbGVzCisjCitDTEVBTiArPSBcCisgICAgICAgICAkKHN1YnN0IC8sJChTRVApLCQoVE9QX0RJUikvYXBpbmFtZXMuJChPKSkgXAorICAgICAgICAgJChzdWJzdCAvLCQoU0VQKSwkKE9CSl9ESVIpL2FwaW5hbWVzLnRkcykKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci9iY2MubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2JjYy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgzODQwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci9iY2MubWsKQEAgLTAsMCArMSw4NiBAQAorIworIyBGcmVlVHlwZSAyIEJvcmxhbmQgQysrLXNwZWNpZmljIHJ1bGVzCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIENvbXBpbGVyIGNvbW1hbmQgbGluZSBuYW1lCisjCitDQyAgICAgICAgICAgOj0gYmNjMzIKK0NPTVBJTEVSX1NFUCA6PSAkKFNFUCkKKworCisjIFRoZSBvYmplY3QgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbiBiZQorIyAubywgLnRjbywgLm9iaiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK08gIDo9IG9iagorU08gOj0gb2JqCisKKyMgVGhlIGxpYnJhcnkgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbgorIyBiZSAuYSwgLmxpYiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK0EgIDo9IGxpYgorU0EgOj0gbGliCisKKworIyBQYXRoIGluY2x1c2lvbiBmbGFnLiAgU29tZSBjb21waWxlcnMgdXNlIGEgZGlmZmVyZW50IGZsYWcgdGhhbiBgLUknIHRvCisjIHNwZWNpZnkgYW4gYWRkaXRpb25hbCBpbmNsdWRlIHBhdGguICBFeGFtcGxlcyBhcmUgYC9pPScgb3IgYC1KJy4KKyMKK0kgOj0gLUkKKworCisjIEMgZmxhZyB1c2VkIHRvIGRlZmluZSBhIG1hY3JvIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gb2YgYSBnaXZlbiBzb3VyY2UKKyMgb2JqZWN0LiAgVXN1YWxseSBpdCBpcyBgLUQnIGxpa2UgaW4gYC1EREVCVUcnLgorIworRCA6PSAtRAorCisKKyMgVGhlIGxpbmsgZmxhZyB1c2VkIHRvIHNwZWNpZnkgYSBnaXZlbiBsaWJyYXJ5IGZpbGUgb24gbGluay4gIE5vdGUgdGhhdAorIyB0aGlzIGlzIG9ubHkgdXNlZCB0byBjb21waWxlIHRoZSBkZW1vIHByb2dyYW1zLCBub3QgdGhlIGxpYnJhcnkgaXRzZWxmLgorIworTCA6PQorCisKKyMgVGFyZ2V0IGZsYWcgLS0gbm8gdHJhaWxpbmcgc3BhY2UuCisjCitUICA6PSAtbworVEUgOj0gLWUKKworCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworQ0ZMQUdTID89IC1jIC1xIC15IC1kIC12IC1PZCAtdy1wYXIgLXctY2NjIC13LXJjaCAtdy1wcm8gLXctYXVzCisKKyMgQU5TSUZMQUdTOiBQdXQgdGhlcmUgdGhlIGZsYWdzIHVzZWQgdG8gbWFrZSB5b3VyIGNvbXBpbGVyIEFOU0ktY29tcGxpYW50LgorIworQU5TSUZMQUdTIDo9IC1BCisKKworIyBMaWJyYXJ5IGxpbmtpbmcKKyMKK0NMRUFOX0xJQlJBUlkgPz0gJChERUxFVEUpICQoc3Vic3QgLywkKFNFUCksJChQUk9KRUNUX0xJQlJBUlkpKQorTElOS19MSUJSQVJZICAgPSB0bGliIC91IC9QMTI4ICQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChPQkpFQ1RTX0xJU1Q6JT0rJSkpCisKKworIyBCb3JsYW5kIEMrKyBzcGVjaWZpYyB0ZW1wb3JhcnkgZmlsZXMKKyMKK0NMRUFOICs9IFwKKyAgICAgICAgICQoc3Vic3QgLywkKFNFUCksJChUT1BfRElSKS9hcGluYW1lcy4kKE8pKSBcCisgICAgICAgICAkKHN1YnN0IC8sJChTRVApLCQoT0JKX0RJUikvYXBpbmFtZXMudGRzKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2VteC5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvZW14Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZmUzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2VteC5tawpAQCAtMCwwICsxLDc3IEBACisjCisjIEZyZWVUeXBlIDIgZW14LXNwZWNpZmljIGRlZmluaXRpb25zCisjCisKKworIyBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIENvbXBpbGVyIGNvbW1hbmQgbGluZSBuYW1lCisjCitDQyAgICAgICAgICAgOj0gc2V0IEdDQ09QVD0iLWFuc2kgLXBlZGFudGljIjsgZ2NjCitDT01QSUxFUl9TRVAgOj0gLworCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gbworU08gOj0gbworCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBhCitTQSA6PSBhCisKKworIyBQYXRoIGluY2x1c2lvbiBmbGFnLiAgU29tZSBjb21waWxlcnMgdXNlIGEgZGlmZmVyZW50IGZsYWcgdGhhbiBgLUknIHRvCisjIHNwZWNpZnkgYW4gYWRkaXRpb25hbCBpbmNsdWRlIHBhdGguICBFeGFtcGxlcyBhcmUgYC9pPScgb3IgYC1KJy4KKyMKK0kgOj0gLUkKKworCisjIEMgZmxhZyB1c2VkIHRvIGRlZmluZSBhIG1hY3JvIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gb2YgYSBnaXZlbiBzb3VyY2UKKyMgb2JqZWN0LiAgVXN1YWxseSBpdCBpcyBgLUQnIGxpa2UgaW4gYC1EREVCVUcnLgorIworRCA6PSAtRAorCisKKyMgVGhlIGxpbmsgZmxhZyB1c2VkIHRvIHNwZWNpZnkgYSBnaXZlbiBsaWJyYXJ5IGZpbGUgb24gbGluay4gIE5vdGUgdGhhdAorIyB0aGlzIGlzIG9ubHkgdXNlZCB0byBjb21waWxlIHRoZSBkZW1vIHByb2dyYW1zLCBub3QgdGhlIGxpYnJhcnkgaXRzZWxmLgorIworTCA6PSAtbAorCisKKyMgVGFyZ2V0IGZsYWcuCisjCitUIDo9IC1vJChzcGFjZSkKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK0NGTEFHUyA/PSAtYyAtZyAtTzYgLVdhbGwKKworIyBBTlNJRkxBR1M6IFB1dCB0aGVyZSB0aGUgZmxhZ3MgdXNlZCB0byBtYWtlIHlvdXIgY29tcGlsZXIgQU5TSS1jb21wbGlhbnQuCisjCitBTlNJRkxBR1MgOj0KKworCisjIExpYnJhcnkgbGlua2luZworIworQ0xFQU5fTElCUkFSWSA/PSAkKERFTEVURSkgJChzdWJzdCAvLCQoU0VQKSwkKFBST0pFQ1RfTElCUkFSWSkpCitMSU5LX0xJQlJBUlkgICA9ICQoZm9yZWFjaCBtLCQoT0JKRUNUU19MSVNUKSwkKEFSKSAtciAkQCAkKG0pOykgZWNobyA+IG51bAorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3ODlhZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tawpAQCAtMCwwICsxLDk1IEBACisjCisjIEZyZWVUeXBlIDIgZ2NjLXNwZWNpZmljIHdpdGggTk8gT1BUSU1JWkFUSU9OUyArIERFQlVHR0lORworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBDb21waWxlciBjb21tYW5kIGxpbmUgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGdjYworQ09NUElMRVJfU0VQIDo9IC8KKworCisjIFRoZSBvYmplY3QgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbiBiZQorIyAubywgLnRjbywgLm9iaiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK08gIDo9IG8KK1NPIDo9IG8KKworIyBUaGUgbGlicmFyeSBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuCisjIGJlIC5hLCAubGliLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworQSAgOj0gYQorU0EgOj0gYQorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC1JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gLUQKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gLWwKKworCisjIFRhcmdldCBmbGFnLgorIworVCA6PSAtbyQoc3BhY2UpCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK2lmbmRlZiBDRkxBR1MKKyAgaWZlcSAoJChmaW5kc3RyaW5nIGcrKywkKENDKSksKQorICAgIG5lc3RlZF9leHRlcm5zICAgIDo9IC1XbmVzdGVkLWV4dGVybnMKKyAgICBzdHJpY3RfcHJvdG90eXBlcyA6PSAtV3N0cmljdC1wcm90b3R5cGVzCisgIGVuZGlmCisKKyAgQ0ZMQUdTIDo9IC1jIC1nIC1PMCBcCisgICAgICAgICAgICAtV2FsbCBcCisgICAgICAgICAgICAtVyBcCisgICAgICAgICAgICAtV3VuZGVmIFwKKyAgICAgICAgICAgIC1Xc2hhZG93IFwKKyAgICAgICAgICAgIC1XcG9pbnRlci1hcml0aCBcCisgICAgICAgICAgICAtV3dyaXRlLXN0cmluZ3MgXAorICAgICAgICAgICAgLVdyZWR1bmRhbnQtZGVjbHMgXAorICAgICAgICAgICAgLVduby1sb25nLWxvbmcgXAorICAgICAgICAgICAgJChuZXN0ZWRfZXh0ZXJucykgXAorICAgICAgICAgICAgJChzdHJpY3RfcHJvdG90eXBlcykKK2VuZGlmCisKKyMgQU5TSUZMQUdTOiBQdXQgdGhlcmUgdGhlIGZsYWdzIHVzZWQgdG8gbWFrZSB5b3VyIGNvbXBpbGVyIEFOU0ktY29tcGxpYW50LgorIworQU5TSUZMQUdTIDo9IC1hbnNpIC1wZWRhbnRpYworCisKKyMgTGlicmFyeSBsaW5raW5nCisjCitDTEVBTl9MSUJSQVJZID89ICQoREVMRVRFKSAkKHN1YnN0IC8sJChTRVApLCQoUFJPSkVDVF9MSUJSQVJZKSkKK0xJTktfTElCUkFSWSAgID0gJChBUikgLXIgJEAgJChPQkpFQ1RTX0xJU1QpCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvZ2NjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci9nY2MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3MGQxYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvZ2NjLm1rCkBAIC0wLDAgKzEsNzcgQEAKKyMKKyMgRnJlZVR5cGUgMiBnY2Mtc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgQ29tcGlsZXIgY29tbWFuZCBsaW5lIG5hbWUKKyMKK0NDICAgICAgICAgICA6PSBnY2MKK0NPTVBJTEVSX1NFUCA6PSAvCisKKworIyBUaGUgb2JqZWN0IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4gYmUKKyMgLm8sIC50Y28sIC5vYmosIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitPICA6PSBvCitTTyA6PSBvCisKKyMgVGhlIGxpYnJhcnkgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbgorIyBiZSAuYSwgLmxpYiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK0EgIDo9IGEKK1NBIDo9IGEKKworCisjIFBhdGggaW5jbHVzaW9uIGZsYWcuICBTb21lIGNvbXBpbGVycyB1c2UgYSBkaWZmZXJlbnQgZmxhZyB0aGFuIGAtSScgdG8KKyMgc3BlY2lmeSBhbiBhZGRpdGlvbmFsIGluY2x1ZGUgcGF0aC4gIEV4YW1wbGVzIGFyZSBgL2k9JyBvciBgLUonLgorIworSSA6PSAtSQorCisKKyMgQyBmbGFnIHVzZWQgdG8gZGVmaW5lIGEgbWFjcm8gYmVmb3JlIHRoZSBjb21waWxhdGlvbiBvZiBhIGdpdmVuIHNvdXJjZQorIyBvYmplY3QuICBVc3VhbGx5IGl0IGlzIGAtRCcgbGlrZSBpbiBgLURERUJVRycuCisjCitEIDo9IC1ECisKKworIyBUaGUgbGluayBmbGFnIHVzZWQgdG8gc3BlY2lmeSBhIGdpdmVuIGxpYnJhcnkgZmlsZSBvbiBsaW5rLiAgTm90ZSB0aGF0CisjIHRoaXMgaXMgb25seSB1c2VkIHRvIGNvbXBpbGUgdGhlIGRlbW8gcHJvZ3JhbXMsIG5vdCB0aGUgbGlicmFyeSBpdHNlbGYuCisjCitMIDo9IC1sCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gLW8kKHNwYWNlKQorCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworQ0ZMQUdTID89IC1jIC1nIC1PMyAtV2FsbAorCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKK0FOU0lGTEFHUyA6PSAtYW5zaSAtcGVkYW50aWMKKworCisjIExpYnJhcnkgbGlua2luZworIworQ0xFQU5fTElCUkFSWSA/PSAkKERFTEVURSkgJChzdWJzdCAvLCQoU0VQKSwkKFBST0pFQ1RfTElCUkFSWSkpCitMSU5LX0xJQlJBUlkgICA9ICQoQVIpIC1yICRAICQoT0JKRUNUU19MSVNUKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvaW50ZWxjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTU5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5tawpAQCAtMCwwICsxLDg1IEBACisjCisjIEZyZWVUeXBlIDIgSW50ZWwgQy9DKysgZGVmaW5pdGlvbnMgKFZDKysgY29tcGF0aWJpbGl0eSBtb2RlKQorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBjb21waWxlciBjb21tYW5kIGxpbmUgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGljbAorQ09NUElMRVJfU0VQIDo9ICQoU0VQKQorCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gb2JqCitTTyA6PSBvYmoKKworCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBsaWIKK1NBIDo9IGxpYgorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC9JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gL0QKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gL0ZsCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gL0ZvCitURSA6PSAvRmUKKworCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworIyAgIE5vdGUgdGhhdCB0aGUgSW50ZWwgQy9DKysgY29tcGlsZXIgdmVyc2lvbiA0LjUgY29tcGxhaW5zIGFib3V0CisjICAgdGhlIHVzZSBvZiBGVF9GSUVMRF9PRkZTRVQgd2l0aCAidmFsdWUgbXVzdCBiZSBhcml0aG1ldGljIHR5cGUiIQorIyAgIFRoaXMgcmVhbGx5IGxvb2tzIGxpa2UgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGJlY2F1c2UgdGhlIG1hY3JvCisjICAgX2RvZXNfIGNvbXB1dGUgYW4gYXJpdGhtZXRpYyB2YWx1ZSwgc28gd2UgZGlzYWJsZSB0aGlzIHdhcm5pbmcKKyMgICB3aXRoICIvUXdkMzIiLgorIworQ0ZMQUdTID89IC9ub2xvZ28gL2MgL094IC9HNSAvVzMgL1F3ZDMyCisKKyMgQU5TSUZMQUdTOiBQdXQgdGhlcmUgdGhlIGZsYWdzIHVzZWQgdG8gbWFrZSB5b3VyIGNvbXBpbGVyIEFOU0ktY29tcGxpYW50LgorIworQU5TSUZMQUdTIDo9IC9RYW5zaV9hbGlhcyAvWmEKKworIyBMaWJyYXJ5IGxpbmtpbmcKKyMKKyNDTEVBTl9MSUJSQVJZID0KK0xJTktfTElCUkFSWSA9IGxpYiAvbm9sb2dvIC9vdXQ6JChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKE9CSkVDVFNfTElTVCkpCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvdW5peC1sY2MubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rCkBAIC0wLDAgKzEsODMgQEAKKyMKKyMgRnJlZVR5cGUgMiBVbml4IExDQyBzcGVjaWZpYyBkZWZpbml0aW9ucworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBDb21tYW5kIGxpbmUgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGxjYworQ09NUElMRVJfU0VQIDo9ICQoU0VQKQorCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gbworU08gOj0gbworCisKKyMgVGhlIGxpYnJhcnkgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbgorIyBiZSAuYSwgLmxpYiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK0EgIDo9IGEKK1NBIDo9IGEKKworCisjIFBhdGggaW5jbHVzaW9uIGZsYWcuICBTb21lIGNvbXBpbGVycyB1c2UgYSBkaWZmZXJlbnQgZmxhZyB0aGFuIGAtSScgdG8KKyMgc3BlY2lmeSBhbiBhZGRpdGlvbmFsIGluY2x1ZGUgcGF0aC4gIEV4YW1wbGVzIGFyZSBgL2k9JyBvciBgLUonLgorIworSSA6PSAtSQorCisKKyMgQyBmbGFnIHVzZWQgdG8gZGVmaW5lIGEgbWFjcm8gYmVmb3JlIHRoZSBjb21waWxhdGlvbiBvZiBhIGdpdmVuIHNvdXJjZQorIyBvYmplY3QuICBVc3VhbGx5IGl0IGlzIGAtRCcgbGlrZSBpbiBgLURERUJVRycuCisjCitEIDo9IC1ECisKKworIyBUaGUgbGluayBmbGFnIHVzZWQgdG8gc3BlY2lmeSBhIGdpdmVuIGxpYnJhcnkgZmlsZSBvbiBsaW5rLiAgTm90ZSB0aGF0CisjIHRoaXMgaXMgb25seSB1c2VkIHRvIGNvbXBpbGUgdGhlIGRlbW8gcHJvZ3JhbXMsIG5vdCB0aGUgbGlicmFyeSBpdHNlbGYuCisjCitMIDo9IC1sCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gLW8kKHNwYWNlKQorCisKKyMgQyBmbGFncworIworIyAgIFRoZXNlIHNob3VsZCBjb25jZXJuOiBkZWJ1ZyBvdXRwdXQsIG9wdGltaXphdGlvbiAmIHdhcm5pbmdzLgorIworIyAgIFVzZSB0aGUgQU5TSUZMQUdTIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBlbmZvcmUKKyMgICBBTlNJIGNvbXBsaWFuY2UuCisjCitDRkxBR1MgPz0gLWMgLWcKKworIyBBTlNJRkxBR1M6IFB1dCB0aGVyZSB0aGUgZmxhZ3MgdXNlZCB0byBtYWtlIHlvdXIgY29tcGlsZXIgQU5TSS1jb21wbGlhbnQuCisjCisjICBMQ0MgaXMgcHVyZSBBTlNJIGFueXdheSEKKyMKKyMgIHRoZSAiLUEiIGZsYWcgc2ltcGx5IGluY3JlbWVudHMgdmVyYm9zaXR5IGFib3V0IG5vbiBBTlNJIGNvZGUKKyMKK0FOU0lGTEFHUyA6PSAtQQorCisKKyMgbGlicmFyeSBsaW5raW5nCisjCitDTEVBTl9MSUJSQVJZID89ICQoREVMRVRFKSAkKFBST0pFQ1RfTElCUkFSWSkKK0xJTktfTElCUkFSWSAgID0gJChBUikgLXIgJEAgJChPQkpFQ1RTX0xJU1QpCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci92aXN1YWxhZ2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5OTdmYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rCkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgRnJlZVR5cGUgMiBWaXN1YWwgQWdlIEMrKyBzcGVjaWZpYyBkZWZpbml0aW9ucworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBjb21tYW5kIGxpbmUgY29tcGlsZXIgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGljYworQ09NUElMRVJfU0VQIDo9ICQoU0VQKQorCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gb2JqCitTTyA6PSBvYmoKKworCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBsaWIKK1NBIDo9IGxpYgorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC9JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gL0QKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gL0ZsCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gL0ZvCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCitDRkxBR1MgPz0gL1EtIC9HZCsgL08yIC9HNSAvVzMgL0MKKworIyBBTlNJRkxBR1M6IFB1dCB0aGVyZSB0aGUgZmxhZ3MgdXNlZCB0byBtYWtlIHlvdXIgY29tcGlsZXIgQU5TSS1jb21wbGlhbnQuCisjCitBTlNJX0ZMQUdTIDo9IC9TYQorCisKKyMgTGlicmFyeSBsaW5raW5nCisjCisjQ0xFQU5fTElCUkFSWSA6PQorTElOS19MSUJSQVJZID0gbGliIC9ub2xvZ28gL291dDokKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoT0JKRUNUU19MSVNUKSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGM4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL3Zpc3VhbGMubWsKQEAgLTAsMCArMSw4MiBAQAorIworIyBGcmVlVHlwZSAyIFZpc3VhbCBDKysgZGVmaW5pdGlvbnMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgY29tcGlsZXIgY29tbWFuZCBsaW5lIG5hbWUKKyMKK0NDICAgICAgICAgICA6PSBjbAorQ09NUElMRVJfU0VQIDo9ICQoU0VQKQorCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gb2JqCitTTyA6PSBvYmoKKworCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBsaWIKK1NBIDo9IGxpYgorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC9JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gL0QKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gL0ZsCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gL0ZvCisKKyMgVGFyZ2V0IGV4ZWN1dGFibGUgZmxhZworIworVEUgOj0gL0ZlCisKKyMgQyBmbGFncworIworIyAgIFRoZXNlIHNob3VsZCBjb25jZXJuOiBkZWJ1ZyBvdXRwdXQsIG9wdGltaXphdGlvbiAmIHdhcm5pbmdzLgorIworIyAgIFVzZSB0aGUgQU5TSUZMQUdTIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBlbmZvcmUKKyMgICBBTlNJIGNvbXBsaWFuY2UuCisjCitDRkxBR1MgPz0gL25vbG9nbyAvYyAvT3ggL1czIC9XWAorCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKK0FOU0lGTEFHUyA6PSAvWmEgL0RfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKKworCisjIExpYnJhcnkgbGlua2luZworIworI0NMRUFOX0xJQlJBUlkgPQorTElOS19MSUJSQVJZICA9IGxpYiAvbm9sb2dvIC9vdXQ6JChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKE9CSkVDVFNfTElTVCkpCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvd2F0Y29tLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci93YXRjb20ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzNDI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvY29tcGlsZXIvd2F0Y29tLm1rCkBAIC0wLDAgKzEsODEgQEAKKyMKKyMgRnJlZVR5cGUgMiBXYXRjb20tc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgQ29tcGlsZXIgY29tbWFuZCBsaW5lIG5hbWUKKyMKK0NDICAgICAgICAgICA6PSB3Y2MzODYKK0NPTVBJTEVSX1NFUCA6PSAkKFNFUCkKKworCisjIFRoZSBvYmplY3QgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbiBiZQorIyAubywgLnRjbywgLm9iaiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK08gIDo9IG9iagorU08gOj0gb2JqCisKKworIyBUaGUgbGlicmFyeSBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuCisjIGJlIC5hLCAubGliLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworQSAgOj0gbGliCitTQSA6PSBsaWIKKworCisjIFBhdGggaW5jbHVzaW9uIGZsYWcuICBTb21lIGNvbXBpbGVycyB1c2UgYSBkaWZmZXJlbnQgZmxhZyB0aGFuIGAtSScgdG8KKyMgc3BlY2lmeSBhbiBhZGRpdGlvbmFsIGluY2x1ZGUgcGF0aC4gIEV4YW1wbGVzIGFyZSBgL2k9JyBvciBgLUonLgorIworSSA6PSAtST0KKworCisjIEMgZmxhZyB1c2VkIHRvIGRlZmluZSBhIG1hY3JvIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gb2YgYSBnaXZlbiBzb3VyY2UKKyMgb2JqZWN0LiAgVXN1YWxseSBpdCBpcyBgLUQnIGxpa2UgaW4gYC1EREVCVUcnLgorIworRCA6PSAtRAorCisKKyMgVGhlIGxpbmsgZmxhZyB1c2VkIHRvIHNwZWNpZnkgYSBnaXZlbiBsaWJyYXJ5IGZpbGUgb24gbGluay4gIE5vdGUgdGhhdAorIyB0aGlzIGlzIG9ubHkgdXNlZCB0byBjb21waWxlIHRoZSBkZW1vIHByb2dyYW1zLCBub3QgdGhlIGxpYnJhcnkgaXRzZWxmLgorIworTCA6PSAtbAorCisKKyMgVGFyZ2V0IGZsYWcuCisjCitUIDo9IC1GTz0KKworCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworQ0ZMQUdTID89IC16cQorCisjIEFOU0lGTEFHUzogUHV0IHRoZXJlIHRoZSBmbGFncyB1c2VkIHRvIG1ha2UgeW91ciBjb21waWxlciBBTlNJLWNvbXBsaWFudC4KKyMKK0FOU0lGTEFHUyA6PSAtemEKKworCisjIExpYnJhcnkgbGlua2luZworIworQ0xFQU5fTElCUkFSWSA/PSAkKERFTEVURSkgJChzdWJzdCAvLCQoU0VQKSwkKFBST0pFQ1RfTElCUkFSWSkpCitMSU5LX0xJQlJBUlkgICA9ICQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksIFwKKyAgICAgICAgICAgICAgICAgICB3bGliIC1xIC1uICRAOyBcCisgICAgICAgICAgICAgICAgICAgJChmb3JlYWNoIG0sICQoT0JKRUNUU19MSVNUKSwgd2xpYiAtcSAkQCArJChtKTspIFwKKyAgICAgICAgICAgICAgICAgICBlY2hvID4gbnVsKQorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci93aW4tbGNjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9jb21waWxlci93aW4tbGNjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNGY3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2NvbXBpbGVyL3dpbi1sY2MubWsKQEAgLTAsMCArMSw4MSBAQAorIworIyBGcmVlVHlwZSAyIFdpbjMyLUxDQyBzcGVjaWZpYyBkZWZpbml0aW9ucworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBDb21tYW5kIGxpbmUgbmFtZQorIworQ0MgICAgICAgICAgIDo9IGxjYworQ09NUElMRVJfU0VQIDo9ICQoU0VQKQorCisKKyMgVGhlIG9iamVjdCBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuIGJlCisjIC5vLCAudGNvLCAub2JqLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworTyAgOj0gb2JqCitTTyA6PSBvYmoKKworCisjIFRoZSBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uIChmb3Igc3RhbmRhcmQgYW5kIHN0YXRpYyBsaWJyYXJpZXMpLiAgVGhpcyBjYW4KKyMgYmUgLmEsIC5saWIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisjCitBICA6PSBsaWIKK1NBIDo9IGxpYgorCisKKyMgUGF0aCBpbmNsdXNpb24gZmxhZy4gIFNvbWUgY29tcGlsZXJzIHVzZSBhIGRpZmZlcmVudCBmbGFnIHRoYW4gYC1JJyB0bworIyBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRoLiAgRXhhbXBsZXMgYXJlIGAvaT0nIG9yIGAtSicuCisjCitJIDo9IC1JCisKKworIyBDIGZsYWcgdXNlZCB0byBkZWZpbmUgYSBtYWNybyBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgZ2l2ZW4gc291cmNlCisjIG9iamVjdC4gIFVzdWFsbHkgaXQgaXMgYC1EJyBsaWtlIGluIGAtRERFQlVHJy4KKyMKK0QgOj0gLUQKKworCisjIFRoZSBsaW5rIGZsYWcgdXNlZCB0byBzcGVjaWZ5IGEgZ2l2ZW4gbGlicmFyeSBmaWxlIG9uIGxpbmsuICBOb3RlIHRoYXQKKyMgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29tcGlsZSB0aGUgZGVtbyBwcm9ncmFtcywgbm90IHRoZSBsaWJyYXJ5IGl0c2VsZi4KKyMKK0wgOj0gLUZsCisKKworIyBUYXJnZXQgZmxhZy4KKyMKK1QgOj0gLUZvCisKKworIyBDIGZsYWdzCisjCisjICAgVGhlc2Ugc2hvdWxkIGNvbmNlcm46IGRlYnVnIG91dHB1dCwgb3B0aW1pemF0aW9uICYgd2FybmluZ3MuCisjCisjICAgVXNlIHRoZSBBTlNJRkxBR1MgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGVuZm9yZQorIyAgIEFOU0kgY29tcGxpYW5jZS4KKyMKK0NGTEFHUyA/PSAtYyAtZzIgLU8KKworIyBBTlNJRkxBR1M6IFB1dCB0aGVyZSB0aGUgZmxhZ3MgdXNlZCB0byBtYWtlIHlvdXIgY29tcGlsZXIgQU5TSS1jb21wbGlhbnQuCisjCisjICBMQ0MgaXMgcHVyZSBBTlNJIGFueXdheSEKKyMKK0FOU0lGTEFHUyA6PQorCisKKyMgbGlicmFyeSBsaW5raW5nCisjCisjQ0xFQU5fTElCUkFSWSA6PQorTElOS19MSUJSQVJZID0gbGNjbGliIC9vdXQ6JChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKE9CSkVDVFNfTElTVCkpCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvZGV0ZWN0Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9kZXRlY3QubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3ODlkMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZGV0ZWN0Lm1rCkBAIC0wLDAgKzEsMTU0IEBACisjCisjIEZyZWVUeXBlIDIgaG9zdCBwbGF0Zm9ybSBkZXRlY3Rpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgVGhpcyBzdWItTWFrZWZpbGUgaXMgaW4gY2hhcmdlIG9mIGRldGVjdGluZyB0aGUgY3VycmVudCBwbGF0Zm9ybS4gIEl0IHNldHMKKyMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjCisjICAgQlVJTERfRElSICAgIFRoZSBjb25maWd1cmF0aW9uIGFuZCBzeXN0ZW0tc3BlY2lmaWMgZGlyZWN0b3J5LiAgVXN1YWxseQorIyAgICAgICAgICAgICAgICBgYnVpbGRzLyQoUExBVEZPUk0pJyBidXQgY2FuIGJlIGRpZmZlcmVudCBmb3IgY3VzdG9tIGJ1aWxkcworIyAgICAgICAgICAgICAgICBvZiB0aGUgbGlicmFyeS4KKyMKKyMgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbXVzdCBiZSBkZWZpbmVkIGluIHN5c3RlbSBzcGVjaWZpYyBgZGV0ZWN0Lm1rJworIyBmaWxlczoKKyMKKyMgICBQTEFURk9STSAgICAgVGhlIGRldGVjdGVkIHBsYXRmb3JtLiAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gYGFuc2knIGlmCisjICAgICAgICAgICAgICAgIGF1dG8tZGV0ZWN0aW9uIGZhaWxzLgorIyAgIENPTkZJR19GSUxFICBUaGUgY29uZmlndXJhdGlvbiBzdWItbWFrZWZpbGUgdG8gdXNlLiAgVGhpcyB1c3VhbGx5IGRlcGVuZHMKKyMgICAgICAgICAgICAgICAgb24gdGhlIGNvbXBpbGVyIGRlZmluZWQgaW4gdGhlIGBDQycgZW52aXJvbm1lbnQgdmFyaWFibGUuCisjICAgREVMRVRFICAgICAgIFRoZSBzaGVsbCBjb21tYW5kIHVzZWQgdG8gcmVtb3ZlIGEgZ2l2ZW4gZmlsZS4KKyMgICBDT1BZICAgICAgICAgVGhlIHNoZWxsIGNvbW1hbmQgdXNlZCB0byBjb3B5IG9uZSBmaWxlLgorIyAgIFNFUCAgICAgICAgICBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3J5IHNlcGFyYXRvci4KKyMgICBDT01QSUxFUl9TRVAgVGhlIHNlcGFyYXRvciB1c2VkIGluIGFyZ3VtZW50cyBvZiB0aGUgY29tcGlsYXRpb24gdG9vbHMuCisjICAgQ0MgICAgICAgICAgIFRoZSBjb21waWxlciB0byB1c2UuCisjCisjIFlvdSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlKHMpIGJlZm9yZSBjYWxsaW5nIGl0OgorIworIyAgIFRPUF9ESVIgICAgICBUaGUgdG9wLW1vc3QgZGlyZWN0b3J5IGluIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IHNvdXJjZQorIyAgICAgICAgICAgICAgICBoaWVyYXJjaHkuICBJZiBub3QgZGVmaW5lZCwgaXQgd2lsbCBkZWZhdWx0IHRvIGAuJy4KKworIyBTZXQgYXV0by1kZXRlY3Rpb24gZGVmYXVsdCB0byBgYW5zaScgcmVzcC4gVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLgorIworUExBVEZPUk0gICAgIDo9IGFuc2kKK0RFTEVURSAgICAgICA6PSAkKFJNKQorQ09QWSAgICAgICAgIDo9IGNwCitDQVQgICAgICAgICAgOj0gY2F0CitTRVAgICAgICAgICAgOj0gLworCitCVUlMRF9DT05GSUcgOj0gJChUT1BfRElSKS9idWlsZHMKKworIyBUaGVzZSB0d28gYXNzaWdubWVudHMgbXVzdCBiZSBkZWxheWVkLgorQlVJTERfRElSICAgID0gJChCVUlMRF9DT05GSUcpLyQoUExBVEZPUk0pCitDT05GSUdfUlVMRVMgPSAkKEJVSUxEX0RJUikvJChDT05GSUdfRklMRSkKKworIyBXZSBkZWZpbmUgdGhlIEJBQ0tTTEFTSCB2YXJpYWJsZSB0byBob2xkIGEgc2luZ2xlIGJhY2stc2xhc2ggY2hhcmFjdGVyLgorIyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGEgbGluZSBsaWtlCisjCisjICAgU0VQIDo9IFwKKyMKKyMgZG9lcyBub3Qgd29yayB3aXRoIEdOVSBNYWtlICh0aGUgYmFja3NsYXNoIGlzIGludGVycHJldGVkIGFzIGEgbGluZQorIyBjb250aW51YXRpb24pLiAgV2hpbGUgYSBsaW5lIGxpa2UKKyMKKyMgICBTRVAgOj0gXFwKKyMKKyMgcmVhbGx5IGRlZmluZXMgJChTRVApIGFzIGBcJyBvbiBVbml4LCBhbmQgYFxcJyBvbiBEb3MgYW5kIFdpbmRvd3MhCisjCitCQUNLU0xBU0ggOj0gJChzdHJpcCBcICkKKworIyBGaW5kIGFsbCBhdXRvLWRldGVjdGFibGUgcGxhdGZvcm1zLgorIworUExBVEZPUk1TIDo9ICQobm90ZGlyICQoc3Vic3QgL2RldGVjdC5taywsJCh3aWxkY2FyZCAkKEJVSUxEX0NPTkZJRykvKi9kZXRlY3QubWspKSkKKy5QSE9OWTogJChQTEFURk9STVMpIGFuc2kKKworIyBGaWx0ZXIgb3V0IHBsYXRmb3JtIHNwZWNpZmllZCBhcyBzZXR1cCB0YXJnZXQuCisjCitQTEFURk9STSA6PSAkKGZpcnN0d29yZCAkKGZpbHRlciAkKE1BS0VDTURHT0FMUyksJChQTEFURk9STVMpKSkKKworIyBJZiBubyBzZXR1cCB0YXJnZXQgcGxhdGZvcm0gd2FzIHNwZWNpZmllZCwgZW5hYmxlIGF1dG8tZGV0ZWN0aW9uLworIyBkZWZhdWx0IHBsYXRmb3JtLgorIworaWZlcSAoJChQTEFURk9STSksKQorICBQTEFURk9STSA6PSBhbnNpCitlbmRpZgorCisjIElmIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IGFza2VkIGZvciBgYW5zaScgb24gdGhlIGNvbW1hbmQgbGluZSwKKyMgZGlzYWJsZSBhdXRvLWRldGVjdGlvbi4KKyMKK2lmZXEgKCQoZmluZHN0cmluZyBhbnNpLCQoTUFLRUNNREdPQUxTKSksKQorICAjIE5vdywgaW5jbHVkZSBhbGwgZGV0ZWN0aW9uIHJ1bGUgZmlsZXMgZm91bmQgaW4gdGhlIGBidWlsZHMvPHN5c3RlbT4nCisgICMgZGlyZWN0b3JpZXMuICBOb3RlIHRoYXQgdGhlIGNhbGxpbmcgb3JkZXIgb2YgdGhlIHZhcmlvdXMgYGRldGVjdC5taycKKyAgIyBmaWxlcyBpc24ndCBwcmVkaWN0YWJsZS4KKyAgIworICBpbmNsdWRlICQod2lsZGNhcmQgJChCVUlMRF9DT05GSUcpLyovZGV0ZWN0Lm1rKQorZW5kaWYKKworIyBJbiBjYXNlIG5vIGRldGVjdGlvbiBydWxlIGZpbGUgd2FzIHN1Y2Nlc3NmdWwsIHVzZSB0aGUgZGVmYXVsdC4KKyMKK2lmbmRlZiBDT05GSUdfRklMRQorICBDT05GSUdfRklMRSA6PSBhbnNpLm1rCisgIHNldHVwOiBzdGRfc2V0dXAKKyAgLlBIT05ZOiBzZXR1cAorZW5kaWYKKworIyBUaGUgZm9sbG93aW5nIHRhcmdldHMgYXJlIGVxdWl2YWxlbnQsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZXkgdXNlCisjIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN5bnRheCBmb3IgdGhlIGBlY2hvJyBjb21tYW5kLgorIworIyBzdGRfc2V0dXA6IGRlZmluZWQgZm9yIG1vc3QgKGkuZS4gVW5peC1saWtlKSBwbGF0Zm9ybXMKKyMgZG9zX3NldHVwOiBkZWZpbmVkIGZvciBEb3MtaXNoIHBsYXRmb3JtcyBsaWtlIERvcywgV2luZG93cyAmIE9TLzIKKyMKKy5QSE9OWTogc3RkX3NldHVwIGRvc19zZXR1cAorCitzdGRfc2V0dXA6CisJQGVjaG8gIiIKKwlAZWNobyAiJChQUk9KRUNUX1RJVExFKSBidWlsZCBzeXN0ZW0gLS0gYXV0b21hdGljIHN5c3RlbSBkZXRlY3Rpb24iCisJQGVjaG8gIiIKKwlAZWNobyAiVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgdXNlZDoiCisJQGVjaG8gIiIKKwlAZWNobyAiICBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgJChQTEFURk9STSkiCisJQGVjaG8gIiAgY29tcGlsZXIgICAgICAgICAgICAgICAgICAgICQoQ0MpIgorCUBlY2hvICIgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5ICAgICAkKEJVSUxEX0RJUikiCisJQGVjaG8gIiAgY29uZmlndXJhdGlvbiBydWxlcyAgICAgICAgICQoQ09ORklHX1JVTEVTKSIKKwlAZWNobyAiIgorCUBlY2hvICJJZiB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8geW91ciBzeXN0ZW0gb3Igc2V0dGluZ3MgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZSIKKwlAZWNobyAiXGAkKENPTkZJR19NSyknIGZyb20gdGhpcyBkaXJlY3RvcnkgdGhlbiByZWFkIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGhlbHAuIgorCUBlY2hvICIiCisJQGVjaG8gIk90aGVyd2lzZSwgc2ltcGx5IHR5cGUgXGAkKE1BS0UpJyBhZ2FpbiB0byBidWlsZCB0aGUgbGlicmFyeSwiCisJQGVjaG8gIm9yIFxgJChNQUtFKSByZWZkb2MnIHRvIGJ1aWxkIHRoZSBBUEkgcmVmZXJlbmNlICh0aGlzIG5lZWRzIHB5dGhvbiA+PSAyLjYpLiIKKwlAZWNobyAiIgorCUAkKENPUFkpICQoQ09ORklHX1JVTEVTKSAkKENPTkZJR19NSykKKworCisjIFNwZWNpYWwgY2FzZSBmb3IgRG9zLCBXaW5kb3dzLCBPUy8yLCB3aGVyZSBlY2hvICIiIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkhCisjCitkb3Nfc2V0dXA6CisJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQorCUBlY2hvICQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uCisJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQorCUBlY2hvIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQ6CisJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQorCUBlY2hvICAgcGxhdGZvcm3///////////////////////////8kKFBMQVRGT1JNKQorCUBlY2hvICAgY29tcGlsZXL///////////////////////////8kKENDKQorCUBlY2hvICAgY29uZmlndXJhdGlvbiBkaXJlY3Rvcnn///////8kKHN1YnN0IC8sJChTRVApLCQoQlVJTERfRElSKSkKKwlAZWNobyAgIGNvbmZpZ3VyYXRpb24gcnVsZXP/////////////JChzdWJzdCAvLCQoU0VQKSwkKENPTkZJR19SVUxFUykpCisJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQorCUBlY2hvIElmIHRoaXMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB5b3VyIHN5c3RlbSBvciBzZXR0aW5ncyBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlCisJQGVjaG8gJyQoQ09ORklHX01LKScgZnJvbSB0aGlzIGRpcmVjdG9yeSB0aGVuIHJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgaGVscC4KKwlAdHlwZSBidWlsZHMkKFNFUCluZXdsaW5lCisJQGVjaG8gT3RoZXJ3aXNlLCBzaW1wbHkgdHlwZSAnbWFrZScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnkuCisJQGVjaG8gb3IgJ21ha2UgcmVmZG9jJyB0byBidWlsZCB0aGUgQVBJIHJlZmVyZW5jZSAodGhpcyBuZWVkcyBweXRob24gPj0gMi42KS4KKwlAdHlwZSBidWlsZHMkKFNFUCluZXdsaW5lCisJQCQoQ09QWSkgJChzdWJzdCAvLCQoU0VQKSwkKENPTkZJR19SVUxFUykgJChDT05GSUdfTUspKSA+IG51bAorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kZXRlY3QubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kZXRlY3QubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5YmE5OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZG9zL2RldGVjdC5tawpAQCAtMCwwICsxLDE0MiBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZXRlY3QgYSBET1MgaG9zdCBwbGF0Zm9ybS4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKy5QSE9OWTogc2V0dXAKKworCitpZmVxICgkKFBMQVRGT1JNKSxhbnNpKQorCisgICMgVGVzdCBmb3IgREpHUFAgYnkgY2hlY2tpbmcgdGhlIERKR1BQIGVudmlyb25tZW50IHZhcmlhYmxlLCB3aGljaCBtdXN0IGJlCisgICMgc2V0IGluIG9yZGVyIHRvIHVzZSB0aGUgc3lzdGVtIChpZS4gaXQgd2lsbCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoZQorICAjIGBtYWtlJyB1dGlsaXR5IGlzIHJ1bikuCisgICMKKyAgIyBXZSB0ZXN0IGZvciB0aGUgQ09NU1BFQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBydW4gdGhlIGB2ZXInCisgICMgY29tbWFuZC1saW5lIHByb2dyYW0gdG8gc2VlIGlmIGl0cyBvdXRwdXQgY29udGFpbnMgdGhlIHdvcmQgYERvcycgb3IKKyAgIyBgRE9TJy4KKyAgIworICAjIElmIHRoaXMgaXMgdHJ1ZSwgd2UgYXJlIHJ1bm5pbmcgYSBEb3MtaXNoIHBsYXRmb3JtIChvciBhbiBlbXVsYXRpb24pLgorICAjCisgIGlmZGVmIERKR1BQCisgICAgUExBVEZPUk0gOj0gZG9zCisgIGVsc2UKKyAgICBpZmRlZiBDT01TUEVDCisgICAgICBpc19kb3MgOj0gJChmaW5kc3RyaW5nIERPUywkKHN1YnN0IERvcyxET1MsJChzaGVsbCB2ZXIpKSkKKworICAgICAgIyBXZSB0cnkgdG8gcmVjb2duaXplIGEgRG9zIHNlc3Npb24gdW5kZXIgT1MvMi4gIFRoZSBgdmVyJyBjb21tYW5kCisgICAgICAjIHJldHVybnMgYE9wZXJhdGluZyBTeXN0ZW0vMiAuLi4nIHRoZXJlLCBzbyBgaXNfZG9zJyBzaG91bGQgYmUgZW1wdHkuCisgICAgICAjCisgICAgICAjIFRvIHJlY29nbml6ZSBhIERvcyBzZXNzaW9uIHVuZGVyIE9TLzIsIHdlIGNoZWNrIENPTVNQRUMgZm9yIHRoZQorICAgICAgIyBzdWJzdHJpbmcgYE1ET1NcQ09NTUFORCcKKyAgICAgICMKKyAgICAgIGlmZXEgKCQoaXNfZG9zKSwpCisgICAgICAgIGlzX2RvcyA6PSAkKGZpbmRzdHJpbmcgTURPU1xDT01NQU5ELCQoQ09NU1BFQykpCisgICAgICBlbmRpZgorCisgICAgICAjIFdlIGFsc28gdHJ5IHRvIHJlY29nbml6ZSBEb3MgNy54IHdpdGhvdXQgV2luZG93cyA5WCBsYXVuY2hlZC4KKyAgICAgICMgU2VlIGJ1aWxkcy93aW5kb3dzL2RldGVjdC5tayBmb3IgZXhwbGFuYXRpb25zIGFib3V0IHRoZSBsb2dpYy4KKyAgICAgICMKKyAgICAgIGlmZXEgKCQoaXNfZG9zKSwpCisgICAgICAgIGlmZGVmIHdpbmJvb3RkaXIKKyNpZm5lcSAoJChPUyksV2luZG93c19OVCkKKyAgICAgICAgICAjIElmIHdpbmRvd3MgaXMgYXZhaWxhYmxlLCBkbyBub3QgdHJpZ2dlciB0aGlzIHRlc3QuCisgICAgICAgICAgaWZuZGVmIHdpbmRpcgorICAgICAgICAgICAgaXNfZG9zIDo9ICQoZmluZHN0cmluZyBXaW5kb3dzLCQoc3RyaXAgJChzaGVsbCB2ZXIpKSkKKyAgICAgICAgICBlbmRpZgorI2VuZGlmCisgICAgICAgIGVuZGlmCisgICAgICBlbmRpZgorCisgICAgZW5kaWYgIyB0ZXN0IENPTVNQRUMKKworICAgIGlmbmVxICgkKGlzX2RvcyksKQorCisgICAgICBQTEFURk9STSA6PSBkb3MKKworICAgIGVuZGlmICMgdGVzdCBEb3MKKyAgZW5kaWYgIyB0ZXN0IERKR1BQCitlbmRpZiAjIHRlc3QgUExBVEZPUk0gYW5zaQorCitpZmVxICgkKFBMQVRGT1JNKSxkb3MpCisKKyAgIyBVc2UgREpHUFAgKGkuZS4gZ2NjKSBieSBkZWZhdWx0LgorICAjCisgIENPTkZJR19GSUxFIDo9IGRvcy1nY2MubWsKKyAgQ0MgICAgICAgICAgPz0gZ2NjCisKKyAgIyBhZGRpdGlvbmFsbHksIHdlIHByb3ZpZGUgaG9va3MgZm9yIHZhcmlvdXMgb3RoZXIgY29tcGlsZXJzCisgICMKKyAgaWZuZXEgKCQoZmluZHN0cmluZyBlbXgsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICAjIEVNWCBnY2MKKyAgICBDT05GSUdfRklMRSA6PSBkb3MtZW14Lm1rCisgICAgQ0MgICAgICAgICAgOj0gZ2NjCisgICAgZW14OiBzZXR1cAorICAgIC5QSE9OWTogZW14CisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyB0dXJib2MsJChNQUtFQ01ER09BTFMpKSwpICAgICAjIFR1cmJvIEMKKyAgICBDT05GSUdfRklMRSA6PSBkb3MtdGNjLm1rCisgICAgQ0MgICAgICAgICAgOj0gdGNjCisgICAgdHVyYm9jOiBzZXR1cAorICAgIC5QSE9OWTogdHVyYm9jCisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyB3YXRjb20sJChNQUtFQ01ER09BTFMpKSwpICAgICAjIFdhdGNvbSBDL0MrKworICAgIENPTkZJR19GSUxFIDo9IGRvcy13YXQubWsKKyAgICBDQyAgICAgICAgICA6PSB3Y2MzODYKKyAgICB3YXRjb206IHNldHVwCisgICAgLlBIT05ZOiB3YXRjb20KKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIGJvcmxhbmRjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgQm9ybGFuZCBDL0MrKyAzMi1iaXQKKyAgICBDT05GSUdfRklMRSA6PSBkb3MtYmNjLm1rCisgICAgQ0MgICAgICAgICAgOj0gYmNjMzIKKyAgICBib3JsYW5kYzogc2V0dXAKKyAgICAuUEhPTlk6IGJvcmxhbmRjCisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyBib3JsYW5kYzE2LCQoTUFLRUNNREdPQUxTKSksKSAjIEJvcmxhbmQgQy9DKysgMTYtYml0CisgICAgQ09ORklHX0ZJTEUgOj0gZG9zLWJjYy5taworICAgIENDICAgICAgICAgIDo9IGJjYworICAgIGJvcmxhbmRjMTY6IHNldHVwCisgICAgLlBIT05ZOiBib3JsYW5kYzE2CisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyBiYXNoLCQoU0hFTEwpKSwpICAgICAgICAgICAgICAjIGNoZWNrIGZvciBiYXNoCisgICAgU0VQICAgIDo9IC8KKyAgICBERUxFVEUgOj0gcm0KKyAgICBDT1BZICAgOj0gY3AKKyAgICBDQVQgICAgOj0gY2F0CisgICAgc2V0dXA6IHN0ZF9zZXR1cAorICBlbHNlCisgICAgU0VQICAgIDo9ICQoQkFDS1NMQVNIKQorICAgIERFTEVURSA6PSBkZWwKKyAgICBDQVQgICAgOj0gdHlwZQorCisgICAgIyBTZXR0aW5nIENPUFkgaXMgYSBiaXQgdHJpY2tpZXIuICBXZSBjYW4gYmUgcnVubmluZyBESkdQUCBvbiBzb21lCisgICAgIyBXaW5kb3dzIE5UIGRlcml2YXRpdmVzLCBsaWtlIFhQLiAgU2VlIGJ1aWxkcy93aW5kb3dzL2RldGVjdC5tayBmb3IKKyAgICAjIGV4cGxhbmF0aW9ucyB3aHkgd2UgbmVlZCBoYWNraW5nIGhlcmUuCisgICAgIworICAgIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCisgICAgICBDT1BZIDo9IGNtZC5leGUgL2MgY29weQorICAgIGVsc2UKKyAgICAgIENPUFkgOj0gY29weQorICAgIGVuZGlmICAjIHRlc3QgTlQKKworICAgIHNldHVwOiBkb3Nfc2V0dXAKKyAgZW5kaWYKKworZW5kaWYgICAgICMgdGVzdCBQTEFURk9STSBkb3MKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9kb3MvZG9zLWRlZi5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZG9zL2Rvcy1kZWYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwYmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZG9zL2Rvcy1kZWYubWsKQEAgLTAsMCArMSw0NSBAQAorIworIyBGcmVlVHlwZSAyIERPUyBzcGVjaWZpYyBkZWZpbml0aW9ucworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworREVMRVRFICAgIDo9IGRlbAorQ0FUICAgICAgIDo9IHR5cGUKK1NFUCAgICAgICA6PSAkKHN0cmlwIFwgKQorQlVJTERfRElSIDo9ICQoVE9QX0RJUikvYnVpbGRzL2RvcworUExBVEZPUk0gIDo9IGRvcworCisKKyMgVGhlIGV4ZWN1dGFibGUgZmlsZSBleHRlbnNpb24gKGZvciB0b29scyksICp3aXRoKiBsZWFkaW5nIGRvdC4KKyMKK0UgOj0gLmV4ZQorCisjIFRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxpYnJhcnkgZmlsZXMgYXJlIHBsYWNlZC4KKyMKKyMgQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgc2FtZSBhcyAkKE9CSl9ESVIpOyBob3dldmVyLCB0aGlzIGNhbiBiZSBjaGFuZ2VkCisjIHRvIHN1aXQgcGFydGljdWxhciBuZWVkcy4KKyMKK0xJQl9ESVIgOj0gJChPQkpfRElSKQorCisjIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5IGZpbGUuICBOb3RlIHRoYXQgdGhlIERPUy1zcGVjaWZpYyBNYWtlZmlsZQorIyB1c2VzIGEgc2hvcnRlciAoOC4zKSBuYW1lLgorIworTElCUkFSWSA6PSAkKFBST0pFQ1QpCisKKworIyBUaGUgTk9fT1VUUFVUIG1hY3JvIGlzIHVzZWQgdG8gaWdub3JlIHRoZSBvdXRwdXQgb2YgY29tbWFuZHMuCisjCitOT19PVVRQVVQgPSA+IG51bAorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kb3MtZW14Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9kb3MvZG9zLWVteC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDIxNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9kb3MvZG9zLWVteC5tawpAQCAtMCwwICsxLDIxIEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgdGhlIEVNWCBnY2MgY29tcGlsZXIKKyMKKworCisjIENvcHlyaWdodCAyMDAzLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvZG9zL2Rvcy1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvZW14Lm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfZG9zLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvZG9zL2Rvcy1nY2MubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kb3MtZ2NjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MWZiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kb3MtZ2NjLm1rCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciB0aGUgREpHUFAgY29tcGlsZXIKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvZG9zL2Rvcy1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvZ2NjLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfZG9zLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvZG9zL2Rvcy13YXQubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kb3Mtd2F0Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzRhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2Rvcy9kb3Mtd2F0Lm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciB0aGUgV2F0Y29tIEMvQysrIGNvbXBpbGVyCisjCisKKworIyBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9kb3MvZG9zLWRlZi5taworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci93YXRjb20ubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9leHBvcnRzLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9leHBvcnRzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4N2NlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL2V4cG9ydHMubWsKQEAgLTAsMCArMSw3NiBAQAorIworIyBGcmVlVHlwZSAyIGV4cG9ydHMgc3ViLU1ha2VmaWxlCisjCisKKworIyBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIERPIE5PVCBJTlZPS0UgVEhJUyBNQUtFRklMRSBESVJFQ1RMWSEgIElUIElTIE1FQU5UIFRPIEJFIElOQ0xVREVEIEJZCisjIE9USEVSIE1BS0VGSUxFUy4KKworCisjIFRoaXMgc3ViLU1ha2VmaWxlIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIHdoZW5ldmVyCisjIHRoZSBFWFBPUlRTX0xJU1QgdmFyaWFibGUgaXMgZGVmaW5lZCBieSBvbmUgb2YgdGhlIHBsYXRmb3JtIG9yIGNvbXBpbGVyCisjIHNwZWNpZmljIGJ1aWxkIGZpbGVzLgorIworIyBFWFBPUlRTX0xJU1QgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGBsaXN0JyBmaWxlLCBmb3IgZXhhbXBsZSBhIFdpbmRvd3MKKyMgLkRFRiBmaWxlLgorIworaWZuZXEgKCQoRVhQT1JUU19MSVNUKSwpCisKKyAgIyBDQ2V4ZSBpcyB0aGUgY29tcGlsZXIgdXNlZCB0byBjb21waWxlIHRoZSBgYXBpbmFtZXMnIHRvb2wgcHJvZ3JhbQorICAjIG9uIHRoZSBob3N0IG1hY2hpbmUuICBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBjb21waWxlcgorICAjIHdoaWNoIGNhbiBiZSBhIGNyb3NzLWNvbXBpbGVyIGZvciBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlLgorICAjCisgIGlmZXEgKCQoQ0NleGUpLCkKKyAgICBDQ2V4ZSA6PSAkKENDKQorICBlbmRpZgorCisgICMgVEUgYWN0cyBsaWtlIFQsIGJ1dCBmb3IgZXhlY3V0YWJsZXMgaW5zdGVhZCBvZiBvYmplY3QgZmlsZXMuCisgIGlmZXEgKCQoVEUpLCkKKyAgICBURSA6PSAkVAorICBlbmRpZgorCisgICMgVGhlIGxpc3Qgb2YgcHVibGljIGhlYWRlcnMgd2UncmUgZ29pbmcgdG8gcGFyc2UuCisgIFBVQkxJQ19IRUFERVJTIDo9ICQod2lsZGNhcmQgJChQVUJMSUNfRElSKS8qLmgpCisKKyAgIyBUaGUgYGFwaW5hbWVzJyBzb3VyY2UgYW5kIGV4ZWN1dGFibGUuICBXZSB1c2UgJEVfQlVJTEQgYXMgdGhlIGhvc3QKKyAgIyBleGVjdXRhYmxlIHN1ZmZpeCwgd2hpY2ggKmluY2x1ZGVzKiB0aGUgZmluYWwgZG90LgorICAjCisgICMgTm90ZSB0aGF0ICQoQVBJTkFNRVNfT1BUSU9OUykgaXMgZW1wdHksIGV4Y2VwdCBmb3IgV2luZG93cyBjb21waWxlcnMuCisgICMKKyAgQVBJTkFNRVNfU1JDIDo9ICQoc3Vic3QgLywkKFNFUCksJChUT1BfRElSKS9zcmMvdG9vbHMvYXBpbmFtZXMuYykKKyAgQVBJTkFNRVNfRVhFIDo9ICQoc3Vic3QgLywkKFNFUCksJChPQkpfRElSKS9hcGluYW1lcyQoRV9CVUlMRCkpCisKKyAgJChBUElOQU1FU19FWEUpOiAkKEFQSU5BTUVTX1NSQykKKwkgICQoQ0NleGUpICQoQ0NleGVfQ0ZMQUdTKSAkKFRFKSRAICQ8ICQoQ0NleGVfTERGTEFHUykKKworICAuUEhPTlk6IHN5bWJvbHNfbGlzdAorCisgIHN5bWJvbHNfbGlzdDogJChFWFBPUlRTX0xJU1QpCisKKyAgIyBXZSBtYW51YWxseSBhZGQgVFRfTmV3X0NvbnRleHQgYW5kIFRUX1J1bklucywgd2hpY2ggYXJlIG5lZWRlZCBieSBUVAorICAjIGRlYnVnZ2VycywgdG8gdGhlIEVYUE9SVFNfTElTVC4KKyAgIworICAkKEVYUE9SVFNfTElTVCk6ICQoQVBJTkFNRVNfRVhFKSAkKFBVQkxJQ19IRUFERVJTKQorCSAgJChzdWJzdCAvLCQoU0VQKSwkKEFQSU5BTUVTX0VYRSkpIC1vJEAgJChBUElOQU1FU19PUFRJT05TKSAkKFBVQkxJQ19IRUFERVJTKQorCSAgQGVjaG8gVFRfTmV3X0NvbnRleHQgPj4gJChFWFBPUlRTX0xJU1QpCisJICBAZWNobyBUVF9SdW5JbnMgPj4gJChFWFBPUlRTX0xJU1QpCisKKyAgJChQUk9KRUNUX0xJQlJBUlkpOiAkKEVYUE9SVFNfTElTVCkKKworICBDTEVBTiArPSAkKEVYUE9SVFNfTElTVCkgXAorICAgICAgICAgICAkKEFQSU5BTUVTX0VYRSkKKworZW5kaWYKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9mcmVldHlwZS5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZnJlZXR5cGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhMTNmMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvZnJlZXR5cGUubWsKQEAgLTAsMCArMSwzMzkgQEAKKyMKKyMgRnJlZVR5cGUgMiBsaWJyYXJ5IHN1Yi1NYWtlZmlsZQorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBETyBOT1QgSU5WT0tFIFRISVMgTUFLRUZJTEUgRElSRUNUTFkhICBJVCBJUyBNRUFOVCBUTyBCRSBJTkNMVURFRCBCWQorIyBPVEhFUiBNQUtFRklMRVMuCisKKworIyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyAoc2V0IGJ5IG90aGVyIE1ha2VmaWxlIGNvbXBvbmVudHMsIGluIHRoZQorIyBlbnZpcm9ubWVudCwgb3Igb24gdGhlIGNvbW1hbmQgbGluZSkgYXJlIHVzZWQ6CisjCisjICAgQlVJTERfRElSICAgICAgVGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZGlyZWN0b3J5LAorIyAgICAgICAgICAgICAgICAgIGUuZy4gYCQoVE9QX0RJUikvYnVpbGRzL3VuaXgnLiAgQWRkZWQgdG8gSU5DTFVERVMgYWxzby4KKyMKKyMgICBPQkpfRElSICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgY3JlYXRlZC4KKyMKKyMgICBMSUJfRElSICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBsaWJyYXJ5IGlzIGNyZWF0ZWQuCisjCisjICAgRE9DX0RJUiAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgQVBJIHJlZmVyZW5jZSBpcyBjcmVhdGVkLgorIworIyAgIElOQ0xVREVTICAgICAgIEEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBpbmNsdWRlZCBhZGRpdGlvbmFsbHkuCisjCisjICAgREVWRUxfRElSICAgICAgRGV2ZWxvcG1lbnQgZGlyZWN0b3J5IHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBJTkNMVURFUworIyAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJlZm9yZSB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcy4KKyMKKyMgICBDRkxBR1MgICAgICAgICBDb21waWxhdGlvbiBmbGFncy4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzCisjICAgICAgICAgICAgICAgICAgaW4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisjCisjICAgRlRTWVNfU1JDICAgICAgSWYgc2V0LCBpdHMgdmFsdWUgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiBhIHJlcGxhY2VtZW50CisjICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgYHNyYy9iYXNlL2Z0c3lzdGVtLmMnLgorIworIyAgIEZUREVCVUdfU1JDICAgIElmIHNldCwgaXRzIHZhbHVlIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgYSByZXBsYWNlbWVudAorIyAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGBzcmMvYmFzZS9mdGRlYnVnLmMnLiAgW0ZvciBhIG5vcm1hbCBidWlsZCwgdGhpcworIyAgICAgICAgICAgICAgICAgIGZpbGUgZG9lcyBub3RoaW5nLl0KKyMKKyMgICBGVE1PRFVMRV9IICAgICBUaGUgZmlsZSB3aGljaCBjb250YWlucyB0aGUgbGlzdCBvZiBtb2R1bGUgY2xhc3NlcyBmb3IKKyMgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBidWlsZC4gIFVzdWFsbHksIHRoaXMgaXMgYXV0b21hdGljYWxseQorIyAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgYG1vZHVsZXMubWsnLgorIworIyAgIEJBU0VfT0JKX1MKKyMgICBCQVNFX09CSl9NICAgICBBIGxpc3Qgb2YgYmFzZSBvYmplY3RzIChmb3Igc2luZ2xlIG9iamVjdCBhbmQgbXVsdGlwbGUKKyMgICAgICAgICAgICAgICAgICBvYmplY3QgYnVpbGRzLCByZXNwZWN0aXZlbHkpLiAgU2V0IHVwIGluCisjICAgICAgICAgICAgICAgICAgYHNyYy9iYXNlL3J1bGVzLm1rJy4KKyMKKyMgICBCQVNFX0VYVF9PQkogICBBIGxpc3Qgb2YgYmFzZSBleHRlbnNpb24gb2JqZWN0cy4gIFNldCB1cCBpbgorIyAgICAgICAgICAgICAgICAgIGBzcmMvYmFzZS9ydWxlcy5taycuCisjCisjICAgRFJWX09CSl9TCisjICAgRFJWX09CSl9NICAgICAgQSBsaXN0IG9mIGRyaXZlciBvYmplY3RzIChmb3Igc2luZ2xlIG9iamVjdCBhbmQgbXVsdGlwbGUKKyMgICAgICAgICAgICAgICAgICBvYmplY3QgYnVpbGRzLCByZXNwZWN0aXZlbHkpLiAgU2V0IHVwIGN1bXVsYXRpdmVseSBpbgorIyAgICAgICAgICAgICAgICAgIGBzcmMvPGRyaXZlcj4vcnVsZXMubWsnLgorIworIyAgIENMRUFOCisjICAgRElTVENMRUFOICAgICAgVGhlIHN1Yi1tYWtlZmlsZXMgY2FuIGFwcGVuZCBhZGRpdGlvbmFsIHN0dWZmIHRvIHRoZXNlIHR3bworIyAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aGljaCBpcyB0byBiZSByZW1vdmVkIGZvciB0aGUgYGNsZWFuJyByZXNwLgorIyAgICAgICAgICAgICAgICAgIGBkaXN0Y2xlYW4nIHRhcmdldC4KKyMKKyMgICBUT1BfRElSLCBTRVAsCisjICAgQ09NUElMRVJfU0VQLAorIyAgIExJQlJBUlksIENDLAorIyAgIEEsIEksIE8sIFQgICAgIENoZWNrIGBjb25maWcubWsnIGZvciBkZXRhaWxzLgorCisKKyMgVGhlIHRhcmdldHMgYG9iamVjdHMnIGFuZCBgbGlicmFyeScgYXJlIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisjIE1ha2VmaWxlIGFmdGVyIGFsbCBvdGhlciBydWxlcyBoYXZlIGJlZW4gaW5jbHVkZWQuCisjCisuUEhPTlk6IHNpbmdsZSBtdWx0aSBvYmplY3RzIGxpYnJhcnkgcmVmZG9jCisKKyMgZGVmYXVsdCB0YXJnZXQgLS0gYnVpbGQgc2luZ2xlIG9iamVjdHMgYW5kIGxpYnJhcnkKKyMKK3NpbmdsZTogb2JqZWN0cyBsaWJyYXJ5CisKKyMgYG11bHRpJyB0YXJnZXQgLS0gYnVpbGQgbXVsdGlwbGUgb2JqZWN0cyBhbmQgbGlicmFyeQorIworbXVsdGk6IG9iamVjdHMgbGlicmFyeQorCisKKyMgVGhlIEZyZWVUeXBlIHNvdXJjZSBkaXJlY3RvcnksIHVzdWFsbHkgYC4vc3JjJy4KKyMKK1NSQ19ESVIgOj0gJChUT1BfRElSKS9zcmMKKworIyBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBiYXNlIGxheWVyIGNvbXBvbmVudHMgYXJlIHBsYWNlZCwgdXN1YWxseQorIyBgLi9zcmMvYmFzZScuCisjCitCQVNFX0RJUiA6PSAkKFNSQ19ESVIpL2Jhc2UKKworIyBPdGhlciBkZXJpdmVkIGRpcmVjdG9yaWVzLgorIworUFVCTElDX0RJUiAgIDo9ICQoVE9QX0RJUikvaW5jbHVkZQorSU5URVJOQUxfRElSIDo9ICQoUFVCTElDX0RJUikvaW50ZXJuYWwKK1NFUlZJQ0VTX0RJUiA6PSAkKElOVEVSTkFMX0RJUikvc2VydmljZXMKK0NPTkZJR19ESVIgICA6PSAkKFBVQkxJQ19ESVIpL2NvbmZpZworCisjIFRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4KKyMKK0RPQ19ESVIgPz0gJChUT1BfRElSKS9kb2NzL3JlZmVyZW5jZQorCisjIFRoZSBmaW5hbCBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZpbGUuCisjCitQUk9KRUNUX0xJQlJBUlkgOj0gJChMSUJfRElSKS8kKExJQlJBUlkpLiRBCisKKworIyBpbmNsdWRlIHBhdGhzCisjCisjIElNUE9SVEFOVCBOT1RFOiBUaGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBkaXJlY3RvcnkgbXVzdCBBTFdBWVMgYmUgcGxhY2VkCisjICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHN0YW5kYXJkIGluY2x1ZGUgbGlzdC4gIFBvcnRlcnMgYXJlIHRoZW4gYWJsZSB0bworIyAgICAgICAgICAgICAgICAgcHV0IHRoZWlyIG93biB2ZXJzaW9uIG9mIHNvbWUgb2YgdGhlIEZyZWVUeXBlIGNvbXBvbmVudHMKKyMgICAgICAgICAgICAgICAgIGluIHRoZSBgYnVpbGRzLzxzeXN0ZW0+JyBkaXJlY3RvcnksIGFzIHRoZXNlIGZpbGVzIHdpbGwKKyMgICAgICAgICAgICAgICAgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNvdXJjZXMuCisjCitJTkNMVURFUyA6PSAkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoT0JKX0RJUikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKERFVkVMX0RJUikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEJVSUxEX0RJUikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFRPUF9ESVIpL2luY2x1ZGUpCisKK0lOQ0xVREVfRkxBR1MgOj0gJChJTkNMVURFUzolPSRJJSkKKworaWZkZWYgREVWRUxfRElSCisgICMgV2UgYXNzdW1lIHRoYXQgYWxsIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZvciBGcmVlVHlwZSBhcmUgZnVsZmlsbGVkIGZvciBhCisgICMgZGV2ZWxvcG1lbnQgYnVpbGQsIHNvIHdlIGRpcmVjdGx5IGFjY2VzcyB0aGUgbmVjZXNzYXJ5IGluY2x1ZGUgZGlyZWN0b3J5CisgICMgaW5mb3JtYXRpb24gdXNpbmcgYHBrZy1jb25maWcnLgorICBJTkNMVURFX0ZMQUdTICs9ICQoc2hlbGwgcGtnLWNvbmZpZyAtLWNmbGFncyBsaWJwbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJmYnV6eiApCitlbmRpZgorCisKKyMgQyBmbGFncyB1c2VkIGZvciB0aGUgY29tcGlsYXRpb24gb2YgYW4gb2JqZWN0IGZpbGUuICBUaGlzIG11c3QgaW5jbHVkZSBhdAorIyBsZWFzdCB0aGUgcGF0aHMgZm9yIHRoZSBgYmFzZScgYW5kIGBidWlsZHMvPHN5c3RlbT4nIGRpcmVjdG9yaWVzOworIyBkZWJ1Zy9vcHRpbWl6YXRpb24vd2FybmluZyBmbGFncyArIGFuc2kgY29tcGxpYW5jZSBpZiBuZWVkZWQuCisjCisjICQoSU5DTFVERV9GTEFHUykgc2hvdWxkIGNvbWUgYmVmb3JlICQoQ0ZMQUdTKSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoCisjIG9sZCBGcmVlVHlwZSB2ZXJzaW9ucy4KKyMKKyMgTm90ZSB3aGF0IHdlIGFsc28gZGVmaW5lIHRoZSBtYWNybyBGVDJfQlVJTERfTElCUkFSWSB3aGVuIGJ1aWxkaW5nCisjIEZyZWVUeXBlLiAgVGhpcyBpcyByZXF1aXJlZCB0byBsZXQgb3VyIHNvdXJjZXMgaW5jbHVkZSB0aGUgaW50ZXJuYWwKKyMgaGVhZGVycyAoc29tZXRoaW5nIGZvcmJpZGRlbiBieSBjbGllbnRzKS4KKyMKKyMgRmluYWxseSwgd2UgZGVmaW5lIEZUX0NPTkZJR19NT0RVTEVTX0ggc28gdGhhdCB0aGUgY29tcGlsZXIgdXNlcyB0aGUKKyMgZ2VuZXJhdGVkIHZlcnNpb24gb2YgYGZ0bW9kdWxlLmgnIGluICQoT0JKX0RJUikuICBJZiB0aGVyZSBpcyBhbgorIyBgZnRvcHRpb24uaCcgZmlsZXMgaW4gJChPQkpfRElSKSwgZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggdG9vLgorIworaWZuZXEgKCQod2lsZGNhcmQgJChPQkpfRElSKS9mdG9wdGlvbi5oKSwpCisgIEZUT1BUSU9OX0ggICAgOj0gJChPQkpfRElSKS9mdG9wdGlvbi5oCisgIEZUT1BUSU9OX0ZMQUcgOj0gJERGVF9DT05GSUdfT1BUSU9OU19IPSI8ZnRvcHRpb24uaD4iCitlbmRpZgorCisjIGBDUFBGTEFHUycgbWlnaHQgYmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGluIHRoZSBlbnZpcm9ubWVudC4KKyMKK0ZUX0NGTEFHUyAgPSAkKENQUEZMQUdTKSBcCisgICAgICAgICAgICAgJChDRkxBR1MpIFwKKyAgICAgICAgICAgICAkREZUMl9CVUlMRF9MSUJSQVJZIFwKKyAgICAgICAgICAgICAkREZUX0NPTkZJR19NT0RVTEVTX0g9IjxmdG1vZHVsZS5oPiIgXAorICAgICAgICAgICAgICQoRlRPUFRJT05fRkxBRykKKworCisjIEluY2x1ZGUgdGhlIGBleHBvcnRzJyBydWxlcyBmaWxlLgorIworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9leHBvcnRzLm1rCisKKworIyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIG9iamVjdHMuCisjCitPQkpFQ1RTX0xJU1QgOj0KKworCisjIERlZmluZSAkKFBVQkxJQ19IKSBhcyB0aGUgbGlzdCBvZiBhbGwgcHVibGljIGhlYWRlciBmaWxlcyBsb2NhdGVkIGluCisjIGAkKFRPUF9ESVIpL2luY2x1ZGUvZnJlZXR5cGUnLiAgJChJTlRFUk5BTF9IKSwgYW5kICQoQ09ORklHX0gpIGFyZSBkZWZpbmVkCisjIHNpbWlsYXJseS4KKyMKKyMgVGhpcyBpcyB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBkZXBlbmRlbmN5IHJ1bGVzIC0tIGlmIG9uZSBvZiB0aGVzZSBmaWxlcworIyBjaGFuZ2VzLCB0aGUgd2hvbGUgbGlicmFyeSBpcyByZWNvbXBpbGVkLgorIworUFVCTElDX0ggICA6PSAkKHdpbGRjYXJkICQoUFVCTElDX0RJUikvKi5oKQorSU5URVJOQUxfSCA6PSAkKHdpbGRjYXJkICQoSU5URVJOQUxfRElSKS8qLmgpIFwKKyAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFNFUlZJQ0VTX0RJUikvKi5oKQorQ09ORklHX0ggICA6PSAkKHdpbGRjYXJkICQoQ09ORklHX0RJUikvKi5oKSBcCisgICAgICAgICAgICAgICQod2lsZGNhcmQgJChCVUlMRF9ESVIpL2NvbmZpZy8qLmgpIFwKKyAgICAgICAgICAgICAgJChGVE1PRFVMRV9IKSBcCisgICAgICAgICAgICAgICQoRlRPUFRJT05fSCkKK0RFVkVMX0ggICAgOj0gJCh3aWxkY2FyZCAkKFRPUF9ESVIpL2RldmVsLyouaCkKKworRlJFRVRZUEVfSCA6PSAkKFBVQkxJQ19IKSAkKElOVEVSTkFMX0gpICQoQ09ORklHX0gpICQoREVWRUxfSCkKKworCitGVF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAkKElOQ0xVREVfRkxBR1MpICQoRlRfQ0ZMQUdTKQorCisjIGZ0c3lzdGVtIGNvbXBvbmVudAorIworRlRTWVNfU1JDID89ICQoQkFTRV9ESVIpL2Z0c3lzdGVtLmMKKworRlRTWVNfT0JKIDo9ICQoT0JKX0RJUikvZnRzeXN0ZW0uJE8KKworT0JKRUNUU19MSVNUICs9ICQoRlRTWVNfT0JKKQorCiskKEZUU1lTX09CSik6ICQoRlRTWVNfU1JDKSAkKEZSRUVUWVBFX0gpCisJJChGVF9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyBmdGRlYnVnIGNvbXBvbmVudAorIworRlRERUJVR19TUkMgPz0gJChCQVNFX0RJUikvZnRkZWJ1Zy5jCisKK0ZUREVCVUdfT0JKIDo9ICQoT0JKX0RJUikvZnRkZWJ1Zy4kTworCitPQkpFQ1RTX0xJU1QgKz0gJChGVERFQlVHX09CSikKKworJChGVERFQlVHX09CSik6ICQoRlRERUJVR19TUkMpICQoRlJFRVRZUEVfSCkKKwkkKEZUX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIEluY2x1ZGUgYWxsIHJ1bGUgZmlsZXMgZnJvbSBGcmVlVHlwZSBjb21wb25lbnRzLgorIworaW5jbHVkZSAkKFNSQ19ESVIpL2Jhc2UvcnVsZXMubWsKK2luY2x1ZGUgJChwYXRzdWJzdCAlLCQoU1JDX0RJUikvJS9ydWxlcy5taywkKE1PRFVMRVMpKQorCisKKyMgZnRpbml0IGNvbXBvbmVudAorIworIyAgIFRoZSBDIHNvdXJjZSBgZnRpbml0LmMnIGNvbnRhaW5zIHRoZSBGcmVlVHlwZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKyMgICBJdCBpcyBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgb25lIG9yIG1vcmUgZHJpdmVycyB3aGVuIHRoZSBBUEkKKyMgICBmdW5jdGlvbiBGVF9Jbml0X0ZyZWVUeXBlKCkgaXMgY2FsbGVkLgorIworIyAgIFRoZSBzZXQgb2YgaW5pdGlhbCBkcml2ZXJzIGlzIGRldGVybWluZWQgYnkgdGhlIGRyaXZlciBNYWtlZmlsZXMKKyMgICBpbmNsdWRlcyBhYm92ZS4gIEVhY2ggZHJpdmVyIE1ha2VmaWxlIHVwZGF0ZXMgdGhlIEZUSU5JVF94eHggbGlzdHMKKyMgICB3aGljaCBjb250YWluIGFkZGl0aW9uYWwgaW5jbHVkZSBwYXRocyBhbmQgbWFjcm9zIHVzZWQgdG8gY29tcGlsZSB0aGUKKyMgICBzaW5nbGUgYGZ0aW5pdC5jJyBzb3VyY2UuCisjCitGVElOSVRfU1JDIDo9ICQoQkFTRV9ESVIpL2Z0aW5pdC5jCitGVElOSVRfT0JKIDo9ICQoT0JKX0RJUikvZnRpbml0LiRPCisKK09CSkVDVFNfTElTVCArPSAkKEZUSU5JVF9PQkopCisKKyQoRlRJTklUX09CSik6ICQoRlRJTklUX1NSQykgJChGUkVFVFlQRV9IKQorCSQoRlRfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgQWxsIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0cy4KKyMKK09CSl9NIDo9ICQoQkFTRV9PQkpfTSkgJChCQVNFX0VYVF9PQkopICQoRFJWX09CSlNfTSkKK09CSl9TIDo9ICQoQkFTRV9PQkpfUykgJChCQVNFX0VYVF9PQkopICQoRFJWX09CSlNfUykKKworCisjIFRoZSB0YXJnZXQgYG11bHRpJyBvbiB0aGUgTWFrZSBjb21tYW5kIGxpbmUgaW5kaWNhdGVzIHRoYXQgd2Ugd2FudCB0bworIyBjb21waWxlIGVhY2ggc291cmNlIGZpbGUgaW5kZXBlbmRlbnRseS4KKyMKKyMgT3RoZXJ3aXNlLCBlYWNoIG1vZHVsZS9kcml2ZXIgaXMgY29tcGlsZWQgaW4gYSBzaW5nbGUgb2JqZWN0IGZpbGUgdGhyb3VnaAorIyBzb3VyY2UgZmlsZSBpbmNsdXNpb24gKHNlZSBgc3JjL2Jhc2UvZnRiYXNlLmMnIG9yCisjIGBzcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYycgZm9yIGV4YW1wbGVzKS4KKyMKK0JBU0VfT0JKRUNUUyA6PSAkKE9CSkVDVFNfTElTVCkKKworaWZuZXEgKCQoZmluZHN0cmluZyBtdWx0aSwkKE1BS0VDTURHT0FMUykpLCkKKyAgT0JKRUNUU19MSVNUICs9ICQoT0JKX00pCitlbHNlCisgIE9CSkVDVFNfTElTVCArPSAkKE9CSl9TKQorZW5kaWYKKworb2JqZWN0czogJChPQkpFQ1RTX0xJU1QpCisKK2xpYnJhcnk6ICQoUFJPSkVDVF9MSUJSQVJZKQorCisKKyMgT3B0aW9uIGAtQicgZGlzYWJsZXMgZ2VuZXJhdGlvbiBvZiAucHljIGZpbGVzIChhdmFpbGFibGUgc2luY2UgcHl0aG9uIDIuNikKKyMKK3JlZmRvYzoKKwlweXRob24gLUIgJChTUkNfRElSKS90b29scy9kb2NtYWtlci9kb2NtYWtlci5weSBcCisgICAgICAgICAgICAgICAgICAtLXByZWZpeD1mdDIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIC0tdGl0bGU9RnJlZVR5cGUtJCh2ZXJzaW9uKSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgLS1vdXRwdXQ9JChET0NfRElSKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAkKFBVQkxJQ19ESVIpLyouaCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICQoUFVCTElDX0RJUikvY29uZmlnLyouaCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgJChQVUJMSUNfRElSKS9jYWNoZS8qLmgKKworCisuUEhPTlk6IGNsZWFuX3Byb2plY3Rfc3RkIGRpc3RjbGVhbl9wcm9qZWN0X3N0ZAorCisjIFN0YW5kYXJkIGNsZWFuaW5nIGFuZCBkaXN0Y2xlYW4gcnVsZXMuICBUaGVzZSBhcmUgbm90IGFjY2VwdGVkCisjIG9uIGFsbCBzeXN0ZW1zIHRob3VnaC4KKyMKK2NsZWFuX3Byb2plY3Rfc3RkOgorCS0kKERFTEVURSkgJChCQVNFX09CSkVDVFMpICQoT0JKX00pICQoT0JKX1MpICQoQ0xFQU4pCisKK2Rpc3RjbGVhbl9wcm9qZWN0X3N0ZDogY2xlYW5fcHJvamVjdF9zdGQKKwktJChERUxFVEUpICQoUFJPSkVDVF9MSUJSQVJZKQorCS0kKERFTEVURSkgKi5vcmlnICp+IGNvcmUgKi5jb3JlICQoRElTVENMRUFOKQorCisKKy5QSE9OWTogY2xlYW5fcHJvamVjdF9kb3MgZGlzdGNsZWFuX3Byb2plY3RfZG9zCisKKyMgVGhlIERvcyBjb21tYW5kIHNoZWxsIGRvZXMgbm90IHN1cHBvcnQgdmVyeSBsb25nIGxpc3Qgb2YgYXJndW1lbnRzLCBzbworIyB3ZSBhcmUgc3R1Y2sgd2l0aCB3aWxkY2FyZHMuCisjCisjIERvbid0IGJyZWFrIHRoZSBjb21tYW5kIGxpbmVzIHdpdGggXDsgdGhpcyBwcmV2ZW50cyB0aGUgImRlbCIgY29tbWFuZCBmcm9tCisjIHdvcmtpbmcgY29ycmVjdGx5IG9uIFdpbjl4LgorIworY2xlYW5fcHJvamVjdF9kb3M6CisJLSQoREVMRVRFKSAkKHN1YnN0IC8sJChTRVApLCQoT0JKX0RJUikvKi4kTyAkKENMRUFOKSAkKE5PX09VVFBVVCkpCisKK2Rpc3RjbGVhbl9wcm9qZWN0X2RvczogY2xlYW5fcHJvamVjdF9kb3MKKwktJChERUxFVEUpICQoc3Vic3QgLywkKFNFUCksJChQUk9KRUNUX0xJQlJBUlkpICQoRElTVENMRUFOKSAkKE5PX09VVFBVVCkpCisKKworLlBIT05ZOiByZW1vdmVfY29uZmlnX21rIHJlbW92ZV9mdG1vZHVsZV9oCisKKyMgUmVtb3ZlIGNvbmZpZ3VyYXRpb24gZmlsZSAodXNlZCBmb3IgZGlzdGNsZWFuKS4KKyMKK3JlbW92ZV9jb25maWdfbWs6CisJLSQoREVMRVRFKSAkKHN1YnN0IC8sJChTRVApLCQoQ09ORklHX01LKSAkKE5PX09VVFBVVCkpCisKKyMgUmVtb3ZlIG1vZHVsZSBsaXN0ICh1c2VkIGZvciBkaXN0Y2xlYW4pLgorIworcmVtb3ZlX2Z0bW9kdWxlX2g6CisJLSQoREVMRVRFKSAkKHN1YnN0IC8sJChTRVApLCQoRlRNT0RVTEVfSCkgJChOT19PVVRQVVQpKQorCisKKy5QSE9OWTogY2xlYW4gZGlzdGNsZWFuCisKKyMgVGhlIGBjb25maWcubWsnIGZpbGUgbXVzdCBkZWZpbmUgYGNsZWFuX2ZyZWV0eXBlJyBhbmQKKyMgYGRpc3RjbGVhbl9mcmVldHlwZScuICBJbXBsZW1lbnRhdGlvbnMgbWF5IHVzZSB0byByZWxheSB0aGVzZSB0byBlaXRoZXIKKyMgdGhlIGBzdGQnIG9yIGBkb3MnIHZlcnNpb25zIGZyb20gYWJvdmUsIG9yIHNpbXBseSBwcm92aWRlIHRoZWlyIG93bgorIyBpbXBsZW1lbnRhdGlvbi4KKyMKK2NsZWFuOiBjbGVhbl9wcm9qZWN0CitkaXN0Y2xlYW46IGRpc3RjbGVhbl9wcm9qZWN0IHJlbW92ZV9jb25maWdfbWsgcmVtb3ZlX2Z0bW9kdWxlX2gKKwktJChERUxFVEUpICQoc3Vic3QgLywkKFNFUCksJChET0NfRElSKS8qLmh0bWwgJChOT19PVVRQVVQpKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL2xpbmtfZG9zLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9saW5rX2Rvcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQ4NDViCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9saW5rX2Rvcy5tawpAQCAtMCwwICsxLDQyIEBACisjCisjICBMaW5rIGluc3RydWN0aW9ucyBmb3IgRG9zLWxpa2Ugc3lzdGVtcyAoRG9zLCBXaW4zMiwgT1MvMikKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK2lmZGVmIEJVSUxEX1BST0pFQ1QKKworICAuUEhPTlk6IGNsZWFuX3Byb2plY3QgZGlzdGNsZWFuX3Byb2plY3QKKworICAjIE5vdyBpbmNsdWRlIHRoZSBtYWluIHN1Yi1tYWtlZmlsZS4gIEl0IGNvbnRhaW5zIGFsbCB0aGUgcnVsZXMgdXNlZCB0bworICAjIGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggdGhlIHByZXZpb3VzIHZhcmlhYmxlcyBkZWZpbmVkLgorICAjCisgIGluY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvJChQUk9KRUNUKS5taworCisgICMgVGhlIGNsZWFudXAgdGFyZ2V0cy4KKyAgIworICBjbGVhbl9wcm9qZWN0OiBjbGVhbl9wcm9qZWN0X2RvcworICBkaXN0Y2xlYW5fcHJvamVjdDogZGlzdGNsZWFuX3Byb2plY3RfZG9zCisKKyAgIyBUaGlzIGZpbmFsIHJ1bGUgaXMgdXNlZCB0byBsaW5rIGFsbCBvYmplY3QgZmlsZXMgaW50byBhIHNpbmdsZSBsaWJyYXJ5LgorICAjIHRoaXMgaXMgY29tcGlsZXItc3BlY2lmaWMKKyAgIworICAkKFBST0pFQ1RfTElCUkFSWSk6ICQoT0JKRUNUU19MSVNUKQorICAgIGlmZGVmIENMRUFOX0xJQlJBUlkKKwkgIC0kKENMRUFOX0xJQlJBUlkpICQoTk9fT1VUUFVUKQorICAgIGVuZGlmCisJICAkKExJTktfTElCUkFSWSkKKworZW5kaWYKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9saW5rX3N0ZC5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbGlua19zdGQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2YjJlNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbGlua19zdGQubWsKQEAgLTAsMCArMSw0MiBAQAorIworIyAgTGluayBpbnN0cnVjdGlvbnMgZm9yIHN0YW5kYXJkIHN5c3RlbXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK2lmZGVmIEJVSUxEX1BST0pFQ1QKKworICAuUEhPTlk6IGNsZWFuX3Byb2plY3QgZGlzdGNsZWFuX3Byb2plY3QKKworICAjIE5vdyBpbmNsdWRlIHRoZSBtYWluIHN1Yi1tYWtlZmlsZS4gIEl0IGNvbnRhaW5zIGFsbCB0aGUgcnVsZXMgdXNlZCB0bworICAjIGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggdGhlIHByZXZpb3VzIHZhcmlhYmxlcyBkZWZpbmVkLgorICAjCisgIGluY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvJChQUk9KRUNUKS5taworCisgICMgVGhlIGNsZWFudXAgdGFyZ2V0cy4KKyAgIworICBjbGVhbl9wcm9qZWN0OiBjbGVhbl9wcm9qZWN0X3N0ZAorICBkaXN0Y2xlYW5fcHJvamVjdDogZGlzdGNsZWFuX3Byb2plY3Rfc3RkCisKKyAgIyBUaGlzIGZpbmFsIHJ1bGUgaXMgdXNlZCB0byBsaW5rIGFsbCBvYmplY3QgZmlsZXMgaW50byBhIHNpbmdsZSBsaWJyYXJ5LgorICAjIHRoaXMgaXMgY29tcGlsZXItc3BlY2lmaWMKKyAgIworICAkKFBST0pFQ1RfTElCUkFSWSk6ICQoT0JKRUNUU19MSVNUKQorICAgIGlmZGVmIENMRUFOX0xJQlJBUlkKKwkgIC0kKENMRUFOX0xJQlJBUlkpICQoTk9fT1VUUFVUKQorICAgIGVuZGlmCisJICAkKExJTktfTElCUkFSWSkKKworZW5kaWYKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE1NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQKQEAgLTAsMCArMSwyMTIgQEAKKyMgICBGaWxlOiAgICAgICBGcmVlVHlwZS5tNjhrX2NmbS5tYWtlCisjICAgVGFyZ2V0OiAgICAgRnJlZVR5cGUubTY4a19jZm0KKyMgICBDcmVhdGVkOiAgICBUaHVyc2RheSwgT2N0b2JlciAyNywgMjAwNSAwOToyMzoyNSBQTQorCisKK01BS0VGSUxFICAgICAgICA9IEZyZWVUeXBlLm02OGtfY2ZtLm1ha2UKK1x4QTVNb25kb0J1aWxkXHhBNSAgICA9IHtNQUtFRklMRX0gICMgTWFrZSBibGFuayB0byBhdm9pZCByZWJ1aWxkcyB3aGVuIG1ha2VmaWxlIGlzIG1vZGlmaWVkCisKK09iakRpciAgICAgICAgICA9IDpvYmpzOgorSW5jbHVkZXMgICAgICAgID0gIFx4QjYKKwkJCQkgIC1hbnNpIHN0cmljdCBceEI2CisJCQkJICAtaW5jbHVkZXMgdW5peCBceEI2CisJCQkJICAtaSA6aW5jbHVkZTogXHhCNgorCQkJCSAgLWkgOnNyYzogXHhCNgorCQkJCSAgLWkgOmluY2x1ZGU6ZnJlZXR5cGU6Y29uZmlnOgorCitTeW0tNjhLICAgICAgICAgPSAtc3ltIG9mZgorCitDT3B0aW9ucyAgICAgICAgPSBceEI2CisJCQktZCBGVF9NQUNJTlRPU0g9MSBceEI2CisJCQktZCBIQVZFX0ZTU1BFQz0xIFx4QjYKKwkJCS1kIEhBVkVfRlNSRUY9MCBceEI2CisJCQktZCBIQVZFX1FVSUNLRFJBV19UT09MQk9YPTEgXHhCNgorCQkJLWQgSEFWRV9RVUlDS0RSQVdfQ0FSQk9OPTAgXHhCNgorCQkJLWQgSEFWRV9BVFM9MCBceEI2CisJCQktZCBGVDJfQlVJTERfTElCUkFSWSBceEI2CisJCQktZCBGVF9DT05GSUdfQ09ORklHX0g9IjxmdGNvbmZpZy5oPiIgXHhCNgorCQkJLWQgRlRfQ09ORklHX01PRFVMRVNfSD0iPGZ0bW9kdWxlLmg+IiBceEI2CisJCQl7SW5jbHVkZXN9IHtTeW0tNjhLfSAtbW9kZWwgY2Ztc2VnCisKKworIyMjIFNvdXJjZSBGaWxlcyAjIyMKKworU3JjRmlsZXMgICAgICAgID0gIFx4QjYKKwkJCQkgIDpzcmM6YXV0b2ZpdDphdXRvZml0LmMgXHhCNgorCQkJCSAgOmJ1aWxkczptYWM6ZnRiYXNlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0YmJveC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJpdG1hcC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGRlYnVnLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Zm50Zm10LmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Z2x5cGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRneHZhbC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGluaXQuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRtbS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdG90dmFsLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0cGZyLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3ludGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRzeXN0ZW0uYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnR0eXBlMS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHdpbmZudC5jIFx4QjYKKwkJCQkgIDpzcmM6Y2FjaGU6ZnRjYWNoZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmRmOmJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2ZmOmNmZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2lkOnR5cGUxY2lkLmMgXHhCNgorIwkJCQkgIDpzcmM6Z3h2YWxpZDpneHZhbGlkLmMgXHhCNgorCQkJCSAgOnNyYzpnemlwOmZ0Z3ppcC5jIFx4QjYKKwkJCQkgIDpzcmM6YnppcDI6ZnRiemlwMi5jIFx4QjYKKwkJCQkgIDpzcmM6bHp3OmZ0bHp3LmMgXHhCNgorCQkJCSAgOnNyYzpvdHZhbGlkOm90dmFsaWQuYyBceEI2CisJCQkJICA6c3JjOnBjZjpwY2YuYyBceEI2CisJCQkJICA6c3JjOnBmcjpwZnIuYyBceEI2CisJCQkJICA6c3JjOnBzYXV4OnBzYXV4LmMgXHhCNgorCQkJCSAgOnNyYzpwc2hpbnRlcjpwc2hpbnRlci5jIFx4QjYKKwkJCQkgIDpzcmM6cHNuYW1lczpwc21vZHVsZS5jIFx4QjYKKwkJCQkgIDpzcmM6cmFzdGVyOnJhc3Rlci5jIFx4QjYKKwkJCQkgIDpzcmM6c2ZudDpzZm50LmMgXHhCNgorCQkJCSAgOnNyYzpzbW9vdGg6c21vb3RoLmMgXHhCNgorCQkJCSAgOnNyYzp0cnVldHlwZTp0cnVldHlwZS5jIFx4QjYKKwkJCQkgIDpzcmM6dHlwZTE6dHlwZTEuYyBceEI2CisJCQkJICA6c3JjOnR5cGU0Mjp0eXBlNDIuYyBceEI2CisJCQkJICA6c3JjOndpbmZvbnRzOndpbmZudC5jCisKKworIyMjIE9iamVjdCBGaWxlcyAjIyMKKworT2JqRmlsZXMtNjhLICAgID0gIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWF1dG9maXQuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGJhc2UuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGJib3guYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGJkZi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Yml0bWFwLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRkZWJ1Zy5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Zm50Zm10LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRmc3R5cGUuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGdseXBoLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRneHZhbC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0aW5pdC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0bW0uYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdG90dmFsLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRwZnIuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdHN0cm9rZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3ludGguYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdHN5c3RlbS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0dHlwZTEuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdHdpbmZudC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Y2FjaGUuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1iZGYuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1jZmYuYy5vIiBceEI2CisJCQkJICAie09iakRpcn10eXBlMWNpZC5jLm8iIFx4QjYKKyMJCQkJICAie09iakRpcn1neHZhbGlkLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRnemlwLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRiemlwMi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0bHp3LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9b3R2YWxpZC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBjZi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBmci5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBzYXV4LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cHNoaW50ZXIuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1wc21vZHVsZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXJhc3Rlci5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXNmbnQuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1zbW9vdGguYy5vIiBceEI2CisJCQkJICAie09iakRpcn10cnVldHlwZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXR5cGUxLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9dHlwZTQyLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9d2luZm50LmMubyIKKworCisjIyMgTGlicmFyaWVzICMjIworCitMaWJGaWxlcy02OEsgICAgPQorCisKKyMjIyBEZWZhdWx0IFJ1bGVzICMjIworCisuYy5vICBceEM0ICAuYyAge1x4QTVNb25kb0J1aWxkXHhBNX0KKwl7Q30ge2RlcERpcn17ZGVmYXVsdH0uYyAtbyB7dGFyZ0Rpcn17ZGVmYXVsdH0uYy5vIHtDT3B0aW9uc30KKworCisjIyMgQnVpbGQgUnVsZXMgIyMjCisKKzpidWlsZHM6bWFjOmZ0YmFzZS5jIFx4QzRceEM0IDpzcmM6YmFzZTpmdGJhc2UuYworCUR1cGxpY2F0ZSA6c3JjOmJhc2U6ZnRiYXNlLmMgOmJ1aWxkczptYWM6ZnRiYXNlLmMKKworIntPYmpEaXJ9ZnRiYXNlLmMubyIgXHhDNFx4QzQgOmJ1aWxkczptYWM6ZnRiYXNlLmMKKwl7Q30gOmJ1aWxkczptYWM6ZnRiYXNlLmMgLW8gIntPYmpEaXJ9ZnRiYXNlLmMubyIgXHhCNgorCQktaSA6YnVpbGRzOm1hYzogXHhCNgorCQktaSA6c3JjOmJhc2U6IFx4QjYKKwkJe0NPcHRpb25zfQorCitGcmVlVHlwZS5tNjhrX2NmbSAgICBceEM0XHhDNCAgRnJlZVR5cGUubTY4a19jZm0ubworCitGcmVlVHlwZS5tNjhrX2NmbS5vICBceEM0XHhDNCAge09iakZpbGVzLTY4S30ge0xpYkZpbGVzLTY4S30ge1x4QTVNb25kb0J1aWxkXHhBNX0KKwlMaWIgXHhCNgorCQktbyB7VGFyZ30gXHhCNgorCQl7T2JqRmlsZXMtNjhLfSBceEI2CisJCXtMaWJGaWxlcy02OEt9IFx4QjYKKwkJe1N5bS02OEt9IFx4QjYKKwkJLW1mIC1kCisKKworCisjIyMgUmVxdWlyZWQgRGVwZW5kZW5jaWVzICMjIworCisie09iakRpcn1hdXRvZml0LmMubyIgXHhDNCA6c3JjOmF1dG9maXQ6YXV0b2ZpdC5jCisjICJ7T2JqRGlyfWZ0YmFzZS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0YmFzZS5jCisie09iakRpcn1mdGJib3guYy5vIiBceEM0IDpzcmM6YmFzZTpmdGJib3guYworIntPYmpEaXJ9ZnRiZGYuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGJkZi5jCisie09iakRpcn1mdGJpdG1hcC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0Yml0bWFwLmMKKyJ7T2JqRGlyfWZ0ZGVidWcuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGRlYnVnLmMKKyJ7T2JqRGlyfWZ0Zm50Zm10LmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRmbnRmbXQuYworIntPYmpEaXJ9ZnRmc3R5cGUuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGZzdHlwZS5jCisie09iakRpcn1mdGdseXBoLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRnbHlwaC5jCisie09iakRpcn1mdGd4dmFsLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRneHZhbC5jCisie09iakRpcn1mdGluaXQuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGluaXQuYworIntPYmpEaXJ9ZnRtbS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0bW0uYworIntPYmpEaXJ9ZnRvdHZhbC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0b3R2YWwuYworIntPYmpEaXJ9ZnRwZnIuYy5vIiBceEM0IDpzcmM6YmFzZTpmdHBmci5jCisie09iakRpcn1mdHN0cm9rZS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMKKyJ7T2JqRGlyfWZ0c3ludGguYy5vIiBceEM0IDpzcmM6YmFzZTpmdHN5bnRoLmMKKyJ7T2JqRGlyfWZ0c3lzdGVtLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRzeXN0ZW0uYworIntPYmpEaXJ9ZnR0eXBlMS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0dHlwZTEuYworIntPYmpEaXJ9ZnR3aW5mbnQuYy5vIiBceEM0IDpzcmM6YmFzZTpmdHdpbmZudC5jCisie09iakRpcn1mdGNhY2hlLmMubyIgXHhDNCA6c3JjOmNhY2hlOmZ0Y2FjaGUuYworIntPYmpEaXJ9YmRmLmMubyIgXHhDNCA6c3JjOmJkZjpiZGYuYworIntPYmpEaXJ9Y2ZmLmMubyIgXHhDNCA6c3JjOmNmZjpjZmYuYworIntPYmpEaXJ9dHlwZTFjaWQuYy5vIiBceEM0IDpzcmM6Y2lkOnR5cGUxY2lkLmMKKyMgIntPYmpEaXJ9Z3h2YWxpZC5jLm8iIFx4QzQgOnNyYzpneHZhbGlkOmd4dmFsaWQuYworIntPYmpEaXJ9ZnRnemlwLmMubyIgXHhDNCA6c3JjOmd6aXA6ZnRnemlwLmMKKyJ7T2JqRGlyfWZ0YnppcDIuYy5vIiBceEM0IDpzcmM6YnppcDI6ZnRiemlwMi5jCisie09iakRpcn1mdGx6dy5jLm8iIFx4QzQgOnNyYzpsenc6ZnRsencuYworIntPYmpEaXJ9b3R2YWxpZC5jLm8iIFx4QzQgOnNyYzpvdHZhbGlkOm90dmFsaWQuYworIntPYmpEaXJ9cGNmLmMubyIgXHhDNCA6c3JjOnBjZjpwY2YuYworIntPYmpEaXJ9cGZyLmMubyIgXHhDNCA6c3JjOnBmcjpwZnIuYworIntPYmpEaXJ9cHNhdXguYy5vIiBceEM0IDpzcmM6cHNhdXg6cHNhdXguYworIntPYmpEaXJ9cHNoaW50ZXIuYy5vIiBceEM0IDpzcmM6cHNoaW50ZXI6cHNoaW50ZXIuYworIntPYmpEaXJ9cHNtb2R1bGUuYy5vIiBceEM0IDpzcmM6cHNuYW1lczpwc21vZHVsZS5jCisie09iakRpcn1yYXN0ZXIuYy5vIiBceEM0IDpzcmM6cmFzdGVyOnJhc3Rlci5jCisie09iakRpcn1zZm50LmMubyIgXHhDNCA6c3JjOnNmbnQ6c2ZudC5jCisie09iakRpcn1zbW9vdGguYy5vIiBceEM0IDpzcmM6c21vb3RoOnNtb290aC5jCisie09iakRpcn10cnVldHlwZS5jLm8iIFx4QzQgOnNyYzp0cnVldHlwZTp0cnVldHlwZS5jCisie09iakRpcn10eXBlMS5jLm8iIFx4QzQgOnNyYzp0eXBlMTp0eXBlMS5jCisie09iakRpcn10eXBlNDIuYy5vIiBceEM0IDpzcmM6dHlwZTQyOnR5cGU0Mi5jCisie09iakRpcn13aW5mbnQuYy5vIiBceEM0IDpzcmM6d2luZm9udHM6d2luZm50LmMKKworCisjIyMgT3B0aW9uYWwgRGVwZW5kZW5jaWVzICMjIworIyMjIEJ1aWxkIHRoaXMgdGFyZ2V0IHRvIGdlbmVyYXRlICJpbmNsdWRlIGZpbGUiIGRlcGVuZGVuY2llcy4gIyMjCisKK0RlcGVuZGVuY2llcyAgXHhDNCAgJE91dE9mRGF0ZQorCU1ha2VEZXBlbmQgXHhCNgorCQktYXBwZW5kIHtNQUtFRklMRX0gXHhCNgorCQktaWdub3JlICJ7Q0luY2x1ZGVzfSIgXHhCNgorCQktb2JqZGlyICJ7T2JqRGlyfSIgXHhCNgorCQktb2JqZXh0IC5vIFx4QjYKKwkJe0luY2x1ZGVzfSBceEI2CisJCXtTcmNGaWxlc30KKworCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjdmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dApAQCAtMCwwICsxLDIxMSBAQAorIyAgIEZpbGU6ICAgICAgIEZyZWVUeXBlLm02OGtfZmFyLm1ha2UKKyMgICBUYXJnZXQ6ICAgICBGcmVlVHlwZS5tNjhrX2ZhcgorIyAgIENyZWF0ZWQ6ICAgIFR1ZXNkYXksIE9jdG9iZXIgMjUsIDIwMDUgMDM6MzQ6MDUgUE0KKworCitNQUtFRklMRSAgICAgICAgPSBGcmVlVHlwZS5tNjhrX2Zhci5tYWtlCitceEE1TW9uZG9CdWlsZFx4QTUgICAgPSB7TUFLRUZJTEV9ICAjIE1ha2UgYmxhbmsgdG8gYXZvaWQgcmVidWlsZHMgd2hlbiBtYWtlZmlsZSBpcyBtb2RpZmllZAorCitPYmpEaXIgICAgICAgICAgPSA6b2JqczoKK0luY2x1ZGVzICAgICAgICA9ICBceEI2CisJCQkJICAtaW5jbHVkZXMgdW5peCBceEI2CisJCQkJICAtaSA6aW5jbHVkZTogXHhCNgorCQkJCSAgLWkgOnNyYzogXHhCNgorCQkJCSAgLWkgOmluY2x1ZGU6ZnJlZXR5cGU6Y29uZmlnOgorCitTeW0tNjhLICAgICAgICAgPSAtc3ltIG9mZgorCitDT3B0aW9ucyAgICAgICAgPSBceEI2CisJCQktZCBGVF9NQUNJTlRPU0g9MSBceEI2CisJCQktZCBIQVZFX0ZTU1BFQz0xIFx4QjYKKwkJCS1kIEhBVkVfRlNSRUY9MCBceEI2CisJCQktZCBIQVZFX1FVSUNLRFJBV19UT09MQk9YPTEgXHhCNgorCQkJLWQgSEFWRV9RVUlDS0RSQVdfQ0FSQk9OPTAgXHhCNgorCQkJLWQgSEFWRV9BVFM9MCBceEI2CisJCQktZCBGVDJfQlVJTERfTElCUkFSWSBceEI2CisJCQktZCBGVF9DT05GSUdfQ09ORklHX0g9IjxmdGNvbmZpZy5oPiIgXHhCNgorCQkJLWQgRlRfQ09ORklHX01PRFVMRVNfSD0iPGZ0bW9kdWxlLmg+IiBceEI2CisJCQl7SW5jbHVkZXN9IHtTeW0tNjhLfSAtbW9kZWwgZmFyCisKKworIyMjIFNvdXJjZSBGaWxlcyAjIyMKKworU3JjRmlsZXMgICAgICAgID0gIFx4QjYKKwkJCQkgIDpzcmM6YXV0b2ZpdDphdXRvZml0LmMgXHhCNgorCQkJCSAgOmJ1aWxkczptYWM6ZnRiYXNlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0YmJveC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJpdG1hcC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGRlYnVnLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Zm50Zm10LmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Z2x5cGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRneHZhbC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGluaXQuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRtbS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdG90dmFsLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0cGZyLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3ludGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRzeXN0ZW0uYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnR0eXBlMS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHdpbmZudC5jIFx4QjYKKwkJCQkgIDpzcmM6Y2FjaGU6ZnRjYWNoZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmRmOmJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2ZmOmNmZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2lkOnR5cGUxY2lkLmMgXHhCNgorCQkJCSAgOnNyYzpneHZhbGlkOmd4dmFsaWQuYyBceEI2CisJCQkJICA6c3JjOmd6aXA6ZnRnemlwLmMgXHhCNgorCQkJCSAgOnNyYzpiemlwMjpmdGJ6aXAyLmMgXHhCNgorCQkJCSAgOnNyYzpsenc6ZnRsencuYyBceEI2CisJCQkJICA6c3JjOm90dmFsaWQ6b3R2YWxpZC5jIFx4QjYKKwkJCQkgIDpzcmM6cGNmOnBjZi5jIFx4QjYKKwkJCQkgIDpzcmM6cGZyOnBmci5jIFx4QjYKKwkJCQkgIDpzcmM6cHNhdXg6cHNhdXguYyBceEI2CisJCQkJICA6c3JjOnBzaGludGVyOnBzaGludGVyLmMgXHhCNgorCQkJCSAgOnNyYzpwc25hbWVzOnBzbW9kdWxlLmMgXHhCNgorCQkJCSAgOnNyYzpyYXN0ZXI6cmFzdGVyLmMgXHhCNgorCQkJCSAgOnNyYzpzZm50OnNmbnQuYyBceEI2CisJCQkJICA6c3JjOnNtb290aDpzbW9vdGguYyBceEI2CisJCQkJICA6c3JjOnRydWV0eXBlOnRydWV0eXBlLmMgXHhCNgorCQkJCSAgOnNyYzp0eXBlMTp0eXBlMS5jIFx4QjYKKwkJCQkgIDpzcmM6dHlwZTQyOnR5cGU0Mi5jIFx4QjYKKwkJCQkgIDpzcmM6d2luZm9udHM6d2luZm50LmMKKworCisjIyMgT2JqZWN0IEZpbGVzICMjIworCitPYmpGaWxlcy02OEsgICAgPSAgXHhCNgorCQkJCSAgIntPYmpEaXJ9YXV0b2ZpdC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmFzZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmJveC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmRmLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRiaXRtYXAuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGRlYnVnLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRmbnRmbXQuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGZzdHlwZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Z2x5cGguYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGd4dmFsLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRpbml0LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRtbS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0b3R2YWwuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdHBmci5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3Ryb2tlLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRzeW50aC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3lzdGVtLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnR0eXBlMS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0d2luZm50LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRjYWNoZS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWJkZi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWNmZi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXR5cGUxY2lkLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9Z3h2YWxpZC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Z3ppcC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YnppcDIuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1mdGx6dy5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfW90dmFsaWQuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1wY2YuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1wZnIuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1wc2F1eC5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBzaGludGVyLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cHNtb2R1bGUuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1yYXN0ZXIuYy5vIiBceEI2CisJCQkJICAie09iakRpcn1zZm50LmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9c21vb3RoLmMubyIgXHhCNgorCQkJCSAgIntPYmpEaXJ9dHJ1ZXR5cGUuYy5vIiBceEI2CisJCQkJICAie09iakRpcn10eXBlMS5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXR5cGU0Mi5jLm8iIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXdpbmZudC5jLm8iCisKKworIyMjIExpYnJhcmllcyAjIyMKKworTGliRmlsZXMtNjhLICAgID0KKworCisjIyMgRGVmYXVsdCBSdWxlcyAjIyMKKworLmMubyAgXHhDNCAgLmMgIHtceEE1TW9uZG9CdWlsZFx4QTV9CisJe0N9IHtkZXBEaXJ9e2RlZmF1bHR9LmMgLW8ge3RhcmdEaXJ9e2RlZmF1bHR9LmMubyB7Q09wdGlvbnN9IFx4QjYKKwktYW5zaSBzdHJpY3QKKworIyMjIEJ1aWxkIFJ1bGVzICMjIworCis6YnVpbGRzOm1hYzpmdGJhc2UuYyBceEM0XHhDNCA6c3JjOmJhc2U6ZnRiYXNlLmMKKwlEdXBsaWNhdGUgOnNyYzpiYXNlOmZ0YmFzZS5jIDpidWlsZHM6bWFjOmZ0YmFzZS5jCisKKyJ7T2JqRGlyfWZ0YmFzZS5jLm8iIFx4QzRceEM0IDpidWlsZHM6bWFjOmZ0YmFzZS5jCisJe0N9IDpidWlsZHM6bWFjOmZ0YmFzZS5jIC1vICJ7T2JqRGlyfWZ0YmFzZS5jLm8iIFx4QjYKKwkJCQktaSA6YnVpbGRzOm1hYzogXHhCNgorCQkJCS1pIDpzcmM6YmFzZTogXHhCNgorCQkJCXtDT3B0aW9uc30KKworRnJlZVR5cGUubTY4a19mYXIgICAgXHhDNFx4QzQgIEZyZWVUeXBlLm02OGtfZmFyLm8KKworRnJlZVR5cGUubTY4a19mYXIubyAgXHhDNFx4QzQgIHtPYmpGaWxlcy02OEt9IHtMaWJGaWxlcy02OEt9IHtceEE1TW9uZG9CdWlsZFx4QTV9CisJTGliIFx4QjYKKwkJLW8ge1Rhcmd9IFx4QjYKKwkJe09iakZpbGVzLTY4S30gXHhCNgorCQl7TGliRmlsZXMtNjhLfSBceEI2CisJCXtTeW0tNjhLfSBceEI2CisJCS1tZiAtZAorCisKKworIyMjIFJlcXVpcmVkIERlcGVuZGVuY2llcyAjIyMKKworIntPYmpEaXJ9YXV0b2ZpdC5jLm8iIFx4QzQgOnNyYzphdXRvZml0OmF1dG9maXQuYworIyAie09iakRpcn1mdGJhc2UuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGJhc2UuYworIntPYmpEaXJ9ZnRiYm94LmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRiYm94LmMKKyJ7T2JqRGlyfWZ0YmRmLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRiZGYuYworIntPYmpEaXJ9ZnRiaXRtYXAuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGJpdG1hcC5jCisie09iakRpcn1mdGRlYnVnLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRkZWJ1Zy5jCisie09iakRpcn1mdGZudGZtdC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0Zm50Zm10LmMKKyJ7T2JqRGlyfWZ0ZnN0eXBlLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRmc3R5cGUuYworIntPYmpEaXJ9ZnRnbHlwaC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0Z2x5cGguYworIntPYmpEaXJ9ZnRneHZhbC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0Z3h2YWwuYworIntPYmpEaXJ9ZnRpbml0LmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRpbml0LmMKKyJ7T2JqRGlyfWZ0bW0uYy5vIiBceEM0IDpzcmM6YmFzZTpmdG1tLmMKKyJ7T2JqRGlyfWZ0b3R2YWwuYy5vIiBceEM0IDpzcmM6YmFzZTpmdG90dmFsLmMKKyJ7T2JqRGlyfWZ0cGZyLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRwZnIuYworIntPYmpEaXJ9ZnRzdHJva2UuYy5vIiBceEM0IDpzcmM6YmFzZTpmdHN0cm9rZS5jCisie09iakRpcn1mdHN5bnRoLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRzeW50aC5jCisie09iakRpcn1mdHN5c3RlbS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0c3lzdGVtLmMKKyJ7T2JqRGlyfWZ0dHlwZTEuYy5vIiBceEM0IDpzcmM6YmFzZTpmdHR5cGUxLmMKKyJ7T2JqRGlyfWZ0d2luZm50LmMubyIgXHhDNCA6c3JjOmJhc2U6ZnR3aW5mbnQuYworIntPYmpEaXJ9ZnRjYWNoZS5jLm8iIFx4QzQgOnNyYzpjYWNoZTpmdGNhY2hlLmMKKyJ7T2JqRGlyfWJkZi5jLm8iIFx4QzQgOnNyYzpiZGY6YmRmLmMKKyJ7T2JqRGlyfWNmZi5jLm8iIFx4QzQgOnNyYzpjZmY6Y2ZmLmMKKyJ7T2JqRGlyfXR5cGUxY2lkLmMubyIgXHhDNCA6c3JjOmNpZDp0eXBlMWNpZC5jCisie09iakRpcn1neHZhbGlkLmMubyIgXHhDNCA6c3JjOmd4dmFsaWQ6Z3h2YWxpZC5jCisie09iakRpcn1mdGd6aXAuYy5vIiBceEM0IDpzcmM6Z3ppcDpmdGd6aXAuYworIntPYmpEaXJ9ZnRiemlwMi5jLm8iIFx4QzQgOnNyYzpiemlwMjpmdGJ6aXAyLmMKKyJ7T2JqRGlyfWZ0bHp3LmMubyIgXHhDNCA6c3JjOmx6dzpmdGx6dy5jCisie09iakRpcn1vdHZhbGlkLmMubyIgXHhDNCA6c3JjOm90dmFsaWQ6b3R2YWxpZC5jCisie09iakRpcn1wY2YuYy5vIiBceEM0IDpzcmM6cGNmOnBjZi5jCisie09iakRpcn1wZnIuYy5vIiBceEM0IDpzcmM6cGZyOnBmci5jCisie09iakRpcn1wc2F1eC5jLm8iIFx4QzQgOnNyYzpwc2F1eDpwc2F1eC5jCisie09iakRpcn1wc2hpbnRlci5jLm8iIFx4QzQgOnNyYzpwc2hpbnRlcjpwc2hpbnRlci5jCisie09iakRpcn1wc21vZHVsZS5jLm8iIFx4QzQgOnNyYzpwc25hbWVzOnBzbW9kdWxlLmMKKyJ7T2JqRGlyfXJhc3Rlci5jLm8iIFx4QzQgOnNyYzpyYXN0ZXI6cmFzdGVyLmMKKyJ7T2JqRGlyfXNmbnQuYy5vIiBceEM0IDpzcmM6c2ZudDpzZm50LmMKKyJ7T2JqRGlyfXNtb290aC5jLm8iIFx4QzQgOnNyYzpzbW9vdGg6c21vb3RoLmMKKyJ7T2JqRGlyfXRydWV0eXBlLmMubyIgXHhDNCA6c3JjOnRydWV0eXBlOnRydWV0eXBlLmMKKyJ7T2JqRGlyfXR5cGUxLmMubyIgXHhDNCA6c3JjOnR5cGUxOnR5cGUxLmMKKyJ7T2JqRGlyfXR5cGU0Mi5jLm8iIFx4QzQgOnNyYzp0eXBlNDI6dHlwZTQyLmMKKyJ7T2JqRGlyfXdpbmZudC5jLm8iIFx4QzQgOnNyYzp3aW5mb250czp3aW5mbnQuYworCisKKyMjIyBPcHRpb25hbCBEZXBlbmRlbmNpZXMgIyMjCisjIyMgQnVpbGQgdGhpcyB0YXJnZXQgdG8gZ2VuZXJhdGUgImluY2x1ZGUgZmlsZSIgZGVwZW5kZW5jaWVzLiAjIyMKKworRGVwZW5kZW5jaWVzICBceEM0ICAkT3V0T2ZEYXRlCisJTWFrZURlcGVuZCBceEI2CisJCS1hcHBlbmQge01BS0VGSUxFfSBceEI2CisJCS1pZ25vcmUgIntDSW5jbHVkZXN9IiBceEI2CisJCS1vYmpkaXIgIntPYmpEaXJ9IiBceEI2CisJCS1vYmpleHQgLm8gXHhCNgorCQl7SW5jbHVkZXN9IFx4QjYKKwkJe1NyY0ZpbGVzfQorCisKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2FyYm9uLm1ha2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjFkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2FyYm9uLm1ha2UudHh0CkBAIC0wLDAgKzEsMjE1IEBACisjICAgRmlsZTogICAgICAgRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlCisjICAgVGFyZ2V0OiAgICAgRnJlZVR5cGUucHBjX2NhcmJvbgorIyAgIENyZWF0ZWQ6ICAgIEZyaWRheSwgT2N0b2JlciAyOCwgMjAwNSAwMzo0MDowNiBQTQorCisKK01BS0VGSUxFICAgICAgICA9IEZyZWVUeXBlLnBwY19jYXJib24ubWFrZQorXHhBNU1vbmRvQnVpbGRceEE1ICAgID0ge01BS0VGSUxFfSAgIyBNYWtlIGJsYW5rIHRvIGF2b2lkIHJlYnVpbGRzIHdoZW4gbWFrZWZpbGUgaXMgbW9kaWZpZWQKKworT2JqRGlyICAgICAgICAgID0gOm9ianM6CitJbmNsdWRlcyAgICAgICAgPSAgXHhCNgorCQkJCSAgLWFuc2kgc3RyaWN0IFx4QjYKKwkJCQkgIC1pbmNsdWRlcyB1bml4IFx4QjYKKwkJCQkgIC1pIDppbmNsdWRlOiBceEI2CisJCQkJICAtaSA6c3JjOiBceEI2CisJCQkJICAtaSA6aW5jbHVkZTpmcmVldHlwZTpjb25maWc6CisKK1N5bS1QUEMgICAgICAgICA9IC1zeW0gb2ZmCisKK1BQQ0NPcHRpb25zICAgICA9IFx4QjYKKwkJCS1kIEZUX01BQ0lOVE9TSD0xIFx4QjYKKwkJCS1kIEhBVkVfRlNTUEVDPTEgXHhCNgorICAgICAgICAgICAgICAgICAgICAgICAgLWQgSEFWRV9GU1JFRj0xIFx4QjYKKwkJCS1kIEhBVkVfUVVJQ0tEUkFXX1RPT0xCT1g9MSBceEI2CisJCQktZCBIQVZFX1FVSUNLRFJBV19DQVJCT049MSBceEI2CisgICAgICAgICAgICAgICAgICAgICAgICAtZCBIQVZFX0FUUz0wIFx4QjYKKwkJCS1kIEZUMl9CVUlMRF9MSUJSQVJZIFx4QjYKKwkJCS1kIEZUX0NPTkZJR19DT05GSUdfSD0iPGZ0Y29uZmlnLmg+IiBceEI2CisJCQktZCBGVF9DT05GSUdfTU9EVUxFU19IPSI8ZnRtb2R1bGUuaD4iIFx4QjYKKwkJCXtJbmNsdWRlc30ge1N5bS1QUEN9IC1kIFRBUkdFVF9BUElfTUFDX0NBUkJPTj0xCisKKworIyMjIFNvdXJjZSBGaWxlcyAjIyMKKworU3JjRmlsZXMgICAgICAgID0gIFx4QjYKKwkJCQkgIDpzcmM6YXV0b2ZpdDphdXRvZml0LmMgXHhCNgorCQkJCSAgOmJ1aWxkczptYWM6ZnRiYXNlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0YmJveC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJpdG1hcC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGRlYnVnLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Zm50Zm10LmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Z2x5cGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRneHZhbC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGluaXQuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRtbS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdG90dmFsLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0cGZyLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3ludGguYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRzeXN0ZW0uYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnR0eXBlMS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHdpbmZudC5jIFx4QjYKKwkJCQkgIDpzcmM6Y2FjaGU6ZnRjYWNoZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmRmOmJkZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2ZmOmNmZi5jIFx4QjYKKwkJCQkgIDpzcmM6Y2lkOnR5cGUxY2lkLmMgXHhCNgorCQkJCSAgOnNyYzpneHZhbGlkOmd4dmFsaWQuYyBceEI2CisJCQkJICA6c3JjOmd6aXA6ZnRnemlwLmMgXHhCNgorCQkJCSAgOnNyYzpiemlwMjpmdGJ6aXAyLmMgXHhCNgorCQkJCSAgOnNyYzpsenc6ZnRsencuYyBceEI2CisJCQkJICA6c3JjOm90dmFsaWQ6b3R2YWxpZC5jIFx4QjYKKwkJCQkgIDpzcmM6cGNmOnBjZi5jIFx4QjYKKwkJCQkgIDpzcmM6cGZyOnBmci5jIFx4QjYKKwkJCQkgIDpzcmM6cHNhdXg6cHNhdXguYyBceEI2CisJCQkJICA6c3JjOnBzaGludGVyOnBzaGludGVyLmMgXHhCNgorCQkJCSAgOnNyYzpwc25hbWVzOnBzbW9kdWxlLmMgXHhCNgorCQkJCSAgOnNyYzpyYXN0ZXI6cmFzdGVyLmMgXHhCNgorCQkJCSAgOnNyYzpzZm50OnNmbnQuYyBceEI2CisJCQkJICA6c3JjOnNtb290aDpzbW9vdGguYyBceEI2CisJCQkJICA6c3JjOnRydWV0eXBlOnRydWV0eXBlLmMgXHhCNgorCQkJCSAgOnNyYzp0eXBlMTp0eXBlMS5jIFx4QjYKKwkJCQkgIDpzcmM6dHlwZTQyOnR5cGU0Mi5jIFx4QjYKKwkJCQkgIDpzcmM6d2luZm9udHM6d2luZm50LmMKKworCisjIyMgT2JqZWN0IEZpbGVzICMjIworCitPYmpGaWxlcy1QUEMgICAgPSAgXHhCNgorCQkJCSAgIntPYmpEaXJ9YXV0b2ZpdC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmFzZS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmJveC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YmRmLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRiaXRtYXAuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGRlYnVnLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRmbnRmbXQuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGZzdHlwZS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Z2x5cGguYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGd4dmFsLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRpbml0LmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRtbS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0b3R2YWwuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdHBmci5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3Ryb2tlLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRzeW50aC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3lzdGVtLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnR0eXBlMS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0d2luZm50LmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRjYWNoZS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWJkZi5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWNmZi5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXR5cGUxY2lkLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9Z3h2YWxpZC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Z3ppcC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0YnppcDIuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGx6dy5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfW90dmFsaWQuYy54IiBceEI2CisJCQkJICAie09iakRpcn1wY2YuYy54IiBceEI2CisJCQkJICAie09iakRpcn1wZnIuYy54IiBceEI2CisJCQkJICAie09iakRpcn1wc2F1eC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBzaGludGVyLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cHNtb2R1bGUuYy54IiBceEI2CisJCQkJICAie09iakRpcn1yYXN0ZXIuYy54IiBceEI2CisJCQkJICAie09iakRpcn1zZm50LmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9c21vb3RoLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9dHJ1ZXR5cGUuYy54IiBceEI2CisJCQkJICAie09iakRpcn10eXBlMS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXR5cGU0Mi5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXdpbmZudC5jLngiCisKKworIyMjIExpYnJhcmllcyAjIyMKKworTGliRmlsZXMtUFBDICAgID0KKworCisjIyMgRGVmYXVsdCBSdWxlcyAjIyMKKworLmMueCAgXHhDNCAgLmMgIHtceEE1TW9uZG9CdWlsZFx4QTV9CisJe1BQQ0N9IHtkZXBEaXJ9e2RlZmF1bHR9LmMgLW8ge3RhcmdEaXJ9e2RlZmF1bHR9LmMueCB7UFBDQ09wdGlvbnN9CisKKworIyMjIEJ1aWxkIFJ1bGVzICMjIworCis6YnVpbGRzOm1hYzpmdGJhc2UuYyBceEM0XHhDNCA6c3JjOmJhc2U6ZnRiYXNlLmMKKwlEdXBsaWNhdGUgOnNyYzpiYXNlOmZ0YmFzZS5jIDpidWlsZHM6bWFjOmZ0YmFzZS5jCisKKyJ7T2JqRGlyfWZ0YmFzZS5jLngiICBceEM0XHhDNCAgOmJ1aWxkczptYWM6ZnRiYXNlLmMKKwl7UFBDQ30gOmJ1aWxkczptYWM6ZnRiYXNlLmMgLW8ge09iakRpcn1mdGJhc2UuYy54IFx4QjYKKwkJLWkgOmJ1aWxkczptYWM6IFx4QjYKKwkJLWkgOnNyYzpiYXNlOiBceEI2CisJCXtQUENDT3B0aW9uc30KKworRnJlZVR5cGUucHBjX2NhcmJvbiAgICBceEM0XHhDNCAgRnJlZVR5cGUucHBjX2NhcmJvbi5vCisKK0ZyZWVUeXBlLnBwY19jYXJib24ubyAgXHhDNFx4QzQgIHtPYmpGaWxlcy1QUEN9IHtMaWJGaWxlcy1QUEN9IHtceEE1TW9uZG9CdWlsZFx4QTV9CisJUFBDTGluayBceEI2CisJCS1vIHtUYXJnfSBceEI2CisJCXtPYmpGaWxlcy1QUEN9IFx4QjYKKwkJe0xpYkZpbGVzLVBQQ30gXHhCNgorCQl7U3ltLVBQQ30gXHhCNgorCQktbWYgLWQgXHhCNgorCQktdCAnWENPRicgXHhCNgorCQktYyAnTVBTICcgXHhCNgorCQkteG0gbAorCisKKworIyMjIFJlcXVpcmVkIERlcGVuZGVuY2llcyAjIyMKKworIntPYmpEaXJ9YXV0b2ZpdC5jLngiIFx4QzQgOnNyYzphdXRvZml0OmF1dG9maXQuYworIyAie09iakRpcn1mdGJhc2UuYy54IiBceEM0IDpidWlsZHM6bWFjOmZ0YmFzZS5jCisie09iakRpcn1mdGJib3guYy54IiBceEM0IDpzcmM6YmFzZTpmdGJib3guYworIntPYmpEaXJ9ZnRiZGYuYy54IiBceEM0IDpzcmM6YmFzZTpmdGJkZi5jCisie09iakRpcn1mdGJpdG1hcC5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0Yml0bWFwLmMKKyJ7T2JqRGlyfWZ0ZGVidWcuYy54IiBceEM0IDpzcmM6YmFzZTpmdGRlYnVnLmMKKyJ7T2JqRGlyfWZ0Zm50Zm10LmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRmbnRmbXQuYworIntPYmpEaXJ9ZnRmc3R5cGUuYy54IiBceEM0IDpzcmM6YmFzZTpmdGZzdHlwZS5jCisie09iakRpcn1mdGdseXBoLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRnbHlwaC5jCisie09iakRpcn1mdGd4dmFsLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRneHZhbC5jCisie09iakRpcn1mdGluaXQuYy54IiBceEM0IDpzcmM6YmFzZTpmdGluaXQuYworIntPYmpEaXJ9ZnRtbS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0bW0uYworIntPYmpEaXJ9ZnRvdHZhbC5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0b3R2YWwuYworIntPYmpEaXJ9ZnRwZnIuYy54IiBceEM0IDpzcmM6YmFzZTpmdHBmci5jCisie09iakRpcn1mdHN0cm9rZS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMKKyJ7T2JqRGlyfWZ0c3ludGguYy54IiBceEM0IDpzcmM6YmFzZTpmdHN5bnRoLmMKKyJ7T2JqRGlyfWZ0c3lzdGVtLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRzeXN0ZW0uYworIntPYmpEaXJ9ZnR0eXBlMS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0dHlwZTEuYworIntPYmpEaXJ9ZnR3aW5mbnQuYy54IiBceEM0IDpzcmM6YmFzZTpmdHdpbmZudC5jCisie09iakRpcn1mdGNhY2hlLmMueCIgXHhDNCA6c3JjOmNhY2hlOmZ0Y2FjaGUuYworIntPYmpEaXJ9YmRmLmMueCIgXHhDNCA6c3JjOmJkZjpiZGYuYworIntPYmpEaXJ9Y2ZmLmMueCIgXHhDNCA6c3JjOmNmZjpjZmYuYworIntPYmpEaXJ9dHlwZTFjaWQuYy54IiBceEM0IDpzcmM6Y2lkOnR5cGUxY2lkLmMKKyJ7T2JqRGlyfWd4dmFsaWQuYy54IiBceEM0IDpzcmM6Z3h2YWxpZDpneHZhbGlkLmMKKyJ7T2JqRGlyfWZ0Z3ppcC5jLngiIFx4QzQgOnNyYzpnemlwOmZ0Z3ppcC5jCisie09iakRpcn1mdGJ6aXAyLmMueCIgXHhDNCA6c3JjOmJ6aXAyOmZ0YnppcDIuYworIntPYmpEaXJ9ZnRsencuYy54IiBceEM0IDpzcmM6bHp3OmZ0bHp3LmMKKyJ7T2JqRGlyfW90dmFsaWQuYy54IiBceEM0IDpzcmM6b3R2YWxpZDpvdHZhbGlkLmMKKyJ7T2JqRGlyfXBjZi5jLngiIFx4QzQgOnNyYzpwY2Y6cGNmLmMKKyJ7T2JqRGlyfXBmci5jLngiIFx4QzQgOnNyYzpwZnI6cGZyLmMKKyJ7T2JqRGlyfXBzYXV4LmMueCIgXHhDNCA6c3JjOnBzYXV4OnBzYXV4LmMKKyJ7T2JqRGlyfXBzaGludGVyLmMueCIgXHhDNCA6c3JjOnBzaGludGVyOnBzaGludGVyLmMKKyJ7T2JqRGlyfXBzbW9kdWxlLmMueCIgXHhDNCA6c3JjOnBzbmFtZXM6cHNtb2R1bGUuYworIntPYmpEaXJ9cmFzdGVyLmMueCIgXHhDNCA6c3JjOnJhc3RlcjpyYXN0ZXIuYworIntPYmpEaXJ9c2ZudC5jLngiIFx4QzQgOnNyYzpzZm50OnNmbnQuYworIntPYmpEaXJ9c21vb3RoLmMueCIgXHhDNCA6c3JjOnNtb290aDpzbW9vdGguYworIntPYmpEaXJ9dHJ1ZXR5cGUuYy54IiBceEM0IDpzcmM6dHJ1ZXR5cGU6dHJ1ZXR5cGUuYworIntPYmpEaXJ9dHlwZTEuYy54IiBceEM0IDpzcmM6dHlwZTE6dHlwZTEuYworIntPYmpEaXJ9dHlwZTQyLmMueCIgXHhDNCA6c3JjOnR5cGU0Mjp0eXBlNDIuYworIntPYmpEaXJ9d2luZm50LmMueCIgXHhDNCA6c3JjOndpbmZvbnRzOndpbmZudC5jCisKKworIyMjIE9wdGlvbmFsIERlcGVuZGVuY2llcyAjIyMKKyMjIyBCdWlsZCB0aGlzIHRhcmdldCB0byBnZW5lcmF0ZSAiaW5jbHVkZSBmaWxlIiBkZXBlbmRlbmNpZXMuICMjIworCitEZXBlbmRlbmNpZXMgIFx4QzQgICRPdXRPZkRhdGUKKwlNYWtlRGVwZW5kIFx4QjYKKwkJLWFwcGVuZCB7TUFLRUZJTEV9IFx4QjYKKwkJLWlnbm9yZSAie0NJbmNsdWRlc30iIFx4QjYKKwkJLW9iamRpciAie09iakRpcn0iIFx4QjYKKwkJLW9iamV4dCAueCBceEI2CisJCXtJbmNsdWRlc30gXHhCNgorCQl7U3JjRmlsZXN9CisKKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NsYXNzaWMubWFrZS50eHQgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI3ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NsYXNzaWMubWFrZS50eHQKQEAgLTAsMCArMSwyMTYgQEAKKyMgICBGaWxlOiAgICAgICBGcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlCisjICAgVGFyZ2V0OiAgICAgRnJlZVR5cGUucHBjX2NsYXNzaWMKKyMgICBDcmVhdGVkOiAgICBUaHVyc2RheSwgT2N0b2JlciAyNywgMjAwNSAwNzo0Mjo0MyBQTQorCisKK01BS0VGSUxFICAgICAgICA9IEZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UKK1x4QTVNb25kb0J1aWxkXHhBNSAgICA9IHtNQUtFRklMRX0gICMgTWFrZSBibGFuayB0byBhdm9pZCByZWJ1aWxkcyB3aGVuIG1ha2VmaWxlIGlzIG1vZGlmaWVkCisKK09iakRpciAgICAgICAgICA9IDpvYmpzOgorSW5jbHVkZXMgICAgICAgID0gIFx4QjYKKwkJCQkgIC1hbnNpIHN0cmljdCBceEI2CisJCQkJICAtaW5jbHVkZXMgdW5peCBceEI2CisJCQkJICAtaSA6aW5jbHVkZTogXHhCNgorCQkJCSAgLWkgOnNyYzogXHhCNgorCQkJCSAgLWkgOmluY2x1ZGU6ZnJlZXR5cGU6Y29uZmlnOgorCitTeW0tUFBDICAgICAgICAgPSAtc3ltIG9mZgorCitQUENDT3B0aW9ucyAgICAgPSBceEI2CisgICAgICAgICAgICAgICAgICAgICAgICAtZCBGVF9NQUNJTlRPU0g9MSBceEI2CisgICAgICAgICAgICAgICAgICAgICAgICAtZCBIQVZFX0ZTU1BFQz0xIFx4QjYKKyAgICAgICAgICAgICAgICAgICAgICAgIC1kIEhBVkVfRlNSRUY9MCBceEI2CisgICAgICAgICAgICAgICAgICAgICAgICAtZCBIQVZFX1FVSUNLRFJBV19UT09MQk9YPTEgXHhCNgorICAgICAgICAgICAgICAgICAgICAgICAgLWQgSEFWRV9RVUlDS0RSQVdfQ0FSQk9OPTAgXHhCNgorICAgICAgICAgICAgICAgICAgICAgICAgLWQgSEFWRV9BVFM9MCBceEI2CisJCQktZCBGVDJfQlVJTERfTElCUkFSWSBceEI2CisJCQktZCBGVF9DT05GSUdfQ09ORklHX0g9IjxmdGNvbmZpZy5oPiIgXHhCNgorCQkJLWQgRlRfQ09ORklHX01PRFVMRVNfSD0iPGZ0bW9kdWxlLmg+IiBceEI2CisJCQl7SW5jbHVkZXN9IHtTeW0tUFBDfQorCisKKyMjIyBTb3VyY2UgRmlsZXMgIyMjCisKK1NyY0ZpbGVzICAgICAgICA9ICBceEI2CisJCQkJICA6c3JjOmF1dG9maXQ6YXV0b2ZpdC5jIFx4QjYKKwkJCQkgIDpidWlsZHM6bWFjOmZ0YmFzZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGJib3guYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRiZGYuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRiaXRtYXAuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRkZWJ1Zy5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGZudGZtdC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGZzdHlwZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdGdseXBoLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0Z3h2YWwuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRpbml0LmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0bW0uYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnRvdHZhbC5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHBmci5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHN0cm9rZS5jIFx4QjYKKwkJCQkgIDpzcmM6YmFzZTpmdHN5bnRoLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0c3lzdGVtLmMgXHhCNgorCQkJCSAgOnNyYzpiYXNlOmZ0dHlwZTEuYyBceEI2CisJCQkJICA6c3JjOmJhc2U6ZnR3aW5mbnQuYyBceEI2CisJCQkJICA6c3JjOmNhY2hlOmZ0Y2FjaGUuYyBceEI2CisJCQkJICA6c3JjOmJkZjpiZGYuYyBceEI2CisJCQkJICA6c3JjOmNmZjpjZmYuYyBceEI2CisJCQkJICA6c3JjOmNpZDp0eXBlMWNpZC5jIFx4QjYKKwkJCQkgIDpzcmM6Z3h2YWxpZDpneHZhbGlkLmMgXHhCNgorCQkJCSAgOnNyYzpnemlwOmZ0Z3ppcC5jIFx4QjYKKwkJCQkgIDpzcmM6YnppcDI6ZnRiemlwMi5jIFx4QjYKKwkJCQkgIDpzcmM6bHp3OmZ0bHp3LmMgXHhCNgorCQkJCSAgOnNyYzpvdHZhbGlkOm90dmFsaWQuYyBceEI2CisJCQkJICA6c3JjOnBjZjpwY2YuYyBceEI2CisJCQkJICA6c3JjOnBmcjpwZnIuYyBceEI2CisJCQkJICA6c3JjOnBzYXV4OnBzYXV4LmMgXHhCNgorCQkJCSAgOnNyYzpwc2hpbnRlcjpwc2hpbnRlci5jIFx4QjYKKwkJCQkgIDpzcmM6cHNuYW1lczpwc21vZHVsZS5jIFx4QjYKKwkJCQkgIDpzcmM6cmFzdGVyOnJhc3Rlci5jIFx4QjYKKwkJCQkgIDpzcmM6c2ZudDpzZm50LmMgXHhCNgorCQkJCSAgOnNyYzpzbW9vdGg6c21vb3RoLmMgXHhCNgorCQkJCSAgOnNyYzp0cnVldHlwZTp0cnVldHlwZS5jIFx4QjYKKwkJCQkgIDpzcmM6dHlwZTE6dHlwZTEuYyBceEI2CisJCQkJICA6c3JjOnR5cGU0Mjp0eXBlNDIuYyBceEI2CisJCQkJICA6c3JjOndpbmZvbnRzOndpbmZudC5jCisKKworIyMjIE9iamVjdCBGaWxlcyAjIyMKKworT2JqRmlsZXMtUFBDICAgID0gIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWF1dG9maXQuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGJhc2UuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGJib3guYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGJkZi5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Yml0bWFwLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRkZWJ1Zy5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Zm50Zm10LmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRmc3R5cGUuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGdseXBoLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRneHZhbC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0aW5pdC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0bW0uYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdG90dmFsLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRwZnIuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdHN0cm9rZS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0c3ludGguYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdHN5c3RlbS5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0dHlwZTEuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdHdpbmZudC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWZ0Y2FjaGUuYy54IiBceEI2CisJCQkJICAie09iakRpcn1iZGYuYy54IiBceEI2CisJCQkJICAie09iakRpcn1jZmYuYy54IiBceEI2CisJCQkJICAie09iakRpcn10eXBlMWNpZC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfWd4dmFsaWQuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGd6aXAuYy54IiBceEI2CisJCQkJICAie09iakRpcn1mdGJ6aXAyLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9ZnRsencuYy54IiBceEI2CisJCQkJICAie09iakRpcn1vdHZhbGlkLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cGNmLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cGZyLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cHNhdXguYy54IiBceEI2CisJCQkJICAie09iakRpcn1wc2hpbnRlci5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXBzbW9kdWxlLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9cmFzdGVyLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9c2ZudC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXNtb290aC5jLngiIFx4QjYKKwkJCQkgICJ7T2JqRGlyfXRydWV0eXBlLmMueCIgXHhCNgorCQkJCSAgIntPYmpEaXJ9dHlwZTEuYy54IiBceEI2CisJCQkJICAie09iakRpcn10eXBlNDIuYy54IiBceEI2CisJCQkJICAie09iakRpcn13aW5mbnQuYy54IgorCisKKyMjIyBMaWJyYXJpZXMgIyMjCisKK0xpYkZpbGVzLVBQQyAgICA9CisKKworIyMjIERlZmF1bHQgUnVsZXMgIyMjCisKKy5jLnggIFx4QzQgIC5jICB7XHhBNU1vbmRvQnVpbGRceEE1fQorCXtQUENDfSB7ZGVwRGlyfXtkZWZhdWx0fS5jIC1vIHt0YXJnRGlyfXtkZWZhdWx0fS5jLngge1BQQ0NPcHRpb25zfQorCisKKyMjIyBCdWlsZCBSdWxlcyAjIyMKKworOmJ1aWxkczptYWM6ZnRiYXNlLmMgXHhDNFx4QzQgOnNyYzpiYXNlOmZ0YmFzZS5jCisJRHVwbGljYXRlIDpzcmM6YmFzZTpmdGJhc2UuYyA6YnVpbGRzOm1hYzpmdGJhc2UuYworCisie09iakRpcn1mdGJhc2UuYy54IiAgXHhDNFx4QzQgIDpidWlsZHM6bWFjOmZ0YmFzZS5jCisJe1BQQ0N9IDpidWlsZHM6bWFjOmZ0YmFzZS5jIC1vICJ7T2JqRGlyfWZ0YmFzZS5jLngiIFx4QjYKKwkJLWkgOmJ1aWxkczptYWM6IFx4QjYKKwkJLWkgOnNyYzpiYXNlOiBceEI2CisJCXtQUENDT3B0aW9uc30KKworRnJlZVR5cGUucHBjX2NsYXNzaWMgICAgXHhDNFx4QzQgIEZyZWVUeXBlLnBwY19jbGFzc2ljLm8KKworRnJlZVR5cGUucHBjX2NsYXNzaWMubyAgXHhDNFx4QzQgIHtPYmpGaWxlcy1QUEN9IHtMaWJGaWxlcy1QUEN9IHtceEE1TW9uZG9CdWlsZFx4QTV9CisJUFBDTGluayBceEI2CisJCS1vIHtUYXJnfSBceEI2CisJCXtPYmpGaWxlcy1QUEN9IFx4QjYKKwkJe0xpYkZpbGVzLVBQQ30gXHhCNgorCQl7U3ltLVBQQ30gXHhCNgorCQktbWYgLWQgXHhCNgorCQktdCAnWENPRicgXHhCNgorCQktYyAnTVBTICcgXHhCNgorCQkteG0gbAorCisKKworIyMjIFJlcXVpcmVkIERlcGVuZGVuY2llcyAjIyMKKworIntPYmpEaXJ9YXV0b2ZpdC5jLngiIFx4QzQgOnNyYzphdXRvZml0OmF1dG9maXQuYworIyAie09iakRpcn1mdGJhc2UuYy54IiBceEM0IDpidWlsZHM6bWFjOmZ0YmFzZS5jCisie09iakRpcn1mdGJib3guYy54IiBceEM0IDpzcmM6YmFzZTpmdGJib3guYworIntPYmpEaXJ9ZnRiZGYuYy54IiBceEM0IDpzcmM6YmFzZTpmdGJkZi5jCisie09iakRpcn1mdGJpdG1hcC5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0Yml0bWFwLmMKKyJ7T2JqRGlyfWZ0ZGVidWcuYy54IiBceEM0IDpzcmM6YmFzZTpmdGRlYnVnLmMKKyJ7T2JqRGlyfWZ0Zm50Zm10LmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRmbnRmbXQuYworIntPYmpEaXJ9ZnRmc3R5cGUuYy54IiBceEM0IDpzcmM6YmFzZTpmdGZzdHlwZS5jCisie09iakRpcn1mdGdseXBoLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRnbHlwaC5jCisie09iakRpcn1mdGd4dmFsLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRneHZhbC5jCisie09iakRpcn1mdGluaXQuYy54IiBceEM0IDpzcmM6YmFzZTpmdGluaXQuYworIntPYmpEaXJ9ZnRtbS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0bW0uYworIntPYmpEaXJ9ZnRvdHZhbC5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0b3R2YWwuYworIntPYmpEaXJ9ZnRwZnIuYy54IiBceEM0IDpzcmM6YmFzZTpmdHBmci5jCisie09iakRpcn1mdHN0cm9rZS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0c3Ryb2tlLmMKKyJ7T2JqRGlyfWZ0c3ludGguYy54IiBceEM0IDpzcmM6YmFzZTpmdHN5bnRoLmMKKyJ7T2JqRGlyfWZ0c3lzdGVtLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRzeXN0ZW0uYworIntPYmpEaXJ9ZnR0eXBlMS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0dHlwZTEuYworIntPYmpEaXJ9ZnR3aW5mbnQuYy54IiBceEM0IDpzcmM6YmFzZTpmdHdpbmZudC5jCisie09iakRpcn1mdGNhY2hlLmMueCIgXHhDNCA6c3JjOmNhY2hlOmZ0Y2FjaGUuYworIntPYmpEaXJ9YmRmLmMueCIgXHhDNCA6c3JjOmJkZjpiZGYuYworIntPYmpEaXJ9Y2ZmLmMueCIgXHhDNCA6c3JjOmNmZjpjZmYuYworIntPYmpEaXJ9dHlwZTFjaWQuYy54IiBceEM0IDpzcmM6Y2lkOnR5cGUxY2lkLmMKKyJ7T2JqRGlyfWd4dmFsaWQuYy54IiBceEM0IDpzcmM6Z3h2YWxpZDpneHZhbGlkLmMKKyJ7T2JqRGlyfWZ0Z3ppcC5jLngiIFx4QzQgOnNyYzpnemlwOmZ0Z3ppcC5jCisie09iakRpcn1mdGJ6aXAyLmMueCIgXHhDNCA6c3JjOmJ6aXAyOmZ0YnppcDIuYworIntPYmpEaXJ9ZnRsencuYy54IiBceEM0IDpzcmM6bHp3OmZ0bHp3LmMKKyJ7T2JqRGlyfW90dmFsaWQuYy54IiBceEM0IDpzcmM6b3R2YWxpZDpvdHZhbGlkLmMKKyJ7T2JqRGlyfXBjZi5jLngiIFx4QzQgOnNyYzpwY2Y6cGNmLmMKKyJ7T2JqRGlyfXBmci5jLngiIFx4QzQgOnNyYzpwZnI6cGZyLmMKKyJ7T2JqRGlyfXBzYXV4LmMueCIgXHhDNCA6c3JjOnBzYXV4OnBzYXV4LmMKKyJ7T2JqRGlyfXBzaGludGVyLmMueCIgXHhDNCA6c3JjOnBzaGludGVyOnBzaGludGVyLmMKKyJ7T2JqRGlyfXBzbW9kdWxlLmMueCIgXHhDNCA6c3JjOnBzbmFtZXM6cHNtb2R1bGUuYworIntPYmpEaXJ9cmFzdGVyLmMueCIgXHhDNCA6c3JjOnJhc3RlcjpyYXN0ZXIuYworIntPYmpEaXJ9c2ZudC5jLngiIFx4QzQgOnNyYzpzZm50OnNmbnQuYworIntPYmpEaXJ9c21vb3RoLmMueCIgXHhDNCA6c3JjOnNtb290aDpzbW9vdGguYworIntPYmpEaXJ9dHJ1ZXR5cGUuYy54IiBceEM0IDpzcmM6dHJ1ZXR5cGU6dHJ1ZXR5cGUuYworIntPYmpEaXJ9dHlwZTEuYy54IiBceEM0IDpzcmM6dHlwZTE6dHlwZTEuYworIntPYmpEaXJ9dHlwZTQyLmMueCIgXHhDNCA6c3JjOnR5cGU0Mjp0eXBlNDIuYworIntPYmpEaXJ9d2luZm50LmMueCIgXHhDNCA6c3JjOndpbmZvbnRzOndpbmZudC5jCisKKworCisjIyMgT3B0aW9uYWwgRGVwZW5kZW5jaWVzICMjIworIyMjIEJ1aWxkIHRoaXMgdGFyZ2V0IHRvIGdlbmVyYXRlICJpbmNsdWRlIGZpbGUiIGRlcGVuZGVuY2llcy4gIyMjCisKK0RlcGVuZGVuY2llcyAgXHhDNCAgJE91dE9mRGF0ZQorCU1ha2VEZXBlbmQgXHhCNgorCQktYXBwZW5kIHtNQUtFRklMRX0gXHhCNgorCQktaWdub3JlICJ7Q0luY2x1ZGVzfSIgXHhCNgorCQktb2JqZGlyICJ7T2JqRGlyfSIgXHhCNgorCQktb2JqZXh0IC54IFx4QjYKKwkJe0luY2x1ZGVzfSBceEI2CisJCXtTcmNGaWxlc30KKworCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9SRUFETUUgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4ZTQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL1JFQURNRQpAQCAtMCwwICsxLDQwMSBAQAorVGhpcyBmb2xkZXIgY29udGFpbnMKKworICAqIE1ha2VmaWxlIHNrZWxldG9ucyBmb3IgQXBwbGUgTVBXIChNYWNpbnRvc2gncyBQcm9ncmFtbWVyJ3MgV29ya3Nob3ApCisKKyAgKiBQeXRob24gc2NyaXB0IHRvIGdlbmVyYXRlIE1QVyBtYWtlZmlsZSBmcm9tIHNrZWxldG9uCisKKyAgKiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yIDkuMCBwcm9qZWN0IGZpbGUgaW4gWE1MIGZvcm1hdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gV2hhdCBpcyB0aGlzCistLS0tLS0tLS0tLS0tLS0KKworRmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGRlc2lnbmVkIHRvIGJ1aWxkIEZyZWVUeXBlCitydW5uaW5nIG9uIGNsYXNzaWMgTWFjT1MuIFRvIGJ1aWxkIEZyZWVUeXBlIHJ1bm5pbmcgb24KK01hYyBPUyBYLCBidWlsZCBhcyB0aGUgc3lzdGVtIGlzIFVOSVguCisKK0hvd2V2ZXIsIE1hYyBPUyBYIGlzIG1vc3QgdXNlZnVsIHRvIG1hbmlwdWxhdGUgZmlsZXMgaW4KK3ZhbmlsbGEgRnJlZVR5cGUgdG8gZml0IGNsYXNzaWMgTWFjT1MuCisKK1RoZSBpbmZvcm1hdGlvbiBhYm91dCBNYWNPUyBzcGVjaWZpYyBBUEkgaXMgd3JpdHRlbiBpbgorYXBwZW5kaXggb2YgdGhpcyBkb2N1bWVudC4KKworMi4gUmVxdWlyZW1lbnQKKy0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIE1QVzogYSBmcmVlLWNoYXJnZWQgZGV2ZWxvcGVyIGVudmlyb25tZW50CitieSBBcHBsZSwgb3IgQ29kZVdhcnJpb3I6IGEgY29tbWVyY2lhbCBkZXZlbG9wZXIKK2Vudmlyb25tZW50IGJ5IE1ldHJvd2Vya3MuIEdDQyBmb3IgTVBXIGFuZCBTeW1hbnRlYworIlRoaW5rIEMiIGFyZSBub3QgdGVzdGVkIGF0IHByZXNlbnQuCisKKworICAyLTEuIEFwcGxlIE1QVworICAtLS0tLS0tLS0tLS0tLQorCisgIEZvbGxvd2luZyBDIGNvbXBpbGVycyBhcmUgdGVzdGVkOgorCisgICAgICBtNjhrIHRhcmdldDoJQXBwbGUgU0MgIDguOS4wZDNlMQorICAgICAgcHBjICB0YXJnZXQ6CUFwcGxlIE1yQyA1LjAuMGQzYzEKKworICBUaGUgZmluYWwgTVBXLUdNIChvZmZpY2lhbCByZWxlYXNlIG9uIDE5OTkvRGVjKSBpcyB0b28KKyAgb2xkIGFuZCBjYW5ub3QgY29tcGlsZSBGcmVlVHlwZSwgYmVjYXVzZSBidW5kbGVkIEMKKyAgY29tcGlsZXJzIGNhbm5vdCBzZWFyY2ggaGVhZGVyIGZpbGVzIGluIHN1YiBkaXJlY3Rvcmllcy4KKyAgVXBkYXRpbmcgYnkgdGhlIGZpbmFsIE1QVy1QUiAocHJlLXJlbGVhc2Ugb24gMjAwMS9GZWIpCisgIGlzIHJlcXVpcmVkLgorCisgIFJlcXVpcmVkIGZpbGVzIGFyZSBkb3dubG9hZGFibGUgZnJvbToKKworICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMvbXB3LXRvb2xzL2luZGV4Lmh0bWwKKworICBBbHNvIHlvdSBjYW4gZmluZCBkb2N1bWVudHMgaG93IHRvIHVwZGF0ZSBieSBNUFctUFIuCisKKyAgUHl0aG9uIGlzIHJlcXVpcmVkIHRvIHJlc3RvcmUgTVBXIG1ha2VmaWxlcyBmcm9tIHRoZQorICBza2VsZXRvbnMuIFB5dGhvbiBidW5kbGVkIHRvIE1hYyBPUyBYIGlzIGVub3VnaC4gRm9yCisgIGNsYXNzaWMgTWFjT1MsIE1hY1B5dGhvbiBpcyBhdmFpbGFibGU6CisKKyAgICAgIGh0dHA6Ly9ob21lcGFnZXMuY3dpLm5sL35qYWNrL21hY3B5dGhvbi8KKworICBNUFcgcmVxdWlyZXMgYWxsIGZpbGVzIGFyZSB0eXBlZCBieSByZXNvdXJjZSBmb3JrLgorICBSZXNFZGl0IGJ1bmRsZWQgdG8gTVBXIGlzIGVub3VnaC4gSW4gTWFjIE9TIFgsCisgIC9EZXZlbG9wZXIvVG9vbHMvU2V0RmlsZSBvZiBEZXZUb29sIGlzIHVzZWZ1bCB0bworICBtYW5pcHVsYXRlIGZyb20gY29tbWFuZGxpbmUuCisKKyAgMi0yLiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFhNTCBwcm9qZWN0IGZpbGUgaXMgZ2VuZXJhdGVkIGFuZCB0ZXN0ZWQgYnkKKyAgQ29kZVdhcnJpb3IgOS4wLiAgT2xkZXIgdmVyc2lvbnMgYXJlIG5vdCB0ZXN0ZWQKKyAgYXQgYWxsLiBBdCBwcmVzZW50LCBzdGF0aWMgbGlicmFyeSBmb3IgcHBjIHRhcmdldAorICBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3QgZmlsZS4KKworCiszLiBIb3cgdG8gYnVpbGQKKy0tLS0tLS0tLS0tLS0tLQorCisgIDMtMS4gQXBwbGUgTVBXCisgIC0tLS0tLS0tLS0tLS0tCisgIERldGFpbGVkIGJ1aWxkaW5nIHByb2NlZHVyZSBieSBBcHBsZSBNUFcgaXMKKyAgZGVzY3JpYmVkIGluIGZvbGxvd2luZy4KKworICAgIDMtMS0xLiBHZW5lcmF0ZSBNUFcgbWFrZWZpbGVzIGZyb20gdGhlIHNrZWxldG9ucworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSGVyZSBhcmUgNCBza2VsZXRvbnMgZm9yIGZvbGxvd2luZyB0YXJnZXRzIGFyZQorICAgIGluY2x1ZGVkLgorCisgICAgLSBGcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dAorICAgICAgQW5jaWVudCAzMmJpdCBiaW5hcnkgZXhlY3V0YWJsZSBmb3JtYXQgZm9yCisgICAgICBtNjhrIE1hY09TOiBTeXN0ZW0gNiwgd2l0aCAzMmJpdCBhZGRyZXNzaW5nCisgICAgICBtb2RlIChmYXItcG9pbnRlci1tb2RlbCkgU28tY2FsbGVkICJUb29sYm94IgorICAgICAgQVBJIGlzIHVzZWQuCisKKyAgICAtIEZyZWVUeXBlLm02OGtfY2ZtLm1ha2UudHh0CisgICAgICBDRk0gYmluYXJ5IGV4ZWN1dGFibGUgZm9ybWF0IGZvciBtNjhrIE1hY09TOgorICAgICAgU3lzdGVtIDcuIFNvLWNhbGxlZCAiVG9vbGJveCIgQVBJIGlzIHVzZWQuCisKKyAgICAtIEZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0CisgICAgICBDRk0gYmluYXJ5IGV4ZWN1dGFibGUgZm9ybWF0IGZvciBwcGMgTWFjT1M6CisgICAgICBTeXN0ZW0gNywgTWFjT1MgOCwgTWFjT1MgOS4gU28tY2FsbGVkICJUb29sYm94IgorICAgICAgQVBJIGlzIHVzZWQuCisKKyAgICAtIEZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQKKyAgICAgIENGTSBiaW5hcnkgZXhlY3V0YWJsZSBmb3JtYXQgZm9yIHBwYyBNYWNPUzoKKyAgICAgIE1hY09TIDkuIENhcmJvbiBBUEkgaXMgdXNlZC4KKworICAgIEF0IHByZXNlbnQsIHN0YXRpYyBsaWJyYXJ5IGlzIG9ubHkgc3VwcG9ydGVkLAorICAgIGFsdGhvdWdoIHRhcmdldHMgZXhjZXB0IG9mIG02OGtfZmFyIGFyZSBjYXBhYmxlCisgICAgdG8gdXNlIHNoYXJlZCBsaWJyYXJ5LgorCisgICAgTVBXIG1ha2VmaWxlIHN5bnRheCB1c2VzIDhiaXQgY2hhcmFjdGVycy4gVG8ga2VlcAorICAgIGZyb20gdmlvbGF0aW5nIHRoZW0gZHVyaW5nIHZlcnNpb24gY29udHJvbCwgaGVyZQorICAgIHdlIHN0b3JlIHNrZWxldG9ucyBpbiBwdXJlIEFTQ0lJIGZvcm1hdC4gWW91IG11c3QKKyAgICBnZW5lcmF0ZSBNUFcgbWFrZWZpbGUgYnkgUHl0aG9uIHNjcmlwdCBhc2NpaTJtcHcucHkuCisKKyAgICBJbiBNYWMgT1MgWCB0ZXJtaW5hbCwgeW91IGNhbiBjb252ZXJ0IGFzOgorCisJcHl0aG9uIGJ1aWxkcy9tYWMvYXNjaWkybXB3LnB5IFwKKwkJPCBidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0IFwKKwkJPiBGcmVlVHlwZS5tNjhrX2Zhci5tYWtlCisKKyAgICBUaGUgc2tlbGV0b25zIGFyZSBkZXNpZ25lZCB0byB1c2UgaW4gdGhlIHRvcAorICAgIGRpcmVjdG9yeSB3aGVyZSB0aGVyZSBhcmUgYnVpbGRzLCBpbmNsdWRlLCBzcmMgZXRjLgorICAgIFlvdSBtdXN0IG5hbWUgdGhlIGdlbmVyYXRlZCBNUFcgbWFrZWZpbGUgYnkgcmVtb3ZpbmcKKyAgICAiLnR4dCIgZnJvbSBzb3VyY2Ugc2tlbGV0b24gbmFtZS4KKworICAgIDMtMS0yLiBBZGQgcmVzb3VyY2UgZm9ya3MgdG8gcmVsYXRlZCBmaWxlcworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTVBXJ3MgTWFrZSBhbmQgQyBjb21waWxlcnMgY2Fubm90IHJlY29nbml6ZSBmaWxlcworICAgIHdpdGhvdXQgcmVzb3VyY2UgZm9yay4gWW91IGhhdmUgdG8gYWRkIHJlc291cmNlCisgICAgZm9yayB0byB0aGUgZmlsZXMgdGhhdCBNUFcgdXNlcy4gSW4gTWFjIE9TIFgKKyAgICB0ZXJtaW5hbCBvZiB0aGUgc3lzdGVtLCB5b3UgY2FuIGRvIGFzOgorCisJZmluZCAuIC1uYW1lICcqLltjaF0nIC1leGVjIFwKKwkJL0RldmVsb3Blci9Ub29scy9TZXRGaWxlIC1hIGwgLWMgIk1QUyAiIC10IFRFWFQgXHtcfSBcOworCisJZmluZCAuIC1uYW1lICcqLm1ha2UnIC1leGVjIFwKKwkJL0RldmVsb3Blci9Ub29scy9TZXRGaWxlIC1hIGwgLWMgIk1QUyAiIC10IFRFWFQgXHtcfSBcOworCisKKyAgICAzLTEtMy4gT3BlbiBNUFcgc2hlbGwgYW5kIGJ1aWxkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgT3BlbiBNUFcgc2hlbGwgYW5kIGdvIHRvIHRoZSB0b3AgZGlyZWN0b3J5IHRoYXQKKyAgICBGcmVlVHlwZSBzb3VyY2VzIGFyZSBleHRyYWN0ZWQgKE1QVyBtYWtlZmlsZSBtdXN0CisgICAgYmUgbG9jYXRlZCBpbiB0aGVyZSksIGZyb20gIlNldCBEaXJlY3RvcnkiIGluCisgICAgIkRpcmVjdG9yeSIgbWVudS4KKworICAgIENob29zZSAiQnVpbGQiIGZyb20gIkJ1aWxkIiBtZW51LCBhbmQgdHlwZSB0aGUKKyAgICBuYW1lIG9mIHByb2plY3QgYnkgcmVtb3ZpbmcgIi5tYWtlIiBmcm9tIE1QVworICAgIG1ha2VmaWxlLCBhczogRnJlZVR5cGUubTY4a19mYXIKKworICAgIElmIGJ1aWxkaW5nIGlzIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCwgeW91IGNhbiBmaW5kCisgICAgYnVpbHQgbGlicmFyeSBpbiBvYmpzLyBkaXJlY3RvcnkuCisKKworICAzLTIuIE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRGV0YWlsZWQgYnVpbGRpbmcgcHJvY2VkdXJlIGJ5IE1ldHJvd2Vya3MKKyAgQ29kZVdhcnJpb3IgKENXKSA5LjAgaXMgZGVzY3JpYmVkIGluIGZvbGxvd2luZy4KKworICAgIDMtMi0xLiBJbXBvcnQgWE1MIHByb2plY3QgZmlsZQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQ1cgWE1MIHByb2plY3QgZmlsZSBpcyBub3QgcmVhZHkgZm9yIGRvdWJsZS0KKyAgICBjbGljay4gU3RhcnQgQ29kZVdhcnJpb3IgSURFLCBhbmQgY2hvb3NlCisgICAgIkltcG9ydCBwcm9qZWN0IiBpbiAiRmlsZSIgbWVudS4gQ2hvb3NlIFhNTAorICAgIHByb2plY3QgZmlsZTogYnVpbGRzL21hYy9mdGxpYi5wcmoueG1sLgorICAgIEluIG5leHQsIHlvdSB3aWxsIGJlIGFza2VkIHdoZXJlIHRvIHNhdmUgQ1cKKyAgICBuYXRpdmUgcHJvamVjdCBmaWxlOiB5b3UgbXVzdCBjaG9vc2UKKyAgICAiYnVpbGRzL21hYy9mdGxpYi5wcmoiLiBUaGUgcHJvamVjdCBmaWxlIGlzCisgICAgZGVzaWduZWQgd2l0aCByZWxhdGl2ZSBwYXRoIGZyb20gdGhlcmUuIEFmdGVyCisgICAgQ1cgbmF0aXZlIHByb2plY3QgZmlsZSBpcyBnZW5lcmF0ZWQsIGl0IGlzCisgICAgYXV0b21hdGljYWxseSBsb2FkZWQsIHNtYWxsIHByb2plY3Qgd2luZG93CisgICAgdGl0bGVkICJmdGxpYi5wcmoiIGlzIGRpc3BsYXllZC4KKworICAgIDMtMi0yLiBCdWlsZGluZworICAgIC0tLS0tLS0tLS0tLS0tLQorICAgIENob29zZSAiTWFrZSIgZnJvbSAiUHJvamVjdCIgbWVudS4gSWYgYnVpbGRpbmcKKyAgICBpcyBzdWNjZXNzZnVsbHkgZmluaXNoZWQsIHlvdSBjYW4gZmluZCBidWlsdAorICAgIGxpYnJhcnkgYXQgb2Jqcy9GcmVlVHlwZUxpYi4KKworNC4gVE9ETworLS0tLS0tLQorCisgIDQtMS4gQWxsIG1vZHVsZXMgc2hvdWxkIGJlIGluY2x1ZGVkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQXQgcHJlc2VudCwgTVBXIG1ha2VmaWxlcyBhbmQgQ1cgcHJvamVjdCBmaWxlIGFyZQorICBqdXN0IHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhlc2UgYnkgTGVvbmFyZC4gU29tZQorICBtb2R1bGVzIGFyZSBhZGRlZCBhZnRlciB0aGUgbGFzdCBtYWludGVuYW5jZSwgdGhleQorICBhcmUgbm90IGluY2x1ZGVkLgorCisgIDQtMi4gV29ya2luZyB0ZXN0IHdpdGggZnRkZW1vcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBdCBwcmVzZW50LCBNUFcgbWFrZWZpbGVzIGFuZCBDVyBwcm9qZWN0IGZpbGUgY2FuCisgIGJ1aWxkIEZyZWVUeXBlIGZvciBjbGFzc2ljIE1hY09TLiBCdXQgdGhlaXIgd29ya2luZworICBiZWhhdmlvdXJzIGFyZSBub3QgdGVzdGVkIGF0IGFsbC4gQnVpbGRpbmcgZnRkZW1vcworICBmb3IgY2xhc3NpYyBNYWNPUyBhbmQgd29ya2luZyB0ZXN0IGlzIHJlcXVpcmVkLgorCisgIDQtMy4gUG9ydGluZyBKYW0gb250byBNUFcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEZyZWVUeXBlIHVzZXMgSmFtIChhbmQgRlQtSmFtKSBmb3IgdW5pZmllZCBjcm9zcy0KKyAgcGxhdGZvcm0gYnVpbGRpbmcgdG9vbC4gQXQgcHJlc2VudCwgSmFtIGlzIG5vdCBwb3J0ZWQKKyAgdG8gTVBXLiBUbyB1cGRhdGUgY2xhc3NpYyBNYWNPUyBzdXBwb3J0IGVhc2lseSwKKyAgYnVpbGRpbmcgYnkgSmFtIGlzIGV4cGVjdGVkIG9uIE1QVy4KKworCitBUFBFTkRJWCBJCistLS0tLS0tLS0tCisKKyAgQS0xLiBGcmFtZXdvcmsgZGVwZW5kZW5jaWVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIHNyYy9iYXNlL2Z0bWFjLmMgYWRkcyB0d28gTWFjLXNwZWNpZmljIGZlYXR1cmVzIHRvCisgIEZyZWVUeXBlLiBUaGVzZSBmZWF0dXJlcyBhcmUgYmFzZWQgb24gTWFjT1MgbGlicmFyaWVzLgorCisgICogYWNjZXNzaW5nIHJlc291cmNlLWZvcmsgZm9udAorICBUaGUgZm9udHMgZm9yIGNsYXNzaWMgTWFjT1Mgc3RvcmUgdGhlaXIgZ3JhcGhpY2FsIGRhdGEKKyAgaW4gcmVzb3VyY2UgZm9ya3Mgd2hpY2ggY2Fubm90IGJlIGFjY2Vzc2VkIHZpYSBBTlNJIEMKKyAgZnVuY3Rpb25zLiBGcmVlVHlwZTIgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGhhbmRsZSBzdWNoCisgIHJlc291cmNlIGZvcmsgZm9udHMsIHRoZXkgYXJlIGJhc2VkIG9uIEZpbGUgTWFuYWdlcgorICBmcmFtZXdvcmsgb2YgTWFjT1MuIEluIGFkZGl0aW9uLCBIRlMgYW5kIEhGUysgZmlsZQorICBzeXN0ZW0gZHJpdmVyIG9mIExpbnV4IGlzIHN1cHBvcnRlZC4gRm9sbG93aW5nCisgIGZ1bmN0aW9ucyBhcmUgZm9yIHRoaXMgcHVycG9zZS4KKworICAgIEZUX05ld19GYWNlX0Zyb21fUmVzb3VyY2UoKQorICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKCkKKyAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmKCkKKworICAqIHJlc29sdmluZyBmb250IG5hbWUgdG8gZm9udCBmaWxlCisgIFRoZSBmb250IG1lbnUgb2YgTWFjT1MgYXBwbGljYXRpb24gcHJlZmVycyBmb250IG5hbWUKKyAgd3JpdHRlbiBpbiBGT05EIHJlc291cmNlIHRoYW4gc2ZudCByZXNvdXJjZS4gRnJlZVR5cGUyCisgIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBmaW5kIGZvbnQgZmlsZSBieSBuYW1lIGluIE1hY09TCisgIGFwcGxpY2F0aW9uLCB0aGV5IGFyZSBiYXNlZCBvbiBRdWlja0RyYXcgRm9udCBNYW5hZ2VyCisgIGFuZCBBcHBsZSBUeXBlIFNlcnZpY2UgZnJhbWV3b3JrIG9mIE1hY09TLgorCisgICAgRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lKCkKKyAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lKCkKKworICBXb3JraW5nIGZ1bmN0aW9ucyBmb3IgZWFjaCBNYWNPUyBhcmUgc3VtbWFyaXplZCBhcworICBmb2xsb3dpbmcuCisKKyAgdXB0byBNYWNPUyA2OgorICAgIG5vdCB0ZXN0ZWQgKHlvdSBoYXZlIHRvIG9idGFpbiBNUFcgMi54KQorCisgIE1hY09TIDcueCwgOC54LCA5LnggKHdpdGhvdXQgQ2FyYm9uTGliKToKKyAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoKQorICAgIEZUX05ld19GYWNlX0Zyb21fUmVzb3VyY2UoKQorICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKCkKKworICBNYWNPUyA5LnggKHdpdGggQ2FyYm9uTGliKToKKyAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoKQorICAgIEZUX05ld19GYWNlX0Zyb21fUmVzb3VyY2UoKQorICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKCkKKyAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmKCkKKworICBNYWMgT1MgWCB1cHRvIDEwLjQueDoKKyAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoKSAgICAgZGVwcmVjYXRlZAorICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKCkgICAgICBkZXByZWNhdGVkCisgICAgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSgpIGRlcHJlY2F0ZWQ/CisgICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZigpCisKKyAgQS0yLiBEZXByZWNhdGVkIEZ1bmN0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBBLTItMS4gRmlsZU1hbmFnZXIKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEZvciBjb252ZW5pZW5jZSB0byB3cml0ZSBNYWNPUyBhcHBsaWNhdGlvbiwgZnRtYWMuYworICAgIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IGEgZmlsZSBieSBGU1NwZWMgYW5kIEZTUmVmLAorICAgIGJlY2F1c2UgdGhlIGZpbGUgaWRlbnRpZmljYXRpb24gcGF0aG5hbWUgaGFkIGV2ZXIgYmVlbgorICAgIHVucmVjb21tZW5kZWQgbWV0aG9kIGluIE1hY09TIHByb2dyYW1taW5nLgorCisgICAgVG93YXJkIHRvIE1hY09TIFggMTAuNCAmIDUsIENhcmJvbiBmdW5jdGlvbnMgdXNpbmcgRlNTcGVjCisgICAgZGF0YXR5cGUgaXMgbm90aWNlZCBhcyBkZXByZWNhdGVkLCBhbmQgcmVjb21tZW5kZWQgdG8KKyAgICBtaWdyYXRlIHRvIEZTUmVmIGRhdGF0eXBlLiBUaGUgYmlnIGRpZmZlcmVuY2VzIG9mIEZTUmVmCisgICAgYWdhaW5zdCBGU1NwZWMgYXJlIGV4cGxhaW5lZCBpbiBBcHBsZSBUZWNoTm90ZXMgMjA3OC4KKworICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy90bjIwMDIvdG4yMDc4Lmh0bWwKKworICAgIC0gZmlsZW5hbWUgbGVuZ3RoOiB0aGUgbWF4IGxlbmd0aCBvZiBmaWxlCisgICAgbmFtZSBvZiBGU1JlZiBpcyAyNTUgY2hhcnMgKGl0IGlzIGxpbWl0IG9mIEhGUyspLAorICAgIHRoYXQgb2YgRlNTcGVjIGlzIDMxIGNoYXJzIChpdCBpcyBsaW1pdCBvZiBIRlMpLgorCisgICAgLSBmaWxlbmFtZSBlbmNvZGluZzogRlNTcGVjIGlzIGxvY2FsaXplZCBieQorICAgIGxlZ2FjeSBlbmNvZGluZyBmb3IgZWFjaCBsYW5ndWFnZSBzeXN0ZW0sCisgICAgRlNSZWYgaXMgVW5pY29kZSBlbmFibGVkLgorCisgICAgQS0yLTIuIEZvbnRNYW5hZ2VyCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBGb2xsb3dpbmcgZnVuY3Rpb25zIHJlY2VpdmUgUXVpY2tEcmF3IGZvbnRuYW1lOgorCisgICAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoKQorCisgICAgUXVpY2tEcmF3IGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IFF1YXJ0egorICAgIHNpbmNlIE1hYyBPUyBYIDEwLjQuIFRoZXkgYXJlIHN0aWxsIGtlcHQgZm9yCisgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gQnkgdW5kZWZpbml0aW9uIG9mCisgICAgSEFWRV9RVUlDS0RSQVcgaW4gYnVpbGRpbmcsIHlvdSBjYW4gY2hhbmdlIHRoZXNlCisgICAgZnVuY3Rpb25zIHRvIHJldHVybiBGVF9FcnJfVW5pbXBsZW1lbnRlZCBhbHdheXMuCisKKyAgICBSZXBsYWNlbWVudCBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBtaWdyYXRpb24uCisKKyAgICAgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUoKQorCisgICAgVGhleSBhcmUgdXNhYmxlIG9uIE1hYyBPUyBYIG9ubHkuIE9uIG9sZGVyIHN5c3RlbXMsCisgICAgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBGVF9FcnJfVW5pbXBsZW1lbnRlZCBhbHdheXMuCisKKyAgICBUaGUgZGV0YWlsZWQgaW5jb21wYXRpYmlsaXRpZXMgYW5kIHBvc3NpYmlsaXR5CisgICAgb2YgRm9udE1hbmFnZXIgZW11bGF0aW9uIHdpdGhvdXQgUXVpY2tEcmF3IGlzCisgICAgZXhwbGFpbmVkIGluCisKKyAgICAgIGh0dHA6Ly93d3cuZ3l2ZS5vcmcvfm1wc3V6dWtpL2F0c19iZW5jaG1hcmsuaHRtbAorCisgIEEtMy4gRnJhbWV3b3JrIEF2YWlsYWJpbGl0aWVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGZyYW1ld29yayBvZiBNYWNPUyBhcmUgb2Z0ZW4gcmV2aXNlZCwgZXNwZWNpYWxseQorICB3aGVuIG5ldyBmb3JtYXQgb2YgYmluYXJ5IGV4ZWN1dGFibGUgaXMgaW50cm9kdWNlZC4KKyAgRm9sbG93aW5nIHRhYmxlIGlzIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgZnJhbWV3b3JrcworICB0byB1c2UgZnVuY3Rpb25zIHVzZWQgaW4gRnJlZVR5cGUyLiBUaGUgdGFibGUgaXMKKyAgZXh0cmFjdGVkIGZyb20gTVBXIGhlYWRlciBmaWxlcyBmb3IgYXNzZW1ibHkgbGFuZ3VhZ2UuCisKKyAgKioqIE5PVEUgKioqCisgIFRoZSBjb25kaXRpb25hbCBkZWZpbml0aW9uIG9mIGF2YWlsYWJsZSBkYXRhIHR5cGUKKyAgaW4gTVBXIGNvbXBpbGVyIGlzIGluc3VmZmljaWVudC4gWW91IGNhbiBjb21waWxlCisgIHByb2dyYW0gdXNpbmcgRlNSZWYgZGF0YSB0eXBlIGZvciBvbGRlciBzeXN0ZW1zCisgIChNYWNPUyA3LCA4KSB0aGF0IGRvbid0IGtub3cgRlNSZWYgZGF0YSB0eXBlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgIENQVSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBtYzY4MHgwICAgICAgfCAgICAgICAgICAgUG93ZXJQQyAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKyAgQmluYXJ5IEV4ZWN1dGFibGUgRm9ybWF0ICAgICAgICAgICAgfCBDbGFzc2ljIHwgNjhLLUNGTSB8IENGTSAgICAgfCBDRk0gICAgIHwgTWFjaC1PICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworICAgICAgIEZyYW1ld29yayBBUEkgICAgICAgICAgICAgICAgICB8IFRvb2xib3ggfCBUb29sYm94IHwgVG9vbGJveCB8IENhcmJvbiAgfCBDYXJib24gIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgPygqKSB8SW50ZXJmYWNlfEludGVyZmFjZXxDYXJib25MaWJ8TWFjIE9TIFggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfExpYiAgICAgIHxMaWIgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKyogRmlsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCitQQkdldEZDQkluZm9TeW5jKCkgICAgICAgICAgICAgICAgICAgIHwgICAgbyAgICB8IDcuMS0gICAgfCA3LjEtICAgIHwgMS4wLSAgICB8ICAgIG8gICAgfAorRlNNYWtlRlNTcGVjKCkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIG8gICAgfCA3LjEtICAgIHwgNy4xLSAgICB8IDEuMC0gICAgfCAgICBvICAgIHwKK0ZTR2V0Rm9ya0NCSW5mbygpICAgICAgICAgICAgICAgICAgICAgfCAgICBvICAgIHwgICAoKiopICB8IDkuMC0gICAgfCAxLjAtICAgIHwgICAgbyAgICB8CitGU3BNYWtlRlNSZWYoKSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgbyAgICB8ICAgKCoqKSAgfCA5LjAtICAgIHwgMS4wLSAgICB8ICAgIG8gICAgfAorRlNHZXRDYXRhbG9nSW5mbygpICAgICAgICAgICAgICAgICAgICB8ICAgIG8gICAgfCAgICgqKikgIHwgOS4wLSAgICB8IDEuMC0gICAgfCAgIC0xMC4zIHwKK0ZTUGF0aE1ha2VSZWYoKSAgICAgICAgICAgICAgICAgICAgICAgfCAgICB4ICAgIHwgICAgeCAgICB8ICAgIHggICAgfCAxLjEtICAgIHwgICAtMTAuMyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgID8oKikgfEZvbnQgICAgIHxGb250ICAgICB8Q2FyYm9uTGlifE1hYyBPUyBYIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxNYW5hZ2VyICB8TWFuYWdlciAgfCAgICAgICAgIHwgICAgICAgICB8CisqIEZvbnRzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworRk1DcmVhdGVGb250RmFtaWx5SXRlcmF0b3IoKSAgICAgICAgICB8ICAgIHggICAgfCAgICB4ICAgIHwgOS4wLSAgICB8IDEuMC0gICAgfCAgIC0xMC4zIHwKK0ZNRGlzcG9zZUZvbnRGYW1pbHlJdGVyYXRvcigpICAgICAgICAgfCAgICB4ICAgIHwgICAgeCAgICB8IDkuMC0gICAgfCAxLjAtICAgIHwgICAtMTAuMyB8CitGTUdldE5leHRGb250RmFtaWx5KCkgICAgICAgICAgICAgICAgIHwgICAgeCAgICB8ICAgIHggICAgfCA5LjAtICAgIHwgMS4wLSAgICB8ICAgLTEwLjMgfAorRk1HZXRGb250RmFtaWx5TmFtZSgpICAgICAgICAgICAgICAgICB8ICAgIHggICAgfCAgICB4ICAgIHwgOS4wLSAgICB8IDEuMC0gICAgfCAgIC0xMC4zIHwKK0ZNQ3JlYXRlRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IoKSAgfCAgICB4ICAgIHwgICAgeCAgICB8IDkuMC0gICAgfCAxLjAtICAgIHwgICAtMTAuMyB8CitGTURpc3Bvc2VGb250RmFtaWx5SW5zdGFuY2VJdGVyYXRvcigpIHwgICAgeCAgICB8ICAgIHggICAgfCA5LjAtICAgIHwgMS4wLSAgICB8ICAgLTEwLjMgfAorRk1HZXROZXh0Rm9udEZhbWlseUluc3RhbmNlKCkgICAgICAgICB8ICAgIHggICAgfCAgICB4ICAgIHwgOS4wLSAgICB8IDEuMC0gICAgfCAgIC0xMC4zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgLSAgICB8ICAgIC0gICAgfCAgICAtICAgIHxDYXJib25MaWJ8TWFjIE9TIFggfAorKiBBVFNGb250LmggKCoqKikgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKK0FUU0ZvbnRGaW5kRnJvbU5hbWUoKSAgICAgICAgICAgICAgICAgfCAgICB4ICAgIHwgICAgeCAgICB8ICAgIHggICAgfCAgICB4ICAgIHwgICAgbyAgICB8CitBVFNGb250R2V0RmlsZVNwZWNpZmljYXRpb24oKSAgICAgICAgIHwgICAgeCAgICB8ICAgIHggICAgfCAgICB4ICAgIHwgICAgeCAgICB8ICAgIG8gICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKworICAgICgqKQorICAgIEluIHRoZSAiQ2xhc3NpYyI6IHRoZSBvcmlnaW5hbCBiaW5hcnkgZXhlY3V0YWJsZQorICAgIGZvcm1hdCwgdGhlc2UgZnJhbWV3b3JrIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkKKyAgICB0cmFuc2Zvcm1lZCB0byBNYWNPUyBzeXN0ZW0gY2FsbC4gVGhlcmVmb3JlLCB0aGUKKyAgICBleGFjdCBhdmFpbGFiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWQgYnkgcnVubmluZworICAgIHN5c3RlbS4KKworICAgICgqKikKKyAgICBJbnRlcmZhY2VMaWIgaXMgYnVuZGxlZCB0byBNYWNPUyBhbmQgaXRzIHZlcnNpb24KKyAgICBpcyB1c3VhbGx5IGVxdWFsIHRvIE1hY09TLiBUaGVyZSdzIG5vIHNlcGFyYXRlCisgICAgdXBkYXRlIGZvciBJbnRlcmZhY2VMaWIuIEl0IGlzIHN1cHBvc2VkIHRoYXQKKyAgICB0aGVyZSdzIG5vIEludGVyZmFjZUxpYiA5LnggZm9yIG02OGsgcGxhdGZvcm1zLgorICAgIEluIGZhY3QsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgRlNSZWYgZGVwZW5kZW50LgorCisgICAgKCoqKikKKyAgICBBVFNVSSBmcmFtZXdvcmsgaXMgYXZhaWxhYmxlIG9uIEFUU1VuaWNvZGUgOC41IG9uCisgICAgcHBjIFRvb2xib3ggQ0ZNLCBDYXJib25MaWIgMS4wIHRvby4gQnV0IGl0cyBiYXNlOgorICAgIEFUUyBmb250IG1hbmFnZXIgaXMgbm90IHB1Ymxpc2hlZCBpbiB0aGVzZSB2ZXJzaW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IHVwZGF0ZTogMjAxMy1Ob3YtMDMuCisKK0N1cnJlbnRseSBtYWludGFpbmVkIGJ5CisJc3V6dWtpIHRvc2hpeWEsIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KK09yaWdpbmFsbHkgcHJlcGFyZWQgYnkKKwlMZW9uYXJkIFJvc2VudGhvbCwgPGxlb25hcmRyQGxhemVyd2FyZS5jb20+CisJSnVzdCB2YW4gUm9zc3VtLCA8anVzdEBsZXR0ZXJyb3IuY29tPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvYXNjaWkybXB3LnB5IGIvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvYXNjaWkybXB3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMzJiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9hc2NpaTJtcHcucHkKQEAgLTAsMCArMSwyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCisKK2lmIGxlbiggc3lzLmFyZ3YgKSA9PSAxIDoKKyAgZm9yIGFzY19saW5lIGluIHN5cy5zdGRpbi5yZWFkbGluZXMoKToKKyAgICBtcHdfbGluZSA9IHN0cmluZy5yZXBsYWNlKGFzY19saW5lLCAiXFx4QTUiLCAiXDI0NSIpCisgICAgbXB3X2xpbmUgPSBzdHJpbmcucmVwbGFjZShtcHdfbGluZSwgIlxceEI2IiwgIlwyNjYiKQorICAgIG1wd19saW5lID0gc3RyaW5nLnJlcGxhY2UobXB3X2xpbmUsICJcXHhDNCIsICJcMzA0IikKKyAgICBtcHdfbGluZSA9IHN0cmluZy5yZXBsYWNlKG1wd19saW5lLCAiXFx4QzUiLCAiXDMwNSIpCisgICAgbXB3X2xpbmUgPSBzdHJpbmcucmVwbGFjZShtcHdfbGluZSwgIlxceEZGIiwgIlwzNzciKQorICAgIG1wd19saW5lID0gc3RyaW5nLnJlcGxhY2UobXB3X2xpbmUsICJcbiIsICAgIlxyIikKKyAgICBtcHdfbGluZSA9IHN0cmluZy5yZXBsYWNlKG1wd19saW5lLCAiXFxuIiwgICAiXG4iKQorICAgIHN5cy5zdGRvdXQud3JpdGUobXB3X2xpbmUpCitlbGlmIHN5cy5hcmd2WzFdID09ICItciIgOgorICBmb3IgbXB3X2xpbmUgaW4gc3lzLnN0ZGluLnJlYWRsaW5lcygpOgorICAgIGFzY19saW5lID0gc3RyaW5nLnJlcGxhY2UobXB3X2xpbmUsICJcbiIsICAgIlxcbiIpCisgICAgYXNjX2xpbmUgPSBzdHJpbmcucmVwbGFjZShhc2NfbGluZSwgIlxyIiwgICAiXG4iKQorICAgIGFzY19saW5lID0gc3RyaW5nLnJlcGxhY2UoYXNjX2xpbmUsICJcMjQ1IiwgIlxceEE1IikKKyAgICBhc2NfbGluZSA9IHN0cmluZy5yZXBsYWNlKGFzY19saW5lLCAiXDI2NiIsICJcXHhCNiIpCisgICAgYXNjX2xpbmUgPSBzdHJpbmcucmVwbGFjZShhc2NfbGluZSwgIlwzMDQiLCAiXFx4QzQiKQorICAgIGFzY19saW5lID0gc3RyaW5nLnJlcGxhY2UoYXNjX2xpbmUsICJcMzA1IiwgIlxceEM1IikKKyAgICBhc2NfbGluZSA9IHN0cmluZy5yZXBsYWNlKGFzY19saW5lLCAiXDM3NyIsICJcXHhGRiIpCisgICAgc3lzLnN0ZG91dC53cml0ZShhc2NfbGluZSkKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL2ZyZWV0eXBlLUluZm8ucGxpc3QgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9mcmVldHlwZS1JbmZvLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDExNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21hYy9mcmVldHlwZS1JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iCisgICAgICAgICAgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorCis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKworPGRpY3Q+CisgIDxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorICA8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KKworICA8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgorICA8c3RyaW5nPkZyZWVUeXBlPC9zdHJpbmc+CisKKyAgPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KKyAgPHN0cmluZz5GcmVlVHlwZSAke1BST0pFQ1RfVkVSU0lPTn08L3N0cmluZz4KKworICA8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+CisgIDxzdHJpbmc+Ni4wPC9zdHJpbmc+CisKKyAgPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KKyAgPHN0cmluZz5GcmVlVHlwZTwvc3RyaW5nPgorCisgIDxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorICA8c3RyaW5nPkZNV0s8L3N0cmluZz4KKworICA8a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPC9rZXk+CisgIDxzdHJpbmc+JHtQUk9KRUNUX1ZFUlNJT059PC9zdHJpbmc+CisKKyAgPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorICA8c3RyaW5nPj8/Pz88L3N0cmluZz4KKworICA8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorICA8c3RyaW5nPiR7UFJPSkVDVF9WRVJTSU9OfTwvc3RyaW5nPgorPC9kaWN0PgorCis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvZnRsaWIucHJqLnhtbCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL2Z0bGliLnByai54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiYzQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL2Z0bGliLnByai54bWwKQEAgLTAsMCArMSwxMTk0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIiA/PgorPD9jb2Rld2FycmlvciBleHBvcnR2ZXJzaW9uPSIxLjAuMSIgaWRldmVyc2lvbj0iNS4wIiA/PgorCis8IURPQ1RZUEUgUFJPSkVDVCBbCis8IUVMRU1FTlQgUFJPSkVDVCAoVEFSR0VUTElTVCwgVEFSR0VUT1JERVIsIEdST1VQTElTVCwgREVTSUdOTElTVD8pPgorPCFFTEVNRU5UIFRBUkdFVExJU1QgKFRBUkdFVCspPgorPCFFTEVNRU5UIFRBUkdFVCAoTkFNRSwgU0VUVElOR0xJU1QsIEZJTEVMSVNUPywgTElOS09SREVSPywgU0VHTUVOVExJU1Q/LCBPVkVSTEFZR1JPVVBMSVNUPywgU1VCVEFSR0VUTElTVD8sIFNVQlBST0pFQ1RMSVNUPywgRlJBTUVXT1JLTElTVD8sIFBBQ0tBR0VBQ1RJT05TTElTVD8pPgorPCFFTEVNRU5UIE5BTUUgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIFVTRVJTT1VSQ0VUUkVFVFlQRSAoI1BDREFUQSk+Cis8IUVMRU1FTlQgUEFUSCAoI1BDREFUQSk+Cis8IUVMRU1FTlQgRklMRUxJU1QgKEZJTEUqKT4KKzwhRUxFTUVOVCBGSUxFIChQQVRIVFlQRSwgUEFUSFJPT1Q/LCBBQ0NFU1NQQVRIPywgUEFUSCwgUEFUSEZPUk1BVD8sIFJPT1RGSUxFUkVGPywgRklMRUtJTkQ/LCBGSUxFRkxBR1M/KT4KKzwhRUxFTUVOVCBQQVRIVFlQRSAoI1BDREFUQSk+Cis8IUVMRU1FTlQgUEFUSFJPT1QgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIEFDQ0VTU1BBVEggKCNQQ0RBVEEpPgorPCFFTEVNRU5UIFBBVEhGT1JNQVQgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIFJPT1RGSUxFUkVGIChQQVRIVFlQRSwgUEFUSFJPT1Q/LCBBQ0NFU1NQQVRIPywgUEFUSCwgUEFUSEZPUk1BVD8pPgorPCFFTEVNRU5UIEZJTEVLSU5EICgjUENEQVRBKT4KKzwhRUxFTUVOVCBGSUxFRkxBR1MgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIEZJTEVSRUYgKFRBUkdFVE5BTUU/LCBQQVRIVFlQRSwgUEFUSFJPT1Q/LCBBQ0NFU1NQQVRIPywgUEFUSCwgUEFUSEZPUk1BVD8pPgorPCFFTEVNRU5UIFRBUkdFVE5BTUUgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIFNFVFRJTkdMSVNUICgoU0VUVElOR3xQQU5FTERBVEEpKyk+Cis8IUVMRU1FTlQgU0VUVElORyAoTkFNRT8sIChWQUxVRXwoU0VUVElORyspKSk+Cis8IUVMRU1FTlQgUEFORUxEQVRBIChOQU1FLCBWQUxVRSk+Cis8IUVMRU1FTlQgVkFMVUUgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIExJTktPUkRFUiAoRklMRVJFRiopPgorPCFFTEVNRU5UIFNFR01FTlRMSVNUIChTRUdNRU5UKyk+Cis8IUVMRU1FTlQgU0VHTUVOVCAoTkFNRSwgQVRUUklCVVRFUz8sIEZJTEVSRUYqKT4KKzwhRUxFTUVOVCBBVFRSSUJVVEVTICgjUENEQVRBKT4KKzwhRUxFTUVOVCBPVkVSTEFZR1JPVVBMSVNUIChPVkVSTEFZR1JPVVArKT4KKzwhRUxFTUVOVCBPVkVSTEFZR1JPVVAgKE5BTUUsIEJBU0VBRERSRVNTLCBPVkVSTEFZKik+Cis8IUVMRU1FTlQgQkFTRUFERFJFU1MgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIE9WRVJMQVkgKE5BTUUsIEZJTEVSRUYqKT4KKzwhRUxFTUVOVCBTVUJUQVJHRVRMSVNUIChTVUJUQVJHRVQrKT4KKzwhRUxFTUVOVCBTVUJUQVJHRVQgKFRBUkdFVE5BTUUsIEFUVFJJQlVURVM/LCBGSUxFUkVGPyk+Cis8IUVMRU1FTlQgU1VCUFJPSkVDVExJU1QgKFNVQlBST0pFQ1QrKT4KKzwhRUxFTUVOVCBTVUJQUk9KRUNUIChGSUxFUkVGLCBTVUJQUk9KRUNUVEFSR0VUTElTVCk+Cis8IUVMRU1FTlQgU1VCUFJPSkVDVFRBUkdFVExJU1QgKFNVQlBST0pFQ1RUQVJHRVQqKT4KKzwhRUxFTUVOVCBTVUJQUk9KRUNUVEFSR0VUIChUQVJHRVROQU1FLCBBVFRSSUJVVEVTPywgRklMRVJFRj8pPgorPCFFTEVNRU5UIEZSQU1FV09SS0xJU1QgKEZSQU1FV09SSyspPgorPCFFTEVNRU5UIEZSQU1FV09SSyAoRklMRVJFRiwgTElCUkFSWUZJTEU/LCBWRVJTSU9OPyk+Cis8IUVMRU1FTlQgUEFDS0FHRUFDVElPTlNMSVNUIChQQUNLQUdFQUNUSU9OKyk+Cis8IUVMRU1FTlQgUEFDS0FHRUFDVElPTiAoI1BDREFUQSk+Cis8IUVMRU1FTlQgTElCUkFSWUZJTEUgKEZJTEVSRUYpPgorPCFFTEVNRU5UIFZFUlNJT04gKCNQQ0RBVEEpPgorPCFFTEVNRU5UIFRBUkdFVE9SREVSIChPUkRFUkVEVEFSR0VUfE9SREVSRURERVNJR04pKj4KKzwhRUxFTUVOVCBPUkRFUkVEVEFSR0VUIChOQU1FKT4KKzwhRUxFTUVOVCBPUkRFUkVEREVTSUdOIChOQU1FLCBPUkRFUkVEVEFSR0VUKyk+Cis8IUVMRU1FTlQgR1JPVVBMSVNUIChHUk9VUHxGSUxFUkVGKSo+Cis8IUVMRU1FTlQgR1JPVVAgKE5BTUUsIChHUk9VUHxGSUxFUkVGKSopPgorPCFFTEVNRU5UIERFU0lHTkxJU1QgKERFU0lHTispPgorPCFFTEVNRU5UIERFU0lHTiAoTkFNRSwgREVTSUdOREFUQSk+Cis8IUVMRU1FTlQgREVTSUdOREFUQSAoI1BDREFUQSk+CitdPgorCis8UFJPSkVDVD4KKyAgICA8VEFSR0VUTElTVD4KKyAgICAgICAgPFRBUkdFVD4KKyAgICAgICAgICAgIDxOQU1FPkZyZWVUeXBlTGliPC9OQU1FPgorICAgICAgICAgICAgPFNFVFRJTkdMSVNUPgorCisgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBmb3IgIlNvdXJjZSBUcmVlcyIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+VXNlclNvdXJjZVRyZWVzPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJBY2Nlc3MgUGF0aHMiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkFsd2F5c1NlYXJjaFVzZXJQYXRoczwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkludGVycHJldERPU0FuZFVuaXhQYXRoczwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlcXVpcmVGcmFtZXdvcmtTdHlsZUluY2x1ZGVzPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlNvdXJjZVJlbGF0aXZlSW5jbHVkZXM8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+VXNlclNlYXJjaFBhdGhzPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlNlYXJjaFBhdGg8L05BTUU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aDwvTkFNRT48VkFMVUU+OjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGhGb3JtYXQ8L05BTUU+PFZBTFVFPk1hY09TPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlY3Vyc2l2ZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RnJhbWV3b3JrUGF0aDwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkhvc3RGbGFnczwvTkFNRT48VkFMVUU+QWxsPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TZWFyY2hQYXRoPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo6OmluY2x1ZGU6PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoUm9vdDwvTkFNRT48VkFMVUU+UHJvamVjdDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVjdXJzaXZlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GcmFtZXdvcmtQYXRoPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SG9zdEZsYWdzPC9OQU1FPjxWQUxVRT5BbGw8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlNlYXJjaFBhdGg8L05BTUU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aDwvTkFNRT48VkFMVUU+Ojo6c3JjOjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGhGb3JtYXQ8L05BTUU+PFZBTFVFPk1hY09TPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlY3Vyc2l2ZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RnJhbWV3b3JrUGF0aDwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkhvc3RGbGFnczwvTkFNRT48VkFMVUU+QWxsPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TZWFyY2hQYXRoPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo6PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoUm9vdDwvTkFNRT48VkFMVUU+UHJvamVjdDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVjdXJzaXZlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GcmFtZXdvcmtQYXRoPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SG9zdEZsYWdzPC9OQU1FPjxWQUxVRT5BbGw8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TeXN0ZW1TZWFyY2hQYXRoczwvTkFNRT4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TZWFyY2hQYXRoPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoRm9ybWF0PC9OQU1FPjxWQUxVRT5NYWNPUzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGhSb290PC9OQU1FPjxWQUxVRT5Db2RlV2FycmlvcjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVjdXJzaXZlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GcmFtZXdvcmtQYXRoPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SG9zdEZsYWdzPC9OQU1FPjxWQUxVRT5BbGw8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJEZWJ1Z2dlciBSdW50aW1lIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1J1bnRpbWVTZXR0aW5nc19Xb3JraW5nRGlyZWN0b3J5PC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1J1bnRpbWVTZXR0aW5nc19Db21tYW5kTGluZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdSdW50aW1lU2V0dGluZ3NfSG9zdEFwcGxpY2F0aW9uPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+R2VuZXJpYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoUm9vdDwvTkFNRT48VkFMVUU+QWJzb2x1dGU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdSdW50aW1lU2V0dGluZ3NfRW52VmFyczwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiVGFyZ2V0IFNldHRpbmdzIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MaW5rZXI8L05BTUU+PFZBTFVFPk1hY09TIFBQQyBMaW5rZXI8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVMaW5rZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBvc3RMaW5rZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlRhcmdldG5hbWU8L05BTUU+PFZBTFVFPkZyZWVUeXBlTGliPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+T3V0cHV0RGlyZWN0b3J5PC9OQU1FPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoPC9OQU1FPjxWQUxVRT46OjpvYmpzOjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoRm9ybWF0PC9OQU1FPjxWQUxVRT5NYWNPUzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoUm9vdDwvTkFNRT48VkFMVUU+UHJvamVjdDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TYXZlRW50cmllc1VzaW5nUmVsYXRpdmVQYXRoczwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJGaWxlIE1hcHBpbmdzIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlTWFwcGluZ3M8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPkFQUEw8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+QXBwbDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5NTUxCPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbXBpbGVyPC9OQU1FPjxWQUxVRT5MaWIgSW1wb3J0IFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5NUExGPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbXBpbGVyPC9OQU1FPjxWQUxVRT5MaWIgSW1wb3J0IFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5NV0NEPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbXBpbGVyPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlJTUkM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+VEVYVDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LmJoPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+QmFsbG9vbiBIZWxwPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5jPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+TVcgQy9DKysgUFBDPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPkMvQysrPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+VEVYVDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LmMrKzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIEMvQysrIFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT5DL0MrKzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5jYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIEMvQysrIFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT5DL0MrKzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5jcDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIEMvQysrIFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT5DL0MrKzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5jcHA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbXBpbGVyPC9OQU1FPjxWQUxVRT5NVyBDL0MrKyBQUEM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+Qy9DKys8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5URVhUPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4uZXhwPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5oPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+TVcgQy9DKysgUFBDPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPkMvQysrPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5URVhUPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4ucDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIFBhc2NhbCBQUEM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+VEVYVDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LnBhczwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIFBhc2NhbCBQUEM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+VEVYVDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LnBjaDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPk1XIEMvQysrIFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT5DL0MrKzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+VEVYVDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LnBjaCsrPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+TVcgQy9DKysgUFBDPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPkMvQysrPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5URVhUPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4ucHB1PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+TVcgUGFzY2FsIFBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5yPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+UmV6PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPlJlejwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlRFWFQ8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPi5zPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+UFBDQXNtPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPlhDT0Y8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPlhDT0ZGIEltcG9ydCBQUEM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlVHlwZTwvTkFNRT48VkFMVUU+ZG9jdTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Db21waWxlcjwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SWdub3JlZEJ5TWFrZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVUeXBlPC9OQU1FPjxWQUxVRT5yc3JjPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbXBpbGVyPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VGaWxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPnNobGI8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPlBFRiBJbXBvcnQgUFBDPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZVR5cGU8L05BTUU+PFZBTFVFPnN0dWI8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVFeHRlbnNpb248L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPlBFRiBJbXBvcnQgUFBDPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5FZGl0TGFuZ3VhZ2U8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UHJlY29tcGlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkxhdW5jaGFibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RmlsZUV4dGVuc2lvbjwvTkFNRT48VkFMVUU+LmRvYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5JZ25vcmVkQnlNYWtlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4ubzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPlhDT0ZGIEltcG9ydCBQUEM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVkaXRMYW5ndWFnZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmVjb21waWxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoYWJsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlc291cmNlRmlsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4ucHBvYjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5GaWxlRXh0ZW5zaW9uPC9OQU1FPjxWQUxVRT4ucnNyYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29tcGlsZXI8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RWRpdExhbmd1YWdlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlByZWNvbXBpbGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYXVuY2hhYmxlPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5SZXNvdXJjZUZpbGU8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPklnbm9yZWRCeU1ha2U8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiQnVpbGQgRXh0cmFzIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DYWNoZU1vZERhdGVzPC9OQU1FPjxWQUxVRT50cnVlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+RHVtcEJyb3dzZXJJbmZvPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNhY2hlU3VicHJvamVjdHM8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Vc2VUaGlyZFBhcnR5RGVidWdnZXI8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+QnJvd3NlckdlbmVyYXRvcjwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkRlYnVnZ2VyQXBwUGF0aDwvTkFNRT4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aDwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGhGb3JtYXQ8L05BTUU+PFZBTFVFPkdlbmVyaWM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPkFic29sdXRlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkRlYnVnZ2VyQ21kTGluZUFyZ3M8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkRlYnVnZ2VyV29ya2luZ0RpcjwvTkFNRT4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aDwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGhGb3JtYXQ8L05BTUU+PFZBTFVFPkdlbmVyaWM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPkFic29sdXRlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvZGVDb21wbGV0aW9uUHJlZml4RmlsZU5hbWU8L05BTUU+PFZBTFVFPk1hY0hlYWRlcnMuYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvZGVDb21wbGV0aW9uTWFjcm9GaWxlTmFtZTwvTkFNRT48VkFMVUU+TWFjT1NfQ2FyYm9uX0MrK19NYWNyb3MuaDwvVkFMVUU+PC9TRVRUSU5HPgorCisgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBmb3IgIkRlYnVnZ2VyIFRhcmdldCIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29uc29sZUVuY29kaW5nPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TG9nU3lzdGVtTWVzc2FnZXM8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5BdXRvVGFyZ2V0RExMczwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TdG9wQXRXYXRjaHBvaW50czwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdXNlV2hpbGVSdW5uaW5nPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdXNlSW50ZXJ2YWw8L05BTUU+PFZBTFVFPjU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXVzZVVJRmxhZ3M8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5BbHRFeGVQYXRoPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+R2VuZXJpYzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QYXRoUm9vdDwvTkFNRT48VkFMVUU+QWJzb2x1dGU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+U3RvcEF0VGVtcEJQT25MYXVuY2g8L05BTUU+PFZBTFVFPnRydWU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DYWNoZVN5bWJvbGljczwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlRlbXBCUEZ1bmN0aW9uTmFtZTwvTkFNRT48VkFMVUU+bWFpbjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlRlbXBCUFR5cGU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJSZW1vdGUgRGVidWciIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkVuYWJsZWQ8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q29ubmVjdGlvbk5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkRvd25sb2FkUGF0aDwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TGF1bmNoUmVtb3RlQXBwPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlbW90ZUFwcFBhdGg8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvcmVJRDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkpUQUdDbG9ja1NwZWVkPC9OQU1FPjxWQUxVRT44MDAwPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SXNNdWx0aUNvcmU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+T1NEb3dubG9hZDwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5Vc2VHbG9iYWxPU0Rvd25sb2FkPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk9TRG93bmxvYWRDb25uZWN0aW9uTmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+T1NEb3dubG9hZFBhdGg8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkFsdERvd25sb2FkPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkFsdERvd25sb2FkQ29ubmVjdGlvbk5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorCisgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBmb3IgIkF1dG8tdGFyZ2V0IiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5PdGhlckV4ZWN1dGFibGVzPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJBbmFseXplciBDb25uZWN0aW9ucyIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+QW5hbHl6ZXJDb25uZWN0aW9uTmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiQ3VzdG9tIEtleXdvcmRzIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DdXN0b21Db2xvcjE8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5HcmVlbjwvTkFNRT48VkFMVUU+MzI3Njc8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Qmx1ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DdXN0b21Db2xvcjI8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5HcmVlbjwvTkFNRT48VkFMVUU+MzI3Njc8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Qmx1ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DdXN0b21Db2xvcjM8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5HcmVlbjwvTkFNRT48VkFMVUU+MzI3Njc8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Qmx1ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DdXN0b21Db2xvcjQ8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlJlZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5HcmVlbjwvTkFNRT48VkFMVUU+MzI3Njc8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Qmx1ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJDL0MrKyBDb21waWxlciIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2NwbHVzcGx1czwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19jaGVja3Byb3RvczwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19hcm08L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfdHJpZ3JhcGhzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX29ubHlzdGRrZXl3b3JkczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19lbnVtc2Fsd2F5c2ludDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19hbnNpc3RyaWN0PC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX3djaGFyX3R5cGU8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfZW5hYmxlZXhjZXB0aW9uczwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19kb250cmV1c2VzdHJpbmdzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX3Bvb2xzdHJpbmdzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2RvbnRpbmxpbmU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfdXNlUlRUSTwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ191bnNpZ25lZGNoYXJzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2F1dG9pbmxpbmU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfYm9vbHRydWVmYWxzZTwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19pbmxpbmVsZXZlbDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRnJvbnRFbmRfQ19lY3BsdXNwbHVzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2RlZmVyX2NvZGVnZW48L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfdGVtcGxhdGVwYXJzZXI8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Zyb250RW5kX0NfYzk5PC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2JvdHRvbXVwaW5saW5lPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2djY19leHRlbnNpb25zPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdGcm9udEVuZF9DX2luc3RhbmNlX21hbmFnZXI8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJDL0MrKyBQcmVwcm9jZXNzb3IiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNfQ1BQX1ByZXByb2Nlc3Nvcl9FbWl0RmlsZTwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNfQ1BQX1ByZXByb2Nlc3Nvcl9FbWl0TGluZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DX0NQUF9QcmVwcm9jZXNzb3JfRW1pdEZ1bGxQYXRoPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNfQ1BQX1ByZXByb2Nlc3Nvcl9LZWVwQ29tbWVudHM8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+Q19DUFBfUHJlcHJvY2Vzc29yX1BDSFVzZXNQcmVmaXhUZXh0PC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNfQ1BQX1ByZXByb2Nlc3Nvcl9FbWl0UHJhZ21hczwvTkFNRT48VkFMVUU+dHJ1ZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNfQ1BQX1ByZXByb2Nlc3Nvcl9LZWVwV2hpdGVTcGFjZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DX0NQUF9QcmVwcm9jZXNzb3JfTXVsdGlCeXRlRW5jb2Rpbmc8L05BTUU+PFZBTFVFPmVuY0FTQ0lJX1VuaWNvZGU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5DX0NQUF9QcmVwcm9jZXNzb3JfUHJlZml4VGV4dDwvTkFNRT48VkFMVUU+Lyogc2V0dGluZ3MgaW1wb3J0ZWQgZnJvbSBvbGQgIkMvQysrIExhbmd1YWdlIiBwYW5lbCAqLworCisjaWYgIV9fb3B0aW9uKHByZWNvbXBpbGUpCisjaW5jbHVkZSAiZnRvcHRpb24uaCIgLyogd2FzICJQcmVmaXggZmlsZSIgKi8KKyNlbmRpZgorPC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiQy9DKysgV2FybmluZ3MiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5faWxscHJhZ21hPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9lbXB0eWRlY2w8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3Bvc3N1bndhbnQ8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3VudXNlZHZhcjwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5fdW51c2VkYXJnPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9leHRyYWNvbW1hPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0NfcGVkYW50aWM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuaW5nZXJyb3JzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9oaWRldmlydHVhbDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5faW1wbGljaXRjb252PC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9ub3RpbmxpbmVkPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9zdHJ1Y3RjbGFzczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5fbWlzc2luZ3JldHVybjwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5fbm9fc2lkZV9lZmZlY3Q8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3Jlc3VsdG5vdHVzZWQ8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3BhZGRpbmc8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX2ltcGxfaTJmX2NvbnY8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX2ltcGxfZjJpX2NvbnY8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX2ltcGxfczJ1X2NvbnY8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX2lsbHRva2VucGFzdGluZzwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XV2FybmluZ19DX3dhcm5fZmlsZW5hbWVjYXBzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdXYXJuaW5nX0Nfd2Fybl9maWxlbmFtZWNhcHNzeXN0ZW08L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3VuZGVmbWFjcm88L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1dhcm5pbmdfQ193YXJuX3B0cmludGNvbnY8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJNYWNPUyBNZXJnZSBQYW5lbCIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19wcm9qZWN0VHlwZTwvTkFNRT48VkFMVUU+QXBwbGljYXRpb248L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV01lcmdlX01hY09TX291dHB1dE5hbWU8L05BTUU+PFZBTFVFPk1lcmdlIE91dDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTWVyZ2VfTWFjT1Nfb3V0cHV0Q3JlYXRvcjwvTkFNRT48VkFMVUU+Pz8/PzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTWVyZ2VfTWFjT1Nfb3V0cHV0VHlwZTwvTkFNRT48VkFMVUU+QVBQTDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTWVyZ2VfTWFjT1Nfc3VwcHJlc3NXYXJuaW5nPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19jb3B5RnJhZ21lbnRzPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19jb3B5UmVzb3VyY2VzPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19mbGF0dGVuUmVzb3VyY2U8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV01lcmdlX01hY09TX2ZsYXRGaWxlTmFtZTwvTkFNRT48VkFMVUU+YS5yc3JjPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19mbGF0RmlsZU91dHB1dFBhdGg8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdNZXJnZV9NYWNPU19za2lwUmVzb3VyY2VzPC9OQU1FPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48VkFMVUU+RExHWDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48VkFMVUU+Y2tpZDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48VkFMVUU+UHJvajwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgICAgICA8U0VUVElORz48VkFMVUU+V1NQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJPdXRwdXQgRmxhZ3MiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkZpbGVMb2NrZWQ8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UmVzb3VyY2VzTWFwSXNSZWFkT25seTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QcmludGVyRHJpdmVySXNNdWx0aUZpbmRlckNvbXBhdGlibGU8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SW52aXNpYmxlPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkhhc0J1bmRsZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5OYW1lTG9ja2VkPC9OQU1FPjxWQUxVRT5mYWxzZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlN0YXRpb25lcnk8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SGFzQ3VzdG9tSWNvbjwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5TaGFyZWQ8L05BTUU+PFZBTFVFPmZhbHNlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+SGFzQmVlbkluaXRlZDwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5MYWJlbDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPkNvbW1lbnRzPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5IYXNDdXN0b21CYWRnZTwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5IYXNSb3V0aW5nSW5mbzwvTkFNRT48VkFMVUU+ZmFsc2U8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJQUEMgQ29kZUdlbiIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19zdHJ1Y3RhbGlnbm1lbnQ8L05BTUU+PFZBTFVFPlBQQ19tdzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfdHJhY2ViYWNrdGFibGVzPC9OQU1FPjxWQUxVRT5Ob25lPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19wcm9jZXNzb3I8L05BTUU+PFZBTFVFPkdlbmVyaWM8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX2Z1bmN0aW9uX2FsaWduPC9OQU1FPjxWQUxVRT40PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ190b2NkYXRhPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19sYXJnZXRvYzwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfcHJvZmlsZXI8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX3ZlY3RvcnRvY2RhdGE8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX3Bvb2xjb25zdDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfcGVlcGhvbGU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX3JlYWRvbmx5c3RyaW5nczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfbGlua2VycG9vbHNzdHJpbmdzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ192b2xhdGlsZWFzbTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfc2NoZWR1bGU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX2FsdGl2ZWM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fUFBDX2FsdGl2ZWNfbW92ZV9ibG9jazwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9QUENfc3RyaWN0SUVFRWZwPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19mcGNvbnRyYWN0PC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19nZW5mc2VsPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX1BQQ19vcmRlcmVkZnBjbXA8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJQUEMgQ29kZUdlbiBNYWNoLU8iIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19zdHJ1Y3RhbGlnbm1lbnQ8L05BTUU+PFZBTFVFPlBQQ19tdzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19wcm9maWxlcl9lbnVtPC9OQU1FPjxWQUxVRT5PZmY8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fTWFjaE9fcHJvY2Vzc29yPC9OQU1FPjxWQUxVRT5HZW5lcmljPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX01hY2hPX2Z1bmN0aW9uX2FsaWduPC9OQU1FPjxWQUxVRT40PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX01hY2hPX2NvbW1vbjwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19ib29saXNpbnQ8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fTWFjaE9fcGVlcGhvbGU8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fTWFjaE9fcmVhZG9ubHlzdHJpbmdzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX01hY2hPX2xpbmtlcnBvb2xzc3RyaW5nczwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT192b2xhdGlsZWFzbTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19zY2hlZHVsZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19hbHRpdmVjPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX01hY2hPX3ZlY21vdmU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fTWFjaE9fZnBfaWVlZV9zdHJpY3Q8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0NvZGVHZW5fTWFjaE9fZnBjb250cmFjdDwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQ29kZUdlbl9NYWNoT19nZW5mc2VsPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdDb2RlR2VuX01hY2hPX2ZwX2NtcHNfb3JkZXJlZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorCisgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBmb3IgIlBQQyBEaXNhc3NlbWJsZXIiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRGlzYXNzZW1ibGVyX1BQQ19zaG93Y29kZTwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRGlzYXNzZW1ibGVyX1BQQ19leHRlbmRlZDwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRGlzYXNzZW1ibGVyX1BQQ19taXg8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Rpc2Fzc2VtYmxlcl9QUENfbm9oZXg8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Rpc2Fzc2VtYmxlcl9QUENfc2hvd2RhdGE8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Rpc2Fzc2VtYmxlcl9QUENfc2hvd2V4Y2VwdGlvbnM8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Rpc2Fzc2VtYmxlcl9QUENfc2hvd3N5bTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XRGlzYXNzZW1ibGVyX1BQQ19zaG93bmFtZXM8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJQUEMgR2xvYmFsIE9wdGltaXplciIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+R2xvYmFsT3B0aW1pemVyX1BQQ19vcHRpbWl6YXRpb25sZXZlbDwvTkFNRT48VkFMVUU+TGV2ZWwwPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+R2xvYmFsT3B0aW1pemVyX1BQQ19vcHRmb3I8L05BTUU+PFZBTFVFPlNwZWVkPC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUFBDIExpbmtlciIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfUFBDX2xpbmtzeW08L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfc3ltZnVsbHBhdGg8L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfbGlua21hcDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX1BQQ19ub2xpbmt3YXJuaW5nczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX1BQQ19kb250ZGVhZHN0cmlwaW5pdGNvZGU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfcGVybWl0bXVsdGRlZnM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfbGlua21vZGU8L05BTUU+PFZBTFVFPkZhc3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfY29kZV9mb2xkaW5nPC9OQU1FPjxWQUxVRT5Ob25lPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfUFBDX2luaXRuYW1lPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9QUENfbWFpbm5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX1BQQ190ZXJtbmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUFBDIE1hYyBPUyBYIExpbmtlciIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfTWFjT1NYX2xpbmtzeW08L05BTUU+PFZBTFVFPjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfc3ltZnVsbHBhdGg8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfbm9saW5rd2FybmluZ3M8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfbGlua21hcDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9kb250ZGVhZHN0cmlwaW5pdGNvZGU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfcGVybWl0bXVsdGRlZnM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfdXNlX29iamVjdGl2ZWNfc2VtYW50aWNzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfTWFjT1NYX3N0cmlwX2RlYnVnX3N5bWJvbHM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfc3BsaXRfc2VnczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9yZXBvcnRfbXNsX292ZXJsb2FkczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9vYmplY3RzX2ZvbGxvd19saW5rb3JkZXI8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfbGlua21vZGU8L05BTUU+PFZBTFVFPk5vcm1hbDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9leHBvcnRzPC9OQU1FPjxWQUxVRT5SZWZlcmVuY2VkR2xvYmFsczwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9zb3J0Y29kZTwvTkFNRT48VkFMVUU+Tm9uZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XTGlua2VyX01hY09TWF9tYWlubmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfTWFjT1NYX2luaXRuYW1lPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0xpbmtlcl9NYWNPU1hfY29kZV9mb2xkaW5nPC9OQU1FPjxWQUxVRT5Ob25lPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdMaW5rZXJfTWFjT1NYX3N0YWJzZ2VuPC9OQU1FPjxWQUxVRT5Ob25lPC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUFBDIE1hYyBPUyBYIFByb2plY3QiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfdHlwZTwvTkFNRT48VkFMVUU+RXhlY3V0YWJsZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfb3V0ZmlsZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X01hY09TWF9maWxlY3JlYXRvcjwvTkFNRT48VkFMVUU+Pz8/PzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfZmlsZXR5cGU8L05BTUU+PFZBTFVFPk1FWEU8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX3ZtYWRkcmVzczwvTkFNRT48VkFMVUU+NDA5NjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfdXNlZGVmYXVsdHZtYWRkcjwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfZmxhdHJzcmM8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX2ZsYXRyc3JjZmlsZW5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfZmxhdHJzcmNvdXRwdXRkaXI8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X01hY09TWF9pbnN0YWxscGF0aDwvTkFNRT48VkFMVUU+Li88L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX2RvbnRfcHJlYmluZDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9NYWNPU1hfZmxhdF9uYW1lc3BhY2U8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX2ZyYW1ld29ya3ZlcnNpb248L05BTUU+PFZBTFVFPkE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX2N1cnJlbnR2ZXJzaW9uPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X01hY09TWF9mbGF0X29sZGltcHZlcnNpb248L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfTWFjT1NYX0FkZHJNb2RlPC9OQU1FPjxWQUxVRT4xPC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUFBDIFBFRiIgcGFuZWwgLS0+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQRUZfZXhwb3J0czwvTkFNRT48VkFMVUU+Tm9uZTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUEVGX2xpYmZvbGRlcjwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUEVGX3NvcnRjb2RlPC9OQU1FPjxWQUxVRT5Ob25lPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQRUZfZXhwYW5kYnNzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQRUZfc2hhcmVkYXRhPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQRUZfb2xkZGVmdmVyc2lvbjwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUEVGX29sZGltcHZlcnNpb248L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1BFRl9jdXJyZW50dmVyc2lvbjwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUEVGX2ZyYWdtZW50bmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQRUZfY29sbGFwc2VyZWxvYWRzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUFBDIFByb2plY3QiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfdHlwZTwvTkFNRT48VkFMVUU+TGlicmFyeTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfb3V0ZmlsZTwvTkFNRT48VkFMVUU+RnJlZVR5cGVMaWI8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfUFBDX2ZpbGVjcmVhdG9yPC9OQU1FPjxWQUxVRT4/Pz8/PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19maWxldHlwZTwvTkFNRT48VkFMVUU+Pz8/PzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfc2l6ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfbWluc2l6ZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfc3RhY2tzaXplPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19mbGFnczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfc3ltZmlsZW5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfcnNyY25hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfcnNyY2hlYWRlcjwvTkFNRT48VkFMVUU+TmF0aXZlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19yc3JjdHlwZTwvTkFNRT48VkFMVUU+Pz8/PzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfcnNyY2lkPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19yc3JjZmxhZ3M8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Byb2plY3RfUFBDX3JzcmNzdG9yZTwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfcnNyY21lcmdlPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19mbGF0cnNyYzwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUHJvamVjdF9QUENfZmxhdHJzcmNvdXRwdXRkaXI8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdQcm9qZWN0X1BQQ19mbGF0cnNyY2ZpbGVuYW1lPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJQUENBc20gUGFuZWwiIHBhbmVsIC0tPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQXNzZW1ibGVyX1BQQ19hdXhoZWFkZXI8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Fzc2VtYmxlcl9QUENfc3ltbW9kZTwvTkFNRT48VkFMVUU+TWFjPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdBc3NlbWJsZXJfUFBDX2RpYWxlY3Q8L05BTUU+PFZBTFVFPlBQQzwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XQXNzZW1ibGVyX1BQQ19wcmVmaXhmaWxlPC9OQU1FPjxWQUxVRT48L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV0Fzc2VtYmxlcl9QUENfdHlwZWNoZWNrPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdBc3NlbWJsZXJfUFBDX3dhcm5pbmdzPC9OQU1FPjxWQUxVRT4wPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdBc3NlbWJsZXJfUFBDX2Nhc2VzZW5zaXRpdmU8L05BTUU+PFZBTFVFPjA8L1ZBTFVFPjwvU0VUVElORz4KKworICAgICAgICAgICAgICAgIDwhLS0gU2V0dGluZ3MgZm9yICJQcm9wZXJ0eSBMaXN0IiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QTGlzdF9PdXRwdXRUeXBlPC9OQU1FPjxWQUxVRT5GaWxlPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UExpc3RfT3V0cHV0RW5jb2Rpbmc8L05BTUU+PFZBTFVFPlVURi04PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UExpc3RfUExpc3RWZXJzaW9uPC9OQU1FPjxWQUxVRT4xLjA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5QTGlzdF9QcmVmaXg8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBMaXN0X0ZpbGVGaWxlbmFtZTwvTkFNRT48VkFMVUU+SW5mby5wbGlzdDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBMaXN0X0ZpbGVEaXJlY3Rvcnk8L05BTUU+CisgICAgICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBhdGg8L05BTUU+PFZBTFVFPjo8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aEZvcm1hdDwvTkFNRT48VkFMVUU+TWFjT1M8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UGF0aFJvb3Q8L05BTUU+PFZBTFVFPlByb2plY3Q8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UExpc3RfUmVzb3VyY2VUeXBlPC9OQU1FPjxWQUxVRT5wbHN0PC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+UExpc3RfUmVzb3VyY2VJRDwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPlBMaXN0X1Jlc291cmNlTmFtZTwvTkFNRT48VkFMVUU+PC9WQUxVRT48L1NFVFRJTkc+CisKKyAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIGZvciAiUmV6IENvbXBpbGVyIiBwYW5lbCAtLT4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Jlel9MYW5ndWFnZV9tYXh3aWR0aDwvTkFNRT48VkFMVUU+ODA8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Jlel9MYW5ndWFnZV9zY3JpcHQ8L05BTUU+PFZBTFVFPlJvbWFuPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdSZXpfTGFuZ3VhZ2VfYWxpZ25tZW50PC9OQU1FPjxWQUxVRT5BbGlnbjE8L1ZBTFVFPjwvU0VUVElORz4KKyAgICAgICAgICAgICAgICA8U0VUVElORz48TkFNRT5NV1Jlel9MYW5ndWFnZV9maWx0ZXJtb2RlPC9OQU1FPjxWQUxVRT5GaWx0ZXJTa2lwPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICAgICAgPFNFVFRJTkc+PE5BTUU+TVdSZXpfTGFuZ3VhZ2Vfc3VwcHJlc3N3YXJuaW5nczwvTkFNRT48VkFMVUU+MDwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUmV6X0xhbmd1YWdlX2VzY2FwZWNvbnRyb2xjaGFyczwvTkFNRT48VkFMVUU+MTwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUmV6X0xhbmd1YWdlX3ByZWZpeG5hbWU8L05BTUU+PFZBTFVFPjwvVkFMVUU+PC9TRVRUSU5HPgorICAgICAgICAgICAgICAgIDxTRVRUSU5HPjxOQU1FPk1XUmV6X0xhbmd1YWdlX2ZpbHRlcmVkdHlwZXM8L05BTUU+PFZBTFVFPidDT0RFJyAnREFUQScgJ1BJQ1QnPC9WQUxVRT48L1NFVFRJTkc+CisgICAgICAgICAgICA8L1NFVFRJTkdMSVNUPgorICAgICAgICAgICAgPEZJTEVMSVNUPgorICAgICAgICAgICAgICAgIDxGSUxFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0c3lzdGVtLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+ZnRiYXNlLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+ZnRpbml0LmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+c2ZudC5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVLSU5EPlRleHQ8L0ZJTEVLSU5EPgorICAgICAgICAgICAgICAgICAgICA8RklMRUZMQUdTPkRlYnVnPC9GSUxFRkxBR1M+CisgICAgICAgICAgICAgICAgPC9GSUxFPgorICAgICAgICAgICAgICAgIDxGSUxFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPnBzbmFtZXMuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdGRlYnVnLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+dHlwZTFjaWQuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5jZmYuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5zbW9vdGguYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD53aW5mbnQuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD50cnVldHlwZS5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVLSU5EPlRleHQ8L0ZJTEVLSU5EPgorICAgICAgICAgICAgICAgICAgICA8RklMRUZMQUdTPkRlYnVnPC9GSUxFRkxBR1M+CisgICAgICAgICAgICAgICAgPC9GSUxFPgorICAgICAgICAgICAgICAgIDxGSUxFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0bWFjLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+cHNhdXguYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz48L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+ZnRjYWNoZS5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVLSU5EPlRleHQ8L0ZJTEVLSU5EPgorICAgICAgICAgICAgICAgICAgICA8RklMRUZMQUdTPjwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdGdseXBoLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+PC9GSUxFRkxBR1M+CisgICAgICAgICAgICAgICAgPC9GSUxFPgorICAgICAgICAgICAgICAgIDxGSUxFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPnR5cGUxLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgICAgICA8RklMRUtJTkQ+VGV4dDwvRklMRUtJTkQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFRkxBR1M+RGVidWc8L0ZJTEVGTEFHUz4KKyAgICAgICAgICAgICAgICA8L0ZJTEU+CisgICAgICAgICAgICAgICAgPEZJTEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+cHNoaW50ZXIuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5wY2YuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgICAgICA8RklMRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdHJhc3Rlci5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVLSU5EPlRleHQ8L0ZJTEVLSU5EPgorICAgICAgICAgICAgICAgICAgICA8RklMRUZMQUdTPkRlYnVnPC9GSUxFRkxBR1M+CisgICAgICAgICAgICAgICAgPC9GSUxFPgorICAgICAgICAgICAgICAgIDxGSUxFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0cmVuZDEuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgICAgIDxGSUxFS0lORD5UZXh0PC9GSUxFS0lORD4KKyAgICAgICAgICAgICAgICAgICAgPEZJTEVGTEFHUz5EZWJ1ZzwvRklMRUZMQUdTPgorICAgICAgICAgICAgICAgIDwvRklMRT4KKyAgICAgICAgICAgIDwvRklMRUxJU1Q+CisgICAgICAgICAgICA8TElOS09SREVSPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0c3lzdGVtLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdGJhc2UuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0aW5pdC5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+c2ZudC5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+cHNuYW1lcy5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+ZnRkZWJ1Zy5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+dHlwZTFjaWQuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmNmZi5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+c21vb3RoLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD53aW5mbnQuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPnRydWV0eXBlLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdG1hYy5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+cHNhdXguYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0Y2FjaGUuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPmZ0Z2x5cGguYzwvUEFUSD4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIPnR5cGUxLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5wc2hpbnRlci5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+cGNmLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgICAgICA8UEFUSD5mdHJhc3Rlci5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICAgICAgPFBBVEg+ZnRyZW5kMS5jPC9QQVRIPgorICAgICAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8L0xJTktPUkRFUj4KKyAgICAgICAgPC9UQVJHRVQ+CisgICAgPC9UQVJHRVRMSVNUPgorCisgICAgPFRBUkdFVE9SREVSPgorICAgICAgICA8T1JERVJFRFRBUkdFVD48TkFNRT5GcmVlVHlwZUxpYjwvTkFNRT48L09SREVSRURUQVJHRVQ+CisgICAgPC9UQVJHRVRPUkRFUj4KKworICAgIDxHUk9VUExJU1Q+CisgICAgICAgIDxHUk9VUD48TkFNRT5iYXNlPC9OQU1FPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPmZ0YmFzZS5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPmZ0ZGVidWcuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5mdGdseXBoLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICA8VEFSR0VUTkFNRT5GcmVlVHlwZUxpYjwvVEFSR0VUTkFNRT4KKyAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgPFBBVEg+ZnRpbml0LmM8L1BBVEg+CisgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICA8VEFSR0VUTkFNRT5GcmVlVHlwZUxpYjwvVEFSR0VUTkFNRT4KKyAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgPFBBVEg+ZnRzeXN0ZW0uYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5mdG1hYy5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICA8L0dST1VQPgorICAgICAgICA8R1JPVVA+PE5BTUU+ZnRtb2R1bGVzPC9OQU1FPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPmNmZi5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPmZ0Y2FjaGUuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5wc2F1eC5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPnBzbmFtZXMuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5zZm50LmM8L1BBVEg+CisgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICA8VEFSR0VUTkFNRT5GcmVlVHlwZUxpYjwvVEFSR0VUTkFNRT4KKyAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgPFBBVEg+c21vb3RoLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICA8VEFSR0VUTkFNRT5GcmVlVHlwZUxpYjwvVEFSR0VUTkFNRT4KKyAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgPFBBVEg+dHJ1ZXR5cGUuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD50eXBlMWNpZC5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPndpbmZudC5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPnR5cGUxLmM8L1BBVEg+CisgICAgICAgICAgICAgICAgPFBBVEhGT1JNQVQ+TWFjT1M8L1BBVEhGT1JNQVQ+CisgICAgICAgICAgICA8L0ZJTEVSRUY+CisgICAgICAgICAgICA8RklMRVJFRj4KKyAgICAgICAgICAgICAgICA8VEFSR0VUTkFNRT5GcmVlVHlwZUxpYjwvVEFSR0VUTkFNRT4KKyAgICAgICAgICAgICAgICA8UEFUSFRZUEU+TmFtZTwvUEFUSFRZUEU+CisgICAgICAgICAgICAgICAgPFBBVEg+cHNoaW50ZXIuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5wY2YuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgICAgIDxGSUxFUkVGPgorICAgICAgICAgICAgICAgIDxUQVJHRVROQU1FPkZyZWVUeXBlTGliPC9UQVJHRVROQU1FPgorICAgICAgICAgICAgICAgIDxQQVRIVFlQRT5OYW1lPC9QQVRIVFlQRT4KKyAgICAgICAgICAgICAgICA8UEFUSD5mdHJhc3Rlci5jPC9QQVRIPgorICAgICAgICAgICAgICAgIDxQQVRIRk9STUFUPk1hY09TPC9QQVRIRk9STUFUPgorICAgICAgICAgICAgPC9GSUxFUkVGPgorICAgICAgICAgICAgPEZJTEVSRUY+CisgICAgICAgICAgICAgICAgPFRBUkdFVE5BTUU+RnJlZVR5cGVMaWI8L1RBUkdFVE5BTUU+CisgICAgICAgICAgICAgICAgPFBBVEhUWVBFPk5hbWU8L1BBVEhUWVBFPgorICAgICAgICAgICAgICAgIDxQQVRIPmZ0cmVuZDEuYzwvUEFUSD4KKyAgICAgICAgICAgICAgICA8UEFUSEZPUk1BVD5NYWNPUzwvUEFUSEZPUk1BVD4KKyAgICAgICAgICAgIDwvRklMRVJFRj4KKyAgICAgICAgPC9HUk9VUD4KKyAgICA8L0dST1VQTElTVD4KKworPC9QUk9KRUNUPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9tYWMvZnRtYWMuYyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL2Z0bWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyZjI5MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbWFjL2Z0bWFjLmMKQEAgLTAsMCArMSwxNTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdG1hYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgTWFjIEZPTkQgc3VwcG9ydC4gIFdyaXR0ZW4gYnkganVzdEBsZXR0ZXJyb3IuY29tLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBIZWF2aWx5IEZpeGVkIGJ5IG1wc3V6dWtpLCBHZW9yZ2UgV2lsbGlhbXMgYW5kIFNlYW4gTWNCcmlkZSAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBKdXN0IHZhbiBSb3NzdW0sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qCisgICAgTm90ZXMKKworICAgIE1hYyBzdWl0Y2FzZSBmaWxlcyBjYW4gKGFuZCBvZnRlbiBkbyEpIGNvbnRhaW4gbXVsdGlwbGUgZm9udHMuICBUbworICAgIHN1cHBvcnQgdGhpcyBJIHVzZSB0aGUgZmFjZV9pbmRleCBhcmd1bWVudCBvZiBGVF8oT3BlbnxOZXcpX0ZhY2UoKQorICAgIGZ1bmN0aW9ucywgYW5kIHByZXRlbmQgdGhlIHN1aXRjYXNlIGZpbGUgaXMgYSBjb2xsZWN0aW9uLgorCisgICAgV2FybmluZzogZmJpdCBhbmQgTkZOVCBiaXRtYXAgcmVzb3VyY2VzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gIEluIG9sZAorICAgIHNmbnQgZm9udHMsIGJpdG1hcCBnbHlwaCBkYXRhIGZvciBlYWNoIHNpemUgaXMgc3RvcmVkIGluIGVhY2ggYE5GTlQnCisgICAgcmVzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGBiZGF0JyB0YWJsZSBpbiB0aGUgc2ZudCByZXNvdXJjZS4gIFRoZXJlZm9yZSwKKyAgICBmYWNlLT5udW1fZml4ZWRfc2l6ZXMgaXMgc2V0IHRvIDAsIGJlY2F1c2UgYml0bWFwIGRhdGEgaW4gYE5GTlQnCisgICAgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUgYXQgcHJlc2VudC4KKworICAgIFRoZSBNYWMgRk9ORCBzdXBwb3J0IHdvcmtzIHJvdWdobHkgbGlrZSB0aGlzOgorCisgICAgLSBDaGVjayB3aGV0aGVyIHRoZSBvZmZlcmVkIHN0cmVhbSBwb2ludHMgdG8gYSBNYWMgc3VpdGNhc2UgZmlsZS4gIFRoaXMKKyAgICAgIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIGZpbGUgdHlwZTogaXQgaGFzIHRvIGJlICdGRklMJyBvciAndGZpbCcuICBUaGUKKyAgICAgIHN0cmVhbSB0aGF0IGdldHMgcGFzc2VkIHRvIG91ciBpbml0X2ZhY2UoKSByb3V0aW5lIGlzIGEgc3RkaW8gc3RyZWFtLAorICAgICAgd2hpY2ggaXNuJ3QgdXNhYmxlIGZvciB1cywgc2luY2UgdGhlIEZPTkQgcmVzb3VyY2VzIGxpdmUgaW4gdGhlCisgICAgICByZXNvdXJjZSBmb3JrLiAgU28gd2UganVzdCBncmFiIHRoZSBzdHJlYW0tPnBhdGhuYW1lIGZpZWxkLgorCisgICAgLSBSZWFkIHRoZSBGT05EIHJlc291cmNlIGludG8gbWVtb3J5LCB0aGVuIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYQorICAgICAgVHJ1ZVR5cGUgZm9udCBhbmQvb3IoISkgYSBUeXBlIDEgZm9udCBhdmFpbGFibGUuCisKKyAgICAtIElmIHRoZXJlIGlzIGEgVHlwZSAxIGZvbnQgYXZhaWxhYmxlIChhcyBhIHNlcGFyYXRlIGBMV0ZOJyBmaWxlKSwgcmVhZAorICAgICAgaXRzIGRhdGEgaW50byBtZW1vcnksIG1hc3NhZ2UgaXQgc2xpZ2h0bHkgc28gaXQgYmVjb21lcyBQRkIgZGF0YSwgd3JhcAorICAgICAgaXQgaW50byBhIG1lbW9yeSBzdHJlYW0sIGxvYWQgdGhlIFR5cGUgMSBkcml2ZXIgYW5kIGRlbGVnYXRlIHRoZSByZXN0CisgICAgICBvZiB0aGUgd29yayB0byBpdCBieSBjYWxsaW5nIEZUX09wZW5fRmFjZSgpLiAgKFhYWCBUT0RPOiBhZnRlciB0aGlzCisgICAgICBoYXMgYmVlbiBkb25lLCB0aGUga2VybmluZyBkYXRhIGZyb20gdGhlIEZPTkQgcmVzb3VyY2Ugc2hvdWxkIGJlCisgICAgICBhcHBlbmRlZCB0byB0aGUgZmFjZTogT24gdGhlIE1hYyB0aGVyZSBhcmUgdXN1YWxseSBubyBBRk0gZmlsZXMKKyAgICAgIGF2YWlsYWJsZS4gIEhvd2V2ZXIsIHRoaXMgaXMgdHJpY2t5IHNpbmNlIHdlIG5lZWQgdG8gbWFwIE1hYyBjaGFyCisgICAgICBjb2RlcyB0byBwcyBnbHlwaCBuYW1lcyB0byBnbHlwaCBJRCdzLi4uKQorCisgICAgLSBJZiB0aGVyZSBpcyBhIFRydWVUeXBlIGZvbnQgKGFuIGBzZm50JyByZXNvdXJjZSksIHJlYWQgaXQgaW50byBtZW1vcnksCisgICAgICB3cmFwIGl0IGludG8gYSBtZW1vcnkgc3RyZWFtLCBsb2FkIHRoZSBUcnVlVHlwZSBkcml2ZXIgYW5kIGRlbGVnYXRlCisgICAgICB0aGUgcmVzdCBvZiB0aGUgd29yayB0byBpdCwgYnkgY2FsbGluZyBGVF9PcGVuX0ZhY2UoKS4KKworICAgIC0gU29tZSBzdWl0Y2FzZSBmb250cyAobm90YWJseSBPbnl4KSBtaWdodCBwb2ludCB0aGUgYExXRk4nIGZpbGUgdG8KKyAgICAgIGl0c2VsZiwgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBjb250YWlucyBgUE9TVCcgcmVzb3VyY2VzLiAgVG8gaGFuZGxlCisgICAgICB0aGlzIHNwZWNpYWwgY2FzZSB3aXRob3V0IG9wZW5pbmcgdGhlIGZpbGUgYW4gZXh0cmEgdGltZSwgd2UganVzdAorICAgICAgaWdub3JlIGVycm9ycyBmcm9tIHRoZSBgTFdGTicgYW5kIGZhbGxiYWNrIHRvIHRoZSBgc2ZudCcgaWYgYm90aCBhcmUKKyAgICAgIGF2YWlsYWJsZS4KKyAgKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlICJmdGJhc2UuaCIKKworI2lmIGRlZmluZWQoIF9fR05VQ19fICkgfHwgZGVmaW5lZCggX19JQk1DX18gKQorICAvKiBUaGlzIGlzIGZvciBNYWMgT1MgWC4gIFdpdGhvdXQgcmVkZWZpbml0aW9uLCBPU19JTkxJTkUgKi8KKyAgLyogZXhwYW5kcyB0byBgc3RhdGljIGlubGluZScgd2hpY2ggZG9lc24ndCBzdXJ2aXZlIHRoZSAgICovCisgIC8qIC1hbnNpIGNvbXBpbGF0aW9uIGZsYWcgb2YgR0NDLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmICFIQVZFX0FOU0lfT1NfSU5MSU5FCisjdW5kZWYgIE9TX0lOTElORQorI2RlZmluZSBPU19JTkxJTkUgICBzdGF0aWMgX19pbmxpbmVfXworI2VuZGlmCisjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNsaW1pdHMuaD4gLyogUEFUSF9NQVggKi8KKyNlbHNlCisjaW5jbHVkZSA8UmVzb3VyY2VzLmg+CisjaW5jbHVkZSA8Rm9udHMuaD4KKyNpbmNsdWRlIDxFbmRpYW4uaD4KKyNpbmNsdWRlIDxFcnJvcnMuaD4KKyNpbmNsdWRlIDxGaWxlcy5oPgorI2luY2x1ZGUgPFRleHRVdGlscy5oPgorI2VuZGlmCisKKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggMTAyNCAvKiBzYW1lIHdpdGggTWFjIE9TIFgncyBzeXNsaW1pdHMuaCAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfX01XRVJLU19fICkgJiYgIVRBUkdFVF9SVF9NQUNfTUFDSE8KKyNpbmNsdWRlIDxGU3BfZm9wZW4uaD4KKyNlbmRpZgorCisjZGVmaW5lIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFCisKKyNpbmNsdWRlIEZUX01BQ19ICisKKyAgLyogdW5kZWZpbmUgYmxvY2tpbmctbWFjcm9zIGluIGZ0bWFjLmggKi8KKyN1bmRlZiBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUKKyN1bmRlZiBGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lCisjdW5kZWYgRlRfTmV3X0ZhY2VfRnJvbV9GT05ECisjdW5kZWYgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMKKyN1bmRlZiBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmCisKKworICAvKiBGU1NwZWMgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIHNpbmNlIE1hYyBPUyBYIDEwLjQgKi8KKyNpZm5kZWYgSEFWRV9GU1NQRUMKKyNpZiBUQVJHRVRfQVBJX01BQ19PUzggfHwgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OCisjZGVmaW5lIEhBVkVfRlNTUEVDICAxCisjZWxzZQorI2RlZmluZSBIQVZFX0ZTU1BFQyAgMAorI2VuZGlmCisjZW5kaWYKKworICAvKiBtb3N0IEZTUmVmIGZ1bmN0aW9ucyB3ZXJlIGludHJvZHVjZWQgc2luY2UgTWFjIE9TIDkgKi8KKyNpZm5kZWYgSEFWRV9GU1JFRgorI2lmIFRBUkdFVF9BUElfTUFDX09TWAorI2RlZmluZSBIQVZFX0ZTUkVGICAxCisjZWxzZQorI2RlZmluZSBIQVZFX0ZTUkVGICAwCisjZW5kaWYKKyNlbmRpZgorCisgIC8qIFF1aWNrRHJhdyBpcyBkZXByZWNhdGVkIHNpbmNlIE1hYyBPUyBYIDEwLjQgKi8KKyNpZm5kZWYgSEFWRV9RVUlDS0RSQVdfQ0FSQk9OCisjaWYgVEFSR0VUX0FQSV9NQUNfT1M4IHx8IFRBUkdFVF9BUElfTUFDX0NBUkJPTgorI2RlZmluZSBIQVZFX1FVSUNLRFJBV19DQVJCT04gIDEKKyNlbHNlCisjZGVmaW5lIEhBVkVfUVVJQ0tEUkFXX0NBUkJPTiAgMAorI2VuZGlmCisjZW5kaWYKKworICAvKiBBcHBsZVR5cGVTZXJ2aWNlIGlzIGF2YWlsYWJsZSBzaW5jZSBNYWMgT1MgWCAqLworI2lmbmRlZiBIQVZFX0FUUworI2lmIFRBUkdFVF9BUElfTUFDX09TWAorI2RlZmluZSBIQVZFX0FUUyAgMQorI2lmbmRlZiBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSAvKiBzaW5jZSBNYWMgT1MgWCAxMC4xICovCisjZGVmaW5lIGtBVFNPcHRpb25GbGFnc1VuUmVzdHJpY3RlZFNjb3BlIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgSEFWRV9BVFMgIDAKKyNlbmRpZgorI2VuZGlmCisKKyAgLyogYGNvbmZpZ3VyZScgY2hlY2tzIHRoZSBhdmFpbGFiaWxpdHkgb2YgYFJlc291cmNlSW5kZXgnIHN0cmljdGx5ICovCisgIC8qIGFuZCBzZXRzIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCB0byAxIG9yIDAgYWx3YXlzLiAgSWYgaXQgaXMgICAqLworICAvKiBub3Qgc2V0IChlLmcuLCBhIGJ1aWxkIHdpdGhvdXQgYGNvbmZpZ3VyZScpLCB0aGUgYXZhaWxhYmlsaXR5ICAgKi8KKyAgLyogaXMgZ3Vlc3NlZCBmcm9tIHRoZSBTREsgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWAorI2lmICFkZWZpbmVkKCBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKSB8fCBcCisgICAgKCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDwgTUFDX09TX1hfVkVSU0lPTl8xMF81ICkKKyNkZWZpbmUgSEFWRV9UWVBFX1JFU09VUkNFX0lOREVYIDAKKyNlbHNlCisjZGVmaW5lIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCAxCisjZW5kaWYKKyNlbmRpZiAvKiAhSEFWRV9UWVBFX1JFU09VUkNFX0lOREVYICovCisKKyNpZiAoIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCA9PSAwICkKK3R5cGVkZWYgc2hvcnQgUmVzb3VyY2VJbmRleDsKKyNlbmRpZgorCisgIC8qIFNldCBQUkVGRVJfTFdGTiB0byAxIGlmIExXRk4gKFR5cGUgMSkgaXMgcHJlZmVycmVkIG92ZXIKKyAgICAgVHJ1ZVR5cGUgaW4gY2FzZSAqYm90aCogYXJlIGF2YWlsYWJsZSAodGhpcyBpcyBub3QgY29tbW9uLAorICAgICBidXQgaXQgKmlzKiBwb3NzaWJsZSkuICovCisjaWZuZGVmIFBSRUZFUl9MV0ZOCisjZGVmaW5lIFBSRUZFUl9MV0ZOICAxCisjZW5kaWYKKworI2lmZGVmIEZUX01BQ0lOVE9TSAorCisjaWYgIUhBVkVfUVVJQ0tEUkFXX0NBUkJPTiAgLyogUXVpY2tEcmF3IGlzIGRlcHJlY2F0ZWQgc2luY2UgTWFjIE9TIFggMTAuNCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lKCBjb25zdCBjaGFyKiAgZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICBmYWNlX2luZGV4ICkKKyAgeworICAgIEZUX1VOVVNFRCggZm9udE5hbWUgKTsKKyAgICBGVF9VTlVTRUQoIHBhdGhTcGVjICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKKyNlbHNlCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgIGZhY2VfaW5kZXggKQorICB7CisgICAgT3B0aW9uQml0cyAgICAgICAgICAgIG9wdGlvbnMgPSBrRk1Vc2VHbG9iYWxTY29wZU9wdGlvbjsKKworICAgIEZNRm9udEZhbWlseUl0ZXJhdG9yICBmYW1JdGVyOworICAgIE9TU3RhdHVzICAgICAgICAgICAgICBzdGF0dXMgPSBGTUNyZWF0ZUZvbnRGYW1pbHlJdGVyYXRvciggTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFtSXRlciApOworICAgIEZNRm9udCAgICAgICAgICAgICAgICB0aGVfZm9udCA9IDA7CisgICAgRk1Gb250RmFtaWx5ICAgICAgICAgIGZhbWlseSAgID0gMDsKKworCisgICAgaWYgKCAhZm9udE5hbWUgfHwgIWZhY2VfaW5kZXggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAqZmFjZV9pbmRleCA9IDA7CisgICAgd2hpbGUgKCBzdGF0dXMgPT0gMCAmJiAhdGhlX2ZvbnQgKQorICAgIHsKKyAgICAgIHN0YXR1cyA9IEZNR2V0TmV4dEZvbnRGYW1pbHkoICZmYW1JdGVyLCAmZmFtaWx5ICk7CisgICAgICBpZiAoIHN0YXR1cyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdDI7CisgICAgICAgIEZNRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IgIGluc3RJdGVyOworICAgICAgICBTdHIyNTUgICAgICAgICAgICAgICAgICAgICAgICBmYW1OYW1lU3RyOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1OYW1lWzI1Nl07CisKKworICAgICAgICAvKiBnZXQgdGhlIGZhbWlseSBuYW1lICovCisgICAgICAgIEZNR2V0Rm9udEZhbWlseU5hbWUoIGZhbWlseSwgZmFtTmFtZVN0ciApOworICAgICAgICBDb3B5UGFzY2FsU3RyaW5nVG9DKCBmYW1OYW1lU3RyLCBmYW1OYW1lICk7CisKKyAgICAgICAgLyogaXRlcmF0ZSB0aHJvdWdoIHRoZSBzdHlsZXMgKi8KKyAgICAgICAgRk1DcmVhdGVGb250RmFtaWx5SW5zdGFuY2VJdGVyYXRvciggZmFtaWx5LCAmaW5zdEl0ZXIgKTsKKworICAgICAgICAqZmFjZV9pbmRleCA9IDA7CisgICAgICAgIHN0YXQyICAgICAgID0gMDsKKworICAgICAgICB3aGlsZSAoIHN0YXQyID09IDAgJiYgIXRoZV9mb250ICkKKyAgICAgICAgeworICAgICAgICAgIEZNRm9udFN0eWxlICBzdHlsZTsKKyAgICAgICAgICBGTUZvbnRTaXplICAgc2l6ZTsKKyAgICAgICAgICBGTUZvbnQgICAgICAgZm9udDsKKworCisgICAgICAgICAgc3RhdDIgPSBGTUdldE5leHRGb250RmFtaWx5SW5zdGFuY2UoICZpbnN0SXRlciwgJmZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZSwgJnNpemUgKTsKKyAgICAgICAgICBpZiAoIHN0YXQyID09IDAgJiYgc2l6ZSA9PSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjaGFyICBmdWxsTmFtZVsyNTZdOworCisKKyAgICAgICAgICAgIC8qIGJ1aWxkIHVwIGEgY29tcGxldGUgZmFjZSBuYW1lICovCisgICAgICAgICAgICBmdF9zdHJjcHkoIGZ1bGxOYW1lLCBmYW1OYW1lICk7CisgICAgICAgICAgICBpZiAoIHN0eWxlICYgYm9sZCApCisgICAgICAgICAgICAgIGZ0X3N0cmNhdCggZnVsbE5hbWUsICIgQm9sZCIgKTsKKyAgICAgICAgICAgIGlmICggc3R5bGUgJiBpdGFsaWMgKQorICAgICAgICAgICAgICBmdF9zdHJjYXQoIGZ1bGxOYW1lLCAiIEl0YWxpYyIgKTsKKworICAgICAgICAgICAgLyogY29tcGFyZSB3aXRoIHRoZSBuYW1lIHdlIGFyZSBsb29raW5nIGZvciAqLworICAgICAgICAgICAgaWYgKCBmdF9zdHJjbXAoIGZ1bGxOYW1lLCBmb250TmFtZSApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBmb3VuZCBpdCEgKi8KKyAgICAgICAgICAgICAgdGhlX2ZvbnQgPSBmb250OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICArKygqZmFjZV9pbmRleCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRk1EaXNwb3NlRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IoICZpbnN0SXRlciApOworICAgICAgfQorICAgIH0KKworICAgIEZNRGlzcG9zZUZvbnRGYW1pbHlJdGVyYXRvciggJmZhbUl0ZXIgKTsKKworICAgIGlmICggdGhlX2ZvbnQgKQorICAgIHsKKyAgICAgIEZNR2V0Rm9udENvbnRhaW5lciggdGhlX2ZvbnQsIHBhdGhTcGVjICk7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgfQorCisjZW5kaWYgLyogSEFWRV9RVUlDS0RSQVdfQ0FSQk9OICovCisKKworI2lmIEhBVkVfQVRTCisKKyAgLyogUHJpdmF0ZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBGU1NwZWMgdHlwZSBoYXMgYmVlbiBkaXNjb3VyYWdlZCBmb3IgYSBsb25nIHRpbWUsICAgICAqLworICAvKiB1bmZvcnR1bmF0ZWx5IGFuIEZTUmVmIHJlcGxhY2VtZW50IEFQSSBmb3IgICAgICAgICAgICAgICAgKi8KKyAgLyogQVRTRm9udEdldEZpbGVTcGVjaWZpY2F0aW9uKCkgaXMgb25seSBhdmFpbGFibGUgaW4gICAgICAgICovCisgIC8qIE1hYyBPUyBYIDEwLjUgYW5kIGxhdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgT1NTdGF0dXMKKyAgRlRfQVRTRm9udEdldEZpbGVSZWZlcmVuY2UoIEFUU0ZvbnRSZWYgIGF0c19mb250X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNSZWYqICAgICAgYXRzX2ZvbnRfcmVmICkKKyAgeworICAgIE9TU3RhdHVzICBlcnI7CisKKyNpZiAhZGVmaW5lZCggTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgfHwgXAorICAgIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgTUFDX09TX1hfVkVSU0lPTl8xMF81CisgICAgRlNTcGVjICAgIHNwZWM7CisKKworICAgIGVyciA9IEFUU0ZvbnRHZXRGaWxlU3BlY2lmaWNhdGlvbiggYXRzX2ZvbnRfaWQsICZzcGVjICk7CisgICAgaWYgKCBub0VyciA9PSBlcnIgKQorICAgICAgZXJyID0gRlNwTWFrZUZTUmVmKCAmc3BlYywgYXRzX2ZvbnRfcmVmICk7CisjZWxzZQorICAgIGVyciA9IEFUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBhdHNfZm9udF9pZCwgYXRzX2ZvbnRfcmVmICk7CisjZW5kaWYKKworICAgIHJldHVybiBlcnI7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBGVF9HZXRGaWxlUmVmX0Zyb21fTWFjX0FUU19OYW1lKCBjb25zdCBjaGFyKiAgZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTUmVmKiAgICAgICBhdHNfZm9udF9yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICBmYWNlX2luZGV4ICkKKyAgeworICAgIENGU3RyaW5nUmVmICBjZl9mb250TmFtZTsKKyAgICBBVFNGb250UmVmICAgYXRzX2ZvbnRfaWQ7CisKKworICAgICpmYWNlX2luZGV4ID0gMDsKKworICAgIGNmX2ZvbnROYW1lID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyggTlVMTCwgZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuICk7CisgICAgYXRzX2ZvbnRfaWQgPSBBVFNGb250RmluZEZyb21OYW1lKCBjZl9mb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBVFNPcHRpb25GbGFnc1VuUmVzdHJpY3RlZFNjb3BlICk7CisgICAgQ0ZSZWxlYXNlKCBjZl9mb250TmFtZSApOworCisgICAgaWYgKCBhdHNfZm9udF9pZCA9PSAwIHx8IGF0c19mb250X2lkID09IDB4RkZGRkZGRkZVTCApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIGlmICggbm9FcnIgIT0gRlRfQVRTRm9udEdldEZpbGVSZWZlcmVuY2UoIGF0c19mb250X2lkLCBhdHNfZm9udF9yZWYgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIC8qIGZhY2VfaW5kZXggY2FsY3VsYXRpb24gYnkgc2VhcmNoaW5nIHByZWNlZGluZyBmb250SURzICovCisgICAgLyogd2l0aCBzYW1lIEZTUmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB7CisgICAgICBBVFNGb250UmVmICBpZDIgPSBhdHNfZm9udF9pZCAtIDE7CisgICAgICBGU1JlZiAgICAgICByZWYyOworCisKKyAgICAgIHdoaWxlICggaWQyID4gMCApCisgICAgICB7CisgICAgICAgIGlmICggbm9FcnIgIT0gRlRfQVRTRm9udEdldEZpbGVSZWZlcmVuY2UoIGlkMiwgJnJlZjIgKSApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggbm9FcnIgIT0gRlNDb21wYXJlRlNSZWZzKCBhdHNfZm9udF9yZWYsICZyZWYyICkgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlkMi0tOworICAgICAgfQorICAgICAgKmZhY2VfaW5kZXggPSBhdHNfZm9udF9pZCAtICggaWQyICsgMSApOworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworI2VuZGlmCisKKyNpZiAhSEFWRV9BVFMKKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lKCBjb25zdCBjaGFyKiAgZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50OCogICAgICAgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQzMiAgICAgICBtYXhQYXRoU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICBmYWNlX2luZGV4ICkKKyAgeworICAgIEZUX1VOVVNFRCggZm9udE5hbWUgKTsKKyAgICBGVF9VTlVTRUQoIHBhdGggKTsKKyAgICBGVF9VTlVTRUQoIG1heFBhdGhTaXplICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKKyNlbHNlCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgICAgICAgbWF4UGF0aFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBGU1JlZiAgICAgcmVmOworICAgIEZUX0Vycm9yICBlcnI7CisKKworICAgIGVyciA9IEZUX0dldEZpbGVSZWZfRnJvbV9NYWNfQVRTX05hbWUoIGZvbnROYW1lLCAmcmVmLCBmYWNlX2luZGV4ICk7CisgICAgaWYgKCBlcnIgKQorICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmICggbm9FcnIgIT0gRlNSZWZNYWtlUGF0aCggJnJlZiwgcGF0aCwgbWF4UGF0aFNpemUgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworI2VuZGlmIC8qIEhBVkVfQVRTICovCisKKworI2lmICFIQVZFX0ZTU1BFQyB8fCAhSEFWRV9BVFMKKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZvbnROYW1lICk7CisgICAgRlRfVU5VU0VEKCBwYXRoU3BlYyApOworICAgIEZUX1VOVVNFRCggZmFjZV9pbmRleCApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCisjZWxzZQorCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIEZTU3BlYyBpcyBkZXByZWNhdGVkIGluIE1hYyBPUyBYLiAqLworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBGU1JlZiAgICAgcmVmOworICAgIEZUX0Vycm9yICBlcnI7CisKKworICAgIGVyciA9IEZUX0dldEZpbGVSZWZfRnJvbV9NYWNfQVRTX05hbWUoIGZvbnROYW1lLCAmcmVmLCBmYWNlX2luZGV4ICk7CisgICAgaWYgKCBlcnIgKQorICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmICggbm9FcnIgIT0gRlNHZXRDYXRhbG9nSW5mbyggJnJlZiwga0ZTQ2F0SW5mb05vbmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoU3BlYywgTlVMTCApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCggX19NV0VSS1NfXyApICYmICFUQVJHRVRfUlRfTUFDX01BQ0hPCisKKyNkZWZpbmUgU1RSRUFNX0ZJTEUoIHN0cmVhbSApICAoIChGVF9GSUxFKilzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciApCisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9GU3Bfc3RyZWFtX2Nsb3NlKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBmdF9mY2xvc2UoIFNUUkVBTV9GSUxFKCBzdHJlYW0gKSApOworCisgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSBOVUxMOworICAgIHN0cmVhbS0+c2l6ZSAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgICAgICAgICAgICAgICA9IDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdW5zaWduZWQgbG9uZyApCisgIGZ0X0ZTcF9zdHJlYW1faW8oIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBjb3VudCApCisgIHsKKyAgICBGVF9GSUxFKiAgZmlsZTsKKworCisgICAgZmlsZSA9IFNUUkVBTV9GSUxFKCBzdHJlYW0gKTsKKworICAgIGZ0X2ZzZWVrKCBmaWxlLCBvZmZzZXQsIFNFRUtfU0VUICk7CisKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnRfZnJlYWQoIGJ1ZmZlciwgMSwgY291bnQsIGZpbGUgKTsKKyAgfQorCisjZW5kaWYgIC8qIF9fTVdFUktTX18gJiYgIVRBUkdFVF9SVF9NQUNfTUFDSE8gKi8KKworCisjaWYgSEFWRV9GU1NQRUMgJiYgIUhBVkVfRlNSRUYKKworICAvKiBpc0RpcmVjdG9yeSBpcyBhIGR1bW15IHRvIHN5bmNocm9uaXplIEFQSSB3aXRoIEZTUGF0aE1ha2VSZWYoKSAqLworICBzdGF0aWMgT1NFcnIKKyAgRlRfRlNQYXRoTWFrZVNwZWMoIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgIHNwZWNfcCwKKyAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgaXNEaXJlY3RvcnkgKQorICB7CisgICAgY29uc3QgY2hhciAgKnAsICpxOworICAgIHNob3J0ICAgICAgIHZSZWZOdW07CisgICAgbG9uZyAgICAgICAgZGlySUQ7CisgICAgU3RyMjU1ICAgICAgbm9kZU5hbWU7CisgICAgT1NFcnIgICAgICAgZXJyOworICAgIEZUX1VOVVNFRCggaXNEaXJlY3RvcnkgKTsKKworCisgICAgcCA9IHEgPSAoY29uc3QgY2hhciAqKXBhdGhuYW1lOworICAgIGRpcklEICAgPSAwOworICAgIHZSZWZOdW0gPSAwOworCisgICAgd2hpbGUgKCAxICkKKyAgICB7CisgICAgICBpbnQgIGxlbiA9IGZ0X3N0cmxlbiggcCApOworCisKKyAgICAgIGlmICggbGVuID4gMjU1ICkKKyAgICAgICAgbGVuID0gMjU1OworCisgICAgICBxID0gcCArIGxlbjsKKworICAgICAgaWYgKCBxID09IHAgKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgaWYgKCAyNTUgPCBmdF9zdHJsZW4oIChjaGFyICopcGF0aG5hbWUgKSApCisgICAgICB7CisgICAgICAgIHdoaWxlICggcCA8IHEgJiYgKnEgIT0gJzonICkKKyAgICAgICAgICBxLS07CisgICAgICB9CisKKyAgICAgIGlmICggcCA8IHEgKQorICAgICAgICAqKGNoYXIgKilub2RlTmFtZSA9IHEgLSBwOworICAgICAgZWxzZSBpZiAoIGZ0X3N0cmxlbiggcCApIDwgMjU2ICkKKyAgICAgICAgKihjaGFyICopbm9kZU5hbWUgPSBmdF9zdHJsZW4oIHAgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGVyckZTTmFtZVRvb0xvbmc7CisKKyAgICAgIGZ0X3N0cm5jcHkoIChjaGFyICopbm9kZU5hbWUgKyAxLCAoY2hhciAqKXAsICooY2hhciAqKW5vZGVOYW1lICk7CisgICAgICBlcnIgPSBGU01ha2VGU1NwZWMoIHZSZWZOdW0sIGRpcklELCBub2RlTmFtZSwgc3BlY19wICk7CisgICAgICBpZiAoIGVyciB8fCAnXDAnID09ICpxICkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAgdlJlZk51bSA9IHNwZWNfcC0+dlJlZk51bTsKKyAgICAgIGRpcklEICAgPSBzcGVjX3AtPnBhcklEOworCisgICAgICBwID0gcTsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBPU0VycgorICBGVF9GU3BNYWtlUGF0aCggY29uc3QgRlNTcGVjKiAgc3BlY19wLAorICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgICAgcGF0aCwKKyAgICAgICAgICAgICAgICAgIFVJbnQzMiAgICAgICAgIG1heFBhdGhTaXplICkKKyAgeworICAgIE9TRXJyICAgZXJyOworICAgIEZTU3BlYyAgc3BlYyA9ICpzcGVjX3A7CisgICAgc2hvcnQgICB2UmVmTnVtOworICAgIGxvbmcgICAgZGlySUQ7CisgICAgU3RyMjU1ICBwYXJEaXJfbmFtZTsKKworCisgICAgRlRfTUVNX1NFVCggcGF0aCwgMCwgbWF4UGF0aFNpemUgKTsKKyAgICB3aGlsZSAoIDEgKQorICAgIHsKKyAgICAgIGludCAgICAgICAgICAgICBjaGlsZF9uYW1lbGVuID0gZnRfc3RybGVuKCAoY2hhciAqKXBhdGggKTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgICBub2RlX25hbWVsZW4gID0gc3BlYy5uYW1lWzBdOworICAgICAgdW5zaWduZWQgY2hhciogIG5vZGVfbmFtZSAgICAgPSBzcGVjLm5hbWUgKyAxOworCisKKyAgICAgIGlmICggbm9kZV9uYW1lbGVuICsgY2hpbGRfbmFtZWxlbiA+IG1heFBhdGhTaXplICkKKyAgICAgICAgcmV0dXJuIGVyckZTTmFtZVRvb0xvbmc7CisKKyAgICAgIEZUX01FTV9NT1ZFKCBwYXRoICsgbm9kZV9uYW1lbGVuICsgMSwgcGF0aCwgY2hpbGRfbmFtZWxlbiApOworICAgICAgRlRfTUVNX0NPUFkoIHBhdGgsIG5vZGVfbmFtZSwgbm9kZV9uYW1lbGVuICk7CisgICAgICBpZiAoIGNoaWxkX25hbWVsZW4gPiAwICkKKyAgICAgICAgcGF0aFtub2RlX25hbWVsZW5dID0gJzonOworCisgICAgICB2UmVmTnVtICAgICAgICA9IHNwZWMudlJlZk51bTsKKyAgICAgIGRpcklEICAgICAgICAgID0gc3BlYy5wYXJJRDsKKyAgICAgIHBhckRpcl9uYW1lWzBdID0gJ1wwJzsKKyAgICAgIGVyciA9IEZTTWFrZUZTU3BlYyggdlJlZk51bSwgZGlySUQsIHBhckRpcl9uYW1lLCAmc3BlYyApOworICAgICAgaWYgKCBub0VyciAhPSBlcnIgfHwgZGlySUQgPT0gc3BlYy5wYXJJRCApCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbm9FcnI7CisgIH0KKworI2VuZGlmIC8qIEhBVkVfRlNTUEVDICYmICFIQVZFX0ZTUkVGICovCisKKworICBzdGF0aWMgT1NFcnIKKyAgRlRfRlNQYXRoTWFrZVJlcyggY29uc3QgVUludDgqICAgIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICBSZXNGaWxlUmVmTnVtKiAgcmVzICkKKyAgeworCisjaWYgSEFWRV9GU1JFRgorCisgICAgT1NFcnIgIGVycjsKKyAgICBGU1JlZiAgcmVmOworCisKKyAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhuYW1lLCAmcmVmLCBGQUxTRSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIC8qIGF0IHByZXNlbnQsIG5vIHN1cHBvcnQgZm9yIGRmb250IGZvcm1hdCAqLworICAgIGVyciA9IEZTT3BlblJlc291cmNlRmlsZSggJnJlZiwgMCwgTlVMTCwgZnNSZFBlcm0sIHJlcyApOworICAgIGlmICggbm9FcnIgPT0gZXJyICkKKyAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBmYWxsYmFjayB0byBvcmlnaW5hbCByZXNvdXJjZS1mb3JrIGZvbnQgKi8KKyAgICAqcmVzID0gRlNPcGVuUmVzRmlsZSggJnJlZiwgZnNSZFBlcm0gKTsKKyAgICBlcnIgID0gUmVzRXJyb3IoKTsKKworI2Vsc2UKKworICAgIE9TRXJyICAgZXJyOworICAgIEZTU3BlYyAgc3BlYzsKKworCisgICAgaWYgKCBub0VyciAhPSBGVF9GU1BhdGhNYWtlU3BlYyggcGF0aG5hbWUsICZzcGVjLCBGQUxTRSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIC8qIGF0IHByZXNlbnQsIG5vIHN1cHBvcnQgZm9yIGRmb250IGZvcm1hdCB3aXRob3V0IEZTUmVmICovCisgICAgLyogKHNlZSBhYm92ZSksIHRyeSBvcmlnaW5hbCByZXNvdXJjZS1mb3JrIGZvbnQgICAgICAgICAgKi8KKyAgICAqcmVzID0gRlNwT3BlblJlc0ZpbGUoICZzcGVjLCBmc1JkUGVybSApOworICAgIGVyciAgPSBSZXNFcnJvcigpOworCisjZW5kaWYgLyogSEFWRV9GU1JFRiAqLworCisgICAgcmV0dXJuIGVycjsKKyAgfQorCisKKyAgLyogUmV0dXJuIHRoZSBmaWxlIHR5cGUgZm9yIGdpdmVuIHBhdGhuYW1lICovCisgIHN0YXRpYyBPU1R5cGUKKyAgZ2V0X2ZpbGVfdHlwZV9mcm9tX3BhdGgoIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUgKQorICB7CisKKyNpZiBIQVZFX0ZTUkVGCisKKyAgICBGU1JlZiAgICAgICAgICByZWY7CisgICAgRlNDYXRhbG9nSW5mbyAgaW5mbzsKKworCisgICAgaWYgKCBub0VyciAhPSBGU1BhdGhNYWtlUmVmKCBwYXRobmFtZSwgJnJlZiwgRkFMU0UgKSApCisgICAgICByZXR1cm4gKCBPU1R5cGUgKSAwOworCisgICAgaWYgKCBub0VyciAhPSBGU0dldENhdGFsb2dJbmZvKCAmcmVmLCBrRlNDYXRJbmZvRmluZGVySW5mbywgJmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMICkgKQorICAgICAgcmV0dXJuICggT1NUeXBlICkgMDsKKworICAgIHJldHVybiAoKEZJbmZvICopKGluZm8uZmluZGVySW5mbykpLT5mZFR5cGU7CisKKyNlbHNlCisKKyAgICBGU1NwZWMgIHNwZWM7CisgICAgRkluZm8gICBmaW5mbzsKKworCisgICAgaWYgKCBub0VyciAhPSBGVF9GU1BhdGhNYWtlU3BlYyggcGF0aG5hbWUsICZzcGVjLCBGQUxTRSApICkKKyAgICAgIHJldHVybiAoIE9TVHlwZSApIDA7CisKKyAgICBpZiAoIG5vRXJyICE9IEZTcEdldEZJbmZvKCAmc3BlYywgJmZpbmZvICkgKQorICAgICAgcmV0dXJuICggT1NUeXBlICkgMDsKKworICAgIHJldHVybiBmaW5mby5mZFR5cGU7CisKKyNlbmRpZiAvKiBIQVZFX0ZTUkVGICovCisKKyAgfQorCisKKyAgLyogR2l2ZW4gYSBQb3N0U2NyaXB0IGZvbnQgbmFtZSwgY3JlYXRlIHRoZSBNYWNpbnRvc2ggTFdGTiBmaWxlIG5hbWUuICovCisgIHN0YXRpYyB2b2lkCisgIGNyZWF0ZV9sd2ZuX25hbWUoIGNoYXIqICAgcHNfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSApCisgIHsKKyAgICBpbnQgICAgICAgbWF4ID0gNSwgY291bnQgPSAwOworICAgIEZUX0J5dGUqICBwID0gbHdmbl9maWxlX25hbWU7CisgICAgRlRfQnl0ZSogIHEgPSAoRlRfQnl0ZSopcHNfbmFtZTsKKworCisgICAgbHdmbl9maWxlX25hbWVbMF0gPSAwOworCisgICAgd2hpbGUgKCAqcSApCisgICAgeworICAgICAgaWYgKCBmdF9pc3VwcGVyKCAqcSApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBjb3VudCApCisgICAgICAgICAgbWF4ID0gMzsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgfQorICAgICAgaWYgKCBjb3VudCA8IG1heCAmJiAoIGZ0X2lzYWxudW0oICpxICkgfHwgKnEgPT0gJ18nICkgKQorICAgICAgeworICAgICAgICAqKytwID0gKnE7CisgICAgICAgIGx3Zm5fZmlsZV9uYW1lWzBdKys7CisgICAgICAgIGNvdW50Kys7CisgICAgICB9CisgICAgICBxKys7CisgICAgfQorICB9CisKKworICBzdGF0aWMgc2hvcnQKKyAgY291bnRfZmFjZXNfc2ZudCggY2hhciogIGZvbmRfZGF0YSApCisgIHsKKyAgICAvKiBUaGUgY291bnQgaXMgMSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIGluIHRoZSBGT05ELiAgKi8KKyAgICAvKiBJc24ndCB0aGF0IGN1dGU/IDotKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHJldHVybiBFbmRpYW5TMTZfQnRvTiggKiggKHNob3J0KikoIGZvbmRfZGF0YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRmFtUmVjICkgKSApICkgKyAxOworICB9CisKKworICBzdGF0aWMgc2hvcnQKKyAgY291bnRfZmFjZXNfc2NhbGFibGUoIGNoYXIqICBmb25kX2RhdGEgKQorICB7CisgICAgQXNzY0VudHJ5KiAgYXNzb2M7CisgICAgc2hvcnQgICAgICAgaSwgZmFjZSwgZmFjZV9hbGw7CisKKworICAgIGZhY2VfYWxsID0gRW5kaWFuUzE2X0J0b04oICooIChzaG9ydCAqKSggZm9uZF9kYXRhICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZhbVJlYyApICkgKSApICsgMTsKKyAgICBhc3NvYyAgICA9IChBc3NjRW50cnkqKSggZm9uZF9kYXRhICsgc2l6ZW9mICggRmFtUmVjICkgKyAyICk7CisgICAgZmFjZSAgICAgPSAwOworCisgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlX2FsbDsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIDAgPT0gRW5kaWFuUzE2X0J0b04oIGFzc29jW2ldLmZvbnRTaXplICkgKQorICAgICAgICBmYWNlKys7CisgICAgfQorICAgIHJldHVybiBmYWNlOworICB9CisKKworICAvKiBMb29rIGluc2lkZSB0aGUgRk9ORCBkYXRhLCBhbnN3ZXIgd2hldGhlciB0aGVyZSBzaG91bGQgYmUgYW4gU0ZOVAorICAgICByZXNvdXJjZSwgYW5kIGFuc3dlciB0aGUgbmFtZSBvZiBhIHBvc3NpYmxlIExXRk4gVHlwZSAxIGZpbGUuCisKKyAgICAgVGhhbmtzIHRvIFBhdWwgTWlsbGVyIChwYXVsbUBwcm9mb3VuZGVmZmVjdHMuY29tKSBmb3IgdGhlIGZpeAorICAgICB0byBsb2FkIGEgZmFjZSBPVEhFUiB0aGFuIHRoZSBmaXJzdCBvbmUgaW4gdGhlIEZPTkQhCisgICovCisKKyAgc3RhdGljIHZvaWQKKyAgcGFyc2VfZm9uZCggY2hhciogICBmb25kX2RhdGEsCisgICAgICAgICAgICAgIHNob3J0KiAgaGF2ZV9zZm50LAorICAgICAgICAgICAgICBSZXNJRCogIHNmbnRfaWQsCisgICAgICAgICAgICAgIFN0cjI1NSAgbHdmbl9maWxlX25hbWUsCisgICAgICAgICAgICAgIHNob3J0ICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBBc3NjRW50cnkqICBhc3NvYzsKKyAgICBBc3NjRW50cnkqICBiYXNlX2Fzc29jOworICAgIEZhbVJlYyogICAgIGZvbmQ7CisKKworICAgICpzZm50X2lkICAgICAgICAgID0gMDsKKyAgICAqaGF2ZV9zZm50ICAgICAgICA9IDA7CisgICAgbHdmbl9maWxlX25hbWVbMF0gPSAwOworCisgICAgZm9uZCAgICAgICA9IChGYW1SZWMqKWZvbmRfZGF0YTsKKyAgICBhc3NvYyAgICAgID0gKEFzc2NFbnRyeSopKCBmb25kX2RhdGEgKyBzaXplb2YgKCBGYW1SZWMgKSArIDIgKTsKKyAgICBiYXNlX2Fzc29jID0gYXNzb2M7CisKKyAgICAvKiB0aGUgbWF4aW11bSBmYWNlcyBpbiBhIEZPTkQgaXMgNDgsIHNpemUgb2YgU3R5bGVUYWJsZS5pbmRleGVzW10gKi8KKyAgICBpZiAoIDQ3IDwgZmFjZV9pbmRleCApCisgICAgICByZXR1cm47CisKKyAgICAvKiBMZXQncyBkbyBhIGxpdHRsZSByYW5nZSBjaGVja2luZyBiZWZvcmUgd2UgZ2V0IHRvbyBleGNpdGVkIGhlcmUgKi8KKyAgICBpZiAoIGZhY2VfaW5kZXggPCBjb3VudF9mYWNlc19zZm50KCBmb25kX2RhdGEgKSApCisgICAgeworICAgICAgYXNzb2MgKz0gZmFjZV9pbmRleDsgICAgICAgIC8qIGFkZCBvbiB0aGUgZmFjZV9pbmRleCEgKi8KKworICAgICAgLyogaWYgdGhlIGZhY2UgYXQgdGhpcyBpbmRleCBpcyBub3Qgc2NhbGFibGUsCisgICAgICAgICBmYWxsIGJhY2sgdG8gdGhlIGZpcnN0IG9uZSAob2xkIGJlaGF2aW9yKSAqLworICAgICAgaWYgKCBFbmRpYW5TMTZfQnRvTiggYXNzb2MtPmZvbnRTaXplICkgPT0gMCApCisgICAgICB7CisgICAgICAgICpoYXZlX3NmbnQgPSAxOworICAgICAgICAqc2ZudF9pZCAgID0gRW5kaWFuUzE2X0J0b04oIGFzc29jLT5mb250SUQgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBiYXNlX2Fzc29jLT5mb250U2l6ZSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgKmhhdmVfc2ZudCA9IDE7CisgICAgICAgICpzZm50X2lkICAgPSBFbmRpYW5TMTZfQnRvTiggYmFzZV9hc3NvYy0+Zm9udElEICk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBFbmRpYW5TMzJfQnRvTiggZm9uZC0+ZmZTdHlsT2ZmICkgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIqICBwID0gKHVuc2lnbmVkIGNoYXIqKWZvbmRfZGF0YTsKKyAgICAgIFN0eWxlVGFibGUqICAgICBzdHlsZTsKKyAgICAgIHVuc2lnbmVkIHNob3J0ICBzdHJpbmdfY291bnQ7CisgICAgICBjaGFyICAgICAgICAgICAgcHNfbmFtZVsyNTZdOworICAgICAgdW5zaWduZWQgY2hhciogIG5hbWVzWzY0XTsKKyAgICAgIGludCAgICAgICAgICAgICBpOworCisKKyAgICAgIHAgKz0gRW5kaWFuUzMyX0J0b04oIGZvbmQtPmZmU3R5bE9mZiApOworICAgICAgc3R5bGUgPSAoU3R5bGVUYWJsZSopcDsKKyAgICAgIHAgKz0gc2l6ZW9mICggU3R5bGVUYWJsZSApOworICAgICAgc3RyaW5nX2NvdW50ID0gRW5kaWFuUzE2X0J0b04oICooc2hvcnQqKShwKSApOworICAgICAgcCArPSBzaXplb2YgKCBzaG9ydCApOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IHN0cmluZ19jb3VudCAmJiBpIDwgNjQ7IGkrKyApCisgICAgICB7CisgICAgICAgIG5hbWVzW2ldID0gcDsKKyAgICAgICAgcCAgICAgICArPSBuYW1lc1tpXVswXTsKKyAgICAgICAgcCsrOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIHNpemVfdCAgcHNfbmFtZV9sZW4gPSAoc2l6ZV90KW5hbWVzWzBdWzBdOworCisKKyAgICAgICAgaWYgKCBwc19uYW1lX2xlbiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIGZ0X21lbWNweShwc19uYW1lLCBuYW1lc1swXSArIDEsIHBzX25hbWVfbGVuKTsKKyAgICAgICAgICBwc19uYW1lW3BzX25hbWVfbGVuXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA+IDEgJiYKKyAgICAgICAgICAgICBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA8PSBGVF9NSU4oIHN0cmluZ19jb3VudCwgNjQgKSApCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgc3VmZml4ZXMgPSBuYW1lc1tzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSAtIDFdOworCisKKyAgICAgICAgICBmb3IgKCBpID0gMTsgaSA8PSBzdWZmaXhlc1swXTsgaSsrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgczsKKyAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBqID0gc3VmZml4ZXNbaV0gLSAxOworCisKKyAgICAgICAgICAgIGlmICggaiA8IHN0cmluZ19jb3VudCAmJiAoIHMgPSBuYW1lc1tqXSApICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaXplX3QgIHNfbGVuID0gKHNpemVfdClzWzBdOworCisKKyAgICAgICAgICAgICAgaWYgKCBzX2xlbiAhPSAwICYmIHBzX25hbWVfbGVuICsgc19sZW4gPCBzaXplb2YgKCBwc19uYW1lICkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnRfbWVtY3B5KCBwc19uYW1lICsgcHNfbmFtZV9sZW4sIHMgKyAxLCBzX2xlbiApOworICAgICAgICAgICAgICAgIHBzX25hbWVfbGVuICs9IHNfbGVuOworICAgICAgICAgICAgICAgIHBzX25hbWVbcHNfbmFtZV9sZW5dID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjcmVhdGVfbHdmbl9uYW1lKCBwc19uYW1lLCBsd2ZuX2ZpbGVfbmFtZSApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljICBGVF9FcnJvcgorICBsb29rdXBfbHdmbl9ieV9mb25kKCBjb25zdCBVSW50OCogICAgICBwYXRoX2ZvbmQsCisgICAgICAgICAgICAgICAgICAgICAgIENvbnN0U3RyMjU1UGFyYW0gIGJhc2VfbHdmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgICAgICAgcGF0aF9sd2ZuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwYXRoX3NpemUgKQorICB7CisKKyNpZiBIQVZFX0ZTUkVGCisKKyAgICBGU1JlZiAgcmVmLCBwYXJfcmVmOworICAgIGludCAgICBkaXJuYW1lX2xlbjsKKworCisgICAgLyogUGF0aG5hbWUgZm9yIEZTUmVmIGNhbiBiZSBpbiB2YXJpb3VzIGZvcm1hdHM6IEhGUywgSEZTKywgYW5kIFBPU0lYLiAqLworICAgIC8qIFdlIHNob3VsZCBub3QgZXh0cmFjdCBwYXJlbnQgZGlyZWN0b3J5IGJ5IHN0cmluZyBtYW5pcHVsYXRpb24uICAgICAgKi8KKworICAgIGlmICggbm9FcnIgIT0gRlNQYXRoTWFrZVJlZiggcGF0aF9mb25kLCAmcmVmLCBGQUxTRSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBub0VyciAhPSBGU0dldENhdGFsb2dJbmZvKCAmcmVmLCBrRlNDYXRJbmZvTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsICZwYXJfcmVmICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIG5vRXJyICE9IEZTUmVmTWFrZVBhdGgoICZwYXJfcmVmLCBwYXRoX2x3Zm4sIHBhdGhfc2l6ZSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBmdF9zdHJsZW4oIChjaGFyICopcGF0aF9sd2ZuICkgKyAxICsgYmFzZV9sd2ZuWzBdID4gcGF0aF9zaXplICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogbm93IHdlIGhhdmUgYWJzb2x1dGUgZGlybmFtZSBpbiBwYXRoX2x3Zm4gKi8KKyAgICBpZiAoIHBhdGhfbHdmblswXSA9PSAnLycgKQorICAgICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgIi8iICk7CisgICAgZWxzZQorICAgICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgIjoiICk7CisKKyAgICBkaXJuYW1lX2xlbiA9IGZ0X3N0cmxlbiggKGNoYXIgKilwYXRoX2x3Zm4gKTsKKyAgICBmdF9zdHJjYXQoIChjaGFyICopcGF0aF9sd2ZuLCAoY2hhciAqKWJhc2VfbHdmbiArIDEgKTsKKyAgICBwYXRoX2x3Zm5bZGlybmFtZV9sZW4gKyBiYXNlX2x3Zm5bMF1dID0gJ1wwJzsKKworICAgIGlmICggbm9FcnIgIT0gRlNQYXRoTWFrZVJlZiggcGF0aF9sd2ZuLCAmcmVmLCBGQUxTRSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIGlmICggbm9FcnIgIT0gRlNHZXRDYXRhbG9nSW5mbyggJnJlZiwga0ZTQ2F0SW5mb05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworI2Vsc2UKKworICAgIGludCAgICAgaTsKKyAgICBGU1NwZWMgIHNwZWM7CisKKworICAgIC8qIHBhdGhuYW1lIGZvciBGU1NwZWMgaXMgYWx3YXlzIEhGUyBmb3JtYXQgKi8KKyAgICBpZiAoIGZ0X3N0cmxlbiggKGNoYXIgKilwYXRoX2ZvbmQgKSA+IHBhdGhfc2l6ZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGZ0X3N0cmNweSggKGNoYXIgKilwYXRoX2x3Zm4sIChjaGFyICopcGF0aF9mb25kICk7CisKKyAgICBpID0gZnRfc3RybGVuKCAoY2hhciAqKXBhdGhfbHdmbiApIC0gMTsKKyAgICB3aGlsZSAoIGkgPiAwICYmICc6JyAhPSBwYXRoX2x3Zm5baV0gKQorICAgICAgaS0tOworCisgICAgaWYgKCBpICsgMSArIGJhc2VfbHdmblswXSA+IHBhdGhfc2l6ZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggJzonID09IHBhdGhfbHdmbltpXSApCisgICAgeworICAgICAgZnRfc3RyY3B5KCAoY2hhciAqKXBhdGhfbHdmbiArIGkgKyAxLCAoY2hhciAqKWJhc2VfbHdmbiArIDEgKTsKKyAgICAgIHBhdGhfbHdmbltpICsgMSArIGJhc2VfbHdmblswXV0gPSAnXDAnOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZnRfc3RyY3B5KCAoY2hhciAqKXBhdGhfbHdmbiwgKGNoYXIgKiliYXNlX2x3Zm4gKyAxICk7CisgICAgICBwYXRoX2x3Zm5bYmFzZV9sd2ZuWzBdXSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKCBub0VyciAhPSBGVF9GU1BhdGhNYWtlU3BlYyggcGF0aF9sd2ZuLCAmc3BlYywgRkFMU0UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworCisjZW5kaWYgLyogSEFWRV9GU1JFRiAqLworCisgIH0KKworCisgIHN0YXRpYyBzaG9ydAorICBjb3VudF9mYWNlcyggSGFuZGxlICAgICAgICBmb25kLAorICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSApCisgIHsKKyAgICBSZXNJRCAgICAgc2ZudF9pZDsKKyAgICBzaG9ydCAgICAgaGF2ZV9zZm50LCBoYXZlX2x3Zm47CisgICAgU3RyMjU1ICAgIGx3Zm5fZmlsZV9uYW1lOworICAgIFVJbnQ4ICAgICBidWZmW1BBVEhfTUFYXTsKKyAgICBGVF9FcnJvciAgZXJyOworICAgIHNob3J0ICAgICBudW1fZmFjZXM7CisKKworICAgIGhhdmVfc2ZudCA9IGhhdmVfbHdmbiA9IDA7CisKKyAgICBITG9jayggZm9uZCApOworICAgIHBhcnNlX2ZvbmQoICpmb25kLCAmaGF2ZV9zZm50LCAmc2ZudF9pZCwgbHdmbl9maWxlX25hbWUsIDAgKTsKKworICAgIGlmICggbHdmbl9maWxlX25hbWVbMF0gKQorICAgIHsKKyAgICAgIGVyciA9IGxvb2t1cF9sd2ZuX2J5X2ZvbmQoIHBhdGhuYW1lLCBsd2ZuX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmYsIHNpemVvZiAoIGJ1ZmYgKSAgKTsKKyAgICAgIGlmICggRlRfRXJyX09rID09IGVyciApCisgICAgICAgIGhhdmVfbHdmbiA9IDE7CisgICAgfQorCisgICAgaWYgKCBoYXZlX2x3Zm4gJiYgKCAhaGF2ZV9zZm50IHx8IFBSRUZFUl9MV0ZOICkgKQorICAgICAgbnVtX2ZhY2VzID0gMTsKKyAgICBlbHNlCisgICAgICBudW1fZmFjZXMgPSBjb3VudF9mYWNlc19zY2FsYWJsZSggKmZvbmQgKTsKKworICAgIEhVbmxvY2soIGZvbmQgKTsKKyAgICByZXR1cm4gbnVtX2ZhY2VzOworICB9CisKKworICAvKiBSZWFkIFR5cGUgMSBkYXRhIGZyb20gdGhlIFBPU1QgcmVzb3VyY2VzIGluc2lkZSB0aGUgTFdGTiBmaWxlLAorICAgICByZXR1cm4gYSBQRkIgYnVmZmVyLiAgVGhpcyBpcyBzb21ld2hhdCBjb252b2x1dGVkIGJlY2F1c2UgdGhlIEZUMgorICAgICBQRkIgcGFyc2VyIHdhbnRzIHRoZSBBU0NJSSBoZWFkZXIgYXMgb25lIGNodW5rLCBhbmQgdGhlIExXRk4KKyAgICAgY2h1bmtzIGFyZSBvZnRlbiBub3Qgb3JnYW5pemVkIHRoYXQgd2F5LCBzbyB3ZSBnbHVlIGNodW5rcworICAgICBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmVhZF9sd2ZuKCBGVF9NZW1vcnkgICAgICBtZW1vcnksCisgICAgICAgICAgICAgUmVzRmlsZVJlZk51bSAgcmVzLAorICAgICAgICAgICAgIEZUX0J5dGUqKiAgICAgIHBmYl9kYXRhLAorICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIHNpemUgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgUmVzSUQgICAgICAgICAgcmVzX2lkOworICAgIHVuc2lnbmVkIGNoYXIgICpidWZmZXIsICpwLCAqc2l6ZV9wID0gTlVMTDsKKyAgICBGVF9VTG9uZyAgICAgICB0b3RhbF9zaXplID0gMDsKKyAgICBGVF9VTG9uZyAgICAgICBvbGRfdG90YWxfc2l6ZSA9IDA7CisgICAgRlRfVUxvbmcgICAgICAgcG9zdF9zaXplLCBwZmJfY2h1bmtfc2l6ZTsKKyAgICBIYW5kbGUgICAgICAgICBwb3N0X2RhdGE7CisgICAgY2hhciAgICAgICAgICAgY29kZSwgbGFzdF9jb2RlOworCisKKyAgICBVc2VSZXNGaWxlKCByZXMgKTsKKworICAgIC8qIEZpcnN0IHBhc3M6IGxvYWQgYWxsIFBPU1QgcmVzb3VyY2VzLCBhbmQgZGV0ZXJtaW5lIHRoZSBzaXplIG9mICovCisgICAgLyogdGhlIG91dHB1dCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICByZXNfaWQgICAgPSA1MDE7CisgICAgbGFzdF9jb2RlID0gLTE7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHBvc3RfZGF0YSA9IEdldDFSZXNvdXJjZSggVFRBR19QT1NULCByZXNfaWQrKyApOworICAgICAgaWYgKCBwb3N0X2RhdGEgPT0gTlVMTCApCisgICAgICAgIGJyZWFrOyAgLyogd2UgYXJlIGRvbmUgKi8KKworICAgICAgY29kZSA9ICgqcG9zdF9kYXRhKVswXTsKKworICAgICAgaWYgKCBjb2RlICE9IGxhc3RfY29kZSApCisgICAgICB7CisgICAgICAgIGlmICggY29kZSA9PSA1ICkKKyAgICAgICAgICB0b3RhbF9zaXplICs9IDI7IC8qIGp1c3QgdGhlIGVuZCBjb2RlICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICB0b3RhbF9zaXplICs9IDY7IC8qIGNvZGUgKyA0IGJ5dGVzIGNodW5rIGxlbmd0aCAqLworICAgICAgfQorCisgICAgICB0b3RhbF9zaXplICs9IEdldEhhbmRsZVNpemUoIHBvc3RfZGF0YSApIC0gMjsKKyAgICAgIGxhc3RfY29kZSA9IGNvZGU7CisKKyAgICAgIC8qIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93cyAqLworICAgICAgaWYgKCB0b3RhbF9zaXplIDwgb2xkX3RvdGFsX3NpemUgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX0VSUiggQXJyYXlfVG9vX0xhcmdlICk7CisgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICB9CisKKyAgICAgIG9sZF90b3RhbF9zaXplID0gdG90YWxfc2l6ZTsKKyAgICB9CisKKyAgICBpZiAoIEZUX0FMTE9DKCBidWZmZXIsIChGVF9Mb25nKXRvdGFsX3NpemUgKSApCisgICAgICBnb3RvIEVycm9yOworCisgICAgLyogU2Vjb25kIHBhc3M6IGFwcGVuZCBhbGwgUE9TVCBkYXRhIHRvIHRoZSBidWZmZXIsIGFkZCBQRkIgZmllbGRzLiAqLworICAgIC8qIEdsdWUgYWxsIGNvbnNlY3V0aXZlIGNodW5rcyBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLiAgICAgICAgICAgKi8KKyAgICBwICAgICAgICAgICAgICA9IGJ1ZmZlcjsKKyAgICByZXNfaWQgICAgICAgICA9IDUwMTsKKyAgICBsYXN0X2NvZGUgICAgICA9IC0xOworICAgIHBmYl9jaHVua19zaXplID0gMDsKKworICAgIGZvciAoOzspCisgICAgeworICAgICAgcG9zdF9kYXRhID0gR2V0MVJlc291cmNlKCBUVEFHX1BPU1QsIHJlc19pZCsrICk7CisgICAgICBpZiAoIHBvc3RfZGF0YSA9PSBOVUxMICkKKyAgICAgICAgYnJlYWs7ICAvKiB3ZSBhcmUgZG9uZSAqLworCisgICAgICBwb3N0X3NpemUgPSAoRlRfVUxvbmcpR2V0SGFuZGxlU2l6ZSggcG9zdF9kYXRhICkgLSAyOworICAgICAgY29kZSA9ICgqcG9zdF9kYXRhKVswXTsKKworICAgICAgaWYgKCBjb2RlICE9IGxhc3RfY29kZSApCisgICAgICB7CisgICAgICAgIGlmICggbGFzdF9jb2RlICE9IC0xICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHdlIGFyZSBkb25lIGFkZGluZyBhIGNodW5rLCBmaWxsIGluIHRoZSBzaXplIGZpZWxkICovCisgICAgICAgICAgaWYgKCBzaXplX3AgIT0gTlVMTCApCisgICAgICAgICAgeworICAgICAgICAgICAgKnNpemVfcCsrID0gKEZUX0J5dGUpKCAgIHBmYl9jaHVua19zaXplICAgICAgICAgJiAweEZGICk7CisgICAgICAgICAgICAqc2l6ZV9wKysgPSAoRlRfQnl0ZSkoICggcGZiX2NodW5rX3NpemUgPj4gOCAgKSAmIDB4RkYgKTsKKyAgICAgICAgICAgICpzaXplX3ArKyA9IChGVF9CeXRlKSggKCBwZmJfY2h1bmtfc2l6ZSA+PiAxNiApICYgMHhGRiApOworICAgICAgICAgICAgKnNpemVfcCsrID0gKEZUX0J5dGUpKCAoIHBmYl9jaHVua19zaXplID4+IDI0ICkgJiAweEZGICk7CisgICAgICAgICAgfQorICAgICAgICAgIHBmYl9jaHVua19zaXplID0gMDsKKyAgICAgICAgfQorCisgICAgICAgICpwKysgPSAweDgwOworICAgICAgICBpZiAoIGNvZGUgPT0gNSApCisgICAgICAgICAgKnArKyA9IDB4MDM7ICAvKiB0aGUgZW5kICovCisgICAgICAgIGVsc2UgaWYgKCBjb2RlID09IDIgKQorICAgICAgICAgICpwKysgPSAweDAyOyAgLyogYmluYXJ5IHNlZ21lbnQgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICpwKysgPSAweDAxOyAgLyogQVNDSUkgc2VnbWVudCAqLworCisgICAgICAgIGlmICggY29kZSAhPSA1ICkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfcCA9IHA7ICAgLyogc2F2ZSBmb3IgbGF0ZXIgKi8KKyAgICAgICAgICBwICs9IDQ7ICAgICAgIC8qIG1ha2Ugc3BhY2UgZm9yIHNpemUgZmllbGQgKi8KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmdF9tZW1jcHkoIHAsICpwb3N0X2RhdGEgKyAyLCBwb3N0X3NpemUgKTsKKyAgICAgIHBmYl9jaHVua19zaXplICs9IHBvc3Rfc2l6ZTsKKyAgICAgIHAgKz0gcG9zdF9zaXplOworICAgICAgbGFzdF9jb2RlID0gY29kZTsKKyAgICB9CisKKyAgICAqcGZiX2RhdGEgPSBidWZmZXI7CisgICAgKnNpemUgPSB0b3RhbF9zaXplOworCisgIEVycm9yOgorICAgIENsb3NlUmVzRmlsZSggcmVzICk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDcmVhdGUgYSBuZXcgRlRfRmFjZSBmcm9tIGEgZmlsZSBzcGVjIHRvIGFuIExXRk4gZmlsZS4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIEZUX05ld19GYWNlX0Zyb21fTFdGTiggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgICAgYWZhY2UgKQorICB7CisgICAgRlRfQnl0ZSogICAgICAgcGZiX2RhdGE7CisgICAgRlRfVUxvbmcgICAgICAgcGZiX3NpemU7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CisgICAgUmVzRmlsZVJlZk51bSAgcmVzOworCisKKyAgICBpZiAoIG5vRXJyICE9IEZUX0ZTUGF0aE1ha2VSZXMoIHBhdGhuYW1lLCAmcmVzICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworCisgICAgcGZiX2RhdGEgPSBOVUxMOworICAgIHBmYl9zaXplID0gMDsKKyAgICBlcnJvciA9IHJlYWRfbHdmbiggbGlicmFyeS0+bWVtb3J5LCByZXMsICZwZmJfZGF0YSwgJnBmYl9zaXplICk7CisgICAgQ2xvc2VSZXNGaWxlKCByZXMgKTsgLyogUEZCIGlzIGFscmVhZHkgbG9hZGVkLCB1c2VsZXNzIGFueW1vcmUgKi8KKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIHJldHVybiBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZiX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZiX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICk7CisgIH0KKworCisgIC8qIENyZWF0ZSBhIG5ldyBGVF9GYWNlIGZyb20gYW4gU0ZOVCByZXNvdXJjZSwgc3BlY2lmaWVkIGJ5IHJlcyBJRC4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIEZUX05ld19GYWNlX0Zyb21fU0ZOVCggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXNJRCAgICAgICBzZm50X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgYWZhY2UgKQorICB7CisgICAgSGFuZGxlICAgICBzZm50ID0gTlVMTDsKKyAgICBGVF9CeXRlKiAgIHNmbnRfZGF0YTsKKyAgICBzaXplX3QgICAgIHNmbnRfc2l6ZTsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKyAgICBpbnQgICAgICAgIGlzX2NmZiwgaXNfc2ZudF9wczsKKworCisgICAgc2ZudCA9IEdldFJlc291cmNlKCBUVEFHX3NmbnQsIHNmbnRfaWQgKTsKKyAgICBpZiAoIHNmbnQgPT0gTlVMTCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfSGFuZGxlICk7CisKKyAgICBzZm50X3NpemUgPSAoRlRfVUxvbmcpR2V0SGFuZGxlU2l6ZSggc2ZudCApOworICAgIGlmICggRlRfQUxMT0MoIHNmbnRfZGF0YSwgKEZUX0xvbmcpc2ZudF9zaXplICkgKQorICAgIHsKKyAgICAgIFJlbGVhc2VSZXNvdXJjZSggc2ZudCApOworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIEhMb2NrKCBzZm50ICk7CisgICAgZnRfbWVtY3B5KCBzZm50X2RhdGEsICpzZm50LCBzZm50X3NpemUgKTsKKyAgICBIVW5sb2NrKCBzZm50ICk7CisgICAgUmVsZWFzZVJlc291cmNlKCBzZm50ICk7CisKKyAgICBpc19jZmYgICAgID0gc2ZudF9zaXplID4gNCAmJiAhZnRfbWVtY21wKCBzZm50X2RhdGEsICJPVFRPIiwgNCApOworICAgIGlzX3NmbnRfcHMgPSBzZm50X3NpemUgPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgInR5cDEiLCA0ICk7CisKKyAgICBpZiAoIGlzX3NmbnRfcHMgKQorICAgIHsKKyAgICAgIEZUX1N0cmVhbSAgc3RyZWFtOworCisKKyAgICAgIGlmICggRlRfTkVXKCBzdHJlYW0gKSApCisgICAgICAgIGdvdG8gVHJ5X09wZW5UeXBlOworCisgICAgICBGVF9TdHJlYW1fT3Blbk1lbW9yeSggc3RyZWFtLCBzZm50X2RhdGEsIHNmbnRfc2l6ZSApOworICAgICAgaWYgKCAhb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0oIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApICkKKyAgICAgIHsKKyAgICAgICAgRlRfU3RyZWFtX0Nsb3NlKCBzdHJlYW0gKTsKKyAgICAgICAgRlRfRlJFRSggc3RyZWFtICk7CisgICAgICAgIEZUX0ZSRUUoIHNmbnRfZGF0YSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIEZUX0ZSRUUoIHN0cmVhbSApOworICAgIH0KKyAgVHJ5X09wZW5UeXBlOgorICAgIGVycm9yID0gb3Blbl9mYWNlX2Zyb21fYnVmZmVyKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfY2ZmID8gImNmZiIgOiAidHJ1ZXR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZnJvbSBhIGZpbGUgc3BlYyB0byBhIHN1aXRjYXNlIGZpbGUuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBGVF9OZXdfRmFjZV9Gcm9tX1N1aXRjYXNlKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvciA9IEZUX0VSUiggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKyAgICBSZXNGaWxlUmVmTnVtICByZXNfcmVmOworICAgIFJlc291cmNlSW5kZXggIHJlc19pbmRleDsKKyAgICBIYW5kbGUgICAgICAgICBmb25kOworICAgIHNob3J0ICAgICAgICAgIG51bV9mYWNlc19pbl9yZXM7CisKKworICAgIGlmICggbm9FcnIgIT0gRlRfRlNQYXRoTWFrZVJlcyggcGF0aG5hbWUsICZyZXNfcmVmICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworCisgICAgVXNlUmVzRmlsZSggcmVzX3JlZiApOworICAgIGlmICggUmVzRXJyb3IoKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICBudW1fZmFjZXNfaW5fcmVzID0gMDsKKyAgICBmb3IgKCByZXNfaW5kZXggPSAxOyA7ICsrcmVzX2luZGV4ICkKKyAgICB7CisgICAgICBzaG9ydCAgbnVtX2ZhY2VzX2luX2ZvbmQ7CisKKworICAgICAgZm9uZCA9IEdldDFJbmRSZXNvdXJjZSggVFRBR19GT05ELCByZXNfaW5kZXggKTsKKyAgICAgIGlmICggUmVzRXJyb3IoKSApCisgICAgICAgIGJyZWFrOworCisgICAgICBudW1fZmFjZXNfaW5fZm9uZCAgPSBjb3VudF9mYWNlcyggZm9uZCwgcGF0aG5hbWUgKTsKKyAgICAgIG51bV9mYWNlc19pbl9yZXMgICs9IG51bV9mYWNlc19pbl9mb25kOworCisgICAgICBpZiAoIDAgPD0gZmFjZV9pbmRleCAmJiBmYWNlX2luZGV4IDwgbnVtX2ZhY2VzX2luX2ZvbmQgJiYgZXJyb3IgKQorICAgICAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fRk9ORCggbGlicmFyeSwgZm9uZCwgZmFjZV9pbmRleCwgYWZhY2UgKTsKKworICAgICAgZmFjZV9pbmRleCAtPSBudW1fZmFjZXNfaW5fZm9uZDsKKyAgICB9CisKKyAgICBDbG9zZVJlc0ZpbGUoIHJlc19yZWYgKTsKKyAgICBpZiAoIEZUX0Vycl9PayA9PSBlcnJvciAmJiBOVUxMICE9IGFmYWNlICkKKyAgICAgICgqYWZhY2UpLT5udW1fZmFjZXMgPSBudW1fZmFjZXNfaW5fcmVzOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1hYy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlICAgICAgZm9uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgIGFmYWNlICkKKyAgeworICAgIHNob3J0ICAgICBoYXZlX3NmbnQsIGhhdmVfbHdmbiA9IDA7CisgICAgUmVzSUQgICAgIHNmbnRfaWQsIGZvbmRfaWQ7CisgICAgT1NUeXBlICAgIGZvbmRfdHlwZTsKKyAgICBTdHIyNTUgICAgZm9uZF9uYW1lOworICAgIFN0cjI1NSAgICBsd2ZuX2ZpbGVfbmFtZTsKKyAgICBVSW50OCAgICAgcGF0aF9sd2ZuW1BBVEhfTUFYXTsKKyAgICBPU0VyciAgICAgZXJyOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGFmYWNlJyBhbmQgYGxpYnJhcnknIGRlbGF5ZWQgdG8gKi8KKyAgICAvKiBgRlRfTmV3X0ZhY2VfRnJvbV9YWFgnICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgR2V0UmVzSW5mbyggZm9uZCwgJmZvbmRfaWQsICZmb25kX3R5cGUsIGZvbmRfbmFtZSApOworICAgIGlmICggUmVzRXJyb3IoKSAhPSBub0VyciB8fCBmb25kX3R5cGUgIT0gVFRBR19GT05EICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgSExvY2soIGZvbmQgKTsKKyAgICBwYXJzZV9mb25kKCAqZm9uZCwgJmhhdmVfc2ZudCwgJnNmbnRfaWQsIGx3Zm5fZmlsZV9uYW1lLCBmYWNlX2luZGV4ICk7CisgICAgSFVubG9jayggZm9uZCApOworCisgICAgaWYgKCBsd2ZuX2ZpbGVfbmFtZVswXSApCisgICAgeworICAgICAgUmVzRmlsZVJlZk51bSAgcmVzOworCisKKyAgICAgIHJlcyA9IEhvbWVSZXNGaWxlKCBmb25kICk7CisgICAgICBpZiAoIG5vRXJyICE9IFJlc0Vycm9yKCkgKQorICAgICAgICBnb3RvIGZvdW5kX25vX2x3Zm5fZmlsZTsKKworI2lmIEhBVkVfRlNSRUYKKworICAgICAgeworICAgICAgICBVSW50OCAgcGF0aF9mb25kW1BBVEhfTUFYXTsKKyAgICAgICAgRlNSZWYgIHJlZjsKKworCisgICAgICAgIGVyciA9IEZTR2V0Rm9ya0NCSW5mbyggcmVzLCBrRlNJbnZhbGlkVm9sdW1lUmVmTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsICZyZWYsIE5VTEwgKTsKKyAgICAgICAgaWYgKCBub0VyciAhPSBlcnIgKQorICAgICAgICAgIGdvdG8gZm91bmRfbm9fbHdmbl9maWxlOworCisgICAgICAgIGVyciA9IEZTUmVmTWFrZVBhdGgoICZyZWYsIHBhdGhfZm9uZCwgc2l6ZW9mICggcGF0aF9mb25kICkgKTsKKyAgICAgICAgaWYgKCBub0VyciAhPSBlcnIgKQorICAgICAgICAgIGdvdG8gZm91bmRfbm9fbHdmbl9maWxlOworCisgICAgICAgIGVycm9yID0gbG9va3VwX2x3Zm5fYnlfZm9uZCggcGF0aF9mb25kLCBsd2ZuX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2x3Zm4sIHNpemVvZiAoIHBhdGhfbHdmbiApICk7CisgICAgICAgIGlmICggRlRfRXJyX09rID09IGVycm9yICkKKyAgICAgICAgICBoYXZlX2x3Zm4gPSAxOworICAgICAgfQorCisjZWxpZiBIQVZFX0ZTU1BFQworCisgICAgICB7CisgICAgICAgIFVJbnQ4ICAgICBwYXRoX2ZvbmRbUEFUSF9NQVhdOworICAgICAgICBGQ0JQQlJlYyAgcGI7CisgICAgICAgIFN0cjI1NSAgICBmb25kX2ZpbGVfbmFtZTsKKyAgICAgICAgRlNTcGVjICAgIHNwZWM7CisKKworICAgICAgICBGVF9NRU1fU0VUKCAmc3BlYywgMCwgc2l6ZW9mICggRlNTcGVjICkgKTsKKyAgICAgICAgRlRfTUVNX1NFVCggJnBiLCAgIDAsIHNpemVvZiAoIEZDQlBCUmVjICkgKTsKKworICAgICAgICBwYi5pb05hbWVQdHIgPSBmb25kX2ZpbGVfbmFtZTsKKyAgICAgICAgcGIuaW9WUmVmTnVtID0gMDsKKyAgICAgICAgcGIuaW9SZWZOdW0gID0gcmVzOworICAgICAgICBwYi5pb0ZDQkluZHggPSAwOworCisgICAgICAgIGVyciA9IFBCR2V0RkNCSW5mb1N5bmMoICZwYiApOworICAgICAgICBpZiAoIG5vRXJyICE9IGVyciApCisgICAgICAgICAgZ290byBmb3VuZF9ub19sd2ZuX2ZpbGU7CisKKyAgICAgICAgZXJyID0gRlNNYWtlRlNTcGVjKCBwYi5pb0ZDQlZSZWZOdW0sIHBiLmlvRkNCUGFySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9uZF9maWxlX25hbWUsICZzcGVjICk7CisgICAgICAgIGlmICggbm9FcnIgIT0gZXJyICkKKyAgICAgICAgICBnb3RvIGZvdW5kX25vX2x3Zm5fZmlsZTsKKworICAgICAgICBlcnIgPSBGVF9GU3BNYWtlUGF0aCggJnNwZWMsIHBhdGhfZm9uZCwgc2l6ZW9mICggcGF0aF9mb25kICkgKTsKKyAgICAgICAgaWYgKCBub0VyciAhPSBlcnIgKQorICAgICAgICAgIGdvdG8gZm91bmRfbm9fbHdmbl9maWxlOworCisgICAgICAgIGVycm9yID0gbG9va3VwX2x3Zm5fYnlfZm9uZCggcGF0aF9mb25kLCBsd2ZuX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2x3Zm4sIHNpemVvZiAoIHBhdGhfbHdmbiApICk7CisgICAgICAgIGlmICggRlRfRXJyX09rID09IGVycm9yICkKKyAgICAgICAgICBoYXZlX2x3Zm4gPSAxOworICAgICAgfQorCisjZW5kaWYgLyogSEFWRV9GU1JFRiwgSEFWRV9GU1NQRUMgKi8KKworICAgIH0KKworICAgIGlmICggaGF2ZV9sd2ZuICYmICggIWhhdmVfc2ZudCB8fCBQUkVGRVJfTFdGTiApICkKKyAgICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9MV0ZOKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfbHdmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9FUlIoIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICBmb3VuZF9ub19sd2ZuX2ZpbGU6CisgICAgaWYgKCBoYXZlX3NmbnQgJiYgRlRfRXJyX09rICE9IGVycm9yICkKKyAgICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDb21tb24gZnVuY3Rpb24gdG8gbG9hZCBhIG5ldyBGVF9GYWNlIGZyb20gYSByZXNvdXJjZSBmaWxlLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVSW50OCogIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgICAgYWZhY2UgKQorICB7CisgICAgT1NUeXBlICAgIGZpbGVfdHlwZTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIC8qIExXRk4gaXMgYSAodmVyeSkgc3BlY2lmaWMgZmlsZSBmb3JtYXQsIGNoZWNrIGZvciBpdCBleHBsaWNpdGx5ICovCisgICAgZmlsZV90eXBlID0gZ2V0X2ZpbGVfdHlwZV9mcm9tX3BhdGgoIHBhdGhuYW1lICk7CisgICAgaWYgKCBmaWxlX3R5cGUgPT0gVFRBR19MV0ZOICkKKyAgICAgIHJldHVybiBGVF9OZXdfRmFjZV9Gcm9tX0xXRk4oIGxpYnJhcnksIHBhdGhuYW1lLCBmYWNlX2luZGV4LCBhZmFjZSApOworCisgICAgLyogT3RoZXJ3aXNlIHRoZSBmaWxlIHR5cGUgZG9lc24ndCBtYXR0ZXIgKHRoZXJlIGFyZSBtb3JlIHRoYW4gICovCisgICAgLyogYEZGSUwnIGFuZCBgdGZpbCcpLiAgSnVzdCB0cnkgb3BlbmluZyBpdCBhcyBhIGZvbnQgc3VpdGNhc2U7ICovCisgICAgLyogaWYgaXQgd29ya3MsIGZpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UoIGxpYnJhcnksIHBhdGhuYW1lLCBmYWNlX2luZGV4LCBhZmFjZSApOworICAgIGlmICggZXJyb3IgPT0gMCApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiBsZXQgaXQgZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBsb2FkZXIgKC50dGYsIC5vdGYsIGV0Yy4pOyAqLworICAgIC8qIHdlIHNpZ25hbCB0aGlzIGJ5IHJldHVybmluZyBubyBlcnJvciBhbmQgbm8gRlRfRmFjZSAgICAgICovCisgICAgKmFmYWNlID0gTlVMTDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTmV3X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBpcyB0aGUgTWFjLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEZUX05ld19GYWNlLiAgSW4gICAgICAgICovCisgIC8qICAgIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBGVF9OZXdfRmFjZSgpIGZ1bmN0aW9uYWxpdHksIGl0IGFsc28gICAgICAqLworICAvKiAgICBhY2NlcHRzIHBhdGhuYW1lcyB0byBNYWMgc3VpdGNhc2UgZmlsZXMuICBGb3IgZnVydGhlciAgICAgICAgICAgICAgKi8KKyAgLyogICAgZG9jdW1lbnRhdGlvbiBzZWUgdGhlIG9yaWdpbmFsIEZUX05ld19GYWNlKCkgaW4gZnJlZXR5cGUuaC4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgRlRfRmFjZSogICAgIGFmYWNlICkKKyAgeworICAgIEZUX09wZW5fQXJncyAgYXJnczsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworCisKKyAgICAvKiB0ZXN0IGZvciB2YWxpZCBgbGlicmFyeScgYW5kIGBhZmFjZScgZGVsYXllZCB0byBGVF9PcGVuX0ZhY2UoKSAqLworICAgIGlmICggIXBhdGhuYW1lICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgKmFmYWNlID0gTlVMTDsKKworICAgIC8qIHRyeSByZXNvdXJjZWZvcmsgYmFzZWQgZm9udDogTFdGTiwgRkZJTCAqLworICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggbGlicmFyeSwgKFVJbnQ4ICopcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LCBhZmFjZSApOworICAgIGlmICggZXJyb3IgIT0gMCB8fCAqYWZhY2UgIT0gTlVMTCApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiBsZXQgaXQgZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBsb2FkZXIgKC50dGYsIC5vdGYsIGV0Yy4pICovCisgICAgYXJncy5mbGFncyAgICA9IEZUX09QRU5fUEFUSE5BTUU7CisgICAgYXJncy5wYXRobmFtZSA9IChjaGFyKilwYXRobmFtZTsKKyAgICByZXR1cm4gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiBpcyBpZGVudGljYWwgdG8gRlRfTmV3X0ZhY2UgZXhjZXB0IGl0ICAgICAgICovCisgIC8qICAgIGFjY2VwdHMgYW4gRlNSZWYgaW5zdGVhZCBvZiBhIHBhdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgQ2FyYm9uIGRhdGEgdHlwZXMgKEZTUmVmKSAgICAgICAgICovCisgIC8qIGFyZSBub3QgY3Jvc3MtcGxhdGZvcm0sIGFuZCB0aHVzIG5vdCBzdWl0YWJsZSBmb3IgdGhlIGZyZWV0eXBlIEFQSS4gICAqLworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNSZWYqICByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCisgIHsKKworI2lmICFIQVZFX0ZTUkVGCisKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKyAgICBGVF9VTlVTRUQoIHJlZiApOworICAgIEZUX1VOVVNFRCggZmFjZV9pbmRleCApOworICAgIEZUX1VOVVNFRCggYWZhY2UgKTsKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisKKyNlbHNlCisKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIEZUX09wZW5fQXJncyAgYXJnczsKKyAgICBPU0VyciAgIGVycjsKKyAgICBVSW50OCAgIHBhdGhuYW1lW1BBVEhfTUFYXTsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGFuZCBgYWZhY2UnIGRlbGF5ZWQgdG8gYEZUX09wZW5fRmFjZScgKi8KKworICAgIGlmICggIXJlZiApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGVyciA9IEZTUmVmTWFrZVBhdGgoIHJlZiwgcGF0aG5hbWUsIHNpemVvZiAoIHBhdGhuYW1lICkgKTsKKyAgICBpZiAoIGVyciApCisgICAgICBlcnJvciA9IEZUX0VSUiggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggbGlicmFyeSwgcGF0aG5hbWUsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgaWYgKCBlcnJvciAhPSAwIHx8ICphZmFjZSAhPSBOVUxMICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGZhbGxiYWNrIHRvIGRhdGFmb3JrIGZvbnQgKi8KKyAgICBhcmdzLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICBhcmdzLnBhdGhuYW1lID0gKGNoYXIqKXBhdGhuYW1lOworICAgIHJldHVybiBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZhcmdzLCBmYWNlX2luZGV4LCBhZmFjZSApOworCisjZW5kaWYgLyogSEFWRV9GU1JFRiAqLworCisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjIGlzIGlkZW50aWNhbCB0byBGVF9OZXdfRmFjZSBleGNlcHQgaXQgICAgICAqLworICAvKiAgICBhY2NlcHRzIGFuIEZTU3BlYyBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIENhcmJvbiBkYXRhIHR5cGVzIChGU1NwZWMpICAgICAgICAqLworICAvKiBhcmUgbm90IGNyb3NzLXBsYXRmb3JtLCBhbmQgdGh1cyBub3Qgc3VpdGFibGUgZm9yIHRoZSBmcmVldHlwZSBBUEkuICAgKi8KKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZTU3BlYyogIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICAgYWZhY2UgKQorICB7CisKKyNpZiBIQVZFX0ZTUkVGCisKKyAgICBGU1JlZiAgcmVmOworCisKKyAgICBpZiAoICFzcGVjIHx8IEZTcE1ha2VGU1JlZiggc3BlYywgJnJlZiApICE9IG5vRXJyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGVsc2UKKyAgICAgIHJldHVybiBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmKCBsaWJyYXJ5LCAmcmVmLCBmYWNlX2luZGV4LCBhZmFjZSApOworCisjZWxpZiBIQVZFX0ZTU1BFQworCisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBGVF9PcGVuX0FyZ3MgIGFyZ3M7CisgICAgT1NFcnIgICAgICAgICBlcnI7CisgICAgVUludDggICAgICAgICBwYXRobmFtZVtQQVRIX01BWF07CisKKworICAgIGlmICggIXNwZWMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBlcnIgPSBGVF9GU3BNYWtlUGF0aCggc3BlYywgcGF0aG5hbWUsIHNpemVvZiAoIHBhdGhuYW1lICkgKTsKKyAgICBpZiAoIGVyciApCisgICAgICBlcnJvciA9IEZUX0VSUiggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggbGlicmFyeSwgcGF0aG5hbWUsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgaWYgKCBlcnJvciAhPSAwIHx8ICphZmFjZSAhPSBOVUxMICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGZhbGxiYWNrIHRvIGRhdGFmb3JrIGZvbnQgKi8KKyAgICBhcmdzLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICBhcmdzLnBhdGhuYW1lID0gKGNoYXIqKXBhdGhuYW1lOworICAgIHJldHVybiBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZhcmdzLCBmYWNlX2luZGV4LCBhZmFjZSApOworCisjZWxzZQorCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisgICAgRlRfVU5VU0VEKCBzcGVjICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisgICAgRlRfVU5VU0VEKCBhZmFjZSApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworI2VuZGlmIC8qIEhBVkVfRlNSRUYsIEhBVkVfRlNTUEVDICovCisKKyAgfQorCisjZW5kaWYgLyogRlRfTUFDSU5UT1NIICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL21vZHVsZXMubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL21vZHVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4YjBjMQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbW9kdWxlcy5tawpAQCAtMCwwICsxLDc5IEBACisjCisjIEZyZWVUeXBlIDIgbW9kdWxlcyBzdWItTWFrZWZpbGUKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgRE8gTk9UIElOVk9LRSBUSElTIE1BS0VGSUxFIERJUkVDVExZISAgSVQgSVMgTUVBTlQgVE8gQkUgSU5DTFVERUQgQlkKKyMgT1RIRVIgTUFLRUZJTEVTLgorCisKKyMgVGhpcyBmaWxlIGlzIGluIGNoYXJnZSBvZiBoYW5kbGluZyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbW9kdWxlcyBsaXN0CisjIGZpbGUuCisKKworIyBCdWlsZCB0aGUgbW9kdWxlcyBsaXN0LgorIworJChGVE1PRFVMRV9IKTogJChNT0RVTEVTX0NGRykKKwkkKEZUTU9EVUxFX0hfSU5JVCkKKwkkKEZUTU9EVUxFX0hfQ1JFQVRFKQorCSQoRlRNT0RVTEVfSF9ET05FKQorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoUExBVEZPUk0pLGRvcyB3aW5kb3dzIG9zMiksKQorICBPUEVOX01PRFVMRSAgIDo9IEBlY2hvJChzcGFjZSkKKyAgQ0xPU0VfTU9EVUxFICA6PSAgPj4gJChzdWJzdCAvLCQoU0VQKSwkKEZUTU9EVUxFX0gpKQorICBSRU1PVkVfTU9EVUxFIDo9IEAtJChERUxFVEUpICQoc3Vic3QgLywkKFNFUCksJChGVE1PRFVMRV9IKSkKK2Vsc2UKKyAgT1BFTl9NT0RVTEUgICA6PSBAZWNobyAiCisgIENMT1NFX01PRFVMRSAgOj0gIiA+PiAkKEZUTU9EVUxFX0gpCisgIFJFTU9WRV9NT0RVTEUgOj0gQC0kKERFTEVURSkgJChGVE1PRFVMRV9IKQorZW5kaWYKKworCitkZWZpbmUgRlRNT0RVTEVfSF9JTklUCiskKFJFTU9WRV9NT0RVTEUpCitALWVjaG8gR2VuZXJhdGluZyBtb2R1bGVzIGxpc3QgaW4gJChGVE1PRFVMRV9IKS4uLgorJChPUEVOX01PRFVMRSkvKiBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuICovJChDTE9TRV9NT0RVTEUpCitlbmRlZgorCisjIEl0IGlzIG5vIG1pc3Rha2UgdGhhdCB0aGUgZmluYWwgY2xvc2luZyBwYXJlbnRoZXNpcyBpcyBvbiB0aGUKKyMgbmV4dCBsaW5lIC0tIGl0IHByb2R1Y2VzIHByb3BlciBuZXdsaW5lcyBkdXJpbmcgdGhlIGV4cGFuc2lvbgorIyBvZiBgZm9yZWFjaCcuCisjCitkZWZpbmUgRlRNT0RVTEVfSF9DUkVBVEUKKyQoZm9yZWFjaCBDT01NQU5ELCQoRlRNT0RVTEVfSF9DT01NQU5EUyksJCgkKENPTU1BTkQpKQorKQorZW5kZWYKKworZGVmaW5lIEZUTU9EVUxFX0hfRE9ORQorJChPUEVOX01PRFVMRSkvKiBFT0YgKi8kKENMT1NFX01PRFVMRSkKK0BlY2hvIGRvbmUuCitlbmRlZgorCisKKyMgJChPUEVOX0RSSVZFUikgJiAkKENMT1NFX0RSSVZFUikgYXJlIHVzZWQgdG8gc3BlY2lmeSBhIGdpdmVuIGZvbnQgZHJpdmVyCisjIGluIHRoZSBgbW9kdWxlLm1rJyBydWxlcyBmaWxlLgorIworT1BFTl9EUklWRVIgIDo9ICQoT1BFTl9NT0RVTEUpRlRfVVNFX01PRFVMRSgKK0NMT1NFX0RSSVZFUiA6PSApJChDTE9TRV9NT0RVTEUpCisKK0VDSE9fRFJJVkVSICAgICAgOj0gQGVjaG8gIiogbW9kdWxlOiQoc3BhY2UpCitFQ0hPX0RSSVZFUl9ERVNDIDo9ICgKK0VDSE9fRFJJVkVSX0RPTkUgOj0gKSIKKworIyBFYWNoIGBtb2R1bGUubWsnIGluIHRoZSBgc3JjLyonIHN1YmRpcmVjdG9yaWVzIGFkZHMgYSB2YXJpYWJsZSB3aXRoCisjIGNvbW1hbmRzIHRvICQoRlRNT0RVTEVfSF9DT01NQU5EUykuICBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIFNSQ19ESVIgaGVyZS4KKyMKKy1pbmNsdWRlICQocGF0c3Vic3QgJSwkKFRPUF9ESVIpL3NyYy8lL21vZHVsZS5taywkKE1PRFVMRVMpKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL25ld2xpbmUgYi9mcmVldHlwZS0yLjYvYnVpbGRzL25ld2xpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvbmV3bGluZQpAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL2RldGVjdC5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL2RldGVjdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGU5MzI3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9vczIvZGV0ZWN0Lm1rCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGV0ZWN0IGFuIE9TLzIgaG9zdCBwbGF0Zm9ybS4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKy5QSE9OWTogc2V0dXAKKworCitpZmVxICgkKFBMQVRGT1JNKSxhbnNpKQorCisgIGlmZGVmIE9TMl9TSEVMTAorCisgICAgUExBVEZPUk0gOj0gb3MyCisKKyAgZW5kaWYgIyB0ZXN0IE9TMl9TSEVMTAorZW5kaWYKKworaWZlcSAoJChQTEFURk9STSksb3MyKQorCisgIENPUFkgICA6PSBjb3B5CisgIERFTEVURSA6PSBkZWwKKyAgQ0FUICAgIDo9IHR5cGUKKyAgU0VQICAgIDo9ICQoQkFDS1NMQVNIKQorCisgICMgZ2NjLWVteCBieSBkZWZhdWx0CisgIENPTkZJR19GSUxFIDo9IG9zMi1nY2MubWsKKworICAjIGFkZGl0aW9uYWxseSwgd2UgcHJvdmlkZSBob29rcyBmb3IgdmFyaW91cyBvdGhlciBjb21waWxlcnMKKyAgIworICBpZm5lcSAoJChmaW5kc3RyaW5nIHZpc3VhbGFnZSwkKE1BS0VDTURHT0FMUykpLCkgICAgICMgVmlzdWFsIEFnZSBDKysKKyAgICBDT05GSUdfRklMRSA6PSBvczItaWNjLm1rCisgICAgQ0MgICAgICAgICAgOj0gaWNjCisgICAgdmlzdWFsYWdlOiBzZXR1cAorICAgIC5QSE9OWTogdmlzdWFsYWdlCisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyB3YXRjb20sJChNQUtFQ01ER09BTFMpKSwpICAgICAgICAjIFdhdGNvbSBDL0MrKworICAgIENPTkZJR19GSUxFIDo9IG9zMi13YXQubWsKKyAgICBDQyAgICAgICAgICA6PSB3Y2MzODYKKyAgICB3YXRjb206IHNldHVwCisgICAgLlBIT05ZOiB3YXRjb20KKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIGJvcmxhbmRjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICMgQm9ybGFuZCBDKysgMzItYml0CisgICAgQ09ORklHX0ZJTEUgOj0gb3MyLWJjYy5taworICAgIENDICAgICAgICAgIDo9IGJjYzMyCisgICAgYm9ybGFuZGM6IHNldHVwCisgICAgLlBIT05ZOiBib3JsYW5kYworICBlbmRpZgorCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICAgIyBkZXZlbG9wbWVudCB0YXJnZXQKKyAgICBDT05GSUdfRklMRSA6PSBvczItZGV2Lm1rCisgICAgQ0MgICAgICAgICAgOj0gZ2NjCisgICAgZGV2ZWw6IHNldHVwCisgICAgLlBIT05ZOiBkZXZlbAorICBlbmRpZgorCisgIHNldHVwOiBkb3Nfc2V0dXAKKworZW5kaWYgICAjIHRlc3QgUExBVEZPUk0gb3MyCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL29zMi1kZWYubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL29zMi9vczItZGVmLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTAzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL29zMi9vczItZGVmLm1rCkBAIC0wLDAgKzEsNDQgQEAKKyMKKyMgRnJlZVR5cGUgMiBPUy8yIHNwZWNpZmljIGRlZmluaXRpb25zCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitERUxFVEUgICAgOj0gZGVsCitDQVQgICAgICAgOj0gdHlwZQorU0VQICAgICAgIDo9ICQoc3RyaXAgXCApCitCVUlMRF9ESVIgOj0gJChUT1BfRElSKS9idWlsZHMvb3MyCitQTEFURk9STSAgOj0gb3MyCisKKyMgVGhlIGV4ZWN1dGFibGUgZmlsZSBleHRlbnNpb24gKGZvciB0b29scyksICp3aXRoKiBsZWFkaW5nIGRvdC4KKyMKK0UgOj0gLmV4ZQorCisjIFRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxpYnJhcnkgZmlsZXMgYXJlIHBsYWNlZC4KKyMKKyMgQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgc2FtZSBhcyAkKE9CSl9ESVIpOyBob3dldmVyLCB0aGlzIGNhbiBiZSBjaGFuZ2VkCisjIHRvIHN1aXQgcGFydGljdWxhciBuZWVkcy4KKyMKK0xJQl9ESVIgOj0gJChPQkpfRElSKQorCisjIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5IGZpbGUuICBOb3RlIHRoYXQgdGhlIERPUy1zcGVjaWZpYyBNYWtlZmlsZQorIyB1c2VzIGEgc2hvcnRlciAoOC4zKSBuYW1lLgorIworTElCUkFSWSA6PSAkKFBST0pFQ1QpCisKKworIyBUaGUgTk9fT1VUUFVUIG1hY3JvIGlzIHVzZWQgdG8gaWdub3JlIHRoZSBvdXRwdXQgb2YgY29tbWFuZHMuCisjCitOT19PVVRQVVQgPSAyPiBudWwKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9vczIvb3MyLWRldi5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL29zMi1kZXYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjZjU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL29zMi1kZXYubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIE9TLzIgKyBHQ0MKKyMKKyMgICBEZXZlbG9wbWVudCB2ZXJzaW9uIHdpdGhvdXQgb3B0aW1pemF0aW9ucy4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0RFVkVMX0RJUiA6PSAkKFRPUF9ESVIpL2RldmVsCisKKyMgaW5jbHVkZSBPUy8yLXNwZWNpZmljIGRlZmluaXRpb25zCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL29zMi9vczItZGVmLm1rCisKKyMgaW5jbHVkZSBnY2Mtc3BlY2lmaWMgZGVmaW5pdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5taworCisjIGluY2x1ZGUgbGlua2luZyBpbnN0cnVjdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9vczIvb3MyLWdjYy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL29zMi1nY2MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MGEzNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvb3MyL29zMi1nY2MubWsKQEAgLTAsMCArMSwyNiBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIHRoZSBPUy8yICsgZ2NjCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIGluY2x1ZGUgT1MvMi1zcGVjaWZpYyBkZWZpbml0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9vczIvb3MyLWRlZi5taworCisjIGluY2x1ZGUgZ2NjLXNwZWNpZmljIGRlZmluaXRpb25zCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2NvbXBpbGVyL2djYy5taworCisjIGluY2x1ZGUgbGlua2luZyBpbnN0cnVjdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy9zeW1iaWFuL2JsZC5pbmYgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3N5bWJpYW4vYmxkLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYzN2YyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9zeW1iaWFuL2JsZC5pbmYKQEAgLTAsMCArMSw2NiBAQAorLy8KKy8vIEZyZWVUeXBlIDIgcHJvamVjdCBmb3IgdGhlIHN5bWJpYW4gcGxhdGZvcm0KKy8vCisKKy8vIENvcHlyaWdodCAyMDA4LTIwMTUgYnkKKy8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorLy8gYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorLy8gTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKy8vIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisvLyBmdWxseS4KKworUFJKX1BMQVRGT1JNUworREVGQVVMVAorCitQUkpfTU1QRklMRVMKK2ZyZWV0eXBlLm1tcAorCitQUkpfRVhQT1JUUworLi4vLi4vaW5jbHVkZS9mdDJidWlsZC5oCisuLi8uLi9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oCWNvbmZpZy9mdGNvbmZpZy5oCisuLi8uLi9pbmNsdWRlL2NvbmZpZy9mdGhlYWRlci5oCWNvbmZpZy9mdGhlYWRlci5oCisuLi8uLi9pbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oCWNvbmZpZy9mdG1vZHVsZS5oCisuLi8uLi9pbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oCWNvbmZpZy9mdG9wdGlvbi5oCisuLi8uLi9pbmNsdWRlL2NvbmZpZy9mdHN0ZGxpYi5oCWNvbmZpZy9mdHN0ZGxpYi5oCisuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlLmgJZnJlZXR5cGUuaAorLi4vLi4vaW5jbHVkZS9mdGJib3guaAkJZnRiYm94LmgKKy4uLy4uL2luY2x1ZGUvZnRiZGYuaAkJZnRiZGYuaAorLi4vLi4vaW5jbHVkZS9mdGJpdG1hcC5oCWZ0Yml0bWFwLmgKKy4uLy4uL2luY2x1ZGUvZnRjYWNoZS5oCQlmdGNhY2hlLmgKKy4uLy4uL2luY2x1ZGUvZnRjaWQuaAkJZnRjaWQuaAorLi4vLi4vaW5jbHVkZS9mdGVycmRlZi5oCWZ0ZXJyZGVmLmgKKy4uLy4uL2luY2x1ZGUvZnRlcnJvcnMuaAlmdGVycm9ycy5oCisuLi8uLi9pbmNsdWRlL2Z0Zm50Zm10LmgJZnRmbnRmbXQuaAorLi4vLi4vaW5jbHVkZS9mdGdhc3AuaAkJZnRnYXNwLmgKKy4uLy4uL2luY2x1ZGUvZnRnbHlwaC5oCQlmdGdseXBoLmgKKy4uLy4uL2luY2x1ZGUvZnRneHZhbC5oCQlmdGd4dmFsLmgKKy4uLy4uL2luY2x1ZGUvZnRnemlwLmgJCWZ0Z3ppcC5oCisuLi8uLi9pbmNsdWRlL2Z0YnppcDIuaAkJZnRiemlwMi5oCisuLi8uLi9pbmNsdWRlL2Z0aW1hZ2UuaAkJZnRpbWFnZS5oCisuLi8uLi9pbmNsdWRlL2Z0aW5jcmVtLmgJZnRpbmNyZW0uaAorLi4vLi4vaW5jbHVkZS9mdGxjZGZpbC5oCWZ0bGNkZmlsLmgKKy4uLy4uL2luY2x1ZGUvZnRsaXN0LmgJCWZ0bGlzdC5oCisuLi8uLi9pbmNsdWRlL2Z0bHp3LmgJCWZ0bHp3LmgKKy4uLy4uL2luY2x1ZGUvZnRtYWMuaAkJZnRtYWMuaAorLi4vLi4vaW5jbHVkZS9mdG1tLmgJCWZ0bW0uaAorLi4vLi4vaW5jbHVkZS9mdG1vZGFwaS5oCWZ0bW9kYXBpLmgKKy4uLy4uL2luY2x1ZGUvZnRtb2RlcnIuaAlmdG1vZGVyci5oCisuLi8uLi9pbmNsdWRlL2Z0b3R2YWwuaAkJZnRvdHZhbC5oCisuLi8uLi9pbmNsdWRlL2Z0b3V0bG4uaAkJZnRvdXRsbi5oCisuLi8uLi9pbmNsdWRlL2Z0cGZyLmgJCWZ0cGZyLmgKKy4uLy4uL2luY2x1ZGUvZnRyZW5kZXIuaAlmdHJlbmRlci5oCisuLi8uLi9pbmNsdWRlL2Z0c2l6ZXMuaAkJZnRzaXplcy5oCisuLi8uLi9pbmNsdWRlL2Z0c25hbWVzLmgJZnRzbmFtZXMuaAorLi4vLi4vaW5jbHVkZS9mdHN0cm9rZS5oCWZ0c3Ryb2tlLmgKKy4uLy4uL2luY2x1ZGUvZnRzeW50aC5oCQlmdHN5bnRoLmgKKy4uLy4uL2luY2x1ZGUvZnRzeXN0ZW0uaAlmdHN5c3RlbS5oCisuLi8uLi9pbmNsdWRlL2Z0dHJpZ29uLmgJZnR0cmlnb24uaAorLi4vLi4vaW5jbHVkZS9mdHR5cGVzLmgJCWZ0dHlwZXMuaAorLi4vLi4vaW5jbHVkZS9mdHdpbmZudC5oCWZ0d2luZm50LmgKKy4uLy4uL2luY2x1ZGUvdDF0YWJsZXMuaAl0MXRhYmxlcy5oCisuLi8uLi9pbmNsdWRlL3R0bmFtZWlkLmgJdHRuYW1laWQuaAorLi4vLi4vaW5jbHVkZS90dHRhYmxlcy5oCXR0dGFibGVzLmgKKy4uLy4uL2luY2x1ZGUvdHR0YWdzLmgJCXR0dGFncy5oCisuLi8uLi9pbmNsdWRlL3R0dW5wYXQuaAkJdHR1bnBhdC5oCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY5MWYwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcApAQCAtMCwwICsxLDE0OCBAQAorLy8KKy8vIEZyZWVUeXBlIDIgbWFrZWZpbGUgZm9yIHRoZSBzeW1iaWFuIHBsYXRmb3JtCisvLworCisvLyBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5CisvLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKy8vIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKy8vIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisvLyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorLy8gZnVsbHkuCisKK3RhcmdldCAJCQlmcmVldHlwZS5saWIKK3RhcmdldHR5cGUgCQlsaWIKKworbWFjcm8gTkRFQlVHCittYWNybyBGVDJfQlVJTERfTElCUkFSWQorCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xhdXRvZml0CisKK3NvdXJjZSBhdXRvZml0LmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNcYmFzZQorCitzb3VyY2UgZnRiYXNlLmMKK3NvdXJjZSBmdGJib3guYworc291cmNlIGZ0YmRmLmMKK3NvdXJjZSBmdGJpdG1hcC5jCitzb3VyY2UgZnRjaWQuYworc291cmNlIGZ0Zm50Zm10LmMKK3NvdXJjZSBmdGZzdHlwZS5jCitzb3VyY2UgZnRnYXNwLmMKK3NvdXJjZSBmdGdseXBoLmMKK3NvdXJjZSBmdGd4dmFsLmMKK3NvdXJjZSBmdGluaXQuYworc291cmNlIGZ0bGNkZmlsLmMKK3NvdXJjZSBmdG1tLmMKK3NvdXJjZSBmdG90dmFsLmMKK3NvdXJjZSBmdHBhdGVudC5jCitzb3VyY2UgZnRwZnIuYworc291cmNlIGZ0c3Ryb2tlLmMKK3NvdXJjZSBmdHN5bnRoLmMKK3NvdXJjZSBmdHN5c3RlbS5jCitzb3VyY2UgZnR0eXBlMS5jCitzb3VyY2UgZnR3aW5mbnQuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xiZGYKKworc291cmNlIGJkZi5jCisKK3NvdXJjZXBhdGggLi5cLi5cc3JjXGNhY2hlCisKK3NvdXJjZSBmdGNhY2hlLmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNcY2ZmCisKK3NvdXJjZSBjZmYuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xjaWQKKworc291cmNlIHR5cGUxY2lkLmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNcZ3ppcAorCitzb3VyY2UgZnRnemlwLmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNcYnppcDIKKworc291cmNlIGZ0YnppcDIuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xsencKKworc291cmNlIGZ0bHp3LmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNccGNmCisKK3NvdXJjZSBwY2YuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xwZnIKKworc291cmNlIHBmci5jCisKK3NvdXJjZXBhdGggLi5cLi5cc3JjXHBzYXV4CisKK3NvdXJjZSBwc2F1eC5jCisKK3NvdXJjZXBhdGggLi5cLi5cc3JjXHBzaGludGVyCisKK3NvdXJjZSBwc2hpbnRlci5jCisKK3NvdXJjZXBhdGggLi5cLi5cc3JjXHBzbmFtZXMKKworc291cmNlIHBzbW9kdWxlLmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNccmFzdGVyCisKK3NvdXJjZSByYXN0ZXIuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1xzZm50CisKK3NvdXJjZSBzZm50LmMKKworc291cmNlcGF0aCAuLlwuLlxzcmNcc21vb3RoCisKK3NvdXJjZSBzbW9vdGguYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1x0cnVldHlwZQorCitzb3VyY2UgdHJ1ZXR5cGUuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1x0eXBlMQorCitzb3VyY2UgdHlwZTEuYworCitzb3VyY2VwYXRoIC4uXC4uXHNyY1x0eXBlNDIKKworc291cmNlIHR5cGU0Mi5jCisKK3NvdXJjZXBhdGggLi5cLi5cc3JjXHdpbmZvbnRzCisKK3NvdXJjZSB3aW5mbnQuYworCisKK3N5c3RlbWluY2x1ZGUJCS4uXC4uXGluY2x1ZGUKK3N5c3RlbWluY2x1ZGUJCVxlcG9jMzJcaW5jbHVkZVxzdGRhcGlzCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGF1dG9maXQKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcYmRmCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGNhY2hlCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGNmZgordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xjaWQKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcZ3h2YWxpZAordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xnemlwCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGJ6aXAyCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGx6dwordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xvdHZhbGlkCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXHBjZgordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xwZnIKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNccHNhdXgKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNccHNoaW50ZXIKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNccHNuYW1lcwordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xyYXN0ZXIKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcc2ZudAordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xzbW9vdGgKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcdHJ1ZXR5cGUKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcdHlwZTEKK3VzZXJpbmNsdWRlCQkuLlwuLlxzcmNcdHlwZTQyCit1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXHdpbmZvbnRzCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3RvcGxldmVsLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy90b3BsZXZlbC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmUzNjRkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy90b3BsZXZlbC5tawpAQCAtMCwwICsxLDI3NiBAQAorIworIyBGcmVlVHlwZSBidWlsZCBzeXN0ZW0gLS0gdG9wLWxldmVsIHN1Yi1NYWtlZmlsZQorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBUaGlzIGZpbGUgaXMgZGVzaWduZWQgZm9yIEdOVSBNYWtlLCBkbyBub3QgdXNlIGl0IHdpdGggYW5vdGhlciBNYWtlIHRvb2whCisjCisjIEl0IHdvcmtzIGFzIGZvbGxvd3M6CisjCisjIC0gV2hlbiBpbnZva2VkIGZvciB0aGUgZmlyc3QgdGltZSwgdGhpcyBNYWtlZmlsZSBpbmNsdWRlcyB0aGUgcnVsZXMgZm91bmQKKyMgICBpbiBgUFJPSkVDVC9idWlsZHMvZGV0ZWN0Lm1rJy4gIFRoZXkgYXJlIGluIGNoYXJnZSBvZiBkZXRlY3RpbmcgdGhlCisjICAgY3VycmVudCBwbGF0Zm9ybS4KKyMKKyMgICBBIHN1bW1hcnkgb2YgdGhlIGRldGVjdGlvbiBpcyBkaXNwbGF5ZWQsIGFuZCB0aGUgZmlsZSBgY29uZmlnLm1rJyBpcworIyAgIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorIworIyAtIFdoZW4gaW52b2tlZCBsYXRlciwgdGhpcyBNYWtlZmlsZSBpbmNsdWRlcyB0aGUgcnVsZXMgZm91bmQgaW4KKyMgICBgY29uZmlnLm1rJy4gIFRoaXMgc3ViLU1ha2VmaWxlIGRlZmluZXMgc29tZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzCisjICAgKGxpa2UgY29tcGlsZXIsIGNvbXBpbGF0aW9uIGZsYWdzLCBvYmplY3Qgc3VmZml4LCBldGMuKSwgdGhlbiBpbmNsdWRlcworIyAgIHRoZSBydWxlcyBmb3VuZCBpbiBgUFJPSkVDVC9idWlsZHMvUFJPSkVDVC5taycsIHVzZWQgdG8gYnVpbGQgdGhlCisjICAgbGlicmFyeS4KKyMKKyMgU2VlIHRoZSBjb21tZW50cyBpbiBgYnVpbGRzL2RldGVjdC5taycgYW5kIGBidWlsZHMvUFJPSkVDVC5taycgZm9yIG1vcmUKKyMgZGV0YWlscyBvbiBob3N0IHBsYXRmb3JtIGRldGVjdGlvbiBhbmQgbGlicmFyeSBidWlsZHMuCisKKworIyBGaXJzdCBvZiBhbGwsIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBgJCh2YWx1ZSAuLi4pJy4gIFdlIGRvIHRoaXMgYnkgdGVzdGluZworIyBmb3IgYCQoZXZhbCAuLi4pJyB3aGljaCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHRoZSBzYW1lIEdOVSBtYWtlIHZlcnNpb24uCisKK2V2YWxfYXZhaWxhYmxlIDo9CiskKGV2YWwgZXZhbF9hdmFpbGFibGUgOj0gVCkKK2lmbmVxICgkKGV2YWxfYXZhaWxhYmxlKSxUKQorICAkKGVycm9yIEZyZWVUeXBlJ3MgYnVpbGQgc3lzdGVtIG5lZWRzIGEgTWFrZSBwcm9ncmFtIHdoaWNoIHN1cHBvcnRzICQkKHZhbHVlKSkKK2VuZGlmCisKKworLlBIT05ZOiBhbGwgZGlzdCBkaXN0Y2xlYW4gbW9kdWxlcyBzZXR1cAorCisKKyMgVGhlIGBzcGFjZScgdmFyaWFibGUgaXMgdXNlZCB0byBhdm9pZCB0cmFpbGluZyBzcGFjZXMgaW4gZGVmaW5pbmcgdGhlCisjIGBUJyB2YXJpYWJsZSBsYXRlci4KKyMKK2VtcHR5IDo9CitzcGFjZSA6PSAkKGVtcHR5KSAkKGVtcHR5KQorCisKKyMgVGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlLCBkZWZpbmluZyB0aGUgYFhYWF9NT0RVTEVTJyB2YXJpYWJsZXMuICBXZQorIyBwcmVmZXIgYSBgbW9kdWxlcy5jZmcnIGZpbGUgaW4gT0JKX0RJUiBvdmVyIFRPUF9ESVIuCisjCitpZm5kZWYgTU9EVUxFU19DRkcKKyAgTU9EVUxFU19DRkcgOj0gJChUT1BfRElSKS9tb2R1bGVzLmNmZworICBpZm5lcSAoJCh3aWxkY2FyZCAkKE9CSl9ESVIpL21vZHVsZXMuY2ZnKSwpCisgICAgTU9EVUxFU19DRkcgOj0gJChPQkpfRElSKS9tb2R1bGVzLmNmZworICBlbmRpZgorZW5kaWYKKworCisjIEZUTU9EVUxFX0gsIGFzIGl0cyBuYW1lIHN1Z2dlc3RzLCBpbmRpY2F0ZXMgd2hlcmUgdGhlIEZyZWVUeXBlIG1vZHVsZQorIyBjbGFzcyBmaWxlIHJlc2lkZXMuCisjCitGVE1PRFVMRV9IID89ICQoT0JKX0RJUikvZnRtb2R1bGUuaAorCisKK2luY2x1ZGUgJChNT0RVTEVTX0NGRykKKworCisjIFRoZSBsaXN0IG9mIG1vZHVsZXMgd2UgYXJlIHVzaW5nLgorIworTU9EVUxFUyA6PSAkKEZPTlRfTU9EVUxFUykgICAgXAorICAgICAgICAgICAkKEhJTlRJTkdfTU9EVUxFUykgXAorICAgICAgICAgICAkKFJBU1RFUl9NT0RVTEVTKSAgXAorICAgICAgICAgICAkKEFVWF9NT0RVTEVTKQorCisKK0NPTkZJR19NSyA/PSBjb25maWcubWsKKworIyBJZiBubyBjb25maWd1cmF0aW9uIHN1Yi1tYWtlZmlsZSBpcyBwcmVzZW50LCBvciBpZiBgc2V0dXAnIGlzIHRoZSB0YXJnZXQKKyMgdG8gYmUgYnVpbHQsIHJ1biB0aGUgYXV0by1kZXRlY3Rpb24gcnVsZXMgdG8gZmlndXJlIG91dCB3aGljaAorIyBjb25maWd1cmF0aW9uIHJ1bGVzIGZpbGUgdG8gdXNlLgorIworIyBOb3RlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBwdXQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBpcworIyBub3QgbmVjZXNzYXJpbHkgJChUT1BfRElSKS4KKworIyBJZiBgY29uZmlnLm1rJyBpcyBub3QgcHJlc2VudCwgc2V0IGBjaGVja19wbGF0Zm9ybScuCisjCitpZmVxICgkKHdpbGRjYXJkICQoQ09ORklHX01LKSksKQorICBjaGVja19wbGF0Zm9ybSA6PSAxCitlbmRpZgorCisjIElmIGBzZXR1cCcgaXMgb25lIG9mIHRoZSB0YXJnZXRzIHJlcXVlc3RlZCwgc2V0IGBjaGVja19wbGF0Zm9ybScuCisjCitpZm5lcSAoJChmaW5kc3RyaW5nIHNldHVwLCQoTUFLRUNNREdPQUxTKSksKQorICBjaGVja19wbGF0Zm9ybSA6PSAxCitlbmRpZgorCisjIEluY2x1ZGUgdGhlIGF1dG9tYXRpYyBob3N0IHBsYXRmb3JtIGRldGVjdGlvbiBydWxlcyB3aGVuIHdlIG5lZWQgdG8KKyMgY2hlY2sgdGhlIHBsYXRmb3JtLgorIworaWZkZWYgY2hlY2tfcGxhdGZvcm0KKworICBhbGwgbW9kdWxlczogc2V0dXAKKworICBpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2RldGVjdC5taworCisgICMgVGhpcyBydWxlIG1ha2VzIHNlbnNlIGZvciBVbml4IG9ubHkgdG8gcmVtb3ZlIGZpbGVzIGNyZWF0ZWQgYnkgYSBydW4gb2YKKyAgIyB0aGUgY29uZmlndXJlIHNjcmlwdCB3aGljaCBoYXNuJ3QgYmVlbiBzdWNjZXNzZnVsIChzbyB0aGF0IG5vCisgICMgYGNvbmZpZy5taycgaGFzIGJlZW4gY3JlYXRlZCkuICBJdCB1c2VzIHRoZSBidWlsdC1pbiAkKFJNKSBjb21tYW5kIG9mCisgICMgR05VIG1ha2UuICBTaW1pbGFybHksIGBudWwnIGlzIGNyZWF0ZWQgaWYgZS5nLiBgbWFrZSBzZXR1cCB3aW5kb3dzJyBoYXMKKyAgIyBiZWVuIGVycm9uZW91c2x5IHVzZWQuCisgICMKKyAgIyBOb3RlOiBUaGlzIHRlc3QgaXMgZHVwbGljYXRlZCBpbiBgYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rJy4KKyAgIworICBpc191bml4IDo9ICQoc3RyaXAgJCh3aWxkY2FyZCAvc2Jpbi9pbml0KSBcCisgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkIC91c3Ivc2Jpbi9pbml0KSBcCisgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkIC9kZXYvbnVsbCkgXAorICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAvaHVyZC9hdXRoKSkKKyAgaWZuZXEgKCQoaXNfdW5peCksKQorCisgICAgZGlzdGNsZWFuOgorCSAgJChSTSkgYnVpbGRzL3VuaXgvY29uZmlnLmNhY2hlCisJICAkKFJNKSBidWlsZHMvdW5peC9jb25maWcubG9nCisJICAkKFJNKSBidWlsZHMvdW5peC9jb25maWcuc3RhdHVzCisJICAkKFJNKSBidWlsZHMvdW5peC91bml4LWRlZi5taworCSAgJChSTSkgYnVpbGRzL3VuaXgvdW5peC1jYy5taworCSAgJChSTSkgYnVpbGRzL3VuaXgvZnJlZXR5cGUyLnBjCisJICAkKFJNKSBudWwKKworICBlbmRpZiAjIHRlc3QgaXNfdW5peAorCisgICMgSU1QT1JUQU5UOgorICAjCisgICMgYHNldHVwJyBtdXN0IGJlIGRlZmluZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm0gZGV0ZWN0aW9uIHJ1bGVzIHRvIGNyZWF0ZQorICAjIHRoZSBgY29uZmlnLm1rJyBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworZWxzZQorCisgICMgQSBjb25maWd1cmF0aW9uIHN1Yi1NYWtlZmlsZSBpcyBwcmVzZW50IC0tIHNpbXBseSBydW4gaXQuCisgICMKKyAgYWxsOiBzaW5nbGUKKworICBCVUlMRF9QUk9KRUNUIDo9IHllcworICBpbmNsdWRlICQoQ09ORklHX01LKQorCitlbmRpZiAjIHRlc3QgY2hlY2tfcGxhdGZvcm0KKworCisjIFdlIGFsd2F5cyBuZWVkIHRoZSBsaXN0IG9mIG1vZHVsZXMgaW4gZnRtb2R1bGUuaC4KKyMKK2FsbCBzZXR1cDogJChGVE1PRFVMRV9IKQorCisKKyMgVGhlIGBtb2R1bGVzJyB0YXJnZXQgdW5jb25kaXRpb25hbGx5IHJlYnVpbGRzIHRoZSBtb2R1bGUgbGlzdC4KKyMKK21vZHVsZXM6CisJJChGVE1PRFVMRV9IX0lOSVQpCisJJChGVE1PRFVMRV9IX0NSRUFURSkKKwkkKEZUTU9EVUxFX0hfRE9ORSkKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9tb2R1bGVzLm1rCisKKworIyBnZXQgRnJlZVR5cGUgdmVyc2lvbiBzdHJpbmcsIHVzaW5nIGEKKyMgcG9vciBtYW4ncyBgc2VkJyBlbXVsYXRpb24gd2l0aCBtYWtlJ3MgYnVpbHQtaW4gc3RyaW5nIGZ1bmN0aW9ucworIword29yayA6PSAkKHN0cmlwICQoc2hlbGwgJChDQVQpICQoVE9QX0RJUikvaW5jbHVkZS9mcmVldHlwZS5oKSkKK3dvcmsgOj0gJChzdWJzdCB8LHgsJCh3b3JrKSkKK3dvcmsgOj0gJChzdWJzdCAkKHNwYWNlKSx8LCQod29yaykpCit3b3JrIDo9ICQoc3Vic3QgXCNkZWZpbmV8RlJFRVRZUEVfTUFKT1J8LCQoc3BhY2UpLCQod29yaykpCit3b3JrIDo9ICQod29yZCAyLCQod29yaykpCittYWpvciA6PSAkKHN1YnN0IHwsJChzcGFjZSksJCh3b3JrKSkKK21ham9yIDo9ICQoZmlyc3R3b3JkICQobWFqb3IpKQorCit3b3JrIDo9ICQoc3Vic3QgXCNkZWZpbmV8RlJFRVRZUEVfTUlOT1J8LCQoc3BhY2UpLCQod29yaykpCit3b3JrIDo9ICQod29yZCAyLCQod29yaykpCittaW5vciA6PSAkKHN1YnN0IHwsJChzcGFjZSksJCh3b3JrKSkKK21pbm9yIDo9ICQoZmlyc3R3b3JkICQobWlub3IpKQorCit3b3JrIDo9ICQoc3Vic3QgXCNkZWZpbmV8RlJFRVRZUEVfUEFUQ0h8LCQoc3BhY2UpLCQod29yaykpCit3b3JrIDo9ICQod29yZCAyLCQod29yaykpCitwYXRjaCA6PSAkKHN1YnN0IHwsJChzcGFjZSksJCh3b3JrKSkKK3BhdGNoIDo9ICQoZmlyc3R3b3JkICQocGF0Y2gpKQorCitpZm5lcSAoJChmaW5kc3RyaW5nIHgweCx4JChwYXRjaCl4KSwpCisgIHZlcnNpb24gOj0gJChtYWpvcikuJChtaW5vcikKKyAgd2ludmVyc2lvbiA6PSAkKG1ham9yKSQobWlub3IpCitlbHNlCisgIHZlcnNpb24gOj0gJChtYWpvcikuJChtaW5vcikuJChwYXRjaCkKKyAgd2ludmVyc2lvbiA6PSAkKG1ham9yKSQobWlub3IpJChwYXRjaCkKK2VuZGlmCisKKworIyBUaGlzIHRhcmdldCBidWlsZHMgdGhlIHRhcmJhbGxzLgorIworIyBOb3QgdG8gYmUgcnVuIGJ5IGEgbm9ybWFsIHVzZXIgLS0gdGhlcmUgYXJlIG5vIGF0dGVtcHRzIHRvIG1ha2UgaXQKKyMgZ2VuZXJpYy4KKworZGlzdDoKKwktcm0gLXJmIHRtcAorCXJtIC1mIGZyZWV0eXBlLSQodmVyc2lvbikudGFyLmd6CisJcm0gLWYgZnJlZXR5cGUtJCh2ZXJzaW9uKS50YXIuYnoyCisJcm0gLWYgZnQkKHdpbnZlcnNpb24pLnppcAorCisJZm9yIGQgaW4gYGZpbmQgLiAtd2hvbGVuYW1lICcqLy5naXQnIC1wcnVuZSBcCisJICAgICAgICAgICAgICAgICAtbyAtdHlwZSBmIFwKKwkgICAgICAgICAgICAgICAgIC1vIC1wcmludGAgOyBkbyBcCisJICBta2RpciAtcCB0bXAvJCRkIDsgXAorCWRvbmUgOworCisJY3VycmRpcj1gcHdkYCA7IFwKKwlmb3IgZiBpbiBgZmluZCAuIC13aG9sZW5hbWUgJyovLmdpdCcgLXBydW5lIFwKKwkgICAgICAgICAgICAgICAgIC1vIC1uYW1lIC5naXRpZ25vcmUgXAorCSAgICAgICAgICAgICAgICAgLW8gLW5hbWUgLm1haWxtYXAgXAorCSAgICAgICAgICAgICAgICAgLW8gLXR5cGUgZCBcCisJICAgICAgICAgICAgICAgICAtbyAtcHJpbnRgIDsgZG8gXAorCSAgbG4gLXMgJCRjdXJyZGlyLyQkZiB0bXAvJCRmIDsgXAorCWRvbmUKKworCUAjIFByZXZlbnQgZ2VuZXJhdGlvbiBvZiAucHljIGZpbGVzLiAgUHl0aG9uIGZvbGxvd3MgKHNvZnQpIGxpbmtzIGlmCisJQCMgdGhlIGxpbmsncyBkaXJlY3RvcnkgaXMgd3JpdGUgcHJvdGVjdGVkLCBzbyB3ZSBoYXZlIHRlbXBvcmFyaWx5CisJQCMgZGlzYWJsZSB3cml0ZSBhY2Nlc3MgaGVyZSB0b28uCisJY2htb2QgLXcgc3JjL3Rvb2xzL2RvY21ha2VyCisKKwljZCB0bXAgOyBcCisJJChNQUtFKSBkZXZlbCA7IFwKKwkkKE1BS0UpIGRvLWRpc3QKKworCWNobW9kICt3IHNyYy90b29scy9kb2NtYWtlcgorCisJbXYgdG1wIGZyZWV0eXBlLSQodmVyc2lvbikKKworCXRhciAtSCB1c3RhciAtY2hmIC0gZnJlZXR5cGUtJCh2ZXJzaW9uKSBcCisJfCBnemlwIC05IC1jID4gZnJlZXR5cGUtJCh2ZXJzaW9uKS50YXIuZ3oKKwl0YXIgLUggdXN0YXIgLWNoZiAtIGZyZWV0eXBlLSQodmVyc2lvbikgXAorCXwgYnppcDIgLWMgPiBmcmVldHlwZS0kKHZlcnNpb24pLnRhci5iejIKKworCUAjIFVzZSBDUi9MRiBmb3IgemlwIGZpbGVzLgorCXppcCAtbHI5IGZ0JCh3aW52ZXJzaW9uKS56aXAgZnJlZXR5cGUtJCh2ZXJzaW9uKQorCisJcm0gLWZyIGZyZWV0eXBlLSQodmVyc2lvbikKKworCisjIFRoZSBsb2NhdGlvbnMgb2YgdGhlIGxhdGVzdCBgY29uZmlnLmd1ZXNzJyBhbmQgYGNvbmZpZy5zdWInIHZlcnNpb25zIChmcm9tCisjIEdOVSBgY29uZmlnJyBnaXQgcmVwb3NpdG9yeSksIHJlbGF0aXZlIHRvIHRoZSBgdG1wJyBkaXJlY3RvcnkgdXNlZCBkdXJpbmcKKyMgYG1ha2UgZGlzdCcuCisjCitDT05GSUdfR1VFU1MgPSB+L2dpdC9jb25maWcvY29uZmlnLmd1ZXNzCitDT05GSUdfU1VCICAgPSB+L2dpdC9jb25maWcvY29uZmlnLnN1YgorCisKKyMgRG9uJ3Qgc2F5IGBtYWtlIGRvLWRpc3QnLiAgQWx3YXlzIHVzZSBgbWFrZSBkaXN0JyBpbnN0ZWFkLgorIworLlBIT05ZOiBkby1kaXN0CisKK2RvLWRpc3Q6IGRpc3RjbGVhbiByZWZkb2MKKwlAIyBXaXRob3V0IHJlbW92aW5nIHRoZSBmaWxlcywgYGF1dG9jb25mJyBhbmQgZnJpZW5kcyBmb2xsb3cgbGlua3MuCisJcm0gLWYgYnVpbGRzL3VuaXgvYWNsb2NhbC5tNAorCXJtIC1mIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5hYworCXJtIC1mIGJ1aWxkcy91bml4L2NvbmZpZ3VyZQorCisJc2ggYXV0b2dlbi5zaAorCXJtIC1yZiBidWlsZHMvdW5peC9hdXRvbTR0ZS5jYWNoZQorCisJY3AgJChDT05GSUdfR1VFU1MpIGJ1aWxkcy91bml4CisJY3AgJChDT05GSUdfU1VCKSBidWlsZHMvdW5peAorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2FjbG9jYWwubTQgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThjOTRkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2FjbG9jYWwubTQKQEAgLTAsMCArMSw5MDQ1IEBACisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xNSAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworbTRfaWZuZGVmKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFttNF9kZWZ1bihbX0FNX0NPTkZJR19NQUNST19ESVJTXSwgW10pbTRfZGVmdW4oW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW19BTV9DT05GSUdfTUFDUk9fRElSUygkQCldKV0pCisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCAyMDAzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdAorIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKKyMgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorXSkKKworIyBzZXJpYWwgNTggTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubCBXZSB1c2UgQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLCitBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitfTFRfU0hFTExfSU5JVChbU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH1dKQorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0kbHRtYWluCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRV0sIFsKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluIEBTfEAqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgICAgICBcLSopIDs7CisgICAgICAgICopIGJyZWFrOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCit9CitdKSMgX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCB3b3VsZCBiZSBjbGVhcmVyIHRvIGNhbGwgQUNfUkVRVUlSRXMgZnJvbSBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRSwKKyMgYnV0IHRoYXQgbWFjcm8gaXMgYWxzbyBleHBhbmRlZCBpbnRvIGdlbmVyYXRlZCBsaWJ0b29sIHNjcmlwdCwgd2hpY2gKKyMgYXJyYW5nZXMgZm9yICRTRUQgYW5kICRFQ0hPIHRvIGJlIHNldCBieSBkaWZmZXJlbnQgbWVhbnMuCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1ttNF9yZXF1aXJlKFtfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRV0pZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorZnVuY19jY19iYXNlbmFtZSAkMQorY2NfYmFzZW5hbWU9JGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0CitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgJ200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK19MVF9ERUNMKFtdLCBbUEFUSF9TRVBBUkFUT1JdLCBbMV0sIFtUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW1dKWRubAorZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1RSVU5DQVRFXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUworCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgZmV3IHNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwIHVzIGRvIHJvYnVzdCBxdW90aW5nLgorbTRfZGVmdW4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwKK1sjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworXSkKKworIyBfTFRfUFJPR19MVE1BSU4KKyMgLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSAnY29uZmlndXJlJywgYW5kICdjb25maWcuc3RhdHVzJworIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorIyAnY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCittNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKK1ttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgJ2xpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvICdjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gJ2NvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICIkPHZhcj4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0nX0xUX1RBR1MnZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgJ2xpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvICdjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluICdjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkW10xCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCisjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKyMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCisjICcjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKKyMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSxbQVNfSU5JVF9HRU5FUkFURUQoJEApXSldLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sCitbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldZG5sCitbbHRfd3JpdGVfZmFpbD0wCitjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiskMgorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kMSA8PFxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorX0FTRU9GCit0ZXN0IDAgPSAiJGx0X3dyaXRlX2ZhaWwiICYmIGNobW9kICt4ICQxW11kbmwKK200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pXSkjIF9MVF9HRU5FUkFURURfRklMRV9JTklUCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoWyIkQ09ORklHX0xUIl0sCitbIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5dKQorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitsdF9jbF9zaWxlbnQ9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorJyRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgMCAhPSAkWyNdCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgJyRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgorbHRfY2xfc3VjY2Vzcz06Cit0ZXN0IHllcyA9ICIkc2lsZW50IiAmJgorICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSR7b2ZpbGV9VAorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjIENvbmZpZ3VyZWQgZGVmYXVsdHMgZm9yIHN5c19saWJfZGxzZWFyY2hfcGF0aCBtdW5naW5nLgorOiBcJHtMVF9TWVNfTElCUkFSWV9QQVRIPSIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCJ9CisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgICBjYXQgPDwnX0xUX0VPRicgPj4gIiRjZmdmaWxlIgorCisjICMjIyBCRUdJTiBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9QUkVQQVJFX01VTkdFX1BBVEhfTElTVAorX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKworIyAjIyMgRU5EIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0dvXSwJCQlbX0xUX0xBTkcoR08pXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworbTRfaWZuZGVmKFtBQ19QUk9HX0dPXSwgWworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19HTy4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCittNF9kZWZ1bihbQUNfUFJPR19HT10sCitbQUNfTEFOR19QVVNIKEdvKWRubAorQUNfQVJHX1ZBUihbR09DXSwgICAgIFtHbyBjb21waWxlciBjb21tYW5kXSlkbmwKK0FDX0FSR19WQVIoW0dPRkxBR1NdLCBbR28gY29tcGlsZXIgZmxhZ3NdKWRubAorX0FDX0FSR19WQVJfTERGTEFHUygpZG5sCitBQ19DSEVDS19UT09MKEdPQywgZ2NjZ28pCitpZiB0ZXN0IC16ICIkR09DIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgQUNfQ0hFQ0tfUFJPRyhHT0MsIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSwgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dKQorICBmaQorZmkKK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisgIEFDX0NIRUNLX1BST0coR09DLCBnY2NnbywgZ2NjZ28sIGZhbHNlKQorZmkKK10pI200X2RlZnVuCitdKSNtNF9pZm5kZWYKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dPXSwKKyAgW0xUX0xBTkcoR08pXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19HT10sIGRlZm4oW0FDX1BST0dfR09dKVtMVF9MQU5HKEdPKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAorICBbTFRfTEFORyhSQyldLAorICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQorXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisKKyMgT2Jzb2xldGUgbWFjcm9zOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKKworCisjIF9MVF9UQUdfQ09NUElMRVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorCitfTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCitfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCitfTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKK19MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCitdKSMgX0xUX1RBR19DT01QSUxFUgorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCitdKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCitdKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKyAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKyAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKKyAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXVtbLC5dXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCisgICAgZmkKKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKKworCisjIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAorICAgICAgICAgICAgICAgICAgW0ZDXSwgIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10pCisgIGVsc2UKKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgZmkKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIG00X2lmKFskMV0sIFtDWFhdLAorWyAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIGZpCitdLFtdKQorICBlbHNlCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgZmkKK10pCisKKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KK200X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfV0nCisgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmldLFtdKQorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9L3Vzci9saWI6L2xpYgorICBmaQorICBdKQorICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKK2ZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQorXSldKSMgX0xUX1NIRUxMX0lOSVQKKworCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KKyMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0CisjIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB0aGF0IHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAodGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJFtdMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworY2FzZSAkRUNITyBpbgorICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OworICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKKyAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKK2VzYWMKKworbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKK1tfQVNfREVURUNUX1NVR0dFU1RFRChbCisgIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCisgICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQorCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9XSVRIX1NZU1JPT1QKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisgIFtTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdAorICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAorW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorCitkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCitkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KK2x0X3N5c3Jvb3Q9CitjYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKKyB5ZXMpCisgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgZmkKKyAgIDs7ICMoCisgLyopCisgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICA7OyAjKAorIG5vfCcnKQorICAgOzsgIygKKyAqKQorICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfc3lzcm9vdF0pCisgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorICAgOzsKK2VzYWMKKworIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9MzIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9NjQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworbWlwczY0Ki0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGVtdWw9ZWxmCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjMyLWJpdCopCisJZW11bD0iJHtlbXVsfTMyIgorCTs7CisgICAgICAqNjQtYml0KikKKwllbXVsPSIke2VtdWx9NjQiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk1TQiopCisJZW11bD0iJHtlbXVsfWJ0c21pcCIKKwk7OworICAgICAgKkxTQiopCisJZW11bD0iJHtlbXVsfWx0c21pcCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTjMyKikKKwllbXVsPSIke2VtdWx9bjMyIgorCTs7CisgICAgZXNhYworICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQorICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KKyAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCisgICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbworICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisJICAgICAgKng4Ni02NCopCisJCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCisJCTs7CisJICAgICAgKikKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCQk7OworCSAgICBlc2FjCisJICAgIDs7CisJICBwb3dlcnBjNjRsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisJICAgIDs7CisJICBwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBvd2VycGNsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorCSAgICA7OworCSAgcG93ZXJwYy0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKKyAgZmkKKyAgOzsKKyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfUFJPR19BUgorIyAtLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisgICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisJaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAgICAgXSkKKyAgXSkKKworaWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCitfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCitdKSMgX0xUX1BST0dfQVIKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW19MVF9QUk9HX0FSCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiaXRyaWcqIHwgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAorICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCitmaQorXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKworCisjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCitdKQorCitpZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz1BQkNECisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKKyAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vbmUpCitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKyAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCitdKSMgTFRfQ01EX01BWF9MRU4KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCisKKworIyBfTFRfSEVBREVSX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKK1tBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCitdKSMgX0xUX0hFQURFUl9ETEZDTgorCisKKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9XQorX0xUX0VPRgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorCisKKyMgTFRfU1lTX0RMT1BFTl9TRUxGCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sWworICAgIGx0X2N2X2Rsb3Blbj1keWxkCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgXSkKKyAgICA7OworCisgIHRwZiopCisgICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQorICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZF0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPWRsb3Blbl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSwKKwkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQkgIFtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZF0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0IG5vID0gIiRsdF9jdl9kbG9wZW4iOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisgICAgdGVzdCB5ZXMgPSAiJGFjX2N2X2hlYWRlcl9kbGZjbl9oIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSRMSUJTCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQorICAgIF0pCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKyAgICAgIF0pCisgICAgZmkKKworICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgTElCUz0kc2F2ZV9MSUJTCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorXSkjIExUX1NZU19ETE9QRU5fU0VMRgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCitdKQorX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCitdKSMgX0xUX0NPTVBJTEVSX0NfTworCisKKyMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT01QSUxFUl9DX08oWyQxXSkKKworaGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKFtMVF9PQkpESVJdLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorXSkjIF9MVF9DSEVDS19PQkpESVIKKworCisjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAorW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCitfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQoraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAorICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKyAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIjsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIjsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCByZWxpbmsgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiIHx8CisgICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCitdKSMgX0xUX0NNRF9TVFJJUExJQgorCisKKyMgX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgZnVuY19tdW5nZV9wYXRoX2xpc3QoKSBpcyBkZWZpbmVkIGNvcnJlY3RseS4KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdLAorW1sjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKKyMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKKyMgaGF2aW5nIGEgZm9ybWF0OgorIyAiRElSWzpESVJdOiIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCisjICI6RElSWzpESVJdIgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgorIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCisjICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSWzpESVJdIgorIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCitmdW5jX211bmdlX3BhdGhfbGlzdCAoKQoreworICAgIGNhc2UgeEBTfEAyIGluCisgICAgeCkKKyAgICAgICAgOzsKKyAgICAqOikKKyAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYCBcQFN8QEBTfEAxXCIKKyAgICAgICAgOzsKKyAgICB4OiopCisgICAgICAgIGV2YWwgQFN8QDE9XCJcQFN8QEBTfEAxIGAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgKjo6KikKKyAgICAgICAgZXZhbCBAU3xAMT1cIlxAU3xAQFN8QDFcIGAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKKyAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcQFN8QEBTfEAxXCIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBldmFsIEBTfEAxPVwiYCRFQ0hPIEBTfEAyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CitdXSkjIF9MVF9QUkVQQVJFX1BBVEhfTElTVAorCisKKyMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKKyAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbW0EtWmEtel1dOlwpfFwxfGcnIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCisgICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCisgIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KKyAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKKyAgICBsdF9tdWx0aV9vc19kaXI9CisgICAgOzsKKyAgZXNhYworICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKKyAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7CisgIGx0X2ZvbyA9ICIiOworICBsdF9jb3VudCA9IDA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3N8L1woW1tBLVphLXpdXTpcKXxcMXxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPS5zbworcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK0FDX0FSR19WQVIoW0xUX1NZU19MSUJSQVJZX1BBVEhdLAorW1VzZXItZGVmaW5lZCBydW4tdGltZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLl0pCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIDs7CisKK2FpeFtbNC05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0CisgICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKKyAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAorICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAorICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAorICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbworICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCisgICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCisgICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KKyAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCisgICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgorICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQorICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCisgICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKKyAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKKyAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAorICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCisgICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCisgICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAorICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCisKKyAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICA7OworICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYVsoXWxpYi5zby5WWyldJworICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICA7OworICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlZbKF0kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub1spXSwgbGliLmFbKF1saWIuc28uVlspXSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAorICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYVsoXWxpYi5zby5WWyldLCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJworICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCisgICAgICA7OworICAgIGVzYWMKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0uZGxsCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworbTRfaWYoWyQxXSwgW10sWworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMjNdXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKKyAgICBmaQorICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAorICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisgICAgXSkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKKyAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKKyAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAorICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKKyAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQorICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgT1MvMiBjYW4gb25seSBsb2FkIGEgRExMIHdpdGggYSBiYXNlIG5hbWUgb2YgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuCisgIHNvbmFtZV9zcGVjPSdgdGVzdCAtbiAiJG9zMmRsbG5hbWUiICYmIGxpYm5hbWU9IiRvczJkbGxuYW1lIjsKKyAgICB2PSQoJEVDSE8gJHJlbGVhc2UkdmVyc3VmZml4IHwgdHIgLWQgLi0pOworICAgIG49JCgkRUNITyAkbGlibmFtZSB8IGN1dCAtYiAtJCgoOCAtICR7I3Z9KSkgfCB0ciAuIF8pOworICAgICRFQ0hPICRuJHZgJHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfV9kbGwuJGxpYmV4dCcKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUJFR0lOTElCUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgIGZpJworICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICRSTSBcJGRscGF0aCcKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9c2NvCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworZmkKKworIyByZW1lbWJlciB1bmF1Z21lbnRlZCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggY29udGVudCBmb3IgbGlidG9vbCBzY3JpcHQgZGVjbHMuLi4KK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9JHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgLi4uIGJ1dCBpdCBuZWVkcyBMVF9TWVNfTElCUkFSWV9QQVRIIG11bmdpbmcgZm9yIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvZGUKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKKworIyB0byBiZSB1c2VkIGFzIGRlZmF1bHQgTFRfU1lTX0xJQlJBUllfUEFUSCB2YWx1ZSBpbiBnZW5lcmF0ZWQgbGlidG9vbAorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kTFRfU1lTX0xJQlJBUllfUEFUSAorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbaW5zdGFsbF9vdmVycmlkZV9tb2RlXSwgWzFdLAorICAgIFtQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgW2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGhdLCBbMl0sCisgICAgW0RldGVjdGVkIHJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aF0sIFsyXSwKKyAgICBbRXhwbGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWVdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gdGhhdCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kMSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9JGx0X3NhdmVfaWZzCisgIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB0aGF0IGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9JGx0X3NhdmVfaWZzCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK19MVF9QQVRIX0xEX0dOVQorQUNfU1VCU1QoW0xEXSkKKworX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorXSkjIExUX1BBVEhfTEQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK0FVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKworCisjIF9MVF9QQVRIX0xEX0dOVQorIy0gLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUEFUSF9MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKK10pIyBfTFRfUEFUSF9MRF9HTlUKKworCisjIF9MVF9DTURfUkVMT0FECisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorIyAgIC0tIFBPUlRNRSBTb21lIGxpbmtlcnMgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCittNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCisgICAgICByZWxvYWRfY21kcz1mYWxzZQorICAgIGZpCisgICAgOzsKKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHdsLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX1BBVEhfREQKKyMgLS0tLS0tLS0tLS0KKyMgZmluZCBhIHdvcmtpbmcgZGQKK200X2RlZnVuKFtfTFRfUEFUSF9ERF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhIHdvcmtpbmcgZGRdLCBbYWNfY3ZfcGF0aF9sdF9ERF0sCitbcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCitjYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQorOiAke2x0X0REOj0kRER9CitBQ19QQVRIX1BST0dTX0ZFQVRVUkVfQ0hFQ0soW2x0X0REXSwgW2RkXSwKK1tpZiAiJGFjX3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKKyAgJiYgYWNfY3ZfcGF0aF9sdF9ERD0iJGFjX3BhdGhfbHRfREQiIGFjX3BhdGhfbHRfRERfZm91bmQ9OgorZmldKQorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXRdKQorXSkjIF9MVF9QQVRIX0RECisKKworIyBfTFRfQ01EX1RSVU5DQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBjb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUKK200X2RlZnVuKFtfTFRfQ01EX1RSVU5DQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfUEFUSF9ERF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHRydW5jYXRlIGJpbmFyeSBwaXBlc10sIFtsdF9jdl90cnVuY2F0ZV9iaW5dLAorW3ByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQorY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKK2x0X2N2X3RydW5jYXRlX2Jpbj0KK2lmICIkYWNfY3ZfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgorICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAorICAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRhY19jdl9wYXRoX2x0X0REIGJzPTQwOTYgY291bnQ9MSIKK2ZpCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dAordGVzdCAteiAiJGx0X2N2X3RydW5jYXRlX2JpbiIgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkU0VEIC1lIDRxIl0pCitfTFRfREVDTChbbHRfdHJ1bmNhdGVfYmluXSwgW2x0X2N2X3RydW5jYXRlX2Jpbl0sIFsxXSwKKyAgW0NvbW1hbmQgdG8gdHJ1bmNhdGUgYSBiaW5hcnkgcGlwZV0pCitdKSMgX0xUX0NNRF9UUlVOQ0FURQorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgJ3Vua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB0aGF0IHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSAnZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgJ3Bhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbWzQtOV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dXC5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7Oworb3MyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0kTk0KK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9JHthY190b29sX3ByZWZpeH1ubQorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09JGFjX2Rpci8kbHRfdG1wX25tCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCI7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgJ3NlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwkjIE1TWVMgY29udmVydHMgL2Rldi9udWxsIHRvIE5VTCwgTWluR1cgbm0gdHJlYXRzIE5VTCBhcyBlbXB0eQorCWNhc2UgJGJ1aWxkX29zIGluCisJbWluZ3cqKSBsdF9iYWRfZmlsZT1jb25mdGVzdC5ubS9ub2ZpbGUgOzsKKwkqKSBsdF9iYWRfZmlsZT0vZGV2L251bGwgOzsKKwllc2FjCisJY2FzZSBgIiR0bXBfbm0iIC1CICRsdF9iYWRfZmlsZSAyPiYxIHwgc2VkICcxcSdgIGluCisJKiRsdF9iYWRfZmlsZSogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrIDIKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrIDIKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpXSkKK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7CisgICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisgIDs7Citlc2FjCitdKQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisKKworIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCittNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CitBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBfTFRfRExMX0RFRl9QKFtGSUxFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KKyMgS2VlcCBpbiBzeW5jIHdpdGggZnVuY19kbGxfZGVmX3AgaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitBQ19ERUZVTihbX0xUX0RMTF9ERUZfUF0sCitbZG5sCisgIHRlc3QgREVGID0gImAkU0VEIC1uIGRubAorICAgIC1lICdcJydzL15bWwkgXV0qLy8nXCcnIGRubCBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgZG5sICAgICAgRGVsZXRlIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50cworICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoW1sJIF1dLipcKSokL0RFRi9wJ1wnJyBkbmwKKyAgICAtZSBxIGRubCAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBjb25zaWRlciB0aGUgZmlyc3QgInJlYWwiIGxpbmUKKyAgICAkMWAiIGRubAorXSkjIF9MVF9ETExfREVGX1AKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jZWdjYyogfCAqLSotY3lnd2luKiB8ICotKi1oYWlrdSogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0tbG13KQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0tbG0pCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorZmkKK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCisKKworIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAorIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQgX19vc2ZfXworLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisJICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0XSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZV0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtubV9pbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwgWzFdLAorICAgIFtUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlXSkKK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtc3RhdGljJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFtbNC05XV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwkgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKKyAgICAgIGlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iLVhjb21waWxlciAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIgorICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgbmFnZm9yKikKKyAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvczIqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwk7OworICAgICAgdGNjKikKKwkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFtbMS03XV0uKiB8ICpTdW4qRm9ydHJhbipcIDguW1swLTNdXSopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCisJICA7OworCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgIDs7CisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIDs7CisgICAgICAgICpJbnRlbCpcIFtbQ0ZdXSpDb21waWxlciopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICA7OworCSpQb3J0bGFuZFwgR3JvdXAqKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCisgICAgIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKKyAgICAjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcworICAgICMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgICMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCisgICAgIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQorICAgICMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbW15CXV0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChbc3Vic3RyXShcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSRsdGRsbF9jbWRzCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSAnICgnIGFuZCAnKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiAnYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzICdhJyBhbmQgJ2JjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyAnZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKworICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKKyAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCisgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQorCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCisJY2FzZSBgJExEIC12IDI+JjFgIGluCisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLltbMi05XV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFtbMy05XV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgeWVzID0gIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSI7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPSckd2wnCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKFteKV1cKylcc1wrLy8nIDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZml+CisgICAgICAgICRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIHNocmV4dF9jbWRzPS5kbGwKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0IGxpbnV4LWRpZXRsaWJjID0gIiRob3N0X29zIjsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0IG5vID0gIiR0bXBfZGlldCIKKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisgICAgICAgIG5hZ2ZvciopICAgICAgICAgICAgICAgICAgICAgICAgIyBOQUdGT1IgNS4zCisgICAgICAgICAgdG1wX3NoYXJlZGZsYWc9Jy1XbCwtc2hhcmVkJyA7OworCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJdGNjKikKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSI7IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4W1s0LTldXSopCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKwkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPQorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgorCSMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCisJIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKKwkjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKwkjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAorCSMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKKwkjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW1teQl1dKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoW3N1YnN0cl0oXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgorCSMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZworCSMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KKwkjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKKwkjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisJIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwkjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcworCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubworCSMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKKwkgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgZmkKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJworICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICBhaXgsKikgOzsgIyB0cmFkaXRpb25hbCwgbm8gaW1wb3J0IGZpbGUKKyAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorCSMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKKwlmaQorCSMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKKwkjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcworCSMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCisJc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJworCXNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSckd2wtRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCisJICBmaQorCSAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJworCSAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgZWxzZQorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJworCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBlbHNlCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwkgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgorCSAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbWywgXV1cXCklLWJlcm9rXFwxJWciYCcKKwkgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCisJICBmaQorCSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCisJICBlbHNlCisJICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9LmRsbAorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisJX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCSMgRG9uJ3QgdXNlIHJhbmxpYgorCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhY34KKyAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0uZGxsCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMi4qKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCW00X2lmKCQxLCBbXSwgWworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAorCSAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfX2IsICQxKSwgWy1iXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCisJICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCisJICBbc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgorCSAgIEFDX0xJTktfSUZFTFNFKAorCSAgICAgW0FDX0xBTkdfU09VUkNFKAorCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dLAorCQkJICAgICAgW0ZvcnRyYW5dLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dKV0pXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1NdKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKwllbHNlCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIHNocmV4dF9jbWRzPS5kbGwKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwl3bGFyYz0nJHdsJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHdsJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0sCisJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisJWyRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJICBwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKwkgIHRoZW4KKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBmaQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisJXSkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSRDQworQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKyAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9JGx0X3NhdmVfQ0MKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKKyAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KKyAgQUNfUFJPR19DWFhDUFAKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCitBQ19MQU5HX1BVU0goQysrKQorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgbHRfc2F2ZV9MRD0kTEQKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBHQ0M9JEdYWAorICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCisgIGZpCisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisgIGZpCisgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgIENDPSR7Q1hYLSJjKysifQorICBDRkxBR1M9JENYWEZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHdsJworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPQorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KKyAgICAgICAgICAjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKKyAgICAgICAgICAjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCisgICAgICAgICAgIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6CisgICAgICAgICAgIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisgICAgICAgICAgIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KKyAgICAgICAgICAjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCisJICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgICBmaQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKKyAgICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICAgIGFpeCwqKSA7OwkjIG5vIGltcG9ydCBmaWxlCisgICAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorICAgICAgICAgICMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKKwkgIGZpCisJICAjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCisJICAjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcworCSAgIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KKwkgIHNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKKwkgIHNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgICAgZmkKKwkgICAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJworCSAgICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgICMgVGhlICItRyIgbGlua2VyIGZsYWcgYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzLgorICAgICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm5vdG9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJworCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwkgICAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCisJICAgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoW1ssIF1dXFwpJS1iZXJva1xcMSVnImAnCisJICAgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgICAjIGxpYnJhcmllcy4gTmVlZCAtYm5vcnRsIGxhdGUsIHdlIG1heSBoYXZlIC1icnRsIGluIExERkxBR1MuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCisJICAgIGZpCisJICAgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCisJICAgIGVsc2UKKwkgICAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9LmRsbAorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWN+CisgICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlzaHJleHRfY21kcz0uZGxsCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIGVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBwcmVmaXhfY21kcz0iJFNFRCJ+CisJICBpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KKwkgICAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJICBmaX4KKwkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgorCSAgY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkMi4qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKyAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+CisgICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKwkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHWFgKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjCisjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCittNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlIEBTfEAyIGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJVxcXFxAU3xAMlwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJUBTfEAyXCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKworCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcGFja2FnZSBmb28KK2Z1bmMgZm9vKCkgeworfQorX0xUX0VPRgorXSkKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHByZXYkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAorICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgY2FzZSAkcHJldiBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0kcHJldiRwCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAkcHJldiRwIgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSRwcmV2JHAKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICRwcmV2JHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSRwCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSRwCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0IG5vID0gIiRGNzciOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIENGTEFHUz0kRkZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorCSAgeWVzLGFpeCx5ZXMpIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorCSAgeWVzLHN2cjQsKikgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQorCSAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAorCSAgZXNhYworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHNzcKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3Qgbm8gPSAiJEZDIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBjYXNlICRlbmFibGVfc2hhcmVkLCR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKwkgIHllcyxhaXgseWVzKSA7OwkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKKwkgIHllcyxzdnI0LCopIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKwkgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKwkgIGVzYWMKKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyIKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorQ0ZMQUdTPSRHQ0pGTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9JExECitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR09fQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgR28gY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dPX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HT10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEdvIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1nbworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgR28gdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R09DLSJnY2NnbyJ9CitDRkxBR1M9JEdPRkxBR1MKK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdvIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR09fQ09ORklHCisKKworIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9JGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZQorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0IHNldCA9ICIke0dDSkZMQUdTK3NldH0iIHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19HTworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HT10sCitbQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvLCkKK10pCisKKworIyBMVF9QUk9HX1JDCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCkKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sIFtdKQorCisKKyMgX0xUX0RFQ0xfRUdSRVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19GR1JFUF0pZG5sCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitfTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCitfTFRfREVDTChbXSwgW0VHUkVQXSwgWzFdLCBbQW4gRVJFIG1hdGNoZXJdKQorX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCitkbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworQUNfU1VCU1QoW0dSRVBdKQorXSkKKworCisjIF9MVF9ERUNMX09CSkRVTVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IG9iamR1bXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfT0JKRFVNUF0sCitbQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKK0FDX1NVQlNUKFtPQkpEVU1QXSkKK10pCisKKyMgX0xUX0RFQ0xfRExMVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSBETExUT09MIHZhcmlhYmxlIGlzIHNldC4KK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorQUNfU1VCU1QoW0RMTFRPT0xdKQorXSkKKworIyBfTFRfREVDTF9TRUQKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCittNF9kZWZ1bihbX0xUX0RFQ0xfU0VEXSwKK1tBQ19QUk9HX1NFRAordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorICAgIFtTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbl0pCitdKSMgX0xUX0RFQ0xfU0VECisKK200X2lmbmRlZihbQUNfUFJPR19TRURdLCBbCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgIiRsdF9hY19zZWQiICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAxMCAtbHQgIiRsdF9hY19jb3VudCIgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgIiRsdF9hY19jb3VudCIgLWd0ICIkbHRfYWNfbWF4IjsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCitfTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCitfTFRfREVDTChbU1AyTkxdLCBbbHRfU1AyTkxdLCBbMV0sIFt0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzXSlkbmwKK19MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworCisKKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGV0ZXJtaW5lIHdoYXQgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKyMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgorbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCitbY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCitdKQordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKK1sjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworXSkKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pZG5sCitdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOSwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA4IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uICckMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCAnc2hhcmVkJyBub3IgJ2Rpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFthaXgtc29uYW1lPWFpeCBhaXgtc29uYW1lPWJvdGggYWl4LXNvbmFtZT1zdnI0XSwKKwkJICAgW19MVF9XSVRIX0FJWF9TT05BTUUoW2FpeF0pXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICdkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICd3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlICdzaGFyZWQnIGFuZAorIyAnZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TSEFSRUQKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAnc3RhdGljJyBhbmQKKyMgJ2Rpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdmYXN0LWluc3RhbGwnCisjIGFuZCAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgJ2Zhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfQUlYX1NPTkFNRShbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtYWl4LXNvbmFtZSBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGFpeC1zb25hbWU9YWl4JworIyBhbmQgYGFpeC1zb25hbWU9Ym90aCcgYW5kIGBhaXgtc29uYW1lPXN2cjQnIExUX0lOSVQgb3B0aW9ucy4gREVGQVVMVAorIyBpcyBlaXRoZXIgYGFpeCcsIGBib3RoJyBvciBgc3ZyNCcuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYWl4Jy4KK200X2RlZmluZShbX0xUX1dJVEhfQUlYX1NPTkFNRV0sCitbbTRfZGVmaW5lKFtfTFRfV0lUSF9BSVhfU09OQU1FX0RFRkFVTFRdLCBbbTRfaWYoJDEsIHN2cjQsIHN2cjQsIG00X2lmKCQxLCBib3RoLCBib3RoLCBhaXgpKV0pZG5sCitzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz0KK2Nhc2UgJGhvc3QsJGVuYWJsZV9zaGFyZWQgaW4KK3Bvd2VyKi0qLWFpeFtbNS05XV0qLHllcykKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZV0pCisgIEFDX0FSR19XSVRIKFthaXgtc29uYW1lXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGhdLAorICAgICAgW3NoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0byBwcm92aWRlIG9uIEFJWCwgQDw6QGRlZmF1bHQ9XV9MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVFtAOj5ALl0pXSwKKyAgICBbY2FzZSAkd2l0aHZhbCBpbgorICAgIGFpeHxzdnI0fGJvdGgpCisgICAgICA7OworICAgICopCisgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWVdKQorICAgICAgOzsKKyAgICBlc2FjCisgICAgbHRfY3Zfd2l0aF9haXhfc29uYW1lPSR3aXRoX2FpeF9zb25hbWVdLAorICAgIFtBQ19DQUNIRV9WQUwoW2x0X2N2X3dpdGhfYWl4X3NvbmFtZV0sCisgICAgICBbbHRfY3Zfd2l0aF9haXhfc29uYW1lPV1fTFRfV0lUSF9BSVhfU09OQU1FX0RFRkFVTFQpCisgICAgd2l0aF9haXhfc29uYW1lPSRsdF9jdl93aXRoX2FpeF9zb25hbWVdKQorICBBQ19NU0dfUkVTVUxUKFskd2l0aF9haXhfc29uYW1lXSkKKyAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisgICAgIyBGb3IgdGhlIEFJWCB3YXkgb2YgbXVsdGlsaWIsIHdlIG5hbWUgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlcgorICAgICMgYmFzZWQgb24gdGhlIGJpdHdpZHRoIHVzZWQsIHRyYWRpdGlvbmFsbHkgJ3Noci5vJyBvciAnc2hyXzY0Lm8nLAorICAgICMgYW5kICdzaHIuaW1wJyBvciAnc2hyXzY0LmltcCcsIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBJbXBvcnQgRmlsZS4KKyAgICAjIEV2ZW4gd2hlbiBHTlUgY29tcGlsZXJzIGlnbm9yZSBPQkpFQ1RfTU9ERSBidXQgbmVlZCAnLW1haXg2NCcgZmxhZywKKyAgICAjIHRoZSBBSVggdG9vbGNoYWluIHdvcmtzIGJldHRlciB3aXRoIE9CSkVDVF9NT0RFIHNldCAoZGVmYXVsdCAzMikuCisgICAgaWYgdGVzdCA2NCA9ICIke09CSkVDVF9NT0RFLTMyfSI7IHRoZW4KKyAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocl82NAorICAgIGVsc2UKKyAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocgorICAgIGZpCisgIGZpCisgIDs7CisqKQorICB3aXRoX2FpeF9zb25hbWU9YWl4CisgIDs7Citlc2FjCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWNdLCBbMF0sCisgICAgW1NoYXJlZCBhcmNoaXZlIG1lbWJlciBiYXNlbmFtZSwgZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYXSlkbmwKK10pIyBfTFRfV0lUSF9BSVhfU09OQU1FCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1haXhdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYWl4XSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPWJvdGhdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYm90aF0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1zdnI0XSwgW19MVF9XSVRIX0FJWF9TT05BTUUoW3N2cjRdKV0pCisKKworIyBfTFRfV0lUSF9QSUMoW01PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdwaWMtb25seScgYW5kICduby1waWMnCisjIExUX0lOSVQgb3B0aW9ucy4KKyMgTU9ERSBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdib3RoJy4KK200X2RlZmluZShbX0xUX1dJVEhfUElDXSwKK1tBQ19BUkdfV0lUSChbcGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNAPDpAPVBLR1NAOj5AXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSldKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlICdwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCisKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LTIwMDgsIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSwgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzICdTRVBBUkFUT1InJ1NUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQorCisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBAY29uZmlndXJlX2lucHV0QAorCisjIHNlcmlhbCA0MTc5IGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuNl0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMi40LjZdKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuNC42JworbWFjcm9fcmV2aXNpb249JzIuNC42JworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKKworIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDcsIDIwMDksIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTiksCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4KKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCittNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCisKK200X2luY2x1ZGUoW2Z0LW11bm1hcC5tNF0pCittNF9pbmNsdWRlKFtwa2cubTRdKQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2NvbmZpZy5ndWVzcyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjdlYjE0MQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWcuZ3Vlc3MKQEAgLTAsMCArMSwxNDM4IEBACisjISAvYmluL3NoCisjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDE1LTAzLTA0JworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorIworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXI7IG1haW50YWluZWQgc2luY2UgMjAwMCBieSBCZW4gRWxsaXN0b24uCisjCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKKyMKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCisKKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAxOTkyLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworY2FzZSAiJHtVTkFNRV9TWVNURU19IiBpbgorTGludXh8R05VfEdOVS8qKQorCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KKwkjIFdlIGNvdWxkIHByb2JhYmx5IHRyeSBoYXJkZXIuCisJTElCQz1nbnUKKworCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwljYXQgPDwtRU9GID4gJGR1bW15LmMKKwkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKwkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQorCUxJQkM9dWNsaWJjCisJI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisJTElCQz1kaWV0bGliYworCSNlbHNlCisJTElCQz1nbnUKKwkjZW5kaWYKKwlFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnIHwgc2VkICdzLCAsLGcnYAorCTs7Citlc2FjCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAodW5hbWUgLXAgMj4vZGV2L251bGwgfHwgXAorCSAgICAvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICBlYXJtdiopCisJCWFyY2g9YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1lICdzLF5lXChhcm12WzAtOV1cKS4qJCxcMSwnYAorCQllbmRpYW49YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1uZSAncyxeLipcKGViXCkkLFwxLHAnYAorCQltYWNoaW5lPSR7YXJjaH0ke2VuZGlhbn0tdW5rbm93bgorCQk7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGVhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIERldGVybWluZSBBQkkgdGFncy4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGVhcm0qKQorCQlleHByPSdzL15lYXJtdlswLTldLy1lYWJpLztzL2ViJC8vJworCQlhYmk9YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1lICIkZXhwciJgCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9JHthYml9IgorCWV4aXQgOzsKKyAgICAqOkJpdHJpZzoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL0JpdHJpZy4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1iaXRyaWcke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgorCWV4aXRjb2RlPSQ/CisJdHJhcCAnJyAwCisJZXhpdCAkZXhpdGNvZGUgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisJZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9sc2xwcCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9sc2xwcCAtTHFjIGJvcy5ydGUubGliYyB8CisJCQkgICBhd2sgLUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0qJC8wL2AKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOio6KikKKwllY2hvIHJzNjAwMC1pYm0tYWl4CisJZXhpdCA7OworICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQorCWVjaG8gcm9tcC1pYm0tYnNkNC40CisJZXhpdCA7OworICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCisJZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCisgICAgKjpCT1NYOio6KikKKwllY2hvIHJzNjAwMC1idWxsLWJvc3gKKwlleGl0IDs7CisgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKKwllY2hvIG02OGstYnVsbC1zeXN2MworCWV4aXQgOzsKKyAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCisJZWNobyBtNjhrLWhwLWJzZAorCWV4aXQgOzsKKyAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2Q0LjQKKwlleGl0IDs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OworCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CisJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQorCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisJCSAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKwkJICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorCQkgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKwkJICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCisJCSAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorCQkJY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisJCQkgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKwkJCSAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisJCQllc2FjIDs7CisJCSAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisKKwkJI2RlZmluZSBfSFBVWF9TT1VSQ0UKKwkJI2luY2x1ZGUgPHN0ZGxpYi5oPgorCQkjaW5jbHVkZSA8dW5pc3RkLmg+CisKKwkJaW50IG1haW4gKCkKKwkJeworCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCSAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisJCSNlbmRpZgorCQkgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKworCQkgICAgc3dpdGNoIChjcHUpCisJCQl7CisJCQljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzJfMDoKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkJICAgIHN3aXRjaCAoYml0cykKKwkJCQl7CisJCQkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworCQkJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKwkJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJCQl9IGJyZWFrOworCQkjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworCQkJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkjZW5kaWYKKwkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJfQorCQkgICAgZXhpdCAoMCk7CisJCX0KK0VPRgorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKKwllc2FjCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgLXEgX19MUDY0X18KKwkgICAgdGhlbgorCQlIUF9BUkNIPSJocHBhMi4wdyIKKwkgICAgZWxzZQorCQlIUF9BUkNIPSJocHBhNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIGlhNjQ6SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgMzA1MCo6SEktVVg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwlpbnQKKwltYWluICgpCisJeworCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKKwkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0CisJICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KKwkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAoY3B1KQorCQl7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKKwkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7CisJICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZXhpdCAoMCk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCisJZWNobyBocHBhMS4xLWhwLWJzZAorCWV4aXQgOzsKKyAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1ic2QKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKKyAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtb3NmCisJZXhpdCA7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1vc2YKKwlleGl0IDs7CisgICAgaSo4NjpPU0YxOio6KikKKwlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtaworCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQorCWZpCisJZXhpdCA7OworICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKKwllY2hvIGhwcGExLjEtaHAtbGl0ZXMKKwlleGl0IDs7CisgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6QlNEL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJY2FzZSAke1VOQU1FX1BST0NFU1NPUn0gaW4KKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgKjpNSU5HVzY0KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzY0CisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgKjpNU1lTKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc3lzCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKwkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi0ke0xJQkN9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhYXJjaDY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQorCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwllc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFyYzpMaW51eDoqOiogfCBhcmNlYjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZWxzZQorCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorCSAgICB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpCisJICAgIGVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgorCSAgICBmaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgZTJrOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorCTs7CisgICAgb3BlbnJpc2MqOkxpbnV4Oio6KikKKwllY2hvIG9yMWstdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG9yMzI6TGludXg6KjoqIHwgb3Ixayo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NGxlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGNsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisJIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisJCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgeDg2XzY0OkhhaWt1Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KKwkgICAgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKKwlmaQorCWlmIHRlc3QgYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLi4qLy8nYCAtbGUgMTAgOyB0aGVuCisJICAgIGlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQl0aGVuCisJCSAgICBjYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkJCWkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKwkJCXBvd2VycGMpIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjNjQgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkgICAgZmkKKwllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KKwkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2Mgb24gT1MgWCAxMC45LCBhcyBpdCBzaGlwcyB3aXRoIGEgc3R1YgorCSAgICAjIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydCBwcm9tcHRpbmcgdG8gaW5zdGFsbAorCSAgICAjIGRldmVsb3BlciB0b29scy4gIEFueSBzeXN0ZW0gcnVubmluZyBNYWMgT1MgWCAxMC43IG9yCisJICAgICMgbGF0ZXIgKERhcndpbiAxMSBhbmQgbGF0ZXIpIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA2NC1iaXQKKwkgICAgIyBwcm9jZXNzb3IuIFRoaXMgaXMgbm90IHRydWUgb2YgdGhlIEFSTSB2ZXJzaW9uIG9mIERhcndpbgorCSAgICAjIHRoYXQgQXBwbGUgdXNlcyBpbiBwb3J0YWJsZSBkZXZpY2VzLgorCSAgICBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0CisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKK2VzYWMKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWcuc3ViIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGYxMjI5YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTgxMCBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDE1LTAzLTA4JworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAxOTkyLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1lYWJpKiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgYW5kcm9pZC1saW51eCkKKyAgICBvcz0tbGludXgtYW5kcm9pZAorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgLXVua25vd24KKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSopCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWJsdWVnZW5lKikKKwkJb3M9LWNuaworCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzcmRiKQorCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281KQorCQlvcz0tc2NvMy4ydjUKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY280KQorCQlvcz0tc2NvMy4ydjQKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjIuWzQtOV0qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4ydls0LTldKikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCoxNzgpCisJCW9zPS1seW54b3MxNzgKKwkJOzsKKwktbHlueCo1KQorCQlvcz0tbHlueG9zNQorCQk7OworCS1seW54KikKKwkJb3M9LWx5bnhvcworCQk7OworCS1wdHgqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKKwkJOzsKKwktd2luZG93c250KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAorCQk7OworCS1wc29zKikKKwkJb3M9LXBzb3MKKwkJOzsKKwktbWludCB8IC1taW50WzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KKwkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJjZWIgXAorCXwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMi04XSB8IGFybXZbMy04XVtsYl0gfCBhcm12N1thcm1dIFwKKwl8IGF2ciB8IGF2cjMyIFwKKwl8IGJlMzIgfCBiZTY0IFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgYzgwNTEgfCBjbGlwcGVyIFwKKwl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisJfCBlMmsgfCBlcGlwaGFueSBcCisJfCBmaWRvIHwgZnIzMCB8IGZydiB8IGZ0MzIgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGsxb20gXAorCXwgbGUzMiB8IGxlNjQgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtaWNyb2JsYXplZWwgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2EzMnI2ZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCBcCisJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAorCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKKwl8IG1veGllIFwKKwl8IG10IFwKKwl8IG1zcDQzMCBcCisJfCBuZHMzMiB8IG5kczMybGUgfCBuZHMzMmJlIFwKKwl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3BlbjggfCBvcjFrIHwgb3Ixa25kIHwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKwl8IHB5cmFtaWQgXAorCXwgcmlzY3YzMiB8IHJpc2N2NjQgXAorCXwgcmw3OCB8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHZpc2l1bSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4YzE2eCB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCWM1NHgpCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKwkJOzsKKwljNTV4KQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCTs7CisJYzZ4KQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJOzsKKwlsZW9ufGxlb25bMy05XSkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy0kYmFzaWNfbWFjaGluZQorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjODA1MS0qIHwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGUyay0qIHwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaGV4YWdvbi0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBrMW9tLSogXAorCXwgbGUzMi0qIHwgbGU2NC0qIFwKKwl8IGxtMzItKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiBcCisJfCBtaWNyb2JsYXplLSogfCBtaWNyb2JsYXplZWwtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhMzJyNi0qIHwgbWlwc2lzYTMycjZlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHI2LSogfCBtaXBzaXNhNjRyNmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIHwgbmlvczJlYi0qIHwgbmlvczJlbC0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3BlbjgtKiBcCisJfCBvcjFrKi0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcmw3OC0qIHwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdjEtKiB8IHN4Py0qIFwKKwl8IHRhaG9lLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZSotKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdjg1MGUxLSogfCB2ODUwZXMtKiB8IHY4NTBlMi0qIHwgdjg1MGUydjMtKiBcCisJfCB2YXgtKiBcCisJfCB2aXNpdW0tKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSogfCB6ODAtKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisgICAgICAgIGFzbWpzKQorCQliYXNpY19tYWNoaW5lPWFzbWpzLXVua25vd24KKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKKwljb252ZXgtYzEpCisJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzIpCisJCWJhc2ljX21hY2hpbmU9YzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzMyKQorCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzQpCisJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzOCkKKwkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCisJCTs7CisJY3IxNiB8IGNyMTYtKikKKwkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CisJZHB4MjAgfCBkcHgyMC0qKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCisJCW9zPS1ib3N4CisJCTs7CisJZHB4MiogfCBkcHgyKi1idWxsKQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjMKKwkJOzsKKwllYm1vbjI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tZWJtb24KKwkJOzsKKwllbHhzaSkKKwkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQorCQlvcz0tYnNkCisJCTs7CisJZW5jb3JlIHwgdW1heCB8IG1tYXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCisJCTs7CisJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQorCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCWZ4MjgwMCkKKwkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKKwkJOzsKKwlnZW5peCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1ucworCQk7OworCWdtaWNybykKKwkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybworCQlvcz0tc3lzdgorCQk7OworCWdvMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tZ28zMgorCQk7OworCWgzMDUwciogfCBoaXV4KikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwloODMwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloODMwMHhyYXkpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0teHJheQorCQk7OworCWg4NTAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWhhcnJpcykKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tc3lzdjMKKwkJOzsKKwlocDMwMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDMwMGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ic2QKKwkJOzsKKwlocDMwMGhwdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0taHB1eAorCQk7OworCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAorCQk7OworCWhwOWszWzItOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHBwYS1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlpMzcwLWlibSogfCBpYm0qKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCTs7CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbGVvbi0qfGxlb25bMy05XS0qKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzLy0uKi8vJ2AKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1veGllYm94KQorCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KKwkJb3M9LW1veGllYm94CisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbXN5cworCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcyB8IHJkb3M2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyZG9zMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIHwgLWNsb3VkYWJpKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC1tdXNsKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiB8IC1tb3hpZWJveCogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIHwgLXRpcnRvcyopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKwktb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1uYWNsKikKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCWM4MDUxLSopCisJCW9zPS1lbGYKKwkJOzsKKwloZXhhZ29uLSopCisJCW9zPS1lbGYKKwkJOzsKKwl0aWM1NHgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NXgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eC0qKQorCQlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKwltZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktY25rKnwtYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWd1cmUgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxOWQzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvY29uZmlndXJlCkBAIC0wLDAgKzEsMTYzMjkgQEAKKyMhIC9iaW4vc2gKKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBGcmVlVHlwZSAyLjYuCisjCisjIFJlcG9ydCBidWdzIHRvIDxmcmVldHlwZUBub25nbnUub3JnPi4KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCisgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKyAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOworICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorYXNfZm5fZXhpdCAyNTUKKyAgZmkKKyAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQoraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKKworICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKKyQwOiBmcmVldHlwZUBub25nbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55CiskMDogZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuIFRoZW4gaW5zdGFsbAorJDA6IGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKKyQwOiBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgSWYgd2UgaGFkIHRvIHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMLCB3ZSdyZSBlbnN1cmVkIHRvIGhhdmUKKyAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAorICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgorICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J0ZyZWVUeXBlJworUEFDS0FHRV9UQVJOQU1FPSdmcmVldHlwZScKK1BBQ0tBR0VfVkVSU0lPTj0nMi42JworUEFDS0FHRV9TVFJJTkc9J0ZyZWVUeXBlIDIuNicKK1BBQ0tBR0VfQlVHUkVQT1JUPSdmcmVldHlwZUBub25nbnUub3JnJworUEFDS0FHRV9VUkw9JycKKworYWNfdW5pcXVlX2ZpbGU9ImZ0Y29uZmlnLmluIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCithY19oZWFkZXJfbGlzdD0KK2FjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworTElCT0JKUworYnVpbGRfbGlidG9vbF9saWJzCit3bAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworTElCU1NUQVRJQ19DT05GSUcKK0xJQlNfUFJJVkFURQorUkVRVUlSRVNfUFJJVkFURQorZnRtYWNfYworSEFSRkJVWlpfTElCUworSEFSRkJVWlpfQ0ZMQUdTCitMSUJQTkdfTElCUworTElCUE5HX0NGTEFHUworQlpJUDJfTElCUworQlpJUDJfQ0ZMQUdTCitaTElCX0xJQlMKK1pMSUJfQ0ZMQUdTCitYWF9BTlNJRkxBR1MKK1hYX0NGTEFHUworRlRTWVNfU1JDCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK1JNRElSCitFWEVFWFRfQlVJTEQKK0NDX0JVSUxECitMVF9TWVNfTElCUkFSWV9QQVRICitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorQVdLCitSQU5MSUIKK1NUUklQCithY19jdF9BUgorQVIKK0xOX1MKK05NCithY19jdF9EVU1QQklOCitEVU1QQklOCitMRAorRkdSRVAKK0VHUkVQCitHUkVQCitTRUQKK0xJQlRPT0wKK09CSkRVTVAKK0RMTFRPT0wKK0FTCitQS0dfQ09ORklHX0xJQkRJUgorUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHCitDUFAKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorZnRfdmVyc2lvbgordmVyc2lvbl9pbmZvCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK3dpdGhfYWl4X3NvbmFtZQord2l0aF9nbnVfbGQKK3dpdGhfc3lzcm9vdAorZW5hYmxlX2xpYnRvb2xfbG9jaworZW5hYmxlX2JpYXJjaF9jb25maWcKK2VuYWJsZV9tbWFwCit3aXRoX3psaWIKK3dpdGhfYnppcDIKK3dpdGhfcG5nCit3aXRoX2hhcmZidXp6Cit3aXRoX29sZF9tYWNfZm9udHMKK3dpdGhfZnNzcGVjCit3aXRoX2ZzcmVmCit3aXRoX3F1aWNrZHJhd190b29sYm94Cit3aXRoX3F1aWNrZHJhd19jYXJib24KK3dpdGhfYXRzCisnCisgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworaG9zdF9hbGlhcwordGFyZ2V0X2FsaWFzCitDQworQ0ZMQUdTCitMREZMQUdTCitMSUJTCitDUFBGTEFHUworQ1BQCitQS0dfQ09ORklHCitQS0dfQ09ORklHX1BBVEgKK1BLR19DT05GSUdfTElCRElSCitMVF9TWVNfTElCUkFSWV9QQVRICitaTElCX0NGTEFHUworWkxJQl9MSUJTCitCWklQMl9DRkxBR1MKK0JaSVAyX0xJQlMKK0xJQlBOR19DRkxBR1MKK0xJQlBOR19MSUJTCitIQVJGQlVaWl9DRkxBR1MKK0hBUkZCVVpaX0xJQlMnCisKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OworICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBGcmVlVHlwZSAyLjYgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9mcmVldHlwZV0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBGcmVlVHlwZSAyLjY6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZW5hYmxlLWJpYXJjaC1jb25maWcgIGluc3RhbGwgYmlhcmNoIGZ0Y29uZmlnLmggdG8gc3VwcG9ydCBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzIGJ5IHNpbmdsZSBmaWxlCisgIC0tZGlzYWJsZS1tbWFwICAgICAgICAgIGRvIG5vdCBjaGVjayBtbWFwKCkgYW5kIGRvIG5vdCB1c2UKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAtLXdpdGgtYWl4LXNvbmFtZT1haXh8c3ZyNHxib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIG9uIEFJWCwgW2RlZmF1bHQ9YWl4XS4KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdFs9RElSXSAgICBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLXpsaWI9W3llc3xub3xhdXRvXQorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Ugc3lzdGVtIHpsaWIgaW5zdGVhZCBvZiBpbnRlcm5hbCBsaWJyYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0PWF1dG9dCisgIC0td2l0aC1iemlwMj1beWVzfG5vfGF1dG9dCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgYnppcDIgY29tcHJlc3NlZCBmb250cyBbZGVmYXVsdD1hdXRvXQorICAtLXdpdGgtcG5nPVt5ZXN8bm98YXV0b10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBwbmcgY29tcHJlc3NlZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0PWF1dG9dCisgIC0td2l0aC1oYXJmYnV6ej1beWVzfG5vfGF1dG9dCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvdmUgYXV0by1oaW50aW5nIG9mIE9wZW5UeXBlIGZvbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0PWF1dG9dCisgIC0td2l0aC1vbGQtbWFjLWZvbnRzICAgIGFsbG93IE1hYyByZXNvdXJjZS1iYXNlZCBmb250cyB0byBiZSB1c2VkCisgIC0td2l0aC1mc3NwZWMgICAgICAgICAgIHVzZSBvYnNvbGV0ZSBGU1NwZWMgQVBJIG9mIE1hY09TLCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ9eWVzKQorICAtLXdpdGgtZnNyZWYgICAgICAgICAgICB1c2UgQ2FyYm9uIEZTUmVmIEFQSSBvZiBNYWNPUywgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0PXllcykKKyAgLS13aXRoLXF1aWNrZHJhdy10b29sYm94CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBNYWNPUyBRdWlja0RyYXcgaW4gVG9vbEJveCwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0PXllcykKKyAgLS13aXRoLXF1aWNrZHJhdy1jYXJib24gdXNlIE1hY09TIFF1aWNrRHJhdyBpbiBDYXJib24sIGlmIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdD15ZXMpCisgIC0td2l0aC1hdHMgICAgICAgICAgICAgIHVzZSBBcHBsZVR5cGVTZXJ2aWNlLCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ9eWVzKQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBQS0dfQ09ORklHX1BBVEgKKyAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aAorICBQS0dfQ09ORklHX0xJQkRJUgorICAgICAgICAgICAgICBwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoCisgIExUX1NZU19MSUJSQVJZX1BBVEgKKyAgICAgICAgICAgICAgVXNlci1kZWZpbmVkIHJ1bi10aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGguCisgIFpMSUJfQ0ZMQUdTIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFpMSUIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBaTElCX0xJQlMgICBsaW5rZXIgZmxhZ3MgZm9yIFpMSUIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBCWklQMl9DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgQlpJUDIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBCWklQMl9MSUJTICBsaW5rZXIgZmxhZ3MgZm9yIEJaSVAyLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgTElCUE5HX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBMSUJQTkcsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBMSUJQTkdfTElCUyBsaW5rZXIgZmxhZ3MgZm9yIExJQlBORywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEhBUkZCVVpaX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBIQVJGQlVaWiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEhBUkZCVVpaX0xJQlMKKyAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBIQVJGQlVaWiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK1JlcG9ydCBidWdzIHRvIDxmcmVldHlwZUBub25nbnUub3JnPi4KK19BQ0VPRgorYWNfc3RhdHVzPSQ/CitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKKyAgICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbHNlCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxfQUNFT0YKK0ZyZWVUeXBlIGNvbmZpZ3VyZSAyLjYKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQorCitDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQKK2ZpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jcHAKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSB0ZXN0IC14IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfcnVuCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGZyZWV0eXBlQG5vbmdudS5vcmcgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2NfY29tcHV0ZV9pbnQgTElORU5PIEVYUFIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyaWVzIHRvIGZpbmQgdGhlIGNvbXBpbGUtdGltZSB2YWx1ZSBvZiBFWFBSIGluIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzCisjIElOQ0xVREVTLCBzZXR0aW5nIFZBUiBhY2NvcmRpbmdseS4gUmV0dXJucyB3aGV0aGVyIHRoZSB2YWx1ZSBjb3VsZCBiZQorIyBjb21wdXRlZAorYWNfZm5fY19jb21wdXRlX2ludCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJGFjX21pZCArIDEgJiYgYWNfbG89JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgKyAxICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknIC0gMSAmJiBhY19oaT0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGFjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sbyAmJiBhY19taWQ9JGFzX3ZhbAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknICsgMSAmJiBhY19sbz0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbiAjKCgKKz8qKSBldmFsICIkMz1cJGFjX2xvIjsgYWNfcmV0dmFsPTAgOzsKKycnKSBhY19yZXR2YWw9MSA7OworZXNhYworICBlbHNlCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK3N0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCgkMikgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbGQiLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsdSIsIGkpOworICAgIH0KKyAgLyogRG8gbm90IG91dHB1dCBhIHRyYWlsaW5nIG5ld2xpbmUsIGFzIHRoaXMgY2F1c2VzIFxyXG4gY29uZnVzaW9uCisgICAgIG9uIHNvbWUgcGxhdGZvcm1zLiAgKi8KKyAgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvID4+Y29uZnRlc3QudmFsOyByZWFkICQzIDxjb25mdGVzdC52YWw7IGFjX3JldHZhbD0wCitlbHNlCisgIGFjX3JldHZhbD0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QudmFsCisKKyAgZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY19jb21wdXRlX2ludAorCisjIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19kZWNsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKyAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiAkYXNfZGVjbF9uYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKyNlbHNlCisgICh2b2lkKSAkYXNfZGVjbF9uYW1lOworI2VuZGlmCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19kZWNsCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBGcmVlVHlwZSAkYXNfbWUgMi42LCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICBmaQorZG9uZQorCitpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwgZmlsZXMKKyAgIyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuICBESkdQUCBlbXVsYXRlcyBpdCBhcyBhIHJlZ3VsYXIgZmlsZS4KKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRjYWNoZV9maWxlIiAmJiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN0ZGxpYi5oIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvcGFyYW0uaCIKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KKyAgICAgIGZpOzsKKyAgZXNhYworICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorICAgIGNhc2UgJGFjX25ld192YWwgaW4KKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisgICAgZXNhYworICBmaQorZG9uZQoraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKK2ZpCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCisjIERvbid0IGZvcmdldCB0byB1cGRhdGUgZG9jcy9WRVJTSU9OLkRMTCEKKwordmVyc2lvbl9pbmZvPScxODowOjEyJworCitmdF92ZXJzaW9uPWBlY2hvICR2ZXJzaW9uX2luZm8gfCB0ciA6IC5gCisKKworCisjIGNoZWNrcyBmb3Igc3lzdGVtIHR5cGUKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisKKworIyBjaGVja3MgZm9yIHByb2dyYW1zCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKworYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorCitlbHNlCisgIGFjX2ZpbGU9JycKK2ZpCitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249MC4yNAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCVBLR19DT05GSUc9IiIKKwlmaQorZmkKKworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40LjYnCittYWNyb19yZXZpc2lvbj0nMi40LjYnCisKKworCisKKworCisKKworCisKKworCisKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIiCit9CisKK2Nhc2UgJEVDSE8gaW4KKyAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiskYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorJGFzX2VjaG8gInByaW50IC1yIiA+JjY7IH0gOzsKKyAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhdCIgPiY1CiskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfU0VEIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0VHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRkdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0kbHRfY3ZfcGF0aF9MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9OTSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09JE5NCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKKwljYXNlICRidWlsZF9vcyBpbgorCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7CisJKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7CisJZXNhYworCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhayAyCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhayAyCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCBubyAhPSAiJGx0X2N2X3BhdGhfTk0iOyB0aGVuCisgIE5NPSRsdF9jdl9wYXRoX05NCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X25tX2ludGVyZmFjZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mNSkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JjUpCisgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX21heF9jbWRfbGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICBpPTAKKyAgdGVzdHN0cmluZz1BQkNECisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCisgICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKKworZmkKKwordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX3JlbG9hZF9mbGFnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFs0LTldKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbNDVdKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK29zMiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaDsKKyAgIyBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9CitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgaWYgdGVzdCAwIC1lcSAiJGFjX3N0YXR1cyI7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X2FyX2F0X2ZpbGUiOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiaXRyaWcqIHwgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tCQ0RUXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tCRFJUXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW0FCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKK2VzYWMKKworaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiJcCiskbHRfY19uYW1lX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgd2l0aCBsaWIgcHJlZml4IGFuZAorIyBzeW1ib2wgYWRkcmVzcy4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiJcCiskbHRfY19uYW1lX2xpYl9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIC9eICpTeW1ib2wgbmFtZSAqOiAve3NwbGl0KFwkIDAsc24sXCI6XCIpOyBzaT1zdWJzdHIoc25bMl0sMil9OyJcCisiICAgICAvXiAqVHlwZSAqOiBjb2RlL3twcmludCBcIlRcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGRhdGEve3ByaW50IFwiSVwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9XCJEXCJ9OyBcJCAwfi9cKFwpLipcfC97Zj1cIlRcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLGEsL1x8fFxyLyk7IHNwbGl0KGFbMl0scyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgZixzWzFdLHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IGYsdFsxXSxzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9Y29uZnRzdG0uJGFjX29iamV4dAorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0IHllcyA9ICIkcGlwZV93b3JrcyI7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3Jvb3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3Jvb3Q7CitlbHNlCisgIHdpdGhfc3lzcm9vdD1ubworZmkKKworCitsdF9zeXNyb290PQorY2FzZSAkd2l0aF9zeXNyb290IGluICMoCisgeWVzKQorICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9zeXNyb290IiA+JjUKKyRhc19lY2hvICIkd2l0aF9zeXNyb290IiA+JjY7IH0KKyAgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorICAgOzsKK2VzYWMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CiskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgd29ya2luZyBkZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB3b3JraW5nIGRkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfbHRfREQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKK2NhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCis6ICR7bHRfREQ6PSRERH0KK2lmIHRlc3QgLXogIiRsdF9ERCI7IHRoZW4KKyAgYWNfcGF0aF9sdF9ERF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZGQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX2x0X0REPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9sdF9ERCIgfHwgY29udGludWUKK2lmICIkYWNfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgorICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAorICAmJiBhY19jdl9wYXRoX2x0X0REPSIkYWNfcGF0aF9sdF9ERCIgYWNfcGF0aF9sdF9ERF9mb3VuZD06CitmaQorICAgICAgJGFjX3BhdGhfbHRfRERfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX2x0X0REIjsgdGhlbgorICAgIDoKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9sdF9ERD0kbHRfREQKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX2x0X0REIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9sdF9ERCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdHJ1bmNhdGVfYmluKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCitjYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQorbHRfY3ZfdHJ1bmNhdGVfYmluPQoraWYgIiRhY19jdl9wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCisgIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCisgICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJGFjX2N2X3BhdGhfbHRfREQgYnM9NDA5NiBjb3VudD0xIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0Cit0ZXN0IC16ICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRTRUQgLWUgNHEiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90cnVuY2F0ZV9iaW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl90cnVuY2F0ZV9iaW4iID4mNjsgfQorCisKKworCisKKworCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK2Z1bmNfY2NfYmFzZW5hbWUgKCkKK3sKKyAgICBmb3IgY2NfdGVtcCBpbiAkKiIiOyBkbworICAgICAgY2FzZSAkY2NfdGVtcCBpbgorICAgICAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgICAgIFwtKikgOzsKKyAgICAgICAgKikgYnJlYWs7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICBmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK30KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0zMgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT02NAorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCittaXBzNjQqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgZW11bD1lbGYKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqMzItYml0KikKKwllbXVsPSIke2VtdWx9MzIiCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWVtdWw9IiR7ZW11bH02NCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTVNCKikKKwllbXVsPSIke2VtdWx9YnRzbWlwIgorCTs7CisgICAgICAqTFNCKikKKwllbXVsPSIke2VtdWx9bHRzbWlwIgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpOMzIqKQorCWVtdWw9IiR7ZW11bH1uMzIiCisJOzsKKyAgICBlc2FjCisgICAgTEQ9IiR7TEQtbGR9IC1tICRlbXVsIgorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNhc2VzIG9ubHkgY292ZXIgdGhlCisgICMgc2l0dWF0aW9ucyB3aGVyZSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgKHN1Y2ggYXMgd2hlbgorICAjIGRvaW5nIDMyLWJpdCBjb21waWxhdGlvbiBmb3IgYSBob3N0IHdoZXJlIGxkIGRlZmF1bHRzIHRvIDY0LWJpdCwgb3IKKyAgIyB2aWNlIHZlcnNhKTsgdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSBubyBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIGRvCisgICMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorCSAgICAgICp4ODYtNjQqKQorCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorCQk7OworCSAgICAgICopCisJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkJOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgcG93ZXJwYzY0bGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMybHBwY2xpbnV4IgorCSAgICA7OworCSAgcG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwb3dlcnBjbGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKwkgICAgOzsKKwkgIHBvd2VycGMtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9jY19uZWVkc19iZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworZWxzZQorICBsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9JFNBVkVfQ0ZMQUdTCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKyAgICBNQU5JRkVTVF9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKyAgZmkKK2Vsc2UKKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CitpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorCisKKworCisKKworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCitpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiREU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9EU1lNVVRJTCIgPSB4OyB0aGVuCisgICAgRFNZTVVUSUw9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisgIGZpCitlbHNlCisgIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAoraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROTUVESVQiID4mNQorJGFzX2VjaG8gIiROTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCitpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisgICAgTk1FRElUPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisgIGZpCitlbHNlCisgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0xJUE89JGFjX2N2X3Byb2dfTElQTworaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElQTyIgPiY1CiskYXNfZWNobyAiJExJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgIGFjX2N0X0xJUE89JExJUE8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsaXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iJGFjX2N0X0xJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9MSVBPIiA9IHg7IHRoZW4KKyAgICBMSVBPPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIExJUE89JGFjX2N0X0xJUE8KKyAgZmkKK2Vsc2UKKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MPSRhY19jdl9wcm9nX09UT09MCitpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0wiID4mNQorJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgIGFjX2N0X09UT09MPSRPVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IiRhY19jdF9PVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisgICAgT1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w9JGFjX2N0X09UT09MCisgIGZpCitlbHNlCisgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKK2lmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorJGFzX2VjaG8gIiRPVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9IiRhY19jdF9PVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisgICAgT1RPT0w2ND0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisgIGZpCitlbHNlCisgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJExUX01VTFRJX01PRFVMRSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IjsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZm9yY2VfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdWywuXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCisgICAgZmkKKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCisjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKKyMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKKyMgaGF2aW5nIGEgZm9ybWF0OgorIyAiRElSWzpESVJdOiIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCisjICI6RElSWzpESVJdIgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgorIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCisjICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQorIyAiRElSWzpESVJdIgorIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCitmdW5jX211bmdlX3BhdGhfbGlzdCAoKQoreworICAgIGNhc2UgeCQyIGluCisgICAgeCkKKyAgICAgICAgOzsKKyAgICAqOikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICB4OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxIGAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgKjo6KikKKyAgICAgICAgZXZhbCAkMT1cIlwkJDFcIGAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcJCQxXCIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICBlc2FjCit9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworCisKKyMgU2V0IG9wdGlvbnMKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVM9JGFjX2N2X3Byb2dfQVMKK2lmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1CiskYXNfZWNobyAiJEFTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgYWNfY3RfQVM9JEFTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCitpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKyAgICBBUz0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVM9JGFjX2N0X0FTCisgIGZpCitlbHNlCisgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworCisKKworCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubworCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zaGFyZWQ9eWVzCitmaQorCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQorY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgorcG93ZXIqLSotYWl4WzUtOV0qLHllcykKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZS4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFpeC1zb25hbWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FpeF9zb25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FpeF9zb25hbWU7IGNhc2UgJHdpdGh2YWwgaW4KKyAgICBhaXh8c3ZyNHxib3RoKQorICAgICAgOzsKKyAgICAqKQorICAgICAgYXNfZm5fZXJyb3IgJD8gIlVua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWUiICIkTElORU5PIiA1CisgICAgICA7OworICAgIGVzYWMKKyAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZQorZWxzZQorICBpZiAke2x0X2N2X3dpdGhfYWl4X3NvbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT1haXgKK2ZpCisKKyAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZQorZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfYWl4X3NvbmFtZSIgPiY1CiskYXNfZWNobyAiJHdpdGhfYWl4X3NvbmFtZSIgPiY2OyB9CisgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorICAgICMgRm9yIHRoZSBBSVggd2F5IG9mIG11bHRpbGliLCB3ZSBuYW1lIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIKKyAgICAjIGJhc2VkIG9uIHRoZSBiaXR3aWR0aCB1c2VkLCB0cmFkaXRpb25hbGx5ICdzaHIubycgb3IgJ3Nocl82NC5vJywKKyAgICAjIGFuZCAnc2hyLmltcCcgb3IgJ3Nocl82NC5pbXAnLCByZXNwZWN0aXZlbHksIGZvciB0aGUgSW1wb3J0IEZpbGUuCisgICAgIyBFdmVuIHdoZW4gR05VIGNvbXBpbGVycyBpZ25vcmUgT0JKRUNUX01PREUgYnV0IG5lZWQgJy1tYWl4NjQnIGZsYWcsCisgICAgIyB0aGUgQUlYIHRvb2xjaGFpbiB3b3JrcyBiZXR0ZXIgd2l0aCBPQkpFQ1RfTU9ERSBzZXQgKGRlZmF1bHQgMzIpLgorICAgIGlmIHRlc3QgNjQgPSAiJHtPQkpFQ1RfTU9ERS0zMn0iOyB0aGVuCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHJfNjQKKyAgICBlbHNlCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHIKKyAgICBmaQorICBmaQorICA7OworKikKKyAgd2l0aF9haXhfc29uYW1lPWFpeAorICA7OworZXNhYworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9JGx0bWFpbgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUworCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK2Z1bmNfY2NfYmFzZW5hbWUgJGNvbXBpbGVyCitjY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvImZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0kQ0MKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0KKworaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIjsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworCisgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iLVhjb21waWxlciAkbHRfcHJvZ19jb21waWxlcl9waWMiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIG5hZ2ZvciopCisgICAgICAgICMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSckd2wtYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCTs7CisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctcXBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFsxLTddLiogfCAqU3VuKkZvcnRyYW4qXCA4LlswLTNdKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKKwkgIDs7CisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgOzsKKyAgICAgICAgKkludGVsKlwgW0NGXSpDb21waWxlciopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisJICA7OworCSpQb3J0bGFuZFwgR3JvdXAqKQorCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LY29uZm9ybV9waWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyI7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIjsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCisgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorICBtb2R1bGVfY21kcz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXM9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KKyAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHdsJworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwlwcmVmaXhfY21kcz0iJFNFRCJ+CisJaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwlmaX4KKwlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXRjYyopCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbm5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlicz1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgbm8gPSAiJGxkX3NobGlicyI7IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIiAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9CisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCisJIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKKwkjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcworCSMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCSMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCisJIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQorCSMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSdgZnVuY19lY2hvX2FsbCAkTk0gfCAkU0VEIC1lICdcJydzL0JcKFteQl0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChzdWJzdHIoXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgorCSMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZworCSMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KKwkjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKKwkjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisJIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwkjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcworCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubworCSMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKKwkgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgZmkKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHdsLWYsJworICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICBhaXgsKikgOzsgIyB0cmFkaXRpb25hbCwgbm8gaW1wb3J0IGZpbGUKKyAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorCSMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKwloYXJkY29kZV9kaXJlY3Q9bm8KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR3bC1HJworCWZpCisJIyBOZWVkIHRvIGVuc3VyZSBydW50aW1lIGxpbmtpbmcgaXMgZGlzYWJsZWQgZm9yIHRoZSB0cmFkaXRpb25hbAorCSMgc2hhcmVkIGxpYnJhcnksIG9yIHRoZSBsaW5rZXIgbWF5IGV2ZW50dWFsbHkgZmluZCBzaGFyZWQgbGlicmFyaWVzCisJIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KKwlzaGFyZWRfZmxhZ19haXg9Jy1zaGFyZWQnCisJc2hhcmVkX2ZsYWdfc3ZyND0nLXNoYXJlZCAkd2wtRycKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgIGZpCisJICBzaGFyZWRfZmxhZ19haXg9JyR3bC1iTTpTUkUnCisJICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgZWxzZQorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm9rJworCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmR+JE1LRElSICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCSAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCisJICBjb21waWxlcl9mbGFnc19maWx0ZXJlZD0nYGZ1bmNfZWNob19hbGwgIiRjb21waWxlcl9mbGFncyAiIHwgJFNFRCAtZSAicyUtYnJ0bFxcKFssIF1cXCklLWJlcm9rXFwxJWciYCcKKwkgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kQ0MgJyRzaGFyZWRfZmxhZ19haXgnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lJworCSAgZmkKKwkgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKKwkgIGVsc2UKKwkgICAgIyB1c2VkIGJ5IC1kbHByZW9wZW4gdG8gZ2V0IHRoZSBzeW1ib2xzCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgZmkKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCWZpbGVfbGlzdF9zcGVjPSdAJworCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJZXhjbHVkZV9leHBzeW1zPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCSMgRG9uJ3QgdXNlIHJhbmxpYgorCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWN+CisgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfX2IrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPW5vCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgIExERkxBR1M9IiRMREZMQUdTIC1iIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworZWxzZQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKK2ZpCisKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR3bC1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wvZGV2L251bGwiCisJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworZWxzZQorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zICR3bC1leHBvcnRzX2ZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbGRfc2hsaWJzPXllcworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCWVsc2UKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgc2hyZXh0X2NtZHM9LmRsbAorICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCXdsYXJjPSckd2wnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR3bCcKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0ICckd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0IHNlcXVlbnQgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR3bC16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Cit0ZXN0IG5vID0gIiRsZF9zaGxpYnMiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LywvTFIvJyA7OworICAgICopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8nIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSdzfD1cKFtBLVphLXpdOlwpfFwxfGcnIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCisgICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCisgIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KKyAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKKyAgICBsdF9tdWx0aV9vc19kaXI9CisgICAgOzsKKyAgZXNhYworICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKKyAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7CisgIGx0X2ZvbyA9ICIiOworICBsdF9jb3VudCA9IDA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KKyAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAnc3wvXChbQS1aYS16XTpcKXxcMXxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0uc28KK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgOzsKKworYWl4WzQtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIFVzaW5nIEltcG9ydCBGaWxlcyBhcyBhcmNoaXZlIG1lbWJlcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQKKyAgICAjIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgb2Ygc2hhcmVkIGxpYnJhcnkgYXJjaGl2ZXMgb24gQUlYLiBXaGlsZQorICAgICMgdGhpcyB3b3VsZCB3b3JrIGZvciBib3RoIHdpdGggYW5kIHdpdGhvdXQgcnVudGltZSBsaW5raW5nLCBpdCB3aWxsCisgICAgIyBwcmV2ZW50IHN0YXRpYyBsaW5raW5nIG9mIHN1Y2ggYXJjaGl2ZXMuIFNvIHdlIGRvIGZpbGVuYW1lLWJhc2VkCisgICAgIyBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHdpdGggLnNvIGV4dGVuc2lvbiBvbmx5LCB3aGljaCBpcyB1c2VkCisgICAgIyB3aGVuIGJvdGggcnVudGltZSBsaW5raW5nIGFuZCBzaGFyZWQgbGlua2luZyBpcyBlbmFibGVkLgorICAgICMgVW5mb3J0dW5hdGVseSwgcnVudGltZSBsaW5raW5nIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UsIHNvIHdlIGRvCisgICAgIyBub3Qgd2FudCB0aGlzIHRvIGJlIHRoZSBkZWZhdWx0IGV2ZW50dWFsbHkuIEFsc28sIHdlIHVzZSB0aGUKKyAgICAjIHZlcnNpb25lZCAuc28gbGlicyBmb3IgZXhlY3V0YWJsZXMgb25seSBpZiB0aGVyZSBpcyB0aGUgLWJydGwKKyAgICAjIGxpbmtlciBmbGFnIGluIExERkxBR1MgYXMgd2VsbCwgb3IgLS13aXRoLWFpeC1zb25hbWU9c3ZyNCBvbmx5LgorICAgICMgVG8gYWxsb3cgZm9yIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgc3VwcG9ydCwgd2UgbmVlZCB0byBjcmVhdGUKKyAgICAjIGxpYk5BTUUuc28uViBhcyBhbiBhcmNoaXZlIGZpbGUsIGNvbnRhaW5pbmc6CisgICAgIyAqKSBhbiBJbXBvcnQgRmlsZSwgcmVmZXJyaW5nIHRvIHRoZSB2ZXJzaW9uZWQgZmlsZW5hbWUgb2YgdGhlCisgICAgIyAgICBhcmNoaXZlIGFzIHdlbGwgYXMgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlciwgdGVsbGluZyB0aGUKKyAgICAjICAgIGJpdHdpZHRoICgzMiBvciA2NCkgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBhbmQgcHJvdmlkaW5nIHRoZQorICAgICMgICAgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgZXZlbnR1YWxseQorICAgICMgICAgZGVjb3JhdGVkIHdpdGggdGhlICd3ZWFrJyBrZXl3b3JkCisgICAgIyAqKSB0aGUgc2hhcmVkIG9iamVjdCB3aXRoIHRoZSBGX0xPQURPTkxZIGZsYWcgc2V0LCB0byByZWFsbHkgYXZvaWQKKyAgICAjICAgIGl0IGJlaW5nIHNlZW4gYnkgdGhlIGxpbmtlci4KKyAgICAjIEF0IHJ1biB0aW1lIHdlIGJldHRlciB1c2UgdGhlIHJlYWwgZmlsZSByYXRoZXIgdGhhbiBhbm90aGVyIHN5bWxpbmssCisgICAgIyBidXQgZm9yIGxpbmsgdGltZSB3ZSBjcmVhdGUgdGhlIHN5bWxpbmsgbGliTkFNRS5zbyAtPiBsaWJOQU1FLnNvLlYKKworICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGFpeCx5ZXMpICMgdHJhZGl0aW9uYWwgbGlidG9vbAorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCB1bnZlcnNpb25hYmxlIGxpYi5zbycKKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgYWl4LG5vKSAjIHRyYWRpdGlvbmFsIEFJWCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIGxpYi5hKGxpYi5zby5WKScKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgOzsKKyAgICBzdnI0LCopICMgZnVsbCBzdnI0IG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pLCBsaWIuYShsaWIuc28uVikiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5hIG5lZWRzIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSIkcmVhbG5hbWUifmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbGlua25hbWUifiRpbnN0YWxsX3NoYXJlZF9wcm9nICIkZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCJ+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXMgJG9sZF9saWJyYXJ5OyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbiJ+dGVzdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgPSAiJG4iIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLG5vKSAjIGJvdGgsIHByZWZlciBhaXgKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLmEobGliLnNvLlYpLCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuc28uViBhbmQgc3ltbGluayBsaWJOQU1FLnNvIG5lZWQgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8ICRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSRyZWFsbmFtZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbGlua25hbWUifihjZCAiJGRlc3RkaXIiICYmICRMTl9TIC1mICRkbG5hbWUgJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyknCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIn5mb3IgbiBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJG4ifmZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvIicKKyAgICAgIDs7CisgICAgZXNhYworICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKKyAgICBmaQorICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBJZGVhbGx5LCB3ZSBjb3VsZCB1c2UgbGRjb25maWcgdG8gcmVwb3J0ICphbGwqIGRpcmVjdG9yZXMgd2hpY2ggYXJlCisgICMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcywgaG93ZXZlciB0aGlzIGlzIHN0aWxsIG5vdCBwb3NzaWJsZS4gIEFzaWRlIGZyb20gbm90CisgICMgYmVpbmcgY2VydGFpbiAvc2Jpbi9sZGNvbmZpZyBpcyBhdmFpbGFibGUsIGNvbW1hbmQKKyAgIyAnbGRjb25maWcgLU4gLVggLXYgfCBncmVwIF4vJyBvbiA2NGJpdCBGZWRvcmEgZG9lcyBub3QgcmVwb3J0IC91c3IvbGliNjQsCisgICMgZXZlbiB0aG91Z2ggaXQgaXMgc2VhcmNoZWQgYXQgcnVuLXRpbWUuICBUcnkgdG8gZG8gdGhlIGJlc3QgZ3Vlc3MgYnkKKyAgIyBhcHBlbmRpbmcgbGQuc28uY29uZiBjb250ZW50cyAoYW5kIGluY2x1ZGVzKSB0byB0aGUgc2VhcmNoIHBhdGguCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgT1MvMiBjYW4gb25seSBsb2FkIGEgRExMIHdpdGggYSBiYXNlIG5hbWUgb2YgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuCisgIHNvbmFtZV9zcGVjPSdgdGVzdCAtbiAiJG9zMmRsbG5hbWUiICYmIGxpYm5hbWU9IiRvczJkbGxuYW1lIjsKKyAgICB2PSQoJEVDSE8gJHJlbGVhc2UkdmVyc3VmZml4IHwgdHIgLWQgLi0pOworICAgIG49JCgkRUNITyAkbGlibmFtZSB8IGN1dCAtYiAtJCgoOCAtICR7I3Z9KSkgfCB0ciAuIF8pOworICAgICRFQ0hPICRuJHZgJHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfV9kbGwuJGxpYmV4dCcKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUJFR0lOTElCUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgIGZpJworICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICRSTSBcJGRscGF0aCcKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9c2NvCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworZmkKKworIyByZW1lbWJlciB1bmF1Z21lbnRlZCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggY29udGVudCBmb3IgbGlidG9vbCBzY3JpcHQgZGVjbHMuLi4KK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9JHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgLi4uIGJ1dCBpdCBuZWVkcyBMVF9TWVNfTElCUkFSWV9QQVRIIG11bmdpbmcgZm9yIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvZGUKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKKworIyB0byBiZSB1c2VkIGFzIGRlZmF1bHQgTFRfU1lTX0xJQlJBUllfUEFUSCB2YWx1ZSBpbiBnZW5lcmF0ZWQgbGlidG9vbAorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kTFRfU1lTX0xJQlJBUllfUEFUSAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKKyAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAmJgorICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb24iIHx8CisgICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisgIGlmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbAorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPWR5bGQKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKworZmkKKworICAgIDs7CisKKyAgdHBmKikKKyAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCisgICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICAgIDs7CisKKyAgKikKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1zaGxfbG9hZAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKK2Vsc2UKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX2RsZF9saW5rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsZF9saW5rICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxkX2xpbmsgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0kTElCUworICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CisKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICBmaQorCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKyAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSRsdF9zYXZlX0NDCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorCisKKworCisjIE9ubHkgZXhwYW5kIG9uY2U6CisKKworCisKKyMgY2hlY2tzIGZvciBuYXRpdmUgcHJvZ3JhbXMgdG8gZ2VuZXJhdGUgYnVpbGRpbmcgdG9vbAorCitpZiB0ZXN0ICR7Y3Jvc3NfY29tcGlsaW5nfSA9IHllczsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YnVpbGR9LWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHtidWlsZH0tZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQ19CVUlMRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQ19CVUlMRCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQ19CVUlMRD0iJENDX0JVSUxEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0NfQlVJTEQ9IiR7YnVpbGR9LWdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQ19CVUlMRD0kYWNfY3ZfcHJvZ19DQ19CVUlMRAoraWYgdGVzdCAtbiAiJENDX0JVSUxEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDX0JVSUxEIiA+JjUKKyRhc19lY2hvICIkQ0NfQlVJTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC16ICIke0NDX0JVSUxEfSIgJiYgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0NfQlVJTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0NfQlVJTEQiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0NfQlVJTEQ9IiRDQ19CVUlMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDX0JVSUxEPSJnY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0NfQlVJTEQ9JGFjX2N2X3Byb2dfQ0NfQlVJTEQKK2lmIHRlc3QgLW4gIiRDQ19CVUlMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQ19CVUlMRCIgPiY1CiskYXNfZWNobyAiJENDX0JVSUxEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAteiAiJHtDQ19CVUlMRH0iICYmICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQ19CVUlMRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQ19CVUlMRCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQ19CVUlMRD0iJENDX0JVSUxEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0NfQlVJTEQ9ImNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDX0JVSUxECisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQ19CVUlMRCB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0NfQlVJTEQ9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBmaQorZmkKK2ZpCitmaQorQ0NfQlVJTEQ9JGFjX2N2X3Byb2dfQ0NfQlVJTEQKK2lmIHRlc3QgLW4gIiRDQ19CVUlMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQ19CVUlMRCIgPiY1CiskYXNfZWNobyAiJENDX0JVSUxEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAteiAiJHtDQ19CVUlMRH0iICYmIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBuYXRpdmUgQyBjb21waWxlciIgIiRMSU5FTk8iIDUKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgbmF0aXZlIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgbmF0aXZlIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CisgIHJtIC1mIGEuKiBiLiogYV9vdXQuZXhlIGNvbmZ0ZXN0LioKKyAgZWNobyA+IGNvbmZ0ZXN0LmMgImludCBtYWluKCkgeyByZXR1cm4gMDt9IgorICAke0NDX0JVSUxEfSBjb25mdGVzdC5jIHx8IGFzX2ZuX2Vycm9yICQ/ICJuYXRpdmUgQyBjb21waWxlciBpcyBub3Qgd29ya2luZyIgIiRMSU5FTk8iIDUKKyAgcm0gLWYgY29uZnRlc3QuYworICBpZiB0ZXN0IC14IGEub3V0IC1vIC14IGIub3V0IC1vIC14IGNvbmZ0ZXN0OyB0aGVuCisgICAgRVhFRVhUX0JVSUxEPSIiCisgIGVsaWYgdGVzdCAteCBhX291dC5leGUgLW8gLXggY29uZnRlc3QuZXhlOyB0aGVuCisgICAgRVhFRVhUX0JVSUxEPSIuZXhlIgorICBlbGlmIHRlc3QgLXggY29uZnRlc3QuKjsgdGhlbgorICAgIEVYRUVYVF9CVUlMRD1gZWNobyBjb25mdGVzdC4qIHwgc2VkIC1uICcxcy9eLipcLi8uLydgCisgIGZpCisgIHJtIC1mIGEuKiBiLiogYV9vdXQuZXhlIGNvbmZ0ZXN0LioKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRFWEVFWFRfQlVJTEQiID4mNQorJGFzX2VjaG8gIiRFWEVFWFRfQlVJTEQiID4mNjsgfQorZWxzZQorICBDQ19CVUlMRD0ke0NDfQorICBFWEVFWFRfQlVJTEQ9JHtFWEVFWFR9CitmaQorCisKKworCisKKyMgYXV4aWxpYXJ5IHByb2dyYW1zCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicm1kaXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJtZGlyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19STURJUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSTURJUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19STURJUj0iJFJNRElSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUk1ESVI9InJtZGlyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JNRElSPSRhY19jdl9wcm9nX1JNRElSCitpZiB0ZXN0IC1uICIkUk1ESVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUk1ESVIiID4mNQorJGFzX2VjaG8gIiRSTURJUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworIyBTaW5jZSB0aGlzIGZpbGUgd2lsbCBiZSBmaW5hbGx5IG1vdmVkIHRvIGFub3RoZXIgZGlyZWN0b3J5IHdlIG1ha2UKKyMgdGhlIHBhdGggb2YgdGhlIGluc3RhbGwgc2NyaXB0IGFic29sdXRlLiAgVGhpcyBzbWFsbCBjb2RlIHNuaXBwZXQgaGFzCisjIGJlZW4gdGFrZW4gZnJvbSBhdXRvbWFrZSdzIGB5bHdyYXAnIHNjcmlwdC4KKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCitjYXNlICIkSU5TVEFMTCIgaW4KKy8qKQorICA7OworKi8qKQorICBJTlNUQUxMPSJgcHdkYC8kSU5TVEFMTCIKKyAgOzsKK2VzYWMKKworCisjIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitmb3IgYWNfaGVhZGVyIGluIGZjbnRsLmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyMgY2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzID0geyAwLCAwIH07CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICAgIGNoYXIgdHg7CisgICAgY2hhciAqdCA9ICZ0eDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZywgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH0gYng7CisgICAgc3RydWN0IHMgKmIgPSAmYng7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGFjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBjb25zdCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGludCkpIiAiYWNfY3Zfc2l6ZW9mX2ludCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfaW50PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9JTlQgJGFjX2N2X3NpemVvZl9pbnQKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nPTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nIiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nCitfQUNFT0YKKworCisKKworIyBjaGVjayB3aGV0aGVyIGNwcCBjb21wdXRhdGlvbiBvZiBzaXplIG9mIGludCBhbmQgbG9uZyBpbiBmdGNvbmZpZy5pbiB3b3JrcworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY3BwIGNvbXB1dGF0aW9uIG9mIGJpdCBsZW5ndGggaW4gZnRjb25maWcuaW4gd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjcHAgY29tcHV0YXRpb24gb2YgYml0IGxlbmd0aCBpbiBmdGNvbmZpZy5pbiB3b3Jrcy4uLiAiID4mNjsgfQorb3JpZ19DUFBGTEFHUz0iJHtDUFBGTEFHU30iCitDUFBGTEFHUz0iLUkke3NyY2Rpcn0gLUkuICR7Q1BQRkxBR1N9IgorCithY19jbGVhbl9maWxlcz0KK2ZvciBmIGluIGZ0MmJ1aWxkLmggZnRvcHRpb24uaCBmdHN0ZGxpYi5oOyBkbworICBpZiB0ZXN0ICEgLWYgJGY7IHRoZW4KKyAgICBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRmIgorICAgIHRvdWNoICRmCisgIGZpCitkb25lCisKK2NhdCA+IGNvbmZ0ZXN0LmMgPDxcX0FDRU9GCisjaW5jbHVkZSA8bGltaXRzLmg+CisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggImZ0b3B0aW9uLmgiCisjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggImZ0c3RkbGliLmgiCisjZGVmaW5lIEZUX1VJTlRfTUFYICBVSU5UX01BWAorI2RlZmluZSBGVF9VTE9OR19NQVggVUxPTkdfTUFYCisjaW5jbHVkZSAiZnRjb25maWcuaW4iCitfQUNFT0YKK2VjaG8gPj4gY29uZnRlc3QuYyAiI2lmIEZUX1NJWkVPRl9JTlQgPT0gIiR7YWNfY3Zfc2l6ZW9mX2ludH0KK2VjaG8gPj4gY29uZnRlc3QuYyAiYWNfY3BwX2Z0X3NpemVvZl9pbnQ9IiR7YWNfY3Zfc2l6ZW9mX2ludH0KK2VjaG8gPj4gY29uZnRlc3QuYyAiI2VuZGlmIgorZWNobyA+PiBjb25mdGVzdC5jICIjaWYgRlRfU0laRU9GX0xPTkcgPT0gIiR7YWNfY3Zfc2l6ZW9mX2xvbmd9CitlY2hvID4+IGNvbmZ0ZXN0LmMgImFjX2NwcF9mdF9zaXplb2ZfbG9uZz0iJHthY19jdl9zaXplb2ZfbG9uZ30KK2VjaG8gPj4gY29uZnRlc3QuYyAiI2VuZGlmIgorCiske0NQUH0gJHtDUFBGTEFHU30gY29uZnRlc3QuYyB8ICR7R1JFUH0gYWNfY3BwX2Z0ID4gY29uZnRlc3Quc2gKK2V2YWwgYGNhdCBjb25mdGVzdC5zaGAKK3JtIC1mIGNvbmZ0ZXN0LiogJGFjX2NsZWFuX2ZpbGVzCisKK2lmIHRlc3QgeCAhPSAieCR7YWNfY3BwX2Z0X3NpemVvZl9pbnR9IiBcCisgICAtYSB4ICE9IHgiJHthY19jcHBfZnRfc2l6ZW9mX2xvbmd9IjsgdGhlbgorICB1bnNldCBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzCitlbHNlCisgIGZ0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXM9eWVzCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYmlhcmNoLWNvbmZpZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9iaWFyY2hfY29uZmlnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYmlhcmNoX2NvbmZpZzsKK2ZpCisKKworY2FzZSA6JHtmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzfToke2VuYWJsZV9iaWFyY2hfY29uZmlnfTogaW4KKyAgOnllczp5ZXM6KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBicm9rZW4gYnV0IHVzZSBpdCIgPiY1CiskYXNfZWNobyAiYnJva2VuIGJ1dCB1c2UgaXQiID4mNjsgfQorICAgIHVuc2V0IGZ0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXMKKyAgICA7OworICA6Om5vOikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogd29ya3MgYnV0IGlnbm9yZSBpdCIgPiY1CiskYXNfZWNobyAid29ya3MgYnV0IGlnbm9yZSBpdCIgPiY2OyB9CisgICAgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcz15ZXMKKyAgICA7OworICA6OnllczogfCA6OjopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB1bnNldCBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzPXllcworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgeCIke2Z0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXN9IiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUyAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworQ1BQRkxBR1M9IiR7b3JpZ19DUFBGTEFHU30iCisKKworIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisKKyMgSGVyZSB3ZSBjaGVjayB3aGV0aGVyIHdlIGNhbiB1c2Ugb3VyIG1tYXAgZmlsZSBjb21wb25lbnQuCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tbWFwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21tYXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tbWFwOyBlbmFibGVfbW1hcD0ibm8iCitlbHNlCisgIGVuYWJsZV9tbWFwPSJ5ZXMiCitmaQorCitpZiB0ZXN0ICJ4JHtlbmFibGVfbW1hcH0iICE9ICJ4bm8iOyB0aGVuCisKKworCisgIGZvciBhY19oZWFkZXIgaW4gJGFjX2hlYWRlcl9saXN0CitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisKKworCitmb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwYWdlc2l6ZSIgImFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBtbWFwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorLyogbWFsbG9jIG1pZ2h0IGhhdmUgYmVlbiByZW5hbWVkIGFzIHJwbF9tYWxsb2MuICovCisjdW5kZWYgbWFsbG9jCisKKy8qIFRoYW5rcyB0byBNaWtlIEhhZXJ0ZWwgYW5kIEppbSBBdmVyYSBmb3IgdGhpcyB0ZXN0LgorICAgSGVyZSBpcyBhIG1hdHJpeCBvZiBtbWFwIHBvc3NpYmlsaXRpZXM6CisJbW1hcCBwcml2YXRlIG5vdCBmaXhlZAorCW1tYXAgcHJpdmF0ZSBmaXhlZCBhdCBzb21ld2hlcmUgY3VycmVudGx5IHVubWFwcGVkCisJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorCW1tYXAgc2hhcmVkIG5vdCBmaXhlZAorCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKwltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKKyAgIEZvciBwcml2YXRlIG1hcHBpbmdzLCB3ZSBzaG91bGQgdmVyaWZ5IHRoYXQgY2hhbmdlcyBjYW5ub3QgYmUgcmVhZCgpCisgICBiYWNrIGZyb20gdGhlIGZpbGUsIG5vciBtbWFwJ3MgYmFjayBmcm9tIHRoZSBmaWxlIGF0IGEgZGlmZmVyZW50CisgICBhZGRyZXNzLiAgKFRoZXJlIGhhdmUgYmVlbiBzeXN0ZW1zIHdoZXJlIHByaXZhdGUgd2FzIG5vdCBjb3JyZWN0bHkKKyAgIGltcGxlbWVudGVkIGxpa2UgdGhlIGluZmFtb3VzIGkzODYgc3ZyNC4wLCBhbmQgc3lzdGVtcyB3aGVyZSB0aGUKKyAgIFZNIHBhZ2UgY2FjaGUgd2FzIG5vdCBjb2hlcmVudCB3aXRoIHRoZSBmaWxlIHN5c3RlbSBidWZmZXIgY2FjaGUKKyAgIGxpa2UgZWFybHkgdmVyc2lvbnMgb2YgRnJlZUJTRCBhbmQgcG9zc2libHkgY29udGVtcG9yYXJ5IE5ldEJTRC4pCisgICBGb3Igc2hhcmVkIG1hcHBpbmdzLCB3ZSBzaG91bGQgY29udmVyc2VseSB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGdldAorICAgcHJvcGFnYXRlZCBiYWNrIHRvIGFsbCB0aGUgcGxhY2VzIHRoZXkncmUgc3VwcG9zZWQgdG8gYmUuCisKKyAgIEdyZXAgd2FudHMgcHJpdmF0ZSBmaXhlZCBhbHJlYWR5IG1hcHBlZC4KKyAgIFRoZSBtYWluIHRoaW5ncyBncmVwIG5lZWRzIHRvIGtub3cgYWJvdXQgbW1hcCBhcmU6CisgICAqIGRvZXMgaXQgZXhpc3QgYW5kIGlzIGl0IHNhZmUgdG8gd3JpdGUgaW50byB0aGUgbW1hcCdkIGFyZWEKKyAgICogaG93IHRvIHVzZSBpdCAoQlNEIHZhcmlhbnRzKSAgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2lmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiAhZGVmaW5lZCBIQVZFX1NURExJQl9ICitjaGFyICptYWxsb2MgKCk7CisjZW5kaWYKKworLyogVGhpcyBtZXNzIHdhcyBjb3BpZWQgZnJvbSB0aGUgR05VIGdldHBhZ2VzaXplLmguICAqLworI2lmbmRlZiBIQVZFX0dFVFBBR0VTSVpFCisjIGlmZGVmIF9TQ19QQUdFU0laRQorIyAgZGVmaW5lIGdldHBhZ2VzaXplKCkgc3lzY29uZihfU0NfUEFHRVNJWkUpCisjIGVsc2UgLyogbm8gX1NDX1BBR0VTSVpFICovCisjICBpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBFWEVDX1BBR0VTSVpFCisjICAgZWxzZSAvKiBubyBFWEVDX1BBR0VTSVpFICovCisjICAgIGlmZGVmIE5CUEcKKyMgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEcgKiBDTFNJWkUKKyMgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICBkZWZpbmUgQ0xTSVpFIDEKKyMgICAgIGVuZGlmIC8qIG5vIENMU0laRSAqLworIyAgICBlbHNlIC8qIG5vIE5CUEcgKi8KKyMgICAgIGlmZGVmIE5CUEMKKyMgICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBDCisjICAgICBlbHNlIC8qIG5vIE5CUEMgKi8KKyMgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBQQUdFU0laRQorIyAgICAgIGVuZGlmIC8qIFBBR0VTSVpFICovCisjICAgICBlbmRpZiAvKiBubyBOQlBDICovCisjICAgIGVuZGlmIC8qIG5vIE5CUEcgKi8KKyMgICBlbmRpZiAvKiBubyBFWEVDX1BBR0VTSVpFICovCisjICBlbHNlIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0ggKi8KKyMgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSA4MTkyCS8qIHB1bnQgdG90YWxseSAqLworIyAgZW5kaWYgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworIyBlbmRpZiAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKworI2VuZGlmIC8qIG5vIEhBVkVfR0VUUEFHRVNJWkUgKi8KKworaW50CittYWluICgpCit7CisgIGNoYXIgKmRhdGEsICpkYXRhMiwgKmRhdGEzOworICBjb25zdCBjaGFyICpjZGF0YTI7CisgIGludCBpLCBwYWdlc2l6ZTsKKyAgaW50IGZkLCBmZDI7CisKKyAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSAoKTsKKworICAvKiBGaXJzdCwgbWFrZSBhIGZpbGUgd2l0aCBzb21lIGtub3duIGdhcmJhZ2UgaW4gaXQuICovCisgIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiAxOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7CisgIHVtYXNrICgwKTsKKyAgZmQgPSBjcmVhdCAoImNvbmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gMjsKKyAgaWYgKHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorICAgIHJldHVybiAzOworICBjbG9zZSAoZmQpOworCisgIC8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIHRhaWwgb2YgYSBwYWdlIGlzIHplcm8tZmlsbGVkLiAgRmlsZSBtdXN0IGhhdmUKKyAgICAgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2Ugd2UgcmlzayBTSUdCVVMgZm9yIGVudGlyZSBwYWdlLiAgKi8KKyAgZmQyID0gb3BlbiAoImNvbmZ0ZXN0LnR4dCIsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKyAgaWYgKGZkMiA8IDApCisgICAgcmV0dXJuIDQ7CisgIGNkYXRhMiA9ICIiOworICBpZiAod3JpdGUgKGZkMiwgY2RhdGEyLCAxKSAhPSAxKQorICAgIHJldHVybiA1OworICBkYXRhMiA9IChjaGFyICopIG1tYXAgKDAsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZDIsIDBMKTsKKyAgaWYgKGRhdGEyID09IE1BUF9GQUlMRUQpCisgICAgcmV0dXJuIDY7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEyICsgaSkpCisgICAgICByZXR1cm4gNzsKKyAgY2xvc2UgKGZkMik7CisgIGlmIChtdW5tYXAgKGRhdGEyLCBwYWdlc2l6ZSkpCisgICAgcmV0dXJuIDg7CisKKyAgLyogTmV4dCwgdHJ5IHRvIG1tYXAgdGhlIGZpbGUgYXQgYSBmaXhlZCBhZGRyZXNzIHdoaWNoIGFscmVhZHkgaGFzCisgICAgIHNvbWV0aGluZyBlbHNlIGFsbG9jYXRlZCBhdCBpdC4gIElmIHdlIGNhbiwgYWxzbyBtYWtlIHN1cmUgdGhhdAorICAgICB3ZSBzZWUgdGhlIHNhbWUgZ2FyYmFnZS4gICovCisgIGZkID0gb3BlbiAoImNvbmZ0ZXN0Lm1tYXAiLCBPX1JEV1IpOworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiA5OworICBpZiAoZGF0YTIgIT0gbW1hcCAoZGF0YTIsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgIE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELCBmZCwgMEwpKQorICAgIHJldHVybiAxMDsKKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgaWYgKCooZGF0YSArIGkpICE9ICooZGF0YTIgKyBpKSkKKyAgICAgIHJldHVybiAxMTsKKworICAvKiBGaW5hbGx5LCBtYWtlIHN1cmUgdGhhdCBjaGFuZ2VzIHRvIHRoZSBtYXBwZWQgYXJlYSBkbyBub3QKKyAgICAgcGVyY29sYXRlIGJhY2sgdG8gdGhlIGZpbGUgYXMgc2VlbiBieSByZWFkKCkuICAoVGhpcyBpcyBhIGJ1ZyBvbgorICAgICBzb21lIHZhcmlhbnRzIG9mIGkzODYgc3ZyNC4wLikgICovCisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgICooZGF0YTIgKyBpKSA9ICooZGF0YTIgKyBpKSArIDE7CisgIGRhdGEzID0gKGNoYXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7CisgIGlmICghZGF0YTMpCisgICAgcmV0dXJuIDEyOworICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisgICAgcmV0dXJuIDEzOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMyArIGkpKQorICAgICAgcmV0dXJuIDE0OworICBjbG9zZSAoZmQpOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1tYXAgY29uZnRlc3QudHh0CisKK2ZpCitpZiB0ZXN0ICJ4JHtlbmFibGVfbW1hcH0iID0gInhubyIgXAorICAgLW8gIiRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiAhPSAieWVzIjsgdGhlbgorICBGVFNZU19TUkM9JyQoQkFTRV9ESVIpL2Z0c3lzdGVtLmMnCitlbHNlCisgIEZUU1lTX1NSQz0nJChCVUlMRF9ESVIpL2Z0c3lzdGVtLmMnCisKKyAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibXVubWFwIiAiYWNfY3ZfaGF2ZV9kZWNsX211bm1hcCIgIgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9tdW5tYXAiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9NVU5NQVAgJGFjX2hhdmVfZGVjbAorX0FDRU9GCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtdW5tYXAncyBmaXJzdCBwYXJhbWV0ZXIgdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbXVubWFwJ3MgZmlyc3QgcGFyYW1ldGVyIHR5cGUuLi4gIiA+JjY7IH0KKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgoraW50IG11bm1hcCh2b2lkICosIHNpemVfdCk7CisKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHZvaWQgKiIgPiY1CiskYXNfZWNobyAidm9pZCAqIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgTVVOTUFQX1VTRVNfVk9JRFAgLyoqLyIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNoYXIgKiIgPiY1CiskYXNfZWNobyAiY2hhciAqIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworCitmb3IgYWNfZnVuYyBpbiBtZW1jcHkgbWVtbW92ZQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworCisjIGdldCBjb21waWxlciBmbGFncyByaWdodAorIworIyAgIFdlIHRyeSB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGZvciBDODktc3RyaWN0IHNvdXJjZS4gIEV2ZW4gaWYgdGhlCisjICAgQyBjb21waWxlciBpcyBnY2MgYW5kIEM4OSBmbGFncyBhcmUgYXZhaWxhYmxlLCBzb21lIHN5c3RlbSBoZWFkZXJzCisjICAgKGUuZy4sIEFuZHJvaWQgQmlvbmljIGxpYmMpIGFyZSBicm9rZW4gaW4gQzg5IG1vZGUuICBXZSBoYXZlIHRvIGNoZWNrCisjICAgd2hldGhlciB0aGUgY29tcGlsYXRpb24gZmluaXNoZXMgc3VjY2Vzc2Z1bGx5LgorIworIyAgIER1ZSB0byBidWdzIGluIG1pbmd3cnQgNC4wLjMgd2UgZG9uJ3QgdXNlIGAtYW5zaScgZm9yIE1pbkdXLgorIworIyAgIFRvIGF2b2lkIHppbGxpb25zIG9mCisjCisjICAgICBJU08gQzkwIGRvZXMgbm90IHN1cHBvcnQgJ2xvbmcgbG9uZycKKyMKKyMgICB3YXJuaW5ncywgd2UgZGlzYWJsZSBgLXBlZGFudGljJyBmb3IgZ2NjIHZlcnNpb24gPCA0LjYuCisjCitpZiB0ZXN0ICJ4JEdDQyIgPSB4eWVzOyB0aGVuCisgIFhYX0NGTEFHUz0iLVdhbGwiCisgIGNhc2UgIiRob3N0IiBpbgorICAqLSotbWluZ3cqKQorICAgIFhYX0FOU0lGTEFHUz0iLXBlZGFudGljIgorICAgIDs7CisgICopCisgICAgR0NDX1ZFUlNJT049YCRDQyAtZHVtcHZlcnNpb25gCisgICAgR0NDX01BSk9SPWBlY2hvICIkR0NDX1ZFUlNJT04iIHwgc2VkICdzL1woW14uXVteLl0qXCkuKi9cMS8nYAorICAgIEdDQ19NSU5PUj1gZWNobyAiJEdDQ19WRVJTSU9OIiB8IHNlZCAncy9bXi5dW14uXSouXChbXi5dW14uXSpcKS4qL1wxLydgCisKKyAgICBYWF9QRURBTlRJQz0tcGVkYW50aWMKKyAgICBpZiB0ZXN0ICRHQ0NfTUFKT1IgLWx0IDQ7IHRoZW4KKyAgICAgIFhYX1BFREFOVElDPQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgJEdDQ19NQUpPUiAtZXEgNCAtYSAkR0NDX01JTk9SIC1sdCA2OyB0aGVuCisgICAgICAgIFhYX1BFREFOVElDPQorICAgICAgZmkKKyAgICBmaQorCisgICAgWFhfQU5TSUZMQUdTPSIiCisgICAgZm9yIGEgaW4gJFhYX1BFREFOVElDIC1hbnNpCisgICAgZG8KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZ2NjIGNvbXBpbGVyIGZsYWcgJHthfSB0byBhc3N1cmUgQU5TSSBDIHdvcmtzIGNvcnJlY3RseSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBnY2MgY29tcGlsZXIgZmxhZyAke2F9IHRvIGFzc3VyZSBBTlNJIEMgd29ya3MgY29ycmVjdGx5Li4uICIgPiY2OyB9CisgICAgICBvcmlnX0NGTEFHUz0iJHtDRkxBR1N9IgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gJHtYWF9BTlNJRkxBR1N9ICR7YX0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworCitpbnQKK21haW4gKCkKK3sKKworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB1dHMoICIiICk7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2ssIGFkZCBpdCB0byBYWF9BTlNJRkxBR1MiID4mNQorJGFzX2VjaG8gIm9rLCBhZGQgaXQgdG8gWFhfQU5TSUZMQUdTIiA+JjY7IH0KKyAgICAgICAgIFhYX0FOU0lGTEFHUz0iJHtYWF9BTlNJRkxBR1N9ICR7YX0iCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBDRkxBR1M9IiR7b3JpZ19DRkxBR1N9IgorICAgIGRvbmUKKyAgICA7OworICBlc2FjCitlbHNlCisgIGNhc2UgIiRob3N0IiBpbgorICAqLWRlYy1vc2YqKQorICAgIENGTEFHUz0KKyAgICBYWF9DRkxBR1M9Ii1zdGQxIC1nMyIKKyAgICBYWF9BTlNJRkxBR1M9CisgICAgOzsKKyAgKikKKyAgICBYWF9DRkxBR1M9CisgICAgWFhfQU5TSUZMQUdTPQorICAgIDs7CisgIGVzYWMKK2ZpCisKKworCisKKyMgQWxsIGxpYnJhcnkgdGVzdHMgYmVsb3cgdHJ5IGBwa2ctY29uZmlnJyBmaXJzdC4gIElmIHRoYXQgZmFpbHMsIGEgZnVuY3Rpb24KKyMgZnJvbSB0aGUgbGlicmFyeSBpcyB0ZXN0ZWQgaW4gdGhlIHRyYWRpdGlvbmFsIGF1dG9jb25mIHdheSAoemxpYiwgYnppcDIpLAorIyBvciBhIGNvbmZpZyBzY3JpcHQgaXMgY2FsbGVkIChsaWJwbmcpLgorIworIyBUaGUgYHh4eF9yZXFwcml2JyB2YXJpYWJsZXMgYXJlIGZvciB0aGUgYFJlcXVpcmVzLnByaXZhdGUnIGZpZWxkIGluCisjIGBmcmVldHlwZTIucGMnLiAgVGhlIGB4eHhfbGlicHJpdicgdmFyaWFibGVzIGFyZSBmb3IgdGhlIGBMaWJzLnByaXZhdGUnCisjIGZpZWxkIGluIGBmcmVldHlwZTIucGMnIGlmIHBrZy1jb25maWcgZG9lc24ndCBmaW5kIGEgcHJvcGVyIC5wYyBmaWxlLgorIworIyBUaGUgYHh4eF9saWJzdGF0aWNjb25mJyB2YXJpYWJsZXMgYXJlIGZvciB0aGUgYGZyZWV0eXBlLWNvbmZpZycgc2NyaXB0LgorIworIyBOb3RlIHRoYXQgYSBjYWxsIHRvIFBLR19DSEVDS19NT0RVTEVTKFhYWCwgLi4uKSBzZXRzIGFuZCBjcmVhdGVzIHRoZQorIyBvdXRwdXQgdmFyaWFibGVzIGBYWFhfQ0ZMQUdTJyBhbmQgYFhYWF9MSUJTJy4gIEluIGNhc2Ugb25lIG9yIGJvdGggYXJlIHNldAorIyBmb3IgYSBsaWJyYXJ5IGJ5IHRoZSB1c2VyLCBubyBlbnRyeSBmb3IgdGhpcyBsaWJyYXJ5IGlzIGFkZGVkIHRvCisjIGBSZXF1aXJlcy5wcml2YXRlJy4gIEluc3RlYWQsIGl0IGdldHMgYWRkZWQgdG8gYExpYnMucHJpdmF0ZScKKworCisjIGNoZWNrIGZvciBzeXN0ZW0gemxpYgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtemxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfemxpYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfemxpYjsKK2Vsc2UKKyAgd2l0aF96bGliPWF1dG8KK2ZpCisKKworaGF2ZV96bGliPW5vCitpZiB0ZXN0IHgiJHdpdGhfemxpYiIgPSB4eWVzIC1vIHgiJHdpdGhfemxpYiIgPSB4YXV0bzsgdGhlbgorICB6bGliX3BrZz0iemxpYiIKKyAgaGF2ZV96bGliX3BrZz1ubworCisgIGlmIHRlc3QgeCIkWkxJQl9DRkxBR1MiID0geCAtYSB4IiRaTElCX0xJQlMiID0geDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkemxpYl9wa2dcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHpsaWJfcGtnIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgaGF2ZV96bGliX3BrZz15ZXMKK2ZpCisgIGZpCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFpMSUIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFpMSUIuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFpMSUJfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9aTElCX0NGTEFHUz0iJFpMSUJfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR6bGliX3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkemxpYl9wa2ciKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfWkxJQl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkemxpYl9wa2ciIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRaTElCX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X1pMSUJfTElCUz0iJFpMSUJfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkemxpYl9wa2dcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHpsaWJfcGtnIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X1pMSUJfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkemxpYl9wa2ciIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgWkxJQl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiR6bGliX3BrZyIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgWkxJQl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiR6bGliX3BrZyIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkWkxJQl9QS0dfRVJST1JTIiA+JjUKKworCToKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCToKK2Vsc2UKKwlaTElCX0NGTEFHUz0kcGtnX2N2X1pMSUJfQ0ZMQUdTCisJWkxJQl9MSUJTPSRwa2dfY3ZfWkxJQl9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJaGF2ZV96bGliPSJ5ZXMgKHBrZy1jb25maWcpIgorZmkKKworICBpZiB0ZXN0ICRoYXZlX3psaWJfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIHpsaWIucGMKKyAgICB6bGliX3JlcXByaXY9IiR6bGliX3BrZyIKKyAgICB6bGliX2xpYnByaXY9CisgICAgemxpYl9saWJzdGF0aWNjb25mPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgIiR6bGliX3BrZyJgCisgIGVsc2UKKyAgICB6bGliX3JlcXByaXY9CisKKyAgICBpZiB0ZXN0ICIkaGF2ZV96bGliIiAhPSBubzsgdGhlbgorICAgICAgIyBaTElCX0NGTEFHUyBhbmQgWkxJQl9MSUJTIGFyZSBzZXQgYnkgdGhlIHVzZXIKKyAgICAgIHpsaWJfbGlicHJpdj0iJFpMSUJfTElCUyIKKyAgICAgIHpsaWJfbGlic3RhdGljY29uZj0iJFpMSUJfTElCUyIKKyAgICAgIGhhdmVfemxpYj0ieWVzIChaTElCX0NGTEFHUyBhbmQgWkxJQl9MSUJTKSIKKyAgICBlbHNlCisgICAgICAjIGZhbGwgYmFjayB0byBzdGFuZGFyZCBhdXRvY29uZiB0ZXN0CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnenNldHBhcmFtcyBpbiAtbHoiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGd6c2V0cGFyYW1zIGluIC1sei4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfel9nenNldHBhcmFtcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ3pzZXRwYXJhbXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnenNldHBhcmFtcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfel9nenNldHBhcmFtcz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3pfZ3pzZXRwYXJhbXM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3pfZ3pzZXRwYXJhbXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfel9nenNldHBhcmFtcyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl96X2d6c2V0cGFyYW1zIiA9IHh5ZXM7IHRoZW4gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiemxpYi5oIiAiYWNfY3ZfaGVhZGVyX3psaWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfemxpYl9oIiA9IHh5ZXM7IHRoZW4gOgorICBoYXZlX3psaWI9InllcyAoYXV0b2NvbmYgdGVzdCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9saWJwcml2PSItbHoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9saWJzdGF0aWNjb25mPSIkemxpYl9saWJwcml2IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfTElCUz0iJHpsaWJfbGlicHJpdiIKK2ZpCisKKworZmkKKworICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJHdpdGhfemxpYiIgPSB4eWVzIC1hICIkaGF2ZV96bGliIiA9IG5vOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJleHRlcm5hbCB6bGliIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBjaGVjayBmb3Igc3lzdGVtIGxpYmJ6MgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnppcDIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2J6aXAyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9iemlwMjsKK2Vsc2UKKyAgd2l0aF9iemlwMj1hdXRvCitmaQorCisKK2hhdmVfYnppcDI9bm8KK2lmIHRlc3QgeCIkd2l0aF9iemlwMiIgPSB4eWVzIC1vIHgiJHdpdGhfYnppcDIiID0geGF1dG87IHRoZW4KKyAgYnppcDJfcGtnPSJiemlwMiIKKyAgaGF2ZV9iemlwMl9wa2c9bm8KKworICBpZiB0ZXN0IHgiJEJaSVAyX0NGTEFHUyIgPSB4IC1hIHgiJEJaSVAyX0xJQlMiID0geDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkYnppcDJfcGtnXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRiemlwMl9wa2ciKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBoYXZlX2J6aXAyX3BrZz15ZXMKK2ZpCisgIGZpCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJaSVAyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCWklQMi4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkQlpJUDJfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9CWklQMl9DRkxBR1M9IiRCWklQMl9DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJGJ6aXAyX3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkYnppcDJfcGtnIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0JaSVAyX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiRiemlwMl9wa2ciIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRCWklQMl9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9CWklQMl9MSUJTPSIkQlpJUDJfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkYnppcDJfcGtnXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRiemlwMl9wa2ciKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfQlpJUDJfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkYnppcDJfcGtnIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIEJaSVAyX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJGJ6aXAyX3BrZyIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgQlpJUDJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkYnppcDJfcGtnIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRCWklQMl9QS0dfRVJST1JTIiA+JjUKKworCToKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCToKK2Vsc2UKKwlCWklQMl9DRkxBR1M9JHBrZ19jdl9CWklQMl9DRkxBR1MKKwlCWklQMl9MSUJTPSRwa2dfY3ZfQlpJUDJfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWhhdmVfYnppcDI9InllcyAocGtnLWNvbmZpZykiCitmaQorCisgIGlmIHRlc3QgJGhhdmVfYnppcDJfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGJ6aXAyLnBjCisgICAgYnppcDJfcmVxcHJpdj0iJGJ6aXAyX3BrZyIKKyAgICBiemlwMl9saWJwcml2PQorICAgIGJ6aXAyX2xpYnN0YXRpY2NvbmY9YCRQS0dfQ09ORklHIC0tc3RhdGljIC0tbGlicyAiJGJ6aXAyX3BrZyJgCisgIGVsc2UKKyAgICBiemlwMl9yZXFwcml2PQorCisgICAgaWYgdGVzdCAiJGhhdmVfYnppcDIiICE9IG5vOyB0aGVuCisgICAgICAjIEJaSVAyX0NGTEFHUyBhbmQgQlpJUDJfTElCUyBhcmUgc2V0IGJ5IHRoZSB1c2VyCisgICAgICBiemlwMl9saWJwcml2PSIkQlpJUDJfTElCUyIKKyAgICAgIGJ6aXAyX2xpYnN0YXRpY2NvbmY9IiRCWklQMl9MSUJTIgorICAgICAgaGF2ZV9iemlwMj0ieWVzIChCWklQMl9DRkxBR1MgYW5kIEJaSVAyX0xJQlMpIgorICAgIGVsc2UKKyAgICAgICMgZmFsbCBiYWNrIHRvIHN0YW5kYXJkIGF1dG9jb25mIHRlc3QKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJaMl9iekRlY29tcHJlc3MgaW4gLWxiejIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJaMl9iekRlY29tcHJlc3MgaW4gLWxiejIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxiejIgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIEJaMl9iekRlY29tcHJlc3MgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBCWjJfYnpEZWNvbXByZXNzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzcz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzcyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzcyIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImJ6bGliLmgiICJhY19jdl9oZWFkZXJfYnpsaWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYnpsaWJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgaGF2ZV9iemlwMj0ieWVzIChhdXRvY29uZiB0ZXN0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9saWJwcml2PSItbGJ6MiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9saWJzdGF0aWNjb25mPSIkYnppcDJfbGlicHJpdiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWklQMl9MSUJTPSIkYnppcDJfbGlicHJpdiIKK2ZpCisKKworZmkKKworICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJHdpdGhfYnppcDIiID0geHllcyAtYSAiJGhhdmVfYnppcDIiID0gbm87IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImJ6aXAyIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBjaGVjayBmb3Igc3lzdGVtIGxpYnBuZworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcG5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BuZzsKK2Vsc2UKKyAgd2l0aF9wbmc9YXV0bworZmkKKworCitoYXZlX2xpYnBuZz1ubworaWYgdGVzdCB4IiR3aXRoX3BuZyIgPSB4eWVzIC1vIHgiJHdpdGhfcG5nIiA9IHhhdXRvOyB0aGVuCisgIGxpYnBuZ19wa2c9ImxpYnBuZyIKKyAgaGF2ZV9saWJwbmdfcGtnPW5vCisKKyAgaWYgdGVzdCB4IiRMSUJQTkdfQ0ZMQUdTIiA9IHggLWEgeCIkTElCUE5HX0xJQlMiID0geDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbGlicG5nX3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbGlicG5nX3BrZyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIGhhdmVfbGlicG5nX3BrZz15ZXMKK2ZpCisgIGZpCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExJQlBORyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgTElCUE5HLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRMSUJQTkdfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9MSUJQTkdfQ0ZMQUdTPSIkTElCUE5HX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbGlicG5nX3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbGlicG5nX3BrZyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9MSUJQTkdfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJGxpYnBuZ19wa2ciIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRMSUJQTkdfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfTElCUE5HX0xJQlM9IiRMSUJQTkdfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbGlicG5nX3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbGlicG5nX3BrZyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9MSUJQTkdfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkbGlicG5nX3BrZyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcworZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBMSUJQTkdfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkbGlicG5nX3BrZyIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgTElCUE5HX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJGxpYnBuZ19wa2ciIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJExJQlBOR19QS0dfRVJST1JTIiA+JjUKKworCToKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCToKK2Vsc2UKKwlMSUJQTkdfQ0ZMQUdTPSRwa2dfY3ZfTElCUE5HX0NGTEFHUworCUxJQlBOR19MSUJTPSRwa2dfY3ZfTElCUE5HX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwloYXZlX2xpYnBuZz0ieWVzIChwa2ctY29uZmlnKSIKK2ZpCisKKyAgaWYgdGVzdCAkaGF2ZV9saWJwbmdfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGxpYnBuZy5wYworICAgIGxpYnBuZ19yZXFwcml2PSIkbGlicG5nX3BrZyIKKyAgICBsaWJwbmdfbGlicHJpdj0KKyAgICBsaWJwbmdfbGlic3RhdGljY29uZj1gJFBLR19DT05GSUcgLS1zdGF0aWMgLS1saWJzICIkbGlicG5nX3BrZyJgCisgIGVsc2UKKyAgICBsaWJwbmdfcmVxcHJpdj0KKworICAgIGlmIHRlc3QgIiRoYXZlX2xpYnBuZyIgIT0gbm87IHRoZW4KKyAgICAgICMgTElCUE5HX0NGTEFHUyBhbmQgTElCUE5HX0xJQlMgYXJlIHNldCBieSB0aGUgdXNlcgorICAgICAgbGlicG5nX2xpYnByaXY9IiRMSUJQTkdfTElCUyIKKyAgICAgIGxpYnBuZ19saWJzdGF0aWNjb25mPSIkTElCUE5HX0xJQlMiCisgICAgICBoYXZlX2xpYnBuZz0ieWVzIChMSUJQTkdfQ0ZMQUdTIGFuZCBMSUJQTkdfTElCUykiCisgICAgZWxzZQorICAgICAgIyBmYWxsIGJhY2sgdG8gY29uZmlnIHNjcmlwdC4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnBuZy1jb25maWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnBuZy1jb25maWcuLi4gIiA+JjY7IH0KKyAgICAgIGlmIHdoaWNoIGxpYnBuZy1jb25maWcgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICBMSUJQTkdfQ0ZMQUdTPWBsaWJwbmctY29uZmlnIC0tY2ZsYWdzYAorICAgICAgICBMSUJQTkdfTElCUz1gbGlicG5nLWNvbmZpZyAtLWxkZmxhZ3NgCisgICAgICAgIGxpYnBuZ19saWJwcml2PWBsaWJwbmctY29uZmlnIC0tc3RhdGljIC0tbGRmbGFnc2AKKyAgICAgICAgbGlicG5nX2xpYnN0YXRpY2NvbmY9IiRsaWJwbmdfbGlicHJpdiIKKyAgICAgICAgaGF2ZV9saWJwbmc9InllcyAobGlicG5nLWNvbmZpZykiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCB4IiR3aXRoX3BuZyIgPSB4eWVzIC1hICIkaGF2ZV9saWJwbmciID0gbm87IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImxpYnBuZyBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbGlicmFyeSBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCisKKyMgY2hlY2sgZm9yIHN5c3RlbSBsaWJoYXJmYnV6egorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaGFyZmJ1enogd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2hhcmZidXp6K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9oYXJmYnV6ejsKK2Vsc2UKKyAgd2l0aF9oYXJmYnV6ej1hdXRvCitmaQorCisKK2hhdmVfaGFyZmJ1eno9bm8KK2lmIHRlc3QgeCIkd2l0aF9oYXJmYnV6eiIgPSB4eWVzIC1vIHgiJHdpdGhfaGFyZmJ1enoiID0geGF1dG87IHRoZW4KKyAgaGFyZmJ1enpfcGtnPSJoYXJmYnV6eiA+PSAwLjkuMTkiCisgIGhhdmVfaGFyZmJ1enpfcGtnPW5vCisKKyAgaWYgdGVzdCB4IiRIQVJGQlVaWl9DRkxBR1MiID0geCAtYSB4IiRIQVJGQlVaWl9MSUJTIiA9IHg7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJGhhcmZidXp6X3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkaGFyZmJ1enpfcGtnIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgaGF2ZV9oYXJmYnV6el9wa2c9eWVzCitmaQorICBmaQorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBIQVJGQlVaWiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgSEFSRkJVWlouLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJEhBUkZCVVpaX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfSEFSRkJVWlpfQ0ZMQUdTPSIkSEFSRkJVWlpfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCRoYXJmYnV6el9wa2dcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJGhhcmZidXp6X3BrZyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9IQVJGQlVaWl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkaGFyZmJ1enpfcGtnIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkSEFSRkJVWlpfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfSEFSRkJVWlpfTElCUz0iJEhBUkZCVVpaX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJGhhcmZidXp6X3BrZ1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkaGFyZmJ1enpfcGtnIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0hBUkZCVVpaX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJGhhcmZidXp6X3BrZyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcworZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBIQVJGQlVaWl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiRoYXJmYnV6el9wa2ciIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIEhBUkZCVVpaX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJGhhcmZidXp6X3BrZyIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkSEFSRkJVWlpfUEtHX0VSUk9SUyIgPiY1CisKKwk6CitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwk6CitlbHNlCisJSEFSRkJVWlpfQ0ZMQUdTPSRwa2dfY3ZfSEFSRkJVWlpfQ0ZMQUdTCisJSEFSRkJVWlpfTElCUz0kcGtnX2N2X0hBUkZCVVpaX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwloYXZlX2hhcmZidXp6PSJ5ZXMgKHBrZy1jb25maWcpIgorZmkKKworICBpZiB0ZXN0ICRoYXZlX2hhcmZidXp6X3BrZyA9IHllczsgdGhlbgorICAgICMgd2UgaGF2ZSBoYXJmYnV6ei5wYworICAgIGhhcmZidXp6X3JlcXByaXY9IiRoYXJmYnV6el9wa2ciCisgICAgaGFyZmJ1enpfbGlicHJpdj0KKyAgICBoYXJmYnV6el9saWJzdGF0aWNjb25mPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgIiRoYXJmYnV6el9wa2ciYAorICBlbHNlCisgICAgaGFyZmJ1enpfcmVxcHJpdj0KKworICAgIGlmIHRlc3QgIiRoYXZlX2hhcmZidXp6IiAhPSBubzsgdGhlbgorICAgICAgIyBIQVJGQlVaWl9DRkxBR1MgYW5kIEhBUkZCVVpaX0xJQlMgYXJlIHNldCBieSB0aGUgdXNlcgorICAgICAgaGFyZmJ1enpfbGlicHJpdj0iJEhBUkZCVVpaX0xJQlMiCisgICAgICBoYXJmYnV6el9saWJzdGF0aWNjb25mPSIkSEFSRkJVWlpfTElCUyIKKyAgICAgIGhhdmVfaGFyZmJ1eno9InllcyAoSEFSRkJVWlpfQ0ZMQUdTIGFuZCBIQVJGQlVaWl9MSUJTKSIKKyAgICBlbHNlCisgICAgICAjIHNpbmNlIEhhcmZCdXp6IGlzIHF1aXRlIGEgbmV3IGxpYnJhcnkgd2UgZG9uJ3QgZmFsbCBiYWNrIHRvIGEKKyAgICAgICMgZGlmZmVyZW50IHRlc3Q7IGFkZGl0aW9uYWxseSwgaXQgaGFzIHRvbyBtYW55IGRlcGVuZGVuY2llcworICAgICAgOgorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJHdpdGhfaGFyZmJ1enoiID0geHllcyAtYSAiJGhhdmVfaGFyZmJ1enoiID0gbm87IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImhhcmZidXp6IHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBTb21lIG9wdGlvbnMgaGFuZGxpbmcgU0RLcy9hcmNocyBpbiBDRkxBR1Mgc2hvdWxkIGJlIGNvcGllZAorIyB0byBMREZMQUdTLiBBcHBsZSBUZWNoTm90ZSAyMTM3IHJlY29tbWVuZHMgdG8gaW5jbHVkZSB0aGVzZQorIyBvcHRpb25zIGluIENGTEFHUyBidXQgbm90IGluIExERkxBR1MuCisKK3NhdmVfY29uZmlnX2FyZ3M9JCoKK3NldCBkdW1teSAke0NGTEFHU30KK2k9MQord2hpbGUgdGVzdCAkaSAtbGUgJCMKK2RvCisgIGM9JDEKKworICBjYXNlICIke2N9IiBpbgorICAtaXN5c3Jvb3R8LWFyY2gpICMgb3B0aW9ucyB0YWtpbmcgMSBhcmd1bWVudAorICAgIGE9JDIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgQ0ZMQUdTIGFuZCBMREZMQUdTIHNoYXJlICR7Y30gJHthfSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIENGTEFHUyBhbmQgTERGTEFHUyBzaGFyZSAke2N9ICR7YX0uLi4gIiA+JjY7IH0KKyAgICBpZiBleHByICIgJHtMREZMQUdTfSAiIDogIi4qICR7Y30gKiR7YX0uKiIgPiAvZGV2L251bGwKKyAgICB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgY29weSB0byBMREZMQUdTIiA+JjUKKyRhc19lY2hvICJubywgY29weSB0byBMREZMQUdTIiA+JjY7IH0KKyAgICAgIExERkxBR1M9IiR7TERGTEFHU30gJHtjfSAke2F9IgorICAgIGZpCisgICAgc2hpZnQgMQorICAgIDs7CisgIC1tMzJ8LW02NHwtbWFyY2g9KnwtbWNwdT0qKSAjIG9wdGlvbnMgdGFraW5nIG5vIGFyZ3VtZW50CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIENGTEFHUyBhbmQgTERGTEFHUyBzaGFyZSAke2N9IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQ0ZMQUdTIGFuZCBMREZMQUdTIHNoYXJlICR7Y30uLi4gIiA+JjY7IH0KKyAgICBpZiBleHByICIgJHtMREZMQUdTfSAiIDogIi4qICR7Y30gKiR7YX0uKiIgPiAvZGV2L251bGwKKyAgICB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgY29weSB0byBMREZMQUdTIiA+JjUKKyRhc19lY2hvICJubywgY29weSB0byBMREZMQUdTIiA+JjY7IH0KKyAgICAgIExERkxBR1M9IiR7TERGTEFHU30gJHtjfSIKKyAgICBmaQorICAgIDs7CisgICMgKikKKyAgIyAgIEFDX01TR19SRVNVTFQoWyR7Y30gaXMgbm90IGNvcGllZCB0byBMREZMQUdTXSkKKyAgIyAgIDs7CisgIGVzYWMKKworICBzaGlmdCAxCitkb25lCitzZXQgJHtzYXZlX2NvbmZpZ19hcmdzfQorCisKKyMgV2hldGhlciB0byB1c2UgTWFjIE9TIHJlc291cmNlLWJhc2VkIGZvbnRzLgorCitmdG1hY19jPSIiICMgc3JjL2Jhc2UvZnRtYWMuYyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIG1ha2VmaWxlcyBieSBkZWZhdWx0CisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vbGQtbWFjLWZvbnRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vbGRfbWFjX2ZvbnRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vbGRfbWFjX2ZvbnRzOworZmkKKworaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXM7IHRoZW4KKyAgb3JpZ19MREZMQUdTPSIke0xERkxBR1N9IgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIENvcmVTZXJ2aWNlcyAmIEFwcGxpY2F0aW9uU2VydmljZXMgb2YgTWFjIE9TIFgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgQ29yZVNlcnZpY2VzICYgQXBwbGljYXRpb25TZXJ2aWNlcyBvZiBNYWMgT1MgWC4uLiAiID4mNjsgfQorICBmdDJfZXh0cmFfbGlicz0iLVdsLC1mcmFtZXdvcmssQ29yZVNlcnZpY2VzIC1XbCwtZnJhbWV3b3JrLEFwcGxpY2F0aW9uU2VydmljZXMiCisgIExERkxBR1M9IiRMREZMQUdTICRmdDJfZXh0cmFfbGlicyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisKKyAgICAgICAgc2hvcnQgcmVzID0gMDsKKworCisgICAgICAgIFVzZVJlc0ZpbGUoIHJlcyApOworCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyAgICAgZnRtYWNfYz0nZnRtYWMuYycKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIE9TX0lOTElORSBtYWNybyBpcyBBTlNJIGNvbXBhdGlibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBPU19JTkxJTkUgbWFjcm8gaXMgQU5TSSBjb21wYXRpYmxlLi4uICIgPiY2OyB9CisgICAgIG9yaWdfQ0ZMQUdTPSIkQ0ZMQUdTIC1ERlRfTUFDSU5UT1NIIgorICAgICBDRkxBR1M9IiRDRkxBR1MgJFhYX0NGTEFHUyAkWFhfQU5TSUZMQUdTIgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CisKKworICAgICAgICAgICAvKiBPU0hvc3RCeXRlT3JkZXIoKSBpcyB0eXBlZCBhcyBPU19JTkxJTkUgKi8KKyAgICAgICAgICAgaW50MzJfdCAgb3NfYnl0ZV9vcmRlciA9IE9TSG9zdEJ5dGVPcmRlcigpOworCisKKyAgICAgICAgICAgaWYgKCBPU0JpZ0VuZGlhbiAhPSBvc19ieXRlX29yZGVyICkKKyAgICAgICAgICAgICByZXR1cm4gMTsKKworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CisgICAgICAgIENGTEFHUz0iJG9yaWdfQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0FOU0lfT1NfSU5MSU5FPTEiCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCBBTlNJIGluY29tcGF0aWJsZSIgPiY1CiskYXNfZWNobyAibm8sIEFOU0kgaW5jb21wYXRpYmxlIiA+JjY7IH0KKyAgICAgICAgQ0ZMQUdTPSIkb3JpZ19DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0eXBlIFJlc291cmNlSW5kZXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZSBSZXNvdXJjZUluZGV4Li4uICIgPiY2OyB9CisgICAgIG9yaWdfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRDRkxBR1MgJFhYX0NGTEFHUyAkWFhfQU5TSUZMQUdTIgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorIyBpbmNsdWRlIDxSZXNvdXJjZXMuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisKKyAgICAgICAgICAgUmVzb3VyY2VJbmRleCBpID0gMDsKKyAgICAgICAgICAgcmV0dXJuIGk7CisKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQorICAgICAgICBDRkxBR1M9IiRvcmlnX0NGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9UWVBFX1JFU09VUkNFX0lOREVYPTEiCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIENGTEFHUz0iJG9yaWdfQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVg9MCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm90IGZvdW5kIiA+JjUKKyRhc19lY2hvICJub3QgZm91bmQiID4mNjsgfQorICAgICBmdDJfZXh0cmFfbGlicz0iIgorICAgICBMREZMQUdTPSIke29yaWdfTERGTEFHU30iCisgICAgIENGTEFHUz0iJENGTEFHUyAtRERBUldJTl9OT19DQVJCT04iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgY2FzZSB4JGhvc3Rfb3MgaW4KKyAgeGRhcndpbiopCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtRERBUldJTl9OT19DQVJCT04iCisgICAgOzsKKyAgKikKKyAgICA7OworICBlc2FjCitmaQorCisKKyMgV2hldGhlciB0byB1c2UgRmlsZU1hbmFnZXIsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UgTWFjIE9TIFggMTAuNC4KKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZzc3BlYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZnNzcGVjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9mc3NwZWM7CitmaQorCitpZiB0ZXN0IHgkd2l0aF9mc3NwZWMgPSB4bm87IHRoZW4KKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1NQRUM9MCIKK2VsaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXMgLWEgeCR3aXRoX2Zzc3BlYyAhPSB4OyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgRlNTcGVjLWJhc2VkIEZpbGVNYW5hZ2VyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIEZTU3BlYy1iYXNlZCBGaWxlTWFuYWdlci4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CisKKworICAgICAgICBGQ0JQQlB0ciAgICAgICAgICBwYXJhbUJsb2NrOworICAgICAgICBzaG9ydCAgICAgICAgICAgICB2UmVmTnVtOworICAgICAgICBsb25nICAgICAgICAgICAgICBkaXJJRDsKKyAgICAgICAgQ29uc3RTdHIyNTVQYXJhbSAgZmlsZU5hbWU7CisgICAgICAgIEZTU3BlYyogICAgICAgICAgIHNwZWM7CisKKworICAgICAgICAvKiBGU1NwZWMgZnVuY3Rpb25zOiBkZXByZWNhdGVkIHNpbmNlIE1hYyBPUyBYIDEwLjQgKi8KKyAgICAgICAgUEJHZXRGQ0JJbmZvU3luYyggcGFyYW1CbG9jayApOworICAgICAgICBGU01ha2VGU1NwZWMoIHZSZWZOdW0sIGRpcklELCBmaWxlTmFtZSwgc3BlYyApOworCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1NQRUM9MSIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1NQRUM9MCIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIEZpbGVNYW5hZ2VyIGluIENhcmJvbiBzaW5jZSBNYWNPUyA5LnguCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mc3JlZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZnNyZWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ZzcmVmOworZmkKKworaWYgdGVzdCB4JHdpdGhfZnNyZWYgPSB4bm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorKioqIFdBUk5JTkcKKyAgICBGcmVlVHlwZTIgYnVpbHQgd2l0aG91dCBGU1JlZiBBUEkgY2Fubm90IGxvYWQKKyAgICBkYXRhLWZvcmsgZm9udHMgb24gTWFjT1MsIGV4Y2VwdCBvZiBYWFguZGZvbnQuCisgICAgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CisqKiogV0FSTklORworICAgIEZyZWVUeXBlMiBidWlsdCB3aXRob3V0IEZTUmVmIEFQSSBjYW5ub3QgbG9hZAorICAgIGRhdGEtZm9yayBmb250cyBvbiBNYWNPUywgZXhjZXB0IG9mIFhYWC5kZm9udC4KKyAgICAiID4mMjt9CisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNSRUY9MCIKK2VsaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXMgLWEgeCR3aXRoX2ZzcmVmICE9IHg7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBGU1JlZi1iYXNlZCBGaWxlTWFuYWdlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBGU1JlZi1iYXNlZCBGaWxlTWFuYWdlci4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CisKKworICAgICAgICBzaG9ydCAgICAgICAgICAgICAgICB2UmVmTnVtOworICAgICAgICBsb25nICAgICAgICAgICAgICAgICBkaXJJRDsKKyAgICAgICAgQ29uc3RTdHIyNTVQYXJhbSAgICAgZmlsZU5hbWU7CisKKyAgICAgICAgQm9vbGVhbiogICAgICAgICAgICAgaXNEaXJlY3Rvcnk7CisgICAgICAgIFVJbnQ4KiAgICAgICAgICAgICAgIHBhdGg7CisgICAgICAgIFNJbnQxNiAgICAgICAgICAgICAgIGRlc2lyZWRSZWZOdW07CisgICAgICAgIFNJbnQxNiogICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgICBTSW50MTYqICAgICAgICAgICAgICBhY3R1YWxSZWZOdW07CisgICAgICAgIEhGU1VuaVN0cjI1NSogICAgICAgIG91dEZvcmtOYW1lOworICAgICAgICBGU1ZvbHVtZVJlZk51bSAgICAgICB2b2x1bWU7CisgICAgICAgIEZTQ2F0YWxvZ0luZm9CaXRtYXAgIHdoaWNoSW5mbzsKKyAgICAgICAgRlNDYXRhbG9nSW5mbyogICAgICAgY2F0YWxvZ0luZm87CisgICAgICAgIEZTRm9ya0luZm8qICAgICAgICAgIGZvcmtJbmZvOworICAgICAgICBGU1JlZiogICAgICAgICAgICAgICByZWY7CisKKyNpZiBIQVZFX0ZTU1BFQworICAgICAgICBGU1NwZWMqICAgICAgICAgICAgICBzcGVjOworI2VuZGlmCisKKyAgICAgICAgLyogRlNSZWYgZnVuY3Rpb25zOiBubyBuZWVkIHRvIGNoZWNrPyAqLworICAgICAgICBGU0dldEZvcmtDQkluZm8oIGRlc2lyZWRSZWZOdW0sIHZvbHVtZSwgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsUmVmTnVtLCBmb3JrSW5mbywgcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dEZvcmtOYW1lICk7CisgICAgICAgIEZTUGF0aE1ha2VSZWYoIHBhdGgsIHJlZiwgaXNEaXJlY3RvcnkgKTsKKworI2lmIEhBVkVfRlNTUEVDCisgICAgICAgIEZTcE1ha2VGU1JlZiAoIHNwZWMsIHJlZiApOworICAgICAgICBGU0dldENhdGFsb2dJbmZvKCByZWYsIHdoaWNoSW5mbywgY2F0YWxvZ0luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEZvcmtOYW1lLCBzcGVjLCByZWYgKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNSRUY9MSIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1JFRj0wIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKyMgV2hldGhlciB0byB1c2UgUXVpY2tEcmF3IEFQSSBpbiBUb29sQm94LCB3aGljaCBpcyBkZXByZWNhdGVkIHNpbmNlCisjIE1hYyBPUyBYIDEwLjQuCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1xdWlja2RyYXctdG9vbGJveCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcXVpY2tkcmF3X3Rvb2xib3grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3F1aWNrZHJhd190b29sYm94OworZmkKKworaWYgdGVzdCB4JHdpdGhfcXVpY2tkcmF3X3Rvb2xib3ggPSB4bm87IHRoZW4KKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9RVUlDS0RSQVdfVE9PTEJPWD0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfcXVpY2tkcmF3X3Rvb2xib3ggIT0geDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIFF1aWNrRHJhdyBGb250TWFuYWdlciBmdW5jdGlvbnMgaW4gVG9vbEJveCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBRdWlja0RyYXcgRm9udE1hbmFnZXIgZnVuY3Rpb25zIGluIFRvb2xCb3guLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8Rm9udHMuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisKKyAgICAgICAgU3RyMjU1ICAgICBmYW1pbHlOYW1lOworICAgICAgICBTSW50MTYgICAgIGZhbWlseUlEICAgPSAwOworICAgICAgICBGTUlucHV0KiAgIGZtSW4gICAgICAgPSBOVUxMOworICAgICAgICBGTU91dHB1dCogIGZtT3V0ICAgICAgPSBOVUxMOworCisKKyAgICAgICAgR2V0Rm9udE5hbWUoIGZhbWlseUlELCBmYW1pbHlOYW1lICk7CisgICAgICAgIEdldEZOdW0oIGZhbWlseU5hbWUsICZmYW1pbHlJRCApOworICAgICAgICBmbU91dCA9IEZNU3dhcEZvbnQoIGZtSW4gKTsKKworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX1RPT0xCT1g9MSIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9RVUlDS0RSQVdfVE9PTEJPWD0wIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKyMgV2hldGhlciB0byB1c2UgUXVpY2tEcmF3IEFQSSBpbiBDYXJib24sIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UKKyMgTWFjIE9TIFggMTAuNC4KKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXF1aWNrZHJhdy1jYXJib24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3F1aWNrZHJhd19jYXJib24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3F1aWNrZHJhd19jYXJib247CitmaQorCitpZiB0ZXN0IHgkd2l0aF9xdWlja2RyYXdfY2FyYm9uID0geG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX0NBUkJPTj0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfcXVpY2tkcmF3X2NhcmJvbiAhPSB4OyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgUXVpY2tEcmF3IEZvbnRNYW5hZ2VyIGZ1bmN0aW9ucyBpbiBDYXJib24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgUXVpY2tEcmF3IEZvbnRNYW5hZ2VyIGZ1bmN0aW9ucyBpbiBDYXJib24uLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8Rm9udHMuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisKKyAgICAgICAgRk1Gb250RmFtaWx5SXRlcmF0b3IgICAgICAgICAgZmFtSXRlcjsKKyAgICAgICAgRk1Gb250RmFtaWx5ICAgICAgICAgICAgICAgICAgZmFtaWx5OworICAgICAgICBTdHIyNTUgICAgICAgICAgICAgICAgICAgICAgICBmYW1OYW1lU3RyOworICAgICAgICBGTUZvbnRGYW1pbHlJbnN0YW5jZUl0ZXJhdG9yICBpbnN0SXRlcjsKKyAgICAgICAgRk1Gb250U3R5bGUgICAgICAgICAgICAgICAgICAgc3R5bGU7CisgICAgICAgIEZNRm9udFNpemUgICAgICAgICAgICAgICAgICAgIHNpemU7CisgICAgICAgIEZNRm9udCAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ7CisgICAgICAgIEZTU3BlYyogICAgICAgICAgICAgICAgICAgICAgIHBhdGhTcGVjOworCisKKyAgICAgICAgRk1DcmVhdGVGb250RmFtaWx5SXRlcmF0b3IoIE5VTEwsIE5VTEwsIGtGTVVzZUdsb2JhbFNjb3BlT3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbUl0ZXIgKTsKKyAgICAgICAgRk1HZXROZXh0Rm9udEZhbWlseSggJmZhbUl0ZXIsICZmYW1pbHkgKTsKKyAgICAgICAgRk1HZXRGb250RmFtaWx5TmFtZSggZmFtaWx5LCBmYW1OYW1lU3RyICk7CisgICAgICAgIEZNQ3JlYXRlRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IoIGZhbWlseSwgJmluc3RJdGVyICk7CisgICAgICAgIEZNR2V0TmV4dEZvbnRGYW1pbHlJbnN0YW5jZSggJmluc3RJdGVyLCAmZm9udCwgJnN0eWxlLCAmc2l6ZSApOworICAgICAgICBGTURpc3Bvc2VGb250RmFtaWx5SW5zdGFuY2VJdGVyYXRvciggJmluc3RJdGVyICk7CisgICAgICAgIEZNRGlzcG9zZUZvbnRGYW1pbHlJdGVyYXRvciggJmZhbUl0ZXIgKTsKKyAgICAgICAgRk1HZXRGb250Q29udGFpbmVyKCBmb250LCBwYXRoU3BlYyApOworCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9RVUlDS0RSQVdfQ0FSQk9OPTEiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub3QgZm91bmQiID4mNQorJGFzX2VjaG8gIm5vdCBmb3VuZCIgPiY2OyB9CisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX0NBUkJPTj0wIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKyMgV2hldGhlciB0byB1c2UgQXBwbGVUeXBlU2VydmljZSBzaW5jZSBNYWMgT1MgWC4KKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWF0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hdHM7CitmaQorCitpZiB0ZXN0IHgkd2l0aF9hdHMgPSB4bm87IHRoZW4KKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9BVFM9MCIKK2VsaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXMgLWEgeCR3aXRoX2F0cyAhPSB4OyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgQXBwbGVUeXBlU2VydmljZSBmdW5jdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgQXBwbGVUeXBlU2VydmljZSBmdW5jdGlvbnMuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworCisKKyAgICAgICAgRlNTcGVjKiAgcGF0aFNwZWM7CisKKworICAgICAgICBBVFNGb250RmluZEZyb21OYW1lKCBOVUxMLCBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSApOworI2lmIEhBVkVfRlNTUEVDCisgICAgICAgIEFUU0ZvbnRHZXRGaWxlU3BlY2lmaWNhdGlvbiggMCwgcGF0aFNwZWMgKTsKKyNlbmRpZgorCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9BVFM9MSIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9BVFM9MCIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworY2FzZSAiJENGTEFHUyIgaW4KKyAgKkhBVkVfRlNTUEVDKiB8ICpIQVZFX0ZTUkVGKiB8ICpIQVZFX1FVSUNLRFJBVyogfCAqSEFWRV9BVFMqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisqKiogV0FSTklORworICAgIEZTU3BlYy9GU1JlZi9RdWlja0RyYXcvQVRTIG9wdGlvbnMgYXJlIGV4cGxpY2l0bHkgZ2l2ZW4sCisgICAgdGh1cyBpdCBpcyByZWNvbW1lbmRlZCB0byByZXBsYWNlIHNyYy9iYXNlL2Z0bWFjLmMgYnkgYnVpbGRzL21hYy9mdG1hYy5jLgorICAgICIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOgorKioqIFdBUk5JTkcKKyAgICBGU1NwZWMvRlNSZWYvUXVpY2tEcmF3L0FUUyBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGdpdmVuLAorICAgIHRodXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVwbGFjZSBzcmMvYmFzZS9mdG1hYy5jIGJ5IGJ1aWxkcy9tYWMvZnRtYWMuYy4KKyAgICAiID4mMjt9CisgICAgQ0ZMQUdTPSIkQ0ZMQUdTICInLUkkKFRPUF9ESVIpL2J1aWxkcy9tYWMvJworICAgIDs7CisgICopCisgICAgOzsKK2VzYWMKKworCisjIGVudHJpZXMgaW4gUmVxdWlyZXMucHJpdmF0ZSBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hczsKK1JFUVVJUkVTX1BSSVZBVEU9IiR6bGliX3JlcXByaXYsICAgICBcCisgICAgICAgICAgICAgICAgICAkYnppcDJfcmVxcHJpdiwgICAgXAorICAgICAgICAgICAgICAgICAgJGxpYnBuZ19yZXFwcml2LCAgIFwKKyAgICAgICAgICAgICAgICAgICRoYXJmYnV6el9yZXFwcml2IgorIyBiZWF1dGlmeQorUkVRVUlSRVNfUFJJVkFURT1gZWNobyAiJFJFUVVJUkVTX1BSSVZBVEUiIFwKKyAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICdzL14gICovLycgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8gICokLy8nICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLCAqLywvZycgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywsKi8sL2cnICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eLCovLycgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLCokLy8nICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywvLCAvZydgCisKK0xJQlNfUFJJVkFURT0iJHpsaWJfbGlicHJpdiAgICAgXAorICAgICAgICAgICAgICAkYnppcDJfbGlicHJpdiAgICBcCisgICAgICAgICAgICAgICRsaWJwbmdfbGlicHJpdiAgIFwKKyAgICAgICAgICAgICAgJGhhcmZidXp6X2xpYnByaXYgXAorICAgICAgICAgICAgICAkZnQyX2V4dHJhX2xpYnMiCisjIGJlYXV0aWZ5CitMSUJTX1BSSVZBVEU9YGVjaG8gIiRMSUJTX1BSSVZBVEUiICBcCisgICAgICAgICAgICAgIHwgc2VkIC1lICdzL14gICovLycgICBcCisgICAgICAgICAgICAgICAgICAgIC1lICdzLyAgKiQvLycgICBcCisgICAgICAgICAgICAgICAgICAgIC1lICdzLyAgKi8gL2cnYAorCitMSUJTU1RBVElDX0NPTkZJRz0iLWxmcmVldHlwZSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICR6bGliX2xpYnN0YXRpY2NvbmYgICAgIFwKKyAgICAgICAgICAgICAgICAgICAkYnppcDJfbGlic3RhdGljY29uZiAgICBcCisgICAgICAgICAgICAgICAgICAgJGxpYnBuZ19saWJzdGF0aWNjb25mICAgXAorICAgICAgICAgICAgICAgICAgICRoYXJmYnV6el9saWJzdGF0aWNjb25mIFwKKyAgICAgICAgICAgICAgICAgICAkZnQyX2V4dHJhX2xpYnMiCisjIHJlbW92ZSAtTC91c3IvbGliIGFuZCAtTC91c3IvbGliNjQgc2luY2UgYGZyZWV0eXBlLWNvbmZpZycgYWRkcyB0aGVtIGxhdGVyCisjIG9uIGlmIG5lY2Vzc2FyeTsgYWxzbyBiZWF1dGlmeQorTElCU1NUQVRJQ19DT05GSUc9YGVjaG8gIiRMSUJTU1RBVElDX0NPTkZJRyIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICdzfC1MICovdXNyL2xpYjY0LyogfCB8ZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzfC1MICovdXNyL2xpYi8qIHwgfGcnICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14gICovLycgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyAgKiQvLycgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyAgKi8gL2cnYAorCisKKworCisKKworCisKKworCisKKworIyBjaGFuZ2luZyBMREZMQUdTIHZhbHVlIHNob3VsZCBvbmx5IGJlIGRvbmUgYWZ0ZXIKKyMgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MgdGVzdAorCitpZiB0ZXN0ICIkaGF2ZV96bGliIiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJFpMSUJfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiIKKyAgTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKK2ZpCisKK2lmIHRlc3QgIiRoYXZlX2J6aXAyIiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJEJaSVAyX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyIgorICBMREZMQUdTPSIkTERGTEFHUyAkQlpJUDJfTElCUyIKK2ZpCitpZiB0ZXN0ICIkaGF2ZV9saWJwbmciICE9IG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAkTElCUE5HX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX1BORyIKKyAgTERGTEFHUz0iJExERkxBR1MgJExJQlBOR19MSUJTIgorZmkKK2lmIHRlc3QgIiRoYXZlX2hhcmZidXp6IiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJEhBUkZCVVpaX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaIgorICBMREZMQUdTPSIkTERGTEFHUyAkSEFSRkJVWlpfTElCUyIKK2ZpCisKKworCisKKyMgY29uZmlndXJhdGlvbiBmaWxlIC0tIHN0YXkgaW4gOC4zIGxpbWl0CisjCisjIHNpbmNlICN1bmRlZiBkb2Vzbid0IHN1cnZpdmUgaW4gY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZXMgd2UgcmVwbGFjZQorIyBgL3VuZGVmJyB3aXRoIGAjdW5kZWYnIGFmdGVyIGNyZWF0aW5nIHRoZSBvdXRwdXQgZmlsZQorCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGZ0Y29uZmlnLmg6ZnRjb25maWcuaW4iCisKKworIyBjcmVhdGUgdGhlIFVuaXgtc3BlY2lmaWMgc3ViLU1ha2VmaWxlcyBgYnVpbGRzL3VuaXgvdW5peC1kZWYubWsnCisjIGFuZCBgYnVpbGRzL3VuaXgvdW5peC1jYy5taycgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbQorIworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHVuaXgtY2MubWs6dW5peC1jYy5pbiB1bml4LWRlZi5tazp1bml4LWRlZi5pbiIKKworCisjIHJlLWdlbmVyYXRlIHRoZSBKYW1maWxlIHRvIHVzZSBsaWJ0b29sIG5vdworIworIyBBQ19DT05GSUdfRklMRVMoWy4uLy4uL0phbWZpbGU6Li4vLi4vSmFtZmlsZS5pbl0pCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKKworOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKKworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCisKKyMgYXNfZm5fZXhlY3V0YWJsZV9wIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBpZiBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorYXNfZm5fZXhlY3V0YWJsZV9wICgpCit7CisgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKK30gIyBhc19mbl9leGVjdXRhYmxlX3AKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKK2V4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBGcmVlVHlwZSAkYXNfbWUgMi42LCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCitfQUNFT0YKKworY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byA8ZnJlZXR5cGVAbm9uZ251Lm9yZz4uIgorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKK2FjX2NzX3ZlcnNpb249IlxcCitGcmVlVHlwZSBjb25maWcuc3RhdHVzIDIuNgorY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK0FXSz0nJEFXSycKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKKworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9J2AkRUNITyAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1BBVEhfU0VQQVJBVE9SPSdgJEVDSE8gIiRQQVRIX1NFUEFSQVRPUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X2FsaWFzPSdgJEVDSE8gIiRob3N0X2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Q9J2AkRUNITyAiJGhvc3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9vcz0nYCRFQ0hPICIkaG9zdF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9hbGlhcz0nYCRFQ0hPICIkYnVpbGRfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGQ9J2AkRUNITyAiJGJ1aWxkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX29zPSdgJEVDSE8gIiRidWlsZF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTRUQ9J2AkRUNITyAiJFNFRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitYc2VkPSdgJEVDSE8gIiRYc2VkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dSRVA9J2AkRUNITyAiJEdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUdSRVA9J2AkRUNITyAiJEVHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0ZHUkVQPSdgJEVDSE8gIiRGR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRD0nYCRFQ0hPICIkTEQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk09J2AkRUNITyAiJE5NIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xOX1M9J2AkRUNITyAiJExOX1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWF4X2NtZF9sZW49J2AkRUNITyAiJG1heF9jbWRfbGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FjX29iamV4dD0nYCRFQ0hPICIkYWNfb2JqZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1JBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSdgJEVDSE8gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0M9J2AkRUNITyAiJENDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NGTEFHUz0nYCRFQ0hPICIkQ0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyPSdgJEVDSE8gIiRjb21waWxlciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0M9J2AkRUNITyAiJEdDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9ubV9pbnRlcmZhY2U9J2AkRUNITyAiJGx0X2N2X25tX2ludGVyZmFjZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90cnVuY2F0ZV9iaW49J2AkRUNITyAiJGx0X2N2X3RydW5jYXRlX2JpbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w9J2AkRUNITyAiJE9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MNjQ9J2AkRUNITyAiJE9UT09MNjQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGliZXh0PSdgJEVDSE8gIiRsaWJleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hyZXh0X2NtZHM9J2AkRUNITyAiJHNocmV4dF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sYz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYCRFQ0hPICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0PSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kcz0nYCRFQ0hPICIkbW9kdWxlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGQ9J2AkRUNITyAiJHdpdGhfZ251X2xkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9J2AkRUNITyAiJGNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBBUyBcCitETExUT09MIFwKK09CSkRVTVAgXAorU0hFTEwgXAorRUNITyBcCitQQVRIX1NFUEFSQVRPUiBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK2ZpbGVfbWFnaWNfZ2xvYiBcCit3YW50X25vY2FzZWdsb2IgXAorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorQVIgXAorQVJfRkxBR1MgXAorYXJjaGl2ZXJfbGlzdF9zcGVjIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitsdF9jdl9ubV9pbnRlcmZhY2UgXAorbm1fZmlsZV9saXN0X3NwZWMgXAorbHRfY3ZfdHJ1bmNhdGVfYmluIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitNQU5JRkVTVF9UT09MIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZXhjbHVkZV9leHBzeW1zIFwKK2luY2x1ZGVfZXhwc3ltcyBcCitmaWxlX2xpc3Rfc3BlYyBcCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCitsaWJuYW1lX3NwZWMgXAorbGlicmFyeV9uYW1lc19zcGVjIFwKK3NvbmFtZV9zcGVjIFwKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWI7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0bGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIFwKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKyAgICAiZnRjb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgZnRjb25maWcuaDpmdGNvbmZpZy5pbiIgOzsKKyAgICAidW5peC1jYy5tayIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB1bml4LWNjLm1rOnVuaXgtY2MuaW4iIDs7CisgICAgInVuaXgtZGVmLm1rIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHVuaXgtZGVmLm1rOnVuaXgtZGVmLmluIiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICBlc2FjCitkb25lCisKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK2ZpCisKKyMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQorIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiskZGVidWcgfHwKK3sKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1CithY190bXA9JHRtcAorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCisKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKworfQoreworICBsaW5lID0gJCAwCisgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorICBzdWJzdGVkID0gMAorICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKyAgICBrZXkgPSBmaWVsZFtpXQorICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKyAgICAgIHZhbHVlID0gU1trZXldCisgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorICAgICAgc3Vic3RlZCA9IDEKKyAgICB9IGVsc2UKKyAgICAgIGxlbiArPSAxICsga2V5bGVuCisgIH0KKworICBwcmludCBsaW5lCit9CisKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisKKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKworICBjYXNlICRhY19tb2RlIGluCisgIDpGKQorICAjCisgICMgQ09ORklHX0ZJTEUKKyAgIworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKKyAgZXNhYworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKyMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgorYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CisgIHAKKyAgcQorfQorL0BkYXRhZGlyQC9wCisvQGRvY2RpckAvcAorL0BpbmZvZGlyQC9wCisvQGxvY2FsZWRpckAvcAorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCisqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCisgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKyAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKyAgcyZAaW5mb2RpckAmJGluZm9kaXImZworICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworICBzJkBtYW5kaXJAJiRtYW5kaXImZworICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworZXNhYworX0FDRU9GCisKKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgorJGV4dHJhc3ViCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CitzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CitzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CitzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CitzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKKyRhY19kYXRhcm9vdGRpcl9oYWNrCisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKwordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAorICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9CisKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0ke29maWxlfVQKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKKyMgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlICBzYW1lCisjIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPScnCisKKyMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCis6IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBBc3NlbWJsZXIgcHJvZ3JhbS4KK0FTPSRsdF9BUworCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGFyZWQgYXJjaGl2ZSBtZW1iZXIgYmFzZW5hbWUsZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYLgorc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9JHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjCisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFRoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KK1BBVEhfU0VQQVJBVE9SPSRsdF9QQVRIX1NFUEFSQVRPUgorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisKKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgord2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKworIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCisKKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCithcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorU1RSSVA9JGx0X1NUUklQCisKKyMgQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorUkFOTElCPSRsdF9SQU5MSUIKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIFdoZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbi4KK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0kbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlLgorZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlLgorbm1faW50ZXJmYWNlPSRsdF9sdF9jdl9ubV9pbnRlcmZhY2UKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUuCitsdF90cnVuY2F0ZV9iaW49JGx0X2x0X2N2X3RydW5jYXRlX2JpbgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgTWFuaWZlc3QgdG9vbC4KK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorRFNZTVVUSUw9JGx0X0RTWU1VVElMCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9JGx0X05NRURJVAorCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCitMSVBPPSRsdF9MSVBPCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCitPVE9PTD0kbHRfT1RPT0wKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9JGx0X09UT09MNjQKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9JGxpYmV4dAorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgoraW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyMgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoCisKKyMgRXhwbGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWUuCitjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRsdF9jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCisKKyMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCisjIGhhdmluZyBhIGZvcm1hdDoKKyMgIkRJUls6RElSXToiCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQorIyAiOkRJUls6RElSXSIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKKyMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZworIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUls6RElSXSIKKyMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgorZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKK3sKKyAgICBjYXNlIHgkMiBpbgorICAgIHgpCisgICAgICAgIDs7CisgICAgKjopCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2AgXCQkMVwiCisgICAgICAgIDs7CisgICAgeDoqKQorICAgICAgICBldmFsICQxPVwiXCQkMSBgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgICo6OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxXCBgJEVDSE8gJDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorCisKKyMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisgOzsKKyAgICAiZnRjb25maWcuaCI6SCkgbXYgZnRjb25maWcuaCBmdGNvbmZpZy50bXAKKyAgIHNlZCAnc3wvdW5kZWZ8I3VuZGVmfCcgPCBmdGNvbmZpZy50bXAgPiBmdGNvbmZpZy5oCisgICBybSBmdGNvbmZpZy50bXAgOzsKKworICBlc2FjCitkb25lICMgZm9yIGFjX3RhZworCisKK2FzX2ZuX2V4aXQgMAorX0FDRU9GCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKKworTGlicmFyeSBjb25maWd1cmF0aW9uOgorICBleHRlcm5hbCB6bGliOiAkaGF2ZV96bGliCisgIGJ6aXAyOiAgICAgICAgICRoYXZlX2J6aXAyCisgIGxpYnBuZzogICAgICAgICRoYXZlX2xpYnBuZworICBoYXJmYnV6ejogICAgICAkaGF2ZV9oYXJmYnV6egorIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6CisKK0xpYnJhcnkgY29uZmlndXJhdGlvbjoKKyAgZXh0ZXJuYWwgemxpYjogJGhhdmVfemxpYgorICBiemlwMjogICAgICAgICAkaGF2ZV9iemlwMgorICBsaWJwbmc6ICAgICAgICAkaGF2ZV9saWJwbmcKKyAgaGFyZmJ1eno6ICAgICAgJGhhdmVfaGFyZmJ1enoKKyIgPiY2O30KKworIyBlbmQgb2YgY29uZmlndXJlLnJhdwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2NvbmZpZ3VyZS5hYyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5YTYyNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxMDIxIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LgorIworIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworQUNfSU5JVChbRnJlZVR5cGVdLCBbMi42XSwgW2ZyZWV0eXBlQG5vbmdudS5vcmddLCBbZnJlZXR5cGVdKQorQUNfQ09ORklHX1NSQ0RJUihbZnRjb25maWcuaW5dKQorCisKKyMgRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBkb2NzL1ZFUlNJT04uRExMIQorCit2ZXJzaW9uX2luZm89JzE4OjA6MTInCitBQ19TVUJTVChbdmVyc2lvbl9pbmZvXSkKK2Z0X3ZlcnNpb249YGVjaG8gJHZlcnNpb25faW5mbyB8IHRyIDogLmAKK0FDX1NVQlNUKFtmdF92ZXJzaW9uXSkKKworCisjIGNoZWNrcyBmb3Igc3lzdGVtIHR5cGUKKworQUNfQ0FOT05JQ0FMX0hPU1QKKworCisjIGNoZWNrcyBmb3IgcHJvZ3JhbXMKKworQUNfUFJPR19DQworQUNfUFJPR19DUFAKK0FDX1NVQlNUKEVYRUVYVCkKKworUEtHX1BST0dfUEtHX0NPTkZJRyhbMC4yNF0pCisKK0xUX0lOSVQod2luMzItZGxsKQorCisKKyMgY2hlY2tzIGZvciBuYXRpdmUgcHJvZ3JhbXMgdG8gZ2VuZXJhdGUgYnVpbGRpbmcgdG9vbAorCitpZiB0ZXN0ICR7Y3Jvc3NfY29tcGlsaW5nfSA9IHllczsgdGhlbgorICBBQ19DSEVDS19QUk9HKENDX0JVSUxELCAke2J1aWxkfS1nY2MsICR7YnVpbGR9LWdjYykKKyAgdGVzdCAteiAiJHtDQ19CVUlMRH0iICYmIEFDX0NIRUNLX1BST0coQ0NfQlVJTEQsIGdjYywgZ2NjKQorICB0ZXN0IC16ICIke0NDX0JVSUxEfSIgJiYgQUNfQ0hFQ0tfUFJPRyhDQ19CVUlMRCwgY2MsIGNjLCAsICwgL3Vzci91Y2IvY2MpCisgIHRlc3QgLXogIiR7Q0NfQlVJTER9IiAmJiBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIG5hdGl2ZSBDIGNvbXBpbGVyXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdWZmaXggb2YgbmF0aXZlIGV4ZWN1dGFibGVzXSkKKyAgcm0gLWYgYS4qIGIuKiBhX291dC5leGUgY29uZnRlc3QuKgorICBlY2hvID4gY29uZnRlc3QuYyAiaW50IG1haW4oKSB7IHJldHVybiAwO30iCisgICR7Q0NfQlVJTER9IGNvbmZ0ZXN0LmMgfHwgQUNfTVNHX0VSUk9SKFtuYXRpdmUgQyBjb21waWxlciBpcyBub3Qgd29ya2luZ10pCisgIHJtIC1mIGNvbmZ0ZXN0LmMKKyAgaWYgdGVzdCAteCBhLm91dCAtbyAteCBiLm91dCAtbyAteCBjb25mdGVzdDsgdGhlbgorICAgIEVYRUVYVF9CVUlMRD0iIgorICBlbGlmIHRlc3QgLXggYV9vdXQuZXhlIC1vIC14IGNvbmZ0ZXN0LmV4ZTsgdGhlbgorICAgIEVYRUVYVF9CVUlMRD0iLmV4ZSIKKyAgZWxpZiB0ZXN0IC14IGNvbmZ0ZXN0Lio7IHRoZW4KKyAgICBFWEVFWFRfQlVJTEQ9YGVjaG8gY29uZnRlc3QuKiB8IHNlZCAtbiAnMXMvXi4qXC4vLi8nYAorICBmaQorICBybSAtZiBhLiogYi4qIGFfb3V0LmV4ZSBjb25mdGVzdC4qCisgIEFDX01TR19SRVNVTFQoJEVYRUVYVF9CVUlMRCkKK2Vsc2UKKyAgQ0NfQlVJTEQ9JHtDQ30KKyAgRVhFRVhUX0JVSUxEPSR7RVhFRVhUfQorZmkKKworQUNfU1VCU1QoQ0NfQlVJTEQpCitBQ19TVUJTVChFWEVFWFRfQlVJTEQpCisKKworIyBhdXhpbGlhcnkgcHJvZ3JhbXMKKworQUNfQ0hFQ0tfUFJPRyhbUk1ESVJdLCBbcm1kaXJdLCBbcm1kaXJdKQorCisKKyMgU2luY2UgdGhpcyBmaWxlIHdpbGwgYmUgZmluYWxseSBtb3ZlZCB0byBhbm90aGVyIGRpcmVjdG9yeSB3ZSBtYWtlCisjIHRoZSBwYXRoIG9mIHRoZSBpbnN0YWxsIHNjcmlwdCBhYnNvbHV0ZS4gIFRoaXMgc21hbGwgY29kZSBzbmlwcGV0IGhhcworIyBiZWVuIHRha2VuIGZyb20gYXV0b21ha2UncyBgeWx3cmFwJyBzY3JpcHQuCisKK0FDX1BST0dfSU5TVEFMTAorY2FzZSAiJElOU1RBTEwiIGluCisvKikKKyAgOzsKKyovKikKKyAgSU5TVEFMTD0iYHB3ZGAvJElOU1RBTEwiCisgIDs7Citlc2FjCisKKworIyBjaGVja3MgZm9yIGhlYWRlciBmaWxlcworCitBQ19IRUFERVJfU1REQworQUNfQ0hFQ0tfSEVBREVSUyhbZmNudGwuaCB1bmlzdGQuaF0pCisKKworIyBjaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisKK0FDX0NfQ09OU1QKK0FDX0NIRUNLX1NJWkVPRihbaW50XSkKK0FDX0NIRUNLX1NJWkVPRihbbG9uZ10pCisKKworIyBjaGVjayB3aGV0aGVyIGNwcCBjb21wdXRhdGlvbiBvZiBzaXplIG9mIGludCBhbmQgbG9uZyBpbiBmdGNvbmZpZy5pbiB3b3JrcworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgY3BwIGNvbXB1dGF0aW9uIG9mIGJpdCBsZW5ndGggaW4gZnRjb25maWcuaW4gd29ya3NdKQorb3JpZ19DUFBGTEFHUz0iJHtDUFBGTEFHU30iCitDUFBGTEFHUz0iLUkke3NyY2Rpcn0gLUkuICR7Q1BQRkxBR1N9IgorCithY19jbGVhbl9maWxlcz0KK2ZvciBmIGluIGZ0MmJ1aWxkLmggZnRvcHRpb24uaCBmdHN0ZGxpYi5oOyBkbworICBpZiB0ZXN0ICEgLWYgJGY7IHRoZW4KKyAgICBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRmIgorICAgIHRvdWNoICRmCisgIGZpCitkb25lCisKK2NhdCA+IGNvbmZ0ZXN0LmMgPDxcX0FDRU9GCisjaW5jbHVkZSA8bGltaXRzLmg+CisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggImZ0b3B0aW9uLmgiCisjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggImZ0c3RkbGliLmgiCisjZGVmaW5lIEZUX1VJTlRfTUFYICBVSU5UX01BWAorI2RlZmluZSBGVF9VTE9OR19NQVggVUxPTkdfTUFYCisjaW5jbHVkZSAiZnRjb25maWcuaW4iCitfQUNFT0YKK2VjaG8gPj4gY29uZnRlc3QuYyAiI2lmIEZUX1NJWkVPRl9JTlQgPT0gIiR7YWNfY3Zfc2l6ZW9mX2ludH0KK2VjaG8gPj4gY29uZnRlc3QuYyAiYWNfY3BwX2Z0X3NpemVvZl9pbnQ9IiR7YWNfY3Zfc2l6ZW9mX2ludH0KK2VjaG8gPj4gY29uZnRlc3QuYyAiI2VuZGlmIgorZWNobyA+PiBjb25mdGVzdC5jICIjaWYgRlRfU0laRU9GX0xPTkcgPT0gIiR7YWNfY3Zfc2l6ZW9mX2xvbmd9CitlY2hvID4+IGNvbmZ0ZXN0LmMgImFjX2NwcF9mdF9zaXplb2ZfbG9uZz0iJHthY19jdl9zaXplb2ZfbG9uZ30KK2VjaG8gPj4gY29uZnRlc3QuYyAiI2VuZGlmIgorCiske0NQUH0gJHtDUFBGTEFHU30gY29uZnRlc3QuYyB8ICR7R1JFUH0gYWNfY3BwX2Z0ID4gY29uZnRlc3Quc2gKK2V2YWwgYGNhdCBjb25mdGVzdC5zaGAKK3JtIC1mIGNvbmZ0ZXN0LiogJGFjX2NsZWFuX2ZpbGVzCisKK2lmIHRlc3QgeCAhPSAieCR7YWNfY3BwX2Z0X3NpemVvZl9pbnR9IiBcCisgICAtYSB4ICE9IHgiJHthY19jcHBfZnRfc2l6ZW9mX2xvbmd9IjsgdGhlbgorICB1bnNldCBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzCitlbHNlCisgIGZ0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXM9eWVzCitmaQorCitBQ19BUkdfRU5BQkxFKGJpYXJjaC1jb25maWcsCitbICAtLWVuYWJsZS1iaWFyY2gtY29uZmlnICBpbnN0YWxsIGJpYXJjaCBmdGNvbmZpZy5oIHRvIHN1cHBvcnQgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyBieSBzaW5nbGUgZmlsZV0sIFtdLCBbXSkKKworY2FzZSA6JHtmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzfToke2VuYWJsZV9iaWFyY2hfY29uZmlnfTogaW4KKyAgOnllczp5ZXM6KQorICAgIEFDX01TR19SRVNVTFQoW2Jyb2tlbiBidXQgdXNlIGl0XSkKKyAgICB1bnNldCBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzCisgICAgOzsKKyAgOjpubzopCisgICAgQUNfTVNHX1JFU1VMVChbd29ya3MgYnV0IGlnbm9yZSBpdF0pCisgICAgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcz15ZXMKKyAgICA7OworICA6OnllczogfCA6OjopCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB1bnNldCBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcz15ZXMKKyAgICA7OworZXNhYworCitpZiB0ZXN0IHgiJHtmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzfSIgPSB4eWVzOyB0aGVuCisgIEFDX0RFRklORShbRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFU10sIFtdLAorICAgICAgICAgICAgW0RlZmluZSBpZiBhdXRvY29uZiBzaXplb2YgdHlwZXMgc2hvdWxkIGJlIHVzZWQuXSkKK2ZpCisKK0NQUEZMQUdTPSIke29yaWdfQ1BQRkxBR1N9IgorCisKKyMgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworCisjIEhlcmUgd2UgY2hlY2sgd2hldGhlciB3ZSBjYW4gdXNlIG91ciBtbWFwIGZpbGUgY29tcG9uZW50LgorCitBQ19BUkdfRU5BQkxFKFttbWFwXSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1tbWFwXSwKKyAgICAgICAgICAgICAgICAgW2RvIG5vdCBjaGVjayBtbWFwKCkgYW5kIGRvIG5vdCB1c2VdKSwKKyAgW2VuYWJsZV9tbWFwPSJubyJdLFtlbmFibGVfbW1hcD0ieWVzIl0pCitpZiB0ZXN0ICJ4JHtlbmFibGVfbW1hcH0iICE9ICJ4bm8iOyB0aGVuCisgIEFDX0ZVTkNfTU1BUAorZmkKK2lmIHRlc3QgIngke2VuYWJsZV9tbWFwfSIgPSAieG5vIiBcCisgICAtbyAiJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiICE9ICJ5ZXMiOyB0aGVuCisgIEZUU1lTX1NSQz0nJChCQVNFX0RJUikvZnRzeXN0ZW0uYycKK2Vsc2UKKyAgRlRTWVNfU1JDPSckKEJVSUxEX0RJUikvZnRzeXN0ZW0uYycKKworICBBQ19DSEVDS19ERUNMUyhbbXVubWFwXSwKKyAgICBbXSwKKyAgICBbXSwKKyAgICBbCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisgICAgXSkKKworICBGVF9NVU5NQVBfUEFSQU0KK2ZpCitBQ19TVUJTVChbRlRTWVNfU1JDXSkKKworQUNfQ0hFQ0tfRlVOQ1MoW21lbWNweSBtZW1tb3ZlXSkKKworCisjIGdldCBjb21waWxlciBmbGFncyByaWdodAorIworIyAgIFdlIHRyeSB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGZvciBDODktc3RyaWN0IHNvdXJjZS4gIEV2ZW4gaWYgdGhlCisjICAgQyBjb21waWxlciBpcyBnY2MgYW5kIEM4OSBmbGFncyBhcmUgYXZhaWxhYmxlLCBzb21lIHN5c3RlbSBoZWFkZXJzCisjICAgKGUuZy4sIEFuZHJvaWQgQmlvbmljIGxpYmMpIGFyZSBicm9rZW4gaW4gQzg5IG1vZGUuICBXZSBoYXZlIHRvIGNoZWNrCisjICAgd2hldGhlciB0aGUgY29tcGlsYXRpb24gZmluaXNoZXMgc3VjY2Vzc2Z1bGx5LgorIworIyAgIER1ZSB0byBidWdzIGluIG1pbmd3cnQgNC4wLjMgd2UgZG9uJ3QgdXNlIGAtYW5zaScgZm9yIE1pbkdXLgorIworIyAgIFRvIGF2b2lkIHppbGxpb25zIG9mCisjCisjICAgICBJU08gQzkwIGRvZXMgbm90IHN1cHBvcnQgJ2xvbmcgbG9uZycKKyMKKyMgICB3YXJuaW5ncywgd2UgZGlzYWJsZSBgLXBlZGFudGljJyBmb3IgZ2NjIHZlcnNpb24gPCA0LjYuCisjCitpZiB0ZXN0ICJ4JEdDQyIgPSB4eWVzOyB0aGVuCisgIFhYX0NGTEFHUz0iLVdhbGwiCisgIGNhc2UgIiRob3N0IiBpbgorICAqLSotbWluZ3cqKQorICAgIFhYX0FOU0lGTEFHUz0iLXBlZGFudGljIgorICAgIDs7CisgICopCisgICAgR0NDX1ZFUlNJT049YCRDQyAtZHVtcHZlcnNpb25gCisgICAgR0NDX01BSk9SPWBlY2hvICIkR0NDX1ZFUlNJT04iIHwgc2VkICdzL1woW1teLl1dW1teLl1dKlwpLiovXDEvJ2AKKyAgICBHQ0NfTUlOT1I9YGVjaG8gIiRHQ0NfVkVSU0lPTiIgfCBzZWQgJ3MvW1teLl1dW1teLl1dKi5cKFtbXi5dXVtbXi5dXSpcKS4qL1wxLydgCisKKyAgICBYWF9QRURBTlRJQz0tcGVkYW50aWMKKyAgICBpZiB0ZXN0ICRHQ0NfTUFKT1IgLWx0IDQ7IHRoZW4KKyAgICAgIFhYX1BFREFOVElDPQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgJEdDQ19NQUpPUiAtZXEgNCAtYSAkR0NDX01JTk9SIC1sdCA2OyB0aGVuCisgICAgICAgIFhYX1BFREFOVElDPQorICAgICAgZmkKKyAgICBmaQorCisgICAgWFhfQU5TSUZMQUdTPSIiCisgICAgZm9yIGEgaW4gJFhYX1BFREFOVElDIC1hbnNpCisgICAgZG8KKyAgICAgIEFDX01TR19DSEVDS0lORyhbZ2NjIGNvbXBpbGVyIGZsYWcgJHthfSB0byBhc3N1cmUgQU5TSSBDIHdvcmtzIGNvcnJlY3RseV0pCisgICAgICBvcmlnX0NGTEFHUz0iJHtDRkxBR1N9IgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gJHtYWF9BTlNJRkxBR1N9ICR7YX0iCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisgICAgICAgICAgXSwKKyAgICAgICAgICBbCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHV0cyggIiIgKTsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBdKV0sCisgICAgICAgIFtBQ19NU0dfUkVTVUxUKFtvaywgYWRkIGl0IHRvIFhYX0FOU0lGTEFHU10pCisgICAgICAgICBYWF9BTlNJRkxBR1M9IiR7WFhfQU5TSUZMQUdTfSAke2F9IgorICAgICAgICBdLAorICAgICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgICAgICBDRkxBR1M9IiR7b3JpZ19DRkxBR1N9IgorICAgIGRvbmUKKyAgICA7OworICBlc2FjCitlbHNlCisgIGNhc2UgIiRob3N0IiBpbgorICAqLWRlYy1vc2YqKQorICAgIENGTEFHUz0KKyAgICBYWF9DRkxBR1M9Ii1zdGQxIC1nMyIKKyAgICBYWF9BTlNJRkxBR1M9CisgICAgOzsKKyAgKikKKyAgICBYWF9DRkxBR1M9CisgICAgWFhfQU5TSUZMQUdTPQorICAgIDs7CisgIGVzYWMKK2ZpCitBQ19TVUJTVChbWFhfQ0ZMQUdTXSkKK0FDX1NVQlNUKFtYWF9BTlNJRkxBR1NdKQorCisKKyMgQWxsIGxpYnJhcnkgdGVzdHMgYmVsb3cgdHJ5IGBwa2ctY29uZmlnJyBmaXJzdC4gIElmIHRoYXQgZmFpbHMsIGEgZnVuY3Rpb24KKyMgZnJvbSB0aGUgbGlicmFyeSBpcyB0ZXN0ZWQgaW4gdGhlIHRyYWRpdGlvbmFsIGF1dG9jb25mIHdheSAoemxpYiwgYnppcDIpLAorIyBvciBhIGNvbmZpZyBzY3JpcHQgaXMgY2FsbGVkIChsaWJwbmcpLgorIworIyBUaGUgYHh4eF9yZXFwcml2JyB2YXJpYWJsZXMgYXJlIGZvciB0aGUgYFJlcXVpcmVzLnByaXZhdGUnIGZpZWxkIGluCisjIGBmcmVldHlwZTIucGMnLiAgVGhlIGB4eHhfbGlicHJpdicgdmFyaWFibGVzIGFyZSBmb3IgdGhlIGBMaWJzLnByaXZhdGUnCisjIGZpZWxkIGluIGBmcmVldHlwZTIucGMnIGlmIHBrZy1jb25maWcgZG9lc24ndCBmaW5kIGEgcHJvcGVyIC5wYyBmaWxlLgorIworIyBUaGUgYHh4eF9saWJzdGF0aWNjb25mJyB2YXJpYWJsZXMgYXJlIGZvciB0aGUgYGZyZWV0eXBlLWNvbmZpZycgc2NyaXB0LgorIworIyBOb3RlIHRoYXQgYSBjYWxsIHRvIFBLR19DSEVDS19NT0RVTEVTKFhYWCwgLi4uKSBzZXRzIGFuZCBjcmVhdGVzIHRoZQorIyBvdXRwdXQgdmFyaWFibGVzIGBYWFhfQ0ZMQUdTJyBhbmQgYFhYWF9MSUJTJy4gIEluIGNhc2Ugb25lIG9yIGJvdGggYXJlIHNldAorIyBmb3IgYSBsaWJyYXJ5IGJ5IHRoZSB1c2VyLCBubyBlbnRyeSBmb3IgdGhpcyBsaWJyYXJ5IGlzIGFkZGVkIHRvCisjIGBSZXF1aXJlcy5wcml2YXRlJy4gIEluc3RlYWQsIGl0IGdldHMgYWRkZWQgdG8gYExpYnMucHJpdmF0ZScKKworCisjIGNoZWNrIGZvciBzeXN0ZW0gemxpYgorCitBQ19BUkdfV0lUSChbemxpYl0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXpsaWI9QDw6QHllc3xub3xhdXRvQDo+QF0sCisgICAgICAgICAgICAgICAgICBbdXNlIHN5c3RlbSB6bGliIGluc3RlYWQgb2YgaW50ZXJuYWwgbGlicmFyeSBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKKyAgW10sIFt3aXRoX3psaWI9YXV0b10pCisKK2hhdmVfemxpYj1ubworaWYgdGVzdCB4IiR3aXRoX3psaWIiID0geHllcyAtbyB4IiR3aXRoX3psaWIiID0geGF1dG87IHRoZW4KKyAgemxpYl9wa2c9InpsaWIiCisgIGhhdmVfemxpYl9wa2c9bm8KKworICBpZiB0ZXN0IHgiJFpMSUJfQ0ZMQUdTIiA9IHggLWEgeCIkWkxJQl9MSUJTIiA9IHg7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskemxpYl9wa2ddLCBbaGF2ZV96bGliX3BrZz15ZXNdKQorICBmaQorICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWkxJQl0sIFskemxpYl9wa2ddLAorICAgICAgICAgICAgICAgICAgICBbaGF2ZV96bGliPSJ5ZXMgKHBrZy1jb25maWcpIl0sIFs6XSkKKworICBpZiB0ZXN0ICRoYXZlX3psaWJfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIHpsaWIucGMKKyAgICB6bGliX3JlcXByaXY9IiR6bGliX3BrZyIKKyAgICB6bGliX2xpYnByaXY9CisgICAgemxpYl9saWJzdGF0aWNjb25mPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgIiR6bGliX3BrZyJgCisgIGVsc2UKKyAgICB6bGliX3JlcXByaXY9CisKKyAgICBpZiB0ZXN0ICIkaGF2ZV96bGliIiAhPSBubzsgdGhlbgorICAgICAgIyBaTElCX0NGTEFHUyBhbmQgWkxJQl9MSUJTIGFyZSBzZXQgYnkgdGhlIHVzZXIKKyAgICAgIHpsaWJfbGlicHJpdj0iJFpMSUJfTElCUyIKKyAgICAgIHpsaWJfbGlic3RhdGljY29uZj0iJFpMSUJfTElCUyIKKyAgICAgIGhhdmVfemxpYj0ieWVzIChaTElCX0NGTEFHUyBhbmQgWkxJQl9MSUJTKSIKKyAgICBlbHNlCisgICAgICAjIGZhbGwgYmFjayB0byBzdGFuZGFyZCBhdXRvY29uZiB0ZXN0CisgICAgICBBQ19DSEVDS19MSUIoW3pdLAorICAgICAgICAgICAgICAgICAgIFtnenNldHBhcmFtc10sCisgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUihbemxpYi5oXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3psaWI9InllcyAoYXV0b2NvbmYgdGVzdCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9saWJwcml2PSItbHoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYl9saWJzdGF0aWNjb25mPSIkemxpYl9saWJwcml2IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfTElCUz0iJHpsaWJfbGlicHJpdiJdKV0pCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCIkd2l0aF96bGliIiA9IHh5ZXMgLWEgIiRoYXZlX3psaWIiID0gbm87IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtleHRlcm5hbCB6bGliIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZF0pCitmaQorCisKKyMgY2hlY2sgZm9yIHN5c3RlbSBsaWJiejIKKworQUNfQVJHX1dJVEgoW2J6aXAyXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtYnppcDI9QDw6QHllc3xub3xhdXRvQDo+QF0sCisgICAgICAgICAgICAgICAgICBbc3VwcG9ydCBiemlwMiBjb21wcmVzc2VkIGZvbnRzIEA8OkBkZWZhdWx0PWF1dG9AOj5AXSldLAorICBbXSwgW3dpdGhfYnppcDI9YXV0b10pCisKK2hhdmVfYnppcDI9bm8KK2lmIHRlc3QgeCIkd2l0aF9iemlwMiIgPSB4eWVzIC1vIHgiJHdpdGhfYnppcDIiID0geGF1dG87IHRoZW4KKyAgYnppcDJfcGtnPSJiemlwMiIKKyAgaGF2ZV9iemlwMl9wa2c9bm8KKworICBpZiB0ZXN0IHgiJEJaSVAyX0NGTEFHUyIgPSB4IC1hIHgiJEJaSVAyX0xJQlMiID0geDsgdGhlbgorICAgIFBLR19DSEVDS19FWElTVFMoWyRiemlwMl9wa2ddLCBbaGF2ZV9iemlwMl9wa2c9eWVzXSkKKyAgZmkKKyAgUEtHX0NIRUNLX01PRFVMRVMoW0JaSVAyXSwgWyRiemlwMl9wa2ddLAorICAgICAgICAgICAgICAgICAgICBbaGF2ZV9iemlwMj0ieWVzIChwa2ctY29uZmlnKSJdLCBbOl0pCisKKyAgaWYgdGVzdCAkaGF2ZV9iemlwMl9wa2cgPSB5ZXM7IHRoZW4KKyAgICAjIHdlIGhhdmUgYnppcDIucGMKKyAgICBiemlwMl9yZXFwcml2PSIkYnppcDJfcGtnIgorICAgIGJ6aXAyX2xpYnByaXY9CisgICAgYnppcDJfbGlic3RhdGljY29uZj1gJFBLR19DT05GSUcgLS1zdGF0aWMgLS1saWJzICIkYnppcDJfcGtnImAKKyAgZWxzZQorICAgIGJ6aXAyX3JlcXByaXY9CisKKyAgICBpZiB0ZXN0ICIkaGF2ZV9iemlwMiIgIT0gbm87IHRoZW4KKyAgICAgICMgQlpJUDJfQ0ZMQUdTIGFuZCBCWklQMl9MSUJTIGFyZSBzZXQgYnkgdGhlIHVzZXIKKyAgICAgIGJ6aXAyX2xpYnByaXY9IiRCWklQMl9MSUJTIgorICAgICAgYnppcDJfbGlic3RhdGljY29uZj0iJEJaSVAyX0xJQlMiCisgICAgICBoYXZlX2J6aXAyPSJ5ZXMgKEJaSVAyX0NGTEFHUyBhbmQgQlpJUDJfTElCUykiCisgICAgZWxzZQorICAgICAgIyBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgYXV0b2NvbmYgdGVzdAorICAgICAgQUNfQ0hFQ0tfTElCKFtiejJdLAorICAgICAgICAgICAgICAgICAgIFtCWjJfYnpEZWNvbXByZXNzXSwKKyAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtiemxpYi5oXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2J6aXAyPSJ5ZXMgKGF1dG9jb25mIHRlc3QpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyX2xpYnByaXY9Ii1sYnoyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyX2xpYnN0YXRpY2NvbmY9IiRiemlwMl9saWJwcml2IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJaSVAyX0xJQlM9IiRiemlwMl9saWJwcml2Il0pXSkKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCB4IiR3aXRoX2J6aXAyIiA9IHh5ZXMgLWEgIiRoYXZlX2J6aXAyIiA9IG5vOyB0aGVuCisgIEFDX01TR19FUlJPUihbYnppcDIgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGxpYnJhcnkgbm90IGZvdW5kXSkKK2ZpCisKKworIyBjaGVjayBmb3Igc3lzdGVtIGxpYnBuZworCitBQ19BUkdfV0lUSChbcG5nXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcG5nPUA8OkB5ZXN8bm98YXV0b0A6PkBdLAorICAgICAgICAgICAgICAgICAgW3N1cHBvcnQgcG5nIGNvbXByZXNzZWQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwcyBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKKyAgW10sIFt3aXRoX3BuZz1hdXRvXSkKKworaGF2ZV9saWJwbmc9bm8KK2lmIHRlc3QgeCIkd2l0aF9wbmciID0geHllcyAtbyB4IiR3aXRoX3BuZyIgPSB4YXV0bzsgdGhlbgorICBsaWJwbmdfcGtnPSJsaWJwbmciCisgIGhhdmVfbGlicG5nX3BrZz1ubworCisgIGlmIHRlc3QgeCIkTElCUE5HX0NGTEFHUyIgPSB4IC1hIHgiJExJQlBOR19MSUJTIiA9IHg7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskbGlicG5nX3BrZ10sIFtoYXZlX2xpYnBuZ19wa2c9eWVzXSkKKyAgZmkKKyAgUEtHX0NIRUNLX01PRFVMRVMoW0xJQlBOR10sIFskbGlicG5nX3BrZ10sCisgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xpYnBuZz0ieWVzIChwa2ctY29uZmlnKSJdLCBbOl0pCisKKyAgaWYgdGVzdCAkaGF2ZV9saWJwbmdfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGxpYnBuZy5wYworICAgIGxpYnBuZ19yZXFwcml2PSIkbGlicG5nX3BrZyIKKyAgICBsaWJwbmdfbGlicHJpdj0KKyAgICBsaWJwbmdfbGlic3RhdGljY29uZj1gJFBLR19DT05GSUcgLS1zdGF0aWMgLS1saWJzICIkbGlicG5nX3BrZyJgCisgIGVsc2UKKyAgICBsaWJwbmdfcmVxcHJpdj0KKworICAgIGlmIHRlc3QgIiRoYXZlX2xpYnBuZyIgIT0gbm87IHRoZW4KKyAgICAgICMgTElCUE5HX0NGTEFHUyBhbmQgTElCUE5HX0xJQlMgYXJlIHNldCBieSB0aGUgdXNlcgorICAgICAgbGlicG5nX2xpYnByaXY9IiRMSUJQTkdfTElCUyIKKyAgICAgIGxpYnBuZ19saWJzdGF0aWNjb25mPSIkTElCUE5HX0xJQlMiCisgICAgICBoYXZlX2xpYnBuZz0ieWVzIChMSUJQTkdfQ0ZMQUdTIGFuZCBMSUJQTkdfTElCUykiCisgICAgZWxzZQorICAgICAgIyBmYWxsIGJhY2sgdG8gY29uZmlnIHNjcmlwdC4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGxpYnBuZy1jb25maWddKQorICAgICAgaWYgd2hpY2ggbGlicG5nLWNvbmZpZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIExJQlBOR19DRkxBR1M9YGxpYnBuZy1jb25maWcgLS1jZmxhZ3NgCisgICAgICAgIExJQlBOR19MSUJTPWBsaWJwbmctY29uZmlnIC0tbGRmbGFnc2AKKyAgICAgICAgbGlicG5nX2xpYnByaXY9YGxpYnBuZy1jb25maWcgLS1zdGF0aWMgLS1sZGZsYWdzYAorICAgICAgICBsaWJwbmdfbGlic3RhdGljY29uZj0iJGxpYnBuZ19saWJwcml2IgorICAgICAgICBoYXZlX2xpYnBuZz0ieWVzIChsaWJwbmctY29uZmlnKSIKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCB4IiR3aXRoX3BuZyIgPSB4eWVzIC1hICIkaGF2ZV9saWJwbmciID0gbm87IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtsaWJwbmcgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGxpYnJhcnkgbm90IGZvdW5kXSkKK2ZpCisKKworIyBjaGVjayBmb3Igc3lzdGVtIGxpYmhhcmZidXp6CisKK0FDX0FSR19XSVRIKFtoYXJmYnV6el0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWhhcmZidXp6PUA8OkB5ZXN8bm98YXV0b0A6PkBdLAorICAgICAgICAgICAgICAgICAgW2ltcHJvdmUgYXV0by1oaW50aW5nIG9mIE9wZW5UeXBlIGZvbnRzIEA8OkBkZWZhdWx0PWF1dG9AOj5AXSldLAorICBbXSwgW3dpdGhfaGFyZmJ1eno9YXV0b10pCisKK2hhdmVfaGFyZmJ1eno9bm8KK2lmIHRlc3QgeCIkd2l0aF9oYXJmYnV6eiIgPSB4eWVzIC1vIHgiJHdpdGhfaGFyZmJ1enoiID0geGF1dG87IHRoZW4KKyAgaGFyZmJ1enpfcGtnPSJoYXJmYnV6eiA+PSAwLjkuMTkiCisgIGhhdmVfaGFyZmJ1enpfcGtnPW5vCisKKyAgaWYgdGVzdCB4IiRIQVJGQlVaWl9DRkxBR1MiID0geCAtYSB4IiRIQVJGQlVaWl9MSUJTIiA9IHg7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskaGFyZmJ1enpfcGtnXSwgW2hhdmVfaGFyZmJ1enpfcGtnPXllc10pCisgIGZpCisgIFBLR19DSEVDS19NT0RVTEVTKFtIQVJGQlVaWl0sIFskaGFyZmJ1enpfcGtnXSwKKyAgICAgICAgICAgICAgICAgICAgW2hhdmVfaGFyZmJ1eno9InllcyAocGtnLWNvbmZpZykiXSwgWzpdKQorCisgIGlmIHRlc3QgJGhhdmVfaGFyZmJ1enpfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGhhcmZidXp6LnBjCisgICAgaGFyZmJ1enpfcmVxcHJpdj0iJGhhcmZidXp6X3BrZyIKKyAgICBoYXJmYnV6el9saWJwcml2PQorICAgIGhhcmZidXp6X2xpYnN0YXRpY2NvbmY9YCRQS0dfQ09ORklHIC0tc3RhdGljIC0tbGlicyAiJGhhcmZidXp6X3BrZyJgCisgIGVsc2UKKyAgICBoYXJmYnV6el9yZXFwcml2PQorCisgICAgaWYgdGVzdCAiJGhhdmVfaGFyZmJ1enoiICE9IG5vOyB0aGVuCisgICAgICAjIEhBUkZCVVpaX0NGTEFHUyBhbmQgSEFSRkJVWlpfTElCUyBhcmUgc2V0IGJ5IHRoZSB1c2VyCisgICAgICBoYXJmYnV6el9saWJwcml2PSIkSEFSRkJVWlpfTElCUyIKKyAgICAgIGhhcmZidXp6X2xpYnN0YXRpY2NvbmY9IiRIQVJGQlVaWl9MSUJTIgorICAgICAgaGF2ZV9oYXJmYnV6ej0ieWVzIChIQVJGQlVaWl9DRkxBR1MgYW5kIEhBUkZCVVpaX0xJQlMpIgorICAgIGVsc2UKKyAgICAgICMgc2luY2UgSGFyZkJ1enogaXMgcXVpdGUgYSBuZXcgbGlicmFyeSB3ZSBkb24ndCBmYWxsIGJhY2sgdG8gYQorICAgICAgIyBkaWZmZXJlbnQgdGVzdDsgYWRkaXRpb25hbGx5LCBpdCBoYXMgdG9vIG1hbnkgZGVwZW5kZW5jaWVzCisgICAgICA6CisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCIkd2l0aF9oYXJmYnV6eiIgPSB4eWVzIC1hICIkaGF2ZV9oYXJmYnV6eiIgPSBubzsgdGhlbgorICBBQ19NU0dfRVJST1IoW2hhcmZidXp6IHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZF0pCitmaQorCisKKyMgU29tZSBvcHRpb25zIGhhbmRsaW5nIFNES3MvYXJjaHMgaW4gQ0ZMQUdTIHNob3VsZCBiZSBjb3BpZWQKKyMgdG8gTERGTEFHUy4gQXBwbGUgVGVjaE5vdGUgMjEzNyByZWNvbW1lbmRzIHRvIGluY2x1ZGUgdGhlc2UKKyMgb3B0aW9ucyBpbiBDRkxBR1MgYnV0IG5vdCBpbiBMREZMQUdTLgorCitzYXZlX2NvbmZpZ19hcmdzPSQqCitzZXQgZHVtbXkgJHtDRkxBR1N9CitpPTEKK3doaWxlIHRlc3QgJGkgLWxlICQjCitkbworICBjPSQxCisKKyAgY2FzZSAiJHtjfSIgaW4KKyAgLWlzeXNyb290fC1hcmNoKSAjIG9wdGlvbnMgdGFraW5nIDEgYXJndW1lbnQKKyAgICBhPSQyCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIENGTEFHUyBhbmQgTERGTEFHUyBzaGFyZSAke2N9ICR7YX1dKQorICAgIGlmIGV4cHIgIiAke0xERkxBR1N9ICIgOiAiLiogJHtjfSAqJHthfS4qIiA+IC9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm8sIGNvcHkgdG8gTERGTEFHU10pCisgICAgICBMREZMQUdTPSIke0xERkxBR1N9ICR7Y30gJHthfSIKKyAgICBmaQorICAgIHNoaWZ0IDEKKyAgICA7OworICAtbTMyfC1tNjR8LW1hcmNoPSp8LW1jcHU9KikgIyBvcHRpb25zIHRha2luZyBubyBhcmd1bWVudAorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBDRkxBR1MgYW5kIExERkxBR1Mgc2hhcmUgJHtjfV0pCisgICAgaWYgZXhwciAiICR7TERGTEFHU30gIiA6ICIuKiAke2N9ICoke2F9LioiID4gL2Rldi9udWxsCisgICAgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtubywgY29weSB0byBMREZMQUdTXSkKKyAgICAgIExERkxBR1M9IiR7TERGTEFHU30gJHtjfSIKKyAgICBmaQorICAgIDs7CisgICMgKikKKyAgIyAgIEFDX01TR19SRVNVTFQoWyR7Y30gaXMgbm90IGNvcGllZCB0byBMREZMQUdTXSkKKyAgIyAgIDs7CisgIGVzYWMKKworICBzaGlmdCAxCitkb25lCitzZXQgJHtzYXZlX2NvbmZpZ19hcmdzfQorCisKKyMgV2hldGhlciB0byB1c2UgTWFjIE9TIHJlc291cmNlLWJhc2VkIGZvbnRzLgorCitmdG1hY19jPSIiICMgc3JjL2Jhc2UvZnRtYWMuYyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIG1ha2VmaWxlcyBieSBkZWZhdWx0CisKK0FDX0FSR19XSVRIKFtvbGQtbWFjLWZvbnRzXSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1vbGQtbWFjLWZvbnRzXSwKKyAgICAgICAgICAgICAgICAgW2FsbG93IE1hYyByZXNvdXJjZS1iYXNlZCBmb250cyB0byBiZSB1c2VkXSkpCitpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllczsgdGhlbgorICBvcmlnX0xERkxBR1M9IiR7TERGTEFHU30iCisgIEFDX01TR19DSEVDS0lORyhbQ29yZVNlcnZpY2VzICYgQXBwbGljYXRpb25TZXJ2aWNlcyBvZiBNYWMgT1MgWF0pCisgIGZ0Ml9leHRyYV9saWJzPSItV2wsLWZyYW1ld29yayxDb3JlU2VydmljZXMgLVdsLC1mcmFtZXdvcmssQXBwbGljYXRpb25TZXJ2aWNlcyIKKyAgTERGTEFHUz0iJExERkxBR1MgJGZ0Ml9leHRyYV9saWJzIgorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisgICAgICBdLAorICAgICAgWworCisgICAgICAgIHNob3J0IHJlcyA9IDA7CisKKworICAgICAgICBVc2VSZXNGaWxlKCByZXMgKTsKKworICAgICAgXSldLAorICAgIFtBQ19NU0dfUkVTVUxUKFtva10pCisgICAgIGZ0bWFjX2M9J2Z0bWFjLmMnCisgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBPU19JTkxJTkUgbWFjcm8gaXMgQU5TSSBjb21wYXRpYmxlXSkKKyAgICAgb3JpZ19DRkxBR1M9IiRDRkxBR1MgLURGVF9NQUNJTlRPU0giCisgICAgIENGTEFHUz0iJENGTEFHUyAkWFhfQ0ZMQUdTICRYWF9BTlNJRkxBR1MiCisgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICBBQ19MQU5HX1BST0dSQU0oWworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKyAgICAgICAgIF0sCisgICAgICAgICBbCisKKyAgICAgICAgICAgLyogT1NIb3N0Qnl0ZU9yZGVyKCkgaXMgdHlwZWQgYXMgT1NfSU5MSU5FICovCisgICAgICAgICAgIGludDMyX3QgIG9zX2J5dGVfb3JkZXIgPSBPU0hvc3RCeXRlT3JkZXIoKTsKKworCisgICAgICAgICAgIGlmICggT1NCaWdFbmRpYW4gIT0gb3NfYnl0ZV9vcmRlciApCisgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgIF0pXSwKKyAgICAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICAgICBDRkxBR1M9IiRvcmlnX0NGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9BTlNJX09TX0lOTElORT0xIgorICAgICAgIF0sCisgICAgICAgW0FDX01TR19SRVNVTFQoW25vLCBBTlNJIGluY29tcGF0aWJsZV0pCisgICAgICAgIENGTEFHUz0iJG9yaWdfQ0ZMQUdTIgorICAgICAgIF0pCisgICAgIEFDX01TR19DSEVDS0lORyhbdHlwZSBSZXNvdXJjZUluZGV4XSkKKyAgICAgb3JpZ19DRkxBR1M9IiRDRkxBR1MiCisgICAgIENGTEFHUz0iJENGTEFHUyAkWFhfQ0ZMQUdTICRYWF9BTlNJRkxBR1MiCisgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICBBQ19MQU5HX1BST0dSQU0oWworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorIyBpbmNsdWRlIDxSZXNvdXJjZXMuaD4KKyNlbmRpZgorCisgICAgICAgICBdLAorICAgICAgICAgWworCisgICAgICAgICAgIFJlc291cmNlSW5kZXggaSA9IDA7CisgICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgICBdKV0sCisgICAgICAgW0FDX01TR19SRVNVTFQoW29rXSkKKyAgICAgICAgQ0ZMQUdTPSIkb3JpZ19DRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWD0xIgorICAgICAgIF0sCisgICAgICAgW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgQ0ZMQUdTPSIkb3JpZ19DRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWD0wIgorICAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSkKKyAgICAgZnQyX2V4dHJhX2xpYnM9IiIKKyAgICAgTERGTEFHUz0iJHtvcmlnX0xERkxBR1N9IgorICAgICBDRkxBR1M9IiRDRkxBR1MgLUREQVJXSU5fTk9fQ0FSQk9OIl0pCitlbHNlCisgIGNhc2UgeCRob3N0X29zIGluCisgIHhkYXJ3aW4qKQorICAgIGRubCBBQ19NU0dfV0FSTihbaG9zdCBzeXN0ZW0gaXMgTWFjT1MgYnV0IGNvbmZpZ3VyZWQgdG8gYnVpbGQgd2l0aG91dCBDYXJib25dKQorICAgIENGTEFHUz0iJENGTEFHUyAtRERBUldJTl9OT19DQVJCT04iCisgICAgOzsKKyAgKikKKyAgICA7OworICBlc2FjCitmaQorCisKKyMgV2hldGhlciB0byB1c2UgRmlsZU1hbmFnZXIsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UgTWFjIE9TIFggMTAuNC4KKworQUNfQVJHX1dJVEgoW2Zzc3BlY10sCisgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnNzcGVjXSwKKyAgICAgICAgICAgICAgICAgW3VzZSBvYnNvbGV0ZSBGU1NwZWMgQVBJIG9mIE1hY09TLCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ9eWVzKV0pKQoraWYgdGVzdCB4JHdpdGhfZnNzcGVjID0geG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNTUEVDPTAiCitlbGlmIHRlc3QgeCR3aXRoX29sZF9tYWNfZm9udHMgPSB4eWVzIC1hIHgkd2l0aF9mc3NwZWMgIT0geDsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW0ZTU3BlYy1iYXNlZCBGaWxlTWFuYWdlcl0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oWworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKyAgICAgIF0sCisgICAgICBbCisKKyAgICAgICAgRkNCUEJQdHIgICAgICAgICAgcGFyYW1CbG9jazsKKyAgICAgICAgc2hvcnQgICAgICAgICAgICAgdlJlZk51bTsKKyAgICAgICAgbG9uZyAgICAgICAgICAgICAgZGlySUQ7CisgICAgICAgIENvbnN0U3RyMjU1UGFyYW0gIGZpbGVOYW1lOworICAgICAgICBGU1NwZWMqICAgICAgICAgICBzcGVjOworCisKKyAgICAgICAgLyogRlNTcGVjIGZ1bmN0aW9uczogZGVwcmVjYXRlZCBzaW5jZSBNYWMgT1MgWCAxMC40ICovCisgICAgICAgIFBCR2V0RkNCSW5mb1N5bmMoIHBhcmFtQmxvY2sgKTsKKyAgICAgICAgRlNNYWtlRlNTcGVjKCB2UmVmTnVtLCBkaXJJRCwgZmlsZU5hbWUsIHNwZWMgKTsKKworICAgICAgXSldLAorICAgIFtBQ19NU0dfUkVTVUxUKFtva10pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNTUEVDPTEiXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSkKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1NQRUM9MCJdKQorZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIEZpbGVNYW5hZ2VyIGluIENhcmJvbiBzaW5jZSBNYWNPUyA5LnguCisKK0FDX0FSR19XSVRIKFtmc3JlZl0sCisgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnNyZWZdLAorICAgICAgICAgICAgICAgICBbdXNlIENhcmJvbiBGU1JlZiBBUEkgb2YgTWFjT1MsIGlmIGF2YWlsYWJsZSAoZGVmYXVsdD15ZXMpXSkpCitpZiB0ZXN0IHgkd2l0aF9mc3JlZiA9IHhubzsgdGhlbgorICBBQ19NU0dfV0FSTihbCisqKiogV0FSTklORworICAgIEZyZWVUeXBlMiBidWlsdCB3aXRob3V0IEZTUmVmIEFQSSBjYW5ub3QgbG9hZAorICAgIGRhdGEtZm9yayBmb250cyBvbiBNYWNPUywgZXhjZXB0IG9mIFhYWC5kZm9udC4KKyAgICBdKQorICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0ZTUkVGPTAiCitlbGlmIHRlc3QgeCR3aXRoX29sZF9tYWNfZm9udHMgPSB4eWVzIC1hIHgkd2l0aF9mc3JlZiAhPSB4OyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbRlNSZWYtYmFzZWQgRmlsZU1hbmFnZXJdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisgICAgICBdLAorICAgICAgWworCisgICAgICAgIHNob3J0ICAgICAgICAgICAgICAgIHZSZWZOdW07CisgICAgICAgIGxvbmcgICAgICAgICAgICAgICAgIGRpcklEOworICAgICAgICBDb25zdFN0cjI1NVBhcmFtICAgICBmaWxlTmFtZTsKKworICAgICAgICBCb29sZWFuKiAgICAgICAgICAgICBpc0RpcmVjdG9yeTsKKyAgICAgICAgVUludDgqICAgICAgICAgICAgICAgcGF0aDsKKyAgICAgICAgU0ludDE2ICAgICAgICAgICAgICAgZGVzaXJlZFJlZk51bTsKKyAgICAgICAgU0ludDE2KiAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICAgIFNJbnQxNiogICAgICAgICAgICAgIGFjdHVhbFJlZk51bTsKKyAgICAgICAgSEZTVW5pU3RyMjU1KiAgICAgICAgb3V0Rm9ya05hbWU7CisgICAgICAgIEZTVm9sdW1lUmVmTnVtICAgICAgIHZvbHVtZTsKKyAgICAgICAgRlNDYXRhbG9nSW5mb0JpdG1hcCAgd2hpY2hJbmZvOworICAgICAgICBGU0NhdGFsb2dJbmZvKiAgICAgICBjYXRhbG9nSW5mbzsKKyAgICAgICAgRlNGb3JrSW5mbyogICAgICAgICAgZm9ya0luZm87CisgICAgICAgIEZTUmVmKiAgICAgICAgICAgICAgIHJlZjsKKworI2lmIEhBVkVfRlNTUEVDCisgICAgICAgIEZTU3BlYyogICAgICAgICAgICAgIHNwZWM7CisjZW5kaWYKKworICAgICAgICAvKiBGU1JlZiBmdW5jdGlvbnM6IG5vIG5lZWQgdG8gY2hlY2s/ICovCisgICAgICAgIEZTR2V0Rm9ya0NCSW5mbyggZGVzaXJlZFJlZk51bSwgdm9sdW1lLCBpdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxSZWZOdW0sIGZvcmtJbmZvLCByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Rm9ya05hbWUgKTsKKyAgICAgICAgRlNQYXRoTWFrZVJlZiggcGF0aCwgcmVmLCBpc0RpcmVjdG9yeSApOworCisjaWYgSEFWRV9GU1NQRUMKKyAgICAgICAgRlNwTWFrZUZTUmVmICggc3BlYywgcmVmICk7CisgICAgICAgIEZTR2V0Q2F0YWxvZ0luZm8oIHJlZiwgd2hpY2hJbmZvLCBjYXRhbG9nSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Rm9ya05hbWUsIHNwZWMsIHJlZiApOworI2VuZGlmCisgICAgICBdKV0sCisgICAgW0FDX01TR19SRVNVTFQoW29rXSkKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1JFRj0xIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNSRUY9MCJdKQorZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIFF1aWNrRHJhdyBBUEkgaW4gVG9vbEJveCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBzaW5jZQorIyBNYWMgT1MgWCAxMC40LgorCitBQ19BUkdfV0lUSChbcXVpY2tkcmF3LXRvb2xib3hdLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLXF1aWNrZHJhdy10b29sYm94XSwKKyAgICAgICAgICAgICAgICAgW3VzZSBNYWNPUyBRdWlja0RyYXcgaW4gVG9vbEJveCwgaWYgYXZhaWxhYmxlIChkZWZhdWx0PXllcyldKSkKK2lmIHRlc3QgeCR3aXRoX3F1aWNrZHJhd190b29sYm94ID0geG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX1RPT0xCT1g9MCIKK2VsaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXMgLWEgeCR3aXRoX3F1aWNrZHJhd190b29sYm94ICE9IHg7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtRdWlja0RyYXcgRm9udE1hbmFnZXIgZnVuY3Rpb25zIGluIFRvb2xCb3hdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8Rm9udHMuaD4KKyNlbmRpZgorCisgICAgICBdLAorICAgICAgWworCisgICAgICAgIFN0cjI1NSAgICAgZmFtaWx5TmFtZTsKKyAgICAgICAgU0ludDE2ICAgICBmYW1pbHlJRCAgID0gMDsKKyAgICAgICAgRk1JbnB1dCogICBmbUluICAgICAgID0gTlVMTDsKKyAgICAgICAgRk1PdXRwdXQqICBmbU91dCAgICAgID0gTlVMTDsKKworCisgICAgICAgIEdldEZvbnROYW1lKCBmYW1pbHlJRCwgZmFtaWx5TmFtZSApOworICAgICAgICBHZXRGTnVtKCBmYW1pbHlOYW1lLCAmZmFtaWx5SUQgKTsKKyAgICAgICAgZm1PdXQgPSBGTVN3YXBGb250KCBmbUluICk7CisKKyAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1FVSUNLRFJBV19UT09MQk9YPTEiXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSkKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9RVUlDS0RSQVdfVE9PTEJPWD0wIl0pCitmaQorCisKKyMgV2hldGhlciB0byB1c2UgUXVpY2tEcmF3IEFQSSBpbiBDYXJib24sIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UKKyMgTWFjIE9TIFggMTAuNC4KKworQUNfQVJHX1dJVEgoW3F1aWNrZHJhdy1jYXJib25dLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLXF1aWNrZHJhdy1jYXJib25dLAorICAgICAgICAgICAgICAgICBbdXNlIE1hY09TIFF1aWNrRHJhdyBpbiBDYXJib24sIGlmIGF2YWlsYWJsZSAoZGVmYXVsdD15ZXMpXSkpCitpZiB0ZXN0IHgkd2l0aF9xdWlja2RyYXdfY2FyYm9uID0geG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX0NBUkJPTj0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfcXVpY2tkcmF3X2NhcmJvbiAhPSB4OyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbUXVpY2tEcmF3IEZvbnRNYW5hZ2VyIGZ1bmN0aW9ucyBpbiBDYXJib25dKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8Rm9udHMuaD4KKyNlbmRpZgorCisgICAgICBdLAorICAgICAgWworCisgICAgICAgIEZNRm9udEZhbWlseUl0ZXJhdG9yICAgICAgICAgIGZhbUl0ZXI7CisgICAgICAgIEZNRm9udEZhbWlseSAgICAgICAgICAgICAgICAgIGZhbWlseTsKKyAgICAgICAgU3RyMjU1ICAgICAgICAgICAgICAgICAgICAgICAgZmFtTmFtZVN0cjsKKyAgICAgICAgRk1Gb250RmFtaWx5SW5zdGFuY2VJdGVyYXRvciAgaW5zdEl0ZXI7CisgICAgICAgIEZNRm9udFN0eWxlICAgICAgICAgICAgICAgICAgIHN0eWxlOworICAgICAgICBGTUZvbnRTaXplICAgICAgICAgICAgICAgICAgICBzaXplOworICAgICAgICBGTUZvbnQgICAgICAgICAgICAgICAgICAgICAgICBmb250OworICAgICAgICBGU1NwZWMqICAgICAgICAgICAgICAgICAgICAgICBwYXRoU3BlYzsKKworCisgICAgICAgIEZNQ3JlYXRlRm9udEZhbWlseUl0ZXJhdG9yKCBOVUxMLCBOVUxMLCBrRk1Vc2VHbG9iYWxTY29wZU9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYW1JdGVyICk7CisgICAgICAgIEZNR2V0TmV4dEZvbnRGYW1pbHkoICZmYW1JdGVyLCAmZmFtaWx5ICk7CisgICAgICAgIEZNR2V0Rm9udEZhbWlseU5hbWUoIGZhbWlseSwgZmFtTmFtZVN0ciApOworICAgICAgICBGTUNyZWF0ZUZvbnRGYW1pbHlJbnN0YW5jZUl0ZXJhdG9yKCBmYW1pbHksICZpbnN0SXRlciApOworICAgICAgICBGTUdldE5leHRGb250RmFtaWx5SW5zdGFuY2UoICZpbnN0SXRlciwgJmZvbnQsICZzdHlsZSwgJnNpemUgKTsKKyAgICAgICAgRk1EaXNwb3NlRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IoICZpbnN0SXRlciApOworICAgICAgICBGTURpc3Bvc2VGb250RmFtaWx5SXRlcmF0b3IoICZmYW1JdGVyICk7CisgICAgICAgIEZNR2V0Rm9udENvbnRhaW5lciggZm9udCwgcGF0aFNwZWMgKTsKKworICAgICAgXSldLAorICAgIFtBQ19NU0dfUkVTVUxUKFtva10pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX0NBUkJPTj0xIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX0NBUkJPTj0wIl0pCitmaQorCisKKyMgV2hldGhlciB0byB1c2UgQXBwbGVUeXBlU2VydmljZSBzaW5jZSBNYWMgT1MgWC4KKworQUNfQVJHX1dJVEgoW2F0c10sCisgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtYXRzXSwKKyAgICAgICAgICAgICAgICAgW3VzZSBBcHBsZVR5cGVTZXJ2aWNlLCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ9eWVzKV0pKQoraWYgdGVzdCB4JHdpdGhfYXRzID0geG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfQVRTPTAiCitlbGlmIHRlc3QgeCR3aXRoX29sZF9tYWNfZm9udHMgPSB4eWVzIC1hIHgkd2l0aF9hdHMgIT0geDsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW0FwcGxlVHlwZVNlcnZpY2UgZnVuY3Rpb25zXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPENvbmRpdGlvbmFsTWFjcm9zLmg+CisjIGluY2x1ZGUgPEZpbGVzLmg+CisjZW5kaWYKKworICAgICAgXSwKKyAgICAgIFsKKworICAgICAgICBGU1NwZWMqICBwYXRoU3BlYzsKKworCisgICAgICAgIEFUU0ZvbnRGaW5kRnJvbU5hbWUoIE5VTEwsIGtBVFNPcHRpb25GbGFnc1VuUmVzdHJpY3RlZFNjb3BlICk7CisjaWYgSEFWRV9GU1NQRUMKKyAgICAgICAgQVRTRm9udEdldEZpbGVTcGVjaWZpY2F0aW9uKCAwLCBwYXRoU3BlYyApOworI2VuZGlmCisKKyAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0FUUz0xIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfQVRTPTAiXSkKK2ZpCisKK2Nhc2UgIiRDRkxBR1MiIGluCisgICpIQVZFX0ZTU1BFQyogfCAqSEFWRV9GU1JFRiogfCAqSEFWRV9RVUlDS0RSQVcqIHwgKkhBVkVfQVRTKiApCisgICAgQUNfTVNHX1dBUk4oWworKioqIFdBUk5JTkcKKyAgICBGU1NwZWMvRlNSZWYvUXVpY2tEcmF3L0FUUyBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGdpdmVuLAorICAgIHRodXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVwbGFjZSBzcmMvYmFzZS9mdG1hYy5jIGJ5IGJ1aWxkcy9tYWMvZnRtYWMuYy4KKyAgICBdKQorICAgIENGTEFHUz0iJENGTEFHUyAiJy1JJChUT1BfRElSKS9idWlsZHMvbWFjLycKKyAgICA7OworICAqKQorICAgIDs7Citlc2FjCisKKworIyBlbnRyaWVzIGluIFJlcXVpcmVzLnByaXZhdGUgYXJlIHNlcGFyYXRlZCBieSBjb21tYXM7CitSRVFVSVJFU19QUklWQVRFPSIkemxpYl9yZXFwcml2LCAgICAgXAorICAgICAgICAgICAgICAgICAgJGJ6aXAyX3JlcXByaXYsICAgIFwKKyAgICAgICAgICAgICAgICAgICRsaWJwbmdfcmVxcHJpdiwgICBcCisgICAgICAgICAgICAgICAgICAkaGFyZmJ1enpfcmVxcHJpdiIKKyMgYmVhdXRpZnkKK1JFUVVJUkVTX1BSSVZBVEU9YGVjaG8gIiRSRVFVSVJFU19QUklWQVRFIiBcCisgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAncy9eICAqLy8nICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvICAqJC8vJyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywgKi8sL2cnICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8sLCovLC9nJyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvXiwqLy8nICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywqJC8vJyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8sLywgL2cnYAorCitMSUJTX1BSSVZBVEU9IiR6bGliX2xpYnByaXYgICAgIFwKKyAgICAgICAgICAgICAgJGJ6aXAyX2xpYnByaXYgICAgXAorICAgICAgICAgICAgICAkbGlicG5nX2xpYnByaXYgICBcCisgICAgICAgICAgICAgICRoYXJmYnV6el9saWJwcml2IFwKKyAgICAgICAgICAgICAgJGZ0Ml9leHRyYV9saWJzIgorIyBiZWF1dGlmeQorTElCU19QUklWQVRFPWBlY2hvICIkTElCU19QUklWQVRFIiAgXAorICAgICAgICAgICAgICB8IHNlZCAtZSAncy9eICAqLy8nICAgXAorICAgICAgICAgICAgICAgICAgICAtZSAncy8gICokLy8nICAgXAorICAgICAgICAgICAgICAgICAgICAtZSAncy8gICovIC9nJ2AKKworTElCU1NUQVRJQ19DT05GSUc9Ii1sZnJlZXR5cGUgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAkemxpYl9saWJzdGF0aWNjb25mICAgICBcCisgICAgICAgICAgICAgICAgICAgJGJ6aXAyX2xpYnN0YXRpY2NvbmYgICAgXAorICAgICAgICAgICAgICAgICAgICRsaWJwbmdfbGlic3RhdGljY29uZiAgIFwKKyAgICAgICAgICAgICAgICAgICAkaGFyZmJ1enpfbGlic3RhdGljY29uZiBcCisgICAgICAgICAgICAgICAgICAgJGZ0Ml9leHRyYV9saWJzIgorIyByZW1vdmUgLUwvdXNyL2xpYiBhbmQgLUwvdXNyL2xpYjY0IHNpbmNlIGBmcmVldHlwZS1jb25maWcnIGFkZHMgdGhlbSBsYXRlcgorIyBvbiBpZiBuZWNlc3Nhcnk7IGFsc28gYmVhdXRpZnkKK0xJQlNTVEFUSUNfQ09ORklHPWBlY2hvICIkTElCU1NUQVRJQ19DT05GSUciICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAnc3wtTCAqL3Vzci9saWI2NC8qIHwgfGcnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtZSAnc3wtTCAqL3Vzci9saWIvKiB8IHxnJyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eICAqLy8nICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8gICokLy8nICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8gICovIC9nJ2AKKworCitBQ19TVUJTVChbZnRtYWNfY10pCitBQ19TVUJTVChbUkVRVUlSRVNfUFJJVkFURV0pCitBQ19TVUJTVChbTElCU19QUklWQVRFXSkKK0FDX1NVQlNUKFtMSUJTU1RBVElDX0NPTkZJR10pCisKK0FDX1NVQlNUKFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSkKK0FDX1NVQlNUKFt3bF0pCitBQ19TVUJTVChbYnVpbGRfbGlidG9vbF9saWJzXSkKKworCisjIGNoYW5naW5nIExERkxBR1MgdmFsdWUgc2hvdWxkIG9ubHkgYmUgZG9uZSBhZnRlcgorIyBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyB0ZXN0CisKK2lmIHRlc3QgIiRoYXZlX3psaWIiICE9IG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAkWkxJQl9DRkxBR1MgLURGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCIgorICBMREZMQUdTPSIkTERGTEFHUyAkWkxJQl9MSUJTIgorZmkKKworaWYgdGVzdCAiJGhhdmVfYnppcDIiICE9IG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAkQlpJUDJfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9VU0VfQlpJUDIiCisgIExERkxBR1M9IiRMREZMQUdTICRCWklQMl9MSUJTIgorZmkKK2lmIHRlc3QgIiRoYXZlX2xpYnBuZyIgIT0gbm87IHRoZW4KKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRMSUJQTkdfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9VU0VfUE5HIgorICBMREZMQUdTPSIkTERGTEFHUyAkTElCUE5HX0xJQlMiCitmaQoraWYgdGVzdCAiJGhhdmVfaGFyZmJ1enoiICE9IG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAkSEFSRkJVWlpfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloiCisgIExERkxBR1M9IiRMREZMQUdTICRIQVJGQlVaWl9MSUJTIgorZmkKKworQUNfU1VCU1QoW0NGTEFHU10pCitBQ19TVUJTVChbTERGTEFHU10pCisKKyMgY29uZmlndXJhdGlvbiBmaWxlIC0tIHN0YXkgaW4gOC4zIGxpbWl0CisjCisjIHNpbmNlICN1bmRlZiBkb2Vzbid0IHN1cnZpdmUgaW4gY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZXMgd2UgcmVwbGFjZQorIyBgL3VuZGVmJyB3aXRoIGAjdW5kZWYnIGFmdGVyIGNyZWF0aW5nIHRoZSBvdXRwdXQgZmlsZQorCitBQ19DT05GSUdfSEVBREVSUyhbZnRjb25maWcuaDpmdGNvbmZpZy5pbl0sCisgIFttdiBmdGNvbmZpZy5oIGZ0Y29uZmlnLnRtcAorICAgc2VkICdzfC91bmRlZnwjdW5kZWZ8JyA8IGZ0Y29uZmlnLnRtcCA+IGZ0Y29uZmlnLmgKKyAgIHJtIGZ0Y29uZmlnLnRtcF0pCisKKyMgY3JlYXRlIHRoZSBVbml4LXNwZWNpZmljIHN1Yi1NYWtlZmlsZXMgYGJ1aWxkcy91bml4L3VuaXgtZGVmLm1rJworIyBhbmQgYGJ1aWxkcy91bml4L3VuaXgtY2MubWsnIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0KKyMKK0FDX0NPTkZJR19GSUxFUyhbdW5peC1jYy5tazp1bml4LWNjLmluCisgICAgICAgICAgICAgICAgIHVuaXgtZGVmLm1rOnVuaXgtZGVmLmluXSkKKworIyByZS1nZW5lcmF0ZSB0aGUgSmFtZmlsZSB0byB1c2UgbGlidG9vbCBub3cKKyMKKyMgQUNfQ09ORklHX0ZJTEVTKFsuLi8uLi9KYW1maWxlOi4uLy4uL0phbWZpbGUuaW5dKQorCitBQ19PVVRQVVQKKworQUNfTVNHX05PVElDRShbCisKK0xpYnJhcnkgY29uZmlndXJhdGlvbjoKKyAgZXh0ZXJuYWwgemxpYjogJGhhdmVfemxpYgorICBiemlwMjogICAgICAgICAkaGF2ZV9iemlwMgorICBsaWJwbmc6ICAgICAgICAkaGF2ZV9saWJwbmcKKyAgaGFyZmJ1eno6ICAgICAgJGhhdmVfaGFyZmJ1enoKK10pCisKKyMgZW5kIG9mIGNvbmZpZ3VyZS5yYXcKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWd1cmUucmF3IGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyOGJmMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9jb25maWd1cmUucmF3CkBAIC0wLDAgKzEsMTAyMSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdC4KKyMKKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK0FDX0lOSVQoW0ZyZWVUeXBlXSwgW0BWRVJTSU9OQF0sIFtmcmVldHlwZUBub25nbnUub3JnXSwgW2ZyZWV0eXBlXSkKK0FDX0NPTkZJR19TUkNESVIoW2Z0Y29uZmlnLmluXSkKKworCisjIERvbid0IGZvcmdldCB0byB1cGRhdGUgZG9jcy9WRVJTSU9OLkRMTCEKKwordmVyc2lvbl9pbmZvPScxODowOjEyJworQUNfU1VCU1QoW3ZlcnNpb25faW5mb10pCitmdF92ZXJzaW9uPWBlY2hvICR2ZXJzaW9uX2luZm8gfCB0ciA6IC5gCitBQ19TVUJTVChbZnRfdmVyc2lvbl0pCisKKworIyBjaGVja3MgZm9yIHN5c3RlbSB0eXBlCisKK0FDX0NBTk9OSUNBTF9IT1NUCisKKworIyBjaGVja3MgZm9yIHByb2dyYW1zCisKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ1BQCitBQ19TVUJTVChFWEVFWFQpCisKK1BLR19QUk9HX1BLR19DT05GSUcoWzAuMjRdKQorCitMVF9JTklUKHdpbjMyLWRsbCkKKworCisjIGNoZWNrcyBmb3IgbmF0aXZlIHByb2dyYW1zIHRvIGdlbmVyYXRlIGJ1aWxkaW5nIHRvb2wKKworaWYgdGVzdCAke2Nyb3NzX2NvbXBpbGluZ30gPSB5ZXM7IHRoZW4KKyAgQUNfQ0hFQ0tfUFJPRyhDQ19CVUlMRCwgJHtidWlsZH0tZ2NjLCAke2J1aWxkfS1nY2MpCisgIHRlc3QgLXogIiR7Q0NfQlVJTER9IiAmJiBBQ19DSEVDS19QUk9HKENDX0JVSUxELCBnY2MsIGdjYykKKyAgdGVzdCAteiAiJHtDQ19CVUlMRH0iICYmIEFDX0NIRUNLX1BST0coQ0NfQlVJTEQsIGNjLCBjYywgLCAsIC91c3IvdWNiL2NjKQorICB0ZXN0IC16ICIke0NDX0JVSUxEfSIgJiYgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZmluZCBuYXRpdmUgQyBjb21waWxlcl0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3VmZml4IG9mIG5hdGl2ZSBleGVjdXRhYmxlc10pCisgIHJtIC1mIGEuKiBiLiogYV9vdXQuZXhlIGNvbmZ0ZXN0LioKKyAgZWNobyA+IGNvbmZ0ZXN0LmMgImludCBtYWluKCkgeyByZXR1cm4gMDt9IgorICAke0NDX0JVSUxEfSBjb25mdGVzdC5jIHx8IEFDX01TR19FUlJPUihbbmF0aXZlIEMgY29tcGlsZXIgaXMgbm90IHdvcmtpbmddKQorICBybSAtZiBjb25mdGVzdC5jCisgIGlmIHRlc3QgLXggYS5vdXQgLW8gLXggYi5vdXQgLW8gLXggY29uZnRlc3Q7IHRoZW4KKyAgICBFWEVFWFRfQlVJTEQ9IiIKKyAgZWxpZiB0ZXN0IC14IGFfb3V0LmV4ZSAtbyAteCBjb25mdGVzdC5leGU7IHRoZW4KKyAgICBFWEVFWFRfQlVJTEQ9Ii5leGUiCisgIGVsaWYgdGVzdCAteCBjb25mdGVzdC4qOyB0aGVuCisgICAgRVhFRVhUX0JVSUxEPWBlY2hvIGNvbmZ0ZXN0LiogfCBzZWQgLW4gJzFzL14uKlwuLy4vJ2AKKyAgZmkKKyAgcm0gLWYgYS4qIGIuKiBhX291dC5leGUgY29uZnRlc3QuKgorICBBQ19NU0dfUkVTVUxUKCRFWEVFWFRfQlVJTEQpCitlbHNlCisgIENDX0JVSUxEPSR7Q0N9CisgIEVYRUVYVF9CVUlMRD0ke0VYRUVYVH0KK2ZpCisKK0FDX1NVQlNUKENDX0JVSUxEKQorQUNfU1VCU1QoRVhFRVhUX0JVSUxEKQorCisKKyMgYXV4aWxpYXJ5IHByb2dyYW1zCisKK0FDX0NIRUNLX1BST0coW1JNRElSXSwgW3JtZGlyXSwgW3JtZGlyXSkKKworCisjIFNpbmNlIHRoaXMgZmlsZSB3aWxsIGJlIGZpbmFsbHkgbW92ZWQgdG8gYW5vdGhlciBkaXJlY3Rvcnkgd2UgbWFrZQorIyB0aGUgcGF0aCBvZiB0aGUgaW5zdGFsbCBzY3JpcHQgYWJzb2x1dGUuICBUaGlzIHNtYWxsIGNvZGUgc25pcHBldCBoYXMKKyMgYmVlbiB0YWtlbiBmcm9tIGF1dG9tYWtlJ3MgYHlsd3JhcCcgc2NyaXB0LgorCitBQ19QUk9HX0lOU1RBTEwKK2Nhc2UgIiRJTlNUQUxMIiBpbgorLyopCisgIDs7CisqLyopCisgIElOU1RBTEw9ImBwd2RgLyRJTlNUQUxMIgorICA7OworZXNhYworCisKKyMgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKKworQUNfSEVBREVSX1NUREMKK0FDX0NIRUNLX0hFQURFUlMoW2ZjbnRsLmggdW5pc3RkLmhdKQorCisKKyMgY2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworCitBQ19DX0NPTlNUCitBQ19DSEVDS19TSVpFT0YoW2ludF0pCitBQ19DSEVDS19TSVpFT0YoW2xvbmddKQorCisKKyMgY2hlY2sgd2hldGhlciBjcHAgY29tcHV0YXRpb24gb2Ygc2l6ZSBvZiBpbnQgYW5kIGxvbmcgaW4gZnRjb25maWcuaW4gd29ya3MKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGNwcCBjb21wdXRhdGlvbiBvZiBiaXQgbGVuZ3RoIGluIGZ0Y29uZmlnLmluIHdvcmtzXSkKK29yaWdfQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IgorQ1BQRkxBR1M9Ii1JJHtzcmNkaXJ9IC1JLiAke0NQUEZMQUdTfSIKKworYWNfY2xlYW5fZmlsZXM9Citmb3IgZiBpbiBmdDJidWlsZC5oIGZ0b3B0aW9uLmggZnRzdGRsaWIuaDsgZG8KKyAgaWYgdGVzdCAhIC1mICRmOyB0aGVuCisgICAgYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkZiIKKyAgICB0b3VjaCAkZgorICBmaQorZG9uZQorCitjYXQgPiBjb25mdGVzdC5jIDw8XF9BQ0VPRgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICJmdG9wdGlvbi5oIgorI2RlZmluZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IICJmdHN0ZGxpYi5oIgorI2RlZmluZSBGVF9VSU5UX01BWCAgVUlOVF9NQVgKKyNkZWZpbmUgRlRfVUxPTkdfTUFYIFVMT05HX01BWAorI2luY2x1ZGUgImZ0Y29uZmlnLmluIgorX0FDRU9GCitlY2hvID4+IGNvbmZ0ZXN0LmMgIiNpZiBGVF9TSVpFT0ZfSU5UID09ICIke2FjX2N2X3NpemVvZl9pbnR9CitlY2hvID4+IGNvbmZ0ZXN0LmMgImFjX2NwcF9mdF9zaXplb2ZfaW50PSIke2FjX2N2X3NpemVvZl9pbnR9CitlY2hvID4+IGNvbmZ0ZXN0LmMgIiNlbmRpZiIKK2VjaG8gPj4gY29uZnRlc3QuYyAiI2lmIEZUX1NJWkVPRl9MT05HID09ICIke2FjX2N2X3NpemVvZl9sb25nfQorZWNobyA+PiBjb25mdGVzdC5jICJhY19jcHBfZnRfc2l6ZW9mX2xvbmc9IiR7YWNfY3Zfc2l6ZW9mX2xvbmd9CitlY2hvID4+IGNvbmZ0ZXN0LmMgIiNlbmRpZiIKKworJHtDUFB9ICR7Q1BQRkxBR1N9IGNvbmZ0ZXN0LmMgfCAke0dSRVB9IGFjX2NwcF9mdCA+IGNvbmZ0ZXN0LnNoCitldmFsIGBjYXQgY29uZnRlc3Quc2hgCitybSAtZiBjb25mdGVzdC4qICRhY19jbGVhbl9maWxlcworCitpZiB0ZXN0IHggIT0gIngke2FjX2NwcF9mdF9zaXplb2ZfaW50fSIgXAorICAgLWEgeCAhPSB4IiR7YWNfY3BwX2Z0X3NpemVvZl9sb25nfSI7IHRoZW4KKyAgdW5zZXQgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcworZWxzZQorICBmdF91c2VfYXV0b2NvbmZfc2l6ZW9mX3R5cGVzPXllcworZmkKKworQUNfQVJHX0VOQUJMRShiaWFyY2gtY29uZmlnLAorWyAgLS1lbmFibGUtYmlhcmNoLWNvbmZpZyAgaW5zdGFsbCBiaWFyY2ggZnRjb25maWcuaCB0byBzdXBwb3J0IG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgYnkgc2luZ2xlIGZpbGVdLCBbXSwgW10pCisKK2Nhc2UgOiR7ZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlc306JHtlbmFibGVfYmlhcmNoX2NvbmZpZ306IGluCisgIDp5ZXM6eWVzOikKKyAgICBBQ19NU0dfUkVTVUxUKFticm9rZW4gYnV0IHVzZSBpdF0pCisgICAgdW5zZXQgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcworICAgIDs7CisgIDo6bm86KQorICAgIEFDX01TR19SRVNVTFQoW3dvcmtzIGJ1dCBpZ25vcmUgaXRdKQorICAgIGZ0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXM9eWVzCisgICAgOzsKKyAgOjp5ZXM6IHwgOjo6KQorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdW5zZXQgZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlcworICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZ0X3VzZV9hdXRvY29uZl9zaXplb2ZfdHlwZXM9eWVzCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCB4IiR7ZnRfdXNlX2F1dG9jb25mX3NpemVvZl90eXBlc30iID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoW0ZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVNdLCBbXSwKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgYXV0b2NvbmYgc2l6ZW9mIHR5cGVzIHNob3VsZCBiZSB1c2VkLl0pCitmaQorCitDUFBGTEFHUz0iJHtvcmlnX0NQUEZMQUdTfSIKKworCisjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKKworIyBIZXJlIHdlIGNoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSBvdXIgbW1hcCBmaWxlIGNvbXBvbmVudC4KKworQUNfQVJHX0VOQUJMRShbbW1hcF0sCisgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbW1hcF0sCisgICAgICAgICAgICAgICAgIFtkbyBub3QgY2hlY2sgbW1hcCgpIGFuZCBkbyBub3QgdXNlXSksCisgIFtlbmFibGVfbW1hcD0ibm8iXSxbZW5hYmxlX21tYXA9InllcyJdKQoraWYgdGVzdCAieCR7ZW5hYmxlX21tYXB9IiAhPSAieG5vIjsgdGhlbgorICBBQ19GVU5DX01NQVAKK2ZpCitpZiB0ZXN0ICJ4JHtlbmFibGVfbW1hcH0iID0gInhubyIgXAorICAgLW8gIiRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiAhPSAieWVzIjsgdGhlbgorICBGVFNZU19TUkM9JyQoQkFTRV9ESVIpL2Z0c3lzdGVtLmMnCitlbHNlCisgIEZUU1lTX1NSQz0nJChCVUlMRF9ESVIpL2Z0c3lzdGVtLmMnCisKKyAgQUNfQ0hFQ0tfREVDTFMoW211bm1hcF0sCisgICAgW10sCisgICAgW10sCisgICAgWworCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworICAgIF0pCisKKyAgRlRfTVVOTUFQX1BBUkFNCitmaQorQUNfU1VCU1QoW0ZUU1lTX1NSQ10pCisKK0FDX0NIRUNLX0ZVTkNTKFttZW1jcHkgbWVtbW92ZV0pCisKKworIyBnZXQgY29tcGlsZXIgZmxhZ3MgcmlnaHQKKyMKKyMgICBXZSB0cnkgdG8gbWFrZSB0aGUgY29tcGlsZXIgd29yayBmb3IgQzg5LXN0cmljdCBzb3VyY2UuICBFdmVuIGlmIHRoZQorIyAgIEMgY29tcGlsZXIgaXMgZ2NjIGFuZCBDODkgZmxhZ3MgYXJlIGF2YWlsYWJsZSwgc29tZSBzeXN0ZW0gaGVhZGVycworIyAgIChlLmcuLCBBbmRyb2lkIEJpb25pYyBsaWJjKSBhcmUgYnJva2VuIGluIEM4OSBtb2RlLiAgV2UgaGF2ZSB0byBjaGVjaworIyAgIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIGZpbmlzaGVzIHN1Y2Nlc3NmdWxseS4KKyMKKyMgICBEdWUgdG8gYnVncyBpbiBtaW5nd3J0IDQuMC4zIHdlIGRvbid0IHVzZSBgLWFuc2knIGZvciBNaW5HVy4KKyMKKyMgICBUbyBhdm9pZCB6aWxsaW9ucyBvZgorIworIyAgICAgSVNPIEM5MCBkb2VzIG5vdCBzdXBwb3J0ICdsb25nIGxvbmcnCisjCisjICAgd2FybmluZ3MsIHdlIGRpc2FibGUgYC1wZWRhbnRpYycgZm9yIGdjYyB2ZXJzaW9uIDwgNC42LgorIworaWYgdGVzdCAieCRHQ0MiID0geHllczsgdGhlbgorICBYWF9DRkxBR1M9Ii1XYWxsIgorICBjYXNlICIkaG9zdCIgaW4KKyAgKi0qLW1pbmd3KikKKyAgICBYWF9BTlNJRkxBR1M9Ii1wZWRhbnRpYyIKKyAgICA7OworICAqKQorICAgIEdDQ19WRVJTSU9OPWAkQ0MgLWR1bXB2ZXJzaW9uYAorICAgIEdDQ19NQUpPUj1gZWNobyAiJEdDQ19WRVJTSU9OIiB8IHNlZCAncy9cKFtbXi5dXVtbXi5dXSpcKS4qL1wxLydgCisgICAgR0NDX01JTk9SPWBlY2hvICIkR0NDX1ZFUlNJT04iIHwgc2VkICdzL1tbXi5dXVtbXi5dXSouXChbW14uXV1bW14uXV0qXCkuKi9cMS8nYAorCisgICAgWFhfUEVEQU5USUM9LXBlZGFudGljCisgICAgaWYgdGVzdCAkR0NDX01BSk9SIC1sdCA0OyB0aGVuCisgICAgICBYWF9QRURBTlRJQz0KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICRHQ0NfTUFKT1IgLWVxIDQgLWEgJEdDQ19NSU5PUiAtbHQgNjsgdGhlbgorICAgICAgICBYWF9QRURBTlRJQz0KKyAgICAgIGZpCisgICAgZmkKKworICAgIFhYX0FOU0lGTEFHUz0iIgorICAgIGZvciBhIGluICRYWF9QRURBTlRJQyAtYW5zaQorICAgIGRvCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2djYyBjb21waWxlciBmbGFnICR7YX0gdG8gYXNzdXJlIEFOU0kgQyB3b3JrcyBjb3JyZWN0bHldKQorICAgICAgb3JpZ19DRkxBR1M9IiR7Q0ZMQUdTfSIKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9ICR7WFhfQU5TSUZMQUdTfSAke2F9IgorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oWworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworICAgICAgICAgIF0sCisgICAgICAgICAgWworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB1dHMoICIiICk7CisgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgXSldLAorICAgICAgICBbQUNfTVNHX1JFU1VMVChbb2ssIGFkZCBpdCB0byBYWF9BTlNJRkxBR1NdKQorICAgICAgICAgWFhfQU5TSUZMQUdTPSIke1hYX0FOU0lGTEFHU30gJHthfSIKKyAgICAgICAgXSwKKyAgICAgICAgW0FDX01TR19SRVNVTFQoW25vXSldKQorICAgICAgQ0ZMQUdTPSIke29yaWdfQ0ZMQUdTfSIKKyAgICBkb25lCisgICAgOzsKKyAgZXNhYworZWxzZQorICBjYXNlICIkaG9zdCIgaW4KKyAgKi1kZWMtb3NmKikKKyAgICBDRkxBR1M9CisgICAgWFhfQ0ZMQUdTPSItc3RkMSAtZzMiCisgICAgWFhfQU5TSUZMQUdTPQorICAgIDs7CisgICopCisgICAgWFhfQ0ZMQUdTPQorICAgIFhYX0FOU0lGTEFHUz0KKyAgICA7OworICBlc2FjCitmaQorQUNfU1VCU1QoW1hYX0NGTEFHU10pCitBQ19TVUJTVChbWFhfQU5TSUZMQUdTXSkKKworCisjIEFsbCBsaWJyYXJ5IHRlc3RzIGJlbG93IHRyeSBgcGtnLWNvbmZpZycgZmlyc3QuICBJZiB0aGF0IGZhaWxzLCBhIGZ1bmN0aW9uCisjIGZyb20gdGhlIGxpYnJhcnkgaXMgdGVzdGVkIGluIHRoZSB0cmFkaXRpb25hbCBhdXRvY29uZiB3YXkgKHpsaWIsIGJ6aXAyKSwKKyMgb3IgYSBjb25maWcgc2NyaXB0IGlzIGNhbGxlZCAobGlicG5nKS4KKyMKKyMgVGhlIGB4eHhfcmVxcHJpdicgdmFyaWFibGVzIGFyZSBmb3IgdGhlIGBSZXF1aXJlcy5wcml2YXRlJyBmaWVsZCBpbgorIyBgZnJlZXR5cGUyLnBjJy4gIFRoZSBgeHh4X2xpYnByaXYnIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSBgTGlicy5wcml2YXRlJworIyBmaWVsZCBpbiBgZnJlZXR5cGUyLnBjJyBpZiBwa2ctY29uZmlnIGRvZXNuJ3QgZmluZCBhIHByb3BlciAucGMgZmlsZS4KKyMKKyMgVGhlIGB4eHhfbGlic3RhdGljY29uZicgdmFyaWFibGVzIGFyZSBmb3IgdGhlIGBmcmVldHlwZS1jb25maWcnIHNjcmlwdC4KKyMKKyMgTm90ZSB0aGF0IGEgY2FsbCB0byBQS0dfQ0hFQ0tfTU9EVUxFUyhYWFgsIC4uLikgc2V0cyBhbmQgY3JlYXRlcyB0aGUKKyMgb3V0cHV0IHZhcmlhYmxlcyBgWFhYX0NGTEFHUycgYW5kIGBYWFhfTElCUycuICBJbiBjYXNlIG9uZSBvciBib3RoIGFyZSBzZXQKKyMgZm9yIGEgbGlicmFyeSBieSB0aGUgdXNlciwgbm8gZW50cnkgZm9yIHRoaXMgbGlicmFyeSBpcyBhZGRlZCB0bworIyBgUmVxdWlyZXMucHJpdmF0ZScuICBJbnN0ZWFkLCBpdCBnZXRzIGFkZGVkIHRvIGBMaWJzLnByaXZhdGUnCisKKworIyBjaGVjayBmb3Igc3lzdGVtIHpsaWIKKworQUNfQVJHX1dJVEgoW3psaWJdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC16bGliPUA8OkB5ZXN8bm98YXV0b0A6PkBdLAorICAgICAgICAgICAgICAgICAgW3VzZSBzeXN0ZW0gemxpYiBpbnN0ZWFkIG9mIGludGVybmFsIGxpYnJhcnkgQDw6QGRlZmF1bHQ9YXV0b0A6PkBdKV0sCisgIFtdLCBbd2l0aF96bGliPWF1dG9dKQorCitoYXZlX3psaWI9bm8KK2lmIHRlc3QgeCIkd2l0aF96bGliIiA9IHh5ZXMgLW8geCIkd2l0aF96bGliIiA9IHhhdXRvOyB0aGVuCisgIHpsaWJfcGtnPSJ6bGliIgorICBoYXZlX3psaWJfcGtnPW5vCisKKyAgaWYgdGVzdCB4IiRaTElCX0NGTEFHUyIgPSB4IC1hIHgiJFpMSUJfTElCUyIgPSB4OyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJHpsaWJfcGtnXSwgW2hhdmVfemxpYl9wa2c9eWVzXSkKKyAgZmkKKyAgUEtHX0NIRUNLX01PRFVMRVMoW1pMSUJdLCBbJHpsaWJfcGtnXSwKKyAgICAgICAgICAgICAgICAgICAgW2hhdmVfemxpYj0ieWVzIChwa2ctY29uZmlnKSJdLCBbOl0pCisKKyAgaWYgdGVzdCAkaGF2ZV96bGliX3BrZyA9IHllczsgdGhlbgorICAgICMgd2UgaGF2ZSB6bGliLnBjCisgICAgemxpYl9yZXFwcml2PSIkemxpYl9wa2ciCisgICAgemxpYl9saWJwcml2PQorICAgIHpsaWJfbGlic3RhdGljY29uZj1gJFBLR19DT05GSUcgLS1zdGF0aWMgLS1saWJzICIkemxpYl9wa2ciYAorICBlbHNlCisgICAgemxpYl9yZXFwcml2PQorCisgICAgaWYgdGVzdCAiJGhhdmVfemxpYiIgIT0gbm87IHRoZW4KKyAgICAgICMgWkxJQl9DRkxBR1MgYW5kIFpMSUJfTElCUyBhcmUgc2V0IGJ5IHRoZSB1c2VyCisgICAgICB6bGliX2xpYnByaXY9IiRaTElCX0xJQlMiCisgICAgICB6bGliX2xpYnN0YXRpY2NvbmY9IiRaTElCX0xJQlMiCisgICAgICBoYXZlX3psaWI9InllcyAoWkxJQl9DRkxBR1MgYW5kIFpMSUJfTElCUykiCisgICAgZWxzZQorICAgICAgIyBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgYXV0b2NvbmYgdGVzdAorICAgICAgQUNfQ0hFQ0tfTElCKFt6XSwKKyAgICAgICAgICAgICAgICAgICBbZ3pzZXRwYXJhbXNdLAorICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVIoW3psaWIuaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV96bGliPSJ5ZXMgKGF1dG9jb25mIHRlc3QpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfbGlicHJpdj0iLWx6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfbGlic3RhdGljY29uZj0iJHpsaWJfbGlicHJpdiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX0xJQlM9IiR6bGliX2xpYnByaXYiXSldKQorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJHdpdGhfemxpYiIgPSB4eWVzIC1hICIkaGF2ZV96bGliIiA9IG5vOyB0aGVuCisgIEFDX01TR19FUlJPUihbZXh0ZXJuYWwgemxpYiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbGlicmFyeSBub3QgZm91bmRdKQorZmkKKworCisjIGNoZWNrIGZvciBzeXN0ZW0gbGliYnoyCisKK0FDX0FSR19XSVRIKFtiemlwMl0sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWJ6aXAyPUA8OkB5ZXN8bm98YXV0b0A6PkBdLAorICAgICAgICAgICAgICAgICAgW3N1cHBvcnQgYnppcDIgY29tcHJlc3NlZCBmb250cyBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKKyAgW10sIFt3aXRoX2J6aXAyPWF1dG9dKQorCitoYXZlX2J6aXAyPW5vCitpZiB0ZXN0IHgiJHdpdGhfYnppcDIiID0geHllcyAtbyB4IiR3aXRoX2J6aXAyIiA9IHhhdXRvOyB0aGVuCisgIGJ6aXAyX3BrZz0iYnppcDIiCisgIGhhdmVfYnppcDJfcGtnPW5vCisKKyAgaWYgdGVzdCB4IiRCWklQMl9DRkxBR1MiID0geCAtYSB4IiRCWklQMl9MSUJTIiA9IHg7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskYnppcDJfcGtnXSwgW2hhdmVfYnppcDJfcGtnPXllc10pCisgIGZpCisgIFBLR19DSEVDS19NT0RVTEVTKFtCWklQMl0sIFskYnppcDJfcGtnXSwKKyAgICAgICAgICAgICAgICAgICAgW2hhdmVfYnppcDI9InllcyAocGtnLWNvbmZpZykiXSwgWzpdKQorCisgIGlmIHRlc3QgJGhhdmVfYnppcDJfcGtnID0geWVzOyB0aGVuCisgICAgIyB3ZSBoYXZlIGJ6aXAyLnBjCisgICAgYnppcDJfcmVxcHJpdj0iJGJ6aXAyX3BrZyIKKyAgICBiemlwMl9saWJwcml2PQorICAgIGJ6aXAyX2xpYnN0YXRpY2NvbmY9YCRQS0dfQ09ORklHIC0tc3RhdGljIC0tbGlicyAiJGJ6aXAyX3BrZyJgCisgIGVsc2UKKyAgICBiemlwMl9yZXFwcml2PQorCisgICAgaWYgdGVzdCAiJGhhdmVfYnppcDIiICE9IG5vOyB0aGVuCisgICAgICAjIEJaSVAyX0NGTEFHUyBhbmQgQlpJUDJfTElCUyBhcmUgc2V0IGJ5IHRoZSB1c2VyCisgICAgICBiemlwMl9saWJwcml2PSIkQlpJUDJfTElCUyIKKyAgICAgIGJ6aXAyX2xpYnN0YXRpY2NvbmY9IiRCWklQMl9MSUJTIgorICAgICAgaGF2ZV9iemlwMj0ieWVzIChCWklQMl9DRkxBR1MgYW5kIEJaSVAyX0xJQlMpIgorICAgIGVsc2UKKyAgICAgICMgZmFsbCBiYWNrIHRvIHN0YW5kYXJkIGF1dG9jb25mIHRlc3QKKyAgICAgIEFDX0NIRUNLX0xJQihbYnoyXSwKKyAgICAgICAgICAgICAgICAgICBbQloyX2J6RGVjb21wcmVzc10sCisgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUihbYnpsaWIuaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9iemlwMj0ieWVzIChhdXRvY29uZiB0ZXN0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9saWJwcml2PSItbGJ6MiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9saWJzdGF0aWNjb25mPSIkYnppcDJfbGlicHJpdiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWklQMl9MSUJTPSIkYnppcDJfbGlicHJpdiJdKV0pCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCIkd2l0aF9iemlwMiIgPSB4eWVzIC1hICIkaGF2ZV9iemlwMiIgPSBubzsgdGhlbgorICBBQ19NU0dfRVJST1IoW2J6aXAyIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZF0pCitmaQorCisKKyMgY2hlY2sgZm9yIHN5c3RlbSBsaWJwbmcKKworQUNfQVJHX1dJVEgoW3BuZ10sCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBuZz1APDpAeWVzfG5vfGF1dG9AOj5AXSwKKyAgICAgICAgICAgICAgICAgIFtzdXBwb3J0IHBuZyBjb21wcmVzc2VkIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcHMgQDw6QGRlZmF1bHQ9YXV0b0A6PkBdKV0sCisgIFtdLCBbd2l0aF9wbmc9YXV0b10pCisKK2hhdmVfbGlicG5nPW5vCitpZiB0ZXN0IHgiJHdpdGhfcG5nIiA9IHh5ZXMgLW8geCIkd2l0aF9wbmciID0geGF1dG87IHRoZW4KKyAgbGlicG5nX3BrZz0ibGlicG5nIgorICBoYXZlX2xpYnBuZ19wa2c9bm8KKworICBpZiB0ZXN0IHgiJExJQlBOR19DRkxBR1MiID0geCAtYSB4IiRMSUJQTkdfTElCUyIgPSB4OyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJGxpYnBuZ19wa2ddLCBbaGF2ZV9saWJwbmdfcGtnPXllc10pCisgIGZpCisgIFBLR19DSEVDS19NT0RVTEVTKFtMSUJQTkddLCBbJGxpYnBuZ19wa2ddLAorICAgICAgICAgICAgICAgICAgICBbaGF2ZV9saWJwbmc9InllcyAocGtnLWNvbmZpZykiXSwgWzpdKQorCisgIGlmIHRlc3QgJGhhdmVfbGlicG5nX3BrZyA9IHllczsgdGhlbgorICAgICMgd2UgaGF2ZSBsaWJwbmcucGMKKyAgICBsaWJwbmdfcmVxcHJpdj0iJGxpYnBuZ19wa2ciCisgICAgbGlicG5nX2xpYnByaXY9CisgICAgbGlicG5nX2xpYnN0YXRpY2NvbmY9YCRQS0dfQ09ORklHIC0tc3RhdGljIC0tbGlicyAiJGxpYnBuZ19wa2ciYAorICBlbHNlCisgICAgbGlicG5nX3JlcXByaXY9CisKKyAgICBpZiB0ZXN0ICIkaGF2ZV9saWJwbmciICE9IG5vOyB0aGVuCisgICAgICAjIExJQlBOR19DRkxBR1MgYW5kIExJQlBOR19MSUJTIGFyZSBzZXQgYnkgdGhlIHVzZXIKKyAgICAgIGxpYnBuZ19saWJwcml2PSIkTElCUE5HX0xJQlMiCisgICAgICBsaWJwbmdfbGlic3RhdGljY29uZj0iJExJQlBOR19MSUJTIgorICAgICAgaGF2ZV9saWJwbmc9InllcyAoTElCUE5HX0NGTEFHUyBhbmQgTElCUE5HX0xJQlMpIgorICAgIGVsc2UKKyAgICAgICMgZmFsbCBiYWNrIHRvIGNvbmZpZyBzY3JpcHQuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsaWJwbmctY29uZmlnXSkKKyAgICAgIGlmIHdoaWNoIGxpYnBuZy1jb25maWcgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICBMSUJQTkdfQ0ZMQUdTPWBsaWJwbmctY29uZmlnIC0tY2ZsYWdzYAorICAgICAgICBMSUJQTkdfTElCUz1gbGlicG5nLWNvbmZpZyAtLWxkZmxhZ3NgCisgICAgICAgIGxpYnBuZ19saWJwcml2PWBsaWJwbmctY29uZmlnIC0tc3RhdGljIC0tbGRmbGFnc2AKKyAgICAgICAgbGlicG5nX2xpYnN0YXRpY2NvbmY9IiRsaWJwbmdfbGlicHJpdiIKKyAgICAgICAgaGF2ZV9saWJwbmc9InllcyAobGlicG5nLWNvbmZpZykiCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCIkd2l0aF9wbmciID0geHllcyAtYSAiJGhhdmVfbGlicG5nIiA9IG5vOyB0aGVuCisgIEFDX01TR19FUlJPUihbbGlicG5nIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBsaWJyYXJ5IG5vdCBmb3VuZF0pCitmaQorCisKKyMgY2hlY2sgZm9yIHN5c3RlbSBsaWJoYXJmYnV6egorCitBQ19BUkdfV0lUSChbaGFyZmJ1enpdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXJmYnV6ej1APDpAeWVzfG5vfGF1dG9AOj5AXSwKKyAgICAgICAgICAgICAgICAgIFtpbXByb3ZlIGF1dG8taGludGluZyBvZiBPcGVuVHlwZSBmb250cyBAPDpAZGVmYXVsdD1hdXRvQDo+QF0pXSwKKyAgW10sIFt3aXRoX2hhcmZidXp6PWF1dG9dKQorCitoYXZlX2hhcmZidXp6PW5vCitpZiB0ZXN0IHgiJHdpdGhfaGFyZmJ1enoiID0geHllcyAtbyB4IiR3aXRoX2hhcmZidXp6IiA9IHhhdXRvOyB0aGVuCisgIGhhcmZidXp6X3BrZz0iaGFyZmJ1enogPj0gMC45LjE5IgorICBoYXZlX2hhcmZidXp6X3BrZz1ubworCisgIGlmIHRlc3QgeCIkSEFSRkJVWlpfQ0ZMQUdTIiA9IHggLWEgeCIkSEFSRkJVWlpfTElCUyIgPSB4OyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJGhhcmZidXp6X3BrZ10sIFtoYXZlX2hhcmZidXp6X3BrZz15ZXNdKQorICBmaQorICBQS0dfQ0hFQ0tfTU9EVUxFUyhbSEFSRkJVWlpdLCBbJGhhcmZidXp6X3BrZ10sCisgICAgICAgICAgICAgICAgICAgIFtoYXZlX2hhcmZidXp6PSJ5ZXMgKHBrZy1jb25maWcpIl0sIFs6XSkKKworICBpZiB0ZXN0ICRoYXZlX2hhcmZidXp6X3BrZyA9IHllczsgdGhlbgorICAgICMgd2UgaGF2ZSBoYXJmYnV6ei5wYworICAgIGhhcmZidXp6X3JlcXByaXY9IiRoYXJmYnV6el9wa2ciCisgICAgaGFyZmJ1enpfbGlicHJpdj0KKyAgICBoYXJmYnV6el9saWJzdGF0aWNjb25mPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgIiRoYXJmYnV6el9wa2ciYAorICBlbHNlCisgICAgaGFyZmJ1enpfcmVxcHJpdj0KKworICAgIGlmIHRlc3QgIiRoYXZlX2hhcmZidXp6IiAhPSBubzsgdGhlbgorICAgICAgIyBIQVJGQlVaWl9DRkxBR1MgYW5kIEhBUkZCVVpaX0xJQlMgYXJlIHNldCBieSB0aGUgdXNlcgorICAgICAgaGFyZmJ1enpfbGlicHJpdj0iJEhBUkZCVVpaX0xJQlMiCisgICAgICBoYXJmYnV6el9saWJzdGF0aWNjb25mPSIkSEFSRkJVWlpfTElCUyIKKyAgICAgIGhhdmVfaGFyZmJ1eno9InllcyAoSEFSRkJVWlpfQ0ZMQUdTIGFuZCBIQVJGQlVaWl9MSUJTKSIKKyAgICBlbHNlCisgICAgICAjIHNpbmNlIEhhcmZCdXp6IGlzIHF1aXRlIGEgbmV3IGxpYnJhcnkgd2UgZG9uJ3QgZmFsbCBiYWNrIHRvIGEKKyAgICAgICMgZGlmZmVyZW50IHRlc3Q7IGFkZGl0aW9uYWxseSwgaXQgaGFzIHRvbyBtYW55IGRlcGVuZGVuY2llcworICAgICAgOgorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgiJHdpdGhfaGFyZmJ1enoiID0geHllcyAtYSAiJGhhdmVfaGFyZmJ1enoiID0gbm87IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtoYXJmYnV6eiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbGlicmFyeSBub3QgZm91bmRdKQorZmkKKworCisjIFNvbWUgb3B0aW9ucyBoYW5kbGluZyBTREtzL2FyY2hzIGluIENGTEFHUyBzaG91bGQgYmUgY29waWVkCisjIHRvIExERkxBR1MuIEFwcGxlIFRlY2hOb3RlIDIxMzcgcmVjb21tZW5kcyB0byBpbmNsdWRlIHRoZXNlCisjIG9wdGlvbnMgaW4gQ0ZMQUdTIGJ1dCBub3QgaW4gTERGTEFHUy4KKworc2F2ZV9jb25maWdfYXJncz0kKgorc2V0IGR1bW15ICR7Q0ZMQUdTfQoraT0xCit3aGlsZSB0ZXN0ICRpIC1sZSAkIworZG8KKyAgYz0kMQorCisgIGNhc2UgIiR7Y30iIGluCisgIC1pc3lzcm9vdHwtYXJjaCkgIyBvcHRpb25zIHRha2luZyAxIGFyZ3VtZW50CisgICAgYT0kMgorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBDRkxBR1MgYW5kIExERkxBR1Mgc2hhcmUgJHtjfSAke2F9XSkKKyAgICBpZiBleHByICIgJHtMREZMQUdTfSAiIDogIi4qICR7Y30gKiR7YX0uKiIgPiAvZGV2L251bGwKKyAgICB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vLCBjb3B5IHRvIExERkxBR1NdKQorICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSAke2N9ICR7YX0iCisgICAgZmkKKyAgICBzaGlmdCAxCisgICAgOzsKKyAgLW0zMnwtbTY0fC1tYXJjaD0qfC1tY3B1PSopICMgb3B0aW9ucyB0YWtpbmcgbm8gYXJndW1lbnQKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgQ0ZMQUdTIGFuZCBMREZMQUdTIHNoYXJlICR7Y31dKQorICAgIGlmIGV4cHIgIiAke0xERkxBR1N9ICIgOiAiLiogJHtjfSAqJHthfS4qIiA+IC9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm8sIGNvcHkgdG8gTERGTEFHU10pCisgICAgICBMREZMQUdTPSIke0xERkxBR1N9ICR7Y30iCisgICAgZmkKKyAgICA7OworICAjICopCisgICMgICBBQ19NU0dfUkVTVUxUKFske2N9IGlzIG5vdCBjb3BpZWQgdG8gTERGTEFHU10pCisgICMgICA7OworICBlc2FjCisKKyAgc2hpZnQgMQorZG9uZQorc2V0ICR7c2F2ZV9jb25maWdfYXJnc30KKworCisjIFdoZXRoZXIgdG8gdXNlIE1hYyBPUyByZXNvdXJjZS1iYXNlZCBmb250cy4KKworZnRtYWNfYz0iIiAjIHNyYy9iYXNlL2Z0bWFjLmMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiBtYWtlZmlsZXMgYnkgZGVmYXVsdAorCitBQ19BUkdfV0lUSChbb2xkLW1hYy1mb250c10sCisgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtb2xkLW1hYy1mb250c10sCisgICAgICAgICAgICAgICAgIFthbGxvdyBNYWMgcmVzb3VyY2UtYmFzZWQgZm9udHMgdG8gYmUgdXNlZF0pKQoraWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXM7IHRoZW4KKyAgb3JpZ19MREZMQUdTPSIke0xERkxBR1N9IgorICBBQ19NU0dfQ0hFQ0tJTkcoW0NvcmVTZXJ2aWNlcyAmIEFwcGxpY2F0aW9uU2VydmljZXMgb2YgTWFjIE9TIFhdKQorICBmdDJfZXh0cmFfbGlicz0iLVdsLC1mcmFtZXdvcmssQ29yZVNlcnZpY2VzIC1XbCwtZnJhbWV3b3JrLEFwcGxpY2F0aW9uU2VydmljZXMiCisgIExERkxBR1M9IiRMREZMQUdTICRmdDJfZXh0cmFfbGlicyIKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPENvbmRpdGlvbmFsTWFjcm9zLmg+CisjIGluY2x1ZGUgPEZpbGVzLmg+CisjZW5kaWYKKworICAgICAgXSwKKyAgICAgIFsKKworICAgICAgICBzaG9ydCByZXMgPSAwOworCisKKyAgICAgICAgVXNlUmVzRmlsZSggcmVzICk7CisKKyAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICBmdG1hY19jPSdmdG1hYy5jJworICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgT1NfSU5MSU5FIG1hY3JvIGlzIEFOU0kgY29tcGF0aWJsZV0pCisgICAgIG9yaWdfQ0ZMQUdTPSIkQ0ZMQUdTIC1ERlRfTUFDSU5UT1NIIgorICAgICBDRkxBR1M9IiRDRkxBR1MgJFhYX0NGTEFHUyAkWFhfQU5TSUZMQUdTIgorICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisgICAgICAgICBdLAorICAgICAgICAgWworCisgICAgICAgICAgIC8qIE9TSG9zdEJ5dGVPcmRlcigpIGlzIHR5cGVkIGFzIE9TX0lOTElORSAqLworICAgICAgICAgICBpbnQzMl90ICBvc19ieXRlX29yZGVyID0gT1NIb3N0Qnl0ZU9yZGVyKCk7CisKKworICAgICAgICAgICBpZiAoIE9TQmlnRW5kaWFuICE9IG9zX2J5dGVfb3JkZXIgKQorICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICBdKV0sCisgICAgICAgW0FDX01TR19SRVNVTFQoW29rXSkKKyAgICAgICAgQ0ZMQUdTPSIkb3JpZ19DRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfQU5TSV9PU19JTkxJTkU9MSIKKyAgICAgICBdLAorICAgICAgIFtBQ19NU0dfUkVTVUxUKFtubywgQU5TSSBpbmNvbXBhdGlibGVdKQorICAgICAgICBDRkxBR1M9IiRvcmlnX0NGTEFHUyIKKyAgICAgICBdKQorICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3R5cGUgUmVzb3VyY2VJbmRleF0pCisgICAgIG9yaWdfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRDRkxBR1MgJFhYX0NGTEFHUyAkWFhfQU5TSUZMQUdTIgorICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyMgaW5jbHVkZSA8UmVzb3VyY2VzLmg+CisjZW5kaWYKKworICAgICAgICAgXSwKKyAgICAgICAgIFsKKworICAgICAgICAgICBSZXNvdXJjZUluZGV4IGkgPSAwOworICAgICAgICAgICByZXR1cm4gaTsKKworICAgICAgICAgXSldLAorICAgICAgIFtBQ19NU0dfUkVTVUxUKFtva10pCisgICAgICAgIENGTEFHUz0iJG9yaWdfQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVg9MSIKKyAgICAgICBdLAorICAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIENGTEFHUz0iJG9yaWdfQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVg9MCIKKyAgICAgICBdKV0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIGZ0Ml9leHRyYV9saWJzPSIiCisgICAgIExERkxBR1M9IiR7b3JpZ19MREZMQUdTfSIKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1EREFSV0lOX05PX0NBUkJPTiJdKQorZWxzZQorICBjYXNlIHgkaG9zdF9vcyBpbgorICB4ZGFyd2luKikKKyAgICBkbmwgQUNfTVNHX1dBUk4oW2hvc3Qgc3lzdGVtIGlzIE1hY09TIGJ1dCBjb25maWd1cmVkIHRvIGJ1aWxkIHdpdGhvdXQgQ2FyYm9uXSkKKyAgICBDRkxBR1M9IiRDRkxBR1MgLUREQVJXSU5fTk9fQ0FSQk9OIgorICAgIDs7CisgICopCisgICAgOzsKKyAgZXNhYworZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIEZpbGVNYW5hZ2VyLCB3aGljaCBpcyBkZXByZWNhdGVkIHNpbmNlIE1hYyBPUyBYIDEwLjQuCisKK0FDX0FSR19XSVRIKFtmc3NwZWNdLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLWZzc3BlY10sCisgICAgICAgICAgICAgICAgIFt1c2Ugb2Jzb2xldGUgRlNTcGVjIEFQSSBvZiBNYWNPUywgaWYgYXZhaWxhYmxlIChkZWZhdWx0PXllcyldKSkKK2lmIHRlc3QgeCR3aXRoX2Zzc3BlYyA9IHhubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0ZTU1BFQz0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfZnNzcGVjICE9IHg7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtGU1NwZWMtYmFzZWQgRmlsZU1hbmFnZXJdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19BUFBMRV9DQ19fKQorIyBpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CisjIGluY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKyMgaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZgorCisgICAgICBdLAorICAgICAgWworCisgICAgICAgIEZDQlBCUHRyICAgICAgICAgIHBhcmFtQmxvY2s7CisgICAgICAgIHNob3J0ICAgICAgICAgICAgIHZSZWZOdW07CisgICAgICAgIGxvbmcgICAgICAgICAgICAgIGRpcklEOworICAgICAgICBDb25zdFN0cjI1NVBhcmFtICBmaWxlTmFtZTsKKyAgICAgICAgRlNTcGVjKiAgICAgICAgICAgc3BlYzsKKworCisgICAgICAgIC8qIEZTU3BlYyBmdW5jdGlvbnM6IGRlcHJlY2F0ZWQgc2luY2UgTWFjIE9TIFggMTAuNCAqLworICAgICAgICBQQkdldEZDQkluZm9TeW5jKCBwYXJhbUJsb2NrICk7CisgICAgICAgIEZTTWFrZUZTU3BlYyggdlJlZk51bSwgZGlySUQsIGZpbGVOYW1lLCBzcGVjICk7CisKKyAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0ZTU1BFQz0xIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNTUEVDPTAiXSkKK2ZpCisKKworIyBXaGV0aGVyIHRvIHVzZSBGaWxlTWFuYWdlciBpbiBDYXJib24gc2luY2UgTWFjT1MgOS54LgorCitBQ19BUkdfV0lUSChbZnNyZWZdLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLWZzcmVmXSwKKyAgICAgICAgICAgICAgICAgW3VzZSBDYXJib24gRlNSZWYgQVBJIG9mIE1hY09TLCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ9eWVzKV0pKQoraWYgdGVzdCB4JHdpdGhfZnNyZWYgPSB4bm87IHRoZW4KKyAgQUNfTVNHX1dBUk4oWworKioqIFdBUk5JTkcKKyAgICBGcmVlVHlwZTIgYnVpbHQgd2l0aG91dCBGU1JlZiBBUEkgY2Fubm90IGxvYWQKKyAgICBkYXRhLWZvcmsgZm9udHMgb24gTWFjT1MsIGV4Y2VwdCBvZiBYWFguZGZvbnQuCisgICAgXSkKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9GU1JFRj0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfZnNyZWYgIT0geDsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW0ZTUmVmLWJhc2VkIEZpbGVNYW5hZ2VyXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPENvbmRpdGlvbmFsTWFjcm9zLmg+CisjIGluY2x1ZGUgPEZpbGVzLmg+CisjZW5kaWYKKworICAgICAgXSwKKyAgICAgIFsKKworICAgICAgICBzaG9ydCAgICAgICAgICAgICAgICB2UmVmTnVtOworICAgICAgICBsb25nICAgICAgICAgICAgICAgICBkaXJJRDsKKyAgICAgICAgQ29uc3RTdHIyNTVQYXJhbSAgICAgZmlsZU5hbWU7CisKKyAgICAgICAgQm9vbGVhbiogICAgICAgICAgICAgaXNEaXJlY3Rvcnk7CisgICAgICAgIFVJbnQ4KiAgICAgICAgICAgICAgIHBhdGg7CisgICAgICAgIFNJbnQxNiAgICAgICAgICAgICAgIGRlc2lyZWRSZWZOdW07CisgICAgICAgIFNJbnQxNiogICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgICBTSW50MTYqICAgICAgICAgICAgICBhY3R1YWxSZWZOdW07CisgICAgICAgIEhGU1VuaVN0cjI1NSogICAgICAgIG91dEZvcmtOYW1lOworICAgICAgICBGU1ZvbHVtZVJlZk51bSAgICAgICB2b2x1bWU7CisgICAgICAgIEZTQ2F0YWxvZ0luZm9CaXRtYXAgIHdoaWNoSW5mbzsKKyAgICAgICAgRlNDYXRhbG9nSW5mbyogICAgICAgY2F0YWxvZ0luZm87CisgICAgICAgIEZTRm9ya0luZm8qICAgICAgICAgIGZvcmtJbmZvOworICAgICAgICBGU1JlZiogICAgICAgICAgICAgICByZWY7CisKKyNpZiBIQVZFX0ZTU1BFQworICAgICAgICBGU1NwZWMqICAgICAgICAgICAgICBzcGVjOworI2VuZGlmCisKKyAgICAgICAgLyogRlNSZWYgZnVuY3Rpb25zOiBubyBuZWVkIHRvIGNoZWNrPyAqLworICAgICAgICBGU0dldEZvcmtDQkluZm8oIGRlc2lyZWRSZWZOdW0sIHZvbHVtZSwgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsUmVmTnVtLCBmb3JrSW5mbywgcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dEZvcmtOYW1lICk7CisgICAgICAgIEZTUGF0aE1ha2VSZWYoIHBhdGgsIHJlZiwgaXNEaXJlY3RvcnkgKTsKKworI2lmIEhBVkVfRlNTUEVDCisgICAgICAgIEZTcE1ha2VGU1JlZiAoIHNwZWMsIHJlZiApOworICAgICAgICBGU0dldENhdGFsb2dJbmZvKCByZWYsIHdoaWNoSW5mbywgY2F0YWxvZ0luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dEZvcmtOYW1lLCBzcGVjLCByZWYgKTsKKyNlbmRpZgorICAgICAgXSldLAorICAgIFtBQ19NU0dfUkVTVUxUKFtva10pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfRlNSRUY9MSJdLAorICAgIFtBQ19NU0dfUkVTVUxUKFtub3QgZm91bmRdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0ZTUkVGPTAiXSkKK2ZpCisKKworIyBXaGV0aGVyIHRvIHVzZSBRdWlja0RyYXcgQVBJIGluIFRvb2xCb3gsIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc2luY2UKKyMgTWFjIE9TIFggMTAuNC4KKworQUNfQVJHX1dJVEgoW3F1aWNrZHJhdy10b29sYm94XSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1xdWlja2RyYXctdG9vbGJveF0sCisgICAgICAgICAgICAgICAgIFt1c2UgTWFjT1MgUXVpY2tEcmF3IGluIFRvb2xCb3gsIGlmIGF2YWlsYWJsZSAoZGVmYXVsdD15ZXMpXSkpCitpZiB0ZXN0IHgkd2l0aF9xdWlja2RyYXdfdG9vbGJveCA9IHhubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1FVSUNLRFJBV19UT09MQk9YPTAiCitlbGlmIHRlc3QgeCR3aXRoX29sZF9tYWNfZm9udHMgPSB4eWVzIC1hIHgkd2l0aF9xdWlja2RyYXdfdG9vbGJveCAhPSB4OyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbUXVpY2tEcmF3IEZvbnRNYW5hZ2VyIGZ1bmN0aW9ucyBpbiBUb29sQm94XSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPENvbmRpdGlvbmFsTWFjcm9zLmg+CisjIGluY2x1ZGUgPEZvbnRzLmg+CisjZW5kaWYKKworICAgICAgXSwKKyAgICAgIFsKKworICAgICAgICBTdHIyNTUgICAgIGZhbWlseU5hbWU7CisgICAgICAgIFNJbnQxNiAgICAgZmFtaWx5SUQgICA9IDA7CisgICAgICAgIEZNSW5wdXQqICAgZm1JbiAgICAgICA9IE5VTEw7CisgICAgICAgIEZNT3V0cHV0KiAgZm1PdXQgICAgICA9IE5VTEw7CisKKworICAgICAgICBHZXRGb250TmFtZSggZmFtaWx5SUQsIGZhbWlseU5hbWUgKTsKKyAgICAgICAgR2V0Rk51bSggZmFtaWx5TmFtZSwgJmZhbWlseUlEICk7CisgICAgICAgIGZtT3V0ID0gRk1Td2FwRm9udCggZm1JbiApOworCisgICAgICBdKV0sCisgICAgW0FDX01TR19SRVNVTFQoW29rXSkKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9RVUlDS0RSQVdfVE9PTEJPWD0xIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCisgICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfUVVJQ0tEUkFXX1RPT0xCT1g9MCJdKQorZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIFF1aWNrRHJhdyBBUEkgaW4gQ2FyYm9uLCB3aGljaCBpcyBkZXByZWNhdGVkIHNpbmNlCisjIE1hYyBPUyBYIDEwLjQuCisKK0FDX0FSR19XSVRIKFtxdWlja2RyYXctY2FyYm9uXSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1xdWlja2RyYXctY2FyYm9uXSwKKyAgICAgICAgICAgICAgICAgW3VzZSBNYWNPUyBRdWlja0RyYXcgaW4gQ2FyYm9uLCBpZiBhdmFpbGFibGUgKGRlZmF1bHQ9eWVzKV0pKQoraWYgdGVzdCB4JHdpdGhfcXVpY2tkcmF3X2NhcmJvbiA9IHhubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1FVSUNLRFJBV19DQVJCT049MCIKK2VsaWYgdGVzdCB4JHdpdGhfb2xkX21hY19mb250cyA9IHh5ZXMgLWEgeCR3aXRoX3F1aWNrZHJhd19jYXJib24gIT0geDsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW1F1aWNrRHJhdyBGb250TWFuYWdlciBmdW5jdGlvbnMgaW4gQ2FyYm9uXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKKyMgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPENvbmRpdGlvbmFsTWFjcm9zLmg+CisjIGluY2x1ZGUgPEZvbnRzLmg+CisjZW5kaWYKKworICAgICAgXSwKKyAgICAgIFsKKworICAgICAgICBGTUZvbnRGYW1pbHlJdGVyYXRvciAgICAgICAgICBmYW1JdGVyOworICAgICAgICBGTUZvbnRGYW1pbHkgICAgICAgICAgICAgICAgICBmYW1pbHk7CisgICAgICAgIFN0cjI1NSAgICAgICAgICAgICAgICAgICAgICAgIGZhbU5hbWVTdHI7CisgICAgICAgIEZNRm9udEZhbWlseUluc3RhbmNlSXRlcmF0b3IgIGluc3RJdGVyOworICAgICAgICBGTUZvbnRTdHlsZSAgICAgICAgICAgICAgICAgICBzdHlsZTsKKyAgICAgICAgRk1Gb250U2l6ZSAgICAgICAgICAgICAgICAgICAgc2l6ZTsKKyAgICAgICAgRk1Gb250ICAgICAgICAgICAgICAgICAgICAgICAgZm9udDsKKyAgICAgICAgRlNTcGVjKiAgICAgICAgICAgICAgICAgICAgICAgcGF0aFNwZWM7CisKKworICAgICAgICBGTUNyZWF0ZUZvbnRGYW1pbHlJdGVyYXRvciggTlVMTCwgTlVMTCwga0ZNVXNlR2xvYmFsU2NvcGVPcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFtSXRlciApOworICAgICAgICBGTUdldE5leHRGb250RmFtaWx5KCAmZmFtSXRlciwgJmZhbWlseSApOworICAgICAgICBGTUdldEZvbnRGYW1pbHlOYW1lKCBmYW1pbHksIGZhbU5hbWVTdHIgKTsKKyAgICAgICAgRk1DcmVhdGVGb250RmFtaWx5SW5zdGFuY2VJdGVyYXRvciggZmFtaWx5LCAmaW5zdEl0ZXIgKTsKKyAgICAgICAgRk1HZXROZXh0Rm9udEZhbWlseUluc3RhbmNlKCAmaW5zdEl0ZXIsICZmb250LCAmc3R5bGUsICZzaXplICk7CisgICAgICAgIEZNRGlzcG9zZUZvbnRGYW1pbHlJbnN0YW5jZUl0ZXJhdG9yKCAmaW5zdEl0ZXIgKTsKKyAgICAgICAgRk1EaXNwb3NlRm9udEZhbWlseUl0ZXJhdG9yKCAmZmFtSXRlciApOworICAgICAgICBGTUdldEZvbnRDb250YWluZXIoIGZvbnQsIHBhdGhTcGVjICk7CisKKyAgICAgIF0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbb2tdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1FVSUNLRFJBV19DQVJCT049MSJdLAorICAgIFtBQ19NU0dfUkVTVUxUKFtub3QgZm91bmRdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX1FVSUNLRFJBV19DQVJCT049MCJdKQorZmkKKworCisjIFdoZXRoZXIgdG8gdXNlIEFwcGxlVHlwZVNlcnZpY2Ugc2luY2UgTWFjIE9TIFguCisKK0FDX0FSR19XSVRIKFthdHNdLAorICBBU19IRUxQX1NUUklORyhbLS13aXRoLWF0c10sCisgICAgICAgICAgICAgICAgIFt1c2UgQXBwbGVUeXBlU2VydmljZSwgaWYgYXZhaWxhYmxlIChkZWZhdWx0PXllcyldKSkKK2lmIHRlc3QgeCR3aXRoX2F0cyA9IHhubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0FUUz0wIgorZWxpZiB0ZXN0IHgkd2l0aF9vbGRfbWFjX2ZvbnRzID0geHllcyAtYSB4JHdpdGhfYXRzICE9IHg7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtBcHBsZVR5cGVTZXJ2aWNlIGZ1bmN0aW9uc10pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oWworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18pCisjIGluY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyMgaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxDb25kaXRpb25hbE1hY3Jvcy5oPgorIyBpbmNsdWRlIDxGaWxlcy5oPgorI2VuZGlmCisKKyAgICAgIF0sCisgICAgICBbCisKKyAgICAgICAgRlNTcGVjKiAgcGF0aFNwZWM7CisKKworICAgICAgICBBVFNGb250RmluZEZyb21OYW1lKCBOVUxMLCBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSApOworI2lmIEhBVkVfRlNTUEVDCisgICAgICAgIEFUU0ZvbnRHZXRGaWxlU3BlY2lmaWNhdGlvbiggMCwgcGF0aFNwZWMgKTsKKyNlbmRpZgorCisgICAgICBdKV0sCisgICAgW0FDX01TR19SRVNVTFQoW29rXSkKKyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9BVFM9MSJdLAorICAgIFtBQ19NU0dfUkVTVUxUKFtub3QgZm91bmRdKQorICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0FUUz0wIl0pCitmaQorCitjYXNlICIkQ0ZMQUdTIiBpbgorICAqSEFWRV9GU1NQRUMqIHwgKkhBVkVfRlNSRUYqIHwgKkhBVkVfUVVJQ0tEUkFXKiB8ICpIQVZFX0FUUyogKQorICAgIEFDX01TR19XQVJOKFsKKyoqKiBXQVJOSU5HCisgICAgRlNTcGVjL0ZTUmVmL1F1aWNrRHJhdy9BVFMgb3B0aW9ucyBhcmUgZXhwbGljaXRseSBnaXZlbiwKKyAgICB0aHVzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcGxhY2Ugc3JjL2Jhc2UvZnRtYWMuYyBieSBidWlsZHMvbWFjL2Z0bWFjLmMuCisgICAgXSkKKyAgICBDRkxBR1M9IiRDRkxBR1MgIictSSQoVE9QX0RJUikvYnVpbGRzL21hYy8nCisgICAgOzsKKyAgKikKKyAgICA7OworZXNhYworCisKKyMgZW50cmllcyBpbiBSZXF1aXJlcy5wcml2YXRlIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzOworUkVRVUlSRVNfUFJJVkFURT0iJHpsaWJfcmVxcHJpdiwgICAgIFwKKyAgICAgICAgICAgICAgICAgICRiemlwMl9yZXFwcml2LCAgICBcCisgICAgICAgICAgICAgICAgICAkbGlicG5nX3JlcXByaXYsICAgXAorICAgICAgICAgICAgICAgICAgJGhhcmZidXp6X3JlcXByaXYiCisjIGJlYXV0aWZ5CitSRVFVSVJFU19QUklWQVRFPWBlY2hvICIkUkVRVUlSRVNfUFJJVkFURSIgXAorICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgJ3MvXiAgKi8vJyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLyAgKiQvLycgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8sICovLC9nJyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLCwqLywvZycgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14sKi8vJyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8sKiQvLycgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLC8sIC9nJ2AKKworTElCU19QUklWQVRFPSIkemxpYl9saWJwcml2ICAgICBcCisgICAgICAgICAgICAgICRiemlwMl9saWJwcml2ICAgIFwKKyAgICAgICAgICAgICAgJGxpYnBuZ19saWJwcml2ICAgXAorICAgICAgICAgICAgICAkaGFyZmJ1enpfbGlicHJpdiBcCisgICAgICAgICAgICAgICRmdDJfZXh0cmFfbGlicyIKKyMgYmVhdXRpZnkKK0xJQlNfUFJJVkFURT1gZWNobyAiJExJQlNfUFJJVkFURSIgIFwKKyAgICAgICAgICAgICAgfCBzZWQgLWUgJ3MvXiAgKi8vJyAgIFwKKyAgICAgICAgICAgICAgICAgICAgLWUgJ3MvICAqJC8vJyAgIFwKKyAgICAgICAgICAgICAgICAgICAgLWUgJ3MvICAqLyAvZydgCisKK0xJQlNTVEFUSUNfQ09ORklHPSItbGZyZWV0eXBlICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgJHpsaWJfbGlic3RhdGljY29uZiAgICAgXAorICAgICAgICAgICAgICAgICAgICRiemlwMl9saWJzdGF0aWNjb25mICAgIFwKKyAgICAgICAgICAgICAgICAgICAkbGlicG5nX2xpYnN0YXRpY2NvbmYgICBcCisgICAgICAgICAgICAgICAgICAgJGhhcmZidXp6X2xpYnN0YXRpY2NvbmYgXAorICAgICAgICAgICAgICAgICAgICRmdDJfZXh0cmFfbGlicyIKKyMgcmVtb3ZlIC1ML3Vzci9saWIgYW5kIC1ML3Vzci9saWI2NCBzaW5jZSBgZnJlZXR5cGUtY29uZmlnJyBhZGRzIHRoZW0gbGF0ZXIKKyMgb24gaWYgbmVjZXNzYXJ5OyBhbHNvIGJlYXV0aWZ5CitMSUJTU1RBVElDX0NPTkZJRz1gZWNobyAiJExJQlNTVEFUSUNfQ09ORklHIiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgJ3N8LUwgKi91c3IvbGliNjQvKiB8IHxnJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3N8LUwgKi91c3IvbGliLyogfCB8ZycgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvXiAgKi8vJyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvICAqJC8vJyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvICAqLyAvZydgCisKKworQUNfU1VCU1QoW2Z0bWFjX2NdKQorQUNfU1VCU1QoW1JFUVVJUkVTX1BSSVZBVEVdKQorQUNfU1VCU1QoW0xJQlNfUFJJVkFURV0pCitBQ19TVUJTVChbTElCU1NUQVRJQ19DT05GSUddKQorCitBQ19TVUJTVChbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10pCitBQ19TVUJTVChbd2xdKQorQUNfU1VCU1QoW2J1aWxkX2xpYnRvb2xfbGlic10pCisKKworIyBjaGFuZ2luZyBMREZMQUdTIHZhbHVlIHNob3VsZCBvbmx5IGJlIGRvbmUgYWZ0ZXIKKyMgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MgdGVzdAorCitpZiB0ZXN0ICIkaGF2ZV96bGliIiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJFpMSUJfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiIKKyAgTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKK2ZpCisKK2lmIHRlc3QgIiRoYXZlX2J6aXAyIiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJEJaSVAyX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyIgorICBMREZMQUdTPSIkTERGTEFHUyAkQlpJUDJfTElCUyIKK2ZpCitpZiB0ZXN0ICIkaGF2ZV9saWJwbmciICE9IG5vOyB0aGVuCisgIENGTEFHUz0iJENGTEFHUyAkTElCUE5HX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX1BORyIKKyAgTERGTEFHUz0iJExERkxBR1MgJExJQlBOR19MSUJTIgorZmkKK2lmIHRlc3QgIiRoYXZlX2hhcmZidXp6IiAhPSBubzsgdGhlbgorICBDRkxBR1M9IiRDRkxBR1MgJEhBUkZCVVpaX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaIgorICBMREZMQUdTPSIkTERGTEFHUyAkSEFSRkJVWlpfTElCUyIKK2ZpCisKK0FDX1NVQlNUKFtDRkxBR1NdKQorQUNfU1VCU1QoW0xERkxBR1NdKQorCisjIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBzdGF5IGluIDguMyBsaW1pdAorIworIyBzaW5jZSAjdW5kZWYgZG9lc24ndCBzdXJ2aXZlIGluIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGVzIHdlIHJlcGxhY2UKKyMgYC91bmRlZicgd2l0aCBgI3VuZGVmJyBhZnRlciBjcmVhdGluZyB0aGUgb3V0cHV0IGZpbGUKKworQUNfQ09ORklHX0hFQURFUlMoW2Z0Y29uZmlnLmg6ZnRjb25maWcuaW5dLAorICBbbXYgZnRjb25maWcuaCBmdGNvbmZpZy50bXAKKyAgIHNlZCAnc3wvdW5kZWZ8I3VuZGVmfCcgPCBmdGNvbmZpZy50bXAgPiBmdGNvbmZpZy5oCisgICBybSBmdGNvbmZpZy50bXBdKQorCisjIGNyZWF0ZSB0aGUgVW5peC1zcGVjaWZpYyBzdWItTWFrZWZpbGVzIGBidWlsZHMvdW5peC91bml4LWRlZi5taycKKyMgYW5kIGBidWlsZHMvdW5peC91bml4LWNjLm1rJyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtCisjCitBQ19DT05GSUdfRklMRVMoW3VuaXgtY2MubWs6dW5peC1jYy5pbgorICAgICAgICAgICAgICAgICB1bml4LWRlZi5tazp1bml4LWRlZi5pbl0pCisKKyMgcmUtZ2VuZXJhdGUgdGhlIEphbWZpbGUgdG8gdXNlIGxpYnRvb2wgbm93CisjCisjIEFDX0NPTkZJR19GSUxFUyhbLi4vLi4vSmFtZmlsZTouLi8uLi9KYW1maWxlLmluXSkKKworQUNfT1VUUFVUCisKK0FDX01TR19OT1RJQ0UoWworCitMaWJyYXJ5IGNvbmZpZ3VyYXRpb246CisgIGV4dGVybmFsIHpsaWI6ICRoYXZlX3psaWIKKyAgYnppcDI6ICAgICAgICAgJGhhdmVfYnppcDIKKyAgbGlicG5nOiAgICAgICAgJGhhdmVfbGlicG5nCisgIGhhcmZidXp6OiAgICAgICRoYXZlX2hhcmZidXp6CitdKQorCisjIGVuZCBvZiBjb25maWd1cmUucmF3CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2RldGVjdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjAwN2JmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2RldGVjdC5tawpAQCAtMCwwICsxLDk2IEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRldGVjdCBhIFVOSVggaG9zdCBwbGF0Zm9ybS4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisuUEhPTlk6IHNldHVwCisKK2lmZXEgKCQoUExBVEZPUk0pLGFuc2kpCisKKyAgIyBOb3RlOiB0aGlzIHRlc3QgaXMgZHVwbGljYXRlZCBpbiAiYnVpbGRzL3RvcGxldmVsLm1rIi4KKyAgIworICBpc191bml4IDo9ICQoc3RyaXAgJCh3aWxkY2FyZCAvc2Jpbi9pbml0KSBcCisgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkIC91c3Ivc2Jpbi9pbml0KSBcCisgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkIC9kZXYvbnVsbCkgXAorICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAvaHVyZC9hdXRoKSkKKyAgaWZuZXEgKCQoaXNfdW5peCksKQorCisgICAgUExBVEZPUk0gOj0gdW5peAorCisgIGVuZGlmICMgdGVzdCBpc191bml4CitlbmRpZiAjIHRlc3QgUExBVEZPUk0gYW5zaQorCitpZmVxICgkKFBMQVRGT1JNKSx1bml4KQorICBDT1BZICAgOj0gY3AKKyAgREVMRVRFIDo9IHJtIC1mCisgIENBVCAgICA6PSBjYXQKKworICAjIElmIGBkZXZlbCcgaXMgdGhlIHJlcXVlc3RlZCB0YXJnZXQsIHdlIHVzZSBhIHNwZWNpYWwgY29uZmlndXJhdGlvbgorICAjIGZpbGUgbmFtZWQgYHVuaXgtZGV2Lm1rJy4gIEl0IGRpc2FibGVzIG9wdGltaXphdGlvbiBhbmQgbGlidG9vbC4KKyAgIworICBpZm5lcSAoJChmaW5kc3RyaW5nIGRldmVsLCQoTUFLRUNNREdPQUxTKSksKQorICAgIENPTkZJR19GSUxFIDo9IHVuaXgtZGV2Lm1rCisgICAgQ0MgICAgICAgICAgOj0gZ2NjCisgICAgZGV2ZWw6IHNldHVwCisgICAgLlBIT05ZOiBkZXZlbAorICBlbHNlCisKKyAgICAjIElmIGBsY2MnIGlzIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0LCB3ZSB1c2UgYSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24KKyAgICAjIGZpbGUgbmFtZWQgYHVuaXgtbGNjLm1rJy4gIEl0IGRpc2FibGVzIGxpYnRvb2wgZm9yIExDQy4KKyAgICAjCisgICAgaWZuZXEgKCQoZmluZHN0cmluZyBsY2MsJChNQUtFQ01ER09BTFMpKSwpCisgICAgICBDT05GSUdfRklMRSA6PSB1bml4LWxjYy5taworICAgICAgQ0MgICAgICAgICAgOj0gbGNjCisgICAgICBsY2M6IHNldHVwCisgICAgICAuUEhPTlk6IGxjYworICAgIGVsc2UKKworICAgICAgIyBJZiBhIFVuaXggcGxhdGZvcm0gaXMgZGV0ZWN0ZWQsIHRoZSBjb25maWd1cmUgc2NyaXB0IGlzIGNhbGxlZCBhbmQKKyAgICAgICMgYHVuaXgtZGVmLm1rJyB0b2dldGhlciB3aXRoIGB1bml4LWNjLm1rJyBpcyBjcmVhdGVkLgorICAgICAgIworICAgICAgIyBBcmd1bWVudHMgdG8gYGNvbmZpZ3VyZScgc2hvdWxkIGJlIGluIHRoZSBDRkcgdmFyaWFibGUuICBFeGFtcGxlOgorICAgICAgIworICAgICAgIyAgIG1ha2UgQ0ZHPSItLXByZWZpeD0vdXNyIC0tZGlzYWJsZS1zdGF0aWMiCisgICAgICAjCisgICAgICAjIElmIHlvdSBuZWVkIHRvIHNldCBDRkxBR1Mgb3IgTERGTEFHUywgZG8gaXQgaGVyZSBhbHNvLgorICAgICAgIworICAgICAgIyBGZWVsIGZyZWUgdG8gYWRkIHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVycyBpbgorICAgICAgIyB0aGlzIGRpcmVjdG9yeSAoZS5nLiBzb2xhcmlzLm1rICsgY2hhbmdlcyBoZXJlIHRvIGRldGVjdCB0aGUKKyAgICAgICMgcGxhdGZvcm0pLgorICAgICAgIworICAgICAgQ09ORklHX0ZJTEUgOj0gdW5peC5taworICAgICAgdW5peDogc2V0dXAKKyAgICAgIG11c3RfY29uZmlndXJlIDo9IDEKKyAgICAgIC5QSE9OWTogdW5peAorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgaGF2ZV9NYWtlZmlsZSA6PSAkKHdpbGRjYXJkICQoT0JKX0RJUikvTWFrZWZpbGUpCisKKyAgICAgIENPTkZJR19TSEVMTCA/PSAvYmluL3NoCisgICAgICBzZXR1cDogc3RkX3NldHVwCisgIGlmZGVmIG11c3RfY29uZmlndXJlCisgICAgaWZuZXEgKCQoaGF2ZV9NYWtlZmlsZSksKQorICAgICAgIyB3ZSBhcmUgYnVpbGRpbmcgRlQyIG5vdCBpbiB0aGUgc3JjIHRyZWUKKwkgICAgICBDT05GSUdfU0hFTEw9IiQoQ09ORklHX1NIRUxMKSIgXAorCSAgICAgICAgJChDT05GSUdfU0hFTEwpICQoVE9QX0RJUikvYnVpbGRzL3VuaXgvY29uZmlndXJlICQodmFsdWUgQ0ZHKQorICAgIGVsc2UKKwkgICAgICBjZCBidWlsZHMvdW5peDsgXAorCSAgICAgIENPTkZJR19TSEVMTD0iJChDT05GSUdfU0hFTEwpIiBcCisJICAgICAgICAkKENPTkZJR19TSEVMTCkgLi9jb25maWd1cmUgJCh2YWx1ZSBDRkcpCisgICAgZW5kaWYKKyAgZW5kaWYKKworZW5kaWYgICAjIHRlc3QgUExBVEZPUk0gdW5peAorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjkzNTZjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbgpAQCAtMCwwICsxLDE2MyBAQAorIyEgL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKKworcHJlZml4PSIlcHJlZml4JSIKK2V4ZWNfcHJlZml4PSIlZXhlY19wcmVmaXglIgorZXhlY19wcmVmaXhfc2V0PSJubyIKK2luY2x1ZGVkaXI9IiVpbmNsdWRlZGlyJSIKK2xpYmRpcj0iJWxpYmRpciUiCitlbmFibGVfc2hhcmVkPSIlYnVpbGRfbGlidG9vbF9saWJzJSIKKwordXNhZ2UoKQoreworICBjYXQgPDxFT0YKK1VzYWdlOiBmcmVldHlwZS1jb25maWcgW09QVElPTl0uLi4KK0dldCBGcmVlVHlwZSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBpbmZvcm1hdGlvbi4KKworT3B0aW9uczoKKyAgLS1wcmVmaXggICAgICAgICAgICAgICBkaXNwbGF5IFxgLS1wcmVmaXgnIHZhbHVlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVUeXBlIGxpYnJhcnkKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICBvdmVycmlkZSBcYC0tcHJlZml4JyB2YWx1ZSB3aXRoIFBSRUZJWAorICAtLWV4ZWMtcHJlZml4ICAgICAgICAgIGRpc3BsYXkgXGAtLWV4ZWMtcHJlZml4JyB2YWx1ZSB1c2VkIGZvciBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBGcmVlVHlwZSBsaWJyYXJ5CisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgb3ZlcnJpZGUgXGAtLWV4ZWMtcHJlZml4JyB2YWx1ZSB3aXRoIEVQUkVGSVgKKyAgLS12ZXJzaW9uICAgICAgICAgICAgICBkaXNwbGF5IGxpYnRvb2wgdmVyc2lvbiBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeQorICAtLWZ0dmVyc2lvbiAgICAgICAgICAgIGRpc3BsYXkgRnJlZVR5cGUgdmVyc2lvbiBudW1iZXIKKyAgLS1saWJzICAgICAgICAgICAgICAgICBkaXNwbGF5IGZsYWdzIGZvciBsaW5raW5nIHdpdGggdGhlIEZyZWVUeXBlIGxpYnJhcnkKKyAgLS1saWJ0b29sICAgICAgICAgICAgICBkaXNwbGF5IGxpYnJhcnkgbmFtZSBmb3IgbGlua2luZyB3aXRoIGxpYnRvb2wKKyAgLS1jZmxhZ3MgICAgICAgICAgICAgICBkaXNwbGF5IGZsYWdzIGZvciBjb21waWxpbmcgd2l0aCB0aGUgRnJlZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CisgIC0tc3RhdGljICAgICAgICAgICAgICAgbWFrZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBkaXNwbGF5IGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN0YXRpYyBsaW5raW5nCitFT0YKKyAgZXhpdCAkMQorfQorCitpZiB0ZXN0ICQjIC1lcSAwIDsgdGhlbgorICB1c2FnZSAxIDE+JjIKK2ZpCisKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICIkMSIgaW4KKyAgLSo9KikKKyAgICBvcHRhcmc9YGVjaG8gIiQxIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgCisgICAgOzsKKyAgKikKKyAgICBvcHRhcmc9CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJDEgaW4KKyAgLS1wcmVmaXg9KikKKyAgICBwcmVmaXg9JG9wdGFyZworICAgIGxvY2FsX3ByZWZpeD15ZXMKKyAgICA7OworICAtLXByZWZpeCkKKyAgICBlY2hvX3ByZWZpeD15ZXMKKyAgICA7OworICAtLWV4ZWMtcHJlZml4PSopCisgICAgZXhlY19wcmVmaXg9JG9wdGFyZworICAgIGV4ZWNfcHJlZml4X3NldD15ZXMKKyAgICBsb2NhbF9wcmVmaXg9eWVzCisgICAgOzsKKyAgLS1leGVjLXByZWZpeCkKKyAgICBlY2hvX2V4ZWNfcHJlZml4PXllcworICAgIDs7CisgIC0tdmVyc2lvbikKKyAgICBlY2hvICVmdF92ZXJzaW9uJQorICAgIGV4aXQgMAorICAgIDs7CisgIC0tZnR2ZXJzaW9uKQorICAgIGVjaG9fZnRfdmVyc2lvbj15ZXMKKyAgICA7OworICAtLWNmbGFncykKKyAgICBlY2hvX2NmbGFncz15ZXMKKyAgICA7OworICAtLWxpYnMpCisgICAgZWNob19saWJzPXllcworICAgIDs7CisgIC0tbGlidG9vbCkKKyAgICBlY2hvX2xpYnRvb2w9eWVzCisgICAgOzsKKyAgLS1zdGF0aWMpCisgICAgc2hvd19zdGF0aWM9eWVzCisgICAgOzsKKyAgKikKKyAgICB1c2FnZSAxIDE+JjIKKyAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgIiRsb2NhbF9wcmVmaXgiID0gInllcyIgOyB0aGVuCisgIGlmIHRlc3QgIiRleGVjX3ByZWZpeF9zZXQiICE9ICJ5ZXMiIDsgdGhlbgorICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIiRlY2hvX3ByZWZpeCIgPSAieWVzIiA7IHRoZW4KKyAgZWNobyAke1NZU1JPT1R9JHByZWZpeAorZmkKKworaWYgdGVzdCAiJGVjaG9fZXhlY19wcmVmaXgiID0gInllcyIgOyB0aGVuCisgIGVjaG8gJHtTWVNST09UfSRleGVjX3ByZWZpeAorZmkKKworaWYgdGVzdCAiJGV4ZWNfcHJlZml4X3NldCIgPSAieWVzIiA7IHRoZW4KKyAgbGliZGlyPSRleGVjX3ByZWZpeC9saWIKK2Vsc2UKKyAgaWYgdGVzdCAiJGxvY2FsX3ByZWZpeCIgPSAieWVzIiA7IHRoZW4KKyAgICBpbmNsdWRlZGlyPSRwcmVmaXgvaW5jbHVkZQorICAgIGxpYmRpcj0kcHJlZml4L2xpYgorICBmaQorZmkKKworaWYgdGVzdCAiJGVjaG9fZnRfdmVyc2lvbiIgPSAieWVzIiA7IHRoZW4KKyAgbWFqb3I9YGdyZXAgZGVmaW5lICR7U1lTUk9PVH0kaW5jbHVkZWRpci9mcmVldHlwZTIvZnJlZXR5cGUuaCBcCisgICAgICAgICB8IGdyZXAgRlJFRVRZUEVfTUFKT1IgXAorICAgICAgICAgfCBzZWQgJ3MvLipbIAldXChbMC05XVswLTldKlwpLiovXDEvJ2AKKyAgbWlub3I9YGdyZXAgZGVmaW5lICR7U1lTUk9PVH0kaW5jbHVkZWRpci9mcmVldHlwZTIvZnJlZXR5cGUuaCBcCisgICAgICAgICB8IGdyZXAgRlJFRVRZUEVfTUlOT1IgXAorICAgICAgICAgfCBzZWQgJ3MvLipbIAldXChbMC05XVswLTldKlwpLiovXDEvJ2AKKyAgcGF0Y2g9YGdyZXAgZGVmaW5lICR7U1lTUk9PVH0kaW5jbHVkZWRpci9mcmVldHlwZTIvZnJlZXR5cGUuaCBcCisgICAgICAgICB8IGdyZXAgRlJFRVRZUEVfUEFUQ0ggXAorICAgICAgICAgfCBzZWQgJ3MvLipbIAldXChbMC05XVswLTldKlwpLiovXDEvJ2AKKyAgZWNobyAkbWFqb3IuJG1pbm9yLiRwYXRjaAorZmkKKworaWYgdGVzdCAiJGVjaG9fY2ZsYWdzIiA9ICJ5ZXMiIDsgdGhlbgorICBjZmxhZ3M9Ii1JJHtTWVNST09UfSRpbmNsdWRlZGlyL2ZyZWV0eXBlMiIKKyAgZWNobyAkY2ZsYWdzCitmaQorCitpZiB0ZXN0ICIkZWNob19saWJzIiA9ICJ5ZXMiIDsgdGhlbgorICBsaWJzPSItbGZyZWV0eXBlIgorICBzdGF0aWNsaWJzPSIlTElCU1NUQVRJQ19DT05GSUclIgorICBpZiB0ZXN0ICIkc2hvd19zdGF0aWMiID0gInllcyIgOyB0aGVuCisgICAgbGlicz0iJHN0YXRpY2xpYnMiCisgIGZpCisgIGlmIHRlc3QgIiR7U1lTUk9PVH0kbGliZGlyIiAhPSAiL3Vzci9saWIiICAmJgorICAgICB0ZXN0ICIke1NZU1JPT1R9JGxpYmRpciIgIT0gIi91c3IvbGliNjQiOyB0aGVuCisgICAgZWNobyAtTCR7U1lTUk9PVH0kbGliZGlyICRsaWJzCisgIGVsc2UKKyAgICBlY2hvICRsaWJzCisgIGZpCitmaQorCitpZiB0ZXN0ICIkZWNob19saWJ0b29sIiA9ICJ5ZXMiIDsgdGhlbgorICBjb252bGliPSJsaWJmcmVldHlwZS5sYSIKKyAgZWNobyAke1NZU1JPT1R9JGxpYmRpci8kY29udmxpYgorZmkKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9mcmVldHlwZTIuaW4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODhkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluCkBAIC0wLDAgKzEsMTQgQEAKK3ByZWZpeD0lcHJlZml4JQorZXhlY19wcmVmaXg9JWV4ZWNfcHJlZml4JQorbGliZGlyPSVsaWJkaXIlCitpbmNsdWRlZGlyPSVpbmNsdWRlZGlyJS9mcmVldHlwZTIKKworTmFtZTogRnJlZVR5cGUgMgorVVJMOiBodHRwOi8vZnJlZXR5cGUub3JnCitEZXNjcmlwdGlvbjogQSBmcmVlLCBoaWdoLXF1YWxpdHksIGFuZCBwb3J0YWJsZSBmb250IGVuZ2luZS4KK1ZlcnNpb246ICVmdF92ZXJzaW9uJQorUmVxdWlyZXM6CitSZXF1aXJlcy5wcml2YXRlOiAlUkVRVUlSRVNfUFJJVkFURSUKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZnJlZXR5cGUKK0xpYnMucHJpdmF0ZTogJUxJQlNfUFJJVkFURSUKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00IGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2ZyZWV0eXBlMi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM4ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2ZyZWV0eXBlMi5tNApAQCAtMCwwICsxLDE5NCBAQAorIyBDb25maWd1cmUgcGF0aHMgZm9yIEZyZWVUeXBlMgorIyBNYXJjZWxvIE1hZ2FsbG9uIDIwMDEtMTAtMjYsIGJhc2VkIG9uIGd0ay5tNCBieSBPd2VuIFRheWxvcgorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlCisjIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdAorIyBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZgorIyB0aGF0IHByb2dyYW0uCisjCisjIHNlcmlhbCA0CisKKyMgQUNfQ0hFQ0tfRlQyKFtNSU5JTVVNLVZFUlNJT04gWywgQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCisjIFRlc3QgZm9yIEZyZWVUeXBlIDIsIGFuZCBkZWZpbmUgRlQyX0NGTEFHUyBhbmQgRlQyX0xJQlMuCisjIE1JTklNVU0tVkVSU0lPTiBpcyB3aGF0IGxpYnRvb2wgcmVwb3J0czsgdGhlIGRlZmF1bHQgaXMgYDcuMC4xJyAodGhpcyBpcworIyBGcmVlVHlwZSAyLjAuNCkuCisjCitBQ19ERUZVTihbQUNfQ0hFQ0tfRlQyXSwKKyAgWyMgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBmcmVldHlwZS1jb25maWcgc2NyaXB0CisgICAjCisgICBBQ19BUkdfV0lUSChbZnQtcHJlZml4XSwKKyAgICAgZG5sIGRvbid0IHF1b3RlIEFTX0hFTFBfU1RSSU5HIQorICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWZ0LXByZWZpeD1QUkVGSVhdLAorICAgICAgICAgICAgICAgICAgICBbUHJlZml4IHdoZXJlIEZyZWVUeXBlIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCisgICAgIFtmdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdLAorICAgICBbZnRfY29uZmlnX3ByZWZpeD0iIl0pCisKKyAgIEFDX0FSR19XSVRIKFtmdC1leGVjLXByZWZpeF0sCisgICAgIGRubCBkb24ndCBxdW90ZSBBU19IRUxQX1NUUklORyEKKyAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mdC1leGVjLXByZWZpeD1QUkVGSVhdLAorICAgICAgICAgICAgICAgICAgICBbRXhlYyBwcmVmaXggd2hlcmUgRnJlZVR5cGUgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKyAgICAgW2Z0X2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiXSwKKyAgICAgW2Z0X2NvbmZpZ19leGVjX3ByZWZpeD0iIl0pCisKKyAgIEFDX0FSR19FTkFCTEUoW2ZyZWV0eXBldGVzdF0sCisgICAgIGRubCBkb24ndCBxdW90ZSBBU19IRUxQX1NUUklORyEKKyAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1mcmVldHlwZXRlc3RdLAorICAgICAgICAgICAgICAgICAgICBbRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEZyZWVUeXBlIHByb2dyYW1dKSwKKyAgICAgW10sCisgICAgIFtlbmFibGVfZnR0ZXN0PXllc10pCisKKyAgIGlmIHRlc3QgeCRmdF9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKyAgICAgZnRfY29uZmlnX2FyZ3M9IiRmdF9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRmdF9jb25maWdfZXhlY19wcmVmaXgiCisgICAgIGlmIHRlc3QgeCR7RlQyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisgICAgICAgRlQyX0NPTkZJRz0kZnRfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9mcmVldHlwZS1jb25maWcKKyAgICAgZmkKKyAgIGZpCisKKyAgIGlmIHRlc3QgeCRmdF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisgICAgIGZ0X2NvbmZpZ19hcmdzPSIkZnRfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGZ0X2NvbmZpZ19wcmVmaXgiCisgICAgIGlmIHRlc3QgeCR7RlQyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisgICAgICAgRlQyX0NPTkZJRz0kZnRfY29uZmlnX3ByZWZpeC9iaW4vZnJlZXR5cGUtY29uZmlnCisgICAgIGZpCisgICBmaQorCisgICBpZiB0ZXN0ICJ4JEZUMl9DT05GSUciID0geCA7IHRoZW4KKyAgICAgQUNfUEFUSF9UT09MKFtGVDJfQ09ORklHXSwgW2ZyZWV0eXBlLWNvbmZpZ10sIFtub10pCisgICBmaQorCisgICBtaW5fZnRfdmVyc2lvbj1tNF9pZihbJDFdLCBbXSwgWzcuMC4xXSwgWyQxXSkKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIEZyZWVUeXBlIC0tIHZlcnNpb24gPj0gJG1pbl9mdF92ZXJzaW9uXSkKKyAgIG5vX2Z0PSIiCisgICBpZiB0ZXN0ICIkRlQyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorICAgICBub19mdD15ZXMKKyAgIGVsc2UKKyAgICAgRlQyX0NGTEFHUz1gJEZUMl9DT05GSUcgJGZ0X2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorICAgICBGVDJfTElCUz1gJEZUMl9DT05GSUcgJGZ0X2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgZnRfY29uZmlnX21ham9yX3ZlcnNpb249YCRGVDJfQ09ORklHICRmdF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCisgICAgIGZ0X2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkRlQyX0NPTkZJRyAkZnRfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorICAgICBmdF9jb25maWdfbWljcm9fdmVyc2lvbj1gJEZUMl9DT05GSUcgJGZ0X2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKyAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKyAgICAgZnRfbWluX21ham9yX3ZlcnNpb249YGVjaG8gJG1pbl9mdF92ZXJzaW9uIHwgXAorICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorICAgICBmdF9taW5fbWlub3JfdmVyc2lvbj1gZWNobyAkbWluX2Z0X3ZlcnNpb24gfCBcCisgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisgICAgIGZ0X21pbl9taWNyb192ZXJzaW9uPWBlY2hvICRtaW5fZnRfdmVyc2lvbiB8IFwKKyAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9mdHRlc3QgPSB4eWVzIDsgdGhlbgorICAgICAgIGZ0X2NvbmZpZ19pc19sdD0iIgorICAgICAgIGlmIHRlc3QgJGZ0X2NvbmZpZ19tYWpvcl92ZXJzaW9uIC1sdCAkZnRfbWluX21ham9yX3ZlcnNpb24gOyB0aGVuCisgICAgICAgICBmdF9jb25maWdfaXNfbHQ9eWVzCisgICAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21ham9yX3ZlcnNpb24gLWVxICRmdF9taW5fbWFqb3JfdmVyc2lvbiA7IHRoZW4KKyAgICAgICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21pbm9yX3ZlcnNpb24gLWx0ICRmdF9taW5fbWlub3JfdmVyc2lvbiA7IHRoZW4KKyAgICAgICAgICAgICBmdF9jb25maWdfaXNfbHQ9eWVzCisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpZiB0ZXN0ICRmdF9jb25maWdfbWlub3JfdmVyc2lvbiAtZXEgJGZ0X21pbl9taW5vcl92ZXJzaW9uIDsgdGhlbgorICAgICAgICAgICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21pY3JvX3ZlcnNpb24gLWx0ICRmdF9taW5fbWljcm9fdmVyc2lvbiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgZnRfY29uZmlnX2lzX2x0PXllcworICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgICBmaQorICAgICAgIGlmIHRlc3QgeCRmdF9jb25maWdfaXNfbHQgPSB4eWVzIDsgdGhlbgorICAgICAgICAgbm9fZnQ9eWVzCisgICAgICAgZWxzZQorICAgICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRGVDJfQ0ZMQUdTIgorICAgICAgICAgTElCUz0iJEZUMl9MSUJTICRMSUJTIgorCisgICAgICAgICAjCisgICAgICAgICAjIFNhbml0eSBjaGVja3MgZm9yIHRoZSByZXN1bHRzIG9mIGZyZWV0eXBlLWNvbmZpZyB0byBzb21lIGV4dGVudC4KKyAgICAgICAgICMKKyAgICAgICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgICAgICAgIEFDX0xBTkdfU09VUkNFKFtbCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludAorbWFpbigpCit7CisgIEZUX0xpYnJhcnkgbGlicmFyeTsKKyAgRlRfRXJyb3IgIGVycm9yOworCisgIGVycm9yID0gRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFyeSk7CisKKyAgaWYgKGVycm9yKQorICAgIHJldHVybiAxOworICBlbHNlCisgIHsKKyAgICBGVF9Eb25lX0ZyZWVUeXBlKGxpYnJhcnkpOworICAgIHJldHVybiAwOworICB9Cit9CisKKyAgICAgICAgICAgICBdXSkKKyAgICAgICAgICAgXSwKKyAgICAgICAgICAgW10sCisgICAgICAgICAgIFtub19mdD15ZXNdLAorICAgICAgICAgICBbZWNobyAkRUNIT19OICJjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIE9LLi4uICRFQ0hPX0MiXSkKKworICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorICAgICAgIGZpICAgICAgICAgICAgICMgdGVzdCAkZnRfY29uZmlnX3ZlcnNpb24gLWx0ICRmdF9taW5fdmVyc2lvbgorICAgICBmaSAgICAgICAgICAgICAgICMgdGVzdCB4JGVuYWJsZV9mdHRlc3QgPSB4eWVzCisgICBmaSAgICAgICAgICAgICAgICAgIyB0ZXN0ICIkRlQyX0NPTkZJRyIgPSAibm8iCisKKyAgIGlmIHRlc3QgeCRub19mdCA9IHggOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgIG00X2lmKFskMl0sIFtdLCBbOl0sIFskMl0pCisgICBlbHNlCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgaWYgdGVzdCAiJEZUMl9DT05GSUciID0gIm5vIiA7IHRoZW4KKyAgICAgICBBQ19NU0dfV0FSTihbCisKKyAgVGhlIGZyZWV0eXBlLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEZyZWVUeXBlIDIgY291bGQgbm90IGJlIGZvdW5kLgorICBJZiBGcmVlVHlwZSAyIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbgorICB5b3VyIHBhdGgsIG9yIHNldCB0aGUgRlQyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUKKyAgZnVsbCBwYXRoIHRvIGZyZWV0eXBlLWNvbmZpZy4KKyAgICAgICBdKQorICAgICBlbHNlCisgICAgICAgaWYgdGVzdCB4JGZ0X2NvbmZpZ19pc19sdCA9IHh5ZXMgOyB0aGVuCisgICAgICAgICBBQ19NU0dfV0FSTihbCisKKyAgWW91ciBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5IGlzIHRvbyBvbGQuCisgIElmIHlvdSBoYXZlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBGcmVlVHlwZSAyLCBtYWtlIHN1cmUgdGhhdAorICBjb3JyZWN0IHZhbHVlcyBmb3IgLS13aXRoLWZ0LXByZWZpeCBvciAtLXdpdGgtZnQtZXhlYy1wcmVmaXgKKyAgYXJlIHVzZWQsIG9yIHNldCB0aGUgRlQyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUKKyAgZnVsbCBwYXRoIHRvIGZyZWV0eXBlLWNvbmZpZy4KKyAgICAgICAgIF0pCisgICAgICAgZWxzZQorICAgICAgICAgQUNfTVNHX1dBUk4oWworCisgIFRoZSBGcmVlVHlwZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIHJ1bi4gIElmIHlvdXIgc3lzdGVtIHVzZXMKKyAgc2hhcmVkIGxpYnJhcmllcyBhbmQgdGhleSBhcmUgaW5zdGFsbGVkIG91dHNpZGUgdGhlIG5vcm1hbAorICBzeXN0ZW0gbGlicmFyeSBwYXRoLCBtYWtlIHN1cmUgdGhlIHZhcmlhYmxlIExEX0xJQlJBUllfUEFUSAorICAob3Igd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUgZm9yIHlvdXIgc3lzdGVtKSBpcyBjb3JyZWN0bHkgc2V0LgorICAgICAgICAgXSkKKyAgICAgICBmaQorICAgICBmaQorCisgICAgIEZUMl9DRkxBR1M9IiIKKyAgICAgRlQyX0xJQlM9IiIKKyAgICAgbTRfaWYoWyQzXSwgW10sIFs6XSwgWyQzXSkKKyAgIGZpCisKKyAgIEFDX1NVQlNUKFtGVDJfQ0ZMQUdTXSkKKyAgIEFDX1NVQlNUKFtGVDJfTElCU10pXSkKKworIyBlbmQgb2YgZnJlZXR5cGUyLm00CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnQtbXVubWFwLm00IGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2Z0LW11bm1hcC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmIwODY0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2Z0LW11bm1hcC5tNApAQCAtMCwwICsxLDMyIEBACisjIyBGcmVlVHlwZSBzcGVjaWZpYyBhdXRvY29uZiB0ZXN0cworIworIyBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworIyBzZXJpYWwgMgorCitBQ19ERUZVTihbRlRfTVVOTUFQX1BBUkFNXSwKKyAgW0FDX01TR19DSEVDS0lORyhbZm9yIG11bm1hcCdzIGZpcnN0IHBhcmFtZXRlciB0eXBlXSkKKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICBBQ19MQU5HX1NPVVJDRShbWworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KK2ludCBtdW5tYXAodm9pZCAqLCBzaXplX3QpOworCisgICAgICAgXV0pCisgICAgIF0sCisgICAgIFtBQ19NU0dfUkVTVUxUKFt2b2lkICpdKQorICAgICAgQUNfREVGSU5FKFtNVU5NQVBfVVNFU19WT0lEUF0sCisgICAgICAgIFtdLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIG11bm1hcCBpcyBvZiB0eXBlIHZvaWQgKl0pXSwKKyAgICAgW0FDX01TR19SRVNVTFQoW2NoYXIgKl0pXSkKKyAgXSkKKworIyBlbmQgb2YgZnQtbXVubWFwLm00CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkNDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9mdGNvbmZpZy5pbgpAQCAtMCwwICsxLDQ5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjb25maWcuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFVOSVgtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBhIG51bWJlciBvZiBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGFyZSB1c2VkICovCisgIC8qIGJ5IHRoZSByZXN0IG9mIHRoZSBlbmdpbmUuICBNb3N0IG9mIHRoZSBtYWNyb3MgaGVyZSBhcmUgYXV0b21hdGljYWxseSAqLworICAvKiBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSwgYW5kIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlIGl0IHRvICAgKi8KKyAgLyogcG9ydCBGcmVlVHlwZSwgZXhjZXB0IHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhIG5vbi1BTlNJICAgICAgICAgICovCisgIC8qIGNvbXBpbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSBob3dldmVyIHRoYXQgaWYgc29tZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGFyZSBuZWVkZWQsIHdlICAgICAgICovCisgIC8qIGFkdmlzZSB5b3UgdG8gcGxhY2UgYSBtb2RpZmllZCBjb3B5IGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyB1c3VhbGx5IGBidWlsZHMvPHN5c3RlbT4nLCBhbmQgY29udGFpbnMgICAgICAgICovCisgIC8qIHN5c3RlbS1zcGVjaWZpYyBmaWxlcyB0aGF0IGFyZSBhbHdheXMgaW5jbHVkZWQgZmlyc3Qgd2hlbiBidWlsZGluZyAgICAqLworICAvKiB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVENPTkZJR19IX18KKyNkZWZpbmUgX19GVENPTkZJR19IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DT05GSUdfT1BUSU9OU19ICisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgUExBVEZPUk0tU1BFQ0lGSUMgQ09ORklHVVJBVElPTiBNQUNST1MgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlc2UgbWFjcm9zIGNhbiBiZSB0b2dnbGVkIHRvIHN1aXQgYSBzcGVjaWZpYyBzeXN0ZW0uICBUaGUgY3VycmVudCAgICovCisgIC8qIG9uZXMgYXJlIGRlZmF1bHRzIHVzZWQgdG8gY29tcGlsZSBGcmVlVHlwZSBpbiBhbiBBTlNJIEMgZW52aXJvbm1lbnQgICAqLworICAvKiAoMTZiaXQgY29tcGlsZXJzIGFyZSBhbHNvIHN1cHBvcnRlZCkuICBDb3B5IHRoaXMgZmlsZSB0byB5b3VyIG93biAgICAgKi8KKyAgLyogYGJ1aWxkcy88c3lzdGVtPicgZGlyZWN0b3J5LCBhbmQgZWRpdCBpdCB0byBwb3J0IHRoZSBlbmdpbmUuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjdW5kZWYgSEFWRV9VTklTVERfSAorI3VuZGVmIEhBVkVfRkNOVExfSAorI3VuZGVmIEhBVkVfU1RESU5UX0gKKworCisgIC8qIFRoZXJlIGFyZSBzeXN0ZW1zIChsaWtlIHRoZSBUZXhhcyBJbnN0cnVtZW50cyAnQzU0eCkgd2hlcmUgYSBgY2hhcicgKi8KKyAgLyogaGFzIDE2IGJpdHMuICBBTlNJIEMgc2F5cyB0aGF0IHNpemVvZihjaGFyKSBpcyBhbHdheXMgMS4gIFNpbmNlIGFuICAqLworICAvKiBgaW50JyBoYXMgMTYgYml0cyBhbHNvIGZvciB0aGlzIHN5c3RlbSwgc2l6ZW9mKGludCkgZ2l2ZXMgMSB3aGljaCAgICovCisgIC8qIGlzIHByb2JhYmx5IHVuZXhwZWN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgQ0hBUl9CSVQnIChkZWZpbmVkIGluIGxpbWl0cy5oKSBnaXZlcyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSAgICAgICovCisgIC8qIGBjaGFyJyB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmbmRlZiBGVF9DSEFSX0JJVAorI2RlZmluZSBGVF9DSEFSX0JJVCAgQ0hBUl9CSVQKKyNlbmRpZgorCisKKyN1bmRlZiBGVF9VU0VfQVVUT0NPTkZfU0laRU9GX1RZUEVTCisjaWZkZWYgRlRfVVNFX0FVVE9DT05GX1NJWkVPRl9UWVBFUworCisjdW5kZWYgU0laRU9GX0lOVAorI3VuZGVmIFNJWkVPRl9MT05HCisjZGVmaW5lIEZUX1NJWkVPRl9JTlQgIFNJWkVPRl9JTlQKKyNkZWZpbmUgRlRfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKworI2Vsc2UgLyogIUZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMgKi8KKworICAvKiBGb2xsb3dpbmcgY3BwIGNvbXB1dGF0aW9uIG9mIHRoZSBiaXQgbGVuZ3RoIG9mIGludCBhbmQgbG9uZyAqLworICAvKiBpcyBjb3BpZWQgZnJvbSBkZWZhdWx0IGluY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmguICAgICAgICAgICAqLworICAvKiBJZiBhbnkgaW1wcm92ZW1lbnQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmlsZSwgaXQgc2hvdWxkIGJlICAqLworICAvKiBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBoZWFkZXIgZmlsZSBmb3IgdGhlIGJ1aWxkZXJzIHRoYXQgICAqLworICAvKiBkbyBub3QgdXNlIGNvbmZpZ3VyZSBzY3JpcHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIFRoZSBzaXplIG9mIGFuIGBpbnQnIHR5cGUuICAqLworI2lmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVggPT0gMHhGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKDE2IC8gRlRfQ0hBUl9CSVQpCisjZWxpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKDMyIC8gRlRfQ0hBUl9CSVQpCisjZWxpZiBGVF9VSU5UX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoNjQgLyBGVF9DSEFSX0JJVCkKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIHNpemUgb2YgYGludCcgdHlwZSEiCisjZW5kaWYKKworICAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJyB0eXBlLiAgQSBmaXZlLWJ5dGUgYGxvbmcnIChhcyB1c2VkIGUuZy4gb24gdGhlICovCisgIC8qIERNNjQyKSBpcyByZWNvZ25pemVkIGJ1dCBhdm9pZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRlVMCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoMzIgLyBGVF9DSEFSX0JJVCkKKyNlbGlmIEZUX1VMT05HX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0xPTkcgICgzMiAvIEZUX0NIQVJfQklUKQorI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKDY0IC8gRlRfQ0hBUl9CSVQpCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBsb25nJyB0eXBlISIKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX1VTRV9BVVRPQ09ORl9TSVpFT0ZfVFlQRVMgKi8KKworCisgIC8qIEZUX1VOVVNFRCBpcyBhIG1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGdpdmVuIHBhcmFtZXRlciBpcyBub3QgICovCisgIC8qIHVzZWQgLS0gdGhpcyBpcyBvbmx5IHVzZWQgdG8gZ2V0IHJpZCBvZiB1bnBsZWFzYW50IGNvbXBpbGVyIHdhcm5pbmdzICovCisjaWZuZGVmIEZUX1VOVVNFRAorI2RlZmluZSBGVF9VTlVTRUQoIGFyZyApICAoIChhcmcpID0gKGFyZykgKQorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgQVVUT01BVElDIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlc2UgbWFjcm9zIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBvbmVzIGRlZmluZWQgYWJvdmUuICBEb24ndCB0b3VjaCAgICovCisgIC8qIHRoZWlyIGRlZmluaXRpb24sIHVubGVzcyB5b3Uga25vdyBwcmVjaXNlbHkgd2hhdCB5b3UgYXJlIGRvaW5nLiAgTm8gICAqLworICAvKiBwb3J0ZXIgc2hvdWxkIG5lZWQgdG8gbWVzcyB3aXRoIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNYWMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyBpcyB0aGUgb25seSBuZWNlc3NhcnkgY2hhbmdlLCBzbyBpdCBpcyBkZWZpbmVkIGhlcmUgaW5zdGVhZCAgICAqLworICAvKiAgIHByb3ZpZGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgZGVmaW5lZCggX19BUFBMRV9fICkgfHwgKCBkZWZpbmVkKCBfX01XRVJLU19fICkgJiYgZGVmaW5lZCggbWFjaW50b3NoICkgKQorICAvKiBubyBDYXJib24gZnJhbWV3b3JrcyBmb3IgNjRiaXQgMTAuNC54ICovCisgIC8qIEF2YWlsYWJpbGl0eU1hY3Jvcy5oIGlzIGF2YWlsYWJsZSBzaW5jZSBNYWMgT1MgWCAxMC4yLCAgICAgICAgKi8KKyAgLyogc28gZ3Vlc3MgdGhlIHN5c3RlbSB2ZXJzaW9uIGJ5IG1heGltdW0gZXJybm8gYmVmb3JlIGluY2x1c2lvbiAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgRUNBTkNFTEVEIC8qIGRlZmluZWQgc2luY2UgMTAuMiAqLworI2luY2x1ZGUgIkF2YWlsYWJpbGl0eU1hY3Jvcy5oIgorI2VuZGlmCisjaWYgZGVmaW5lZCggX19MUDY0X18gKSAmJiBcCisgICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzQgKQorL3VuZGVmIEZUX01BQ0lOVE9TSAorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoIF9fU0NfXyApIHx8IGRlZmluZWQoIF9fTVJDX18gKQorICAvKiBDbGFzc2ljIE1hY09TIGNvbXBpbGVycyAqLworI2luY2x1ZGUgIkNvbmRpdGlvbmFsTWFjcm9zLmgiCisjaWYgVEFSR0VUX09TX01BQworI2RlZmluZSBGVF9NQUNJTlRPU0ggMQorI2VuZGlmCisKKyNlbmRpZgorCisKKyAgLyogRml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBzZ2kgY29tcGlsZXIgKi8KKyNpZiBkZWZpbmVkKCBfX3NnaSApICYmICFkZWZpbmVkKCBfX0dOVUNfXyApCisjaWYgZGVmaW5lZCggX0NPTVBJTEVSX1ZFUlNJT04gKSAmJiAoIF9DT01QSUxFUl9WRVJTSU9OID49IDczMCApCisjcHJhZ21hIHNldCB3b2ZmIDM1MDUKKyNlbmRpZgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciBhIDE2Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfSW50MTY7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIEZUX1VJbnQxNjsKKworICAvKiAqLworCisKKyAgLyogdGhpcyAjaWYgMCAuLi4gI2VuZGlmIGNsYXVzZSBpcyBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlcyAqLworI2lmIDAKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDMyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHVuc2lnbmVkIFhYWCAgRlRfVUludDMyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OyAgICovCisgIC8qICAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzaWduZWQgWFhYICBGVF9JbnQ2NDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VJbnQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICovCisgIC8qICAgIHRoZSBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsgICAqLworICAvKiAgICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50NjQ7CisKKyAgLyogKi8KKworI2VuZGlmCisKKyNpZiBGVF9TSVpFT0ZfSU5UID09IDQKKworICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOworCisjZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSA0CisKKyAgdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgRlRfSW50MzI7CisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIEZUX1VJbnQzMjsKKworI2Vsc2UKKyNlcnJvciAibm8gMzJiaXQgdHlwZSBmb3VuZCAtLSBwbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzIgorI2VuZGlmCisKKworICAvKiBsb29rIHVwIGFuIGludGVnZXIgdHlwZSB0aGF0IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNpZiBGVF9TSVpFT0ZfSU5UID49IDQKKworICB0eXBlZGVmIGludCAgICAgICAgICAgIEZUX0Zhc3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgRlRfVUZhc3Q7CisKKyNlbGlmIEZUX1NJWkVPRl9MT05HID49IDQKKworICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7CisKKyNlbmRpZgorCisKKyAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBpbnQgdHlwZSBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgKi8KKyAgLyogQXV0b2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBGVF9TSVpFT0ZfTE9ORyA9PSA4CisKKyAgLyogRlRfTE9ORzY0IG11c3QgYmUgZGVmaW5lZCBpZiBhIDY0LWJpdCB0eXBlIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBGVF9MT05HNjQKKyNkZWZpbmUgRlRfSU5UNjQgICBsb25nCisjZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSA2NC1iaXQgZGF0YSB0eXBlIG1heSBjcmVhdGUgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgeW91IGNvbXBpbGUgICAgICovCisgIC8qIGluIHN0cmljdCBBTlNJIG1vZGUuICBUbyBhdm9pZCB0aGVtLCB3ZSBkaXNhYmxlIG90aGVyIDY0LWJpdCBkYXRhICAgICAqLworICAvKiB0eXBlcyBpZiBfX1NURENfXyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGlnbm9yZSB0aGlzIHJ1bGUgICAgICAgKi8KKyAgLyogYnkgZGVmaW5pbmcgdGhlIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgY29uZmlndXJhdGlvbiBtYWNyby4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VsaWYgIWRlZmluZWQoIF9fU1REQ19fICkgfHwgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCApCisKKyNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICYmIF9NU0NfVkVSID49IDkwMCAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KKworICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBfX2ludDY0IHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgIC8qIEJvcmxhbmQgQysrICovCisKKyAgLyogWFhYWDogV2Ugc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSB2YWx1ZSBvZiBfX0JPUkxBTkRDX18gaW4gb3JkZXIgKi8KKyAgLyogICAgICAgdG8gdGVzdCB0aGUgY29tcGlsZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBfX2ludDY0IHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19XQVRDT01DX18gKSAgIC8qIFdhdGNvbSBDKysgKi8KKworICAvKiBXYXRjb20gZG9lc24ndCBwcm92aWRlIDY0LWJpdCBkYXRhIHR5cGVzICovCisKKyNlbGlmIGRlZmluZWQoIF9fTVdFUktTX18gKSAgICAvKiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yICovCisKKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKworI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKQorCisgIC8qIEdDQyBwcm92aWRlcyB0aGUgYGxvbmcgbG9uZycgdHlwZSAqLworI2RlZmluZSBGVF9MT05HNjQKKyNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50CisjZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAorCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworI2VuZGlmIC8qIEZUX1NJWkVPRl9MT05HID09IDggKi8KKworI2lmZGVmIEZUX0xPTkc2NAorICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7CisgIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7CisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogbWlzY2VsbGFuZW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7CisjZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCisjZGVmaW5lIEZUX0RVTU1ZX1NUTU5UICBGVF9CRUdJTl9TVE1OVCBGVF9FTkRfU1RNTlQKKworCisgIC8qIHR5cGVvZiBjb25kaXRpb24gdGFrZW4gZnJvbSBnbnVsaWIncyBgaW50cHJvcHMuaCcgaGVhZGVyIGZpbGUgKi8KKyNpZiAoIF9fR05VQ19fID49IDIgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19JQk1fX1RZUEVPRl9fICkgICAgICAgICAgICB8fCBcCisgICAgICAoIF9fU1VOUFJPX0MgPj0gMHg1MTEwICYmICFfX1NURENfXyApICkKKyNkZWZpbmUgVFlQRU9GKCB0eXBlICkgIChfX3R5cGVvZl9fICh0eXBlKSkKKyNlbHNlCisjZGVmaW5lIFRZUEVPRiggdHlwZSApICAvKiBlbXB0eSAqLworI2VuZGlmCisKKworI2lmZGVmIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgc3RhdGljICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICBzdGF0aWMgIHgKKworI2Vsc2UKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBleHRlcm4gIkMiICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgZXh0ZXJuICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICB4CisjZW5kaWYKKworI2VuZGlmIC8qIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QgKi8KKworI2RlZmluZSBGVF9MT0NBTF9BUlJBWSggeCApICAgICAgZXh0ZXJuIGNvbnN0ICB4CisjZGVmaW5lIEZUX0xPQ0FMX0FSUkFZX0RFRiggeCApICBjb25zdCAgeAorCisKKyNpZm5kZWYgRlRfQkFTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfQkFTRSggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9CQVNFKCB4ICkgIGV4dGVybiAgeAorI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfQkFTRSAqLworCisKKyNpZm5kZWYgRlRfQkFTRV9ERUYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0JBU0VfREVGKCB4ICkgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0JBU0VfREVGKCB4ICkgIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0JBU0VfREVGICovCisKKworI2lmbmRlZiBGVF9FWFBPUlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4CisjZW5kaWYKKworI2VuZGlmIC8qICFGVF9FWFBPUlQgKi8KKworCisjaWZuZGVmIEZUX0VYUE9SVF9ERUYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfRVhQT1JUX0RFRiggeCApICBleHRlcm4gIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0VYUE9SVF9ERUYgKi8KKworCisjaWZuZGVmIEZUX0VYUE9SVF9WQVIKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfRVhQT1JUX1ZBUiggeCApICBleHRlcm4gIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0VYUE9SVF9WQVIgKi8KKworICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KKyAgLyogQysrIGNvbXBpbGVyIGFuZCB3aXRoIDE2Yml0IGNvbXBpbGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIFRoaXMgaXMgc3BlY2lhbC4gIFdpdGhpbiBDKyssIHlvdSBtdXN0IHNwZWNpZnkgYGV4dGVybiAiQyInIGZvciAqLworICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgeW91IGFsc28gICAgKi8KKyAgLyogbXVzdCBkbyB0aGF0IGZvciBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMgdG8gICovCisgIC8qIGFzc3VyZSBDIGxpbmthZ2UgLS0gaXQncyBub3QgcG9zc2libGUgdG8gaGF2ZSAobG9jYWwpIGFub255bW91cyAqLworICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGJ5IChnbG9iYWwpIGZ1bmN0aW9uIHBvaW50ZXJzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLworICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLworICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KKyAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2wnIG9yIGBfX2Zhc3RjYWxsJyBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAorI2VuZGlmCisjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCisKKyNpZm5kZWYgRlRfQ0FMTEJBQ0tfVEFCTEUKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRSAgICAgIGV4dGVybiAiQyIKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICBleHRlcm4gIkMiCisjZWxzZQorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRSAgICAgIGV4dGVybgorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2VuZGlmIC8qIEZUX0NBTExCQUNLX1RBQkxFICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUQ09ORklHX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2Z0c3lzdGVtLmMgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUxM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2Z0c3lzdGVtLmMKQEAgLTAsMCArMSw0MjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c3lzdGVtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBVbml4LXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisgIC8qIHdlIHVzZSBvdXIgc3BlY2lhbCBmdGNvbmZpZy5oIGZpbGUsIG5vdCB0aGUgc3RhbmRhcmQgb25lICovCisjaW5jbHVkZSA8ZnRjb25maWcuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgRlRfVFlQRVNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKworICAvKiBtZW1vcnktbWFwcGluZyBpbmNsdWRlcyBhbmQgZGVmaW5pdGlvbnMgKi8KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaWZuZGVmIE1BUF9GSUxFCisjZGVmaW5lIE1BUF9GSUxFICAweDAwCisjZW5kaWYKKworI2lmZGVmIE1VTk1BUF9VU0VTX1ZPSURQCisjZGVmaW5lIE1VTk1BUF9BUkdfQ0FTVCAgdm9pZCAqCisjZWxzZQorI2RlZmluZSBNVU5NQVBfQVJHX0NBU1QgIGNoYXIgKgorI2VuZGlmCisKKyNpZmRlZiBORUVEX01VTk1BUF9ERUNMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiCisjZWxzZQorICBleHRlcm4KKyNlbmRpZgorICBpbnQKKyAgbXVubWFwKCBjaGFyKiAgYWRkciwKKyAgICAgICAgICBpbnQgICAgbGVuICk7CisKKyNkZWZpbmUgTVVOTUFQX0FSR19DQVNUICBjaGFyICoKKworI2VuZGlmIC8qIE5FRURfREVDTEFSQVRJT05fTVVOTUFQICovCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBNRU1PUlkgTUFOQUdFTUVOVCBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgOjogQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICA6OiBUaGUgcmVxdWVzdGVkIHNpemUgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBhZGRyZXNzIG9mIG5ld2x5IGFsbG9jYXRlZCBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkKiApCisgIGZ0X2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgIGxvbmcgICAgICAgc2l6ZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1lbW9yeSApOworCisgICAgcmV0dXJuIG1hbGxvYyggc2l6ZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9yZWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbWVtb3J5IHJlYWxsb2NhdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgICA6OiBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN1cl9zaXplIDo6IFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2suICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbmV3X3NpemUgOjogVGhlIG5ld2x5IHJlcXVlc3RlZCBzaXplIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBibG9jayAgICA6OiBUaGUgY3VycmVudCBhZGRyZXNzIG9mIHRoZSBibG9jayBpbiBtZW1vcnkuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYWRkcmVzcyBvZiB0aGUgcmVhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQorICBmdF9yZWFsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgbG9uZyAgICAgICBjdXJfc2l6ZSwKKyAgICAgICAgICAgICAgbG9uZyAgICAgICBuZXdfc2l6ZSwKKyAgICAgICAgICAgICAgdm9pZCogICAgICBibG9jayApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1lbW9yeSApOworICAgIEZUX1VOVVNFRCggY3VyX3NpemUgKTsKKworICAgIHJldHVybiByZWFsbG9jKCBibG9jaywgbmV3X3NpemUgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSByZWxlYXNlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBibG9jayAgOjogVGhlIGFkZHJlc3Mgb2YgYmxvY2sgaW4gbWVtb3J5IHRvIGJlIGZyZWVkLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0X2ZyZWUoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICB2b2lkKiAgICAgIGJsb2NrICkKKyAgeworICAgIEZUX1VOVVNFRCggbWVtb3J5ICk7CisKKyAgICBmcmVlKCBibG9jayApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0UgTUFOQUdFTUVOVCBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9pbworCisgIC8qIFdlIHVzZSB0aGUgbWFjcm8gU1RSRUFNX0ZJTEUgZm9yIGNvbnZlbmllbmNlIHRvIGV4dHJhY3QgdGhlICAgICAgICovCisgIC8qIHN5c3RlbS1zcGVjaWZpYyBzdHJlYW0gaGFuZGxlIGZyb20gYSBnaXZlbiBGcmVlVHlwZSBzdHJlYW0gb2JqZWN0ICovCisjZGVmaW5lIFNUUkVBTV9GSUxFKCBzdHJlYW0gKSAgKCAoRklMRSopc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfY2xvc2Vfc3RyZWFtX2J5X211bm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZ1bmN0aW9uIHRvIGNsb3NlIGEgc3RyZWFtIHdoaWNoIGlzIG9wZW5lZCBieSBtbWFwLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtIDo6IEEgcG9pbnRlciB0byB0aGUgc3RyZWFtIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9jbG9zZV9zdHJlYW1fYnlfbXVubWFwKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBtdW5tYXAoIChNVU5NQVBfQVJHX0NBU1Qpc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIsIHN0cmVhbS0+c2l6ZSApOworCisgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSBOVUxMOworICAgIHN0cmVhbS0+c2l6ZSAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgICAgICAgICAgICAgICA9IDA7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X2Nsb3NlX3N0cmVhbV9ieV9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmdW5jdGlvbiB0byBjbG9zZSBhIHN0cmVhbSB3aGljaCBpcyBjcmVhdGVkIGJ5IGZ0X2FsbG9jLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBBIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgZnRfY2xvc2Vfc3RyZWFtX2J5X2ZyZWUoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIGZ0X2ZyZWUoIE5VTEwsIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyICk7CisKKyAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IE5VTEw7CisgICAgc3RyZWFtLT5zaXplICAgICAgICAgICAgICAgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgICAgICAgICAgICAgID0gMDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9PcGVuKCBGVF9TdHJlYW0gICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSApCisgIHsKKyAgICBpbnQgICAgICAgICAgZmlsZTsKKyAgICBzdHJ1Y3Qgc3RhdCAgc3RhdF9idWY7CisKKworICAgIGlmICggIXN0cmVhbSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX0hhbmRsZSApOworCisgICAgLyogb3BlbiB0aGUgZmlsZSAqLworICAgIGZpbGUgPSBvcGVuKCBmaWxlcGF0aG5hbWUsIE9fUkRPTkxZICk7CisgICAgaWYgKCBmaWxlIDwgMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX09wZW46IiApKTsKKyAgICAgIEZUX0VSUk9SKCggIiBjb3VsZCBub3Qgb3BlbiBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisgICAgfQorCisgICAgLyogSGVyZSB3ZSBlbnN1cmUgdGhhdCBhICJmb3JrIiB3aWxsIF9ub3RfIGR1cGxpY2F0ZSAgICovCisgICAgLyogb3VyIG9wZW5lZCBpbnB1dCBzdHJlYW1zIG9uIFVuaXguICBUaGlzIGlzIGNyaXRpY2FsICovCisgICAgLyogc2luY2UgaXQgYXZvaWRzIHNvbWUgKHBvc3NpYmxlKSBhY2Nlc3MgY29udHJvbCAgICAgICovCisgICAgLyogaXNzdWVzIGFuZCBjbGVhbnMgdXAgdGhlIGtlcm5lbCBmaWxlIHRhYmxlIGEgYml0LiAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgRl9TRVRGRAorI2lmZGVmIEZEX0NMT0VYRUMKKyAgICAodm9pZClmY250bCggZmlsZSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyApOworI2Vsc2UKKyAgICAodm9pZClmY250bCggZmlsZSwgRl9TRVRGRCwgMSApOworI2VuZGlmIC8qIEZEX0NMT0VYRUMgKi8KKyNlbmRpZiAvKiBGX1NFVEZEICovCisKKyAgICBpZiAoIGZzdGF0KCBmaWxlLCAmc3RhdF9idWYgKSA8IDAgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgY291bGQgbm90IGBmc3RhdCcgZmlsZSBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisgICAgICBnb3RvIEZhaWxfTWFwOworICAgIH0KKworICAgIC8qIFhYWDogVE9ETyAtLSByZWFsIDY0Yml0IHBsYXRmb3JtIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGBzdHJlYW0tPnNpemUnIGlzIHR5cGVkZWYnZCB0byB1bnNpZ25lZCBsb25nIChpbiBgZnRzeXN0ZW0uaCcpOyAqLworICAgIC8qIGBzdGF0X2J1Zi5zdF9zaXplJywgaG93ZXZlciwgaXMgdXN1YWxseSB0eXBlZGVmJ2QgdG8gb2ZmX3QgICAgICAqLworICAgIC8qIChpbiBzeXMvc3RhdC5oKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgZm9ybWVyIGlzIDMyYml0IGFuZCB0aGUgbGF0dGVyIGlzIDY0Yml0LiAqLworICAgIC8qIFRvIGF2b2lkIG92ZXJmbG93IGNhdXNlZCBieSBmb250cyBpbiBodWdlIGZpbGVzIGxhcmdlciB0aGFuICAgICAqLworICAgIC8qIDJHQiwgZG8gYSB0ZXN0LiAgVGVtcG9yYXJ5IGZpeCBwcm9wb3NlZCBieSBTZWFuIE1jQnJpZGUuICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggc3RhdF9idWYuc3Rfc2l6ZSA+IExPTkdfTUFYICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjogZmlsZSBpcyB0b28gYmlnXG4iICkpOworICAgICAgZ290byBGYWlsX01hcDsKKyAgICB9CisgICAgZWxzZSBpZiAoIHN0YXRfYnVmLnN0X3NpemUgPT0gMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX09wZW46IHplcm8tbGVuZ3RoIGZpbGVcbiIgKSk7CisgICAgICBnb3RvIEZhaWxfTWFwOworICAgIH0KKworICAgIC8qIFRoaXMgY2FzdCBwb3RlbnRpYWxseSB0cnVuY2F0ZXMgYSA2NGJpdCB0byAzMmJpdCEgKi8KKyAgICBzdHJlYW0tPnNpemUgPSAodW5zaWduZWQgbG9uZylzdGF0X2J1Zi5zdF9zaXplOworICAgIHN0cmVhbS0+cG9zICA9IDA7CisgICAgc3RyZWFtLT5iYXNlID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJTEUgfCBNQVBfUFJJVkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICk7CisKKyAgICAvKiBvbiBzb21lIFJUT1MsIG1tYXAgbWlnaHQgcmV0dXJuIDAgKi8KKyAgICBpZiAoIChsb25nKXN0cmVhbS0+YmFzZSAhPSAtMSAmJiBzdHJlYW0tPmJhc2UgIT0gTlVMTCApCisgICAgICBzdHJlYW0tPmNsb3NlID0gZnRfY2xvc2Vfc3RyZWFtX2J5X211bm1hcDsKKyAgICBlbHNlCisgICAgeworICAgICAgc3NpemVfdCAgdG90YWxfcmVhZF9jb3VudDsKKworCisgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiICkpOworICAgICAgRlRfRVJST1IoKCAiIGNvdWxkIG5vdCBgbW1hcCcgZmlsZSBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisKKyAgICAgIHN0cmVhbS0+YmFzZSA9ICh1bnNpZ25lZCBjaGFyKilmdF9hbGxvYyggTlVMTCwgc3RyZWFtLT5zaXplICk7CisKKyAgICAgIGlmICggIXN0cmVhbS0+YmFzZSApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICAgIEZUX0VSUk9SKCggIiBjb3VsZCBub3QgYGFsbG9jJyBtZW1vcnlcbiIgKSk7CisgICAgICAgIGdvdG8gRmFpbF9NYXA7CisgICAgICB9CisKKyAgICAgIHRvdGFsX3JlYWRfY291bnQgPSAwOworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgc3NpemVfdCAgcmVhZF9jb3VudDsKKworCisgICAgICAgIHJlYWRfY291bnQgPSByZWFkKCBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5iYXNlICsgdG90YWxfcmVhZF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c2l6ZSAtIHRvdGFsX3JlYWRfY291bnQgKTsKKworICAgICAgICBpZiAoIHJlYWRfY291bnQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHJlYWRfY291bnQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiICkpOworICAgICAgICAgIEZUX0VSUk9SKCggIiBlcnJvciB3aGlsZSBgcmVhZCdpbmcgZmlsZSBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisgICAgICAgICAgZ290byBGYWlsX1JlYWQ7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbF9yZWFkX2NvdW50ICs9IHJlYWRfY291bnQ7CisKKyAgICAgIH0gd2hpbGUgKCAodW5zaWduZWQgbG9uZyl0b3RhbF9yZWFkX2NvdW50ICE9IHN0cmVhbS0+c2l6ZSApOworCisgICAgICBzdHJlYW0tPmNsb3NlID0gZnRfY2xvc2Vfc3RyZWFtX2J5X2ZyZWU7CisgICAgfQorCisgICAgY2xvc2UoIGZpbGUgKTsKKworICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gc3RyZWFtLT5iYXNlOworICAgIHN0cmVhbS0+cGF0aG5hbWUucG9pbnRlciAgID0gKGNoYXIqKWZpbGVwYXRobmFtZTsKKworICAgIHN0cmVhbS0+cmVhZCA9IDA7CisKKyAgICBGVF9UUkFDRTEoKCAiRlRfU3RyZWFtX09wZW46IiApKTsKKyAgICBGVF9UUkFDRTEoKCAiIG9wZW5lZCBgJXMnICglZCBieXRlcykgc3VjY2Vzc2Z1bGx5XG4iLAorICAgICAgICAgICAgICAgIGZpbGVwYXRobmFtZSwgc3RyZWFtLT5zaXplICkpOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBGYWlsX1JlYWQ6CisgICAgZnRfZnJlZSggTlVMTCwgc3RyZWFtLT5iYXNlICk7CisKKyAgRmFpbF9NYXA6CisgICAgY2xvc2UoIGZpbGUgKTsKKworICAgIHN0cmVhbS0+YmFzZSA9IE5VTEw7CisgICAgc3RyZWFtLT5zaXplID0gMDsKKyAgICBzdHJlYW0tPnBvcyAgPSAwOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9TdHJlYW0gKTsKKyAgfQorCisKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKworICBleHRlcm4gRlRfSW50CisgIGZ0X21lbV9kZWJ1Z19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIGV4dGVybiB2b2lkCisgIGZ0X21lbV9kZWJ1Z19kb25lKCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisjZW5kaWYKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfTWVtb3J5ICkKKyAgRlRfTmV3X01lbW9yeSggdm9pZCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworCisgICAgbWVtb3J5ID0gKEZUX01lbW9yeSltYWxsb2MoIHNpemVvZiAoICptZW1vcnkgKSApOworICAgIGlmICggbWVtb3J5ICkKKyAgICB7CisgICAgICBtZW1vcnktPnVzZXIgICAgPSAwOworICAgICAgbWVtb3J5LT5hbGxvYyAgID0gZnRfYWxsb2M7CisgICAgICBtZW1vcnktPnJlYWxsb2MgPSBmdF9yZWFsbG9jOworICAgICAgbWVtb3J5LT5mcmVlICAgID0gZnRfZnJlZTsKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKyAgICAgIGZ0X21lbV9kZWJ1Z19pbml0KCBtZW1vcnkgKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBtZW1vcnk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0RvbmVfTWVtb3J5KCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKyAgICBmdF9tZW1fZGVidWdfZG9uZSggbWVtb3J5ICk7CisjZW5kaWYKKyAgICBtZW1vcnktPmZyZWUoIG1lbW9yeSwgbWVtb3J5ICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9pbnN0YWxsLXNoIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2luc3RhbGwtc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGIwZmRjYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTAxIEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAxMy0xMi0yNS4yMzsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjICdtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCit0YWI9JwknCitubD0nCisnCitJRlM9IiAkdGFiJG5sIgorCisjIFNldCBET0lUUFJPRyB0byAiZWNobyIgdG8gdGVzdCB0aGlzIHNjcmlwdC4KKworZG9pdD0ke0RPSVRQUk9HLX0KK2RvaXRfZXhlYz0ke2RvaXQ6LWV4ZWN9CisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitpc190YXJnZXRfYV9kaXJlY3Rvcnk9cG9zc2libHkKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisgICAgICAgIHNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorICAgICAgICBjYXNlICRtb2RlIGluCisgICAgICAgICAgKicgJyogfCAqIiR0YWIiKiB8ICoiJG5sIiogfCAqJyonKiB8IConPycqIHwgKidbJyopCisgICAgICAgICAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisgICAgICAgICAgICBleGl0IDE7OworICAgICAgICBlc2FjCisgICAgICAgIHNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKyAgICAgICAgc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpCisgICAgICAgIGlzX3RhcmdldF9hX2RpcmVjdG9yeT1hbHdheXMKKyAgICAgICAgZHN0X2FyZz0kMgorICAgICAgICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorICAgICAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdDs7CisKKyAgICAtVCkgaXNfdGFyZ2V0X2FfZGlyZWN0b3J5PW5ldmVyOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKSBzaGlmdAorICAgICAgICBicmVhazs7CisKKyAgICAtKikgZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisgICAgICAgIGV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKKyMgV2UgYWxsb3cgdGhlIHVzZSBvZiBvcHRpb25zIC1kIGFuZCAtVCB0b2dldGhlciwgYnkgbWFraW5nIC1kCisjIHRha2UgdGhlIHByZWNlZGVuY2U7IHRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTlUgaW5zdGFsbC4KKworaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiB0YXJnZXQgZGlyZWN0b3J5IG5vdCBhbGxvd2VkIHdoZW4gaW5zdGFsbGluZyBhIGRpcmVjdG9yeS4iID4mMgorICAgIGV4aXQgMQorICBmaQorZmkKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworICAgIGVzYWMKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgJ2luc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGlmIHRlc3QgJCMgLWd0IDEgfHwgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBhbHdheXM7IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWQgIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBub3QgYSBkaXJlY3RvcnkuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorICAgICAgICB1X3BsdXNfcnc9CisgICAgICBlbHNlCisgICAgICAgIHVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisgICAgICAgIHVfcGx1c19ydz0KKyAgICAgIGVsc2UKKyAgICAgICAgdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZHN0PSRkc3RfYXJnCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBuZXZlcjsgdGhlbgorICAgICAgICBlY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICBkc3RkaXI9YGRpcm5hbWUgIiRkc3QiYAorICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisgICAgICAgICMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKyAgICAgICAgIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKyAgICAgICAgdW1hc2s9YHVtYXNrYAorICAgICAgICBjYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKyAgICAgICAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAgICAgICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworICAgICAgICAgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworICAgICAgICAgICpbMC03XSkKKyAgICAgICAgICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKyAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKyAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisgICAgICAgICAgICBgOzsKKyAgICAgICAgICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisgICAgICAgIGVzYWMKKworICAgICAgICAjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorICAgICAgICAjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisgICAgICAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgICAgICAgIG1rZGlyX21vZGU9LW0kbW9kZQorICAgICAgICBlbHNlCisgICAgICAgICAgbWtkaXJfbW9kZT0KKyAgICAgICAgZmkKKworICAgICAgICBwb3NpeF9ta2Rpcj1mYWxzZQorICAgICAgICBjYXNlICR1bWFzayBpbgorICAgICAgICAgICpbMTIzNTY3XVswLTddWzAtN10pCisgICAgICAgICAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisgICAgICAgICAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKyAgICAgICAgICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKKworICAgICAgICAgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorICAgICAgICAgICAgICAgIGV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisgICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKyAgICAgICAgICAgICAgICAgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorICAgICAgICAgICAgICAgICAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisgICAgICAgICAgICAgICAgICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKyAgICAgICAgICAgICAgICAgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisgICAgICAgICAgICAgICAgICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworICAgICAgICAgICAgICAgICAgICAgKikgZmFsc2U7OworICAgICAgICAgICAgICAgICAgIGVzYWMgJiYKKyAgICAgICAgICAgICAgICAgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisgICAgICAgICAgICAgICAgICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICB0cmFwICcnIDA7OworICAgICAgICBlc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKyAgICAgICAgdW1hc2sgJG1rZGlyX3VtYXNrICYmCisgICAgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorICAgICAgICAvKikgcHJlZml4PScvJzs7CisgICAgICAgIFstPVwoXCkhXSopIHByZWZpeD0nLi8nOzsKKyAgICAgICAgKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisgICAgICAgIHRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisKKyAgICAgICAgcHJlZml4PSRwcmVmaXgkZAorICAgICAgICBpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorICAgICAgICAgIHByZWZpeGVzPQorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisgICAgICAgICAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisgICAgICAgICAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKKyAgICAgICAgICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKyAgICAgICAgICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhc2UgJHByZWZpeCBpbgorICAgICAgICAgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAgICAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKyAgICAgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorICAgICAgICAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisgICAgICAgICBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorICAgICAgICAgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQorICAgICAgICBvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiICAgICAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiICAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgK2YgJiYKKyAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgorICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgcm0gLWYgIiRkc3R0bXAiCisgICAgZWxzZQorICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCisgICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCisgICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAorICAgICAgIyBzdXBwb3J0IC1mLgorICAgICAgeworICAgICAgICAjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisgICAgICAgICMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisgICAgICAgICMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKKyAgICAgICAgIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisgICAgICAgICMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisgICAgICAgIHsKKyAgICAgICAgICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisgICAgICAgICAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorICAgICAgICAgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgorICAgICAgICAgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKyAgICAgICAgICB9IHx8CisgICAgICAgICAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCisgICAgICAgICAgICAoZXhpdCAxKTsgZXhpdCAxCisgICAgICAgICAgfQorICAgICAgICB9ICYmCisKKyAgICAgICAgIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgICAkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9pbnN0YWxsLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L2luc3RhbGwubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZmYyMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9pbnN0YWxsLm1rCkBAIC0wLDAgKzEsOTcgQEAKKyMKKyMgRnJlZVR5cGUgMiBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBVbml4IHN5c3RlbXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisjIElmIHlvdSBzYXkKKyMKKyMgICBtYWtlIGluc3RhbGwgREVTVERJUj0vdG1wL3NvbWV3aGVyZS8KKyMKKyMgZG9uJ3QgZm9yZ2V0IHRoZSBmaW5hbCBiYWNrc2xhc2ggKHRoaXMgY29tbWFuZCBpcyBtYWlubHkgZm9yIHBhY2thZ2UKKyMgbWFpbnRhaW5lcnMpLgorCisKKy5QSE9OWTogaW5zdGFsbCB1bmluc3RhbGwgY2hlY2sKKworIyBVbml4IGluc3RhbGxhdGlvbiBhbmQgZGVpbnN0YWxsYXRpb24gdGFyZ2V0cy4KKyMKKyMgTm90ZSB0aGF0IHdlIHJlbW92ZSBhbnkgZGF0YSBpbiB0aGUgYGZyZWV0eXBlJyBzdWJkaXJlY3RvcnkgZm91bmQgaW4KKyMgYCQoaW5jbHVkZWRpcikvZnJlZXR5cGUyJywgd2hpY2ggd2FzIHRoZSBwcmV2aW91cyBsb2NhdGlvbiBvZiB0aGUgaGVhZGVyCisjIGZpbGVzIHVwIHRvIHZlcnNpb24gMi41LjAuCisjCitpbnN0YWxsOiAkKFBST0pFQ1RfTElCUkFSWSkKKwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9jb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGJpbmRpcikgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGRhdGFkaXIpL2FjbG9jYWwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUFJPSkVDVF9MSUJSQVJZKSAkKERFU1RESVIpJChsaWJkaXIpCisJLWZvciBQIGluICQoUFVCTElDX0gpIDsgZG8gICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgJCRQICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMiA7IFwKKyAgICAgICAgZG9uZQorCS1mb3IgUCBpbiAkKENPTkZJR19IKSA7IGRvICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAkKElOU1RBTExfREFUQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgJCRQICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9jb25maWcgOyBcCisgICAgICAgIGRvbmUKKwktJChERUxFVEUpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcvKgorCS0kKERFTERJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZworCS0kKERFTEVURSkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2ZyZWV0eXBlLyoKKwktJChERUxESVIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZQorCSQoSU5TVEFMTF9EQVRBKSAkKE9CSl9CVUlMRCkvZnRjb25maWcuaCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mcmVldHlwZTIvY29uZmlnL2Z0Y29uZmlnLmgKKwkkKElOU1RBTExfREFUQSkgJChPQkpfRElSKS9mdG1vZHVsZS5oICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2NvbmZpZy9mdG1vZHVsZS5oCisJJChJTlNUQUxMX1NDUklQVCkgLW0gNzU1ICQoT0JKX0JVSUxEKS9mcmVldHlwZS1jb25maWcgXAorICAgICAgICAgICQoREVTVERJUikkKGJpbmRpcikvZnJlZXR5cGUtY29uZmlnCisJJChJTlNUQUxMX1NDUklQVCkgLW0gNjQ0ICQoQlVJTERfRElSKS9mcmVldHlwZTIubTQgXAorICAgICAgICAgICQoREVTVERJUikkKGRhdGFkaXIpL2FjbG9jYWwvZnJlZXR5cGUyLm00CisJJChJTlNUQUxMX1NDUklQVCkgLW0gNjQ0ICQoT0JKX0JVSUxEKS9mcmVldHlwZTIucGMgXAorICAgICAgICAgICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL2ZyZWV0eXBlMi5wYworCSQoSU5TVEFMTF9EQVRBKSAkKFRPUF9ESVIpL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEgXAorICAgICAgICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9mcmVldHlwZS1jb25maWcuMQorCisKK3VuaW5zdGFsbDoKKwktJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsICQoUk0pICQoREVTVERJUikkKGxpYmRpcikvJChMSUJSQVJZKS4kQQorCS0kKERFTEVURSkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2NvbmZpZy8qCisJLSQoREVMRElSKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mcmVldHlwZTIvY29uZmlnCisJLSQoREVMRVRFKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mcmVldHlwZTIvKgorCS0kKERFTERJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyCisJLSQoREVMRVRFKSAkKERFU1RESVIpJChiaW5kaXIpL2ZyZWV0eXBlLWNvbmZpZworCS0kKERFTEVURSkgJChERVNURElSKSQoZGF0YWRpcikvYWNsb2NhbC9mcmVldHlwZTIubTQKKwktJChERUxFVEUpICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL2ZyZWV0eXBlMi5wYworCS0kKERFTEVURSkgJChERVNURElSKSQobWFuZGlyKS9tYW4xL2ZyZWV0eXBlLWNvbmZpZy4xCisKKworY2hlY2s6CisJQGVjaG8gVGhlcmUgaXMgbm8gdmFsaWRhdGlvbiBzdWl0ZSBmb3IgdGhpcyBwYWNrYWdlLgorCisKKy5QSE9OWTogY2xlYW5fcHJvamVjdF91bml4IGRpc3RjbGVhbl9wcm9qZWN0X3VuaXgKKworIyBVbml4IGNsZWFuaW5nIGFuZCBkaXN0Y2xlYW4gcnVsZXMuCisjCitjbGVhbl9wcm9qZWN0X3VuaXg6CisJLSQoREVMRVRFKSAkKEJBU0VfT0JKRUNUUykgJChPQkpfTSkgJChPQkpfUykKKwktJChERUxFVEUpICQocGF0c3Vic3QgJS4kTywlLiQoU08pLCQoQkFTRV9PQkpFQ1RTKSAkKE9CSl9NKSAkKE9CSl9TKSkgXAorICAgICAgICAgICAgICAgICAgICQoQ0xFQU4pCisKK2Rpc3RjbGVhbl9wcm9qZWN0X3VuaXg6IGNsZWFuX3Byb2plY3RfdW5peAorCS0kKERFTEVURSkgJChQUk9KRUNUX0xJQlJBUlkpCisJLSQoREVMRVRFKSAkKE9CSl9ESVIpLy5saWJzLyoKKwktJChERUxESVIpICQoT0JKX0RJUikvLmxpYnMKKwktJChERUxFVEUpICoub3JpZyAqfiBjb3JlICouY29yZSAkKERJU1RDTEVBTikKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9sdG1haW4uc2ggYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMGEyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvbHRtYWluLnNoCkBAIC0wLDAgKzEsMTExNDcgQEAKKyMhIC9iaW4vc2gKKyMjIERPIE5PVCBFRElUIC0gVGhpcyBmaWxlIGdlbmVyYXRlZCBmcm9tIC4vYnVpbGQtYXV4L2x0bWFpbi5pbgorIyMgICAgICAgICAgICAgICBieSBpbmxpbmUtc291cmNlIHYyMDE0LTAxLTAzLjAxCisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC42CisjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitQUk9HUkFNPWxpYnRvb2wKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0yLjQuNgorcGFja2FnZV9yZXZpc2lvbj0yLjQuNgorCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBSdW4gJy4vbGlidG9vbCAtLWhlbHAnIGZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKKyMgY29tbWFuZCBsaW5lLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBZnRlciBjb25maWd1cmUgY29tcGxldGVzLCBpdCBoYXMgYSBiZXR0ZXIgaWRlYSBvZiBzb21lIG9mIHRoZQorIyBzaGVsbCB0b29scyB3ZSBuZWVkIHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKKyMgd2l0aCBib290c3RyYXAsIHNvIHNldCB0aG9zZSBoZXJlIHdoZXJlIHRoZXkgY2FuIHN0aWxsIGJlIG92ZXItCisjIHJpZGRlbiBieSB0aGUgdXNlciwgYnV0IG90aGVyd2lzZSB0YWtlIHByZWNlZGVuY2UuCisKKzogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNvdXJjZSBleHRlcm5hbCBsaWJyYXJpZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE11Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQgZnJvbSBleHRlcm5hbAorIyBsaWJyYXJpZXMsIHdoaWNoIGFyZSBpbnN0YWxsZWQgdG8gJHBrZ2F1eGRpci4KKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCitzY3JpcHR2ZXJzaW9uPTIwMTUtMDEtMjAuMTc7ICMgVVRDCisKKyMgR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91IGRpc3RyaWJ1dGUKKyMgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwKKyMgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlCisjIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bworIyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlOgorIworIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAorIworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBhbnkgb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgc2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTaGVsbCBub3JtYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTb21lIHNoZWxscyBuZWVkIGEgbGl0dGxlIGhlbHAgdG8gYmUgYXMgQm91cm5lIGNvbXBhdGlibGUgYXMgcG9zc2libGUuCisjIEJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgYWxsIHRoYXQgaGVscCBoYXMgYmVlbiBwcm92aWRlZCEKKworRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7IGVzYWMKK2ZpCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkIGxhdGVyLgorX0dfdXNlcl9sb2NhbGU9CitfR19zYWZlX2xvY2FsZT0KK2ZvciBfR192YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCisgICAgICAgICAgc2F2ZV8kX0dfdmFyPVwkJF9HX3ZhcgorICAgICAgICAgICRfR192YXI9QworCSAgZXhwb3J0ICRfR192YXIKKwkgIF9HX3VzZXJfbG9jYWxlPVwiJF9HX3Zhcj1cXFwkc2F2ZV9cJF9HX3ZhcjsgXCRfR191c2VyX2xvY2FsZVwiCisJICBfR19zYWZlX2xvY2FsZT1cIiRfR192YXI9QzsgXCRfR19zYWZlX2xvY2FsZVwiCisJZmkiCitkb25lCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorc3A9JyAnCitubD0nCisnCitJRlM9IiRzcAkkbmwiCisKKyMgVGhlcmUgYXJlIGFwcGFyZW50bHkgc29tZSByZXRhcmRlZCBzeXN0ZW1zIHRoYXQgdXNlICc7JyBhcyBhIFBBVEggc2VwYXJhdG9yIQoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTG9jYXRlIGNvbW1hbmQgdXRpbGl0aWVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgZnVuY19leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2Z1bmNfZXhlY3V0YWJsZV9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfQorCisKKyMgZnVuY19wYXRoX3Byb2dzIFBST0dTX0xJU1QgQ0hFQ0tfRlVOQyBbUEFUSF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VhcmNoIGZvciBlaXRoZXIgYSBwcm9ncmFtIHRoYXQgcmVzcG9uZHMgdG8gLS12ZXJzaW9uIHdpdGggb3V0cHV0CisjIGNvbnRhaW5pbmcgIkdOVSIsIG9yIGVsc2UgcmV0dXJuZWQgYnkgQ0hFQ0tfRlVOQyBvdGhlcndpc2UsIGJ5CisjIHRyeWluZyBhbGwgdGhlIGRpcmVjdG9yaWVzIGluIFBBVEggd2l0aCBlYWNoIG9mIHRoZSBlbGVtZW50cyBvZgorIyBQUk9HU19MSVNULgorIworIyBDSEVDS19GVU5DIHNob3VsZCBhY2NlcHQgdGhlIHBhdGggdG8gYSBjYW5kaWRhdGUgcHJvZ3JhbSwgYW5kCisjIHNldCAkZnVuY19jaGVja19wcm9nX3Jlc3VsdCBpZiBpdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCBsZXNzIHRoYW4KKyMgJF9HX3BhdGhfcHJvZ19tYXggY2hhcmFjdGVycy4KK2Z1bmNfcGF0aF9wcm9ncyAoKQoreworICAgIF9HX3Byb2dzX2xpc3Q9JDEKKyAgICBfR19jaGVja19mdW5jPSQyCisgICAgX0dfUEFUSD0kezMtIiRQQVRIIn0KKworICAgIF9HX3BhdGhfcHJvZ19tYXg9MAorICAgIF9HX3BhdGhfcHJvZ19mb3VuZD1mYWxzZQorICAgIF9HX3NhdmVfSUZTPSRJRlM7IElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgZm9yIF9HX2RpciBpbiAkX0dfUEFUSDsgZG8KKyAgICAgIElGUz0kX0dfc2F2ZV9JRlMKKyAgICAgIHRlc3QgLXogIiRfR19kaXIiICYmIF9HX2Rpcj0uCisgICAgICBmb3IgX0dfcHJvZ19uYW1lIGluICRfR19wcm9nc19saXN0OyBkbworICAgICAgICBmb3IgX2V4ZWV4dCBpbiAnJyAuRVhFOyBkbworICAgICAgICAgIF9HX3BhdGhfcHJvZz0kX0dfZGlyLyRfR19wcm9nX25hbWUkX2V4ZWV4dAorICAgICAgICAgIGZ1bmNfZXhlY3V0YWJsZV9wICIkX0dfcGF0aF9wcm9nIiB8fCBjb250aW51ZQorICAgICAgICAgIGNhc2UgYCIkX0dfcGF0aF9wcm9nIiAtLXZlcnNpb24gMj4mMWAgaW4KKyAgICAgICAgICAgICpHTlUqKSBmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0PSRfR19wYXRoX3Byb2cgX0dfcGF0aF9wcm9nX2ZvdW5kPTogOzsKKyAgICAgICAgICAgICopICAgICAkX0dfY2hlY2tfZnVuYyAkX0dfcGF0aF9wcm9nCisJCSAgIGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQ9JGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQKKwkJICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgJF9HX3BhdGhfcHJvZ19mb3VuZCAmJiBicmVhayAzCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSRfR19zYXZlX0lGUworICAgIHRlc3QgLXogIiRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0IiAmJiB7CisgICAgICBlY2hvICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiID4mMgorICAgICAgZXhpdCAxCisgICAgfQorfQorCisKKyMgV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBiZWZvcmUgY29uZmlndXJlCisjIGhhcyBmaWd1cmVkIG91dCB3aGVyZSB0aGUgYmVzdCBiaW5hcmllcyBhcmUga2VwdCwgd2hpY2ggbWVhbnMgd2UgaGF2ZQorIyB0byBzZWFyY2ggZm9yIHRoZW0gb3Vyc2VsdmVzIC0gZXhjZXB0IHdoZW4gdGhlIHJlc3VsdHMgYXJlIGFscmVhZHkgc2V0CisjIHdoZXJlIHdlIHNraXAgdGhlIHNlYXJjaGVzLgorCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBTRUQsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQorIyBzZWQsIG9yIHRoZSBzZWQgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkU0VEIiAmJiB7CisgIF9HX3NlZF9zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgIGZvciBfR19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgX0dfc2VkX3NjcmlwdD0kX0dfc2VkX3NjcmlwdCRubCRfR19zZWRfc2NyaXB0CisgIGRvbmUKKyAgZWNobyAiJF9HX3NlZF9zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgIF9HX3NlZF9zY3JpcHQ9CisKKyAgZnVuY19jaGVja19wcm9nX3NlZCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnJyA+PiBjb25mdGVzdC5ubAorICAgICAgIiRfR19wYXRoX3Byb2ciIC1mIGNvbmZ0ZXN0LnNlZCA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJzZWQgZ3NlZCIgZnVuY19jaGVja19wcm9nX3NlZCAkUEFUSDovdXNyL3hwZzQvYmluCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorICBTRUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBHUkVQLCBzZWFyY2ggdGhlIHBhdGggZm9yIGVpdGhlciBHTlUKKyMgZ3JlcCwgb3IgdGhlIGdyZXAgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkR1JFUCIgJiYgeworICBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgX0dfcGF0aF9wcm9nX21heD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnR1JFUCcgPj4gY29uZnRlc3QubmwKKyAgICAgICIkX0dfcGF0aF9wcm9nIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJncmVwIGdncmVwIiBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAkUEFUSDovdXNyL3hwZzQvYmluCisgIEdSRVA9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQWxsIHVwcGVyY2FzZSB2YXJpYWJsZSBuYW1lcyBhcmUgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlc2UKKyMgdmFyaWFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQKKyMgdXNlcyB0aGVtIGlmIGEgc3VpdGFibGUgY29tbWFuZCBvZiB0aGF0IG5hbWUgaXMgbm90IGFscmVhZHkgYXZhaWxhYmxlCisjIGluIHRoZSBjb21tYW5kIHNlYXJjaCBQQVRILgorCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtFQ0hPPSJwcmludGYgJXNcbiJ9Cis6ICR7RUdSRVA9IiRHUkVQIC1FIn0KKzogJHtGR1JFUD0iJEdSRVAgLUYifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VmdWwgc2VkIHNuaXBwZXRzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworc2VkX2Rpcm5hbWU9J3N8L1teL10qJHx8Jworc2VkX2Jhc2VuYW1lPSdzfF4uKi98fCcKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nc3xcKFtgIiRcXF1cKXxcXFwxfGcnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorc2VkX2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3N8W10uW14kXFwqXC9dfFxcJnxnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB0aGF0IGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitzZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtJ1wnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBzZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKKyMgd2VyZSAnXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mICdcJyBwcmVjZWRlZCBhCisjICckJyBpbiBpbnB1dCB0byBzZWRfZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20KKyMgZXhwYW5zaW9uLiAgU2luY2UgZWFjaCBpbnB1dCAnXCcgaXMgbm93IHR3byAnXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCisjIG9mIHJ1bnMgb2YgZm91ciAnXCdzIGZvbGxvd2VkIGJ5IHR3byAnXCdzIGFuZCB0aGVuIGEgJyQnLiAgJ1wnIHRoYXQgJyQnLgorX0dfYnM9J1xcJworX0dfYnMyPSdcXFxcJworX0dfYnM0PSdcXFxcXFxcXCcKK19HX2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRfR19iczQvJlxcCisvZworICBzL14kX0dfYnMyJF9HX2RvbGxhci8kX0dfYnMmLworICBzL1xcKFteJF9HX2JzXVxcKSRfR19iczIkX0dfZG9sbGFyL1xcMSRfR19iczIkX0dfYnMkX0dfZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2xvYmFsIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRXhjZXB0IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBleHBsaWNpdGx5IGxpc3RlZCBiZWxvdywgdGhlIGZvbGxvd2luZworIyBmdW5jdGlvbnMgaW4gdGhlICdeZnVuY18nIG5hbWVzcGFjZSwgYW5kIHRoZSAnXnJlcXVpcmVfJyBuYW1lc3BhY2UKKyMgdmFyaWFibGVzIGluaXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcKKyMgdGhpcyBmaWxlIHdpbGwgbm90IHBvbGx1dGUgeW91ciBnbG9iYWwgbmFtZXNwYWNlIHdpdGggYW55dGhpbmcKKyMgZWxzZS4gVGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8gc2NvcGUgdmFyaWFibGVzIGluIEJvdXJuZSBzaGVsbAorIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCisjIHJlc3VsdHMgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBmdW5jdGlvbiwgYW5kIG9mdGVuIHVzZQorIyB0ZW1wb3JhcnkgdmFyaWFibGVzIGluIHRoZSAnXl9HXycgbmFtZXNwYWNlLiBJZiB5b3UgYXJlIGNhcmVmdWwgdG8KKyMgYXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCisjIHNob3VsZCBjb250aW51ZSB0byB3b3JrIGFzIHlvdSBleHBlY3QuIEFuZCwgb2YgY291cnNlLCB5b3UgY2FuIGZyZWVseQorIyBvdmVyd3JpdGUgYW55IG9mIHRoZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGRlZmluZWQgaGVyZSBiZWZvcmUKKyMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0b21pemUgdGhlbS4KKworRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworIyBBbGxvdyBvdmVycmlkaW5nLCBlZyBhc3N1bWluZyB0aGF0IHlvdSBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YKKyMgcHV0dGluZyAnJGRlYnVnX2NtZCcgYXQgdGhlIHN0YXJ0IG9mIGFsbCB5b3VyIGZ1bmN0aW9ucywgeW91IGNhbiBnZXQKKyMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKKyMKKyMgICAgZGVidWdfY21kPSdldmFsIGVjaG8gIiR7RlVOQ05BTUVbMF19ICQqIiA+JjInIGJhc2ggeW91ci1zY3JpcHQtbmFtZQorZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KK2V4aXRfY21kPToKKworIyBCeSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKKyMKKyMgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyMKKyMgc28gdGhhdCB5b3UgY2FuIHNldCBleGl0X3N0YXR1cyB0byBub24temVybyBpZiB5b3Ugd2FudCB0byBpbmRpY2F0ZQorIyBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgZXhlY3V0aW9uIHdpdGhvdXQgYWN0dWFsbHkgYmFpbGluZyBvdXQgYXQKKyMgdGhlIHBvaW50IG9mIGZhaWx1cmUuCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0kMAorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KK3Byb2duYW1lPWAkRUNITyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcHJvZ3BhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj1gJEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKKyAgICAgOzsKKyAgKikKKyAgICAgX0dfSUZTPSRJRlMKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSRfR19JRlMKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSRfR19JRlMKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCisgICAgIDs7Citlc2FjCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKKyMgYmVsb3csIGFuZCBzaG91bGQgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZGVwZW5kaW5nIG9uIHJ1bi10aW1lIHBhcmEtCisjIG1ldGVycyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKKworIyBDYXRlZ29yaWVzICdhbGwnIGFuZCAnbm9uZScgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBBcHBlbmQgYW55IG90aGVycworIyB5b3Ugd2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgorIyBjb2RlLgord2FybmluZ19jYXRlZ29yaWVzPQorCisjIEJ5IGRlZmF1bHQsIGRpc3BsYXkgd2FybmluZ3MgYWNjb3JkaW5nIHRvICdvcHRfd2FybmluZ190eXBlcycuICBTZXQKKyMgJ3dhcm5pbmdfZnVuYycgIHRvICc6JyB0byBlbGlkZSBhbGwgd2FybmluZ3MsIG9yIGZ1bmNfZmF0YWxfZXJyb3IgdG8KKyMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4KK3dhcm5pbmdfZnVuYz1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlCisKKyMgU2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCisjIHdhcm5pbmdzLCBvciBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIHNvbWUgc3Vic2V0IG9mCisjICd3YXJuaW5nX2NhdGVnb3JpZXMnIHRvIGRpc3BsYXkgb25seSB0aGUgbGlzdGVkIHdhcm5pbmdzLgorb3B0X3dhcm5pbmdfdHlwZXM9YWxsCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQorIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yCisjIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKKyMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gQ2FsbCB0aGVtIHVzaW5nIHRoZWlyIGFzc29jaWF0ZWQKKyMgJ3JlcXVpcmVfKicgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQsIGF0IG1vc3QsIG9uY2UuCisjCisjIEl0J3MgZW50aXJlbHkgZGVsaWJlcmF0ZSB0aGF0IGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBzZXQKKyMgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgb2JleSB0aGUgbmFtZXNwYWNlIGxpbWl0YXRpb25zIG9iZXllZCBieSB0aGUgcmVzdAorIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bworIyBjYWxsZXJzLgorCisKKyMgcmVxdWlyZV90ZXJtX2NvbG9ycworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbG93IGRpc3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCityZXF1aXJlX3Rlcm1fY29sb3JzPWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycworZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAtdCAxICYmIHsKKyAgICAgICMgQ09MT1JURVJNIGFuZCBVU0VfQU5TSV9DT0xPUlMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UKKyAgICAgICMgcHJlY2VkZW5jZSwgYmVjYXVzZSBtb3N0IHRlcm1pbmZvIGRhdGFiYXNlcyBuZWdsZWN0IHRvIGRlc2NyaWJlCisgICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAgICB0ZXN0IC1uICIke0NPTE9SVEVSTStzZXR9IiAmJiA6ICR7VVNFX0FOU0lfQ09MT1JTPSIxIn0KKworICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0aGVuCisgICAgICAgICMgU3RhbmRhcmQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCisgICAgICAgIHRjX3Jlc2V0PScbWzBtJworICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3bScKKyAgICAgICAgdGNfcmVkPScbWzMxbSc7ICAgdGNfZ3JlZW49JxtbMzJtJworICAgICAgICB0Y19ibHVlPScbWzM0bSc7ICB0Y19jeWFuPScbWzM2bScKKyAgICAgIGVsc2UKKyAgICAgICAgIyBPdGhlcndpc2UgdHJ1c3QgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFmdGVyIGFsbC4KKyAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2dyMCAyPi9kZXYvbnVsbGAiICYmIHsKKyAgICAgICAgICB0Y19yZXNldD1gdHB1dCBzZ3IwYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IGJvbGQgMj4vZGV2L251bGxgIiAmJiB0Y19ib2xkPWB0cHV0IGJvbGRgCisgICAgICAgICAgdGNfc3RhbmRvdXQ9JHRjX2JvbGQKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAxIDI+L2Rldi9udWxsYCIgJiYgdGNfcmVkPWB0cHV0IHNldGFmIDFgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMiAyPi9kZXYvbnVsbGAiICYmIHRjX2dyZWVuPWB0cHV0IHNldGFmIDJgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYgNGAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA1IDI+L2Rldi9udWxsYCIgJiYgdGNfY3lhbj1gdHB1dCBzZXRhZiA1YAorICAgICAgICB9CisgICAgICBmaQorICAgIH0KKworICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9OgorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGdW5jdGlvbiBsaWJyYXJ5LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIHVzZWZ1bCBmdW5jdGlvbnMgdG8gY2FsbCBpbiB5b3VyCisjIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CisjIHNvbWUgbW9kZXJuIHNoZWxscywgd2hpY2ggd2lsbCBmYWxsIGJhY2sgdG8gc2xvd2VyIGVxdWl2YWxlbnRzIG9uCisjIGxlc3MgZmVhdHVyZWZ1bCBzaGVsbHMuCisKKworIyBmdW5jX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIuCisKKyAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhleSBhcmUKKyAgIyB1bnJlYXNvbmFibHkgc2xvdywgc28gc2tpcCB0aGUgZmVhdHVyZSBwcm9iZXMgd2hlbiBiYXNoIG9yIHpzaCBhcmUKKyAgIyBiZWluZyB1c2VkOgorICBpZiB0ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgIDogJHtfR19IQVZFX0FSSVRIX09QPSJ5ZXMifQorICAgIDogJHtfR19IQVZFX1hTSV9PUFM9InllcyJ9CisgICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEKKyAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgIFsxMl0uKiB8IDMuMCB8IDMuMCopIDs7CisgICAgICAqKQorICAgICAgICA6ICR7X0dfSEFWRV9QTFVTRVFfT1A9InllcyJ9CisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgICMgX0dfSEFWRV9QTFVTRVFfT1AKKyAgIyBDYW4gYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNoZWxsIGlzIHByb2JlZCwgInllcyIgaWYgKz0gaXMKKyAgIyB1c2VhYmxlIG9yIGFueXRoaW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KKyAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCisgICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsgdGVzdCAiYSBiIiA9ICIkeCInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9QTFVTRVFfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX2FwcGVuZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAiJDErPVwkMiIKKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19hcHBlbmQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgIiQxPVwkJDFcJDIiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDErPVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0nCitlbHNlCisgIGZ1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDE9XCQkMVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF91bmlxIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdW5pcXVlIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUiwgYXNzdW1pbmcKKyMgZW50cmllcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgVkFMVUUuICBGb3IgZXhhbXBsZToKKyMKKyMgICBmdW5jX2FwcGVuZF91bmlxIG9wdGlvbnMgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCIKKyMKKyMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKKyMgaXMgbm90IGFscmVhZHkgcHJlc2VudCBzb21ld2hlcmUgaW4gJG9wdGlvbnMgYWxyZWFkeSAobm90ZSBzcGFjZXMgYXQKKyMgZWFjaCBlbmQgaW1wbGllZCBieSBsZWFkaW5nIHNwYWNlIGluIHNlY29uZCBhcmd1bWVudCkuCitmdW5jX2FwcGVuZF91bmlxICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBfR19jdXJyZW50X3ZhbHVlPSdgJEVDSE8gJCckMSdgJworICAgIF9HX2RlbGltPWBleHByICIkMiIgOiAnXCguXCknYAorCisgICAgY2FzZSAkX0dfZGVsaW0kX0dfY3VycmVudF92YWx1ZSRfR19kZWxpbSBpbgorICAgICAgKiIkMiRfR19kZWxpbSIqKSA7OworICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfYXJpdGggVEVSTS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYXJpdGhfcmVzdWx0IHRvIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBURVJNcy4KKyAgdGVzdCAteiAiJF9HX0hBVkVfQVJJVEhfT1AiIFwKKyAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfQVJJVEhfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgorICBldmFsICdmdW5jX2FyaXRoICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgZnVuY19hcml0aCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKyAgfQorZmkKKworCisjIGZ1bmNfYmFzZW5hbWUgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYmFzZW5hbWVfcmVzdWx0IHRvIEZJTEUgd2l0aCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKKyMgdGhlIGxhc3QgLyBzdHJpcHBlZC4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgICMgSWYgdGhpcyBzaGVsbCBzdXBwb3J0cyBzdWZmaXggcGF0dGVybiByZW1vdmFsLCB0aGVuIHVzZSBpdCB0byBhdm9pZAorICAjIGZvcmtpbmcuIEhpZGUgdGhlIGRlZmluaXRpb25zIHNpbmdsZSBxdW90ZXMgaW4gY2FzZSB0aGUgc2hlbGwgY2hva2VzCisgICMgb24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0kezEjIyovfScKKyAgX2Q9J2Nhc2UgJDEgaW4KKyAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OworICAgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMgICAgICAgIDs7CisgICAgICBlc2FjJworCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJworICBfZD0nZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiAgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkMSI7IHRoZW4KKyAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMworICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2Rpcm5hbWVfcmVzdWx0ICIkMiIKKyAgICAgIGZpJworZmkKKworZXZhbCAnZnVuY19iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKK30nCisKKworIyBmdW5jX2Rpcm5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZXZhbCAnZnVuY19kaXJuYW1lICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2QiJworfScKKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFkCisjIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZXZhbCAnZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKKyAgICAnIiRfZCInCit9JworCisKKyMgZnVuY19lY2hvIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICBmdW5jX2VjaG9fSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19JRlMKKyAgICAgICRFQ0hPICIkcHJvZ25hbWU6ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfZWNob19hbGwgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisKKyMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSwgZm9sbG93ZWQgYnkgSU5GSVggb24gdGhlIGZpcnN0IGxpbmUsIHdpdGggYW55CisjIGFkZGl0aW9uYWwgbGluZXMgbm90IHNob3dpbmcgSU5GSVguCitmdW5jX2VjaG9faW5maXhfMSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBfR19pbmZpeD0kMTsgc2hpZnQKKyAgICBfR19pbmRlbnQ9JF9HX2luZml4CisgICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDogIgorICAgIF9HX21lc3NhZ2U9JCoKKworICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNlcyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAorICAgIGZvciBfR190YyBpbiAiJHRjX3Jlc2V0IiAiJHRjX2JvbGQiICIkdGNfc3RhbmRvdXQiICIkdGNfcmVkIiAiJHRjX2dyZWVuIiAiJHRjX2JsdWUiICIkdGNfY3lhbiIKKyAgICBkbworICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7CisgICAgICAgIF9HX2VzY190Yz1gJEVDSE8gIiRfR190YyIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIF9HX2luZGVudD1gJEVDSE8gIiRfR19pbmRlbnQiIHwgJFNFRCAic3wkX0dfZXNjX3RjfHxnImAKKyAgICAgIH0KKyAgICBkb25lCisgICAgX0dfaW5kZW50PSIkcHJvZ25hbWU6ICJgZWNobyAiJF9HX2luZGVudCIgfCAkU0VEICdzfC58IHxnJ2AiICAiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMV9JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCisgICAgICAkRUNITyAiJF9HX3ByZWZpeCR0Y19ib2xkJF9HX2xpbmUkdGNfcmVzZXQiID4mMgorICAgICAgX0dfcHJlZml4PSRfR19pbmRlbnQKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKK30KKworCisjIGZ1bmNfZXJyb3IgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAiJCoiID4mMgorfQorCisKKyMgZnVuY19mYXRhbF9lcnJvciBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19lcnJvciAiJCoiCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKworIyBmdW5jX2dyZXAgRVhQUkVTU0lPTiBGSUxFTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX2xlbiBTVFJJTkcKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2xlbl9yZXN1bHQgdG8gdGhlIGxlbmd0aCBvZiBTVFJJTkcuIFNUUklORyBtYXkgbm90CisjIHN0YXJ0IHdpdGggYSBoeXBoZW4uCisgIHRlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbGVuICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKyAgfScKK2Vsc2UKKyAgZnVuY19sZW4gKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyAgfQorZmkKKworCisjIGZ1bmNfbWtkaXJfcCBESVJFQ1RPUlktUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQorICAgIF9HX2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoICctJworICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIF9HX2RpcmVjdG9yeV9wYXRoPS4vJF9HX2RpcmVjdG9yeV9wYXRoIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9HX2Rpcl9saXN0CisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgX0dfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkX0dfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJHNlZF9kaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIF9HX2Rpcl9saXN0PWAkRUNITyAiJF9HX2Rpcl9saXN0IiB8ICRTRUQgJ3N8OiokfHwnYAorCisgICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06CisgICAgICBmb3IgX0dfZGlyIGluICRfR19kaXJfbGlzdDsgZG8KKwlJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgJyQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW0JBU0VOQU1FXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR190ZW1wbGF0ZT0ke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfQorCisgICAgaWYgdGVzdCA6ID0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBfR190bXBkaXI9YG1rdGVtcCAtZCAiJF9HX3RlbXBsYXRlLVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0ke1JBTkRPTS0wfSQkCisKKyAgICAgICAgZnVuY19ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKKyAgICAgICAgdW1hc2sgJGZ1bmNfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRfR190bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRfR190bXBkaXIiCit9CisKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCisgICAgX0dfcGF0aGNhcj0nc3xeL1woW14vXSpcKS4qJHxcMXwnCisgICAgX0dfcGF0aGNkcj0nc3xeL1teL10qfHwnCisgICAgX0dfcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzfC9cLi98L3xnCisJCXQgZG90c2wKKwkJc3wvXC4kfC98JworICAgIF9HX2NvbGxhcHNlc2xhc2hlcz0nc3wvXHsxLFx9fC98ZycKKyAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKKworICAgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICAgIiIpCisgICAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIDs7CisgICAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgICAvLy8qKQorICAgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgICAgICA7OworICAgICAgLy8qKQorICAgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICAgICAgOzsKKyAgICAgIC8qKQorICAgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19yZW1vdmVkb3RwYXJ0cyIgLWUgIiRfR19jb2xsYXBzZXNsYXNoZXMiIC1lICIkX0dfZmluYWxzbGFzaCJgCisgICAgd2hpbGUgOjsgZG8KKyAgICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgICBpZiB0ZXN0IC8gPSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiOyB0aGVuCisgICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19wYXRoY2FyImAKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAorICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAgICIiKQorICAgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgICAgICA7OworICAgICAgICAuLikKKyAgICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCAiLyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKworIyBmdW5jX25vdHF1aWV0IEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KK2Z1bmNfbm90cXVpZXQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IHRvIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUi4KK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICAgIHdoaWxlIDo7IGRvCisgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgICBmaQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVuCisgICAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorICAgICAgZnVuY19hcHBlbmQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCAiLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgZmkKKworICAgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuICcuJyBlbHNlIHJlbGF0aXZlIHBhdGguCisgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZpCisKKyAgICB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIgfHwgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisKKyAgICA6Cit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSR3MgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczoKKyMgICBpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICAgIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbAorIyAgaWkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisjICAgICAgaGFzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlCisjICAgICAgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PQorICAgIHdoaWxlIHRlc3QgMCAtbHQgJCM7IGRvCisgICAgICBjYXNlICQxIGluCisgICAgICAgICpbXFxcYFwiXCRdKikKKwkgIF9HX3VucXVvdGVkX2FyZz1gcHJpbnRmICclc1xuJyAiJDEiIHwkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR191bnF1b3RlZF9hcmc9JDEgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiICRfR191bnF1b3RlZF9hcmciCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIkX0dfdW5xdW90ZWRfYXJnIgorICAgICAgZmkKKworICAgICAgY2FzZSAkX0dfdW5xdW90ZWRfYXJnIGluCisgICAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgdmFyaWFibGUgZXhwYW5zaW9uCisgICAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPVwiJF9HX3VucXVvdGVkX2FyZ1wiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPSRfR191bnF1b3RlZF9hcmcKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiICRfR19xdW90ZWRfYXJnIgorICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiJF9HX3F1b3RlZF9hcmciCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICBkb25lCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgQVJHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCV9HX2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJHNlZF9kb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgX0dfYXJnPSQxIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkX0dfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIF9HX2FyZz1cIiRfR19hcmdcIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9JF9HX2FyZworfQorCisKKyMgZnVuY19zdHJpcG5hbWUgUFJFRklYIFNVRkZJWCBOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBmcm9tIE5BTUUsIGFuZCBzdG9yZSBpbiBmdW5jX3N0cmlwbmFtZV9yZXN1bHQuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHZhcmlhYmxlIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kMworICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJDEifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJDIifQorICB9JworZWxzZQorICBmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkMiBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJVxcXFwkMlwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlJDJcJCUlImA7OworICAgIGVzYWMKKyAgfQorZmkKKworCisjIGZ1bmNfc2hvd19ldmFsIENNRCBbRkFJTF9FWFBdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIF9HX2NtZD0kMQorICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCisgICAgZXZhbCAiZnVuY19ub3RxdWlldCAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfY21kIgorICAgICAgX0dfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgorCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCisgICAgICBmaQorICAgIH0KK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBDTUQgW0ZBSUxfRVhQXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfY21kPSQxCisgICAgX0dfZmFpbF9leHA9JHsyLSc6J30KKworICAgICRvcHRfcXVpZXQgfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfdXNlcl9sb2NhbGUKKwkgICAgJF9HX2NtZCIKKyAgICAgIF9HX3N0YXR1cz0kPworICAgICAgZXZhbCAiJF9HX3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KKwlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICB9Cit9CisKKworIyBmdW5jX3RyX3NoCisjIC0tLS0tLS0tLS0KKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDEgaW4KKyAgICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgLWUgJ3MvXlwoWzAtOV1cKS9fXDEvJyAtZSAncy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgICA7OworICAgICogKQorICAgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY192ZXJib3NlIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKKworICAgIDoKK30KKworCisjIGZ1bmNfd2Fybl9hbmRfY29udGludWUgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2Fybl9hbmRfY29udGludWUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgZnVuY19lY2hvX2luZml4XzEgIiR7dGNfcmVkfXdhcm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCit9CisKKworIyBmdW5jX3dhcm5pbmcgQ0FURUdPUlkgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLiBXYXJuaW5nCisjIG1lc3NhZ2VzIGNhbiBiZSBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8gQ0FURUdPUlksIHdoZXJlIHRoaXMgZnVuY3Rpb24KKyMgZWxpZGVzIG1lc3NhZ2VzIHdoZXJlIENBVEVHT1JZIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyAnb3B0X3dhcm5pbmdfdHlwZXMnLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBDQVRFR09SWSBtdXN0IGJlIGluIHRoZSB3YXJuaW5nX2NhdGVnb3JpZXMgbGlzdCEKKyAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfaW50ZXJuYWxfZXJyb3IgImludmFsaWQgd2FybmluZyBjYXRlZ29yeSAnJDEnIiA7OworICAgIGVzYWMKKworICAgIF9HX2NhdGVnb3J5PSQxCisgICAgc2hpZnQKKworICAgIGNhc2UgIiAkb3B0X3dhcm5pbmdfdHlwZXMgIiBpbgorICAgICAgKiIgJF9HX2NhdGVnb3J5ICIqKSAkd2FybmluZ19mdW5jICR7MSsiJEAifSA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfc29ydF92ZXIgVkVSMSBWRVIyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICdzb3J0IC1WJyBpcyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZS4KKyMgTm90ZSB0aGlzIGRldmlhdGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisjIGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xkCisjIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0cmFwLmNvbmYuCisjIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJseQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2NvbmYuCitmdW5jX3NvcnRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgcHJpbnRmICclc1xuJXNcbicgIiQxIiAiJDIiIFwKKyAgICAgIHwgc29ydCAtdC4gLWsgMSwxbiAtayAyLDJuIC1rIDMsM24gLWsgNCw0biAtayA1LDVuIC1rIDYsNm4gLWsgNyw3biAtayA4LDhuIC1rIDksOW4KK30KKworIyBmdW5jX2x0X3ZlciBQUkVWIENVUlIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0cnVlIGlmIFBSRVYgYW5kIENVUlIgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFjY29yZGluZyB0bworIyBmdW5jX3NvcnRfdmVyLCBvdGhlcndpc2UgZmFsc2UuICBVc2UgaXQgbGlrZSB0aGlzOgorIworIyAgZnVuY19sdF92ZXIgIiRwcmV2X3ZlciIgIiRwcm9wb3NlZF92ZXIiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIi4uLiIKK2Z1bmNfbHRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAieCQxIiA9IHhgZnVuY19zb3J0X3ZlciAiJDEiICIkMiIgfCAkU0VEIDFxYAorfQorCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyBFbmQ6CisjISAvYmluL3NoCisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgorc2NyaXB0dmVyc2lvbj0yMDE0LTAxLTA3LjAzOyAjIFVUQworCisjIEEgcG9ydGFibGUsIHBsdWdnYWJsZSBvcHRpb24gcGFyc2VyIGZvciBCb3VybmUgc2hlbGwuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDEwCisKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgVGhpcyBmaWxlIGlzIGEgbGlicmFyeSBmb3IgcGFyc2luZyBvcHRpb25zIGluIHlvdXIgc2hlbGwgc2NyaXB0cyBhbG9uZworIyB3aXRoIGFzc29ydGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBtYWtlIHVzZQorIyBvZiB0b28uCisjCisjIEZvciB0aGUgc2ltcGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQgbmVlZCBvbmx5OgorIworIyAgICMhL2Jpbi9zaAorIyAgIC4gcmVsYXRpdmUvcGF0aC90by9mdW5jbGliLnNoCisjICAgLiByZWxhdGl2ZS9wYXRoL3RvL29wdGlvbnMtcGFyc2VyCisjICAgc2NyaXB0dmVyc2lvbj0xLjAKKyMgICBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CisjICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKyMgICAuLi5yZXN0IG9mIHlvdXIgc2NyaXB0Li4uCisjCisjIEluIG9yZGVyIGZvciB0aGUgJy0tdmVyc2lvbicgb3B0aW9uIHRvIHdvcmssIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhCisjIHN1aXRhYmx5IGZvcm1hdHRlZCBjb21tZW50IGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZQorIyBzdGFydGluZyB3aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5nIHdpdGggJyMgd2FycmFudHk7ICcuCisjCisjIEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3JrLCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBvbmUgbGluZQorIyBkZXNjcmlwdGlvbiBvZiB5b3VyIHNjcmlwdCdzIHB1cnBvc2UgaW4gYSBjb21tZW50IGRpcmVjdGx5IGFib3ZlIHRoZQorIyAnIyBXcml0dGVuIGJ5ICcgbGluZSwgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorIworIyBUaGUgZGVmYXVsdCBvcHRpb25zIGFsc28gc3VwcG9ydCAnLS1kZWJ1ZycsIHdoaWNoIHdpbGwgdHVybiBvbiBzaGVsbAorIyBleGVjdXRpb24gdHJhY2luZyAoc2VlIHRoZSBjb21tZW50IGFib3ZlIGRlYnVnX2NtZCBiZWxvdyBmb3IgYW5vdGhlcgorIyB1c2UpLCBhbmQgJy0tdmVyYm9zZScgYW5kIHRoZSBmdW5jX3ZlcmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBzY3JpcHQKKyMgdG8gZGlzcGxheSB2ZXJib3NlIG1lc3NhZ2VzIG9ubHkgd2hlbiB5b3VyIHVzZXIgaGFzIHNwZWNpZmllZAorIyAnLS12ZXJib3NlJy4KKyMKKyMgQWZ0ZXIgc291cmNpbmcgdGhpcyBmaWxlLCB5b3UgY2FuIHBsdWcgcHJvY2Vzc2luZyBmb3IgYWRkaXRpb25hbAorIyBvcHRpb25zIGJ5IGFtZW5kaW5nIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgJ0NvbmZpZ3VyYXRpb24nIHNlY3Rpb24KKyMgYmVsb3csIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgJ09wdGlvbiBwYXJzaW5nJworIyBzZWN0aW9uIGZ1cnRoZXIgZG93bi4KKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgc2NyaXB0IGFmdGVyIHNvdXJjaW5nIHRoaXMKKyMgZmlsZSBzbyB0aGF0IHRoZXkgcmVmbGVjdCB0aGUgY3VzdG9taXNhdGlvbnMgeW91IGhhdmUgYWRkZWQgdG8gdGhlCisjIG9wdGlvbiBwYXJzZXIuCisKKyMgVGhlIHVzYWdlIGxpbmUgZm9yIG9wdGlvbiBwYXJzaW5nIGVycm9ycyBhbmQgdGhlIHN0YXJ0IG9mICctaCcgYW5kCisjICctLWhlbHAnIG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJlZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRlbGF5ZWQKKyMgZXhwYW5zaW9uIGF0IHRoZSB0aW1lIHRoZSBtZXNzYWdlIGlzIGRpc3BsYXllZCwgYnV0IHlvdSB3aWxsIG5lZWQgdG8KKyMgcXVvdGUgb3RoZXIgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIGNhcmVmdWxseSB0byBwcmV2ZW50IHRoZW0gYmVpbmcKKyMgZXhwYW5kZWQgd2hlbiB0aGUgY29udGVudHMgYXJlIGV2YWxlZC4KK3VzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4nCisKKyMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcgYW5kICctLWhlbHAnLiAgQWRkIHRvIHRoaXMgb3IKKyMgb3ZlcnJpZGUgaXQgYWZ0ZXIgc291cmNpbmcgdGhpcyBsaWJyYXJ5IHRvIHJlZmxlY3QgdGhlIGZ1bGwgc2V0IG9mCisjIG9wdGlvbnMgeW91ciBzY3JpcHQgYWNjZXB0cy4KK3VzYWdlX21lc3NhZ2U9IlwKKyAgICAgICAtLWRlYnVnICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWQorICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQorICAgLXYsIC0tdmVyYm9zZSAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAgICAgIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitsb25nX2hlbHBfbWVzc2FnZT0iCitXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZToKKyAgICAgICAnYWxsJyAgICAgICAgICBzaG93IGFsbCB3YXJuaW5ncworICAgICAgICdub25lJyAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgICAgICAnZXJyb3InICAgICAgICB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBmYXRhbCBlcnJvcnMiCisKKyMgSGVscCBtZXNzYWdlIHByaW50ZWQgYmVmb3JlIGZhdGFsIG9wdGlvbiBwYXJzaW5nIGVycm9ycy4KK2ZhdGFsX2hlbHA9IlRyeSAnXCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhvb2sgZnVuY3Rpb24gbWFuYWdlbWVudC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb25zIGZvciBhZGRpbmcsIHJlbW92aW5nLCBhbmQgcnVubmluZyBob29rcworIyB0byB0aGUgbWFpbiBjb2RlLiAgQSBob29rIGlzIGp1c3QgYSBuYW1lZCBsaXN0IG9mIG9mIGZ1bmN0aW9uLCB0aGF0IGNhbgorIyBiZSBydW4gaW4gb3JkZXIgbGF0ZXIgb24uCisKKyMgZnVuY19ob29rYWJsZSBGVU5DX05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IEZVTkNfTkFNRSB3aWxsIHJ1biBob29rcyBhZGRlZCB3aXRoCisjICdmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSAuLi4nLgorZnVuY19ob29rYWJsZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXBwZW5kIGhvb2thYmxlX2ZucyAiICQxIgorfQorCisKKyMgZnVuY19hZGRfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1ZXN0IHRoYXQgRlVOQ19OQU1FIGNhbGwgSE9PS19GVU5DIGJlZm9yZSBpdCByZXR1cm5zLiAgRlVOQ19OQU1FIG11c3QKKyMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkgYSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KK2Z1bmNfYWRkX2hvb2sgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3QgYWNjZXB0IGhvb2sgZnVuY3Rpb25zLiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIGZ1bmNfYXBwZW5kICR7MX1faG9va3MgJyIgJDIiJworfQorCisKKyMgZnVuY19yZW1vdmVfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgSE9PS19GVU5DIGZyb20gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSBGVU5DX05BTUUuCitmdW5jX3JlbW92ZV9ob29rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAkezF9X2hvb2tzPSdgJEVDSE8gIlwkJyQxJ19ob29rcyIgfCRTRUQgInN8ICckMid8fCJgJworfQorCisKKyMgZnVuY19ydW5faG9va3MgRlVOQ19OQU1FIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gYWxsIGhvb2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1FLgorIyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpc3Qgb2YgaG9vayBmdW5jdGlvbnMgY29udGFpbnMgbm90aGluZyBtb3JlCisjIHRoYW4gYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKKyMgbm8gZWZmb3J0IGlzIHdhc3RlZCB0cnlpbmcgdG8gY2F0Y2ggc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9yIHByZXNlcnZlCisjIHdoaXRlc3BhY2UuCitmdW5jX3J1bl9ob29rcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVuY2lvbnMubiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0CisKKyAgICBmb3IgX0dfaG9vayBpbiAkX0dfaG9va19mbnM7IGRvCisgICAgICBldmFsICRfR19ob29rICciJEAiJworCisgICAgICAjIHN0b3JlIHJldHVybmVkIG9wdGlvbnMgbGlzdCBiYWNrIGludG8gcG9zaXRpb25hbAorICAgICAgIyBwYXJhbWV0ZXJzIGZvciBuZXh0ICdjbWQnIGV4ZWN1dGlvbi4KKyAgICAgIGV2YWwgX0dfaG9va19yZXN1bHQ9XCQke19HX2hvb2t9X3Jlc3VsdAorICAgICAgZXZhbCBzZXQgZHVtbXkgIiRfR19ob29rX3Jlc3VsdCI7IHNoaWZ0CisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3J1bl9ob29rc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbiBwYXJzaW5nLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCisjIGZ1bGwgcG9zaXRpb25hbCBwYXJhbWV0ZXIgbGlzdCBpbiB5b3VyIGhvb2sgZnVuY3Rpb24sIHJlbW92ZSBhbnkKKyMgb3B0aW9ucyB0aGF0IHlvdSBhY3Rpb24sIGFuZCB0aGVuIHBhc3MgYmFjayB0aGUgcmVtYWluaW5nIHVucHJvY2Vzc2VkCisjIG9wdGlvbnMgaW4gJzxob29rZWRfZnVuY3Rpb25fbmFtZT5fcmVzdWx0JywgZXNjYXBlZCBzdWl0YWJseSBmb3IKKyMgJ2V2YWwnLiAgTGlrZSB0aGlzOgorIworIyAgICBteV9vcHRpb25zX3ByZXAgKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBFeHRlbmQgdGhlIGV4aXN0aW5nIHVzYWdlIG1lc3NhZ2UuCisjICAgICAgICB1c2FnZV9tZXNzYWdlPSR1c2FnZV9tZXNzYWdlJworIyAgICAgIC1zLCAtLXNpbGVudCAgICAgICBkb24nXCcndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICcKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbXlfb3B0aW9uc19wcmVwCisjCisjCisjICAgIG15X3NpbGVudF9vcHRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksIHdlIHBhcnNlIGFzIG1hbnkgb3B0aW9ucyBhcyB3ZSBjYW4KKyMgICAgICAgICMgcmVjb2duaXNlIGluIGEgbG9vcCBiZWZvcmUgcGFzc2luZyB0aGUgcmVtYWluZGVyIGJhY2sgdG8gdGhlCisjICAgICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291bnRlci4KKyMgICAgICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisjICAgICAgICAgIG9wdD0kMTsgc2hpZnQKKyMgICAgICAgICAgY2FzZSAkb3B0IGluCisjICAgICAgICAgICAgLS1zaWxlbnR8LXMpIG9wdF9zaWxlbnQ9OiA7OworIyAgICAgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisjICAgICAgICAgICAgLXMqKSAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorIyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIyAgICAgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAiJCoiOyBzaGlmdDsgYnJlYWsgOzsKKyMgICAgICAgICAgZXNhYworIyAgICAgICAgZG9uZQorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X3NpbGVudF9vcHRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIG15X3NpbGVudF9vcHRpb24KKyMKKyMKKyMgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgJG9wdF9zaWxlbnQgJiYgJG9wdF92ZXJib3NlICYmIGZ1bmNfZmF0YWxfaGVscCAiXAorIyAgICAnLS1zaWxlbnQnIGFuZCAnLS12ZXJib3NlJyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X29wdGlvbl92YWxpZGF0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBteV9vcHRpb25fdmFsaWRhdGlvbgorIworIyBZb3UnbGwgYWxzZSBuZWVkIHRvIG1hbnVhbGx5IGFtZW5kICR1c2FnZV9tZXNzYWdlIHRvIHJlZmxlY3QgdGhlIGV4dHJhCisjIG9wdGlvbnMgeW91IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxlIHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0CisjIG11bHRpcGxlIG9wdGlvbiBwYXJzaW5nIGhvb2tzIGNhbiBiZSBhZGRlZCBzYWZlbHkuCisKKworIyBmdW5jX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCB0aGUgZnVuY3Rpb25zIGNhbGxlZCBpbnNpZGUgZnVuY19vcHRpb25zIGFyZSBob29rYWJsZS4gU2VlIHRoZQorIyBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0YWlscy4KK2Z1bmNfaG9va2FibGUgZnVuY19vcHRpb25zCitmdW5jX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KKyAgICBldmFsIGZ1bmNfcGFyc2Vfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0KyIkZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0In0KKyAgICBldmFsIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQifQorCisgICAgZXZhbCBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0In0KKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIGluaXRpYWxpc2F0aW9ucyByZXF1aXJlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG9wdGlvbiBwYXJzZSBsb29wLgorIyBOb3RlIHRoYXQgd2hlbiBjYWxsaW5nIGhvb2sgZnVuY3Rpb25zLCB3ZSBwYXNzIHRocm91Z2ggdGhlIGxpc3Qgb2YKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQgbGlzdCwgYW5kCisjIG5lZWRzIHRvIHByb3BvZ2F0ZSB0aGF0IGJhY2sgdG8gcmVzdCBvZiB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgY29tcGxldGUKKyMgbW9kaWZpZWQgbGlzdCBtdXN0IGJlIHB1dCBpbiAnZnVuY19ydW5faG9va3NfcmVzdWx0JyBiZWZvcmUKKyMgcmV0dXJuaW5nLgorZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcAorZnVuY19vcHRpb25zX3ByZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgIG9wdF93YXJuaW5nX3R5cGVzPQorCisgICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbWFpbiBvcHRpb24gcGFyc2luZyBsb29wLgorZnVuY19ob29rYWJsZSBmdW5jX3BhcnNlX29wdGlvbnMKK2Z1bmNfcGFyc2Vfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9CisKKyAgICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMgZm9yIGluaXRpYWwgb3B0aW9uIHBhcnNpbmcsIHNvIHRoZXkKKyAgICAgICMgZ2V0IHByaW9yaXR5IGluIHRoZSBldmVudCBvZiByZXVzaW5nIGFuIG9wdGlvbiBuYW1lLgorICAgICAgZnVuY19ydW5faG9va3MgZnVuY19wYXJzZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgICAjIEFkanVzdCBmdW5jX3BhcnNlX29wdGlvbnMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG1hdGNoCisgICAgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdCI7IHNoaWZ0CisKKyAgICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlmIHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5IG9wdGlvbi4KKyAgICAgIHRlc3QgJCMgLWd0IDAgfHwgYnJlYWsKKworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisJCSAgICAgIDs7CisKKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisgICAgICAgICAgICAgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpub25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKworCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CisJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisgICAgICAgIC1XKikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKyAgICAgICAgLSopICAgICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXNlZCBvcHRpb246ICckX0dfb3B0JyIgOzsKKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorCisKKyMgZnVuY192YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitmdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucworZnVuY192YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBEaXNwbGF5IGFsbCB3YXJuaW5ncyBpZiAtVyB3YXMgbm90IGdpdmVuLgorICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgorCisgICAgZnVuY19ydW5faG9va3MgZnVuY192YWxpZGF0ZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZCEKKyAgICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSGVscGVyIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlCisjIGhvb2thYmxlIG9wdGlvbiBwYXJzZXIgZnJhbWV3b3JrIGluIGFzY2lpLWJldGljYWwgb3JkZXIuCisKKworIyBmdW5jX2ZhdGFsX2hlbHAgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBcJEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgorICAgIGV2YWwgXCRFQ0hPIFwiIiRmYXRhbF9oZWxwIlwiCisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworCisjIGZ1bmNfaGVscAorIyAtLS0tLS0tLS0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY19taXNzaW5nX2FyZyBBUkdOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfZXJyb3IgIk1pc3NpbmcgYXJndW1lbnQgZm9yICckMScuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworCisjIGZ1bmNfc3BsaXRfZXF1YWxzIFNUUklORworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xocyBhbmQgZnVuY19zcGxpdF9lcXVhbHNfcmhzIHNoZWxsIHZhcmlhYmxlcyBhZnRlcgorIyBzcGxpdHRpbmcgU1RSSU5HIGF0IHRoZSAnPScgc2lnbi4KK3Rlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9JHsxJSU9Kn0KKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0kezEjKj19CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgICYmIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdgCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgIHx8IGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJCdgCisgIH0KK2ZpICNmdW5jX3NwbGl0X2VxdWFscworCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgU0hPUlRPUFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9CisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6ICd4LVwoLlwpJ2AKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gZXhwciAieCQxIiA6ICd4LS5cKC4qXCkkJ2AKKyAgfQorZmkgI2Z1bmNfc3BsaXRfc2hvcnRfb3B0CisKKworIyBmdW5jX3VzYWdlCisjIC0tLS0tLS0tLS0KKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQorICAgICRFQ0hPICJSdW4gJyRwcm9nbmFtZSAtLWhlbHAgfCR7UEFHRVItbW9yZX0nIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY191c2FnZV9tZXNzYWdlCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQuCitmdW5jX3VzYWdlX21lc3NhZ2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCisgICAgZWNobworICAgICRTRUQgLW4gJ3N8XiMgfHwKKyAgICAgICAgL15Xcml0dGVuIGJ5L3sKKyAgICAgICAgICB4O3A7eAorICAgICAgICB9CisJaAorCS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgIGV2YWwgXCRFQ0hPIFwiIiR1c2FnZV9tZXNzYWdlIlwiCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgLS0tLS0tLS0tLS0tCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHByaW50ZiAnJXNcbicgIiRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAkU0VEIC1uICcKKyAgICAgICAgLyhDKS8hYiBnbworICAgICAgICA6bW9yZQorICAgICAgICAvXC4vIXsKKyAgICAgICAgICBOCisgICAgICAgICAgc3xcbiMgfCB8CisgICAgICAgICAgYiBtb3JlCisgICAgICAgIH0KKyAgICAgICAgOmdvCisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8sLyMgd2FycmFudHk7IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBzfF4jICokfHwKKyAgICAgICAgICBzfFwoKEMpXClbIDAtOSwtXSpbICwtXVwoWzEtOV1bMC05XSogXCl8XDEgXDJ8CisgICAgICAgICAgcAorICAgICAgICB9CisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBwCisgICAgICAgIH0KKyAgICAgICAgL153YXJyYW50eTsgL3EnIDwgIiRwcm9ncGF0aCIKKworICAgIGV4aXQgJD8KK30KKworCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgRW5kOgorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0nKEdOVSBsaWJ0b29sKSAyLjQuNicKKworCisjIGZ1bmNfZWNobyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIGFsc28gZGlzcGxheXMgdGhlIGN1cnJlbnQgbW9kZSBpbiBtZXNzYWdlcywgc28gb3ZlcnJpZGUKKyMgZnVuY2xpYi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3RvbSBkZWZpbml0aW9uLgorZnVuY19lY2hvICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgZnVuY19lY2hvX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCisgICAgICAkRUNITyAiJHByb2duYW1lJHtvcHRfbW9kZSs6ICRvcHRfbW9kZX06ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfd2FybmluZyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIHdhcm5pbmdzIGFyZSBub3QgY2F0ZWdvcml6ZWQsIHNvIG92ZXJyaWRlIGZ1bmNsaWIuc2gKKyMgZnVuY193YXJuaW5nIHdpdGggdGhpcyBzaW1wbGVyIGRlZmluaXRpb24uCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkd2FybmluZ19mdW5jICR7MSsiJEAifQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbnMgcGFyc2luZy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBhcmUgcGFyc2VkIGR1cmluZworIyB0aGUgb3B0aW9uIHBhcnNpbmcgbG9vcC4KKwordXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uJworCisjIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnLgordXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKKyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisgICAgICAgLS1uby13YXJuaW5ncyAgICAgICAgZXF1aXZhbGVudCB0byAnLVdub25lJworICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCisgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlCisKK01PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgICBleGVjdXRlICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyAgICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworICAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgIGxpbmsgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyAgICAgICB1bmluc3RhbGwgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKworTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorJy0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgJ01PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1doZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAoraW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgaG9zdC10cmlwbGV0OiAgICRob3N0CisgICAgICAgc2hlbGw6ICAgICAgICAgICRTSEVMTAorICAgICAgIGNvbXBpbGVyOiAgICAgICAkTFRDQworICAgICAgIGNvbXBpbGVyIGZsYWdzOiAkTFRDRkxBR1MKKyAgICAgICBsaW5rZXI6ICAgICAgICAgJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyAgICAgICB2ZXJzaW9uOiAgICAgICAgJHByb2duYW1lIChHTlUgbGlidG9vbCkgMi40LjYKKyAgICAgICBhdXRvbWFrZTogICAgICAgYCgkQVVUT01BS0UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKyAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKKyAgICBleGl0IDAKK30KKworCisjIGZ1bmNfbG8ybyBPQkpFQ1QtTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhbnNmb3JtIE9CSkVDVC1OQU1FIGZyb20gYSAnLmxvJyBzdWZmaXggdG8gdGhlIHBsYXRmb3JtIHNwZWNpZmljCisjIG9iamVjdCBzdWZmaXguCisKK2xvMm89cy9cXC5sb1wkLy4kb2JqZXh0LworbzJsbz1zL1xcLiRvYmpleHRcJC8ubG8vCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbG8ybyAoKQorICB7CisgICAgY2FzZSAkMSBpbgorICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4kb2JqZXh0IDs7CisgICAgICAqICAgKSBmdW5jX2xvMm9fcmVzdWx0PSQxICAgICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgIH0nCisKKyAgIyBmdW5jX3hmb3JtIExJQk9CSi1PUi1TT1VSQ0UKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBUcmFuc2Zvcm0gTElCT0JKLU9SLVNPVVJDRSBmcm9tIGEgJy5vJyBvciAnLmMnIChvciBvdGhlcndpc2UpCisgICMgc3VmZml4IHRvIGEgJy5sbycgbGlidG9vbC1vYmplY3Qgc3VmZml4LgorICBldmFsICdmdW5jX3hmb3JtICgpCisgIHsKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIGZ1bmNfbG8ybyAoKQorICB7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRsbzJvImAKKyAgfQorCisgIGZ1bmNfeGZvcm0gKCkKKyAgeworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAnc3xcLlteLl0qJHwubG98J2AKKyAgfQorZmkKKworCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfX2ZhdGFsX2Vycm9yICR7MSsiJEAifSBcCisgICAgICAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgXAorICAgICAgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgLS0tLS0tLS0tLS0KKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworCisjIGZ1bmNfZmVhdHVyZXMKKyMgLS0tLS0tLS0tLS0tLQorIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgZWNobyAiaG9zdDogJGhvc3QiCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisKKyMgZnVuY19lbmFibGVfdGFnIFRBR05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgICB0YWduYW1lPSQxCisKKyAgICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICAgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgICBzZWRfZXh0cmFjdGNmPS8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wCisKKyAgICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgICAgQ0MpIDs7CisgICAgKikKKyAgICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIHRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSAgIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkgICMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkgICMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwkgIGV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwkgIGV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgICAgZWxzZQorCSAgZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgICBmaQorfQorCisKKyMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCitsaWJ0b29sX29wdGlvbnNfcHJlcCAoKQoreworICAgICRkZWJ1Z19tb2RlCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgb3B0X2Rsb3Blbj0KKyAgICBvcHRfZHJ5X3J1bj1mYWxzZQorICAgIG9wdF9oZWxwPWZhbHNlCisgICAgb3B0X21vZGU9CisgICAgb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisgICAgb3B0X3F1aWV0PWZhbHNlCisKKyAgICBub25vcHQ9CisgICAgcHJlc2VydmVfYXJncz0KKworICAgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgIGNhc2UgJDEgaW4KKyAgICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBsaW5rfGxpbnxsaXxsKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KK2Z1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9vcHRpb25zX3ByZXAKKworCisjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSBoYW5kbGluZyBmb3IgbGlidG9vbCBzcGVjaWZpYyBvcHRpb25zLgorbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBQZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJsZSBpbgorICAgICMgZWFjaCBpdGVyYXRpb24uCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgIF9HX29wdD0kMQorICAgICAgc2hpZnQKKyAgICAgIGNhc2UgJF9HX29wdCBpbgorICAgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZHJ5X3J1bj06CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tY29uZmlnKSAgICAgICBmdW5jX2NvbmZpZyA7OworCisgICAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9OiA7OworCisgICAgICAgIC0tZmVhdHVyZXMpICAgICBmdW5jX2ZlYXR1cmVzIDs7CisKKyAgICAgICAgLS1maW5pc2gpICAgICAgIHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQgOzsKKworICAgICAgICAtLWhlbHApICAgICAgICAgb3B0X2hlbHA9OiA7OworCisgICAgICAgIC0taGVscC1hbGwpICAgICBvcHRfaGVscD0nOiBoZWxwLWFsbCcgOzsKKworICAgICAgICAtLW1vZGUpICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfbW9kZT0kMQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NtZD1leGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmc9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9OgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXRhZykgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGFnPSQxCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZW5hYmxlX3RhZyAiJDEiCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXZlcmJvc2V8LXYpICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT06CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKwkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CisgICAgICAgICopCQlzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbGlidG9vbF9wYXJzZV9vcHRpb25zCisKKworCisjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyMgYXJndW1lbnRzLgorbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICBpZiB0ZXN0IDAgLWx0ICQjOyB0aGVuCisgICAgICBub25vcHQ9JDEKKyAgICAgIHNoaWZ0CisgICAgZmkKKworICAgICMgcHJlc2VydmUgLS1kZWJ1ZworICAgIHRlc3QgOiA9ICIkZGVidWdfY21kIiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICMgU29sYXJpczIgYWRkZWQgdG8gZml4IGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTE2NDUyCisgICAgICAjIHNlZSBhbHNvOiBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU5Nzg4CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqIHwgKnNvbGFyaXMyKiB8ICpvczIqKQorICAgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgICA7OworICAgIGVzYWMKKworICAgICRvcHRfaGVscCB8fCB7CisgICAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgICAgdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKyAgICAgICAgJiYgdGVzdCB5ZXMgIT0gIiRidWlsZF9vbGRfbGlicyIgXAorICAgICAgICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisKKyAgICAgICMgRGFyd2luIHN1Y2tzCisgICAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgZXhlY3V0ZSAhPSAiJG9wdF9tb2RlIjsgdGhlbgorICAgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uICctZGxvcGVuJyIKKyAgICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICAgICAgZ2VuZXJpY19oZWxwPSRoZWxwCisgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIH0KKworICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCisKKworIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorIyBjYW4gcmV0dXJuIHF1aWNrbHkuCitmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CitldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCittYWdpYz0nJSUlTUFHSUMgdmFyaWFibGUlJSUnCittYWdpY19leGU9JyUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJScKKworIyBHbG9iYWwgdmFyaWFibGVzLgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKworIyBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sCisjIFRydWUgaWZmIHN0ZGluIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBMaWJ0b29sLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyMgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dCBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcCAoKQoreworICAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIHwgZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgJ2ZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgJGxhbGliX3BfbGluZSBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgeWVzID0gIiRsYWxpYl9wIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJGx0X3RydW5jYXRlX2JpbiA8ICIkMSIgMj4vZGV2L251bGwgfCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc3AkbmwKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyAnRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CitmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQoreworICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisgID0qKQorICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCitmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQoreworICBjYXNlICRsdF9zeXNyb290OiQxIGluCisgID8qOiIkbHRfc3lzcm9vdCIqKQorICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0nPSckZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgKikKKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgICAgICBkb25lCisgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKyAgICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCRTRUQgLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyQyXCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9sb2JqPW5vbmUKKyAgICBmaQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfb2xkb2JqPVwnJDNcJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKKworIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagorCitFT0YKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR3cml0ZV9saWJvYmoiCisgICAgfQorfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorIyBpbiAkYnVpbGQncyAkUEFUSC4KKyMKKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiOyB0aGVuCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorICAgICAgICAkU0VEIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgZWxzZQorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisgICAgZmkKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisjCisjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgb2xkSUZTPSRJRlMKKyAgICBJRlM9OgorICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisgICAgICBJRlM9JG9sZElGUworICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdAorICAgICAgICBlbHNlCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JG9sZElGUworICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKworCisjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisjCisjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKyMgYmUgY29udmVydGVkLgorIworIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KK2Z1bmNfY3lncGF0aCAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZmkKKyAgZWxzZQorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6ICckTFRfQ1lHUEFUSCciCisgIGZpCit9CisjZW5kOiBmdW5jX2N5Z3BhdGgKKworCisjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKK30KKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCit7CisgICRkZWJ1Z19jbWQKKworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgJyQxJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrOgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgICckMyciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKyAgICBlbHNlCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMKKyAgICBmaQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCitmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGNhc2UgJDQgaW4KKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0CisgICAgOzsKKyAgZXNhYworICBjYXNlICQ0IGluCisgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKyAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhICckdG9faG9zdF9maWxlX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorCisKKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY190b19ob3N0X2ZpbGUgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisKKworIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorZnVuY190b190b29sX2ZpbGUgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGNhc2UgLCQyLCBpbgorICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCisgICAgICA7OworICAgICopCisgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorICAgICAgOzsKKyAgZXNhYworfQorIyBlbmQgZnVuY190b190b29sX2ZpbGUKKworCisjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgJyR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorIworIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIHdpbGwgYnJlYWsuCisKKworIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KK3RvX2hvc3RfcGF0aF9jbWQ9CitmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ZnVuY19jb252ZXJ0X3BhdGhfJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisKKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRoICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKyMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorCisKKyMgZnVuY19kbGxfZGVmX3AgRklMRQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCisjIEtlZXAgaW4gc3luYyB3aXRoIF9MVF9ETExfREVGX1AgaW4gbGlidG9vbC5tNAorZnVuY19kbGxfZGVmX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfZGxsX2RlZl9wX3RtcD1gJFNFRCAtbiBcCisgICAgLWUgJ3MvXlsJIF0qLy8nIFwKKyAgICAtZSAnL15cKDsuKlwpKiQvZCcgXAorICAgIC1lICdzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCcgXAorICAgIC1lIHEgXAorICAgICIkMSJgCisgIHRlc3QgREVGID0gIiRmdW5jX2RsbF9kZWZfcF90bXAiCit9CisKKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0kbm9ub3B0ICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSRhcmcKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0kYXJnCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5ICctbycgbW9yZSB0aGFuIG9uY2UiCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGxhc3Rhcmc9CisJICBzYXZlX2lmcz0kSUZTOyBJRlM9LAorCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSRzYXZlX2lmcworCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKwkgIGRvbmUKKwkgIElGUz0kc2F2ZV9pZnMKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0kc3JjZmlsZQorCSAgc3JjZmlsZT0kYXJnCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCAnLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIH0KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLmdvIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tICckbGlib2JqJyIKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorCSAgfHwgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgJyRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgorICAgIG9iam5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgIGxvYmo9JHhkaXIkb2JqZGlyLyRvYmpuYW1lCisKKyAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgorCisgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisgICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBlbHNlCisgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZmkKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3Qgbm8gPSAiJHBpY19tb2RlIiAmJiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0IG5vID0gIiRjb21waWxlcl9jX28iOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiRvYmpleHQKKyAgICAgIGxvY2tmaWxlPSRvdXRwdXRfb2JqLmxvY2sKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgeWVzID0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgZnVuY190b190b29sX2ZpbGUgIiRzcmNmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCBubyAhPSAiJHBpY19tb2RlIjsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisKKyAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwcmVzc19vcHQiOyB0aGVuCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzICE9ICIkcGljX21vZGUiOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCisKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CisKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKKyAgdGVzdCBjb21waWxlID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSAnc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCAnLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsICcubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvICctZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgJy0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSAnaW5zdGFsbCcgb3IgJ2NwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXgtZGlyIFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCisgIC1kbG9wZW4gRklMRSAgICAgICctZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIHVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1vczJkbGxuYW1lIE5BTUUgIGZvcmNlIGEgc2hvcnQgRExMIG5hbWUgb24gT1MvMiAobm8gZWZmZWN0IG9uIG90aGVyIE9TZXMpCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCAnLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gJy5sYScgYXJlCit0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorb2JqZWN0IGZpbGVzLgorCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKCcubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgJy1ycGF0aCcgaXMKK3JlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5hJyBvciAnLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nICdhcicgYW5kICdyYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nICdsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluICcubG8nIG9yICcuJG9iamV4dCcsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorICAgICAgICA7OworCisgICAgICB1bmluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZWNobworICAgICRFQ0hPICJUcnkgJyRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKK30KKworIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CitpZiAkb3B0X2hlbHA7IHRoZW4KKyAgaWYgdGVzdCA6ID0gIiRvcHRfaGVscCI7IHRoZW4KKyAgICBmdW5jX21vZGVfaGVscAorICBlbHNlCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCAkU0VEIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZWNobworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8CisgICAgJFNFRCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgIGNtZD0kbm9ub3B0CisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIickZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCAnLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCAnJGRsbmFtZScgaW4gJyRkaXInIG9yICckZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSRhYnNkaXIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSRtYWdpYworCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSogfCAqLmxhIHwgKi5sbyApIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAiJGZpbGUiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0kcHJvZ2Rpci8kcHJvZ3JhbQorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPVwkY21kJGFyZ3MKKyAgICBmaQorfQorCit0ZXN0IGV4ZWN1dGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgbGlicz0KKyAgICBsaWJkaXJzPQorICAgIGFkbWluY21kcz0KKworICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorCisgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgorCWVsc2UKKwkgIGZ1bmNfd2FybmluZyAiJyRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwlmaQorCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCAnJG9wdCciCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisgICAgICBlbHNlCisgICAgICAgIHN5c3Jvb3RfY21kPQorICAgICAgZmkKKworICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCAnPScgcHJlZml4ZXMgZnJvbSAkbGliIgorICAgICAgICBkb25lCisgICAgICBlbHNlCisgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisJICAkU0VEIC1lICIkc3lzcm9vdF9jbWQgcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorCWRvbmUKKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9xdWlldCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwkkRUNITyAiICAgJGxpYmRpciIKKyAgICAgIGRvbmUKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlICctTExJQkRJUiciCisgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJbGliZGlyPUxJQkRJUgorCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworCSRFQ0hPICIgICAtIHVzZSB0aGUgJyRmbGFnJyBsaW5rZXIgZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gJy9ldGMvbGQuc28uY29uZiciCisgICAgICBmaQorICAgICAgZWNobworCisgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkgIGVjaG8gInBhZ2VzLiIKKwkgIDs7CisJKikKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZmkKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCBmaW5pc2ggPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkU0hFTEwiID0gIiRub25vcHQiIHx8IHRlc3QgL2Jpbi9zaCA9ICIkbm9ub3B0IiB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYworICAgIHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9ZmFsc2UKKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPTogOzsKKyAgICAgIC1mKQorCWlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwkgIHByZXY9JGFyZworCWZpCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIGlmIHRlc3QgWC1tID0gIlgkcHJldiIgJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KKwkgICAgYXJnMj0kaW5zdGFsbF9vdmVycmlkZV9tb2RlCisJICAgIG5vX21vZGU9ZmFsc2UKKwkgIGZpCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj06CisgICAgaWYgJGlzZGlyOyB0aGVuCisgICAgICBkZXN0ZGlyPSRkZXN0CisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBkZXN0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICInJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICInJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYworCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgJyRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nICckZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rICdcJyckZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9JDEKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9JHJlYWxuYW1lCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9JHtyZWFsbmFtZX1UCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9JHN0cmlwbWUKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0KKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBvczIqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqX2RsbC5hKQorCSAgICAgIHRzdHJpcG1lPQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgJ2xuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlICdsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9JGRlc3RkaXIvJHJlYWxuYW1lCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCWluc3RuYW1lPSRkaXIvJHtuYW1lfWkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSRkZXN0ZmlsZQorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gJyRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PQorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PS5leGUKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0ICckd3JhcHBlciciCisKKwkgIGZpbmFsaXplPToKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9JGxpYmRpci9gJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIickbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluICckbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1mYWxzZQorCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3Qgbm8gPSAiJGZhc3RfaW5zdGFsbCIgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmICRmaW5hbGl6ZTsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICAgICAgb3V0cHV0bmFtZT0kdG1wZGlyLyRmaWxlCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9xdWlldCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayAnJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9JG91dHB1dG5hbWUKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgJyRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSRkZXN0ZGlyLyRuYW1lCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJHRvb2xfb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gJyRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICIkcHJvZ3BhdGgiICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0IGluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgbXlfb3V0cHV0bmFtZT0kMQorICAgIG15X29yaWdpbmF0b3I9JDIKKyAgICBteV9waWNfcD0kezMtZmFsc2V9CisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgJFNFRCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0ke215X291dHB1dG5hbWV9Uy5jCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0kb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5ubQorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yICckbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZCBfX29zZl9fCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgeWVzID0gIiRkbHNlbGYiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJFNFRCAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJFNFRCAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgorCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9CisJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIjsgdGhlbgorCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKwkgICAgICAgICAgZmkKKwkgICAgICAgIGZpCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiOyB0aGVuCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmaQorCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGZpCisJICAgIDs7CisJICAgICopCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgfQorCSAgICA7OworICAgICAgICAgIGVzYWMKKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiR7bmxpc3R9SSInCisJICBpZiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCInIDwgIiRubGlzdCJTID4gIiRubGlzdCJJJworCSAgZmkKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CitleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107XAorIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorc3RhdGljIHZvaWQgbHRfc3ltaW5pdCh2b2lkKQoreworICBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QgKnN5bWJvbCA9IGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CisgIGZvciAoOyBzeW1ib2wtPm5hbWU7ICsrc3ltYm9sKQorICAgIHsiCisJICAgICRTRUQgJ3MvLiovICAgICAgaWYgKFNUUkVRIChzeW1ib2wtPm5hbWUsIFwiJlwiKSkgc3ltYm9sLT5hZGRyZXNzID0gKHZvaWQgKikgXCYmOy8nIDwgIiRubGlzdCJJID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICAgIH0KK30iCisJICBmaQorCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sge1wiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMH0sIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7XCJASU5JVEBcIiwgKHZvaWQgKikgJmx0X3N5bWluaXR9LCIKKwkgIGZpCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIuKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICAkbXlfcGljX3AgJiYgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiICIke25saXN0fUkiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciAnJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIHdpbjMyX2xpYmlkX3R5cGU9dW5rbm93bgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBjYXNlICRubV9pbnRlcmZhY2UgaW4KKyAgICAgICJNUyBkdW1wYmluIikKKwlpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiB8fAorCSAgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIgorCXRoZW4KKwkgIHdpbjMyX25tcmVzPWltcG9ydAorCWVsc2UKKwkgIHdpbjMyX25tcmVzPQorCWZpCisJOzsKKyAgICAgICopCisJZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisJICAkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgc3wuKnxpbXBvcnR8CisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworIworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQoreworICAkZGVidWdfY21kCisKKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKyMKKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKyMKKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisjCisjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQoreworICAkZGVidWdfY21kCisKKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorICAgICAgcy8uKi89PT09TUFSSz09PT0vCisgICAgICBwCisgICAgICBkCisgICAgfQorICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisgICAgL149PT09TUFSSz09PT0vcAorICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisgICAgL14uXHs0M1x9LyFkCisgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKyAgICBzL14uXHs0M1x9Ly8nIHwKKyAgICAkU0VEIC1uICcKKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKyAgICAgIEgKKyAgICAgICQgYiBwYXJhCisgICAgICBiCisgICAgICA6cGFyYQorICAgICAgeAorICAgICAgcy9cbi8vZworICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorICAgICAgcy9ePT09PU1BUks9PT09Ly8KKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKyAgICAgIHMvW1wuIFx0XSokLy8KKyAgICAgICMgUHJpbnQKKyAgICAgIC8uL3AnIHwKKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICMgYXJjaGl2ZSB0aGF0IHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHRoYXQgaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisgICAgIyBhICcuJy4KKyAgICAjCisgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMKKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiOyB0aGVuCisgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSI7IHRoZW4KKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisgIGVsc2UKKyAgICAjIHVua25vd24KKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0KKyAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZl9leF9hbl9hcl9kaXI9JDE7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgorICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKKwkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JworICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKKyAgICBmaQorICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBteV9nZW50b3A9JDE7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPQorICAgIG15X3hsaWI9CisgICAgbXlfeGFicz0KKyAgICBteV94ZGlyPQorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSRteV94bGliIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSRteV9nZW50b3AvJG15X3hsaWJfdQorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBmdW5jX2Jhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlczsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIiAiJGRhcndpbl9hcmNoaXZlIgorCSAgICAgIGNkICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJGRhcndpbl9iYXNlX2FyY2hpdmUiCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkc2VkX2Jhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSRteV9vbGRvYmpzCit9CisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZmlsZT1cIlwkMFwiIgorCisgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAkRUNITyAiXAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisgICAgRUNITz1cIiRxRUNIT1wiCisgIGZpCisKKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB0aGF0IGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgdGhhdCBtYXRjaAorIyB0aGlzIHBhdHRlcm4pLgorIworIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorbHRfb3B0aW9uX2RlYnVnPQorZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCit7CisgIGx0X3NjcmlwdF9hcmcwPVwkMAorICBzaGlmdAorICBmb3IgbHRfb3B0CisgIGRvCisgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworICAgIC0tbHQtZHVtcC1zY3JpcHQpCisgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKyAgICAgICAgZXhpdCAwCisgICAgICA7OworICAgIC0tbHQtKikKKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICBlY2hvIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXCIgMT4mMgorICBmaQorfQorCisjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorZnVuY19sdF9kdW1wX2FyZ3MgKCkKK3sKKyAgbHRfZHVtcF9hcmdzX049MTsKKyAgZm9yIGx0X2FyZworICBkbworICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorICBkb25lCit9CisKKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKK3sKKyIKKyAgY2FzZSAkaG9zdCBpbgorICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKworICAqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworICBlc2FjCisgICRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKK30KKworIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KK2Z1bmNfZXhlY19wcm9ncmFtICgpCit7CisgIGNhc2UgXCIgXCQqIFwiIGluCisgICpcXCAtLWx0LSopCisgICAgZm9yIGx0X3dyX2FyZworICAgIGRvCisgICAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisgICAgICAtLWx0LSopIDs7CisgICAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworICAgICAgZXNhYworICAgICAgc2hpZnQKKyAgICBkb25lIDs7CisgIGVzYWMKKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Cit9CisKKyAgIyBQYXJzZSBvcHRpb25zCisgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAkU0VEIDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJXCRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCSMKKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6ICdcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkIF9fTUlOR1czMl9fCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyBlbmRpZgorLyogI2VsaWYgZGVmaW5lZCBvdGhlcl9wbGF0Zm9ybSB8fCBkZWZpbmVkIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworI2VsaWYgZGVmaW5lZCBfX01JTkdXMzJfXworIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIG90aGVyIHBsYXRmb3JtcyAuLi4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBQQVRIX01BWAorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZCBNQVhQQVRITEVOCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKy8qIHBhdGggaGFuZGxpbmcgcG9ydGFiaWxpdHkgbWFjcm9zICovCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX01TRE9TX18gfHwgZGVmaW5lZCBfX0RKR1BQX18gfHwgXAorICBkZWZpbmVkIF9fT1MyX18KKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICoqcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpOwordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyNpZiBfX0dOVUNfXyA8IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPCA1KQorIyBkZWZpbmUgZXh0ZXJuYWxseV92aXNpYmxlIHZvbGF0aWxlCisjZWxzZQorIyBkZWZpbmUgZXh0ZXJuYWxseV92aXNpYmxlIF9fYXR0cmlidXRlX18oKGV4dGVybmFsbHlfdmlzaWJsZSkpIHZvbGF0aWxlCisjZW5kaWYKK2V4dGVybmFsbHlfdmlzaWJsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCAoc2l6ZV90KSBhcmdjICsgMSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKyAgICovCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSkKKwl7CitFT0YKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkZWJ1Z19vcHQpKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXG4iKTsKK0VPRgorCSAgICBjYXQgPDwiRU9GIgorICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworCisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgdG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJICB0YXJnZXRfbmFtZSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisgICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAorICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisgIHJ2YWwgPSAoaW50KSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgc2l6ZV90IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IChzaXplX3QpIChxIC0gcCk7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoU1RSRVEgKHN0ciwgcGF0KSkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBzaXplX3Qgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgc2l6ZV90IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKGxlbiA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVstLWxlbl0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK0VPRgorCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorCisvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKyAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisgICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6CisgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CisgICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7CisgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscworICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQorICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKyAgIHNwZWNpYWwgd2F5OgorICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcworICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisgICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcworICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCisgICAgIGNoYXJhY3RlcnMuCisgICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KKyAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQorICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorICAgICAgIFwiIC0+ICIKKyAgICAgICBcXFwiIC0+IFwiCisgICAgICAgXFxcXFwiIC0+IFxcIgorICovCisjZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorY2hhciAqKgorcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCit7CisgIHNpemVfdCBhcmdjOworICBjaGFyICoqbmV3X2FyZ3Y7CisgIHNpemVfdCBpOworCisgIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKyAgICA7CisKKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKworICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQorCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKwl7CisJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworCSAgc2l6ZV90IGxlbmd0aDsKKwkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKKwkgIGNvbnN0IGNoYXIgKnM7CisJICBjaGFyICpxdW90ZWRfc3RyaW5nOworCSAgY2hhciAqcDsKKworCSAgbGVuZ3RoID0gMDsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCsrOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisJICAgICAgbGVuZ3RoKys7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKworCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOworCisJICBwID0gcXVvdGVkX3N0cmluZzsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgICpwKysgPSAnIic7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJeworCQkgIHVuc2lnbmVkIGludCBqOworCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKKwkJICAgICpwKysgPSAnXFwnOworCQl9CisJICAgICAgKnArKyA9IGM7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBqOworCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQorCQkqcCsrID0gJ1xcJzsKKwkgICAgICAqcCsrID0gJyInOworCSAgICB9CisJICAqcCA9ICdcMCc7CisKKwkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKKwl9CisgICAgICBlbHNlCisJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CisgICAgfQorICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisKKyAgcmV0dXJuIG5ld19hcmd2OworfQorRU9GCisJCTs7CisJICAgIGVzYWMKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCit7CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKwkgICAgICAkU0VEIC1uIC1lICcKK3MvXlwoLlx7NzlcfVwpXCguLipcKS9cMVwKK1wyLworaAorcy9cKFtcXCJdXCkvXFxcMS9nCitzLyQvXFxuLworcy9cKFteXG5dKlwpLiovICBmcHV0cyAoIlwxIiwgZik7L3AKK2cKK0QnCisgICAgICAgICAgICBjYXQgPDwiRU9GIgorfQorRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wIEFSRworIyBUcnVlIGlmIEFSRyBpcyBhbiBpbXBvcnQgbGliLCBhcyBpbmRpY2F0ZWQgYnkgJGZpbGVfbWFnaWNfY21kCitmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKKyMgISFPTkxZIENBTEwgVEhJUyBGT1IgU1VOIENDIEFGVEVSICRjb21waWxlX2NvbW1hbmQgSVMgRlVMTFkgRVhQQU5ERUQhIQorIyBTZXZlcmFsIGNvbXBpbGVyIGZsYWdzIHNlbGVjdCBhbiBBQkkgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyMgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nIGl0IGlmIGFueSBhcmUgaW4gQ1hYRkxBR1MuCitmdW5jX3N1bmNjX2NzdGRfYWJpICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAiICRjb21waWxlX2NvbW1hbmQgIiBpbgorICAgICoiIC1jb21wYXQ9ZyAiKnwqXCAtc3RkPWMrK1swLTldWzAtOV1cICp8KiIgLWxpYnJhcnk9c3RkY3h4NCAiKnwqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHN1bmNjX3VzZV9jc3RkX2FiaT1ubworICAgICAgOzsKKyAgICAqKQorICAgICAgc3VuY2NfdXNlX2NzdGRfYWJpPXllcworICAgICAgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGF0IHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHRoYXQgaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQorICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBvczJkbGxuYW1lPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPWZhbHNlCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSR3bC1zaW5nbGVfbW9kdWxlCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisJICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWRsZmlsZXN8ZGxwcmVmaWxlcykKKwkgICRwcmVsb2FkIHx8IHsKKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPToKKwkgIH0KKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0IG5vID0gIiRkbHNlbGYiOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiIgJiYgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc2VsZiI7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9JGFyZworCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW1sbHZtKQorCSAgIyBDbGFuZyBkb2VzIG5vdCB1c2UgTExWTSB0byBsaW5rLCBzbyB3ZSBjYW4gc2ltcGx5IGRpc2NhcmQgYW55CisJICAjICctbWxsdm0gJGFyZycgb3B0aW9ucyB3aGVuIGRvaW5nIHRoZSBsaW5rIHN0ZXAuCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCisJCSAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisKKwkJaWYgdGVzdCBub25lICE9ICIkcGljX29iamVjdCI7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAorCisJCSAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCQkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGRsb3Blbl9zdXBwb3J0IjsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSRwaWNfb2JqZWN0CisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJCSAgICBhcmc9JG5vbl9waWNfb2JqZWN0CisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9zMmRsbG5hbWUpCisJICBvczJkbGxuYW1lPSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0tJGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCBycGF0aCA9ICIkcHJldiI7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0kYXJnCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiJy1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCBYLWV4cG9ydC1zeW1ib2xzID0gIlgkYXJnIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gJy1MJyBhbmQgJyQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciAnLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkgIGRpcj0kYWJzZGlyCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKwkgIDs7CisJKikKKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKwkgIGNhc2UgJGRpciBpbgorCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgWC1sYyA9ICJYJGFyZyIgfHwgdGVzdCBYLWxtID0gIlgkYXJnIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1iaXRyaWcqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgWC1sY19yID0gIlgkYXJnIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbWxsdm0pCisJcHJldj1tbGx2bQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0kd2wtbXVsdGlfbW9kdWxlCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIictbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nICctbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9zMmRsbG5hbWUpCisJcHJldj1vczJkbGxuYW1lCisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwk9KikKKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9JElGUzsgSUZTPSwKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0kc2F2ZV9pZnMKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9JHNhdmVfaWZzCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0kSUZTOyBJRlM9LAorCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSRzYXZlX2lmcworICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0kc2F2ZV9pZnMKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1mc3RhY2stcHJvdGVjdG9yKiAgIHN0YWNrIHByb3RlY3RvciBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKyAgICAgICMgLU8qLCAtZyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICMgLXN0ZGxpYj0qICAgICAgICAgICAgc2VsZWN0IGMrKyBzdGQgbGliIHdpdGggY2xhbmcKKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisgICAgICAtTyp8LWcqfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1mc3RhY2stcHJvdGVjdG9yKnwtc3RkbGliPSopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAtWiopCisgICAgICAgIGlmIHRlc3Qgb3MyID0gImBleHByICRob3N0IDogJy4qXChvczJcKSdgIjsgdGhlbgorICAgICAgICAgICMgT1MvMiB1c2VzIC1aeHh4IHRvIHNwZWNpZnkgT1MvMi1zcGVjaWZpYyBvcHRpb25zCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJICBjYXNlICRhcmcgaW4KKwkgIC1abGlua2VyIHwgLVpzdGFjaykKKwkgICAgcHJldj14Y29tcGlsZXIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGNvbnRpbnVlCisgICAgICAgIGVsc2UKKwkgICMgT3RoZXJ3aXNlIHRyZWF0IGxpa2UgJ1NvbWUgb3RoZXIgY29tcGlsZXIgZmxhZycgYmVsb3cKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICBhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisgICAgICAgIGZpCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJICBwaWNfb2JqZWN0PQorCSAgbm9uX3BpY19vYmplY3Q9CisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICIkYXJnIgorCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciAnJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCSAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiB8fCB7CisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAorCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCisJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9JHBpY19vYmplY3QKKwkgIH0KKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJICAgICAgYXJnPSRub25fcGljX29iamVjdAorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgorCWlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbHNlCisJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkZXhwb3J0X2R5bmFtaWMiICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgbGlib2Jqc19zYXZlPSRsaWJvYmpzCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgIyBEZWZpbml0aW9uIGlzIGluamVjdGVkIGJ5IExUX0NPTkZJRyBkdXJpbmcgbGlidG9vbCBnZW5lcmF0aW9uLgorICAgIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aCAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyCisgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAiIikKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIHNwZWNpYWxkZXBsaWJzPQorCisgICAgbGlicz0KKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorCisgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcworICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKwlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKwkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuICctZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9ZmFsc2UKKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJbGlicz0kZGVwbGlicworCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSRkbGZpbGVzIDs7CisJZGxwcmVvcGVuKSBsaWJzPSRkbHByZWZpbGVzIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgbGliLGRscHJlb3BlbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9JGRscHJlZmlsZXMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCisJZGVwbGlicz0KKyAgICAgIGZpCisKKyAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCisJbGliPQorCWZvdW5kPWZhbHNlCisJY2FzZSAkZGVwbGliIGluCisJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCisJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0kc2VhcmNoZGlyL2xpYiRuYW1lJHNlYXJjaF9leHQKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KKwkJICBmb3VuZD06CisJCWVsc2UKKwkJICBmb3VuZD1mYWxzZQorCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgJGZvdW5kOyB0aGVuCisJICAgICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSRsCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPWZhbHNlCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CisJCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0IGNvbnYgPSAiJHBhc3MiICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGNvbnRpbnVlCisJICAgIGZpCisJICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX3dhcm5pbmcgIictTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPWZhbHNlCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPToKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKKwkJICB2YWxpZF9hX2xpYj06CisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIiB8fCB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fCB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9OgorCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJJGZvdW5kIHx8IHRlc3QgLWYgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAorCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJICAgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gY29udgorCisKKwkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisJbGlua2xpYj0KKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisJICAgeyB0ZXN0IHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzIiB8fAorCSAgICAgdGVzdCBidWlsdCxubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9OyB0aGVuCisJICBsaW5rbGliPSRvbGRfbGlicmFyeQorCWVsc2UKKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgbGlua2xpYj0kbAorCSAgZG9uZQorCWZpCisJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkgIHRlc3QgLXogIiRsaWJkaXIiIFwKKwkgICAgJiYgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiAnJGxpYiciCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIKKwkgIHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9JGxhZGlyIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0kbGFkaXIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5ICckbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9JGxhZGlyCisJICAgIGFic2Rpcj0kYWJzX2xhZGlyCisJICAgIGxpYmRpcj0kYWJzX2xhZGlyCisJICBlbHNlCisJICAgIGRpcj0kbHRfc3lzcm9vdCRsaWJkaXIKKwkgICAgYWJzZGlyPSRsdF9zeXNyb290JGxpYmRpcgorCSAgZmkKKwkgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0kbGFkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9JGxhZGlyLyRvYmpkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIvJG9iamRpcgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKKwkgIGZpCisJICBjYXNlICRob3N0IGluCisJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKwkgICAgICAjIHN5bWJvbHMgZnJvbSB0aGUgaW1wb3J0IGxpYnJhcnkgaWYgYSBzaGFyZWQgbGlicmFyeSBpcyBwcmVzZW50CisJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKwkgICAgICAjIFdlIHJlY292ZXIgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSBieSAnc2F2aW5nJyB0aGUgbGEgZmlsZQorCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgIGZpCisJICAgIDs7CisJICAgICogKQorCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorCisJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKworCSAgbGlua2FsbGRlcGxpYnM9ZmFsc2UKKwkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIiB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9OgorCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkJIDs7CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiAkbGlua2FsbGRlcGxpYnM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0IG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8CisJICAgICAgICAgdGVzdCBidWlsdCx5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIjsgfSB8fAorCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgJHRlbXBfcnBhdGg6IGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiAkYWxsZGVwbGlicyAmJgorCSAgICAgeyB0ZXN0IHBhc3NfYWxsID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfHwKKwkgICAgICAgeyB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCBidWlsdCA9ICIkdXNlX3N0YXRpY19saWJzIiAmJiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3Qgbm8gPSAiJHVzZV9zdGF0aWNfbGlicyIgfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiB8ICpvczIqKQorCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0IG5vID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0KKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9JGRscHJlbW9kdWxldGVzdAorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0IHllcyA9ICIkc2hvdWxkbm90bGluayIgJiYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYKKwkgICAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSQxCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9JGRsbmFtZQorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyogfCAqb3MyKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9LSRtYWpvcgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9JHJlYWxuYW1lCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSRzb25hbWUKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tICckc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yICckc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdCI7IHRoZW4KKwkJYWRkPSRkaXIvJGxpbmtsaWIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0tTCRkaXIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0tTCRkaXIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPS1MJGRpciA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbm5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJICBlY2hvCisJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorCQkJICBlY2hvICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSRkaXIvJG9sZF9saWJyYXJ5CisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0kZGlyLyRvbGRfbGlicmFyeQorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSRkaXIgOzsKKwkJZXNhYworCQlhZGRfZGlyPS1MJGRpcgorCQlhZGQ9LWwkbmFtZQorCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCisJCWFkZD0kZGlyLyRsaW5rbGliCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkJYWRkX2Rpcj0tTCRhYnNkaXIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0IHllcyAhPSAiJGxpYl9saW5rZWQiOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9kaXJlY3QiICYmCisJCSB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiICYmCisJCSB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCisJICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIjsgdGhlbgorCSAgICAgIGFkZD0kbGliZGlyLyRsaW5rbGliCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIjsgdGhlbgorCQlhZGQ9JGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIKKwkgICAgICBlbHNlCisJCWFkZD0kbGliZGlyLyRsaW5rbGliCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKwkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJY2FzZSAkbGliZGlyIGluCisJCSAgW1xcL10qKQorCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0IHVuc3VwcG9ydGVkICE9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICBlY2hvCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2Fubm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCWVjaG8gIioqKiAnbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fAorCSAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiIHx8CisJICAgICAgIHRlc3QgeWVzID0gIiRsaW5rX3N0YXRpYyI7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0kdGVtcF9kZXBsaWJzCisJICBmaQorCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisJICB0ZXN0IG5vID0gIiRsaW5rX3N0YXRpYyIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGNhc2UgJGRlcGxpYiBpbgorICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKyAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CisgICAgICAgICAgICBlc2FjCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgZG9uZQorCisJICBpZiB0ZXN0IG5vICE9ICIkbGlua19hbGxfZGVwbGlicyI7IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSRkZXBsaWIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9JGRpciA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkJICAgIGFic2Rpcj0kZGlyCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgZGVwZGVwbD0KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCRTRUQgLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIjsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lczsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9JGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRPVE9PTCAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MNjQgLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsLWR5bGliX2ZpbGUgJHdsJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCisJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgorCQkgICAgICBwYXRoPQorCQkgICAgZmkKKwkJICBmaQorCQkgIDs7CisJCSopCisJCSAgcGF0aD0tTCRhYnNkaXIvJG9iamRpcgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0tTCRhYnNkaXIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JG5ld2RlcGVuZGVuY3lfbGlicworICAgICAgaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgZGxvcGVuICE9ICIkcGFzcyI7IHRoZW4KKwl0ZXN0IGNvbnYgPSAiJHBhc3MiIHx8IHsKKwkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgIGxpYl9zZWFyY2hfcGF0aD0KKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKwkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwl9CisKKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICB2YXJzPWRlcGxpYnMKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisKKyAgICAgICMgQWRkIFN1biBDQyBwb3N0ZGVwcyBpZiByZXF1aXJlZDoKKyAgICAgIHRlc3QgQ1hYID0gIiR0YWduYW1lIiAmJiB7CisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgbGludXgqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICpTdW5cIEMqKSAjIFN1biBDKysgNS45CisgICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCisKKyAgICAgICAgICAgIGlmIHRlc3Qgbm8gIT0gIiRzdW5jY191c2VfY3N0ZF9hYmkiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisKKyAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgZnVuY19jY19iYXNlbmFtZSAiJENDIgorICAgICAgICAgIGNhc2UgJGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0IGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorICAgICAgICAgICAgZnVuY19zdW5jY19jc3RkX2FiaQorCisgICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwb3N0ZGVwcyAnIC1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICB9CisKKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKKyAgICAgIHRtcF9saWJzPQorICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0KKwkgIDs7CisJZXNhYworCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCisgICAgZmkKKyAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICInLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0kb3V0cHV0CisgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gJ2xpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0IG5vID0gIiRtb2R1bGUiIFwKKwkgICYmIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggJ2xpYiciCisKKwlpZiB0ZXN0IG5vICE9ICIkbmVlZF9saWJfcHJlZml4IjsgdGhlbgorCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KKwlpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0IG5vID0gIiRkbHNlbGYiIFwKKwl8fCBmdW5jX3dhcm5pbmcgIictZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAxIC1sdCAiJCMiIFwKKwkmJiBmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlICctcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSQxCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhICcuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSRJRlM7IElGUz06CisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSRzYXZlX2lmcworCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byAnLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0kMQorCSAgbnVtYmVyX21pbm9yPSQyCisJICBudW1iZXJfcmV2aXNpb249JDMKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgdGhhdCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBkYXJ3aW58ZnJlZWJzZC1lbGZ8bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9JG51bWJlcl9taW5vcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX3JldmlzaW9uCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8cW54fHN1bm9zKQorCSAgICBjdXJyZW50PSRudW1iZXJfbWFqb3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgorCSAgICBhZ2U9MAorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSRudW1iZXJfbWlub3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgorCSAgICBsdF9pcml4X2luY3JlbWVudD1ubworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlubykKKwkgIGN1cnJlbnQ9JDEKKwkgIHJldmlzaW9uPSQyCisJICBhZ2U9JDMKKwkgIDs7CisJZXNhYworCisJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KKwljYXNlICRjdXJyZW50IGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJDVVJSRU5UICckY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OICckcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciAnJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIkd2wtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50ICR3bC1jdXJyZW50X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICMgT24gRGFyd2luIG90aGVyIGNvbXBpbGVycworICAgICAgICAgIGNhc2UgJENDIGluCisgICAgICAgICAgICAgIG5hZ2ZvciopCisgICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRyZXZpc2lvbgorCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KKwkgIDs7CisKKwlpcml4IHwgbm9uc3RvcHV4KQorCSAgaWYgdGVzdCBubyA9ICIkbHRfaXJpeF9pbmNyZW1lbnQiOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRyZXZpc2lvbgorCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbworCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmcKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gJy4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSRtYWpvci4kcmV2aXNpb24KKwkgIDs7CisKKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgorCSAgOzsKKworCW9zZikKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCisJICB2ZXJzdHJpbmc9JGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nOiRpZmFjZS4wCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiRjdXJyZW50LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CisJICA7OworCisJc2NvKQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCisJICA7OworCisJd2luZG93cykKKwkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZSBzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PS0kbWFqb3IKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlICckdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPTAuMAorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCBubyA9ICIkbmVlZF92ZXJzaW9uIjsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0uMC4wCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0IHllcyxubyA9ICIkYXZvaWRfdmVyc2lvbiwkbmVlZF92ZXJzaW9uIjsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9CisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0IHllcyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgorCSAgaWYgdGVzdCB1bnN1cHBvcnRlZCA9ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXM7IGJ1aWxkaW5nIHN0YXRpYyBvbmx5IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBlbHNlCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuJ3QgYnVpbGQgJGhvc3Qgc2hhcmVkIGxpYnJhcnkgdW5sZXNzIC1uby11bmRlZmluZWQgaXMgc3BlY2lmaWVkIgorCSAgICBmaQorCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JG5vX3VuZGVmaW5lZF9mbGFnCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiIDoKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIiAiID0gIiRsaWJvYmpzIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0IHJlbGluayAhPSAiJG9wdF9tb2RlIjsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLiopCisJICAgICAgIGlmIHRlc3QgLW4gIiRwcmVjaW91c19maWxlc19yZWdleCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiB0ZXN0IGNvbnZlbmllbmNlICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7ICRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8IHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9JGRsZmlsZXMKKyAgICAgIGRsZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KKwljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0kZGxwcmVmaWxlcworICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPQorCXZlcnN1ZmZpeD0KKwltYWpvcj0KKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCisJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgKiIgJGkgIiopCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICBpPQorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgIGRlcGxpYl9tYXRjaD0kMQorCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgICAgaT0KKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgICAgZGVwbGliX21hdGNoPSQxCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDA7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9CisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorCQllbHNlCisJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKwkJZmkKKwkJdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiIgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgaWYgdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiI7IHRoZW4KKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICAgICRub2Nhc2VnbG9iCisJCSAgZWxzZQorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZpCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSRwb3RlbnRfbGliCisJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbworCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAkU0VEICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSRwb3RsaWJsaW5rOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAnc3xbXi9dKiR8fCdgIiRwb3RsaWJsaW5rIjs7CisJCQllc2FjCisJCSAgICAgIGRvbmUKKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKwkJCSAkU0VEIC1lIDEwcSB8CisJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0KKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPQorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0kcG90ZW50X2xpYiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPQorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0KKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzfCRpfHwiYAorCSAgICBkb25lCisJICBmaQorCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobworCSAgICBpZiB0ZXN0IG5vbmUgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCisJICAgIGZpCisJICAgIGVjaG8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0IHllcyA9ICIkZHJvcHBlZGRlcHMiOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgorCSAgICBlY2hvCisJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICBlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgJ25tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJICAgICAgb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0CisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0IG5vID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJCW9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisJZmkKKwkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKKwlkZXBsaWJzPSRuZXdkZXBsaWJzCisgICAgICBmaQorICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgY2FzZSAkaG9zdCBpbgorCSotKi1kYXJ3aW4qKQorCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICA7OworICAgICAgZXNhYworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSRuZXdfbGlicworCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJIyBSZW1vdmUgJHdsIGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKwkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCisJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisJICAqXCRMRFwgKikgd2w9IDs7CisgICAgICAgIGVzYWMKKwlpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfaW50b19saWJzIjsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSRmaW5hbGl6ZV9ycGF0aAorCSAgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBycGF0aD0kY29tcGlsZV9ycGF0aCRycGF0aAorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKwkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0kaGFyZGNvZGVfbGliZGlycworCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9JGZpbmFsaXplX3NobGlicGF0aAorCXRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgc2hsaWJwYXRoPSRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXNoaWZ0CisJcmVhbG5hbWU9JDEKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0kcmVhbG5hbWUKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9JG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lCisJbGlua25hbWVzPQorCWZvciBsaW5rCisJZG8KKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgZnVuY19kbGxfZGVmX3AgIiRleHBvcnRfc3ltYm9scyIgfHwgeworCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIH0KKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKwkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCisJICAgICAgSUZTPSRzYXZlX2lmcworCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCisJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKwkJKn5mdW5jX2NvbnZlcnRfZmlsZV9ub29wIHwgKn5mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiB8IH4qKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorCQkgIGZ1bmNfbGVuICIgJGNtZCIKKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCQkgIDs7CisJCSopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkdHJ5X25vcm1hbF9icmFuY2giIFwKKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKwkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KKwkgICAgICB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorCQlvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5ubQorCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCisJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJCWRvbmUgPiAiJG91dHB1dCIKKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJb3V0cHV0PSRzYXZlX291dHB1dAorCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSRzYXZlX2lmcworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scworCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgeWVzID0gIiR0aHJlYWRfc2FmZSIgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisJZmkKKworCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRmaWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCI7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkb2JqbGlzdCIgfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAxIC1lcSAiJGsiOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAorCQkgIG9iamxpc3Q9IiAkb2JqIgorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRyZWxvYWRfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7CisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIH0KKworCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKworCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSRzYXZlX2lmcworCSAgICAgICRvcHRfcXVpZXQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0kc2F2ZV9pZnMKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgeworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMsIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgfQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0kc3AkbmwKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICBJRlM9JHNhdmVfaWZzCisJICAkb3B0X3F1aWV0IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0kc2F2ZV9pZnMKKworCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiIHx8IHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSRzb25hbWUKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICInLWwnIGFuZCAnLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKworCWxpYm9iaj0kb3V0cHV0CisJZnVuY19sbzJvICIkbGlib2JqIgorCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAorCTs7CisgICAgICAqKQorCWxpYm9iaj0KKwlvYmo9JG91dHB1dAorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgaWYgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIGdldCByaWQgb2YgLVdsIGZyb20KKyAgICAgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoIHR1cm5pbmcgY29tbWEKKyAgICAgICMgaW50byBzcGFjZS4KKyAgICAgIGNhc2UgJHJlbG9hZF9jbWRzIGluCisgICAgICAgICpcJExEW1wgXCRdKikgd2w9IDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICB0ZXN0IC1uICIkd2wiIHx8IHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPWAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcICR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncworCWVsc2UKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke29ian14CisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IGxpYm9ianM9JG5vbl9waWNfb2JqZWN0cworCisgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgIHJlbG9hZF9vYmpzPSRvYmpzJG9sZF9kZXBsaWJzJyAnYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAnICckcmVsb2FkX2NvbnZfb2JqcworCisgICAgICBvdXRwdXQ9JG9iagorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgeworCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIH0KKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0IGRlZmF1bHQgIT0gIiRwaWNfbW9kZSI7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9JGxpYm9iagorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgJHByZWxvYWQgXAorCSYmIHRlc3QgdW5rbm93bix1bmtub3duLHVua25vd24gPSAiJGRsb3Blbl9zdXBwb3J0LCRkbG9wZW5fc2VsZiwkZGxvcGVuX3NlbGZfc3RhdGljIiBcCisJJiYgZnVuY193YXJuaW5nICInTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0IENYWCA9ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSRuZXdfbGlicworCisKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRsaWJkaXIiIHwgJFNFRCAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0kcnBhdGgKKworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0kcnBhdGgKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgZmFsc2UKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9OgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQorICAgICAgICA7OworICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfcmVsaW5rIiB8fCB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgJHdyYXBwZXJzX3JlcXVpcmVkIHx8IHsKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0kY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiRvYmpleHQiJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgfQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJG5vX2luc3RhbGwiOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uLCRmYXN0X2luc3RhbGwgaW4KKyAgICAgICAgcmVsaW5rLCopCisJICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCisJICBmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCSAgZnVuY193YXJuaW5nICInJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorCSAgOzsKKyAgICAgICAgKix5ZXMpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKyAgICAgICAgICA7OworCSosbm8pCisJICBsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKyAgICAgICAgICA7OworCSosbmVlZGxlc3MpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0kb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYworCSAgICBjd3JhcHBlcj0kb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZQorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KKwkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKKwkgIDs7CisJZXNhYworICAgICAgfQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbgorICAgICAgICBjb252ZW5pZW5jZSkKKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJICBhZGRsaWJzPSRjb252ZW5pZW5jZQorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICA7OworCW1vZHVsZSkKKwkgIG9sZG9ianM9JGxpYm9ianNfc2F2ZQorCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgICAgICA7OworCSopCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgICRwcmVsb2FkICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIiBcCisJICAgICYmIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKwkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBmb3Igb2JqIGluICRvbGRvYmpzCisJICBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIjsgdGhlbgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAteiAiJG9sZG9ianMiOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgJiYgb2xkX2xpYnJhcnk9JGxpYm5hbWUuJGxpYmV4dAorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCBcIiRwcm9ncGF0aFwiICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1pCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgLUwqKQorCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAtUiopCisJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKwkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKKwkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCisJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAorCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQorCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRiaW5kaXIiOyB0aGVuCisJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8kZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSckdGRsbmFtZScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbm5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0IG5vLHllcyA9ICIkaW5zdGFsbGVkLCRuZWVkX3JlbGluayI7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworaWYgdGVzdCBsaW5rID0gIiRvcHRfbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KK2ZpCisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIFJNPSRub25vcHQKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPWZhbHNlCisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYworCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPTogOzsKKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBpZiB0ZXN0IC4gPSAiJGRpciI7IHRoZW4KKwlvZGlyPSRvYmpkaXIKKyAgICAgIGVsc2UKKwlvZGlyPSRkaXIvJG9iamRpcgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgb2Rpcj0kZGlyCisKKyAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2RpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmICRybWZvcmNlOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9JGZpbGUKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCisKKwkgIGNhc2UgJG9wdF9tb2RlIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICckcm1mb3JjZSB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqKQorCWlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorCSAgbm9leGVuYW1lPSRuYW1lCisJICBjYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKwkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4kb2JqZXh0IgorCSAgICBpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5vZXhlbmFtZS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICRvYmpkaXIncyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCitpZiB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiIHx8IHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorZmkKKwordGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgIGhlbHA9JGdlbmVyaWNfaGVscAorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlICckb3B0X21vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgd2hlcmUgd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvbWtpbnN0YWxsZGlycyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC9ta2luc3RhbGxkaXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmN2UxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvbWtpbnN0YWxsZGlycwpAQCAtMCwwICsxLDE2MSBAQAorIyEgL2Jpbi9zaAorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKworc2NyaXB0dmVyc2lvbj0yMDA2LTA1LTExLjE5CisKKyMgT3JpZ2luYWwgYXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKyMgUHVibGljIGRvbWFpbi4KKyMKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorZXJyc3RhdHVzPTAKK2Rpcm1vZGU9CisKK3VzYWdlPSJcCitVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisKK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCitsZWFkaW5nIGZpbGUgbmFtZSBjb21wb25lbnRzLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLWggfCAtLWhlbHAgfCAtLWgqKSAgICAgICAgICMgLWggZm9yIGhlbHAKKyAgICAgIGVjaG8gIiR1c2FnZSIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLW0pICAgICAgICAgICAgICAgICAgICAgICAgICMgLW0gUEVSTSBhcmcKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICQjIC1lcSAwICYmIHsgZWNobyAiJHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKyAgICAgIGRpcm1vZGU9JDEKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC0tdmVyc2lvbikKKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtLSkgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICBzaGlmdAorICAgICAgYnJlYWsKKyAgICAgIDs7CisgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKyAgICAgIGVjaG8gIiR1c2FnZSIgMT4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IG5vbi1vcHQgYXJnCisgICAgICBicmVhaworICAgICAgOzsKKyAgZXNhYworZG9uZQorCitmb3IgZmlsZQorZG8KKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisgICAgc2hpZnQKKyAgZWxzZQorICAgIGJyZWFrCisgIGZpCitkb25lCisKK2Nhc2UgJCMgaW4KKyAgMCkgZXhpdCAwIDs7Citlc2FjCisKKyMgU29sYXJpcyA4J3MgbWtkaXIgLXAgaXNuJ3QgdGhyZWFkLXNhZmUuICBJZiB5b3UgbWtkaXIgLXAgYS9iIGFuZAorIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKyMgb25lIHdpbGwgY3JlYXRlIGEsIHRoZW4gdGhlIG90aGVyIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIGFuZCBkaWUgd2l0aAorIyBhICJGaWxlIGV4aXN0cyIgZXJyb3IuICBUaGlzIGlzIGEgcHJvYmxlbSB3aGVuIGNhbGxpbmcgbWtpbnN0YWxsZGlycworIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisjIG91cnNlbHZlcyB0byBHTlUgbWtkaXIsIHdoaWNoIGlzIHRocmVhZC1zYWZlLgorY2FzZSAkZGlybW9kZSBpbgorICAnJykKKyAgICBpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorICAgIGVsc2UKKyAgICAgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKyAgICAgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisgICAgICAjIGV4aXN0cy4KKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGlmIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtbSAkZGlybW9kZSAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBDbGVhbiB1cCBhZnRlciBOZXh0U3RlcCBhbmQgT3BlblN0ZXAgbWtkaXIuCisgICAgICBmb3IgZCBpbiAuLy1tIC4vLXAgLi8tLXZlcnNpb24gIi4vJGRpcm1vZGUiOworICAgICAgZG8KKyAgICAgICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAorICAgICAgZG9uZQorICAgIGZpCisgICAgOzsKK2VzYWMKKworZm9yIGZpbGUKK2RvCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvKikgcGF0aGNvbXA9LyA7OworICAgICopICBwYXRoY29tcD0gOzsKKyAgZXNhYworICBvSUZTPSRJRlMKKyAgSUZTPS8KKyAgc2V0IGZub3JkICRmaWxlCisgIHNoaWZ0CisgIElGUz0kb0lGUworCisgIGZvciBkCisgIGRvCisgICAgdGVzdCAieCRkIiA9IHggJiYgY29udGludWUKKworICAgIHBhdGhjb21wPSRwYXRoY29tcCRkCisgICAgY2FzZSAkcGF0aGNvbXAgaW4KKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIgorCisgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKyAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorCWVycnN0YXR1cz0kbGFzdGVycgorICAgICAgZWxzZQorCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisJICBlY2hvICJjaG1vZCAkZGlybW9kZSAkcGF0aGNvbXAiCisJICBsYXN0ZXJyPQorCSAgY2htb2QgIiRkaXJtb2RlIiAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKwkgIGlmIHRlc3QgISAteiAiJGxhc3RlcnIiOyB0aGVuCisJICAgIGVycnN0YXR1cz0kbGFzdGVycgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wLworICBkb25lCitkb25lCisKK2V4aXQgJGVycnN0YXR1cworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvcGtnLm00IGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3BrZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZmODRjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3BrZy5tNApAQCAtMCwwICsxLDE5OSBAQAorIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBzZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQorIyAKKyMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19QUk9HX1BLR19DT05GSUddLAorW200X3BhdHRlcm5fZm9yYmlkKFteXz9QS0dfW0EtWl9dKyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUcoXyhQQVRIfExJQkRJUnxTWVNST09UX0RJUnxBTExPV19TWVNURU1fKENGTEFHU3xMSUJTKSkpPyRdKQorbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUdfKERJU0FCTEVfVU5JTlNUQUxMRUR8VE9QX0JVSUxEX0RJUnxERUJVR19TUEVXKSRdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eV0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX1BBVEhdLCBbZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHX0xJQkRJUl0sIFtwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoXSkKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorZmlbXWRubAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKworIyBQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuICBTaW1pbGFyCisjIHRvIFBLR19DSEVDS19NT0RVTEVTKCksIGJ1dCBkb2VzIG5vdCBzZXQgdmFyaWFibGVzIG9yIHByaW50IGVycm9ycy4KKyMKKyMgUGxlYXNlIHJlbWVtYmVyIHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyMgb25seSBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIGNvbmZpZ3VyZS5hYywgc28gaWYgdGhlIGZpcnN0IHBsYWNlCisjIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMgd2l0aGluIGFuICJpZiIsIHlvdQorIyBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbG4oWyQzXSwgW2Vsc2UKKyAgJDNdKWRubAorZmldKQorCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICBwa2dfY3ZfW10kMT0iJCQxIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJDNdLAorICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzIF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBlbHNlIAorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiQkMVtdX1BLR19FUlJPUlMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKworCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19FUlJPUigKK1tQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKKworJCQxX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitfUEtHX1RFWFRdKVtdZG5sCisgICAgICAgIF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0ZBSUxVUkUoCitbVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK19QS0dfVEVYVAorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKVtdZG5sCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCisKKworIyBQS0dfSU5TVEFMTERJUihESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIHBrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYSBtb2R1bGUKKyMgc2hvdWxkIGluc3RhbGwgcGtnLWNvbmZpZyAucGMgZmlsZXMuIEJ5IGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBpcworIyAkbGliZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHBhc3NpbmcKKyMgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUgLS13aXRoLXBrZ2NvbmZpZ2RpcgorIyBwYXJhbWV0ZXIuCitBQ19ERUZVTihbUEtHX0lOU1RBTExESVJdLAorW200X3B1c2hkZWYoW3BrZ19kZWZhdWx0XSwgW200X2RlZmF1bHQoWyQxXSwgWycke2xpYmRpcn0vcGtnY29uZmlnJ10pXSkKK200X3B1c2hkZWYoW3BrZ19kZXNjcmlwdGlvbl0sCisgICAgW3BrZy1jb25maWcgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBAPDpAXXBrZ19kZWZhdWx0W0A6PkBdKQorQUNfQVJHX1dJVEgoW3BrZ2NvbmZpZ2Rpcl0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGtnY29uZmlnZGlyXSwgcGtnX2Rlc2NyaXB0aW9uKV0sLAorICAgIFt3aXRoX3BrZ2NvbmZpZ2Rpcj1dcGtnX2RlZmF1bHQpCitBQ19TVUJTVChbcGtnY29uZmlnZGlyXSwgWyR3aXRoX3BrZ2NvbmZpZ2Rpcl0pCittNF9wb3BkZWYoW3BrZ19kZWZhdWx0XSkKK200X3BvcGRlZihbcGtnX2Rlc2NyaXB0aW9uXSkKK10pIGRubCBQS0dfSU5TVEFMTERJUgorCisKKyMgUEtHX05PQVJDSF9JTlNUQUxMRElSKERJUkVDVE9SWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgbm9hcmNoX3BrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYQorIyBtb2R1bGUgc2hvdWxkIGluc3RhbGwgYXJjaC1pbmRlcGVuZGVudCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkKKyMgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzICRkYXRhZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZQorIyBjaGFuZ2VkIGJ5IHBhc3NpbmcgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUKKyMgLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXIgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19OT0FSQ0hfSU5TVEFMTERJUl0sCitbbTRfcHVzaGRlZihbcGtnX2RlZmF1bHRdLCBbbTRfZGVmYXVsdChbJDFdLCBbJyR7ZGF0YWRpcn0vcGtnY29uZmlnJ10pXSkKK200X3B1c2hkZWYoW3BrZ19kZXNjcmlwdGlvbl0sCisgICAgW3BrZy1jb25maWcgYXJjaC1pbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IEA8OkBdcGtnX2RlZmF1bHRbQDo+QF0pCitBQ19BUkdfV0lUSChbbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyPV1wa2dfZGVmYXVsdCkKK0FDX1NVQlNUKFtub2FyY2hfcGtnY29uZmlnZGlyXSwgWyR3aXRoX25vYXJjaF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKSBkbmwgUEtHX05PQVJDSF9JTlNUQUxMRElSCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1jYy5pbiBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC91bml4LWNjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2IyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1jYy5pbgpAQCAtMCwwICsxLDExNCBAQAorIworIyBGcmVlVHlwZSAyIHRlbXBsYXRlIGZvciBVbml4LXNwZWNpZmljIGNvbXBpbGVyIGRlZmluaXRpb25zCisjCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworQ0MgICAgICAgICAgIDo9IEBDQ0AKK0NPTVBJTEVSX1NFUCA6PSAkKFNFUCkKK0ZUX0xJQlRPT0xfRElSID89ICQoQlVJTERfRElSKQorCitMSUJUT09MIDo9ICQoRlRfTElCVE9PTF9ESVIpL2xpYnRvb2wKKworCisjIFRoZSBvYmplY3QgZmlsZSBleHRlbnNpb24gKGZvciBzdGFuZGFyZCBhbmQgc3RhdGljIGxpYnJhcmllcykuICBUaGlzIGNhbiBiZQorIyAubywgLnRjbywgLm9iaiwgZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMKK08gIDo9IGxvCitTTyA6PSBvCisKKworIyBUaGUgZXhlY3V0YWJsZSBmaWxlIGV4dGVuc2lvbi4gIEFsdGhvdWdoIG1vc3QgVW5peCBwbGF0Zm9ybXMgdXNlIG5vCisjIGV4dGVuc2lvbiwgd2UgY29weSB0aGUgZXh0ZW5zaW9uIGRldGVjdGVkIGJ5IGF1dG9jb25mLiAgVXNlZnVsIGZvciBjcm9zcworIyBidWlsZGluZyBvbiBVbml4IHN5c3RlbXMgZm9yIG5vbi1Vbml4IHN5c3RlbXMuCisjCitFIDo9IEBFWEVFWFRACisKKworIyBUaGUgbGlicmFyeSBmaWxlIGV4dGVuc2lvbiAoZm9yIHN0YW5kYXJkIGFuZCBzdGF0aWMgbGlicmFyaWVzKS4gIFRoaXMgY2FuCisjIGJlIC5hLCAubGliLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorIworQSAgOj0gbGEKK1NBIDo9IGEKKworCisjIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5IGZpbGUuICBOb3RlIHRoYXQgdGhlIERPUy1zcGVjaWZpYyBNYWtlZmlsZQorIyB1c2VzIGEgc2hvcnRlciAoOC4zKSBuYW1lLgorIworTElCUkFSWSA6PSBsaWIkKFBST0pFQ1QpCisKKworIyBQYXRoIGluY2x1c2lvbiBmbGFnLiAgU29tZSBjb21waWxlcnMgdXNlIGEgZGlmZmVyZW50IGZsYWcgdGhhbiBgLUknIHRvCisjIHNwZWNpZnkgYW4gYWRkaXRpb25hbCBpbmNsdWRlIHBhdGguICBFeGFtcGxlcyBhcmUgYC9pPScgb3IgYC1KJy4KKyMKK0kgOj0gLUkKKworCisjIEMgZmxhZyB1c2VkIHRvIGRlZmluZSBhIG1hY3JvIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gb2YgYSBnaXZlbiBzb3VyY2UKKyMgb2JqZWN0LiAgVXN1YWxseSBpdCBpcyBgLUQnIGxpa2UgaW4gYC1EREVCVUcnLgorIworRCA6PSAtRAorCisKKyMgVGhlIGxpbmsgZmxhZyB1c2VkIHRvIHNwZWNpZnkgYSBnaXZlbiBsaWJyYXJ5IGZpbGUgb24gbGluay4gIE5vdGUgdGhhdAorIyB0aGlzIGlzIG9ubHkgdXNlZCB0byBjb21waWxlIHRoZSBkZW1vIHByb2dyYW1zLCBub3QgdGhlIGxpYnJhcnkgaXRzZWxmLgorIworTCA6PSAtbAorCisKKyMgVGFyZ2V0IGZsYWcuCisjCitUIDo9IC1vJChzcGFjZSkKKworCisjIEMgZmxhZ3MKKyMKKyMgICBUaGVzZSBzaG91bGQgY29uY2VybjogZGVidWcgb3V0cHV0LCBvcHRpbWl6YXRpb24gJiB3YXJuaW5ncy4KKyMKKyMgICBVc2UgdGhlIEFOU0lGTEFHUyB2YXJpYWJsZSB0byBkZWZpbmUgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gZW5mb3JlCisjICAgQU5TSSBjb21wbGlhbmNlLgorIworIyAgIFdlIHVzZSBvdXIgb3duIEZyZWVUeXBlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyMKK0NQUEZMQUdTIDo9IEBDUFBGTEFHU0AKK0NGTEFHUyAgIDo9IC1jIEBYWF9DRkxBR1NAIEBDRkxBR1NAIC1ERlRfQ09ORklHX0NPTkZJR19IPSI8ZnRjb25maWcuaD4iCisKKyMgQU5TSUZMQUdTOiBQdXQgdGhlcmUgdGhlIGZsYWdzIHVzZWQgdG8gbWFrZSB5b3VyIGNvbXBpbGVyIEFOU0ktY29tcGxpYW50LgorIworQU5TSUZMQUdTIDo9IEBYWF9BTlNJRkxBR1NACisKKyMgQyBjb21waWxlciB0byB1c2UgLS0gd2UgdXNlIGxpYnRvb2whCisjCisjCitDQ3JhdyA6PSAkKENDKQorQ0MgICAgOj0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDcmF3KQorCisjIExpbmtlciBmbGFncy4KKyMKK0xERkxBR1MgOj0gQExERkxBR1NACisKKworIyBleHBvcnQgc3ltYm9scworIworQ0NyYXdfYnVpbGQgIDo9IEBDQ19CVUlMREAJIyBuYXRpdmUgQ0Mgb2YgYnVpbGRpbmcgc3lzdGVtCitFX0JVSUxEICAgICAgOj0gQEVYRUVYVF9CVUlMREAJIyBleHRlbnNpb24gZm9yIGV4ZXh1dGFibGUgb24gYnVpbGRpbmcgc3lzdGVtCitFWFBPUlRTX0xJU1QgOj0gJChPQkpfRElSKS9mdGV4cG9ydC5zeW0KK0NDZXhlICAgICAgICA6PSAkKENDcmF3X2J1aWxkKQkjIHVzZWQgdG8gY29tcGlsZSBgYXBpbmFtZXMnIG9ubHkKKworCisjIExpYnJhcnkgbGlua2luZworIworTElOS19MSUJSQVJZID0gJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDcmF3KSAtbyAkQCAkKE9CSkVDVFNfTElTVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAtcnBhdGggJChsaWJkaXIpIC12ZXJzaW9uLWluZm8gJCh2ZXJzaW9uX2luZm8pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJChMREZMQUdTKSAtbm8tdW5kZWZpbmVkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtZXhwb3J0LXN5bWJvbHMgJChFWFBPUlRTX0xJU1QpCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5ZmQxZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC91bml4LWRlZi5pbgpAQCAtMCwwICsxLDE0OCBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgdGVtcGxhdGVzIGZvciBVbml4ICsgY29uZmlndXJlCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU0hFTEwgOj0gQFNIRUxMQAorCitUT1BfRElSIDo9ICQoc2hlbGwgY2QgJChUT1BfRElSKTsgcHdkKQorCitERUxFVEUgOj0gcm0gLWYKK0RFTERJUiA6PSBAUk1ESVJACitDQVQgICAgOj0gY2F0CitTRVAgICAgOj0gLworCisjIHRoaXMgaXMgdXNlZCBmb3IgYG1ha2UgZGlzdGNsZWFuJyBhbmQgYG1ha2UgaW5zdGFsbCcKK09CSl9CVUlMRCA/PSAkKEJVSUxEX0RJUikKKworIyBkb24ndCB1c2UgYDo9JyBoZXJlIHNpbmNlIHRoZSBwYXRoIHN0dWZmIHdpbGwgYmUgaW5jbHVkZWQgYWZ0ZXIgdGhpcyBmaWxlCisjCitGVFNZU19TUkMgPSBARlRTWVNfU1JDQAorCitJTlNUQUxMICAgICAgICAgOj0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgICAgOj0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA6PSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgIDo9IEBJTlNUQUxMX1NDUklQVEAKK01LSU5TVEFMTERJUlMgICA6PSAkKEJVSUxEX0RJUikvbWtpbnN0YWxsZGlycworCitDTEVBTiArPSAkKE9CSl9CVUlMRCkvZnJlZXR5cGUtY29uZmlnIFwKKyAgICAgICAgICQoT0JKX0JVSUxEKS9mcmVldHlwZTIucGMKKworRElTVENMRUFOICs9ICQoT0JKX0JVSUxEKS9jb25maWcuY2FjaGUgIFwKKyAgICAgICAgICAgICAkKE9CSl9CVUlMRCkvY29uZmlnLmxvZyAgICBcCisgICAgICAgICAgICAgJChPQkpfQlVJTEQpL2NvbmZpZy5zdGF0dXMgXAorICAgICAgICAgICAgICQoT0JKX0JVSUxEKS91bml4LWRlZi5tayAgIFwKKyAgICAgICAgICAgICAkKE9CSl9CVUlMRCkvdW5peC1jYy5tayAgICBcCisgICAgICAgICAgICAgJChPQkpfQlVJTEQpL2Z0Y29uZmlnLmggICAgXAorICAgICAgICAgICAgICQoTElCVE9PTCkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAkKE9CSl9CVUlMRCkvTWFrZWZpbGUKKworCisjIFN0YW5kYXJkIGluc3RhbGxhdGlvbiB2YXJpYWJsZXMuCisjCitwcmVmaXggICAgICAgOj0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ICA6PSBAZXhlY19wcmVmaXhACitsaWJkaXIgICAgICAgOj0gQGxpYmRpckAKK2JpbmRpciAgICAgICA6PSBAYmluZGlyQAoraW5jbHVkZWRpciAgIDo9IEBpbmNsdWRlZGlyQAorZGF0YXJvb3RkaXIgIDo9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgICAgICA6PSBAZGF0YWRpckAKK21hbmRpciAgICAgICA6PSBAbWFuZGlyQAorCit2ZXJzaW9uX2luZm8gOj0gQHZlcnNpb25faW5mb0AKKworIyBWYXJpYWJsZXMgbmVlZGVkIGZvciBgZnJlZXR5cGUtY29uZmlnJyBhbmQgYGZyZWV0eXBlLnBjJy4KKyMKK1JFUVVJUkVTX1BSSVZBVEUgICA6PSBAUkVRVUlSRVNfUFJJVkFURUAKK0xJQlNfUFJJVkFURSAgICAgICA6PSBATElCU19QUklWQVRFQAorTElCU1NUQVRJQ19DT05GSUcgIDo9IEBMSUJTU1RBVElDX0NPTkZJR0AKK2J1aWxkX2xpYnRvb2xfbGlicyA6PSBAYnVpbGRfbGlidG9vbF9saWJzQAorZnRfdmVyc2lvbiAgICAgICAgIDo9IEBmdF92ZXJzaW9uQAorCisjIFRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxpYnJhcnkgZmlsZXMgYXJlIHBsYWNlZC4KKyMKKyMgQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgc2FtZSBhcyAkKE9CSl9ESVIpOyBob3dldmVyLCB0aGlzIGNhbiBiZSBjaGFuZ2VkCisjIHRvIHN1aXQgcGFydGljdWxhciBuZWVkcy4KKyMKK0xJQl9ESVIgOj0gJChPQkpfRElSKQorCisjIFRoZSBCQVNFX1NSQyBtYWNybyBsaXN0cyBhbGwgc291cmNlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluCisjIHNyYy9iYXNlL2Z0YmFzZS5jLiAgV2hlbiBjb25maWd1cmUgc2V0cyB1cCBDRkxBR1MgdG8gYnVpbGQgZnRtYWMuYywKKyMgZnRtYWMuYyBzaG91bGQgYmUgYWRkZWQgdG8gQkFTRV9TUkMuCitmdG1hY19jIDo9IEBmdG1hY19jQAorCisjIFRoZSBTWVNURU1fWkxJQiBtYWNybyBpcyBkZWZpbmVkIGlmIHRoZSB1c2VyIHdpc2hlcyB0byBsaW5rIGR5bmFtaWNhbGx5CisjIHdpdGggaXRzIHN5c3RlbSB3aWRlIHpsaWIuIElmIFNZU1RFTV9aTElCIGlzICd5ZXMnLCB0aGUgemxpYiBwYXJ0IG9mIHRoZQorIyBmdGd6aXAgbW9kdWxlIGlzIG5vdCBjb21waWxlZCBpbi4KK1NZU1RFTV9aTElCIDo9IEBTWVNURU1fWkxJQkAKKworCisjIFRoZSBOT19PVVRQVVQgbWFjcm8gaXMgYXBwZW5kZWQgdG8gY29tbWFuZCBsaW5lcyBpbiBvcmRlciB0byBpZ25vcmUKKyMgdGhlIG91dHB1dCBvZiBzb21lIHByb2dyYW1zLgorIworTk9fT1VUUFVUIDo9IDI+IC9kZXYvbnVsbAorCisKKyMgVG8gc3VwcG9ydCBjYWxscyBsaWtlCisjCisjICAgY29uZmlndXJlIC0taW5jbHVkZWRpcj0nJHtsaWJkaXJ9Jy9mcmVldHlwZTIvaW5jbHVkZQorIworIyB3ZSBnZW5lcmF0ZSBgZnJlZXR5cGUtY29uZmlnJyBhbmQgYGZyZWV0eXBlLnBjJyBhdCBjb21waWxlIHRpbWUgc28gdGhhdAorIyB0aG9zZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGV4cGFuZGVkLgorCiskKE9CSl9CVUlMRCkvZnJlZXR5cGUtY29uZmlnOiAkKFRPUF9ESVIpL2J1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbgorCXJtIC1mICRAICRALnRtcAorCXNlZCAtZSAnc3wlTElCU1NUQVRJQ19DT05GSUclfCQoTElCU1NUQVRJQ19DT05GSUcpfCcgICBcCisJICAgIC1lICdzfCVidWlsZF9saWJ0b29sX2xpYnMlfCQoYnVpbGRfbGlidG9vbF9saWJzKXwnIFwKKwkgICAgLWUgJ3N8JWV4ZWNfcHJlZml4JXwkKGV4ZWNfcHJlZml4KXwnICAgICAgICAgICAgICAgXAorCSAgICAtZSAnc3wlZnRfdmVyc2lvbiV8JChmdF92ZXJzaW9uKXwnICAgICAgICAgICAgICAgICBcCisJICAgIC1lICdzfCVpbmNsdWRlZGlyJXwkKGluY2x1ZGVkaXIpfCcgICAgICAgICAgICAgICAgIFwKKwkgICAgLWUgJ3N8JWxpYmRpciV8JChsaWJkaXIpfCcgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAtZSAnc3wlcHJlZml4JXwkKHByZWZpeCl8JyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICQ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgPiAkQC50bXAKKwljaG1vZCAreCAkQC50bXAKKwljaG1vZCBhLXcgJEAudG1wCisJbXYgJEAudG1wICRACisKKyMgVG8gc3VwcG9ydCBkaXJlY3RvcnkgbmFtZXMgd2l0aCBzcGFjZXMgKGFzIG1pZ2h0IGVhc2lseSBoYXBwZW4gb24gV2luZG93cworIyBwbGF0Zm9ybXMpLCB0aGUgcmlnaHQgc29sdXRpb24gd291bGQgYmUgdG8gc3Vycm91bmQgdGhlIHBrZy12YXJpYWJsZXMgaW4KKyMgYGZyZWV0eXBlMi5wYycgd2l0aCBkb3VibGUgcXVvdGVzLiAgSG93ZXZlciwgZG9pbmcgc28gaXJvbmljYWxseSBkaXNhYmxlcworIyB0aGUgcHJlZml4IG92ZXJyaWRlIG1lY2hhbmlzbSBlc3BlY2lhbGx5IHdyaXR0ZW4gZm9yIFdpbmRvd3MuICBUaGlzIGlzIGEKKyMgYnVnIGluIHBrZy1jb25maWcgdmVyc2lvbiAwLjI4IGFuZCBlYXJsaWVyLgorIworIyBGb3IgdGhpcyByZWFzb24sIHdlIGVzY2FwZSBzcGFjZXMgd2l0aCBiYWNrc2xhc2hlcy4KKworZXhlY19wcmVmaXhfeCA6PSAkKHN1YnN0ICQoc3BhY2UpLFxcJChzcGFjZSksJChleGVjX3ByZWZpeCkpCitpbmNsdWRlZGlyX3ggIDo9ICQoc3Vic3QgJChzcGFjZSksXFwkKHNwYWNlKSwkKGluY2x1ZGVkaXIpKQorbGliZGlyX3ggICAgICA6PSAkKHN1YnN0ICQoc3BhY2UpLFxcJChzcGFjZSksJChsaWJkaXIpKQorcHJlZml4X3ggICAgICA6PSAkKHN1YnN0ICQoc3BhY2UpLFxcJChzcGFjZSksJChwcmVmaXgpKQorCiskKE9CSl9CVUlMRCkvZnJlZXR5cGUyLnBjOiAkKFRPUF9ESVIpL2J1aWxkcy91bml4L2ZyZWV0eXBlMi5pbgorCXJtIC1mICRAICRALnRtcAorCXNlZCAtZSAnc3wlUkVRVUlSRVNfUFJJVkFURSV8JChSRVFVSVJFU19QUklWQVRFKXwnICAgICBcCisJICAgIC1lICdzfCVMSUJTX1BSSVZBVEUlfCQoTElCU19QUklWQVRFKXwnICAgICAgICAgICAgIFwKKwkgICAgLWUgJ3N8JWJ1aWxkX2xpYnRvb2xfbGlicyV8JChidWlsZF9saWJ0b29sX2xpYnMpfCcgXAorCSAgICAtZSAnc3wlZXhlY19wcmVmaXglfCQoZXhlY19wcmVmaXhfeCl8JyAgICAgICAgICAgICBcCisJICAgIC1lICdzfCVmdF92ZXJzaW9uJXwkKGZ0X3ZlcnNpb24pfCcgICAgICAgICAgICAgICAgIFwKKwkgICAgLWUgJ3N8JWluY2x1ZGVkaXIlfCQoaW5jbHVkZWRpcl94KXwnICAgICAgICAgICAgICAgXAorCSAgICAtZSAnc3wlbGliZGlyJXwkKGxpYmRpcl94KXwnICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIC1lICdzfCVwcmVmaXglfCQocHJlZml4X3gpfCcgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgJDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICA+ICRALnRtcAorCWNobW9kIGEtdyAkQC50bXAKKwltdiAkQC50bXAgJEAKKworYWxsOiAkKE9CSl9CVUlMRCkvZnJlZXR5cGUtY29uZmlnIFwKKyAgICAgJChPQkpfQlVJTEQpL2ZyZWV0eXBlMi5wYworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXgtZGV2Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXgtZGV2Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZGUzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1kZXYubWsKQEAgLTAsMCArMSwyNiBAQAorIworIyBGcmVlVHlwZSAyIENvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIFVuaXggKyBHQ0MKKyMKKyMgICBEZXZlbG9wbWVudCB2ZXJzaW9uIHdpdGhvdXQgb3B0aW1pemF0aW9ucyAmIGxpYnRvb2wKKyMgICBhbmQgbm8gaW5zdGFsbGF0aW9uLgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworREVWRUxfRElSIDo9ICQoVE9QX0RJUikvZGV2ZWwKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19zdGQubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXgtbGNjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXgtbGNjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOGNjODAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peC1sY2MubWsKQEAgLTAsMCArMSwyNCBAQAorIworIyBGcmVlVHlwZSAyIENvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIFVuaXggKyBMQ0MKKyMKKyMgICBEZXZlbG9wbWVudCB2ZXJzaW9uIHdpdGhvdXQgb3B0aW1pemF0aW9ucyAmIGxpYnRvb2wKKyMgICBhbmQgbm8gaW5zdGFsbGF0aW9uLgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfc3RkLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC91bml4Lm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXgubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyYWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdW5peC91bml4Lm1rCkBAIC0wLDAgKzEsNjIgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBVTklYIHBsYXRmb3JtcworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgV2UgbmVlZCB0aGVzZSBkZWNsYXJhdGlvbnMgaGVyZSBzaW5jZSB1bml4LWRlZi5tayBpcyBhIGdlbmVyYXRlZCBmaWxlLgorQlVJTERfRElSIDo9ICQoVE9QX0RJUikvYnVpbGRzL3VuaXgKK1BMQVRGT1JNICA6PSB1bml4CisKK2hhdmVfbWsgOj0gJCh3aWxkY2FyZCAkKE9CSl9ESVIpL3VuaXgtZGVmLm1rKQoraWZuZXEgKCQoaGF2ZV9tayksKQorICAjIFdlIGFyZSBidWlsZGluZyBGcmVlVHlwZSAyIG5vdCBpbiB0aGUgc3JjIHRyZWUuCisgIGluY2x1ZGUgJChPQkpfRElSKS91bml4LWRlZi5taworICBpbmNsdWRlICQoT0JKX0RJUikvdW5peC1jYy5taworZWxzZQorICBpbmNsdWRlICQoQlVJTERfRElSKS91bml4LWRlZi5taworICBpbmNsdWRlICQoQlVJTERfRElSKS91bml4LWNjLm1rCitlbmRpZgorCitpZmRlZiBCVUlMRF9QUk9KRUNUCisKKyAgLlBIT05ZOiBjbGVhbl9wcm9qZWN0IGRpc3RjbGVhbl9wcm9qZWN0CisKKyAgIyBOb3cgaW5jbHVkZSB0aGUgbWFpbiBzdWItbWFrZWZpbGUuICBJdCBjb250YWlucyBhbGwgdGhlIHJ1bGVzIHVzZWQgdG8KKyAgIyBidWlsZCB0aGUgbGlicmFyeSB3aXRoIHRoZSBwcmV2aW91cyB2YXJpYWJsZXMgZGVmaW5lZC4KKyAgIworICBpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzLyQoUFJPSkVDVCkubWsKKworCisgICMgVGhlIGNsZWFudXAgdGFyZ2V0cy4KKyAgIworICBjbGVhbl9wcm9qZWN0OiBjbGVhbl9wcm9qZWN0X3VuaXgKKyAgZGlzdGNsZWFuX3Byb2plY3Q6IGRpc3RjbGVhbl9wcm9qZWN0X3VuaXgKKworCisgICMgVGhpcyBmaW5hbCBydWxlIGlzIHVzZWQgdG8gbGluayBhbGwgb2JqZWN0IGZpbGVzIGludG8gYSBzaW5nbGUgbGlicmFyeS4KKyAgIyBJdCBpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0tc3BlY2lmaWMgc3ViLU1ha2VmaWxlIGJlY2F1c2Ugbm90IGFsbAorICAjIGxpYnJhcmlhbnMgYWNjZXB0IGEgc2ltcGxlIHN5bnRheCBsaWtlCisgICMKKyAgIyAgIGxpYnJhcmlhbiBsaWJyYXJ5X2ZpbGUge2xpc3Qgb2Ygb2JqZWN0IGZpbGVzfQorICAjCisgICAgJChQUk9KRUNUX0xJQlJBUlkpOiAkKE9CSkVDVFNfTElTVCkKKyAgaWZkZWYgQ0xFQU5fTElCUkFSWQorCSAgICAtJChDTEVBTl9MSUJSQVJZKSAkKE5PX09VVFBVVCkKKyAgZW5kaWYKKwkgICAgJChMSU5LX0xJQlJBUlkpCisKKyAgaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy91bml4L2luc3RhbGwubWsKKworZW5kaWYKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXhkZGVmLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzM2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3VuaXgvdW5peGRkZWYubWsKQEAgLTAsMCArMSw0NSBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgdGVtcGxhdGVzIGZvcgorIyBkZXZlbG9wbWVudCB1bmRlciBVbml4IHdpdGggbm8gY29uZmlndXJlIHNjcmlwdCAoZ2NjIG9ubHkpCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitUT1BfRElSIDo9ICQoc2hlbGwgY2QgJChUT1BfRElSKTsgcHdkKQorT0JKX0RJUiA6PSAkKHNoZWxsIGNkICQoT0JKX0RJUik7IHB3ZCkKKworUExBVEZPUk0gOj0gdW5peAorCitERUxFVEUgOj0gcm0gLWYKK0NBVCAgICA6PSBjYXQKK1NFUCAgICA6PSAvCisKKyMgd2UgdXNlIGEgc3BlY2lhbCBkZXZlbCBmdG9wdGlvbi5oCitERVZFTF9ESVIgOj0gJChUT1BfRElSKS9kZXZlbAorCisKKyMgbGlicmFyeSBmaWxlIG5hbWUKKyMKK0xJQlJBUlkgOj0gbGliJChQUk9KRUNUKQorCisKKyMgVGhlIGRpcmVjdG9yeSB3aGVyZSBhbGwgbGlicmFyeSBmaWxlcyBhcmUgcGxhY2VkLgorIworIyBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBzYW1lIGFzICQoT0JKX0RJUik7IGhvd2V2ZXIsIHRoaXMgY2FuIGJlIGNoYW5nZWQKKyMgdG8gc3VpdCBwYXJ0aWN1bGFyIG5lZWRzLgorIworTElCX0RJUiA6PSAkKE9CSl9ESVIpCisKKworTk9fT1VUUFVUIDo9IDI+IC9kZXYvbnVsbAorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy92bXMvZnRjb25maWcuaCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdm1zL2Z0Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmODk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvdm1zL2Z0Y29uZmlnLmgKQEAgLTAsMCArMSw0NDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBWTVMtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBhcmUgdXNlZCAqLworICAvKiBieSB0aGUgcmVzdCBvZiB0aGUgZW5naW5lLiAgTW9zdCBvZiB0aGUgbWFjcm9zIGhlcmUgYXJlIGF1dG9tYXRpY2FsbHkgKi8KKyAgLyogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsIGFuZCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZSBpdCB0byAgICovCisgIC8qIHBvcnQgRnJlZVR5cGUsIGV4Y2VwdCB0byBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggYSBub24tQU5TSSAgICAgICAgICAqLworICAvKiBjb21waWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGUgaG93ZXZlciB0aGF0IGlmIHNvbWUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkLCB3ZSAgICAgICAqLworICAvKiBhZHZpc2UgeW91IHRvIHBsYWNlIGEgbW9kaWZpZWQgY29weSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBidWlsZCBkaXJlY3RvcnkgaXMgdXN1YWxseSBgYnVpbGRzLzxzeXN0ZW0+JywgYW5kIGNvbnRhaW5zICAgICAgICAqLworICAvKiBzeXN0ZW0tc3BlY2lmaWMgZmlsZXMgdGhhdCBhcmUgYWx3YXlzIGluY2x1ZGVkIGZpcnN0IHdoZW4gYnVpbGRpbmcgICAgKi8KKyAgLyogdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0ZUQ09ORklHX0hfXworI2RlZmluZSBfX0ZUQ09ORklHX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19PUFRJT05TX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBQTEFURk9STS1TUEVDSUZJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVzZSBtYWNyb3MgY2FuIGJlIHRvZ2dsZWQgdG8gc3VpdCBhIHNwZWNpZmljIHN5c3RlbS4gIFRoZSBjdXJyZW50ICAgKi8KKyAgLyogb25lcyBhcmUgZGVmYXVsdHMgdXNlZCB0byBjb21waWxlIEZyZWVUeXBlIGluIGFuIEFOU0kgQyBlbnZpcm9ubWVudCAgICovCisgIC8qICgxNmJpdCBjb21waWxlcnMgYXJlIGFsc28gc3VwcG9ydGVkKS4gIENvcHkgdGhpcyBmaWxlIHRvIHlvdXIgb3duICAgICAqLworICAvKiBgYnVpbGRzLzxzeXN0ZW0+JyBkaXJlY3RvcnksIGFuZCBlZGl0IGl0IHRvIHBvcnQgdGhlIGVuZ2luZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAgMQorI2RlZmluZSBIQVZFX0ZDTlRMX0ggICAxCisKKyNkZWZpbmUgU0laRU9GX0lOVCAgIDQKKyNkZWZpbmUgU0laRU9GX0xPTkcgIDQKKworI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAgNAorI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgNAorCisjZGVmaW5lIEZUX0NIQVJfQklUICA4CisKKworICAvKiBGVF9VTlVTRUQgaXMgYSBtYWNybyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBnaXZlbiBwYXJhbWV0ZXIgaXMgbm90ICAqLworICAvKiB1c2VkIC0tIHRoaXMgaXMgb25seSB1c2VkIHRvIGdldCByaWQgb2YgdW5wbGVhc2FudCBjb21waWxlciB3YXJuaW5ncyAqLworI2lmbmRlZiBGVF9VTlVTRUQKKyNkZWZpbmUgRlRfVU5VU0VEKCBhcmcgKSAgKCAoYXJnKSA9IChhcmcpICkKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIEFVVE9NQVRJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZXNlIG1hY3JvcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgb25lcyBkZWZpbmVkIGFib3ZlLiAgRG9uJ3QgdG91Y2ggICAqLworICAvKiB0aGVpciBkZWZpbml0aW9uLCB1bmxlc3MgeW91IGtub3cgcHJlY2lzZWx5IHdoYXQgeW91IGFyZSBkb2luZy4gIE5vICAgKi8KKyAgLyogcG9ydGVyIHNob3VsZCBuZWVkIHRvIG1lc3Mgd2l0aCB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTWFjIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoaXMgaXMgdGhlIG9ubHkgbmVjZXNzYXJ5IGNoYW5nZSwgc28gaXQgaXMgZGVmaW5lZCBoZXJlIGluc3RlYWQgICAgKi8KKyAgLyogICBwcm92aWRpbmcgYSBuZXcgY29uZmlndXJhdGlvbiBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmIGRlZmluZWQoIF9fQVBQTEVfXyApIHx8ICggZGVmaW5lZCggX19NV0VSS1NfXyApICYmIGRlZmluZWQoIG1hY2ludG9zaCApICkKKyAgLyogbm8gQ2FyYm9uIGZyYW1ld29ya3MgZm9yIDY0Yml0IDEwLjQueCAqLworICAvKiBBdmFpbGFiaWxpdHlNYWNyb3MuaCBpcyBhdmFpbGFibGUgc2luY2UgTWFjIE9TIFggMTAuMiwgICAgICAgICovCisgIC8qIHNvIGd1ZXNzIHRoZSBzeXN0ZW0gdmVyc2lvbiBieSBtYXhpbXVtIGVycm5vIGJlZm9yZSBpbmNsdXNpb24gKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEVDQU5DRUxFRCAvKiBkZWZpbmVkIHNpbmNlIDEwLjIgKi8KKyNpbmNsdWRlICJBdmFpbGFiaWxpdHlNYWNyb3MuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoIF9fTFA2NF9fICkgJiYgXAorICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gTUFDX09TX1hfVkVSU0lPTl8xMF80ICkKKyN1bmRlZiBGVF9NQUNJTlRPU0gKKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkKCBfX1NDX18gKSB8fCBkZWZpbmVkKCBfX01SQ19fICkKKyAgLyogQ2xhc3NpYyBNYWNPUyBjb21waWxlcnMgKi8KKyNpbmNsdWRlICJDb25kaXRpb25hbE1hY3Jvcy5oIgorI2lmIFRBUkdFVF9PU19NQUMKKyNkZWZpbmUgRlRfTUFDSU5UT1NIIDEKKyNlbmRpZgorCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJhc2ljX3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIHNob3J0ICBGVF9JbnQxNjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VJbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgYSAxNmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVUludDE2OworCisgIC8qICovCisKKworICAvKiB0aGlzICNpZiAwIC4uLiAjZW5kaWYgY2xhdXNlIGlzIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzICovCisjaWYgMAorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgYSAzMmJpdCBzaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiAgICAqLworICAvKiAgICB0aGUgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIFhYWCAgRlRfSW50MzI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VSW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgYSAzMmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uICAqLworICAvKiAgICB0aGUgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50MzI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JbnQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgYSA2NGJpdCBzaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiAgICAqLworICAvKiAgICB0aGUgY29uZmlndXJhdGlvbi4gIE9ubHkgZGVmaW5lZCBpZiB0aGVyZSBpcyByZWFsIDY0Yml0IHN1cHBvcnQ7ICAgKi8KKyAgLyogICAgb3RoZXJ3aXNlLCBpdCBnZXRzIGVtdWxhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgKGlmIG5lY2Vzc2FyeSkuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDY0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUludDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OyAgICovCisgIC8qICAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBYWFggIEZUX1VJbnQ2NDsKKworICAvKiAqLworCisjZW5kaWYKKworI2lmIEZUX1NJWkVPRl9JTlQgPT0gKDMyIC8gRlRfQ0hBUl9CSVQpCisKKyAgdHlwZWRlZiBzaWduZWQgaW50ICAgICAgRlRfSW50MzI7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgIEZUX1VJbnQzMjsKKworI2VsaWYgRlRfU0laRU9GX0xPTkcgPT0gKDMyIC8gRlRfQ0hBUl9CSVQpCisKKyAgdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgRlRfSW50MzI7CisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIEZUX1VJbnQzMjsKKworI2Vsc2UKKyNlcnJvciAibm8gMzJiaXQgdHlwZSBmb3VuZCAtLSBwbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzIgorI2VuZGlmCisKKworICAvKiBsb29rIHVwIGFuIGludGVnZXIgdHlwZSB0aGF0IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNpZiBGVF9TSVpFT0ZfSU5UID49ICgzMiAvIEZUX0NIQVJfQklUKQorCisgIHR5cGVkZWYgaW50ICAgICAgICAgICAgRlRfRmFzdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICBGVF9VRmFzdDsKKworI2VsaWYgRlRfU0laRU9GX0xPTkcgPj0gKDMyIC8gRlRfQ0hBUl9CSVQpCisKKyAgdHlwZWRlZiBsb25nICAgICAgICAgICBGVF9GYXN0OworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEZUX1VGYXN0OworCisjZW5kaWYKKworCisgIC8qIGRldGVybWluZSB3aGV0aGVyIHdlIGhhdmUgYSA2NC1iaXQgaW50IHR5cGUgZm9yIHBsYXRmb3JtcyB3aXRob3V0ICovCisgIC8qIEF1dG9jb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgRlRfU0laRU9GX0xPTkcgPT0gKDY0IC8gRlRfQ0hBUl9CSVQpCisKKyAgLyogRlRfTE9ORzY0IG11c3QgYmUgZGVmaW5lZCBpZiBhIDY0LWJpdCB0eXBlIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBGVF9MT05HNjQKKyNkZWZpbmUgRlRfSU5UNjQgICBsb25nCisjZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSA2NC1iaXQgZGF0YSB0eXBlIG1heSBjcmVhdGUgY29tcGlsYXRpb24gcHJvYmxlbXMgaWYgeW91IGNvbXBpbGUgICAgICovCisgIC8qIGluIHN0cmljdCBBTlNJIG1vZGUuICBUbyBhdm9pZCB0aGVtLCB3ZSBkaXNhYmxlIG90aGVyIDY0LWJpdCBkYXRhICAgICAqLworICAvKiB0eXBlcyBpZiBfX1NURENfXyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGlnbm9yZSB0aGlzIHJ1bGUgICAgICAgKi8KKyAgLyogYnkgZGVmaW5pbmcgdGhlIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgY29uZmlndXJhdGlvbiBtYWNyby4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VsaWYgIWRlZmluZWQoIF9fU1REQ19fICkgfHwgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCApCisKKyNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICYmIF9NU0NfVkVSID49IDkwMCAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KKworICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBfX2ludDY0IHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgIC8qIEJvcmxhbmQgQysrICovCisKKyAgLyogWFhYWDogV2Ugc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSB2YWx1ZSBvZiBfX0JPUkxBTkRDX18gaW4gb3JkZXIgKi8KKyAgLyogICAgICAgdG8gdGVzdCB0aGUgY29tcGlsZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiB0aGlzIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBfX2ludDY0IHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgX19pbnQ2NAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIF9faW50NjQKKworI2VsaWYgZGVmaW5lZCggX19XQVRDT01DX18gKSAgIC8qIFdhdGNvbSBDKysgKi8KKworICAvKiBXYXRjb20gZG9lc24ndCBwcm92aWRlIDY0LWJpdCBkYXRhIHR5cGVzICovCisKKyNlbGlmIGRlZmluZWQoIF9fTVdFUktTX18gKSAgICAvKiBNZXRyb3dlcmtzIENvZGVXYXJyaW9yICovCisKKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKworI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKQorCisgIC8qIEdDQyBwcm92aWRlcyB0aGUgYGxvbmcgbG9uZycgdHlwZSAqLworI2RlZmluZSBGVF9MT05HNjQKKyNkZWZpbmUgRlRfSU5UNjQgICBsb25nIGxvbmcgaW50CisjZGVmaW5lIEZUX1VJTlQ2NCAgdW5zaWduZWQgbG9uZyBsb25nIGludAorCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworI2VuZGlmIC8qIEZUX1NJWkVPRl9MT05HID09ICg2NCAvIEZUX0NIQVJfQklUKSAqLworCisjaWZkZWYgRlRfTE9ORzY0CisgIHR5cGVkZWYgRlRfSU5UNjQgICBGVF9JbnQ2NDsKKyAgdHlwZWRlZiBGVF9VSU5UNjQgIEZUX1VJbnQ2NDsKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBtaXNjZWxsYW5lb3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRfQkVHSU5fU1RNTlQgIGRvIHsKKyNkZWZpbmUgRlRfRU5EX1NUTU5UICAgIH0gd2hpbGUgKCAwICkKKyNkZWZpbmUgRlRfRFVNTVlfU1RNTlQgIEZUX0JFR0lOX1NUTU5UIEZUX0VORF9TVE1OVAorCisKKyAgLyogdHlwZW9mIGNvbmRpdGlvbiB0YWtlbiBmcm9tIGdudWxpYidzIGBpbnRwcm9wcy5oJyBoZWFkZXIgZmlsZSAqLworI2lmICggX19HTlVDX18gPj0gMiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX0lCTV9fVFlQRU9GX18gKSAgICAgICAgICAgIHx8IFwKKyAgICAgICggX19TVU5QUk9fQyA+PSAweDUxMTAgJiYgIV9fU1REQ19fICkgKQorI2RlZmluZSBUWVBFT0YoIHR5cGUgKSAgKF9fdHlwZW9mX18gKHR5cGUpKQorI2Vsc2UKKyNkZWZpbmUgVFlQRU9GKCB0eXBlICkgIC8qIGVtcHR5ICovCisjZW5kaWYKKworCisjaWZkZWYgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBzdGF0aWMgIHgKKyNkZWZpbmUgRlRfTE9DQUxfREVGKCB4ICkgIHN0YXRpYyAgeAorCisjZWxzZQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIGV4dGVybiAiQyIgIHgKKyNkZWZpbmUgRlRfTE9DQUxfREVGKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBleHRlcm4gIHgKKyNkZWZpbmUgRlRfTE9DQUxfREVGKCB4ICkgIHgKKyNlbmRpZgorCisjZW5kaWYgLyogRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVCAqLworCisjZGVmaW5lIEZUX0xPQ0FMX0FSUkFZKCB4ICkgICAgICBleHRlcm4gY29uc3QgIHgKKyNkZWZpbmUgRlRfTE9DQUxfQVJSQVlfREVGKCB4ICkgIGNvbnN0ICB4CisKKworI2lmbmRlZiBGVF9CQVNFCisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9CQVNFKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0JBU0UoIHggKSAgZXh0ZXJuICB4CisjZW5kaWYKKworI2VuZGlmIC8qICFGVF9CQVNFICovCisKKworI2lmbmRlZiBGVF9CQVNFX0RFRgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfQkFTRV9ERUYoIHggKSAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQkFTRV9ERUYoIHggKSAgeAorI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfQkFTRV9ERUYgKi8KKworCisjaWZuZGVmIEZUX0VYUE9SVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0VYUE9SVCAqLworCisKKyNpZm5kZWYgRlRfRVhQT1JUX0RFRgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfRVhQT1JUX0RFRiggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9FWFBPUlRfREVGKCB4ICkgIGV4dGVybiAgeAorI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfRVhQT1JUX0RFRiAqLworCisKKyNpZm5kZWYgRlRfRVhQT1JUX1ZBUgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfRVhQT1JUX1ZBUiggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9FWFBPUlRfVkFSKCB4ICkgIGV4dGVybiAgeAorI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfRVhQT1JUX1ZBUiAqLworCisgIC8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBuZWVkZWQgdG8gY29tcGlsZSB0aGUgbGlicmFyeSB3aXRoIGEgICAqLworICAvKiBDKysgY29tcGlsZXIgYW5kIHdpdGggMTZiaXQgY29tcGlsZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogVGhpcyBpcyBzcGVjaWFsLiAgV2l0aGluIEMrKywgeW91IG11c3Qgc3BlY2lmeSBgZXh0ZXJuICJDIicgZm9yICovCisgIC8qIGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCB5b3UgYWxzbyAgICAqLworICAvKiBtdXN0IGRvIHRoYXQgZm9yIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbiBmdW5jdGlvbiBwb2ludGVycyB0byAgKi8KKyAgLyogYXNzdXJlIEMgbGlua2FnZSAtLSBpdCdzIG5vdCBwb3NzaWJsZSB0byBoYXZlIChsb2NhbCkgYW5vbnltb3VzICovCisgIC8qIGZ1bmN0aW9ucyB3aGljaCBhcmUgYWNjZXNzZWQgYnkgKGdsb2JhbCkgZnVuY3Rpb24gcG9pbnRlcnMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgaXMgdXNlZCB0byBfZGVjbGFyZV8gYSBjb25zdGFudCB2YXJpYWJsZSB0aGF0ICovCisgIC8qIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfQ0FMTEJBQ0tfVEFCTEVfREVGIGlzIHVzZWQgdG8gX2RlZmluZV8gYSBjb25zdGFudCB2YXJpYWJsZSAgICovCisgIC8qIHRoYXQgY29udGFpbnMgcG9pbnRlcnMgdG8gY2FsbGJhY2sgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNvbWUgMTZiaXQgY29tcGlsZXJzIGhhdmUgdG8gcmVkZWZpbmUgdGhlc2UgbWFjcm9zIHRvIGluc2VydCAgICAqLworICAvKiB0aGUgaW5mYW1vdXMgYF9jZGVjbCcgb3IgYF9fZmFzdGNhbGwnIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEZUX0NBTExCQUNLX0RFRgorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0NBTExCQUNLX0RFRiggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgc3RhdGljICB4CisjZW5kaWYKKyNlbmRpZiAvKiBGVF9DQUxMQkFDS19ERUYgKi8KKworI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKKyNlbHNlCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgLyogbm90aGluZyAqLworI2VuZGlmCisjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fRlRDT05GSUdfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jIGIvZnJlZXR5cGUtMi42L2J1aWxkcy92bXMvZnRzeXN0ZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQzMzkyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy92bXMvZnRzeXN0ZW0uYwpAQCAtMCwwICsxLDMyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRzeXN0ZW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFZNUy1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyAgLyogd2UgdXNlIG91ciBzcGVjaWFsIGZ0Y29uZmlnLmggZmlsZSwgbm90IHRoZSBzdGFuZGFyZCBvbmUgKi8KKyNpbmNsdWRlIDxmdGNvbmZpZy5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfU1lTVEVNX0gKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSBGVF9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworICAvKiBtZW1vcnktbWFwcGluZyBpbmNsdWRlcyBhbmQgZGVmaW5pdGlvbnMgKi8KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaWZuZGVmIE1BUF9GSUxFCisjZGVmaW5lIE1BUF9GSUxFICAweDAwCisjZW5kaWYKKworI2lmZGVmIE1VTk1BUF9VU0VTX1ZPSURQCisjZGVmaW5lIE1VTk1BUF9BUkdfQ0FTVCAgdm9pZCAqCisjZWxzZQorI2RlZmluZSBNVU5NQVBfQVJHX0NBU1QgIGNoYXIgKgorI2VuZGlmCisKKyNpZmRlZiBORUVEX01VTk1BUF9ERUNMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiCisjZWxzZQorICBleHRlcm4KKyNlbmRpZgorICBpbnQKKyAgbXVubWFwKCBjaGFyKiAgYWRkciwKKyAgICAgICAgICBpbnQgICAgbGVuICk7CisKKyNkZWZpbmUgTVVOTUFQX0FSR19DQVNUICBjaGFyICoKKworI2VuZGlmIC8qIE5FRURfREVDTEFSQVRJT05fTVVOTUFQICovCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgOjogVGhlIHJlcXVlc3RlZCBzaXplIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYWRkcmVzcyBvZiBuZXdseSBhbGxvY2F0ZWQgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQorICBmdF9hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKQorICB7CisgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKworICAgIHJldHVybiBtYWxsb2MoIHNpemUgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfcmVhbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSByZWFsbG9jYXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgOjogQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdXJfc2l6ZSA6OiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5ld19zaXplIDo6IFRoZSBuZXdseSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxvY2sgICAgOjogVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgYmxvY2sgaW4gbWVtb3J5LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlYWxsb2NhdGVkIG1lbW9yeSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQqICkKKyAgZnRfcmVhbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgIGxvbmcgICAgICAgY3VyX3NpemUsCisgICAgICAgICAgICAgIGxvbmcgICAgICAgbmV3X3NpemUsCisgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKQorICB7CisgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKyAgICBGVF9VTlVTRUQoIGN1cl9zaXplICk7CisKKyAgICByZXR1cm4gcmVhbGxvYyggYmxvY2ssIG5ld19zaXplICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSA6OiBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxvY2sgIDo6IFRoZSBhZGRyZXNzIG9mIGJsb2NrIGluIG1lbW9yeSB0byBiZSBmcmVlZC4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9mcmVlKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgdm9pZCogICAgICBibG9jayApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1lbW9yeSApOworCisgICAgZnJlZSggYmxvY2sgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFIE1BTkFHRU1FTlQgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfaW8KKworICAvKiBXZSB1c2UgdGhlIG1hY3JvIFNUUkVBTV9GSUxFIGZvciBjb252ZW5pZW5jZSB0byBleHRyYWN0IHRoZSAgICAgICAqLworICAvKiBzeXN0ZW0tc3BlY2lmaWMgc3RyZWFtIGhhbmRsZSBmcm9tIGEgZ2l2ZW4gRnJlZVR5cGUgc3RyZWFtIG9iamVjdCAqLworI2RlZmluZSBTVFJFQU1fRklMRSggc3RyZWFtICkgICggKEZJTEUqKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X2Nsb3NlX3N0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmdW5jdGlvbiB0byBjbG9zZSBhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBBIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgZnRfY2xvc2Vfc3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBtdW5tYXAoIChNVU5NQVBfQVJHX0NBU1Qpc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIsIHN0cmVhbS0+c2l6ZSApOworCisgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSBOVUxMOworICAgIHN0cmVhbS0+c2l6ZSAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgICAgICAgICAgICAgICA9IDA7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbiggRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKQorICB7CisgICAgaW50ICAgICAgICAgIGZpbGU7CisgICAgc3RydWN0IHN0YXQgIHN0YXRfYnVmOworCisKKyAgICBpZiAoICFzdHJlYW0gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9IYW5kbGUgKTsKKworICAgIC8qIG9wZW4gdGhlIGZpbGUgKi8KKyAgICBmaWxlID0gb3BlbiggZmlsZXBhdGhuYW1lLCBPX1JET05MWSApOworICAgIGlmICggZmlsZSA8IDAgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgY291bGQgbm90IG9wZW4gYCVzJ1xuIiwgZmlsZXBhdGhuYW1lICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIH0KKworICAgIGlmICggZnN0YXQoIGZpbGUsICZzdGF0X2J1ZiApIDwgMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX09wZW46IiApKTsKKyAgICAgIEZUX0VSUk9SKCggIiBjb3VsZCBub3QgYGZzdGF0JyBmaWxlIGAlcydcbiIsIGZpbGVwYXRobmFtZSApKTsKKyAgICAgIGdvdG8gRmFpbF9NYXA7CisgICAgfQorCisgICAgc3RyZWFtLT5zaXplID0gc3RhdF9idWYuc3Rfc2l6ZTsKKyAgICBpZiAoICFzdHJlYW0tPnNpemUgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgb3BlbmVkIGAlcycgYnV0IHplcm8tc2l6ZWRcbiIsIGZpbGVwYXRobmFtZSApKTsKKyAgICAgIGdvdG8gRmFpbF9NYXA7CisgICAgfQorCisgICAgc3RyZWFtLT5wb3MgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgPSAodW5zaWduZWQgY2hhciAqKW1tYXAoIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfRklMRSB8IE1BUF9QUklWQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKTsKKworICAgIGlmICggKGxvbmcpc3RyZWFtLT5iYXNlID09IC0xICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiICkpOworICAgICAgRlRfRVJST1IoKCAiIGNvdWxkIG5vdCBgbW1hcCcgZmlsZSBgJXMnXG4iLCBmaWxlcGF0aG5hbWUgKSk7CisgICAgICBnb3RvIEZhaWxfTWFwOworICAgIH0KKworICAgIGNsb3NlKCBmaWxlICk7CisKKyAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IHN0cmVhbS0+YmFzZTsKKyAgICBzdHJlYW0tPnBhdGhuYW1lLnBvaW50ZXIgICA9IChjaGFyKilmaWxlcGF0aG5hbWU7CisKKyAgICBzdHJlYW0tPmNsb3NlID0gZnRfY2xvc2Vfc3RyZWFtOworICAgIHN0cmVhbS0+cmVhZCAgPSAwOworCisgICAgRlRfVFJBQ0UxKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgRlRfVFJBQ0UxKCggIiBvcGVuZWQgYCVzJyAoJWQgYnl0ZXMpIHN1Y2Nlc3NmdWxseVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlcGF0aG5hbWUsIHN0cmVhbS0+c2l6ZSApKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgRmFpbF9NYXA6CisgICAgY2xvc2UoIGZpbGUgKTsKKworICAgIHN0cmVhbS0+YmFzZSA9IE5VTEw7CisgICAgc3RyZWFtLT5zaXplID0gMDsKKyAgICBzdHJlYW0tPnBvcyAgPSAwOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9TdHJlYW0gKTsKKyAgfQorCisKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKworICBleHRlcm4gRlRfSW50CisgIGZ0X21lbV9kZWJ1Z19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIGV4dGVybiB2b2lkCisgIGZ0X21lbV9kZWJ1Z19kb25lKCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisjZW5kaWYKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfTWVtb3J5ICkKKyAgRlRfTmV3X01lbW9yeSggdm9pZCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworCisgICAgbWVtb3J5ID0gKEZUX01lbW9yeSltYWxsb2MoIHNpemVvZiAoICptZW1vcnkgKSApOworICAgIGlmICggbWVtb3J5ICkKKyAgICB7CisgICAgICBtZW1vcnktPnVzZXIgICAgPSAwOworICAgICAgbWVtb3J5LT5hbGxvYyAgID0gZnRfYWxsb2M7CisgICAgICBtZW1vcnktPnJlYWxsb2MgPSBmdF9yZWFsbG9jOworICAgICAgbWVtb3J5LT5mcmVlICAgID0gZnRfZnJlZTsKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKyAgICAgIGZ0X21lbV9kZWJ1Z19pbml0KCBtZW1vcnkgKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBtZW1vcnk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0RvbmVfTWVtb3J5KCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKyAgICBmdF9tZW1fZGVidWdfZG9uZSggbWVtb3J5ICk7CisjZW5kaWYKKyAgICBtZW1vcnktPmZyZWUoIG1lbW9yeSwgbWVtb3J5ICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvZnRkZWJ1Zy5jIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS9mdGRlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjNzNiNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvZnRkZWJ1Zy5jCkBAIC0wLDAgKzEsMjU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGRlYnVnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCBmb3IgV2luQ0UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGNvbXBvbmVudCBjb250YWlucyB2YXJpb3VzIG1hY3JvcyBhbmQgZnVuY3Rpb25zIHVzZWQgdG8gZWFzZSB0aGUgKi8KKyAgLyogZGVidWdnaW5nIG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUuICBJdHMgbWFpbiBwdXJwb3NlIGlzIGluIGFzc2VydGlvbiAgICovCisgIC8qIGNoZWNraW5nLCB0cmFjaW5nLCBhbmQgZXJyb3IgZGV0ZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlcmUgYXJlIG5vdyB0aHJlZSBkZWJ1Z2dpbmcgbW9kZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHRyYWNlIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBsb2cgZmlsZSAod2hpY2ggY2FuIGJlIHRoZSAqLworICAvKiAgIHN0YW5kYXJkIGVycm9yIG91dHB1dCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZXJyb3IgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBPbmx5IGVycm9yIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHJlbGVhc2UgbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm8gZXJyb3IgbWVzc2FnZSBpcyBzZW50IG9yIGdlbmVyYXRlZC4gIFRoZSBjb2RlIGlzIGZyZWUgZnJvbSBhbnkgICAqLworICAvKiAgIGRlYnVnZ2luZyBwYXJ0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgorCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworCisgIHZvaWQKKyAgT3V0cHV0RGVidWdTdHJpbmdFeCggY29uc3QgY2hhciogIHN0ciApCisgIHsKKyAgICBzdGF0aWMgV0NIQVIgIGJ1Zls4MTkyXTsKKworCisgICAgaW50IHN6ID0gTXVsdGlCeXRlVG9XaWRlQ2hhciggQ1BfQUNQLCAwLCBzdHIsIC0xLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggYnVmICkgLyBzaXplb2YgKCAqYnVmICkgKTsKKyAgICBpZiAoICFzeiApCisgICAgICBsc3RyY3B5VyggYnVmLCBMIk91dHB1dERlYnVnU3RyaW5nRXg6IE11bHRpQnl0ZVRvV2lkZUNoYXIgZmFpbGVkIiApOworCisgICAgT3V0cHV0RGVidWdTdHJpbmdXKCBidWYgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9NZXNzYWdlKCBjb25zdCBjaGFyKiAgZm10LAorICAgICAgICAgICAgICAuLi4gKQorICB7CisgICAgc3RhdGljIGNoYXIgIGJ1Zls4MTkyXTsKKyAgICB2YV9saXN0ICAgICAgYXA7CisKKworICAgIHZhX3N0YXJ0KCBhcCwgZm10ICk7CisgICAgdnByaW50ZiggZm10LCBhcCApOworICAgIC8qIHNlbmQgdGhlIHN0cmluZyB0byB0aGUgZGVidWdnZXIgYXMgd2VsbCAqLworICAgIHZzcHJpbnRmKCBidWYsIGZtdCwgYXAgKTsKKyAgICBPdXRwdXREZWJ1Z1N0cmluZ0V4KCBidWYgKTsKKyAgICB2YV9lbmQoIGFwICk7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfUGFuaWMoIGNvbnN0IGNoYXIqICBmbXQsCisgICAgICAgICAgICAuLi4gKQorICB7CisgICAgc3RhdGljIGNoYXIgIGJ1Zls4MTkyXTsKKyAgICB2YV9saXN0ICAgICAgYXA7CisKKworICAgIHZhX3N0YXJ0KCBhcCwgZm10ICk7CisgICAgdnNwcmludGYoIGJ1ZiwgZm10LCBhcCApOworICAgIE91dHB1dERlYnVnU3RyaW5nRXgoIGJ1ZiApOworICAgIHZhX2VuZCggYXAgKTsKKworICAgIGV4aXQoIEVYSVRfRkFJTFVSRSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0ZGVidWcuaCAqLworCisgIEZUX0JBU0VfREVGKCBpbnQgKQorICBGVF9UaHJvdyggRlRfRXJyb3IgICAgIGVycm9yLAorICAgICAgICAgICAgaW50ICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICBjb25zdCBjaGFyKiAgZmlsZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGVycm9yICk7CisgICAgRlRfVU5VU0VEKCBsaW5lICk7CisgICAgRlRfVU5VU0VEKCBmaWxlICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworCisgIC8qIGFycmF5IG9mIHRyYWNlIGxldmVscywgaW5pdGlhbGl6ZWQgdG8gMCAqLworICBpbnQgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9jb3VudF07CisKKyAgLyogZGVmaW5lIGFycmF5IG9mIHRyYWNlIHRvZ2dsZSBuYW1lcyAqLworI2RlZmluZSBGVF9UUkFDRV9ERUYoIHggKSAgI3ggLAorCisgIHN0YXRpYyBjb25zdCBjaGFyKiAgZnRfdHJhY2VfdG9nZ2xlc1t0cmFjZV9jb3VudCArIDFdID0KKyAgeworI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJBQ0VfSAorICAgIE5VTEwKKyAgfTsKKworI3VuZGVmIEZUX1RSQUNFX0RFRgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbml0aWFsaXplIHRoZSB0cmFjaW5nIHN1Yi1zeXN0ZW0uICBUaGlzIGlzIGRvbmUgYnkgcmV0cmlldmluZyB0aGUgICAgKi8KKyAgLyogdmFsdWUgb2YgdGhlICJGVDJfREVCVUciIGVudmlyb25tZW50IHZhcmlhYmxlLiAgSXQgbXVzdCBiZSBhIGxpc3Qgb2YgICovCisgIC8qIHRvZ2dsZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIGA7JyBvciBgLCcuICBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgImFueTozIG1lbW9yeTo2IHN0cmVhbTo1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIHdpbGwgcmVxdWVzdCB0aGF0IGFsbCBsZXZlbHMgYmUgc2V0IHRvIDMsIGV4Y2VwdCB0aGUgdHJhY2UgbGV2ZWwgKi8KKyAgLyogZm9yIHRoZSBtZW1vcnkgYW5kIHN0cmVhbSBjb21wb25lbnRzIHdoaWNoIGFyZSBzZXQgdG8gNiBhbmQgNSwgICAgICAgICovCisgIC8qIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU2VlIHRoZSBmaWxlIDxpbnRlcm5hbC9mdHRyYWNlLmg+IGZvciBkZXRhaWxzIG9mIHRoZSBhdmFpbGFibGUgdG9nZ2xlICovCisgIC8qIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2OyAwIG1lYW5zIHF1aWV0IChleGNlcHQgZm9yIHNlcmlvdXMgICovCisgIC8qIHJ1bnRpbWUgZXJyb3JzKSwgYW5kIDYgbWVhbnMgX3ZlcnlfIHZlcmJvc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBmdF9kZWJ1Z19pbml0KCB2b2lkICkKKyAgeworICAgIC8qIFdpbmRvd3MgTW9iaWxlIGRvZXNuJ3QgaGF2ZSBlbnZpcm9ubWVudCBBUEk6ICAgICAgICAgICAqLworICAgIC8qIEdldEVudmlyb25tZW50U3RyaW5ncywgR2V0RW52aXJvbm1lbnRWYXJpYWJsZSwgZ2V0ZW52LiAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEZJWE1FISEhIEhvdyB0byBzZXQgZGVidWcgbW9kZT8gICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9IGdldGVudiggIkZUMl9ERUJVRyIgKTsgKi8KKworICAgIGNvbnN0IGNoYXIqICBmdDJfZGVidWcgPSAwOworCisKKyAgICBpZiAoIGZ0Ml9kZWJ1ZyApCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgPSBmdDJfZGVidWc7CisgICAgICBjb25zdCBjaGFyKiAgcTsKKworCisgICAgICBmb3IgKCA7ICpwOyBwKysgKQorICAgICAgeworICAgICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgc2VwYXJhdG9ycyAqLworICAgICAgICBpZiAoICpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICcsJyB8fCAqcCA9PSAnOycgfHwgKnAgPT0gJz0nICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiByZWFkIHRvZ2dsZSBuYW1lLCBmb2xsb3dlZCBieSAnOicgKi8KKyAgICAgICAgcSA9IHA7CisgICAgICAgIHdoaWxlICggKnAgJiYgKnAgIT0gJzonICkKKyAgICAgICAgICBwKys7CisKKyAgICAgICAgaWYgKCAhKnAgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggKnAgPT0gJzonICYmIHAgPiBxICkKKyAgICAgICAgeworICAgICAgICAgIGludCAgbiwgaSwgbGVuID0gKGludCkoIHAgLSBxICk7CisgICAgICAgICAgaW50ICBsZXZlbCA9IC0xLCBmb3VuZCA9IC0xOworCisKKyAgICAgICAgICBmb3IgKCBuID0gMDsgbiA8IHRyYWNlX2NvdW50OyBuKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICB0b2dnbGUgPSBmdF90cmFjZV90b2dnbGVzW25dOworCisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHRvZ2dsZVtpXSAhPSBxW2ldICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBpID09IGxlbiAmJiB0b2dnbGVbaV0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvdW5kID0gbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcmVhZCBsZXZlbCAqLworICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZiAoICpwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOworICAgICAgICAgICAgaWYgKCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA3ICkKKyAgICAgICAgICAgICAgbGV2ZWwgPSAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIGZvdW5kID49IDAgJiYgbGV2ZWwgPj0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBmb3VuZCA9PSB0cmFjZV9hbnkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yICJhbnkiICovCisgICAgICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApCisgICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW25dID0gbGV2ZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1tmb3VuZF0gPSBsZXZlbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisjZWxzZSAgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQorICB7CisgICAgLyogbm90aGluZyAqLworICB9CisKKworI2VuZGlmIC8qICFGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfRVJST1IgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnNsbiBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmU1MmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUuc2xuCkBAIC0wLDAgKzEsMTU4IEBACivvu78NCitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwDQorIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImZyZWV0eXBlIiwgImZyZWV0eXBlLnZjcHJvaiIsICJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpID0gTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpID0gTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSA9IExJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpID0gTElCIFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5CdWlsZC4wID0gUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KKwlFbmRHbG9iYWxTZWN0aW9uDQorRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTkzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2oKQEAgLTAsMCArMSwzODM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdCBQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIgVmVyc2lvbj0iOC4wMCIgTmFtZT0iZnJlZXR5cGUiIFByb2plY3RHVUlEPSJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSIgVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMCI+DQorICA8UGxhdGZvcm1zPg0KKyAgICA8UGxhdGZvcm0gTmFtZT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KSIgLz4NCisgICAgPFBsYXRmb3JtIE5hbWU9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiAvPg0KKyAgICA8UGxhdGZvcm0gTmFtZT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiIC8+DQorICAgIDxQbGF0Zm9ybSBOYW1lPSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiIC8+DQorICAgIDxQbGF0Zm9ybSBOYW1lPSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiIC8+DQorICAgIDxQbGF0Zm9ybSBOYW1lPSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSIgLz4NCisgIDwvUGxhdGZvcm1zPg0KKyAgPFRvb2xGaWxlcz4NCisgIDwvVG9vbEZpbGVzPg0KKyAgPENvbmZpZ3VyYXRpb25zPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiIE91dHB1dERpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIE1pbmltYWxSZWJ1aWxkPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMiIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNi5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSIgT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBTdHJpbmdQb29saW5nPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMCIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNk1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIyIiBJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFN0cmluZ1Bvb2xpbmc9InRydWUiIFJ1bnRpbWVMaWJyYXJ5PSIwIiBFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBTdHJpbmdQb29saW5nPSJ0cnVlIiBSdW50aW1lTGlicmFyeT0iMCIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNk1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIyIiBJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFN0cmluZ1Bvb2xpbmc9InRydWUiIFJ1bnRpbWVMaWJyYXJ5PSIwIiBFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiIE91dHB1dERpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIFJ1bnRpbWVMaWJyYXJ5PSIwIiBFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2U1QubGliIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiIE91dHB1dERpcmVjdG9yeT0iU21hcnRwaG9uZSAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iU21hcnRwaG9uZSAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBTdHJpbmdQb29saW5nPSJmYWxzZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIyIiBJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFN0cmluZ1Bvb2xpbmc9ImZhbHNlIiBSdW50aW1lTGlicmFyeT0iMCIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNlNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjIiIElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgU3RyaW5nUG9vbGluZz0iZmFsc2UiIFJ1bnRpbWVMaWJyYXJ5PSIwIiBFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2U1QubGliIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBTdHJpbmdQb29saW5nPSJmYWxzZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIyIiBJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFN0cmluZ1Bvb2xpbmc9ImZhbHNlIiBSdW50aW1lTGlicmFyeT0iMCIgRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNlNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgUnVudGltZUxpYnJhcnk9IjMiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNl9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBSdW50aW1lTGlicmFyeT0iMyIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFJ1bnRpbWVMaWJyYXJ5PSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCIgUnVudGltZUxpYnJhcnk9IjMiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNl9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIiBSdW50aW1lTGlicmFyeT0iMyIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFJ1bnRpbWVMaWJyYXJ5PSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiIFJ1bnRpbWVMaWJyYXJ5PSIxIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNlNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giIFJ1bnRpbWVMaWJyYXJ5PSIxIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNlNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSIgUnVudGltZUxpYnJhcnk9IjEiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiIFJ1bnRpbWVMaWJyYXJ5PSIxIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNlNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIgR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIiBPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIiBHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiIFJ1bnRpbWVMaWJyYXJ5PSIxIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiIE91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9fRVJSTk9fSCIgR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgRXhlY3V0aW9uQnVja2V0PSI3IiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIiBHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiIFJ1bnRpbWVMaWJyYXJ5PSIxIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjZNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NvZGVTaWduVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8RGVwbG95bWVudFRvb2wgRm9yY2VEaXJ0eT0iLTEiIFJlbW90ZURpcmVjdG9yeT0iIiBSZWdpc3Rlck91dHB1dD0iMCIgQWRkaXRpb25hbEZpbGVzPSIiIC8+DQorICAgICAgPERlYnVnZ2VyVG9vbCAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIiBPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBUYXJnZXRFbnZpcm9ubWVudD0iMSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBFeGVjdXRpb25CdWNrZXQ9IjciIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiIEdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCIgUnVudGltZUxpYnJhcnk9IjEiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIFdhcm5pbmdMZXZlbD0iNCIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIgQ29tcGlsZUFzPSIwIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNk1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ29kZVNpZ25Ub29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxEZXBsb3ltZW50VG9vbCBGb3JjZURpcnR5PSItMSIgUmVtb3RlRGlyZWN0b3J5PSIiIFJlZ2lzdGVyT3V0cHV0PSIwIiBBZGRpdGlvbmFsRmlsZXM9IiIgLz4NCisgICAgICA8RGVidWdnZXJUb29sIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSIgT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIFRhcmdldEVudmlyb25tZW50PSIxIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIEV4ZWN1dGlvbkJ1Y2tldD0iNyIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIgR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDb2RlU2lnblRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPERlcGxveW1lbnRUb29sIEZvcmNlRGlydHk9Ii0xIiBSZW1vdGVEaXJlY3Rvcnk9IiIgUmVnaXN0ZXJPdXRwdXQ9IjAiIEFkZGl0aW9uYWxGaWxlcz0iIiAvPg0KKyAgICAgIDxEZWJ1Z2dlclRvb2wgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWSIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210IiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdCIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIiBHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgUnVudGltZUxpYnJhcnk9IjEiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI2TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgIDwvQ29uZmlndXJhdGlvbnM+DQorICA8UmVmZXJlbmNlcz4NCisgIDwvUmVmZXJlbmNlcz4NCisgIDxGaWxlcz4NCisgICAgPEZpbHRlciBOYW1lPSJTb3VyY2UgRmlsZXMiIEZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCI+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYXV0b2ZpdFxhdXRvZml0LmMiPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2ZmXGNmZi5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiaXRtYXAuYyI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cZnRkZWJ1Zy5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnYXNwLmMiPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnemlwXGZ0Z3ppcC5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRpbml0LmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsdGVyIE5hbWU9IkZUX01PRFVMRVMiPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJib3guYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmRmLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5bnRoLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHR5cGUxLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHdpbmZudC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyI+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyI+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgPC9GaWx0ZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIE5hbWU9IkhlYWRlciBGaWxlcyIgRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sIj4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRjb25maWcuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRoZWFkZXIuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRtb2R1bGUuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRvcHRpb24uaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRzdGRsaWIuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvRmlsZXM+DQorICA8R2xvYmFscz4NCisgIDwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlOTJkNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZGVyPgorPHRpdGxlPgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVlMuTkVUJm5ic3A7MjAwNQorICAoUG9ja2V0IFBDKQorPC90aXRsZT4KKworPGJvZHk+Cis8aDE+CisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWUy5ORVQmbmJzcDsyMDA1CisgIChQb2NrZXQgUEMpCis8L2gxPgorCis8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgQysrLCBuYW1lZAorPHR0PmZyZWV0eXBlLnZjcHJvajwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkIDx0dD5mcmVldHlwZS5zbG48L3R0PiBmb3IKK3RoZSBmb2xsb3dpbmcgdGFyZ2V0czoKKworPHVsPgorICA8bGk+UFBDL1NQIDIwMDMgKFBvY2tldCBQQyAyMDAzKTwvbGk+CisgIDxsaT5QUEMvU1AgV001IChXaW5kb3dzIE1vYmlsZSA1KTwvbGk+CisgIDxsaT5QUEMvU1AgV002IChXaW5kb3dzIE1vYmlsZSA2KTwvbGk+Cis8L3VsPgorCitJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjYgc291cmNlczo8L3A+CisKKzx1bD4KKyAgPHByZT4KKyAgICBmcmVldHlwZTI2LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjZNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+Cis8L3VsPgorCis8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKK2FyY2hpdmVzIGFyZSBhbHJlYWR5IHN0b3JlZCB0aGlzIHdheSwgc28gbm8gZnVydGhlciBhY3Rpb24gaXMgcmVxdWlyZWQuICBJZgoreW91IHVzZSBzb21lIDx0dD4udGFyLip6PC90dD4gYXJjaGl2ZXMsIGJlIHN1cmUgdG8gY29uZmlndXJlIHlvdXIgZXh0cmFjdGluZwordG9vbCB0byBjb252ZXJ0IHRoZSBsaW5lIGVuZGluZ3MuICBGb3IgZXhhbXBsZSwgd2l0aCA8YQoraHJlZj0iaHR0cDovL3d3dy53aW56aXAuY29tIj5XaW5aaXA8L2E+LCB5b3Ugc2hvdWxkIGFjdGl2YXRlIHRoZSA8aXQ+VEFSCitmaWxlIHNtYXJ0IENSL0xGIENvbnZlcnNpb248L2l0PiBvcHRpb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvbnNpZGVyCit1c2luZyB0aGUgPHR0PnVuaXgyZG9zPC90dD4gb3IgPHR0PnUyZDwvdHQ+IHV0aWxpdGllcyB0aGF0IGFyZSBmbG9hdGluZworYXJvdW5kLCB3aGljaCBzcGVjaWZpY2FsbHkgZGVhbCB3aXRoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLgorCis8cD5CdWlsZCBkaXJlY3RvcmllcyBhcmUgcGxhY2VkIGluIHRoZSB0b3AtbGV2ZWwgPHR0Pm9ianM8L3R0PgorZGlyZWN0b3J5LjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUuc2xuIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZWZkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS5zbG4KQEAgLTAsMCArMSwxNTggQEAKK++7vw0KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEwLjAwDQorIyBWaXN1YWwgU3R1ZGlvIDIwMDgNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImZyZWV0eXBlIiwgImZyZWV0eXBlLnZjcHJvaiIsICJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpID0gTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCUxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQlMSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpID0gTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpID0gTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSA9IExJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpID0gTElCIFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCUxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCUxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpID0gTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQlMSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSA9IExJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IERlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KS5BY3RpdmVDZmcgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkRlcGxveS4wID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkuRGVwbG95LjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuQWN0aXZlQ2ZnID0gUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkuRGVwbG95LjAgPSBSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkFjdGl2ZUNmZyA9IFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpLkJ1aWxkLjAgPSBSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KS5EZXBsb3kuMCA9IFJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKQ0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpLkRlcGxveS4wID0gUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKS5EZXBsb3kuMCA9IFJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkNCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQorCUVuZEdsb2JhbFNlY3Rpb24NCitFbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2ogYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhZjViNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvagpAQCAtMCwwICsxLDEzNDk1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOSwwMCINCisJTmFtZT0iZnJlZXR5cGUiDQorCVByb2plY3RHVUlEPSJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMCINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZNVC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2TVQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZNVC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2TVQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNlNULmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iU21hcnRwaG9uZSAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2U1QubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZTVC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNlNULmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2U1QubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZTVC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNl9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtOT19FUlJOT19IIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO05PX0VSUk5PX0giDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNl9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2U1RfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZTVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7Tk9fRVJSTk9fSCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZTVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNlNUX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2U1RfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZTVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCUdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2TVRfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT19FUlJOT19IIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCUdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI2TVRfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjZNVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdCINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCUdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYXV0b2ZpdFxhdXRvZml0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmRmXGJkZi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmdGRlYnVnLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2FzcC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnemlwXGZ0Z3ppcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xsendcZnRsencuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeXN0ZW0uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9IkZUX01PRFVMRVMiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYm94LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiZGYuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG90dmFsLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3ludGguYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHR5cGUxLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnR3aW5mbnQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlMVx0eXBlMS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3aW5mb250c1x3aW5mbnQuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxmdDJidWlsZC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRjb25maWcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0aGVhZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG1vZHVsZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRvcHRpb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0c3RkbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmMTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZGVyPgorPHRpdGxlPgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVlMuTkVUJm5ic3A7MjAwOAorICAoUG9ja2V0IFBDKQorPC90aXRsZT4KKworPGJvZHk+Cis8aDE+CisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWUy5ORVQmbmJzcDsyMDA4CisgIChQb2NrZXQgUEMpCis8L2gxPgorCis8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgQysrLCBuYW1lZAorPHR0PmZyZWV0eXBlLmRzcDwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkIDx0dD5mcmVldHlwZS5zbG48L3R0PiBmb3IKK3RoZSBmb2xsb3dpbmcgdGFyZ2V0czoKKworPHVsPgorICA8bGk+UFBDL1NQIDIwMDMgKFBvY2tldCBQQyAyMDAzKTwvbGk+CisgIDxsaT5QUEMvU1AgV001IChXaW5kb3dzIE1vYmlsZSA1KTwvbGk+CisgIDxsaT5QUEMvU1AgV002IChXaW5kb3dzIE1vYmlsZSA2KTwvbGk+Cis8L3VsPgorCitJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjYgc291cmNlczo8L3A+CisKKzx1bD4KKyAgPHByZT4KKyAgICBmcmVldHlwZTI2LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjZNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+Cis8L3VsPgorCis8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKK2FyY2hpdmVzIGFyZSBhbHJlYWR5IHN0b3JlZCB0aGlzIHdheSwgc28gbm8gZnVydGhlciBhY3Rpb24gaXMgcmVxdWlyZWQuICBJZgoreW91IHVzZSBzb21lIDx0dD4udGFyLip6PC90dD4gYXJjaGl2ZXMsIGJlIHN1cmUgdG8gY29uZmlndXJlIHlvdXIgZXh0cmFjdGluZwordG9vbCB0byBjb252ZXJ0IHRoZSBsaW5lIGVuZGluZ3MuICBGb3IgZXhhbXBsZSwgd2l0aCA8YQoraHJlZj0iaHR0cDovL3d3dy53aW56aXAuY29tIj5XaW5aaXA8L2E+LCB5b3Ugc2hvdWxkIGFjdGl2YXRlIHRoZSA8aXQ+VEFSCitmaWxlIHNtYXJ0IENSL0xGIENvbnZlcnNpb248L2l0PiBvcHRpb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvbnNpZGVyCit1c2luZyB0aGUgPHR0PnVuaXgyZG9zPC90dD4gb3IgPHR0PnUyZDwvdHQ+IHV0aWxpdGllcyB0aGF0IGFyZSBmbG9hdGluZworYXJvdW5kLCB3aGljaCBzcGVjaWZpY2FsbHkgZGVhbCB3aXRoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLgorCis8cD5CdWlsZCBkaXJlY3RvcmllcyBhcmUgcGxhY2VkIGluIHRoZSB0b3AtbGV2ZWwgPHR0Pm9ianM8L3R0PgorZGlyZWN0b3J5LjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL2RldGVjdC5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy9kZXRlY3QubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyOTdmMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy9kZXRlY3QubWsKQEAgLTAsMCArMSwxODQgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGV0ZWN0IGEgV2luMzIgaG9zdCBwbGF0Zm9ybS4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKy5QSE9OWTogc2V0dXAKKworCitpZmVxICgkKFBMQVRGT1JNKSxhbnNpKQorCisgICMgRGV0ZWN0aW5nIFdpbmRvd3MgTlQgaXMgZWFzeSwgYXMgdGhlIE9TIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBhbmQKKyAgIyBjb250YWlucyBgV2luZG93c19OVCcuICBUaGlzIGFsc28gd29ya3Mgd2l0aCBXaW5kb3dzIDIwMDAgYW5kIFhQLgorICAjCisgIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCisKKyAgICBQTEFURk9STSA6PSB3aW5kb3dzCisKKyAgZWxzZQorCisgICAgIyBEZXRlY3RpbmcgV2luZG93cyA5WAorCisgICAgIyBXZSB1c2VkIHRvIHJ1biB0aGUgYHZlcicgY29tbWFuZCB0byBzZWUgaWYgaXRzIG91dHB1dCBjb250YWlucyB0aGUKKyAgICAjIHdvcmQgYFdpbmRvd3MnLiAgSWYgdGhpcyBpcyB0cnVlLCB3ZSBhcmUgcnVubmluZyBXaW5kb3dzIDk1IG9yIGxhdGVyOgorICAgICMKKyAgICAjICAgaWZkZWYgQ09NU1BFQworICAgICMgICAgICMgRmlyc3QsIGNoZWNrIGlmIHdlIGhhdmUgdGhlIENPTVNQRUMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoCisgICAgIyAgICAgIyBpbmRpY2F0ZXMgd2UgY2FuIHVzZSBDT01NQU5ELkNPTSdzIGludGVybmFsIGNvbW1hbmRzCisgICAgIyAgICAgaXNfd2luZG93cyA6PSAkKGZpbmRzdHJpbmcgV2luZG93cywkKHN0cmlwICQoc2hlbGwgdmVyKSkpCisgICAgIyAgIGVuZGlmCisgICAgIworICAgICMgVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIGRldGVjdHMgdGhlIGNhc2Ugd2hlbiBvbmUgaXMgcnVubmluZworICAgICMgRE9TIDcueCAodGhlIE1TLURPUyB2ZXJzaW9uIHRoYXQgbGllcyBiZWxvdyBXaW5kb3dzKSB3aXRob3V0IGFjdHVhbGx5CisgICAgIyBsYXVuY2hpbmcgdGhlIEdVSS4KKyAgICAjCisgICAgIyBBIGJldHRlciB0ZXN0IGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGJvdGggdGhlIGVudmlyb25tZW50CisgICAgIyB2YXJpYWJsZXMgYHdpbmJvb3RkaXInIGFuZCBgd2luZGlyJy4gIFRoZSBmaXJzdCBpbmRpY2F0ZXMgYW4KKyAgICAjIHVuZGVybHlpbmcgRE9TIDcueCwgd2hpbGUgdGhlIHNlY29uZCBpcyBzZXQgb25seSBpZiB3aW5kb3dzIGlzCisgICAgIyBhdmFpbGFibGUuCisgICAgIworICAgICMgTm90ZSB0aGF0IG9uIFdpbmRvd3MgTlQsIHN1Y2ggYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBub3QgYmUgc2VlbgorICAgICMgZnJvbSBET1MtYmFzZWQgdG9vbHMgbGlrZSBESkdQUCdzIG1ha2U7IHRoaXMgaXMgbm90IGFjdHVhbGx5IGEgcHJvYmxlbQorICAgICMgc2luY2UgTlQgaXMgZGV0ZWN0ZWQgaW5kZXBlbmRlbnRseSBhYm92ZS4gIEJ1dCBkbyBub3QgdHJ5IHRvIGJlIGNsZXZlciEKKyAgICAjCisgICAgaWZkZWYgd2luYm9vdGRpcgorICAgICAgaWZkZWYgd2luZGlyCisKKyAgICAgICAgUExBVEZPUk0gOj0gd2luZG93cworCisgICAgICBlbmRpZgorICAgIGVuZGlmCisKKyAgZW5kaWYgICMgdGVzdCBOVAorCitlbmRpZiAjIHRlc3QgUExBVEZPUk0gYW5zaQorCitpZmVxICgkKFBMQVRGT1JNKSx3aW5kb3dzKQorCisgIERFTEVURSA6PSBkZWwKKyAgQ0FUICAgIDo9IHR5cGUKKyAgU0VQICAgIDo9ICQoQkFDS1NMQVNIKQorCisgICMgU2V0dGluZyBDT1BZIGlzIGEgYml0IHRyaWNraWVyLiAgUGxhaW4gQ09QWSBvbiBOVCB3aWxsIG5vdCB3b3JrCisgICMgY29ycmVjdGx5LCBiZWNhdXNlIGl0IHdpbGwgdXBwZXJjYXNlIDguMyBmaWxlbmFtZXMsIGNyZWF0aW5nIGEKKyAgIyBgQ09ORklHLk1LJyBmaWxlIHdoaWNoIGlzbid0IGZvdW5kIGxhdGVyIG9uIGJ5IGBtYWtlJy4KKyAgIyBTaW5jZSB3ZSBkbyBub3Qgd2FudCB0aGF0LCB3ZSBuZWVkIHRvIGZvcmNlIGV4ZWN1dGlvbiBvZiBDTUQuRVhFLgorICAjIFVuZm9ydHVuYXRlbHksIENNRC5FWEUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIDlYLgorICAjIFNvIHdlIG5lZWQgdG8gaGFjay4KKyAgIworICAjIEt1ZG9zIHRvIEVsaSBaYXJldHNraWkgKERKR1BQIGd1cnUpIHRoYXQgaGVscGVkIGRlYnVnIGl0LgorICAjIERldGFpbHMgYXJlIGF2YWlsYWJsZSBpbiB0aHJlYWRzIG9mIHRoZSBmcmVldHlwZSBtYWlsaW5nIGxpc3QKKyAgIyAoMjAwNC0xMS0xMSksIGFuZCB0aGVuIGluIHRoZSBkZXZlbCBtYWlsaW5nIGxpc3QgKDIwMDQtMTEtMjAgdG8gLTIzKS4KKyAgIworICBpZmVxICgkKE9TKSxXaW5kb3dzX05UKQorICAgIENPUFkgOj0gY21kLmV4ZSAvYyBjb3B5CisgIGVsc2UKKyAgICBDT1BZIDo9IGNvcHkKKyAgZW5kaWYgICMgdGVzdCBOVAorCisKKyAgIyBnY2MgTWFrZWZpbGUgYnkgZGVmYXVsdAorICBDT05GSUdfRklMRSA6PSB3MzItZ2NjLm1rCisgIGlmZXEgKCQoZmlyc3R3b3JkICQoQ0MpKSxjYykKKyAgICBDQyAgICAgICAgOj0gZ2NjCisgIGVuZGlmCisKKyAgaWZuZXEgKCQoZmluZHN0cmluZyBsaXN0LCQoTUFLRUNNREdPQUxTKSksKSAgIyB0ZXN0IGZvciB0aGUgImxpc3QiIHRhcmdldAorICAgIGR1bXBfdGFyZ2V0X2xpc3Q6CisJICAgIEBlY2hvIP8KKwkgICAgQGVjaG8gJChQUk9KRUNUX1RJVExFKSBidWlsZCBzeXN0ZW0gLS0gc3VwcG9ydGVkIGNvbXBpbGVycworCSAgICBAZWNobyD/CisJICAgIEBlY2hvIFNldmVyYWwgY29tbWFuZC1saW5lIGNvbXBpbGVycyBhcmUgc3VwcG9ydGVkIG9uIFdpbjMyOgorCSAgICBAZWNobyD/CisJICAgIEBlY2hvIP//bWFrZSBzZXR1cP///////////////////////////2djYyAod2l0aCBNaW5ndykKKwkgICAgQGVjaG8g//9tYWtlIHNldHVwIHZpc3VhbGP/////////////////TWljcm9zb2Z0IFZpc3VhbCBDKysKKwkgICAgQGVjaG8g//9tYWtlIHNldHVwIGJjYzMy////////////////////Qm9ybGFuZCBDL0MrKworCSAgICBAZWNobyD//21ha2Ugc2V0dXAgbGNj//////////////////////9XaW4zMi1MQ0MKKwkgICAgQGVjaG8g//9tYWtlIHNldHVwIGludGVsY///////////////////SW50ZWwgQy9DKysKKwkgICAgQGVjaG8g/worCisgICAgc2V0dXA6IGR1bXBfdGFyZ2V0X2xpc3QKKyAgICAuUEhPTlk6IGR1bXBfdGFyZ2V0X2xpc3QgbGlzdAorICBlbHNlCisgICAgc2V0dXA6IGRvc19zZXR1cAorICBlbmRpZgorCisgICMgYWRkaXRpb25hbGx5LCB3ZSBwcm92aWRlIGhvb2tzIGZvciB2YXJpb3VzIG90aGVyIGNvbXBpbGVycworICAjCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgdmlzdWFsYywkKE1BS0VDTURHT0FMUykpLCkgICAgICMgVmlzdWFsIEMvQysrCisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLXZjYy5taworICAgIENDICAgICAgICAgIDo9IGNsCisgICAgdmlzdWFsYzogc2V0dXAKKyAgICAuUEhPTlk6IHZpc3VhbGMKKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIGludGVsYywkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIEludGVsIEMvQysrCisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWludGwubWsKKyAgICBDQyAgICAgICAgICA6PSBjbAorICAgIHZpc3VhbGM6IHNldHVwCisgICAgLlBIT05ZOiBpbnRlbGMKKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIHdhdGNvbSwkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIFdhdGNvbSBDL0MrKworICAgIENPTkZJR19GSUxFIDo9IHczMi13YXQubWsKKyAgICBDQyAgICAgICAgICA6PSB3Y2MzODYKKyAgICB3YXRjb206IHNldHVwCisgICAgLlBIT05ZOiB3YXRjb20KKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIHZpc3VhbGFnZSwkKE1BS0VDTURHT0FMUykpLCkgICAjIFZpc3VhbCBBZ2UgQysrCisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWljYy5taworICAgIENDICAgICAgICAgIDo9IGljYworICAgIHZpc3VhbGFnZTogc2V0dXAKKyAgICAuUEhPTlk6IHZpc3VhbGFnZQorICBlbmRpZgorCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgbGNjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgICMgTENDLVdpbjMyCisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWxjYy5taworICAgIENDICAgICAgICAgIDo9IGxjYworICAgIGxjYzogc2V0dXAKKyAgICAuUEhPTlk6IGxjYworICBlbmRpZgorCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgbWluZ3czMiwkKE1BS0VDTURHT0FMUykpLCkgICAgICMgbWluZ3czMgorICAgIENPTkZJR19GSUxFIDo9IHczMi1taW5ndzMyLm1rCisgICAgQ0MgICAgICAgICAgOj0gZ2NjCisgICAgbWluZ3czMjogc2V0dXAKKyAgICAuUEhPTlk6IG1pbmd3MzIKKyAgZW5kaWYKKworICBpZm5lcSAoJChmaW5kc3RyaW5nIGJjYzMyLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAjIEJvcmxhbmQgQysrCisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWJjYy5taworICAgIENDICAgICAgICAgIDo9IGJjYzMyCisgICAgYmNjMzI6IHNldHVwCisgICAgLlBIT05ZOiBiY2MzMgorICBlbmRpZgorCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtYmNjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWJjY2QubWsKKyAgICBDQyAgICAgICAgICA6PSBiY2MzMgorICAgIGRldmVsLWJjYzogc2V0dXAKKyAgICAuUEhPTlk6IGRldmVsLWJjYworICBlbmRpZgorCisgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtZ2NjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CisgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWRldi5taworICAgIENDICAgICAgICAgIDo9IGdjYworICAgIGRldmVsLWdjYzogc2V0dXAKKyAgICAuUEhPTlk6IGRldmVsLWdjYworICBlbmRpZgorCitlbmRpZiAgICMgdGVzdCBQTEFURk9STSB3aW5kb3dzCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy9mdGRlYnVnLmMgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvZnRkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZGNjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvZnRkZWJ1Zy5jCkBAIC0wLDAgKzEsMjM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGRlYnVnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCBmb3IgV2luMzIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGNvbXBvbmVudCBjb250YWlucyB2YXJpb3VzIG1hY3JvcyBhbmQgZnVuY3Rpb25zIHVzZWQgdG8gZWFzZSB0aGUgKi8KKyAgLyogZGVidWdnaW5nIG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUuICBJdHMgbWFpbiBwdXJwb3NlIGlzIGluIGFzc2VydGlvbiAgICovCisgIC8qIGNoZWNraW5nLCB0cmFjaW5nLCBhbmQgZXJyb3IgZGV0ZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlcmUgYXJlIG5vdyB0aHJlZSBkZWJ1Z2dpbmcgbW9kZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHRyYWNlIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBsb2cgZmlsZSAod2hpY2ggY2FuIGJlIHRoZSAqLworICAvKiAgIHN0YW5kYXJkIGVycm9yIG91dHB1dCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZXJyb3IgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBPbmx5IGVycm9yIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHJlbGVhc2UgbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm8gZXJyb3IgbWVzc2FnZSBpcyBzZW50IG9yIGdlbmVyYXRlZC4gIFRoZSBjb2RlIGlzIGZyZWUgZnJvbSBhbnkgICAqLworICAvKiAgIGRlYnVnZ2luZyBwYXJ0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0ZGVidWcuaCAqLworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfTWVzc2FnZSggY29uc3QgY2hhciogIGZtdCwKKyAgICAgICAgICAgICAgLi4uICkKKyAgeworICAgIHN0YXRpYyBjaGFyICBidWZbODE5Ml07CisgICAgdmFfbGlzdCAgICAgIGFwOworCisKKyAgICB2YV9zdGFydCggYXAsIGZtdCApOworICAgIHZwcmludGYoIGZtdCwgYXAgKTsKKyAgICAvKiBzZW5kIHRoZSBzdHJpbmcgdG8gdGhlIGRlYnVnZ2VyIGFzIHdlbGwgKi8KKyAgICB2c3ByaW50ZiggYnVmLCBmbXQsIGFwICk7CisgICAgT3V0cHV0RGVidWdTdHJpbmdBKCBidWYgKTsKKyAgICB2YV9lbmQoIGFwICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9QYW5pYyggY29uc3QgY2hhciogIGZtdCwKKyAgICAgICAgICAgIC4uLiApCisgIHsKKyAgICBzdGF0aWMgY2hhciAgYnVmWzgxOTJdOworICAgIHZhX2xpc3QgICAgICBhcDsKKworCisgICAgdmFfc3RhcnQoIGFwLCBmbXQgKTsKKyAgICB2c3ByaW50ZiggYnVmLCBmbXQsIGFwICk7CisgICAgT3V0cHV0RGVidWdTdHJpbmdBKCBidWYgKTsKKyAgICB2YV9lbmQoIGFwICk7CisKKyAgICBleGl0KCBFWElUX0ZBSUxVUkUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggaW50ICkKKyAgRlRfVGhyb3coIEZUX0Vycm9yICAgICBlcnJvciwKKyAgICAgICAgICAgIGludCAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGUgKQorICB7CisgICAgRlRfVU5VU0VEKCBlcnJvciApOworICAgIEZUX1VOVVNFRCggbGluZSApOworICAgIEZUX1VOVVNFRCggZmlsZSApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworCisgIC8qIGFycmF5IG9mIHRyYWNlIGxldmVscywgaW5pdGlhbGl6ZWQgdG8gMCAqLworICBpbnQgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9jb3VudF07CisKKyAgLyogZGVmaW5lIGFycmF5IG9mIHRyYWNlIHRvZ2dsZSBuYW1lcyAqLworI2RlZmluZSBGVF9UUkFDRV9ERUYoIHggKSAgI3ggLAorCisgIHN0YXRpYyBjb25zdCBjaGFyKiAgZnRfdHJhY2VfdG9nZ2xlc1t0cmFjZV9jb3VudCArIDFdID0KKyAgeworI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJBQ0VfSAorICAgIE5VTEwKKyAgfTsKKworI3VuZGVmIEZUX1RSQUNFX0RFRgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbml0aWFsaXplIHRoZSB0cmFjaW5nIHN1Yi1zeXN0ZW0uICBUaGlzIGlzIGRvbmUgYnkgcmV0cmlldmluZyB0aGUgICAgKi8KKyAgLyogdmFsdWUgb2YgdGhlICJGVDJfREVCVUciIGVudmlyb25tZW50IHZhcmlhYmxlLiAgSXQgbXVzdCBiZSBhIGxpc3Qgb2YgICovCisgIC8qIHRvZ2dsZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIGA7JyBvciBgLCcuICBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgImFueTozIG1lbW9yeTo2IHN0cmVhbTo1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIHdpbGwgcmVxdWVzdCB0aGF0IGFsbCBsZXZlbHMgYmUgc2V0IHRvIDMsIGV4Y2VwdCB0aGUgdHJhY2UgbGV2ZWwgKi8KKyAgLyogZm9yIHRoZSBtZW1vcnkgYW5kIHN0cmVhbSBjb21wb25lbnRzIHdoaWNoIGFyZSBzZXQgdG8gNiBhbmQgNSwgICAgICAgICovCisgIC8qIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU2VlIHRoZSBmaWxlIDxpbnRlcm5hbC9mdHRyYWNlLmg+IGZvciBkZXRhaWxzIG9mIHRoZSBhdmFpbGFibGUgdG9nZ2xlICovCisgIC8qIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2OyAwIG1lYW5zIHF1aWV0IChleGNlcHQgZm9yIHNlcmlvdXMgICovCisgIC8qIHJ1bnRpbWUgZXJyb3JzKSwgYW5kIDYgbWVhbnMgX3ZlcnlfIHZlcmJvc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBmdF9kZWJ1Z19pbml0KCB2b2lkICkKKyAgeworICAgIGNvbnN0IGNoYXIqICBmdDJfZGVidWcgPSBnZXRlbnYoICJGVDJfREVCVUciICk7CisKKworICAgIGlmICggZnQyX2RlYnVnICkKKyAgICB7CisgICAgICBjb25zdCBjaGFyKiAgcCA9IGZ0Ml9kZWJ1ZzsKKyAgICAgIGNvbnN0IGNoYXIqICBxOworCisKKyAgICAgIGZvciAoIDsgKnA7IHArKyApCisgICAgICB7CisgICAgICAgIC8qIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBzZXBhcmF0b3JzICovCisgICAgICAgIGlmICggKnAgPT0gJyAnIHx8ICpwID09ICdcdCcgfHwgKnAgPT0gJywnIHx8ICpwID09ICc7JyB8fCAqcCA9PSAnPScgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIHJlYWQgdG9nZ2xlIG5hbWUsIGZvbGxvd2VkIGJ5ICc6JyAqLworICAgICAgICBxID0gcDsKKyAgICAgICAgd2hpbGUgKCAqcCAmJiAqcCAhPSAnOicgKQorICAgICAgICAgIHArKzsKKworICAgICAgICBpZiAoICEqcCApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCAqcCA9PSAnOicgJiYgcCA+IHEgKQorICAgICAgICB7CisgICAgICAgICAgaW50ICBuLCBpLCBsZW4gPSAoaW50KSggcCAtIHEgKTsKKyAgICAgICAgICBpbnQgIGxldmVsID0gLTEsIGZvdW5kID0gLTE7CisKKworICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApCisgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciogIHRvZ2dsZSA9IGZ0X3RyYWNlX3RvZ2dsZXNbbl07CisKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggdG9nZ2xlW2ldICE9IHFbaV0gKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGkgPT0gbGVuICYmIHRvZ2dsZVtpXSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm91bmQgPSBuOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiByZWFkIGxldmVsICovCisgICAgICAgICAgcCsrOworICAgICAgICAgIGlmICggKnAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7CisgICAgICAgICAgICBpZiAoIGxldmVsIDwgMCB8fCBsZXZlbCA+IDcgKQorICAgICAgICAgICAgICBsZXZlbCA9IC0xOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggZm91bmQgPj0gMCAmJiBsZXZlbCA+PSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGZvdW5kID09IHRyYWNlX2FueSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgImFueSIgKi8KKyAgICAgICAgICAgICAgZm9yICggbiA9IDA7IG4gPCB0cmFjZV9jb3VudDsgbisrICkKKyAgICAgICAgICAgICAgICBmdF90cmFjZV9sZXZlbHNbbl0gPSBsZXZlbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW2ZvdW5kXSA9IGxldmVsOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyNlbHNlICAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgZnRfZGVidWdfaW5pdCggdm9pZCApCisgIHsKKyAgICAvKiBub3RoaW5nICovCisgIH0KKworCisjZW5kaWYgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS5zbG4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzMzNDVkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS5zbG4KQEAgLTAsMCArMSwzMSBAQAorTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOS4wMA0KKyMgVmlzdWFsIFN0dWRpbyAyMDA1DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJmcmVldHlwZSIsICJmcmVldHlwZS52Y3Byb2oiLCAiezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0iDQorRW5kUHJvamVjdA0KK0dsb2JhbA0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KKwkJTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIgPSBMSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyID0gTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQlMSUIgRGVidWd8V2luMzIgPSBMSUIgRGVidWd8V2luMzINCisJCUxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIgPSBMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQlMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiA9IExJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQlMSUIgUmVsZWFzZXxXaW4zMiA9IExJQiBSZWxlYXNlfFdpbjMyDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnIE11bHRpdGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMi5CdWlsZC4wID0gRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KKwlFbmRHbG9iYWxTZWN0aW9uDQorRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2ogYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjUyYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2oKQEAgLTAsMCArMSw2NDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0IFByb2plY3RUeXBlPSJWaXN1YWwgQysrIiBWZXJzaW9uPSI4LjAwIiBOYW1lPSJmcmVldHlwZSIgUHJvamVjdEdVSUQ9Ins3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9IiBUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiPg0KKyAgPFBsYXRmb3Jtcz4NCisgICAgPFBsYXRmb3JtIE5hbWU9IldpbjMyIiAvPg0KKyAgPC9QbGF0Zm9ybXM+DQorICA8VG9vbEZpbGVzPg0KKyAgPC9Ub29sRmlsZXM+DQorICA8Q29uZmlndXJhdGlvbnM+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWSIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjIiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI2LmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWSIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI2TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDRnhDb3BUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICA8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiIENvbmZpZ3VyYXRpb25UeXBlPSI0IiBJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiIFVzZU9mTUZDPSIwIiBBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiIENoYXJhY3RlclNldD0iMiI+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01JRExUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWSIgU3RyaW5nUG9vbGluZz0idHJ1ZSIgUnVudGltZUxpYnJhcnk9IjAiIEVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIiBQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI2U1QubGliIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgICA8Q29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiIgT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWciIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnIiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBSdW50aW1lTGlicmFyeT0iMyIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjZfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiIE91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0IiBJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdCIgQ29uZmlndXJhdGlvblR5cGU9IjQiIEluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIgVXNlT2ZNRkM9IjAiIEFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIgQ2hhcmFjdGVyU2V0PSIyIj4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTUlETFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgUnVudGltZUxpYnJhcnk9IjEiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiIFByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCIgQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIiBQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyIgV2FybmluZ0xldmVsPSI0IiBEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIiBDb21waWxlQXM9IjAiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI2U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNGeENvcFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiIC8+DQorICAgIDwvQ29uZmlndXJhdGlvbj4NCisgICAgPENvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiIgT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQiIEludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210IiBDb25maWd1cmF0aW9uVHlwZT0iNCIgSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIiBVc2VPZk1GQz0iMCIgQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIiBDaGFyYWN0ZXJTZXQ9IjIiPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiIEdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBSdW50aW1lTGlicmFyeT0iMSIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIE9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iIFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIiBXYXJuaW5nTGV2ZWw9IjQiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiIENvbXBpbGVBcz0iMCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjZNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIgLz4NCisgICAgPC9Db25maWd1cmF0aW9uPg0KKyAgPC9Db25maWd1cmF0aW9ucz4NCisgIDxSZWZlcmVuY2VzPg0KKyAgPC9SZWZlcmVuY2VzPg0KKyAgPEZpbGVzPg0KKyAgICA8RmlsdGVyIE5hbWU9IlNvdXJjZSBGaWxlcyIgRmlsdGVyPSJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ij4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjYWNoZVxmdGNhY2hlLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlxmdGRlYnVnLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZzdHlwZS5jIj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYyI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xsendcZnRsencuYyI+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiPg0KKyAgICAgIDwvRmlsZT4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMiPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICA8L0ZpbGU+DQorICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jIj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWx0ZXIgTmFtZT0iRlRfTU9EVUxFUyI+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmJveC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYyI+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnR0eXBlMS5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnR3aW5mbnQuYyI+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG90dmFsLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jIj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyI+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyI+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgPC9GaWxlPg0KKyAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgIDwvRmlsZT4NCisgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCisgICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KKyAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCisgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KKyAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQorICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQorICAgICAgICA8L0ZpbGU+DQorICAgICAgPC9GaWx0ZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIE5hbWU9IkhlYWRlciBGaWxlcyIgRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sIj4NCisgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRjb25maWcuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRoZWFkZXIuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRtb2R1bGUuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRvcHRpb24uaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRzdGRsaWIuaCI+DQorICAgICAgPC9GaWxlPg0KKyAgICA8L0ZpbHRlcj4NCisgIDwvRmlsZXM+DQorICA8R2xvYmFscz4NCisgIDwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDdlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPGh0bWw+Cis8aGVhZGVyPgorPHRpdGxlPgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVlMuTkVUJm5ic3A7MjAwNQorPC90aXRsZT4KKworPGJvZHk+Cis8aDE+CisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWUy5ORVQmbmJzcDsyMDA1Cis8L2gxPgorCis8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgQysrLCBuYW1lZAorPHR0PmZyZWV0eXBlLnZjcHJvajwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkIDx0dD5mcmVldHlwZS5zbG48L3R0Pi4gIEl0Citjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjYgc291cmNlczo8L3A+CisKKzx1bD4KKyAgPHByZT4KKyAgICBmcmVldHlwZTI2LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjZNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+Cis8L3VsPgorCis8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKK2FyY2hpdmVzIGFyZSBhbHJlYWR5IHN0b3JlZCB0aGlzIHdheSwgc28gbm8gZnVydGhlciBhY3Rpb24gaXMgcmVxdWlyZWQuICBJZgoreW91IHVzZSBzb21lIDx0dD4udGFyLip6PC90dD4gYXJjaGl2ZXMsIGJlIHN1cmUgdG8gY29uZmlndXJlIHlvdXIgZXh0cmFjdGluZwordG9vbCB0byBjb252ZXJ0IHRoZSBsaW5lIGVuZGluZ3MuICBGb3IgZXhhbXBsZSwgd2l0aCA8YQoraHJlZj0iaHR0cDovL3d3dy53aW56aXAuY29tIj5XaW5aaXA8L2E+LCB5b3Ugc2hvdWxkIGFjdGl2YXRlIHRoZSA8aXQ+VEFSCitmaWxlIHNtYXJ0IENSL0xGIENvbnZlcnNpb248L2l0PiBvcHRpb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvbnNpZGVyCit1c2luZyB0aGUgPHR0PnVuaXgyZG9zPC90dD4gb3IgPHR0PnUyZDwvdHQ+IHV0aWxpdGllcyB0aGF0IGFyZSBmbG9hdGluZworYXJvdW5kLCB3aGljaCBzcGVjaWZpY2FsbHkgZGVhbCB3aXRoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLgorCis8cD5CdWlsZCBkaXJlY3RvcmllcyBhcmUgcGxhY2VkIGluIHRoZSB0b3AtbGV2ZWwgPHR0Pm9ianM8L3R0PgorZGlyZWN0b3J5LjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS5zbG4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUyMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS5zbG4KQEAgLTAsMCArMSwzMSBAQAorTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDANCisjIFZpc3VhbCBTdHVkaW8gMjAwOA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZnJlZXR5cGUiLCAiZnJlZXR5cGUudmNwcm9qIiwgIns3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9Ig0KK0VuZFByb2plY3QNCitHbG9iYWwNCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCisJCUxJQiBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyID0gTElCIERlYnVnIE11bHRpdGhyZWFkZWR8V2luMzINCisJCUxJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiA9IExJQiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJTElCIERlYnVnfFdpbjMyID0gTElCIERlYnVnfFdpbjMyDQorCQlMSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyID0gTElCIFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJTElCIFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIgPSBMSUIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJTElCIFJlbGVhc2V8V2luMzIgPSBMSUIgUmVsZWFzZXxXaW4zMg0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMi5CdWlsZC4wID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uTElCIERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBEZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkxJQiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5MSUIgUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCisJRW5kR2xvYmFsU2VjdGlvbg0KK0VuZEdsb2JhbA0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4ZmU3YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qCkBAIC0wLDAgKzEsMjE4MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjksMDAiDQorCU5hbWU9ImZyZWV0eXBlIg0KKwlQcm9qZWN0R1VJRD0iezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0iDQorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyNi5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyNlNULmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdCINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyNlNUX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI2TVRfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmdGRlYnVnLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2FzcC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xnemlwXGZ0Z3ppcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xsendcZnRsencuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeXN0ZW0uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9IkZUX01PRFVMRVMiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYm94LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dHlwZTEuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHdpbmZudC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwY2ZccGNmLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwZnJccGZyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNoaW50ZXJccHNoaW50ZXIuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzbmFtZXNccHNtb2R1bGUuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNmbnRcc2ZudC5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjaWRcdHlwZTFjaWQuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGZ0MmJ1aWxkLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdGNvbmZpZy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRoZWFkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0bW9kdWxlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG9wdGlvbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRzdGRsaWIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzMzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbApAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKzxoZWFkZXI+Cis8dGl0bGU+CisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWUy5ORVQmbmJzcDsyMDA4Cis8L3RpdGxlPgorCis8Ym9keT4KKzxoMT4KKyAgRnJlZVR5cGUmbmJzcDsyIFByb2plY3QgRmlsZXMgZm9yIFZTLk5FVCZuYnNwOzIwMDgKKzwvaDE+CisKKzxwPlRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHByb2plY3QgZmlsZXMgZm9yIFZpc3VhbCBDKyssIG5hbWVkCis8dHQ+ZnJlZXR5cGUudmNwcm9qPC90dD4sIGFuZCBWaXN1YWwgU3R1ZGlvLCBjYWxsZWQgPHR0PmZyZWV0eXBlLnNsbjwvdHQ+LiAgSXQKK2NvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuNiBzb3VyY2VzOjwvcD4KKworPHVsPgorICA8cHJlPgorICAgIGZyZWV0eXBlMjYubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjZfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjZNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyNk1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKzwvdWw+CisKKzxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUAorYXJjaGl2ZXMgYXJlIGFscmVhZHkgc3RvcmVkIHRoaXMgd2F5LCBzbyBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZC4gIElmCit5b3UgdXNlIHNvbWUgPHR0Pi50YXIuKno8L3R0PiBhcmNoaXZlcywgYmUgc3VyZSB0byBjb25maWd1cmUgeW91ciBleHRyYWN0aW5nCit0b29sIHRvIGNvbnZlcnQgdGhlIGxpbmUgZW5kaW5ncy4gIEZvciBleGFtcGxlLCB3aXRoIDxhCitocmVmPSJodHRwOi8vd3d3LndpbnppcC5jb20iPldpblppcDwvYT4sIHlvdSBzaG91bGQgYWN0aXZhdGUgdGhlIDxpdD5UQVIKK2ZpbGUgc21hcnQgQ1IvTEYgQ29udmVyc2lvbjwvaXQ+IG9wdGlvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgY29uc2lkZXIKK3VzaW5nIHRoZSA8dHQ+dW5peDJkb3M8L3R0PiBvciA8dHQ+dTJkPC90dD4gdXRpbGl0aWVzIHRoYXQgYXJlIGZsb2F0aW5nCithcm91bmQsIHdoaWNoIHNwZWNpZmljYWxseSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0uCisKKzxwPkJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBwbGFjZWQgaW4gdGhlIHRvcC1sZXZlbCA8dHQ+b2JqczwvdHQ+CitkaXJlY3RvcnkuPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnNsbiBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDE3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnNsbgpAQCAtMCwwICsxLDUwIEBACivvu78NCitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMA0KKyMgVmlzdWFsIFN0dWRpbyBFeHByZXNzIDIwMTIgZm9yIFdpbmRvd3MgRGVza3RvcA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZnJlZXR5cGUiLCAiZnJlZXR5cGUudmN4cHJvaiIsICJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQNCisJCURlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQlEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCA9IERlYnVnIE11bHRpdGhyZWFkZWR8eDY0DQorCQlEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQlEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQNCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQorCQlSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzINCisJCVJlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0DQorCQlSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NA0KKwlFbmRHbG9iYWxTZWN0aW9uDQorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NC5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQuQnVpbGQuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0DQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NC5CdWlsZC4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQNCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQorCUVuZEdsb2JhbFNlY3Rpb24NCitFbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnVzZXIucHJvcHMgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnVzZXIucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0ZGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudXNlci5wcm9wcwpAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzwhLS0NCisgKiBmcmVldHlwZS51c2VyLnByb3BzDQorICoNCisgKg0KKyAqIFlvdSBjYW4gc3BlY2lmeSBjdXN0b20gb3B0aW9ucyBoZXJlIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHByb2plY3QgZmlsZS4NCisgKg0KKyAqIE11bHRpcGxlIGVudHJpZXMgd2l0aGluIGVhY2ggcHJvcGVydHkgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zICg7KS4NCisgKg0KKyAqIE5PVEU6IElmIHlvdSB3YW50IHRvIGxpbmsgYWdhaW5zdCB6bGliLCBsaWJwbmcsIGJ6aXAyIG9yIGhhcmZidXp6LCB5b3UNCisgKiAgICAgICBzaG91bGQgYWx0ZXIgdGhlc2UgdmFsdWVzIGFwcHJvcHJpYXRlbHkuDQorIC0tPg0KKw0KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIg0KKyAgICAgICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KKw0KKyAgICA8IS0tDQorICAgICAqIGA7Jy1zZXBhcmF0ZWQgbGlzdCBvZiBzeW1ib2xzIHRvICNkZWZpbmUNCisgICAgIC0tPg0KKyAgICA8VXNlckRlZmluZXM+PC9Vc2VyRGVmaW5lcz4NCisNCisgICAgPCEtLQ0KKyAgICAgKiBwYXRoIHdoZXJlIHlvdXIgY3VzdG9tIGBmdG9wdGlvbi5oJyBsaXZlczsNCisgICAgICogdGhpcyBpcyBzZWFyY2hlZCBCRUZPUkUgYW55IG90aGVyIHBhdGgNCisgICAgIC0tPg0KKyAgICA8IS0tIDxVc2VyT3B0aW9uRGlyZWN0b3J5Pi4uXC4uXC4uXGRldmVsPC9Vc2VyT3B0aW9uRGlyZWN0b3J5PiAtLT4NCisgICAgPFVzZXJPcHRpb25EaXJlY3Rvcnk+PC9Vc2VyT3B0aW9uRGlyZWN0b3J5Pg0KKw0KKyAgICA8IS0tDQorICAgICAqIGA7Jy1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBhZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMsDQorICAgICAqIGUuZy4sIHdoZXJlIHRvIGZpbmQgemxpYi5oLCBwbmcuaCwgZXRjLjsNCisgICAgICogdGhpcyBpcyBzZWFyY2hlZCBBRlRFUiBhbnkgb3RoZXIgcGF0aA0KKyAgICAgLS0+DQorICAgIDwhLS0gPFVzZXJJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cemxpYi0xLjIuODsuLlwuLlwuLlwuLlxsaWJwbmctMS42LjEyPC9Vc2VySW5jbHVkZURpcmVjdG9yaWVzPiAtLT4NCisgICAgPFVzZXJJbmNsdWRlRGlyZWN0b3JpZXM+PC9Vc2VySW5jbHVkZURpcmVjdG9yaWVzPg0KKw0KKyAgICA8IS0tDQorICAgICAqIGA7Jy1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBhZGRpdGlvbmFsIGxpYnJhcnkgZGlyZWN0b3JpZXMsDQorICAgICAqIGUuZy4sIHdoZXJlIHRvIGZpbmQgemxpYi5saWIsIGxpYnBuZy5saWIsIGV0Yy4NCisgICAgIC0tPg0KKyAgICA8IS0tIDxVc2VyTGlicmFyeURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHpsaWItMS4yLjg7Li5cLi5cLi5cLi5cbGlicG5nLTEuNi4xMjwvVXNlckxpYnJhcnlEaXJlY3Rvcmllcz4gLS0+DQorICAgIDxVc2VyTGlicmFyeURpcmVjdG9yaWVzPjwvVXNlckxpYnJhcnlEaXJlY3Rvcmllcz4NCisNCisgICAgPCEtLQ0KKyAgICAgKiBgOyctc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBsaW5rZXIgZGVwZW5kZW5jaWVzLA0KKyAgICAgKiBlLmcuLCB6bGliLmxpYiwgbGlicG5nLmxpYiwgZXRjLg0KKyAgICAgLS0+DQorICAgIDwhLS0gPFVzZXJEZXBlbmRlbmNpZXM+emxpYi5saWI7bGlicG5nMTYubGliPC9Vc2VyRGVwZW5kZW5jaWVzPiAtLT4NCisgICAgPFVzZXJEZXBlbmRlbmNpZXM+PC9Vc2VyRGVwZW5kZW5jaWVzPg0KKw0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKw0KKyAgPCEtLQ0KKyAgICogRXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciB4NjQgZGVidWcgYnVpbGQgb25seQ0KKyAgIC0tPg0KKw0KKyAgPCEtLQ0KKyAgICA8UHJvcGVydHlHcm91cCBMYWJlbD0iRGVidWdQcm9wZXJ0aWVzIg0KKyAgICAgICAgICAgICAgICAgICBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICAgIDxVc2VyRGVmaW5lcz5FTkFCTEVfREVCVUdfSEVMUEVSO0VOQUJMRV9ERUJVR19MT0dHSU5HPC9Vc2VyRGVmaW5lcz4NCisgICAgICA8VXNlck9wdGlvbkRpcmVjdG9yeT5jb25maWdcZGVidWc8L1VzZXJPcHRpb25EaXJlY3Rvcnk+DQorICAgICAgPFVzZXJJbmNsdWRlRGlyZWN0b3JpZXM+QzpcbXlkZWJ1Z2hlbHBcaW5jbHVkZTwvVXNlckluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8VXNlckxpYnJhcnlEaXJlY3Rvcmllcz5DOlxteWRlYnVnaGVscFxsaWI8L1VzZXJMaWJyYXJ5RGlyZWN0b3JpZXM+DQorICAgICAgPFVzZXJEZXBlbmRlbmNpZXM+ZGhlbHBlcjY0LmxpYjwvVXNlckRlcGVuZGVuY2llcz4NCisgICAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgIC0tPg0KKzwvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ogYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhOGNkMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvagpAQCAtMCwwICsxLDE3MTggQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgTXVsdGl0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnIE11bHRpdGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgU2luZ2xldGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgU2luZ2xldGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZSBNdWx0aXRocmVhZGVkPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIE11bHRpdGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIFNpbmdsZXRocmVhZGVkPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZSBTaW5nbGV0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KKyAgICA8UHJvamVjdEd1aWQ+ezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn08L1Byb2plY3RHdWlkPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMDA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMDA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEwMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEwMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCisgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQorICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEwMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cD4NCisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCisgICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCisgICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQorICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQorICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIiAvPg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyIgLz4NCisgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyIgLz4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZyZWV0eXBlMjZkPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmZyZWV0eXBlMjZkPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5mcmVldHlwZTI2TVRkPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+ZnJlZXR5cGUyNk1UZDwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPmZyZWV0eXBlMjZTVGQ8L1RhcmdldE5hbWU+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+ZnJlZXR5cGUyNlNUZDwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZnJlZXR5cGUyNjwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZyZWV0eXBlMjY8L1RhcmdldE5hbWU+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+ZnJlZXR5cGUyNk1UPC9UYXJnZXROYW1lPg0KKyAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5mcmVldHlwZTI2TVQ8L1RhcmdldE5hbWU+DQorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPmZyZWV0eXBlMjZTVDwvVGFyZ2V0TmFtZT4NCisgICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPmZyZWV0eXBlMjZTVDwvVGFyZ2V0TmFtZT4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChTb2x1dGlvbkRpcilcZnJlZXR5cGUudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoU29sdXRpb25EaXIpXGZyZWV0eXBlLnVzZXIucHJvcHMnKSIgTGFiZWw9IlVzZXJQcm9wZXJ0aWVzIiAvPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDAwMTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPE11bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+dHJ1ZTwvTXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj4NCisgICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5EaXNhYmxlZDwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4NCisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFVzZXJMaWJyYXJ5RGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpYj4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KKyAgICAgIDxDb21waWxlQXNNYW5hZ2VkPmZhbHNlPC9Db21waWxlQXNNYW5hZ2VkPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NUb0ZpbGU+ZmFsc2U8L1ByZXByb2Nlc3NUb0ZpbGU+DQorICAgICAgPFByZXByb2Nlc3NTdXBwcmVzc0xpbmVOdW1iZXJzPmZhbHNlPC9QcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KKyAgICAgIDxDb21waWxlQXNNYW5hZ2VkPmZhbHNlPC9Db21waWxlQXNNYW5hZ2VkPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzVG9GaWxlPmZhbHNlPC9QcmVwcm9jZXNzVG9GaWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycz5mYWxzZTwvUHJlcHJvY2Vzc1N1cHByZXNzTGluZU51bWJlcnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDAwMTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPE11bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+dHJ1ZTwvTXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj4NCisgICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5EaXNhYmxlZDwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFVzZXJMaWJyYXJ5RGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpYj4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPnRydWU8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQorICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+RGlzYWJsZWQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliPg0KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDAwMTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPE11bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+dHJ1ZTwvTXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj4NCisgICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5EaXNhYmxlZDwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFVzZXJMaWJyYXJ5RGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KKyAgICA8L0xpYj4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQorICAgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj5mYWxzZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICAgIDxFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PlN0cmVhbWluZ1NJTURFeHRlbnNpb25zMjwvRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD4NCisgICAgICA8RmxvYXRpbmdQb2ludEV4Y2VwdGlvbnM+ZmFsc2U8L0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zPg0KKyAgICAgIDxDcmVhdGVIb3RwYXRjaGFibGVJbWFnZT5mYWxzZTwvQ3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+DQorICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+dHJ1ZTwvRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+DQorICAgICAgPEZhdm9yU2l6ZU9yU3BlZWQ+TmVpdGhlcjwvRmF2b3JTaXplT3JTcGVlZD4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24+dHJ1ZTwvTGlua1RpbWVDb2RlR2VuZXJhdGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQorICAgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj5mYWxzZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICAgIDxFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PlN0cmVhbWluZ1NJTURFeHRlbnNpb25zMjwvRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD4NCisgICAgICA8RmxvYXRpbmdQb2ludEV4Y2VwdGlvbnM+ZmFsc2U8L0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zPg0KKyAgICAgIDxDcmVhdGVIb3RwYXRjaGFibGVJbWFnZT5mYWxzZTwvQ3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+DQorICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+dHJ1ZTwvRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+DQorICAgICAgPEZhdm9yU2l6ZU9yU3BlZWQ+TmVpdGhlcjwvRmF2b3JTaXplT3JTcGVlZD4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWI+DQorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+DQorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24+dHJ1ZTwvTGlua1RpbWVDb2RlR2VuZXJhdGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPg0KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkZ1bGw8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KKyAgICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+ZmFsc2U8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgICA8RW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD5TdHJlYW1pbmdTSU1ERXh0ZW5zaW9uczI8L0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+DQorICAgICAgPEZsb2F0aW5nUG9pbnRFeGNlcHRpb25zPmZhbHNlPC9GbG9hdGluZ1BvaW50RXhjZXB0aW9ucz4NCisgICAgICA8Q3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+ZmFsc2U8L0NyZWF0ZUhvdHBhdGNoYWJsZUltYWdlPg0KKyAgICAgIDxSdW50aW1lVHlwZUluZm8+ZmFsc2U8L1J1bnRpbWVUeXBlSW5mbz4NCisgICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICAgIDwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4NCisgICAgICA8RmF2b3JTaXplT3JTcGVlZD5OZWl0aGVyPC9GYXZvclNpemVPclNwZWVkPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkZ1bGw8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KKyAgICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+ZmFsc2U8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgICA8RW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD5TdHJlYW1pbmdTSU1ERXh0ZW5zaW9uczI8L0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+DQorICAgICAgPEZsb2F0aW5nUG9pbnRFeGNlcHRpb25zPmZhbHNlPC9GbG9hdGluZ1BvaW50RXhjZXB0aW9ucz4NCisgICAgICA8Q3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+ZmFsc2U8L0NyZWF0ZUhvdHBhdGNoYWJsZUltYWdlPg0KKyAgICAgIDxSdW50aW1lVHlwZUluZm8+ZmFsc2U8L1J1bnRpbWVUeXBlSW5mbz4NCisgICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCisgICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPg0KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICAgIDwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4NCisgICAgICA8RmF2b3JTaXplT3JTcGVlZD5OZWl0aGVyPC9GYXZvclNpemVPclNwZWVkPg0KKyAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGU+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4NCisgICAgPExpYj4NCisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8T3B0aW1pemF0aW9uPkZ1bGw8L09wdGltaXphdGlvbj4NCisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KKyAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KKyAgICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+ZmFsc2U8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCisgICAgICA8RW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD5TdHJlYW1pbmdTSU1ERXh0ZW5zaW9uczI8L0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+DQorICAgICAgPEZsb2F0aW5nUG9pbnRFeGNlcHRpb25zPmZhbHNlPC9GbG9hdGluZ1BvaW50RXhjZXB0aW9ucz4NCisgICAgICA8Q3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+ZmFsc2U8L0NyZWF0ZUhvdHBhdGNoYWJsZUltYWdlPg0KKyAgICAgIDxDb21waWxlQXNNYW5hZ2VkPmZhbHNlPC9Db21waWxlQXNNYW5hZ2VkPg0KKyAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCisgICAgICA8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDxFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPnRydWU8L0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+DQorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgICAgPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPg0KKyAgICAgIDxGYXZvclNpemVPclNwZWVkPk5laXRoZXI8L0Zhdm9yU2l6ZU9yU3BlZWQ+DQorICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPFJlc291cmNlQ29tcGlsZT4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KKyAgICA8TGliIC8+DQorICAgIDxMaWI+DQorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24+dHJ1ZTwvTGlua1RpbWVDb2RlR2VuZXJhdGlvbj4NCisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQorICAgIDwvTGliPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQorICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQorICAgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj5mYWxzZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KKyAgICAgIDxFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PlN0cmVhbWluZ1NJTURFeHRlbnNpb25zMjwvRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD4NCisgICAgICA8RmxvYXRpbmdQb2ludEV4Y2VwdGlvbnM+ZmFsc2U8L0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zPg0KKyAgICAgIDxDcmVhdGVIb3RwYXRjaGFibGVJbWFnZT5mYWxzZTwvQ3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+DQorICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQorICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KKyAgICAgIDwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQorICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+dHJ1ZTwvRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz4NCisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCisgICAgICA8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+DQorICAgICAgPEZhdm9yU2l6ZU9yU3BlZWQ+TmVpdGhlcjwvRmF2b3JTaXplT3JTcGVlZD4NCisgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8UmVzb3VyY2VDb21waWxlPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCisgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQorICAgIDxMaWIgLz4NCisgICAgPExpYj4NCisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPg0KKyAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCisgICAgPC9MaWI+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmRmXGJkZi5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiaXRtYXAuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0ZGVidWcuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQorICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCisgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0ZnN0eXBlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnYXNwLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xnemlwXGZ0Z3ppcC5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xsendcZnRsencuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJib3guYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3ludGguYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHR5cGUxLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnR3aW5mbnQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGxjZGZpbC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG90dmFsLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwZnJccGZyLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBzYXV4XHBzYXV4LmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBzbmFtZXNccHNtb2R1bGUuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccmFzdGVyXHJhc3Rlci5jIj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYyI+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMiPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgPC9DbENvbXBpbGU+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmdDJidWlsZC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0Y29uZmlnLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRoZWFkZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG1vZHVsZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0b3B0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRzdGRsaWIuaCIgLz4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQorICA8L0ltcG9ydEdyb3VwPg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ouZmlsdGVycyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDE1NSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2I0YzE1ODkzLWVjMTEtNDkxZC05NTA3LTBhYzE4NGY5Y2M3OH08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDwvRXh0ZW5zaW9ucz4NCisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXEZUX01PRFVMRVMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0ZDNlNGVmZi0zZmJjLTRiMjAtYjQxMy0yNzQzYjIzYjcxMDl9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntlNmNmNmEwZi0wNDA0LTQwMjQtOGJmOC1mZjViMjlmMzU2NTd9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw8L0V4dGVuc2lvbnM+DQorICAgIDwvRmlsdGVyPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xjYWNoZVxmdGNhY2hlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0ZGVidWcuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnYXNwLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmJveC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dHlwZTEuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHdpbmZudC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwY2ZccGNmLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBmclxwZnIuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccHNoaW50ZXJccHNoaW50ZXIuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccHNuYW1lc1xwc21vZHVsZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHNmbnRcc2ZudC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x0cnVldHlwZVx0cnVldHlwZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x0eXBlMVx0eXBlMS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xjaWRcdHlwZTFjaWQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHlwZTQyXHR5cGU0Mi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x3aW5mb250c1x3aW5mbnQuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmNsdWRlXGZ0MmJ1aWxkLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0Y29uZmlnLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0aGVhZGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0bW9kdWxlLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0b3B0aW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0c3RkbGliLmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgPC9JdGVtR3JvdXA+DQorPC9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U2NDJkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzxodG1sPgorPGhlYWRlcj4KKzx0aXRsZT4KKyAgRnJlZVR5cGUmbmJzcDsyIFByb2plY3QgRmlsZXMgZm9yIFZTLk5FVCZuYnNwOzIwMTAgb3IgbmV3ZXIKKzwvdGl0bGU+CisKKzxib2R5PgorPGgxPgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVlMuTkVUJm5ic3A7MjAxMCBvciBuZXdlcgorPC9oMT4KKworPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBwcm9qZWN0IGZpbGUgZm9yIFZpc3VhbCBDKysgKFZTLk5FVCZuYnNwOzIwMTAKK29yIG5ld2VyKSwgbmFtZWQgPHR0PmZyZWV0eXBlLnZjeHByb2o8L3R0PiwgYW5kIFZpc3VhbCBTdHVkaW8sIGNhbGxlZAorPHR0PmZyZWV0eXBlLnNsbjwvdHQ+LiAgSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUKK0ZyZWVUeXBlIDIuNiBzb3VyY2VzOjwvcD4KKworPHVsPgorICA8cHJlPgorZnJlZXR5cGUyNi5saWIgICAgIC0gcmVsZWFzZSBidWlsZAorZnJlZXR5cGUyNmQubGliICAgIC0gZGVidWcgYnVpbGQKK2ZyZWV0eXBlMjZTVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorZnJlZXR5cGUyNlNUZC5saWIgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCitmcmVldHlwZTI2TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorZnJlZXR5cGUyNk1UZC5saWIgIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKzwvdWw+CisKKzxwPkJvdGggV2luMzIgYW5kIHg2NCBidWlsZHMgYXJlIHN1cHBvcnRlZC48L3A+CisKKzxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUAorYXJjaGl2ZXMgYXJlIGFscmVhZHkgc3RvcmVkIHRoaXMgd2F5LCBzbyBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZC4gIElmCit5b3UgdXNlIHNvbWUgPHR0Pi50YXIuKno8L3R0PiBhcmNoaXZlcywgYmUgc3VyZSB0byBjb25maWd1cmUgeW91ciBleHRyYWN0aW5nCit0b29sIHRvIGNvbnZlcnQgdGhlIGxpbmUgZW5kaW5ncy4gIEZvciBleGFtcGxlLCB3aXRoIDxhCitocmVmPSJodHRwOi8vd3d3LndpbnppcC5jb20iPldpblppcDwvYT4sIHlvdSBzaG91bGQgYWN0aXZhdGUgdGhlIDxlbT5UQVIKK2ZpbGUgc21hcnQgQ1IvTEYgQ29udmVyc2lvbjwvZW0+IG9wdGlvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgY29uc2lkZXIKK3VzaW5nIHRoZSA8dHQ+dW5peDJkb3M8L3R0PiBvciA8dHQ+dTJkPC90dD4gdXRpbGl0aWVzIHRoYXQgYXJlIGZsb2F0aW5nCithcm91bmQsIHdoaWNoIHNwZWNpZmljYWxseSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0uCisKKzxwPkJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBwbGFjZWQgaW4gdGhlIHRvcC1sZXZlbCA8dHQ+b2Jqc1x2YzIwMTA8L3R0PgorZGlyZWN0b3J5LjwvcD4KKworPHA+Q3VzdG9taXphdGlvbiBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeSBpcyBkb25lIGJ5IGVkaXRpbmcgdGhlCis8dHQ+ZnRvcHRpb25zLmg8L3R0PiBoZWFkZXIgZmlsZSBpbiB0aGUgdG9wLWxldmVsIDx0dD5kZXZlbDwvdHQ+IHBhdGguCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvcHkgdGhlIGZpbGUgdG8gYW5vdGhlciBkaXJlY3RvcnkgYW5kIGNoYW5nZSB0aGUKK2luY2x1ZGUgZGlyZWN0b3J5IGluIDx0dD5mcmVldHlwZS51c2Vycy5wcm9wczwvdHQ+LjwvcD4KKworPHA+VG8gY29uZmlndXJlIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGxpa2UgPGVtPnpsaWI8L2VtPiBhbmQgPGVtPmxpYnBuZzwvZW0+LAorZWRpdCB0aGUgPHR0PmZyZWV0eXBlLnVzZXJzLnByb3BzPC90dD4gZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4gIEl0IGFsc28KK3NpbXBsaWZpZXMgYXV0b21hdGVkIChjb21tYW5kLWxpbmUpIGJ1aWxkcyB1c2luZyA8YQoraHJlZj0iaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RkMzkzNTc0JTI4dj12cy4xMDAlMjkuYXNweCI+bXNidWlsZDwvYT4uPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwMzEwNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcApAQCAtMCwwICsxLDQwMCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJmcmVldHlwZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNA0KKw0KK0NGRz1mcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFDQorIU1FU1NBR0UgTk1BS0UgL2YgImZyZWV0eXBlLm1hayIuDQorIU1FU1NBR0UNCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UNCishTUVTU0FHRSBOTUFLRSAvZiAiZnJlZXR5cGUubWFrIiBDRkc9ImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorIU1FU1NBR0UNCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgU2luZ2xldGhyZWFkZWQiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRQ0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXHJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZSINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9NRCAvWmEgL1c0IC9HWCAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvbm9sb2dvIC9aPG5vbmU+IC9ZWA0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9NRGQgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNl9ELmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImZyZWV0eXBlX19fV2luMzJfRGVidWdfTXVsdGl0aHJlYWRlZCINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJmcmVldHlwZV9fX1dpbjMyX0RlYnVnX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9aYSAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlxpbmNsdWRlXFwiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUX0ZMQVRfQ09NUElMRSIgL1lYIC9GRCAvR1ogL2MNCisjIFNVQlRSQUNUIEJBU0UgQ1BQIC9YDQorIyBBREQgQ1BQIC9NVGQgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjZfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVF9ELmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZV9tdCINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvWmEgL1czIC9HWCAvTzIgL0kgIi4uXGluY2x1ZGVcXCIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvRCAiRlRfRkxBVF9DT01QSUxFIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9NVCAvWmEgL1c0IC9HWCAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvbm9sb2dvIC9aPG5vbmU+IC9ZWA0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyNi5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVC5saWIiDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJmcmVldHlwZV9fX1dpbjMyX1JlbGVhc2VfU2luZ2xldGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX1NpbmdsZXRocmVhZGVkIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZV9zdCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9aYSAvVzQgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0ZEIC9jDQorIyBTVUJUUkFDVCBCQVNFIENQUCAvWVgNCisjIEFERCBDUFAgL1phIC9XNCAvR1ggL08yIC9JICIuLlwuLlwuLlxpbmNsdWRlIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJGVDJfQlVJTERfTElCUkFSWSIgL0ZEIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWjxub25lPiAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisjIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVC5saWIiDQorIyBTVUJUUkFDVCBMSUIzMiAvbm9sb2dvDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZnJlZXR5cGVfX19XaW4zMl9EZWJ1Z19TaW5nbGV0aHJlYWRlZCINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJmcmVldHlwZV9fX1dpbjMyX0RlYnVnX1NpbmdsZXRocmVhZGVkIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXGRlYnVnX3N0Ig0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlxvYmpzXGRlYnVnX3N0Ig0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTURkIC9aYSAvVzQgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJGVF9ERUJVR19MRVZFTF9FUlJPUiIgL0QgIkZUX0RFQlVHX0xFVkVMX1RSQUNFIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBCQVNFIENQUCAvWCAvWVgNCisjIEFERCBDUFAgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2X0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1RfRC5saWIiDQorDQorIUVORElGDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgRGVidWciDQorIyBOYW1lICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIE11bHRpdGhyZWFkZWQiDQorIyBOYW1lICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgTXVsdGl0aHJlYWRlZCINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmRmXGJkZi5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiYm94LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiZGYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGZ0ZGVidWcuYw0KKyMgQUREIENQUCAvWmUNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnR0eXBlMS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHBjZlxwY2YuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNccGZyXHBmci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdGNvbmZpZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0aGVhZGVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRtb2R1bGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG9wdGlvbi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0c3RkbGliLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzdyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ5ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHN3CkBAIC0wLDAgKzEsMjkgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImZyZWV0eXBlIj0uXGZyZWV0eXBlLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5zbG4gYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2NGJlMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnNsbgpAQCAtMCwwICsxLDMxIEBACitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwDQorIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImZyZWV0eXBlIiwgImZyZWV0eXBlLnZjcHJvaiIsICJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCitFbmRQcm9qZWN0DQorR2xvYmFsDQorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQorCQlEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KKwkJUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQlSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQorCUVuZEdsb2JhbFNlY3Rpb24NCitFbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2ogYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzNDk2NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvagpAQCAtMCwwICsxLDIxNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI4LjAwIg0KKwlOYW1lPSJmcmVldHlwZSINCisJUHJvamVjdEdVSUQ9Ins3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9Ig0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdCINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1QubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWciDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWciDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNl9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNlNUX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGF1dG9maXRcYXV0b2ZpdC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2ZmXGNmZi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmFzZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZzdHlwZS5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnYXNwLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZ0ZGVidWcuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRpbml0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0iRlRfTU9EVUxFUyINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJib3guYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwZnIuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5bnRoLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnR0eXBlMS5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGF0ZW50LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBmclxwZnIuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzYXV4XHBzYXV4LmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNuYW1lc1xwc21vZHVsZS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccmFzdGVyXHJhc3Rlci5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0cnVldHlwZVx0cnVldHlwZS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHlwZTQyXHR5cGU0Mi5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0Y29uZmlnLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdGhlYWRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRtb2R1bGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0b3B0aW9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdHN0ZGxpYi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWI4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGhlYWRlcj4KKzx0aXRsZT4KKyAgRnJlZVR5cGUmbmJzcDsyIFByb2plY3QgRmlsZXMgZm9yIFZpc3VhbCZuYnNwO0MrKyBhbmQgVlMuTkVUJm5ic3A7MjAwNQorPC90aXRsZT4KKworPGJvZHk+Cis8aDE+CisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWaXN1YWwmbmJzcDtDKysgYW5kIFZTLk5FVCZuYnNwOzIwMDUKKzwvaDE+CisKKzxwPlRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHByb2plY3QgZmlsZXMgZm9yIFZpc3VhbCBDKyssIG5hbWVkCis8dHQ+ZnJlZXR5cGUuZHNwPC90dD4sIGFuZCBWaXN1YWwgU3R1ZGlvLCBjYWxsZWQgPHR0PmZyZWV0eXBlLnNsbjwvdHQ+LiAgSXQKK2NvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuNiBzb3VyY2VzOjwvcD4KKworPHVsPgorICA8cHJlPgorICAgIGZyZWV0eXBlMjYubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjZfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjZNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyNk1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKzwvdWw+CisKKzxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUAorYXJjaGl2ZXMgYXJlIGFscmVhZHkgc3RvcmVkIHRoaXMgd2F5LCBzbyBubyBmdXJ0aGVyIGFjdGlvbiBpcyByZXF1aXJlZC4gIElmCit5b3UgdXNlIHNvbWUgPHR0Pi50YXIuKno8L3R0PiBhcmNoaXZlcywgYmUgc3VyZSB0byBjb25maWd1cmUgeW91ciBleHRyYWN0aW5nCit0b29sIHRvIGNvbnZlcnQgdGhlIGxpbmUgZW5kaW5ncy4gIEZvciBleGFtcGxlLCB3aXRoIDxhCitocmVmPSJodHRwOi8vd3d3LndpbnppcC5jb20iPldpblppcDwvYT4sIHlvdSBzaG91bGQgYWN0aXZhdGUgdGhlIDxpdD5UQVIKK2ZpbGUgc21hcnQgQ1IvTEYgQ29udmVyc2lvbjwvaXQ+IG9wdGlvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgY29uc2lkZXIKK3VzaW5nIHRoZSA8dHQ+dW5peDJkb3M8L3R0PiBvciA8dHQ+dTJkPC90dD4gdXRpbGl0aWVzIHRoYXQgYXJlIGZsb2F0aW5nCithcm91bmQsIHdoaWNoIHNwZWNpZmljYWxseSBkZWFsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0uCisKKzxwPkJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBwbGFjZWQgaW4gdGhlIHRvcC1sZXZlbCA8dHQ+b2JqczwvdHQ+CitkaXJlY3RvcnkuPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjAzMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcApAQCAtMCwwICsxLDQwMCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJmcmVldHlwZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNA0KKw0KK0NGRz1mcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFDQorIU1FU1NBR0UgTk1BS0UgL2YgImZyZWV0eXBlLm1hayIuDQorIU1FU1NBR0UNCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UNCishTUVTU0FHRSBOTUFLRSAvZiAiZnJlZXR5cGUubWFrIiBDRkc9ImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorIU1FU1NBR0UNCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgU2luZ2xldGhyZWFkZWQiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRQ0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXHJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZSINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9NRCAvWmEgL1c0IC9HWCAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvbm9sb2dvIC9aPG5vbmU+IC9ZWA0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9NRGQgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNl9ELmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgImZyZWV0eXBlX19fV2luMzJfRGVidWdfTXVsdGl0aHJlYWRlZCINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJmcmVldHlwZV9fX1dpbjMyX0RlYnVnX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9aYSAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLlxpbmNsdWRlXFwiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUX0ZMQVRfQ09NUElMRSIgL1lYIC9GRCAvR1ogL2MNCisjIFNVQlRSQUNUIEJBU0UgQ1BQIC9YDQorIyBBREQgQ1BQIC9NVGQgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjZfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVF9ELmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX011bHRpdGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZV9tdCINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvWmEgL1czIC9HWCAvTzIgL0kgIi4uXGluY2x1ZGVcXCIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvRCAiRlRfRkxBVF9DT01QSUxFIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9NVCAvWmEgL1c0IC9HWCAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvbm9sb2dvIC9aPG5vbmU+IC9ZWA0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyNi5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVC5saWIiDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJmcmVldHlwZV9fX1dpbjMyX1JlbGVhc2VfU2luZ2xldGhyZWFkZWQiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiZnJlZXR5cGVfX19XaW4zMl9SZWxlYXNlX1NpbmdsZXRocmVhZGVkIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi4uXC4uXC4uXG9ianNccmVsZWFzZV9zdCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9aYSAvVzQgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXGluY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0ZEIC9jDQorIyBTVUJUUkFDVCBCQVNFIENQUCAvWVgNCisjIEFERCBDUFAgL1phIC9XNCAvR1ggL08yIC9JICIuLlwuLlwuLlxpbmNsdWRlIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJGVDJfQlVJTERfTElCUkFSWSIgL0ZEIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWjxub25lPiAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisjIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVC5saWIiDQorIyBTVUJUUkFDVCBMSUIzMiAvbm9sb2dvDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiZnJlZXR5cGVfX19XaW4zMl9EZWJ1Z19TaW5nbGV0aHJlYWRlZCINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJmcmVldHlwZV9fX1dpbjMyX0RlYnVnX1NpbmdsZXRocmVhZGVkIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICIuLlwuLlwuLlxvYmpzXGRlYnVnX3N0Ig0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuLlwuLlwuLlxvYmpzXGRlYnVnX3N0Ig0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTURkIC9aYSAvVzQgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlxpbmNsdWRlIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9MSUIiIC9EICJGVF9ERUJVR19MRVZFTF9FUlJPUiIgL0QgIkZUX0RFQlVHX0xFVkVMX1RSQUNFIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBCQVNFIENQUCAvWCAvWVgNCisjIEFERCBDUFAgL1phIC9XNCAvR1ggL1o3IC9PZCAvSSAiLi5cLi5cLi5caW5jbHVkZSIgL0QgIl9ERUJVRyIgL0QgIkZUX0RFQlVHX0xFVkVMX0VSUk9SIiAvRCAiRlRfREVCVUdfTEVWRUxfVFJBQ0UiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL0QgIkZUMl9CVUlMRF9MSUJSQVJZIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL25vbG9nbyAvWCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2X0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1RfRC5saWIiDQorDQorIUVORElGDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgRGVidWciDQorIyBOYW1lICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIE11bHRpdGhyZWFkZWQiDQorIyBOYW1lICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgTXVsdGl0aHJlYWRlZCINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCisjIE5hbWUgImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmRmXGJkZi5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiYm94LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiZGYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGZ0ZGVidWcuYw0KKyMgQUREIENQUCAvWmUNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnR0eXBlMS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHBjZlxwY2YuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNccGZyXHBmci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jDQorIyBTVUJUUkFDVCBDUFAgL0ZyDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYw0KKyMgU1VCVFJBQ1QgQ1BQIC9Gcg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMNCisjIFNVQlRSQUNUIENQUCAvRnINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdGNvbmZpZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0aGVhZGVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRtb2R1bGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG9wdGlvbi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0c3RkbGliLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3cgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDllNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHN3CkBAIC0wLDAgKzEsMjkgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImZyZWV0eXBlIj0uXGZyZWV0eXBlLmRzcCAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE5ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvagpAQCAtMCwwICsxLDEzODg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOCwwMCINCisJTmFtZT0iZnJlZXR5cGUiDQorCVByb2plY3RHVUlEPSJ7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfSINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkvPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNi5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210Ig0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2TVQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1ZyINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdCINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1RfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2TVQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO05ERUJVRztXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1QubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNl9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlBvY2tldCBQQyAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNlNUX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJQb2NrZXQgUEMgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUG9ja2V0IFBDIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2TVRfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7TkRFQlVHO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iU21hcnRwaG9uZSAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iU21hcnRwaG9uZSAyMDAzIChBUk1WNClcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1RfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJTbWFydHBob25lIDIwMDMgKEFSTVY0KVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCUdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNi5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtOREVCVUc7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNlNULmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2LmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2TVQubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtOREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO05ERUJVRztXSU4zMjtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJmYWxzZSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1QubGliIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNl9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNlNUX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQlHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGU9IjAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2TVRfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMiINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2UvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjYubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2VfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO05ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7TkRFQlVHO1dJTjMyO19MSUI7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVN0cmluZ1Bvb2xpbmc9ImZhbHNlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9ImZhbHNlIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXHJlbGVhc2Vfc3QvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVC5saWIiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWcvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2X0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0idHJ1ZSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvZnJlZXR5cGUucGNoIg0KKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfc3QvIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjQiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJCUNvbXBpbGVBcz0iMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCisJCQkJQ3VsdHVyZT0iMTAzMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI2U1RfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlFeGVjdXRpb25CdWNrZXQ9IjciDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7X0RFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfREVCVUc7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCUdlbmVyYXRlUHJlcHJvY2Vzc2VkRmlsZT0iMCINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19tdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZNVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJmYWxzZSINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlL2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZS8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlLyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNi5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtfTElCO0ZUMl9CVUlMRF9MSUJSQVJZIg0KKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9tdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1ULmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5caW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMl9XQ0U9JChDRVZFUik7VU5ERVJfQ0U9JChDRVZFUik7V0lOQ0U7TkRFQlVHOyQoUExBVEZPUk1ERUZJTkVTKTskKEFSQ0hGQU0pOyQoX0FSQ0hGQU1fKTtOREVCVUc7V0lOMzI7X0xJQjtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJU3RyaW5nUG9vbGluZz0iZmFsc2UiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iZmFsc2UiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNccmVsZWFzZV9zdC8iDQorCQkJCU9iamVjdEZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xyZWxlYXNlX3N0LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNlNULmxpYiINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0xJQjtGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWSINCisJCQkJUnVudGltZUxpYnJhcnk9IjMiDQorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnLyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Zy8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZfRC5saWIiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NvZGVTaWduVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPERlcGxveW1lbnRUb29sDQorCQkJCUZvcmNlRGlydHk9Ii0xIg0KKwkJCQlSZW1vdGVEaXJlY3Rvcnk9IiINCisJCQkJUmVnaXN0ZXJPdXRwdXQ9IjAiDQorCQkJCUFkZGl0aW9uYWxGaWxlcz0iIg0KKwkJCS8+DQorCQkJPERlYnVnZ2VyVG9vbA0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJRXhlY3V0aW9uQnVja2V0PSI3Ig0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXGluY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzJfV0NFPSQoQ0VWRVIpO1VOREVSX0NFPSQoQ0VWRVIpO1dJTkNFO19ERUJVRzskKFBMQVRGT1JNREVGSU5FUyk7JChBUkNIRkFNKTskKF9BUkNIRkFNXyk7X0RFQlVHO19MSUI7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlkiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC9mcmVldHlwZS5wY2giDQorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJT2JqZWN0RmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX3N0LyINCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cLi5cLi5cLi5cb2Jqc1xkZWJ1Z19zdC8iDQorCQkJCVdhcm5pbmdMZXZlbD0iNCINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkJQ29tcGlsZUFzPSIwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjZTVF9ELmxpYiINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ29kZVNpZ25Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8RGVwbG95bWVudFRvb2wNCisJCQkJRm9yY2VEaXJ0eT0iLTEiDQorCQkJCVJlbW90ZURpcmVjdG9yeT0iIg0KKwkJCQlSZWdpc3Rlck91dHB1dD0iMCINCisJCQkJQWRkaXRpb25hbEZpbGVzPSIiDQorCQkJLz4NCisJCQk8RGVidWdnZXJUb29sDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQlPdXRwdXREaXJlY3Rvcnk9IldpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iV2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIg0KKwkJCVVzZU9mTUZDPSIwIg0KKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCisJCQlDaGFyYWN0ZXJTZXQ9IjIiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCUV4ZWN1dGlvbkJ1Y2tldD0iNyINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxpbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyX1dDRT0kKENFVkVSKTtVTkRFUl9DRT0kKENFVkVSKTtXSU5DRTtfREVCVUc7JChQTEFURk9STURFRklORVMpOyQoQVJDSEZBTSk7JChfQVJDSEZBTV8pO19ERUJVRztfTElCO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlPSIwIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210L2ZyZWV0eXBlLnBjaCINCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlPYmplY3RGaWxlPSIuXC4uXC4uXC4uXG9ianNcZGVidWdfbXQvIg0KKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlwuLlwuLlwuLlxvYmpzXGRlYnVnX210LyINCisJCQkJV2FybmluZ0xldmVsPSI0Ig0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCQlDb21waWxlQXM9IjAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNk1UX0QubGliIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDb2RlU2lnblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxEZXBsb3ltZW50VG9vbA0KKwkJCQlGb3JjZURpcnR5PSItMSINCisJCQkJUmVtb3RlRGlyZWN0b3J5PSIiDQorCQkJCVJlZ2lzdGVyT3V0cHV0PSIwIg0KKwkJCQlBZGRpdGlvbmFsRmlsZXM9IiINCisJCQkvPg0KKwkJCTxEZWJ1Z2dlclRvb2wNCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYXV0b2ZpdFxhdXRvZml0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmRmXGJkZi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiaXRtYXAuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0ZnN0eXBlLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZ0ZGVidWcuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzdHJva2UuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJGVF9NT0RVTEVTIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmJveC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3ludGguYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHR5cGUxLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnR3aW5mbnQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGxjZGZpbC5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG90dmFsLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlMVx0eXBlMS5jIg0KKwkJCQkJPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3aW5mb250c1x3aW5mbnQuYyINCisJCQkJCT4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxmdDJidWlsZC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRjb25maWcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0aGVhZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxpbmNsdWRlXGNvbmZpZ1xmdG1vZHVsZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5caW5jbHVkZVxjb25maWdcZnRvcHRpb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXGluY2x1ZGVcY29uZmlnXGZ0c3RkbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMzNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZGVyPgorPHRpdGxlPgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVmlzdWFsJm5ic3A7QysrIGFuZCBWUy5ORVQmbmJzcDsyMDA1CisgIChQb2NrZXQgUEMpCis8L3RpdGxlPgorCis8Ym9keT4KKzxoMT4KKyAgRnJlZVR5cGUmbmJzcDsyIFByb2plY3QgRmlsZXMgZm9yIFZpc3VhbCZuYnNwO0MrKyBhbmQgVlMuTkVUJm5ic3A7MjAwNQorICAoUG9ja2V0IFBDKQorPC9oMT4KKworPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdCBmaWxlcyBmb3IgVmlzdWFsIEMrKywgbmFtZWQKKzx0dD5mcmVldHlwZS5kc3A8L3R0PiwgYW5kIFZpc3VhbCBTdHVkaW8sIGNhbGxlZCA8dHQ+ZnJlZXR5cGUuc2xuPC90dD4gZm9yCit0aGUgZm9sbG93aW5nIHRhcmdldHM6CisKKzx1bD4KKyAgPGxpPlBQQy9TUCAyMDAzIChQb2NrZXQgUEMgMjAwMyk8L2xpPgorICA8bGk+UFBDL1NQIFdNNSAoV2luZG93cyBNb2JpbGUgNSk8L2xpPgorICA8bGk+UFBDL1NQIFdNNiAoV2luZG93cyBNb2JpbGUgNik8L2xpPgorPC91bD4KKworSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi42IHNvdXJjZXM6PC9wPgorCis8dWw+CisgIDxwcmU+CisgICAgZnJlZXR5cGUyNi5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyNl9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyNk1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKKyAgICBmcmVldHlwZTI2TVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorPC91bD4KKworPHA+QmUgc3VyZSB0byBleHRyYWN0IHRoZSBmaWxlcyB3aXRoIHRoZSBXaW5kb3dzIChDUitMRikgbGluZSBlbmRpbmdzLiAgWklQCithcmNoaXZlcyBhcmUgYWxyZWFkeSBzdG9yZWQgdGhpcyB3YXksIHNvIG5vIGZ1cnRoZXIgYWN0aW9uIGlzIHJlcXVpcmVkLiAgSWYKK3lvdSB1c2Ugc29tZSA8dHQ+LnRhci4qejwvdHQ+IGFyY2hpdmVzLCBiZSBzdXJlIHRvIGNvbmZpZ3VyZSB5b3VyIGV4dHJhY3RpbmcKK3Rvb2wgdG8gY29udmVydCB0aGUgbGluZSBlbmRpbmdzLiAgRm9yIGV4YW1wbGUsIHdpdGggPGEKK2hyZWY9Imh0dHA6Ly93d3cud2luemlwLmNvbSI+V2luWmlwPC9hPiwgeW91IHNob3VsZCBhY3RpdmF0ZSB0aGUgPGl0PlRBUgorZmlsZSBzbWFydCBDUi9MRiBDb252ZXJzaW9uPC9pdD4gb3B0aW9uLiAgQWx0ZXJuYXRpdmVseSwgeW91IG1heSBjb25zaWRlcgordXNpbmcgdGhlIDx0dD51bml4MmRvczwvdHQ+IG9yIDx0dD51MmQ8L3R0PiB1dGlsaXRpZXMgdGhhdCBhcmUgZmxvYXRpbmcKK2Fyb3VuZCwgd2hpY2ggc3BlY2lmaWNhbGx5IGRlYWwgd2l0aCB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbS4KKworPHA+QnVpbGQgZGlyZWN0b3JpZXMgYXJlIHBsYWNlZCBpbiB0aGUgdG9wLWxldmVsIDx0dD5vYmpzPC90dD4KK2RpcmVjdG9yeS48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItYmNjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1iY2MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4M2RmNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItYmNjLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgRnJlZVR5cGUgMiBCb3JsYW5kIEMrKyBvbiBXaW4zMgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiB0aGUgZXhwb3J0IGxpc3QKKyMKK0VYUE9SVFNfTElTVCAgICAgID0gJChPQkpfRElSKS9mcmVldHlwZS5kZWYKK0VYUE9SVFNfT1BUSU9OUyAgID0gL0RFRjokKEVYUE9SVFNfTElTVCkKK0FQSU5BTUVTX09QVElPTlMgOj0gLWRmcmVldHlwZS5kbGwgLXdCCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvYmNjLm1rCisKKyMgaW5jbHVkZSBsaW5raW5nIGluc3RydWN0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9saW5rX2Rvcy5taworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWJjY2QubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWJjY2QubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3MmNhMQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItYmNjZC5tawpAQCAtMCwwICsxLDI2IEBACisjCisjIEZyZWVUeXBlIDIgQm9ybGFuZCBDKysgb24gV2luMzIgKyBkZWJ1Z2dpbmcKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0RFVkVMX0RJUiA6PSAkKFRPUF9ESVIpL2RldmVsCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rCisKKyMgaW5jbHVkZSBsaW5raW5nIGluc3RydWN0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9saW5rX2Rvcy5taworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWRldi5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItZGV2Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDFhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWRldi5tawpAQCAtMCwwICsxLDMyIEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgV2luMzIgKyBHQ0MKKyMKKyMgICBEZXZlbG9wbWVudCB2ZXJzaW9uIHdpdGhvdXQgb3B0aW1pemF0aW9ucy4KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgTk9URTogVGhpcyB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQgR05VIE1ha2UgaXMgaW52b2tlZCBmcm9tIHRoZSBXaW5kb3dzCisjICAgICAgIFNoZWxsIChfbm90XyBDeWd3aW4gQkFTSCkhCisjCisKK0RFVkVMX0RJUiA6PSAkKFRPUF9ESVIpL2RldmVsCisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci9nY2MtZGV2Lm1rCisKKyMgaW5jbHVkZSBsaW5raW5nIGluc3RydWN0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9saW5rX2Rvcy5taworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWdjYy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItZ2NjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOTJmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLWdjYy5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBydWxlcyBmb3IgV2luMzIgKyBHQ0MKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisjIGRlZmF1bHQgZGVmaW5pdGlvbnMgb2YgdGhlIGV4cG9ydCBsaXN0CisjCitFWFBPUlRTX0xJU1QgICAgICA9ICQoT0JKX0RJUikvZnJlZXR5cGUuZGVmCitFWFBPUlRTX09QVElPTlMgICA9ICQoRVhQT1JUU19MSVNUKQorQVBJTkFNRVNfT1BUSU9OUyA6PSAtZGZyZWV0eXBlLmRsbCAtdworCisjIGluY2x1ZGUgV2luMzItc3BlY2lmaWMgZGVmaW5pdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKKworIyBpbmNsdWRlIGdjYy1zcGVjaWZpYyBkZWZpbml0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci9nY2MubWsKKworIyBpbmNsdWRlIGxpbmtpbmcgaW5zdHJ1Y3Rpb25zCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfZG9zLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItaWNjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1pY2MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkY2JlNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItaWNjLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBXaW4zMiArIElCTSBWaXN1YWwgQWdlIEMrKworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiB0aGUgZXhwb3J0IGxpc3QKKyMKK0VYUE9SVFNfTElTVCAgICAgID0gJChPQkpfRElSKS9mcmVldHlwZS5kZWYKK0VYUE9SVFNfT1BUSU9OUyAgID0gL0RFRjokKEVYUE9SVFNfTElTVCkKK0FQSU5BTUVTX09QVElPTlMgOj0gLWRmcmVldHlwZS5kbGwgLXcKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy93aW5kb3dzL3dpbjMyLWRlZi5taworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci92aXN1YWxhZ2UubWsKKworIyBpbmNsdWRlIGxpbmtpbmcgaW5zdHJ1Y3Rpb25zCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfZG9zLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItaW50bC5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItaW50bC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTk5MTJmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1pbnRsLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBJbnRlbCBDL0MrKyBvbiBXaW4zMgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiB0aGUgZXhwb3J0IGxpc3QKKyMKK0VYUE9SVFNfTElTVCAgICAgID0gJChPQkpfRElSKS9mcmVldHlwZS5kZWYKK0VYUE9SVFNfT1BUSU9OUyAgID0gL0RFRjokKEVYUE9SVFNfTElTVCkKK0FQSU5BTUVTX09QVElPTlMgOj0gLWRmcmVldHlwZS5kbGwgLXcKKworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy93aW5kb3dzL3dpbjMyLWRlZi5taworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9jb21waWxlci9pbnRlbGMubWsKKworIyBpbmNsdWRlIGxpbmtpbmcgaW5zdHJ1Y3Rpb25zCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2xpbmtfZG9zLm1rCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItbGNjLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1sY2MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NzlmMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItbGNjLm1rCkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBXaW4zMiArIExDQworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworU0VQIDo9IC8KK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvd2luLWxjYy5taworCisjIGluY2x1ZGUgbGlua2luZyBpbnN0cnVjdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworIyBFT0YKKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1taW5ndzMyLm1rIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi1taW5ndzMyLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDBhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKQEAgLTAsMCArMSwzMyBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIG1pbmd3MzIKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisjIGRlZmF1bHQgZGVmaW5pdGlvbnMgb2YgdGhlIGV4cG9ydCBsaXN0CisjCitFWFBPUlRTX0xJU1QgICAgICA9ICQoT0JKX0RJUikvZnJlZXR5cGUuZGVmCitFWFBPUlRTX09QVElPTlMgICA9ICQoRVhQT1JUU19MSVNUKQorQVBJTkFNRVNfT1BUSU9OUyA6PSAtZGZyZWV0eXBlLmRsbCAtdworCisjIGluY2x1ZGUgV2luMzItc3BlY2lmaWMgZGVmaW5pdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKKworTElCUkFSWSA6PSBsaWIkKFBST0pFQ1QpCisKKyMgaW5jbHVkZSBnY2Mtc3BlY2lmaWMgZGVmaW5pdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvZ2NjLm1rCisKKyMgaW5jbHVkZSBsaW5raW5nIGluc3RydWN0aW9ucworaW5jbHVkZSAkKFRPUF9ESVIpL2J1aWxkcy9saW5rX2Rvcy5taworCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLXZjYy5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93MzItdmNjLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjFhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLXZjYy5tawpAQCAtMCwwICsxLDI4IEBACisjCisjIEZyZWVUeXBlIDIgVmlzdWFsIEMrKyBvbiBXaW4zMgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgZGVmaW5pdGlvbnMgb2YgdGhlIGV4cG9ydCBsaXN0CisjCitFWFBPUlRTX0xJU1QgICAgICA9ICQoT0JKX0RJUikvZnJlZXR5cGUuZGVmCitFWFBPUlRTX09QVElPTlMgICA9IC9ERUY6JChFWFBPUlRTX0xJU1QpCitBUElOQU1FU19PUFRJT05TIDo9IC1kZnJlZXR5cGUuZGxsIC13CisKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvY29tcGlsZXIvdmlzdWFsYy5taworCisjIGluY2x1ZGUgbGlua2luZyBpbnN0cnVjdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi13YXQubWsgYi9mcmVldHlwZS0yLjYvYnVpbGRzL3dpbmRvd3MvdzMyLXdhdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVlYWYwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3czMi13YXQubWsKQEAgLTAsMCArMSwyOCBAQAorIworIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gcnVsZXMgZm9yIFdhdGNvbSBDL0MrKworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKyMgcmVkZWZpbmUgZXhwb3J0IHN5bWJvbCBkZWZpbml0aW9ucworIworRVhQT1JUU19MSVNUICAgICAgPSAkKE9CSl9ESVIpL3dhdGNvbS1mdGV4cG9ydHMubGJjCitFWFBPUlRTX09QVElPTlMgICA9IC1cImV4cG9ydCBAJChFWFBPUlRTX0xJU1QpXCItCitBUElOQU1FU19PUFRJT05TIDo9IC13VworCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL3dpbmRvd3Mvd2luMzItZGVmLm1rCitpbmNsdWRlICQoVE9QX0RJUikvYnVpbGRzL2NvbXBpbGVyL3dhdGNvbS5taworCisjIGluY2x1ZGUgbGlua2luZyBpbnN0cnVjdGlvbnMKK2luY2x1ZGUgJChUT1BfRElSKS9idWlsZHMvbGlua19kb3MubWsKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2J1aWxkcy93aW5kb3dzL3dpbjMyLWRlZi5tayBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2YzVjZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKQEAgLTAsMCArMSw0NyBAQAorIworIyBGcmVlVHlwZSAyIFdpbjMyIHNwZWNpZmljIGRlZmluaXRpb25zCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitERUxFVEUgICAgOj0gZGVsCitDQVQgICAgICAgOj0gdHlwZQorU0VQICAgICAgIDo9ICQoc3RyaXAgXCApCitCVUlMRF9ESVIgOj0gJChUT1BfRElSKS9idWlsZHMvd2luZG93cworUExBVEZPUk0gIDo9IHdpbmRvd3MKKworIyBUaGUgZXhlY3V0YWJsZSBmaWxlIGV4dGVuc2lvbiAoZm9yIHRvb2xzKS4gTk9URTogV0UgSU5DTFVERSBUSEUgRE9UIEhFUkUgISEKKyMKK0UgOj0gLmV4ZQorRV9CVUlMRCA6PSAuZXhlCisKKworIyBUaGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBsaWJyYXJ5IGZpbGVzIGFyZSBwbGFjZWQuCisjCisjIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHNhbWUgYXMgJChPQkpfRElSKTsgaG93ZXZlciwgdGhpcyBjYW4gYmUgY2hhbmdlZAorIyB0byBzdWl0IHBhcnRpY3VsYXIgbmVlZHMuCisjCitMSUJfRElSIDo9ICQoT0JKX0RJUikKKworCisjIFRoZSBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5IGZpbGUuICBOb3RlIHRoYXQgdGhlIERPUy1zcGVjaWZpYyBNYWtlZmlsZQorIyB1c2VzIGEgc2hvcnRlciAoOC4zKSBuYW1lLgorIworTElCUkFSWSA6PSAkKFBST0pFQ1QpCisKKworIyBUaGUgTk9fT1VUUFVUIG1hY3JvIGlzIHVzZWQgdG8gaWdub3JlIHRoZSBvdXRwdXQgb2YgY29tbWFuZHMuCisjCitOT19PVVRQVVQgPSAyPiBudWwKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2NvbmZpZ3VyZSBiL2ZyZWV0eXBlLTIuNi9jb25maWd1cmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ1MjU4MQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9jb25maWd1cmUKQEAgLTAsMCArMSwxMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKyMKKyMKKyMgQ2FsbCB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGxvY2F0ZWQgaW4gYGJ1aWxkcy91bml4Jy4KKyMKKworcm0gLWYgY29uZmlnLm1rIGJ1aWxkcy91bml4L3VuaXgtZGVmLm1rIGJ1aWxkcy91bml4L3VuaXgtY2MubWsKKworIyByZXNwZWN0IEdOVU1BS0UgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitpZiB0ZXN0ICJ4JEdOVU1BS0UiID0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JE1BS0UiID0geDsgdGhlbgorICAgIGlmIHRlc3QgInhgbWFrZSAtdiAyPi9kZXYvbnVsbCB8IGVncmVwICdHTlV8bWFrZXBwJ2AiID0geDsgdGhlbgorICAgICAgTUFLRT1nbWFrZQorICAgIGVsc2UKKyAgICAgIE1BS0U9bWFrZQorICAgIGZpCisgIGZpCitlbHNlCisgIE1BS0U9JEdOVU1BS0UKK2ZpCisKK2lmIHRlc3QgInhgJE1BS0UgLXYgMj4vZGV2L251bGwgfCBlZ3JlcCAnR05VfG1ha2VwcCdgIiA9IHg7IHRoZW4KKyAgZWNobyAiR05VIG1ha2UgKD49IDMuODApIG9yIG1ha2VwcCAoPj0gMS4xOSkgaXMgcmVxdWlyZWQgdG8gYnVpbGQgRnJlZVR5cGUyLiIgPiYyCisgIGVjaG8gIlBsZWFzZSB0cnkiID4mMgorICBlY2hvID4mMgorICBlY2hvICIgIE1BS0U9PEdOVSBtYWtlIGNvbW1hbmQgbmFtZT4gJDAiID4mMgorICBlY2hvID4mMgorICBlY2hvICJvciIgPiYyCisgIGVjaG8gPiYyCisgIGVjaG8gIiAgTUFLRT1cIm1ha2VwcCAtLW5vcmMtc3Vic3RpdHV0aW9uXCIgJDAiID4mMgorICBleGl0IDEKK2ZpCisKKyMgR2V0IGBkaXJuYW1lJyBmdW5jdGlvbmFsaXR5LiAgVGhpcyBpcyB0YWtlbiBhbmQgYWRhcHRlZCBmcm9tIGF1dG9jb25mJ3MKKyMgbTRzaC5tNCAoX0FTX0VYUFJfUFJFUEFSRSwgQVNfRElSTkFNRV9FWFBSLCBhbmQgQVNfRElSTkFNRV9TRUQpLgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBmdF9leHByPWV4cHIKK2Vsc2UKKyAgZnRfZXhwcj1mYWxzZQorZmkKKworZnQyX2Rpcj1gKGRpcm5hbWUgIiQwIikgMj4vZGV2L251bGwgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICRmdF9leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgICAgICAgICAgICAgICAgICBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorICAgICAgICAgICAgICAgICAgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKyAgICAgICAgICAgICAgICAgIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorICAgICAgICAgICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGVjaG8gWCIkMCIgfAorICAgICAgICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworICAgICAgICAgICAgICAgICAgcy8vXDEvCisgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC9eWFwoXC9cL1wpW14vXS4qL3sKKyAgICAgICAgICAgICAgICAgIHMvL1wxLworICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvXlhcKFwvXC9cKSQveworICAgICAgICAgICAgICAgICAgcy8vXDEvCisgICAgICAgICAgICAgICAgICBxCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC9eWFwoXC9cKS4qL3sKKyAgICAgICAgICAgICAgICAgIHMvL1wxLworICAgICAgICAgICAgICAgICAgcQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzLy4qLy4vOyBxJ2AKKworYWJzX2N1cnJfZGlyPWBwd2RgCithYnNfZnQyX2Rpcj1gY2QgIiRmdDJfZGlyIiAmJiBwd2RgCisKKyMgYC0tc3JjZGlyPScgb3B0aW9uIGNhbiBvdmVycmlkZSBhYnNfZnQyX2RpcgorCitpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisgIGZvciB4IGluICIkQCI7IGRvCisgICAgY2FzZSB4IiR4IiBpbgorICAgIHgtLXNyY2Rpcj0qKQorICAgICAgYWJzX2Z0Ml9kaXI9YGVjaG8gJHggfCBzZWQgJ3MvXi0tc3JjZGlyPS8vJ2AgOzsKKyAgICBlc2FjCisgIGRvbmUKK2ZpCisKKyMgYnVpbGQgYSBkdW1teSBNYWtlZmlsZSBpZiB3ZSBhcmUgbm90IGJ1aWxkaW5nIGluIHRoZSBzb3VyY2UgdHJlZTsKKyMgd2UgdXNlIGlub2RlcyB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzeW1ib2xpYyBsaW5rcworaW5vZGVfc3JjPWBscyAtaWQgJGFic19mdDJfZGlyIHwgYXdrICd7cHJpbnQgJDF9J2AKK2lub2RlX2RzdD1gbHMgLWlkICRhYnNfY3Vycl9kaXIgfCBhd2sgJ3twcmludCAkMX0nYAorCitpZiB0ZXN0ICRpbm9kZV9zcmMgLW5lICRpbm9kZV9kc3Q7IHRoZW4KKyAgaWYgdGVzdCAhIC1kIHJlZmVyZW5jZTsgdGhlbgorICAgIG1rZGlyIHJlZmVyZW5jZQorICBmaQorICBpZiB0ZXN0ICEgLXIgJGFic19jdXJyX2Rpci9tb2R1bGVzLmNmZzsgdGhlbgorICAgIGVjaG8gIkNvcHlpbmcgXGBtb2R1bGVzLmNmZyciCisgICAgY3AgJGFic19mdDJfZGlyL21vZHVsZXMuY2ZnICRhYnNfY3Vycl9kaXIKKyAgZmkKKyAgZWNobyAiR2VuZXJhdGluZyBcYE1ha2VmaWxlJyIKKyAgZWNobyAiVE9QX0RJUiAgICAgICAgOj0gJGFic19mdDJfZGlyIiAgICAgICAgICAgPiBNYWtlZmlsZQorICBlY2hvICJPQkpfRElSICAgICAgICA6PSAkYWJzX2N1cnJfZGlyIiAgICAgICAgID4+IE1ha2VmaWxlCisgIGVjaG8gIk9CSl9CVUlMRCAgICAgIDo9IFwkKE9CSl9ESVIpIiAgICAgICAgICAgPj4gTWFrZWZpbGUKKyAgZWNobyAiRE9DX0RJUiAgICAgICAgOj0gXCQoT0JKX0RJUikvcmVmZXJlbmNlIiA+PiBNYWtlZmlsZQorICBlY2hvICJGVF9MSUJUT09MX0RJUiA6PSBcJChPQkpfRElSKSIgICAgICAgICAgID4+IE1ha2VmaWxlCisgIGVjaG8gImlmbmRlZiBGVDJERU1PUyIgICAgICAgICAgICAgICAgICAgICAgICAgPj4gTWFrZWZpbGUKKyAgZWNobyAiICBpbmNsdWRlIFwkKFRPUF9ESVIpL01ha2VmaWxlIiAgICAgICAgICA+PiBNYWtlZmlsZQorICBlY2hvICJlbHNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IE1ha2VmaWxlCisgIGVjaG8gIiAgVE9QX0RJUl8yIDo9IFwkKFRPUF9ESVIpLy4uL2Z0MmRlbW9zIiAgPj4gTWFrZWZpbGUKKyAgZWNobyAiICBQUk9KRUNUICAgOj0gZnJlZXR5cGUiICAgICAgICAgICAgICAgICA+PiBNYWtlZmlsZQorICBlY2hvICIgIENPTkZJR19NSyA6PSBcJChPQkpfRElSKS9jb25maWcubWsiICAgID4+IE1ha2VmaWxlCisgIGVjaG8gIiAgaW5jbHVkZSBcJChUT1BfRElSXzIpL01ha2VmaWxlIiAgICAgICAgPj4gTWFrZWZpbGUKKyAgZWNobyAiZW5kaWYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiBNYWtlZmlsZQorZmkKKworIyBjYWxsIG1ha2UKKworQ0ZHPQorIyB3b3JrIGFyb3VuZCB6c2ggYnVnIHdoaWNoIGRvZXNuJ3QgbGlrZSBgJHsxKyIkQCJ9JworY2FzZSAkIyBpbgorMCkgOzsKKyopIGZvciB4IGluICIkQCI7IGRvCisgICAgIGNhc2UgeCIkeCIgaW4KKyAgICAgeC0tc3JjZGlyPSogKSBDRkc9IiRDRkcgJyR4Jy9idWlsZHMvdW5peCIgOzsKKyAgICAgKikgQ0ZHPSIkQ0ZHICckeCciIDs7CisgICAgIGVzYWMKKyAgIGRvbmUgOzsKK2VzYWMKK0NGRz0kQ0ZHICRNQUtFIHNldHVwIHVuaXgKKworIyBlb2YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kZXZlbC9mdDJidWlsZC5oIGIvZnJlZXR5cGUtMi42L2RldmVsL2Z0MmJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NjUzZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kZXZlbC9mdDJidWlsZC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0MmJ1aWxkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSAyIGJ1aWxkIGFuZCBzZXR1cCBtYWNyb3MgKGRldmVsb3BtZW50IHZlcnNpb24pLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIC8qCisgICogIFRoaXMgaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIDxmdDJidWlsZC5oPiB0byBidWlsZCB0aGUgbGlicmFyeSBpbgorICAqICBkZWJ1ZyBtb2RlLiAgSXRzIG9ubHkgZGlmZmVyZW5jZSB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHRoYXQgaXQKKyAgKiAgaW5jbHVkZXMgYSBsb2NhbCBgZnRvcHRpb24uaCcgaGVhZGVyIGZpbGUgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yCisgICogIG1hbnkgY29uZmlndXJhdGlvbiBtYWNyb3MuCisgICoKKyAgKiAgVG8gdXNlIGl0LCBzaW1wbHkgZW5zdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBpcworICAqICBzY2FubmVkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgdGhlIGRlZmF1bHQgRnJlZVR5cGUgaGVhZGVyIGRpcmVjdG9yeS4KKyAgKgorICAqLworCisjaWZuZGVmIF9fRlQyQlVJTERfSF9fCisjZGVmaW5lIF9fRlQyQlVJTERfSF9fCisKKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPGZ0b3B0aW9uLmg+CisKKyNpbmNsdWRlIDxjb25maWcvZnRoZWFkZXIuaD4KKworI2VuZGlmIC8qIF9fRlQyQlVJTERfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZGV2ZWwvZnRvcHRpb24uaCBiL2ZyZWV0eXBlLTIuNi9kZXZlbC9mdG9wdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjNhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZGV2ZWwvZnRvcHRpb24uaApAQCAtMCwwICsxLDg4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRvcHRpb24uaCAoZm9yIGRldmVsb3BtZW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG1hY3JvcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRPUFRJT05fSF9fCisjZGVmaW5lIF9fRlRPUFRJT05fSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgVVNFUi1TRUxFQ1RBQkxFIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1hY3JvIGRlZmluaXRpb25zIGZvciAgICAqLworICAvKiBhIHN0YW5kYXJkIGJ1aWxkIG9mIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gICAgKi8KKyAgLyogdXNlIHRoaXMgZmlsZSB0byBidWlsZCBwcm9qZWN0LXNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5OiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBZb3UgY2FuIG1vZGlmeSB0aGlzIGZpbGUgYnkgaGFuZCwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGluICAgKi8KKyAgLyogICAgY2FzZXMgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZGlyZWN0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIC0gWW91IGNhbiBwdXQgYSBjb3B5IG9mIHRoaXMgZmlsZSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgbW9yZSAgICAgICovCisgIC8qICAgIHByZWNpc2VseSBpbiBgJEJVSUxEL2NvbmZpZy9mdG9wdGlvbi5oJywgd2hlcmUgYCRCVUlMRCcgaXMgdGhlICAgICAqLworICAvKiAgICBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgaXMgaW5jbHVkZWQgX2JlZm9yZV8gdGhlIEZyZWVUeXBlIGluY2x1ZGUgKi8KKyAgLyogICAgcGF0aCBkdXJpbmcgY29tcGlsYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgYW5kIEphbWZpbGVzIHVzZSB0aGUgYnVpbGQgICAgICAgICAgKi8KKyAgLyogICAgZGlyZWN0b3J5IGBidWlsZHMvPHN5c3RlbT4nIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgICovCisgIC8qICAgIHRoYXQgZm9yIHlvdXIgb3duIHByb2plY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIC0gQ29weSB0aGUgZmlsZSA8ZnQyYnVpbGQuaD4gdG8gYCRCVUlMRC9mdDJidWlsZC5oJyBhbmQgbW9kaWZ5IGl0ICAgICovCisgIC8qICAgIHNsaWdodGx5IHRvIHByZS1kZWZpbmUgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05TX0ggdXNlZCB0byAgICAgICAqLworICAvKiAgICBsb2NhdGUgdGhpcyBmaWxlIGR1cmluZyB0aGUgYnVpbGQuICBGb3IgZXhhbXBsZSwgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8bXlmdG9wdGlvbnMuaD4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICNpbmNsdWRlIDxjb25maWcvZnRoZWFkZXIuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaCcgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZm9yIG1hY3JvICAgICAqLworICAvKiAgICBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gc2ltaWxhcmx5IHByZS1kZWZpbmUgdGhlIG1hY3JvICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMgKi8KKyAgLyogICAgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGxpYnJhcnkgYXQgY29tcGlsZSB0aW1lLiAgQnkgICAgICovCisgIC8qICAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8Y29uZmlnL2Z0bW9kdWxlLmg+LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogV2UgaGlnaGx5IHJlY29tbWVuZCB1c2luZyB0aGUgdGhpcmQgbWV0aG9kIHdoZW5ldmVyIHBvc3NpYmxlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqIEcgRSBOIEUgUiBBIEwgICBGIFIgRSBFIFQgWSBQIEUgICAyICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgc3ViLXBpeGVsIHJlbmRlcmluZyAgKi8KKyAgLyogKGEuay5hLiBMQ0QgcmVuZGVyaW5nLCBvciBDbGVhclR5cGUpIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGNvdmVyZWQgYnkgc2V2ZXJhbCBNaWNyb3NvZnQgcGF0ZW50cyAgICAgICAgKi8KKyAgLyogYW5kIHNob3VsZCBub3QgYmUgYWN0aXZhdGVkIGluIGFueSBkZWZhdWx0IGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIG1hY3JvIGhhcyBubyBpbXBhY3Qgb24gdGhlIEZyZWVUeXBlIEFQSSwgb25seSBvbiBpdHMgICAgICAgICAgICAgKi8KKyAgLyogX2ltcGxlbWVudGF0aW9uXy4gIEZvciBleGFtcGxlLCB1c2luZyBGVF9SRU5ERVJfTU9ERV9MQ0Qgd2hlbiBjYWxsaW5nICovCisgIC8qIEZUX1JlbmRlcl9HbHlwaCBzdGlsbCBnZW5lcmF0ZXMgYSBiaXRtYXAgdGhhdCBpcyAzIHRpbWVzIHdpZGVyIHRoYW4gICAqLworICAvKiB0aGUgb3JpZ2luYWwgc2l6ZSBpbiBjYXNlIHRoaXMgbWFjcm8gaXNuJ3QgZGVmaW5lZDsgaG93ZXZlciwgZWFjaCAgICAgKi8KKyAgLyogdHJpcGxldCBvZiBzdWJwaXhlbHMgaGFzIFI9Rz1CLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgRnJlZVR5cGUgY2xpZW50cyB0byBydW4gdW5tb2RpZmllZCwgZm9yY2luZyAgICAgKi8KKyAgLyogdGhlbSB0byBkaXNwbGF5IG5vcm1hbCBncmF5LWxldmVsIGFudGktYWxpYXNlZCBnbHlwaHMuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNYW55IGNvbXBpbGVycyBwcm92aWRlIGEgbm9uLUFOU0kgNjQtYml0IGRhdGEgdHlwZSB0aGF0IGNhbiBiZSB1c2VkICAgKi8KKyAgLyogYnkgRnJlZVR5cGUgdG8gc3BlZWQgdXAgc29tZSBjb21wdXRhdGlvbnMuICBIb3dldmVyLCB0aGlzIHdpbGwgY3JlYXRlICovCisgIC8qIHNvbWUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgaW4gc3RyaWN0IEFOU0kgbW9kZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRm9yIHRoaXMgcmVhc29uLCB0aGUgdXNlIG9mIDY0LWJpdCBpbnRlZ2VycyBpcyBub3JtYWxseSBkaXNhYmxlZCB3aGVuICovCisgIC8qIHRoZSBfX1NURENfXyBtYWNybyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGRpc2FibGUgdGhpcyBieSAgICAgICAqLworICAvKiBkZWZpbmluZyB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCBoZXJlLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZvciBtb3N0IGNvbXBpbGVycywgdGhpcyB3aWxsIG9ubHkgY3JlYXRlIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHdoZW4gICAqLworICAvKiBidWlsZGluZyB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9iTm90ZTogVGhlIGNvbXBpbGVyLXNwZWNpZmljIDY0LWJpdCBpbnRlZ2VycyBhcmUgZGV0ZWN0ZWQgaW4gdGhlICAgICAqLworICAvKiAgICAgICAgIGZpbGUgYGZ0Y29uZmlnLmgnIGVpdGhlciBzdGF0aWNhbGx5IG9yIHRocm91Z2ggdGhlICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBgY29uZmlndXJlJyBzY3JpcHQgb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBkbyBub3QgdHJ5IHRvIHVzZSBhbiBhc3NlbWJsZXIgdmVyc2lvbiBvZiAgICovCisgIC8qIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9ucyAoZS5nLiBGVF9NdWxGaXgpLiAgWW91IHNob3VsZCBvbmx5IGRvICAqLworICAvKiB0aGF0IHRvIHZlcmlmeSB0aGF0IHRoZSBhc3NlbWJsZXIgZnVuY3Rpb24gd29ya3MgcHJvcGVybHksIG9yIHRvICAgICAgKi8KKyAgLyogZXhlY3V0ZSBiZW5jaG1hcmsgdGVzdHMgb2YgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zLiAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fTk9fQVNTRU1CTEVSICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgdHJ5IHRvIHVzZSBhbiBpbmxpbmVkIGFzc2VtYmxlciB2ZXJzaW9uIG9mICAqLworICAvKiB0aGUgYEZUX011bEZpeCcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYGhvdHNwb3QnIHdoZW4gbG9hZGluZyBhbmQgICAgICAgKi8KKyAgLyogaGludGluZyBnbHlwaHMsIGFuZCB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgYXMgZmFzdCBhcyBwb3NzaWJsZS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgaWYgeW91ciBjb21waWxlciBvciBDUFUgaXMgbm90IHN1cHBvcnRlZCwgdGhpcyB3aWxsIGRlZmF1bHQgKi8KKyAgLyogdG8gdGhlIHN0YW5kYXJkIGFuZCBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBmb3VuZCBpbiBgZnRjYWxjLmMnLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0lOTElORV9NVUxGSVgKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTFpXLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KKyAgLyogICBgY29tcHJlc3MnIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRiAgICovCisgIC8qICAgZmlsZXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBYMTEgZGlzdHJpYnV0aW9ucy4gIFRoZSBpbXBsZW1lbnRhdGlvbiAqLworICAvKiAgIHVzZXMgTmV0QlNEJ3MgYHpvcGVuJyB0byBwYXJ0aWFsbHkgdW5jb21wcmVzcyB0aGUgZmlsZSBvbiB0aGUgZmx5ICAgKi8KKyAgLyogICAoc2VlIHNyYy9sencvZnRnemlwLmMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0xaVworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHemlwLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgZm9udCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjb21wcmVzc2VkIHdpdGggdGhlICAqLworICAvKiAgIGBnemlwJyBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YgZmlsZXMgKi8KKyAgLyogICB0aGF0IGNvbWUgd2l0aCBYRnJlZTg2LiAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYHpsaWInIHRvICAgICAgICAgICovCisgIC8qICAgcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAoc2VlIHNyYy9nemlwL2Z0Z3ppcC5jKS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICBTZWUgYWxzbyAgICovCisgIC8qICAgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBaTGliIGxpYnJhcnkgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyBtYWNybyBpcyBvbmx5IHVzZWQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCIGlzIGRlZmluZWQuICAqLworICAvKiAgIEl0IGFsbG93cyBGcmVlVHlwZSdzIGBmdGd6aXAnIGNvbXBvbmVudCB0byBsaW5rIHRvIHRoZSBzeXN0ZW0ncyAgICAgKi8KKyAgLyogICBpbnN0YWxsYXRpb24gb2YgdGhlIFpMaWIgbGlicmFyeS4gIFRoaXMgaXMgdXNlZnVsIG9uIHN5c3RlbXMgbGlrZSAgICovCisgIC8qICAgVW5peCBvciBWTVMgd2hlcmUgaXQgZ2VuZXJhbGx5IGlzIGFscmVhZHkgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBJZiB5b3UgbGV0IGl0IHVuZGVmaW5lZCwgdGhlIGNvbXBvbmVudCB3aWxsIHVzZSBpdHMgb3duIGNvcHkgICAgICAgICovCisgIC8qICAgb2YgdGhlIHpsaWIgc291cmNlcyBpbnN0ZWFkLiAgVGhlc2UgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGJlICAgICAgICAqLworICAvKiAgIGluY2x1ZGVkIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29tcG9uZW50IGFuZCAqbm90KiBleHBvcnQgZXh0ZXJuYWwgICAgKi8KKyAgLyogICBmdW5jdGlvbiBuYW1lcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBsaW5rIGFueSBwcm9ncmFtIHdpdGggRnJlZVR5cGUgICovCisgIC8qICAgX2FuZF8gWkxpYiB3aXRob3V0IGxpbmtpbmcgY29uZmxpY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAgICovCisgIC8qICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCemlwMi1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgZm9udCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjb21wcmVzc2VkIHdpdGggdGhlICAqLworICAvKiAgIGBiemlwMicgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGICAgICAgKi8KKyAgLyogICBmaWxlcyB0aGF0IGNvbWUgd2l0aCBYRnJlZTg2LiAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGxpYmJ6MicgdG8gICovCisgIC8qICAgcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAoc2VlIHNyYy9iemlwMi9mdGJ6aXAyLmMpLiAqLworICAvKiAgIENvbnRyYXJ5IHRvIGd6aXAsIGJ6aXAyIGN1cnJlbnRseSBpcyBub3QgaW5jbHVkZWQgYW5kIG5lZWQgdG8gdXNlICAgKi8KKyAgLyogICB0aGUgc3lzdGVtIGF2YWlsYWJsZSBiemlwMiBpbXBsZW1lbnRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBORyBiaXRtYXAgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBsb2FkaW5nIGNvbG9yIGJpdG1hcCBnbHlwaHMgaW4gdGhlIFBORyBmb3JtYXQuICovCisgIC8qICAgVGhpcyByZXF1aXJlcyBoZWxwIGZyb20gdGhlIGV4dGVybmFsIGxpYnBuZyBsaWJyYXJ5LiAgVW5jb21wcmVzc2VkICAqLworICAvKiAgIGNvbG9yIGJpdG1hcHMgZG8gbm90IG5lZWQgYW55IGV4dGVybmFsIGxpYnJhcmllcyBhbmQgd2lsbCBiZSAgICAgICAgKi8KKyAgLyogICBzdXBwb3J0ZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBIYXJmQnV6eiBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRnJlZVR5cGUgdXNlcyB0aGUgSGFyZkJ1enogbGlicmFyeSB0byBpbXByb3ZlIGF1dG8taGludGluZyBvZiAgICAgICAqLworICAvKiAgIE9wZW5UeXBlIGZvbnRzLiAgSWYgYXZhaWxhYmxlLCBtYW55IGdseXBocyBub3QgZGlyZWN0bHkgYWRkcmVzc2FibGUgKi8KKyAgLyogICBieSBhIGZvbnQncyBjaGFyYWN0ZXIgbWFwIHdpbGwgYmUgaGludGVkIGFsc28uICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgZmlsZSBzdHJlYW0gZnVuY3Rpb25zIGFuZCB0eXBlcywgRklMRSwgICAqLworICAvKiBmb3BlbigpIGV0Yy4gIEVuYWJsZXMgdGhlIHVzZSBvZiBzbWFsbGVyIHN5c3RlbSBsaWJyYXJpZXMgb24gZW1iZWRkZWQgKi8KKyAgLyogc3lzdGVtcyB0aGF0IGhhdmUgbXVsdGlwbGUgc3lzdGVtIGxpYnJhcmllcywgc29tZSB3aXRoIG9yIHdpdGhvdXQgICAgICovCisgIC8qIGZpbGUgc3RyZWFtIHN1cHBvcnQsIGluIHRoZSBjYXNlcyB3aGVyZSBmaWxlIHN0cmVhbSBzdXBwb3J0IGlzIG5vdCAgICAqLworICAvKiBuZWNlc3Nhcnkgc3VjaCBhcyBtZW1vcnkgbG9hZGluZyBvZiBmb250IGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBETEwgZXhwb3J0IGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwsIHNvbWUgc3lzdGVtcy9jb21waWxlcnMgbmVlZCBhICAgICAqLworICAvKiAgIHNwZWNpYWwga2V5d29yZCBpbiBmcm9udCBPUiBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgZnVuY3Rpb24gICAgICAgKi8KKyAgLyogICBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFR3byBtYWNyb3MgYXJlIHVzZWQgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZSB0byBkZWZpbmUgICAgICAgKi8KKyAgLyogICBleHBvcnRlZCBsaWJyYXJ5IGZ1bmN0aW9uczogRlRfRVhQT1JUIGFuZCBGVF9FWFBPUlRfREVGLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9FWFBPUlQoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSogIGFsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9FWFBPUlRfREVGKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5KiAgYWxpYnJhcnkgKSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgRlRfRVhQT1JUIGFuZCAgICAgICAgICAgICovCisgIC8qICAgRlRfRVhQT1JUX0RFRiBoZXJlIGlmIHlvdSB3YW50LiAgSWYgeW91IGxlYXZlIHRoZW0gdW5kZWZpbmVkLCB0aGV5ICAqLworICAvKiAgIHdpbGwgYmUgbGF0ZXIgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIGBleHRlcm4gcmV0dXJuX3R5cGUnIHRvICAgICAgKi8KKyAgLyogICBhbGxvdyBub3JtYWwgY29tcGlsYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgKi8KKyAgLyogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBGVF9FWFBPUlQoeCkgICAgICBleHRlcm4geCAqLworLyogI2RlZmluZSBGVF9FWFBPUlRfREVGKHgpICB4ICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEdseXBoIFBvc3RzY3JpcHQgTmFtZXMgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGNvbXBpbGVkIHdpdGggdGhlIGBwc25hbWVzJyBtb2R1bGUuICBUaGlzICovCisgIC8qICAgbW9kdWxlIGlzIGluIGNoYXJnZSBvZiBjb252ZXJ0aW5nIGEgZ2x5cGggbmFtZSBzdHJpbmcgaW50byBhICAgICAgICAqLworICAvKiAgIFVuaWNvZGUgdmFsdWUsIG9yIHJldHVybiBhIE1hY2ludG9zaCBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvciB0aGUgICAgKi8KKyAgLyogICB1c2Ugd2l0aCB0aGUgVHJ1ZVR5cGUgYHBvc3QnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFVuZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCB3YW50IGBwc25hbWVzJyBjb21waWxlZCBpbiB5b3VyICAgKi8KKyAgLyogICBidWlsZCBvZiBGcmVlVHlwZS4gIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZWZmZWN0czogICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gVGhlIFRydWVUeXBlIGRyaXZlciB3aWxsIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgZ2x5cGggbmFtZXMsICAgICAgKi8KKyAgLyogICAgIGlmIHlvdSBidWlsZCBpdCB0byBzdXBwb3J0IHBvc3RzY3JpcHQgbmFtZXMgaW4gdGhlIFRydWVUeXBlICAgICAgICovCisgIC8qICAgICBgcG9zdCcgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAtIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgICAgICAgICovCisgIC8qICAgICBjaGFybWFwIG91dCBvZiB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBZb3Ugd291bGQgbm9ybWFsbHkgdW5kZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIHdoZW4gYnVpbGRpbmcgICovCisgIC8qICAgYSB2ZXJzaW9uIG9mIEZyZWVUeXBlIHRoYXQgZG9lc24ndCBjb250YWluIGEgVHlwZSAxIG9yIENGRiBkcml2ZXIuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBvc3RzY3JpcHQgTmFtZXMgdG8gVW5pY29kZSBWYWx1ZXMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGJ1aWx0IHdpdGggdGhlIGBQU05hbWVzJyBtb2R1bGUgY29tcGlsZWQgICovCisgIC8qICAgaW4uICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBtb2R1bGUgaXMgdXNlZCB0byBjb252ZXJ0IGEgZ2x5cGggbmFtZSAqLworICAvKiAgIGludG8gYSBVbmljb2RlIHZhbHVlLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBvcmRlciB0byAgICAgICAgKi8KKyAgLyogICBzeW50aGVzaXplIG9uIHRoZSBmbHkgYSBVbmljb2RlIGNoYXJtYXAgZnJvbSB0aGUgQ0ZGL1R5cGUgMSBkcml2ZXIgICovCisgIC8qICAgdGhyb3VnaCBhIGJpZyB0YWJsZSBuYW1lZCB0aGUgYEFkb2JlIEdseXBoIExpc3QnIChBR0wpLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBVbmRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3Qgd2FudCB0aGUgQWRvYmUgR2x5cGggTGlzdCAgICAgICAgICovCisgIC8qICAgY29tcGlsZWQgaW4geW91ciBgUFNOYW1lcycgbW9kdWxlLiAgVGhlIFR5cGUgMSBkcml2ZXIgd2lsbCBub3QgYmUgICAqLworICAvKiAgIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCBvdXQgb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgKi8KKyAgLyogICBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0FET0JFX0dMWVBIX0xJU1QKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3VwcG9ydCBmb3IgTWFjIGZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIG91dGxpbmUgZm9udHMgaW4gTWFjICAgICAgKi8KKyAgLyogICBmb3JtYXQgKG1hYyBkZm9udCwgbWFjIHJlc291cmNlLCBtYWNiaW5hcnkgY29udGFpbmluZyBhIG1hYyAgICAgICAgICovCisgIC8qICAgcmVzb3VyY2UpIG9uIG5vbi1NYWMgcGxhdGZvcm1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBOb3RlIHRoYXQgdGhlIGBGT05EJyByZXNvdXJjZSBpc24ndCBjaGVja2VkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHdWVzc2luZyBtZXRob2RzIHRvIGFjY2VzcyBlbWJlZGRlZCByZXNvdXJjZSBmb3JrcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRW5hYmxlIGV4dHJhIE1hYyBmb250cyBzdXBwb3J0IG9uIG5vbi1NYWMgcGxhdGZvcm1zIChlLmcuICAgICAgICAgICAqLworICAvKiAgIEdOVS9MaW51eCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgUmVzb3VyY2UgZm9ya3Mgd2hpY2ggaW5jbHVkZSBmb250cyBkYXRhIGFyZSBzdG9yZWQgc29tZXRpbWVzIGluICAgICAqLworICAvKiAgIGxvY2F0aW9ucyB3aGljaCB1c2VycyBvciBkZXZlbG9wZXJzIGRvbid0IGV4cGVjdGVkLiAgSW4gc29tZSBjYXNlcywgKi8KKyAgLyogICByZXNvdXJjZSBmb3JrcyBzdGFydCB3aXRoIHNvbWUgb2Zmc2V0IGZyb20gdGhlIGhlYWQgb2YgYSBmaWxlLiAgSW4gICovCisgIC8qICAgb3RoZXIgY2FzZXMsIHRoZSBhY3R1YWwgcmVzb3VyY2UgZm9yayBpcyBzdG9yZWQgaW4gZmlsZSBkaWZmZXJlbnQgICAqLworICAvKiAgIGZyb20gd2hhdCB0aGUgdXNlciBzcGVjaWZpZXMuICBJZiB0aGlzIG9wdGlvbiBpcyBhY3RpdmF0ZWQsICAgICAgICAgKi8KKyAgLyogICBGcmVlVHlwZSB0cmllcyB0byBndWVzcyB3aGV0aGVyIHN1Y2ggb2Zmc2V0cyBvciBkaWZmZXJlbnQgZmlsZSAgICAgICovCisgIC8qICAgbmFtZXMgbXVzdCBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBOb3RlIHRoYXQgbm9ybWFsLCBkaXJlY3QgYWNjZXNzIG9mIHJlc291cmNlIGZvcmtzIGlzIGNvbnRyb2xsZWQgdmlhICovCisgIC8qICAgdGhlIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTIG9wdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQWxsb3cgdGhlIHVzZSBvZiBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2UgdG8gbG9hZCB0eXBlZmFjZXMgdGhhdCAgICAgICovCisgIC8qIGNvbnRhaW4gbm8gZ2x5cGggZGF0YSwgYnV0IHN1cHBseSBpdCB2aWEgYSBjYWxsYmFjayBmdW5jdGlvbi4gICAgICAgICAqLworICAvKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGNsaWVudHMgc3VwcG9ydGluZyBkb2N1bWVudCBmb3JtYXRzIHdoaWNoICAgICAgICAgKi8KKyAgLyogc3VwcGx5IGZvbnQgZGF0YSBpbmNyZW1lbnRhbGx5IGFzIHRoZSBkb2N1bWVudCBpcyBwYXJzZWQsIHN1Y2ggICAgICAgICovCisgIC8qIGFzIHRoZSBHaG9zdHNjcmlwdCBpbnRlcnByZXRlciBmb3IgdGhlIFBvc3RTY3JpcHQgbGFuZ3VhZ2UuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KKyAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9SRU5ERVJfUE9PTF9TSVpFICAxNjM4NEwKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfTUFYX01PRFVMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtb2R1bGVzIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgaW4gYSBzaW5nbGUgICAgKi8KKyAgLyogICBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gIDMyIGlzIHRoZSBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9NQVhfTU9EVUxFUyAgMzIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVidWcgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIGNhbiBiZSBjb21waWxlZCBpbiBkZWJ1ZyBvciB0cmFjZSBtb2RlLiAgSW4gZGVidWcgbW9kZSwgICAgKi8KKyAgLyogICBlcnJvcnMgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIGBmdGRlYnVnJyBjb21wb25lbnQuICBJbiB0cmFjZSAgICAgICovCisgIC8qICAgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZyAgICAqLworICAvKiAgIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRGVmaW5lIEZUX0RFQlVHX0xFVkVMX0VSUk9SIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGRlYnVnIG1vZGUuICAgICAqLworICAvKiAgIERlZmluZSBGVF9ERUJVR19MRVZFTF9UUkFDRSB0byBidWlsZCBpdCBpbiB0cmFjZSBtb2RlLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG9uJ3QgZGVmaW5lIGFueSBvZiB0aGVzZSBtYWNyb3MgdG8gY29tcGlsZSBpbiBgcmVsZWFzZScgbW9kZSEgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lICovCisgIC8qICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfREVCVUdfTEVWRUxfRVJST1IKKyNkZWZpbmUgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQXV0b2ZpdHRlciBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIElmIEZUX0RFQlVHX0FVVE9GSVQgaXMgZGVmaW5lZCwgRnJlZVR5cGUgcHJvdmlkZXMgc29tZSBtZWFucyB0byAgICAgKi8KKyAgLyogICBjb250cm9sIHRoZSBhdXRvZml0dGVyIGJlaGF2aW91ciBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdpdGggZ2xvYmFsICovCisgIC8qICAgYm9vbGVhbiB2YXJpYWJsZXMgKGNvbnNlcXVlbnRseSwgeW91IHNob3VsZCAqbmV2ZXIqIGVuYWJsZSB0aGlzICAgICAqLworICAvKiAgIHdoaWxlIGNvbXBpbGluZyBpbiBgcmVsZWFzZScgbW9kZSk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBfYWZfZGVidWdfZGlzYWJsZV9ob3J6X2hpbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgX2FmX2RlYnVnX2Rpc2FibGVfdmVydF9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIF9hZl9kZWJ1Z19kaXNhYmxlX2JsdWVfaGludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSBkdW1wcyBvZiB2YXJpb3VzICAgICAgKi8KKyAgLyogICBpbnRlcm5hbCBhdXRvZml0IHN0cnVjdHVyZXMgdG8gc3Rkb3V0ICh1c2luZyBgcHJpbnRmJyk6ICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZHVtcF9wb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZ2V0X251bV9zZWdtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGFmX2dseXBoX2hpbnRzX2dldF9zZWdtZW50X29mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFzIGFuIGFyZ3VtZW50LCB0aGV5IHVzZSBhbm90aGVyIGdsb2JhbCB2YXJpYWJsZTogICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBfYWZfZGVidWdfaGludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGBmdGdyaWQnIGRlbW8gcHJvZ3JhbSB0byBzZWUgaG93IHRob3NlICAgICovCisgIC8qICAgdmFyaWFibGVzIGFuZCBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lICovCisgIC8qICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfREVCVUdfQVVUT0ZJVAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNZW1vcnkgRGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRnJlZVR5cGUgbm93IGNvbWVzIHdpdGggYW4gaW50ZWdyYXRlZCBtZW1vcnkgZGVidWdnZXIgdGhhdCBpcyAgICAgICAqLworICAvKiAgIGNhcGFibGUgb2YgZGV0ZWN0aW5nIHNpbXBsZSBlcnJvcnMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgZG91YmxlICAgICAgKi8KKyAgLyogICBkZWxldGVzLiAgVG8gY29tcGlsZSBpdCB3aXRoaW4geW91ciBidWlsZCBvZiB0aGUgbGlicmFyeSwgeW91ICAgICAgICovCisgIC8qICAgc2hvdWxkIGRlZmluZSBGVF9ERUJVR19NRU1PUlkgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBOb3RlIHRoYXQgdGhlIG1lbW9yeSBkZWJ1Z2dlciBpcyBvbmx5IGFjdGl2YXRlZCBhdCBydW50aW1lIHdoZW4gICAgICovCisgIC8qICAgd2hlbiB0aGUgX2Vudmlyb25tZW50XyB2YXJpYWJsZSBgRlQyX0RFQlVHX01FTU9SWScgaXMgZGVmaW5lZCBhbHNvISAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAgICovCisgIC8qICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfREVCVUdfTUVNT1JZCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1vZHVsZSBlcnJvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBJZiB0aGlzIG1hY3JvIGlzIHNldCAod2hpY2ggaXMgX25vdF8gdGhlIGRlZmF1bHQpLCB0aGUgaGlnaGVyIGJ5dGUgICovCisgIC8qICAgb2YgYW4gZXJyb3IgY29kZSBnaXZlcyB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQsICAqLworICAvKiAgIHdoaWxlIHRoZSBsb3dlciBieXRlIGlzIHRoZSByZWFsIGVycm9yIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgU2V0dGluZyB0aGlzIG1hY3JvIG1ha2VzIHNlbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSwgc2luY2UgICAqLworICAvKiAgIGl0IHdvdWxkIGJyZWFrIHNvdXJjZSBjb21wYXRpYmlsaXR5IG9mIGNlcnRhaW4gcHJvZ3JhbXMgdGhhdCB1c2UgICAgKi8KKyAgLyogICBGcmVlVHlwZSAyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGVzIGZ0bW9kZXJyLmggYW5kIGZ0ZXJyb3JzLmguICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSWYgdGhpcyBtYWNybyBpcyBzZXQgKHdoaWNoIGlzIF9ub3RfIHRoZSBkZWZhdWx0KSwgRnJlZVR5cGUyIHdpbGwgICAqLworICAvKiAgIGF2b2lkIGNyZWF0aW5nIGNvbnN0YW50cyB0aGF0IHJlcXVpcmUgYWRkcmVzcyBmaXh1cHMuICBJbnN0ZWFkIHRoZSAgKi8KKyAgLyogICBjb25zdGFudHMgd2lsbCBiZSBtb3ZlZCBpbnRvIGEgc3RydWN0IGFuZCBhZGRpdGlvbmFsIGludGlhbGl6YXRpb24gICovCisgIC8qICAgY29kZSB3aWxsIGJlIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBTZXR0aW5nIHRoaXMgbWFjcm8gaXMgbmVlZGVkIGZvciBzeXN0ZW1zIHRoYXQgcHJvaGliaXQgYWRkcmVzcyAgICAgICovCisgIC8qICAgZml4dXBzLCBzdWNoIGFzIEJSRVcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICBTIEYgTiBUICAgRCBSIEkgViBFIFIgICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgICAgICAgKi8KKyAgLyogZW1iZWRkZWQgYml0bWFwcyBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgU0ZOVCBtb2R1bGUgKG5hbWVseSAgICAgICAgICovCisgIC8qIFRydWVUeXBlICYgT3BlblR5cGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byAgICAqLworICAvKiBsb2FkIGFuZCBlbnVtZXJhdGUgdGhlIGdseXBoIFBvc3RzY3JpcHQgbmFtZXMgaW4gYSBUcnVlVHlwZSBvciAgICAgICAgKi8KKyAgLyogT3BlblR5cGUgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgd2hlbiB5b3UgZG8gbm90IGNvbXBpbGUgdGhlIGBQU05hbWVzJyBtb2R1bGUgYnkgdW5kZWZpbmluZyAgKi8KKyAgLyogdGhlIGFib3ZlIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUywgdGhlIGBzZm50JyBtb2R1bGUgd2lsbCAgICovCisgIC8qIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHVzZWQgdG8gcmVhZCB0aGUgUFMgTmFtZXMgdGFibGUgZnJvbSBhIGZvbnQuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogKEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgdXNlcyBgUFNOYW1lcycgdG8gZXh0cmFjdCBnbHlwaCBuYW1lcy4pICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUyBpZiB5b3VyIGFwcGxpY2F0aW9ucyBuZWVkIHRvICAgICAgICovCisgIC8qIGFjY2VzcyB0aGUgaW50ZXJuYWwgbmFtZSB0YWJsZSBpbiBhIFNGTlQtYmFzZWQgZm9ybWF0IGxpa2UgVHJ1ZVR5cGUgICAqLworICAvKiBvciBPcGVuVHlwZS4gIFRoZSBuYW1lIHRhYmxlIGNvbnRhaW5zIHZhcmlvdXMgc3RyaW5ncyB1c2VkIHRvICAgICAgICAgKi8KKyAgLyogZGVzY3JpYmUgdGhlIGZvbnQsIGxpa2UgZmFtaWx5IG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLiAgSXQgICAgICovCisgIC8qIGRvZXMgbm90IGNvbnRhaW4gYW55IGdseXBoIG5hbWUgdGhvdWdoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQWNjZXNzaW5nIFNGTlQgbmFtZXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gICAgICAgICovCisgIC8qIGBmdHNuYW1lcy5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRydWVUeXBlIENNYXAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBIZXJlIHlvdSBjYW4gZmluZS10dW5lIHdoaWNoIFRydWVUeXBlIENNYXAgdGFibGUgZm9ybWF0IHNoYWxsIGJlICAgICovCisgIC8qICAgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMAorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMgorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNAorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNgorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfOAorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTAKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzEyCisjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMworI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgIFQgUiBVIEUgVCBZIFAgRSAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgaWYgeW91IHdhbnQgdG8gY29tcGlsZSAgICovCisgIC8qIGEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaW4gdGhlIFRydWVUeXBlIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQnkgdW5kZWZpbmluZyB0aGlzLCB5b3Ugd2lsbCBvbmx5IGNvbXBpbGUgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGxvYWQgICovCisgIC8qIFRydWVUeXBlIGdseXBocyB3aXRob3V0IGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSwgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCAgICAgICAgICovCisgIC8qICAgZGVmaW5lIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgICAgICAgKi8KKyAgLyogRVhQRVJJTUVOVEFMIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCBpbnRvIHRoZSBUcnVlVHlwZSBkcml2ZXIuICBUaGlzICovCisgIC8qIHJlcGxhY2VzIHRoZSBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBtZWNoYW5pc20gd2hlbiBhbnl0aGluZyBidXQgICAgICAqLworICAvKiBGVF9SRU5ERVJfTU9ERV9NT05PIGlzIHJlcXVlc3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVuYWJsaW5nIHRoaXMgY2F1c2VzIHRoZSBUcnVlVHlwZSBkcml2ZXIgdG8gaWdub3JlIGluc3RydWN0aW9ucyB1bmRlciAqLworICAvKiBjZXJ0YWluIGNvbmRpdGlvbnMuICBUaGlzIGlzIGRvbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBndWlkZSBoZXJlLCAgKi8KKyAgLyogd2l0aCBzb21lIG1pbm9yIGRpZmZlcmVuY2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHggKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEJ5IHVuZGVmaW5pbmcgdGhpcywgeW91IG9ubHkgY29tcGlsZSB0aGUgY29kZSBuZWNlc3NhcnkgdG8gaGludCAgICAgICAqLworICAvKiBUcnVlVHlwZSBnbHlwaHMgd2l0aCBuYXRpdmUgVFQgaGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyBvcHRpb24gcmVxdWlyZXMgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiB0byBiZSAgICAqLworICAvKiAgIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiB5b3UgZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HLCBhIHNwZWNpYWwgdmVyc2lvbiAgKi8KKyAgLyogb2YgdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIGlzIHVzZWQgdGhhdCBkb2Vzbid0IGltcGxlbWVudCAgICovCisgIC8qIGFueSBvZiB0aGUgcGF0ZW50ZWQgb3Bjb2RlcyBhbmQgYWxnb3JpdGhtcy4gIFRoZSBwYXRlbnRzIHJlbGF0ZWQgdG8gICAqLworICAvKiBUcnVlVHlwZSBoaW50aW5nIGhhdmUgZXhwaXJlZCB3b3JsZHdpZGUgc2luY2UgTWF5IDIwMTA7IHRoaXMgb3B0aW9uICAgKi8KKyAgLyogaXMgbm93IGRlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgdGhlIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HIG1hY3JvIGlzICppZ25vcmVkKiAgKi8KKyAgLyogaWYgeW91IGRlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSOyBpbiBvdGhlciB3b3JkcywgICovCisgIC8qIGVpdGhlciBkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiBvciAgICAgICAgICAgICAgICAqLworICAvKiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyBidXQgbm90IGJvdGggYXQgdGhlIHNhbWUgdGltZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgbWFjcm8gaXMgb25seSB1c2VmdWwgZm9yIGEgc21hbGwgbnVtYmVyIG9mIGZvbnQgZmlsZXMgKG1vc3RseSAgICAqLworICAvKiBmb3IgQXNpYW4gc2NyaXB0cykgdGhhdCByZXF1aXJlIGJ5dGVjb2RlIGludGVycHJldGF0aW9uIHRvIHByb3Blcmx5ICAgKi8KKyAgLyogbG9hZCBnbHlwaHMuICBGb3IgYWxsIG90aGVyIGZvbnRzLCB0aGlzIHByb2R1Y2VzIHVucGxlYXNhbnQgcmVzdWx0cywgICovCisgIC8qIHRodXMgdGhlIHVucGF0ZW50ZWQgaW50ZXJwcmV0ZXIgaXMgbmV2ZXIgdXNlZCB0byBsb2FkIGdseXBocyBmcm9tICAgICAqLworICAvKiBUcnVlVHlwZSBmb250cyB1bmxlc3Mgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIG9wdGlvbnMgaXMgdXNlZC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgLSBUaGUgdW5wYXRlbnRlZCBpbnRlcnByZXRlciBpcyBleHBsaWNpdGx5IGFjdGl2YXRlZCBieSB0aGUgdXNlciAgICAqLworICAvKiAgICAgdGhyb3VnaCB0aGUgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyBwYXJhbWV0ZXIgdGFnICAgICAgICAgKi8KKyAgLyogICAgIHdoZW4gb3BlbmluZyB0aGUgRlRfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gRnJlZVR5cGUgZGV0ZWN0cyB0aGF0IHRoZSBGVF9GYWNlIGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgICAgICAgKi8KKyAgLyogICAgIGB0cmljaycgZm9udHMgKGUuZy4sIGBNaW5nbGl1JykgaXQga25vd3MgYWJvdXQuICBUaGUgZm9udCBlbmdpbmUgICovCisgIC8qICAgICBjb250YWlucyBhIGhhcmQtY29kZWQgbGlzdCBvZiBmb250IG5hbWVzIGFuZCBvdGhlciBtYXRjaGluZyAgICAgICAqLworICAvKiAgICAgcGFyYW1ldGVycyAoc2VlIGZ1bmN0aW9uIGB0dF9mYWNlX2luaXQnIGluIGZpbGUgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBIZXJlIGEgc2FtcGxlIGNvZGUgc25pcHBldCBmb3IgdXNpbmcgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRlRfUGFyYW1ldGVyICBwYXJhbWV0ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX09wZW5fQXJncyAgb3Blbl9hcmdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHBhcmFtZXRlci50YWcgPSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HOyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgb3Blbl9hcmdzLmZsYWdzICAgICAgPSBGVF9PUEVOX1BBVEhOQU1FIHwgRlRfT1BFTl9QQVJBTVM7ICAgICAgICAgKi8KKyAgLyogICAgIG9wZW5fYXJncy5wYXRobmFtZSAgID0gbXlfZm9udF9wYXRobmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBvcGVuX2FyZ3MubnVtX3BhcmFtcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgb3Blbl9hcmdzLnBhcmFtcyAgICAgPSAmcGFyYW1ldGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJm9wZW5fYXJncywgaW5kZXgsICZmYWNlICk7ICAgICAgICAqLworICAvKiAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRCB0byBjb21waWxlIHRoZSAgICAgICAgKi8KKyAgLyogVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIHRvIHVzZSBBcHBsZSdzIGRlZmluaXRpb24gb2YgaG93IHRvIGhhbmRsZSAgICAgICovCisgIC8qIGNvbXBvbmVudCBvZmZzZXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQXBwbGUgYW5kIE1TIGRpc2FncmVlIG9uIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGNvbXBvbmVudCBvZmZzZXRzICAgICovCisgIC8qIGluIGNvbXBvc2l0ZXMuICBBcHBsZSBzYXlzIHRoYXQgdGhleSBzaG91bGQgYmUgc2NhbGVkIGJ5IHRoZSBzY2FsaW5nICAqLworICAvKiBmYWN0b3JzIGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKHJvdWdobHksIGl0J3MgbW9yZSBjb21wbGV4KSAgICAgKi8KKyAgLyogd2hpbGUgTVMgc2F5cyB0aGV5IHNob3VsZCBub3QuICBPcGVuVHlwZSBkZWZpbmVzIHR3byBiaXRzIGluIHRoZSAgICAgICovCisgIC8qIGNvbXBvc2l0ZSBmbGFncyBhcnJheSB3aGljaCBjYW4gYmUgdXNlZCB0byBkaXNhbWJpZ3VhdGUsIGJ1dCBvbGQgICAgICAqLworICAvKiBmb250cyB3aWxsIG5vdCBoYXZlIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtICAgICAgICAgICAgICAgICAqLworICAvKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZnbHlmLmh0bWwgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCBpZiB5b3Ugd2FudCB0byBpbmNsdWRlICAgICAgICAgKi8KKyAgLyogc3VwcG9ydCBmb3IgQXBwbGUncyBkaXN0b3J0YWJsZSBmb250IHRlY2hub2xvZ3kgKGZ2YXIsIGd2YXIsIGN2YXIsICAgICovCisgIC8qIGFuZCBhdmFyIHRhYmxlcykuICBUaGlzIGhhcyBtYW55IHNpbWlsYXJpdGllcyB0byBUeXBlIDEgTXVsdGlwbGUgICAgICAqLworICAvKiBNYXN0ZXJzIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQkRGIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgICAgICAgICovCisgIC8qIGFuIGVtYmVkZGVkIGBCREYgJyB0YWJsZSB3aXRoaW4gU0ZOVC1iYXNlZCBiaXRtYXAgZm9ybWF0cy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CREYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgVCBZIFAgRSAxICAgRCBSIEkgViBFIFIgICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUMV9NQVhfRElDVF9ERVBUSCBpcyB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0IGRpY3Rpb25hcmllcyBhbmQgICAgICAgKi8KKyAgLyogYXJyYXlzIGluIHRoZSBUeXBlIDEgc3RyZWFtIChzZWUgdDFsb2FkLmMpLiAgQSBtaW5pbXVtIG9mIDQgaXMgICAgICAgICovCisgIC8qIHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVDFfTUFYX0RJQ1RfREVQVEggIDUKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVDFfTUFYX1NVQlJTX0NBTExTIGRldGFpbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBzdWItcm91dGluZSAgICovCisgIC8qIGNhbGxzIGR1cmluZyBnbHlwaCBsb2FkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVDFfTUFYX1NVQlJTX0NBTExTICAxNgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUMV9NQVhfQ0hBUlNUUklOR19PUEVSQU5EUyBpcyB0aGUgY2hhcnN0cmluZyBzdGFjaydzIGNhcGFjaXR5LiAgQSAgICAgKi8KKyAgLyogbWluaW11bSBvZiAxNiBpcyByZXF1aXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgQ2hpbmVzZSBmb250IE1pbmdUaUVHLU1lZGl1bSAoQ05TIDExNjQzIGNoYXJhY3RlciBzZXQpIG5lZWRzIDI1Ni4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyAgMjU2CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gaWYgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgICAgICAgICAgICAqLworICAvKiBjb21waWxhdGlvbiBvZiBgdDFhZm0nLCB3aGljaCBpcyBpbiBjaGFyZ2Ugb2YgcmVhZGluZyBUeXBlIDEgQUZNICAgICAgKi8KKyAgLyogZmlsZXMgaW50byBhbiBleGlzdGluZyBmYWNlLiAgTm90ZSB0aGF0IGlmIHNldCwgdGhlIFQxIGRyaXZlciB3aWxsIGJlICovCisgIC8qIHVuYWJsZSB0byBwcm9kdWNlIGtlcm5pbmcgZGlzdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlICAgICAgICAgICAgKi8KKyAgLyogY29tcGlsYXRpb24gb2YgdGhlIE11bHRpcGxlIE1hc3RlcnMgZm9udCBzdXBwb3J0IGluIHRoZSBUeXBlIDEgICAgICAgICovCisgIC8qIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgQyBGIEYgICBEIFIgSSBWIEUgUiAgICBDIE8gTiBGIEkgRyBVIFIgQSBUIEkgTyBOICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBVc2luZyBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX3tYLFl9ezEsMiwzLDR9IGl0IGlzICAgICAgKi8KKyAgLyogcG9zc2libGUgdG8gc2V0IHVwIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgZm91ciBjb250cm9sIHBvaW50cyB0aGF0ICovCisgIC8qIGRlZmluZSB0aGUgc3RlbSBkYXJrZW5pbmcgYmVoYXZpb3VyIG9mIHRoZSAobmV3KSBDRkYgZW5naW5lLiAgRm9yICAgICAqLworICAvKiBtb3JlIGRldGFpbHMgcGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogYGRhcmtlbmluZy1wYXJhbWV0ZXJzJyBwcm9wZXJ0eSBvZiB0aGUgY2ZmIGRyaXZlciBtb2R1bGUgKGZpbGUgICAgICAgICovCisgIC8qIGBmdGNmZmRydi5oJyksIHdoaWNoIGFsbG93cyB0aGUgY29udHJvbCBhdCBydW4tdGltZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRG8gKm5vdCogdW5kZWZpbmUgdGhlc2UgbWFjcm9zISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxICAgNTAwCisjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTEgICA0MDAKKworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyICAxMDAwCisjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTIgICAyNzUKKworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzICAxNjY3CisjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTMgICAyNzUKKworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0ICAyMzMzCisjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTQgICAgIDAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBjb250cm9scyB3aGV0aGVyIHRoZSBwcmUtQWRvYmUgQ0ZGICAgICAgICovCisgIC8qIGVuZ2luZSBnZXRzIGNvbXBpbGVkIGludG8gRnJlZVR5cGUuICBJZiBkZWZpbmVkLCBpdCBpcyBwb3NzaWJsZSB0byAgICAqLworICAvKiBzd2l0Y2ggYmV0d2VlbiB0aGUgdHdvIGVuZ2luZXMgdXNpbmcgdGhlIGBoaW50aW5nLWVuZ2luZScgcHJvcGVydHkgb2YgKi8KKyAgLyogdGhlIGNmZiBkcml2ZXIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICBBIFUgVCBPIEYgSSBUICAgTSBPIEQgVSBMIEUgICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIENKSyAoQ2hpbmVzZSwgSmFwYW5lc2UsIEtvcmVhbikgc2NyaXB0ICAgICovCisgIC8qIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9DSksKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCBJbmRpYyBzY3JpcHQgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIHdhcnAgaGludGluZy4gIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nICAgICovCisgIC8qIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbiAqLworICAvKiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkIChtb3JlIG9yIGxlc3MpIG9uIHRoZSAgICAgKi8KKyAgLyogZ3JpZC4gIFRvIGZpbmQgb3V0IHRoZSBvcHRpbWFsIHNjYWxpbmcgYW5kIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzICAgICovCisgIC8qIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcyAgICAgICovCisgIC8qIEZUX1JFTkRFUl9NT0RFX0xJR0hUOyB5b3UgY2FuIHN3aXRjaCB3YXJwaW5nIG9uIGFuZCBvZmYgd2l0aCB0aGUgICAgICAqLworICAvKiBgd2FycGluZycgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIChzZWUgZmlsZSBgZnRhdXRvaC5oJyBmb3IgbW9yZSAgKi8KKyAgLyogaW5mb3JtYXRpb247IGJ5IGRlZmF1bHQgaXQgaXMgc3dpdGNoZWQgb2ZmKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKworICAvKiAqLworCisKKyAgLyoKKyAgICogVGhpcyBtYWNybyBpcyBvYnNvbGV0ZS4gIFN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBGcmVlVHlwZQorICAgKiB2ZXJzaW9uIDIuNS4KKyAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fT0xEX0lOVEVSTkFMUyAqLworCisKKyAgLyoKKyAgICogVGhpcyBtYWNybyBpcyBkZWZpbmVkIGlmIGVpdGhlciB1bnBhdGVudGVkIG9yIG5hdGl2ZSBUcnVlVHlwZQorICAgKiBoaW50aW5nIGlzIHJlcXVlc3RlZCBieSB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisgICAqLworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKKyNkZWZpbmUgIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorI3VuZGVmICAgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyNlbGlmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyNkZWZpbmUgIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorI2VuZGlmCisKKworICAvKgorICAgKiBDaGVjayBDRkYgZGFya2VuaW5nIHBhcmFtZXRlcnMuICBUaGUgY2hlY2tzIGFyZSB0aGUgc2FtZSBhcyBpbiBmdW5jdGlvbgorICAgKiBgY2ZmX3Byb3BlcnR5X3NldCcgaW4gZmlsZSBgY2ZmZHJpdnIuYycuCisgICAqLworI2lmIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDEgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDIgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDMgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDQgPCAwICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTEgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTIgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTMgPCAwICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTQgPCAwICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDEgPiAgICAgICAgXAorICAgICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMiAgICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDIgPiAgICAgICAgXAorICAgICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMyAgICAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDMgPiAgICAgICAgXAorICAgICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YNCAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTEgPiA1MDAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTIgPiA1MDAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTMgPiA1MDAgfHwgXAorICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTQgPiA1MDAKKyNlcnJvciAiSW52YWxpZCBDRkYgZGFya2VuaW5nIHBhcmFtZXRlcnMhIgorI2VuZGlmCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19GVE9QVElPTl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0NIQU5HRVMgYi9mcmVldHlwZS0yLjYvZG9jcy9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTc3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9DSEFOR0VTCkBAIC0wLDAgKzEsNDI4MyBAQAorCitDSEFOR0VTIEJFVFdFRU4gMi41LjUgYW5kIDIuNgorCisgIEkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIEJlaGRhZCAgRXNmYWhib2QgY29udHJpYnV0ZWQgIGNvZGUgIGZvciBpbXByb3ZlZCAgdGhyZWFkLXNhZmV0eSwKKyAgICAgIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyBtb2RlbC4KKworICAgICAgKiBBbiBgRlRfRmFjZScgb2JqZWN0IGNhbiBvbmx5IGJlIHNhZmVseSB1c2VkIGZyb20gb25lIHRocmVhZCBhdAorICAgICAgICBhIHRpbWUuCisKKyAgICAgICogQW4gYEZUX0xpYnJhcnknICBvYmplY3QgY2FuICBub3cgYmUgdXNlZCAgd2l0aG91dCBtb2RpZmljYXRpb24KKyAgICAgICAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICAgICogYEZUX0ZhY2UnIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAgd2l0aCB0aGUgc2FtZSBgRlRfTGlicmFyeScKKyAgICAgICAgb2JqZWN0IGNhbiBvbmx5IGJlIGRvbmUgZnJvbSBvbmUgdGhyZWFkIGF0IGEgdGltZS4KKworICAgICAgT25lIGNhbiB1c2UgYSBzaW5nbGUgIGBGVF9MaWJyYXJ5JyBvYmplY3QgYWNyb3NzIHRocmVhZHMgYXMgbG9uZworICAgICAgYXMgYSBtdXRleCBsb2NrIGlzIHVzZWQgYXJvdW5kIGBGVF9OZXdfRmFjZScgYW5kIGBGVF9Eb25lX0ZhY2UnLgorICAgICAgQW55IGNhbGxzIHRvIGBGVF9Mb2FkX0dseXBoJyBhbmQgc2ltaWxhciBBUEkgYXJlIHNhZmUgYW5kIGRvIG5vdAorICAgICAgbmVlZCB0aGUgbG9jayAgdG8gYmUgaGVsZCBhcyAgbG9uZyBhcyB0aGUgc2FtZSAgYEZUX0ZhY2UnIGlzIG5vdAorICAgICAgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4KKworICAgIC0gVGhhaSBzY3JpcHQgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYXV0by1oaW50ZXIuCisKKyAgICAtIEFyYWJpYyBzY3JpcHQgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYXV0by1oaW50ZXIuCisKKyAgICAtIEZvbGxvd2luZyBPcGVuVHlwZSB2ZXJzaW9uIDEuNywgIGFkdmFuY2Ugd2lkdGhzIGFuZCBzaWRlIGJlYXJpbmcKKyAgICAgIHZhbHVlcyBpbiAgQ0ZGcyAod3JhcHBlZCAgaW4gYW4gU0ZOVCAgc3RydWN0dXJlKSBhcmUgIG5vdyBhbHdheXMKKyAgICAgIHRha2VuIGZyb20gdGhlIGBobXR4JyB0YWJsZS4KKworICAgIC0gRm9sbG93aW5nIE9wZW5UeXBlICB2ZXJzaW9uIDEuNywgdGhlICBQb3N0U2NyaXB0IGZvbnQgbmFtZSAgb2YgYQorICAgICAgQ0ZGIGZvbnQgKHdyYXBwZWQgaW4gYW4gU0ZOVCBzdHJ1Y3R1cmUpIGlzIG5vdyBhbHdheXMgdGFrZW4gZnJvbQorICAgICAgdGhlIGBuYW1lJyAgdGFibGUuICBUaGlzIGlzICBhbHNvIHRydWUgZm9yICBPcGVuVHlwZSBDb2xsZWN0aW9ucworICAgICAgKGkuZS4sIFRUQ3MgdXNpbmcgIENGRnMgc3ViZm9udHMgaW5zdGVhZCBvZiBUVEZzKSwgIHdoZXJlIGl0IG1heQorICAgICAgaGF2ZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UuCisKKyAgICAtIEZvbnRzIG5hdGl2ZWx5IGhpbnRlZCBmb3IgIENsZWFyVHlwZSBhcmUgbm93IHN1cHBvcnRlZCwgcHJvcGVybHkKKyAgICAgIGhhbmRsaW5nIHNlbGVjdG9yIGluZGV4IDMgb2YgdGhlIElOU1RDVFJMIGJ5dGVjb2RlIGluc3RydWN0aW9uLgorCisgICAgLSBNYWpvciBpbXByb3ZlbWVudHMgdG8gdGhlIEdYIFRydWVUeXBlIHZhcmlhdGlvbiBmb250IGhhbmRsaW5nLgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gQSBuZXcgYXV0by1oaW50ZXIgIHByb3BlcnR5IGB3YXJwaW5nJyBjYW4gc3dpdGNoIG9uICBhbmQgb2ZmIHRoZQorICAgICAgd2FycGluZyBjb2RlICBpZiB0aGlzICBleHBlcmltZW50YWwgZmVhdHVyZSAgaXMgY29tcGlsZWQgIGluIChieQorICAgICAgZGVmaW5pbmcgIHRoZSBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIgIGNvbmZpZ3VyYXRpb24gb3B0aW9uOworICAgICAgYnkgZGVmYXVsdCAgdGhpcyBvcHRpb24gaXMgIG5vdyBlbmFibGVkIGJ1dCB3YXJwaW5nICBpcyBzd2l0Y2hlZAorICAgICAgb2ZmKS4KKworICAgICAgVGhlIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiBvcHRpb24gaXRzZWxmIGlzIGFuIG9sZCBmZWF0dXJlLAorICAgICAgYXZhaWxhYmxlICAgc2luY2UgIDIwMDYuICAgIFdhcnBpbmcgICBvbmx5ICAgd29ya3MgIGluICAgYGxpZ2h0JworICAgICAgYXV0by1oaW50aW5nIG1vZGUuICAgVGhlIGlkZWEgb2YgIHRoZSBjb2RlIGlzIHRvICBzbGlnaHRseSBzY2FsZQorICAgICAgYW5kICBzaGlmdCBhICBnbHlwaCAgYWxvbmcgdGhlICBub24taGludGVkICBkaW1lbnNpb24gKHdoaWNoICBpcworICAgICAgdXN1YWxseSB0aGUgaG9yaXpvbnRhbCBheGlzKSBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZQorICAgICAgYWxpZ25lZCAgKG1vcmUgb3IgIGxlc3MpIHRvICB0aGUgZ3JpZC4gICBUbyBmaW5kICBvdXQgYSAgZ2x5cGgncworICAgICAgb3B0aW1hbCAgIHNjYWxpbmcgICBhbmQgICBzaGlmdGluZyAgdmFsdWUsICAgdmFyaW91cyAgIHBhcmFtZXRlcgorICAgICAgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLgorCisgICAgICBTZWUgIGZpbGUgIGBmdGF1dG9oLmgnIGZvciAgbW9yZTsgIHRoZSAgZGVtbyBwcm9ncmFtcyAgYGZ0ZGlmZicsCisgICAgICBgZnR2aWV3JywgYW5kIGBmdGdyaWQnIGNhbiB0b2dnbGUgd2FycGluZyB3aXRoIGtleSBgdycuCisKKyAgICAtIFNvbWUgIGZpZWxkcyAgaW4gIHRoZSAgYEZUQ19JbWFnZVR5cGVSZWMnICBzdHJ1Y3R1cmUgIGhhdmUgIGJlZW4KKyAgICAgIGNoYW5nZWQgZnJvbSBzaWduZWQgdG8gdW5zaWduZWQgIHR5cGUsIHdoaWNoIGJldHRlciByZWZsZWN0cyB0aGUKKyAgICAgIGFjdHVhbCB1c2FnZS4gIEl0IGlzIGFsc28gYW4gYWRkaXRpb25hbCBtZWFucyB0byBwcm90ZWN0IGFnYWluc3QKKyAgICAgIG1hbGZvcm1lZCBpbnB1dC4KKworICAgICAgVGhpcyAgY2hhbmdlIGRvZXNuJ3QgIGJyZWFrICB0aGUgQUJJOyAgaG93ZXZlciwgIGl0IG1pZ2h0ICBjYXVzZQorICAgICAgY29tcGlsZXIgd2FybmluZ3MuCisKKyAgICAtIEZ1bmN0aW9uIGBGVF9CaXRtYXBfTmV3JyAgaGFzIGJlZW4gcmVuYW1lZCAgdG8gYEZUX0JpdG1hcF9Jbml0JywKKyAgICAgIHNpbmNlICB0aGlzIG5hbWUgIGJldHRlciByZWZsZWN0cyAgaXRzIGZ1bmN0aW9uLiAgIEZvciBiYWNrd2FyZHMKKyAgICAgIGNvbXBhdGliaWxpdHksIHRoZSBvbGQgZnVuY3Rpb24gbmFtZSBpcyBzdGlsbCBhdmFpbGFibGUuCisKKyAgICAtIEZ1bmN0aW9uICAgYEZUX0dldF9YMTFfRm9udF9Gb3JtYXQnICAgaGFzICAgIGJlZW4gICByZW5hbWVkICAgdG8KKyAgICAgIGBGVF9HZXRfRm9udF9Gb3JtYXQnLCAgc2luY2UgIHRoaXMgICBuYW1lICBiZXR0ZXIgIHJlZmxlY3RzICBpdHMKKyAgICAgIGZ1bmN0aW9uLiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgb2xkIGZ1bmN0aW9uIG5hbWUgaXMKKyAgICAgIHN0aWxsIGF2YWlsYWJsZS4KKworICAgICAgQWRkaXRpb25hbGx5LCB0aGUgaGVhZGVyICBmaWxlIG1hY3JvIGZvciB0aGlzICBmdW5jdGlvbiBoYXMgYmVlbgorICAgICAgcmVuYW1lZCB0byAgYEZUX0ZPTlRfRk9STUFUU19IJyAodGhlIG9sZCBuYW1lICBgRlRfWEZSRUU4Nl9IJyBpcworICAgICAgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KS4KKworICAgIC0gVmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGhlIGBmdGdyaWQnIGRlbW8gcHJvZ3JhbS4KKworICAgICAgLiBJdCAgY2FuICBub3cgIGRpc3BsYXkgIEdYIGFuZCAgTU0gIGZvbnRzICB3aGlsZSAgaW50ZXJhY3RpdmVseQorICAgICAgICBtYW5pcHVsYXRpbmcgdGhlIGF4ZXMgKHdpdGgga2V5cyBGMiwgRjMsIGFuZCBGNCkuCisKKyAgICAgIC4gQW50aS1hbGlhc2luZyByZW5kZXJpbmcgIG1vZGVzIGNhbiBub3cgYmUgIHNlbGVjdGVkICh3aXRoIGtleXMKKyAgICAgICAgRjUgYW5kIEY2KS4KKworICAgICAgLiBUaGUgZGlzcGxheSBvZiBwb2ludCBudW1iZXJzIGNhbiBiZSB0b2dnbGVkIHdpdGgga2V5IGBEJy4KKworICAgIC0gVmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGhlIGBmdGR1bXAnIGRlbW8gcHJvZ3JhbS4KKworICAgICAgLiBJdCBub3cgZGlzcGxheXMgaW5mb3JtYXRpb24gb24gTU0gYW5kIEdYIHZhcmlhdGlvbiBheGVzLgorCisgICAgICAuIE5ldyAgY29tbWFuZCBsaW5lIG9wdGlvbiAgYC11JyBtYWtlcyAgaXQgb3V0cHV0IGRhdGEgIGluIHV0Zi04CisgICAgICAgIGVuY29kaW5nLgorCisgICAgLSBUaGUgYGZ0bXVsdGknICBkZW1vIHByb2dyYW0gY2FuICBub3cgaGFuZGxlIHVwICB0byBzaXggTU0gIG9yIEdYCisgICAgICBheGVzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuNS40IGFuZCAyLjUuNQorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gSGFuZGxpbmcgb2YgIHVuY29tcHJlc3NlZCBQQ0YgZmlsZXMgd29ya3MgYWdhaW4gKGJ1ZyAgaW50cm9kdWNlZAorICAgICAgaW4gdmVyc2lvbiAyLjUuNCkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi41LjMgYW5kIDIuNS40CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBICAgdmFyaWFudCAgb2YgICB2dWxuZXJhYmlsaXR5ICBDVkUtMjAxNC0yMjQwICAgd2FzICBpZGVudGlmaWVkCisgICAgICAoY2YuICBodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz80MzY2MSkgYW5kICBmaXhlZCBpbiAgdGhlCisgICAgICBuZXcgQ0ZGIGRyaXZlci4gIEFsbCB1c2VycyBzaG91bGQgdXBncmFkZS4KKworICAgIC0gVGhlIG5ldyBhdXRvLWhpbnRlciBjb2RlIHVzaW5nIEhhcmZCdXp6IGNyYXNoZWQgZm9yIHNvbWUgaW52YWxpZAorICAgICAgZm9udHMuCisKKyAgICAtIE1hbnkgZml4ZXMgdG8gYmV0dGVyIHByb3RlY3QgYWdhaW5zdCBtYWxmb3JtZWQgaW5wdXQuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gRnVsbCBhdXRvLWhpbnRlciBzdXBwb3J0IG9mIHRoZSBEZXZhbmFnYXJpIHNjcmlwdC4KKworICAgIC0gRXhwZXJpbWVudGFsIGF1dG8taGludGVyIHN1cHBvcnQgb2YgdGhlIFRlbHVndSBzY3JpcHQuCisKKyAgICAtIENGRiBzdGVtIGRhcmtlbmluZyBiZWhhdmlvdXIgY2FuIG5vdyBiZSBjb250cm9sbGVkIGF0IGJ1aWxkIHRpbWUKKyAgICAgIHVzaW5nIHRoZSBlaWdodCBtYWNyb3MKKworICAgICAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX3tYLFl9ezEsMiwzLDR9ICAgIC4KKworICAgIC0gU29tZSBmaWVsZHMgaW4gdGhlIGBGVF9CaXRtYXAnICBzdHJ1Y3R1cmUgaGF2ZSBiZWVuIGNoYW5nZWQgZnJvbQorICAgICAgc2lnbmVkIHRvIHVuc2lnbmVkIHR5cGUsIHdoaWNoIGJldHRlciByZWZsZWN0cyB0aGUgYWN0dWFsIHVzYWdlLgorICAgICAgSXQgIGlzIGFsc28gIGFuIGFkZGl0aW9uYWwgIG1lYW5zIHRvICBwcm90ZWN0IGFnYWluc3QgIG1hbGZvcm1lZAorICAgICAgaW5wdXQuCisKKyAgICAgIFRoaXMgIGNoYW5nZSBkb2Vzbid0ICBicmVhayAgdGhlIEFCSTsgIGhvd2V2ZXIsICBpdCBtaWdodCAgY2F1c2UKKyAgICAgIGNvbXBpbGVyIHdhcm5pbmdzLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIEltcHJvdmVtZW50cyB0byAgdGhlIGF1dG8taGludGVyJ3MgYWxnb3JpdGhtIHRvICByZWNvZ25pemUgc3RlbXMKKyAgICAgIGFuZCBsb2NhbCBleHRyZW1hLgorCisgICAgLSBGdW5jdGlvbiBgRlRfR2V0X1N1YkdseXBoX0luZm8nIGFsd2F5cyByZXR1cm5lZCBhbiBlcnJvciBldmVuIGluCisgICAgICBjYXNlIG9mIHN1Y2Nlc3MuCisKKyAgICAtIFZlcnNpb24gIDIuNS4xIGludHJvZHVjZWQgIG1ham9yIGJ1Z3MgIGluICB0aGUgY2prICBwYXJ0IG9mICB0aGUKKyAgICAgIGF1dG8taGludGVyLCB3aGljaCBhcmUgbm93IGZpeGVkLgorCisgICAgLSBUaGUgIGBGVF9TZm50X1RhZycgIGVudW1lcmF0aW9uICB2YWx1ZXMgIGhhdmUgIGJlZW4gIGNoYW5nZWQgIHRvCisgICAgICB1cHBlcmNhc2UsICBlLmcuICBgRlRfU0ZOVF9IRUFEJy4gICBUaGUgbG93ZXJjYXNlICB2YXJpYW50cyAgYXJlCisgICAgICBkZXByZWNhdGVkLiAgICBUaGlzICBpcyAgIGZvciAgb3J0aG9nb25hbGl0eSAgIHdpdGggIGFsbCAgIG90aGVyCisgICAgICBlbnVtZXJhdGlvbiAoYW5kIGVudW1lcmF0aW9uLWxpa2UpIHZhbHVlcyBpbiBGcmVlVHlwZS4KKworICAgIC0gYGNtYWtlJyBub3cgc3VwcG9ydHMgYnVpbGRzIG9mIEZyZWVUeXBlIGFzIGFuIE9TIFggZnJhbWV3b3JrIGFuZAorICAgICAgZm9yIGlPUy4KKworICAgIC0gSW1wcm92ZWQgcHJvamVjdCBmaWxlcyBmb3IgdmMyMDEwLCBpbnRyb2R1Y2luZyBhIHByb3BlcnR5IGZpbGUuCisKKyAgICAtIFRoZSAgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgIGZvciAgdGhlIEFQSSAgcmVmZXJlbmNlICBoYXMgIGJlZW4KKyAgICAgIHVwZGF0ZWQgdG8gcHJvZHVjZSAgYmV0dGVyIEhUTUwgY29kZSAod2l0aCBwcm9wZXIgIENTUykuICBBdCB0aGUKKyAgICAgIHNhbWUgdGltZSwgdGhlIGRvY3VtZW50YXRpb24gZ290IGEgYmV0dGVyIHN0cnVjdHVyZS4KKworICAgIC0gVGhlIEZUX0xPQURfQklUTUFQX0NST1AgZmxhZyBpcyBvYnNvbGV0ZTsgIGl0IGlzIG5vdCB1c2VkIGJ5IGFueQorICAgICAgZHJpdmVyLgorCisgICAgLSBUaGUgIFRydWVUeXBlICBERUxUQVBbMTIzXSAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zICBub3cgIHdvcmsgIGluCisgICAgICBzdWJwaXhlbCBoaW50aW5nICBtb2RlIGFzIGRlc2NyaWJlZCBpbiAgdGhlIENsZWFyVHlwZSB3aGl0ZXBhcGVyCisgICAgICAoaS5lLiwgZm9yIHRvdWNoZWQgcG9pbnRzIGluIHRoZSBub24tc3VicGl4ZWwgZGlyZWN0aW9uKS4KKworICAgIC0gTWFueSBzbWFsbCBpbXByb3ZlbWVudHMgdG8gdGhlIGludGVybmFsIGFyaXRobWV0aWMgcm91dGluZXMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi41LjIgYW5kIDIuNS4zCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBIHZ1bG5lcmFiaWxpdHkgKENWRS0yMDE0LTIyNDApIHdhcyAgaWRlbnRpZmllZCBhbmQgZml4ZWQgaW4gdGhlCisgICAgICBuZXcgIENGRiAgZHJpdmVyICAoY2YuICBodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz80MTY5NykuCisgICAgICBBbGwgdXNlcnMgc2hvdWxkIHVwZ3JhZGUuCisKKyAgICAtIE1vcmUgIGJ1ZyAgZml4ZXMgcmVsYXRlZCAgdG8gIGNvcnJlY3QgIHBvc2l0aW9uaW5nIG9mICBjb21wb3NpdGUKKyAgICAgIGdseXBocy4KKworICAgIC0gTWFueSBmaXhlcyB0byBiZXR0ZXIgcHJvdGVjdCBhZ2FpbnN0IG1hbGZvcm1lZCBpbnB1dC4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBGcmVlVHlwZSBjYW4gbm93IHVzZSB0aGUgSGFyZkJ1enogbGlicmFyeSB0byBncmVhdGx5IGltcHJvdmUgdGhlCisgICAgICBhdXRvLWhpbnRpbmcgb2YgIGZvbnRzIHRoYXQgIHVzZSBPcGVuVHlwZSBmZWF0dXJlczogIE1hbnkgZ2x5cGhzCisgICAgICB0aGF0IGFyZSBwYXJ0ICBvZiBzdWNoIGZlYXR1cmVzIGJ1dCBkb24ndCBoYXZlICBjbWFwIGVudHJpZXMgYXJlCisgICAgICBub3cgaGFuZGxlZCAgcHJvcGVybHksIGZvciAgZXhhbXBsZSBzbWFsbCBjYXBzICBvciBzdXBlcnNjcmlwdHMuCisgICAgICBEZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaIHRvCisgICAgICBhY3RpdmF0ZSBIYXJmQnV6eiBzdXBwb3J0LgorCisgICAgICBZb3UgbmVlZCBIYXJmQnV6eiB2ZXJzaW9uIDAuOS4xOSBvciBuZXdlci4KKworICAgICAgTm90ZSB0aGF0IEhhcmZCdXp6IGRlcGVuZHMgb24gIEZyZWVUeXBlOyB0aGlzIGN1cnJlbnRseSBjYXVzZXMgYQorICAgICAgY2hpY2tlbi1hbmQtZWdnIHByb2JsZW0gIHRoYXQgY2FuIGJlICBzb2x2ZWQgYXMgZm9sbG93cyAgaW4gY2FzZQorICAgICAgSGFyZkJ1enogaXMgbm90IHlldCBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uCisKKyAgICAgICAgMS4gQ29tcGlsZSAgYW5kICBpbnN0YWxsICBGcmVlVHlwZSB3aXRob3V0ICB0aGUgIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlouCisKKyAgICAgICAgMi4gQ29tcGlsZSBhbmQgaW5zdGFsbCBIYXJmQnV6ei4KKworICAgICAgICAzLiBEZWZpbmUgIG1hY3JvICBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiwgdGhlbiAgY29tcGlsZQorICAgICAgICAgICBhbmQgaW5zdGFsbCBGcmVlVHlwZSBhZ2Fpbi4KKworICAgICAgV2l0aCBGcmVlVHlwZSdzICBgY29uZmlndXJlJyBzY3JpcHQgdGhlIHByb2NlZHVyZSAgYm9pbHMgZG93biB0bworICAgICAgY29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgRnJlZXR5cGUsIHRoZW4gY29uZmlndXJlLCBjb21waWxlLAorICAgICAgYW5kICBpbnN0YWxsICBIYXJmQnV6eiwgIHRoZW4gY29uZmlndXJlLCAgY29tcGlsZSwgIGFuZCAgaW5zdGFsbAorICAgICAgRnJlZVR5cGUgYWdhaW4gKGFmdGVyIGV4ZWN1dGluZyBgbWFrZSBkaXN0Y2xlYW4nKS4KKworICAgIC0gQWxsICBsaWJyYXJpZXMgRnJlZVR5cGUgIGRlcGVuZHMgb24gIGFyZSBub3cgIGNoZWNrZWQgdXNpbmcgIHRoZQorICAgICAgYHBrZy1jb25maWcnIGNvbmZpZ3VyYXRpb24gZmlsZXMgIGZpcnN0LCBmb2xsb3dlZCBieSBhbHRlcm5hdGl2ZQorICAgICAgbWV0aG9kcy4KKworICAgIC0gVGhlICBuZXcgIHZhbHVlICBgYXV0bycgIGZvciB0aGUgIHZhcmlvdXMgIGAtLXdpdGgtWFhYJyAgbGlicmFyeQorICAgICAgb3B0aW9ucyAgIChmb3IgICBleGFtcGxlICAgYC0td2l0aC1oYXJmYnV6ej1hdXRvJykgICBtYWtlcyAgIHRoZQorICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0IGF1dG9tYXRpY2FsbHkgbGluayB0byB0aGUgbGlicmFyaWVzIGl0IGZpbmRzLgorICAgICAgVGhpcyBpcyBub3cgdGhlIGRlZmF1bHQuCisKKyAgICAtIEluIGNhc2UgRnJlZVR5cGUncyBgY29uZmlndXJlJyBzY3JpcHQgIGNhbid0IGZpbmQgYSBsaWJyYXJ5LCB5b3UKKyAgICAgIGNhbiAgcGFzcyBlbnZpcm9ubWVudCAgdmFyaWFibGVzIHRvICBjaXJjdW12ZW50IHBrZy1jb25maWcsICBhbmQKKyAgICAgIHRob3NlIHZhcmlhYmxlcyAgaGF2ZSBiZWVuICBoYXJtb25pemVkIGFzICBhIGNvbnNlcXVlbmNlICBvZiB0aGUKKyAgICAgIGNoYW5nZXMgbWVudGlvbmVkIGFib3ZlOgorCisgICAgICAgIExJQlogICAgICAgICAgIC0+IHJlbW92ZWQ7IHVzZSBMSUJaX0NGTEFHUyBhbmQgTElCWl9MSUJTCisgICAgICAgIExJQkJaMiAgICAgICAgIC0+IHJlbW92ZWQ7IHVzZSBCWklQMl9DRkxBR1MgYW5kIEJaSVAyX0xJQlMKKyAgICAgICAgTElCUE5HX0xERkxBR1MgLT4gTElCUE5HX0xJQlMKKworICAgICAgYC4vY29uZmlndXJlIC0taGVscCcgc2hvd3MgYWxsIGF2YWlsYWJsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgICAtIFRoZSBgZnJlZXR5cGUtY29uZmlnJyAgc2NyaXB0IG5vdyB1bmRlcnN0YW5kcyAgb3B0aW9uIGAtLXN0YXRpYycKKyAgICAgIHRvIGVtaXQgc3RhdGljIGxpbmtpbmcgaW5mb3JtYXRpb24uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi41LjEgYW5kIDIuNS4yCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBJbXByb3ZpbmcgdGhlIGRpc3BsYXkgb2Ygc29tZSBicm9rZW4gVHJ1ZVR5cGUgZm9udHMgaW50cm9kdWNlZCBhCisgICAgICBidWcgIHRoYXQgbWFkZSAgRnJlZVR5cGUgY3Jhc2ggIG9uIHNvbWUgIHBvcHVsYXIgKGJ1dCAgbm90IGZ1bGx5CisgICAgICBjb25mb3JtYW50KSBmb250cyBsaWtlIGBhaHJvbmJkLnR0ZicuCisKKyAgICAtIEFub3RoZXIgcm91bmQgb2YgaW1wcm92ZW1lbnRzIHRvIGNvcnJlY3QgcG9zaXRpb25pbmcgYW5kIGhpbnRpbmcKKyAgICAgIG9mIGNvbXBvc2l0ZSBnbHlwaHMgaW4gVHJ1ZVR5cGUgZm9udHMuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBWZXJzaW9uICAyLjUuMSAgaW50cm9kdWNlZCBhICBidWcgIGluICBoYW5kbGluZyBlbWJlZGRlZCAgYml0bWFwCisgICAgICBzdHJpa2VzIG9mICBUcnVlVHlwZSBmb250cywgIGNhdXNpbmcgZ2FyYmFnZSBkaXNwbGF5ICB1bmRlciBzb21lCisgICAgICBjaXJjdW1zdGFuY2VzLgorCisgICAgLSBUaGUgICBgZnRncmlkJyAgIGRlbW8gICBwcm9ncmFtICAgIGNvdWxkbid0ICAgYmUgICBjb21waWxlZCAgIGluCisgICAgICBub24tZGV2ZWxvcG1lbnQgYnVpbGRzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuNSBhbmQgMi41LjEKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIEZvciAgc29tZSBXaW5GTlQgIGZpbGVzLCAgdGhlIGxhc3QgIGdseXBoICB3YXNuJ3QgZGlzcGxheWVkICBidXQKKyAgICAgIGluY29ycmVjdGx5IG1hcmtlZCBhcyBpbnZhbGlkLgorCisgICAgLSBUaGUgdmVydGljYWwgc2l6ZSBvZiBnbHlwaHMgd2FzICBpbmNvcnJlY3RseSBzZXQgYWZ0ZXIgYSBjYWxsIHRvCisgICAgICBgRlRfR2x5cGhTbG90X0VtYm9sZGVuJywgcmVzdWx0aW5nIGluIGNsaXBwZWQgZ2x5cGhzLgorCisgICAgLSBNYW55IGZpZWxkcyBvZiB0aGUgYFBDTFQnIHRhYmxlIGluIFNGTlQgYmFzZWQgZm9udHMgKGlmIGFjY2Vzc2VkCisgICAgICB3aXRoIGBGVF9HZXRfU2ZudF9UYWJsZScpIHdlcmUgY29tcHV0ZWQgaW5jb3JyZWN0bHkuCisKKyAgICAtIEluIFRydWVUeXBlIGZvbnRzLCAgaGludGluZyBvZiBjb21wb3NpdGUgZ2x5cGhzICBjb3VsZCBzb21ldGltZXMKKyAgICAgIGRlbGl2ZXIgIGluY29ycmVjdCBwb3NpdGlvbnMgIG9mICBjb21wb25lbnRzIG9yICBldmVuICBkaXN0b3J0ZWQKKyAgICAgIHNoYXBlcy4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBXT0ZGIGZvbnQgZm9ybWF0IHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAtIFRoZSBhdXRvLWhpbnRlciBub3cgc3VwcG9ydHMgSGVicmV3LiAgR3JlZWsgYW5kIEN5cmlsbGljIHN1cHBvcnQKKyAgICAgIGhhcyBiZWVuIGltcHJvdmVkLgorCisgICAgLSBTdXBwb3J0IGZvciB0aGUgZm9ydGhjb21pbmcgYE9TLzInICBTRk5UIHRhYmxlIHZlcnNpb24gNSwgYXMgY2FuCisgICAgICBiZSBmb3VuZCBlLmcuIGluIHRoZSBgU2l0a2EnIGZvbnQgZmFtaWx5IGZvciBXaW5kb3dzIDguMS4KKworICAgIC0gVGhlIGhlYWRlciAgZmlsZSBsYXlvdXQgIGhhcyBiZWVuIGNoYW5nZWQuICAgQWZ0ZXIgaW5zdGFsbGF0aW9uLAorICAgICAgYWxsIGZpbGVzIGFyZSBub3cgbG9jYXRlZCBpbiBgPHByZWZpeD4vaW5jbHVkZS9mcmVldHlwZTInLgorCisgICAgICBBcHBsaWNhdGlvbnMgIHRoYXQgIHVzZSAgIChhKSAgYGZyZWV0eXBlLWNvbmZpZycgIG9yICBGcmVlVHlwZSdzCisgICAgICBgcGtnLWNvbmZpZycgZmlsZSB0byBnZXQgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IGZvciB0aGUgY29tcGlsZXIsCisgICAgICBhbmQgKGIpIHRoZSBkb2N1bWVudGVkIHdheSBmb3IgaGVhZGVyIGluY2x1c2lvbiBsaWtlCisKKyAgICAgICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisgICAgICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyAgICAgICAgLi4uCisKKyAgICAgIGRvbid0IG5lZWQgYW55IGNoYW5nZSB0byB0aGUgc291cmNlIGNvZGUuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlIHN0ZW0gIGRhcmtlbmluZyBmZWF0dXJlICBvZiB0aGUgIG5ldyBDRkYgIGVuZ2luZSBjYW4gIG5vdyBiZQorICAgICAgZmluZS10dW5lZCB3aXRoIHRoZSBuZXcgYGRhcmtlbmluZy1wYXJhbWV0ZXJzJyBwcm9wZXJ0eS4KKworICAgIC0gYGZ0Z3JpZCcgaGFzIGJlZW4gdXBkYXRlZCB0byB0b2dnbGUgdmFyaW91cyBlbmdpbmVzIHdpdGggdGhlIGBIJworICAgICAga2V5LCBzaW1pbGFyIHRvIGBmdHZpZXcnIGFuZCBgZnRkaWZmJy4KKworICAgIC0gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgYHR0ZGVidWcnIGhhcyBiZWVuIGdyZWF0bHkgZW5oYW5jZWQuCisKKyAgICAgIC4gSXQgbm93IGRpc3BsYXlzIHR3aWxpZ2h0LCBzdG9yYWdlLCBhbmQgY29udHJvbCB2YWx1ZSBkYXRhOyBrZXkKKyAgICAgICAgYFQnIHNob3dzIHRoZSB0d2lsaWdodCBwb2ludCAgdGFibGUsIGtleSBgUycgdGhlIHN0b3JhZ2UgZGF0YSwKKyAgICAgICAgYW5kIGtleSBgQycgdGhlIGNvbnRyb2wgdmFsdWUgdGFibGUuCisKKyAgICAgIC4gU29tZSAga2V5cyAgaGF2ZSAgYmVlbiAgcmVhc3NpZ25lZCAgZnJvbSAgbG93ZXJjYXNlICB0byAgdGhlaXIKKyAgICAgICAgdXBwZXJjYXNlIGVxdWl2YWxlbnRzOyBmb3IgZXhhbXBsZSBgcScgIHRvIHF1aXQgdGhlIHByb2dyYW0gaXMKKyAgICAgICAgbm93IGBRJy4KKworICAgICAgLiBLZXkgYGYnIGZpbmlzaGVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgorCisgICAgICAuIEtleSBgUicgcmVzdGFydHMgdGhlIGRlYnVnZ2VyLgorCisgICAgICAuIEtleXMgYGInIGFuZCBgcCcgc2V0IGEgYnJlYWtwb2ludC4KKworICAgICAgLiBLZXkgYEInIHByb3ZpZGVzIGEgZnVuY3Rpb24gY2FsbCBiYWNrdHJhY2UuCisKKyAgICAtIEJldHRlciBzdXBwb3J0IG9mIEFSTXY3IGFuZCB4ODZfNjQgcHJvY2Vzc29ycy4KKworICAgIC0gQXBwbGUncyBgc2JpeCcgY29sb3IgYml0bWFwIGZvcm1hdCBpcyBub3cgc3VwcG9ydGVkLgorCisgICAgLSBJbXByb3ZlZCAgIGF1dG8taGludGVyICByZW5kZXJpbmcgICBmb3IgIG1hbnkgICBUcnVlVHlwZSAgZm9udHMsCisgICAgICBlc3BlY2lhbGx5IGluIHRoZSByYW5nZSAyMC00MHBwZW0uCisKKyAgICAtIEEgIG5ldyBmYWNlICBmbGFnICBgRlRfRkFDRV9GTEFHX0NPTE9SJyBoYXMgIGJlZW4gIGFkZGVkICh0byAgYmUKKyAgICAgIGFjY2Vzc2VkIHdpdGggdGhlIG1hY3JvIGBGVF9IQVNfQ09MT1InKS4KKworICAgIC0gYEZUX0d6aXBfVW5jb21wcmVzcycgICAobW9kZWxlZCAgICBhZnRlciAgIHpsaWIncyAgIGB1bmNvbXByZXNzJworICAgICAgZnVuY3Rpb24pICBoYXMgYmVlbiAgYWRkZWQ7IHRoaXMgIGlzIGEgIGJ5LXByb2R1Y3Qgb2YgIHRoZSBuZXdseQorICAgICAgYWRkZWQgV09GRiBzdXBwb3J0LgorCisgICAgLSBTdXBwb3J0IGZvciAgYSBidWlsZCB3aXRoICBgY21ha2UnIGhhcyBiZWVuIGNvbnRyaWJ1dGVkICBieSBKb2huCisgICAgICBDYXJ5IDxjYXJ5QHR4Y29ycC5jb20+LgorCisgICAgLSBTdXBwb3J0IGZvciB4NjQgIGJ1aWxkcyB3aXRoIFZpc3VhbCBDKysgaGFzICBiZWVuIGNvbnRyaWJ1dGVkIGJ5CisgICAgICBLZW5uZXRoIE1pbGxlciA8a2VubmV0aGFkYW1taWxsZXJAeWFob28uY29tPgorCisgICAgLSBNYW51YWwgcGFnZXMgZm9yIG1vc3QgZGVtbyBwcm9ncmFtcyBoYXZlIGJlZW4gYWRkZWQuCisKKyAgICAtIFRoZSBHRVRJTkZPIGJ5dGVjb2RlIGluc3RydWN0aW9uIGZvciBUcnVlVHlwZSBmb250cyB3YXMgYnVnZ3kgaWYKKyAgICAgIHVzZWQgdG8gcmV0cmlldmUgc3VicGl4ZWwgaGludGluZyBpbmZvcm1hdGlvbi4gIEl0IHdhcyBuZWNlc3NhcnkKKyAgICAgIHRvIHNldCAgc2VsZWN0b3IgYml0IDYgIHRvIGdldCAgcmVzdWx0cyBmb3Igc2VsZWN0b3IgIGJpdHMgNy0xMCwKKyAgICAgIHdoaWNoIGlzIHdyb25nLgorCisgICAgLSBJbXByb3ZlZCBjb21wdXRhdGlvbiAgb2YgZW11bGF0ZWQgdmVydGljYWwgbWV0cmljcyAgZm9yIFRydWVUeXBlCisgICAgICBmb250cy4KKworICAgIC0gRml4ZWQgaG9yaXpvbnRhbCBzdGFydC11cCBwb3NpdGlvbiBvZiB2ZXJ0aWNhbCBwaGFudG9tIHBvaW50cyBpbgorICAgICAgVHJ1ZVR5cGUgYnl0ZWNvZGUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjEyIGFuZCAyLjUKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFRoZSBjYWNoZSBtYW5hZ2VyIGZ1bmN0aW9uIGBGVENfTWFuYWdlcl9SZXNldCcgIGRpZG4ndCBmbHVzaCB0aGUKKyAgICAgIGNhY2hlLgorCisKKyAgSUkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIEJlaGRhZCBFc2ZhaGJvZCAgKG9uIGJlaGFsZiAgb2YgR29vZ2xlKSBjb250cmlidXRlZCAgc3VwcG9ydCBmb3IKKyAgICAgIGNvbG9yIGVtYmVkZGVkIGJpdG1hcHMgKGVnLiBjb2xvciBlbW9qaSkuCisKKyAgICAgIEEgIG5ldyAgbG9hZCAgZmxhZywgIEZUX0xPQURfQ09MT1IsIG1ha2VzICBGcmVlVHlwZSAgbG9hZCAgY29sb3IKKyAgICAgIGVtYmVkZGVkLWJpdG1hcHMsIGZvbGxvd2luZyB0aGlzIGRyYWZ0IHNwZWNpZmljYXRpb24KKworICAgICAgICBodHRwczovL2NvbG9yLWVtb2ppLmdvb2dsZWNvZGUuY29tL2dpdC9zcGVjaWZpY2F0aW9uL3YxLmh0bWwKKworICAgICAgd2hpY2ggZGVmaW5lcyB0d28gbmV3IFNGTlQgIHRhYmxlcywgYENCRFQnIGFuZCBgQ0JMQycgKG5hbWVkIGFuZAorICAgICAgbW9kZWxlZCAgYWZ0ZXIgIGBFQkRUJyAgYW5kIGBFQkxDJywgIHJlc3BlY3RpdmVseSkuICAgVGhlICBjb2xvcgorICAgICAgYml0bWFwcyAgYXJlICBzdG9yZWQgaW4gIHRoZSAgbmV3ICBGVF9QSVhFTF9NT0RFX0JHUkEgZm9ybWF0ICB0bworICAgICAgcmVwcmVzZW50IEJHUkEgIHByZS1tdWx0aXBsaWVkIHNSR0IgIGltYWdlcy4gIElmIFBORyAgc3VwcG9ydCBpcworICAgICAgYXZhaWxhYmxlLCAgUE5HIGNvbG9yICBpbWFnZXMgYXMgIGRlZmluZWQgaW4gIHRoZSBzYW1lICBwcm9wb3NlZAorICAgICAgc3BlY2lmaWNhdGlvbiBhcmUgc3VwcG9ydGVkIGFsc28uCisKKyAgICAgIE5vdGUgdGhhdCAgY29sb3IgYml0bWFwcyAgYXJlIGNvbnZlcnRlZCAgdG8gZ3JheXNjYWxlICBpZiBjbGllbnQKKyAgICAgIGRpZG4ndCBhc2sgZm9yIGNvbG9yLgorCisgICAgLSBBcyAgYW5ub3VuY2VkIGluICB0aGUgIHByZXZpb3VzIHJlbGVhc2UsICB0aGUgIG9sZCBGcmVlVHlwZSAgQ0ZGCisgICAgICBlbmdpbmUgIGlzIG5vdyAgZGlzYWJsZWQgYnkgIGRlZmF1bHQuICBJdCAgY2FuIGJlICBjb25kaXRpb25hbGx5CisgICAgICBjb21waWxlZCAgICAgYnkgICAgIGRlZmluaW5nICAgICB0aGUgICAgIGNvbmZpZ3VyYXRpb24gICAgIG1hY3JvCisgICAgICBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FLgorCisgICAgLSBBcyBhbm5vdW5jZWQgaW4gdGhlIHByZXZpb3VzIHJlbGVhc2UsICBhbGwgY29kZSByZWxhdGVkIHRvIG1hY3JvCisgICAgICBGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFMgIGhhcyBiZWVuIHJlbW92ZWQsICB0aHVzIGJlY29taW5nCisgICAgICBvYnNvbGV0ZS4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUaGUgIHByb3BlcnR5IEFQSSAgKGBGVF9Qcm9wZXJ0eV9HZXQnIGFuZCAgYEZUX1Byb3BlcnR5X1NldCcpIGlzCisgICAgICBub3cgZGVjbGFyZWQgYXMgc3RhYmxlLgorCisgICAgICBUaGUgIGV4Y2VwdGlvbiwgICBob3dldmVyLCAgYXJlICB0aGUgICBleHBlcmltZW50YWwgIGF1dG8taGludGVyCisgICAgICBwcm9wZXJ0aWVzIGBnbHlwaC10by1zY3JpcHQtbWFwJyBhbmQgYGZhbGxiYWNrLXNjcmlwdCcgd2hpY2ggYXJlCisgICAgICBzdWJqZWN0IHRvIGNoYW5nZSBpbiBhIGZvcnRoY29taW5nIHJlbGVhc2UuCisKKyAgICAtIGBmdHZpZXcnIGhhcyBiZWVuIHVwZGF0ZWQgdG8gIHN1cHBvcnQgY29sb3IgZW1iZWRkZWQgYml0bWFwczsgaXQKKyAgICAgIGNhbiBiZSB0b2dnbGVkIG9uIGFuZCBvZmYgIHdpdGgga2V5IGBjJy4gIFRoZSBzbWFsbCBjYWNoZSB0b2dnbGUKKyAgICAgIGlzIG5vdyBrZXkgYEsnLgorCisgICAgLSBJdCAgaXMgbm93ICBwb3NzaWJsZSAgdG8gIGNvbnRyb2wgdGhlICB2ZXJzaW9uICBvZiB0aGUgIFRydWVUeXBlCisgICAgICBoaW50aW5nIGVuZ2luZSAgdXNpbmcgdGhlIG5ldyBgaW50ZXJwcmV0ZXItdmVyc2lvbicgIHByb3BlcnR5IG9mCisgICAgICB0aGUgIGB0cnVldHlwZScgbW9kdWxlOiAgVmVyc2lvbnMgMzUgIGFuZCAzOCAgKHRoZSBkZWZhdWx0KSAgYXJlCisgICAgICBzdXBwb3J0ZWQsICB3aGljaCAgcm91Z2hseSAgY29ycmVzcG9uZHMgdG8gIGRpc2FibGUgIGFuZCAgZW5hYmxlCisgICAgICBzdWJwaXhlbCBoaW50aW5nIHN1cHBvcnQsIHJlc3BlY3RpdmVseS4KKworICAgICAgSW4gIGJvdGggIGBmdHZpZXcnICBhbmQgIGBmdGRpZmYnLCAgc3dpdGNoaW5nICBiZXR3ZWVuICB0aGUgIHR3bworICAgICAgdmVyc2lvbnMgIGNhbiBiZSAgZG9uZSAgd2l0aCAga2V5IGBIJy4gICBJbiAgdGhlIGBmdGJlbmNoJyAgZGVtbworICAgICAgcHJvZ3JhbSwgY29tbWFuZCBsaW5lIG9wdGlvbiBgLUgnICBoYXMgYmVlbiBleHRlbmRlZCB0byBhY3RpdmF0ZQorICAgICAgdGhlIG5vbi1kZWZhdWx0IGludGVycHJldGVyIHZlcnNpb24uCisKKyAgICAtIFRoZSBgdHRkZWJ1ZycgcHJvZ3JhbSBoYXMgYmVlbiBmdXJ0aGVyIGltcHJvdmVkLiAgSW4gcGFydGljdWxhciwKKyAgICAgIGl0IGFjY2VwdHMgYSBuZXcgY29tbWFuZCBsaW5lICBvcHRpb24gYC1IJyB0byBzZWxlY3QgdGhlIGhpbnRpbmcKKyAgICAgIGVuZ2luZS4KKworICAgIC0gYGZ0ZHVtcCdzIHZlcmJvc2Ugb3B0aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gYC1WJy4gIEZvciBhbGwgZGVtbworICAgICAgcHJvZ3JhbXMsIGAtdicgbm93IHNob3dzIHZlcnNpb24gaW5mb3JtYXRpb24uCisKKyAgICAtIEFub3RoZXIgcm91bmQgb2YgVHJ1ZVR5cGUgc3VicGl4ZWwgaGludGluZyBmaXhlcy4KKworICAgIC0gVGhlIGBhcGluYW1lcycgdG9vbCBjYW4gbm93IGNyZWF0ZSBhbiBpbXBvcnQgZmlsZSBmb3IgTmV0V2FyZS4KKworICAgIC0gNjRiaXQgY29tcGlsYXRpb24gb2YgdGhlIG5ldyBDRkYgZW5naW5lIHdhcyBidWdneS4KKworICAgIC0gU29tZSBmaXhlcyB0byBpbXByb3ZlIHJvYnVzdG5lc3MgaW4gbWVtb3J5LXRpZ2h0IHNpdHVhdGlvbnMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjExIGFuZCAyLjQuMTIKKworICAgIC0gV2UgaGF2ZSBhbm90aGVyIENGRiBwYXJzaW5nIGFuZCBoaW50aW5nIGVuZ2luZSEgIFdyaXR0ZW4gYnkgRGF2ZQorICAgICAgQXJub2xkIDxkYXJub2xkQGFkb2JlLmNvbT4sICB0aGlzIHdvcmsgIGhhcyBiZWVuICBjb250cmlidXRlZCBieQorICAgICAgQWRvYmUgaW4gIGNvbGxhYm9yYXRpb24gd2l0aCBHb29nbGUuICAgSXQgaXMgdmFzdGx5ICBzdXBlcmlvciB0bworICAgICAgdGhlIG9sZCBDRkYgZW5naW5lLCBhbmQgaXQgIHdpbGwgcmVwbGFjZSBpdCBpbiB0aGUgbmV4dCByZWxlYXNlLgorICAgICAgUmlnaHQgIG5vdywgIGl0ICBpcyAgc3RpbGwgIG9mZiBieSAgZGVmYXVsdCwgIGFuZCAgeW91ICBoYXZlICB0bworICAgICAgZXhwbGljaXRseSBzZWxlY3QgaXQgdXNpbmcgIHRoZSBuZXcgYGhpbnRpbmctZW5naW5lJyBwcm9wZXJ0eSBvZgorICAgICAgdGhlIGNmZiBkcml2ZXI6CisKKyAgICAgICAgLi4uCisgICAgICAgICNpbmNsdWRlIEZUX01PRFVMRV9ICisgICAgICAgICNpbmNsdWRlIEZUX0NGRl9EUklWRVJfSAorCisgICAgICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAgICAgIGludCAgICAgICAgIGVuZ2luZSA9IEZUX0NGRl9ISU5USU5HX0FET0JFOworCisKKyAgICAgICAgLi4uCisgICAgICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImNmZiIsICJoaW50aW5nLWVuZ2luZSIsICZlbmdpbmUgKTsKKworICAgICAgVGhlIGNvZGUgaGFzICBhIChtYXR1cmUpIGJldGEgc3RhdHVzOyB3ZSBlbmNvdXJhZ2UgIGFsbCB1c2VycyB0bworICAgICAgdGVzdCBpdCBhbmQgcmVwb3J0IGFueSBwcm9ibGVtcy4KKworICAgICAgSW4gY2FzZSB5b3Ugd2FudCB0byBhY3RpdmF0ZSB0aGUgbmV3IENGRiBlbmdpbmUgdW5jb25kaXRpb25hbGx5LAorICAgICAgYXBwbHkgdGhpcyBwYXRjaDoKKworLS0tIHNuaXAgLS0tCitkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZvYmpzLmMgYi9zcmMvY2ZmL2NmZm9ianMuYworaW5kZXggZWJjZjE4OS4uM2YyY2U2YiAxMDA2NDQKKy0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5jCisrKysgYi9zcmMvY2ZmL2NmZm9ianMuYworQEAgLTEwNTYsNyArMTA1Niw3IEBACisKKworICAgICAvKiBzZXQgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgKi8KKy0gICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSAgICA9IEZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFOworKyAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lICAgID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7CisgICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSBGQUxTRTsKKworICAgICByZXR1cm4gRlRfRXJyX09rOworLS0tIHNuaXAgLS0tCisKKyAgICAtIFRoZSAgbWFjcm8gRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTICBpcyBubyAgbG9uZ2VyIHNldCAgYnkKKyAgICAgIGRlZmF1bHQuICBJbiAgdGhlIG5leHQgIHJlbGVhc2UsIHdlICB3aWxsIGNvbXBsZXRlbHkgIHJlbW92ZSB0aGUKKyAgICAgIGFzc29jaWF0ZWQgY29kZS4gICBQbGVhc2UgdXBkYXRlIHlvdXIgIHByb2dyYW1zIGluIGNhc2UgIHlvdSBhcmUKKyAgICAgIHN0aWxsIHVzaW5nIHRoaXMgbWFjcm8uCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUaGUgICh0b3AtbGV2ZWwpICBgY29uZmlndXJlJyAgc2NyaXB0ICAgbm93ICByZXNwZWN0cyAgdGhlICBNQUtFCisgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgYG1ha2UnIGJpbmFyeS4gICBGb3IgYmFja3dhcmRzCisgICAgICBjb21wYXRpYmlsaXR5LCBHTlVNQUtFIHN0aWxsIG92ZXJyaWRlcyBNQUtFLCB0aG91Z2guCisKKyAgICAtIFRoZSBgZnR2aWV3JyAgYW5kIGBmdGRpZmYnICBkZW1vIHByb2dyYW1zIGhhdmUgIGJlZW4gcmVkZXNpZ25lZCwKKyAgICAgIHNob3dpbmcgIG1vcmUgb3B0aW9ucyAgcGVybWFuZW50bHkgIG9uIHRoZSAgc2NyZWVuLCBhbW9uZyAgb3RoZXIKKyAgICAgIG1pbm9yIGltcHJvdmVtZW50cy4KKworICAgIC0gVXNpbmcgdGhlIGBIJyAga2V5LCBpdCBpcyBub3cgcG9zc2libGUgdG8gIHNlbGVjdCB0aGUgQ0ZGIGVuZ2luZQorICAgICAgaW4gYm90aCBgZnR2aWV3JyBhbmQgYGZ0ZGlmZicuCisKKyAgICAtIFRoZSBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiBgLUgnIGZvciBgZnRiZW5jaCcgc2VsZWN0cyB0aGUgQWRvYmUKKyAgICAgIENGRiBlbmdpbmUuCisKKyAgICAtIEl0IGlzICBub3cgcG9zc2libGUgIHRvIGRpcmVjdGx5IHNlbGVjdCAgdGhlIExDRCAgcmVuZGVyaW5nIG1vZGUKKyAgICAgIHdpdGggdGhlIGtleXMgYEEnLWBGJyBpbiAgYGZ0dmlldycuICBUaGUga2V5IG1hcHBpbmcgZm9yIGN5Y2xpbmcKKyAgICAgIHRocm91Z2ggTENEIG1vZGVzICBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gYEsnIGFuZCAgYEwnIHRvIGBrJyBhbmQKKyAgICAgIGBsJywgYW5kICB0b2dnbGluZyBjdXN0b20gTENEICBmaWx0ZXJpbmcgaXMgbm8gbG9uZ2VyICBtYXBwZWQgdG8KKyAgICAgIGtleSBgRicgYnV0IHRvIGtleSBgTCcuCisKKyAgICAtIEluIGBmdGRpZmYnLCAga2V5IGB4JyB0b2dnbGVzICBiZXR3ZWVuIGxheW91dCBtb2RlczogIEVpdGhlciB1c2UKKyAgICAgIHRoZSAgYWR2YW5jZSB3aWR0aCAgKHRoaXMgaXMgIG5ldyBhbmQgIG5vdyB0aGUgIGRlZmF1bHQpIG9yICB0aGUKKyAgICAgIGJvdW5kaW5nIGJveCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgbGluZSBicmVha3MuCisKKyAgICAtIEZvciBhbGwgZGVtbyAgdG9vbHMsIHRoZSBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiAgYC12JyBzaG93cyB0aGUKKyAgICAgIHZlcnNpb24uCisKKyAgICAtIEZvciB0aGUgZGVtbyB0b29scyB3aXRoIGEgR1VJLCB0aGUgbmV3IGNvbW1hbmQgbGluZSBvcHRpb25zIGAtdycKKyAgICAgIGFuZCBgLWgnIHNlbGVjdCAgdGhlIHdpZHRoIGFuZCB0aGUgaGVpZ2h0IG9mICB0aGUgb3V0cHV0IHdpbmRvdywKKyAgICAgIHJlc3BlY3RpdmVseS4KKworICAgIC0gVGhlIGB0dGRlYnVnJyBwcm9ncmFtIHdhcyBicm9rZW4gYW5kIGhhcyBiZWVuIHJlYWN0aXZhdGVkLiAgTm90ZQorICAgICAgdGhhdCB0aGlzIHByb2dyYW0gaXMgbm90IGNvbXBpbGVkIGJ5IGRlZmF1bHQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjEwIGFuZCAyLjQuMTEKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFNvbWUgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSAgQkRGIGltcGxlbWVudGF0aW9uIGhhdmUgYmVlbiBmaXhlZC4KKyAgICAgIFVzZXJzIG9mIHRoaXMgZm9udCBmb3JtYXQgc2hvdWxkIHVwZ3JhZGUuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gU3VicGl4ZWwgIGhpbnRpbmcgc3VwcG9ydCAgaGFzIGJlZW4gIGNvbnRyaWJ1dGVkIGJ5ICBJbmZpbmFsaXR5LAorICAgICAgYmFzZWQgb24gR3JlZyBIaXRjaGNvY2sncyB3aGl0ZXBhcGVyIGF0CisKKyAgICAgICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgKKworICAgICAgT3JpZ2luYWxseSwgaXQgd2FzIGEgc2VwYXJhdGUgcGF0Y2ggYXZhaWxhYmxlIGZyb20KKworICAgICAgICBodHRwOi8vd3d3LmluZmluYWxpdHkubmV0L2Jsb2cvCisKKyAgICAgIGFuZCB3aGljaCBoYXMgYmVlbiBpbnRlZ3JhdGVkLgorCisgICAgICBOb3RlIHRoYXQgIENsZWFyVHlwZSBzdXBwb3J0IGlzIG5vdCAgY29tcGxldGVseSBpbXBsZW1lbnRlZCEgIEluCisgICAgICBwYXJ0aWN1bGFyLCAgZnVsbCBzdXBwb3J0ICBmb3IgdGhlICBvcHRpb25zIGBjb21wYXRpYmxlX3dpZHRocycsCisgICAgICBgc3ltbWV0cmljYWxfc21vb3RoaW5nLCAgYW5kICBgYmdyJyAgKHZpYSB0aGUgIEdFVElORk8gIGJ5dGVjb2RlCisgICAgICBpbnN0cnVjdGlvbikgaXMgbWlzc2luZy4KKworICAgICAgQWN0aXZhdGlvbiBvZiAgc3VicGl4ZWwgaGludGluZyAgc3VwcG9ydCBjYW4gYmUgIGNvbnRyb2xsZWQgd2l0aAorICAgICAgdGhlIGBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcnIGNvbmZpZ3VyYXRpb24gb3B0aW9uOyBpdAorICAgICAgaXMgc3dpdGNoZWQgb2ZmIGJ5IGRlZmF1bHQuICBUaGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsOworICAgICAgd2Ugd2VsY29tZSB0ZXN0IHJlcG9ydHMhCisKKyAgICAtIFN1cHBvcnQgZm9yIE9wZW5UeXBlIGNvbGxlY3Rpb25zIChPVEMpIGhhcyBiZWVuIGFkZGVkLgorCisgICAgLSBQdXJlIENGRiBmb250cyB3aXRoaW4gYW4gU0ZOVCB3cmFwcGVyIGFyZSBub3cgc3VwcG9ydGVkLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIE1pbm9yIHJlbmRlcmluZyBpbXByb3ZlbWVudHMgdG8gdGhlIGF1dG8taGludGVyLgorCisgICAgLSBgRlRfR2x5cGhTbG90X09ibGlxdWUnIG5vdyB1c2VzIGEgc2hlYXIgYW5nbGUgb2YgMTLCsC4KKworICAgIC0gRXhwZXJpbWVudGFsIHN1cHBvcnQgIHRvIGhhbmRsZSBgcHJvcGVydHkgbW9kdWxlcycsICBmb3IgZXhhbXBsZQorICAgICAgdG8gY29udHJvbCB0aGUgIGJlaGF2aW91ciBvZiB0aGUgYXV0by1oaW50ZXIuICAgVGhlIEFQSSBjb25zaXN0cworICAgICAgb2YgdHdvIG5ldyBmdW5jdGlvbnMsIGBGVF9Qcm9wZXJ0eV9TZXQnIGFuZCBgRlRfUHJvcGVydHlfR2V0Jy4KKworICAgICAgVGhlIGNvZGUgaXMgIHN0aWxsIHN1YmplY3QgdG8gY2hhbmdlIGFuZCBzaG91bGQgIG5vdCBiZSB1c2VkIGZvcgorICAgICAgcHJvZHVjdGlvbi4KKworICAgIC0gVGhlIGBmdGRpZmYnIGRlbW8gcHJvZ3JhbSBub3cgc3VwcG9ydHMgVVRGLTggZW5jb2RlZCBpbnB1dCBmaWxlcworICAgICAgZm9yIG9wdGlvbiBgLWYnLgorCisgICAgLSBVc2luZyBrZXlzIGByJyBhbmQgYFInLCB5b3UgY2FuIG5vdyBhZGp1c3QgdGhlIHN0cm9rZXIgcmFkaXVzIGluCisgICAgICB0aGUgYGZ0dmlldycgZGVtbyBwcm9ncmFtLgorCisgICAgLSBPdGhlciwgbWlub3IgZml4ZXMgYW5kIGltcHJvdmVtZW50cy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjQuOSBhbmQgMi40LjEwCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBJbmNyZW1lbnRhbCBnbHlwaCBsb2FkaW5nIGFzIG5lZWRlZCBieSBnaG9zdHNjcmlwdCB3YXMgYnJva2VuLgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gQSBuZXcgIGZ1bmN0aW9uIGBGVF9PdXRsaW5lX0VtYm9sZGVuWFknLCAgY29udHJpYnV0ZWQgYnkgIEFsZXhlaQorICAgICAgUG9kdGVsZXpobmlrb3YuCisKKyAgICAtIEluIHRoZSBgZnR2aWV3JyBkZW1vIHByb2dyYW0sIGtleSBgZScgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgeCcKKyAgICAgIGFuZCBgeScgdG8gIGVtYm9sZGVuIGluICB0aGUgaG9yaXpvbnRhbCBhbmQgIHZlcnRpY2FsIGRpcmVjdGlvbiwKKyAgICAgIHJlc3BlY3RpdmVseS4KKworICAgIC0gVGhlIGdseXBoICBzcGFjaW5nIGNvbXB1dGF0aW9uICBpbiBgRlRfR2x5cGhTbG90X0VtYm9sZGVuJyAgKGFuZAorICAgICAgc2ltaWxhciBjb2RlIGluIGBmdHZpZXcnKSBoYXMgYmVlbiBpbXByb3ZlZC4KKworICAgIC0gTWlub3IgIGltcHJvdmVtZW50cyB0byAgdGhlIFRydWVUeXBlICBieXRlY29kZSAgaW50ZXJwcmV0ZXIgIGFuZAorICAgICAgZ2x5cGggbG9hZGVyLCB0aGUgYXV0by1oaW50ZXIsIGFuZCB0aGUgQi9XIHJhc3Rlcml6ZXIuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjggYW5kIDIuNC45CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBbm90aGVyIHJvdW5kIG9mIGZpeGVzIHRvIGJldHRlciBoYW5kbGUgaW52YWxpZCBmb250cy4gICBNYW55IG9mCisgICAgICB0aGVtIGFyZSB2dWxuZXJhYmlsaXRpZXMgIChzZWUgQ1ZFLTIwMTItMTEyNiB1cCB0byBDVkUtMjAxMi0xMTQ0CisgICAgICBhbmQgU0E0ODMyMCkgc28gYWxsIHVzZXJzIHNob3VsZCB1cGdyYWRlLgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlIGBFTkNPRElORyAtMSA8bj4nIGZvcm1hdCBvZiBCREYgZm9udHMgaXMgbm93IHN1cHBvcnRlZC4KKworICAgIC0gRm9yIEJERiBmb250cywgIHN1cHBvcnQgZm9yIHRoZSB3aG9sZSBVbmljb2RlIGVuY29kaW5nIHJhbmdlIGhhcworICAgICAgYmVlbiBhZGRlZC4KKworICAgIC0gQmV0dGVyIFRURiBzdXBwb3J0IGZvciB4X3BwZW0gIT0geV9wcGVtLgorCisgICAgLSBgRlRfR2V0X0FkdmFuY2VzJyBzb21ldGltZXMgcmV0dXJuZWQgYm9ndXMgdmFsdWVzLgorCisgICAgLSBUaGUgIGRlbW8gIHByb2dyYW1zICBubyAgbG9uZ2VyICByZWNvZ25pemUgIGFuZCAgaGFuZGxlICBkZWZhdWx0CisgICAgICBzdWZmaXhlczsgeW91IG5vdyBoYXZlIHRvIGFsd2F5cyBzcGVjaWZ5IHRoZSBjb21wbGV0ZSBmb250IG5hbWUuCisKKyAgICAtIEJldHRlciByZW5kZXJpbmcgYW5kIExDRCBtb2RlIGN5Y2xpbmcgYWRkZWQgdG8gYGZ0dmlldycuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjcgYW5kIDIuNC44CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBTb21lIHZ1bG5lcmFiaWxpdGllcyBpbiBoYW5kbGluZyBDSUQta2V5ZWQgUG9zdFNjcmlwdCBmb250cyBoYXZlCisgICAgICBiZWVuIGZpeGVkOyBzZWUgQ1ZFLTIwMTEtMzQzOS4KKworCisgIElJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIENocmlzIExpZGRlbGwgY29udHJpYnV0ZWQgYSBuZXcgQVBJLCBgRlRfR2V0X1BTX0ZvbnRfVmFsdWUnLCAgdG8KKyAgICAgIHJldHJpZXZlIG1vc3Qgb2YgdGhlIGRpY3Rpb25hcnkga2V5cyBpbiBUeXBlIDEgZm9udHMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjYgYW5kIDIuNC43CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBTb21lICB2dWxuZXJhYmlsaXRpZXMgaW4gaGFuZGxpbmcgVHlwZSAxIGZvbnRzICBoYXZlIGJlZW4gZml4ZWQ7CisgICAgICBzZWUgQ1ZFLTIwMTEtMzI1Ni4KKworCisgIElJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIEZyZWVUeXBlICBub3cgcHJvcGVybHkgIGhhbmRsZXMgWmFwZkRpbmdiYXRzICBnbHlwaCBuYW1lcyAgd2hpbGUKKyAgICAgIGNvbnN0cnVjdGluZyBhIFVuaWNvZGUgY2hhcmFjdGVyIG1hcCAoZm9yIGZvbnRzIHdoaWNoIGRvbid0IGhhdmUKKyAgICAgIG9uZSkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjUgYW5kIDIuNC42CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBGb3IgVHJ1ZVR5cGUgYmFzZWQgZm9udHMsIHRoZSBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHZhbHVlcyB3ZXJlCisgICAgICBpbmNvcnJlY3Qgc29tZXRpbWVzICAob2ZmIGJ5IGEgcGl4ZWwgaWYgdGhlIHBwZW0gdmFsdWUgd2FzIG5vdCBhCisgICAgICBtdWx0aXBsZSBvZiA1KS4gICBEZXBlbmRpbmcgb24gdGhlIHVzZSB5b3UgbWlnaHQgbm93ICBleHBlcmllbmNlCisgICAgICBhIGRpZmZlcmVudCAgbGF5b3V0OyB0aGUgIGNoYW5nZSBzaG91bGQgIHJlc3VsdCBpbiAgYmV0dGVyLCBtb3JlCisgICAgICBjb25zaXN0ZW50IGxpbmUgc3BhY2luZy4KKworICAgIC0gRml4IENWRS0yMDExLTAyMjYgIHdoaWNoIGNhdXNlcyBhICB2dWxuZXJhYmlsaXR5IHdoaWxlICBoYW5kbGluZworICAgICAgVHlwZSAxIGZvbnRzLgorCisgICAgLSBCREYgZm9udHMgIGNvbnRhaW5pbmcgIGdseXBocyB3aXRoIG5lZ2F0aXZlIHZhbHVlcyAgZm9yIEVOQ09ESU5HCisgICAgICB3ZXJlICBpbmNvcnJlY3RseSAgcmVqZWN0ZWQuICBUaGlzICBidWcgaGFzICBiZWVuIGludHJvZHVjZWQgIGluCisgICAgICBGcmVlVHlwZSB2ZXJzaW9uIDIuMi4wLgorCisgICAgLSBEYXZpZCBCZXZhbiBjb250cmlidXRlZCBhIG1ham9yIHJldmlzaW9uIG9mIHRoZSBGcmVlVHlwZSBzdHJva2VyCisgICAgICBjb2RlOgorCisgICAgICAuIFRoZSBiZWhhdmlvdXIgb2YgRlRfU1RST0tFUl9MSU5FSk9JTl9CRVZFTCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAgICAgIC4gQSBuZXcgIGxpbmUgam9pbiBzdHlsZSwgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfRklYRUQsICBoYXMKKyAgICAgICAgYmVlbiBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQgUG9zdFNjcmlwdCBhbmQgUERGIG1pdGVyIGpvaW5zLgorCisgICAgICAuIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUgIGhhcyBiZWVuIGludHJvZHVjZWQgIGFzIGFuCisgICAgICAgIGFsaWFzIGZvciBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSLgorCisgICAgICAuIFZhcmlvdXMgc3Ryb2tpbmcgZ2xpdGNoZXMgaGFzIGJlZW4gZml4ZWQuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgICAtIFNGTlQgYml0bWFwIGZvbnRzIHdoaWNoIGNvbnRhaW4gYW4gb3V0bGluZSBnbHlwaCBmb3IgYC5ub3RkZWYnCisgICAgICAgIG9ubHkgbm8gbG9uZ2VyIHNldCB0aGUgRlRfRkFDRV9GTEFHX1NDQUxBQkxFIGZsYWcuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjQgYW5kIDIuNC41CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBIHJlbmRlcmluZyByZWdyZXNzaW9uICBmb3Igc2Vjb25kLW9yZGVyIELDqXppZXIgY3VydmVzICBoYXMgYmVlbgorICAgICAgZml4ZWQsIGludHJvZHVjZWQgaW4gMi40LjMuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gSWYgYXV0b2hpbnRpbmcgIGlzIG5vdCAgZXhwbGljaXRseSBkaXNhYmxlZCwgIEZyZWVUeXBlIG5vdyAgdXNlcworICAgICAgdGhlIGF1dG9oaW50ZXIgaWYgIGEgVHJ1ZVR5cGUgYmFzZWQgZm9udCBkb2Vzbid0ICBjb250YWluIG5hdGl2ZQorICAgICAgaGludHMuCisKKyAgICAtIFRoZSBsb2FkIGZsYWcgRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEggIGhhcyBiZWVuIG1hZGUKKyAgICAgIHJlZHVuZGFudCBhbmQgIGlzIHNpbXBseSBpZ25vcmVkOyAgdGhpcyBtZWFucyB0aGF0IEZyZWVUeXBlICBub3cKKyAgICAgIGlnbm9yZXMgdGhlIGdsb2JhbCBhZHZhbmNlIHdpZHRoIHZhbHVlIGluIFRydWVUeXBlIGZvbnRzLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIGBGVF9TZm50X1RhYmxlX0luZm8nIGNhbiBub3cgcmV0dXJuIHRoZSBudW1iZXIgb2YgU0ZOVCB0YWJsZXMgb2YKKyAgICAgIGEgZm9udC4KKworICAgIC0gU3VwcG9ydCBmb3IgUENGIGZpbGVzIGNvbXByZXNzZWQgd2l0aCBiemlwMiBoYXMgYmVlbiBjb250cmlidXRlZAorICAgICAgYnkgSm9lbCAgS2xpbmdoZWQuICBUbyAgbWFrZSB0aGlzICB3b3JrLCB0aGUgIE9TIG11c3QgIHByb3ZpZGUgYQorICAgICAgYnppcDIgbGlicmFyeS4KKworICAgIC0gQnJhZGxleSAgR3JhaW5nZXIgIGNvbnRyaWJ1dGVkICBwcm9qZWN0ICBhbmQgIHNvbHV0aW9uICBmaWxlcyBpbgorICAgICAgVmlzdWFsIFN0dWRpbyAyMDEwIGZvcm1hdC4KKworICAgIC0gQWdhaW4gc29tZSBmaXhlcyB0byBiZXR0ZXIgaGFuZGxlIGJyb2tlbiBmb250cy4KKworICAgIC0gU29tZSBpbXByb3ZlbWVudHMgdG8gdGhlIEIvVyByYXN0ZXJpemVyLgorCisgICAgLSBGaXhlcyB0byB0aGUgY2FjaGUgbW9kdWxlIHRvIGltcHJvdmUgcm9idXN0bmVzcy4KKworICAgIC0gSnVzdCAgRmlsbCBCdWdzIGNvbnRyaWJ1dGVkIChleHBlcmltZW50YWwpIGNvZGUgdG8gY29tcHV0ZSAgYmx1ZQorICAgICAgem9uZXMgZm9yIENKSyBJZGVvZ3JhcGhzLCBpbXByb3ZpbmcgdGhlIGFsaWdubWVudCBvZiAgaG9yaXpvbnRhbAorICAgICAgc3RlbXMgYXQgdGhlIHRvcCBvciBib3R0b20gZWRnZXMuCisKKyAgICAtIFRoZSBgZnRncmlkJyBkZW1vIHByb2dyYW0gIGNhbiBub3cgZGlzcGxheSAgYXV0b2hpbnRlciBzZWdtZW50cywKKyAgICAgIHRvIGJlIHRvZ2dsZWQgb24gYW5kIG9mZiB3aXRoIGtleSBgcycuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjMgYW5kIDIuNC40CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBVVlMgc3VwcG9ydCAoVHJ1ZVR5cGUvT3BlblR5cGUgY21hcCBmb3JtYXQgMTQpIHN1cHBvcnQgaXMgZml4ZWQuCisgICAgICBUaGlzIHJlZ3Jlc3Npb24gaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuNC4wLgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gRGV0ZWN0IHRyaWNreSBmb250cyAoZS5nLiBNaW5nTGlVKSAgYnkgdGhlIGxlbmd0aHMgYW5kIGNoZWNrc3VtcworICAgICAgb2YgVHlwZTQyLXBlcnNpc3RlbnQgc3VidGFibGVzIChgY3Z0ICcsIGBmcGdtJywgYW5kIGBwcmVwJykgd2hlbgorICAgICAgYSBUcnVlVHlwZSBmb250IHdpdGhvdXQgZmFtaWx5IG5hbWUgaXMgZ2l2ZW4uICBUaGUgcHJldmlvdXMgZml4LAorICAgICAgaW50cm9kdWNlZCBpbiAyLjQuMywgIHdhcyB0b28gcmlnb3JvdXMsICBjYXVzaW5nIG1hbnkgIHN1YnNldHRlZAorICAgICAgZm9udHMgKG1haW5seSAgZnJvbSBQREYgZmlsZXMpIGRpc3BsYXllZCBiYWRseSAgYmVjYXVzZSBGcmVlVHlwZQorICAgICAgZm9yY2VkICByZW5kZXJpbmcgd2l0aCAgdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGVuZ2luZSAgaW5zdGVhZCBvZgorICAgICAgdGhlIGF1dG9oaW50ZXIuCisKKyAgICAtIEJldHRlciBzdXBwb3J0IGZvciA2NGJpdCBwbGF0Zm9ybXMuCisKKyAgICAtIE1vcmUgZml4ZXMgdG8gaW1wcm92ZSBoYW5kbGluZyBvZiBicm9rZW4gZm9udHMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjIgYW5kIDIuNC4zCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBGaXggcmVuZGVyaW5nIG9mIGNlcnRhaW4gY3ViaWMsIFMtc2hhcGVkIGFyY3MuICAgVGhpcyByZWdyZXNzaW9uCisgICAgICBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMi40LjAuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUbyAgZml4ICB0aGUgIGFib3ZlICBtZW50aW9uZWQgIHJlbmRlcmluZyAgaXNzdWUsICBhICBuZXcgc3BsaW5lCisgICAgICBmbGF0dGVuaW5nIGFsZ29yaXRobSAgaGFzIGJlZW4gIGludHJvZHVjZWQgd2hpY2ggIHNwZWVkcyB1cCBib3RoCisgICAgICBjb25pYyBhbmQgY3ViaWMgYXJjcy4KKworICAgIC0gSGFuZGxpbmcgb2YgYnJva2VuIGZvbnRzIGhhcyBiZWVuIGZ1cnRoZXIgaW1wcm92ZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjEgYW5kIDIuNC4yCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBIHN0YWNrIG92ZXJmbG93IGluIENGRiBUeXBlMiBDaGFyU3RyaW5ncyBpbnRlcnByZXRlciBpcyBmaXhlZC4KKworICAgIC0gSGFuZGxpbmcgVHlwZSA0MiBmb250IGRlYWxsb2NhdGlvbiB3YXMgYnJva2VuOyBhZGRpdGlvbmFsbHksIHRoZQorICAgICAgbGlicmFyeSBpcyBub3cgbW9yZSByb2J1c3QgYWdhaW5zdCBtYWxmb3JtZWQgVHlwZSA0MiBmb250cy4KKworCisgIElJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIFR3byBuZXcgZnVuY3Rpb25zLCAgYEZUX1JlZmVyZW5jZV9MaWJyYXJ5JyAoaW4gRlRfTU9EVUxFX0gpICBhbmQKKyAgICAgIGBGVF9SZWZlcmVuY2VfRmFjZScgIChpbiAgRlRfRlJFRVRZUEVfSCksICBoYXZlICBiZWVuICBhZGRlZCAgdG8KKyAgICAgIHNpbXBsaWZ5IGxpZmUtY3ljbGUgbWFuYWdlbWVudC4gIEEgY291bnRlciBnZXRzIGluaXRpYWxpemVkIHRvIDEKKyAgICAgIGF0IHRoZSAgdGltZSBhbiAgRlRfTGlicmFyeSAob3IgIEZUX0ZhY2UpIHN0cnVjdHVyZSAgaXMgY3JlYXRlZC4KKyAgICAgIFRoZSAgdHdvICBuZXcgICBmdW5jdGlvbnMgIGluY3JlbWVudCAgdGhlICByZXNwZWN0aXZlICAgY291bnRlci4KKyAgICAgIGBGVF9Eb25lX0xpYnJhcnknIGFuZCBgRlRfRG9uZV9GYWNlJyB0aGVuIG9ubHkgZGVzdHJveSBhIGxpYnJhcnkKKyAgICAgIG9yIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXMgMSwgb3RoZXJ3aXNlIHRoZXkgc2ltcGx5IGRlY3JlbWVudCB0aGUKKyAgICAgIGNvdW50ZXIuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi40LjAgYW5kIDIuNC4xCisKKyAgSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gQSBzZXJpb3VzIGJ1ZyBpbiB0aGUgIENGRiBmb250IG1vZHVsZSBwcmV2ZW50ZWQgIGRpc3BsYXkgb2YgbWFueQorICAgICAgZ2x5cGhzIGluIENGRiBmb250cyBsaWtlIGBNaW5pb25Qcm8tUmVndWxhci5vdGYnLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy4xMiBhbmQgMi40LjAKKworICBJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBTaW5jZSBNYXkgIDIwMTAsIGFsbCAgcGF0ZW50cyAgcmVnYXJkaW5nICB0aGUgVHJ1ZVR5cGUgIGJ5dGVjb2RlCisgICAgICBpbnRlcnByZXRlciBoYXZlIGV4cGlyZWQgd29ybGR3aWRlLiAgQ29uc2VxdWVudGx5LCB3ZSBub3cgZGVmaW5lCisgICAgICBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGJ5ICBkZWZhdWx0IChhbmQgIHVuZGVmaW5lCisgICAgICBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORykuCisKKyAgICAtIEEgbmV3IGZ1bmN0aW9uIGBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMnIGlzIGF2YWlsYWJsZSAgdG8KKyAgICAgIGFkanVzdCB0aGUgZmlsdGVyIHdlaWdodHMgc2V0IGJ5IGBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcicuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUaGFua3MgdG8gbWFueSByZXBvcnRzIGZyb20gUm9iZXJ0IMWad2nEmWNraSwgRnJlZVR5cGUncyBzdGFiaWxpdHkKKyAgICAgIGluIGhhbmRsaW5nIGJyb2tlbiBvciBkYW1hZ2VkIGZvbnRzIGlzIG11Y2ggaW1wcm92ZWQuCisKKyAgICAtIFN1cHBvcnQgIGZvciBMQ0QgIGZpbHRlciAgY29udHJvbCBoYXMgIGJlZW4gIGFkZGVkIHRvICB0aGUgIGRlbW8KKyAgICAgIHByb2dyYW1zIGBmdGRpZmYnIGFuZCBgZnR2aWV3Jy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjMuMTEgYW5kIDIuMy4xMgorCisgIEkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIEZvciAgYEZUX09wZW5fRmFjZScsICBuZXcgIHBhcmFtZXRlcnMgIGFyZSAgYXZhaWxhYmxlICB0byBpZ25vcmUKKyAgICAgIHByZWZlcnJlZCBmYW1pbHkgbmFtZXM6IEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWSBhbmQKKyAgICAgIEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWS4KKworCisgIElJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIFN1cHBvcnQgIGZvciAgaW5jcmVtZW50YWwgIGZvbnQgIGxvYWRpbmcgIChjb250cm9sbGVkICB3aXRoICB0aGUKKyAgICAgIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgbWFjcm8pIGlzIG5vdyBhY3RpdmUgYnkgZGVmYXVsdC4KKworICAgIC0gQmV0dGVyIHN1cHBvcnQgZm9yIHZlcnRpY2FsIG1ldHJpY3MuCisKKyAgICAtIFZhcmlvdXMgbWlub3IgYnVnIGZpeGVzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy4xMCBhbmQgMi4zLjExCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBWZXJzaW9uIDIuMy4xMCBicm9rZSBQQ0Ygc3VwcG9ydC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjMuMTAgYW5kIDIuMy45CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBJZiBhbGwgIEFTQ0lJIGRpZ2l0cyBpbiBhICBmb250IGhhdmUgdGhlICBzYW1lICh1bnNjYWxlZCkgd2lkdGgsCisgICAgICB0aGUgYXV0b2hpbnRlciByZXNwZWN0cyB0aGlzIGFuZCB3b24ndCBjaGFuZ2UgaXQuCisKKyAgICAtIFRydWVUeXBlIGZvbnRzICBhcmUgbm93ICByYXN0ZXJpemVkIGNvcnJlY3RseSAgaWYgdGhlIGhvcml6b250YWwKKyAgICAgIGFuZCB2ZXJ0aWNhbCByZXNvbHV0aW9uIGRpZmZlci4KKworICAgIC0gVHlwZSAxIGZvbnRzIGFyZSBub3cgaGFuZGxlZCB3aXRoIGluY3JlYXNlZCBwcmVjaXNpb24gaW50ZXJuYWxseQorICAgICAgdG8gYXZvaWQgc2VyaW91cyByb3VuZGluZyBpc3N1ZXMgaWYgbm9uLWludGVncmFsIGNvb3JkaW5hdGVzIGFyZQorICAgICAgZW5jb3VudGVyZWQuCisKKyAgICAtIEhvcml6b250YWxseSAgY29uZGVuc2VkIENGRiAgZm9udHMgKHVzaW5nIHRoZSBmb250ICBtYXRyaXgpIHdlcmUKKyAgICAgIHJlbmRlcmVkICBpbmNvcnJlY3RseS4gICBUaGlzICBidWcgIGhhcyAgYmVlbiAgaW50cm9kdWNlZCAgYWZ0ZXIKKyAgICAgIHJlbGVhc2UgMi4zLjUuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gU3VwcG9ydCBmb3IgdGhlIFNGTlQgY21hcCAxMyB0YWJsZSBmb3JtYXQgKGFzIGRlZmluZWQgYnkgdGhlIG5ldworICAgICAgT3BlblR5cGUgMS42IHNwZWNpZmljYXRpb24pIGhhcyBiZWVuIGFkZGVkLgorCisgICAgLSBCL1cgcmFzdGVyaXphdGlvbiAgb2Ygd2VsbC1oaW50ZWQgVHJ1ZVR5cGUgIGZvbnRzIGF0IHNtYWxsIHNpemVzCisgICAgICBoYXMgYmVlbiBncmVhdGx5IGltcHJvdmVkLgorCisgICAgLSBDYWxjdWxhdGlvbiAgb2YgIHZlcnRpY2FsICBtZXRyaWNzIGluICBPcGVuVHlwZSAgZm9udHMgaGFzICBiZWVuCisgICAgICBpbXByb3ZlZC4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBJdCAgaXMgbm93ICBwb3NzaWJsZSB0byAgY2hhbmdlICB0aGUgZW1ib2xkZW5pbmcgIGZhY3RvciBpbiAgdGhlCisgICAgICBgZnR2aWV3JyBkZW1vIHByb2dyYW0gd2l0aCBrZXlzIGBlJyBhbmQgYEUnLgorCisgICAgLSBJdCBpcyAgbm93IHBvc3NpYmxlICB0byBjaGFuZ2UgdGhlICBzbGFudCB2YWx1ZSBpbiAgdGhlIGBmdHZpZXcnCisgICAgICBkZW1vIHByb2dyYW0gd2l0aCBrZXlzIGBzJyBhbmQgYFMnLgorCisgICAgLSBUaGUgIDUtbGV2ZWxzICBncmF5c2NhbGUgIG1vZGUgb2YgIHRoZSBgZnRyYXN0ZXInICBtb2R1bGUgKHdoaWNoCisgICAgICBGcmVlVHlwZSBkb2Vzbid0IHVzZSBieSBkZWZhdWx0KSB3YXMgYnJva2VuIHNpbmNlIHZlcnNpb24gMi4zLjAuCisKKyAgICAtIENvbXBpbGF0aW9uIG9mIHRoZSAgYGZ0Z3JheXMnIGFuZCBgZnRyYXN0ZXInIG1vZHVsZXMgIHdhcyBicm9rZW4KKyAgICAgIGluIHN0YW5kLWFsb25lIG1vZGUuCisKKyAgICAtIFZhcmlvdXMgZml4ZXMgZm9yIGNvbXBpbGF0aW9uIG9uIDY0Yml0IGFuZCAxNmJpdCBhcmNoaXRlY3R1cmVzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy45IGFuZCAyLjMuOAorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gVmVyeSB1bmZvcnR1bmF0ZWx5LCBGcmVlVHlwZSAyLjMuOCBjb250YWluZWQgYSBjaGFuZ2UgdGhhdCBicm9rZQorICAgICAgaXRzICBvZmZpY2lhbCBBQkkuICBUaGUgIGVuZCByZXN1bHQgIGlzICB0aGF0IHByb2dyYW1zICBjb21waWxlZAorICAgICAgYWdhaW5zdCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSwgYnV0IGR5bmFtaWNhbGx5IGxpbmtlZAorICAgICAgdG8gIDIuMy44IGNhbiAgZXhwZXJpZW5jZSAgbWVtb3J5IGNvcnJ1cHRpb24gIGlmICB0aGV5IGNhbGwgIHRoZQorICAgICAgYEZUX0dldF9QU19Gb250X0luZm8nIGZ1bmN0aW9uLgorCisgICAgICBXZSByZWNvbW1lbmQgYWxsIHVzZXJzIHRvICB1cGdyYWRlIHRvIDIuMy45IGFzIHNvb24gYXMgcG9zc2libGUsCisgICAgICBvciB0byBkb3duZ3JhZGUgdG8gYSBwcmV2aW91cyAgcmVsZWFzZSBvZiB0aGUgbGlicmFyeSBpZiB0aGlzIGlzCisgICAgICBub3QgYW4gb3B0aW9uLgorCisgICAgICBUaGUgIG9yaWdpbiBvZiB0aGUgIGJ1ZyBpcyAgdGhhdCBhICBuZXcgZmllbGQgIHdhcyBhZGRlZCAgdG8gdGhlCisgICAgICBwdWJsaWNseSAgZGVmaW5lZCAgYFBTX0ZvbnRJbmZvUmVjJyAgc3RydWN0dXJlLiAgIFVuZm9ydHVuYXRlbHksCisgICAgICBvYmplY3RzIG9mIHRoaXMgIHR5cGUgY2FuIGJlIHN0YWNrIG9yICBoZWFwIGFsbG9jYXRlZCBieSBjYWxsZXJzCisgICAgICBvZiAgIGBGVF9HZXRfUFNfRm9udF9JbmZvJywgIHJlc3VsdGluZyAgIGluICAgYSAgbWVtb3J5ICAgYnVmZmVyCisgICAgICBvdmVyd3JpdGUgd2l0aCBpdHMgaW1wbGVtZW50YXRpb24gaW4gMi4zLjguCisKKyAgICAgIElmICB5b3Ugd2FudCB0byAga25vdyB3aGV0aGVyICB5b3VyIGNvZGUgIGlzIHZ1bG5lcmFibGUgIHRvIHRoaXMKKyAgICAgIGlzc3VlLCAgc2ltcGx5ICBzZWFyY2ggIGZvciAgdGhlICBzdWJzdHJpbmdzICBgUFNfRm9udEluZm8nICBhbmQKKyAgICAgIGBQU19Gb250X0luZm8nIGluIHlvdXIgc291cmNlIGNvZGUuICBJZiBub25lIGlzIGZvdW5kLCB5b3VyIGNvZGUKKyAgICAgIGlzIHNhZmUgYW5kIGlzIG5vdCBhZmZlY3RlZC4KKworICAgICAgVGhlIEZyZWVUeXBlIHRlYW0gYXBvbG9naXplcyBmb3IgdGhlIHByb2JsZW0uCisKKyAgICAtIFRoZSBQT1NJWCBzdXBwb3J0ICBvZiBNYWNPUyByZXNvdXJjZS1mb3JrIGZvbnRzICAoU3VpdGNhc2UgZm9udHMKKyAgICAgIGFuZCBMYXNlcldyaXRlciBUeXBlMSBQb3N0U2NyaXB0IGZvbnRzKSB3YXMgYnJva2VuIGluIDIuMy44LiAgSWYKKyAgICAgIEZyZWVUeXBlMiBpcyBidWlsdCB3aXRob3V0IENhcmJvbiBmcmFtZXdvcmssIHRoZXNlIGZvbnRzIGFyZSBub3QKKyAgICAgIGhhbmRsZWQgY29ycmVjdGx5LiAgVmVyc2lvbiAyLjMuNyBkaWRuJ3QgaGF2ZSB0aGlzIGJ1Zy4KKworICAgIC0gYEZUX0dldF9BZHZhbmNlJyAoYW5kIGBGVF9HZXRfQWR2YW5jZXMnKSByZXR1cm5lZCBiYWQgdmFsdWVzIGZvcgorICAgICAgYWxtb3N0IGFsbCBmb250IGZvcm1hdHMgZXhjZXB0IFRydWVUeXBlIGZvbnRzLgorCisgICAgLSBGaXggYSBidWcgIGluIHRoZSBTRk5UICBrZXJuaW5nIHRhYmxlICBsb2FkZXIvcGFyc2VyIHdoaWNoIGNvdWxkCisgICAgICBjcmFzaCB0aGUgZW5naW5lIGlmIGNlcnRhaW4gbWFsZm9ybWVkIHRhYmxlcyB3ZXJlIGVuY291bnRlcmVkLgorCisgICAgLSBDb21wb3NpdGUgU0ZOVCBiaXRtYXBzIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gVGhlICAgbmV3ICBmdW5jdGlvbnMgICBgRlRfR2V0X0NJRF9Jc19JbnRlcm5hbGx5X0NJRF9rZXllZCcgIGFuZAorICAgICAgYEZUX0dldF9DSURfRnJvbV9HbHlwaF9JbmRleCcgIGNhbiBiZSAgdXNlZCB0byAgYWNjZXNzIENJRC1rZXllZAorICAgICAgQ0ZGIGZvbnRzICB2aWEgQ0lEICB2YWx1ZXMuICBUaGlzIGNvZGUgIGhhcyBiZWVuICBjb250cmlidXRlZCBieQorICAgICAgTWljaGFlbCBUb2Z0ZGFsLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIGBGVF9PdXRsaW5lX0dldF9JbnNpZGVCb3JkZXInICByZXR1cm5zICAgRlRfU1RST0tFUl9CT1JERVJfUklHSFQKKyAgICAgIGZvciBlbXB0eSBvdXRsaW5lcy4gIFRoaXMgd2FzIGluY29ycmVjdGx5IGRvY3VtZW50ZWQuCisKKyAgICAtIFRoZSBgZnR2aWV3JyBkZW1vIHByb2dyYW0gbm93IHN1cHBvcnRzIFVURi04IGVuY29kZWQgc3RyaW5ncy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjMuOCBhbmQgMi4zLjcKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIENJRC1rZXllZCBmb250cyBpbiBhbiBTRk5UIHdyYXBwZXIgd2VyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCisKKyAgICAtIFRoZSBzbW9vdGggcmVuZGVyZXIgcHJvZHVjZWQgdHJ1bmNhdGVkIGltYWdlcyAob24gdGhlIHJpZ2h0KSBmb3IKKyAgICAgIG91dGxpbmUgcGFydHMgd2l0aCBuZWdhdGl2ZSBob3Jpem9udGFsIHZhbHVlcy4gIE1vc3QgZm9udHMgZG9uJ3QKKyAgICAgIGNvbnRhaW4gb3V0bGluZXMgbGVmdCAgdG8gdGhlIHkgY29vcmRpbmF0ZSBheGlzLCBidXQgIHRoZSBlZmZlY3QKKyAgICAgIHdhcyB2ZXJ5IG5vdGljZWFibGUgZm9yIG91dGxpbmVzIHByb2Nlc3NlZCB3aXRoIEZUX0dseXBoX1N0cm9rZSwKKyAgICAgIHVzaW5nIHRoaWNrIHN0cm9rZXMuCisKKyAgICAtIGBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUnICByZXR1cm5lZCBhICB3cm9uZyAgdmFsdWUgaWYgIGJvdGgKKyAgICAgIGNvbmZpZ3VyYXRpb24gIG1hY3JvcyAgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiBhbmQKKyAgICAgIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HIHdlcmUgZGVmaW5lZC4KKworICAgIC0gVGhlICBgZmFjZV9pbmRleCcgIGZpZWxkICBpbiAgIHRoZSAgYEZUX0ZhY2UnICBzdHJ1Y3R1cmUgIHdhc24ndAorICAgICAgaW5pdGlhbGl6ZWQgcHJvcGVybHkgYWZ0ZXIgY2FsbGluZyBGVF9PcGVuX0ZhY2UgYW5kIGZyaWVuZHMgd2l0aAorICAgICAgYSBwb3NpdGl2ZSBmYWNlIGluZGV4IGZvciBDRkZzLCAgV2luRk5UcywgYW5kLCBtb3N0IGltcG9ydGFudGx5LAorICAgICAgZm9yIFRydWVUeXBlIENvbGxlY3Rpb25zIChUVENzKS4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBUeXBlIDEgIGZvbnRzIGFuZCBDSUQta2V5ZWQgVHlwZSAxIGZvbnRzCisgICAgICBpbiBhbiBTRk5UIHdyYXBwZXIgaGFzIGJlZW4gIGFkZGVkIC0tIHN1Y2ggZm9udHMgYXJlIHVzZWQgb24gdGhlCisgICAgICBNYWMuICBUaGUgY29yZSAgU0ZOVCB0YWJsZXMgYFRZUDEnIGFuZCBgQ0lEICcgIGFyZSBwYXNzZWQgdG8gdGhlCisgICAgICBQUyBUeXBlIDEgIGFuZCBDSUQta2V5ZWQgUFMgZm9udCBkcml2ZXJzOyAgb3RoZXIgdGFibGVzIChgQUxNWCcsCisgICAgICBgQkJPWCcsIGV0Yy4pIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KKworICAgIC0gQSAgbmV3IGludGVyZmFjZSAgdG8gZXh0cmFjdCAgYWR2YW5jZSB2YWx1ZXMgIG9mIGdseXBocyAgd2l0aG91dAorICAgICAgbG9hZGluZyB0aGVpciBvdXRsaW5lcyBoYXMgYmVlbiBhZGRlZC4gIFRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZAorICAgICAgYEZUX0dldF9BZHZhbmNlJyBhbmQgYEZUX0dldF9BZHZhbmNlcyc7IHRoZXkgYXJlIGRlZmluZWQgaW4gZmlsZQorICAgICAgYGZ0YWR2YW5jLmgnICh0byBiZSBhY2Nlc3NlZCBhcyBGVF9BRFZBTkNFU19IKS4KKworICAgIC0gQSBuZXcgZnVuY3Rpb24gYEZUX0dldF9GU1R5cGVfRmxhZ3MnIChpbiBGVF9GUkVFVFlQRV9IKSBoYXMgYmVlbgorICAgICAgY29udHJpYnV0ZWQgIGJ5ICAgRGF2aWQgIEJldmFuICB0byAgYWNjZXNzICAgdGhlICBlbWJlZGRpbmcgIGFuZAorICAgICAgc3Vic2V0dGluZyByZXN0cmljdGlvbiBpbmZvcm1hdGlvbiBvZiBmb250cy4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBGVF9NdWxGaXggaXMgbm93IGFuIGlubGluZWQgZnVuY3Rpb247IGJ5IGRlZmF1bHQsIGFzc2VtYmxlciBjb2RlCisgICAgICBpcyBwcm92aWRlZCBmb3IgeDg2IGFuZCBBUk0uICBTZWUgRlRfQ09ORklHX09QVElPTl9JTkxJTkVfTVVMRklYCisgICAgICBhbmQgRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVIgKGluIGZ0b3B0aW9uLmgpIGZvciBtb3JlLgorCisgICAgLSBUaGUgaGFuZGxpbmcgb2YgYHRyaWNreScgZm9udHMgICh0aGlzIGlzLCBmb250cyB3aGljaCBkb24ndCB3b3JrCisgICAgICB3aXRoIHRoZSAgYXV0b2hpbnRlciwgbmVlZGluZyB0aGUgZm9udCAgZm9ybWF0J3MgaGludGluZyBlbmdpbmUpCisgICAgICBoYXMgYmVlbiBnZW5lcmFsaXplZCBhbmQgY2hhbmdlZCBzbGlnaHRseToKKworICAgICAgLiBBIG5ldyAgZmFjZSBmbGFnICBGVF9GQUNFX0ZMQUdfVFJJQ0tZIGluZGljYXRlcyB0aGF0ICB0aGUgZm9udAorICAgICAgICBmb3JtYXQncyAgaGludGluZyBlbmdpbmUgaXMgIG5lY2Vzc2FyeSBmb3IgIGNvcnJlY3QgcmVuZGVyaW5nLgorICAgICAgICBUaGUgbWFjcm8gRlRfSVNfVFJJQ0tZIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoaXMgZmxhZy4KKworICAgICAgLiBGVF9MT0FEX05PX0hJTlRJTkcgaXMgbm93IGlnbm9yZWQgZm9yIHRyaWNreSBmb250cy4gIFRvIHJlYWxseQorICAgICAgICBmb3JjZSAgcmF3ICBsb2FkaW5nICBvZiAgc3VjaCBmb250cyAgKHdpdGhvdXQgIGhpbnRpbmcpLCAgYm90aAorICAgICAgICBGVF9MT0FEX05PX0hJTlRJTkcgIGFuZCBGVF9MT0FEX05PX0FVVE9ISU5UICBtdXN0ICBiZSB1c2VkICAtLQorICAgICAgICB0aGlzIGlzIHNvbWV0aGluZyB3aGljaCB5b3UgcHJvYmFibHkgbmV2ZXIgd2FudCB0byBkby4KKworICAgICAgLiBUcmlja3kgIFRydWVUeXBlIGZvbnRzICBhbHdheXMgdXNlICB0aGUgIGJ5dGVjb2RlIGludGVycHJldGVyLAorICAgICAgICBlaXRoZXIgdGhlIHBhdGVudGVkIG9yIHVucGF0ZW50ZWQgdmVyc2lvbi4KKworICAgIC0gVGhlICBmdW5jdGlvbiAgYEZUX0dseXBoU2xvdF9Pd25fQml0bWFwJyAgaGFzICBiZWVuICBtb3ZlZCAgZnJvbQorICAgICAgRlRfU1lOVEhFU0lTX0ggdG8gRlRfQklUTUFQX0g7IGl0ICBpcyBub3cgcGFydCBvZiB0aGUgYG9mZmljaWFsJworICAgICAgQVBJLiAgIChUaGUgZnVuY3Rpb25zICBpbiAgRlRfU1lOVEhFU0lTX0ggYXJlICBzdGlsbCBzdWJqZWN0ICB0bworICAgICAgY2hhbmdlLCBob3dldmVyLikKKworICAgIC0gSW4gdGhlICBgZnRkaWZmJyAgZGVtbyAgcHJvZ3JhbSB5b3UgIGNhbiBub3cgIHRvZ2dsZSB0aGUgIHVzZSBvZgorICAgICAgRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEggd2l0aCBrZXkgYGEnLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy43IGFuZCAyLjMuNgorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gSWYgdGhlIGxpYnJhcnkgIHdhcyBjb21waWxlZCBvbiBhbiBpMzg2ICBwbGF0Zm9ybSB1c2luZyBnY2MsIGFuZAorICAgICAgY29tcGlsZXIgIG9wdGlvbiAtTzMgd2FzICBnaXZlbiwgYEZUX011bEZpeCcgIHNvbWV0aW1lcyByZXR1cm5lZAorICAgICAgaW5jb3JyZWN0ICByZXN1bHRzICAgd2hpY2ggIGNvdWxkICBoYXZlICAgY2F1c2VkICBwcm9ibGVtcyAgd2l0aAorICAgICAgYEZUX1JlcXVlc3RfTWV0cmljcycgICBhbmQgIGBGVF9TZWxlY3RfTWV0cmljcycsICAgcmV0dXJuaW5nICBhbgorICAgICAgaW5jb3JyZWN0IGRlc2NlbmRlciBzaXplLgorCisgICAgLSBQdXJlIENGRnMgd2l0aG91dCAgc3ViZm9udHMgd2VyZSBzY2FsZWQgaW5jb3JyZWN0bHkgIGlmIHRoZSBmb250CisgICAgICBtYXRyaXggIHdhcyAgbm9uLXN0YW5kYXJkLiAgVGhpcyAgYnVnICBoYXMgIGJlZW4gIGludHJvZHVjZWQgIGluCisgICAgICB2ZXJzaW9uIDIuMy42LgorCisgICAgLSBUaGUgIGBzdHlsZV9uYW1lJyAgZmllbGQgIGluICB0aGUgIGBGVF9GYWNlUmVjJyAgc3RydWN0dXJlIG9mdGVuCisgICAgICBjb250YWluZWQgIGEgd3JvbmcgIHZhbHVlIGZvciAgVHlwZSAxICBmb250cy4gIFRoaXMgbWlzYmVoYXZpb3VyCisgICAgICBoYXMgYmVlbiAgaW50cm9kdWNlZCAgaW4gIHZlcnNpb24gIDIuMy42ICB3aGlsZSAgdHJ5aW5nICB0byAgZml4CisgICAgICBhbm90aGVyICAgcHJvYmxlbS4gICBbTm90ZSwgIGhvd2V2ZXIsICAgdGhhdCAgIHRoaXMgICB2YWx1ZSAgIGlzCisgICAgICBpbmZvcm1hdGl2ZSBvbmx5ICBzaW5jZSAgdGhlICB1c2VkICBhbGdvcml0aG0gdG8gIGV4dHJhY3QgIGl0IGlzCisgICAgICB2ZXJ5IHNpbXBsaXN0aWMuXQorCisKKyAgSUkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIFR3byAgICAgIG5ldyAgICAgIG1hY3JvcywgICAgICBGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTICAgICBhbmQKKyAgICAgIEZUX09VVExJTkVfRVhDTFVERV9TVFVCUywgIGhhdmUgYmVlbiBpbnRyb2R1Y2VkLiAgIFRvZ2V0aGVyIHdpdGgKKyAgICAgIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTICh3aGljaCAgd2FzIGlnbm9yZWQgcHJldmlvdXNseSkgaXQgaXMKKyAgICAgIG5vdyBwb3NzaWJsZSB0byBjb250cm9sIHRoZSBkcm9wb3V0IG1vZGUgIG9mIHRoZSBgcmFzdGVyJyBtb2R1bGUKKyAgICAgIChmb3IgQiZXIHJhc3Rlcml6YXRpb24pLCAgIHVzaW5nICB0aGUgICBgZmxhZ3MnICBmaWVsZCAgIGluICB0aGUKKyAgICAgIGBGVF9PdXRsaW5lJyBzdHJ1Y3R1cmUuCisKKyAgICAtIFRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciBub3cgcGFzc2VzIHRoZSBkcm9wb3V0IG1vZGUgdG8KKyAgICAgIHRoZSBCJlcgcmFzdGVyaXplci4gIFRoaXMgZ3JlYXRseSBpbmNyZWFzZXMgdGhlIG91dHB1dCBmb3Igc21hbGwKKyAgICAgIHBwZW0gdmFsdWVzIG9mIG1hbnkgZm9udHMgbGlrZSBgcGFsYS50dGYnLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy42IGFuZCAyLjMuNQorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gQSAgYnVuY2ggb2YgIHBvdGVudGlhbCBzZWN1cml0eSAgcHJvYmxlbXMgaGF2ZSAgYmVlbiBmb3VuZC4gIEFsbAorICAgICAgdXNlcnMgc2hvdWxkIHVwZGF0ZS4KKworICAgIC0gTWljcm9zb2Z0ICBVbmljb2RlICBjbWFwcyAgaW4gIFRydWVUeXBlICBmb250cyAgYXJlICBub3cgIGFsd2F5cworICAgICAgcHJlZmVycmVkIG92ZXIgQXBwbGUgY21hcHMuICBUaGlzIGlzIG5vdCBhIGJ1ZyBwZXIgc2UsIGJ1dCB0aGVyZQorICAgICAgZXhpc3Qgc29tZSBidWdneSAgZm9udHMgY3JlYXRlZCBmb3IgTVMgd2hpY2ggIGhhdmUgYnJva2VuICBBcHBsZQorICAgICAgY21hcHMuICBUaGlzIGFmZmVjdHMgIG9ubHkgdGhlIGF1dG9tYXRpYyAgc2VsZWN0aW9uIG9mIEZyZWVUeXBlOworICAgICAgaXQncyBhbHdheXMgcG9zc2libGUgdG8gbWFudWFsbHkgc2VsZWN0IGFuIEFwcGxlIFVuaWNvZGUgY21hcCBpZgorICAgICAgZGVzaXJlZC4KKworICAgIC0gTWFueSBidWcgZml4ZXMgdG8gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyLgorCisgICAgLSBJbXByb3ZlZCBNYWMgc3VwcG9ydC4KKworICAgIC0gU3Vic2V0dGVkIENJRC1rZXllZCBDRkZzIGFyZSBub3cgc3VwcG9ydGVkIGNvcnJlY3RseS4KKworICAgIC0gQ0lELWtleWVkIENGRnMgd2l0aCBzdWJmb250cyB3aGljaCBhcmUgc2NhbGVkIGluIGEgIG5vbi1zdGFuZGFyZAorICAgICAgd2F5IGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkuCisKKyAgICAtIEEgY2FsbCB0byBGVF9PcGVuX0ZhY2Ugd2l0aCBgZmFjZV9pbmRleCcgPCAwIGNyYXNoZWQgRnJlZVR5cGUgaWYKKyAgICAgIHRoZSBmb250IHdhcyBhIFdpbmRvd3MgKGJpdG1hcCkgRk5UL0ZPTi4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBUaGUgbmV3IGZ1bmN0aW9uIGBGVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQnIGdpdmVzCisgICAgICBhY2Nlc3MgdG8gIHRob3NlIGZpZWxkcyBpbiBhIENJRC1rZXllZCBmb250LiAgVGhlIGNvZGUgIGhhcyBiZWVuCisgICAgICBjb250cmlidXRlZCBieSBEZXJlayBDbGVnZy4KKworICAgIC0gR2VvcmdlIFdpbGxpYW1zICBjb250cmlidXRlZCAgY29kZSAgdG8gdmFsaWRhdGUgIHRoZSBuZXcgIGBNQVRIJworICAgICAgT3BlblR5cGUgIHRhYmxlICh3aXRoaW4gIHRoZSBgb3R2YWxpZCcgIG1vZHVsZSkuICBUaGUgIGBmdHZhbGlkJworICAgICAgZGVtbyBwcm9ncmFtIGhhcyBiZWVuIGV4dGVuZGVkIGFjY29yZGluZ2x5LgorCisgICAgLSBBbiBBUEkgZm9yIGNtYXAgMTQgc3VwcG9ydCAgKGZvciBVbmljb2RlIFZhcmlhbnQgU2VsZWN0b3JzLCBVVlMpCisgICAgICBoYXMgYmVlbiBjb250cmlidXRlZCBieSBHZW9yZ2UgV2lsbGlhbXMuCisKKyAgICAtIEEgbmV3IGZhY2UgZmxhZyBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGhhcyBiZWVuIGFkZGVkLCAgdG9nZXRoZXIKKyAgICAgIHdpdGggYSBtYWNybyBGVF9JU19DSURfS0VZRUQgd2hpY2ggZXZhbHVhdGVzIHRvIDEgaWYgdGhlIGZvbnQgaXMKKyAgICAgIENJRC1rZXllZC4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBCdWlsZCBzdXBwb3J0IGZvciBzeW1iaWFuIGhhcyBiZWVuIGNvbnRyaWJ1dGVkLgorCisgICAgLSBCZXR0ZXIgV0dMNCBnbHlwaCBuYW1lIHN1cHBvcnQsIGNvbnRyaWJ1dGVkIGJ5IFNlcmdleSBUb2xzdG92LgorCisgICAgLSBEZWJ1Z2dpbmcgb3V0cHV0IG9mIHRoZSAgdmFyaW91cyBGVF9UUkFDRVggbWFjcm9zIGlzIG5vdyBzZW50IHRvCisgICAgICBzdGRlcnIuCisKKyAgICAtIFRoZSBgZnR2aWV3JyBkZW1vIHByb2dyYW0gbm93IHByb3ZpZGVzIGFydGlmaWNpYWwgc2xhbnRpbmcgdG9vLgorCisgICAgLSBUaGUgYGZ0dmFsaWQnIGRlbW8gIHByb2dyYW0gaGFzIGEgbmV3ICBvcHRpb24gYC1mJyB0byBzZWxlY3QgdGhlCisgICAgICBmb250IGluZGV4LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy41IGFuZCAyLjMuNAorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gU29tZSBzdWJnbHlwaHMgaW4gVHJ1ZVR5cGUgZm9udHMgd2VyZSBoYW5kbGVkIGluY29ycmVjdGx5IGR1ZSB0bworICAgICAgYSBtaXNzaW5nIGdyYXBoaWNzIHN0YXRlIHJlaW5pdGlhbGl6YXRpb24uCisKKyAgICAtIExhcmdlIC5aIGZpbGVzICAoYXMgZGlzdHJpYnV0ZWQgd2l0aCBzb21lIFgxMSAgcGFja2FnZXMpIHdlcmVuJ3QKKyAgICAgIGhhbmRsZWQgY29ycmVjdGx5LCBtYWtpbmcgRnJlZVR5cGUgaW5jcmVhc2UgdGhlIGhlYXAgc3RhY2sgaW4gYW4KKyAgICAgIGVuZGxlc3MgbG9vcC4KKworICAgIC0gQSBsYXJnZSAgbnVtYmVyIG9mICBidWdzIGhhdmUgIGJlZW4gZml4ZWQgIHRvIGF2b2lkICBjcmFzaGVzIGFuZAorICAgICAgZW5kbGVzcyBsb29wcyB3aXRoIGludmFsaWQgZm9udHMuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gVGhlICB0d28gbmV3ICBjYWNoZSBmdW5jdGlvbnMgIGBGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXInIGFuZAorICAgICAgYEZUQ19TQml0X0NhY2hlX0xvb2t1cFNjYWxlcicgaGF2ZSBiZWVuIGFkZGVkIHRvIGFsbG93IGxvb2t1cCBvZgorICAgICAgZ2x5cGhzIHVzaW5nIGFuICBgRlRDX1NjYWxlcicgb2JqZWN0OyAgdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworICAgICAgdXNlIGZyYWN0aW9uYWwgcGl4ZWwgc2l6ZXMgaW4gdGhlIGNhY2hlLiAgVGhlIGRlbW8gcHJvZ3JhbXMgaGF2ZQorICAgICAgYmVlbiB1cGRhdGVkIGFjY29yZGluZ2x5IHRvIHVzZSB0aGlzIGZlYXR1cmUuCisKKyAgICAtIEEgbmV3IEFQSSAgYEZUX0dldF9DTWFwX0Zvcm1hdCcgaGFzIGJlZW4gYWRkZWQgdG8gIGdldCB0aGUgIGNtYXAKKyAgICAgIGZvcm1hdCAgb2YgYSAgVHJ1ZVR5cGUgZm9udC4gICBUaGlzICBpcyB1c2VmdWwgIGluIGhhbmRsaW5nICBQREYKKyAgICAgIGZpbGVzLiAgVGhlIGNvZGUgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkgRGVyZWsgQ2xlZ2cuCisKKyAgICAtIFRoZSAgYXV0by1oaW50ZXIgIG5vdyAgcHJvZHVjZXMgIGJldHRlciAgb3V0cHV0ICBieSAgZGVmYXVsdCBmb3IKKyAgICAgIG5vbi1MYXRpbiBzY3JpcHRzICBsaWtlIEluZGljLiAgIFRoaXMgd2FzIGRvbmUgYnkgIHVzaW5nIHRoZSBDSksKKyAgICAgIGhpbnRpbmcgbW9kdWxlICBhcyB0aGUgZGVmYXVsdCBpbnN0ZWFkIG9mIHRoZSBMYXRpbiBvbmUuICBUaGFua3MKKyAgICAgIHRvIFJhaHVsIEJoYWxlcmFvIGZvciB0aGlzIHN1Z2dlc3Rpb24uCisKKyAgICAtIEEgbmV3IEFQSSBgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cycgIGhhcyBiZWVuIGFkZGVkIHRvIGZpbmQKKyAgICAgIG91dCAgd2hldGhlciAgYSAgZ2l2ZW4gIFRydWVUeXBlICBmb250ICB1c2VzICBwYXRlbnRlZCAgYnl0ZWNvZGUKKyAgICAgIGluc3RydWN0aW9ucy4gICBUaGUgIGBmdDJkZW1vcycgYnVuZGxlICBjb250YWlucyBhICBuZXcgIHByb2dyYW0KKyAgICAgIGNhbGxlZCBgZnRwYXRjaGsnIHdoaWNoIGRlbW9uc3RyYXRlcyBpdHMgdXNhZ2UuCisKKyAgICAtIEEgIG5ldyAgQVBJICBgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZycgIGhhcyAgYmVlbiAgYWRkZWQgdG8KKyAgICAgIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB1bnBhdGVudGVkIGhpbnRlci4KKworICAgIC0gU3VwcG9ydCBmb3IgV2luZG93cyBGT04gZmlsZXMgaW4gUEUgZm9ybWF0ICBoYXMgYmVlbiBjb250cmlidXRlZAorICAgICAgYnkgRG1pdHJ5IFRpbW9zaGtvdi4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBWaW5jZW50IFJpY2hvbW1lIGNvbnRyaWJ1dGVkIFZpc3VhbCBDKysgcHJvamVjdCBmaWxlcyBmb3IgUG9ja2V0CisgICAgICBQQ3MuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4zLjQgYW5kIDIuMy4zCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBBIHNlcmlvdXMgIGJ1ZyAgaW4gIHRoZSAgaGFuZGxpbmcgIG9mIGJpdG1hcCAgZm9udHMgKGFuZCAgYml0bWFwCisgICAgICBzdHJpa2VzIG9mIG91dGxpbmUgZm9udHMpIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gMi4zLjMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4zLjMgYW5kIDIuMy4yCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBSZW1vdmUgYSBzZXJpb3VzIHJlZ3Jlc3Npb24gaW4gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyCisgICAgICB0aGF0IHdhcyBpbnRyb2R1Y2VkICBpbiB2ZXJzaW9uIDIuMy4yLiAgTm90ZSB0aGF0ICB0aGlzIGRvZXMgbm90CisgICAgICBkaXNhYmxlICB0aGUgIGltcHJvdmVtZW50cyAgaW50cm9kdWNlZCAgdG8gIHRoZSAgaW50ZXJwcmV0ZXIgIGluCisgICAgICB2ZXJzaW9uIDIuMy4yLCAgb25seSBzb21lIGlsbCAgY2FzZXMgdGhhdCBvY2N1cnJlZCAgd2l0aCBjZXJ0YWluCisgICAgICBmb250cyAodGhvdWdoIGEgZmV3IHBvcHVsYXIgb25lcykuCisKKyAgICAtIFRoZSBhdXRvLWhpbnRlciBub3cgIGlnbm9yZXMgc2luZ2xlLXBvaW50IGNvbnRvdXJzIGZvciBjb21wdXRpbmcKKyAgICAgIGJsdWUgem9uZXMuICAgVGhpcyBidWcgIGNyZWF0ZWQgYHdhdnknIGJhc2VsaW5lcyAgd2hlbiByZW5kZXJpbmcKKyAgICAgIHRleHQgIHdpdGggIHZhcmlvdXMgIGZvbnRzICB0aGF0ICB1c2UgdGhlc2UgIGNvbnRvdXJzICB0byAgbW9kZWwKKyAgICAgIG1hcmstYXR0YWNoIHBvaW50cyAgKHRoZXNlIGFyZSBwb2ludHMgdGhhdCAgYXJlIG5ldmVyIHJhc3Rlcml6ZWQKKyAgICAgIGFuZCBhcmUgcGxhY2VkIG91dHNpZGUgb2YgdGhlIGdseXBoJ3MgcmVhbCBvdXRsaW5lKS4KKworICAgIC0gVGhlIGByc2JfZGVsdGEnIGFuZCBgbHNiX2RlbHRhJyBnbHlwaCBzbG90IGZpZWxkcyBhcmUgbm93IHNldCB0bworICAgICAgemVybyBmb3IgbW9uby1zcGFjZWQgZm9udHMuICBPdGhlcndpc2UgY29kZSB0aGF0IHVzZXMgdGhlbSB3b3VsZAorICAgICAgZXNzZW50aWFsbHkgcnVpbiB0aGUgZml4ZWQtYWR2YW5jZSBwcm9wZXJ0eS4KKworICAgIC0gRml4ICBDVkUtMjAwNy0xMzUxIHdoaWNoICBjYW4gIGNhdXNlIGFuICBpbnRlZ2VyIG92ZXJmbG93ICB3aGlsZQorICAgICAgcGFyc2luZyAgQkRGIGZvbnRzLCAgbGVhZGluZyB0byAgYSBwb3RlbnRpYWxseSAgZXhwbG9pdGFibGUgaGVhcAorICAgICAgb3ZlcmZsb3cgY29uZGl0aW9uLgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gRml4ZWQgY29tcGlsYXRpb24gaXNzdWVzIG9uIHNvbWUgNjQtYml0IHBsYXRmb3JtcyAoc2VlIENoYW5nZUxvZworICAgICAgZm9yIGRldGFpbHMpLgorCisgICAgLSBBIG5ldyBkZW1vICBwcm9ncmFtIGBmdGRpZmYnIGhhcyBiZWVuIGFkZGVkICB0byBjb21wYXJlIFRydWVUeXBlCisgICAgICBoaW50aW5nLCBGcmVlVHlwZSdzIGF1dG8gIGhpbnRpbmcsIGFuZCByZW5kZXJpbmcgd2l0aG91dCBoaW50aW5nCisgICAgICBpbiB0aHJlZSBjb2x1bW5zLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy4yIGFuZCAyLjMuMQorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gRnJlZVR5cGUgIHJldHVybmVkIGluY29ycmVjdCAga2VybmluZyBpbmZvcm1hdGlvbiAgZnJvbSBUcnVlVHlwZQorICAgICAgZm9udHMgd2hlbiB0aGUgYnl0ZWNvZGUgIGludGVycHJldGVyIHdhcyBlbmFibGVkLiAgVGhpcyBoYXBwZW5lZAorICAgICAgZHVlIHRvIGEgdHlwbyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMi4zLjAuCisKKyAgICAtIE5lZ2F0aXZlICBrZXJuaW5nICB2YWx1ZXMgIGZyb20gICBQRk0gIGZpbGVzICBhcmUgIG5vdyAgcmVwb3J0ZWQKKyAgICAgIGNvcnJlY3RseSAgKHRoZXkgd2VyZSByZWFkICBhcyAxNi1iaXQgIHVuc2lnbmVkIHZhbHVlcyAgZnJvbSB0aGUKKyAgICAgIGZpbGUpLgorCisgICAgLSBGaXhlZCAgYSBzbWFsbCAgbWVtb3J5IGxlYWsgIHdoZW4gYEZUX0luaXRfRnJlZVR5cGUnICBmYWlsZWQgZm9yCisgICAgICBzb21lIHJlYXNvbi4KKworICAgIC0gVGhlIFBvc3RzY3JpcHQgaGludGVyIHBsYWNlZCBhbmQgc2l6ZWQgdmVyeSB0aGluIGFuZCBnaG9zdCBzdGVtcworICAgICAgaW5jb3JyZWN0bHkuCisKKyAgICAtIFRoZSBUcnVlVHlwZSBieXRlY29kZSAgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gZml4ZWQgdG8gIGdldCByaWQgb2YKKyAgICAgIG1vc3Qgb2YgdGhlICByYXJlIGRpZmZlcmVuY2VzIHNlZW4gaW4gY29tcGFyaXNvbiAgdG8gdGhlIFdpbmRvd3MKKyAgICAgIGZvbnQgbG9hZGVyLgorCisKKyAgSUkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIFRoZSBhdXRvLWhpbnRlciAgbm93IGJldHRlciBkZWFscyAgd2l0aCBzZXJpZnMgYW5kICBjb3JuZXIgY2FzZXMKKyAgICAgIChlLmcuLCAgZ2x5cGggJzknICBpbiBBcmlhbCAgYXQgOXB0LCAgOTZkcGkpLiAgSXQgIGFsc28gaW1wcm92ZXMKKyAgICAgIHNwYWNpbmcgIGFkanVzdG1lbnRzIGFuZCBkb2Vzbid0ICBjaGFuZ2Ugd2lkdGhzICBmb3Igbm9uLXNwYWNpbmcKKyAgICAgIGdseXBocy4KKworICAgIC0gTWFueSAgIE1hYy1zcGVjaWZpYyAgIGZ1bmN0aW9ucyAgIGFyZSAgZGVwcmVjYXRlZCAgIChidXQgICBzdGlsbAorICAgICAgYXZhaWxhYmxlKTsgIG1vZGVybiByZXBsYWNlbWVudHMgIGhhdmUgYmVlbiAgcHJvdmlkZWQgIGZvciB0aGVtLgorICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGluIGZpbGUgYGZ0bWFjLmgnLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy4xIGFuZCAyLjMuMAorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gVGhlIFRydWVUeXBlIGludGVycHJldGVyIHNvbWV0aW1lcyByZXR1cm5lZCBpbmNvcnJlY3QgaG9yaXpvbnRhbAorICAgICAgbWV0cmljcyBkdWUgdG8gYSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBTSFogaW5zdHJ1Y3Rpb24uCisKKyAgICAtIEEgdHlwbyAgaW4gIGEgIHNlY3VyaXR5ICBjaGVjayAgaW50cm9kdWNlZCAgYWZ0ZXIgIHZlcnNpb24gMi4yLjEKKyAgICAgIHByZXZlbnRlZCBGcmVlVHlwZSB0byByZW5kZXIgc29tZSBnbHlwaHMgaW4gQ0ZGIGZvbnRzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMy4wIGFuZCAyLjIuMQorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gVGhlICBQQ0YgZm9udCAgbG9hZGVyICBpcyAgbm93IG11Y2ggIG1vcmUgIHJvYnVzdCB3aGlsZSAgbG9hZGluZworICAgICAgbWFsZm9ybWVkIGZvbnQgZmlsZXMuCisKKyAgICAtIFZhcmlvdXMgbWVtb3J5IGxlYWtzIGhhdmUgYmVlbiBmb3VuZCBhbmQgZml4ZWQuCisKKyAgICAtIFRoZSBUcnVlVHlwZSBuYW1lIGxvYWRlciBub3cgZGVhbHMgcHJvcGVybHkgd2l0aCBzb21lIGZvbnRzIHRoYXQKKyAgICAgIGVuY29kZSB0aGVpciAgbmFtZXMgaW4gVVRGLTE2ICh0aGUgc3BlY2lmaWNhdGlvbiAgd2FzIHZhZ3VlLCBhbmQKKyAgICAgIHRoZSBjb2RlIGluY29ycmVjdGx5IGFzc3VtZWQgVUNTLTQpLgorCisgICAgLSBGaXhlZCB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgIGxvYWRlciB0byBkZWFsIHByb3Blcmx5IHdpdGggc3VidGxlCisgICAgICBtb25vY2hyb21lL2dyYXkgIGlzc3VlcyAgd2hlbiAgIHNjYWxpbmcgIHRoZSAgQ1ZULiAgIFNvbWUgIGZvbnRzCisgICAgICBleGhpYml0ZWQgYmFkIHJlbmRlcmluZyBhcnRpZmFjdHMgb3RoZXJ3aXNlLgorCisgICAgLSBgRlRfR2x5cGhTbG90X0VtYm9sZGVuJyBub3cgIHN1cHBvcnRzIHZlcnRpY2FsIGxheW91dHMgY29ycmVjdGx5CisgICAgICAoaXQgbWFuZ2xlZCB0aGUgdmVydGljYWwgYWR2YW5jZSBoZWlnaHQpLgorCisgICAgLSBGaXhlZCBieXRlICBlbmRpYW4gaXNzdWVzICBvZiBgZnRtYWMuYycgdG8gIHN1cHBvcnQgTWFjIE9TICBYIG9uCisgICAgICBpMzg2LgorCisgICAgLSBUaGUgIFBGUiAgZm9udCBsb2FkZXIgIG5vICBsb25nZXIgIGVycm9uZW91c2x5ICB0YWdzIGZvbnQgIGZpbGVzCisgICAgICB3aXRob3V0IGFueSBvdXRsaW5lcyBhcyBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUuCisKKworICBJSS4gTkVXIEFQSSBGVU5DVElPTlMKKworICAgIC0gYEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyJyBhbGxvd3MgeW91ICB0byBzZWxlY3QgYSBzcGVjaWFsIGZpbHRlcgorICAgICAgdG8gYmUgIGFwcGxpZWQgdG8gdGhlIGJpdG1hcHMgZ2VuZXJhdGVkICBieSBgRlRfUmVuZGVyX0dseXBoJyBpZgorICAgICAgb25lIG9mIHRoZSBGVF9SRU5ERVJfTU9ERV9MQ0QgYW5kIEZUX1JFTkRFUl9NT0RFX0xDRF9WIG1vZGVzIGhhcworICAgICAgYmVlbiAgc2VsZWN0ZWQuICBUaGlzIGZpbHRlciAgaXMgdXNlZCAgdG8gcmVkdWNlICBjb2xvciBmcmluZ2VzOworICAgICAgc2V2ZXJhbCAgc2V0dGluZ3MgYXJlICBhdmFpbGFibGUgIHRocm91Z2ggdGhlICBGVF9MQ0RfRklMVEVSX1hYWAorICAgICAgZW51bWVyYXRpb24uCisKKyAgICAgIEl0cyAgZGVjbGFyYXRpb24gICBhbmQgIGRvY3VtZW50YXRpb24gIGNhbiAgYmUgICBmb3VuZCAgaW4gIGZpbGUKKyAgICAgIGBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgnICAgKHRvICBiZSAgIGFjY2Vzc2VkICAgd2l0aCAgbWFjcm8KKyAgICAgIEZUX0xDRF9GSUxURVJfSCkuCisKKyAgICAgICpJTVBPUlRBTlQqOiAgICAgVGhpcyAgICAgIGZ1bmN0aW9uICAgICByZXR1cm5zICAgICBhbiAgICAgZXJyb3IKKyAgICAgIChGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlKSBpbiBkZWZhdWx0ICBidWlsZHMgb2YgdGhlIGxpYnJhcnkKKyAgICAgIGZvciBwYXRlbnQgcmVhc29ucy4gIFNlZSBiZWxvdy4KKworICAgIC0gYEZUX0dldF9HYXNwJyAgYWxsb3dzIHlvdSAgdG8gcXVlcnkgIHRoZSBmbGFncyAgb2YgIHRoZSBUcnVlVHlwZQorICAgICAgYGdhc3AnIHRhYmxlIGZvciAgYSBnaXZlbiBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZS4gICBUaGlzIGlzIHVzZWZ1bAorICAgICAgdG8gZHVwbGljYXRlICB0aGUgdGV4dCByZW5kZXJpbmcgIG9mIE1TIFdpbmRvd3Mgd2hlbiAgdGhlIG5hdGl2ZQorICAgICAgYnl0ZWNvZGUgIGludGVycHJldGVyIGlzICBlbmFibGVkICh3aGljaCAgaXNuJ3QgdGhlICBkZWZhdWx0IGZvcgorICAgICAgb3RoZXIgcGF0ZW50IHJlYXNvbnMpLgorCisgICAgICBJdHMgIGRlY2xhcmF0aW9uICAgYW5kICBkb2N1bWVudGF0aW9uICBjYW4gIGJlICAgZm91bmQgIGluICBmaWxlCisgICAgICBgaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCcgICAodG8gICBiZSAgIGFjY2Vzc2VkICAgd2l0aCAgIG1hY3JvCisgICAgICBGVF9HQVNQX0gpLgorCisKKyAgSUlJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBUaGUgYXV0by1oaW50ZXIgaGFzIGJlZW4gdHVuZWQgYSBsb3QgdG8gaW1wcm92ZSBpdHMgcmVzdWx0cyB3aXRoCisgICAgICBzZXJpZiBmb250cywgcmVzdWx0aW5nIGluIG11Y2ggYmV0dGVyIGZvbnQgcmVuZGVyaW5nIG9mIG1hbnkgd2ViCisgICAgICBwYWdlcy4KKworICAgIC0gVGhlIHVucGF0ZW50ZWQgIGhpbnRlciBpcyBub3cgcGFydCAgb2YgdGhlIGRlZmF1bHQgIGJ1aWxkIG9mIHRoZQorICAgICAgbGlicmFyeTsgd2UgIGhhdmUgYWRkZWQgIGNvZGUgdG8gYXV0b21hdGljYWxseSAgc3VwcG9ydCBgdHJpY2t5JworICAgICAgZm9udHMgdGhhdCBuZWVkIGl0LgorCisgICAgICBUaGlzIG1lYW5zICB0aGF0IEZyZWVUeXBlIHNob3VsZCBganVzdCB3b3JrJyAgd2l0aCBjZXJ0YWluIEFzaWFuCisgICAgICBmb250cywgbGlrZSAgTWluZ0xpVSwgd2hpY2ggY2Fubm90IHByb3Blcmx5IGJlICBsb2FkZWQgd2l0aG91dCBhCisgICAgICBieXRlY29kZSBpbnRlcnByZXRlciwgIGJ1dCB3aGljaCBmb3J0dW5hdGVseSAgZG8gbm90IHVzZSAgYW55IG9mCisgICAgICB0aGUgcGF0ZW50ZWQgIGJ5dGVjb2RlIG9wY29kZXMuICBXZSBkZXRlY3QgdGhlc2UgIGZvbnRzIGJ5IG5hbWUsCisgICAgICBzbyBwbGVhc2UgIHJlcG9ydCBhbnkgZm9udCBmaWxlICB0aGF0IGRvZXNuJ3Qgc2VlbSAgdG8gd29yayB3aXRoCisgICAgICBGcmVlVHlwZSwgYW5kICB3ZSBzaGFsbCBkbyB3aGF0IHdlICBjYW4gdG8gc3VwcG9ydCBpdCAgaW4gYSBuZXh0CisgICAgICByZWxlYXNlLgorCisgICAgICBOb3RlICB0aGF0ICB0aGUgQVBJICBoYXNuJ3QgIGNoYW5nZWQsICBzbyAgeW91IGNhbiAgc3RpbGwgIGZvcmNlCisgICAgICB1bnBhdGVudGVkIGhpbnRpbmcgd2l0aCBhIHNwZWNpYWwgcGFyYW1ldGVyIHRvIGBGVF9PcGVuX0ZhY2UnIGFzCisgICAgICB3ZWxsLiAgVGhpcyAgbWlnaHQgYmUgdXNlZnVsIGluICBzYW1lIGNhc2VzOyBmb3IgIGV4YW1wbGUsIGEgUERGCisgICAgICByZWFkZXIgbWlnaHQgcHJlc2VudCAgYSB1c2VyIG9wdGlvbiB0byBhY3RpdmF0ZSAgaXQgdG8gZGVhbCB3aXRoCisgICAgICBjZXJ0YWluICBgdHJpY2t5JyAgIGVtYmVkZGVkICBmb250cyAgd2hpY2ggICBjYW5ub3QgIGJlICBjbGVhcmx5CisgICAgICBpZGVudGlmaWVkLgorCisgICAgICBJZiB5b3UgYXJlICBhIGRldmVsb3BlciBmb3IgZW1iZWRkZWQgc3lzdGVtcywgIHlvdSBtaWdodCB3YW50IHRvCisgICAgICAqZGlzYWJsZSogIHRoZSAgIGZlYXR1cmUgIHRvICBzYXZlICBjb2RlICAgc3BhY2UgIGJ5ICB1bmRlZmluaW5nCisgICAgICBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyBpbiBmaWxlIGBmdG9wdGlvbi5oJy4KKworICAgIC0gTENELW9wdGltaXplZCByZW5kZXJpbmcgaXMgbm93ICAqZGlzYWJsZWQqIGluIGFsbCBkZWZhdWx0IGJ1aWxkcworICAgICAgb2YgIHRoZSAgbGlicmFyeSwgIG1haW5seSAgIGR1ZSAgdG8gIHBhdGVudCAgaXNzdWVzLiAgIEZvciAgbW9yZQorICAgICAgaW5mb3JtYXRpb24gc2VlOgorCisgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAwNi0wOS9tc2cwMDA2NC5odG1sCisKKyAgICAgIEEgIG5ldyAgY29uZmlndXJhdGlvbiBtYWNybyAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKKyAgICAgIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gIGBmdG9wdGlvbi5oJzsgbWFudWFsbHkgZGVmaW5lIGl0IGluIHRoaXMKKyAgICAgIGZpbGUgaWYgeW91IHdhbnQgdG8gcmUtZW5hYmxlIHRoZSBmZWF0dXJlLgorCisgICAgICBUaGUgIGNoYW5nZSBvbmx5ICBhZmZlY3RzIHRoZSAgaW1wbGVtZW50YXRpb24sIG5vdCAgdGhlIEZyZWVUeXBlCisgICAgICBBUEkuICBUaGlzIG1lYW5zIHRoYXQgY2xpZW50cyBkb24ndCBuZWVkIHRvIGJlIG1vZGlmaWVkLCBiZWNhdXNlCisgICAgICB0aGUgbGlicmFyeSBzdGlsbCBnZW5lcmF0ZXMgIExDRCBkZWNpbWF0ZWQgYml0bWFwcywgYnV0IHdpdGggdGhlCisgICAgICBhZGRlZCBjb25zdHJhaW50IHRoYXQgUj1HPUIgb24gZWFjaCB0cmlwbGV0LgorCisgICAgICBUaGUgIGRpc3BsYXllZCByZXN1bHQgIHNob3VsZCAgYmUgZXF1YWwgIHRvIG5vcm1hbCAgYW50aS1hbGlhc2VkCisgICAgICByZW5kZXJpbmcuCisKKyAgICAgIEFkZGl0aW9uYWxseSwgIGlmICAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgIGlzICBub3QKKyAgICAgIGRlZmluZWQsIHRoZSBuZXcgIGBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcicgZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAgICAgIEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUgZXJyb3IgY29kZS4KKworICAgIC0gU29tZSBjb21wdXRhdGlvbiBidWdzIGluICB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgd2VyZQorICAgICAgZm91bmQsICB3aGljaCAgYWxsb3cgdXMgIHRvICBnZXQgcmlkICBvZiAgdmVyeSAgc3VidGxlIGFuZCAgcmFyZQorICAgICAgZGlmZmVyZW5jZXMgd2UgaGFkIGV4cGVyaWVuY2VkIHdpdGggdGhlIFdpbmRvd3MgcmVuZGVyZXIuCisKKyAgICAtIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBjcm9zcy1jb21waWxlIHRoZSBsaWJyYXJ5IGVhc2lseS4gIFNlZSB0aGUKKyAgICAgIGZpbGUgYGRvY3MvSU5TVEFMTC5DUk9TUycgZm9yIGRldGFpbHMuCisKKyAgICAtIFRoZSBmaWxlIGBzcmMvYmFzZS9mdG1hYy5jJyBub3cgY29udGFpbnMgY29kZSBmb3IgTWFjIE9TIFggb25seTsKKyAgICAgIGl0cyAgZGVwcmVjYXRlZCBmdW5jdGlvbiAgYEZUX0dldEZpbGVfRnJvbV9NYWNfRm9udF9OYW1lJyBhbHdheXMKKyAgICAgIHJldHVybnMgYW4gIGVycm9yIGV2ZW4gaWYgdGhlIFF1aWNrRHJhdyAgZnJhbWV3b3JrIGlzIGF2YWlsYWJsZS4KKyAgICAgIFRoZSBwcmV2aW91cyB2ZXJzaW9uIGhhcyBiZWVuIG1vdmVkIHRvIGBidWlsZHMvbWFjL2Z0bWFjLmMnLgorCisgICAgICBTZWxlY3RpbmcgIGNvbmZpZ3VyZSBvcHRpb24gYC0td2l0aC1xdWlja2RyYXctY2FyYm9uJyAgbWFrZXMgdGhlCisgICAgICBidWlsZCBwcm9jZXNzIHVzZSB0aGUgb3JpZ2luYWwgYGZ0bWFjLmMnIGZpbGUgaW5zdGVhZCBvZiB0aGUgTWFjCisgICAgICBPUyBYLW9ubHkgdmVyc2lvbi4KKworCisgIElWLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIFZhcmlvdXMgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBmb290cHJpbnQgb3B0aW1pemF0aW9ucyBoYXZlIGJlZW4KKyAgICAgIHBlcmZvcm1lZCBvbiAgdGhlIFRydWVUeXBlIGFuZCBDRkYgZm9udCAgbG9hZGVycywgc29tZXRpbWVzIHdpdGgKKyAgICAgIHZlcnkgZHJhc3RpYyAgYmVuZWZpdHMgKGUuZy4sIHRoZSAgVHJ1ZVR5cGUgbG9hZGVyIGlzICBub3cgYWJvdXQKKyAgICAgIDI1JSBmYXN0ZXI7ICBGcmVlVHlwZSBzaG91bGQgdXNlICBsZXNzIGhlYXAgbWVtb3J5ICB1bmRlciBuZWFybHkKKyAgICAgIGFsbCBjb25kaXRpb25zKS4KKworICAgIC0gVGhlIGFudGktYWxpYXNlZCByYXN0ZXJpemVyIGhhcyBiZWVuIG9wdGltaXplZCBhbmQgaXMgbm93IDE1JSB0bworICAgICAgMjUlICBwZXJjZW50ICBmYXN0ZXIgdGhhbiAgaW4gIHByZXZpb3VzICB2ZXJzaW9ucywgZGVwZW5kaW5nICBvbgorICAgICAgY29udGVudC4KKworICAgIC0gVGhlIFR5cGUgMSBsb2FkZXIgaGFzIGJlZW4gaW1wcm92ZWQ7IGFzIGFuIGV4YW1wbGUsIGl0IG5vdyBza2lwcworICAgICAgdG9wLWxldmVsIGRpY3Rpb25hcmllcyBwcm9wZXJseS4KKworICAgIC0gQmV0dGVyIHN1cHBvcnQgZm9yIE1hYyAgZm9udHMgb24gUE9TSVggc3lzdGVtcywgcGx1cyBjb21waWxhdGlvbgorICAgICAgZml4ZXMgZm9yIE1hYyBPUyBYIG9uIHBwYzY0IHdoZXJlIGBmdG1hYy5jJyBjYW5ub3QgYmUgYnVpbHQuCisKKyAgICAtIENvbmZpZ3VyYXRpb24gIHdpdGhvdXQgYC0td2l0aC1vbGQtbWFjLWZvbnRzJyAgZG9lcyAgbm90IGluY2x1ZGUKKyAgICAgIGBmdG1hYy5jJyAodGhpcyB3YXMgdGhlIGJlaGF2aW91ciBpbiBGcmVlVHlwZSB2ZXJzaW9uIDIuMS4xMCkuCisKKyAgICAtIFRoZSBUcnVlVHlwZUdYIHZhbGlkYXRvciAoZ3h2YWxpZCkgY2hlY2tzIHRoZSBvcmRlciBvZiBnbHlwaCBJRHMKKyAgICAgIGluIHRoZSBrZXJuIHRhYmxlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMi4xIGFuZCAyLjIKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFZhcmlvdXMgaW50ZWdlciBvdmVyZmxvd3MgaGF2ZSBiZWVuIGZpeGVkLgorCisgICAgLSBQRkIgZm9udHMgd2l0aCBNYWNPUyByZXNvdXJjZSBmb3JrIHdlcmVuJ3QgIGhhbmRsZWQgY29ycmVjdGx5IG9uCisgICAgICBub24tTWFjT1MgcGxhdGZvcm1zLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMiBhbmQgMi4xLjEwCisKKyhub3QgcmVsZWFzZWQgb2ZmaWNpYWxseSkKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFZlcnRpY2FsIG1ldHJpY3MgZm9yIFNGTlQgZm9udHMgd2VyZSBpbmNvcnJlY3Qgc29tZXRpbWVzLgorCisgICAgLSBUaGUgRlRfSEFTX0tFUk5JTkcgbWFjcm8gYWx3YXlzIHJldHVybmVkIDAuCisKKyAgICAtIENGRiBPcGVuVHlwZSAgZm9udHMgZGlkbid0ICByZXR1cm4gY29ycmVjdCB2ZXJ0aWNhbCAgbWV0cmljcyBmb3IKKyAgICAgIGdseXBocyB3aXRoIG91dGxpbmVzLgorCisgICAgLSBJZiBGcmVlVHlwZSB3YXMgY29tcGlsZWQgd2l0aG91dCBoaW50ZXJzLCBhbGwgZm9udCBmb3JtYXRzIGJhc2VkCisgICAgICBvbiBQUyBvdXRsaW5lcyB3ZXJlbid0IHNjYWxlZCBjb3JyZWN0bHkuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gVmVyc2lvbiAyLjIgbm8gbG9uZ2VyIGV4cG9zZXMgaXRzIGludGVybmFscywgdGhpcyBpcywgdGhlIGhlYWRlcgorICAgICAgZmlsZXMgIGxvY2F0ZWQgaW4gIHRoZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbCcgIGRpcmVjdG9yeSBvZgorICAgICAgdGhlIHNvdXJjZSBwYWNrYWdlIGFyZSBub3QgIGNvcGllZCBhbnltb3JlIGJ5IHRoZSBgbWFrZSBpbnN0YWxsJworICAgICAgY29tbWFuZC4gIENvbnNlcXVlbnRseSwgYSBudW1iZXIgb2Ygcm9ndWUgY2xpZW50cyB3aGljaCBkaXJlY3RseQorICAgICAgYWNjZXNzICBGcmVlVHlwZSdzICBpbnRlcm5hbCAgIGZ1bmN0aW9ucyAgYW5kICBzdHJ1Y3R1cmVzICB3b24ndAorICAgICAgY29tcGlsZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKworICAgICAgV2UgcHJvdmlkZSAgcGF0Y2hlcyBmb3IgIG1vc3Qgb2YgdGhvc2UgIHJvZ3VlIGNsaWVudHMuICAgU2VlIHRoZQorICAgICAgZm9sbG93aW5nIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246CisKKyAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL3BhdGNoZXMvcm9ndWUtcGF0Y2hlcy5odG1sCisKKyAgICAgIE5vdGUgdGhhdCwgYXMgIGEgY29udmVuaWVuY2UgdG8gb3VyIFVuaXggIGRlc2t0b3AgdXNlcnMsIHZlcnNpb24KKyAgICAgIDIuMiBpcyAqYmluYXJ5KiBjb21wYXRpYmxlIHdpdGggRnJlZVR5cGUgMi4xLjcsIHdoaWNoIG1lYW5zIHRoYXQKKyAgICAgIGluc3RhbGxpbmcgdGhpcyAgcmVsZWFzZSBvbiAgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uICBzaGFsbCBub3QKKyAgICAgIGJyZWFrIGFueSB3b3JraW5nIGRlc2t0b3AuCisKKyAgICAtIEZyZWVUeXBlJ3MgYnVpbGQgIG1lY2hhbmlzbSBoYXMgYmVlbiByZWRlc2lnbmVkLiAgIFdpdGggR05VIG1ha2UKKyAgICAgIGl0ICBpcyAgbm93ICBzdWZmaWNpZW50ICBpbiAgIG1vc3QgIGNhc2VzICB0byAgZWRpdCAgdHdvICBmaWxlczoKKyAgICAgIGBtb2R1bGVzLmNmZycsICB0byAgc2VsZWN0ICAgdGhlICBsaWJyYXJ5ICBjb21wb25lbnRzLCAgYW5kICB0aGUKKyAgICAgIGNvbmZpZ3VyYXRpb24gIGZpbGUgIGBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oJyAod2hpY2gKKyAgICAgIGNhbiBiZSBjb3BpZWQgdG8gdGhlIG9iamVjdHMgZGlyZWN0b3J5KS4gIFJlbW92aW5nIHVudXNlZCBtb2R1bGUKKyAgICAgIGRpcmVjdG9yaWVzICAgdG8gICAgcHJldmVudCAgIGl0cyAgIGNvbXBpbGF0aW9uICAgIGFuZCAgIGVkaXRpbmcKKyAgICAgIGBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oJyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorCisgICAgLSBUaGUgIExJR0hUICBoaW50aW5nIGFsZ29yaXRobSAgcHJvZHVjZXMgIG1vcmUgcGxlYXNhbnQgIHJlc3VsdHMuCisgICAgICBBbHNvLCB1c2luZyB0aGUgIEZUX0xPQURfVEFSR0VUX0xJR0hUIGZsYWdzIHdpdGhpbiBGVF9Mb2FkX0dseXBoCisgICAgICBhbHdheXMgZm9yY2VzIGF1dG8taGludGluZywgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbi4gIFRoaXMgYWxsb3dzCisgICAgICB5b3UgdG8gZXhwZXJpbWVudCB3aXRoIGl0ICBldmVuIGlmIHlvdSBoYXZlIGVuYWJsZWQgdGhlIFRydWVUeXBlCisgICAgICBieXRlY29kZSBpbnRlcnByZXRlciBpbiB5b3VyIGJ1aWxkLgorCisgICAgLSBUaGUgYXV0byBoaW50ZXIgbm93IGVtcGxveXMgYSBuZXcgYWxnb3JpdGhtIGZvciBDSksgZm9udHMsIGJhc2VkCisgICAgICBvbiBBa2l0byAgSGlyYWkncyBwYXRjaC4gICBOb3RlIHRoYXQgdGhpcyAgb25seSB3b3JrcyAgZm9yIGZvbnRzCisgICAgICB3aXRoIGEgVW5pY29kZSBjaGFybWFwIGF0IHRoZSBtb21lbnQuCisKKyAgICAtIFRoZSBmb2xsb3dpbmcgY2FsbGJhY2sgZnVuY3Rpb24gIHR5cGVzIGhhdmUgY2hhbmdlZCBzbGlnaHRseSAoYnkKKyAgICAgIGFkZGluZyB0aGUgYGNvbnN0JyBrZXl3b3JkIHdoZXJlIGFwcHJvcHJpYXRlKToKKworICAgICAgICBGVF9PdXRsaW5lX01vdmVUb0Z1bmMKKyAgICAgICAgRlRfT3V0bGluZV9MaW5lVG9GdW5jCisgICAgICAgIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMKKyAgICAgICAgRlRfT3V0bGluZV9DdWJpY1RvRnVuYworICAgICAgICBGVF9TcGFuRnVuYworICAgICAgICBGVF9SYXN0ZXJfUmVuZGVyRnVuYworCisgICAgICAgIEZUX0dseXBoX1RyYW5zZm9ybUZ1bmMKKyAgICAgICAgRlRfUmVuZGVyZXJfUmVuZGVyRnVuYworICAgICAgICBGVF9SZW5kZXJlcl9UcmFuc2Zvcm1GdW5jCisKKyAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgYWZmZWN0IGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisgICAgLSBPbiBNYWNPUywgIG5ldyBBUElzIGhhdmUgIGJlZW4gYWRkZWQgYXMgcmVwbGFjZW1lbnRzICBmb3IgbGVnYWN5CisgICAgICBBUElzOiAgYEZUX05ld19GYWNlX0Zyb21fRlNSZWYnICBmb3IgIGBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYycsCisgICAgICBhbmQgICAgICAgICAgICAgIGBGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lJyAgICAgICAgICAgICAgZm9yCisgICAgICBgRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lJy4gIExlZ2FjeSBBUElzIGFyZSBzdGlsbCBhdmFpbGFibGUsIGlmCisgICAgICBGcmVlVHlwZSBpcyBidWlsdCB3aXRob3V0IGRpc2FibGluZyB0aGVtLgorCisgICAgLSBBIG5ldyAgQVBJIGBGVF9TZWxlY3RfU2l6ZScgIGhhcyBiZWVuIGFkZGVkICB0byBzZWxlY3QgIGEgYml0bWFwCisgICAgICBzdHJpa2UgIGJ5IGl0cyAgaW5kZXguICAgQ29kZSB1c2luZyAgb3RoZXIgIGZ1bmN0aW9ucyB0byAgc2VsZWN0CisgICAgICBiaXRtYXAgc3RyaWtlcyBzaG91bGQgYmUgdXBkYXRlZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworICAgIC0gQSAgbmV3IEFQSSAgYEZUX0dldF9TdWJHbHlwaF9JbmZvJyAgaGFzIGJlZW4gIGFkZGVkIHRvICByZXRyaWV2ZQorICAgICAgc3ViZ2x5cGggZGF0YS4gIFRoaXMgY2FuIGJlICB1c2VkIGJ5IHJvZ3VlIGNsaWVudHMgd2hpY2ggdXNlZCB0bworICAgICAgYWNjZXNzIHRoZSBpbnRlcm5hbCBoZWFkZXJzIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBkYXRhLgorCisgICAgLSBJbiAyLjEuMTAsIHRoZSBiZWhhdmlvdXIgb2YgYEZUX1NldF9QaXhlbF9TaXplcycgd2FzIGNoYW5nZWQgZm9yCisgICAgICBCREYvUENGIGZvbnRzLCAgYW5kIG9ubHkgIGZvciB0aGVtLiAgVGhpcyAgY2F1c2VzIGluY29uc2lzdGVuY3kuCisgICAgICBJbiB0aGlzIHJlbGVhc2UsICB3ZSB1bmRvIHRoZSBjaGFuZ2UuICBUaGUgIGludGVudCBvZiB0aGUgY2hhbmdlCisgICAgICBpbiAyLjEuMTAgIGlzIHRvIGFsbG93ICBzaXplIHNlbGVjdGlvbiB0aHJvdWdoICByZWFsIGRpbWVuc2lvbnMsCisgICAgICB3aGljaCBjYW4gbm93IGJlIGRvbmUgdGhyb3VnaCBgRlRfUmVxdWVzdF9TaXplJy4KKworICAgIC0gU29tZSBzZWN1cml0eSAgaXNzdWVzIHdlcmUgZGlzY292ZXJlZCAgYW5kIGZpeGVkIGluIHRoZSAgQ0ZGIGFuZAorICAgICAgVHlwZSAgMSBsb2FkZXIsIGNhdXNpbmcgIGNyYXNoZXMgb2YgIEZyZWVUeXBlIGJ5ICBtYWxmb3JtZWQgZm9udAorICAgICAgZmlsZXMuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlIGRvY3VtZW50YXRpb24gIGZvciBGVF9MT0FEX1RBUkdFVF9YWFggYW5kIEZUX1JFTkRFUl9NT0RFX1hYWAorICAgICAgdmFsdWVzIG5vdyBiZXR0ZXIgcmVmbGVjdHMgaXRzIHVzYWdlIGFuZCBkaWZmZXJlbmNlczogT25lIHNldCBpcworICAgICAgdXNlZCB0byBzcGVjaWZ5IHRoZSBoaW50aW5nIGFsZ29yaXRobSwgdGhlIG90aGVyIHRvIHNwZWNpZnkgIHRoZQorICAgICAgcGl4ZWwgcmVuZGVyaW5nIG1vZGUuCisKKyAgICAtIGBGVF9OZXdfRmFjZScgYW5kIGBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYycgaW4gZnRtYWMuYyBoYXZlIGJlZW4KKyAgICAgIGNoYW5nZWQgdG8gY291bnQgc3VwcG9ydGVkIHNjYWxhYmxlIGZhY2VzIChzZm50LCBMV0ZOKSBvbmx5LCBhbmQKKyAgICAgIHRvICByZXR1cm4gdGhlICBudW1iZXIgb2YgIGF2YWlsYWJsZSBmYWNlcyAgdmlhIGZhY2UtPm51bV9mYWNlcy4KKyAgICAgIFVuc3VwcG9ydGVkIGJpdG1hcCBmYWNlcyAoZmJpdCwgTkZOVCkgYXJlIGlnbm9yZWQuCisKKyAgICAtIGJ1aWxkcy91bml4L2NvbmZpZ3VyZSAgaGFzIGJlZW4gIGltcHJvdmVkIGZvciAgTWFjT1MgWC4gICBJdCBub3cKKyAgICAgIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGF2YWlsYWJsZSAgZnVuY3Rpb25zIGluIENhcmJvbiBsaWJyYXJ5LCBhbmQKKyAgICAgIHByZXBhcmUgdG8gdXNlIG5ld2VzdCAgZnVuY3Rpb25zIGJ5IGRlZmF1bHQuICBPcHRpb25zIHRvIHNwZWNpZnkKKyAgICAgIHRoZSAgZGVwZW5kZW5jaWVzIG9mICBlYWNoIENhcmJvbiAgQVBJcyAoRlNTcGVjLCAgRlNSZWYsIG9sZC9uZXcKKyAgICAgIFF1aWNrRHJhdywgQVRTKSAgYXJlIGF2YWlsYWJsZSB0b28uICBCeSBtYW51YWwgIGRpc2FibGluZyBvZiBhbGwKKyAgICAgIFF1aWNrRHJhdyAgIGZ1bmN0aW9uYWxpdHksICBGcmVlVHlwZSAgIGNhbiAgIGJlICBidWlsdCAgIHdpdGhvdXQKKyAgICAgIGBkZXByZWNhdGVkICAgZnVuY3Rpb24nICAgd2FybmluZ3MgICAgb24gICBNYWNPUyAgIDEwLjQueCwgICBidXQKKyAgICAgIEZUX0dldEZpbGVfTWFjX05hbWUgIGluICBmdG1hYy5jICB0aGVuICBpcyBjaGFuZ2VkICB0byAgYSAgZHVtbXkKKyAgICAgIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyBhbiBgdW5pbXBsZW1lbnRlZCcgZXJyb3IuICBGb3IgZGV0YWlscyBzZWUKKyAgICAgIGJ1aWxkcy9tYWMvUkVBRE1FLgorCisgICAgLSBTRk5UIGNtYXAgaGFuZGxpbmcgaGFzIGJlZW4gIGltcHJvdmVkLCBtYWlubHkgdG8gcnVuIG11Y2ggZmFzdGVyCisgICAgICB3aXRoIENKSyBmb250cy4KKworICAgIC0gQSAgIG5ldyAgZnVuY3Rpb24gICBgRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlICAgKGRlY2xhcmVkICBpbgorICAgICAgYEZUX01PRFVMRV9IJykgIGlzICBwcm92aWRlZCAgdG8gIGRldGVybWluZSB0aGUgIHN0YXR1cyAgb2YgIHRoZQorICAgICAgVHJ1ZVR5cGUgICBieXRlY29kZSAgaW50ZXJwcmV0ZXIgICBjb21waWxlZCAgaW50byAgIHRoZSAgbGlicmFyeQorICAgICAgKHBhdGVudGVkLCB1bnBhdGVudGVkLCB1bmltcGxlbWVudGVkKS4KKworICAgIC0gVmVydGljYWwgbWV0cmljcyBvZiBnbHlwaHMgYXJlICBzeW50aGVzaXplZCBpZiB0aGUgZm9udCBkb2VzIG5vdAorICAgICAgcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uLiAgWW91IGNhbiB0ZWxsIHdoZXRoZXIgIHRoZSBtZXRyaWNzIGFyZQorICAgICAgc3ludGhlc2l6ZWQgb3Igbm90IGJ5IGNoZWNraW5nIHRoZSBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgZmxhZyBvZgorICAgICAgdGhlIGZhY2UuCisKKyAgICAtIFRoZSBkZW1vIHByb2dyYW1zICBgZnR2aWV3JyBhbmQgIGBmdHN0cmluZycgaGF2ZSBiZWVuICByZXdyaXR0ZW4KKyAgICAgIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuICAgYGZ0dmlldycgaGFzIGEgbmV3IHN3aXRjaCBgLXAnIHRvIHRlc3QKKyAgICAgIEZUX05ld19NZW1vcnlfRmFjZSAoaW5zdGVhZCBvZiBGVF9OZXdfRmFjZSkuCisKKyAgICAtIEZyZWVUeXBlIG5vdyBob25vdXJzIGJpdCAxIGluIHRoZSBgaGVhZCcgdGFibGUgb2YgVHJ1ZVR5cGUgZm9udHMKKyAgICAgIChtZWFuaW5nIGBsZWZ0IHNpZGViZWFyaW5nIHBvaW50IGF0IHg9MCcpLiAgVGhpcyBoZWxwcyB3aXRoIHNvbWUKKyAgICAgIGJ1Z2d5IGZvbnRzLgorCisgICAgLSBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBBZG9iZSdzIG5ldyBgU0lORyBHbHlwaGxldCcgZm9ybWF0LiAgU2VlCisKKyAgICAgICAgaHR0cDovL3d3dy5hZG9iZS5jb20vcHJvZHVjdHMvaW5kZXNpZ24vc2luZ19nYWlqaS5odG1sCisKKyAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgLSBUaGUgYGZ0ZHVtcCcgIHByb2dyYW0gZnJvbSB0aGUgYGZ0MmRlbW9zJyBidW5kbGUgIG5vdyBzaG93cyBzb21lCisgICAgICBpbmZvcm1hdGlvbiBhYm91dCBjaGFybWFwcy4gIEl0ICBhbHNvIHN1cHBvcnRzIGEgbmV3IHN3aXRjaCBgLXYnCisgICAgICB0byBpbmNyZWFzZSB2ZXJib3NpdHkuCisKKyAgICAtIEJldHRlciBBRk0gc3VwcG9ydC4gIFRoaXMgaW5jbHVkZXMgdHJhY2sga2VybmluZyBzdXBwb3J0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMS4xMCBhbmQgMi4xLjkKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFRoZSBzaXplIGNvbXBhcmlzb24gZm9yIEJERiBhbmQgUENGIGZpbGVzIGNvdWxkIGZhaWwgc29tZXRpbWVzLgorCisgICAgLSBTb21lICBDRkYgZmlsZXMgIHdlcmUgc3RpbGwgbm90ICBsb2FkZWQgIGNvcnJlY3RseS4gICBQYXRjaCBmcm9tCisgICAgICBEZXJlayBOb29uYnVyZy4KKworICAgIC0gVGhlIHN0cm9rZXIgc3RpbGwgaGFkIHNvbWUgc2VyaW91cyBidWdzLgorCisgICAgLSBCb3JpcyAgTGV0b2NoYSAgZml4ZWQgYSAgYnVnIGluICB0aGUgIFRydWVUeXBlIGludGVycHJldGVyOiAgVGhlCisgICAgICBOUFVTSFcgaW5zdHJ1Y3Rpb24gd2Fzbid0IHNraXBwZWQgY29ycmVjdGx5IGluIElGIGNsYXVzZXMuICBTb21lCisgICAgICBmb250cyBsaWtlIGBIZWx2ZXRpY2EgNzUgQm9sZCcgZmFpbGVkLgorCisgICAgLSBBbm90aGVyICBzZXJpb3VzICBidWcgIGluICBoYW5kbGluZyAgVHJ1ZVR5cGUgaGludHMgIGNhdXNlZCBtYW55CisgICAgICBkaXN0b3J0aW9ucy4gIEl0IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjEuOCwgYW5kIGl0IGlzCisgICAgICBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXBncmFkZS4KKworICAgIC0gRnJlZVR5cGUgZGlkbid0IHByb3Blcmx5IHBhcnNlIGVtcHR5IFR5cGUgMSBnbHlwaHMuCisKKyAgICAtIEFuIHVuYm91bmQgZHluYW1pYyBidWZmZXIgZ3Jvd3RoIHdhcyBmaXhlZCBpbiB0aGUgUEZSIGxvYWRlci4KKworICAgIC0gU2V2ZXJhbCBidWdzIGhhdmUgYmVlbiBmaXhlZCBpbiB0aGUgY2FjaGUgc3ViLXN5c3RlbS4KKworICAgIC0gRnJlZVR5cGUgYmVoYXZlZCBpbmNvcnJlY3RseSB3aGVuIHJlc2l6aW5nIHR3byBkaXN0aW5jdCBidXQgdmVyeQorICAgICAgY2xvc2UgY2hhcmFjdGVyIHBpeGVsIHNpemVzIHRocm91Z2ggYEZUX1NldF9DaGFyX1NpemUnIChTYXZhbm5haAorICAgICAgYnVnICMxMjI2MykuCisKKyAgICAtIFRoZSBhdXRvLWhpbnRlciBkaWRuJ3Qgd29yayBwcm9wZXJseSBmb3IgZm9udHMgd2l0aG91dCBhIFVuaWNvZGUKKyAgICAgIGNoYXJtYXAgLS0gaXQgZXZlbiByZWZ1c2VkIHRvIGxvYWQgdGhlIGdseXBocy4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBNYW55IGZpeGVzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIGRyYXN0aWNhbGx5IHJlZHVjZSB0aGUgYW1vdW50IG9mCisgICAgICBoZWFwICAgbWVtb3J5ICAgdXNlZCAgIGJ5ICAgRnJlZVR5cGUsICAgZXNwZWNpYWxseSAgIHdoZW4gIHVzaW5nCisgICAgICBtZW1vcnktbWFwcGVkIGZvbnQgZmlsZXMgICh3aGljaCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4ICBzeXN0ZW1zCisgICAgICB3aGljaCBzdXBwb3J0IHRoZW0pLgorCisgICAgLSBUaGUgYXV0by1oaW50ZXIgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgbW9kdWxlLCBjYWxsZWQgdGhlCisgICAgICBgYXV0by1maXR0ZXInLiAgSXQgY29uc3VtZXMgIGxlc3MgbWVtb3J5ICB0aGFuIGl0cyAgcHJlZGVjZXNzb3IsCisgICAgICBhbmQgaXQgaXMgIHByZXBhcmVkIHRvIHN1cHBvcnQgbm9uLWxhdGluIHNjcmlwdHMgIGJldHRlciBpbiBuZXh0CisgICAgICByZWxlYXNlcy4KKworICAgIC0gR2VvcmdlIFdpbGxpYW1zICBjb250cmlidXRlZCBjb2RlIHRvIHJlYWQgIGtlcm5pbmcgZGF0YSBmcm9tIFBGTQorICAgICAgZmlsZXMuCisKKyAgICAtIEZyZWVUeXBlICAgbm93ICAgdXNlcyAgICB0aGUgICBUVF9OQU1FX0lEX1BSRUZFUlJFRF9GQU1JTFkgICBhbmQKKyAgICAgIFRUX05BTUVfSURfUFJFRkVSUkVEX1NVQkZBTUlMWSAgIHN0cmluZ3MgICAoaWYgICBhdmFpbGFibGUpICBmb3IKKyAgICAgIHNldHRpbmcgIGZhbWlseSAgYW5kICBzdHlsZSBpbiBTRk5UICBmb250cyAgKHBhdGNoIGZyb20gS29ybmZlbGQKKyAgICAgIEVsaXlhaHUgUGV0ZXIpLgorCisgICAgLSBBICBuZXcgIEFQSSBgRlRfU2ZudF9UYWJsZV9JbmZvJyAgKGluIEZUX1RSVUVUWVBFX1RBQkxFU19IKSAgaGFzCisgICAgICBiZWVuIGFkZGVkIHRvIHJldHJpZXZlIG5hbWUgYW5kIHNpemUgaW5mb3JtYXRpb24gb2YgU0ZOVCB0YWJsZXMuCisKKyAgICAtIEEgbmV3IEFQSSBgRlRfT3BlblR5cGVfVmFsaWRhdGUnIChpbiBGVF9PUEVOVFlQRV9WQUxJREFURV9IKSBoYXMKKyAgICAgIGJlZW4gYWRkZWQgdG8gdmFsaWRhdGUgT3BlblR5cGUgdGFibGVzICAoQkFTRSwgR0RFRiwgR1BPUywgR1NVQiwKKyAgICAgIEpTVEYpLiAgIEFmdGVyIHZhbGlkYXRpb24gIGl0IGlzICBubyBsb25nZXIgIG5lY2Vzc2FyeSB0byAgY2hlY2sKKyAgICAgIGZvciBlcnJvcnMgaW4gdGhvc2UgdGFibGVzIHdoaWxlIGFjY2Vzc2luZyB0aGVtLgorCisgICAgICBOb3RlIHRoYXQgIHRoaXMgbW9kdWxlIG1pZ2h0ICBiZSBtb3ZlZCB0byBhbm90aGVyIGxpYnJhcnkgaW4gdGhlCisgICAgICBmdXR1cmUgIHRvIGF2b2lkICBhIHRpZ2h0ICBkZXBlbmRlbmN5IGJldHdlZW4gIEZyZWVUeXBlIGFuZCAgdGhlCisgICAgICBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgorCisgICAgLSBBIG5ldyBBUEkgaW4gRlRfQklUTUFQX0ggIChgRlRfQml0bWFwX05ldycsIGBGVF9CaXRtYXBfQ29udmVydCcsCisgICAgICBgRlRfQml0bWFwX0NvcHknLCAgYEZUX0JpdG1hcF9FbWJvbGRlbicsICBgRlRfQml0bWFwX0RvbmUnKSAgaGFzCisgICAgICBiZWVuIGFkZGVkLiAgIEl0cyAgdXNlIGlzICB0byBjb252ZXJ0IGFuICBGVF9CaXRtYXAgc3RydWN0dXJlIGluCisgICAgICAxYnBwLCAyYnBwLCAgNGJwcCwgb3IgOGJwcCAgZm9ybWF0IGludG8gIGFub3RoZXIgOGJwcCBGVF9CaXRtYXAsCisgICAgICBwcm9iYWJseSB1c2luZyBhIGRpZmZlcmVudCBwaXRjaCwgYW5kIHRvIGZ1cnRoZXIgbWFuaXB1bGF0ZSBpdC4KKworICAgIC0gQSBuZXcgIEFQSSBgRlRfT3V0bGluZV9FbWJvbGRlbicgIChpbiBGVF9PVVRMSU5FX0gpIGdpdmVzICBmaW5lcgorICAgICAgY29udHJvbCBob3cgIG91dGxpbmVzIGFyZSBlbWJvbGRlZC4KKworICAgIC0gYEZUX0dseXBoU2xvdF9FbWJvbGRlbicgKGluIEZUX1NZTlRIRVNJU19IKSAgbm93IGhhbmRsZXMgYml0bWFwcworICAgICAgYWxzbyAoY29kZSBjb250cmlidXRlZCAgYnkgQ2hpYSBJIFd1KS4gIE5vdGUgdGhhdCB0aGlzICBmdW5jdGlvbgorICAgICAgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIGJldHRlciBBUEkuCisKKyAgICAtIFRoZSBtZXRob2QgIGhvdyBCREYgYW5kIFBDRiAgYml0bWFwIGZvbnRzICBhcmUgYWNjZXNzZWQgaGFzIGJlZW4KKyAgICAgIHJlZmluZWQuICAgRm9ybWVybHksICAgRlRfU2V0X1BpeGVsX1NpemVzICBhbmQgIEZUX1NldF9DaGFyX1NpemUKKyAgICAgIHdlcmUgIHN5bm9ueW1zIGluICBGcmVlVHlwZSdzICBCREYgYW5kIFBDRiBpbnRlcmZhY2UuICBUaGlzICBoYXMKKyAgICAgIGNoYW5nZWQgbm93LiAgRlRfU2V0X1BpeGVsX1NpemVzICBzaG91bGQgYmUgIHVzZWQgdG8gIHNlbGVjdCB0aGUKKyAgICAgIGFjdHVhbCAgZm9udCBkaW1lbnNpb25zICAodGhlIGBzdHJpa2UnLCAgd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGUKKyAgICAgIGBGT05UX0FTQ0VOVCcgICAgYW5kICAgIGBGT05UX0RFU0NFTlQnICAgIHByb3BlcnRpZXMpLCAgICAgd2hpbGUKKyAgICAgIEZUX1NldF9DaGFyX1NpemUgIHNlbGVjdHMgIHRoZSAgYG5vbWluYWwnIHNpemUgICh0aGUgYFBJWEVMU0laRScKKyAgICAgIHByb3BlcnR5KS4gIEluIGJvdGggZnVuY3Rpb25zLCB0aGUgd2lkdGggcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlIEJERiBkcml2ZXIgIG5vIGxvbmdlciBjb252ZXJ0cyAgYWxsIHJldHVybmVkIGJpdG1hcHMgIHdpdGggYQorICAgICAgZGVwdGggb2YgMmJwcCBvciA0YnBwIHRvIGEgZGVwdGggb2YgOGJwcC4gIFRoZSBkb2N1bWVudGF0aW9uIGhhcworICAgICAgbm90ICBtZW50aW9uZWQgIHRoaXMgIGV4cGxpY2l0bHksICBidXQgIGltcGxlbWVudG9ycyAgbWlnaHQgaGF2ZQorICAgICAgcmVsaWVkIG9uIHRoaXMgYWZ0ZXIgbG9va2luZyBpbnRvIHRoZSBzb3VyY2UgZmlsZXMuCisKKyAgICAtIEEgbmV3IG9wdGlvbiBgLS1mdHZlcnNpb24nIGhhcyBiZWVuICBhZGRlZCB0byBmcmVldHlwZS1jb25maWcgdG8KKyAgICAgIHJldHVybiB0aGUgRnJlZVR5cGUgdmVyc2lvbi4KKworICAgIC0gVGhlICBtZW1vcnkgIGRlYnVnZ2VyICBoYXMgIGJlZW4gIHVwZGF0ZWQgICB0byAgZHVtcCAgYWxsb2NhdGlvbgorICAgICAgc3RhdGlzdGljcyBvbiAgYWxsIGFsbG9jYXRpb24gIHNvdXJjZXMgaW4gdGhlIGxpYnJhcnkuICAgVGhpcyBpcworICAgICAgdXNlZnVsIHRvICBzcG90IGdyZWVkeSAgYWxsb2NhdGlvbnMgd2hlbiAgbG9hZGluZyBhbmQgcHJvY2Vzc2luZworICAgICAgZm9udHMuCisKKyAgICAtIFdlIHJlbW92ZWQgYSBodWdlIGFycmF5IG9mIGNvbnN0YW50IHBvaW50ZXJzIHRvIGNvbnN0YW50IHN0cmluZ3MKKyAgICAgIGluIHRoZSBgcHNuYW1lcycgbW9kdWxlLiAgIFRoZSBwcm9ibGVtIHdhcyB0aGF0ICBjb21waWxhdGlvbnMgaW4KKyAgICAgIFBJQyBtb2RlIChpLmUuLCAgd2hlbiBnZW5lcmF0aW5nIGEgIFVuaXggc2hhcmVkIG9iamVjdC9kbGwpICBwdXQKKyAgICAgIHRoZSBhcnJheSAgaW50byB0aGUgbm9uLXNoYXJlZCAgd3JpdGFibGUgc2VjdGlvbiBvZiAgdGhlIGxpYnJhcnkKKyAgICAgIHNpbmNlIGFic29sdXRlIHBvaW50ZXJzIGFyZSBub3QgcmVsb2NhdGFibGUgYnkgbmF0dXJlLgorCisgICAgICBUaGlzIHJlZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBieSBhcHByb3hpbWF0ZWx5IDE2S0J5dGUgcGVyCisgICAgICBwcm9jZXNzIGxpbmtlZCAgdG8gRnJlZVR5cGUuICAgV2Ugbm93IGFsc28gc3RvcmUgIHRoZSBhcnJheSBpbiBhCisgICAgICBjb21wcmVzc2VkIGZvcm0gKGFzIGEgdHJpZSkgd2hpY2ggc2F2ZXMgYWJvdXQgMjBLQnl0ZSBvZiBjb2RlIGFzCisgICAgICB3ZWxsLgorCisgICAgLSBLaXJpbGwgIFNtZWxrb3YgcHJvdmlkZWQgIHBhdGNoZXMgdG8gbWFrZSAgc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCisgICAgICBjb21waWxlIHN0YW5kLWFsb25lIGFnYWluLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMS45IGFuZCAyLjEuOAorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gVGhlIGZ1bmN0aW9uICBgRlRfR2V0X0NoYXJNYXBfSW5kZXgnIHdhcyBvbmx5IGRlY2xhcmVkLCAgd2l0aG91dAorICAgICAgYW55ICByZWFsICBjb2RlLiAgIEZvciAgY29uc2lzdGVuY3ksICBpdCAgaGFzICBiZWVuICByZW5hbWVkICB0bworICAgICAgYEZUX0dldF9DaGFybWFwX0luZGV4Jy4gICAoVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgIHRvIGltcGxlbWVudAorICAgICAgY21hcCBjYWNoZXMuKQorCisgICAgLSBgRlRfT3V0bGluZV9HZXRfQkJveCcgIHNvbWV0aW1lcyByZXR1cm5lZCAgaW5jb3JyZWN0IHZhbHVlcyAgZm9yCisgICAgICBjb25pYyBvdXRsaW5lcyAoZS5nLiwgZm9yIFRydWVUeXBlIGZvbnRzKS4KKworICAgIC0gSGFuZGxpbmcgb2YgYGJoZWQnIHRhYmxlIGhhcyBiZWVuIGZpeGVkLgorCisgICAgLSBUaGUgVHJ1ZVR5cGUgZHJpdmVyIHdpdGggZW5hYmxlZCBieXRlIGNvZGUgaW50ZXJwcmV0ZXIgc29tZXRpbWVzCisgICAgICByZXR1cm5lZCBhcnRpZmFjdHMgZHVlIHRvIGluY29ycmVjdCByb3VuZGluZy4gIFRoaXMgYnVnIGhhcyBiZWVuCisgICAgICBpbnRyb2R1Y2VkIGFmdGVyIHZlcnNpb24gMi4xLjQuCisKKyAgICAtIFRoZSBCREYgZHJpdmVyIGRyb3BwZWQgdGhlIGxhc3QgZ2x5cGggaW4gdGhlIGZvbnQuCisKKyAgICAtIFRoZSBCREYgZHJpdmVyIG5vdyB1c2VzIHRoZSBERUZBVUxUX0NIQVIgcHJvcGVydHkgKGlmIGF2YWlsYWJsZSkKKyAgICAgIHRvIHNlbGVjdCBhIGdseXBoIHNoYXBlIGZvciB0aGUgdW5kZWZpbmVkIGdseXBoLgorCisgICAgLSBUaGUgc3Ryb2tlciBmYWlsZWQgZm9yIGNsb3NlZCBvdXRsaW5lcyBhbmQgc2luZ2xlIHBvaW50cy4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBHZW9yZ2UgIFdpbGxpYW1zICAgY29udHJpYnV0ZWQgIGNvZGUgIHRvICAgaGFuZGxlICBBcHBsZSdzICBmb250CisgICAgICBkaXN0b3J0aW9uIHRlY2hub2xvZ3kgZm91bmQgaW4gR1ggZm9udHMgKGBhdmFyJywgYGN2YXInLCBgZnZhcicsCisgICAgICBhbmQgYGd2YXInIHRhYmxlczsgIHRoZSBNdWx0aXBsZSBNYXN0ZXJzICBBUEkgaGFzIGJlZW4gIHNsaWdodGx5CisgICAgICBleHRlbmRlZCB0byBjb3BlIHdpdGggdGhlIG5ldyBmdW5jdGlvbmFsaXR5KS4KKworICAgIC0gVGhlIGBGVF9HbHlwaFNsb3RSZWMnIHN0cnVjdHVyZSBoYXMgYmVlbiBleHRlbmRlZDogIFRoZSBlbGVtZW50cworICAgICAgYGxzYl9kZWx0YScgYW5kICBgcnNiX2RlbHRhJyBnaXZlIHRoZSBkaWZmZXJlbmNlICBiZXR3ZWVuIGhpbnRlZAorICAgICAgYW5kICB1bmhpbnRlZCAgbGVmdCBhbmQgcmlnaHQgIHNpZGUgYmVhcmluZ3MgIGlmIGF1dG9oaW50aW5nICBpcworICAgICAgYWN0aXZlLiAgVXNpbmcgdGhvc2UgdmFsdWVzIGNhbiBpbXByb3ZlIHRoZSBpbnRlci1sZXR0ZXIgc3BhY2luZworICAgICAgY29uc2lkZXJhYmx5LiAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiAgYEZUX0dseXBoU2xvdFJlYycgIGFuZAorICAgICAgdGhlIGBmdHN0cmluZycgZGVtbyBwcm9ncmFtIGhvdyB0byB1c2UgaXQuCisKKyAgICAtIExvYWRpbmcgVHJ1ZVR5cGUgYW5kIFR5cGUgMSBmb250cyBoYXMgYmVlbiBtYWRlIG11Y2ggZmFzdGVyLgorCisgICAgLSBUaGUgc3Ryb2tlciBpcyAgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbCAoYnV0IHRoZSAgY2FjaGUgc3Vic3lzdGVtCisgICAgICBzdGlsbCBpcykuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gQSBuZXcgIGRvY3VtZW50YXRpb24gZmlsZSAgYGZvcm1hdHMudHh0JyBkZXNjcmliZXMgdmFyaW91cyAgZm9udAorICAgICAgZm9ybWF0cyBzdXBwb3J0ZWQgKGFuZCBub3Qgc3VwcG9ydGVkKSBieSBGcmVlVHlwZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjEuOCBhbmQgMi4xLjcKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFRoZSBuYXRpdmUgIFRydWVUeXBlIGhpbnRlciBjb250YWluZWQgc29tZSAgYnVncyB3aGljaCBwcmV2ZW50ZWQKKyAgICAgIHNvbWUgZm9udHMgdG8gYmUgcmVuZGVyZWQgY29ycmVjdGx5LCBtb3N0IG5vdGFibHkgTGVnZW5kdW0ub3RmLgorCisgICAgLSBUaGUgUG9zdFNjcmlwdCBoaW50ZXIgbm93IHByb2R1Y2VzIGltcHJvdmVkIHJlc3VsdHMuCisKKyAgICAtIFRoZSAgbGluZWFyIGFkdmFuY2UgIHdpZHRoICBhbmQgaGVpZ2h0ICB2YWx1ZXMgd2VyZSAgaW5jb3JyZWN0bHkKKyAgICAgIHJvdW5kZWQsICBtYWtpbmcgIHRoZW0gdmlydHVhbGx5ICB1bnVzYWJsZSAgaWYgIG5vdCBsb2FkZWQgIHdpdGgKKyAgICAgIEZUX0xPQURfTElORUFSX0RFU0lHTi4KKworICAgIC0gSW5kZXhpbmcgQ0lELWtleWVkIENGRiBmb250cyBpcyAgbm93IHdvcmtpbmc6IFRoZSBnbHlwaCBpbmRleCBpcworICAgICAgY29ycmVjdGx5ICB0cmVhdGVkIGFzIGEgIENJRCwgc2ltaWxhciAgdG8gRnJlZVR5cGUncyAgQ0lEIGRyaXZlcgorICAgICAgbW9kdWxlLiAgTm90ZSB0aGF0IENJRCBDTWFwIHN1cHBvcnQgaXMgc3RpbGwgbWlzc2luZy4KKworICAgIC0gVGhlIEZUX0ZBQ0VfRkxBR1NfR0xZUEhfTkFNRVMgZmxhZyBpcyBub3cgIHNldCBjb3JyZWN0bHkgZm9yIGFsbAorICAgICAgZm9udCBmb3JtYXRzLgorCisgICAgLSBTb21lIHN1YnNldHRlZCBUeXBlIDEgIGZvbnRzIHdlcmVuJ3QgcGFyc2VkIGNvcnJlY3RseS4gIFRoaXMgYnVnCisgICAgICBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIDIuMS43LiAgSW4gc3VtbWFyeSwgdGhlIFR5cGUgMSBwYXJzZXIgaGFzCisgICAgICBiZWNvbWUgbW9yZSByb2J1c3QuCisKKyAgICAtIE5vbi1kZWNpbWFsIG51bWJlcnMgd2VyZW4ndCBwYXJzZWQgY29ycmVjdGx5IGluIFBTIGZvbnRzLgorCisgICAgLSBUaGUgV2luRk5UIGRyaXZlciBub3cgY29ycmVjdGx5IHJlcG9ydHMgRlRfRU5DT0RJTkdfTk9ORSBmb3IgYWxsCisgICAgICBidXQgb25lIGVuY29kaW5nLiAgVXNlICB0aGUgbmV3IEZUX1dpbkZOVF9JRF9YWFggdmFsdWVzIHRvZ2V0aGVyCisgICAgICB3aXRoIGBGVF9HZXRfV2luRk5UX0hlYWRlcicgdG8gZ2V0IHRoZSBXaW5GTlQgY2hhcnNldCBJRC4KKworICAgIC0gVGhlIGRlc2NlbmRlciBtZXRyaWNzIChmYWNlLT5zaXplLT5tZXRyaWNzLmRlc2NlbmRlcikgZm9yIFdpbkZOVAorICAgICAgYml0bWFwIGZvbnRzIGhhZCB0aGUgd3Jvbmcgc2lnbi4KKworICAgIC0gVGhlIChlbXVsYXRlZCkgYHNlYWMnIHN1cHBvcnQgZm9yIENGRiBmb250cyB3YXMgYnJva2VuLgorCisgICAgLSBUaGUgYGZsZXgnIG9wZXJhdG9yIGRpZG4ndCB3b3JrIGZvciBDRkYgZm9udHMuCisKKyAgICAtIFBTIGdseXBocyAgd2hpY2ggIHVzZSAgdGhlICAgYGhpbnRtYXNrJyAgb3BlcmF0b3IgIGhhdmVuJ3QgIGJlZW4KKyAgICAgIHJlbmRlcmVkIGNvcnJlY3RseSBpbiBzb21lIGNhc2VzLgorCisgICAgLSBNZXRyaWNzIGZvciBCREYgYW5kIFBDRiBiaXRtYXAgZm9udCBmb3JtYXRzIGhhdmUgYmVlbiBmaXhlZC4KKworICAgIC0gQXV0b2hpbnRpbmcgIGlzIG5vdyAgZGlzYWJsZWQgZm9yICBnbHlwaHMgIHdoaWNoICBhcmUgdmVydGljYWxseQorICAgICAgZGlzdG9ydGVkICBvciBtaXJyb3JlZCAgKHVzaW5nIGEgIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCkuICAgVGhpcworICAgICAgZml4ZXMgYSBidWcgd2hpY2ggcHJvZHVjZWQgemVyby1oZWlnaHQgZ2x5cGhzLgorCisgICAgLSBUaGUgICBgZnJlZXR5cGUtY29uZmlnJyAgIHNjcmlwdCAgIG5vdyAgaGFuZGxlcyAgIC0tcHJlZml4ICAgYW5kCisgICAgICAtLWV4ZWMtcHJlZml4IGNvcnJlY3RseTsgaXQgYWxzbyAgcmV0dXJucyB0aGUgcHJvcGVyIC0tcnBhdGggKG9yCisgICAgICAtUikgdmFsdWUgaWYgRnJlZVR5cGUgaGFzIGJlZW4gYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBCb3RoICBQQ0YgIGFuZCBCREYgIGRyaXZlcnMgIG5vdyAgaGFuZGxlICB0aGUgU0VUV0lEVEhfTkFNRSAgYW5kCisgICAgICBBRERfU1RZTEVfTkFNRSAgICBwcm9wZXJ0aWVzLiAgICAgVmFsdWVzICAgIGFyZSAgIGFwcGVuZGVkICAgIHRvCisgICAgICBmYWNlLT5zdHlsZV9uYW1lOyBleGFtcGxlOiBgQm9sZCBTZW1pQ29uZGVuc2VkJy4KKworICAgIC0gVGhlIFBDRiBkcml2ZXIgbm93IGhhbmRsZXMgYml0bWFwICBmb250cyBjb21wcmVzc2VkIHdpdGggdGhlIExaVworICAgICAgYWxnb3JpdGhtIChleHRlbnNpb24gLnBjZi5aLCBjb21wcmVzc2VkIHdpdGggYGNvbXByZXNzJykuCisKKyAgICAtIEEgIG5ldyAgQVBJICAgZnVuY3Rpb24gIGBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCcgIChkZWNsYXJlZCAgaW4KKyAgICAgIGB0dHRhYmxlcy5oJykgIGlzICBhdmFpbGFibGUgIHRvICAgZ2V0ICB0aGUgIGxhbmd1YWdlICBJRCAgb2YgIGEKKyAgICAgIFRydWVUeXBlL1NGTlQgY21hcC4KKworICAgIC0gVGhlIGhleGFkZWNpbWFsIGZvcm1hdCBvZiAgZGF0YSBhZnRlciB0aGUgYFN0YXJ0RGF0YScgY29tbWFuZCBpbgorICAgICAgQ0lELWtleWVkIFR5cGUgMSBmb250cyBpcyBub3cgc3VwcG9ydGVkLiAgV2hpbGUgdGhpcyBjYW4ndCBvY2N1cgorICAgICAgaW4gIGZpbGUtYmFzZWQgICBmb250cywgIGl0ICBjYW4gICBoYXBwZW4gIGluICBkb2N1bWVudC1lbWJlZGRlZAorICAgICAgcmVzb3VyY2VzIG9mIFBvc3RTY3JpcHQgZG9jdW1lbnRzLgorCisgICAgLSBFbWJlZGRlZCBiaXRtYXBzIGluIFNGTlQtYmFzZWQgQ0ZGIGZvbnRzIGFyZSBub3cgc3VwcG9ydGVkLgorCisgICAgLSBBIHNpbXBsZSAgQVBJIGlzICBub3cgYXZhaWxhYmxlICB0byBjb250cm9sICBGcmVlVHlwZSdzICB0cmFjaW5nCisgICAgICBtZWNoYW5pc20gaWYgY29tcGlsZWQgIHdpdGggRlRfREVCVUdfTEVWRUxfVFJBQ0UuICAgU2VlIHRoZSBmaWxlCisgICAgICBgZnRkZWJ1Zy5oJyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgLSBZQU1BVE8gTWFzYXRha2UgY29udHJpYnV0ZWQgaW1wcm92ZWQgIGhhbmRsaW5nIG9mIE1hY09TIHJlc291cmNlCisgICAgICBmb3JrcyBvbiBub24tTWFjT1MgcGxhdGZvcm1zIChmb3IgZXhhbXBsZSwgTGludXggY2FuIG1vdW50IE1hY09TCisgICAgICBmaWxlIHN5c3RlbXMpLgorCisgICAgLSBTdXBwb3J0IGZvciBNYWNPUyBoYXMgYmVlbiBpbXByb3ZlZDsgdGhlcmUgaXMgbm93IGEgbmV3IGZ1bmN0aW9uCisgICAgICBgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMnICBzaW1pbGFyIHRvIGBGVF9OZXdfRmFjZScgIGV4Y2VwdCB0aGF0CisgICAgICBpdCBhY2NlcHRzIGFuIEZTU3BlYyBpbnN0ZWFkIG9mIGEgcGF0aC4KKworICAgIC0gVGhlIGNhY2hlIHN1Yi1zeXN0ZW0gaGFzIGJlZW4gcmV3cml0dGVuLgorCisgICAgICAtIFRoZXJlIGlzIG5vdyBzdXBwb3J0IGZvciBkZWluc3RhbGxhdGlvbiBvZiBmYWNlcy4KKworICAgICAgLSBBIG5ldyAgQVBJIGZ1bmN0aW9uIGBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQnICBoYXMgYmVlbiBhZGRlZAorICAgICAgICB0byAgZGVsZXRlICBhbGwgIGBpZGxlJyAgbm9kZXMgIHRoYXQgIGNvcnJlc3BvbmQgIHRvICBhICBnaXZlbgorICAgICAgICBGVENfRmFjZUlELiAgQWxsIGBsb2NrZWQnIG5vZGVzICAoaS5lLiwgdGhvc2Ugd2l0aCBhIHJlZmVyZW5jZQorICAgICAgICBjb3VudCA+IDApLCB3aWxsIGJlIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlbSBmcm9tIGFwcGVhcmluZyBpbgorICAgICAgICBmdXJ0aGVyICBsb29rdXBzICh0aGV5ICB3aWxsICBiZSBjbGVhbmVkICBub3JtYWxseSB3aGVuICB0aGVpcgorICAgICAgICByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwKS4KKworICAgICAgLSBUaGVyZSAgaXMgIG5vdyAgc3VwcG9ydCAgZm9yIHBvaW50ICBzY2FsaW5nICAoaS5lLiwgIHByb3ZpZGluZworICAgICAgICBjaGFyYWN0ZXIgc2l6ZXMgaW4gcG9pbnRzICsgZHBpcywgaW5zdGVhZCBvZiBwaXhlbHMpLgorCisgICAgICAtIFRocmVlIGFic3RyYWN0IGNhY2hlIGNsYXNzZXMgYXJlIG5vdyBhdmFpbGFibGU6CisKKyAgICAgICAgICBGVENfR0NhY2hlOiAgVXNlZCB0byBzdG9yZSAgb25lIGdseXBoICBpdGVtIHBlciAgY2FjaGUgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhYmlsaXR5IHRvIGdyb3VwIGNvbW1vbiBhdHRyaWJ1dGVzIGludG8KKyAgICAgICAgICAgICAgICAgICAgICBgZmFtaWxpZXMnLiAgICAgIFRoaXMgICAgcmVwbGFjZXMgICAgIHRoZSAgICBvbGQKKyAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhDYWNoZSBjbGFzcy4KKworICAgICAgICAgIEZUQ19JQ2FjaGU6IFVzZWQgdG8gc3RvcmUgb25lIEZUX0dseXBoIHBlciBjYWNoZSBub2RlLiAgVGhpcworICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZHMgIEZUQ19HQ2FjaGUuICBGYW1pbHkgIGRlZmluaXRpb24sIGZhbWlseQorICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24sIGFuZCAgZ2x5cGggbG9hZGluZyBhcmUgIGhvd2V2ZXIgbGVmdAorICAgICAgICAgICAgICAgICAgICAgIHRvIHN1Yi1jbGFzc2VzLgorCisgICAgICAgICAgRlRDX1NDYWNoZTogVXNlZCB0byAgc3RvcmUgdXAgdG8gMTYgc21hbGwgIGJpdG1hcHMgcGVyIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgbm9kZS4gICAgVGhpcyAgICBleHRlbmRzICAgRlRDX0dDYWNoZS4gICAgRmFtaWx5CisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiwgZmFtaWx5ICBjb21wYXJpc29uIGFuZCBnbHlwaCBsb2FkaW5nCisgICAgICAgICAgICAgICAgICAgICAgYXJlIGhvd2V2ZXIgbGVmdCB0byBzdWItY2xhc3Nlcy4KKworICAgICAgLSBUaGUgZmlsZSBgc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMnIGltcGxlbWVudHM6CisKKyAgICAgICAgICBGVENfSW1hZ2VDYWNoZTogRXh0ZW5kcyAgICBGVENfSUNhY2hlOyAgIGltcGxlbWVudHMgICBmYW1pbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMgYW5kIGdseXBoIGxvYWRpbmcgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkIEFQSS4KKworICAgICAgICAgIEZUQ19TQml0Q2FjaGU6IEV4dGVuZHMgICAgRlRDX1NDYWNoZSwgICAgaW1wbGVtZW50cyAgIGZhbWlseQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zIGFuZCBnbHlwaCAgbG9hZGluZyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCBBUEkKKworICAgICAgICBDbGllbnQgIGFwcGxpY2F0aW9ucyAgc2hvdWxkICBiZSAgYWJsZSB0byAgZXh0ZW5kICBGVENfR0NhY2hlLAorICAgICAgICBGVENfSUNhY2hlLCBvciBGVENfU0NhY2hlIG11Y2ggbW9yZSBlYXNpbHkgKGkuZS4sIGxlc3MgY29kZSB0bworICAgICAgICB3cml0ZSwgYW5kICBsZXNzIGNhbGxiYWNrcykuICBGb3IgZXhhbXBsZSwgIG9uZSBjb3VsZCBlbnZpc2lvbgorICAgICAgICBjYWNoZXMgIHRoYXQgYXJlICBjYXBhYmxlIG9mICBzdG9yaW5nICB0cmFuc2Zvcm1lZCAob2JsaXF1ZWQpLAorICAgICAgICBzdHJva2VkLCAgIGVtYm9sZGVuZWQsICAgb3IgICBjb2xvcmVkICAgZ2x5cGggICBpbWFnZXMuICAgIFVzZQorICAgICAgICBgZnRjYmFzaWMuYycgYXMgYW4gZXhhbXBsZS4KKworICAgICAgLSBBbGwgcHVibGljICBBUElzIGFyZSBub3cgIGluIGBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaCcsICh0bworICAgICAgICBiZSAgICBhY2Nlc3NlZCAgIGFzICAgIGBGVF9DQUNIRV9IJykuICAgICBUaGUgICBjb250ZW50cyAgICBvZgorICAgICAgICBgaW5jbHVkZS9mcmVldHlwZS9jYWNoZS8nIGlzIG9ubHkgIG5lZWRlZCBieSBhcHBsaWNhdGlvbnMgdGhhdAorICAgICAgICB3aXNoIHRvIGltcGxlbWVudCB0aGVpciBvd24gY2FjaGVzLgorCisgICAgICAtIFRoZXJlIHdlcmUgc29tZSBtYWpvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgdGhyb3VnaCB0aGUgdXNlCisgICAgICAgIG9mICB2YXJpb3VzIHByb2dyYW1taW5nICB0cmlja3MuICAgQ2FjaGUgaGl0cyAgYXJlICB1cCB0byAgNzAlCisgICAgICAgIGZhc3RlciB0aGFuIGluIHRoZSBvbGQgY29kZS4KKworICAgICAgLSBUaGUgIEZUQ19DTWFwQ2FjaGUgaGFzICBiZWVuIHNpbXBsaWZpZWQuICBDaGFybWFwcyBjYW4gb25seSBiZQorICAgICAgICBhY2Nlc3NlZCBieSAgaW5kZXggcmlnaHQgbm93LiAgVGhlcmUgIGlzIGFsc28gYSAgbmV3IEFQSSBuYW1lZAorICAgICAgICBgRlRfQ2hhcm1hcF9HZXRJbmRleCcgZm9yIHRoaXMgcHVycG9zZS4KKworICAgICAgLSBUaGUgIGRlbW8gcHJvZ3JhbXMgIGhhdmUgYmVlbiAgdXBkYXRlZCB0byAgdGhlIG5ldyAgY29kZS4gIFRoZQorICAgICAgICBwcmV2aW91cyB2ZXJzaW9ucyB3aWxsIG5vdCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgb25lLgorCisgICAgICAtIFVzaW5nICBhbiBpbnZhbGlkIGZhY2UgIGluZGV4IGluIEZUX09wZW5fRmFjZSBhbmQgZnJpZW5kcyAgbm93CisgICAgICAgIGNhdXNlcyBhbiBlcnJvciBldmVuIGlmIHRoZSBmb250IGNvbnRhaW5zIGEgc2luZ2xlIGZhY2Ugb25seS4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBXb2xmZ2FuZyBEb21yw7ZzZSBjb250cmlidXRlZCBzdXBwb3J0IGZpbGVzIGZvciBidWlsZGluZyBGcmVlVHlwZQorICAgICAgb24gdGhlIEF0YXJpIHVzaW5nIHRoZSBQdXJlQyBjb21waWxlci4gIE5vdGUgdGhhdCB0aGUgQXRhcmkgaXMgYQorICAgICAgMTZiaXQgcGxhdGZvcm0uCisKKyAgICAtIFZpdGFsaXkgUGFzdGVybmFrIGNvbnRyaWJ1dGVkIHByb2plY3QgZmlsZXMgZm9yIFZTLk5FVCAyMDAzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMS43IGFuZCAyLjEuNgorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gVXBkYXRlZCAgdG8gbmV3ZXN0ICBsaWJ0b29sICB2ZXJzaW9uLCBmaXhpbmcgIGJ1aWxkIHByb2JsZW1zICBvbgorICAgICAgdmFyaW91cyBwbGF0Zm9ybXMuCisKKyAgICAtIE9uICBVbml4ICBwbGF0Zm9ybXMsICBgbWFrZSAgaW5zdGFsbCcgZGlkbid0ICBjb3B5ICB0aGUgIGNvcnJlY3QKKyAgICAgIGBmdGNvbmZpZy5oJyBmaWxlLgorCisgIE5vdGUgdGhhdCB2ZXJzaW9uIDIuMS43ICBjb250YWlucyB0aGUgc2FtZSBsaWJyYXJ5ICBDIHNvdXJjZSBjb2RlIGFzCisgIHZlcnNpb24gMi4xLjYuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4xLjYgYW5kIDIuMS41CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBUaGUgUEZSICBmb250IGRyaXZlciBkaWRuJ3QgIGxvYWQga2VybmluZyB0YWJsZXMgIGNvcnJlY3RseSwgYW5kCisgICAgICB0aGUgZnVuY3Rpb25zIGluIEZUX1BGUl9IIGRpZG4ndCB3b3JrIGF0IGFsbC4KKworICAgIC0gVHlwZSAxIGZvbnQgIGZpbGVzIGluICBiaW5hcnkgZm9ybWF0ICAoUEZCKSB3aXRoICBhbiBlbmQtb2YtZmlsZQorICAgICAgaW5kaWNhdG9yIHdlcmVuJ3QgYWNjZXB0ZWQgYnkgdGhlIEZyZWVUeXBlIGVuZ2luZS4KKworICAgIC0gRm9udHMgd2hpY2ggY29udGFpbiAvUGFpbnRUeXBlICBhbmQgL1N0cm9rZVdpZHRoIG5vIGxvbmdlciBjYXVzZQorICAgICAgYSBzZWdmYXVsdC4gIFRoaXMgYnVnIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjEuNS4KKworICAgIC0gRm9udHMgIGxvYWRlZCAgd2l0aCAgIEZUX0xPQURfUkVOREVSICBubyAgbG9uZ2VyICBjYXVzZSAgc3RyYW5nZQorICAgICAgcmVzdWx0cy4gIFRoaXMgYnVnIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjEuNS4KKworICAgIC0gU29tZSAgV2luZG93cyAgIChiaXRtYXApICBGTlQvRk9OICBmaWxlcyAgIGNvdWxkbid0ICBiZSAgaGFuZGxlZAorICAgICAgY29ycmVjdGx5LgorCisKKyAgSUkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIFRoZSBpbnRlcm5hbCAgbW9kdWxlIEFQSSAgaGFzIGJlZW4gaGVhdmlseSAgY2hhbmdlZCBpbiAgZmF2b3Igb2YKKyAgICAgIG1hc3NpdmUgc2ltcGxpZmljYXRpb25zIHdpdGhpbiB0aGUgZm9udCBlbmdpbmUuICBUaGlzIGFsc28gbWVhbnMKKyAgICAgIHRoYXQgYXV0aG9ycyBvZiB0aGlyZC1wYXJ0eSBtb2R1bGVzIG11c3QgYWRhcHQgdGhlaXIgY29kZSB0byB0aGUKKyAgICAgIG5ldyBzY2hlbWUuCisKKyAgICAgIE5PVEU6ICBUSEUgTkVXIFNDSEVNRSBJUyBOT1QgQ09NUExFVEVEIFlFVC4gIFBMRUFTRSBXQUlUIFVOVElMIEEKKyAgICAgIEZJTkFMIEFOTk9VTkNFTUVOVCEKKworICAgIC0gVGhlIFBvc3RTY3JpcHQgIHBhcnNlciBoYXMgYmVlbiBlbmhhbmNlZCB0byAgaGFuZGxlIGNvbW1lbnRzIGFuZAorICAgICAgc3RyaW5ncyAgIGNvcnJlY3RseS4gICBBZGRpdGlvbmFsbHksICAgbW9yZSAgc3ludGF4ICAgZm9ybXMgIGFyZQorICAgICAgcmVjb2duaXplZC4KKworICAgIC0gQWRkZWQgdGhlICBvcHRpb25hbCB1bnBhdGVudGVkIGhpbnRpbmcgc3lzdGVtICBmb3IgVHJ1ZVR5cGUuICBJdAorICAgICAgYWxsb3dzICB0eXBlZmFjZXMgd2hpY2ggIG5lZWQgaGludGluZyAgdG8gcHJvZHVjZSAgY29ycmVjdCBnbHlwaAorICAgICAgZm9ybXMgKGUuZy4sIENoaW5lc2UgdHlwZWZhY2VzICBmcm9tIER5bmFsYWIpIHRvIHdvcmsgYWNjZXB0YWJseQorICAgICAgd2l0aG91dCBpbmZyaW5naW5nIEFwcGxlIHBhdGVudHMuICAgVGhpcyBzeXN0ZW0gaXMgY29tcGlsZWQgb25seQorICAgICAgaWYgIFRUX0NPTkZJR19PUFRJT05fQ09NUElMRV9VTlBBVEVOVEVEX0hJTlRJTkcgIGlzICBkZWZpbmVkICBpbgorICAgICAgZnRvcHRpb24uaCAoYWN0aXZhdGVkIGJ5IGRlZmF1bHQpLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIFRoZXJlICBpcyBub3cgIGEgZ3VhcmQgIGluIHRoZSAgcHVibGljIGhlYWRlciAgZmlsZXMgIHRvIHByb3RlY3QKKyAgICAgIGFnYWluc3QgaW5jbHVzaW9uIG9mIGZyZWV0eXBlLmggZnJvbSBGcmVlVHlwZSAxLgorCisgICAgLSBEaXJlY3QgaW5jbHVzaW9uIG9mIGZyZWV0eXBlLmggIGFuZCBvdGhlciBwdWJsaWMgaGVhZGVyIGZpbGVzIG5vCisgICAgICBsb25nZXIgd29ya3MuICBZb3UgaGF2ZSB0byB1c2UgdGhlIGRvY3VtZW50ZWQgc2NoZW1lCisKKyAgICAgICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisgICAgICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworICAgICAgdG8gbG9hZCBmcmVldHlwZS5oIHdpdGggIGEgc3ltYm9saWMgbmFtZS4gIFRoaXMgcHJvdGVjdHMgYWdhaW5zdAorICAgICAgcmVuYW1pbmcgIG9mIHB1YmxpYyAgaGVhZGVyICBmaWxlcyAod2hpY2ggIHNob3VsZG4ndCBoYXBwZW4gIGJ1dAorICAgICAgYWN0dWFsbHkgIGhhcywgYXZvaWRpbmcgdHdvICBwdWJsaWMgaGVhZGVyICBmaWxlcyB3aXRoICB0aGUgc2FtZQorICAgICAgbmFtZSkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4xLjUgYW5kIDIuMS40CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBQYXJzaW5nIHRoZSAvQ0lERm9udE5hbWUgZmllbGQgIG5vdyByZW1vdmVzIHRoZSBsZWFkaW5nIHNsYXNoIHRvCisgICAgICBiZSBpbiBzeW5jIHdpdGggb3RoZXIgZm9udCBkcml2ZXJzLgorCisgICAgLSBnemlwIHN1cHBvcnQgd2FzIGJ1Z2d5LiAgU29tZSBmb250cyBjb3VsZCBub3QgYmUgcmVhZC4KKworICAgIC0gRm9udHMgd2hpY2ggIGhhdmUgbmVzdGVkIHN1YmdseXBocyAgbW9yZSB0aGFuIG9uZSBsZXZlbCAgZGVlcCBubworICAgICAgbG9uZ2VyIGNhdXNlIGEgc2VnZmF1bHQuCisKKyAgICAtIENyZWF0aW9uIG9mIHN5bnRoZXRpYyAgY21hcHMgZm9yIGZvbnRzIGluIENGRiAgZm9ybWF0IHdhcyBicm9rZW4KKyAgICAgIHBhcnRpYWxseS4KKworICAgIC0gTnVtZXJpYyAgZm9udCAgZGljdGlvbmFyeSBlbnRyaWVzICBmb3IgIHN5bnRoZXRpYyAgZm9udHMgYXJlICBubworICAgICAgbG9uZ2VyIG92ZXJ3cml0dGVuLgorCisgICAgLSBUaGUgZm9udCBtYXRyaXggIHdhc24ndCBhcHBsaWVkIHRvIHRoZSBhZHZhbmNlICB3aWR0aCBmb3IgVHlwZTEsCisgICAgICBDSUQsIGFuZCAgQ0ZGIGZvbnRzLiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgIHdoZW4gbG9hZGluZyBjZXJ0YWluCisgICAgICBzeW50aGV0aWMgVHlwZSAxIGZvbnRzIGxpa2UgYEhlbHZldGljYSBOYXJyb3cnLgorCisgICAgLSBUaGUgdGVzdCAgZm9yIHRoZSBjaGFyc2V0IHJlZ2lzdHJ5ICBpbiBCREYgYW5kIFBDRiAgZm9udHMgaXMgbm93CisgICAgICBjYXNlLWluc2Vuc2l0aXZlLgorCisgICAgLSBGVF9WZWN0b3JfUm90YXRlICBzb21ldGltZXMgIHJldHVybmVkICAgc3RyYW5nZSAgdmFsdWVzICBkdWUgIHRvCisgICAgICByb3VuZGluZyBlcnJvcnMuCisKKyAgICAtIFRoZSAgUENGICBkcml2ZXIgIG5vdyAgcmV0dXJucyAgdGhlICBjb3JyZWN0ICBudW1iZXIgIG9mICBnbHlwaHMKKyAgICAgIChpbmNsdWRpbmcgYW4gYXJ0aWZpY2lhbCBgbm90ZGVmJyBnbHlwaCBhdCBpbmRleCAwKS4KKworICAgIC0gRnJlZVR5cGUgbm93ICBzdXBwb3J0cyBidWdneSBDTWFwcyAgd2hpY2ggYXJlIGNvbnRhaW5lZCAgaW4gbWFueQorICAgICAgQ0pLIGZvbnRzIGZyb20gRHluYWxhYi4KKworICAgIC0gT3BlbmluZyAgYW4gaW52YWxpZCAgZm9udCAgb24gYSAgTWFjICBjYXVzZWQgYSAgc2VnZmF1bHQgZHVlICB0bworICAgICAgZG91YmxlLWZyZWVpbmcgbWVtb3J5LgorCisgICAgLSBCREYgIGZvbnRzICB3aXRoICBtb3JlICAgdGhhbiAgMzI3NjggIGdseXBocyAgd2VyZW4ndCAgc3VwcG9ydGVkCisgICAgICBwcm9wZXJseS4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBBY2Nlc3NpbmcgYml0bWFwIGZvbnQgZm9ybWF0cyBoYXMgYmVlbiBzeW5jaHJvbml6ZWQuICBUbyBkbyB0aGF0CisgICAgICB0aGUgRlRfQml0bWFwX1NpemUgIHN0cnVjdHVyZSBoYXMgIGJlZW4gZXh0ZW5kZWQgdG8gIGNvbnRhaW4gbmV3CisgICAgICBmaWVsZHMgYHNpemUnLCBgeF9wcGVtJywgYW5kIGB5X3BwZW0nLgorCisgICAgLSBUaGUgRk5UIGRyaXZlciBub3cgcmV0dXJucyBtdWx0aXBsZSBmYWNlcywgbm90IG11bHRpcGxlIHN0cmlrZXMuCisKKyAgICAtIFRoZSBgcHNuYW1lcycgIG1vZHVsZSBoYXMgYmVlbiAgdXBkYXRlZCB0byB0aGUgQWRvYmUgIEdseXBoIExpc3QKKyAgICAgIHZlcnNpb24gMi4wLgorCisgICAgLSBUaGUgYHBzbmFtZXMnIG1vZHVsZSBub3cgdW5kZXJzdGFuZHMgYHVYWFhYW1hbWF1dJyBnbHlwaCBuYW1lcy4KKworICAgIC0gVGhlIGFsZ29yaXRobSBmb3IgZ3Vlc3NpbmcgdGhlIGZvbnQgc3R5bGUgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAgICAtIEZvciBmb250cyBpbiBTRk5UIGZvcm1hdCwgcm9vdC0+aGVpZ2h0IGlzIG5vIGxvbmdlciBpbmNyZWFzZWQgaWYKKyAgICAgIHRoZSBsaW5lIGdhcCAgaXMgemVyby4gIFRoZXJlIGV4aXN0IGZvbnRzICAoY29udGFpbmluZyBlLmcuIGZvcm0KKyAgICAgIGRyYXdpbmcgIGNoYXJhY3RlcnMpIHdoaWNoICBpbnRlbnRpb25hbGx5IGhhdmUgIGEgemVybyAgbGluZSBnYXAKKyAgICAgIHZhbHVlLgorCisgICAgLSBmdF9nbHlwaF9iYm94X3h4eCAgZmxhZ3MgICBhcmUgIG5vdyAgZGVwcmVjYXRlZCAgIGluICBmYXZvdXIgIG9mCisgICAgICBGVF9HTFlQSF9CQk9YX1hYWC4KKworICAgIC0gZnRfbW9kdWxlX3h4eCAgIGZsYWdzICAgYXJlICAgbm93ICAgZGVwcmVjYXRlZCAgaW4gICBmYXZvdXIgICBvZgorICAgICAgRlRfTU9EVUxFX1hYWC4KKworICAgIC0gRlRfRU5DT0RJTkdfTVNfe1NKSVMsR0IyMzEyLEJJRzUsV0FOU1VORyxKT0hBQn0gICAgICBhcmUgICAgIG5vdworICAgICAgZGVwcmVjYXRlZCAgICAgICAgICAgICAgIGluICAgICAgICAgICAgICAgZmF2b3VyICAgICAgICAgICAgICBvZgorICAgICAgRlRfRU5DT0RJTkdfe1NKSVMsR0IyMzEyLEdJQjUsV0FOU09ORyxKT0hBQn0gIC0tIHRob3NlIGVuY29kaW5ncworICAgICAgYXJlIG5vdCBzcGVjaWZpYyB0byBNaWNyb3NvZnQuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlICBhdXRvaGludGVyICBoYXMgYmVlbiAgZnVydGhlciAgaW1wcm92ZWQ7ICBmb3IgZXhhbXBsZSwgIGBtJworICAgICAgZ2x5cGhzIG5vdyByZXRhaW4gaXRzIHZlcnRpY2FsIHN5bW1ldHJ5LgorCisgICAgLSBQYXJ0aWFsIHN1cHBvcnQgb2YgTWFjIGZvbnRzIG9uIG5vbi1NYWMgcGxhdGZvcm1zLgorCisgICAgLSBgbWFrZSAgIHJlZmRvYycgICAoYWZ0ZXIgICBmaXJzdCAgIGBtYWtlJykgICBidWlsZHMgICB0aGUgICBIVE1MCisgICAgICBkb2N1bWVudGF0aW9uLiAgWW91IG5lZWQgUHl0aG9uIGZvciB0aGlzLgorCisgICAgLSBUaGUgbWFrZSBidWlsZCBzeXN0ZW0gc2hvdWxkICBub3cgd29yayBtb3JlIHJlbGlhYmx5IG9uIERPUy1saWtlCisgICAgICBwbGF0Zm9ybXMuCisKKyAgICAtIFN1cHBvcnQgZm9yICBFTVggZ2NjICBhbmQgV2F0c29uIEMvQysrICBjb21waWxlcnMgb24gIE1TLURPUyBoYXMKKyAgICAgIGJlZW4gYWRkZWQuCisKKyAgICAtIEJldHRlciBWTVMgYnVpbGQgc3VwcG9ydC4KKworICAgIC0gU3VwcG9ydCBmb3IgdGhlIHBrZy1jb25maWcgIHBhY2thZ2UgYnkgcHJvdmlkaW5nIGEgYGZyZWV0eXBlLnBjJworICAgICAgZmlsZS4KKworICAgIC0gTmV3IGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLW9sZC1tYWMtZm9udHMgZm9yIERhcndpbi4KKworICAgIC0gU29tZSBzb3VyY2UgZmlsZXMgaGF2ZSBiZWVuICByZW5hbWVkIChtYWlubHkgdG8gZml0IGludG8gdGhlIDguMworICAgICAgbmFtaW5nIHNjaGVtZSkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4xLjQgYW5kIDIuMS4zCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBVcGRhdGVkICB0byBuZXdlc3QgIGxpYnRvb2wgIHZlcnNpb24sIGZpeGluZyAgYnVpbGQgcHJvYmxlbXMgIG9uCisgICAgICB2YXJpb3VzIHBsYXRmb3Jtcy4KKworICAgIC0gQSBmaXggIGluIHRoZSBHemlwIHN0cmVhbSAgcmVhZGVyOiBJdCBjb3VsZG4ndCAgcmVhZCBjZXJ0YWluIC5negorICAgICAgZmlsZXMgcHJvcGVybHkgZHVlIHRvIGEgIHNtYWxsIHR5cG8uICBJbiBjZXJ0YWluIGNhc2VzLCBGcmVlVHlwZQorICAgICAgY291bGQgIGFsc28gbG9vcCAgZW5kbGVzc2x5ICB3aGVuIHRyeWluZyAgdG8gIGxvYWQgdGlueSAgZ3ppcHBlZAorICAgICAgZmlsZXMuCisKKyAgICAtIFRoZSBjb25maWd1cmUgc2NyaXB0IG5vdyB0cmllcyAgdG8gdXNlIHRoZSBzeXN0ZW0td2lkZSB6bGliIHdoZW4KKyAgICAgIGl0ICBmaW5kcyBvbmUgIChpbnN0ZWFkIG9mICB0aGUgIGNvcHkgZm91bmQgIGluIHNyYy9nemlwKS4gICBBbmQKKyAgICAgIGBmcmVldHlwZS1jb25maWcnIGhhcyAgYmVlbiB1cGRhdGVkIHRvIHJldHVybiAgcmVsZXZhbnQgZmxhZ3MgaW4KKyAgICAgIHRoaXMgY2FzZSB3aGVuIGludm9rZWQgd2l0aCBgLS1saWJzJyAoZS5nLiBgLWx6bGliJykuCisKKyAgICAtIENlcnRhaW4gZm9udHMgY291bGRuJ3QgYmUgbG9hZGVkICBieSAyLjEuMyBiZWNhdXNlIHRoZXkgbGFja2VkIGEKKyAgICAgIFVuaWNvZGUgICBjaGFybWFwICAoZS5nLiAgIFNZTUJPTC5UVEYpLiAgICBGcmVlVHlwZSAgZXJyb25lb3VzbHkKKyAgICAgIHJlamVjdGVkIHRoZW0uCisKKyAgICAtIFRoZSBDRkYgbG9hZGVyIHdhcyBtb2RpZmllZCB0byBhY2NlcHQgZm9udHMgd2hpY2ggb25seSBjb250YWluIGEKKyAgICAgIHN1YnNldCBvZiAgdGhlaXIgcmVmZXJlbmNlIGNoYXJzZXQuICBUaGlzICBwcmV2ZW50ZWQgdGhlIGNvcnJlY3QKKyAgICAgIHVzZSBvZiBQREYtZW1iZWRkZWQgZm9udHMuCisKKyAgICAtIFRoZSBsb2dpYyB0byBkZXRlY3QgVW5pY29kZSBjaGFybWFwcyBoYXMgYmVlbiBtb2RpZmllZC4gIFRoaXMgaXMKKyAgICAgIHJlcXVpcmVkIHRvICBzdXBwb3J0IGZvbnRzIHdoaWNoIGluY2x1ZGUgYm90aCAgMTYtYml0IGFuZCAzMi1iaXQKKyAgICAgIGNoYXJtYXBzIChsaWtlIHZlcnkgIHJlY2VudCBhc2lhbiBvbmVzKSB1c2luZyB0aGUgIG5ldyAxMCBhbmQgMTIKKyAgICAgIFNGTlQgZm9ybWF0cy4KKworICAgIC0gVGhlIFRydWVUeXBlICBsb2FkZXIgbm93IGxpbWl0cyAgdGhlIGRlcHRoIG9mICBjb21wb3NpdGUgZ2x5cGhzLgorICAgICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBicm9rZW4gZm9udHMgdG8gYnJlYWsgdGhlIGVuZ2luZSBieQorICAgICAgYmxvd2luZyB0aGUgc3RhY2sgd2l0aCByZWN1cnNpdmUgZ2x5cGggZGVmaW5pdGlvbnMuCisKKyAgICAtIFRoZSBDTWFwIGNhY2hlIGlzIG5vdyAgY2FwYWJsZSBvZiBtYW5hZ2luZyBVQ1MtNCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgIHRoYXQgICBhcmUgICBtYXBwZWQgICB0aHJvdWdoICAgZXh0ZW5kZWQgIGNoYXJtYXBzICAgaW4gICByZWNlbnQKKyAgICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnRzLgorCisgICAgLSBUaGUgICBjYWNoZSAgc3ViLXN5c3RlbSAgIG5vdyAgcHJvcGVybHkgICBtYW5hZ2VzICBvdXQtb2YtbWVtb3J5CisgICAgICBjb25kaXRpb25zICBpbnN0ZWFkIG9mICBibGluZGx5ICByZXBvcnRpbmcgdGhlbSAgdG8gdGhlICBjYWxsZXIuCisgICAgICBUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbCB0cnkgdG8gZW1wdHkgdGhlIGNhY2hlIGJlZm9yZSByZXN0YXJ0aW5nCisgICAgICBpdHMgYWxsb2NhdGlvbnMgdG8gc2VlIGlmIHRoYXQgY2FuIGhlbHAuCisKKyAgICAtIFRoZSAgUEZSIGRyaXZlciAgZGlkbid0IHJldHVybiAgdGhlIGxpc3QgIG9mICBhdmFpbGFibGUgZW1iZWRkZWQKKyAgICAgIGJpdG1hcHMgcHJvcGVybHkuCisKKyAgICAtIFRoZXJlIHdhcyAgYSBuYXN0eSAgbWVtb3J5IGxlYWsgd2hlbiAgdXNpbmcgZW1iZWRkZWQgIGJpdG1hcHMgaW4KKyAgICAgIGNlcnRhaW4gZm9udCBmb3JtYXRzLgorCisKKyAgSUkuIElNUE9SVEFOVCBDSEFOR0VTCisKKyAgICAtIERhdmlkIENoZXN0ZXIgIGNvbnRyaWJ1dGVkIHNvbWUgZW5oYW5jZW1lbnRzICB0byB0aGUgYXV0by1oaW50ZXIKKyAgICAgIHRoYXQgIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgIHRoZSAgcXVhbGl0eSBvZiAgaXRzIG91dHB1dC4gICBUaGUKKyAgICAgIFBvc3RzY3JpcHQgaGludGVyIHdhcyBhbHNvIGltcHJvdmVkIGluIHNldmVyYWwgd2F5cy4KKworICAgIC0gVGhlIEZUX1JFTkRFUl9NT0RFX0xJR0hUIHJlbmRlciBtb2RlIHdhcyBpbXBsZW1lbnRlZC4KKworICAgIC0gQSBuZXcgIEFQSSBmdW5jdGlvbiBjYWxsZWQgYEZUX0dldF9CREZfUHJvcGVydHknICBoYXMgYmVlbiBhZGRlZAorICAgICAgdG8gRlRfQkRGX0ggdG8gIHJldHJpZXZlIEJERiBwcm9wZXJ0aWVzIGZyb20gQkRGICBfYW5kXyBQQ0YgZm9udAorICAgICAgZmlsZXMuICAgVEhJUyAgSVMgIFNUSUxMICBFWFBFUklNRU5UQUwsICBzaW5jZSAgaXQgIGhhc24ndCAgYmVlbgorICAgICAgcHJvcGVybHkgdGVzdGVkIHlldC4KKworICAgIC0gQSBXaW5kb3dzIEZOVCBzcGVjaWZpYyBBUEkgaGFzIGJlZW4gYWRkZWQsIG1vc3RseSB0byBhY2Nlc3MgZm9udAorICAgICAgaGVhZGVycy4gIFRoaXMgaXMgdXNlZCBieSBXaW5lLgorCisgICAgLSBUcnVlVHlwZSB0YWJsZXMgIHdpdGhvdXQgYW4gYGhtdHgnIHRhYmxlIGFyZSAgbm93IHRvbGVyYXRlZCB3aGVuCisgICAgICBhbiAgaW5jcmVtZW50YWwgaW50ZXJmYWNlICBpcyAgdXNlZC4gIFRoaXMgIGhhcHBlbnMgZm9yICBjZXJ0YWluCisgICAgICBUeXBlNDIgZm9udHMgcGFzc2VkIGZyb20gR2hvc3RzY3JpcHQgdG8gRnJlZVR5cGUuCisKKyAgICAtIFRoZSBQRlIgZm9udCBkcml2ZXIgaXMgIG5vdyBjYXBhYmxlIG9mIHJldHVybmluZyB0aGUgZm9udCBmYW1pbHkKKyAgICAgIGFuZCBzdHlsZSAgbmFtZXMgd2hlbiAgdGhleSBhcmUgYXZhaWxhYmxlICAoaW5zdGVhZCBvZiAgdGhlIHNvbGUKKyAgICAgIGBGb250SUQnKS4gICBUaGlzICBpcyAgcGVyZm9ybWVkICBieSBwYXJzaW5nICBhbiAgKnVuZG9jdW1lbnRlZCoKKyAgICAgIHBvcnRpb24gb2YgdGhlIGZvbnQgZmlsZSEKKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUaGUgcGF0aCBzdHJva2VyIGluIEZUX1NUUk9LRVJfSCBoYXMgZW50ZXJlZCBiZXRhIHN0YWdlLiAgSXQgbm93CisgICAgICB3b3JrcyB2ZXJ5ICB3ZWxsLCBidXQgIGl0cyBpbnRlcmZhY2UgbWlnaHQgIGNoYW5nZSBhIGJpdCAgaW4gdGhlCisgICAgICBmdXR1cmUuICBNb3JlIG9uIHRoaXMgaW4gbGF0ZXIgcmVsZWFzZXMuCisKKyAgICAtIFRoZSBkb2N1bWVudGF0aW9uIGZvciAgRlRfU2l6ZV9NZXRyaWNzIGRpZG4ndCBhcHBlYXIgcHJvcGVybHkgaW4KKyAgICAgIHRoZSBBUEkgcmVmZXJlbmNlLgorCisgICAgLSBUaGUgZmlsZSBkb2NzL1ZFUlNJT04uRExMIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZXhwbGFpbiB2ZXJzaW9uaW5nCisgICAgICB3aXRoIEZyZWVUeXBlICAoaS5lLiwgY29tcGFyaW5nIHJlbGVhc2UvbGlidG9vbC9zbyAgbnVtYmVycywgYW5kCisgICAgICBob3cgdG8gdXNlIHRoZW0gaW4gYXV0b2NvbmYgc2NyaXB0cykuCisKKyAgICAtIFRoZSAgaW5zdGFsbGF0aW9uICBkb2N1bWVudGF0aW9uICBoYXMgYmVlbiAgc2VyaW91c2x5ICByZXZhbXBlZC4KKyAgICAgIEV2ZXJ5dGhpbmcgaXMgbm93IGluIHRoZSBgZG9jcycgZGlyZWN0b3J5LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ0hBTkdFUyBCRVRXRUVOIDIuMS4zIGFuZCAyLjEuMgorCisgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKKworICAgIC0gRlRfVmVjdG9yX1RyYW5zZm9ybSAgaGFkICBiZWVuICBpbmNvcnJlY3RseSBtb2RpZmllZCAgaW4gIDIuMS4yLAorICAgICAgcmVzdWx0aW5nICBpbiAgaW5jb3JyZWN0ICAgdHJhbnNmb3JtYXRpb25zICBiZWluZyAgYXBwbGllZCAgKGZvcgorICAgICAgZXhhbXBsZSwgcm90YXRpb25zIHdlcmUgcHJvY2Vzc2VkIGluIG9wcG9zaXRlIGFuZ2xlcykuCisKKyAgICAtIFRoZSBmb3JtYXQgIDggYW5kIDEyIFRydWVUeXBlIGNoYXJtYXAgIGVudW1lcmF0aW9uIHJvdXRpbmVzIGhhdmUKKyAgICAgIGJlZW4gZml4ZWQgKEZUX0dldF9OZXh0X0NoYXIgcmV0dXJuZWQgaW52YWxpZCB2YWx1ZXMpLgorCisgICAgLSBUaGUgIFBGUiBmb250IGRyaXZlciAgcmV0dXJuZWQgaW5jb3JyZWN0ICBhZHZhbmNlIHdpZHRocyAgaWYgdGhlCisgICAgICBvdXRsaW5lICBhbmQgbWV0cmljcyByZXNvbHV0aW9uICBkZWZpbmVkIGluICB0aGUgZm9udCAgZmlsZSB3ZXJlCisgICAgICBkaWZmZXJlbnQuCisKKyAgICAtIEZUX0dseXBoX1RvX0JpdG1hcCBub3cgcmV0dXJucyAgc3VjY2Vzc2Z1bGx5IHdoZW4gY2FsbGVkIHdpdGggYW4KKyAgICAgIEZUX0JpdG1hcEdseXBoIGFyZ3VtZW50IChpdCBwcmV2aW91c2x5IHJldHVybmVkIGFuIGVycm9yKS4KKworICAgIC0gQSBidWcgIGluIHRoZSBUeXBlIDEgIGxvYWRlciB0aGF0IHByZXZlbnRlZCAgdmFsaWQgZm9udCBib3VuZGluZworICAgICAgYm94ZXMgdG8gYmUgbG9hZGVkIGZyb20gbXVsdGlwbGUgbWFzdGVyIGZvbnRzLgorCisgICAgLSBUaGUgU0ZOVCAgdmFsaWRhdGlvbiBjb2RlIGhhcyBiZWVuIHJld3JpdHRlbi4gICBGcmVlVHlwZSBjYW4gbm93CisgICAgICBsb2FkIGBicm9rZW4nICBmb250cyB0aGF0IHdlcmUgIHVzYWJsZSBvbiBXaW5kb3dzLCBidXQgIG5vdCB3aXRoCisgICAgICBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4KKworICAgIC0gVGhlIGNvbXB1dGF0aW9uIG9mIGJlYXJpbmdzIGluIHRoZSBCREYgZHJpdmVyIGhhcyBiZWVuIGZpeGVkLgorCisgICAgLSBUaGUgUG9zdHNjcmlwdCBoaW50ZXIgY3Jhc2hlZCB3aGVuIHRyeWluZyB0byBoaW50IGNlcnRhaW4gZ2x5cGhzCisgICAgICAobW9yZSBwcmVjaXNlbHksICB3aGVuIHRyeWluZyB0byAgYXBwbHkgaGludHMgdG8gYW4gIGVtcHR5IGdseXBoCisgICAgICBvdXRsaW5lKS4KKworICAgIC0gVGhlICBUcnVlVHlwZSBnbHlwaCAgbG9hZGVyICBub3cgc3VwcG9ydHMgIGNvbXBvc2l0ZXMgaW4gIGBBcHBsZQorICAgICAgZm9ybWF0JyAgKHRoZXkgZGlmZmVyIHNsaWdodGx5ICBmcm9tIE1pY3Jvc29mdC9PcGVuVHlwZSAgb25lcyBpbgorICAgICAgdGhlIHdheSB0cmFuc2Zvcm1hdGlvbiBvZmZzZXRzIGFyZSBjb21wdXRlZCkuCisKKyAgICAtIEZyZWVUeXBlIHdhcyAgdmVyeSBzbG93IGF0IG9wZW5pbmcgY2VydGFpbiAgYXNpYW4gQ0lEL0NGRiBmb250cywKKyAgICAgIGR1ZSB0byAgZml4ZWQgaW5jcmVtZW50ICBpbiBkeW5hbWljIGFycmF5ICByZS1hbGxvY2F0aW9ucy4gIFRoaXMKKyAgICAgIGhhcyAgYmVlbiBjaGFuZ2VkICB0byAgZXhwb25lbnRpYWwgYmVoYXZpb3VyICB0byBnZXQgIGFjY2VwdGFibGUKKyAgICAgIHBlcmZvcm1hbmNlLgorCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gVGhlIFBDRiBkcml2ZXIgbm93IHN1cHBvcnRzIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzIG5hdGl2ZWx5LgorICAgICAgVGhpcyBtZWFucyB0aGF0ICB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZSAgYWxsIHRoZXNlIGJpdG1hcCBmb250cworICAgICAgdGhhdCAgY29tZSB3aXRoICBYRnJlZTg2IHdpdGggIEZyZWVUeXBlIChhbmQgIGxpYlhmdC9saWJYZnQyLCBieQorICAgICAgZXh0ZW5zaW9uKS4KKworICAgIC0gVGhlICBhdXRvbWF0aWMgYW5kICBwb3N0c2NyaXB0IGhpbnRlcnMgIGhhdmUgYm90aCAgYmVlbiB1cGRhdGVkLgorICAgICAgVGhpcyAgcmVzdWx0cyBpbiAgYSByZWxhdGl2ZWx5ICBpbXBvcnRhbnQgaW5jcmVhc2UgIG9mIHJlbmRlcmluZworICAgICAgcXVhbGl0eSBzaW5jZSAgbWFueSBuYXN0eSBkZWZhdWx0cyBoYXZlIGJlZW4gc3VwcHJlc3NlZC4gIFBsZWFzZQorICAgICAgdmlzaXQgdGhlIHdlYiBwYWdlOgorCisgICAgICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL2hpbnRpbmcvc21vb3RoLWhpbnRpbmcuaHRtbAorCisgICAgICBmb3IgYWRkaXRpb25hbCBkZXRhaWxzIG9uIHRoaXMgdG9waWMuCisKKyAgICAtIFRoZSBgbG9hZF9mbGFncycgcGFyYW1ldGVyIG9mIGBGVF9Mb2FkX0dseXBoJyBpcyBub3cgYW4gRlRfSW50MzIKKyAgICAgIChpbnN0ZWFkICBvZiBqdXN0ICBiZWluZyAgYW4gRlRfSW50KS4gICBUaGlzICBicmVha3Mgc291cmNlICBhbmQKKyAgICAgIGJpbmFyeSAgY29tcGF0aWJpbGl0eSBmb3IgIDE2Yml0IHN5c3RlbXMgIG9ubHksICB3aGlsZSByZXRhaW5pbmcKKyAgICAgIGJvdGggb2YgdGhlbSBmb3IgMzIgYW5kIDY0IGJpdCBvbmVzLgorCisgICAgICBTb21lIG5ldyBmbGFncyBoYXZlIGJlZW4gYWRkZWQgY29uc2VxdWVudGx5OgorCisgICAgICAgIEZUX0xPQURfTk9fQVVUT0hJTlQgICA6OiBEaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIGF1dG8taGludGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0IG5vdCBuYXRpdmUgZm9ybWF0IGhpbnRlcnMpLgorCisgICAgICAgIEZUX0xPQURfVEFSR0VUX05PUk1BTCA6OiBIaW50IGFuZCByZW5kZXIgZm9yIG5vcm1hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW50aS1hbGlhc2VkIGRpc3BsYXlzLgorCisgICAgICAgIEZUX0xPQURfVEFSR0VUX01PTk8gICA6OiBIaW50IGFuZCByZW5kZXIgZm9yIDEtYml0IGRpc3BsYXlzLgorCisgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRCAgICA6OiBIaW50IGFuZCByZW5kZXIgZm9yIGhvcml6b250YWwgUkdCIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCR1Igc3ViLXBpeGVsIGRpc3BsYXlzIChsaWtlIExDRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVucykuICBUSElTIElTIFNUSUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFUklNRU5UQUwhCisKKyAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgIDo6IFNhbWUgYXMgRlRfTE9BRF9UQVJHRVRfTENELCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIHN1Yi1waXhlbCBkaXNwbGF5cyAobGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlZCBMQ0Qgc2NyZWVucykuICBUSElTIElTIFNUSUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFUklNRU5UQUwhCisKKyAgICAgIEZUX0xPQURfTU9OT0NIUk9NRSAgIGlzICBzdGlsbCAgIHN1cHBvcnRlZCwgIGJ1dCAgIG9ubHkgIGFmZmVjdHMKKyAgICAgIHJlbmRlcmluZywgbm90IHRoZSBoaW50aW5nLgorCisgICAgICBOb3RlIHRoYXQgdGhlIGBmdHZpZXcnICBkZW1vIHByb2dyYW0gYXZhaWxhYmxlIGluIHRoZSBgZnQyZGVtb3MnCisgICAgICBwYWNrYWdlICBoYXMgYmVlbiAgdXBkYXRlZCB0byAgc3VwcG9ydCBMQ0Qtb3B0aW1pemVkICBkaXNwbGF5IG9uCisgICAgICBub24tcGFsZXR0ZWQgZGlzcGxheXMgKHVuZGVyIFdpbjMyIGFuZCBYMTEpLgorCisgICAgLSBUaGUgIFBGUiAgZHJpdmVyICBub3cgIHN1cHBvcnRzIGVtYmVkZGVkICBiaXRtYXBzICAoYWxsICBmb3JtYXRzCisgICAgICBzdXBwb3J0ZWQpLCBhbmQgcmV0dXJucyBjb3JyZWN0IGtlcm5pbmcgbWV0cmljcyBmb3IgYWxsIGdseXBocy4KKworICAgIC0gVGhlIFRydWVUeXBlIGNoYXJtYXAgbG9hZGVyICBub3cgc3VwcG9ydHMgY2VydGFpbiBgYnJva2VuJyBmb250cworICAgICAgdGhhdCBsb2FkIHVuZGVyIFdpbmRvd3Mgd2l0aG91dCBwcm9ibGVtcy4KKworICAgIC0gVGhlIGNhY2hlIEFQSSBoYXMgYmVlbiBzbGlnaHRseSBtb2RpZmllZCAoaXQncyBzdGlsbCBhIGJldGEhKToKKworICAgICAgIC0gVGhlIHR5cGUgIEZUQ19JbWFnZURlc2MgaGFzIGJlZW4gcmVtb3ZlZDsgaXQgIGlzIG5vdyByZXBsYWNlZAorICAgICAgICAgYnkgIEZUQ19JbWFnZVR5cGVSZWMuICAgTm90ZSB0aGF0ICBvbmUgIG9mICBpdHMgIGZpZWxkcyBpcyAgYQorICAgICAgICAgYGxvYWRfZmxhZycgcGFyYW1ldGVyIGZvciBGVF9Mb2FkX0dseXBoLgorCisgICAgICAgLSBUaGUgIGZpZWxkICBgbnVtX2dyYXlzJyBvZiAgRlRfU0JpdFJlYyAgaGFzICBiZWVuIGNoYW5nZWQgIHRvCisgICAgICAgICBgbWF4X2dyYXlzJyAgaW4gIG9yZGVyIHRvICBmaXQgIHdpdGhpbiAgYSAgc2luZ2xlIGJ5dGUuICAgSXRzCisgICAgICAgICBtYXhpbXVtIHZhbHVlIGlzIHRodXMgMjU1IChpbnN0ZWFkIG9mIDI1NiBhcyBwcmV2aW91c2x5KS4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBBZGRlZCBzdXBwb3J0ICBmb3IgdGhlICBERVNURElSIHZhcmlhYmxlIGR1cmluZyAgYG1ha2UgaW5zdGFsbCcuCisgICAgICBUaGlzIHNpbXBsaWZpZXMgcGFja2FnaW5nIG9mIEZyZWVUeXBlLgorCisgICAgLSBJbmNsdWRlZCBtb2RpZmllZCAgY29waWVzIG9mIHRoZSAgWkxpYiBzb3VyY2VzIGluICBgc3JjL2d6aXAnIGluCisgICAgICBvcmRlciB0byBzdXBwb3J0ICBnemlwLWNvbXByZXNzZWQgUENGIGZvbnRzLiAgV2UgZG8gIG5vdCB1c2UgdGhlCisgICAgICBzeXN0ZW0tcHJvdmlkZWQgIHpsaWIgIGZvciAgbm93LCAgIHRob3VnaCAgdGhpcyAgaXMgIGEgIHByb2JhYmxlCisgICAgICBlbmhhbmNlbWVudCBmb3IgZnV0dXJlIHJlbGVhc2VzLgorCisgICAgLSBUaGUgRG9jTWFrZXIgdG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBvbi1saW5lIEFQSSByZWZlcmVuY2UgaGFzCisgICAgICBiZWVuICAgY29tcGxldGVseSAgICByZXdyaXR0ZW4uICAgIEl0ICAgaXMgICAgbm93ICAgbG9jYXRlZCAgIGluCisgICAgICBgc3JjL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5Jy4gIEZlYXR1cmVzOgorCisgICAgICAgIC0gYmV0dGVyIGNyb3NzLXJlZmVyZW5jZWQgb3V0cHV0CisgICAgICAgIC0gbW9yZSBwb2xpc2hlZCBvdXRwdXQKKyAgICAgICAgLSB1c2VzIFB5dGhvbiByZWd1bGFyIGV4cHJlc3Npb25zICAodGhvdWdoIGl0IGRpZG4ndCBzcGVlZCB0aGUKKyAgICAgICAgICBwcm9ncmFtKQorICAgICAgICAtIG11Y2ggIG1vcmUgIG1vZHVsYXIgc3RydWN0dXJlLCAgd2hpY2ggIGFsbG93cyBmb3IgIGRpZmZlcmVudAorICAgICAgICAgIGBiYWNrZW5kcycgIGluICBvcmRlciB0byAgZ2VuZXJhdGUgIEhUTUwsICBYTUwsIG9yICB3aGF0ZXZlcgorICAgICAgICAgIGZvcm1hdC4KKworICAgICAgT25lIGNhbiByZWdlbmVyYXRlIHRoZSBBUEkgcmVmZXJlbmNlIGJ5IGNhbGxpbmc6CisKKyAgICAgICAgIHB5dGhvbiBzcmMvdG9vbHMvZG9jbWFrZXIvZG9jbWFrZXIucHkgXAorICAgICAgICAgICAgICAgIC0tcHJlZml4PWZ0MiBcCisgICAgICAgICAgICAgICAgLS10aXRsZT1GcmVlVHlwZS0yLjEuMyBcCisgICAgICAgICAgICAgICAgLS1vdXRwdXQ9PG91dHB1dGRpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICBpbmNsdWRlL2ZyZWV0eXBlLyouaCBcCisgICAgICAgICAgICAgICAgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvKi5oIFwKKyAgICAgICAgICAgICAgICBpbmNsdWRlL2ZyZWV0eXBlL2NhY2hlLyouaAorCisgICAgLSBBIG5ldywgZXhwZXJpbWVudGFsLCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBmb250IGxvYWRpbmcgKGkuZS4sCisgICAgICBsb2FkaW5nICBvZiBmb250cyAgd2hlcmUgdGhlICBnbHlwaHMgYXJlICBub3QgaW4gIHRoZSAgZm9udCBmaWxlCisgICAgICBpdHNlbGYsIGJ1dCBwcm92aWRlZCBieSBhbiBleHRlcm5hbCBjb21wb25lbnQsIGxpa2UgYSBQb3N0c2NyaXB0CisgICAgICBpbnRlcnByZXRlcikgaGFzIGJlZW4gYWRkZWQgYnkgR3JhaGFtIEFzaGVyLiAgVGhpcyBpcyBzdGlsbCB3b3JrCisgICAgICBpbiBwcm9ncmVzcywgaG93ZXZlci4KKworICAgIC0gQSBuZXcsICBFWFBFUklNRU5UQUwsIHBhdGggc3Ryb2tlciAgaGFzIGJlZW4gYWRkZWQuICAgSXQgZG9lc24ndAorICAgICAgc3VmZmVyICBmcm9tICBzZXZlcmUgIHJvdW5kaW5nICBlcnJvcnMgIGFuZCAgdHJlYXQgIGJlemllciAgYXJjcworICAgICAgZGlyZWN0bHkuICBTdGlsbCB3b3JrIGluIHByb2dyZXNzIChpLmUuIG5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbAorICAgICAgQVBJKS4gICBTZWUgIHRoZSBmaWxlICA8ZnJlZXR5cGUvZnRzdHJva2VyLmg+ICBmb3IgIHNvbWUgb2YgIHRoZQorICAgICAgZGV0YWlscy4KKworICAgIC0gVGhlIG1hc3NpdmUgIHJlLWZvcm1hdHRpbmcgb2Ygc291cmNlcyBhbmQgIGludGVybmFsIHJlLWRlc2lnbiBpcworICAgICAgc3RpbGwgdW5kZXItd2F5LiAgTWFueSAgaW50ZXJuYWwgZnVuY3Rpb25zLCBjb25zdGFudHMsIGFuZCB0eXBlcworICAgICAgaGF2ZSBiZWVuIHJlbmFtZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4xLjIgYW5kIDIuMS4xCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBNYW55ICBmb250IGRyaXZlcnMgZGlkbid0ICBzZWxlY3QgYSAgVW5pY29kZSBjaGFybWFwICBieSBkZWZhdWx0CisgICAgICB3aGVuIGEgbmV3IGZhY2UgIHdhcyBvcGVuZWQgKHdpdGggdGhlIEZUX0NPTkZJR19PUFRJT05fVVNFX0NNQVBTCisgICAgICBvcHRpb25zIGVuYWJsZWQpLCAgY2F1c2luZyBtYW55IGFwcGxpY2F0aW9ucyAgdG8gbm90IGJlICBhYmxlIHRvCisgICAgICBkaXNwbGF5IHRleHQgY29ycmVjdGx5IHdpdGggdGhlIDIuMS54IHJlbGVhc2VzLgorCisgICAgLSBUaGUgIFBGUiBkcml2ZXIgaGFkICBhIGJ1ZyAgaW4gaXRzICBjb21wb3NpdGUgbG9hZGluZyAgY29kZSB0aGF0CisgICAgICBwcm9kdWNlcyBpbmNvcnJlY3RseSBwbGFjZWQgYWNjZW50cyB3aXRoIG1hbnkgZm9udHMuCisKKyAgICAtIFRoZSBUeXBlNDIgZHJpdmVyIGNyYXNoZWQgc29tZXRpbWVzIGR1ZSB0byBhIG5hc3R5IGJ1Zy4KKworICAgIC0gVGhlIFR5cGUgMSBjdXN0b20gZW5jb2RpbmcgIGNoYXJtYXAgZGlkbid0IGhhbmRsZSB0aGUgY2FzZSB3aGVyZQorICAgICAgdGhlIGZpcnN0IGdseXBoIGluZGV4IHdhc24ndCAwLgorCisgICAgLSBBICBzZXJpb3VzICB0eXBvICBpbiAgdGhlICBUcnVlVHlwZSAgY29tcG9zaXRlICBsb2FkZXIgIHByb2R1Y2VkCisgICAgICBpbmNvcnJlY3RseSBwbGFjZWQgIGdseXBocyBpbiBmb250cyAgbGlrZSBgV2luZ2RpbmdzJyBhbmQgIGEgZmV3CisgICAgICBvdGhlcnMuCisKKworICBJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBUaGUgV2luMzIgIFZpc3VhbCBDKysgcHJvamVjdCAgZmlsZSBoYXMgYmVlbiB1cGRhdGVkICB0byBpbmNsdWRlCisgICAgICB0aGUgUEZSIGRyaXZlciBhcyB3ZWxsLgorCisgICAgLSBgZnJlZXR5cGUubTQnIGlzICBub3cgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgYnkgIGBtYWtlIGluc3RhbGwnIG9uCisgICAgICBVbml4IHN5c3RlbXMuCisKKyAgICAtIFRoZSBmdW5jdGlvbiAgRlRfR2V0X1BTX0ZvbnRfSW5mbyBub3cgd29ya3Mgd2l0aCAgQ0lEIGFuZCBUeXBlNDIKKyAgICAgIGZvbnRzIGFzIHdlbGwuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4xLjEgYW5kIDIuMS4wCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBUaGUgIGB2ZXJzaW9uX2luZm8nICByZXR1cm5lZCAgIGJ5ICBgZnJlZXR5cGUtY29uZmlnJyAgaW4gIDIuMS4wCisgICAgICByZXR1cm5lZCBhbiBpbnZhbGlkIHZhbHVlLiAgSXQgbm93IHJldHVybnMgOToxOjMgKDIuMC45IHJldHVybmVkCisgICAgICA5OjA6MykuCisKKyAgICAtIFZlcnNpb24gMi4xLjAgIGNvdWxkbid0IGJlIGxpbmtlZCBhZ2FpbnN0ICBhcHBsaWNhdGlvbnMgb24gV2luMzIKKyAgICAgIGFuZCAgQW1pZ2Egc3lzdGVtcyAgZHVlICB0byAgYSBuZXcgIGRlYnVnICBmdW5jdGlvbiB0aGF0ICB3YXNuJ3QKKyAgICAgIHByb3Blcmx5ICAgcHJvcGFnYXRlZCAgdG8gICB0aGUgIHN5c3RlbS1zcGVjaWZpYyAgIGRpcmVjdG9yeSAgaW4KKyAgICAgIGBidWlsZHMnLgorCisgICAgLSBWYXJpb3VzIE1hY09TIGFuZCBNYWMgT1MgWCBzcGVjaWZpYyBmaXhlcy4KKworICAgIC0gRml4ZWQgIGEgYnVnIGluICB0aGUgVHJ1ZVR5cGUgIGNoYXJtYXAgdmFsaWRhdGlvbiAgcm91dGluZXMgdGhhdAorICAgICAgbWFkZSB2ZXJzaW9uICAyLjEuMCB0b28gcmVzdHJpY3RpdmUgIC0tIG1hbnkgcG9wdWxhciAgZm9udHMgaGF2ZQorICAgICAgYmVlbiByZWplY3RlZC4KKworICAgIC0gVGhlcmUgd2FzICBzdGlsbCBhIHZlcnkgc21hbGwgZGlmZmVyZW5jZSAgYmV0d2VlbiB0aGUgbW9ub2Nocm9tZQorICAgICAgZ2x5cGggYml0bWFwcyBwcm9kdWNlZCBieSBGcmVlVHlwZSAxLnggYW5kIEZyZWVUeXBlIDIueCB3aXRoIHRoZQorICAgICAgYnl0ZWNvZGUgIGludGVycHJldGVyIGVuYWJsZWQuICAgVGhpcyB3YXMgIGNhdXNlZCBieSAgYW4gaW52YWxpZAorICAgICAgZmxhZyBzZXR0aW5nIGluIHRoZSBUcnVlVHlwZSBnbHlwaCBsb2FkZXIsIG1ha2luZyB0aGUgcmFzdGVyaXplcgorICAgICAgY2hhbmdlICBpdHMgIGRyb3Atb3V0ICAgY29udHJvbCAgbW9kZS4gICBOb3cgIHRoZSByZXN1bHRzIHNob3VsZAorICAgICAgX3JlYWxseV8gYmUgY29tcGxldGVseSBpZGVudGljYWwuCisKKyAgICAtIFRoZSBUcnVlVHlwZSBuYW1lIHRhYmxlIGxvYWRlciBoYXMgYmVlbiBpbXByb3ZlZCB0byBzdXBwb3J0IG1hbnkKKyAgICAgIHBvcHVsYXIgIHRob3VnaCBidWdneSBBc2lhbiAgZm9udHMuICBJdCAgbm93IGlnbm9yZXMgIGVtcHR5IG5hbWUKKyAgICAgIGVudHJpZXMsICBpbnZhbGlkICBwb2ludGVyIG9mZnNldHMgIGFuZCAgYSAgZmV3IG90aGVyICBpbmNvcnJlY3QKKyAgICAgIHN1YnRsZXRpZXMuICBNb3Jlb3ZlciwgIG5hbWUgc3RyaW5ncyAgYXJlIG5vdyBsb2FkZWQgIG9uIGRlbWFuZCwKKyAgICAgIHdoaWNoIHJlZHVjZXMgdGhlIG1lbW9yeSBsb2FkICBvZiBtYW55IGZhY2VzIChlLmcuIHRoZSBBUklBTC5UVEYKKyAgICAgIGZvbnQgZmlsZSBjb250YWlucyBhIDEwa0J5dGUgbmFtZSB0YWJsZSB3aXRoIDcwIG5hbWVzKS4KKworICAgIC0gRml4ZWQgYSBidWcgaW4gdGhlIFBvc3RzY3JpcHQgaGludGVyIHRoYXQgcHJldmVudGVkIGZhbWlseSBibHVlcworICAgICAgc3Vic3RpdHV0aW9uIHRvIGhhcHBlbiBjb3JyZWN0bHkuCisKKworICBJSS4gTkVXIEZFQVRVUkVTCisKKyAgICAtIFRocmVlIG5ldyBmb250IGRyaXZlcnMgaW4gdGhpcyByZWxlYXNlOgorCisgICAgICAqIEEgIEJERiAgZm9udCBkcml2ZXIsICBjb250cmlidXRlZCAgYnkgIEZyYW5jbyBaYXBwYSAgTmFyZGVsbGksCisgICAgICAgIGhlYXZpbHkgIG1vZGlmaWVkICAgYnkgIFdlcm5lciAgTGVtYmVyZy4gICAgSXQgIGFsc28gIHN1cHBvcnRzCisgICAgICAgIGFudGktYWxpYXNlZCBiaXRtYXBzICh1c2luZyBhIHNsaWdodGx5IGV4dGVuZGVkIEJERiBmb3JtYXQpLgorCisgICAgICAqIEEgVHlwZTQyICBmb250IGRyaXZlciwgY29udHJpYnV0ZWQgYnkgUm9iZXJ0byAgQWxhbWVkYS4gIEl0IGlzCisgICAgICAgIHN0aWxsIGV4cGVyaW1lbnRhbCBidXQgc2VlbXMgdG8gd29yayByZWxhdGl2ZWx5IHdlbGwuCisKKyAgICAgICogQSBQRlIgIGZvbnQgZHJpdmVyLCBjb250cmlidXRlZCAgYnkgRGF2aWQgVHVybmVyICBoaW1zZWxmLiAgSXQKKyAgICAgICAgZG9lc24ndCAgc3VwcG9ydCBQRlIgIGhpbnRpbmcgLS0gIG5vdGUgdGhhdCAgQml0U3RyZWFtICBoYXMgYXQKKyAgICAgICAgbGVhc3QgdHdvIHBhdGVudHMgb24gdGhpcyBmb3JtYXQhCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlICBjYWNoZSAgc3ViLXN5c3RlbSBoYXMgIGJlZW4gIG9wdGltaXplZCAgaW4gaW1wb3J0YW50ICB3YXlzLgorICAgICAgQ2FjaGUgaGl0cyBhcmUgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyLiAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZQorICAgICAgQ01hcCBjYWNoZSBpcyBhYm91dCAgdHdpY2UgZmFzdGVyIHRoYW4gY2FsbGluZyBGVF9HZXRfQ2hhcl9JbmRleAorICAgICAgb24gbW9zdCBwbGF0Zm9ybXMuICBTaW1pbGFybHksIHVzaW5nIGFuIFNCaXQgY2FjaGUgaXMgYWJvdXQgZml2ZQorICAgICAgdGltZXMgZmFzdGVyICB0aGFuIGxvYWRpbmcgdGhlICBiaXRtYXBzIGZyb20gYSBiaXRtYXAgIGZpbGUsIGFuZAorICAgICAgMzAwIHRvICA1MDAgdGltZXMgIGZhc3RlciB0aGFuIGdlbmVyYXRpbmcgIHRoZW0gZnJvbSAgYSBzY2FsYWJsZQorICAgICAgZm9ybWF0LgorCisgICAgICBOb3RlIHRoYXQgIHlvdSBzaG91bGQgcmVjb21waWxlICB5b3VyIHNvdXJjZXMgaWYgeW91ICBkZXNpZ25lZCBhCisgICAgICBjdXN0b20gIGNhY2hlICBjbGFzcyBmb3IgIHRoZSAgRlQyICBDYWNoZSAgc3Vic3lzdGVtLCBzaW5jZSAgdGhlCisgICAgICBjaGFuZ2VzIHBlcmZvcm1lZCBhcmUgc291cmNlLCBidXQgbm90IGJpbmFyeSwgY29tcGF0aWJsZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjEuMCBhbmQgMi4wLjkKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFRoZSAgVHJ1ZVR5cGUgYnl0ZWNvZGUgIGludGVycHJldGVyICBoYXMgYmVlbiAgZml4ZWQgdG8gIHByb2R1Y2UKKyAgICAgIF9leGFjdGx5XyB0aGUgc2FtZSBvdXRwdXQgYXMgRnJlZVR5cGUgMS54LiAgUHJldmlvdXMgZGlmZmVyZW5jZXMKKyAgICAgIHdlcmUgZHVlICB0byBzbGlnaHRseSBkaXN0aW5jdCAgZml4ZWQtcG9pbnQgY29tcHV0YXRpb24gcm91dGluZXMKKyAgICAgIHVzZWQgdG8gcGVyZm9ybSBkb3QgcHJvZHVjdHMgYW5kIHZlY3RvciBsZW5ndGggbWVhc3VyZW1lbnRzLgorCisgICAgICBJdCBzZWVtcyAgdGhhdCBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyAgaXMgX2V4dHJlbWVseV8gc2Vuc2l0aXZlCisgICAgICB0byAgcm91bmRpbmcgZXJyb3JzLiAgVGhlICByZXF1aXJlZCB2ZWN0b3IgIGNvbXB1dGF0aW9uIHJvdXRpbmVzCisgICAgICBoYXZlIGJlZW4gb3B0aW1pemVkIGFuZCBwbGFjZWQgd2l0aGluIHRoZSBgdHRpbnRlcnAuYycgZmlsZS4KKworICAgIC0gRml4ZWQgdGhlIHBhcnNpbmcgb2YgYWNjZWxlcmF0b3IgdGFibGVzIGluIHRoZSBQQ0YgZm9udCBkcml2ZXIuCisKKyAgICAtIEZpeGVkIHRoZSBUeXBlMSBnbHlwaCBsb2FkZXIgIHJvdXRpbmUgdXNlZCB0byBjb21wdXRlIHRoZSBmb250J3MKKyAgICAgIG1heGltdW0gYWR2YW5jZSB3aWR0aC4KKworCisgIElJLiBORVcgRkVBVFVSRVMKKworICAgIC0gVGhlIGBjb25maWd1cmUnIHNjcmlwdCB1c2VkIG9uIFVuaXggc3lzdGVtcyBoYXMgYmVlbiBtb2RpZmllZCB0bworICAgICAgY2hlY2sgIHRoYXQgIEdOVSAgTWFrZSAgaXMgIGJlaW5nIHVzZWQgIHRvICBidWlsZCAgdGhlICBsaWJyYXJ5LgorICAgICAgT3RoZXJ3aXNlLCAgaXQgIHdpbGwgZGlzcGxheSAgYSAgbWVzc2FnZSAgcHJvcG9zaW5nICB0byB1c2UgIHRoZQorICAgICAgR05VTUFLRSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBuYW1lIGl0LgorCisgICAgICBUaGUgVW5peC1zcGVjaWZpYyBmaWxlIFJFQURNRS5VTlggaGFzIGJlZW4gbW9kaWZpZWQgYWNjb3JkaW5nbHkuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlICBGcmVlVHlwZSAgTGljZW5zZSBpbiAgYGRvY3MvRlRMLlRYVCcgIGhhcyAgYmVlbiB1cGRhdGVkICB0bworICAgICAgaW5jbHVkZSAgYSAgcHJvcG9zZWQgcHJlZmVycmVkICBkaXNjbGFpbWVyLiAgIElmICB5b3UgYXJlICB1c2luZworICAgICAgRnJlZVR5cGUgaW4geW91ciBwcm9kdWN0cywgeW91IGFyZSBlbmNvdXJhZ2VkIChidXQgbm90IG1hbmRhdGVkKQorICAgICAgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbiB5b3VyIGRvY3VtZW50YXRpb246CisKKyAgICAgICIiIgorICAgICAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQgwqkgMTk5Ni0yMDAyIFRoZQorICAgICAgICBGcmVlVHlwZSBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICAiIiIKKworICAgIC0gVGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgcmVuZGVyIHBvb2wgaGFzIGJlZW4gcmVkdWNlZCB0byAxNmtCeXRlLgorICAgICAgVGhpcyAgc2hvdWxkbid0IHJlc3VsdCAgaW4gYW55ICBub3RpY2VhYmxlICBwZXJmb3JtYW5jZSBwZW5hbHR5LAorICAgICAgdW5sZXNzIHlvdSBhcmUgIHVzaW5nIHRoZSBlbmdpbmUgYXMtaXMgdG8gIHJlbmRlciB2ZXJ5IGxhcmdlIGFuZAorICAgICAgY29tcGxleCBnbHlwaHMuCisKKyAgICAtIFRoZSAgRnJlZVR5cGUgMiAgcmVkZXNpZ24gaGFzICBiZWd1bi4gIE1vcmUgIGluZm9ybWF0aW9uICBjYW4gYmUKKyAgICAgIGZvdW5kIGF0IHRoaXMgVVJMOgorCisgICAgICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9yZWRlc2lnbi5odG1sCisKKyAgICAgIFRoZSBmb2xsb3dpbmcgIGludGVybmFsIGNoYW5nZXMgIGhhdmUgYmVlbiBwZXJmb3JtZWQgIHdpdGhpbiB0aGUKKyAgICAgIHNvdXJjZXMgb2YgdGhpcyByZWxlYXNlOgorCisgICAgICAgIC0gTWFueSAgIGludGVybmFsICB0eXBlcyAgIGhhdmUgIGJlZW4gICByZW5hbWVkICAgdG8gIGluY3JlYXNlCisgICAgICAgICAgY29uc2lzdGVuY3kuICAgVGhlICBmb2xsb3dpbmcgIHNob3VsZCAgYmUgdHJ1ZSwgIGV4Y2VwdCAgZm9yCisgICAgICAgICAgcHVibGljIHR5cGVzOgorCisgICAgICAgICAgICAqIEFsbCBzdHJ1Y3R1cmUgIHR5cGVzIGhhdmUgYSBuYW1lIGVuZGluZyAgaW4gYFJlYycgKHNob3J0CisgICAgICAgICAgICAgIGZvciBgcmVjb3JkJykuCisKKyAgICAgICAgICAgICogQSAgcG9pbnRlci10by1zdHJ1Y3R1cmUgdHlwZSAgaGFzIHRoZSAgc2FtZSBuYW1lICBhcyB0aGUKKyAgICAgICAgICAgICAgc3RydWN0dXJlLCBfd2l0aG91dF8gdGhlIGBSZWMnIHN1ZmZpeC4KKworICAgICAgICAgICAgICBFeGFtcGxlOgorCisgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgRm9vUmVjXworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC4uLgorCisgICAgICAgICAgICAgICAgfSBGb29SZWMsICpGb287CisKKyAgICAgICAgLSBNYW55ICAgaW50ZXJuYWwgIG1hY3JvcyAgaGF2ZSAgIGJlZW4gIHJlbmFtZWQgICB0byAgaW5jcmVhc2UKKyAgICAgICAgICBjb25zaXN0ZW5jeS4gIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHRydWU6CisKKyAgICAgICAgICAgICogQWxsICBtYWNyb3MgIGhhdmUgYSAgbmFtZSAgYmVnaW5uaW5nICB3aXRoIGBGVF8nLiAgIFRoaXMKKyAgICAgICAgICAgICAgcmVxdWlyZWQgYSBmZXcgY2hhbmdlcyBsaWtlCisKKyAgICAgICAgICAgICAgICBBTExPQyAgID0+IEZUX0FMTE9DCisgICAgICAgICAgICAgICAgRlJFRSAgICA9PiBGVF9GUkVFCisgICAgICAgICAgICAgICAgUkVBTExPQyA9PiBGVF9SRUFMTE9DCisKKyAgICAgICAgICAgICogQWxsICBtYWNyb3MgYXJlIGNvbXBsZXRlbHkgIFVQUEVSQ0FTRS4gIFRoaXMgIHJlcXVpcmVkIGEKKyAgICAgICAgICAgICAgZmV3IGNoYW5nZXMgbGlrZToKKworICAgICAgICAgICAgICAgIFJFQURfU2hvcnQgID0+IEZUX1JFQURfU0hPUlQKKyAgICAgICAgICAgICAgICBORVhUX1Nob3J0ICA9PiBGVF9ORVhUX1NIT1JUCisgICAgICAgICAgICAgICAgR0VUX1VMb25nTEUgPT4gRlRfR0VUX1VMT05HX0xFCisgICAgICAgICAgICAgICAgTUVNX1NldCAgICAgPT4gRlRfTUVNX1NFVAorICAgICAgICAgICAgICAgIE1FTV9Db3B5ICAgID0+IEZUX01FTV9DT1BZCisgICAgICAgICAgICAgICAgZXRjLgorCisgICAgICAgICAgICAqIFdoZW5ldmVyICAgcG9zc2libGUsICAgYWxsICAgbWFjcm8gIG5hbWVzICAgZm9sbG93ICAgdGhlCisgICAgICAgICAgICAgIEZUXzxPQkpFQ1Q+XzxNRVRIT0Q+IHBhdHRlcm4uICBGb3IgZXhhbXBsZQorCisgICAgICAgICAgICAgICAgQUNDRVNTX0ZyYW1lICAgPT4gRlRfRlJBTUVfRU5URVIKKyAgICAgICAgICAgICAgICBGT1JHRVRfRnJhbWUgICA9PiBGVF9GUkFNRV9FWElUCisgICAgICAgICAgICAgICAgRVhUUkFDVF9GcmFtZSAgPT4gRlRfRlJBTUVfRVhUUkFDVAorICAgICAgICAgICAgICAgIFJFTEVBU0VfRnJhbWUgID0+IEZUX0ZSQU1FX1JFTEVBU0UKKworICAgICAgICAgICAgICAgIEZJTEVfUG9zICAgICAgID0+IEZUX1NUUkVBTV9QT1MKKyAgICAgICAgICAgICAgICBGSUxFX1NlZWsgICAgICA9PiBGVF9TVFJFQU1fU0VFSworICAgICAgICAgICAgICAgIEZJTEVfUmVhZCAgICAgID0+IEZUX1NUUkVBTV9SRUFECisgICAgICAgICAgICAgICAgRklMRV9SZWFkQXQgICAgPT4gRlRfU1RSRUFNX1JFQURfQVQKKyAgICAgICAgICAgICAgICBSRUFEX0ZpZWxkcyAgICA9PiBGVF9TVFJFQU1fUkVBRF9GSUVMRFMKKworICAgICAgICAtIE1hbnkgIGludGVybmFsIGZ1bmN0aW9ucyAgaGF2ZSAgYmVlbiByZW5hbWVkICB0byBmb2xsb3cgIHRoZQorICAgICAgICAgIEZUXzxPYmplY3Q+XzxNZXRob2Q+IHBhdHRlcm4uICBGb3IgZXhhbXBsZToKKworICAgICAgICAgICAgRlRfU2Vla19TdHJlYW0gICAgICAgPT4gRlRfU3RyZWFtX1NlZWsKKyAgICAgICAgICAgIEZUX1JlYWRfU3RyZWFtX0F0ICAgID0+IEZUX1N0cmVhbV9SZWFkQXQKKyAgICAgICAgICAgIEZUX0RvbmVfU3RyZWFtICAgICAgID0+IEZUX1N0cmVhbV9DbG9zZQorICAgICAgICAgICAgRlRfTmV3X1N0cmVhbSAgICAgICAgPT4gRlRfU3RyZWFtX09wZW4KKyAgICAgICAgICAgIEZUX05ld19NZW1vcnlfU3RyZWFtID0+IEZUX1N0cmVhbV9PcGVuTWVtb3J5CisgICAgICAgICAgICBGVF9FeHRyYWN0X0ZyYW1lICAgICA9PiBGVF9TdHJlYW1fRXh0cmFjdEZyYW1lCisKKyAgICAgICAgICBOb3RlIHRoYXQgbWV0aG9kIG5hbWVzIGRvIG5vdCBjb250YWluIGBfJy4KKworICAgICAgICAtIFRoZSBGVF9BTExPQ19BUlJBWSAgYW5kIEZUX1JFQUxMT0NfQVJSQVkgaGF2ZSAgYmVlbiByZXBsYWNlZAorICAgICAgICAgIHdpdGggIEZUX05FV19BUlJBWSBhbmQgIEZUX1JFTkVXX0FSUkFZIHdoaWNoICBkbyBub3QgIHRha2UgYQorICAgICAgICAgIHR5cGUgIGFzIHRoZSAgZm91cnRoIGFyZ3VtZW50LiAgIEluc3RlYWQsIHRoZSAgYXJyYXkgZWxlbWVudAorICAgICAgICAgIHR5cGUgIHNpemUgaXMgY29tcHV0ZWQgIGF1dG9tYXRpY2FsbHkgZnJvbSAgdGhlIHR5cGUgIG9mIHRoZQorICAgICAgICAgIHRhcmdldCBwb2ludGVyIHVzZWQuCisKKyAgICAgICAgLSBBICBuZXcgb2JqZWN0ICBjbGFzcywgRlRfQ01hcCwgIGhhcyBiZWVuICBpbnRyb2R1Y2VkLiAgVGhlc2UKKyAgICAgICAgICBpbnRlcm5hbCAgb2JqZWN0cyBhcmUgIHVzZWQgdG8gIG1vZGVsIGNoYXJhY3RlciAgbWFwcy4gIFRoaXMKKyAgICAgICAgICBlYXNlcyAgdGhlIHN1cHBvcnQgIG9mIGFkZGl0aW9uYWwgIGNoYXJtYXAgdHlwZXMgIHdpdGhpbiB0aGUKKyAgICAgICAgICBlbmdpbmUuCisKKyAgICAgICAgLSBBIG5ldyAgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVkIGBmdHN0ZGxpYi5oJyAgaGFzIGJlZW4gYWRkZWQKKyAgICAgICAgICB0byBgaW5jbHVkZS9mcmVldHlwZS9jb25maWcnLiAgSXQgIGlzIHVzZWQgdG8gZGVmaW5lIGFsaWFzZXMKKyAgICAgICAgICBmb3IgIF9ldmVyeV8gcm91dGluZSAgb2YgdGhlICBJU08gIEMgbGlicmFyeSAgdGhhdCB0aGUgIGZvbnQKKyAgICAgICAgICBlbmdpbmUgICB1c2VzLiAgICBFYWNoICAgIGFsaWFzZXMgICBoYXMgICBhICAgYGZ0XycgICBwcmVmaXgKKyAgICAgICAgICAoZS5nLiBgZnRfc3RybGVuJyBpcyBhbiBhbGlhcyBmb3IgYHN0cmxlbicpLgorCisgICAgICAgICAgVGhpcyBpcyAgdXNlZCB0byAgZWFzZSB0aGUgcG9ydGluZyAgb2YgRnJlZVR5cGUgMiAgdG8gZXhvdGljCisgICAgICAgICAgcnVudGltZSBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIElTTyBDIExpYnJhcnkgaXNuJ3QgYXZhaWxhYmxlCisgICAgICAgICAgKGUuZy4gIFhGcmVlODYgZXh0ZW5zaW9uIG1vZHVsZXMpLgorCisgICAgICBNb3JlIGRldGFpbHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYENoYW5nZUxvZycgZmlsZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjAuOSBhbmQgMi4wLjgKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIENlcnRhaW4gZm9udHMgbGlrZSBgZm94anVtcC50dGYnIGNvbnRhaW4gYnJva2VuIG5hbWUgdGFibGVzIHdpdGgKKyAgICAgIGludmFsaWQgZW50cmllcyBhbmQgd2lsZCBvZmZzZXRzLiAgVGhpcyBjYXVzZWQgRnJlZVR5cGUgdG8gY3Jhc2gKKyAgICAgIHdoZW4gdHJ5aW5nIHRvIGxvYWQgdGhlbS4KKworICAgICAgVGhlICBTRk5UIGBuYW1lJyAgdGFibGUgIGxvYWRlciBoYXMgIGJlZW4gIGZpeGVkIHRvICBiZSBhYmxlICB0bworICAgICAgc3VwcG9ydCB0aGVzZSBzdHJhbmdlIGZvbnRzLgorCisgICAgICBNb3Jlb3ZlciwgdGhlIGNvZGUgIGluIGNoYXJnZSBvZiBwcm9jZXNzaW5nIHRoaXMgIHRhYmxlIGhhcyBiZWVuCisgICAgICBjaGFuZ2VkICB0byBhbHdheXMgZmF2b3VyICBXaW5kb3dzLWZvcm1hdHRlZCBlbnRyaWVzICBvdmVyIG90aGVyCisgICAgICBvbmVzLiAgSGVuY2UsICBhIGZvbnQgdGhhdCB3b3JrcyAgb24gV2luZG93cyBidXQgbm90ICBvbiB0aGUgTWFjCisgICAgICB3aWxsICBsb2FkIGNsZWFubHkgaW4gIEZyZWVUeXBlIGFuZCAgcmVwb3J0IGFjY3VyYXRlICB2YWx1ZXMgZm9yCisgICAgICBGYW1pbHkgJiBQb3N0U2NyaXB0IG5hbWVzLgorCisgICAgLSBUaGUgQ0lEIGZvbnQgZHJpdmVyIGhhcyBiZWVuIGZpeGVkLiAgSXQgdW5mb3J0dW5hdGVseSByZXR1cm5lZCBhCisgICAgICBQb3N0c2NyaXB0ICAgRm9udCAgIG5hbWUgICB3aXRoICAgYSAgIGxlYWRpbmcgICBzbGFzaCwgICBhcyAgIGluCisgICAgICBgL011bmh3YUdvdGhpYy1SZWd1bGFyJy4KKworICAgIC0gRnJlZVR5cGUgIDIgc2hvdWxkIG5vdyAgY29tcGlsZSBmaW5lICBvbiBBSVggIDQuMy4zIGFzICBhIHNoYXJlZAorICAgICAgbGlicmFyeS4KKworICAgIC0gQSAgYnVnICBpbiB0aGUgIFBvc3RzY3JpcHQgIGhpbnRlciAgaGFzICBiZWVuIGZvdW5kICBhbmQgIGZpeGVkLAorICAgICAgcmVtb3ZpbmcgdW4tZXZlbiBzdGVtIHdpZHRocyBhdCBzbWFsbCBwaXhlbCBzaXplcyAobGlrZSAxNC0xNykuCisKKyAgICAgIFRoaXMgIGltcHJvdmVzIHRoZSAgcXVhbGl0eSBvZiAgYSBjZXJ0YWluICBudW1iZXIgIG9mIFBvc3RzY3JpcHQKKyAgICAgIGZvbnRzLgorCisKKyAgSUkuIE5FVyBGRUFUVVJFUworCisgICAgLSBBICBuZXcgZnVuY3Rpb24gIG5hbWVkICBgRlRfTGlicmFyeV9WZXJzaW9uJyBoYXMgIGJlZW4gYWRkZWQgIHRvCisgICAgICByZXR1cm4gIHRoZSBjdXJyZW50ICBsaWJyYXJ5J3MgbWFqb3IsICBtaW5vciwgYW5kICBwYXRjaCB2ZXJzaW9uCisgICAgICBudW1iZXJzLiAgIFRoaXMgaXMgIGltcG9ydGFudCBzaW5jZSAgdGhlICBtYWNyb3MgRlJFRVRZUEVfTUFKT1IsCisgICAgICBGUkVFVFlQRV9NSU5PUiwgIGFuZCAgRlJFRVRZUEVfUEFUQ0ggIGNhbm5vdCAgYmUgdXNlZCAgd2hlbiAgdGhlCisgICAgICBsaWJyYXJ5IGlzIGR5bmFtaWNhbGx5IGxpbmtlZCBieSBhIHByb2dyYW0uCisKKyAgICAtIFR3byAgIG5ldyAgQVBJcyAgIGhhdmUgIGJlZW4gICBhZGRlZDogICBgRlRfR2V0X0ZpcnN0X0NoYXInICBhbmQKKyAgICAgIGBGVF9HZXRfTmV4dF9DaGFyJy4KKworICAgICAgVG9nZXRoZXIsICB0aGVzZSBjYW4gIGJlIHVzZWQgIHRvIGl0ZXJhdGUgIGVmZmljaWVudGx5ICBvdmVyIHRoZQorICAgICAgY3VycmVudGx5ICBzZWxlY3RlZCAgY2hhcm1hcCBvZiAgYSAgZ2l2ZW4gIGZhY2UuICAgUmVhZCB0aGUgIEFQSQorICAgICAgcmVmZXJlbmNlIGZvciBtb3JlIGRldGFpbHMuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gVGhlIEZyZWVUeXBlIHNvdXJjZXMgYXJlICB1bmRlciBoZWF2eSBpbnRlcm5hbCByZS1mYWN0b3JpbmcuICBBcworICAgICAgYSBjb25zZXF1ZW5jZSwgIHdlIGhhdmUgY3JlYXRlZCAgYSBicmFuY2ggbmFtZWQgYFNUQUJMRScgIG9uIHRoZQorICAgICAgQ1ZTIHRvIGhvbGQgYWxsIGZ1dHVyZSByZWxlYXNlcy9maXhlcyBpbiB0aGUgMi4wLnggZmFtaWx5LgorCisgICAgICBUaGUgIEhFQUQgIGJyYW5jaCAgbm93ICBjb250YWlucyAgdGhlICByZS1mYWN0b3JlZCAgc291cmNlcyAgYW5kCisgICAgICBzaG91bGRuJ3QgIGJlIHVzZWQgZm9yICB0ZXN0aW5nIG9yICBwYWNrYWdpbmcgbmV3ICByZWxlYXNlcy4gIEluCisgICAgICBjYXNlIHlvdSAgd291bGQgbGlrZSAgdG8gYWNjZXNzIHRoZSAgMi4wLjkgc291cmNlcyBmcm9tICBvdXIgQ1ZTCisgICAgICByZXBvc2l0b3J5LCB1c2UgdGhlIHRhZyBgVkVSLTItMC05Jy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjAuOCBhbmQgMi4wLjcKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIFRoZXJlIHdhcyAgYSBzbWFsbCBidXQgIG5hc3R5IGJ1ZyBpbiAgYGZyZWV0eXBlLWNvbmZpZy5pbicgd2hpY2gKKyAgICAgIGNhdXNlZCB0aGUgYGZyZWV0eXBlLWNvbmZpZycgc2NyaXB0IHRvIGZhaWwgb24gVW5peC4KKworICAgICAgVGhpcyBkaWRuJ3QgcHJldmVudCB0aGUgaW5zdGFsbGF0aW9uICBvZiB0aGUgbGlicmFyeSBvciBldmVuIGl0cworICAgICAgZXhlY3V0aW9uLCBidXQgY2F1c2VkIHByb2JsZW1zICB3aGVuIHRyeWluZyB0byBjb21waWxlIG1hbnkgVW5peAorICAgICAgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24gaXQuCisKKyAgICAtIFNvbWUgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgZm9udHMgZW1iZWRkZWQgaW4gUERGIGRvY3VtZW50cyBkbyBub3QKKyAgICAgIGhhdmUgIGEgICdjbWFwJywgICdwb3N0JyAgYW5kICAnbmFtZScgIGFzICBpcyAgcmVxdWlyZWQgIGJ5ICB0aGUKKyAgICAgIHNwZWNpZmljYXRpb24uICBGcmVlVHlwZSBubyBsb25nZXIgcmVmdXNlcyB0byBsb2FkIHN1Y2ggZm9udHMuCisKKyAgICAtIFZhcmlvdXMgZml4ZXMgdG8gdGhlIFBDRiBmb250IGRyaXZlci4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjAuNyBhbmQgMi4wLjYKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIEZpeGVkICB0d28gIGJ1Z3MgaW4gIHRoZSAgVHlwZSAxICBmb250ICBkcml2ZXIuICAgVGhlIGZpcnN0ICBvbmUKKyAgICAgIHJlc3VsdGVkIGluIGEgbWVtb3J5IGxlYWsgaW4gc3VidGxlIGNhc2VzLiAgVGhlIG90aGVyIG9uZSBjYXVzZWQKKyAgICAgIEZyZWVUeXBlIHRvIGNyYXNoIHdoZW4gIHRyeWluZyB0byBsb2FkIGAuZ3NmJyBmaWxlcyAoR2hvc3RzY3JpcHQKKyAgICAgIHNvLWNhbGxlZCBQb3N0c2NyaXB0IGZvbnRzKS4KKworICAgICAgKFRoaXMgIG1hZGUgX21hbnlfICBLREUgYXBwbGljYXRpb25zICBjcmFzaCBvbiAgY2VydGFpbiBzeXN0ZW1zLgorICAgICAgIEZyZWVUeXBlIF9pc18gYmVjb21pbmcgYSBjcml0aWNhbCBzeXN0ZW0gY29tcG9uZW50IG9uIExpbnV4IDotKQorCisgICAgLSBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBDRkYgZm9udCBkcml2ZXIuCisKKyAgICAtIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIFBDRiBmb250IGRyaXZlci4KKworICAgIC0gRml4ZWQgICAgICAgdGhlICAgICAgICBWaXN1YWwgICAgICAgQysrICAgICAgIHByb2plY3QgICAgICAgZmlsZQorICAgICAgYGJ1aWxkcy93aW4zMi92aXN1YWxjL2ZyZWV0eXBlLmRzcCcgc2luY2UgIGl0IGRpZG4ndCBpbmNsdWRlIHRoZQorICAgICAgUG9zdHNjcmlwdCBoaW50ZXIgY29tcG9uZW50LCBjYXVzaW5nIGVycm9ycyBhdCBidWlsZCB0aW1lLgorCisgICAgLSBGaXhlZCBhICBzbWFsbCByZW5kZXJpbmcgYnVnICBpbiB0aGUgYW50aS1hbGlhc2VkICByZW5kZXJlciB0aGF0CisgICAgICBvbmx5ICBvY2N1cnJlZCB3aGVuICB0cnlpbmcgdG8gIGRyYXcgIHRoaW4gKGxlc3MgIHRoYW4gMSAgcGl4ZWwpCisgICAgICBzdHJva2VzLgorCisgICAgLSBGaXhlZCAgYGJ1aWxkcy91bml4L2ZyZWV0eXBlMi5hNCcgd2hpY2ggIGlzIHVzZWQgIHRvICBnZW5lcmF0ZSBhCisgICAgICB2YWxpZCBgZnJlZXR5cGUyLm00JyBmb3IgdXNlIHdpdGggYXV0b2NvbmYuCisKKyAgICAtIEZpeGVkIHRoZSBPcGVuVk1TIE1ha2VmaWxlcy4KKworCisgIElJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIEFkZGVkICBgY29uZmlndXJlJyAgYW5kICAgYGluc3RhbGwnICBzY3JpcHRzICB0byAgdGhlICB0b3AtbGV2ZWwKKyAgICAgIGRpcmVjdG9yeS4gIEEgR05VLXN0eWxlIGluc3RhbGxhdGlvbiBpcyB0aHVzIG5vdyBlYXNpbHkgcG9zc2libGUKKyAgICAgIHdpdGgKKworICAgICAgICAuL2NvbmZpZ3VyZSAgPG9wdGlvbnM+CisgICAgICAgIG1ha2UKKyAgICAgICAgbWFrZSBpbnN0YWxsCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4wLjYgYW5kIDIuMC41CisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBJdCB3YXNuJ3QgcG9zc2libGUgdG8gbG9hZCBlbWJlZGRlZCBiaXRtYXBzIHdoZW4gdGhlIGF1dG8taGludGVyCisgICAgICB3YXMgdXNlZC4gIFRoaXMgaXMgbm93IGZpeGVkLgorCisgICAgLSBUaGUgVHJ1ZVR5cGUgIGZvbnQgZHJpdmVyICBkaWRuJ3QgbG9hZCBzb21lICBjb21wb3NpdGVzIHByb3Blcmx5CisgICAgICAodGhlICBzdWItZ2x5cGhzICB3ZXJlICBzbGlnaHRseSAgc2hpZnRlZCwgIGFuZCAgdGhpcyAgd2FzICBvbmx5CisgICAgICBub3RpY2VhYmxlIHdoZW4gdXNpbmcgbW9ub2Nocm9tZSByZW5kZXJpbmcpLgorCisgICAgLSBWYXJpb3VzICBmaXhlcyAgdG8gdGhlICBhdXRvLWhpbnRlci4gICBUaGV5ICBtZXJlbHkgaW1wcm92ZSAgdGhlCisgICAgICBvdXRwdXQgb2Ygc2Fucy1zZXJpZiBmb250cy4gICBOb3RlIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHByb2JsZW1zCisgICAgICB3aXRoIHNlcmlmZWQgZm9udHMgYW5kIGNvbXBvc2l0ZXMgKGFjY2VudGVkIGNoYXJhY3RlcnMpLgorCisgICAgLSBBbGwgc2NhbGFibGUgIGZvbnQgZHJpdmVycyBlcnJvbmVvdXNseSAgcmV0dXJuZWQgdW4tZml0dGVkIGdseXBoCisgICAgICBhZHZhbmNlcyB3aGVuIGhpbnRpbmcgd2FzICByZXF1ZXN0ZWQuICBUaGlzIGNyZWF0ZWQgcHJvYmxlbXMgZm9yCisgICAgICBhIG51bWJlciAgb2YgbGF5b3V0IGFwcGxpY2F0aW9ucy4gIFRoaXMgIGlzIGEgdmVyeSAgb2xkIGJ1ZyB0aGF0CisgICAgICBnb3QgIHVuZGV0ZWN0ZWQgbWFpbmx5ICBiZWNhdXNlIG1vc3QgIHRlc3QvZGVtbyAgcHJvZ3JhbSBwZXJmb3JtCisgICAgICByb3VuZGluZyBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgKHRocm91Z2ggdGhlIGNhY2hlKS4KKworICAgIC0gYEZUX0dseXBoX1RvX0JpdG1hcCcgZGlkIGVycm9uZW91c2x5ICBtb2RpZnkgdGhlIHNvdXJjZSBnbHlwaCBpbgorICAgICAgY2VydGFpbiBjYXNlcy4KKworICAgIC0gYGdsbmFtZXMucHknICBzdGlsbCBjb250YWluZWQgIGEgYnVnICB0aGF0IG1hZGUgIEZyZWVUeXBlIHJldHVybgorICAgICAgaW52YWxpZCBuYW1lcyBmb3IgY2VydGFpbiBnbHlwaHMuCisKKyAgICAtIFRoZSAgbGlicmFyeSBjcmFzaGVkICB3aGVuICBsb2FkaW5nIGNlcnRhaW4gIFR5cGUgIDEgZm9udHMgIGxpa2UKKyAgICAgIGBzYWRuLnBmYicgIChgU3RhbGluZ3JhZCAgTm9ybWFsJyksICAgd2hpY2ggIGFwcGVhciAgdG8gIGNvbnRhaW4KKyAgICAgIHBhdGhldGljIGZvbnQgaW5mbyBkaWN0aW9uYXJpZXMuCisKKyAgICAtIFRoZSBUcnVlVHlwZSBnbHlwaCAgbG9hZGVyIGlzIG5vdyBtdWNoIG1vcmUgIHBhcmFub2lkIGFuZCBjaGVja3MKKyAgICAgIGV2ZXJ5dGhpbmcgd2hlbiBsb2FkaW5nIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UuICBUaGlzIHdhcyBuZWNlc3NhcnkKKyAgICAgIHRvIGF2b2lkIHByb2JsZW1zIChjcmFzaGVzIGFuZC9vciBtZW1vcnkgb3ZlcndyaXRlcykgd2l0aCBicm9rZW4KKyAgICAgIGZvbnRzIHRoYXQgY2FtZSBmcm9tIGEgcmVhbGx5IGJ1Z2d5IGF1dG9tYXRpYyBmb250IGNvbnZlcnRlci4KKworCisgIElJLiBJTVBPUlRBTlQgVVBEQVRFUyBBTkQgTkVXIEZFQVRVUkVTCisKKyAgICAtIEltcG9ydGFudCB1cGRhdGVzIHRvIHRoZSBNYWMtc3BlY2lmaWMgcGFydHMgb2YgdGhlIGxpYnJhcnkuCisKKyAgICAtIFRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gaGFzICBiZWVuIGNvbXBsZXRlbHkgcmUtZGVzaWduZWQsIGFuZCBpdHMKKyAgICAgIEFQSSBoYXMgIGV2b2x2ZWQgKHRoZSAgb2xkIG9uZSBpcyAgc3RpbGwgc3VwcG9ydGVkICBmb3IgYmFja3dhcmQKKyAgICAgIGNvbXBhdGliaWxpdHkpLgorCisgICAgICBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgaXQgaXMgIG5vdCB5ZXQgY29tcGxldGVkLCBzb3JyeS4gIEZvciBub3csCisgICAgICB5b3UgYXJlIGVuY291cmFnZWQgdG8gY29udGludWUgIHVzaW5nIHRoZSBvbGQgQVBJLiAgSG93ZXZlciwgdGhlCisgICAgICBmdHZpZXcgIGRlbW8gcHJvZ3JhbSBpbiAgdGhlIGZ0MmRlbW9zICBwYWNrYWdlIGhhcyAgYWxyZWFkeSBiZWVuCisgICAgICB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNhY2hpbmcgZnVuY3Rpb25zLgorCisgICAgLSBBIG5ldyBjaGFybWFwIGNhY2hlIGlzIHByb3ZpZGVkIHRvby4gIFNlZSBgRlRDX0NNYXBDYWNoZScuICBUaGlzCisgICAgICBpcyB1c2VmdWwgdG8gcGVyZm9ybSAgY2hhcmFjdGVyIGNvZGUgLT4gZ2x5cGggaW5kZXggdHJhbnNsYXRpb25zCisgICAgICBxdWlja2x5LCB3aXRob3V0IHRoZSBuZWVkIGZvciBhbiBvcGVuZWQgRlRfRmFjZS4KKworICAgIC0gQSBORVcgUE9TVFNDUklQVCBISU5URVIgbW9kdWxlICBoYXMgYmVlbiBhZGRlZCB0byBzdXBwb3J0IG5hdGl2ZQorICAgICAgaGludHMgaW4gIHRoZSBmb2xsb3dpbmcgIGZvcm1hdHM6IFBvc3RTY3JpcHQgVHlwZSAgMSwgUG9zdFNjcmlwdAorICAgICAgQ0lELCBhbmQgQ0ZGL0NFRi4KKworICAgICAgUGxlYXNlIHRlc3QhICBOb3RlIHRoYXQgIHRoZSBhdXRvLWhpbnRlciBwcm9kdWNlcyBiZXR0ZXIgcmVzdWx0cworICAgICAgZm9yIGEgbnVtYmVyIG9mICBiYWRseS1oaW50ZWQgZm9udHMgKG1vc3RseSBhdXRvLWdlbmVyYXRlZCBvbmVzKQorICAgICAgdGhvdWdoLgorCisgICAgLSBBIG1lbW9yeSBkZWJ1Z2dlciBpcyBub3cgIHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZyZWVUeXBlIHNvdXJjZXMuCisgICAgICBUbyAgICAgIGVuYWJsZSAgICAgIGl0LCAgICAgIGRlZmluZSAgICAgIEZUX0RFQlVHX01FTU9SWSAgICAgIGluCisgICAgICA8ZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg+LCBhbmQgcmVjb21waWxlIHRoZSBsaWJyYXJ5LgorCisgICAgICBBZGRpdGlvbmFsbHksIGRlZmluZSAgdGhlIF9lbnZpcm9ubWVudF8gdmFyaWFibGUgRlRfREVCVUdfTUVNT1JZCisgICAgICBhbmQgcnVuIGFueSBwcm9ncmFtIHVzaW5nIEZyZWVUeXBlLiAgV2hlbiB0aGUgbGlicmFyeSBpcyBleGl0ZWQsCisgICAgICBhICBzdW1tYXJ5ICBvZiBtZW1vcnkgIGZvb3RwcmludHMgIGFuZCAgcG9zc2libGUgIGxlYWtzIHdpbGwgIGJlCisgICAgICBkaXNwbGF5ZWQuCisKKyAgICAgIFRoaXMgd29ya3MgdHJhbnNwYXJlbnRseSB3aXRoICBfYW55XyBwcm9ncmFtIHRoYXQgdXNlcyBGcmVlVHlwZS4KKyAgICAgIEhvd2V2ZXIsIHlvdSAgd2lsbCBuZWVkIGEgbG90ICBvZiBtZW1vcnkgdG8gIHVzZSB0aGlzIChhbGxvY2F0ZWQKKyAgICAgIGJsb2NrcyBhcmUgbmV2ZXIgIHJlbGVhc2VkIHRvIHRoZSBoZWFwIHRvICBkZXRlY3QgZG91YmxlIGRlbGV0ZXMKKyAgICAgIGVhc2lseSkuCisKKworICBJSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gV2UgIGFyZSAgYXdhcmUgIG9mICBzdWJ0bGUgIGRpZmZlcmVuY2VzIGJldHdlZW4gIHRoZSAgb3V0cHV0ICBvZgorICAgICAgRnJlZVR5cGUgIHZlcnNpb25zICAgMSAgYW5kICAyICB3aGVuICBpdCAgIGNvbWVzICB0byAgbW9ub2Nocm9tZQorICAgICAgVHJ1ZVR5cGUtaGludGVkIGdseXBocy4gICBUaGVzZSBhcmUgIG1vc3QgcHJvYmFibHkgZHVlICB0byBzbWFsbAorICAgICAgZGlmZmVyZW5jZXMgaW4gdGhlIG1vbm9jaHJvbWUgcmFzdGVyaXplcnMgYW5kIHdpbGwgYmUgd29ya2VkIG91dAorICAgICAgaW4gYW4gdXBjb21pbmcgcmVsZWFzZS4KKworICAgIC0gV2UgaGF2ZSBkZWNpZGVkIHRvIGZvcmsgdGhlIHNvdXJjZXMgaW4gYSBgc3RhYmxlJyBicmFuY2gsIGFuZCBhbgorICAgICAgYHVuc3RhYmxlJyBvbmUsIHNpbmNlIEZyZWVUeXBlICBpcyBiZWNvbWluZyBhIGNyaXRpY2FsIGNvbXBvbmVudAorICAgICAgb2YgbWFueSBVbml4IHN5c3RlbXMuCisKKyAgICAgIFRoZSBuZXh0ICBidWctZml4IHJlbGVhc2VzIG9mICB0aGUgbGlicmFyeSB3aWxsIGJlICBuYW1lZCAyLjAuNywKKyAgICAgIDIuMC44LCBldGMuLCAgd2hpbGUgdGhlIGAyLjEnICBicmFuY2ggd2lsbCBjb250YWluIGEgIHZlcnNpb24gb2YKKyAgICAgIHRoZSBzb3VyY2VzIHdoZXJlIHdlIHdpbGwgc3RhcnQgbWFqb3IgcmV3b3JraW5nIG9mIHRoZSBsaWJyYXJ5J3MKKyAgICAgIGludGVybmFscywgaW4gb3JkZXIgdG8gcHJvZHVjZSBGcmVlVHlwZSAyLjIuMCAob3IgZXZlbiAzLjApIGluIGEKKyAgICAgIG1vcmUgZGlzdGFudCBmdXR1cmUuCisKKyAgICAgIFdlICBhbHNvIGhvcGUgIHRoYXQgdGhpcyAgc2NoZW1lIHdpbGwgIGFsbG93IG11Y2ggIG1vcmUgZnJlcXVlbnQKKyAgICAgIHJlbGVhc2VzIHRoYW4gaW4gdGhlIHBhc3QuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4wLjUgYW5kIDIuMC40CisKKyAgTk9URSBUSEFUIDIuMC41IERPRVMgTk9UIENPTlRBSU4gVEhFIFBPU1RTQ1JJUFQgSElOVEVSLiAgVEhJUyBNT0RVTEUKKyAgV0lMTCBCRSBQQVJUIE9GIFRIRSBORVhUIFJFTEVBU0UgKEVJVEhFUiAyLjAuNiBvciAyLjEpCisKKyAgLSBGaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgIGNlcnRhaW4gZ2x5cGhzLCBsaWtlIGBDYWN1dGUnLCBgY2FjdXRlJyBhbmQKKyAgICBgbHNsYXNoJyAgdW5hdmFpbGFibGUgZnJvbSBVbmljb2RlICBjaGFybWFwcyBvZiAgUG9zdHNjcmlwdCBmb250cy4KKyAgICBUaGlzIHByZXZlbnRlZCB0aGUgY29ycmVjdCBkaXNwbGF5IG9mIFBvbGlzaCB0ZXh0LCBmb3IgZXhhbXBsZS4KKworICAtIFRoZSBrZXJuaW5nIHRhYmxlIG9mIFR5cGUgMSBmb250cyB3YXMgbG9hZGVkIGJ5IEZyZWVUeXBlLCB3aGVuIGl0cworICAgIEFGTSAgICBmaWxlICAgIHdhcyAgICBhdHRhY2hlZCAgICB0byAgICBpdHMgICAgZmFjZSwgICAgYnV0ICAgIHRoZQorICAgIEZUX0ZBQ0VfRkxBR19IQVNfS0VSTklORyAgIGJpdCAgZmxhZ3MgICB3YXMgIG5vdCAgIHNldCAgY29ycmVjdGx5LAorICAgIHByZXZlbnRpbmcgRlRfR2V0X0tlcm5pbmcgdG8gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzLgorCisgIC0gSW1wcm92ZWQgIFNGTlQgKFRydWVUeXBlICAmIE9wZW5UeXBlKSAgY2hhcm1hcCAgc3VwcG9ydC4gIFNsaWdodGx5CisgICAgYmV0dGVyIHBlcmZvcm1hbmNlLCBhcyB3ZWxsIGFzIHN1cHBvcnQgZm9yIHRoZSBuZXcgZm9ybWF0cyBkZWZpbmVkCisgICAgYnkgdGhlIE9wZW5UeXBlIDEuMyBzcGVjaWZpY2F0aW9uICg4LCAxMCwgYW5kIDEyKQorCisgIC0gRml4ZWQgYSAgc2VyaW91cyB0eXBvIGluIGBzcmMvYmFzZS9mdGNhbGMuYycgIHdoaWNoIGNhdXNlZCBpbnZhbGlkCisgICAgY29tcHV0YXRpb25zIGluIGNlcnRhaW4gcmFyZSBjYXNlcywgcHJvZHVjaW5nIHVnbHkgYXJ0ZWZhY3RzLgorCisgIC0gVGhlICBzaXplICBvZiB0aGUgIEVNICBzcXVhcmUgaXMgIGNvbXB1dGVkICB3aXRoICBhIG1vcmUgIGFjY3VyYXRlCisgICAgYWxnb3JpdGhtIGZvciBQb3N0c2NyaXB0IGZvbnRzLiAgIFRoZSBvbGQgb25lIGNhdXNlZCBzbGlnaHQgZXJyb3JzCisgICAgd2l0aCBlbWJlZGRlZCBmb250cyBmb3VuZCBpbiBQREYgZG9jdW1lbnRzLgorCisgIC0gRml4ZWQgIGEgIGJ1ZyBpbiAgdGhlICBjYWNoZSAgbWFuYWdlciAgdGhhdCBwcmV2ZW50ZWQgIG5vcm1hbCAgTFJVCisgICAgYmVoYXZpb3VyICB3aXRoaW4gdGhlIGNhY2hlICBtYW5hZ2VyLCBjYXVzaW5nICB1bm5lY2Vzc2FyeSByZWxvYWRzCisgICAgKGZvciBGVF9GYWNlIGFuZCBGVF9TaXplIG9iamVjdHMgb25seSkuCisKKyAgLSBBZGRlZCAgYSBuZXcgIGZ1bmN0aW9uIG5hbWVkICBgRlRfR2V0X05hbWVfSW5kZXgnIHRvICByZXRyaWV2ZSB0aGUKKyAgICBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUsIHdoZW4gZm91bmQgaW4gYSBmYWNlLgorCisgIC0gQWRkZWQgIGEgbmV3IGZ1bmN0aW9uICBuYW1lZCBgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZScgIHRvIHJldHJpZXZlCisgICAgdGhlIGB1bmlxdWUnIFBvc3RzY3JpcHQgZm9udCBuYW1lIG9mIGEgZ2l2ZW4gZmFjZS4KKworICAtIEFkZGVkICAgYSAgIG5ldyAgIHB1YmxpYyAgIGhlYWRlciAgc2l6ZSAgIG5hbWVkICAgRlRfU0laRVNfSCAgIChvcgorICAgIDxmcmVldHlwZS9mdHNpemVzLmg+KSBwcm92aWRpbmcgIG5ldyBGVF9TaXplLW1hbmFnZW1lbnQgZnVuY3Rpb25zOgorICAgIEZUX05ld19TaXplLCBGVF9BY3RpdmF0ZV9TaXplLCBGVF9Eb25lX1NpemUuCisKKyAgLSBGaXhlZCBhICByZWFsbG9jYXRpb24gYnVnIHRoYXQgIGdlbmVyYXRlZCBhIGRhbmdsaW5nICBwb2ludGVyIChhbmQKKyAgICBwb3NzaWJseSAgICBtZW1vcnkgICAgbGVha3MpICAgIHdpdGggICAgUG9zdHNjcmlwdCAgICBmb250cyAgICAoaW4KKyAgICBzcmMvcHNhdXgvcHNvYmpzLmMpLgorCisgIC0gTWFueSBmaXhlcyBmb3IgMTYtYml0IGNvcnJlY3RuZXNzLgorCisgIC0gUmVtb3ZlZCBtYW55IHBlZGFudGljIGNvbXBpbGVyIHdhcm5pbmdzIGZyb20gdGhlIHNvdXJjZXMuCisKKyAgLSBBZGRlZCBhbiBBbWlnYSBidWlsZCBkaXJlY3RvcnkgaW4gYGJ1aWxkcy9hbWlnYScuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4wLjQgYW5kIDIuMC4zCisKKyAgLSBGaXhlZCBhIHJhdGhlciBhbm5veWluZyBidWcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiAyLjAuMy4gIE5hbWVseSwKKyAgICB0aGUgZm9udCAgdHJhbnNmb3JtYXRpb24gc2V0IHRocm91Z2ggIEZUX1NldF9UcmFuc2Zvcm0gd2FzIGFwcGxpZWQKKyAgICB0d2ljZSB0byBhdXRvLWhpbnRlZCBnbHlwaHMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3RseSByb3RhdGVkIHRleHQKKyAgICBvdXRwdXQuCisKKyAgLSBGaXhlZCBfbWFueV8gIGNvbXBpbGVyIHdhcm5pbmdzLiAgIEZUMiBzaG91bGQgbm93ICBjb21waWxlIGNsZWFubHkKKyAgICB3aXRoIFZpc3VhbCAgQysrJ3MgbW9zdCBwZWRhbnRpYyB3YXJuaW5nIGxldmVsICAoL1c0KS4gIEl0IGFscmVhZHkKKyAgICBjb21waWxlZCBmaW5lIHdpdGggR0NDIGFuZCBhIGZldyBvdGhlciBjb21waWxlcnMuCisKKyAgLSBGaXhlZCBhIGJ1ZyAgdGhhdCBwcmV2ZW50ZWQgdGhlIGxpbmVhciBhZHZhbmNlICB3aWR0aCBvZiBjb21wb3NpdGUKKyAgICBUcnVlVHlwZSBnbHlwaHMgdG8gYmUgY29ycmVjdGx5IHJldHVybmVkLgorCisgIC0gRml4ZWQgICAgdGhlICAgIFZpc3VhbCAgICBDKysgICAgcHJvamVjdCAgICBmaWxlcyAgICBsb2NhdGVkICAgIGluCisgICAgYGJ1aWxkcy93aW4zMi92aXN1YWxjJyAocHJldmlvdXMgdmVyc2lvbnMgIHVzZWQgb2xkZXIgbmFtZXMgb2YgdGhlCisgICAgbGlicmFyeSkuCisKKyAgLSBNYW55ICAzMi1iaXQgY29uc3RhbnRzICBoYXZlIGFuICBgTCcgYXBwZW5kZWQgIHRvIHRoZWlyICB2YWx1ZSwgaW4KKyAgICBvcmRlciB0byBpbXByb3ZlIHRoZSAxNi1iaXRuZXNzICBvZiB0aGUgY29kZS4gIFNvbWVvbmUgaXMgYWN0dWFsbHkKKyAgICB0cnlpbmcgdG8gdXNlIEZUMiBvbiBhbiBBdGFyaSBTVCBtYWNoaW5lIQorCisgIC0gVXBkYXRlZCAgdGhlICBgYnVpbGRzL2RldGVjdC5taycgZmlsZSAgaW4gIG9yZGVyIHRvICBhdXRvbWF0aWNhbGx5CisgICAgYnVpbGQgRlQyICBvbiBBSVggc3lzdGVtcy4gICBBSVggdXNlcyBgL3Vzci9zYmluL2luaXQnICBpbnN0ZWFkIG9mCisgICAgYC9zYmluL2luaXQnIGFuZCB3YXNuJ3QgcHJldmlvdXNseSAgZGV0ZWN0ZWQgYXMgYSBVbml4IHBsYXRmb3JtIGJ5CisgICAgdGhlIEZyZWVUeXBlIGJ1aWxkIHN5c3RlbS4KKworICAtIFVwZGF0ZWQgIHRoZSAgVW5peC1zcGVjaWZpYyAgcG9ydGlvbnMgIG9mIHRoZSAgYnVpbGQgIHN5c3RlbSAgKG5ldworICAgIGxpYnRvb2wgdmVyc2lvbiwgZXRjLikuCisKKyAgLSBUaGUgIFNGTlQga2VybmluZyAgbG9hZGVyIG5vdyAgZW5zdXJlcyAgdGhhdCB0aGUgIHRhYmxlIGlzICBzb3J0ZWQKKyAgICAoc2luY2Ugc29tZSBwcm9ibGVtIGZvbnRzIGRvIG5vdCBtZWV0IHRoaXMgcmVxdWlyZW1lbnQpLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjAuMyBhbmQgMi4wLjIKKworICBJLiBDSEFOR0VTIFRPIFRIRSBNT0RVTEVTIC8gRk9OVCBEUklWRVJTCisKKyAgICAtIFRIRSAgQVVUTy1ISU5URVIgSEFTICBCRUVOIFNMSUdIVExZICBJTVBST1ZFRCwgaW4gIG9yZGVyICB0byBmaXgKKyAgICAgIHNldmVyYWwgYW5ub3lpbmcgYXJ0ZWZhY3RzLCBtYWlubHk6CisKKyAgICAgICAgLSBCbHVlICB6b25lIGFsaWdubWVudCAgb2YgIGhvcml6b250YWwgc3RlbXMgIHdhc24ndCBwZXJmb3JtZWQKKyAgICAgICAgICBjb3JyZWN0bHksIHJlc3VsdGluZyBpbiBhcnRlZmFjdHMgIGxpa2UgdGhlIGBkJyBiZWluZyBwbGFjZWQKKyAgICAgICAgICBvbmUgcGl4ZWwgYmVsb3cgdGhlIGBiJyBpbiBzb21lIGZvbnRzIGxpa2UgVGltZSBOZXcgUm9tYW4uCisKKyAgICAgICAgLSBPdmVyc2hvb3QgdGhyZXNob2xkaW5nICB3YXNuJ3QgcGVyZm9ybWVkIGNvcnJlY3RseSwgY3JlYXRpbmcKKyAgICAgICAgICB1bnBsZWFzYW50IGFydGVmYWN0cyBhdCBsYXJnZSBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZXMuCisKKyAgICAgICAgLSBDb21wb3NpdGUgZ2x5cGggbG9hZGluZyBoYXMgIGJlZW4gc2ltcGxpZmllZC4gIFRoaXMgZ2V0cyByaWQKKyAgICAgICAgICBvZiAgdmFyaW91cyBhcnRlZmFjdHMgIHdoZXJlIHRoZSAgY29tcG9uZW50cyBvZiAgYSBjb21wb3NpdGUKKyAgICAgICAgICBnbHlwaHMgd2VyZSBub3QgY29ycmVjdGx5IHNwYWNlZC4KKworICAgICAgVGhlc2UgYXJlICB0aGUgbGFzdCBjaGFuZ2VzIHRvIHRoZSAgY3VycmVudCBhdXRvLWhpbnRpbmcgbW9kdWxlLgorICAgICAgQSBuZXcgIGhpbnRpbmcgc3ViLXN5c3RlbSBpcyBjdXJyZW50bHkgIGluIHRoZSB3b3JrICBpbiBvcmRlciB0bworICAgICAgc3VwcG9ydCBuYXRpdmUgaGludHMgIGluIFR5cGUgMSAvIENGRiAvICBPcGVuVHlwZSBmb250cywgYXMgd2VsbAorICAgICAgYXMgZ2xvYmFsbHkgaW1wcm92ZSByZW5kZXJpbmcuCisKKyAgICAtIFRoZSAgUENGICBkcml2ZXIgaGFzICBiZWVuICBmaXhlZC4gICBJdCAgcmVwb3J0ZWQgaW52YWxpZCAgZ2x5cGgKKyAgICAgIGRpbWVuc2lvbnMgZm9yIHRoZSBmb250cyBhdmFpbGFibGUgb24gU29sYXJpcy4KKworICAgIC0gVGhlIFR5cGUgIDEsIENJRCBhbmQgQ0ZGICBkcml2ZXJzIGhhdmUgYmVlbiBtb2RpZmllZCAgdG8gZml4IHRoZQorICAgICAgY29tcHV0YXRpb24gb2YgdGhlIEVNIHNpemUuCisKKyAgICAtIFRoZSBUeXBlIDEgIGRyaXZlciBoYXMgYmVlbiBmaXhlZCB0byBhdm9pZCAgYSBkYW5nZXJvdXMgYnVnIHRoYXQKKyAgICAgIGNyYXNoZWQgdGhlIGxpYnJhcnkgd2l0aCBub24tY29uZm9ybWluZyBmb250cyAoaS5lLiBvbmVzIHRoYXQgZG8KKyAgICAgIG5vdCBwbGFjZSB0aGUgLm5vdGRlZiBnbHlwaCBhdCBwb3NpdGlvbiAwKS4KKworICAgIC0gVGhlIFRydWVUeXBlICBkcml2ZXIgaGFkIGEgIHJhdGhlciBzdWJ0bGUgYnVnICAoZGFuZ2xpbmcgcG9pbnRlcgorICAgICAgd2hlbiBsb2FkaW5nICBjb21wb3NpdGUgZ2x5cGhzKSB0aGF0IGNvdWxkIGNyYXNoICB0aGUgbGlicmFyeSBpbgorICAgICAgcmFyZSBvY2Nhc2lvbnMhCisKKworICBJSS4gSElHSC1MRVZFTCBBUEkgQ0hBTkdFUworCisgICAgLSBUaGUgZXJyb3IgIGNvZGUgZW51bWVyYXRpb24gdmFsdWVzIGhhdmUgYmVlbiAgY2hhbmdlZC4gIEFuIGVycm9yCisgICAgICB2YWx1ZSAgaXMgZGVjb21wb3NlZCAgaW4gIGEgIGdlbmVyaWMgZXJyb3IgIGNvZGUsICBhbmQgYSAgbW9kdWxlCisgICAgICBudW1iZXIuICBzZWUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+IGZvciBkZXRhaWxzLgorCisgICAgLSBBICAgbmV3ICBwdWJsaWMgICBoZWFkZXIgICBmaWxlICBoYXMgICBiZWVuICBpbnRyb2R1Y2VkLCAgIG5hbWVkCisgICAgICBGVF9UUklHT05PTUVUUllfSCAgICAoaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oKSwgICAgcHJvdmlkaW5nCisgICAgICB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyB0byAgY29tcHV0ZSBzaW5lcywgY29zaW5lcywgYXJjdGFuZ2VudHMsCisgICAgICBldGMuIHdpdGggMTYuMTYgZml4ZWQgcHJlY2lzaW9uLiAgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uCisgICAgICB0aGUgQ09SRElDICBhbGdvcml0aG0gYW5kIGlzIHZlcnkgZmFzdCAgd2hpbGUgYmVpbmcgc3VmZmljaWVudGx5CisgICAgICBhY2N1cmF0ZS4KKworCisgIElJSS4gSU5URVJOQUxTCisKKyAgICAtIEFkZGVkICBCZU9TLXNwZWNpZmljIGZpbGVzICBpbiB0aGUgIG9sZCBidWlsZCAgc3ViLXN5c3RlbS4gIE5vdGUKKyAgICAgIHRoYXQgbm8gY2hhbmdlcyB3ZXJlIHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBKYW0uCisKKyAgICAtIFRoZSAgY29uZmlndXJhdGlvbiAgaXMgbm93ICBjYXBhYmxlICBvZiBhdXRvbWF0aWNhbGx5ICBkZXRlY3RpbmcKKyAgICAgIDY0LWJpdCBpbnRlZ2VycyAgb24gYSBzZXQgIG9mIHByZWRlZmluZWQgY29tcGlsZXJzICAoR0NDLCBWaXN1YWwKKyAgICAgIEMrKywgQm9ybGFuZCBDKyspIGFuZCB3aWxsIHVzZSB0aGVtIGJ5IGRlZmF1bHQuICBUaGlzIHByb3ZpZGVzIGEKKyAgICAgIHNtYWxsIHBlcmZvcm1hbmNlIGJvb3N0LgorCisgICAgLSBBICBzbWFsbCBtZW1vcnkgbGVhayAgdGhhdCBoYXBwZW5lZCAgd2hlbiBvcGVuaW5nICAwLXNpemVkIGZpbGVzCisgICAgICAoZHVoISkgIGhhdmUgYmVlbiBmaXhlZC4KKworICAgIC0gRml4ZWQgYmV6aWVyICBzdGFjayBkZXB0aCAgYnVnIGluIHRoZSAgcm91dGluZXMgcHJvdmlkZWQgIGJ5IHRoZQorICAgICAgRlRfQkJPWF9IICBoZWFkZXIgICBmaWxlLiAgIEFsc28gIGZpeGVkICBzaW1pbGFyICAgYnVncyAgaW4gIHRoZQorICAgICAgcmFzdGVyaXplcnMuCisKKyAgICAtIFRoZSBvdXRsaW5lIGJvdW5kaW5nICBib3ggY29kZSBoYXMgYmVlbiByZXdyaXR0ZW4gIHRvIHVzZSBkaXJlY3QKKyAgICAgIGNvbXB1dGF0aW9ucywgIGluc3RlYWQgb2YgIGJlemllciBzdWItZGl2aXNpb24sICB0byAgY29tcHV0ZSB0aGUKKyAgICAgIGV4YWN0IGJvdW5kaW5nIGJveCBvZiBnbHlwaHMuICAgVGhpcyBpcyBzbGlnaHRseSBzbG93ZXIgYnV0IG1vcmUKKyAgICAgIGFjY3VyYXRlLgorCisgICAgLSBUaGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuICBpbXByb3ZlZCBhbmQgZml4ZWQsIG1haW5seSB0byBzdXBwb3J0CisgICAgICBgbWFrZScgIG9uIFdpbmRvd3MgIDIwMDAgIGNvcnJlY3RseSwgYXZvaWQgIHByb2JsZW1zIHdpdGggIGBtYWtlCisgICAgICBkaXN0Y2xlYW4nIG9uIG5vbiBVbml4IHN5c3RlbXMsIGV0Yy4KKworICAgIC0gSGV4YWRlY2ltYWwgIGNvbnN0YW50cyAgaGF2ZSBiZWVuICBzdWZmaXhlZCAgd2l0aCAgYFUnIHRvICBhdm9pZAorICAgICAgcHJvYmxlbXMgd2l0aCBjZXJ0YWluIGNvbXBpbGVycyBvbiA2NC1iaXQgcGxhdGZvcm1zLgorCisgICAgLSBBIG5ldyBkaXJlY3RvcnkgbmFtZWQgYHNyYy90b29scycgaGFzIGJlZW4gY3JlYXRlZC4gIEl0IGNvbnRhaW5zCisgICAgICBQeXRob24gc2NyaXB0cyBhbmQgc2ltcGxlIHVuaXQgdGVzdCBwcm9ncmFtcyB1c2VkIHRvIGRldmVsb3AgdGhlCisgICAgICBsaWJyYXJ5LgorCisgICAgLSBUaGUgRG9jTWFrZXIgdG9vbCBoYXMgYmVlbiAgbW92ZWQgZnJvbSBgZG9jcycgdG8gYHNyYy90b29scycgYW5kCisgICAgICBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZzoKKworICAgICAgICAgLSBOb3cgYWNjZXB0cyB0aGUgYC0tdGl0bGU9WFhYWCcgb3IgYC10IFhYWFgnIG9wdGlvbiBmcm9tIHRoZQorICAgICAgICAgICBjb21tYW5kIGxpbmUgdG8gc2V0IHRoZSBwcm9qZWN0J3MgbmFtZSBpbiB0aGUgZ2VuZXJhdGVkIEFQSQorICAgICAgICAgICByZWZlcmVuY2UuCisKKyAgICAgICAgIC0gTm93IGFjY2VwdHMgdGhlIGAtLW91dHB1dD1ESVInICBvciBgLW8gRElSJyBvcHRpb24gZnJvbSB0aGUKKyAgICAgICAgICAgY29tbWFuZCBsaW5lIHRvIHNldCAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIGFsbCBnZW5lcmF0ZWQKKyAgICAgICAgICAgSFRNTCBmaWxlcy4KKworICAgICAgICAgLSBOb3cgYWNjZXB0cyB0aGUgYC0tcHJlZml4PVhYWFgnIG9yIGAtcCBYWFgnIG9wdGlvbiBmcm9tIHRoZQorICAgICAgICAgICBjb21tYW5kICBsaW5lICB0byAgc2V0ICB0aGUgIGZpbGUgcHJlZml4ICB0byAgdXNlICBmb3IgIGFsbAorICAgICAgICAgICBnZW5lcmF0ZWQgSFRNTCBmaWxlcy4KKworICAgICAgICAgLSBOb3cgZ2VuZXJhdGVzIHRoZSBjdXJyZW50ICB0aW1lL2RhdGEgb24gZWFjaCBnZW5lcmF0ZWQgcGFnZQorICAgICAgICAgICBpbiBvcmRlciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHZlcnNpb25zLgorCisgICAgICBEb2NNYWtlciAgY2FuIGJlICB1c2VkIHdpdGggIG90aGVyICBwcm9qZWN0cyBub3csICBub3Qgb25seSAgRlQyCisgICAgICAoZS5nLiBNTGliLCBGVExheW91dCwgZXRjLikuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4wLjIgYW5kIDIuMC4xCisKKyAgSS4gQ0hBTkdFUyBUTyBUSEUgTU9EVUxFUyAvIEZPTlQgRFJJVkVSUworCisgICAgLSBUSEUgVFJVRVRZUEUgQllURUNPREUgSU5URVJQUkVURVIgSVMgTk9XIFRVUk5FRCBPRkYsIGluIG9yZGVyIHRvCisgICAgICBhdm9pZCBsZWdhbCBwcm9ibGVtcyAgd2l0aCB0aGUgQXBwbGUgcGF0ZW50cy4gIEl0ICBzZWVtcyB0aGF0IHdlCisgICAgICBtaXN0YWtlbmx5ICB0dXJuZWQgdGhpcyBvcHRpb24gIG9uIGluICBwcmV2aW91cyByZWxlYXNlcyAgb2YgdGhlCisgICAgICBidWlsZC4KKworICAgICAgTm90ZSB0aGF0IGlmICB5b3Ugd2FudCB0byB1c2UgdGhlICBieXRlY29kZSBpbnRlcnByZXRlciBpbiBvcmRlcgorICAgICAgdG8gZ2V0IGhpZ2gtcXVhbGl0eSBUcnVlVHlwZSAgcmVuZGVyaW5nLCB5b3Ugd2lsbCBuZWVkIHRvIHRvZ2dsZQorICAgICAgYnkgICAgICAgIGhhbmQgICAgICAgIHRoZSAgICAgICAgZGVmaW5pdGlvbiAgICAgICAgb2YgICAgICAgIHRoZQorICAgICAgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiAgIG1hY3JvICAgIGluICAgdGhlICAgZmlsZQorICAgICAgYGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgnLgorCisgICAgLSBUaGUgQ0ZGIGRyaXZlciBoYXMgYmVlbiBpbXByb3ZlZCBieSBUb20gS2Fjdmluc2t5IGFuZCBTYW5kZXIgdmFuCisgICAgICBkZXIgV2FsOgorCisgICAgICAqIFN1cHBvcnQgZm9yIGBzZWFjJyBlbXVsYXRpb24uCisgICAgICAqIFN1cHBvcnQgZm9yIGBkb3RzZWN0aW9uJy4KKyAgICAgICogU3VwcG9ydCBmb3IgcmV0cmlldmluZyBnbHlwaCBuYW1lcyB0aHJvdWdoCisgICAgICAgIGBGVF9HZXRfR2x5cGhfTmFtZScuCisKKyAgICAgIFRoZSBmaXJzdCB0d28gaXRlbXMgYXJlIG5lY2Vzc2FyeSB0byBjb3JyZWN0bHkgYSBsYXJnZSBudW1iZXIgb2YKKyAgICAgIFR5cGUgMSBmb250cyBjb252ZXJ0ZWQgdG8gdGhlIENGRiBmb3JtYXRzIGJ5IEFkb2JlIEFjcm9iYXQuCisKKyAgICAtIFRoZSBUeXBlIDEgZHJpdmVyIHdhcyBhbHNvIGltcHJvdmVkIGJ5IFRvbSAmIG90aGVyczoKKworICAgICAgKiBCZXR0ZXIgRU0gc2l6ZSBjb21wdXRhdGlvbi4KKyAgICAgICogQmV0dGVyIHN1cHBvcnQgZm9yIHN5bnRoZXRpYyAodHJhbnNmb3JtZWQpIGZvbnRzLgorICAgICAgKiBUaGUgIFR5cGUgMSAgZHJpdmVyIHJldHVybnMgIHRoZSBjaGFyc3RyaW5ncyAgY29ycmVzcG9uZGluZyB0bworICAgICAgICBlYWNoIGdseXBoIGluIHRoZSAgYGdseXBoLT5jb250cm9sX2RhdGEnIGZpZWxkIGFmdGVyIGEgY2FsbCB0bworICAgICAgICBgRlRfTG9hZF9HbHlwaCcgKHRoYW5rcyBIYSBTaGFvKS4KKworICAgIC0gVmFyaW91cyBvdGhlciBidWdmaXhlcywgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICogRml4ZWQgYSBuYXN0eSBtZW1vcnkgbGVhayBpbiB0aGUgVHlwZSAxIGRyaXZlci4KKyAgICAgICogVGhlIGF1dG9oaW50ZXIgIGFuZCB0aGUgcGNmICBkcml2ZXIgdXNlZCBzdGF0aWMgIHdyaXRhYmxlIGRhdGEKKyAgICAgICAgd2hlbiB0aGV5IHNob3VsZG4ndC4KKyAgICAgICogTWFueSBjYXN0cyB3ZXJlIGFkZGVkIHRvICBtYWtlIHRoZSBjb2RlIG1vcmUgNjQtYml0cyBzYWZlLiAgSXQKKyAgICAgICAgYWxzbyBub3cgY29tcGlsZXMgb24gV2luZG93cyBYUCA2NC1iaXRzIHdpdGhvdXQgd2FybmluZ3MuCisgICAgICAqIFNvbWUgaW5jb3JyZWN0IHdyaXRhYmxlIHN0YXRpY3Mgd2VyZSByZW1vdmVkIGluIHRoZSBgYXV0b2hpbnQnCisgICAgICAgIGFuZCBgcGNmJyBkcml2ZXJzLiAgRnJlZVR5cGUgMiBub3cgY29tcGlsZXMgb24gRXBvYyBhZ2Fpbi4KKworCisgIElJLiBDSEFOR0VTIFRPIFRIRSBISUdILUxFVkVMIEFQSQorCisgICAgLSBUaGUgbGlicmFyeSBoZWFkZXIgZmlsZXMgaW5jbHVzaW9uIHNjaGVtZSBoYXMgYmVlbiBjaGFuZ2VkLiAgVGhlCisgICAgICBvbGQgc2NoZW1lIGxvb2tlZCBsaWtlOgorCisgICAgICAgICNpbmNsdWRlIDxmcmVldHlwZS9mcmVldHlwZS5oPgorICAgICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRnbHlwaC5oPgorICAgICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRjYWNoZS5oPgorICAgICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvY2FjaGUvZnRpbWFnZS5oPgorCisgICAgICBOb3cgeW91IHNob3VsZCB1c2U6CisKKyAgICAgICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisgICAgICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyAgICAgICAgI2luY2x1ZGUgRlRfR0xZUEhfSAorICAgICAgICAjaW5jbHVkZSBGVF9DQUNIRV9ICisgICAgICAgICNpbmNsdWRlIEZUX0NBQ0hFX0lNQUdFX0gKKworICAgICAgTk9URSBUSEFUICBUSEUgT0xEICBJTkNMVVNJT04gU0NIRU1FIFdJTEwgIFNUSUxMIFdPUksgIFdJVEggVEhJUworICAgICAgUkVMRUFTRS4gIEhPV0VWRVIsIFdFICBETyBOT1QgR1VBUkFOVEVFIFRIQVQgVEhJUyAgV0lMTCBTVElMTCBCRQorICAgICAgVFJVRSBJTiBUSEUgTkVYVCBPTkUgKEEuSy5BLiBGUkVFVFlQRSAyLjEpLgorCisgICAgICBUaGUgIGZpbGUgPGZ0MmJ1aWxkLmg+ICBpcyB1c2VkICB0byBkZWZpbmUgIHRoZSAgaGVhZGVyIGZpbGVuYW1lCisgICAgICBtYWNyb3MuICBUaGUgY29tcGxldGUgYW5kICBjb21tZW50ZWQgbGlzdCBvZiBtYWNyb3MgaXMgYXZhaWxhYmxlCisgICAgICBpbiB0aGUgQVBJIHJlZmVyZW5jZSB1bmRlciB0aGUgc2VjdGlvbiBuYW1lIGBIZWFkZXIgRmlsZSBNYWNyb3MnCisgICAgICBpbiBDaGFwdGVyIEkuCisKKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgc2VjdGlvbiBJIG9mIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnQ6CisKKyAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvCisgICAgICAgICAgZnJlZXR5cGUyL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbAorCisgICAgICBvcgorCisgICAgICAgIGh0dHA6Ly9mcmVldHlwZS5zb3VyY2Vmb3JnZS5uZXQvCisgICAgICAgICAgZnJlZXR5cGUyL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbAorCisgICAgLSBNYW55LCBtYW55IGNvbW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgcHVibGljIHNvdXJjZSBmaWxlIGluCisgICAgICBvcmRlciB0byAgYXV0b21hdGljYWxseSBnZW5lcmF0ZSAgdGhlIEFQSSBSZWZlcmVuY2UgIHRocm91Z2ggdGhlCisgICAgICBgZG9jbWFrZXIucHknIFB5dGhvbiBzY3JpcHQuCisKKyAgICAgIFRoZSBsYXR0ZXIgaGFzIGJlZW4gdXBkYXRlZCAgdG8gc3VwcG9ydCB0aGUgZ3JvdXBpbmcgb2Ygc2VjdGlvbnMKKyAgICAgIGluIGNoYXB0ZXJzIGFuZCBiZXR0ZXIgaW5kZXggc29ydC4gIFNlZToKKworICAgICAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jcy9yZWZlcmVuY2UvZnQyLXRvYy5odG1sCisKKworICBJSUkuIENIQU5HRVMgVE8gVEhFIEJVSUxEIFBST0NFU1MKKworICAgIC0gSWYgeW91ICBhcmUgbm90ICBidWlsZGluZyBGcmVlVHlwZSAyICB3aXRoIGl0cyBvd24gIGJ1aWxkIHN5c3RlbQorICAgICAgKGJ1dCB3aXRoIHlvdXIgb3duIE1ha2VmaWxlcyBvciBwcm9qZWN0IGZpbGVzKSwgeW91IHdpbGwgbmVlZCB0bworICAgICAgYmUgIGF3YXJlIHRoYXQgIHRoZSAgYnVpbGQgIHByb2Nlc3MgaGFzICBjaGFuZ2VkICBhIGxpdHRsZSAgYml0LgorCisgICAgICBZb3UgZG9uJ3QgIG5lZWQgdG8gcHV0IHRoZSAgYHNyYycgZGlyZWN0b3J5IGluICB0aGUgaW5jbHVkZSBwYXRoCisgICAgICB3aGVuICBjb21waWxpbmcgIGFueSBGVDIgIGNvbXBvbmVudC4gICBJbnN0ZWFkLCAgc2ltcGx5IHB1dCAgdGhlCisgICAgICBjb21wb25lbnQncyBkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgaW5jbHVkZSBwYXRoLgorCisgICAgICBTbywgaWYgeW91IHdlcmUgZG9pbmcgc29tZXRoaW5nIGxpa2U6CisKKyAgICAgICAgY2MgLWMgLUlpbmNsdWRlIC1Jc3JjIHNyYy9iYXNlL2Z0YmFzZS5jCisKKyAgICAgIGNoYW5nZSB0aGUgbGluZSB0bzoKKworICAgICAgICBjYyAtYyAtSWluY2x1ZGUgLUlzcmMvYmFzZSBzcmMvYmFzZS9mdGJhc2UuYworCisgICAgICBJZiB5b3Ugd2VyZSBkb2luZyBzb21ldGhpbmcgbGlrZToKKworICAgICAgICBjZCBzcmMvYmFzZQorICAgICAgICBjYyAtYyAtSS4uLy4uL2luY2x1ZGUgLUkuLiBmdGJhc2UuYworCisgICAgICBjaGFuZ2UgaXQgdG86CisKKyAgICAgICAgY2Qgc3JjL2Jhc2UKKyAgICAgICAgY2MgLWMgLUkuLi8uLi9pbmNsdWRlIGZ0YmFzZS5jCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi4wLjEgYW5kIDIuMAorCisgIDIuMC4xIGludHJvZHVjZXMgYSBmZXcgY2hhbmdlczoKKworICAgIC0gRml4ZWQgbWFueSBidWdzIHJlbGF0ZWQgdG8gIHRoZSBzdXBwb3J0IG9mIENGRiAvIE9wZW5UeXBlIGZvbnRzLgorICAgICAgVGhlc2UgIGZvcm1hdHMgYXJlICBub3cgbXVjaCAgYmV0dGVyIHN1cHBvcnRlZCAgdGhvdWdoICB0aGVyZSBpcworICAgICAgc3RpbGwgd29yayBwbGFubmVkIHRvICBkZWFsIHdpdGggY2hhcnNldCB0YWJsZXMgYW5kIFBERi1lbWJlZGRlZAorICAgICAgQ0ZGIGZpbGVzIHRoYXQgdXNlIHRoZSBvbGQgYHNlYWMnIGNvbW1hbmQuCisKKyAgICAtIFRoZSAgbGlicmFyeSBjb3VsZCBub3QgIGJlIGNvbXBpbGVkICBpbiBkZWJ1ZyAgbW9kZSB3aXRoICBhIHZlcnkKKyAgICAgIHNtYWxsICBudW1iZXIgICBvZiAgQyAgY29tcGlsZXJzICAgd2hvc2UgIHByZS1wcm9jZXNzb3JzICBkaWRuJ3QKKyAgICAgIGltcGxlbWVudCB0aGUgYCMjJyAgZGlyZWN0aXZlIGNvcnJlY3RseSAoaS5lLiBwZXIgc2UgIHRoZSBBTlNJIEMKKyAgICAgIHNwZWNpZmljYXRpb24hKSAgQW4gZWxlZ2FudCBmaXggd2FzIGZvdW5kLgorCisgICAgLSBBZGRlZCAgc3VwcG9ydCBmb3IgIHRoZSAgZnJlZSBCb3JsYW5kICBjb21tYW5kLWxpbmUgQysrICBCdWlsZGVyCisgICAgICBjb21waWxlci4gICBVc2UgYG1ha2UgIHNldHVwIGJjYzMyJy4gICBBbHNvIGZpeGVkICBhICBmZXcgc291cmNlCisgICAgICBsaW5lcyB0aGF0IGdlbmVyYXRlZCBuZXcgd2FybmluZ3Mgd2l0aCBCQ0MzMi4KKworICAgIC0gRml4ZWQgYSBidWcgaW4gRlRfT3V0bGluZV9HZXRfQkJveCB3aGVuIGNvbXB1dGluZyB0aGUgZXh0cmVtYSBvZgorICAgICAgYSBjb25pYyBCZXppZXIgYXJjLgorCisgICAgLSBVcGRhdGVkIHRoZSBJTlNUQUxMIGZpbGUgdG8gYWRkIElERSBjb21waWxhdGlvbi4KKworICAgIC0gT3RoZXIgIG1pbm9yIGJ1ZyAgZml4ZXMsICBmcm9tICBpbnZhbGlkIFR5cGUgIDEgIHN0eWxlIGZsYWdzICB0bworICAgICAgY29ycmVjdCAgIHN1cHBvcnQgICBvZiAgc3ludGhldGljICAgKG9ibGlxdWVkKSAgIGZvbnRzICBpbiAgIHRoZQorICAgICAgYXV0by1oaW50ZXIsIGJldHRlciBzdXBwb3J0IGZvciBlbWJlZGRlZCBiaXRtYXBzIGluIGEgU0ZOVCBmb250LgorCisgICAgLSBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggYGZyZWV0eXBlLWNvbmZpZycuCisKKyAgRmluYWxseSwgdGhlIGBzdGFuZGFyZCcgc2NoZW1lIGZvciBpbmNsdWRpbmcgRnJlZVR5cGUgaGVhZGVycyBpcyBub3cKKyAgZ3JhZHVhbGx5IGNoYW5naW5nLCAgYnV0IHRoaXMgd2lsbCAgYmUgZXhwbGFpbmVkIGluIGEgIGxhdGVyIHJlbGVhc2UKKyAgKHByb2JhYmx5IDIuMC4yKS4KKworICBBbmQgdmVyeSAgc3BlY2lhbCB0aGFua3MgdG8gVG9tIEthY3ZpbnNreSAgYW5kIFlBTUFOTy1VQ0hJIEhpZGV0b3NoaQorICBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyEKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiBiZXRhOCBhbmQgMi4wCisKKyAgLSBDaGFuZ2VkICB0aGUgZGVmYXVsdCAgaW5zdGFsbGF0aW9uICBwYXRoIGZvciAgcHVibGljIGhlYWRlcnMgIGZyb20KKyAgICBgaW5jbHVkZS9mcmVldHlwZScgdG8gYGluY2x1ZGUvZnJlZXR5cGUyJy4KKworICAgIEFsc28gYWRkZWQgYSBuZXcgYGZyZWV0eXBlLWNvbmZpZycgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorICAgIGFuZCBpbnN0YWxsZWQgIG9uIFVuaXggYW5kICBDeWd3aW4gc3lzdGVtcy4gIFRoZSBzY3JpcHQgIGl0c2VsZiBpcworICAgIHVzZWQgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgIGluc3RhbGwgcGF0aCwgQyBjb21waWxhdGlvbiBmbGFncyBhcworICAgIHdlbGwgYXMgbGlua2VyIGZsYWdzLgorCisgIC0gRml4ZWQgc2V2ZXJhbCBzbWFsbCBidWdzOgorCisgICAgKiBJbmNvcnJlY3QgbWF4IGFkdmFuY2Ugd2lkdGggZm9yIGZpeGVkLXBpdGNoIFR5cGUgMSBmb250cy4KKyAgICAqIEluY29ycmVjdCBnbHlwaCBuYW1lcyBmb3IgY2VydGFpbiBUcnVlVHlwZSBmb250cy4KKyAgICAqIFRoZSAgZ2x5cGggYWR2YW5jZSAgd2FzIG5vdCAgY29waWVkIHdoZW4gIEZUX0dseXBoX1RvX0JpdG1hcCB3YXMKKyAgICAgIGNhbGxlZC4KKyAgICAqIFRoZSAgbGluZWFySG9yaUFkdmFuY2UgIGFuZCAgbGluZWFyVmVydEFkdmFuY2UgIGZpZWxkcyAgd2VyZSBub3QKKyAgICAgIGNvcnJlY3RseSByZXR1cm5lZCBmb3IgZ2x5cGhzIHByb2Nlc3NlZCBieSB0aGUgYXV0by1oaW50ZXIuCisgICAgKiBgdHlwZTF6JyAgcmVuYW1lZCBiYWNrIHRvICBgdHlwZTEnOyB0aGUgIG9sZCBgdHlwZTEnICBtb2R1bGUgaGFzCisgICAgICBiZWVuIHJlbW92ZWQuCisKKyAgLSBSZXZhbXBlZCB0aGUgIGJ1aWxkIHN5c3RlbSAgdG8gbWFrZSBpdCAgYSBsb3QgbW9yZSAgZ2VuZXJpYy4gIFRoaXMKKyAgICB3aWxsICBhbGxvdyB1cyAgdG8gIHJlLXVzZSAgbmVhcmx5IHVuLW1vZGlmaWVkICBpbiAgbG90cyBvZiAgb3RoZXIKKyAgICBwcm9qZWN0cyAoaW5jbHVkaW5nIEZyZWVUeXBlIExheW91dCkuCisKKyAgLSBDaGFuZ2VkIGBjaWQnIHRvIHVzZSBgcHNhdXgnIHRvby4KKworICAtIEFkZGVkIHRoZSAgY2FjaGUgc3ViLXN5c3RlbS4gIFNlZSA8ZnJlZXR5cGUvZnRjYWNoZS5oPiAgYXMgd2VsbCBhcworICAgIHRoZSBzb3VyY2VzICBpbiBgc3JjL2NhY2hlJy4gIE5vdGUgIHRoYXQgaXQgY29tcGlsZXMgYnV0ICBpcyBzdGlsbAorICAgIHVudGVzdGVkIGZvciBub3cuCisKKyAgLSBVcGRhdGVkIGBkb2NzL2RvY21ha2VyLnB5JywgYSBkcmFmdCAgQVBJIHJlZmVyZW5jZSBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mdDJhcGkuaHRtbC4KKworICAtIENoYW5nZWQgYHR5cGUxJyB0byB1c2UgYHBzYXV4Jy4KKworICAtIENyZWF0ZWQgYSAgbmV3IG1vZHVsZSBuYW1lZCAgYHBzYXV4JyB0byBob2xkICB0aGUgVHlwZSAxICYgIFR5cGUgMgorICAgIHBhcnNpbmcgcm91dGluZXMuICBJdCBzaG91bGQgYmUgIHVzZWQgYnkgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJworICAgIGluIHRoZSBmdXR1cmUuCisKKyAgLSBGaXhlZCBhbiBpbXBvcnRhbnQgYnVnIGluIGBGVF9HbHlwaF9HZXRfQ0JveCcuCisKKyAgLSBGaXhlZCAgc29tZSBjb21waWxlciAgd2FybmluZ3MgIHRoYXQgaGFwcGVuZWQgIHNpbmNlIHRoZSAgVHJ1ZVR5cGUKKyAgICBieXRlY29kZSBkZWNvZGVyIHdhcyBkZWFjdGl2YXRlZCBieSBkZWZhdWx0LgorCisgIC0gRml4ZWQgdHdvIG1lbW9yeSBsZWFrczoKKworICAgICogVGhlICAgIG1lbW9yeSAgIG1hbmFnZXIgICAoMTYgICAgYnl0ZXMpICAgaXNuJ3QgICAgcmVsZWFzZWQgICBpbgorICAgICAgRlRfRG9uZV9GcmVlVHlwZSEKKyAgICAqIFVzaW5nIGN1c3RvbSBpbnB1dCBzdHJlYW1zLCB0aGUgIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHN0cmVhbSB3YXMKKyAgICAgIG5ldmVyIHJlbGVhc2VkLgorCisgIC0gRml4ZWQgdGhlICBhdXRvLWhpbnRlciBieSBwZXJmb3JtaW5nIGF1dG9tYXRpYyAgY29tcHV0YXRpb24gb2YgdGhlCisgICAgYGZpbGxpbmcgZGlyZWN0aW9uJyBvZiBlYWNoIGdseXBoLiAgIFRoaXMgaXMgZG9uZSB0aHJvdWdoIGEgc2ltcGxlCisgICAgYW5kICBmYXN0IGFwcHJveGltYXRpb24sIGFuZCAgc2VlbXMgdG8gIHdvcmsgKHByb2JsZW1zICBzcG90dGVkIGJ5CisgICAgV2VybmVyIHRob3VnaCkuICBUaGUgQXJwaGljIGZvbnRzIGFyZSBhIGxvdCBuaWNlciB0aG91Z2ggdGhlcmUgYXJlCisgICAgc3RpbGwgYSBsb3Qgb2YgdGhpbmdzIHRvIGRvIHRvIGhhbmRsZSBBc2lhbiBmb250cyBjb3JyZWN0bHkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCRVRBLTggKFJFTEVBU0UgQ0FORElEQVRFKSBDSEFOR0VTCisKKyAgLSBEZWFjdGl2YXRlZCB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgYnkgZGVmYXVsdC4KKworICAtIERlYWN0aXZhdGVkIHRoZSBgc3JjL3R5cGUxJyBmb250IGRyaXZlci4gIE5vdyBgc3JjL3R5cGUxeicgaXMgdXNlZAorICAgIGJ5IGRlZmF1bHQuCisKKyAgLSBVcGRhdGVzIHRvIHRoZSBidWlsZCBzeXN0ZW0uICBXZSBub3cgY29tcGlsZSB0aGUgbGlicmFyeSBjb3JyZWN0bHkKKyAgICB1bmRlciAgVW5peCAgc3lzdGVtICB0aHJvdWdoICBgY29uZmlndXJlJyB3aGljaCAgaXMgIGF1dG9tYXRpY2FsbHkKKyAgICBjYWxsZWQgb24gdGhlIGZpcnN0IGBtYWtlJyBpbnZvY2F0aW9uLgorCisgIC0gQWRkZWQgdGhlIGF1dG8taGludGluZyBtb2R1bGUhICBGaXhpbmcgc29tZSBidWdzIGhlcmUgYW5kIHRoZXJlLgorCisgIC0gRm91bmQgc29tZSBidWdzIGluIHRoZSAgY29tcG9zaXRlIGxvYWRlciAoc2VhYykgb2YgdGhlIFR5cGUxLWJhc2VkCisgICAgZm9udCBkcml2ZXJzLgorCisgIC0gUmVuYW1lZCB0aGUgZGlyZWN0b3J5IGBmcmVldHlwZTIvY29uZmlnJyB0byBgZnJlZXR5cGUyL2J1aWxkcycgYW5kCisgICAgdXBkYXRlZCBhbGwgcmVsZXZhbnQgZmlsZXMuCisKKyAgLSBGb3VuZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBgdHlwZTEnIGRyaXZlci4KKworICAtIEluY29ycG9yYXRlZCBUb20ncyBwYXRjaGVzIHRvICBzdXBwb3J0IGZsZXggb3BlcmF0b3JzIGNvcnJlY3RseSBpbgorICAgIE9wZW5UeXBlL0NGRiBmb250cy4gIE5vdyBhbGwgSSBuZWVkIGlzIHRvIHN1cHBvcnQgcHVyZSBDRkYgYW5kIENFRgorICAgIGZvbnRzIHRvIGJlIGRvbmUgd2l0aCB0aGlzIGRyaXZlciA6LSkKKworICAtIEFkZGVkIHRoZSAgV2luZG93cyBGTlQvRk9OIGRyaXZlciBpbiBgc3JjL3dpbmZvbnRzJy4gICBGb3Igbm93LCBpdAorICAgIGFsd2F5cyAgYHNpbXVsYXRlcycgICBhICBVbmljb2RlICBjaGFybWFwLCAgc28gICBpdCAgc2hvdWxkbid0ICBiZQorICAgIGNvbnNpZGVyZWQgY29tcGxldGVkIHJpZ2h0IG5vdy4KKworICAgIEl0ICBpcyB0aGVyZSAgdG8gYmUgIG1vcmUgYSAgcHJvb2Ygb2YgIGNvbmNlcHQgdGhhbiAgYW55dGhpbmcgZWxzZQorICAgIGFueXdheS4gIFRoZSBkcml2ZXIgaXMgYSBzaW5nbGUgIEMgc291cmNlIGZpbGUsIHRoYXQgY29tcGlsZXMgdG8gMworICAgIEtiIG9mIGNvZGUuCisKKyAgICBJJ20gIHN0aWxsIHdvcmtpbmcgb24gIHRoZSBQQ0YvQkRGICBkcml2ZXJzLCBidXQgIEknbSB0b28gIGxhenkgdG8KKyAgICBmaW5pc2ggdGhlbSBub3cuCisKKyAgLSBDSEFOR0VTIFRPIFRIRSBISUdILUxFVkVMIEFQSQorCisgICAgKiBGVF9HZXRfS2VybmluZyBoYXMgYSBuZXcgcGFyYW1ldGVyIHRoYXQgYWxsb3dzIHlvdSB0byBzZWxlY3QgdGhlCisgICAgICBjb29yZGluYXRlcyBvZiB0aGUga2VybmluZyAgdmVjdG9yIChmb250IHVuaXRzLCBzY2FsZWQsIHNjYWxlZCArCisgICAgICBncmlkLWZpdHRlZCkuCisgICAgKiBUaGUgIG91dGxpbmUgZnVuY3Rpb25zIGFyZSAgbm93IGluIDxmcmVldHlwZS9mdG91dGxuLmg+ICBhbmQgbm90CisgICAgICBwYXJ0IG9mIDxmcmVldHlwZS9mcmVldHlwZS5oPiBhbnltb3JlLgorICAgICogPGZyZWV0eXBlL2Z0bW9kdWxlLmg+ICAgIG5vdyAgICAgY29udGFpbnMgICAgZGVjbGFyYXRpb25zICAgIGZvcgorICAgICAgIEZUX05ld19MaWJyYXJ5LCBGVF9Eb25lX0xpYnJhcnksIEZUX0FkZF9EZWZhdWx0X01vZHVsZXMuCisgICAgKiBUaGUgc28tY2FsbGVkIGNvbnZlbmllbmNlICBmdW5jdGlvbnMgaGF2ZSBtb3ZlZCBmcm9tIGBmdG91dGxuLmMnCisgICAgICB0byAgYGZ0Z2x5cGguYycsICBhbmQgIGFyZSAgdGh1cyBhdmFpbGFibGUgIHdpdGggIHRoaXMgIG9wdGlvbmFsCisgICAgICBjb21wb25lbnQgICAgb2YgICB0aGUgICBsaWJyYXJ5LiAgICAgVGhleSAgIGFyZSAgICBkZWNsYXJlZCAgIGluCisgICAgICA8ZnJlZXR5cGUvZnRnbHlwaC5oPiBub3cuCisgICAgKiBBbnRpLWFsaWFzZWQgIHJlbmRlcmluZyBpcyBub3cgIHRoZSBkZWZhdWx0ICBmb3IgRlRfUmVuZGVyX0dseXBoCisgICAgICAoaS5lLiBjb3JyZXNwb25kcyB0byByZW5kZXJfbW9kZSA9PSAwID09IGZ0X3JlbmRlcl9tb2RlX25vcm1hbCkuCisgICAgICBUbyBnZW5lcmF0ZSBhIG1vbm9jaHJvbWUgYml0bWFwLCB1c2UgZnRfcmVuZGVyX21vZGVfbW9ubywgb3IgdGhlCisgICAgICBGVF9MT0FEX01PTk9DSFJPTUUgICAgIGZsYWcgICAgaW4gICAgRlRfTG9hZF9HbHlwaC9GVF9Mb2FkX0NoYXIuCisgICAgICBGVF9MT0FEX0FOVElfQUxJQVMgaXMgc3RpbGwgZGVmaW5lZCwgYnV0IHZhbHVlcyB0byAwLgorICAgICogPGZyZWV0eXBlL2ZyZWV0eXBlLmg+ICBub3cgaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg+LAorICAgICAgc29sdmluZyBhIGZldyBoZWFkYWNoZXMgOi0pCisgICAgKiBUaGUgdHlwZSBGVF9HbHlwaFNsb3RSZWMgaGFzIG5vdyBhIGBsaWJyYXJ5JyBmaWVsZC4KKworICAtIENIQU5HRVMgVE8gVEhFIGBmdGdseXBoLmgnIEFQSQorCisgICAgVGhpcyBBUEkgaGFzICBiZWVuIHNldmVyZWx5IG1vZGlmaWVkIGluIG9yZGVyICB0byBtYWtlIGl0IHNpbXBsZXIsCisgICAgY2xlYXJlciwgYW5kIG1vcmUgIGVmZmljaWVudC4gIEl0IGNlcnRhaW5seSBub3cgbG9va3MgIGxpa2UgYSByZWFsCisgICAgYGdseXBoIGZhY3RvcnknICBvYmplY3QsIGFuZCBhbGxvd3MgY2xpZW50ICBhcHBsaWNhdGlvbnMgdG8gbWFuYWdlCisgICAgKGkuZS4gIHRyYW5zZm9ybSwgIGJib3ggIGFuZCAgcmVuZGVyKSBnbHlwaCAgaW1hZ2VzICB3aXRob3V0ICBldmVyCisgICAga25vd2luZyB0aGVpciBvcmlnaW5hbCBmb3JtYXQuCisKKyAgLSBBZGRlZCAgc3VwcG9ydCAgZm9yIENJRC1rZXllZCAgZm9udHMgIHRvICB0aGUgIENGRiBkcml2ZXIuICAgTWF5YmUKKyAgICBzdXBwb3J0IGZvciBwdXJlIENGRiArIENFRiBmb250cyBzaG91bGQgY29tZSBpbj8KKworICAtIENsZWFuZWQgdXAgIHNvdXJjZSBjb2RlIGluIG9yZGVyICB0byBhdm9pZCB0d28gIGZ1bmN0aW9ucyB3aXRoIHRoZQorICAgIHNhbWUgbmFtZS4gIEFsc28gIGNoYW5nZWQgdGhlIG5hbWVzIG9mIHRoZSAgZmlsZXMgaW4gYHR5cGUxeicgZnJvbQorICAgIGB0MVhYWFgnIHRvIGB6MVhYWFgnIGluIG9yZGVyIHRvIGF2b2lkIGFueSBjb25mbGljdHMuCisKKyAgICBgbWFrZSBtdWx0aScgbm93IHdvcmtzIHdlbGwgOi0pCisKKyAgICBBbHNvIHJlbW92ZWQgdGhlIHVzZSBvZiBgY2lkYWZtJyBmb3Igbm93LCBldmVuIGlmIHRoZSBzb3VyY2UgZmlsZXMKKyAgICBhcmUgIHN0aWxsIHRoZXJlLiAgVGhpcyAgZnVuY3Rpb25hbGl0eSB3aWxsICBjZXJ0YWlubHkgIGdvIGludG8gIGEKKyAgICBzcGVjaWZpYyBtb2R1bGUuCisKKyAgLSBBRERFRCBTVVBQT1JUIEZPUiBUSEUgQVVUTy1ISU5URVIKKworICAgIEl0ICB3b3JrcyA6LSkgSSAgaGF2ZSBhICBkZW1vIHByb2dyYW0gIHdoaWNoIHNpbXBseSAgaXMgYSAgY29weSBvZgorICAgIGBmdHZpZXcnICAgICAgIHRoYXQgICAgICBkb2VzICAgICAgIGEgICAgICBgRlRfQWRkX01vZHVsZShsaWJyYXJ5LAorICAgICZhdXRvaGludGVyX21vZHVsZV9jbGFzcyknIGFmdGVyICBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLCBhbmQgVHlwZQorICAgIDEgJiBPcGVuVHlwZS9DRkYgZm9udHMgYXJlIG5vdyBoaW50ZWQuCisKKyAgICBDSUQgIGZvbnRzIGFyZSAgbm90IGhpbnRlZCwgIGFzIHRoZXkgIGluY2x1ZGUgbm8gIGNoYXJtYXAgIGFuZCB0aGUKKyAgICBhdXRvLWhpbnRlciBkb2Vzbid0IGluY2x1ZGUgIGBnZW5lcmljJyBnbG9iYWwgbWV0cmljcyBjb21wdXRhdGlvbnMKKyAgICB5ZXQuCisKKyAgICBOb3csIEkgbmVlZCB0byByZWxlYXNlIHRoaXMgdGhpbmcgdG8gdGhlIEZyZWVUeXBlIDIgc291cmNlLgorCisgIC0gQ0hBTkdFUyBUTyBUSEUgUkVOREVSRVIgTU9EVUxFUworCisgICAgVGhlICBtb25vY2hyb21lICBhbmQgc21vb3RoICByZW5kZXJlcnMgIGFyZSAgbm93ICBpbiB0d28gIGRpc3RpbmN0CisgICAgZGlyZWN0b3JpZXMsIG5hbWVseSBgc3JjL3Jhc3RlcjEnIGFuZCBgc3JjL3Ntb290aCcuICBOb3RlIHRoYXQgdGhlCisgICAgb2xkIGBzcmMvcmVuZGVyZXInIGlzIG5vdyBnb25lLgorCisgICAgSSBkaXRjaGVkICB0aGUgNS1ncmF5LWxldmVscyByZW5kZXJlcnMuICBCYXNpY2FsbHksICBpdCBpbnZvbHZlZCBhCisgICAgc2ltcGxlICNkZWZpbmUgdG9nZ2xlIGluICdzcmMvcmFzdGVyMS9mdHJhc3Rlci5jJy4KKworICAgIEZUX1JlbmRlcl9HbHlwaCwgIEZUX091dGxpbmVfUmVuZGVyICAmICBGVF9PdXRsaW5lX0dldF9CaXRtYXAgIG5vdworICAgIHNlbGVjdCB0aGUgYmVzdCByZW5kZXJlciAgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gcmVuZGVyIG1vZGUuICBJZgorICAgIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciBhICBnaXZlbiBnbHlwaCBpbWFnZSBmb3JtYXQgaXNuJ3QgY2FwYWJsZQorICAgIG9mIHN1cHBvcnRpbmcgIHRoZSByZW5kZXIgbW9kZSwgYW5vdGhlciAgb25lIHdpbGwgYmUgIGZvdW5kIGluIHRoZQorICAgIGxpYnJhcnkncyBsaXN0LiAgIFRoaXMgbWVhbnMgdGhhdCBjbGllbnQgYXBwbGljYXRpb25zICBkbyBub3QgbmVlZAorICAgIHRvICBzd2l0Y2ggb3IgIHNldCAgdGhlICByZW5kZXJlcnMgdGhlbXNlbHZlcyAgKGFzICBpbiB0aGUgIGxhdGVzdAorICAgIGNoYW5nZSksIHRoZXknbGwgZ2V0IHdoYXQgdGhleSB3YW50IGF1dG9tYXRpY2FsbHkuICBBdCBsYXN0LgorCisgICAgQ2hhbmdlZCB0aGUgZGVtbyBwcm9ncmFtcyBhY2NvcmRpbmdseS4KKworICAtIE1BSk9SIElOVEVSTkFMIFJFREVTSUdOOgorCisgICAgQSBsb3Qgb2YgaW50ZXJuYWwgbW9kaWZpY2F0aW9ucyAgaGF2ZSBiZWVuIHBlcmZvcm1lZCBsYXRlbHkgb24gdGhlCisgICAgc291cmNlIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBlbmhhbmNlbWVudHM6CisKKyAgICAqIE1vcmUgZ2VuZXJpYyBtb2R1bGUgc3VwcG9ydDoKKworICAgICAgVGhlIEZUX01vZHVsZSAgdHlwZSBpcyAgbm93IGRlZmluZWQgdG8gIHJlcHJlc2VudCBhIGhhbmRsZSAgdG8gYQorICAgICAgZ2l2ZW4gIG1vZHVsZS4gICBUaGUgIGZpbGUgIDxmcmVldHlwZS9mdG1vZHVsZS5oPiAgY29udGFpbnMgIHRoZQorICAgICAgRlRfTW9kdWxlX0NsYXNzIGRlZmluaXRpb24sIGFzIHdlbGwgYXMgdGhlIG1vZHVsZS1sb2FkaW5nIHB1YmxpYworICAgICAgQVBJLgorCisgICAgICBUaGUgIEZUX0RyaXZlciB0eXBlICBpcyBzdGlsbCAgZGVmaW5lZCwgYW5kICBzdGlsbCAgcmVwcmVzZW50cyBhCisgICAgICBwb2ludGVyIHRvICBhIGZvbnQgZHJpdmVyLiAgTm90ZSB0aGF0ICBGVF9BZGRfRHJpdmVyIGlzIHJlcGxhY2VkCisgICAgICBieSBGVF9BZGRfTW9kdWxlLCBGVF9HZXRfRHJpdmVyIGJ5IEZUX0dldF9Nb2R1bGUsIGV0Yy4KKworICAgICogU3VwcG9ydCBmb3IgZ2VuZXJpYyBnbHlwaCBpbWFnZSB0eXBlczoKKworICAgICAgVGhlIEZUX1JlbmRlcmVyICB0eXBlIGlzIGEgcG9pbnRlciAgdG8gYSBtb2R1bGUgIHVzZWQgdG8gcGVyZm9ybQorICAgICAgdmFyaW91cyBvcGVyYXRpb25zIG9uIGdseXBoIGltYWdlLgorCisgICAgICBFYWNoIHJlbmRlcmVyIGlzICBjYXBhYmxlIG9mIGhhbmRsaW5nIGltYWdlcyBpbiAgYSBzaW5nbGUgZm9ybWF0CisgICAgICAoZS5nLiBmdF9nbHlwaF9mb3JtYXRfb3V0bGluZSkuICBJdHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvOgorCisgICAgICAtIHRyYW5zZm9ybSBhbiBnbHlwaCBpbWFnZQorICAgICAgLSByZW5kZXIgYSBnbHlwaCBpbWFnZSBpbnRvIGEgYml0bWFwCisgICAgICAtIHJldHVybiB0aGUgY29udHJvbCBib3ggKGRpbWVuc2lvbnMpIG9mIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UKKworICAgICAgVGhlIHNjYW4gY29udmVydGVycyBgZnRyYXN0ZXIuYycgYW5kIGBmdGdyYXlzLmMnIGhhdmUgYmVlbiBtb3ZlZAorICAgICAgdG8gdGhlIG5ldyBkaXJlY3RvcnkgYHNyYy9yZW5kZXJlcicsIGFuZCBhcmUgdXNlZCB0byBwcm92aWRlIHR3bworICAgICAgZGVmYXVsdCByZW5kZXJlciBtb2R1bGVzLgorCisgICAgICBPbmUgY29ycmVzcG9uZHMgIHRvIHRoZSBgc3RhbmRhcmQnIHNjYW4tY29udmVydGVyLCAgdGhlIG90aGVyIHRvCisgICAgICB0aGUgYHNtb290aCcgb25lLgorCisgICAgICBoZSAgY3VycmVudCAgcmVuZGVyZXIgIGNhbiAgYmUgIHNldCAgdGhyb3VnaCAgdGhlICBuZXcgIGZ1bmN0aW9uCisgICAgICBGVF9TZXRfUmVuZGVyZXIuCisKKyAgICAgIFRoZSBvbGQgcmFzdGVyLXJlbGF0ZWQgZnVuY3Rpb24gRlRfU2V0X1Jhc3RlciwgRlRfR2V0X1Jhc3RlciBhbmQKKyAgICAgIEZUX1NldF9SYXN0ZXJfTW9kZSBoYXZlIG5vdyBkaXNhcHBlYXJlZCwgaW4gZmF2b3Igb2YgdGhlIG5ldzoKKworICAgICAgICBGVF9HZXRfUmVuZGVyZXIKKyAgICAgICAgRlRfU2V0X1JlbmRlcmVyCisKKyAgICAgIFNlZSB0aGUgZmlsZSA8ZnJlZXR5cGUvZnRyZW5kZXIuaD4gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgVGhlc2UgIGNoYW5nZXMgIHdlcmUgIG5lY2Vzc2FyeSAgdG8gcHJvcGVybHkgIHN1cHBvcnQgIGRpZmZlcmVudAorICAgICAgc2NhbGFibGUgZm9ybWF0cyBpbiB0aGUgZnV0dXJlLCBsaWtlIGJpLWNvbG9yIGdseXBocywgZXRjLgorCisgICAgKiBHbHlwaCBsb2FkZXIgb2JqZWN0OgorCisgICAgICBBICBuZXcgIGludGVybmFsICBvYmplY3QsICBjYWxsZWQgIGEgICdnbHlwaCAgbG9hZGVyJyAgaGFzICBiZWVuCisgICAgICBpbnRyb2R1Y2VkIGluIHRoZSBiYXNlIGxheWVyLiAgSXQgaXMgdXNlZCBieSBhbGwgc2NhbGFibGUgZm9ybWF0CisgICAgICBmb250IGRyaXZlcnMgdG8gbG9hZCBnbHlwaHMgYW5kIGNvbXBvc2l0ZXMuCisKKyAgICAgIFRoaXMgb2JqZWN0ICBoYXMgYmVlbiAgY3JlYXRlZCB0byByZWR1Y2UgIHRoZSBjb2RlIHNpemUgIG9mIGVhY2gKKyAgICAgIGRyaXZlciwgIGFzICBlYWNoICBvbmUgIG9mICB0aGVtICBiYXNpY2FsbHkgIHJlLWltcGxlbWVudGVkICBpdHMKKyAgICAgIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgIFNlZSA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg+IGFuZCB0aGUgRlRfR2x5cGhMb2FkZXIgdHlwZSBmb3IKKyAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAqIEZUX0dseXBoU2xvdCBoYXMgbmV3IGZpZWxkczoKKworICAgICAgSW4gIG9yZGVyICAgdG8gIHN1cHBvcnQgIGV4dGVuZGVkICBmZWF0dXJlcyAgIChzZWUgIGJlbG93KSwgIHRoZQorICAgICAgRlRfR2x5cGhTbG90IHN0cnVjdHVyZSBoYXMgYSBmZXcgbmV3IGZpZWxkczoKKworICAgICAgbGluZWFySG9yaUFkdmFuY2U6CisKKyAgICAgICAgVGhpcyAgZmllbGQgIGdpdmVzICB0aGUgICBsaW5lYXJseSAgc2NhbGVkICAoaS5lLiAgc2NhbGVkICBidXQKKyAgICAgICAgdW5oaW50ZWQpIGFkdmFuY2UgIHdpZHRoIGZvciB0aGUgIGdseXBoLCBleHByZXNzZWQgYXMgIGEgMTYuMTYKKyAgICAgICAgZml4ZWQgcGl4ZWwgdmFsdWUuICBUaGlzIGlzIHVzZWZ1bCB0byBwZXJmb3JtIFdZU0lXWUcgdGV4dC4KKworICAgICAgbGluZWFyVmVydEFkdmFuY2U6CisgICAgICAgIFRoaXMgZmllbGQgIGdpdmVzIHRoZSBsaW5lYXJseSAgc2NhbGVkIGFkdmFuY2UgaGVpZ2h0ICBmb3IgdGhlCisgICAgICAgIGdseXBoICAocmVsZXZhbnQgaW4gIHZlcnRpY2FsICBnbHlwaCBsYXlvdXRzICBvbmx5KS4gIFRoaXMgIGlzCisgICAgICAgIHVzZWZ1bCB0byBwZXJmb3JtIFdZU0lXWUcgdGV4dC4KKworICAgICAgICBOb3RlIHRoYXQgIHRoZSB0d28gYWJvdmUgZmllbGQgcmVwbGFjZSAgdGhlIHJlbW92ZWQgYG1ldHJpY3MyJworICAgICAgICBmaWVsZCBpbiB0aGUgZ2x5cGggc2xvdC4KKworICAgICAgYWR2YW5jZToKKyAgICAgICAgVGhpcyBmaWVsZCBpcyBhIHZlY3RvciAgdGhhdCBnaXZlcyB0aGUgdHJhbnNmb3JtZWQgYWR2YW5jZSBmb3IKKyAgICAgICAgdGhlIGdseXBoLiAgIEJ5IGRlZmF1bHQsIGl0IGNvcnJlc3BvbmRzIHRvICB0aGUgYWR2YW5jZSB3aWR0aCwKKyAgICAgICAgdW5sZXNzICBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCAgd2FzICBzcGVjaWZpZWQgIHdoZW4gIGNhbGxpbmcKKyAgICAgICAgRlRfTG9hZF9HbHlwaCBvciBGVF9Mb2FkX0NoYXIuCisKKyAgICAgIGJpdG1hcF9sZWZ0OgorICAgICAgICBUaGlzICBmaWVsZCBnaXZlcyAgdGhlICBkaXN0YW5jZSBpbiAgaW50ZWdlciAgcGl4ZWxzIGZyb20gIHRoZQorICAgICAgICBjdXJyZW50IHBlbiBwb3NpdGlvbiAgdG8gdGhlIGxlZnQtbW9zdCBwaXhlbCBvZiAgYSBnbHlwaCBpbWFnZQorICAgICAgICBJRiBJVCBJUyAgQSBCSVRNQVAuICBJdCBpcyBvbmx5IHZhbGlkICB3aGVuIHRoZSBgZm9ybWF0JyBmaWVsZAorICAgICAgICBpcyBzZXQgdG8gYGZ0X2dseXBoX2Zvcm1hdF9iaXRtYXAnLCBmb3IgZXhhbXBsZSwgYWZ0ZXIgY2FsbGluZworICAgICAgICB0aGUgbmV3IGZ1bmN0aW9uIEZUX1JlbmRlcl9HbHlwaC4KKworICAgICAgYml0bWFwX3RvcDoKKyAgICAgICAgVGhpcyAgZmllbGQgZ2l2ZXMgIHRoZSAgZGlzdGFuY2UgaW4gIGludGVnZXIgIHBpeGVscyBmcm9tICB0aGUKKyAgICAgICAgY3VycmVudCBwZW4gcG9zaXRpb24gKGxvY2F0ZWQgb24gdGhlIGJhc2VsaW5lKSB0byB0aGUgdG9wLW1vc3QKKyAgICAgICAgcGl4ZWwgb2YgdGhlICBnbHlwaCBpbWFnZSBJRiBJVCBJUyAgQSBCSVRNQVAuICBQb3NpdGl2ZSB2YWx1ZXMKKyAgICAgICAgY29ycmVzcG9uZCB0byB1cHdhcmRzIFkuCisKKyAgICAgIGxvYWRlcjoKKyAgICAgICAgVGhpcyAgaXMgYSAgbmV3ICBwcml2YXRlICBmaWVsZCBmb3IgIHRoZSAgZ2x5cGggc2xvdC4gICBDbGllbnQKKyAgICAgICAgYXBwbGljYXRpb25zIHNob3VsZCBub3QgdG91Y2ggaXQuCisKKworICAgICogU3VwcG9ydCBmb3IgdHJhbnNmb3JtcyBhbmQgZGlyZWN0IHJlbmRlcmluZyBpbiBGVF9Mb2FkX0dseXBoOgorCisgICAgICBNb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGZvdW5kIGluIDxmcmVldHlwZS9mdGdseXBoLmg+IGhhcyBiZWVuCisgICAgICBtb3ZlZCB0byB0aGUgY29yZSBsaWJyYXJ5LiAgSGVuY2UsIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIC0gQSAgIHRyYW5zZm9ybSAgIGNhbiAgIGJlICAgc3BlY2lmaWVkICBmb3IgICBhICAgZmFjZSAgIHRocm91Z2gKKyAgICAgICAgRlRfU2V0X1RyYW5zZm9ybS4gIHRoaXMgdHJhbnNmb3JtICBpcyBhcHBsaWVkIGJ5IEZUX0xvYWRfR2x5cGgKKyAgICAgICAgdG8gIHNjYWxhYmxlIGdseXBoICBpbWFnZXMgKGkuZS4gIE5PVCBUTyAgQklUTUFQUykgIGJlZm9yZSB0aGUKKyAgICAgICAgZnVuY3Rpb24gcmV0dXJucywgdW5sZXNzIHRoZSBiaXQgZmxhZyBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0KKyAgICAgICAgd2FzIHNldCBpbiB0aGUgbG9hZCBmbGFncy4KKworICAgICAgLSBPbmNlICBhICBnbHlwaCBpbWFnZSAgaGFzICBiZWVuICBsb2FkZWQsICBpdCBjYW4gIGJlICBkaXJlY3RseQorICAgICAgICBjb252ZXJ0ZWQgIHRvICBhICBiaXRtYXAgIGJ5ICB1c2luZyAgdGhlICBuZXcgIEZUX1JlbmRlcl9HbHlwaAorICAgICAgICBmdW5jdGlvbi4gIE5vdGUgdGhhdCB0aGlzICBmdW5jdGlvbiB0YWtlcyB0aGUgZ2x5cGggaW1hZ2UgZnJvbQorICAgICAgICB0aGUgZ2x5cGggc2xvdCwgIGFuZCBjb252ZXJ0cyBpdCB0byBhICBiaXRtYXAgd2hvc2UgcHJvcGVydGllcworICAgICAgICBhcmUgcmV0dXJuZWQgIGluIGBmYWNlLmdseXBoLmJpdG1hcCcsIGBmYWNlLmdseXBoLmJpdG1hcF9sZWZ0JworICAgICAgICBhbmQgYGZhY2UuZ2x5cGguYml0bWFwX3RvcCcuICBUaGUgIG9yaWdpbmFsIG5hdGl2ZSBpbWFnZSBtaWdodAorICAgICAgICBiZSBsb3N0IGFmdGVyIHRoZSBjb252ZXJzaW9uLgorCisgICAgICAtIFdoZW4gdXNpbmcgdGhlIG5ldyAgYml0IGZsYWcgRlRfTE9BRF9SRU5ERVIsIHRoZSBGVF9Mb2FkX0dseXBoCisgICAgICAgIGFuZCAgIEZUX0xvYWRfQ2hhciAgIGZ1bmN0aW9ucyAgIHdpbGwgICBjYWxsICAgRlRfUmVuZGVyX0dseXBoCisgICAgICAgIGF1dG9tYXRpY2FsbHkgd2hlbiBuZWVkZWQuCisKKyAgLSBSZWZvcm1hdHRlZCBhbGwgIG1vZHVsZXMgc291cmNlICBjb2RlIGluIG9yZGVyICB0byBnZXQgcmlkICBvZiB0aGUKKyAgICBiYXNpYyBkYXRhIHR5cGVzIHJlZGlmaW5pdGlvbnMgKGkuZS4gYFRUX0ludCcgaW5zdGVhZCBvZiBgRlRfSW50JywKKyAgICBgVDFfRml4ZWQnICBpbnN0ZWFkICBvZiAgYEZUX0ZpeGVkJykuICBIZW5jZSAgdGhlICBmb3JtYXQtc3BlY2lmaWMKKyAgICBwcmVmaXhlcyBsaWtlICBgVFRfJywgYFQxXycsICBgVDJfJyBhbmQgYENJRF8nICBhcmUgb25seSAgdXNlZCBmb3IKKyAgICByZWxldmFudCBzdHJ1Y3R1cmVzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0xEIENIQU5HRVMgRk9SIEJFVEEgNworCisgIC0gYnVnLWZpeGVkIHRoZSAgT3BlblR5cGUvQ0ZGIHBhcnNlci4gIEl0ICBub3cgbG9hZHMgYW5kIGRpc3BsYXlzIG15CisgICAgdHdvICBmb250cyBuaWNlbHksICBidXQgSSdtICBwcmV0dHkgY2VydGFpbiAgdGhhdCBtb3JlICB0ZXN0aW5nIGlzCisgICAgbmVlZGVkIDotKQorCisgIC0gZml4ZWQgdGhlIGNydW1teSBUeXBlIDEgaGludGVyLCBpdCBub3cgaGFuZGxlcyBhY2NlbnRlZCBjaGFyYWN0ZXJzCisgICAgY29ycmVjdGx5ICh3ZWxsLCB0aGUgYWNjZW50IGlzICBub3QgYWx3YXlzIHdlbGwgcGxhY2VkLCBidXQgdGhhdCdzCisgICAgYW5vdGhlciBwcm9ibGVtLi4pCisKKyAgLSBhZGRlZCB0aGUgQ0lELWtleWVkIFR5cGUgMSBkcml2ZXIgaW4gYHNyYy9jaWQnLiAgV29ya3MgcHJldHR5IHdlbGwKKyAgICBmb3Igb25seSAxMyBLYiBvZiBjb2RlICA7LSkgRG9lc24ndCByZWFkIEFGTSBmaWxlcyB0aG91Z2gsIG5vciB0aGUKKyAgICByZWFsbHkgdXNlZnVsIENNQVAgZmlsZXMuLgorCisgIC0gZml4ZWQgIHR3byAgYnVncyAgaW4gIHRoZSAgc21vb3RoICByZW5kZXJlciAgKHNyYy9iYXNlL2Z0Z3JheXMuYykuCisgICAgVGhhbmtzIHRvIEJvcmlzIExldG9jaGEgZm9yIHNwb3R0aW5nIHRoZW0gYW5kIHByb3ZpZGluZyBhIGZpeC4KKworICAtIGZpeGVkIHBvdGVudGlhbCBgZGl2aWRlIGJ5IHplcm8nIGJ1Z3MgaW4gZnRjYWxjLmMuCisKKyAgLSBhZGRlZCBzb3VyY2UgIGNvZGUgZm9yICB0aGUgT3BlblR5cGUvQ0ZGIGRyaXZlciAgKHN0aWxsIGluY29tcGxldGUKKyAgICB0aG91Z2guLikKKworICAtIG1vZGlmaWVkIHRoZSAgU0ZOVCBkcml2ZXIgc2xpZ2h0bHkgIHRvIHBlcmZvcm0gbW9yZSAgcm9idXN0IGhlYWRlcgorICAgIGNoZWNrcyAgaW4gVFRfTG9hZF9TRk5UX0hlYWRlci4gIFRoaXMgcHJldmVudHMgY2VydGFpbiAgZm9udCBmaWxlcworICAgIChlLmcuICBzb21lICBUeXBlICAxICBNdWx0aXBsZSAgTWFzdGVycykgIGZyb20gIGJlaW5nICBpbmNvcnJlY3RseQorICAgIGByZWNvZ25pemVkJyBhcyBUcnVlVHlwZSBmb250IGZpbGVzLi4KKworICAtIG1vdmVkIGEgbG90IG9mIHN0dWZmIGZyb20gIHRoZSBUcnVlVHlwZSBkcml2ZXIgdG8gdGhlIFNGTlQgbW9kdWxlLAorICAgIHRoaXMgICBhbGxvd3MgICBncmVhdGVyICAgY29kZSAgIHJlLXVzZSAgIGJldHdlZW4gICBmb250ICAgZHJpdmVycworICAgIChlLmcuIFRydWVUeXBlLCBPcGVuVHlwZSwgQ29tcGFjdC1UcnVlVHlwZSwgZXRjLi4pCisKKyAgLSBhZGRlZCBhIHRpbnkgc2VnbWVudCBjYWNoZSB0byB0aGUgU0ZOVCBDaGFybWFwIDQgZGVjb2RlciwgaW4gb3JkZXIKKyAgICB0byBtaW5pbWFsbHkgc3BlZWQgaXQgdXAuLgorCisgIC0gYWRkZWQgIHN1cHBvcnQgZm9yICBNdWx0aXBsZSBNYXN0ZXIgIGZvbnRzIGluICBgdHlwZTF6Jy4gIFRoZXJlIGlzCisgICAgYWxzbyBhIG5ldyBmaWxlIG5hbWVkIDxmcmVldHlwZS9mdG1tLmg+IHdoaWNoIGRlZmluZXMgZnVuY3Rpb25zIHRvCisgICAgbWFuYWdlIHRoZW0gZnJvbSBjbGllbnQgYXBwbGljYXRpb25zLgorCisgICAgVGhlIG5ldyBmaWxlIGBzcmMvYmFzZS9mdG1tLmMnIGlzIGFsc28gb3B0aW9uYWwgdG8gdGhlIGVuZ2luZS4uCisKKyAgLSB2YXJpb3VzICBmb3JtYXR0aW5nIGNoYW5nZXMgKGUuZy4gIEVYUE9SVF9ERUYgLT4gIEZUX0VYUE9SVF9ERUYpICsKKyAgICBzbWFsbCBidWcgZml4ZXMgaW4gRlRfTG9hZF9HbHlwaCwgdGhlIGB0eXBlMScgZHJpdmVyLCBldGMuLgorCisgIC0gYSBtaW5vciBmaXggdG8gdGhlIFR5cGUgMSBkcml2ZXIgdG8gbGV0IHRoZW0gYXBwbHkgdGhlIGZvbnQgbWF0cml4CisgICAgY29ycmVjdGx5ICh1c2VkIGZvciBtYW55IG9ibGlxdWUgZm9udHMuLikKKworICAtIHNvbWUgZml4ZXMgZm9yIDY0LWJpdCBzeXN0ZW1zIChtYWlubHkgY2hhbmdpbmcgc29tZSBGVF9UUkFDRSBjYWxscworICAgIHRvIHVzZSAlcCBpbnN0ZWFkIG9mICVseCkuICBUaGFua3MgdG8gS2FybCBSb2JpbGxhcmQuCisKKyAgLSBmaXhlZCAgc29tZSBidWdzICBpbiAgdGhlIHNiaXQgIGxvYWRlciAoc3JjL2Jhc2Uvc2ZudC90dHNiaXQuYykgICsKKyAgICBhZGRlZCAgYSBuZXcgZmxhZywgIEZUX0xPQURfQ1JPUF9CSVRNQVAgdG8gIHF1ZXJ5IHRoYXQgIGJpdG1hcHMgYmUKKyAgICBjcm9wcGVkIHdoZW4gIGxvYWRlZCBmcm9tIGEgZmlsZSAgKG1heWJlIEkgc2hvdWxkICBtb3ZlIHRoZSBiaXRtYXAKKyAgICBjcm9wcGVyIHRvIHRoZSBiYXNlIGxheWVyID8/KS4KKworICAtIGNoYW5nZWQgdGhlIGRlZmF1bHQgIG51bWJlciBvZiBncmF5IGxldmVscyBvZiAgdGhlIHNtb290aCByZW5kZXJlcgorICAgIHRvIDI1NiAgKGluc3RlYWQgb2YgIHRoZSBwcmV2aW91cyAxMjgpLiAgT2YgY291cnNlLCB0aGUgIGh1bWFuIGV5ZQorICAgIGNhbid0IHNlZSBhbnkgZGlmZmVyZW5jZSA7LSkKKworICAtIHJlbW92ZWQgVFRfTUFYX1NVQkdMWVBIUywgIHRoZXJlIGlzIG5vIHN0YXRpYyBsaW1pdCAgb24gdGhlIG51bWJlcgorICAgIG9mIHN1YmdseXBocyBpbiBhIFRydWVUeXBlIGZvbnQgbm93Li4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09MRCBDSEFOR0VTIDE2IE1heSAyMDAwCisKKyAgLSB0YWdnZWQgYEJFVEEtNicgIGluIHRoZSAgQ1ZTIHRyZWUuICBUaGlzIG9uZSBpcyBhICBzZXJpb3VzIHJlbGVhc2UKKyAgICBjYW5kaWRhdGUgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBpbmNvcnBvcmF0ZSB0aGUgYXV0by1oaW50ZXIgeWV0Li4KKworICAtIHZhcmlvdXMgb2Jzb2xldGUgZmlsZXMgd2VyZSByZW1vdmVkLCBhbmQgY29weXJpZ2h0IGhlYWRlciB1cGRhdGVkCisKKyAgLSBmaW5hbGx5ICB1cGRhdGVkICB0aGUgIHN0YW5kYXJkICAgcmFzdGVyICB0byAgZml4ICB0aGUgIG1vbm9jaHJvbWUKKyAgICByZW5kZXJpbmcgYnVnICsgcmUtZW5hYmxlICBzdXBwb3J0IGZvciA1LWdyYXkgbGV2ZWxzIGFudGktYWxpYXNpbmcKKyAgICAoc3Vjaywgc3Vjay4uKQorCisgIC0gY3JlYXRlZCBuZXcgaGVhZGVyIGZpbGVzLCBhbmQgbW9kaWZpZWQgc291cmNlcyBhY2NvcmRpbmdseToKKworICAgICA8ZnJlZXR5cGUvZnR0eXBlcy5oPgorICAgICAgIC0gc2ltcGxlIEZyZWVUeXBlIHR5cGVzLCB3aXRob3V0IHRoZSBBUEkKKyAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5Lmg+CisgICAgICAgLSBkZWZpbml0aW9uIG9mIG1lbW9yeS1tYW5hZ2VtZW50IG1hY3JvcworCisgIC0gYWRkZWQgICB0aGUgICBgRFNJRycgICAoT3BlblR5cGUgICBEaWdpdGFsICAgU2lnbmF0dXJlKSAgIHRhZyAgIHRvCisgICAgPGZyZWV0eXBlL3R0dGFncy5oPgorCisgIC0gbGlnaHQgdXBkYXRlL2NsZWFuaW5nIG9mIHRoZSBidWlsZCBzeXN0ZW0gKyBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzCisgICAgaW4gIG9yZGVyICB0byAgZ2V0ICByaWQgIG9mIF9hbGxfICBjb21waWxlciAgd2FybmluZ3MgIHdpdGggIHRocmVlCisgICAgY29tcGlsZXJzLCBpLmU6CisKKyAgICBnY2Mgd2l0aCBgLWFuc2kgLXBlZGFudGljIC1XYWxsIC1XJywgVmlzdWFsIEMrKyB3aXRoIGAvVzMgL1dYJyBhbmQKKyAgICBMQ0MKKworICAgIElNUE9SVEFOVCBOT1RFIEZPUiBXSU4zMi1MQ0MgVVNFUlM6CisgICAgfAorICAgIHwgIEl0IHNlZW1zIHRoZSBDIHByZS1wcm9jZXNzb3IgIHRoYXQgY29tZXMgd2l0aCBMQ0MgaXMgYnJva2VuLCBpdAorICAgIHwgIGRvZXNuJ3QgIHJlY29nbml6ZSAgdGhlICBBTlNJICBzdGFuZGFyZCAgZGlyZWN0aXZlcyAgIyAgYW5kICAjIworICAgIHwgIGNvcnJlY3RseSAgIHdoZW4gIG9uZSAgb2YgICB0aGUgIGFyZ3VtZW50ICBpcyAgYSAgbWFjcm8uICBBbHNvLAorICAgIHwgIHNvbWV0aGluZyBsaWtlOgorICAgIHwKKyAgICB8ICAgICAjZGVmaW5lIEYoeCkgIHByaW50IyN4CisgICAgfAorICAgIHwgICAgIEYoKCJoZWxsbyIpKQorICAgIHwKKyAgICB8ICB3aWxsIGdldCBpbmNvcnJlY3RseSB0cmFuc2xhdGVkIHRvOgorICAgIHwKKyAgICB8ICAgICBwcmludCAiaGVsbG8iKQorICAgIHwKKyAgICB8ICBieSBpdHMgcHJlLXByb2Nlc3Nvci4gIEZvciB0aGlzIHJlYXNvbiwgeW91IHNpbXBseSBjYW5ub3QgYnVpbGQKKyAgICB8ICBGcmVlVHlwZSAyIGluIGRlYnVnIG1vZGUgd2l0aCB0aGlzIGNvbXBpbGVyLi4KKworICAtIHlldCAgYW5vdGhlciBtYXNzaXZlIGdydW50IHdvcmsuICBJJ3ZlICBjaGFuZ2VkIHRoZSAgZGVmaW5pdGlvbiBvZgorICAgIHRoZSBFWFBPUlRfREVGLCAgRVhQT1JUX0ZVTkMsIEJBU0VfREVGICYgIEJBU0VfRlVOQyBtYWNyb3MuICBUaGVzZQorICAgIG5vdyB0YWtlIGFuIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgdHlwZS4KKworICAgIFRoaXMgIGlzIG5lY2Vzc2FyeSB0byAgY29tcGlsZSBGcmVlVHlwZSAgYXMgYSAgRExMIG9uICBXaW5kb3dzIGFuZAorICAgIE9TLzIuICBEZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIHVzZWQsIGEgY29tcGlsZXItc3BlY2lmaWMga2V5d29yZAorICAgIGxpa2UgIF9fZXhwb3J0IG9yIF9fc3lzdGVtICBtdXN0IGJlICBwbGFjZWQgYmVmb3JlICAoVmlzdWFsQysrKSBvcgorICAgIGFmdGVyIChCb3JsYW5kQysrKSB0aGUgdHlwZS4uCisKKyAgICBPZiBjb3Vyc2UsIHRoaXMgbmVlZGVkIGEgbG90IG9mIGNoYW5nZXMgdGhyb3VnaG91dCB0aGUgc291cmNlIGNvZGUKKyAgICB0byBtYWtlIGl0IGNvbXBpbGUgYWdhaW4uLi4gIEFsbCBjbGVhbmVkIHVwIG5vdywgYXBwYXJlbnRseS4uCisKKyAgICBOb3RlIGFsc28gIHRoYXQgdGhlcmUgaXMgYSAgbmV3IEVYUE9SVF9WQVIgbWFjcm8gIGRlZmluZWQgdG8gYWxsb3cKKyAgICB0aGUgICBfZGVjbGFyYXRpb25fICAgIG9mICAgYW4gICBleHBvcnRhYmxlICAgIHB1YmxpYyAgIChjb25zdGFudCkKKyAgICB2YXJpYWJsZS4gIFRoaXMgIGlzICB0aGUgICBjYXNlICBvZiAgdGhlICByYXN0ZXIgIGludGVyZmFjZXMgIChzZWUKKyAgICBmdHJhc3Rlci5oIGFuZCBmdGdyYXlzLmgpLCBhcyB3ZWxsIGFzIGVhY2ggbW9kdWxlJ3MgaW50ZXJmYWNlIChzZWUKKyAgICBzZmRyaXZlci5oLCBwc2RyaXZlci5oLCBldGMuLikKKworICAtIG5ldyBmZWF0dXJlOiBpdCAgaXMgbm93IHBvc3NpYmxlIHRvIHBhc3MgIGV4dHJhIHBhcmFtZXRlcnMgdG8gZm9udAorICAgICAgICAgICAgICAgICBkcml2ZXJzICB3aGVuIGNyZWF0aW5nICBhIG5ldyAgZmFjZSBvYmplY3QuICBGb3Igbm93LAorICAgICAgICAgICAgICAgICB0aGlzIGNhcGFiaWxpdHkgaXMgdW51c2VkLiAgSXQgY291bGQgaG93ZXZlciBwcm92ZSB0bworICAgICAgICAgICAgICAgICBiZSB1c2VmdWwgaW4gYSBuZWFyIGZ1dHVyZS4uCisKKyAgICAgIHRoZSBGVF9PcGVuX0FyZ3Mgc3RydWN0dXJlIHdhcyAgY2hhbmdlcywgYXMgd2VsbCBhcyB0aGUgaW50ZXJuYWwKKyAgICAgIGRyaXZlciBpbnRlcmZhY2UgICh0aGUgc3BlY2lmaWMgYGluaXRfZmFjZScgIG1vZHVsZSBmdW5jdGlvbiBoYXMKKyAgICAgIG5vdyBhIGRpZmZlcmVudCBzaWduYXR1cmUpLgorCisgIC0gdXBkYXRlZCB0aGUgdHV0b3JpYWwgKG5vdCBmaW5pc2hlZCB0aG91Z2gpLgorCisgIC0gdXBkYXRlZCB0aGUgdG9wLWxldmVsIEJVSUxEICBkb2N1bWVudAorCisgIC0gZml4ZWQgIGEgIHBvdGVudGlhbCBtZW1vcnkgIGxlYWsgIHRoYXQgIGNvdWxkICBvY2N1ciB3aGVuICBsb2FkaW5nCisgICAgZW1iZWRkZWQgYml0bWFwcy4KKworICAtIGFkZGVkICAgICB0aGUgICAgIGRlY2xhcmF0aW9uICAgICBvZiAgICAgRlRfTmV3X01lbW9yeV9GYWNlICAgICBpbgorICAgIDxmcmVldHlwZS9mcmVldHlwZS5oPiwgYXMgIGl0IHdhcyAgbWlzc2luZyBmcm9tIHRoZSAgcHVibGljIGhlYWRlcgorICAgICh0aGUgaW1wbGVtZW50YXRpb24gd2FzIGFscmVhZHkgaW4gYGZ0b2Jqcy5jJykuCisKKyAgLSB0aGUgZmlsZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4gaGFzIGJlZW4gc2VyaW91c2x5IHVwZGF0ZWQgaW4gb3JkZXIKKyAgICB0byBhbGxvdyAgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uICBvZiBlcnJvciBtZXNzYWdlIHRhYmxlcy4gICBTZWUKKyAgICB0aGUgY29tbWVudHMgd2l0aGluIGl0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgIC0gbWFqb3IgZGlyZWN0b3J5ICBoaWVyYXJjaHkgcmUtb3JnYW5pc2F0aW9uLiAgVGhpcyB3YXMgZG9uZSBmb3IgdHdvCisgICAgdGhpbmdzOgorCisgICAgICAqIGZpcnN0LCAgdG8gZWFzZSAgdGhlIGBtYW51YWwnICBjb21waWxhdGlvbiBvZiAgdGhlICBsaWJyYXJ5IGJ5CisgICAgICAgIHJlcXVpcmluZyBhdCBsb3QgbGVzcyBpbmNsdWRlIHBhdGhzIDotKQorCisgICAgICAqIHNlY29uZCwgIHRvICBhbGxvdyAgZXh0ZXJuYWwgIHByb2dyYW1zIHRvICBlZmZlY3RpdmVseSAgYWNjZXNzCisgICAgICAgIGludGVybmFsICBkYXRhICBmaWVsZHMuICBGb3IgZXhhbXBsZSwgIHRoaXMgIGNhbiBiZSAgZXh0cmVtZWx5CisgICAgICAgIHVzZWZ1bCBpZiAgc29tZW9uZSB3YW50cyAgdG8gd3JpdGUgYSAgZm9udCBwcm9kdWNlciBvciAgYSBmb250CisgICAgICAgIG1hbmFnZXIgb24gdG9wIG9mIEZyZWVUeXBlLgorCisgICAgQmFzaWNhbGx5LCB5b3UgIHNob3VsZCBub3cgdXNlICB0aGUgJ2ZyZWV0eXBlLycgcHJlZml4ICBmb3IgaGVhZGVyCisgICAgaW5jbHVzaW9uLCBhcyBpbjoKKworICAgICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KKyAgICAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2Z0Z2x5cGguaD4KKworICAgIFNvbWUgbmV3IGluY2x1ZGUgc3ViLWRpcmVjdG9yaWVzIGFyZSBhdmFpbGFibGU6CisKKyAgICAgYS4gdGhlICBgZnJlZXR5cGUvY29uZmlnJyBkaXJlY3RvcnksICBjb250YWlucyB0d28gZmlsZXMgIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlICB0aGUgIGJ1aWxkICBvZiAgdGhlICBsaWJyYXJ5LiAgQ2xpZW50ICBhcHBsaWNhdGlvbnMKKyAgICAgICAgc2hvdWxkICBub3QgbmVlZCAgdG8gbG9vayAgYXQgdGhlc2UgIG5vcm1hbGx5LCBidXQgdGhleSBjYW4gaWYKKyAgICAgICAgdGhleSB3YW50LgorCisgICAgICAgICNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRvcHRpb24uaD4KKyAgICAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oPgorCisgICAgIGIuIHRoZSBgZnJlZXR5cGUvaW50ZXJuYWwnICBkaXJlY3RvcnksIGNvbnRhaW5zIGhlYWRlciBmaWxlcyB0aGF0CisgICAgICAgIGRlc2NyaWJlcyBsaWJyYXJ5ICBpbnRlcm5hbHMuICBUaGVzZSBhcmUgdGhlIGhlYWRlciBmaWxlcyB0aGF0CisgICAgICAgIHdlcmUgIHByZXZpb3VzbHkgIGZvdW5kICBpbiAgdGhlIGBzcmMvYmFzZScgIGFuZCAgYHNyYy9zaGFyZWQnCisgICAgICAgIGRpcmVjdG9yaWVzLgorCisKKyAgICBBcyAgdXN1YWwsIHRoZSBidWlsZCAgc3lzdGVtIGFuZCAgdGhlIGRlbW9zICBoYXZlIGJlZW4gIHVwZGF0ZWQgdG8KKyAgICByZWZsZWN0IHRoZSBjaGFuZ2UuLgorCisgICAgSGVyZSdzIGEgbGF5b3V0IG9mIHRoZSBuZXcgZGlyZWN0b3J5IGhpZXJhcmNoeToKKworICAgIFRPUF9ESVIKKyAgICAgIGluY2x1ZGUvCisgICAgICAgICBmcmVldHlwZS8KKyAgICAgICAgICAgIGZyZWV0eXBlLmgKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgY29uZmlnLworICAgICAgICAgICAgICBmdG9wdGlvbi5oCisgICAgICAgICAgICAgIGZ0Y29uZmlnLmgKKyAgICAgICAgICAgICAgZnRtb2R1bGUuaAorCisgICAgICAgICAgICBpbnRlcm5hbC8KKyAgICAgICAgICAgICAgZnRvYmpzLmgKKyAgICAgICAgICAgICAgZnRzdHJlYW0uaAorICAgICAgICAgICAgICBmdGNhbGMuaAorICAgICAgICAgICAgICAuLi4KKworICAgICAgc3JjLworICAgICAgICAgYmFzZS8KKyAgICAgICAgICAgIC4uLgorCisgICAgICAgICBzZm50LworICAgICAgICAgcHNuYW1lcy8KKyAgICAgICAgIHRydWV0eXBlLworICAgICAgICAgdHlwZTEvCisgICAgICAgICB0eXBlMXovCisKKworICAgIENvbXBpbGluZyBhIG1vZHVsZSBpcyBub3cgIG11Y2ggZWFzaWVyLCBmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZworICAgIHNob3VsZCB3b3JrIHdoZW4gaW4gdGhlIFRPUF9ESVIgZGlyZWN0b3J5IG9uIGFuIEFOU0kgYnVpbGQ6CisKKyAgICAgICBnY2MgLWMgLUkuL2luY2x1ZGUgLUkuL3NyYy9iYXNlIHNyYy9iYXNlL2Z0YmFzZS5jCisgICAgICAgZ2NjIC1jIC1JLi9pbmNsdWRlIC1JLi9zcmMvc2ZudCBzcmMvc2ZudC9zZm50LmMKKyAgICAgICBldGMuLgorCisgICAgKG9mIGNvdXJzZSwgdXNpbmcgLUljb25maWcvPHN5c3RlbT4gaWYgeW91IHByb3ZpZGUgc3lzdGVtLXNwZWNpZmljCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMpLgorCisgIC0gdXBkYXRlZCB0aGUgc3RydWN0dXJlIG9mIEZUX091dGxpbmVfRnVuY3MgaW4gb3JkZXIgdG8gYWxsb3cgZGlyZWN0CisgICAgY29vcmRpbmF0ZSBzY2FsaW5nIHdpdGhpbiAgdGhlIG91dGxpbmUgZGVjb21wb3NpdGlvbiByb3V0aW5lICh0aGlzCisgICAgaXMgIGltcG9ydGFudCBmb3IgdmlydHVhbCAgYG9uJyBwb2ludHMgIHdpdGggVHJ1ZVR5cGUgIG91dGxpbmVzKSArCisgICAgdXBkYXRlcyB0byB0aGUgcmFzdGVycyB0byBzdXBwb3J0IHRoaXMuLgorCisgIC0gdXBkYXRlZCAgdGhlIE9TLzIgIHRhYmxlICBsb2FkaW5nIGNvZGUgIGluIGBzcmMvc2ZudC90dGxvYWQuYycgIGluCisgICAgb3JkZXIgdG8gc3VwcG9ydCB2ZXJzaW9uIDIgb2YgdGhlIHRhYmxlIChzZWUgT3BlblR5cGUgMS4yIHNwZWMpCisKKyAgLSBjcmVhdGVkICBgaW5jbHVkZS90dHRhYmxlcy5oJyAgYW5kICBgaW5jbHVkZS90MXRhYmxlcy5oJyB0byAgYWxsb3cKKyAgICBjbGllbnQgYXBwbGljYXRpb25zIHRvIGFjY2VzcyBzb21lIG9mICB0aGUgU0ZOVCBhbmQgVDEgdGFibGVzIG9mIGEKKyAgICBmYWNlICB3aXRoICBhICBwcm9jZWR1cmFsICBpbnRlcmZhY2UgKHNlZSAgYEZUX0dldF9TZm50X1RhYmxlJykgICsKKyAgICB1cGRhdGVzIHRvIGludGVybmFsIHNvdXJjZSBmaWxlcyB0byByZWZsZWN0IHRoZSBjaGFuZ2UuLgorCisgIC0gc29tZSAgY2xlYW51cHMgaW4gIHRoZSBzb3VyY2UgIGNvZGUgdG8gIGdldCByaWQgIG9mICB3YXJuaW5ncyB3aGVuCisgICAgY29tcGlsaW5nIHdpdGggdGhlIGAtV2FsbCAtVyAtYW5zaSAtcGVkYW50aWMnIG9wdGlvbnMgaW4gZ2NjLgorCisgIC0gZGVidWdnZWQgYW5kIG1vdmVkIHRoZSBzbW9vdGggcmVuZGVyZXIgdG8gYHNyYy9iYXNlL2Z0Z3JheXMuYycgYW5kCisgICAgaXRzIGhlYWRlciB0byBgaW5jbHVkZS9mdGdyYXlzLmgnCisKKyAgLSB1cGRhdGVkIFRUX01BWF9TVUJHTFlQSFMgIHRvIDk2IGFzIHNvbWUgQ0pLICBmb250cyBoYXZlIGNvbXBvc2l0ZXMKKyAgICB3aXRoIHVwIHRvIDgwIHN1Yi1nbHlwaHMgISEgVGhhbmtzIHRvIFdlcm5lcgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0xEIENIQU5HRVMgLSAxNC1hcHItMjAwMAorCisgIC0gZml4ZWQgIGEgYnVnICBpbiAgdGhlICBUcnVlVHlwZSBnbHlwaCAgbG9hZGVyICB0aGF0IHByZXZlbnRlZCAgdGhlCisgICAgY29ycmVjdCBsb2FkaW5nIG9mIHNvbWUgQ0pLIGdseXBocyBpbiBtaW5nbGkudHRmCisKKyAgLSBpbXByb3ZlZCB0aGUgc3RhbmRhcmQgVHlwZSAxIGhpbnRlciBpbiBgc3JjL3R5cGUxJworCisgIC0gZml4ZWQgdHdvIGJ1Z3MgIGluIHRoZSBleHBlcmltZW50YWwgVHlwZSAxICBkcml2ZXIgaW4gYHNyYy90eXBlMXonCisgICAgdG8gaGFuZGxlIHRoZSBuZXcgWEZyZWU4NiA0LjAgZm9udHMgKGFuZCBhIGZldyBvdGhlciBvbmVzLi4pCisKKyAgLSB0aGUgc21vb3RoICByZW5kZXJlciBpcyBub3cgIGNvbXBsZXRlIGFuZCBzdXBwb3J0cyAgc3ViLWJhbmRpbmcgdG8KKyAgICByZW5kZXIgbGFyZ2UgZ2x5cGhzICBhdCBoaWdoIHNwZWVkLiAgSG93ZXZlciwgaXQgaXMgc3RpbGwgIGxvY2F0ZWQKKyAgICBpbiBgZGVtb3Mvc3JjL2Z0Z3JheXMuYycgYW5kIHNob3VsZCBtb3ZlIHRvIHRoZSAgbGlicmFyeSBpdHNlbGYgaW4KKyAgICB0aGUgbmV4dCAgYmV0YS4gIE5PVEU6IFRoZSAgc21vb3RoICByZW5kZXJlciAgZG9lc24ndCAgY29tcGlsZSAgaW4KKyAgICBzdGFuZC1hbG9uZSBtb2RlIGFueW1vcmUsIGJ1dCB0aGlzIHNob3VsZCBiZSBmaXhlZCBSU04uLgorCisgIC0gaW50cm9kdWNlZCBjb252ZW5pZW5jZSAgZnVuY3Rpb25zIHRvICBtb3JlIGVhc2lseSBkZWFsICB3aXRoIGdseXBoCisgICAgaW1hZ2VzLCBzZWUgIGBpbmNsdWRlL2Z0Z2x5cGguaCcgZm9yIG1vcmUgZGV0YWlscywgYXMgIHdlbGwgYXMgdGhlCisgICAgbmV3ICBkZW1vIHByb2dyYW0gIG5hbWVkIGBkZW1vcy9zcmMvZnRzdHJpbmcuYycgIHRoYXQgZGVtb25zdHJhdGVzCisgICAgaXRzIHVzZQorCisgIC0gaW1wbGVtZW50ZWQgIEZUX0xPQURfTk9fUkVDVVJTRSBpbiAgYm90aCB0aGUgIFRydWVUeXBlIGFuZCAgVHlwZSAxCisgICAgZHJpdmVycyAgKHRoaXMgIGlzIHJlcXVpcmVkICBieSAgdGhlICBhdXRvLWhpbnRlciAgdG8gaW1wcm92ZSAgaXRzCisgICAgcmVzdWx0cykuCisKKyAgLSBjaGFuZ2VkICAgdGhlICByYXN0ZXIgICBpbnRlcmZhY2UsICBpbiAgIG9yZGVyICB0byAgIGFsbG93ICBjbGllbnQKKyAgICBhcHBsaWNhdGlvbnMgIHRvICAgcHJvdmlkZSAgdGhlaXIgICBvd24gIHNwYW4tZHJhd2luZyAgIGNhbGxiYWNrcy4KKyAgICBIb3dldmVyLCAgIG9ubHkgICB0aGUgICBzbW9vdGggICByZW5kZXJlciAgIHN1cHBvcnRzICAgdGhpcy4gICBTZWUKKyAgICBgRlRfUmFzdGVyX1BhcmFtcycgaW4gdGhlIGZpbGUgYGluY2x1ZGUvZnRpbWFnZS5oJy4KKworICAtIGZpeGVkICBhIHNtYWxsIGJ1ZyAgaW4gRlRfTXVsRml4ICB0aGF0IGNhdXNlZCAgaW5jb3JyZWN0IHRyYW5zZm9ybQorICAgIGNvbXB1dGF0aW9uIQorCisgIC0gTm90ZTogVGhlIHR1dG9yaWFsIGlzIG91dC1vZi1kYXRlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0xEIENIQU5HRVMgLSAxMi1tYXItMjAwMAorCisgIC0gY2hhbmdlZCAgdGhlICBsYXlvdXQgIG9mICBjb25maWd1cmF0aW9uICBmaWxlcyAgOiAgbm93LCAgYWxsICBBTlNJCisgICAgY29uZmlndXJhdGlvbiAgICAgICAgIGZpbGVzICAgICAgICAgYXJlICAgICAgICAgbG9jYXRlZCAgICAgICAgIGluCisgICAgYGZyZWV0eXBlMi9jb25maWcnLiAgU3lzdGVtLXNwZWNpZmljIG92ZXItcmlkZXMgIGNhbiBiZSAgcGxhY2VkIGluCisgICAgYGZyZWV0eXBlMi9jb25maWcvPHN5c3RlbT4nLgorCisgIC0gbW92ZWQgYWxsIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHRvIGBjb25maWcvZnRvcHRpb24uaCcKKworICAtIGltcHJvdmVtZW50cyBpbiB0aGUgVHlwZSAxIGRyaXZlciB3aXRoIEFGTSBzdXBwb3J0CisKKyAgLSBjaGFuZ2VkIHRoZSBmaWVsZHMgIGluIHRoZSBGVF9PdXRsaW5lIHN0cnVjdHVyZSA6ICB0aGUgb2xkIGBmbGFncycKKyAgICBhcnJheSBpcyByZS1uYW1lZCBgdGFncycsIHdoaWxlIGFsbCBhbmNpZW50IGZsYWdzIGFyZSBlbmNvZGVkIGludG8KKyAgICBhIHNpbmdsZSB1bnNpZ25lZCBpbnQgbmFtZWQgYGZsYWdzJy4KKworICAtIGludHJvZHVjZWQgICAgIG5ldyAgICAgIGZsYWdzICAgICBpbiAgICAgRlRfT3V0bGluZS5mbGFncyAgICAgKHNlZQorICAgIGZ0X291dGxpbmVfLi4uLiBlbnVtcyBpbiBgZnRpbWFnZS5oJykuCisKKyAgLSBjaGFuZ2VkIG91dGxpbmUgZnVuY3Rpb25zIHRvIGBGVF9PdXRsaW5lXzxhY3Rpb24+JyBzeW50YXgKKworICAtIGFkZGVkIGEgc21vb3RoIGFudGktYWxpYXMgcmVuZGVyZXIgdG8gdGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbXMKKworICAtIGFkZGVkIE1hYyBncmFwaGljcyBkcml2ZXIgKHRoYW5rcyBKdXN0KQorCisgIC0gRlRfT3Blbl9GYWNlICBjaGFuZ2VkICBpbiAgb3JkZXIgICB0byAgcmVjZWl2ZWQgIGEgIHBvaW50ZXIgIHRvICBhCisgICAgRlRfT3Blbl9BcmdzIGRlc2NyaXB0b3IuLgorCisgIC0gdmFyaW91cyAgY2xlYW51cHMsICBhICBmZXcgIG1vcmUgQVBJICBmdW5jdGlvbnMgIGltcGxlbWVudGVkICAoc2VlCisgICAgRlRfQXR0YWNoX0ZpbGUpCisKKyAgLSB1cGRhdGVkIHNvbWUgZG9jcworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0xEIENIQU5HRVMgLSAyMi1mZWItMjAwMAorCisgIC0gaW50cm9kdWNlZCB0aGUgYHBzbmFtZXMnIG1vZHVsZS4gIEl0IGlzIHVzZWQgdG86CisKKyAgICAgIG8gY29udmVydCAgYSBQb3N0c2NyaXB0IGdseXBoICBuYW1lIGludG8gdGhlICBlcXVpdmFsZW50IFVuaWNvZGUKKyAgICAgICAgY2hhcmFjdGVyIGNvZGUgKHVzZWQgYnkgdGhlICBUeXBlIDEgZHJpdmVyKHMpIHRvIHN5bnRoZXNpemUgb24KKyAgICAgICAgdGhlIGZseSBhIFVuaWNvZGUgY2hhcm1hcCkuCisKKyAgICAgIG8gcHJvdmlkZSBhbiAgaW50ZXJmYWNlIHRvIHJldHJpZXZlIHRoZSBQb3N0c2NyaXB0ICBuYW1lcyBvZiB0aGUKKyAgICAgICAgTWFjaW50b3NoLCAgQWRvYmUgIFN0YW5kYXJkICYgIEFkb2JlICBFeHBlcnQgY2hhcmFjdGVyICBjb2Rlcy4KKyAgICAgICAgKHRoZSBNYWNpbnRvc2ggIG5hbWVzIGFyZSAgdXNlZCBieSB0aGUgIFNGTlQtbW9kdWxlIHBvc3RzY3JpcHQKKyAgICAgICAgbmFtZXMgc3VwcG9ydCByb3V0aW5lcywgd2hpbGUgdGhlIG90aGVyIHR3byB0YWJsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgdGhlIFR5cGUgMSBkcml2ZXIocykpLgorCisgIC0gaW50cm9kdWNlZCB0aGUgYHR5cGUxeicgYWx0ZXJuYXRlIFR5cGUgMSBkcml2ZXIuICBUaGlzIGlzIGEgKHN0aWxsCisgICAgZXhwZXJpbWVudGFsKSBkcml2ZXIgIGZvciB0aGUgVHlwZSAgMSBmb3JtYXQgdGhhdCAgd2lsbCB1bHRpbWF0ZWx5CisgICAgcmVwbGFjZSB0aGUgb25lICBpbiBgc3JjL3R5cGUxJy4gIEl0IHVzZXMgcGF0dGVybiBtYXRjaGluZyB0byBsb2FkCisgICAgZGF0YSBmcm9tIHRoZSBmb250LCBpbnN0ZWFkIG9mIGEgZmluaXRlICBzdGF0ZSBhbmFseXplci4gIEl0IHdvcmtzCisgICAgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgYG9sZCcgZHJpdmVyIHdpdGggYGJyb2tlbicgZm9udHMuICBJdCBpcyBhbHNvCisgICAgbXVjaCBzbWFsbGVyICh1bmRlciAxNSBLYikuCisKKyAgLSB0aGUgIFR5cGUgMSAgZHJpdmVycyAoYm90aCAgaW4gYHNyYy90eXBlMScgIGFuZCAgYHNyYy90eXBlMXonKSBhcmUKKyAgICBuZWFybHkgIGNvbXBsZXRlLiAgVGhleSAgYm90aCAgcHJvdmlkZSBhdXRvbWF0aWMgIFVuaWNvZGUgIGNoYXJtYXAKKyAgICBzeW50aGVzaXMgdGhyb3VnaCAgdGhlIGBwc25hbWVzJyBtb2R1bGUuICBObyByZS1lbmNvZGluZyB2ZWN0b3IgaXMKKyAgICBuZWVkZWQuICAobm90ZSAgdGhhdCB0aGV5ICBzdGlsbCAgbGVhayAgbWVtb3J5ICBkdWUgdG8gIHNvbWUgIGNvZGUKKyAgICBtaXNzaW5nLCBhbmQgSSdtIGdldHRpbmcgbGF6eSkuCisKKyAgICBUcml2aWFsIEFGTSBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHRvIHJlYWQga2VybmluZyBpbmZvcm1hdGlvbiBidXQKKyAgICB3YXNuJ3QgZXhhY3RseSB0ZXN0ZWQgYXMgaXQgc2hvdWxkIDstKQorCisgIC0gVGhlIFRydWVUeXBlICBnbHlwaCBsb2FkZXIgaGFzICBiZWVuIHNlcmlvdXNseSByZXdyaXR0ZW4gIChzZWUgdGhlCisgICAgZmlsZSAgYHNyYy90cnVldHlwZS90dGdsb2FkLmMnLiAgSXQgaXMgbm93ICBtdWNoLCBtdWNoICBzaW1wbGVyIGFzCisgICAgd2VsbCBhcyAgZWFzaWVyIHRvIHJlYWQsICBtYWludGFpbiBhbmQgdW5kZXJzdGFuZCAgOi0pIFByZWxpbWluYXJ5CisgICAgdmVyc2lvbnMgaW50cm9kdWNlZCBhICBtZW1vcnkgbGVhayB0aGF0IGhhcyBiZWVuICByZXBvcnRlZCBieSBKYWNrCisgICAgRGF2aXMsIGFuZCBpcyBub3cgZml4ZWQuLgorCisgIC0gaW50cm9kdWNlZCAgdGhlIG5ldyAgYGZ0X2dseXBoX2Zvcm1hdF9wbG90dGVyJywgdXNlZCAgdG8gcmVwcmVzZW50CisgICAgc3Ryb2tlZCBvdXRsaW5lcyAgbGlrZSBXaW5kb3dzIGBWZWN0b3InIGZvbnRzLCBhbmQgIGNlcnRhaW4gVHlwZSAxCisgICAgZm9udHMgIGxpa2UgYEhlcnNoZXknLiAgVGhlIGNvcnJlc3BvbmRpbmcgIHJhc3RlciB3aWxsICBiZSB3cml0dGVuCisgICAgc29vbi4KKworICAtIEZUX05ld19NZW1vcnlfRmFjZSAgaXMgIGdvbmUuICBMaWtld2lzZSwgIEZUX09wZW5fRmFjZSBoYXMgIGEgIG5ldworICAgIGludGVyZmFjZSB0aGF0IHVzZXMgYSBzdHJ1Y3R1cmUgIHRvIGRlc2NyaWJlIHRoZSBpbnB1dCBzdHJlYW0sIHRoZQorICAgIGRyaXZlciAoaWYgcmVxdWlyZWQpLCBldGMuLgorCisKK1RPRE8KKworICAtIFdyaXRlIEZUX0dldF9HbHlwaF9CaXRtYXAgYW5kIEZUX0xvYWRfR2x5cGhfQml0bWFwCisKKyAgLSBBZGQgYSBmdW5jdGlvbiBsaWtlIEZUX0xvYWRfQ2hhcmFjdGVyKGZhY2UsIGNoYXJfY29kZSwgbG9hZF9mbGFncykKKyAgICB0aGF0ICB3b3VsZCAgIHJlYWxseSAgZW1iZWQgIGEgIGNhbGwgICB0byAgRlRfR2V0X0NoYXJfSW5kZXggIHRoZW4KKyAgICBGVF9Mb2FkX0dseXBoIHRvIGVhc2UgZGV2ZWxvcGVyJ3Mgd29yay4KKworICAtIFVwZGF0ZSB0aGUgdHV0b3JpYWwhCisKKyAgLSBjb25zaWRlciBhZGRpbmcgIHN1cHBvcnQgZm9yIE11bHRpcGxlICBNYXN0ZXIgZm9udHMgaW4gdGhlICBUeXBlIDEKKyAgICBkcml2ZXJzLgorCisgIC0gVGVzdCB0aGUgQUZNIHJvdXRpbmVzIG9mIHRoZSAgVHlwZSAxIGRyaXZlcnMgdG8gY2hlY2sgdGhhdCBrZXJuaW5nCisgICAgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQgY29ycmVjdGx5LgorCisgIC0gd3JpdGUgYSBkZWNlbnQgYXV0by1ncmlkZGluZyBjb21wb25lbnQgICEhIFdlIG5lZWQgdGhpcyB0byByZWxlYXNlCisgICAgRnJlZVR5cGUgMi4wIGdvbGQgIQorCisKK2xlc3MgdXJnZW50IG5lZWRzOgorCisgIC0gYWRkIGEgQ0ZGL1R5cGUyIGRyaXZlcgorICAtIGFkZCBhIEJERiBkcml2ZXIKKyAgLSBhZGQgYSBGTlQvUENGL0hCRiBkcml2ZXIKKyAgLSBhZGQgYSBTcGVlZG8gZHJpdmVyIGZyb20gdGhlIFgxMSBzb3VyY2VzCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPTERFUiBDSEFOR0VTIC0gMjctamFuLTIwMDAKKworICAtIHVwZGF0ZWQgdGhlICBgc2ZudCcgbW9kdWxlICBpbnRlcmZhY2UgdG8gYWxsb3cgIHNldmVyYWwgU0ZOVC1iYXNlZAorICAgIGRyaXZlcnMgdG8gY28tZXhpc3QgcGVhY2VmdWxseQorCisgIC0gdXBkYXRlZCAgdGhlIGBUMV9GYWNlJyAgdHlwZSAgdG8gYmV0dGVyICBzZXBhcmF0ZSBQb3N0c2NyaXB0ICBmb250CisgICAgY29udGVudCAgZnJvbSB0aGUgIHJlc3Qgb2YgIHRoZSBGVF9GYWNlICBzdHJ1Y3R1cmUuICBNaWdodCBiZSB1c2VkCisgICAgbGF0ZXIgYnkgdGhlIENGRi9UeXBlMiBkcml2ZXIuLgorCisgIC0gYWRkZWQgYW4gZXhwZXJpbWVudGFsIHJlcGxhY2VtZW50IFR5cGUgMSBkcml2ZXIgZmVhdHVyaW5nIGFkdmFuY2VkCisgICAgKGFuZCBzcGVlZHkpIHBhdHRlcm4gbWF0Y2hpbmcgdG8gcmV0cmlldmUgdGhlIGRhdGEgZnJvbSBwb3N0c2NyaXB0CisgICAgZm9udHMuCisKKyAgLSB2ZXJ5IG1pbm9yICBjaGFuZ2VzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiAgb2YgRlRfU2V0X0NoYXJfU2l6ZSBhbmQKKyAgICBGVF9TZXRfUGl4ZWxfU2l6ZXMgKHRoZXkgbm93IGltcGxlbWVudCBkZWZhdWx0IHRvIGxpZ2h0ZW4gdGhlIGZvbnQKKyAgICBkcml2ZXIncyBjb2RlKS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09MRCBNRVNTQUdFCisKK1RoaXMgZmlsZSBzdW1tYXJpemVzIHRoZSBjaGFuZ2VzICB0aGF0IG9jY3VycmVkICBzaW5jZSB0aGUgbGFzdCBgYmV0YScKK29mIEZyZWVUeXBlIDIuIEJlY2F1c2UgdGhlIGxpc3QgaXMgaW1wb3J0YW50LCBpdCBoYXMgYmVlbiBkaXZpZGVkIGludG8KK3NlcGFyYXRlIHNlY3Rpb25zOgorCitUYWJsZSBPZiBDb250ZW50czoKKworICAgIEkgICBIaWdoLUxldmVsIEludGVyZmFjZSAoZWFzaWVyICEpCisgICBJSSAgIERpcmVjdG9yeSBTdHJ1Y3R1cmUKKyAgSUlJICAgR2x5cGggSW1hZ2UgRm9ybWF0cworICAgSVYgICBCdWlsZCBTeXN0ZW0KKyAgICBWICAgUG9ydGFiaWxpdHkKKyAgIFZJICAgRm9udCBEcml2ZXJzCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIaWdoLUxldmVsIEludGVyZmFjZToKKworICBUaGUgaGlnaC1sZXZlbCBBUEkgaGFzIGJlZW4gY29uc2lkZXJhYmx5IHNpbXBsaWZpZWQuICBIZXJlIGlzIGhvdzoKKworICAgIC0gcmVzb3VyY2Ugb2JqZWN0cyBoYXZlIGRpc2FwcGVhcmVkLiAgdGhpcyBtZWFucyB0aGF0IGZhY2Ugb2JqZWN0cworICAgICAgY2FuIG5vdyBiZSBjcmVhdGVkIHdpdGggIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwgKHNlZSBGVF9OZXdfRmFjZQorICAgICAgYW5kIEZUX09wZW5fRmFjZSkKKworICAgIC0gd2hlbiBjYWxsaW5nICBlaXRoZXIgRlRfTmV3X0ZhY2UgICYgRlRfT3Blbl9GYWNlLCBhICBzaXplIG9iamVjdAorICAgICAgYW5kIGEgZ2x5cGggc2xvdCBvYmplY3QgIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIHRoZSBmYWNlLAorICAgICAgYW5kIGNhbiAgYmUgYWNjZXNzZWQgIHRocm91Z2ggYGZhY2UtPmdseXBoJyBhbmQgIGBmYWNlLT5zaXplJyBpZgorICAgICAgb25lIHJlYWxseSAgbmVlZHMgdG8uICAgSW4gbW9zdCBjYXNlcywgIHRoZXJlJ3Mgbm8gbmVlZCAgdG8gY2FsbAorICAgICAgRlRfTmV3X1NpemUgb3IgRlRfTmV3X0dseXBoLgorCisgICAgLSBzaW1pbGFybHksICBGVF9Mb2FkX0dseXBoICBub3cgIG9ubHkgIHRha2VzICBhICBgZmFjZScgIGFyZ3VtZW50CisgICAgICAoaW5zdGVhZCAgb2YgYSAgZ2x5cGggIHNsb3QgIGFuZCBhICBzaXplKS4gIEFsc28sICBpdHMgIGByZXN1bHQnCisgICAgICBwYXJhbWV0ZXIgaXMgIGdvbmUsIGFzIHRoZSBnbHlwaCAgaW1hZ2UgdHlwZSBpcyAgcmV0dXJuZWQgaW4gdGhlCisgICAgICBmaWVsZCBgZmFjZS0+Z2x5cGguZm9ybWF0JworCisgICAgLSB0aGUgbGlzdCAgb2YgYXZhaWxhYmxlICBjaGFybWFwcyBpcyBkaXJlY3RseSAgYWNjZXNzaWJsZSB0aHJvdWdoCisgICAgICBgZmFjZS0+Y2hhcm1hcHMnLCBjb3VudGluZyBgZmFjZS0+bnVtX2NoYXJtYXBzJyAgZWxlbWVudHMuICBFYWNoCisgICAgICBjaGFybWFwICBoYXMgYW4gICdlbmNvZGluZycgIGZpZWxkIHdoaWNoICBzcGVjaWZpZXMgd2hpY2ggIGtub3duCisgICAgICBlbmNvZGluZyBpdCBkZWFscyB3aXRoLiAgVmFsaWQgdmFsdWVzIGFyZSwgZm9yIGV4YW1wbGU6CisKKyAgICAgICAgICBmdF9lbmNvZGluZ191bmljb2RlICAgICAgKGZvciBBU0NJSSwgTGF0aW4tMSBhbmQgVW5pY29kZSkKKyAgICAgICAgICBmdF9lbmNvZGluZ19hcHBsZV9yb21hbgorICAgICAgICAgIGZ0X2VuY29kaW5nX3NqaXMKKyAgICAgICAgICBmdF9lbmNvZGluZ19hZG9iZV9zdGFuZGFyZAorICAgICAgICAgIGZ0X2VuY29kaW5nX2Fkb2JlX2V4cGVydAorCisgICAgICBvdGhlciAgdmFsdWVzIG1heSAgYmUgYWRkZWQgIGluIHRoZSAgZnV0dXJlLiAgRWFjaCBjaGFybWFwIHN0aWxsCisgICAgICBob2xkcyAgaXRzIGBwbGF0Zm9ybV9pZCcgIGFuZCBgZW5jb2RpbmdfaWQnICB2YWx1ZXMgaW4gIGNhc2UgdGhlCisgICAgICBlbmNvZGluZyBpcyB0b28gZXhvdGljIGZvciB0aGUgY3VycmVudCBsaWJyYXJ5CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEaXJlY3RvcnkgU3RydWN0dXJlOgorCisgIFNob3VsZCBzZWVtIG9idmlvdXMgdG8gbW9zdCBvZiB5b3U6CisKKyAgICAgZnJlZXR5cGUvCisgICAgICAgICBjb25maWcvICAgICAgICAtLSBjb25maWd1cmF0aW9uIHN1Yi1tYWtlZmlsZXMKKyAgICAgICAgICAgIGFuc2kvCisgICAgICAgICAgICB1bml4LyAgICAgICAtLSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICB3aW4zMi8KKyAgICAgICAgICAgIG9zMi8KKyAgICAgICAgICAgIG1zZG9zLworCisgICAgICAgICBpbmNsdWRlLyAgICAgICAtLSBwdWJsaWMgaGVhZGVyICBmaWxlcywgdGhvc2UgdG8gIGJlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBieSBjbGllbnQgYXBwcworCisgICAgICAgICBzcmMvICAgICAgICAgICAtLSBzb3VyY2VzIG9mIHRoZSBsaWJyYXJ5CisgICAgICAgICAgIGJhc2UvICAgICAgICAtLSB0aGUgYmFzZSBsYXllcgorICAgICAgICAgICBzZm50LyAgICAgICAgLS0gdGhlIHNmbnQgYGRyaXZlcicgIChzZWUgdGhlIGRyaXZlcnMgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3cpCisgICAgICAgICAgIHRydWV0eXBlLyAgICAtLSB0aGUgdHJ1ZXR5cGUgZHJpdmVyCisgICAgICAgICAgIHR5cGUxLyAgICAgICAtLSB0aGUgdHlwZTEgZHJpdmVyCisgICAgICAgICAgIHNoYXJlZC8gICAgICAtLSBzb21lIGhlYWRlciBmaWxlcyBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzCisKKyAgICAgICAgIGRlbW9zLyAgICAgICAgIC0tIGRlbW9zL3Rvb2xzCisKKyAgICAgICAgIGRvY3MvICAgICAgICAgIC0tIGRvY3VtZW50YXRpb24gKGEgYml0IGVtcHR5IGZvciBub3cpCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHbHlwaCBJbWFnZSBGb3JtYXRzOgorCisgIERyaXZlcnMgYXJlIG5vdyBhYmxlIHRvICByZWdpc3RlciBuZXcgZ2x5cGggaW1hZ2UgZm9ybWF0cyB3aXRoaW4gdGhlCisgIGxpYnJhcnkuICBGb3IgIG5vdywgdGhlICBiYXNlIGxheWVyIHN1cHBvcnRzICBvZiBjb3Vyc2UgIGJpdG1hcHMgYW5kCisgIHZlY3RvciAgb3V0bGluZXMsIGJ1dCAgb25lICBjb3VsZCBpbWFnaW5lICBzb21ldGhpbmcgZGlmZmVyZW50ICBsaWtlCisgIGNvbG9yZWQgYml0bWFwcywgYmktY29sb3IgdmVjdG9ycyBvciB3aGF0ZXZlciBlbHNlIChNZXRhZm9udHMgYW55b25lCisgID8/KS4KKworICBTZWUgIHRoZSAgIGZpbGUgIGBpbmNsdWRlL2Z0aW1hZ2UuaCcuICAgTm90ZSAgYWxzbyAgdGhhdCAgIHRoZSAgdHlwZQorICBGVF9SYXN0ZXJfTWFwICBpcyBnb25lLCAgYW5kICBpcyBub3cgIHJlcGxhY2VkICBieSBGVF9CaXRtYXAsICB3aGljaAorICBzaG91bGQgZW5jb21wYXNzIGFsbCBrbm93biBiaXRtYXAgdHlwZXMuCisKKyAgRWFjaCBuZXcgIGltYWdlIGZvcm1hdCAgbXVzdCBwcm92aWRlIGF0ICBsZWFzdCBvbmUgYHJhc3RlcicsICBpLmUuIGEKKyAgbW9kdWxlIGNhcGFibGUgb2YgIHRyYW5zZm9ybWluZyB0aGUgZ2x5cGggaW1hZ2UgaW50byBhIGJpdG1hcC4gIEl0J3MKKyAgYWxzbyBwb3NzaWJsZSAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0ICByYXN0ZXIgdXNlZCBmb3IgIGEgZ2l2ZW4gZ2x5cGgKKyAgaW1hZ2UgZm9ybWF0LgorCisgIFRoZSBkZWZhdWx0IG91dGxpbmUgIHNjYW4tY29udmVydGVyIG5vdyB1c2VzIDEyOCBsZXZlbHMgIG9mIGdyYXlzIGJ5CisgIGRlZmF1bHQsICB3aGljaCB0ZW5kcyAgdG8gc21vb3RoICBtYW55ICB0aGluZ3MuICBOb3RlIHRoYXQgdGhlICBkZW1vCisgIHByb2dyYW1zIGhhdmUgYmVlbiB1cGRhdGVkIHNpZ25pZmljYW50bHkgaW4gb3JkZXIgdG8gZGlzcGxheSB0aGVzZS4uCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCdWlsZCBzeXN0ZW06CisKKyAgWW91IHN0aWxsIG5lZWQgIEdOVSBNYWtlIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5LiAgVGhlIGJ1aWxkIHN5c3RlbSBoYXMKKyAgYmVlbiB2ZXJ5IHNlcmlvdXNseSByZS12YW1wZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGluZ3MgbGlrZSA6CisKKyAgIC0gYXV0b21hdGljIGhvc3QgcGxhdGZvcm0gIGRldGVjdGlvbiAocmV2ZXJ0aW5nIHRvICdjb25maWcvYW5zaScgaWYKKyAgICAgaXQgaXMgbm90IGRldGVjdGVkLCB3aXRoIHBzZXVkby1zdGFuZGFyZCBjb21waWxhdGlvbiBmbGFncykKKworICAgLSB0aGUgYWJpbGl0eSB0byBjb21waWxlIGZyb20gdGhlIE1ha2VmaWxlcyB3aXRoIHZlcnkgZGlmZmVyZW50IGFuZAorICAgICBleG90aWMgY29tcGlsZXJzLiAgTm90ZSB0aGF0IGxpbmtpbmcgdGhlIGxpYnJhcnkgY2FuIGJlIGRpZmZpY3VsdAorICAgICBmb3Igc29tZSBwbGF0Zm9ybXMuCisKKyAgICAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlIGBjb25maWcvd2luMzIvbGNjbGliLmJhdCcgaXMgaW52b2tlZCBieSB0aGUKKyAgICAgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSB0aGUgYC5saWInIGZpbGUgd2l0aCBMQ0MtV2luMzIgYmVjYXVzZSBpdHMKKyAgICAgbGlicmFyaWFuICBoYXMgdG9vICBtYW55IGZsYXdzICB0byBiZSAgaW52b2tlZCBkaXJlY3RseSAgZnJvbSB0aGUKKyAgICAgTWFrZWZpbGUuCisKKyAgSGVyZSdzIGhvdyBpdCB3b3JrczoKKworICAtIHRoZSBmaXJzdCB0aW1lIHlvdSB0eXBlIGBtYWtlJywgIHRoZSBidWlsZCBzeXN0ZW0gcnVucyBhIHNlcmllcyBvZgorICAgIHN1Yi1tYWtlZmlsZXMgIGluIG9yZGVyICB0byBkZXRlY3QgIHlvdXIgaG9zdCAgcGxhdGZvcm0uICBJdCAgdGhlbgorICAgIGR1bXBzIHdoYXQgaXQgZm91bmQsIGFuZCBjcmVhdGVzIGEgZmlsZSBjYWxsZWQgYGNvbmZpZy5taycgaW4gIHRoZQorICAgIGN1cnJlbnQgIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSAgc3ViLU1ha2VmaWxlIHVzZWQgIHRvICBkZWZpbmUgbWFueQorICAgIGltcG9ydGFudCBNYWtlIHZhcmlhYmxlcyB1c2VkIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5LgorCisgIC0gdGhlIHNlY29uZCB0aW1lLCB0aGUgYnVpbGQgc3lzdGVtIGRldGVjdHMgdGhlIGBjb25maWcubWsnIHRoZW4gdXNlCisgICAgaXQgIHRvICBidWlsZCB0aGUgIGxpYnJhcnkuICBBbGwgb2JqZWN0ICBmaWxlcyAgZ28gIGludG8gJ29iaicgIGJ5CisgICAgZGVmYXVsdCwgIGFzIHdlbGwgIGFzIHRoZSAgbGlicmFyeSBmaWxlLCAgYnV0IHRoaXMgIGNhbiAgZWFzaWx5IGJlCisgICAgY2hhbmdlZC4KKworICBOb3RlIHRoYXQgIHlvdSBjYW4gcnVuIGBtYWtlICBzZXR1cCcgdG8gZm9yY2UgIGFub3RoZXIgaG9zdCBwbGF0Zm9ybQorICBkZXRlY3Rpb24gIGV2ZW4gICBpZiAgYSAgYGNvbmZpZy5taycgIGlzICBwcmVzZW50ICAgaW4gIHRoZSAgY3VycmVudAorICBkaXJlY3RvcnkuICBBbm90aGVyIHNvbHV0aW9uICBpcyAgc2ltcGx5IHRvICBkZWxldGUgIHRoZSBmaWxlLCAgdGhlbgorICByZS1ydW4gbWFrZS4KKworICBGaW5hbGx5LCB0aGUgIGRlZmF1bHQgY29tcGlsZXIgIGZvciBhbGwgcGxhdGZvcm1zICBpcyBnY2MgIChmb3Igbm93LAorICB0aGlzIHdpbGwgaG9wZWZ1bGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkuICBZb3UgY2FuIGhvd2V2ZXIgc3BlY2lmeQorICBhIGRpZmZlcmVudCAgY29tcGlsZXIgYnkgc3BlY2lmeWluZyAgaXQgYWZ0ZXIgdGhlICdzZXR1cCcgIHRhcmdldCBhcworICBpbjoKKworICAgICAgZ251bWFrZSBzZXR1cCBsY2MgICAgICAgICBvbiBXaW4zMiB0byB1c2UgdGhlIExDQyBjb21waWxlcgorICAgICAgZ251bWFrZSBzZXR1cCB2aXN1YWxjICAgICBvbiBXaW4zMiB0byB1c2UgVmlzdWFsIEMrKworCisgIFNlZSAgdGhlIGZpbGUgIGBjb25maWcvPHN5c3RlbT4vZGV0ZWN0Lm1rJyBmb3IgIGEgbGlzdCAgb2Ygc3VwcG9ydGVkCisgIGNvbXBpbGVycyBmb3IgeW91ciBwbGF0Zm9ybXMuCisKKyAgSXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeSAgdG8gd3JpdGUgbmV3IGRldGVjdGlvbiBydWxlcyBmaWxlcyBhbmQKKyAgY29uZmlnLm1rLi4KKworICBGaW5hbGx5LCB0byAgYnVpbGQgdGhlIGRlbW8gcHJvZ3JhbXMsICBnbyB0byBgZGVtb3MnICBhbmQgbGF1bmNoIEdOVQorICBNYWtlLCBpdCB3aWxsIHVzZSB0aGUgYGNvbmZpZy5taycgIGluIHRoZSB0b3AgZGlyZWN0b3J5IHRvIGJ1aWxkIHRoZQorICB0ZXN0IHByb2dyYW1zLi4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRhYmlsaXR5OgorCisgIEluICB0aGUgIHByZXZpb3VzICBiZXRhLCAgYSAgc2luZ2xlIEZUX1N5c3RlbSAgb2JqZWN0ICB3YXMgIHVzZWQgIHRvCisgIGVuY29tcGFzcyAgYWxsICBsb3ctbGV2ZWwgIG9wZXJhdGlvbnMgbGlrZSAgdGhyZWFkICBzeW5jaHJvbmlzYXRpb24sCisgIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpL28gYWNjZXNzLiAgVGhpcyBoYXMgYmVlbiBncmVhdGx5IHNpbXBsaWZpZWQ6CisKKyAgICAtIHRocmVhZCBzeW5jaHJvbmlzYXRpb24gIGhhcyBiZWVuIGRyb3BwZWQsIGZvciAgdGhlIHNpbXBsZSByZWFzb24KKyAgICAgIHRoYXQgdGhlIGxpYnJhcnkgIGlzIGFscmVhZHkgcmUtZW50cmFudCwgYW5kIHRoYXQgIGlmIHlvdSByZWFsbHkKKyAgICAgIG5lZWQgIHR3byAgdGhyZWFkcyBhY2Nlc3NpbmcgIHRoZSAgc2FtZSAgRlRfTGlicmFyeSwgeW91ICBzaG91bGQKKyAgICAgIHJlYWxseSBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gaXQgeW91cnNlbGYgd2l0aCBhIHNpbXBsZSBtdXRleC4KKworICAgIC0gbWVtb3J5ICBtYW5hZ2VtZW50IGlzICBwZXJmb3JtZWQgIHRocm91Z2ggYSAgdmVyeSBzaW1wbGUgIG9iamVjdAorICAgICAgY2FsbGVkIGBGVF9NZW1vcnknLCAgd2hpY2ggcmVhbGx5IGlzIGEgdGFibGUgIGNvbnRhaW5pbmcgYSB0YWJsZQorICAgICAgb2YgcG9pbnRlcnMgdG8gIGZ1bmN0aW9ucyBsaWtlIG1hbGxvYywgcmVhbGxvYyBhbmQgIGZyZWUgYXMgd2VsbAorICAgICAgYXMgc29tZSB1c2VyIGRhdGEgKGNsb3N1cmUpLgorCisgICAgLSByZXNvdXJjZXMgaGF2ZSBkaXNhcHBlYXJlZCAodGhleSBjcmVhdGVkIG1vcmUgcHJvYmxlbXMgdGhhbiB0aGV5CisgICAgICBzb2x2ZWQpLCBhbmQgIGkvbyBtYW5hZ2VtZW50IGhhdmUgIGJlZW4gc2ltcGxpZmllZCBncmVhdGx5ICBhcyBhCisgICAgICByZXN1bHQuICBTdHJlYW1zIGFyZSAgZGVmaW5lZCB0aHJvdWdoICBGVF9TdHJlYW0gb2JqZWN0cywgIHdoaWNoCisgICAgICBjYW4gYmUgZWl0aGVyIG1lbW9yeS1iYXNlZCBvciBkaXNrLWJhc2VkLgorCisgICAgICBOb3RlIHRoYXQgIGVhY2ggZmFjZSAgaGFzIGl0cyBvd24gIHN0cmVhbSwgd2hpY2ggaXMgIGNsb3NlZCBvbmx5CisgICAgICB3aGVuICB0aGUgIGZhY2Ugb2JqZWN0ICBpcyAgZGVzdHJveWVkLiAgSGVuY2UsICBhIGZ1bmN0aW9uICBsaWtlCisgICAgICBUVF9GbHVzaF9GYWNlIGluIDEueCBjYW5ub3QgYmUgZGlyZWN0bHkgIHN1cHBvcnRlZC4gIEhvd2V2ZXIsIGlmCisgICAgICB5b3UgcmVhbGx5IG5lZWQgc29tZXRoaW5nIGxpa2UgIHRoaXMsIHlvdSBjYW4gZWFzaWx5IHRhaWxvciB5b3VyCisgICAgICBvd24gc3RyZWFtcyAgdG8gYWNoaWV2ZSB0aGUgc2FtZSAgZmVhdHVyZSBhdCBhICBsb3dlciBsZXZlbCAoYW5kCisgICAgICB1c2UgRlRfT3Blbl9GYWNlIGluc3RlYWQgb2YgRlRfTmV3X0ZhY2UgdG8gY3JlYXRlIHRoZSBmYWNlKS4KKworICBTZWUgdGhlIGZpbGUgIGBpbmNsdWRlL2Z0c3lzdGVtLmgnIGZvciBtb3JlIGRldGFpbHMsIGFzICB3ZWxsIGFzIHRoZQorICBpbXBsZW1lbnRhdGlvbnMgZm91bmQgaW4gYGNvbmZpZy91bml4JyBhbmQgYGNvbmZpZy9hbnNpJy4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvbnQgRHJpdmVyczoKKworICBUaGUgIEZvbnQgRHJpdmVyICBpbnRlcmZhY2UgaGFzICBiZWVuIG1vZGlmaWVkICBpbiBvcmRlciAgdG8gc3VwcG9ydAorICBleHRlbnNpb25zICYgdmVyc2lvbmluZy4KKworCisgIFRoZSAgbGlzdCBvZiAgdGhlIGZvbnQgIGRyaXZlcnMgdGhhdCAgYXJlIHN0YXRpY2FsbHkgIGxpbmtlZCAgdG8gdGhlCisgIGxpYnJhcnkgYXQgY29tcGlsZSB0aW1lIGlzICBtYW5hZ2VkIHRocm91Z2ggYSBuZXcgY29uZmlndXJhdGlvbiBmaWxlCisgIGNhbGxlZCBgY29uZmlnLzxwbGF0Zm9ybT4vZnRtb2R1bGUuaCcuCisKKyAgVGhpcyAgZmlsZSBpcyAgYXV0b2dlbmVyYXRlZCAgd2hlbiAgaW52b2tpbmcgIGBtYWtlIG1vZHVsZXMnLiAgIFRoaXMKKyAgdGFyZ2V0ICB3aWxsICBwYXJzZSAgYWxsICBzdWItZGlyZWN0b3JpZXMgIG9mICAnc3JjJywgbG9va2luZyAgZm9yIGEKKyAgYG1vZHVsZS5taycgcnVsZXMgIGZpbGUsIHVzZWQgIHRvIGRlc2NyaWJlICB0aGUgZHJpdmVyIHRvICB0aGUgYnVpbGQKKyAgc3lzdGVtLgorCisgIEhlbmNlLCBvbmUgIHNob3VsZCBjYWxsICBgbWFrZSBtb2R1bGVzJyBlYWNoICB0aW1lIGEgZm9udCAgZHJpdmVyIGlzCisgIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgYHNyYycgZGlyZWN0b3J5LgorCisgIEZpbmFsbHksIHRoaXMgIHZlcnNpb24gIHByb3ZpZGVzICBhIGBwc2V1ZG8tZHJpdmVyJyAgaW4gIGBzcmMvc2ZudCcuCisgIFRoaXMgIGRyaXZlciAgZG9lc24ndCAgc3VwcG9ydCAgZm9udCAgZmlsZXMgIGRpcmVjdGx5LCBidXQgIHByb3ZpZGVzCisgIHNlcnZpY2VzIHVzZWQgYnkgYWxsIFRydWVUeXBlLWxpa2UgZm9udCBkcml2ZXJzLiAgSGVuY2UsIGl0cyBjb2RlIGlzCisgIHNoYXJlZCBiZXR3ZWVuICB0aGUgVHJ1ZVR5cGUgJiBPcGVuVHlwZSAgZm9udCBmb3JtYXRzLCAgYW5kIHBvc3NpYmx5CisgIG1vcmUgZm9ybWF0cyB0byBjb21lIGlmIHdlJ3JlIGx1Y2t5Li4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4dGVuc2lvbnMgc3VwcG9ydDoKKworICBUaGUgZXh0ZW5zaW9ucyBzdXBwb3J0IGlzIGluc3BpcmVkIGJ5IHRoZSBvbmUgZm91bmQgaW4gMS54LgorCisgIE5vdywgZWFjaCBmb250IGRyaXZlciBoYXMgIGl0cyBvd24gYGV4dGVuc2lvbiByZWdpc3RyeScsIHdoaWNoIGxpc3RzCisgIHdoaWNoIGV4dGVuc2lvbnMgIGFyZSBhdmFpbGFibGUgIGZvciB0aGUgZm9udCAgZmFjZXMgbWFuYWdlZCAgYnkgdGhlCisgIGRyaXZlci4KKworICBFeHRlbnNpb24gaWRzIGFyZSAgbm93IHN0cmluZ3MsIHJhdGhlciB0aGFuIDQtYnl0ZSAgdGFncywgYXMgdGhpcyBpcworICB1c3VhbGx5IG1vcmUgcmVhZGFibGUuCisKKyAgRWFjaCBleHRlbnNpb24gaGFzOgorICAgIC0gc29tZSBkYXRhLCBhc3NvY2lhdGVkIHRvIGVhY2ggZmFjZSBvYmplY3QKKyAgICAtIGFuIGludGVyZmFjZSAodGFibGUgb2YgZnVuY3Rpb24gcG9pbnRlcnMpCisKKyAgQW4gZXh0ZW5zaW9uICB0aGF0IGlzIGZvcm1hdC1zcGVjaWZpYyBzaG91bGQgIHNpbXBseSByZWdpc3RlciBpdHNlbGYKKyAgdG8gdGhlIGNvcnJlY3QgZm9udCBkcml2ZXIuICBIZXJlIGlzIHNvbWUgZXhhbXBsZSBjb2RlOgorCisgICAvLyBSZWdpc3RlcmluZyBhbiBleHRlbnNpb25zCisgICAvLworICAgRlRfRXJyb3IgIEZUX0luaXRfWFhYWF9FeHRlbnNpb24oIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICAgeworICAgICBGVF9Ecml2ZXJJbnRlcmZhY2UqICB0dF9kcml2ZXI7CisKKyAgICAgZHJpdmVyID0gRlRfR2V0X0RyaXZlciggbGlicmFyeSwgInRydWV0eXBlIiApOworICAgICBpZiAoIWRyaXZlcikgcmV0dXJuIEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmU7CisKKyAgICAgcmV0dXJuIEZUX1JlZ2lzdGVyX0V4dGVuc2lvbiggZHJpdmVyLCAmZXh0ZW5zaW9uX2NsYXNzICk7CisgICB9CisKKworICAgLy8gSW1wbGVtZW50aW5nIHRoZSBleHRlbnNpb25zCisgICAvLworICAgRlRfRXJyb3IgIEZUX1Byb2NlZWRfRXh0ZW5zaW9uX1hYWCggRlRfRmFjZSAgZmFjZSApCisgICB7CisgICAgIEZUX1hYWF9FeHRlbnNpb24gICAgICAgICAgICBleHQ7CisgICAgIEZUX1hYWF9FeHRlbnNpb25fSW50ZXJmYWNlICBleHRfaW50ZXJmYWNlOworCisgICAgIGV4dCA9IEZUX0dldF9FeHRlbnNpb24oIGZhY2UsICJleHRlbnNpb25pZCIsICZleHRfaW50ZXJmYWNlICk7CisgICAgIGlmICghZXh0KSByZXR1cm4gZXJyb3I7CisKKyAgICAgcmV0dXJuIGV4dF9pbnRlcmZhY2UtPmRvX2l0KGV4dCk7CisgICB9CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgIGZpbGUgIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgbWF5ICBvbmx5IGJlICB1c2VkLAorbW9kaWZpZWQsICBhbmQgIGRpc3RyaWJ1dGVkICB1bmRlciAgdGhlICB0ZXJtcyBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0CitsaWNlbnNlLCBMSUNFTlNFLlRYVC4gICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMKK2ZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0ICB5b3UgaGF2ZSAgcmVhZCB0aGUgIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgIGFuZAorYWNjZXB0IGl0IGZ1bGx5LgorCisKK0xvY2FsIFZhcmlhYmxlczoKK3ZlcnNpb24tY29udHJvbDogbmV2ZXIKK2NvZGluZzogdXRmLTgKK0VuZDoKKworLS0tIGVuZCBvZiBDSEFOR0VTIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvQ01BS0UgYi9mcmVldHlwZS0yLjYvZG9jcy9DTUFLRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTIzN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvQ01BS0UKQEAgLTAsMCArMSwyIEBACitTdXBwb3J0IGZvciBhIGNtYWtlIGJ1aWxkIGhhcyBiZWVuIGNvbnRyaWJ1dGVkLiAgU2VlIHRoZSByZW1hcmtzIGluIHRoZQordG9wLWxldmVsIGBDTWFrZUxpc3RzLnR4dCcgZmlsZSBmb3IgbW9yZS4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0NVU1RPTUlaRSBiL2ZyZWV0eXBlLTIuNi9kb2NzL0NVU1RPTUlaRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFlZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvQ1VTVE9NSVpFCkBAIC0wLDAgKzEsMTUxIEBACitIb3cgdG8gY3VzdG9taXplIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgbGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBGcmVlVHlwZSAgaXMgaGlnaGx5ICBjdXN0b21pemFibGUgIHRvIGZpdCAgdmFyaW91cyAgbmVlZHMsIGFuZCAgdGhpcworICBkb2N1bWVudCAgZGVzY3JpYmVzICBob3cgIGl0ICBpcyAgcG9zc2libGUgIHRvICBzZWxlY3QgIG9wdGlvbnMgIGFuZAorICBjb21wb25lbnRzIGF0IGNvbXBpbGF0aW9uIHRpbWUuCisKKworSS4gQ29uZmlndXJhdGlvbiBtYWNyb3MKKworICBUaGUgIGZpbGUgZm91bmQgIGluIGBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oJyAgY29udGFpbnMgYSAgbGlzdCBvZgorICBjb21tZW50ZWQgY29uZmlndXJhdGlvbiBtYWNyb3MgdGhhdCBjYW4gIGJlIHRvZ2dsZWQgYnkgZGV2ZWxvcGVycyB0bworICBpbmRpY2F0ZSB3aGljaCBmZWF0dXJlcyBzaG91bGQgYmUgYWN0aXZlIHdoaWxlIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgorCisgIFRoZXNlICBvcHRpb25zIHJhbmdlICBmcm9tIGRlYnVnICBsZXZlbCB0byAgYXZhaWxhYmlsaXR5ICBvZiBjZXJ0YWluCisgIGZlYXR1cmVzLCAgIGxpa2UgIG5hdGl2ZSAgIFRydWVUeXBlICBoaW50aW5nICAgdGhyb3VnaCAgIGEgIGJ5dGVjb2RlCisgIGludGVycHJldGVyLgorCisgIFdlICBpbnZpdGUgeW91ICB0byByZWFkICB0aGlzIGZpbGUgIGZvciBtb3JlICBpbmZvcm1hdGlvbi4gICBZb3UgY2FuCisgIGNoYW5nZSB0aGUgIGZpbGUncyBjb250ZW50IHRvIHN1aXQgIHlvdXIgbmVlZHMsIG9yICBvdmVycmlkZSBpdCB3aXRoCisgIG9uZSBvZiB0aGUgdGVjaG5pcXVlcyBkZXNjcmliZWQgYmVsb3cuCisKKworSUkuIE1vZHVsZXMgbGlzdAorCisgIElmIHlvdSAgdXNlIEdOVSBtYWtlICBwbGVhc2UgZWRpdCB0aGUgdG9wLWxldmVsICBmaWxlIGBtb2R1bGVzLmNmZycuCisgIEl0IGNvbnRhaW5zIGEgIGxpc3Qgb2YgYXZhaWxhYmxlIEZyZWVUeXBlIG1vZHVsZXMgIGFuZCBleHRlbnNpb25zIHRvCisgIGJlIGNvbXBpbGVkLiAgQ2hhbmdlIGl0IHRvIHN1aXQgeW91ciBvd24gcHJlZmVyZW5jZXMuICBCZSBhd2FyZSB0aGF0CisgIGNlcnRhaW4gbW9kdWxlcyAgZGVwZW5kIG9uICBvdGhlcnMsIGFzIGRlc2NyaWJlZCAgaW4gdGhlICBmaWxlLiAgR05VCisgIG1ha2UgIHVzZXMgYG1vZHVsZXMuY2ZnJyAgdG8gIGdlbmVyYXRlIGBmdG1vZHVsZS5oJyAgKGluIHRoZSAgb2JqZWN0CisgIGRpcmVjdG9yeSkuCisKKyAgSWYgeW91IGJ1aWxkIEZyZWVUeXBlIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRlIGZyb20gdGhlIHNvdXJjZSBmaWxlcywKKyAgcHV0IHlvdXIgIGN1c3RvbWl6ZWQgYG1vZHVsZXMuY2ZnJyBpbiAgdGhhdCBkaXJlY3Rvcnk7IHRoYXQgIHdheSB5b3UKKyAgY2FuIGtlZXAgdGhlIHNvdXJjZSBmaWxlcyBgY2xlYW4nLgorCisgIElmICB5b3UgZG9uJ3QgIHVzZSAgR05VIG1ha2UgIHlvdSAgaGF2ZSB0byAgbWFudWFsbHkgIGVkaXQgdGhlICBmaWxlCisgIGBpbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oJyAod2hpY2ggIGlzICpub3QqICB1c2VkIHdpdGggIGlmIGNvbXBpbGVkCisgIHdpdGggR05VIG1ha2UpIHRvIGFkZCBvciAgcmVtb3ZlIHRoZSBkcml2ZXJzIGFuZCBjb21wb25lbnRzIHlvdSB3YW50CisgIHRvICAgY29tcGlsZSAgaW50byAgIHRoZSAgbGlicmFyeS4gICAgU2VlICBgSU5TVEFMTC5BTlknICAgZm9yICBtb3JlCisgIGluZm9ybWF0aW9uLgorCisKK0lJSS4gU3lzdGVtIGludGVyZmFjZQorCisgIEZyZWVUeXBlJ3MgIGRlZmF1bHQgaW50ZXJmYWNlIHRvICB0aGUgc3lzdGVtICAoaS5lLiwgdGhlICBwYXJ0cyB0aGF0CisgIGRlYWwgIHdpdGggIG1lbW9yeSAgbWFuYWdlbWVudCAgIGFuZCAgaS9vICBzdHJlYW1zKSAgaXMgIGxvY2F0ZWQgIGluCisgIGBzcmMvYmFzZS9mdHN5c3RlbS5jJy4KKworICBUaGUgY3VycmVudCAgaW1wbGVtZW50YXRpb24gdXNlcyBzdGFuZGFyZCBDIGxpYnJhcnkgIGNhbGxzIHRvIG1hbmFnZQorICBtZW1vcnkgIGFuZCB0byByZWFkICBmb250IGZpbGVzLiAgIEl0IGlzICBob3dldmVyIHBvc3NpYmxlICB0byB3cml0ZQorICBjdXN0b20gaW1wbGVtZW50YXRpb25zIHRvIHN1aXQgc3BlY2lmaWMgc3lzdGVtcy4KKworICBUbyAgdGVsbCB0aGUgIEdOVSBNYWtlLWJhc2VkICBidWlsZCBzeXN0ZW0gIHRvIHVzZSAgYSAgY3VzdG9tIHN5c3RlbQorICBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvICBkZWZpbmUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEZUU1lTX1NSQyB0bworICBwb2ludCB0byB0aGUgcmVsZXZhbnQgaW1wbGVtZW50YXRpb246CisKKyAgICBvbiBVbml4OgorCisgICAgICAuL2NvbmZpZ3VyZSA8eW91ciBvcHRpb25zPgorICAgICAgZXhwb3J0IEZUU1lTX1NSQz1mb28vbXlfZnRzeXN0ZW0uYworICAgICAgbWFrZQorICAgICAgbWFrZSBpbnN0YWxsCisKKyAgICBvbiBXaW5kb3dzOgorCisgICAgICBtYWtlIHNldHVwIDxjb21waWxlcj4KKyAgICAgIHNldCBGVFNZU19TUkM9Zm9vL215X2Z0c3lzdGVtLmMKKyAgICAgIG1ha2UKKworCitJVi4gT3ZlcnJpZGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYW5kIG1vZHVsZSBoZWFkZXJzCisKKyAgSXQgIGlzIHBvc3NpYmxlICB0byBvdmVycmlkZSAgdGhlIGRlZmF1bHQgIGNvbmZpZ3VyYXRpb24gIGFuZCBtb2R1bGUKKyAgaGVhZGVycyB3aXRob3V0ICBjaGFuZ2luZyB0aGUgb3JpZ2luYWwgZmlsZXMuICBUaGVyZSAgYXJlIHRocmVlIHdheXMKKyAgdG8gZG8gdGhhdDoKKworCisgIDEuIFdpdGggR05VIG1ha2UKKworICAgIFtUaGlzIGlzIGFjdHVhbGx5IGEgY29tYmluYXRpb24gb2YgbWV0aG9kIDIgYW5kIDMuXQorCisgICAgSnVzdCBwdXQgeW91ciBjdXN0b20gYGZ0b3B0aW9uLmgnICBmaWxlIGludG8gdGhlIG9iamVjdHMgZGlyZWN0b3J5CisgICAgKG5vcm1hbGx5IGA8dG9wZGlyPi9vYmpzJyBpZiB5b3UgYnVpbGQgIGluIHRoZSBzb3VyY2UgdHJlZSwgb3IgdGhlCisgICAgZGlyZWN0b3J5IHdoZXJlICB5b3UgaW52b2tlIGNvbmZpZ3VyZSAgaWYgeW91IGJ1aWxkIGluICBhIHNlcGFyYXRlCisgICAgZGlyZWN0b3J5KSwgd2hpY2ggR05VIG1ha2UgcHJlZmVycyBvdmVyIHRoZSBzdGFuZGFyZCBsb2NhdGlvbi4gIE5vCisgICAgYWN0aW9uICBpcyAgbmVlZGVkICBmb3IgICBgZnRtb2R1bGUuaCcgIGJlY2F1c2UgIGl0ICBpcyAgZ2VuZXJhdGVkCisgICAgYXV0b21hdGljYWxseSBpbiB0aGUgb2JqZWN0cyBkaXJlY3RvcnkuCisKKyAgMi4gVXNpbmcgdGhlIEMgaW5jbHVkZSBwYXRoCisKKyAgICBVc2UgdGhlICBDIGluY2x1ZGUgcGF0aCAgdG8gZW5zdXJlIHRoYXQgIHlvdXIgb3duIHZlcnNpb25zICBvZiB0aGUKKyAgICBmaWxlcyBhcmUgdXNlZCBhdCBjb21waWxlIHRpbWUgd2hlbiB0aGUgbGluZXMKKworICAgICAgI2luY2x1ZGUgRlRfQ09ORklHX09QVElPTlNfSAorICAgICAgI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAorCisgICAgYXJlIGNvbXBpbGVkLiAgVGhlaXIgZGVmYXVsdCAgdmFsdWVzIGJlaW5nIDxjb25maWcvZnRvcHRpb24uaD4gYW5kCisgICAgPGNvbmZpZy9mdG1vZHVsZS5oPiwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZToKKworICAgICAgY3VzdG9tLworICAgICAgICBjb25maWcvCisgICAgICAgICAgZnRvcHRpb24uaCAgICAgID0+IGN1c3RvbSBvcHRpb25zIGhlYWRlcgorICAgICAgICAgIGZ0bW9kdWxlLmggICAgICA9PiBjdXN0b20gbW9kdWxlcyBsaXN0CisKKyAgICAgIGluY2x1ZGUvICAgICAgICAgICAgPT4gbm9ybWFsIEZyZWVUeXBlIDIgaW5jbHVkZQorICAgICAgICAuLi4KKworICAgIHRoZW4gY2hhbmdlIHRoZSBDIGluY2x1ZGUgcGF0aCB0byBhbHdheXMgZ2l2ZSB0aGUgcGF0aCB0byBgY3VzdG9tJworICAgIGJlZm9yZSB0aGUgRnJlZVR5cGUgMiBgaW5jbHVkZScuCisKKworICAzLiBSZWRlZmluaW5nIEZUX0NPTkZJR19PUFRJT05TX0ggYW5kIEZUX0NPTkZJR19NT0RVTEVTX0gKKworICAgIEFub3RoZXIgd2F5IHRvIGRvIHRoZSBzYW1lIHRoaW5nIGlzIHRvIHJlZGVmaW5lIHRoZSBtYWNyb3MgdXNlZCB0bworICAgIG5hbWUgIHRoZSBjb25maWd1cmF0aW9uICBoZWFkZXJzLiAgVG8gIGRvICBzbywgeW91ICBuZWVkIGEgIGN1c3RvbQorICAgIGBmdDJidWlsZC5oJyB3aG9zZSBjb250ZW50IGNhbiBiZSBhcyBzaW1wbGUgYXM6CisKKyAgICAgICNpZm5kZWYgX19GVDJfQlVJTERfTVlfUExBVEZPUk1fSF9fCisgICAgICAjZGVmaW5lIF9fRlQyX0JVSUxEX01ZX1BMQVRGT1JNX0hfXworCisgICAgICAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggIDxjdXN0b20vbXktZnRvcHRpb24uaD4KKyAgICAgICNkZWZpbmUgRlRfQ09ORklHX01PRFVMRVNfSCAgPGN1c3RvbS9teS1mdG1vZHVsZS5oPgorCisgICAgICAjaW5jbHVkZSA8Y29uZmlnL2Z0aGVhZGVyLmg+CisKKyAgICAgICNlbmRpZiAvKiBfX0ZUMl9CVUlMRF9NWV9QTEFURk9STV9IX18gKi8KKworICAgIFBsYWNlIHRob3NlIGZpbGVzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBlLmcuLAorCisgICAgICBjdXN0b20vCisgICAgICAgIGZ0MmJ1aWxkLmggICAgICAgICAgID0+IGN1c3RvbSB2ZXJzaW9uIGRlc2NyaWJlZCBhYm92ZQorICAgICAgICBteS1mdG9wdGlvbi5oICAgICAgICA9PiBjdXN0b20gb3B0aW9ucyBoZWFkZXIKKyAgICAgICAgbXktZnRtb2R1bGUuaCAgICAgICAgPT4gY3VzdG9tIG1vZHVsZXMgbGlzdCBoZWFkZXIKKworICAgIGFuZCBjaGFuZ2UgIHRoZSBDIGluY2x1ZGUgcGF0aCAgdG8gZW5zdXJlIHRoYXQgIGBjdXN0b20nIGlzIGFsd2F5cworICAgIHBsYWNlZCBiZWZvcmUgdGhlIEZUMiBgaW5jbHVkZScgZHVyaW5nIGNvbXBpbGF0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDAzLTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLAorbW9kaWZpZWQsICBhbmQgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgdGVybXMgb2YgIHRoZSAgRnJlZVR5cGUgcHJvamVjdAorbGljZW5zZSwgIExJQ0VOU0UuVFhULiAgQnkgIGNvbnRpbnVpbmcgdG8gIHVzZSwgbW9kaWZ5LCAgb3IgZGlzdHJpYnV0ZQordGhpcyBmaWxlIHlvdSAgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkICB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZAorYW5kIGFjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIENVU1RPTUlaRSAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0RFQlVHIGIvZnJlZXR5cGUtMi42L2RvY3MvREVCVUcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyYzc2OQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL0RFQlVHCkBAIC0wLDAgKzEsMjA0IEBACitEZWJ1Z2dpbmcgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kuIENvbmZpZ3VyYXRpb24gbWFjcm9zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgIHNldmVyYWwgd2F5cyB0byBlbmFibGUgIGRlYnVnZ2luZyBmZWF0dXJlcyBpbiBhICBGcmVlVHlwZSAyCitidWlsZHMuICBUaGlzIGlzICBjb250cm9sbGVkIHRocm91Z2ggdGhlIGRlZmluaXRpb24gIG9mIHNwZWNpYWwgbWFjcm9zCitsb2NhdGVkIGluIHRoZSBmaWxlIGBmdG9wdGlvbnMuaCcuICBUaGUgbWFjcm9zIGFyZToKKworCisgIEZUX0RFQlVHX0xFVkVMX0VSUk9SCisKKyAgICAjZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgRlRfRVJST1IgbWFjcm8gY2FsbHMKKyAgICB0byBwcmludCBlcnJvciAgbWVzc2FnZXMgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uLiAgIFRoaXMgd2lsbCBub3QKKyAgICBzdG9wICB0aGUgIHByb2dyYW0uICBWZXJ5ICB1c2VmdWwgIHRvICBzcG90IGludmFsaWQgIGZvbnRzICBkdXJpbmcKKyAgICBkZXZlbG9wbWVudCBhbmQgdG8gY29kZSB3b3JrYXJvdW5kcyBmb3IgdGhlbS4KKworICBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgI2RlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgYm90aCBtYWNyb3MgRlRfRVJST1IgYW5kCisgICAgRlRfVFJBQ0UuICBUaGlzICBhbHNvIGluY2x1ZGVzIHRoZSB2YXJpYW50cyAgRlRfVFJBQ0UwLCBGVF9UUkFDRTEsCisgICAgRlRfVFJBQ0UyLCAuLi4sIEZUX1RSQUNFNy4KKworICAgIFRoZSAgdHJhY2UgbWFjcm9zICBhcmUgdXNlZCAgdG8gIHNlbmQgZGVidWdnaW5nICBtZXNzYWdlcyB3aGVuICBhbgorICAgIGFwcHJvcHJpYXRlICBgZGVidWcgbGV2ZWwnICBpcyBjb25maWd1cmVkICBhdCBydW50aW1lICB0aHJvdWdoIHRoZQorICAgIEZUMl9ERUJVRyBlbnZpcm9ubWVudCB2YXJpYWJsZSAobW9yZSBvbiB0aGlzIGxhdGVyKS4KKworICBGVF9ERUJVR19NRU1PUlkKKworICAgIElmIHRoaXMgIG1hY3JvIGlzICNkZWZpbmVkLCB0aGUgIEZyZWVUeXBlIGVuZ2luZSBpcyBsaW5rZWQgIHdpdGggYQorICAgIHNtYWxsICBidXQgIGVmZmVjdGl2ZSBkZWJ1Z2dpbmcgIG1lbW9yeSAgbWFuYWdlciAgdGhhdCB0cmFja3MgIGFsbAorICAgIGFsbG9jYXRpb25zIGFuZCBmcmVlcyB0aGF0IGFyZSBwZXJmb3JtZWQgd2l0aGluIHRoZSBmb250IGVuZ2luZS4KKworICAgIFdoZW4gIHRoZSAgRlQyX0RFQlVHX01FTU9SWSAgZW52aXJvbm1lbnQgdmFyaWFibGUgIGlzICBkZWZpbmVkICBhdAorICAgIHJ1bnRpbWUsIGEgIGNhbGwgdG8gRlRfRG9uZV9GcmVlVHlwZSB3aWxsICBkdW1wIG1lbW9yeSBzdGF0aXN0aWNzLAorICAgIGluY2x1ZGluZyAgdGhlICBsaXN0ICBvZiAgbGVha2VkIG1lbW9yeSAgYmxvY2tzICB3aXRoICB0aGUgIHNvdXJjZQorICAgIGxvY2F0aW9ucyB3aGVyZSAgdGhlc2Ugd2VyZSBhbGxvY2F0ZWQuICAgSXQgaXMgYWx3YXlzIGEgIHZlcnkgZ29vZAorICAgIGlkZWEgdG8gZGVmaW5lIHRoaXMgaW4gIGRldmVsb3BtZW50IGJ1aWxkcy4gIFRoaXMgd29ya3Mgd2l0aCBfYW55XworICAgIHByb2dyYW0gbGlua2VkIHRvIEZyZWVUeXBlLCBidXQgcmVxdWlyZXMgYSBiaWcgZGVhbCBvZiBtZW1vcnkgKHRoZQorICAgIGRlYnVnZ2luZyBtZW1vcnkgIG1hbmFnZXIgbmV2ZXIgIGZyZWVzIHRoZSBibG9ja3MgIHRvIHRoZSAgaGVhcCBpbgorICAgIG9yZGVyIHRvIGRldGVjdCBkb3VibGUgZnJlZXMpLgorCisgICAgV2hlbiAgRlQyX0RFQlVHX01FTU9SWSBpc24ndCAgZGVmaW5lZCAgYXQgIHJ1bnRpbWUsIHRoZSAgZGVidWdnaW5nCisgICAgbWVtb3J5IG1hbmFnZXIgaXMgaWdub3JlZCwgYW5kIHBlcmZvcm1hbmNlIGlzIHVuYWZmZWN0ZWQuCisKKworSUkuIERlYnVnZ2luZyBtYWNyb3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgIG1hY3JvcyAgY2FuIGJlICB1c2VkICB3aXRoaW4gIHRoZSAgRnJlZVR5cGUgc291cmNlcyAgdG8gIGhlbHAKK2RlYnVnZ2luZyBpdHMgY29kZToKKworCisgIDEuIEZUX0VSUk9SKCggLi4uICkpCisKKyAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2VuZCBkZWJ1ZyBtZXNzYWdlcyB0aGF0IGluZGljYXRlIHJlbGF0aXZlbHkKKyAgICBzZXJpb3VzIGVycm9ycyAgKGxpa2UgYnJva2VuICBmb250IGZpbGVzKSwgYnV0ICB3aWxsIG5vdCAgc3RvcCB0aGUKKyAgICBleGVjdXRpb24gb2YgdGhlIHJ1bm5pbmcgcHJvZ3JhbS4gICBJdHMgY29kZSBpcyBjb21waWxlZCBvbmx5IHdoZW4KKyAgICBlaXRoZXIgRlRfREVCVUdfTEVWRUxfRVJST1Igb3IgRlRfREVCVUdfTEVWRUxfVFJBQ0UgYXJlIGRlZmluZWQgaW4KKyAgICBgZnRvcHRpb24uaCcuCisKKyAgICBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdXNlIGEgcHJpbnRmLWxpa2Ugc2lnbmF0dXJlLCBidXQgd2l0aCBkb3VibGUKKyAgICBwYXJlbnRoZXNlcywgbGlrZSBpbgorCisgICAgICBGVF9FUlJPUigoICJ5b3VyICVzIGlzIG5vdCAlc1xuIiwgImZvbyIsICJiYXIiICkpOworCisKKyAgMi4gRlRfQVNTRVJUKCBjb25kaXRpb24gKQorCisgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGNoZWNrICBzdHJvbmcgYXNzZXJ0aW9ucyBhdCBydW50aW1lLiAgSWYgaXRzCisgICAgY29uZGl0aW9uIGlzbid0IFRSVUUsIHRoZSBwcm9ncmFtIHdpbGwgYWJvcnQgd2l0aCBhIHBhbmljIG1lc3NhZ2UuCisgICAgSXRzICBjb2RlICAgaXMgIGNvbXBpbGVkICAgd2hlbiAgZWl0aGVyICAgRlRfREVCVUdfTEVWRUxfRVJST1IgIG9yCisgICAgRlRfREVCVUdfTEVWRUxfVFJBQ0UgICBhcmUgIGRlZmluZWQuICAgIFlvdSAgIGRvbid0ICBuZWVkICAgZG91YmxlCisgICAgcGFyZW50aGVzZXMgaGVyZS4gIEZvciBleGFtcGxlCisKKyAgICAgIEZUX0FTU0VSVCggcHRyICE9IE5VTEwgKTsKKworCisgIDMuIEZUX1RSQUNFKCBsZXZlbCwgKG1lc3NhZ2UuLi4pICkKKworICAgIFRoZSAgRlRfVFJBQ0UgIG1hY3JvIGlzICB1c2VkICB0byAgc2VuZCBnZW5lcmFsLXB1cnBvc2UgIGRlYnVnZ2luZworICAgIG1lc3NhZ2VzIGR1cmluZyBwcm9ncmFtIGV4ZWN1dGlvbi4gICBUaGlzIG1hY3JvIHVzZXMgYW4gKmltcGxpY2l0KgorICAgIG1hY3JvICBuYW1lZCAgRlRfQ09NUE9ORU5UICB1c2VkICB0byAgbmFtZSAgdGhlICBjdXJyZW50ICBGcmVlVHlwZQorICAgIGNvbXBvbmVudCBiZWluZyBydW4uCisKKyAgICBUaGUgZGV2ZWxvcGVyICBzaG91bGQgYWx3YXlzICBkZWZpbmUgRlRfQ09NUE9ORU5UICBhcyBhcHByb3ByaWF0ZSwKKyAgICBmb3IgZXhhbXBsZSBhcyBpbgorCisgICAgICAjdW5kZWYgIEZUX0NPTVBPTkVOVAorICAgICAgI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2lvCisKKyAgICBUaGUgIHZhbHVlICBvZiB0aGUgIEZUX0NPTVBPTkVOVCAgbWFjcm8gIGlzIGFuICBlbnVtZXJhdGlvbiAgbmFtZWQKKyAgICBgdHJhY2VfWFhYWCcgd2hlcmUgYFhYWFgnIGlzIG9uZSBvZiB0aGUgY29tcG9uZW50IG5hbWVzIGRlZmluZWQgaW4KKyAgICB0aGUgaW50ZXJuYWwgIGZpbGUgYGludGVybmFsL2Z0dHJhY2UuaCcuICAgSWYgeW91ICBtb2RpZnkgRnJlZVR5cGUKKyAgICBzb3VyY2UgYW5kIGluc2VydCBuZXcgYHRyYWNlX1hYWFgnICBtYWNybywgeW91IG11c3QgcmVnaXN0ZXIgaXQgaW4KKyAgICBgZnR0cmFjZS5oJy4gSWYgIHlvdSBpbnNlcnQgb3IgIHJlbW92ZSBtYW55IHRyYWNlIG1hY3JvcywgIHlvdSBjYW4KKyAgICBjaGVjayAgIHRoZSAgICB1bmRlZmluZWQgICBvciAgIHRoZSAgIHVudXNlZCAgICB0cmFjZSAgIG1hY3JvICAgYnkKKyAgICBgc3JjL3Rvb2xzL2Noa3RyY21wLnB5Jy4KKworICAgIEVhY2ggc3VjaCBjb21wb25lbnQgaXMgYXNzaWduZWQgYSBgZGVidWcgbGV2ZWwnLCByYW5naW5nIGZyb20gMCB0bworICAgIDcsICB0aHJvdWdoICAgdGhlICB1c2UgIG9mICB0aGUgICBGVDJfREVCVUcgIGVudmlyb25tZW50ICB2YXJpYWJsZQorICAgIChkZXNjcmliZWQgYmVsb3cpIHdoZW4gYSBwcm9ncmFtIGxpbmtlZCB3aXRoIEZyZWVUeXBlIHN0YXJ0cy4KKworICAgIFdoZW4gRlRfVFJBQ0UgaXMgIGNhbGxlZCwgaXRzIGxldmVsIGlzIGNvbXBhcmVkIHRvICB0aGUgb25lIG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50LiAgTWVzc2FnZXMgd2l0aCB0cmFjZSBsZXZlbHMgKmhpZ2hlciogdGhhbgorICAgIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBvbmVudCBsZXZlbCBhcmUgZmlsdGVyZWQgYW5kIG5ldmVyIHByaW50ZWQuCisKKyAgICBUaGlzIG1lYW5zICB0aGF0IHRyYWNlIG1lc3NhZ2VzICB3aXRoIGxldmVsIDAgYXJlICBhbHdheXMgcHJpbnRlZCwKKyAgICB0aG9zZSB3aXRoICBsZXZlbCAyIGFyZSBvbmx5ICBwcmludGVkIHdoZW4gdGhlIGNvbXBvbmVudCAgbGV2ZWwgaXMKKyAgICAqYXQgbGVhc3QqIDIuCisKKyAgICBUaGUgIHNlY29uZCBwYXJhbWV0ZXIgIHRvICBGVF9UUkFDRSBtdXN0ICBjb250YWluIHBhcmVudGhlc2VzICBhbmQKKyAgICBjb3JyZXNwb25kIHRvIGEgcHJpbnRmLWxpa2UgY2FsbCwgYXMgaW4KKworICAgICAgRlRfVFJBQ0UoIDIsICggInlvdXIgJXMgaXMgbm90ICVzXG4iLCAiZm9vIiwgImJhciIgKSApCisKKyAgICBUaGUgICBzaG9ydGN1dCAgbWFjcm9zICAgRlRfVFJBQ0UwLCAgRlRfVFJBQ0UxLCAgIEZUX1RSQUNFMiwgIC4uLiwKKyAgICBGVF9UUkFDRTcgY2FuICBiZSB1c2VkIHdpdGggIGNvbnN0YW50IGxldmVsIGluZGljZXMsIGFuZCAgYXJlIG11Y2gKKyAgICBjbGVhbmVyIHRvIHVzZSwgYXMgaW4KKworICAgICAgRlRfVFJBQ0UyKCggInlvdXIgJXMgaXMgbm90ICVzXG4iLCAiZm9vIiwgImJhciIgKSk7CisKKworSUlJLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAgZm9sbG93aW5nICBlbnZpcm9ubWVudCAgdmFyaWFibGVzIGNvbnRyb2wgIGRlYnVnZ2luZyAgb3V0cHV0ICBhbmQKK2JlaGF2aW91ciBvZiBGcmVlVHlwZSBhdCBydW50aW1lLgorCisKKyAgRlQyX0RFQlVHCisKKyAgICBUaGlzICB2YXJpYWJsZSAgIGlzICBvbmx5ICB1c2VkICAgd2hlbiAgRnJlZVR5cGUgIGlzICAgYnVpbHQgIHdpdGgKKyAgICBGVF9ERUJVR19MRVZFTF9UUkFDRSAgZGVmaW5lZC4gIEl0ICBjb250YWlucyBhICBsaXN0IG9mICBjb21wb25lbnQKKyAgICBsZXZlbCBkZWZpbml0aW9ucywgZm9sbG93aW5nIHRoaXMgZm9ybWF0OgorCisgICAgICBjb21wb25lbnQxOmxldmVsMSBjb21wb25lbnQyOmxldmVsMiBjb21wb25lbnQzOmxldmVsMyAuLi4KKworICAgIHdoZXJlIGBjb21wb25lbnRYJyBpcyB0aGUgbmFtZSAgb2YgYSB0cmFjaW5nIGNvbXBvbmVudCwgYXMgZGVmaW5lZAorICAgIGluIGBmdHRyYWNlLmgnLCBidXQgd2l0aG91dCB0aGUgIGB0cmFjZV8nIHByZWZpeC4gIGBsZXZlbFgnIGlzIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgbGV2ZWwgdG8gdXNlIGF0IHJ1bnRpbWUuCisKKyAgICBgYW55JyAgaXMgYSAgc3BlY2lhbCBjb21wb25lbnQgIG5hbWUgdGhhdCAgd2lsbCBiZSAgaW50ZXJwcmV0ZWQgYXMKKyAgICBgYW55L2FsbCBjb21wb25lbnRzJy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zCisKKyAgICAgIHNldCBGVDJfREVCVUc9YW55OjIgbWVtb3J5OjUgaW86NCAgICAgICAgKG9uIFdpbmRvd3MpCisgICAgICBleHBvcnQgRlQyX0RFQlVHPSJhbnk6MiBtZW1vcnk6NSBpbzo0IiAgIChvbiBMaW51eCB3aXRoIGJhc2gpCisKKyAgICBib3RoIHN0aXB1bGF0ZSB0aGF0IGFsbCBjb21wb25lbnRzIHNob3VsZCBoYXZlIGxldmVsIDIsIGV4Y2VwdCBmb3IKKyAgICB0aGUgbWVtb3J5IGFuZCAgaW8gY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIHNldCAgdG8gdHJhY2UgbGV2ZWxzIDUKKyAgICBhbmQgNCwgcmVzcGVjdGl2ZWx5LgorCisKKyAgRlQyX0RFQlVHX01FTU9SWQorCisgICAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgIHdoZW4gZGVmaW5lZCwgdGVsbHMgRnJlZVR5cGUgIHRvIHVzZSBhCisgICAgZGVidWdnaW5nIG1lbW9yeSBtYW5hZ2VyIHRoYXQgd2lsbCAgdHJhY2sgbGVha2luZyBtZW1vcnkgYmxvY2tzIGFzCisgICAgd2VsbCBhcyBvdGhlciBjb21tb24gZXJyb3JzIGxpa2UgZG91YmxlIGZyZWVzLiAgSXQgaXMgYWxzbyBjYXBhYmxlCisgICAgb2YgIHJlcG9ydGluZyBfd2hlcmVfICB0aGUgIGxlYWtpbmcgYmxvY2tzICB3ZXJlIGFsbG9jYXRlZCwgIHdoaWNoCisgICAgY29uc2lkZXJhYmx5ICBzYXZlcyAgdGltZSAgd2hlbiAgZGVidWdnaW5nIG5ldyAgYWRkaXRpb25zICB0byAgdGhlCisgICAgbGlicmFyeS4KKworICAgIFRoaXMgIGNvZGUgIGlzIG9ubHkgIGNvbXBpbGVkICB3aGVuICBGcmVlVHlwZSAgaXMgYnVpbHQgIHdpdGggIHRoZQorICAgIEZUX0RFQlVHX01FTU9SWSBtYWNybyAjZGVmaW5lZCBpbiAgYGZ0b3B0aW9uLmgnIHRob3VnaCwgaXQgd2lsbCBiZQorICAgIGlnbm9yZWQgaW4gb3RoZXIgYnVpbGRzLgorCisKKyAgRlQyX0FMTE9DX1RPVEFMX01BWAorCisgICAgVGhpcyB2YXJpYWJsZSBpcyAgaWdub3JlZCBpZiBGVDJfREVCVUdfTUVNT1JZIGlzICBub3QgZGVmaW5lZC4gIEl0CisgICAgYWxsb3dzICB5b3UgIHRvICBzcGVjaWZ5ICBhICBtYXhpbXVtICBoZWFwICBzaXplICBmb3IgIGFsbCAgbWVtb3J5CisgICAgYWxsb2NhdGlvbnMgcGVyZm9ybWVkICBieSBGcmVlVHlwZS4gIFRoaXMgIGlzIHZlcnkgdXNlZnVsICB0byB0ZXN0CisgICAgdGhlIHJvYnVzdG5lc3MgIG9mIHRoZSAgZm9udCBlbmdpbmUgIGFuZCBwcm9ncmFtcyAgdGhhdCB1c2UgIGl0IGluCisgICAgdGlnaHQgbWVtb3J5IGNvbmRpdGlvbnMuCisKKyAgICBJZiBpdCBpcyB1bmRlZmluZWQsIG9yIGlmIGl0cyB2YWx1ZSBpcyBub3Qgc3RyaWN0bHkgcG9zaXRpdmUsIHRoZW4KKyAgICBubyBhbGxvY2F0aW9uIGJvdW5kcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lLgorCisKKyAgRlQyX0FMTE9DX0NPVU5UX01BWAorCisgICAgVGhpcyB2YXJpYWJsZSBpcyAgaWdub3JlZCBpZiBGVDJfREVCVUdfTUVNT1JZIGlzICBub3QgZGVmaW5lZC4gIEl0CisgICAgYWxsb3dzICB5b3UgdG8gIHNwZWNpZnkgIGEgbWF4aW11bSAgbnVtYmVyICBvZiBtZW1vcnkgIGFsbG9jYXRpb25zCisgICAgcGVyZm9ybWVkICAgIGJ5ICAgIEZyZWVUeXBlICAgIGJlZm9yZSAgICByZXR1cm5pbmcgICAgdGhlICAgIGVycm9yCisgICAgRlRfRXJyX091dF9PZl9NZW1vcnkuICBUaGlzICBpcyB1c2VmdWwgIGZvciBkZWJ1Z2dpbmcgIGFuZCB0ZXN0aW5nCisgICAgdGhlIGVuZ2luZSdzIHJvYnVzdG5lc3MuCisKKyAgICBJZiBpdCBpcyB1bmRlZmluZWQsIG9yIGlmIGl0cyB2YWx1ZSBpcyBub3Qgc3RyaWN0bHkgcG9zaXRpdmUsIHRoZW4KKyAgICBubyBhbGxvY2F0aW9uIGJvdW5kcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDItMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSAgb25seSBiZSAgdXNlZCwKK21vZGlmaWVkLCAgYW5kICBkaXN0cmlidXRlZCB1bmRlciAgdGhlICB0ZXJtcyAgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdAorbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nICB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzCitmaWxlICB5b3UgaW5kaWNhdGUgdGhhdCAgeW91IGhhdmUgIHJlYWQgdGhlICBsaWNlbnNlIGFuZCAgdW5kZXJzdGFuZCBhbmQKK2FjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIERFQlVHIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvRlRMLlRYVCBiL2ZyZWV0eXBlLTIuNi9kb2NzL0ZUTC5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhYmEzMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL0ZUTC5UWFQKQEAgLTAsMCArMSwxNjkgQEAKKyAgICAgICAgICAgICAgICAgICAgVGhlIEZyZWVUeXBlIFByb2plY3QgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA2LUphbi0yNworCisgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDYgYnkKKyAgICAgICAgICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKKworCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGRpc3RyaWJ1dGVkIGluICBzZXZlcmFsIGFyY2hpdmUgcGFja2FnZXM7CisgIHNvbWUgb2YgdGhlbSBtYXkgY29udGFpbiwgaW4gYWRkaXRpb24gdG8gdGhlIEZyZWVUeXBlIGZvbnQgZW5naW5lLAorICB2YXJpb3VzIHRvb2xzIGFuZCAgY29udHJpYnV0aW9ucyB3aGljaCByZWx5IG9uLCBvciAgcmVsYXRlIHRvLCB0aGUKKyAgRnJlZVR5cGUgUHJvamVjdC4KKworICBUaGlzICBsaWNlbnNlIGFwcGxpZXMgIHRvIGFsbCAgZmlsZXMgZm91bmQgIGluIHN1Y2ggIHBhY2thZ2VzLCBhbmQKKyAgd2hpY2ggZG8gbm90ICBmYWxsIHVuZGVyIHRoZWlyIG93biBleHBsaWNpdCAgbGljZW5zZS4gIFRoZSBsaWNlbnNlCisgIGFmZmVjdHMgIHRodXMgIHRoZSAgRnJlZVR5cGUgICBmb250ICBlbmdpbmUsICB0aGUgIHRlc3QgIHByb2dyYW1zLAorICBkb2N1bWVudGF0aW9uIGFuZCBtYWtlZmlsZXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LgorCisgIFRoaXMgIGxpY2Vuc2UgICB3YXMgIGluc3BpcmVkICBieSAgdGhlICBCU0QsICAgQXJ0aXN0aWMsICBhbmQgIElKRworICAoSW5kZXBlbmRlbnQgSlBFRyAgR3JvdXApIGxpY2Vuc2VzLCB3aGljaCAgYWxsIGVuY291cmFnZSBpbmNsdXNpb24KKyAgYW5kICB1c2Ugb2YgIGZyZWUgIHNvZnR3YXJlIGluICBjb21tZXJjaWFsICBhbmQgZnJlZXdhcmUgIHByb2R1Y3RzCisgIGFsaWtlLiAgQXMgYSBjb25zZXF1ZW5jZSwgaXRzIG1haW4gcG9pbnRzIGFyZSB0aGF0OgorCisgICAgbyBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gSG93ZXZlciwgd2Ugd2lsbCBiZQorICAgICAgaW50ZXJlc3RlZCBpbiBhbnkga2luZCBvZiBidWcgcmVwb3J0cy4gKGBhcyBpcycgZGlzdHJpYnV0aW9uKQorCisgICAgbyBZb3UgY2FuICB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91ICB3YW50LCBpbiBwYXJ0cyBvcgorICAgICAgZnVsbCBmb3JtLCB3aXRob3V0IGhhdmluZyB0byBwYXkgdXMuIChgcm95YWx0eS1mcmVlJyB1c2FnZSkKKworICAgIG8gWW91IG1heSBub3QgcHJldGVuZCB0aGF0ICB5b3Ugd3JvdGUgdGhpcyBzb2Z0d2FyZS4gIElmIHlvdSB1c2UKKyAgICAgIGl0LCBvciAgb25seSBwYXJ0cyBvZiBpdCwgIGluIGEgcHJvZ3JhbSwgIHlvdSBtdXN0IGFja25vd2xlZGdlCisgICAgICBzb21ld2hlcmUgIGluICB5b3VyICBkb2N1bWVudGF0aW9uICB0aGF0ICB5b3UgIGhhdmUgIHVzZWQgIHRoZQorICAgICAgRnJlZVR5cGUgY29kZS4gKGBjcmVkaXRzJykKKworICBXZSAgc3BlY2lmaWNhbGx5ICBwZXJtaXQgIGFuZCAgZW5jb3VyYWdlICB0aGUgIGluY2x1c2lvbiAgb2YgIHRoaXMKKyAgc29mdHdhcmUsIHdpdGggIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCisgIFdlICBkaXNjbGFpbSAgYWxsIHdhcnJhbnRpZXMgIGNvdmVyaW5nICBUaGUgIEZyZWVUeXBlIFByb2plY3QgIGFuZAorICBhc3N1bWUgbm8gbGlhYmlsaXR5IHJlbGF0ZWQgdG8gVGhlIEZyZWVUeXBlIFByb2plY3QuCisKKworICBGaW5hbGx5LCAgbWFueSAgcGVvcGxlICBhc2tlZCAgdXMgIGZvciAgYSAgcHJlZmVycmVkICBmb3JtICBmb3IgIGEKKyAgY3JlZGl0L2Rpc2NsYWltZXIgdG8gdXNlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuICBXZSB0aHVzCisgIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworICAgIiIiCisgICAgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgY29weXJpZ2h0IKkgPHllYXI+IFRoZSBGcmVlVHlwZQorICAgIFByb2plY3QgKHd3dy5mcmVldHlwZS5vcmcpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICIiIgorCisgIFBsZWFzZSByZXBsYWNlIDx5ZWFyPiB3aXRoIHRoZSB2YWx1ZSBmcm9tIHRoZSBGcmVlVHlwZSB2ZXJzaW9uIHlvdQorICBhY3R1YWxseSB1c2UuCisKKworTGVnYWwgVGVybXMKKz09PT09PT09PT09CisKKzAuIERlZmluaXRpb25zCistLS0tLS0tLS0tLS0tLQorCisgIFRocm91Z2hvdXQgdGhpcyBsaWNlbnNlLCAgdGhlIHRlcm1zIGBwYWNrYWdlJywgYEZyZWVUeXBlIFByb2plY3QnLAorICBhbmQgIGBGcmVlVHlwZSAgYXJjaGl2ZScgcmVmZXIgIHRvICB0aGUgIHNldCAgb2YgZmlsZXMgIG9yaWdpbmFsbHkKKyAgZGlzdHJpYnV0ZWQgIGJ5IHRoZSAgYXV0aG9ycyAgKERhdmlkIFR1cm5lciwgIFJvYmVydCBXaWxoZWxtLCAgYW5kCisgIFdlcm5lciBMZW1iZXJnKSBhcyB0aGUgYEZyZWVUeXBlIFByb2plY3QnLCBiZSB0aGV5IG5hbWVkIGFzIGFscGhhLAorICBiZXRhIG9yIGZpbmFsIHJlbGVhc2UuCisKKyAgYFlvdScgcmVmZXJzIHRvICB0aGUgbGljZW5zZWUsIG9yIHBlcnNvbiB1c2luZyAgdGhlIHByb2plY3QsIHdoZXJlCisgIGB1c2luZycgaXMgYSBnZW5lcmljIHRlcm0gaW5jbHVkaW5nIGNvbXBpbGluZyB0aGUgcHJvamVjdCdzIHNvdXJjZQorICBjb2RlIGFzICB3ZWxsIGFzIGxpbmtpbmcgaXQgIHRvIGZvcm0gYSAgYHByb2dyYW0nIG9yIGBleGVjdXRhYmxlJy4KKyAgVGhpcyAgcHJvZ3JhbSBpcyAgcmVmZXJyZWQgdG8gIGFzICBgYSBwcm9ncmFtICB1c2luZyB0aGUgIEZyZWVUeXBlCisgIGVuZ2luZScuCisKKyAgVGhpcyAgbGljZW5zZSBhcHBsaWVzICB0byBhbGwgIGZpbGVzIGRpc3RyaWJ1dGVkICBpbiAgdGhlIG9yaWdpbmFsCisgIEZyZWVUeXBlICBQcm9qZWN0LCAgIGluY2x1ZGluZyAgYWxsICBzb3VyY2UgICBjb2RlLCAgYmluYXJpZXMgIGFuZAorICBkb2N1bWVudGF0aW9uLCAgdW5sZXNzICBvdGhlcndpc2UgIHN0YXRlZCAgIGluICB0aGUgIGZpbGUgIGluICBpdHMKKyAgb3JpZ2luYWwsIHVubW9kaWZpZWQgZm9ybSBhcyAgZGlzdHJpYnV0ZWQgaW4gdGhlIG9yaWdpbmFsIGFyY2hpdmUuCisgIElmIHlvdSBhcmUgIHVuc3VyZSB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgIGZpbGUgaXMgY292ZXJlZCBieQorICB0aGlzIGxpY2Vuc2UsIHlvdSBtdXN0IGNvbnRhY3QgdXMgdG8gdmVyaWZ5IHRoaXMuCisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGNvcHlyaWdodCAoQykgMTk5Ni0yMDAwICBieSBEYXZpZCBUdXJuZXIsCisgIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICBBbGwgcmlnaHRzIHJlc2VydmVkIGV4Y2VwdCBhcworICBzcGVjaWZpZWQgYmVsb3cuCisKKzEuIE5vIFdhcnJhbnR5CistLS0tLS0tLS0tLS0tLQorCisgIFRIRSBGUkVFVFlQRSBQUk9KRUNUICBJUyBQUk9WSURFRCBgQVMgSVMnIFdJVEhPVVQgIFdBUlJBTlRZIE9GIEFOWQorICBLSU5ELCBFSVRIRVIgIEVYUFJFU1MgT1IgSU1QTElFRCwgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCBUTywKKyAgV0FSUkFOVElFUyAgT0YgIE1FUkNIQU5UQUJJTElUWSAgIEFORCAgRklUTkVTUyAgRk9SICBBICBQQVJUSUNVTEFSCisgIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBXSUxMIEFOWSBPRiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICBCRSBMSUFCTEUgIEZPUiBBTlkgREFNQUdFUyBDQVVTRUQgIEJZIFRIRSBVU0UgT1IgIFRIRSBJTkFCSUxJVFkgVE8KKyAgVVNFLCBPRiBUSEUgRlJFRVRZUEUgUFJPSkVDVC4KKworMi4gUmVkaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyAgbGljZW5zZSAgZ3JhbnRzICBhICB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgIHBlcnBldHVhbCAgYW5kCisgIGlycmV2b2NhYmxlIHJpZ2h0ICBhbmQgbGljZW5zZSB0byB1c2UsICBleGVjdXRlLCBwZXJmb3JtLCBjb21waWxlLAorICBkaXNwbGF5LCAgY29weSwgICBjcmVhdGUgIGRlcml2YXRpdmUgIHdvcmtzICAgb2YsICBkaXN0cmlidXRlICBhbmQKKyAgc3VibGljZW5zZSB0aGUgIEZyZWVUeXBlIFByb2plY3QgKGluICBib3RoIHNvdXJjZSBhbmQgIG9iamVjdCBjb2RlCisgIGZvcm1zKSAgYW5kICBkZXJpdmF0aXZlIHdvcmtzICB0aGVyZW9mICBmb3IgIGFueSAgcHVycG9zZTsgYW5kICB0bworICBhdXRob3JpemUgb3RoZXJzICB0byBleGVyY2lzZSAgc29tZSBvciBhbGwgIG9mIHRoZSAgcmlnaHRzIGdyYW50ZWQKKyAgaGVyZWluLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgIG8gUmVkaXN0cmlidXRpb24gb2YgIHNvdXJjZSBjb2RlICBtdXN0IHJldGFpbiB0aGlzICBsaWNlbnNlIGZpbGUKKyAgICAgIChgRlRMLlRYVCcpIHVuYWx0ZXJlZDsgYW55ICBhZGRpdGlvbnMsIGRlbGV0aW9ucyBvciBjaGFuZ2VzIHRvCisgICAgICB0aGUgb3JpZ2luYWwgIGZpbGVzIG11c3QgYmUgY2xlYXJseSAgaW5kaWNhdGVkIGluIGFjY29tcGFueWluZworICAgICAgZG9jdW1lbnRhdGlvbi4gICBUaGUgIGNvcHlyaWdodCAgIG5vdGljZXMgIG9mICB0aGUgIHVuYWx0ZXJlZCwKKyAgICAgIG9yaWdpbmFsICBmaWxlcyBtdXN0ICBiZSAgcHJlc2VydmVkIGluICBhbGwgIGNvcGllcyBvZiAgc291cmNlCisgICAgICBmaWxlcy4KKworICAgIG8gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCBwcm92aWRlIGEgIGRpc2NsYWltZXIgIHRoYXQKKyAgICAgIHN0YXRlcyAgdGhhdCAgdGhlIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb2YgdGhlIHdvcmsgb2YgdGhlCisgICAgICBGcmVlVHlwZSBUZWFtLCAgaW4gIHRoZSAgZGlzdHJpYnV0aW9uICBkb2N1bWVudGF0aW9uLiAgV2UgYWxzbworICAgICAgZW5jb3VyYWdlIHlvdSB0byBwdXQgYW4gVVJMIHRvIHRoZSBGcmVlVHlwZSB3ZWIgcGFnZSAgaW4gIHlvdXIKKyAgICAgIGRvY3VtZW50YXRpb24sIHRob3VnaCB0aGlzIGlzbid0IG1hbmRhdG9yeS4KKworICBUaGVzZSBjb25kaXRpb25zICBhcHBseSB0byBhbnkgIHNvZnR3YXJlIGRlcml2ZWQgZnJvbSBvciAgYmFzZWQgb24KKyAgdGhlIEZyZWVUeXBlIFByb2plY3QsICBub3QganVzdCB0aGUgdW5tb2RpZmllZCBmaWxlcy4gICBJZiB5b3UgdXNlCisgIG91ciB3b3JrLCB5b3UgIG11c3QgYWNrbm93bGVkZ2UgdXMuICBIb3dldmVyLCBubyAgZmVlIG5lZWQgYmUgcGFpZAorICB0byB1cy4KKworMy4gQWR2ZXJ0aXNpbmcKKy0tLS0tLS0tLS0tLS0tCisKKyAgTmVpdGhlciB0aGUgIEZyZWVUeXBlIGF1dGhvcnMgYW5kICBjb250cmlidXRvcnMgbm9yIHlvdSAgc2hhbGwgdXNlCisgIHRoZSBuYW1lIG9mIHRoZSAgb3RoZXIgZm9yIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nLCBvciBwcm9tb3Rpb25hbAorICBwdXJwb3NlcyB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBXZSBzdWdnZXN0LCAgYnV0IGRvIG5vdCByZXF1aXJlLCB0aGF0ICB5b3UgdXNlIG9uZSBvciAgbW9yZSBvZiB0aGUKKyAgZm9sbG93aW5nIHBocmFzZXMgdG8gcmVmZXIgIHRvIHRoaXMgc29mdHdhcmUgaW4geW91ciBkb2N1bWVudGF0aW9uCisgIG9yIGFkdmVydGlzaW5nICBtYXRlcmlhbHM6IGBGcmVlVHlwZSBQcm9qZWN0JywgIGBGcmVlVHlwZSBFbmdpbmUnLAorICBgRnJlZVR5cGUgbGlicmFyeScsIG9yIGBGcmVlVHlwZSBEaXN0cmlidXRpb24nLgorCisgIEFzICB5b3UgaGF2ZSAgbm90IHNpZ25lZCAgdGhpcyBsaWNlbnNlLCAgeW91IGFyZSAgbm90ICByZXF1aXJlZCB0bworICBhY2NlcHQgIGl0LiAgIEhvd2V2ZXIsICBhcyAgdGhlIEZyZWVUeXBlICBQcm9qZWN0ICBpcyAgY29weXJpZ2h0ZWQKKyAgbWF0ZXJpYWwsIG9ubHkgIHRoaXMgbGljZW5zZSwgb3IgIGFub3RoZXIgb25lIGNvbnRyYWN0ZWQgIHdpdGggdGhlCisgIGF1dGhvcnMsIGdyYW50cyB5b3UgIHRoZSByaWdodCB0byB1c2UsIGRpc3RyaWJ1dGUsICBhbmQgbW9kaWZ5IGl0LgorICBUaGVyZWZvcmUsICBieSAgdXNpbmcsICBkaXN0cmlidXRpbmcsICBvciBtb2RpZnlpbmcgIHRoZSAgRnJlZVR5cGUKKyAgUHJvamVjdCwgeW91IGluZGljYXRlIHRoYXQgeW91IHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBhbGwgdGhlIHRlcm1zCisgIG9mIHRoaXMgbGljZW5zZS4KKworNC4gQ29udGFjdHMKKy0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHR3byBtYWlsaW5nIGxpc3RzIHJlbGF0ZWQgdG8gRnJlZVR5cGU6CisKKyAgICBvIGZyZWV0eXBlQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGdlbmVyYWwgdXNlIGFuZCBhcHBsaWNhdGlvbnMgb2YgRnJlZVR5cGUsIGFzIHdlbGwgYXMKKyAgICAgIGZ1dHVyZSBhbmQgIHdhbnRlZCBhZGRpdGlvbnMgdG8gdGhlICBsaWJyYXJ5IGFuZCBkaXN0cmlidXRpb24uCisgICAgICBJZiAgeW91IGFyZSBsb29raW5nICBmb3Igc3VwcG9ydCwgIHN0YXJ0IGluICB0aGlzIGxpc3QgIGlmIHlvdQorICAgICAgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB0byBoZWxwIHlvdSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICAgIG8gZnJlZXR5cGUtZGV2ZWxAbm9uZ251Lm9yZworCisgICAgICBEaXNjdXNzZXMgYnVncywgIGFzIHdlbGwgIGFzIGVuZ2luZSBpbnRlcm5hbHMsICBkZXNpZ24gaXNzdWVzLAorICAgICAgc3BlY2lmaWMgbGljZW5zZXMsIHBvcnRpbmcsIGV0Yy4KKworICBPdXIgaG9tZSBwYWdlIGNhbiBiZSBmb3VuZCBhdAorCisgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcKKworCistLS0gZW5kIG9mIEZUTC5UWFQgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9HUEx2Mi5UWFQgYi9mcmVldHlwZS0yLjYvZG9jcy9HUEx2Mi5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmZTdiNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL0dQTHYyLlRYVApAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0lOU1RBTEwgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2M1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMCkBAIC0wLDAgKzEsODggQEAKKworVGhlcmUgYXJlICBzZXZlcmFsIHdheXMgIHRvIGJ1aWxkIHRoZSAgRnJlZVR5cGUgbGlicmFyeSwgIGRlcGVuZGluZyBvbgoreW91ciBzeXN0ZW0gYW5kIHRoZSBsZXZlbCBvZiAgY3VzdG9taXphdGlvbiB5b3UgbmVlZC4gIEhlcmUgaXMgYSBzaG9ydAorb3ZlcnZpZXcgb2YgdGhlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlOgorCisKK0kuIE5vcm1hbCBpbnN0YWxsYXRpb24gYW5kIHVwZ3JhZGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIDEuIFVuaXggU3lzdGVtcyAoaW5jbHVkaW5nIE1hYyBPUyBYLCBDeWd3aW4sIGFuZCBNU3lzIG9uIFdpbmRvd3MpCisKKyAgICBQbGVhc2UgcmVhZCBgSU5TVEFMTC5VTklYJyB0byBpbnN0YWxsIG9yIHVwZ3JhZGUgRnJlZVR5cGUgIDIgb24gIGEKKyAgICBVbml4IHN5c3RlbS4gICBOb3RlICB0aGF0ICB5b3UgICpuZWVkKiAgR05VICBNYWtlICAgZm9yICBhdXRvbWF0aWMKKyAgICBjb21waWxhdGlvbiwgIHNpbmNlIG90aGVyIG1ha2UgdG9vbHMgd29uJ3Qgd29yayAodGhpcyBpbmNsdWRlcyBCU0QKKyAgICBNYWtlKS4KKworICAgIEdOVSBNYWtlIFZFUlNJT04gMy44MCBPUiBORVdFUiBJUyBORUVERUQhCisKKworICAyLiBPbiBWTVMgd2l0aCB0aGUgYG1tcycgYnVpbGQgdG9vbAorCisgICAgU2VlIGBJTlNUQUxMLlZNUycgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgb24gdGhpcyBwbGF0Zm9ybS4KKworCisgIDMuIE90aGVyIHN5c3RlbXMgdXNpbmcgR05VIE1ha2UKKworICAgIE9uIG5vbi1Vbml4IHBsYXRmb3JtcywgIGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkICB0aGUgbGlicmFyeSB1c2luZworICAgIEdOVSBNYWtlICB1dGlsaXR5LiAgTm90ZSB0aGF0ICAqTk8gT1RIRVIgTUFLRSBUT09MICBXSUxMIFdPUksqWzFdIQorICAgIFRoaXMgIG1ldGhvZHMgc3VwcG9ydHMgIHNldmVyYWwgIGNvbXBpbGVycyBvbiAgV2luZG93cywgT1MvMiwgIGFuZAorICAgIEJlT1MsIGluY2x1ZGluZyBNaW5HVywgVmlzdWFsIEMrKywgQm9ybGFuZCBDKyssIGFuZCBtb3JlLgorCisgICAgSW5zdHJ1Y3Rpb25zIGFyZSBwcm92aWRlZCBpbiB0aGUgZmlsZSBgSU5TVEFMTC5HTlUnLgorCisKKyAgNC4gV2l0aCBhbiBJREUgUHJvamVjdCBGaWxlIChlLmcuLCBmb3IgVmlzdWFsIFN0dWRpbyBvciBDb2RlV2FycmlvcikKKworICAgIFdlIHByb3ZpZGUgYSAgc21hbGwgbnVtYmVyIG9mIGBwcm9qZWN0IGZpbGVzJyAgZm9yIHZhcmlvdXMgSURFcyB0bworICAgIGF1dG9tYXRpY2FsbHkgYnVpbGQgIHRoZSBsaWJyYXJ5IGFzICB3ZWxsLiAgTm90ZSB0aGF0ICB0aGVzZSBmaWxlcworICAgIGFyZSAgbm90IHN1cHBvcnRlZCAgYW5kIG9ubHkgIHNwb3JhZGljYWxseSBtYWludGFpbmVkICBieSBGcmVlVHlwZQorICAgIGRldmVsb3BlcnMsIHNvIGRvbid0IGV4cGVjdCB0aGVtIHRvIHdvcmsgaW4gZWFjaCByZWxlYXNlLgorCisgICAgVG8gZmluZCB0aGVtLCBoYXZlIGEgIGxvb2sgYXQgdGhlIGNvbnRlbnQgb2YgdGhlIGBidWlsZHMvPHN5c3RlbT4nCisgICAgZGlyZWN0b3J5LCB3aGVyZSA8c3lzdGVtPiBzdGFuZHMgZm9yIHlvdXIgT1Mgb3IgZW52aXJvbm1lbnQuCisKKworICA1LiBVc2luZyBjbWFrZQorCisgICAgU2VlIHRoZSB0b3AtbGV2ZWwgYENNYWtlTGlzdHMudHh0JyBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKyAgNi4gRnJvbSB5b3Ugb3duIElERSwgb3Igb3duIE1ha2VmaWxlcworCisgICAgSWYgIHlvdSAgd2FudCAgdG8gIGNyZWF0ZSAgIHlvdXIgIG93biAgcHJvamVjdCAgZmlsZSwgIGZvbGxvdyAgdGhlCisgICAgaW5zdHJ1Y3Rpb25zICAgZ2l2ZW4gIGluICB0aGUgICBgSU5TVEFMTC5BTlknICBkb2N1bWVudCAgIG9mICB0aGlzCisgICAgZGlyZWN0b3J5LgorCisKK0lJLiBDdXN0b20gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIEN1c3RvbWl6aW5nIHRoZSBjb21waWxhdGlvbiAgb2YgRnJlZVR5cGUgaXMgZWFzeSwgYW5kICBhbGxvd3MgeW91IHRvCisgIHNlbGVjdCBvbmx5IHRoZSBjb21wb25lbnRzIG9mICB0aGUgZm9udCBlbmdpbmUgdGhhdCB5b3UgcmVhbGx5IG5lZWQuCisgIEZvciBtb3JlIGRldGFpbHMgcmVhZCB0aGUgZmlsZSBgQ1VTVE9NSVpFJy4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1sxXSBtYWtlKyssIGEgbWFrZSB0b29sIHdyaXR0ZW4gaW4gUGVybCwgaGFzIHN1ZmZpY2llbnQgc3VwcG9ydCBvZiBHTlUKKyAgICBtYWtlIGV4dGVuc2lvbnMgdG8gYnVpbGQgRnJlZVR5cGUuICBTZWUKKworICAgICAgaHR0cDovL21ha2VwcC5zb3VyY2Vmb3JnZS5uZXQKKworICAgIGZvciBtb3JlIGluZm9ybWF0aW9uOyB5b3UgbmVlZCB2ZXJzaW9uIDEuMTkgb3IgbmV3ZXIsIGFuZCB5b3UgbXVzdAorICAgIHBhc3Mgb3B0aW9uIGAtLW5vcmMtc3Vic3RpdHV0aW9uJy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKK21vZGlmaWVkLCAgYW5kIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIHRlcm1zIG9mICB0aGUgIEZyZWVUeXBlIHByb2plY3QKK2xpY2Vuc2UsICBMSUNFTlNFLlRYVC4gIEJ5ICBjb250aW51aW5nIHRvICB1c2UsIG1vZGlmeSwgIG9yIGRpc3RyaWJ1dGUKK3RoaXMgZmlsZSB5b3UgIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCAgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQKK2FuZCBhY2NlcHQgaXQgZnVsbHkuCisKKworLS0tIGVuZCBvZiBJTlNUQUxMIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5BTlkgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLkFOWQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2Q2ZGRkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5BTlkKQEAgLTAsMCArMSwxNTYgQEAKK0luc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgRnJlZVR5cGUgd2l0aCB5b3VyIG93biBidWlsZCB0b29sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZWUgIHRoZSAgZmlsZSBgQ1VTVE9NSVpFJyAgdG8gIGxlYXJuICBob3cgIHRvIGN1c3RvbWl6ZSAgRnJlZVR5cGUgIHRvCitzcGVjaWZpYyBlbnZpcm9ubWVudHMuCisKKworSS4gU3RhbmRhcmQgcHJvY2VkdXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAqIERJU0FCTEUgUFJFLUNPTVBJTEVEICBIRUFERVJTISAgVGhpcyBpcyB2ZXJ5ICBpbXBvcnRhbnQgZm9yIFZpc3VhbAorICAgIEMrKywgYmVjYXVzZSBGcmVlVHlwZSB1c2VzIGxpbmVzIGxpa2U6CisKKyAgICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworICAgIHdoaWNoIGFyZSBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCBieSB0aGlzIGNvbXBpbGVyIHdoaWxlIGJlaW5nIElTTworICAgIEMgY29tcGxpYW50IQorCisgICogWW91ICBuZWVkICB0byAgYWRkICB0aGUgZGlyZWN0b3JpZXMgIGBmcmVldHlwZTIvaW5jbHVkZScgIHRvICB5b3VyCisgICAgaW5jbHVkZSBwYXRoIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LgorCisgICogRnJlZVR5cGUgMiBpcyBtYWRlIG9mICBzZXZlcmFsIGNvbXBvbmVudHM7IGVhY2ggb2YgdGhlbSBpcyBsb2NhdGVkCisgICAgaW4gICAgYSAgIHN1YmRpcmVjdG9yeSAgICBvZiAgIGBmcmVldHlwZTIvc3JjJy4gICAgIEZvciAgIGV4YW1wbGUsCisgICAgYGZyZWV0eXBlMi9zcmMvdHJ1ZXR5cGUvJyBjb250YWlucyB0aGUgVHJ1ZVR5cGUgZm9udCBkcml2ZXIuCisKKyAgKiBETyBOT1QgQ09NUElMRSBBTEwgQyBGSUxFUyEgIFJhdGhlciwgY29tcGlsZSB0aGUgZm9sbG93aW5nIG9uZXMuCisKKyAgICAtLSBiYXNlIGNvbXBvbmVudHMgKHJlcXVpcmVkKQorCisgICAgICBzcmMvYmFzZS9mdHN5c3RlbS5jCisgICAgICBzcmMvYmFzZS9mdGluaXQuYworICAgICAgc3JjL2Jhc2UvZnRkZWJ1Zy5jCisKKyAgICAgIHNyYy9iYXNlL2Z0YmFzZS5jCisKKyAgICAgIHNyYy9iYXNlL2Z0YmJveC5jICAgICAgIC0tIHJlY29tbWVuZGVkLCBzZWUgPGZ0YmJveC5oPgorICAgICAgc3JjL2Jhc2UvZnRnbHlwaC5jICAgICAgLS0gcmVjb21tZW5kZWQsIHNlZSA8ZnRnbHlwaC5oPgorCisgICAgICBzcmMvYmFzZS9mdGJkZi5jICAgICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdGJkZi5oPgorICAgICAgc3JjL2Jhc2UvZnRiaXRtYXAuYyAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRiaXRtYXAuaD4KKyAgICAgIHNyYy9iYXNlL2Z0Y2lkLmMgICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0Y2lkLmg+CisgICAgICBzcmMvYmFzZS9mdGZudGZtdC5jICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdGZudGZtdC5oPgorICAgICAgc3JjL2Jhc2UvZnRmc3R5cGUuYyAgICAgLS0gb3B0aW9uYWwKKyAgICAgIHNyYy9iYXNlL2Z0Z2FzcC5jICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0Z2FzcC5oPgorICAgICAgc3JjL2Jhc2UvZnRneHZhbC5jICAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRneHZhbC5oPgorICAgICAgc3JjL2Jhc2UvZnRsY2RmaWwuYyAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRsY2RmaWwuaD4KKyAgICAgIHNyYy9iYXNlL2Z0bW0uYyAgICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0bW0uaD4KKyAgICAgIHNyYy9iYXNlL2Z0b3R2YWwuYyAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0b3R2YWwuaD4KKyAgICAgIHNyYy9iYXNlL2Z0cGF0ZW50LmMgICAgIC0tIG9wdGlvbmFsCisgICAgICBzcmMvYmFzZS9mdHBmci5jICAgICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdHBmci5oPgorICAgICAgc3JjL2Jhc2UvZnRzdHJva2UuYyAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRzdHJva2UuaD4KKyAgICAgIHNyYy9iYXNlL2Z0c3ludGguYyAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0c3ludGguaD4KKyAgICAgIHNyYy9iYXNlL2Z0dHlwZTEuYyAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPHQxdGFibGVzLmg+CisgICAgICBzcmMvYmFzZS9mdHdpbmZudC5jICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdHdpbmZudC5oPgorCisgICAgICBzcmMvYmFzZS9mdG1hYy5jICAgICAgICAtLSBvbmx5IG9uIHRoZSBNYWNpbnRvc2gKKworICAgIC0tIGZvbnQgZHJpdmVycyAob3B0aW9uYWw7IGF0IGxlYXN0IG9uZSBpcyBuZWVkZWQpCisKKyAgICAgIHNyYy9iZGYvYmRmLmMgICAgICAgICAgIC0tIEJERiBmb250IGRyaXZlcgorICAgICAgc3JjL2NmZi9jZmYuYyAgICAgICAgICAgLS0gQ0ZGL09wZW5UeXBlIGZvbnQgZHJpdmVyCisgICAgICBzcmMvY2lkL3R5cGUxY2lkLmMgICAgICAtLSBUeXBlIDEgQ0lELWtleWVkIGZvbnQgZHJpdmVyCisgICAgICBzcmMvcGNmL3BjZi5jICAgICAgICAgICAtLSBQQ0YgZm9udCBkcml2ZXIKKyAgICAgIHNyYy9wZnIvcGZyLmMgICAgICAgICAgIC0tIFBGUi9UcnVlRG9jIGZvbnQgZHJpdmVyCisgICAgICBzcmMvc2ZudC9zZm50LmMgICAgICAgICAtLSBTRk5UIGZpbGVzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUcnVlVHlwZSAmIE9wZW5UeXBlKQorICAgICAgc3JjL3RydWV0eXBlL3RydWV0eXBlLmMgLS0gVHJ1ZVR5cGUgZm9udCBkcml2ZXIKKyAgICAgIHNyYy90eXBlMS90eXBlMS5jICAgICAgIC0tIFR5cGUgMSBmb250IGRyaXZlcgorICAgICAgc3JjL3R5cGU0Mi90eXBlNDIuYyAgICAgLS0gVHlwZSA0MiBmb250IGRyaXZlcgorICAgICAgc3JjL3dpbmZvbnRzL3dpbmZudC5jICAgLS0gV2luZG93cyBGT05UIC8gRk5UIGZvbnQgZHJpdmVyCisKKyAgICAtLSByYXN0ZXJpemVycyAob3B0aW9uYWw7IGF0IGxlYXN0IG9uZSBpcyBuZWVkZWQgZm9yIHZlY3RvcgorICAgICAgIGZvcm1hdHMpCisKKyAgICAgIHNyYy9yYXN0ZXIvcmFzdGVyLmMgICAgIC0tIG1vbm9jaHJvbWUgcmFzdGVyaXplcgorICAgICAgc3JjL3Ntb290aC9zbW9vdGguYyAgICAgLS0gYW50aS1hbGlhc2luZyByYXN0ZXJpemVyCisKKyAgICAtLSBhdXhpbGlhcnkgbW9kdWxlcyAob3B0aW9uYWwpCisKKyAgICAgIHNyYy9hdXRvZml0L2F1dG9maXQuYyAgIC0tIGF1dG8gaGludGluZyBtb2R1bGUKKyAgICAgIHNyYy9jYWNoZS9mdGNhY2hlLmMgICAgIC0tIGNhY2hlIHN1Yi1zeXN0ZW0gKGluIGJldGEpCisgICAgICBzcmMvZ3ppcC9mdGd6aXAuYyAgICAgICAtLSBzdXBwb3J0IGZvciBjb21wcmVzc2VkIGZvbnRzICguZ3opCisgICAgICBzcmMvbHp3L2Z0bHp3LmMgICAgICAgICAtLSBzdXBwb3J0IGZvciBjb21wcmVzc2VkIGZvbnRzICguWikKKyAgICAgIHNyYy9iemlwMi9mdGJ6aXAyLmMgICAgIC0tIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgZm9udHMgKC5iejIpCisgICAgICBzcmMvZ3h2YWxpZC9neHZhbGlkLmMgICAtLSBUcnVlVHlwZUdYL0FBVCB0YWJsZSB2YWxpZGF0aW9uCisgICAgICBzcmMvb3R2YWxpZC9vdHZhbGlkLmMgICAtLSBPcGVuVHlwZSB0YWJsZSB2YWxpZGF0aW9uCisgICAgICBzcmMvcHNhdXgvcHNhdXguYyAgICAgICAtLSBQb3N0U2NyaXB0IFR5cGUgMSBwYXJzaW5nCisgICAgICBzcmMvcHNoaW50ZXIvcHNoaW50ZXIuYyAtLSBQUyBoaW50aW5nIG1vZHVsZQorICAgICAgc3JjL3BzbmFtZXMvcHNuYW1lcy5jICAgLS0gUG9zdFNjcmlwdCBnbHlwaCBuYW1lcyBzdXBwb3J0CisKKworICAgIE5vdGVzOgorCisgICAgICBgZnRjYWNoZS5jJyAgbmVlZHMgYGZ0Z2x5cGguYycKKyAgICAgIGBmdGZzdHlwZS5jJyBuZWVkcyBgZnR0eXBlMS5jJworICAgICAgYGZ0Z2x5cGguYycgIG5lZWRzIGBmdGJpdG1hcC5jJworICAgICAgYGZ0c3Ryb2tlLmMnIG5lZWRzIGBmdGdseXBoLmMnCisgICAgICBgZnRzeW50aC5jJyAgbmVlZHMgYGZ0Yml0bWFwLmMnCisKKyAgICAgIGBjZmYuYycgICAgICBuZWVkcyBgc2ZudC5jJywgYHBzaGludGVyLmMnLCBhbmQgYHBzbmFtZXMuYycKKyAgICAgIGB0cnVldHlwZS5jJyBuZWVkcyBgc2ZudC5jJyBhbmQgYHBzbmFtZXMuYycKKyAgICAgIGB0eXBlMS5jJyAgICBuZWVkcyBgcHNhdXguYycgYHBzaGludGVyLmMnLCBhbmQgYHBzbmFtZXMuYycKKyAgICAgIGB0eXBlMWNpZC5jJyBuZWVkcyBgcHNhdXguYycsIGBwc2hpbnRlci5jJywgYW5kIGBwc25hbWVzLmMnCisgICAgICBgdHlwZTQyLmMnICAgbmVlZHMgYHRydWV0eXBlLmMnCisKKyAgICAgIFBsZWFzZSBjb25zdWx0IHRoZSBjZW50cmFsIGBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oJworICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkZXRhaWxzIG9uIGFkZGl0aW9uYWwgbGlicmFyaWVzIG5lY2Vzc2FyeQorICAgICAgZm9yIHNvbWUgb3B0aW9uYWwgZmVhdHVyZXMuCisKKworICBSZWFkIHRoZSBmaWxlIGBDVVNUT01JWkUnIGluIGNhc2UgIHlvdSB3YW50IHRvIGNvbXBpbGUgb25seSBhIHN1YnNldAorICBvZiAgdGhlICBkcml2ZXJzLCAgcmVuZGVyZXJzLCAgIGFuZCAgb3B0aW9uYWwgIG1vZHVsZXM7ICBhICBkZXRhaWxlZAorICBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91cyBiYXNlICBleHRlbnNpb24gaXMgZ2l2ZW4gaW4gdGhlIHRvcC1sZXZlbAorICBmaWxlIGBtb2R1bGVzLmNmZycuCisKKyAgWW91IGFyZSBkb25lLiAgSW4gY2FzZSBvZiBwcm9ibGVtcywgc2VlIHRoZSBhcmNoaXZlcyBvZiB0aGUgRnJlZVR5cGUKKyAgZGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0LgorCisKK0lJLiBTdXBwb3J0IGZvciBmbGF0LWRpcmVjdG9yeSBjb21waWxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSXQgaXMgIHBvc3NpYmxlIHRvICBwdXQgYWxsICBGcmVlVHlwZSAyIHNvdXJjZSAgZmlsZXMgaW50byAgYSBzaW5nbGUKKyAgZGlyZWN0b3J5LCB3aXRoIHRoZSAqZXhjZXB0aW9uKiBvZiB0aGUgYGluY2x1ZGUnIGhpZXJhcmNoeS4KKworICAxLiBDb3B5IGFsbCBmaWxlcyBpbiBjdXJyZW50IGRpcmVjdG9yeQorCisgICAgICBjcCBmcmVldHlwZTIvc3JjL2Jhc2UvKi5baGNdIC4KKyAgICAgIGNwIGZyZWV0eXBlMi9zcmMvcmFzdGVyMS8qLltoY10gLgorICAgICAgY3AgZnJlZXR5cGUyL3NyYy9zbW9vdGgvKi5baGNdIC4KKyAgICAgIGV0Yy4KKworICAyLiBDb21waWxlIHNvdXJjZXMKKworICAgICAgY2MgLWMgLUlmcmVldHlwZTIvaW5jbHVkZSAtREZUMl9CVUlMRF9MSUJSQVJZIGZ0c3lzdGVtLmMKKyAgICAgIGNjIC1jIC1JZnJlZXR5cGUyL2luY2x1ZGUgLURGVDJfQlVJTERfTElCUkFSWSBmdGluaXQuYworICAgICAgY2MgLWMgLUlmcmVldHlwZTIvaW5jbHVkZSAtREZUMl9CVUlMRF9MSUJSQVJZIGZ0ZGVidWcuYworICAgICAgY2MgLWMgLUlmcmVldHlwZTIvaW5jbHVkZSAtREZUMl9CVUlMRF9MSUJSQVJZIGZ0YmFzZS5jCisgICAgICBldGMuCisKKyAgICBZb3UgZG9uJ3QgIG5lZWQgdG8gZGVmaW5lICB0aGUgRlRfRkxBVF9DT01QSUxBVElPTiBtYWNybyAgKGFzIHRoaXMKKyAgICB3YXMgcmVxdWlyZWQgaW4gcHJldmlvdXMgcmVsZWFzZXMgb2YgRnJlZVR5cGUgMikuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDMtMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCittb2RpZmllZCwgIGFuZCBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICB0ZXJtcyBvZiAgdGhlICBGcmVlVHlwZSBwcm9qZWN0CitsaWNlbnNlLCAgTElDRU5TRS5UWFQuICBCeSAgY29udGludWluZyB0byAgdXNlLCBtb2RpZnksICBvciBkaXN0cmlidXRlCit0aGlzIGZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kCithbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgSU5TVEFMTC5BTlkgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLkNST1NTIGIvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5DUk9TUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODM2MzhkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5DUk9TUwpAQCAtMCwwICsxLDE3NyBAQAorVGhpcyBkb2N1bWVudCBjb250YWlucyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGNyb3NzLWJ1aWxkIHRoZSBGcmVlVHlwZQorbGlicmFyeSBvbiBVbml4IHN5c3RlbXMsIGZvciBleGFtcGxlLCBidWlsZGluZyBiaW5hcmllcyBmb3IgTGludXgvTUlQUworb24gIEZyZWVCU0QvaTM4Ni4gIEJlZm9yZSAgcmVhZGluZyB0aGlzICBkb2N1bWVudCwgcGxlYXNlICBjb25zdWx0IHRoZQorZmlsZSAgYElOU1RBTEwuVU5JWCcgZm9yICByZXF1aXJlZCB0b29scyAgYW5kIHRoZSAgYmFzaWMgc2VsZi1idWlsZGluZworcHJvY2VkdXJlLgorCisKKyAgMS4gUmVxdWlyZWQgVG9vbHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEZvciBzZWxmLWJ1aWxkaW5nIHRoZSBGcmVlVHlwZSBsaWJyYXJ5ICBvbiBhIFVuaXggc3lzdGVtLCBHTlUgTWFrZQorICAgIDMuODAgb3IgbmV3ZXIgIGlzIHJlcXVpcmVkLiAgYElOU1RBTEwuVU5JWCcgY29udGFpbnMgIGhpbnRzIGhvdyB0bworICAgIGNoZWNrIHRoZSBpbnN0YWxsZWQgYG1ha2UnLgorCisgICAgVGhlIEdOVSBDICBjb21waWxlciB0byBjcm9zcy1idWlsZCB0aGUgdGFyZ2V0ICBzeXN0ZW0gaXMgcmVxdWlyZWQuCisgICAgQ3VycmVudGx5LCB1c2luZyBhIG5vbi1HTlUgY3Jvc3MgIGNvbXBpbGVyIGlzIHVudGVzdGVkLiAgVGhlIGNyb3NzCisgICAgY29tcGlsZXIgaXMgIGV4cGVjdGVkIHRvIGJlICBpbnN0YWxsZWQgd2l0aCBhIHN5c3RlbSAgcHJlZml4LiAgRm9yCisgICAgZXhhbXBsZSwgaWYgIHlvdXIgYnVpbGRpbmcgc3lzdGVtICBpcyBGcmVlQlNEL2kzODYgYW5kICB0aGUgdGFyZ2V0CisgICAgc3lzdGVtIGlzIExpbnV4L01JUFMsIHRoZSBjcm9zcyAgY29tcGlsZXIgc2hvdWxkIGJlIGluc3RhbGxlZCB3aXRoCisgICAgdGhlIG5hbWUgYG1pcHMtaXAyMi1saW51eGVsZi1nY2MnLgorCisgICAgQSBDICBjb21waWxlciBmb3IgYSBzZWxmLWJ1aWxkICBpcyByZXF1aXJlZCBhbHNvLCB0byAgYnVpbGQgYSB0b29sCisgICAgKGBhcGluYW1lcycpIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZWR1cmUuICBOb24tR05VCisgICAgc2VsZiBjb21waWxlcnMgYXJlIGFjY2VwdGFibGUsIGJ1dCBzdWNoIGEgc2V0dXAgaXMgdW50ZXN0ZWQuCisKKworICAyLiBDb25maWd1cmF0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIDIuMS4gQnVpbGRpbmcgYW5kIHRhcmdldCBzeXN0ZW0KKworICAgICAgVG8gY29uZmlndXJlICBhIGNyb3NzLWJ1aWxkLCAgdGhlIG9wdGlvbnMgIGAtLWhvc3Q9PHN5c3RlbT4nIGFuZAorICAgICAgYC0tYnVpbGQ9PHN5c3RlbT4nICBtdXN0IGJlICBwYXNzZWQgdG8gIHRoZSBgY29uZmlndXJlJyAgc2NyaXB0LgorICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgYnVpbGQgc3lzdGVtIGlzIEZyZWVCU0QvaTM4NiBhbmQgdGhlIHRhcmdldAorICAgICAgc3lzdGVtIGlzIExpbnV4L01JUFMsIHNheQorCisgICAgICAgIC4vY29uZmlndXJlIFwKKyAgICAgICAgICAtLWJ1aWxkPWkzODYtdW5rbm93bi1mcmVlYnNkIFwKKyAgICAgICAgICAtLWhvc3Q9bWlwcy1pcDIyLWxpbnV4ZWxmIFwKKyAgICAgICAgICBbb3RoZXIgb3B0aW9uc10KKworICAgICAgSXQgc2hvdWxkICBiZSBub3RlZCB0aGF0IGAtLWhvc3Q9PHN5c3RlbT4nICBzcGVjaWZpZXMgdGhlIHN5c3RlbQorICAgICAgd2hlcmUgdGhlIGJ1aWx0IGJpbmFyaWVzIHdpbGwgIGJlIGV4ZWN1dGVkLCBub3QgdGhlIHN5c3RlbSB3aGVyZQorICAgICAgdGhlIGJ1aWxkIGFjdHVhbGx5IGhhcHBlbnMuICAgT2xkZXIgdmVyc2lvbnMgb2YgR05VIGF1dG9jb25mIHVzZQorICAgICAgdGhlIG9wdGlvbiAgcGFpciBgLS1ob3N0PScgYW5kIGAtLXRhcmdldD0nLiAgVGhpcyAgaXMgYnJva2VuIGFuZAorICAgICAgZG9lc24ndCB3b3JrLiAgU2ltaWxhcmx5LCBhbiBleHBsaWNpdCBDQyBzcGVjaWZpY2F0aW9uIGxpa2UKKworICAgICAgICBlbnYgQ0M9bWlwcy1pcDIyLWxpbnV4LWdjYyAuL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgIyBCQUQKKworICAgICAgb3IKKworICAgICAgICBlbnYgQ0M9L3Vzci9sb2NhbC9taXBzLWlwMjItbGludXgvYmluL2djYyAuL2NvbmZpZ3VyZSAgIyBCQUQKKworICAgICAgZG9lc24ndCAgIHdvcmsgIGVpdGhlcjsgIHN1Y2ggICBhICBjb25maWd1cmF0aW9uICAgY29uZnVzZXMgIHRoZQorICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0IHdoaWxlICB0cnlpbmcgdG8gZmluZCB0aGUgY3Jvc3MgIGFuZCBuYXRpdmUgQworICAgICAgY29tcGlsZXJzLgorCisKKyAgICAyLjIuIFRoZSBwcmVmaXggdG8gaW5zdGFsbCBGcmVlVHlwZTIKKworICAgICAgU2V0dGluZyBgLS1wcmVmaXg9PHByZWZpeD4nICBwcm9wZXJseSBpcyBpbXBvcnRhbnQuICAgVGhlIHByZWZpeAorICAgICAgdG8gIGluc3RhbGwgIEZyZWVUeXBlMiAgaXMgd3JpdHRlbiAgaW50byAgdGhlICBgZnJlZXR5cGUtY29uZmlnJworICAgICAgc2NyaXB0IGFuZCBgZnJlZXR5cGUyLnBjJyBjb25maWd1cmF0aW9uIGZpbGUuCisKKyAgICAgIElmICB0aGUgYnVpbHQgIEZyZWVUeXBlICAyIGxpYnJhcnkgIGlzICB1c2VkIGFzICBhICBwYXJ0IG9mICB0aGUKKyAgICAgIGNyb3NzLWJ1aWxkaW5nIHN5c3RlbSwgIHRoZSBwcmVmaXggIGlzIGV4cGVjdGVkIHRvICBiZSBkaWZmZXJlbnQKKyAgICAgIGZyb20gIHRoZSBzZWxmLWJ1aWxkaW5nICBzeXN0ZW0uICBGb3IgIGV4YW1wbGUsIGEgIGNvbmZpZ3VyYXRpb24KKyAgICAgIHdpdGggICBgLS1wcmVmaXg9L3Vzci9sb2NhbCcgICBpbnN0YWxscyAgICBiaW5hcmllcyAgIGludG8gICB0aGUKKyAgICAgIHN5c3RlbS13aWRlIGAvdXNyL2xvY2FsJyBkaXJlY3RvcnksIHdoaWNoIHRoZW4gY2FuJ3QgYmUgZXhlY3V0ZWQKKyAgICAgIGR1ZSAgdG8gdGhlICBpbmNvcnJlY3QgYXJjaGl0ZWN0dXJlLiAgIFRoaXMgY2F1c2VzICBjb25mdXNpb24gaW4KKyAgICAgIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGFwcGxpY2F0aW9ucyAgdGhhdCB1c2UgRnJlZVR5cGUyLiAgSW5zdGVhZCwKKyAgICAgIHVzZSBhIHByZWZpeCAgdG8gaW5zdGFsbCB0aGUgY3Jvc3MtYnVpbGQgaW50byAgYSBzZXBhcmF0ZSBzeXN0ZW0KKyAgICAgIHRyZWUsIGZvciBleGFtcGxlLCBgLS1wcmVmaXg9L3Vzci9sb2NhbC9taXBzLWlwMjItbGludXgvJy4KKworICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBidWlsdCAgRnJlZVR5cGUgMiBsaWJyYXJ5IGlzIHVzZWQgYXMgYQorICAgICAgcGFydCBvZiB0aGUgdGFyZ2V0IHN5c3RlbSwgIHRoZSBwcmVmaXggdG8gaW5zdGFsbCBzaG91bGQgcmVmbGVjdAorICAgICAgdGhlIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4KKworCisgICAgMi4zLiBMaWJyYXJ5IGRlcGVuZGVuY2llcworCisgICAgICBGcmVlVHlwZSBub3JtYWxseSBkZXBlbmRzIG9uIGV4dGVybmFsIGxpYnJhcmllcyBsaWtlIGBsaWJwbmcnIG9yCisgICAgICBgbGliaGFyZmJ1enonLiAgIFRoZSAgZWFzaWVzdCBjYXNlICBpcyAgdG8gIGRlYWN0aXZhdGUgYWxsICBzdWNoCisgICAgICBkZXBlbmRlbmNpZXMgIHVzaW5nIHRoZSAgYC0td2l0aG91dC1YWFgnIGNvbmZpZ3VyYXRpb24gIG9wdGlvbnMuCisgICAgICBIb3dldmVyLCBpZiB5b3UgIHdhbnQgdG8gdXNlIHRob3NlIGxpYnJhcmllcywgIHlvdSBzaG91bGQgZW5zdXJlCisgICAgICB0aGF0ICB0aGV5ICBhcmUgYXZhaWxhYmxlICBib3RoICBvbiAgdGhlICB0YXJnZXQgc3lzdGVtICBhbmQgIGFzCisgICAgICAoY3Jvc3MtY29tcGlsZWQpIGxpYnJhcmllcyBvbiB0aGUgYnVpbGQgc3lzdGVtLgorCisgICAgICBGcmVlVHlwZSB1c2VzICBgcGtnLWNvbmZpZycgdG8gZmluZCAgbW9zdCBvZiB0aGUgIGxpYnJhcmllczsgdGhlCisgICAgICBvdGhlciBsaWJyYXJpZXMgaXQgbGlua3MgdG8gIGFyZSBleHBlY3RlZCBpbiB0aGUgc3RhbmRhcmQgc3lzdGVtCisgICAgICBkaXJlY3Rvcmllcy4gICBTaW5jZSB0aGUgIGRlZmF1bHQgcGtnLWNvbmZpZydzICBtZXRhLWluZm9ybWF0aW9uCisgICAgICBmaWxlcyAobGlrZSBgaGFyZmJ1enoucGMnKSBvZiB0aGUgYnVpbGQgcGxhdGZvcm0gZG9uJ3Qgd29yaywgdXNlCisgICAgICBvbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBzb2x1dGlvbnMgYmVsb3cuCisKKyAgICAgICAgbyBVc2UgcGtnLWNvbmZpZydzIG1ldGEtaW5mb3JtYXRpb24gZmlsZXMgdGhhdCBhcmUgYWRqdXN0ZWQgdG8KKyAgICAgICAgICBjcm9zcy1jb21waWxlICBhbmQgIGNyb3NzLWxpbmsgIHdpdGggdGhlICB0YXJnZXQgIHBsYXRmb3JtJ3MKKyAgICAgICAgICBsaWJyYXJpZXMuICBNYWtlIHN1cmUgdGhvc2UgZmlsZXMgYXJlIGZvdW5kIGJlZm9yZSB0aGUgYnVpbGQKKyAgICAgICAgICBzeXN0ZW0ncyBkZWZhdWx0IGZpbGVzLiAgRXhhbXBsZToKKworICAgICAgICAgICAgLi9jb25maWd1cmUgXAorICAgICAgICAgICAgICAtLWJ1aWxkPWkzODYtdW5rbm93bi1mcmVlYnNkIFwKKyAgICAgICAgICAgICAgLS1ob3N0PW1pcHMtaXAyMi1saW51eGVsZiBcCisgICAgICAgICAgICAgIFBLR19DT05GSUdfTElCRElSPSIvdXNyL2xvY2FsL21pcHMtaXAyMi1saW51eC9saWIvcGtnY29uZmlnIiBcCisgICAgICAgICAgICAgIFtvdGhlciBvcHRpb25zXQorCisgICAgICAgICAgU2VlIHRoZSBtYW5wYWdlIG9mIGBwa2ctY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgIG8gU2V0IHZhcmlhYmxlcyBsaWtlIExJQlBOR19MSUJTICBhcyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gdGhlCisgICAgICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0LCBvdmVycmlkaW5nIHRoZSB2YWx1ZXMgYHBrZy1jb25maWcnIHdvdWxkCisgICAgICAgICAgcHJvdmlkZS4gIGBjb25maWd1cmUgLS1oZWxwJyBzaG93cyB0aGUgYXZhaWxhYmxlIGVudmlyb25tZW50CisgICAgICAgICAgdmFyaWFibGVzLiAgRXhhbXBsZToKKworICAgICAgICAgICAgLi9jb25maWd1cmUgXAorICAgICAgICAgICAgICAtLWJ1aWxkPWkzODYtdW5rbm93bi1mcmVlYnNkIFwKKyAgICAgICAgICAgICAgLS1ob3N0PW1pcHMtaXAyMi1saW51eGVsZiBcCisgICAgICAgICAgICAgIExJQlBOR19DRkxBR1M9Ii1JL3Vzci9sb2NhbC9taXBzLWlwMjItbGludXgvaW5jbHVkZSIgXAorICAgICAgICAgICAgICBMSUJQTkdfTElCUz0iLUwvdXNyL2xvY2FsL21pcHMtaXAyMi1saW51eC9saWIgLWxwbmcxMiIgXAorICAgICAgICAgICAgICBbb3RoZXIgb3B0aW9uc10KKworCisgIDMuIEJ1aWxkaW5nIGNvbW1hbmQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSWYgIHRoZSAgY29uZmlndXJhdGlvbiAgZmluaXNoZXMgc3VjY2Vzc2Z1bGx5LCAgaW52b2tpbmcgIEdOVSBtYWtlCisgICAgYnVpbGRzIEZyZWVUeXBlMi4gIEp1c3Qgc2F5CisKKyAgICAgIG1ha2UKKworICAgIG9yCisKKyAgICAgIGdtYWtlCisKKyAgICBkZXBlbmRpbmcgb24gdGhlIG5hbWUgdGhlIEdOVSBtYWtlIGJpbmFyeSBhY3R1YWxseSBoYXMuCisKKworICA0LiBJbnN0YWxsYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBTYXlpbmcKKworICAgICAgbWFrZSBpbnN0YWxsCisKKyAgICBhcyB1c3VhbCB0byBpbnN0YWxsIEZyZWVUeXBlMiBpbnRvIHRoZSBkaXJlY3RvcnkgdHJlZSBzcGVjaWZpZWQgYnkKKyAgICB0aGUgYXJndW1lbnQgb2YgdGhlIGAtLXByZWZpeCcgb3B0aW9uLgorCisgICAgQXMgbm90ZWQgaW4gc2VjdGlvbiAyLjIsICBGcmVlVHlwZTIgIGlzIHNvbWV0aW1lcyBjb25maWd1cmVkIHRvIGJlCisgICAgaW5zdGFsbGVkICBpbnRvIHRoZSAgc3lzdGVtIGRpcmVjdG9yeSAgb2YgdGhlICB0YXJnZXQgIHN5c3RlbSwgYW5kCisgICAgc2hvdWxkICBub3QgYmUgaW5zdGFsbGVkICBpbiB0aGUgIGNyb3NzLWJ1aWxkaW5nIHN5c3RlbS4gICBJbiBzdWNoCisgICAgY2FzZXMsIHRoZSAgbWFrZSB2YXJpYWJsZSBgREVTVERJUicgIGlzIHVzZWZ1bCB0byBjaGFuZ2UgIHRoZSByb290CisgICAgZGlyZWN0b3J5IGluIHRoZSBpbnN0YWxsYXRpb24uICBGb3IgZXhhbXBsZSwgYWZ0ZXIKKworICAgICAgbWFrZSBERVNURElSPS9tbnQvdGFyZ2V0X3N5c3RlbV9yb290LyBpbnN0YWxsCisKKyAgICB0aGUgYnVpbHQgRnJlZVR5cGUyIGxpYnJhcnkgZmlsZXMgYXJlIGluc3RhbGxlZCBpbnRvIHRoZSBkaXJlY3RvcnkKKyAgICBgL21udC90YXJnZXRfc3lzdGVtX3Jvb3QvPHByZWZpeF9pbl9jb25maWd1cmU+L2xpYicuCisKKworICA1LiBUT0RPCisgIC0tLS0tLS0KKworICAgIENyb3NzIGJ1aWxkaW5nIGJldHdlZW4gQ3lnd2luIChvciBNU3lzKSBhbmQgVW5peCBtdXN0IGJlIHRlc3RlZC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA2LTIwMTUgYnkKK3N1enVraSB0b3NoaXlhLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKKworVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLAorbW9kaWZpZWQsICBhbmQgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgdGVybXMgb2YgIHRoZSAgRnJlZVR5cGUgcHJvamVjdAorbGljZW5zZSwgIExJQ0VOU0UuVFhULiAgQnkgIGNvbnRpbnVpbmcgdG8gIHVzZSwgbW9kaWZ5LCAgb3IgZGlzdHJpYnV0ZQordGhpcyBmaWxlIHlvdSAgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkICB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZAorYW5kIGFjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIElOU1RBTEwuQ1JPU1MgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLkdOVSBiL2ZyZWV0eXBlLTIuNi9kb2NzL0lOU1RBTEwuR05VCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhN2MwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLkdOVQpAQCAtMCwwICsxLDE2MSBAQAorVGhpcyBkb2N1bWVudCBjb250YWlucyBpbnN0cnVjdGlvbnMgaG93ICB0byBidWlsZCB0aGUgRnJlZVR5cGUgbGlicmFyeQorb24gbm9uLVVuaXggc3lzdGVtcyB3aXRoICB0aGUgaGVscCBvZiBHTlUgTWFrZS4gIE5vdGUgIHRoYXQgaWYgeW91IGFyZQorcnVubmluZyAgQ3lnd2luICBvciAgTWluR1cvTVNZUyAgaW4gV2luZG93cywgIHlvdSAgc2hvdWxkICBmb2xsb3cgIHRoZQoraW5zdHJ1Y3Rpb25zIGluIHRoZSBmaWxlIGBJTlNUQUxMLlVOSVgnIGluc3RlYWQuCisKKworICBGcmVlVHlwZSAyIGluY2x1ZGVzIGEgcG93ZXJmdWwgYW5kIGZsZXhpYmxlIGJ1aWxkIHN5c3RlbSB0aGF0IGFsbG93cworICB5b3UgdG8gIGVhc2lseSBjb21waWxlIGl0IG9uICBhIGdyZWF0IHZhcmlldHkgb2YgIHBsYXRmb3JtcyBmcm9tIHRoZQorICBjb21tYW5kIGxpbmUuICBUbyBkbyBzbywganVzdCBmb2xsb3cgdGhlc2Ugc2ltcGxlIGluc3RydWN0aW9ucy4KKworICAxLiBJbnN0YWxsIEdOVSBNYWtlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEJlY2F1c2UgIEdOVSBNYWtlICBpcyAgdGhlICBvbmx5IE1ha2UgIHRvb2wgIHN1cHBvcnRlZCB0byAgY29tcGlsZQorICAgIEZyZWVUeXBlIDIsIHlvdSBzaG91bGQgaW5zdGFsbCBpdCBvbiB5b3VyIG1hY2hpbmUuCisKKyAgICBUaGUgRnJlZVR5cGUgMiBidWlsZCBzeXN0ZW0gcmVsaWVzIG9uIG1hbnkgZmVhdHVyZXMgc3BlY2lhbCB0byBHTlUKKyAgICBNYWtlLgorCisgICAgTkVBUkxZIEFMTCBPVEhFUiBNQUtFIFRPT0xTICBGQUlMLCBJTkNMVURJTkcgYEJTRCBNQUtFJywgU08gUkVBTExZCisgICAgSU5TVEFMTCBBIFJFQ0VOVCBWRVJTSU9OIE9GIEdOVSBNQUtFIE9OIFlPVVIgU1lTVEVNIQorCisgICAgTm90ZSB0aGF0ICBtYWtlKyssIGEgIG1ha2UgdG9vbCB3cml0dGVuICBpbiBQZXJsLCAgc3VwcG9ydHMgZW5vdWdoCisgICAgZmVhdHVyZXMgb2YgR05VIG1ha2UgdG8gY29tcGlsZSBGcmVlVHlwZS4gIFNlZQorCisgICAgICBodHRwOi8vbWFrZXBwLnNvdXJjZWZvcmdlLm5ldAorCisgICAgZm9yIG1vcmUgaW5mb3JtYXRpb247IHlvdSBuZWVkIHZlcnNpb24gMS4xOSBvciBuZXdlciwgYW5kIHlvdSBtdXN0CisgICAgcGFzcyBvcHRpb24gYC0tbm9yYy1zdWJzdGl0dXRpb24nLgorCisgICAgTWFrZSBzdXJlIHRoYXQgeW91IGFyZSBpbnZva2luZyBHTlUgTWFrZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ5CisgICAgdHlwaW5nIHNvbWV0aGluZyBsaWtlOgorCisgICAgICBtYWtlIC12CisKKyAgICB0byBkaXNwbGF5IGl0cyB2ZXJzaW9uIG51bWJlci4KKworICAgIFZFUlNJT04gMy44MCBPUiBORVdFUiBJUyBORUVERUQhCisKKworICAyLiBJbnZva2UgYG1ha2UnCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIEdvIHRvICB0aGUgcm9vdCAgZGlyZWN0b3J5IG9mIEZyZWVUeXBlICAyLCB0aGVuIHNpbXBseSAgaW52b2tlIEdOVQorICAgIE1ha2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgIFRoaXMgd2lsbCBsYXVuY2ggdGhlIEZyZWVUeXBlIDIgaG9zdAorICAgIHBsYXRmb3JtICBkZXRlY3Rpb24gcm91dGluZXMuICAgQSBzdW1tYXJ5ICB3aWxsIGJlICBkaXNwbGF5ZWQsIGZvcgorICAgIGV4YW1wbGUsIG9uIFdpbjMyLgorCisKKyAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBGcmVlVHlwZSBidWlsZCBzeXN0ZW0gLS0gYXV0b21hdGljIHN5c3RlbSBkZXRlY3Rpb24KKworICAgICAgVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgdXNlZDoKKworICAgICAgICBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MKKyAgICAgICAgY29tcGlsZXIgICAgICAgICAgICAgICAgICAgICBnY2MKKyAgICAgICAgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgICAgICAuXGJ1aWxkc1x3aW5kb3dzCisgICAgICAgIGNvbmZpZ3VyYXRpb24gcnVsZXMgICAgICAgICAgLlxidWlsZHNcd2luZG93c1x3MzItZ2NjLm1rCisKKyAgICAgIElmIHRoaXMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB5b3VyIHN5c3RlbSBvciBzZXR0aW5ncyBwbGVhc2UKKyAgICAgIHJlbW92ZSB0aGUgZmlsZSAnY29uZmlnLm1rJyBmcm9tIHRoaXMgZGlyZWN0b3J5IHRoZW4gcmVhZCB0aGUKKyAgICAgIElOU1RBTEwgZmlsZSBmb3IgaGVscC4KKworICAgICAgT3RoZXJ3aXNlLCBzaW1wbHkgdHlwZSAnbWFrZScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnkKKyAgICAgIG9yICdtYWtlIHJlZmRvYycgdG8gYnVpbGQgdGhlIEFQSSByZWZlcmVuY2UgKHRoZSBsYXR0ZXIgbmVlZHMKKyAgICAgIHB5dGhvbikuCisgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworICAgIElmIHRoZSBkZXRlY3RlZCBzZXR0aW5ncyBjb3JyZXNwb25kIHRvIHlvdXIgcGxhdGZvcm0gYW5kIGNvbXBpbGVyLAorICAgIHNraXAgdG8gc3RlcCA1LiAgTm90ZSB0aGF0IGlmIHlvdXIgcGxhdGZvcm0gaXMgY29tcGxldGVseSBhbGllbiB0bworICAgIHRoZSBidWlsZCBzeXN0ZW0sIHRoZSBkZXRlY3RlZCBwbGF0Zm9ybSB3aWxsIGJlIGBhbnNpJy4KKworCisgIDMuIENvbmZpZ3VyZSB0aGUgYnVpbGQgc3lzdGVtIGZvciBhIGRpZmZlcmVudCBjb21waWxlcgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIElmIHRoZSBidWlsZCBzeXN0ZW0gY29ycmVjdGx5IGRldGVjdGVkIHlvdXIgcGxhdGZvcm0sIGJ1dCB5b3Ugd2FudAorICAgIHRvIHVzZSBhIGRpZmZlcmVudCBjb21waWxlciAgdGhhbiB0aGUgb25lIHNwZWNpZmllZCBpbiB0aGUgc3VtbWFyeQorICAgIChmb3IgbW9zdCBwbGF0Zm9ybXMsIGdjYyBpcyB0aGUgZGVmYXVsdCBjb21waWxlciksIGludm9rZSBHTlUgTWFrZQorICAgIHdpdGgKKworICAgICAgbWFrZSBzZXR1cCA8Y29tcGlsZXI+CisKKyAgICBFeGFtcGxlczoKKworICAgICAgdG8gdXNlIFZpc3VhbCBDKysgb24gV2luMzIsIHR5cGU6ICBgbWFrZSBzZXR1cCB2aXN1YWxjJworICAgICAgdG8gdXNlIEJvcmxhbmQgQysrIG9uIFdpbjMyLCB0eXBlICBgbWFrZSBzZXR1cCBiY2MzMicKKyAgICAgIHRvIHVzZSBXYXRjb20gQysrIG9uIFdpbjMyLCB0eXBlICAgYG1ha2Ugc2V0dXAgd2F0Y29tJworICAgICAgdG8gdXNlIEludGVsIEMrKyBvbiBXaW4zMiwgdHlwZSAgICBgbWFrZSBzZXR1cCBpbnRlbGMnCisgICAgICB0byB1c2UgTENDLVdpbjMyIG9uIFdpbjMyLCB0eXBlOiAgIGBtYWtlIHNldHVwIGxjYycKKyAgICAgIHRvIHVzZSBXYXRjb20gQysrIG9uIE9TLzIsIHR5cGUgICAgYG1ha2Ugc2V0dXAgd2F0Y29tJworICAgICAgdG8gdXNlIFZpc3VhbEFnZSBDKysgb24gT1MvMiwgdHlwZSBgbWFrZSBzZXR1cCB2aXN1YWxhZ2UnCisKKyAgICBUaGUgIDxjb21waWxlcj4gbmFtZSB0byAgdXNlIGlzICBwbGF0Zm9ybS1kZXBlbmRlbnQuICBUaGUgIGxpc3Qgb2YKKyAgICBhdmFpbGFibGUgIGNvbXBpbGVycyBmb3IgIHlvdXIgIHN5c3RlbSBpcyAgYXZhaWxhYmxlICBpbiB0aGUgIGZpbGUKKyAgICBgYnVpbGRzLzxzeXN0ZW0+L2RldGVjdC5taycuCisKKyAgICBJZiB5b3UgIGFyZSBzYXRpc2ZpZWQgIGJ5IHRoZSBuZXcgIGNvbmZpZ3VyYXRpb24gc3VtbWFyeSwgIHNraXAgdG8KKyAgICBzdGVwIDUuCisKKworICA0LiBDb25maWd1cmUgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgYW4gdW5rbm93biBwbGF0Zm9ybS9jb21waWxlcgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIGF1dG8tZGV0ZWN0aW9uL3NldHVwICBwaGFzZSBvZiB0aGUgYnVpbGQgc3lzdGVtICBjb3BpZXMgYSBmaWxlCisgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVuZGVyIHRoZSBuYW1lIGBjb25maWcubWsnLgorCisgICAgRm9yICAgIGV4YW1wbGUsICAgIG9uICAgIE9TLzIrZ2NjLCAgICBpdCAgIHdvdWxkICAgIHNpbXBseSAgICBjb3B5CisgICAgYGJ1aWxkcy9vczIvb3MyLWdjYy5taycgdG8gYC4vY29uZmlnLm1rJy4KKworICAgIElmIGZvciAgc29tZSByZWFzb24geW91ciAgcGxhdGZvcm0gaXNuJ3QgY29ycmVjdGx5ICBkZXRlY3RlZCwgY29weQorICAgIG1hbnVhbGx5IHRoZSBjb25maWd1cmF0aW9uIHN1Yi1tYWtlZmlsZSB0byBgLi9jb25maWcubWsnIGFuZCBnbyB0bworICAgIHN0ZXAgNS4KKworICAgIE5vdGUgIHRoYXQgIHRoaXMgZmlsZSAgaXMgIGEgIHN1Yi1NYWtlZmlsZSAgdXNlZCB0byAgc3BlY2lmeSAgTWFrZQorICAgIHZhcmlhYmxlcyAgZm9yIGNvbXBpbGVyICBhbmQgbGlua2VyICBpbnZvY2F0aW9uIGR1cmluZyAgdGhlIGJ1aWxkLgorICAgIFlvdSBjYW4gIGVhc2lseSBjcmVhdGUgeW91ciBvd24gIHZlcnNpb24gZnJvbSBvbmUgIG9mIHRoZSBleGlzdGluZworICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsICB0aGVuIGNvcHkgaXQgdG8gdGhlICBjdXJyZW50IGRpcmVjdG9yeSB1bmRlcgorICAgIHRoZSBuYW1lIGAuL2NvbmZpZy5taycuCisKKworICA1LiBCdWlsZCB0aGUgbGlicmFyeQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIGF1dG8tZGV0ZWN0aW9uL3NldHVwICBwaGFzZSBzaG91bGQgaGF2ZSAgY29waWVkIGEgZmlsZSAgaW4gdGhlCisgICAgY3VycmVudCAgZGlyZWN0b3J5LCAgY2FsbGVkICBgLi9jb25maWcubWsnLiAgIFRoaXMgIGZpbGUgIGNvbnRhaW5zCisgICAgZGVmaW5pdGlvbnMgb2YgdmFyaW91cyBNYWtlICB2YXJpYWJsZXMgdXNlZCB0byBpbnZva2UgdGhlIGNvbXBpbGVyCisgICAgYW5kIGxpbmtlciBkdXJpbmcgdGhlIGJ1aWxkLiAgW0l0IGhhcyBhbHNvIGdlbmVyYXRlZCBhIGZpbGUgY2FsbGVkCisgICAgYGZ0bW9kdWxlLmgnICAgaW4gIHRoZSAgb2JqZWN0cyAgIGRpcmVjdG9yeSAgKHdoaWNoICAgaXMgIG5vcm1hbGx5CisgICAgYDx0b3BsZXZlbD4vb2Jqcy8nKTsgIHBsZWFzZSByZWFkICB0aGUgIGZpbGUgYGRvY3MvQ1VTVE9NSVpFJyAgZm9yCisgICAgY3VzdG9taXphdGlvbiBvZiBGcmVlVHlwZS5dCisKKyAgICBUbyAgbGF1bmNoICB0aGUgYnVpbGQsICBzaW1wbHkgIGludm9rZSAgR05VICBNYWtlIGFnYWluOiAgVGhlICB0b3AKKyAgICBNYWtlZmlsZSB3aWxsIGRldGVjdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBydW4gdGhlIGJ1aWxkIHdpdGgKKyAgICBpdC4KKworCisgIEZpbmFsIG5vdGUKKworICAgIFRoZSBhYm92ZSBpbnN0cnVjdGlvbnMgYnVpbGQgYSAgX3N0YXRpY2FsbHlfIGxpbmtlZCBsaWJyYXJ5IG9mIHRoZQorICAgIGZvbnQgZW5naW5lIGluIHRoZSBgb2JqcycgZGlyZWN0b3J5LiAgIE9uIFdpbmRvd3MsIHlvdSBjYW4gYnVpbGQgYQorICAgIERMTCAgZWl0aGVyICB3aXRoICBNaW5HVyAgKHdpdGhpbiBhbiAgTVNZUyAgc2hlbGwsICBmb2xsb3dpbmcgIHRoZQorICAgIGluc3RydWN0aW9ucyBpbiBgSU5TVEFMTC5VTklYJyksIG9yIHlvdSAgdXNlIG9uZSBvZiB0aGUgVmlzdWFsIEMrKworICAgIHByb2plY3QgZmlsZXM7IHNlZSAgdGhlICBzdWJkaXJlY3RvcmllcyAgb2YgYGJ1aWxkcy93aW5kb3dzJy4gIEZvcgorICAgIGV2ZXJ5dGhpbmcgZWxzZSwgIHlvdSBhcmUgb24gIHlvdXIgb3duLCAgYW5kIHlvdSBtaWdodCAgZm9sbG93IHRoZQorICAgIGluc3RydWN0aW9ucyBpbiBgSU5TVEFMTC5BTlknIHRvIGNyZWF0ZSB5b3VyIG93biBNYWtlZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDMtMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCittb2RpZmllZCwgIGFuZCBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICB0ZXJtcyBvZiAgdGhlICBGcmVlVHlwZSBwcm9qZWN0CitsaWNlbnNlLCAgTElDRU5TRS5UWFQuICBCeSAgY29udGludWluZyB0byAgdXNlLCBtb2RpZnksICBvciBkaXN0cmlidXRlCit0aGlzIGZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kCithbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgSU5TVEFMTC5HTlUgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLk1BQyBiL2ZyZWV0eXBlLTIuNi9kb2NzL0lOU1RBTEwuTUFDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmIwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLk1BQwpAQCAtMCwwICsxLDMyIEBACitQbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgIGluIElOU1RBTEwuVU5JWCB0byBpbnN0YWxsIEZyZWVUeXBlIG9uCitNYWMgT1MgWC4KKworQ3VycmVudGx5IEZyZWVUeXBlMiBmdW5jdGlvbnMgYmFzZWQgb24gc29tZSBkZXByZWNhdGVkIENhcmJvbiBBUElzCityZXR1cm4gRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZSBhbHdheXMsIGV2ZW4gaWYgRnJlZVR5cGUyIGlzCitjb25maWd1cmVkIGFuZCBidWlsdCBvbiB0aGUgc3lzdGVtIHRoYXQgZGVwcmVjYXRlZCBDYXJib24gQVBJcyBhcmUKK2F2YWlsYWJsZS4gVG8gZW5hYmxlIGRlcHJlY2F0ZWQgRnJlZVR5cGUyIGZ1bmN0aW9ucyBhcyBmYXIgYXMgcG9zc2libGUsCityZXBsYWNlIHNyYy9iYXNlL2Z0bWFjLmMgYnkgYnVpbGRzL21hYy9mdG1hYy5jLgorCitTdGFydGluZyB3aXRoIE1hYyBPUyBYIDEwLjUsIGdjYyBkZWZhdWx0cyB0aGUgZGVwbG95bWVudCB0YXJnZXQKK3RvIDEwLjUuIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIE1hYyBPUyBYLCB0aGlzIGRlZmF1bHRlZCB0byAxMC4xLgorSWYgeW91IHdhbnQgeW91ciBidWlsdCBiaW5hcmllcyB0byBydW4gb25seSBvbiAxMC41LCB0aGlzIGNoYW5nZQorZG9lcyBub3QgY29uY2VybiB5b3UuICBJZiB5b3Ugd2FudCB0aGVtIHRvIGFsc28gcnVuIG9uIG9sZGVyIHZlcnNpb25zCitvZiBNYWMgT1MgWCwgdGhlbiB5b3UgbXVzdCBlaXRoZXIgc2V0IHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKK2Vudmlyb25tZW50IHZhcmlhYmxlIG9yIHBhc3MgLW1tYWNvc3gtdmVyc2lvbi1taW4gdG8gZ2NjLiBZb3Ugc2hvdWxkCitzcGVjaWZ5IHRoZSBvbGRlc3QgdmVyc2lvbiBvZiBNYWMgT1MgeW91IHdhbnQgdGhlIGNvZGUgdG8gcnVuIG9uLgorRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgQm91cm5lIHNoZWxsOgorCisJZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC4yCisKK29yLCBpZiB5b3UgdXNlIEMgc2hlbGw6CisKKwlzZXRlbnYgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIDEwLjIKKworQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHBhc3MgIi1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjIiIHRvIGdjYy4KKworSGVyZSB0aGUgbnVtYmVyIDEwLjIgaXMgdGhlIGxvd2VzdCB2ZXJzaW9uIHRoYXQgdGhlIGJ1aWx0IGJpbmFyaWVzCitjYW4gcnVuIG9uLiBJbiB0aGUgY2FzZXMgaW4gYWJvdmUsIHRoZSBidWlsdCBiaW5hcmllcyB3aWxsIHJ1biBvbgorTWFjIE9TIFggMTAuMiBhbmQgbGF0ZXIsIGJ1dCBfbm90XyBlYXJsaWVyLiBJZiB5b3Ugd2FudCB0byBydW4gb24KK2VhcmxpZXIsIHlvdSBoYXZlIHRvIHNldCBsb3dlciB2ZXJzaW9uLCBlLmcuIDEwLjAuCisKK0ZvciBjbGFzc2ljIE1hYyBPUyAoTWFjIE9TIDcsIDgsIDkpIHBsZWFzZSByZWZlciB0byBidWlsZHMvbWFjL1JFQURNRS4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0lOU1RBTEwuVU5JWCBiL2ZyZWV0eXBlLTIuNi9kb2NzL0lOU1RBTEwuVU5JWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFiMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5VTklYCkBAIC0wLDAgKzEsMTE1IEBACitUaGlzICBkb2N1bWVudCBjb250YWlucyAgaW5zdHJ1Y3Rpb25zICBvbiBob3cgIHRvICBidWlsZCB0aGUgIEZyZWVUeXBlCitsaWJyYXJ5IG9uIFVuaXggIHN5c3RlbXMuICBUaGlzIGFsc28gd29ya3MgZm9yICBlbXVsYXRpb25zIGxpa2UgQ3lnd2luCitvciBNU3lzIG9uIFdpbjMyOgorCisKKyAgMS4gRW5zdXJlIHRoYXQgeW91IGFyZSB1c2luZyBHTlUgTWFrZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgRnJlZVR5cGUgYnVpbGQgc3lzdGVtICBfZXhjbHVzaXZlbHlfIHdvcmtzIHdpdGggR05VIE1ha2UuICBZb3UKKyAgICB3aWxsICBub3QgYmUgIGFibGUgdG8gIGNvbXBpbGUgdGhlICBsaWJyYXJ5IHdpdGggIHRoZSBpbnN0cnVjdGlvbnMKKyAgICBiZWxvdyB1c2luZyBhbnkgb3RoZXIgYWx0ZXJuYXRpdmUgKGluY2x1ZGluZyBCU0QgTWFrZSkuCisKKyAgICBDaGVjayB0aGF0IHlvdSBoYXZlIEdOVSBtYWtlIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQ6CisKKyAgICAgICBtYWtlIC12CisKKyAgICBUaGlzIHNob3VsZCBkdW1wIHNvbWUgdGV4dCB0aGF0IGJlZ2lucyB3aXRoOgorCisgICAgICAgR05VIE1ha2UgIDx2ZXJzaW9uIG51bWJlcj4KKyAgICAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICAgTm90ZSB0aGF0IHZlcnNpb24gIDMuODAgb3IgaGlnaGVyIGlzICpyZXF1aXJlZCogb3IgdGhlICBidWlsZCB3aWxsCisgICAgZmFpbC4KKworICAgIEl0IGlzIGFsc28gZmluZSB0byBoYXZlIEdOVSBNYWtlIHVuZGVyIGFub3RoZXIgbmFtZSAoZS5nLiAnZ21ha2UnKQorICAgIGlmIHlvdSB1c2UgdGhlIE1BS0UgdmFyaWFibGUgYXMgZGVzY3JpYmVkIGJlbG93LgorCisgICAgQXMgIGEgIHNwZWNpYWwgZXhjZXB0aW9uLCAgJ21ha2VwcCcgIGNhbiAgYWxzbyAgYmUgdXNlZCAgdG8gIGJ1aWxkCisgICAgRnJlZVR5cGUgMi4gIFNlZSB0aGUgZmlsZSBkb2NzL01BS0VQUCBmb3IgZGV0YWlscy4KKworCisgIDIuIFJlZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaWYgbmVlZGVkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIG9ubHkgYXBwbGllcyBpZiB5b3UgIGFyZSBidWlsZGluZyBhIGdpdCBzbmFwc2hvdCBvciBjaGVja291dCwKKyAgICAqbm90KiBpZiB5b3UgZ3JhYmJlZCB0aGUgc291cmNlcyBvZiBhbiBvZmZpY2lhbCByZWxlYXNlLgorCisgICAgWW91ICBuZWVkICB0byBpbnZva2UgIHRoZSAgYGF1dG9nZW4uc2gnICBzY3JpcHQgIGluIHRoZSAgdG9wLWxldmVsCisgICAgZGlyZWN0b3J5ICBpbiBvcmRlciAgdG8gIGNyZWF0ZSB0aGUgIGBjb25maWd1cmUnICBzY3JpcHQgZm9yICB5b3VyCisgICAgcGxhdGZvcm0uICBOb3JtYWxseSwgdGhpcyBzaW1wbHkgbWVhbnMgdHlwaW5nOgorCisgICAgICBzaCBhdXRvZ2VuLnNoCisKKyAgICBJbiBjYXNlIG9mIHByb2JsZW1zLCB5b3UgIG1heSBuZWVkIHRvIGluc3RhbGwgb3IgdXBncmFkZSBBdXRvbWFrZSwKKyAgICBBdXRvY29uZiBvciAgTGlidG9vbC4gIFNlZSAgUkVBRE1FLmdpdCBpbiB0aGUgIHRvcC1sZXZlbCBkaXJlY3RvcnkKKyAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisgIDMuIEJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBsaWJyYXJ5CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgZm9sbG93aW5nICBzaG91bGQgd29yayAgb24gYWxsIFVuaXggIHN5c3RlbXMgd2hlcmUgIHRoZSBgbWFrZScKKyAgICBjb21tYW5kIGludm9rZXMgR05VIE1ha2U6CisKKyAgICAgIC4vY29uZmlndXJlIFtvcHRpb25zXQorICAgICAgbWFrZQorICAgICAgbWFrZSBpbnN0YWxsICAgICAgICAgICAoYXMgcm9vdCkKKworICAgIFRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwYXRoICBpcyBgL3Vzci9sb2NhbCcuICBJdCBjYW4gYmUgY2hhbmdlZAorICAgIHdpdGggdGhlIGAtLXByZWZpeD08cGF0aD4nIG9wdGlvbi4gIEV4YW1wbGU6CisKKyAgICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS91c3IKKworICAgIFdoZW4gdXNpbmcgIGEgZGlmZmVyZW50IGNvbW1hbmQgIHRvIGludm9rZSBHTlUgTWFrZSwgIHVzZSB0aGUgTUFLRQorICAgIHZhcmlhYmxlLiAgRm9yIGV4YW1wbGUsICBpZiBgZ21ha2UnIGlzIHRoZSBjb21tYW5kICB0byB1c2Ugb24geW91cgorICAgIHN5c3RlbSwgZG8gc29tZXRoaW5nIGxpa2U6CisKKyAgICAgICBNQUtFPWdtYWtlIC4vY29uZmlndXJlIFtvcHRpb25zXQorICAgICAgIGdtYWtlCisgICAgICAgZ21ha2UgaW5zdGFsbCAgICAgICAgICAgIChhcyByb290KQorCisgICAgSWYgIHRoaXMgc3RpbGwgZG9lc24ndCAgd29yaywgdGhlcmUgIG11c3QgYmUgIGEgcHJvYmxlbSAgd2l0aCB5b3VyCisgICAgc3lzdGVtIChlLmcuLCB5b3UgYXJlIHVzaW5nIGEgdmVyeSBvbGQgdmVyc2lvbiBvZiBHTlUgTWFrZSkuCisKKyAgICBJdCAgaXMgcG9zc2libGUgIHRvICBjb21waWxlIEZyZWVUeXBlICBpbiAgYSBkaWZmZXJlbnQgIGRpcmVjdG9yeS4KKyAgICBBc3N1bWluZyB0aGUgRnJlZVR5cGUgc291cmNlICBmaWxlcyBpbiBkaXJlY3RvcnkgYC9zcmMvZnJlZXR5cGUnIGEKKyAgICBjb21waWxhdGlvbiBpbiBkaXJlY3RvcnkgYGZvbycgd29ya3MgYXMgZm9sbG93czoKKworICAgICAgY2QgZm9vCisgICAgICAvc3JjL2ZyZWV0eXBlL2NvbmZpZ3VyZSBbb3B0aW9uc10KKyAgICAgIG1ha2UKKyAgICAgIG1ha2UgaW5zdGFsbAorCisKKyAgMy4xIEludGVyZGVwZW5kZW5jeSB3aXRoIEhhcmZCdXp6CisgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisgICAgTm90ZSB0aGF0IHRoZXJlICBpcyBhIGNoaWNrZW4tYW5kLWVnZyBwcm9ibGVtICBjdXJyZW50bHkgc2luY2UgdGhlCisgICAgSGFyZkJ1enogbGlicmFyeSAgKHVzZWQgYnkgdGhlICBhdXRvLWhpbnRlciB0byBpbXByb3ZlICBzdXBwb3J0IG9mCisgICAgT3BlblR5cGUgIGZvbnRzKSAgZGVwZW5kcyBvbiAgRnJlZVR5cGUsICB3aGljaCAgY2FuIGJlICBzb2x2ZWQgIGFzCisgICAgZm9sbG93cyBpbiBjYXNlIEhhcmZCdXp6IGlzIG5vdCB5ZXQgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgorCisgICAgMS4gQ2FsbCAgICBGcmVlVHlwZSdzICAgICBgY29uZmlndXJlJyAgICBzY3JpcHQgICAgIHdpdGggICAgb3B0aW9uCisgICAgICAgYC0td2l0aG91dC1oYXJmYnV6eicsIHRoZW4gY29tcGlsZSBhbmQgaW5zdGFsbCBGcmVlVHlwZS4KKworICAgIDIuIENvbXBpbGUgYW5kIGluc3RhbGwgSGFyZkJ1enouCisKKyAgICAzLiBDYWxsICAgIEZyZWVUeXBlJ3MgICAgYGNvbmZpZ3VyZScgICBzY3JpcHQgICAgd2l0aG91dCAgICBvcHRpb24KKyAgICAgICBgLS13aXRob3V0LWhhcmZidXp6JyAoYWZ0ZXIgIGV4ZWN1dGluZyBgbWFrZSAgZGlzdGNsZWFuJyksIHRoZW4KKyAgICAgICBjb21waWxlIGFuZCBpbnN0YWxsIEZyZWVUeXBlIGFnYWluLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDMtMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCittb2RpZmllZCwgIGFuZCBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICB0ZXJtcyBvZiAgdGhlICBGcmVlVHlwZSBwcm9qZWN0CitsaWNlbnNlLCAgTElDRU5TRS5UWFQuICBCeSAgY29udGludWluZyB0byAgdXNlLCBtb2RpZnksICBvciBkaXN0cmlidXRlCit0aGlzIGZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kCithbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgSU5TVEFMTC5VTklYIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5WTVMgYi9mcmVldHlwZS0yLjYvZG9jcy9JTlNUQUxMLlZNUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEzMjNlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvSU5TVEFMTC5WTVMKQEAgLTAsMCArMSw2MiBAQAorSG93IHRvIGJ1aWxkIHRoZSBmcmVldHlwZTIgbGlicmFyeSBvbiBWTVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGFjdHVhbGx5IHZlcnkgIHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnN0YWxsIHRoZSBGcmVldHlwZTIgbGlicmFyeS4KK0p1c3QgIGV4ZWN1dGUgdm1zX21ha2UuY29tIGZyb20gIHRoZSB0b3BsZXZlbCAgZGlyZWN0b3J5IHRvICBidWlsZCB0aGUKK2xpYnJhcnkuICBUaGlzIHByb2NlZHVyZSBjdXJyZW50bHkgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK0RFQlVHCisgIEJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggZGVidWcgaW5mb3JtYXRpb24gYW5kIHdpdGhvdXQgb3B0aW1pemF0aW9uLgorCitsb3B0cz08dmFsdWU+CisgIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgbGluayBjb21tYW5kIGUuZy4gbG9wdHM9L3RyYWNlYmFjaworCitjY29wdD08dmFsdWU+CisgIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciBlLmcuIGNjb3B0PS9mbG9hdD1pZWVlCisKK0luIGNhc2UgeW91IGRpZCBkb3dubG9hZCB0aGUgZGVtb3MsIHBsYWNlIHRoZW0gaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkKK3NoYXJpbmcgdGhlIHNhbWUgdG9wbGV2ZWwgYXMgdGhlIGRpcmVjdG9yeSBvZiBGcmVldHlwZTIgYW5kIGZvbGxvdyB0aGUKK3NhbWUgIGluc3RydWN0aW9ucyBhcyAgYWJvdmUgIGZvciAgdGhlIGRlbW9zICBmcm9tICB0aGVyZS4gIFRoZSAgYnVpbGQKK3Byb2Nlc3MgcmVsaWVzIG9uIHRoaXMgdG8gZmlndXJlIHRoZSBsb2NhdGlvbiBvZiB0aGUgRnJlZXR5cGUyIGluY2x1ZGUKK2ZpbGVzLgorCisKK1RvIHJlYnVpbGQgIHRoZSAgc291cmNlcyBpdCBpcyBuZWNlc3NhcnkgdG8gIGhhdmUgTU1TL01NSyBpbnN0YWxsZWQgb24KK3RoZSBzeXN0ZW0uCisKK1RoZSBsaWJyYXJ5IGlzIGF2YWlsYWJsZSBpbiB0aGUgZGlyZWN0b3J5CisKKyAgWy5MSUJdCisKK1RvICBjb21waWxlIGFwcGxpY2F0aW9ucyAgdXNpbmcgIEZyZWVUeXBlICAyIHlvdSAgaGF2ZSAgdG8gZGVmaW5lICB0aGUKK2xvZ2ljYWwgRlJFRVRZUEUgcG9pbnRpbmcgdG8gdGhlIGRpcmVjdG9yeQorCisgIFsuSU5DTFVERS5GUkVFVFlQRV0KKworaS5lLiwgaWYgIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggIHRoaXMgSU5TVEFMTC5WTVMgZmlsZSAgaXMgbG9jYXRlZCBpcworJGRpc2s6W2ZyZWV0eXBlXSB0aGVuIGRlZmluZSB0aGUgbG9naWNhbCB3aXRoCisKKyAgZGVmaW5lIGZyZWV0eXBlICRkaXNrOltmcmVldHlwZS5pbmNsdWRlLmZyZWV0eXBlXQorCitUaGlzIHZlcnNpb24gaGFzICBiZWVuIHRlc3RlZCB3aXRoIENvbXBhcSBDICBWNi4yLTAwNiBvbiBPcGVuVk1TIEFscGhhCitWNy4yLTEuCisKKworICBBbnkgcHJvYmxlbXMgY2FuIGJlIHJlcG9ydGVkIHRvCisKKyAgICBKb3VrIEphbnNlbiA8am91a2pAaHJlbS5zdG0udHVkZWxmdC5ubD4gb3IKKyAgICBNYXJ0aW4gUC5KLiBaaW5zZXIgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDAwLTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyAgZmlsZSAgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCBtYXkgIG9ubHkgYmUgIHVzZWQsCittb2RpZmllZCwgIGFuZCAgZGlzdHJpYnV0ZWQgIHVuZGVyICB0aGUgIHRlcm1zIG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QKK2xpY2Vuc2UsIExJQ0VOU0UuVFhULiAgIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcworZmlsZSB5b3UgIGluZGljYXRlIHRoYXQgIHlvdSBoYXZlICByZWFkIHRoZSAgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCAgYW5kCithY2NlcHQgaXQgZnVsbHkuCisKKworLS0tIGVuZCBvZiBJTlNUQUxMLlZNUyAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL0xJQ0VOU0UuVFhUIGIvZnJlZXR5cGUtMi42L2RvY3MvTElDRU5TRS5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkYzM0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL0xJQ0VOU0UuVFhUCkBAIC0wLDAgKzEsMzcgQEAKKworVGhlICBGcmVlVHlwZSAyICBmb250ICBlbmdpbmUgaXMgIGNvcHlyaWdodGVkICB3b3JrIGFuZCAgY2Fubm90IGJlICB1c2VkCitsZWdhbGx5ICB3aXRob3V0IGEgIHNvZnR3YXJlIGxpY2Vuc2UuICAgSW4gIG9yZGVyIHRvICBtYWtlIHRoaXMgIHByb2plY3QKK3VzYWJsZSAgdG8gYSB2YXN0ICBtYWpvcml0eSBvZiAgZGV2ZWxvcGVycywgd2UgIGRpc3RyaWJ1dGUgaXQgIHVuZGVyIHR3bworbXV0dWFsbHkgZXhjbHVzaXZlIG9wZW4tc291cmNlIGxpY2Vuc2VzLgorCitUaGlzIG1lYW5zICB0aGF0ICp5b3UqIG11c3QgY2hvb3NlICAqb25lKiBvZiB0aGUgIHR3byBsaWNlbnNlcyBkZXNjcmliZWQKK2JlbG93LCB0aGVuIG9iZXkgIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgd2hlbiAgdXNpbmcgRnJlZVR5cGUgMiBpbgorYW55IG9mIHlvdXIgcHJvamVjdHMgb3IgcHJvZHVjdHMuCisKKyAgLSBUaGUgRnJlZVR5cGUgTGljZW5zZSwgZm91bmQgaW4gIHRoZSBmaWxlIGBGVEwuVFhUJywgd2hpY2ggaXMgc2ltaWxhcgorICAgIHRvIHRoZSBvcmlnaW5hbCBCU0QgbGljZW5zZSAqd2l0aCogYW4gYWR2ZXJ0aXNpbmcgY2xhdXNlIHRoYXQgZm9yY2VzCisgICAgeW91ICB0byAgZXhwbGljaXRseSBjaXRlICB0aGUgIEZyZWVUeXBlICBwcm9qZWN0ICBpbiB5b3VyICBwcm9kdWN0J3MKKyAgICBkb2N1bWVudGF0aW9uLiAgQWxsICBkZXRhaWxzIGFyZSBpbiB0aGUgbGljZW5zZSAgZmlsZS4gIFRoaXMgbGljZW5zZQorICAgIGlzICBzdWl0ZWQgIHRvIHByb2R1Y3RzICB3aGljaCAgZG9uJ3QgIHVzZSAgdGhlIEdOVSAgR2VuZXJhbCAgUHVibGljCisgICAgTGljZW5zZS4KKworICAgIE5vdGUgdGhhdCAgdGhpcyBsaWNlbnNlICBpcyAgY29tcGF0aWJsZSAgdG8gdGhlICBHTlUgR2VuZXJhbCAgUHVibGljCisgICAgTGljZW5zZSB2ZXJzaW9uIDMsIGJ1dCBub3QgdmVyc2lvbiAyLgorCisgIC0gVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgZm91bmQgaW4gIGBHUEx2Mi5UWFQnIChhbnkKKyAgICBsYXRlciB2ZXJzaW9uIGNhbiBiZSB1c2VkICBhbHNvKSwgZm9yIHByb2dyYW1zIHdoaWNoIGFscmVhZHkgdXNlIHRoZQorICAgIEdQTC4gIE5vdGUgIHRoYXQgdGhlICBGVEwgaXMgIGluY29tcGF0aWJsZSAgd2l0aCAgR1BMdjIgZHVlICB0byAgaXRzCisgICAgYWR2ZXJ0aXNlbWVudCBjbGF1c2UuCisKK1RoZSBjb250cmlidXRlZCBCREYgYW5kIFBDRiBkcml2ZXJzIGNvbWUgd2l0aCBhIGxpY2Vuc2Ugc2ltaWxhciAgdG8gdGhhdAorb2YgdGhlIFggV2luZG93IFN5c3RlbS4gIEl0IGlzIGNvbXBhdGlibGUgdG8gdGhlIGFib3ZlIHR3byBsaWNlbnNlcyAoc2VlCitmaWxlIHNyYy9iZGYvUkVBRE1FIGFuZCBzcmMvcGNmL1JFQURNRSkuCisKK1RoZSBnemlwIG1vZHVsZSB1c2VzIHRoZSB6bGliIGxpY2Vuc2UgKHNlZSBzcmMvZ3ppcC96bGliLmgpIHdoaWNoIHRvbyBpcworY29tcGF0aWJsZSB0byB0aGUgYWJvdmUgdHdvIGxpY2Vuc2VzLgorCitUaGUgTUQ1IGNoZWNrc3VtIHN1cHBvcnQgKG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIGluIGRldmVsb3BtZW50IGJ1aWxkcykKK2lzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCisKKy0tLSBlbmQgb2YgTElDRU5TRS5UWFQgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9NQUtFUFAgYi9mcmVldHlwZS0yLjYvZG9jcy9NQUtFUFAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlYWY1NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL01BS0VQUApAQCAtMCwwICsxLDUgQEAKK0FzIGEgc3BlY2lhbCAgZXhjZXB0aW9uLCBGcmVlVHlwZSBjYW4gYWxzbyBiZSAgYnVpbHQgd2l0aCB0aGUgJ21ha2VwcCcKK2J1aWxkIHRvb2wsIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9tYWtlcHAuc291cmNlZm9yZ2UubmV0LgorCitOb3RlLCBob3dldmVyLiB0aGF0ICB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHZlcnNpb24gIDEuMTkgYW5kIHBhc3MgdGhlCitvcHRpb24gLS1ub3JjLXN1YnN0aXR1dGlvbiB0byBoYXZlIGl0IHdvcmsgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvUFJPQkxFTVMgYi9mcmVldHlwZS0yLjYvZG9jcy9QUk9CTEVNUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJkYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvUFJPQkxFTVMKQEAgLTAsMCArMSw5MCBAQAorVGhpcyAgZmlsZSBkZXNjcmliZXMgdmFyaW91cyAgcHJvYmxlbXMgdGhhdCAgaGF2ZSBiZWVuICBlbmNvdW50ZXJlZCBpbgorY29tcGlsaW5nLCAgaW5zdGFsbGluZyAgYW5kICAgcnVubmluZyAgRnJlZVR5cGUgIDIuICAgU3VnZ2VzdGlvbnMgIGZvcgorYWRkaXRpb25zIG9yIG90aGVyIGltcHJvdmVtZW50cyB0byB0aGlzIGZpbGUgYXJlIHdlbGNvbWUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVubmluZyBQcm9ibGVtcworPT09PT09PT09PT09PT09PQorCisKKyogU29tZSBUeXBlIDEsIE11bHRpcGxlIE1hc3RlcnMsIGFuZCBDSUQta2V5ZWQgUG9zdFNjcmlwdCBmb250cyBhcmVuJ3QKKyAgaGFuZGxlZCBjb3JyZWN0bHkuCisKKy0tLS0tCisKK09mIGNvdXJzZSwgIHRoZXJlIG1pZ2h0IGJlICBidWdzIGluIEZyZWVUeXBlLCAgYnV0IHNvbWUgZm9udHMgYmFzZWQgb24KK3RoZSAgUG9zdFNjcmlwdCAgZm9ybWF0IGNhbid0ICBiZSBoYW5kbGVkIGluZGVlZC4gIFRoZSByZWFzb24gIGlzIHRoYXQKK0ZyZWVUeXBlICBkb2Vzbid0IGNvbnRhaW4gYSBmdWxsICBQb3N0U2NyaXB0ICBpbnRlcnByZXRlciAgYnV0IGFwcGxpZXMKK3BhdHRlcm4gbWF0Y2hpbmcgaW5zdGVhZC4gIEluIGNhc2UgYSBmb250IGRvZXNuJ3QgZm9sbG93IHRoZSAgc3RhbmRhcmQKK3N0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gZm9udCBmb3JtYXQsIEZyZWVUeXBlIGZhaWxzLiAgQSB0eXBpY2FsIGV4YW1wbGUKK2lzIEFkb2JlJ3MgYE9wdGltYScgIGZvbnQgZmFtaWx5IHdoaWNoICBjb250YWlucyBleHRyYSBjb2RlICB0byBzd2l0Y2gKK2JldHdlZW4gbG93IGFuZCBoaWdoIHJlc29sdXRpb24gdmVyc2lvbnMgb2YgdGhlIGdseXBocy4KKworSXQgbWlnaHQgYmUgIHBvc3NpYmxlIHRvIHBhdGNoICBGcmVlVHlwZSBpbiAgc29tZSBzaXR1YXRpb25zLCAgdGhvdWdoLgorUGxlYXNlIHJlcG9ydCBmYWlsaW5nIGZvbnRzIHNvIHRoYXQgd2UgaW52ZXN0aWdhdGUgdGhlIHByb2JsZW0gYW5kIHNldAordXAgYSBsaXN0IG9mIHN1Y2ggcHJvYmxlbWF0aWMgZm9udHMuCisKKworKiBXaHkgZG8gaWRlbnRpY2FsIEZyZWVUeXBlICB2ZXJzaW9ucyByZW5kZXIgZGlmZmVyZW50bHkgIG9uIGRpZmZlcmVudAorICBwbGF0Zm9ybXM/CisKKy0tLS0tCisKK0RpZmZlcmVudCBkaXN0cmlidXRpb25zIGNvbXBpbGUgRnJlZVR5cGUgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucy4gICBUaGUKK2RldmVsb3BlciAgdmVyc2lvbiBvZiAgYSAgZGlzdHJpYnV0aW9uJ3MgIEZyZWVUeXBlICBwYWNrYWdlLCAgd2hpY2ggaXMKK25lZWRlZCB0byBjb21waWxlICB5b3VyIHByb2dyYW0gIGFnYWluc3QgRnJlZVR5cGUsICBpbmNsdWRlcyB0aGUgIGZpbGUKK2Z0b3B0aW9uLmguICBDb21wYXJlICBlYWNoIHBsYXRmb3JtJ3MgIGNvcHkgb2YgZnRvcHRpb24uaCB0byAgZmluZCB0aGUKK2RpZmZlcmVuY2VzLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitDb21waWxhdGlvbiBQcm9ibGVtcworPT09PT09PT09PT09PT09PT09PT0KKworCisqIEkgZ2V0IGFuIGBpbnRlcm5hbCBjb21waWxhdGlvbiBlcnJvcicgKElDRSkgd2hpbGUgY29tcGlsaW5nIEZyZWVUeXBlCisgIDIuMi4xIHdpdGggSW50ZWwgQysrLgorCisgIFRoaXMgaGFzIGJlZW4gcmVwb3J0ZWQgZm9yIHRoZSBmb2xsb3dpbmcgY29tcGlsZXIgdmVyc2lvbjoKKworICAgIEludGVsKFIpIEMrKyBDb21waWxlciBmb3IgMzItYml0IGFwcGxpY2F0aW9ucywKKyAgICAgIFZlcnNpb24gOS4wIEJ1aWxkIDIwMDUwNDMwWiBQYWNrYWdlIElEOiBXX0NDX1BfOS4wLjAxOQorCistLS0tLQorCitUaGUgYmVzdCBzb2x1dGlvbiBpcyB0byB1cGRhdGUgdGhlIGNvbXBpbGVyIHRvIHZlcnNpb24KKworICBJbnRlbChSKSBDKysgQ29tcGlsZXIgZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnMsCisgICAgVmVyc2lvbiA5LjEgQnVpbGQgMjAwNjAzMjNaIFBhY2thZ2UgSUQ6IFdfQ0NfUF85LjEuMDIyCisKK29yIG5ld2VyLiAgSWYgdGhpcyBpc24ndCBmZWFzaWJsZSwgYXBwbHkgdGhlIGZvbGxvd2luZyBwYXRjaC4KKworCistLS0gc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgMjAgTWFyIDIwMDYgMTI6MTA6MjQgLTAwMDAgMS4yMAorKysrIHNyYy9jYWNoZS9mdGNiYXNpYy5jLnBhdGNoZWQgMTUgTWF5IDIwMDYgMDI6NTE6MDIgLTAwMDAKK0BAIC0yNTIsNyArMjUyLDcgQEAKKyAgICovCisKKyAgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorLSAgY29uc3QgRlRDX0lGYW1pbHlDbGFzc1JlYyAgZnRjX2Jhc2ljX2ltYWdlX2ZhbWlseV9jbGFzcyA9CisrICBGVENfSUZhbWlseUNsYXNzUmVjICBmdGNfYmFzaWNfaW1hZ2VfZmFtaWx5X2NsYXNzID0KKyAgIHsKKyAgICAgeworICAgICAgIHNpemVvZiAoIEZUQ19CYXNpY0ZhbWlseVJlYyApLAorQEAgLTI2Niw3ICsyNjYsNyBAQAorCisKKyAgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorLSAgY29uc3QgRlRDX0dDYWNoZUNsYXNzUmVjICBmdGNfYmFzaWNfaW1hZ2VfY2FjaGVfY2xhc3MgPQorKyAgRlRDX0dDYWNoZUNsYXNzUmVjICBmdGNfYmFzaWNfaW1hZ2VfY2FjaGVfY2xhc3MgPQorICAgeworICAgICB7CisgICAgICAgZnRjX2lub2RlX25ldywKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLSBlbmQgb2YgUFJPQkxFTVMgLS0tCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9UT0RPIGIvZnJlZXR5cGUtMi42L2RvY3MvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VlYWUzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvVE9ETwpAQCAtMCwwICsxLDQwIEBACitIZXJlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkIGluIEZyZWVUeXBlIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEltcGxlbWVudCBzdGVtMy9jb3VudGVyIGhpbnRzIHByb3Blcmx5IGluIHRoZSBQb3N0c2NyaXB0IGhpbnRlci4KKworKiBBZGQgQ0lEQ01hcCBzdXBwb3J0IHRvIHRoZSBDSUQgZHJpdmVyLgorCisqIEFkZCB0cmFjayBrZXJuaW5nIHN1cHBvcnQgdG8gdGhlIFBGUiBkcml2ZXIuCisKKyogQWRkIGtlcm5pbmcgKEFGTSBmaWxlKSBzdXBwb3J0IHRvIHRoZSBDSUQgZHJpdmVyLgorCisKK0hlcmUgaXMgYSBsaXN0IG9mIGJ1Z3Mgd2hpY2ggc2hvdWxkIGJlIGhhbmRsZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3RoZXIgYnVncyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhdCB0aGUgc2F2YW5uYWggYnVnemlsbGEgb2YgRnJlZVR5cGUuCisKKyogQ0lEIGRyaXZlcjoKKyAgICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBDSUQgZm9udCBoYXMgYSB0b3AtbGV2ZWwgZm9udCBtYXRyaXggYWxzbworICAgIChzZWUgUExSTSwgNS4xMS4zLCBUeXBlIDAgQ0lERm9udHMpLiAgU2luY2UgQ0lEX0ZhY2VJbmZvUmVjIGxhY2tzCisgICAgYSBmb250X21hdHJpeCBlbnRyeSB3ZSBoYXZlIHRvIGRpcmVjdGx5IGFwcGx5IGl0IHRvIGFsbCBzdWJmb250CisgICAgbWF0cmljZXMuCisKKyogQ0lEIGRyaXZlcjoKKyAgICBVc2UgdG9wLWxldmVsIGZvbnQgbWF0cml4IGVudHJ5IGZvciBzZXR0aW5nIHRoZSB1cGVtIHZhbHVlLCBub3QgdGhlCisgICAgZW50cmllcyBpbiB0aGUgRkRhcnJheS4gIElmIGFic2VudCwgdXNlIDEwMDAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgIGZpbGUgIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgbWF5ICBvbmx5IGJlICB1c2VkLAorbW9kaWZpZWQsICBhbmQgIGRpc3RyaWJ1dGVkICB1bmRlciAgdGhlICB0ZXJtcyBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0CitsaWNlbnNlLCBMSUNFTlNFLlRYVC4gICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMKK2ZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0ICB5b3UgaGF2ZSAgcmVhZCB0aGUgIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgIGFuZAorYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgVE9ETyAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL1ZFUlNJT04uRExMIGIvZnJlZXR5cGUtMi42L2RvY3MvVkVSU0lPTi5ETEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxOWM5YQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL1ZFUlNJT04uRExMCkBAIC0wLDAgKzEsMTI5IEBACitEdWUgIHRvIG91ciAgdXNlIG9mICBgbGlidG9vbCcgdG8gIGdlbmVyYXRlIGFuZCAgaW5zdGFsbCB0aGUgIEZyZWVUeXBlIDIKK2xpYnJhcmllcyBvbiAgVW5peCBzeXN0ZW1zLCBhcyAgd2VsbCBhcyAgb3RoZXIgaGlzdG9yaWNhbCBldmVudHMsICBpdCBpcworZ2VuZXJhbGx5IHZlcnkgIGRpZmZpY3VsdCB0byAga25vdyBwcmVjaXNlbHkgd2hpY2ggIHJlbGVhc2Ugb2YgIHRoZSBmb250CitlbmdpbmUgaXMgaW5zdGFsbGVkIG9uIGEgZ2l2ZW4gc3lzdGVtLgorCitUaGlzIGZpbGUgdHJpZXMgIHRvIGV4cGxhaW4gd2h5IGFuZCB0byBkb2N1bWVudCAgd2F5cyB0byBwcm9wZXJseSBkZXRlY3QKK0ZyZWVUeXBlIG9uIFVuaXguCisKKworMS4gVmVyc2lvbiBhbmQgUmVsZWFzZSBudW1iZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggbmV3ICBwdWJsaWMgcmVsZWFzZSBvZiBGcmVlVHlwZSAyLCB0aGVyZSAgYXJlIGdlbmVyYWxseSAqdGhyZWUqCitkaXN0aW5jdCBgdmVyc2lvbicgbnVtYmVycyB0byBjb25zaWRlcjoKKworICAqIFRoZSBvZmZpY2lhbCBGcmVlVHlwZSAyIHJlbGVhc2UgbnVtYmVyLCBsaWtlIDIuMy4xIG9yIDIuNC4xMC4KKworICAqIFRoZSBsaWJ0b29sIChhbmQgIFVuaXgpIHNwZWNpZmljIHZlcnNpb24gbnVtYmVyLCAgbGlrZSAxMy4wLjcuICBUaGlzCisgICAgaXMgd2hhdCBgZnJlZXR5cGUtY29uZmlnIC0tdmVyc2lvbicgcmV0dXJucy4KKworICAqIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAgc2hhcmVkIG9iamVjdCAgbnVtYmVyLCB1c2VkIGZvciAgZXhhbXBsZSB3aGVuCisgICAgdGhlIGxpYnJhcnkgaXMgaW5zdGFsbGVkIGFzIGAvdXNyL2xpYi9saWJmcmVldHlwZS5zby42LjcuMScuCisKK1RoZSBwbGF0Zm9ybS1zcGVjaWZpYyAgbnVtYmVyIGlzLCB1bnN1cnByaXNpbmdseSwgIHBsYXRmb3JtLXNwZWNpZmljIGFuZAordmFyaWVzICB3aXRoIHRoZSAgb3BlcmF0aW5nIHN5c3RlbSAgeW91IGFyZSAgdXNpbmcgKHNldmVyYWwgIHZhcmlhbnRzIG9mCitMaW51eCwgRnJlZUJTRCwgIFNvbGFyaXMsIGV0Yy4pLiAgWW91ICBzaG91bGQgdGh1cyBfbmV2ZXJfIHVzZSAgaXQsIGV2ZW4KK2ZvciBzaW1wbGUgdGVzdHMuCisKK1RoZSBsaWJ0b29sLXNwZWNpZmljICBudW1iZXIgZG9lcyAgbm90IGVxdWFsIHRoZSAgcmVsZWFzZSBudW1iZXIgIGJ1dCBpcwordGllZCB0byBpdC4KKworVGhlIHJlbGVhc2UgbnVtYmVyIGlzIGF2YWlsYWJsZSAgYXQgKmNvbXBpbGUqIHRpbWUgdGhyb3VnaCB0aGUgZm9sbG93aW5nCittYWNyb3MgZGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IOgorCisgIC0gRlJFRVRZUEVfTUFKT1I6IG1ham9yIHJlbGVhc2UgbnVtYmVyCisgIC0gRlJFRVRZUEVfTUlOT1I6IG1pbm9yIHJlbGVhc2UgbnVtYmVyCisgIC0gRlJFRVRZUEVfUEFUQ0g6IHBhdGNoIHJlbGVhc2UgbnVtYmVyCisKK1NlZSBiZWxvdyBmb3IgYSBzbWFsbCBhdXRvY29uZiBmcmFnbWVudC4KKworVGhlICByZWxlYXNlICBudW1iZXIgICBpcyAgYWxzbyAgYXZhaWxhYmxlICBhdCAgICpydW50aW1lKiAgdGhyb3VnaCAgdGhlCitgRlRfTGlicmFyeV9WZXJzaW9uJyBBUEkuCisKKworMi4gSGlzdG9yeQorLS0tLS0tLS0tLQorCitUaGUgIGZvbGxvd2luZyAgIHRhYmxlICBnaXZlcywgIGZvciAgIGFsbCAgcmVsZWFzZXMgIHNpbmNlICAgMi4zLjAsICB0aGUKK2NvcnJlc3BvbmRpbmcgbGlidG9vbCBudW1iZXIsIGFzIHdlbGwgIGFzIHRoZSBzaGFyZWQgb2JqZWN0IG51bWJlciBmb3VuZAorb24gX21vc3RfIHN5c3RlbXMsIGJ1dCBub3QgYWxsIG9mIHRoZW06CisKKworICAgIHJlbGVhc2UgICAgIGxpYnRvb2wgICAgIHNvCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgMi42LjAgICAgICAxOC4wLjEyICAgNi4xMi4wCisgICAgIDIuNS41ICAgICAgMTcuNC4xMSAgIDYuMTEuNAorICAgICAyLjUuNCAgICAgIDE3LjMuMTEgICA2LjExLjMKKyAgICAgMi41LjMgICAgICAxNy4yLjExICAgNi4xMS4yCisgICAgIDIuNS4yICAgICAgMTcuMS4xMSAgIDYuMTEuMQorICAgICAyLjUuMSAgICAgIDE3LjAuMTEgICA2LjExLjAKKyAgICAgMi41LjAgICAgICAxNi4yLjEwICAgNi4xMC4yCisgICAgIDIuNC4xMiAgICAgMTYuMS4xMCAgIDYuMTAuMQorICAgICAyLjQuMTEgICAgIDE2LjAuMTAgICA2LjEwLjAKKyAgICAgMi40LjEwICAgICAxNS4wLjkgICAgNi45LjAKKyAgICAgMi40LjkgICAgICAxNC4xLjggICAgNi44LjEKKyAgICAgMi40LjggICAgICAxNC4wLjggICAgNi44LjAKKyAgICAgMi40LjcgICAgICAxMy4yLjcgICAgNi43LjIKKyAgICAgMi40LjYgICAgICAxMy4xLjcgICAgNi43LjEKKyAgICAgMi40LjUgICAgICAxMy4wLjcgICAgNi43LjAKKyAgICAgMi40LjQgICAgICAxMi4yLjYgICAgNi42LjIKKyAgICAgMi40LjMgICAgICAxMi4xLjYgICAgNi42LjEKKyAgICAgMi40LjIgICAgICAxMi4wLjYgICAgNi42LjAKKyAgICAgMi40LjEgICAgICAxMS4xLjUgICAgNi41LjEKKyAgICAgMi40LjAgICAgICAxMS4wLjUgICAgNi41LjAKKyAgICAgMi4zLjEyICAgICAxMC4wLjQgICAgNi40LjAKKyAgICAgMi4zLjExICAgICA5LjIyLjMgICAgNi4zLjIyCisgICAgIDIuMy4xMCAgICAgOS4yMS4zICAgIDYuMy4yMQorICAgICAyLjMuOSAgICAgIDkuMjAuMyAgICA2LjMuMjAKKyAgICAgMi4zLjggICAgICA5LjE5LjMgICAgNi4zLjE5CisgICAgIDIuMy43ICAgICAgOS4xOC4zICAgIDYuMy4xOAorICAgICAyLjMuNiAgICAgIDkuMTcuMyAgICA2LjMuMTcKKyAgICAgMi4zLjUgICAgICA5LjE2LjMgICAgNi4zLjE2CisgICAgIDIuMy40ICAgICAgOS4xNS4zICAgIDYuMy4xNQorICAgICAyLjMuMyAgICAgIDkuMTQuMyAgICA2LjMuMTQKKyAgICAgMi4zLjIgICAgICA5LjEzLjMgICAgNi4zLjEzCisgICAgIDIuMy4xICAgICAgOS4xMi4zICAgIDYuMy4xMgorICAgICAyLjMuMCAgICAgIDkuMTEuMyAgICA2LjMuMTEKKworCiszLiBBdXRvY29uZiBDb2RlIEZyYWdtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xhcnMgQ2xhdXNlbiBjb250cmlidXRlZCB0aGUgZm9sbG93aW5nIGF1dG9jb25mIGZyYWdtZW50IHRvIGRldGVjdCB3aGljaAordmVyc2lvbiBvZiAgRnJlZVR5cGUgaXMgIGluc3RhbGxlZCBvbiAgYSBzeXN0ZW0uICBUaGlzICBvbmUgdGVzdHMgIGZvciBhCit2ZXJzaW9uIHRoYXQgIGlzIGF0IGxlYXN0IDIuMC45OyAgeW91IHNob3VsZCBjaGFuZ2UgaXQgIHRvIGNoZWNrIGFnYWluc3QKK290aGVyIHJlbGVhc2UgbnVtYmVycy4KKworCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBGcmVlVHlwZSB2ZXJzaW9uIGlzIDIuMC45IG9yIGhpZ2hlcl0pCisgIG9sZF9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBDUFBGTEFHUz1gZnJlZXR5cGUtY29uZmlnIC0tY2ZsYWdzYAorICBBQ19UUllfQ1BQKFsKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaWYgKEZSRUVUWVBFX01BSk9SKjEwMDAgKyBGUkVFVFlQRV9NSU5PUikqMTAwMCArIEZSRUVUWVBFX1BBVENIIDwgMjAwMDAwOQorI2Vycm9yIEZyZWV0eXBlIHZlcnNpb24gdG9vIGxvdy4KKyNlbmRpZgorICBdLAorICBbQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBGUkVFVFlQRV9MSUJTPWBmcmVldHlwZS1jb25maWcgLS1saWJzYAorICAgQUNfU1VCU1QoRlJFRVRZUEVfTElCUykKKyAgIEFDX0RFRklORShIQVZFX0ZSRUVUWVBFLDEsW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgRnJlZVR5cGUyIGxpYnJhcnldKQorICAgQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiXSwKKyAgW0FDX01TR19FUlJPUihbTmVlZCBGcmVlVHlwZSBsaWJyYXJ5IHZlcnNpb24gMi4wLjkgb3IgaGlnaGVyXSldKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDItMjAxNSBieQorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSAgb25seSBiZSAgdXNlZCwKK21vZGlmaWVkLCAgYW5kICBkaXN0cmlidXRlZCB1bmRlciAgdGhlICB0ZXJtcyAgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdAorbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nICB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzCitmaWxlICB5b3UgaW5kaWNhdGUgdGhhdCAgeW91IGhhdmUgIHJlYWQgdGhlICBsaWNlbnNlIGFuZCAgdW5kZXJzdGFuZCBhbmQKK2FjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIFZFUlNJT04uRExMIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvZm9ybWF0cy50eHQgYi9mcmVldHlwZS0yLjYvZG9jcy9mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM5MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvZm9ybWF0cy50eHQKQEAgLTAsMCArMSwxNzggQEAKK1RoaXMgIGZpbGUgIGNvbnRhaW5zIGEgIGxpc3QgIG9mIHZhcmlvdXMgIGZvbnQgIGZvcm1hdHMuICAgSXQgZ2l2ZXMgIHRoZQorcmVmZXJlbmNlIGRvY3VtZW50IGFuZCB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZCBpbiBGcmVlVHlwZSAyLgorCisKKyAgZmlsZSB0eXBlOgorICAgIFRoZSBvbmx5IHNwZWNpYWwgIGNhc2UgaXMgYE1BQyc7IG9uIG9sZGVyIE1hYyAgT1MgdmVyc2lvbnMsIGEgYGZpbGUnCisgICAgaXMgIHN0b3JlZCBhcyAgYSAgZGF0YSBhbmQgIGEgIHJlc291cmNlIGZvcmssICB0aGlzICBpcywgd2l0aGluICB0d28KKyAgICBzZXBhcmF0ZSBkYXRhIGNodW5rcy4gICBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSAgZm9udCBkYXRhIGlzIHN0b3JlZAorICAgIGluIGEgc2luZ2xlIGZpbGUuCisKKyAgd3JhcHBlciBmb3JtYXQ6CisgICAgVGhlIGZvcm1hdCB1c2VkICB0byByZXByZXNlbnQgdGhlIGZvbnQgZGF0YS4gIEluICB0aGUgdGFibGUgYmVsb3cgaXQKKyAgICBpcyB1c2VkIG9ubHkgaWYgdGhlIGZvbnQgZm9ybWF0IGRpZmZlcnMuICBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBTRk5UJworICAgIChiaW5hcnkpLCBgUFMnIChhIHRleHQgaGVhZGVyLCBmb2xsb3dlZCBieSBiaW5hcnkgb3IgdGV4dCBkYXRhKSwKKyAgICBgTFpXJyAoY29tcHJlc3NlZCB3aXRoIGVpdGhlciBgZ3ppcCcgb3IgYGNvbXByZXNzJyksIGFuZAorICAgIGBCWjInIChjb21wcmVzc2VkIHdpdGggYGJ6aXAyYCkuCisKKyAgZm9udCBmb3JtYXQ6CisgICAgSG93IHRoZSBmb250ICBpcyB0byBiZSBhY2Nlc3NlZCwgcG9zc2libHkgIGFmdGVyIGNvbnZlcnRpbmcgdGhlIGZpbGUKKyAgICB0eXBlIGFuZCAgd3JhcHBlciBmb3JtYXQgIGludG8gYSBnZW5lcmljICBmb3JtLiAgQml0bWFwICBmb3JtYXRzIGFyZQorICAgIGBCREYnLCAgYFBDRicsIGFuZCAgb25lICBmb3JtICBvZiBgV0lORk5UJzsgIGFsbCAgb3RoZXJzIGFyZSAgdmVjdG9yCisgICAgZm9ybWF0cy4KKworICBmb250IHR5cGU6CisgICAgU3ViLWZvcm1hdHMgIG9mIHRoZSBmb250ICBmb3JtYXQuICBgU0JJVCcgIGFuZCBgTUFDU0JJVCcgIGFyZSBiaXRtYXAKKyAgICBmb3JtYXRzLCBgTU0nIGFuZCBgVkFSJyBzdXBwb3J0IG9wdGljYWwgYXhlcy4KKworICBnbHlwaCBhY2Nlc3M6CisgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGdseXBoIGFjY2VzcyBpcyBgc3RhbmRhcmQnIHRvIHRoZSBmb250IGZvcm1hdC4KKyAgICBWYWx1ZXMgYXJlICBgQ0lEJyBmb3IgQ0lELWtleWVkICBmb250cywgYFNZTlRIRVRJQycgZm9yICBmb250cyB3aGljaAorICAgIGFyZSBtb2RpZmllZCAgdmVyc2lvbnMgb2Ygb3RoZXIgIGZvbnRzIGJ5IG1lYW5zIG9mICBhIHRyYW5zZm9ybWF0aW9uCisgICAgbWF0cml4LCBgQ09MTEVDVElPTicgZm9yIGNvbGxlY3RpbmcgIG11bHRpcGxlIGZvbnRzIChzaGFyaW5nIG1vc3Qgb2YKKyAgICB0aGUgZGF0YSkgaW50byBhIHNpbmdsZSBmaWxlLCBhbmQgYFRZUEVfMCcgZm9yIFBTIGZvbnRzIHdoaWNoIGFyZSB0bworICAgIGJlIGFjY2Vzc2VkIGluIGEgdHJlZS1saWtlIHN0cnVjdHVyZS4KKworICBGcmVlVHlwZSBkcml2ZXI6CisgICAgVGhlIG1vZHVsZSBpbiAgdGhlIEZyZWVUeXBlIGxpYnJhcnkgd2hpY2ggaGFuZGxlcyAgdGhlIHNwZWNpZmljIGZvbnQKKyAgICBmb3JtYXQuICAgQSBtaXNzaW5nIGVudHJ5ICBtZWFucyB0aGF0ICBGcmVlVHlwZSBkb2Vzbid0ICBzdXBwb3J0IHRoZQorICAgIGZvbnQgZm9ybWF0ICh5ZXQpLgorCisKK1BsZWFzZSAgc2VuZCAgYWRkaXRpb25zICBhbmQvb3IgIGNvcnJlY3Rpb25zICB0byB3bEBnbnUub3JnICBvciAgdG8gIHRoZQorRnJlZVR5cGUgZGV2ZWxvcGVyJ3MgbGlzdCAgYXQgZnJlZXR5cGUtZGV2ZWxAbm9uZ251Lm9yZyAoZm9yIHN1YnNjcmliZXJzCitvbmx5KS4gICBJZiB5b3UgIGNhbiBwcm92aWRlICBhIGZvbnQgIGV4YW1wbGUgZm9yICBhIGZvcm1hdCAgd2hpY2ggaXNuJ3QKK3N1cHBvcnRlZCB5ZXQgcGxlYXNlIHNlbmQgYSBtYWlsIHRvby4KKworCitmaWxlIHdyYXBwZXIgZm9udCAgIGZvbnQgICAgZ2x5cGggICAgICBGcmVlVHlwZSByZWZlcmVuY2UKK3R5cGUgZm9ybWF0ICBmb3JtYXQgdHlwZSAgICBhY2Nlc3MgICAgIGRyaXZlciAgIGRvY3VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0gIC0tLSAgICAgQkRGICAgIC0tLSAgICAgLS0tICAgICAgICBiZGYgICAgICA1MDA1LkJERl9TcGVjLnBkZiwgWDExCisKKworLS0tICBTRk5UICAgIFBTICAgICBUWVBFXzEgIC0tLSAgICAgICAgdHlwZTEgICAgVHlwZSAxIEdYIEZvbnQgRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yIHRoZSBNYWMpIFszXQorTUFDICBTRk5UICAgIFBTICAgICBUWVBFXzEgIC0tLSAgICAgICAgdHlwZTEgICAgVHlwZSAxIEdYIEZvbnQgRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yIHRoZSBNYWMpIFszXQorLS0tICBTRk5UICAgIFBTICAgICBUWVBFXzEgIENJRCAgICAgICAgY2lkICAgICAgNTE4MC5zZm50LnBkZiAoZm9yIHRoZSBNYWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbM10KK01BQyAgU0ZOVCAgICBQUyAgICAgVFlQRV8xICBDSUQgICAgICAgIGNpZCAgICAgIDUxODAuc2ZudC5wZGYgKGZvciB0aGUgTWFjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzNdCistLS0gIFNGTlQgICAgUFMgICAgIENGRiAgICAgLS0tICAgICAgICBjZmYgICAgICBPVCBzcGVjLCA1MTc2LkNGRi5wZGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChgT1RUTycgZm9ybWF0KQorTUFDICBTRk5UICAgIFBTICAgICBDRkYgICAgIC0tLSAgICAgICAgY2ZmICAgICAgT1Qgc3BlYywgNTE3Ni5DRkYucGRmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYE9UVE8nIGZvcm1hdCkKKy0tLSAgU0ZOVCAgICBQUyAgICAgQ0ZGICAgICBDSUQgICAgICAgIGNmZiAgICAgIE9UIHNwZWMsIDUxNzYuQ0ZGLnBkZgorTUFDICBTRk5UICAgIFBTICAgICBDRkYgICAgIENJRCAgICAgICAgY2ZmICAgICAgT1Qgc3BlYywgNTE3Ni5DRkYucGRmCistLS0gIFNGTlQgICAgUFMgICAgIENGRiAgICAgU1lOVEhFVElDICAtLS0gICAgICBPVCBzcGVjLCA1MTc2LkNGRi5wZGYKK01BQyAgU0ZOVCAgICBQUyAgICAgQ0ZGICAgICBTWU5USEVUSUMgIC0tLSAgICAgIE9UIHNwZWMsIDUxNzYuQ0ZGLnBkZgorLS0tICBTRk5UICAgIFRUICAgICBTQklUICAgIC0tLSAgICAgICAgc2ZudCAgICAgWEZyZWU4NiAoYml0bWFwcyBvbmx5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBgaGVhZCcgdGFibGUpCistLS0gIFNGTlQgICAgVFQgICAgIE1BQ1NCSVQgLS0tICAgICAgICBzZm50ICAgICBPVCBzcGVjIChmb3IgdGhlIE1hYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcHMgb25seTsgYGJoZWQnIHRhYmxlKQorTUFDICBTRk5UICAgIFRUICAgICBNQUNTQklUIC0tLSAgICAgICAgc2ZudCAgICAgT1Qgc3BlYyAoZm9yIHRoZSBNYWM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBzIG9ubHk7IGBiaGVkJyB0YWJsZSkKKy0tLSAgU0ZOVCAgICBUVCAgICAgLS0tICAgICAtLS0gICAgICAgIHRydWV0eXBlIE9UIHNwZWMgKGBub3JtYWwnIFRUIGZvbnQpCitNQUMgIFNGTlQgICAgVFQgICAgIC0tLSAgICAgLS0tICAgICAgICB0cnVldHlwZSBPVCBzcGVjIChgbm9ybWFsJyBUVCBmb250KQorTUFDICBTRk5UICAgIFRUICAgICBWQVIgICAgIC0tLSAgICAgICAgdHJ1ZXR5cGUgR1ggc3BlYyAoYD92YXInIHRhYmxlcykKKy0tLSAgU0ZOVCAgICBUVCAgICAgLS0tICAgICBDT0xMRUNUSU9OIHRydWV0eXBlIE9UIHNwZWMgKHRoaXMgY2FuJ3QgYmUgQ0ZGKQorTUFDICBTRk5UICAgIFRUICAgICAtLS0gICAgIENPTExFQ1RJT04gdHJ1ZXR5cGUgT1Qgc3BlYyAodGhpcyBjYW4ndCBiZSBDRkYpCisKKworLS0tICAtLS0gICAgIFBTICAgICBUWVBFXzEgIC0tLSAgICAgICAgdHlwZTEgICAgVDFfU1BFQy5wZGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChgbm9ybWFsJyBUeXBlIDEgZm9udCkKK01BQyAgLS0tICAgICBQUyAgICAgVFlQRV8xICAtLS0gICAgICAgIHR5cGUxICAgIFQxX1NQRUMucGRmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYG5vcm1hbCcgVHlwZSAxIGZvbnQpCistLS0gIC0tLSAgICAgUFMgICAgIFRZUEVfMSAgQ0lEICAgICAgICBjaWQgICAgICBQTFJNLnBkZiAoQ0lEIEZvbnQgVHlwZSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA5IGZvbnQpCistLS0gIC0tLSAgICAgUFMgICAgIE1NICAgICAgLS0tICAgICAgICB0eXBlMSAgICA1MDE1LlR5cGUxX1N1cHAucGRmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTXVsdGlwbGUgTWFzdGVycykKKy0tLSAgLS0tICAgICBQUyAgICAgQ0ZGICAgICAtLS0gICAgICAgIGNmZiAgICAgIDUxNzYuQ0ZGLnBkZiAoYHB1cmUnIENGRikKKy0tLSAgLS0tICAgICBQUyAgICAgQ0ZGICAgICBDSUQgICAgICAgIGNmZiAgICAgIDUxNzYuQ0ZGLnBkZiAoYHB1cmUnIENGRikKKy0tLSAgLS0tICAgICBQUyAgICAgQ0ZGICAgICBTWU5USEVUSUMgIC0tLSAgICAgIDUxNzYuQ0ZGLnBkZiAoYHB1cmUnIENGRikKKy0tLSAgUFMgICAgICBQUyAgICAgQ0ZGICAgICAtLS0gICAgICAgIC0tLSAgICAgIFBMUk0ucGRmIChUeXBlIDIpIFsxXQorLS0tICBQUyAgICAgIFBTICAgICBDRkYgICAgIENJRCAgICAgICAgLS0tICAgICAgUExSTS5wZGYgKFR5cGUgMikgWzFdCistLS0gIFBTICAgICAgUFMgICAgIENGRiAgICAgU1lOVEhFVElDICAtLS0gICAgICBQTFJNLnBkZiAoVHlwZSAyKSBbMV0KKy0tLSAgLS0tICAgICBQUyAgICAgLS0tICAgICBUWVBFXzAgICAgIC0tLSAgICAgIFBMUk0ucGRmCistLS0gIC0tLSAgICAgUFMgICAgIFRZUEVfMyAgLS0tICAgICAgICAtLS0gICAgICBQTFJNLnBkZiAobmV2ZXIgc3VwcG9ydGVkKQorLS0tICAtLS0gICAgIFBTICAgICBUWVBFXzMgIENJRCAgICAgICAgLS0tICAgICAgUExSTS5wZGYgKENJRCBGb250IFR5cGUgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMTAgZm9udDsgbmV2ZXIgc3VwcG9ydGVkKQorLS0tICBQUyAgICAgIFBTICAgICBUWVBFXzE0IC0tLSAgICAgICAgLS0tICAgICAgUExSTS5wZGYgKENoYW1lbGVvbiBmb250OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAxNCBmb250OyBuZXZlciBzdXBwb3J0ZWQ/KQorLS0tICAtLS0gICAgIFBTICAgICBUWVBFXzMyIENJRCAgICAgICAgLS0tICAgICAgUExSTS5wZGYgKENJRCBGb250IFR5cGUgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMzIgZm9udDsgbmV2ZXIgc3VwcG9ydGVkPykKKy0tLSAgUFMgICAgICBUVCAgICAgLS0tICAgICAtLS0gICAgICAgIHR5cGU0MiAgIDUwMTIuVHlwZTQyX1NwZWMucGRmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVHlwZSA0MiBmb250KQorLS0tICBQUyAgICAgIFRUICAgICAtLS0gICAgIENJRCAgICAgICAgLS0tICAgICAgUExSTS5wZGYgKENJRCBGb250IFR5cGUgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMTEgZm9udCkKKworCistLS0gID8gICAgICAgPyAgICAgIENFRiAgICAgPyAgICAgICAgICBjZmYgICAgICA/CisKKworLS0tICAtLS0gICAgIFBDRiAgICAtLS0gICAgIC0tLSAgICAgICAgcGNmICAgICAgWDExIFs0XQorLS0tICBMWlcgICAgIFBDRiAgICAtLS0gICAgIC0tLSAgICAgICAgcGNmICAgICAgWDExIFs0XQorLS0tICBCWjIgICAgIFBDRiAgICAtLS0gICAgIC0tLSAgICAgICAgcGNmICAgICAgWDExIFs0XQorCisKKy0tLSAgLS0tICAgICBQRlIgICAgUEZSMCAgICAtLS0gICAgICAgIHBmciAgICAgIFsyXQorLS0tICAtLS0gICAgIFBGUiAgICBQRlIxICAgIC0tLSAgICAgICAgLS0tICAgICAgKHVuZG9jdW1lbnRlZCwgcHJvcHJpZXRhcnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iYWJseSBuZXZlciBzdXBwb3J0ZWQpCisKKworLS0tICAtLS0gICAgIFdJTkZOVCAtLS0gICAgIC0tLSAgICAgICAgd2luZm9udHMgV2luZG93cyBkZXZlbG9wZXIncyBub3RlcyBbNV0KKy0tLSAgLS0tICAgICBXSU5GTlQgVkVDVE9SICAtLS0gICAgICAgIC0tLSAgICAgIFdpbmRvd3MgZGV2ZWxvcGVyJ3Mgbm90ZXMgWzVdCisKKworWzFdIFN1cHBvcnQgc2hvdWxkIGJlIHJhdGhlciBzaW1wbGUgc2luY2UgdGhpcyBpcyBpZGVudGljYWwgdG8gYENGRicgYnV0CisgICAgaW4gYSBQUyB3cmFwcGVyLgorCitbMl0gT2ZmaWNpYWwgUEZSIHNwZWNpZmljYXRpb246CisKKyAgICAgIGh0dHA6Ly93d3cuYml0c3RyZWFtLmNvbS9jYXRlZ29yaWVzL2RldmVsb3Blci90cnVlZG9jL3BmcnNwZWMuaHRtbAorICAgICAgaHR0cDovL3d3dy5iaXRzdHJlYW0uY29tL2NhdGVnb3JpZXMvZGV2ZWxvcGVyL3RydWVkb2MvcGZyc3BlYzEuMi5wZGYKKworICAgIFRoZSAgc3ludGF4IG9mICB0aGUgIGF1eGlsaWFyeSBkYXRhICBpcyAgbm90IGRlZmluZWQgIHRoZXJlLCBidXQgIGlzCisgICAgcGFydGlhbGx5IGRlZmluZWQgaW4gIE1IUCAxLjAuMyAoYWxzbyBjYWxsZWQgRVRTSSAgVFMgMTAxODEyIFYxLjMuMSkKKyAgICBzZWN0aW9uIDcuNC4KKworICAgICAgaHR0cDovL3d3dy5ldHNpLm9yZy8KKyAgICAgIGh0dHA6Ly93ZWJhcHAuZXRzaS5vcmcvd29ya3Byb2dyYW0vUmVwb3J0X1dvcmtJdGVtLmFzcD9XS0lfSUQ9MTg3OTkKKworICAgIChmcmVlIHJlZ2lzdHJhdGlvbiByZXF1aXJlZCkuCisKK1szXSBTdXBwb3J0IGlzIHJ1ZGltZW50YXJ5IGN1cnJlbnRseTsgc29tZSB0YWJsZXMgYXJlIG5vdCBsb2FkZWQgeWV0LgorCitbNF0gU2VlCisKKyAgICAgIFRIRSBYIFdJTkRPVyBTWVNURU0gU0VSVkVSOiBYIFZFUlNJT04gMTEsIFJFTEVBU0UgNQorICAgICAgRWxpYXMgSXNyYWVsLCBFcmlrIEZvcnR1bmUsIERpZ2l0YWwgUHJlc3MsIDE5OTIKKyAgICAgIElTQk4gMS01NTU1OC0wOTYtMworCisgICAgZm9yIGEgc3BlY2lmaWNhdGlvbiAgZ2l2ZW4gaW4gQXBwZW5kaXggRCBvbiBwZ3MuIDQzNi00NTAuICAgSG93ZXZlciwKKyAgICB0aGlzIGluZm9ybWF0aW9uICBtaWdodCBiZSBvdXQgb2YgIGRhdGU7IHVuZm9ydHVuYXRlbHksICB0aGVyZSBpcyBubworICAgIFBDRiAgc3BlY2lmaWNhdGlvbiBhdmFpbGFibGUgIG9ubGluZSwgYW5kIHRoaXMgYm9vayBpcyBvdXQgb2YgcHJpbnQuCisgICAgR2VvcmdlICBXaWxsaWFtcyBkZWR1Y2VkICB0aGUgZm9udCAgZm9ybWF0IGZyb20gdGhlIFgxMSAgc291cmNlcyBhbmQKKyAgICBkb2N1bWVudGVkIGl0IGZvciBoaXMgRm9udEZvcmdlIGZvbnQgZWRpdG9yOgorCisgICAgICBodHRwOi8vZm9udGZvcmdlLnNvdXJjZWZvcmdlLm5ldC9wY2YtZm9ybWF0Lmh0bWwKKworWzVdIFRoaXMgaXMgZnJvbSBNUyBXaW5kb3dzIDM7IHNlZSBNaWNyb3NvZnQncyBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGF0CisKKyAgICAgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvNjUxMjMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA0LTIwMTUgYnkKK0RhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKworVGhpcyAgZmlsZSBpcyAgcGFydCAgb2YgdGhlICBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgIG9ubHkgYmUgIHVzZWQsCittb2RpZmllZCwgIGFuZCAgZGlzdHJpYnV0ZWQgdW5kZXIgIHRoZSAgdGVybXMgIG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QKK2xpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyAgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcworZmlsZSAgeW91IGluZGljYXRlIHRoYXQgIHlvdSBoYXZlICByZWFkIHRoZSAgbGljZW5zZSBhbmQgIHVuZGVyc3RhbmQgYW5kCithY2NlcHQgaXQgZnVsbHkuCisKKworLS0tIGVuZCBvZiBmb3JtYXRzLnR4dCAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xIGIvZnJlZXR5cGUtMi42L2RvY3MvZnJlZXR5cGUtY29uZmlnLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhYjM0YgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xCkBAIC0wLDAgKzEsMTA4IEBACisuVEggRlJFRVRZUEUtQ09ORklHIDEgIkp1bmUgMjAxNSIgIkZyZWVUeXBlIDIuNiIKKy4KKy4KKy5TSCBOQU1FCisuCitmcmVldHlwZS1jb25maWcgXC0gR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgbGliZnJlZXR5cGUgaW5zdGFsbGF0aW9uCisuCisuCisuU0ggU1lOT1BTSVMKKy4KKy5CIGZyZWV0eXBlLWNvbmZpZworLlJJIFsgb3B0aW9ucyBdCisuCisuCisuU0ggREVTQ1JJUFRJT04KKy4KKy5CIGZyZWV0eXBlLWNvbmZpZworcmV0dXJucyBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGNvbXBpbGluZyBhbmQgbGlua2luZyBwcm9ncmFtcyB3aXRoIHRoZQorRnJlZVR5cGUgbGlicmFyeSwgc3VjaCBhcyBsaW5rZXIgZmxhZ3MgYW5kIGNvbXBpbGF0aW9uIHBhcmFtZXRlcnMuCisuCitBbHRlcm5hdGl2ZWx5LCBpdCBjYW4gYmUgdXNlZCB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK0ZyZWVUeXBlIGxpYnJhcnkgdmVyc2lvbiBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSwgc3VjaCBhcyB0aGUKK2luc3RhbGxhdGlvbiAoZGlyZWN0b3J5IHBhdGgpIHByZWZpeCBvciB0aGUgRnJlZVR5cGUgdmVyc2lvbiBudW1iZXIuCisuCisuUFAKK1RoaXMgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwYWNrYWdlLgorLgorLgorLlNIIE9QVElPTlMKKy4KK1RoZXJlIGFyZSB0d28gdHlwZXMgb2Ygb3B0aW9uczogb3V0cHV0L2Rpc3BsYXkgc2VsZWN0aW9uIG9wdGlvbnMsIGFuZAorcGF0aCBvdmVycmlkZSBvcHRpb25zLgorLgorLgorLlNTIE91dHB1dCBzZWxlY3Rpb24gb3B0aW9ucworLgorT25seSBvbmUgb2YgdGhlIG91dHB1dCBzZWxlY3Rpb24gb3B0aW9ucyBzaG91bGQgYmUgZ2l2ZW4gYXQgZWFjaCBwcm9ncmFtCitpbnZvY2F0aW9uLgorLgorLlRQCisuQiBcLVwtcHJlZml4CitSZXR1cm4gdGhlIHByZWZpeCB2YWx1ZSBvZiB0aGUgaW5zdGFsbGVkIEZyZWVUeXBlIGxpYnJhcnkgKHRoZSBkZWZhdWx0CitwcmVmaXggd2lsbCBiZSBgL3VzcicgaW4gbW9zdCBjYXNlcyBmb3IgZGlzdHJpYnV0aW9uLWluc3RhbGxlZAorcGFja2FnZXMpLgorLgorLlRQCisuQiBcLVwtZXhlYy1wcmVmaXgKK1JldHVybiB0aGUgZXhlY3V0YWJsZSBwcmVmaXggdmFsdWUgb2YgdGhlIGluc3RhbGxlZCBGcmVlVHlwZSBsaWJyYXJ5Cisod2lsbCBvZnRlbiBiZSB0aGUgc2FtZSBhcyB0aGUgcHJlZml4IHZhbHVlKS4KKy4KKy5UUAorLkIgXC1cLWZ0dmVyc2lvbgorUmV0dXJuIHRoZSBGcmVlVHlwZSB2ZXJzaW9uIG51bWJlci4KKy4KKy5UUAorLkIgXC1cLXZlcnNpb24KK1JldHVybiB0aGUgYGxpYnRvb2wgdmVyc2lvbicgb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkuCisuCisuVFAKKy5CIFwtXC1saWJ0b29sCitSZXR1cm4gdGhlIGxpYnJhcnkgbmFtZSBmb3IgbGlua2luZyB3aXRoIGxpYnRvb2wuCisuCisuVFAKKy5CIFwtXC1saWJzCitSZXR1cm4gY29tcGlsZXIgZmxhZ3MgZm9yIGxpbmtpbmcgd2l0aCB0aGUgaW5zdGFsbGVkIEZyZWVUeXBlIGxpYnJhcnkuCisuCisuVFAKKy5CIFwtXC1jZmxhZ3MKK1JldHVybiBjb21waWxlciBmbGFncyBmb3IgY29tcGlsaW5nIGFnYWluc3QgdGhlIGluc3RhbGxlZCBGcmVlVHlwZSBsaWJyYXJ5LgorLgorLlRQCisuQiBcLVwtc3RhdGljCitNYWtlIGNvbW1hbmQgbGluZSBvcHRpb25zIGRpc3BsYXkgZmxhZ3MgZm9yIHN0YXRpYyBsaW5raW5nLgorLgorLgorLlNTIFBhdGggb3ZlcnJpZGUgb3B0aW9ucworLgorVGhlc2UgYWZmZWN0IGFueSBzZWxlY3RlZCBvdXRwdXQgb3B0aW9uLCBleGNlcHQgdGhlIGxpYnRvb2wgdmVyc2lvbgorcmV0dXJuZWQgYnkgYC0tdmVyc2lvbicuCisuCisuVFAKKy5CSSBcLVwtcHJlZml4PSBQUkVGSVgKK092ZXJyaWRlIGAtLXByZWZpeCcgdmFsdWUgd2l0aAorLklSIFBSRUZJWCAuCisuCisuVFAKKy5CSSBcLVwtZXhlYy1wcmVmaXg9IEVQUkVGSVgKK092ZXJyaWRlIGAtLWV4ZWMtcHJlZml4JyB2YWx1ZSB3aXRoCisuSVIgRVBSRUZJWCAuCisuCisuCisuU0ggQlVHUworSW4gY2FzZSB0aGUgbGlicmFyaWVzIEZyZWVUeXBlIGxpbmtzIHRvIGFyZSBsb2NhdGVkIGluIG5vbi1zdGFuZGFyZAorZGlyZWN0b3JpZXMsIHRoZSBvdXRwdXQgZnJvbSBvcHRpb24KKy5CIFwtXC1saWJzCittaWdodCBiZSBpbmNvbXBsZXRlLgorSXQgaXMgdGh1cyByZWNvbW1lbmRlZCB0byB1c2UgdGhlCisuQlIgcGtnLWNvbmZpZyAoMSkKK2ludGVyZmFjZSBpbnN0ZWFkLCB3aGljaCBpcyBhYmxlIHRvIGNvcnJlY3RseSByZXNvbHZlIGFsbCBkZXBlbmRlbmNpZXMuCisuCisuCisuU0ggQVVUSE9SCisuCitUaGlzIG1hbnVhbCBwYWdlIHdhcyBjb250cmlidXRlZCBieSBOaXMgTWFydGVuc2VuIDxuaXMubWFydGVuc2VuQHdlYi5kZT4sCit3aXRoIGZ1cnRoZXIgcmVmaW5lbWVudHMgZnJvbSB0aGUgRnJlZVR5cGUgdGVhbS4KKy4KKy4KKy5cIiBlb2YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3Jhc3Rlci50eHQgYi9mcmVldHlwZS0yLjYvZG9jcy9yYXN0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTVkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yYXN0ZXIudHh0CkBAIC0wLDAgKzEsNjM1IEBACisKKyAgICAgICAgICAgICAgICAgICBIb3cgRnJlZVR5cGUncyByYXN0ZXJpemVyIHdvcmsKKworICAgICAgICAgICAgICAgICAgICAgICAgICBieSBEYXZpZCBUdXJuZXIKKworICAgICAgICAgICAgICAgICAgICAgICAgUmV2aXNlZCAyMDA3LUZlYi0wMQorCisKK1RoaXMgZmlsZSAgaXMgYW4gIGF0dGVtcHQgdG8gZXhwbGFpbiAgdGhlIGludGVybmFscyBvZiAgdGhlIEZyZWVUeXBlCityYXN0ZXJpemVyLiAgVGhlICByYXN0ZXJpemVyIGlzIG9mICBxdWl0ZSBnZW5lcmFsIHB1cnBvc2UgIGFuZCBjb3VsZAorZWFzaWx5IGJlIGludGVncmF0ZWQgaW50byBvdGhlciBwcm9ncmFtcy4KKworCisgIEkuIEludHJvZHVjdGlvbgorCisgSUkuIFJlbmRlcmluZyBUZWNobm9sb2d5CisgICAgIDEuIFJlcXVpcmVtZW50cworICAgICAyLiBQcm9maWxlcyBhbmQgU3BhbnMKKyAgICAgICAgYS4gU3dlZXBpbmcgdGhlIFNoYXBlCisgICAgICAgIGIuIERlY29tcG9zaW5nIE91dGxpbmVzIGludG8gUHJvZmlsZXMKKyAgICAgICAgYy4gVGhlIFJlbmRlciBQb29sCisgICAgICAgIGQuIENvbXB1dGluZyBQcm9maWxlcyBFeHRlbnRzCisgICAgICAgIGUuIENvbXB1dGluZyBQcm9maWxlcyBDb29yZGluYXRlcworICAgICAgICBmLiBTd2VlcGluZyBhbmQgU29ydGluZyB0aGUgU3BhbnMKKworCitJLiBJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PT09PQorCisgIEEgIHJhc3Rlcml6ZXIgaXMgIGEgbGlicmFyeSAgaW4gY2hhcmdlICBvZiBjb252ZXJ0aW5nICBhIHZlY3RvcmlhbAorICByZXByZXNlbnRhdGlvbiBvZiBhIHNoYXBlICBpbnRvIGEgYml0bWFwLiAgVGhlIEZyZWVUeXBlIHJhc3Rlcml6ZXIKKyAgaGFzICBiZWVuICBvcmlnaW5hbGx5IGRldmVsb3BlZCAgdG8gIHJlbmRlciAgdGhlICBnbHlwaHMgZm91bmQgIGluCisgIFRydWVUeXBlICBmaWxlcywgbWFkZSAgdXAgIG9mIHNlZ21lbnRzICBhbmQgc2Vjb25kLW9yZGVyICBCw6l6aWVycy4KKyAgTWVhbndoaWxlIGl0IGhhcyBiZWVuIGV4dGVuZGVkIHRvIHJlbmRlciB0aGlyZC1vcmRlciBCw6l6aWVyIGN1cnZlcworICBhbHNvLiAgIFRoaXMgIGRvY3VtZW50ICBpcyAgIGFuICBleHBsYW5hdGlvbiAgb2YgIGl0cyAgZGVzaWduICBhbmQKKyAgaW1wbGVtZW50YXRpb24uCisKKyAgV2hpbGUgIHRoZXNlIGV4cGxhbmF0aW9ucyBzdGFydCAgZnJvbSB0aGUgIGJhc2ljcywgYSAga25vd2xlZGdlIG9mCisgIGNvbW1vbiByYXN0ZXJpemF0aW9uIHRlY2huaXF1ZXMgaXMgYXNzdW1lZC4KKworCitJSS4gUmVuZGVyaW5nIFRlY2hub2xvZ3kKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBSZXF1aXJlbWVudHMKKy0tLS0tLS0tLS0tLS0tLQorCisgIFdlICBhc3N1bWUgdGhhdCAgYWxsIHNjYWxpbmcsICByb3RhdGluZywgaGludGluZywgIGV0Yy4sICBoYXMgYmVlbgorICBhbHJlYWR5IGRvbmUuICBUaGUgZ2x5cGggaXMgdGh1cyAgZGVzY3JpYmVkIGJ5IGEgbGlzdCBvZiBwb2ludHMgaW4KKyAgdGhlIGRldmljZSBzcGFjZS4KKworICAtIEFsbCBwb2ludCBjb29yZGluYXRlcyAgYXJlIGluIHRoZSAyNi42IGZpeGVkICBmbG9hdCBmb3JtYXQuICBUaGUKKyAgICB1c2VkIG9yaWVudGF0aW9uIGlzOgorCisKKyAgICAgICBeIHkKKyAgICAgICB8ICAgICAgICAgcmVmZXJlbmNlIG9yaWVudGF0aW9uCisgICAgICAgfAorICAgICAgICotLS0tPiB4CisgICAgICAwCisKKworICAgIGAyNi42JyBtZWFucyAgdGhhdCAyNiBiaXRzICBhcmUgdXNlZCBmb3IgIHRoZSBpbnRlZ2VyIHBhcnQgIG9mIGEKKyAgICB2YWx1ZSAgIGFuZCAgNiAgIGJpdHMgIGFyZSAgIHVzZWQgIGZvciAgIHRoZSAgIGZyYWN0aW9uYWwgIHBhcnQuCisgICAgQ29uc2VxdWVudGx5LCB0aGUgYGRpc3RhbmNlJyAgYmV0d2VlbiB0d28gbmVpZ2hib3VyaW5nIHBpeGVscyBpcworICAgIDY0IGB1bml0cycgKDEgdW5pdCA9IDEvNjR0aCBvZiBhIHBpeGVsKS4KKworICAgIE5vdGUgIHRoYXQsIGZvciAgdGhlIHJhc3Rlcml6ZXIsICBwaXhlbCBjZW50ZXJzICBhcmUgIGxvY2F0ZWQgYXQKKyAgICBpbnRlZ2VyICAgY29vcmRpbmF0ZXMuICAgVGhlICAgVHJ1ZVR5cGUgICBieXRlY29kZSAgaW50ZXJwcmV0ZXIsCisgICAgaG93ZXZlciwgYXNzdW1lcyB0aGF0ICB0aGUgbG93ZXIgbGVmdCBlZGdlIG9mICBhIHBpeGVsICh3aGljaCBpcworICAgIHRha2VuICB0byBiZSAgYSBzcXVhcmUgIHdpdGggIGEgbGVuZ3RoICBvZiAxICB1bml0KSBoYXMgIGludGVnZXIKKyAgICBjb29yZGluYXRlcy4KKworCisgICAgICAgIF4geSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIHkKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgICAgICgxLDEpICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAoMC41LDAuNSkKKyAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSsKKyAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIHwKKyAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIHwKKyAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIG8tLS0tLSstLS0tLT4geAorICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICgwLDApICAgfAorICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgICBvLS0tLS0tLS0tLS0rLS0tLS0+IHggICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgKDAsMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMC41LC0wLjUpCisKKyAgIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyICAgICAgICAgIEZyZWVUeXBlIHJhc3Rlcml6ZXIKKworCisgICAgQSBwaXhlbCBsaW5lIGluIHRoZSB0YXJnZXQgYml0bWFwIGlzIGNhbGxlZCBhIGBzY2FubGluZScuCisKKyAgLSBBICBnbHlwaCAgaXMgIHVzdWFsbHkgIG1hZGUgIG9mIHNldmVyYWwgIGNvbnRvdXJzLCAgYWxzbyAgY2FsbGVkCisgICAgYG91dGxpbmVzJy4gIEEgY29udG91ciBpcyBzaW1wbHkgYSBjbG9zZWQgY3VydmUgdGhhdCBkZWxpbWl0cyBhbgorICAgIG91dGVyIG9yIGlubmVyIHJlZ2lvbiBvZiB0aGUgZ2x5cGguICBJdCBpcyBkZXNjcmliZWQgYnkgYSBzZXJpZXMKKyAgICBvZiBzdWNjZXNzaXZlIHBvaW50cyBvZiB0aGUgcG9pbnRzIHRhYmxlLgorCisgICAgRWFjaCBwb2ludCAgb2YgdGhlIGdseXBoICBoYXMgYW4gYXNzb2NpYXRlZCBmbGFnICB0aGF0IGluZGljYXRlcworICAgIHdoZXRoZXIgIGl0IGlzICBgb24nIG9yICBgb2ZmJyB0aGUgIGN1cnZlLiAgVHdvICBzdWNjZXNzaXZlIGBvbicKKyAgICBwb2ludHMgaW5kaWNhdGUgYSBsaW5lIHNlZ21lbnQgam9pbmluZyB0aGUgdHdvIHBvaW50cy4KKworICAgIE9uZSBgb2ZmJyBwb2ludCBhbWlkc3QgdHdvIGBvbicgcG9pbnRzIGluZGljYXRlcyBhIHNlY29uZC1kZWdyZWUKKyAgICAoY29uaWMpICBCw6l6aWVyIHBhcmFtZXRyaWMgIGFyYywgZGVmaW5lZCAgYnkgdGhlc2UgIHRocmVlIHBvaW50cworICAgICh0aGUgYG9mZicgcG9pbnQgYmVpbmcgdGhlICBjb250cm9sIHBvaW50LCBhbmQgdGhlIGBvbicgb25lcyB0aGUKKyAgICBzdGFydCBhbmQgZW5kIHBvaW50cykuICBTaW1pbGFybHksIGEgdGhpcmQtZGVncmVlIChjdWJpYykgQsOpemllcgorICAgIGN1cnZlICBpcyBkZXNjcmliZWQgIGJ5IGZvdXIgIHBvaW50cyAodHdvICBgb2ZmJyAgY29udHJvbCBwb2ludHMKKyAgICBiZXR3ZWVuIHR3byBgb24nIHBvaW50cykuCisKKyAgICBGaW5hbGx5LCAgZm9yICBzZWNvbmQtb3JkZXIgY3VydmVzICBvbmx5LCAgdHdvIHN1Y2Nlc3NpdmUgIGBvZmYnCisgICAgcG9pbnRzICBmb3JjZXMgdGhlICByYXN0ZXJpemVyIHRvICBjcmVhdGUsIGR1cmluZyAgcmVuZGVyaW5nLCBhbgorICAgIGBvbicgIHBvaW50IGFtaWRzdCB0aGVtLCAgYXQgdGhlaXIgIGV4YWN0IG1pZGRsZS4gICBUaGlzIGdyZWF0bHkKKyAgICBmYWNpbGl0YXRlcyB0aGUgIGRlZmluaXRpb24gb2YgIHN1Y2Nlc3NpdmUgQsOpemllciBhcmNzLgorCisgIFRoZSBwYXJhbWV0cmljIGZvcm0gb2YgYSBzZWNvbmQtb3JkZXIgQsOpemllciBjdXJ2ZSBpczoKKworICAgICAgUCh0KSA9ICgxLXQpXjIqUDEgKyAyKnQqKDEtdCkqUDIgKyB0XjIqUDMKKworICAgICAgKFAxIGFuZCBQMyBhcmUgdGhlIGVuZCBwb2ludHMsIFAyIHRoZSBjb250cm9sIHBvaW50LikKKworICBUaGUgcGFyYW1ldHJpYyBmb3JtIG9mIGEgdGhpcmQtb3JkZXIgQsOpemllciBjdXJ2ZSBpczoKKworICAgICAgUCh0KSA9ICgxLXQpXjMqUDEgKyAzKnQqKDEtdCleMipQMiArIDMqdF4yKigxLXQpKlAzICsgdF4zKlA0CisKKyAgICAgIChQMSBhbmQgUDQgYXJlIHRoZSBlbmQgcG9pbnRzLCBQMiBhbmQgUDMgdGhlIGNvbnRyb2wgcG9pbnRzLikKKworICBGb3IgYm90aCBmb3JtdWxhZSwgdCBpcyBhIHJlYWwgbnVtYmVyIGluIHRoZSByYW5nZSBbMC4uMV0uCisKKyAgTm90ZSAgdGhhdCB0aGUgcmFzdGVyaXplciAgZG9lcyBub3QgIHVzZSB0aGVzZSAgZm9ybXVsYWUgZGlyZWN0bHkuCisgIFRoZXkgZXhoaWJpdCwgIGhvd2V2ZXIsIG9uZSB2ZXJ5ICB1c2VmdWwgcHJvcGVydHkgb2YgIELDqXppZXIgYXJjczoKKyAgRWFjaCAgcG9pbnQgb2YgIHRoZSBjdXJ2ZSAgaXMgYSAgd2VpZ2h0ZWQgYXZlcmFnZSAgb2YgIHRoZSBjb250cm9sCisgIHBvaW50cy4KKworICBBcyBhbGwgd2VpZ2h0cyAgYXJlIHBvc2l0aXZlIGFuZCBhbHdheXMgc3VtIHVwICB0byAxLCB3aGF0ZXZlciB0aGUKKyAgdmFsdWUgIG9mIHQsICBlYWNoIGFyYyAgcG9pbnQgbGllcyAgd2l0aGluIHRoZSAgdHJpYW5nbGUgKHBvbHlnb24pCisgIGRlZmluZWQgYnkgdGhlIGFyYydzIHRocmVlIChmb3VyKSBjb250cm9sIHBvaW50cy4KKworICBJbiAgdGhlIGZvbGxvd2luZywgIG9ubHkgc2Vjb25kLW9yZGVyICBjdXJ2ZXMgYXJlICBkaXNjdXNzZWQgc2luY2UKKyAgcmFzdGVyaXphdGlvbiBvZiB0aGlyZC1vcmRlciBjdXJ2ZXMgaXMgY29tcGxldGVseSBpZGVudGljYWwuCisKKyAgSGVyZSBzb21lIHNhbXBsZXMgZm9yIHNlY29uZC1vcmRlciBjdXJ2ZXMuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAjIG9uIGN1cnZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2ZmIGN1cnZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX18tLS1fXworICAgICAgICAjLV9fICAgICAgICAgICAgICAgICAgICAgIF8tLSAgICAgICAtXworICAgICAgICAgICAgLS1fXyAgICAgICAgICAgICAgICBfLSAgICAgICAgICAgIC0KKyAgICAgICAgICAgICAgICAtLV9fICAgICAgICAgICAjICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAtLV9fICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgLSMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR3byBgb24nIHBvaW50cworICAgICAgICAgVHdvIGBvbicgcG9pbnRzICAgICAgIGFuZCBvbmUgYG9mZicgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHRoZW0KKworICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgIyAgICAgICAgICAgIF9fICAgICAgVHdvIGBvbicgcG9pbnRzIHdpdGggdHdvIGBvZmYnCisgICAgICAgICBcICAgICAgICAgIC0gIC0gICAgIHBvaW50cyBiZXR3ZWVuIHRoZW0uIFRoZSBwb2ludAorICAgICAgICAgIFwgICAgICAgIC8gICAgXCAgICBtYXJrZWQgYDAnIGlzIHRoZSBtaWRkbGUgb2YgdGhlCisgICAgICAgICAgIC0gICAgICAwICAgICAgXCAgIGBvZmYnIHBvaW50cywgYW5kIGlzIGEgYHZpcnR1YWwKKyAgICAgICAgICAgIC1fICBfLSAgICAgICAjICAgb24nIHBvaW50IHdoZXJlIHRoZSBjdXJ2ZSBwYXNzZXMuCisgICAgICAgICAgICAgIC0tICAgICAgICAgICAgIEl0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcG9pbnQKKyAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgbGlzdC4KKworCisyLiBQcm9maWxlcyBhbmQgU3BhbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBmb2xsb3dpbmcgaXMgYSBiYXNpYyBleHBsYW5hdGlvbiBvZiB0aGUgX2tpbmRfIG9mIGNvbXB1dGF0aW9ucworICBtYWRlICBieSAgdGhlICAgcmFzdGVyaXplciAgdG8gIGJ1aWxkICBhICBiaXRtYXAgICBmcm9tICBhICB2ZWN0b3IKKyAgcmVwcmVzZW50YXRpb24uICBOb3RlICB0aGF0IHRoZSBhY3R1YWwgIGltcGxlbWVudGF0aW9uIGlzIHNsaWdodGx5CisgIGRpZmZlcmVudCwgZHVlIHRvIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgb3RoZXIgZmFjdG9ycy4KKworICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGlkZWFzIHJlbWFpbiAgaW4gdGhlIHNhbWUgY2F0ZWdvcnksIGFuZCBhcmUKKyAgbW9yZSBjb252ZW5pZW50IHRvIHVuZGVyc3RhbmQuCisKKworICBhLiBTd2VlcGluZyB0aGUgU2hhcGUKKworICAgIFRoZSBiZXN0IHdheSB0byBmaWxsIGEgc2hhcGUgaXMgdG8gZGVjb21wb3NlIGl0IGludG8gYSBudW1iZXIgb2YKKyAgICBzaW1wbGUgIGhvcml6b250YWwgc2VnbWVudHMsICB0aGVuIHR1cm4gIHRoZW0gb24gIGluICB0aGUgdGFyZ2V0CisgICAgYml0bWFwLiAgVGhlc2Ugc2VnbWVudHMgYXJlIGNhbGxlZCBgc3BhbnMnLgorCisgICAgICAgICAgICAgICAgX18tLS1fXworICAgICAgICAgICAgIF8tLSAgICAgICAtXworICAgICAgICAgICBfLSAgICAgICAgICAgIC0KKyAgICAgICAgICAtICAgICAgICAgICAgICAgXAorICAgICAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAgICAvICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgXAorCisgICAgICAgICAgICAgICAgX18tLS1fXyAgICAgICAgIEV4YW1wbGU6IGZpbGxpbmcgYSBzaGFwZQorICAgICAgICAgICAgIF8tLS0tLS0tLS0tXyAgICAgICAgICAgICAgICB3aXRoIHNwYW5zLgorICAgICAgICAgICBfLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tXAorICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLS0tXCAgICBUaGlzIGlzIHR5cGljYWxseSBkb25lIGZyb20gdGhlIHRvcAorICAgICAgICAvICAgICAgICAgICAgICAgICAgIFwgICB0byB0aGUgYm90dG9tIG9mIHRoZSBzaGFwZSwgaW4gYQorICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICBcICBtb3ZlbWVudCBjYWxsZWQgYSBgc3dlZXAnLgorICAgICAgICAgICAgICAgICAgIFYKKworICAgICAgICAgICAgICAgIF9fLS0tX18KKyAgICAgICAgICAgICBfLS0tLS0tLS0tLV8KKyAgICAgICAgICAgXy0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLVwKKyAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tLVwKKyAgICAgICAgLy0tLS0tLS0tLS0tLS0tLS0tLS1cCisgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKworCisgICAgSW4gIG9yZGVyICB0byBkcmF3ICBhICBzcGFuLCAgdGhlICByYXN0ZXJpemVyIG11c3QgIGNvbXB1dGUgIGl0cworICAgIGNvb3JkaW5hdGVzLCB3aGljaCAgYXJlIHNpbXBseSB0aGUgeCBjb29yZGluYXRlcyAgb2YgdGhlIHNoYXBlJ3MKKyAgICBjb250b3VycywgdGFrZW4gb24gdGhlIHkgc2NhbmxpbmVzLgorCisKKyAgICAgICAgICAgICAgICAgICAvLS0tLyAgICB8LS0tfCAgIE5vdGUgdGhhdCB0aGVyZSBhcmUgdXN1YWxseQorICAgICAgICAgICAgICAgICAgLy0tLS8gICAgIHwtLS18ICAgc2V2ZXJhbCBzcGFucyBwZXIgc2NhbmxpbmUuCisgICAgICAgIHwgICAgICAgIC8tLS0vICAgICAgfC0tLXwKKyAgICAgICAgfCAgICAgICAvLS0tL19fX19fX198LS0tfCAgIFdoZW4gcmVuZGVyaW5nIHRoaXMgc2hhcGUgdG8gdGhlCisgICAgICAgIFYgICAgICAvLS0tLS0tLS0tLS0tLS0tLXwgICBjdXJyZW50IHNjYW5saW5lIHksIHdlIG11c3QKKyAgICAgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLS0tfCAgIGNvbXB1dGUgdGhlIHggdmFsdWVzIG9mIHRoZQorICAgICAgICAgICBhIC8tLS0tfCAgICAgICAgIHwtLS18ICAgcG9pbnRzIGEsIGIsIGMsIGFuZCBkLgorICAgICAgLSAtIC0gKiAgICAgKiAtIC0gLSAtICogICAqIC0gLSB5IC0KKyAgICAgICAgICAgLyAgICAgLyBiICAgICAgIGN8ICAgfGQKKworCisgICAgICAgICAgICAgICAgICAgLy0tLS8gICAgfC0tLXwKKyAgICAgICAgICAgICAgICAgIC8tLS0vICAgICB8LS0tfCAgQW5kIHRoZW4gdHVybiBvbiB0aGUgc3BhbnMgYS1iCisgICAgICAgICAgICAgICAgIC8tLS0vICAgICAgfC0tLXwgIGFuZCBjLWQuCisgICAgICAgICAgICAgICAgLy0tLS9fX19fX19ffC0tLXwKKyAgICAgICAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgIGEgLy0tLS18ICAgICAgICAgfC0tLXwKKyAgICAgIC0gLSAtICMjIyMjIyMgLSAtIC0gLSAjIyMjIyAtIC0geSAtCisgICAgICAgICAgIC8gICAgIC8gYiAgICAgICBjfCAgIHxkCisKKworICBiLiBEZWNvbXBvc2luZyBPdXRsaW5lcyBpbnRvIFByb2ZpbGVzCisKKyAgICBGb3IgIGVhY2ggIHNjYW5saW5lIGR1cmluZyAgdGhlICBzd2VlcCwgIHdlICBuZWVkIHRoZSAgZm9sbG93aW5nCisgICAgaW5mb3JtYXRpb246CisKKyAgICBvIFRoZSAgbnVtYmVyIG9mICBzcGFucyBvbiAgdGhlIGN1cnJlbnQgIHNjYW5saW5lLCBnaXZlbiAgYnkgdGhlCisgICAgICBudW1iZXIgb2YgIHNoYXBlIHBvaW50cyAgaW50ZXJzZWN0aW5nIHRoZSBzY2FubGluZSAgKHRoZXNlIGFyZQorICAgICAgdGhlIHBvaW50cyBhLCBiLCBjLCBhbmQgZCBpbiB0aGUgYWJvdmUgZXhhbXBsZSkuCisKKyAgICBvIFRoZSB4IGNvb3JkaW5hdGVzIG9mIHRoZXNlIHBvaW50cy4KKworICAgIHggY29vcmRpbmF0ZXMgYXJlICBjb21wdXRlZCBiZWZvcmUgdGhlIHN3ZWVwLCBpbiAgYSBwaGFzZSBjYWxsZWQKKyAgICBgZGVjb21wb3NpdGlvbicgd2hpY2ggY29udmVydHMgdGhlIGdseXBoIGludG8gKnByb2ZpbGVzKi4KKworICAgIFB1dCBpdCBzaW1wbHksIGEgYHByb2ZpbGUnICBpcyBhIGNvbnRvdXIncyBwb3J0aW9uIHRoYXQgY2FuIG9ubHkKKyAgICBiZSBlaXRoZXIgYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcsICBpLmUuLCBpdCBpcyBtb25vdG9uaWMgaW4gdGhlCisgICAgdmVydGljYWwgZGlyZWN0aW9uICh3ZSBhbHNvIHNheSAgeS1tb25vdG9uaWMpLiAgVGhlcmUgaXMgbm8gc3VjaAorICAgIHRoaW5nIGFzIGEgaG9yaXpvbnRhbCBwcm9maWxlLCBhcyB3ZSBzaGFsbCBzZWUuCisKKyAgICBIZXJlIGFyZSBhIGZldyBleGFtcGxlczoKKworCisgICAgICB0aGlzIHNxdWFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgIDIKKyAgICAgICAgIC0tLS0+LS0tLSAgICAgaXMgbWFkZSBvZiB0d28KKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8ICAgICAgIHByb2ZpbGVzICAgICAgICB8ICAgICAgICAgfAorICAgICAgICBeICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgXiAgICArICAgIHYKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgICAgICAgLS0tLTwtLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgICAgICAgIGRvd24KKworCisgICAgICB0aGlzIHRyaWFuZ2xlCisKKyAgICAgICAgICAgICBQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAyCisKKyAgICAgICAgICAgICB8XCAgICAgICAgaXMgbWFkZSBvZiB0d28gICAgICAgfCAgICAgICAgIFwKKyAgICAgICAgICBeICB8IFwgIFwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICBcCisgICAgICAgICAgfCB8ICAgXCAgXCAgICAgIHByb2ZpbGVzICAgICAgICAgfCAgICAgICAgICAgIFwgICAgICB8CisgICAgICAgICB8ICB8ICAgIFwgIHYgICAgICAgICAgICAgICAgICBeICAgfCAgICAgICAgICAgICBcICAgICB8CisgICAgICAgICAgIHwgICAgICBcICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgKyAgICAgXCAgICB2CisgICAgICAgICAgIHwgICAgICAgXCAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUDEgLS0tX19fICAgXCAgICAgICAgICAgICAgICAgICAgIC0tLV9fXyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLS0tX1wgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLV8gICAgICAgICBcCisgICAgICAgICAgICAgPC0tX18gICAgIFAzICAgICAgICAgICAgICAgICAgIHVwICAgICAgICAgICBkb3duCisKKworCisgICAgICBBIG1vcmUgZ2VuZXJhbCBjb250b3VyIGNhbiBiZSBtYWRlIG9mIG1vcmUgdGhhbiB0d28gcHJvZmlsZXM6CisKKyAgICAgICAgICAgICAgX18gICAgIF4KKyAgICAgICAgICAgICAvICB8ICAgLyAgX19fICAgICAgICAgIC8gICAgfAorICAgICAgICAgICAgLyAgIHwgICAgIC8gICB8ICAgICAgICAvICAgICB8ICAgICAgIC8gICAgIHwKKyAgICAgICAgICAgfCAgICB8ICAgIC8gICAvICAgID0+ICB8ICAgICAgdiAgICAgIC8gICAgIC8KKyAgICAgICAgICAgfCAgICB8ICAgfCAgIHwgICAgICAgICB8ICAgICAgfCAgICAgXiAgICAgfAorICAgICAgICBeICB8ICAgIHxfX198ICAgfCAgfCAgICAgIF4gICArICB8ICArICB8ICArICB2CisgICAgICAgIHwgIHwgICAgICAgICAgIHwgICB2ICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHVwICAgIHwKKyAgICAgICAgICAgfF9fX19fX19fX19ffCAgICAgICAgICB8ICAgIGRvd24gICAgICAgICB8CisKKyAgICAgICAgICAgICAgICA8LS0gICAgICAgICAgICAgICB1cCAgICAgICAgICAgICAgZG93bgorCisKKyAgICBTdWNjZXNzaXZlICBwcm9maWxlcyBhcmUgIGFsd2F5cyBqb2luZWQgIGJ5ICBob3Jpem9udGFsIHNlZ21lbnRzCisgICAgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHByb2ZpbGVzIHRoZW1zZWx2ZXMuCisKKyAgICBGb3IgIHRoZSAgcmFzdGVyaXplciwgIGEgIHByb2ZpbGUgIGlzICBzaW1wbHkgIGFuICAqYXJyYXkqICB0aGF0CisgICAgYXNzb2NpYXRlcyAgb25lICBob3Jpem9udGFsICpwaXhlbCogIGNvb3JkaW5hdGUgIHRvIGVhY2ggIGJpdG1hcAorICAgICpzY2FubGluZSogIGNyb3NzZWQgIGJ5ICB0aGUgIGNvbnRvdXIncyBzZWN0aW9uICBjb250YWluaW5nICB0aGUKKyAgICBwcm9maWxlLiAgTm90ZSB0aGF0IHByb2ZpbGVzIGFyZSAqb3JpZW50ZWQqIHVwIG9yIGRvd24gYWxvbmcgdGhlCisgICAgZ2x5cGgncyBvcmlnaW5hbCBmbG93IG9yaWVudGF0aW9uLgorCisgICAgSW4gb3RoZXIgZ3JhcGhpY3MgbGlicmFyaWVzLCBwcm9maWxlcyBhcmUgYWxzbyBjYWxsZWQgYGVkZ2VzJyBvcgorICAgIGBlZGdlbGlzdHMnLgorCisKKyAgYy4gVGhlIFJlbmRlciBQb29sCisKKyAgICBGcmVlVHlwZSAgaGFzIGJlZW4gZGVzaWduZWQgIHRvIGJlICBhYmxlIHRvICBydW4gd2VsbCAgb24gX3ZlcnlfCisgICAgbGlnaHQgc3lzdGVtcywgaW5jbHVkaW5nIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCB2ZXJ5IGZldyBtZW1vcnkuCisKKyAgICBBIHJlbmRlciBwb29sICB3aWxsIGJlIGFsbG9jYXRlZCBvbmNlOyB0aGUgIHJhc3Rlcml6ZXIgdXNlcyB0aGlzCisgICAgcG9vbCBmb3IgYWxsICBpdHMgbmVlZHMgYnkgbWFuYWdpbmcgdGhpcyAgbWVtb3J5IGRpcmVjdGx5IGluIGl0LgorICAgIFRoZSAgYWxnb3JpdGhtcyB0aGF0IGFyZSAgdXNlZCBmb3IgIHByb2ZpbGUgY29tcHV0YXRpb24gIG1ha2UgaXQKKyAgICBwb3NzaWJsZSB0byB1c2UgIHRoZSBwb29sIGFzIGEgc2ltcGxlICBncm93aW5nIGhlYXAuICBUaGlzIG1lYW5zCisgICAgdGhhdCB0aGlzICBtZW1vcnkgbWFuYWdlbWVudCBpcyAgYWN0dWFsbHkgcXVpdGUgZWFzeSAgYW5kIGZhc3RlcgorICAgIHRoYW4gYW55IGtpbmQgb2YgbWFsbG9jKCkvZnJlZSgpIGNvbWJpbmF0aW9uLgorCisgICAgTW9yZW92ZXIsICB3ZSdsbCBzZWUgIGxhdGVyIHRoYXQgIHRoZSByYXN0ZXJpemVyICBpcyAgYWJsZSwgd2hlbgorICAgIGRlYWxpbmcgd2l0aCBwcm9maWxlcyB0b28gbGFyZ2UgIGFuZCBudW1lcm91cyB0byBsaWUgYWxsIGF0IG9uY2UKKyAgICBpbiAgdGhlIHJlbmRlciAgcG9vbCwgdG8gIGltbWVkaWF0ZWx5IGRlY29tcG9zZSAgcmVjdXJzaXZlbHkgdGhlCisgICAgcmVuZGVyaW5nIHByb2Nlc3MgIGludG8gaW5kZXBlbmRlbnQgc3ViLXRhc2tzLCAgZWFjaCB0YWtpbmcgbGVzcworICAgIG1lbW9yeSB0byBiZSBwZXJmb3JtZWQgKHNlZSBgc3ViLWJhbmRpbmcnIGJlbG93KS4KKworICAgIFRoZSAgcmVuZGVyIHBvb2wgZG9lc24ndCAgbmVlZCB0byAgYmUgbGFyZ2UuICAgQSA0S0J5dGUgIHBvb2wgaXMKKyAgICBlbm91Z2ggZm9yIG5lYXJseSBhbGwgcmVuZGl0aW9ucywgdGhvdWdoIG5lYXJseSAxMDAlIHNsb3dlciB0aGFuCisgICAgYSBtb3JlIGNvbWZvcnRhYmxlIDE2S0J5dGUgb3IgMzJLQnl0ZSBwb29sICh0aGF0IHdhcyB0ZXN0ZWQgd2l0aAorICAgIGNvbXBsZXggZ2x5cGhzIGF0IHNpemVzIG92ZXIgNTAwIHBpeGVscykuCisKKworICBkLiBDb21wdXRpbmcgUHJvZmlsZXMgRXh0ZW50cworCisgICAgUmVtZW1iZXIgdGhhdCBhIHByb2ZpbGUgaXMgYW4gYXJyYXksIGFzc29jaWF0aW5nIGEgX3NjYW5saW5lXyB0bworICAgIHRoZSB4IHBpeGVsIGNvb3JkaW5hdGUgb2YgaXRzIGludGVyc2VjdGlvbiB3aXRoIGEgY29udG91ci4KKworICAgIFRob3VnaCBpdCdzIG5vdCBleGFjdGx5IGhvdyB0aGUgRnJlZVR5cGUgcmFzdGVyaXplciB3b3JrcywgaXQgaXMKKyAgICBjb252ZW5pZW50ICB0byB0aGluayAgdGhhdCAgd2UgbmVlZCAgYSAgcHJvZmlsZSdzIGhlaWdodCAgYmVmb3JlCisgICAgYWxsb2NhdGluZyBpdCBpbiB0aGUgcG9vbCBhbmQgY29tcHV0aW5nIGl0cyBjb29yZGluYXRlcy4KKworICAgIFRoZSBwcm9maWxlJ3MgaGVpZ2h0ICBpcyB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyAgY3Jvc3NlZCBieSB0aGUKKyAgICB5LW1vbm90b25pYyBzZWN0aW9uIG9mIGEgY29udG91ci4gIFdlIHRodXMgbmVlZCB0byBjb21wdXRlIHRoZXNlCisgICAgc2VjdGlvbnMgZnJvbSAgdGhlIHZlY3RvcmlhbCBkZXNjcmlwdGlvbi4gIEluIG9yZGVyICB0byBkbyB0aGF0LAorICAgIHdlIGFyZSAgb2JsaWdlZCB0byBjb21wdXRlIGFsbCAgKGxvY2FsIGFuZCBnbG9iYWwpICB5IGV4dHJlbWEgb2YKKyAgICB0aGUgZ2x5cGggKG1pbmltYSBhbmQgbWF4aW1hKS4KKworCisgICAgICAgICAgIFAyICAgICAgICAgICAgIEZvciBpbnN0YW5jZSwgdGhpcyB0cmlhbmdsZSBoYXMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICB0d28geS1leHRyZW1hLCB3aGljaCBhcmUgc2ltcGx5CisgICAgICAgICAgIHxcCisgICAgICAgICAgIHwgXCAgICAgICAgICAgICAgIFAyLnkgIGFzIGEgdmVydGljYWwgbWF4aW11bQorICAgICAgICAgIHwgICBcICAgICAgICAgICAgICBQMy55ICBhcyBhIHZlcnRpY2FsIG1pbmltdW0KKyAgICAgICAgICB8ICAgIFwKKyAgICAgICAgIHwgICAgICBcICAgICAgICAgICAgUDEueSBpcyBub3QgYSB2ZXJ0aWNhbCBleHRyZW11bSAodGhvdWdoCisgICAgICAgICB8ICAgICAgIFwgICAgICAgICAgIGl0IGlzIGEgaG9yaXpvbnRhbCBtaW5pbXVtLCB3aGljaCB3ZQorICAgICAgUDEgLS0tX19fICAgXCAgICAgICAgICBkb24ndCBuZWVkKS4KKyAgICAgICAgICAgICAgIC0tLV9cCisgICAgICAgICAgICAgICAgICAgICBQMworCisKKyAgICBOb3RlICB0aGF0IHRoZSAgZXh0cmVtYSBhcmUgIGV4cHJlc3NlZCAgaW4gcGl4ZWwgIHVuaXRzLCBub3QgIGluCisgICAgc2NhbmxpbmVzLiAgIFRoZSB0cmlhbmdsZSdzICBoZWlnaHQgIGlzIGNlcnRhaW5seSAgKFAzLnktUDIueSsxKQorICAgIHBpeGVsICB1bml0cywgICBidXQgIGl0cyAgcHJvZmlsZXMnICBoZWlnaHRzICAgYXJlICBjb21wdXRlZCAgaW4KKyAgICBzY2FubGluZXMuICBUaGUgZXhhY3QgY29udmVyc2lvbiBpcyBzaW1wbGU6CisKKyAgICAgIC0gbWluIHNjYW5saW5lID0gRkxPT1IgICggbWluIHkgKQorICAgICAgLSBtYXggc2NhbmxpbmUgPSBDRUlMSU5HKCBtYXggeSApCisKKyAgICBBIHByb2JsZW0gIGFyaXNlcyB3aXRoIELDqXppZXIgIEFyY3MuICBXaGlsZSBhIHNlZ21lbnQgIGlzIGFsd2F5cworICAgIG5lY2Vzc2FyaWx5IHktbW9ub3RvbmljIChpLmUuLCAgZmxhdCwgYXNjZW5kaW5nLCBvciBkZXNjZW5kaW5nKSwKKyAgICB3aGljaCBtYWtlcyBleHRyZW1hIGNvbXB1dGF0aW9ucyBlYXN5LCAgdGhlIGFzY2VudCBvZiBhbiBhcmMgY2FuCisgICAgdmFyeSBiZXR3ZWVuIGl0cyBjb250cm9sIHBvaW50cy4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgIFAyCisgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbiBjdXJ2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZmYgY3VydmUKKyAgICAgICAgICAgICAgICAgICBfXy14LS1fCisgICAgICAgICAgICAgICAgXy0tICAgICAgIC1fCisgICAgICAgICAgUDEgIF8tICAgICAgICAgICAgLSAgICAgICAgICBBIG5vbiB5LW1vbm90b25pYyBCw6l6aWVyIGFyYy4KKyAgICAgICAgICAgICAjICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgVGhlIGFyYyBnb2VzIGZyb20gUDEgdG8gUDMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICBQMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworCisKKyAgICBXZSBmaXJzdCAgbmVlZCB0byBiZSAgYWJsZSB0byBlYXNpbHkgZGV0ZWN0ICBub24tbW9ub3RvbmljIGFyY3MsCisgICAgYWNjb3JkaW5nIHRvICB0aGVpciBjb250cm9sIHBvaW50cy4gIEkgd2lsbCAgc3RhdGUgaGVyZSwgd2l0aG91dAorICAgIHByb29mLCB0aGF0IHRoZSBtb25vdG9ueSBjb25kaXRpb24gY2FuIGJlIGV4cHJlc3NlZCBhczoKKworICAgICAgUDEueSA8PSBQMi55IDw9IFAzLnkgICBmb3IgYW4gZXZlci1hc2NlbmRpbmcgYXJjCisKKyAgICAgIFAxLnkgPj0gUDIueSA+PSBQMy55ICAgZm9yIGFuIGV2ZXItZGVzY2VuZGluZyBhcmMKKworICAgIHdpdGggdGhlIHNwZWNpYWwgY2FzZSBvZgorCisgICAgICBQMS55ID0gUDIueSA9IFAzLnkgICAgIHdoZXJlIHRoZSBhcmMgaXMgc2FpZCB0byBiZSBgZmxhdCcuCisKKyAgICBBcyAgeW91IGNhbiAgc2VlLCB0aGVzZSAgY29uZGl0aW9ucyBjYW4gIGJlIHZlcnkgIGVhc2lseSB0ZXN0ZWQuCisgICAgVGhleSBhcmUsIGhvd2V2ZXIsIGV4dHJlbWVseSBpbXBvcnRhbnQsIGFzIGFueSBhcmMgdGhhdCBkb2VzIG5vdAorICAgIHNhdGlzZnkgdGhlbSBuZWNlc3NhcmlseSBjb250YWlucyBhbiBleHRyZW11bS4KKworICAgIE5vdGUgIGFsc28gdGhhdCAgYSBtb25vdG9uaWMgIGFyYyBjYW4gIGNvbnRhaW4gYW4gIGV4dHJlbXVtIHRvbywKKyAgICB3aGljaCBpcyB0aGVuIG9uZSBvZiBpdHMgYG9uJyBwb2ludHM6CisKKworICAgICAgICBQMSAgICAgICAgICAgUDIKKyAgICAgICAgICAjLS0tX18gICAqICAgICAgICAgUDFQMlAzIGlzIGV2ZXItZGVzY2VuZGluZywgYnV0IFAxCisgICAgICAgICAgICAgICAgLV8gICAgICAgICAgIGlzIGFuIHktZXh0cmVtdW0uCisgICAgICAgICAgICAgICAgICAtCisgICAgICAgICAgIC0tLV8gICAgXAorICAgICAgICAgICAgICAgLT4gICBcCisgICAgICAgICAgICAgICAgICAgICBcICBQMworICAgICAgICAgICAgICAgICAgICAgICMKKworCisgICAgTGV0J3MgZ28gYmFjayB0byBvdXIgcHJldmlvdXMgZXhhbXBsZToKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgIFAyCisgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbiBjdXJ2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZmYgY3VydmUKKyAgICAgICAgICAgICAgICAgICBfXy14LS1fCisgICAgICAgICAgICAgICAgXy0tICAgICAgIC1fCisgICAgICAgICAgUDEgIF8tICAgICAgICAgICAgLSAgICAgICAgICBBIG5vbi15LW1vbm90b25pYyBCw6l6aWVyIGFyYy4KKyAgICAgICAgICAgICAjICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgSGVyZSB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgUDIueSA+PSBQMS55ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgIFAzICAgICAgICAgUDIueSA+PSBQMy55ICAgICAgKCEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisKKworICAgIFdlIG5lZWQgdG8gIGNvbXB1dGUgdGhlIHZlcnRpY2FsIG1heGltdW0gb2YgdGhpcyAgYXJjIHRvIGJlIGFibGUKKyAgICB0byBjb21wdXRlIGEgcHJvZmlsZSdzIGhlaWdodCAodGhlIHBvaW50IG1hcmtlZCBieSBhbiBgeCcpLiAgVGhlCisgICAgYXJjJ3MgZXF1YXRpb24gaW5kaWNhdGVzIHRoYXQgIGEgZGlyZWN0IGNvbXB1dGF0aW9uIGlzIHBvc3NpYmxlLAorICAgIGJ1dCAgd2UgcmVseSAgb24gYSAgZGlmZmVyZW50IHRlY2huaXF1ZSwgIHdoaWNoIHVzZSAgd2lsbCBiZWNvbWUKKyAgICBhcHBhcmVudCBzb29uLgorCisgICAgQsOpemllciAgYXJjcyBoYXZlICB0aGUgIHNwZWNpYWwgcHJvcGVydHkgIG9mICBiZWluZyB2ZXJ5ICBlYXNpbHkKKyAgICBkZWNvbXBvc2VkIGludG8gdHdvIHN1Yi1hcmNzLCAgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgQsOpemllciBhcmNzLgorICAgIE1vcmVvdmVyLCBpdCBpcyBlYXN5IHRvIHByb3ZlIHRoYXQgdGhlcmUgaXMgYXQgbW9zdCBvbmUgdmVydGljYWwKKyAgICBleHRyZW11bSBvbiAgZWFjaCBCw6l6aWVyIGFyYyAoZm9yICBzZWNvbmQtZGVncmVlIGN1cnZlczsgc2ltaWxhcgorICAgIGNvbmRpdGlvbnMgY2FuIGJlIGZvdW5kIGZvciB0aGlyZC1vcmRlciBhcmNzKS4KKworICAgIEZvciBpbnN0YW5jZSwgIHRoZSBmb2xsb3dpbmcgYXJjICBQMVAyUDMgY2FuIGJlICBkZWNvbXBvc2VkIGludG8KKyAgICB0d28gc3ViLWFyY3MgUTFRMlEzIGFuZCBSMVIyUjM6CisKKworICAgICAgICAgICAgICAgICAgICBQMgorICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb24gIGN1cnZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mZiBjdXJ2ZQorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIELDqXppZXIgYXJjIFAxUDJQMy4KKyAgICAgICAgICAgICAgICBfXy0tLV9fCisgICAgICAgICAgICAgXy0tICAgICAgIC0tXworICAgICAgICAgICBfLSAgICAgICAgICAgICAtXworICAgICAgICAgIC0gICAgICAgICAgICAgICAgIC0KKyAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgUDEgICAgICAgICAgICAgICAgICAgICAgICAgUDMKKworCisKKyAgICAgICAgICAgICAgICAgICAgUDIKKyAgICAgICAgICAgICAgICAgICAqCisKKworCisgICAgICAgICAgICAgICAgICAgUTMgICAgICAgICAgICAgICAgIERlY29tcG9zZWQgaW50byB0d28gc3ViYXJjcworICAgICAgICAgIFEyICAgICAgICAgICAgICAgIFIyICAgICAgICBRMVEyUTMgYW5kIFIxUjJSMworICAgICAgICAgICAgKiAgIF9fLSMtX18gICAqCisgICAgICAgICAgICAgXy0tICAgICAgIC0tXworICAgICAgICAgICBfLSAgICAgICBSMSAgICAtXyAgICAgICAgICBRMSA9IFAxICAgICAgICAgUjMgPSBQMworICAgICAgICAgIC0gICAgICAgICAgICAgICAgIC0gICAgICAgICBRMiA9IChQMStQMikvMiAgUjIgPSAoUDIrUDMpLzIKKyAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgIFEzID0gUjEgPSAoUTIrUjIpLzIKKyAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgIFExICAgICAgICAgICAgICAgICAgICAgICAgIFIzICAgIE5vdGUgdGhhdCBRMiwgUjIsIGFuZCBRMz1SMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgb24gYSBzaW5nbGUgbGluZSB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YW5nZW50IHRvIHRoZSBjdXJ2ZS4KKworCisgICAgV2UgaGF2ZSB0aGVuIGRlY29tcG9zZWQgIGEgbm9uLXktbW9ub3RvbmljIELDqXppZXIgY3VydmUgaW50byB0d28KKyAgICBzbWFsbGVyIHN1Yi1hcmNzLiAgTm90ZSB0aGF0IGluIHRoZSBhYm92ZSBkcmF3aW5nLCBib3RoIHN1Yi1hcmNzCisgICAgYXJlIG1vbm90b25pYywgYW5kIHRoYXQgdGhlIGV4dHJlbXVtIGlzIHRoZW4gUTM9UjEuICBIb3dldmVyLCBpbgorICAgIGEgIG1vcmUgZ2VuZXJhbCAgY2FzZSwgIG9ubHkgIG9uZSBzdWItYXJjICBpcyAgZ3VhcmFudGVlZCB0byAgYmUKKyAgICBtb25vdG9uaWMuICBHZXR0aW5nIGJhY2sgdG8gb3VyIGZvcm1lciBleGFtcGxlOgorCisKKyAgICAgICAgICAgICAgICAgICAgUTIKKyAgICAgICAgICAgICAgICAgICAqCisKKyAgICAgICAgICAgICAgICAgICBfXy14LS1fIFIxCisgICAgICAgICAgICAgICAgXy0tICAgICAgICNfCisgICAgICAgICAgUTEgIF8tICAgICAgICBRMyAgLSAgIFIyCisgICAgICAgICAgICAgIyAgICAgICAgICAgICAgIFwgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgUjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKworCisgICAgSGVyZSwgd2Ugc2VlIHRoYXQsICB0aG91Z2ggUTFRMlEzIGlzIHN0aWxsIG5vbi1tb25vdG9uaWMsIFIxUjJSMworICAgIGlzIGV2ZXIgIGRlc2NlbmRpbmc6IFdlICB0aHVzIGtub3cgdGhhdCAgaXQgZG9lc24ndCAgY29udGFpbiB0aGUKKyAgICBleHRyZW11bS4gIFdlIGNhbiB0aGVuIHJlLXN1YmRpdmlkZSBRMVEyUTMgaW50byB0d28gc3ViLWFyY3MgYW5kCisgICAgZ28gIG9uIHJlY3Vyc2l2ZWx5LCAgc3RvcHBpbmcgIHdoZW4gd2UgIGVuY291bnRlciB0d28gIG1vbm90b25pYworICAgIHN1YmFyY3MsIG9yIHdoZW4gdGhlIHN1YmFyY3MgYmVjb21lIHNpbXBseSB0b28gc21hbGwuCisKKyAgICBXZSAgd2lsbCBmaW5hbGx5ICBmaW5kICB0aGUgdmVydGljYWwgIGV4dHJlbXVtLiAgIE5vdGUgdGhhdCAgdGhlCisgICAgaXRlcmF0aXZlIHByb2Nlc3Mgb2YgZmluZGluZyBhbiBleHRyZW11bSBpcyBjYWxsZWQgYGZsYXR0ZW5pbmcnLgorCisKKyAgZS4gQ29tcHV0aW5nIFByb2ZpbGVzIENvb3JkaW5hdGVzCisKKyAgICBPbmNlIHdlIGhhdmUgdGhlIGhlaWdodCBvZiBlYWNoIHByb2ZpbGUsIHdlIGFyZSBhYmxlIHRvIGFsbG9jYXRlCisgICAgaXQgaW4gdGhlIHJlbmRlciBwb29sLiAgIFRoZSBuZXh0IHRhc2sgaXMgdG8gY29tcHV0ZSBjb29yZGluYXRlcworICAgIGZvciBlYWNoIHNjYW5saW5lLgorCisgICAgSW4gIHRoZSBjYXNlICBvZiBzZWdtZW50cywgIHRoZSBjb21wdXRhdGlvbiAgaXMgc3RyYWlnaHRmb3J3YXJkLAorICAgIHVzaW5nICB0aGUgIEV1Y2xpZGVhbiAgIGFsZ29yaXRobSAgKGFsc28gIGtub3duICBhcyAgQnJlc2VuaGFtKS4KKyAgICBIb3dldmVyLCBmb3IgQsOpemllciBhcmNzLCB0aGUgam9iIGlzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQuCisKKyAgICBXZSBhc3N1bWUgIHRoYXQgYWxsIELDqXppZXJzIHRoYXQgIGFyZSBwYXJ0IG9mIGEgIHByb2ZpbGUgYXJlIHRoZQorICAgIHJlc3VsdCBvZiAgZmxhdHRlbmluZyB0aGUgY3VydmUsICB3aGljaCBtZWFucyB0aGF0IHRoZXkgIGFyZSBhbGwKKyAgICB5LW1vbm90b25pYyAoYXNjZW5kaW5nICBvciBkZXNjZW5kaW5nLCBhbmQgbmV2ZXIgIGZsYXQpLiAgV2Ugbm93CisgICAgaGF2ZSAgdG8gY29tcHV0ZSB0aGUgIGludGVyc2VjdGlvbnMgb2YgIGFyY3Mgd2l0aCAgdGhlIHByb2ZpbGUncworICAgIHNjYW5saW5lcy4gIE9uZSAgd2F5IGlzICB0byB1c2UgYSAgc2ltaWxhciBzY2hlbWUgIHRvIGZsYXR0ZW5pbmcKKyAgICBjYWxsZWQgYHN0ZXBwaW5nJy4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIGFyYywgZ29pbmcgZnJvbSBQMSB0bworICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgUDMuICBTdXBwb3NlIHRoYXQgd2UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZSBpdHMgaW50ZXJzZWN0aW9ucyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd24gc2NhbmxpbmVzLiAgQXMgYWxyZWFkeQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgbWVudGlvbmVkIHRoaXMgY2FuIGJlIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5LCBidXQgdGhlIGludm9sdmVkCisgICAgICAgICAgKiBQMiAgICAgICAgIF8tLS0jIFAzICBhbGdvcml0aG0gaXMgZmFyIHRvbyBzbG93LgorICAgICAgLS0tLS0tLS0tLS0tLSBfLS0gIC0tCisgICAgICAgICAgICAgICAgICBfLQorICAgICAgICAgICAgICAgIF8vICAgICAgICAgICAgICAgSW5zdGVhZCwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8KKyAgICAgIC0tLS0tLS0tLS8tLS0tLS0tLS0tLSAgICAgIHVzZSB0aGUgZGVjb21wb3NpdGlvbiBwcm9wZXJ0eSBpbgorICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgcmVjdXJzaXZlIHdheSwgaS5lLiwKKyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHN1YmRpdmlkZSB0aGUgYXJjIGludG8gc3ViYXJjcworICAgICAgLS0tLS0tfC0tLS0tLS0tLS0tLS0tICAgICAgdW50aWwgdGhlc2UgZ2V0IHRvbyBzbWFsbCB0byBjcm9zcworICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBzY2FubGluZSEKKyAgICAgICAgICAgfAorICAgICAgLS0tLS18LS0tLS0tLS0tLS0tLS0tICAgICAgVGhpcyBpcyB2ZXJ5IGVhc2lseSBkb25lIHVzaW5nIGEKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcml6ZXItbWFuYWdlZCBzdGFjayBvZgorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgc3ViYXJjcy4KKyAgICAgICAgICAjIFAxCisKKworICBmLiBTd2VlcGluZyBhbmQgU29ydGluZyB0aGUgU3BhbnMKKworICAgIE9uY2UgYWxsIG91ciBwcm9maWxlcyBoYXZlICBiZWVuIGNvbXB1dGVkLCB3ZSBiZWdpbiB0aGUgc3dlZXAgdG8KKyAgICBidWlsZCAoYW5kIGZpbGwpIHRoZSBzcGFucy4KKworICAgIEFzIGJvdGggdGhlICBUcnVlVHlwZSBhbmQgVHlwZSAxIHNwZWNpZmljYXRpb25zICB1c2UgdGhlIHdpbmRpbmcKKyAgICBmaWxsICBydWxlIChidXQgIHdpdGggb3Bwb3NpdGUgIGRpcmVjdGlvbnMpLCB3ZSAgcGxhY2UsICBvbiBlYWNoCisgICAgc2NhbmxpbmUsIHRoZSBwcmVzZW50IHByb2ZpbGVzIGluIHR3byBzZXBhcmF0ZSBsaXN0cy4KKworICAgIE9uZSAgbGlzdCwgIGNhbGxlZCAgdGhlICBgbGVmdCcgIG9uZSwgIG9ubHkgIGNvbnRhaW5zICBhc2NlbmRpbmcKKyAgICBwcm9maWxlcywgd2hpbGUgIHRoZSBvdGhlciBgcmlnaHQnIGxpc3QgIGNvbnRhaW5zIHRoZSBkZXNjZW5kaW5nCisgICAgcHJvZmlsZXMuCisKKyAgICBBcyAgZWFjaCBnbHlwaCAgaXMgbWFkZSAgb2YgIGNsb3NlZCBjdXJ2ZXMsICBhIHNpbXBsZSAgZ2VvbWV0cmljCisgICAgcHJvcGVydHkgZW5zdXJlcyB0aGF0ICB0aGUgdHdvIGxpc3RzIGNvbnRhaW4gdGhlICBzYW1lIG51bWJlciBvZgorICAgIGVsZW1lbnRzLgorCisgICAgQ3JlYXRpbmcgc3BhbnMgaXMgdGh1cyBzdHJhaWdodGZvcndhcmQ6CisKKyAgICAxLiBXZSBzb3J0IGVhY2ggbGlzdCBpbiBpbmNyZWFzaW5nIGhvcml6b250YWwgb3JkZXIuCisKKyAgICAyLiBXZSBwYWlyICBlYWNoIHZhbHVlIG9mICB0aGUgbGVmdCBsaXN0IHdpdGggIGl0cyBjb3JyZXNwb25kaW5nCisgICAgICAgdmFsdWUgaW4gdGhlIHJpZ2h0IGxpc3QuCisKKworICAgICAgICAgICAgICAgICAgIC8gICAgIC8gIHwgICB8ICAgICAgICAgIEZvciBleGFtcGxlLCB3ZSBoYXZlIGhlcmUKKyAgICAgICAgICAgICAgICAgIC8gICAgIC8gICB8ICAgfCAgICAgICAgICBmb3VyIHByb2ZpbGVzLiAgVHdvIG9mCisgICAgICAgICAgICAgICAgPi8gICAgIC8gICAgfCAgIHwgIHwgICAgICAgdGhlbSBhcmUgYXNjZW5kaW5nICgxICYKKyAgICAgICAgICAgICAgMS8vICAgICAvICAgXiB8ICAgfCAgfCAyICAgICAzKSwgd2hpbGUgdGhlIHR3byBvdGhlcnMKKyAgICAgICAgICAgICAgLy8gICAgIC8vICAzfCB8ICAgfCAgdiAgICAgICBhcmUgZGVzY2VuZGluZyAoMiAmIDQpLgorICAgICAgICAgICAgICAvICAgICAvLzQgICB8IHwgICB8ICAgICAgICAgIE9uIHRoZSBnaXZlbiBzY2FubGluZSwKKyAgICAgICAgICAgYSAvICAgICAvPCAgICAgICB8ICAgfCAgICAgICAgICB0aGUgbGVmdCBsaXN0IGlzICgxLDMpLAorICAgICAgLSAtIC0gKi0tLS0tKiAtIC0gLSAtICotLS0qIC0gLSB5IC0gIGFuZCB0aGUgcmlnaHQgb25lIGlzCisgICAgICAgICAgIC8gICAgIC8gYiAgICAgICBjfCAgIHxkICAgICAgICAgKDQsMikgKHNvcnRlZCkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRoZW4gdHdvIHNwYW5zLCBqb2luaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgdG8gNCAoaS5lLiBhLWIpIGFuZCAzIHRvIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gYy1kKSEKKworCisgICAgU29ydGluZyBkb2Vzbid0IG5lY2Vzc2FyaWx5ICB0YWtlIG11Y2ggdGltZSwgYXMgaW4gIDk5IGNhc2VzIG91dAorICAgIG9mIDEwMCwgdGhlIGxpc3RzJyBvcmRlciBpcyAga2VwdCBmcm9tIG9uZSBzY2FubGluZSB0byB0aGUgbmV4dC4KKyAgICBXZSBjYW4gIHRodXMgaW1wbGVtZW50IGl0ICB3aXRoIHR3byBzaW1wbGUgIHNpbmdseS1saW5rZWQgbGlzdHMsCisgICAgc29ydGVkIGJ5IGEgY2xhc3NpYyBidWJibGUtc29ydCwgd2hpY2ggdGFrZXMgYSBtaW5pbXVtIGFtb3VudCBvZgorICAgIHRpbWUgd2hlbiB0aGUgbGlzdHMgYXJlIGFscmVhZHkgc29ydGVkLgorCisgICAgQSAgcHJldmlvdXMgIHZlcnNpb24gIG9mICB0aGUgIHJhc3Rlcml6ZXIgIHVzZWQgIG1vcmUgIGVsYWJvcmF0ZQorICAgIHN0cnVjdHVyZXMsIGxpa2UgYXJyYXlzIHRvICBwZXJmb3JtIGBmYXN0ZXInIHNvcnRpbmcuICBJdCB0dXJuZWQKKyAgICBvdXQgdGhhdCAgdGhpcyBvbGQgc2NoZW1lIGlzICBub3QgZmFzdGVyIHRoYW4gIHRoZSBvbmUgZGVzY3JpYmVkCisgICAgYWJvdmUuCisKKyAgICBPbmNlIHRoZSBzcGFucyAgaGF2ZSBiZWVuIGBjcmVhdGVkJywgd2UgY2FuICBzaW1wbHkgZHJhdyB0aGVtIGluCisgICAgdGhlIHRhcmdldCBiaXRtYXAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgIGZpbGUgIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgbWF5ICBvbmx5IGJlICB1c2VkLAorbW9kaWZpZWQsICBhbmQgIGRpc3RyaWJ1dGVkICB1bmRlciAgdGhlICB0ZXJtcyBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0CitsaWNlbnNlLCBMSUNFTlNFLlRYVC4gICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMKK2ZpbGUgeW91ICBpbmRpY2F0ZSB0aGF0ICB5b3UgaGF2ZSAgcmVhZCB0aGUgIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgIGFuZAorYWNjZXB0IGl0IGZ1bGx5LgorCisKKy0tLSBlbmQgb2YgcmFzdGVyLnR4dCAtLS0KKworTG9jYWwgVmFyaWFibGVzOgorY29kaW5nOiB1dGYtOAorRW5kOgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL1JFQURNRSBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiMDRkNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9SRUFETUUKQEAgLTAsMCArMSw1IEBACitBZnRlciBzYXlpbmcgYG1ha2UgcmVmZG9jJyB0aGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgRnJlZVR5cGUgQVBJCityZWZlcmVuY2UuICBZb3UgbmVlZCBweXRob24gdG8gbWFrZSB0aGlzIHRhcmdldC4KKworVGhpcyBhbHNvIHdvcmtzIHdpdGggSmFtOiBKdXN0IHR5cGUgYGphbSByZWZkb2MnIGluIHRoZSBtYWluIGRpcmVjdG9yeS4KKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1hdXRvX2hpbnRlci5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1hdXRvX2hpbnRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwM2ZiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWF1dG9faGludGVyLmh0bWwKQEAgLTAsMCArMSwzOTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5UaGUgYXV0by1oaW50ZXI8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjZ2x5cGgtdG8tc2NyaXB0LW1hcCI+Z2x5cGgtdG8tc2NyaXB0LW1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSIjZGVmYXVsdC1zY3JpcHQiPmRlZmF1bHQtc2NyaXB0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWCI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNpbmNyZWFzZS14LWhlaWdodCI+aW5jcmVhc2UteC1oZWlnaHQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwIj5GVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0Ij5GVF9Qcm9wX0luY3JlYXNlWEhlaWdodDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNmYWxsYmFjay1zY3JpcHQiPmZhbGxiYWNrLXNjcmlwdDwvYT48L3RkPjx0ZD48YSBocmVmPSIjd2FycGluZyI+d2FycGluZzwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPldoaWxlIEZyZWVUeXBlJ3MgYXV0by1oaW50ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieSBpdHNlbGYsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X1NldCI+RlRfUHJvcGVydHlfU2V0PC9hPiBhbmQgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+LiBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcyB0b2dldGhlciB3aXRoIHRoZSBuZWNlc3NhcnkgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzLjwvcD4KKzxwPk5vdGUgdGhhdCB0aGUgYXV0by1oaW50ZXIncyBtb2R1bGUgbmFtZSBpcyAmbHNxdW87YXV0b2ZpdHRlciZyc3F1bzsgZm9yIGhpc3RvcmljYWwgcmVhc29ucy48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJnbHlwaC10by1zY3JpcHQtbWFwIj5nbHlwaC10by1zY3JpcHQtbWFwPC9oMz4KKworPHA+PGI+RXhwZXJpbWVudGFsPC9iPiA8Yj5vbmx5PC9iPjwvcD4KKzxwPlRoZSBhdXRvLWhpbnRlciBwcm92aWRlcyB2YXJpb3VzIHNjcmlwdCBtb2R1bGVzIHRvIGhpbnQgZ2x5cGhzLiBFeGFtcGxlcyBvZiBzdXBwb3J0ZWQgc2NyaXB0cyBhcmUgTGF0aW4gb3IgQ0pLLiBCZWZvcmUgYSBnbHlwaCBpcyBhdXRvLWhpbnRlZCwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIG1hcCBvZiB0aGUgZm9udCBnZXRzIGV4YW1pbmVkLCBhbmQgdGhlIHNjcmlwdCBpcyB0aGVuIGRldGVybWluZWQgYmFzZWQgb24gVW5pY29kZSBjaGFyYWN0ZXIgcmFuZ2VzLCBzZWUgYmVsb3cuPC9wPgorPHA+T3BlblR5cGUgZm9udHMsIGhvd2V2ZXIsIG9mdGVuIHByb3ZpZGUgbXVjaCBtb3JlIGdseXBocyB0aGFuIGNoYXJhY3RlciBjb2RlcyAoc21hbGwgY2Fwcywgc3VwZXJzY3JpcHRzLCBsaWdhdHVyZXMsIHN3YXNoZXMsIGV0Yy4pLCB0byBiZSBjb250cm9sbGVkIGJ5IHNvLWNhbGxlZCAmbHNxdW87ZmVhdHVyZXMmcnNxdW87LiBIYW5kbGluZyBPcGVuVHlwZSBmZWF0dXJlcyBjYW4gYmUgcXVpdGUgY29tcGxpY2F0ZWQgYW5kIHRodXMgbmVlZHMgYSBzZXBhcmF0ZSBsaWJyYXJ5IG9uIHRvcCBvZiBGcmVlVHlwZS48L3A+Cis8cD5UaGUgbWFwcGluZyBiZXR3ZWVuIGdseXBoIGluZGljZXMgYW5kIHNjcmlwdHMgKGluIHRoZSBhdXRvLWhpbnRlciBzZW5zZSwgc2VlIHRoZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNGVF9BVVRPSElOVEVSX1NDUklQVF9YWFgiPkZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWDwvYT4gdmFsdWVzKSBpcyBzdG9yZWQgYXMgYW4gYXJyYXkgd2l0aCAmbHNxdW87bnVtX2dseXBocyZyc3F1bzsgZWxlbWVudHMsIGFzIGZvdW5kIGluIHRoZSBmb250J3MgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gc3RydWN0dXJlLiBUaGUgJmxzcXVvO2dseXBoLXRvLXNjcmlwdC1tYXAmcnNxdW87IHByb3BlcnR5IHJldHVybnMgYSBwb2ludGVyIHRvIHRoaXMgYXJyYXksIHdoaWNoIGNhbiBiZSBtb2RpZmllZCBhcyBuZWVkZWQuIE5vdGUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCBnbHlwaCBnZXRzIHByb2Nlc3NlZCBieSB0aGUgYXV0by1oaW50ZXIgc28gdGhhdCB0aGUgZ2xvYmFsIGFuYWx5c2lzIG9mIHRoZSBmb250IHNoYXBlcyBhY3R1YWxseSB1c2VzIHRoZSBtb2RpZmllZCBtYXBwaW5nLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIGl0IChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgIGxpYnJhcnk7CisgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICAgZmFjZTsKKyAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwICBwcm9wOworCisKKyAgRlRfSW5pdF9GcmVlVHlwZSggJmFtcDtsaWJyYXJ5ICk7CisgIEZUX05ld19GYWNlKCBsaWJyYXJ5LCAiZm9vLnR0ZiIsIDAsICZhbXA7ZmFjZSApOworCisgIHByb3AuZmFjZSA9IGZhY2U7CisKKyAgRlRfUHJvcGVydHlfR2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdseXBoLXRvLXNjcmlwdC1tYXAiLCAmYW1wO3Byb3AgKTsKKworICAvLyBhZGp1c3QgYHByb3AubWFwJyBhcyBuZWVkZWQgcmlnaHQgaGVyZQorCisgIEZUX0xvYWRfR2x5cGgoIGZhY2UsIC4uLiwgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCApOworPC9wcmU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWCI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQVVUT0hJTlRFUl9IIChmdGF1dG9oLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI0ZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkUiPkZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkU8L2E+ICAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNGVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTiI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU48L2E+ICAxCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI0ZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSyI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLPC9hPiAgICAyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI0ZUX0FVVE9ISU5URVJfU0NSSVBUX0lORElDIj5GVF9BVVRPSElOVEVSX1NDUklQVF9JTkRJQzwvYT4gIDMKKzwvcHJlPgorCis8cD48Yj5FeHBlcmltZW50YWw8L2I+IDxiPm9ubHk8L2I+PC9wPgorPHA+QSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgPGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjZ2x5cGgtdG8tc2NyaXB0LW1hcCI+Z2x5cGgtdG8tc2NyaXB0LW1hcDwvYT4gcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgc2NyaXB0IHN1Ym1vZHVsZSB0aGUgYXV0by1oaW50ZXIgc2hvdWxkIHVzZSBmb3IgaGludGluZyBhIHBhcnRpY3VsYXIgZ2x5cGguPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkUiPkZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Eb24ndCBhdXRvLWhpbnQgdGhpcyBnbHlwaC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTiI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BcHBseSB0aGUgbGF0aW4gYXV0by1oaW50ZXIuIEZvciB0aGUgYXV0by1oaW50ZXIsICZsc3F1bztsYXRpbiZyc3F1bzsgaXMgYSB2ZXJ5IGJyb2FkIHRlcm0sIGluY2x1ZGluZyBDeXJpbGxpYyBhbmQgR3JlZWsgYWxzbyBzaW5jZSBjaGFyYWN0ZXJzIGZyb20gdGhvc2Ugc2NyaXB0cyBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gY29uc3RyYWludHMuPC9wPgorPHA+QnkgZGVmYXVsdCwgY2hhcmFjdGVycyBmcm9tIHRoZSBmb2xsb3dpbmcgVW5pY29kZSByYW5nZXMgYXJlIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBVKzAwMjAgLSBVKzAwN0YgIC8vIEJhc2ljIExhdGluIChubyBjb250cm9sIGNoYXJhY3RlcnMpCisgIFUrMDBBMCAtIFUrMDBGRiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IChubyBjb250cm9sIGNoYXJhY3RlcnMpCisgIFUrMDEwMCAtIFUrMDE3RiAgLy8gTGF0aW4gRXh0ZW5kZWQtQQorICBVKzAxODAgLSBVKzAyNEYgIC8vIExhdGluIEV4dGVuZGVkLUIKKyAgVSswMjUwIC0gVSswMkFGICAvLyBJUEEgRXh0ZW5zaW9ucworICBVKzAyQjAgLSBVKzAyRkYgIC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycworICBVKzAzMDAgLSBVKzAzNkYgIC8vIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcworICBVKzAzNzAgLSBVKzAzRkYgIC8vIEdyZWVrIGFuZCBDb3B0aWMKKyAgVSswNDAwIC0gVSswNEZGICAvLyBDeXJpbGxpYworICBVKzA1MDAgLSBVKzA1MkYgIC8vIEN5cmlsbGljIFN1cHBsZW1lbnQKKyAgVSsxRDAwIC0gVSsxRDdGICAvLyBQaG9uZXRpYyBFeHRlbnNpb25zCisgIFUrMUQ4MCAtIFUrMURCRiAgLy8gUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50CisgIFUrMURDMCAtIFUrMURGRiAgLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQKKyAgVSsxRTAwIC0gVSsxRUZGICAvLyBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsCisgIFUrMUYwMCAtIFUrMUZGRiAgLy8gR3JlZWsgRXh0ZW5kZWQKKyAgVSsyMDAwIC0gVSsyMDZGICAvLyBHZW5lcmFsIFB1bmN0dWF0aW9uCisgIFUrMjA3MCAtIFUrMjA5RiAgLy8gU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzCisgIFUrMjBBMCAtIFUrMjBDRiAgLy8gQ3VycmVuY3kgU3ltYm9scworICBVKzIxNTAgLSBVKzIxOEYgIC8vIE51bWJlciBGb3JtcworICBVKzI0NjAgLSBVKzI0RkYgIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpY3MKKyAgVSsyQzYwIC0gVSsyQzdGICAvLyBMYXRpbiBFeHRlbmRlZC1DCisgIFUrMkRFMCAtIFUrMkRGRiAgLy8gQ3lyaWxsaWMgRXh0ZW5kZWQtQQorICBVKzJFMDAgLSBVKzJFN0YgIC8vIFN1cHBsZW1lbnRhbCBQdW5jdHVhdGlvbgorICBVK0E2NDAgLSBVK0E2OUYgIC8vIEN5cmlsbGljIEV4dGVuZGVkLUIKKyAgVStBNzIwIC0gVStBN0ZGICAvLyBMYXRpbiBFeHRlbmRlZC1ECisgIFUrRkIwMCAtIFUrRkIwNiAgLy8gQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoTGF0aW4gTGlnYXR1cmVzKQorIFUrMUQ0MDAgLSBVKzFEN0ZGIC8vIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scworIFUrMUYxMDAgLSBVKzFGMUZGIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpYyBTdXBwbGVtZW50Cis8L3ByZT4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSyI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QXBwbHkgdGhlIENKSyBhdXRvLWhpbnRlciwgY292ZXJpbmcgQ2hpbmVzZSwgSmFwYW5lc2UsIEtvcmVhbiwgb2xkIFZpZXRuYW1lc2UsIGFuZCBzb21lIG90aGVyIHNjcmlwdHMuPC9wPgorPHA+QnkgZGVmYXVsdCwgY2hhcmFjdGVycyBmcm9tIHRoZSBmb2xsb3dpbmcgVW5pY29kZSByYW5nZXMgYXJlIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBVKzExMDAgLSBVKzExRkYgIC8vIEhhbmd1bCBKYW1vCisgIFUrMkU4MCAtIFUrMkVGRiAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQKKyAgVSsyRjAwIC0gVSsyRkRGICAvLyBLYW5neGkgUmFkaWNhbHMKKyAgVSsyRkYwIC0gVSsyRkZGICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzCisgIFUrMzAwMCAtIFUrMzAzRiAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uCisgIFUrMzA0MCAtIFUrMzA5RiAgLy8gSGlyYWdhbmEKKyAgVSszMEEwIC0gVSszMEZGICAvLyBLYXRha2FuYQorICBVKzMxMDAgLSBVKzMxMkYgIC8vIEJvcG9tb2ZvCisgIFUrMzEzMCAtIFUrMzE4RiAgLy8gSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbworICBVKzMxOTAgLSBVKzMxOUYgIC8vIEthbmJ1bgorICBVKzMxQTAgLSBVKzMxQkYgIC8vIEJvcG9tb2ZvIEV4dGVuZGVkCisgIFUrMzFDMCAtIFUrMzFFRiAgLy8gQ0pLIFN0cm9rZXMKKyAgVSszMUYwIC0gVSszMUZGICAvLyBLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zCisgIFUrMzIwMCAtIFUrMzJGRiAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocworICBVKzMzMDAgLSBVKzMzRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5CisgIFUrMzQwMCAtIFUrNERCRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQQorICBVKzREQzAgLSBVKzRERkYgIC8vIFlpamluZyBIZXhhZ3JhbSBTeW1ib2xzCisgIFUrNEUwMCAtIFUrOUZGRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocworICBVK0E5NjAgLSBVK0E5N0YgIC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUEKKyAgVStBQzAwIC0gVStEN0FGICAvLyBIYW5ndWwgU3lsbGFibGVzCisgIFUrRDdCMCAtIFUrRDdGRiAgLy8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQgorICBVK0Y5MDAgLSBVK0ZBRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMKKyAgVStGRTEwIC0gVStGRTFGICAvLyBWZXJ0aWNhbCBmb3JtcworICBVK0ZFMzAgLSBVK0ZFNEYgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zCisgIFUrRkYwMCAtIFUrRkZFRiAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKKyBVKzFCMDAwIC0gVSsxQjBGRiAvLyBLYW5hIFN1cHBsZW1lbnQKKyBVKzFEMzAwIC0gVSsxRDM1RiAvLyBUYWkgWHVhbiBIaW5nIFN5bWJvbHMKKyBVKzFGMjAwIC0gVSsxRjJGRiAvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50CisgVSsyMDAwMCAtIFUrMkE2REYgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQgorIFUrMkE3MDAgLSBVKzJCNzNGIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMKKyBVKzJCNzQwIC0gVSsyQjgxRiAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBECisgVSsyRjgwMCAtIFUrMkZBMUYgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50Cis8L3ByZT4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0FVVE9ISU5URVJfU0NSSVBUX0lORElDIj5GVF9BVVRPSElOVEVSX1NDUklQVF9JTkRJQzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFwcGx5IHRoZSBpbmRpYyBhdXRvLWhpbnRlciwgY292ZXJpbmcgYWxsIG1ham9yIHNjcmlwdHMgZnJvbSB0aGUgSW5kaWFuIHN1Yi1jb250aW5lbnQgYW5kIHNvbWUgb3RoZXIgcmVsYXRlZCBzY3JpcHRzIGxpa2UgVGhhaSwgTGFvLCBvciBUaWJldGFuLjwvcD4KKzxwPkJ5IGRlZmF1bHQsIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9sbG93aW5nIFVuaWNvZGUgcmFuZ2VzIGFyZSBhc3NpZ25lZCB0byB0aGlzIHN1Ym1vZHVsZS48L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgVSswOTAwIC0gVSswREZGICAvLyBJbmRpYyBSYW5nZQorICBVKzBGMDAgLSBVKzBGRkYgIC8vIFRpYmV0YW4KKyAgVSsxOTAwIC0gVSsxOTRGICAvLyBMaW1idQorICBVKzFCODAgLSBVKzFCQkYgIC8vIFN1bmRhbmVzZQorICBVKzFDODAgLSBVKzFDREYgIC8vIE1lZXRlaSBNYXlhaworICBVK0E4MDAgLSBVK0E4MkYgIC8vIFN5bG90aSBOYWdyaQorIFUrMTE4MDAgLSBVKzExOERGIC8vIFNoYXJhZGEKKzwvcHJlPgorPHA+Tm90ZSB0aGF0IGN1cnJlbnRseSBJbmRpYyBzdXBwb3J0IGlzIHJ1ZGltZW50YXJ5IG9ubHksIG1pc3NpbmcgYmx1ZSB6b25lIHN1cHBvcnQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwIj5GVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXA8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9BVVRPSElOVEVSX0ggKGZ0YXV0b2guaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXBfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2U7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4qICBtYXA7CisKKyAgfSA8Yj5GVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXA8L2I+OworPC9wcmU+CisKKzxwPjxiPkV4cGVyaW1lbnRhbDwvYj4gPGI+b25seTwvYj48L3A+Cis8cD5UaGUgZGF0YSBleGNoYW5nZSBzdHJ1Y3R1cmUgZm9yIHRoZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNnbHlwaC10by1zY3JpcHQtbWFwIj5nbHlwaC10by1zY3JpcHQtbWFwPC9hPiBwcm9wZXJ0eS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9ImZhbGxiYWNrLXNjcmlwdCI+ZmFsbGJhY2stc2NyaXB0PC9oMz4KKworPHA+PGI+RXhwZXJpbWVudGFsPC9iPiA8Yj5vbmx5PC9iPjwvcD4KKzxwPklmIG5vIGF1dG8taGludGVyIHNjcmlwdCBtb2R1bGUgY2FuIGJlIGFzc2lnbmVkIHRvIGEgZ2x5cGgsIGEgZmFsbGJhY2sgc2NyaXB0IGdldHMgYXNzaWduZWQgdG8gaXQgKHNlZSBhbHNvIHRoZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNnbHlwaC10by1zY3JpcHQtbWFwIj5nbHlwaC10by1zY3JpcHQtbWFwPC9hPiBwcm9wZXJ0eSkuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgPGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIj5GVF9BVVRPSElOVEVSX1NDUklQVF9DSks8L2E+LiBVc2luZyB0aGUgJmxzcXVvO2ZhbGxiYWNrLXNjcmlwdCZyc3F1bzsgcHJvcGVydHksIHRoaXMgZmFsbGJhY2sgdmFsdWUgY2FuIGJlIGNoYW5nZWQuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgIEZUX1VJbnQgICAgIGZhbGxiYWNrX3NjcmlwdCA9IEZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkU7CisKKworICBGVF9Jbml0X0ZyZWVUeXBlKCAmYW1wO2xpYnJhcnkgKTsKKworICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJhdXRvZml0dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFsbGJhY2stc2NyaXB0IiwgJmFtcDtmYWxsYmFja19zY3JpcHQgKTsKKzwvcHJlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+IGFsc28uPC9wPgorPHA+SXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSByaWdodCB0aW1pbmcgZm9yIGNoYW5naW5nIHRoaXMgdmFsdWU6IFRoZSBjcmVhdGlvbiBvZiB0aGUgZ2x5cGgtdG8tc2NyaXB0IG1hcCB0aGF0IGV2ZW50dWFsbHkgdXNlcyB0aGUgZmFsbGJhY2sgc2NyaXB0IHZhbHVlIGdldHMgdHJpZ2dlcmVkIGVpdGhlciBieSBzZXR0aW5nIG9yIHJlYWRpbmcgYSBmYWNlLXNwZWNpZmljIHByb3BlcnR5IGxpa2UgPGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjZ2x5cGgtdG8tc2NyaXB0LW1hcCI+Z2x5cGgtdG8tc2NyaXB0LW1hcDwvYT4sIG9yIGJ5IGF1dG8taGludGluZyBhbnkgZ2x5cGggZnJvbSB0aGF0IGZhY2UuIEluIHBhcnRpY3VsYXIsIGlmIHlvdSBoYXZlIGFscmVhZHkgY3JlYXRlZCBhbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBzdHJ1Y3R1cmUgYnV0IG5vdCBsb2FkZWQgYW55IGdseXBoICh1c2luZyB0aGUgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZmFsbGJhY2sgc2NyaXB0IHdpbGwgYWZmZWN0IHRoaXMgZmFjZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9ImRlZmF1bHQtc2NyaXB0Ij5kZWZhdWx0LXNjcmlwdDwvaDM+CisKKzxwPjxiPkV4cGVyaW1lbnRhbDwvYj4gPGI+b25seTwvYj48L3A+Cis8cD5JZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlogdG8gbWFrZSB0aGUgSGFyZkJ1enogbGlicmFyeSBhY2Nlc3MgT3BlblR5cGUgZmVhdHVyZXMgZm9yIGdldHRpbmcgYmV0dGVyIGdseXBoIGNvdmVyYWdlcywgdGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSAoYXV0by1maXR0ZXIpIHNjcmlwdCB0byBiZSB1c2VkIGZvciB0aGUgZGVmYXVsdCAoT3BlblR5cGUpIHNjcmlwdCBkYXRhIG9mIGEgZm9udCdzIEdTVUIgdGFibGUuIEZlYXR1cmVzIGZvciB0aGUgZGVmYXVsdCBzY3JpcHQgYXJlIGludGVuZGVkIGZvciBhbGwgc2NyaXB0cyBub3QgZXhwbGljaXRseSBoYW5kbGVkIGluIEdTVUI7IGFuIGV4YW1wbGUgaXMgYSAmbHNxdW87ZGxpZyZyc3F1bzsgZmVhdHVyZSwgY29udGFpbmluZyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNoYXJhY3RlcnMgJmxzcXVvO1QmcnNxdW87LCAmbHNxdW87RSZyc3F1bzssIGFuZCAmbHNxdW87TCZyc3F1bzsgdG8gZm9ybSBhICZsc3F1bztURUwmcnNxdW87IGxpZ2F0dXJlLjwvcD4KKzxwPkJ5IGRlZmF1bHQsIHRoaXMgaXMgPGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIj5GVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTjwvYT4uIFVzaW5nIHRoZSAmbHNxdW87ZGVmYXVsdC1zY3JpcHQmcnNxdW87IHByb3BlcnR5LCB0aGlzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGNoYW5nZWQuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgIEZUX1VJbnQgICAgIGRlZmF1bHRfc2NyaXB0ID0gRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORTsKKworCisgIEZUX0luaXRfRnJlZVR5cGUoICZhbXA7bGlicmFyeSApOworCisgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0LXNjcmlwdCIsICZhbXA7ZGVmYXVsdF9zY3JpcHQgKTsKKzwvcHJlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+IGFsc28uPC9wPgorPHA+SXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSByaWdodCB0aW1pbmcgZm9yIGNoYW5naW5nIHRoaXMgdmFsdWU6IFRoZSBjcmVhdGlvbiBvZiB0aGUgZ2x5cGgtdG8tc2NyaXB0IG1hcCB0aGF0IGV2ZW50dWFsbHkgdXNlcyB0aGUgZGVmYXVsdCBzY3JpcHQgdmFsdWUgZ2V0cyB0cmlnZ2VyZWQgZWl0aGVyIGJ5IHNldHRpbmcgb3IgcmVhZGluZyBhIGZhY2Utc3BlY2lmaWMgcHJvcGVydHkgbGlrZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNnbHlwaC10by1zY3JpcHQtbWFwIj5nbHlwaC10by1zY3JpcHQtbWFwPC9hPiwgb3IgYnkgYXV0by1oaW50aW5nIGFueSBnbHlwaCBmcm9tIHRoYXQgZmFjZS4gSW4gcGFydGljdWxhciwgaWYgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkIGFuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IHN0cnVjdHVyZSBidXQgbm90IGxvYWRlZCBhbnkgZ2x5cGggKHVzaW5nIHRoZSBhdXRvLWhpbnRlciksIGEgY2hhbmdlIG9mIHRoZSBkZWZhdWx0IHNjcmlwdCB3aWxsIGFmZmVjdCB0aGlzIGZhY2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJpbmNyZWFzZS14LWhlaWdodCI+aW5jcmVhc2UteC1oZWlnaHQ8L2gzPgorCis8cD5Gb3IgcHBlbSB2YWx1ZXMgaW4gdGhlIHJhbmdlIDYmbmJzcDsmbHQ7PSBwcGVtICZsdDs9ICZsc3F1bztpbmNyZWFzZS14LWhlaWdodCZyc3F1bzssIHJvdW5kIHVwIHRoZSBmb250J3MgeCZuYnNwO2hlaWdodCBtdWNoIG1vcmUgb2Z0ZW4gdGhhbiBub3JtYWxseS4gSWYgdGhlIHZhbHVlIGlzIHNldCB0byZuYnNwOzAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB0aGlzIGZlYXR1cmUgaXMgc3dpdGNoZWQgb2ZmLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBpbXByb3ZlIHRoZSBsZWdpYmlsaXR5IG9mIHNtYWxsIGZvbnQgc2l6ZXMgaWYgbmVjZXNzYXJ5LjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgbGlicmFyeTsKKyAgRlRfRmFjZSAgICAgICAgICAgICAgICAgIGZhY2U7CisgIEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0ICBwcm9wOworCisKKyAgRlRfSW5pdF9GcmVlVHlwZSggJmFtcDtsaWJyYXJ5ICk7CisgIEZUX05ld19GYWNlKCBsaWJyYXJ5LCAiZm9vLnR0ZiIsIDAsICZhbXA7ZmFjZSApOworICBGVF9TZXRfQ2hhcl9TaXplKCBmYWNlLCAxMCAqIDY0LCAwLCA3MiwgMCApOworCisgIHByb3AuZmFjZSAgPSBmYWNlOworICBwcm9wLmxpbWl0ID0gMTQ7CisKKyAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY3JlYXNlLXgtaGVpZ2h0IiwgJmFtcDtwcm9wICk7Cis8L3ByZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X0dldCI+RlRfUHJvcGVydHlfR2V0PC9hPiBhbHNvLjwvcD4KKzxwPlNldCB0aGlzIHZhbHVlIHJpZ2h0IGFmdGVyIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X0NoYXJfU2l6ZSI+RlRfU2V0X0NoYXJfU2l6ZTwvYT4sIGJ1dCBiZWZvcmUgbG9hZGluZyBhbnkgZ2x5cGggKHVzaW5nIHRoZSBhdXRvLWhpbnRlcikuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCI+RlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9BVVRPSElOVEVSX0ggKGZ0YXV0b2guaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodF8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICBsaW1pdDsKKworICB9IDxiPkZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0PC9iPjsKKzwvcHJlPgorCis8cD5UaGUgZGF0YSBleGNoYW5nZSBzdHJ1Y3R1cmUgZm9yIHRoZSA8YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNpbmNyZWFzZS14LWhlaWdodCI+aW5jcmVhc2UteC1oZWlnaHQ8L2E+IHByb3BlcnR5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0id2FycGluZyI+d2FycGluZzwvaDM+CisKKzxwPjxiPkV4cGVyaW1lbnRhbDwvYj4gPGI+b25seTwvYj48L3A+Cis8cD5JZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggb3B0aW9uIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiB0byBhY3RpdmF0ZSB0aGUgd2FycCBoaW50aW5nIGNvZGUgaW4gdGhlIGF1dG8taGludGVyLCB0aGlzIHByb3BlcnR5IHN3aXRjaGVzIHdhcnBpbmcgb24gYW5kIG9mZi48L3A+Cis8cD5XYXJwaW5nIG9ubHkgd29ya3MgaW4gJmxzcXVvO2xpZ2h0JnJzcXVvOyBhdXRvLWhpbnRpbmcgbW9kZS4gVGhlIGlkZWEgb2YgdGhlIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggYWxvbmcgdGhlIG5vbi1oaW50ZWQgZGltZW5zaW9uICh3aGljaCBpcyB1c3VhbGx5IHRoZSBob3Jpem9udGFsIGF4aXMpIHNvIHRoYXQgYXMgbXVjaCBvZiBpdHMgc2VnbWVudHMgYXJlIGFsaWduZWQgKG1vcmUgb3IgbGVzcykgdG8gdGhlIGdyaWQuIFRvIGZpbmQgb3V0IGEgZ2x5cGgncyBvcHRpbWFsIHNjYWxpbmcgYW5kIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuPC9wPgorPHA+QnkgZGVmYXVsdCwgd2FycGluZyBpcyBvZmYuIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0byBzd2l0Y2ggb24gd2FycGluZyAob21pdHRpbmcgdGhlIGVycm9yIGhhbmRsaW5nKS48L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgRlRfQm9vbCAgICAgd2FycGluZyA9IDE7CisKKworICBGVF9Jbml0X0ZyZWVUeXBlKCAmYW1wO2xpYnJhcnkgKTsKKworICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJhdXRvZml0dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FycGluZyIsICZhbXA7d2FycGluZyApOworPC9wcmU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Qcm9wZXJ0eV9HZXQiPkZUX1Byb3BlcnR5X0dldDwvYT4gYWxzby48L3A+Cis8cD5UaGUgd2FycGluZyBjb2RlIGNhbiBhbHNvIGNoYW5nZSBhZHZhbmNlIHdpZHRocy4gSGF2ZSBhIGxvb2sgYXQgdGhlICZsc3F1bztsc2JfZGVsdGEmcnNxdW87IGFuZCAmbHNxdW87cnNiX2RlbHRhJnJzcXVvOyBmaWVsZHMgaW4gdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdFJlYyI+RlRfR2x5cGhTbG90UmVjPC9hPiBzdHJ1Y3R1cmUgZm9yIGRldGFpbHMgb24gaW1wcm92aW5nIGludGVyLWdseXBoIGRpc3RhbmNlcyB3aGlsZSByZW5kZXJpbmcuPC9wPgorPHA+U2luY2Ugd2FycGluZyBpcyBhIGdsb2JhbCBwcm9wZXJ0eSBvZiB0aGUgYXV0by1oaW50ZXIgaXQgaXMgYmVzdCB0byBjaGFuZ2UgaXRzIHZhbHVlIGJlZm9yZSByZW5kZXJpbmcgYW55IGZhY2UuIE90aGVyd2lzZSwgeW91IHNob3VsZCByZWxvYWQgYWxsIGZhY2VzIHRoYXQgZ2V0IGF1dG8taGludGVkIGluICZsc3F1bztsaWdodCZyc3F1bzsgaGludGluZyBtb2RlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyY2QzNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItYmFzZV9pbnRlcmZhY2UuaHRtbApAQCAtMCwwICsxLDI5NDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5CYXNlIEludGVyZmFjZTwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9NZXRyaWNzIj5GVF9HbHlwaF9NZXRyaWNzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MT0FEX0NPTE9SIj5GVF9MT0FEX0NPTE9SPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N1YkdseXBoIj5GVF9TdWJHbHlwaDwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TaXplIj5GVF9TaXplPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCI+RlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2x5cGhTbG90Ij5GVF9HbHlwaFNsb3Q8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0JpdG1hcF9TaXplIj5GVF9CaXRtYXBfU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNIj5GVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk08L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQ2hhck1hcCI+RlRfQ2hhck1hcDwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9GT1JDRV9BVVRPSElOVCI+RlRfTE9BRF9GT1JDRV9BVVRPSElOVDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9FbmNvZGluZyI+RlRfRW5jb2Rpbmc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0luaXRfRnJlZVR5cGUiPkZUX0luaXRfRnJlZVR5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfTk9fUkVDVVJTRSI+RlRfTE9BRF9OT19SRUNVUlNFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0RvbmVfRnJlZVR5cGUiPkZUX0RvbmVfRnJlZVR5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfUEVEQU5USUMiPkZUX0xPQURfUEVEQU5USUM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GYWNlUmVjIj5GVF9GYWNlUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfVEFSR0VUX05PUk1BTCI+RlRfTE9BRF9UQVJHRVRfTk9STUFMPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0RvbmVfRmFjZSI+RlRfRG9uZV9GYWNlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MT0FEX1RBUkdFVF9MSUdIVCI+RlRfTE9BRF9UQVJHRVRfTElHSFQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRkFDRV9GTEFHX1NDQUxBQkxFIj5GVF9GQUNFX0ZMQUdfU0NBTEFCTEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1JlZmVyZW5jZV9GYWNlIj5GVF9SZWZlcmVuY2VfRmFjZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9UQVJHRVRfTU9OTyI+RlRfTE9BRF9UQVJHRVRfTU9OTzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMiPkZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTmV3X01lbW9yeV9GYWNlIj5GVF9OZXdfTWVtb3J5X0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfVEFSR0VUX0xDRCI+RlRfTE9BRF9UQVJHRVRfTENEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCI+RlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9PcGVuX0ZhY2UiPkZUX09wZW5fRmFjZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9UQVJHRVRfTENEX1YiPkZUX0xPQURfVEFSR0VUX0xDRF9WPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMIj5GVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3Blbl9BcmdzIj5GVF9PcGVuX0FyZ3M8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMIj5GVF9GQUNFX0ZMQUdfVkVSVElDQUw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MT0FEX1RBUkdFVF9NT0RFIj5GVF9MT0FEX1RBUkdFVF9NT0RFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19DT0xPUiI+RlRfRkFDRV9GTEFHX0NPTE9SPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BdHRhY2hfRmlsZSI+RlRfQXR0YWNoX0ZpbGU8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRkFDRV9GTEFHX1NGTlQiPkZUX0ZBQ0VfRkxBR19TRk5UPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BdHRhY2hfU3RyZWFtIj5GVF9BdHRhY2hfU3RyZWFtPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9SZW5kZXJfR2x5cGgiPkZUX1JlbmRlcl9HbHlwaDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIj5GVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9SZW5kZXJfTW9kZSI+RlRfUmVuZGVyX01vZGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRkFDRV9GTEFHX1RSSUNLWSI+RlRfRkFDRV9GTEFHX1RSSUNLWTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2V0X0NoYXJfU2l6ZSI+RlRfU2V0X0NoYXJfU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2V0X0tlcm5pbmciPkZUX0dldF9LZXJuaW5nPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19LRVJOSU5HIj5GVF9GQUNFX0ZMQUdfS0VSTklORzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2V0X1BpeGVsX1NpemVzIj5GVF9TZXRfUGl4ZWxfU2l6ZXM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0tlcm5pbmdfTW9kZSI+RlRfS2VybmluZ19Nb2RlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTIj5GVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmVxdWVzdF9TaXplIj5GVF9SZXF1ZXN0X1NpemU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9UcmFja19LZXJuaW5nIj5GVF9HZXRfVHJhY2tfS2VybmluZzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMiPkZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2VsZWN0X1NpemUiPkZUX1NlbGVjdF9TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfR2x5cGhfTmFtZSI+RlRfR2V0X0dseXBoX05hbWU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSI+RlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2l6ZV9SZXF1ZXN0X1R5cGUiPkZUX1NpemVfUmVxdWVzdF9UeXBlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfUG9zdHNjcmlwdF9OYW1lIj5GVF9HZXRfUG9zdHNjcmlwdF9OYW1lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19ISU5URVIiPkZUX0ZBQ0VfRkxBR19ISU5URVI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NpemVfUmVxdWVzdFJlYyI+RlRfU2l6ZV9SZXF1ZXN0UmVjPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19UUklDS1kiPkZUX0ZBQ0VfRkxBR19UUklDS1k8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NpemVfUmVxdWVzdCI+RlRfU2l6ZV9SZXF1ZXN0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9DaGFyTWFwUmVjIj5GVF9DaGFyTWFwUmVjPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NldF9UcmFuc2Zvcm0iPkZUX1NldF9UcmFuc2Zvcm08L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NlbGVjdF9DaGFybWFwIj5GVF9TZWxlY3RfQ2hhcm1hcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9IQVNfSE9SSVpPTlRBTCI+RlRfSEFTX0hPUklaT05UQUw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xvYWRfR2x5cGgiPkZUX0xvYWRfR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NldF9DaGFybWFwIj5GVF9TZXRfQ2hhcm1hcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9IQVNfVkVSVElDQUwiPkZUX0hBU19WRVJUSUNBTDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2V0X0NoYXJfSW5kZXgiPkZUX0dldF9DaGFyX0luZGV4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQ2hhcm1hcF9JbmRleCI+RlRfR2V0X0NoYXJtYXBfSW5kZXg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSEFTX0tFUk5JTkciPkZUX0hBU19LRVJOSU5HPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfRmlyc3RfQ2hhciI+RlRfR2V0X0ZpcnN0X0NoYXI8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSEFTX0ZJWEVEX1NJWkVTIj5GVF9IQVNfRklYRURfU0laRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9OZXh0X0NoYXIiPkZUX0dldF9OZXh0X0NoYXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9GU1R5cGVfRmxhZ3MiPkZUX0dldF9GU1R5cGVfRmxhZ3M8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSEFTX0dMWVBIX05BTUVTIj5GVF9IQVNfR0xZUEhfTkFNRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9OYW1lX0luZGV4Ij5GVF9HZXRfTmFtZV9JbmRleDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2V0X1N1YkdseXBoX0luZm8iPkZUX0dldF9TdWJHbHlwaF9JbmZvPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0hBU19NVUxUSVBMRV9NQVNURVJTIj5GVF9IQVNfTVVMVElQTEVfTUFTVEVSUzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTG9hZF9DaGFyIj5GVF9Mb2FkX0NoYXI8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSEFTX0NPTE9SIj5GVF9IQVNfQ09MT1I8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0ZhY2VfSW50ZXJuYWwiPkZUX0ZhY2VfSW50ZXJuYWw8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfT1BFTl9NRU1PUlkiPkZUX09QRU5fTUVNT1JZPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TaXplX0ludGVybmFsIj5GVF9TaXplX0ludGVybmFsPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0lTX1NGTlQiPkZUX0lTX1NGTlQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX09QRU5fU1RSRUFNIj5GVF9PUEVOX1NUUkVBTTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2xvdF9JbnRlcm5hbCI+RlRfU2xvdF9JbnRlcm5hbDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9JU19TQ0FMQUJMRSI+RlRfSVNfU0NBTEFCTEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX09QRU5fUEFUSE5BTUUiPkZUX09QRU5fUEFUSE5BTUU8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSVNfRklYRURfV0lEVEgiPkZUX0lTX0ZJWEVEX1dJRFRIPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9PUEVOX0RSSVZFUiI+RlRfT1BFTl9EUklWRVI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSVNfQ0lEX0tFWUVEIj5GVF9JU19DSURfS0VZRUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX09QRU5fUEFSQU1TIj5GVF9PUEVOX1BBUkFNUzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU1RZTEVfRkxBR19YWFgiPkZUX1NUWUxFX0ZMQUdfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0lTX1RSSUNLWSI+RlRfSVNfVFJJQ0tZPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9PUEVOX1hYWCI+RlRfT1BFTl9YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9ERUZBVUxUIj5GVF9MT0FEX0RFRkFVTFQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TVFlMRV9GTEFHX0JPTEQiPkZUX1NUWUxFX0ZMQUdfQk9MRDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9SRU5ERVIiPkZUX0xPQURfUkVOREVSPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TVFlMRV9GTEFHX0lUQUxJQyI+RlRfU1RZTEVfRkxBR19JVEFMSUM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfTU9OT0NIUk9NRSI+RlRfTE9BRF9NT05PQ0hST01FPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TVUJHTFlQSF9GTEFHX1hYWCI+RlRfU1VCR0xZUEhfRkxBR19YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9MSU5FQVJfREVTSUdOIj5GVF9MT0FEX0xJTkVBUl9ERVNJR048L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0ZTVFlQRV9YWFgiPkZUX0ZTVFlQRV9YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU2l6ZVJlYyI+RlRfU2l6ZVJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9OT19TQ0FMRSI+RlRfTE9BRF9OT19TQ0FMRTwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TaXplX01ldHJpY3MiPkZUX1NpemVfTWV0cmljczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9OT19ISU5USU5HIj5GVF9MT0FEX05PX0hJTlRJTkc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0hBU19GQVNUX0dMWVBIUyI+RlRfSEFTX0ZBU1RfR0xZUEhTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xPQURfTk9fQklUTUFQIj5GVF9MT0FEX05PX0JJVE1BUDwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaFNsb3RSZWMiPkZUX0dseXBoU2xvdFJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTE9BRF9OT19BVVRPSElOVCI+RlRfTE9BRF9OT19BVVRPSElOVDwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1vc3QgaW1wb3J0YW50IHB1YmxpYyBoaWdoLWxldmVsIEFQSSBmdW5jdGlvbnMgb2YgRnJlZVR5cGUmbmJzcDsyLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfTGlicmFyeVJlY18gICo8Yj5GVF9MaWJyYXJ5PC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgaW5zdGFuY2UuIEVhY2ggJmxzcXVvO2xpYnJhcnkmcnNxdW87IGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGUgb3RoZXJzOyBpdCBpcyB0aGUgJmxzcXVvO3Jvb3QmcnNxdW87IG9mIGEgc2V0IG9mIG9iamVjdHMgbGlrZSBmb250cywgZmFjZXMsIHNpemVzLCBldGMuPC9wPgorPHA+SXQgYWxzbyBlbWJlZHMgYSBtZW1vcnkgbWFuYWdlciAoc2VlIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+KSwgYXMgd2VsbCBhcyBhIHNjYW4tbGluZSBjb252ZXJ0ZXIgb2JqZWN0IChzZWUgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3RlciI+RlRfUmFzdGVyPC9hPikuPC9wPgorPHA+SW4gbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIGl0IGlzIGVhc2llc3QgdG8gdXNlIG9uZSAmbHNxdW87RlRfTGlicmFyeSZyc3F1bzsgb2JqZWN0IHBlciB0aHJlYWQuIEluIGNhc2UgdGhpcyBpcyB0b28gY3VtYmVyc29tZSwgYSBzaW5nbGUgJmxzcXVvO0ZUX0xpYnJhcnkmcnNxdW87IG9iamVjdCBhY3Jvc3MgdGhyZWFkcyBpcyBwb3NzaWJsZSBhbHNvIChzaW5jZSBGcmVlVHlwZSB2ZXJzaW9uIDIuNS42KSwgYXMgbG9uZyBhcyBhIG11dGV4IGxvY2sgaXMgdXNlZCBhcm91bmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTmV3X0ZhY2UiPkZUX05ld19GYWNlPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+TGlicmFyeSBvYmplY3RzIGFyZSBub3JtYWxseSBjcmVhdGVkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0luaXRfRnJlZVR5cGUiPkZUX0luaXRfRnJlZVR5cGU8L2E+LCBhbmQgZGVzdHJveWVkIHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GcmVlVHlwZSI+RlRfRG9uZV9GcmVlVHlwZTwvYT4uIElmIHlvdSBuZWVkIHJlZmVyZW5jZS1jb3VudGluZyAoY2YuIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1JlZmVyZW5jZV9MaWJyYXJ5Ij5GVF9SZWZlcmVuY2VfTGlicmFyeTwvYT4pLCB1c2UgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTmV3X0xpYnJhcnkiPkZUX05ld19MaWJyYXJ5PC9hPiBhbmQgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfRG9uZV9MaWJyYXJ5Ij5GVF9Eb25lX0xpYnJhcnk8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRmFjZSI+RlRfRmFjZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9GYWNlUmVjXyogIDxiPkZUX0ZhY2U8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGEgZ2l2ZW4gdHlwb2dyYXBoaWMgZmFjZSBvYmplY3QuIEEgZmFjZSBvYmplY3QgbW9kZWxzIGEgZ2l2ZW4gdHlwZWZhY2UsIGluIGEgZ2l2ZW4gc3R5bGUuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5FYWNoIGZhY2Ugb2JqZWN0IGFsc28gb3ducyBhIHNpbmdsZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HbHlwaFNsb3QiPkZUX0dseXBoU2xvdDwvYT4gb2JqZWN0LCBhcyB3ZWxsIGFzIG9uZSBvciBtb3JlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+IG9iamVjdHMuPC9wPgorPHA+VXNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX05ld19GYWNlIj5GVF9OZXdfRmFjZTwvYT4gb3IgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+IHRvIGNyZWF0ZSBhIG5ldyBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gZmlsZXBhdGhuYW1lIG9yIGEgY3VzdG9tIGlucHV0IHN0cmVhbS48L3A+Cis8cD5Vc2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+IHRvIGRlc3Ryb3kgaXQgKGFsb25nIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS48L3A+Cis8cD5BbiAmbHNxdW87RlRfRmFjZSZyc3F1bzsgb2JqZWN0IGNhbiBvbmx5IGJlIHNhZmVseSB1c2VkIGZyb20gb25lIHRocmVhZCBhdCBhIHRpbWUuIFNpbWlsYXJseSwgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mICZsc3F1bztGVF9GYWNlJnJzcXVvOyB3aXRoIHRoZSBzYW1lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+IG9iamVjdCBjYW4gb25seSBiZSBkb25lIGZyb20gb25lIHRocmVhZCBhdCBhIHRpbWUuIE9uIHRoZSBvdGhlciBoYW5kLCBmdW5jdGlvbnMgbGlrZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPiBhbmQgaXRzIHNpYmxpbmdzIGFyZSB0aHJlYWQtc2FmZSBhbmQgZG8gbm90IG5lZWQgdGhlIGxvY2sgdG8gYmUgaGVsZCBhcyBsb25nIGFzIHRoZSBzYW1lICZsc3F1bztGVF9GYWNlJnJzcXVvOyBvYmplY3QgaXMgbm90IHVzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuPC9wPgorCis8aDQ+YWxzbzwvaDQ+Cis8cD5TZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZVJlYyI+RlRfRmFjZVJlYzwvYT4gZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIGZhY2Ugb2JqZWN0LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU2l6ZSI+RlRfU2l6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9TaXplUmVjXyogIDxiPkZUX1NpemU8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGEgZmFjZSBzY2FsZWQgdG8gYSBnaXZlbiBjaGFyYWN0ZXIgc2l6ZS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkVhY2ggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gaGFzIGFuIDxpPmFjdGl2ZTwvaT4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0IHRoYXQgaXMgdXNlZCBieSBmdW5jdGlvbnMgbGlrZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPiB0byBkZXRlcm1pbmUgdGhlIHNjYWxpbmcgdHJhbnNmb3JtYXRpb24gdGhhdCBpbiB0dXJuIGlzIHVzZWQgdG8gbG9hZCBhbmQgaGludCBnbHlwaHMgYW5kIG1ldHJpY3MuPC9wPgorPHA+WW91IGNhbiB1c2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X0NoYXJfU2l6ZSI+RlRfU2V0X0NoYXJfU2l6ZTwvYT4sIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NldF9QaXhlbF9TaXplcyI+RlRfU2V0X1BpeGVsX1NpemVzPC9hPiwgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVxdWVzdF9TaXplIj5GVF9SZXF1ZXN0X1NpemU8L2E+IG9yIGV2ZW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2VsZWN0X1NpemUiPkZUX1NlbGVjdF9TaXplPC9hPiB0byBjaGFuZ2UgdGhlIGNvbnRlbnQgKGkuZS4sIHRoZSBzY2FsaW5nIHZhbHVlcykgb2YgdGhlIGFjdGl2ZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPi48L3A+Cis8cD5Zb3UgY2FuIHVzZSA8YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX05ld19TaXplIj5GVF9OZXdfU2l6ZTwvYT4gdG8gY3JlYXRlIGFkZGl0aW9uYWwgc2l6ZSBvYmplY3RzIGZvciBhIGdpdmVuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+LCBidXQgdGhleSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIGZ1bmN0aW9ucyB1bnRpbCB5b3UgYWN0aXZhdGUgaXQgdGhyb3VnaCA8YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX0FjdGl2YXRlX1NpemUiPkZUX0FjdGl2YXRlX1NpemU8L2E+LiBPbmx5IG9uZSBzaXplIGNhbiBiZSBhY3RpdmF0ZWQgYXQgYW55IGdpdmVuIHRpbWUgcGVyIGZhY2UuPC9wPgorCis8aDQ+YWxzbzwvaDQ+Cis8cD5TZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZVJlYyI+RlRfU2l6ZVJlYzwvYT4gZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIHNpemUgb2JqZWN0LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2x5cGhTbG90Ij5GVF9HbHlwaFNsb3Q8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfR2x5cGhTbG90UmVjXyogIDxiPkZUX0dseXBoU2xvdDwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSBnaXZlbiAmbHNxdW87Z2x5cGggc2xvdCZyc3F1bzsuIEEgc2xvdCBpcyBhIGNvbnRhaW5lciB3aGVyZSBpdCBpcyBwb3NzaWJsZSB0byBsb2FkIGFueSBvZiB0aGUgZ2x5cGhzIGNvbnRhaW5lZCBpbiBpdHMgcGFyZW50IGZhY2UuPC9wPgorPHA+SW4gb3RoZXIgd29yZHMsIGVhY2ggdGltZSB5b3UgY2FsbCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0NoYXIiPkZUX0xvYWRfQ2hhcjwvYT4sIHRoZSBzbG90J3MgY29udGVudCBpcyBlcmFzZWQgYnkgdGhlIG5ldyBnbHlwaCBkYXRhLCBpLmUuLCB0aGUgZ2x5cGgncyBtZXRyaWNzLCBpdHMgaW1hZ2UgKGJpdG1hcCBvciBvdXRsaW5lKSwgYW5kIG90aGVyIGNvbnRyb2wgaW5mb3JtYXRpb24uPC9wPgorCis8aDQ+YWxzbzwvaDQ+Cis8cD5TZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90UmVjIj5GVF9HbHlwaFNsb3RSZWM8L2E+IGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBnbHlwaCBmaWVsZHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DaGFyTWFwIj5GVF9DaGFyTWFwPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX0NoYXJNYXBSZWNfKiAgPGI+RlRfQ2hhck1hcDwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSBnaXZlbiBjaGFyYWN0ZXIgbWFwLiBBIGNoYXJtYXAgaXMgdXNlZCB0byB0cmFuc2xhdGUgY2hhcmFjdGVyIGNvZGVzIGluIGEgZ2l2ZW4gZW5jb2RpbmcgaW50byBnbHlwaCBpbmRleGVzIGZvciBpdHMgcGFyZW50J3MgZmFjZS4gU29tZSBmb250IGZvcm1hdHMgbWF5IHByb3ZpZGUgc2V2ZXJhbCBjaGFybWFwcyBwZXIgZm9udC48L3A+Cis8cD5FYWNoIGZhY2Ugb2JqZWN0IG93bnMgemVybyBvciBtb3JlIGNoYXJtYXBzLCBidXQgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgJmxzcXVvO2FjdGl2ZSZyc3F1bzsgYW5kIHVzZWQgYnkgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X0NoYXJfSW5kZXgiPkZUX0dldF9DaGFyX0luZGV4PC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0NoYXIiPkZUX0xvYWRfQ2hhcjwvYT4uPC9wPgorPHA+VGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoYXJtYXBzIGluIGEgZmFjZSBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgJmxzcXVvO2ZhY2UtJmd0O251bV9jaGFybWFwcyZyc3F1bzsgYW5kICZsc3F1bztmYWNlLSZndDtjaGFybWFwcyZyc3F1bzsgZmllbGRzIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+LjwvcD4KKzxwPlRoZSBjdXJyZW50bHkgYWN0aXZlIGNoYXJtYXAgaXMgYXZhaWxhYmxlIGFzICZsc3F1bztmYWNlLSZndDtjaGFybWFwJnJzcXVvOy4gWW91IHNob3VsZCBjYWxsIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NldF9DaGFybWFwIj5GVF9TZXRfQ2hhcm1hcDwvYT4gdG8gY2hhbmdlIGl0LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+V2hlbiBhIG5ldyBmYWNlIGlzIGNyZWF0ZWQgKGVpdGhlciB0aHJvdWdoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX05ld19GYWNlIj5GVF9OZXdfRmFjZTwvYT4gb3IgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+KSwgdGhlIGxpYnJhcnkgbG9va3MgZm9yIGEgVW5pY29kZSBjaGFybWFwIHdpdGhpbiB0aGUgbGlzdCBhbmQgYXV0b21hdGljYWxseSBhY3RpdmF0ZXMgaXQuPC9wPgorCis8aDQ+YWxzbzwvaDQ+Cis8cD5TZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfQ2hhck1hcFJlYyI+RlRfQ2hhck1hcFJlYzwvYT4gZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIGNoYXJhY3RlciBtYXAuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9FbmNvZGluZyI+RlRfRW5jb2Rpbmc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9FbmNvZGluZ18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19OT05FIj5GVF9FTkNPRElOR19OT05FPC9hPiwgMCwgMCwgMCwgMCApLAorCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX01TX1NZTUJPTCI+RlRfRU5DT0RJTkdfTVNfU1lNQk9MPC9hPiwgJ3MnLCAneScsICdtJywgJ2InICksCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX1VOSUNPREUiPkZUX0VOQ09ESU5HX1VOSUNPREU8L2E+LCAgICd1JywgJ24nLCAnaScsICdjJyApLAorCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX1NKSVMiPkZUX0VOQ09ESU5HX1NKSVM8L2E+LCAgICAncycsICdqJywgJ2knLCAncycgKSwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNfVEFHIj5GVF9FTkNfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfR0IyMzEyIj5GVF9FTkNPRElOR19HQjIzMTI8L2E+LCAgJ2cnLCAnYicsICcgJywgJyAnICksCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0JJRzUiPkZUX0VOQ09ESU5HX0JJRzU8L2E+LCAgICAnYicsICdpJywgJ2cnLCAnNScgKSwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNfVEFHIj5GVF9FTkNfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfV0FOU1VORyI+RlRfRU5DT0RJTkdfV0FOU1VORzwvYT4sICd3JywgJ2EnLCAnbicsICdzJyApLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19KT0hBQiI+RlRfRU5DT0RJTkdfSk9IQUI8L2E+LCAgICdqJywgJ28nLCAnaCcsICdhJyApLAorCisgICAgLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfTVNfU0pJUyI+RlRfRU5DT0RJTkdfTVNfU0pJUzwvYT4gICAgPSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19TSklTIj5GVF9FTkNPRElOR19TSklTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19NU19HQjIzMTIiPkZUX0VOQ09ESU5HX01TX0dCMjMxMjwvYT4gID0gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfR0IyMzEyIj5GVF9FTkNPRElOR19HQjIzMTI8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX01TX0JJRzUiPkZUX0VOQ09ESU5HX01TX0JJRzU8L2E+ICAgID0gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfQklHNSI+RlRfRU5DT0RJTkdfQklHNTwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfTVNfV0FOU1VORyI+RlRfRU5DT0RJTkdfTVNfV0FOU1VORzwvYT4gPSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19XQU5TVU5HIj5GVF9FTkNPRElOR19XQU5TVU5HPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19NU19KT0hBQiI+RlRfRU5DT0RJTkdfTVNfSk9IQUI8L2E+ICAgPSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19KT0hBQiI+RlRfRU5DT0RJTkdfSk9IQUI8L2E+LAorCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIj5GVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRDwvYT4sICdBJywgJ0QnLCAnTycsICdCJyApLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQiPkZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVDwvYT4sICAgJ0EnLCAnRCcsICdCJywgJ0UnICksCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DX1RBRyI+RlRfRU5DX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTSI+RlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NPC9hPiwgICAnQScsICdEJywgJ0InLCAnQycgKSwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNfVEFHIj5GVF9FTkNfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMSI+RlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMTwvYT4sICAnbCcsICdhJywgJ3QnLCAnMScgKSwKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19PTERfTEFUSU5fMiI+RlRfRU5DT0RJTkdfT0xEX0xBVElOXzI8L2E+LCAnbCcsICdhJywgJ3QnLCAnMicgKSwKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19BUFBMRV9ST01BTiI+RlRfRU5DT0RJTkdfQVBQTEVfUk9NQU48L2E+LCAnYScsICdyJywgJ20nLCAnbicgKQorCisgIH0gPGI+RlRfRW5jb2Rpbmc8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYDxiPkZUX0VuY29kaW5nPC9iPicgKi8KKyAgLyogdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9lbmNvZGluZ19ub25lICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfTk9ORSI+RlRfRU5DT0RJTkdfTk9ORTwvYT4KKyNkZWZpbmUgZnRfZW5jb2RpbmdfdW5pY29kZSAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX1VOSUNPREUiPkZUX0VOQ09ESU5HX1VOSUNPREU8L2E+CisjZGVmaW5lIGZ0X2VuY29kaW5nX3N5bWJvbCAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19NU19TWU1CT0wiPkZUX0VOQ09ESU5HX01TX1NZTUJPTDwvYT4KKyNkZWZpbmUgZnRfZW5jb2RpbmdfbGF0aW5fMSAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzEiPkZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzE8L2E+CisjZGVmaW5lIGZ0X2VuY29kaW5nX2xhdGluXzIgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19PTERfTEFUSU5fMiI+RlRfRU5DT0RJTkdfT0xEX0xBVElOXzI8L2E+CisjZGVmaW5lIGZ0X2VuY29kaW5nX3NqaXMgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19TSklTIj5GVF9FTkNPRElOR19TSklTPC9hPgorI2RlZmluZSBmdF9lbmNvZGluZ19nYjIzMTIgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfR0IyMzEyIj5GVF9FTkNPRElOR19HQjIzMTI8L2E+CisjZGVmaW5lIGZ0X2VuY29kaW5nX2JpZzUgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19CSUc1Ij5GVF9FTkNPRElOR19CSUc1PC9hPgorI2RlZmluZSBmdF9lbmNvZGluZ193YW5zdW5nICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfV0FOU1VORyI+RlRfRU5DT0RJTkdfV0FOU1VORzwvYT4KKyNkZWZpbmUgZnRfZW5jb2Rpbmdfam9oYWIgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0pPSEFCIj5GVF9FTkNPRElOR19KT0hBQjwvYT4KKworI2RlZmluZSBmdF9lbmNvZGluZ19hZG9iZV9zdGFuZGFyZCAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQiPkZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEPC9hPgorI2RlZmluZSBmdF9lbmNvZGluZ19hZG9iZV9leHBlcnQgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUIj5GVF9FTkNPRElOR19BRE9CRV9FWFBFUlQ8L2E+CisjZGVmaW5lIGZ0X2VuY29kaW5nX2Fkb2JlX2N1c3RvbSAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FTkNPRElOR19BRE9CRV9DVVNUT00iPkZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTTwvYT4KKyNkZWZpbmUgZnRfZW5jb2RpbmdfYXBwbGVfcm9tYW4gICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIj5GVF9FTkNPRElOR19BUFBMRV9ST01BTjwvYT4KKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiB1c2VkIHRvIHNwZWNpZnkgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5IGNoYXJtYXBzLiBVc2VkIGluIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZWxlY3RfQ2hhcm1hcCI+RlRfU2VsZWN0X0NoYXJtYXA8L2E+IEFQSSBmdW5jdGlvbi48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkRlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZW51bWVyYXRpb24gbGlzdHMgc3BlY2lmaWMgY2hhcmFjdGVyIHJlcGVydG9yaWVzIChpLmUuLCBjaGFyc2V0cyksIGFuZCBub3QgdGV4dCBlbmNvZGluZyBtZXRob2RzIChlLmcuLCBVVEYtOCwgVVRGLTE2LCBldGMuKS48L3A+Cis8cD5PdGhlciBlbmNvZGluZ3MgbWlnaHQgYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19OT05FIj5GVF9FTkNPRElOR19OT05FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGVuY29kaW5nIHZhbHVlJm5ic3A7MCBpcyByZXNlcnZlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19VTklDT0RFIj5GVF9FTkNPRElOR19VTklDT0RFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHNldC4gVGhpcyB2YWx1ZSBjb3ZlcnMgYWxsIHZlcnNpb25zIG9mIHRoZSBVbmljb2RlIHJlcGVydG9pcmUsIGluY2x1ZGluZyBBU0NJSSBhbmQgTGF0aW4tMS4gTW9zdCBmb250cyBpbmNsdWRlIGEgVW5pY29kZSBjaGFybWFwLCBidXQgbm90IGFsbCBvZiB0aGVtLjwvcD4KKzxwPkZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgVW5pY29kZSB2YWx1ZSBVKzFGMDI4IChhbmQgdGhlIGZvbnQgY29udGFpbnMgaXQpLCB1c2UgdmFsdWUgMHgxRjAyOCBhcyB0aGUgaW5wdXQgdmFsdWUgZm9yIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9DaGFyX0luZGV4Ij5GVF9HZXRfQ2hhcl9JbmRleDwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRU5DT0RJTkdfTVNfU1lNQk9MIj5GVF9FTkNPRElOR19NU19TWU1CT0w8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byB0aGUgTWljcm9zb2Z0IFN5bWJvbCBlbmNvZGluZywgdXNlZCB0byBlbmNvZGUgbWF0aGVtYXRpY2FsIHN5bWJvbHMgYW5kIHdpbmdkaW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAmbHNxdW87PGEgaHJlZj0iaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bSI+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bTwvYT4mcnNxdW87LCAmbHNxdW87PGEgaHJlZj0iaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0iPmh0dHA6Ly93d3cua29zdGlzLm5ldC9jaGFyc2V0cy9zeW1ib2wuaHRtPC9hPiZyc3F1bzssIGFuZCAmbHNxdW87PGEgaHJlZj0iaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3dpbmdkaW5nLmh0bSI+aHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3dpbmdkaW5nLmh0bTwvYT4mcnNxdW87LjwvcD4KKzxwPlRoaXMgZW5jb2RpbmcgdXNlcyBjaGFyYWN0ZXIgY29kZXMgZnJvbSB0aGUgUFVBIChQcml2YXRlIFVuaWNvZGUgQXJlYSkgaW4gdGhlIHJhbmdlIFUrRjAyMC1VK0YwRkYuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRU5DT0RJTkdfU0pJUyI+RlRfRU5DT0RJTkdfU0pJUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIEphcGFuZXNlIFNKSVMgZW5jb2RpbmcuIE1vcmUgaW5mbyBhdCBhdCAmbHNxdW87PGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGlmdF9KSVMiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hpZnRfSklTPC9hPiZyc3F1bzsuIFNlZSBub3RlIG9uIG11bHRpLWJ5dGUgZW5jb2RpbmdzIGJlbG93LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0VOQ09ESU5HX0dCMjMxMiI+RlRfRU5DT0RJTkdfR0IyMzEyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gYW4gZW5jb2Rpbmcgc3lzdGVtIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgYXMgdXNlZCB1c2VkIGluIG1haW5sYW5kIENoaW5hLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0VOQ09ESU5HX0JJRzUiPkZUX0VOQ09ESU5HX0JJRzU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byBhbiBlbmNvZGluZyBzeXN0ZW0gZm9yIFRyYWRpdGlvbmFsIENoaW5lc2UgYXMgdXNlZCBpbiBUYWl3YW4gYW5kIEhvbmcgS29uZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19XQU5TVU5HIj5GVF9FTkNPRElOR19XQU5TVU5HPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gdGhlIEtvcmVhbiBlbmNvZGluZyBzeXN0ZW0ga25vd24gYXMgV2Fuc3VuZy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlICZsc3F1bzs8YSBocmVmPSJodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi1VUy9nb2dsb2JhbC9jYzMwNTE1NCI+aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tVVMvZ29nbG9iYWwvY2MzMDUxNTQ8L2E+JnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19KT0hBQiI+RlRfRU5DT0RJTkdfSk9IQUI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgS29yZWFuIHN0YW5kYXJkIGNoYXJhY3RlciBzZXQgKEtTJm5ic3A7QyA1NjAxLTE5OTIpLCB3aGljaCBjb3JyZXNwb25kcyB0byBNUyBXaW5kb3dzIGNvZGUgcGFnZSAxMzYxLiBUaGlzIGNoYXJhY3RlciBzZXQgaW5jbHVkZXMgYWxsIHBvc3NpYmxlIEhhbmdldWwgY2hhcmFjdGVyIGNvbWJpbmF0aW9ucy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xIj5GVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gYSBMYXRpbi0xIGVuY29kaW5nIGFzIGRlZmluZWQgaW4gYSBUeXBlJm5ic3A7MSBQb3N0U2NyaXB0IGZvbnQuIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRCI+RlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byB0aGUgQWRvYmUgU3RhbmRhcmQgZW5jb2RpbmcsIGFzIGZvdW5kIGluIFR5cGUmbmJzcDsxLCBDRkYsIGFuZCBPcGVuVHlwZS9DRkYgZm9udHMuIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQiPkZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIHRoZSBBZG9iZSBFeHBlcnQgZW5jb2RpbmcsIGFzIGZvdW5kIGluIFR5cGUmbmJzcDsxLCBDRkYsIGFuZCBPcGVuVHlwZS9DRkYgZm9udHMuIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19BRE9CRV9DVVNUT00iPkZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIGEgY3VzdG9tIGVuY29kaW5nLCBhcyBmb3VuZCBpbiBUeXBlJm5ic3A7MSwgQ0ZGLCBhbmQgT3BlblR5cGUvQ0ZGIGZvbnRzLiBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgY29kZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4iPkZUX0VOQ09ESU5HX0FQUExFX1JPTUFOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gdGhlIDgtYml0IEFwcGxlIHJvbWFuIGVuY29kaW5nLiBNYW55IFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyBjb250YWluIGEgY2hhcm1hcCBmb3IgdGhpcyBlbmNvZGluZywgc2luY2Ugb2xkZXIgdmVyc2lvbnMgb2YgTWFjIE9TIGFyZSBhYmxlIHRvIHVzZSBpdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19PTERfTEFUSU5fMiI+RlRfRU5DT0RJTkdfT0xEX0xBVElOXzI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIHZhbHVlIGlzIGRlcHJlY2F0ZWQgYW5kIHdhcyBuZXZlciB1c2VkIG5vciByZXBvcnRlZCBieSBGcmVlVHlwZS4gRG9uJ3QgdXNlIG9yIHRlc3QgZm9yIGl0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0VOQ09ESU5HX01TX1NKSVMiPkZUX0VOQ09ESU5HX01TX1NKSVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TYW1lIGFzIEZUX0VOQ09ESU5HX1NKSVMuIERlcHJlY2F0ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRU5DT0RJTkdfTVNfR0IyMzEyIj5GVF9FTkNPRElOR19NU19HQjIzMTI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TYW1lIGFzIEZUX0VOQ09ESU5HX0dCMjMxMi4gRGVwcmVjYXRlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9FTkNPRElOR19NU19CSUc1Ij5GVF9FTkNPRElOR19NU19CSUc1PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2FtZSBhcyBGVF9FTkNPRElOR19CSUc1LiBEZXByZWNhdGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0VOQ09ESU5HX01TX1dBTlNVTkciPkZUX0VOQ09ESU5HX01TX1dBTlNVTkc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TYW1lIGFzIEZUX0VOQ09ESU5HX1dBTlNVTkcuIERlcHJlY2F0ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRU5DT0RJTkdfTVNfSk9IQUIiPkZUX0VOQ09ESU5HX01TX0pPSEFCPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2FtZSBhcyBGVF9FTkNPRElOR19KT0hBQi4gRGVwcmVjYXRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5CeSBkZWZhdWx0LCBGcmVlVHlwZSBhdXRvbWF0aWNhbGx5IHN5bnRoZXNpemVzIGEgVW5pY29kZSBjaGFybWFwIGZvciBQb3N0U2NyaXB0IGZvbnRzLCB1c2luZyB0aGVpciBnbHlwaCBuYW1lcyBkaWN0aW9uYXJpZXMuIEhvd2V2ZXIsIGl0IGFsc28gcmVwb3J0cyB0aGUgZW5jb2RpbmdzIGRlZmluZWQgZXhwbGljaXRseSBpbiB0aGUgZm9udCBmaWxlLCBmb3IgdGhlIGNhc2VzIHdoZW4gdGhleSBhcmUgbmVlZGVkLCB3aXRoIHRoZSBBZG9iZSB2YWx1ZXMgYXMgd2VsbC48L3A+Cis8cD5GVF9FTkNPRElOR19OT05FIGlzIHNldCBieSB0aGUgQkRGIGFuZCBQQ0YgZHJpdmVycyBpZiB0aGUgY2hhcm1hcCBpcyBuZWl0aGVyIFVuaWNvZGUgbm9yIElTTy04ODU5LTEgKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gRlRfRU5DT0RJTkdfVU5JQ09ERSkuIFVzZSA8YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjRlRfR2V0X0JERl9DaGFyc2V0X0lEIj5GVF9HZXRfQkRGX0NoYXJzZXRfSUQ8L2E+IHRvIGZpbmQgb3V0IHdoaWNoIGVuY29kaW5nIGlzIHJlYWxseSBwcmVzZW50LiBJZiwgZm9yIGV4YW1wbGUsIHRoZSAmbHNxdW87Y3NfcmVnaXN0cnkmcnNxdW87IGZpZWxkIGlzICZsc3F1bztLT0k4JnJzcXVvOyBhbmQgdGhlICZsc3F1bztjc19lbmNvZGluZyZyc3F1bzsgZmllbGQgaXMgJmxzcXVvO1ImcnNxdW87LCB0aGUgZm9udCBpcyBlbmNvZGVkIGluIEtPSTgtUi48L3A+Cis8cD5GVF9FTkNPRElOR19OT05FIGlzIGFsd2F5cyBzZXQgKHdpdGggYSBzaW5nbGUgZXhjZXB0aW9uKSBieSB0aGUgd2luZm9udHMgZHJpdmVyLiBVc2UgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX0dldF9XaW5GTlRfSGVhZGVyIj5GVF9HZXRfV2luRk5UX0hlYWRlcjwvYT4gYW5kIGV4YW1pbmUgdGhlICZsc3F1bztjaGFyc2V0JnJzcXVvOyBmaWVsZCBvZiB0aGUgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9IZWFkZXJSZWMiPkZUX1dpbkZOVF9IZWFkZXJSZWM8L2E+IHN0cnVjdHVyZSB0byBmaW5kIG91dCB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gRm9yIGV4YW1wbGUsIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1AxMjUxPC9hPiAoMjA0KSBtZWFucyBXaW5kb3dzIGNvZGUgcGFnZSAxMjUxIChmb3IgUnVzc2lhbikuPC9wPgorPHA+RlRfRU5DT0RJTkdfTk9ORSBpcyBzZXQgaWYgJmxzcXVvO3BsYXRmb3JtX2lkJnJzcXVvOyBpcyA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fWFhYIj5UVF9QTEFURk9STV9NQUNJTlRPU0g8L2E+IGFuZCAmbHNxdW87ZW5jb2RpbmdfaWQmcnNxdW87IGlzIG5vdCA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1JPTUFOPC9hPiAob3RoZXJ3aXNlIGl0IGlzIHNldCB0byBGVF9FTkNPRElOR19BUFBMRV9ST01BTikuPC9wPgorPHA+SWYgJmxzcXVvO3BsYXRmb3JtX2lkJnJzcXVvOyBpcyA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fWFhYIj5UVF9QTEFURk9STV9NQUNJTlRPU0g8L2E+LCB1c2UgdGhlIGZ1bmN0aW9uIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCI+RlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQ8L2E+IHRvIHF1ZXJ5IHRoZSBNYWMgbGFuZ3VhZ2UgSUQgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggQXBwbGUgZW5jb2RpbmcgdmFyaWFudHMuIFNlZTwvcD4KKzxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvQVBQTEUvUmVhZG1lLnR4dCI+aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9BUFBMRS9SZWFkbWUudHh0PC9hPjwvcD4KKzxwPnRvIGdldCBhbiBpZGVhIGhvdyB0byBkbyB0aGF0LiBCYXNpY2FsbHksIGlmIHRoZSBsYW5ndWFnZSBJRCBpcyZuYnNwOzAsIGRvbid0IHVzZSBpdCwgb3RoZXJ3aXNlIHN1YnRyYWN0IDEgZnJvbSB0aGUgbGFuZ3VhZ2UgSUQuIFRoZW4gZXhhbWluZSAmbHNxdW87ZW5jb2RpbmdfaWQmcnNxdW87LiBJZiwgZm9yIGV4YW1wbGUsICZsc3F1bztlbmNvZGluZ19pZCZyc3F1bzsgaXMgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9ST01BTjwvYT4gYW5kIHRoZSBsYW5ndWFnZSBJRCAobWludXMmbmJzcDsxKSBpcyAmbHNxdW87VFRfTUFDX0xBTkdJRF9HUkVFSyZyc3F1bzssIGl0IGlzIHRoZSBHcmVlayBlbmNvZGluZywgbm90IFJvbWFuLiA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX0FSQUJJQzwvYT4gd2l0aCAmbHNxdW87VFRfTUFDX0xBTkdJRF9GQVJTSSZyc3F1bzsgbWVhbnMgdGhlIEZhcnNpIHZhcmlhbnQgdGhlIEFyYWJpYyBlbmNvZGluZy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2lmbmRlZiA8Yj5GVF9FTkNfVEFHPC9iPgorI2RlZmluZSA8Yj5GVF9FTkNfVEFHPC9iPiggdmFsdWUsIGEsIGIsIGMsIGQgKSAgICAgICAgIFwKKyAgICAgICAgICB2YWx1ZSA9ICggKCAoPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+KShhKSAmbHQ7Jmx0OyAyNCApIHwgIFwKKyAgICAgICAgICAgICAgICAgICAgKCAoPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+KShiKSAmbHQ7Jmx0OyAxNiApIHwgIFwKKyAgICAgICAgICAgICAgICAgICAgKCAoPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+KShjKSAmbHQ7Jmx0OyAgOCApIHwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+KShkKSAgICAgICAgICkKKworI2VuZGlmIC8qIDxiPkZUX0VOQ19UQUc8L2I+ICovCis8L3ByZT4KKworPHA+VGhpcyBtYWNybyBjb252ZXJ0cyBmb3VyLWxldHRlciB0YWdzIGludG8gYW4gdW5zaWduZWQgbG9uZy4gSXQgaXMgdXNlZCB0byBkZWZpbmUgJmxzcXVvO2VuY29kaW5nJnJzcXVvOyBpZGVudGlmaWVycyAoc2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FbmNvZGluZzwvYT4pLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+U2luY2UgbWFueSAxNi1iaXQgY29tcGlsZXJzIGRvbid0IGxpa2UgMzItYml0IGVudW1lcmF0aW9ucywgeW91IHNob3VsZCByZWRlZmluZSB0aGlzIG1hY3JvIGluIGNhc2Ugb2YgcHJvYmxlbXMgdG8gc29tZXRoaW5nIGxpa2UgdGhpczo8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApICB2YWx1ZSAgICAgICAgICAgICAgICAgICAKKzwvcHJlPgorPHA+dG8gZ2V0IGEgc2ltcGxlIGVudW1lcmF0aW9uIHdpdGhvdXQgYXNzaWduaW5nIHNwZWNpYWwgbnVtYmVycy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX0ZhY2VSZWNfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgICAgICAgbnVtX2ZhY2VzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICAgICAgICBmYWNlX2luZGV4OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICAgICAgIGZhY2VfZmxhZ3M7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICAgICAgIHN0eWxlX2ZsYWdzOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICAgICAgIG51bV9nbHlwaHM7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICAgICAgICBmYW1pbHlfbmFtZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICAgICAgICBzdHlsZV9uYW1lOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICAgbnVtX2ZpeGVkX3NpemVzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0JpdG1hcF9TaXplIj5GVF9CaXRtYXBfU2l6ZTwvYT4qICAgYXZhaWxhYmxlX3NpemVzOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICAgbnVtX2NoYXJtYXBzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0NoYXJNYXAiPkZUX0NoYXJNYXA8L2E+KiAgICAgICBjaGFybWFwczsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dlbmVyaWMiPkZUX0dlbmVyaWM8L2E+ICAgICAgICBnZW5lcmljOworCisgICAgLyojIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyAoZG93biB0byBgdW5kZXJsaW5lX3RoaWNrbmVzcycpICovCisgICAgLyojIGFyZSBvbmx5IHJlbGV2YW50IHRvIHNjYWxhYmxlIG91dGxpbmVzOyBjZi4gQDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0JpdG1hcF9TaXplIj5GVF9CaXRtYXBfU2l6ZTwvYT4gICAgKi8KKyAgICAvKiMgZm9yIGJpdG1hcCBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CQm94Ij5GVF9CQm94PC9hPiAgICAgICAgICAgYmJveDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgICAgICAgIHVuaXRzX3Blcl9FTTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgICAgICAgIGFzY2VuZGVyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAgICAgICAgZGVzY2VuZGVyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAgICAgICAgaGVpZ2h0OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgICAgICAgICBtYXhfYWR2YW5jZV93aWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgICAgICAgIG1heF9hZHZhbmNlX2hlaWdodDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAgICAgICAgdW5kZXJsaW5lX3Bvc2l0aW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAgICAgICAgdW5kZXJsaW5lX3RoaWNrbmVzczsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdCI+RlRfR2x5cGhTbG90PC9hPiAgICAgIGdseXBoOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+ICAgICAgICAgICBzaXplOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0NoYXJNYXAiPkZUX0NoYXJNYXA8L2E+ICAgICAgICBjaGFybWFwOworCisgICAgLypAcHJpdmF0ZSBiZWdpbiAqLworCisgICAgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfRHJpdmVyIj5GVF9Ecml2ZXI8L2E+ICAgICAgICAgZHJpdmVyOworICAgIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICAgICAgICAgbWVtb3J5OworICAgIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfU3RyZWFtIj5GVF9TdHJlYW08L2E+ICAgICAgICAgc3RyZWFtOworCisgICAgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RSZWMiPkZUX0xpc3RSZWM8L2E+ICAgICAgICBzaXplc19saXN0OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2VuZXJpYyI+RlRfR2VuZXJpYzwvYT4gICAgICAgIGF1dG9oaW50OyAgIC8qIGZhY2Utc3BlY2lmaWMgYXV0by1oaW50ZXIgZGF0YSAqLworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICAgZXh0ZW5zaW9uczsgLyogdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlX0ludGVybmFsIj5GVF9GYWNlX0ludGVybmFsPC9hPiAgaW50ZXJuYWw7CisKKyAgICAvKkBwcml2YXRlIGVuZCAqLworCisgIH0gPGI+RlRfRmFjZVJlYzwvYj47Cis8L3ByZT4KKworPHA+RnJlZVR5cGUgcm9vdCBmYWNlIGNsYXNzIHN0cnVjdHVyZS4gQSBmYWNlIG9iamVjdCBtb2RlbHMgYSB0eXBlZmFjZSBpbiBhIGZvbnQgZmlsZS48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibnVtX2ZhY2VzIj5udW1fZmFjZXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGZhY2VzIGluIHRoZSBmb250IGZpbGUuIFNvbWUgZm9udCBmb3JtYXRzIGNhbiBoYXZlIG11bHRpcGxlIGZhY2VzIGluIGEgZm9udCBmaWxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlIGZvbnQgZmlsZS4gSXQgaXMgc2V0IHRvJm5ic3A7MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmYWNlIGluIHRoZSBmb250IGZpbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9mbGFncyI+ZmFjZV9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc2V0IG9mIGJpdCBmbGFncyB0aGF0IGdpdmUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWNlOyBzZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1hYWDwvYT4gZm9yIHRoZSBkZXRhaWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0eWxlX2ZsYWdzIj5zdHlsZV9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc2V0IG9mIGJpdCBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiB0aGUgZmFjZTsgc2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NUWUxFX0ZMQUdfWFhYIj5GVF9TVFlMRV9GTEFHX1hYWDwvYT4gZm9yIHRoZSBkZXRhaWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9nbHlwaHMiPm51bV9nbHlwaHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZmFjZS4gSWYgdGhlIGZhY2UgaXMgc2NhbGFibGUgYW5kIGhhcyBzYml0cyAoc2VlICZsc3F1bztudW1fZml4ZWRfc2l6ZXMmcnNxdW87KSwgaXQgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2Ygb3V0bGluZSBnbHlwaHMuPC9wPgorPHA+Rm9yIENJRC1rZXllZCBmb250cywgdGhpcyB2YWx1ZSBnaXZlcyB0aGUgaGlnaGVzdCBDSUQgdXNlZCBpbiB0aGUgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYW1pbHlfbmFtZSI+ZmFtaWx5X25hbWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZmFjZSdzIGZhbWlseSBuYW1lLiBUaGlzIGlzIGFuIEFTQ0lJIHN0cmluZywgdXN1YWxseSBpbiBFbmdsaXNoLCB0aGF0IGRlc2NyaWJlcyB0aGUgdHlwZWZhY2UncyBmYW1pbHkgKGxpa2UgJmxzcXVvO1RpbWVzIE5ldyBSb21hbiZyc3F1bzssICZsc3F1bztCb2RvbmkmcnNxdW87LCAmbHNxdW87R2FyYW1vbmQmcnNxdW87LCBldGMpLiBUaGlzIGlzIGEgbGVhc3QgY29tbW9uIGRlbm9taW5hdG9yIHVzZWQgdG8gbGlzdCBmb250cy4gU29tZSBmb3JtYXRzIChUcnVlVHlwZSAmYW1wOyBPcGVuVHlwZSkgcHJvdmlkZSBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgdGhpcyBzdHJpbmcuIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBmb3JtYXQgc3BlY2lmaWMgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGVtLiBDYW4gYmUgTlVMTCAoZS5nLiwgaW4gZm9udHMgZW1iZWRkZWQgaW4gYSBQREYgZmlsZSkuPC9wPgorPHA+SW4gY2FzZSB0aGUgZm9udCBkb2Vzbid0IHByb3ZpZGUgYSBzcGVjaWZpYyBmYW1pbHkgbmFtZSBlbnRyeSwgRnJlZVR5cGUgdHJpZXMgdG8gc3ludGhlc2l6ZSBvbmUsIGRlcml2aW5nIGl0IGZyb20gb3RoZXIgbmFtZSBlbnRyaWVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0eWxlX25hbWUiPnN0eWxlX25hbWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZmFjZSdzIHN0eWxlIG5hbWUuIFRoaXMgaXMgYW4gQVNDSUkgc3RyaW5nLCB1c3VhbGx5IGluIEVuZ2xpc2gsIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlZmFjZSdzIHN0eWxlIChsaWtlICZsc3F1bztJdGFsaWMmcnNxdW87LCAmbHNxdW87Qm9sZCZyc3F1bzssICZsc3F1bztDb25kZW5zZWQmcnNxdW87LCBldGMpLiBOb3QgYWxsIGZvbnQgZm9ybWF0cyBwcm92aWRlIGEgc3R5bGUgbmFtZSwgc28gdGhpcyBmaWVsZCBpcyBvcHRpb25hbCwgYW5kIGNhbiBiZSBzZXQgdG8gTlVMTC4gQXMgZm9yICZsc3F1bztmYW1pbHlfbmFtZSZyc3F1bzssIHNvbWUgZm9ybWF0cyBwcm92aWRlIGxvY2FsaXplZCBhbmQgVW5pY29kZSB2ZXJzaW9ucyBvZiB0aGlzIHN0cmluZy4gQXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlIGZvcm1hdCBzcGVjaWZpYyBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZW0uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibnVtX2ZpeGVkX3NpemVzIj5udW1fZml4ZWRfc2l6ZXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGJpdG1hcCBzdHJpa2VzIGluIHRoZSBmYWNlLiBFdmVuIGlmIHRoZSBmYWNlIGlzIHNjYWxhYmxlLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBiaXRtYXAgc3RyaWtlcywgd2hpY2ggYXJlIGNhbGxlZCAmbHNxdW87c2JpdHMmcnNxdW87IGluIHRoYXQgY2FzZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhdmFpbGFibGVfc2l6ZXMiPmF2YWlsYWJsZV9zaXplczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIGFycmF5IG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0JpdG1hcF9TaXplIj5GVF9CaXRtYXBfU2l6ZTwvYT4gZm9yIGFsbCBiaXRtYXAgc3RyaWtlcyBpbiB0aGUgZmFjZS4gSXQgaXMgc2V0IHRvIE5VTEwgaWYgdGhlcmUgaXMgbm8gYml0bWFwIHN0cmlrZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJudW1fY2hhcm1hcHMiPm51bV9jaGFybWFwczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgY2hhcm1hcHMgaW4gdGhlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcm1hcHMiPmNoYXJtYXBzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gYXJyYXkgb2YgdGhlIGNoYXJtYXBzIG9mIHRoZSBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdlbmVyaWMiPmdlbmVyaWM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGZpZWxkIHJlc2VydmVkIGZvciBjbGllbnQgdXNlcy4gU2VlIHRoZSA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HZW5lcmljIj5GVF9HZW5lcmljPC9hPiB0eXBlIGRlc2NyaXB0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJib3giPmJib3g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZm9udCBib3VuZGluZyBib3guIENvb3JkaW5hdGVzIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cyAoc2VlICZsc3F1bzt1bml0c19wZXJfRU0mcnNxdW87KS4gVGhlIGJveCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhbnkgZ2x5cGggZnJvbSB0aGUgZm9udC4gVGh1cywgJmxzcXVvO2Jib3gueU1heCZyc3F1bzsgY2FuIGJlIHNlZW4gYXMgdGhlICZsc3F1bzttYXhpbXVtIGFzY2VuZGVyJnJzcXVvOywgYW5kICZsc3F1bztiYm94LnlNaW4mcnNxdW87IGFzIHRoZSAmbHNxdW87bWluaW11bSBkZXNjZW5kZXImcnNxdW87LiBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLjwvcD4KKzxwPk5vdGUgdGhhdCB0aGUgYm91bmRpbmcgYm94IG1pZ2h0IGJlIG9mZiBieSAoYXQgbGVhc3QpIG9uZSBwaXhlbCBmb3IgaGludGVkIGZvbnRzLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZV9NZXRyaWNzIj5GVF9TaXplX01ldHJpY3M8L2E+IGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idW5pdHNfcGVyX0VNIj51bml0c19wZXJfRU08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGZvbnQgdW5pdHMgcGVyIEVNIHNxdWFyZSBmb3IgdGhpcyBmYWNlLiBUaGlzIGlzIHR5cGljYWxseSAyMDQ4IGZvciBUcnVlVHlwZSBmb250cywgYW5kIDEwMDAgZm9yIFR5cGUmbmJzcDsxIGZvbnRzLiBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFzY2VuZGVyIj5hc2NlbmRlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB0eXBvZ3JhcGhpYyBhc2NlbmRlciBvZiB0aGUgZmFjZSwgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuIEZvciBmb250IGZvcm1hdHMgbm90IGhhdmluZyB0aGlzIGluZm9ybWF0aW9uLCBpdCBpcyBzZXQgdG8gJmxzcXVvO2Jib3gueU1heCZyc3F1bzsuIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVzY2VuZGVyIj5kZXNjZW5kZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdHlwb2dyYXBoaWMgZGVzY2VuZGVyIG9mIHRoZSBmYWNlLCBleHByZXNzZWQgaW4gZm9udCB1bml0cy4gRm9yIGZvbnQgZm9ybWF0cyBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0byAmbHNxdW87YmJveC55TWluJnJzcXVvOy4gTm90ZSB0aGF0IHRoaXMgZmllbGQgaXMgdXN1YWxseSBuZWdhdGl2ZS4gT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWlnaHQiPmhlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgdmFsdWUgaXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGJhc2VsaW5lcywgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuIEl0IGlzIGFsd2F5cyBwb3NpdGl2ZS4gT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy48L3A+Cis8cD5JZiB5b3Ugd2FudCB0aGUgZ2xvYmFsIGdseXBoIGhlaWdodCwgdXNlICZsc3F1bzthc2NlbmRlciAtIGRlc2NlbmRlciZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWF4X2FkdmFuY2Vfd2lkdGgiPm1heF9hZHZhbmNlX3dpZHRoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCwgaW4gZm9udCB1bml0cywgZm9yIGFsbCBnbHlwaHMgaW4gdGhpcyBmYWNlLiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2Ugd29yZCB3cmFwcGluZyBjb21wdXRhdGlvbnMgZmFzdGVyLiBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heF9hZHZhbmNlX2hlaWdodCI+bWF4X2FkdmFuY2VfaGVpZ2h0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gYWR2YW5jZSBoZWlnaHQsIGluIGZvbnQgdW5pdHMsIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciB2ZXJ0aWNhbCBsYXlvdXRzLCBhbmQgaXMgc2V0IHRvICZsc3F1bztoZWlnaHQmcnNxdW87IGZvciBmb250cyB0aGF0IGRvIG5vdCBwcm92aWRlIHZlcnRpY2FsIG1ldHJpY3MuIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idW5kZXJsaW5lX3Bvc2l0aW9uIj51bmRlcmxpbmVfcG9zaXRpb248L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcG9zaXRpb24sIGluIGZvbnQgdW5pdHMsIG9mIHRoZSB1bmRlcmxpbmUgbGluZSBmb3IgdGhpcyBmYWNlLiBJdCBpcyB0aGUgY2VudGVyIG9mIHRoZSB1bmRlcmxpbmluZyBzdGVtLiBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InVuZGVybGluZV90aGlja25lc3MiPnVuZGVybGluZV90aGlja25lc3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGhpY2tuZXNzLCBpbiBmb250IHVuaXRzLCBvZiB0aGUgdW5kZXJsaW5lIGZvciB0aGlzIGZhY2UuIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGgiPmdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZhY2UncyBhc3NvY2lhdGVkIGdseXBoIHNsb3QocykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2l6ZSI+c2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjdXJyZW50IGFjdGl2ZSBzaXplIGZvciB0aGlzIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcm1hcCI+Y2hhcm1hcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjdXJyZW50IGFjdGl2ZSBjaGFybWFwIGZvciB0aGlzIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+RmllbGRzIG1heSBiZSBjaGFuZ2VkIGFmdGVyIGEgY2FsbCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9BdHRhY2hfRmlsZSI+RlRfQXR0YWNoX0ZpbGU8L2E+IG9yIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0F0dGFjaF9TdHJlYW0iPkZUX0F0dGFjaF9TdHJlYW08L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSEFTX0hPUklaT05UQUwiPkZUX0hBU19IT1JJWk9OVEFMPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfSEFTX0hPUklaT05UQUw8L2I+KCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0mZ3Q7ZmFjZV9mbGFncyAmYW1wOyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCI+RlRfRkFDRV9GTEFHX0hPUklaT05UQUw8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgaG9yaXpvbnRhbCBtZXRyaWNzICh0aGlzIGlzIHRydWUgZm9yIGFsbCBmb250IGZvcm1hdHMgdGhvdWdoKS48L3A+CisKKzxoND5hbHNvPC9oND4KKzxwPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0hBU19WRVJUSUNBTCI+RlRfSEFTX1ZFUlRJQ0FMPC9hPiBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdmVydGljYWwgbWV0cmljcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0hBU19WRVJUSUNBTCI+RlRfSEFTX1ZFUlRJQ0FMPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfSEFTX1ZFUlRJQ0FMPC9iPiggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtJmd0O2ZhY2VfZmxhZ3MgJmFtcDsgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMIj5GVF9GQUNFX0ZMQUdfVkVSVElDQUw8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgcmVhbCB2ZXJ0aWNhbCBtZXRyaWNzIChhbmQgbm90IG9ubHkgc3ludGhlc2l6ZWQgb25lcykuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9IQVNfS0VSTklORyI+RlRfSEFTX0tFUk5JTkc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9IQVNfS0VSTklORzwvYj4oIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLSZndDtmYWNlX2ZsYWdzICZhbXA7IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19LRVJOSU5HIj5GVF9GQUNFX0ZMQUdfS0VSTklORzwvYT4gKQorPC9wcmU+CisKKzxwPkEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBrZXJuaW5nIGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfS2VybmluZyI+RlRfR2V0X0tlcm5pbmc8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSEFTX0ZJWEVEX1NJWkVTIj5GVF9IQVNfRklYRURfU0laRVM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9IQVNfRklYRURfU0laRVM8L2I+KCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0mZ3Q7ZmFjZV9mbGFncyAmYW1wOyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMiPkZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUzwvYT4gKQorPC9wcmU+CisKKzxwPkEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lIGVtYmVkZGVkIGJpdG1hcHMuIFNlZSB0aGUgJmxzcXVvO2F2YWlsYWJsZV9zaXplcyZyc3F1bzsgZmllbGQgb2YgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IHN0cnVjdHVyZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0hBU19HTFlQSF9OQU1FUyI+RlRfSEFTX0dMWVBIX05BTUVTPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfSEFTX0dMWVBIX05BTUVTPC9iPiggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtJmd0O2ZhY2VfZmxhZ3MgJmFtcDsgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIj5GVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVM8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgc29tZSBnbHlwaCBuYW1lcyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9HbHlwaF9OYW1lIj5GVF9HZXRfR2x5cGhfTmFtZTwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9IQVNfTVVMVElQTEVfTUFTVEVSUyI+RlRfSEFTX01VTFRJUExFX01BU1RFUlM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9IQVNfTVVMVElQTEVfTUFTVEVSUzwvYj4oIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLSZndDtmYWNlX2ZsYWdzICZhbXA7IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTIj5GVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUzwvYT4gKQorPC9wcmU+CisKKzxwPkEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lIG11bHRpcGxlIG1hc3RlcnMuIFRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX01VTFRJUExFX01BU1RFUlNfSCI+RlRfTVVMVElQTEVfTUFTVEVSU19IPC9hPiBhcmUgdGhlbiBhdmFpbGFibGUgdG8gY2hvb3NlIHRoZSBleGFjdCBkZXNpZ24geW91IHdhbnQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9IQVNfQ09MT1IiPkZUX0hBU19DT0xPUjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0hBU19DT0xPUjwvYj4oIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLSZndDtmYWNlX2ZsYWdzICZhbXA7IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19DT0xPUiI+RlRfRkFDRV9GTEFHX0NPTE9SPC9hPiApCis8L3ByZT4KKworPHA+QSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHRhYmxlcyBmb3IgY29sb3IgZ2x5cGhzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSVNfU0ZOVCI+RlRfSVNfU0ZOVDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0lTX1NGTlQ8L2I+KCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0mZ3Q7ZmFjZV9mbGFncyAmYW1wOyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfU0ZOVCI+RlRfRkFDRV9GTEFHX1NGTlQ8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBmb250IHdob3NlIGZvcm1hdCBpcyBiYXNlZCBvbiB0aGUgU0ZOVCBzdG9yYWdlIHNjaGVtZS4gVGhpcyB1c3VhbGx5IG1lYW5zOiBUcnVlVHlwZSBmb250cywgT3BlblR5cGUgZm9udHMsIGFzIHdlbGwgYXMgU0ZOVC1iYXNlZCBlbWJlZGRlZCBiaXRtYXAgZm9udHMuPC9wPgorPHA+SWYgdGhpcyBtYWNybyBpcyB0cnVlLCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1NGTlRfTkFNRVNfSCI+RlRfU0ZOVF9OQU1FU19IPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1RSVUVUWVBFX1RBQkxFU19IIj5GVF9UUlVFVFlQRV9UQUJMRVNfSDwvYT4gYXJlIGF2YWlsYWJsZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0lTX1NDQUxBQkxFIj5GVF9JU19TQ0FMQUJMRTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0lTX1NDQUxBQkxFPC9iPiggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtJmd0O2ZhY2VfZmxhZ3MgJmFtcDsgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1NDQUxBQkxFIj5GVF9GQUNFX0ZMQUdfU0NBTEFCTEU8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBzY2FsYWJsZSBmb250IGZhY2UgKHRydWUgZm9yIFRydWVUeXBlLCBUeXBlJm5ic3A7MSwgVHlwZSZuYnNwOzQyLCBDSUQsIE9wZW5UeXBlL0NGRiwgYW5kIFBGUiBmb250IGZvcm1hdHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9JU19GSVhFRF9XSURUSCI+RlRfSVNfRklYRURfV0lEVEg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9JU19GSVhFRF9XSURUSDwvYj4oIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLSZndDtmYWNlX2ZsYWdzICZhbXA7IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCI+RlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIPC9hPiApCis8L3ByZT4KKworPHA+QSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgZm9udCBmYWNlIHRoYXQgY29udGFpbnMgZml4ZWQtd2lkdGggKG9yICZsc3F1bzttb25vc3BhY2UmcnNxdW87LCAmbHNxdW87Zml4ZWQtcGl0Y2gmcnNxdW87LCBldGMuKSBnbHlwaHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9JU19DSURfS0VZRUQiPkZUX0lTX0NJRF9LRVlFRDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0lTX0NJRF9LRVlFRDwvYj4oIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLSZndDtmYWNlX2ZsYWdzICZhbXA7IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19DSURfS0VZRUQiPkZUX0ZBQ0VfRkxBR19DSURfS0VZRUQ8L2E+ICkKKzwvcHJlPgorCis8cD5BIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBDSUQta2V5ZWQgZm9udC4gU2VlIHRoZSBkaXNjdXNzaW9uIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19DSURfS0VZRUQ8L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgorPHA+SWYgdGhpcyBtYWNybyBpcyB0cnVlLCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NJRF9IIj5GVF9DSURfSDwvYT4gYXJlIGF2YWlsYWJsZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0lTX1RSSUNLWSI+RlRfSVNfVFJJQ0tZPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfSVNfVFJJQ0tZPC9iPiggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtJmd0O2ZhY2VfZmxhZ3MgJmFtcDsgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1RSSUNLWSI+RlRfRkFDRV9GTEFHX1RSSUNLWTwvYT4gKQorPC9wcmU+CisKKzxwPkEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIHJlcHJlc2VudHMgYSAmbHNxdW87dHJpY2t5JnJzcXVvOyBmb250LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1RSSUNLWTwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NpemVSZWMiPkZUX1NpemVSZWM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1NpemVSZWNfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICAgICAgICAgZmFjZTsgICAgICAvKiBwYXJlbnQgZmFjZSBvYmplY3QgICAgICAgICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2VuZXJpYyI+RlRfR2VuZXJpYzwvYT4gICAgICAgIGdlbmVyaWM7ICAgLyogZ2VuZXJpYyBwb2ludGVyIGZvciBjbGllbnQgdXNlcyAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfTWV0cmljcyI+RlRfU2l6ZV9NZXRyaWNzPC9hPiAgIG1ldHJpY3M7ICAgLyogc2l6ZSBtZXRyaWNzICAgICAgICAgICAgICAgICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfSW50ZXJuYWwiPkZUX1NpemVfSW50ZXJuYWw8L2E+ICBpbnRlcm5hbDsKKworICB9IDxiPkZUX1NpemVSZWM8L2I+OworPC9wcmU+CisKKzxwPkZyZWVUeXBlIHJvb3Qgc2l6ZSBjbGFzcyBzdHJ1Y3R1cmUuIEEgc2l6ZSBvYmplY3QgbW9kZWxzIGEgZmFjZSBvYmplY3QgYXQgYSBnaXZlbiBzaXplLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2VuZXJpYyI+Z2VuZXJpYzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdHlwZWxlc3MgcG9pbnRlciwgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5IG9yIGFueSBvZiBpdHMgZHJpdmVycy4gSXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rIHRoZWlyIG93biBkYXRhIHRvIGVhY2ggc2l6ZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWV0cmljcyI+bWV0cmljczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1ldHJpY3MgZm9yIHRoaXMgc2l6ZSBvYmplY3QuIFRoaXMgZmllbGQgaXMgcmVhZC1vbmx5LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NpemVfTWV0cmljcyI+RlRfU2l6ZV9NZXRyaWNzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9TaXplX01ldHJpY3NfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHhfcHBlbTsgICAgICAvKiBob3Jpem9udGFsIHBpeGVscyBwZXIgRU0gICAgICAgICAgICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgeV9wcGVtOyAgICAgIC8qIHZlcnRpY2FsIHBpeGVscyBwZXIgRU0gICAgICAgICAgICAgICAgICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgeF9zY2FsZTsgICAgIC8qIHNjYWxpbmcgdmFsdWVzIHVzZWQgdG8gY29udmVydCBmb250ICAgICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgIHlfc2NhbGU7ICAgICAvKiB1bml0cyB0byAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzICAgICAgICAqLworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgICBhc2NlbmRlcjsgICAgLyogYXNjZW5kZXIgaW4gMjYuNiBmcmFjLiBwaXhlbHMgICAgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gICAgIGRlc2NlbmRlcjsgICAvKiBkZXNjZW5kZXIgaW4gMjYuNiBmcmFjLiBwaXhlbHMgICAgICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgaGVpZ2h0OyAgICAgIC8qIHRleHQgaGVpZ2h0IGluIDI2LjYgZnJhYy4gcGl4ZWxzICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgICBtYXhfYWR2YW5jZTsgLyogbWF4IGhvcml6b250YWwgYWR2YW5jZSwgaW4gMjYuNiBwaXhlbHMgKi8KKworICB9IDxiPkZUX1NpemVfTWV0cmljczwvYj47Cis8L3ByZT4KKworPHA+VGhlIHNpemUgbWV0cmljcyBzdHJ1Y3R1cmUgZ2l2ZXMgdGhlIG1ldHJpY3Mgb2YgYSBzaXplIG9iamVjdC48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieF9wcGVtIj54X3BwZW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgd2lkdGggb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCBoZW5jZSB0aGUgdGVybSAmbHNxdW87cHBlbSZyc3F1bzsgKHBpeGVscyBwZXIgRU0pLiBJdCBpcyBhbHNvIHJlZmVycmVkIHRvIGFzICZsc3F1bztub21pbmFsIHdpZHRoJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5X3BwZW0iPnlfcHBlbTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBoZWlnaHQgb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCBoZW5jZSB0aGUgdGVybSAmbHNxdW87cHBlbSZyc3F1bzsgKHBpeGVscyBwZXIgRU0pLiBJdCBpcyBhbHNvIHJlZmVycmVkIHRvIGFzICZsc3F1bztub21pbmFsIGhlaWdodCZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieF9zY2FsZSI+eF9zY2FsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlIHVzZWQgdG8gY29udmVydCBob3Jpem9udGFsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvbnQgZm9ybWF0cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5X3NjYWxlIj55X3NjYWxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSAxNi4xNiBmcmFjdGlvbmFsIHNjYWxpbmcgdmFsdWUgdXNlZCB0byBjb252ZXJ0IHZlcnRpY2FsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvbnQgZm9ybWF0cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhc2NlbmRlciI+YXNjZW5kZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGZvciB0aGUgZGV0YWlscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJkZXNjZW5kZXIiPmRlc2NlbmRlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBkZXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGZvciB0aGUgZGV0YWlscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWlnaHQiPmhlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBoZWlnaHQgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGZvciB0aGUgZGV0YWlscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhfYWR2YW5jZSI+bWF4X2FkdmFuY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWF4aW11bSBhZHZhbmNlIHdpZHRoIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlUmVjIj5GVF9GYWNlUmVjPC9hPiBmb3IgdGhlIGRldGFpbHMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHNjYWxpbmcgdmFsdWVzLCBpZiByZWxldmFudCwgYXJlIGRldGVybWluZWQgZmlyc3QgZHVyaW5nIGEgc2l6ZSBjaGFuZ2luZyBvcGVyYXRpb24uIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSB0aGVuIHNldCBieSB0aGUgZHJpdmVyLiBGb3Igc2NhbGFibGUgZm9ybWF0cywgdGhleSBhcmUgdXN1YWxseSBzZXQgdG8gc2NhbGVkIHZhbHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgaW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZVJlYyI+RlRfRmFjZVJlYzwvYT4uPC9wPgorPHA+Tm90ZSB0aGF0IGR1ZSB0byBnbHlwaCBoaW50aW5nLCB0aGVzZSB2YWx1ZXMgbWlnaHQgbm90IGJlIGV4YWN0IGZvciBjZXJ0YWluIGZvbnRzLiBUaHVzIHRoZXkgbXVzdCBiZSB0cmVhdGVkIGFzIHVucmVsaWFibGUgd2l0aCBhbiBlcnJvciBtYXJnaW4gb2YgYXQgbGVhc3Qgb25lIHBpeGVsITwvcD4KKzxwPkluZGVlZCwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgZXhhY3QgbWV0cmljcyBpcyB0byByZW5kZXIgPGk+YWxsPC9pPiBnbHlwaHMuIEFzIHRoaXMgd291bGQgYmUgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBoaXQsIGl0IGlzIHVwIHRvIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcGVyZm9ybSBzdWNoIGNvbXB1dGF0aW9ucy48L3A+Cis8cD5UaGUgRlRfU2l6ZV9NZXRyaWNzIHN0cnVjdHVyZSBpcyB2YWxpZCBmb3IgYml0bWFwIGZvbnRzIGFsc28uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HbHlwaFNsb3RSZWMiPkZUX0dseXBoU2xvdFJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfR2x5cGhTbG90UmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICAgIGxpYnJhcnk7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICAgICAgIGZhY2U7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90Ij5GVF9HbHlwaFNsb3Q8L2E+ICAgICAgbmV4dDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIHJldGFpbmVkIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dlbmVyaWMiPkZUX0dlbmVyaWM8L2E+ICAgICAgICBnZW5lcmljOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhfTWV0cmljcyI+RlRfR2x5cGhfTWV0cmljczwvYT4gIG1ldHJpY3M7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgICAgICAgICBsaW5lYXJIb3JpQWR2YW5jZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgICAgICAgIGxpbmVhclZlcnRBZHZhbmNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiAgICAgICAgIGFkdmFuY2U7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dseXBoX0Zvcm1hdDwvYT4gICBmb3JtYXQ7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gICAgICAgICBiaXRtYXA7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICAgYml0bWFwX2xlZnQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICAgYml0bWFwX3RvcDsKKworICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiAgICAgICAgb3V0bGluZTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgICBudW1fc3ViZ2x5cGhzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1N1YkdseXBoIj5GVF9TdWJHbHlwaDwvYT4gICAgICAgc3ViZ2x5cGhzOworCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgICAgICAgICBjb250cm9sX2RhdGE7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmxvbmc8L3NwYW4+ICAgICAgICAgICAgICBjb250cm9sX2xlbjsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgICAgICAgIGxzYl9kZWx0YTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gICAgICAgICAgICByc2JfZGVsdGE7CisKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgIG90aGVyOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2xvdF9JbnRlcm5hbCI+RlRfU2xvdF9JbnRlcm5hbDwvYT4gIGludGVybmFsOworCisgIH0gPGI+RlRfR2x5cGhTbG90UmVjPC9iPjsKKzwvcHJlPgorCis8cD5GcmVlVHlwZSByb290IGdseXBoIHNsb3QgY2xhc3Mgc3RydWN0dXJlLiBBIGdseXBoIHNsb3QgaXMgYSBjb250YWluZXIgd2hlcmUgaW5kaXZpZHVhbCBnbHlwaHMgY2FuIGJlIGxvYWRlZCwgYmUgdGhleSBpbiBvdXRsaW5lIG9yIGJpdG1hcCBmb3JtYXQuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZSB0aGlzIHNsb3QgYmVsb25ncyB0by48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuZXh0Ij5uZXh0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW4gc29tZSBjYXNlcyAobGlrZSBzb21lIGZvbnQgdG9vbHMpLCBzZXZlcmFsIGdseXBoIHNsb3RzIHBlciBmYWNlIG9iamVjdCBjYW4gYmUgYSBnb29kIHRoaW5nLiBBcyB0aGlzIGlzIHJhcmUsIHRoZSBnbHlwaCBzbG90cyBhcmUgbGlzdGVkIHRocm91Z2ggYSBkaXJlY3QsIHNpbmdsZS1saW5rZWQgbGlzdCB1c2luZyBpdHMgJmxzcXVvO25leHQmcnNxdW87IGZpZWxkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdlbmVyaWMiPmdlbmVyaWM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5IG9yIGFueSBvZiBpdHMgZHJpdmVycy4gSXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rIHRoZWlyIG93biBkYXRhIHRvIGVhY2ggZ2x5cGggc2xvdCBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWV0cmljcyI+bWV0cmljczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtZXRyaWNzIG9mIHRoZSBsYXN0IGxvYWRlZCBnbHlwaCBpbiB0aGUgc2xvdC4gVGhlIHJldHVybmVkIHZhbHVlcyBkZXBlbmQgb24gdGhlIGxhc3QgbG9hZCBmbGFncyAoc2VlIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPiBBUEkgZnVuY3Rpb24pIGFuZCBjYW4gYmUgZXhwcmVzc2VkIGVpdGhlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzIG9yIGZvbnQgdW5pdHMuPC9wPgorPHA+Tm90ZSB0aGF0IGV2ZW4gd2hlbiB0aGUgZ2x5cGggaW1hZ2UgaXMgdHJhbnNmb3JtZWQsIHRoZSBtZXRyaWNzIGFyZSBub3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGluZWFySG9yaUFkdmFuY2UiPmxpbmVhckhvcmlBZHZhbmNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGFkdmFuY2Ugd2lkdGggb2YgdGhlIHVuaGludGVkIGdseXBoLiBJdHMgdmFsdWUgaXMgZXhwcmVzc2VkIGluIDE2LjE2IGZyYWN0aW9uYWwgcGl4ZWxzLCB1bmxlc3MgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTElORUFSX0RFU0lHTjwvYT4gaXMgc2V0IHdoZW4gbG9hZGluZyB0aGUgZ2x5cGguIFRoaXMgZmllbGQgY2FuIGJlIGltcG9ydGFudCB0byBwZXJmb3JtIGNvcnJlY3QgV1lTSVdZRyBsYXlvdXQuIE9ubHkgcmVsZXZhbnQgZm9yIG91dGxpbmUgZ2x5cGhzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpbmVhclZlcnRBZHZhbmNlIj5saW5lYXJWZXJ0QWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZHZhbmNlIGhlaWdodCBvZiB0aGUgdW5oaW50ZWQgZ2x5cGguIEl0cyB2YWx1ZSBpcyBleHByZXNzZWQgaW4gMTYuMTYgZnJhY3Rpb25hbCBwaXhlbHMsIHVubGVzcyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9MSU5FQVJfREVTSUdOPC9hPiBpcyBzZXQgd2hlbiBsb2FkaW5nIHRoZSBnbHlwaC4gVGhpcyBmaWVsZCBjYW4gYmUgaW1wb3J0YW50IHRvIHBlcmZvcm0gY29ycmVjdCBXWVNJV1lHIGxheW91dC4gT25seSByZWxldmFudCBmb3Igb3V0bGluZSBnbHlwaHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZSI+YWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgc2hvcnRoYW5kIGlzLCBkZXBlbmRpbmcgb24gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTwvYT4sIHRoZSB0cmFuc2Zvcm1lZCAoaGludGVkKSBhZHZhbmNlIHdpZHRoIGZvciB0aGUgZ2x5cGgsIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbCBmb3JtYXQuIEFzIHNwZWNpZmllZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVDwvYT4sIGl0IHVzZXMgZWl0aGVyIHRoZSAmbHNxdW87aG9yaUFkdmFuY2UmcnNxdW87IG9yIHRoZSAmbHNxdW87dmVydEFkdmFuY2UmcnNxdW87IHZhbHVlIG9mICZsc3F1bzttZXRyaWNzJnJzcXVvOyBmaWVsZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmb3JtYXQiPmZvcm1hdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBmb3JtYXQgb2YgdGhlIGltYWdlIGNvbnRhaW5lZCBpbiB0aGUgZ2x5cGggc2xvdC4gVHlwaWNhbGx5IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0JJVE1BUDwvYT4sIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX09VVExJTkU8L2E+LCBvciA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEU8L2E+LCBidXQgb3RoZXJzIGFyZSBwb3NzaWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiaXRtYXAiPmJpdG1hcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yIHdoZW4gdGhlIHNsb3QgZm9ybWF0IGlzIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0JJVE1BUDwvYT4uIE5vdGUgdGhhdCB0aGUgYWRkcmVzcyBhbmQgY29udGVudCBvZiB0aGUgYml0bWFwIGJ1ZmZlciBjYW4gY2hhbmdlIGJldHdlZW4gY2FsbHMgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4gYW5kIGEgZmV3IG90aGVyIGZ1bmN0aW9ucy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiaXRtYXBfbGVmdCI+Yml0bWFwX2xlZnQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYml0bWFwJ3MgbGVmdCBiZWFyaW5nIGV4cHJlc3NlZCBpbiBpbnRlZ2VyIHBpeGVscy4gT25seSB2YWxpZCBpZiB0aGUgZm9ybWF0IGlzIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0JJVE1BUDwvYT4sIHRoaXMgaXMsIGlmIHRoZSBnbHlwaCBzbG90IGNvbnRhaW5zIGEgYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJpdG1hcF90b3AiPmJpdG1hcF90b3A8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYml0bWFwJ3MgdG9wIGJlYXJpbmcgZXhwcmVzc2VkIGluIGludGVnZXIgcGl4ZWxzLiBSZW1lbWJlciB0aGF0IHRoaXMgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCBnbHlwaCBzY2FubGluZSwgdXB3YXJkcyB5Jm5ic3A7Y29vcmRpbmF0ZXMgYmVpbmcgPGI+cG9zaXRpdmU8L2I+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgb3V0bGluZSBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBnbHlwaCBpbWFnZSBpZiBpdHMgZm9ybWF0IGlzIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX09VVExJTkU8L2E+LiBPbmNlIGEgZ2x5cGggaXMgbG9hZGVkLCAmbHNxdW87b3V0bGluZSZyc3F1bzsgY2FuIGJlIHRyYW5zZm9ybWVkLCBkaXN0b3J0ZWQsIGVtYm9sZGVkLCBldGMuIEhvd2V2ZXIsIGl0IG11c3Qgbm90IGJlIGZyZWVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9zdWJnbHlwaHMiPm51bV9zdWJnbHlwaHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIHN1YmdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGZvciB0aGUgY29tcG9zaXRlIGdseXBoIGZvcm1hdCB0aGF0IHNob3VsZCBub3JtYWxseSBvbmx5IGJlIGxvYWRlZCB3aXRoIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19SRUNVUlNFPC9hPiBmbGFnLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN1YmdseXBocyI+c3ViZ2x5cGhzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gYXJyYXkgb2Ygc3ViZ2x5cGggZGVzY3JpcHRvcnMgZm9yIGNvbXBvc2l0ZSBnbHlwaHMuIFRoZXJlIGFyZSAmbHNxdW87bnVtX3N1YmdseXBocyZyc3F1bzsgZWxlbWVudHMgaW4gdGhlcmUuIEN1cnJlbnRseSBpbnRlcm5hbCB0byBGcmVlVHlwZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb250cm9sX2RhdGEiPmNvbnRyb2xfZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNlcnRhaW4gZm9udCBkcml2ZXJzIGNhbiBhbHNvIHJldHVybiB0aGUgY29udHJvbCBkYXRhIGZvciBhIGdpdmVuIGdseXBoIGltYWdlIChlLmcuIFRydWVUeXBlIGJ5dGVjb2RlLCBUeXBlJm5ic3A7MSBjaGFyc3RyaW5ncywgZXRjLikuIFRoaXMgZmllbGQgaXMgYSBwb2ludGVyIHRvIHN1Y2ggZGF0YS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb250cm9sX2xlbiI+Y29udHJvbF9sZW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbnRyb2wgZGF0YS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvdGhlciI+b3RoZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5SZWFsbHkgd2lja2VkIGZvcm1hdHMgY2FuIHVzZSB0aGlzIHBvaW50ZXIgdG8gcHJlc2VudCB0aGVpciBvd24gZ2x5cGggaW1hZ2UgdG8gY2xpZW50IGFwcGxpY2F0aW9ucy4gTm90ZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBpbWFnZSBmb3JtYXQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibHNiX2RlbHRhIj5sc2JfZGVsdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpbnRlZCBhbmQgdW5oaW50ZWQgbGVmdCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0by1oaW50aW5nIGlzIGFjdGl2ZS4gWmVybyBvdGhlcndpc2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icnNiX2RlbHRhIj5yc2JfZGVsdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpbnRlZCBhbmQgdW5oaW50ZWQgcmlnaHQgc2lkZSBiZWFyaW5nIHdoaWxlIGF1dG8taGludGluZyBpcyBhY3RpdmUuIFplcm8gb3RoZXJ3aXNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPklmIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfR2x5cGgiPkZUX0xvYWRfR2x5cGg8L2E+IGlzIGNhbGxlZCB3aXRoIGRlZmF1bHQgZmxhZ3MgKHNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9ERUZBVUxUPC9hPikgdGhlIGdseXBoIGltYWdlIGlzIGxvYWRlZCBpbiB0aGUgZ2x5cGggc2xvdCBpbiBpdHMgbmF0aXZlIGZvcm1hdCAoZS5nLiwgYW4gb3V0bGluZSBnbHlwaCBmb3IgVHJ1ZVR5cGUgYW5kIFR5cGUmbmJzcDsxIGZvcm1hdHMpLjwvcD4KKzxwPlRoaXMgaW1hZ2UgY2FuIGxhdGVyIGJlIGNvbnZlcnRlZCBpbnRvIGEgYml0bWFwIGJ5IGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX0dseXBoIj5GVF9SZW5kZXJfR2x5cGg8L2E+LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciB0aGUgbmF0aXZlIGltYWdlJ3MgZm9ybWF0LCB0aGVuIGludm9rZXMgaXQuPC9wPgorPHA+VGhlIHJlbmRlcmVyIGlzIGluIGNoYXJnZSBvZiB0cmFuc2Zvcm1pbmcgdGhlIG5hdGl2ZSBpbWFnZSB0aHJvdWdoIHRoZSBzbG90J3MgZmFjZSB0cmFuc2Zvcm1hdGlvbiBmaWVsZHMsIHRoZW4gY29udmVydGluZyBpdCBpbnRvIGEgYml0bWFwIHRoYXQgaXMgcmV0dXJuZWQgaW4gJmxzcXVvO3Nsb3QtJmd0O2JpdG1hcCZyc3F1bzsuPC9wPgorPHA+Tm90ZSB0aGF0ICZsc3F1bztzbG90LSZndDtiaXRtYXBfbGVmdCZyc3F1bzsgYW5kICZsc3F1bztzbG90LSZndDtiaXRtYXBfdG9wJnJzcXVvOyBhcmUgYWxzbyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSBiaXRtYXAgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGVuIHBvc2l0aW9uIChlLmcuLCBjb29yZGluYXRlcyAoMCwwKSBvbiB0aGUgYmFzZWxpbmUpLiBPZiBjb3Vyc2UsICZsc3F1bztzbG90LSZndDtmb3JtYXQmcnNxdW87IGlzIGFsc28gY2hhbmdlZCB0byA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA8L2E+LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+SGVyZSBpcyBhIHNtYWxsIHBzZXVkbyBjb2RlIGZyYWdtZW50IHRoYXQgc2hvd3MgaG93IHRvIHVzZSAmbHNxdW87bHNiX2RlbHRhJnJzcXVvOyBhbmQgJmxzcXVvO3JzYl9kZWx0YSZyc3F1bzs6PC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX1BvcyAgb3JpZ2luX3ggICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEZUX1BvcyAgcHJldl9yc2JfZGVsdGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGZvciBhbGwgZ2x5cGhzIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgJmx0O2NvbXB1dGUga2VybiBiZXR3ZWVuIGN1cnJlbnQgYW5kIHByZXZpb3VzIGdseXBoIGFuZCBhZGQgaXQgdG8gCisgICAgIGBvcmlnaW5feCcmZ3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgJmx0O2xvYWQgZ2x5cGggd2l0aCBgRlRfTG9hZF9HbHlwaCcmZ3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgaWYgKCBwcmV2X3JzYl9kZWx0YSAtIGZhY2UtJmd0O2dseXBoLSZndDtsc2JfZGVsdGEgJmd0Oz0gMzIgKSAgICAgICAgICAgCisgICAgICBvcmlnaW5feCAtPSA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgZWxzZSBpZiAoIHByZXZfcnNiX2RlbHRhIC0gZmFjZS0mZ3Q7Z2x5cGgtJmd0O2xzYl9kZWx0YSAmbHQ7IC0zMiApICAgICAgCisgICAgICBvcmlnaW5feCArPSA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgcHJldl9yc2JfZGVsdGEgPSBmYWNlLSZndDtnbHlwaC0mZ3Q7cnNiX2RlbHRhOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgJmx0O3NhdmUgZ2x5cGggaW1hZ2UsIG9yIHJlbmRlciBnbHlwaCwgb3IgLi4uJmd0OyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgb3JpZ2luX3ggKz0gZmFjZS0mZ3Q7Z2x5cGgtJmd0O2FkdmFuY2UueDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGVuZGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8L3ByZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2x5cGhfTWV0cmljcyI+RlRfR2x5cGhfTWV0cmljczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfR2x5cGhfTWV0cmljc18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgd2lkdGg7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICBoZWlnaHQ7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gIGhvcmlCZWFyaW5nWDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gIGhvcmlCZWFyaW5nWTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gIGhvcmlBZHZhbmNlOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICB2ZXJ0QmVhcmluZ1g7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICB2ZXJ0QmVhcmluZ1k7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICB2ZXJ0QWR2YW5jZTsKKworICB9IDxiPkZUX0dseXBoX01ldHJpY3M8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgdGhlIG1ldHJpY3Mgb2YgYSBzaW5nbGUgZ2x5cGguIFRoZSB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0OyBpZiB0aGUgZmxhZyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19TQ0FMRTwvYT4gaGFzIGJlZW4gdXNlZCB3aGlsZSBsb2FkaW5nIHRoZSBnbHlwaCwgdmFsdWVzIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cyBpbnN0ZWFkLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ3aWR0aCI+d2lkdGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGgncyB3aWR0aC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWlnaHQiPmhlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCdzIGhlaWdodC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJob3JpQmVhcmluZ1giPmhvcmlCZWFyaW5nWDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkxlZnQgc2lkZSBiZWFyaW5nIGZvciBob3Jpem9udGFsIGxheW91dC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJob3JpQmVhcmluZ1kiPmhvcmlCZWFyaW5nWTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRvcCBzaWRlIGJlYXJpbmcgZm9yIGhvcml6b250YWwgbGF5b3V0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImhvcmlBZHZhbmNlIj5ob3JpQWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFkdmFuY2Ugd2lkdGggZm9yIGhvcml6b250YWwgbGF5b3V0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZlcnRCZWFyaW5nWCI+dmVydEJlYXJpbmdYPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TGVmdCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2ZXJ0QmVhcmluZ1kiPnZlcnRCZWFyaW5nWTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRvcCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC4gTGFyZ2VyIHBvc2l0aXZlIHZhbHVlcyBtZWFuIGZ1cnRoZXIgYmVsb3cgdGhlIHZlcnRpY2FsIGdseXBoIG9yaWdpbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2ZXJ0QWR2YW5jZSI+dmVydEFkdmFuY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BZHZhbmNlIGhlaWdodCBmb3IgdmVydGljYWwgbGF5b3V0LiBQb3NpdGl2ZSB2YWx1ZXMgbWVhbiB0aGUgZ2x5cGggaGFzIGEgcG9zaXRpdmUgYWR2YW5jZSBkb3dud2FyZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiBub3QgZGlzYWJsZWQgd2l0aCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19ISU5USU5HPC9hPiwgdGhlIHZhbHVlcyByZXByZXNlbnQgZGltZW5zaW9ucyBvZiB0aGUgaGludGVkIGdseXBoIChpbiBjYXNlIGhpbnRpbmcgaXMgYXBwbGljYWJsZSkuPC9wPgorPHA+U3Ryb2tpbmcgYSBnbHlwaCB3aXRoIGFuIG91dHNpZGUgYm9yZGVyIGRvZXMgbm90IGluY3JlYXNlICZsc3F1bztob3JpQWR2YW5jZSZyc3F1bzsgb3IgJmxzcXVvO3ZlcnRBZHZhbmNlJnJzcXVvOzsgeW91IGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZXNlIHZhbHVlcyB0byBhY2NvdW50IGZvciB0aGUgYWRkZWQgd2lkdGggYW5kIGhlaWdodC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N1YkdseXBoIj5GVF9TdWJHbHlwaDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9TdWJHbHlwaFJlY18qICA8Yj5GVF9TdWJHbHlwaDwvYj47Cis8L3ByZT4KKworPHA+VGhlIHN1YmdseXBoIHN0cnVjdHVyZSBpcyBhbiBpbnRlcm5hbCBvYmplY3QgdXNlZCB0byBkZXNjcmliZSBzdWJnbHlwaHMgKGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBjb21wb3NpdGVzKS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBzdWJnbHlwaCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgaGlnaC1sZXZlbCBBUEksIGhlbmNlIHRoZSBmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi48L3A+Cis8cD5Zb3UgY2FuIGhvd2V2ZXIgcmV0cmlldmUgc3ViZ2x5cGggaW5mb3JtYXRpb24gd2l0aCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfU3ViR2x5cGhfSW5mbyI+RlRfR2V0X1N1YkdseXBoX0luZm88L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQml0bWFwX1NpemUiPkZUX0JpdG1hcF9TaXplPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9CaXRtYXBfU2l6ZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gIGhlaWdodDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICB3aWR0aDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICBzaXplOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgIHhfcHBlbTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gICAgeV9wcGVtOworCisgIH0gPGI+RlRfQml0bWFwX1NpemU8L2I+OworPC9wcmU+CisKKzxwPlRoaXMgc3RydWN0dXJlIG1vZGVscyB0aGUgbWV0cmljcyBvZiBhIGJpdG1hcCBzdHJpa2UgKGkuZS4sIGEgc2V0IG9mIGdseXBocyBmb3IgYSBnaXZlbiBwb2ludCBzaXplIGFuZCByZXNvbHV0aW9uKSBpbiBhIGJpdG1hcCBmb250LiBJdCBpcyB1c2VkIGZvciB0aGUgJmxzcXVvO2F2YWlsYWJsZV9zaXplcyZyc3F1bzsgZmllbGQgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImhlaWdodCI+aGVpZ2h0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIGRpc3RhbmNlLCBpbiBwaXhlbHMsIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGJhc2VsaW5lcy4gSXQgaXMgYWx3YXlzIHBvc2l0aXZlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IndpZHRoIj53aWR0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhdmVyYWdlIHdpZHRoLCBpbiBwaXhlbHMsIG9mIGFsbCBnbHlwaHMgaW4gdGhlIHN0cmlrZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzaXplIj5zaXplPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5vbWluYWwgc2l6ZSBvZiB0aGUgc3RyaWtlIGluIDI2LjYgZnJhY3Rpb25hbCBwb2ludHMuIFRoaXMgZmllbGQgaXMgbm90IHZlcnkgdXNlZnVsLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InhfcHBlbSI+eF9wcGVtPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGhvcml6b250YWwgcHBlbSAobm9taW5hbCB3aWR0aCkgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5X3BwZW0iPnlfcHBlbTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2ZXJ0aWNhbCBwcGVtIChub21pbmFsIGhlaWdodCkgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5XaW5kb3dzIEZOVDogVGhlIG5vbWluYWwgc2l6ZSBnaXZlbiBpbiBhIEZOVCBmb250IGlzIG5vdCByZWxpYWJsZS4gVGh1cyB3aGVuIHRoZSBkcml2ZXIgZmluZHMgaXQgaW5jb3JyZWN0LCBpdCBzZXRzICZsc3F1bztzaXplJnJzcXVvOyB0byBzb21lIGNhbGN1bGF0ZWQgdmFsdWVzIGFuZCBzZXRzICZsc3F1bzt4X3BwZW0mcnNxdW87IGFuZCAmbHNxdW87eV9wcGVtJnJzcXVvOyB0byB0aGUgcGl4ZWwgd2lkdGggYW5kIGhlaWdodCBnaXZlbiBpbiB0aGUgZm9udCwgcmVzcGVjdGl2ZWx5LjwvcD4KKzxwPlRydWVUeXBlIGVtYmVkZGVkIGJpdG1hcHM6ICZsc3F1bztzaXplJnJzcXVvOywgJmxzcXVvO3dpZHRoJnJzcXVvOywgYW5kICZsc3F1bztoZWlnaHQmcnNxdW87IHZhbHVlcyBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUgYml0bWFwIHN0cmlrZSBpdHNlbGYuIFRoZXkgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGdsb2JhbCBmb250IHBhcmFtZXRlcnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Jbml0X0ZyZWVUeXBlIj5GVF9Jbml0X0ZyZWVUeXBlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfSW5pdF9GcmVlVHlwZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAqYWxpYnJhcnkgKTsKKzwvcHJlPgorCis8cD5Jbml0aWFsaXplIGEgbmV3IEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiBUaGUgc2V0IG9mIG1vZHVsZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYXQgYnVpbGQgdGltZS48L3A+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWxpYnJhcnkiPmFsaWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBuZXcgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkluIGNhc2UgeW91IHdhbnQgdG8gcHJvdmlkZSB5b3VyIG93biBtZW1vcnkgYWxsb2NhdGluZyByb3V0aW5lcywgdXNlIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX05ld19MaWJyYXJ5Ij5GVF9OZXdfTGlicmFyeTwvYT4gaW5zdGVhZCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0FkZF9EZWZhdWx0X01vZHVsZXMiPkZUX0FkZF9EZWZhdWx0X01vZHVsZXM8L2E+IChvciBhIHNlcmllcyBvZiBjYWxscyB0byA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9BZGRfTW9kdWxlIj5GVF9BZGRfTW9kdWxlPC9hPikuPC9wPgorPHA+U2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBmb3IgbXVsdGktdGhyZWFkaW5nIGlzc3Vlcy48L3A+Cis8cD5JZiB5b3UgbmVlZCByZWZlcmVuY2UtY291bnRpbmcgKGNmLiA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9SZWZlcmVuY2VfTGlicmFyeSI+RlRfUmVmZXJlbmNlX0xpYnJhcnk8L2E+KSwgdXNlIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX05ld19MaWJyYXJ5Ij5GVF9OZXdfTGlicmFyeTwvYT4gYW5kIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfTGlicmFyeSI+RlRfRG9uZV9MaWJyYXJ5PC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0RvbmVfRnJlZVR5cGUiPkZUX0RvbmVfRnJlZVR5cGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9Eb25lX0ZyZWVUeXBlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gIGxpYnJhcnkgKTsKKzwvcHJlPgorCis8cD5EZXN0cm95IGEgZ2l2ZW4gRnJlZVR5cGUgbGlicmFyeSBvYmplY3QgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGluY2x1ZGluZyByZXNvdXJjZXMsIGRyaXZlcnMsIGZhY2VzLCBzaXplcywgZXRjLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9OZXdfRmFjZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgZmlsZXBhdGhuYW1lLAorICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICphZmFjZSApOworPC9wcmU+CisKKzxwPlRoaXMgZnVuY3Rpb24gY2FsbHMgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+IHRvIG9wZW4gYSBmb250IGJ5IGl0cyBwYXRobmFtZS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhdGhuYW1lIj5wYXRobmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcGF0aCB0byB0aGUgZm9udCBmaWxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiBUaGUgZmlyc3QgZmFjZSBoYXMgaW5kZXgmbmJzcDswLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWZhY2UiPmFmYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuIElmICZsc3F1bztmYWNlX2luZGV4JnJzcXVvOyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Vc2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+IHRvIGRlc3Ryb3kgdGhlIGNyZWF0ZWQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0IChhbG9uZyB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Eb25lX0ZhY2UiPkZUX0RvbmVfRmFjZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0RvbmVfRmFjZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlICk7Cis8L3ByZT4KKworPHA+RGlzY2FyZCBhIGdpdmVuIGZhY2Ugb2JqZWN0LCBhcyB3ZWxsIGFzIGFsbCBvZiBpdHMgY2hpbGQgc2xvdHMgYW5kIHNpemVzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+U2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVmZXJlbmNlX0ZhY2UiPkZUX1JlZmVyZW5jZV9GYWNlPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlZmVyZW5jZV9GYWNlIj5GVF9SZWZlcmVuY2VfRmFjZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1JlZmVyZW5jZV9GYWNlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gIGZhY2UgKTsKKzwvcHJlPgorCis8cD5BIGNvdW50ZXIgZ2V0cyBpbml0aWFsaXplZCB0byZuYnNwOzEgYXQgdGhlIHRpbWUgYW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gc3RydWN0dXJlIGlzIGNyZWF0ZWQuIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUgY291bnRlci4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+IHRoZW4gb25seSBkZXN0cm95cyBhIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXMmbmJzcDsxLCBvdGhlcndpc2UgaXQgc2ltcGx5IGRlY3JlbWVudHMgdGhlIGNvdW50ZXIuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBoZWxwcyBpbiBtYW5hZ2luZyBsaWZlLWN5Y2xlcyBvZiBzdHJ1Y3R1cmVzIHRoYXQgcmVmZXJlbmNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdHMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi40LjI8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX05ld19NZW1vcnlfRmFjZSI+RlRfTmV3X01lbW9yeV9GYWNlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTmV3X01lbW9yeV9GYWNlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4qICBmaWxlX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICAgICBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICAqYWZhY2UgKTsKKzwvcHJlPgorCis8cD5UaGlzIGZ1bmN0aW9uIGNhbGxzIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiB0byBvcGVuIGEgZm9udCB0aGF0IGhhcyBiZWVuIGxvYWRlZCBpbnRvIG1lbW9yeS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZpbGVfYmFzZSI+ZmlsZV9iYXNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZvbnQgZGF0YS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmaWxlX3NpemUiPmZpbGVfc2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzaXplIG9mIHRoZSBtZW1vcnkgY2h1bmsgdXNlZCBieSB0aGUgZm9udCBkYXRhLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiBUaGUgZmlyc3QgZmFjZSBoYXMgaW5kZXgmbmJzcDswLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWZhY2UiPmFmYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuIElmICZsc3F1bztmYWNlX2luZGV4JnJzcXVvOyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3UgbXVzdCBub3QgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0RvbmVfRmFjZSI+RlRfRG9uZV9GYWNlPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfT3Blbl9GYWNlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0FyZ3MiPkZUX09wZW5fQXJnczwvYT4qICBhcmdzLAorICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICAgICAgICphZmFjZSApOworPC9wcmU+CisKKzxwPkNyZWF0ZSBhIGZhY2Ugb2JqZWN0IGZyb20gYSBnaXZlbiByZXNvdXJjZSBkZXNjcmliZWQgYnkgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9BcmdzIj5GVF9PcGVuX0FyZ3M8L2E+LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYXJncyI+YXJnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byBhbiAmbHNxdW87RlRfT3Blbl9BcmdzJnJzcXVvOyBzdHJ1Y3R1cmUgdGhhdCBtdXN0IGJlIGZpbGxlZCBieSB0aGUgY2FsbGVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiBUaGUgZmlyc3QgZmFjZSBoYXMgaW5kZXgmbmJzcDswLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWZhY2UiPmFmYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuIElmICZsc3F1bztmYWNlX2luZGV4JnJzcXVvOyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gU2VlIG5vdGUgYmVsb3cuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlVubGlrZSBGcmVlVHlwZSAxLngsIHRoaXMgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjcmVhdGVzIGEgZ2x5cGggc2xvdCBmb3IgdGhlIGZhY2Ugb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHRocm91Z2ggJmxzcXVvO2ZhY2UtJmd0O2dseXBoJnJzcXVvOy48L3A+Cis8cD5GVF9PcGVuX0ZhY2UgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZSBmb250IGZvcm1hdCBvZiBhIGdpdmVuIGZvbnQgcmVzb3VyY2UgaXMgc3VwcG9ydGVkIGJ5IEZyZWVUeXBlLiBJZiB0aGUgJmxzcXVvO2ZhY2VfaW5kZXgmcnNxdW87IGZpZWxkIGlzIG5lZ2F0aXZlLCB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXMmbmJzcDswIGlmIHRoZSBmb250IGZvcm1hdCBpcyByZWNvZ25pemVkLCBvciBub24temVybyBvdGhlcndpc2U7IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluICZsc3F1bzsqYWZhY2UmcnNxdW87IChpZiAmbHNxdW87YWZhY2UmcnNxdW87IGlzbid0IE5VTEwpLiBUaGUgb25seSB1c2VmdWwgZmllbGQgaW4gdGhpcyBzcGVjaWFsIGNhc2UgaXMgJmxzcXVvO2ZhY2UtJmd0O251bV9mYWNlcyZyc3F1bzsgdGhhdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGZhY2VzIHdpdGhpbiB0aGUgZm9udCBmaWxlLiBBZnRlciBleGFtaW5hdGlvbiwgdGhlIHJldHVybmVkIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IHN0cnVjdHVyZSBzaG91bGQgYmUgZGVhbGxvY2F0ZWQgd2l0aCBhIGNhbGwgdG8gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+LjwvcD4KKzxwPkVhY2ggbmV3IGZhY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIGFsc28gb3ducyBhIGRlZmF1bHQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0LCBhY2Nlc3NpYmxlIGFzICZsc3F1bztmYWNlLSZndDtzaXplJnJzcXVvOy48L3A+Cis8cD5PbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gaW5zdGFuY2UgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZSBvYmplY3RzLCB0aGlzIGlzLCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0ZhY2UiPkZUX09wZW5fRmFjZTwvYT4gYW5kIGl0cyBzaWJsaW5ncyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHVzaW5nIHRoZSBzYW1lICZsc3F1bztsaWJyYXJ5JnJzcXVvOyBhcmd1bWVudC48L3A+Cis8cD5TZWUgdGhlIGRpc2N1c3Npb24gb2YgcmVmZXJlbmNlIGNvdW50ZXJzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZWZlcmVuY2VfRmFjZSI+RlRfUmVmZXJlbmNlX0ZhY2U8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3Blbl9BcmdzIj5GVF9PcGVuX0FyZ3M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX09wZW5fQXJnc18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgZmxhZ3M7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiogIG1lbW9yeV9iYXNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICAgICAgbWVtb3J5X3NpemU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgICAgIHBhdGhuYW1lOworICAgIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfU3RyZWFtIj5GVF9TdHJlYW08L2E+ICAgICAgIHN0cmVhbTsKKyAgICA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGUiPkZUX01vZHVsZTwvYT4gICAgICAgZHJpdmVyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAgICBudW1fcGFyYW1zOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPiogICBwYXJhbXM7CisKKyAgfSA8Yj5GVF9PcGVuX0FyZ3M8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gaW5kaWNhdGUgaG93IHRvIG9wZW4gYSBuZXcgZm9udCBmaWxlIG9yIHN0cmVhbS4gQSBwb2ludGVyIHRvIHN1Y2ggYSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXIgZm9yIHRoZSBmdW5jdGlvbnMgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9BdHRhY2hfU3RyZWFtIj5GVF9BdHRhY2hfU3RyZWFtPC9hPi48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmxhZ3MiPmZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgaG93IHRvIHVzZSB0aGUgc3RydWN0dXJlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1lbW9yeV9iYXNlIj5tZW1vcnlfYmFzZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmaXJzdCBieXRlIG9mIHRoZSBmaWxlIGluIG1lbW9yeS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZW1vcnlfc2l6ZSI+bWVtb3J5X3NpemU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZmlsZSBpbiBtZW1vcnkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icGF0aG5hbWUiPnBhdGhuYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGFuIDgtYml0IGZpbGUgcGF0aG5hbWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyZWFtIj5zdHJlYW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHNvdXJjZSBzdHJlYW0gb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRyaXZlciI+ZHJpdmVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmaWVsZCBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPjsgaXQgc2ltcGx5IHNwZWNpZmllcyB0aGUgZm9udCBkcml2ZXIgdG8gdXNlIHRvIG9wZW4gdGhlIGZhY2UuIElmIHNldCB0byZuYnNwOzAsIEZyZWVUeXBlIHRyaWVzIHRvIGxvYWQgdGhlIGZhY2Ugd2l0aCBlYWNoIG9uZSBvZiB0aGUgZHJpdmVycyBpbiBpdHMgbGlzdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJudW1fcGFyYW1zIj5udW1fcGFyYW1zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBleHRyYSBwYXJhbWV0ZXJzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhcmFtcyI+cGFyYW1zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RXh0cmEgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGZvbnQgZHJpdmVyIHdoZW4gb3BlbmluZyBhIG5ldyBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBzdHJlYW0gdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50cyBvZiAmbHNxdW87ZmxhZ3MmcnNxdW87IHRoYXQgYXJlIHRlc3RlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPjo8L3A+Cis8cD5JZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9YWFgiPkZUX09QRU5fTUVNT1JZPC9hPiBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCB0aGlzIGlzIGEgbWVtb3J5IGZpbGUgb2YgJmxzcXVvO21lbW9yeV9zaXplJnJzcXVvOyBieXRlcywgbG9jYXRlZCBhdCAmbHNxdW87bWVtb3J5X2FkZHJlc3MmcnNxdW87LiBUaGUgZGF0YSBhcmUgYXJlIG5vdCBjb3BpZWQsIGFuZCB0aGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbSA8aT5hZnRlcjwvaT4gdGhlIGNvcnJlc3BvbmRpbmcgY2FsbCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Eb25lX0ZhY2UiPkZUX0RvbmVfRmFjZTwvYT4uPC9wPgorPHA+T3RoZXJ3aXNlLCBpZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9YWFgiPkZUX09QRU5fU1RSRUFNPC9hPiBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCBhIGN1c3RvbSBpbnB1dCBzdHJlYW0gJmxzcXVvO3N0cmVhbSZyc3F1bzsgaXMgdXNlZC48L3A+Cis8cD5PdGhlcndpc2UsIGlmIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX1hYWCI+RlRfT1BFTl9QQVRITkFNRTwvYT4gYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhIG5vcm1hbCBmaWxlIGFuZCB1c2UgJmxzcXVvO3BhdGhuYW1lJnJzcXVvOyB0byBvcGVuIGl0LjwvcD4KKzxwPklmIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX1hYWCI+RlRfT1BFTl9EUklWRVI8L2E+IGJpdCBpcyBzZXQsIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiBvbmx5IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgZHJpdmVyIHdob3NlIGhhbmRsZXIgaXMgaW4gJmxzcXVvO2RyaXZlciZyc3F1bzsuPC9wPgorPHA+SWYgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fWFhYIj5GVF9PUEVOX1BBUkFNUzwvYT4gYml0IGlzIHNldCwgdGhlIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgJmxzcXVvO251bV9wYXJhbXMmcnNxdW87IGFuZCAmbHNxdW87cGFyYW1zJnJzcXVvOyBpcyB1c2VkLiBUaGV5IGFyZSBpZ25vcmVkIG90aGVyd2lzZS48L3A+Cis8cD5JZGVhbGx5LCBib3RoIHRoZSAmbHNxdW87cGF0aG5hbWUmcnNxdW87IGFuZCAmbHNxdW87cGFyYW1zJnJzcXVvOyBmaWVsZHMgc2hvdWxkIGJlIHRhZ2dlZCBhcyAmbHNxdW87Y29uc3QmcnNxdW87OyB0aGlzIGlzIG1pc3NpbmcgZm9yIEFQSSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSW4gb3RoZXIgd29yZHMsIGFwcGxpY2F0aW9ucyBzaG91bGQgdHJlYXQgdGhlbSBhcyByZWFkLW9ubHkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9QYXJhbWV0ZXIiPkZUX1BhcmFtZXRlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfUGFyYW1ldGVyXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICB0YWc7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9pbnRlciI+RlRfUG9pbnRlcjwvYT4gIGRhdGE7CisKKyAgfSA8Yj5GVF9QYXJhbWV0ZXI8L2I+OworPC9wcmU+CisKKzxwPkEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgbW9yZSBvciBsZXNzIGdlbmVyaWMgcGFyYW1ldGVycyB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0ZhY2UiPkZUX09wZW5fRmFjZTwvYT4uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhZyI+dGFnPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBmb3VyLWJ5dGUgaWRlbnRpZmljYXRpb24gdGFnLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRhdGEiPmRhdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkYXRhLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBJRCBhbmQgZnVuY3Rpb24gb2YgcGFyYW1ldGVycyBhcmUgZHJpdmVyLXNwZWNpZmljLiBTZWUgdGhlIHZhcmlvdXMgRlRfUEFSQU1fVEFHX1hYWCBmbGFncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0F0dGFjaF9GaWxlIj5GVF9BdHRhY2hfRmlsZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0F0dGFjaF9GaWxlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICBmaWxlcGF0aG5hbWUgKTsKKzwvcHJlPgorCis8cD5UaGlzIGZ1bmN0aW9uIGNhbGxzIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0F0dGFjaF9TdHJlYW0iPkZUX0F0dGFjaF9TdHJlYW08L2E+IHRvIGF0dGFjaCBhIGZpbGUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB0YXJnZXQgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZpbGVwYXRobmFtZSI+ZmlsZXBhdGhuYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHBhdGhuYW1lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9BdHRhY2hfU3RyZWFtIj5GVF9BdHRhY2hfU3RyZWFtPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfQXR0YWNoX1N0cmVhbTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0FyZ3MiPkZUX09wZW5fQXJnczwvYT4qICBwYXJhbWV0ZXJzICk7Cis8L3ByZT4KKworPHA+JmxzcXVvO0F0dGFjaCZyc3F1bzsgZGF0YSB0byBhIGZhY2Ugb2JqZWN0LiBOb3JtYWxseSwgdGhpcyBpcyB1c2VkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGZhY2Ugb2JqZWN0LiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhdHRhY2ggYW4gQUZNIGZpbGUgdGhhdCBjb21lcyB3aXRoIGEgVHlwZSZuYnNwOzEgZm9udCB0byBnZXQgdGhlIGtlcm5pbmcgdmFsdWVzIGFuZCBvdGhlciBtZXRyaWNzLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwYXJhbWV0ZXJzIj5wYXJhbWV0ZXJzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fQXJncyI+RlRfT3Blbl9BcmdzPC9hPiB0aGF0IG11c3QgYmUgZmlsbGVkIGJ5IHRoZSBjYWxsZXIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBtZWFuaW5nIG9mIHRoZSAmbHNxdW87YXR0YWNoJnJzcXVvOyAoaS5lLiwgd2hhdCByZWFsbHkgaGFwcGVucyB3aGVuIHRoZSBuZXcgZmlsZSBpcyByZWFkKSBpcyBub3QgZml4ZWQgYnkgRnJlZVR5cGUgaXRzZWxmLiBJdCByZWFsbHkgZGVwZW5kcyBvbiB0aGUgZm9udCBmb3JtYXQgKGFuZCB0aHVzIHRoZSBmb250IGRyaXZlcikuPC9wPgorPHA+Q2xpZW50IGFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nIHdoZW4gaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gTW9zdCBkcml2ZXJzIHNpbXBseSBkbyBub3QgaW1wbGVtZW50IGZpbGUgYXR0YWNobWVudHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU2V0X0NoYXJfU2l6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GMjZEb3Q2Ij5GVF9GMjZEb3Q2PC9hPiAgY2hhcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRjI2RG90NiI+RlRfRjI2RG90NjwvYT4gIGNoYXJfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgaG9yel9yZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgdmVydF9yZXNvbHV0aW9uICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBjYWxscyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZXF1ZXN0X1NpemUiPkZUX1JlcXVlc3RfU2l6ZTwvYT4gdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplIChpbiBwb2ludHMpLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcl93aWR0aCI+Y2hhcl93aWR0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBub21pbmFsIHdpZHRoLCBpbiAyNi42IGZyYWN0aW9uYWwgcG9pbnRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNoYXJfaGVpZ2h0Ij5jaGFyX2hlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBub21pbmFsIGhlaWdodCwgaW4gMjYuNiBmcmFjdGlvbmFsIHBvaW50cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJob3J6X3Jlc29sdXRpb24iPmhvcnpfcmVzb2x1dGlvbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gZHBpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZlcnRfcmVzb2x1dGlvbiI+dmVydF9yZXNvbHV0aW9uPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIHJlc29sdXRpb24gaW4gZHBpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiBlaXRoZXIgdGhlIGNoYXJhY3RlciB3aWR0aCBvciBoZWlnaHQgaXMgemVybywgaXQgaXMgc2V0IGVxdWFsIHRvIHRoZSBvdGhlciB2YWx1ZS48L3A+Cis8cD5JZiBlaXRoZXIgdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgcmVzb2x1dGlvbiBpcyB6ZXJvLCBpdCBpcyBzZXQgZXF1YWwgdG8gdGhlIG90aGVyIHZhbHVlLjwvcD4KKzxwPkEgY2hhcmFjdGVyIHdpZHRoIG9yIGhlaWdodCBzbWFsbGVyIHRoYW4gMXB0IGlzIHNldCB0byAxcHQ7IGlmIGJvdGggcmVzb2x1dGlvbiB2YWx1ZXMgYXJlIHplcm8sIHRoZXkgYXJlIHNldCB0byA3MmRwaS48L3A+Cis8cD5Eb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfUGl4ZWxfU2l6ZXMiPkZUX1NldF9QaXhlbF9TaXplczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1NldF9QaXhlbF9TaXplczwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICBwaXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgcGl4ZWxfaGVpZ2h0ICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBjYWxscyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZXF1ZXN0X1NpemUiPkZUX1JlcXVlc3RfU2l6ZTwvYT4gdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplIChpbiBwaXhlbHMpLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwaXhlbF93aWR0aCI+cGl4ZWxfd2lkdGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbm9taW5hbCB3aWR0aCwgaW4gcGl4ZWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBpeGVsX2hlaWdodCI+cGl4ZWxfaGVpZ2h0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5vbWluYWwgaGVpZ2h0LCBpbiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPllvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHJlc3VsdGluZyBnbHlwaHMgbWF0Y2hpbmcsIG9yIGJlaW5nIGNvbnN0cmFpbmVkLCB0byB0aGlzIHBpeGVsIHNpemUuIFJlZmVyIHRvIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlcXVlc3RfU2l6ZSI+RlRfUmVxdWVzdF9TaXplPC9hPiB0byB1bmRlcnN0YW5kIGhvdyByZXF1ZXN0ZWQgc2l6ZXMgcmVsYXRlIHRvIGFjdHVhbCBzaXplcy48L3A+Cis8cD5Eb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SZXF1ZXN0X1NpemUiPkZUX1JlcXVlc3RfU2l6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1JlcXVlc3RfU2l6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZV9SZXF1ZXN0Ij5GVF9TaXplX1JlcXVlc3Q8L2E+ICByZXEgKTsKKzwvcHJlPgorCis8cD5SZXNpemUgdGhlIHNjYWxlIG9mIHRoZSBhY3RpdmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0IGluIGEgZmFjZS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJlcSI+cmVxPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGEgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZV9SZXF1ZXN0UmVjIj5GVF9TaXplX1JlcXVlc3RSZWM8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5BbHRob3VnaCBkcml2ZXJzIG1heSBzZWxlY3QgdGhlIGJpdG1hcCBzdHJpa2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3QsIHlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyBpZiB5b3UgaW50ZW5kIHRvIHNlbGVjdCBhIHBhcnRpY3VsYXIgYml0bWFwIHN0cmlrZS4gVXNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NlbGVjdF9TaXplIj5GVF9TZWxlY3RfU2l6ZTwvYT4gaW5zdGVhZCBpbiB0aGF0IGNhc2UuPC9wPgorPHA+VGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgcmVzdWx0aW5nIGdseXBoIHNpemUgaXMgZGVwZW5kZW50IGVudGlyZWx5IG9uIGhvdyB0aGUgc2l6ZSBpcyBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmFjZS4gVGhlIGZvbnQgZGVzaWduZXIgY2hvb3NlcyB0aGUgZmluYWwgc2l6ZSBvZiBlYWNoIGdseXBoIHJlbGF0aXZlIHRvIHRoaXMgc2l6ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gJmxzcXVvOzxhIGhyZWY9Imh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2NzL2dseXBocy9nbHlwaHMtMi5odG1sIj5odHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jcy9nbHlwaHMvZ2x5cGhzLTIuaHRtbDwvYT4mcnNxdW87PC9wPgorPHA+RG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU2VsZWN0X1NpemUiPkZUX1NlbGVjdF9TaXplPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU2VsZWN0X1NpemU8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgIHN0cmlrZV9pbmRleCApOworPC9wcmU+CisKKzxwPlNlbGVjdCBhIGJpdG1hcCBzdHJpa2UuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJpa2VfaW5kZXgiPnN0cmlrZV9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgYml0bWFwIHN0cmlrZSBpbiB0aGUgJmxzcXVvO2F2YWlsYWJsZV9zaXplcyZyc3F1bzsgZmllbGQgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZVJlYyI+RlRfRmFjZVJlYzwvYT4gc3RydWN0dXJlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TaXplX1JlcXVlc3RfVHlwZSI+RlRfU2l6ZV9SZXF1ZXN0X1R5cGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9TaXplX1JlcXVlc3RfVHlwZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUwiPkZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUw8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTTwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWCI+RlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTCI+RlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVM8L2E+LAorCisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfTUFYCisKKyAgfSA8Yj5GVF9TaXplX1JlcXVlc3RfVHlwZTwvYj47Cis8L3ByZT4KKworPHA+QW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSBzdXBwb3J0ZWQgc2l6ZSByZXF1ZXN0IHR5cGVzLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5vbWluYWwgc2l6ZS4gVGhlICZsc3F1bzt1bml0c19wZXJfRU0mcnNxdW87IGZpZWxkIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGJvdGggc2NhbGluZyB2YWx1ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0iPkZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHJlYWwgZGltZW5zaW9uLiBUaGUgc3VtIG9mIHRoZSB0aGUgJmxzcXVvO2FzY2VuZGVyJnJzcXVvOyBhbmQgKG1pbnVzIG9mKSB0aGUgJmxzcXVvO2Rlc2NlbmRlciZyc3F1bzsgZmllbGRzIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGFyZSB1c2VkIHRvIGRldGVybWluZSBib3RoIHNjYWxpbmcgdmFsdWVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NJWkVfUkVRVUVTVF9UWVBFX0JCT1giPkZUX1NJWkVfUkVRVUVTVF9UWVBFX0JCT1g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZm9udCBib3VuZGluZyBib3guIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSAmbHNxdW87YmJveCZyc3F1bzsgZmllbGQgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZVJlYyI+RlRfRmFjZVJlYzwvYT4gYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsaW5nIHZhbHVlLCByZXNwZWN0aXZlbHkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTCI+RlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSAmbHNxdW87bWF4X2FkdmFuY2Vfd2lkdGgmcnNxdW87IGZpZWxkIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgdmFsdWU7IHRoZSB2ZXJ0aWNhbCBzY2FsaW5nIHZhbHVlIGlzIGRldGVybWluZWQgdGhlIHNhbWUgd2F5IGFzIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdF9UeXBlIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTTwvYT4gZG9lcy4gRmluYWxseSwgYm90aCBzY2FsaW5nIHZhbHVlcyBhcmUgc2V0IHRvIHRoZSBzbWFsbGVyIG9uZS4gVGhpcyB0eXBlIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBmb250IHNpemUgZm9yLCBzYXksIGEgd2luZG93IG9mIGEgZ2l2ZW4gZGltZW5zaW9uIGFuZCA4MHgyNCBjZWxscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVMiPkZUX1NJWkVfUkVRVUVTVF9UWVBFX1NDQUxFUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlNwZWNpZnkgdGhlIHNjYWxpbmcgdmFsdWVzIGRpcmVjdGx5LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBhYm92ZSBkZXNjcmlwdGlvbnMgb25seSBhcHBseSB0byBzY2FsYWJsZSBmb3JtYXRzLiBGb3IgYml0bWFwIGZvcm1hdHMsIHRoZSBiZWhhdmlvdXIgaXMgdXAgdG8gdGhlIGRyaXZlci48L3A+Cis8cD5TZWUgdGhlIG5vdGUgc2VjdGlvbiBvZiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplX01ldHJpY3MiPkZUX1NpemVfTWV0cmljczwvYT4gaWYgeW91IHdvbmRlciBob3cgc2l6ZSByZXF1ZXN0aW5nIHJlbGF0ZXMgdG8gc2NhbGluZyB2YWx1ZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TaXplX1JlcXVlc3RSZWMiPkZUX1NpemVfUmVxdWVzdFJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfU2l6ZV9SZXF1ZXN0UmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZV9SZXF1ZXN0X1R5cGUiPkZUX1NpemVfUmVxdWVzdF9UeXBlPC9hPiAgdHlwZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgICAgICAgICAgIHdpZHRoOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICAgICAgICAgICAgaGVpZ2h0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgICAgICAgaG9yaVJlc29sdXRpb247CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgICAgICAgICB2ZXJ0UmVzb2x1dGlvbjsKKworICB9IDxiPkZUX1NpemVfUmVxdWVzdFJlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIHNpemUgcmVxdWVzdC48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idHlwZSI+dHlwZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplX1JlcXVlc3RfVHlwZSI+RlRfU2l6ZV9SZXF1ZXN0X1R5cGU8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IndpZHRoIj53aWR0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBkZXNpcmVkIHdpZHRoLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImhlaWdodCI+aGVpZ2h0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGRlc2lyZWQgaGVpZ2h0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImhvcmlSZXNvbHV0aW9uIj5ob3JpUmVzb2x1dGlvbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIHJlc29sdXRpb24uIElmIHNldCB0byB6ZXJvLCAmbHNxdW87d2lkdGgmcnNxdW87IGlzIHRyZWF0ZWQgYXMgYSAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgdmFsdWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmVydFJlc29sdXRpb24iPnZlcnRSZXNvbHV0aW9uPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIHJlc29sdXRpb24uIElmIHNldCB0byB6ZXJvLCAmbHNxdW87aGVpZ2h0JnJzcXVvOyBpcyB0cmVhdGVkIGFzIGEgMjYuNiBmcmFjdGlvbmFsIHBpeGVsIHZhbHVlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPklmICZsc3F1bzt3aWR0aCZyc3F1bzsgaXMgemVybywgdGhlbiB0aGUgaG9yaXpvbnRhbCBzY2FsaW5nIHZhbHVlIGlzIHNldCBlcXVhbCB0byB0aGUgdmVydGljYWwgc2NhbGluZyB2YWx1ZSwgYW5kIHZpY2UgdmVyc2EuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TaXplX1JlcXVlc3QiPkZUX1NpemVfUmVxdWVzdDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9TaXplX1JlcXVlc3RSZWNfICAqPGI+RlRfU2l6ZV9SZXF1ZXN0PC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIHNpemUgcmVxdWVzdCBzdHJ1Y3R1cmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfVHJhbnNmb3JtIj5GVF9TZXRfVHJhbnNmb3JtPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9TZXRfVHJhbnNmb3JtPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX01hdHJpeCI+RlRfTWF0cml4PC9hPiogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgZGVsdGEgKTsKKzwvcHJlPgorCis8cD5BIGZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZ2x5cGggaW1hZ2VzIHdoZW4gdGhleSBhcmUgbG9hZGVkIGludG8gYSBnbHlwaCBzbG90IHRocm91Z2ggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4uPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hdHJpeCI+bWF0cml4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbidzIDJ4MiBtYXRyaXguIFVzZSZuYnNwOzAgZm9yIHRoZSBpZGVudGl0eSBtYXRyaXguPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVsdGEiPmRlbHRhPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IuIFVzZSZuYnNwOzAgZm9yIHRoZSBudWxsIHZlY3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgdHJhbnNmb3JtYXRpb24gaXMgb25seSBhcHBsaWVkIHRvIHNjYWxhYmxlIGltYWdlIGZvcm1hdHMgYWZ0ZXIgdGhlIGdseXBoIGhhcyBiZWVuIGxvYWRlZC4gSXQgbWVhbnMgdGhhdCBoaW50aW5nIGlzIHVuYWx0ZXJlZCBieSB0aGUgdHJhbnNmb3JtYXRpb24gYW5kIGlzIHBlcmZvcm1lZCBvbiB0aGUgY2hhcmFjdGVyIHNpemUgZ2l2ZW4gaW4gdGhlIGxhc3QgY2FsbCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfUGl4ZWxfU2l6ZXMiPkZUX1NldF9QaXhlbF9TaXplczwvYT4uPC9wPgorPHA+Tm90ZSB0aGF0IHRoaXMgYWxzbyB0cmFuc2Zvcm1zIHRoZSAmbHNxdW87ZmFjZS5nbHlwaC5hZHZhbmNlJnJzcXVvOyBmaWVsZCwgYnV0IDxiPm5vdDwvYj4gdGhlIHZhbHVlcyBpbiAmbHNxdW87ZmFjZS5nbHlwaC5tZXRyaWNzJnJzcXVvOy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xvYWRfR2x5cGgiPkZUX0xvYWRfR2x5cGg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9Mb2FkX0dseXBoPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICBmYWNlLAorICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQzMiI+RlRfSW50MzI8L2E+ICBsb2FkX2ZsYWdzICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGxvYWQgYSBzaW5nbGUgZ2x5cGggaW50byB0aGUgZ2x5cGggc2xvdCBvZiBhIGZhY2Ugb2JqZWN0LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCBpcyBsb2FkZWQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdseXBoX2luZGV4Ij5nbHlwaF9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4gRm9yIENJRC1rZXllZCBmb250cyAoZWl0aGVyIGluIFBTIG9yIGluIENGRiBmb3JtYXQpIHRoaXMgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBDSUQgdmFsdWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibG9hZF9mbGFncyI+bG9hZF9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gVGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1hYWDwvYT4gY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsIHdoZXRoZXIgdG8gaGludCB0aGUgb3V0bGluZSwgZXRjKS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIGxvYWRlZCBnbHlwaCBtYXkgYmUgdHJhbnNmb3JtZWQuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfVHJhbnNmb3JtIj5GVF9TZXRfVHJhbnNmb3JtPC9hPiBmb3IgdGhlIGRldGFpbHMuPC9wPgorPHA+Rm9yIHN1YnNldHRlZCBDSUQta2V5ZWQgZm9udHMsICZsc3F1bztGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCZyc3F1bzsgaXMgcmV0dXJuZWQgZm9yIGludmFsaWQgQ0lEIHZhbHVlcyAodGhpcyBpcywgZm9yIENJRCB2YWx1ZXMgdGhhdCBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBnbHlwaCBpbiB0aGUgZm9udCkuIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX0NJRF9LRVlFRDwvYT4gZmxhZyBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X0NoYXJfSW5kZXgiPkZUX0dldF9DaGFyX0luZGV4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiApCisgIDxiPkZUX0dldF9DaGFyX0luZGV4PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgY2hhcmNvZGUgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUuIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNoYXJtYXAgb2JqZWN0IHRvIGRvIHRoZSBtYXBwaW5nLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNoYXJjb2RlIj5jaGFyY29kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjaGFyYWN0ZXIgY29kZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBnbHlwaCBpbmRleC4gMCZuYnNwO21lYW5zICZsc3F1bzt1bmRlZmluZWQgY2hhcmFjdGVyIGNvZGUmcnNxdW87LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+SWYgeW91IHVzZSBGcmVlVHlwZSB0byBtYW5pcHVsYXRlIHRoZSBjb250ZW50cyBvZiBmb250IGZpbGVzIGRpcmVjdGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBnbHlwaCBpbmRleCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYWx3YXlzIGNvcnJlc3BvbmQgdG8gdGhlIGludGVybmFsIGluZGljZXMgdXNlZCB3aXRoaW4gdGhlIGZpbGUuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCB2YWx1ZSZuYnNwOzAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZSAmbHNxdW87bWlzc2luZyBnbHlwaCZyc3F1bzsuIElmIHRoZSBmaXJzdCBnbHlwaCBpcyBub3QgbmFtZWQgJmxzcXVvOy5ub3RkZWYmcnNxdW87LCB0aGVuIGZvciBUeXBlJm5ic3A7MSBhbmQgVHlwZSZuYnNwOzQyIGZvbnRzLCAmbHNxdW87Lm5vdGRlZiZyc3F1bzsgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBnbHlwaCBJRCZuYnNwOzAgcG9zaXRpb24sIGFuZCB3aGF0ZXZlciB3YXMgdGhlcmUgd2lsbCBiZSBtb3ZlZCB0byB0aGUgcG9zaXRpb24gJmxzcXVvOy5ub3RkZWYmcnNxdW87IGhhZC4gRm9yIFR5cGUmbmJzcDsxIGZvbnRzLCBpZiB0aGVyZSBpcyBubyAmbHNxdW87Lm5vdGRlZiZyc3F1bzsgZ2x5cGggYXQgYWxsLCB0aGVuIG9uZSB3aWxsIGJlIGNyZWF0ZWQgYXQgaW5kZXgmbmJzcDswIGFuZCB3aGF0ZXZlciB3YXMgdGhlcmUgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbGFzdCBpbmRleCAtLSBUeXBlJm5ic3A7NDIgZm9udHMgYXJlIGNvbnNpZGVyZWQgaW52YWxpZCB1bmRlciB0aGlzIGNvbmRpdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9GaXJzdF9DaGFyIj5GVF9HZXRfRmlyc3RfQ2hhcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiApCisgIDxiPkZUX0dldF9GaXJzdF9DaGFyPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICphZ2luZGV4ICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuIGZhY2UuIEl0IGFsc28gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFnaW5kZXgiPmFnaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5HbHlwaCBpbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgY29kZS4gMCZuYnNwO2lmIGNoYXJtYXAgaXMgZW1wdHkuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgY2hhcm1hcCdzIGZpcnN0IGNoYXJhY3RlciBjb2RlLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9OZXh0X0NoYXIiPkZUX0dldF9OZXh0X0NoYXI8L2E+IHRvIGJlIGFibGUgdG8gcGFyc2UgYWxsIGNoYXJhY3RlciBjb2RlcyBhdmFpbGFibGUgaW4gYSBnaXZlbiBjaGFybWFwLiBUaGUgY29kZSBzaG91bGQgbG9vayBsaWtlIHRoaXM6PC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX1VMb25nICBjaGFyY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEZUX1VJbnQgICBnaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGNoYXJjb2RlID0gRlRfR2V0X0ZpcnN0X0NoYXIoIGZhY2UsICZhbXA7Z2luZGV4ICk7ICAgICAgICAgICAgICAgICAgIAorICB3aGlsZSAoIGdpbmRleCAhPSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCAoY2hhcmNvZGUsZ2luZGV4KSBwYWlyIC4uLiAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNoYXJjb2RlID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgY2hhcmNvZGUsICZhbXA7Z2luZGV4ICk7ICAgICAgICAKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzwvcHJlPgorPHA+Tm90ZSB0aGF0ICZsc3F1bzsqYWdpbmRleCZyc3F1bzsgaXMgc2V0IHRvJm5ic3A7MCBpZiB0aGUgY2hhcm1hcCBpcyBlbXB0eS4gVGhlIHJlc3VsdCBpdHNlbGYgY2FuIGJlJm5ic3A7MCBpbiB0d28gY2FzZXM6IGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5IG9yIGlmIHRoZSB2YWx1ZSZuYnNwOzAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X05leHRfQ2hhciI+RlRfR2V0X05leHRfQ2hhcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiApCisgIDxiPkZUX0dldF9OZXh0X0NoYXI8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICphZ2luZGV4ICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgY3VycmVudCBjaGFybWFwIG9mIGEgZ2l2ZW4gZmFjZSBmb2xsb3dpbmcgdGhlIHZhbHVlICZsc3F1bztjaGFyX2NvZGUmcnNxdW87LCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIGluZGV4LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNoYXJfY29kZSI+Y2hhcl9jb2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBjb2RlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWdpbmRleCI+YWdpbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkdseXBoIGluZGV4IG9mIG5leHQgY2hhcmFjdGVyIGNvZGUuIDAmbmJzcDtpZiBjaGFybWFwIGlzIGVtcHR5LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGNoYXJtYXAncyBuZXh0IGNoYXJhY3RlciBjb2RlLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9GaXJzdF9DaGFyIj5GVF9HZXRfRmlyc3RfQ2hhcjwvYT4gdG8gd2FsayBvdmVyIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gU2VlIHRoZSBub3RlIGZvciB0aGlzIGZ1bmN0aW9uIGZvciBhIHNpbXBsZSBjb2RlIGV4YW1wbGUuPC9wPgorPHA+Tm90ZSB0aGF0ICZsc3F1bzsqYWdpbmRleCZyc3F1bzsgaXMgc2V0IHRvJm5ic3A7MCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGNvZGVzIGluIHRoZSBjaGFybWFwLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X05hbWVfSW5kZXgiPkZUX0dldF9OYW1lX0luZGV4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiApCisgIDxiPkZUX0dldF9OYW1lX0luZGV4PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICBnbHlwaF9uYW1lICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUuIFRoaXMgZnVuY3Rpb24gdXNlcyBkcml2ZXIgc3BlY2lmaWMgb2JqZWN0cyB0byBkbyB0aGUgdHJhbnNsYXRpb24uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGhfbmFtZSI+Z2x5cGhfbmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBuYW1lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGdseXBoIGluZGV4LiAwJm5ic3A7bWVhbnMgJmxzcXVvO3VuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZSZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Mb2FkX0NoYXIiPkZUX0xvYWRfQ2hhcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0xvYWRfQ2hhcjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICBjaGFyX2NvZGUsCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50MzIiPkZUX0ludDMyPC9hPiAgbG9hZF9mbGFncyApOworPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gdXNlZCB0byBsb2FkIGEgc2luZ2xlIGdseXBoIGludG8gdGhlIGdseXBoIHNsb3Qgb2YgYSBmYWNlIG9iamVjdCwgYWNjb3JkaW5nIHRvIGl0cyBjaGFyYWN0ZXIgY29kZS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3Qgd2hlcmUgdGhlIGdseXBoIGlzIGxvYWRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcl9jb2RlIj5jaGFyX2NvZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGgncyBjaGFyYWN0ZXIgY29kZSwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNoYXJtYXAgdXNlZCBpbiB0aGUgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsb2FkX2ZsYWdzIj5sb2FkX2ZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBmbGFnIGluZGljYXRpbmcgd2hhdCB0byBsb2FkIGZvciB0aGlzIGdseXBoLiBUaGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfWFhYPC9hPiBjb25zdGFudHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfQ2hhcl9JbmRleCI+RlRfR2V0X0NoYXJfSW5kZXg8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xPQURfVEFSR0VUX01PREUiPkZUX0xPQURfVEFSR0VUX01PREU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9MT0FEX1RBUkdFVF9NT0RFPC9iPiggeCApICAoICg8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZW5kZXJfTW9kZSI+RlRfUmVuZGVyX01vZGU8L2E+KSggKCAoeCkgJmd0OyZndDsgMTYgKSAmYW1wOyAxNSApICkKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SZW5kZXJfTW9kZTwvYT4gY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX1hYWCI+RlRfTE9BRF9UQVJHRVRfWFhYPC9hPiB2YWx1ZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlbmRlcl9HbHlwaCI+RlRfUmVuZGVyX0dseXBoPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfUmVuZGVyX0dseXBoPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90Ij5GVF9HbHlwaFNsb3Q8L2E+ICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JlbmRlcl9Nb2RlPC9hPiAgcmVuZGVyX21vZGUgKTsKKzwvcHJlPgorCis8cD5Db252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgdG8gYSBiaXRtYXAuIEl0IGRvZXMgc28gYnkgaW5zcGVjdGluZyB0aGUgZ2x5cGggaW1hZ2UgZm9ybWF0LCBmaW5kaW5nIHRoZSByZWxldmFudCByZW5kZXJlciwgYW5kIGludm9raW5nIGl0LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNsb3QiPnNsb3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgZ2x5cGggc2xvdCBjb250YWluaW5nIHRoZSBpbWFnZSB0byBjb252ZXJ0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZW5kZXJfbW9kZSI+cmVuZGVyX21vZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGlzIHRoZSByZW5kZXIgbW9kZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2x5cGggaW1hZ2UgaW50byBhIGJpdG1hcC4gU2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SZW5kZXJfTW9kZTwvYT4gZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMsIGZvbnQgc2NhbGluZyB2YWx1ZXMgbXVzdCBiZSBzZXQgd2l0aCBmdW5jdGlvbnMgbGlrZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiBiZWZvcmUgY2FsbGluZyBGVF9SZW5kZXJfR2x5cGguPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SZW5kZXJfTW9kZSI+RlRfUmVuZGVyX01vZGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9SZW5kZXJfTW9kZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JFTkRFUl9NT0RFX05PUk1BTCI+RlRfUkVOREVSX01PREVfTk9STUFMPC9hPiA9IDAsCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUkVOREVSX01PREVfTElHSFQiPkZUX1JFTkRFUl9NT0RFX0xJR0hUPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SRU5ERVJfTU9ERV9NT05PIj5GVF9SRU5ERVJfTU9ERV9NT05PPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SRU5ERVJfTU9ERV9MQ0QiPkZUX1JFTkRFUl9NT0RFX0xDRDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUkVOREVSX01PREVfTENEX1YiPkZUX1JFTkRFUl9NT0RFX0xDRF9WPC9hPiwKKworICAgIEZUX1JFTkRFUl9NT0RFX01BWAorCisgIH0gPGI+RlRfUmVuZGVyX01vZGU8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPkZUX1JlbmRlcl9Nb2RlPC9iPicgdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X3JlbmRlcl9tb2RlX25vcm1hbCAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUkVOREVSX01PREVfTk9STUFMIj5GVF9SRU5ERVJfTU9ERV9OT1JNQUw8L2E+CisjZGVmaW5lIGZ0X3JlbmRlcl9tb2RlX21vbm8gICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUkVOREVSX01PREVfTU9OTyI+RlRfUkVOREVSX01PREVfTU9OTzwvYT4KKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiB0eXBlIHRoYXQgbGlzdHMgdGhlIHJlbmRlciBtb2RlcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUmbmJzcDsyLiBFYWNoIG1vZGUgY29ycmVzcG9uZHMgdG8gYSBzcGVjaWZpYyB0eXBlIG9mIHNjYW5saW5lIGNvbnZlcnNpb24gcGVyZm9ybWVkIG9uIHRoZSBvdXRsaW5lLjwvcD4KKzxwPkZvciBiaXRtYXAgZm9udHMgYW5kIGVtYmVkZGVkIGJpdG1hcHMgdGhlICZsc3F1bztiaXRtYXAtJmd0O3BpeGVsX21vZGUmcnNxdW87IGZpZWxkIGluIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HbHlwaFNsb3RSZWMiPkZUX0dseXBoU2xvdFJlYzwvYT4gc3RydWN0dXJlIGdpdmVzIHRoZSBmb3JtYXQgb2YgdGhlIHJldHVybmVkIGJpdG1hcC48L3A+Cis8cD5BbGwgbW9kZXMgZXhjZXB0IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SRU5ERVJfTU9ERV9NT05PPC9hPiB1c2UgMjU2IGxldmVscyBvZiBvcGFjaXR5LjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9SRU5ERVJfTU9ERV9OT1JNQUwiPkZUX1JFTkRFUl9NT0RFX05PUk1BTDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgaXMgdGhlIGRlZmF1bHQgcmVuZGVyIG1vZGU7IGl0IGNvcnJlc3BvbmRzIHRvIDgtYml0IGFudGktYWxpYXNlZCBiaXRtYXBzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1JFTkRFUl9NT0RFX0xJR0hUIj5GVF9SRU5ERVJfTU9ERV9MSUdIVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgaXMgZXF1aXZhbGVudCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZW5kZXJfTW9kZSI+RlRfUkVOREVSX01PREVfTk9STUFMPC9hPi4gSXQgaXMgb25seSBkZWZpbmVkIGFzIGEgc2VwYXJhdGUgdmFsdWUgYmVjYXVzZSByZW5kZXIgbW9kZXMgYXJlIGFsc28gdXNlZCBpbmRpcmVjdGx5IHRvIGRlZmluZSBoaW50aW5nIGFsZ29yaXRobSBzZWxlY3RvcnMuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX1hYWDwvYT4gZm9yIGRldGFpbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUkVOREVSX01PREVfTU9OTyI+RlRfUkVOREVSX01PREVfTU9OTzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgbW9kZSBjb3JyZXNwb25kcyB0byAxLWJpdCBiaXRtYXBzICh3aXRoIDImbmJzcDtsZXZlbHMgb2Ygb3BhY2l0eSkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUkVOREVSX01PREVfTENEIj5GVF9SRU5ERVJfTU9ERV9MQ0Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gaG9yaXpvbnRhbCBSR0IgYW5kIEJHUiBzdWItcGl4ZWwgZGlzcGxheXMgbGlrZSBMQ0Qgc2NyZWVucy4gSXQgcHJvZHVjZXMgOC1iaXQgYml0bWFwcyB0aGF0IGFyZSAzJm5ic3A7dGltZXMgdGhlIHdpZHRoIG9mIHRoZSBvcmlnaW5hbCBnbHlwaCBvdXRsaW5lIGluIHBpeGVscywgYW5kIHdoaWNoIHVzZSB0aGUgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUElYRUxfTU9ERV9MQ0Q8L2E+IG1vZGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUkVOREVSX01PREVfTENEX1YiPkZUX1JFTkRFUl9NT0RFX0xDRF9WPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIHZlcnRpY2FsIFJHQiBhbmQgQkdSIHN1Yi1waXhlbCBkaXNwbGF5cyAobGlrZSBQREEgc2NyZWVucywgcm90YXRlZCBMQ0QgZGlzcGxheXMsIGV0Yy4pLiBJdCBwcm9kdWNlcyA4LWJpdCBiaXRtYXBzIHRoYXQgYXJlIDMmbmJzcDt0aW1lcyB0aGUgaGVpZ2h0IG9mIHRoZSBvcmlnaW5hbCBnbHlwaCBvdXRsaW5lIGluIHBpeGVscyBhbmQgdXNlIHRoZSA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX0xDRF9WPC9hPiBtb2RlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBMQ0Qtb3B0aW1pemVkIGdseXBoIGJpdG1hcHMgcHJvZHVjZWQgYnkgRlRfUmVuZGVyX0dseXBoIGNhbiBiZSBmaWx0ZXJlZCB0byByZWR1Y2UgY29sb3ItZnJpbmdlcyBieSB1c2luZyA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYT4gKG5vdCBhY3RpdmUgaW4gdGhlIGRlZmF1bHQgYnVpbGRzKS4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBlaXRoZXIgY2FsbCA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYT4gKGlmIGF2YWlsYWJsZSkgb3IgZG8gdGhlIGZpbHRlcmluZyBpdHNlbGYuPC9wPgorPHA+VGhlIHNlbGVjdGVkIHJlbmRlciBtb2RlIG9ubHkgYWZmZWN0cyB2ZWN0b3IgZ2x5cGhzIG9mIGEgZm9udC4gRW1iZWRkZWQgYml0bWFwcyBvZnRlbiBoYXZlIGEgZGlmZmVyZW50IHBpeGVsIG1vZGUgbGlrZSA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX01PTk88L2E+LiBZb3UgY2FuIHVzZSA8YSBocmVmPSJmdDItYml0bWFwX2hhbmRsaW5nLmh0bWwjRlRfQml0bWFwX0NvbnZlcnQiPkZUX0JpdG1hcF9Db252ZXJ0PC9hPiB0byB0cmFuc2Zvcm0gdGhlbSBpbnRvIDgtYml0IHBpeG1hcHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfS2VybmluZyI+RlRfR2V0X0tlcm5pbmc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfS2VybmluZzwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgIGxlZnRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgcmlnaHRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAga2Vybl9tb2RlLAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+ICAqYWtlcm5pbmcgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvIGdseXBocyBvZiBhIHNhbWUgZmFjZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGVmdF9nbHlwaCI+bGVmdF9nbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJpZ2h0X2dseXBoIj5yaWdodF9nbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgcmlnaHQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJrZXJuX21vZGUiPmtlcm5fbW9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9LZXJuaW5nX01vZGUiPkZUX0tlcm5pbmdfTW9kZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uIERldGVybWluZXMgdGhlIHNjYWxlIGFuZCBkaW1lbnNpb24gb2YgdGhlIHJldHVybmVkIGtlcm5pbmcgdmVjdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWtlcm5pbmciPmFrZXJuaW5nPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGtlcm5pbmcgdmVjdG9yLiBUaGlzIGlzIGVpdGhlciBpbiBmb250IHVuaXRzIG9yIGluIHBpeGVscyAoMjYuNiBmb3JtYXQpIGZvciBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Pbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmYW1wOyByaWdodC10by1sZWZ0KSBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kLiBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQga2VybmluZ3MsIGFyZSBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgQVBJIGZ1bmN0aW9uIC0tIHRoZXkgY2FuIGJlIGltcGxlbWVudGVkIHRocm91Z2ggZm9ybWF0LXNwZWNpZmljIGludGVyZmFjZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9LZXJuaW5nX01vZGUiPkZUX0tlcm5pbmdfTW9kZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX0tlcm5pbmdfTW9kZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tFUk5JTkdfREVGQVVMVCI+RlRfS0VSTklOR19ERUZBVUxUPC9hPiAgPSAwLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tFUk5JTkdfVU5GSVRURUQiPkZUX0tFUk5JTkdfVU5GSVRURUQ8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tFUk5JTkdfVU5TQ0FMRUQiPkZUX0tFUk5JTkdfVU5TQ0FMRUQ8L2E+CisKKyAgfSA8Yj5GVF9LZXJuaW5nX01vZGU8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPkZUX0tlcm5pbmdfTW9kZTwvYj4nIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X2tlcm5pbmdfZGVmYXVsdCAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tFUk5JTkdfREVGQVVMVCI+RlRfS0VSTklOR19ERUZBVUxUPC9hPgorI2RlZmluZSBmdF9rZXJuaW5nX3VuZml0dGVkICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9LRVJOSU5HX1VORklUVEVEIj5GVF9LRVJOSU5HX1VORklUVEVEPC9hPgorI2RlZmluZSBmdF9rZXJuaW5nX3Vuc2NhbGVkICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9LRVJOSU5HX1VOU0NBTEVEIj5GVF9LRVJOSU5HX1VOU0NBTEVEPC9hPgorPC9wcmU+CisKKzxwPkFuIGVudW1lcmF0aW9uIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBrZXJuaW5nIHZhbHVlcyB0byByZXR1cm4gaW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X0tlcm5pbmciPkZUX0dldF9LZXJuaW5nPC9hPi48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfS0VSTklOR19ERUZBVUxUIj5GVF9LRVJOSU5HX0RFRkFVTFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5SZXR1cm4gc2NhbGVkIGFuZCBncmlkLWZpdHRlZCBrZXJuaW5nIGRpc3RhbmNlcyAodmFsdWUgaXMmbmJzcDswKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9LRVJOSU5HX1VORklUVEVEIj5GVF9LRVJOSU5HX1VORklUVEVEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmV0dXJuIHNjYWxlZCBidXQgdW4tZ3JpZC1maXR0ZWQga2VybmluZyBkaXN0YW5jZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfS0VSTklOR19VTlNDQUxFRCI+RlRfS0VSTklOR19VTlNDQUxFRDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgaW4gb3JpZ2luYWwgZm9udCB1bml0cy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfVHJhY2tfS2VybmluZyI+RlRfR2V0X1RyYWNrX0tlcm5pbmc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfVHJhY2tfS2VybmluZzwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgcG9pbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgZGVncmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiogIGFrZXJuaW5nICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIHRoZSB0cmFjayBrZXJuaW5nIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icG9pbnRfc2l6ZSI+cG9pbnRfc2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRlZ3JlZSI+ZGVncmVlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGRlZ3JlZSBvZiB0aWdodG5lc3MuIEluY3JlYXNpbmdseSBuZWdhdGl2ZSB2YWx1ZXMgcmVwcmVzZW50IHRpZ2h0ZXIgdHJhY2sga2VybmluZywgd2hpbGUgaW5jcmVhc2luZ2x5IHBvc2l0aXZlIHZhbHVlcyByZXByZXNlbnQgbG9vc2VyIHRyYWNrIGtlcm5pbmcuIFZhbHVlIHplcm8gbWVhbnMgbm8gdHJhY2sga2VybmluZy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFrZXJuaW5nIj5ha2VybmluZzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBrZXJuaW5nIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLCB0byBiZSB1bmlmb3JtbHkgYXBwbGllZCBiZXR3ZWVuIGFsbCBnbHlwaHMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkN1cnJlbnRseSwgb25seSB0aGUgVHlwZSZuYnNwOzEgZm9udCBkcml2ZXIgc3VwcG9ydHMgdHJhY2sga2VybmluZywgdXNpbmcgZGF0YSBmcm9tIEFGTSBmaWxlcyAoaWYgYXR0YWNoZWQgd2l0aCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9BdHRhY2hfRmlsZSI+RlRfQXR0YWNoX0ZpbGU8L2E+IG9yIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0F0dGFjaF9TdHJlYW0iPkZUX0F0dGFjaF9TdHJlYW08L2E+KS48L3A+Cis8cD5Pbmx5IHZlcnkgZmV3IEFGTSBmaWxlcyBjb21lIHdpdGggdHJhY2sga2VybmluZyBkYXRhOyBwbGVhc2UgcmVmZXIgdG8gdGhlIEFkb2JlJ3MgQUZNIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9HbHlwaF9OYW1lIj5GVF9HZXRfR2x5cGhfTmFtZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9HbHlwaF9OYW1lPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb2ludGVyIj5GVF9Qb2ludGVyPC9hPiAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgIGJ1ZmZlcl9tYXggKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgQVNDSUkgbmFtZSBvZiBhIGdpdmVuIGdseXBoIGluIGEgZmFjZS4gVGhpcyBvbmx5IHdvcmtzIGZvciB0aG9zZSBmYWNlcyB3aGVyZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9IQVNfR0xZUEhfTkFNRVMiPkZUX0hBU19HTFlQSF9OQU1FUzwvYT4oZmFjZSkgcmV0dXJucyZuYnNwOzEuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgc291cmNlIGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdseXBoX2luZGV4Ij5nbHlwaF9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJidWZmZXJfbWF4Ij5idWZmZXJfbWF4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYnVmZmVyIj5idWZmZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSB0YXJnZXQgYnVmZmVyIHdoZXJlIHRoZSBuYW1lIGlzIGNvcGllZCB0by48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+QW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIGZhY2UgZG9lc24ndCBwcm92aWRlIGdseXBoIG5hbWVzIG9yIGlmIHRoZSBnbHlwaCBpbmRleCBpcyBpbnZhbGlkLiBJbiBhbGwgY2FzZXMgb2YgZmFpbHVyZSwgdGhlIGZpcnN0IGJ5dGUgb2YgJmxzcXVvO2J1ZmZlciZyc3F1bzsgaXMgc2V0IHRvJm5ic3A7MCB0byBpbmRpY2F0ZSBhbiBlbXB0eSBuYW1lLjwvcD4KKzxwPlRoZSBnbHlwaCBuYW1lIGlzIHRydW5jYXRlZCB0byBmaXQgd2l0aGluIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWx3YXlzIHplcm8tdGVybWluYXRlZC48L3A+Cis8cD5CZSBhd2FyZSB0aGF0IEZyZWVUeXBlIHJlb3JkZXJzIGdseXBoIGluZGljZXMgaW50ZXJuYWxseSBzbyB0aGF0IGdseXBoIGluZGV4Jm5ic3A7MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlICZsc3F1bzttaXNzaW5nIGdseXBoJnJzcXVvOyAoY2FsbGVkICZsc3F1bzsubm90ZGVmJnJzcXVvOykuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgY29uZmlnIG1hY3JvICZsc3F1bztGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTJnJzcXVvOyBpcyBub3QgZGVmaW5lZCBpbiAmbHNxdW87ZnRvcHRpb25zLmgmcnNxdW87LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSI+RlRfR2V0X1Bvc3RzY3JpcHRfTmFtZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICkKKyAgPGI+RlRfR2V0X1Bvc3RzY3JpcHRfTmFtZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIEFTQ0lJIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuIGZhY2UsIGlmIGF2YWlsYWJsZS4gVGhpcyBvbmx5IHdvcmtzIHdpdGggUG9zdFNjcmlwdCBhbmQgVHJ1ZVR5cGUgZm9udHMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIGZhY2UncyBQb3N0U2NyaXB0IG5hbWUuIE5VTEwgaWYgdW5hdmFpbGFibGUuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgaXMgZGVzdHJveWVkIHdpdGggaXQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DaGFyTWFwUmVjIj5GVF9DaGFyTWFwUmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9DaGFyTWFwUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICBmYWNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FbmNvZGluZzwvYT4gIGVuY29kaW5nOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgICBwbGF0Zm9ybV9pZDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gICAgZW5jb2RpbmdfaWQ7CisKKyAgfSA8Yj5GVF9DaGFyTWFwUmVjPC9iPjsKKzwvcHJlPgorCis8cD5UaGUgYmFzZSBjaGFybWFwIHN0cnVjdHVyZS48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZW5jb2RpbmciPmVuY29kaW5nPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VuY29kaW5nPC9hPiB0YWcgaWRlbnRpZnlpbmcgdGhlIGNoYXJtYXAuIFVzZSB0aGlzIHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2VsZWN0X0NoYXJtYXAiPkZUX1NlbGVjdF9DaGFybWFwPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwbGF0Zm9ybV9pZCI+cGxhdGZvcm1faWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbiBJRCBudW1iZXIgZGVzY3JpYmluZyB0aGUgcGxhdGZvcm0gZm9yIHRoZSBmb2xsb3dpbmcgZW5jb2RpbmcgSUQuIFRoaXMgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGVtdWxhdGVkIGZvciBvdGhlciBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImVuY29kaW5nX2lkIj5lbmNvZGluZ19pZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcGxhdGZvcm0gc3BlY2lmaWMgZW5jb2RpbmcgbnVtYmVyLiBUaGlzIGFsc28gY29tZXMgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGVtdWxhdGVkIHNpbWlsYXJseS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZWxlY3RfQ2hhcm1hcCI+RlRfU2VsZWN0X0NoYXJtYXA8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TZWxlY3RfQ2hhcm1hcDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FbmNvZGluZzwvYT4gIGVuY29kaW5nICk7Cis8L3ByZT4KKworPHA+U2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBieSBpdHMgZW5jb2RpbmcgdGFnIChhcyBsaXN0ZWQgaW4gJmxzcXVvO2ZyZWV0eXBlLmgmcnNxdW87KS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZW5jb2RpbmciPmVuY29kaW5nPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGVuY29kaW5nLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgbm8gY2hhcm1hcCBpbiB0aGUgZmFjZSBjb3JyZXNwb25kcyB0byB0aGUgZW5jb2RpbmcgcXVlcmllZCBoZXJlLjwvcD4KKzxwPkJlY2F1c2UgbWFueSBmb250cyBjb250YWluIG1vcmUgdGhhbiBhIHNpbmdsZSBjbWFwIGZvciBVbmljb2RlIGVuY29kaW5nLCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIHNwZWNpYWwgY29kZSB0byBzZWxlY3QgdGhlIG9uZSB0aGF0IGNvdmVycyBVbmljb2RlIGJlc3QgKCZsc3F1bztiZXN0JnJzcXVvOyBpbiB0aGUgc2Vuc2UgdGhhdCBhIFVDUy00IGNtYXAgaXMgcHJlZmVycmVkIHRvIGEgVUNTLTIgY21hcCkuIEl0IGlzIHRodXMgcHJlZmVyYWJsZSB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcm1hcCI+RlRfU2V0X0NoYXJtYXA8L2E+IGluIHRoaXMgY2FzZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NldF9DaGFybWFwIj5GVF9TZXRfQ2hhcm1hcDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1NldF9DaGFybWFwPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9DaGFyTWFwIj5GVF9DaGFyTWFwPC9hPiAgY2hhcm1hcCApOworPC9wcmU+CisKKzxwPlNlbGVjdCBhIGdpdmVuIGNoYXJtYXAgZm9yIGNoYXJhY3RlciBjb2RlIHRvIGdseXBoIGluZGV4IG1hcHBpbmcuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNoYXJtYXAiPmNoYXJtYXA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc2VsZWN0ZWQgY2hhcm1hcC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjaGFybWFwIGlzIG5vdCBwYXJ0IG9mIHRoZSBmYWNlIChpLmUuLCBpZiBpdCBpcyBub3QgbGlzdGVkIGluIHRoZSAmbHNxdW87ZmFjZS0mZ3Q7Y2hhcm1hcHMmcnNxdW87IHRhYmxlKS48L3A+Cis8cD5JdCBhbHNvIGZhaWxzIGlmIGEgdHlwZSZuYnNwOzE0IGNoYXJtYXAgaXMgc2VsZWN0ZWQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfQ2hhcm1hcF9JbmRleCI+RlRfR2V0X0NoYXJtYXBfSW5kZXg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiApCisgIDxiPkZUX0dldF9DaGFybWFwX0luZGV4PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfQ2hhck1hcCI+RlRfQ2hhck1hcDwvYT4gIGNoYXJtYXAgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSBpbmRleCBvZiBhIGdpdmVuIGNoYXJtYXAuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcm1hcCI+Y2hhcm1hcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgY2hhcm1hcC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXIgbWFwcyB3aXRoaW4gdGhlIGZhY2UgdG8gd2hpY2ggJmxzcXVvO2NoYXJtYXAmcnNxdW87IGJlbG9uZ3MuIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMgcmV0dXJuZWQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfRlNUeXBlX0ZsYWdzIj5GVF9HZXRfRlNUeXBlX0ZsYWdzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gKQorICA8Yj5GVF9HZXRfRlNUeXBlX0ZsYWdzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gIGZhY2UgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGZzVHlwZSBmbGFncyBmb3IgYSBmb250LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGZzVHlwZSBmbGFncywgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRlNUWVBFX1hYWCI+RlRfRlNUWVBFX1hYWDwvYT4uPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Vc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSAmbHNxdW87ZnNfdHlwZSZyc3F1bzsgZmllbGQgaW4gdGhlIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+IHN0cnVjdHVyZSwgd2hpY2ggaXMgb25seSBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgY29ycmVjdCByZXN1bHRzIGZvciBUeXBlJm5ic3A7MSBmb250cy48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuODwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1N1YkdseXBoX0luZm8iPkZUX0dldF9TdWJHbHlwaF9JbmZvPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X1N1YkdseXBoX0luZm88L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HbHlwaFNsb3QiPkZUX0dseXBoU2xvdDwvYT4gIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgc3ViX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICpwX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAqcF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAqcF9hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICpwX2FyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NYXRyaXgiPkZUX01hdHJpeDwvYT4gICAgKnBfdHJhbnNmb3JtICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgYSBkZXNjcmlwdGlvbiBvZiBhIGdpdmVuIHN1YmdseXBoLiBPbmx5IHVzZSBpdCBpZiAmbHNxdW87Z2x5cGgtJmd0O2Zvcm1hdCZyc3F1bzsgaXMgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2x5cGhfRm9ybWF0Ij5GVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFPC9hPjsgYW4gZXJyb3IgaXMgcmV0dXJuZWQgb3RoZXJ3aXNlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdseXBoIj5nbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzb3VyY2UgZ2x5cGggc2xvdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdWJfaW5kZXgiPnN1Yl9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgc3ViZ2x5cGguIE11c3QgYmUgbGVzcyB0aGFuICZsc3F1bztnbHlwaC0mZ3Q7bnVtX3N1YmdseXBocyZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwX2luZGV4Ij5wX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGdseXBoIGluZGV4IG9mIHRoZSBzdWJnbHlwaC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwX2ZsYWdzIj5wX2ZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHN1YmdseXBoIGZsYWdzLCBzZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19YWFgiPkZUX1NVQkdMWVBIX0ZMQUdfWFhYPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwX2FyZzEiPnBfYXJnMTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzdWJnbHlwaCdzIGZpcnN0IGFyZ3VtZW50IChpZiBhbnkpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBfYXJnMiI+cF9hcmcyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHN1YmdseXBoJ3Mgc2Vjb25kIGFyZ3VtZW50IChpZiBhbnkpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBfdHJhbnNmb3JtIj5wX3RyYW5zZm9ybTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzdWJnbHlwaCB0cmFuc2Zvcm1hdGlvbiAoaWYgYW55KS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHZhbHVlcyBvZiAmbHNxdW87KnBfYXJnMSZyc3F1bzssICZsc3F1bzsqcF9hcmcyJnJzcXVvOywgYW5kICZsc3F1bzsqcF90cmFuc2Zvcm0mcnNxdW87IG11c3QgYmUgaW50ZXJwcmV0ZWQgZGVwZW5kaW5nIG9uIHRoZSBmbGFncyByZXR1cm5lZCBpbiAmbHNxdW87KnBfZmxhZ3MmcnNxdW87LiBTZWUgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GYWNlX0ludGVybmFsIj5GVF9GYWNlX0ludGVybmFsPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX0ZhY2VfSW50ZXJuYWxSZWNfKiAgPGI+RlRfRmFjZV9JbnRlcm5hbDwvYj47Cis8L3ByZT4KKworPHA+QW4gb3BhcXVlIGhhbmRsZSB0byBhbiAmbHNxdW87RlRfRmFjZV9JbnRlcm5hbFJlYyZyc3F1bzsgc3RydWN0dXJlLCB1c2VkIHRvIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdC48L3A+Cis8cD5UaGlzIHN0cnVjdHVyZSBtaWdodCBjaGFuZ2UgYmV0d2VlbiByZWxlYXNlcyBvZiBGcmVlVHlwZSZuYnNwOzIgYW5kIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlIHRvIGNsaWVudCBhcHBsaWNhdGlvbnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TaXplX0ludGVybmFsIj5GVF9TaXplX0ludGVybmFsPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX1NpemVfSW50ZXJuYWxSZWNfKiAgPGI+RlRfU2l6ZV9JbnRlcm5hbDwvYj47Cis8L3ByZT4KKworPHA+QW4gb3BhcXVlIGhhbmRsZSB0byBhbiAmbHNxdW87RlRfU2l6ZV9JbnRlcm5hbFJlYyZyc3F1bzsgc3RydWN0dXJlLCB1c2VkIHRvIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+IG9iamVjdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Nsb3RfSW50ZXJuYWwiPkZUX1Nsb3RfSW50ZXJuYWw8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfU2xvdF9JbnRlcm5hbFJlY18qICA8Yj5GVF9TbG90X0ludGVybmFsPC9iPjsKKzwvcHJlPgorCis8cD5BbiBvcGFxdWUgaGFuZGxlIHRvIGFuICZsc3F1bztGVF9TbG90X0ludGVybmFsUmVjJnJzcXVvOyBzdHJ1Y3R1cmUsIHVzZWQgdG8gbW9kZWwgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90Ij5GVF9HbHlwaFNsb3Q8L2E+IG9iamVjdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfU0NBTEFCTEUiPkZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTwvYT4gICAgICAgICAgKCAxTCAmbHQ7Jmx0OyAgMCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyI+RlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTPC9hPiAgICAgICAoIDFMICZsdDsmbHQ7ICAxICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIIj5GVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg8L2E+ICAgICAgICggMUwgJmx0OyZsdDsgIDIgKQorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfU0ZOVCI+RlRfRkFDRV9GTEFHX1NGTlQ8L2E+ICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7ICAzICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0hPUklaT05UQUwiPkZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMPC9hPiAgICAgICAgKCAxTCAmbHQ7Jmx0OyAgNCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19WRVJUSUNBTCI+RlRfRkFDRV9GTEFHX1ZFUlRJQ0FMPC9hPiAgICAgICAgICAoIDFMICZsdDsmbHQ7ICA1ICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0tFUk5JTkciPkZUX0ZBQ0VfRkxBR19LRVJOSU5HPC9hPiAgICAgICAgICAgKCAxTCAmbHQ7Jmx0OyAgNiApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19GQVNUX0dMWVBIUyI+RlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTPC9hPiAgICAgICAoIDFMICZsdDsmbHQ7ICA3ICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMiPkZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTPC9hPiAgKCAxTCAmbHQ7Jmx0OyAgOCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyI+RlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTPC9hPiAgICAgICAoIDFMICZsdDsmbHQ7ICA5ICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSI+RlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTTwvYT4gICAoIDFMICZsdDsmbHQ7IDEwICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0hJTlRFUiI+RlRfRkFDRV9GTEFHX0hJTlRFUjwvYT4gICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDExICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCI+RlRfRkFDRV9GTEFHX0NJRF9LRVlFRDwvYT4gICAgICAgICAoIDFMICZsdDsmbHQ7IDEyICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1RSSUNLWSI+RlRfRkFDRV9GTEFHX1RSSUNLWTwvYT4gICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDEzICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX0NPTE9SIj5GVF9GQUNFX0ZMQUdfQ09MT1I8L2E+ICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgMTQgKQorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgJmxzcXVvO2ZhY2VfZmxhZ3MmcnNxdW87IGZpZWxkIG9mIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlUmVjIj5GVF9GYWNlUmVjPC9hPiBzdHJ1Y3R1cmUuIFRoZXkgaW5mb3JtIGNsaWVudCBhcHBsaWNhdGlvbnMgb2YgcHJvcGVydGllcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmYWNlLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GQUNFX0ZMQUdfU0NBTEFCTEUiPkZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIG91dGxpbmUgZ2x5cGhzLiBUaGlzIGRvZXNuJ3QgcHJldmVudCBiaXRtYXAgc3RyaWtlcywgaS5lLiwgYSBmYWNlIGNhbiBoYXZlIGJvdGggdGhpcyBhbmQgYW5kIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUzwvYT4gc2V0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyI+RlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgYml0bWFwIHN0cmlrZXMuIFNlZSBhbHNvIHRoZSAmbHNxdW87bnVtX2ZpeGVkX3NpemVzJnJzcXVvOyBhbmQgJmxzcXVvO2F2YWlsYWJsZV9zaXplcyZyc3F1bzsgZmllbGRzIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCI+RlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgZml4ZWQtd2lkdGggY2hhcmFjdGVycyAobGlrZSBDb3VyaWVyLCBMdWNpZG8sIE1vbm9UeXBlLCBldGMuKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GQUNFX0ZMQUdfU0ZOVCI+RlRfRkFDRV9GTEFHX1NGTlQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSB1c2VzIHRoZSAmbHNxdW87c2ZudCZyc3F1bzsgc3RvcmFnZSBzY2hlbWUuIEZvciBub3csIHRoaXMgbWVhbnMgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMIj5GVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGhvcml6b250YWwgZ2x5cGggbWV0cmljcy4gVGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgY29tbW9uIGZvcm1hdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMIj5GVF9GQUNFX0ZMQUdfVkVSVElDQUw8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyB2ZXJ0aWNhbCBnbHlwaCBtZXRyaWNzLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIHNvbWUgZm9ybWF0cywgbm90IGFsbCBvZiB0aGVtLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19LRVJOSU5HIj5GVF9GQUNFX0ZMQUdfS0VSTklORzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGtlcm5pbmcgaW5mb3JtYXRpb24uIElmIHNldCwgdGhlIGtlcm5pbmcgZGlzdGFuY2UgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBmdW5jdGlvbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfS2VybmluZyI+RlRfR2V0X0tlcm5pbmc8L2E+LiBPdGhlcndpc2UgdGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gdGhlIHZlY3RvciAoMCwwKS4gTm90ZSB0aGF0IEZyZWVUeXBlIGRvZXNuJ3QgaGFuZGxlIGtlcm5pbmcgZGF0YSBmcm9tIHRoZSAmbHNxdW87R1BPUyZyc3F1bzsgdGFibGUgKGFzIHByZXNlbnQgaW4gc29tZSBPcGVuVHlwZSBmb250cykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTIj5GVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5USElTIEZMQUcgSVMgREVQUkVDQVRFRC4gRE8gTk9UIFVTRSBPUiBURVNUIElULjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTIj5GVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGljYXRlcyB0aGF0IHRoZSBmb250IGNvbnRhaW5zIG11bHRpcGxlIG1hc3RlcnMgYW5kIGlzIGNhcGFibGUgb2YgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZW0uIFNlZSB0aGUgbXVsdGlwbGUtbWFzdGVycyBzcGVjaWZpYyBBUEkgZm9yIGRldGFpbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIj5GVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBjb250YWlucyBnbHlwaCBuYW1lcyB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfR2x5cGhfTmFtZSI+RlRfR2V0X0dseXBoX05hbWU8L2E+LiBOb3RlIHRoYXQgc29tZSBUcnVlVHlwZSBmb250cyBjb250YWluIGJyb2tlbiBnbHlwaCBuYW1lIHRhYmxlcy4gVXNlIHRoZSBmdW5jdGlvbiA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjRlRfSGFzX1BTX0dseXBoX05hbWVzIj5GVF9IYXNfUFNfR2x5cGhfTmFtZXM8L2E+IHdoZW4gbmVlZGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0iPkZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUgdG8gaW5kaWNhdGUgdGhhdCBhIGZhY2UncyBzdHJlYW0gd2FzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gYW5kIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIHdoZW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+IGlzIGNhbGxlZC4gRG9uJ3QgcmVhZCBvciB0ZXN0IHRoaXMgZmxhZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GQUNFX0ZMQUdfSElOVEVSIj5GVF9GQUNFX0ZMQUdfSElOVEVSPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2V0IGlmIHRoZSBmb250IGRyaXZlciBoYXMgYSBoaW50aW5nIG1hY2hpbmUgb2YgaXRzIG93bi4gRm9yIGV4YW1wbGUsIHdpdGggVHJ1ZVR5cGUgZm9udHMsIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBkYXRhIGZyb20gdGhlIFNGTlQgJmxzcXVvO2dhc3AmcnNxdW87IHRhYmxlIG9ubHkgaWYgdGhlIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIGVuZ2luZSAod2l0aCB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIpIGlzIGF2YWlsYWJsZSBhbmQgYWN0aXZlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19DSURfS0VZRUQiPkZUX0ZBQ0VfRkxBR19DSURfS0VZRUQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TZXQgaWYgdGhlIGZvbnQgaXMgQ0lELWtleWVkLiBJbiB0aGF0IGNhc2UsIHRoZSBmb250IGlzIG5vdCBhY2Nlc3NlZCBieSBnbHlwaCBpbmRpY2VzIGJ1dCBieSBDSUQgdmFsdWVzLiBGb3Igc3Vic2V0dGVkIENJRC1rZXllZCBmb250cyB0aGlzIGhhcyB0aGUgY29uc2VxdWVuY2UgdGhhdCBub3QgYWxsIGluZGV4IHZhbHVlcyBhcmUgYSB2YWxpZCBhcmd1bWVudCB0byBGVF9Mb2FkX0dseXBoLiBPbmx5IHRoZSBDSUQgdmFsdWVzIGZvciB3aGljaCBjb3JyZXNwb25kaW5nIGdseXBocyBpbiB0aGUgc3Vic2V0dGVkIGZvbnQgZXhpc3QgbWFrZSBGVF9Mb2FkX0dseXBoIHJldHVybiBzdWNjZXNzZnVsbHk7IGluIGFsbCBvdGhlciBjYXNlcyB5b3UgZ2V0IGFuICZsc3F1bztGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCZyc3F1bzsgZXJyb3IuPC9wPgorPHA+Tm90ZSB0aGF0IENJRC1rZXllZCBmb250cyB0aGF0IGFyZSBpbiBhbiBTRk5UIHdyYXBwZXIgZG9uJ3QgaGF2ZSB0aGlzIGZsYWcgc2V0IHNpbmNlIHRoZSBnbHlwaHMgYXJlIGFjY2Vzc2VkIGluIHRoZSBub3JtYWwgd2F5ICh1c2luZyBjb250aWd1b3VzIGluZGljZXMpOyB0aGUgJmxzcXVvO0NJRC1uZXNzJnJzcXVvOyBpc24ndCB2aXNpYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GQUNFX0ZMQUdfVFJJQ0tZIj5GVF9GQUNFX0ZMQUdfVFJJQ0tZPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2V0IGlmIHRoZSBmb250IGlzICZsc3F1bzt0cmlja3kmcnNxdW87LCB0aGlzIGlzLCBpdCBhbHdheXMgbmVlZHMgdGhlIGZvbnQgZm9ybWF0J3MgbmF0aXZlIGhpbnRpbmcgZW5naW5lIHRvIGdldCBhIHJlYXNvbmFibGUgcmVzdWx0LiBBIHR5cGljYWwgZXhhbXBsZSBpcyB0aGUgQ2hpbmVzZSBmb250ICZsc3F1bzttaW5nbGkudHRmJnJzcXVvOyB0aGF0IHVzZXMgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHRvIG1vdmUgYW5kIHNjYWxlIGFsbCBvZiBpdHMgc3ViZ2x5cGhzLjwvcD4KKzxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWhpbnQgc3VjaCBmb250cyB1c2luZyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9GT1JDRV9BVVRPSElOVDwvYT47IGl0IHdpbGwgYWxzbyBpZ25vcmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fSElOVElORzwvYT4uIFlvdSBoYXZlIHRvIHNldCBib3RoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX0hJTlRJTkc8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19BVVRPSElOVDwvYT4gdG8gcmVhbGx5IGRpc2FibGUgaGludGluZzsgaG93ZXZlciwgeW91IHByb2JhYmx5IG5ldmVyIHdhbnQgdGhpcyBleGNlcHQgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMuPC9wPgorPHA+Q3VycmVudGx5LCB0aGVyZSBhcmUgYWJvdXQgYSBkb3plbiBUcnVlVHlwZSBmb250cyBpbiB0aGUgbGlzdCBvZiB0cmlja3kgZm9udHM7IHRoZXkgYXJlIGhhcmQtY29kZWQgaW4gZmlsZSAmbHNxdW87dHRvYmpzLmMmcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZBQ0VfRkxBR19DT0xPUiI+RlRfRkFDRV9GTEFHX0NPTE9SPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2V0IGlmIHRoZSBmb250IGhhcyBjb2xvciBnbHlwaCB0YWJsZXMuIFRvIGFjY2VzcyBjb2xvciBnbHlwaHMgdXNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX0NPTE9SPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TVFlMRV9GTEFHX1hYWCI+RlRfU1RZTEVfRkxBR19YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVFlMRV9GTEFHX0lUQUxJQyI+RlRfU1RZTEVfRkxBR19JVEFMSUM8L2E+ICAoIDEgJmx0OyZsdDsgMCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NUWUxFX0ZMQUdfQk9MRCI+RlRfU1RZTEVfRkxBR19CT0xEPC9hPiAgICAoIDEgJmx0OyZsdDsgMSApCis8L3ByZT4KKworPHA+QSBsaXN0IG9mIGJpdC1mbGFncyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdHlsZSBvZiBhIGdpdmVuIGZhY2UuIFRoZXNlIGFyZSB1c2VkIGluIHRoZSAmbHNxdW87c3R5bGVfZmxhZ3MmcnNxdW87IGZpZWxkIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2VSZWMiPkZUX0ZhY2VSZWM8L2E+LjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVFlMRV9GTEFHX0lUQUxJQyI+RlRfU1RZTEVfRkxBR19JVEFMSUM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIGZhY2Ugc3R5bGUgaXMgaXRhbGljIG9yIG9ibGlxdWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1RZTEVfRkxBR19CT0xEIj5GVF9TVFlMRV9GTEFHX0JPTEQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIGZhY2UgaXMgYm9sZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgc3R5bGUgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYnkgRnJlZVR5cGUgaXMgdmVyeSBiYXNpYy4gTW9yZSBkZXRhaWxzIGFyZSBiZXlvbmQgdGhlIHNjb3BlIGFuZCBzaG91bGQgYmUgZG9uZSBvbiBhIGhpZ2hlciBsZXZlbCAoZm9yIGV4YW1wbGUsIGJ5IGFuYWx5emluZyB2YXJpb3VzIGZpZWxkcyBvZiB0aGUgJmxzcXVvO09TLzImcnNxdW87IHRhYmxlIGluIFNGTlQgYmFzZWQgZm9udHMpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT1BFTl9YWFgiPkZUX09QRU5fWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9NRU1PUlkiPkZUX09QRU5fTUVNT1JZPC9hPiAgICAweDEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9TVFJFQU0iPkZUX09QRU5fU1RSRUFNPC9hPiAgICAweDIKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9QQVRITkFNRSI+RlRfT1BFTl9QQVRITkFNRTwvYT4gIDB4NAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX0RSSVZFUiI+RlRfT1BFTl9EUklWRVI8L2E+ICAgIDB4OAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX1BBUkFNUyI+RlRfT1BFTl9QQVJBTVM8L2E+ICAgIDB4MTAKKworCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGA8Yj5GVF9PUEVOX1hYWDwvYj4nICovCisgIC8qIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfb3Blbl9tZW1vcnkgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9NRU1PUlkiPkZUX09QRU5fTUVNT1JZPC9hPgorI2RlZmluZSBmdF9vcGVuX3N0cmVhbSAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX1NUUkVBTSI+RlRfT1BFTl9TVFJFQU08L2E+CisjZGVmaW5lIGZ0X29wZW5fcGF0aG5hbWUgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fUEFUSE5BTUUiPkZUX09QRU5fUEFUSE5BTUU8L2E+CisjZGVmaW5lIGZ0X29wZW5fZHJpdmVyICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fRFJJVkVSIj5GVF9PUEVOX0RSSVZFUjwvYT4KKyNkZWZpbmUgZnRfb3Blbl9wYXJhbXMgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9QQVJBTVMiPkZUX09QRU5fUEFSQU1TPC9hPgorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aGluIHRoZSAmbHNxdW87ZmxhZ3MmcnNxdW87IGZpZWxkIG9mIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0FyZ3MiPkZUX09wZW5fQXJnczwvYT4gc3RydWN0dXJlLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9PUEVOX01FTU9SWSI+RlRfT1BFTl9NRU1PUlk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGlzIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9PUEVOX1NUUkVBTSI+RlRfT1BFTl9TVFJFQU08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3B5IHRoZSBzdHJlYW0gZnJvbSB0aGUgJmxzcXVvO3N0cmVhbSZyc3F1bzsgZmllbGQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1BFTl9QQVRITkFNRSI+RlRfT1BFTl9QQVRITkFNRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gZnJvbSBhIEMmbmJzcDtwYXRoIG5hbWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1BFTl9EUklWRVIiPkZUX09QRU5fRFJJVkVSPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNlIHRoZSAmbHNxdW87ZHJpdmVyJnJzcXVvOyBmaWVsZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9PUEVOX1BBUkFNUyI+RlRfT1BFTl9QQVJBTVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2UgdGhlICZsc3F1bztudW1fcGFyYW1zJnJzcXVvOyBhbmQgJmxzcXVvO3BhcmFtcyZyc3F1bzsgZmllbGRzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSAmbHNxdW87RlRfT1BFTl9NRU1PUlkmcnNxdW87LCAmbHNxdW87RlRfT1BFTl9TVFJFQU0mcnNxdW87LCBhbmQgJmxzcXVvO0ZUX09QRU5fUEFUSE5BTUUmcnNxdW87IGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MT0FEX1hYWCI+RlRfTE9BRF9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX0RFRkFVTFQiPkZUX0xPQURfREVGQVVMVDwvYT4gICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfTk9fU0NBTEUiPkZUX0xPQURfTk9fU0NBTEU8L2E+ICAgICAgICAgICAgICAgICAgICAgKCAxTCAmbHQ7Jmx0OyAwICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9OT19ISU5USU5HIj5GVF9MT0FEX05PX0hJTlRJTkc8L2E+ICAgICAgICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgMSApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfUkVOREVSIj5GVF9MT0FEX1JFTkRFUjwvYT4gICAgICAgICAgICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgMiApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfTk9fQklUTUFQIj5GVF9MT0FEX05PX0JJVE1BUDwvYT4gICAgICAgICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgMyApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVkVSVElDQUxfTEFZT1VUIj5GVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVDwvYT4gICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgNCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfRk9SQ0VfQVVUT0hJTlQiPkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ8L2E+ICAgICAgICAgICAgICAgKCAxTCAmbHQ7Jmx0OyA1ICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9DUk9QX0JJVE1BUCI+RlRfTE9BRF9DUk9QX0JJVE1BUDwvYT4gICAgICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDYgKQorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1BFREFOVElDIj5GVF9MT0FEX1BFREFOVElDPC9hPiAgICAgICAgICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgNyApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIIj5GVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSDwvYT4gICggMUwgJmx0OyZsdDsgOSApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfTk9fUkVDVVJTRSI+RlRfTE9BRF9OT19SRUNVUlNFPC9hPiAgICAgICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDEwICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNIj5GVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk08L2E+ICAgICAgICAgICAgICggMUwgJmx0OyZsdDsgMTEgKQorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX01PTk9DSFJPTUUiPkZUX0xPQURfTU9OT0NIUk9NRTwvYT4gICAgICAgICAgICAgICAgICAgKCAxTCAmbHQ7Jmx0OyAxMiApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfTElORUFSX0RFU0lHTiI+RlRfTE9BRF9MSU5FQVJfREVTSUdOPC9hPiAgICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDEzICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9OT19BVVRPSElOVCI+RlRfTE9BRF9OT19BVVRPSElOVDwvYT4gICAgICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDE1ICkKKyAgLyogQml0cyAxNi4uMTkgYXJlIHVzZWQgYnkgYEZUX0xPQURfVEFSR0VUXycgKi8KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9DT0xPUiI+RlRfTE9BRF9DT0xPUjwvYT4gICAgICAgICAgICAgICAgICAgICAgICAoIDFMICZsdDsmbHQ7IDIwICkKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4gdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSBkdXJpbmcgZ2x5cGggbG9hZGluZy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9ERUZBVUxUIj5GVF9MT0FEX0RFRkFVTFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kaW5nIHRvJm5ic3A7MCwgdGhpcyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGdseXBoIGxvYWQgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBmb2xsb3dpbmcgaGFwcGVuczo8L3A+Cis8cD4xLiBGcmVlVHlwZSBsb29rcyBmb3IgYSBiaXRtYXAgZm9yIHRoZSBnbHlwaCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNlJ3MgY3VycmVudCBzaXplLiBJZiBvbmUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBUaGUgYml0bWFwIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGdseXBoIHNsb3QgKHNlZSBub3RlIGJlbG93KS48L3A+Cis8cD4yLiBJZiBubyBlbWJlZGRlZCBiaXRtYXAgaXMgc2VhcmNoZWQgb3IgZm91bmQsIEZyZWVUeXBlIGxvb2tzIGZvciBhIHNjYWxhYmxlIG91dGxpbmUuIElmIG9uZSBpcyBmb3VuZCwgaXQgaXMgbG9hZGVkIGZyb20gdGhlIGZvbnQgZmlsZSwgc2NhbGVkIHRvIGRldmljZSBwaXhlbHMsIHRoZW4gJmxzcXVvO2hpbnRlZCZyc3F1bzsgdG8gdGhlIHBpeGVsIGdyaWQgaW4gb3JkZXIgdG8gb3B0aW1pemUgaXQuIFRoZSBvdXRsaW5lIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGdseXBoIHNsb3QgKHNlZSBub3RlIGJlbG93KS48L3A+Cis8cD5Ob3RlIHRoYXQgYnkgZGVmYXVsdCwgdGhlIGdseXBoIGxvYWRlciBkb2Vzbid0IHJlbmRlciBvdXRsaW5lcyBpbnRvIGJpdG1hcHMuIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgdG8gbW9kaWZ5IHRoaXMgZGVmYXVsdCBiZWhhdmlvdXIgdG8gbW9yZSBzcGVjaWZpYyBhbmQgdXNlZnVsIGNhc2VzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTk9fU0NBTEUiPkZUX0xPQURfTk9fU0NBTEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Eb24ndCBzY2FsZSB0aGUgbG9hZGVkIG91dGxpbmUgZ2x5cGggYnV0IGtlZXAgaXQgaW4gZm9udCB1bml0cy48L3A+Cis8cD5UaGlzIGZsYWcgaW1wbGllcyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19ISU5USU5HPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fQklUTUFQPC9hPiwgYW5kIHVuc2V0cyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9SRU5ERVI8L2E+LjwvcD4KKzxwPklmIHRoZSBmb250IGlzICZsc3F1bzt0cmlja3kmcnNxdW87IChzZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1RSSUNLWTwvYT4gZm9yIG1vcmUpLCB1c2luZyBGVF9MT0FEX05PX1NDQUxFIHVzdWFsbHkgeWllbGRzIG1lYW5pbmdsZXNzIG91dGxpbmVzIGJlY2F1c2UgdGhlIHN1YmdseXBocyBtdXN0IGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCB3aXRoIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zLiBUaGlzIGNhbiBiZSBzb2x2ZWQgYnkgbG9hZGluZyB0aGUgZm9udCB3aXRob3V0IEZUX0xPQURfTk9fU0NBTEUgYW5kIHNldHRpbmcgdGhlIGNoYXJhY3RlciBzaXplIHRvICZsc3F1bztmb250LSZndDt1bml0c19wZXJfRU0mcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTk9fSElOVElORyI+RlRfTE9BRF9OT19ISU5USU5HPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RGlzYWJsZSBoaW50aW5nLiBUaGlzIGdlbmVyYWxseSBnZW5lcmF0ZXMgJmxzcXVvO2JsdXJyaWVyJnJzcXVvOyBiaXRtYXAgZ2x5cGhzIHdoZW4gdGhlIGdseXBoIGFyZSByZW5kZXJlZCBpbiBhbnkgb2YgdGhlIGFudGktYWxpYXNlZCBtb2Rlcy4gU2VlIGFsc28gdGhlIG5vdGUgYmVsb3cuPC9wPgorPHA+VGhpcyBmbGFnIGlzIGltcGxpZWQgYnkgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fU0NBTEU8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfUkVOREVSIj5GVF9MT0FEX1JFTkRFUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNhbGwgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX0dseXBoIj5GVF9SZW5kZXJfR2x5cGg8L2E+IGFmdGVyIHRoZSBnbHlwaCBpcyBsb2FkZWQuIEJ5IGRlZmF1bHQsIHRoZSBnbHlwaCBpcyByZW5kZXJlZCBpbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZW5kZXJfTW9kZSI+RlRfUkVOREVSX01PREVfTk9STUFMPC9hPiBtb2RlLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX1hYWCI+RlRfTE9BRF9UQVJHRVRfWFhYPC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9NT05PQ0hST01FPC9hPi48L3A+Cis8cD5UaGlzIGZsYWcgaXMgdW5zZXQgYnkgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fU0NBTEU8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTk9fQklUTUFQIj5GVF9MT0FEX05PX0JJVE1BUDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklnbm9yZSBiaXRtYXAgc3RyaWtlcyB3aGVuIGxvYWRpbmcuIEJpdG1hcC1vbmx5IGZvbnRzIGlnbm9yZSB0aGlzIGZsYWcuPC9wPgorPHA+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fU0NBTEU8L2E+IGFsd2F5cyBzZXRzIHRoaXMgZmxhZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCI+RlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Mb2FkIHRoZSBnbHlwaCBmb3IgdmVydGljYWwgdGV4dCBsYXlvdXQuIEluIHBhcnRpY3VsYXIsIHRoZSAmbHNxdW87YWR2YW5jZSZyc3F1bzsgdmFsdWUgaW4gdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdFJlYyI+RlRfR2x5cGhTbG90UmVjPC9hPiBzdHJ1Y3R1cmUgaXMgc2V0IHRvIHRoZSAmbHNxdW87dmVydEFkdmFuY2UmcnNxdW87IHZhbHVlIG9mIHRoZSAmbHNxdW87bWV0cmljcyZyc3F1bzsgZmllbGQuPC9wPgorPHA+SW4gY2FzZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9IQVNfVkVSVElDQUwiPkZUX0hBU19WRVJUSUNBTDwvYT4gZG9lc24ndCByZXR1cm4gdHJ1ZSwgeW91IHNob3VsZG4ndCB1c2UgdGhpcyBmbGFnIGN1cnJlbnRseS4gUmVhc29uIGlzIHRoYXQgaW4gdGhpcyBjYXNlIHZlcnRpY2FsIG1ldHJpY3MgZ2V0IHN5bnRoZXNpemVkLCBhbmQgdGhvc2UgdmFsdWVzIGFyZSBub3QgYWx3YXlzIGNvbnNpc3RlbnQgYWNyb3NzIHZhcmlvdXMgZm9udCBmb3JtYXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQiPkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCB0aGUgYXV0by1oaW50ZXIgaXMgcHJlZmVycmVkIG92ZXIgdGhlIGZvbnQncyBuYXRpdmUgaGludGVyLiBTZWUgYWxzbyB0aGUgbm90ZSBiZWxvdy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MT0FEX1BFREFOVElDIj5GVF9MT0FEX1BFREFOVElDPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kaWNhdGVzIHRoYXQgdGhlIGZvbnQgZHJpdmVyIHNob3VsZCBwZXJmb3JtIHBlZGFudGljIHZlcmlmaWNhdGlvbnMgZHVyaW5nIGdseXBoIGxvYWRpbmcuIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gZGV0ZWN0IGJyb2tlbiBnbHlwaHMgaW4gZm9udHMuIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIHRyaWVzIHRvIGhhbmRsZSBicm9rZW4gZm9udHMgYWxzby48L3A+Cis8cD5JbiBwYXJ0aWN1bGFyLCBlcnJvcnMgZnJvbSB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgZW5naW5lIGFyZSBub3QgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGlzIGZsYWcgaXMgbm90IHNldDsgdGhpcyBtaWdodCByZXN1bHQgaW4gcGFydGlhbGx5IGhpbnRlZCBvciBkaXN0b3J0ZWQgZ2x5cGhzIGluIGNhc2UgYSBnbHlwaCdzIGJ5dGVjb2RlIGlzIGJ1Z2d5LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTk9fUkVDVVJTRSI+RlRfTE9BRF9OT19SRUNVUlNFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kaWNhdGUgdGhhdCB0aGUgZm9udCBkcml2ZXIgc2hvdWxkIG5vdCBsb2FkIGNvbXBvc2l0ZSBnbHlwaHMgcmVjdXJzaXZlbHkuIEluc3RlYWQsIGl0IHNob3VsZCBzZXQgdGhlICZsc3F1bztudW1fc3ViZ2x5cGgmcnNxdW87IGFuZCAmbHNxdW87c3ViZ2x5cGhzJnJzcXVvOyB2YWx1ZXMgb2YgdGhlIGdseXBoIHNsb3QgYWNjb3JkaW5nbHksIGFuZCBzZXQgJmxzcXVvO2dseXBoLSZndDtmb3JtYXQmcnNxdW87IHRvIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTwvYT4uIFRoZSBkZXNjcmlwdGlvbiBvZiBzdWJnbHlwaHMgY2FuIHRoZW4gYmUgYWNjZXNzZWQgd2l0aCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfU3ViR2x5cGhfSW5mbyI+RlRfR2V0X1N1YkdseXBoX0luZm88L2E+LjwvcD4KKzxwPlRoaXMgZmxhZyBpbXBsaWVzIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX1NDQUxFPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNIj5GVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRpY2F0ZXMgdGhhdCB0aGUgdHJhbnNmb3JtIG1hdHJpeCBzZXQgYnkgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X1RyYW5zZm9ybSI+RlRfU2V0X1RyYW5zZm9ybTwvYT4gc2hvdWxkIGJlIGlnbm9yZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9NT05PQ0hST01FIj5GVF9MT0FEX01PTk9DSFJPTUU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGZsYWcgaXMgdXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1JFTkRFUjwvYT4gdG8gaW5kaWNhdGUgdGhhdCB5b3Ugd2FudCB0byByZW5kZXIgYW4gb3V0bGluZSBnbHlwaCB0byBhIDEtYml0IG1vbm9jaHJvbWUgYml0bWFwIGdseXBoLCB3aXRoIDgmbmJzcDtwaXhlbHMgcGFja2VkIGludG8gZWFjaCBieXRlIG9mIHRoZSBiaXRtYXAgZGF0YS48L3A+Cis8cD5Ob3RlIHRoYXQgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBoaW50aW5nIGFsZ29yaXRobSB1c2VkLiBZb3Ugc2hvdWxkIHJhdGhlciB1c2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfWFhYIj5GVF9MT0FEX1RBUkdFVF9NT05PPC9hPiBzbyB0aGF0IHRoZSBtb25vY2hyb21lLW9wdGltaXplZCBoaW50aW5nIGFsZ29yaXRobSBpcyB1c2VkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTElORUFSX0RFU0lHTiI+RlRfTE9BRF9MSU5FQVJfREVTSUdOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kaWNhdGVzIHRoYXQgdGhlICZsc3F1bztsaW5lYXJIb3JpQWR2YW5jZSZyc3F1bzsgYW5kICZsc3F1bztsaW5lYXJWZXJ0QWR2YW5jZSZyc3F1bzsgZmllbGRzIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdFJlYyI+RlRfR2x5cGhTbG90UmVjPC9hPiBzaG91bGQgYmUga2VwdCBpbiBmb250IHVuaXRzLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90UmVjIj5GVF9HbHlwaFNsb3RSZWM8L2E+IGZvciBkZXRhaWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfTk9fQVVUT0hJTlQiPkZUX0xPQURfTk9fQVVUT0hJTlQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5EaXNhYmxlIGF1dG8taGludGVyLiBTZWUgYWxzbyB0aGUgbm90ZSBiZWxvdy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MT0FEX0NPTE9SIj5GVF9MT0FEX0NPTE9SPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmbGFnIGlzIHVzZWQgdG8gcmVxdWVzdCBsb2FkaW5nIG9mIGNvbG9yIGVtYmVkZGVkLWJpdG1hcCBpbWFnZXMuIFRoZSByZXN1bHRpbmcgY29sb3IgYml0bWFwcywgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfQkdSQTwvYT4gZm9ybWF0LiBXaGVuIHRoZSBmbGFnIGlzIG5vdCB1c2VkIGFuZCBjb2xvciBiaXRtYXBzIGFyZSBmb3VuZCwgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byAyNTYtbGV2ZWwgZ3JheSBiaXRtYXBzIHRyYW5zcGFyZW50bHkuIFRob3NlIGJpdG1hcHMgd2lsbCBiZSBpbiB0aGUgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUElYRUxfTU9ERV9HUkFZPC9hPiBmb3JtYXQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9DUk9QX0JJVE1BUCI+RlRfTE9BRF9DUk9QX0JJVE1BUDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklnbm9yZWQuIERlcHJlY2F0ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgiPkZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SWdub3JlZC4gRGVwcmVjYXRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5CeSBkZWZhdWx0LCBoaW50aW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBmb250J3MgbmF0aXZlIGhpbnRlciAoc2VlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19ISU5URVI8L2E+KSBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgYXV0by1oaW50ZXIuIFlvdSBjYW4gZGlzYWJsZSBoaW50aW5nIGJ5IHNldHRpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fSElOVElORzwvYT4gb3IgY2hhbmdlIHRoZSBwcmVjZWRlbmNlIGJ5IHNldHRpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ8L2E+LiBZb3UgY2FuIGFsc28gc2V0IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX0FVVE9ISU5UPC9hPiBpbiBjYXNlIHlvdSBkb24ndCB3YW50IHRoZSBhdXRvLWhpbnRlciB0byBiZSB1c2VkIGF0IGFsbC48L3A+Cis8cD5TZWUgdGhlIGRlc2NyaXB0aW9uIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19UUklDS1k8L2E+IGZvciBhIHNwZWNpYWwgZXhjZXB0aW9uIChhZmZlY3Rpbmcgb25seSBhIGhhbmRmdWwgb2YgQXNpYW4gZm9udHMpLjwvcD4KKzxwPkJlc2lkZXMgZGVjaWRpbmcgd2hpY2ggaGludGVyIHRvIHVzZSwgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGljaCBoaW50aW5nIGFsZ29yaXRobSB0byB1c2UuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX1hYWDwvYT4gZm9yIGRldGFpbHMuPC9wPgorPHA+Tm90ZSB0aGF0IHRoZSBhdXRvLWhpbnRlciBuZWVkcyBhIHZhbGlkIFVuaWNvZGUgY21hcCAoZWl0aGVyIGEgbmF0aXZlIG9uZSBvciBzeW50aGVzaXplZCBieSBGcmVlVHlwZSkgZm9yIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMuIElmIGEgZm9udCBwcm92aWRlcyBhbiBpbmNvcnJlY3QgbWFwcGluZyAoZm9yIGV4YW1wbGUsIGFzc2lnbmluZyB0aGUgY2hhcmFjdGVyIGNvZGUgVSswMDVBLCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaLCB0byBhIGdseXBoIGRlcGljdGluZyBhIG1hdGhlbWF0aWNhbCBpbnRlZ3JhbCBzaWduKSwgdGhlIGF1dG8taGludGVyIG1pZ2h0IHByb2R1Y2UgdXNlbGVzcyByZXN1bHRzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTE9BRF9UQVJHRVRfWFhYIj5GVF9MT0FEX1RBUkdFVF9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSBGVF9MT0FEX1RBUkdFVF8oIHggKSAgICggKDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludDMyIj5GVF9JbnQzMjwvYT4pKCAoeCkgJmFtcDsgMTUgKSAmbHQ7Jmx0OyAxNiApCisKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfTk9STUFMIj5GVF9MT0FEX1RBUkdFVF9OT1JNQUw8L2E+ICBGVF9MT0FEX1RBUkdFVF8oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JFTkRFUl9NT0RFX05PUk1BTCI+RlRfUkVOREVSX01PREVfTk9STUFMPC9hPiApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX0xJR0hUIj5GVF9MT0FEX1RBUkdFVF9MSUdIVDwvYT4gICBGVF9MT0FEX1RBUkdFVF8oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JFTkRFUl9NT0RFX0xJR0hUIj5GVF9SRU5ERVJfTU9ERV9MSUdIVDwvYT4gICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfTU9OTyI+RlRfTE9BRF9UQVJHRVRfTU9OTzwvYT4gICAgRlRfTE9BRF9UQVJHRVRfKCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SRU5ERVJfTU9ERV9NT05PIj5GVF9SRU5ERVJfTU9ERV9NT05PPC9hPiAgICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfTENEIj5GVF9MT0FEX1RBUkdFVF9MQ0Q8L2E+ICAgICBGVF9MT0FEX1RBUkdFVF8oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JFTkRFUl9NT0RFX0xDRCI+RlRfUkVOREVSX01PREVfTENEPC9hPiAgICApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX0xDRF9WIj5GVF9MT0FEX1RBUkdFVF9MQ0RfVjwvYT4gICBGVF9MT0FEX1RBUkdFVF8oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JFTkRFUl9NT0RFX0xDRF9WIj5GVF9SRU5ERVJfTU9ERV9MQ0RfVjwvYT4gICkKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgdmFsdWVzIHRoYXQgYXJlIHVzZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMgaGludGluZyBhbGdvcml0aG0gdG8gdXNlIGJ5IHRoZSBoaW50ZXIuIFlvdSBzaG91bGQgT1Igb25lIG9mIHRoZXNlIHZhbHVlcyB0byB5b3VyICZsc3F1bztsb2FkX2ZsYWdzJnJzcXVvOyB3aGVuIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4uPC9wPgorPHA+Tm90ZSB0aGF0IGZvbnQncyBuYXRpdmUgaGludGVycyBtYXkgaWdub3JlIHRoZSBoaW50aW5nIGFsZ29yaXRobSB5b3UgaGF2ZSBzcGVjaWZpZWQgKGUuZy4sIHRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlcikuIFlvdSBjYW4gc2V0IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX0ZPUkNFX0FVVE9ISU5UPC9hPiB0byBlbnN1cmUgdGhhdCB0aGUgYXV0by1oaW50ZXIgaXMgdXNlZC48L3A+Cis8cD5BbHNvIG5vdGUgdGhhdCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX0xJR0hUPC9hPiBpcyBhbiBleGNlcHRpb24sIGluIHRoYXQgaXQgYWx3YXlzIGltcGxpZXMgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ8L2E+LjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MT0FEX1RBUkdFVF9OT1JNQUwiPkZUX0xPQURfVEFSR0VUX05PUk1BTDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHQgaGludGluZyBhbGdvcml0aG0sIG9wdGltaXplZCBmb3Igc3RhbmRhcmQgZ3JheS1sZXZlbCByZW5kZXJpbmcuIEZvciBtb25vY2hyb21lIG91dHB1dCwgdXNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX1hYWCI+RlRfTE9BRF9UQVJHRVRfTU9OTzwvYT4gaW5zdGVhZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MT0FEX1RBUkdFVF9MSUdIVCI+RlRfTE9BRF9UQVJHRVRfTElHSFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGxpZ2h0ZXIgaGludGluZyBhbGdvcml0aG0gZm9yIG5vbi1tb25vY2hyb21lIG1vZGVzLiBNYW55IGdlbmVyYXRlZCBnbHlwaHMgYXJlIG1vcmUgZnV6enkgYnV0IGJldHRlciByZXNlbWJsZSBpdHMgb3JpZ2luYWwgc2hhcGUuIEEgYml0IGxpa2UgcmVuZGVyaW5nIG9uIE1hYyBPUyZuYnNwO1guPC9wPgorPHA+QXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhpcyB0YXJnZXQgaW1wbGllcyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9GT1JDRV9BVVRPSElOVDwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTE9BRF9UQVJHRVRfTU9OTyI+RlRfTE9BRF9UQVJHRVRfTU9OTzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUgb3V0cHV0LiBUaGUgcmVzdWx0IGlzIHByb2JhYmx5IHVucGxlYXNhbnQgaWYgdGhlIGdseXBoIGlzIHJlbmRlcmVkIGluIG5vbi1tb25vY2hyb21lIG1vZGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfVEFSR0VUX0xDRCI+RlRfTE9BRF9UQVJHRVRfTENEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB2YXJpYW50IG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX1hYWCI+RlRfTE9BRF9UQVJHRVRfTk9STUFMPC9hPiBvcHRpbWl6ZWQgZm9yIGhvcml6b250YWxseSBkZWNpbWF0ZWQgTENEIGRpc3BsYXlzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0xPQURfVEFSR0VUX0xDRF9WIj5GVF9MT0FEX1RBUkdFVF9MQ0RfVjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdmFyaWFudCBvZiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX05PUk1BTDwvYT4gb3B0aW1pemVkIGZvciB2ZXJ0aWNhbGx5IGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IHNob3VsZCB1c2Ugb25seSA8aT5vbmU8L2k+IG9mIHRoZSBGVF9MT0FEX1RBUkdFVF9YWFggdmFsdWVzIGluIHlvdXIgJmxzcXVvO2xvYWRfZmxhZ3MmcnNxdW87LiBUaGV5IGNhbid0IGJlIE9SZWQuPC9wPgorPHA+SWYgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfUkVOREVSPC9hPiBpcyBhbHNvIHNldCwgdGhlIGdseXBoIGlzIHJlbmRlcmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIG1vZGUgKGkuZS4sIHRoZSBtb2RlIHRoYXQgbWF0Y2hlcyB0aGUgdXNlZCBhbGdvcml0aG0gYmVzdCkuIEFuIGV4ZXB0aW9uIGlzIEZUX0xPQURfVEFSR0VUX01PTk8gc2luY2UgaXQgaW1wbGllcyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9NT05PQ0hST01FPC9hPi48L3A+Cis8cD5Zb3UgY2FuIHVzZSBhIGhpbnRpbmcgYWxnb3JpdGhtIHRoYXQgZG9lc24ndCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHJlbmRlcmluZyBtb2RlLiBBcyBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhlICZsc3F1bztsaWdodCZyc3F1bzsgaGludGluZyBhbGdvcml0aG0gYW5kIGhhdmUgdGhlIHJlc3VsdHMgcmVuZGVyZWQgaW4gaG9yaXpvbnRhbCBMQ0QgcGl4ZWwgbW9kZSwgd2l0aCBjb2RlIGxpa2U8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MgfCBGVF9MT0FEX1RBUkdFVF9MSUdIVCApOworCisgIEZUX1JlbmRlcl9HbHlwaCggZmFjZS0mZ3Q7Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX0xDRCApOworPC9wcmU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NVQkdMWVBIX0ZMQUdfWFhYIj5GVF9TVUJHTFlQSF9GTEFHX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMiPkZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFM8L2E+ICAgICAgICAgIDEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMiPkZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTPC9hPiAgICAgIDIKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEIj5GVF9TVUJHTFlQSF9GTEFHX1JPVU5EX1hZX1RPX0dSSUQ8L2E+ICAgICAgICA0CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfU0NBTEUiPkZUX1NVQkdMWVBIX0ZMQUdfU0NBTEU8L2E+ICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19YWV9TQ0FMRSI+RlRfU1VCR0xZUEhfRkxBR19YWV9TQ0FMRTwvYT4gICAgICAgICAgICAgMHg0MAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVUJHTFlQSF9GTEFHXzJYMiI+RlRfU1VCR0xZUEhfRkxBR18yWDI8L2E+ICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTIj5GVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTPC9hPiAgICAgIDB4MjAwCis8L3ByZT4KKworPHA+QSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIHRvIGRlc2NyaWJlIHN1YmdseXBocy4gUGxlYXNlIHJlZmVyIHRvIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBmbGFncy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9XT1JEUyI+RlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9XT1JEUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTIj5GVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NVQkdMWVBIX0ZMQUdfUk9VTkRfWFlfVE9fR1JJRCI+RlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1VCR0xZUEhfRkxBR19TQ0FMRSI+RlRfU1VCR0xZUEhfRkxBR19TQ0FMRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NVQkdMWVBIX0ZMQUdfWFlfU0NBTEUiPkZUX1NVQkdMWVBIX0ZMQUdfWFlfU0NBTEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVUJHTFlQSF9GTEFHXzJYMiI+RlRfU1VCR0xZUEhfRkxBR18yWDI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTIj5GVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRlNUWVBFX1hYWCI+RlRfRlNUWVBFX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkciPkZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkc8L2E+ICAgICAgICAgMHgwMDAwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HIj5GVF9GU1RZUEVfUkVTVFJJQ1RFRF9MSUNFTlNFX0VNQkVERElORzwvYT4gIDB4MDAwMgorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HIj5GVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HPC9hPiAgIDB4MDAwNAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HIj5GVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HPC9hPiAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GU1RZUEVfTk9fU1VCU0VUVElORyI+RlRfRlNUWVBFX05PX1NVQlNFVFRJTkc8L2E+ICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSI+RlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWTwvYT4gICAgICAgICAweDAyMDAKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgYml0IGZsYWdzIHVzZWQgaW4gdGhlICZsc3F1bztmc1R5cGUmcnNxdW87IGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluIGEgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgZm9udCBhbmQgdGhlICZsc3F1bztGU1R5cGUmcnNxdW87IGVudHJ5IGluIGEgUG9zdFNjcmlwdCBmb250LiBUaGVzZSBiaXQgZmxhZ3MgYXJlIHJldHVybmVkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9GU1R5cGVfRmxhZ3MiPkZUX0dldF9GU1R5cGVfRmxhZ3M8L2E+OyB0aGV5IGluZm9ybSBjbGllbnQgYXBwbGljYXRpb25zIG9mIGVtYmVkZGluZyBhbmQgc3Vic2V0dGluZyByZXN0cmljdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZm9udC48L3A+Cis8cD5TZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vY29udGVudC9kYW0vQWRvYmUvZW4vZGV2bmV0L2Fjcm9iYXQvcGRmcy9Gb250UG9saWNpZXMucGRmIj5odHRwOi8vd3d3LmFkb2JlLmNvbS9jb250ZW50L2RhbS9BZG9iZS9lbi9kZXZuZXQvYWNyb2JhdC9wZGZzL0ZvbnRQb2xpY2llcy5wZGY8L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkciPkZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Gb250cyB3aXRoIG5vIGZzVHlwZSBiaXQgc2V0IG1heSBiZSBlbWJlZGRlZCBhbmQgcGVybWFuZW50bHkgaW5zdGFsbGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtIGJ5IGFuIGFwcGxpY2F0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HIj5GVF9GU1RZUEVfUkVTVFJJQ1RFRF9MSUNFTlNFX0VNQkVERElORzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkZvbnRzIHRoYXQgaGF2ZSBvbmx5IHRoaXMgYml0IHNldCBtdXN0IG5vdCBiZSBtb2RpZmllZCwgZW1iZWRkZWQgb3IgZXhjaGFuZ2VkIGluIGFueSBtYW5uZXIgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgcGVybWlzc2lvbiBvZiB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfRlNUWVBFX1BSRVZJRVdfQU5EX1BSSU5UX0VNQkVERElORyI+RlRfRlNUWVBFX1BSRVZJRVdfQU5EX1BSSU5UX0VNQkVERElORzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklmIHRoaXMgYml0IGlzIHNldCwgdGhlIGZvbnQgbWF5IGJlIGVtYmVkZGVkIGFuZCB0ZW1wb3JhcmlseSBsb2FkZWQgb24gdGhlIHJlbW90ZSBzeXN0ZW0uIERvY3VtZW50cyBjb250YWluaW5nIFByZXZpZXcgJmFtcDsgUHJpbnQgZm9udHMgbXVzdCBiZSBvcGVuZWQgJmxzcXVvO3JlYWQtb25seSZyc3F1bzs7IG5vIGVkaXRzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HIj5GVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SWYgdGhpcyBiaXQgaXMgc2V0LCB0aGUgZm9udCBtYXkgYmUgZW1iZWRkZWQgYnV0IG11c3Qgb25seSBiZSBpbnN0YWxsZWQgdGVtcG9yYXJpbHkgb24gb3RoZXIgc3lzdGVtcy4gSW4gY29udHJhc3QgdG8gUHJldmlldyAmYW1wOyBQcmludCBmb250cywgZG9jdW1lbnRzIGNvbnRhaW5pbmcgZWRpdGFibGUgZm9udHMgbWF5IGJlIG9wZW5lZCBmb3IgcmVhZGluZywgZWRpdGluZyBpcyBwZXJtaXR0ZWQsIGFuZCBjaGFuZ2VzIG1heSBiZSBzYXZlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GU1RZUEVfTk9fU1VCU0VUVElORyI+RlRfRlNUWVBFX05PX1NVQlNFVFRJTkc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBub3QgYmUgc3Vic2V0dGVkIHByaW9yIHRvIGVtYmVkZGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZIj5GVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SWYgdGhpcyBiaXQgaXMgc2V0LCBvbmx5IGJpdG1hcHMgY29udGFpbmVkIGluIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZDsgbm8gb3V0bGluZSBkYXRhIG1heSBiZSBlbWJlZGRlZC4gSWYgdGhlcmUgYXJlIG5vIGJpdG1hcHMgYXZhaWxhYmxlIGluIHRoZSBmb250LCB0aGVuIHRoZSBmb250IGlzIHVuZW1iZWRkYWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5XaGlsZSB0aGUgZnNUeXBlIGZsYWdzIGNhbiBpbmRpY2F0ZSB0aGF0IGEgZm9udCBtYXkgYmUgZW1iZWRkZWQsIGEgbGljZW5zZSB3aXRoIHRoZSBmb250IHZlbmRvciBtYXkgYmUgc2VwYXJhdGVseSByZXF1aXJlZCB0byB1c2UgdGhlIGZvbnQgaW4gdGhpcyB3YXkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9IQVNfRkFTVF9HTFlQSFMiPkZUX0hBU19GQVNUX0dMWVBIUzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0hBU19GQVNUX0dMWVBIUzwvYj4oIGZhY2UgKSAgMAorPC9wcmU+CisKKzxwPkRlcHJlY2F0ZWQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItYmFzaWNfdHlwZXMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItYmFzaWNfdHlwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMzNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1iYXNpY190eXBlcy5odG1sCkBAIC0wLDAgKzEsODY2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+QmFzaWMgRGF0YSBUeXBlczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9CeXRlIj5GVF9CeXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9Cb29sIj5GVF9Cb29sPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9Vbml0VmVjdG9yIj5GVF9Vbml0VmVjdG9yPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0J5dGVzIj5GVF9CeXRlczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT2Zmc2V0Ij5GVF9PZmZzZXQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0YyNkRvdDYiPkZUX0YyNkRvdDY8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQ2hhciI+RlRfQ2hhcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUHRyRGlzdCI+RlRfUHRyRGlzdDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfRGF0YSI+RlRfRGF0YTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9JbnQiPkZUX0ludDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVUludCI+RlRfVUludDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVGFnIj5GVF9UYWc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX01BS0VfVEFHIj5GVF9NQUtFX1RBRzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9JbnQxNiI+RlRfSW50MTY8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9VSW50MTYiPkZUX1VJbnQxNjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZW5lcmljIj5GVF9HZW5lcmljPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ludDMyIj5GVF9JbnQzMjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUG9pbnRlciI+RlRfUG9pbnRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2VuZXJpY19GaW5hbGl6ZXIiPkZUX0dlbmVyaWNfRmluYWxpemVyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1VJbnQzMiI+RlRfVUludDMyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9Qb3MiPkZUX1BvczwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9JbnQ2NCI+RlRfSW50NjQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9VSW50NjQiPkZUX1VJbnQ2NDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQkJveCI+RlRfQkJveDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUGl4ZWxfTW9kZSI+RlRfUGl4ZWxfTW9kZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX01hdHJpeCI+RlRfTWF0cml4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9QYWxldHRlX01vZGUiPkZUX1BhbGV0dGVfTW9kZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfRldvcmQiPkZUX0ZXb3JkPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dseXBoX0Zvcm1hdDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9Mb25nIj5GVF9Mb25nPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9VRldvcmQiPkZUX1VGV29yZDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfSU1BR0VfVEFHIj5GVF9JTUFHRV9UQUc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVUxvbmciPkZUX1VMb25nPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9GMkRvdDE0Ij5GVF9GMkRvdDE0PC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBiYXNpYyBkYXRhIHR5cGVzIGRlZmluZWQgYnkgRnJlZVR5cGUmbmJzcDsyLCByYW5naW5nIGZyb20gc2ltcGxlIHNjYWxhciB0eXBlcyB0byBiaXRtYXAgZGVzY3JpcHRvcnMuIE1vcmUgZm9udC1zcGVjaWZpYyBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQnl0ZSI+RlRfQnl0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+ICA8Yj5GVF9CeXRlPC9iPjsKKzwvcHJlPgorCis8cD5BIHNpbXBsZSB0eXBlZGVmIGZvciB0aGUgPGk+dW5zaWduZWQ8L2k+IGNoYXIgdHlwZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0J5dGVzIj5GVF9CeXRlczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4qICA8Yj5GVF9CeXRlczwvYj47Cis8L3ByZT4KKworPHA+QSB0eXBlZGVmIGZvciBjb25zdGFudCBtZW1vcnkgYXJlYXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DaGFyIj5GVF9DaGFyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+ICA8Yj5GVF9DaGFyPC9iPjsKKzwvcHJlPgorCis8cD5BIHNpbXBsZSB0eXBlZGVmIGZvciB0aGUgPGk+c2lnbmVkPC9pPiBjaGFyIHR5cGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9JbnQiPkZUX0ludDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+ICA8Yj5GVF9JbnQ8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBmb3IgdGhlIGludCB0eXBlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVUludCI+RlRfVUludDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gIDxiPkZUX1VJbnQ8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBmb3IgdGhlIHVuc2lnbmVkIGludCB0eXBlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW50MTYiPkZUX0ludDE2PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ09ORklHX0NPTkZJR19IIChjb25maWcvZnRjb25maWcuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaG9ydDwvc3Bhbj4gIDxiPkZUX0ludDE2PC9iPjsKKzwvcHJlPgorCis8cD5BIHR5cGVkZWYgZm9yIGEgMTZiaXQgc2lnbmVkIGludGVnZXIgdHlwZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1VJbnQxNiI+RlRfVUludDE2PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ09ORklHX0NPTkZJR19IIChjb25maWcvZnRjb25maWcuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNob3J0PC9zcGFuPiAgPGI+RlRfVUludDE2PC9iPjsKKzwvcHJlPgorCis8cD5BIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW50MzIiPkZUX0ludDMyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ09ORklHX0NPTkZJR19IIChjb25maWcvZnRjb25maWcuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaWduZWQ8L3NwYW4+IFhYWCAgPGI+RlRfSW50MzI8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBmb3IgYSAzMmJpdCBzaWduZWQgaW50ZWdlciB0eXBlLiBUaGUgc2l6ZSBkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVUludDMyIj5GVF9VSW50MzI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DT05GSUdfQ09ORklHX0ggKGNvbmZpZy9mdGNvbmZpZy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiBYWFggIDxiPkZUX1VJbnQzMjwvYj47Cis8L3ByZT4KKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ludDY0Ij5GVF9JbnQ2NDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NPTkZJR19DT05GSUdfSCAoY29uZmlnL2Z0Y29uZmlnLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2lnbmVkPC9zcGFuPiBYWFggIDxiPkZUX0ludDY0PC9iPjsKKzwvcHJlPgorPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVUludDY0Ij5GVF9VSW50NjQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DT05GSUdfQ09ORklHX0ggKGNvbmZpZy9mdGNvbmZpZy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiBYWFggIDxiPkZUX1VJbnQ2NDwvYj47Cis8L3ByZT4KKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Nob3J0Ij5GVF9TaG9ydDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaG9ydDwvc3Bhbj4gIDxiPkZUX1Nob3J0PC9iPjsKKzwvcHJlPgorCis8cD5BIHR5cGVkZWYgZm9yIHNpZ25lZCBzaG9ydC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1VTaG9ydCI+RlRfVVNob3J0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2hvcnQ8L3NwYW4+ICA8Yj5GVF9VU2hvcnQ8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBmb3IgdW5zaWduZWQgc2hvcnQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Mb25nIj5GVF9Mb25nPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmxvbmc8L3NwYW4+ICA8Yj5GVF9Mb25nPC9iPjsKKzwvcHJlPgorCis8cD5BIHR5cGVkZWYgZm9yIHNpZ25lZCBsb25nLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVUxvbmciPkZUX1VMb25nPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gIDxiPkZUX1VMb25nPC9iPjsKKzwvcHJlPgorCis8cD5BIHR5cGVkZWYgZm9yIHVuc2lnbmVkIGxvbmcuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Cb29sIj5GVF9Cb29sPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4gIDxiPkZUX0Jvb2w8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBvZiB1bnNpZ25lZCBjaGFyLCB1c2VkIGZvciBzaW1wbGUgYm9vbGVhbnMuIEFzIHVzdWFsLCB2YWx1ZXMgMSBhbmQmbmJzcDswIHJlcHJlc2VudCB0cnVlIGFuZCBmYWxzZSwgcmVzcGVjdGl2ZWx5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT2Zmc2V0Ij5GVF9PZmZzZXQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiBzaXplX3QgIDxiPkZUX09mZnNldDwvYj47Cis8L3ByZT4KKworPHA+VGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBBTlNJJm5ic3A7QyAmbHNxdW87c2l6ZV90JnJzcXVvOyB0eXBlLCBpLmUuLCB0aGUgbGFyZ2VzdCA8aT51bnNpZ25lZDwvaT4gaW50ZWdlciB0eXBlIHVzZWQgdG8gZXhwcmVzcyBhIGZpbGUgc2l6ZSBvciBwb3NpdGlvbiwgb3IgYSBtZW1vcnkgYmxvY2sgc2l6ZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1B0ckRpc3QiPkZUX1B0ckRpc3Q8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiBmdF9wdHJkaWZmX3QgIDxiPkZUX1B0ckRpc3Q8L2I+OworPC9wcmU+CisKKzxwPlRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgQU5TSSZuYnNwO0MgJmxzcXVvO3B0cmRpZmZfdCZyc3F1bzsgdHlwZSwgaS5lLiwgdGhlIGxhcmdlc3QgPGk+c2lnbmVkPC9pPiBpbnRlZ2VyIHR5cGUgdXNlZCB0byBleHByZXNzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludGVycy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cmluZyI+RlRfU3RyaW5nPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+ICA8Yj5GVF9TdHJpbmc8L2I+OworPC9wcmU+CisKKzxwPkEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBjaGFyIHR5cGUsIHVzdWFsbHkgdXNlZCBmb3Igc3RyaW5ncy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RhZyI+RlRfVGFnPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+ICA8Yj5GVF9UYWc8L2I+OworPC9wcmU+CisKKzxwPkEgdHlwZWRlZiBmb3IgMzItYml0IHRhZ3MgKGFzIHVzZWQgaW4gdGhlIFNGTlQgZm9ybWF0KS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0Vycm9yIj5GVF9FcnJvcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+ICA8Yj5GVF9FcnJvcjwvYj47Cis8L3ByZT4KKworPHA+VGhlIEZyZWVUeXBlIGVycm9yIGNvZGUgdHlwZS4gQSB2YWx1ZSBvZiZuYnNwOzAgaXMgYWx3YXlzIGludGVycHJldGVkIGFzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GaXhlZCI+RlRfRml4ZWQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gIDxiPkZUX0ZpeGVkPC9iPjsKKzwvcHJlPgorCis8cD5UaGlzIHR5cGUgaXMgdXNlZCB0byBzdG9yZSAxNi4xNiBmaXhlZC1wb2ludCB2YWx1ZXMsIGxpa2Ugc2NhbGluZyB2YWx1ZXMgb3IgbWF0cml4IGNvZWZmaWNpZW50cy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1BvaW50ZXIiPkZUX1BvaW50ZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICA8Yj5GVF9Qb2ludGVyPC9iPjsKKzwvcHJlPgorCis8cD5BIHNpbXBsZSB0eXBlZGVmIGZvciBhIHR5cGVsZXNzIHBvaW50ZXIuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Qb3MiPkZUX1BvczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgPGI+RlRfUG9zPC9iPjsKKzwvcHJlPgorCis8cD5UaGUgdHlwZSBGVF9Qb3MgaXMgdXNlZCB0byBzdG9yZSB2ZWN0b3JpYWwgY29vcmRpbmF0ZXMuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhlc2UgY2FuIHJlcHJlc2VudCBkaXN0YW5jZXMgaW4gaW50ZWdlciBmb250IHVuaXRzLCBvciAxNi4xNiwgb3IgMjYuNiBmaXhlZC1wb2ludCBwaXhlbCBjb29yZGluYXRlcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1ZlY3RvciI+RlRfVmVjdG9yPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1ZlY3Rvcl8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgeDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gIHk7CisKKyAgfSA8Yj5GVF9WZWN0b3I8L2I+OworPC9wcmU+CisKKzxwPkEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGEgMkQgdmVjdG9yOyBjb29yZGluYXRlcyBhcmUgb2YgdGhlIEZUX1BvcyB0eXBlLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ4Ij54PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGhvcml6b250YWwgY29vcmRpbmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5Ij55PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQkJveCI+RlRfQkJveDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9CQm94XworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICB4TWluLCB5TWluOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgeE1heCwgeU1heDsKKworICB9IDxiPkZUX0JCb3g8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gaG9sZCBhbiBvdXRsaW5lJ3MgYm91bmRpbmcgYm94LCBpLmUuLCB0aGUgY29vcmRpbmF0ZXMgb2YgaXRzIGV4dHJlbWEgaW4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpcmVjdGlvbnMuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InhNaW4iPnhNaW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaG9yaXpvbnRhbCBtaW5pbXVtIChsZWZ0LW1vc3QpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InlNaW4iPnlNaW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVydGljYWwgbWluaW11bSAoYm90dG9tLW1vc3QpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InhNYXgiPnhNYXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaG9yaXpvbnRhbCBtYXhpbXVtIChyaWdodC1tb3N0KS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5TWF4Ij55TWF4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIG1heGltdW0gKHRvcC1tb3N0KS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgYm91bmRpbmcgYm94IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbG93ZXIgbGVmdCBhbmQgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4gSW4gUG9zdFNjcmlwdCwgdGhvc2UgdmFsdWVzIGFyZSBvZnRlbiBjYWxsZWQgKGxseCxsbHkpIGFuZCAodXJ4LHVyeSksIHJlc3BlY3RpdmVseS48L3A+Cis8cD5JZiAmbHNxdW87eU1pbiZyc3F1bzsgaXMgbmVnYXRpdmUsIHRoaXMgdmFsdWUgZ2l2ZXMgdGhlIGdseXBoJ3MgZGVzY2VuZGVyLiBPdGhlcndpc2UsIHRoZSBnbHlwaCBkb2Vzbid0IGRlc2NlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLiBTaW1pbGFybHksIGlmICZsc3F1bzt5bWF4JnJzcXVvOyBpcyBwb3NpdGl2ZSwgdGhpcyB2YWx1ZSBnaXZlcyB0aGUgZ2x5cGgncyBhc2NlbmRlci48L3A+Cis8cD4mbHNxdW87eE1pbiZyc3F1bzsgZ2l2ZXMgdGhlIGhvcml6b250YWwgZGlzdGFuY2UgZnJvbSB0aGUgZ2x5cGgncyBvcmlnaW4gdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgZ2x5cGgncyBib3VuZGluZyBib3guIElmICZsc3F1bzt4TWluJnJzcXVvOyBpcyBuZWdhdGl2ZSwgdGhlIGdseXBoIGV4dGVuZHMgdG8gdGhlIGxlZnQgb2YgdGhlIG9yaWdpbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01hdHJpeCI+RlRfTWF0cml4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX01hdHJpeF8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gIHh4LCB4eTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICB5eCwgeXk7CisKKyAgfSA8Yj5GVF9NYXRyaXg8L2I+OworPC9wcmU+CisKKzxwPkEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGEgMngyIG1hdHJpeC4gQ29lZmZpY2llbnRzIGFyZSBpbiAxNi4xNiBmaXhlZC1wb2ludCBmb3JtYXQuIFRoZSBjb21wdXRhdGlvbiBwZXJmb3JtZWQgaXM6PC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgICB4JyA9IHgqeHggKyB5Knh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICB5JyA9IHgqeXggKyB5Knl5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8L3ByZT4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ4eCI+eHg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5NYXRyaXggY29lZmZpY2llbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieHkiPnh5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TWF0cml4IGNvZWZmaWNpZW50LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Inl4Ij55eDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1hdHJpeCBjb2VmZmljaWVudC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5eSI+eXk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5NYXRyaXggY29lZmZpY2llbnQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRldvcmQiPkZUX0ZXb3JkPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNob3J0PC9zcGFuPiAgPGI+RlRfRldvcmQ8L2I+OyAgIC8qIGRpc3RhbmNlIGluIEZVbml0cyAqLworPC9wcmU+CisKKzxwPkEgc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHVzZWQgdG8gc3RvcmUgYSBkaXN0YW5jZSBpbiBvcmlnaW5hbCBmb250IHVuaXRzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVUZXb3JkIj5GVF9VRldvcmQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaG9ydDwvc3Bhbj4gIDxiPkZUX1VGV29yZDwvYj47ICAvKiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IGRpc3RhbmNlICovCis8L3ByZT4KKworPHA+QW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgdXNlZCB0byBzdG9yZSBhIGRpc3RhbmNlIGluIG9yaWdpbmFsIGZvbnQgdW5pdHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GMkRvdDE0Ij5GVF9GMkRvdDE0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNob3J0PC9zcGFuPiAgPGI+RlRfRjJEb3QxNDwvYj47Cis8L3ByZT4KKworPHA+QSBzaWduZWQgMi4xNCBmaXhlZC1wb2ludCB0eXBlIHVzZWQgZm9yIHVuaXQgdmVjdG9ycy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1VuaXRWZWN0b3IiPkZUX1VuaXRWZWN0b3I8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfVW5pdFZlY3Rvcl8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0YyRG90MTQiPkZUX0YyRG90MTQ8L2E+ICB4OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0YyRG90MTQiPkZUX0YyRG90MTQ8L2E+ICB5OworCisgIH0gPGI+RlRfVW5pdFZlY3RvcjwvYj47Cis8L3ByZT4KKworPHA+QSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgYSAyRCB2ZWN0b3IgdW5pdCB2ZWN0b3IuIFVzZXMgRlRfRjJEb3QxNCB0eXBlcy48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieCI+eDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkhvcml6b250YWwgY29vcmRpbmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5Ij55PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmVydGljYWwgY29vcmRpbmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GMjZEb3Q2Ij5GVF9GMjZEb3Q2PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmxvbmc8L3NwYW4+ICA8Yj5GVF9GMjZEb3Q2PC9iPjsKKzwvcHJlPgorCis8cD5BIHNpZ25lZCAyNi42IGZpeGVkLXBvaW50IHR5cGUgdXNlZCBmb3IgdmVjdG9yaWFsIHBpeGVsIGNvb3JkaW5hdGVzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRGF0YSI+RlRfRGF0YTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9EYXRhXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiogIHBvaW50ZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgIGxlbmd0aDsKKworICB9IDxiPkZUX0RhdGE8L2I+OworPC9wcmU+CisKKzxwPlJlYWQtb25seSBiaW5hcnkgZGF0YSByZXByZXNlbnRlZCBhcyBhIHBvaW50ZXIgYW5kIGEgbGVuZ3RoLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwb2ludGVyIj5wb2ludGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGRhdGEuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGVuZ3RoIj5sZW5ndGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGluIGJ5dGVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01BS0VfVEFHIj5GVF9NQUtFX1RBRzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfTUFLRV9UQUc8L2I+KCBfeDEsIF94MiwgX3gzLCBfeDQgKSBcCisgICAgICAgICAgKDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1RhZyI+RlRfVGFnPC9hPikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoICg8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+KV94MSAmbHQ7Jmx0OyAyNCApIHwgICAgIFwKKyAgICAgICAgICAgICggKDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4pX3gyICZsdDsmbHQ7IDE2ICkgfCAgICAgXAorICAgICAgICAgICAgKCAoPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPilfeDMgJmx0OyZsdDsgIDggKSB8ICAgICBcCisgICAgICAgICAgICAgICg8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+KV94NCAgICAgICAgICkKKzwvcHJlPgorCis8cD5UaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgdGhhdCBhcmUgdXNlZCB0byBsYWJlbCBUcnVlVHlwZSB0YWJsZXMgaW50byBhbiB1bnNpZ25lZCBsb25nLCB0byBiZSB1c2VkIHdpdGhpbiBGcmVlVHlwZS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBwcm9kdWNlZCB2YWx1ZXMgPGI+bXVzdDwvYj4gYmUgMzItYml0IGludGVnZXJzLiBEb24ndCByZWRlZmluZSB0aGlzIG1hY3JvLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2VuZXJpYyI+RlRfR2VuZXJpYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9HZW5lcmljXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HZW5lcmljX0ZpbmFsaXplciI+RlRfR2VuZXJpY19GaW5hbGl6ZXI8L2E+ICBmaW5hbGl6ZXI7CisKKyAgfSA8Yj5GVF9HZW5lcmljPC9iPjsKKzwvcHJlPgorCis8cD5DbGllbnQgYXBwbGljYXRpb25zIG9mdGVuIG5lZWQgdG8gYXNzb2NpYXRlIHRoZWlyIG93biBkYXRhIHRvIGEgdmFyaWV0eSBvZiBGcmVlVHlwZSBjb3JlIG9iamVjdHMuIEZvciBleGFtcGxlLCBhIHRleHQgbGF5b3V0IEFQSSBtaWdodCB3YW50IHRvIGFzc29jaWF0ZSBhIGdseXBoIGNhY2hlIHRvIGEgZ2l2ZW4gc2l6ZSBvYmplY3QuPC9wPgorPHA+U29tZSBGcmVlVHlwZSBvYmplY3QgY29udGFpbnMgYSAmbHNxdW87Z2VuZXJpYyZyc3F1bzsgZmllbGQsIG9mIHR5cGUgRlRfR2VuZXJpYywgd2hpY2ggdXNhZ2UgaXMgbGVmdCB0byBjbGllbnQgYXBwbGljYXRpb25zIGFuZCBmb250IHNlcnZlcnMuPC9wPgorPHA+SXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIGNsaWVudC1zcGVjaWZpYyBkYXRhLCBhcyB3ZWxsIGFzIHRoZSBhZGRyZXNzIG9mIGEgJmxzcXVvO2ZpbmFsaXplciZyc3F1bzsgZnVuY3Rpb24sIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGJ5IEZyZWVUeXBlIHdoZW4gdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQgKGZvciBleGFtcGxlLCB0aGUgcHJldmlvdXMgY2xpZW50IGV4YW1wbGUgd291bGQgcHV0IHRoZSBhZGRyZXNzIG9mIHRoZSBnbHlwaCBjYWNoZSBkZXN0cnVjdG9yIGluIHRoZSAmbHNxdW87ZmluYWxpemVyJnJzcXVvOyBmaWVsZCkuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRhdGEiPmRhdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIgdG8gYW55IGNsaWVudC1zcGVjaWZpZWQgZGF0YS4gVGhpcyBmaWVsZCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgdGhlIEZyZWVUeXBlIGxpYnJhcnkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmluYWxpemVyIj5maW5hbGl6ZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSAmbHNxdW87Z2VuZXJpYyBmaW5hbGl6ZXImcnNxdW87IGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLiBJZiB0aGlzIGZpZWxkIGlzIHNldCB0byBOVUxMLCBubyBjb2RlIHdpbGwgYmUgY2FsbGVkLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dlbmVyaWNfRmluYWxpemVyIj5GVF9HZW5lcmljX0ZpbmFsaXplcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiAgKCo8Yj5GVF9HZW5lcmljX0ZpbmFsaXplcjwvYj4pKDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogIG9iamVjdCk7Cis8L3ByZT4KKworPHA+RGVzY3JpYmUgYSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgdGhlICZsc3F1bztjbGllbnQmcnNxdW87IGRhdGEgb2YgYW55IEZyZWVUeXBlIG9iamVjdC4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2VuZXJpYyI+RlRfR2VuZXJpYzwvYT4gdHlwZSBmb3IgZGV0YWlscyBvZiB1c2FnZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8cD5UaGUgYWRkcmVzcyBvZiB0aGUgRnJlZVR5cGUgb2JqZWN0IHRoYXQgaXMgdW5kZXIgZmluYWxpemF0aW9uLiBJdHMgY2xpZW50IGRhdGEgaXMgYWNjZXNzZWQgdGhyb3VnaCBpdHMgJmxzcXVvO2dlbmVyaWMmcnNxdW87IGZpZWxkLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQml0bWFwIj5GVF9CaXRtYXA8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfQml0bWFwXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiAgICByb3dzOworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgd2lkdGg7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgICAgICAgICAgcGl0Y2g7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICBidWZmZXI7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2hvcnQ8L3NwYW4+ICBudW1fZ3JheXM7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4gICBwaXhlbF9tb2RlOworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+ICAgcGFsZXR0ZV9tb2RlOworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgIHBhbGV0dGU7CisKKyAgfSA8Yj5GVF9CaXRtYXA8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBiaXRtYXAgb3IgcGl4bWFwIHRvIHRoZSByYXN0ZXIuIE5vdGUgdGhhdCB3ZSBub3cgbWFuYWdlIHBpeG1hcHMgb2YgdmFyaW91cyBkZXB0aHMgdGhyb3VnaCB0aGUgJmxzcXVvO3BpeGVsX21vZGUmcnNxdW87IGZpZWxkLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyb3dzIj5yb3dzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBiaXRtYXAgcm93cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ3aWR0aCI+d2lkdGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIHBpeGVscyBpbiBiaXRtYXAgcm93LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBpdGNoIj5waXRjaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwaXRjaCdzIGFic29sdXRlIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGFrZW4gYnkgb25lIGJpdG1hcCByb3csIGluY2x1ZGluZyBwYWRkaW5nLiBIb3dldmVyLCB0aGUgcGl0Y2ggaXMgcG9zaXRpdmUgd2hlbiB0aGUgYml0bWFwIGhhcyBhICZsc3F1bztkb3duJnJzcXVvOyBmbG93LCBhbmQgbmVnYXRpdmUgd2hlbiBpdCBoYXMgYW4gJmxzcXVvO3VwJnJzcXVvOyBmbG93LiBJbiBhbGwgY2FzZXMsIHRoZSBwaXRjaCBpcyBhbiBvZmZzZXQgdG8gYWRkIHRvIGEgYml0bWFwIHBvaW50ZXIgaW4gb3JkZXIgdG8gZ28gZG93biBvbmUgcm93LjwvcD4KKzxwPk5vdGUgdGhhdCAmbHNxdW87cGFkZGluZyZyc3F1bzsgbWVhbnMgdGhlIGFsaWdubWVudCBvZiBhIGJpdG1hcCB0byBhIGJ5dGUgYm9yZGVyLCBhbmQgRnJlZVR5cGUgZnVuY3Rpb25zIG5vcm1hbGx5IGFsaWduIHRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBpbnRlZ2VyIHZhbHVlLjwvcD4KKzxwPkZvciB0aGUgQi9XIHJhc3Rlcml6ZXIsICZsc3F1bztwaXRjaCZyc3F1bzsgaXMgYWx3YXlzIGFuIGV2ZW4gbnVtYmVyLjwvcD4KKzxwPlRvIGNoYW5nZSB0aGUgcGl0Y2ggb2YgYSBiaXRtYXAgKHNheSwgdG8gbWFrZSBpdCBhIG11bHRpcGxlIG9mIDQpLCB1c2UgPGEgaHJlZj0iZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sI0ZUX0JpdG1hcF9Db252ZXJ0Ij5GVF9CaXRtYXBfQ29udmVydDwvYT4uIEFsdGVybmF0aXZlbHksIHlvdSBtaWdodCB1c2UgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGRpcmVjdGx5IHJlbmRlciB0byB0aGUgYXBwbGljYXRpb24ncyBzdXJmYWNlOyBzZWUgdGhlIGZpbGUgJmxzcXVvO2V4YW1wbGUyLmNwcCZyc3F1bzsgaW4gdGhlIHR1dG9yaWFsIGZvciBhIGRlbW9uc3RyYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYnVmZmVyIj5idWZmZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBidWZmZXIuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGFsaWduZWQgb24gMzItYml0IGJvdW5kYXJpZXMgaW4gbW9zdCBjYXNlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJudW1fZ3JheXMiPm51bV9ncmF5czwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmllbGQgaXMgb25seSB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUElYRUxfTU9ERV9HUkFZPC9hPjsgaXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBncmF5IGxldmVscyB1c2VkIGluIHRoZSBiaXRtYXAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icGl4ZWxfbW9kZSI+cGl4ZWxfbW9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwaXhlbCBtb2RlLCBpLmUuLCBob3cgcGl4ZWwgYml0cyBhcmUgc3RvcmVkLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUGl4ZWxfTW9kZTwvYT4gZm9yIHBvc3NpYmxlIHZhbHVlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwYWxldHRlX21vZGUiPnBhbGV0dGVfbW9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmllbGQgaXMgaW50ZW5kZWQgZm9yIHBhbGV0dGVkIHBpeGVsIG1vZGVzOyBpdCBpbmRpY2F0ZXMgaG93IHRoZSBwYWxldHRlIGlzIHN0b3JlZC4gTm90IHVzZWQgY3VycmVudGx5LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhbGV0dGUiPnBhbGV0dGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBwYWxldHRlOyB0aGlzIGZpZWxkIGlzIGludGVuZGVkIGZvciBwYWxldHRlZCBwaXhlbCBtb2Rlcy4gTm90IHVzZWQgY3VycmVudGx5LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1BpeGVsX01vZGUiPkZUX1BpeGVsX01vZGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX1BpeGVsX01vZGVfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QSVhFTF9NT0RFX05PTkUiPkZUX1BJWEVMX01PREVfTk9ORTwvYT4gPSAwLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BJWEVMX01PREVfTU9OTyI+RlRfUElYRUxfTU9ERV9NT05PPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QSVhFTF9NT0RFX0dSQVkiPkZUX1BJWEVMX01PREVfR1JBWTwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9HUkFZMiI+RlRfUElYRUxfTU9ERV9HUkFZMjwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9HUkFZNCI+RlRfUElYRUxfTU9ERV9HUkFZNDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9MQ0QiPkZUX1BJWEVMX01PREVfTENEPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QSVhFTF9NT0RFX0xDRF9WIj5GVF9QSVhFTF9NT0RFX0xDRF9WPC9hPiwKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QSVhFTF9NT0RFX0JHUkEiPkZUX1BJWEVMX01PREVfQkdSQTwvYT4sCisKKyAgICBGVF9QSVhFTF9NT0RFX01BWCAgICAgIC8qIGRvIG5vdCByZW1vdmUgKi8KKworICB9IDxiPkZUX1BpeGVsX01vZGU8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYDxiPkZUX1BpeGVsX01vZGU8L2I+JyAqLworICAvKiB2YWx1ZXMgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfcGl4ZWxfbW9kZV9ub25lICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9OT05FIj5GVF9QSVhFTF9NT0RFX05PTkU8L2E+CisjZGVmaW5lIGZ0X3BpeGVsX21vZGVfbW9ubyAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BJWEVMX01PREVfTU9OTyI+RlRfUElYRUxfTU9ERV9NT05PPC9hPgorI2RlZmluZSBmdF9waXhlbF9tb2RlX2dyYXlzICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QSVhFTF9NT0RFX0dSQVkiPkZUX1BJWEVMX01PREVfR1JBWTwvYT4KKyNkZWZpbmUgZnRfcGl4ZWxfbW9kZV9wYWwyICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9HUkFZMiI+RlRfUElYRUxfTU9ERV9HUkFZMjwvYT4KKyNkZWZpbmUgZnRfcGl4ZWxfbW9kZV9wYWw0ICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUElYRUxfTU9ERV9HUkFZNCI+RlRfUElYRUxfTU9ERV9HUkFZNDwvYT4KKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZvcm1hdCBvZiBwaXhlbHMgaW4gYSBnaXZlbiBiaXRtYXAuIE5vdGUgdGhhdCBhZGRpdGlvbmFsIGZvcm1hdHMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1BJWEVMX01PREVfTk9ORSI+RlRfUElYRUxfTU9ERV9OT05FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmFsdWUmbmJzcDswIGlzIHJlc2VydmVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1BJWEVMX01PREVfTU9OTyI+RlRfUElYRUxfTU9ERV9NT05PPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBtb25vY2hyb21lIGJpdG1hcCwgdXNpbmcgMSZuYnNwO2JpdCBwZXIgcGl4ZWwuIE5vdGUgdGhhdCBwaXhlbHMgYXJlIHN0b3JlZCBpbiBtb3N0LXNpZ25pZmljYW50IG9yZGVyIChNU0IpLCB3aGljaCBtZWFucyB0aGF0IHRoZSBsZWZ0LW1vc3QgcGl4ZWwgaW4gYSBieXRlIGhhcyB2YWx1ZSAxMjguPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUElYRUxfTU9ERV9HUkFZIj5GVF9QSVhFTF9NT0RFX0dSQVk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbiA4LWJpdCBiaXRtYXAsIGdlbmVyYWxseSB1c2VkIHRvIHJlcHJlc2VudCBhbnRpLWFsaWFzZWQgZ2x5cGggaW1hZ2VzLiBFYWNoIHBpeGVsIGlzIHN0b3JlZCBpbiBvbmUgYnl0ZS4gTm90ZSB0aGF0IHRoZSBudW1iZXIgb2YgJmxzcXVvO2dyYXkmcnNxdW87IGxldmVscyBpcyBzdG9yZWQgaW4gdGhlICZsc3F1bztudW1fZ3JheXMmcnNxdW87IGZpZWxkIG9mIHRoZSA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gc3RydWN0dXJlIChpdCBnZW5lcmFsbHkgaXMgMjU2KS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9QSVhFTF9NT0RFX0dSQVkyIj5GVF9QSVhFTF9NT0RFX0dSQVkyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSAyLWJpdCBwZXIgcGl4ZWwgYml0bWFwLCB1c2VkIHRvIHJlcHJlc2VudCBlbWJlZGRlZCBhbnRpLWFsaWFzZWQgYml0bWFwcyBpbiBmb250IGZpbGVzIGFjY29yZGluZyB0byB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4gV2UgaGF2ZW4ndCBmb3VuZCBhIHNpbmdsZSBmb250IHVzaW5nIHRoaXMgZm9ybWF0LCBob3dldmVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1BJWEVMX01PREVfR1JBWTQiPkZUX1BJWEVMX01PREVfR1JBWTQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIDQtYml0IHBlciBwaXhlbCBiaXRtYXAsIHJlcHJlc2VudGluZyBlbWJlZGRlZCBhbnRpLWFsaWFzZWQgYml0bWFwcyBpbiBmb250IGZpbGVzIGFjY29yZGluZyB0byB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4gV2UgaGF2ZW4ndCBmb3VuZCBhIHNpbmdsZSBmb250IHVzaW5nIHRoaXMgZm9ybWF0LCBob3dldmVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1BJWEVMX01PREVfTENEIj5GVF9QSVhFTF9NT0RFX0xDRDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIDgtYml0IGJpdG1hcCwgcmVwcmVzZW50aW5nIFJHQiBvciBCR1IgZGVjaW1hdGVkIGdseXBoIGltYWdlcyB1c2VkIGZvciBkaXNwbGF5IG9uIExDRCBkaXNwbGF5czsgdGhlIGJpdG1hcCBpcyB0aHJlZSB0aW1lcyB3aWRlciB0aGFuIHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZS4gU2VlIGFsc28gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRDwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUElYRUxfTU9ERV9MQ0RfViI+RlRfUElYRUxfTU9ERV9MQ0RfVjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIDgtYml0IGJpdG1hcCwgcmVwcmVzZW50aW5nIFJHQiBvciBCR1IgZGVjaW1hdGVkIGdseXBoIGltYWdlcyB1c2VkIGZvciBkaXNwbGF5IG9uIHJvdGF0ZWQgTENEIGRpc3BsYXlzOyB0aGUgYml0bWFwIGlzIHRocmVlIHRpbWVzIHRhbGxlciB0aGFuIHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZS4gU2VlIGFsc28gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRF9WPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9QSVhFTF9NT0RFX0JHUkEiPkZUX1BJWEVMX01PREVfQkdSQTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIGltYWdlIHdpdGggZm91ciA4LWJpdCBjaGFubmVscyBwZXIgcGl4ZWwsIHJlcHJlc2VudGluZyBhIGNvbG9yIGltYWdlIChzdWNoIGFzIGVtb3RpY29ucykgd2l0aCBhbHBoYSBjaGFubmVsLiBGb3IgZWFjaCBwaXhlbCwgdGhlIGZvcm1hdCBpcyBCR1JBLCB3aGljaCBtZWFucywgdGhlIGJsdWUgY2hhbm5lbCBjb21lcyBmaXJzdCBpbiBtZW1vcnkuIFRoZSBjb2xvciBjaGFubmVscyBhcmUgcHJlLW11bHRpcGxpZWQgYW5kIGluIHRoZSBzUkdCIGNvbG9yc3BhY2UuIEZvciBleGFtcGxlLCBmdWxsIHJlZCBhdCBoYWxmLXRyYW5zbHVjZW50IG9wYWNpdHkgd2lsbCBiZSByZXByZXNlbnRlZCBhcyAmbHNxdW87MDAsMDAsODAsODAmcnNxdW87LCBub3QgJmxzcXVvOzAwLDAwLEZGLDgwJnJzcXVvOy4gU2VlIGFsc28gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfQ09MT1I8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dseXBoX0Zvcm1hdCI+RlRfR2x5cGhfRm9ybWF0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9HbHlwaF9Gb3JtYXRfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JTUFHRV9UQUciPkZUX0lNQUdFX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dMWVBIX0ZPUk1BVF9OT05FIj5GVF9HTFlQSF9GT1JNQVRfTk9ORTwvYT4sIDAsIDAsIDAsIDAgKSwKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0lNQUdFX1RBRyI+RlRfSU1BR0VfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSI+RlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTwvYT4sICdjJywgJ28nLCAnbScsICdwJyApLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0lNQUdFX1RBRyI+RlRfSU1BR0VfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR0xZUEhfRk9STUFUX0JJVE1BUCI+RlRfR0xZUEhfRk9STUFUX0JJVE1BUDwvYT4sICAgICdiJywgJ2knLCAndCcsICdzJyApLAorICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0lNQUdFX1RBRyI+RlRfSU1BR0VfVEFHPC9hPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR0xZUEhfRk9STUFUX09VVExJTkUiPkZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FPC9hPiwgICAnbycsICd1JywgJ3QnLCAnbCcgKSwKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JTUFHRV9UQUciPkZUX0lNQUdFX1RBRzwvYT4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dMWVBIX0ZPUk1BVF9QTE9UVEVSIj5GVF9HTFlQSF9GT1JNQVRfUExPVFRFUjwvYT4sICAgJ3AnLCAnbCcsICdvJywgJ3QnICkKKworICB9IDxiPkZUX0dseXBoX0Zvcm1hdDwvYj47CisKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBgPGI+RlRfR2x5cGhfRm9ybWF0PC9iPicgdmFsdWVzIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfZ2x5cGhfZm9ybWF0X25vbmUgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR0xZUEhfRk9STUFUX05PTkUiPkZUX0dMWVBIX0ZPUk1BVF9OT05FPC9hPgorI2RlZmluZSBmdF9nbHlwaF9mb3JtYXRfY29tcG9zaXRlICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFIj5GVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFPC9hPgorI2RlZmluZSBmdF9nbHlwaF9mb3JtYXRfYml0bWFwICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HTFlQSF9GT1JNQVRfQklUTUFQIj5GVF9HTFlQSF9GT1JNQVRfQklUTUFQPC9hPgorI2RlZmluZSBmdF9nbHlwaF9mb3JtYXRfb3V0bGluZSAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HTFlQSF9GT1JNQVRfT1VUTElORSI+RlRfR0xZUEhfRk9STUFUX09VVExJTkU8L2E+CisjZGVmaW5lIGZ0X2dseXBoX2Zvcm1hdF9wbG90dGVyICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dMWVBIX0ZPUk1BVF9QTE9UVEVSIj5GVF9HTFlQSF9GT1JNQVRfUExPVFRFUjwvYT4KKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZvcm1hdCBvZiBhIGdpdmVuIGdseXBoIGltYWdlLiBOb3RlIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIEZyZWVUeXBlIG9ubHkgc3VwcG9ydHMgdHdvIGltYWdlIGZvcm1hdHMsIGV2ZW4gdGhvdWdoIGZ1dHVyZSBmb250IGRyaXZlcnMgd2lsbCBiZSBhYmxlIHRvIHJlZ2lzdGVyIHRoZWlyIG93biBmb3JtYXQuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dMWVBIX0ZPUk1BVF9OT05FIj5GVF9HTFlQSF9GT1JNQVRfTk9ORTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2YWx1ZSZuYnNwOzAgaXMgcmVzZXJ2ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSI+RlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbWFnZSBpcyBhIGNvbXBvc2l0ZSBvZiBzZXZlcmFsIG90aGVyIGltYWdlcy4gVGhpcyBmb3JtYXQgaXMgPGk+b25seTwvaT4gdXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX1JFQ1VSU0U8L2E+LCBhbmQgaXMgdXNlZCB0byByZXBvcnQgY29tcG91bmQgZ2x5cGhzIChsaWtlIGFjY2VudGVkIGNoYXJhY3RlcnMpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAiPkZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggaW1hZ2UgaXMgYSBiaXRtYXAsIGFuZCBjYW4gYmUgZGVzY3JpYmVkIGFzIGFuIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JpdG1hcCI+RlRfQml0bWFwPC9hPi4gWW91IGdlbmVyYWxseSBuZWVkIHRvIGFjY2VzcyB0aGUgJmxzcXVvO2JpdG1hcCZyc3F1bzsgZmllbGQgb2YgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdFJlYyI+RlRfR2x5cGhTbG90UmVjPC9hPiBzdHJ1Y3R1cmUgdG8gcmVhZCBpdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9HTFlQSF9GT1JNQVRfT1VUTElORSI+RlRfR0xZUEhfRk9STUFUX09VVExJTkU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggaW1hZ2UgaXMgYSB2ZWN0b3JpYWwgb3V0bGluZSBtYWRlIG9mIGxpbmUgc2VnbWVudHMgYW5kIELDqXppZXIgYXJjczsgaXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhbiA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT47IHlvdSBnZW5lcmFsbHkgd2FudCB0byBhY2Nlc3MgdGhlICZsc3F1bztvdXRsaW5lJnJzcXVvOyBmaWVsZCBvZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90UmVjIj5GVF9HbHlwaFNsb3RSZWM8L2E+IHN0cnVjdHVyZSB0byByZWFkIGl0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dMWVBIX0ZPUk1BVF9QTE9UVEVSIj5GVF9HTFlQSF9GT1JNQVRfUExPVFRFUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbWFnZSBpcyBhIHZlY3RvcmlhbCBwYXRoIHdpdGggbm8gaW5zaWRlIGFuZCBvdXRzaWRlIGNvbnRvdXJzLiBTb21lIFR5cGUmbmJzcDsxIGZvbnRzLCBsaWtlIHRob3NlIGluIHRoZSBIZXJzaGV5IGZhbWlseSwgY29udGFpbiBnbHlwaHMgaW4gdGhpcyBmb3JtYXQuIFRoZXNlIGFyZSBkZXNjcmliZWQgYXMgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+LCBidXQgRnJlZVR5cGUgaXNuJ3QgY3VycmVudGx5IGNhcGFibGUgb2YgcmVuZGVyaW5nIHRoZW0gY29ycmVjdGx5LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0lNQUdFX1RBRyI+RlRfSU1BR0VfVEFHPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorI2lmbmRlZiA8Yj5GVF9JTUFHRV9UQUc8L2I+CisjZGVmaW5lIDxiPkZUX0lNQUdFX1RBRzwvYj4oIHZhbHVlLCBfeDEsIF94MiwgX3gzLCBfeDQgKSAgXAorICAgICAgICAgIHZhbHVlID0gKCAoICg8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPilfeDEgJmx0OyZsdDsgMjQgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgKCAoPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4pX3gyICZsdDsmbHQ7IDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICggKDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmxvbmc8L3NwYW4+KV94MyAmbHQ7Jmx0OyA4ICApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICg8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPilfeDQgICAgICAgICApCisjZW5kaWYgLyogPGI+RlRfSU1BR0VfVEFHPC9iPiAqLworPC9wcmU+CisKKzxwPlRoaXMgbWFjcm8gY29udmVydHMgZm91ci1sZXR0ZXIgdGFncyB0byBhbiB1bnNpZ25lZCBsb25nIHR5cGUuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5TaW5jZSBtYW55IDE2LWJpdCBjb21waWxlcnMgZG9uJ3QgbGlrZSAzMi1iaXQgZW51bWVyYXRpb25zLCB5b3Ugc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZSB0aGlzOjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICAjZGVmaW5lIEZUX0lNQUdFX1RBRyggdmFsdWUsIF94MSwgX3gyLCBfeDMsIF94NCApICB2YWx1ZSAgICAgICAgIAorPC9wcmU+Cis8cD50byBnZXQgYSBzaW1wbGUgZW51bWVyYXRpb24gd2l0aG91dCBhc3NpZ25pbmcgc3BlY2lhbCBudW1iZXJzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJkZl9mb250cy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1iZGZfZm9udHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDdiYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1iZGZfZm9udHMuaHRtbApAQCAtMCwwICsxLDI4MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkJERiBhbmQgUENGIEZpbGVzPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0JERl9Qcm9wZXJ0eVR5cGUiPkJERl9Qcm9wZXJ0eVR5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0JERl9Qcm9wZXJ0eVJlYyI+QkRGX1Byb3BlcnR5UmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQkRGX1Byb3BlcnR5Ij5GVF9HZXRfQkRGX1Byb3BlcnR5PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0JERl9Qcm9wZXJ0eSI+QkRGX1Byb3BlcnR5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQkRGX0NoYXJzZXRfSUQiPkZUX0dldF9CREZfQ2hhcnNldF9JRDwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHNwZWNpZmljIHRvIEJERiBhbmQgUENGIGZvbnRzLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkJERl9Qcm9wZXJ0eVR5cGUiPkJERl9Qcm9wZXJ0eVR5cGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9CREZfSCAoZnRiZGYuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiAgQkRGX1Byb3BlcnR5VHlwZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUFJPUEVSVFlfVFlQRV9OT05FIj5CREZfUFJPUEVSVFlfVFlQRV9OT05FPC9hPiAgICAgPSAwLAorICAgIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUFJPUEVSVFlfVFlQRV9BVE9NIj5CREZfUFJPUEVSVFlfVFlQRV9BVE9NPC9hPiAgICAgPSAxLAorICAgIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSIj5CREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSPC9hPiAgPSAyLAorICAgIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTCI+QkRGX1BST1BFUlRZX1RZUEVfQ0FSRElOQUw8L2E+ID0gMworCisgIH0gPGI+QkRGX1Byb3BlcnR5VHlwZTwvYj47Cis8L3ByZT4KKworPHA+QSBsaXN0IG9mIEJERiBwcm9wZXJ0eSB0eXBlcy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iQkRGX1BST1BFUlRZX1RZUEVfTk9ORSI+QkRGX1BST1BFUlRZX1RZUEVfTk9ORTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbHVlJm5ic3A7MCBpcyB1c2VkIHRvIGluZGljYXRlIGEgbWlzc2luZyBwcm9wZXJ0eS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJCREZfUFJPUEVSVFlfVFlQRV9BVE9NIj5CREZfUFJPUEVSVFlfVFlQRV9BVE9NPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UHJvcGVydHkgaXMgYSBzdHJpbmcgYXRvbS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJCREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSIj5CREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UHJvcGVydHkgaXMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iQkRGX1BST1BFUlRZX1RZUEVfQ0FSRElOQUwiPkJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UHJvcGVydHkgaXMgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJCREZfUHJvcGVydHkiPkJERl9Qcm9wZXJ0eTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JERl9IIChmdGJkZi5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gQkRGX1Byb3BlcnR5UmVjXyogIDxiPkJERl9Qcm9wZXJ0eTwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSA8YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5UmVjIj5CREZfUHJvcGVydHlSZWM8L2E+IHN0cnVjdHVyZSB0byBtb2RlbCBhIGdpdmVuIEJERi9QQ0YgcHJvcGVydHkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJCREZfUHJvcGVydHlSZWMiPkJERl9Qcm9wZXJ0eVJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JERl9IIChmdGJkZi5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEJERl9Qcm9wZXJ0eVJlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUHJvcGVydHlUeXBlIj5CREZfUHJvcGVydHlUeXBlPC9hPiAgdHlwZTsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5pb248L3NwYW4+IHsKKyAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgICAgYXRvbTsKKyAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludDMyIj5GVF9JbnQzMjwvYT4gICAgICAgIGludGVnZXI7CisgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50MzIiPkZUX1VJbnQzMjwvYT4gICAgICAgY2FyZGluYWw7CisKKyAgICB9IHU7CisKKyAgfSA8Yj5CREZfUHJvcGVydHlSZWM8L2I+OworPC9wcmU+CisKKzxwPlRoaXMgc3RydWN0dXJlIG1vZGVscyBhIGdpdmVuIEJERi9QQ0YgcHJvcGVydHkuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InR5cGUiPnR5cGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcHJvcGVydHkgdHlwZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1LmF0b20iPnUuYXRvbTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhdG9tIHN0cmluZywgaWYgdHlwZSBpcyA8YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5VHlwZSI+QkRGX1BST1BFUlRZX1RZUEVfQVRPTTwvYT4uIE1heSBiZSBOVUxMLCBpbmRpY2F0aW5nIGFuIGVtcHR5IHN0cmluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1LmludGVnZXIiPnUuaW50ZWdlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc2lnbmVkIGludGVnZXIsIGlmIHR5cGUgaXMgPGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sI0JERl9Qcm9wZXJ0eVR5cGUiPkJERl9QUk9QRVJUWV9UWVBFX0lOVEVHRVI8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InUuY2FyZGluYWwiPnUuY2FyZGluYWw8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbiB1bnNpZ25lZCBpbnRlZ2VyLCBpZiB0eXBlIGlzIDxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUHJvcGVydHlUeXBlIj5CREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTDwvYT4uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X0JERl9DaGFyc2V0X0lEIj5GVF9HZXRfQkRGX0NoYXJzZXRfSUQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9CREZfSCAoZnRiZGYuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X0JERl9DaGFyc2V0X0lEPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogICphY2hhcnNldF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogICphY2hhcnNldF9yZWdpc3RyeSApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIGEgQkRGIGZvbnQgY2hhcmFjdGVyIHNldCBpZGVudGl0eSwgYWNjb3JkaW5nIHRvIHRoZSBCREYgc3BlY2lmaWNhdGlvbi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhY2hhcnNldF9lbmNvZGluZyI+YWNoYXJzZXRfZW5jb2Rpbmc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5DaGFyc2V0IGVuY29kaW5nLCBhcyBhIEMmbmJzcDtzdHJpbmcsIG93bmVkIGJ5IHRoZSBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFjaGFyc2V0X3JlZ2lzdHJ5Ij5hY2hhcnNldF9yZWdpc3RyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNoYXJzZXQgcmVnaXN0cnksIGFzIGEgQyZuYnNwO3N0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIEJERiBmYWNlcywgcmV0dXJuaW5nIGFuIGVycm9yIG90aGVyd2lzZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9CREZfUHJvcGVydHkiPkZUX0dldF9CREZfUHJvcGVydHk8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9CREZfSCAoZnRiZGYuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X0JERl9Qcm9wZXJ0eTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogICAgICAgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5UmVjIj5CREZfUHJvcGVydHlSZWM8L2E+ICAqYXByb3BlcnR5ICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgYSBCREYgcHJvcGVydHkgZnJvbSBhIEJERiBvciBQQ0YgZm9udCBmaWxlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuYW1lIj5uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHByb3BlcnR5IG5hbWUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhcHJvcGVydHkiPmFwcm9wZXJ0eTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwcm9wZXJ0eS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIEJERiA8aT5hbmQ8L2k+IFBDRiBmb250cy4gSXQgcmV0dXJucyBhbiBlcnJvciBvdGhlcndpc2UuIEl0IGFsc28gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluIHRoZSBmb250LjwvcD4KKzxwPkEgJmxzcXVvO3Byb3BlcnR5JnJzcXVvOyBpcyBhIGVpdGhlciBrZXktdmFsdWUgcGFpciB3aXRoaW4gdGhlIFNUQVJUUFJPUEVSVElFUyAuLi4gRU5EUFJPUEVSVElFUyBibG9jayBvZiBhIEJERiBmb250IG9yIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgJmxzcXVvO2luZm8tJmd0O3Byb3BzJnJzcXVvOyBhcnJheSB3aXRoaW4gYSAmbHNxdW87Rm9udFJlYyZyc3F1bzsgc3RydWN0dXJlIG9mIGEgUENGIGZvbnQuPC9wPgorPHA+SW50ZWdlciBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgc3RvcmVkIGFzICZsc3F1bztzaWduZWQmcnNxdW87IHdpdGhpbiBQQ0YgZm9udHM7IGNvbnNlcXVlbnRseSwgPGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sI0JERl9Qcm9wZXJ0eVR5cGUiPkJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMPC9hPiBpcyBhIHBvc3NpYmxlIHJldHVybiB2YWx1ZSBmb3IgQkRGIGZvbnRzIG9ubHkuPC9wPgorPHA+SW4gY2FzZSBvZiBlcnJvciwgJmxzcXVvO2Fwcm9wZXJ0eS0mZ3Q7dHlwZSZyc3F1bzsgaXMgYWx3YXlzIHNldCB0byA8YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5VHlwZSI+QkRGX1BST1BFUlRZX1RZUEVfTk9ORTwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItYml0bWFwX2hhbmRsaW5nLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjVlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sCkBAIC0wLDAgKzEsMzIzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+Qml0bWFwIEhhbmRsaW5nPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0JpdG1hcF9Jbml0Ij5GVF9CaXRtYXBfSW5pdDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQml0bWFwX0VtYm9sZGVuIj5GVF9CaXRtYXBfRW1ib2xkZW48L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dseXBoU2xvdF9Pd25fQml0bWFwIj5GVF9HbHlwaFNsb3RfT3duX0JpdG1hcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9CaXRtYXBfQ29weSI+RlRfQml0bWFwX0NvcHk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0JpdG1hcF9Db252ZXJ0Ij5GVF9CaXRtYXBfQ29udmVydDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQml0bWFwX0RvbmUiPkZUX0JpdG1hcF9Eb25lPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQml0bWFwIj5GVF9CaXRtYXA8L2E+IG9iamVjdHMuIE5vdGUgdGhhdCBub25lIG9mIHRoZSBmdW5jdGlvbnMgY2hhbmdlcyB0aGUgYml0bWFwJ3MgJmxzcXVvO2Zsb3cmcnNxdW87IChhcyBpbmRpY2F0ZWQgYnkgdGhlIHNpZ24gb2YgdGhlICZsc3F1bztwaXRjaCZyc3F1bzsgZmllbGQgaW4gJmxzcXVvO0ZUX0JpdG1hcCZyc3F1bzspLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JpdG1hcF9Jbml0Ij5GVF9CaXRtYXBfSW5pdDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JJVE1BUF9IIChmdGJpdG1hcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX0JpdG1hcF9Jbml0PC9iPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQml0bWFwIj5GVF9CaXRtYXA8L2E+ICAqYWJpdG1hcCApOworCisKKyAgLyogZGVwcmVjYXRlZCAqLworICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIEZUX0JpdG1hcF9OZXcoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JpdG1hcCI+RlRfQml0bWFwPC9hPiAgKmFiaXRtYXAgKTsKKzwvcHJlPgorCis8cD5Jbml0aWFsaXplIGEgcG9pbnRlciB0byBhbiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gc3RydWN0dXJlLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFiaXRtYXAiPmFiaXRtYXA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBzdHJ1Y3R1cmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+QSBkZXByZWNhdGVkIG5hbWUgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uIGlzICZsc3F1bztGVF9CaXRtYXBfTmV3JnJzcXVvOy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JpdG1hcF9Db3B5Ij5GVF9CaXRtYXBfQ29weTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JJVE1BUF9IIChmdGJpdG1hcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9CaXRtYXBfQ29weTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gICAgICAgICp0YXJnZXQpOworPC9wcmU+CisKKzxwPkNvcHkgYSBiaXRtYXAgaW50byBhbm90aGVyIG9uZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzb3VyY2UiPnNvdXJjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFyZ2V0Ij50YXJnZXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGJpdG1hcC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQml0bWFwX0VtYm9sZGVuIj5GVF9CaXRtYXBfRW1ib2xkZW48L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9CSVRNQVBfSCAoZnRiaXRtYXAuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfQml0bWFwX0VtYm9sZGVuPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQml0bWFwIj5GVF9CaXRtYXA8L2E+KiAgYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgIHhTdHJlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gICAgICB5U3RyZW5ndGggKTsKKzwvcHJlPgorCis8cD5FbWJvbGRlbiBhIGJpdG1hcC4gVGhlIG5ldyBiaXRtYXAgd2lsbCBiZSBhYm91dCAmbHNxdW87eFN0cmVuZ3RoJnJzcXVvOyBwaXhlbHMgd2lkZXIgYW5kICZsc3F1bzt5U3RyZW5ndGgmcnNxdW87IHBpeGVscyBoaWdoZXIuIFRoZSBsZWZ0IGFuZCBib3R0b20gYm9yZGVycyBhcmUga2VwdCB1bmNoYW5nZWQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieFN0cmVuZ3RoIj54U3RyZW5ndGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Ib3cgc3Ryb25nIHRoZSBnbHlwaCBpcyBlbWJvbGRlbmVkIGhvcml6b250YWxseS4gRXhwcmVzc2VkIGluIDI2LjYgcGl4ZWwgZm9ybWF0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InlTdHJlbmd0aCI+eVN0cmVuZ3RoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SG93IHN0cm9uZyB0aGUgZ2x5cGggaXMgZW1ib2xkZW5lZCB2ZXJ0aWNhbGx5LiBFeHByZXNzZWQgaW4gMjYuNiBwaXhlbCBmb3JtYXQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJpdG1hcCI+Yml0bWFwPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBiaXRtYXAuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJlc3RyaWN0cyAmbHNxdW87eFN0cmVuZ3RoJnJzcXVvOyB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8mbmJzcDs4IGlmIGJpdG1hcCBpcyBvZiBwaXhlbF9tb2RlIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfTU9OTzwvYT4uPC9wPgorPHA+SWYgeW91IHdhbnQgdG8gZW1ib2xkZW4gdGhlIGJpdG1hcCBvd25lZCBieSBhIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdFJlYyI+RlRfR2x5cGhTbG90UmVjPC9hPiwgeW91IHNob3VsZCBjYWxsIDxhIGhyZWY9ImZ0Mi1iaXRtYXBfaGFuZGxpbmcuaHRtbCNGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCI+RlRfR2x5cGhTbG90X093bl9CaXRtYXA8L2E+IG9uIHRoZSBzbG90IGZpcnN0LjwvcD4KKzxwPkJpdG1hcHMgaW4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUElYRUxfTU9ERV9HUkFZMjwvYT4gYW5kIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfR1JBWTwvYT5AIGZvcm1hdCBhcmUgY29udmVydGVkIHRvIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfR1JBWTwvYT4gZm9ybWF0IChpLmUuLCA4YnBwKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JpdG1hcF9Db252ZXJ0Ij5GVF9CaXRtYXBfQ29udmVydDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JJVE1BUF9IIChmdGJpdG1hcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9CaXRtYXBfQ29udmVydDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT4gICAgICAgICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgICAgICBhbGlnbm1lbnQgKTsKKzwvcHJlPgorCis8cD5Db252ZXJ0IGEgYml0bWFwIG9iamVjdCB3aXRoIGRlcHRoIDFicHAsIDJicHAsIDRicHAsIDhicHAgb3IgMzJicHAgdG8gYSBiaXRtYXAgb2JqZWN0IHdpdGggZGVwdGggOGJwcCwgbWFraW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBsaW5lIChhLmsuYS4gdGhlICZsc3F1bztwaXRjaCZyc3F1bzspIGEgbXVsdGlwbGUgb2YgJmxzcXVvO2FsaWdubWVudCZyc3F1bzsuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic291cmNlIj5zb3VyY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIGJpdG1hcC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbGlnbm1lbnQiPmFsaWdubWVudDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwaXRjaCBvZiB0aGUgYml0bWFwIGlzIGEgbXVsdGlwbGUgb2YgdGhpcyBwYXJhbWV0ZXIuIENvbW1vbiB2YWx1ZXMgYXJlIDEsIDIsIG9yIDQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0YXJnZXQiPnRhcmdldDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB0YXJnZXQgYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JdCBpcyBwb3NzaWJsZSB0byBjYWxsIDxhIGhyZWY9ImZ0Mi1iaXRtYXBfaGFuZGxpbmcuaHRtbCNGVF9CaXRtYXBfQ29udmVydCI+RlRfQml0bWFwX0NvbnZlcnQ8L2E+IG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgY2FsbGluZyA8YSBocmVmPSJmdDItYml0bWFwX2hhbmRsaW5nLmh0bWwjRlRfQml0bWFwX0RvbmUiPkZUX0JpdG1hcF9Eb25lPC9hPiAodGhlIG1lbW9yeSBpcyBzaW1wbHkgcmVhbGxvY2F0ZWQpLjwvcD4KKzxwPlVzZSA8YSBocmVmPSJmdDItYml0bWFwX2hhbmRsaW5nLmh0bWwjRlRfQml0bWFwX0RvbmUiPkZUX0JpdG1hcF9Eb25lPC9hPiB0byBmaW5hbGx5IHJlbW92ZSB0aGUgYml0bWFwIG9iamVjdC48L3A+Cis8cD5UaGUgJmxzcXVvO2xpYnJhcnkmcnNxdW87IGFyZ3VtZW50IGlzIHRha2VuIHRvIGhhdmUgYWNjZXNzIHRvIEZyZWVUeXBlJ3MgbWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9ucy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dseXBoU2xvdF9Pd25fQml0bWFwIj5GVF9HbHlwaFNsb3RfT3duX0JpdG1hcDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JJVE1BUF9IIChmdGJpdG1hcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HbHlwaFNsb3RfT3duX0JpdG1hcDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdCI+RlRfR2x5cGhTbG90PC9hPiAgc2xvdCApOworPC9wcmU+CisKKzxwPk1ha2Ugc3VyZSB0aGF0IGEgZ2x5cGggc2xvdCBvd25zICZsc3F1bztzbG90LSZndDtiaXRtYXAmcnNxdW87LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNsb3QiPnNsb3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggc2xvdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgaHJlZj0iZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sI0ZUX0JpdG1hcF9FbWJvbGRlbiI+RlRfQml0bWFwX0VtYm9sZGVuPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JpdG1hcF9Eb25lIj5GVF9CaXRtYXBfRG9uZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0JJVE1BUF9IIChmdGJpdG1hcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9CaXRtYXBfRG9uZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQml0bWFwIj5GVF9CaXRtYXA8L2E+ICAqYml0bWFwICk7Cis8L3ByZT4KKworPHA+RGVzdHJveSBhIGJpdG1hcCBvYmplY3QgaW5pdGlhbGl6ZWQgd2l0aCA8YSBocmVmPSJmdDItYml0bWFwX2hhbmRsaW5nLmh0bWwjRlRfQml0bWFwX0luaXQiPkZUX0JpdG1hcF9Jbml0PC9hPi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiaXRtYXAiPmJpdG1hcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBiaXRtYXAgb2JqZWN0IHRvIGJlIGZyZWVkLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgJmxzcXVvO2xpYnJhcnkmcnNxdW87IGFyZ3VtZW50IGlzIHRha2VuIHRvIGhhdmUgYWNjZXNzIHRvIEZyZWVUeXBlJ3MgbWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9ucy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1iemlwMi5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1iemlwMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2MxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWJ6aXAyLmh0bWwKQEAgLTAsMCArMSwxNDkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5CWklQMiBTdHJlYW1zPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1N0cmVhbV9PcGVuQnppcDIiPkZUX1N0cmVhbV9PcGVuQnppcDI8L2E+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIEJ6aXAyLXNwZWNpZmljIGZ1bmN0aW9ucy48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJlYW1fT3BlbkJ6aXAyIj5GVF9TdHJlYW1fT3BlbkJ6aXAyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQlpJUDJfSCAoZnRiemlwMi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TdHJlYW1fT3BlbkJ6aXAyPC9iPiggPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT4gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT4gIHNvdXJjZSApOworPC9wcmU+CisKKzxwPk9wZW4gYSBuZXcgc3RyZWFtIHRvIHBhcnNlIGJ6aXAyLWNvbXByZXNzZWQgZm9udCBmaWxlcy4gVGhpcyBpcyBtYWlubHkgdXNlZCB0byBzdXBwb3J0IHRoZSBjb21wcmVzc2VkICZsc3F1bzsqLnBjZi5iejImcnNxdW87IGZvbnRzIHRoYXQgY29tZSB3aXRoIFhGcmVlODYuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyZWFtIj5zdHJlYW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IGVtYmVkZGluZyBzdHJlYW0uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic291cmNlIj5zb3VyY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIHN0cmVhbS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHNvdXJjZSBzdHJlYW0gbXVzdCBiZSBvcGVuZWQgPGk+YmVmb3JlPC9pPiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgorPHA+Q2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gJmxzcXVvO0ZUX1N0cmVhbV9DbG9zZSZyc3F1bzsgb24gdGhlIG5ldyBzdHJlYW0gd2lsbCA8Yj5ub3Q8L2I+IGNhbGwgJmxzcXVvO0ZUX1N0cmVhbV9DbG9zZSZyc3F1bzsgb24gdGhlIHNvdXJjZSBzdHJlYW0uIE5vbmUgb2YgdGhlIHN0cmVhbSBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuPC9wPgorPHA+VGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24gcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtLjwvcD4KKzxwPkluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBiemlwMiBjb21wcmVzc2lvbiByZWNvZ25pdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX05ld19GYWNlIj5GVF9OZXdfRmFjZTwvYT4gb3IgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+LiBUaGlzIG1lYW5zIHRoYXQgaWYgbm8gZm9udCBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUgcmF3IGNvbXByZXNzZWQgZmlsZSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkgdG8gb3BlbiBhIGJ6aXAyIGNvbXByZXNzZWQgc3RyZWFtIGZyb20gaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC48L3A+Cis8cD5UaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gJmxzcXVvO0ZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUmcnNxdW87IGlmIHlvdXIgYnVpbGQgb2YgRnJlZVR5cGUgd2FzIG5vdCBjb21waWxlZCB3aXRoIGJ6aXAyIHN1cHBvcnQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sCkBAIC0wLDAgKzEsMTAxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkNhY2hlIFN1Yi1TeXN0ZW08L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX01hbmFnZXIiPkZUQ19NYW5hZ2VyPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUQ19TQml0Ij5GVENfU0JpdDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVENfRmFjZV9SZXF1ZXN0ZXIiPkZUQ19GYWNlX1JlcXVlc3RlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX1NCaXRDYWNoZSI+RlRDX1NCaXRDYWNoZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVENfU0JpdENhY2hlX05ldyI+RlRDX1NCaXRDYWNoZV9OZXc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX01hbmFnZXJfTmV3Ij5GVENfTWFuYWdlcl9OZXc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUQ19TQml0Q2FjaGVfTG9va3VwIj5GVENfU0JpdENhY2hlX0xvb2t1cDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVENfTWFuYWdlcl9SZXNldCI+RlRDX01hbmFnZXJfUmVzZXQ8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX01hbmFnZXJfRG9uZSI+RlRDX01hbmFnZXJfRG9uZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX0NNYXBDYWNoZSI+RlRDX0NNYXBDYWNoZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVENfTWFuYWdlcl9Mb29rdXBGYWNlIj5GVENfTWFuYWdlcl9Mb29rdXBGYWNlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVENfQ01hcENhY2hlX05ldyI+RlRDX0NNYXBDYWNoZV9OZXc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX01hbmFnZXJfTG9va3VwU2l6ZSI+RlRDX01hbmFnZXJfTG9va3VwU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX0NNYXBDYWNoZV9Mb29rdXAiPkZUQ19DTWFwQ2FjaGVfTG9va3VwPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCI+RlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUQ19TY2FsZXJSZWMiPkZUQ19TY2FsZXJSZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX05vZGUiPkZUQ19Ob2RlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVENfU2NhbGVyIj5GVENfU2NhbGVyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUQ19Ob2RlX1VucmVmIj5GVENfTm9kZV9VbnJlZjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX0ltYWdlVHlwZVJlYyI+RlRDX0ltYWdlVHlwZVJlYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVENfSW1hZ2VUeXBlIj5GVENfSW1hZ2VUeXBlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUQ19JbWFnZUNhY2hlIj5GVENfSW1hZ2VDYWNoZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyIj5GVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRDX0ltYWdlQ2FjaGVfTmV3Ij5GVENfSW1hZ2VDYWNoZV9OZXc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUQ19TQml0UmVjIj5GVENfU0JpdFJlYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVENfSW1hZ2VDYWNoZV9Mb29rdXAiPkZUQ19JbWFnZUNhY2hlX0xvb2t1cDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIiPkZUQ19TQml0Q2FjaGVfTG9va3VwU2NhbGVyPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgRnJlZVR5cGUmbmJzcDsyIGNhY2hlIHN1Yi1zeXN0ZW0sIHdoaWNoIGlzIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50bHkgb3BlbmVkIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzLCBhcyB3ZWxsIGFzIGNhY2hpbmcgaW5mb3JtYXRpb24gbGlrZSBjaGFyYWN0ZXIgbWFwcyBhbmQgZ2x5cGggaW1hZ2VzIHdoaWxlIGxpbWl0aW5nIHRoZWlyIG1heGltdW0gbWVtb3J5IHVzYWdlLjwvcD4KKzxwPk5vdGUgdGhhdCBhbGwgdHlwZXMgYW5kIGZ1bmN0aW9ucyBiZWdpbiB3aXRoIHRoZSAmbHNxdW87RlRDXyZyc3F1bzsgcHJlZml4LjwvcD4KKzxwPlRoZSBjYWNoZSBpcyBoaWdobHkgcG9ydGFibGUgYW5kIHRodXMgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBmb250cyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0sIG9yIGhvdyB0byBhY2Nlc3MgdGhlbS4gVGhpcyBpbXBsaWVzIHRoZSBmb2xsb3dpbmcgc2NoZW1lOjwvcD4KKzxwPkZpcnN0LCBhdmFpbGFibGUgb3IgaW5zdGFsbGVkIGZvbnQgZmFjZXMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+IHZhbHVlcywgcHJvdmlkZWQgdG8gdGhlIGNhY2hlIGJ5IHRoZSBjbGllbnQuIE5vdGUgdGhhdCB0aGUgY2FjaGUgb25seSBzdG9yZXMgYW5kIGNvbXBhcmVzIHRoZXNlIHZhbHVlcywgYW5kIGRvZXNuJ3QgdHJ5IHRvIGludGVycHJldCB0aGVtIGluIGFueSB3YXkuPC9wPgorPHA+U2Vjb25kLCB0aGUgY2FjaGUgY2FsbHMsIG9ubHkgd2hlbiBuZWVkZWQsIGEgY2xpZW50LXByb3ZpZGVkIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+IGludG8gYSBuZXcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0LiBUaGUgbGF0dGVyIGlzIHRoZW4gY29tcGxldGVseSBtYW5hZ2VkIGJ5IHRoZSBjYWNoZSwgaW5jbHVkaW5nIGl0cyB0ZXJtaW5hdGlvbiB0aHJvdWdoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0RvbmVfRmFjZSI+RlRfRG9uZV9GYWNlPC9hPi4gVG8gbW9uaXRvciB0ZXJtaW5hdGlvbiBvZiBmYWNlIG9iamVjdHMsIHRoZSBmaW5hbGl6ZXIgY2FsbGJhY2sgaW4gdGhlICZsc3F1bztnZW5lcmljJnJzcXVvOyBmaWVsZCBvZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0IGNhbiBiZSB1c2VkLCB3aGljaCBtaWdodCBhbHNvIGJlIHVzZWQgdG8gc3RvcmUgdGhlIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfRmFjZUlEIj5GVENfRmFjZUlEPC9hPiBvZiB0aGUgZmFjZS48L3A+Cis8cD5DbGllbnRzIGFyZSBmcmVlIHRvIG1hcCBmYWNlIElEcyB0byBhbnl0aGluZyBlbHNlLiBUaGUgbW9zdCBzaW1wbGUgdXNhZ2UgaXMgdG8gYXNzb2NpYXRlIHRoZW0gdG8gYSAocGF0aG5hbWUsZmFjZV9pbmRleCkgcGFpciB0aGF0IGlzIHVzZWQgdG8gY2FsbCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2E+LiBIb3dldmVyLCBtb3JlIGNvbXBsZXggc2NoZW1lcyBhcmUgYWxzbyBwb3NzaWJsZS48L3A+Cis8cD5Ob3RlIHRoYXQgZm9yIHRoZSBjYWNoZSB0byB3b3JrIGNvcnJlY3RseSwgdGhlIGZhY2UgSUQgdmFsdWVzIG11c3QgYmUgPGI+cGVyc2lzdGVudDwvYj4sIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnRzIHRoZXkgcG9pbnQgdG8gc2hvdWxkIG5vdCBjaGFuZ2UgYXQgcnVudGltZSwgb3IgdGhhdCB0aGVpciB2YWx1ZSBzaG91bGQgbm90IGJlY29tZSBpbnZhbGlkLjwvcD4KKzxwPklmIHRoaXMgaXMgdW5hdm9pZGFibGUgKGUuZy4sIHdoZW4gYSBmb250IGlzIHVuaW5zdGFsbGVkIGF0IHJ1bnRpbWUpLCB5b3Ugc2hvdWxkIGNhbGwgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCI+RlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEPC9hPiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBsZXQgdGhlIGNhY2hlIGdldCByaWQgb2YgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG9sZCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VJRCI+RlRDX0ZhY2VJRDwvYT4gaXQgbWF5IGtlZXAgaW50ZXJuYWxseS4gRmFpbHVyZSB0byBkbyBzbyB3aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW91ciBvciBldmVuIGNyYXNoZXMuPC9wPgorPHA+VG8gdXNlIHRoZSBjYWNoZSwgc3RhcnQgd2l0aCBjYWxsaW5nIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9OZXciPkZUQ19NYW5hZ2VyX05ldzwvYT4gdG8gY3JlYXRlIGEgbmV3IDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+IG9iamVjdCwgd2hpY2ggbW9kZWxzIGEgc2luZ2xlIGNhY2hlIGluc3RhbmNlLiBZb3UgY2FuIHRoZW4gbG9vayB1cCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0cyB3aXRoIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9Mb29rdXBGYWNlIj5GVENfTWFuYWdlcl9Mb29rdXBGYWNlPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX0xvb2t1cFNpemUiPkZUQ19NYW5hZ2VyX0xvb2t1cFNpemU8L2E+LCByZXNwZWN0aXZlbHkuPC9wPgorPHA+SWYgeW91IHdhbnQgdG8gdXNlIHRoZSBjaGFybWFwIGNhY2hpbmcsIGNhbGwgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19DTWFwQ2FjaGVfTmV3Ij5GVENfQ01hcENhY2hlX05ldzwvYT4sIHRoZW4gbGF0ZXIgdXNlIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfQ01hcENhY2hlX0xvb2t1cCI+RlRDX0NNYXBDYWNoZV9Mb29rdXA8L2E+IHRvIHBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X0NoYXJfSW5kZXgiPkZUX0dldF9DaGFyX0luZGV4PC9hPiwgb25seSBtdWNoIGZhc3Rlci48L3A+Cis8cD5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBjYWNoaW5nLCBjYWxsIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfSW1hZ2VDYWNoZSI+RlRDX0ltYWdlQ2FjaGU8L2E+LCB0aGVuIGxhdGVyIHVzZSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlQ2FjaGVfTG9va3VwIj5GVENfSW1hZ2VDYWNoZV9Mb29rdXA8L2E+IHRvIHJldHJpZXZlIHRoZSBjb3JyZXNwb25kaW5nIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBvYmplY3RzIGZyb20gdGhlIGNhY2hlLjwvcD4KKzxwPklmIHlvdSBuZWVkIGxvdHMgb2Ygc21hbGwgYml0bWFwcywgaXQgaXMgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgdG8gY2FsbCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRDYWNoZV9OZXciPkZUQ19TQml0Q2FjaGVfTmV3PC9hPiBmb2xsb3dlZCBieSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRDYWNoZV9Mb29rdXAiPkZUQ19TQml0Q2FjaGVfTG9va3VwPC9hPi4gVGhpcyByZXR1cm5zIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdFJlYyI+RlRDX1NCaXRSZWM8L2E+IHN0cnVjdHVyZXMsIHdoaWNoIGFyZSB1c2VkIHRvIHN0b3JlIHNtYWxsIGJpdG1hcHMgZGlyZWN0bHkuIChBIHNtYWxsIGJpdG1hcCBpcyBvbmUgd2hvc2UgbWV0cmljcyBhbmQgZGltZW5zaW9ucyBhbGwgZml0IGludG8gOC1iaXQgaW50ZWdlcnMpLjwvcD4KKzxwPldlIGhvcGUgdG8gYWxzbyBwcm92aWRlIGEga2VybmluZyBjYWNoZSBpbiB0aGUgbmVhciBmdXR1cmUuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX01hbmFnZXIiPkZUQ19NYW5hZ2VyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRDX01hbmFnZXJSZWNfKiAgPGI+RlRDX01hbmFnZXI8L2I+OworPC9wcmU+CisKKzxwPlRoaXMgb2JqZWN0IGNvcnJlc3BvbmRzIHRvIG9uZSBpbnN0YW5jZSBvZiB0aGUgY2FjaGUtc3Vic3lzdGVtLiBJdCBpcyB1c2VkIHRvIGNhY2hlIG9uZSBvciBtb3JlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdHMsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzLjwvcD4KKzxwPlRoZSBtYW5hZ2VyIGludGVudGlvbmFsbHkgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3BlbmVkIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzIHRvIGNvbnRyb2wgbWVtb3J5IHVzYWdlLiBTZWUgdGhlICZsc3F1bzttYXhfZmFjZXMmcnNxdW87IGFuZCAmbHNxdW87bWF4X3NpemVzJnJzcXVvOyBwYXJhbWV0ZXJzIG9mIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9OZXciPkZUQ19NYW5hZ2VyX05ldzwvYT4uPC9wPgorPHA+VGhlIG1hbmFnZXIgaXMgYWxzbyB1c2VkIHRvIGNhY2hlICZsc3F1bztub2RlcyZyc3F1bzsgb2YgdmFyaW91cyB0eXBlcyB3aGlsZSBsaW1pdGluZyB0aGVpciB0b3RhbCBtZW1vcnkgdXNhZ2UuPC9wPgorPHA+QWxsIGxpbWl0YXRpb25zIGFyZSBlbmZvcmNlZCBieSBrZWVwaW5nIGxpc3RzIG9mIG1hbmFnZWQgb2JqZWN0cyBpbiBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGFuZCBmbHVzaGluZyBvbGQgbm9kZXMgdG8gbWFrZSByb29tIGZvciBuZXcgb25lcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb2ludGVyIj5GVF9Qb2ludGVyPC9hPiAgPGI+RlRDX0ZhY2VJRDwvYj47Cis8L3ByZT4KKworPHA+QW4gb3BhcXVlIHBvaW50ZXIgdHlwZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpdHkgZmFjZSBvYmplY3RzLiBUaGUgY29udGVudHMgb2Ygc3VjaCBvYmplY3RzIGlzIGFwcGxpY2F0aW9uLWRlcGVuZGVudC48L3A+Cis8cD5UaGVzZSBwb2ludGVycyBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gcG9pbnQgdG8gYSB1c2VyLWRlZmluZWQgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBmb250IGZpbGUgcGF0aCwgYW5kIGZhY2UgaW5kZXguPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5OZXZlciB1c2UgTlVMTCBhcyBhIHZhbGlkIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfRmFjZUlEIj5GVENfRmFjZUlEPC9hPi48L3A+Cis8cD5GYWNlIElEcyBhcmUgcGFzc2VkIGJ5IHRoZSBjbGllbnQgdG8gdGhlIGNhY2hlIG1hbmFnZXIgdGhhdCBjYWxscywgd2hlbiBuZWVkZWQsIHRoZSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VfUmVxdWVzdGVyIj5GVENfRmFjZV9SZXF1ZXN0ZXI8L2E+IHRvIHRyYW5zbGF0ZSB0aGVtIGludG8gbmV3IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdHMuPC9wPgorPHA+SWYgdGhlIGNvbnRlbnQgb2YgYSBnaXZlbiBmYWNlIElEIGNoYW5nZXMgYXQgcnVudGltZSwgb3IgaWYgdGhlIHZhbHVlIGJlY29tZXMgaW52YWxpZCAoZS5nLiwgd2hlbiB1bmluc3RhbGxpbmcgYSBmb250KSwgeW91IHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQiPkZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRDwvYT4gYmVmb3JlIGFueSBvdGhlciBjYWNoZSBmdW5jdGlvbi48L3A+Cis8cD5GYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGluY29ycmVjdCBiZWhhdmlvdXIgb3IgZXZlbiBtZW1vcnkgbGVha3MgYW5kIGNyYXNoZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfRmFjZV9SZXF1ZXN0ZXIiPkZUQ19GYWNlX1JlcXVlc3RlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4KKyAgKCo8Yj5GVENfRmFjZV9SZXF1ZXN0ZXI8L2I+KSggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+ICBmYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvaW50ZXIiPkZUX1BvaW50ZXI8L2E+ICByZXFfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiogICAgYWZhY2UgKTsKKzwvcHJlPgorCis8cD5BIGNhbGxiYWNrIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIEl0IGlzIHVzZWQgYnkgdGhlIGNhY2hlIG1hbmFnZXIgdG8gdHJhbnNsYXRlIGEgZ2l2ZW4gPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+IGludG8gYSBuZXcgdmFsaWQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0LCBvbiBkZW1hbmQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9pZCI+ZmFjZV9pZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmYWNlIElEIHRvIHJlc29sdmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmVxX2RhdGEiPnJlcV9kYXRhPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QXBwbGljYXRpb24tcHJvdmlkZWQgcmVxdWVzdCBkYXRhIChzZWUgbm90ZSBiZWxvdykuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhZmFjZSI+YWZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIG5ldyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSB0aGlyZCBwYXJhbWV0ZXIgJmxzcXVvO3JlcV9kYXRhJnJzcXVvOyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHBhc3NlZCBieSB0aGUgY2xpZW50IHdoZW4gPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX05ldyI+RlRDX01hbmFnZXJfTmV3PC9hPiBpcyBjYWxsZWQuPC9wPgorPHA+VGhlIGZhY2UgcmVxdWVzdGVyIHNob3VsZCBub3QgcGVyZm9ybSBmdW5ueSB0aGluZ3Mgb24gdGhlIHJldHVybmVkIGZhY2Ugb2JqZWN0LCBsaWtlIGNyZWF0aW5nIGEgbmV3IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+IGZvciBpdCwgb3Igc2V0dGluZyBhIHRyYW5zZm9ybWF0aW9uIHRocm91Z2ggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X1RyYW5zZm9ybSI+RlRfU2V0X1RyYW5zZm9ybTwvYT4hPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfTWFuYWdlcl9OZXciPkZUQ19NYW5hZ2VyX05ldzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX01hbmFnZXJfTmV3PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICAgICBtYXhfZmFjZXMsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgICAgICAgbWF4X3NpemVzLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICAgICAgICAgICBtYXhfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlX1JlcXVlc3RlciI+RlRDX0ZhY2VfUmVxdWVzdGVyPC9hPiAgcmVxdWVzdGVyLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvaW50ZXIiPkZUX1BvaW50ZXI8L2E+ICAgICAgICAgIHJlcV9kYXRhLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+ICAgICAgICAqYW1hbmFnZXIgKTsKKzwvcHJlPgorCis8cD5DcmVhdGUgYSBuZXcgY2FjaGUgbWFuYWdlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHBhcmVudCBGcmVlVHlwZSBsaWJyYXJ5IGhhbmRsZSB0byB1c2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWF4X2ZhY2VzIj5tYXhfZmFjZXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5NYXhpbXVtIG51bWJlciBvZiBvcGVuZWQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0cyBtYW5hZ2VkIGJ5IHRoaXMgY2FjaGUgaW5zdGFuY2UuIFVzZSZuYnNwOzAgZm9yIGRlZmF1bHRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heF9zaXplcyI+bWF4X3NpemVzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TWF4aW11bSBudW1iZXIgb2Ygb3BlbmVkIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+IG9iamVjdHMgbWFuYWdlZCBieSB0aGlzIGNhY2hlIGluc3RhbmNlLiBVc2UmbmJzcDswIGZvciBkZWZhdWx0cy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhfYnl0ZXMiPm1heF9ieXRlczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSBmb3IgY2FjaGVkIGRhdGEgbm9kZXMuIFVzZSZuYnNwOzAgZm9yIGRlZmF1bHRzLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBkb2VzIG5vdCBhY2NvdW50IGZvciBtYW5hZ2VkIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJlcXVlc3RlciI+cmVxdWVzdGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gYXBwbGljYXRpb24tcHJvdmlkZWQgY2FsbGJhY2sgdXNlZCB0byB0cmFuc2xhdGUgZmFjZSBJRHMgaW50byByZWFsIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmVxX2RhdGEiPnJlcV9kYXRhPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBnZW5lcmljIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3RlciBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkIChzZWUgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlX1JlcXVlc3RlciI+RlRDX0ZhY2VfUmVxdWVzdGVyPC9hPikuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbWFuYWdlciI+YW1hbmFnZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIG5ldyBtYW5hZ2VyIG9iamVjdC4gMCZuYnNwO2luIGNhc2Ugb2YgZmFpbHVyZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX01hbmFnZXJfUmVzZXQiPkZUQ19NYW5hZ2VyX1Jlc2V0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUQ19NYW5hZ2VyX1Jlc2V0PC9iPiggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyIj5GVENfTWFuYWdlcjwvYT4gIG1hbmFnZXIgKTsKKzwvcHJlPgorCis8cD5FbXB0eSBhIGdpdmVuIGNhY2hlIG1hbmFnZXIuIFRoaXMgc2ltcGx5IGdldHMgcmlkIG9mIGFsbCB0aGUgY3VycmVudGx5IGNhY2hlZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0cyB3aXRoaW4gdGhlIG1hbmFnZXIuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWFuYWdlciI+bWFuYWdlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBtYW5hZ2VyLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19NYW5hZ2VyX0RvbmUiPkZUQ19NYW5hZ2VyX0RvbmU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRDX01hbmFnZXJfRG9uZTwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+ICBtYW5hZ2VyICk7Cis8L3ByZT4KKworPHA+RGVzdHJveSBhIGdpdmVuIG1hbmFnZXIgYWZ0ZXIgZW1wdHlpbmcgaXQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWFuYWdlciI+bWFuYWdlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgY2FjaGUgbWFuYWdlciBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX01hbmFnZXJfTG9va3VwRmFjZSI+RlRDX01hbmFnZXJfTG9va3VwRmFjZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX01hbmFnZXJfTG9va3VwRmFjZTwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+ICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VJRCI+RlRDX0ZhY2VJRDwvYT4gICBmYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICAgKmFmYWNlICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gZmFjZSBJRCB0aHJvdWdoIGEgY2FjaGUgbWFuYWdlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYW5hZ2VyIj5tYW5hZ2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGNhY2hlIG1hbmFnZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9pZCI+ZmFjZV9pZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBJRCBvZiB0aGUgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhZmFjZSI+YWZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSByZXR1cm5lZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBvYmplY3QgaXMgYWx3YXlzIG93bmVkIGJ5IHRoZSBtYW5hZ2VyLiBZb3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBkaXNjYXJkIGl0IHlvdXJzZWxmLjwvcD4KKzxwPlRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBvYmplY3QgZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIGEgY3VycmVudCBzaXplIG9iamVjdCAoaS5lLiwgZmFjZS0mZ3Q7c2l6ZSBjYW4gYmUmbmJzcDswKS4gSWYgeW91IG5lZWQgYSBzcGVjaWZpYyAmbHNxdW87Zm9udCBzaXplJnJzcXVvOywgdXNlIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9Mb29rdXBTaXplIj5GVENfTWFuYWdlcl9Mb29rdXBTaXplPC9hPiBpbnN0ZWFkLjwvcD4KKzxwPk5ldmVyIGNoYW5nZSB0aGUgZmFjZSdzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAoaS5lLiwgbmV2ZXIgY2FsbCB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X1RyYW5zZm9ybSI+RlRfU2V0X1RyYW5zZm9ybTwvYT4gZnVuY3Rpb24pIG9uIGEgcmV0dXJuZWQgZmFjZSEgSWYgeW91IG5lZWQgdG8gdHJhbnNmb3JtIGdseXBocywgZG8gaXQgeW91cnNlbGYgYWZ0ZXIgZ2x5cGggbG9hZGluZy48L3A+Cis8cD5XaGVuIHlvdSBwZXJmb3JtIGEgbG9va3VwLCBvdXQtb2YtbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQgPGk+d2l0aGluPC9pPiB0aGUgbG9va3VwIGFuZCBmb3JjZSBpbmNyZW1lbnRhbCBmbHVzaGVzIG9mIHRoZSBjYWNoZSB1bnRpbCBlbm91Z2ggbWVtb3J5IGlzIHJlbGVhc2VkIGZvciB0aGUgbG9va3VwIHRvIHN1Y2NlZWQuPC9wPgorPHA+SWYgYSBsb29rdXAgZmFpbHMgd2l0aCAmbHNxdW87RlRfRXJyX091dF9PZl9NZW1vcnkmcnNxdW87IHRoZSBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXBsZXRlbHkgZmx1c2hlZCwgYW5kIHN0aWxsIG5vIG1lbW9yeSB3YXMgYXZhaWxhYmxlIGZvciB0aGUgb3BlcmF0aW9uLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX01hbmFnZXJfTG9va3VwU2l6ZSI+RlRDX01hbmFnZXJfTG9va3VwU2l6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX01hbmFnZXJfTG9va3VwU2l6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+ICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlciI+RlRDX1NjYWxlcjwvYT4gICBzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+ICAgICAqYXNpemUgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBnaXZlbiA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlclJlYyI+RlRDX1NjYWxlclJlYzwvYT4gcG9pbnRlciB0aHJvdWdoIGEgY2FjaGUgbWFuYWdlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYW5hZ2VyIj5tYW5hZ2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGNhY2hlIG1hbmFnZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2NhbGVyIj5zY2FsZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHNjYWxlciBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhc2l6ZSI+YXNpemU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc2l6ZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSByZXR1cm5lZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3QgaXMgYWx3YXlzIG93bmVkIGJ5IHRoZSBtYW5hZ2VyLiBZb3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBkaXNjYXJkIGl0IGJ5IHlvdXJzZWxmLjwvcD4KKzxwPllvdSBjYW4gYWNjZXNzIHRoZSBwYXJlbnQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0IHNpbXBseSBhcyAmbHNxdW87c2l6ZS0mZ3Q7ZmFjZSZyc3F1bzsgaWYgeW91IG5lZWQgaXQuIE5vdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBhbHNvIG93bmVkIGJ5IHRoZSBtYW5hZ2VyLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+V2hlbiB5b3UgcGVyZm9ybSBhIGxvb2t1cCwgb3V0LW9mLW1lbW9yeSBlcnJvcnMgYXJlIGRldGVjdGVkIDxpPndpdGhpbjwvaT4gdGhlIGxvb2t1cCBhbmQgZm9yY2UgaW5jcmVtZW50YWwgZmx1c2hlcyBvZiB0aGUgY2FjaGUgdW50aWwgZW5vdWdoIG1lbW9yeSBpcyByZWxlYXNlZCBmb3IgdGhlIGxvb2t1cCB0byBzdWNjZWVkLjwvcD4KKzxwPklmIGEgbG9va3VwIGZhaWxzIHdpdGggJmxzcXVvO0ZUX0Vycl9PdXRfT2ZfTWVtb3J5JnJzcXVvOyB0aGUgY2FjaGUgaGFzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGZsdXNoZWQsIGFuZCBzdGlsbCBubyBtZW1vcnkgaXMgYXZhaWxhYmxlIGZvciB0aGUgb3BlcmF0aW9uLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEIj5GVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEPC9iPiggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyIj5GVENfTWFuYWdlcjwvYT4gIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+ICAgZmFjZV9pZCApOworPC9wcmU+CisKKzxwPkEgc3BlY2lhbCBmdW5jdGlvbiB1c2VkIHRvIGluZGljYXRlIHRvIHRoZSBjYWNoZSBtYW5hZ2VyIHRoYXQgYSBnaXZlbiA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VJRCI+RlRDX0ZhY2VJRDwvYT4gaXMgbm8gbG9uZ2VyIHZhbGlkLCBlaXRoZXIgYmVjYXVzZSBpdHMgY29udGVudCBjaGFuZ2VkLCBvciBiZWNhdXNlIGl0IHdhcyBkZWFsbG9jYXRlZCBvciB1bmluc3RhbGxlZC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYW5hZ2VyIj5tYW5hZ2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNhY2hlIG1hbmFnZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaWQiPmZhY2VfaWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+IHRvIGJlIHJlbW92ZWQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCBub2RlcyBmcm9tIHRoZSBjYWNoZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgJmxzcXVvO2ZhY2VfaWQmcnNxdW87LCB3aXRoIHRoZSBleGNlcHRpb24gb2Ygbm9kZXMgd2l0aCBhIG5vbi1udWxsIHJlZmVyZW5jZSBjb3VudC48L3A+Cis8cD5TdWNoIG5vZGVzIGFyZSBob3dldmVyIG1vZGlmaWVkIGludGVybmFsbHkgc28gYXMgdG8gbmV2ZXIgYXBwZWFyIGluIGxhdGVyIGxvb2t1cHMgd2l0aCB0aGUgc2FtZSAmbHNxdW87ZmFjZV9pZCZyc3F1bzsgdmFsdWUsIGFuZCB0byBiZSBpbW1lZGlhdGVseSBkZXN0cm95ZWQgd2hlbiByZWxlYXNlZCBieSBhbGwgdGhlaXIgdXNlcnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfTm9kZSI+RlRDX05vZGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVENfTm9kZVJlY18qICA8Yj5GVENfTm9kZTwvYj47Cis8L3ByZT4KKworPHA+QW4gb3BhcXVlIGhhbmRsZSB0byBhIGNhY2hlIG5vZGUgb2JqZWN0LiBFYWNoIGNhY2hlIG5vZGUgaXMgcmVmZXJlbmNlLWNvdW50ZWQuIEEgbm9kZSB3aXRoIGEgY291bnQgb2YmbmJzcDswIG1pZ2h0IGJlIGZsdXNoZWQgb3V0IG9mIGEgZnVsbCBjYWNoZSB3aGVuZXZlciBhIGxvb2t1cCByZXF1ZXN0IGlzIHBlcmZvcm1lZC48L3A+Cis8cD5JZiB5b3UgbG9vayB1cCBub2RlcywgeW91IGhhdmUgdGhlIGFiaWxpdHkgdG8gJmxzcXVvO2FjcXVpcmUmcnNxdW87IHRoZW0sIGkuZS4sIHRvIGluY3JlbWVudCB0aGVpciByZWZlcmVuY2UgY291bnQuIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBub2RlIGZyb20gYmVpbmcgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIHVudGlsIHlvdSBleHBsaWNpdGx5ICZsc3F1bztyZWxlYXNlJnJzcXVvOyBpdCAoc2VlIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTm9kZV9VbnJlZiI+RlRDX05vZGVfVW5yZWY8L2E+KS48L3A+Cis8cD5TZWUgYWxzbyA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRDYWNoZV9Mb29rdXAiPkZUQ19TQml0Q2FjaGVfTG9va3VwPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZUNhY2hlX0xvb2t1cCI+RlRDX0ltYWdlQ2FjaGVfTG9va3VwPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19Ob2RlX1VucmVmIj5GVENfTm9kZV9VbnJlZjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVENfTm9kZV9VbnJlZjwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTm9kZSI+RlRDX05vZGU8L2E+ICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyIj5GVENfTWFuYWdlcjwvYT4gIG1hbmFnZXIgKTsKKzwvcHJlPgorCis8cD5EZWNyZW1lbnQgYSBjYWNoZSBub2RlJ3MgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50LiBXaGVuIHRoZSBjb3VudCByZWFjaGVzIDAsIGl0IGlzIG5vdCBkZXN0cm95ZWQgYnV0IGJlY29tZXMgZWxpZ2libGUgZm9yIHN1YnNlcXVlbnQgY2FjaGUgZmx1c2hlcy48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJub2RlIj5ub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNhY2hlIG5vZGUgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hbmFnZXIiPm1hbmFnZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY2FjaGUgbWFuYWdlciBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX0ltYWdlQ2FjaGUiPkZUQ19JbWFnZUNhY2hlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRDX0ltYWdlQ2FjaGVSZWNfKiAgPGI+RlRDX0ltYWdlQ2FjaGU8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGEgZ2x5cGggaW1hZ2UgY2FjaGUgb2JqZWN0LiBUaGV5IGFyZSBkZXNpZ25lZCB0byBob2xkIG1hbnkgZGlzdGluY3QgZ2x5cGggaW1hZ2VzIHdoaWxlIG5vdCBleGNlZWRpbmcgYSBjZXJ0YWluIG1lbW9yeSB0aHJlc2hvbGQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfSW1hZ2VDYWNoZV9OZXciPkZUQ19JbWFnZUNhY2hlX05ldzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX0ltYWdlQ2FjaGVfTmV3PC9iPiggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyIj5GVENfTWFuYWdlcjwvYT4gICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfSW1hZ2VDYWNoZSI+RlRDX0ltYWdlQ2FjaGU8L2E+ICAqYWNhY2hlICk7Cis8L3ByZT4KKworPHA+Q3JlYXRlIGEgbmV3IGdseXBoIGltYWdlIGNhY2hlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hbmFnZXIiPm1hbmFnZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcGFyZW50IG1hbmFnZXIgZm9yIHRoZSBpbWFnZSBjYWNoZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFjYWNoZSI+YWNhY2hlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIG5ldyBnbHlwaCBpbWFnZSBjYWNoZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19JbWFnZUNhY2hlX0xvb2t1cCI+RlRDX0ltYWdlQ2FjaGVfTG9va3VwPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVENfSW1hZ2VDYWNoZV9Mb29rdXA8L2I+KCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlQ2FjaGUiPkZUQ19JbWFnZUNhY2hlPC9hPiAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZVR5cGUiPkZUQ19JbWFnZVR5cGU8L2E+ICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gICAgICAgKmFnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX05vZGUiPkZUQ19Ob2RlPC9hPiAgICAgICAqYW5vZGUgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSBhIGdpdmVuIGdseXBoIGltYWdlIGZyb20gYSBnbHlwaCBpbWFnZSBjYWNoZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjYWNoZSI+Y2FjaGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIGNhY2hlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InR5cGUiPnR5cGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSBnbHlwaCBpbWFnZSB0eXBlIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2luZGV4Ij5naW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggaW5kZXggdG8gcmV0cmlldmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhZ2x5cGgiPmFnbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjb3JyZXNwb25kaW5nIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBvYmplY3QuIDAmbmJzcDtpbiBjYXNlIG9mIGZhaWx1cmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW5vZGUiPmFub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgYmVsb3cpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgcmV0dXJuZWQgZ2x5cGggaXMgb3duZWQgYW5kIG1hbmFnZWQgYnkgdGhlIGdseXBoIGltYWdlIGNhY2hlLiBOZXZlciB0cnkgdG8gdHJhbnNmb3JtIG9yIGRpc2NhcmQgaXQgbWFudWFsbHkhIFlvdSBjYW4gaG93ZXZlciBjcmVhdGUgYSBjb3B5IHdpdGggPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9Db3B5Ij5GVF9HbHlwaF9Db3B5PC9hPiBhbmQgbW9kaWZ5IHRoZSBuZXcgb25lLjwvcD4KKzxwPklmICZsc3F1bzthbm9kZSZyc3F1bzsgaXMgPGk+bm90PC9pPiBOVUxMLCBpdCByZWNlaXZlcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2FjaGUgbm9kZSBjb250YWluaW5nIHRoZSBnbHlwaCBpbWFnZSwgYWZ0ZXIgaW5jcmVhc2luZyBpdHMgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+KSB3aWxsIGFsd2F5cyBiZSBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX05vZGVfVW5yZWYiPkZUQ19Ob2RlX1VucmVmPC9hPiB0byAmbHNxdW87cmVsZWFzZSZyc3F1bzsgaXQuPC9wPgorPHA+SWYgJmxzcXVvO2Fub2RlJnJzcXVvOyBpcyBOVUxMLCB0aGUgY2FjaGUgbm9kZSBpcyBsZWZ0IHVuY2hhbmdlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+IGNvdWxkIGJlIGZsdXNoZWQgb3V0IG9mIHRoZSBjYWNoZSBvbiB0aGUgbmV4dCBjYWxsIHRvIG9uZSBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIEFQSXMuIERvbid0IGFzc3VtZSB0aGF0IGl0IGlzIHBlcnNpc3RlbnQhPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfU0JpdCI+RlRDX1NCaXQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVENfU0JpdFJlY18qICA8Yj5GVENfU0JpdDwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvci4gU2VlIHRoZSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRSZWMiPkZUQ19TQml0UmVjPC9hPiBzdHJ1Y3R1cmUgZm9yIGRldGFpbHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfU0JpdENhY2hlIj5GVENfU0JpdENhY2hlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRDX1NCaXRDYWNoZVJlY18qICA8Yj5GVENfU0JpdENhY2hlPC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBjYWNoZS4gVGhlc2UgYXJlIHNwZWNpYWwgY2FjaGUgb2JqZWN0cyB1c2VkIHRvIHN0b3JlIHNtYWxsIGdseXBoIGJpdG1hcHMgKGFuZCBhbnRpLWFsaWFzZWQgcGl4bWFwcykgaW4gYSBtdWNoIG1vcmUgZWZmaWNpZW50IHdheSB0aGFuIHRoZSB0cmFkaXRpb25hbCBnbHlwaCBpbWFnZSBjYWNoZSBpbXBsZW1lbnRlZCBieSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlQ2FjaGUiPkZUQ19JbWFnZUNhY2hlPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19TQml0Q2FjaGVfTmV3Ij5GVENfU0JpdENhY2hlX05ldzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX1NCaXRDYWNoZV9OZXc8L2I+KCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXIiPkZUQ19NYW5hZ2VyPC9hPiAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdENhY2hlIj5GVENfU0JpdENhY2hlPC9hPiAgKmFjYWNoZSApOworPC9wcmU+CisKKzxwPkNyZWF0ZSBhIG5ldyBjYWNoZSB0byBzdG9yZSBzbWFsbCBnbHlwaCBiaXRtYXBzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hbmFnZXIiPm1hbmFnZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGNhY2hlIG1hbmFnZXIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhY2FjaGUiPmFjYWNoZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBuZXcgc2JpdCBjYWNoZS4gTlVMTCBpbiBjYXNlIG9mIGVycm9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfU0JpdENhY2hlX0xvb2t1cCI+RlRDX1NCaXRDYWNoZV9Mb29rdXA8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUQ19TQml0Q2FjaGVfTG9va3VwPC9iPiggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19TQml0Q2FjaGUiPkZUQ19TQml0Q2FjaGU8L2E+ICAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZVR5cGUiPkZUQ19JbWFnZVR5cGU8L2E+ICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXQiPkZUQ19TQml0PC9hPiAgICAgICAgKnNiaXQsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX05vZGUiPkZUQ19Ob2RlPC9hPiAgICAgICAgKmFub2RlICk7Cis8L3ByZT4KKworPHA+TG9vayB1cCBhIGdpdmVuIHNtYWxsIGdseXBoIGJpdG1hcCBpbiBhIGdpdmVuIHNiaXQgY2FjaGUgYW5kICZsc3F1bztsb2NrJnJzcXVvOyBpdCB0byBwcmV2ZW50IGl0cyBmbHVzaGluZyBmcm9tIHRoZSBjYWNoZSB1bnRpbCBuZWVkZWQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2FjaGUiPmNhY2hlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBzYml0IGNhY2hlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InR5cGUiPnR5cGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIGdseXBoIGltYWdlIHR5cGUgZGVzY3JpcHRvci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJnaW5kZXgiPmdpbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNiaXQiPnNiaXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFub2RlIj5hbm9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQgKHNlZSBub3RlIGJlbG93KS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlIGNhY2hlIGFuZCBzaG91bGQgbmV2ZXIgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGV5IG1pZ2h0IGFzIHdlbGwgZGlzYXBwZWFyIGZyb20gbWVtb3J5IG9uIHRoZSBuZXh0IGNhY2hlIGxvb2t1cCwgc28gZG9uJ3QgdHJlYXQgdGhlbSBhcyBwZXJzaXN0ZW50IGRhdGEuPC9wPgorPHA+VGhlIGRlc2NyaXB0b3IncyAmbHNxdW87YnVmZmVyJnJzcXVvOyBmaWVsZCBpcyBzZXQgdG8mbmJzcDswIHRvIGluZGljYXRlIGEgbWlzc2luZyBnbHlwaCBiaXRtYXAuPC9wPgorPHA+SWYgJmxzcXVvO2Fub2RlJnJzcXVvOyBpcyA8aT5ub3Q8L2k+IE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSBub2RlIGNvbnRhaW5pbmcgdGhlIGJpdG1hcCwgYWZ0ZXIgaW5jcmVhc2luZyBpdHMgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgaW1hZ2UpIHdpbGwgYWx3YXlzIGJlIGtlcHQgaW4gdGhlIGNhY2hlIHVudGlsIHlvdSBjYWxsIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTm9kZV9VbnJlZiI+RlRDX05vZGVfVW5yZWY8L2E+IHRvICZsc3F1bztyZWxlYXNlJnJzcXVvOyBpdC48L3A+Cis8cD5JZiAmbHNxdW87YW5vZGUmcnNxdW87IGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBiaXRtYXAgY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0IGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gRG9uJ3QgYXNzdW1lIHRoYXQgaXQgaXMgcGVyc2lzdGVudCE8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19DTWFwQ2FjaGUiPkZUQ19DTWFwQ2FjaGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVENfQ01hcENhY2hlUmVjXyogIDxiPkZUQ19DTWFwQ2FjaGU8L2I+OworPC9wcmU+CisKKzxwPkFuIG9wYXF1ZSBoYW5kbGUgdXNlZCB0byBtb2RlbCBhIGNoYXJtYXAgY2FjaGUuIFRoaXMgY2FjaGUgaXMgdG8gaG9sZCBjaGFyYWN0ZXIgY29kZXMgLSZndDsgZ2x5cGggaW5kaWNlcyBtYXBwaW5ncy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19DTWFwQ2FjaGVfTmV3Ij5GVENfQ01hcENhY2hlX05ldzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRDX0NNYXBDYWNoZV9OZXc8L2I+KCA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXIiPkZUQ19NYW5hZ2VyPC9hPiAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfQ01hcENhY2hlIj5GVENfQ01hcENhY2hlPC9hPiAgKmFjYWNoZSApOworPC9wcmU+CisKKzxwPkNyZWF0ZSBhIG5ldyBjaGFybWFwIGNhY2hlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hbmFnZXIiPm1hbmFnZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgY2FjaGUgbWFuYWdlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFjYWNoZSI+YWNhY2hlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBuZXcgY2FjaGUgaGFuZGxlLiBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkxpa2UgYWxsIG90aGVyIGNhY2hlcywgdGhpcyBvbmUgd2lsbCBiZSBkZXN0cm95ZWQgd2l0aCB0aGUgY2FjaGUgbWFuYWdlci48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUQ19DTWFwQ2FjaGVfTG9va3VwIj5GVENfQ01hcENhY2hlX0xvb2t1cDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiApCisgIDxiPkZUQ19DTWFwQ2FjaGVfTG9va3VwPC9iPiggPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19DTWFwQ2FjaGUiPkZUQ19DTWFwQ2FjaGU8L2E+ICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfRmFjZUlEIj5GVENfRmFjZUlEPC9hPiAgICAgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAgIGNtYXBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50MzIiPkZUX1VJbnQzMjwvYT4gICAgICBjaGFyX2NvZGUgKTsKKzwvcHJlPgorCis8cD5UcmFuc2xhdGUgYSBjaGFyYWN0ZXIgY29kZSBpbnRvIGEgZ2x5cGggaW5kZXgsIHVzaW5nIHRoZSBjaGFybWFwIGNhY2hlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNhY2hlIj5jYWNoZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgY2hhcm1hcCBjYWNoZSBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9pZCI+ZmFjZV9pZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzb3VyY2UgZmFjZSBJRC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjbWFwX2luZGV4Ij5jbWFwX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGluZGV4IG9mIHRoZSBjaGFybWFwIGluIHRoZSBzb3VyY2UgZmFjZS4gQW55IG5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRvIHVzZSB0aGUgY2FjaGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4ncyBkZWZhdWx0IGNoYXJtYXAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcl9jb2RlIj5jaGFyX2NvZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY2hhcmFjdGVyIGNvZGUgKGluIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJtYXApLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+R2x5cGggaW5kZXguIDAmbmJzcDttZWFucyAmbHNxdW87bm8gZ2x5cGgmcnNxdW87LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX1NjYWxlclJlYyI+RlRDX1NjYWxlclJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVENfU2NhbGVyUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+ICBmYWNlX2lkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICB3aWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgaGVpZ2h0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgIHBpeGVsOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICB4X3JlczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgeV9yZXM7CisKKyAgfSA8Yj5GVENfU2NhbGVyUmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gY2hhcmFjdGVyIHNpemUgaW4gZWl0aGVyIHBpeGVscyBvciBwb2ludHMgdG8gdGhlIGNhY2hlIG1hbmFnZXIuIFNlZSA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXJfTG9va3VwU2l6ZSI+RlRDX01hbmFnZXJfTG9va3VwU2l6ZTwvYT4uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaWQiPmZhY2VfaWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIGZhY2UgSUQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0id2lkdGgiPndpZHRoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNoYXJhY3RlciB3aWR0aC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWlnaHQiPmhlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjaGFyYWN0ZXIgaGVpZ2h0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBpeGVsIj5waXhlbDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgQm9vbGVhbi4gSWYgMSwgdGhlICZsc3F1bzt3aWR0aCZyc3F1bzsgYW5kICZsc3F1bztoZWlnaHQmcnNxdW87IGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgaW50ZWdlciBwaXhlbCBjaGFyYWN0ZXIgc2l6ZXMuIE90aGVyd2lzZSwgdGhleSBhcmUgZXhwcmVzc2VkIGFzIDEvNjR0aCBvZiBwb2ludHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieF9yZXMiPnhfcmVzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+T25seSB1c2VkIHdoZW4gJmxzcXVvO3BpeGVsJnJzcXVvOyBpcyB2YWx1ZSZuYnNwOzAgdG8gaW5kaWNhdGUgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBkcGkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieV9yZXMiPnlfcmVzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+T25seSB1c2VkIHdoZW4gJmxzcXVvO3BpeGVsJnJzcXVvOyBpcyB2YWx1ZSZuYnNwOzAgdG8gaW5kaWNhdGUgdGhlIHZlcnRpY2FsIHJlc29sdXRpb24gaW4gZHBpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgdHlwZSBpcyBtYWlubHkgdXNlZCB0byByZXRyaWV2ZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzIHRocm91Z2ggdGhlIGNhY2hlIG1hbmFnZXIuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfU2NhbGVyIj5GVENfU2NhbGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRDX1NjYWxlclJlY18qICA8Yj5GVENfU2NhbGVyPC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhbiA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlclJlYyI+RlRDX1NjYWxlclJlYzwvYT4gc3RydWN0dXJlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX0ltYWdlVHlwZVJlYyI+RlRDX0ltYWdlVHlwZVJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NBQ0hFX0ggKGZ0Y2FjaGUuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVENfSW1hZ2VUeXBlUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19GYWNlSUQiPkZUQ19GYWNlSUQ8L2E+ICBmYWNlX2lkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICB3aWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgaGVpZ2h0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludDMyIj5GVF9JbnQzMjwvYT4gICAgZmxhZ3M7CisKKyAgfSA8Yj5GVENfSW1hZ2VUeXBlUmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIHRoZSB0eXBlIG9mIGltYWdlcyBpbiBhIGdseXBoIGNhY2hlLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlX2lkIj5mYWNlX2lkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZhY2UgSUQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0id2lkdGgiPndpZHRoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHdpZHRoIGluIHBpeGVscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWlnaHQiPmhlaWdodDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBoZWlnaHQgaW4gcGl4ZWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZsYWdzIj5mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBsb2FkIGZsYWdzLCBhcyBpbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVENfSW1hZ2VUeXBlIj5GVENfSW1hZ2VUeXBlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRDX0ltYWdlVHlwZVJlY18qICA8Yj5GVENfSW1hZ2VUeXBlPC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhbiA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlVHlwZVJlYyI+RlRDX0ltYWdlVHlwZVJlYzwvYT4gc3RydWN0dXJlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyIj5GVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DQUNIRV9IIChmdGNhY2hlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUQ19JbWFnZUNhY2hlX0xvb2t1cFNjYWxlcjwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfSW1hZ2VDYWNoZSI+RlRDX0ltYWdlQ2FjaGU8L2E+ICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlciI+RlRDX1NjYWxlcjwvYT4gICAgICBzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gICAgICAgKmFnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX05vZGUiPkZUQ19Ob2RlPC9hPiAgICAgICAqYW5vZGUgKTsKKzwvcHJlPgorCis8cD5BIHZhcmlhbnQgb2YgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZUNhY2hlX0xvb2t1cCI+RlRDX0ltYWdlQ2FjaGVfTG9va3VwPC9hPiB0aGF0IHVzZXMgYW4gPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19TY2FsZXJSZWMiPkZUQ19TY2FsZXJSZWM8L2E+IHRvIHNwZWNpZnkgdGhlIGZhY2UgSUQgYW5kIGl0cyBzaXplLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNhY2hlIj5jYWNoZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggaW1hZ2UgY2FjaGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2NhbGVyIj5zY2FsZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSBzY2FsZXIgZGVzY3JpcHRvci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsb2FkX2ZsYWdzIj5sb2FkX2ZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNvcnJlc3BvbmRpbmcgbG9hZCBmbGFncy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJnaW5kZXgiPmdpbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbmRleCB0byByZXRyaWV2ZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFnbHlwaCI+YWdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNvcnJlc3BvbmRpbmcgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+IG9iamVjdC4gMCZuYnNwO2luIGNhc2Ugb2YgZmFpbHVyZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbm9kZSI+YW5vZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50IChzZWUgbm90ZSBiZWxvdykuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSByZXR1cm5lZCBnbHlwaCBpcyBvd25lZCBhbmQgbWFuYWdlZCBieSB0aGUgZ2x5cGggaW1hZ2UgY2FjaGUuIE5ldmVyIHRyeSB0byB0cmFuc2Zvcm0gb3IgZGlzY2FyZCBpdCBtYW51YWxseSEgWW91IGNhbiBob3dldmVyIGNyZWF0ZSBhIGNvcHkgd2l0aCA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoX0NvcHkiPkZUX0dseXBoX0NvcHk8L2E+IGFuZCBtb2RpZnkgdGhlIG5ldyBvbmUuPC9wPgorPHA+SWYgJmxzcXVvO2Fub2RlJnJzcXVvOyBpcyA8aT5ub3Q8L2k+IE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSBub2RlIGNvbnRhaW5pbmcgdGhlIGdseXBoIGltYWdlLCBhZnRlciBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4pIHdpbGwgYWx3YXlzIGJlIGtlcHQgaW4gdGhlIGNhY2hlIHVudGlsIHlvdSBjYWxsIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTm9kZV9VbnJlZiI+RlRDX05vZGVfVW5yZWY8L2E+IHRvICZsc3F1bztyZWxlYXNlJnJzcXVvOyBpdC48L3A+Cis8cD5JZiAmbHNxdW87YW5vZGUmcnNxdW87IGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyB0aGF0IHRoZSA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0IGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gRG9uJ3QgYXNzdW1lIHRoYXQgaXQgaXMgcGVyc2lzdGVudCE8L3A+Cis8cD5DYWxscyB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiBhbmQgZnJpZW5kcyBoYXZlIG5vIGVmZmVjdCBvbiBjYWNoZWQgZ2x5cGhzOyB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIEZyZWVUeXBlIGNhY2hlIEFQSSBpbnN0ZWFkLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX1NCaXRSZWMiPkZUQ19TQml0UmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUQ19TQml0UmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICB3aWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgIGhlaWdodDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPiAgIGxlZnQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQ2hhciI+RlRfQ2hhcjwvYT4gICB0b3A7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgIGZvcm1hdDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgIG1heF9ncmF5czsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICBwaXRjaDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPiAgIHhhZHZhbmNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0NoYXIiPkZUX0NoYXI8L2E+ICAgeWFkdmFuY2U7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiogIGJ1ZmZlcjsKKworICB9IDxiPkZUQ19TQml0UmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHZlcnkgY29tcGFjdCBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIHNtYWxsIGdseXBoIGJpdG1hcC48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0id2lkdGgiPndpZHRoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGJpdG1hcCB3aWR0aCBpbiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaGVpZ2h0Ij5oZWlnaHQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYml0bWFwIGhlaWdodCBpbiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGVmdCI+bGVmdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGZyb20gdGhlIHBlbiBwb3NpdGlvbiB0byB0aGUgbGVmdCBiaXRtYXAgYm9yZGVyIChhLmsuYS4gJmxzcXVvO2xlZnQgc2lkZSBiZWFyaW5nJnJzcXVvOywgb3IgJmxzcXVvO2xzYiZyc3F1bzspLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRvcCI+dG9wPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20gdGhlIHBlbiBwb3NpdGlvbiAob24gdGhlIGJhc2VsaW5lKSB0byB0aGUgdXBwZXIgYml0bWFwIGJvcmRlciAoYS5rLmEuICZsc3F1bzt0b3Agc2lkZSBiZWFyaW5nJnJzcXVvOykuIFRoZSBkaXN0YW5jZSBpcyBwb3NpdGl2ZSBmb3IgdXB3YXJkcyB5Jm5ic3A7Y29vcmRpbmF0ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZm9ybWF0Ij5mb3JtYXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZm9ybWF0IG9mIHRoZSBnbHlwaCBiaXRtYXAgKG1vbm9jaHJvbWUgb3IgZ3JheSkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWF4X2dyYXlzIj5tYXhfZ3JheXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5NYXhpbXVtIGdyYXkgbGV2ZWwgdmFsdWUgKGluIHRoZSByYW5nZSAxIHRvJm5ic3A7MjU1KS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwaXRjaCI+cGl0Y2g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBiaXRtYXAgbGluZS4gTWF5IGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InhhZHZhbmNlIj54YWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIGFkdmFuY2Ugd2lkdGggaW4gcGl4ZWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InlhZHZhbmNlIj55YWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2ZXJ0aWNhbCBhZHZhbmNlIGhlaWdodCBpbiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYnVmZmVyIj5idWZmZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIiPkZUQ19TQml0Q2FjaGVfTG9va3VwU2NhbGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0FDSEVfSCAoZnRjYWNoZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlcjwvYj4oIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdENhY2hlIj5GVENfU0JpdENhY2hlPC9hPiAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlciI+RlRDX1NjYWxlcjwvYT4gICAgIHNjYWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXQiPkZUQ19TQml0PC9hPiAgICAgICpzYml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19Ob2RlIj5GVENfTm9kZTwvYT4gICAgICAqYW5vZGUgKTsKKzwvcHJlPgorCis8cD5BIHZhcmlhbnQgb2YgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19TQml0Q2FjaGVfTG9va3VwIj5GVENfU0JpdENhY2hlX0xvb2t1cDwvYT4gdGhhdCB1c2VzIGFuIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU2NhbGVyUmVjIj5GVENfU2NhbGVyUmVjPC9hPiB0byBzcGVjaWZ5IHRoZSBmYWNlIElEIGFuZCBpdHMgc2l6ZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjYWNoZSI+Y2FjaGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2NhbGVyIj5zY2FsZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHNjYWxlciBkZXNjcmlwdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxvYWRfZmxhZ3MiPmxvYWRfZmxhZ3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY29ycmVzcG9uZGluZyBsb2FkIGZsYWdzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdpbmRleCI+Z2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGdseXBoIGluZGV4LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2JpdCI+c2JpdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW5vZGUiPmFub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgYmVsb3cpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IgYW5kIGl0cyBiaXQgYnVmZmVyIGFyZSBvd25lZCBieSB0aGUgY2FjaGUgYW5kIHNob3VsZCBuZXZlciBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24uIFRoZXkgbWlnaHQgYXMgd2VsbCBkaXNhcHBlYXIgZnJvbSBtZW1vcnkgb24gdGhlIG5leHQgY2FjaGUgbG9va3VwLCBzbyBkb24ndCB0cmVhdCB0aGVtIGFzIHBlcnNpc3RlbnQgZGF0YS48L3A+Cis8cD5UaGUgZGVzY3JpcHRvcidzICZsc3F1bztidWZmZXImcnNxdW87IGZpZWxkIGlzIHNldCB0byZuYnNwOzAgdG8gaW5kaWNhdGUgYSBtaXNzaW5nIGdseXBoIGJpdG1hcC48L3A+Cis8cD5JZiAmbHNxdW87YW5vZGUmcnNxdW87IGlzIDxpPm5vdDwvaT4gTlVMTCwgaXQgcmVjZWl2ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhY2hlIG5vZGUgY29udGFpbmluZyB0aGUgYml0bWFwLCBhZnRlciBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBpbWFnZSkgd2lsbCBhbHdheXMgYmUga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19Ob2RlX1VucmVmIj5GVENfTm9kZV9VbnJlZjwvYT4gdG8gJmxzcXVvO3JlbGVhc2UmcnNxdW87IGl0LjwvcD4KKzxwPklmICZsc3F1bzthbm9kZSZyc3F1bzsgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGJpdG1hcCBjb3VsZCBiZSBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgb24gdGhlIG5leHQgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiBEb24ndCBhc3N1bWUgdGhhdCBpdCBpcyBwZXJzaXN0ZW50ITwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNmZl9kcml2ZXIuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItY2ZmX2RyaXZlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYWVhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNmZl9kcml2ZXIuaHRtbApAQCAtMCwwICsxLDIyNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlRoZSBDRkYgZHJpdmVyPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI2hpbnRpbmctZW5naW5lIj5oaW50aW5nLWVuZ2luZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjZGFya2VuaW5nLXBhcmFtZXRlcnMiPmRhcmtlbmluZy1wYXJhbWV0ZXJzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9DRkZfSElOVElOR19YWFgiPkZUX0NGRl9ISU5USU5HX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNuby1zdGVtLWRhcmtlbmluZyI+bm8tc3RlbS1kYXJrZW5pbmc8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5XaGlsZSBGcmVlVHlwZSdzIENGRiBkcml2ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieSBpdHNlbGYsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X1NldCI+RlRfUHJvcGVydHlfU2V0PC9hPiBhbmQgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+LiBUaGUgbGlzdCBiZWxvdyBnaXZlcyB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXMgdG9nZXRoZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IG1hY3JvcyBhbmQgc3RydWN0dXJlcy48L3A+Cis8cD5UaGUgQ0ZGIGRyaXZlcidzIG1vZHVsZSBuYW1lIGlzICZsc3F1bztjZmYmcnNxdW87LjwvcD4KKzxwPjxiPkhpbnRpbmc8L2I+IDxiPmFuZDwvYj4gPGI+YW50aWFsaWFzaW5nPC9iPiA8Yj5wcmluY2lwbGVzPC9iPiA8Yj5vZjwvYj4gPGI+dGhlPC9iPiA8Yj5uZXc8L2I+IDxiPmVuZ2luZTwvYj48L3A+Cis8cD5UaGUgcmFzdGVyaXplciBpcyBwb3NpdGlvbmluZyBob3Jpem9udGFsIGZlYXR1cmVzIChlLmcuLCBhc2NlbmRlciBoZWlnaHQgJmFtcDsgeC1oZWlnaHQsIG9yIGNyb3NzYmFycykgb24gdGhlIHBpeGVsIGdyaWQgYW5kIG1pbmltaXppbmcgdGhlIGFtb3VudCBvZiBhbnRpYWxpYXNpbmcgYXBwbGllZCB0byB0aGVtLCB3aGlsZSBwbGFjaW5nIHZlcnRpY2FsIGZlYXR1cmVzICh2ZXJ0aWNhbCBzdGVtcykgb24gdGhlIHBpeGVsIGdyaWQgd2l0aG91dCBoaW50aW5nLCB0aHVzIHJlcHJlc2VudGluZyB0aGUgc3RlbSBwb3NpdGlvbiBhbmQgd2VpZ2h0IGFjY3VyYXRlbHkuIFNvbWV0aW1lcyB0aGUgdmVydGljYWwgc3RlbXMgbWF5IGJlIG9ubHkgcGFydGlhbGx5IGJsYWNrLiBJbiB0aGlzIGNvbnRleHQsICZsc3F1bzthbnRpYWxpYXNpbmcmcnNxdW87IG1lYW5zIHRoYXQgc3RlbXMgYXJlIG5vdCBwb3NpdGlvbmVkIGV4YWN0bHkgb24gcGl4ZWwgYm9yZGVycywgY2F1c2luZyBhIGZ1enp5IGFwcGVhcmFuY2UuPC9wPgorPHA+VGhlcmUgYXJlIHR3byBwcmluY2lwbGVzIGJlaGluZCB0aGlzIGFwcHJvYWNoLjwvcD4KKzxwPjEpIE5vIGhpbnRpbmcgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uOiBVbmxpa2UgJmxzcXVvO3N1cGVyaGludGVkJnJzcXVvOyBUcnVlVHlwZSwgd2hpY2ggY2hhbmdlcyBnbHlwaCB3aWR0aHMgdG8gYWNjb21tb2RhdGUgcmVndWxhciBpbnRlci1nbHlwaCBzcGFjaW5nLCBBZG9iZSdzIGFwcHJvYWNoIGlzICZsc3F1bztmYWl0aGZ1bCB0byB0aGUgZGVzaWduJnJzcXVvOyBpbiByZXByZXNlbnRpbmcgYm90aCB0aGUgZ2x5cGggd2lkdGggYW5kIHRoZSBpbnRlci1nbHlwaCBzcGFjaW5nIGRlc2lnbmVkIGZvciB0aGUgZm9udC4gVGhpcyBtYWtlcyB0aGUgc2NyZWVuIGRpc3BsYXkgYXMgY2xvc2UgYXMgaXQgY2FuIGJlIHRvIHRoZSByZXN1bHQgb25lIHdvdWxkIGdldCB3aXRoIGluZmluaXRlIHJlc29sdXRpb24sIHdoaWxlIHByZXNlcnZpbmcgd2hhdCBpcyBjb25zaWRlcmVkIHRoZSBrZXkgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggZ2x5cGguIE5vdGUgdGhhdCB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdW5oaW50ZWQgYW5kIGdyaWQtZml0dGVkIHBvc2l0aW9ucyBhdCBzbWFsbCBzaXplcyBhcmUgY29tcGFyYWJsZSB0byBrZXJuaW5nIHZhbHVlcyBhbmQgdGh1cyB3b3VsZCBiZSBub3RpY2VhYmxlIChhbmQgZGlzdHJhY3RpbmcpIHdoaWxlIHJlYWRpbmcgaWYgaGludGluZyB3ZXJlIGFwcGxpZWQuPC9wPgorPHA+T25lIG9mIHRoZSByZWFzb25zIHRvIG5vdCBoaW50IGhvcml6b250YWxseSBpcyBhbnRpYWxpYXNpbmcgZm9yIExDRCBzY3JlZW5zOiBUaGUgcGl4ZWwgZ2VvbWV0cnkgb2YgbW9kZXJuIGRpc3BsYXlzIHN1cHBsaWVzIHRocmVlIHZlcnRpY2FsIHN1Yi1waXhlbHMgYXMgdGhlIGV5ZSBtb3ZlcyBob3Jpem9udGFsbHkgYWNyb3NzIGVhY2ggdmlzaWJsZSBwaXhlbC4gT24gZGV2aWNlcyB3aGVyZSB3ZSBjYW4gYmUgY2VydGFpbiB0aGlzIGNoYXJhY3RlcmlzdGljIGlzIHByZXNlbnQgYSByYXN0ZXJpemVyIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgc3ViLXBpeGVscyB0byBhZGQgaW5jcmVtZW50cyBvZiB3ZWlnaHQuIEluIFdlc3Rlcm4gd3JpdGluZyBzeXN0ZW1zIHRoaXMgdHVybnMgb3V0IHRvIGJlIHRoZSBtb3JlIGNyaXRpY2FsIGRpcmVjdGlvbiBhbnl3YXk7IHRoZSB3ZWlnaHRzIGFuZCBzcGFjaW5nIG9mIHZlcnRpY2FsIHN0ZW1zIChzZWUgYWJvdmUpIGFyZSBjZW50cmFsIHRvIEFybWVuaWFuLCBDeXJpbGxpYywgR3JlZWssIGFuZCBMYXRpbiB0eXBlIGRlc2lnbnMuIEV2ZW4gd2hlbiB0aGUgcmFzdGVyaXplciB1c2VzIGdyZXlzY2FsZSBhbnRpYWxpYXNpbmcgaW5zdGVhZCBvZiBjb2xvciAoYSBuZWNlc3NhcnkgY29tcHJvbWlzZSB3aGVuIG9uZSBkb2Vzbid0IGtub3cgdGhlIHNjcmVlbiBjaGFyYWN0ZXJpc3RpY3MpLCB0aGUgdW5oaW50ZWQgdmVydGljYWwgZmVhdHVyZXMgcHJlc2VydmUgdGhlIGRlc2lnbidzIHdlaWdodCBhbmQgc3BhY2luZyBtdWNoIGJldHRlciB0aGFuIGFsaWFzZWQgdHlwZSB3b3VsZC48L3A+Cis8cD4yKSBBbGlnbWVudCBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uOiBXZWlnaHRzIGFuZCBzcGFjaW5nIGFsb25nIHRoZSB5Jm5ic3A7YXhpcyBhcmUgbGVzcyBjcml0aWNhbDsgd2hhdCBpcyBtdWNoIG1vcmUgaW1wb3J0YW50IGlzIHRoZSB2aXN1YWwgYWxpZ25tZW50IG9mIHJlbGF0ZWQgZmVhdHVyZXMgKGxpa2UgY2FwLWhlaWdodCBhbmQgeC1oZWlnaHQpLiBUaGUgc2Vuc2Ugb2YgYWxpZ25tZW50IGZvciB0aGVzZSBpcyBlbmhhbmNlZCBieSB0aGUgc2hhcnBuZXNzIG9mIGdyaWQtZml0IGVkZ2VzLCB3aGlsZSB0aGUgY3J1ZGVyIHZlcnRpY2FsIHJlc29sdXRpb24gKGZ1bGwgcGl4ZWxzIGluc3RlYWQgb2YgMS8zIHBpeGVscykgaXMgbGVzcyBvZiBhIHByb2JsZW0uPC9wPgorPHA+T24gdGhlIHRlY2huaWNhbCBzaWRlLCBob3Jpem9udGFsIGFsaWdubWVudCB6b25lcyBmb3IgYXNjZW5kZXIsIHgtaGVpZ2h0LCBhbmQgb3RoZXIgaW1wb3J0YW50IGhlaWdodCB2YWx1ZXMgKHRyYWRpdGlvbmFsbHkgY2FsbGVkICZsc3F1bztibHVlIHpvbmVzJnJzcXVvOykgYXMgZGVmaW5lZCBpbiB0aGUgZm9udCBhcmUgcG9zaXRpb25lZCBpbmRlcGVuZGVudGx5LCBlYWNoIGJlaW5nIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgcGl4ZWwgZWRnZSwgdGFraW5nIGNhcmUgb2Ygb3ZlcnNob290IHN1cHByZXNzaW9uIGF0IHNtYWxsIHNpemVzLCBzdGVtIGRhcmtlbmluZywgYW5kIHNjYWxpbmcuPC9wPgorPHA+SHN0ZW1zICh0aGlzIGlzLCBoaW50IHZhbHVlcyBkZWZpbmVkIGluIHRoZSBmb250IHRvIGhlbHAgYWxpZ24gaG9yaXpvbnRhbCBmZWF0dXJlcykgdGhhdCBmYWxsIHdpdGhpbiBhIGJsdWUgem9uZSBhcmUgc2FpZCB0byBiZSAmbHNxdW87Y2FwdHVyZWQmcnNxdW87IGFuZCBhcmUgYWxpZ25lZCB0byB0aGF0IHpvbmUuIFVuY2FwdHVyZWQgc3RlbXMgYXJlIG1vdmVkIGluIG9uZSBvZiBmb3VyIHdheXMsIHRvcCBlZGdlIHVwIG9yIGRvd24sIGJvdHRvbSBlZGdlIHVwIG9yIGRvd24uIFVubGVzcyB0aGVyZSBhcmUgY29uZmxpY3RpbmcgaHN0ZW1zLCB0aGUgc21hbGxlc3QgbW92ZW1lbnQgaXMgdGFrZW4gdG8gbWluaW1pemUgZGlzdG9ydGlvbi48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJoaW50aW5nLWVuZ2luZSI+aGludGluZy1lbmdpbmU8L2gzPgorCis8cD5UaGFua3MgdG8gQWRvYmUsIHdoaWNoIGNvbnRyaWJ1dGVkIGEgbmV3IGhpbnRpbmcgKGFuZCBwYXJzaW5nKSBlbmdpbmUsIGFuIGFwcGxpY2F0aW9uIGNhbiBzZWxlY3QgYmV0d2VlbiAmbHNxdW87ZnJlZXR5cGUmcnNxdW87IGFuZCAmbHNxdW87YWRvYmUmcnNxdW87IGlmIGNvbXBpbGVkIHdpdGggQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORS4gSWYgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIGlzbid0IGRlZmluZWQsICZsc3F1bztoaW50aW5nLWVuZ2luZSZyc3F1bzsgZG9lcyBub3RoaW5nLjwvcD4KKzxwPlRoZSBkZWZhdWx0IGVuZ2luZSBpcyAmbHNxdW87ZnJlZXR5cGUmcnNxdW87IGlmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgaXMgZGVmaW5lZCwgYW5kICZsc3F1bzthZG9iZSZyc3F1bzsgb3RoZXJ3aXNlLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gc2VsZWN0IEFkb2JlJ3MgaGludGluZyBlbmdpbmUgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgIEZUX1VJbnQgICAgIGhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7CisKKworICBGVF9Jbml0X0ZyZWVUeXBlKCAmYW1wO2xpYnJhcnkgKTsKKworICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJjZmYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaW50aW5nLWVuZ2luZSIsICZhbXA7aGludGluZ19lbmdpbmUgKTsKKzwvcHJlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+IGFsc28uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJuby1zdGVtLWRhcmtlbmluZyI+bm8tc3RlbS1kYXJrZW5pbmc8L2gzPgorCis8cD5CeSBkZWZhdWx0LCB0aGUgQWRvYmUgQ0ZGIGVuZ2luZSBkYXJrZW5zIHN0ZW1zIGF0IHNtYWxsZXIgc2l6ZXMsIHJlZ2FyZGxlc3Mgb2YgaGludGluZywgdG8gZW5oYW5jZSBjb250cmFzdC4gVGhpcyBmZWF0dXJlIHJlcXVpcmVzIGEgcmVuZGVyaW5nIHN5c3RlbSB3aXRoIHByb3BlciBnYW1tYSBjb3JyZWN0aW9uLiBTZXR0aW5nIHRoaXMgcHJvcGVydHksIHN0ZW0gZGFya2VuaW5nIGdldHMgc3dpdGNoZWQgb2ZmLjwvcD4KKzxwPk5vdGUgdGhhdCBzdGVtIGRhcmtlbmluZyBpcyBuZXZlciBhcHBsaWVkIGlmIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX1NDQUxFPC9hPiBpcyBzZXQuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgIEZUX0Jvb2wgICAgIG5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKKworCisgIEZUX0luaXRfRnJlZVR5cGUoICZhbXA7bGlicmFyeSApOworCisgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImNmZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vLXN0ZW0tZGFya2VuaW5nIiwgJmFtcDtub19zdGVtX2RhcmtlbmluZyApOworPC9wcmU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Qcm9wZXJ0eV9HZXQiPkZUX1Byb3BlcnR5X0dldDwvYT4gYWxzby48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9ImRhcmtlbmluZy1wYXJhbWV0ZXJzIj5kYXJrZW5pbmctcGFyYW1ldGVyczwvaDM+CisKKzxwPkJ5IGRlZmF1bHQsIHRoZSBBZG9iZSBDRkYgZW5naW5lIGRhcmtlbnMgc3RlbXMgYXMgZm9sbG93cyAoaWYgdGhlICZsc3F1bztuby1zdGVtLWRhcmtlbmluZyZyc3F1bzsgcHJvcGVydHkgaXNuJ3Qgc2V0KTo8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgc3RlbSB3aWR0aCAmbHQ7PSAwLjVweDogICBkYXJrZW5pbmcgYW1vdW50ID0gMC40cHgKKyAgc3RlbSB3aWR0aCAgPSAxcHg6ICAgICBkYXJrZW5pbmcgYW1vdW50ID0gMC4yNzVweAorICBzdGVtIHdpZHRoICA9IDEuNjY3cHg6IGRhcmtlbmluZyBhbW91bnQgPSAwLjI3NXB4CisgIHN0ZW0gd2lkdGggJmd0Oz0gMi4zMzNweDogZGFya2VuaW5nIGFtb3VudCA9IDBweAorPC9wcmU+Cis8cD5hbmQgcGllY2V3aXNlIGxpbmVhciBpbi1iZXR3ZWVuLiBBdCBjb25maWd1cmF0aW9uIHRpbWUsIHRoZXNlIGZvdXIgY29udHJvbCBwb2ludHMgY2FuIGJlIHNldCB3aXRoIHRoZSBtYWNybyAmbHNxdW87Q0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUlMmcnNxdW87LiBBdCBydW50aW1lLCB0aGUgY29udHJvbCBwb2ludHMgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlICZsc3F1bztkYXJrZW5pbmctcGFyYW1ldGVycyZyc3F1bzsgcHJvcGVydHksIGFzIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgIEZUX0ludCAgICAgIGRhcmtlbl9wYXJhbXNbOF0gPSB7ICA1MDAsIDMwMCwgICAvLyB4MSwgeTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMjAwLCAgIC8vIHgyLCB5MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwLCAxMDAsICAgLy8geDMsIHkzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAsICAgMCB9OyAvLyB4NCwgeTQKKworCisgIEZUX0luaXRfRnJlZVR5cGUoICZhbXA7bGlicmFyeSApOworCisgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImNmZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhcmtlbmluZy1wYXJhbWV0ZXJzIiwgZGFya2VuX3BhcmFtcyApOworPC9wcmU+Cis8cD5UaGUgeCZuYnNwO3ZhbHVlcyBnaXZlIHRoZSBzdGVtIHdpZHRoLCBhbmQgdGhlIHkmbmJzcDt2YWx1ZXMgdGhlIGRhcmtlbmluZyBhbW91bnQuIFRoZSB1bml0IGlzIDEwMDB0aCBvZiBwaXhlbHMuIEFsbCBjb29yZGluYXRlIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlOyB0aGUgeCZuYnNwO3ZhbHVlcyBtdXN0IGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZzsgdGhlIHkmbmJzcDt2YWx1ZXMgbXVzdCBiZSBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgYW5kIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byA1MDAgKGNvcnJlc3BvbmRpbmcgdG8gaGFsZiBhIHBpeGVsKTsgdGhlIHNsb3BlIG9mIGVhY2ggbGluZWFyIHBpZWNlIG11c3QgYmUgc2hhbGxvd2VyIHRoYW4gLTEgKGUuZy4sIC0uNCkuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUHJvcGVydHlfR2V0Ij5GVF9Qcm9wZXJ0eV9HZXQ8L2E+IGFsc28uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DRkZfSElOVElOR19YWFgiPkZUX0NGRl9ISU5USU5HX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0NGRl9EUklWRVJfSCAoZnRjZmZkcnYuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWNmZl9kcml2ZXIuaHRtbCNGVF9DRkZfSElOVElOR19GUkVFVFlQRSI+RlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEU8L2E+ICAwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1jZmZfZHJpdmVyLmh0bWwjRlRfQ0ZGX0hJTlRJTkdfQURPQkUiPkZUX0NGRl9ISU5USU5HX0FET0JFPC9hPiAgICAgMQorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCBmb3IgdGhlIDxhIGhyZWY9ImZ0Mi1jZmZfZHJpdmVyLmh0bWwjaGludGluZy1lbmdpbmUiPmhpbnRpbmctZW5naW5lPC9hPiBwcm9wZXJ0eSB0byBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBDRkYgZm9udHMuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFIj5GVF9DRkZfSElOVElOR19GUkVFVFlQRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzZSB0aGUgb2xkIEZyZWVUeXBlIGhpbnRpbmcgZW5naW5lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0NGRl9ISU5USU5HX0FET0JFIj5GVF9DRkZfSElOVElOR19BRE9CRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzZSB0aGUgaGludGluZyBlbmdpbmUgY29udHJpYnV0ZWQgYnkgQWRvYmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNpZF9mb250cy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1jaWRfZm9udHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY5ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1jaWRfZm9udHMuaHRtbApAQCAtMCwwICsxLDI0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkNJRCBGb250czwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQiPkZUX0dldF9DSURfUmVnaXN0cnlfT3JkZXJpbmdfU3VwcGxlbWVudDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQ0lEX0lzX0ludGVybmFsbHlfQ0lEX0tleWVkIj5GVF9HZXRfQ0lEX0lzX0ludGVybmFsbHlfQ0lEX0tleWVkPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0dldF9DSURfRnJvbV9HbHlwaF9JbmRleCI+RlRfR2V0X0NJRF9Gcm9tX0dseXBoX0luZGV4PC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBDSUQta2V5ZWQgZm9udCBzcGVjaWZpYyBmdW5jdGlvbnMuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X0NJRF9SZWdpc3RyeV9PcmRlcmluZ19TdXBwbGVtZW50Ij5GVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DSURfSCAoZnRjaWQuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X0NJRF9SZWdpc3RyeV9PcmRlcmluZ19TdXBwbGVtZW50PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogICpvcmRlcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgKnN1cHBsZW1lbnQpOworPC9wcmU+CisKKzxwPlJldHJpZXZlIHRoZSBSZWdpc3RyeS9PcmRlcmluZy9TdXBwbGVtZW50IHRyaXBsZSAoYWxzbyBrbm93biBhcyB0aGUgIlIvTy9TIikgZnJvbSBhIENJRC1rZXllZCBmb250LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJlZ2lzdHJ5Ij5yZWdpc3RyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByZWdpc3RyeSwgYXMgYSBDJm5ic3A7c3RyaW5nLCBvd25lZCBieSB0aGUgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvcmRlcmluZyI+b3JkZXJpbmc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgb3JkZXJpbmcsIGFzIGEgQyZuYnNwO3N0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3VwcGxlbWVudCI+c3VwcGxlbWVudDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzdXBwbGVtZW50LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBDSUQgZmFjZXMsIHJldHVybmluZyBhbiBlcnJvciBvdGhlcndpc2UuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjY8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQiPkZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9DSURfSCAoZnRjaWQuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X0NJRF9Jc19JbnRlcm5hbGx5X0NJRF9LZXllZDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICppc19jaWQgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgdHlwZSBvZiB0aGUgaW5wdXQgZmFjZSwgQ0lEIGtleWVkIG9yIG5vdC4gSW4gY29uc3RyYXN0IHRvIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9JU19DSURfS0VZRUQiPkZUX0lTX0NJRF9LRVlFRDwvYT4gbWFjcm8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSBhbHNvIGZvciBDSUQta2V5ZWQgZm9udHMgaW4gYW4gU05GVCB3cmFwcGVyLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImlzX2NpZCI+aXNfY2lkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHR5cGUgb2YgdGhlIGZhY2UgYXMgYW4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIENJRCBmYWNlcyBhbmQgT3BlblR5cGUgZm9udHMsIHJldHVybmluZyBhbiBlcnJvciBvdGhlcndpc2UuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjk8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9DSURfRnJvbV9HbHlwaF9JbmRleCI+RlRfR2V0X0NJRF9Gcm9tX0dseXBoX0luZGV4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQ0lEX0ggKGZ0Y2lkLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9DSURfRnJvbV9HbHlwaF9JbmRleDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAqY2lkICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIENJRCBvZiB0aGUgaW5wdXQgZ2x5cGggaW5kZXguPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdseXBoX2luZGV4Ij5nbHlwaF9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbnB1dCBnbHlwaCBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNpZCI+Y2lkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIENJRCBhcyBhbiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQ0lEIGZhY2VzIGFuZCBPcGVuVHlwZSBmb250cywgcmV0dXJuaW5nIGFuIGVycm9yIG90aGVyd2lzZS48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuOTwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWNvbXB1dGF0aW9ucy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1jb21wdXRhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODM0Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1jb21wdXRhdGlvbnMuaHRtbApAQCAtMCwwICsxLDcwMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkNvbXB1dGF0aW9uczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9NdWxEaXYiPkZUX011bERpdjwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfQXRhbjIiPkZUX0F0YW4yPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX011bEZpeCI+RlRfTXVsRml4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0FuZ2xlX0RpZmYiPkZUX0FuZ2xlX0RpZmY8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRGl2Rml4Ij5GVF9EaXZGaXg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0FOR0xFX1BJIj5GVF9BTkdMRV9QSTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVmVjdG9yX1VuaXQiPkZUX1ZlY3Rvcl9Vbml0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1JvdW5kRml4Ij5GVF9Sb3VuZEZpeDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQU5HTEVfMlBJIj5GVF9BTkdMRV8yUEk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZlY3Rvcl9Sb3RhdGUiPkZUX1ZlY3Rvcl9Sb3RhdGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQ2VpbEZpeCI+RlRfQ2VpbEZpeDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQU5HTEVfUEkyIj5GVF9BTkdMRV9QSTI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZlY3Rvcl9MZW5ndGgiPkZUX1ZlY3Rvcl9MZW5ndGg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRmxvb3JGaXgiPkZUX0Zsb29yRml4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BTkdMRV9QSTQiPkZUX0FOR0xFX1BJNDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVmVjdG9yX1BvbGFyaXplIj5GVF9WZWN0b3JfUG9sYXJpemU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVmVjdG9yX1RyYW5zZm9ybSI+RlRfVmVjdG9yX1RyYW5zZm9ybTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2luIj5GVF9TaW48L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZlY3Rvcl9Gcm9tX1BvbGFyIj5GVF9WZWN0b3JfRnJvbV9Qb2xhcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9NYXRyaXhfTXVsdGlwbHkiPkZUX01hdHJpeF9NdWx0aXBseTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQ29zIj5GVF9Db3M8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTWF0cml4X0ludmVydCI+RlRfTWF0cml4X0ludmVydDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVGFuIj5GVF9UYW48L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBmdW5jdGlvbnMgdXNlZCB0byBwZXJmb3JtIGNvbXB1dGF0aW9ucyBvbiAxNi4xNiBmaXhlZC1mbG9hdCBudW1iZXJzIG9yIDJkIHZlY3RvcnMuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTXVsRGl2Ij5GVF9NdWxEaXY8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICkKKyAgPGI+RlRfTXVsRGl2PC9iPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGEsCisgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGIsCisgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGMgKTsKKzwvcHJlPgorCis8cD5BIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gJmxzcXVvOyhhKmIpL2MmcnNxdW87IHdpdGggbWF4aW11bSBhY2N1cmFjeSAoaXQgdXNlcyBhIDY0LWJpdCBpbnRlcm1lZGlhdGUgaW50ZWdlciB3aGVuZXZlciBuZWNlc3NhcnkpLjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gaXNuJ3QgbmVjZXNzYXJpbHkgYXMgZmFzdCBhcyBzb21lIHByb2Nlc3NvciBzcGVjaWZpYyBvcGVyYXRpb25zLCBidXQgaXMgYXQgbGVhc3QgY29tcGxldGVseSBwb3J0YWJsZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhIj5hPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZpcnN0IG11bHRpcGxpZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYiI+YjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzZWNvbmQgbXVsdGlwbGllci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjIj5jPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGRpdmlzb3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgcmVzdWx0IG9mICZsc3F1bzsoYSpiKS9jJnJzcXVvOy4gVGhpcyBmdW5jdGlvbiBuZXZlciB0cmFwcyB3aGVuIHRyeWluZyB0byBkaXZpZGUgYnkgemVybzsgaXQgc2ltcGx5IHJldHVybnMgJmxzcXVvO01heEludCZyc3F1bzsgb3IgJmxzcXVvO01pbkludCZyc3F1bzsgZGVwZW5kaW5nIG9uIHRoZSBzaWducyBvZiAmbHNxdW87YSZyc3F1bzsgYW5kICZsc3F1bztiJnJzcXVvOy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX011bEZpeCI+RlRfTXVsRml4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiApCisgIDxiPkZUX011bEZpeDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICBhLAorICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICBiICk7Cis8L3ByZT4KKworPHA+QSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uICZsc3F1bzsoYSpiKS8weDEwMDAwJnJzcXVvOyB3aXRoIG1heGltdW0gYWNjdXJhY3kuIE1vc3Qgb2YgdGhlIHRpbWUgdGhpcyBpcyB1c2VkIHRvIG11bHRpcGx5IGEgZ2l2ZW4gdmFsdWUgYnkgYSAxNi4xNiBmaXhlZC1wb2ludCBmYWN0b3IuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYSI+YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmaXJzdCBtdWx0aXBsaWVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImIiPmI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc2Vjb25kIG11bHRpcGxpZXIuIFVzZSBhIDE2LjE2IGZhY3RvciBoZXJlIHdoZW5ldmVyIHBvc3NpYmxlIChzZWUgbm90ZSBiZWxvdykuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgcmVzdWx0IG9mICZsc3F1bzsoYSpiKS8weDEwMDAwJnJzcXVvOy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgJmxzcXVvO2EmcnNxdW87IGlzIGxlc3MgdGhhbiAyMDQ4LCBhbmQgJmxzcXVvO2ImcnNxdW87IGlzIGEgMTYuMTYgc2NhbGluZyBmYWN0b3IuIEFzIHRoaXMgaGFwcGVucyBtYWlubHkgd2hlbiBzY2FsaW5nIGZyb20gbm90aW9uYWwgdW5pdHMgdG8gZnJhY3Rpb25hbCBwaXhlbHMgaW4gRnJlZVR5cGUsIGl0IHJlc3VsdGVkIGluIG5vdGljZWFibGUgc3BlZWQgaW1wcm92ZW1lbnRzIGJldHdlZW4gdmVyc2lvbnMgMi54IGFuZCAxLnguPC9wPgorPHA+QXMgYSBjb25jbHVzaW9uLCBhbHdheXMgdHJ5IHRvIHBsYWNlIGEgMTYuMTYgZmFjdG9yIGFzIHRoZSA8aT5zZWNvbmQ8L2k+IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb247IHRoaXMgY2FuIG1ha2UgYSBncmVhdCBkaWZmZXJlbmNlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRGl2Rml4Ij5GVF9EaXZGaXg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICkKKyAgPGI+RlRfRGl2Rml4PC9iPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGEsCisgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGIgKTsKKzwvcHJlPgorCis8cD5BIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gJmxzcXVvOyhhKjB4MTAwMDApL2ImcnNxdW87IHdpdGggbWF4aW11bSBhY2N1cmFjeS4gTW9zdCBvZiB0aGUgdGltZSwgdGhpcyBpcyB1c2VkIHRvIGRpdmlkZSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImEiPmE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtZXJhdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImIiPmI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZGVub21pbmF0b3IuIFVzZSBhIDE2LjE2IGZhY3RvciBoZXJlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIHJlc3VsdCBvZiAmbHNxdW87KGEqMHgxMDAwMCkvYiZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Sb3VuZEZpeCI+RlRfUm91bmRGaXg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gKQorICA8Yj5GVF9Sb3VuZEZpeDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gIGEgKTsKKzwvcHJlPgorCis8cD5BIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcm91bmQgYSAxNi4xNiBmaXhlZCBudW1iZXIuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYSI+YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgdG8gYmUgcm91bmRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSByZXN1bHQgb2YgJmxzcXVvOyhhICsgMHg4MDAwKSAmYW1wOyAtMHgxMDAwMCZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DZWlsRml4Ij5GVF9DZWlsRml4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICkKKyAgPGI+RlRfQ2VpbEZpeDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gIGEgKTsKKzwvcHJlPgorCis8cD5BIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgY2VpbGluZyBmdW5jdGlvbiBvZiBhIDE2LjE2IGZpeGVkIG51bWJlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhIj5hPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGNlaWxpbmcgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgcmVzdWx0IG9mICZsc3F1bzsoYSArIDB4MTAwMDAgLSAxKSAmYW1wOyAtMHgxMDAwMCZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GbG9vckZpeCI+RlRfRmxvb3JGaXg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gKQorICA8Yj5GVF9GbG9vckZpeDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gIGEgKTsKKzwvcHJlPgorCis8cD5BIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgZmxvb3IgZnVuY3Rpb24gb2YgYSAxNi4xNiBmaXhlZCBudW1iZXIuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYSI+YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBmbG9vciBmdW5jdGlvbiBpcyB0byBiZSBjb21wdXRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSByZXN1bHQgb2YgJmxzcXVvO2EgJmFtcDsgLTB4MTAwMDAmcnNxdW87LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVmVjdG9yX1RyYW5zZm9ybSI+RlRfVmVjdG9yX1RyYW5zZm9ybTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfVmVjdG9yX1RyYW5zZm9ybTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogICAgICAgIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NYXRyaXgiPkZUX01hdHJpeDwvYT4qICBtYXRyaXggKTsKKzwvcHJlPgorCis8cD5UcmFuc2Zvcm0gYSBzaW5nbGUgdmVjdG9yIHRocm91Z2ggYSAyeDIgbWF0cml4LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZlY3RvciI+dmVjdG9yPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCB2ZWN0b3IgdG8gdHJhbnNmb3JtLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXRyaXgiPm1hdHJpeDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgc291cmNlIDJ4MiBtYXRyaXguPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHJlc3VsdCBpcyB1bmRlZmluZWQgaWYgZWl0aGVyICZsc3F1bzt2ZWN0b3ImcnNxdW87IG9yICZsc3F1bzttYXRyaXgmcnNxdW87IGlzIGludmFsaWQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9NYXRyaXhfTXVsdGlwbHkiPkZUX01hdHJpeF9NdWx0aXBseTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9NYXRyaXhfTXVsdGlwbHk8L2I+KCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX01hdHJpeCI+RlRfTWF0cml4PC9hPiogIGEsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTWF0cml4Ij5GVF9NYXRyaXg8L2E+KiAgICAgICAgYiApOworPC9wcmU+CisKKzxwPlBlcmZvcm0gdGhlIG1hdHJpeCBvcGVyYXRpb24gJmxzcXVvO2IgPSBhKmImcnNxdW87LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImEiPmE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gbWF0cml4ICZsc3F1bzthJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYiI+YjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byBtYXRyaXggJmxzcXVvO2ImcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIGVpdGhlciAmbHNxdW87YSZyc3F1bzsgb3IgJmxzcXVvO2ImcnNxdW87IGlzIHplcm8uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9NYXRyaXhfSW52ZXJ0Ij5GVF9NYXRyaXhfSW52ZXJ0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR0xZUEhfSCAoZnRnbHlwaC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9NYXRyaXhfSW52ZXJ0PC9iPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTWF0cml4Ij5GVF9NYXRyaXg8L2E+KiAgbWF0cml4ICk7Cis8L3ByZT4KKworPHA+SW52ZXJ0IGEgMngyIG1hdHJpeC4gUmV0dXJuIGFuIGVycm9yIGlmIGl0IGNhbid0IGJlIGludmVydGVkLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hdHJpeCI+bWF0cml4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgbWF0cml4LiBSZW1haW5zIHVudG91Y2hlZCBpbiBjYXNlIG9mIGVycm9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9BbmdsZSI+RlRfQW5nbGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUklHT05PTUVUUllfSCAoZnR0cmlnb24uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gIDxiPkZUX0FuZ2xlPC9iPjsKKzwvcHJlPgorCis8cD5UaGlzIHR5cGUgaXMgdXNlZCB0byBtb2RlbCBhbmdsZSB2YWx1ZXMgaW4gRnJlZVR5cGUuIE5vdGUgdGhhdCB0aGUgYW5nbGUgaXMgYSAxNi4xNiBmaXhlZC1wb2ludCB2YWx1ZSBleHByZXNzZWQgaW4gZGVncmVlcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FOR0xFX1BJIj5GVF9BTkdMRV9QSTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9BTkdMRV9QSTwvYj4gICggMTgwTCAmbHQ7Jmx0OyAxNiApCis8L3ByZT4KKworPHA+VGhlIGFuZ2xlIHBpIGV4cHJlc3NlZCBpbiA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQW5nbGUiPkZUX0FuZ2xlPC9hPiB1bml0cy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FOR0xFXzJQSSI+RlRfQU5HTEVfMlBJPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJJR09OT01FVFJZX0ggKGZ0dHJpZ29uLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0FOR0xFXzJQSTwvYj4gICggPGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX0FOR0xFX1BJIj5GVF9BTkdMRV9QSTwvYT4gKiAyICkKKzwvcHJlPgorCis8cD5UaGUgYW5nbGUgMipwaSBleHByZXNzZWQgaW4gPGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX0FuZ2xlIj5GVF9BbmdsZTwvYT4gdW5pdHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9BTkdMRV9QSTIiPkZUX0FOR0xFX1BJMjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9BTkdMRV9QSTI8L2I+ICAoIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BTkdMRV9QSSI+RlRfQU5HTEVfUEk8L2E+IC8gMiApCis8L3ByZT4KKworPHA+VGhlIGFuZ2xlIHBpLzIgZXhwcmVzc2VkIGluIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+IHVuaXRzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQU5HTEVfUEk0Ij5GVF9BTkdMRV9QSTQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUklHT05PTUVUUllfSCAoZnR0cmlnb24uaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfQU5HTEVfUEk0PC9iPiAgKCA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQU5HTEVfUEkiPkZUX0FOR0xFX1BJPC9hPiAvIDQgKQorPC9wcmU+CisKKzxwPlRoZSBhbmdsZSBwaS80IGV4cHJlc3NlZCBpbiA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQW5nbGUiPkZUX0FuZ2xlPC9hPiB1bml0cy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NpbiI+RlRfU2luPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJJR09OT01FVFJZX0ggKGZ0dHJpZ29uLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiApCisgIDxiPkZUX1NpbjwvYj4oIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICBhbmdsZSApOworPC9wcmU+CisKKzxwPlJldHVybiB0aGUgc2ludXMgb2YgYSBnaXZlbiBhbmdsZSBpbiBmaXhlZC1wb2ludCBmb3JtYXQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW5nbGUiPmFuZ2xlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGlucHV0IGFuZ2xlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIHNpbnVzIHZhbHVlLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+SWYgeW91IG5lZWQgYm90aCB0aGUgc2ludXMgYW5kIGNvc2ludXMgZm9yIGEgZ2l2ZW4gYW5nbGUsIHVzZSB0aGUgZnVuY3Rpb24gPGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX1ZlY3Rvcl9Vbml0Ij5GVF9WZWN0b3JfVW5pdDwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Db3MiPkZUX0NvczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gKQorICA8Yj5GVF9Db3M8L2I+KCA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQW5nbGUiPkZUX0FuZ2xlPC9hPiAgYW5nbGUgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGNvc2ludXMgb2YgYSBnaXZlbiBhbmdsZSBpbiBmaXhlZC1wb2ludCBmb3JtYXQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW5nbGUiPmFuZ2xlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGlucHV0IGFuZ2xlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGNvc2ludXMgdmFsdWUuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiB5b3UgbmVlZCBib3RoIHRoZSBzaW51cyBhbmQgY29zaW51cyBmb3IgYSBnaXZlbiBhbmdsZSwgdXNlIHRoZSBmdW5jdGlvbiA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVmVjdG9yX1VuaXQiPkZUX1ZlY3Rvcl9Vbml0PC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RhbiI+RlRfVGFuPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJJR09OT01FVFJZX0ggKGZ0dHJpZ29uLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiApCisgIDxiPkZUX1RhbjwvYj4oIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICBhbmdsZSApOworPC9wcmU+CisKKzxwPlJldHVybiB0aGUgdGFuZ2VudCBvZiBhIGdpdmVuIGFuZ2xlIGluIGZpeGVkLXBvaW50IGZvcm1hdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbmdsZSI+YW5nbGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5wdXQgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgdGFuZ2VudCB2YWx1ZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0F0YW4yIj5GVF9BdGFuMjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICkKKyAgPGI+RlRfQXRhbjI8L2I+KCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICB4LAorICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgeSApOworPC9wcmU+CisKKzxwPlJldHVybiB0aGUgYXJjLXRhbmdlbnQgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIHZlY3RvciAoeCx5KSBpbiB0aGUgMmQgcGxhbmUuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieCI+eDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIHZlY3RvciBjb29yZGluYXRlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InkiPnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVydGljYWwgdmVjdG9yIGNvb3JkaW5hdGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgYXJjLXRhbmdlbnQgdmFsdWUgKGkuZS4gYW5nbGUpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQW5nbGVfRGlmZiI+RlRfQW5nbGVfRGlmZjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICkKKyAgPGI+RlRfQW5nbGVfRGlmZjwvYj4oIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICBhbmdsZTEsCisgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICBhbmdsZTIgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gYW5nbGVzLiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBjb25zdHJhaW5lZCB0byB0aGUgXS1QSS4uUEldIGludGVydmFsLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFuZ2xlMSI+YW5nbGUxPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Rmlyc3QgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW5nbGUyIj5hbmdsZTI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TZWNvbmQgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5Db25zdHJhaW5lZCB2YWx1ZSBvZiAmbHNxdW87dmFsdWUyLXZhbHVlMSZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9WZWN0b3JfVW5pdCI+RlRfVmVjdG9yX1VuaXQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUklHT05PTUVUUllfSCAoZnR0cmlnb24uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9WZWN0b3JfVW5pdDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogIHZlYywKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICAgIGFuZ2xlICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIHRoZSB1bml0IHZlY3RvciBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gYW5nbGUuIEFmdGVyIHRoZSBjYWxsLCB0aGUgdmFsdWUgb2YgJmxzcXVvO3ZlYy54JnJzcXVvOyB3aWxsIGJlICZsc3F1bztzaW4oYW5nbGUpJnJzcXVvOywgYW5kIHRoZSB2YWx1ZSBvZiAmbHNxdW87dmVjLnkmcnNxdW87IHdpbGwgYmUgJmxzcXVvO2NvcyhhbmdsZSkmcnNxdW87LjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvIHJldHJpZXZlIGJvdGggdGhlIHNpbnVzIGFuZCBjb3NpbnVzIG9mIGEgZ2l2ZW4gYW5nbGUgcXVpY2tseS48L3A+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmVjIj52ZWM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYWRkcmVzcyBvZiB0YXJnZXQgdmVjdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbmdsZSI+YW5nbGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5wdXQgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVmVjdG9yX1JvdGF0ZSI+RlRfVmVjdG9yX1JvdGF0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX1ZlY3Rvcl9Sb3RhdGU8L2I+KCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICB2ZWMsCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICAgIGFuZ2xlICk7Cis8L3ByZT4KKworPHA+Um90YXRlIGEgdmVjdG9yIGJ5IGEgZ2l2ZW4gYW5nbGUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmVjIj52ZWM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYWRkcmVzcyBvZiB0YXJnZXQgdmVjdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbmdsZSI+YW5nbGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5wdXQgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVmVjdG9yX0xlbmd0aCI+RlRfVmVjdG9yX0xlbmd0aDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gKQorICA8Yj5GVF9WZWN0b3JfTGVuZ3RoPC9iPiggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgdmVjICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIHRoZSBsZW5ndGggb2YgYSBnaXZlbiB2ZWN0b3IuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmVjIj52ZWM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYWRkcmVzcyBvZiB0YXJnZXQgdmVjdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIHZlY3RvciBsZW5ndGgsIGV4cHJlc3NlZCBpbiB0aGUgc2FtZSB1bml0cyB0aGF0IHRoZSBvcmlnaW5hbCB2ZWN0b3IgY29vcmRpbmF0ZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9WZWN0b3JfUG9sYXJpemUiPkZUX1ZlY3Rvcl9Qb2xhcml6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSSUdPTk9NRVRSWV9IIChmdHRyaWdvbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX1ZlY3Rvcl9Qb2xhcml6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQW5nbGUiPkZUX0FuZ2xlPC9hPiAgICphbmdsZSApOworPC9wcmU+CisKKzxwPkNvbXB1dGUgYm90aCB0aGUgbGVuZ3RoIGFuZCBhbmdsZSBvZiBhIGdpdmVuIHZlY3Rvci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2ZWMiPnZlYzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZGRyZXNzIG9mIHNvdXJjZSB2ZWN0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsZW5ndGgiPmxlbmd0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2ZWN0b3IgbGVuZ3RoLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFuZ2xlIj5hbmdsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2ZWN0b3IgYW5nbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVmVjdG9yX0Zyb21fUG9sYXIiPkZUX1ZlY3Rvcl9Gcm9tX1BvbGFyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJJR09OT01FVFJZX0ggKGZ0dHJpZ29uLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfVmVjdG9yX0Zyb21fUG9sYXI8L2I+KCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+ICAgIGFuZ2xlICk7Cis8L3ByZT4KKworPHA+Q29tcHV0ZSB2ZWN0b3IgY29vcmRpbmF0ZXMgZnJvbSBhIGxlbmd0aCBhbmQgYW5nbGUuPC9wPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZlYyI+dmVjPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGFkZHJlc3Mgb2Ygc291cmNlIHZlY3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGVuZ3RoIj5sZW5ndGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVjdG9yIGxlbmd0aC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbmdsZSI+YW5nbGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVjdG9yIGFuZ2xlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1mb250X2Zvcm1hdHMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZm9udF9mb3JtYXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZm9udF9mb3JtYXRzLmh0bWwKQEAgLTAsMCArMSwxNDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5Gb250IEZvcm1hdHM8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0X0ZvbnRfRm9ybWF0Ij5GVF9HZXRfRm9udF9Gb3JtYXQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGUgc2luZ2xlIGZ1bmN0aW9uIGluIHRoaXMgc2VjdGlvbiBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGZvbnQgZm9ybWF0LiBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgbmVlZGVkIG5vcm1hbGx5OyBob3dldmVyLCB0aGVyZSBhcmUgc3BlY2lhbCBjYXNlcyAobGlrZSBpbiBQREYgZGV2aWNlcykgd2hlcmUgaXQgaXMgaW1wb3J0YW50IHRvIGRpZmZlcmVudGlhdGUsIGluIHNwaXRlIG9mIEZyZWVUeXBlJ3MgdW5pZm9ybSBBUEkuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X0ZvbnRfRm9ybWF0Ij5GVF9HZXRfRm9udF9Gb3JtYXQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GT05UX0ZPUk1BVFNfSCAoZnRmbnRmbXQuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogKQorICA8Yj5GVF9HZXRfRm9udF9Gb3JtYXQ8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgZmFjZSApOworCisKKyAgLyogZGVwcmVjYXRlZCAqLworICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiApCisgIEZUX0dldF9YMTFfRm9udF9Gb3JtYXQoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBvZiBhIGdpdmVuIGZhY2UuIFBvc3NpYmxlIHZhbHVlcyBhcmUgJmxzcXVvO1RydWVUeXBlJnJzcXVvOywgJmxzcXVvO1R5cGUmbmJzcDsxJnJzcXVvOywgJmxzcXVvO0JERiZyc3F1bzssICZsc3F1bztQQ0YmcnNxdW87LCAmbHNxdW87VHlwZSZuYnNwOzQyJnJzcXVvOywgJmxzcXVvO0NJRCZuYnNwO1R5cGUmbmJzcDsxJnJzcXVvOywgJmxzcXVvO0NGRiZyc3F1bzssICZsc3F1bztQRlImcnNxdW87LCBhbmQgJmxzcXVvO1dpbmRvd3MmbmJzcDtGTlQmcnNxdW87LjwvcD4KKzxwPlRoZSByZXR1cm4gdmFsdWUgaXMgc3VpdGFibGUgdG8gYmUgdXNlZCBhcyBhbiBYMTEgRk9OVF9QUk9QRVJUWS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5wdXQgZmFjZSBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5Gb250IGZvcm1hdCBzdHJpbmcuIE5VTEwgaW4gY2FzZSBvZiBlcnJvci48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcyAmbHNxdW87RlRfR2V0X1gxMV9Gb250X0Zvcm1hdCZyc3F1bzsuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZ2FzcF90YWJsZS5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1nYXNwX3RhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmYzAxYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZ2FzcF90YWJsZS5odG1sCkBAIC0wLDAgKzEsMTg3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+R2FzcCBUYWJsZTwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HQVNQX1hYWCI+RlRfR0FTUF9YWFg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9HYXNwIj5GVF9HZXRfR2FzcDwvYT48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoZSBmdW5jdGlvbiA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dldF9HYXNwIj5GVF9HZXRfR2FzcDwvYT4gY2FuIGJlIHVzZWQgdG8gcXVlcnkgYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250IGZvciBzcGVjaWZpYyBlbnRyaWVzIGluIGl0cyAmbHNxdW87Z2FzcCZyc3F1bzsgdGFibGUsIGlmIGFueS4gVGhpcyBpcyBtYWlubHkgdXNlZnVsIHdoZW4gaW1wbGVtZW50aW5nIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIHdpdGggdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIHRvIGR1cGxpY2F0ZSB0aGUgV2luZG93cyB0ZXh0IHJlbmRlcmluZyByZXN1bHRzLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dBU1BfWFhYIj5GVF9HQVNQX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dBU1BfSCAoZnRnYXNwLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1nYXNwX3RhYmxlLmh0bWwjRlRfR0FTUF9OT19UQUJMRSI+RlRfR0FTUF9OT19UQUJMRTwvYT4gICAgICAgICAgICAgICAtMQorI2RlZmluZSA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfRE9fR1JJREZJVCI+RlRfR0FTUF9ET19HUklERklUPC9hPiAgICAgICAgICAgMHgwMQorI2RlZmluZSA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfRE9fR1JBWSI+RlRfR0FTUF9ET19HUkFZPC9hPiAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfU1lNTUVUUklDX1NNT09USElORyI+RlRfR0FTUF9TWU1NRVRSSUNfU01PT1RISU5HPC9hPiAgMHgwOAorI2RlZmluZSA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfU1lNTUVUUklDX0dSSURGSVQiPkZUX0dBU1BfU1lNTUVUUklDX0dSSURGSVQ8L2E+ICAgIDB4MTAKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgdmFsdWVzIGFuZC9vciBiaXQtZmxhZ3MgcmV0dXJuZWQgYnkgdGhlIDxhIGhyZWY9ImZ0Mi1nYXNwX3RhYmxlLmh0bWwjRlRfR2V0X0dhc3AiPkZUX0dldF9HYXNwPC9hPiBmdW5jdGlvbi48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfR0FTUF9OT19UQUJMRSI+RlRfR0FTUF9OT19UQUJMRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgc3BlY2lhbCB2YWx1ZSBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIEdBU1AgdGFibGUgaW4gdGhpcyBmYWNlLiBJdCBpcyB1cCB0byB0aGUgY2xpZW50IHRvIGRlY2lkZSB3aGF0IHRvIGRvLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dBU1BfRE9fR1JJREZJVCI+RlRfR0FTUF9ET19HUklERklUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+R3JpZC1maXR0aW5nIGFuZCBoaW50aW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgYXQgdGhlIHNwZWNpZmllZCBwcGVtLiBUaGlzIDxiPnJlYWxseTwvYj4gbWVhbnMgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIG5vIGhpbnRpbmcgZ2V0cyBhcHBsaWVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dBU1BfRE9fR1JBWSI+RlRfR0FTUF9ET19HUkFZPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW50aS1hbGlhc2VkIHJlbmRlcmluZyBzaG91bGQgYmUgcGVyZm9ybWVkIGF0IHRoZSBzcGVjaWZpZWQgcHBlbS4gSWYgbm90IHNldCwgZG8gbW9ub2Nocm9tZSByZW5kZXJpbmcuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfR0FTUF9TWU1NRVRSSUNfU01PT1RISU5HIj5GVF9HQVNQX1NZTU1FVFJJQ19TTU9PVEhJTkc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JZiBzZXQsIHNtb290aGluZyBhbG9uZyBtdWx0aXBsZSBheGVzIG11c3QgYmUgdXNlZCB3aXRoIENsZWFyVHlwZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9HQVNQX1NZTU1FVFJJQ19HUklERklUIj5GVF9HQVNQX1NZTU1FVFJJQ19HUklERklUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+R3JpZC1maXR0aW5nIG11c3QgYmUgdXNlZCB3aXRoIENsZWFyVHlwZSdzIHN5bW1ldHJpYyBzbW9vdGhpbmcuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIGJpdC1mbGFncyAmbHNxdW87RlRfR0FTUF9ET19HUklERklUJnJzcXVvOyBhbmQgJmxzcXVvO0ZUX0dBU1BfRE9fR1JBWSZyc3F1bzsgYXJlIHRvIGJlIHVzZWQgZm9yIHN0YW5kYXJkIGZvbnQgcmFzdGVyaXphdGlvbiBvbmx5LiBJbmRlcGVuZGVudGx5IG9mIHRoYXQsICZsc3F1bztGVF9HQVNQX1NZTU1FVFJJQ19TTU9PVEhJTkcmcnNxdW87IGFuZCAmbHNxdW87RlRfR0FTUF9TWU1NRVRSSUNfR1JJREZJVCZyc3F1bzsgYXJlIHRvIGJlIHVzZWQgaWYgQ2xlYXJUeXBlIGlzIGVuYWJsZWQgKGFuZCAmbHNxdW87RlRfR0FTUF9ET19HUklERklUJnJzcXVvOyBhbmQgJmxzcXVvO0ZUX0dBU1BfRE9fR1JBWSZyc3F1bzsgYXJlIGNvbnNlcXVlbnRseSBpZ25vcmVkKS48L3A+Cis8cD4mbHNxdW87Q2xlYXJUeXBlJnJzcXVvOyBpcyBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiBvZiBMQ0QgcmVuZGVyaW5nLCBwYXJ0bHkgcHJvdGVjdGVkIGJ5IHBhdGVudHMuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjA8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9HYXNwIj5GVF9HZXRfR2FzcDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dBU1BfSCAoZnRnYXNwLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICkKKyAgPGI+RlRfR2V0X0dhc3A8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgZmFjZSwKKyAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICBwcGVtICk7Cis8L3ByZT4KKworPHA+UmVhZCB0aGUgJmxzcXVvO2dhc3AmcnNxdW87IHRhYmxlIGZyb20gYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250IGZpbGUgYW5kIHJldHVybiB0aGUgZW50cnkgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGNoYXJhY3RlciBwaXhlbCBzaXplLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIGZhY2UgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBwZW0iPnBwZW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVydGljYWwgY2hhcmFjdGVyIHBpeGVsIHNpemUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5CaXQgZmxhZ3MgKHNlZSA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfWFhYIj5GVF9HQVNQX1hYWDwvYT4pLCBvciA8YSBocmVmPSJmdDItZ2FzcF90YWJsZS5odG1sI0ZUX0dBU1BfWFhYIj5GVF9HQVNQX05PX1RBQkxFPC9hPiBpZiB0aGVyZSBpcyBubyAmbHNxdW87Z2FzcCZyc3F1bzsgdGFibGUgaW4gdGhlIGZhY2UuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjA8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ3OWNkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwKQEAgLTAsMCArMSw1OTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5HbHlwaCBNYW5hZ2VtZW50PC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZUdseXBoUmVjIj5GVF9PdXRsaW5lR2x5cGhSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dseXBoX0dldF9DQm94Ij5GVF9HbHlwaF9HZXRfQ0JveDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaFJlYyI+RlRfR2x5cGhSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9HbHlwaCI+RlRfR2V0X0dseXBoPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9Ub19CaXRtYXAiPkZUX0dseXBoX1RvX0JpdG1hcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9CaXRtYXBHbHlwaCI+RlRfQml0bWFwR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dseXBoX0NvcHkiPkZUX0dseXBoX0NvcHk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0RvbmVfR2x5cGgiPkZUX0RvbmVfR2x5cGg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQml0bWFwR2x5cGhSZWMiPkZUX0JpdG1hcEdseXBoUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9UcmFuc2Zvcm0iPkZUX0dseXBoX1RyYW5zZm9ybTwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lR2x5cGgiPkZUX091dGxpbmVHbHlwaDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HbHlwaF9CQm94X01vZGU8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgdXNlZCB0byBtYW5hZ2UgZ2x5cGggZGF0YSB0aHJvdWdoIGdlbmVyaWMgRlRfR2x5cGggb2JqZWN0cy4gRWFjaCBvZiB0aGVtIGNhbiBjb250YWluIGEgYml0bWFwLCBhIHZlY3RvciBvdXRsaW5lLCBvciBldmVuIGltYWdlcyBpbiBvdGhlciBmb3JtYXRzLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dseXBoIj5GVF9HbHlwaDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX0dseXBoUmVjXyogIDxiPkZUX0dseXBoPC9iPjsKKzwvcHJlPgorCis8cD5IYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgZ2VuZXJpYyBnbHlwaCBpbWFnZXMuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaFJlYyI+RlRfR2x5cGhSZWM8L2E+IHN0cnVjdHVyZSBhbmQgY2FuIGNvbnRhaW4gYSBnbHlwaCBiaXRtYXAgb3IgcG9pbnRlci48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkdseXBoIG9iamVjdHMgYXJlIG5vdCBvd25lZCBieSB0aGUgbGlicmFyeS4gWW91IG11c3QgdGh1cyByZWxlYXNlIHRoZW0gbWFudWFsbHkgKHRocm91Z2ggPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9Eb25lX0dseXBoIj5GVF9Eb25lX0dseXBoPC9hPikgPGk+YmVmb3JlPC9pPiBjYWxsaW5nIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0RvbmVfRnJlZVR5cGUiPkZUX0RvbmVfRnJlZVR5cGU8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2x5cGhSZWMiPkZUX0dseXBoUmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR0xZUEhfSCAoZnRnbHlwaC5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX0dseXBoUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICAgICAgICAgbGlicmFyeTsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IEZUX0dseXBoX0NsYXNzKiAgY2xheno7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2x5cGhfRm9ybWF0Ij5GVF9HbHlwaF9Gb3JtYXQ8L2E+ICAgICAgICBmb3JtYXQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+ICAgICAgICAgICAgICBhZHZhbmNlOworCisgIH0gPGI+RlRfR2x5cGhSZWM8L2I+OworPC9wcmU+CisKKzxwPlRoZSByb290IGdseXBoIHN0cnVjdHVyZSBjb250YWlucyBhIGdpdmVuIGdseXBoIGltYWdlIHBsdXMgaXRzIGFkdmFuY2Ugd2lkdGggaW4gMTYuMTYgZml4ZWQtcG9pbnQgZm9ybWF0LjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNsYXp6Ij5jbGF6ejwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgZ2x5cGgncyBjbGFzcy4gUHJpdmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmb3JtYXQiPmZvcm1hdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmb3JtYXQgb2YgdGhlIGdseXBoJ3MgaW1hZ2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZSI+YWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgMTYuMTYgdmVjdG9yIHRoYXQgZ2l2ZXMgdGhlIGdseXBoJ3MgYWR2YW5jZSB3aWR0aC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9CaXRtYXBHbHlwaCI+RlRfQml0bWFwR2x5cGg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HTFlQSF9IIChmdGdseXBoLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9CaXRtYXBHbHlwaFJlY18qICA8Yj5GVF9CaXRtYXBHbHlwaDwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgYSBiaXRtYXAgZ2x5cGggaW1hZ2UuIFRoaXMgaXMgYSBzdWItY2xhc3Mgb2YgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+LCBhbmQgYSBwb2ludGVyIHRvIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfQml0bWFwR2x5cGhSZWMiPkZUX0JpdG1hcEdseXBoUmVjPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JpdG1hcEdseXBoUmVjIj5GVF9CaXRtYXBHbHlwaFJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9CaXRtYXBHbHlwaFJlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhSZWMiPkZUX0dseXBoUmVjPC9hPiAgcm9vdDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgbGVmdDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgdG9wOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JpdG1hcCI+RlRfQml0bWFwPC9hPiAgICBiaXRtYXA7CisKKyAgfSA8Yj5GVF9CaXRtYXBHbHlwaFJlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCBmb3IgYml0bWFwIGdseXBoIGltYWdlcy4gVGhpcyByZWFsbHkgaXMgYSAmbHNxdW87c3ViLWNsYXNzJnJzcXVvOyBvZiA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoUmVjIj5GVF9HbHlwaFJlYzwvYT4uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJvb3QiPnJvb3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcm9vdCA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gZmllbGRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxlZnQiPmxlZnQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbGVmdC1zaWRlIGJlYXJpbmcsIGkuZS4sIHRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGZyb20gdGhlIGN1cnJlbnQgcGVuIHBvc2l0aW9uIHRvIHRoZSBsZWZ0IGJvcmRlciBvZiB0aGUgZ2x5cGggYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRvcCI+dG9wPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRvcC1zaWRlIGJlYXJpbmcsIGkuZS4sIHRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBmcm9tIHRoZSBjdXJyZW50IHBlbiBwb3NpdGlvbiB0byB0aGUgdG9wIGJvcmRlciBvZiB0aGUgZ2x5cGggYml0bWFwLiBUaGlzIGRpc3RhbmNlIGlzIHBvc2l0aXZlIGZvciB1cHdhcmRzJm5ic3A7eSE8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiaXRtYXAiPmJpdG1hcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgZGVzY3JpcHRvciBmb3IgdGhlIGJpdG1hcC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3UgY2FuIHR5cGVjYXN0IGFuIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiB0byA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0JpdG1hcEdseXBoIj5GVF9CaXRtYXBHbHlwaDwvYT4gaWYgeW91IGhhdmUgJmxzcXVvO2dseXBoLSZndDtmb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCZyc3F1bzsuIFRoaXMgbGV0cyB5b3UgYWNjZXNzIHRoZSBiaXRtYXAncyBjb250ZW50cyBlYXNpbHkuPC9wPgorPHA+VGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgYnVmZmVyIGlzIGFsd2F5cyBvd25lZCBieSA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0JpdG1hcEdseXBoIj5GVF9CaXRtYXBHbHlwaDwvYT4gYW5kIGlzIHRodXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHdpdGggaXQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lR2x5cGgiPkZUX091dGxpbmVHbHlwaDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX091dGxpbmVHbHlwaFJlY18qICA8Yj5GVF9PdXRsaW5lR2x5cGg8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGFuIG91dGxpbmUgZ2x5cGggaW1hZ2UuIFRoaXMgaXMgYSBzdWItY2xhc3Mgb2YgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+LCBhbmQgYSBwb2ludGVyIHRvIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfT3V0bGluZUdseXBoUmVjIj5GVF9PdXRsaW5lR2x5cGhSZWM8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3V0bGluZUdseXBoUmVjIj5GVF9PdXRsaW5lR2x5cGhSZWM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HTFlQSF9IIChmdGdseXBoLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfT3V0bGluZUdseXBoUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaFJlYyI+RlRfR2x5cGhSZWM8L2E+ICByb290OworICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiAgIG91dGxpbmU7CisKKyAgfSA8Yj5GVF9PdXRsaW5lR2x5cGhSZWM8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgZm9yIG91dGxpbmUgKHZlY3RvcmlhbCkgZ2x5cGggaW1hZ2VzLiBUaGlzIHJlYWxseSBpcyBhICZsc3F1bztzdWItY2xhc3MmcnNxdW87IG9mIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhSZWMiPkZUX0dseXBoUmVjPC9hPi48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icm9vdCI+cm9vdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByb290IDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBmaWVsZHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0bGluZSI+b3V0bGluZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgZGVzY3JpcHRvciBmb3IgdGhlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IGNhbiB0eXBlY2FzdCBhbiA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gdG8gPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9PdXRsaW5lR2x5cGgiPkZUX091dGxpbmVHbHlwaDwvYT4gaWYgeW91IGhhdmUgJmxzcXVvO2dseXBoLSZndDtmb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUmcnNxdW87LiBUaGlzIGxldHMgeW91IGFjY2VzcyB0aGUgb3V0bGluZSdzIGNvbnRlbnQgZWFzaWx5LjwvcD4KKzxwPkFzIHRoZSBvdXRsaW5lIGlzIGV4dHJhY3RlZCBmcm9tIGEgZ2x5cGggc2xvdCwgaXRzIGNvb3JkaW5hdGVzIGFyZSBleHByZXNzZWQgbm9ybWFsbHkgaW4gMjYuNiBwaXhlbHMsIHVubGVzcyB0aGUgZmxhZyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19TQ0FMRTwvYT4gd2FzIHVzZWQgaW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4oKSBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0NoYXIiPkZUX0xvYWRfQ2hhcjwvYT4oKS48L3A+Cis8cD5UaGUgb3V0bGluZSdzIHRhYmxlcyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBvYmplY3QgYW5kIGFyZSBkZXN0cm95ZWQgd2l0aCBpdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9HbHlwaCI+RlRfR2V0X0dseXBoPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR0xZUEhfSCAoZnRnbHlwaC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfR2x5cGg8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HbHlwaFNsb3QiPkZUX0dseXBoU2xvdDwvYT4gIHNsb3QsCisgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+ICAgICAqYWdseXBoICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGV4dHJhY3QgYSBnbHlwaCBpbWFnZSBmcm9tIGEgc2xvdC4gTm90ZSB0aGF0IHRoZSBjcmVhdGVkIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfRG9uZV9HbHlwaCI+RlRfRG9uZV9HbHlwaDwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2xvdCI+c2xvdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggc2xvdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFnbHlwaCI+YWdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGdseXBoIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2x5cGhfQ29weSI+RlRfR2x5cGhfQ29weTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2x5cGhfQ29weTwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+ICAqdGFyZ2V0ICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGNvcHkgYSBnbHlwaCBpbWFnZS4gTm90ZSB0aGF0IHRoZSBjcmVhdGVkIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfRG9uZV9HbHlwaCI+RlRfRG9uZV9HbHlwaDwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic291cmNlIj5zb3VyY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhcmdldCI+dGFyZ2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaCBvYmplY3QuIDAmbmJzcDtpbiBjYXNlIG9mIGVycm9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HbHlwaF9UcmFuc2Zvcm0iPkZUX0dseXBoX1RyYW5zZm9ybTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2x5cGhfVHJhbnNmb3JtPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+ICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX01hdHJpeCI+RlRfTWF0cml4PC9hPiogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICBkZWx0YSApOworPC9wcmU+CisKKzxwPlRyYW5zZm9ybSBhIGdseXBoIGltYWdlIGlmIGl0cyBmb3JtYXQgaXMgc2NhbGFibGUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGgiPmdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaCBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1hdHJpeCI+bWF0cml4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGEgMngyIG1hdHJpeCB0byBhcHBseS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJkZWx0YSI+ZGVsdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSAyZCB2ZWN0b3IgdG8gYXBwbHkuIENvb3JkaW5hdGVzIGFyZSBleHByZXNzZWQgaW4gMS82NHRoIG9mIGEgcGl4ZWwuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlIChpZiBub3QgMCwgdGhlIGdseXBoIGZvcm1hdCBpcyBub3Qgc2NhbGFibGUpLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIDJ4MiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggaXMgYWxzbyBhcHBsaWVkIHRvIHRoZSBnbHlwaCdzIGFkdmFuY2UgdmVjdG9yLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HbHlwaF9CQm94X01vZGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HTFlQSF9IIChmdGdseXBoLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX0dseXBoX0JCb3hfTW9kZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR0xZUEhfQkJPWF9VTlNDQUxFRCI+RlRfR0xZUEhfQkJPWF9VTlNDQUxFRDwvYT4gID0gMCwKKyAgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfU1VCUElYRUxTIj5GVF9HTFlQSF9CQk9YX1NVQlBJWEVMUzwvYT4gPSAwLAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR0xZUEhfQkJPWF9HUklERklUIj5GVF9HTFlQSF9CQk9YX0dSSURGSVQ8L2E+ICAgPSAxLAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR0xZUEhfQkJPWF9UUlVOQ0FURSI+RlRfR0xZUEhfQkJPWF9UUlVOQ0FURTwvYT4gID0gMiwKKyAgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfUElYRUxTIj5GVF9HTFlQSF9CQk9YX1BJWEVMUzwvYT4gICAgPSAzCisKKyAgfSA8Yj5GVF9HbHlwaF9CQm94X01vZGU8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPkZUX0dseXBoX0JCb3hfTW9kZTwvYj4nIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X2dseXBoX2Jib3hfdW5zY2FsZWQgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfVU5TQ0FMRUQiPkZUX0dMWVBIX0JCT1hfVU5TQ0FMRUQ8L2E+CisjZGVmaW5lIGZ0X2dseXBoX2Jib3hfc3VicGl4ZWxzICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfU1VCUElYRUxTIj5GVF9HTFlQSF9CQk9YX1NVQlBJWEVMUzwvYT4KKyNkZWZpbmUgZnRfZ2x5cGhfYmJveF9ncmlkZml0ICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR0xZUEhfQkJPWF9HUklERklUIj5GVF9HTFlQSF9CQk9YX0dSSURGSVQ8L2E+CisjZGVmaW5lIGZ0X2dseXBoX2Jib3hfdHJ1bmNhdGUgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfVFJVTkNBVEUiPkZUX0dMWVBIX0JCT1hfVFJVTkNBVEU8L2E+CisjZGVmaW5lIGZ0X2dseXBoX2Jib3hfcGl4ZWxzICAgICA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dMWVBIX0JCT1hfUElYRUxTIj5GVF9HTFlQSF9CQk9YX1BJWEVMUzwvYT4KKzwvcHJlPgorCis8cD5UaGUgbW9kZSBob3cgdGhlIHZhbHVlcyBvZiA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoX0dldF9DQm94Ij5GVF9HbHlwaF9HZXRfQ0JveDwvYT4gYXJlIHJldHVybmVkLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9HTFlQSF9CQk9YX1VOU0NBTEVEIj5GVF9HTFlQSF9CQk9YX1VOU0NBTEVEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmV0dXJuIHVuc2NhbGVkIGZvbnQgdW5pdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMiPkZUX0dMWVBIX0JCT1hfU1VCUElYRUxTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmV0dXJuIHVuZml0dGVkIDI2LjYgY29vcmRpbmF0ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfR0xZUEhfQkJPWF9HUklERklUIj5GVF9HTFlQSF9CQk9YX0dSSURGSVQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5SZXR1cm4gZ3JpZC1maXR0ZWQgMjYuNiBjb29yZGluYXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9HTFlQSF9CQk9YX1RSVU5DQVRFIj5GVF9HTFlQSF9CQk9YX1RSVU5DQVRFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmV0dXJuIGNvb3JkaW5hdGVzIGluIGludGVnZXIgcGl4ZWxzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX0dMWVBIX0JCT1hfUElYRUxTIj5GVF9HTFlQSF9CQk9YX1BJWEVMUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlJldHVybiBncmlkLWZpdHRlZCBwaXhlbCBjb29yZGluYXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HbHlwaF9HZXRfQ0JveCI+RlRfR2x5cGhfR2V0X0NCb3g8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HTFlQSF9IIChmdGdseXBoLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfR2x5cGhfR2V0X0NCb3g8L2I+KCA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICBiYm94X21vZGUsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CQm94Ij5GVF9CQm94PC9hPiAgKmFjYm94ICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIGEgZ2x5cGgncyAmbHNxdW87Y29udHJvbCBib3gmcnNxdW87LiBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsIHRoZSBvdXRsaW5lJ3MgcG9pbnRzLCBpbmNsdWRpbmcgQsOpemllciBjb250cm9sIHBvaW50cy4gVGhvdWdoIGl0IGNvaW5jaWRlcyB3aXRoIHRoZSBleGFjdCBib3VuZGluZyBib3ggZm9yIG1vc3QgZ2x5cGhzLCBpdCBjYW4gYmUgc2xpZ2h0bHkgbGFyZ2VyIGluIHNvbWUgc2l0dWF0aW9ucyAobGlrZSB3aGVuIHJvdGF0aW5nIGFuIG91dGxpbmUgdGhhdCBjb250YWlucyBCw6l6aWVyIG91dHNpZGUgYXJjcykuPC9wPgorPHA+Q29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzIGFuZCBhcmNzIGluIHRoZSBvdXRsaW5lLiBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlICZsc3F1bztmdGJib3gmcnNxdW87IGNvbXBvbmVudCwgd2hpY2ggaXMgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHRhc2suPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGgiPmdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibW9kZSI+bW9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0byBpbnRlcnByZXQgdGhlIHJldHVybmVkIGJvdW5kaW5nIGJveCB2YWx1ZXMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhY2JveCI+YWNib3g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggY29vcmRpbmF0ZSBib3VuZGluZyBib3guIENvb3JkaW5hdGVzIGFyZSBleHByZXNzZWQgaW4gMS82NHRoIG9mIHBpeGVscyBpZiBpdCBpcyBncmlkLWZpdHRlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Db29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGdseXBoIG9yaWdpbiwgdXNpbmcgdGhlIHkmbmJzcDt1cHdhcmRzIGNvbnZlbnRpb24uPC9wPgorPHA+SWYgdGhlIGdseXBoIGhhcyBiZWVuIGxvYWRlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX1NDQUxFPC9hPiwgJmxzcXVvO2Jib3hfbW9kZSZyc3F1bzsgbXVzdCBiZSBzZXQgdG8gPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dMWVBIX0JCT1hfVU5TQ0FMRUQ8L2E+IHRvIGdldCB1bnNjYWxlZCBmb250IHVuaXRzIGluIDI2LjYgcGl4ZWwgZm9ybWF0LiBUaGUgdmFsdWUgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dMWVBIX0JCT1hfU1VCUElYRUxTPC9hPiBpcyBhbm90aGVyIG5hbWUgZm9yIHRoaXMgY29uc3RhbnQuPC9wPgorPHA+SWYgdGhlIGZvbnQgaXMgdHJpY2t5IGFuZCB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkIHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fU0NBTEU8L2E+LCB0aGUgcmVzdWx0aW5nIENCb3ggaXMgbWVhbmluZ2xlc3MuIFRvIGdldCByZWFzb25hYmxlIHZhbHVlcyBmb3IgdGhlIENCb3ggaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlIGdseXBoIGF0IGEgbGFyZ2UgcHBlbSB2YWx1ZSAoc28gdGhhdCB0aGUgaGludGluZyBpbnN0cnVjdGlvbnMgY2FuIHByb3Blcmx5IHNoaWZ0IGFuZCBzY2FsZSB0aGUgc3ViZ2x5cGhzKSwgdGhlbiBleHRyYWN0aW5nIHRoZSBDQm94LCB3aGljaCBjYW4gYmUgZXZlbnR1YWxseSBjb252ZXJ0ZWQgYmFjayB0byBmb250IHVuaXRzLjwvcD4KKzxwPk5vdGUgdGhhdCB0aGUgbWF4aW11bSBjb29yZGluYXRlcyBhcmUgZXhjbHVzaXZlLCB3aGljaCBtZWFucyB0aGF0IG9uZSBjYW4gY29tcHV0ZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ2x5cGggaW1hZ2UgKGJlIGl0IGluIGludGVnZXIgb3IgMjYuNiBwaXhlbHMpIGFzOjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICB3aWR0aCAgPSBiYm94LnhNYXggLSBiYm94LnhNaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBoZWlnaHQgPSBiYm94LnlNYXggLSBiYm94LnlNaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPC9wcmU+Cis8cD5Ob3RlIGFsc28gdGhhdCBmb3IgMjYuNiBjb29yZGluYXRlcywgaWYgJmxzcXVvO2Jib3hfbW9kZSZyc3F1bzsgaXMgc2V0IHRvIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HTFlQSF9CQk9YX0dSSURGSVQ8L2E+LCB0aGUgY29vcmRpbmF0ZXMgd2lsbCBhbHNvIGJlIGdyaWQtZml0dGVkLCB3aGljaCBjb3JyZXNwb25kcyB0bzo8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgYmJveC54TWluID0gRkxPT1IoYmJveC54TWluKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgYmJveC55TWluID0gRkxPT1IoYmJveC55TWluKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgYmJveC54TWF4ID0gQ0VJTElORyhiYm94LnhNYXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgYmJveC55TWF4ID0gQ0VJTElORyhiYm94LnlNYXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzwvcHJlPgorPHA+VG8gZ2V0IHRoZSBiYm94IGluIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgJmxzcXVvO2Jib3hfbW9kZSZyc3F1bzsgdG8gPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dMWVBIX0JCT1hfVFJVTkNBVEU8L2E+LjwvcD4KKzxwPlRvIGdldCB0aGUgYmJveCBpbiBncmlkLWZpdHRlZCBwaXhlbCBjb29yZGluYXRlcywgc2V0ICZsc3F1bztiYm94X21vZGUmcnNxdW87IHRvIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HTFlQSF9CQk9YX1BJWEVMUzwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HbHlwaF9Ub19CaXRtYXAiPkZUX0dseXBoX1RvX0JpdG1hcDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dMWVBIX0ggKGZ0Z2x5cGguaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2x5cGhfVG9fQml0bWFwPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+KiAgICAgICB0aGVfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JlbmRlcl9Nb2RlPC9hPiAgcmVuZGVyX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgICAgIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPiAgICAgICAgIGRlc3Ryb3kgKTsKKzwvcHJlPgorCis8cD5Db252ZXJ0IGEgZ2l2ZW4gZ2x5cGggb2JqZWN0IHRvIGEgYml0bWFwIGdseXBoIG9iamVjdC48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0aGVfZ2x5cGgiPnRoZV9nbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byBhIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZW5kZXJfbW9kZSI+cmVuZGVyX21vZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbiBlbnVtZXJhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgdGhlIGRhdGEgaXMgcmVuZGVyZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3JpZ2luIj5vcmlnaW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSB2ZWN0b3IgdXNlZCB0byB0cmFuc2xhdGUgdGhlIGdseXBoIGltYWdlIGJlZm9yZSByZW5kZXJpbmcuIENhbiBiZSZuYnNwOzAgKGlmIG5vIHRyYW5zbGF0aW9uKS4gVGhlIG9yaWdpbiBpcyBleHByZXNzZWQgaW4gMjYuNiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVzdHJveSI+ZGVzdHJveTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZSBzaG91bGQgYmUgZGVzdHJveWVkIGJ5IHRoaXMgZnVuY3Rpb24uIEl0IGlzIG5ldmVyIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGVycm9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiB0aGUgZ2x5cGggZm9ybWF0IGlzbid0IHNjYWxhYmxlLjwvcD4KKzxwPlRoZSBnbHlwaCBpbWFnZSBpcyB0cmFuc2xhdGVkIHdpdGggdGhlICZsc3F1bztvcmlnaW4mcnNxdW87IHZlY3RvciBiZWZvcmUgcmVuZGVyaW5nLjwvcD4KKzxwPlRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGFuIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiBoYW5kbGUsIHRoYXQgd2lsbCBiZSA8aT5yZXBsYWNlZDwvaT4gYnkgdGhpcyBmdW5jdGlvbiAod2l0aCBuZXdseSBhbGxvY2F0ZWQgZGF0YSkuIFR5cGljYWxseSwgeW91IHdvdWxkIHVzZSAob21pdHRpbmcgZXJyb3IgaGFuZGxpbmcpOjwvcD4KKzxwPjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9HbHlwaCAgICAgICAgZ2x5cGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRlRfQml0bWFwR2x5cGggIGdseXBoX2JpdG1hcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgLy8gbG9hZCBnbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGVycm9yID0gRlRfTG9hZF9DaGFyKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9ERUZBVVQgKTsgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgLy8gZXh0cmFjdCBnbHlwaCBpbWFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGVycm9yID0gRlRfR2V0X0dseXBoKCBmYWNlLSZndDtnbHlwaCwgJmFtcDtnbHlwaCApOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIC8vIGNvbnZlcnQgdG8gYSBiaXRtYXAgKGRlZmF1bHQgcmVuZGVyIG1vZGUgKyBkZXN0cm95aW5nIG9sZCkgIAorICBpZiAoIGdseXBoLSZndDtmb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApICAgICAgICAgICAgICAgICAKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgZXJyb3IgPSBGVF9HbHlwaF9Ub19CaXRtYXAoICZhbXA7Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX05PUk1BTCwgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgaWYgKCBlcnJvciApIC8vIGBnbHlwaCcgdW5jaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAvLyBhY2Nlc3MgYml0bWFwIGNvbnRlbnQgYnkgdHlwZWNhc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAKKyAgZ2x5cGhfYml0bWFwID0gKEZUX0JpdG1hcEdseXBoKWdseXBoOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAvLyBkbyBmdW5ueSBzdHVmZiB3aXRoIGl0LCBsaWtlIGJsaXR0aW5nL2RyYXdpbmcgICAgICAgICAgICAgICAKKyAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAvLyBkaXNjYXJkIGdseXBoIGltYWdlIChiaXRtYXAgb3Igbm90KSAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRlRfRG9uZV9HbHlwaCggZ2x5cGggKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8L3ByZT4KKzxwPjwvcD4KKzxwPkhlcmUgYW5vdGhlciBleGFtcGxlLCBhZ2FpbiB3aXRob3V0IGVycm9yIGhhbmRsaW5nOjwvcD4KKzxwPjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9HbHlwaCAgZ2x5cGhzW01BWF9HTFlQSFNdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGZvciAoIGlkeCA9IDA7IGkgJmx0OyBNQVhfR0xZUEhTOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgaWR4LCBGVF9MT0FEX0RFRkFVTFQgKSB8fCAgICAgICAKKyAgICAgICAgICAgIEZUX0dldF9HbHlwaCAoIGZhY2UtJmd0O2dseXBoLCAmYW1wO2dseXBoW2lkeF0gKTsgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBmb3IgKCBpZHggPSAwOyBpICZsdDsgTUFYX0dMWVBIUzsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgRlRfR2x5cGggIGJpdG1hcCA9IGdseXBoc1tpZHhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBhZnRlciB0aGlzIGNhbGwsIGBiaXRtYXAnIG5vIGxvbmdlciBwb2ludHMgaW50byAgICAgICAgICAgCisgICAgLy8gdGhlIGBnbHlwaHMnIGFycmF5IChhbmQgdGhlIG9sZCB2YWx1ZSBpc24ndCBkZXN0cm95ZWQpICAgIAorICAgIEZUX0dseXBoX1RvX0JpdG1hcCggJmFtcDtiaXRtYXAsIEZUX1JFTkRFUl9NT0RFX01PTk8sIDAsIDAgKTsgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgRlRfRG9uZV9HbHlwaCggYml0bWFwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgZm9yICggaWR4ID0gMDsgaSAmbHQ7IE1BWF9HTFlQSFM7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGhzW2lkeF0gKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPC9wcmU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0RvbmVfR2x5cGgiPkZUX0RvbmVfR2x5cGg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HTFlQSF9IIChmdGdseXBoLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfRG9uZV9HbHlwaDwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGgiPkZUX0dseXBoPC9hPiAgZ2x5cGggKTsKKzwvcHJlPgorCis8cD5EZXN0cm95IGEgZ2l2ZW4gZ2x5cGguPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGgiPmdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaCBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWdseXBoX3N0cm9rZXIuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZ2x5cGhfc3Ryb2tlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDI1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWdseXBoX3N0cm9rZXIuaHRtbApAQCAtMCwwICsxLDgxOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkdseXBoIFN0cm9rZXI8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU3Ryb2tlcl9QYXJzZU91dGxpbmUiPkZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfRG9uZSI+RlRfU3Ryb2tlcl9Eb25lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfTGluZUpvaW4iPkZUX1N0cm9rZXJfTGluZUpvaW48L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU3Ryb2tlcl9MaW5lQ2FwIj5GVF9TdHJva2VyX0xpbmVDYXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIj5GVF9TdHJva2VyX0JlZ2luU3ViUGF0aDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyQm9yZGVyIj5GVF9TdHJva2VyQm9yZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX0VuZFN1YlBhdGgiPkZUX1N0cm9rZXJfRW5kU3ViUGF0aDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyIj5GVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU3Ryb2tlcl9MaW5lVG8iPkZUX1N0cm9rZXJfTGluZVRvPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlciI+RlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX0NvbmljVG8iPkZUX1N0cm9rZXJfQ29uaWNUbzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX0N1YmljVG8iPkZUX1N0cm9rZXJfQ3ViaWNUbzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9TdHJva2UiPkZUX0dseXBoX1N0cm9rZTwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HbHlwaF9TdHJva2VCb3JkZXIiPkZUX0dseXBoX1N0cm9rZUJvcmRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfRXhwb3J0Qm9yZGVyIj5GVF9TdHJva2VyX0V4cG9ydEJvcmRlcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX05ldyI+RlRfU3Ryb2tlcl9OZXc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfR2V0Q291bnRzIj5GVF9TdHJva2VyX0dldENvdW50czwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX1NldCI+RlRfU3Ryb2tlcl9TZXQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cm9rZXJfRXhwb3J0Ij5GVF9TdHJva2VyX0V4cG9ydDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TdHJva2VyX1Jld2luZCI+RlRfU3Ryb2tlcl9SZXdpbmQ8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIGNvbXBvbmVudCBnZW5lcmF0ZXMgc3Ryb2tlZCBvdXRsaW5lcyBvZiBhIGdpdmVuIHZlY3RvcmlhbCBnbHlwaC4gSXQgYWxzbyBhbGxvd3MgeW91IHRvIHJldHJpZXZlIHRoZSAmbHNxdW87b3V0c2lkZSZyc3F1bzsgYW5kL29yIHRoZSAmbHNxdW87aW5zaWRlJnJzcXVvOyBib3JkZXJzIG9mIHRoZSBzdHJva2UuPC9wPgorPHA+VGhpcyBjYW4gYmUgdXNlZnVsIHRvIGdlbmVyYXRlICZsc3F1bztib3JkZXJlZCZyc3F1bzsgZ2x5cGgsIGkuZS4sIGdseXBocyBkaXNwbGF5ZWQgd2l0aCBhIGNvbG91cmVkIChhbmQgYW50aS1hbGlhc2VkKSBib3JkZXIgYXJvdW5kIHRoZWlyIHNoYXBlLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9TdHJva2VyUmVjXyogIDxiPkZUX1N0cm9rZXI8L2I+OworPC9wcmU+CisKKzxwPk9wYXF1ZSBoYW5kbGUgdG8gYSBwYXRoIHN0cm9rZXIgb2JqZWN0LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9MaW5lSm9pbiI+RlRfU3Ryb2tlcl9MaW5lSm9pbjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiAgRlRfU3Ryb2tlcl9MaW5lSm9pbl8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORCI+RlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORDwvYT4gICAgICAgICAgPSAwLAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FSk9JTl9CRVZFTCI+RlRfU1RST0tFUl9MSU5FSk9JTl9CRVZFTDwvYT4gICAgICAgICAgPSAxLAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSI+RlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRTwvYT4gPSAyLAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUiI+RlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUjwvYT4gICAgICAgICAgPSA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUiPkZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEU8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRCI+RlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRDwvYT4gICAgPSAzCisKKyAgfSA8Yj5GVF9TdHJva2VyX0xpbmVKb2luPC9iPjsKKzwvcHJlPgorCis8cD5UaGVzZSB2YWx1ZXMgZGV0ZXJtaW5lIGhvdyB0d28gam9pbmluZyBsaW5lcyBhcmUgcmVuZGVyZWQgaW4gYSBzdHJva2VyLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5EIj5GVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5EPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNlZCB0byByZW5kZXIgcm91bmRlZCBsaW5lIGpvaW5zLiBDaXJjdWxhciBhcmNzIGFyZSB1c2VkIHRvIGpvaW4gdHdvIGxpbmVzIHNtb290aGx5LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NUUk9LRVJfTElORUpPSU5fQkVWRUwiPkZUX1NUUk9LRVJfTElORUpPSU5fQkVWRUw8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIHRvIHJlbmRlciBiZXZlbGVkIGxpbmUgam9pbnMuIFRoZSBvdXRlciBjb3JuZXIgb2YgdGhlIGpvaW5lZCBsaW5lcyBpcyBmaWxsZWQgYnkgZW5jbG9zaW5nIHRoZSB0cmlhbmd1bGFyIHJlZ2lvbiBvZiB0aGUgY29ybmVyIHdpdGggYSBzdHJhaWdodCBsaW5lIGJldHdlZW4gdGhlIG91dGVyIGNvcm5lcnMgb2YgZWFjaCBzdHJva2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRCI+RlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzZWQgdG8gcmVuZGVyIG1pdGVyZWQgbGluZSBqb2lucywgd2l0aCBmaXhlZCBiZXZlbHMgaWYgdGhlIG1pdGVyIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGUgb3V0ZXIgZWRnZXMgb2YgdGhlIHN0cm9rZXMgZm9yIHRoZSB0d28gc2VnbWVudHMgYXJlIGV4dGVuZGVkIHVudGlsIHRoZXkgbWVldCBhdCBhbiBhbmdsZS4gSWYgdGhlIHNlZ21lbnRzIG1lZXQgYXQgdG9vIHNoYXJwIGFuIGFuZ2xlIChzdWNoIHRoYXQgdGhlIG1pdGVyIHdvdWxkIGV4dGVuZCBmcm9tIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHNlZ21lbnRzIGEgZGlzdGFuY2UgZ3JlYXRlciB0aGFuIHRoZSBwcm9kdWN0IG9mIHRoZSBtaXRlciBsaW1pdCB2YWx1ZSBhbmQgdGhlIGJvcmRlciByYWRpdXMpLCB0aGVuIGEgYmV2ZWwgam9pbiAoc2VlIGFib3ZlKSBpcyB1c2VkIGluc3RlYWQuIFRoaXMgcHJldmVudHMgbG9uZyBzcGlrZXMgYmVpbmcgY3JlYXRlZC4gRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRCBnZW5lcmF0ZXMgYSBtaXRlciBsaW5lIGpvaW4gYXMgdXNlZCBpbiBQb3N0U2NyaXB0IGFuZCBQREYuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSI+RlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NUUk9LRVJfTElORUpPSU5fTUlURVIiPkZUX1NUUk9LRVJfTElORUpPSU5fTUlURVI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIHRvIHJlbmRlciBtaXRlcmVkIGxpbmUgam9pbnMsIHdpdGggdmFyaWFibGUgYmV2ZWxzIGlmIHRoZSBtaXRlciBsaW1pdCBpcyBleGNlZWRlZC4gVGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc3Ryb2tlcyBpcyBjbGlwcGVkIGF0IGEgbGluZSBwZXJwZW5kaWN1bGFyIHRvIHRoZSBiaXNlY3RvciBvZiB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgc3Ryb2tlcywgYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc2VnbWVudHMgZXF1YWwgdG8gdGhlIHByb2R1Y3Qgb2YgdGhlIG1pdGVyIGxpbWl0IHZhbHVlIGFuZCB0aGUgYm9yZGVyIHJhZGl1cy4gVGhpcyBwcmV2ZW50cyBsb25nIHNwaWtlcyBiZWluZyBjcmVhdGVkLiBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFIGdlbmVyYXRlcyBhIG1pdGVyZWQgbGluZSBqb2luIGFzIHVzZWQgaW4gWFBTLiBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSIGlzIGFuIGFsaWFzIGZvciBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFLCByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9MaW5lQ2FwIj5GVF9TdHJva2VyX0xpbmVDYXA8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX1N0cm9rZXJfTGluZUNhcF8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU1RST0tFUl9MSU5FQ0FQX0JVVFQiPkZUX1NUUk9LRVJfTElORUNBUF9CVVRUPC9hPiA9IDAsCisgICAgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TVFJPS0VSX0xJTkVDQVBfUk9VTkQiPkZUX1NUUk9LRVJfTElORUNBUF9ST1VORDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TVFJPS0VSX0xJTkVDQVBfU1FVQVJFIj5GVF9TVFJPS0VSX0xJTkVDQVBfU1FVQVJFPC9hPgorCisgIH0gPGI+RlRfU3Ryb2tlcl9MaW5lQ2FwPC9iPjsKKzwvcHJlPgorCis8cD5UaGVzZSB2YWx1ZXMgZGV0ZXJtaW5lIGhvdyB0aGUgZW5kIG9mIG9wZW5lZCBzdWItcGF0aHMgYXJlIHJlbmRlcmVkIGluIGEgc3Ryb2tlLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVFJPS0VSX0xJTkVDQVBfQlVUVCI+RlRfU1RST0tFUl9MSU5FQ0FQX0JVVFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZW5kIG9mIGxpbmVzIGlzIHJlbmRlcmVkIGFzIGEgZnVsbCBzdG9wIG9uIHRoZSBsYXN0IHBvaW50IGl0c2VsZi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVFJPS0VSX0xJTkVDQVBfUk9VTkQiPkZUX1NUUk9LRVJfTElORUNBUF9ST1VORDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBlbmQgb2YgbGluZXMgaXMgcmVuZGVyZWQgYXMgYSBoYWxmLWNpcmNsZSBhcm91bmQgdGhlIGxhc3QgcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU1RST0tFUl9MSU5FQ0FQX1NRVUFSRSI+RlRfU1RST0tFUl9MSU5FQ0FQX1NRVUFSRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBlbmQgb2YgbGluZXMgaXMgcmVuZGVyZWQgYXMgYSBzcXVhcmUgYXJvdW5kIHRoZSBsYXN0IHBvaW50LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX1N0cm9rZXJCb3JkZXJfCisgIHsKKyAgICA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1NUUk9LRVJfQk9SREVSX0xFRlQiPkZUX1NUUk9LRVJfQk9SREVSX0xFRlQ8L2E+ID0gMCwKKyAgICA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1NUUk9LRVJfQk9SREVSX1JJR0hUIj5GVF9TVFJPS0VSX0JPUkRFUl9SSUdIVDwvYT4KKworICB9IDxiPkZUX1N0cm9rZXJCb3JkZXI8L2I+OworPC9wcmU+CisKKzxwPlRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBzZWxlY3QgYSBnaXZlbiBzdHJva2UgYm9yZGVyIGluIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0V4cG9ydEJvcmRlciI+RlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXI8L2E+LjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TVFJPS0VSX0JPUkRFUl9MRUZUIj5GVF9TVFJPS0VSX0JPUkRFUl9MRUZUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2VsZWN0IHRoZSBsZWZ0IGJvcmRlciwgcmVsYXRpdmUgdG8gdGhlIGRyYXdpbmcgZGlyZWN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NUUk9LRVJfQk9SREVSX1JJR0hUIj5GVF9TVFJPS0VSX0JPUkRFUl9SSUdIVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlNlbGVjdCB0aGUgcmlnaHQgYm9yZGVyLCByZWxhdGl2ZSB0byB0aGUgZHJhd2luZyBkaXJlY3Rpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+QXBwbGljYXRpb25zIGFyZSBnZW5lcmFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgJmxzcXVvO2luc2lkZSZyc3F1bzsgYW5kICZsc3F1bztvdXRzaWRlJnJzcXVvOyBib3JkZXJzLiBIb3dldmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgbWFwcGluZyBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUgJmxzcXVvO2xlZnQmcnNxdW87IGFuZCAmbHNxdW87cmlnaHQmcnNxdW87IG9uZXMsIHNpbmNlIHRoaXMgcmVhbGx5IGRlcGVuZHMgb24gdGhlIGdseXBoJ3MgZHJhd2luZyBvcmllbnRhdGlvbiwgd2hpY2ggdmFyaWVzIGJldHdlZW4gZm9udCBmb3JtYXRzLjwvcD4KKzxwPllvdSBjYW4gaG93ZXZlciB1c2UgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlciI+RlRfT3V0bGluZV9HZXRJbnNpZGVCb3JkZXI8L2E+IGFuZCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlciI+RlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyPC9hPiB0byBnZXQgdGhlc2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlciI+RlRfT3V0bGluZV9HZXRJbnNpZGVCb3JkZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyQm9yZGVyIj5GVF9TdHJva2VyQm9yZGVyPC9hPiApCisgIDxiPkZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyPC9iPiggPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIHRoZSA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2E+IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlICZsc3F1bztpbnNpZGUmcnNxdW87IGJvcmRlcnMgb2YgYSBnaXZlbiBvdXRsaW5lLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIG91dGxpbmUgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGJvcmRlciBpbmRleC4gPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyQm9yZGVyIj5GVF9TVFJPS0VSX0JPUkRFUl9SSUdIVDwvYT4gZm9yIGVtcHR5IG9yIGludmFsaWQgb3V0bGluZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIiPkZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyPC9iPiggPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIHRoZSA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2E+IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlICZsc3F1bztvdXRzaWRlJnJzcXVvOyBib3JkZXJzIG9mIGEgZ2l2ZW4gb3V0bGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvdXRsaW5lIj5vdXRsaW5lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNvdXJjZSBvdXRsaW5lIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBib3JkZXIgaW5kZXguIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlckJvcmRlciI+RlRfU1RST0tFUl9CT1JERVJfTEVGVDwvYT4gZm9yIGVtcHR5IG9yIGludmFsaWQgb3V0bGluZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HbHlwaF9TdHJva2UiPkZUX0dseXBoX1N0cm9rZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2x5cGhfU3Ryb2tlPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+ICAgICpwZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgICBkZXN0cm95ICk7Cis8L3ByZT4KKworPHA+U3Ryb2tlIGEgZ2l2ZW4gb3V0bGluZSBnbHlwaCBvYmplY3Qgd2l0aCBhIGdpdmVuIHN0cm9rZXIuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icGdseXBoIj5wZ2x5cGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Tb3VyY2UgZ2x5cGggaGFuZGxlIG9uIGlucHV0LCBuZXcgZ2x5cGggaGFuZGxlIG9uIG91dHB1dC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3Ryb2tlciI+c3Ryb2tlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3Ryb2tlciBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVzdHJveSI+ZGVzdHJveTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgQm9vbGVhbi4gSWYmbmJzcDsxLCB0aGUgc291cmNlIGdseXBoIG9iamVjdCBpcyBkZXN0cm95ZWQgb24gc3VjY2Vzcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHNvdXJjZSBnbHlwaCBpcyB1bnRvdWNoZWQgaW4gY2FzZSBvZiBlcnJvci48L3A+Cis8cD5BZGRpbmcgc3Ryb2tlIG1heSB5aWVsZCBhIHNpZ25pZmljYW50bHkgd2lkZXIgYW5kIHRhbGxlciBnbHlwaCBkZXBlbmRpbmcgb24gaG93IGxhcmdlIG9mIGEgcmFkaXVzIHdhcyB1c2VkIHRvIHN0cm9rZSB0aGUgZ2x5cGguIFlvdSBtYXkgbmVlZCB0byBtYW51YWxseSBhZGp1c3QgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWR2YW5jZSBhbW91bnRzIHRvIGFjY291bnQgZm9yIHRoaXMgYWRkZWQgc2l6ZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dseXBoX1N0cm9rZUJvcmRlciI+RlRfR2x5cGhfU3Ryb2tlQm9yZGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HbHlwaF9TdHJva2VCb3JkZXI8L2I+KCA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT4gICAgKnBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2E+ICAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPiAgICAgIGluc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPiAgICAgIGRlc3Ryb3kgKTsKKzwvcHJlPgorCis8cD5TdHJva2UgYSBnaXZlbiBvdXRsaW5lIGdseXBoIG9iamVjdCB3aXRoIGEgZ2l2ZW4gc3Ryb2tlciwgYnV0IG9ubHkgcmV0dXJuIGVpdGhlciBpdHMgaW5zaWRlIG9yIG91dHNpZGUgYm9yZGVyLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBnbHlwaCI+cGdseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U291cmNlIGdseXBoIGhhbmRsZSBvbiBpbnB1dCwgbmV3IGdseXBoIGhhbmRsZSBvbiBvdXRwdXQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imluc2lkZSI+aW5zaWRlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBCb29sZWFuLiBJZiZuYnNwOzEsIHJldHVybiB0aGUgaW5zaWRlIGJvcmRlciwgb3RoZXJ3aXNlIHRoZSBvdXRzaWRlIGJvcmRlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJkZXN0cm95Ij5kZXN0cm95PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBCb29sZWFuLiBJZiZuYnNwOzEsIHRoZSBzb3VyY2UgZ2x5cGggb2JqZWN0IGlzIGRlc3Ryb3llZCBvbiBzdWNjZXNzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgc291cmNlIGdseXBoIGlzIHVudG91Y2hlZCBpbiBjYXNlIG9mIGVycm9yLjwvcD4KKzxwPkFkZGluZyBzdHJva2UgbWF5IHlpZWxkIGEgc2lnbmlmaWNhbnRseSB3aWRlciBhbmQgdGFsbGVyIGdseXBoIGRlcGVuZGluZyBvbiBob3cgbGFyZ2Ugb2YgYSByYWRpdXMgd2FzIHVzZWQgdG8gc3Ryb2tlIHRoZSBnbHlwaC4gWW91IG1heSBuZWVkIHRvIG1hbnVhbGx5IGFkanVzdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhZHZhbmNlIGFtb3VudHMgdG8gYWNjb3VudCBmb3IgdGhpcyBhZGRlZCBzaXplLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9OZXciPkZUX1N0cm9rZXJfTmV3PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TdHJva2VyX05ldzwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gICphc3Ryb2tlciApOworPC9wcmU+CisKKzxwPkNyZWF0ZSBhIG5ldyBzdHJva2VyIG9iamVjdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RnJlZVR5cGUgbGlicmFyeSBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhc3Ryb2tlciI+YXN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIG5ldyBzdHJva2VyIG9iamVjdCBoYW5kbGUuIE5VTEwgaW4gY2FzZSBvZiBlcnJvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9TZXQiPkZUX1N0cm9rZXJfU2V0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX1N0cm9rZXJfU2V0PC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgICAgICAgICAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgICAgICAgICAgcmFkaXVzLAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVDYXAiPkZUX1N0cm9rZXJfTGluZUNhcDwvYT4gICBsaW5lX2NhcCwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9MaW5lSm9pbiI+RlRfU3Ryb2tlcl9MaW5lSm9pbjwvYT4gIGxpbmVfam9pbiwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgICAgICAgICAgbWl0ZXJfbGltaXQgKTsKKzwvcHJlPgorCis8cD5SZXNldCBhIHN0cm9rZXIgb2JqZWN0J3MgYXR0cmlidXRlcy48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJva2VyIj5zdHJva2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyYWRpdXMiPnJhZGl1czwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBib3JkZXIgcmFkaXVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpbmVfY2FwIj5saW5lX2NhcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBsaW5lIGNhcCBzdHlsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaW5lX2pvaW4iPmxpbmVfam9pbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBsaW5lIGpvaW4gc3R5bGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWl0ZXJfbGltaXQiPm1pdGVyX2xpbWl0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1pdGVyIGxpbWl0IGZvciB0aGUgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRCBhbmQgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSBsaW5lIGpvaW4gc3R5bGVzLCBleHByZXNzZWQgYXMgMTYuMTYgZml4ZWQtcG9pbnQgdmFsdWUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHJhZGl1cyBpcyBleHByZXNzZWQgaW4gdGhlIHNhbWUgdW5pdHMgYXMgdGhlIG91dGxpbmUgY29vcmRpbmF0ZXMuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBjYWxscyA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfUmV3aW5kIj5GVF9TdHJva2VyX1Jld2luZDwvYT4gYXV0b21hdGljYWxseS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cm9rZXJfUmV3aW5kIj5GVF9TdHJva2VyX1Jld2luZDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9TdHJva2VyX1Jld2luZDwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gIHN0cm9rZXIgKTsKKzwvcHJlPgorCis8cD5SZXNldCBhIHN0cm9rZXIgb2JqZWN0IHdpdGhvdXQgY2hhbmdpbmcgaXRzIGF0dHJpYnV0ZXMuIFlvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBiZWdpbm5pbmcgYSBuZXcgc2VyaWVzIG9mIGNhbGxzIHRvIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9CZWdpblN1YlBhdGgiPkZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoPC9hPiBvciA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfRW5kU3ViUGF0aCI+RlRfU3Ryb2tlcl9FbmRTdWJQYXRoPC9hPi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJva2VyIj5zdHJva2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX1BhcnNlT3V0bGluZSI+RlRfU3Ryb2tlcl9QYXJzZU91dGxpbmU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT4qICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgICBvcGVuZWQgKTsKKzwvcHJlPgorCis8cD5BIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHVzZWQgdG8gcGFyc2UgYSB3aG9sZSBvdXRsaW5lIHdpdGggdGhlIHN0cm9rZXIuIFRoZSByZXN1bHRpbmcgb3V0bGluZShzKSBjYW4gYmUgcmV0cmlldmVkIGxhdGVyIGJ5IGZ1bmN0aW9ucyBsaWtlIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRDb3VudHMiPkZUX1N0cm9rZXJfR2V0Q291bnRzPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0V4cG9ydCI+RlRfU3Ryb2tlcl9FeHBvcnQ8L2E+LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3BlbmVkIj5vcGVuZWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGJvb2xlYW4uIElmJm5ic3A7MSwgdGhlIG91dGxpbmUgaXMgdHJlYXRlZCBhcyBhbiBvcGVuIHBhdGggaW5zdGVhZCBvZiBhIGNsb3NlZCBvbmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPklmICZsc3F1bztvcGVuZWQmcnNxdW87IGlzJm5ic3A7MCAodGhlIGRlZmF1bHQpLCB0aGUgb3V0bGluZSBpcyB0cmVhdGVkIGFzIGEgY2xvc2VkIHBhdGgsIGFuZCB0aGUgc3Ryb2tlciBnZW5lcmF0ZXMgdHdvIGRpc3RpbmN0ICZsc3F1bztib3JkZXImcnNxdW87IG91dGxpbmVzLjwvcD4KKzxwPklmICZsc3F1bztvcGVuZWQmcnNxdW87IGlzJm5ic3A7MSwgdGhlIG91dGxpbmUgaXMgcHJvY2Vzc2VkIGFzIGFuIG9wZW4gcGF0aCwgYW5kIHRoZSBzdHJva2VyIGdlbmVyYXRlcyBhIHNpbmdsZSAmbHNxdW87c3Ryb2tlJnJzcXVvOyBvdXRsaW5lLjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gY2FsbHMgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX1Jld2luZCI+RlRfU3Ryb2tlcl9SZXdpbmQ8L2E+IGF1dG9tYXRpY2FsbHkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX0RvbmUiPkZUX1N0cm9rZXJfRG9uZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9TdHJva2VyX0RvbmU8L2I+KCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2E+ICBzdHJva2VyICk7Cis8L3ByZT4KKworPHA+RGVzdHJveSBhIHN0cm9rZXIgb2JqZWN0LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN0cm9rZXIgaGFuZGxlLiBDYW4gYmUgTlVMTC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCI+RlRfU3Ryb2tlcl9CZWdpblN1YlBhdGg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgIG9wZW4gKTsKKzwvcHJlPgorCis8cD5TdGFydCBhIG5ldyBzdWItcGF0aCBpbiB0aGUgc3Ryb2tlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJva2VyIj5zdHJva2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0byI+dG88L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IHZlY3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvcGVuIj5vcGVuPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBib29sZWFuLiBJZiZuYnNwOzEsIHRoZSBzdWItcGF0aCBpcyB0cmVhdGVkIGFzIGFuIG9wZW4gb25lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIHN0cm9rZSBhIHBhdGggdGhhdCBpcyBub3Qgc3RvcmVkIGFzIGFuIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiBvYmplY3QuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX0VuZFN1YlBhdGgiPkZUX1N0cm9rZXJfRW5kU3ViUGF0aDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU3Ryb2tlcl9FbmRTdWJQYXRoPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgc3Ryb2tlciApOworPC9wcmU+CisKKzxwPkNsb3NlIHRoZSBjdXJyZW50IHN1Yi1wYXRoIGluIHRoZSBzdHJva2VyLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3Ugc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIj5GVF9TdHJva2VyX0JlZ2luU3ViUGF0aDwvYT4uIElmIHRoZSBzdWJwYXRoIHdhcyBub3QgJmxzcXVvO29wZW5lZCZyc3F1bzssIHRoaXMgZnVuY3Rpb24gJmxzcXVvO2RyYXdzJnJzcXVvOyBhIHNpbmdsZSBsaW5lIHNlZ21lbnQgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIHdoZW4gbmVlZGVkLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9MaW5lVG8iPkZUX1N0cm9rZXJfTGluZVRvPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TdHJva2VyX0xpbmVUbzwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICB0byApOworPC9wcmU+CisKKzxwPiZsc3F1bztEcmF3JnJzcXVvOyBhIHNpbmdsZSBsaW5lIHNlZ21lbnQgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLCBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRvIj50bzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPllvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGJldHdlZW4gPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCI+RlRfU3Ryb2tlcl9CZWdpblN1YlBhdGg8L2E+IGFuZCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfRW5kU3ViUGF0aCI+RlRfU3Ryb2tlcl9FbmRTdWJQYXRoPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cm9rZXJfQ29uaWNUbyI+RlRfU3Ryb2tlcl9Db25pY1RvPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TdHJva2VyX0NvbmljVG88L2I+KCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2E+ICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogIGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgdG8gKTsKKzwvcHJlPgorCis8cD4mbHNxdW87RHJhdyZyc3F1bzsgYSBzaW5nbGUgcXVhZHJhdGljIELDqXppZXIgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLCBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNvbnRyb2wiPmNvbnRyb2w8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYSBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idG8iPnRvPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYmV0d2VlbiA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIj5GVF9TdHJva2VyX0JlZ2luU3ViUGF0aDwvYT4gYW5kIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9FbmRTdWJQYXRoIj5GVF9TdHJva2VyX0VuZFN1YlBhdGg8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9DdWJpY1RvIj5GVF9TdHJva2VyX0N1YmljVG88L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1N0cm9rZXJfQ3ViaWNUbzwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgY29udHJvbDEsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgY29udHJvbDIsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgdG8gKTsKKzwvcHJlPgorCis8cD4mbHNxdW87RHJhdyZyc3F1bzsgYSBzaW5nbGUgY3ViaWMgQsOpemllciBpbiB0aGUgc3Ryb2tlcidzIGN1cnJlbnQgc3ViLXBhdGgsIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3Ryb2tlciI+c3Ryb2tlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB0YXJnZXQgc3Ryb2tlciBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY29udHJvbDEiPmNvbnRyb2wxPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBmaXJzdCBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY29udHJvbDIiPmNvbnRyb2wyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHNlY29uZCBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idG8iPnRvPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+WW91IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYmV0d2VlbiA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIj5GVF9TdHJva2VyX0JlZ2luU3ViUGF0aDwvYT4gYW5kIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9FbmRTdWJQYXRoIj5GVF9TdHJva2VyX0VuZFN1YlBhdGg8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1RST0tFUl9IIChmdHN0cm9rZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TdHJva2VyX0dldEJvcmRlckNvdW50czwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gICAgICAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2E+ICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICAqYW51bV9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICAqYW51bV9jb250b3VycyApOworPC9wcmU+CisKKzxwPkNhbGwgdGhpcyBmdW5jdGlvbiBvbmNlIHlvdSBoYXZlIGZpbmlzaGVkIHBhcnNpbmcgeW91ciBwYXRocyB3aXRoIHRoZSBzdHJva2VyLiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRzIGFuZCBjb250b3VycyBuZWNlc3NhcnkgdG8gZXhwb3J0IG9uZSBvZiB0aGUgJmxzcXVvO2JvcmRlciZyc3F1bzsgb3IgJmxzcXVvO3N0cm9rZSZyc3F1bzsgb3V0bGluZXMgZ2VuZXJhdGVkIGJ5IHRoZSBzdHJva2VyLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJvcmRlciI+Ym9yZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGJvcmRlciBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFudW1fcG9pbnRzIj5hbnVtX3BvaW50czwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgcG9pbnRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFudW1fY29udG91cnMiPmFudW1fY29udG91cnM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGNvbnRvdXJzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5XaGVuIGFuIG91dGxpbmUsIG9yIGEgc3ViLXBhdGgsIGlzICZsc3F1bztjbG9zZWQmcnNxdW87LCB0aGUgc3Ryb2tlciBnZW5lcmF0ZXMgdHdvIGluZGVwZW5kZW50ICZsc3F1bztib3JkZXImcnNxdW87IG91dGxpbmVzLCBuYW1lZCAmbHNxdW87bGVmdCZyc3F1bzsgYW5kICZsc3F1bztyaWdodCZyc3F1bzsuPC9wPgorPHA+V2hlbiB0aGUgb3V0bGluZSwgb3IgYSBzdWItcGF0aCwgaXMgJmxzcXVvO29wZW5lZCZyc3F1bzssIHRoZSBzdHJva2VyIG1lcmdlcyB0aGUgJmxzcXVvO2JvcmRlciZyc3F1bzsgb3V0bGluZXMgd2l0aCBjYXBzLiBUaGUgJmxzcXVvO2xlZnQmcnNxdW87IGJvcmRlciByZWNlaXZlcyBhbGwgcG9pbnRzLCB3aGlsZSB0aGUgJmxzcXVvO3JpZ2h0JnJzcXVvOyBib3JkZXIgYmVjb21lcyBlbXB0eS48L3A+Cis8cD5Vc2UgdGhlIGZ1bmN0aW9uIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRDb3VudHMiPkZUX1N0cm9rZXJfR2V0Q291bnRzPC9hPiBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIHJldHJpZXZlIHRoZSBjb3VudHMgYXNzb2NpYXRlZCB0byBib3RoIGJvcmRlcnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX0V4cG9ydEJvcmRlciI+RlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXI8L2I+KCA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2E+ICAgICAgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyQm9yZGVyIj5GVF9TdHJva2VyQm9yZGVyPC9hPiAgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgICAgICBvdXRsaW5lICk7Cis8L3ByZT4KKworPHA+Q2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9hPiB0byBleHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgYm9yZGVyIHRvIHlvdXIgb3duIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYXBwZW5kcyB0aGUgYm9yZGVyIHBvaW50cyBhbmQgY29udG91cnMgdG8geW91ciBvdXRsaW5lLCBidXQgZG9lcyBub3QgdHJ5IHRvIHJlc2l6ZSBpdHMgYXJyYXlzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJvcmRlciI+Ym9yZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGJvcmRlciBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvdXRsaW5lIj5vdXRsaW5lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBvdXRsaW5lIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5BbHdheXMgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9hPiB0byBnZXQgc3VyZSB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHlvdXIgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+IG9iamVjdCB0byByZWNlaXZlIGFsbCBuZXcgZGF0YS48L3A+Cis8cD5XaGVuIGFuIG91dGxpbmUsIG9yIGEgc3ViLXBhdGgsIGlzICZsc3F1bztjbG9zZWQmcnNxdW87LCB0aGUgc3Ryb2tlciBnZW5lcmF0ZXMgdHdvIGluZGVwZW5kZW50ICZsc3F1bztib3JkZXImcnNxdW87IG91dGxpbmVzLCBuYW1lZCAmbHNxdW87bGVmdCZyc3F1bzsgYW5kICZsc3F1bztyaWdodCZyc3F1bzsuPC9wPgorPHA+V2hlbiB0aGUgb3V0bGluZSwgb3IgYSBzdWItcGF0aCwgaXMgJmxzcXVvO29wZW5lZCZyc3F1bzssIHRoZSBzdHJva2VyIG1lcmdlcyB0aGUgJmxzcXVvO2JvcmRlciZyc3F1bzsgb3V0bGluZXMgd2l0aCBjYXBzLiBUaGUgJmxzcXVvO2xlZnQmcnNxdW87IGJvcmRlciByZWNlaXZlcyBhbGwgcG9pbnRzLCB3aGlsZSB0aGUgJmxzcXVvO3JpZ2h0JnJzcXVvOyBib3JkZXIgYmVjb21lcyBlbXB0eS48L3A+Cis8cD5Vc2UgdGhlIGZ1bmN0aW9uIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9FeHBvcnQiPkZUX1N0cm9rZXJfRXhwb3J0PC9hPiBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIHJldHJpZXZlIGFsbCBib3JkZXJzIGF0IG9uY2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJva2VyX0dldENvdW50cyI+RlRfU3Ryb2tlcl9HZXRDb3VudHM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TVFJPS0VSX0ggKGZ0c3Ryb2tlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1N0cm9rZXJfR2V0Q291bnRzPC9iPiggPGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyIj5GVF9TdHJva2VyPC9hPiAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICphbnVtX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICphbnVtX2NvbnRvdXJzICk7Cis8L3ByZT4KKworPHA+Q2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgeW91IGhhdmUgZmluaXNoZWQgcGFyc2luZyB5b3VyIHBhdGhzIHdpdGggdGhlIHN0cm9rZXIuIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBwb2ludHMgYW5kIGNvbnRvdXJzIG5lY2Vzc2FyeSB0byBleHBvcnQgYWxsIHBvaW50cy9ib3JkZXJzIGZyb20gdGhlIHN0cm9rZWQgb3V0bGluZS9wYXRoLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW51bV9wb2ludHMiPmFudW1fcG9pbnRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBwb2ludHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW51bV9jb250b3VycyI+YW51bV9jb250b3VyczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgY29udG91cnMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cm9rZXJfRXhwb3J0Ij5GVF9TdHJva2VyX0V4cG9ydDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NUUk9LRVJfSCAoZnRzdHJva2UuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9TdHJva2VyX0V4cG9ydDwvYj4oIDxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlciI+RlRfU3Ryb2tlcjwvYT4gICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSApOworPC9wcmU+CisKKzxwPkNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciA8YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzIj5GVF9TdHJva2VyX0dldEJvcmRlckNvdW50czwvYT4gdG8gZXhwb3J0IGFsbCBib3JkZXJzIHRvIHlvdXIgb3duIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYXBwZW5kcyB0aGUgYm9yZGVyIHBvaW50cyBhbmQgY29udG91cnMgdG8geW91ciBvdXRsaW5lLCBidXQgZG9lcyBub3QgdHJ5IHRvIHJlc2l6ZSBpdHMgYXJyYXlzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cm9rZXIiPnN0cm9rZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IG91dGxpbmUgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1nbHlwaF92YXJpYW50cy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1nbHlwaF92YXJpYW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWdseXBoX3ZhcmlhbnRzLmh0bWwKQEAgLTAsMCArMSwyOTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5HbHlwaCBWYXJpYW50czwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgiPkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciI+RlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0Ij5GVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50Ij5GVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyI+RlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzPC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+TWFueSBDSksgY2hhcmFjdGVycyBoYXZlIHZhcmlhbnQgZm9ybXMuIFRoZXkgYXJlIGEgc29ydCBvZiBncmV5IGFyZWEgc29tZXdoZXJlIGJldHdlZW4gYmVpbmcgdG90YWxseSBpcnJlbGV2YW50IGFuZCBzZW1hbnRpY2FsbHkgZGlzdGluY3Q7IGZvciB0aGlzIHJlYXNvbiwgdGhlIFVuaWNvZGUgY29uc29ydGl1bSBkZWNpZGVkIHRvIGludHJvZHVjZSBJZGVvZ3JhcGhpYyBWYXJpYXRpb24gU2VxdWVuY2VzIChJVlMpLCBjb25zaXN0aW5nIG9mIGEgVW5pY29kZSBiYXNlIGNoYXJhY3RlciBhbmQgb25lIG9mIDI0MCB2YXJpYW50IHNlbGVjdG9ycyAoVStFMDEwMC1VK0UwMUVGKSwgaW5zdGVhZCBvZiBmdXJ0aGVyIGV4dGVuZGluZyB0aGUgYWxyZWFkeSBodWdlIGNvZGUgcmFuZ2UgZm9yIENKSyBjaGFyYWN0ZXJzLjwvcD4KKzxwPkFuIElWUyBpcyByZWdpc3RlcmVkIGFuZCB1bmlxdWU7IGZvciBmdXJ0aGVyIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNywgdGhlIElkZW9ncmFwaGljIFZhcmlhdGlvbiBEYXRhYmFzZTo8L3A+Cis8cD48YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8iPmh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM3LzwvYT48L3A+Cis8cD5UbyBkYXRlIChOb3ZlbWJlciAyMDE0KSwgdGhlIGNoYXJhY3RlciB3aXRoIHRoZSBtb3N0IHZhcmlhbnRzIGlzIFUrOTA4OSwgaGF2aW5nIDMyIHN1Y2ggSVZTLjwvcD4KKzxwPkFkb2JlIGFuZCBNUyBkZWNpZGVkIHRvIHN1cHBvcnQgSVZTIHdpdGggYSBuZXcgY21hcCBzdWJ0YWJsZSAoZm9ybWF0Jm5ic3A7MTQpLiBJdCBpcyBhbiBvZGQgc3VidGFibGUgYmVjYXVzZSBpdCBpcyBub3QgYSBtYXBwaW5nIG9mIGlucHV0IGNvZGUgcG9pbnRzIHRvIGdseXBocywgYnV0IGNvbnRhaW5zIGxpc3RzIG9mIGFsbCB2YXJpYW50cyBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuPC9wPgorPHA+QSB2YXJpYW50IG1heSBiZSBlaXRoZXIgJmxzcXVvO2RlZmF1bHQmcnNxdW87IG9yICZsc3F1bztub24tZGVmYXVsdCZyc3F1bzsuIEEgZGVmYXVsdCB2YXJpYW50IGlzIHRoZSBvbmUgeW91IHdpbGwgZ2V0IGZvciB0aGF0IGNvZGUgcG9pbnQgaWYgeW91IGxvb2sgaXQgdXAgaW4gdGhlIHN0YW5kYXJkIFVuaWNvZGUgY21hcC4gQSBub24tZGVmYXVsdCB2YXJpYW50IGlzIGEgZGlmZmVyZW50IGdseXBoLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleCI+RlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiApCisgIDxiPkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICB2YXJpYW50U2VsZWN0b3IgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgYXMgbW9kaWZpZWQgYnkgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjaGFyY29kZSI+Y2hhcmNvZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY2hhcmFjdGVyIGNvZGUgcG9pbnQgaW4gVW5pY29kZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2YXJpYW50U2VsZWN0b3IiPnZhcmlhbnRTZWxlY3RvcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBnbHlwaCBpbmRleC4gMCZuYnNwO21lYW5zIGVpdGhlciAmbHNxdW87dW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJnJzcXVvOywgb3IgJmxzcXVvO3VuZGVmaW5lZCBzZWxlY3RvciBjb2RlJnJzcXVvOywgb3IgJmxzcXVvO25vIHZhcmlhdGlvbiBzZWxlY3RvciBjbWFwIHN1YnRhYmxlJnJzcXVvOywgb3IgJmxzcXVvO2N1cnJlbnQgQ2hhck1hcCBpcyBub3QgVW5pY29kZSZyc3F1bzsuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiB5b3UgdXNlIEZyZWVUeXBlIHRvIG1hbmlwdWxhdGUgdGhlIGNvbnRlbnRzIG9mIGZvbnQgZmlsZXMgZGlyZWN0bHksIGJlIGF3YXJlIHRoYXQgdGhlIGdseXBoIGluZGV4IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gZG9lc24ndCBhbHdheXMgY29ycmVzcG9uZCB0byB0aGUgaW50ZXJuYWwgaW5kaWNlcyB1c2VkIHdpdGhpbiB0aGUgZmlsZS4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IHZhbHVlJm5ic3A7MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlICZsc3F1bzttaXNzaW5nIGdseXBoJnJzcXVvOy48L3A+Cis8cD5UaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiBhKSB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCBzdWIgdGFibGUsIGFuZCBiKSB0aGUgY3VycmVudCBjaGFybWFwIGhhcyBhIFVuaWNvZGUgZW5jb2RpbmcuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjY8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQiPkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiApCisgIDxiPkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQ8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gIGNoYXJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICB2YXJpYW50U2VsZWN0b3IgKTsKKzwvcHJlPgorCis8cD5DaGVjayB3aGV0aGVyIHRoaXMgdmFyaWFudCBvZiB0aGlzIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHRoZSBvbmUgdG8gYmUgZm91bmQgaW4gdGhlICZsc3F1bztjbWFwJnJzcXVvOy48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjaGFyY29kZSI+Y2hhcmNvZGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY2hhcmFjdGVyIGNvZGVwb2ludCBpbiBVbmljb2RlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZhcmlhbnRTZWxlY3RvciI+dmFyaWFudFNlbGVjdG9yPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIFVuaWNvZGUgY29kZXBvaW50IG9mIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD4xJm5ic3A7aWYgZm91bmQgaW4gdGhlIHN0YW5kYXJkIChVbmljb2RlKSBjbWFwLCAwJm5ic3A7aWYgZm91bmQgaW4gdGhlIHZhcmlhdGlvbiBzZWxlY3RvciBjbWFwLCBvciAtMSBpZiBpdCBpcyBub3QgYSB2YXJpYW50LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgdGhlIGZvbnQgaGFzIGEgdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgc3VidGFibGUuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjY8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyI+RlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfRlJFRVRZUEVfSCAoZnJlZXR5cGUuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50MzIiPkZUX1VJbnQzMjwvYT4qICkKKyAgPGI+RlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gIGZhY2UgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gYSB6ZXJvLXRlcm1pbmF0ZWQgbGlzdCBvZiBVbmljb2RlIHZhcmlhbnQgc2VsZWN0b3JzIGZvdW5kIGluIHRoZSBmb250LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+QSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNlbGVjdG9yIGNvZGUgcG9pbnRzLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIHZhbGlkIHZhcmlhbnQgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzJm5ic3A7MDsgdGhlIGFycmF5IGlzIG93bmVkIGJ5IHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dCBjYWxsIHRvIGEgRnJlZVR5cGUgZnVuY3Rpb24uPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjY8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIiPkZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQzMiI+RlRfVUludDMyPC9hPiogKQorICA8Yj5GVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICBjaGFyY29kZSApOworPC9wcmU+CisKKzxwPlJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgZm9yIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGNvZGUuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2hhcmNvZGUiPmNoYXJjb2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGNoYXJhY3RlciBjb2RlcG9pbnQgaW4gVW5pY29kZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB2YXJpYW50IHNlbGVjdG9yIGNvZGUgcG9pbnRzIHRoYXQgYXJlIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IgTlVMTCBpZiB0aGUgY29ycmVzcG9uZGluZyBsaXN0IGlzIGVtcHR5LjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMmbmJzcDswOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0IGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuNjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudCI+RlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDMyIj5GVF9VSW50MzI8L2E+KiApCisgIDxiPkZUX0ZhY2VfR2V0Q2hhcnNPZlZhcmlhbnQ8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gIHZhcmlhbnRTZWxlY3RvciApOworPC9wcmU+CisKKzxwPlJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVyIGNvZGVzIGZvdW5kIGZvciB0aGUgc3BlY2lmaWVkIHZhcmlhbnQgc2VsZWN0b3IuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFyaWFudFNlbGVjdG9yIj52YXJpYW50U2VsZWN0b3I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmFyaWFudCBzZWxlY3RvciBjb2RlIHBvaW50IGluIFVuaWNvZGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5BIGxpc3Qgb2YgYWxsIHRoZSBjb2RlIHBvaW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgYnkgdGhpcyBzZWxlY3RvciAoYm90aCBkZWZhdWx0IGFuZCBub24tZGVmYXVsdCBjb2RlcyBhcmUgcmV0dXJuZWQpIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gdmFsaWQgY21hcCBvciB0aGUgdmFyaWFudCBzZWxlY3RvciBpcyBpbnZhbGlkLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMmbmJzcDswOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0IGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuNjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZ3hfdmFsaWRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGI0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWd4X3ZhbGlkYXRpb24uaHRtbApAQCAtMCwwICsxLDM2MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlRydWVUeXBlR1gvQUFUIFZhbGlkYXRpb248L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSI+RlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUiPkZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9WQUxJREFURV9HWF9MRU5HVEgiPkZUX1ZBTElEQVRFX0dYX0xFTkdUSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9UcnVlVHlwZUdYX0ZyZWUiPkZUX1RydWVUeXBlR1hfRnJlZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQ2xhc3NpY0tlcm5fRnJlZSI+RlRfQ2xhc3NpY0tlcm5fRnJlZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX0dYWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZBTElEQVRFX0NLRVJOWFhYIj5GVF9WQUxJREFURV9DS0VSTlhYWDwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHRvIHZhbGlkYXRlIHNvbWUgVHJ1ZVR5cGVHWCB0YWJsZXMgKGZlYXQsIG1vcnQsIG1vcngsIGJzbG4sIGp1c3QsIGtlcm4sIG9wYmQsIHRyYWssIHByb3AsIGxjYXIpLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RydWVUeXBlR1hfVmFsaWRhdGUiPkZUX1RydWVUeXBlR1hfVmFsaWRhdGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HWF9WQUxJREFURV9IIChmdGd4dmFsLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1RydWVUeXBlR1hfVmFsaWRhdGU8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgdmFsaWRhdGlvbl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZXMiPkZUX0J5dGVzPC9hPiAgdGFibGVzWzxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hfTEVOR1RIIj5GVF9WQUxJREFURV9HWF9MRU5HVEg8L2E+XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICB0YWJsZV9sZW5ndGggKTsKKzwvcHJlPgorCis8cD5WYWxpZGF0ZSB2YXJpb3VzIFRydWVUeXBlR1ggdGFibGVzIHRvIGFzc3VyZSB0aGF0IGFsbCBvZmZzZXRzIGFuZCBpbmRpY2VzIGFyZSB2YWxpZC4gVGhlIGlkZWEgaXMgdGhhdCBhIGhpZ2hlci1sZXZlbCBsaWJyYXJ5IHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgdGV4dCBsYXlvdXQgY2FuIGFjY2VzcyB0aG9zZSB0YWJsZXMgd2l0aG91dCBlcnJvciBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFsaWRhdGlvbl9mbGFncyI+dmFsaWRhdGlvbl9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSB0YWJsZXMgdG8gYmUgdmFsaWRhdGVkLiBTZWUgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HWFhYWCI+RlRfVkFMSURBVEVfR1hYWFg8L2E+IGZvciBwb3NzaWJsZSB2YWx1ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFibGVfbGVuZ3RoIj50YWJsZV9sZW5ndGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc2l6ZSBvZiB0aGUgJmxzcXVvO3RhYmxlcyZyc3F1bzsgYXJyYXkuIE5vcm1hbGx5LCA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dYX0xFTkdUSCI+RlRfVkFMSURBVEVfR1hfTEVOR1RIPC9hPiBzaG91bGQgYmUgcGFzc2VkLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFibGVzIj50YWJsZXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYXJyYXkgd2hlcmUgYWxsIHZhbGlkYXRlZCBzZm50IHRhYmxlcyBhcmUgc3RvcmVkLiBUaGUgYXJyYXkgaXRzZWxmIG11c3QgYmUgYWxsb2NhdGVkIGJ5IGEgY2xpZW50LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBUcnVlVHlwZUdYIGZvbnRzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLjwvcD4KKzxwPkFmdGVyIHVzZSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZWFsbG9jYXRlIHRoZSBidWZmZXJzIHBvaW50ZWQgdG8gYnkgZWFjaCAmbHNxdW87dGFibGVzJnJzcXVvOyBlbGVtZW50LCBieSBjYWxsaW5nIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVHJ1ZVR5cGVHWF9GcmVlIj5GVF9UcnVlVHlwZUdYX0ZyZWU8L2E+LiBBIE5VTEwgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIHRhYmxlIGVpdGhlciBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LCB0aGUgYXBwbGljYXRpb24gaGFzbid0IGFza2VkIGZvciB2YWxpZGF0aW9uLCBvciB0aGUgdmFsaWRhdG9yIGRvZXNuJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byB2YWxpZGF0ZSB0aGUgc2ZudCB0YWJsZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RydWVUeXBlR1hfRnJlZSI+RlRfVHJ1ZVR5cGVHWF9GcmVlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR1hfVkFMSURBVEVfSCAoZnRneHZhbC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX1RydWVUeXBlR1hfRnJlZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlcyI+RlRfQnl0ZXM8L2E+ICB0YWJsZSApOworPC9wcmU+CisKKzxwPkZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgVHJ1ZVR5cGVHWCB2YWxpZGF0b3IuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhYmxlIj50YWJsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSI+RlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZTwvYT4uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1RydWVUeXBlR1hfVmFsaWRhdGUiPkZUX1RydWVUeXBlR1hfVmFsaWRhdGU8L2E+IG9ubHkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSI+RlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HWF9WQUxJREFURV9IIChmdGd4dmFsLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIHZhbGlkYXRpb25fZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlcyI+RlRfQnl0ZXM8L2E+ICAqY2tlcm5fdGFibGUgKTsKKzwvcHJlPgorCis8cD5WYWxpZGF0ZSBjbGFzc2ljICgxNi1iaXQgZm9ybWF0KSBrZXJuIHRhYmxlIHRvIGFzc3VyZSB0aGF0IHRoZSBvZmZzZXRzIGFuZCBpbmRpY2VzIGFyZSB2YWxpZC4gVGhlIGlkZWEgaXMgdGhhdCBhIGhpZ2hlci1sZXZlbCBsaWJyYXJ5IHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgdGV4dCBsYXlvdXQgY2FuIGFjY2VzcyB0aG9zZSB0YWJsZXMgd2l0aG91dCBlcnJvciBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS48L3A+Cis8cD5UaGUgJmxzcXVvO2tlcm4mcnNxdW87IHRhYmxlIHZhbGlkYXRvciBpbiA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1RydWVUeXBlR1hfVmFsaWRhdGUiPkZUX1RydWVUeXBlR1hfVmFsaWRhdGU8L2E+IGRlYWxzIHdpdGggYm90aCB0aGUgbmV3IDMyLWJpdCBmb3JtYXQgYW5kIHRoZSBjbGFzc2ljIDE2LWJpdCBmb3JtYXQsIHdoaWxlIEZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlIG9ubHkgc3VwcG9ydHMgdGhlIGNsYXNzaWMgMTYtYml0IGZvcm1hdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFsaWRhdGlvbl9mbGFncyI+dmFsaWRhdGlvbl9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSBkaWFsZWN0IHRvIGJlIHZhbGlkYXRlZC4gU2VlIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfQ0tFUk5YWFgiPkZUX1ZBTElEQVRFX0NLRVJOWFhYPC9hPiBmb3IgcG9zc2libGUgdmFsdWVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2tlcm5fdGFibGUiPmNrZXJuX3RhYmxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBrZXJuIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5BZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5ICZsc3F1bztja2Vybl90YWJsZSZyc3F1bzssIGJ5IGNhbGxpbmcgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9DbGFzc2ljS2Vybl9GcmVlIj5GVF9DbGFzc2ljS2Vybl9GcmVlPC9hPi4gQSBOVUxMIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQ2xhc3NpY0tlcm5fRnJlZSI+RlRfQ2xhc3NpY0tlcm5fRnJlZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dYX1ZBTElEQVRFX0ggKGZ0Z3h2YWwuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9DbGFzc2ljS2Vybl9GcmVlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlcyI+RlRfQnl0ZXM8L2E+ICB0YWJsZSApOworPC9wcmU+CisKKzxwPkZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgY2xhc3NpYyBLZXJuIHZhbGlkYXRvci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFibGUiPnRhYmxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCBieSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlIj5GVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZTwvYT4uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlIj5GVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZTwvYT4gb25seS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1ZBTElEQVRFX0dYX0xFTkdUSCI+RlRfVkFMSURBVEVfR1hfTEVOR1RIPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR1hfVkFMSURBVEVfSCAoZnRneHZhbC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9WQUxJREFURV9HWF9MRU5HVEg8L2I+ICAgICAoRlRfVkFMSURBVEVfR1hfTEFTVF9JTkRFWCArIDEpCis8L3ByZT4KKworPHA+VGhlIG51bWJlciBvZiB0YWJsZXMgY2hlY2tlZCBpbiB0aGlzIG1vZHVsZS4gVXNlIGl0IGFzIGEgcGFyYW1ldGVyIGZvciB0aGUgJmxzcXVvO3RhYmxlLWxlbmd0aCZyc3F1bzsgYXJndW1lbnQgb2YgZnVuY3Rpb24gPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlIj5GVF9UcnVlVHlwZUdYX1ZhbGlkYXRlPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1ZBTElEQVRFX0dYWFhYIj5GVF9WQUxJREFURV9HWFhYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0dYX1ZBTElEQVRFX0ggKGZ0Z3h2YWwuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9mZWF0Ij5GVF9WQUxJREFURV9mZWF0PC9hPiAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIGZlYXQgKQorI2RlZmluZSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX21vcnQiPkZUX1ZBTElEQVRFX21vcnQ8L2E+ICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggbW9ydCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfbW9yeCI+RlRfVkFMSURBVEVfbW9yeDwvYT4gIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBtb3J4ICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9ic2xuIj5GVF9WQUxJREFURV9ic2xuPC9hPiAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIGJzbG4gKQorI2RlZmluZSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2p1c3QiPkZUX1ZBTElEQVRFX2p1c3Q8L2E+ICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCgganVzdCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfa2VybiI+RlRfVkFMSURBVEVfa2VybjwvYT4gIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBrZXJuICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9vcGJkIj5GVF9WQUxJREFURV9vcGJkPC9hPiAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIG9wYmQgKQorI2RlZmluZSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX3RyYWsiPkZUX1ZBTElEQVRFX3RyYWs8L2E+ICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggdHJhayApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfcHJvcCI+RlRfVkFMSURBVEVfcHJvcDwvYT4gIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBwcm9wICkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9sY2FyIj5GVF9WQUxJREFURV9sY2FyPC9hPiAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIGxjYXIgKQorCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1giPkZUX1ZBTElEQVRFX0dYPC9hPiAgKCA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2ZlYXQiPkZUX1ZBTElEQVRFX2ZlYXQ8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX21vcnQiPkZUX1ZBTElEQVRFX21vcnQ8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX21vcngiPkZUX1ZBTElEQVRFX21vcng8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2JzbG4iPkZUX1ZBTElEQVRFX2JzbG48L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2p1c3QiPkZUX1ZBTElEQVRFX2p1c3Q8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2tlcm4iPkZUX1ZBTElEQVRFX2tlcm48L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX29wYmQiPkZUX1ZBTElEQVRFX29wYmQ8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX3RyYWsiPkZUX1ZBTElEQVRFX3RyYWs8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX3Byb3AiPkZUX1ZBTElEQVRFX3Byb3A8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX2xjYXIiPkZUX1ZBTElEQVRFX2xjYXI8L2E+ICkKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlIj5GVF9UcnVlVHlwZUdYX1ZhbGlkYXRlPC9hPiB0byBpbmRpY2F0ZSB3aGljaCBUcnVlVHlwZUdYL0FBVCBUeXBlIHRhYmxlcyBzaG91bGQgYmUgdmFsaWRhdGVkLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9WQUxJREFURV9mZWF0Ij5GVF9WQUxJREFURV9mZWF0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmFsaWRhdGUgJmxzcXVvO2ZlYXQmcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX21vcnQiPkZUX1ZBTElEQVRFX21vcnQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSAmbHNxdW87bW9ydCZyc3F1bzsgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfVkFMSURBVEVfbW9yeCI+RlRfVkFMSURBVEVfbW9yeDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbGlkYXRlICZsc3F1bzttb3J4JnJzcXVvOyB0YWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9WQUxJREFURV9ic2xuIj5GVF9WQUxJREFURV9ic2xuPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmFsaWRhdGUgJmxzcXVvO2JzbG4mcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX2p1c3QiPkZUX1ZBTElEQVRFX2p1c3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSAmbHNxdW87anVzdCZyc3F1bzsgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfVkFMSURBVEVfa2VybiI+RlRfVkFMSURBVEVfa2VybjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbGlkYXRlICZsc3F1bztrZXJuJnJzcXVvOyB0YWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9WQUxJREFURV9vcGJkIj5GVF9WQUxJREFURV9vcGJkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmFsaWRhdGUgJmxzcXVvO29wYmQmcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX3RyYWsiPkZUX1ZBTElEQVRFX3RyYWs8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSAmbHNxdW87dHJhayZyc3F1bzsgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfVkFMSURBVEVfcHJvcCI+RlRfVkFMSURBVEVfcHJvcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbGlkYXRlICZsc3F1bztwcm9wJnJzcXVvOyB0YWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9WQUxJREFURV9sY2FyIj5GVF9WQUxJREFURV9sY2FyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmFsaWRhdGUgJmxzcXVvO2xjYXImcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0dYIj5GVF9WQUxJREFURV9HWDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbGlkYXRlIGFsbCBUcnVlVHlwZUdYIHRhYmxlcyAoZmVhdCwgbW9ydCwgbW9yeCwgYnNsbiwganVzdCwga2Vybiwgb3BiZCwgdHJhaywgcHJvcCBhbmQgbGNhcikuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVkFMSURBVEVfQ0tFUk5YWFgiPkZUX1ZBTElEQVRFX0NLRVJOWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR1hfVkFMSURBVEVfSCAoZnRneHZhbC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX01TIj5GVF9WQUxJREFURV9NUzwvYT4gICAgICggRlRfVkFMSURBVEVfR1hfU1RBUlQgJmx0OyZsdDsgMCApCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfQVBQTEUiPkZUX1ZBTElEQVRFX0FQUExFPC9hPiAgKCBGVF9WQUxJREFURV9HWF9TVEFSVCAmbHQ7Jmx0OyAxICkKKworI2RlZmluZSA8YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0NLRVJOIj5GVF9WQUxJREFURV9DS0VSTjwvYT4gICggPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9NUyI+RlRfVkFMSURBVEVfTVM8L2E+IHwgPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9BUFBMRSI+RlRfVkFMSURBVEVfQVBQTEU8L2E+ICkKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggPGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSI+RlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGU8L2E+IHRvIGluZGljYXRlIHRoZSBjbGFzc2ljIGtlcm4gZGlhbGVjdCBvciBkaWFsZWN0cy4gSWYgdGhlIHNlbGVjdGVkIHR5cGUgZG9lc24ndCBmaXQsIDxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUiPkZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlPC9hPiByZWdhcmRzIHRoZSB0YWJsZSBhcyBpbnZhbGlkLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9WQUxJREFURV9NUyI+RlRfVkFMSURBVEVfTVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5IYW5kbGUgdGhlICZsc3F1bztrZXJuJnJzcXVvOyB0YWJsZSBhcyBhIGNsYXNzaWMgTWljcm9zb2Z0IGtlcm4gdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfVkFMSURBVEVfQVBQTEUiPkZUX1ZBTElEQVRFX0FQUExFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SGFuZGxlIHRoZSAmbHNxdW87a2VybiZyc3F1bzsgdGFibGUgYXMgYSBjbGFzc2ljIEFwcGxlIGtlcm4gdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfVkFMSURBVEVfQ0tFUk4iPkZUX1ZBTElEQVRFX0NLRVJOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SGFuZGxlIHRoZSAmbHNxdW87a2VybiZyc3F1bzsgYXMgZWl0aGVyIGNsYXNzaWMgQXBwbGUgb3IgTWljcm9zb2Z0IGtlcm4gdGFibGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWd6aXAuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItZ3ppcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMjM4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWd6aXAuaHRtbApAQCAtMCwwICsxLDE5OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkdaSVAgU3RyZWFtczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9TdHJlYW1fT3Blbkd6aXAiPkZUX1N0cmVhbV9PcGVuR3ppcDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR3ppcF9VbmNvbXByZXNzIj5GVF9HemlwX1VuY29tcHJlc3M8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIEd6aXAtc3BlY2lmaWMgZnVuY3Rpb25zLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cmVhbV9PcGVuR3ppcCI+RlRfU3RyZWFtX09wZW5HemlwPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfR1pJUF9IIChmdGd6aXAuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU3RyZWFtX09wZW5HemlwPC9iPiggPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT4gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1N0cmVhbSI+RlRfU3RyZWFtPC9hPiAgc291cmNlICk7Cis8L3ByZT4KKworPHA+T3BlbiBhIG5ldyBzdHJlYW0gdG8gcGFyc2UgZ3ppcC1jb21wcmVzc2VkIGZvbnQgZmlsZXMuIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgY29tcHJlc3NlZCAmbHNxdW87Ki5wY2YuZ3omcnNxdW87IGZvbnRzIHRoYXQgY29tZSB3aXRoIFhGcmVlODYuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyZWFtIj5zdHJlYW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IGVtYmVkZGluZyBzdHJlYW0uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic291cmNlIj5zb3VyY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIHN0cmVhbS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHNvdXJjZSBzdHJlYW0gbXVzdCBiZSBvcGVuZWQgPGk+YmVmb3JlPC9pPiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgorPHA+Q2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gJmxzcXVvO0ZUX1N0cmVhbV9DbG9zZSZyc3F1bzsgb24gdGhlIG5ldyBzdHJlYW0gd2lsbCA8Yj5ub3Q8L2I+IGNhbGwgJmxzcXVvO0ZUX1N0cmVhbV9DbG9zZSZyc3F1bzsgb24gdGhlIHNvdXJjZSBzdHJlYW0uIE5vbmUgb2YgdGhlIHN0cmVhbSBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuPC9wPgorPHA+VGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24gcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtLjwvcD4KKzxwPkluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBnemlwIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTmV3X0ZhY2UiPkZUX05ld19GYWNlPC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0ZhY2UiPkZUX09wZW5fRmFjZTwvYT4uIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgZ3ppcHBlZCBzdHJlYW0gZnJvbSBpdCBhbmQgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiAmbHNxdW87RlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZSZyc3F1bzsgaWYgeW91ciBidWlsZCBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR3ppcF9VbmNvbXByZXNzIj5GVF9HemlwX1VuY29tcHJlc3M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9HWklQX0ggKGZ0Z3ppcC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HemlwX1VuY29tcHJlc3M8L2I+KCA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4qICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiogICAgICAgb3V0cHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+KiAgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgaW5wdXRfbGVuICk7Cis8L3ByZT4KKworPHA+RGVjb21wcmVzcyBhIHppcHBlZCBpbnB1dCBidWZmZXIgaW50byBhbiBvdXRwdXQgYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIGlzIG1vZGVsZWQgYWZ0ZXIgemxpYidzICZsc3F1bzt1bmNvbXByZXNzJnJzcXVvOyBmdW5jdGlvbi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZW1vcnkiPm1lbW9yeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgRnJlZVR5cGUgbWVtb3J5IGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJpbnB1dCI+aW5wdXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5wdXQgYnVmZmVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImlucHV0X2xlbiI+aW5wdXRfbGVuPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0cHV0Ij5vdXRwdXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgb3V0cHV0IGJ1ZmZlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0cHV0X2xlbiI+b3V0cHV0X2xlbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkJlZm9yZSBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgdGhpcyBpcyB0aGUgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIsIHdoaWNoIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YSAoc28gdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgYmUga25vd24gaW4gYWR2YW5jZSkuIEFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCAmbHNxdW87b3V0cHV0X2xlbiZyc3F1bzsgaXMgdGhlIHNpemUgb2YgdGhlIHVzZWQgZGF0YSBpbiAmbHNxdW87b3V0cHV0JnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuICZsc3F1bztGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJnJzcXVvOyBpZiB5b3VyIGJ1aWxkIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCB6bGliIHN1cHBvcnQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmFlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sCkBAIC0wLDAgKzEsNzE4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+SGVhZGVyIEZpbGUgTWFjcm9zPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0NPTkZJR19DT05GSUdfSCI+RlRfQ09ORklHX0NPTkZJR19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MWldfSCI+RlRfTFpXX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSCI+RlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQlpJUDJfSCI+RlRfQlpJUDJfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9DT05GSUdfT1BUSU9OU19IIj5GVF9DT05GSUdfT1BUSU9OU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9XSU5GT05UU19IIj5GVF9XSU5GT05UU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0NPTkZJR19NT0RVTEVTX0giPkZUX0NPTkZJR19NT0RVTEVTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dMWVBIX0giPkZUX0dMWVBIX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfRlJFRVRZUEVfSCI+RlRfRlJFRVRZUEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQklUTUFQX0giPkZUX0JJVE1BUF9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0VSUk9SU19IIj5GVF9FUlJPUlNfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQkJPWF9IIj5GVF9CQk9YX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTU9EVUxFX0VSUk9SU19IIj5GVF9NT0RVTEVfRVJST1JTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0NBQ0hFX0giPkZUX0NBQ0hFX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU1lTVEVNX0giPkZUX1NZU1RFTV9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9DQUNIRV9JTUFHRV9IIj5GVF9DQUNIRV9JTUFHRV9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0lNQUdFX0giPkZUX0lNQUdFX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSCI+RlRfQ0FDSEVfU01BTExfQklUTUFQU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1RZUEVTX0giPkZUX1RZUEVTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0NBQ0hFX0NIQVJNQVBfSCI+RlRfQ0FDSEVfQ0hBUk1BUF9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0xJU1RfSCI+RlRfTElTVF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9NQUNfSCI+RlRfTUFDX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT1VUTElORV9IIj5GVF9PVVRMSU5FX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX01VTFRJUExFX01BU1RFUlNfSCI+RlRfTVVMVElQTEVfTUFTVEVSU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1NJWkVTX0giPkZUX1NJWkVTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NGTlRfTkFNRVNfSCI+RlRfU0ZOVF9OQU1FU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX01PRFVMRV9IIj5GVF9NT0RVTEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT1BFTlRZUEVfVkFMSURBVEVfSCI+RlRfT1BFTlRZUEVfVkFMSURBVEVfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9SRU5ERVJfSCI+RlRfUkVOREVSX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dYX1ZBTElEQVRFX0giPkZUX0dYX1ZBTElEQVRFX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQVVUT0hJTlRFUl9IIj5GVF9BVVRPSElOVEVSX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1BGUl9IIj5GVF9QRlJfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9DRkZfRFJJVkVSX0giPkZUX0NGRl9EUklWRVJfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU1RST0tFUl9IIj5GVF9TVFJPS0VSX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVFJVRVRZUEVfRFJJVkVSX0giPkZUX1RSVUVUWVBFX0RSSVZFUl9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TWU5USEVTSVNfSCI+RlRfU1lOVEhFU0lTX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVFlQRTFfVEFCTEVTX0giPkZUX1RZUEUxX1RBQkxFU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9GT05UX0ZPUk1BVFNfSCI+RlRfRk9OVF9GT1JNQVRTX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVFJVRVRZUEVfSURTX0giPkZUX1RSVUVUWVBFX0lEU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9UUklHT05PTUVUUllfSCI+RlRfVFJJR09OT01FVFJZX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfVFJVRVRZUEVfVEFCTEVTX0giPkZUX1RSVUVUWVBFX1RBQkxFU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MQ0RfRklMVEVSX0giPkZUX0xDRF9GSUxURVJfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9UUlVFVFlQRV9UQUdTX0giPkZUX1RSVUVUWVBFX1RBR1NfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfVU5QQVRFTlRFRF9ISU5USU5HX0giPkZUX1VOUEFURU5URURfSElOVElOR19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0JERl9IIj5GVF9CREZfSDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfSU5DUkVNRU5UQUxfSCI+RlRfSU5DUkVNRU5UQUxfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9DSURfSCI+RlRfQ0lEX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dBU1BfSCI+RlRfR0FTUF9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0daSVBfSCI+RlRfR1pJUF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BRFZBTkNFU19IIj5GVF9BRFZBTkNFU19IPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGRlZmluZWQgdG8gdGhlIG5hbWUgb2Ygc3BlY2lmaWMgRnJlZVR5cGUmbmJzcDsyIGhlYWRlciBmaWxlcy4gVGhleSBjYW4gYmUgdXNlZCBkaXJlY3RseSBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIGFzIGluOjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAjaW5jbHVkZSBGVF9HTFlQSF9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorPC9wcmU+Cis8cD5UaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHdoeSB3ZSBhcmUgbm93IHVzaW5nIG1hY3JvcyB0byBuYW1lIHB1YmxpYyBoZWFkZXIgZmlsZXMuIFRoZSBmaXJzdCBvbmUgaXMgdGhhdCBzdWNoIG1hY3JvcyBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlIGluZmFtb3VzIDguMyZuYnNwO25hbWluZyBydWxlIHJlcXVpcmVkIGJ5IERPUyAoYW5kICZsc3F1bztGVF9NVUxUSVBMRV9NQVNURVJTX0gmcnNxdW87IGlzIGEgbG90IG1vcmUgbWVhbmluZ2Z1bCB0aGFuICZsc3F1bztmdG1tLmgmcnNxdW87KS48L3A+Cis8cD5UaGUgc2Vjb25kIHJlYXNvbiBpcyB0aGF0IGl0IGFsbG93cyBmb3IgbW9yZSBmbGV4aWJpbGl0eSBpbiB0aGUgd2F5IEZyZWVUeXBlJm5ic3A7MiBpcyBpbnN0YWxsZWQgb24gYSBnaXZlbiBzeXN0ZW0uPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQ09ORklHX0NPTkZJR19IIj5GVF9DT05GSUdfQ09ORklHX0g8L2gzPgorPHByZT4KKyNpZm5kZWYgPGI+RlRfQ09ORklHX0NPTkZJR19IPC9iPgorI2RlZmluZSA8Yj5GVF9DT05GSUdfQ09ORklHX0g8L2I+ICAmbHQ7Y29uZmlnL2Z0Y29uZmlnLmgmZ3Q7CisjZW5kaWYKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgRnJlZVR5cGUmbmJzcDsyIGNvbmZpZ3VyYXRpb24gZGF0YS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0giPkZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0g8L2gzPgorPHByZT4KKyNpZm5kZWYgPGI+RlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSDwvYj4KKyNkZWZpbmUgPGI+RlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSDwvYj4gICZsdDtjb25maWcvZnRzdGRsaWIuaCZndDsKKyNlbmRpZgorPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyBGcmVlVHlwZSZuYnNwOzIgaW50ZXJmYWNlIHRvIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZnVuY3Rpb25zLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQ09ORklHX09QVElPTlNfSCI+RlRfQ09ORklHX09QVElPTlNfSDwvaDM+Cis8cHJlPgorI2lmbmRlZiA8Yj5GVF9DT05GSUdfT1BUSU9OU19IPC9iPgorI2RlZmluZSA8Yj5GVF9DT05GSUdfT1BUSU9OU19IPC9iPiAgJmx0O2NvbmZpZy9mdG9wdGlvbi5oJmd0OworI2VuZGlmCis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIEZyZWVUeXBlJm5ic3A7MiBwcm9qZWN0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0NPTkZJR19NT0RVTEVTX0giPkZUX0NPTkZJR19NT0RVTEVTX0g8L2gzPgorPHByZT4KKyNpZm5kZWYgPGI+RlRfQ09ORklHX01PRFVMRVNfSDwvYj4KKyNkZWZpbmUgPGI+RlRfQ09ORklHX01PRFVMRVNfSDwvYj4gICZsdDtjb25maWcvZnRtb2R1bGUuaCZndDsKKyNlbmRpZgorPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiBGcmVlVHlwZSZuYnNwOzIgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCB0byBuZXcgbGlicmFyeSBpbnN0YW5jZXMgaW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSW5pdF9GcmVlVHlwZSI+RlRfSW5pdF9GcmVlVHlwZTwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GUkVFVFlQRV9IIj5GVF9GUkVFVFlQRV9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0ZSRUVUWVBFX0g8L2I+ICAmbHQ7ZnJlZXR5cGUuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGJhc2UgRnJlZVR5cGUmbmJzcDsyIEFQSS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0VSUk9SU19IIj5GVF9FUlJPUlNfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9FUlJPUlNfSDwvYj4gICZsdDtmdGVycm9ycy5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiBGcmVlVHlwZSZuYnNwOzIgZXJyb3IgY29kZXMgKGFuZCBtZXNzYWdlcykuPC9wPgorPHA+SXQgaXMgaW5jbHVkZWQgYnkgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0ZSRUVUWVBFX0giPkZUX0ZSRUVUWVBFX0g8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTU9EVUxFX0VSUk9SU19IIj5GVF9NT0RVTEVfRVJST1JTX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfTU9EVUxFX0VSUk9SU19IPC9iPiAgJmx0O2Z0bW9kZXJyLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIEZyZWVUeXBlJm5ic3A7MiBtb2R1bGUgZXJyb3Igb2Zmc2V0cyAoYW5kIG1lc3NhZ2VzKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NZU1RFTV9IIj5GVF9TWVNURU1fSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9TWVNURU1fSDwvYj4gICZsdDtmdHN5c3RlbS5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgRnJlZVR5cGUmbmJzcDsyIGludGVyZmFjZSB0byBsb3ctbGV2ZWwgb3BlcmF0aW9ucyAoaS5lLiwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN0cmVhbSBpL28pLjwvcD4KKzxwPkl0IGlzIGluY2x1ZGVkIGJ5IDxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9GUkVFVFlQRV9IIj5GVF9GUkVFVFlQRV9IPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0lNQUdFX0giPkZUX0lNQUdFX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfSU1BR0VfSDwvYj4gICZsdDtmdGltYWdlLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHR5cGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBnbHlwaCBpbWFnZXMgKGkuZS4sIGJpdG1hcHMsIG91dGxpbmVzLCBzY2FuLWNvbnZlcnRlciBwYXJhbWV0ZXJzKS48L3A+Cis8cD5JdCBpcyBpbmNsdWRlZCBieSA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfRlJFRVRZUEVfSCI+RlRfRlJFRVRZUEVfSDwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9UWVBFU19IIj5GVF9UWVBFU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1RZUEVTX0g8L2I+ICAmbHQ7ZnR0eXBlcy5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgYmFzaWMgZGF0YSB0eXBlcyBkZWZpbmVkIGJ5IEZyZWVUeXBlJm5ic3A7Mi48L3A+Cis8cD5JdCBpcyBpbmNsdWRlZCBieSA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfRlJFRVRZUEVfSCI+RlRfRlJFRVRZUEVfSDwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MSVNUX0giPkZUX0xJU1RfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9MSVNUX0g8L2I+ICAmbHQ7ZnRsaXN0LmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBsaXN0IG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlJm5ic3A7Mi48L3A+Cis8cD4oTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBuZXZlciBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlLik8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX09VVExJTkVfSCI+RlRfT1VUTElORV9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX09VVExJTkVfSDwvYj4gICZsdDtmdG91dGxuLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBzY2FsYWJsZSBvdXRsaW5lIG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlJm5ic3A7Mi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NJWkVTX0giPkZUX1NJWkVTX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfU0laRVNfSDwvYj4gICZsdDtmdHNpemVzLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBBUEkgd2hpY2ggbWFuYWdlcyBtdWx0aXBsZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiBvYmplY3RzIHBlciBmYWNlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTU9EVUxFX0giPkZUX01PRFVMRV9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX01PRFVMRV9IPC9iPiAgJmx0O2Z0bW9kYXBpLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBtb2R1bGUgbWFuYWdlbWVudCBBUEkgb2YgRnJlZVR5cGUmbmJzcDsyLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUkVOREVSX0giPkZUX1JFTkRFUl9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1JFTkRFUl9IPC9iPiAgJmx0O2Z0cmVuZGVyLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSByZW5kZXJlciBtb2R1bGUgbWFuYWdlbWVudCBBUEkgb2YgRnJlZVR5cGUmbmJzcDsyLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQVVUT0hJTlRFUl9IIj5GVF9BVVRPSElOVEVSX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfQVVUT0hJTlRFUl9IPC9iPiAgJmx0O2Z0YXV0b2guaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gdGhlIGF1dG8taGludGluZyBtb2R1bGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DRkZfRFJJVkVSX0giPkZUX0NGRl9EUklWRVJfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9DRkZfRFJJVkVSX0g8L2I+ICAmbHQ7ZnRjZmZkcnYuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gdGhlIENGRiBkcml2ZXIgbW9kdWxlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVFJVRVRZUEVfRFJJVkVSX0giPkZUX1RSVUVUWVBFX0RSSVZFUl9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1RSVUVUWVBFX0RSSVZFUl9IPC9iPiAgJmx0O2Z0dHRkcnYuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gdGhlIFRydWVUeXBlIGRyaXZlciBtb2R1bGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9UWVBFMV9UQUJMRVNfSCI+RlRfVFlQRTFfVEFCTEVTX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfVFlQRTFfVEFCTEVTX0g8L2I+ICAmbHQ7dDF0YWJsZXMuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHR5cGVzIGFuZCBBUEkgc3BlY2lmaWMgdG8gdGhlIFR5cGUmbmJzcDsxIGZvcm1hdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RSVUVUWVBFX0lEU19IIj5GVF9UUlVFVFlQRV9JRFNfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9UUlVFVFlQRV9JRFNfSDwvYj4gICZsdDt0dG5hbWVpZC5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZW51bWVyYXRpb24gdmFsdWVzIHdoaWNoIGlkZW50aWZ5IG5hbWUgc3RyaW5ncywgbGFuZ3VhZ2VzLCBlbmNvZGluZ3MsIGV0Yy4gVGhpcyBmaWxlIHJlYWxseSBjb250YWlucyBhIDxpPmxhcmdlPC9pPiBzZXQgb2YgY29uc3RhbnQgbWFjcm8gZGVmaW5pdGlvbnMsIHRha2VuIGZyb20gdGhlIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBzcGVjaWZpY2F0aW9ucy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RSVUVUWVBFX1RBQkxFU19IIj5GVF9UUlVFVFlQRV9UQUJMRVNfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9UUlVFVFlQRV9UQUJMRVNfSDwvYj4gICZsdDt0dHRhYmxlcy5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgdHlwZXMgYW5kIEFQSSBzcGVjaWZpYyB0byB0aGUgVHJ1ZVR5cGUgKGFzIHdlbGwgYXMgT3BlblR5cGUpIGZvcm1hdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RSVUVUWVBFX1RBR1NfSCI+RlRfVFJVRVRZUEVfVEFHU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1RSVUVUWVBFX1RBR1NfSDwvYj4gICZsdDt0dHRhZ3MuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlZmluaXRpb25zIG9mIFRydWVUeXBlIGZvdXItYnl0ZSAmbHNxdW87dGFncyZyc3F1bzsgd2hpY2ggaWRlbnRpZnkgYmxvY2tzIGluIFNGTlQtYmFzZWQgZm9udCBmb3JtYXRzIChpLmUuLCBUcnVlVHlwZSBhbmQgT3BlblR5cGUpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQkRGX0giPkZUX0JERl9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0JERl9IPC9iPiAgJmx0O2Z0YmRmLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggYWNjZXNzZXMgQkRGLXNwZWNpZmljIHN0cmluZ3MgZnJvbSBhIGZhY2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DSURfSCI+RlRfQ0lEX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfQ0lEX0g8L2I+ICAmbHQ7ZnRjaWQuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlZmluaXRpb25zIG9mIGFuIEFQSSB3aGljaCBhY2Nlc3MgQ0lEIGZvbnQgaW5mb3JtYXRpb24gZnJvbSBhIGZhY2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HWklQX0giPkZUX0daSVBfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9HWklQX0g8L2I+ICAmbHQ7ZnRnemlwLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgZ3ppcC1jb21wcmVzc2VkIGZpbGVzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTFpXX0giPkZUX0xaV19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0xaV19IPC9iPiAgJmx0O2Z0bHp3LmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgTFpXLWNvbXByZXNzZWQgZmlsZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9CWklQMl9IIj5GVF9CWklQMl9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0JaSVAyX0g8L2I+ICAmbHQ7ZnRiemlwMi5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIGJ6aXAyLWNvbXByZXNzZWQgZmlsZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9XSU5GT05UU19IIj5GVF9XSU5GT05UU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1dJTkZPTlRTX0g8L2I+ICAgJmx0O2Z0d2luZm50LmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgV2luZG93cyBGTlQgZmlsZXMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HTFlQSF9IIj5GVF9HTFlQSF9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0dMWVBIX0g8L2I+ICAmbHQ7ZnRnbHlwaC5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQVBJIG9mIHRoZSBvcHRpb25hbCBnbHlwaCBtYW5hZ2VtZW50IGNvbXBvbmVudC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0JJVE1BUF9IIj5GVF9CSVRNQVBfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9CSVRNQVBfSDwvYj4gICZsdDtmdGJpdG1hcC5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQVBJIG9mIHRoZSBvcHRpb25hbCBiaXRtYXAgY29udmVyc2lvbiBjb21wb25lbnQuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9CQk9YX0giPkZUX0JCT1hfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9CQk9YX0g8L2I+ICAmbHQ7ZnRiYm94LmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBBUEkgb2YgdGhlIG9wdGlvbmFsIGV4YWN0IGJvdW5kaW5nIGJveCBjb21wdXRhdGlvbiByb3V0aW5lcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0NBQ0hFX0giPkZUX0NBQ0hFX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfQ0FDSEVfSDwvYj4gICZsdDtmdGNhY2hlLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBBUEkgb2YgdGhlIG9wdGlvbmFsIEZyZWVUeXBlJm5ic3A7MiBjYWNoZSBzdWItc3lzdGVtLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQ0FDSEVfSU1BR0VfSCI+RlRfQ0FDSEVfSU1BR0VfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9DQUNIRV9JTUFHRV9IPC9iPiAgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NBQ0hFX0giPkZUX0NBQ0hFX0g8L2E+Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSAmbHNxdW87Z2x5cGggaW1hZ2UmcnNxdW87IEFQSSBvZiB0aGUgRnJlZVR5cGUmbmJzcDsyIGNhY2hlIHN1Yi1zeXN0ZW0uPC9wPgorPHA+SXQgaXMgdXNlZCB0byBkZWZpbmUgYSBjYWNoZSBmb3IgPGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaCI+RlRfR2x5cGg8L2E+IGVsZW1lbnRzLiBZb3UgY2FuIGFsc28gdXNlIHRoZSBBUEkgZGVmaW5lZCBpbiA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfU01BTExfQklUTUFQU19IIj5GVF9DQUNIRV9TTUFMTF9CSVRNQVBTX0g8L2E+IGlmIHlvdSBvbmx5IG5lZWQgdG8gc3RvcmUgc21hbGwgZ2x5cGggYml0bWFwcywgYXMgaXQgd2lsbCB1c2UgbGVzcyBtZW1vcnkuPC9wPgorPHA+VGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLiBTaW1wbHkgaW5jbHVkZSA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfSCI+RlRfQ0FDSEVfSDwvYT4gdG8gaGF2ZSBhbGwgZ2x5cGggaW1hZ2UtcmVsYXRlZCBjYWNoZSBkZWNsYXJhdGlvbnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DQUNIRV9TTUFMTF9CSVRNQVBTX0giPkZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9DQUNIRV9TTUFMTF9CSVRNQVBTX0g8L2I+ICA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfSCI+RlRfQ0FDSEVfSDwvYT4KKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlICZsc3F1bztzbWFsbCBiaXRtYXBzJnJzcXVvOyBBUEkgb2YgdGhlIEZyZWVUeXBlJm5ic3A7MiBjYWNoZSBzdWItc3lzdGVtLjwvcD4KKzxwPkl0IGlzIHVzZWQgdG8gZGVmaW5lIGEgY2FjaGUgZm9yIHNtYWxsIGdseXBoIGJpdG1hcHMgaW4gYSByZWxhdGl2ZWx5IG1lbW9yeS1lZmZpY2llbnQgd2F5LiBZb3UgY2FuIGFsc28gdXNlIHRoZSBBUEkgZGVmaW5lZCBpbiA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfSU1BR0VfSCI+RlRfQ0FDSEVfSU1BR0VfSDwvYT4gaWYgeW91IHdhbnQgdG8gY2FjaGUgYXJiaXRyYXJ5IGdseXBoIGltYWdlcywgaW5jbHVkaW5nIHNjYWxhYmxlIG91dGxpbmVzLjwvcD4KKzxwPlRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZC4gU2ltcGx5IGluY2x1ZGUgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NBQ0hFX0giPkZUX0NBQ0hFX0g8L2E+IHRvIGhhdmUgYWxsIHNtYWxsIGJpdG1hcHMtcmVsYXRlZCBjYWNoZSBkZWNsYXJhdGlvbnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9DQUNIRV9DSEFSTUFQX0giPkZUX0NBQ0hFX0NIQVJNQVBfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9DQUNIRV9DSEFSTUFQX0g8L2I+ICA8YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfSCI+RlRfQ0FDSEVfSDwvYT4KKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlICZsc3F1bztjaGFybWFwJnJzcXVvOyBBUEkgb2YgdGhlIEZyZWVUeXBlJm5ic3A7MiBjYWNoZSBzdWItc3lzdGVtLjwvcD4KKzxwPlRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZC4gU2ltcGx5IGluY2x1ZGUgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NBQ0hFX0giPkZUX0NBQ0hFX0g8L2E+IHRvIGhhdmUgYWxsIGNoYXJtYXAtYmFzZWQgY2FjaGUgZGVjbGFyYXRpb25zLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTUFDX0giPkZUX01BQ19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX01BQ19IPC9iPiAgJmx0O2Z0bWFjLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBNYWNpbnRvc2gtc3BlY2lmaWMgRnJlZVR5cGUmbmJzcDsyIEFQSS4gVGhlIGxhdHRlciBpcyB1c2VkIHRvIGFjY2VzcyBmb250cyBlbWJlZGRlZCBpbiByZXNvdXJjZSBmb3Jrcy48L3A+Cis8cD5UaGlzIGhlYWRlciBmaWxlIG11c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBjbGllbnQgYXBwbGljYXRpb25zIGNvbXBpbGVkIG9uIHRoZSBNYWMgKG5vdGUgdGhhdCB0aGUgYmFzZSBBUEkgc3RpbGwgd29ya3MgdGhvdWdoKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01VTFRJUExFX01BU1RFUlNfSCI+RlRfTVVMVElQTEVfTUFTVEVSU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX01VTFRJUExFX01BU1RFUlNfSDwvYj4gICZsdDtmdG1tLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBvcHRpb25hbCBtdWx0aXBsZS1tYXN0ZXJzIG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlJm5ic3A7Mi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NGTlRfTkFNRVNfSCI+RlRfU0ZOVF9OQU1FU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1NGTlRfTkFNRVNfSDwvYj4gICZsdDtmdHNuYW1lcy5oJmd0OworPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgb3B0aW9uYWwgRnJlZVR5cGUmbmJzcDsyIEFQSSB3aGljaCBhY2Nlc3NlcyBlbWJlZGRlZCAmbHNxdW87bmFtZSZyc3F1bzsgc3RyaW5ncyBpbiBTRk5ULWJhc2VkIGZvbnQgZm9ybWF0cyAoaS5lLiwgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX09QRU5UWVBFX1ZBTElEQVRFX0giPkZUX09QRU5UWVBFX1ZBTElEQVRFX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfT1BFTlRZUEVfVkFMSURBVEVfSDwvYj4gICZsdDtmdG90dmFsLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBvcHRpb25hbCBGcmVlVHlwZSZuYnNwOzIgQVBJIHdoaWNoIHZhbGlkYXRlcyBPcGVuVHlwZSB0YWJsZXMgKEJBU0UsIEdERUYsIEdQT1MsIEdTVUIsIEpTVEYpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR1hfVkFMSURBVEVfSCI+RlRfR1hfVkFMSURBVEVfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9HWF9WQUxJREFURV9IPC9iPiAgJmx0O2Z0Z3h2YWwuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9wdGlvbmFsIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggdmFsaWRhdGVzIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoZmVhdCwgbW9ydCwgbW9yeCwgYnNsbiwganVzdCwga2Vybiwgb3BiZCwgdHJhaywgcHJvcCkuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9QRlJfSCI+RlRfUEZSX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfUEZSX0g8L2I+ICAmbHQ7ZnRwZnIuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggYWNjZXNzZXMgUEZSLXNwZWNpZmljIGRhdGEuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TVFJPS0VSX0giPkZUX1NUUk9LRVJfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9TVFJPS0VSX0g8L2I+ICAmbHQ7ZnRzdHJva2UuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHN0cm9rZSBvdXRsaW5lIHBhdGhzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU1lOVEhFU0lTX0giPkZUX1NZTlRIRVNJU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1NZTlRIRVNJU19IPC9iPiAgJmx0O2Z0c3ludGguaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggcGVyZm9ybXMgYXJ0aWZpY2lhbCBvYmxpcXVpbmcgYW5kIGVtYm9sZGVuaW5nLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRk9OVF9GT1JNQVRTX0giPkZUX0ZPTlRfRk9STUFUU19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0ZPTlRfRk9STUFUU19IPC9iPiAgJmx0O2Z0Zm50Zm10LmgmZ3Q7CisKKyAgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSBGVF9YRlJFRTg2X0ggIDxiPkZUX0ZPTlRfRk9STUFUU19IPC9iPgorPC9wcmU+CisKKzxwPkEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgRnJlZVR5cGUmbmJzcDsyIEFQSSB3aGljaCBwcm92aWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gZm9udCBmb3JtYXRzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVFJJR09OT01FVFJZX0giPkZUX1RSSUdPTk9NRVRSWV9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1RSSUdPTk9NRVRSWV9IPC9iPiAgJmx0O2Z0dHJpZ29uLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBGcmVlVHlwZSZuYnNwOzIgQVBJIHdoaWNoIHBlcmZvcm1zIHRyaWdvbm9tZXRyaWMgY29tcHV0YXRpb25zIChlLmcuLCBjb3NpbmVzIGFuZCBhcmMgdGFuZ2VudHMpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTENEX0ZJTFRFUl9IIj5GVF9MQ0RfRklMVEVSX0g8L2gzPgorPHByZT4KKyNkZWZpbmUgPGI+RlRfTENEX0ZJTFRFUl9IPC9iPiAgJmx0O2Z0bGNkZmlsLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBGcmVlVHlwZSZuYnNwOzIgQVBJIHdoaWNoIHBlcmZvcm1zIGNvbG9yIGZpbHRlcmluZyBmb3Igc3VicGl4ZWwgcmVuZGVyaW5nLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfVU5QQVRFTlRFRF9ISU5USU5HX0giPkZUX1VOUEFURU5URURfSElOVElOR19IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1VOUEFURU5URURfSElOVElOR19IPC9iPiAgJmx0O3R0dW5wYXQuaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggcGVyZm9ybXMgY29sb3IgZmlsdGVyaW5nIGZvciBzdWJwaXhlbCByZW5kZXJpbmcuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9JTkNSRU1FTlRBTF9IIj5GVF9JTkNSRU1FTlRBTF9IPC9oMz4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0lOQ1JFTUVOVEFMX0g8L2I+ICAmbHQ7ZnRpbmNyZW0uaCZndDsKKzwvcHJlPgorCis8cD5BIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIEZyZWVUeXBlJm5ic3A7MiBBUEkgd2hpY2ggcGVyZm9ybXMgY29sb3IgZmlsdGVyaW5nIGZvciBzdWJwaXhlbCByZW5kZXJpbmcuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HQVNQX0giPkZUX0dBU1BfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9HQVNQX0g8L2I+ICAmbHQ7ZnRnYXNwLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBGcmVlVHlwZSZuYnNwOzIgQVBJIHdoaWNoIHJldHVybnMgZW50cmllcyBmcm9tIHRoZSBUcnVlVHlwZSBHQVNQIHRhYmxlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQURWQU5DRVNfSCI+RlRfQURWQU5DRVNfSDwvaDM+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9BRFZBTkNFU19IPC9iPiAgJmx0O2Z0YWR2YW5jLmgmZ3Q7Cis8L3ByZT4KKworPHA+QSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBGcmVlVHlwZSZuYnNwOzIgQVBJIHdoaWNoIHJldHVybnMgaW5kaXZpZHVhbCBhbmQgcmFuZ2VkIGdseXBoIGFkdmFuY2VzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWhlYWRlcl9pbmNsdXNpb24uaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItaGVhZGVyX2luY2x1c2lvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTRiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWhlYWRlcl9pbmNsdXNpb24uaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkZyZWVUeXBlJ3MgaGVhZGVyIGluY2x1c2lvbiBzY2hlbWU8L2gxPgorCis8cD5UbyBiZSBhcyBmbGV4aWJsZSBhcyBwb3NzaWJsZSAoYW5kIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpLCBGcmVlVHlwZSB1c2VzIGEgdmVyeSBzcGVjaWFsIGluY2x1c2lvbiBzY2hlbWUgdG8gbG9hZCBoZWFkZXIgZmlsZXMsIGZvciBleGFtcGxlPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgICNpbmNsdWRlICZsdDtmdDJidWlsZC5oJmd0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICNpbmNsdWRlIEZUX09VVExJTkVfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8L3ByZT4KKzxwPkEgY29tcGlsZXIgYW5kIGl0cyBwcmVwcm9jZXNzb3Igb25seSBuZWVkcyBhbiBpbmNsdWRlIHBhdGggdG8gZmluZCB0aGUgZmlsZSAmbHNxdW87ZnQyYnVpbGQuaCZyc3F1bzs7IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIG5hbWVzIG9mIHRoZSBvdGhlciBGcmVlVHlwZSBoZWFkZXIgZmlsZXMgYXJlIGhpZGRlbiBieSBwcmVwcm9jZXNzb3IgbWFjcm8gbmFtZXMsIGxvYWRlZCBieSAmbHNxdW87ZnQyYnVpbGQuaCZyc3F1bzsuIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBhbHdheXMgZ2l2ZXMgdGhlIGhlYWRlciBtYWNybyBuYW1lIG5lZWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1pbmNyZW1lbnRhbC5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1pbmNyZW1lbnRhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4N2M3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWluY3JlbWVudGFsLmh0bWwKQEAgLTAsMCArMSwzODcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5JbmNyZW1lbnRhbCBMb2FkaW5nPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0luY3JlbWVudGFsIj5GVF9JbmNyZW1lbnRhbDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjIj5GVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9JbmNyZW1lbnRhbF9GdW5jc1JlYyI+RlRfSW5jcmVtZW50YWxfRnVuY3NSZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfTWV0cmljcyI+RlRfSW5jcmVtZW50YWxfTWV0cmljczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjIj5GVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIj5GVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2U8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwiPkZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTDwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB2YXJpb3VzIGZ1bmN0aW9ucyB1c2VkIHRvIHBlcmZvcm0gc28tY2FsbGVkICZsc3F1bztpbmNyZW1lbnRhbCZyc3F1bzsgZ2x5cGggbG9hZGluZy4gVGhpcyBpcyBhIG1vZGUgd2hlcmUgYWxsIGdseXBocyBsb2FkZWQgZnJvbSBhIGdpdmVuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IGFyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uLjwvcD4KKzxwPkFwYXJ0IGZyb20gdGhhdCwgYWxsIG90aGVyIHRhYmxlcyBhcmUgbG9hZGVkIG5vcm1hbGx5IGZyb20gdGhlIGZvbnQgZmlsZS4gVGhpcyBtb2RlIGlzIHVzZWZ1bCB3aGVuIEZyZWVUeXBlIGlzIHVzZWQgd2l0aGluIGFub3RoZXIgZW5naW5lLCBlLmcuLCBhIFBvc3RTY3JpcHQgSW1hZ2luZyBQcm9jZXNzb3IuPC9wPgorPHA+VG8gZW5hYmxlIHRoaXMgbW9kZSwgeW91IG11c3QgdXNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiwgcGFzc2luZyBhbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9QYXJhbWV0ZXIiPkZUX1BhcmFtZXRlcjwvYT4gd2l0aCB0aGUgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMIj5GVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUw8L2E+IHRhZyBhbmQgYW4gPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIj5GVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2U8L2E+IHZhbHVlLiBTZWUgdGhlIGNvbW1lbnRzIGZvciA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvYT4gZm9yIGFuIGV4YW1wbGUuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW5jcmVtZW50YWwiPkZUX0luY3JlbWVudGFsPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU5DUkVNRU5UQUxfSCAoZnRpbmNyZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX0luY3JlbWVudGFsUmVjXyogIDxiPkZUX0luY3JlbWVudGFsPC9iPjsKKzwvcHJlPgorCis8cD5BbiBvcGFxdWUgdHlwZSBkZXNjcmliaW5nIGEgdXNlci1wcm92aWRlZCBvYmplY3QgdXNlZCB0byBpbXBsZW1lbnQgJmxzcXVvO2luY3JlbWVudGFsJnJzcXVvOyBnbHlwaCBsb2FkaW5nIHdpdGhpbiBGcmVlVHlwZS4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgZW1iZWRkZWQgZm9udHMgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMgKGUuZy4sIFBvc3RTY3JpcHQgaW50ZXJwcmV0ZXJzKSwgd2hlcmUgdGhlIGdseXBoIGRhdGEgaXNuJ3QgaW4gdGhlIGZvbnQgZmlsZSwgb3IgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IGRpZmZlcmVudCB2YWx1ZXMuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JdCBpcyB1cCB0byBjbGllbnQgYXBwbGljYXRpb25zIHRvIGNyZWF0ZSBhbmQgaW1wbGVtZW50IDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsIj5GVF9JbmNyZW1lbnRhbDwvYT4gb2JqZWN0cywgYXMgbG9uZyBhcyB0aGV5IHByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgbWV0aG9kcyA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jIj5GVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jPC9hPiwgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9hPiBhbmQgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvYT4uPC9wPgorPHA+U2VlIHRoZSBkZXNjcmlwdGlvbiBvZiA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvYT4gdG8gdW5kZXJzdGFuZCBob3cgdG8gdXNlIGluY3JlbWVudGFsIG9iamVjdHMgd2l0aCBGcmVlVHlwZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMiPkZUX0luY3JlbWVudGFsX01ldHJpY3NSZWM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTkNSRU1FTlRBTF9IIChmdGluY3JlbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWNfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgYmVhcmluZ194OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICBiZWFyaW5nX3k7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGFkdmFuY2U7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gIGFkdmFuY2VfdjsgICAgIC8qIHNpbmNlIDIuMy4xMiAqLworCisgIH0gPGI+RlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzbWFsbCBzdHJ1Y3R1cmUgdXNlZCB0byBjb250YWluIHRoZSBiYXNpYyBnbHlwaCBtZXRyaWNzIHJldHVybmVkIGJ5IHRoZSA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaE1ldHJpY3NGdW5jIj5GVF9JbmNyZW1lbnRhbF9HZXRHbHlwaE1ldHJpY3NGdW5jPC9hPiBtZXRob2QuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJlYXJpbmdfeCI+YmVhcmluZ194PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TGVmdCBiZWFyaW5nLCBpbiBmb250IHVuaXRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJlYXJpbmdfeSI+YmVhcmluZ195PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VG9wIGJlYXJpbmcsIGluIGZvbnQgdW5pdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZSI+YWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkhvcml6b250YWwgY29tcG9uZW50IG9mIGdseXBoIGFkdmFuY2UsIGluIGZvbnQgdW5pdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZV92Ij5hZHZhbmNlX3Y8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WZXJ0aWNhbCBjb21wb25lbnQgb2YgZ2x5cGggYWR2YW5jZSwgaW4gZm9udCB1bml0cy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGVzZSBjb3JyZXNwb25kIHRvIGhvcml6b250YWwgb3IgdmVydGljYWwgbWV0cmljcyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSAmbHNxdW87dmVydGljYWwmcnNxdW87IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaE1ldHJpY3NGdW5jIj5GVF9JbmNyZW1lbnRhbF9HZXRHbHlwaE1ldHJpY3NGdW5jPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0luY3JlbWVudGFsX01ldHJpY3MiPkZUX0luY3JlbWVudGFsX01ldHJpY3M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTkNSRU1FTlRBTF9IIChmdGluY3JlbS5oKS48L3A+Cis8cHJlPgorICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWNfKiAgPGI+RlRfSW5jcmVtZW50YWxfTWV0cmljczwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYW4gPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYyI+RlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYzwvYT4gc3RydWN0dXJlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lOQ1JFTUVOVEFMX0ggKGZ0aW5jcmVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+CisgICgqPGI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYzwvYj4pKCA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbCI+RlRfSW5jcmVtZW50YWw8L2E+ICBpbmNyZW1lbnRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRGF0YSI+RlRfRGF0YTwvYT4qICAgICAgICBhZGF0YSApOworPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gY2FsbGVkIGJ5IEZyZWVUeXBlIHRvIGFjY2VzcyBhIGdpdmVuIGdseXBoJ3MgZGF0YSBieXRlcyBkdXJpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4gb3IgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9DaGFyIj5GVF9Mb2FkX0NoYXI8L2E+IGlmIGluY3JlbWVudGFsIGxvYWRpbmcgaXMgZW5hYmxlZC48L3A+Cis8cD5Ob3RlIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgZ2x5cGgncyBkYXRhIGJ5dGVzIGRlcGVuZHMgb24gdGhlIGZvbnQgZmlsZSBmb3JtYXQuIEZvciBUcnVlVHlwZSwgaXQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSByYXcgYnl0ZXMgd2l0aGluIHRoZSAmbHNxdW87Z2x5ZiZyc3F1bzsgdGFibGUuIEZvciBQb3N0U2NyaXB0IGZvcm1hdHMsIGl0IG11c3QgY29ycmVzcG9uZCB0byB0aGUgPGI+dW5lbmNyeXB0ZWQ8L2I+IGNoYXJzdHJpbmcgYnl0ZXMsIHdpdGhvdXQgYW55ICZsc3F1bztsZW5JViZyc3F1bzsgaGVhZGVyLiBJdCBpcyB1bmRlZmluZWQgZm9yIGFueSBvdGhlciBmb3JtYXQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaW5jcmVtZW50YWwiPmluY3JlbWVudGFsPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SGFuZGxlIHRvIGFuIG9wYXF1ZSA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbCI+RlRfSW5jcmVtZW50YWw8L2E+IGhhbmRsZSBwcm92aWRlZCBieSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdseXBoX2luZGV4Ij5nbHlwaF9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGV4IG9mIHJlbGV2YW50IGdseXBoLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWRhdGEiPmFkYXRhPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgcmV0dXJuZWQgZ2x5cGggZGF0YSBieXRlcyAod2hpY2ggd2lsbCBiZSBhY2Nlc3NlZCBhcyBhIHJlYWQtb25seSBieXRlIGJsb2NrKS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSB0aGUgbWV0aG9kIDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jIj5GVF9JbmNyZW1lbnRhbF9GcmVlR2x5cGhEYXRhRnVuYzwvYT4gd2lsbCBiZSBjYWxsZWQgbGF0ZXIgdG8gcmVsZWFzZSB0aGUgZGF0YSBieXRlcy48L3A+Cis8cD5OZXN0ZWQgY2FsbHMgdG8gPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYzwvYT4gY2FuIGhhcHBlbiBmb3IgY29tcG91bmQgZ2x5cGhzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU5DUkVNRU5UQUxfSCAoZnRpbmNyZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9iPikoIDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsIj5GVF9JbmNyZW1lbnRhbDwvYT4gIGluY3JlbWVudGFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRGF0YSI+RlRfRGF0YTwvYT4qICAgICAgICBkYXRhICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIHJlbGVhc2UgdGhlIGdseXBoIGRhdGEgYnl0ZXMgcmV0dXJuZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8gPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYzwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaW5jcmVtZW50YWwiPmluY3JlbWVudGFsPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYW4gb3BhcXVlIDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsIj5GVF9JbmNyZW1lbnRhbDwvYT4gaGFuZGxlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGF0YSI+ZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGdseXBoIGRhdGEgYnl0ZXMgKHdoaWNoIHdpbGwgYmUgYWNjZXNzZWQgYXMgYSByZWFkLW9ubHkgYnl0ZSBibG9jaykuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lOQ1JFTUVOVEFMX0ggKGZ0aW5jcmVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+CisgICgqPGI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvYj4pCisgICAgICAgICAgICAgICAgICAgICAgKCA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbCI+RlRfSW5jcmVtZW50YWw8L2E+ICAgICAgICAgICAgICBpbmNyZW1lbnRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPiAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYyI+RlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYzwvYT4gICphbWV0cmljcyApOworPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gdXNlZCB0byByZXRyaWV2ZSB0aGUgYmFzaWMgbWV0cmljcyBvZiBhIGdpdmVuIGdseXBoIGluZGV4IGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGRhdGEuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsIGluIGNlcnRhaW4gZm9ybWF0cyBsaWtlIFRydWVUeXBlLCB0aGUgbWV0cmljcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IHBsYWNlIGZyb20gdGhlIGdseXBoIGltYWdlcyBwcm9wZXIuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaW5jcmVtZW50YWwiPmluY3JlbWVudGFsPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYW4gb3BhcXVlIDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsIj5GVF9JbmNyZW1lbnRhbDwvYT4gaGFuZGxlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGhfaW5kZXgiPmdseXBoX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kZXggb2YgcmVsZXZhbnQgZ2x5cGguPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmVydGljYWwiPnZlcnRpY2FsPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SWYgdHJ1ZSwgcmV0dXJuIHZlcnRpY2FsIG1ldHJpY3MuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW1ldHJpY3MiPmFtZXRyaWNzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0LiBUaGUgb3JpZ2luYWwgZ2x5cGggbWV0cmljcywgaWYgYW55LCBpbiBmb250IHVuaXRzLiBJZiBtZXRyaWNzIGFyZSBub3QgYXZhaWxhYmxlIGFsbCB0aGUgdmFsdWVzIG11c3QgYmUgc2V0IHRvIHplcm8uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbWV0cmljcyI+YW1ldHJpY3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcmVwbGFjZW1lbnQgZ2x5cGggbWV0cmljcyBpbiBmb250IHVuaXRzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0luY3JlbWVudGFsX0Z1bmNzUmVjIj5GVF9JbmNyZW1lbnRhbF9GdW5jc1JlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lOQ1JFTUVOVEFMX0ggKGZ0aW5jcmVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfSW5jcmVtZW50YWxfRnVuY3NSZWNfCisgIHsKKyAgICA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jIj5GVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jPC9hPiAgICAgZ2V0X2dseXBoX2RhdGE7CisgICAgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9hPiAgICBmcmVlX2dseXBoX2RhdGE7CisgICAgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvYT4gIGdldF9nbHlwaF9tZXRyaWNzOworCisgIH0gPGI+RlRfSW5jcmVtZW50YWxfRnVuY3NSZWM8L2I+OworPC9wcmU+CisKKzxwPkEgdGFibGUgb2YgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgZm9udHMgdGhhdCBsb2FkIGRhdGEgaW5jcmVtZW50YWxseS4gVXNlZCBpbiA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvYT4uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdldF9nbHlwaF9kYXRhIj5nZXRfZ2x5cGhfZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmdW5jdGlvbiB0byBnZXQgZ2x5cGggZGF0YS4gTXVzdCBub3QgYmUgbnVsbC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmcmVlX2dseXBoX2RhdGEiPmZyZWVfZ2x5cGhfZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmdW5jdGlvbiB0byByZWxlYXNlIGdseXBoIGRhdGEuIE11c3Qgbm90IGJlIG51bGwuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2V0X2dseXBoX21ldHJpY3MiPmdldF9nbHlwaF9tZXRyaWNzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZ1bmN0aW9uIHRvIGdldCBnbHlwaCBtZXRyaWNzLiBNYXkgYmUgbnVsbCBpZiB0aGUgZm9udCBkb2VzIG5vdCBwcm92aWRlIG92ZXJyaWRpbmcgZ2x5cGggbWV0cmljcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lOQ1JFTUVOVEFMX0ggKGZ0aW5jcmVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9GdW5jc1JlYyI+RlRfSW5jcmVtZW50YWxfRnVuY3NSZWM8L2E+KiAgZnVuY3M7CisgICAgPGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWwiPkZUX0luY3JlbWVudGFsPC9hPiAgICAgICAgICAgICAgICAgIG9iamVjdDsKKworICB9IDxiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBvcnQgaW5jcmVtZW50YWwgZ2x5cGggbG9hZGluZy4gWW91IHNob3VsZCB1c2UgaXQgd2l0aCA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwiPkZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTDwvYT4gYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgIGluY19pbnQ7CisgIEZUX1BhcmFtZXRlciAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOworICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgIG9wZW5fYXJnczsKKworCisgIC8vIHNldCB1cCBpbmNyZW1lbnRhbCBkZXNjcmlwdG9yCisgIGluY19pbnQuZnVuY3MgID0gbXlfZnVuY3M7CisgIGluY19pbnQub2JqZWN0ID0gbXlfb2JqZWN0OworCisgIC8vIHNldCB1cCBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgcGFyYW1ldGVyLnRhZyAgPSBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUw7CisgIHBhcmFtZXRlci5kYXRhID0gJmFtcDtpbmNfaW50OworCisgIC8vIHNldCB1cCBGVF9PcGVuX0FyZ3Mgc3RydWN0dXJlCisgIG9wZW5fYXJncy5mbGFncyAgICAgID0gRlRfT1BFTl9QQVRITkFNRSB8IEZUX09QRU5fUEFSQU1TOworICBvcGVuX2FyZ3MucGF0aG5hbWUgICA9IG15X2ZvbnRfcGF0aG5hbWU7CisgIG9wZW5fYXJncy5udW1fcGFyYW1zID0gMTsKKyAgb3Blbl9hcmdzLnBhcmFtcyAgICAgPSAmYW1wO3BhcmFtZXRlcjsgLy8gd2UgdXNlIG9uZSBvcHRpb25hbCBhcmd1bWVudAorCisgIC8vIG9wZW4gdGhlIGZvbnQKKyAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZhbXA7b3Blbl9hcmdzLCBpbmRleCwgJmFtcDtmYWNlICk7CisgIC4uLgorPC9wcmU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0luY3JlbWVudGFsX0ludGVyZmFjZSI+RlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU5DUkVNRU5UQUxfSCAoZnRpbmNyZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyI+RlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjPC9hPiogICA8Yj5GVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2U8L2I+OworPC9wcmU+CisKKzxwPkEgcG9pbnRlciB0byBhbiA8YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMiPkZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYzwvYT4gc3RydWN0dXJlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMIj5GVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUw8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTkNSRU1FTlRBTF9IIChmdGluY3JlbS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUw8L2I+ICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NQUtFX1RBRyI+RlRfTUFLRV9UQUc8L2E+KCAnaScsICduJywgJ2MnLCAncicgKQorPC9wcmU+CisKKzxwPkEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPiBzdHJ1Y3R1cmVzIHRvIGluZGljYXRlIGFuIGluY3JlbWVudGFsIGxvYWRpbmcgb2JqZWN0IHRvIGJlIHVzZWQgYnkgRnJlZVR5cGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItaW5kZXguaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDI4OWFjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1pbmRleC5odG1sCkBAIC0wLDAgKzEsMzgxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgiPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5VHlwZSI+QkRGX1BST1BFUlRZX1RZUEVfQVRPTTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfU1lOVEhFU0lTX0giPkZUX1NZTlRIRVNJU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sI0JERl9Qcm9wZXJ0eVR5cGUiPkJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1NZU1RFTV9IIj5GVF9TWVNURU1fSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNCREZfUHJvcGVydHlUeXBlIj5CREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlRfTGlicmFyeV9WZXJzaW9uIj5GVF9MaWJyYXJ5X1ZlcnNpb248L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVGFnIj5GVF9UYWc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5VHlwZSI+QkRGX1BST1BFUlRZX1RZUEVfTk9ORTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdCI+RlRfTGlzdDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVGFuIj5GVF9UYW48L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjQkRGX1Byb3BlcnR5Ij5CREZfUHJvcGVydHk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfQWRkIj5GVF9MaXN0X0FkZDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfVFJJR09OT01FVFJZX0giPkZUX1RSSUdPTk9NRVRSWV9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sI0JERl9Qcm9wZXJ0eVJlYyI+QkRGX1Byb3BlcnR5UmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0X0Rlc3RydWN0b3IiPkZUX0xpc3RfRGVzdHJ1Y3RvcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfVFJVRVRZUEVfRFJJVkVSX0giPkZUX1RSVUVUWVBFX0RSSVZFUl9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sI0JERl9Qcm9wZXJ0eVR5cGUiPkJERl9Qcm9wZXJ0eVR5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfRmluYWxpemUiPkZUX0xpc3RfRmluYWxpemU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX2VuZ2luZS5odG1sI0ZUX1RydWVUeXBlRW5naW5lVHlwZSI+RlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfTk9ORTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNDSURfRmFjZURpY3QiPkNJRF9GYWNlRGljdDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdF9GaW5kIj5GVF9MaXN0X0ZpbmQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX2VuZ2luZS5odG1sI0ZUX1RydWVUeXBlRW5naW5lVHlwZSI+RlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfUEFURU5URUQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0ZhY2VEaWN0UmVjIj5DSURfRmFjZURpY3RSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfSW5zZXJ0Ij5GVF9MaXN0X0luc2VydDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfZW5naW5lLmh0bWwjRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlIj5GVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9VTlBBVEVOVEVEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI0NJRF9GYWNlSW5mbyI+Q0lEX0ZhY2VJbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0X0l0ZXJhdGUiPkZUX0xpc3RfSXRlcmF0ZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfVFJVRVRZUEVfSURTX0giPkZUX1RSVUVUWVBFX0lEU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI0NJRF9GYWNlSW5mb1JlYyI+Q0lEX0ZhY2VJbmZvUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0X0l0ZXJhdG9yIj5GVF9MaXN0X0l0ZXJhdG9yPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9UUlVFVFlQRV9UQUJMRVNfSCI+RlRfVFJVRVRZUEVfVEFCTEVTX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0ZvbnREaWN0Ij5DSURfRm9udERpY3Q8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfUmVtb3ZlIj5GVF9MaXN0X1JlbW92ZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfVFJVRVRZUEVfVEFHU19IIj5GVF9UUlVFVFlQRV9UQUdTX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0luZm8iPkNJRF9JbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0X1VwIj5GVF9MaXN0X1VwPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCNGVF9UcnVlVHlwZUVuZ2luZVR5cGUiPkZUX1RydWVUeXBlRW5naW5lVHlwZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jZmZfZHJpdmVyLmh0bWwjZGFya2VuaW5nLXBhcmFtZXRlcnMiPmRhcmtlbmluZy1wYXJhbWV0ZXJzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Tm9kZSI+RlRfTGlzdE5vZGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9UcnVlVHlwZUdYX0ZyZWUiPkZUX1RydWVUeXBlR1hfRnJlZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI2RlZmF1bHQtc2NyaXB0Ij5kZWZhdWx0LXNjcmlwdDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdE5vZGVSZWMiPkZUX0xpc3ROb2RlUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSI+RlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlJFRVRZUEVfWFhYIj5GUkVFVFlQRV9NQUpPUjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdFJlYyI+RlRfTGlzdFJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfVFlQRTFfVEFCTEVTX0giPkZUX1RZUEUxX1RBQkxFU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9YWFgiPkZSRUVUWVBFX01JTk9SPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX0NPTE9SPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9UWVBFU19IIj5GVF9UWVBFU19IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9YWFgiPkZSRUVUWVBFX1BBVENIPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX0NST1BfQklUTUFQPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VGV29yZCI+RlRfVUZXb3JkPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9YWFgiPkZSRUVUWVBFX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9ERUZBVUxUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX0FjdGl2YXRlX1NpemUiPkZUX0FjdGl2YXRlX1NpemU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludDE2Ij5GVF9VSW50MTY8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItcXVpY2tfYWR2YW5jZS5odG1sI0ZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkiPkZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQzMiI+RlRfVUludDMyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0FEVkFOQ0VTX0giPkZUX0FEVkFOQ0VTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50NjQiPkZUX1VJbnQ2NDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0FkZF9EZWZhdWx0X01vZHVsZXMiPkZUX0FkZF9EZWZhdWx0X01vZHVsZXM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTElORUFSX0RFU0lHTjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9BZGRfTW9kdWxlIj5GVF9BZGRfTW9kdWxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX01PTk9DSFJPTUU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1VOUEFURU5URURfSElOVElOR19IIj5GVF9VTlBBVEVOVEVEX0hJTlRJTkdfSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfQWxsb2NfRnVuYyI+RlRfQWxsb2NfRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19BVVRPSElOVDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Vbml0VmVjdG9yIj5GVF9Vbml0VmVjdG9yPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX0FOR0xFXzJQSSI+RlRfQU5HTEVfMlBJPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX0JJVE1BUDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BTkdMRV9QSSI+RlRfQU5HTEVfUEk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fSElOVElORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0NLRVJOWFhYIj5GVF9WQUxJREFURV9BUFBMRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BTkdMRV9QSTIiPkZUX0FOR0xFX1BJMjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9OT19SRUNVUlNFPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfT1RYWFgiPkZUX1ZBTElEQVRFX0JBU0U8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQU5HTEVfUEk0Ij5GVF9BTkdMRV9QSTQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfTk9fU0NBTEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HWFhYWCI+RlRfVkFMSURBVEVfYnNsbjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9BbmdsZSI+RlRfQW5nbGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9YWFgiPkZUX0xPQURfUEVEQU5USUM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9DS0VSTlhYWCI+RlRfVkFMSURBVEVfQ0tFUk48L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQW5nbGVfRGlmZiI+RlRfQW5nbGVfRGlmZjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9SRU5ERVI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9DS0VSTlhYWCI+RlRfVkFMSURBVEVfQ0tFUk5YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQXRhbjIiPkZUX0F0YW4yPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfVEFSR0VUX1hYWCI+RlRfTE9BRF9UQVJHRVRfTENEPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX2ZlYXQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9BdHRhY2hfRmlsZSI+RlRfQXR0YWNoX0ZpbGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfWFhYIj5GVF9MT0FEX1RBUkdFVF9MQ0RfVjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9HREVGPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfQXR0YWNoX1N0cmVhbSI+RlRfQXR0YWNoX1N0cmVhbTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX0xJR0hUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfT1RYWFgiPkZUX1ZBTElEQVRFX0dQT1M8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQVVUT0hJTlRFUl9IIj5GVF9BVVRPSElOVEVSX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfTU9ERSI+RlRfTE9BRF9UQVJHRVRfTU9ERTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9HU1VCPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIj5GVF9BVVRPSElOVEVSX1NDUklQVF9DSks8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTE9BRF9UQVJHRVRfWFhYIj5GVF9MT0FEX1RBUkdFVF9NT05PPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX0dYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIj5GVF9BVVRPSElOVEVSX1NDUklQVF9JTkRJQzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX05PUk1BTDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dYX0xFTkdUSCI+RlRfVkFMSURBVEVfR1hfTEVOR1RIPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIj5GVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1RBUkdFVF9YWFgiPkZUX0xPQURfVEFSR0VUX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dYWFhYIj5GVF9WQUxJREFURV9HWFhYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI0ZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWCI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MT0FEX1hYWCI+RlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9PVFhYWCI+RlRfVkFMSURBVEVfSlNURjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI0ZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWCI+RlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dYWFhYIj5GVF9WQUxJREFURV9qdXN0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0JCT1hfSCI+RlRfQkJPWF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfQ2hhciI+RlRfTG9hZF9DaGFyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX2tlcm48L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CQm94Ij5GVF9CQm94PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfR2x5cGgiPkZUX0xvYWRfR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HWFhYWCI+RlRfVkFMSURBVEVfbGNhcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9CREZfSCI+RlRfQkRGX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX0xvYWRfU2ZudF9UYWJsZSI+RlRfTG9hZF9TZm50X1RhYmxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfT1RYWFgiPkZUX1ZBTElEQVRFX01BVEg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQklUTUFQX0giPkZUX0JJVE1BUF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9DS0VSTlhYWCI+RlRfVkFMSURBVEVfTVM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CaXRtYXAiPkZUX0JpdG1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfTFpXX0giPkZUX0xaV19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX21vcnQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYml0bWFwX2hhbmRsaW5nLmh0bWwjRlRfQml0bWFwX0NvbnZlcnQiPkZUX0JpdG1hcF9Db252ZXJ0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9NQUNfSCI+RlRfTUFDX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HWFhYWCI+RlRfVkFMSURBVEVfbW9yeDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iaXRtYXBfaGFuZGxpbmcuaHRtbCNGVF9CaXRtYXBfQ29weSI+RlRfQml0bWFwX0NvcHk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTUFLRV9UQUciPkZUX01BS0VfVEFHPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfT1RYWFgiPkZUX1ZBTElEQVRFX09UPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sI0ZUX0JpdG1hcF9Eb25lIj5GVF9CaXRtYXBfRG9uZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NYXRyaXgiPkZUX01hdHJpeDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9PVFhYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iaXRtYXBfaGFuZGxpbmcuaHRtbCNGVF9CaXRtYXBfRW1ib2xkZW4iPkZUX0JpdG1hcF9FbWJvbGRlbjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfTWF0cml4X0ludmVydCI+RlRfTWF0cml4X0ludmVydDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ3hfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dYWFhYIj5GVF9WQUxJREFURV9vcGJkPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sI0ZUX0JpdG1hcF9Jbml0Ij5GVF9CaXRtYXBfSW5pdDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfTWF0cml4X011bHRpcGx5Ij5GVF9NYXRyaXhfTXVsdGlwbHk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWd4X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HWFhYWCI+RlRfVkFMSURBVEVfcHJvcDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0JpdG1hcF9TaXplIj5GVF9CaXRtYXBfU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1hYWFgiPkZUX1ZBTElEQVRFX3RyYWs8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0JpdG1hcEdseXBoIj5GVF9CaXRtYXBHbHlwaDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeVJlYyI+RlRfTWVtb3J5UmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfVmFyX0F4aXMiPkZUX1Zhcl9BeGlzPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9CaXRtYXBHbHlwaFJlYyI+RlRfQml0bWFwR2x5cGhSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCNGVF9NTV9BeGlzIj5GVF9NTV9BeGlzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfVmFyX05hbWVkX1N0eWxlIj5GVF9WYXJfTmFtZWRfU3R5bGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfTU1fVmFyIj5GVF9NTV9WYXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9NT0RVTEVfRVJST1JTX0giPkZUX01PRFVMRV9FUlJPUlNfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVmVjdG9yX0Zyb21fUG9sYXIiPkZUX1ZlY3Rvcl9Gcm9tX1BvbGFyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZXMiPkZUX0J5dGVzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9NT0RVTEVfSCI+RlRfTU9EVUxFX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX1ZlY3Rvcl9MZW5ndGgiPkZUX1ZlY3Rvcl9MZW5ndGg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQlpJUDJfSCI+RlRfQlpJUDJfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGUiPkZUX01vZHVsZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVmVjdG9yX1BvbGFyaXplIj5GVF9WZWN0b3JfUG9sYXJpemU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfQ0hBUk1BUF9IIj5GVF9DQUNIRV9DSEFSTUFQX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTW9kdWxlX0NsYXNzIj5GVF9Nb2R1bGVfQ2xhc3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX1ZlY3Rvcl9Sb3RhdGUiPkZUX1ZlY3Rvcl9Sb3RhdGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0FDSEVfSCI+RlRfQ0FDSEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGVfQ29uc3RydWN0b3IiPkZUX01vZHVsZV9Db25zdHJ1Y3RvcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVmVjdG9yX1RyYW5zZm9ybSI+RlRfVmVjdG9yX1RyYW5zZm9ybTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9DQUNIRV9JTUFHRV9IIj5GVF9DQUNIRV9JTUFHRV9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZV9EZXN0cnVjdG9yIj5GVF9Nb2R1bGVfRGVzdHJ1Y3RvcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfVmVjdG9yX1VuaXQiPkZUX1ZlY3Rvcl9Vbml0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSCI+RlRfQ0FDSEVfU01BTExfQklUTUFQU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZV9SZXF1ZXN0ZXIiPkZUX01vZHVsZV9SZXF1ZXN0ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1dJTkZPTlRTX0giPkZUX1dJTkZPTlRTX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY29tcHV0YXRpb25zLmh0bWwjRlRfQ2VpbEZpeCI+RlRfQ2VpbEZpeDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfTVVMVElQTEVfTUFTVEVSU19IIj5GVF9NVUxUSVBMRV9NQVNURVJTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9IZWFkZXIiPkZUX1dpbkZOVF9IZWFkZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0ZGX0RSSVZFUl9IIj5GVF9DRkZfRFJJVkVSX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX011bERpdiI+RlRfTXVsRGl2PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSGVhZGVyUmVjIj5GVF9XaW5GTlRfSGVhZGVyUmVjPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNmZl9kcml2ZXIuaHRtbCNGVF9DRkZfSElOVElOR19YWFgiPkZUX0NGRl9ISU5USU5HX0FET0JFPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9NdWxGaXgiPkZUX011bEZpeDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQMTI1MDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jZmZfZHJpdmVyLmh0bWwjRlRfQ0ZGX0hJTlRJTkdfWFhYIj5GVF9DRkZfSElOVElOR19GUkVFVFlQRTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbXVsdGlwbGVfbWFzdGVycy5odG1sI0ZUX011bHRpX01hc3RlciI+RlRfTXVsdGlfTWFzdGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1AxMjUxPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNmZl9kcml2ZXIuaHRtbCNGVF9DRkZfSElOVElOR19YWFgiPkZUX0NGRl9ISU5USU5HX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9DUDEyNTI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tYWNfc3BlY2lmaWMuaHRtbCNGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQiPkZUX05ld19GYWNlX0Zyb21fRk9ORDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQMTI1MzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0NoYXJNYXAiPkZUX0NoYXJNYXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW1hY19zcGVjaWZpYy5odG1sI0ZUX05ld19GYWNlX0Zyb21fRlNSZWYiPkZUX05ld19GYWNlX0Zyb21fRlNSZWY8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9DUDEyNTQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9DaGFyTWFwUmVjIj5GVF9DaGFyTWFwUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tYWNfc3BlY2lmaWMuaHRtbCNGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyI+RlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9DUDEyNTU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ0lEX0giPkZUX0NJRF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX05ld19MaWJyYXJ5Ij5GVF9OZXdfTGlicmFyeTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQMTI1NjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfQ2xhc3NpY0tlcm5fRnJlZSI+RlRfQ2xhc3NpY0tlcm5fRnJlZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9OZXdfTWVtb3J5X0ZhY2UiPkZUX05ld19NZW1vcnlfRmFjZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQMTI1NzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwjRlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUiPkZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1zaXplc19tYW5hZ2VtZW50Lmh0bWwjRlRfTmV3X1NpemUiPkZUX05ld19TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1AxMjU4PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NPTkZJR19DT05GSUdfSCI+RlRfQ09ORklHX0NPTkZJR19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX09mZnNldCI+RlRfT2Zmc2V0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1AxMzYxPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0NPTkZJR19NT0RVTEVTX0giPkZUX0NPTkZJR19NT0RVTEVTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT1BFTl9YWFgiPkZUX09QRU5fRFJJVkVSPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1A4NzQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfQ09ORklHX09QVElPTlNfSCI+RlRfQ09ORklHX09QVElPTlNfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PUEVOX1hYWCI+RlRfT1BFTl9NRU1PUlk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9DUDkzMjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IIj5GVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fWFhYIj5GVF9PUEVOX1BBUkFNUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQOTM2PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX0NvcyI+RlRfQ29zPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fWFhYIj5GVF9PUEVOX1BBVEhOQU1FPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfQ1A5NDk8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9EYXRhIj5GVF9EYXRhPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fWFhYIj5GVF9PUEVOX1NUUkVBTTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0NQOTUwPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX0RpdkZpeCI+RlRfRGl2Rml4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09QRU5fWFhYIj5GVF9PUEVOX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX0RFRkFVTFQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Eb25lX0ZhY2UiPkZUX0RvbmVfRmFjZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfT1BFTlRZUEVfVkFMSURBVEVfSCI+RlRfT1BFTlRZUEVfVkFMSURBVEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX1hYWCI+RlRfV2luRk5UX0lEX01BQzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0RvbmVfRnJlZVR5cGUiPkZUX0RvbmVfRnJlZVR5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9BcmdzIj5GVF9PcGVuX0FyZ3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9PRU08L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfR2x5cGgiPkZUX0RvbmVfR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfT3Blbl9GYWNlIj5GVF9PcGVuX0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9TWU1CT0w8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Eb25lX0xpYnJhcnkiPkZUX0RvbmVfTGlicmFyeTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX09wZW5UeXBlX0ZyZWUiPkZUX09wZW5UeXBlX0ZyZWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfU2l6ZSI+RlRfRG9uZV9TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfT3BlblR5cGVfVmFsaWRhdGUiPkZUX09wZW5UeXBlX1ZhbGlkYXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfQ01hcENhY2hlIj5GVENfQ01hcENhY2hlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfRHJpdmVyIj5GVF9Ecml2ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9GSUxMX0xFRlQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19DTWFwQ2FjaGVfTG9va3VwIj5GVENfQ01hcENhY2hlX0xvb2t1cDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VOQ19UQUciPkZUX0VOQ19UQUc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9GSUxMX1JJR0hUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfQ01hcENhY2hlX05ldyI+RlRDX0NNYXBDYWNoZV9OZXc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PcmllbnRhdGlvbiI+RlRfT1JJRU5UQVRJT05fTk9ORTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VfUmVxdWVzdGVyIj5GVENfRmFjZV9SZXF1ZXN0ZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PcmllbnRhdGlvbiI+RlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ZhY2VJRCI+RlRDX0ZhY2VJRDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PcmllbnRhdGlvbiI+RlRfT1JJRU5UQVRJT05fVFJVRVRZUEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZUNhY2hlIj5GVENfSW1hZ2VDYWNoZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3JpZW50YXRpb24iPkZUX09yaWVudGF0aW9uPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfSW1hZ2VDYWNoZV9Mb29rdXAiPkZUQ19JbWFnZUNhY2hlX0xvb2t1cDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19BUFBMRV9ST01BTjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfRVZFTl9PRERfRklMTDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyIj5GVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfQklHNTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfT1VUTElORV9IIj5GVF9PVVRMSU5FX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZUNhY2hlX05ldyI+RlRDX0ltYWdlQ2FjaGVfTmV3PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX0dCMjMxMjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfSElHSF9QUkVDSVNJT048L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19JbWFnZVR5cGUiPkZUQ19JbWFnZVR5cGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfSk9IQUI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfWFhYIj5GVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX0ltYWdlVHlwZVJlYyI+RlRDX0ltYWdlVHlwZVJlYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19NU19CSUc1PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9JTkNMVURFX1NUVUJTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlciI+RlRDX01hbmFnZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfTVNfR0IyMzEyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9OT05FPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9Eb25lIj5GVENfTWFuYWdlcl9Eb25lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX01TX0pPSEFCPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9PV05FUjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXJfTG9va3VwRmFjZSI+RlRDX01hbmFnZXJfTG9va3VwRmFjZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19NU19TSklTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9SRVZFUlNFX0ZJTEw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX0xvb2t1cFNpemUiPkZUQ19NYW5hZ2VyX0xvb2t1cFNpemU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfTVNfU1lNQk9MPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9TSU5HTEVfUEFTUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXJfTmV3Ij5GVENfTWFuYWdlcl9OZXc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfTVNfV0FOU1VORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfU01BUlRfRFJPUE9VVFM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCI+RlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX05PTkU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfWFhYIj5GVF9PVVRMSU5FX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX01hbmFnZXJfUmVzZXQiPkZUQ19NYW5hZ2VyX1Jlc2V0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX09MRF9MQVRJTl8yPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTm9kZSI+RlRDX05vZGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfU0pJUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9DaGVjayI+RlRfT3V0bGluZV9DaGVjazwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX05vZGVfVW5yZWYiPkZUQ19Ob2RlX1VucmVmPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX1VOSUNPREU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfQ29uaWNUb0Z1bmMiPkZUX091dGxpbmVfQ29uaWNUb0Z1bmM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19TQml0Ij5GVENfU0JpdDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FTkNPRElOR19XQU5TVU5HPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0NvcHkiPkZUX091dGxpbmVfQ29weTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRDYWNoZSI+RlRDX1NCaXRDYWNoZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0VuY29kaW5nIj5GVF9FbmNvZGluZzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9DdWJpY1RvRnVuYyI+RlRfT3V0bGluZV9DdWJpY1RvRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NCaXRDYWNoZV9Mb29rdXAiPkZUQ19TQml0Q2FjaGVfTG9va3VwPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0VSUk9SU19IIj5GVF9FUlJPUlNfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9EZWNvbXBvc2UiPkZUX091dGxpbmVfRGVjb21wb3NlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlciI+RlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfRG9uZSI+RlRfT3V0bGluZV9Eb25lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdENhY2hlX05ldyI+RlRDX1NCaXRDYWNoZV9OZXc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GMjZEb3Q2Ij5GVF9GMjZEb3Q2PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0VtYm9sZGVuIj5GVF9PdXRsaW5lX0VtYm9sZGVuPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfU0JpdFJlYyI+RlRDX1NCaXRSZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GMkRvdDE0Ij5GVF9GMkRvdDE0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0VtYm9sZGVuWFkiPkZUX091dGxpbmVfRW1ib2xkZW5YWTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItY2FjaGVfc3Vic3lzdGVtLmh0bWwjRlRDX1NjYWxlciI+RlRDX1NjYWxlcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19DSURfS0VZRUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfRnVuY3MiPkZUX091dGxpbmVfRnVuY3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19TY2FsZXJSZWMiPkZUQ19TY2FsZXJSZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfWFhYIj5GVF9GQUNFX0ZMQUdfQ09MT1I8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfR2V0X0JCb3giPkZUX091dGxpbmVfR2V0X0JCb3g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjZmFsbGJhY2stc2NyaXB0Ij5mYWxsYmFjay1zY3JpcHQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfWFhYIj5GVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0dldF9CaXRtYXAiPkZUX091dGxpbmVfR2V0X0JpdG1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNnbHlwaC10by1zY3JpcHQtbWFwIj5nbHlwaC10by1zY3JpcHQtbWFwPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0dldF9DQm94Ij5GVF9PdXRsaW5lX0dldF9DQm94PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jZmZfZHJpdmVyLmh0bWwjaGludGluZy1lbmdpbmUiPmhpbnRpbmctZW5naW5lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiI+RlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb248L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWF1dG9faGludGVyLmh0bWwjaW5jcmVhc2UteC1oZWlnaHQiPmluY3JlYXNlLXgtaGVpZ2h0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfT3V0bGluZV9HZXRJbnNpZGVCb3JkZXIiPkZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10dF9kcml2ZXIuaHRtbCNpbnRlcnByZXRlci12ZXJzaW9uIj5pbnRlcnByZXRlci12ZXJzaW9uPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyIj5GVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNmZl9kcml2ZXIuaHRtbCNuby1zdGVtLWRhcmtlbmluZyI+bm8tc3RlbS1kYXJrZW5pbmc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfWFhYIj5GVF9GQUNFX0ZMQUdfSElOVEVSPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0xpbmVUb0Z1bmMiPkZUX091dGxpbmVfTGluZVRvRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0JMVUVfRlVaWjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX01vdmVUb0Z1bmMiPkZUX091dGxpbmVfTW92ZVRvRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0JMVUVfU0NBTEU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GQUNFX0ZMQUdfWFhYIj5GVF9GQUNFX0ZMQUdfS0VSTklORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9OZXciPkZUX091dGxpbmVfTmV3PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfQkxVRV9TSElGVDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX1JlbmRlciI+RlRfT3V0bGluZV9SZW5kZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9CTFVFX1ZBTFVFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1NDQUxBQkxFPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX1JldmVyc2UiPkZUX091dGxpbmVfUmV2ZXJzZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0NIQVJfU1RSSU5HPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1NGTlQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfVHJhbnNmb3JtIj5GVF9PdXRsaW5lX1RyYW5zZm9ybTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0NIQVJfU1RSSU5HX0tFWTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZBQ0VfRkxBR19YWFgiPkZUX0ZBQ0VfRkxBR19UUklDS1k8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfVHJhbnNsYXRlIj5GVF9PdXRsaW5lX1RyYW5zbGF0ZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0VOQ09ESU5HX0VOVFJZPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1ZFUlRJQ0FMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfT3V0bGluZUdseXBoIj5GVF9PdXRsaW5lR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9FTkNPRElOR19UWVBFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRkFDRV9GTEFHX1hYWCI+RlRfRkFDRV9GTEFHX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX091dGxpbmVHbHlwaFJlYyI+RlRfT3V0bGluZUdseXBoUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfRkFNSUxZX0JMVUU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1zZm50X25hbWVzLmh0bWwjRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfRkFNSUxZIj5GVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9GQU1JTFk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GQU1JTFlfTkFNRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyI+RlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50czwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc2ZudF9uYW1lcy5odG1sI0ZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWSI+RlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfU1VCRkFNSUxZPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfdmFyaWFudHMuaHRtbCNGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50Ij5GVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTCI+RlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfRk9OVF9CQk9YPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3ZhcmlhbnRzLmh0bWwjRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4Ij5GVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkciPkZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GT05UX01BVFJJWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF92YXJpYW50cy5odG1sI0ZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQiPkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUGFyYW1ldGVyIj5GVF9QYXJhbWV0ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GT05UX05BTUU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfdmFyaWFudHMuaHRtbCNGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMiPkZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9yczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfUEZSX0giPkZUX1BGUl9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfRk9OVF9UWVBFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3ZhcmlhbnRzLmh0bWwjRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciI+RlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX0JHUkE8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GT1JDRV9CT0xEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZV9JbnRlcm5hbCI+RlRfRmFjZV9JbnRlcm5hbDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX0dSQVk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GU19UWVBFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nIj5GVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfR1JBWTI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9GVUxMX05BTUU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlUmVjIj5GVF9GYWNlUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BpeGVsX01vZGUiPkZUX1BJWEVMX01PREVfR1JBWTQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9JU19GSVhFRF9QSVRDSDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX0xDRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0lUQUxJQ19BTkdMRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9GbG9vckZpeCI+RlRfRmxvb3JGaXg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUElYRUxfTU9ERV9MQ0RfVjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX0xBTkdVQUdFX0dST1VQPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0ZPTlRfRk9STUFUU19IIj5GVF9GT05UX0ZPUk1BVFNfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX01PTk88L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9MRU5fSVY8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfRlJFRVRZUEVfSCI+RlRfRlJFRVRZUEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QaXhlbF9Nb2RlIj5GVF9QSVhFTF9NT0RFX05PTkU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9NSU5fRkVBVFVSRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfRnJlZV9GdW5jIj5GVF9GcmVlX0Z1bmM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUGl4ZWxfTW9kZSI+RlRfUGl4ZWxfTW9kZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX05PVElDRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZTVFlQRV9YWFgiPkZUX0ZTVFlQRV9CSVRNQVBfRU1CRURESU5HX09OTFk8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9pbnRlciI+RlRfUG9pbnRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX05VTV9CTFVFX1ZBTFVFUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZTVFlQRV9YWFgiPkZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9OVU1fQ0hBUl9TVFJJTkdTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRlNUWVBFX1hYWCI+RlRfRlNUWVBFX0lOU1RBTExBQkxFX0VNQkVERElORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXAiPkZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX05VTV9GQU1JTFlfQkxVRVM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GU1RZUEVfWFhYIj5GVF9GU1RZUEVfTk9fU1VCU0VUVElORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYXV0b19oaW50ZXIuaHRtbCNGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCI+RlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9OVU1fRkFNSUxZX09USEVSX0JMVUVTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRlNUWVBFX1hYWCI+RlRfRlNUWVBFX1BSRVZJRVdfQU5EX1BSSU5UX0VNQkVERElORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Qcm9wZXJ0eV9HZXQiPkZUX1Byb3BlcnR5X0dldDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX05VTV9PVEhFUl9CTFVFUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZTVFlQRV9YWFgiPkZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X1NldCI+RlRfUHJvcGVydHlfU2V0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfTlVNX1NURU1fU05BUF9IPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRlNUWVBFX1hYWCI+RlRfRlNUWVBFX1hYWDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9QdHJEaXN0Ij5GVF9QdHJEaXN0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfTlVNX1NURU1fU05BUF9WPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRldvcmQiPkZUX0ZXb3JkPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19YWFgiPkZUX1JBU1RFUl9GTEFHX0FBPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfTlVNX1NVQlJTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdhc3BfdGFibGUuaHRtbCNGVF9HQVNQX1hYWCI+RlRfR0FTUF9ET19HUkFZPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19YWFgiPkZUX1JBU1RFUl9GTEFHX0NMSVA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9PVEhFUl9CTFVFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdhc3BfdGFibGUuaHRtbCNGVF9HQVNQX1hYWCI+RlRfR0FTUF9ET19HUklERklUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19YWFgiPkZUX1JBU1RFUl9GTEFHX0RFRkFVTFQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9QQUlOVF9UWVBFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0dBU1BfSCI+RlRfR0FTUF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19YWFgiPkZUX1JBU1RFUl9GTEFHX0RJUkVDVDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1BBU1NXT1JEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdhc3BfdGFibGUuaHRtbCNGVF9HQVNQX1hYWCI+RlRfR0FTUF9OT19UQUJMRTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUkFTVEVSX0ZMQUdfWFhYIj5GVF9SQVNURVJfRkxBR19YWFg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9STkRfU1RFTV9VUDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nYXNwX3RhYmxlLmh0bWwjRlRfR0FTUF9YWFgiPkZUX0dBU1BfU1lNTUVUUklDX0dSSURGSVQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3RlciI+RlRfUmFzdGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfU1REX0hXPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdhc3BfdGFibGUuaHRtbCNGVF9HQVNQX1hYWCI+RlRfR0FTUF9TWU1NRVRSSUNfU01PT1RISU5HPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfQml0U2V0X0Z1bmMiPkZUX1Jhc3Rlcl9CaXRTZXRfRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1NURF9WVzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nYXNwX3RhYmxlLmh0bWwjRlRfR0FTUF9YWFgiPkZUX0dBU1BfWFhYPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfQml0VGVzdF9GdW5jIj5GVF9SYXN0ZXJfQml0VGVzdF9GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfU1RFTV9TTkFQX0g8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HZW5lcmljIj5GVF9HZW5lcmljPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfRG9uZUZ1bmMiPkZUX1Jhc3Rlcl9Eb25lRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1NURU1fU05BUF9WPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2VuZXJpY19GaW5hbGl6ZXIiPkZUX0dlbmVyaWNfRmluYWxpemVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfRnVuY3MiPkZUX1Jhc3Rlcl9GdW5jczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1NVQlI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItcXVpY2tfYWR2YW5jZS5odG1sI0ZUX0dldF9BZHZhbmNlIj5GVF9HZXRfQWR2YW5jZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX05ld0Z1bmMiPkZUX1Jhc3Rlcl9OZXdGdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfVU5ERVJMSU5FX1BPU0lUSU9OPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXF1aWNrX2FkdmFuY2UuaHRtbCNGVF9HZXRfQWR2YW5jZXMiPkZUX0dldF9BZHZhbmNlczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX1BhcmFtcyI+RlRfUmFzdGVyX1BhcmFtczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1VOREVSTElORV9USElDS05FU1M8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmRmX2ZvbnRzLmh0bWwjRlRfR2V0X0JERl9DaGFyc2V0X0lEIj5GVF9HZXRfQkRGX0NoYXJzZXRfSUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9SZW5kZXJGdW5jIj5GVF9SYXN0ZXJfUmVuZGVyRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19ESUNUX1VOSVFVRV9JRDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iZGZfZm9udHMuaHRtbCNGVF9HZXRfQkRGX1Byb3BlcnR5Ij5GVF9HZXRfQkRGX1Byb3BlcnR5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfUmVzZXRGdW5jIj5GVF9SYXN0ZXJfUmVzZXRGdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19EaWN0X0tleXMiPlBTX0RJQ1RfVkVSU0lPTjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9DaGFyX0luZGV4Ij5GVF9HZXRfQ2hhcl9JbmRleDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX1NldE1vZGVGdW5jIj5GVF9SYXN0ZXJfU2V0TW9kZUZ1bmM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RpY3RfS2V5cyI+UFNfRElDVF9XRUlHSFQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfQ2hhcm1hcF9JbmRleCI+RlRfR2V0X0NoYXJtYXBfSW5kZXg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1JFTkRFUl9IIj5GVF9SRU5ERVJfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19EaWN0X0tleXM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY2lkX2ZvbnRzLmh0bWwjRlRfR2V0X0NJRF9Gcm9tX0dseXBoX0luZGV4Ij5GVF9HZXRfQ0lEX0Zyb21fR2x5cGhfSW5kZXg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRm9udEluZm8iPlBTX0ZvbnRJbmZvPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWNpZF9mb250cy5odG1sI0ZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQiPkZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRF9WPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItY2lkX2ZvbnRzLmh0bWwjRlRfR2V0X0NJRF9SZWdpc3RyeV9PcmRlcmluZ19TdXBwbGVtZW50Ij5GVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xJR0hUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlIj5QU19Qcml2YXRlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX0dldF9DTWFwX0Zvcm1hdCI+RlRfR2V0X0NNYXBfRm9ybWF0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SRU5ERVJfTU9ERV9NT05PPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlUmVjIj5QU19Qcml2YXRlUmVjPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX0dldF9DTWFwX0xhbmd1YWdlX0lEIj5GVF9HZXRfQ01hcF9MYW5ndWFnZV9JRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZW5kZXJfTW9kZSI+RlRfUkVOREVSX01PREVfTk9STUFMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CbGVuZF9GbGFncyI+VDFfQkxFTkRfQkxVRV9TQ0FMRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9GaXJzdF9DaGFyIj5GVF9HZXRfRmlyc3RfQ2hhcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1JlYWxsb2NfRnVuYyI+RlRfUmVhbGxvY19GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CbGVuZF9GbGFncyI+VDFfQkxFTkRfQkxVRV9TSElGVDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1mb250X2Zvcm1hdHMuaHRtbCNGVF9HZXRfRm9udF9Gb3JtYXQiPkZUX0dldF9Gb250X0Zvcm1hdDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZWZlcmVuY2VfRmFjZSI+RlRfUmVmZXJlbmNlX0ZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JsZW5kX0ZsYWdzIj5UMV9CTEVORF9CTFVFX1ZBTFVFUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9GU1R5cGVfRmxhZ3MiPkZUX0dldF9GU1R5cGVfRmxhZ3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUmVmZXJlbmNlX0xpYnJhcnkiPkZUX1JlZmVyZW5jZV9MaWJyYXJ5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CbGVuZF9GbGFncyI+VDFfQkxFTkRfRkFNSUxZX0JMVUVTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdhc3BfdGFibGUuaHRtbCNGVF9HZXRfR2FzcCI+RlRfR2V0X0dhc3A8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUmVtb3ZlX01vZHVsZSI+RlRfUmVtb3ZlX01vZHVsZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQmxlbmRfRmxhZ3MiPlQxX0JMRU5EX0ZBTUlMWV9PVEhFUl9CTFVFUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2V0X0dseXBoIj5GVF9HZXRfR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX0dseXBoIj5GVF9SZW5kZXJfR2x5cGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JsZW5kX0ZsYWdzIj5UMV9CTEVORF9GT1JDRV9CT0xEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X0dseXBoX05hbWUiPkZUX0dldF9HbHlwaF9OYW1lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SZW5kZXJfTW9kZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQmxlbmRfRmxhZ3MiPlQxX0JMRU5EX0lUQUxJQ19BTkdMRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9LZXJuaW5nIj5GVF9HZXRfS2VybmluZzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9SZW5kZXJlciI+RlRfUmVuZGVyZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JsZW5kX0ZsYWdzIj5UMV9CTEVORF9PVEhFUl9CTFVFUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfR2V0X01NX1ZhciI+RlRfR2V0X01NX1ZhcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9SZW5kZXJlcl9DbGFzcyI+RlRfUmVuZGVyZXJfQ2xhc3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JsZW5kX0ZsYWdzIj5UMV9CTEVORF9TVEFOREFSRF9IRUlHSFQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9HZXRfTW9kdWxlIj5GVF9HZXRfTW9kdWxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlcXVlc3RfU2l6ZSI+RlRfUmVxdWVzdF9TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CbGVuZF9GbGFncyI+VDFfQkxFTkRfU1RBTkRBUkRfV0lEVEg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbXVsdGlwbGVfbWFzdGVycy5odG1sI0ZUX0dldF9NdWx0aV9NYXN0ZXIiPkZUX0dldF9NdWx0aV9NYXN0ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sI0ZUX1JvdW5kRml4Ij5GVF9Sb3VuZEZpeDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQmxlbmRfRmxhZ3MiPlQxX0JMRU5EX1NURU1fU05BUF9IRUlHSFRTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X05hbWVfSW5kZXgiPkZUX0dldF9OYW1lX0luZGV4PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NlbGVjdF9DaGFybWFwIj5GVF9TZWxlY3RfQ2hhcm1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQmxlbmRfRmxhZ3MiPlQxX0JMRU5EX1NURU1fU05BUF9XSURUSFM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfTmV4dF9DaGFyIj5GVF9HZXRfTmV4dF9DaGFyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NlbGVjdF9TaXplIj5GVF9TZWxlY3RfU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQmxlbmRfRmxhZ3MiPlQxX0JMRU5EX1VOREVSTElORV9QT1NJVElPTjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCNGVF9HZXRfUEZSX0FkdmFuY2UiPkZUX0dldF9QRlJfQWR2YW5jZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CbGVuZF9GbGFncyI+VDFfQkxFTkRfVU5ERVJMSU5FX1RISUNLTkVTUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCNGVF9HZXRfUEZSX0tlcm5pbmciPkZUX0dldF9QRlJfS2VybmluZzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcm1hcCI+RlRfU2V0X0NoYXJtYXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JsZW5kX0ZsYWdzIj5UMV9CbGVuZF9GbGFnczwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCNGVF9HZXRfUEZSX01ldHJpY3MiPkZUX0dldF9QRlJfTWV0cmljczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9TZXRfRGVidWdfSG9vayI+RlRfU2V0X0RlYnVnX0hvb2s8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VuY29kaW5nVHlwZSI+VDFfRU5DT0RJTkdfVFlQRV9BUlJBWTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9Qb3N0c2NyaXB0X05hbWUiPkZUX0dldF9Qb3N0c2NyaXB0X05hbWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCNGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMiPkZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfRW5jb2RpbmdUeXBlIj5UMV9FTkNPRElOR19UWVBFX0VYUEVSVDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNGVF9HZXRfUFNfRm9udF9JbmZvIj5GVF9HZXRfUFNfRm9udF9JbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyI+RlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfRW5jb2RpbmdUeXBlIj5UMV9FTkNPRElOR19UWVBFX0lTT0xBVElOMTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNGVF9HZXRfUFNfRm9udF9Qcml2YXRlIj5GVF9HZXRfUFNfRm9udF9Qcml2YXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NldF9QaXhlbF9TaXplcyI+RlRfU2V0X1BpeGVsX1NpemVzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9FbmNvZGluZ1R5cGUiPlQxX0VOQ09ESU5HX1RZUEVfTk9ORTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNGVF9HZXRfUFNfRm9udF9WYWx1ZSI+RlRfR2V0X1BTX0ZvbnRfVmFsdWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfU2V0X1JlbmRlcmVyIj5GVF9TZXRfUmVuZGVyZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VuY29kaW5nVHlwZSI+VDFfRU5DT0RJTkdfVFlQRV9TVEFOREFSRDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0dldF9SZW5kZXJlciI+RlRfR2V0X1JlbmRlcmVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NldF9UcmFuc2Zvcm0iPkZUX1NldF9UcmFuc2Zvcm08L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VuY29kaW5nVHlwZSI+VDFfRW5jb2RpbmdUeXBlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXNmbnRfbmFtZXMuaHRtbCNGVF9HZXRfU2ZudF9OYW1lIj5GVF9HZXRfU2ZudF9OYW1lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyI+RlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfRm9udEluZm8iPlQxX0ZvbnRJbmZvPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXNmbnRfbmFtZXMuaHRtbCNGVF9HZXRfU2ZudF9OYW1lX0NvdW50Ij5GVF9HZXRfU2ZudF9OYW1lX0NvdW50PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMiPkZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9Qcml2YXRlIj5UMV9Qcml2YXRlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX0dldF9TZm50X1RhYmxlIj5GVF9HZXRfU2ZudF9UYWJsZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU2ZudF9UYWciPkZUX1NGTlRfSEVBRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQURPQkVfSURfWFhYIj5UVF9BRE9CRV9JRF9DVVNUT008L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfU3ViR2x5cGhfSW5mbyI+RlRfR2V0X1N1YkdseXBoX0luZm88L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NmbnRfVGFnIj5GVF9TRk5UX0hIRUE8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FET0JFX0lEX1hYWCI+VFRfQURPQkVfSURfRVhQRVJUPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2V0X1RyYWNrX0tlcm5pbmciPkZUX0dldF9UcmFja19LZXJuaW5nPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TZm50X1RhZyI+RlRfU0ZOVF9NQVhQPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BRE9CRV9JRF9YWFgiPlRUX0FET0JFX0lEX0xBVElOXzE8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfZW5naW5lLmh0bWwjRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlIj5GVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1NGTlRfTkFNRVNfSCI+RlRfU0ZOVF9OQU1FU19IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BRE9CRV9JRF9YWFgiPlRUX0FET0JFX0lEX1NUQU5EQVJEPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX0dldF9XaW5GTlRfSGVhZGVyIj5GVF9HZXRfV2luRk5UX0hlYWRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU2ZudF9UYWciPkZUX1NGTlRfT1MyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BRE9CRV9JRF9YWFgiPlRUX0FET0JFX0lEX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1tYWNfc3BlY2lmaWMuaHRtbCNGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lIj5GVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TZm50X1RhZyI+RlRfU0ZOVF9QQ0xUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BUFBMRV9JRF9YWFgiPlRUX0FQUExFX0lEX0RFRkFVTFQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbWFjX3NwZWNpZmljLmh0bWwjRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lIj5GVF9HZXRGaWxlX0Zyb21fTWFjX05hbWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NmbnRfVGFnIj5GVF9TRk5UX1BPU1Q8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FQUExFX0lEX1hYWCI+VFRfQVBQTEVfSURfSVNPXzEwNjQ2PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLW1hY19zcGVjaWZpYy5odG1sI0ZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lIj5GVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU2ZudF9UYWciPkZUX1NGTlRfVkhFQTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQVBQTEVfSURfWFhYIj5UVF9BUFBMRV9JRF9VTklDT0RFXzFfMTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HTFlQSF9CQk9YX0dSSURGSVQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NmbnRfVGFibGVfSW5mbyI+RlRfU2ZudF9UYWJsZV9JbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BUFBMRV9JRF9YWFgiPlRUX0FQUExFX0lEX1VOSUNPREVfMl8wPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dMWVBIX0JCT1hfUElYRUxTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TZm50X1RhZyI+RlRfU2ZudF9UYWc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FQUExFX0lEX1hYWCI+VFRfQVBQTEVfSURfVU5JQ09ERV8zMjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HTFlQSF9CQk9YX1NVQlBJWEVMUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc2ZudF9uYW1lcy5odG1sI0ZUX1NmbnROYW1lIj5GVF9TZm50TmFtZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQVBQTEVfSURfWFhYIj5UVF9BUFBMRV9JRF9WQVJJQU5UX1NFTEVDVE9SPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dMWVBIX0JCT1hfVFJVTkNBVEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BUFBMRV9JRF9YWFgiPlRUX0FQUExFX0lEX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfQkJveF9Nb2RlIj5GVF9HTFlQSF9CQk9YX1VOU0NBTEVEPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdF9UeXBlIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9IZWFkZXIiPlRUX0hlYWRlcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0JJVE1BUDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplX1JlcXVlc3RfVHlwZSI+RlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSG9yaUhlYWRlciI+VFRfSG9yaUhlYWRlcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplX1JlcXVlc3RfVHlwZSI+RlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHRfZHJpdmVyLmh0bWwjVFRfSU5URVJQUkVURVJfVkVSU0lPTl9YWFgiPlRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dMWVBIX0ZPUk1BVF9OT05FPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdF9UeXBlIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHRfZHJpdmVyLmh0bWwjVFRfSU5URVJQUkVURVJfVkVSU0lPTl9YWFgiPlRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdF9UeXBlIj5GVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXR0X2RyaXZlci5odG1sI1RUX0lOVEVSUFJFVEVSX1ZFUlNJT05fWFhYIj5UVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR0xZUEhfRk9STUFUX1BMT1RURVI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1NJWkVTX0giPkZUX1NJWkVTX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0lTT19JRF9YWFgiPlRUX0lTT19JRF8xMDY0NjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9HTFlQSF9IIj5GVF9HTFlQSF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1jb21wdXRhdGlvbnMuaHRtbCNGVF9TaW4iPkZUX1NpbjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSVNPX0lEX1hYWCI+VFRfSVNPX0lEXzdCSVRfQVNDSUk8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoIj5GVF9HbHlwaDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9JU09fSURfWFhYIj5UVF9JU09fSURfODg1OV8xPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9CQm94X01vZGUiPkZUX0dseXBoX0JCb3hfTW9kZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplX0ludGVybmFsIj5GVF9TaXplX0ludGVybmFsPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9JU09fSURfWFhYIj5UVF9JU09fSURfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9Db3B5Ij5GVF9HbHlwaF9Db3B5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfTWV0cmljcyI+RlRfU2l6ZV9NZXRyaWNzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfQVJBQklDPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2x5cGhfRm9ybWF0Ij5GVF9HbHlwaF9Gb3JtYXQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZV9SZXF1ZXN0Ij5GVF9TaXplX1JlcXVlc3Q8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9BUk1FTklBTjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9tYW5hZ2VtZW50Lmh0bWwjRlRfR2x5cGhfR2V0X0NCb3giPkZUX0dseXBoX0dldF9DQm94PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdF9UeXBlIj5GVF9TaXplX1JlcXVlc3RfVHlwZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX0JFTkdBTEk8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HbHlwaF9NZXRyaWNzIj5GVF9HbHlwaF9NZXRyaWNzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemVfUmVxdWVzdFJlYyI+RlRfU2l6ZV9SZXF1ZXN0UmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfQlVSTUVTRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfR2x5cGhfU3Ryb2tlIj5GVF9HbHlwaF9TdHJva2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZVJlYyI+RlRfU2l6ZVJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX0RFVkFOQUdBUkk8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX0dseXBoX1N0cm9rZUJvcmRlciI+RlRfR2x5cGhfU3Ryb2tlQm9yZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1Nsb3RfSW50ZXJuYWwiPkZUX1Nsb3RfSW50ZXJuYWw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9HRUVaPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9Ub19CaXRtYXAiPkZUX0dseXBoX1RvX0JpdG1hcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfU3BhbiI+RlRfU3BhbjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX0dFT1JHSUFOPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX21hbmFnZW1lbnQuaHRtbCNGVF9HbHlwaF9UcmFuc2Zvcm0iPkZUX0dseXBoX1RyYW5zZm9ybTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfU3BhbkZ1bmMiPkZUX1NwYW5GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfR1JFRUs8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoUmVjIj5GVF9HbHlwaFJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1NUUk9LRVJfQk9SREVSX0xFRlQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9HVUpBUkFUSTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dseXBoU2xvdCI+RlRfR2x5cGhTbG90PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlckJvcmRlciI+RlRfU1RST0tFUl9CT1JERVJfUklHSFQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9HVVJNVUtISTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iaXRtYXBfaGFuZGxpbmcuaHRtbCNGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCI+RlRfR2x5cGhTbG90X093bl9CaXRtYXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1NUUk9LRVJfSCI+RlRfU1RST0tFUl9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfSEVCUkVXPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfR2x5cGhTbG90UmVjIj5GVF9HbHlwaFNsb3RSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVDYXAiPkZUX1NUUk9LRVJfTElORUNBUF9CVVRUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfSkFQQU5FU0U8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaGVhZGVyX2ZpbGVfbWFjcm9zLmh0bWwjRlRfR1hfVkFMSURBVEVfSCI+RlRfR1hfVkFMSURBVEVfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZUNhcCI+RlRfU1RST0tFUl9MSU5FQ0FQX1JPVU5EPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfS0FOTkFEQTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9HWklQX0giPkZUX0daSVBfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZUNhcCI+RlRfU1RST0tFUl9MSU5FQ0FQX1NRVUFSRTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX0tITUVSPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWd6aXAuaHRtbCNGVF9HemlwX1VuY29tcHJlc3MiPkZUX0d6aXBfVW5jb21wcmVzczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZUpvaW4iPkZUX1NUUk9LRVJfTElORUpPSU5fQkVWRUw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9LT1JFQU48L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9IQVNfQ09MT1IiPkZUX0hBU19DT0xPUjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZUpvaW4iPkZUX1NUUk9LRVJfTElORUpPSU5fTUlURVI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9MQU9USUFOPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSEFTX0ZBU1RfR0xZUEhTIj5GVF9IQVNfRkFTVF9HTFlQSFM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVKb2luIj5GVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX0ZJWEVEPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfTUFMQVlBTEFNPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSEFTX0ZJWEVEX1NJWkVTIj5GVF9IQVNfRklYRURfU0laRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVKb2luIj5GVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfTUFMRElWSUFOPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSEFTX0dMWVBIX05BTUVTIj5GVF9IQVNfR0xZUEhfTkFNRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVKb2luIj5GVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5EPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfTU9OR09MSUFOPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSEFTX0hPUklaT05UQUwiPkZUX0hBU19IT1JJWk9OVEFMPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NUWUxFX0ZMQUdfWFhYIj5GVF9TVFlMRV9GTEFHX0JPTEQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9PUklZQTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0hBU19LRVJOSU5HIj5GVF9IQVNfS0VSTklORzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVFlMRV9GTEFHX1hYWCI+RlRfU1RZTEVfRkxBR19JVEFMSUM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9ST01BTjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0hBU19NVUxUSVBMRV9NQVNURVJTIj5GVF9IQVNfTVVMVElQTEVfTUFTVEVSUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVFlMRV9GTEFHX1hYWCI+RlRfU1RZTEVfRkxBR19YWFg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9SU1lNQk9MPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSEFTX1ZFUlRJQ0FMIj5GVF9IQVNfVkVSVElDQUw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1JVU1NJQU48L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjRlRfSGFzX1BTX0dseXBoX05hbWVzIj5GVF9IYXNfUFNfR2x5cGhfTmFtZXM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW1fQ2xvc2VGdW5jIj5GVF9TdHJlYW1fQ2xvc2VGdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfU0lNUExJRklFRF9DSElORVNFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0lNQUdFX0giPkZUX0lNQUdFX0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW1fSW9GdW5jIj5GVF9TdHJlYW1fSW9GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfU0lOREhJPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSU1BR0VfVEFHIj5GVF9JTUFHRV9UQUc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJ6aXAyLmh0bWwjRlRfU3RyZWFtX09wZW5CemlwMiI+RlRfU3RyZWFtX09wZW5CemlwMjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1NJTkhBTEVTRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9JTkNSRU1FTlRBTF9IIj5GVF9JTkNSRU1FTlRBTF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nemlwLmh0bWwjRlRfU3RyZWFtX09wZW5HemlwIj5GVF9TdHJlYW1fT3Blbkd6aXA8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9TTEFWSUM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItaW5jcmVtZW50YWwuaHRtbCNGVF9JbmNyZW1lbnRhbCI+RlRfSW5jcmVtZW50YWw8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWx6dy5odG1sI0ZUX1N0cmVhbV9PcGVuTFpXIj5GVF9TdHJlYW1fT3BlbkxaVzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1RBTUlMPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfU3RyZWFtRGVzYyI+RlRfU3RyZWFtRGVzYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1RFTFVHVTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsX0Z1bmNzUmVjIj5GVF9JbmNyZW1lbnRhbF9GdW5jc1JlYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1N0cmVhbVJlYyI+RlRfU3RyZWFtUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfVEhBSTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsX0dldEdseXBoRGF0YUZ1bmMiPkZUX0luY3JlbWVudGFsX0dldEdseXBoRGF0YUZ1bmM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9USUJFVEFOPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyI+RlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXIiPkZUX1N0cm9rZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9UUkFESVRJT05BTF9DSElORVNFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIj5GVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2U8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCI+RlRfU3Ryb2tlcl9CZWdpblN1YlBhdGg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9VTklOVEVSUDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sI0ZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyI+RlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9Db25pY1RvIj5GVF9TdHJva2VyX0NvbmljVG88L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9WSUVUTkFNRVNFPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfTWV0cmljcyI+RlRfSW5jcmVtZW50YWxfTWV0cmljczwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfQ3ViaWNUbyI+RlRfU3Ryb2tlcl9DdWJpY1RvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWluY3JlbWVudGFsLmh0bWwjRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYyI+RlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfRG9uZSI+RlRfU3Ryb2tlcl9Eb25lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NYXhQcm9maWxlIj5UVF9NYXhQcm9maWxlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSW5pdF9GcmVlVHlwZSI+RlRfSW5pdF9GcmVlVHlwZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfRW5kU3ViUGF0aCI+RlRfU3Ryb2tlcl9FbmRTdWJQYXRoPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9YWFgiPlRUX01TX0lEX0JJR181PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0V4cG9ydCI+RlRfU3Ryb2tlcl9FeHBvcnQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX1hYWCI+VFRfTVNfSURfR0IyMzEyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50MTYiPkZUX0ludDE2PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIiPkZUX1N0cm9rZXJfRXhwb3J0Qm9yZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9YWFgiPlRUX01TX0lEX0pPSEFCPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50MzIiPkZUX0ludDMyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1nbHlwaF9zdHJva2VyLmh0bWwjRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMiPkZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9YWFgiPlRUX01TX0lEX1NKSVM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQ2NCI+RlRfSW50NjQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0dldENvdW50cyI+RlRfU3Ryb2tlcl9HZXRDb3VudHM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX1hYWCI+VFRfTVNfSURfU1lNQk9MX0NTPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSVNfQ0lEX0tFWUVEIj5GVF9JU19DSURfS0VZRUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWdseXBoX3N0cm9rZXIuaHRtbCNGVF9TdHJva2VyX0xpbmVDYXAiPkZUX1N0cm9rZXJfTGluZUNhcDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTVNfSURfWFhYIj5UVF9NU19JRF9VQ1NfNDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0lTX0ZJWEVEX1dJRFRIIj5GVF9JU19GSVhFRF9XSURUSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZUpvaW4iPkZUX1N0cm9rZXJfTGluZUpvaW48L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX1hYWCI+VFRfTVNfSURfVU5JQ09ERV9DUzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0lTX1NDQUxBQkxFIj5GVF9JU19TQ0FMQUJMRTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTGluZVRvIj5GVF9TdHJva2VyX0xpbmVUbzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTVNfSURfWFhYIj5UVF9NU19JRF9XQU5TVU5HPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSVNfU0ZOVCI+RlRfSVNfU0ZOVDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfTmV3Ij5GVF9TdHJva2VyX05ldzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTVNfSURfWFhYIj5UVF9NU19JRF9YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9JU19UUklDS1kiPkZUX0lTX1RSSUNLWTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lIj5GVF9TdHJva2VyX1BhcnNlT3V0bGluZTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfT1MyIj5UVF9PUzI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9LZXJuaW5nX01vZGUiPkZUX0tFUk5JTkdfREVGQVVMVDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfUmV3aW5kIj5GVF9TdHJva2VyX1Jld2luZDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUENMVCI+VFRfUENMVDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tlcm5pbmdfTW9kZSI+RlRfS0VSTklOR19VTkZJVFRFRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJfU2V0Ij5GVF9TdHJva2VyX1NldDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fWFhYIj5UVF9QTEFURk9STV9BRE9CRTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tlcm5pbmdfTW9kZSI+RlRfS0VSTklOR19VTlNDQUxFRDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sI0ZUX1N0cm9rZXJCb3JkZXIiPkZUX1N0cm9rZXJCb3JkZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0tlcm5pbmdfTW9kZSI+RlRfS2VybmluZ19Nb2RlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfWFhYIj5GVF9TVUJHTFlQSF9GTEFHXzJYMjwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fWFhYIj5UVF9QTEFURk9STV9DVVNUT008L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xjZEZpbHRlciI+RlRfTENEX0ZJTFRFUl9ERUZBVUxUPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfWFhYIj5GVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1dPUkRTPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9YWFgiPlRUX1BMQVRGT1JNX0lTTzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCNGVF9MQ0RfRklMVEVSX0giPkZUX0xDRF9GSUxURVJfSDwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVUJHTFlQSF9GTEFHX1hYWCI+RlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fTUFDSU5UT1NIPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWxjZF9maWx0ZXJpbmcuaHRtbCNGVF9MY2RGaWx0ZXIiPkZUX0xDRF9GSUxURVJfTEVHQUNZPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfWFhYIj5GVF9TVUJHTFlQSF9GTEFHX1JPVU5EX1hZX1RPX0dSSUQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fTUlDUk9TT0ZUPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWxjZF9maWx0ZXJpbmcuaHRtbCNGVF9MY2RGaWx0ZXIiPkZUX0xDRF9GSUxURVJfTElHSFQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19YWFgiPkZUX1NVQkdMWVBIX0ZMQUdfU0NBTEU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWxjZF9maWx0ZXJpbmcuaHRtbCNGVF9MY2RGaWx0ZXIiPkZUX0xDRF9GSUxURVJfTk9ORTwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TVUJHTFlQSF9GTEFHX1hYWCI+RlRfU1VCR0xZUEhfRkxBR19VU0VfTVlfTUVUUklDUzwvYT48L3RkPjx0ZD48YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUG9zdHNjcmlwdCI+VFRfUG9zdHNjcmlwdDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTGNkRmlsdGVyIj5GVF9MY2RGaWx0ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU1VCR0xZUEhfRkxBR19YWFgiPkZUX1NVQkdMWVBIX0ZMQUdfWFhYPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9WZXJ0SGVhZGVyIj5UVF9WZXJ0SGVhZGVyPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX0xJU1RfSCI+RlRfTElTVF9IPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NVQkdMWVBIX0ZMQUdfWFhYIj5GVF9TVUJHTFlQSF9GTEFHX1hZX1NDQUxFPC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sI3dhcnBpbmciPndhcnBpbmc8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1N1YkdseXBoIj5GVF9TdWJHbHlwaDwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+CisKKzxkaXYgY2xhc3M9InRpbWVzdGFtcCI+Z2VuZXJhdGVkIG9uIFN1biBKdW4gIDcgMTY6MTM6MDUgMjAxNTwvZGl2PjwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbGNkX2ZpbHRlcmluZy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1sY2RfZmlsdGVyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzMzJiMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbGNkX2ZpbHRlcmluZy5odG1sCkBAIC0wLDAgKzEsMjQ1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+TENEIEZpbHRlcmluZzwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9MY2RGaWx0ZXIiPkZUX0xjZEZpbHRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIiPkZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyPC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhlIDxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIiPkZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyPC9hPiBBUEkgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxvdy1wYXNzIGZpbHRlciwgd2hpY2ggaXMgdGhlbiBhcHBsaWVkIHRvIExDRC1vcHRpbWl6ZWQgYml0bWFwcyBnZW5lcmF0ZWQgdGhyb3VnaCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9SZW5kZXJfR2x5cGgiPkZUX1JlbmRlcl9HbHlwaDwvYT4uIFRoaXMgaXMgdXNlZnVsIHRvIHJlZHVjZSBjb2xvciBmcmluZ2VzIHRoYXQgd291bGQgb2NjdXIgd2l0aCB1bmZpbHRlcmVkIHJlbmRlcmluZy48L3A+Cis8cD5Ob3RlIHRoYXQgbm8gZmlsdGVyIGlzIGFjdGl2ZSBieSBkZWZhdWx0LCBhbmQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIDxiPm5vdDwvYj4gaW1wbGVtZW50ZWQgaW4gZGVmYXVsdCBidWlsZHMgb2YgdGhlIGxpYnJhcnkuIFlvdSBuZWVkIHRvICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaW4geW91ciAmbHNxdW87ZnRvcHRpb24uaCZyc3F1bzsgZmlsZSBpbiBvcmRlciB0byBhY3RpdmF0ZSBpdC48L3A+Cis8cD5GcmVlVHlwZSBnZW5lcmF0ZXMgYWxwaGEgY292ZXJhZ2UgbWFwcywgd2hpY2ggYXJlIGxpbmVhciBieSBuYXR1cmUuIEZvciBpbnN0YW5jZSwgdGhlIHZhbHVlIDB4ODAgaW4gYml0bWFwIHJlcHJlc2VudGF0aW9uIG1lYW5zIHRoYXQgKHdpdGhpbiBudW1lcmljYWwgcHJlY2lzaW9uKSAweDgwLzB4RkYgZnJhY3Rpb24gb2YgdGhhdCBwaXhlbCBpcyBjb3ZlcmVkIGJ5IHRoZSBnbHlwaCdzIG91dGxpbmUuIFRoZSBibGVuZGluZyBmdW5jdGlvbiBmb3IgcGxhY2luZyB0ZXh0IG92ZXIgYSBiYWNrZ3JvdW5kIGlzPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIGRzdCA9IGFscGhhICogc3JjICsgKDEgLSBhbHBoYSkgKiBkc3QgICAgLAorPC9wcmU+Cis8cD53aGljaCBpcyBrbm93biBhcyBPVkVSLiBIb3dldmVyLCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgb2YgdGhlIE9WRVIgb3BlcmF0b3IsIHRoZSBzb3VyY2UgY29sb3JzIHNob3VsZCBmaXJzdCBiZSB0cmFuc2Zvcm1lZCB0byBhIGxpbmVhciBjb2xvciBzcGFjZSwgdGhlbiBhbHBoYSBibGVuZGVkIGluIHRoYXQgc3BhY2UsIGFuZCB0cmFuc2Zvcm1lZCBiYWNrIHRvIHRoZSBvdXRwdXQgY29sb3Igc3BhY2UuPC9wPgorPHA+V2hlbiBsaW5lYXIgbGlnaHQgYmxlbmRpbmcgaXMgdXNlZCwgdGhlIGRlZmF1bHQgRklSNSBmaWx0ZXJpbmcgd2VpZ2h0cyAoYXMgZ2l2ZW4gYnkgRlRfTENEX0ZJTFRFUl9ERUZBVUxUKSBhcmUgbm8gbG9uZ2VyIG9wdGltYWwsIGFzIHRoZXkgaGF2ZSBiZWVuIGRlc2lnbmVkIGZvciBibGFjayBvbiB3aGl0ZSByZW5kZXJpbmcgd2hpbGUgbGFja2luZyBnYW1tYSBjb3JyZWN0aW9uLiBUbyBwcmVzZXJ2ZSBjb2xvciBuZXV0cmFsaXR5LCB3ZWlnaHRzIGZvciBhIEZJUjUgZmlsdGVyIHNob3VsZCBiZSBjaG9zZW4gYWNjb3JkaW5nIHRvIHR3byBmcmVlIHBhcmFtZXRlcnMgJmxzcXVvO2EmcnNxdW87IGFuZCAmbHNxdW87YyZyc3F1bzssIGFuZCB0aGUgRklSIHdlaWdodHMgc2hvdWxkIGJlPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIFthIC0gYywgYSArIGMsIDIgKiBhLCBhICsgYywgYSAtIGNdICAgIC4KKzwvcHJlPgorPHA+VGhpcyBmb3JtdWxhIGdlbmVyYXRlcyBlcXVhbCB3ZWlnaHRzIGZvciBhbGwgdGhlIGNvbG9yIHByaW1hcmllcyBhY3Jvc3MgdGhlIGZpbHRlciBrZXJuZWwsIHdoaWNoIG1ha2VzIGl0IGNvbG9ybGVzcy4gT25lIHN1Z2dlc3RlZCBzZXQgb2Ygd2VpZ2h0cyBpczwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBbMHgxMCwgMHg1MCwgMHg2MCwgMHg1MCwgMHgxMF0gICAgLAorPC9wcmU+Cis8cD53aGVyZSAmbHNxdW87YSZyc3F1bzsgaGFzIHZhbHVlIDB4MzAgYW5kICZsc3F1bztiJnJzcXVvOyB2YWx1ZSAweDIwLiBUaGUgd2VpZ2h0cyBpbiBmaWx0ZXIgbWF5IGhhdmUgYSBzdW0gbGFyZ2VyIHRoYW4gMHgxMDAsIHdoaWNoIGluY3JlYXNlcyBjb2xvcmF0aW9uIHNsaWdodGx5IGJ1dCBhbHNvIGltcHJvdmVzIGNvbnRyYXN0LjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xjZEZpbHRlciI+RlRfTGNkRmlsdGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTENEX0ZJTFRFUl9IIChmdGxjZGZpbC5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9MY2RGaWx0ZXJfCisgIHsKKyAgICA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xDRF9GSUxURVJfTk9ORSI+RlRfTENEX0ZJTFRFUl9OT05FPC9hPiAgICA9IDAsCisgICAgPGEgaHJlZj0iZnQyLWxjZF9maWx0ZXJpbmcuaHRtbCNGVF9MQ0RfRklMVEVSX0RFRkFVTFQiPkZUX0xDRF9GSUxURVJfREVGQVVMVDwvYT4gPSAxLAorICAgIDxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTENEX0ZJTFRFUl9MSUdIVCI+RlRfTENEX0ZJTFRFUl9MSUdIVDwvYT4gICA9IDIsCisgICAgPGEgaHJlZj0iZnQyLWxjZF9maWx0ZXJpbmcuaHRtbCNGVF9MQ0RfRklMVEVSX0xFR0FDWSI+RlRfTENEX0ZJTFRFUl9MRUdBQ1k8L2E+ICA9IDE2LAorCisgICAgRlRfTENEX0ZJTFRFUl9NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSA8Yj5GVF9MY2RGaWx0ZXI8L2I+OworPC9wcmU+CisKKzxwPkEgbGlzdCBvZiB2YWx1ZXMgdG8gaWRlbnRpZnkgdmFyaW91cyB0eXBlcyBvZiBMQ0QgZmlsdGVycy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTENEX0ZJTFRFUl9OT05FIj5GVF9MQ0RfRklMVEVSX05PTkU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5EbyBub3QgcGVyZm9ybSBmaWx0ZXJpbmcuIFdoZW4gdXNlZCB3aXRoIHN1YnBpeGVsIHJlbmRlcmluZywgdGhpcyByZXN1bHRzIGluIHNvbWV0aW1lcyBzZXZlcmUgY29sb3IgZnJpbmdlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9MQ0RfRklMVEVSX0RFRkFVTFQiPkZUX0xDRF9GSUxURVJfREVGQVVMVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBkZWZhdWx0IGZpbHRlciByZWR1Y2VzIGNvbG9yIGZyaW5nZXMgY29uc2lkZXJhYmx5LCBhdCB0aGUgY29zdCBvZiBhIHNsaWdodCBibHVycmluZXNzIGluIHRoZSBvdXRwdXQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTENEX0ZJTFRFUl9MSUdIVCI+RlRfTENEX0ZJTFRFUl9MSUdIVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBsaWdodCBmaWx0ZXIgaXMgYSB2YXJpYW50IHRoYXQgcHJvZHVjZXMgbGVzcyBibHVycmluZXNzIGF0IHRoZSBjb3N0IG9mIHNsaWdodGx5IG1vcmUgY29sb3IgZnJpbmdlcyB0aGFuIHRoZSBkZWZhdWx0IG9uZS4gSXQgbWlnaHQgYmUgYmV0dGVyLCBkZXBlbmRpbmcgb24gdGFzdGUsIHlvdXIgbW9uaXRvciwgb3IgeW91ciBwZXJzb25hbCB2aXNpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfTENEX0ZJTFRFUl9MRUdBQ1kiPkZUX0xDRF9GSUxURVJfTEVHQUNZPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmaWx0ZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGxpYlhmdCBjb2xvciBmaWx0ZXIuIEl0IHByb3ZpZGVzIGhpZ2ggY29udHJhc3Qgb3V0cHV0IGJ1dCBjYW4gZXhoaWJpdCByZWFsbHkgYmFkIGNvbG9yIGZyaW5nZXMgaWYgZ2x5cGhzIGFyZSBub3QgZXh0cmVtZWx5IHdlbGwgaGludGVkIHRvIHRoZSBwaXhlbCBncmlkLiBJbiBvdGhlciB3b3JkcywgaXQgb25seSB3b3JrcyB3ZWxsIGlmIHRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciBpcyBlbmFibGVkIDxiPmFuZDwvYj4gaGlnaC1xdWFsaXR5IGhpbnRlZCBmb250cyBhcmUgdXNlZC48L3A+Cis8cD5UaGlzIGZpbHRlciBpcyBvbmx5IHByb3ZpZGVkIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLCBhbmQgbWlnaHQgYmUgZGlzYWJsZWQgb3Igc3RheSB1bnN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuMDwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIiPkZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTENEX0ZJTFRFUl9IIChmdGxjZGZpbC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xjZEZpbHRlciI+RlRfTGNkRmlsdGVyPC9hPiAgZmlsdGVyICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFwcGx5IGNvbG9yIGZpbHRlcmluZyB0byBMQ0QgZGVjaW1hdGVkIGJpdG1hcHMsIGxpa2UgdGhlIG9uZXMgdXNlZCB3aGVuIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX0dseXBoIj5GVF9SZW5kZXJfR2x5cGg8L2E+IHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRDwvYT4gb3IgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUmVuZGVyX01vZGUiPkZUX1JFTkRFUl9NT0RFX0xDRF9WPC9hPi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IGluc3RhbmNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZpbHRlciI+ZmlsdGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZpbHRlciB0eXBlLjwvcD4KKzxwPllvdSBjYW4gdXNlIDxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTGNkRmlsdGVyIj5GVF9MQ0RfRklMVEVSX05PTkU8L2E+IGhlcmUgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIG9yIDxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwjRlRfTGNkRmlsdGVyIj5GVF9MQ0RfRklMVEVSX0RFRkFVTFQ8L2E+IHRvIHVzZSBhIGRlZmF1bHQgZmlsdGVyIHRoYXQgc2hvdWxkIHdvcmsgd2VsbCBvbiBtb3N0IExDRCBzY3JlZW5zLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZlYXR1cmUgaXMgYWx3YXlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIENsaWVudHMgbXVzdCBtYWtlIGFuIGV4cGxpY2l0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aXRoIGEgJmxzcXVvO2ZpbHRlciZyc3F1bzsgdmFsdWUgb3RoZXIgdGhhbiA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xjZEZpbHRlciI+RlRfTENEX0ZJTFRFUl9OT05FPC9hPiBpbiBvcmRlciB0byBlbmFibGUgaXQuPC9wPgorPHA+RHVlIHRvIDxiPlBBVEVOVFM8L2I+IGNvdmVyaW5nIHN1YnBpeGVsIHJlbmRlcmluZywgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvIGFueXRoaW5nIGV4Y2VwdCByZXR1cm5pbmcgJmxzcXVvO0ZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUmcnNxdW87IGlmIHRoZSBjb25maWd1cmF0aW9uIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HIGlzIG5vdCBkZWZpbmVkIGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHdoaWNoIHNob3VsZCBjb3JyZXNwb25kIHRvIGFsbCBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS48L3A+Cis8cD5UaGUgZmlsdGVyIGFmZmVjdHMgZ2x5cGggYml0bWFwcyByZW5kZXJlZCB0aHJvdWdoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9HbHlwaCI+RlRfUmVuZGVyX0dseXBoPC9hPiwgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfR2V0X0JpdG1hcCI+RlRfT3V0bGluZV9HZXRfQml0bWFwPC9hPiwgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4sIGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0NoYXIiPkZUX0xvYWRfQ2hhcjwvYT4uPC9wPgorPHA+SXQgZG9lcyA8aT5ub3Q8L2k+IGFmZmVjdCB0aGUgb3V0cHV0IG9mIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX1JlbmRlciI+RlRfT3V0bGluZV9SZW5kZXI8L2E+IGFuZCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9HZXRfQml0bWFwIj5GVF9PdXRsaW5lX0dldF9CaXRtYXA8L2E+LjwvcD4KKzxwPklmIHRoaXMgZmVhdHVyZSBpcyBhY3RpdmF0ZWQsIHRoZSBkaW1lbnNpb25zIG9mIExDRCBnbHlwaCBiaXRtYXBzIGFyZSBlaXRoZXIgbGFyZ2VyIG9yIHRhbGxlciB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIG91dGxpbmUgd2l0aCByZWdhcmRzIHRvIHRoZSBwaXhlbCBncmlkLiBGb3IgZXhhbXBsZSwgZm9yIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1JlbmRlcl9Nb2RlIj5GVF9SRU5ERVJfTU9ERV9MQ0Q8L2E+LCB0aGUgZmlsdGVyIGFkZHMgdXAgdG8gMyZuYnNwO3BpeGVscyB0byB0aGUgbGVmdCwgYW5kIHVwIHRvIDMmbmJzcDtwaXhlbHMgdG8gdGhlIHJpZ2h0LjwvcD4KKzxwPlRoZSBiaXRtYXAgb2Zmc2V0IHZhbHVlcyBhcmUgYWRqdXN0ZWQgY29ycmVjdGx5LCBzbyBjbGllbnRzIHNob3VsZG4ndCBuZWVkIHRvIG1vZGlmeSB0aGVpciBsYXlvdXQgYW5kIGdseXBoIHBvc2l0aW9uaW5nIGNvZGUgd2hlbiBlbmFibGluZyB0aGUgZmlsdGVyLjwvcD4KKworPGg0PnNpbmNlPC9oND4KKzxwPjIuMy4wPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMiPkZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0czwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0xDRF9GSUxURVJfSCAoZnRsY2RmaWwuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+ICAqd2VpZ2h0cyApOworPC9wcmU+CisKKzxwPlVzZSB0aGlzIGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRoZSBmaWx0ZXIgd2VpZ2h0cyBzZWxlY3RlZCBieSA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYT4uIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIHVzZXMgdGhlIHF1aW50dXBsZSAoMHgwMCwgMHg1NSwgMHg1NiwgMHg1NSwgMHgwMCkgZm9yIEZUX0xDRF9GSUxURVJfTElHSFQsIGFuZCAoMHgxMCwgMHg0MCwgMHg3MCwgMHg0MCwgMHgxMCkgZm9yIEZUX0xDRF9GSUxURVJfREVGQVVMVCBhbmQgRlRfTENEX0ZJTFRFUl9MRUdBQ1kuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ3ZWlnaHRzIj53ZWlnaHRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGFuIGFycmF5OyB0aGUgZnVuY3Rpb24gY29waWVzIHRoZSBmaXJzdCBmaXZlIGJ5dGVzIGFuZCB1c2VzIHRoZW0gdG8gc3BlY2lmeSB0aGUgZmlsdGVyIHdlaWdodHMuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkR1ZSB0byA8Yj5QQVRFTlRTPC9iPiBjb3ZlcmluZyBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBkbyBhbnl0aGluZyBleGNlcHQgcmV0dXJuaW5nICZsc3F1bztGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJnJzcXVvOyBpZiB0aGUgY29uZmlndXJhdGlvbiBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpcyBub3QgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwgZGVmYXVsdCBidWlsZHMgb2YgRnJlZVR5cGUuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciA8YSBocmVmPSJmdDItbGNkX2ZpbHRlcmluZy5odG1sI0ZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIj5GVF9MaWJyYXJ5X1NldExjZEZpbHRlcjwvYT4gdG8gaGF2ZSBhbnkgZWZmZWN0LjwvcD4KKworPGg0PnNpbmNlPC9oND4KKzxwPjIuNC4wPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzQxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sCkBAIC0wLDAgKzEsNDQ2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+TGlzdCBQcm9jZXNzaW5nPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0xpc3QiPkZUX0xpc3Q8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xpc3RfQWRkIj5GVF9MaXN0X0FkZDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTGlzdF9JdGVyYXRlIj5GVF9MaXN0X0l0ZXJhdGU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTGlzdE5vZGUiPkZUX0xpc3ROb2RlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MaXN0X0luc2VydCI+RlRfTGlzdF9JbnNlcnQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xpc3RfSXRlcmF0b3IiPkZUX0xpc3RfSXRlcmF0b3I8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTGlzdFJlYyI+RlRfTGlzdFJlYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTGlzdF9GaW5kIj5GVF9MaXN0X0ZpbmQ8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xpc3RfRmluYWxpemUiPkZUX0xpc3RfRmluYWxpemU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTGlzdE5vZGVSZWMiPkZUX0xpc3ROb2RlUmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9MaXN0X1JlbW92ZSI+RlRfTGlzdF9SZW1vdmU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xpc3RfRGVzdHJ1Y3RvciI+RlRfTGlzdF9EZXN0cnVjdG9yPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0xpc3RfVXAiPkZUX0xpc3RfVXA8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGxpc3QgcHJvY2Vzc2luZyB1c2luZyBkb3VibHktbGlua2VkIG5vZGVzLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpc3QiPkZUX0xpc3Q8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFU19IIChmdHR5cGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9MaXN0UmVjXyogIDxiPkZUX0xpc3Q8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGEgbGlzdCByZWNvcmQgKHNlZSA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdFJlYyI+RlRfTGlzdFJlYzwvYT4pLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTGlzdE5vZGUiPkZUX0xpc3ROb2RlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRVNfSCAoZnR0eXBlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfTGlzdE5vZGVSZWNfKiAgPGI+RlRfTGlzdE5vZGU8L2I+OworPC9wcmU+CisKKzxwPk1hbnkgZWxlbWVudHMgYW5kIG9iamVjdHMgaW4gRnJlZVR5cGUgYXJlIGxpc3RlZCB0aHJvdWdoIGFuIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Ij5GVF9MaXN0PC9hPiByZWNvcmQgKHNlZSA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdFJlYyI+RlRfTGlzdFJlYzwvYT4pLiBBcyBpdHMgbmFtZSBzdWdnZXN0cywgYW4gRlRfTGlzdE5vZGUgaXMgYSBoYW5kbGUgdG8gYSBzaW5nbGUgbGlzdCBlbGVtZW50LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTGlzdFJlYyI+RlRfTGlzdFJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9MaXN0UmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gIGhlYWQ7CisgICAgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gIHRhaWw7CisKKyAgfSA8Yj5GVF9MaXN0UmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgYSBzaW1wbGUgZG91Ymx5LWxpbmtlZCBsaXN0LiBUaGVzZSBhcmUgdXNlZCBpbiBtYW55IHBhcnRzIG9mIEZyZWVUeXBlLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJoZWFkIj5oZWFkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGhlYWQgKGZpcnN0IGVsZW1lbnQpIG9mIGRvdWJseS1saW5rZWQgbGlzdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0YWlsIj50YWlsPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhaWwgKGxhc3QgZWxlbWVudCkgb2YgZG91Ymx5LWxpbmtlZCBsaXN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpc3ROb2RlUmVjIj5GVF9MaXN0Tm9kZVJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEVTX0ggKGZ0dHlwZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9MaXN0Tm9kZVJlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Tm9kZSI+RlRfTGlzdE5vZGU8L2E+ICBwcmV2OworICAgIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Tm9kZSI+RlRfTGlzdE5vZGU8L2E+ICBuZXh0OworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgIGRhdGE7CisKKyAgfSA8Yj5GVF9MaXN0Tm9kZVJlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGEgc2luZ2xlIGxpc3QgZWxlbWVudC48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icHJldiI+cHJldjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBwcmV2aW91cyBlbGVtZW50IGluIHRoZSBsaXN0LiBOVUxMIGlmIGZpcnN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im5leHQiPm5leHQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbmV4dCBlbGVtZW50IGluIHRoZSBsaXN0LiBOVUxMIGlmIGxhc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGF0YSI+ZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdHlwZWxlc3MgcG9pbnRlciB0byB0aGUgbGlzdGVkIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaXN0X0FkZCI+RlRfTGlzdF9BZGQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9MSVNUX0ggKGZ0bGlzdC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX0xpc3RfQWRkPC9iPiggPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3QiPkZUX0xpc3Q8L2E+ICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Tm9kZSI+RlRfTGlzdE5vZGU8L2E+ICBub2RlICk7Cis8L3ByZT4KKworPHA+QXBwZW5kIGFuIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiBhIGxpc3QuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlzdCI+bGlzdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibm9kZSI+bm9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBub2RlIHRvIGFwcGVuZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaXN0X0luc2VydCI+RlRfTGlzdF9JbnNlcnQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9MSVNUX0ggKGZ0bGlzdC5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX0xpc3RfSW5zZXJ0PC9iPiggPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3QiPkZUX0xpc3Q8L2E+ICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Tm9kZSI+RlRfTGlzdE5vZGU8L2E+ICBub2RlICk7Cis8L3ByZT4KKworPHA+SW5zZXJ0IGFuIGVsZW1lbnQgYXQgdGhlIGhlYWQgb2YgYSBsaXN0LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imxpc3QiPmxpc3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gcGFyZW50IGxpc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibm9kZSI+bm9kZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBub2RlIHRvIGluc2VydC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaXN0X0ZpbmQiPkZUX0xpc3RfRmluZDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0xJU1RfSCAoZnRsaXN0LmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gKQorICA8Yj5GVF9MaXN0X0ZpbmQ8L2I+KCA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdCI+RlRfTGlzdDwvYT4gIGxpc3QsCisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICBkYXRhICk7Cis8L3ByZT4KKworPHA+RmluZCB0aGUgbGlzdCBub2RlIGZvciBhIGdpdmVuIGxpc3RlZCBvYmplY3QuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlzdCI+bGlzdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGF0YSI+ZGF0YTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZGRyZXNzIG9mIHRoZSBsaXN0ZWQgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+TGlzdCBub2RlLiBOVUxMIGlmIGl0IHdhc24ndCBmb3VuZC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpc3RfUmVtb3ZlIj5GVF9MaXN0X1JlbW92ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0xJU1RfSCAoZnRsaXN0LmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfTGlzdF9SZW1vdmU8L2I+KCA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdCI+RlRfTGlzdDwvYT4gICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gIG5vZGUgKTsKKzwvcHJlPgorCis8cD5SZW1vdmUgYSBub2RlIGZyb20gYSBsaXN0LiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgd2hldGhlciB0aGUgbm9kZSBpcyBpbiB0aGUgbGlzdCE8L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJub2RlIj5ub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5vZGUgdG8gcmVtb3ZlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaXN0Ij5saXN0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbGlzdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaXN0X1VwIj5GVF9MaXN0X1VwPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTElTVF9IIChmdGxpc3QuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9MaXN0X1VwPC9iPiggPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3QiPkZUX0xpc3Q8L2E+ICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gIG5vZGUgKTsKKzwvcHJlPgorCis8cD5Nb3ZlIGEgbm9kZSB0byB0aGUgaGVhZC90b3Agb2YgYSBsaXN0LiBVc2VkIHRvIG1haW50YWluIExSVSBsaXN0cy48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaXN0Ij5saXN0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbGlzdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJub2RlIj5ub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5vZGUgdG8gbW92ZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9MaXN0X0l0ZXJhdGUiPkZUX0xpc3RfSXRlcmF0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0xJU1RfSCAoZnRsaXN0LmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0xpc3RfSXRlcmF0ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Ij5GVF9MaXN0PC9hPiAgICAgICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdF9JdGVyYXRvciI+RlRfTGlzdF9JdGVyYXRvcjwvYT4gIGl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICAgdXNlciApOworPC9wcmU+CisKKzxwPlBhcnNlIGEgbGlzdCBhbmQgY2FsbHMgYSBnaXZlbiBpdGVyYXRvciBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQuIE5vdGUgdGhhdCBwYXJzaW5nIGlzIHN0b3BwZWQgYXMgc29vbiBhcyBvbmUgb2YgdGhlIGl0ZXJhdG9yIGNhbGxzIHJldHVybnMgYSBub24temVybyB2YWx1ZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaXN0Ij5saXN0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaXRlcmF0b3IiPml0ZXJhdG9yPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gaXRlcmF0b3IgZnVuY3Rpb24sIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIGxpc3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idXNlciI+dXNlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdXNlci1zdXBwbGllZCBmaWVsZCB0aGF0IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBpdGVyYXRvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSByZXN1bHQgKGEgRnJlZVR5cGUgZXJyb3IgY29kZSkgb2YgdGhlIGxhc3QgaXRlcmF0b3IgY2FsbC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpc3RfSXRlcmF0b3IiPkZUX0xpc3RfSXRlcmF0b3I8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9MSVNUX0ggKGZ0bGlzdC5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPgorICAoKjxiPkZUX0xpc3RfSXRlcmF0b3I8L2I+KSggPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3ROb2RlIj5GVF9MaXN0Tm9kZTwvYT4gIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgIHVzZXIgKTsKKzwvcHJlPgorCis8cD5BbiBGVF9MaXN0IGl0ZXJhdG9yIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBhIGxpc3QgcGFyc2UgYnkgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfSXRlcmF0ZSI+RlRfTGlzdF9JdGVyYXRlPC9hPi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJub2RlIj5ub2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGN1cnJlbnQgaXRlcmF0aW9uIGxpc3Qgbm9kZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1c2VyIj51c2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0eXBlbGVzcyBwb2ludGVyIHBhc3NlZCB0byA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdF9JdGVyYXRlIj5GVF9MaXN0X0l0ZXJhdGU8L2E+LiBDYW4gYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTGlzdF9GaW5hbGl6ZSI+RlRfTGlzdF9GaW5hbGl6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0xJU1RfSCAoZnRsaXN0LmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfTGlzdF9GaW5hbGl6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0Ij5GVF9MaXN0PC9hPiAgICAgICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdF9EZXN0cnVjdG9yIj5GVF9MaXN0X0Rlc3RydWN0b3I8L2E+ICBkZXN0cm95LAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgICAgdXNlciApOworPC9wcmU+CisKKzxwPkRlc3Ryb3kgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFzIHdlbGwgYXMgdGhlIGxpc3QgaXRzZWxmLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imxpc3QiPmxpc3Q8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgbGlzdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJkZXN0cm95Ij5kZXN0cm95PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBsaXN0IGRlc3RydWN0b3IgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0LiBTZXQgdGhpcyB0byBOVUxMIGlmIG5vdCBuZWVkZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWVtb3J5Ij5tZW1vcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY3VycmVudCBtZW1vcnkgb2JqZWN0IHRoYXQgaGFuZGxlcyBkZWFsbG9jYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idXNlciI+dXNlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdXNlci1zdXBwbGllZCBmaWVsZCB0aGF0IGlzIHBhc3NlZCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0byB0aGUgZGVzdHJ1Y3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCBhbGwgbm9kZXMgYWRkZWQgYnkgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfQWRkIj5GVF9MaXN0X0FkZDwvYT4gb3IgPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3RfSW5zZXJ0Ij5GVF9MaXN0X0luc2VydDwvYT4gaGF2ZSBiZWVuIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0xpc3RfRGVzdHJ1Y3RvciI+RlRfTGlzdF9EZXN0cnVjdG9yPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTElTVF9IIChmdGxpc3QuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX0xpc3RfRGVzdHJ1Y3RvcjwvYj4pKCA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICB1c2VyICk7Cis8L3ByZT4KKworPHA+QW4gPGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sI0ZUX0xpc3QiPkZUX0xpc3Q8L2E+IGl0ZXJhdG9yIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBhIGxpc3QgZmluYWxpemF0aW9uIGJ5IDxhIGhyZWY9ImZ0Mi1saXN0X3Byb2Nlc3NpbmcuaHRtbCNGVF9MaXN0X0ZpbmFsaXplIj5GVF9MaXN0X0ZpbmFsaXplPC9hPiB0byBkZXN0cm95IGFsbCBlbGVtZW50cyBpbiBhIGdpdmVuIGxpc3QuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3lzdGVtIj5zeXN0ZW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY3VycmVudCBzeXN0ZW0gb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRhdGEiPmRhdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgY3VycmVudCBvYmplY3QgdG8gZGVzdHJveS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1c2VyIj51c2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0eXBlbGVzcyBwb2ludGVyIHBhc3NlZCB0byA8YSBocmVmPSJmdDItbGlzdF9wcm9jZXNzaW5nLmh0bWwjRlRfTGlzdF9JdGVyYXRlIj5GVF9MaXN0X0l0ZXJhdGU8L2E+LiBJdCBjYW4gYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLWx6dy5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1sencuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODVjMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1sencuaHRtbApAQCAtMCwwICsxLDE0OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPkxaVyBTdHJlYW1zPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1N0cmVhbV9PcGVuTFpXIj5GVF9TdHJlYW1fT3BlbkxaVzwvYT48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgTFpXLXNwZWNpZmljIGZ1bmN0aW9ucy48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TdHJlYW1fT3BlbkxaVyI+RlRfU3RyZWFtX09wZW5MWlc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9MWldfSCAoZnRsencuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU3RyZWFtX09wZW5MWlc8L2I+KCA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1N0cmVhbSI+RlRfU3RyZWFtPC9hPiAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT4gIHNvdXJjZSApOworPC9wcmU+CisKKzxwPk9wZW4gYSBuZXcgc3RyZWFtIHRvIHBhcnNlIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgY29tcHJlc3NlZCAmbHNxdW87Ki5wY2YuWiZyc3F1bzsgZm9udHMgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJlYW0iPnN0cmVhbTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB0YXJnZXQgZW1iZWRkaW5nIHN0cmVhbS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzb3VyY2UiPnNvdXJjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzb3VyY2Ugc3RyZWFtLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgc291cmNlIHN0cmVhbSBtdXN0IGJlIG9wZW5lZCA8aT5iZWZvcmU8L2k+IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi48L3A+Cis8cD5DYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiAmbHNxdW87RlRfU3RyZWFtX0Nsb3NlJnJzcXVvOyBvbiB0aGUgbmV3IHN0cmVhbSB3aWxsIDxiPm5vdDwvYj4gY2FsbCAmbHNxdW87RlRfU3RyZWFtX0Nsb3NlJnJzcXVvOyBvbiB0aGUgc291cmNlIHN0cmVhbS4gTm9uZSBvZiB0aGUgc3RyZWFtIG9iamVjdHMgd2lsbCBiZSByZWxlYXNlZCB0byB0aGUgaGVhcC48L3A+Cis8cD5UaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbiBwcm9jZXNzIGVhY2ggdGltZSBzZWVraW5nIGJhY2t3YXJkcyBpcyBuZWVkZWQgd2l0aGluIHRoZSBzdHJlYW08L3A+Cis8cD5JbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgTFpXIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTmV3X0ZhY2UiPkZUX05ld19GYWNlPC9hPiBvciA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9PcGVuX0ZhY2UiPkZUX09wZW5fRmFjZTwvYT4uIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgTFpXIHN0cmVhbSBmcm9tIGl0IGFuZCByZS1vcGVuIHRoZSBmYWNlIHdpdGggaXQuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuICZsc3F1bztGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJnJzcXVvOyBpZiB5b3VyIGJ1aWxkIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCBMWlcgc3VwcG9ydC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1tYWNfc3BlY2lmaWMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbWFjX3NwZWNpZmljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4MDZmNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbWFjX3NwZWNpZmljLmh0bWwKQEAgLTAsMCArMSwzNzQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5NYWMgU3BlY2lmaWMgSW50ZXJmYWNlPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX05ld19GYWNlX0Zyb21fRk9ORCI+RlRfTmV3X0ZhY2VfRnJvbV9GT05EPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZSI+RlRfR2V0RmlsZVBhdGhfRnJvbV9NYWNfQVRTX05hbWU8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lIj5GVF9HZXRGaWxlX0Zyb21fTWFjX05hbWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX05ld19GYWNlX0Zyb21fRlNTcGVjIj5GVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lIj5GVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmIj5GVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgRnJlZVR5cGUgaXMgY29tcGlsZWQgb24gYSBNYWNpbnRvc2guPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTmV3X0ZhY2VfRnJvbV9GT05EIj5GVF9OZXdfRmFjZV9Gcm9tX0ZPTkQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NQUNfSCAoZnRtYWMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTmV3X0ZhY2VfRnJvbV9GT05EPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlICAgICAgZm9uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICAqYWZhY2UgKQorICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKKzwvcHJlPgorCis8cD5DcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIEZPTkQgcmVzb3VyY2UuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmb25kIj5mb25kPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBGT05EIHJlc291cmNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Pbmx5IHN1cHBvcnRlZCBmb3IgdGhlIC0xICZsc3F1bztzYW5pdHkgY2hlY2smcnNxdW87IHNwZWNpYWwgY2FzZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFmYWNlIj5hZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZXM8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gb2JqZWN0cyBmcm9tIGZvbnRzIHRoYXQgYXJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtIGFzIGZvbGxvd3MuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIGZvbmQgPSBHZXRSZXNvdXJjZSggJ0ZPTkQnLCBmb250TmFtZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9GT05EKCBsaWJyYXJ5LCBmb25kLCAwLCAmYW1wO2ZhY2UgKTsgICAgICAgIAorPC9wcmU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSI+RlRfR2V0RmlsZV9Gcm9tX01hY19OYW1lPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTUFDX0ggKGZ0bWFjLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZTwvYj4oIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+KiAgICAgZmFjZV9pbmRleCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFOworPC9wcmU+CisKKzxwPlJldHVybiBhbiBGU1NwZWMgZm9yIHRoZSBkaXNrIGZpbGUgY29udGFpbmluZyB0aGUgbmFtZWQgZm9udC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmb250TmFtZSI+Zm9udE5hbWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5NYWMgT1MgbmFtZSBvZiB0aGUgZm9udCAoZS5nLiwgVGltZXMgTmV3IFJvbWFuIEJvbGQpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icGF0aFNwZWMiPnBhdGhTcGVjPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RlNTcGVjIHRvIHRoZSBmaWxlLiBGb3IgcGFzc2luZyB0byA8YSBocmVmPSJmdDItbWFjX3NwZWNpZmljLmh0bWwjRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMiPkZUX05ld19GYWNlX0Zyb21fRlNTcGVjPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlX2luZGV4Ij5mYWNlX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kZXggb2YgdGhlIGZhY2UuIEZvciBwYXNzaW5nIHRvIDxhIGhyZWY9ImZ0Mi1tYWNfc3BlY2lmaWMuaHRtbCNGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyI+RlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWM8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lIj5GVF9HZXRGaWxlX0Zyb21fTWFjX0FUU19OYW1lPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTUFDX0ggKGZ0bWFjLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWU8L2I+KCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+KiAgICAgZmFjZV9pbmRleCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKKzwvcHJlPgorCis8cD5SZXR1cm4gYW4gRlNTcGVjIGZvciB0aGUgZGlzayBmaWxlIGNvbnRhaW5pbmcgdGhlIG5hbWVkIGZvbnQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZm9udE5hbWUiPmZvbnROYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TWFjIE9TIG5hbWUgb2YgdGhlIGZvbnQgaW4gQVRTIGZyYW1ld29yay48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhdGhTcGVjIj5wYXRoU3BlYzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkZTU3BlYyB0byB0aGUgZmlsZS4gRm9yIHBhc3NpbmcgdG8gPGEgaHJlZj0iZnQyLW1hY19zcGVjaWZpYy5odG1sI0ZUX05ld19GYWNlX0Zyb21fRlNTcGVjIj5GVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYzwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9pbmRleCI+ZmFjZV9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkluZGV4IG9mIHRoZSBmYWNlLiBGb3IgcGFzc2luZyB0byA8YSBocmVmPSJmdDItbWFjX3NwZWNpZmljLmh0bWwjRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMiPkZUX05ld19GYWNlX0Zyb21fRlNTcGVjPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0RmlsZVBhdGhfRnJvbV9NYWNfQVRTX05hbWUiPkZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTUFDX0ggKGZ0bWFjLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lPC9iPiggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQ4KiAgICAgICBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDMyICAgICAgIG1heFBhdGhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4qICAgICBmYWNlX2luZGV4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKKzwvcHJlPgorCis8cD5SZXR1cm4gYSBwYXRobmFtZSBvZiB0aGUgZGlzayBmaWxlIGFuZCBmYWNlIGluZGV4IGZvciBnaXZlbiBmb250IG5hbWUgdGhhdCBpcyBoYW5kbGVkIGJ5IEFUUyBmcmFtZXdvcmsuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZm9udE5hbWUiPmZvbnROYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TWFjIE9TIG5hbWUgb2YgdGhlIGZvbnQgaW4gQVRTIGZyYW1ld29yay48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhdGgiPnBhdGg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5CdWZmZXIgdG8gc3RvcmUgcGF0aG5hbWUgb2YgdGhlIGZpbGUuIEZvciBwYXNzaW5nIHRvIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX05ld19GYWNlIj5GVF9OZXdfRmFjZTwvYT4uIFRoZSBjbGllbnQgbXVzdCBhbGxvY2F0ZSB0aGlzIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heFBhdGhTaXplIj5tYXhQYXRoU2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkxlbmd0aHMgb2YgdGhlIGJ1ZmZlciAmbHNxdW87cGF0aCZyc3F1bzsgdGhhdCBjbGllbnQgYWxsb2NhdGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2VfaW5kZXgiPmZhY2VfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5JbmRleCBvZiB0aGUgZmFjZS4gRm9yIHBhc3NpbmcgdG8gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTmV3X0ZhY2UiPkZUX05ld19GYWNlPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMiPkZUX05ld19GYWNlX0Zyb21fRlNTcGVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTUFDX0ggKGZ0bWFjLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX05ld19GYWNlX0Zyb21fRlNTcGVjPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IEZTU3BlYyAgKnNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgICphZmFjZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7Cis8L3ByZT4KKworPHA+Q3JlYXRlIGEgbmV3IGZhY2Ugb2JqZWN0IGZyb20gYSBnaXZlbiByZXNvdXJjZSBhbmQgdHlwZWZhY2UgaW5kZXggdXNpbmcgYW4gRlNTcGVjIHRvIHRoZSBmb250IGZpbGUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzcGVjIj5zcGVjPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RlNTcGVjIHRvIHRoZSBmb250IGZpbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZV9pbmRleCI+ZmFjZV9pbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIHJlc291cmNlLiBUaGUgZmlyc3QgZmFjZSBoYXMgaW5kZXgmbmJzcDswLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWZhY2UiPmFmYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPjxhIGhyZWY9ImZ0Mi1tYWNfc3BlY2lmaWMuaHRtbCNGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyI+RlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWM8L2E+IGlzIGlkZW50aWNhbCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2E+IGV4Y2VwdCBpdCBhY2NlcHRzIGFuIEZTU3BlYyBpbnN0ZWFkIG9mIGEgcGF0aC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX05ld19GYWNlX0Zyb21fRlNSZWYiPkZUX05ld19GYWNlX0Zyb21fRlNSZWY8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NQUNfSCAoZnRtYWMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTmV3X0ZhY2VfRnJvbV9GU1JlZjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gRlNSZWYgICpyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgKmFmYWNlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFOworPC9wcmU+CisKKzxwPkNyZWF0ZSBhIG5ldyBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcmVzb3VyY2UgYW5kIHR5cGVmYWNlIGluZGV4IHVzaW5nIGFuIEZTUmVmIHRvIHRoZSBmb250IGZpbGUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzcGVjIj5zcGVjPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RlNSZWYgdG8gdGhlIGZvbnQgZmlsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlX2luZGV4Ij5mYWNlX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGluZGV4IG9mIHRoZSBmYWNlIHdpdGhpbiB0aGUgcmVzb3VyY2UuIFRoZSBmaXJzdCBmYWNlIGhhcyBpbmRleCZuYnNwOzAuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhZmFjZSI+YWZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+PGEgaHJlZj0iZnQyLW1hY19zcGVjaWZpYy5odG1sI0ZUX05ld19GYWNlX0Zyb21fRlNSZWYiPkZUX05ld19GYWNlX0Zyb21fRlNSZWY8L2E+IGlzIGlkZW50aWNhbCB0byA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9OZXdfRmFjZSI+RlRfTmV3X0ZhY2U8L2E+IGV4Y2VwdCBpdCBhY2NlcHRzIGFuIEZTUmVmIGluc3RlYWQgb2YgYSBwYXRoLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiYWJkOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbApAQCAtMCwwICsxLDc3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPk1vZHVsZSBNYW5hZ2VtZW50PC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX01vZHVsZSI+RlRfTW9kdWxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIj5GVF9BZGRfRGVmYXVsdF9Nb2R1bGVzPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9SZW5kZXJlciI+RlRfUmVuZGVyZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTW9kdWxlX0NvbnN0cnVjdG9yIj5GVF9Nb2R1bGVfQ29uc3RydWN0b3I8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1JlbmRlcmVyX0NsYXNzIj5GVF9SZW5kZXJlcl9DbGFzczwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9Nb2R1bGVfRGVzdHJ1Y3RvciI+RlRfTW9kdWxlX0Rlc3RydWN0b3I8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1Byb3BlcnR5X1NldCI+RlRfUHJvcGVydHlfU2V0PC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX01vZHVsZV9SZXF1ZXN0ZXIiPkZUX01vZHVsZV9SZXF1ZXN0ZXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1Byb3BlcnR5X0dldCI+RlRfUHJvcGVydHlfR2V0PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfUmVuZGVyZXIiPkZUX0dldF9SZW5kZXJlcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9Nb2R1bGVfQ2xhc3MiPkZUX01vZHVsZV9DbGFzczwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfU2V0X1JlbmRlcmVyIj5GVF9TZXRfUmVuZGVyZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfTmV3X0xpYnJhcnkiPkZUX05ld19MaWJyYXJ5PC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0FkZF9Nb2R1bGUiPkZUX0FkZF9Nb2R1bGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0RvbmVfTGlicmFyeSI+RlRfRG9uZV9MaWJyYXJ5PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TZXRfRGVidWdfSG9vayI+RlRfU2V0X0RlYnVnX0hvb2s8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0X01vZHVsZSI+RlRfR2V0X01vZHVsZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmVmZXJlbmNlX0xpYnJhcnkiPkZUX1JlZmVyZW5jZV9MaWJyYXJ5PC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1JlbW92ZV9Nb2R1bGUiPkZUX1JlbW92ZV9Nb2R1bGU8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0RyaXZlciI+RlRfRHJpdmVyPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhlIGRlZmluaXRpb25zIGJlbG93IGFyZSB1c2VkIHRvIG1hbmFnZSBtb2R1bGVzIHdpdGhpbiBGcmVlVHlwZS4gTW9kdWxlcyBjYW4gYmUgYWRkZWQsIHVwZ3JhZGVkLCBhbmQgcmVtb3ZlZCBhdCBydW50aW1lLiBBZGRpdGlvbmFsbHksIHNvbWUgbW9kdWxlIHByb3BlcnRpZXMgY2FuIGJlIGNvbnRyb2xsZWQgYWxzby48L3A+Cis8cD5IZXJlIGlzIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlICZsc3F1bzttb2R1bGVfbmFtZSZyc3F1bzsgZmllbGQgaW4gdGhlIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZV9DbGFzcyI+RlRfTW9kdWxlX0NsYXNzPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIGF1dG9maXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGJkZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGNmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIGd4dmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIG90dmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHBjZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHBmciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHBzYXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHBzaGludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHBzbmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHJhc3RlcjEsIHJhc3RlcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHNmbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHNtb290aCwgc21vb3RoLWxjZCwgc21vb3RoLWxjZHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHRydWV0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHR5cGUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHR5cGU0MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHQxY2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHdpbmZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis8L3ByZT4KKzxwPk5vdGUgdGhhdCB0aGUgRnJlZVR5cGUgQ2FjaGUgc3ViLXN5c3RlbSBpcyBub3QgYSBGcmVlVHlwZSBtb2R1bGUuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTW9kdWxlIj5GVF9Nb2R1bGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfTW9kdWxlUmVjXyogIDxiPkZUX01vZHVsZTwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSBtb2R1bGUgb2JqZWN0LiBFYWNoIG1vZHVsZSBjYW4gYmUgYSBmb250IGRyaXZlciwgYSByZW5kZXJlciwgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHByb3ZpZGVzIHNlcnZpY2VzIHRvIHRoZSBmb3JtZXJzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTW9kdWxlX0NvbnN0cnVjdG9yIj5GVF9Nb2R1bGVfQ29uc3RydWN0b3I8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4KKyAgKCo8Yj5GVF9Nb2R1bGVfQ29uc3RydWN0b3I8L2I+KSggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTW9kdWxlIj5GVF9Nb2R1bGU8L2E+ICBtb2R1bGUgKTsKKzwvcHJlPgorCis8cD5BIGZ1bmN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSAobm90IGNyZWF0ZSkgYSBuZXcgbW9kdWxlIG9iamVjdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2R1bGUiPm1vZHVsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtb2R1bGUgdG8gaW5pdGlhbGl6ZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Nb2R1bGVfRGVzdHJ1Y3RvciI+RlRfTW9kdWxlX0Rlc3RydWN0b3I8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX01vZHVsZV9EZXN0cnVjdG9yPC9iPikoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZSI+RlRfTW9kdWxlPC9hPiAgbW9kdWxlICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGZpbmFsaXplIChub3QgZGVzdHJveSkgYSBnaXZlbiBtb2R1bGUgb2JqZWN0LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZSI+bW9kdWxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1vZHVsZSB0byBmaW5hbGl6ZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Nb2R1bGVfUmVxdWVzdGVyIj5GVF9Nb2R1bGVfUmVxdWVzdGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiBGVF9Nb2R1bGVfSW50ZXJmYWNlCisgICgqPGI+RlRfTW9kdWxlX1JlcXVlc3RlcjwvYj4pKCA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGUiPkZUX01vZHVsZTwvYT4gICAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogIG5hbWUgKTsKKzwvcHJlPgorCis8cD5BIGZ1bmN0aW9uIHVzZWQgdG8gcXVlcnkgYSBnaXZlbiBtb2R1bGUgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZSI+bW9kdWxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1vZHVsZSB0byBiZSBzZWFyY2hlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuYW1lIj5uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSBpbiB0aGUgbW9kdWxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01vZHVsZV9DbGFzcyI+RlRfTW9kdWxlX0NsYXNzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfTW9kdWxlX0NsYXNzXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgICAgICAgIG1vZHVsZV9mbGFnczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgICAgICAgICAgICBtb2R1bGVfc2l6ZTsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogICAgICAgbW9kdWxlX25hbWU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgICAgICAgICAgICAgIG1vZHVsZV92ZXJzaW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgICAgICAgICAgICBtb2R1bGVfcmVxdWlyZXM7CisKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICBtb2R1bGVfaW50ZXJmYWNlOworCisgICAgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTW9kdWxlX0NvbnN0cnVjdG9yIj5GVF9Nb2R1bGVfQ29uc3RydWN0b3I8L2E+ICBtb2R1bGVfaW5pdDsKKyAgICA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGVfRGVzdHJ1Y3RvciI+RlRfTW9kdWxlX0Rlc3RydWN0b3I8L2E+ICAgbW9kdWxlX2RvbmU7CisgICAgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTW9kdWxlX1JlcXVlc3RlciI+RlRfTW9kdWxlX1JlcXVlc3RlcjwvYT4gICAgZ2V0X2ludGVyZmFjZTsKKworICB9IDxiPkZUX01vZHVsZV9DbGFzczwvYj47Cis8L3ByZT4KKworPHA+VGhlIG1vZHVsZSBjbGFzcyBkZXNjcmlwdG9yLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2R1bGVfZmxhZ3MiPm1vZHVsZV9mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkJpdCBmbGFncyBkZXNjcmliaW5nIHRoZSBtb2R1bGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibW9kdWxlX3NpemUiPm1vZHVsZV9zaXplPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNpemUgb2Ygb25lIG1vZHVsZSBvYmplY3QvaW5zdGFuY2UgaW4gYnl0ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibW9kdWxlX25hbWUiPm1vZHVsZV9uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG5hbWUgb2YgdGhlIG1vZHVsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2R1bGVfdmVyc2lvbiI+bW9kdWxlX3ZlcnNpb248L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdmVyc2lvbiwgYXMgYSAxNi4xNiBmaXhlZCBudW1iZXIgKG1ham9yLm1pbm9yKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2R1bGVfcmVxdWlyZXMiPm1vZHVsZV9yZXF1aXJlczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSB2ZXJzaW9uIG9mIEZyZWVUeXBlIHRoaXMgbW9kdWxlIHJlcXVpcmVzLCBhcyBhIDE2LjE2IGZpeGVkIG51bWJlciAobWFqb3IubWlub3IpLiBTdGFydHMgYXQgdmVyc2lvbiAyLjAsIGkuZS4sIDB4MjAwMDAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibW9kdWxlX2luaXQiPm1vZHVsZV9pbml0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGluaXRpYWxpemluZyBmdW5jdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2R1bGVfZG9uZSI+bW9kdWxlX2RvbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZmluYWxpemluZyBmdW5jdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJnZXRfaW50ZXJmYWNlIj5nZXRfaW50ZXJmYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGludGVyZmFjZSByZXF1ZXN0aW5nIGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FkZF9Nb2R1bGUiPkZUX0FkZF9Nb2R1bGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfQWRkX01vZHVsZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZV9DbGFzcyI+RlRfTW9kdWxlX0NsYXNzPC9hPiogIGNsYXp6ICk7Cis8L3ByZT4KKworPHA+QWRkIGEgbmV3IG1vZHVsZSB0byBhIGdpdmVuIGxpYnJhcnkgaW5zdGFuY2UuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2xhenoiPmNsYXp6PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGNsYXNzIGRlc2NyaXB0b3IgZm9yIHRoZSBtb2R1bGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBtb2R1bGUgYWxyZWFkeSBleGlzdHMgYnkgdGhhdCBuYW1lLCBvciBpZiB0aGUgbW9kdWxlIHJlcXVpcmVzIGEgdmVyc2lvbiBvZiBGcmVlVHlwZSB0aGF0IGlzIHRvbyBncmVhdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9Nb2R1bGUiPkZUX0dldF9Nb2R1bGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGUiPkZUX01vZHVsZTwvYT4gKQorICA8Yj5GVF9HZXRfTW9kdWxlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiogIG1vZHVsZV9uYW1lICk7Cis8L3ByZT4KKworPHA+RmluZCBhIG1vZHVsZSBieSBpdHMgbmFtZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZV9uYW1lIj5tb2R1bGVfbmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtb2R1bGUncyBuYW1lIChhcyBhbiBBU0NJSSBzdHJpbmcpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+QSBtb2R1bGUgaGFuZGxlLiAwJm5ic3A7aWYgbm9uZSB3YXMgZm91bmQuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5GcmVlVHlwZSdzIGludGVybmFsIG1vZHVsZXMgYXJlbid0IGRvY3VtZW50ZWQgdmVyeSB3ZWxsLCBhbmQgeW91IHNob3VsZCBsb29rIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgZGV0YWlscy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlbW92ZV9Nb2R1bGUiPkZUX1JlbW92ZV9Nb2R1bGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfUmVtb3ZlX01vZHVsZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Nb2R1bGUiPkZUX01vZHVsZTwvYT4gICBtb2R1bGUgKTsKKzwvcHJlPgorCis8cD5SZW1vdmUgYSBnaXZlbiBtb2R1bGUgZnJvbSBhIGxpYnJhcnkgaW5zdGFuY2UuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZSI+bW9kdWxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gYSBtb2R1bGUgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgbW9kdWxlIG9iamVjdCBpcyBkZXN0cm95ZWQgYnkgdGhlIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FkZF9EZWZhdWx0X01vZHVsZXMiPkZUX0FkZF9EZWZhdWx0X01vZHVsZXM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9BZGRfRGVmYXVsdF9Nb2R1bGVzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gIGxpYnJhcnkgKTsKKzwvcHJlPgorCis8cD5BZGQgdGhlIHNldCBvZiBkZWZhdWx0IGRyaXZlcnMgdG8gYSBnaXZlbiBsaWJyYXJ5IG9iamVjdC4gVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHlvdSBjcmVhdGUgYSBsaWJyYXJ5IG9iamVjdCB3aXRoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX05ld19MaWJyYXJ5Ij5GVF9OZXdfTGlicmFyeTwvYT4gKHVzdWFsbHkgdG8gcGx1ZyBhIGN1c3RvbSBtZW1vcnkgbWFuYWdlcikuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbmV3IGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Byb3BlcnR5X1NldCI+RlRfUHJvcGVydHlfU2V0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1Byb3BlcnR5X1NldDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgICB2YWx1ZSApOworPC9wcmU+CisKKzxwPlNldCBhIHByb3BlcnR5IGZvciBhIGdpdmVuIG1vZHVsZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZV9uYW1lIj5tb2R1bGVfbmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtb2R1bGUgbmFtZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwcm9wZXJ0eV9uYW1lIj5wcm9wZXJ0eV9uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHByb3BlcnR5IG5hbWUuIFByb3BlcnRpZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgJmxzcXVvO1N5bm9wc2lzJnJzcXVvOyBzdWJzZWN0aW9uIG9mIHRoZSBtb2R1bGUncyBkb2N1bWVudGF0aW9uLjwvcD4KKzxwPk5vdGUgdGhhdCBvbmx5IGEgZmV3IG1vZHVsZXMgaGF2ZSBwcm9wZXJ0aWVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InZhbHVlIj52YWx1ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgZ2VuZXJpYyBwb2ludGVyIHRvIGEgdmFyaWFibGUgb3Igc3RydWN0dXJlIHRoYXQgZ2l2ZXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mICZsc3F1bzt2YWx1ZSZyc3F1bzsgaXMgZGVwZW5kZW50IG9uIHRoZSBwcm9wZXJ0eTsgc2VlIHRoZSAmbHNxdW87U3lub3BzaXMmcnNxdW87IHN1YnNlY3Rpb24gb2YgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPklmICZsc3F1bzttb2R1bGVfbmFtZSZyc3F1bzsgaXNuJ3QgYSB2YWxpZCBtb2R1bGUgbmFtZSwgb3IgJmxzcXVvO3Byb3BlcnR5X25hbWUmcnNxdW87IGRvZXNuJ3Qgc3BlY2lmeSBhIHZhbGlkIHByb3BlcnR5LCBvciBpZiAmbHNxdW87dmFsdWUmcnNxdW87IGRvZXNuJ3QgcmVwcmVzZW50IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgcHJvcGVydHkgJmxzcXVvO2JhciZyc3F1bzsgKGEgc2ltcGxlIGludGVnZXIpIGluIG1vZHVsZSAmbHNxdW87Zm9vJnJzcXVvOyB0byB2YWx1ZSZuYnNwOzEuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEZUX1VJbnQgIGJhcjsKKworCisgIGJhciA9IDE7CisgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImZvbyIsICJiYXIiLCAmYW1wO2JhciApOworPC9wcmU+Cis8cD5Ob3RlIHRoYXQgdGhlIEZyZWVUeXBlIENhY2hlIHN1Yi1zeXN0ZW0gZG9lc24ndCByZWNvZ25pemUgbW9kdWxlIHByb3BlcnR5IGNoYW5nZXMuIFRvIGF2b2lkIGdseXBoIGxvb2t1cCBjb25mdXNpb24gd2l0aGluIHRoZSBjYWNoZSB5b3Ugc2hvdWxkIGNhbGwgPGEgaHJlZj0iZnQyLWNhY2hlX3N1YnN5c3RlbS5odG1sI0ZUQ19NYW5hZ2VyX1Jlc2V0Ij5GVENfTWFuYWdlcl9SZXNldDwvYT4gdG8gY29tcGxldGVseSBmbHVzaCB0aGUgY2FjaGUgaWYgYSBtb2R1bGUgcHJvcGVydHkgZ2V0cyBjaGFuZ2VkIGFmdGVyIDxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCNGVENfTWFuYWdlcl9OZXciPkZUQ19NYW5hZ2VyX05ldzwvYT4gaGFzIGJlZW4gY2FsbGVkLjwvcD4KKzxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZXQgcHJvcGVydGllcyBvZiB0aGUgRnJlZVR5cGUgQ2FjaGUgc3ViLXN5c3RlbSBpdHNlbGYgd2l0aCBGVF9Qcm9wZXJ0eV9TZXQ7IHVzZSA/RlRDX1Byb3BlcnR5X1NldD8gaW5zdGVhZC48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjQuMTE8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Byb3BlcnR5X0dldCI+RlRfUHJvcGVydHlfR2V0PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1Byb3BlcnR5X0dldDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICAgdmFsdWUgKTsKKzwvcHJlPgorCis8cD5HZXQgYSBtb2R1bGUncyBwcm9wZXJ0eSB2YWx1ZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1vZHVsZV9uYW1lIj5tb2R1bGVfbmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtb2R1bGUgbmFtZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwcm9wZXJ0eV9uYW1lIj5wcm9wZXJ0eV9uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHByb3BlcnR5IG5hbWUuIFByb3BlcnRpZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgJmxzcXVvO1N5bm9wc2lzJnJzcXVvOyBzdWJzZWN0aW9uIG9mIHRoZSBtb2R1bGUncyBkb2N1bWVudGF0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2YWx1ZSI+dmFsdWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGdlbmVyaWMgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGdpdmVzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mICZsc3F1bzt2YWx1ZSZyc3F1bzsgaXMgZGVwZW5kZW50IG9uIHRoZSBwcm9wZXJ0eTsgc2VlIHRoZSAmbHNxdW87U3lub3BzaXMmcnNxdW87IHN1YnNlY3Rpb24gb2YgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPklmICZsc3F1bzttb2R1bGVfbmFtZSZyc3F1bzsgaXNuJ3QgYSB2YWxpZCBtb2R1bGUgbmFtZSwgb3IgJmxzcXVvO3Byb3BlcnR5X25hbWUmcnNxdW87IGRvZXNuJ3Qgc3BlY2lmeSBhIHZhbGlkIHByb3BlcnR5LCBvciBpZiAmbHNxdW87dmFsdWUmcnNxdW87IGRvZXNuJ3QgcmVwcmVzZW50IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIGdldHMgcHJvcGVydHkgJmxzcXVvO2JheiZyc3F1bzsgKGEgcmFuZ2UpIGluIG1vZHVsZSAmbHNxdW87Zm9vJnJzcXVvOy48L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgdHlwZWRlZiAgcmFuZ2VfCisgIHsKKyAgICBGVF9JbnQzMiAgbWluOworICAgIEZUX0ludDMyICBtYXg7CisKKyAgfSByYW5nZTsKKworICByYW5nZSAgYmF6OworCisKKyAgRlRfUHJvcGVydHlfR2V0KCBsaWJyYXJ5LCAiZm9vIiwgImJheiIsICZhbXA7YmF6ICk7Cis8L3ByZT4KKzxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSBwcm9wZXJ0aWVzIG9mIHRoZSBGcmVlVHlwZSBDYWNoZSBzdWItc3lzdGVtIHdpdGggRlRfUHJvcGVydHlfR2V0OyB1c2UgP0ZUQ19Qcm9wZXJ0eV9HZXQ/IGluc3RlYWQuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi40LjExPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9OZXdfTGlicmFyeSI+RlRfTmV3X0xpYnJhcnk8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTmV3X0xpYnJhcnk8L2I+KCA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPiAgKmFsaWJyYXJ5ICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlIGZyb20gYSBnaXZlbiBtZW1vcnkgb2JqZWN0LiBJdCBpcyB0aHVzIHBvc3NpYmxlIHRvIHVzZSBsaWJyYXJpZXMgd2l0aCBkaXN0aW5jdCBtZW1vcnkgYWxsb2NhdG9ycyB3aXRoaW4gdGhlIHNhbWUgcHJvZ3JhbS4gTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgdXNlZCA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiBzdHJ1Y3R1cmUgaXMgZXhwZWN0ZWQgdG8gcmVtYWluIHZhbGlkIGZvciB0aGUgbGlmZSBvZiB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gb2JqZWN0LjwvcD4KKzxwPk5vcm1hbGx5LCB5b3Ugd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIChmb2xsb3dlZCBieSBhIGNhbGwgdG8gPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyI+RlRfQWRkX0RlZmF1bHRfTW9kdWxlczwvYT4gb3IgYSBzZXJpZXMgb2YgY2FsbHMgdG8gPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfQWRkX01vZHVsZSI+RlRfQWRkX01vZHVsZTwvYT4pIGluc3RlYWQgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSW5pdF9GcmVlVHlwZSI+RlRfSW5pdF9GcmVlVHlwZTwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgRnJlZVR5cGUgbGlicmFyeS48L3A+Cis8cD5Eb24ndCB1c2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GcmVlVHlwZSI+RlRfRG9uZV9GcmVlVHlwZTwvYT4gYnV0IDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfTGlicmFyeSI+RlRfRG9uZV9MaWJyYXJ5PC9hPiB0byBkZXN0cm95IGEgbGlicmFyeSBpbnN0YW5jZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZW1vcnkiPm1lbW9yeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBvcmlnaW5hbCBtZW1vcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWxpYnJhcnkiPmFsaWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIGhhbmRsZSBvZiBhIG5ldyBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+U2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUmVmZXJlbmNlX0xpYnJhcnkiPkZUX1JlZmVyZW5jZV9MaWJyYXJ5PC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0RvbmVfTGlicmFyeSI+RlRfRG9uZV9MaWJyYXJ5PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0RvbmVfTGlicmFyeTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5ICk7Cis8L3ByZT4KKworPHA+RGlzY2FyZCBhIGdpdmVuIGxpYnJhcnkgb2JqZWN0LiBUaGlzIGNsb3NlcyBhbGwgZHJpdmVycyBhbmQgZGlzY2FyZHMgYWxsIHJlc291cmNlIG9iamVjdHMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+U2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUmVmZXJlbmNlX0xpYnJhcnkiPkZUX1JlZmVyZW5jZV9MaWJyYXJ5PC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlZmVyZW5jZV9MaWJyYXJ5Ij5GVF9SZWZlcmVuY2VfTGlicmFyeTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01PRFVMRV9IIChmdG1vZGFwaS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9SZWZlcmVuY2VfTGlicmFyeTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5ICk7Cis8L3ByZT4KKworPHA+QSBjb3VudGVyIGdldHMgaW5pdGlhbGl6ZWQgdG8mbmJzcDsxIGF0IHRoZSB0aW1lIGFuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+IHN0cnVjdHVyZSBpcyBjcmVhdGVkLiBUaGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlIGNvdW50ZXIuIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfTGlicmFyeSI+RlRfRG9uZV9MaWJyYXJ5PC9hPiB0aGVuIG9ubHkgZGVzdHJveXMgYSBsaWJyYXJ5IGlmIHRoZSBjb3VudGVyIGlzJm5ic3A7MSwgb3RoZXJ3aXNlIGl0IHNpbXBseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyLjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gaGVscHMgaW4gbWFuYWdpbmcgbGlmZS1jeWNsZXMgb2Ygc3RydWN0dXJlcyB0aGF0IHJlZmVyZW5jZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPiBvYmplY3RzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHRhcmdldCBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0PnNpbmNlPC9oND4KKzxwPjIuNC4yPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SZW5kZXJlciI+RlRfUmVuZGVyZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gRlRfUmVuZGVyZXJSZWNfKiAgPGI+RlRfUmVuZGVyZXI8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgcmVuZGVyZXIuIEEgcmVuZGVyZXIgaXMgYSBzcGVjaWFsIG1vZHVsZSBpbiBjaGFyZ2Ugb2YgY29udmVydGluZyBhIGdseXBoIGltYWdlIHRvIGEgYml0bWFwLCB3aGVuIG5lY2Vzc2FyeS4gRWFjaCByZW5kZXJlciBzdXBwb3J0cyBhIGdpdmVuIGdseXBoIGltYWdlIGZvcm1hdCwgYW5kIG9uZSBvciBtb3JlIHRhcmdldCBzdXJmYWNlIGRlcHRocy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlbmRlcmVyX0NsYXNzIj5GVF9SZW5kZXJlcl9DbGFzczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1JFTkRFUl9IIChmdHJlbmRlci5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1JlbmRlcmVyX0NsYXNzXworICB7CisgICAgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfTW9kdWxlX0NsYXNzIj5GVF9Nb2R1bGVfQ2xhc3M8L2E+ICAgICAgICAgICAgcm9vdDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0dseXBoX0Zvcm1hdCI+RlRfR2x5cGhfRm9ybWF0PC9hPiAgICAgICAgICAgIGdseXBoX2Zvcm1hdDsKKworICAgIEZUX1JlbmRlcmVyX1JlbmRlckZ1bmMgICAgIHJlbmRlcl9nbHlwaDsKKyAgICBGVF9SZW5kZXJlcl9UcmFuc2Zvcm1GdW5jICB0cmFuc2Zvcm1fZ2x5cGg7CisgICAgRlRfUmVuZGVyZXJfR2V0Q0JveEZ1bmMgICAgZ2V0X2dseXBoX2Nib3g7CisgICAgRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMgICAgc2V0X21vZGU7CisKKyAgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX0Z1bmNzIj5GVF9SYXN0ZXJfRnVuY3M8L2E+KiAgICAgICAgICAgcmFzdGVyX2NsYXNzOworCisgIH0gPGI+RlRfUmVuZGVyZXJfQ2xhc3M8L2I+OworPC9wcmU+CisKKzxwPlRoZSByZW5kZXJlciBtb2R1bGUgY2xhc3MgZGVzY3JpcHRvci48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icm9vdCI+cm9vdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByb290IDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX01vZHVsZV9DbGFzcyI+RlRfTW9kdWxlX0NsYXNzPC9hPiBmaWVsZHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGhfZm9ybWF0Ij5nbHlwaF9mb3JtYXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggaW1hZ2UgZm9ybWF0IHRoaXMgcmVuZGVyZXIgaGFuZGxlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZW5kZXJfZ2x5cGgiPnJlbmRlcl9nbHlwaDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgbWV0aG9kIHVzZWQgdG8gcmVuZGVyIHRoZSBpbWFnZSB0aGF0IGlzIGluIGEgZ2l2ZW4gZ2x5cGggc2xvdCBpbnRvIGEgYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRyYW5zZm9ybV9nbHlwaCI+dHJhbnNmb3JtX2dseXBoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBtZXRob2QgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGltYWdlIHRoYXQgaXMgaW4gYSBnaXZlbiBnbHlwaCBzbG90LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdldF9nbHlwaF9jYm94Ij5nZXRfZ2x5cGhfY2JveDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgbWV0aG9kIHVzZWQgdG8gYWNjZXNzIHRoZSBnbHlwaCdzIGNib3guPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2V0X21vZGUiPnNldF9tb2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBtZXRob2QgdXNlZCB0byBwYXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVycy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyYXN0ZXJfY2xhc3MiPnJhc3Rlcl9jbGFzczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkZvciA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9HbHlwaF9Gb3JtYXQiPkZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FPC9hPiByZW5kZXJlcnMgb25seS4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gaXRzIHJhc3RlcidzIGNsYXNzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9SZW5kZXJlciI+RlRfR2V0X1JlbmRlcmVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfUkVOREVSX0ggKGZ0cmVuZGVyLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfUmVuZGVyZXIiPkZUX1JlbmRlcmVyPC9hPiApCisgIDxiPkZUX0dldF9SZW5kZXJlcjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2x5cGhfRm9ybWF0Ij5GVF9HbHlwaF9Gb3JtYXQ8L2E+ICBmb3JtYXQgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgY3VycmVudCByZW5kZXJlciBmb3IgYSBnaXZlbiBnbHlwaCBmb3JtYXQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmb3JtYXQiPmZvcm1hdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBmb3JtYXQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5BIHJlbmRlcmVyIGhhbmRsZS4gMCZuYnNwO2lmIG5vbmUgZm91bmQuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5BbiBlcnJvciB3aWxsIGJlIHJldHVybmVkIGlmIGEgbW9kdWxlIGFscmVhZHkgZXhpc3RzIGJ5IHRoYXQgbmFtZSwgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuPC9wPgorPHA+VG8gYWRkIGEgbmV3IHJlbmRlcmVyLCBzaW1wbHkgdXNlIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX0FkZF9Nb2R1bGUiPkZUX0FkZF9Nb2R1bGU8L2E+LiBUbyByZXRyaWV2ZSBhIHJlbmRlcmVyIGJ5IGl0cyBuYW1lLCB1c2UgPGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwjRlRfR2V0X01vZHVsZSI+RlRfR2V0X01vZHVsZTwvYT4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfUmVuZGVyZXIiPkZUX1NldF9SZW5kZXJlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1JFTkRFUl9IIChmdHJlbmRlci5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TZXRfUmVuZGVyZXI8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPiAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9SZW5kZXJlciI+RlRfUmVuZGVyZXI8L2E+ICAgIHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPiogIHBhcmFtZXRlcnMgKTsKKzwvcHJlPgorCis8cD5TZXQgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdXNlLCBhbmQgc2V0IGFkZGl0aW9uYWwgbW9kZS48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZW5kZXJlciI+cmVuZGVyZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgcmVuZGVyZXIgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9wYXJhbXMiPm51bV9wYXJhbXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwYXJhbWV0ZXJzIj5wYXJhbWV0ZXJzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QWRkaXRpb25hbCBwYXJhbWV0ZXJzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSByZW5kZXJlciB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBnbHlwaCBpbWFnZXMgaW4gdGhlIHJlbmRlcmVyJ3Mga25vd24gZm9ybWF0IGludG8gYml0bWFwcy48L3A+Cis8cD5UaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciBvdGhlciBmb3JtYXRzLjwvcD4KKzxwPkN1cnJlbnRseSwgbm8gRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlIHVzZXMgJmxzcXVvO3BhcmFtZXRlcnMmcnNxdW87OyB5b3Ugc2hvdWxkIHRodXMgYWx3YXlzIHBhc3MgTlVMTCBhcyB0aGUgdmFsdWUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfRGVidWdfSG9vayI+RlRfU2V0X0RlYnVnX0hvb2s8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NT0RVTEVfSCAoZnRtb2RhcGkuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9TZXRfRGVidWdfSG9vazwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgICAgaG9va19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0RlYnVnSG9va19GdW5jICBkZWJ1Z19ob29rICk7Cis8L3ByZT4KKworPHA+U2V0IGEgZGVidWcgaG9vayBmdW5jdGlvbiBmb3IgZGVidWdnaW5nIHRoZSBpbnRlcnByZXRlciBvZiBhIGZvbnQgZm9ybWF0LjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imhvb2tfaW5kZXgiPmhvb2tfaW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIGRlYnVnIGhvb2suIFlvdSBzaG91bGQgdXNlIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiAmbHNxdW87ZnRvYmpzLmgmcnNxdW87LCBlLmcuLCAmbHNxdW87RlRfREVCVUdfSE9PS19UUlVFVFlQRSZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVidWdfaG9vayI+ZGVidWdfaG9vazwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlYnVnIHRoZSBpbnRlcnByZXRlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5DdXJyZW50bHksIGZvdXIgZGVidWcgaG9vayBzbG90cyBhcmUgYXZhaWxhYmxlLCBidXQgb25seSB0d28gKGZvciB0aGUgVHJ1ZVR5cGUgYW5kIHRoZSBUeXBlJm5ic3A7MSBpbnRlcnByZXRlcikgYXJlIGRlZmluZWQuPC9wPgorPHA+U2luY2UgdGhlIGludGVybmFsIGhlYWRlcnMgb2YgRnJlZVR5cGUgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQsIHRoZSBzeW1ib2wgJmxzcXVvO0ZUX0RFQlVHX0hPT0tfVFJVRVRZUEUmcnNxdW87IGlzbid0IGF2YWlsYWJsZSBwdWJsaWNseS4gVGhpcyBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZCBpbiBhIGZvcnRoY29taW5nIHJlbGVhc2UuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9Ecml2ZXIiPkZUX0RyaXZlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0ZSRUVUWVBFX0ggKGZyZWV0eXBlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9Ecml2ZXJSZWNfKiAgPGI+RlRfRHJpdmVyPC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIGdpdmVuIEZyZWVUeXBlIGZvbnQgZHJpdmVyIG9iamVjdC4gRWFjaCBmb250IGRyaXZlciBpcyBhIHNwZWNpYWwgbW9kdWxlIGNhcGFibGUgb2YgY3JlYXRpbmcgZmFjZXMgZnJvbSBmb250IGZpbGVzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItbXVsdGlwbGVfbWFzdGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzA0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbApAQCAtMCwwICsxLDQ4MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPk11bHRpcGxlIE1hc3RlcnM8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTU1fQXhpcyI+RlRfTU1fQXhpczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2V0X01NX1ZhciI+RlRfR2V0X01NX1ZhcjwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9NdWx0aV9NYXN0ZXIiPkZUX011bHRpX01hc3RlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyI+RlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlczwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9WYXJfQXhpcyI+RlRfVmFyX0F4aXM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIj5GVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlczwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9WYXJfTmFtZWRfU3R5bGUiPkZUX1Zhcl9OYW1lZF9TdHlsZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzIj5GVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTU1fVmFyIj5GVF9NTV9WYXI8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMiPkZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0X011bHRpX01hc3RlciI+RlRfR2V0X011bHRpX01hc3RlcjwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoZSBmb2xsb3dpbmcgdHlwZXMgYW5kIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBtYW5hZ2UgTXVsdGlwbGUgTWFzdGVyIGZvbnRzLCBpLmUuLCB0aGUgc2VsZWN0aW9uIG9mIHNwZWNpZmljIGRlc2lnbiBpbnN0YW5jZXMgYnkgc2V0dGluZyBkZXNpZ24gYXhpcyBjb29yZGluYXRlcy48L3A+Cis8cD5HZW9yZ2UgV2lsbGlhbXMgaGFzIGV4dGVuZGVkIHRoaXMgaW50ZXJmYWNlIHRvIG1ha2UgaXQgd29yayB3aXRoIGJvdGggVHlwZSZuYnNwOzEgTXVsdGlwbGUgTWFzdGVycyBmb250cyBhbmQgR1ggZGlzdG9ydGFibGUgKHZhcikgZm9udHMuIFNvbWUgb2YgdGhlc2Ugcm91dGluZXMgb25seSB3b3JrIHdpdGggTU0gZm9udHMsIG90aGVycyB3aWxsIHdvcmsgd2l0aCBib3RoIHR5cGVzLiBUaGV5IGFyZSBzaW1pbGFyIGVub3VnaCB0aGF0IGEgY29uc2lzdGVudCBpbnRlcmZhY2UgbWFrZXMgc2Vuc2UuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTU1fQXhpcyI+RlRfTU1fQXhpczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01VTFRJUExFX01BU1RFUlNfSCAoZnRtbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX01NX0F4aXNfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICBuYW1lOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICBtaW5pbXVtOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICBtYXhpbXVtOworCisgIH0gPGI+RlRfTU1fQXhpczwvYj47Cis8L3ByZT4KKworPHA+QSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBnaXZlbiBheGlzIGluIGRlc2lnbiBzcGFjZSBmb3IgTXVsdGlwbGUgTWFzdGVycyBmb250cy48L3A+Cis8cD5UaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBHWCB2YXIgZm9udHMuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im5hbWUiPm5hbWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYXhpcydzIG5hbWUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWluaW11bSI+bWluaW11bTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBheGlzJ3MgbWluaW11bSBkZXNpZ24gY29vcmRpbmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhpbXVtIj5tYXhpbXVtPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGF4aXMncyBtYXhpbXVtIGRlc2lnbiBjb29yZGluYXRlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX011bHRpX01hc3RlciI+RlRfTXVsdGlfTWFzdGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTVVMVElQTEVfTUFTVEVSU19IIChmdG1tLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfTXVsdGlfTWFzdGVyXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgIG51bV9heGlzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICBudW1fZGVzaWduczsKKyAgICA8YSBocmVmPSJmdDItbXVsdGlwbGVfbWFzdGVycy5odG1sI0ZUX01NX0F4aXMiPkZUX01NX0F4aXM8L2E+ICBheGlzW1QxX01BWF9NTV9BWElTXTsKKworICB9IDxiPkZUX011bHRpX01hc3RlcjwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYSBNdWx0aXBsZSBNYXN0ZXJzIGZvbnQuPC9wPgorPHA+VGhpcyBzdHJ1Y3R1cmUgY2FuJ3QgYmUgdXNlZCBmb3IgR1ggdmFyIGZvbnRzLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJudW1fYXhpcyI+bnVtX2F4aXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5OdW1iZXIgb2YgYXhlcy4gQ2Fubm90IGV4Y2VlZCZuYnNwOzQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibnVtX2Rlc2lnbnMiPm51bV9kZXNpZ25zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TnVtYmVyIG9mIGRlc2lnbnM7IHNob3VsZCBiZSBub3JtYWxseSAyXm51bV9heGlzIGV2ZW4gdGhvdWdoIHRoZSBUeXBlJm5ic3A7MSBzcGVjaWZpY2F0aW9uIHN0cmFuZ2VseSBhbGxvd3MgZm9yIGludGVybWVkaWF0ZSBkZXNpZ25zIHRvIGJlIHByZXNlbnQuIFRoaXMgbnVtYmVyIGNhbm5vdCBleGNlZWQmbmJzcDsxNi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJheGlzIj5heGlzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0YWJsZSBvZiBheGlzIGRlc2NyaXB0b3JzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Zhcl9BeGlzIj5GVF9WYXJfQXhpczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01VTFRJUExFX01BU1RFUlNfSCAoZnRtbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1Zhcl9BeGlzXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgbmFtZTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgbWluaW11bTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgIGRlZjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgIG1heGltdW07CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgIHRhZzsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgc3RyaWQ7CisKKyAgfSA8Yj5GVF9WYXJfQXhpczwvYj47Cis8L3ByZT4KKworPHA+QSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBnaXZlbiBheGlzIGluIGRlc2lnbiBzcGFjZSBmb3IgTXVsdGlwbGUgTWFzdGVycyBhbmQgR1ggdmFyIGZvbnRzLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuYW1lIj5uYW1lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGF4aXMncyBuYW1lLiBOb3QgYWx3YXlzIG1lYW5pbmdmdWwgZm9yIEdYLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1pbmltdW0iPm1pbmltdW08L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYXhpcydzIG1pbmltdW0gZGVzaWduIGNvb3JkaW5hdGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZGVmIj5kZWY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYXhpcydzIGRlZmF1bHQgZGVzaWduIGNvb3JkaW5hdGUuIEZyZWVUeXBlIGNvbXB1dGVzIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZXMgZm9yIE1NOyBpdCBpcyB0aGVuIGFuIGludGVnZXIgdmFsdWUsIG5vdCBpbiAxNi4xNiBmb3JtYXQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWF4aW11bSI+bWF4aW11bTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBheGlzJ3MgbWF4aW11bSBkZXNpZ24gY29vcmRpbmF0ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0YWciPnRhZzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBheGlzJ3MgdGFnICh0aGUgR1ggZXF1aXZhbGVudCB0byAmbHNxdW87bmFtZSZyc3F1bzspLiBGcmVlVHlwZSBwcm92aWRlcyBkZWZhdWx0IHZhbHVlcyBmb3IgTU0gaWYgcG9zc2libGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyaWQiPnN0cmlkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGVudHJ5IGluICZsc3F1bztuYW1lJnJzcXVvOyB0YWJsZSAoYW5vdGhlciBHWCB2ZXJzaW9uIG9mICZsc3F1bztuYW1lJnJzcXVvOykuIE5vdCBtZWFuaW5nZnVsIGZvciBNTS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9WYXJfTmFtZWRfU3R5bGUiPkZUX1Zhcl9OYW1lZF9TdHlsZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01VTFRJUExFX01BU1RFUlNfSCAoZnRtbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1Zhcl9OYW1lZF9TdHlsZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4qICBjb29yZHM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgc3RyaWQ7CisKKyAgfSA8Yj5GVF9WYXJfTmFtZWRfU3R5bGU8L2I+OworPC9wcmU+CisKKzxwPkEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgbmFtZWQgc3R5bGUgaW4gYSBHWCB2YXIgZm9udC48L3A+Cis8cD5UaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBNTSBmb250cy48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY29vcmRzIj5jb29yZHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZGVzaWduIGNvb3JkaW5hdGVzIGZvciB0aGlzIHN0eWxlLiBUaGlzIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGF4aXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyaWQiPnN0cmlkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGVudHJ5IGluICZsc3F1bztuYW1lJnJzcXVvOyB0YWJsZSBpZGVudGlmeWluZyB0aGlzIHN0eWxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01NX1ZhciI+RlRfTU1fVmFyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTVVMVElQTEVfTUFTVEVSU19IIChmdG1tLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfTU1fVmFyXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgICAgICAgIG51bV9heGlzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgICAgICAgICBudW1fZGVzaWduczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICAgICAgICAgbnVtX25hbWVkc3R5bGVzOworICAgIDxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfVmFyX0F4aXMiPkZUX1Zhcl9BeGlzPC9hPiogICAgICAgICBheGlzOworICAgIDxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfVmFyX05hbWVkX1N0eWxlIj5GVF9WYXJfTmFtZWRfU3R5bGU8L2E+KiAgbmFtZWRzdHlsZTsKKworICB9IDxiPkZUX01NX1ZhcjwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYSBNdWx0aXBsZSBNYXN0ZXJzIG9yIEdYIHZhciBkaXN0b3J0YWJsZSBmb250LjwvcD4KKzxwPlNvbWUgZmllbGRzIGFyZSBzcGVjaWZpYyB0byBvbmUgZm9ybWF0IGFuZCBub3QgdG8gdGhlIG90aGVyLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJudW1fYXhpcyI+bnVtX2F4aXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGF4ZXMuIFRoZSBtYXhpbXVtIHZhbHVlIGlzJm5ic3A7NCBmb3IgTU07IG5vIGxpbWl0IGluIEdYLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9kZXNpZ25zIj5udW1fZGVzaWduczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgZGVzaWduczsgc2hvdWxkIGJlIG5vcm1hbGx5IDJebnVtX2F4aXMgZm9yIE1NIGZvbnRzLiBOb3QgbWVhbmluZ2Z1bCBmb3IgR1ggKHdoZXJlIGV2ZXJ5IGdseXBoIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGRlc2lnbnMpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9uYW1lZHN0eWxlcyI+bnVtX25hbWVkc3R5bGVzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBuYW1lZCBzdHlsZXM7IG9ubHkgbWVhbmluZ2Z1bCBmb3IgR1ggdGhhdCBhbGxvd3MgY2VydGFpbiBkZXNpZ24gY29vcmRpbmF0ZXMgdG8gaGF2ZSBhIHN0cmluZyBJRCAoaW4gdGhlICZsc3F1bztuYW1lJnJzcXVvOyB0YWJsZSkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoZSBmb250IGNhbiB0ZWxsIHRoZSB1c2VyIHRoYXQsIGZvciBleGFtcGxlLCBXZWlnaHQ9MS41IGlzICZsc3F1bztCb2xkJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJheGlzIj5heGlzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gYXhpcyBkZXNjcmlwdG9yIHRhYmxlLiBHWCBmb250cyBjb250YWluIHNsaWdodGx5IG1vcmUgZGF0YSB0aGFuIE1NLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im5hbWVkc3R5bGUiPm5hbWVkc3R5bGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIG5hbWVkIHN0eWxlIHRhYmxlLiBPbmx5IG1lYW5pbmdmdWwgd2l0aCBHWC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfTXVsdGlfTWFzdGVyIj5GVF9HZXRfTXVsdGlfTWFzdGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTVVMVElQTEVfTUFTVEVSU19IIChmdG1tLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9NdWx0aV9NYXN0ZXI8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCNGVF9NdWx0aV9NYXN0ZXIiPkZUX011bHRpX01hc3RlcjwvYT4gICphbWFzdGVyICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIE11bHRpcGxlIE1hc3RlciBkZXNjcmlwdG9yIG9mIGEgZ2l2ZW4gZm9udC48L3A+Cis8cD5UaGlzIGZ1bmN0aW9uIGNhbid0IGJlIHVzZWQgd2l0aCBHWCBmb250cy48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW1hc3RlciI+YW1hc3RlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBNdWx0aXBsZSBNYXN0ZXJzIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9NTV9WYXIiPkZUX0dldF9NTV9WYXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NVUxUSVBMRV9NQVNURVJTX0ggKGZ0bW0uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X01NX1ZhcjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCNGVF9NTV9WYXIiPkZUX01NX1ZhcjwvYT4qICAqYW1hc3RlciApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIHRoZSBNdWx0aXBsZSBNYXN0ZXIvR1ggdmFyIGRlc2NyaXB0b3Igb2YgYSBnaXZlbiBmb250LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbWFzdGVyIj5hbWFzdGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIE11bHRpcGxlIE1hc3RlcnMvR1ggdmFyIGRlc2NyaXB0b3IuIEFsbG9jYXRlcyBhIGRhdGEgc3RydWN0dXJlLCB3aGljaCB0aGUgdXNlciBtdXN0IGZyZWUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMiPkZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9NVUxUSVBMRV9NQVNURVJTX0ggKGZ0bW0uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlczwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiogIGNvb3JkcyApOworPC9wcmU+CisKKzxwPkZvciBNdWx0aXBsZSBNYXN0ZXJzIGZvbnRzLCBjaG9vc2UgYW4gaW50ZXJwb2xhdGVkIGZvbnQgZGVzaWduIHRocm91Z2ggZGVzaWduIGNvb3JkaW5hdGVzLjwvcD4KKzxwPlRoaXMgZnVuY3Rpb24gY2FuJ3QgYmUgdXNlZCB3aXRoIEdYIGZvbnRzLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9jb29yZHMiPm51bV9jb29yZHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuIElmIGl0IGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgdmFsdWVzLiBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb29yZHMiPmNvb3JkczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIGFycmF5IG9mIGRlc2lnbiBjb29yZGluYXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMiPkZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTVVMVElQTEVfTUFTVEVSU19IIChmdG1tLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+KiAgY29vcmRzICk7Cis8L3ByZT4KKworPHA+Rm9yIE11bHRpcGxlIE1hc3RlciBvciBHWCBWYXIgZm9udHMsIGNob29zZSBhbiBpbnRlcnBvbGF0ZWQgZm9udCBkZXNpZ24gdGhyb3VnaCBkZXNpZ24gY29vcmRpbmF0ZXMuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibnVtX2Nvb3JkcyI+bnVtX2Nvb3JkczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gSWYgaXQgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyB2YWx1ZXMuIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNvb3JkcyI+Y29vcmRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gYXJyYXkgb2YgZGVzaWduIGNvb3JkaW5hdGVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMiPkZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01VTFRJUExFX01BU1RFUlNfSCAoZnRtbS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXM8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiogIGNvb3JkcyApOworPC9wcmU+CisKKzxwPkZvciBNdWx0aXBsZSBNYXN0ZXJzIGFuZCBHWCB2YXIgZm9udHMsIGNob29zZSBhbiBpbnRlcnBvbGF0ZWQgZm9udCBkZXNpZ24gdGhyb3VnaCBub3JtYWxpemVkIGJsZW5kIGNvb3JkaW5hdGVzLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bV9jb29yZHMiPm51bV9jb29yZHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuIElmIGl0IGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgdmFsdWVzLiBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb29yZHMiPmNvb3JkczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkgKGVhY2ggZWxlbWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4wKS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyI+RlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX01VTFRJUExFX01BU1RFUlNfSCAoZnRtbS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiogIGNvb3JkcyApOworPC9wcmU+CisKKzxwPlRoaXMgaXMgYW5vdGhlciBuYW1lIG9mIDxhIGhyZWY9ImZ0Mi1tdWx0aXBsZV9tYXN0ZXJzLmh0bWwjRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzIj5GVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXM8L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW90X3ZhbGlkYXRpb24uaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItb3RfdmFsaWRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMGI2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLW90X3ZhbGlkYXRpb24uaHRtbApAQCAtMCwwICsxLDI0NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPk9wZW5UeXBlIFZhbGlkYXRpb248L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3BlblR5cGVfVmFsaWRhdGUiPkZUX09wZW5UeXBlX1ZhbGlkYXRlPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX09wZW5UeXBlX0ZyZWUiPkZUX09wZW5UeXBlX0ZyZWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9PVFhYWDwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHRvIHZhbGlkYXRlIHNvbWUgT3BlblR5cGUgdGFibGVzIChCQVNFLCBHREVGLCBHUE9TLCBHU1VCLCBKU1RGLCBNQVRIKS48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PcGVuVHlwZV9WYWxpZGF0ZSI+RlRfT3BlblR5cGVfVmFsaWRhdGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PUEVOVFlQRV9WQUxJREFURV9IIChmdG90dmFsLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX09wZW5UeXBlX1ZhbGlkYXRlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIHZhbGlkYXRpb25fZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlcyI+RlRfQnl0ZXM8L2E+ICAqQkFTRV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGVzIj5GVF9CeXRlczwvYT4gICpHREVGX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZXMiPkZUX0J5dGVzPC9hPiAgKkdQT1NfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlcyI+RlRfQnl0ZXM8L2E+ICAqR1NVQl90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGVzIj5GVF9CeXRlczwvYT4gICpKU1RGX3RhYmxlICk7Cis8L3ByZT4KKworPHA+VmFsaWRhdGUgdmFyaW91cyBPcGVuVHlwZSB0YWJsZXMgdG8gYXNzdXJlIHRoYXQgYWxsIG9mZnNldHMgYW5kIGluZGljZXMgYXJlIHZhbGlkLiBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB0ZXh0IGxheW91dCBjYW4gYWNjZXNzIHRob3NlIHRhYmxlcyB3aXRob3V0IGVycm9yIGNoZWNraW5nICh3aGljaCBjYW4gYmUgcXVpdGUgdGltZSBjb25zdW1pbmcpLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2YWxpZGF0aW9uX2ZsYWdzIj52YWxpZGF0aW9uX2ZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBiaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgdGhlIHRhYmxlcyB0byBiZSB2YWxpZGF0ZWQuIFNlZSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9PVFhYWDwvYT4gZm9yIHBvc3NpYmxlIHZhbHVlcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkJBU0VfdGFibGUiPkJBU0VfdGFibGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIEJBU0UgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iR0RFRl90YWJsZSI+R0RFRl90YWJsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgR0RFRiB0YWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJHUE9TX3RhYmxlIj5HUE9TX3RhYmxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBHUE9TIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkdTVUJfdGFibGUiPkdTVUJfdGFibGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIEdTVUIgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iSlNURl90YWJsZSI+SlNURl90YWJsZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgSlNURiB0YWJsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggT3BlblR5cGUgZm9udHMsIHJldHVybmluZyBhbiBlcnJvciBvdGhlcndpc2UuPC9wPgorPHA+QWZ0ZXIgdXNlLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGRlYWxsb2NhdGUgdGhlIGZpdmUgdGFibGVzIHdpdGggPGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9PcGVuVHlwZV9GcmVlIj5GVF9PcGVuVHlwZV9GcmVlPC9hPi4gQSBOVUxMIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBlaXRoZXIgZG9lc24ndCBleGlzdCBpbiB0aGUgZm9udCwgb3IgdGhlIGFwcGxpY2F0aW9uIGhhc24ndCBhc2tlZCBmb3IgdmFsaWRhdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX09wZW5UeXBlX0ZyZWUiPkZUX09wZW5UeXBlX0ZyZWU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PUEVOVFlQRV9WQUxJREFURV9IIChmdG90dmFsLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfT3BlblR5cGVfRnJlZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZXMiPkZUX0J5dGVzPC9hPiAgdGFibGUgKTsKKzwvcHJlPgorCis8cD5GcmVlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IE9wZW5UeXBlIHZhbGlkYXRvci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFibGUiPnRhYmxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCBieSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX09wZW5UeXBlX1ZhbGlkYXRlIj5GVF9PcGVuVHlwZV9WYWxpZGF0ZTwvYT4uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX09wZW5UeXBlX1ZhbGlkYXRlIj5GVF9PcGVuVHlwZV9WYWxpZGF0ZTwvYT4gb25seS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1ZBTElEQVRFX09UWFhYIj5GVF9WQUxJREFURV9PVFhYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX09QRU5UWVBFX1ZBTElEQVRFX0ggKGZ0b3R2YWwuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9CQVNFIj5GVF9WQUxJREFURV9CQVNFPC9hPiAgMHgwMTAwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR0RFRiI+RlRfVkFMSURBVEVfR0RFRjwvYT4gIDB4MDIwMAorI2RlZmluZSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dQT1MiPkZUX1ZBTElEQVRFX0dQT1M8L2E+ICAweDA0MDAKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HU1VCIj5GVF9WQUxJREFURV9HU1VCPC9hPiAgMHgwODAwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfSlNURiI+RlRfVkFMSURBVEVfSlNURjwvYT4gIDB4MTAwMAorI2RlZmluZSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX01BVEgiPkZUX1ZBTElEQVRFX01BVEg8L2E+ICAweDIwMDAKKworI2RlZmluZSA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX09UIj5GVF9WQUxJREFURV9PVDwvYT4gIDxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfQkFTRSI+RlRfVkFMSURBVEVfQkFTRTwvYT4gfCBcCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0dERUYiPkZUX1ZBTElEQVRFX0dERUY8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9HUE9TIj5GVF9WQUxJREFURV9HUE9TPC9hPiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1vdF92YWxpZGF0aW9uLmh0bWwjRlRfVkFMSURBVEVfR1NVQiI+RlRfVkFMSURBVEVfR1NVQjwvYT4gfCBcCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX1ZBTElEQVRFX0pTVEYiPkZUX1ZBTElEQVRFX0pTVEY8L2E+IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCNGVF9WQUxJREFURV9NQVRIIj5GVF9WQUxJREFURV9NQVRIPC9hPgorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCA8YSBocmVmPSJmdDItb3RfdmFsaWRhdGlvbi5odG1sI0ZUX09wZW5UeXBlX1ZhbGlkYXRlIj5GVF9PcGVuVHlwZV9WYWxpZGF0ZTwvYT4gdG8gaW5kaWNhdGUgd2hpY2ggT3BlblR5cGUgdGFibGVzIHNob3VsZCBiZSB2YWxpZGF0ZWQuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0JBU0UiPkZUX1ZBTElEQVRFX0JBU0U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBCQVNFIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0dERUYiPkZUX1ZBTElEQVRFX0dERUY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBHREVGIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0dQT1MiPkZUX1ZBTElEQVRFX0dQT1M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBHUE9TIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0dTVUIiPkZUX1ZBTElEQVRFX0dTVUI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBHU1VCIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX0pTVEYiPkZUX1ZBTElEQVRFX0pTVEY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBKU1RGIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX01BVEgiPkZUX1ZBTElEQVRFX01BVEg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWxpZGF0ZSBNQVRIIHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1ZBTElEQVRFX09UIj5GVF9WQUxJREFURV9PVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZhbGlkYXRlIGFsbCBPcGVuVHlwZSB0YWJsZXMgKEJBU0UsIEdERUYsIEdQT1MsIEdTVUIsIEpTVEYsIE1BVEgpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxMTljZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwKQEAgLTAsMCArMSw5NjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5PdXRsaW5lIFByb2Nlc3Npbmc8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9HZXRfQml0bWFwIj5GVF9PdXRsaW5lX0dldF9CaXRtYXA8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9OZXciPkZUX091dGxpbmVfTmV3PC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX1JlbmRlciI+RlRfT3V0bGluZV9SZW5kZXI8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9Eb25lIj5GVF9PdXRsaW5lX0RvbmU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfRGVjb21wb3NlIj5GVF9PdXRsaW5lX0RlY29tcG9zZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX0NvcHkiPkZUX091dGxpbmVfQ29weTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9GdW5jcyI+RlRfT3V0bGluZV9GdW5jczwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX1RyYW5zbGF0ZSI+RlRfT3V0bGluZV9UcmFuc2xhdGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfTW92ZVRvRnVuYyI+RlRfT3V0bGluZV9Nb3ZlVG9GdW5jPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfVHJhbnNmb3JtIj5GVF9PdXRsaW5lX1RyYW5zZm9ybTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9MaW5lVG9GdW5jIj5GVF9PdXRsaW5lX0xpbmVUb0Z1bmM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9FbWJvbGRlbiI+RlRfT3V0bGluZV9FbWJvbGRlbjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9Db25pY1RvRnVuYyI+RlRfT3V0bGluZV9Db25pY1RvRnVuYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX0VtYm9sZGVuWFkiPkZUX091dGxpbmVfRW1ib2xkZW5YWTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9DdWJpY1RvRnVuYyI+RlRfT3V0bGluZV9DdWJpY1RvRnVuYzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX1JldmVyc2UiPkZUX091dGxpbmVfUmV2ZXJzZTwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9PdXRsaW5lX0NoZWNrIj5GVF9PdXRsaW5lX0NoZWNrPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9PcmllbnRhdGlvbiI+RlRfT3JpZW50YXRpb248L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24iPkZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX091dGxpbmVfR2V0X0NCb3giPkZUX091dGxpbmVfR2V0X0NCb3g8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfT3V0bGluZV9HZXRfQkJveCI+RlRfT3V0bGluZV9HZXRfQkJveDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKworCis8cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgcm91dGluZXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgc2NhbGFibGUgZ2x5cGggaW1hZ2VzIGtub3duIGFzICZsc3F1bztvdXRsaW5lcyZyc3F1bzsuIFRoZXNlIGNhbiBhbHNvIGJlIG1lYXN1cmVkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbnZlcnRlZCBpbnRvIGJpdG1hcHMgYW5kIHBpeG1hcHMuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9PdXRsaW5lXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNob3J0PC9zcGFuPiAgICAgICBuX2NvbnRvdXJzOyAgICAgIC8qIG51bWJlciBvZiBjb250b3VycyBpbiBnbHlwaCAgICAgICAgKi8KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2hvcnQ8L3NwYW4+ICAgICAgIG5fcG9pbnRzOyAgICAgICAgLyogbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgZ2x5cGggICAgICAqLworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgcG9pbnRzOyAgICAgICAgICAvKiB0aGUgb3V0bGluZSdzIHBvaW50cyAgICAgICAgICAgICAgICovCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgICAgICB0YWdzOyAgICAgICAgICAgIC8qIHRoZSBwb2ludHMgZmxhZ3MgICAgICAgICAgICAgICAgICAgKi8KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c2hvcnQ8L3NwYW4+KiAgICAgIGNvbnRvdXJzOyAgICAgICAgLyogdGhlIGNvbnRvdXIgZW5kIHBvaW50cyAgICAgICAgICAgICAqLworCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgICAgICBmbGFnczsgICAgICAgICAgIC8qIG91dGxpbmUgbWFza3MgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB9IDxiPkZUX091dGxpbmU8L2I+OworPC9wcmU+CisKKzxwPlRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYW4gb3V0bGluZSB0byB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlci48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibl9jb250b3VycyI+bl9jb250b3VyczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBudW1iZXIgb2YgY29udG91cnMgaW4gdGhlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibl9wb2ludHMiPm5fcG9pbnRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icG9pbnRzIj5wb2ludHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgJmxzcXVvO25fcG9pbnRzJnJzcXVvOyA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4gZWxlbWVudHMsIGdpdmluZyB0aGUgb3V0bGluZSdzIHBvaW50IGNvb3JkaW5hdGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhZ3MiPnRhZ3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgJmxzcXVvO25fcG9pbnRzJnJzcXVvOyBjaGFycywgZ2l2aW5nIGVhY2ggb3V0bGluZSBwb2ludCdzIHR5cGUuPC9wPgorPHA+SWYgYml0Jm5ic3A7MCBpcyB1bnNldCwgdGhlIHBvaW50IGlzICZsc3F1bztvZmYmcnNxdW87IHRoZSBjdXJ2ZSwgaS5lLiwgYSBCw6l6aWVyIGNvbnRyb2wgcG9pbnQsIHdoaWxlIGl0IGlzICZsc3F1bztvbiZyc3F1bzsgaWYgc2V0LjwvcD4KKzxwPkJpdCZuYnNwOzEgaXMgbWVhbmluZ2Z1bCBmb3IgJmxzcXVvO29mZiZyc3F1bzsgcG9pbnRzIG9ubHkuIElmIHNldCwgaXQgaW5kaWNhdGVzIGEgdGhpcmQtb3JkZXIgQsOpemllciBhcmMgY29udHJvbCBwb2ludDsgYW5kIGEgc2Vjb25kLW9yZGVyIGNvbnRyb2wgcG9pbnQgaWYgdW5zZXQuPC9wPgorPHA+SWYgYml0Jm5ic3A7MiBpcyBzZXQsIGJpdHMgNS03IGNvbnRhaW4gdGhlIGRyb3Atb3V0IG1vZGUgKGFzIGRlZmluZWQgaW4gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb247IHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIFNDQU5NT0RFIGluc3RydWN0aW9uKS48L3A+Cis8cD5CaXRzIDMgYW5kJm5ic3A7NCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHB1cnBvc2VzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNvbnRvdXJzIj5jb250b3VyczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIGFycmF5IG9mICZsc3F1bztuX2NvbnRvdXJzJnJzcXVvOyBzaG9ydHMsIGdpdmluZyB0aGUgZW5kIHBvaW50IG9mIGVhY2ggY29udG91ciB3aXRoaW4gdGhlIG91dGxpbmUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgY29udG91ciBpcyBkZWZpbmVkIGJ5IHRoZSBwb2ludHMgJmxzcXVvOzAmcnNxdW87IHRvICZsc3F1bztjb250b3Vyc1swXSZyc3F1bzssIHRoZSBzZWNvbmQgb25lIGlzIGRlZmluZWQgYnkgdGhlIHBvaW50cyAmbHNxdW87Y29udG91cnNbMF0rMSZyc3F1bzsgdG8gJmxzcXVvO2NvbnRvdXJzWzFdJnJzcXVvOywgZXRjLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZsYWdzIj5mbGFnczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc2V0IG9mIGJpdCBmbGFncyB1c2VkIHRvIGNoYXJhY3Rlcml6ZSB0aGUgb3V0bGluZSBhbmQgZ2l2ZSBoaW50cyB0byB0aGUgc2Nhbi1jb252ZXJ0ZXIgYW5kIGhpbnRlciBvbiBob3cgdG8gY29udmVydC9ncmlkLWZpdCBpdC4gU2VlIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9YWFg8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBCL1cgcmFzdGVyaXplciBvbmx5IGNoZWNrcyBiaXQmbmJzcDsyIGluIHRoZSAmbHNxdW87dGFncyZyc3F1bzsgYXJyYXkgZm9yIHRoZSBmaXJzdCBwb2ludCBvZiBlYWNoIGNvbnRvdXIuIFRoZSBkcm9wLW91dCBtb2RlIGFzIGdpdmVuIHdpdGggPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfWFhYIj5GVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUzwvYT4sIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUzwvYT4sIGFuZCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfSU5DTFVERV9TVFVCUzwvYT4gaW4gJmxzcXVvO2ZsYWdzJnJzcXVvOyBpcyB0aGVuIG92ZXJyaWRkZW4uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX05ldyI+RlRfT3V0bGluZV9OZXc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9OZXc8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9MaWJyYXJ5Ij5GVF9MaWJyYXJ5PC9hPiAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgIG51bVBvaW50cywKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICBudW1Db250b3VycywKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiAgKmFub3V0bGluZSApOworCisKKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgRlRfT3V0bGluZV9OZXdfSW50ZXJuYWwoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgbnVtUG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgIG51bUNvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+ICAqYW5vdXRsaW5lICk7Cis8L3ByZT4KKworPHA+Q3JlYXRlIGEgbmV3IG91dGxpbmUgb2YgYSBnaXZlbiBzaXplLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QgZnJvbSB3aGVyZSB0aGUgb3V0bGluZSBpcyBhbGxvY2F0ZWQuIE5vdGUgaG93ZXZlciB0aGF0IHRoZSBuZXcgb3V0bGluZSB3aWxsIDxiPm5vdDwvYj4gbmVjZXNzYXJpbHkgYmUgPGI+ZnJlZWQ8L2I+LCB3aGVuIGRlc3Ryb3lpbmcgdGhlIGxpYnJhcnksIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0RvbmVfRnJlZVR5cGUiPkZUX0RvbmVfRnJlZVR5cGU8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bVBvaW50cyI+bnVtUG9pbnRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB3aXRoaW4gdGhlIG91dGxpbmUuIE11c3QgYmUgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIDB4RkZGRiAoNjU1MzUpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bUNvbnRvdXJzIj5udW1Db250b3VyczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBjb250b3VycyB3aXRoaW4gdGhlIG91dGxpbmUuIFRoaXMgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCB0byAmbHNxdW87bnVtUG9pbnRzJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFub3V0bGluZSI+YW5vdXRsaW5lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIG5ldyBvdXRsaW5lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgJmxzcXVvO2xpYnJhcnkmcnNxdW87IHBhcmFtZXRlciBpcyBzaW1wbHkgdG8gdXNlIHRoZSBsaWJyYXJ5J3MgbWVtb3J5IGFsbG9jYXRvci48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfRG9uZSI+RlRfT3V0bGluZV9Eb25lPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX091dGxpbmVfRG9uZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT4qICBvdXRsaW5lICk7CisKKworICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT4qICBvdXRsaW5lICk7Cis8L3ByZT4KKworPHA+RGVzdHJveSBhbiBvdXRsaW5lIGNyZWF0ZWQgd2l0aCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9OZXciPkZUX091dGxpbmVfTmV3PC9hPi48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaWJyYXJ5Ij5saWJyYXJ5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0IHVzZWQgdG8gYWxsb2NhdGUgdGhlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0bGluZSI+b3V0bGluZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgb3V0bGluZSBvYmplY3QgdG8gYmUgZGlzY2FyZGVkLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiB0aGUgb3V0bGluZSdzICZsc3F1bztvd25lciZyc3F1bzsgZmllbGQgaXMgbm90IHNldCwgb25seSB0aGUgb3V0bGluZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmVsZWFzZWQuPC9wPgorPHA+VGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhbiAmbHNxdW87bGlicmFyeSZyc3F1bzsgcGFyYW1ldGVyIGlzIHNpbXBseSB0byB1c2UgZnRfbWVtX2ZyZWUoKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfQ29weSI+RlRfT3V0bGluZV9Db3B5PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX091dGxpbmVfQ29weTwvYj4oIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgc291cmNlLAorICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiAgICAgICAgKnRhcmdldCApOworPC9wcmU+CisKKzxwPkNvcHkgYW4gb3V0bGluZSBpbnRvIGFub3RoZXIgb25lLiBCb3RoIG9iamVjdHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemVzIChudW1iZXIgb2YgcG9pbnRzICZhbXA7IG51bWJlciBvZiBjb250b3Vycykgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzb3VyY2UiPnNvdXJjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugb3V0bGluZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhcmdldCI+dGFyZ2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHRhcmdldCBvdXRsaW5lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX1RyYW5zbGF0ZSI+RlRfT3V0bGluZV9UcmFuc2xhdGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9PdXRsaW5lX1RyYW5zbGF0ZTwvYj4oIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgICAgICAgICB4T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgICAgICAgICAgIHlPZmZzZXQgKTsKKzwvcHJlPgorCis8cD5BcHBseSBhIHNpbXBsZSB0cmFuc2xhdGlvbiB0byB0aGUgcG9pbnRzIG9mIGFuIG91dGxpbmUuPC9wPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0bGluZSI+b3V0bGluZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieE9mZnNldCI+eE9mZnNldDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBob3Jpem9udGFsIG9mZnNldC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5T2Zmc2V0Ij55T2Zmc2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnRpY2FsIG9mZnNldC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX1RyYW5zZm9ybSI+RlRfT3V0bGluZV9UcmFuc2Zvcm08L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gKQorICA8Yj5GVF9PdXRsaW5lX1RyYW5zZm9ybTwvYj4oIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTWF0cml4Ij5GVF9NYXRyaXg8L2E+KiAgIG1hdHJpeCApOworPC9wcmU+CisKKzxwPkFwcGx5IGEgc2ltcGxlIDJ4MiBtYXRyaXggdG8gYWxsIG9mIGFuIG91dGxpbmUncyBwb2ludHMuIFVzZWZ1bCBmb3IgYXBwbHlpbmcgcm90YXRpb25zLCBzbGFudGluZywgZmxpcHBpbmcsIGV0Yy48L3A+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvdXRsaW5lIj5vdXRsaW5lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgb3V0bGluZSBkZXNjcmlwdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXRyaXgiPm1hdHJpeDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPllvdSBjYW4gdXNlIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX1RyYW5zbGF0ZSI+RlRfT3V0bGluZV9UcmFuc2xhdGU8L2E+IGlmIHlvdSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgb3V0bGluZSdzIHBvaW50cy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfRW1ib2xkZW4iPkZUX091dGxpbmVfRW1ib2xkZW48L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9FbWJvbGRlbjwvYj4oIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgICBzdHJlbmd0aCApOworPC9wcmU+CisKKzxwPkVtYm9sZGVuIGFuIG91dGxpbmUuIFRoZSBuZXcgb3V0bGluZSB3aWxsIGJlIGF0IG1vc3QgNCZuYnNwO3RpbWVzICZsc3F1bztzdHJlbmd0aCZyc3F1bzsgcGl4ZWxzIHdpZGVyIGFuZCBoaWdoZXIuIFlvdSBtYXkgdGhpbmsgb2YgdGhlIGxlZnQgYW5kIGJvdHRvbSBib3JkZXJzIGFzIHVuY2hhbmdlZC48L3A+Cis8cD5OZWdhdGl2ZSAmbHNxdW87c3RyZW5ndGgmcnNxdW87IHZhbHVlcyB0byByZWR1Y2UgdGhlIG91dGxpbmUgdGhpY2tuZXNzIGFyZSBwb3NzaWJsZSBhbHNvLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgdGFyZ2V0IG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cmVuZ3RoIj5zdHJlbmd0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQuIEV4cHJlc3NlZCBpbiAyNi42IHBpeGVsIGZvcm1hdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHVzZWQgYWxnb3JpdGhtIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSB0aGlja25lc3Mgb2YgdGhlIGdseXBoIGRvZXNuJ3QgY2hhbmdlIHRoZSBudW1iZXIgb2YgcG9pbnRzOyB0aGlzIG1lYW5zIHRoYXQgY2VydGFpbiBzaXR1YXRpb25zIGxpa2UgYWN1dGUgYW5nbGVzIG9yIGludGVyc2VjdGlvbnMgYXJlIHNvbWV0aW1lcyBoYW5kbGVkIGluY29ycmVjdGx5LjwvcD4KKzxwPklmIHlvdSBuZWVkICZsc3F1bztiZXR0ZXImcnNxdW87IG1ldHJpY3MgdmFsdWVzIHlvdSBzaG91bGQgY2FsbCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9HZXRfQ0JveCI+RlRfT3V0bGluZV9HZXRfQ0JveDwvYT4gb3IgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfR2V0X0JCb3giPkZUX091dGxpbmVfR2V0X0JCb3g8L2E+LjwvcD4KKzxwPkV4YW1wbGUgY2FsbDo8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgRlRfTG9hZF9HbHlwaCggZmFjZSwgaW5kZXgsIEZUX0xPQURfREVGQVVMVCApOyAgICAgICAgICAgICAgICAgICAKKyAgaWYgKCBmYWNlLSZndDtzbG90LSZndDtmb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKSAgICAgICAgICAgICAKKyAgICBGVF9PdXRsaW5lX0VtYm9sZGVuKCAmYW1wO2ZhY2UtJmd0O3Nsb3QtJmd0O291dGxpbmUsIHN0cmVuZ3RoICk7ICAgICAgICAgCis8L3ByZT4KKzxwPlRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMsIGZvbnQgc2NhbGluZyB2YWx1ZXMgbXVzdCBiZSBzZXQgd2l0aCBmdW5jdGlvbnMgbGlrZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiBiZWZvcmUgY2FsbGluZyBGVF9SZW5kZXJfR2x5cGguPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0VtYm9sZGVuWFkiPkZUX091dGxpbmVfRW1ib2xkZW5YWTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX09VVExJTkVfSCAoZnRvdXRsbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9PdXRsaW5lX0VtYm9sZGVuWFk8L2I+KCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT4qICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgICB4c3RyZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgICAgIHlzdHJlbmd0aCApOworPC9wcmU+CisKKzxwPkVtYm9sZGVuIGFuIG91dGxpbmUuIFRoZSBuZXcgb3V0bGluZSB3aWxsIGJlICZsc3F1bzt4c3RyZW5ndGgmcnNxdW87IHBpeGVscyB3aWRlciBhbmQgJmxzcXVvO3lzdHJlbmd0aCZyc3F1bzsgcGl4ZWxzIGhpZ2hlci4gT3RoZXJ3aXNlLCBpdCBpcyBzaW1pbGFyIHRvIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX0VtYm9sZGVuIj5GVF9PdXRsaW5lX0VtYm9sZGVuPC9hPiwgd2hpY2ggdXNlcyB0aGUgc2FtZSBzdHJlbmd0aCBpbiBib3RoIGRpcmVjdGlvbnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX1JldmVyc2UiPkZUX091dGxpbmVfUmV2ZXJzZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX09VVExJTkVfSCAoZnRvdXRsbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX091dGxpbmVfUmV2ZXJzZTwvYj4oIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiogIG91dGxpbmUgKTsKKzwvcHJlPgorCis8cD5SZXZlcnNlIHRoZSBkcmF3aW5nIGRpcmVjdGlvbiBvZiBhbiBvdXRsaW5lLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgZmlsbCBjb252ZW50aW9ucyBmb3IgbWlycm9yZWQgZ2x5cGhzLjwvcD4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBvdXRsaW5lIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBiaXQgZmxhZyA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfUkVWRVJTRV9GSUxMPC9hPiBpbiB0aGUgb3V0bGluZSdzICZsc3F1bztmbGFncyZyc3F1bzsgZmllbGQuPC9wPgorPHA+SXQgc2hvdWxkbid0IGJlIHVzZWQgYnkgYSBub3JtYWwgY2xpZW50IGFwcGxpY2F0aW9uLCB1bmxlc3MgaXQga25vd3Mgd2hhdCBpdCBpcyBkb2luZy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfQ2hlY2siPkZUX091dGxpbmVfQ2hlY2s8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9DaGVjazwvYj4oIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiogIG91dGxpbmUgKTsKKzwvcHJlPgorCis8cD5DaGVjayB0aGUgY29udGVudHMgb2YgYW4gb3V0bGluZSBkZXNjcmlwdG9yLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHNvdXJjZSBvdXRsaW5lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0dldF9DQm94Ij5GVF9PdXRsaW5lX0dldF9DQm94PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+ICkKKyAgPGI+RlRfT3V0bGluZV9HZXRfQ0JveDwvYj4oIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQkJveCI+RlRfQkJveDwvYT4gICAgICAgICAgICphY2JveCApOworPC9wcmU+CisKKzxwPlJldHVybiBhbiBvdXRsaW5lJ3MgJmxzcXVvO2NvbnRyb2wgYm94JnJzcXVvOy4gVGhlIGNvbnRyb2wgYm94IGVuY2xvc2VzIGFsbCB0aGUgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIELDqXppZXIgY29udHJvbCBwb2ludHMuIFRob3VnaCBpdCBjb2luY2lkZXMgd2l0aCB0aGUgZXhhY3QgYm91bmRpbmcgYm94IGZvciBtb3N0IGdseXBocywgaXQgY2FuIGJlIHNsaWdodGx5IGxhcmdlciBpbiBzb21lIHNpdHVhdGlvbnMgKGxpa2Ugd2hlbiByb3RhdGluZyBhbiBvdXRsaW5lIHRoYXQgY29udGFpbnMgQsOpemllciBvdXRzaWRlIGFyY3MpLjwvcD4KKzxwPkNvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZyBib3ggY2FuIHRha2UgbXVjaCBtb3JlIHRpbWUgYXMgaXQgbmVlZHMgdG8gd2FsayBvdmVyIGFsbCBzZWdtZW50cyBhbmQgYXJjcyBpbiB0aGUgb3V0bGluZS4gVG8gZ2V0IHRoZSBsYXR0ZXIsIHlvdSBjYW4gdXNlIHRoZSAmbHNxdW87ZnRiYm94JnJzcXVvOyBjb21wb25lbnQsIHdoaWNoIGlzIGRlZGljYXRlZCB0byB0aGlzIHNpbmdsZSB0YXNrLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhY2JveCI+YWNib3g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgb3V0bGluZSdzIGNvbnRyb2wgYm94LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlNlZSA8YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sI0ZUX0dseXBoX0dldF9DQm94Ij5GVF9HbHlwaF9HZXRfQ0JveDwvYT4gZm9yIGEgZGlzY3Vzc2lvbiBvZiB0cmlja3kgZm9udHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0dldF9CQm94Ij5GVF9PdXRsaW5lX0dldF9CQm94PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQkJPWF9IIChmdGJib3guaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9HZXRfQkJveDwvYj4oIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JCb3giPkZUX0JCb3g8L2E+ICAgICAqYWJib3ggKTsKKzwvcHJlPgorCis8cD5Db21wdXRlIHRoZSBleGFjdCBib3VuZGluZyBib3ggb2YgYW4gb3V0bGluZS4gVGhpcyBpcyBzbG93ZXIgdGhhbiBjb21wdXRpbmcgdGhlIGNvbnRyb2wgYm94LiBIb3dldmVyLCBpdCB1c2VzIGFuIGFkdmFuY2VkIGFsZ29yaXRobSB0aGF0IHJldHVybnMgPGk+dmVyeTwvaT4gcXVpY2tseSB3aGVuIHRoZSB0d28gYm94ZXMgY29pbmNpZGUuIE90aGVyd2lzZSwgdGhlIG91dGxpbmUgQsOpemllciBhcmNzIGFyZSB0cmF2ZXJzZWQgdG8gZXh0cmFjdCB0aGVpciBleHRyZW1hLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWJib3giPmFiYm94PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG91dGxpbmUncyBleGFjdCBib3VuZGluZyBib3guPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPklmIHRoZSBmb250IGlzIHRyaWNreSBhbmQgdGhlIGdseXBoIGhhcyBiZWVuIGxvYWRlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX05PX1NDQUxFPC9hPiwgdGhlIHJlc3VsdGluZyBCQm94IGlzIG1lYW5pbmdsZXNzLiBUbyBnZXQgcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHRoZSBCQm94IGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSBnbHlwaCBhdCBhIGxhcmdlIHBwZW0gdmFsdWUgKHNvIHRoYXQgdGhlIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zIGNhbiBwcm9wZXJseSBzaGlmdCBhbmQgc2NhbGUgdGhlIHN1YmdseXBocyksIHRoZW4gZXh0cmFjdGluZyB0aGUgQkJveCwgd2hpY2ggY2FuIGJlIGV2ZW50dWFsbHkgY29udmVydGVkIGJhY2sgdG8gZm9udCB1bml0cy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfR2V0X0JpdG1hcCI+RlRfT3V0bGluZV9HZXRfQml0bWFwPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX091dGxpbmVfR2V0X0JpdG1hcDwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPiogICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JpdG1hcCI+RlRfQml0bWFwPC9hPiAgKmFiaXRtYXAgKTsKKzwvcHJlPgorCis8cD5SZW5kZXIgYW4gb3V0bGluZSB3aXRoaW4gYSBiaXRtYXAuIFRoZSBvdXRsaW5lJ3MgaW1hZ2UgaXMgc2ltcGx5IE9SLWVkIHRvIHRoZSB0YXJnZXQgYml0bWFwLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxpYnJhcnkiPmxpYnJhcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFiaXRtYXAiPmFiaXRtYXA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBiaXRtYXAgZGVzY3JpcHRvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBDUkVBVEUgdGhlIGJpdG1hcCwgaXQgb25seSByZW5kZXJzIGFuIG91dGxpbmUgaW1hZ2Ugd2l0aGluIHRoZSBvbmUgeW91IHBhc3MgdG8gaXQhIENvbnNlcXVlbnRseSwgdGhlIHZhcmlvdXMgZmllbGRzIGluICZsc3F1bzthYml0bWFwJnJzcXVvOyBzaG91bGQgYmUgc2V0IGFjY29yZGluZ2x5LjwvcD4KKzxwPkl0IHdpbGwgdXNlIHRoZSByYXN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmYXVsdCBnbHlwaCBmb3JtYXQuPC9wPgorPHA+VGhlIHZhbHVlIG9mIHRoZSAmbHNxdW87bnVtX2dyYXlzJnJzcXVvOyBmaWVsZCBpbiAmbHNxdW87YWJpdG1hcCZyc3F1bzsgaXMgaWdub3JlZC4gSWYgeW91IHNlbGVjdCB0aGUgZ3JheS1sZXZlbCByYXN0ZXJpemVyLCBhbmQgeW91IHdhbnQgbGVzcyB0aGFuIDI1NiBncmF5IGxldmVscywgeW91IGhhdmUgdG8gdXNlIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lX1JlbmRlciI+RlRfT3V0bGluZV9SZW5kZXI8L2E+IGRpcmVjdGx5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3V0bGluZV9SZW5kZXIiPkZUX091dGxpbmVfUmVuZGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX091dGxpbmVfUmVuZGVyPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTGlicmFyeSI+RlRfTGlicmFyeTwvYT4gICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfUGFyYW1zIj5GVF9SYXN0ZXJfUGFyYW1zPC9hPiogIHBhcmFtcyApOworPC9wcmU+CisKKzxwPlJlbmRlciBhbiBvdXRsaW5lIHdpdGhpbiBhIGJpdG1hcCB1c2luZyB0aGUgY3VycmVudCBzY2FuLWNvbnZlcnQuIFRoaXMgZnVuY3Rpb24gdXNlcyBhbiA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX1BhcmFtcyI+RlRfUmFzdGVyX1BhcmFtczwvYT4gc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LCBhbGxvd2luZyBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIGRpcmVjdCBjb21wb3NpdGlvbiwgdHJhbnNsdWNlbmN5LCBldGMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib3V0bGluZSI+b3V0bGluZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUgZGVzY3JpcHRvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icGFyYW1zIj5wYXJhbXM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gYW4gPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9QYXJhbXMiPkZUX1Jhc3Rlcl9QYXJhbXM8L2E+IHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSByZW5kZXJpbmcgb3BlcmF0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCBob3cgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9QYXJhbXMiPkZUX1Jhc3Rlcl9QYXJhbXM8L2E+IHdvcmtzIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLjwvcD4KKzxwPlRoZSBmaWVsZCAmbHNxdW87cGFyYW1zLnNvdXJjZSZyc3F1bzsgd2lsbCBiZSBzZXQgdG8gJmxzcXVvO291dGxpbmUmcnNxdW87IGJlZm9yZSB0aGUgc2NhbiBjb252ZXJ0ZXIgaXMgY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IHRoZSB2YWx1ZSB5b3UgZ2l2ZSB0byBpdCBpcyBhY3R1YWxseSBpZ25vcmVkLjwvcD4KKzxwPlRoZSBncmF5LWxldmVsIHJhc3Rlcml6ZXIgYWx3YXlzIHVzZXMgMjU2IGdyYXkgbGV2ZWxzLiBJZiB5b3Ugd2FudCBsZXNzIGdyYXkgbGV2ZWxzLCB5b3UgaGF2ZSB0byBwcm92aWRlIHlvdXIgb3duIHNwYW4gY2FsbGJhY2suIFNlZSB0aGUgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1JBU1RFUl9GTEFHX1hYWCI+RlRfUkFTVEVSX0ZMQUdfRElSRUNUPC9hPiB2YWx1ZSBvZiB0aGUgJmxzcXVvO2ZsYWdzJnJzcXVvOyBmaWVsZCBpbiB0aGUgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9QYXJhbXMiPkZUX1Jhc3Rlcl9QYXJhbXM8L2E+IHN0cnVjdHVyZSBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3V0bGluZV9EZWNvbXBvc2UiPkZUX091dGxpbmVfRGVjb21wb3NlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfT1VUTElORV9IIChmdG91dGxuLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX091dGxpbmVfRGVjb21wb3NlPC9iPiggPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KiAgICAgICAgICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfRnVuY3MiPkZUX091dGxpbmVfRnVuY3M8L2E+KiAgZnVuY19pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgICAgICAgICB1c2VyICk7Cis8L3ByZT4KKworPHA+V2FsayBvdmVyIGFuIG91dGxpbmUncyBzdHJ1Y3R1cmUgdG8gZGVjb21wb3NlIGl0IGludG8gaW5kaXZpZHVhbCBzZWdtZW50cyBhbmQgQsOpemllciBhcmNzLiBUaGlzIGZ1bmN0aW9uIGFsc28gZW1pdHMgJmxzcXVvO21vdmUgdG8mcnNxdW87IG9wZXJhdGlvbnMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIG5ldyBjb250b3VycyBpbiB0aGUgb3V0bGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJvdXRsaW5lIj5vdXRsaW5lPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgdGFyZ2V0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZ1bmNfaW50ZXJmYWNlIj5mdW5jX2ludGVyZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdGFibGUgb2YgJmxzcXVvO2VtaXR0ZXJzJnJzcXVvOywgaS5lLiwgZnVuY3Rpb24gcG9pbnRlcnMgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGggb3BlcmF0aW9ucy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+aW5vdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idXNlciI+dXNlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgdHlwZWxlc3MgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCB0byBlYWNoIGVtaXR0ZXIgZHVyaW5nIHRoZSBkZWNvbXBvc2l0aW9uLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZHVyaW5nIHRoZSBkZWNvbXBvc2l0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5BIGNvbnRvdXIgdGhhdCBjb250YWlucyBhIHNpbmdsZSBwb2ludCBvbmx5IGlzIHJlcHJlc2VudGVkIGJ5IGEgJmxzcXVvO21vdmUgdG8mcnNxdW87IG9wZXJhdGlvbiBmb2xsb3dlZCBieSAmbHNxdW87bGluZSB0byZyc3F1bzsgdG8gdGhlIHNhbWUgcG9pbnQuIEluIG1vc3QgY2FzZXMsIGl0IGlzIGJlc3QgdG8gZmlsdGVyIHRoaXMgb3V0IGJlZm9yZSB1c2luZyB0aGUgb3V0bGluZSBmb3Igc3Ryb2tpbmcgcHVycG9zZXMgKG90aGVyd2lzZSBpdCB3b3VsZCByZXN1bHQgaW4gYSB2aXNpYmxlIGRvdCB3aGVuIHJvdW5kIGNhcHMgYXJlIHVzZWQpLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfT3V0bGluZV9GdW5jcyI+RlRfT3V0bGluZV9GdW5jczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9PdXRsaW5lX0Z1bmNzXworICB7CisgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfTW92ZVRvRnVuYyI+RlRfT3V0bGluZV9Nb3ZlVG9GdW5jPC9hPiAgIG1vdmVfdG87CisgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfTGluZVRvRnVuYyI+RlRfT3V0bGluZV9MaW5lVG9GdW5jPC9hPiAgIGxpbmVfdG87CisgICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmVfQ29uaWNUb0Z1bmMiPkZUX091dGxpbmVfQ29uaWNUb0Z1bmM8L2E+ICBjb25pY190bzsKKyAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZV9DdWJpY1RvRnVuYyI+RlRfT3V0bGluZV9DdWJpY1RvRnVuYzwvYT4gIGN1YmljX3RvOworCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgICAgICAgICAgICAgICAgICBzaGlmdDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Qb3MiPkZUX1BvczwvYT4gICAgICAgICAgICAgICAgICBkZWx0YTsKKworICB9IDxiPkZUX091dGxpbmVfRnVuY3M8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHRvIGhvbGQgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyB1c2VkIGR1cmluZyBvdXRsaW5lIGRlY29tcG9zaXRpb24gaW4gb3JkZXIgdG8gZW1pdCBzZWdtZW50cywgY29uaWMsIGFuZCBjdWJpYyBCw6l6aWVycy48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibW92ZV90byI+bW92ZV90bzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSAmbHNxdW87bW92ZSB0byZyc3F1bzsgZW1pdHRlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsaW5lX3RvIj5saW5lX3RvPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNlZ21lbnQgZW1pdHRlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb25pY190byI+Y29uaWNfdG88L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc2Vjb25kLW9yZGVyIELDqXppZXIgYXJjIGVtaXR0ZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY3ViaWNfdG8iPmN1YmljX3RvPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRoaXJkLW9yZGVyIELDqXppZXIgYXJjIGVtaXR0ZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2hpZnQiPnNoaWZ0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNoaWZ0IHRoYXQgaXMgYXBwbGllZCB0byBjb29yZGluYXRlcyBiZWZvcmUgdGhleSBhcmUgc2VudCB0byB0aGUgZW1pdHRlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJkZWx0YSI+ZGVsdGE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZGVsdGEgdGhhdCBpcyBhcHBsaWVkIHRvIGNvb3JkaW5hdGVzIGJlZm9yZSB0aGV5IGFyZSBzZW50IHRvIHRoZSBlbWl0dGVyLCBidXQgYWZ0ZXIgdGhlIHNoaWZ0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSBwb2ludCBjb29yZGluYXRlcyBzZW50IHRvIHRoZSBlbWl0dGVycyBhcmUgdGhlIHRyYW5zZm9ybWVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIGNvb3JkaW5hdGVzICh0aGlzIGlzIGltcG9ydGFudCBmb3IgaGlnaCBhY2N1cmFjeSBkdXJpbmcgc2Nhbi1jb252ZXJzaW9uKS4gVGhlIHRyYW5zZm9ybWF0aW9uIGlzIHNpbXBsZTo8L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgeCcgPSAoeCAmbHQ7Jmx0OyBzaGlmdCkgLSBkZWx0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgeScgPSAoeCAmbHQ7Jmx0OyBzaGlmdCkgLSBkZWx0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzwvcHJlPgorPHA+U2V0IHRoZSB2YWx1ZXMgb2YgJmxzcXVvO3NoaWZ0JnJzcXVvOyBhbmQgJmxzcXVvO2RlbHRhJnJzcXVvOyB0byZuYnNwOzAgdG8gZ2V0IHRoZSBvcmlnaW5hbCBwb2ludCBjb29yZGluYXRlcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfTW92ZVRvRnVuYyI+RlRfT3V0bGluZV9Nb3ZlVG9GdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9PdXRsaW5lX01vdmVUb0Z1bmM8L2I+KSggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICB0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgIHVzZXIgKTsKKworI2RlZmluZSBGVF9PdXRsaW5lX01vdmVUb19GdW5jICA8Yj5GVF9PdXRsaW5lX01vdmVUb0Z1bmM8L2I+Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgJmxzcXVvO21vdmUgdG8mcnNxdW87IGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcvZGVjb21wb3NpdGlvbi48L3A+Cis8cD5BICZsc3F1bzttb3ZlIHRvJnJzcXVvOyBpcyBlbWl0dGVkIHRvIHN0YXJ0IGEgbmV3IGNvbnRvdXIgaW4gYW4gb3V0bGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0byI+dG88L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBwb2ludCBvZiB0aGUgJmxzcXVvO21vdmUgdG8mcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InVzZXIiPnVzZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgb2YgdGhlIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5FcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfTGluZVRvRnVuYyI+RlRfT3V0bGluZV9MaW5lVG9GdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9PdXRsaW5lX0xpbmVUb0Z1bmM8L2I+KSggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICB0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgIHVzZXIgKTsKKworI2RlZmluZSBGVF9PdXRsaW5lX0xpbmVUb19GdW5jICA8Yj5GVF9PdXRsaW5lX0xpbmVUb0Z1bmM8L2I+Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgJmxzcXVvO2xpbmUgdG8mcnNxdW87IGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcvZGVjb21wb3NpdGlvbi48L3A+Cis8cD5BICZsc3F1bztsaW5lIHRvJnJzcXVvOyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgc2VnbWVudCBpbiB0aGUgb3V0bGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0byI+dG88L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBwb2ludCBvZiB0aGUgJmxzcXVvO2xpbmUgdG8mcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InVzZXIiPnVzZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgb2YgdGhlIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5FcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfQ29uaWNUb0Z1bmMiPkZUX091dGxpbmVfQ29uaWNUb0Z1bmM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPgorICAoKjxiPkZUX091dGxpbmVfQ29uaWNUb0Z1bmM8L2I+KSggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9WZWN0b3IiPkZUX1ZlY3RvcjwvYT4qICBjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgIHVzZXIgKTsKKworI2RlZmluZSBGVF9PdXRsaW5lX0NvbmljVG9fRnVuYyAgPGI+RlRfT3V0bGluZV9Db25pY1RvRnVuYzwvYj4KKzwvcHJlPgorCis8cD5BIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzaWduYXR1cmUgb2YgYSAmbHNxdW87Y29uaWMgdG8mcnNxdW87IGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcgb3IgZGVjb21wb3NpdGlvbi48L3A+Cis8cD5BICZsc3F1bztjb25pYyB0byZyc3F1bzsgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHNlY29uZC1vcmRlciBCw6l6aWVyIGFyYyBpbiB0aGUgb3V0bGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb250cm9sIj5jb250cm9sPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gaW50ZXJtZWRpYXRlIGNvbnRyb2wgcG9pbnQgYmV0d2VlbiB0aGUgbGFzdCBwb3NpdGlvbiBhbmQgdGhlIG5ldyB0YXJnZXQgaW4gJmxzcXVvO3RvJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0byI+dG88L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBlbmQgcG9pbnQgb2YgdGhlIGNvbmljIGFyYy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1c2VyIj51c2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0eXBlbGVzcyBwb2ludGVyLCB3aGljaCBpcyBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyIG9mIHRoZSBkZWNvbXBvc2l0aW9uIGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PdXRsaW5lX0N1YmljVG9GdW5jIj5GVF9PdXRsaW5lX0N1YmljVG9GdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9PdXRsaW5lX0N1YmljVG9GdW5jPC9iPikoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgY29udHJvbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgY29udHJvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVmVjdG9yIj5GVF9WZWN0b3I8L2E+KiAgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICAgdXNlciApOworCisjZGVmaW5lIEZUX091dGxpbmVfQ3ViaWNUb19GdW5jICA8Yj5GVF9PdXRsaW5lX0N1YmljVG9GdW5jPC9iPgorPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhICZsc3F1bztjdWJpYyB0byZyc3F1bzsgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZyBvciBkZWNvbXBvc2l0aW9uLjwvcD4KKzxwPkEgJmxzcXVvO2N1YmljIHRvJnJzcXVvOyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgdGhpcmQtb3JkZXIgQsOpemllciBhcmMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY29udHJvbDEiPmNvbnRyb2wxPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBmaXJzdCBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY29udHJvbDIiPmNvbnRyb2wyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgQsOpemllciBjb250cm9sIHBvaW50LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRvIj50bzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGVuZCBwb2ludC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1c2VyIj51c2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0eXBlbGVzcyBwb2ludGVyLCB3aGljaCBpcyBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyIG9mIHRoZSBkZWNvbXBvc2l0aW9uIGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PcmllbnRhdGlvbiI+RlRfT3JpZW50YXRpb248L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9PVVRMSU5FX0ggKGZ0b3V0bG4uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiAgRlRfT3JpZW50YXRpb25fCisgIHsKKyAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUiPkZUX09SSUVOVEFUSU9OX1RSVUVUWVBFPC9hPiAgID0gMCwKKyAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVCI+RlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVDwvYT4gPSAxLAorICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PUklFTlRBVElPTl9GSUxMX1JJR0hUIj5GVF9PUklFTlRBVElPTl9GSUxMX1JJR0hUPC9hPiA9IDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PUklFTlRBVElPTl9UUlVFVFlQRSI+RlRfT1JJRU5UQVRJT05fVFJVRVRZUEU8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PUklFTlRBVElPTl9GSUxMX0xFRlQiPkZUX09SSUVOVEFUSU9OX0ZJTExfTEVGVDwvYT4gID0gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQiPkZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQ8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PUklFTlRBVElPTl9OT05FIj5GVF9PUklFTlRBVElPTl9OT05FPC9hPgorCisgIH0gPGI+RlRfT3JpZW50YXRpb248L2I+OworPC9wcmU+CisKKzxwPkEgbGlzdCBvZiB2YWx1ZXMgdXNlZCB0byBkZXNjcmliZSBhbiBvdXRsaW5lJ3MgY29udG91ciBvcmllbnRhdGlvbi48L3A+Cis8cD5UaGUgVHJ1ZVR5cGUgYW5kIFBvc3RTY3JpcHQgc3BlY2lmaWNhdGlvbnMgdXNlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0byBkZXRlcm1pbmUgd2hldGhlciBvdXRsaW5lIGNvbnRvdXJzIHNob3VsZCBiZSBmaWxsZWQgb3IgdW5maWxsZWQuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIj5GVF9PUklFTlRBVElPTl9UUlVFVFlQRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFjY29yZGluZyB0byB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiwgY2xvY2t3aXNlIGNvbnRvdXJzIG11c3QgYmUgZmlsbGVkLCBhbmQgY291bnRlci1jbG9ja3dpc2Ugb25lcyBtdXN0IGJlIHVuZmlsbGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQiPkZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BY2NvcmRpbmcgdG8gdGhlIFBvc3RTY3JpcHQgc3BlY2lmaWNhdGlvbiwgY291bnRlci1jbG9ja3dpc2UgY29udG91cnMgbXVzdCBiZSBmaWxsZWQsIGFuZCBjbG9ja3dpc2Ugb25lcyBtdXN0IGJlIHVuZmlsbGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX09SSUVOVEFUSU9OX0ZJTExfUklHSFQiPkZUX09SSUVOVEFUSU9OX0ZJTExfUklHSFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGlzIGlkZW50aWNhbCB0byA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3JpZW50YXRpb24iPkZUX09SSUVOVEFUSU9OX1RSVUVUWVBFPC9hPiwgYnV0IGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBpbiBUcnVlVHlwZSwgZXZlcnl0aGluZyB0aGF0IGlzIHRvIHRoZSByaWdodCBvZiB0aGUgZHJhd2luZyBkaXJlY3Rpb24gb2YgYSBjb250b3VyIG11c3QgYmUgZmlsbGVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX09SSUVOVEFUSU9OX0ZJTExfTEVGVCI+RlRfT1JJRU5UQVRJT05fRklMTF9MRUZUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBpcyBpZGVudGljYWwgdG8gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUPC9hPiwgYnV0IGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBpbiBQb3N0U2NyaXB0LCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGRyYXdpbmcgZGlyZWN0aW9uIG9mIGEgY29udG91ciBtdXN0IGJlIGZpbGxlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9PUklFTlRBVElPTl9OT05FIj5GVF9PUklFTlRBVElPTl9OT05FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG9yaWVudGF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiBUaGF0IGlzLCBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGdseXBoIGhhdmUgZGlmZmVyZW50IG9yaWVudGF0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uIj5GVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX09VVExJTkVfSCAoZnRvdXRsbi5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PcmllbnRhdGlvbiI+RlRfT3JpZW50YXRpb248L2E+ICkKKyAgPGI+RlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb248L2I+KCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3V0bGluZSI+RlRfT3V0bGluZTwvYT4qICBvdXRsaW5lICk7Cis8L3ByZT4KKworPHA+VGhpcyBmdW5jdGlvbiBhbmFseXplcyBhIGdseXBoIG91dGxpbmUgYW5kIHRyaWVzIHRvIGNvbXB1dGUgaXRzIGZpbGwgb3JpZW50YXRpb24gKHNlZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT3JpZW50YXRpb24iPkZUX09yaWVudGF0aW9uPC9hPikuIFRoaXMgaXMgZG9uZSBieSBpbnRlZ3JhdGluZyB0aGUgdG90YWwgYXJlYSBjb3ZlcmVkIGJ5IHRoZSBvdXRsaW5lLiBUaGUgcG9zaXRpdmUgaW50ZWdyYWwgY29ycmVzcG9uZHMgdG8gdGhlIGNsb2Nrd2lzZSBvcmllbnRhdGlvbiBhbmQgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUPC9hPiBpcyByZXR1cm5lZC4gVGhlIG5lZ2F0aXZlIGludGVncmFsIGNvcnJlc3BvbmRzIHRvIHRoZSBjb3VudGVyLWNsb2Nrd2lzZSBvcmllbnRhdGlvbiBhbmQgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9UUlVFVFlQRTwvYT4gaXMgcmV0dXJuZWQuPC9wPgorPHA+Tm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09yaWVudGF0aW9uIj5GVF9PUklFTlRBVElPTl9UUlVFVFlQRTwvYT4gZm9yIGVtcHR5IG91dGxpbmVzLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im91dGxpbmUiPm91dGxpbmU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIG91dGxpbmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgb3JpZW50YXRpb24uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX05PTkUiPkZUX09VVExJTkVfTk9ORTwvYT4gICAgICAgICAgICAgMHgwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX09XTkVSIj5GVF9PVVRMSU5FX09XTkVSPC9hPiAgICAgICAgICAgIDB4MQorI2RlZmluZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9FVkVOX09ERF9GSUxMIj5GVF9PVVRMSU5FX0VWRU5fT0REX0ZJTEw8L2E+ICAgIDB4MgorI2RlZmluZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwiPkZUX09VVExJTkVfUkVWRVJTRV9GSUxMPC9hPiAgICAgMHg0CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUyI+RlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFM8L2E+ICAweDgKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMiPkZUX09VVExJTkVfU01BUlRfRFJPUE9VVFM8L2E+ICAgMHgxMAorI2RlZmluZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9JTkNMVURFX1NUVUJTIj5GVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlM8L2E+ICAgIDB4MjAKKworI2RlZmluZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTiI+RlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTjwvYT4gICAweDEwMAorI2RlZmluZSA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9TSU5HTEVfUEFTUyI+RlRfT1VUTElORV9TSU5HTEVfUEFTUzwvYT4gICAgICAweDIwMAorCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPkZUX09VVExJTkVfWFhYPC9iPicgdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X291dGxpbmVfbm9uZSAgICAgICAgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9OT05FIj5GVF9PVVRMSU5FX05PTkU8L2E+CisjZGVmaW5lIGZ0X291dGxpbmVfb3duZXIgICAgICAgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9PV05FUiI+RlRfT1VUTElORV9PV05FUjwvYT4KKyNkZWZpbmUgZnRfb3V0bGluZV9ldmVuX29kZF9maWxsICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX0VWRU5fT0REX0ZJTEwiPkZUX09VVExJTkVfRVZFTl9PRERfRklMTDwvYT4KKyNkZWZpbmUgZnRfb3V0bGluZV9yZXZlcnNlX2ZpbGwgICAgIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1JFVkVSU0VfRklMTCI+RlRfT1VUTElORV9SRVZFUlNFX0ZJTEw8L2E+CisjZGVmaW5lIGZ0X291dGxpbmVfaWdub3JlX2Ryb3BvdXRzICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMiPkZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTPC9hPgorI2RlZmluZSBmdF9vdXRsaW5lX2hpZ2hfcHJlY2lzaW9uICAgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfSElHSF9QUkVDSVNJT04iPkZUX09VVExJTkVfSElHSF9QUkVDSVNJT048L2E+CisjZGVmaW5lIGZ0X291dGxpbmVfc2luZ2xlX3Bhc3MgICAgICA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9TSU5HTEVfUEFTUyI+RlRfT1VUTElORV9TSU5HTEVfUEFTUzwvYT4KKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2UgZm9yIHRoZSBmbGFncyBpbiBhbiBvdXRsaW5lJ3MgJmxzcXVvO2ZsYWdzJnJzcXVvOyBmaWVsZC48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9OT05FIj5GVF9PVVRMSU5FX05PTkU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5WYWx1ZSZuYnNwOzAgaXMgcmVzZXJ2ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9PV05FUiI+RlRfT1VUTElORV9PV05FUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklmIHNldCwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBvdXRsaW5lJ3MgZmllbGQgYXJyYXlzIChpLmUuLCAmbHNxdW87cG9pbnRzJnJzcXVvOywgJmxzcXVvO2ZsYWdzJnJzcXVvOywgYW5kICZsc3F1bztjb250b3VycyZyc3F1bzspIGFyZSAmbHNxdW87b3duZWQmcnNxdW87IGJ5IHRoZSBvdXRsaW5lIG9iamVjdCwgYW5kIHNob3VsZCB0aHVzIGJlIGZyZWVkIHdoZW4gaXQgaXMgZGVzdHJveWVkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX09VVExJTkVfRVZFTl9PRERfRklMTCI+RlRfT1VUTElORV9FVkVOX09ERF9GSUxMPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QnkgZGVmYXVsdCwgb3V0bGluZXMgYXJlIGZpbGxlZCB1c2luZyB0aGUgbm9uLXplcm8gd2luZGluZyBydWxlLiBJZiBzZXQgdG8gMSwgdGhlIG91dGxpbmUgd2lsbCBiZSBmaWxsZWQgdXNpbmcgdGhlIGV2ZW4tb2RkIGZpbGwgcnVsZSAob25seSB3b3JrcyB3aXRoIHRoZSBzbW9vdGggcmFzdGVyaXplcikuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwiPkZUX09VVExJTkVfUkVWRVJTRV9GSUxMPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QnkgZGVmYXVsdCwgb3V0c2lkZSBjb250b3VycyBvZiBhbiBvdXRsaW5lIGFyZSBvcmllbnRlZCBpbiBjbG9jay13aXNlIGRpcmVjdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbi4gVGhpcyBmbGFnIGlzIHNldCBpZiB0aGUgb3V0bGluZSB1c2VzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gKHR5cGljYWxseSBmb3IgVHlwZSZuYnNwOzEgZm9udHMpLiBUaGlzIGZsYWcgaXMgaWdub3JlZCBieSB0aGUgc2NhbiBjb252ZXJ0ZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMiPkZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QnkgZGVmYXVsdCwgdGhlIHNjYW4gY29udmVydGVyIHdpbGwgdHJ5IHRvIGRldGVjdCBkcm9wLW91dHMgaW4gYW4gb3V0bGluZSBhbmQgY29ycmVjdCB0aGUgZ2x5cGggYml0bWFwIHRvIGVuc3VyZSBjb25zaXN0ZW50IHNoYXBlIGNvbnRpbnVpdHkuIElmIHNldCwgdGhpcyBmbGFnIGhpbnRzIHRoZSBzY2FuLWxpbmUgY29udmVydGVyIHRvIGlnbm9yZSBzdWNoIGNhc2VzLiBTZWUgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUyI+RlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlNlbGVjdCBzbWFydCBkcm9wb3V0IGNvbnRyb2wuIElmIHVuc2V0LCB1c2Ugc2ltcGxlIGRyb3BvdXQgY29udHJvbC4gSWdub3JlZCBpZiA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTPC9hPiBpcyBzZXQuIFNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMiPkZUX09VVExJTkVfSU5DTFVERV9TVFVCUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklmIHNldCwgdHVybiBwaXhlbHMgb24gZm9yICZsc3F1bztzdHVicyZyc3F1bzssIG90aGVyd2lzZSBleGNsdWRlIHRoZW0uIElnbm9yZWQgaWYgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfWFhYIj5GVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUzwvYT4gaXMgc2V0LiBTZWUgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTiI+RlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciBzaG91bGQgdHJ5IHRvIGNvbnZlcnQgdGhpcyBvdXRsaW5lIHRvIGJpdG1hcHMgd2l0aCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBxdWFsaXR5LiBJdCBpcyB0eXBpY2FsbHkgc2V0IGZvciBzbWFsbCBjaGFyYWN0ZXIgc2l6ZXMuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgYSBoaW50IHRoYXQgbWlnaHQgYmUgY29tcGxldGVseSBpZ25vcmVkIGJ5IGEgZ2l2ZW4gc2Nhbi1jb252ZXJ0ZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfT1VUTElORV9TSU5HTEVfUEFTUyI+RlRfT1VUTElORV9TSU5HTEVfUEFTUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmxhZyBpcyBzZXQgdG8gZm9yY2UgYSBnaXZlbiBzY2FuLWNvbnZlcnRlciB0byBvbmx5IHVzZSBhIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG91dGxpbmUgdG8gcmVuZGVyIGEgYml0bWFwIGdseXBoIGltYWdlLiBOb3JtYWxseSwgaXQgaXMgc2V0IGZvciB2ZXJ5IGxhcmdlIGNoYXJhY3RlciBzaXplcy4gSXQgaXMgb25seSBhIGhpbnQgdGhhdCBtaWdodCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSBnaXZlbiBzY2FuLWNvbnZlcnRlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgZmxhZ3MgPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX09VVExJTkVfWFhYIj5GVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUzwvYT4sIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PVVRMSU5FX1hYWCI+RlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUzwvYT4sIGFuZCA8YSBocmVmPSJmdDItb3V0bGluZV9wcm9jZXNzaW5nLmh0bWwjRlRfT1VUTElORV9YWFgiPkZUX09VVExJTkVfSU5DTFVERV9TVFVCUzwvYT4gYXJlIGlnbm9yZWQgYnkgdGhlIHNtb290aCByYXN0ZXJpemVyLjwvcD4KKzxwPlRoZXJlIGV4aXN0cyBhIHNlY29uZCBtZWNoYW5pc20gdG8gcGFzcyB0aGUgZHJvcC1vdXQgbW9kZSB0byB0aGUgQi9XIHJhc3Rlcml6ZXI7IHNlZSB0aGUgJmxzcXVvO3RhZ3MmcnNxdW87IGZpZWxkIGluIDxhIGhyZWY9ImZ0Mi1vdXRsaW5lX3Byb2Nlc3NpbmcuaHRtbCNGVF9PdXRsaW5lIj5GVF9PdXRsaW5lPC9hPi48L3A+Cis8cD5QbGVhc2UgcmVmZXIgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAmbHNxdW87U0NBTlRZUEUmcnNxdW87IGluc3RydWN0aW9uIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIChpbiBmaWxlICZsc3F1bzt0dGluc3QxLmRvYyZyc3F1bzspIGhvdyBzaW1wbGUgZHJvcC1vdXRzLCBzbWFydCBkcm9wLW91dHMsIGFuZCBzdHVicyBhcmUgZGVmaW5lZC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1wZnJfZm9udHMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItcGZyX2ZvbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0OTZjYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItcGZyX2ZvbnRzLmh0bWwKQEAgLTAsMCArMSwyNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5QRlIgRm9udHM8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0X1BGUl9NZXRyaWNzIj5GVF9HZXRfUEZSX01ldHJpY3M8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9QRlJfS2VybmluZyI+RlRfR2V0X1BGUl9LZXJuaW5nPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfUEZSX0FkdmFuY2UiPkZUX0dldF9QRlJfQWR2YW5jZTwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgUEZSLXNwZWNpZmljIGZ1bmN0aW9ucy48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfUEZSX01ldHJpY3MiPkZUX0dldF9QRlJfTWV0cmljczwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1BGUl9IIChmdHBmci5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfUEZSX01ldHJpY3M8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgKmFvdXRsaW5lX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAqYW1ldHJpY3NfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAqYW1ldHJpY3NfeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAqYW1ldHJpY3NfeV9zY2FsZSApOworPC9wcmU+CisKKzxwPlJldHVybiB0aGUgb3V0bGluZSBhbmQgbWV0cmljcyByZXNvbHV0aW9ucyBvZiBhIGdpdmVuIFBGUiBmYWNlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5IYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuIEl0IGNhbiBiZSBhIG5vbi1QRlIgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFvdXRsaW5lX3Jlc29sdXRpb24iPmFvdXRsaW5lX3Jlc29sdXRpb248L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5PdXRsaW5lIHJlc29sdXRpb24uIFRoaXMgaXMgZXF1aXZhbGVudCB0byAmbHNxdW87ZmFjZS0mZ3Q7dW5pdHNfcGVyX0VNJnJzcXVvOyBmb3Igbm9uLVBGUiBmb250cy4gT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW1ldHJpY3NfcmVzb2x1dGlvbiI+YW1ldHJpY3NfcmVzb2x1dGlvbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1ldHJpY3MgcmVzb2x1dGlvbi4gVGhpcyBpcyBlcXVpdmFsZW50IHRvICZsc3F1bztvdXRsaW5lX3Jlc29sdXRpb24mcnNxdW87IGZvciBub24tUEZSIGZvbnRzLiBPcHRpb25hbCAocGFyYW1ldGVyIGNhbiBiZSBOVUxMKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbWV0cmljc194X3NjYWxlIj5hbWV0cmljc194X3NjYWxlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSAxNi4xNiBmaXhlZC1wb2ludCBudW1iZXIgdXNlZCB0byBzY2FsZSBkaXN0YW5jZSBleHByZXNzZWQgaW4gbWV0cmljcyB1bml0cyB0byBkZXZpY2Ugc3ViLXBpeGVscy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvICZsc3F1bztmYWNlLSZndDtzaXplLSZndDt4X3NjYWxlJnJzcXVvOywgYnV0IGZvciBtZXRyaWNzIG9ubHkuIE9wdGlvbmFsIChwYXJhbWV0ZXIgY2FuIGJlIE5VTEwpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFtZXRyaWNzX3lfc2NhbGUiPmFtZXRyaWNzX3lfc2NhbGU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5TYW1lIGFzICZsc3F1bzthbWV0cmljc194X3NjYWxlJnJzcXVvOyBidXQgZm9yIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24uIG9wdGlvbmFsIChwYXJhbWV0ZXIgY2FuIGJlIE5VTEwpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5JZiB0aGUgaW5wdXQgZmFjZSBpcyBub3QgYSBQRlIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IuIEhvd2V2ZXIsIGluIGFsbCBjYXNlcywgaXQgd2lsbCByZXR1cm4gdmFsaWQgdmFsdWVzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1BGUl9LZXJuaW5nIj5GVF9HZXRfUEZSX0tlcm5pbmc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9QRlJfSCAoZnRwZnIuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X1BGUl9LZXJuaW5nPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiAgKmF2ZWN0b3IgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdGhlIGtlcm5pbmcgcGFpciBjb3JyZXNwb25kaW5nIHRvIHR3byBnbHlwaHMgaW4gYSBQRlIgZmFjZS4gVGhlIGRpc3RhbmNlIGlzIGV4cHJlc3NlZCBpbiBtZXRyaWNzIHVuaXRzLCB1bmxpa2UgdGhlIHJlc3VsdCBvZiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9HZXRfS2VybmluZyI+RlRfR2V0X0tlcm5pbmc8L2E+LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsZWZ0Ij5sZWZ0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kZXggb2YgdGhlIGxlZnQgZ2x5cGguPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmlnaHQiPnJpZ2h0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SW5kZXggb2YgdGhlIHJpZ2h0IGdseXBoLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYXZlY3RvciI+YXZlY3RvcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEga2VybmluZyB2ZWN0b3IuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybiBkaXN0YW5jZXMgaW4gb3JpZ2luYWwgUEZSIG1ldHJpY3MgdW5pdHMuIFRoaXMgaXMgdW5saWtlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9LZXJuaW5nIj5GVF9HZXRfS2VybmluZzwvYT4gd2l0aCB0aGUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfS2VybmluZ19Nb2RlIj5GVF9LRVJOSU5HX1VOU0NBTEVEPC9hPiBtb2RlLCB3aGljaCBhbHdheXMgcmV0dXJucyBkaXN0YW5jZXMgY29udmVydGVkIHRvIG91dGxpbmUgdW5pdHMuPC9wPgorPHA+WW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSAmbHNxdW87eF9zY2FsZSZyc3F1bzsgYW5kICZsc3F1bzt5X3NjYWxlJnJzcXVvOyBwYXJhbWV0ZXJzIHJldHVybmVkIGJ5IDxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCNGVF9HZXRfUEZSX01ldHJpY3MiPkZUX0dldF9QRlJfTWV0cmljczwvYT4gdG8gc2NhbGUgdGhlc2UgdG8gZGV2aWNlIHN1Yi1waXhlbHMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfUEZSX0FkdmFuY2UiPkZUX0dldF9QRlJfQWR2YW5jZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1BGUl9IIChmdHBmci5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfUEZSX0FkdmFuY2U8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfUG9zIj5GVF9Qb3M8L2E+ICAgKmFhZHZhbmNlICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIGEgZ2l2ZW4gZ2x5cGggYWR2YW5jZSwgZXhwcmVzc2VkIGluIG9yaWdpbmFsIG1ldHJpY3MgdW5pdHMsIGZyb20gYSBQRlIgZm9udC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2luZGV4Ij5naW5kZXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggaW5kZXguPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhYWR2YW5jZSI+YWFkdmFuY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ2x5cGggYWR2YW5jZSBpbiBtZXRyaWNzIHVuaXRzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvO3hfc2NhbGUmcnNxdW87IG9yICZsc3F1bzt5X3NjYWxlJnJzcXVvOyByZXN1bHRzIG9mIDxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCNGVF9HZXRfUEZSX01ldHJpY3MiPkZUX0dldF9QRlJfTWV0cmljczwvYT4gdG8gY29udmVydCB0aGUgYWR2YW5jZSB0byBkZXZpY2Ugc3ViLXBpeGVscyAoaS5lLiwgMS82NHRoIG9mIHBpeGVscykuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItcXVpY2tfYWR2YW5jZS5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1xdWlja19hZHZhbmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4ZTA0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItcXVpY2tfYWR2YW5jZS5odG1sCkBAIC0wLDAgKzEsMjI0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+UXVpY2sgcmV0cmlldmFsIG9mIGFkdmFuY2UgdmFsdWVzPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0dldF9BZHZhbmNlIj5GVF9HZXRfQWR2YW5jZTwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQWR2YW5jZXMiPkZUX0dldF9BZHZhbmNlczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSI+RlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWTwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgdG8gcXVpY2tseSBleHRyYWN0IGFkdmFuY2UgdmFsdWVzIHdpdGhvdXQgaGFuZGxpbmcgZ2x5cGggb3V0bGluZXMsIGlmIHBvc3NpYmxlLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9BZHZhbmNlIj5GVF9HZXRfQWR2YW5jZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0FEVkFOQ0VTX0ggKGZ0YWR2YW5jLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9BZHZhbmNlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludDMyIj5GVF9JbnQzMjwvYT4gICBsb2FkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgKnBhZHZhbmNlICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIGFkdmFuY2UgdmFsdWUgb2YgYSBnaXZlbiBnbHlwaCBvdXRsaW5lIGluIGFuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc291cmNlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+IGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJnaW5kZXgiPmdpbmRleDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBnbHlwaCBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsb2FkX2ZsYWdzIj5sb2FkX2ZsYWdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzZXQgb2YgYml0IGZsYWdzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCB3aGVuIGNhbGxpbmcgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4sIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBhZHZhbmNlcyB5b3UgbmVlZC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhZHZhbmNlIj5wYWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZHZhbmNlIHZhbHVlLiBJZiBzY2FsaW5nIGlzIHBlcmZvcm1lZCAoYmFzZWQgb24gdGhlIHZhbHVlIG9mICZsc3F1bztsb2FkX2ZsYWdzJnJzcXVvOyksIHRoZSBhZHZhbmNlIHZhbHVlIGlzIGluIDE2LjE2IGZvcm1hdC4gT3RoZXJ3aXNlLCBpdCBpcyBpbiBmb250IHVuaXRzLjwvcD4KKzxwPklmIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVDwvYT4gaXMgc2V0LCB0aGlzIGlzIHRoZSB2ZXJ0aWNhbCBhZHZhbmNlIGNvcnJlc3BvbmRpbmcgdG8gYSB2ZXJ0aWNhbCBsYXlvdXQuIE90aGVyd2lzZSwgaXQgaXMgdGhlIGhvcml6b250YWwgYWR2YW5jZSBpbiBhIGhvcml6b250YWwgbGF5b3V0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCBtZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtYXkgZmFpbCBpZiB5b3UgdXNlIDxhIGhyZWY9ImZ0Mi1xdWlja19hZHZhbmNlLmh0bWwjRlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSI+RlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWTwvYT4gYW5kIGlmIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBxdWljayB3YXkgdG8gcmV0cmlldmUgdGhlIGFkdmFuY2VzLjwvcD4KKzxwPkEgc2NhbGVkIGFkdmFuY2UgaXMgcmV0dXJuZWQgaW4gMTYuMTYgZm9ybWF0IGJ1dCBpc24ndCB0cmFuc2Zvcm1lZCBieSB0aGUgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIHNwZWNpZmllZCBieSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfVHJhbnNmb3JtIj5GVF9TZXRfVHJhbnNmb3JtPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9BZHZhbmNlcyI+RlRfR2V0X0FkdmFuY2VzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfQURWQU5DRVNfSCAoZnRhZHZhbmMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X0FkdmFuY2VzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICBzdGFydCwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQzMiI+RlRfSW50MzI8L2E+ICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAqcGFkdmFuY2VzICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIGFkdmFuY2UgdmFsdWVzIG9mIHNldmVyYWwgZ2x5cGggb3V0bGluZXMgaW4gYW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzb3VyY2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0YXJ0Ij5zdGFydDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmaXJzdCBnbHlwaCBpbmRleC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjb3VudCI+Y291bnQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbnVtYmVyIG9mIGFkdmFuY2UgdmFsdWVzIHlvdSB3YW50IHRvIHJldHJpZXZlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImxvYWRfZmxhZ3MiPmxvYWRfZmxhZ3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHNldCBvZiBiaXQgZmxhZ3Mgc2ltaWxhciB0byB0aG9zZSB1c2VkIHdoZW4gY2FsbGluZyA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9Mb2FkX0dseXBoIj5GVF9Mb2FkX0dseXBoPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBhZHZhbmNlIj5wYWR2YW5jZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZHZhbmNlIHZhbHVlcy4gVGhpcyBhcnJheSwgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciwgbXVzdCBjb250YWluIGF0IGxlYXN0ICZsc3F1bztjb3VudCZyc3F1bzsgZWxlbWVudHMuPC9wPgorPHA+SWYgc2NhbGluZyBpcyBwZXJmb3JtZWQgKGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAmbHNxdW87bG9hZF9mbGFncyZyc3F1bzspLCB0aGUgYWR2YW5jZSB2YWx1ZXMgYXJlIGluIDE2LjE2IGZvcm1hdC4gT3RoZXJ3aXNlLCB0aGV5IGFyZSBpbiBmb250IHVuaXRzLjwvcD4KKzxwPklmIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xPQURfWFhYIj5GVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVDwvYT4gaXMgc2V0LCB0aGVzZSBhcmUgdGhlIHZlcnRpY2FsIGFkdmFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gYSB2ZXJ0aWNhbCBsYXlvdXQuIE90aGVyd2lzZSwgdGhleSBhcmUgdGhlIGhvcml6b250YWwgYWR2YW5jZXMgaW4gYSBob3Jpem9udGFsIGxheW91dC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAgbWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gbWF5IGZhaWwgaWYgeW91IHVzZSA8YSBocmVmPSJmdDItcXVpY2tfYWR2YW5jZS5odG1sI0ZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkiPkZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFk8L2E+IGFuZCBpZiB0aGUgY29ycmVzcG9uZGluZyBmb250IGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgcXVpY2sgd2F5IHRvIHJldHJpZXZlIHRoZSBhZHZhbmNlcy48L3A+Cis8cD5TY2FsZWQgYWR2YW5jZXMgYXJlIHJldHVybmVkIGluIDE2LjE2IGZvcm1hdCBidXQgYXJlbid0IHRyYW5zZm9ybWVkIGJ5IHRoZSBhZmZpbmUgdHJhbnNmb3JtYXRpb24gc3BlY2lmaWVkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NldF9UcmFuc2Zvcm0iPkZUX1NldF9UcmFuc2Zvcm08L2E+LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSI+RlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0FEVkFOQ0VTX0ggKGZ0YWR2YW5jLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFk8L2I+ICAweDIwMDAwMDAwTAorPC9wcmU+CisKKzxwPkEgYml0LWZsYWcgdG8gYmUgT1ItZWQgd2l0aCB0aGUgJmxzcXVvO2ZsYWdzJnJzcXVvOyBwYXJhbWV0ZXIgb2YgdGhlIDxhIGhyZWY9ImZ0Mi1xdWlja19hZHZhbmNlLmh0bWwjRlRfR2V0X0FkdmFuY2UiPkZUX0dldF9BZHZhbmNlPC9hPiBhbmQgPGEgaHJlZj0iZnQyLXF1aWNrX2FkdmFuY2UuaHRtbCNGVF9HZXRfQWR2YW5jZXMiPkZUX0dldF9BZHZhbmNlczwvYT4gZnVuY3Rpb25zLjwvcD4KKzxwPklmIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZhaWwgaWYgdGhlIGNvcnJlc3BvbmRpbmcgaGludGluZyBtb2RlIG9yIGZvbnQgZHJpdmVyIGRvZXNuJ3QgYWxsb3cgZm9yIHZlcnkgcXVpY2sgYWR2YW5jZSBjb21wdXRhdGlvbi48L3A+Cis8cD5UeXBpY2FsbHksIGdseXBocyB0aGF0IGFyZSBlaXRoZXIgdW5zY2FsZWQsIHVuaGludGVkLCBiaXRtYXBwZWQsIG9yIGxpZ2h0LWhpbnRlZCBjYW4gaGF2ZSB0aGVpciBhZHZhbmNlIHdpZHRoIGNvbXB1dGVkIHZlcnkgcXVpY2tseS48L3A+Cis8cD5Ob3JtYWwgYW5kIGJ5dGVjb2RlIGhpbnRlZCBtb2RlcyB0aGF0IHJlcXVpcmUgbG9hZGluZywgc2NhbGluZywgYW5kIGhpbnRpbmcgb2YgdGhlIGdseXBoIG91dGxpbmUsIGFyZSBleHRyZW1lbHkgc2xvdyBieSBjb21wYXJpc29uLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXJhc3Rlci5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1yYXN0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZhN2IxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1yYXN0ZXIuaHRtbApAQCAtMCwwICsxLDUzMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlNjYW5saW5lIENvbnZlcnRlcjwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9SYXN0ZXIiPkZUX1Jhc3RlcjwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX0Z1bmNzIj5GVF9SYXN0ZXJfRnVuY3M8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU3BhbiI+RlRfU3BhbjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX05ld0Z1bmMiPkZUX1Jhc3Rlcl9OZXdGdW5jPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1NwYW5GdW5jIj5GVF9TcGFuRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX0RvbmVGdW5jIj5GVF9SYXN0ZXJfRG9uZUZ1bmM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1Jhc3Rlcl9CaXRUZXN0X0Z1bmMiPkZUX1Jhc3Rlcl9CaXRUZXN0X0Z1bmM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX1Jlc2V0RnVuYyI+RlRfUmFzdGVyX1Jlc2V0RnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX0JpdFNldF9GdW5jIj5GVF9SYXN0ZXJfQml0U2V0X0Z1bmM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX1BhcmFtcyI+RlRfUmFzdGVyX1BhcmFtczwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUmFzdGVyX1NldE1vZGVGdW5jIj5GVF9SYXN0ZXJfU2V0TW9kZUZ1bmM8L2E+PC90ZD48dGQ+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfUkFTVEVSX0ZMQUdfWFhYIj5GVF9SQVNURVJfRkxBR19YWFg8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1Jhc3Rlcl9SZW5kZXJGdW5jIj5GVF9SYXN0ZXJfUmVuZGVyRnVuYzwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0ZWNobmljYWwgZGVmaW5pdGlvbnMuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyIj5GVF9SYXN0ZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9SYXN0ZXJSZWNfKiAgPGI+RlRfUmFzdGVyPC9iPjsKKzwvcHJlPgorCis8cD5BbiBvcGFxdWUgaGFuZGxlIChwb2ludGVyKSB0byBhIHJhc3RlciBvYmplY3QuIEVhY2ggb2JqZWN0IGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgdG8gY29udmVydCBhbiBvdXRsaW5lIGludG8gYSBiaXRtYXAgb3IgcGl4bWFwLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3BhbiI+RlRfU3BhbjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9TcGFuXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnNob3J0PC9zcGFuPiAgICAgICAgICAgeDsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zaG9ydDwvc3Bhbj4gIGxlbjsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jaGFyPC9zcGFuPiAgIGNvdmVyYWdlOworCisgIH0gPGI+RlRfU3BhbjwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIHNpbmdsZSBzcGFuIG9mIGdyYXkgcGl4ZWxzIHdoZW4gcmVuZGVyaW5nIGFuIGFudGktYWxpYXNlZCBiaXRtYXAuPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IngiPng8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc3BhbidzIGhvcml6b250YWwgc3RhcnQgcG9zaXRpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGVuIj5sZW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc3BhbidzIGxlbmd0aCBpbiBwaXhlbHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY292ZXJhZ2UiPmNvdmVyYWdlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNwYW4gY29sb3IvY292ZXJhZ2UsIHJhbmdpbmcgZnJvbSAwIChiYWNrZ3JvdW5kKSB0byAyNTUgKGZvcmVncm91bmQpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIHNwYW4gZHJhd2luZyBjYWxsYmFjayB0eXBlIG5hbWVkIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9TcGFuRnVuYyI+RlRfU3BhbkZ1bmM8L2E+IHRoYXQgdGFrZXMgdGhlIHkmbmJzcDtjb29yZGluYXRlIG9mIHRoZSBzcGFuIGFzIGEgcGFyYW1ldGVyLjwvcD4KKzxwPlRoZSBjb3ZlcmFnZSB2YWx1ZSBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCAyNTUuIElmIHlvdSB3YW50IGxlc3MgZ3JheSB2YWx1ZXMsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBoYXMgdG8gcmVkdWNlIHRoZW0uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TcGFuRnVuYyI+RlRfU3BhbkZ1bmM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4KKyAgKCo8Yj5GVF9TcGFuRnVuYzwvYj4pKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9TcGFuIj5GVF9TcGFuPC9hPiogIHNwYW5zLAorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgICAgICAgdXNlciApOworCisjZGVmaW5lIEZUX1Jhc3Rlcl9TcGFuX0Z1bmMgIDxiPkZUX1NwYW5GdW5jPC9iPgorPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gdXNlZCBhcyBhIGNhbGwtYmFjayBieSB0aGUgYW50aS1hbGlhc2VkIHJlbmRlcmVyIGluIG9yZGVyIHRvIGxldCBjbGllbnQgYXBwbGljYXRpb25zIGRyYXcgdGhlbXNlbHZlcyB0aGUgZ3JheSBwaXhlbCBzcGFucyBvbiBlYWNoIHNjYW4gbGluZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ5Ij55PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNjYW5saW5lJ3MgeSZuYnNwO2Nvb3JkaW5hdGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY291bnQiPmNvdW50PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBzcGFucyB0byBkcmF3IG9uIHRoaXMgc2NhbmxpbmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3BhbnMiPnNwYW5zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSB0YWJsZSBvZiAmbHNxdW87Y291bnQmcnNxdW87IHNwYW5zIHRvIGRyYXcgb24gdGhlIHNjYW5saW5lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InVzZXIiPnVzZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgY2FsbGJhY2sgYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZGlyZWN0bHkgcmVuZGVyIHRoZSBncmF5IHNwYW5zIG9mIHRoZSBhbnRpLWFsaWFzZWQgYml0bWFwIHRvIGFueSBraW5kIG9mIHN1cmZhY2VzLjwvcD4KKzxwPlRoaXMgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYW50aS1hbGlhc2VkIG91dGxpbmVzIGRpcmVjdGx5IHRvIGEgZ2l2ZW4gYmFja2dyb3VuZCBiaXRtYXAsIGFuZCBldmVuIHBlcmZvcm0gdHJhbnNsdWNlbmN5LjwvcD4KKzxwPk5vdGUgdGhhdCB0aGUgJmxzcXVvO2NvdW50JnJzcXVvOyBmaWVsZCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIGEgZml4ZWQgdmFsdWUgZGVmaW5lZCBieSB0aGUgJmxzcXVvO0ZUX01BWF9HUkFZX1NQQU5TJnJzcXVvOyBjb25maWd1cmF0aW9uIG1hY3JvIGluICZsc3F1bztmdG9wdGlvbi5oJnJzcXVvOy4gQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8mbmJzcDszMiwgd2hpY2ggbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMyJm5ic3A7c3BhbnMgb24gYSBnaXZlbiBzY2FubGluZSwgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHdpdGggdGhlIHNhbWUgJmxzcXVvO3kmcnNxdW87IHBhcmFtZXRlciBpbiBvcmRlciB0byBkcmF3IGFsbCBjYWxsYmFja3MuPC9wPgorPHA+T3RoZXJ3aXNlLCB0aGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgc2Nhbi1saW5lLCBhbmQgb25seSBmb3IgdGhvc2Ugc2NhbmxpbmVzIHRoYXQgZG8gaGF2ZSAmbHNxdW87Z3JheSZyc3F1bzsgcGl4ZWxzIG9uIHRoZW0uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SYXN0ZXJfUGFyYW1zIj5GVF9SYXN0ZXJfUGFyYW1zPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1Jhc3Rlcl9QYXJhbXNfCisgIHsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0JpdG1hcCI+RlRfQml0bWFwPC9hPiogICAgICAgIHRhcmdldDsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICAgICAgICAgc291cmNlOworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1NwYW5GdW5jIj5GVF9TcGFuRnVuYzwvYT4gICAgICAgICAgICAgZ3JheV9zcGFuczsKKyAgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfU3BhbkZ1bmMiPkZUX1NwYW5GdW5jPC9hPiAgICAgICAgICAgICBibGFja19zcGFuczsgIC8qIHVudXNlZCAqLworICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfQml0VGVzdF9GdW5jIj5GVF9SYXN0ZXJfQml0VGVzdF9GdW5jPC9hPiAgYml0X3Rlc3Q7ICAgICAvKiB1bnVzZWQgKi8KKyAgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX0JpdFNldF9GdW5jIj5GVF9SYXN0ZXJfQml0U2V0X0Z1bmM8L2E+ICAgYml0X3NldDsgICAgICAvKiB1bnVzZWQgKi8KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgICAgICAgICAgIHVzZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQkJveCI+RlRfQkJveDwvYT4gICAgICAgICAgICAgICAgIGNsaXBfYm94OworCisgIH0gPGI+RlRfUmFzdGVyX1BhcmFtczwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgYXJndW1lbnRzIHVzZWQgYnkgYSByYXN0ZXIncyByZW5kZXIgZnVuY3Rpb24uPC9wPgorCis8aDQ+ZmllbGRzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InRhcmdldCI+dGFyZ2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBiaXRtYXAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic291cmNlIj5zb3VyY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBnbHlwaCBpbWFnZSAoZS5nLiwgYW4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+KS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmbGFncyI+ZmxhZ3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcmVuZGVyaW5nIGZsYWdzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImdyYXlfc3BhbnMiPmdyYXlfc3BhbnM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZ3JheSBzcGFuIGRyYXdpbmcgY2FsbGJhY2suPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYmxhY2tfc3BhbnMiPmJsYWNrX3NwYW5zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VW51c2VkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJpdF90ZXN0Ij5iaXRfdGVzdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVudXNlZC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiaXRfc2V0Ij5iaXRfc2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VW51c2VkLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InVzZXIiPnVzZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gZWFjaCBkcmF3aW5nIGNhbGxiYWNrLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNsaXBfYm94Ij5jbGlwX2JveDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIG9wdGlvbmFsIGNsaXBwaW5nIGJveC4gSXQgaXMgb25seSB1c2VkIGluIGRpcmVjdCByZW5kZXJpbmcgbW9kZS4gTm90ZSB0aGF0IGNvb3JkaW5hdGVzIGhlcmUgc2hvdWxkIGJlIGV4cHJlc3NlZCBpbiA8aT5pbnRlZ2VyPC9pPiBwaXhlbHMgKGFuZCBub3QgaW4gMjYuNiBmaXhlZC1wb2ludCB1bml0cykuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+QW4gYW50aS1hbGlhc2VkIGdseXBoIGJpdG1hcCBpcyBkcmF3biBpZiB0aGUgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1JBU1RFUl9GTEFHX1hYWCI+RlRfUkFTVEVSX0ZMQUdfQUE8L2E+IGJpdCBmbGFnIGlzIHNldCBpbiB0aGUgJmxzcXVvO2ZsYWdzJnJzcXVvOyBmaWVsZCwgb3RoZXJ3aXNlIGEgbW9ub2Nocm9tZSBiaXRtYXAgaXMgZ2VuZXJhdGVkLjwvcD4KKzxwPklmIHRoZSA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUkFTVEVSX0ZMQUdfWFhYIj5GVF9SQVNURVJfRkxBR19ESVJFQ1Q8L2E+IGJpdCBmbGFnIGlzIHNldCBpbiAmbHNxdW87ZmxhZ3MmcnNxdW87LCB0aGUgcmFzdGVyIHdpbGwgY2FsbCB0aGUgJmxzcXVvO2dyYXlfc3BhbnMmcnNxdW87IGNhbGxiYWNrIHRvIGRyYXcgZ3JheSBwaXhlbCBzcGFucy4gVGhpcyBhbGxvd3MgZGlyZWN0IGNvbXBvc2l0aW9uIG92ZXIgYSBwcmUtZXhpc3RpbmcgYml0bWFwIHRocm91Z2ggdXNlci1wcm92aWRlZCBjYWxsYmFja3MgdG8gcGVyZm9ybSB0aGUgc3BhbiBkcmF3aW5nIGFuZCBjb21wb3NpdGlvbi4gTm90IHN1cHBvcnRlZCBieSB0aGUgbW9ub2Nocm9tZSByYXN0ZXJpemVyLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUkFTVEVSX0ZMQUdfWFhYIj5GVF9SQVNURVJfRkxBR19YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19ERUZBVUxUIj5GVF9SQVNURVJfRkxBR19ERUZBVUxUPC9hPiAgMHgwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19BQSI+RlRfUkFTVEVSX0ZMQUdfQUE8L2E+ICAgICAgIDB4MQorI2RlZmluZSA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUkFTVEVSX0ZMQUdfRElSRUNUIj5GVF9SQVNURVJfRkxBR19ESVJFQ1Q8L2E+ICAgMHgyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19DTElQIj5GVF9SQVNURVJfRkxBR19DTElQPC9hPiAgICAgMHg0CisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPkZUX1JBU1RFUl9GTEFHX1hYWDwvYj4nIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X3Jhc3Rlcl9mbGFnX2RlZmF1bHQgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19ERUZBVUxUIj5GVF9SQVNURVJfRkxBR19ERUZBVUxUPC9hPgorI2RlZmluZSBmdF9yYXN0ZXJfZmxhZ19hYSAgICAgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUkFTVEVSX0ZMQUdfQUEiPkZUX1JBU1RFUl9GTEFHX0FBPC9hPgorI2RlZmluZSBmdF9yYXN0ZXJfZmxhZ19kaXJlY3QgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUkFTVEVSX0ZMQUdfRElSRUNUIj5GVF9SQVNURVJfRkxBR19ESVJFQ1Q8L2E+CisjZGVmaW5lIGZ0X3Jhc3Rlcl9mbGFnX2NsaXAgICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SQVNURVJfRkxBR19DTElQIj5GVF9SQVNURVJfRkxBR19DTElQPC9hPgorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiBiaXQgZmxhZyBjb25zdGFudHMgYXMgdXNlZCBpbiB0aGUgJmxzcXVvO2ZsYWdzJnJzcXVvOyBmaWVsZCBvZiBhIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfUGFyYW1zIj5GVF9SYXN0ZXJfUGFyYW1zPC9hPiBzdHJ1Y3R1cmUuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1JBU1RFUl9GTEFHX0RFRkFVTFQiPkZUX1JBU1RFUl9GTEFHX0RFRkFVTFQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIHZhbHVlIGlzIDAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUkFTVEVSX0ZMQUdfQUEiPkZUX1JBU1RFUl9GTEFHX0FBPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IGFuIGFudGktYWxpYXNlZCBnbHlwaCBpbWFnZSBzaG91bGQgYmUgZ2VuZXJhdGVkLiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgbW9ub2Nocm9tZSAoMS1iaXQpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1JBU1RFUl9GTEFHX0RJUkVDVCI+RlRfUkFTVEVSX0ZMQUdfRElSRUNUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSBkaXJlY3QgcmVuZGVyaW5nLiBJbiB0aGlzIG1vZGUsIGNsaWVudCBhcHBsaWNhdGlvbnMgbXVzdCBwcm92aWRlIHRoZWlyIG93biBzcGFuIGNhbGxiYWNrLiBUaGlzIGxldHMgdGhlbSBkaXJlY3RseSBkcmF3IG9yIGNvbXBvc2Ugb3ZlciBhbiBleGlzdGluZyBiaXRtYXAuIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZSB0YXJnZXQgcGl4bWFwJ3MgYnVmZmVyIDxpPm11c3Q8L2k+IGJlIHplcm9lZCBiZWZvcmUgcmVuZGVyaW5nLjwvcD4KKzxwPkRpcmVjdCByZW5kZXJpbmcgaXMgb25seSBwb3NzaWJsZSB3aXRoIGFudGktYWxpYXNlZCBnbHlwaHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfUkFTVEVSX0ZMQUdfQ0xJUCI+RlRfUkFTVEVSX0ZMQUdfQ0xJUDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgaW4gZGlyZWN0IHJlbmRlcmluZyBtb2RlLiBJZiBzZXQsIHRoZSBvdXRwdXQgd2lsbCBiZSBjbGlwcGVkIHRvIGEgYm94IHNwZWNpZmllZCBpbiB0aGUgJmxzcXVvO2NsaXBfYm94JnJzcXVvOyBmaWVsZCBvZiB0aGUgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9QYXJhbXMiPkZUX1Jhc3Rlcl9QYXJhbXM8L2E+IHN0cnVjdHVyZS48L3A+Cis8cD5Ob3RlIHRoYXQgYnkgZGVmYXVsdCwgdGhlIGdseXBoIGJpdG1hcCBpcyBjbGlwcGVkIHRvIHRoZSB0YXJnZXQgcGl4bWFwLCBleGNlcHQgaW4gZGlyZWN0IHJlbmRlcmluZyBtb2RlIHdoZXJlIGFsbCBzcGFucyBhcmUgZ2VuZXJhdGVkIGlmIG5vIGNsaXBwaW5nIGJveCBpcyBzZXQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyX05ld0Z1bmMiPkZUX1Jhc3Rlcl9OZXdGdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9SYXN0ZXJfTmV3RnVuYzwvYj4pKCA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXIiPkZUX1Jhc3RlcjwvYT4qICByYXN0ZXIgKTsKKworI2RlZmluZSBGVF9SYXN0ZXJfTmV3X0Z1bmMgIDxiPkZUX1Jhc3Rlcl9OZXdGdW5jPC9iPgorPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgYSBuZXcgcmFzdGVyIG9iamVjdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZW1vcnkiPm1lbW9yeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmFzdGVyIj5yYXN0ZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgbmV3IHJhc3RlciBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5FcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSAmbHNxdW87bWVtb3J5JnJzcXVvOyBwYXJhbWV0ZXIgaXMgYSB0eXBlbGVzcyBwb2ludGVyIGluIG9yZGVyIHRvIGF2b2lkIHVuLXdhbnRlZCBkZXBlbmRlbmNpZXMgb24gdGhlIHJlc3Qgb2YgdGhlIEZyZWVUeXBlIGNvZGUuIEluIHByYWN0aWNlLCBpdCBpcyBhbiA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX01lbW9yeSI+RlRfTWVtb3J5PC9hPiBvYmplY3QsIGkuZS4sIGEgaGFuZGxlIHRvIHRoZSBzdGFuZGFyZCBGcmVlVHlwZSBtZW1vcnkgYWxsb2NhdG9yLiBIb3dldmVyLCB0aGlzIGZpZWxkIGNhbiBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSBnaXZlbiByYXN0ZXIgaW1wbGVtZW50YXRpb24uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SYXN0ZXJfRG9uZUZ1bmMiPkZUX1Jhc3Rlcl9Eb25lRnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX1Jhc3Rlcl9Eb25lRnVuYzwvYj4pKCA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyIj5GVF9SYXN0ZXI8L2E+ICByYXN0ZXIgKTsKKworI2RlZmluZSBGVF9SYXN0ZXJfRG9uZV9GdW5jICA8Yj5GVF9SYXN0ZXJfRG9uZUZ1bmM8L2I+Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgYSBnaXZlbiByYXN0ZXIgb2JqZWN0LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJhc3RlciI+cmFzdGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHJhc3RlciBvYmplY3QuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyX1Jlc2V0RnVuYyI+RlRfUmFzdGVyX1Jlc2V0RnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX0lNQUdFX0ggKGZ0aW1hZ2UuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX1Jhc3Rlcl9SZXNldEZ1bmM8L2I+KSggPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3RlciI+RlRfUmFzdGVyPC9hPiAgICAgICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgcG9vbF9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgIHBvb2xfc2l6ZSApOworCisjZGVmaW5lIEZUX1Jhc3Rlcl9SZXNldF9GdW5jICA8Yj5GVF9SYXN0ZXJfUmVzZXRGdW5jPC9iPgorPC9wcmU+CisKKzxwPkZyZWVUeXBlIHVzZWQgdG8gcHJvdmlkZSBhbiBhcmVhIG9mIG1lbW9yeSBjYWxsZWQgdGhlICZsc3F1bztyZW5kZXIgcG9vbCZyc3F1bzsgYXZhaWxhYmxlIHRvIGFsbCByZWdpc3RlcmVkIHJhc3RlcnMuIFRoaXMgd2FzIG5vdCB0aHJlYWQgc2FmZSBob3dldmVyIGFuZCBub3cgRnJlZVR5cGUgbmV2ZXIgYWxsb2NhdGVzIHRoaXMgcG9vbC4gTlVMTCBpcyBhbHdheXMgcGFzc2VkIGluIGFzIHBvb2xfYmFzZS48L3A+Cis8cD5UaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlYWNoIHRpbWUgdGhlIHJlbmRlciBwb29sIGNoYW5nZXMsIG9yIGp1c3QgYWZ0ZXIgYSBuZXcgcmFzdGVyIG9iamVjdCBpcyBjcmVhdGVkLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJhc3RlciI+cmFzdGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InBvb2xfYmFzZSI+cG9vbF9iYXNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGFkZHJlc3MgaW4gbWVtb3J5IG9mIHRoZSByZW5kZXIgcG9vbC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwb29sX3NpemUiPnBvb2xfc2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5SYXN0ZXJzIHNob3VsZCBpZ25vcmUgdGhlIHJlbmRlciBwb29sIGFuZCByZWx5IG9uIGR5bmFtaWMgb3Igc3RhY2sgYWxsb2NhdGlvbiBpZiB0aGV5IHdhbnQgdG8gKGEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGlzIHBhc3NlZCB0byB0aGUgcmFzdGVyIGNvbnN0cnVjdG9yKS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1Jhc3Rlcl9TZXRNb2RlRnVuYyI+RlRfUmFzdGVyX1NldE1vZGVGdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9SYXN0ZXJfU2V0TW9kZUZ1bmM8L2I+KSggPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3RlciI+RlRfUmFzdGVyPC9hPiAgICAgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgICAgIGFyZ3MgKTsKKworI2RlZmluZSBGVF9SYXN0ZXJfU2V0X01vZGVfRnVuYyAgPGI+RlRfUmFzdGVyX1NldE1vZGVGdW5jPC9iPgorPC9wcmU+CisKKzxwPlRoaXMgZnVuY3Rpb24gaXMgYSBnZW5lcmljIGZhY2lsaXR5IHRvIGNoYW5nZSBtb2RlcyBvciBhdHRyaWJ1dGVzIGluIGEgZ2l2ZW4gcmFzdGVyLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIG9yIHNpbXBseSB0byBhbGxvdyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyAmbHNxdW87ZmVhdHVyZXMmcnNxdW87IGluIGEgZ2l2ZW4gcmFzdGVyIG1vZHVsZS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyYXN0ZXIiPnJhc3RlcjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBuZXcgcmFzdGVyIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtb2RlIj5tb2RlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSA0LWJ5dGUgdGFnIHVzZWQgdG8gbmFtZSB0aGUgbW9kZSBvciBwcm9wZXJ0eS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhcmdzIj5hcmdzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIHRoZSBuZXcgbW9kZS9wcm9wZXJ0eSB0byB1c2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyX1JlbmRlckZ1bmMiPkZUX1Jhc3Rlcl9SZW5kZXJGdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9SYXN0ZXJfUmVuZGVyRnVuYzwvYj4pKCA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyIj5GVF9SYXN0ZXI8L2E+ICAgICAgICAgICAgICAgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9QYXJhbXMiPkZUX1Jhc3Rlcl9QYXJhbXM8L2E+KiAgcGFyYW1zICk7CisKKyNkZWZpbmUgRlRfUmFzdGVyX1JlbmRlcl9GdW5jICA8Yj5GVF9SYXN0ZXJfUmVuZGVyRnVuYzwvYj4KKzwvcHJlPgorCis8cD5JbnZva2UgYSBnaXZlbiByYXN0ZXIgdG8gc2Nhbi1jb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgaW50byBhIHRhcmdldCBiaXRtYXAuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmFzdGVyIj5yYXN0ZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgcmFzdGVyIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwYXJhbXMiPnBhcmFtczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciB0byBhbiA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX1BhcmFtcyI+RlRfUmFzdGVyX1BhcmFtczwvYT4gc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgdGhlIHJlbmRlcmluZyBwYXJhbWV0ZXJzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgZGVwZW5kcyBvbiB0aGUgcmFzdGVyJ3MgZ2x5cGggZm9ybWF0IGRlZmluZWQgaW4gaXRzIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfRnVuY3MiPkZUX1Jhc3Rlcl9GdW5jczwvYT4gc3RydWN0dXJlLiBJdCBjYW4gYmUgYW4gPGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sI0ZUX091dGxpbmUiPkZUX091dGxpbmU8L2E+IG9yIGFueXRoaW5nIGVsc2UgaW4gb3JkZXIgdG8gc3VwcG9ydCBhIGxhcmdlIGFycmF5IG9mIGdseXBoIGZvcm1hdHMuPC9wPgorPHA+Tm90ZSBhbHNvIHRoYXQgdGhlIHJlbmRlciBmdW5jdGlvbiBjYW4gZmFpbCBhbmQgcmV0dXJuIGEgJmxzcXVvO0ZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUmcnNxdW87IGVycm9yIGNvZGUgaWYgdGhlIHJhc3RlciB1c2VkIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0IGNvbXBvc2l0aW9uLjwvcD4KKzxwPlhYWDogRm9yIG5vdywgdGhlIHN0YW5kYXJkIHJhc3RlciBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0IGNvbXBvc2l0aW9uIGJ1dCB0aGlzIHNob3VsZCBjaGFuZ2UgZm9yIHRoZSBmaW5hbCByZWxlYXNlIChzZWUgdGhlIGZpbGVzICZsc3F1bztkZW1vcy9zcmMvZnRncmF5cy5jJnJzcXVvOyBhbmQgJmxzcXVvO2RlbW9zL3NyYy9mdGdyYXlzMi5jJnJzcXVvOyBmb3IgZXhhbXBsZXMgb2YgZGlzdGluY3QgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9ydCBkaXJlY3QgY29tcG9zaXRpb24pLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyX0Z1bmNzIj5GVF9SYXN0ZXJfRnVuY3M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfUmFzdGVyX0Z1bmNzXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfR2x5cGhfRm9ybWF0Ij5GVF9HbHlwaF9Gb3JtYXQ8L2E+ICAgICAgICBnbHlwaF9mb3JtYXQ7CisgICAgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9OZXdGdW5jIj5GVF9SYXN0ZXJfTmV3RnVuYzwvYT4gICAgICByYXN0ZXJfbmV3OworICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfUmVzZXRGdW5jIj5GVF9SYXN0ZXJfUmVzZXRGdW5jPC9hPiAgICByYXN0ZXJfcmVzZXQ7CisgICAgPGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sI0ZUX1Jhc3Rlcl9TZXRNb2RlRnVuYyI+RlRfUmFzdGVyX1NldE1vZGVGdW5jPC9hPiAgcmFzdGVyX3NldF9tb2RlOworICAgIDxhIGhyZWY9ImZ0Mi1yYXN0ZXIuaHRtbCNGVF9SYXN0ZXJfUmVuZGVyRnVuYyI+RlRfUmFzdGVyX1JlbmRlckZ1bmM8L2E+ICAgcmFzdGVyX3JlbmRlcjsKKyAgICA8YSBocmVmPSJmdDItcmFzdGVyLmh0bWwjRlRfUmFzdGVyX0RvbmVGdW5jIj5GVF9SYXN0ZXJfRG9uZUZ1bmM8L2E+ICAgICByYXN0ZXJfZG9uZTsKKworICB9IDxiPkZUX1Jhc3Rlcl9GdW5jczwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIGdpdmVuIHJhc3RlciBjbGFzcyB0byB0aGUgbGlicmFyeS48L3A+CisKKzxoND5maWVsZHM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZ2x5cGhfZm9ybWF0Ij5nbHlwaF9mb3JtYXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc3VwcG9ydGVkIGdseXBoIGZvcm1hdCBmb3IgdGhpcyByYXN0ZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmFzdGVyX25ldyI+cmFzdGVyX25ldzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByYXN0ZXIgY29uc3RydWN0b3IuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0icmFzdGVyX3Jlc2V0Ij5yYXN0ZXJfcmVzZXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIHRvIHJlc2V0IHRoZSByZW5kZXIgcG9vbCB3aXRoaW4gdGhlIHJhc3Rlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyYXN0ZXJfcmVuZGVyIj5yYXN0ZXJfcmVuZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBmdW5jdGlvbiB0byByZW5kZXIgYSBnbHlwaCBpbnRvIGEgZ2l2ZW4gYml0bWFwLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InJhc3Rlcl9kb25lIj5yYXN0ZXJfZG9uZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByYXN0ZXIgZGVzdHJ1Y3Rvci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9SYXN0ZXJfQml0VGVzdF9GdW5jIj5GVF9SYXN0ZXJfQml0VGVzdF9GdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfSU1BR0VfSCAoZnRpbWFnZS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4KKyAgKCo8Yj5GVF9SYXN0ZXJfQml0VGVzdF9GdW5jPC9iPikoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+ICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+ICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogIHVzZXIgKTsKKzwvcHJlPgorCis8cD5EZXByZWNhdGVkLCB1bmltcGxlbWVudGVkLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUmFzdGVyX0JpdFNldF9GdW5jIj5GVF9SYXN0ZXJfQml0U2V0X0Z1bmM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9JTUFHRV9IIChmdGltYWdlLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4KKyAgKCo8Yj5GVF9SYXN0ZXJfQml0U2V0X0Z1bmM8L2I+KSggPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogIHVzZXIgKTsKKzwvcHJlPgorCis8cD5EZXByZWNhdGVkLCB1bmltcGxlbWVudGVkLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXNmbnRfbmFtZXMuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItc2ZudF9uYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzg1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXNmbnRfbmFtZXMuaHRtbApAQCAtMCwwICsxLDI1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlNGTlQgTmFtZXM8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfU2ZudE5hbWUiPkZUX1NmbnROYW1lPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0dldF9TZm50X05hbWVfQ291bnQiPkZUX0dldF9TZm50X05hbWVfQ291bnQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfR2V0X1NmbnRfTmFtZSI+RlRfR2V0X1NmbnRfTmFtZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9GQU1JTFkiPkZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9TVUJGQU1JTFkiPkZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWTwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoZSBUcnVlVHlwZSBhbmQgT3BlblR5cGUgc3BlY2lmaWNhdGlvbnMgYWxsb3cgdGhlIGluY2x1c2lvbiBvZiBhIHNwZWNpYWwgJmxzcXVvO25hbWVzIHRhYmxlJnJzcXVvOyBpbiBmb250IGZpbGVzLiBUaGlzIHRhYmxlIGNvbnRhaW5zIHRleHR1YWwgKGFuZCBpbnRlcm5hdGlvbmFsaXplZCkgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBmb250LCBsaWtlIGZhbWlseSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy48L3A+Cis8cD5UaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZW0gaWYgYXZhaWxhYmxlLjwvcD4KKzxwPk5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZ2x5cGggbmFtZXMhPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU2ZudE5hbWUiPkZUX1NmbnROYW1lPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU0ZOVF9OQU1FU19IIChmdHNuYW1lcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIEZUX1NmbnROYW1lXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBwbGF0Zm9ybV9pZDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIGVuY29kaW5nX2lkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbGFuZ3VhZ2VfaWQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBuYW1lX2lkOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4qICAgc3RyaW5nOyAgICAgIC8qIHRoaXMgc3RyaW5nIGlzICpub3QqIG51bGwtdGVybWluYXRlZCEgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICBzdHJpbmdfbGVuOyAgLyogaW4gYnl0ZXMgKi8KKworICB9IDxiPkZUX1NmbnROYW1lPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGFuIFNGTlQgJmxzcXVvO25hbWUmcnNxdW87IHRhYmxlIGVudHJ5LjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwbGF0Zm9ybV9pZCI+cGxhdGZvcm1faWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcGxhdGZvcm0gSUQgZm9yICZsc3F1bztzdHJpbmcmcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImVuY29kaW5nX2lkIj5lbmNvZGluZ19pZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBlbmNvZGluZyBJRCBmb3IgJmxzcXVvO3N0cmluZyZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGFuZ3VhZ2VfaWQiPmxhbmd1YWdlX2lkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGxhbmd1YWdlIElEIGZvciAmbHNxdW87c3RyaW5nJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuYW1lX2lkIj5uYW1lX2lkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gaWRlbnRpZmllciBmb3IgJmxzcXVvO3N0cmluZyZyc3F1bzsuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic3RyaW5nIj5zdHJpbmc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgJmxzcXVvO25hbWUmcnNxdW87IHN0cmluZy4gTm90ZSB0aGF0IGl0cyBmb3JtYXQgZGlmZmVycyBkZXBlbmRpbmcgb24gdGhlIChwbGF0Zm9ybSxlbmNvZGluZykgcGFpci4gSXQgY2FuIGJlIGEgUGFzY2FsIFN0cmluZywgYSBVVEYtMTYgb25lLCBldGMuPC9wPgorPHA+R2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgc3RyaW5nIGlzIG5vdCB6ZXJvLXRlcm1pbmF0ZWQuIFBsZWFzZSByZWZlciB0byB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJpbmdfbGVuIj5zdHJpbmdfbGVuPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGxlbmd0aCBvZiAmbHNxdW87c3RyaW5nJnJzcXVvOyBpbiBieXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Qb3NzaWJsZSB2YWx1ZXMgZm9yICZsc3F1bztwbGF0Zm9ybV9pZCZyc3F1bzssICZsc3F1bztlbmNvZGluZ19pZCZyc3F1bzssICZsc3F1bztsYW5ndWFnZV9pZCZyc3F1bzssIGFuZCAmbHNxdW87bmFtZV9pZCZyc3F1bzsgYXJlIGdpdmVuIGluIHRoZSBmaWxlICZsc3F1bzt0dG5hbWVpZC5oJnJzcXVvOy4gRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIHRoZSBUcnVlVHlwZSBvciBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLjwvcD4KKzxwPlNlZSBhbHNvIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9YWFgiPlRUX1BMQVRGT1JNX1hYWDwvYT4sIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BUFBMRV9JRF9YWFgiPlRUX0FQUExFX0lEX1hYWDwvYT4sIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfWFhYPC9hPiwgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0lTT19JRF9YWFgiPlRUX0lTT19JRF9YWFg8L2E+LCBhbmQgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX1hYWCI+VFRfTVNfSURfWFhYPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9TZm50X05hbWVfQ291bnQiPkZUX0dldF9TZm50X05hbWVfQ291bnQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TRk5UX05BTUVTX0ggKGZ0c25hbWVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gKQorICA8Yj5GVF9HZXRfU2ZudF9OYW1lX0NvdW50PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gIGZhY2UgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG5hbWUgc3RyaW5ncyBpbiB0aGUgU0ZOVCAmbHNxdW87bmFtZSZyc3F1bzsgdGFibGUuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgJmxzcXVvO25hbWUmcnNxdW87IHRhYmxlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1NmbnRfTmFtZSI+RlRfR2V0X1NmbnRfTmFtZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NGTlRfTkFNRVNfSCAoZnRzbmFtZXMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfR2V0X1NmbnRfTmFtZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLXNmbnRfbmFtZXMuaHRtbCNGVF9TZm50TmFtZSI+RlRfU2ZudE5hbWU8L2E+ICAqYW5hbWUgKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSBhIHN0cmluZyBvZiB0aGUgU0ZOVCAmbHNxdW87bmFtZSZyc3F1bzsgdGFibGUgZm9yIGEgZ2l2ZW4gaW5kZXguPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJpZHgiPmlkeDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleCBvZiB0aGUgJmxzcXVvO25hbWUmcnNxdW87IHN0cmluZy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFuYW1lIj5hbmFtZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBpbmRleGVkIDxhIGhyZWY9ImZ0Mi1zZm50X25hbWVzLmh0bWwjRlRfU2ZudE5hbWUiPkZUX1NmbnROYW1lPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSAmbHNxdW87c3RyaW5nJnJzcXVvOyBhcnJheSByZXR1cm5lZCBpbiB0aGUgJmxzcXVvO2FuYW1lJnJzcXVvOyBzdHJ1Y3R1cmUgaXMgbm90IG51bGwtdGVybWluYXRlZC4gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZWFsbG9jYXRlIGl0IGlmIGl0IGlzIG5vIGxvbmdlciBpbiB1c2UuPC9wPgorPHA+VXNlIDxhIGhyZWY9ImZ0Mi1zZm50X25hbWVzLmh0bWwjRlRfR2V0X1NmbnRfTmFtZV9Db3VudCI+RlRfR2V0X1NmbnRfTmFtZV9Db3VudDwvYT4gdG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlICZsc3F1bztuYW1lJnJzcXVvOyB0YWJsZSBlbnRyaWVzLCB0aGVuIGRvIGEgbG9vcCB1bnRpbCB5b3UgZ2V0IHRoZSByaWdodCBwbGF0Zm9ybSwgZW5jb2RpbmcsIGFuZCBuYW1lIElELjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfRkFNSUxZIj5GVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9GQU1JTFk8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TRk5UX05BTUVTX0ggKGZ0c25hbWVzLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWTwvYj4gIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX01BS0VfVEFHIj5GVF9NQUtFX1RBRzwvYT4oICdpJywgJ2cnLCAncCcsICdmJyApCis8L3ByZT4KKworPHA+QSBjb25zdGFudCB1c2VkIGFzIHRoZSB0YWcgb2YgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfUGFyYW1ldGVyIj5GVF9QYXJhbWV0ZXI8L2E+IHN0cnVjdHVyZXMgdG8gbWFrZSBGVF9PcGVuX0ZhY2UoKSBpZ25vcmUgcHJlZmVycmVkIGZhbWlseSBzdWJmYW1pbHkgbmFtZXMgaW4gJmxzcXVvO25hbWUmcnNxdW87IHRhYmxlIHNpbmNlIE9wZW5UeXBlIHZlcnNpb24gMS40LiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgc3lzdGVtcyB0aGF0IGhhdmUgYSA0LWZhY2UtcGVyLWZhbWlseSByZXN0cmljdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWSI+RlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfU1VCRkFNSUxZPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU0ZOVF9OQU1FU19IIChmdHNuYW1lcy5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8Yj5GVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9TVUJGQU1JTFk8L2I+ICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NQUtFX1RBRyI+RlRfTUFLRV9UQUc8L2E+KCAnaScsICdnJywgJ3AnLCAncycgKQorPC9wcmU+CisKKzxwPkEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPiBzdHJ1Y3R1cmVzIHRvIG1ha2UgRlRfT3Blbl9GYWNlKCkgaWdub3JlIHByZWZlcnJlZCBzdWJmYW1pbHkgbmFtZXMgaW4gJmxzcXVvO25hbWUmcnNxdW87IHRhYmxlIHNpbmNlIE9wZW5UeXBlIHZlcnNpb24gMS40LiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgc3lzdGVtcyB0aGF0IGhhdmUgYSA0LWZhY2UtcGVyLWZhbWlseSByZXN0cmljdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1zaXplc19tYW5hZ2VtZW50Lmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXNpemVzX21hbmFnZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Y3NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1zaXplc19tYW5hZ2VtZW50Lmh0bWwKQEAgLTAsMCArMSwyMDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5TaXplIE1hbmFnZW1lbnQ8L2gxPgorPGgyPlN5bm9wc2lzPC9oMj4KKzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTmV3X1NpemUiPkZUX05ld19TaXplPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9Eb25lX1NpemUiPkZUX0RvbmVfU2l6ZTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfQWN0aXZhdGVfU2l6ZSI+RlRfQWN0aXZhdGVfU2l6ZTwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPldoZW4gY3JlYXRpbmcgYSBuZXcgZmFjZSBvYmplY3QgKGUuZy4sIHdpdGggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTmV3X0ZhY2UiPkZUX05ld19GYWNlPC9hPiksIGFuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+IG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHVzZWQgdG8gc3RvcmUgYWxsIHBpeGVsLXNpemUgZGVwZW5kZW50IGluZm9ybWF0aW9uLCBhdmFpbGFibGUgaW4gdGhlICZsc3F1bztmYWNlLSZndDtzaXplJnJzcXVvOyBmaWVsZC48L3A+Cis8cD5JdCBpcyBob3dldmVyIHBvc3NpYmxlIHRvIGNyZWF0ZSBtb3JlIHNpemVzIGZvciBhIGdpdmVuIGZhY2UsIG1vc3RseSBpbiBvcmRlciB0byBtYW5hZ2Ugc2V2ZXJhbCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZXMgb2YgdGhlIHNhbWUgZm9udCBmYW1pbHkgYW5kIHN0eWxlLiBTZWUgPGEgaHJlZj0iZnQyLXNpemVzX21hbmFnZW1lbnQuaHRtbCNGVF9OZXdfU2l6ZSI+RlRfTmV3X1NpemU8L2E+IGFuZCA8YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX0RvbmVfU2l6ZSI+RlRfRG9uZV9TaXplPC9hPi48L3A+Cis8cD5Ob3RlIHRoYXQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X1BpeGVsX1NpemVzIj5GVF9TZXRfUGl4ZWxfU2l6ZXM8L2E+IGFuZCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiBvbmx5IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgJmxzcXVvO2FjdGl2ZSZyc3F1bzsgc2l6ZTsgeW91IHRodXMgbmVlZCB0byB1c2UgPGEgaHJlZj0iZnQyLXNpemVzX21hbmFnZW1lbnQuaHRtbCNGVF9BY3RpdmF0ZV9TaXplIj5GVF9BY3RpdmF0ZV9TaXplPC9hPiB0byBjaGFuZ2UgaXQuPC9wPgorPHA+OTklIG9mIGFwcGxpY2F0aW9ucyB3b24ndCBuZWVkIHRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgaGVyZSwgZXNwZWNpYWxseSBpZiB0aGV5IHVzZSB0aGUgY2FjaGluZyBzdWItc3lzdGVtLCBzbyBiZSBjYXV0aW91cyB3aGVuIHVzaW5nIHRoZXNlLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX05ld19TaXplIj5GVF9OZXdfU2l6ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NJWkVTX0ggKGZ0c2l6ZXMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTmV3X1NpemU8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgIGZhY2UsCisgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TaXplIj5GVF9TaXplPC9hPiogIHNpemUgKTsKKzwvcHJlPgorCis8cD5DcmVhdGUgYSBuZXcgc2l6ZSBvYmplY3QgZnJvbSBhIGdpdmVuIGZhY2Ugb2JqZWN0LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHBhcmVudCBmYWNlIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImFzaXplIj5hc2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgbmV3IHNpemUgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5Zb3UgbmVlZCB0byBjYWxsIDxhIGhyZWY9ImZ0Mi1zaXplc19tYW5hZ2VtZW50Lmh0bWwjRlRfQWN0aXZhdGVfU2l6ZSI+RlRfQWN0aXZhdGVfU2l6ZTwvYT4gaW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBuZXcgc2l6ZSBmb3IgdXBjb21pbmcgY2FsbHMgdG8gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2V0X1BpeGVsX1NpemVzIj5GVF9TZXRfUGl4ZWxfU2l6ZXM8L2E+LCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9TZXRfQ2hhcl9TaXplIj5GVF9TZXRfQ2hhcl9TaXplPC9hPiwgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfTG9hZF9HbHlwaCI+RlRfTG9hZF9HbHlwaDwvYT4sIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfQ2hhciI+RlRfTG9hZF9DaGFyPC9hPiwgZXRjLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfRG9uZV9TaXplIj5GVF9Eb25lX1NpemU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TSVpFU19IIChmdHNpemVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0RvbmVfU2l6ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1NpemUiPkZUX1NpemU8L2E+ICBzaXplICk7Cis8L3ByZT4KKworPHA+RGlzY2FyZCBhIGdpdmVuIHNpemUgb2JqZWN0LiBOb3RlIHRoYXQgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRG9uZV9GYWNlIj5GVF9Eb25lX0ZhY2U8L2E+IGF1dG9tYXRpY2FsbHkgZGlzY2FyZHMgYWxsIHNpemUgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCA8YSBocmVmPSJmdDItc2l6ZXNfbWFuYWdlbWVudC5odG1sI0ZUX05ld19TaXplIj5GVF9OZXdfU2l6ZTwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2l6ZSI+c2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIGEgdGFyZ2V0IHNpemUgb2JqZWN0LjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+RnJlZVR5cGUgZXJyb3IgY29kZS4gMCZuYnNwO21lYW5zIHN1Y2Nlc3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9BY3RpdmF0ZV9TaXplIj5GVF9BY3RpdmF0ZV9TaXplPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU0laRVNfSCAoZnRzaXplcy5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9BY3RpdmF0ZV9TaXplPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfU2l6ZSI+RlRfU2l6ZTwvYT4gIHNpemUgKTsKKzwvcHJlPgorCis8cD5FdmVuIHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgc2V2ZXJhbCBzaXplIG9iamVjdHMgZm9yIGEgZ2l2ZW4gZmFjZSAoc2VlIDxhIGhyZWY9ImZ0Mi1zaXplc19tYW5hZ2VtZW50Lmh0bWwjRlRfTmV3X1NpemUiPkZUX05ld19TaXplPC9hPiBmb3IgZGV0YWlscyksIGZ1bmN0aW9ucyBsaWtlIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfR2x5cGgiPkZUX0xvYWRfR2x5cGg8L2E+IG9yIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xvYWRfQ2hhciI+RlRfTG9hZF9DaGFyPC9hPiBvbmx5IHVzZSB0aGUgb25lIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkIGxhc3QgdG8gZGV0ZXJtaW5lIHRoZSAmbHNxdW87Y3VycmVudCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZSZyc3F1bzsuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byAmbHNxdW87YWN0aXZhdGUmcnNxdW87IGEgcHJldmlvdXNseSBjcmVhdGVkIHNpemUgb2JqZWN0LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNpemUiPnNpemU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byBhIHRhcmdldCBzaXplIG9iamVjdC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+SWYgJmxzcXVvO2ZhY2UmcnNxdW87IGlzIHRoZSBzaXplJ3MgcGFyZW50IGZhY2Ugb2JqZWN0LCB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIHZhbHVlIG9mICZsc3F1bztmYWNlLSZndDtzaXplJnJzcXVvOyB0byB0aGUgaW5wdXQgc2l6ZSBoYW5kbGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItc3lzdGVtX2ludGVyZmFjZS5odG1sIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0YzljNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItc3lzdGVtX2ludGVyZmFjZS5odG1sCkBAIC0wLDAgKzEsNDA1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+U3lzdGVtIEludGVyZmFjZTwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9NZW1vcnkiPkZUX01lbW9yeTwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfTWVtb3J5UmVjIj5GVF9NZW1vcnlSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cmVhbV9DbG9zZUZ1bmMiPkZUX1N0cmVhbV9DbG9zZUZ1bmM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfQWxsb2NfRnVuYyI+RlRfQWxsb2NfRnVuYzwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfU3RyZWFtIj5GVF9TdHJlYW08L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX1N0cmVhbVJlYyI+RlRfU3RyZWFtUmVjPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0ZyZWVfRnVuYyI+RlRfRnJlZV9GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TdHJlYW1EZXNjIj5GVF9TdHJlYW1EZXNjPC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1JlYWxsb2NfRnVuYyI+RlRfUmVhbGxvY19GdW5jPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9TdHJlYW1fSW9GdW5jIj5GVF9TdHJlYW1fSW9GdW5jPC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaS9vIGFjY2Vzcy4gWW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluZm9ybWF0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgbWFuYWdlciBvciB5b3Ugb3duIGkvbyBzdHJlYW1zLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX01lbW9yeSI+RlRfTWVtb3J5PC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1lTVEVNX0ggKGZ0c3lzdGVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBGVF9NZW1vcnlSZWNfKiAgPGI+RlRfTWVtb3J5PC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIGdpdmVuIG1lbW9yeSBtYW5hZ2VyIG9iamVjdCwgZGVmaW5lZCB3aXRoIGFuIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5UmVjIj5GVF9NZW1vcnlSZWM8L2E+IHN0cnVjdHVyZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0FsbG9jX0Z1bmMiPkZUX0FsbG9jX0Z1bmM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TWVNURU1fSCAoZnRzeXN0ZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPioKKyAgKCo8Yj5GVF9BbGxvY19GdW5jPC9iPikoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgICAgICBzaXplICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIGFsbG9jYXRlICZsc3F1bztzaXplJnJzcXVvOyBieXRlcyBmcm9tICZsc3F1bzttZW1vcnkmcnNxdW87LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1lbW9yeSI+bWVtb3J5PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBtZW1vcnkgbWFuYWdlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzaXplIj5zaXplPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHNpemUgaW4gYnl0ZXMgdG8gYWxsb2NhdGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5BZGRyZXNzIG9mIG5ldyBtZW1vcnkgYmxvY2suIDAmbmJzcDtpbiBjYXNlIG9mIGZhaWx1cmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9GcmVlX0Z1bmMiPkZUX0ZyZWVfRnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NZU1RFTV9IIChmdHN5c3RlbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+CisgICgqPGI+RlRfRnJlZV9GdW5jPC9iPikoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgIGJsb2NrICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIHJlbGVhc2UgYSBnaXZlbiBibG9jayBvZiBtZW1vcnkuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWVtb3J5Ij5tZW1vcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIG1lbW9yeSBtYW5hZ2VyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImJsb2NrIj5ibG9jazwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgbWVtb3J5IGJsb2NrLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1JlYWxsb2NfRnVuYyI+RlRfUmVhbGxvY19GdW5jPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1lTVEVNX0ggKGZ0c3lzdGVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qCisgICgqPGI+RlRfUmVhbGxvY19GdW5jPC9iPikoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmxvbmc8L3NwYW4+ICAgICAgIGN1cl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgICAgICBuZXdfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgYmxvY2sgKTsKKzwvcHJlPgorCis8cD5BIGZ1bmN0aW9uIHVzZWQgdG8gcmUtYWxsb2NhdGUgYSBnaXZlbiBibG9jayBvZiBtZW1vcnkuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWVtb3J5Ij5tZW1vcnk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIG1lbW9yeSBtYW5hZ2VyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImN1cl9zaXplIj5jdXJfc2l6ZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBibG9jaydzIGN1cnJlbnQgc2l6ZSBpbiBieXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJuZXdfc2l6ZSI+bmV3X3NpemU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYmxvY2sncyByZXF1ZXN0ZWQgbmV3IHNpemUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYmxvY2siPmJsb2NrPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGJsb2NrJ3MgY3VycmVudCBhZGRyZXNzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+TmV3IGJsb2NrIGFkZHJlc3MuIDAmbmJzcDtpbiBjYXNlIG9mIG1lbW9yeSBzaG9ydGFnZS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPkluIGNhc2Ugb2YgZXJyb3IsIHRoZSBvbGQgYmxvY2sgbXVzdCBzdGlsbCBiZSBhdmFpbGFibGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9NZW1vcnlSZWMiPkZUX01lbW9yeVJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NZU1RFTV9IIChmdHN5c3RlbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfTWVtb3J5UmVjXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgICAgICAgIHVzZXI7CisgICAgPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9BbGxvY19GdW5jIj5GVF9BbGxvY19GdW5jPC9hPiAgICBhbGxvYzsKKyAgICA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX0ZyZWVfRnVuYyI+RlRfRnJlZV9GdW5jPC9hPiAgICAgZnJlZTsKKyAgICA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1JlYWxsb2NfRnVuYyI+RlRfUmVhbGxvY19GdW5jPC9hPiAgcmVhbGxvYzsKKyAgfTsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gbWVtb3J5IG1hbmFnZXIgdG8gRnJlZVR5cGUmbmJzcDsyLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ1c2VyIj51c2VyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBnZW5lcmljIHR5cGVsZXNzIHBvaW50ZXIgZm9yIHVzZXIgZGF0YS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhbGxvYyI+YWxsb2M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdHlwZSB0byBhbiBhbGxvY2F0aW9uIGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZyZWUiPmZyZWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgdHlwZSB0byBhbiBtZW1vcnkgZnJlZWluZyBmdW5jdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZWFsbG9jIj5yZWFsbG9jPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHR5cGUgdG8gYSByZWFsbG9jYXRpb24gZnVuY3Rpb24uPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3RyZWFtIj5GVF9TdHJlYW08L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TWVNURU1fSCAoZnRzeXN0ZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX1N0cmVhbVJlY18qICA8Yj5GVF9TdHJlYW08L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGFuIGlucHV0IHN0cmVhbS48L3A+CisKKzxoND5hbHNvPC9oND4KKzxwPlNlZSA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1N0cmVhbVJlYyI+RlRfU3RyZWFtUmVjPC9hPiBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gc3RyZWFtIG9iamVjdC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cmVhbURlc2MiPkZUX1N0cmVhbURlc2M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TWVNURU1fSCAoZnRzeXN0ZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bmlvbjwvc3Bhbj4gIEZUX1N0cmVhbURlc2NfCisgIHsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gICB2YWx1ZTsKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICBwb2ludGVyOworCisgIH0gPGI+RlRfU3RyZWFtRGVzYzwvYj47Cis8L3ByZT4KKworPHA+QSB1bmlvbiB0eXBlIHVzZWQgdG8gc3RvcmUgZWl0aGVyIGEgbG9uZyBvciBhIHBvaW50ZXIuIFRoaXMgaXMgdXNlZCB0byBzdG9yZSBhIGZpbGUgZGVzY3JpcHRvciBvciBhICZsc3F1bztGSUxFKiZyc3F1bzsgaW4gYW4gaW5wdXQgc3RyZWFtLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfU3RyZWFtX0lvRnVuYyI+RlRfU3RyZWFtX0lvRnVuYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1NZU1RFTV9IIChmdHN5c3RlbS5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4KKyAgKCo8Yj5GVF9TdHJlYW1fSW9GdW5jPC9iPikoIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfU3RyZWFtIj5GVF9TdHJlYW08L2E+ICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dW5zaWduZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5sb25nPC9zcGFuPiAgIGNvdW50ICk7Cis8L3ByZT4KKworPHA+QSBmdW5jdGlvbiB1c2VkIHRvIHNlZWsgYW5kIHJlYWQgZGF0YSBmcm9tIGEgZ2l2ZW4gaW5wdXQgc3RyZWFtLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InN0cmVhbSI+c3RyZWFtPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBzdHJlYW0uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ib2Zmc2V0Ij5vZmZzZXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgb2Zmc2V0IG9mIHJlYWQgaW4gc3RyZWFtIChhbHdheXMgZnJvbSBzdGFydCkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYnVmZmVyIj5idWZmZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYWRkcmVzcyBvZiB0aGUgcmVhZCBidWZmZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY291bnQiPmNvdW50PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlIHN0cmVhbS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBudW1iZXIgb2YgYnl0ZXMgZWZmZWN0aXZlbHkgcmVhZCBieSB0aGUgc3RyZWFtLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgdG8gcGVyZm9ybSBhIHNlZWsgb3Igc2tpcCBvcGVyYXRpb24gd2l0aCBhICZsc3F1bztjb3VudCZyc3F1bzsgb2YmbmJzcDswLiBBIG5vbi16ZXJvIHJldHVybiB2YWx1ZSB0aGVuIGluZGljYXRlcyBhbiBlcnJvci48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cmVhbV9DbG9zZUZ1bmMiPkZUX1N0cmVhbV9DbG9zZUZ1bmM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9TWVNURU1fSCAoZnRzeXN0ZW0uaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPgorICAoKjxiPkZUX1N0cmVhbV9DbG9zZUZ1bmM8L2I+KSggPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW0iPkZUX1N0cmVhbTwvYT4gIHN0cmVhbSApOworPC9wcmU+CisKKzxwPkEgZnVuY3Rpb24gdXNlZCB0byBjbG9zZSBhIGdpdmVuIGlucHV0IHN0cmVhbS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJzdHJlYW0iPnN0cmVhbTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc3RyZWFtLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1N0cmVhbVJlYyI+RlRfU3RyZWFtUmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfU1lTVEVNX0ggKGZ0c3lzdGVtLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgRlRfU3RyZWFtUmVjXworICB7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICAgICAgIGJhc2U7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gICAgICAgIHNpemU7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bG9uZzwvc3Bhbj4gICAgICAgIHBvczsKKworICAgIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfU3RyZWFtRGVzYyI+RlRfU3RyZWFtRGVzYzwvYT4gICAgICAgIGRlc2NyaXB0b3I7CisgICAgPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW1EZXNjIj5GVF9TdHJlYW1EZXNjPC9hPiAgICAgICAgcGF0aG5hbWU7CisgICAgPGEgaHJlZj0iZnQyLXN5c3RlbV9pbnRlcmZhY2UuaHRtbCNGVF9TdHJlYW1fSW9GdW5jIj5GVF9TdHJlYW1fSW9GdW5jPC9hPiAgICAgcmVhZDsKKyAgICA8YSBocmVmPSJmdDItc3lzdGVtX2ludGVyZmFjZS5odG1sI0ZUX1N0cmVhbV9DbG9zZUZ1bmMiPkZUX1N0cmVhbV9DbG9zZUZ1bmM8L2E+ICBjbG9zZTsKKworICAgIDxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwjRlRfTWVtb3J5Ij5GVF9NZW1vcnk8L2E+ICAgICAgICAgICAgbWVtb3J5OworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bnNpZ25lZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+KiAgICAgICBjdXJzb3I7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuc2lnbmVkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj4qICAgICAgIGxpbWl0OworCisgIH0gPGI+RlRfU3RyZWFtUmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGlucHV0IHN0cmVhbS48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJiYXNlIj5iYXNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Rm9yIG1lbW9yeS1iYXNlZCBzdHJlYW1zLCB0aGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzdHJlYW0gYnl0ZSBpbiBtZW1vcnkuIFRoaXMgZmllbGQgc2hvdWxkIGFsd2F5cyBiZSBzZXQgdG8gTlVMTCBmb3IgZGlzay1iYXNlZCBzdHJlYW1zLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNpemUiPnNpemU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgc3RyZWFtIHNpemUgaW4gYnl0ZXMuPC9wPgorPHA+SW4gY2FzZSBvZiBjb21wcmVzc2VkIHN0cmVhbXMgd2hlcmUgdGhlIHNpemUgaXMgdW5rbm93biBiZWZvcmUgYWN0dWFsbHkgZG9pbmcgdGhlIGRlY29tcHJlc3Npb24sIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMHg3RkZGRkZGRi4gKE5vdGUgdGhhdCB0aGlzIHNpemUgdmFsdWUgY2FuIG9jY3VyIGZvciBub3JtYWwgc3RyZWFtcyBhbHNvOyBpdCBpcyB0aHVzIGp1c3QgYSBoaW50Lik8L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwb3MiPnBvczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RyZWFtLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImRlc2NyaXB0b3IiPmRlc2NyaXB0b3I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGZpZWxkIGlzIGEgdW5pb24gdGhhdCBjYW4gaG9sZCBhbiBpbnRlZ2VyIG9yIGEgcG9pbnRlci4gSXQgaXMgdXNlZCBieSBzdHJlYW0gaW1wbGVtZW50YXRpb25zIHRvIHN0b3JlIGZpbGUgZGVzY3JpcHRvcnMgb3IgJmxzcXVvO0ZJTEUqJnJzcXVvOyBwb2ludGVycy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJwYXRobmFtZSI+cGF0aG5hbWU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGZpZWxkIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBGcmVlVHlwZS4gSG93ZXZlciwgaXQgaXMgb2Z0ZW4gdXNlZnVsIGR1cmluZyBkZWJ1Z2dpbmcgdG8gdXNlIGl0IHRvIHN0b3JlIHRoZSBzdHJlYW0ncyBmaWxlbmFtZSAod2hlcmUgYXZhaWxhYmxlKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJyZWFkIj5yZWFkPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHN0cmVhbSdzIGlucHV0IGZ1bmN0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNsb3NlIj5jbG9zZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzdHJlYW0ncyBjbG9zZSBmdW5jdGlvbi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZW1vcnkiPm1lbW9yeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtZW1vcnkgbWFuYWdlciB0byB1c2UgdG8gcHJlbG9hZCBmcmFtZXMuIFRoaXMgaXMgc2V0IGludGVybmFsbHkgYnkgRnJlZVR5cGUgYW5kIHNob3VsZG4ndCBiZSB0b3VjaGVkIGJ5IHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY3Vyc29yIj5jdXJzb3I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGZpZWxkIGlzIHNldCBhbmQgdXNlZCBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlIHdoZW4gcGFyc2luZyBmcmFtZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGltaXQiPmxpbWl0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmaWVsZCBpcyBzZXQgYW5kIHVzZWQgaW50ZXJuYWxseSBieSBGcmVlVHlwZSB3aGVuIHBhcnNpbmcgZnJhbWVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi10b2MuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdG9jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxN2YyYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdG9jLmh0bWwKQEAgLTAsMCArMSwyNzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlRhYmxlIG9mIENvbnRlbnRzPC9oMT4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkdlbmVyYWwgUmVtYXJrczwvaDI+Cis8dGFibGUgY2xhc3M9InRvYyI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItaGVhZGVyX2luY2x1c2lvbi5odG1sIj5GcmVlVHlwZSdzIGhlYWRlciBpbmNsdXNpb24gc2NoZW1lPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkhvdyBjbGllbnQgYXBwbGljYXRpb25zIHNob3VsZCBpbmNsdWRlIEZyZWVUeXBlIGhlYWRlciBmaWxlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItdXNlcl9hbGxvY2F0aW9uLmh0bWwiPlVzZXIgYWxsb2NhdGlvbjwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Ib3cgY2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgYWxsb2NhdGUgRnJlZVR5cGUgZGF0YSBzdHJ1Y3R1cmVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkNvcmUgQVBJPC9oMj4KKzx0YWJsZSBjbGFzcz0idG9jIj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwiPkZyZWVUeXBlIFZlcnNpb248L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RnVuY3Rpb25zIGFuZCBtYWNyb3MgcmVsYXRlZCB0byBGcmVlVHlwZSB2ZXJzaW9ucy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCI+QmFzaWMgRGF0YSBUeXBlczwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgYmFzaWMgZGF0YSB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBsaWJyYXJ5LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sIj5CYXNlIEludGVyZmFjZTwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgRnJlZVR5cGUmbmJzcDsyIGJhc2UgZm9udCBpbnRlcmZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWdseXBoX3ZhcmlhbnRzLmh0bWwiPkdseXBoIFZhcmlhbnRzPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBGcmVlVHlwZSZuYnNwOzIgaW50ZXJmYWNlIHRvIFVuaWNvZGUgSWRlb2dyYXBoaWMgVmFyaWF0aW9uIFNlcXVlbmNlcyAoSVZTKSwgdXNpbmcgdGhlIFNGTlQgY21hcCBmb3JtYXQmbmJzcDsxNC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItZ2x5cGhfbWFuYWdlbWVudC5odG1sIj5HbHlwaCBNYW5hZ2VtZW50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkdlbmVyaWMgaW50ZXJmYWNlIHRvIG1hbmFnZSBpbmRpdmlkdWFsIGdseXBoIGRhdGEuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLW1hY19zcGVjaWZpYy5odG1sIj5NYWMgU3BlY2lmaWMgSW50ZXJmYWNlPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk9ubHkgYXZhaWxhYmxlIG9uIHRoZSBNYWNpbnRvc2guPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLXNpemVzX21hbmFnZW1lbnQuaHRtbCI+U2l6ZSBNYW5hZ2VtZW50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1hbmFnaW5nIG11bHRpcGxlIHNpemVzIHBlciBmYWNlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1oZWFkZXJfZmlsZV9tYWNyb3MuaHRtbCI+SGVhZGVyIEZpbGUgTWFjcm9zPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1hY3JvIGRlZmluaXRpb25zIHVzZWQgdG8gI2luY2x1ZGUgc3BlY2lmaWMgaGVhZGVyIGZpbGVzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkZvcm1hdC1TcGVjaWZpYyBBUEk8L2gyPgorPHRhYmxlIGNsYXNzPSJ0b2MiPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLW11bHRpcGxlX21hc3RlcnMuaHRtbCI+TXVsdGlwbGUgTWFzdGVyczwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Ib3cgdG8gbWFuYWdlIE11bHRpcGxlIE1hc3RlcnMgZm9udHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sIj5UcnVlVHlwZSBUYWJsZXM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VHJ1ZVR5cGUgc3BlY2lmaWMgdGFibGUgdHlwZXMgYW5kIGZ1bmN0aW9ucy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwiPlR5cGUgMSBUYWJsZXM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VHlwZSZuYnNwOzEgKFBvc3RTY3JpcHQpIHNwZWNpZmljIGZvbnQgdGFibGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1zZm50X25hbWVzLmh0bWwiPlNGTlQgTmFtZXM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QWNjZXNzIHRoZSBuYW1lcyBlbWJlZGRlZCBpbiBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZmlsZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWJkZl9mb250cy5odG1sIj5CREYgYW5kIFBDRiBGaWxlczwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5CREYgYW5kIFBDRiBzcGVjaWZpYyBBUEkuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWNpZF9mb250cy5odG1sIj5DSUQgRm9udHM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q0lELWtleWVkIGZvbnQgc3BlY2lmaWMgQVBJLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1wZnJfZm9udHMuaHRtbCI+UEZSIEZvbnRzPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlBGUi9UcnVlRG9jIHNwZWNpZmljIEFQSS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwiPldpbmRvdyBGTlQgRmlsZXM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+V2luZG93cyBGTlQgc3BlY2lmaWMgQVBJLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1mb250X2Zvcm1hdHMuaHRtbCI+Rm9udCBGb3JtYXRzPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkdldHRpbmcgdGhlIGZvbnQgZm9ybWF0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1nYXNwX3RhYmxlLmh0bWwiPkdhc3AgVGFibGU8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmV0cmlldmluZyBUcnVlVHlwZSAmbHNxdW87Z2FzcCZyc3F1bzsgdGFibGUgZW50cmllcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Db250cm9sbGluZyBGcmVlVHlwZSBNb2R1bGVzPC9oMj4KKzx0YWJsZSBjbGFzcz0idG9jIj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1hdXRvX2hpbnRlci5odG1sIj5UaGUgYXV0by1oaW50ZXI8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29udHJvbGxpbmcgdGhlIGF1dG8taGludGluZyBtb2R1bGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWNmZl9kcml2ZXIuaHRtbCI+VGhlIENGRiBkcml2ZXI8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29udHJvbGxpbmcgdGhlIENGRiBkcml2ZXIgbW9kdWxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi10dF9kcml2ZXIuaHRtbCI+VGhlIFRydWVUeXBlIGRyaXZlcjwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyIG1vZHVsZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5DYWNoZSBTdWItU3lzdGVtPC9oMj4KKzx0YWJsZSBjbGFzcz0idG9jIj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1jYWNoZV9zdWJzeXN0ZW0uaHRtbCI+Q2FjaGUgU3ViLVN5c3RlbTwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Ib3cgdG8gY2FjaGUgZmFjZSwgc2l6ZSwgYW5kIGdseXBoIGRhdGEgd2l0aCBGcmVlVHlwZSZuYnNwOzIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+U3VwcG9ydCBBUEk8L2gyPgorPHRhYmxlIGNsYXNzPSJ0b2MiPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWNvbXB1dGF0aW9ucy5odG1sIj5Db21wdXRhdGlvbnM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q3J1bmNoaW5nIGZpeGVkIG51bWJlcnMgYW5kIHZlY3RvcnMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWxpc3RfcHJvY2Vzc2luZy5odG1sIj5MaXN0IFByb2Nlc3Npbmc8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+U2ltcGxlIG1hbmFnZW1lbnQgb2YgbGlzdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLW91dGxpbmVfcHJvY2Vzc2luZy5odG1sIj5PdXRsaW5lIFByb2Nlc3Npbmc8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RnVuY3Rpb25zIHRvIGNyZWF0ZSwgdHJhbnNmb3JtLCBhbmQgcmVuZGVyIHZlY3RvcmlhbCBnbHlwaCBpbWFnZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLXF1aWNrX2FkdmFuY2UuaHRtbCI+UXVpY2sgcmV0cmlldmFsIG9mIGFkdmFuY2UgdmFsdWVzPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlJldHJpZXZlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFkdmFuY2UgdmFsdWVzIHdpdGhvdXQgcHJvY2Vzc2luZyBnbHlwaCBvdXRsaW5lcywgaWYgcG9zc2libGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWJpdG1hcF9oYW5kbGluZy5odG1sIj5CaXRtYXAgSGFuZGxpbmc8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SGFuZGxpbmcgRlRfQml0bWFwIG9iamVjdHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLXJhc3Rlci5odG1sIj5TY2FubGluZSBDb252ZXJ0ZXI8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SG93IHZlY3RvcmlhbCBvdXRsaW5lcyBhcmUgY29udmVydGVkIGludG8gYml0bWFwcyBhbmQgcGl4bWFwcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItZ2x5cGhfc3Ryb2tlci5odG1sIj5HbHlwaCBTdHJva2VyPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkdlbmVyYXRpbmcgYm9yZGVyZWQgYW5kIHN0cm9rZWQgZ2x5cGhzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1zeXN0ZW1faW50ZXJmYWNlLmh0bWwiPlN5c3RlbSBJbnRlcmZhY2U8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SG93IEZyZWVUeXBlIG1hbmFnZXMgbWVtb3J5IGFuZCBpL28uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLW1vZHVsZV9tYW5hZ2VtZW50Lmh0bWwiPk1vZHVsZSBNYW5hZ2VtZW50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkhvdyB0byBhZGQsIHVwZ3JhZGUsIHJlbW92ZSwgYW5kIGNvbnRyb2wgbW9kdWxlcyBmcm9tIEZyZWVUeXBlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1nemlwLmh0bWwiPkdaSVAgU3RyZWFtczwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2luZyBnemlwLWNvbXByZXNzZWQgZm9udCBmaWxlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJsaW5rIj48YSBocmVmPSJmdDItbHp3Lmh0bWwiPkxaVyBTdHJlYW1zPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzaW5nIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLWJ6aXAyLmh0bWwiPkJaSVAyIFN0cmVhbXM8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNpbmcgYnppcDItY29tcHJlc3NlZCBmb250IGZpbGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1sY2RfZmlsdGVyaW5nLmh0bWwiPkxDRCBGaWx0ZXJpbmc8L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UmVkdWNlIGNvbG9yIGZyaW5nZXMgb2YgTENELW9wdGltaXplZCBiaXRtYXBzLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPk1pc2NlbGxhbmVvdXM8L2gyPgorPHRhYmxlIGNsYXNzPSJ0b2MiPgorPHRyPjx0ZCBjbGFzcz0ibGluayI+PGEgaHJlZj0iZnQyLW90X3ZhbGlkYXRpb24uaHRtbCI+T3BlblR5cGUgVmFsaWRhdGlvbjwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbiBBUEkgdG8gdmFsaWRhdGUgT3BlblR5cGUgdGFibGVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1pbmNyZW1lbnRhbC5odG1sIj5JbmNyZW1lbnRhbCBMb2FkaW5nPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkN1c3RvbSBHbHlwaCBMb2FkaW5nLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCI+VGhlIFRydWVUeXBlIEVuZ2luZTwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UcnVlVHlwZSBieXRlY29kZSBzdXBwb3J0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImxpbmsiPjxhIGhyZWY9ImZ0Mi1neF92YWxpZGF0aW9uLmh0bWwiPlRydWVUeXBlR1gvQUFUIFZhbGlkYXRpb248L2E+PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QW4gQVBJIHRvIHZhbGlkYXRlIFRydWVUeXBlR1gvQUFUIHRhYmxlcy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj48YSBocmVmPSJmdDItaW5kZXguaHRtbCI+R2xvYmFsIEluZGV4PC9hPjwvaDI+PC9kaXY+Cis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKworPGRpdiBjbGFzcz0idGltZXN0YW1wIj5nZW5lcmF0ZWQgb24gU3VuIEp1biAgNyAxNjoxMzowNSAyMDE1PC9kaXY+PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHJ1ZXR5cGVfZW5naW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NmQwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHJ1ZXR5cGVfZW5naW5lLmh0bWwKQEAgLTAsMCArMSwxNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5UaGUgVHJ1ZVR5cGUgRW5naW5lPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1RydWVUeXBlRW5naW5lVHlwZSI+RlRfVHJ1ZVR5cGVFbmdpbmVUeXBlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUiPkZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZTwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyBhIGZ1bmN0aW9uIHVzZWQgdG8gcXVlcnkgdGhlIGxldmVsIG9mIFRydWVUeXBlIGJ5dGVjb2RlIHN1cHBvcnQgY29tcGlsZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1RydWVUeXBlRW5naW5lVHlwZSI+RlRfVHJ1ZVR5cGVFbmdpbmVUeXBlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZW51bTwvc3Bhbj4gIEZUX1RydWVUeXBlRW5naW5lVHlwZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCNGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9OT05FIj5GVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9OT05FPC9hPiA9IDAsCisgICAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX2VuZ2luZS5odG1sI0ZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1VOUEFURU5URUQiPkZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1VOUEFURU5URUQ8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCNGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRCI+RlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfUEFURU5URUQ8L2E+CisKKyAgfSA8Yj5GVF9UcnVlVHlwZUVuZ2luZVR5cGU8L2I+OworPC9wcmU+CisKKzxwPkEgbGlzdCBvZiB2YWx1ZXMgZGVzY3JpYmluZyB3aGljaCBraW5kIG9mIFRydWVUeXBlIGJ5dGVjb2RlIGVuZ2luZSBpcyBpbXBsZW1lbnRlZCBpbiBhIGdpdmVuIEZUX0xpYnJhcnkgaW5zdGFuY2UuIEl0IGlzIHVzZWQgYnkgdGhlIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCNGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUiPkZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZTwvYT4gZnVuY3Rpb24uPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX05PTkUiPkZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX05PTkU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbGlicmFyeSBkb2Vzbid0IGltcGxlbWVudCBhbnkga2luZCBvZiBieXRlY29kZSBpbnRlcnByZXRlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9VTlBBVEVOVEVEIj5GVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9VTlBBVEVOVEVEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGxpYnJhcnkgaW1wbGVtZW50cyBhIGJ5dGVjb2RlIGludGVycHJldGVyIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoZSBwYXRlbnRlZCBvcGVyYXRpb25zIG9mIHRoZSBUcnVlVHlwZSB2aXJ0dWFsIG1hY2hpbmUuPC9wPgorPHA+SXRzIG1haW4gdXNlIGlzIHRvIGxvYWQgY2VydGFpbiBBc2lhbiBmb250cyB0aGF0IHBvc2l0aW9uIGFuZCBzY2FsZSBnbHlwaCBjb21wb25lbnRzIHdpdGggYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLiBJdCBwcm9kdWNlcyBiYWQgb3V0cHV0IGZvciBtb3N0IG90aGVyIGZvbnRzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1BBVEVOVEVEIj5GVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBsaWJyYXJ5IGltcGxlbWVudHMgYSBieXRlY29kZSBpbnRlcnByZXRlciB0aGF0IGNvdmVycyB0aGUgZnVsbCBpbnN0cnVjdGlvbiBzZXQgb2YgdGhlIFRydWVUeXBlIHZpcnR1YWwgbWFjaGluZSAodGhpcyB3YXMgZ292ZXJuZWQgYnkgcGF0ZW50cyB1bnRpbCBNYXkgMjAxMCwgaGVuY2UgdGhlIG5hbWUpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjI8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZSI+RlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfTU9EVUxFX0ggKGZ0bW9kYXBpLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLXRydWV0eXBlX2VuZ2luZS5odG1sI0ZUX1RydWVUeXBlRW5naW5lVHlwZSI+RlRfVHJ1ZVR5cGVFbmdpbmVUeXBlPC9hPiApCisgIDxiPkZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICBsaWJyYXJ5ICk7Cis8L3ByZT4KKworPHA+UmV0dXJuIGFuIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV9lbmdpbmUuaHRtbCNGVF9UcnVlVHlwZUVuZ2luZVR5cGUiPkZUX1RydWVUeXBlRW5naW5lVHlwZTwvYT4gdmFsdWUgdG8gaW5kaWNhdGUgd2hpY2ggbGV2ZWwgb2YgdGhlIFRydWVUeXBlIHZpcnR1YWwgbWFjaGluZSBhIGdpdmVuIGxpYnJhcnkgaW5zdGFuY2Ugc3VwcG9ydHMuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgbGlicmFyeSBpbnN0YW5jZS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkEgdmFsdWUgaW5kaWNhdGluZyB3aGljaCBsZXZlbCBpcyBzdXBwb3J0ZWQuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4yPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTJlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sCkBAIC0wLDAgKzEsMTE3MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBhOmxpbmsgeyBjb2xvcjogIzAwMDBFRjsgfQorICBhOnZpc2l0ZWQgeyBjb2xvcjogIzUxMTg4RTsgfQorICBhOmhvdmVyIHsgY29sb3I6ICNGRjAwMDA7IH0KKworICBib2R5IHsgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2VyaWY7CisgICAgICAgICBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7CisgICAgICAgICB3aWR0aDogODclOworICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisKKyAgZGl2LnNlY3Rpb24geyB3aWR0aDogNzUlOworICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorICBkaXYuc2VjdGlvbiBociB7IG1hcmdpbjogNGV4IDAgMWV4IDA7IH0KKyAgZGl2LnNlY3Rpb24gaDQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7CisgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAzZXggMCAxLjVleCA5JTsKKyAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjNleCAwIDAuM2V4IDElOyB9CisgIGRpdi5zZWN0aW9uIHAgeyBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHByZSB7IG1hcmdpbjogM2V4IDAgM2V4IDklOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZFOEZGOworICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyZXggMCAyZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUuZmllbGRzIHsgd2lkdGg6IDkwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS50b2MgeyB3aWR0aDogOTUlOworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggNSU7IH0KKyAgZGl2LnRpbWVzdGFtcCB7IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogNjklOworICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDA7IH0KKworICBoMSB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQorICBoMyB7IGZvbnQtc2l6ZTogbWVkaXVtOworICAgICAgIG1hcmdpbjogNGV4IDAgMS41ZXggMDsgfQorCisgIHAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKyAgcHJlLmNvbG9yZWQgeyBjb2xvcjogYmx1ZTsgfQorCisgIHNwYW4ua2V5d29yZCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrYmx1ZTsgfQorCisgIHRhYmxlLmZpZWxkcyB0ZC52YWwgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOyB9CisgIHRhYmxlLmluZGV4IHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMWVtIDAuM2V4OyB9CisgIHRhYmxlLmluZGV4IHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleCB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgeyB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxZXggMCAxZXggMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5sZWZ0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLm1pZGRsZSB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5yaWdodCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsgfQorICB0YWJsZS5zeW5vcHNpcyB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJlbSAwLjZleDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuc3lub3BzaXMgdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnRvYyB0ZC5saW5rIHsgd2lkdGg6IDMwJTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC9oMT4KKworPGgxPlRydWVUeXBlIFRhYmxlczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNUVF9IZWFkZXIiPlRUX0hlYWRlcjwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNUVF9Ib3JpSGVhZGVyIj5UVF9Ib3JpSGVhZGVyPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCI+RlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjVFRfVmVydEhlYWRlciI+VFRfVmVydEhlYWRlcjwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfR2V0X0NNYXBfRm9ybWF0Ij5GVF9HZXRfQ01hcF9Gb3JtYXQ8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjVFRfT1MyIj5UVF9PUzI8L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjVFRfUG9zdHNjcmlwdCI+VFRfUG9zdHNjcmlwdDwvYT48L3RkPjx0ZD48YSBocmVmPSIjRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyI+RlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNUVF9QQ0xUIj5UVF9QQ0xUPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI1RUX01heFByb2ZpbGUiPlRUX01heFByb2ZpbGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI1RUX0FQUExFX0lEX1hYWCI+VFRfQVBQTEVfSURfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1NmbnRfVGFnIj5GVF9TZm50X1RhZzwvYT48L3RkPjx0ZD48YSBocmVmPSIjVFRfTUFDX0lEX1hYWCI+VFRfTUFDX0lEX1hYWDwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9HZXRfU2ZudF9UYWJsZSI+RlRfR2V0X1NmbnRfVGFibGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1RUX0lTT19JRF9YWFgiPlRUX0lTT19JRF9YWFg8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlRfTG9hZF9TZm50X1RhYmxlIj5GVF9Mb2FkX1NmbnRfVGFibGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1RUX01TX0lEX1hYWCI+VFRfTVNfSURfWFhYPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1NmbnRfVGFibGVfSW5mbyI+RlRfU2ZudF9UYWJsZV9JbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNUVF9BRE9CRV9JRF9YWFgiPlRUX0FET0JFX0lEX1hYWDwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBUcnVlVHlwZS1zcGVjaWZpYyB0YWJsZXMgYXMgd2VsbCBhcyBzb21lIHJvdXRpbmVzIHVzZWQgdG8gYWNjZXNzIGFuZCBwcm9jZXNzIHRoZW0uPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVFRfSGVhZGVyIj5UVF9IZWFkZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9UQUJMRVNfSCAodHR0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBUVF9IZWFkZXJfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgVGFibGVfVmVyc2lvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgRm9udF9SZXZpc2lvbjsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgIENoZWNrU3VtX0FkanVzdDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICBNYWdpY19OdW1iZXI7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIEZsYWdzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgVW5pdHNfUGVyX0VNOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgQ3JlYXRlZCBbMl07CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgTW9kaWZpZWRbMl07CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeE1pbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeU1pbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeE1heDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeU1heDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgTWFjX1N0eWxlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgTG93ZXN0X1JlY19QUEVNOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIEZvbnRfRGlyZWN0aW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBJbmRleF9Ub19Mb2NfRm9ybWF0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBHbHlwaF9EYXRhX0Zvcm1hdDsKKworICB9IDxiPlRUX0hlYWRlcjwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIGZvbnQgaGVhZGVyIHRhYmxlLiBBbGwgZmllbGRzIGZvbGxvdyB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlRUX0hvcmlIZWFkZXIiPlRUX0hvcmlIZWFkZXI8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9UQUJMRVNfSCAodHR0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBUVF9Ib3JpSGVhZGVyXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgIFZlcnNpb247CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIEFzY2VuZGVyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBEZXNjZW5kZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIExpbmVfR2FwOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBhZHZhbmNlX1dpZHRoX01heDsgICAgICAvKiBhZHZhbmNlIHdpZHRoIG1heGltdW0gKi8KKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBtaW5fTGVmdF9TaWRlX0JlYXJpbmc7ICAvKiBtaW5pbXVtIGxlZnQtc2IgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgbWluX1JpZ2h0X1NpZGVfQmVhcmluZzsgLyogbWluaW11bSByaWdodC1zYiAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHhNYXhfRXh0ZW50OyAgICAgICAgICAgIC8qIHhtYXggZXh0ZW50cyAgICAgICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBjYXJldF9TbG9wZV9SaXNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBjYXJldF9TbG9wZV9SdW47CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIGNhcmV0X09mZnNldDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBSZXNlcnZlZFs0XTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBtZXRyaWNfRGF0YV9Gb3JtYXQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBudW1iZXJfT2ZfSE1ldHJpY3M7CisKKyAgICAvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgbm90IGRlZmluZWQgYnkgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gKi8KKyAgICAvKiBidXQgdGhleSBhcmUgdXNlZCB0byBjb25uZWN0IHRoZSBtZXRyaWNzIGhlYWRlciB0byB0aGUgcmVsZXZhbnQgICAgKi8KKyAgICAvKiBgSE1UWCcgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICBsb25nX21ldHJpY3M7CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiAgICAgIHNob3J0X21ldHJpY3M7CisKKyAgfSA8Yj5UVF9Ib3JpSGVhZGVyPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHJ1ZVR5cGUgaG9yaXpvbnRhbCBoZWFkZXIsIHRoZSAmbHNxdW87aGhlYSZyc3F1bzsgdGFibGUsIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaG9yaXpvbnRhbCBtZXRyaWNzIHRhYmxlLCBpLmUuLCB0aGUgJmxzcXVvO2htdHgmcnNxdW87IHRhYmxlLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJWZXJzaW9uIj5WZXJzaW9uPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhYmxlIHZlcnNpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iQXNjZW5kZXIiPkFzY2VuZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZvbnQncyBhc2NlbmRlciwgaS5lLiwgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCBvZiBhbGwgZ2x5cGggcG9pbnRzIGZvdW5kIGluIHRoZSBmb250LjwvcD4KKzxwPlRoaXMgdmFsdWUgaXMgaW52YWxpZCBpbiBtYW55IGZvbnRzLCBhcyBpdCBpcyB1c3VhbGx5IHNldCBieSB0aGUgZm9udCBkZXNpZ25lciwgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnQgKG1heWJlIEFTQ0lJKS48L3A+Cis8cD5Zb3Ugc2hvdWxkIHVzZSB0aGUgJmxzcXVvO3NUeXBvQXNjZW5kZXImcnNxdW87IGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91IHdhbnQgdGhlIGNvcnJlY3Qgb25lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkRlc2NlbmRlciI+RGVzY2VuZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZvbnQncyBkZXNjZW5kZXIsIGkuZS4sIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgYm90dG9tLW1vc3Qgb2YgYWxsIGdseXBoIHBvaW50cyBmb3VuZCBpbiB0aGUgZm9udC4gSXQgaXMgbmVnYXRpdmUuPC9wPgorPHA+VGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgQVNDSUkpLjwvcD4KKzxwPllvdSBzaG91bGQgdXNlIHRoZSAmbHNxdW87c1R5cG9EZXNjZW5kZXImcnNxdW87IGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91IHdhbnQgdGhlIGNvcnJlY3Qgb25lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkxpbmVfR2FwIj5MaW5lX0dhcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmb250J3MgbGluZSBnYXAsIGkuZS4sIHRoZSBkaXN0YW5jZSB0byBhZGQgdG8gdGhlIGFzY2VuZGVyIGFuZCBkZXNjZW5kZXIgdG8gZ2V0IHRoZSBCVEIsIGkuZS4sIHRoZSBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZSBmb3IgdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZV9XaWR0aF9NYXgiPmFkdmFuY2VfV2lkdGhfTWF4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyBmaWVsZCBpcyB0aGUgbWF4aW11bSBvZiBhbGwgYWR2YW5jZSB3aWR0aHMgZm91bmQgaW4gdGhlIGZvbnQuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG1heGltdW0gd2lkdGggb2YgYW4gYXJiaXRyYXJ5IHN0cmluZyBvZiB0ZXh0LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1pbl9MZWZ0X1NpZGVfQmVhcmluZyI+bWluX0xlZnRfU2lkZV9CZWFyaW5nPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1pbmltdW0gbGVmdCBzaWRlIGJlYXJpbmcgb2YgYWxsIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWluX1JpZ2h0X1NpZGVfQmVhcmluZyI+bWluX1JpZ2h0X1NpZGVfQmVhcmluZzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZyBvZiBhbGwgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ4TWF4X0V4dGVudCI+eE1heF9FeHRlbnQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWF4aW11bSBob3Jpem9udGFsIGV4dGVudCAoaS5lLiwgdGhlICZsc3F1bzt3aWR0aCZyc3F1bzsgb2YgYSBnbHlwaCdzIGJvdW5kaW5nIGJveCkgZm9yIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2FyZXRfU2xvcGVfUmlzZSI+Y2FyZXRfU2xvcGVfUmlzZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByaXNlIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyBzbG9wZSBvZiB0aGUgY3Vyc29yIChzbG9wZT1yaXNlL3J1bikuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2FyZXRfU2xvcGVfUnVuIj5jYXJldF9TbG9wZV9SdW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcnVuIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyBzbG9wZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJSZXNlcnZlZCI+UmVzZXJ2ZWQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD44Jm5ic3A7cmVzZXJ2ZWQgYnl0ZXMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibWV0cmljX0RhdGFfRm9ybWF0Ij5tZXRyaWNfRGF0YV9Gb3JtYXQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BbHdheXMmbmJzcDswLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bWJlcl9PZl9ITWV0cmljcyI+bnVtYmVyX09mX0hNZXRyaWNzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TnVtYmVyIG9mIEhNZXRyaWNzIGVudHJpZXMgaW4gdGhlICZsc3F1bztobXR4JnJzcXVvOyB0YWJsZSAtLSB0aGlzIHZhbHVlIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBnbHlwaHMgaW4gdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibG9uZ19tZXRyaWNzIj5sb25nX21ldHJpY3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgaW50byB0aGUgJmxzcXVvO2htdHgmcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9InNob3J0X21ldHJpY3MiPnNob3J0X21ldHJpY3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHBvaW50ZXIgaW50byB0aGUgJmxzcXVvO2htdHgmcnNxdW87IHRhYmxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPklNUE9SVEFOVDogVGhlIFRUX0hvcmlIZWFkZXIgYW5kIFRUX1ZlcnRIZWFkZXIgc3RydWN0dXJlcyBzaG91bGQgYmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlIG5hbWVzIG9mIHRoZWlyIGZpZWxkcywgd2hpY2ggYXJlIGRpZmZlcmVudC48L3A+Cis8cD5UaGlzIGVuc3VyZXMgdGhhdCBhIHNpbmdsZSBmdW5jdGlvbiBpbiB0aGUgJmxzcXVvO3R0bG9hZCZyc3F1bzsgbW9kdWxlIGlzIGFibGUgdG8gcmVhZCBib3RoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBoZWFkZXJzLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVFRfVmVydEhlYWRlciI+VFRfVmVydEhlYWRlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIFRUX1ZlcnRIZWFkZXJfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgVmVyc2lvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgQXNjZW5kZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIERlc2NlbmRlcjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgTGluZV9HYXA7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIGFkdmFuY2VfSGVpZ2h0X01heDsgICAgICAvKiBhZHZhbmNlIGhlaWdodCBtYXhpbXVtICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgbWluX1RvcF9TaWRlX0JlYXJpbmc7ICAgIC8qIG1pbmltdW0gbGVmdC1zYiBvciB0b3Atc2IgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgbWluX0JvdHRvbV9TaWRlX0JlYXJpbmc7IC8qIG1pbmltdW0gcmlnaHQtc2Igb3IgYm90dG9tLXNiICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeU1heF9FeHRlbnQ7ICAgICAgICAgICAgIC8qIHhtYXggb3IgeW1heCBleHRlbnRzICAgICAgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgY2FyZXRfU2xvcGVfUmlzZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgY2FyZXRfU2xvcGVfUnVuOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBjYXJldF9PZmZzZXQ7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgUmVzZXJ2ZWRbNF07CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgbWV0cmljX0RhdGFfRm9ybWF0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbnVtYmVyX09mX1ZNZXRyaWNzOworCisgICAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uICovCisgICAgLyogYnV0IHRoZXkncmUgdXNlZCB0byBjb25uZWN0IHRoZSBtZXRyaWNzIGhlYWRlciB0byB0aGUgcmVsZXZhbnQgICAgICovCisgICAgLyogYEhNVFgnIG9yIGBWTVRYJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4qICAgICAgbG9uZ19tZXRyaWNzOworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiogICAgICBzaG9ydF9tZXRyaWNzOworCisgIH0gPGI+VFRfVmVydEhlYWRlcjwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIHZlcnRpY2FsIGhlYWRlciwgdGhlICZsc3F1bzt2aGVhJnJzcXVvOyB0YWJsZSwgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlLCBpLmUuLCB0aGUgJmxzcXVvO3ZtdHgmcnNxdW87IHRhYmxlLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJWZXJzaW9uIj5WZXJzaW9uPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhYmxlIHZlcnNpb24uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iQXNjZW5kZXIiPkFzY2VuZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZvbnQncyBhc2NlbmRlciwgaS5lLiwgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCBvZiBhbGwgZ2x5cGggcG9pbnRzIGZvdW5kIGluIHRoZSBmb250LjwvcD4KKzxwPlRoaXMgdmFsdWUgaXMgaW52YWxpZCBpbiBtYW55IGZvbnRzLCBhcyBpdCBpcyB1c3VhbGx5IHNldCBieSB0aGUgZm9udCBkZXNpZ25lciwgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnQgKG1heWJlIEFTQ0lJKS48L3A+Cis8cD5Zb3Ugc2hvdWxkIHVzZSB0aGUgJmxzcXVvO3NUeXBvQXNjZW5kZXImcnNxdW87IGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91IHdhbnQgdGhlIGNvcnJlY3Qgb25lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkRlc2NlbmRlciI+RGVzY2VuZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGZvbnQncyBkZXNjZW5kZXIsIGkuZS4sIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgYm90dG9tLW1vc3Qgb2YgYWxsIGdseXBoIHBvaW50cyBmb3VuZCBpbiB0aGUgZm9udC4gSXQgaXMgbmVnYXRpdmUuPC9wPgorPHA+VGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgQVNDSUkpLjwvcD4KKzxwPllvdSBzaG91bGQgdXNlIHRoZSAmbHNxdW87c1R5cG9EZXNjZW5kZXImcnNxdW87IGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91IHdhbnQgdGhlIGNvcnJlY3Qgb25lLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkxpbmVfR2FwIj5MaW5lX0dhcDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBmb250J3MgbGluZSBnYXAsIGkuZS4sIHRoZSBkaXN0YW5jZSB0byBhZGQgdG8gdGhlIGFzY2VuZGVyIGFuZCBkZXNjZW5kZXIgdG8gZ2V0IHRoZSBCVEIsIGkuZS4sIHRoZSBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZSBmb3IgdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWR2YW5jZV9IZWlnaHRfTWF4Ij5hZHZhbmNlX0hlaWdodF9NYXg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGlzIGZpZWxkIGlzIHRoZSBtYXhpbXVtIG9mIGFsbCBhZHZhbmNlIGhlaWdodHMgZm91bmQgaW4gdGhlIGZvbnQuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFuIGFyYml0cmFyeSBzdHJpbmcgb2YgdGV4dC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtaW5fVG9wX1NpZGVfQmVhcmluZyI+bWluX1RvcF9TaWRlX0JlYXJpbmc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWluaW11bSB0b3Agc2lkZSBiZWFyaW5nIG9mIGFsbCBnbHlwaHMgd2l0aGluIHRoZSBmb250LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1pbl9Cb3R0b21fU2lkZV9CZWFyaW5nIj5taW5fQm90dG9tX1NpZGVfQmVhcmluZzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJpbmcgb2YgYWxsIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ieU1heF9FeHRlbnQiPnlNYXhfRXh0ZW50PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gdmVydGljYWwgZXh0ZW50IChpLmUuLCB0aGUgJmxzcXVvO2hlaWdodCZyc3F1bzsgb2YgYSBnbHlwaCdzIGJvdW5kaW5nIGJveCkgZm9yIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2FyZXRfU2xvcGVfUmlzZSI+Y2FyZXRfU2xvcGVfUmlzZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSByaXNlIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyBzbG9wZSBvZiB0aGUgY3Vyc29yIChzbG9wZT1yaXNlL3J1bikuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iY2FyZXRfU2xvcGVfUnVuIj5jYXJldF9TbG9wZV9SdW48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcnVuIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyBzbG9wZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjYXJldF9PZmZzZXQiPmNhcmV0X09mZnNldDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBjdXJzb3IncyBvZmZzZXQgZm9yIHNsYW50ZWQgZm9udHMuIFRoaXMgdmFsdWUgaXMgJmxzcXVvO3Jlc2VydmVkJnJzcXVvOyBpbiB2bXR4IHZlcnNpb24gMS4wLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlJlc2VydmVkIj5SZXNlcnZlZDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjgmbmJzcDtyZXNlcnZlZCBieXRlcy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtZXRyaWNfRGF0YV9Gb3JtYXQiPm1ldHJpY19EYXRhX0Zvcm1hdDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFsd2F5cyZuYnNwOzAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibnVtYmVyX09mX0hNZXRyaWNzIj5udW1iZXJfT2ZfSE1ldHJpY3M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5OdW1iZXIgb2YgVk1ldHJpY3MgZW50cmllcyBpbiB0aGUgJmxzcXVvO3ZtdHgmcnNxdW87IHRhYmxlIC0tIHRoaXMgdmFsdWUgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJsb25nX21ldHJpY3MiPmxvbmdfbWV0cmljczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciBpbnRvIHRoZSAmbHNxdW87dm10eCZyc3F1bzsgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ic2hvcnRfbWV0cmljcyI+c2hvcnRfbWV0cmljczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgcG9pbnRlciBpbnRvIHRoZSAmbHNxdW87dm10eCZyc3F1bzsgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+SU1QT1JUQU5UOiBUaGUgVFRfSG9yaUhlYWRlciBhbmQgVFRfVmVydEhlYWRlciBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUgbmFtZXMgb2YgdGhlaXIgZmllbGRzLCB3aGljaCBhcmUgZGlmZmVyZW50LjwvcD4KKzxwPlRoaXMgZW5zdXJlcyB0aGF0IGEgc2luZ2xlIGZ1bmN0aW9uIGluIHRoZSAmbHNxdW87dHRsb2FkJnJzcXVvOyBtb2R1bGUgaXMgYWJsZSB0byByZWFkIGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGhlYWRlcnMuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUVF9PUzIiPlRUX09TMjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIFRUX09TMl8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogMHgwMDAxIC0gbW9yZSBvciAweEZGRkYgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeEF2Z0NoYXJXaWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHVzV2VpZ2h0Q2xhc3M7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c1dpZHRoQ2xhc3M7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBmc1R5cGU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHlTdWJzY3JpcHRYU2l6ZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeVN1YnNjcmlwdFlTaXplOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICB5U3Vic2NyaXB0WE9mZnNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeVN1YnNjcmlwdFlPZmZzZXQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHlTdXBlcnNjcmlwdFhTaXplOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICB5U3VwZXJzY3JpcHRZU2l6ZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeVN1cGVyc2NyaXB0WE9mZnNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeVN1cGVyc2NyaXB0WU9mZnNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgeVN0cmlrZW91dFNpemU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHlTdHJpa2VvdXRQb3NpdGlvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgc0ZhbWlseUNsYXNzOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgcGFub3NlWzEwXTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICB1bFVuaWNvZGVSYW5nZTE7ICAgICAgICAvKiBCaXRzIDAtMzEgICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICB1bFVuaWNvZGVSYW5nZTI7ICAgICAgICAvKiBCaXRzIDMyLTYzICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICB1bFVuaWNvZGVSYW5nZTM7ICAgICAgICAvKiBCaXRzIDY0LTk1ICAqLworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICB1bFVuaWNvZGVSYW5nZTQ7ICAgICAgICAvKiBCaXRzIDk2LTEyNyAqLworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQ2hhciI+RlRfQ2hhcjwvYT4gICAgYWNoVmVuZElEWzRdOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBmc1NlbGVjdGlvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHVzRmlyc3RDaGFySW5kZXg7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c0xhc3RDaGFySW5kZXg7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHNUeXBvQXNjZW5kZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHNUeXBvRGVzY2VuZGVyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBzVHlwb0xpbmVHYXA7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c1dpbkFzY2VudDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHVzV2luRGVzY2VudDsKKworICAgIC8qIG9ubHkgdmVyc2lvbiAxIGFuZCBoaWdoZXI6ICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgdWxDb2RlUGFnZVJhbmdlMTsgICAgICAgLyogQml0cyAwLTMxICAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgdWxDb2RlUGFnZVJhbmdlMjsgICAgICAgLyogQml0cyAzMi02MyAgKi8KKworICAgIC8qIG9ubHkgdmVyc2lvbiAyIGFuZCBoaWdoZXI6ICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgc3hIZWlnaHQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIHNDYXBIZWlnaHQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c0RlZmF1bHRDaGFyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgdXNCcmVha0NoYXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c01heENvbnRleHQ7CisKKyAgICAvKiBvbmx5IHZlcnNpb24gNSBhbmQgaGlnaGVyOiAqLworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c0xvd2VyT3B0aWNhbFBvaW50U2l6ZTsgICAgICAgLyogaW4gdHdpcHMgKDEvMjB0aCBwb2ludHMpICovCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB1c1VwcGVyT3B0aWNhbFBvaW50U2l6ZTsgICAgICAgLyogaW4gdHdpcHMgKDEvMjB0aCBwb2ludHMpICovCisKKyAgfSA8Yj5UVF9PUzI8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUcnVlVHlwZSBPUy8yIHRhYmxlLiBBbGwgZmllbGRzIGNvbXBseSB0byB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi48L3A+Cis8cD5Ob3RlIHRoYXQgd2Ugbm93IHN1cHBvcnQgb2xkIE1hYyBmb250cyB0aGF0IGRvIG5vdCBpbmNsdWRlIGFuIE9TLzIgdGFibGUuIEluIHRoaXMgY2FzZSwgdGhlICZsc3F1bzt2ZXJzaW9uJnJzcXVvOyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIDB4RkZGRi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlRUX1Bvc3RzY3JpcHQiPlRUX1Bvc3RzY3JpcHQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9UQUJMRVNfSCAodHR0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBUVF9Qb3N0c2NyaXB0XworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgRm9ybWF0VHlwZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICBpdGFsaWNBbmdsZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICB1bmRlcmxpbmVQb3NpdGlvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICB1bmRlcmxpbmVUaGlja25lc3M7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgaXNGaXhlZFBpdGNoOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gIG1pbk1lbVR5cGU0MjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICBtYXhNZW1UeXBlNDI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgbWluTWVtVHlwZTE7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgbWF4TWVtVHlwZTE7CisKKyAgICAvKiBHbHlwaCBuYW1lcyBmb2xsb3cgaW4gdGhlIGZpbGUsIGJ1dCB3ZSBkb24ndCAgICovCisgICAgLyogbG9hZCB0aGVtIGJ5IGRlZmF1bHQuICBTZWUgdGhlIHR0cG9zdC5jIGZpbGUuICAqLworCisgIH0gPGI+VFRfUG9zdHNjcmlwdDwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIFBvc3RTY3JpcHQgdGFibGUuIEFsbCBmaWVsZHMgY29tcGx5IHRvIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLiBUaGlzIHN0cnVjdHVyZSBkb2VzIG5vdCByZWZlcmVuY2UgdGhlIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMsIHdoaWNoIGNhbiBiZSBuZXZlcnRoZWxlc3MgYWNjZXNzZWQgd2l0aCB0aGUgJmxzcXVvO3R0cG9zdCZyc3F1bzsgbW9kdWxlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVFRfUENMVCI+VFRfUENMVDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIFRUX1BDTFRfCisgIHsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgVmVyc2lvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgRm9udE51bWJlcjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIFBpdGNoOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgeEhlaWdodDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIFN0eWxlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgVHlwZUZhbWlseTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIENhcEhlaWdodDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIFN5bWJvbFNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPiAgICBUeXBlRmFjZVsxNl07CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQ2hhciI+RlRfQ2hhcjwvYT4gICAgQ2hhcmFjdGVyQ29tcGxlbWVudFs4XTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPiAgICBGaWxlTmFtZVs2XTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9DaGFyIj5GVF9DaGFyPC9hPiAgICBTdHJva2VXZWlnaHQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQ2hhciI+RlRfQ2hhcjwvYT4gICAgV2lkdGhUeXBlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIFNlcmlmU3R5bGU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgUmVzZXJ2ZWQ7CisKKyAgfSA8Yj5UVF9QQ0xUPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHJ1ZVR5cGUgUENMVCB0YWJsZS4gQWxsIGZpZWxkcyBjb21wbHkgdG8gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUVF9NYXhQcm9maWxlIj5UVF9NYXhQcm9maWxlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJVRVRZUEVfVEFCTEVTX0ggKHR0dGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgVFRfTWF4UHJvZmlsZV8KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICB2ZXJzaW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbnVtR2x5cGhzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4UG9pbnRzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4Q29udG91cnM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBtYXhDb21wb3NpdGVQb2ludHM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBtYXhDb21wb3NpdGVDb250b3VyczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIG1heFpvbmVzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4VHdpbGlnaHRQb2ludHM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBtYXhTdG9yYWdlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4RnVuY3Rpb25EZWZzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4SW5zdHJ1Y3Rpb25EZWZzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4U3RhY2tFbGVtZW50czsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIG1heFNpemVPZkluc3RydWN0aW9uczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIG1heENvbXBvbmVudEVsZW1lbnRzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgbWF4Q29tcG9uZW50RGVwdGg7CisKKyAgfSA8Yj5UVF9NYXhQcm9maWxlPC9iPjsKKzwvcHJlPgorCis8cD5UaGUgbWF4aW11bSBwcm9maWxlIGlzIGEgdGFibGUgY29udGFpbmluZyBtYW55IG1heCB2YWx1ZXMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByZS1hbGxvY2F0ZSBhcnJheXMuIFRoaXMgZW5zdXJlcyB0aGF0IG5vIG1lbW9yeSBhbGxvY2F0aW9uIG9jY3VycyBkdXJpbmcgYSBnbHlwaCBsb2FkLjwvcD4KKworPGg0PmZpZWxkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2ZXJzaW9uIj52ZXJzaW9uPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZlcnNpb24gbnVtYmVyLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im51bUdseXBocyI+bnVtR2x5cGhzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG51bWJlciBvZiBnbHlwaHMgaW4gdGhpcyBUcnVlVHlwZSBmb250LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heFBvaW50cyI+bWF4UG9pbnRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBhIG5vbi1jb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguIFNlZSBhbHNvIHRoZSBzdHJ1Y3R1cmUgZWxlbWVudCAmbHNxdW87bWF4Q29tcG9zaXRlUG9pbnRzJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhDb250b3VycyI+bWF4Q29udG91cnM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgaW4gYSBub24tY29tcG9zaXRlIFRydWVUeXBlIGdseXBoLiBTZWUgYWxzbyB0aGUgc3RydWN0dXJlIGVsZW1lbnQgJmxzcXVvO21heENvbXBvc2l0ZUNvbnRvdXJzJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhDb21wb3NpdGVQb2ludHMiPm1heENvbXBvc2l0ZVBvaW50czwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gYSBjb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguIFNlZSBhbHNvIHRoZSBzdHJ1Y3R1cmUgZWxlbWVudCAmbHNxdW87bWF4UG9pbnRzJnJzcXVvOy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhDb21wb3NpdGVDb250b3VycyI+bWF4Q29tcG9zaXRlQ29udG91cnM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgaW4gYSBjb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguIFNlZSBhbHNvIHRoZSBzdHJ1Y3R1cmUgZWxlbWVudCAmbHNxdW87bWF4Q29udG91cnMmcnNxdW87LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heFpvbmVzIj5tYXhab25lczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiB6b25lcyB1c2VkIGZvciBnbHlwaCBoaW50aW5nLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heFR3aWxpZ2h0UG9pbnRzIj5tYXhUd2lsaWdodFBvaW50czwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIHR3aWxpZ2h0IHpvbmUgdXNlZCBmb3IgZ2x5cGggaGludGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhTdG9yYWdlIj5tYXhTdG9yYWdlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdG9yYWdlIGFyZWEgdXNlZCBmb3IgZ2x5cGggaGludGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhGdW5jdGlvbkRlZnMiPm1heEZ1bmN0aW9uRGVmczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgZm9yIHRoaXMgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhJbnN0cnVjdGlvbkRlZnMiPm1heEluc3RydWN0aW9uRGVmczwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbiBkZWZpbml0aW9ucyBpbiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgZm9yIHRoaXMgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhTdGFja0VsZW1lbnRzIj5tYXhTdGFja0VsZW1lbnRzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YWNrIGVsZW1lbnRzIHVzZWQgZHVyaW5nIGJ5dGVjb2RlIGludGVycHJldGF0aW9uLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heFNpemVPZkluc3RydWN0aW9ucyI+bWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIFRydWVUeXBlIG9wY29kZXMgdXNlZCBmb3IgZ2x5cGggaGludGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJtYXhDb21wb25lbnRFbGVtZW50cyI+bWF4Q29tcG9uZW50RWxlbWVudHM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltcGxlIChpLmUuLCBub24tIGNvbXBvc2l0ZSkgZ2x5cGhzIGluIGEgY29tcG9zaXRlIGdseXBoLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im1heENvbXBvbmVudERlcHRoIj5tYXhDb21wb25lbnREZXB0aDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYXhpbXVtIG5lc3RpbmcgZGVwdGggb2YgY29tcG9zaXRlIGdseXBocy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGlzIHN0cnVjdHVyZSBpcyBvbmx5IHVzZWQgZHVyaW5nIGZvbnQgbG9hZGluZy48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1NmbnRfVGFnIj5GVF9TZm50X1RhZzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBGVF9TZm50X1RhZ18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TRk5UX0hFQUQiPkZUX1NGTlRfSEVBRDwvYT4sCisgICAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NGTlRfTUFYUCI+RlRfU0ZOVF9NQVhQPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU0ZOVF9PUzIiPkZUX1NGTlRfT1MyPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU0ZOVF9ISEVBIj5GVF9TRk5UX0hIRUE8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TRk5UX1ZIRUEiPkZUX1NGTlRfVkhFQTwvYT4sCisgICAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NGTlRfUE9TVCI+RlRfU0ZOVF9QT1NUPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU0ZOVF9QQ0xUIj5GVF9TRk5UX1BDTFQ8L2E+LAorCisgICAgRlRfU0ZOVF9NQVgKKworICB9IDxiPkZUX1NmbnRfVGFnPC9iPjsKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyBgPGI+RlRfU2ZudF9UYWc8L2I+JyAqLworICAvKiB2YWx1ZXMgaW5zdGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X3NmbnRfaGVhZCAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NGTlRfSEVBRCI+RlRfU0ZOVF9IRUFEPC9hPgorI2RlZmluZSBmdF9zZm50X21heHAgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TRk5UX01BWFAiPkZUX1NGTlRfTUFYUDwvYT4KKyNkZWZpbmUgZnRfc2ZudF9vczIgICA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU0ZOVF9PUzIiPkZUX1NGTlRfT1MyPC9hPgorI2RlZmluZSBmdF9zZm50X2hoZWEgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TRk5UX0hIRUEiPkZUX1NGTlRfSEhFQTwvYT4KKyNkZWZpbmUgZnRfc2ZudF92aGVhICA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU0ZOVF9WSEVBIj5GVF9TRk5UX1ZIRUE8L2E+CisjZGVmaW5lIGZ0X3NmbnRfcG9zdCAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NGTlRfUE9TVCI+RlRfU0ZOVF9QT1NUPC9hPgorI2RlZmluZSBmdF9zZm50X3BjbHQgIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9TRk5UX1BDTFQiPkZUX1NGTlRfUENMVDwvYT4KKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiB1c2VkIHRvIHNwZWNpZnkgdGhlIGluZGV4IG9mIGFuIFNGTlQgdGFibGUuIFVzZWQgaW4gdGhlIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9HZXRfU2ZudF9UYWJsZSI+RlRfR2V0X1NmbnRfVGFibGU8L2E+IEFQSSBmdW5jdGlvbi48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU0ZOVF9IRUFEIj5GVF9TRk5UX0hFQUQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UbyBhY2Nlc3MgdGhlIGZvbnQncyA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSGVhZGVyIj5UVF9IZWFkZXI8L2E+IHN0cnVjdHVyZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TRk5UX01BWFAiPkZUX1NGTlRfTUFYUDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRvIGFjY2VzcyB0aGUgZm9udCdzIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NYXhQcm9maWxlIj5UVF9NYXhQcm9maWxlPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU0ZOVF9PUzIiPkZUX1NGTlRfT1MyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VG8gYWNjZXNzIHRoZSBmb250J3MgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX09TMiI+VFRfT1MyPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfU0ZOVF9ISEVBIj5GVF9TRk5UX0hIRUE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UbyBhY2Nlc3MgdGhlIGZvbnQncyA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSG9yaUhlYWRlciI+VFRfSG9yaUhlYWRlcjwvYT4gc3RydWN0dXJlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NGTlRfVkhFQSI+RlRfU0ZOVF9WSEVBPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VG8gYWNjZXNzIHRoZSBmb250J3MgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1ZlcnRIZWFkZXIiPlRUX1ZlcnRIZWFkZXI8L2E+IHN0cnV0dXJlLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1NGTlRfUE9TVCI+RlRfU0ZOVF9QT1NUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VG8gYWNjZXNzIHRoZSBmb250J3MgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1Bvc3RzY3JpcHQiPlRUX1Bvc3RzY3JpcHQ8L2E+IHN0cnVjdHVyZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9TRk5UX1BDTFQiPkZUX1NGTlRfUENMVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRvIGFjY2VzcyB0aGUgZm9udCdzIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QQ0xUIj5UVF9QQ0xUPC9hPiBzdHJ1Y3R1cmUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1NmbnRfVGFibGUiPkZUX0dldF9TZm50X1RhYmxlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJVRVRZUEVfVEFCTEVTX0ggKHR0dGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+KiApCisgIDxiPkZUX0dldF9TZm50X1RhYmxlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI0ZUX1NmbnRfVGFnIj5GVF9TZm50X1RhZzwvYT4gIHRhZyApOworPC9wcmU+CisKKzxwPlJldHVybiBhIHBvaW50ZXIgdG8gYSBnaXZlbiBTRk5UIHRhYmxlIHdpdGhpbiBhIGZhY2UuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgaGFuZGxlIHRvIHRoZSBzb3VyY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFnIj50YWc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgaW5kZXggb2YgdGhlIFNGTlQgdGFibGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5BIHR5cGUtbGVzcyBwb2ludGVyIHRvIHRoZSB0YWJsZS4gVGhpcyB3aWxsIGJlJm5ic3A7MCBpbiBjYXNlIG9mIGVycm9yLCBvciBpZiB0aGUgY29ycmVzcG9uZGluZyB0YWJsZSB3YXMgbm90IGZvdW5kIDxiPk9SPC9iPiBsb2FkZWQgZnJvbSB0aGUgZmlsZS48L3A+Cis8cD5Vc2UgYSB0eXBlY2FzdCBhY2NvcmRpbmcgdG8gJmxzcXVvO3RhZyZyc3F1bzsgdG8gYWNjZXNzIHRoZSBzdHJ1Y3R1cmUgZWxlbWVudHMuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgdGFibGUgaXMgb3duZWQgYnkgdGhlIGZhY2Ugb2JqZWN0IGFuZCBkaXNhcHBlYXJzIHdpdGggaXQuPC9wPgorPHA+VGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bCB0byBhY2Nlc3MgU0ZOVCB0YWJsZXMgdGhhdCBhcmUgbG9hZGVkIGJ5IHRoZSBzZm50LCB0cnVldHlwZSwgYW5kIG9wZW50eXBlIGRyaXZlcnMuIFNlZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjRlRfU2ZudF9UYWciPkZUX1NmbnRfVGFnPC9hPiBmb3IgYSBsaXN0LjwvcD4KKzxwPkhlcmUgYW4gZXhhbXBsZSBob3cgdG8gYWNjZXNzIHRoZSAmbHNxdW87dmhlYSZyc3F1bzsgdGFibGU6PC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIFRUX1ZlcnRIZWFkZXIqICB2ZXJ0X2hlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIHZlcnRfaGVhZGVyID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgKFRUX1ZlcnRIZWFkZXIqKUZUX0dldF9TZm50X1RhYmxlKCBmYWNlLCBGVF9TRk5UX1ZIRUEgKTsgICAgICAgCis8L3ByZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTG9hZF9TZm50X1RhYmxlIj5GVF9Mb2FkX1NmbnRfVGFibGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9UQUJMRVNfSCAodHR0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9FcnJvciI+RlRfRXJyb3I8L2E+ICkKKyAgPGI+RlRfTG9hZF9TZm50X1RhYmxlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiogIGxlbmd0aCApOworPC9wcmU+CisKKzxwPkxvYWQgYW55IGZvbnQgdGFibGUgaW50byBjbGllbnQgbWVtb3J5LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFnIj50YWc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgZm91ci1ieXRlIHRhZyBvZiB0aGUgdGFibGUgdG8gbG9hZC4gVXNlIHRoZSB2YWx1ZSZuYnNwOzAgaWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB3aG9sZSBmb250IGZpbGUuIE90aGVyd2lzZSwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBkZWZpbml0aW9ucyBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iZnQyLWhlYWRlcl9maWxlX21hY3Jvcy5odG1sI0ZUX1RSVUVUWVBFX1RBR1NfSCI+RlRfVFJVRVRZUEVfVEFHU19IPC9hPiBmaWxlLCBvciBmb3JnZSBhIG5ldyBvbmUgd2l0aCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NQUtFX1RBRyI+RlRfTUFLRV9UQUc8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Im9mZnNldCI+b2Zmc2V0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHN0YXJ0aW5nIG9mZnNldCBpbiB0aGUgdGFibGUgKG9yIGZpbGUgaWYgdGFnID09IDApLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYnVmZmVyIj5idWZmZXI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IGJ1ZmZlciBhZGRyZXNzLiBUaGUgY2xpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIG1lbW9yeSBhcnJheSBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIGRhdGEuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pmlub3V0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imxlbmd0aCI+bGVuZ3RoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+SWYgdGhlICZsc3F1bztsZW5ndGgmcnNxdW87IHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRyeSB0byBsb2FkIHRoZSB3aG9sZSB0YWJsZS4gUmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgaXQgZmFpbHMuPC9wPgorPHA+RWxzZSwgaWYgJmxzcXVvOypsZW5ndGgmcnNxdW87IGlzJm5ic3A7MCwgZXhpdCBpbW1lZGlhdGVseSB3aGlsZSByZXR1cm5pbmcgdGhlIHRhYmxlJ3MgKG9yIGZpbGUpIGZ1bGwgc2l6ZSBpbiBpdC48L3A+Cis8cD5FbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSB0YWJsZSBvciBmaWxlLCBmcm9tIHRoZSBzdGFydGluZyBvZmZzZXQuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPklmIHlvdSBuZWVkIHRvIGRldGVybWluZSB0aGUgdGFibGUncyBsZW5ndGggeW91IHNob3VsZCBmaXJzdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAmbHNxdW87Kmxlbmd0aCZyc3F1bzsgc2V0IHRvJm5ic3A7MCwgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9VTG9uZyAgbGVuZ3RoID0gMDsKKworCisgIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKCBmYWNlLCB0YWcsIDAsIE5VTEwsICZhbXA7bGVuZ3RoICk7CisgIGlmICggZXJyb3IgKSB7IC4uLiB0YWJsZSBkb2VzIG5vdCBleGlzdCAuLi4gfQorCisgIGJ1ZmZlciA9IG1hbGxvYyggbGVuZ3RoICk7CisgIGlmICggYnVmZmVyID09IE5VTEwgKSB7IC4uLiBub3QgZW5vdWdoIG1lbW9yeSAuLi4gfQorCisgIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKCBmYWNlLCB0YWcsIDAsIGJ1ZmZlciwgJmFtcDtsZW5ndGggKTsKKyAgaWYgKCBlcnJvciApIHsgLi4uIGNvdWxkIG5vdCBsb2FkIHRhYmxlIC4uLiB9Cis8L3ByZT4KKzxwPk5vdGUgdGhhdCBzdHJ1Y3R1cmVzIGxpa2UgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0hlYWRlciI+VFRfSGVhZGVyPC9hPiBvciA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfT1MyIj5UVF9PUzI8L2E+IGNhbid0IGJlIHVzZWQgd2l0aCB0aGlzIGZ1bmN0aW9uOyB0aGV5IGFyZSBsaW1pdGVkIHRvIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNGVF9HZXRfU2ZudF9UYWJsZSI+RlRfR2V0X1NmbnRfVGFibGU8L2E+LiBSZWFzb24gaXMgdGhhdCB0aG9zZSBzdHJ1Y3R1cmVzIGRlcGVuZCBvbiB0aGUgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSwgd2l0aCB2YXJ5aW5nIHNpemUgKGUuZy4gMzJiaXQgdnMuIDY0Yml0KSBvciBvcmRlciAoYmlnIGVuZGlhbiB2cy4gbGl0dGxlIGVuZGlhbikuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9TZm50X1RhYmxlX0luZm8iPkZUX1NmbnRfVGFibGVfSW5mbzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9TZm50X1RhYmxlX0luZm88L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VJbnQiPkZUX1VJbnQ8L2E+ICAgIHRhYmxlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgKmxlbmd0aCApOworPC9wcmU+CisKKzxwPlJldHVybiBpbmZvcm1hdGlvbiBvbiBhbiBTRk5UIHRhYmxlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idGFibGVfaW5kZXgiPnRhYmxlX2luZGV4PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGluZGV4IG9mIGFuIFNGTlQgdGFibGUuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEZUX0Vycl9UYWJsZV9NaXNzaW5nIGZvciBhbiBpbnZhbGlkIHZhbHVlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5pbm91dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ0YWciPnRhZzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBuYW1lIHRhZyBvZiB0aGUgU0ZOVCB0YWJsZS4gSWYgdGhlIHZhbHVlIGlzIE5VTEwsICZsc3F1bzt0YWJsZV9pbmRleCZyc3F1bzsgaXMgaWdub3JlZCwgYW5kICZsc3F1bztsZW5ndGgmcnNxdW87IHJldHVybnMgdGhlIG51bWJlciBvZiBTRk5UIHRhYmxlcyBpbiB0aGUgZm9udC48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+b3V0cHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9Imxlbmd0aCI+bGVuZ3RoPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIGxlbmd0aCBvZiB0aGUgU0ZOVCB0YWJsZSAob3IgdGhlIG51bWJlciBvZiBTRk5UIHRhYmxlcywgZGVwZW5kaW5nIG9uICZsc3F1bzt0YWcmcnNxdW87KS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+V2hpbGUgcGFyc2luZyBmb250cywgRnJlZVR5cGUgaGFuZGxlcyBTRk5UIHRhYmxlcyB3aXRoIGxlbmd0aCB6ZXJvIGFzIG1pc3NpbmcuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCI+RlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQ8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9UQUJMRVNfSCAodHR0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgRlRfRVhQT1JUKCA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICkKKyAgPGI+RlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQ8L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9DaGFyTWFwIj5GVF9DaGFyTWFwPC9hPiAgY2hhcm1hcCApOworPC9wcmU+CisKKzxwPlJldHVybiBUcnVlVHlwZS9zZm50IHNwZWNpZmljIGNtYXAgbGFuZ3VhZ2UgSUQuIERlZmluaXRpb25zIG9mIGxhbmd1YWdlIElEIHZhbHVlcyBhcmUgaW4gJmxzcXVvO3R0bmFtZWlkLmgmcnNxdW87LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImNoYXJtYXAiPmNoYXJtYXA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgdGFyZ2V0IGNoYXJtYXAuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5UaGUgbGFuZ3VhZ2UgSUQgb2YgJmxzcXVvO2NoYXJtYXAmcnNxdW87LiBJZiAmbHNxdW87Y2hhcm1hcCZyc3F1bzsgZG9lc24ndCBiZWxvbmcgdG8gYSBUcnVlVHlwZS9zZm50IGZhY2UsIGp1c3QgcmV0dXJuJm5ic3A7MCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS48L3A+Cis8cD5Gb3IgYSBmb3JtYXQmbmJzcDsxNCBjbWFwICh0byBhY2Nlc3MgVW5pY29kZSBJVlMpLCB0aGUgcmV0dXJuIHZhbHVlIGlzIDB4RkZGRkZGRkYuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfQ01hcF9Gb3JtYXQiPkZUX0dldF9DTWFwX0Zvcm1hdDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX1RBQkxFU19IICh0dHRhYmxlcy5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICkKKyAgPGI+RlRfR2V0X0NNYXBfRm9ybWF0PC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfQ2hhck1hcCI+RlRfQ2hhck1hcDwvYT4gIGNoYXJtYXAgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gVHJ1ZVR5cGUvc2ZudCBzcGVjaWZpYyBjbWFwIGZvcm1hdC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJjaGFybWFwIj5jaGFybWFwPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHRhcmdldCBjaGFybWFwLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+VGhlIGZvcm1hdCBvZiAmbHNxdW87Y2hhcm1hcCZyc3F1bzsuIElmICZsc3F1bztjaGFybWFwJnJzcXVvOyBkb2Vzbid0IGJlbG9uZyB0byBhIFRydWVUeXBlL3NmbnQgZmFjZSwgcmV0dXJuIC0xLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyI+RlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1VOUEFURU5URURfSElOVElOR19IICh0dHVucGF0LmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxiPkZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkc8L2I+ICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9NQUtFX1RBRyI+RlRfTUFLRV9UQUc8L2E+KCAndScsICduJywgJ3AnLCAnYScgKQorPC9wcmU+CisKKzxwPkEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIGFuIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX1BhcmFtZXRlciI+RlRfUGFyYW1ldGVyPC9hPiBzdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhhdCB1bnBhdGVudGVkIG1ldGhvZHMgb25seSBzaG91bGQgYmUgdXNlZCBieSB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgZm9yIGEgdHlwZWZhY2Ugb3BlbmVkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX09wZW5fRmFjZSI+RlRfT3Blbl9GYWNlPC9hPi48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlRUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJVRVRZUEVfSURTX0ggKHR0bmFtZWlkLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9BUFBMRV9VTklDT0RFIj5UVF9QTEFURk9STV9BUFBMRV9VTklDT0RFPC9hPiAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fTUFDSU5UT1NIIj5UVF9QTEFURk9STV9NQUNJTlRPU0g8L2E+ICAgICAgMQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fSVNPIj5UVF9QTEFURk9STV9JU088L2E+ICAgICAgICAgICAgMiAvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9NSUNST1NPRlQiPlRUX1BMQVRGT1JNX01JQ1JPU09GVDwvYT4gICAgICAzCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9DVVNUT00iPlRUX1BMQVRGT1JNX0NVU1RPTTwvYT4gICAgICAgICA0CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9BRE9CRSI+VFRfUExBVEZPUk1fQURPQkU8L2E+ICAgICAgICAgIDcgLyogYXJ0aWZpY2lhbCAqLworPC9wcmU+CisKKzxwPkEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSAmbHNxdW87cGxhdGZvcm1faWQmcnNxdW87IGlkZW50aWZpZXIgY29kZSBpbiA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9DaGFyTWFwUmVjIj5GVF9DaGFyTWFwUmVjPC9hPiBhbmQgPGEgaHJlZj0iZnQyLXNmbnRfbmFtZXMuaHRtbCNGVF9TZm50TmFtZSI+RlRfU2ZudE5hbWU8L2E+IHN0cnVjdHVyZXMuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX1BMQVRGT1JNX0FQUExFX1VOSUNPREUiPlRUX1BMQVRGT1JNX0FQUExFX1VOSUNPREU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIGJ5IEFwcGxlIHRvIGluZGljYXRlIGEgVW5pY29kZSBjaGFyYWN0ZXIgbWFwIGFuZC9vciBuYW1lIGVudHJ5LiBTZWUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FQUExFX0lEX1hYWCI+VFRfQVBQTEVfSURfWFhYPC9hPiBmb3IgY29ycmVzcG9uZGluZyAmbHNxdW87ZW5jb2RpbmdfaWQmcnNxdW87IHZhbHVlcy4gTm90ZSB0aGF0IG5hbWUgZW50cmllcyBpbiB0aGlzIGZvcm1hdCBhcmUgY29kZWQgYXMgYmlnLWVuZGlhbiBVQ1MtMiBjaGFyYWN0ZXIgY29kZXMgPGk+b25seTwvaT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfUExBVEZPUk1fTUFDSU5UT1NIIj5UVF9QTEFURk9STV9NQUNJTlRPU0g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vc2VkIGJ5IEFwcGxlIHRvIGluZGljYXRlIGEgTWFjT1Mtc3BlY2lmaWMgY2hhcm1hcCBhbmQvb3IgbmFtZSBlbnRyeS4gU2VlIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfWFhYIj5UVF9NQUNfSURfWFhYPC9hPiBmb3IgY29ycmVzcG9uZGluZyAmbHNxdW87ZW5jb2RpbmdfaWQmcnNxdW87IHZhbHVlcy4gTm90ZSB0aGF0IG1vc3QgVHJ1ZVR5cGUgZm9udHMgY29udGFpbiBhbiBBcHBsZSByb21hbiBjaGFybWFwIHRvIGJlIHVzYWJsZSBvbiBNYWNPUyBzeXN0ZW1zIChldmVuIGlmIHRoZXkgY29udGFpbiBhIE1pY3Jvc29mdCBjaGFybWFwIGFzIHdlbGwpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX1BMQVRGT1JNX0lTTyI+VFRfUExBVEZPUk1fSVNPPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyB2YWx1ZSB3YXMgdXNlZCB0byBzcGVjaWZ5IElTTy9JRUMgMTA2NDYgY2hhcm1hcHMuIEl0IGlzIGhvd2V2ZXIgbm93IGRlcHJlY2F0ZWQuIFNlZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSVNPX0lEX1hYWCI+VFRfSVNPX0lEX1hYWDwvYT4gZm9yIGEgbGlzdCBvZiBjb3JyZXNwb25kaW5nICZsc3F1bztlbmNvZGluZ19pZCZyc3F1bzsgdmFsdWVzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX1BMQVRGT1JNX01JQ1JPU09GVCI+VFRfUExBVEZPUk1fTUlDUk9TT0ZUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VXNlZCBieSBNaWNyb3NvZnQgdG8gaW5kaWNhdGUgV2luZG93cy1zcGVjaWZpYyBjaGFybWFwcy4gU2VlIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9YWFgiPlRUX01TX0lEX1hYWDwvYT4gZm9yIGEgbGlzdCBvZiBjb3JyZXNwb25kaW5nICZsc3F1bztlbmNvZGluZ19pZCZyc3F1bzsgdmFsdWVzLiBOb3RlIHRoYXQgbW9zdCBmb250cyBjb250YWluIGEgVW5pY29kZSBjaGFybWFwIHVzaW5nIChUVF9QTEFURk9STV9NSUNST1NPRlQsIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9YWFgiPlRUX01TX0lEX1VOSUNPREVfQ1M8L2E+KS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9QTEFURk9STV9DVVNUT00iPlRUX1BMQVRGT1JNX0NVU1RPTTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVzZWQgdG8gaW5kaWNhdGUgYXBwbGljYXRpb24tc3BlY2lmaWMgY2hhcm1hcHMuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfUExBVEZPUk1fQURPQkUiPlRUX1BMQVRGT1JNX0FET0JFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhpcyB2YWx1ZSBpc24ndCBwYXJ0IG9mIGFueSBmb250IGZvcm1hdCBzcGVjaWZpY2F0aW9uLCBidXQgaXMgdXNlZCBieSBGcmVlVHlwZSB0byByZXBvcnQgQWRvYmUtc3BlY2lmaWMgY2hhcm1hcHMgaW4gYW4gPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfQ2hhck1hcFJlYyI+RlRfQ2hhck1hcFJlYzwvYT4gc3RydWN0dXJlLiBTZWUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FET0JFX0lEX1hYWCI+VFRfQURPQkVfSURfWFhYPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUVF9BUFBMRV9JRF9YWFgiPlRUX0FQUExFX0lEX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX0lEU19IICh0dG5hbWVpZC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQVBQTEVfSURfREVGQVVMVCI+VFRfQVBQTEVfSURfREVGQVVMVDwvYT4gICAgICAgICAgIDAgLyogVW5pY29kZSAxLjAgKi8KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FQUExFX0lEX1VOSUNPREVfMV8xIj5UVF9BUFBMRV9JRF9VTklDT0RFXzFfMTwvYT4gICAgICAgMSAvKiBzcGVjaWZ5IEhhbmd1bCBhdCBVKzM0eHggKi8KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FQUExFX0lEX0lTT18xMDY0NiI+VFRfQVBQTEVfSURfSVNPXzEwNjQ2PC9hPiAgICAgICAgIDIgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQVBQTEVfSURfVU5JQ09ERV8yXzAiPlRUX0FQUExFX0lEX1VOSUNPREVfMl8wPC9hPiAgICAgICAzIC8qIG9yIGxhdGVyICovCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BUFBMRV9JRF9VTklDT0RFXzMyIj5UVF9BUFBMRV9JRF9VTklDT0RFXzMyPC9hPiAgICAgICAgNCAvKiAyLjAgb3IgbGF0ZXIsIGZ1bGwgcmVwZXJ0b2lyZSAqLworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQVBQTEVfSURfVkFSSUFOVF9TRUxFQ1RPUiI+VFRfQVBQTEVfSURfVkFSSUFOVF9TRUxFQ1RPUjwvYT4gIDUgLyogdmFyaWF0aW9uIHNlbGVjdG9yIGRhdGEgKi8KKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgJmxzcXVvO2VuY29kaW5nX2lkJnJzcXVvOyBmb3IgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERTwvYT4gY2hhcm1hcHMgYW5kIG5hbWUgZW50cmllcy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfQVBQTEVfSURfREVGQVVMVCI+VFRfQVBQTEVfSURfREVGQVVMVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlVuaWNvZGUgdmVyc2lvbiAxLjAuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfQVBQTEVfSURfVU5JQ09ERV8xXzEiPlRUX0FQUExFX0lEX1VOSUNPREVfMV8xPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VW5pY29kZSAxLjE7IHNwZWNpZmllcyBIYW5ndWwgY2hhcmFjdGVycyBzdGFydGluZyBhdCBVKzM0eHguPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfQVBQTEVfSURfSVNPXzEwNjQ2Ij5UVF9BUFBMRV9JRF9JU09fMTA2NDY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5EZXByZWNhdGVkIChpZGVudGljYWwgdG8gcHJlY2VkaW5nKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9BUFBMRV9JRF9VTklDT0RFXzJfMCI+VFRfQVBQTEVfSURfVU5JQ09ERV8yXzA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vbmljb2RlIDIuMCBhbmQgYmV5b25kIChVVEYtMTYgQk1QIG9ubHkpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX0FQUExFX0lEX1VOSUNPREVfMzIiPlRUX0FQUExFX0lEX1VOSUNPREVfMzI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Vbmljb2RlIDMuMSBhbmQgYmV5b25kLCB1c2luZyBVVEYtMzIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfQVBQTEVfSURfVkFSSUFOVF9TRUxFQ1RPUiI+VFRfQVBQTEVfSURfVkFSSUFOVF9TRUxFQ1RPUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkZyb20gQWRvYmUsIG5vdCBBcHBsZS4gTm90IGEgbm9ybWFsIGNtYXAuIFNwZWNpZmllcyB2YXJpYXRpb25zIG9uIGEgcmVhbCBjbWFwLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlRUX01BQ19JRF9YWFgiPlRUX01BQ19JRF9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UUlVFVFlQRV9JRFNfSCAodHRuYW1laWQuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9ST01BTiI+VFRfTUFDX0lEX1JPTUFOPC9hPiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0pBUEFORVNFIj5UVF9NQUNfSURfSkFQQU5FU0U8L2E+ICAgICAgICAgICAgICAxCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfVFJBRElUSU9OQUxfQ0hJTkVTRSI+VFRfTUFDX0lEX1RSQURJVElPTkFMX0NISU5FU0U8L2E+ICAgMgorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0tPUkVBTiI+VFRfTUFDX0lEX0tPUkVBTjwvYT4gICAgICAgICAgICAgICAgMworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0FSQUJJQyI+VFRfTUFDX0lEX0FSQUJJQzwvYT4gICAgICAgICAgICAgICAgNAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0hFQlJFVyI+VFRfTUFDX0lEX0hFQlJFVzwvYT4gICAgICAgICAgICAgICAgNQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0dSRUVLIj5UVF9NQUNfSURfR1JFRUs8L2E+ICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfUlVTU0lBTiI+VFRfTUFDX0lEX1JVU1NJQU48L2E+ICAgICAgICAgICAgICAgNworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1JTWU1CT0wiPlRUX01BQ19JRF9SU1lNQk9MPC9hPiAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9ERVZBTkFHQVJJIj5UVF9NQUNfSURfREVWQU5BR0FSSTwvYT4gICAgICAgICAgICA5CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfR1VSTVVLSEkiPlRUX01BQ19JRF9HVVJNVUtISTwvYT4gICAgICAgICAgICAgMTAKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9HVUpBUkFUSSI+VFRfTUFDX0lEX0dVSkFSQVRJPC9hPiAgICAgICAgICAgICAxMQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX09SSVlBIj5UVF9NQUNfSURfT1JJWUE8L2E+ICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfQkVOR0FMSSI+VFRfTUFDX0lEX0JFTkdBTEk8L2E+ICAgICAgICAgICAgICAxMworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1RBTUlMIj5UVF9NQUNfSURfVEFNSUw8L2E+ICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfVEVMVUdVIj5UVF9NQUNfSURfVEVMVUdVPC9hPiAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfS0FOTkFEQSI+VFRfTUFDX0lEX0tBTk5BREE8L2E+ICAgICAgICAgICAgICAxNgorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX01BTEFZQUxBTSI+VFRfTUFDX0lEX01BTEFZQUxBTTwvYT4gICAgICAgICAgICAxNworI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1NJTkhBTEVTRSI+VFRfTUFDX0lEX1NJTkhBTEVTRTwvYT4gICAgICAgICAgICAxOAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX0JVUk1FU0UiPlRUX01BQ19JRF9CVVJNRVNFPC9hPiAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9LSE1FUiI+VFRfTUFDX0lEX0tITUVSPC9hPiAgICAgICAgICAgICAgICAyMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1RIQUkiPlRUX01BQ19JRF9USEFJPC9hPiAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9MQU9USUFOIj5UVF9NQUNfSURfTEFPVElBTjwvYT4gICAgICAgICAgICAgIDIyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfR0VPUkdJQU4iPlRUX01BQ19JRF9HRU9SR0lBTjwvYT4gICAgICAgICAgICAgMjMKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9BUk1FTklBTiI+VFRfTUFDX0lEX0FSTUVOSUFOPC9hPiAgICAgICAgICAgICAyNAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX01BTERJVklBTiI+VFRfTUFDX0lEX01BTERJVklBTjwvYT4gICAgICAgICAgICAyNQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1NJTVBMSUZJRURfQ0hJTkVTRSI+VFRfTUFDX0lEX1NJTVBMSUZJRURfQ0hJTkVTRTwvYT4gICAyNQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1RJQkVUQU4iPlRUX01BQ19JRF9USUJFVEFOPC9hPiAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9NT05HT0xJQU4iPlRUX01BQ19JRF9NT05HT0xJQU48L2E+ICAgICAgICAgICAgMjcKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01BQ19JRF9HRUVaIj5UVF9NQUNfSURfR0VFWjwvYT4gICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfU0xBVklDIj5UVF9NQUNfSURfU0xBVklDPC9hPiAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NQUNfSURfVklFVE5BTUVTRSI+VFRfTUFDX0lEX1ZJRVROQU1FU0U8L2E+ICAgICAgICAgICAzMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1NJTkRISSI+VFRfTUFDX0lEX1NJTkRISTwvYT4gICAgICAgICAgICAgICAzMQorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTUFDX0lEX1VOSU5URVJQIj5UVF9NQUNfSURfVU5JTlRFUlA8L2E+ICAgICAgICAgICAgIDMyCis8L3ByZT4KKworPHA+QSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlICZsc3F1bztlbmNvZGluZ19pZCZyc3F1bzsgZm9yIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9QTEFURk9STV9YWFgiPlRUX1BMQVRGT1JNX01BQ0lOVE9TSDwvYT4gY2hhcm1hcHMgYW5kIG5hbWUgZW50cmllcy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1JPTUFOIj5UVF9NQUNfSURfUk9NQU48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfSkFQQU5FU0UiPlRUX01BQ19JRF9KQVBBTkVTRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9UUkFESVRJT05BTF9DSElORVNFIj5UVF9NQUNfSURfVFJBRElUSU9OQUxfQ0hJTkVTRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9LT1JFQU4iPlRUX01BQ19JRF9LT1JFQU48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfQVJBQklDIj5UVF9NQUNfSURfQVJBQklDPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0hFQlJFVyI+VFRfTUFDX0lEX0hFQlJFVzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9HUkVFSyI+VFRfTUFDX0lEX0dSRUVLPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1JVU1NJQU4iPlRUX01BQ19JRF9SVVNTSUFOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1JTWU1CT0wiPlRUX01BQ19JRF9SU1lNQk9MPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0RFVkFOQUdBUkkiPlRUX01BQ19JRF9ERVZBTkFHQVJJPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0dVUk1VS0hJIj5UVF9NQUNfSURfR1VSTVVLSEk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfR1VKQVJBVEkiPlRUX01BQ19JRF9HVUpBUkFUSTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9PUklZQSI+VFRfTUFDX0lEX09SSVlBPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0JFTkdBTEkiPlRUX01BQ19JRF9CRU5HQUxJPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1RBTUlMIj5UVF9NQUNfSURfVEFNSUw8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfVEVMVUdVIj5UVF9NQUNfSURfVEVMVUdVPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0tBTk5BREEiPlRUX01BQ19JRF9LQU5OQURBPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX01BTEFZQUxBTSI+VFRfTUFDX0lEX01BTEFZQUxBTTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9TSU5IQUxFU0UiPlRUX01BQ19JRF9TSU5IQUxFU0U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfQlVSTUVTRSI+VFRfTUFDX0lEX0JVUk1FU0U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfS0hNRVIiPlRUX01BQ19JRF9LSE1FUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9USEFJIj5UVF9NQUNfSURfVEhBSTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9MQU9USUFOIj5UVF9NQUNfSURfTEFPVElBTjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9HRU9SR0lBTiI+VFRfTUFDX0lEX0dFT1JHSUFOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX0FSTUVOSUFOIj5UVF9NQUNfSURfQVJNRU5JQU48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfTUFMRElWSUFOIj5UVF9NQUNfSURfTUFMRElWSUFOPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1NJTVBMSUZJRURfQ0hJTkVTRSI+VFRfTUFDX0lEX1NJTVBMSUZJRURfQ0hJTkVTRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9USUJFVEFOIj5UVF9NQUNfSURfVElCRVRBTjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9NT05HT0xJQU4iPlRUX01BQ19JRF9NT05HT0xJQU48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfR0VFWiI+VFRfTUFDX0lEX0dFRVo8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NQUNfSURfU0xBVklDIj5UVF9NQUNfSURfU0xBVklDPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1ZJRVROQU1FU0UiPlRUX01BQ19JRF9WSUVUTkFNRVNFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTUFDX0lEX1NJTkRISSI+VFRfTUFDX0lEX1NJTkRISTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01BQ19JRF9VTklOVEVSUCI+VFRfTUFDX0lEX1VOSU5URVJQPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVFRfSVNPX0lEX1hYWCI+VFRfSVNPX0lEX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX0lEU19IICh0dG5hbWVpZC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSVNPX0lEXzdCSVRfQVNDSUkiPlRUX0lTT19JRF83QklUX0FTQ0lJPC9hPiAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfSVNPX0lEXzEwNjQ2Ij5UVF9JU09fSURfMTA2NDY8L2E+ICAgICAgIDEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0lTT19JRF84ODU5XzEiPlRUX0lTT19JRF84ODU5XzE8L2E+ICAgICAgMgorPC9wcmU+CisKKzxwPkEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSAmbHNxdW87ZW5jb2RpbmdfaWQmcnNxdW87IGZvciA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfUExBVEZPUk1fWFhYIj5UVF9QTEFURk9STV9JU088L2E+IGNoYXJtYXBzIGFuZCBuYW1lIGVudHJpZXMuPC9wPgorPHA+VGhlaXIgdXNlIGlzIG5vdyBkZXByZWNhdGVkLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9JU09fSURfN0JJVF9BU0NJSSI+VFRfSVNPX0lEXzdCSVRfQVNDSUk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BU0NJSS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9JU09fSURfMTA2NDYiPlRUX0lTT19JRF8xMDY0NjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPklTTy8xMDY0Ni48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9JU09fSURfODg1OV8xIj5UVF9JU09fSURfODg1OV8xPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QWxzbyBrbm93biBhcyBMYXRpbi0xLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlRUX01TX0lEX1hYWCI+VFRfTVNfSURfWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJVRVRZUEVfSURTX0ggKHR0bmFtZWlkLmgpLjwvcD4KKzxwcmU+CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9TWU1CT0xfQ1MiPlRUX01TX0lEX1NZTUJPTF9DUzwvYT4gICAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfTVNfSURfVU5JQ09ERV9DUyI+VFRfTVNfSURfVU5JQ09ERV9DUzwvYT4gICAxCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9TSklTIj5UVF9NU19JRF9TSklTPC9hPiAgICAgICAgIDIKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX0dCMjMxMiI+VFRfTVNfSURfR0IyMzEyPC9hPiAgICAgICAzCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9CSUdfNSI+VFRfTVNfSURfQklHXzU8L2E+ICAgICAgICA0CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9NU19JRF9XQU5TVU5HIj5UVF9NU19JRF9XQU5TVU5HPC9hPiAgICAgIDUKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX0pPSEFCIj5UVF9NU19JRF9KT0hBQjwvYT4gICAgICAgIDYKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX01TX0lEX1VDU180Ij5UVF9NU19JRF9VQ1NfNDwvYT4gICAgICAgMTAKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgJmxzcXVvO2VuY29kaW5nX2lkJnJzcXVvOyBmb3IgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fTUlDUk9TT0ZUPC9hPiBjaGFybWFwcyBhbmQgbmFtZSBlbnRyaWVzLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NU19JRF9TWU1CT0xfQ1MiPlRUX01TX0lEX1NZTUJPTF9DUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIE1pY3Jvc29mdCBzeW1ib2wgZW5jb2RpbmcuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfTVNfU1lNQk9MPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NU19JRF9VTklDT0RFX0NTIj5UVF9NU19JRF9VTklDT0RFX0NTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gYSBNaWNyb3NvZnQgV0dMNCBjaGFybWFwLCBtYXRjaGluZyBVbmljb2RlLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX1VOSUNPREU8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01TX0lEX1NKSVMiPlRUX01TX0lEX1NKSVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byBTSklTIEphcGFuZXNlIGVuY29kaW5nLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX1NKSVM8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01TX0lEX0dCMjMxMiI+VFRfTVNfSURfR0IyMzEyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+Q29ycmVzcG9uZHMgdG8gU2ltcGxpZmllZCBDaGluZXNlIGFzIHVzZWQgaW4gTWFpbmxhbmQgQ2hpbmEuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfR0IyMzEyPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NU19JRF9CSUdfNSI+VFRfTVNfSURfQklHXzU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byBUcmFkaXRpb25hbCBDaGluZXNlIGFzIHVzZWQgaW4gVGFpd2FuIGFuZCBIb25nIEtvbmcuIFNlZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9FbmNvZGluZyI+RlRfRU5DT0RJTkdfQklHNTwvYT4uPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfTVNfSURfV0FOU1VORyI+VFRfTVNfSURfV0FOU1VORzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIEtvcmVhbiBXYW5zdW5nIGVuY29kaW5nLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX1dBTlNVTkc8L2E+LjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlRUX01TX0lEX0pPSEFCIj5UVF9NU19JRF9KT0hBQjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkNvcnJlc3BvbmRzIHRvIEpvaGFiIGVuY29kaW5nLiBTZWUgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRW5jb2RpbmciPkZUX0VOQ09ESU5HX0pPSEFCPC9hPi48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9NU19JRF9VQ1NfNCI+VFRfTVNfSURfVUNTXzQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Db3JyZXNwb25kcyB0byBVQ1MtNCBvciBVVEYtMzIgY2hhcm1hcHMuIFRoaXMgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjQgKG1pZC0yMDAxLik8L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUVF9BRE9CRV9JRF9YWFgiPlRUX0FET0JFX0lEX1hYWDwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RSVUVUWVBFX0lEU19IICh0dG5hbWVpZC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQURPQkVfSURfU1RBTkRBUkQiPlRUX0FET0JFX0lEX1NUQU5EQVJEPC9hPiAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItdHJ1ZXR5cGVfdGFibGVzLmh0bWwjVFRfQURPQkVfSURfRVhQRVJUIj5UVF9BRE9CRV9JRF9FWFBFUlQ8L2E+ICAgIDEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX0FET0JFX0lEX0NVU1RPTSI+VFRfQURPQkVfSURfQ1VTVE9NPC9hPiAgICAyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi10cnVldHlwZV90YWJsZXMuaHRtbCNUVF9BRE9CRV9JRF9MQVRJTl8xIj5UVF9BRE9CRV9JRF9MQVRJTl8xPC9hPiAgIDMKKzwvcHJlPgorCis8cD5BIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgJmxzcXVvO2VuY29kaW5nX2lkJnJzcXVvOyBmb3IgPGEgaHJlZj0iZnQyLXRydWV0eXBlX3RhYmxlcy5odG1sI1RUX1BMQVRGT1JNX1hYWCI+VFRfUExBVEZPUk1fQURPQkU8L2E+IGNoYXJtYXBzLiBUaGlzIGlzIGEgRnJlZVR5cGUtc3BlY2lmaWMgZXh0ZW5zaW9uITwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9BRE9CRV9JRF9TVEFOREFSRCI+VFRfQURPQkVfSURfU1RBTkRBUkQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BZG9iZSBzdGFuZGFyZCBlbmNvZGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9BRE9CRV9JRF9FWFBFUlQiPlRUX0FET0JFX0lEX0VYUEVSVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFkb2JlIGV4cGVydCBlbmNvZGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9BRE9CRV9JRF9DVVNUT00iPlRUX0FET0JFX0lEX0NVU1RPTTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFkb2JlIGN1c3RvbSBlbmNvZGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9BRE9CRV9JRF9MQVRJTl8xIj5UVF9BRE9CRV9JRF9MQVRJTl8xPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QWRvYmUgTGF0aW4mbmJzcDsxIGVuY29kaW5nLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi10dF9kcml2ZXIuaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHRfZHJpdmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2NGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHRfZHJpdmVyLmh0bWwKQEAgLTAsMCArMSwyMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5UaGUgVHJ1ZVR5cGUgZHJpdmVyPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI2ludGVycHJldGVyLXZlcnNpb24iPmludGVycHJldGVyLXZlcnNpb248L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1RUX0lOVEVSUFJFVEVSX1ZFUlNJT05fWFhYIj5UVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWDwvYT48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPldoaWxlIEZyZWVUeXBlJ3MgVHJ1ZVR5cGUgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkgaXRzZWxmLCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCA8YSBocmVmPSJmdDItbW9kdWxlX21hbmFnZW1lbnQuaHRtbCNGVF9Qcm9wZXJ0eV9TZXQiPkZUX1Byb3BlcnR5X1NldDwvYT4gYW5kIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X0dldCI+RlRfUHJvcGVydHlfR2V0PC9hPi4gVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXMgdG9nZXRoZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IG1hY3JvcyBhbmQgc3RydWN0dXJlcy48L3A+Cis8cD5UaGUgVHJ1ZVR5cGUgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgJmxzcXVvO3RydWV0eXBlJnJzcXVvOy48L3A+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJpbnRlcnByZXRlci12ZXJzaW9uIj5pbnRlcnByZXRlci12ZXJzaW9uPC9oMz4KKworPHA+Q3VycmVudGx5LCB0d28gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciB3aXRoIGFuZCB3aXRob3V0IHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCwgcmVzcGVjdGl2ZWx5LiBUaGUgZGVmYXVsdCBpcyBzdWJwaXhlbCBzdXBwb3J0IGlmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpcyBkZWZpbmVkLCBhbmQgbm8gc3VicGl4ZWwgc3VwcG9ydCBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS48L3A+Cis8cD5JZiBzdWJwaXhlbCBoaW50aW5nIGlzIG9uLCBtYW55IFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gQi9XIG9yIGdyYXlzY2FsZSByZW5kZXJpbmcgKGV4Y2VwdCBpZiAmbHNxdW87bmF0aXZlIENsZWFyVHlwZSZyc3F1bzsgaXMgc2VsZWN0ZWQgYnkgdGhlIGZvbnQpLiBUaGUgbWFpbiBpZGVhIGlzIHRvIHJlbmRlciBhdCBhIG11Y2ggaW5jcmVhc2VkIGhvcml6b250YWwgcmVzb2x1dGlvbiwgdGhlbiBzYW1wbGluZyBkb3duIHRoZSBjcmVhdGVkIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uIEhvd2V2ZXIsIG1hbnkgb2xkZXIgZm9udHMgYXJlIG5vdCBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieSBhcHBseWluZyAoaGFyZGNvZGVkKSBmb250LXNwZWNpZmljIHR3ZWFrcy48L3A+Cis8cD5EZXRhaWxzIG9uIHN1YnBpeGVsIGhpbnRpbmcgYW5kIHNvbWUgb2YgdGhlIG5lY2Vzc2FyeSB0d2Vha3MgY2FuIGJlIGZvdW5kIGluIEdyZWcgSGl0Y2hjb2NrJ3Mgd2hpdGVwYXBlciBhdCAmbHNxdW87PGEgaHJlZj0iaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgiPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4PC9hPiZyc3F1bzsuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIGNvZGUgZGVtb25zdHJhdGVzIGhvdyB0byBhY3RpdmF0ZSBzdWJwaXhlbCBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLjwvcD4KKzxwcmUgY2xhc3M9ImNvbG9yZWQiPgorICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICBGVF9GYWNlICAgICBmYWNlOworICBGVF9VSW50ICAgICBpbnRlcnByZXRlcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zODsKKworCisgIEZUX0luaXRfRnJlZVR5cGUoICZhbXA7bGlicmFyeSApOworCisgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgInRydWV0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDtpbnRlcnByZXRlcl92ZXJzaW9uICk7Cis8L3ByZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIDxhIGhyZWY9ImZ0Mi1tb2R1bGVfbWFuYWdlbWVudC5odG1sI0ZUX1Byb3BlcnR5X0dldCI+RlRfUHJvcGVydHlfR2V0PC9hPiBhbHNvLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVFRfSU5URVJQUkVURVJfVkVSU0lPTl9YWFgiPlRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fWFhYPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFJVRVRZUEVfRFJJVkVSX0ggKGZ0dHRkcnYuaCkuPC9wPgorPHByZT4KKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXR0X2RyaXZlci5odG1sI1RUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUiPlRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU8L2E+ICAzNQorI2RlZmluZSA8YSBocmVmPSJmdDItdHRfZHJpdmVyLmh0bWwjVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCI+VFRfSU5URVJQUkVURVJfVkVSU0lPTl8zODwvYT4gIDM4Cis8L3ByZT4KKworPHA+QSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgPGEgaHJlZj0iZnQyLXR0X2RyaXZlci5odG1sI2ludGVycHJldGVyLXZlcnNpb24iPmludGVycHJldGVyLXZlcnNpb248L2E+IHByb3BlcnR5IHRvIHNlbGVjdCB0aGUgaGludGluZyBlbmdpbmUgZm9yIFRydWV0eXBlIGZvbnRzLjwvcD4KKzxwPlRoZSBudW1lcmljIHZhbHVlIGluIHRoZSBjb25zdGFudCBuYW1lcyByZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgJmxzcXVvO0dFVElORk8mcnNxdW87IGJ5dGVjb2RlIGluc3RydWN0aW9uLjwvcD4KKworPGg0PnZhbHVlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1Ij5UVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VmVyc2lvbiZuYnNwOzM1IGNvcnJlc3BvbmRzIHRvIE1TIHJhc3Rlcml6ZXIgdi4xLjcgYXMgdXNlZCBlLmcuIGluIFdpbmRvd3MmbmJzcDs5ODsgb25seSBncmF5c2NhbGUgYW5kIEIvVyByYXN0ZXJpemluZyBpcyBzdXBwb3J0ZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCI+VFRfSU5URVJQUkVURVJfVkVSU0lPTl8zODwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlZlcnNpb24mbmJzcDszOCBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMS45OyBpdCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdGhlIGhpbnRpbmcgcHJvdmlkZWQgYnkgRGlyZWN0V3JpdGUgQ2xlYXJUeXBlIChhcyBjYW4gYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXImbmJzcDs5IHJ1bm5pbmcgb24gV2luZG93cyZuYnNwOzcpLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIGJlaGF2aW91ciBvZiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuIEl0IGRvZXMgPGI+bm90PC9iPiBjb250cm9sIGhvdyBnbHlwaCBnZXQgcmFzdGVyaXplZCEgSW4gcGFydGljdWxhciwgaXQgZG9lcyBub3QgY29udHJvbCBzdWJwaXhlbCBjb2xvciBmaWx0ZXJpbmcuPC9wPgorPHA+SWYgRnJlZVR5cGUgaGFzIG5vdCBiZWVuIGNvbXBpbGVkIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb24gRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HLCBzZWxlY3RpbmcgdmVyc2lvbiZuYnNwOzM4IGNhdXNlcyBhbiAmbHNxdW87RlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZSZyc3F1bzsgZXJyb3IuPC9wPgorPHA+RGVwZW5kaW5nIG9uIHRoZSBncmFwaGljcyBmcmFtZXdvcmssIE1pY3Jvc29mdCB1c2VzIGRpZmZlcmVudCBieXRlY29kZSBhbmQgcmVuZGVyaW5nIGVuZ2luZXMuIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJzaW9uIG51bWJlcnMgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHRoZSAmbHNxdW87R0VUSU5GTyZyc3F1bzsgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYXJlIG1vcmUgY29udm9sdXRlZCB0aGFuIGRlc2lyZWQuPC9wPgorPHA+SGVyZSBhcmUgdHdvIHRhYmxlcyB0aGF0IHRyeSB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIE1TIHJhc3Rlcml6ZXIgZW5naW5lLCB0b2dldGhlciB3aXRoIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmVzIGludHJvZHVjZWQgYnkgaXQuPC9wPgorPHByZSBjbGFzcz0iY29sb3JlZCI+CisgIEdFVElORk8gZnJhbWV3b3JrICAgICAgICAgICAgICAgdmVyc2lvbiBmZWF0dXJlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIDMgICBHREkgKFdpbiAzLjEpLCAgICAgICAgICAgIHYxLjAgIDE2LWJpdCwgZmlyc3QgdmVyc2lvbgorICAgICAgICAgIFRydWVJbWFnZQorICAgICAzMyAgIEdESSAoV2luIE5UIDMuMSksICAgICAgICAgdjEuNSAgMzItYml0CisgICAgICAgICAgSFAgTGFzZXJqZXQKKyAgICAgMzQgICBHREkgKFdpbiA5NSkgICAgICAgICAgICAgIHYxLjYgIGZvbnQgc21vb3RoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNDQU5UWVBFIG9wY29kZQorICAgICAzNSAgIEdESSAoV2luIDk4LzIwMDApICAgICAgICAgdjEuNyAgKFVOKVNDQUxFRF9DT01QT05FTlRfT0ZGU0VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgaW4gY29tcG9zaXRlIGdseXBocworICAgICAzNiAgIE1HREkgKFdpbiBDRSAyKSAgICAgICAgICAgdjEuNisgY2xhc3NpYyBDbGVhclR5cGUKKyAgICAgMzcgICBHREkgKFhQIGFuZCBsYXRlciksICAgICAgIHYxLjggIENsZWFyVHlwZQorICAgICAgICAgIEdESSsgb2xkIChiZWZvcmUgVmlzdGEpCisgICAgIDM4ICAgR0RJKyBvbGQgKFZpc3RhLCBXaW4gNyksICB2MS45ICBzdWJwaXhlbCBDbGVhclR5cGUsCisgICAgICAgICAgV1BGICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZLWRpcmVjdGlvbiBDbGVhclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGVycm9yIGNoZWNraW5nCisgICAgIDM5ICAgRFdyaXRlIChiZWZvcmUgV2luIDgpICAgICB2Mi4wICBzdWJwaXhlbCBDbGVhclR5cGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gR0VUSU5GTyBvcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWcgZml4ZXMKKyAgICAgNDAgICBHREkrIChhZnRlciBXaW4gNyksICAgICAgIHYyLjEgIFktZGlyZWN0aW9uIENsZWFyVHlwZSBmbGFnCisgICAgICAgICAgRFdyaXRlIChXaW4gOCkgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JheSBDbGVhclR5cGUKKzwvcHJlPgorPHA+VGhlICZsc3F1bzt2ZXJzaW9uJnJzcXVvOyBmaWVsZCBnaXZlcyBhIHJvdWdoIG9yaWVudGF0aW9uIG9ubHksIHNpbmNlIHNvbWUgYXBwbGljYXRpb25zIHByb3ZpZGVkIGNlcnRhaW4gZmVhdHVyZXMgbXVjaCBlYXJsaWVyIChhcyBhbiBleGFtcGxlLCBNaWNyb3NvZnQgUmVhZGVyIHVzZWQgc3VicGl4ZWwgYW5kIFktZGlyZWN0aW9uIENsZWFyVHlwZSBhbHJlYWR5IGluIFdpbmRvd3MgMjAwMCkuIFNpbWlsYXJseSwgdXBkYXRlcyB0byBhIGdpdmVuIGZyYW1ld29yayBtaWdodCBpbmNsdWRlIGltcHJvdmVkIGhpbnRpbmcgc3VwcG9ydC48L3A+Cis8cHJlIGNsYXNzPSJjb2xvcmVkIj4KKyAgIHZlcnNpb24gICBzYW1wbGluZyAgICAgICAgICByZW5kZXJpbmcgICAgICAgIGNvbW1lbnQKKyAgICAgICAgICAgIHggICAgICAgIHkgICAgICAgeCAgICAgICAgICAgeQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHYxLjAgICBub3JtYWwgIG5vcm1hbCAgQi9XICAgICAgICAgICBCL1cgICAgYmktbGV2ZWwKKyAgICB2MS42ICAgaGlnaCAgICBoaWdoICAgIGdyYXkgICAgICAgICAgZ3JheSAgIGdyYXlzY2FsZQorICAgIHYxLjggICBoaWdoICAgIG5vcm1hbCAgY29sb3ItZmlsdGVyICBCL1cgICAgKEdESSkgQ2xlYXJUeXBlCisgICAgdjEuOSAgIGhpZ2ggICAgaGlnaCAgICBjb2xvci1maWx0ZXIgIGdyYXkgICBDb2xvciBDbGVhclR5cGUKKyAgICB2Mi4xICAgaGlnaCAgICBub3JtYWwgIGdyYXkgICAgICAgICAgQi9XICAgIEdyYXkgQ2xlYXJUeXBlCisgICAgdjIuMSAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBHcmF5IENsZWFyVHlwZQorPC9wcmU+Cis8cD5Db2xvciBhbmQgR3JheSBDbGVhclR5cGUgYXJlIHRoZSB0d28gYXZhaWxhYmxlIHZhcmlhbnRzIG9mICZsc3F1bztZLWRpcmVjdGlvbiBDbGVhclR5cGUmcnNxdW87LCBtZWFuaW5nIGdyYXlzY2FsZSByYXN0ZXJpemF0aW9uIGFsb25nIHRoZSBZLWRpcmVjdGlvbjsgdGhlIG5hbWUgdXNlZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBmZWF0dXJlIGlzICZsc3F1bztzeW1tZXRyaWMgc21vb3RoaW5nJnJzcXVvOy4gJmxzcXVvO0NsYXNzaWMgQ2xlYXJUeXBlJnJzcXVvOyBpcyB0aGUgb3JpZ2luYWwgYWxnb3JpdGhtIHVzZWQgYmVmb3JlIGludHJvZHVjaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBpbiBXaW4mbmJzcDtYUC4gQW5vdGhlciBuYW1lIGZvciB2MS42J3MgZ3JheXNjYWxlIHJlbmRlcmluZyBpcyAmbHNxdW87Zm9udCBzbW9vdGhpbmcmcnNxdW87LCBhbmQgJmxzcXVvO0NvbG9yIENsZWFyVHlwZSZyc3F1bzsgaXMgc29tZXRpbWVzIGFsc28gY2FsbGVkICZsc3F1bztEV3JpdGUgQ2xlYXJUeXBlJnJzcXVvOy4gVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRvZGF5J3MgQ29sb3IgQ2xlYXJUeXBlIGFuZCB0aGUgZWFybGllciBDbGVhclR5cGUgdmFyaWFudCB3aXRoIEIvVyByZW5kZXJpbmcgYWxvbmcgdGhlIHZlcnRpY2FsIGF4aXMsIHRoZSBsYXR0ZXIgaXMgc29tZXRpbWVzIGNhbGxlZCAmbHNxdW87R0RJIENsZWFyVHlwZSZyc3F1bzsuPC9wPgorPHA+JmxzcXVvO05vcm1hbCZyc3F1bzsgYW5kICZsc3F1bztoaWdoJnJzcXVvOyBzYW1wbGluZyBkZXNjcmliZSB0aGUgKHZpcnR1YWwpIHJlc29sdXRpb24gdG8gYWNjZXNzIHRoZSByYXN0ZXJpemVkIG91dGxpbmUgYWZ0ZXIgdGhlIGhpbnRpbmcgcHJvY2Vzcy4gJmxzcXVvO05vcm1hbCZyc3F1bzsgbWVhbnMgMSBzYW1wbGUgcGVyIGdyaWQgbGluZSAoaS5lLiwgQi9XKS4gSW4gdGhlIGN1cnJlbnQgTWljcm9zb2Z0IGltcGxlbWVudGF0aW9uLCAmbHNxdW87aGlnaCZyc3F1bzsgbWVhbnMgYW4gZXh0cmEgdmlydHVhbCByZXNvbHV0aW9uIG9mIDE2eDE2IChvciAxNngxKSBncmlkIGxpbmVzIHBlciBwaXhlbCBmb3IgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGxpa2UgJmxzcXVvO01JUlAmcnNxdW87LiBBZnRlciBoaW50aW5nLCB0aGVzZSAxNiBncmlkIGxpbmVzIGFyZSBtYXBwZWQgdG8gNng1IChvciA2eDEpIGdyaWQgbGluZXMgZm9yIGNvbG9yIGZpbHRlcmluZyBpZiBDb2xvciBDbGVhclR5cGUgaXMgYWN0aXZhdGVkLjwvcD4KKzxwPk5vdGUgdGhhdCAmbHNxdW87R3JheSBDbGVhclR5cGUmcnNxdW87IGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHYxLjYncyBncmF5c2NhbGUgcmVuZGVyaW5nLiBIb3dldmVyLCB0aGUgR0VUSU5GTyBpbnN0cnVjdGlvbiBoYW5kbGVzIGl0IGRpZmZlcmVudGx5OiB2MS42IHJldHVybnMgYml0Jm5ic3A7MTIgKGhpbnRpbmcgZm9yIGdyYXlzY2FsZSksIHdoaWxlIHYyLjEgcmV0dXJucyBiaXRzJm5ic3A7MTMgKGhpbnRpbmcgZm9yIENsZWFyVHlwZSksIDE4IChzeW1tZXRyaWNhbCBzbW9vdGhpbmcpLCBhbmQmbmJzcDsxOSAoR3JheSBDbGVhclR5cGUpLiBBbHNvLCB0aGlzIG1vZGUgcmVzcGVjdHMgYml0cyAyIGFuZCZuYnNwOzMgZm9yIHRoZSB2ZXJzaW9uJm5ic3A7MSBnYXNwIHRhYmxlIGV4Y2x1c2l2ZWx5IChsaWtlIENvbG9yIENsZWFyVHlwZSksIHdoaWxlIHYxLjYgb25seSByZXNwZWN0cyB0aGUgdmFsdWVzIG9mIHZlcnNpb24mbmJzcDswIChiaXRzIDAgYW5kJm5ic3A7MSkuPC9wPgorPHA+RnJlZVR5cGUgZG9lc24ndCBwcm92aWRlIGFsbCBjYXBhYmlsaXRpZXMgb2YgdGhlIG1vc3QgcmVjZW50IENsZWFyVHlwZSBpbmNhcm5hdGlvbiwgdGh1cyB3ZSBpZGVudGlmeSBvdXIgc3VicGl4ZWwgc3VwcG9ydCBhcyB2ZXJzaW9uJm5ic3A7MzguPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdHlwZTFfdGFibGVzLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXR5cGUxX3RhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMDAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXR5cGUxX3RhYmxlcy5odG1sCkBAIC0wLDAgKzEsODU4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+VHlwZSAxIFRhYmxlczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0NJRF9GYWNlSW5mbyI+Q0lEX0ZhY2VJbmZvPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNUMV9FbmNvZGluZ1R5cGUiPlQxX0VuY29kaW5nVHlwZTwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNQU19Gb250SW5mbyI+UFNfRm9udEluZm88L2E+PC90ZD48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI1BTX0RpY3RfS2V5cyI+UFNfRGljdF9LZXlzPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI1BTX1ByaXZhdGVSZWMiPlBTX1ByaXZhdGVSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0hhc19QU19HbHlwaF9OYW1lcyI+RlRfSGFzX1BTX0dseXBoX05hbWVzPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI1BTX1ByaXZhdGUiPlBTX1ByaXZhdGU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9QU19Gb250X0luZm8iPkZUX0dldF9QU19Gb250X0luZm88L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1QxX0ZvbnRJbmZvIj5UMV9Gb250SW5mbzwvYT48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfUFNfRm9udF9Qcml2YXRlIj5GVF9HZXRfUFNfRm9udF9Qcml2YXRlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNUMV9Qcml2YXRlIj5UMV9Qcml2YXRlPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0NJRF9GYWNlRGljdFJlYyI+Q0lEX0ZhY2VEaWN0UmVjPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9HZXRfUFNfRm9udF9WYWx1ZSI+RlRfR2V0X1BTX0ZvbnRfVmFsdWU8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0NJRF9Gb250RGljdCI+Q0lEX0ZvbnREaWN0PC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0NJRF9GYWNlRGljdCI+Q0lEX0ZhY2VEaWN0PC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPjxhIGhyZWY9IiNDSURfSW5mbyI+Q0lEX0luZm88L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjQ0lEX0ZhY2VJbmZvUmVjIj5DSURfRmFjZUluZm9SZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI1QxX0JsZW5kX0ZsYWdzIj5UMV9CbGVuZF9GbGFnczwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBUeXBlIDEtc3BlY2lmaWMgdGFibGVzLCBpbmNsdWRpbmcgc3RydWN0dXJlcyByZWxhdGVkIHRvIG90aGVyIFBvc3RTY3JpcHQgZm9udCBmb3JtYXRzLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IlBTX0ZvbnRJbmZvUmVjIj5QU19Gb250SW5mb1JlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIFBTX0ZvbnRJbmZvUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgdmVyc2lvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICBub3RpY2U7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgZnVsbF9uYW1lOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogIGZhbWlseV9uYW1lOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogIHdlaWdodDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgaXRhbGljX2FuZ2xlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Jvb2wiPkZUX0Jvb2w8L2E+ICAgICBpc19maXhlZF9waXRjaDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgIHVuZGVybGluZV9wb3NpdGlvbjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gICB1bmRlcmxpbmVfdGhpY2tuZXNzOworCisgIH0gPGI+UFNfRm9udEluZm9SZWM8L2I+OworPC9wcmU+CisKKzxwPkEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUeXBlJm5ic3A7MSBvciBUeXBlJm5ic3A7MiBGb250SW5mbyBkaWN0aW9uYXJ5LiBOb3RlIHRoYXQgZm9yIE11bHRpcGxlIE1hc3RlciBmb250cywgZWFjaCBpbnN0YW5jZSBoYXMgaXRzIG93biBGb250SW5mbyBkaWN0aW9uYXJ5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iUFNfRm9udEluZm8iPlBTX0ZvbnRJbmZvPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRTFfVEFCTEVTX0ggKHQxdGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiBQU19Gb250SW5mb1JlY18qICA8Yj5QU19Gb250SW5mbzwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRm9udEluZm9SZWMiPlBTX0ZvbnRJbmZvUmVjPC9hPiBzdHJ1Y3R1cmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJQU19Qcml2YXRlUmVjIj5QU19Qcml2YXRlUmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRTFfVEFCTEVTX0ggKHQxdGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiAgUFNfUHJpdmF0ZVJlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgdW5pcXVlX2lkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgbGVuSVY7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICBudW1fYmx1ZV92YWx1ZXM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgbnVtX290aGVyX2JsdWVzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIG51bV9mYW1pbHlfYmx1ZXM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgbnVtX2ZhbWlseV9vdGhlcl9ibHVlczsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBibHVlX3ZhbHVlc1sxNF07CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIG90aGVyX2JsdWVzWzEwXTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBmYW1pbHlfYmx1ZXMgICAgICBbMTRdOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBmYW1pbHlfb3RoZXJfYmx1ZXNbMTBdOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgIGJsdWVfc2NhbGU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICBibHVlX3NoaWZ0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgYmx1ZV9mdXp6OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBzdGFuZGFyZF93aWR0aFsxXTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHN0YW5kYXJkX2hlaWdodFsxXTsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIG51bV9zbmFwX3dpZHRoczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICBudW1fc25hcF9oZWlnaHRzOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Jvb2wiPkZUX0Jvb2w8L2E+ICAgIGZvcmNlX2JvbGQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgcm91bmRfc3RlbV91cDsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICBzbmFwX3dpZHRocyBbMTNdOyAgLyogaW5jbHVkaW5nIHN0ZCB3aWR0aCAgKi8KKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgc25hcF9oZWlnaHRzWzEzXTsgIC8qIGluY2x1ZGluZyBzdGQgaGVpZ2h0ICovCisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgZXhwYW5zaW9uX2ZhY3RvcjsKKworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgIGxhbmd1YWdlX2dyb3VwOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgIHBhc3N3b3JkOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgIG1pbl9mZWF0dXJlWzJdOworCisgIH0gPGI+UFNfUHJpdmF0ZVJlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFR5cGUmbmJzcDsxIG9yIFR5cGUmbmJzcDsyIHByaXZhdGUgZGljdGlvbmFyeS4gTm90ZSB0aGF0IGZvciBNdWx0aXBsZSBNYXN0ZXIgZm9udHMsIGVhY2ggaW5zdGFuY2UgaGFzIGl0cyBvd24gUHJpdmF0ZSBkaWN0aW9uYXJ5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iUFNfUHJpdmF0ZSI+UFNfUHJpdmF0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gUFNfUHJpdmF0ZVJlY18qICA8Yj5QU19Qcml2YXRlPC9iPjsKKzwvcHJlPgorCis8cD5BIGhhbmRsZSB0byBhIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlUmVjIj5QU19Qcml2YXRlUmVjPC9hPiBzdHJ1Y3R1cmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJDSURfRmFjZURpY3RSZWMiPkNJRF9GYWNlRGljdFJlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIENJRF9GYWNlRGljdFJlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlUmVjIj5QU19Qcml2YXRlUmVjPC9hPiAgcHJpdmF0ZV9kaWN0OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgIGxlbl9idWlsZGNoYXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRml4ZWQiPkZUX0ZpeGVkPC9hPiAgICAgICBmb3JjZWJvbGRfdGhyZXNob2xkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1BvcyI+RlRfUG9zPC9hPiAgICAgICAgIHN0cm9rZV93aWR0aDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgICAgIGV4cGFuc2lvbl9mYWN0b3I7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICAgICAgcGFpbnRfdHlwZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICAgICAgZm9udF90eXBlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX01hdHJpeCI+RlRfTWF0cml4PC9hPiAgICAgIGZvbnRfbWF0cml4OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1ZlY3RvciI+RlRfVmVjdG9yPC9hPiAgICAgIGZvbnRfb2Zmc2V0OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUludCI+RlRfVUludDwvYT4gICAgICAgIG51bV9zdWJyczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgICAgIHN1YnJtYXBfb2Zmc2V0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAgIHNkX2J5dGVzOworCisgIH0gPGI+Q0lEX0ZhY2VEaWN0UmVjPC9iPjsKKzwvcHJlPgorCis8cD5BIHN0cnVjdHVyZSB1c2VkIHRvIHJlcHJlc2VudCBkYXRhIGluIGEgQ0lEIHRvcC1sZXZlbCBkaWN0aW9uYXJ5LjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iQ0lEX0ZhY2VEaWN0Ij5DSURfRmFjZURpY3Q8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IENJRF9GYWNlRGljdFJlY18qICA8Yj5DSURfRmFjZURpY3Q8L2I+OworPC9wcmU+CisKKzxwPkEgaGFuZGxlIHRvIGEgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI0NJRF9GYWNlRGljdFJlYyI+Q0lEX0ZhY2VEaWN0UmVjPC9hPiBzdHJ1Y3R1cmUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJDSURfRmFjZUluZm9SZWMiPkNJRF9GYWNlSW5mb1JlYzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gIENJRF9GYWNlSW5mb1JlY18KKyAgeworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogICAgICBjaWRfZm9udF9uYW1lOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgICAgIGNpZF92ZXJzaW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAgICBjaWRfZm9udF90eXBlOworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgICAgIHJlZ2lzdHJ5OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogICAgICBvcmRlcmluZzsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgICAgc3VwcGxlbWVudDsKKworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+ICBmb250X2luZm87CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQkJveCI+RlRfQkJveDwvYT4gICAgICAgICBmb250X2Jib3g7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgdWlkX2Jhc2U7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgICAgbnVtX3h1aWQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgeHVpZFsxNl07CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgICAgICBjaWRtYXBfb2Zmc2V0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICAgICBmZF9ieXRlczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAgICAgZ2RfYnl0ZXM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgICAgICAgY2lkX2NvdW50OworCisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgIG51bV9kaWN0czsKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0ZhY2VEaWN0Ij5DSURfRmFjZURpY3Q8L2E+ICAgIGZvbnRfZGljdHM7CisKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgICAgICBkYXRhX29mZnNldDsKKworICB9IDxiPkNJRF9GYWNlSW5mb1JlYzwvYj47Cis8L3ByZT4KKworPHA+QSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQ0lEIEZhY2UgaW5mb3JtYXRpb24uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJDSURfRmFjZUluZm8iPkNJRF9GYWNlSW5mbzwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gQ0lEX0ZhY2VJbmZvUmVjXyogIDxiPkNJRF9GYWNlSW5mbzwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYSA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0ZhY2VJbmZvUmVjIj5DSURfRmFjZUluZm9SZWM8L2E+IHN0cnVjdHVyZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0hhc19QU19HbHlwaF9OYW1lcyI+RlRfSGFzX1BTX0dseXBoX05hbWVzPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRTFfVEFCTEVTX0ggKHQxdGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICkKKyAgPGI+RlRfSGFzX1BTX0dseXBoX05hbWVzPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gIGZhY2UgKTsKKzwvcHJlPgorCis8cD5SZXR1cm4gdHJ1ZSBpZiBhIGdpdmVuIGZhY2UgcHJvdmlkZXMgcmVsaWFibGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4gVGhpcyBpcyBzaW1pbGFyIHRvIHVzaW5nIHRoZSA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9IQVNfR0xZUEhfTkFNRVMiPkZUX0hBU19HTFlQSF9OQU1FUzwvYT4gbWFjcm8sIGV4Y2VwdCB0aGF0IGNlcnRhaW4gZm9udHMgKG1vc3RseSBUcnVlVHlwZSkgY29udGFpbiBpbmNvcnJlY3QgZ2x5cGggbmFtZSB0YWJsZXMuPC9wPgorPHA+V2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIGNhbGxlciBpcyBzdXJlIHRoYXQgdGhlIGdseXBoIG5hbWVzIHJldHVybmVkIGJ5IDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0dldF9HbHlwaF9OYW1lIj5GVF9HZXRfR2x5cGhfTmFtZTwvYT4gYXJlIHJlbGlhYmxlLjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5mYWNlIGhhbmRsZTwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+Qm9vbGVhbi4gVHJ1ZSBpZiBnbHlwaCBuYW1lcyBhcmUgcmVsaWFibGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9HZXRfUFNfRm9udF9JbmZvIj5GVF9HZXRfUFNfRm9udF9JbmZvPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRTFfVEFCTEVTX0ggKHQxdGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9QU19Gb250X0luZm88L2I+KCA8YSBocmVmPSJmdDItYmFzZV9pbnRlcmZhY2UuaHRtbCNGVF9GYWNlIj5GVF9GYWNlPC9hPiAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mbyI+UFNfRm9udEluZm88L2E+ICBhZm9udF9pbmZvICk7Cis8L3ByZT4KKworPHA+UmV0cmlldmUgdGhlIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+IHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gUG9zdFNjcmlwdCBmb250LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Qb3N0U2NyaXB0IGZhY2UgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYWZvbnRfaW5mbyI+YWZvbnRfaW5mbzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk91dHB1dCBmb250IGluZm8gc3RydWN0dXJlIHBvaW50ZXIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlN0cmluZyBwb2ludGVycyB3aXRoaW4gdGhlIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+IHN0cnVjdHVyZSBhcmUgb3duZWQgYnkgdGhlIGZhY2UgYW5kIGRvbid0IG5lZWQgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4gTWlzc2luZyBlbnRyaWVzIGluIHRoZSBmb250J3MgRm9udEluZm8gZGljdGlvbmFyeSBhcmUgcmVwcmVzZW50ZWQgYnkgTlVMTCBwb2ludGVycy48L3A+Cis8cD5JZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgJmxzcXVvO0ZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JnJzcXVvOyBlcnJvciBjb2RlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1BTX0ZvbnRfUHJpdmF0ZSI+RlRfR2V0X1BTX0ZvbnRfUHJpdmF0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Vycm9yIj5GVF9FcnJvcjwvYT4gKQorICA8Yj5GVF9HZXRfUFNfRm9udF9Qcml2YXRlPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlIj5QU19Qcml2YXRlPC9hPiAgYWZvbnRfcHJpdmF0ZSApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIHRoZSA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfUHJpdmF0ZVJlYyI+UFNfUHJpdmF0ZVJlYzwvYT4gc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBQb3N0U2NyaXB0IGZvbnQuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlBvc3RTY3JpcHQgZmFjZSBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhZm9udF9wcml2YXRlIj5hZm9udF9wcml2YXRlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+T3V0cHV0IHByaXZhdGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgcG9pbnRlci48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPkZyZWVUeXBlIGVycm9yIGNvZGUuIDAmbmJzcDttZWFucyBzdWNjZXNzLjwvcD4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHN0cmluZyBwb2ludGVycyB3aXRoaW4gdGhlIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Qcml2YXRlUmVjIj5QU19Qcml2YXRlUmVjPC9hPiBzdHJ1Y3R1cmUgYXJlIG93bmVkIGJ5IHRoZSBmYWNlIGFuZCBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuPC9wPgorPHA+SWYgdGhlIGZvbnQncyBmb3JtYXQgaXMgbm90IFBvc3RTY3JpcHQtYmFzZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgJmxzcXVvO0ZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JnJzcXVvOyBlcnJvciBjb2RlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfR2V0X1BTX0ZvbnRfVmFsdWUiPkZUX0dldF9QU19Gb250X1ZhbHVlPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfVFlQRTFfVEFCTEVTX0ggKHQxdGFibGVzLmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gKQorICA8Yj5GVF9HZXRfUFNfRm9udF9WYWx1ZTwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRGljdF9LZXlzIj5QU19EaWN0X0tleXM8L2E+ICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VSW50Ij5GVF9VSW50PC9hPiAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Mb25nIj5GVF9Mb25nPC9hPiAgICAgICB2YWx1ZV9sZW4gKTsKKzwvcHJlPgorCis8cD5SZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIHRoZSBzdXBwbGllZCBrZXkgZnJvbSBhIFBvc3RTY3JpcHQgZm9udC48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+UG9zdFNjcmlwdCBmYWNlIGhhbmRsZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJrZXkiPmtleTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFuIGVudW1lcmF0aW9uIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZGljdGlvbmFyeSBrZXkgdG8gcmV0cmlldmUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iaWR4Ij5pZHg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Gb3IgYXJyYXkgdmFsdWVzLCB0aGlzIHNwZWNpZmllcyB0aGUgaW5kZXggdG8gYmUgcmV0dXJuZWQuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFsdWUiPnZhbHVlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBwb2ludGVyIHRvIG1lbW9yeSBpbnRvIHdoaWNoIHRvIHdyaXRlIHRoZSB2YWx1ZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJ2YWxlbl9sZW4iPnZhbGVuX2xlbjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1lbW9yeSBzdXBwbGllZCBmb3IgdGhlIHZhbHVlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFsdWUiPnZhbHVlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHZhbHVlIG1hdGNoaW5nIHRoZSBhYm92ZSBrZXksIGlmIGl0IGV4aXN0cy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBhbW91bnQgb2YgbWVtb3J5IChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgcmVxdWVzdGVkIHZhbHVlIChpZiBpdCBleGlzdHMsIC0xIG90aGVyd2lzZSkuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5UaGUgdmFsdWVzIHJldHVybmVkIGFyZSBub3QgcG9pbnRlcnMgaW50byB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBvZiB0aGUgZmFjZSwgYnV0IGFyZSAmbHNxdW87ZnJlc2gmcnNxdW87IGNvcGllcywgc28gdGhhdCB0aGUgbWVtb3J5IGNvbnRhaW5pbmcgdGhlbSBiZWxvbmdzIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBUaGlzIGFsc28gZW5mb3JjZXMgdGhlICZsc3F1bztyZWFkLW9ubHkmcnNxdW87IG5hdHVyZSBvZiB0aGVzZSB2YWx1ZXMsIGkuZS4sIHRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgZmFjZS48L3A+Cis8cD4mbHNxdW87dmFsdWUmcnNxdW87IGlzIGEgdm9pZCBwb2ludGVyIGJlY2F1c2UgdGhlIHZhbHVlcyByZXR1cm5lZCBjYW4gYmUgb2YgdmFyaW91cyB0eXBlcy48L3A+Cis8cD5JZiBlaXRoZXIgJmxzcXVvO3ZhbHVlJnJzcXVvOyBpcyBOVUxMIG9yICZsc3F1bzt2YWx1ZV9sZW4mcnNxdW87IGlzIHRvbyBzbWFsbCwganVzdCB0aGUgcmVxdWlyZWQgbWVtb3J5IHNpemUgZm9yIHRoZSByZXF1ZXN0ZWQgZW50cnkgaXMgcmV0dXJuZWQuPC9wPgorPHA+VGhlICZsc3F1bztpZHgmcnNxdW87IHBhcmFtZXRlciBpcyB1c2VkLCBub3Qgb25seSB0byByZXRyaWV2ZSBlbGVtZW50cyBvZiwgZm9yIGV4YW1wbGUsIHRoZSBGb250TWF0cml4IG9yIEZvbnRCQm94LCBidXQgYWxzbyB0byByZXRyaWV2ZSBuYW1lIGtleXMgZnJvbSB0aGUgQ2hhclN0cmluZ3MgZGljdGlvbmFyeSwgYW5kIHRoZSBjaGFyc3RyaW5ncyB0aGVtc2VsdmVzLiBJdCBpcyBpZ25vcmVkIGZvciBhdG9taWMgdmFsdWVzLjwvcD4KKzxwPlBTX0RJQ1RfQkxVRV9TQ0FMRSByZXR1cm5zIGEgdmFsdWUgdGhhdCBpcyBzY2FsZWQgdXAgYnkgMTAwMC4gVG8gZ2V0IHRoZSB2YWx1ZSBhcyBpbiB0aGUgZm9udCBzdHJlYW0sIHlvdSBuZWVkIHRvIGRpdmlkZSBieSA2NTUzNjAwMC4wICh0byByZW1vdmUgdGhlIEZUX0ZpeGVkIHNjYWxlLCBhbmQgdGhlIHgxMDAwIHNjYWxlKS48L3A+Cis8cD5JTVBPUlRBTlQ6IE9ubHkga2V5L3ZhbHVlIHBhaXJzIHJlYWQgYnkgdGhlIEZyZWVUeXBlIGludGVycHJldGVyIGNhbiBiZSByZXRyaWV2ZWQuIFNvLCBmb3IgZXhhbXBsZSwgUG9zdFNjcmlwdCBwcm9jZWR1cmVzIHN1Y2ggYXMgTlAsIE5ELCBhbmQgUkQgYXJlIG5vdCBhdmFpbGFibGUuIEFyYml0cmFyeSBrZXlzIGFyZSwgb2J2aW91c2x5LCBub3QgYmUgYXZhaWxhYmxlIGVpdGhlci48L3A+Cis8cD5JZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSAmbHNxdW87RlRfRXJyX0ludmFsaWRfQXJndW1lbnQmcnNxdW87IGVycm9yIGNvZGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUMV9CbGVuZF9GbGFncyI+VDFfQmxlbmRfRmxhZ3M8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiAgVDFfQmxlbmRfRmxhZ3NfCisgIHsKKyAgICAvKiByZXF1aXJlZCBmaWVsZHMgaW4gYSBGb250SW5mbyBibGVuZCBkaWN0aW9uYXJ5ICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1VOREVSTElORV9QT1NJVElPTiI+VDFfQkxFTkRfVU5ERVJMSU5FX1BPU0lUSU9OPC9hPiA9IDAsCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1VOREVSTElORV9USElDS05FU1MiPlQxX0JMRU5EX1VOREVSTElORV9USElDS05FU1M8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9JVEFMSUNfQU5HTEUiPlQxX0JMRU5EX0lUQUxJQ19BTkdMRTwvYT4sCisKKyAgICAvKiByZXF1aXJlZCBmaWVsZHMgaW4gYSBQcml2YXRlIGJsZW5kIGRpY3Rpb25hcnkgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfQkxVRV9WQUxVRVMiPlQxX0JMRU5EX0JMVUVfVkFMVUVTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfT1RIRVJfQkxVRVMiPlQxX0JMRU5EX09USEVSX0JMVUVTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfU1RBTkRBUkRfV0lEVEgiPlQxX0JMRU5EX1NUQU5EQVJEX1dJRFRIPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfU1RBTkRBUkRfSEVJR0hUIj5UMV9CTEVORF9TVEFOREFSRF9IRUlHSFQ8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9TVEVNX1NOQVBfV0lEVEhTIj5UMV9CTEVORF9TVEVNX1NOQVBfV0lEVEhTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfU1RFTV9TTkFQX0hFSUdIVFMiPlQxX0JMRU5EX1NURU1fU05BUF9IRUlHSFRTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfQkxVRV9TQ0FMRSI+VDFfQkxFTkRfQkxVRV9TQ0FMRTwvYT4sCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX0JMVUVfU0hJRlQiPlQxX0JMRU5EX0JMVUVfU0hJRlQ8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9GQU1JTFlfQkxVRVMiPlQxX0JMRU5EX0ZBTUlMWV9CTFVFUzwvYT4sCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX0ZBTUlMWV9PVEhFUl9CTFVFUyI+VDFfQkxFTkRfRkFNSUxZX09USEVSX0JMVUVTPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfRk9SQ0VfQk9MRCI+VDFfQkxFTkRfRk9SQ0VfQk9MRDwvYT4sCisKKyAgICBUMV9CTEVORF9NQVggICAgLyogZG8gbm90IHJlbW92ZSAqLworCisgIH0gPGI+VDFfQmxlbmRfRmxhZ3M8L2I+OworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYDxiPlQxX0JsZW5kX0ZsYWdzPC9iPicgdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIHQxX2JsZW5kX3VuZGVybGluZV9wb3NpdGlvbiAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9VTkRFUkxJTkVfUE9TSVRJT04iPlQxX0JMRU5EX1VOREVSTElORV9QT1NJVElPTjwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfdW5kZXJsaW5lX3RoaWNrbmVzcyAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1VOREVSTElORV9USElDS05FU1MiPlQxX0JMRU5EX1VOREVSTElORV9USElDS05FU1M8L2E+CisjZGVmaW5lIHQxX2JsZW5kX2l0YWxpY19hbmdsZSAgICAgICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9JVEFMSUNfQU5HTEUiPlQxX0JMRU5EX0lUQUxJQ19BTkdMRTwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfYmx1ZV92YWx1ZXMgICAgICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX0JMVUVfVkFMVUVTIj5UMV9CTEVORF9CTFVFX1ZBTFVFUzwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfb3RoZXJfYmx1ZXMgICAgICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX09USEVSX0JMVUVTIj5UMV9CTEVORF9PVEhFUl9CTFVFUzwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfc3RhbmRhcmRfd2lkdGhzICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1NUQU5EQVJEX1dJRFRIIj5UMV9CTEVORF9TVEFOREFSRF9XSURUSDwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfc3RhbmRhcmRfaGVpZ2h0ICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1NUQU5EQVJEX0hFSUdIVCI+VDFfQkxFTkRfU1RBTkRBUkRfSEVJR0hUPC9hPgorI2RlZmluZSB0MV9ibGVuZF9zdGVtX3NuYXBfd2lkdGhzICAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfU1RFTV9TTkFQX1dJRFRIUyI+VDFfQkxFTkRfU1RFTV9TTkFQX1dJRFRIUzwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfc3RlbV9zbmFwX2hlaWdodHMgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX1NURU1fU05BUF9IRUlHSFRTIj5UMV9CTEVORF9TVEVNX1NOQVBfSEVJR0hUUzwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfYmx1ZV9zY2FsZSAgICAgICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX0JMVUVfU0NBTEUiPlQxX0JMRU5EX0JMVUVfU0NBTEU8L2E+CisjZGVmaW5lIHQxX2JsZW5kX2JsdWVfc2hpZnQgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9CTFVFX1NISUZUIj5UMV9CTEVORF9CTFVFX1NISUZUPC9hPgorI2RlZmluZSB0MV9ibGVuZF9mYW1pbHlfYmx1ZXMgICAgICAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfQkxFTkRfRkFNSUxZX0JMVUVTIj5UMV9CTEVORF9GQU1JTFlfQkxVRVM8L2E+CisjZGVmaW5lIHQxX2JsZW5kX2ZhbWlseV9vdGhlcl9ibHVlcyAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9CTEVORF9GQU1JTFlfT1RIRVJfQkxVRVMiPlQxX0JMRU5EX0ZBTUlMWV9PVEhFUl9CTFVFUzwvYT4KKyNkZWZpbmUgdDFfYmxlbmRfZm9yY2VfYm9sZCAgICAgICAgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0JMRU5EX0ZPUkNFX0JPTEQiPlQxX0JMRU5EX0ZPUkNFX0JPTEQ8L2E+CisjZGVmaW5lIHQxX2JsZW5kX21heCAgICAgICAgICAgICAgICAgIFQxX0JMRU5EX01BWAorPC9wcmU+CisKKzxwPkEgc2V0IG9mIGZsYWdzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggZmllbGRzIGFyZSBwcmVzZW50IGluIGEgZ2l2ZW4gYmxlbmQgZGljdGlvbmFyeSAoZm9udCBpbmZvIG9yIHByaXZhdGUpLiBVc2VkIHRvIHN1cHBvcnQgTXVsdGlwbGUgTWFzdGVycyBmb250cy48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVDFfQkxFTkRfVU5ERVJMSU5FX1BPU0lUSU9OIj5UMV9CTEVORF9VTkRFUkxJTkVfUE9TSVRJT048L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9VTkRFUkxJTkVfVEhJQ0tORVNTIj5UMV9CTEVORF9VTkRFUkxJTkVfVEhJQ0tORVNTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVDFfQkxFTkRfSVRBTElDX0FOR0xFIj5UMV9CTEVORF9JVEFMSUNfQU5HTEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9CTFVFX1ZBTFVFUyI+VDFfQkxFTkRfQkxVRV9WQUxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9PVEhFUl9CTFVFUyI+VDFfQkxFTkRfT1RIRVJfQkxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9TVEFOREFSRF9XSURUSCI+VDFfQkxFTkRfU1RBTkRBUkRfV0lEVEg8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9TVEFOREFSRF9IRUlHSFQiPlQxX0JMRU5EX1NUQU5EQVJEX0hFSUdIVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlQxX0JMRU5EX1NURU1fU05BUF9XSURUSFMiPlQxX0JMRU5EX1NURU1fU05BUF9XSURUSFM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9TVEVNX1NOQVBfSEVJR0hUUyI+VDFfQkxFTkRfU1RFTV9TTkFQX0hFSUdIVFM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9CTFVFX1NDQUxFIj5UMV9CTEVORF9CTFVFX1NDQUxFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVDFfQkxFTkRfQkxVRV9TSElGVCI+VDFfQkxFTkRfQkxVRV9TSElGVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlQxX0JMRU5EX0ZBTUlMWV9CTFVFUyI+VDFfQkxFTkRfRkFNSUxZX0JMVUVTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVDFfQkxFTkRfRkFNSUxZX09USEVSX0JMVUVTIj5UMV9CTEVORF9GQU1JTFlfT1RIRVJfQkxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9CTEVORF9GT1JDRV9CT0xEIj5UMV9CTEVORF9GT1JDRV9CT0xEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVDFfRW5jb2RpbmdUeXBlIj5UMV9FbmNvZGluZ1R5cGU8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiAgVDFfRW5jb2RpbmdUeXBlXworICB7CisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VOQ09ESU5HX1RZUEVfTk9ORSI+VDFfRU5DT0RJTkdfVFlQRV9OT05FPC9hPiA9IDAsCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VOQ09ESU5HX1RZUEVfQVJSQVkiPlQxX0VOQ09ESU5HX1RZUEVfQVJSQVk8L2E+LAorICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNUMV9FTkNPRElOR19UWVBFX1NUQU5EQVJEIj5UMV9FTkNPRElOR19UWVBFX1NUQU5EQVJEPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjEiPlQxX0VOQ09ESU5HX1RZUEVfSVNPTEFUSU4xPC9hPiwKKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjVDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQiPlQxX0VOQ09ESU5HX1RZUEVfRVhQRVJUPC9hPgorCisgIH0gPGI+VDFfRW5jb2RpbmdUeXBlPC9iPjsKKzwvcHJlPgorCis8cD5BbiBlbnVtZXJhdGlvbiBkZXNjcmliaW5nIHRoZSAmbHNxdW87RW5jb2RpbmcmcnNxdW87IGVudHJ5IGluIGEgVHlwZSAxIGRpY3Rpb25hcnkuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlQxX0VOQ09ESU5HX1RZUEVfTk9ORSI+VDFfRU5DT0RJTkdfVFlQRV9OT05FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iVDFfRU5DT0RJTkdfVFlQRV9BUlJBWSI+VDFfRU5DT0RJTkdfVFlQRV9BUlJBWTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlQxX0VOQ09ESU5HX1RZUEVfU1RBTkRBUkQiPlQxX0VOQ09ESU5HX1RZUEVfU1RBTkRBUkQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9FTkNPRElOR19UWVBFX0lTT0xBVElOMSI+VDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJUMV9FTkNPRElOR19UWVBFX0VYUEVSVCI+VDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJQU19EaWN0X0tleXMiPlBTX0RpY3RfS2V5czwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVudW08L3NwYW4+ICBQU19EaWN0X0tleXNfCisgIHsKKyAgICAvKiBjb252ZW50aW9uYWxseSBpbiB0aGUgZm9udCBkaWN0aW9uYXJ5ICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRk9OVF9UWVBFIj5QU19ESUNUX0ZPTlRfVFlQRTwvYT4sICAgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRk9OVF9NQVRSSVgiPlBTX0RJQ1RfRk9OVF9NQVRSSVg8L2E+LCAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRk9OVF9CQk9YIj5QU19ESUNUX0ZPTlRfQkJPWDwvYT4sICAgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9GaXhlZCI+RlRfRml4ZWQ8L2E+ICAgICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX1BBSU5UX1RZUEUiPlBTX0RJQ1RfUEFJTlRfVFlQRTwvYT4sICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9GT05UX05BTUUiPlBTX0RJQ1RfRk9OVF9OQU1FPC9hPiwgICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX1VOSVFVRV9JRCI+UFNfRElDVF9VTklRVUVfSUQ8L2E+LCAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfTlVNX0NIQVJfU1RSSU5HUyI+UFNfRElDVF9OVU1fQ0hBUl9TVFJJTkdTPC9hPiwgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfQ0hBUl9TVFJJTkdfS0VZIj5QU19ESUNUX0NIQVJfU1RSSU5HX0tFWTwvYT4sICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9DSEFSX1NUUklORyI+UFNfRElDVF9DSEFSX1NUUklORzwvYT4sICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAgICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRU5DT0RJTkdfVFlQRSI+UFNfRElDVF9FTkNPRElOR19UWVBFPC9hPiwgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1QxX0VuY29kaW5nVHlwZSI+VDFfRW5jb2RpbmdUeXBlPC9hPiAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0VOQ09ESU5HX0VOVFJZIj5QU19ESUNUX0VOQ09ESU5HX0VOVFJZPC9hPiwgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICAgICAgKi8KKworICAgIC8qIGNvbnZlbnRpb25hbGx5IGluIHRoZSBmb250IFByaXZhdGUgZGljdGlvbmFyeSAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX05VTV9TVUJSUyI+UFNfRElDVF9OVU1fU1VCUlM8L2E+LCAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX1NVQlIiPlBTX0RJQ1RfU1VCUjwvYT4sICAgICAgICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1N0cmluZyI+RlRfU3RyaW5nPC9hPiogKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9TVERfSFciPlBTX0RJQ1RfU1REX0hXPC9hPiwgICAgICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9TVERfVlciPlBTX0RJQ1RfU1REX1ZXPC9hPiwgICAgICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9OVU1fQkxVRV9WQUxVRVMiPlBTX0RJQ1RfTlVNX0JMVUVfVkFMVUVTPC9hPiwgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfQkxVRV9WQUxVRSI+UFNfRElDVF9CTFVFX1ZBTFVFPC9hPiwgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfQkxVRV9GVVpaIj5QU19ESUNUX0JMVUVfRlVaWjwvYT4sICAgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfTlVNX09USEVSX0JMVUVTIj5QU19ESUNUX05VTV9PVEhFUl9CTFVFUzwvYT4sICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX09USEVSX0JMVUUiPlBTX0RJQ1RfT1RIRVJfQkxVRTwvYT4sICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX05VTV9GQU1JTFlfQkxVRVMiPlBTX0RJQ1RfTlVNX0ZBTUlMWV9CTFVFUzwvYT4sICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRkFNSUxZX0JMVUUiPlBTX0RJQ1RfRkFNSUxZX0JMVUU8L2E+LCAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX05VTV9GQU1JTFlfT1RIRVJfQkxVRVMiPlBTX0RJQ1RfTlVNX0ZBTUlMWV9PVEhFUl9CTFVFUzwvYT4sIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUUiPlBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUU8L2E+LCAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0JMVUVfU0NBTEUiPlBTX0RJQ1RfQkxVRV9TQ0FMRTwvYT4sICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ZpeGVkIj5GVF9GaXhlZDwvYT4gICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0JMVUVfU0hJRlQiPlBTX0RJQ1RfQkxVRV9TSElGVDwvYT4sICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9OVU1fU1RFTV9TTkFQX0giPlBTX0RJQ1RfTlVNX1NURU1fU05BUF9IPC9hPiwgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfU1RFTV9TTkFQX0giPlBTX0RJQ1RfU1RFTV9TTkFQX0g8L2E+LCAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1Nob3J0Ij5GVF9TaG9ydDwvYT4gICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX05VTV9TVEVNX1NOQVBfViI+UFNfRElDVF9OVU1fU1RFTV9TTkFQX1Y8L2E+LCAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9TVEVNX1NOQVBfViI+UFNfRElDVF9TVEVNX1NOQVBfVjwvYT4sICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRk9SQ0VfQk9MRCI+UFNfRElDVF9GT1JDRV9CT0xEPC9hPiwgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9STkRfU1RFTV9VUCI+UFNfRElDVF9STkRfU1RFTV9VUDwvYT4sICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQm9vbCI+RlRfQm9vbDwvYT4gICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9NSU5fRkVBVFVSRSI+UFNfRElDVF9NSU5fRkVBVFVSRTwvYT4sICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU2hvcnQiPkZUX1Nob3J0PC9hPiAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfTEVOX0lWIj5QU19ESUNUX0xFTl9JVjwvYT4sICAgICAgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfUEFTU1dPUkQiPlBTX0RJQ1RfUEFTU1dPUkQ8L2E+LCAgICAgICAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfTEFOR1VBR0VfR1JPVVAiPlBTX0RJQ1RfTEFOR1VBR0VfR1JPVVA8L2E+LCAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0xvbmciPkZUX0xvbmc8L2E+ICAgICovCisKKyAgICAvKiBjb252ZW50aW9uYWxseSBpbiB0aGUgZm9udCBGb250SW5mbyBkaWN0aW9uYXJ5ICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfVkVSU0lPTiI+UFNfRElDVF9WRVJTSU9OPC9hPiwgICAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX05PVElDRSI+UFNfRElDVF9OT1RJQ0U8L2E+LCAgICAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0ZVTExfTkFNRSI+UFNfRElDVF9GVUxMX05BTUU8L2E+LCAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfU3RyaW5nIj5GVF9TdHJpbmc8L2E+KiAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0ZBTUlMWV9OQU1FIj5QU19ESUNUX0ZBTUlMWV9OQU1FPC9hPiwgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfV0VJR0hUIj5QU19ESUNUX1dFSUdIVDwvYT4sICAgICAgICAgICAgICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TdHJpbmciPkZUX1N0cmluZzwvYT4qICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfSVNfRklYRURfUElUQ0giPlBTX0RJQ1RfSVNfRklYRURfUElUQ0g8L2E+LCAgICAgICAgIC8qIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Jvb2wiPkZUX0Jvb2w8L2E+ICAgICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfVU5ERVJMSU5FX1BPU0lUSU9OIj5QU19ESUNUX1VOREVSTElORV9QT1NJVElPTjwvYT4sICAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9TaG9ydCI+RlRfU2hvcnQ8L2E+ICAgKi8KKyAgICA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfRElDVF9VTkRFUkxJTkVfVEhJQ0tORVNTIj5QU19ESUNUX1VOREVSTElORV9USElDS05FU1M8L2E+LCAgICAvKiA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gICovCisgICAgPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfRlNfVFlQRSI+UFNfRElDVF9GU19UWVBFPC9hPiwgICAgICAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICAqLworICAgIDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19ESUNUX0lUQUxJQ19BTkdMRSI+UFNfRElDVF9JVEFMSUNfQU5HTEU8L2E+LCAgICAgICAgICAgLyogPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfTG9uZyI+RlRfTG9uZzwvYT4gICAgKi8KKworICAgIFBTX0RJQ1RfTUFYID0gPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0RJQ1RfSVRBTElDX0FOR0xFIj5QU19ESUNUX0lUQUxJQ19BTkdMRTwvYT4KKworICB9IDxiPlBTX0RpY3RfS2V5czwvYj47Cis8L3ByZT4KKworPHA+QW4gZW51bWVyYXRpb24gdXNlZCBpbiBjYWxscyB0byA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjRlRfR2V0X1BTX0ZvbnRfVmFsdWUiPkZUX0dldF9QU19Gb250X1ZhbHVlPC9hPiB0byBpZGVudGlmeSB0aGUgVHlwZSZuYnNwOzEgZGljdGlvbmFyeSBlbnRyeSB0byByZXRyaWV2ZS48L3A+CisKKzxoND52YWx1ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9GT05UX1RZUEUiPlBTX0RJQ1RfRk9OVF9UWVBFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9GT05UX01BVFJJWCI+UFNfRElDVF9GT05UX01BVFJJWDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfRk9OVF9CQk9YIj5QU19ESUNUX0ZPTlRfQkJPWDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfUEFJTlRfVFlQRSI+UFNfRElDVF9QQUlOVF9UWVBFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9GT05UX05BTUUiPlBTX0RJQ1RfRk9OVF9OQU1FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9VTklRVUVfSUQiPlBTX0RJQ1RfVU5JUVVFX0lEPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9OVU1fQ0hBUl9TVFJJTkdTIj5QU19ESUNUX05VTV9DSEFSX1NUUklOR1M8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0NIQVJfU1RSSU5HX0tFWSI+UFNfRElDVF9DSEFSX1NUUklOR19LRVk8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0NIQVJfU1RSSU5HIj5QU19ESUNUX0NIQVJfU1RSSU5HPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9FTkNPRElOR19UWVBFIj5QU19ESUNUX0VOQ09ESU5HX1RZUEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0VOQ09ESU5HX0VOVFJZIj5QU19ESUNUX0VOQ09ESU5HX0VOVFJZPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9OVU1fU1VCUlMiPlBTX0RJQ1RfTlVNX1NVQlJTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9TVUJSIj5QU19ESUNUX1NVQlI8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX1NURF9IVyI+UFNfRElDVF9TVERfSFc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX1NURF9WVyI+UFNfRElDVF9TVERfVlc8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX05VTV9CTFVFX1ZBTFVFUyI+UFNfRElDVF9OVU1fQkxVRV9WQUxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0JMVUVfVkFMVUUiPlBTX0RJQ1RfQkxVRV9WQUxVRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfQkxVRV9GVVpaIj5QU19ESUNUX0JMVUVfRlVaWjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfTlVNX09USEVSX0JMVUVTIj5QU19ESUNUX05VTV9PVEhFUl9CTFVFUzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfT1RIRVJfQkxVRSI+UFNfRElDVF9PVEhFUl9CTFVFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9OVU1fRkFNSUxZX0JMVUVTIj5QU19ESUNUX05VTV9GQU1JTFlfQkxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0ZBTUlMWV9CTFVFIj5QU19ESUNUX0ZBTUlMWV9CTFVFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9OVU1fRkFNSUxZX09USEVSX0JMVUVTIj5QU19ESUNUX05VTV9GQU1JTFlfT1RIRVJfQkxVRVM8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0ZBTUlMWV9PVEhFUl9CTFVFIj5QU19ESUNUX0ZBTUlMWV9PVEhFUl9CTFVFPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9CTFVFX1NDQUxFIj5QU19ESUNUX0JMVUVfU0NBTEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0JMVUVfU0hJRlQiPlBTX0RJQ1RfQkxVRV9TSElGVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfTlVNX1NURU1fU05BUF9IIj5QU19ESUNUX05VTV9TVEVNX1NOQVBfSDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfU1RFTV9TTkFQX0giPlBTX0RJQ1RfU1RFTV9TTkFQX0g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX05VTV9TVEVNX1NOQVBfViI+UFNfRElDVF9OVU1fU1RFTV9TTkFQX1Y8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX1NURU1fU05BUF9WIj5QU19ESUNUX1NURU1fU05BUF9WPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9GT1JDRV9CT0xEIj5QU19ESUNUX0ZPUkNFX0JPTEQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX1JORF9TVEVNX1VQIj5QU19ESUNUX1JORF9TVEVNX1VQPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9NSU5fRkVBVFVSRSI+UFNfRElDVF9NSU5fRkVBVFVSRTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfTEVOX0lWIj5QU19ESUNUX0xFTl9JVjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfUEFTU1dPUkQiPlBTX0RJQ1RfUEFTU1dPUkQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0xBTkdVQUdFX0dST1VQIj5QU19ESUNUX0xBTkdVQUdFX0dST1VQPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9WRVJTSU9OIj5QU19ESUNUX1ZFUlNJT048L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX05PVElDRSI+UFNfRElDVF9OT1RJQ0U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0ZVTExfTkFNRSI+UFNfRElDVF9GVUxMX05BTUU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0ZBTUlMWV9OQU1FIj5QU19ESUNUX0ZBTUlMWV9OQU1FPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9XRUlHSFQiPlBTX0RJQ1RfV0VJR0hUPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9JU19GSVhFRF9QSVRDSCI+UFNfRElDVF9JU19GSVhFRF9QSVRDSDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfVU5ERVJMSU5FX1BPU0lUSU9OIj5QU19ESUNUX1VOREVSTElORV9QT1NJVElPTjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IlBTX0RJQ1RfVU5ERVJMSU5FX1RISUNLTkVTUyI+UFNfRElDVF9VTkRFUkxJTkVfVEhJQ0tORVNTPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+PC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iUFNfRElDVF9GU19UWVBFIj5QU19ESUNUX0ZTX1RZUEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJQU19ESUNUX0lUQUxJQ19BTkdMRSI+UFNfRElDVF9JVEFMSUNfQU5HTEU8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJUMV9Gb250SW5mbyI+VDFfRm9udEluZm88L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNQU19Gb250SW5mb1JlYyI+UFNfRm9udEluZm9SZWM8L2E+ICA8Yj5UMV9Gb250SW5mbzwvYj47Cis8L3ByZT4KKworPHA+VGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX0ZvbnRJbmZvUmVjIj5QU19Gb250SW5mb1JlYzwvYT4uIEl0IGlzIGRlcHJlY2F0ZWQgYnV0IGtlcHQgdG8gbWFpbnRhaW4gc291cmNlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mIEZyZWVUeXBlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iVDFfUHJpdmF0ZSI+VDFfUHJpdmF0ZTwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1RZUEUxX1RBQkxFU19IICh0MXRhYmxlcy5oKS48L3A+Cis8cHJlPgorICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI1BTX1ByaXZhdGVSZWMiPlBTX1ByaXZhdGVSZWM8L2E+ICA8Yj5UMV9Qcml2YXRlPC9iPjsKKzwvcHJlPgorCis8cD5UaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjUFNfUHJpdmF0ZVJlYyI+UFNfUHJpdmF0ZVJlYzwvYT4uIEl0IGlzIGRlcHJlY2F0ZWQgYnV0IGtlcHQgdG8gbWFpbnRhaW4gc291cmNlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mIEZyZWVUeXBlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iQ0lEX0ZvbnREaWN0Ij5DSURfRm9udERpY3Q8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNDSURfRmFjZURpY3RSZWMiPkNJRF9GYWNlRGljdFJlYzwvYT4gIDxiPkNJRF9Gb250RGljdDwvYj47Cis8L3ByZT4KKworPHA+VGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gPGEgaHJlZj0iZnQyLXR5cGUxX3RhYmxlcy5odG1sI0NJRF9GYWNlRGljdFJlYyI+Q0lEX0ZhY2VEaWN0UmVjPC9hPi4gSXQgaXMgZGVwcmVjYXRlZCBidXQga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgRnJlZVR5cGUuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJDSURfSW5mbyI+Q0lEX0luZm88L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9UWVBFMV9UQUJMRVNfSCAodDF0YWJsZXMuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxhIGhyZWY9ImZ0Mi10eXBlMV90YWJsZXMuaHRtbCNDSURfRmFjZUluZm9SZWMiPkNJRF9GYWNlSW5mb1JlYzwvYT4gIDxiPkNJRF9JbmZvPC9iPjsKKzwvcHJlPgorCis8cD5UaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byA8YSBocmVmPSJmdDItdHlwZTFfdGFibGVzLmh0bWwjQ0lEX0ZhY2VJbmZvUmVjIj5DSURfRmFjZUluZm9SZWM8L2E+LiBJdCBpcyBkZXByZWNhdGVkIGJ1dCBrZXB0IHRvIG1haW50YWluIHNvdXJjZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiBGcmVlVHlwZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi11c2VyX2FsbG9jYXRpb24uaHRtbCBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdXNlcl9hbGxvY2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyZmNmNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItdXNlcl9hbGxvY2F0aW9uLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5Vc2VyIGFsbG9jYXRpb248L2gxPgorCis8cD5GcmVlVHlwZSBhc3N1bWVzIHRoYXQgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYnkgdGhlIHVzZXIgYW5kIHBhc3NlZCBhcyBhcmd1bWVudHMgYXJlIHplcm9lZCBvdXQgZXhjZXB0IGZvciB0aGUgYWN0dWFsIGRhdGEuIEluIG90aGVyIHdvcmRzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgJmxzcXVvO2NhbGxvYyZyc3F1bzsgKG9yIHZhcmlhbnRzIG9mIGl0KSBpbnN0ZWFkIG9mICZsc3F1bzttYWxsb2MmcnNxdW87IGZvciBhbGxvY2F0aW9uLjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi12ZXJzaW9uLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjcxNGIzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVmZXJlbmNlL2Z0Mi12ZXJzaW9uLmh0bWwKQEAgLTAsMCArMSwyNTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYTpsaW5rIHsgY29sb3I6ICMwMDAwRUY7IH0KKyAgYTp2aXNpdGVkIHsgY29sb3I6ICM1MTE4OEU7IH0KKyAgYTpob3ZlciB7IGNvbG9yOiAjRkYwMDAwOyB9CisKKyAgYm9keSB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNlcmlmOworICAgICAgICAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOworICAgICAgICAgd2lkdGg6IDg3JTsKKyAgICAgICAgIG1hcmdpbjogYXV0bzsgfQorCisgIGRpdi5zZWN0aW9uIHsgd2lkdGg6IDc1JTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IGF1dG87IH0KKyAgZGl2LnNlY3Rpb24gaHIgeyBtYXJnaW46IDRleCAwIDFleCAwOyB9CisgIGRpdi5zZWN0aW9uIGg0IHsgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBvYmxpcXVlOworICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgIG1hcmdpbjogM2V4IDAgMS41ZXggOSU7CisgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC4zZXggMCAwLjNleCAxJTsgfQorICBkaXYuc2VjdGlvbiBwIHsgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDEwJTsgfQorICBkaXYuc2VjdGlvbiBwcmUgeyBtYXJnaW46IDNleCAwIDNleCA5JTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Q2RThGRjsKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMmV4IDAgMmV4IDElOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLmZpZWxkcyB7IHdpZHRoOiA5MCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gdGFibGUudG9jIHsgd2lkdGg6IDk1JTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxLjVleCAwIDEuNWV4IDUlOyB9CisgIGRpdi50aW1lc3RhbXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDY5JTsKKyAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCAwOyB9CisKKyAgaDEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgaDMgeyBmb250LXNpemU6IG1lZGl1bTsKKyAgICAgICBtYXJnaW46IDRleCAwIDEuNWV4IDA7IH0KKworICBwIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisgIHByZS5jb2xvcmVkIHsgY29sb3I6IGJsdWU7IH0KKworICBzcGFuLmtleXdvcmQgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgICAgICAgICAgICAgICBjb2xvcjogZGFya2JsdWU7IH0KKworICB0YWJsZS5maWVsZHMgdGQudmFsIHsgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcDpmaXJzdC1jaGlsZCB7IG1hcmdpbjogMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsgfQorICB0YWJsZS5pbmRleCB7IG1hcmdpbjogNmV4IGF1dG8gNmV4IGF1dG87CisgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNleDsgfQorICB0YWJsZS5pbmRleCB0ciB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUuaW5kZXggdGQgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHsgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMWV4IDAgMWV4IDA7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubGVmdCB7IHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB0ZC5taWRkbGUgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQucmlnaHQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA4MyU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKyAgdGFibGUuc3lub3BzaXMgeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAyZW0gMC42ZXg7IH0KKyAgdGFibGUuc3lub3BzaXMgdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLnN5bm9wc2lzIHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS50b2MgdGQubGluayB7IHdpZHRoOiAzMCU7CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW0gMWV4IDA7IH0KKyAgdGFibGUudG9jIHRkLmRlc2MgeyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDAgMWV4IDFlbTsKKyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHAgeyBtYXJnaW46IDEuNWV4IDAgMCAwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT4KKzxoMT5GcmVlVHlwZS0yLjYgQVBJIFJlZmVyZW5jZTwvaDE+CisKKzxoMT5GcmVlVHlwZSBWZXJzaW9uPC9oMT4KKzxoMj5TeW5vcHNpczwvaDI+Cis8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX0xpYnJhcnlfVmVyc2lvbiI+RlRfTGlicmFyeV9WZXJzaW9uPC9hPjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KKzx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMiPkZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHM8L2E+PC90ZD48L3RyPgorPHRyPjx0ZD48YSBocmVmPSIjRlJFRVRZUEVfTUFKT1IiPkZSRUVUWVBFX01BSk9SPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nIj5GVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nPC9hPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZSRUVUWVBFX01JTk9SIj5GUkVFVFlQRV9NSU5PUjwvYT48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGUkVFVFlQRV9QQVRDSCI+RlJFRVRZUEVfUEFUQ0g8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZSRUVUWVBFX1hYWCI+RlJFRVRZUEVfWFhYPC9hPjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKworPHA+Tm90ZSB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGFyZSBvZiBsaW1pdGVkIHVzZSBiZWNhdXNlIGV2ZW4gYSBuZXcgcmVsZWFzZSBvZiBGcmVlVHlwZSB3aXRoIG9ubHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGluY3JlYXNlcyB0aGUgdmVyc2lvbiBudW1iZXIuPC9wPgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlRfTGlicmFyeV9WZXJzaW9uIj5GVF9MaWJyYXJ5X1ZlcnNpb248L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiApCisgIDxiPkZUX0xpYnJhcnlfVmVyc2lvbjwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0xpYnJhcnkiPkZUX0xpYnJhcnk8L2E+ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9JbnQiPkZUX0ludDwvYT4gICAgICAqYW1ham9yLAorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0ludCI+RlRfSW50PC9hPiAgICAgICphbWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfSW50Ij5GVF9JbnQ8L2E+ICAgICAgKmFwYXRjaCApOworPC9wcmU+CisKKzxwPlJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeSBiZWluZyB1c2VkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGR5bmFtaWNhbGx5IGxpbmtpbmcgdG8gdGhlIGxpYnJhcnksIHNpbmNlIG9uZSBjYW5ub3QgdXNlIHRoZSBtYWNyb3MgPGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9YWFgiPkZSRUVUWVBFX01BSk9SPC9hPiwgPGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9YWFgiPkZSRUVUWVBFX01JTk9SPC9hPiwgYW5kIDxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlJFRVRZUEVfWFhYIj5GUkVFVFlQRV9QQVRDSDwvYT4uPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0ibGlicmFyeSI+bGlicmFyeTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc291cmNlIGxpYnJhcnkgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5vdXRwdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW1ham9yIj5hbWFqb3I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYW1pbm9yIj5hbWlub3I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWlub3IgdmVyc2lvbiBudW1iZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iYXBhdGNoIj5hcGF0Y2g8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgcGF0Y2ggdmVyc2lvbiBudW1iZXIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm5vdGU8L2g0PgorPHA+VGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhICZsc3F1bztsaWJyYXJ5JnJzcXVvOyBhcmd1bWVudCBpcyBiZWNhdXNlIGNlcnRhaW4gcHJvZ3JhbXMgaW1wbGVtZW50IGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gaW4gYSBjdXN0b20gd2F5IHRoYXQgZG9lc24ndCB1c2UgPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfSW5pdF9GcmVlVHlwZSI+RlRfSW5pdF9GcmVlVHlwZTwvYT4uPC9wPgorPHA+SW4gc3VjaCBjYXNlcywgdGhlIGxpYnJhcnkgdmVyc2lvbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGJlZm9yZSB0aGUgbGlicmFyeSBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZC48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMiPkZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHM8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Jvb2wiPkZUX0Jvb2w8L2E+ICkKKyAgPGI+RlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50czwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlICk7Cis8L3ByZT4KKworPHA+UGFyc2UgYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBvZiBhIFRydWVUeXBlIGZvbnQgZmlsZSB0byBjaGVjayB3aGV0aGVyIGFueSBvZiB0aGUgcGF0ZW50ZWQgb3Bjb2RlcyBhcmUgdXNlZC4gVGhpcyBpcyBvbmx5IHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgdW5wYXRlbnRlZCBoaW50ZXIgd2l0aCBmb250cyB0aGF0IGRvIDxiPm5vdDwvYj4gdXNlIHRoZXNlIG9wY29kZXMuPC9wPgorPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcGFyc2VzIDxiPmFsbDwvYj4gZ2x5cGggaW5zdHJ1Y3Rpb25zIGluIHRoZSBmb250IGZpbGUsIHdoaWNoIG1heSBiZSBzbG93LjwvcD4KKworPGg0PmlucHV0PC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9ImZhY2UiPmZhY2U8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIGZhY2UgaGFuZGxlLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5yZXR1cm48L2g0PgorPHA+MSZuYnNwO2lmIHRoaXMgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgdXNlcyBvbmUgb2YgdGhlIHBhdGVudGVkIG9wY29kZXMsIDAmbmJzcDtvdGhlcndpc2UuPC9wPgorCis8aDQ+bm90ZTwvaDQ+Cis8cD5TaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuPC9wPgorCis8aDQ+c2luY2U8L2g0PgorPHA+Mi4zLjU8L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmciPkZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmc8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorICBGVF9FWFBPUlQoIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0Jvb2wiPkZUX0Jvb2w8L2E+ICkKKyAgPGI+RlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZzwvYj4oIDxhIGhyZWY9ImZ0Mi1iYXNlX2ludGVyZmFjZS5odG1sI0ZUX0ZhY2UiPkZUX0ZhY2U8L2E+ICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9Cb29sIj5GVF9Cb29sPC9hPiAgdmFsdWUgKTsKKzwvcHJlPgorCis8cD5FbmFibGUgb3IgZGlzYWJsZSB0aGUgdW5wYXRlbnRlZCBoaW50ZXIgZm9yIGEgZ2l2ZW4gZmFjZS4gT25seSBlbmFibGUgaXQgaWYgeW91IGhhdmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSBmYWNlIGRvZXNuJ3QgdXNlIGFueSBwYXRlbnRlZCBvcGNvZGVzIChzZWUgPGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzIj5GVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzPC9hPikuPC9wPgorCis8aDQ+aW5wdXQ8L2g0PgorPHRhYmxlIGNsYXNzPSJmaWVsZHMiPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iZmFjZSI+ZmFjZTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgZmFjZSBoYW5kbGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0idmFsdWUiPnZhbHVlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+TmV3IGJvb2xlYW4gc2V0dGluZy48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+cmV0dXJuPC9oND4KKzxwPlRoZSBvbGQgc2V0dGluZyB2YWx1ZS4gVGhpcyB3aWxsIGFsd2F5cyBiZSBmYWxzZSBpZiB0aGlzIGlzIG5vdCBhbiBTRk5UIGZvbnQsIG9yIGlmIHRoZSB1bnBhdGVudGVkIGhpbnRlciBpcyBub3QgY29tcGlsZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgbGlicmFyeS48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlNpbmNlIE1heSAyMDEwLCBUcnVlVHlwZSBoaW50aW5nIGlzIG5vIGxvbmdlciBwYXRlbnRlZC48L3A+CisKKzxoND5zaW5jZTwvaDQ+Cis8cD4yLjMuNTwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMyBpZD0iRlJFRVRZUEVfWFhYIj5GUkVFVFlQRV9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9GUkVFVFlQRV9IIChmcmVldHlwZS5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItdmVyc2lvbi5odG1sI0ZSRUVUWVBFX01BSk9SIj5GUkVFVFlQRV9NQUpPUjwvYT4gIDIKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXZlcnNpb24uaHRtbCNGUkVFVFlQRV9NSU5PUiI+RlJFRVRZUEVfTUlOT1I8L2E+ICA2CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlJFRVRZUEVfUEFUQ0giPkZSRUVUWVBFX1BBVENIPC9hPiAgMAorPC9wcmU+CisKKzxwPlRoZXNlIHRocmVlIG1hY3JvcyBpZGVudGlmeSB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUgdmVyc2lvbi4gVXNlIDxhIGhyZWY9ImZ0Mi12ZXJzaW9uLmh0bWwjRlRfTGlicmFyeV9WZXJzaW9uIj5GVF9MaWJyYXJ5X1ZlcnNpb248L2E+IHRvIGFjY2VzcyB0aGVtIGF0IHJ1bnRpbWUuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZSRUVUWVBFX01BSk9SIj5GUkVFVFlQRV9NQUpPUjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGUkVFVFlQRV9NSU5PUiI+RlJFRVRZUEVfTUlOT1I8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5UaGUgbWlub3IgdmVyc2lvbiBudW1iZXIuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlJFRVRZUEVfUEFUQ0giPkZSRUVUWVBFX1BBVENIPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIHBhdGNoIGxldmVsLjwvcD4KKzwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoZSB2ZXJzaW9uIG51bWJlciBvZiBGcmVlVHlwZSBpZiBidWlsdCBhcyBhIGR5bmFtaWMgbGluayBsaWJyYXJ5IHdpdGggdGhlICZsc3F1bztsaWJ0b29sJnJzcXVvOyBwYWNrYWdlIGlzIDxpPm5vdDwvaT4gY29udHJvbGxlZCBieSB0aGVzZSB0aHJlZSBtYWNyb3MuPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9kb2NzL3JlZmVyZW5jZS9mdDItd2luZm50X2ZvbnRzLmh0bWwgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXdpbmZudF9mb250cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNmRjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvZG9jcy9yZWZlcmVuY2UvZnQyLXdpbmZudF9mb250cy5odG1sCkBAIC0wLDAgKzEsMzEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkZyZWVUeXBlLTIuNiBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+Cis8aDE+RnJlZVR5cGUtMi42IEFQSSBSZWZlcmVuY2U8L2gxPgorCis8aDE+V2luZG93IEZOVCBGaWxlczwvaDE+Cis8aDI+U3lub3BzaXM8L2gyPgorPHRhYmxlIGNsYXNzPSJzeW5vcHNpcyI+Cis8dHI+PHRkPjxhIGhyZWY9IiNGVF9XaW5GTlRfSURfWFhYIj5GVF9XaW5GTlRfSURfWFhYPC9hPjwvdGQ+PHRkPjxhIGhyZWY9IiNGVF9XaW5GTlRfSGVhZGVyIj5GVF9XaW5GTlRfSGVhZGVyPC9hPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzx0cj48dGQ+PGEgaHJlZj0iI0ZUX1dpbkZOVF9IZWFkZXJSZWMiPkZUX1dpbkZOVF9IZWFkZXJSZWM8L2E+PC90ZD48dGQ+PGEgaHJlZj0iI0ZUX0dldF9XaW5GTlRfSGVhZGVyIj5GVF9HZXRfV2luRk5UX0hlYWRlcjwvYT48L3RkPjx0ZD48L3RkPjwvdHI+Cis8L3RhYmxlPgorCisKKzxwPlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgV2luZG93cyBGTlQgc3BlY2lmaWMgZnVuY3Rpb25zLjwvcD4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX1dpbkZOVF9JRF9YWFgiPkZUX1dpbkZOVF9JRF9YWFg8L2gzPgorPHA+RGVmaW5lZCBpbiBGVF9XSU5GT05UU19IIChmdHdpbmZudC5oKS48L3A+Cis8cHJlPgorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1MiI+RlRfV2luRk5UX0lEX0NQMTI1MjwvYT4gICAgMAorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0RFRkFVTFQiPkZUX1dpbkZOVF9JRF9ERUZBVUxUPC9hPiAgIDEKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9TWU1CT0wiPkZUX1dpbkZOVF9JRF9TWU1CT0w8L2E+ICAgIDIKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9NQUMiPkZUX1dpbkZOVF9JRF9NQUM8L2E+ICAgICAgNzcKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9DUDkzMiI+RlRfV2luRk5UX0lEX0NQOTMyPC9hPiAgIDEyOAorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQOTQ5Ij5GVF9XaW5GTlRfSURfQ1A5NDk8L2E+ICAgMTI5CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfQ1AxMzYxIj5GVF9XaW5GTlRfSURfQ1AxMzYxPC9hPiAgMTMwCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfQ1A5MzYiPkZUX1dpbkZOVF9JRF9DUDkzNjwvYT4gICAxMzQKKyNkZWZpbmUgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9JRF9DUDk1MCI+RlRfV2luRk5UX0lEX0NQOTUwPC9hPiAgIDEzNgorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1MyI+RlRfV2luRk5UX0lEX0NQMTI1MzwvYT4gIDE2MQorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1NCI+RlRfV2luRk5UX0lEX0NQMTI1NDwvYT4gIDE2MgorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1OCI+RlRfV2luRk5UX0lEX0NQMTI1ODwvYT4gIDE2MworI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1NSI+RlRfV2luRk5UX0lEX0NQMTI1NTwvYT4gIDE3NworI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1NiI+RlRfV2luRk5UX0lEX0NQMTI1NjwvYT4gIDE3OAorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1NyI+RlRfV2luRk5UX0lEX0NQMTI1NzwvYT4gIDE4NgorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQMTI1MSI+RlRfV2luRk5UX0lEX0NQMTI1MTwvYT4gIDIwNAorI2RlZmluZSA8YSBocmVmPSJmdDItd2luZm50X2ZvbnRzLmh0bWwjRlRfV2luRk5UX0lEX0NQODc0Ij5GVF9XaW5GTlRfSURfQ1A4NzQ8L2E+ICAgMjIyCisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfQ1AxMjUwIj5GVF9XaW5GTlRfSURfQ1AxMjUwPC9hPiAgMjM4CisjZGVmaW5lIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSURfT0VNIj5GVF9XaW5GTlRfSURfT0VNPC9hPiAgICAgMjU1Cis8L3ByZT4KKworPHA+QSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlICZsc3F1bztjaGFyc2V0JnJzcXVvOyBieXRlIGluIDxhIGhyZWY9ImZ0Mi13aW5mbnRfZm9udHMuaHRtbCNGVF9XaW5GTlRfSGVhZGVyUmVjIj5GVF9XaW5GTlRfSGVhZGVyUmVjPC9hPi4gRXhhY3QgbWFwcGluZyB0YWJsZXMgZm9yIHRoZSB2YXJpb3VzIGNwWFhYWCBlbmNvZGluZ3MgKGV4Y2VwdCBmb3IgY3AxMzYxKSBjYW4gYmUgZm91bmQgYXQgPGEgaHJlZj0iZnRwOi8vZnRwLnVuaWNvZGUub3JnL1B1YmxpYyI+ZnRwOi8vZnRwLnVuaWNvZGUub3JnL1B1YmxpYzwvYT4gaW4gdGhlIE1BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1Mgc3ViZGlyZWN0b3J5LiBjcDEzNjEgaXMgcm91Z2hseSBhIHN1cGVyc2V0IG9mIE1BUFBJTkdTL09CU09MRVRFL0VBU1RBU0lBL0tTQy9KT0hBQi5UWFQuPC9wPgorCis8aDQ+dmFsdWVzPC9oND4KKzx0YWJsZSBjbGFzcz0iZmllbGRzIj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9ERUZBVUxUIj5GVF9XaW5GTlRfSURfREVGQVVMVDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPlRoaXMgaXMgdXNlZCBmb3IgZm9udCBlbnVtZXJhdGlvbiBhbmQgZm9udCBjcmVhdGlvbiBhcyBhICZsc3F1bztkb24ndCBjYXJlJnJzcXVvOyB2YWx1ZS4gVmFsaWQgZm9udCBmaWxlcyBkb24ndCBjb250YWluIHRoaXMgdmFsdWUuIFdoZW4gcXVlcnlpbmcgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBmb250IHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkIGludG8gYSBzcGVjaWZpZWQgZGV2aWNlIGNvbnRleHQsIHRoaXMgcmV0dXJuIHZhbHVlIChvZiB0aGUgcmVsYXRlZCBXaW5kb3dzIEFQSSkgc2ltcGx5IGRlbm90ZXMgZmFpbHVyZS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9XaW5GTlRfSURfU1lNQk9MIj5GVF9XaW5GTlRfSURfU1lNQk9MPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlcmUgaXMgbm8ga25vd24gbWFwcGluZyB0YWJsZSBhdmFpbGFibGUuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX01BQyI+RlRfV2luRk5UX0lEX01BQzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPk1hYyBSb21hbiBlbmNvZGluZy48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9XaW5GTlRfSURfT0VNIj5GVF9XaW5GTlRfSURfT0VNPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+RnJvbSBNaWNoYWVsIFDDtnR0Z2VuICZsdDttaWNoYWVsQHBvZXR0Z2VuLmRlJmd0Ozo8L3A+Cis8cD5UaGUgJmxzcXVvO1dpbmRvd3MgRm9udCBNYXBwaW5nJnJzcXVvOyBhcnRpY2xlIHNheXMgdGhhdCBGVF9XaW5GTlRfSURfT0VNIGlzIHVzZWQgZm9yIHRoZSBjaGFyc2V0IG9mIHZlY3RvciBmb250cywgbGlrZSAmbHNxdW87bW9kZXJuLmZvbiZyc3F1bzssICZsc3F1bztyb21hbi5mb24mcnNxdW87LCBhbmQgJmxzcXVvO3NjcmlwdC5mb24mcnNxdW87IG9uIFdpbmRvd3MuPC9wPgorPHA+VGhlICZsc3F1bztDcmVhdGVGb250JnJzcXVvOyBkb2N1bWVudGF0aW9uIHNheXM6IFRoZSBGVF9XaW5GTlRfSURfT0VNIHZhbHVlIHNwZWNpZmllcyBhIGNoYXJhY3RlciBzZXQgdGhhdCBpcyBvcGVyYXRpbmctc3lzdGVtIGRlcGVuZGVudC48L3A+Cis8cD5UaGUgJmxzcXVvO0lGSU1FVFJJQ1MmcnNxdW87IGRvY3VtZW50YXRpb24gZnJvbSB0aGUgJmxzcXVvO1dpbmRvd3MgRHJpdmVyIERldmVsb3BtZW50IEtpdCZyc3F1bzsgc2F5czogVGhpcyBmb250IHN1cHBvcnRzIGFuIE9FTS1zcGVjaWZpYyBjaGFyYWN0ZXIgc2V0LiBUaGUgT0VNIGNoYXJhY3RlciBzZXQgaXMgc3lzdGVtIGRlcGVuZGVudC48L3A+Cis8cD5JbiBnZW5lcmFsIE9FTSwgYXMgb3Bwb3NlZCB0byBBTlNJIChpLmUuLCBjcDEyNTIpLCBkZW5vdGVzIHRoZSBzZWNvbmQgZGVmYXVsdCBjb2RlcGFnZSB0aGF0IG1vc3QgaW50ZXJuYXRpb25hbCB2ZXJzaW9ucyBvZiBXaW5kb3dzIGhhdmUuIEl0IGlzIG9uZSBvZiB0aGUgT0VNIGNvZGVwYWdlcyBmcm9tPC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvZ29nbG9iYWwvYmI5NjQ2NTUiPmh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2dvZ2xvYmFsL2JiOTY0NjU1PC9hPiw8L3A+Cis8cD5hbmQgaXMgdXNlZCBmb3IgdGhlICZsc3F1bztET1MgYm94ZXMmcnNxdW87LCB0byBzdXBwb3J0IGxlZ2FjeSBhcHBsaWNhdGlvbnMuIEEgR2VybWFuIFdpbmRvd3MgdmVyc2lvbiBmb3IgZXhhbXBsZSB1c3VhbGx5IHVzZXMgQU5TSSBjb2RlcGFnZSAxMjUyIGFuZCBPRU0gY29kZXBhZ2UgODUwLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9DUDg3NCI+RlRfV2luRk5UX0lEX0NQODc0PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzdXBlcnNldCBvZiBUaGFpIFRJUyA2MjAgYW5kIElTTyA4ODU5LTExLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9DUDkzMiI+RlRfV2luRk5UX0lEX0NQOTMyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzdXBlcnNldCBvZiBKYXBhbmVzZSBTaGlmdC1KSVMgKHdpdGggbWlub3IgZGV2aWF0aW9ucykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQOTM2Ij5GVF9XaW5GTlRfSURfQ1A5MzY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN1cGVyc2V0IG9mIHNpbXBsaWZpZWQgQ2hpbmVzZSBHQiAyMzEyLTE5ODAgKHdpdGggZGlmZmVyZW50IG9yZGVyaW5nIGFuZCBtaW5vciBkZXZpYXRpb25zKS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9XaW5GTlRfSURfQ1A5NDkiPkZUX1dpbkZOVF9JRF9DUDk0OTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3VwZXJzZXQgb2YgS29yZWFuIEhhbmd1bCBLUyZuYnNwO0MgNTYwMS0xOTg3ICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZyBhbmQgbWlub3IgZGV2aWF0aW9ucykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQOTUwIj5GVF9XaW5GTlRfSURfQ1A5NTA8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN1cGVyc2V0IG9mIHRyYWRpdGlvbmFsIENoaW5lc2UgQmlnJm5ic3A7NSBFVGVuICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZyBhbmQgbWlub3IgZGV2aWF0aW9ucykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQMTI1MCI+RlRfV2luRk5UX0lEX0NQMTI1MDwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3VwZXJzZXQgb2YgRWFzdCBFdXJvcGVhbiBJU08gODg1OS0yICh3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBvcmRlcmluZykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQMTI1MSI+RlRfV2luRk5UX0lEX0NQMTI1MTwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3VwZXJzZXQgb2YgUnVzc2lhbiBJU08gODg1OS01ICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQMTI1MiI+RlRfV2luRk5UX0lEX0NQMTI1MjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkFOU0kgZW5jb2RpbmcuIEEgc3VwZXJzZXQgb2YgSVNPIDg4NTktMS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9XaW5GTlRfSURfQ1AxMjUzIj5GVF9XaW5GTlRfSURfQ1AxMjUzPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzdXBlcnNldCBvZiBHcmVlayBJU08gODg1OS03ICh3aXRoIG1pbm9yIG1vZGlmaWNhdGlvbnMpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9DUDEyNTQiPkZUX1dpbkZOVF9JRF9DUDEyNTQ8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN1cGVyc2V0IG9mIFR1cmtpc2ggSVNPIDg4NTktOS48L3A+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJGVF9XaW5GTlRfSURfQ1AxMjU1Ij5GVF9XaW5GTlRfSURfQ1AxMjU1PC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBzdXBlcnNldCBvZiBIZWJyZXcgSVNPIDg4NTktOCAod2l0aCBzb21lIG1vZGlmaWNhdGlvbnMpLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9DUDEyNTYiPkZUX1dpbkZOVF9JRF9DUDEyNTY8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5BIHN1cGVyc2V0IG9mIEFyYWJpYyBJU08gODg1OS02ICh3aXRoIGRpZmZlcmVudCBvcmRlcmluZykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQMTI1NyI+RlRfV2luRk5UX0lEX0NQMTI1NzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkEgc3VwZXJzZXQgb2YgQmFsdGljIElTTyA4ODU5LTEzICh3aXRoIHNvbWUgZGV2aWF0aW9ucykuPC9wPgorPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iRlRfV2luRk5UX0lEX0NQMTI1OCI+RlRfV2luRk5UX0lEX0NQMTI1ODwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4KKzxwPkZvciBWaWV0bmFtZXNlLiBUaGlzIGVuY29kaW5nIGRvZXNuJ3QgY292ZXIgYWxsIG5lY2Vzc2FyeSBjaGFyYWN0ZXJzLjwvcD4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IkZUX1dpbkZOVF9JRF9DUDEzNjEiPkZUX1dpbkZOVF9JRF9DUDEzNjE8L3RkPjx0ZCBjbGFzcz0iZGVzYyI+Cis8cD5Lb3JlYW4gKEpvaGFiKS48L3A+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9XaW5GTlRfSGVhZGVyUmVjIj5GVF9XaW5GTlRfSGVhZGVyUmVjPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfV0lORk9OVFNfSCAoZnR3aW5mbnQuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+ICBGVF9XaW5GTlRfSGVhZGVyUmVjXworICB7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB2ZXJzaW9uOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICBmaWxlX3NpemU7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgY29weXJpZ2h0WzYwXTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIGZpbGVfdHlwZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIG5vbWluYWxfcG9pbnRfc2l6ZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHZlcnRpY2FsX3Jlc29sdXRpb247CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBob3Jpem9udGFsX3Jlc29sdXRpb247CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBhc2NlbnQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBpbnRlcm5hbF9sZWFkaW5nOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgZXh0ZXJuYWxfbGVhZGluZzsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICBpdGFsaWM7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgdW5kZXJsaW5lOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIHN0cmlrZV9vdXQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICB3ZWlnaHQ7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgY2hhcnNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIHBpeGVsX3dpZHRoOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgcGl4ZWxfaGVpZ2h0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIHBpdGNoX2FuZF9mYW1pbHk7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBhdmdfd2lkdGg7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBtYXhfd2lkdGg7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgZmlyc3RfY2hhcjsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9CeXRlIj5GVF9CeXRlPC9hPiAgICBsYXN0X2NoYXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfQnl0ZSI+RlRfQnl0ZTwvYT4gICAgZGVmYXVsdF9jaGFyOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIGJyZWFrX2NoYXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBieXRlc19wZXJfcm93OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICBkZXZpY2Vfb2Zmc2V0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICBmYWNlX25hbWVfb2Zmc2V0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICBiaXRzX3BvaW50ZXI7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVUxvbmciPkZUX1VMb25nPC9hPiAgIGJpdHNfb2Zmc2V0OworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX0J5dGUiPkZUX0J5dGU8L2E+ICAgIHJlc2VydmVkOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VMb25nIj5GVF9VTG9uZzwvYT4gICBmbGFnczsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIEFfc3BhY2U7CisgICAgPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfVVNob3J0Ij5GVF9VU2hvcnQ8L2E+ICBCX3NwYWNlOworICAgIDxhIGhyZWY9ImZ0Mi1iYXNpY190eXBlcy5odG1sI0ZUX1VTaG9ydCI+RlRfVVNob3J0PC9hPiAgQ19zcGFjZTsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VU2hvcnQiPkZUX1VTaG9ydDwvYT4gIGNvbG9yX3RhYmxlX29mZnNldDsKKyAgICA8YSBocmVmPSJmdDItYmFzaWNfdHlwZXMuaHRtbCNGVF9VTG9uZyI+RlRfVUxvbmc8L2E+ICAgcmVzZXJ2ZWQxWzRdOworCisgIH0gPGI+RlRfV2luRk5UX0hlYWRlclJlYzwvYj47Cis8L3ByZT4KKworPHA+V2luZG93cyBGTlQgSGVhZGVyIGluZm8uPC9wPgorCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iZnQyLWluZGV4Lmh0bWwiPkluZGV4PC9hPl08L3RkPjx0ZCBjbGFzcz0ibWlkZGxlIj5bPGEgaHJlZj0iIyI+VG9wPC9hPl08L3RkPjx0ZCBjbGFzcz0icmlnaHQiPls8YSBocmVmPSJmdDItdG9jLmh0bWwiPlRPQzwvYT5dPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzIGlkPSJGVF9XaW5GTlRfSGVhZGVyIj5GVF9XaW5GTlRfSGVhZGVyPC9oMz4KKzxwPkRlZmluZWQgaW4gRlRfV0lORk9OVFNfSCAoZnR3aW5mbnQuaCkuPC9wPgorPHByZT4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8L3NwYW4+IEZUX1dpbkZOVF9IZWFkZXJSZWNfKiAgPGI+RlRfV2luRk5UX0hlYWRlcjwvYj47Cis8L3ByZT4KKworPHA+QSBoYW5kbGUgdG8gYW4gPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9IZWFkZXJSZWMiPkZUX1dpbkZOVF9IZWFkZXJSZWM8L2E+IHN0cnVjdHVyZS48L3A+CisKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9ImxlZnQiPls8YSBocmVmPSJmdDItaW5kZXguaHRtbCI+SW5kZXg8L2E+XTwvdGQ+PHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9ImZ0Mi10b2MuaHRtbCI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDMgaWQ9IkZUX0dldF9XaW5GTlRfSGVhZGVyIj5GVF9HZXRfV2luRk5UX0hlYWRlcjwvaDM+Cis8cD5EZWZpbmVkIGluIEZUX1dJTkZPTlRTX0ggKGZ0d2luZm50LmgpLjwvcD4KKzxwcmU+CisgIEZUX0VYUE9SVCggPGEgaHJlZj0iZnQyLWJhc2ljX3R5cGVzLmh0bWwjRlRfRXJyb3IiPkZUX0Vycm9yPC9hPiApCisgIDxiPkZUX0dldF9XaW5GTlRfSGVhZGVyPC9iPiggPGEgaHJlZj0iZnQyLWJhc2VfaW50ZXJmYWNlLmh0bWwjRlRfRmFjZSI+RlRfRmFjZTwvYT4gICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iZnQyLXdpbmZudF9mb250cy5odG1sI0ZUX1dpbkZOVF9IZWFkZXJSZWMiPkZUX1dpbkZOVF9IZWFkZXJSZWM8L2E+ICAqYWhlYWRlciApOworPC9wcmU+CisKKzxwPlJldHJpZXZlIGEgV2luZG93cyBGTlQgZm9udCBpbmZvIGhlYWRlci48L3A+CisKKzxoND5pbnB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJmYWNlIj5mYWNlPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+QSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0Pm91dHB1dDwvaDQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkcyI+Cis8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSJhaGVhZGVyIj5haGVhZGVyPC90ZD48dGQgY2xhc3M9ImRlc2MiPgorPHA+VGhlIFdpbkZOVCBoZWFkZXIuPC9wPgorPC90ZD48L3RyPgorPC90YWJsZT4KKworPGg0PnJldHVybjwvaDQ+Cis8cD5GcmVlVHlwZSBlcnJvciBjb2RlLiAwJm5ic3A7bWVhbnMgc3VjY2Vzcy48L3A+CisKKzxoND5ub3RlPC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIFdpbmRvd3MgRk5UIGZhY2VzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLjwvcD4KKworPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9ImZ0Mi1pbmRleC5odG1sIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9Im1pZGRsZSI+WzxhIGhyZWY9IiMiPlRvcDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iZnQyLXRvYy5odG1sIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvZG9jcy9yZWxlYXNlIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVsZWFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkyYjIzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2RvY3MvcmVsZWFzZQpAQCAtMCwwICsxLDIwMiBAQAorSG93IHRvIHByZXBhcmUgYSBuZXcgcmVsZWFzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuIGluY2x1ZGUvZnJlZXR5cGUuaDogIFVwZGF0ZSBGUkVFVFlQRV9NQUpPUiwgRlJFRVRZUEVfTUlOT1IsCisgIGFuZCBGUkVFVFlQRV9QQVRDSC4KKworLiBVcGRhdGUgdmVyc2lvbiBudW1iZXJzIGluIGFsbCBmaWxlcyB3aGVyZSBuZWNlc3NhcnkgKGZvciBleGFtcGxlLCBkbworICBhIGdyZXAgZm9yIGJvdGggYDIuMy4xJyBhbmQgYDIzMScgZm9yIHJlbGVhc2UgMi4zLjEpLgorCisuIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IFVwZGF0ZSBgdmVyc2lvbl9pbmZvJy4KKworLiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGRpZmZlcmVuY2VzIHRvIGxhc3QgcmVsZWFzZS4KKworLiBSRUFETUU6IFVwZGF0ZS4KKworLiBkb2NzL1ZFUlNJT04uRExMOiBEb2N1bWVudCBjaGFuZ2VkIGB2ZXJzaW9uX2luZm8nLgorCisuIENoYW5nZUxvZzogICBBbm5vdW5jZSAgbmV3ICByZWxlYXNlICAgKGJvdGggIGluICB0aGUgIGZyZWV0eXBlMiAgYW5kCisgIGZyZWV0eXBlMi1kZW1vcyBtb2R1bGVzKS4KKworLiBDbG9uZSB0aGUgZ2l0IGFyY2hpdmUgdG8gYW5vdGhlciBkaXJlY3Rvcnkgd2l0aAorCisgICAgZ2l0IGNsb25lIC1sIC1zIC4gLi4vZnJlZXR5cGUyLnRlc3QKKworICBvciBzb21ldGhpbmcgbGlrZSB0aGlzIGFuZCBydW4KKworICAgIG1ha2UgZGlzdGNsZWFuOyBtYWtlIGRldmVsOyBtYWtlCisgICAgbWFrZSBkaXN0Y2xlYW47IG1ha2UgZGV2ZWw7IG1ha2UgbXVsdGkKKyAgICBtYWtlIGRpc3RjbGVhbjsgbWFrZSBkZXZlbCBDQz1nKys7IG1ha2UgQ0M9ZysrCisgICAgbWFrZSBkaXN0Y2xlYW47IG1ha2UgZGV2ZWwgQ0M9ZysrOyBtYWtlIG11bHRpIENDPWcrKworCisgICAgc2ggYXV0b2dlbi5zaAorICAgIG1ha2UgZGlzdGNsZWFuOyAuL2NvbmZpZ3VyZTsgbWFrZQorICAgIG1ha2UgZGlzdGNsZWFuOyAuL2NvbmZpZ3VyZSBDQz1nKys7IG1ha2UKKworICBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgdG8gdGVzdCBjb21waWxhdGlvbiB3aXRoIGJvdGggZ2NjIGFuZCBnKysuCisKKy4gVGVzdCBDKysgY29tcGlsYXRpb24gIGZvciBmcmVldHlwZTItZGVtb3MgdG9vICAodXNpbmcgYGdpdCBjbG9uZScgYXMKKyAgYWJvdmUpLgorCisuIFJ1biAgc3JjL3Rvb2xzL2Noa3RyY21wLnB5ICBhbmQgY2hlY2sgIHRoYXQgdGhlcmUgIGFyZSBubyAgdW5kZWZpbmVkCisgIHRyYWNlX1hYWFggbWFjcm9zLgorCisuIEFmdGVyIHB1c2hpbmcgdGhlIG5ldyByZWxlYXNlLCAgdGFnIHRoZSBnaXQgcmVwb3NpdG9yaWVzIChmcmVldHlwZTIsCisgIGZyZWV0eXBlMi1kZW1vcykgd2l0aAorCisgICAgZ2l0IHRhZyBWRVItPHZlcnNpb24+IC1tICIiIC11IDxjb21taXR0ZXI+CisKKyAgYW5kIHB1c2ggdGhlIHRhZ3Mgd2l0aAorCisgICAgZ2l0IHB1c2ggLS10YWdzCisKKy4gQ2hlY2sgd2l0aAorCisgICAgZ2l0IGNsZWFuIC1uZHgKKworICB0aGF0IHRoZSBnaXQgZGlyZWN0b3J5IGlzIHJlYWxseSBjbGVhbiAgKGFuZCByZW1vdmUgZXh0cmFuZW91cyBmaWxlcworICBpZiBuZWNlc3NhcnkpLgorCisuIFNheSBgbWFrZSAgZGlzdCcgaW4gYm90aCB0aGUgIGZyZWV0eXBlMiBhbmQgZnJlZXR5cGUyLWRlbW9zICBtb2R1bGVzCisgIHRvIGdlbmVyYXRlIHRoZSAudGFyLmd6LCAudGFyLmJ6MiwgYW5kIC56aXAgZmlsZXMuCisKKy4gQ3JlYXRlICAgICB0aGUgICAgIGRvYyAgICBidW5kbGVzICAgIChmcmVldHlwZS1kb2MtPHZlcnNpb24+LnRhci5neiwKKyAgZnJlZXR5cGUtZG9jLTx2ZXJzaW9uPi50YXIuYnoyLCAgICBmdGRvYzx2ZXJzaW9uPi56aXApLiAgICBUaGlzICAgaXMKKyAgZXZlcnl0aGluZyBpbgorCisgICAgPGZyZWV0eXBlLXdlYiBnaXQgcmVwb3NpdG9yeT4vZnJlZXR5cGUyL2RvY3MKKworICBleGNlcHQgdGhlIGByZWZlcmVuY2UnIHN1YmRpcmVjdG9yeS4gICBEbyAqbm90KiB1c2Ugb3B0aW9uIGAtbCcgZnJvbQorICB6aXAhCisKKy4gUnVuIHRoZSBmb2xsb3dpbmcgc2NyaXB0ICh3aXRoIHVwZGF0ZWQgYCRWRVJTSU9OJywgYCRTQVZBTk5BSF9VU0VSJywKKyAgYW5kICRTT1VSQ0VGT1JHRV9VU0VSICB2YXJpYWJsZXMpIHRvIHNpZ24gYW5kIHVwbG9hZCB0aGUgIGJ1bmRsZXMgdG8KKyAgYm90aCBTYXZhbm5haCBhbmQgU291cmNlRm9yZ2UuICBUaGUgc2lnbmluZyBjb2RlIGhhcyBiZWVuIHRha2VuIGZyb20KKyAgdGhlIGBnbnVwbG9hZCcgc2NyaXB0IChwYXJ0IG9mIHRoZSBhdXRvbWFrZSBidW5kbGUpLgorCisgICAgIyEvYmluL3NoCisKKyAgICBWRVJTSU9OPTIuNS4xCisgICAgU0FWQU5OQUhfVVNFUj13bAorICAgIFNPVVJDRUZPUkdFX1VTRVI9d2xlbWIKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgR1BHPScvdXNyL2Jpbi9ncGcgLS1iYXRjaCAtLW5vLXR0eScKKworICAgIHZlcnNpb249YGVjaG8gJFZFUlNJT04gfCBzZWQgInMvXFwuLy9nImAKKworICAgIEZSRUVUWVBFX1BBQ0tBR0VTPSJmcmVldHlwZS0kVkVSU0lPTi50YXIuZ3ogXAorICAgICAgICAgICAgICAgICAgICAgICBmcmVldHlwZS0kVkVSU0lPTi50YXIuYnoyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZnQkdmVyc2lvbi56aXAiCisgICAgRlQyREVNT1NfUEFDS0FHRVM9ImZ0MmRlbW9zLSRWRVJTSU9OLnRhci5neiBcCisgICAgICAgICAgICAgICAgICAgICAgIGZ0MmRlbW9zLSRWRVJTSU9OLnRhci5iejIgXAorICAgICAgICAgICAgICAgICAgICAgICBmdGRtbyR2ZXJzaW9uLnppcCIKKyAgICBGVERPQ19QQUNLQUdFUz0iZnJlZXR5cGUtZG9jLSRWRVJTSU9OLnRhci5neiBcCisgICAgICAgICAgICAgICAgICAgIGZyZWV0eXBlLWRvYy0kVkVSU0lPTi50YXIuYnoyIFwKKyAgICAgICAgICAgICAgICAgICAgZnRkb2MkdmVyc2lvbi56aXAiCisKKyAgICBQQUNLQUdFX0xJU1Q9IiRGUkVFVFlQRV9QQUNLQUdFUyBcCisgICAgICAgICAgICAgICAgICAkRlQyREVNT1NfUEFDS0FHRVMgXAorICAgICAgICAgICAgICAgICAgJEZURE9DX1BBQ0tBR0VTIgorCisgICAgc2V0IC1lCisgICAgdW5zZXQgcGFzc3BocmFzZQorCisgICAgUEFUSD0vZW1wdHkgZWNobyAtbiAiRW50ZXIgR1BHIHBhc3NwaHJhc2U6ICIKKyAgICBzdHR5IC1lY2hvCisgICAgcmVhZCAtciBwYXNzcGhyYXNlCisgICAgc3R0eSBlY2hvCisgICAgZWNobworCisgICAgZm9yIGYgaW4gJFBBQ0tBR0VfTElTVDsgZG8KKyAgICAgIGlmIHRlc3QgISAtZiAkZjsgdGhlbgorICAgICAgICBlY2hvICIkMDogQ2Fubm90IGZpbmQgXGAkZiciIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBlbHNlCisgICAgICAgIDoKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZm9yIGYgaW4gJFBBQ0tBR0VfTElTVDsgZG8KKyAgICAgIGVjaG8gIlNpZ25pbmcgJGYuLi4iCisgICAgICBybSAtZiAkZi5zaWcKKyAgICAgIGVjaG8gJHBhc3NwaHJhc2UgfCAkR1BHIC0tcGFzc3BocmFzZS1mZCAwIC1iYSAtbyAkZi5zaWcgJGYKKyAgICBkb25lCisKKyAgICBGUkVFVFlQRV9TSUdOQVRVUkVTPQorICAgIGZvciBpIGluICRGUkVFVFlQRV9QQUNLQUdFUzsgZG8KKyAgICAgIEZSRUVUWVBFX1NJR05BVFVSRVM9IiRGUkVFVFlQRV9TSUdOQVRVUkVTICRpLnNpZyIKKyAgICBkb25lCisKKyAgICBGVDJERU1PU19TSUdOQVRVUkVTPQorICAgIGZvciBpIGluICRGVDJERU1PU19QQUNLQUdFUzsgZG8KKyAgICAgIEZUMkRFTU9TX1NJR05BVFVSRVM9IiRGVDJERU1PU19TSUdOQVRVUkVTICRpLnNpZyIKKyAgICBkb25lCisKKyAgICBGVERPQ19TSUdOQVRVUkVTPQorICAgIGZvciBpIGluICRGVERPQ19QQUNLQUdFUzsgZG8KKyAgICAgIEZURE9DX1NJR05BVFVSRVM9IiRGVERPQ19TSUdOQVRVUkVTICRpLnNpZyIKKyAgICBkb25lCisKKyAgICBTSUdOQVRVUkVfTElTVD0iJEZSRUVUWVBFX1NJR05BVFVSRVMgXAorICAgICAgICAgICAgICAgICAgICAkRlQyREVNT1NfU0lHTkFUVVJFUyBcCisgICAgICAgICAgICAgICAgICAgICRGVERPQ19TSUdOQVRVUkVTIgorCisgICAgc2NwICRQQUNLQUdFX0xJU1QgJFNJR05BVFVSRV9MSVNUIFwKKyAgICAgICRTQVZBTk5BSF9VU0VSQGRsLnN2Lm5vbmdudS5vcmc6L3JlbGVhc2VzL2ZyZWV0eXBlLworCisgICAgcnN5bmMgLWF2UCAtZSBzc2ggJEZSRUVUWVBFX1BBQ0tBR0VTICRGUkVFVFlQRV9TSUdOQVRVUkVTIFwKKyAgICAgICRTT1VSQ0VGT1JHRV9VU0VSLGZyZWV0eXBlQGZycy5zZi5uZXQ6L2hvbWUvZnJzL3Byb2plY3QvZi9mci9mcmVldHlwZS9mcmVldHlwZTIvJFZFUlNJT04vCisgICAgcnN5bmMgLWF2UCAtZSBzc2ggJEZUMkRFTU9TX1BBQ0tBR0VTICRGVDJERU1PU19TSUdOQVRVUkVTIFwKKyAgICAgICRTT1VSQ0VGT1JHRV9VU0VSLGZyZWV0eXBlQGZycy5zZi5uZXQ6L2hvbWUvZnJzL3Byb2plY3QvZi9mci9mcmVldHlwZS9mcmVldHlwZS1kZW1vcy8kVkVSU0lPTi8KKyAgICByc3luYyAtYXZQIC1lIHNzaCAkRlRET0NfUEFDS0FHRVMgJEZURE9DX1NJR05BVFVSRVMgXAorICAgICAgJFNPVVJDRUZPUkdFX1VTRVIsZnJlZXR5cGVAZnJzLnNmLm5ldDovaG9tZS9mcnMvcHJvamVjdC9mL2ZyL2ZyZWV0eXBlL2ZyZWV0eXBlLWRvY3MvJFZFUlNJT04vCisKKyAgICAjIEVPRgorCisuIFByZXBhcmUgYSAgUkVBRE1FIGZvciBTb3VyY2VGb3JnZSAgYW5kIHVwbG9hZCBpdCAgd2l0aCB0aGUgZm9sbG93aW5nCisgIHNjcmlwdCAod2l0aCB1cGRhdGVkIGAkVkVSU0lPTicgYW5kICRTT1VSQ0VGT1JHRV9VU0VSIHZhcmlhYmxlcykuCisKKyAgICAjIS9iaW4vc2gKKworICAgIFZFUlNJT049Mi41LjEKKyAgICBTT1VSQ0VGT1JHRV9VU0VSPXdsZW1iCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIHJzeW5jIC1hdlAgLWUgc3NoIFJFQURNRSBcCisgICAgICAkU09VUkNFRk9SR0VfVVNFUixmcmVldHlwZUBmcnMuc2YubmV0Oi9ob21lL2Zycy9wcm9qZWN0L2YvZnIvZnJlZXR5cGUvZnJlZXR5cGUyLyRWRVJTSU9OLworCisgICAgIyBFT0YKKworLiBPbiAgIFNvdXJjZUZvcmdlLCAgIHRhZyAgIHRoZSAgICBqdXN0ICAgdXBsb2FkZWQgICBgZnRYWFguemlwJyAgIGFuZAorICBgZnJlZXR5cGUtWFhYLnRhci5iejInICBmaWxlcyBhcyB0aGUgIGRlZmF1bHQgZmlsZXMgdG8gIGRvd25sb2FkIGZvcgorICBgV2luZG93cycgYW5kIGBPdGhlcnMnLCByZXNwZWN0aXZlbHkuCisKKy4gQ29weSB0aGUgcmVmZXJlbmNlIGZpbGVzIChnZW5lcmF0ZWQgYnkgYG1ha2UgZGlzdCcpIHRvCisKKyAgICA8ZnJlZXR5cGUtd2ViIGdpdCByZXBvc2l0b3J5Pi9mcmVldHlwZTIvZG9jcy9yZWZlcmVuY2UKKworLiBVcGRhdGUgdGhlIGBmcmVldHlwZS13ZWInIHJlcG9zaXRvcnkuICBgZ2l0IHB1c2gnIHRoZW4gYXV0b21hdGljYWxseQorICB0cmlnZ2VycyBhbiB1cGRhdGUgIG9mIHRoZSBwdWJsaWMgd2ViIHBhZ2VzICB3aXRoaW4gdGVuIG1pbnV0ZXMsIGR1ZQorICB0byBhIGNyb24gc2NyaXB0IChvbiB3bEBmcmVlZGVza3RvcC5vcmcpIHRoYXQgcnN5bmNzIHdpdGgKKworICAgIGZyZWVkZXNrdG9wLm9yZzovL3Nydi9mcmVldHlwZS5mcmVlZGVza3RvcC5vcmcvd3d3CisKKy4gQW5ub3VuY2UgbmV3IHJlbGVhc2Ugb24gZnJlZXR5cGUtYW5ub3VuY2VAbm9uZ251Lm9yZyBhbmQgdG8gcmVsZXZhbnQKKyAgbmV3c2dyb3Vwcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKK21vZGlmaWVkLCAgYW5kIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIHRlcm1zIG9mICB0aGUgIEZyZWVUeXBlIHByb2plY3QKK2xpY2Vuc2UsICBMSUNFTlNFLlRYVC4gIEJ5ICBjb250aW51aW5nIHRvICB1c2UsIG1vZGlmeSwgIG9yIGRpc3RyaWJ1dGUKK3RoaXMgZmlsZSB5b3UgIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCAgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQKK2FuZCBhY2NlcHQgaXQgZnVsbHkuCisKKworLS0tIGVuZCBvZiByZWxlYXNlIC0tLQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRjb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZkYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTAsMCArMSw0NjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBTlNJLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBhcmUgdXNlZCAqLworICAvKiBieSB0aGUgcmVzdCBvZiB0aGUgZW5naW5lLiAgTW9zdCBvZiB0aGUgbWFjcm9zIGhlcmUgYXJlIGF1dG9tYXRpY2FsbHkgKi8KKyAgLyogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsIGFuZCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZSBpdCB0byAgICovCisgIC8qIHBvcnQgRnJlZVR5cGUsIGV4Y2VwdCB0byBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggYSBub24tQU5TSSAgICAgICAgICAqLworICAvKiBjb21waWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGUgaG93ZXZlciB0aGF0IGlmIHNvbWUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkLCB3ZSAgICAgICAqLworICAvKiBhZHZpc2UgeW91IHRvIHBsYWNlIGEgbW9kaWZpZWQgY29weSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBidWlsZCBkaXJlY3RvcnkgaXMgdXN1YWxseSBgYnVpbGRzLzxzeXN0ZW0+JywgYW5kIGNvbnRhaW5zICAgICAgICAqLworICAvKiBzeXN0ZW0tc3BlY2lmaWMgZmlsZXMgdGhhdCBhcmUgYWx3YXlzIGluY2x1ZGVkIGZpcnN0IHdoZW4gYnVpbGRpbmcgICAgKi8KKyAgLyogdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIEFOU0kgdmVyc2lvbiBzaG91bGQgc3RheSBpbiBgaW5jbHVkZS9jb25maWcvJy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRDT05GSUdfSF9fCisjZGVmaW5lIF9fRlRDT05GSUdfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX09QVElPTlNfSAorI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIFBMQVRGT1JNLVNQRUNJRklDIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZXNlIG1hY3JvcyBjYW4gYmUgdG9nZ2xlZCB0byBzdWl0IGEgc3BlY2lmaWMgc3lzdGVtLiAgVGhlIGN1cnJlbnQgICAqLworICAvKiBvbmVzIGFyZSBkZWZhdWx0cyB1c2VkIHRvIGNvbXBpbGUgRnJlZVR5cGUgaW4gYW4gQU5TSSBDIGVudmlyb25tZW50ICAgKi8KKyAgLyogKDE2Yml0IGNvbXBpbGVycyBhcmUgYWxzbyBzdXBwb3J0ZWQpLiAgQ29weSB0aGlzIGZpbGUgdG8geW91ciBvd24gICAgICovCisgIC8qIGBidWlsZHMvPHN5c3RlbT4nIGRpcmVjdG9yeSwgYW5kIGVkaXQgaXQgdG8gcG9ydCB0aGUgZW5naW5lLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBUaGVyZSBhcmUgc3lzdGVtcyAobGlrZSB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgJ0M1NHgpIHdoZXJlIGEgYGNoYXInICovCisgIC8qIGhhcyAxNiBiaXRzLiAgQU5TSSBDIHNheXMgdGhhdCBzaXplb2YoY2hhcikgaXMgYWx3YXlzIDEuICBTaW5jZSBhbiAgKi8KKyAgLyogYGludCcgaGFzIDE2IGJpdHMgYWxzbyBmb3IgdGhpcyBzeXN0ZW0sIHNpemVvZihpbnQpIGdpdmVzIDEgd2hpY2ggICAqLworICAvKiBpcyBwcm9iYWJseSB1bmV4cGVjdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogYENIQVJfQklUJyAoZGVmaW5lZCBpbiBsaW1pdHMuaCkgZ2l2ZXMgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgICAgICAqLworICAvKiBgY2hhcicgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZm5kZWYgRlRfQ0hBUl9CSVQKKyNkZWZpbmUgRlRfQ0hBUl9CSVQgIENIQVJfQklUCisjZW5kaWYKKworCisgIC8qIFRoZSBzaXplIG9mIGFuIGBpbnQnIHR5cGUuICAqLworI2lmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVggPT0gMHhGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKDE2IC8gRlRfQ0hBUl9CSVQpCisjZWxpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKDMyIC8gRlRfQ0hBUl9CSVQpCisjZWxpZiBGVF9VSU5UX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VSU5UX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoNjQgLyBGVF9DSEFSX0JJVCkKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIHNpemUgb2YgYGludCcgdHlwZSEiCisjZW5kaWYKKworICAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJyB0eXBlLiAgQSBmaXZlLWJ5dGUgYGxvbmcnIChhcyB1c2VkIGUuZy4gb24gdGhlICovCisgIC8qIERNNjQyKSBpcyByZWNvZ25pemVkIGJ1dCBhdm9pZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRlVMCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoMzIgLyBGVF9DSEFSX0JJVCkKKyNlbGlmIEZUX1VMT05HX01BWCA+IDB4RkZGRkZGRkZVTCAmJiBGVF9VTE9OR19NQVggPT0gMHhGRkZGRkZGRkZGVUwKKyNkZWZpbmUgRlRfU0laRU9GX0xPTkcgICgzMiAvIEZUX0NIQVJfQklUKQorI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKDY0IC8gRlRfQ0hBUl9CSVQpCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBsb25nJyB0eXBlISIKKyNlbmRpZgorCisKKyAgLyogRlRfVU5VU0VEIGlzIGEgbWFjcm8gdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZ2l2ZW4gcGFyYW1ldGVyIGlzIG5vdCAgKi8KKyAgLyogdXNlZCAtLSB0aGlzIGlzIG9ubHkgdXNlZCB0byBnZXQgcmlkIG9mIHVucGxlYXNhbnQgY29tcGlsZXIgd2FybmluZ3MgKi8KKyNpZm5kZWYgRlRfVU5VU0VECisjZGVmaW5lIEZUX1VOVVNFRCggYXJnICkgICggKGFyZykgPSAoYXJnKSApCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBBVVRPTUFUSUMgQ09ORklHVVJBVElPTiBNQUNST1MgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVzZSBtYWNyb3MgYXJlIGNvbXB1dGVkIGZyb20gdGhlIG9uZXMgZGVmaW5lZCBhYm92ZS4gIERvbid0IHRvdWNoICAgKi8KKyAgLyogdGhlaXIgZGVmaW5pdGlvbiwgdW5sZXNzIHlvdSBrbm93IHByZWNpc2VseSB3aGF0IHlvdSBhcmUgZG9pbmcuICBObyAgICovCisgIC8qIHBvcnRlciBzaG91bGQgbmVlZCB0byBtZXNzIHdpdGggdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1hYyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIGlzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjaGFuZ2UsIHNvIGl0IGlzIGRlZmluZWQgaGVyZSBpbnN0ZWFkICAgICovCisgIC8qICAgcHJvdmlkaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKCBfX0FQUExFX18gKSB8fCAoIGRlZmluZWQoIF9fTVdFUktTX18gKSAmJiBkZWZpbmVkKCBtYWNpbnRvc2ggKSApCisgIC8qIG5vIENhcmJvbiBmcmFtZXdvcmtzIGZvciA2NGJpdCAxMC40LnggKi8KKyAgLyogQXZhaWxhYmlsaXR5TWFjcm9zLmggaXMgYXZhaWxhYmxlIHNpbmNlIE1hYyBPUyBYIDEwLjIsICAgICAgICAqLworICAvKiBzbyBndWVzcyB0aGUgc3lzdGVtIHZlcnNpb24gYnkgbWF4aW11bSBlcnJubyBiZWZvcmUgaW5jbHVzaW9uICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBFQ0FOQ0VMRUQgLyogZGVmaW5lZCBzaW5jZSAxMC4yICovCisjaW5jbHVkZSAiQXZhaWxhYmlsaXR5TWFjcm9zLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKCBfX0xQNjRfXyApICYmIFwKKyAgICAoIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfNCApCisjdW5kZWYgRlRfTUFDSU5UT1NICisjZW5kaWYKKworI2VsaWYgZGVmaW5lZCggX19TQ19fICkgfHwgZGVmaW5lZCggX19NUkNfXyApCisgIC8qIENsYXNzaWMgTWFjT1MgY29tcGlsZXJzICovCisjaW5jbHVkZSAiQ29uZGl0aW9uYWxNYWNyb3MuaCIKKyNpZiBUQVJHRVRfT1NfTUFDCisjZGVmaW5lIEZUX01BQ0lOVE9TSCAxCisjZW5kaWYKKworI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciBhIDE2Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfSW50MTY7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIEZUX1VJbnQxNjsKKworICAvKiAqLworCisKKyAgLyogdGhpcyAjaWYgMCAuLi4gI2VuZGlmIGNsYXVzZSBpcyBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlcyAqLworI2lmIDAKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBYWFggIEZUX0ludDMyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbiAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHVuc2lnbmVkIFhYWCAgRlRfVUludDMyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgNjRiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICAgKi8KKyAgLyogICAgdGhlIGNvbmZpZ3VyYXRpb24uICBPbmx5IGRlZmluZWQgaWYgdGhlcmUgaXMgcmVhbCA2NGJpdCBzdXBwb3J0OyAgICovCisgIC8qICAgIG90aGVyd2lzZSwgaXQgZ2V0cyBlbXVsYXRlZCB3aXRoIGEgc3RydWN0dXJlIChpZiBuZWNlc3NhcnkpLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzaWduZWQgWFhYICBGVF9JbnQ2NDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VJbnQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24gICovCisgIC8qICAgIHRoZSBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsgICAqLworICAvKiAgICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgWFhYICBGVF9VSW50NjQ7CisKKyAgLyogKi8KKworI2VuZGlmCisKKyNpZiBGVF9TSVpFT0ZfSU5UID09ICgzMiAvIEZUX0NIQVJfQklUKQorCisgIHR5cGVkZWYgc2lnbmVkIGludCAgICAgIEZUX0ludDMyOworICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICBGVF9VSW50MzI7CisKKyNlbGlmIEZUX1NJWkVPRl9MT05HID09ICgzMiAvIEZUX0NIQVJfQklUKQorCisgIHR5cGVkZWYgc2lnbmVkIGxvbmcgICAgIEZUX0ludDMyOworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBGVF9VSW50MzI7CisKKyNlbHNlCisjZXJyb3IgIm5vIDMyYml0IHR5cGUgZm91bmQgLS0gcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyIKKyNlbmRpZgorCisKKyAgLyogbG9vayB1cCBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisjaWYgRlRfU0laRU9GX0lOVCA+PSAoMzIgLyBGVF9DSEFSX0JJVCkKKworICB0eXBlZGVmIGludCAgICAgICAgICAgIEZUX0Zhc3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgRlRfVUZhc3Q7CisKKyNlbGlmIEZUX1NJWkVPRl9MT05HID49ICgzMiAvIEZUX0NIQVJfQklUKQorCisgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgRlRfRmFzdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICBGVF9VRmFzdDsKKworI2VuZGlmCisKKworICAvKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGEgNjQtYml0IGludCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLworICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmIEZUX1NJWkVPRl9MT05HID09ICg2NCAvIEZUX0NIQVJfQklUKQorCisgIC8qIEZUX0xPTkc2NCBtdXN0IGJlIGRlZmluZWQgaWYgYSA2NC1iaXQgdHlwZSBpcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZworI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEEgNjQtYml0IGRhdGEgdHlwZSBtYXkgY3JlYXRlIGNvbXBpbGF0aW9uIHByb2JsZW1zIGlmIHlvdSBjb21waWxlICAgICAqLworICAvKiBpbiBzdHJpY3QgQU5TSSBtb2RlLiAgVG8gYXZvaWQgdGhlbSwgd2UgZGlzYWJsZSBvdGhlciA2NC1iaXQgZGF0YSAgICAgKi8KKyAgLyogdHlwZXMgaWYgX19TVERDX18gaXMgZGVmaW5lZC4gIFlvdSBjYW4gaG93ZXZlciBpZ25vcmUgdGhpcyBydWxlICAgICAgICovCisgIC8qIGJ5IGRlZmluaW5nIHRoZSBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0IGNvbmZpZ3VyYXRpb24gbWFjcm8uICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbGlmICFkZWZpbmVkKCBfX1NURENfXyApIHx8IGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgKQorCisjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAmJiBfTVNDX1ZFUiA+PSA5MDAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCisKKyAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgX19pbnQ2NCB0eXBlICovCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIF9faW50NjQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBfX2ludDY0CisKKyNlbGlmIGRlZmluZWQoIF9fQk9STEFORENfXyApICAvKiBCb3JsYW5kIEMrKyAqLworCisgIC8qIFhYWFg6IFdlIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgdmFsdWUgb2YgX19CT1JMQU5EQ19fIGluIG9yZGVyICovCisgIC8qICAgICAgIHRvIHRlc3QgdGhlIGNvbXBpbGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogdGhpcyBjb21waWxlciBwcm92aWRlcyB0aGUgX19pbnQ2NCB0eXBlICovCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIF9faW50NjQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBfX2ludDY0CisKKyNlbGlmIGRlZmluZWQoIF9fV0FUQ09NQ19fICkgICAvKiBXYXRjb20gQysrICovCisKKyAgLyogV2F0Y29tIGRvZXNuJ3QgcHJvdmlkZSA2NC1iaXQgZGF0YSB0eXBlcyAqLworCisjZWxpZiBkZWZpbmVkKCBfX01XRVJLU19fICkgICAgLyogTWV0cm93ZXJrcyBDb2RlV2FycmlvciAqLworCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisKKyNlbGlmIGRlZmluZWQoIF9fR05VQ19fICkKKworICAvKiBHQ0MgcHJvdmlkZXMgdGhlIGBsb25nIGxvbmcnIHR5cGUgKi8KKyNkZWZpbmUgRlRfTE9ORzY0CisjZGVmaW5lIEZUX0lOVDY0ICAgbG9uZyBsb25nIGludAorI2RlZmluZSBGVF9VSU5UNjQgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKKworI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKyNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkgKi8KKworI2lmZGVmIEZUX0xPTkc2NAorICB0eXBlZGVmIEZUX0lOVDY0ICAgRlRfSW50NjQ7CisgIHR5cGVkZWYgRlRfVUlOVDY0ICBGVF9VSW50NjQ7CisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogbWlzY2VsbGFuZW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7CisjZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCisjZGVmaW5lIEZUX0RVTU1ZX1NUTU5UICBGVF9CRUdJTl9TVE1OVCBGVF9FTkRfU1RNTlQKKworCisgIC8qIHR5cGVvZiBjb25kaXRpb24gdGFrZW4gZnJvbSBnbnVsaWIncyBgaW50cHJvcHMuaCcgaGVhZGVyIGZpbGUgKi8KKyNpZiAoIF9fR05VQ19fID49IDIgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19JQk1fX1RZUEVPRl9fICkgICAgICAgICAgICB8fCBcCisgICAgICAoIF9fU1VOUFJPX0MgPj0gMHg1MTEwICYmICFfX1NURENfXyApICkKKyNkZWZpbmUgVFlQRU9GKCB0eXBlICkgIChfX3R5cGVvZl9fICh0eXBlKSkKKyNlbHNlCisjZGVmaW5lIFRZUEVPRiggdHlwZSApICAvKiBlbXB0eSAqLworI2VuZGlmCisKKworI2lmZGVmIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgc3RhdGljICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICBzdGF0aWMgIHgKKworI2Vsc2UKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBleHRlcm4gIkMiICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgZXh0ZXJuICB4CisjZGVmaW5lIEZUX0xPQ0FMX0RFRiggeCApICB4CisjZW5kaWYKKworI2VuZGlmIC8qIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QgKi8KKworI2RlZmluZSBGVF9MT0NBTF9BUlJBWSggeCApICAgICAgZXh0ZXJuIGNvbnN0ICB4CisjZGVmaW5lIEZUX0xPQ0FMX0FSUkFZX0RFRiggeCApICBjb25zdCAgeAorCisKKyNpZm5kZWYgRlRfQkFTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfQkFTRSggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9CQVNFKCB4ICkgIGV4dGVybiAgeAorI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfQkFTRSAqLworCisKKyNpZm5kZWYgRlRfQkFTRV9ERUYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0JBU0VfREVGKCB4ICkgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0JBU0VfREVGKCB4ICkgIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0JBU0VfREVGICovCisKKworI2lmbmRlZiBGVF9FWFBPUlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4CisjZW5kaWYKKworI2VuZGlmIC8qICFGVF9FWFBPUlQgKi8KKworCisjaWZuZGVmIEZUX0VYUE9SVF9ERUYKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVF9ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfRVhQT1JUX0RFRiggeCApICBleHRlcm4gIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0VYUE9SVF9ERUYgKi8KKworCisjaWZuZGVmIEZUX0VYUE9SVF9WQVIKKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfRVhQT1JUX1ZBUiggeCApICBleHRlcm4gIHgKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX0VYUE9SVF9WQVIgKi8KKworICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KKyAgLyogQysrIGNvbXBpbGVyIGFuZCB3aXRoIDE2Yml0IGNvbXBpbGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIFRoaXMgaXMgc3BlY2lhbC4gIFdpdGhpbiBDKyssIHlvdSBtdXN0IHNwZWNpZnkgYGV4dGVybiAiQyInIGZvciAqLworICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgeW91IGFsc28gICAgKi8KKyAgLyogbXVzdCBkbyB0aGF0IGZvciBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMgdG8gICovCisgIC8qIGFzc3VyZSBDIGxpbmthZ2UgLS0gaXQncyBub3QgcG9zc2libGUgdG8gaGF2ZSAobG9jYWwpIGFub255bW91cyAqLworICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGJ5IChnbG9iYWwpIGZ1bmN0aW9uIHBvaW50ZXJzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLworICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLworICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KKyAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2wnIG9yIGBfX2Zhc3RjYWxsJyBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKCB4ICkgIHN0YXRpYyAgeAorI2VuZGlmCisjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCisKKyNpZm5kZWYgRlRfQ0FMTEJBQ0tfVEFCTEUKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRSAgICAgIGV4dGVybiAiQyIKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICBleHRlcm4gIkMiCisjZWxzZQorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRSAgICAgIGV4dGVybgorI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2VuZGlmIC8qIEZUX0NBTExCQUNLX1RBQkxFICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUQ09ORklHX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0aGVhZGVyLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA2YmMxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0aGVhZGVyLmgKQEAgLTAsMCArMSw4MzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0aGVhZGVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBCdWlsZCBtYWNyb3Mgb2YgdGhlIEZyZWVUeXBlIDIgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVF9IRUFERVJfSF9fCisjZGVmaW5lIF9fRlRfSEVBREVSX0hfXworCisKKyAgLypAKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQkVHSU5fSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBtYWNybyBpcyB1c2VkIGluIGFzc29jaWF0aW9uIHdpdGggQEZUX0VORF9IRUFERVIgaW4gaGVhZGVyICAgICovCisgIC8qICAgIGZpbGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWNsYXJhdGlvbnMgd2l0aGluIGFyZSBwcm9wZXJseSAgICAgICAgICAqLworICAvKiAgICBlbmNhcHN1bGF0ZWQgaW4gYW4gYGV4dGVybiAiQyIgeyAuLiB9JyBibG9jayB3aGVuIGluY2x1ZGVkIGZyb20gYSAgKi8KKyAgLyogICAgQysrIGNvbXBpbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0JFR0lOX0hFQURFUiAgZXh0ZXJuICJDIiB7CisjZWxzZQorI2RlZmluZSBGVF9CRUdJTl9IRUFERVIgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisKKyAgLypAKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5EX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBtYWNybyBpcyB1c2VkIGluIGFzc29jaWF0aW9uIHdpdGggQEZUX0JFR0lOX0hFQURFUiBpbiBoZWFkZXIgICovCisgIC8qICAgIGZpbGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWNsYXJhdGlvbnMgd2l0aGluIGFyZSBwcm9wZXJseSAgICAgICAgICAqLworICAvKiAgICBlbmNhcHN1bGF0ZWQgaW4gYW4gYGV4dGVybiAiQyIgeyAuLiB9JyBibG9jayB3aGVuIGluY2x1ZGVkIGZyb20gYSAgKi8KKyAgLyogICAgQysrIGNvbXBpbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0VORF9IRUFERVIgIH0KKyNlbHNlCisjZGVmaW5lIEZUX0VORF9IRUFERVIgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBbGlhc2VzIGZvciB0aGUgRnJlZVR5cGUgMiBwdWJsaWMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlYWRlcl9maWxlX21hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhlYWRlciBGaWxlIE1hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE1hY3JvIGRlZmluaXRpb25zIHVzZWQgdG8gI2luY2x1ZGUgc3BlY2lmaWMgaGVhZGVyIGZpbGVzLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIHRvIHRoZSBuYW1lIG9mIHNwZWNpZmljICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZX4yIGhlYWRlciBmaWxlcy4gIFRoZXkgY2FuIGJlIHVzZWQgZGlyZWN0bHkgaW4gI2luY2x1ZGUgICAgKi8KKyAgLyogICAgc3RhdGVtZW50cyBhcyBpbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICNpbmNsdWRlIEZUX0dMWVBIX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHdoeSB3ZSBhcmUgbm93IHVzaW5nIG1hY3JvcyB0byBuYW1lICAgICAgKi8KKyAgLyogICAgcHVibGljIGhlYWRlciBmaWxlcy4gIFRoZSBmaXJzdCBvbmUgaXMgdGhhdCBzdWNoIG1hY3JvcyBhcmUgbm90ICAgICovCisgIC8qICAgIGxpbWl0ZWQgdG8gdGhlIGluZmFtb3VzIDguM35uYW1pbmcgcnVsZSByZXF1aXJlZCBieSBET1MgKGFuZCAgICAgICAqLworICAvKiAgICBgRlRfTVVMVElQTEVfTUFTVEVSU19IJyBpcyBhIGxvdCBtb3JlIG1lYW5pbmdmdWwgdGhhbiBgZnRtbS5oJykuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBzZWNvbmQgcmVhc29uIGlzIHRoYXQgaXQgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmlsaXR5IGluIHRoZSAgICAqLworICAvKiAgICB3YXkgRnJlZVR5cGV+MiBpcyBpbnN0YWxsZWQgb24gYSBnaXZlbiBzeXN0ZW0uICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogY29uZmlndXJhdGlvbiBmaWxlcyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9DT05GSUdfQ09ORklHX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZworICAgKiAgIEZyZWVUeXBlfjIgY29uZmlndXJhdGlvbiBkYXRhLgorICAgKgorICAgKi8KKyNpZm5kZWYgRlRfQ09ORklHX0NPTkZJR19ICisjZGVmaW5lIEZUX0NPTkZJR19DT05GSUdfSCAgPGNvbmZpZy9mdGNvbmZpZy5oPgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nCisgICAqICAgRnJlZVR5cGV+MiBpbnRlcmZhY2UgdG8gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbnMuCisgICAqCisgICAqLworI2lmbmRlZiBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggIDxjb25maWcvZnRzdGRsaWIuaD4KKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0NPTkZJR19PUFRJT05TX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZworICAgKiAgIEZyZWVUeXBlfjIgcHJvamVjdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgICAqCisgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OU19ICisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggIDxjb25maWcvZnRvcHRpb24uaD4KKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0NPTkZJR19NT0RVTEVTX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBsaXN0IG9mIEZyZWVUeXBlfjIgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCB0byBuZXcgbGlicmFyeQorICAgKiAgIGluc3RhbmNlcyBpbiBARlRfSW5pdF9GcmVlVHlwZS4KKyAgICoKKyAgICovCisjaWZuZGVmIEZUX0NPTkZJR19NT0RVTEVTX0gKKyNkZWZpbmUgRlRfQ09ORklHX01PRFVMRVNfSCAgPGNvbmZpZy9mdG1vZHVsZS5oPgorI2VuZGlmCisKKyAgLyogKi8KKworICAvKiBwdWJsaWMgaGVhZGVycyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9GUkVFVFlQRV9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgYmFzZSBGcmVlVHlwZX4yIEFQSS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0ZSRUVUWVBFX0ggIDxmcmVldHlwZS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0VSUk9SU19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgbGlzdCBvZiBGcmVlVHlwZX4yIGVycm9yIGNvZGVzIChhbmQgbWVzc2FnZXMpLgorICAgKgorICAgKiAgIEl0IGlzIGluY2x1ZGVkIGJ5IEBGVF9GUkVFVFlQRV9ILgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfRVJST1JTX0ggIDxmdGVycm9ycy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX01PRFVMRV9FUlJPUlNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIGxpc3Qgb2YgRnJlZVR5cGV+MiBtb2R1bGUgZXJyb3Igb2Zmc2V0cyAoYW5kIG1lc3NhZ2VzKS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX01PRFVMRV9FUlJPUlNfSCAgPGZ0bW9kZXJyLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfU1lTVEVNX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIGludGVyZmFjZSB0byBsb3ctbGV2ZWwgb3BlcmF0aW9ucyAoaS5lLiwgbWVtb3J5IG1hbmFnZW1lbnQKKyAgICogICBhbmQgc3RyZWFtIGkvbykuCisgICAqCisgICAqICAgSXQgaXMgaW5jbHVkZWQgYnkgQEZUX0ZSRUVUWVBFX0guCisgICAqCisgICAqLworI2RlZmluZSBGVF9TWVNURU1fSCAgPGZ0c3lzdGVtLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSU1BR0VfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHR5cGUKKyAgICogICBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGdseXBoIGltYWdlcyAoaS5lLiwgYml0bWFwcywgb3V0bGluZXMsCisgICAqICAgc2Nhbi1jb252ZXJ0ZXIgcGFyYW1ldGVycykuCisgICAqCisgICAqICAgSXQgaXMgaW5jbHVkZWQgYnkgQEZUX0ZSRUVUWVBFX0guCisgICAqCisgICAqLworI2RlZmluZSBGVF9JTUFHRV9IICA8ZnRpbWFnZS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1RZUEVTX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBiYXNpYyBkYXRhIHR5cGVzIGRlZmluZWQgYnkgRnJlZVR5cGV+Mi4KKyAgICoKKyAgICogICBJdCBpcyBpbmNsdWRlZCBieSBARlRfRlJFRVRZUEVfSC4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1RZUEVTX0ggIDxmdHR5cGVzLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfTElTVF9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgbGlzdCBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgorICAgKgorICAgKiAgIChNb3N0IGFwcGxpY2F0aW9ucyB3aWxsIG5ldmVyIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUuKQorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTElTVF9IICA8ZnRsaXN0Lmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfT1VUTElORV9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgc2NhbGFibGUgb3V0bGluZSBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfT1VUTElORV9IICA8ZnRvdXRsbi5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1NJWkVTX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBBUEkgd2hpY2ggbWFuYWdlcyBtdWx0aXBsZSBARlRfU2l6ZSBvYmplY3RzIHBlciBmYWNlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfU0laRVNfSCAgPGZ0c2l6ZXMuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9NT0RVTEVfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIG1vZHVsZSBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTU9EVUxFX0ggIDxmdG1vZGFwaS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1JFTkRFUl9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgcmVuZGVyZXIgbW9kdWxlIG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlfjIuCisgICAqCisgICAqLworI2RlZmluZSBGVF9SRU5ERVJfSCAgPGZ0cmVuZGVyLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQVVUT0hJTlRFUl9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcKKyAgICogICBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgcmVsYXRlZCB0byB0aGUgYXV0by1oaW50aW5nIG1vZHVsZS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FVVE9ISU5URVJfSCAgPGZ0YXV0b2guaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9DRkZfRFJJVkVSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZworICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBDRkYgZHJpdmVyIG1vZHVsZS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0NGRl9EUklWRVJfSCAgPGZ0Y2ZmZHJ2Lmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfVFJVRVRZUEVfRFJJVkVSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZworICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBUcnVlVHlwZSBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfVFJVRVRZUEVfRFJJVkVSX0ggIDxmdHR0ZHJ2Lmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfVFlQRTFfVEFCTEVTX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICB0eXBlcyBhbmQgQVBJIHNwZWNpZmljIHRvIHRoZSBUeXBlfjEgZm9ybWF0LgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfVFlQRTFfVEFCTEVTX0ggIDx0MXRhYmxlcy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1RSVUVUWVBFX0lEU19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgZW51bWVyYXRpb24gdmFsdWVzIHdoaWNoIGlkZW50aWZ5IG5hbWUgc3RyaW5ncywgbGFuZ3VhZ2VzLCBlbmNvZGluZ3MsCisgICAqICAgZXRjLiAgVGhpcyBmaWxlIHJlYWxseSBjb250YWlucyBhIF9sYXJnZV8gc2V0IG9mIGNvbnN0YW50IG1hY3JvCisgICAqICAgZGVmaW5pdGlvbnMsIHRha2VuIGZyb20gdGhlIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBzcGVjaWZpY2F0aW9ucy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1RSVUVUWVBFX0lEU19IICA8dHRuYW1laWQuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9UUlVFVFlQRV9UQUJMRVNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIHR5cGVzIGFuZCBBUEkgc3BlY2lmaWMgdG8gdGhlIFRydWVUeXBlIChhcyB3ZWxsIGFzIE9wZW5UeXBlKSBmb3JtYXQuCisgICAqCisgICAqLworI2RlZmluZSBGVF9UUlVFVFlQRV9UQUJMRVNfSCAgPHR0dGFibGVzLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfVFJVRVRZUEVfVEFHU19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgZGVmaW5pdGlvbnMgb2YgVHJ1ZVR5cGUgZm91ci1ieXRlIGB0YWdzJyB3aGljaCBpZGVudGlmeSBibG9ja3MgaW4KKyAgICogICBTRk5ULWJhc2VkIGZvbnQgZm9ybWF0cyAoaS5lLiwgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlKS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1RSVUVUWVBFX1RBR1NfSCAgPHR0dGFncy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0JERl9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIGFjY2Vzc2VzIEJERi1zcGVjaWZpYyBzdHJpbmdzIGZyb20gYQorICAgKiAgIGZhY2UuCisgICAqCisgICAqLworI2RlZmluZSBGVF9CREZfSCAgPGZ0YmRmLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQ0lEX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggYWNjZXNzIENJRCBmb250IGluZm9ybWF0aW9uIGZyb20gYQorICAgKiAgIGZhY2UuCisgICAqCisgICAqLworI2RlZmluZSBGVF9DSURfSCAgPGZ0Y2lkLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfR1pJUF9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIGd6aXAtY29tcHJlc3NlZCBmaWxlcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0daSVBfSCAgPGZ0Z3ppcC5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0xaV19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIExaVy1jb21wcmVzc2VkIGZpbGVzLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTFpXX0ggIDxmdGx6dy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0JaSVAyX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBkZWZpbml0aW9ucyBvZiBhbiBBUEkgd2hpY2ggc3VwcG9ydHMgYnppcDItY29tcHJlc3NlZCBmaWxlcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0JaSVAyX0ggIDxmdGJ6aXAyLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfV0lORk9OVFNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIGRlZmluaXRpb25zIG9mIGFuIEFQSSB3aGljaCBzdXBwb3J0cyBXaW5kb3dzIEZOVCBmaWxlcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1dJTkZPTlRTX0ggICA8ZnR3aW5mbnQuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9HTFlQSF9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgQVBJIG9mIHRoZSBvcHRpb25hbCBnbHlwaCBtYW5hZ2VtZW50IGNvbXBvbmVudC4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0dMWVBIX0ggIDxmdGdseXBoLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQklUTUFQX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBBUEkgb2YgdGhlIG9wdGlvbmFsIGJpdG1hcCBjb252ZXJzaW9uIGNvbXBvbmVudC4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0JJVE1BUF9IICA8ZnRiaXRtYXAuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9CQk9YX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBBUEkgb2YgdGhlIG9wdGlvbmFsIGV4YWN0IGJvdW5kaW5nIGJveCBjb21wdXRhdGlvbiByb3V0aW5lcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0JCT1hfSCAgPGZ0YmJveC5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0NBQ0hFX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBBUEkgb2YgdGhlIG9wdGlvbmFsIEZyZWVUeXBlfjIgY2FjaGUgc3ViLXN5c3RlbS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0NBQ0hFX0ggIDxmdGNhY2hlLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQ0FDSEVfSU1BR0VfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIGBnbHlwaCBpbWFnZScgQVBJIG9mIHRoZSBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0uCisgICAqCisgICAqICAgSXQgaXMgdXNlZCB0byBkZWZpbmUgYSBjYWNoZSBmb3IgQEZUX0dseXBoIGVsZW1lbnRzLiAgWW91IGNhbiBhbHNvCisgICAqICAgdXNlIHRoZSBBUEkgZGVmaW5lZCBpbiBARlRfQ0FDSEVfU01BTExfQklUTUFQU19IIGlmIHlvdSBvbmx5IG5lZWQgdG8KKyAgICogICBzdG9yZSBzbWFsbCBnbHlwaCBiaXRtYXBzLCBhcyBpdCB3aWxsIHVzZSBsZXNzIG1lbW9yeS4KKyAgICoKKyAgICogICBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuICBTaW1wbHkgaW5jbHVkZSBARlRfQ0FDSEVfSCB0byBoYXZlIGFsbAorICAgKiAgIGdseXBoIGltYWdlLXJlbGF0ZWQgY2FjaGUgZGVjbGFyYXRpb25zLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfQ0FDSEVfSU1BR0VfSCAgRlRfQ0FDSEVfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIGBzbWFsbCBiaXRtYXBzJyBBUEkgb2YgdGhlIEZyZWVUeXBlfjIgY2FjaGUgc3ViLXN5c3RlbS4KKyAgICoKKyAgICogICBJdCBpcyB1c2VkIHRvIGRlZmluZSBhIGNhY2hlIGZvciBzbWFsbCBnbHlwaCBiaXRtYXBzIGluIGEgcmVsYXRpdmVseQorICAgKiAgIG1lbW9yeS1lZmZpY2llbnQgd2F5LiAgWW91IGNhbiBhbHNvIHVzZSB0aGUgQVBJIGRlZmluZWQgaW4KKyAgICogICBARlRfQ0FDSEVfSU1BR0VfSCBpZiB5b3Ugd2FudCB0byBjYWNoZSBhcmJpdHJhcnkgZ2x5cGggaW1hZ2VzLAorICAgKiAgIGluY2x1ZGluZyBzY2FsYWJsZSBvdXRsaW5lcy4KKyAgICoKKyAgICogICBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuICBTaW1wbHkgaW5jbHVkZSBARlRfQ0FDSEVfSCB0byBoYXZlIGFsbAorICAgKiAgIHNtYWxsIGJpdG1hcHMtcmVsYXRlZCBjYWNoZSBkZWNsYXJhdGlvbnMuCisgICAqCisgICAqLworI2RlZmluZSBGVF9DQUNIRV9TTUFMTF9CSVRNQVBTX0ggIEZUX0NBQ0hFX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9DQUNIRV9DSEFSTUFQX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBgY2hhcm1hcCcgQVBJIG9mIHRoZSBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0uCisgICAqCisgICAqICAgVGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLiAgU2ltcGx5IGluY2x1ZGUgQEZUX0NBQ0hFX0ggdG8gaGF2ZSBhbGwKKyAgICogICBjaGFybWFwLWJhc2VkIGNhY2hlIGRlY2xhcmF0aW9ucy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0NBQ0hFX0NIQVJNQVBfSCAgRlRfQ0FDSEVfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX01BQ19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgTWFjaW50b3NoLXNwZWNpZmljIEZyZWVUeXBlfjIgQVBJLiAgVGhlIGxhdHRlciBpcyB1c2VkIHRvIGFjY2VzcworICAgKiAgIGZvbnRzIGVtYmVkZGVkIGluIHJlc291cmNlIGZvcmtzLgorICAgKgorICAgKiAgIFRoaXMgaGVhZGVyIGZpbGUgbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMKKyAgICogICBjb21waWxlZCBvbiB0aGUgTWFjIChub3RlIHRoYXQgdGhlIGJhc2UgQVBJIHN0aWxsIHdvcmtzIHRob3VnaCkuCisgICAqCisgICAqLworI2RlZmluZSBGVF9NQUNfSCAgPGZ0bWFjLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfTVVMVElQTEVfTUFTVEVSU19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgb3B0aW9uYWwgbXVsdGlwbGUtbWFzdGVycyBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTVVMVElQTEVfTUFTVEVSU19IICA8ZnRtbS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1NGTlRfTkFNRVNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIG9wdGlvbmFsIEZyZWVUeXBlfjIgQVBJIHdoaWNoIGFjY2Vzc2VzIGVtYmVkZGVkIGBuYW1lJyBzdHJpbmdzIGluCisgICAqICAgU0ZOVC1iYXNlZCBmb250IGZvcm1hdHMgKGkuZS4sIFRydWVUeXBlIGFuZCBPcGVuVHlwZSkuCisgICAqCisgICAqLworI2RlZmluZSBGVF9TRk5UX05BTUVTX0ggIDxmdHNuYW1lcy5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX09QRU5UWVBFX1ZBTElEQVRFX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBvcHRpb25hbCBGcmVlVHlwZX4yIEFQSSB3aGljaCB2YWxpZGF0ZXMgT3BlblR5cGUgdGFibGVzIChCQVNFLCBHREVGLAorICAgKiAgIEdQT1MsIEdTVUIsIEpTVEYpLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGZ0b3R2YWwuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9HWF9WQUxJREFURV9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgb3B0aW9uYWwgRnJlZVR5cGV+MiBBUEkgd2hpY2ggdmFsaWRhdGVzIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoZmVhdCwKKyAgICogICBtb3J0LCBtb3J4LCBic2xuLCBqdXN0LCBrZXJuLCBvcGJkLCB0cmFrLCBwcm9wKS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0dYX1ZBTElEQVRFX0ggIDxmdGd4dmFsLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfUEZSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBhY2Nlc3NlcyBQRlItc3BlY2lmaWMgZGF0YS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1BGUl9IICA8ZnRwZnIuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9TVFJPS0VSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gc3Ryb2tlIG91dGxpbmUgcGF0aHMuCisgICAqLworI2RlZmluZSBGVF9TVFJPS0VSX0ggIDxmdHN0cm9rZS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1NZTlRIRVNJU19ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgYXJ0aWZpY2lhbCBvYmxpcXVpbmcgYW5kIGVtYm9sZGVuaW5nLgorICAgKi8KKyNkZWZpbmUgRlRfU1lOVEhFU0lTX0ggIDxmdHN5bnRoLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfRk9OVF9GT1JNQVRTX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwcm92aWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gZm9udCBmb3JtYXRzLgorICAgKi8KKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRTX0ggIDxmdGZudGZtdC5oPgorCisgIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgRlRfWEZSRUU4Nl9IICBGVF9GT05UX0ZPUk1BVFNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1RSSUdPTk9NRVRSWV9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgdHJpZ29ub21ldHJpYyBjb21wdXRhdGlvbnMgKGUuZy4sCisgICAqICAgY29zaW5lcyBhbmQgYXJjIHRhbmdlbnRzKS4KKyAgICovCisjZGVmaW5lIEZUX1RSSUdPTk9NRVRSWV9IICA8ZnR0cmlnb24uaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9MQ0RfRklMVEVSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKyAgICovCisjZGVmaW5lIEZUX0xDRF9GSUxURVJfSCAgPGZ0bGNkZmlsLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKyAgICovCisjZGVmaW5lIEZUX1VOUEFURU5URURfSElOVElOR19IICA8dHR1bnBhdC5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lOQ1JFTUVOVEFMX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKKyAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKyAgICovCisjZGVmaW5lIEZUX0lOQ1JFTUVOVEFMX0ggIDxmdGluY3JlbS5oPgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0dBU1BfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgZW50cmllcyBmcm9tIHRoZSBUcnVlVHlwZSBHQVNQIHRhYmxlLgorICAgKi8KKyNkZWZpbmUgRlRfR0FTUF9IICA8ZnRnYXNwLmg+CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfQURWQU5DRVNfSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgaW5kaXZpZHVhbCBhbmQgcmFuZ2VkIGdseXBoIGFkdmFuY2VzLgorICAgKi8KKyNkZWZpbmUgRlRfQURWQU5DRVNfSCAgPGZ0YWR2YW5jLmg+CisKKworICAvKiAqLworCisjZGVmaW5lIEZUX0VSUk9SX0RFRklOSVRJT05TX0ggIDxmdGVycmRlZi5oPgorCisKKyAgLyogVGhlIGludGVybmFscyBvZiB0aGUgY2FjaGUgc3ViLXN5c3RlbSBhcmUgbm8gbG9uZ2VyIGV4cG9zZWQuICBXZSAqLworICAvKiBkZWZhdWx0IHRvIEZUX0NBQ0hFX0ggYXQgdGhlIG1vbWVudCBqdXN0IGluIGNhc2UsIGJ1dCB3ZSBrbm93IG9mICovCisgIC8qIG5vIHJvZ3VlIGNsaWVudCB0aGF0IHVzZXMgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DQUNIRV9NQU5BR0VSX0ggICAgICAgICAgIDxmdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX01SVV9IICAgICAgPGZ0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfTUFOQUdFUl9IICA8ZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9DQUNIRV9IICAgIDxmdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0dMWVBIX0ggICAgPGZ0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfSU1BR0VfSCAgICA8ZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9TQklUU19IICAgIDxmdGNhY2hlLmg+CisKKworI2RlZmluZSBGVF9JTkNSRU1FTlRBTF9IICAgICAgICAgIDxmdGluY3JlbS5oPgorCisjZGVmaW5lIEZUX1RSVUVUWVBFX1VOUEFURU5URURfSCAgPHR0dW5wYXQuaD4KKworCisgIC8qCisgICAqIEluY2x1ZGUgaW50ZXJuYWwgaGVhZGVycyBkZWZpbml0aW9ucyBmcm9tIDxpbnRlcm5hbC8uLi4+CisgICAqIG9ubHkgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeS4KKyAgICovCisjaWZkZWYgRlQyX0JVSUxEX0xJQlJBUlkKKyNkZWZpbmUgIEZUX0lOVEVSTkFMX0lOVEVSTkFMX0ggIDxpbnRlcm5hbC9pbnRlcm5hbC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfSU5URVJOQUxfSAorI2VuZGlmIC8qIEZUMl9CVUlMRF9MSUJSQVJZICovCisKKworI2VuZGlmIC8qIF9fRlQyX0JVSUxEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRtb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQyNzFhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgcmVnaXN0ZXJzIHRoZSBGcmVlVHlwZSBtb2R1bGVzIGNvbXBpbGVkIGludG8gdGhlIGxpYnJhcnkuCisgKgorICogIElmIHlvdSB1c2UgR05VIG1ha2UsIHRoaXMgZmlsZSBJUyBOT1QgVVNFRCEgIEluc3RlYWQsIGl0IGlzIGNyZWF0ZWQgaW4KKyAqICB0aGUgb2JqZWN0cyBkaXJlY3RvcnkgKG5vcm1hbGx5IGA8dG9wZGlyPi9vYmpzLycpIGJhc2VkIG9uIGluZm9ybWF0aW9uCisgKiAgZnJvbSBgPHRvcGRpcj4vbW9kdWxlcy5jZmcnLgorICoKKyAqICBQbGVhc2UgcmVhZCBgZG9jcy9JTlNUQUxMLkFOWScgYW5kIGBkb2NzL0NVU1RPTUlaRScgaG93IHRvIGNvbXBpbGUKKyAqICBGcmVlVHlwZSB3aXRob3V0IEdOVSBtYWtlLgorICoKKyAqLworCitGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIGF1dG9maXRfbW9kdWxlX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdHRfZHJpdmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdDFfZHJpdmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgY2ZmX2RyaXZlcl9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHQxY2lkX2RyaXZlcl9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBmcl9kcml2ZXJfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0NDJfZHJpdmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgd2luZm50X2RyaXZlcl9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBjZl9kcml2ZXJfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc2F1eF9tb2R1bGVfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc25hbWVzX21vZHVsZV9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHBzaGludGVyX21vZHVsZV9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcyApCitGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHNmbnRfbW9kdWxlX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzICkKK0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgYmRmX2RyaXZlcl9jbGFzcyApCisKKy8qIEVPRiAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM2YzcyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgKQEAgLTAsMCArMSw4ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0b3B0aW9uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBVc2VyLXNlbGVjdGFibGUgY29uZmlndXJhdGlvbiBtYWNyb3MgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUT1BUSU9OX0hfXworI2RlZmluZSBfX0ZUT1BUSU9OX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIFVTRVItU0VMRUNUQUJMRSBDT05GSUdVUkFUSU9OIE1BQ1JPUyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtYWNybyBkZWZpbml0aW9ucyBmb3IgICAgKi8KKyAgLyogYSBzdGFuZGFyZCBidWlsZCBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvICAgICovCisgIC8qIHVzZSB0aGlzIGZpbGUgdG8gYnVpbGQgcHJvamVjdC1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeTogICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIC0gWW91IGNhbiBtb2RpZnkgdGhpcyBmaWxlIGJ5IGhhbmQsIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpbiAgICovCisgIC8qICAgIGNhc2VzIHdoZXJlIHlvdSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhlICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IGZyb20gYSBzaW5nbGUgc291cmNlIGRpcmVjdG9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAtIFlvdSBjYW4gcHV0IGEgY29weSBvZiB0aGlzIGZpbGUgaW4geW91ciBidWlsZCBkaXJlY3RvcnksIG1vcmUgICAgICAqLworICAvKiAgICBwcmVjaXNlbHkgaW4gYCRCVUlMRC9jb25maWcvZnRvcHRpb24uaCcsIHdoZXJlIGAkQlVJTEQnIGlzIHRoZSAgICAgKi8KKyAgLyogICAgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlzIGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSBpbmNsdWRlICovCisgIC8qICAgIHBhdGggZHVyaW5nIGNvbXBpbGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGRlZmF1bHQgRnJlZVR5cGUgTWFrZWZpbGVzIGFuZCBKYW1maWxlcyB1c2UgdGhlIGJ1aWxkICAgICAgICAgICovCisgIC8qICAgIGRpcmVjdG9yeSBgYnVpbGRzLzxzeXN0ZW0+JyBieSBkZWZhdWx0LCBidXQgeW91IGNhbiBlYXNpbHkgY2hhbmdlICAqLworICAvKiAgICB0aGF0IGZvciB5b3VyIG93biBwcm9qZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAtIENvcHkgdGhlIGZpbGUgPGZ0MmJ1aWxkLmg+IHRvIGAkQlVJTEQvZnQyYnVpbGQuaCcgYW5kIG1vZGlmeSBpdCAgICAqLworICAvKiAgICBzbGlnaHRseSB0byBwcmUtZGVmaW5lIHRoZSBtYWNybyBGVF9DT05GSUdfT1BUSU9OU19IIHVzZWQgdG8gICAgICAgKi8KKyAgLyogICAgbG9jYXRlIHRoaXMgZmlsZSBkdXJpbmcgdGhlIGJ1aWxkLiAgRm9yIGV4YW1wbGUsICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPG15ZnRvcHRpb25zLmg+ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAjaW5jbHVkZSA8Y29uZmlnL2Z0aGVhZGVyLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB3aWxsIHVzZSBgJEJVSUxEL215ZnRvcHRpb25zLmgnIGluc3RlYWQgb2YgdGhpcyBmaWxlIGZvciBtYWNybyAgICAgKi8KKyAgLyogICAgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIGFsc28gdGhhdCB5b3UgY2FuIHNpbWlsYXJseSBwcmUtZGVmaW5lIHRoZSBtYWNybyAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ09ORklHX01PRFVMRVNfSCB1c2VkIHRvIGxvY2F0ZSB0aGUgZmlsZSBsaXN0aW5nIG9mIHRoZSBtb2R1bGVzICovCisgIC8qICAgIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIHRvIHRoZSBsaWJyYXJ5IGF0IGNvbXBpbGUgdGltZS4gIEJ5ICAgICAqLworICAvKiAgICBkZWZhdWx0LCB0aGlzIGZpbGUgaXMgPGNvbmZpZy9mdG1vZHVsZS5oPi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIGhpZ2hseSByZWNvbW1lbmQgdXNpbmcgdGhlIHRoaXJkIG1ldGhvZCB3aGVuZXZlciBwb3NzaWJsZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiBHIEUgTiBFIFIgQSBMICAgRiBSIEUgRSBUIFkgUCBFICAgMiAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3YW50IHRvIGFjdGl2YXRlIHN1Yi1waXhlbCByZW5kZXJpbmcgICovCisgIC8qIChhLmsuYS4gTENEIHJlbmRlcmluZywgb3IgQ2xlYXJUeXBlKSBpbiB0aGlzIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBjb3ZlcmVkIGJ5IHNldmVyYWwgTWljcm9zb2Z0IHBhdGVudHMgICAgICAgICovCisgIC8qIGFuZCBzaG91bGQgbm90IGJlIGFjdGl2YXRlZCBpbiBhbnkgZGVmYXVsdCBidWlsZCBvZiB0aGUgbGlicmFyeS4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBtYWNybyBoYXMgbm8gaW1wYWN0IG9uIHRoZSBGcmVlVHlwZSBBUEksIG9ubHkgb24gaXRzICAgICAgICAgICAgICovCisgIC8qIF9pbXBsZW1lbnRhdGlvbl8uICBGb3IgZXhhbXBsZSwgdXNpbmcgRlRfUkVOREVSX01PREVfTENEIHdoZW4gY2FsbGluZyAqLworICAvKiBGVF9SZW5kZXJfR2x5cGggc3RpbGwgZ2VuZXJhdGVzIGEgYml0bWFwIHRoYXQgaXMgMyB0aW1lcyB3aWRlciB0aGFuICAgKi8KKyAgLyogdGhlIG9yaWdpbmFsIHNpemUgaW4gY2FzZSB0aGlzIG1hY3JvIGlzbid0IGRlZmluZWQ7IGhvd2V2ZXIsIGVhY2ggICAgICovCisgIC8qIHRyaXBsZXQgb2Ygc3VicGl4ZWxzIGhhcyBSPUc9Qi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBpcyBkb25lIHRvIGFsbG93IEZyZWVUeXBlIGNsaWVudHMgdG8gcnVuIHVubW9kaWZpZWQsIGZvcmNpbmcgICAgICovCisgIC8qIHRoZW0gdG8gZGlzcGxheSBub3JtYWwgZ3JheS1sZXZlbCBhbnRpLWFsaWFzZWQgZ2x5cGhzLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTWFueSBjb21waWxlcnMgcHJvdmlkZSBhIG5vbi1BTlNJIDY0LWJpdCBkYXRhIHR5cGUgdGhhdCBjYW4gYmUgdXNlZCAgICovCisgIC8qIGJ5IEZyZWVUeXBlIHRvIHNwZWVkIHVwIHNvbWUgY29tcHV0YXRpb25zLiAgSG93ZXZlciwgdGhpcyB3aWxsIGNyZWF0ZSAqLworICAvKiBzb21lIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5IGluIHN0cmljdCBBTlNJIG1vZGUuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZvciB0aGlzIHJlYXNvbiwgdGhlIHVzZSBvZiA2NC1iaXQgaW50ZWdlcnMgaXMgbm9ybWFsbHkgZGlzYWJsZWQgd2hlbiAqLworICAvKiB0aGUgX19TVERDX18gbWFjcm8gaXMgZGVmaW5lZC4gIFlvdSBjYW4gaG93ZXZlciBkaXNhYmxlIHRoaXMgYnkgICAgICAgKi8KKyAgLyogZGVmaW5pbmcgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgaGVyZS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGb3IgbW9zdCBjb21waWxlcnMsIHRoaXMgd2lsbCBvbmx5IGNyZWF0ZSBjb21waWxhdGlvbiB3YXJuaW5ncyB3aGVuICAgKi8KKyAgLyogYnVpbGRpbmcgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPYk5vdGU6IFRoZSBjb21waWxlci1zcGVjaWZpYyA2NC1iaXQgaW50ZWdlcnMgYXJlIGRldGVjdGVkIGluIHRoZSAgICAgKi8KKyAgLyogICAgICAgICBmaWxlIGBmdGNvbmZpZy5oJyBlaXRoZXIgc3RhdGljYWxseSBvciB0aHJvdWdoIHRoZSAgICAgICAgICAgICovCisgIC8qICAgICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0IG9uIHN1cHBvcnRlZCBwbGF0Zm9ybXMuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgZG8gbm90IHRyeSB0byB1c2UgYW4gYXNzZW1ibGVyIHZlcnNpb24gb2YgICAqLworICAvKiBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbnMgKGUuZy4gRlRfTXVsRml4KS4gIFlvdSBzaG91bGQgb25seSBkbyAgKi8KKyAgLyogdGhhdCB0byB2ZXJpZnkgdGhhdCB0aGUgYXNzZW1ibGVyIGZ1bmN0aW9uIHdvcmtzIHByb3Blcmx5LCBvciB0byAgICAgICovCisgIC8qIGV4ZWN1dGUgYmVuY2htYXJrIHRlc3RzIG9mIHRoZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucy4gICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHRyeSB0byB1c2UgYW4gaW5saW5lZCBhc3NlbWJsZXIgdmVyc2lvbiBvZiAgKi8KKyAgLyogdGhlIGBGVF9NdWxGaXgnIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGBob3RzcG90JyB3aGVuIGxvYWRpbmcgYW5kICAgICAgICovCisgIC8qIGhpbnRpbmcgZ2x5cGhzLCBhbmQgd2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIGFzIGZhc3QgYXMgcG9zc2libGUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IGlmIHlvdXIgY29tcGlsZXIgb3IgQ1BVIGlzIG5vdCBzdXBwb3J0ZWQsIHRoaXMgd2lsbCBkZWZhdWx0ICovCisgIC8qIHRvIHRoZSBzdGFuZGFyZCBhbmQgcG9ydGFibGUgaW1wbGVtZW50YXRpb24gZm91bmQgaW4gYGZ0Y2FsYy5jJy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkxJTkVfTVVMRklYCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIExaVy1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBmb250IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCB0aGUgICovCisgIC8qICAgYGNvbXByZXNzJyBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YgICAqLworICAvKiAgIGZpbGVzIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgWDExIGRpc3RyaWJ1dGlvbnMuICBUaGUgaW1wbGVtZW50YXRpb24gKi8KKyAgLyogICB1c2VzIE5ldEJTRCdzIGB6b3BlbicgdG8gcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAgICovCisgIC8qICAgKHNlZSBzcmMvbHp3L2Z0Z3ppcC5jKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR3ppcC1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KKyAgLyogICBgZ3ppcCcgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGIGZpbGVzICovCisgIC8qICAgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGB6bGliJyB0byAgICAgICAgICAqLworICAvKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvZ3ppcC9mdGd6aXAuYykuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgU2VlIGFsc28gICAqLworICAvKiAgIHRoZSBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWkxpYiBsaWJyYXJ5IHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoaXMgbWFjcm8gaXMgb25seSB1c2VkIHdoZW4gRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiBpcyBkZWZpbmVkLiAgKi8KKyAgLyogICBJdCBhbGxvd3MgRnJlZVR5cGUncyBgZnRnemlwJyBjb21wb25lbnQgdG8gbGluayB0byB0aGUgc3lzdGVtJ3MgICAgICovCisgIC8qICAgaW5zdGFsbGF0aW9uIG9mIHRoZSBaTGliIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIGxpa2UgICAqLworICAvKiAgIFVuaXggb3IgVk1TIHdoZXJlIGl0IGdlbmVyYWxseSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSWYgeW91IGxldCBpdCB1bmRlZmluZWQsIHRoZSBjb21wb25lbnQgd2lsbCB1c2UgaXRzIG93biBjb3B5ICAgICAgICAqLworICAvKiAgIG9mIHRoZSB6bGliIHNvdXJjZXMgaW5zdGVhZC4gIFRoZXNlIGhhdmUgYmVlbiBtb2RpZmllZCB0byBiZSAgICAgICAgKi8KKyAgLyogICBpbmNsdWRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGNvbXBvbmVudCBhbmQgKm5vdCogZXhwb3J0IGV4dGVybmFsICAgICovCisgIC8qICAgZnVuY3Rpb24gbmFtZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gbGluayBhbnkgcHJvZ3JhbSB3aXRoIEZyZWVUeXBlICAqLworICAvKiAgIF9hbmRfIFpMaWIgd2l0aG91dCBsaW5raW5nIGNvbmZsaWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgICAqLworICAvKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQnppcDItY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KKyAgLyogICBgYnppcDInIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRiAgICAgICovCisgIC8qICAgZmlsZXMgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBsaWJiejInIHRvICAqLworICAvKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvYnppcDIvZnRiemlwMi5jKS4gKi8KKyAgLyogICBDb250cmFyeSB0byBnemlwLCBiemlwMiBjdXJyZW50bHkgaXMgbm90IGluY2x1ZGVkIGFuZCBuZWVkIHRvIHVzZSAgICovCisgIC8qICAgdGhlIHN5c3RlbSBhdmFpbGFibGUgYnppcDIgaW1wbGVtZW50YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIGZpbGUgc3RyZWFtIGZ1bmN0aW9ucyBhbmQgdHlwZXMsIEZJTEUsICAgKi8KKyAgLyogZm9wZW4oKSBldGMuICBFbmFibGVzIHRoZSB1c2Ugb2Ygc21hbGxlciBzeXN0ZW0gbGlicmFyaWVzIG9uIGVtYmVkZGVkICovCisgIC8qIHN5c3RlbXMgdGhhdCBoYXZlIG11bHRpcGxlIHN5c3RlbSBsaWJyYXJpZXMsIHNvbWUgd2l0aCBvciB3aXRob3V0ICAgICAqLworICAvKiBmaWxlIHN0cmVhbSBzdXBwb3J0LCBpbiB0aGUgY2FzZXMgd2hlcmUgZmlsZSBzdHJlYW0gc3VwcG9ydCBpcyBub3QgICAgKi8KKyAgLyogbmVjZXNzYXJ5IHN1Y2ggYXMgbWVtb3J5IGxvYWRpbmcgb2YgZm9udCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0RJU0FCTEVfU1RSRUFNX1NVUFBPUlQgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUE5HIGJpdG1hcCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGxvYWRpbmcgY29sb3IgYml0bWFwIGdseXBocyBpbiB0aGUgUE5HIGZvcm1hdC4gKi8KKyAgLyogICBUaGlzIHJlcXVpcmVzIGhlbHAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicG5nIGxpYnJhcnkuICBVbmNvbXByZXNzZWQgICovCisgIC8qICAgY29sb3IgYml0bWFwcyBkbyBub3QgbmVlZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIGFuZCB3aWxsIGJlICAgICAgICAqLworICAvKiAgIHN1cHBvcnRlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEhhcmZCdXp6IHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGcmVlVHlwZSB1c2VzIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IHRvIGltcHJvdmUgYXV0by1oaW50aW5nIG9mICAgICAgICovCisgIC8qICAgT3BlblR5cGUgZm9udHMuICBJZiBhdmFpbGFibGUsIG1hbnkgZ2x5cGhzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSAqLworICAvKiAgIGJ5IGEgZm9udCdzIGNoYXJhY3RlciBtYXAgd2lsbCBiZSBoaW50ZWQgYWxzby4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlogKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRExMIGV4cG9ydCBjb21waWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMLCBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSAgICAgKi8KKyAgLyogICBzcGVjaWFsIGtleXdvcmQgaW4gZnJvbnQgT1IgYWZ0ZXIgdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uICAgICAgICovCisgIC8qICAgZGVjbGFyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUd28gbWFjcm9zIGFyZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUgdG8gZGVmaW5lICAgICAgICovCisgIC8qICAgZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IEZUX0VYUE9SVCBhbmQgRlRfRVhQT1JUX0RFRi4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VYUE9SVCggcmV0dXJuX3R5cGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfRVhQT1JUKCBGVF9FcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBhcyBpbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSogIGFsaWJyYXJ5ICkgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgIC4uLiBzb21lIGNvZGUgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIEZUX0VYUE9SVCBhbmQgICAgICAgICAgICAqLworICAvKiAgIEZUX0VYUE9SVF9ERUYgaGVyZSBpZiB5b3Ugd2FudC4gIElmIHlvdSBsZWF2ZSB0aGVtIHVuZGVmaW5lZCwgdGhleSAgKi8KKyAgLyogICB3aWxsIGJlIGxhdGVyIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBgZXh0ZXJuIHJldHVybl90eXBlJyB0byAgICAgICovCisgIC8qICAgYWxsb3cgbm9ybWFsIGNvbXBpbGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEbyBub3QgI3VuZGVmIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lICovCisgIC8qICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgRlRfRVhQT1JUKHgpICAgICAgZXh0ZXJuIHggKi8KKy8qICNkZWZpbmUgRlRfRVhQT1JUX0RFRih4KSAgeCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHbHlwaCBQb3N0c2NyaXB0IE5hbWVzIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBjb21waWxlZCB3aXRoIHRoZSBgcHNuYW1lcycgbW9kdWxlLiAgVGhpcyAqLworICAvKiAgIG1vZHVsZSBpcyBpbiBjaGFyZ2Ugb2YgY29udmVydGluZyBhIGdseXBoIG5hbWUgc3RyaW5nIGludG8gYSAgICAgICAgKi8KKyAgLyogICBVbmljb2RlIHZhbHVlLCBvciByZXR1cm4gYSBNYWNpbnRvc2ggc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3IgdGhlICAgICovCisgIC8qICAgdXNlIHdpdGggdGhlIFRydWVUeXBlIGBwb3N0JyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBVbmRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3Qgd2FudCBgcHNuYW1lcycgY29tcGlsZWQgaW4geW91ciAgICovCisgIC8qICAgYnVpbGQgb2YgRnJlZVR5cGUuICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6ICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAtIFRoZSBUcnVlVHlwZSBkcml2ZXIgd2lsbCBwcm92aWRlIGl0cyBvd24gc2V0IG9mIGdseXBoIG5hbWVzLCAgICAgICovCisgIC8qICAgICBpZiB5b3UgYnVpbGQgaXQgdG8gc3VwcG9ydCBwb3N0c2NyaXB0IG5hbWVzIGluIHRoZSBUcnVlVHlwZSAgICAgICAqLworICAvKiAgICAgYHBvc3QnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgLSBUaGUgVHlwZSAxIGRyaXZlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHN5bnRoZXNpemUgYSBVbmljb2RlICAgICAgICAqLworICAvKiAgICAgY2hhcm1hcCBvdXQgb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udHMuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgWW91IHdvdWxkIG5vcm1hbGx5IHVuZGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyB3aGVuIGJ1aWxkaW5nICAqLworICAvKiAgIGEgdmVyc2lvbiBvZiBGcmVlVHlwZSB0aGF0IGRvZXNuJ3QgY29udGFpbiBhIFR5cGUgMSBvciBDRkYgZHJpdmVyLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQb3N0c2NyaXB0IE5hbWVzIHRvIFVuaWNvZGUgVmFsdWVzIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBidWlsdCB3aXRoIHRoZSBgUFNOYW1lcycgbW9kdWxlIGNvbXBpbGVkICAqLworICAvKiAgIGluLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgbW9kdWxlIGlzIHVzZWQgdG8gY29udmVydCBhIGdseXBoIG5hbWUgKi8KKyAgLyogICBpbnRvIGEgVW5pY29kZSB2YWx1ZS4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gb3JkZXIgdG8gICAgICAgICovCisgIC8qICAgc3ludGhlc2l6ZSBvbiB0aGUgZmx5IGEgVW5pY29kZSBjaGFybWFwIGZyb20gdGhlIENGRi9UeXBlIDEgZHJpdmVyICAqLworICAvKiAgIHRocm91Z2ggYSBiaWcgdGFibGUgbmFtZWQgdGhlIGBBZG9iZSBHbHlwaCBMaXN0JyAoQUdMKS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVW5kZWZpbmUgdGhpcyBtYWNybyBpZiB5b3UgZG8gbm90IHdhbnQgdGhlIEFkb2JlIEdseXBoIExpc3QgICAgICAgICAqLworICAvKiAgIGNvbXBpbGVkIGluIHlvdXIgYFBTTmFtZXMnIG1vZHVsZS4gIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlICAgKi8KKyAgLyogICBhYmxlIHRvIHN5bnRoZXNpemUgYSBVbmljb2RlIGNoYXJtYXAgb3V0IG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlICovCisgIC8qICAgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN1cHBvcnQgZm9yIE1hYyBmb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBvdXRsaW5lIGZvbnRzIGluIE1hYyAgICAgICovCisgIC8qICAgZm9ybWF0IChtYWMgZGZvbnQsIG1hYyByZXNvdXJjZSwgbWFjYmluYXJ5IGNvbnRhaW5pbmcgYSBtYWMgICAgICAgICAqLworICAvKiAgIHJlc291cmNlKSBvbiBub24tTWFjIHBsYXRmb3Jtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IHRoZSBgRk9ORCcgcmVzb3VyY2UgaXNuJ3QgY2hlY2tlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR3Vlc3NpbmcgbWV0aG9kcyB0byBhY2Nlc3MgZW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEVuYWJsZSBleHRyYSBNYWMgZm9udHMgc3VwcG9ydCBvbiBub24tTWFjIHBsYXRmb3JtcyAoZS5nLiAgICAgICAgICAgKi8KKyAgLyogICBHTlUvTGludXgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFJlc291cmNlIGZvcmtzIHdoaWNoIGluY2x1ZGUgZm9udHMgZGF0YSBhcmUgc3RvcmVkIHNvbWV0aW1lcyBpbiAgICAgKi8KKyAgLyogICBsb2NhdGlvbnMgd2hpY2ggdXNlcnMgb3IgZGV2ZWxvcGVycyBkb24ndCBleHBlY3RlZC4gIEluIHNvbWUgY2FzZXMsICovCisgIC8qICAgcmVzb3VyY2UgZm9ya3Mgc3RhcnQgd2l0aCBzb21lIG9mZnNldCBmcm9tIHRoZSBoZWFkIG9mIGEgZmlsZS4gIEluICAqLworICAvKiAgIG90aGVyIGNhc2VzLCB0aGUgYWN0dWFsIHJlc291cmNlIGZvcmsgaXMgc3RvcmVkIGluIGZpbGUgZGlmZmVyZW50ICAgKi8KKyAgLyogICBmcm9tIHdoYXQgdGhlIHVzZXIgc3BlY2lmaWVzLiAgSWYgdGhpcyBvcHRpb24gaXMgYWN0aXZhdGVkLCAgICAgICAgICovCisgIC8qICAgRnJlZVR5cGUgdHJpZXMgdG8gZ3Vlc3Mgd2hldGhlciBzdWNoIG9mZnNldHMgb3IgZGlmZmVyZW50IGZpbGUgICAgICAqLworICAvKiAgIG5hbWVzIG11c3QgYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IG5vcm1hbCwgZGlyZWN0IGFjY2VzcyBvZiByZXNvdXJjZSBmb3JrcyBpcyBjb250cm9sbGVkIHZpYSAqLworICAvKiAgIHRoZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUyBvcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMKKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSworI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFsbG93IHRoZSB1c2Ugb2YgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIHRvIGxvYWQgdHlwZWZhY2VzIHRoYXQgICAgICAqLworICAvKiBjb250YWluIG5vIGdseXBoIGRhdGEsIGJ1dCBzdXBwbHkgaXQgdmlhIGEgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgKi8KKyAgLyogVGhpcyBpcyByZXF1aXJlZCBieSBjbGllbnRzIHN1cHBvcnRpbmcgZG9jdW1lbnQgZm9ybWF0cyB3aGljaCAgICAgICAgICovCisgIC8qIHN1cHBseSBmb250IGRhdGEgaW5jcmVtZW50YWxseSBhcyB0aGUgZG9jdW1lbnQgaXMgcGFyc2VkLCBzdWNoICAgICAgICAqLworICAvKiBhcyB0aGUgR2hvc3RzY3JpcHQgaW50ZXJwcmV0ZXIgZm9yIHRoZSBQb3N0U2NyaXB0IGxhbmd1YWdlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sIHVzZWQgYnkgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIgICovCisgIC8qIHRvIGRvIGFsbCBvZiBpdHMgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfUkVOREVSX1BPT0xfU0laRSAgMTYzODRMCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX01BWF9NT0RVTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbW9kdWxlcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGluIGEgc2luZ2xlICAgICovCisgIC8qICAgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICAzMiBpcyB0aGUgZGVmYXVsdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfTUFYX01PRFVMRVMgIDMyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlYnVnIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGcmVlVHlwZSBjYW4gYmUgY29tcGlsZWQgaW4gZGVidWcgb3IgdHJhY2UgbW9kZS4gIEluIGRlYnVnIG1vZGUsICAgICovCisgIC8qICAgZXJyb3JzIGFyZSByZXBvcnRlZCB0aHJvdWdoIHRoZSBgZnRkZWJ1ZycgY29tcG9uZW50LiAgSW4gdHJhY2UgICAgICAqLworICAvKiAgIG1vZGUsIGFkZGl0aW9uYWwgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBkdXJpbmcgICAgKi8KKyAgLyogICBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERlZmluZSBGVF9ERUJVR19MRVZFTF9FUlJPUiB0byBidWlsZCB0aGUgbGlicmFyeSBpbiBkZWJ1ZyBtb2RlLiAgICAgKi8KKyAgLyogICBEZWZpbmUgRlRfREVCVUdfTEVWRUxfVFJBQ0UgdG8gYnVpbGQgaXQgaW4gdHJhY2UgbW9kZS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIERvbid0IGRlZmluZSBhbnkgb2YgdGhlc2UgbWFjcm9zIHRvIGNvbXBpbGUgaW4gYHJlbGVhc2UnIG1vZGUhICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG8gbm90ICN1bmRlZiB0aGVzZSBtYWNyb3MgaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAqLworICAvKiAgIHRoZW0gZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0RFQlVHX0xFVkVMX0VSUk9SICovCisvKiAjZGVmaW5lIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEF1dG9maXR0ZXIgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBJZiBGVF9ERUJVR19BVVRPRklUIGlzIGRlZmluZWQsIEZyZWVUeXBlIHByb3ZpZGVzIHNvbWUgbWVhbnMgdG8gICAgICovCisgIC8qICAgY29udHJvbCB0aGUgYXV0b2ZpdHRlciBiZWhhdmlvdXIgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aXRoIGdsb2JhbCAqLworICAvKiAgIGJvb2xlYW4gdmFyaWFibGVzIChjb25zZXF1ZW50bHksIHlvdSBzaG91bGQgKm5ldmVyKiBlbmFibGUgdGhpcyAgICAgKi8KKyAgLyogICB3aGlsZSBjb21waWxpbmcgaW4gYHJlbGVhc2UnIG1vZGUpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgX2FmX2RlYnVnX2Rpc2FibGVfaG9yel9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIF9hZl9kZWJ1Z19kaXNhYmxlX3ZlcnRfaGludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBfYWZfZGVidWdfZGlzYWJsZV9ibHVlX2hpbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBZGRpdGlvbmFsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgZHVtcHMgb2YgdmFyaW91cyAgICAgICovCisgIC8qICAgaW50ZXJuYWwgYXV0b2ZpdCBzdHJ1Y3R1cmVzIHRvIHN0ZG91dCAodXNpbmcgYHByaW50ZicpOiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGFmX2dseXBoX2hpbnRzX2dldF9udW1fc2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBhZl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBcyBhbiBhcmd1bWVudCwgdGhleSB1c2UgYW5vdGhlciBnbG9iYWwgdmFyaWFibGU6ICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgX2FmX2RlYnVnX2hpbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBgZnRncmlkJyBkZW1vIHByb2dyYW0gdG8gc2VlIGhvdyB0aG9zZSAgICAqLworICAvKiAgIHZhcmlhYmxlcyBhbmQgbWFjcm9zIHNob3VsZCBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG8gbm90ICN1bmRlZiB0aGVzZSBtYWNyb3MgaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAqLworICAvKiAgIHRoZW0gZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0RFQlVHX0FVVE9GSVQgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTWVtb3J5IERlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZyZWVUeXBlIG5vdyBjb21lcyB3aXRoIGFuIGludGVncmF0ZWQgbWVtb3J5IGRlYnVnZ2VyIHRoYXQgaXMgICAgICAgKi8KKyAgLyogICBjYXBhYmxlIG9mIGRldGVjdGluZyBzaW1wbGUgZXJyb3JzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSAgICAgICovCisgIC8qICAgZGVsZXRlcy4gIFRvIGNvbXBpbGUgaXQgd2l0aGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHlvdSAgICAgICAqLworICAvKiAgIHNob3VsZCBkZWZpbmUgRlRfREVCVUdfTUVNT1JZIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBhY3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuICAgICAqLworICAvKiAgIHdoZW4gdGhlIF9lbnZpcm9ubWVudF8gdmFyaWFibGUgYEZUMl9ERUJVR19NRU1PUlknIGlzIGRlZmluZWQgYWxzbyEgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgICAqLworICAvKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0RFQlVHX01FTU9SWSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNb2R1bGUgZXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSWYgdGhpcyBtYWNybyBpcyBzZXQgKHdoaWNoIGlzIF9ub3RfIHRoZSBkZWZhdWx0KSwgdGhlIGhpZ2hlciBieXRlICAqLworICAvKiAgIG9mIGFuIGVycm9yIGNvZGUgZ2l2ZXMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZXJyb3IgaGFzIG9jY3VycmVkLCAgKi8KKyAgLyogICB3aGlsZSB0aGUgbG93ZXIgYnl0ZSBpcyB0aGUgcmVhbCBlcnJvciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFNldHRpbmcgdGhpcyBtYWNybyBtYWtlcyBzZW5zZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHksIHNpbmNlICAgKi8KKyAgLyogICBpdCB3b3VsZCBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBvZiBjZXJ0YWluIHByb2dyYW1zIHRoYXQgdXNlICAgICovCisgIC8qICAgRnJlZVR5cGUgMi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlcyBmdG1vZGVyci5oIGFuZCBmdGVycm9ycy5oLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIElmIHRoaXMgbWFjcm8gaXMgc2V0ICh3aGljaCBpcyBfbm90XyB0aGUgZGVmYXVsdCksIEZyZWVUeXBlMiB3aWxsICAgKi8KKyAgLyogICBhdm9pZCBjcmVhdGluZyBjb25zdGFudHMgdGhhdCByZXF1aXJlIGFkZHJlc3MgZml4dXBzLiAgSW5zdGVhZCB0aGUgICovCisgIC8qICAgY29uc3RhbnRzIHdpbGwgYmUgbW92ZWQgaW50byBhIHN0cnVjdCBhbmQgYWRkaXRpb25hbCBpbnRpYWxpemF0aW9uICAqLworICAvKiAgIGNvZGUgd2lsbCBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgU2V0dGluZyB0aGlzIG1hY3JvIGlzIG5lZWRlZCBmb3Igc3lzdGVtcyB0aGF0IHByb2hpYml0IGFkZHJlc3MgICAgICAqLworICAvKiAgIGZpeHVwcywgc3VjaCBhcyBCUkVXLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgUyBGIE4gVCAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0ICAgICAgICovCisgIC8qIGVtYmVkZGVkIGJpdG1hcHMgaW4gYWxsIGZvcm1hdHMgdXNpbmcgdGhlIFNGTlQgbW9kdWxlIChuYW1lbHkgICAgICAgICAqLworICAvKiBUcnVlVHlwZSAmIE9wZW5UeXBlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gICAgKi8KKyAgLyogbG9hZCBhbmQgZW51bWVyYXRlIHRoZSBnbHlwaCBQb3N0c2NyaXB0IG5hbWVzIGluIGEgVHJ1ZVR5cGUgb3IgICAgICAgICovCisgIC8qIE9wZW5UeXBlIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IHdoZW4geW91IGRvIG5vdCBjb21waWxlIHRoZSBgUFNOYW1lcycgbW9kdWxlIGJ5IHVuZGVmaW5pbmcgICovCisgIC8qIHRoZSBhYm92ZSBGVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMsIHRoZSBgc2ZudCcgbW9kdWxlIHdpbGwgICAqLworICAvKiBjb250YWluIGFkZGl0aW9uYWwgY29kZSB1c2VkIHRvIHJlYWQgdGhlIFBTIE5hbWVzIHRhYmxlIGZyb20gYSBmb250LiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIChCeSBkZWZhdWx0LCB0aGUgbW9kdWxlIHVzZXMgYFBTTmFtZXMnIHRvIGV4dHJhY3QgZ2x5cGggbmFtZXMuKSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMgaWYgeW91ciBhcHBsaWNhdGlvbnMgbmVlZCB0byAgICAgICAqLworICAvKiBhY2Nlc3MgdGhlIGludGVybmFsIG5hbWUgdGFibGUgaW4gYSBTRk5ULWJhc2VkIGZvcm1hdCBsaWtlIFRydWVUeXBlICAgKi8KKyAgLyogb3IgT3BlblR5cGUuICBUaGUgbmFtZSB0YWJsZSBjb250YWlucyB2YXJpb3VzIHN0cmluZ3MgdXNlZCB0byAgICAgICAgICovCisgIC8qIGRlc2NyaWJlIHRoZSBmb250LCBsaWtlIGZhbWlseSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4gIEl0ICAgICAqLworICAvKiBkb2VzIG5vdCBjb250YWluIGFueSBnbHlwaCBuYW1lIHRob3VnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFjY2Vzc2luZyBTRk5UIG5hbWVzIGlzIGRvbmUgdGhyb3VnaCB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGluICAgICAgICAqLworICAvKiBgZnRzbmFtZXMuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUcnVlVHlwZSBDTWFwIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSGVyZSB5b3UgY2FuIGZpbmUtdHVuZSB3aGljaCBUcnVlVHlwZSBDTWFwIHRhYmxlIGZvcm1hdCBzaGFsbCBiZSAgICAqLworICAvKiAgIHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzAKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzIKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzQKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzYKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzgKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzEwCisjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMgorI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTMKKyNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzE0CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICBUIFIgVSBFIFQgWSBQIEUgICBEIFIgSSBWIEUgUiAgICBDIE8gTiBGIEkgRyBVIFIgQSBUIEkgTyBOICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgICAqLworICAvKiBhIGJ5dGVjb2RlIGludGVycHJldGVyIGluIHRoZSBUcnVlVHlwZSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEJ5IHVuZGVmaW5pbmcgdGhpcywgeW91IHdpbGwgb25seSBjb21waWxlIHRoZSBjb2RlIG5lY2Vzc2FyeSB0byBsb2FkICAqLworICAvKiBUcnVlVHlwZSBnbHlwaHMgd2l0aG91dCBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUsIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgICAgICAgICAqLworICAvKiAgIGRlZmluZSBpdCBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpZiB5b3Ugd2FudCB0byBjb21waWxlICAgICAgICovCisgIC8qIEVYUEVSSU1FTlRBTCBzdWJwaXhlbCBoaW50aW5nIHN1cHBvcnQgaW50byB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhpcyAqLworICAvKiByZXBsYWNlcyB0aGUgbmF0aXZlIFRydWVUeXBlIGhpbnRpbmcgbWVjaGFuaXNtIHdoZW4gYW55dGhpbmcgYnV0ICAgICAgKi8KKyAgLyogRlRfUkVOREVSX01PREVfTU9OTyBpcyByZXF1ZXN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFbmFibGluZyB0aGlzIGNhdXNlcyB0aGUgVHJ1ZVR5cGUgZHJpdmVyIHRvIGlnbm9yZSBpbnN0cnVjdGlvbnMgdW5kZXIgKi8KKyAgLyogY2VydGFpbiBjb25kaXRpb25zLiAgVGhpcyBpcyBkb25lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZ3VpZGUgaGVyZSwgICovCisgIC8qIHdpdGggc29tZSBtaW5vciBkaWZmZXJlbmNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCeSB1bmRlZmluaW5nIHRoaXMsIHlvdSBvbmx5IGNvbXBpbGUgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGhpbnQgICAgICAgKi8KKyAgLyogVHJ1ZVR5cGUgZ2x5cGhzIHdpdGggbmF0aXZlIFRUIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoaXMgb3B0aW9uIHJlcXVpcmVzIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgdG8gYmUgICAgKi8KKyAgLyogICBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgeW91IGRlZmluZSBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORywgYSBzcGVjaWFsIHZlcnNpb24gICovCisgIC8qIG9mIHRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciBpcyB1c2VkIHRoYXQgZG9lc24ndCBpbXBsZW1lbnQgICAqLworICAvKiBhbnkgb2YgdGhlIHBhdGVudGVkIG9wY29kZXMgYW5kIGFsZ29yaXRobXMuICBUaGUgcGF0ZW50cyByZWxhdGVkIHRvICAgKi8KKyAgLyogVHJ1ZVR5cGUgaGludGluZyBoYXZlIGV4cGlyZWQgd29ybGR3aWRlIHNpbmNlIE1heSAyMDEwOyB0aGlzIG9wdGlvbiAgICovCisgIC8qIGlzIG5vdyBkZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IHRoZSBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyBtYWNybyBpcyAqaWdub3JlZCogICovCisgIC8qIGlmIHlvdSBkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUjsgaW4gb3RoZXIgd29yZHMsICAqLworICAvKiBlaXRoZXIgZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgb3IgICAgICAgICAgICAgICAgKi8KKyAgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgYnV0IG5vdCBib3RoIGF0IHRoZSBzYW1lIHRpbWUuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIG1hY3JvIGlzIG9ubHkgdXNlZnVsIGZvciBhIHNtYWxsIG51bWJlciBvZiBmb250IGZpbGVzIChtb3N0bHkgICAgKi8KKyAgLyogZm9yIEFzaWFuIHNjcmlwdHMpIHRoYXQgcmVxdWlyZSBieXRlY29kZSBpbnRlcnByZXRhdGlvbiB0byBwcm9wZXJseSAgICovCisgIC8qIGxvYWQgZ2x5cGhzLiAgRm9yIGFsbCBvdGhlciBmb250cywgdGhpcyBwcm9kdWNlcyB1bnBsZWFzYW50IHJlc3VsdHMsICAqLworICAvKiB0aHVzIHRoZSB1bnBhdGVudGVkIGludGVycHJldGVyIGlzIG5ldmVyIHVzZWQgdG8gbG9hZCBnbHlwaHMgZnJvbSAgICAgKi8KKyAgLyogVHJ1ZVR5cGUgZm9udHMgdW5sZXNzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byBvcHRpb25zIGlzIHVzZWQuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gVGhlIHVucGF0ZW50ZWQgaW50ZXJwcmV0ZXIgaXMgZXhwbGljaXRseSBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIgICAgKi8KKyAgLyogICAgIHRocm91Z2ggdGhlIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcgcGFyYW1ldGVyIHRhZyAgICAgICAgICovCisgIC8qICAgICB3aGVuIG9wZW5pbmcgdGhlIEZUX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAtIEZyZWVUeXBlIGRldGVjdHMgdGhhdCB0aGUgRlRfRmFjZSBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlICAgICAgICovCisgIC8qICAgICBgdHJpY2snIGZvbnRzIChlLmcuLCBgTWluZ2xpdScpIGl0IGtub3dzIGFib3V0LiAgVGhlIGZvbnQgZW5naW5lICAqLworICAvKiAgICAgY29udGFpbnMgYSBoYXJkLWNvZGVkIGxpc3Qgb2YgZm9udCBuYW1lcyBhbmQgb3RoZXIgbWF0Y2hpbmcgICAgICAgKi8KKyAgLyogICAgIHBhcmFtZXRlcnMgKHNlZSBmdW5jdGlvbiBgdHRfZmFjZV9pbml0JyBpbiBmaWxlICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBgc3JjL3RydWV0eXBlL3R0b2Jqcy5jJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSGVyZSBhIHNhbXBsZSBjb2RlIHNuaXBwZXQgZm9yIHVzaW5nIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX1BhcmFtZXRlciAgcGFyYW1ldGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9PcGVuX0FyZ3MgIG9wZW5fYXJnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBwYXJhbWV0ZXIudGFnID0gRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORzsgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIG9wZW5fYXJncy5mbGFncyAgICAgID0gRlRfT1BFTl9QQVRITkFNRSB8IEZUX09QRU5fUEFSQU1TOyAgICAgICAgICovCisgIC8qICAgICBvcGVuX2FyZ3MucGF0aG5hbWUgICA9IG15X2ZvbnRfcGF0aG5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgb3Blbl9hcmdzLm51bV9wYXJhbXMgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIG9wZW5fYXJncy5wYXJhbXMgICAgID0gJnBhcmFtZXRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZvcGVuX2FyZ3MsIGluZGV4LCAmZmFjZSApOyAgICAgICAgKi8KKyAgLyogICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQgdG8gY29tcGlsZSB0aGUgICAgICAgICovCisgIC8qIFRydWVUeXBlIGdseXBoIGxvYWRlciB0byB1c2UgQXBwbGUncyBkZWZpbml0aW9uIG9mIGhvdyB0byBoYW5kbGUgICAgICAqLworICAvKiBjb21wb25lbnQgb2Zmc2V0cyBpbiBjb21wb3NpdGUgZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFwcGxlIGFuZCBNUyBkaXNhZ3JlZSBvbiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjb21wb25lbnQgb2Zmc2V0cyAgICAqLworICAvKiBpbiBjb21wb3NpdGVzLiAgQXBwbGUgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHNjYWxlZCBieSB0aGUgc2NhbGluZyAgKi8KKyAgLyogZmFjdG9ycyBpbiB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChyb3VnaGx5LCBpdCdzIG1vcmUgY29tcGxleCkgICAgICovCisgIC8qIHdoaWxlIE1TIHNheXMgdGhleSBzaG91bGQgbm90LiAgT3BlblR5cGUgZGVmaW5lcyB0d28gYml0cyBpbiB0aGUgICAgICAqLworICAvKiBjb21wb3NpdGUgZmxhZ3MgYXJyYXkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGlzYW1iaWd1YXRlLCBidXQgb2xkICAgICAgKi8KKyAgLyogZm9udHMgd2lsbCBub3QgaGF2ZSB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9nbHlmLmh0bSAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvVHJ1ZVR5cGUtUmVmZXJlbmNlLU1hbnVhbC9STTA2L0NoYXA2Z2x5Zi5odG1sICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSAgICAgICAgICovCisgIC8qIHN1cHBvcnQgZm9yIEFwcGxlJ3MgZGlzdG9ydGFibGUgZm9udCB0ZWNobm9sb2d5IChmdmFyLCBndmFyLCBjdmFyLCAgICAqLworICAvKiBhbmQgYXZhciB0YWJsZXMpLiAgVGhpcyBoYXMgbWFueSBzaW1pbGFyaXRpZXMgdG8gVHlwZSAxIE11bHRpcGxlICAgICAgKi8KKyAgLyogTWFzdGVycyBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JERiBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yICAgICAgICAqLworICAvKiBhbiBlbWJlZGRlZCBgQkRGICcgdGFibGUgd2l0aGluIFNGTlQtYmFzZWQgYml0bWFwIGZvcm1hdHMuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQkRGCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgIFQgWSBQIEUgMSAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVDFfTUFYX0RJQ1RfREVQVEggaXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdCBkaWN0aW9uYXJpZXMgYW5kICAgICAgICovCisgIC8qIGFycmF5cyBpbiB0aGUgVHlwZSAxIHN0cmVhbSAoc2VlIHQxbG9hZC5jKS4gIEEgbWluaW11bSBvZiA0IGlzICAgICAgICAqLworICAvKiByZXF1aXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFQxX01BWF9ESUNUX0RFUFRIICA1CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFQxX01BWF9TVUJSU19DQUxMUyBkZXRhaWxzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgc3ViLXJvdXRpbmUgICAqLworICAvKiBjYWxscyBkdXJpbmcgZ2x5cGggbG9hZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFQxX01BWF9TVUJSU19DQUxMUyAgMTYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVDFfTUFYX0NIQVJTVFJJTkdfT1BFUkFORFMgaXMgdGhlIGNoYXJzdHJpbmcgc3RhY2sncyBjYXBhY2l0eS4gIEEgICAgICovCisgIC8qIG1pbmltdW0gb2YgMTYgaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIENoaW5lc2UgZm9udCBNaW5nVGlFRy1NZWRpdW0gKENOUyAxMTY0MyBjaGFyYWN0ZXIgc2V0KSBuZWVkcyAyNTYuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUMV9NQVhfQ0hBUlNUUklOR1NfT1BFUkFORFMgIDI1NgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlICAgICAgICAgICAgKi8KKyAgLyogY29tcGlsYXRpb24gb2YgYHQxYWZtJywgd2hpY2ggaXMgaW4gY2hhcmdlIG9mIHJlYWRpbmcgVHlwZSAxIEFGTSAgICAgICovCisgIC8qIGZpbGVzIGludG8gYW4gZXhpc3RpbmcgZmFjZS4gIE5vdGUgdGhhdCBpZiBzZXQsIHRoZSBUMSBkcml2ZXIgd2lsbCBiZSAqLworICAvKiB1bmFibGUgdG8gcHJvZHVjZSBrZXJuaW5nIGRpc3RhbmNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSAgICAgICAgICAgICovCisgIC8qIGNvbXBpbGF0aW9uIG9mIHRoZSBNdWx0aXBsZSBNYXN0ZXJzIGZvbnQgc3VwcG9ydCBpbiB0aGUgVHlwZSAxICAgICAgICAqLworICAvKiBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgVDFfQ09ORklHX09QVElPTl9OT19NTV9TVVBQT1JUCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgIEMgRiBGICAgRCBSIEkgViBFIFIgICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVXNpbmcgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl97WCxZfXsxLDIsMyw0fSBpdCBpcyAgICAgICovCisgIC8qIHBvc3NpYmxlIHRvIHNldCB1cCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGZvdXIgY29udHJvbCBwb2ludHMgdGhhdCAqLworICAvKiBkZWZpbmUgdGhlIHN0ZW0gZGFya2VuaW5nIGJlaGF2aW91ciBvZiB0aGUgKG5ldykgQ0ZGIGVuZ2luZS4gIEZvciAgICAgKi8KKyAgLyogbW9yZSBkZXRhaWxzIHBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGBkYXJrZW5pbmctcGFyYW1ldGVycycgcHJvcGVydHkgb2YgdGhlIGNmZiBkcml2ZXIgbW9kdWxlIChmaWxlICAgICAgICAqLworICAvKiBgZnRjZmZkcnYuaCcpLCB3aGljaCBhbGxvd3MgdGhlIGNvbnRyb2wgYXQgcnVuLXRpbWUuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERvICpub3QqIHVuZGVmaW5lIHRoZXNlIG1hY3JvcyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMSAgIDUwMAorI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxICAgNDAwCisKKyNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMiAgMTAwMAorI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyICAgMjc1CisKKyNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMyAgMTY2NworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzICAgMjc1CisKKyNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YNCAgMjMzMworI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0ICAgICAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIENGRiAgICAgICAqLworICAvKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8gICAgKi8KKyAgLyogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mICovCisgIC8qIHRoZSBjZmYgZHJpdmVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgQSBVIFQgTyBGIEkgVCAgIE0gTyBEIFUgTCBFICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCBDSksgKENoaW5lc2UsIEphcGFuZXNlLCBLb3JlYW4pIHNjcmlwdCAgICAqLworICAvKiBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fQ0pLCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBDb21waWxlIGF1dG9maXQgbW9kdWxlIHdpdGggSW5kaWMgc2NyaXB0IHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCB3YXJwIGhpbnRpbmcuICBUaGUgaWRlYSBvZiB0aGUgd2FycGluZyAgICAqLworICAvKiBjb2RlIGlzIHRvIHNsaWdodGx5IHNjYWxlIGFuZCBzaGlmdCBhIGdseXBoIHdpdGhpbiBhIHNpbmdsZSBkaW1lbnNpb24gKi8KKyAgLyogc28gdGhhdCBhcyBtdWNoIG9mIGl0cyBzZWdtZW50cyBhcmUgYWxpZ25lZCAobW9yZSBvciBsZXNzKSBvbiB0aGUgICAgICovCisgIC8qIGdyaWQuICBUbyBmaW5kIG91dCB0aGUgb3B0aW1hbCBzY2FsaW5nIGFuZCBzaGlmdGluZyB2YWx1ZSwgdmFyaW91cyAgICAqLworICAvKiBwYXJhbWV0ZXIgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZXhwZXJpbWVudGFsIG9wdGlvbiBpcyBhY3RpdmUgb25seSBpZiB0aGUgcmVuZGVyaW5nIG1vZGUgaXMgICAgICAqLworICAvKiBGVF9SRU5ERVJfTU9ERV9MSUdIVDsgeW91IGNhbiBzd2l0Y2ggd2FycGluZyBvbiBhbmQgb2ZmIHdpdGggdGhlICAgICAgKi8KKyAgLyogYHdhcnBpbmcnIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciAoc2VlIGZpbGUgYGZ0YXV0b2guaCcgZm9yIG1vcmUgICovCisgIC8qIGluZm9ybWF0aW9uOyBieSBkZWZhdWx0IGl0IGlzIHN3aXRjaGVkIG9mZikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCisKKyAgLyogKi8KKworCisgIC8qCisgICAqIFRoaXMgbWFjcm8gaXMgb2Jzb2xldGUuICBTdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgaW4gRnJlZVR5cGUKKyAgICogdmVyc2lvbiAyLjUuCisgICAqLworLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX09MRF9JTlRFUk5BTFMgKi8KKworCisgIC8qCisgICAqIFRoaXMgbWFjcm8gaXMgZGVmaW5lZCBpZiBlaXRoZXIgdW5wYXRlbnRlZCBvciBuYXRpdmUgVHJ1ZVR5cGUKKyAgICogaGludGluZyBpcyByZXF1ZXN0ZWQgYnkgdGhlIGRlZmluaXRpb25zIGFib3ZlLgorICAgKi8KKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisjZGVmaW5lICBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyN1bmRlZiAgIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisjZWxpZiBkZWZpbmVkIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisjZGVmaW5lICBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyNlbmRpZgorCisKKyAgLyoKKyAgICogQ2hlY2sgQ0ZGIGRhcmtlbmluZyBwYXJhbWV0ZXJzLiAgVGhlIGNoZWNrcyBhcmUgdGhlIHNhbWUgYXMgaW4gZnVuY3Rpb24KKyAgICogYGNmZl9wcm9wZXJ0eV9zZXQnIGluIGZpbGUgYGNmZmRyaXZyLmMnLgorICAgKi8KKyNpZiBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0IDwgMCAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzIDwgMCAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0IDwgMCAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxID4gICAgICAgIFwKKyAgICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDIgICAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyID4gICAgICAgIFwKKyAgICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDMgICAgIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzID4gICAgICAgIFwKKyAgICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDQgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxID4gNTAwIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyID4gNTAwIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzID4gNTAwIHx8IFwKKyAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0ID4gNTAwCisjZXJyb3IgIkludmFsaWQgQ0ZGIGRhcmtlbmluZyBwYXJhbWV0ZXJzISIKKyNlbmRpZgorCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fRlRPUFRJT05fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRzdGRsaWIuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2NvbmZpZy9mdHN0ZGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9jb25maWcvZnRzdGRsaWIuaApAQCAtMCwwICsxLDE3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRzdGRsaWIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFOU0ktc3BlY2lmaWMgbGlicmFyeSBhbmQgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiAgICovCisvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGdyb3VwIGFsbCAjaW5jbHVkZXMgdG8gdGhlIEFOU0kgQyBsaWJyYXJ5IHRoYXQgICAqLworICAvKiBGcmVlVHlwZSBub3JtYWxseSByZXF1aXJlcy4gIEl0IGFsc28gZGVmaW5lcyBtYWNyb3MgdG8gcmVuYW1lIHRoZSAgICAgKi8KKyAgLyogc3RhbmRhcmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBMb2FkIGEgZmlsZSB3aGljaCBkZWZpbmVzIF9fRlRTVERMSUJfSF9fIGJlZm9yZSB0aGlzIG9uZSB0byBvdmVycmlkZSAgKi8KKyAgLyogaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRTVERMSUJfSF9fCisjZGVmaW5lIF9fRlRTVERMSUJfSF9fCisKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIGZ0X3B0cmRpZmZfdCAgcHRyZGlmZl90CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBsaW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVUlOVF9NQVggYW5kIFVMT05HX01BWCBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNvbXB1dGUgdGhlIHNpemUgICovCisgIC8qIG9mIGBpbnQnIGFuZCBgbG9uZycgaW4gYnl0ZXMgYXQgY29tcGlsZS10aW1lLiAgU28gZmFyLCB0aGlzIHdvcmtzICAqLworICAvKiBmb3IgYWxsIHBsYXRmb3JtcyB0aGUgbGlicmFyeSBoYXMgYmVlbiB0ZXN0ZWQgb24uICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGUgdGhhdCBvbiB0aGUgZXh0cmVtZWx5IHJhcmUgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHByb3ZpZGUgICAgICAqLworICAvKiBpbnRlZ2VyIHR5cGVzIHRoYXQgYXJlIF9leGFjdGx5XyAxNiBhbmQgMzIgYml0cyB3aWRlIChlLmcuIHNvbWUgICAgKi8KKyAgLyogb2xkIENyYXlzIHdoZXJlIGBpbnQnIGlzIDM2IGJpdHMpLCB3ZSBkbyBub3QgbWFrZSBhbnkgZ3VhcmFudGVlICAgICovCisgIC8qIGFib3V0IHRoZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBGVDIgd2l0aCBhbGwgZm9udHMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW4gdGhlc2UgY2FzZSwgYGZ0Y29uZmlnLmgnIHdpbGwgcmVmdXNlIHRvIGNvbXBpbGUgYW55d2F5IHdpdGggYSAgICovCisgIC8qIG1lc3NhZ2UgbGlrZSBgY291bGRuJ3QgZmluZCAzMi1iaXQgdHlwZScgb3Igc29tZXRoaW5nIHNpbWlsYXIuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjZGVmaW5lIEZUX0NIQVJfQklUICAgIENIQVJfQklUCisjZGVmaW5lIEZUX1VTSE9SVF9NQVggIFVTSFJUX01BWAorI2RlZmluZSBGVF9JTlRfTUFYICAgICBJTlRfTUFYCisjZGVmaW5lIEZUX0lOVF9NSU4gICAgIElOVF9NSU4KKyNkZWZpbmUgRlRfVUlOVF9NQVggICAgVUlOVF9NQVgKKyNkZWZpbmUgRlRfVUxPTkdfTUFYICAgVUxPTkdfTUFYCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgYW5kIHN0cmluZyBwcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIGZ0X21lbWNociAgIG1lbWNocgorI2RlZmluZSBmdF9tZW1jbXAgICBtZW1jbXAKKyNkZWZpbmUgZnRfbWVtY3B5ICAgbWVtY3B5CisjZGVmaW5lIGZ0X21lbW1vdmUgIG1lbW1vdmUKKyNkZWZpbmUgZnRfbWVtc2V0ICAgbWVtc2V0CisjZGVmaW5lIGZ0X3N0cmNhdCAgIHN0cmNhdAorI2RlZmluZSBmdF9zdHJjbXAgICBzdHJjbXAKKyNkZWZpbmUgZnRfc3RyY3B5ICAgc3RyY3B5CisjZGVmaW5lIGZ0X3N0cmxlbiAgIHN0cmxlbgorI2RlZmluZSBmdF9zdHJuY21wICBzdHJuY21wCisjZGVmaW5lIGZ0X3N0cm5jcHkgIHN0cm5jcHkKKyNkZWZpbmUgZnRfc3RycmNociAgc3RycmNocgorI2RlZmluZSBmdF9zdHJzdHIgICBzdHJzdHIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBGVF9GSUxFICAgICBGSUxFCisjZGVmaW5lIGZ0X2ZjbG9zZSAgIGZjbG9zZQorI2RlZmluZSBmdF9mb3BlbiAgICBmb3BlbgorI2RlZmluZSBmdF9mcmVhZCAgICBmcmVhZAorI2RlZmluZSBmdF9mc2VlayAgICBmc2VlaworI2RlZmluZSBmdF9mdGVsbCAgICBmdGVsbAorI2RlZmluZSBmdF9zcHJpbnRmICBzcHJpbnRmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIGZ0X3Fzb3J0ICBxc29ydAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgZnRfc2NhbGxvYyAgIGNhbGxvYworI2RlZmluZSBmdF9zZnJlZSAgICAgZnJlZQorI2RlZmluZSBmdF9zbWFsbG9jICAgbWFsbG9jCisjZGVmaW5lIGZ0X3NyZWFsbG9jICByZWFsbG9jCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBmdF9hdG9sICBhdG9sCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPHNldGptcC5oPgorCisjZGVmaW5lIGZ0X2ptcF9idWYgICAgIGptcF9idWYgIC8qIG5vdGU6IHRoaXMgY2Fubm90IGJlIGEgdHlwZWRlZiBzaW5jZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICBqbXBfYnVmIGlzIGRlZmluZWQgYXMgYSBtYWNybyAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgb24gY2VydGFpbiBwbGF0Zm9ybXMgICAgICAgICAgICovCisKKyNkZWZpbmUgZnRfbG9uZ2ptcCAgICAgbG9uZ2ptcAorI2RlZmluZSBmdF9zZXRqbXAoIGIgKSBzZXRqbXAoICooZnRfam1wX2J1ZiopICYoYikgKSAvKiBzYW1lIHRoaW5nIGhlcmUgKi8KKworCisgIC8qIHRoZSBmb2xsb3dpbmcgaXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGkuZS4sIGlmICovCisgIC8qIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGFyZSBkZWZpbmVkICAgICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworCisjZW5kaWYgLyogX19GVFNURExJQl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ZyZWV0eXBlLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mcmVldHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTkzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mcmVldHlwZS5oCkBAIC0wLDAgKzEsNDA2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnJlZXR5cGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIGhpZ2gtbGV2ZWwgQVBJIGFuZCBjb21tb24gdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlJFRVRZUEVfSF9fCisjZGVmaW5lIF9fRlJFRVRZUEVfSF9fCisKKworI2lmbmRlZiBGVF9GUkVFVFlQRV9ICisjZXJyb3IgImBmdDJidWlsZC5oJyBoYXNuJ3QgYmVlbiBpbmNsdWRlZCB5ZXQhIgorI2Vycm9yICJQbGVhc2UgYWx3YXlzIHVzZSBtYWNyb3MgdG8gaW5jbHVkZSBGcmVlVHlwZSBoZWFkZXIgZmlsZXMuIgorI2Vycm9yICJFeGFtcGxlOiIKKyNlcnJvciAiICAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4iCisjZXJyb3IgIiAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSCIKKyNlbmRpZgorCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisjaW5jbHVkZSBGVF9UWVBFU19ICisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWFkZXJfaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSdzIGhlYWRlciBpbmNsdXNpb24gc2NoZW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBIb3cgY2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgaW5jbHVkZSBGcmVlVHlwZSBoZWFkZXIgZmlsZXMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBiZSBhcyBmbGV4aWJsZSBhcyBwb3NzaWJsZSAoYW5kIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpLCAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgdXNlcyBhIHZlcnkgc3BlY2lhbCBpbmNsdXNpb24gc2NoZW1lIHRvIGxvYWQgaGVhZGVyICAgICAgICovCisgIC8qICAgIGZpbGVzLCBmb3IgZXhhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2luY2x1ZGUgRlRfT1VUTElORV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgY29tcGlsZXIgYW5kIGl0cyBwcmVwcm9jZXNzb3Igb25seSBuZWVkcyBhbiBpbmNsdWRlIHBhdGggdG8gZmluZCAqLworICAvKiAgICB0aGUgZmlsZSBgZnQyYnVpbGQuaCc7IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIG5hbWVzIG9mIHRoZSBvdGhlciAgKi8KKyAgLyogICAgRnJlZVR5cGUgaGVhZGVyIGZpbGVzIGFyZSBoaWRkZW4gYnkgcHJlcHJvY2Vzc29yIG1hY3JvIG5hbWVzLCAgICAgICovCisgIC8qICAgIGxvYWRlZCBieSBgZnQyYnVpbGQuaCcuICBUaGUgQVBJIGRvY3VtZW50YXRpb24gYWx3YXlzIGdpdmVzIHRoZSAgICAqLworICAvKiAgICBoZWFkZXIgbWFjcm8gbmFtZSBuZWVkZWQgZm9yIGEgcGFydGljdWxhciBmdW5jdGlvbi4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdXNlcl9hbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlciBhbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSG93IGNsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsbG9jYXRlIEZyZWVUeXBlIGRhdGEgc3RydWN0dXJlcy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIGFuZCBwYXNzZWQgICovCisgIC8qICAgIGFzIGFyZ3VtZW50cyBhcmUgemVyb2VkIG91dCBleGNlcHQgZm9yIHRoZSBhY3R1YWwgZGF0YS4gIEluIG90aGVyICAqLworICAvKiAgICB3b3JkcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGBjYWxsb2MnIChvciB2YXJpYW50cyBvZiBpdCkgICAgICAgKi8KKyAgLyogICAgaW5zdGVhZCBvZiBgbWFsbG9jJyBmb3IgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBCIEEgUyBJIEMgICBUIFkgUCBFIFMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCYXNlIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgRnJlZVR5cGV+MiBiYXNlIGZvbnQgaW50ZXJmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBtb3N0IGltcG9ydGFudCBwdWJsaWMgaGlnaC1sZXZlbCBBUEkgICAgKi8KKyAgLyogICAgZnVuY3Rpb25zIG9mIEZyZWVUeXBlfjIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NoYXJNYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FbmNvZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19TRk5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1RSSUNLWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19LRVJOSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfSElOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1RSSUNLWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9IQVNfSE9SSVpPTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSEFTX1ZFUlRJQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0hBU19LRVJOSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9IQVNfRklYRURfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSEFTX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9IQVNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0lTX1NGTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JU19TQ0FMQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSVNfRklYRURfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0lTX0NJRF9LRVlFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JU19UUklDS1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NUWUxFX0ZMQUdfQk9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TVFlMRV9GTEFHX0lUQUxJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoU2xvdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaF9NZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU3ViR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXBfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0luaXRfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX0ZyZWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVmZXJlbmNlX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19NZW1vcnlfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PcGVuX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3Blbl9BcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1BhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9BdHRhY2hfRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXR0YWNoX1N0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfQ2hhcl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X1BpeGVsX1NpemVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlcXVlc3RfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZWxlY3RfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfUmVxdWVzdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX1JlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xvYWRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQ2hhcl9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0ZpcnN0X0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9OZXh0X0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfTmFtZV9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTG9hZF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9TVFJFQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fUEFUSE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9QQVJBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9SRU5ERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfTU9OT0NIUk9NRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX0xJTkVBUl9ERVNJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfTk9fSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX05PX0JJVE1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9OT19BVVRPSElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9OT19SRUNVUlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfUEVEQU5USUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9UQVJHRVRfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfVEFSR0VUX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX1RBUkdFVF9NT05PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9UQVJHRVRfTENEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfVEFSR0VUX0xDRF9WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9UQVJHRVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9LZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9LZXJuaW5nX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1RyYWNrX0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9HbHlwaF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NoYXJNYXBSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZWxlY3RfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9DaGFybWFwX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0ZTVHlwZV9GbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9TdWJHbHlwaF9JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TbG90X0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TVFlMRV9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX1RBUkdFVF9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU1VCR0xZUEhfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZTVFlQRV9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSEFTX0ZBU1RfR0xZUEhTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgdGhlIG1ldHJpY3Mgb2YgYSBzaW5nbGUgZ2x5cGguICBUaGUgICAgICAqLworICAvKiAgICB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0OyBpZiB0aGUgZmxhZyAgKi8KKyAgLyogICAgQEZUX0xPQURfTk9fU0NBTEUgaGFzIGJlZW4gdXNlZCB3aGlsZSBsb2FkaW5nIHRoZSBnbHlwaCwgdmFsdWVzICAgICovCisgIC8qICAgIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cyBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBnbHlwaCdzIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlaWdodCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBnbHlwaCdzIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIExlZnQgc2lkZSBiZWFyaW5nIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRvcCBzaWRlIGJlYXJpbmcgZm9yIGhvcml6b250YWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlBZHZhbmNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEFkdmFuY2Ugd2lkdGggZm9yIGhvcml6b250YWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIExlZnQgc2lkZSBiZWFyaW5nIGZvciB2ZXJ0aWNhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRvcCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC4gIExhcmdlciBwb3NpdGl2ZSB2YWx1ZXMgICAgKi8KKyAgLyogICAgICBtZWFuIGZ1cnRoZXIgYmVsb3cgdGhlIHZlcnRpY2FsIGdseXBoIG9yaWdpbi4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJ0QWR2YW5jZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBZHZhbmNlIGhlaWdodCBmb3IgdmVydGljYWwgbGF5b3V0LiAgUG9zaXRpdmUgdmFsdWVzIG1lYW4gdGhlICAgICovCisgIC8qICAgICAgZ2x5cGggaGFzIGEgcG9zaXRpdmUgYWR2YW5jZSBkb3dud2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIG5vdCBkaXNhYmxlZCB3aXRoIEBGVF9MT0FEX05PX0hJTlRJTkcsIHRoZSB2YWx1ZXMgcmVwcmVzZW50ICAgICAqLworICAvKiAgICBkaW1lbnNpb25zIG9mIHRoZSBoaW50ZWQgZ2x5cGggKGluIGNhc2UgaGludGluZyBpcyBhcHBsaWNhYmxlKS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFN0cm9raW5nIGEgZ2x5cGggd2l0aCBhbiBvdXRzaWRlIGJvcmRlciBkb2VzIG5vdCBpbmNyZWFzZSAgICAgICAgICAqLworICAvKiAgICBgaG9yaUFkdmFuY2UnIG9yIGB2ZXJ0QWR2YW5jZSc7IHlvdSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGVzZSAgKi8KKyAgLyogICAgdmFsdWVzIHRvIGFjY291bnQgZm9yIHRoZSBhZGRlZCB3aWR0aCBhbmQgaGVpZ2h0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfR2x5cGhfTWV0cmljc18KKyAgeworICAgIEZUX1BvcyAgd2lkdGg7CisgICAgRlRfUG9zICBoZWlnaHQ7CisKKyAgICBGVF9Qb3MgIGhvcmlCZWFyaW5nWDsKKyAgICBGVF9Qb3MgIGhvcmlCZWFyaW5nWTsKKyAgICBGVF9Qb3MgIGhvcmlBZHZhbmNlOworCisgICAgRlRfUG9zICB2ZXJ0QmVhcmluZ1g7CisgICAgRlRfUG9zICB2ZXJ0QmVhcmluZ1k7CisgICAgRlRfUG9zICB2ZXJ0QWR2YW5jZTsKKworICB9IEZUX0dseXBoX01ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXBfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgdGhlIG1ldHJpY3Mgb2YgYSBiaXRtYXAgc3RyaWtlIChpLmUuLCBhIHNldCAgKi8KKyAgLyogICAgb2YgZ2x5cGhzIGZvciBhIGdpdmVuIHBvaW50IHNpemUgYW5kIHJlc29sdXRpb24pIGluIGEgYml0bWFwIGZvbnQuICovCisgIC8qICAgIEl0IGlzIHVzZWQgZm9yIHRoZSBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiBARlRfRmFjZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlaWdodCA6OiBUaGUgdmVydGljYWwgZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiB0d28gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgY29uc2VjdXRpdmUgYmFzZWxpbmVzLiAgSXQgaXMgYWx3YXlzIHBvc2l0aXZlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICA6OiBUaGUgYXZlcmFnZSB3aWR0aCwgaW4gcGl4ZWxzLCBvZiBhbGwgZ2x5cGhzIGluIHRoZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICA6OiBUaGUgbm9taW5hbCBzaXplIG9mIHRoZSBzdHJpa2UgaW4gMjYuNiBmcmFjdGlvbmFsICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgcG9pbnRzLiAgVGhpcyBmaWVsZCBpcyBub3QgdmVyeSB1c2VmdWwuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhfcHBlbSA6OiBUaGUgaG9yaXpvbnRhbCBwcGVtIChub21pbmFsIHdpZHRoKSBpbiAyNi42IGZyYWN0aW9uYWwgICAqLworICAvKiAgICAgICAgICAgICAgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHlfcHBlbSA6OiBUaGUgdmVydGljYWwgcHBlbSAobm9taW5hbCBoZWlnaHQpIGluIDI2LjYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXaW5kb3dzIEZOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgbm9taW5hbCBzaXplIGdpdmVuIGluIGEgRk5UIGZvbnQgaXMgbm90IHJlbGlhYmxlLiAgVGh1cyB3aGVuICovCisgIC8qICAgICAgdGhlIGRyaXZlciBmaW5kcyBpdCBpbmNvcnJlY3QsIGl0IHNldHMgYHNpemUnIHRvIHNvbWUgY2FsY3VsYXRlZCAqLworICAvKiAgICAgIHZhbHVlcyBhbmQgc2V0cyBgeF9wcGVtJyBhbmQgYHlfcHBlbScgdG8gdGhlIHBpeGVsIHdpZHRoIGFuZCAgICAgKi8KKyAgLyogICAgICBoZWlnaHQgZ2l2ZW4gaW4gdGhlIGZvbnQsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUcnVlVHlwZSBlbWJlZGRlZCBiaXRtYXBzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBgc2l6ZScsIGB3aWR0aCcsIGFuZCBgaGVpZ2h0JyB2YWx1ZXMgYXJlIG5vdCBjb250YWluZWQgaW4gdGhlICAgICovCisgIC8qICAgICAgYml0bWFwIHN0cmlrZSBpdHNlbGYuICBUaGV5IGFyZSBjb21wdXRlZCBmcm9tIHRoZSBnbG9iYWwgZm9udCAgICAqLworICAvKiAgICAgIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9CaXRtYXBfU2l6ZV8KKyAgeworICAgIEZUX1Nob3J0ICBoZWlnaHQ7CisgICAgRlRfU2hvcnQgIHdpZHRoOworCisgICAgRlRfUG9zICAgIHNpemU7CisKKyAgICBGVF9Qb3MgICAgeF9wcGVtOworICAgIEZUX1BvcyAgICB5X3BwZW07CisKKyAgfSBGVF9CaXRtYXBfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgTyBCIEogRSBDIFQgICBDIEwgQSBTIFMgRSBTICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4gIEVhY2ggYGxpYnJhcnknIGlzICAgICAgICAqLworICAvKiAgICBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGZyb20gdGhlIG90aGVyczsgaXQgaXMgdGhlIGByb290JyBvZiBhIHNldCAgKi8KKyAgLyogICAgb2Ygb2JqZWN0cyBsaWtlIGZvbnRzLCBmYWNlcywgc2l6ZXMsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJdCBhbHNvIGVtYmVkcyBhIG1lbW9yeSBtYW5hZ2VyIChzZWUgQEZUX01lbW9yeSksIGFzIHdlbGwgYXMgYSAgICAgKi8KKyAgLyogICAgc2Nhbi1saW5lIGNvbnZlcnRlciBvYmplY3QgKHNlZSBARlRfUmFzdGVyKS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMgaXQgaXMgZWFzaWVzdCB0byB1c2Ugb25lICAgICAgICAgICAgKi8KKyAgLyogICAgYEZUX0xpYnJhcnknIG9iamVjdCBwZXIgdGhyZWFkLiAgSW4gY2FzZSB0aGlzIGlzIHRvbyBjdW1iZXJzb21lLCAgICovCisgIC8qICAgIGEgc2luZ2xlIGBGVF9MaWJyYXJ5JyBvYmplY3QgYWNyb3NzIHRocmVhZHMgaXMgcG9zc2libGUgYWxzbyAgICAgICAqLworICAvKiAgICAoc2luY2UgRnJlZVR5cGUgdmVyc2lvbiAyLjUuNiksIGFzIGxvbmcgYXMgYSBtdXRleCBsb2NrIGlzIHVzZWQgICAgKi8KKyAgLyogICAgYXJvdW5kIEBGVF9OZXdfRmFjZSBhbmQgQEZUX0RvbmVfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGlicmFyeSBvYmplY3RzIGFyZSBub3JtYWxseSBjcmVhdGVkIGJ5IEBGVF9Jbml0X0ZyZWVUeXBlLCBhbmQgICAgICovCisgIC8qICAgIGRlc3Ryb3llZCB3aXRoIEBGVF9Eb25lX0ZyZWVUeXBlLiAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nICAqLworICAvKiAgICAoY2YuIEBGVF9SZWZlcmVuY2VfTGlicmFyeSksIHVzZSBARlRfTmV3X0xpYnJhcnkgYW5kICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0RvbmVfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9MaWJyYXJ5UmVjXyAgKkZUX0xpYnJhcnk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGVfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgbW9kdWxlIG9iamVjdC4gIEVhY2ggbW9kdWxlIGNhbiBiZSBhICAqLworICAvKiAgICBmb250IGRyaXZlciwgYSByZW5kZXJlciwgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHByb3ZpZGVzIHNlcnZpY2VzICAgKi8KKyAgLyogICAgdG8gdGhlIGZvcm1lcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9Nb2R1bGVSZWNfKiAgRlRfTW9kdWxlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSBmb250IGRyaXZlciBvYmplY3QuICBFYWNoIGZvbnQgZHJpdmVyICovCisgIC8qICAgIGlzIGEgc3BlY2lhbCBtb2R1bGUgY2FwYWJsZSBvZiBjcmVhdGluZyBmYWNlcyBmcm9tIGZvbnQgZmlsZXMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfRHJpdmVyUmVjXyogIEZUX0RyaXZlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlbmRlcmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgcmVuZGVyZXIuICBBIHJlbmRlcmVyIGlzIGEgc3BlY2lhbCAgICAqLworICAvKiAgICBtb2R1bGUgaW4gY2hhcmdlIG9mIGNvbnZlcnRpbmcgYSBnbHlwaCBpbWFnZSB0byBhIGJpdG1hcCwgd2hlbiAgICAgKi8KKyAgLyogICAgbmVjZXNzYXJ5LiAgRWFjaCByZW5kZXJlciBzdXBwb3J0cyBhIGdpdmVuIGdseXBoIGltYWdlIGZvcm1hdCwgYW5kICovCisgIC8qICAgIG9uZSBvciBtb3JlIHRhcmdldCBzdXJmYWNlIGRlcHRocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfUmVuZGVyZXJSZWNfKiAgRlRfUmVuZGVyZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gdHlwb2dyYXBoaWMgZmFjZSBvYmplY3QuICBBIGZhY2Ugb2JqZWN0IG1vZGVscyAqLworICAvKiAgICBhIGdpdmVuIHR5cGVmYWNlLCBpbiBhIGdpdmVuIHN0eWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIGZhY2Ugb2JqZWN0IGFsc28gb3ducyBhIHNpbmdsZSBARlRfR2x5cGhTbG90IG9iamVjdCwgYXMgd2VsbCAgKi8KKyAgLyogICAgYXMgb25lIG9yIG1vcmUgQEZUX1NpemUgb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2UgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UgdG8gY3JlYXRlIGEgbmV3IGZhY2Ugb2JqZWN0IGZyb20gKi8KKyAgLyogICAgYSBnaXZlbiBmaWxlcGF0aG5hbWUgb3IgYSBjdXN0b20gaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2UgQEZUX0RvbmVfRmFjZSB0byBkZXN0cm95IGl0IChhbG9uZyB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIGBGVF9GYWNlJyBvYmplY3QgY2FuIG9ubHkgYmUgc2FmZWx5IHVzZWQgZnJvbSBvbmUgdGhyZWFkIGF0IGEgICAqLworICAvKiAgICB0aW1lLiAgU2ltaWxhcmx5LCBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgYEZUX0ZhY2UnIHdpdGggdGhlICAgKi8KKyAgLyogICAgc2FtZSBARlRfTGlicmFyeSBvYmplY3QgY2FuIG9ubHkgYmUgZG9uZSBmcm9tIG9uZSB0aHJlYWQgYXQgYSAgICAgICovCisgIC8qICAgIHRpbWUuICBPbiB0aGUgb3RoZXIgaGFuZCwgZnVuY3Rpb25zIGxpa2UgQEZUX0xvYWRfR2x5cGggYW5kIGl0cyAgICAqLworICAvKiAgICBzaWJsaW5ncyBhcmUgdGhyZWFkLXNhZmUgYW5kIGRvIG5vdCBuZWVkIHRoZSBsb2NrIHRvIGJlIGhlbGQgYXMgICAgKi8KKyAgLyogICAgbG9uZyBhcyB0aGUgc2FtZSBgRlRfRmFjZScgb2JqZWN0IGlzIG5vdCB1c2VkIGZyb20gbXVsdGlwbGUgICAgICAgICovCisgIC8qICAgIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gZmFjZSAqLworICAvKiAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VSZWNfKiAgRlRfRmFjZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGEgZmFjZSBzY2FsZWQgdG8gYSBnaXZlbiAgICAgICAqLworICAvKiAgICBjaGFyYWN0ZXIgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIEBGVF9GYWNlIGhhcyBhbiBfYWN0aXZlXyBARlRfU2l6ZSBvYmplY3QgdGhhdCBpcyB1c2VkIGJ5ICAgICAgKi8KKyAgLyogICAgZnVuY3Rpb25zIGxpa2UgQEZUX0xvYWRfR2x5cGggdG8gZGV0ZXJtaW5lIHRoZSBzY2FsaW5nICAgICAgICAgICAgICovCisgIC8qICAgIHRyYW5zZm9ybWF0aW9uIHRoYXQgaW4gdHVybiBpcyB1c2VkIHRvIGxvYWQgYW5kIGhpbnQgZ2x5cGhzIGFuZCAgICAqLworICAvKiAgICBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBjYW4gdXNlIEBGVF9TZXRfQ2hhcl9TaXplLCBARlRfU2V0X1BpeGVsX1NpemVzLCAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfUmVxdWVzdF9TaXplIG9yIGV2ZW4gQEZUX1NlbGVjdF9TaXplIHRvIGNoYW5nZSB0aGUgY29udGVudCAgICAgKi8KKyAgLyogICAgKGkuZS4sIHRoZSBzY2FsaW5nIHZhbHVlcykgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3UgY2FuIHVzZSBARlRfTmV3X1NpemUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgc2l6ZSBvYmplY3RzIGZvciBhICAgKi8KKyAgLyogICAgZ2l2ZW4gQEZUX0ZhY2UsIGJ1dCB0aGV5IHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zIHVudGlsICAgICovCisgIC8qICAgIHlvdSBhY3RpdmF0ZSBpdCB0aHJvdWdoIEBGVF9BY3RpdmF0ZV9TaXplLiAgT25seSBvbmUgc2l6ZSBjYW4gYmUgICAqLworICAvKiAgICBhY3RpdmF0ZWQgYXQgYW55IGdpdmVuIHRpbWUgcGVyIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgQEZUX1NpemVSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIHNpemUgKi8KKyAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TaXplUmVjXyogIEZUX1NpemU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIGBnbHlwaCBzbG90Jy4gIEEgc2xvdCBpcyBhIGNvbnRhaW5lciB3aGVyZSBpdCAgKi8KKyAgLyogICAgaXMgcG9zc2libGUgdG8gbG9hZCBhbnkgb2YgdGhlIGdseXBocyBjb250YWluZWQgaW4gaXRzIHBhcmVudCAgICAgICovCisgIC8qICAgIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW4gb3RoZXIgd29yZHMsIGVhY2ggdGltZSB5b3UgY2FsbCBARlRfTG9hZF9HbHlwaCBvciAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9Mb2FkX0NoYXIsIHRoZSBzbG90J3MgY29udGVudCBpcyBlcmFzZWQgYnkgdGhlIG5ldyBnbHlwaCBkYXRhLCAqLworICAvKiAgICBpLmUuLCB0aGUgZ2x5cGgncyBtZXRyaWNzLCBpdHMgaW1hZ2UgKGJpdG1hcCBvciBvdXRsaW5lKSwgYW5kICAgICAgKi8KKyAgLyogICAgb3RoZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWxzbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIEBGVF9HbHlwaFNsb3RSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGdseXBoIGZpZWxkcy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9HbHlwaFNsb3RSZWNfKiAgRlRfR2x5cGhTbG90OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2hhck1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBjaGFyYWN0ZXIgbWFwLiAgQSBjaGFybWFwIGlzIHVzZWQgdG8gdHJhbnNsYXRlICovCisgIC8qICAgIGNoYXJhY3RlciBjb2RlcyBpbiBhIGdpdmVuIGVuY29kaW5nIGludG8gZ2x5cGggaW5kZXhlcyBmb3IgaXRzICAgICAqLworICAvKiAgICBwYXJlbnQncyBmYWNlLiAgU29tZSBmb250IGZvcm1hdHMgbWF5IHByb3ZpZGUgc2V2ZXJhbCBjaGFybWFwcyBwZXIgKi8KKyAgLyogICAgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIGZhY2Ugb2JqZWN0IG93bnMgemVybyBvciBtb3JlIGNoYXJtYXBzLCBidXQgb25seSBvbmUgb2YgdGhlbSAgKi8KKyAgLyogICAgY2FuIGJlIGBhY3RpdmUnIGFuZCB1c2VkIGJ5IEBGVF9HZXRfQ2hhcl9JbmRleCBvciBARlRfTG9hZF9DaGFyLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY2hhcm1hcHMgaW4gYSBmYWNlIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSAgKi8KKyAgLyogICAgYGZhY2UtPm51bV9jaGFybWFwcycgYW5kIGBmYWNlLT5jaGFybWFwcycgZmllbGRzIG9mIEBGVF9GYWNlUmVjLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgY3VycmVudGx5IGFjdGl2ZSBjaGFybWFwIGlzIGF2YWlsYWJsZSBhcyBgZmFjZS0+Y2hhcm1hcCcuICAgICAgKi8KKyAgLyogICAgWW91IHNob3VsZCBjYWxsIEBGVF9TZXRfQ2hhcm1hcCB0byBjaGFuZ2UgaXQuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBhIG5ldyBmYWNlIGlzIGNyZWF0ZWQgKGVpdGhlciB0aHJvdWdoIEBGVF9OZXdfRmFjZSBvciAgICAgICAgICovCisgIC8qICAgIEBGVF9PcGVuX0ZhY2UpLCB0aGUgbGlicmFyeSBsb29rcyBmb3IgYSBVbmljb2RlIGNoYXJtYXAgd2l0aGluICAgICAqLworICAvKiAgICB0aGUgbGlzdCBhbmQgYXV0b21hdGljYWxseSBhY3RpdmF0ZXMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgQEZUX0NoYXJNYXBSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuICAgKi8KKyAgLyogICAgY2hhcmFjdGVyIG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9DaGFyTWFwUmVjXyogIEZUX0NoYXJNYXA7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgaW50byBhbiB1bnNpZ25lZCBsb25nLiAgSXQgaXMgKi8KKyAgLyogICAgdXNlZCB0byBkZWZpbmUgYGVuY29kaW5nJyBpZGVudGlmaWVycyAoc2VlIEBGVF9FbmNvZGluZykuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2luY2UgbWFueSAxNi1iaXQgY29tcGlsZXJzIGRvbid0IGxpa2UgMzItYml0IGVudW1lcmF0aW9ucywgeW91ICAgICovCisgIC8qICAgIHNob3VsZCByZWRlZmluZSB0aGlzIG1hY3JvIGluIGNhc2Ugb2YgcHJvYmxlbXMgdG8gc29tZXRoaW5nIGxpa2UgICAqLworICAvKiAgICB0aGlzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICNkZWZpbmUgRlRfRU5DX1RBRyggdmFsdWUsIGEsIGIsIGMsIGQgKSAgdmFsdWUgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0byBnZXQgYSBzaW1wbGUgZW51bWVyYXRpb24gd2l0aG91dCBhc3NpZ25pbmcgc3BlY2lhbCBudW1iZXJzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZm5kZWYgRlRfRU5DX1RBRworI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApICAgICAgICAgXAorICAgICAgICAgIHZhbHVlID0gKCAoIChGVF9VSW50MzIpKGEpIDw8IDI0ICkgfCAgXAorICAgICAgICAgICAgICAgICAgICAoIChGVF9VSW50MzIpKGIpIDw8IDE2ICkgfCAgXAorICAgICAgICAgICAgICAgICAgICAoIChGVF9VSW50MzIpKGMpIDw8ICA4ICkgfCAgXAorICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpKGQpICAgICAgICAgKQorCisjZW5kaWYgLyogRlRfRU5DX1RBRyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRW5jb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdXNlZCB0byBzcGVjaWZ5IGNoYXJhY3RlciBzZXRzIHN1cHBvcnRlZCBieSAgICAgICAgICovCisgIC8qICAgIGNoYXJtYXBzLiAgVXNlZCBpbiB0aGUgQEZUX1NlbGVjdF9DaGFybWFwIEFQSSBmdW5jdGlvbi4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZW51bWVyYXRpb24gbGlzdHMgc3BlY2lmaWMgY2hhcmFjdGVyICAgICAgICAqLworICAvKiAgICByZXBlcnRvcmllcyAoaS5lLiwgY2hhcnNldHMpLCBhbmQgbm90IHRleHQgZW5jb2RpbmcgbWV0aG9kcyAoZS5nLiwgKi8KKyAgLyogICAgVVRGLTgsIFVURi0xNiwgZXRjLikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPdGhlciBlbmNvZGluZ3MgbWlnaHQgYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19OT05FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZW5jb2RpbmcgdmFsdWV+MCBpcyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19VTklDT0RFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgc2V0LiAgVGhpcyB2YWx1ZSBjb3ZlcnMgICAgICovCisgIC8qICAgICAgYWxsIHZlcnNpb25zIG9mIHRoZSBVbmljb2RlIHJlcGVydG9pcmUsIGluY2x1ZGluZyBBU0NJSSBhbmQgICAgICAqLworICAvKiAgICAgIExhdGluLTEuICBNb3N0IGZvbnRzIGluY2x1ZGUgYSBVbmljb2RlIGNoYXJtYXAsIGJ1dCBub3QgYWxsICAgICAgKi8KKyAgLyogICAgICBvZiB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgVW5pY29kZSB2YWx1ZSBVKzFGMDI4IChhbmQgICAgKi8KKyAgLyogICAgICB0aGUgZm9udCBjb250YWlucyBpdCksIHVzZSB2YWx1ZSAweDFGMDI4IGFzIHRoZSBpbnB1dCB2YWx1ZSBmb3IgICovCisgIC8qICAgICAgQEZUX0dldF9DaGFyX0luZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfU1lNQk9MIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIE1pY3Jvc29mdCBTeW1ib2wgZW5jb2RpbmcsIHVzZWQgdG8gZW5jb2RlICAgICAqLworICAvKiAgICAgIG1hdGhlbWF0aWNhbCBzeW1ib2xzIGFuZCB3aW5nZGluZ3MuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICAgKi8KKyAgLyogICAgICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bScsICAgICAgICAgICovCisgIC8qICAgICAgYGh0dHA6Ly93d3cua29zdGlzLm5ldC9jaGFyc2V0cy9zeW1ib2wuaHRtJywgYW5kICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwOi8vd3d3Lmtvc3Rpcy5uZXQvY2hhcnNldHMvd2luZ2RpbmcuaHRtJy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBlbmNvZGluZyB1c2VzIGNoYXJhY3RlciBjb2RlcyBmcm9tIHRoZSBQVUEgKFByaXZhdGUgVW5pY29kZSAqLworICAvKiAgICAgIEFyZWEpIGluIHRoZSByYW5nZSBVK0YwMjAtVStGMEZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX1NKSVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIEphcGFuZXNlIFNKSVMgZW5jb2RpbmcuICBNb3JlIGluZm8gYXQgICAgICAgICAgICAgKi8KKyAgLyogICAgICBhdCBgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGlmdF9KSVMnLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2VlIG5vdGUgb24gbXVsdGktYnl0ZSBlbmNvZGluZ3MgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfR0IyMzEyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYW4gZW5jb2Rpbmcgc3lzdGVtIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgYXMgdXNlZCAqLworICAvKiAgICAgIHVzZWQgaW4gbWFpbmxhbmQgQ2hpbmEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIGFuIGVuY29kaW5nIHN5c3RlbSBmb3IgVHJhZGl0aW9uYWwgQ2hpbmVzZSBhcyAgICAgKi8KKyAgLyogICAgICB1c2VkIGluIFRhaXdhbiBhbmQgSG9uZyBLb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19XQU5TVU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgS29yZWFuIGVuY29kaW5nIHN5c3RlbSBrbm93biBhcyBXYW5zdW5nLiAgICAgICovCisgIC8qICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi1VUy9nb2dsb2JhbC9jYzMwNTE1NCcuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBLb3JlYW4gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAoS1N+QyA1NjAxLTE5OTIpLCB3aGljaCAgICAgICAgKi8KKyAgLyogICAgICBjb3JyZXNwb25kcyB0byBNUyBXaW5kb3dzIGNvZGUgcGFnZSAxMzYxLiAgVGhpcyBjaGFyYWN0ZXIgc2V0ICAgICovCisgIC8qICAgICAgaW5jbHVkZXMgYWxsIHBvc3NpYmxlIEhhbmdldWwgY2hhcmFjdGVyIGNvbWJpbmF0aW9ucy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYSBMYXRpbi0xIGVuY29kaW5nIGFzIGRlZmluZWQgaW4gYSBUeXBlfjEgICAgICAgICAqLworICAvKiAgICAgIFBvc3RTY3JpcHQgZm9udC4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBBZG9iZSBTdGFuZGFyZCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCAgKi8KKyAgLyogICAgICBDRkYsIGFuZCBPcGVuVHlwZS9DRkYgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgICAgICovCisgIC8qICAgICAgY29kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIEFkb2JlIEV4cGVydCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCAgICAqLworICAvKiAgICAgIENGRiwgYW5kIE9wZW5UeXBlL0NGRiBmb250cy4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciAgICAgKi8KKyAgLyogICAgICBjb2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19BRE9CRV9DVVNUT00gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byBhIGN1c3RvbSBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCBDRkYsIGFuZCAgICovCisgIC8qICAgICAgT3BlblR5cGUvQ0ZGIGZvbnRzLiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyIGNvZGVzLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIDgtYml0IEFwcGxlIHJvbWFuIGVuY29kaW5nLiAgTWFueSBUcnVlVHlwZSAgICAqLworICAvKiAgICAgIGFuZCBPcGVuVHlwZSBmb250cyBjb250YWluIGEgY2hhcm1hcCBmb3IgdGhpcyBlbmNvZGluZywgc2luY2UgICAgKi8KKyAgLyogICAgICBvbGRlciB2ZXJzaW9ucyBvZiBNYWMgT1MgYXJlIGFibGUgdG8gdXNlIGl0LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19PTERfTEFUSU5fMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIHZhbHVlIGlzIGRlcHJlY2F0ZWQgYW5kIHdhcyBuZXZlciB1c2VkIG5vciByZXBvcnRlZCBieSAgICAgICovCisgIC8qICAgICAgRnJlZVR5cGUuICBEb24ndCB1c2Ugb3IgdGVzdCBmb3IgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19TSklTLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfR0IyMzEyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19HQjIzMTIuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfQklHNSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19CSUc1LiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfV0FOU1VORyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19XQU5TVU5HLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfSk9IQUIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19KT0hBQi4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIGF1dG9tYXRpY2FsbHkgc3ludGhlc2l6ZXMgYSBVbmljb2RlIGNoYXJtYXAgICAqLworICAvKiAgICBmb3IgUG9zdFNjcmlwdCBmb250cywgdXNpbmcgdGhlaXIgZ2x5cGggbmFtZXMgZGljdGlvbmFyaWVzLiAgICAgICAgKi8KKyAgLyogICAgSG93ZXZlciwgaXQgYWxzbyByZXBvcnRzIHRoZSBlbmNvZGluZ3MgZGVmaW5lZCBleHBsaWNpdGx5IGluIHRoZSAgICovCisgIC8qICAgIGZvbnQgZmlsZSwgZm9yIHRoZSBjYXNlcyB3aGVuIHRoZXkgYXJlIG5lZWRlZCwgd2l0aCB0aGUgQWRvYmUgICAgICAqLworICAvKiAgICB2YWx1ZXMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGJ5IHRoZSBCREYgYW5kIFBDRiBkcml2ZXJzIGlmIHRoZSBjaGFybWFwICAqLworICAvKiAgICBpcyBuZWl0aGVyIFVuaWNvZGUgbm9yIElTTy04ODU5LTEgKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfVU5JQ09ERSkuICBVc2UgQEZUX0dldF9CREZfQ2hhcnNldF9JRCB0byBmaW5kIG91dCAgICAgICovCisgIC8qICAgIHdoaWNoIGVuY29kaW5nIGlzIHJlYWxseSBwcmVzZW50LiAgSWYsIGZvciBleGFtcGxlLCB0aGUgICAgICAgICAgICAqLworICAvKiAgICBgY3NfcmVnaXN0cnknIGZpZWxkIGlzIGBLT0k4JyBhbmQgdGhlIGBjc19lbmNvZGluZycgZmllbGQgaXMgYFInLCAgKi8KKyAgLyogICAgdGhlIGZvbnQgaXMgZW5jb2RlZCBpbiBLT0k4LVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19OT05FIGlzIGFsd2F5cyBzZXQgKHdpdGggYSBzaW5nbGUgZXhjZXB0aW9uKSBieSB0aGUgICAgKi8KKyAgLyogICAgd2luZm9udHMgZHJpdmVyLiAgVXNlIEBGVF9HZXRfV2luRk5UX0hlYWRlciBhbmQgZXhhbWluZSB0aGUgICAgICAgICovCisgIC8qICAgIGBjaGFyc2V0JyBmaWVsZCBvZiB0aGUgQEZUX1dpbkZOVF9IZWFkZXJSZWMgc3RydWN0dXJlIHRvIGZpbmQgb3V0ICAqLworICAvKiAgICB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gIEZvciBleGFtcGxlLCAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX1dpbkZOVF9JRF9DUDEyNTEgKDIwNCkgbWVhbnMgV2luZG93cyBjb2RlIHBhZ2UgMTI1MSAoZm9yICAgICAgICovCisgIC8qICAgIFJ1c3NpYW4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTk9ORSBpcyBzZXQgaWYgYHBsYXRmb3JtX2lkJyBpcyBAVFRfUExBVEZPUk1fTUFDSU5UT1NIICovCisgIC8qICAgIGFuZCBgZW5jb2RpbmdfaWQnIGlzIG5vdCBAVFRfTUFDX0lEX1JPTUFOIChvdGhlcndpc2UgaXQgaXMgc2V0IHRvICAqLworICAvKiAgICBGVF9FTkNPRElOR19BUFBMRV9ST01BTikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGBwbGF0Zm9ybV9pZCcgaXMgQFRUX1BMQVRGT1JNX01BQ0lOVE9TSCwgdXNlIHRoZSBmdW5jdGlvbiAgICAgICAqLworICAvKiAgICBARlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgdG8gcXVlcnkgdGhlIE1hYyBsYW5ndWFnZSBJRCB0aGF0IG1heSAgICAgKi8KKyAgLyogICAgYmUgbmVlZGVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggQXBwbGUgZW5jb2RpbmcgdmFyaWFudHMuICBTZWUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvQVBQTEUvUmVhZG1lLnR4dCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvIGdldCBhbiBpZGVhIGhvdyB0byBkbyB0aGF0LiAgQmFzaWNhbGx5LCBpZiB0aGUgbGFuZ3VhZ2UgSUQgICAgICAqLworICAvKiAgICBpc34wLCBkb24ndCB1c2UgaXQsIG90aGVyd2lzZSBzdWJ0cmFjdCAxIGZyb20gdGhlIGxhbmd1YWdlIElELiAgICAgKi8KKyAgLyogICAgVGhlbiBleGFtaW5lIGBlbmNvZGluZ19pZCcuICBJZiwgZm9yIGV4YW1wbGUsIGBlbmNvZGluZ19pZCcgaXMgICAgICovCisgIC8qICAgIEBUVF9NQUNfSURfUk9NQU4gYW5kIHRoZSBsYW5ndWFnZSBJRCAobWludXN+MSkgaXMgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgVFRfTUFDX0xBTkdJRF9HUkVFSycsIGl0IGlzIHRoZSBHcmVlayBlbmNvZGluZywgbm90IFJvbWFuLiAgICAgICAgKi8KKyAgLyogICAgQFRUX01BQ19JRF9BUkFCSUMgd2l0aCBgVFRfTUFDX0xBTkdJRF9GQVJTSScgbWVhbnMgdGhlIEZhcnNpICAgICAgICovCisgIC8qICAgIHZhcmlhbnQgdGhlIEFyYWJpYyBlbmNvZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9FbmNvZGluZ18KKyAgeworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX05PTkUsIDAsIDAsIDAsIDAgKSwKKworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX01TX1NZTUJPTCwgJ3MnLCAneScsICdtJywgJ2InICksCisgICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfVU5JQ09ERSwgICAndScsICduJywgJ2knLCAnYycgKSwKKworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX1NKSVMsICAgICdzJywgJ2onLCAnaScsICdzJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0dCMjMxMiwgICdnJywgJ2InLCAnICcsICcgJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0JJRzUsICAgICdiJywgJ2knLCAnZycsICc1JyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX1dBTlNVTkcsICd3JywgJ2EnLCAnbicsICdzJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0pPSEFCLCAgICdqJywgJ28nLCAnaCcsICdhJyApLAorCisgICAgLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgRlRfRU5DT0RJTkdfTVNfU0pJUyAgICA9IEZUX0VOQ09ESU5HX1NKSVMsCisgICAgRlRfRU5DT0RJTkdfTVNfR0IyMzEyICA9IEZUX0VOQ09ESU5HX0dCMjMxMiwKKyAgICBGVF9FTkNPRElOR19NU19CSUc1ICAgID0gRlRfRU5DT0RJTkdfQklHNSwKKyAgICBGVF9FTkNPRElOR19NU19XQU5TVU5HID0gRlRfRU5DT0RJTkdfV0FOU1VORywKKyAgICBGVF9FTkNPRElOR19NU19KT0hBQiAgID0gRlRfRU5DT0RJTkdfSk9IQUIsCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRCwgJ0EnLCAnRCcsICdPJywgJ0InICksCisgICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJULCAgICdBJywgJ0QnLCAnQicsICdFJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTSwgICAnQScsICdEJywgJ0InLCAnQycgKSwKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xLCAgJ2wnLCAnYScsICd0JywgJzEnICksCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19PTERfTEFUSU5fMiwgJ2wnLCAnYScsICd0JywgJzInICksCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgJ2EnLCAncicsICdtJywgJ24nICkKKworICB9IEZUX0VuY29kaW5nOworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYEZUX0VuY29kaW5nJyAqLworICAvKiB2YWx1ZXMgaW5zdGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X2VuY29kaW5nX25vbmUgICAgICAgICAgICBGVF9FTkNPRElOR19OT05FCisjZGVmaW5lIGZ0X2VuY29kaW5nX3VuaWNvZGUgICAgICAgICBGVF9FTkNPRElOR19VTklDT0RFCisjZGVmaW5lIGZ0X2VuY29kaW5nX3N5bWJvbCAgICAgICAgICBGVF9FTkNPRElOR19NU19TWU1CT0wKKyNkZWZpbmUgZnRfZW5jb2RpbmdfbGF0aW5fMSAgICAgICAgIEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzEKKyNkZWZpbmUgZnRfZW5jb2RpbmdfbGF0aW5fMiAgICAgICAgIEZUX0VOQ09ESU5HX09MRF9MQVRJTl8yCisjZGVmaW5lIGZ0X2VuY29kaW5nX3NqaXMgICAgICAgICAgICBGVF9FTkNPRElOR19TSklTCisjZGVmaW5lIGZ0X2VuY29kaW5nX2diMjMxMiAgICAgICAgICBGVF9FTkNPRElOR19HQjIzMTIKKyNkZWZpbmUgZnRfZW5jb2RpbmdfYmlnNSAgICAgICAgICAgIEZUX0VOQ09ESU5HX0JJRzUKKyNkZWZpbmUgZnRfZW5jb2Rpbmdfd2Fuc3VuZyAgICAgICAgIEZUX0VOQ09ESU5HX1dBTlNVTkcKKyNkZWZpbmUgZnRfZW5jb2Rpbmdfam9oYWIgICAgICAgICAgIEZUX0VOQ09ESU5HX0pPSEFCCisKKyNkZWZpbmUgZnRfZW5jb2RpbmdfYWRvYmVfc3RhbmRhcmQgIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJECisjZGVmaW5lIGZ0X2VuY29kaW5nX2Fkb2JlX2V4cGVydCAgICBGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQKKyNkZWZpbmUgZnRfZW5jb2RpbmdfYWRvYmVfY3VzdG9tICAgIEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTQorI2RlZmluZSBmdF9lbmNvZGluZ19hcHBsZV9yb21hbiAgICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NoYXJNYXBSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBiYXNlIGNoYXJtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZW5jb2RpbmcgICAgOjogQW4gQEZUX0VuY29kaW5nIHRhZyBpZGVudGlmeWluZyB0aGUgY2hhcm1hcC4gIFVzZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHRoaXMgd2l0aCBARlRfU2VsZWN0X0NoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGxhdGZvcm1faWQgOjogQW4gSUQgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIHBsYXRmb3JtIGZvciB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBlbmNvZGluZyBJRC4gIFRoaXMgY29tZXMgZGlyZWN0bHkgZnJvbSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGVtdWxhdGVkICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZm9yIG90aGVyIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBlbmNvZGluZ19pZCA6OiBBIHBsYXRmb3JtIHNwZWNpZmljIGVuY29kaW5nIG51bWJlci4gIFRoaXMgYWxzbyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlICovCisgIC8qICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkIHNpbWlsYXJseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0NoYXJNYXBSZWNfCisgIHsKKyAgICBGVF9GYWNlICAgICAgZmFjZTsKKyAgICBGVF9FbmNvZGluZyAgZW5jb2Rpbmc7CisgICAgRlRfVVNob3J0ICAgIHBsYXRmb3JtX2lkOworICAgIEZUX1VTaG9ydCAgICBlbmNvZGluZ19pZDsKKworICB9IEZUX0NoYXJNYXBSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgQiBBIFMgRSAgIE8gQiBKIEUgQyBUICAgQyBMIEEgUyBTIEUgUyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gYEZUX0ZhY2VfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZSwgdXNlZCB0byAgICAqLworICAvKiAgICBtb2RlbCBwcml2YXRlIGRhdGEgb2YgYSBnaXZlbiBARlRfRmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc3RydWN0dXJlIG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzIG9mIEZyZWVUeXBlfjIgYW5kIGlzICAqLworICAvKiAgICBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0byBjbGllbnQgYXBwbGljYXRpb25zLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VfSW50ZXJuYWxSZWNfKiAgRlRfRmFjZV9JbnRlcm5hbDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIHJvb3QgZmFjZSBjbGFzcyBzdHJ1Y3R1cmUuICBBIGZhY2Ugb2JqZWN0IG1vZGVscyBhICAgICAgICAqLworICAvKiAgICB0eXBlZmFjZSBpbiBhIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZmFjZXMgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZmFjZXMgaW4gdGhlIGZvbnQgZmlsZS4gIFNvbWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZXMgaW4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCAgICAgICAgICA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlIGZvbnQgZmlsZS4gIEl0ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUgZmFjZSBpbiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfZmxhZ3MgICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIHRoYXQgZ2l2ZSBpbXBvcnRhbnQgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWNlOyBzZWUgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX1hYWCBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHlsZV9mbGFncyAgICAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFjZTsgc2VlIEBGVF9TVFlMRV9GTEFHX1hYWCBmb3IgdGhlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2dseXBocyAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZmFjZS4gIElmIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSBpcyBzY2FsYWJsZSBhbmQgaGFzIHNiaXRzIChzZWUgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBudW1fZml4ZWRfc2l6ZXMnKSwgaXQgaXMgc2V0IHRvIHRoZSBudW1iZXIgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBvdXRsaW5lIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDSUQta2V5ZWQgZm9udHMsIHRoaXMgdmFsdWUgZ2l2ZXMgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0IENJRCB1c2VkIGluIHRoZSBmb250LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYW1pbHlfbmFtZSAgICAgICAgIDo6IFRoZSBmYWNlJ3MgZmFtaWx5IG5hbWUuICBUaGlzIGlzIGFuIEFTQ0lJICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHVzdWFsbHkgaW4gRW5nbGlzaCwgdGhhdCBkZXNjcmliZXMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR5cGVmYWNlJ3MgZmFtaWx5IChsaWtlIGBUaW1lcyBOZXcgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvbWFuJywgYEJvZG9uaScsIGBHYXJhbW9uZCcsIGV0YykuICBUaGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhIGxlYXN0IGNvbW1vbiBkZW5vbWluYXRvciB1c2VkIHRvIGxpc3QgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udHMuICBTb21lIGZvcm1hdHMgKFRydWVUeXBlICYgT3BlblR5cGUpICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgbG9jYWxpemVkIGFuZCBVbmljb2RlIHZlcnNpb25zIG9mICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHN0cmluZy4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHNwZWNpZmljIGludGVyZmFjZSB0byBhY2Nlc3MgdGhlbS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBOVUxMIChlLmcuLCBpbiBmb250cyBlbWJlZGRlZCBpbiBhICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBQREYgZmlsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2UgdGhlIGZvbnQgZG9lc24ndCBwcm92aWRlIGEgc3BlY2lmaWMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgbmFtZSBlbnRyeSwgRnJlZVR5cGUgdHJpZXMgdG8gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZSBvbmUsIGRlcml2aW5nIGl0IGZyb20gb3RoZXIgbmFtZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0eWxlX25hbWUgICAgICAgICAgOjogVGhlIGZhY2UncyBzdHlsZSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgdXN1YWxseSBpbiBFbmdsaXNoLCB0aGF0IGRlc2NyaWJlcyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZWZhY2UncyBzdHlsZSAobGlrZSBgSXRhbGljJywgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJvbGQnLCBgQ29uZGVuc2VkJywgZXRjKS4gIE5vdCBhbGwgZm9udCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMgcHJvdmlkZSBhIHN0eWxlIG5hbWUsIHNvIHRoaXMgZmllbGQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbCwgYW5kIGNhbiBiZSBzZXQgdG8gTlVMTC4gIEFzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGBmYW1pbHlfbmFtZScsIHNvbWUgZm9ybWF0cyBwcm92aWRlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZCBhbmQgVW5pY29kZSB2ZXJzaW9ucyBvZiB0aGlzICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuICBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgZm9ybWF0ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGVtLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2ZpeGVkX3NpemVzICAgICA6OiBUaGUgbnVtYmVyIG9mIGJpdG1hcCBzdHJpa2VzIGluIHRoZSBmYWNlLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiB0aGUgZmFjZSBpcyBzY2FsYWJsZSwgdGhlcmUgbWlnaHQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGJlIGJpdG1hcCBzdHJpa2VzLCB3aGljaCBhcmUgY2FsbGVkICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgc2JpdHMnIGluIHRoYXQgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhdmFpbGFibGVfc2l6ZXMgICAgIDo6IEFuIGFycmF5IG9mIEBGVF9CaXRtYXBfU2l6ZSBmb3IgYWxsIGJpdG1hcCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VzIGluIHRoZSBmYWNlLiAgSXQgaXMgc2V0IHRvIE5VTEwgaWYgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gYml0bWFwIHN0cmlrZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2NoYXJtYXBzICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGNoYXJtYXBzIGluIHRoZSBmYWNlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFybWFwcyAgICAgICAgICAgIDo6IEFuIGFycmF5IG9mIHRoZSBjaGFybWFwcyBvZiB0aGUgZmFjZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdlbmVyaWMgICAgICAgICAgICAgOjogQSBmaWVsZCByZXNlcnZlZCBmb3IgY2xpZW50IHVzZXMuICBTZWUgdGhlICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HZW5lcmljIHR5cGUgZGVzY3JpcHRpb24uICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJib3ggICAgICAgICAgICAgICAgOjogVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzIChzZWUgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgdW5pdHNfcGVyX0VNJykuICBUaGUgYm94IGlzIGxhcmdlIGVub3VnaCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29udGFpbiBhbnkgZ2x5cGggZnJvbSB0aGUgZm9udC4gIFRodXMsICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBiYm94LnlNYXgnIGNhbiBiZSBzZWVuIGFzIHRoZSBgbWF4aW11bSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbmRlcicsIGFuZCBgYmJveC55TWluJyBhcyB0aGUgYG1pbmltdW0gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVyJy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBib3VuZGluZyBib3ggbWlnaHQgYmUgb2ZmIGJ5ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdCBsZWFzdCkgb25lIHBpeGVsIGZvciBoaW50ZWQgZm9udHMuICBTZWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU2l6ZV9NZXRyaWNzIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1bml0c19wZXJfRU0gICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZm9udCB1bml0cyBwZXIgRU0gc3F1YXJlIGZvciAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZhY2UuICBUaGlzIGlzIHR5cGljYWxseSAyMDQ4IGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgZm9udHMsIGFuZCAxMDAwIGZvciBUeXBlfjEgZm9udHMuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFzY2VuZGVyICAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGFzY2VuZGVyIG9mIHRoZSBmYWNlLCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgRm9yIGZvbnQgZm9ybWF0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0byAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1heCcuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlc2NlbmRlciAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGRlc2NlbmRlciBvZiB0aGUgZmFjZSwgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgRm9yIGZvbnQgZm9ybWF0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0byAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1pbicuICBOb3RlIHRoYXQgdGhpcyBmaWVsZCBpcyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgbmVnYXRpdmUuICBPbmx5IHJlbGV2YW50IGZvciAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgICAgICAgIDo6IFRoaXMgdmFsdWUgaXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBiYXNlbGluZXMsICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBJdCBpcyBhbHdheXMgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBnbG9iYWwgZ2x5cGggaGVpZ2h0LCB1c2UgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgYXNjZW5kZXIgLSBkZXNjZW5kZXInLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfYWR2YW5jZV93aWR0aCAgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGgsIGluIGZvbnQgdW5pdHMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGdseXBocyBpbiB0aGlzIGZhY2UuICBUaGlzIGNhbiBiZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBtYWtlIHdvcmQgd3JhcHBpbmcgY29tcHV0YXRpb25zICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3Rlci4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfYWR2YW5jZV9oZWlnaHQgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2UgaGVpZ2h0LCBpbiBmb250IHVuaXRzLCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGdseXBocyBpbiB0aGlzIGZhY2UuICBUaGlzIGlzIG9ubHkgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZm9yIHZlcnRpY2FsIGxheW91dHMsIGFuZCBpcyBzZXQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGBoZWlnaHQnIGZvciBmb250cyB0aGF0IGRvIG5vdCBwcm92aWRlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBtZXRyaWNzLiAgT25seSByZWxldmFudCBmb3IgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdW5kZXJsaW5lX3Bvc2l0aW9uICA6OiBUaGUgcG9zaXRpb24sIGluIGZvbnQgdW5pdHMsIG9mIHRoZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lIGxpbmUgZm9yIHRoaXMgZmFjZS4gIEl0IGlzIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlciBvZiB0aGUgdW5kZXJsaW5pbmcgc3RlbS4gIE9ubHkgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1bmRlcmxpbmVfdGhpY2tuZXNzIDo6IFRoZSB0aGlja25lc3MsIGluIGZvbnQgdW5pdHMsIG9mIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUgZm9yIHRoaXMgZmFjZS4gIE9ubHkgcmVsZXZhbnQgZm9yICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGggICAgICAgICAgICAgICA6OiBUaGUgZmFjZSdzIGFzc29jaWF0ZWQgZ2x5cGggc2xvdChzKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgICAgICAgICAgIDo6IFRoZSBjdXJyZW50IGFjdGl2ZSBzaXplIGZvciB0aGlzIGZhY2UuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJtYXAgICAgICAgICAgICAgOjogVGhlIGN1cnJlbnQgYWN0aXZlIGNoYXJtYXAgZm9yIHRoaXMgZmFjZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpZWxkcyBtYXkgYmUgY2hhbmdlZCBhZnRlciBhIGNhbGwgdG8gQEZUX0F0dGFjaF9GaWxlIG9yICAgICAgICAgICAqLworICAvKiAgICBARlRfQXR0YWNoX1N0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9GYWNlUmVjXworICB7CisgICAgRlRfTG9uZyAgICAgICAgICAgbnVtX2ZhY2VzOworICAgIEZUX0xvbmcgICAgICAgICAgIGZhY2VfaW5kZXg7CisKKyAgICBGVF9Mb25nICAgICAgICAgICBmYWNlX2ZsYWdzOworICAgIEZUX0xvbmcgICAgICAgICAgIHN0eWxlX2ZsYWdzOworCisgICAgRlRfTG9uZyAgICAgICAgICAgbnVtX2dseXBoczsKKworICAgIEZUX1N0cmluZyogICAgICAgIGZhbWlseV9uYW1lOworICAgIEZUX1N0cmluZyogICAgICAgIHN0eWxlX25hbWU7CisKKyAgICBGVF9JbnQgICAgICAgICAgICBudW1fZml4ZWRfc2l6ZXM7CisgICAgRlRfQml0bWFwX1NpemUqICAgYXZhaWxhYmxlX3NpemVzOworCisgICAgRlRfSW50ICAgICAgICAgICAgbnVtX2NoYXJtYXBzOworICAgIEZUX0NoYXJNYXAqICAgICAgIGNoYXJtYXBzOworCisgICAgRlRfR2VuZXJpYyAgICAgICAgZ2VuZXJpYzsKKworICAgIC8qIyBUaGUgZm9sbG93aW5nIG1lbWJlciB2YXJpYWJsZXMgKGRvd24gdG8gYHVuZGVybGluZV90aGlja25lc3MnKSAqLworICAgIC8qIyBhcmUgb25seSByZWxldmFudCB0byBzY2FsYWJsZSBvdXRsaW5lczsgY2YuIEBGVF9CaXRtYXBfU2l6ZSAgICAqLworICAgIC8qIyBmb3IgYml0bWFwIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0JCb3ggICAgICAgICAgIGJib3g7CisKKyAgICBGVF9VU2hvcnQgICAgICAgICB1bml0c19wZXJfRU07CisgICAgRlRfU2hvcnQgICAgICAgICAgYXNjZW5kZXI7CisgICAgRlRfU2hvcnQgICAgICAgICAgZGVzY2VuZGVyOworICAgIEZUX1Nob3J0ICAgICAgICAgIGhlaWdodDsKKworICAgIEZUX1Nob3J0ICAgICAgICAgIG1heF9hZHZhbmNlX3dpZHRoOworICAgIEZUX1Nob3J0ICAgICAgICAgIG1heF9hZHZhbmNlX2hlaWdodDsKKworICAgIEZUX1Nob3J0ICAgICAgICAgIHVuZGVybGluZV9wb3NpdGlvbjsKKyAgICBGVF9TaG9ydCAgICAgICAgICB1bmRlcmxpbmVfdGhpY2tuZXNzOworCisgICAgRlRfR2x5cGhTbG90ICAgICAgZ2x5cGg7CisgICAgRlRfU2l6ZSAgICAgICAgICAgc2l6ZTsKKyAgICBGVF9DaGFyTWFwICAgICAgICBjaGFybWFwOworCisgICAgLypAcHJpdmF0ZSBiZWdpbiAqLworCisgICAgRlRfRHJpdmVyICAgICAgICAgZHJpdmVyOworICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeTsKKyAgICBGVF9TdHJlYW0gICAgICAgICBzdHJlYW07CisKKyAgICBGVF9MaXN0UmVjICAgICAgICBzaXplc19saXN0OworCisgICAgRlRfR2VuZXJpYyAgICAgICAgYXV0b2hpbnQ7ICAgLyogZmFjZS1zcGVjaWZpYyBhdXRvLWhpbnRlciBkYXRhICovCisgICAgdm9pZCogICAgICAgICAgICAgZXh0ZW5zaW9uczsgLyogdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbDsKKworICAgIC8qQHByaXZhdGUgZW5kICovCisKKyAgfSBGVF9GYWNlUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBsaXN0IG9mIGJpdCBmbGFncyB1c2VkIGluIHRoZSBgZmFjZV9mbGFncycgZmllbGQgb2YgdGhlICAgICAgICAgICovCisgIC8qICAgIEBGVF9GYWNlUmVjIHN0cnVjdHVyZS4gIFRoZXkgaW5mb3JtIGNsaWVudCBhcHBsaWNhdGlvbnMgb2YgICAgICAgICAqLworICAvKiAgICBwcm9wZXJ0aWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyBvdXRsaW5lIGdseXBocy4gIFRoaXMgZG9lc24ndCAgICovCisgIC8qICAgICAgcHJldmVudCBiaXRtYXAgc3RyaWtlcywgaS5lLiwgYSBmYWNlIGNhbiBoYXZlIGJvdGggdGhpcyBhbmQgICAgICAqLworICAvKiAgICAgIGFuZCBARlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGJpdG1hcCBzdHJpa2VzLiAgU2VlIGFsc28gdGhlICAgKi8KKyAgLyogICAgICBgbnVtX2ZpeGVkX3NpemVzJyBhbmQgYGF2YWlsYWJsZV9zaXplcycgZmllbGRzIG9mIEBGVF9GYWNlUmVjLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyBmaXhlZC13aWR0aCBjaGFyYWN0ZXJzIChsaWtlICAgICovCisgIC8qICAgICAgQ291cmllciwgTHVjaWRvLCBNb25vVHlwZSwgZXRjLikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1NGTlQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgdXNlcyB0aGUgYHNmbnQnIHN0b3JhZ2Ugc2NoZW1lLiAgRm9yICAgICAqLworICAvKiAgICAgIG5vdywgdGhpcyBtZWFucyBUcnVlVHlwZSBhbmQgT3BlblR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGhvcml6b250YWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgKi8KKyAgLyogICAgICBzaG91bGQgYmUgc2V0IGZvciBhbGwgY29tbW9uIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyB2ZXJ0aWNhbCBnbHlwaCBtZXRyaWNzLiAgVGhpcyAgICovCisgIC8qICAgICAgaXMgb25seSBhdmFpbGFibGUgaW4gc29tZSBmb3JtYXRzLCBub3QgYWxsIG9mIHRoZW0uICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0tFUk5JTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMga2VybmluZyBpbmZvcm1hdGlvbi4gIElmIHNldCwgICAqLworICAvKiAgICAgIHRoZSBrZXJuaW5nIGRpc3RhbmNlIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgZnVuY3Rpb24gICAgICAgKi8KKyAgLyogICAgICBARlRfR2V0X0tlcm5pbmcuICBPdGhlcndpc2UgdGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gdGhlICAgICAgICovCisgIC8qICAgICAgdmVjdG9yICgwLDApLiAgTm90ZSB0aGF0IEZyZWVUeXBlIGRvZXNuJ3QgaGFuZGxlIGtlcm5pbmcgZGF0YSAgICAqLworICAvKiAgICAgIGZyb20gdGhlIGBHUE9TJyB0YWJsZSAoYXMgcHJlc2VudCBpbiBzb21lIE9wZW5UeXBlIGZvbnRzKS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19GQVNUX0dMWVBIUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRISVMgRkxBRyBJUyBERVBSRUNBVEVELiAgRE8gTk9UIFVTRSBPUiBURVNUIElULiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmb250IGNvbnRhaW5zIG11bHRpcGxlIG1hc3RlcnMgYW5kIGlzIGNhcGFibGUgKi8KKyAgLyogICAgICBvZiBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdGhlbS4gIFNlZSB0aGUgbXVsdGlwbGUtbWFzdGVycyAgICAgICAgICovCisgIC8qICAgICAgc3BlY2lmaWMgQVBJIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZvbnQgY29udGFpbnMgZ2x5cGggbmFtZXMgdGhhdCBjYW4gYmUgICAgICAgICAqLworICAvKiAgICAgIHJldHJpZXZlZCB0aHJvdWdoIEBGVF9HZXRfR2x5cGhfTmFtZS4gIE5vdGUgdGhhdCBzb21lIFRydWVUeXBlICAgKi8KKyAgLyogICAgICBmb250cyBjb250YWluIGJyb2tlbiBnbHlwaCBuYW1lIHRhYmxlcy4gIFVzZSB0aGUgZnVuY3Rpb24gICAgICAgICovCisgIC8qICAgICAgQEZUX0hhc19QU19HbHlwaF9OYW1lcyB3aGVuIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVXNlZCBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlIHRvIGluZGljYXRlIHRoYXQgYSBmYWNlJ3Mgc3RyZWFtIHdhcyAqLworICAvKiAgICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gYW5kIHNob3VsZCBub3QgYmUgZGVzdHJveWVkICAgKi8KKyAgLyogICAgICB3aGVuIEBGVF9Eb25lX0ZhY2UgaXMgY2FsbGVkLiAgRG9uJ3QgcmVhZCBvciB0ZXN0IHRoaXMgZmxhZy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfSElOVEVSIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTZXQgaWYgdGhlIGZvbnQgZHJpdmVyIGhhcyBhIGhpbnRpbmcgbWFjaGluZSBvZiBpdHMgb3duLiAgRm9yICAgICovCisgIC8qICAgICAgZXhhbXBsZSwgd2l0aCBUcnVlVHlwZSBmb250cywgaXQgbWFrZXMgc2Vuc2UgdG8gdXNlIGRhdGEgZnJvbSAgICAqLworICAvKiAgICAgIHRoZSBTRk5UIGBnYXNwJyB0YWJsZSBvbmx5IGlmIHRoZSBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBlbmdpbmUgKi8KKyAgLyogICAgICAod2l0aCB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIpIGlzIGF2YWlsYWJsZSBhbmQgYWN0aXZlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTZXQgaWYgdGhlIGZvbnQgaXMgQ0lELWtleWVkLiAgSW4gdGhhdCBjYXNlLCB0aGUgZm9udCBpcyBub3QgICAgICovCisgIC8qICAgICAgYWNjZXNzZWQgYnkgZ2x5cGggaW5kaWNlcyBidXQgYnkgQ0lEIHZhbHVlcy4gIEZvciBzdWJzZXR0ZWQgICAgICAqLworICAvKiAgICAgIENJRC1rZXllZCBmb250cyB0aGlzIGhhcyB0aGUgY29uc2VxdWVuY2UgdGhhdCBub3QgYWxsIGluZGV4ICAgICAgKi8KKyAgLyogICAgICB2YWx1ZXMgYXJlIGEgdmFsaWQgYXJndW1lbnQgdG8gRlRfTG9hZF9HbHlwaC4gIE9ubHkgdGhlIENJRCAgICAgICovCisgIC8qICAgICAgdmFsdWVzIGZvciB3aGljaCBjb3JyZXNwb25kaW5nIGdseXBocyBpbiB0aGUgc3Vic2V0dGVkIGZvbnQgICAgICAqLworICAvKiAgICAgIGV4aXN0IG1ha2UgRlRfTG9hZF9HbHlwaCByZXR1cm4gc3VjY2Vzc2Z1bGx5OyBpbiBhbGwgb3RoZXIgY2FzZXMgKi8KKyAgLyogICAgICB5b3UgZ2V0IGFuIGBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCcgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIE5vdGUgdGhhdCBDSUQta2V5ZWQgZm9udHMgdGhhdCBhcmUgaW4gYW4gU0ZOVCB3cmFwcGVyIGRvbid0ICAgICAgKi8KKyAgLyogICAgICBoYXZlIHRoaXMgZmxhZyBzZXQgc2luY2UgdGhlIGdseXBocyBhcmUgYWNjZXNzZWQgaW4gdGhlIG5vcm1hbCAgICovCisgIC8qICAgICAgd2F5ICh1c2luZyBjb250aWd1b3VzIGluZGljZXMpOyB0aGUgYENJRC1uZXNzJyBpc24ndCB2aXNpYmxlIHRvICAqLworICAvKiAgICAgIHRoZSBhcHBsaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19UUklDS1kgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFNldCBpZiB0aGUgZm9udCBpcyBgdHJpY2t5JywgdGhpcyBpcywgaXQgYWx3YXlzIG5lZWRzIHRoZSAgICAgICAgKi8KKyAgLyogICAgICBmb250IGZvcm1hdCdzIG5hdGl2ZSBoaW50aW5nIGVuZ2luZSB0byBnZXQgYSByZWFzb25hYmxlIHJlc3VsdC4gICovCisgIC8qICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgaXMgdGhlIENoaW5lc2UgZm9udCBgbWluZ2xpLnR0ZicgdGhhdCB1c2VzICAgICAqLworICAvKiAgICAgIFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0byBtb3ZlIGFuZCBzY2FsZSBhbGwgb2YgaXRzICAgICAgKi8KKyAgLyogICAgICBzdWJnbHlwaHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWhpbnQgc3VjaCBmb250cyB1c2luZyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBARlRfTE9BRF9GT1JDRV9BVVRPSElOVDsgaXQgd2lsbCBhbHNvIGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX0xPQURfTk9fSElOVElORy4gIFlvdSBoYXZlIHRvIHNldCBib3RoIEBGVF9MT0FEX05PX0hJTlRJTkcgICAqLworICAvKiAgICAgIGFuZCBARlRfTE9BRF9OT19BVVRPSElOVCB0byByZWFsbHkgZGlzYWJsZSBoaW50aW5nOyBob3dldmVyLCB5b3UgKi8KKyAgLyogICAgICBwcm9iYWJseSBuZXZlciB3YW50IHRoaXMgZXhjZXB0IGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEN1cnJlbnRseSwgdGhlcmUgYXJlIGFib3V0IGEgZG96ZW4gVHJ1ZVR5cGUgZm9udHMgaW4gdGhlIGxpc3Qgb2YgKi8KKyAgLyogICAgICB0cmlja3kgZm9udHM7IHRoZXkgYXJlIGhhcmQtY29kZWQgaW4gZmlsZSBgdHRvYmpzLmMnLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfQ09MT1IgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTZXQgaWYgdGhlIGZvbnQgaGFzIGNvbG9yIGdseXBoIHRhYmxlcy4gIFRvIGFjY2VzcyBjb2xvciBnbHlwaHMgICovCisgIC8qICAgICAgdXNlIEBGVF9MT0FEX0NPTE9SLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICAgICAgICAgICggMUwgPDwgIDAgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgICAgICAgKCAxTCA8PCAgMSApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCAgICAgICAoIDFMIDw8ICAyICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX1NGTlQgICAgICAgICAgICAgICggMUwgPDwgIDMgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgICAgICAgKCAxTCA8PCAgNCApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCAgICAgICAgICAoIDFMIDw8ICA1ICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0tFUk5JTkcgICAgICAgICAgICggMUwgPDwgIDYgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgICAgICAgKCAxTCA8PCAgNyApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICAoIDFMIDw8ICA4ICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICggMUwgPDwgIDkgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgKCAxTCA8PCAxMCApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19ISU5URVIgICAgICAgICAgICAoIDFMIDw8IDExICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCAgICAgICAgICggMUwgPDwgMTIgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgKCAxTCA8PCAxMyApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19DT0xPUiAgICAgICAgICAgICAoIDFMIDw8IDE0ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfSE9SSVpPTlRBTCggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMKKyAgICogICBob3Jpem9udGFsIG1ldHJpY3MgKHRoaXMgaXMgdHJ1ZSBmb3IgYWxsIGZvbnQgZm9ybWF0cyB0aG91Z2gpLgorICAgKgorICAgKiBAYWxzbzoKKyAgICogICBARlRfSEFTX1ZFUlRJQ0FMIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB2ZXJ0aWNhbCBtZXRyaWNzLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSEFTX0hPUklaT05UQUwoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0hBU19WRVJUSUNBTCggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgcmVhbAorICAgKiAgIHZlcnRpY2FsIG1ldHJpY3MgKGFuZCBub3Qgb25seSBzeW50aGVzaXplZCBvbmVzKS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hBU19WRVJUSUNBTCggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0hBU19LRVJOSU5HKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBrZXJuaW5nCisgICAqICAgZGF0YSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB3aXRoIEBGVF9HZXRfS2VybmluZy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hBU19LRVJOSU5HKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19LRVJOSU5HICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9JU19TQ0FMQUJMRSggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBzY2FsYWJsZQorICAgKiAgIGZvbnQgZmFjZSAodHJ1ZSBmb3IgVHJ1ZVR5cGUsIFR5cGV+MSwgVHlwZX40MiwgQ0lELCBPcGVuVHlwZS9DRkYsCisgICAqICAgYW5kIFBGUiBmb250IGZvcm1hdHMuCisgICAqCisgICAqLworI2RlZmluZSBGVF9JU19TQ0FMQUJMRSggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX1NGTlQoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgZm9udAorICAgKiAgIHdob3NlIGZvcm1hdCBpcyBiYXNlZCBvbiB0aGUgU0ZOVCBzdG9yYWdlIHNjaGVtZS4gIFRoaXMgdXN1YWxseQorICAgKiAgIG1lYW5zOiBUcnVlVHlwZSBmb250cywgT3BlblR5cGUgZm9udHMsIGFzIHdlbGwgYXMgU0ZOVC1iYXNlZCBlbWJlZGRlZAorICAgKiAgIGJpdG1hcCBmb250cy4KKyAgICoKKyAgICogICBJZiB0aGlzIG1hY3JvIGlzIHRydWUsIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBARlRfU0ZOVF9OQU1FU19IIGFuZAorICAgKiAgIEBGVF9UUlVFVFlQRV9UQUJMRVNfSCBhcmUgYXZhaWxhYmxlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSVNfU0ZOVCggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSVNfRklYRURfV0lEVEgoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgZm9udCBmYWNlCisgICAqICAgdGhhdCBjb250YWlucyBmaXhlZC13aWR0aCAob3IgYG1vbm9zcGFjZScsIGBmaXhlZC1waXRjaCcsIGV0Yy4pCisgICAqICAgZ2x5cGhzLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSVNfRklYRURfV0lEVEgoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHNvbWUKKyAgICogICBlbWJlZGRlZCBiaXRtYXBzLiAgU2VlIHRoZSBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiB0aGUKKyAgICogICBARlRfRmFjZVJlYyBzdHJ1Y3R1cmUuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfRkFTVF9HTFlQSFMoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGVwcmVjYXRlZC4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hBU19GQVNUX0dMWVBIUyggZmFjZSApICAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSEFTX0dMWVBIX05BTUVTKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lIGdseXBoCisgICAqICAgbmFtZXMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBARlRfR2V0X0dseXBoX05hbWUuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfR0xZUEhfTkFNRVMoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfTVVMVElQTEVfTUFTVEVSUyggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgc29tZQorICAgKiAgIG11bHRpcGxlIG1hc3RlcnMuICBUaGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IEBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyAgICogICBhcmUgdGhlbiBhdmFpbGFibGUgdG8gY2hvb3NlIHRoZSBleGFjdCBkZXNpZ24geW91IHdhbnQuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfTVVMVElQTEVfTUFTVEVSUyggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUyApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSVNfQ0lEX0tFWUVEKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBhIENJRC1rZXllZAorICAgKiAgIGZvbnQuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgQEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgZm9yIG1vcmUKKyAgICogICBkZXRhaWxzLgorICAgKgorICAgKiAgIElmIHRoaXMgbWFjcm8gaXMgdHJ1ZSwgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIEBGVF9DSURfSCBhcmUKKyAgICogICBhdmFpbGFibGUuCisgICAqCisgICAqLworI2RlZmluZSBGVF9JU19DSURfS0VZRUQoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSVNfVFJJQ0tZKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIHJlcHJlc2VudHMgYSBgdHJpY2t5JyBmb250LgorICAgKiAgIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiBARlRfRkFDRV9GTEFHX1RSSUNLWSBmb3IgbW9yZSBkZXRhaWxzLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSVNfVFJJQ0tZKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0hBU19DT0xPUiggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMKKyAgICogICB0YWJsZXMgZm9yIGNvbG9yIGdseXBocy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hBU19DT0xPUiggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfQ09MT1IgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Q29uc3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU1RZTEVfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBsaXN0IG9mIGJpdC1mbGFncyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdHlsZSBvZiBhIGdpdmVuIGZhY2UuICAgICovCisgIC8qICAgIFRoZXNlIGFyZSB1c2VkIGluIHRoZSBgc3R5bGVfZmxhZ3MnIGZpZWxkIG9mIEBGVF9GYWNlUmVjLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NUWUxFX0ZMQUdfSVRBTElDIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IGEgZ2l2ZW4gZmFjZSBzdHlsZSBpcyBpdGFsaWMgb3Igb2JsaXF1ZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NUWUxFX0ZMQUdfQk9MRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IGEgZ2l2ZW4gZmFjZSBpcyBib2xkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc3R5bGUgaW5mb3JtYXRpb24gYXMgcHJvdmlkZWQgYnkgRnJlZVR5cGUgaXMgdmVyeSBiYXNpYy4gIE1vcmUgKi8KKyAgLyogICAgZGV0YWlscyBhcmUgYmV5b25kIHRoZSBzY29wZSBhbmQgc2hvdWxkIGJlIGRvbmUgb24gYSBoaWdoZXIgbGV2ZWwgICovCisgIC8qICAgIChmb3IgZXhhbXBsZSwgYnkgYW5hbHl6aW5nIHZhcmlvdXMgZmllbGRzIG9mIHRoZSBgT1MvMicgdGFibGUgaW4gICAqLworICAvKiAgICBTRk5UIGJhc2VkIGZvbnRzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1NUWUxFX0ZMQUdfSVRBTElDICAoIDEgPDwgMCApCisjZGVmaW5lIEZUX1NUWUxFX0ZMQUdfQk9MRCAgICAoIDEgPDwgMSApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIGBGVF9TaXplX0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUsIHVzZWQgdG8gICAgKi8KKyAgLyogICAgbW9kZWwgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gQEZUX1NpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TaXplX0ludGVybmFsUmVjXyogIEZUX1NpemVfSW50ZXJuYWw7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc2l6ZSBtZXRyaWNzIHN0cnVjdHVyZSBnaXZlcyB0aGUgbWV0cmljcyBvZiBhIHNpemUgb2JqZWN0LiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4X3BwZW0gICAgICAgOjogVGhlIHdpZHRoIG9mIHRoZSBzY2FsZWQgRU0gc3F1YXJlIGluIHBpeGVscywgaGVuY2UgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtIGBwcGVtJyAocGl4ZWxzIHBlciBFTSkuICBJdCBpcyBhbHNvICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICByZWZlcnJlZCB0byBhcyBgbm9taW5hbCB3aWR0aCcuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeV9wcGVtICAgICAgIDo6IFRoZSBoZWlnaHQgb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBoZW5jZSB0aGUgdGVybSBgcHBlbScgKHBpeGVscyBwZXIgRU0pLiAgSXQgaXMgYWxzbyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgYG5vbWluYWwgaGVpZ2h0Jy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhfc2NhbGUgICAgICA6OiBBIDE2LjE2IGZyYWN0aW9uYWwgc2NhbGluZyB2YWx1ZSB1c2VkIHRvIGNvbnZlcnQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbCBtZXRyaWNzIGZyb20gZm9udCB1bml0cyB0byAyNi42ICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeV9zY2FsZSAgICAgIDo6IEEgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlIHVzZWQgdG8gY29udmVydCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBtZXRyaWNzIGZyb20gZm9udCB1bml0cyB0byAyNi42ICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25hbCBwaXhlbHMuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGZvbnQgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhc2NlbmRlciAgICAgOjogVGhlIGFzY2VuZGVyIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICBTZWUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZXNjZW5kZXIgICAgOjogVGhlIGRlc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLiAgU2VlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgOjogVGhlIGhlaWdodCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLiAgU2VlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfYWR2YW5jZSAgOjogVGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCBpbiAyNi42IGZyYWN0aW9uYWwgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHBpeGVscy4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHNjYWxpbmcgdmFsdWVzLCBpZiByZWxldmFudCwgYXJlIGRldGVybWluZWQgZmlyc3QgZHVyaW5nIGEgICAgICovCisgIC8qICAgIHNpemUgY2hhbmdpbmcgb3BlcmF0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZW4gc2V0IGJ5IHRoZSAqLworICAvKiAgICBkcml2ZXIuICBGb3Igc2NhbGFibGUgZm9ybWF0cywgdGhleSBhcmUgdXN1YWxseSBzZXQgdG8gc2NhbGVkICAgICAgKi8KKyAgLyogICAgdmFsdWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBpbiBARlRfRmFjZVJlYy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgZHVlIHRvIGdseXBoIGhpbnRpbmcsIHRoZXNlIHZhbHVlcyBtaWdodCBub3QgYmUgZXhhY3QgICAgKi8KKyAgLyogICAgZm9yIGNlcnRhaW4gZm9udHMuICBUaHVzIHRoZXkgbXVzdCBiZSB0cmVhdGVkIGFzIHVucmVsaWFibGUgICAgICAgICovCisgIC8qICAgIHdpdGggYW4gZXJyb3IgbWFyZ2luIG9mIGF0IGxlYXN0IG9uZSBwaXhlbCEgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5kZWVkLCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBleGFjdCBtZXRyaWNzIGlzIHRvIHJlbmRlciBfYWxsXyAgICovCisgIC8qICAgIGdseXBocy4gIEFzIHRoaXMgd291bGQgYmUgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBoaXQsIGl0IGlzIHVwIHRvICAqLworICAvKiAgICBjbGllbnQgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gc3VjaCBjb21wdXRhdGlvbnMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBGVF9TaXplX01ldHJpY3Mgc3RydWN0dXJlIGlzIHZhbGlkIGZvciBiaXRtYXAgZm9udHMgYWxzby4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVfTWV0cmljc18KKyAgeworICAgIEZUX1VTaG9ydCAgeF9wcGVtOyAgICAgIC8qIGhvcml6b250YWwgcGl4ZWxzIHBlciBFTSAgICAgICAgICAgICAgICovCisgICAgRlRfVVNob3J0ICB5X3BwZW07ICAgICAgLyogdmVydGljYWwgcGl4ZWxzIHBlciBFTSAgICAgICAgICAgICAgICAgKi8KKworICAgIEZUX0ZpeGVkICAgeF9zY2FsZTsgICAgIC8qIHNjYWxpbmcgdmFsdWVzIHVzZWQgdG8gY29udmVydCBmb250ICAgICovCisgICAgRlRfRml4ZWQgICB5X3NjYWxlOyAgICAgLyogdW5pdHMgdG8gMjYuNiBmcmFjdGlvbmFsIHBpeGVscyAgICAgICAgKi8KKworICAgIEZUX1BvcyAgICAgYXNjZW5kZXI7ICAgIC8qIGFzY2VuZGVyIGluIDI2LjYgZnJhYy4gcGl4ZWxzICAgICAgICAgICovCisgICAgRlRfUG9zICAgICBkZXNjZW5kZXI7ICAgLyogZGVzY2VuZGVyIGluIDI2LjYgZnJhYy4gcGl4ZWxzICAgICAgICAgKi8KKyAgICBGVF9Qb3MgICAgIGhlaWdodDsgICAgICAvKiB0ZXh0IGhlaWdodCBpbiAyNi42IGZyYWMuIHBpeGVscyAgICAgICAqLworICAgIEZUX1BvcyAgICAgbWF4X2FkdmFuY2U7IC8qIG1heCBob3Jpem9udGFsIGFkdmFuY2UsIGluIDI2LjYgcGl4ZWxzICovCisKKyAgfSBGVF9TaXplX01ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSByb290IHNpemUgY2xhc3Mgc3RydWN0dXJlLiAgQSBzaXplIG9iamVjdCBtb2RlbHMgYSBmYWNlICAgKi8KKyAgLyogICAgb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBIYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnZW5lcmljIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5IG9yICAgKi8KKyAgLyogICAgICAgICAgICAgICBhbnkgb2YgaXRzIGRyaXZlcnMuICBJdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHRvIGxpbmsgdGhlaXIgb3duIGRhdGEgdG8gZWFjaCBzaXplICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1ldHJpY3MgOjogTWV0cmljcyBmb3IgdGhpcyBzaXplIG9iamVjdC4gIFRoaXMgZmllbGQgaXMgcmVhZC1vbmx5LiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVSZWNfCisgIHsKKyAgICBGVF9GYWNlICAgICAgICAgICBmYWNlOyAgICAgIC8qIHBhcmVudCBmYWNlIG9iamVjdCAgICAgICAgICAgICAgKi8KKyAgICBGVF9HZW5lcmljICAgICAgICBnZW5lcmljOyAgIC8qIGdlbmVyaWMgcG9pbnRlciBmb3IgY2xpZW50IHVzZXMgKi8KKyAgICBGVF9TaXplX01ldHJpY3MgICBtZXRyaWNzOyAgIC8qIHNpemUgbWV0cmljcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9TaXplX0ludGVybmFsICBpbnRlcm5hbDsKKworICB9IEZUX1NpemVSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TdWJHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc3ViZ2x5cGggc3RydWN0dXJlIGlzIGFuIGludGVybmFsIG9iamVjdCB1c2VkIHRvIGRlc2NyaWJlICAgICAgKi8KKyAgLyogICAgc3ViZ2x5cGhzIChmb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgY29tcG9zaXRlcykuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN1YmdseXBoIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBoaWdoLWxldmVsIEFQSSwgICAgICovCisgIC8qICAgIGhlbmNlIHRoZSBmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IGNhbiBob3dldmVyIHJldHJpZXZlIHN1YmdseXBoIGluZm9ybWF0aW9uIHdpdGggICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9HZXRfU3ViR2x5cGhfSW5mby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfU3ViR2x5cGhSZWNfKiAgRlRfU3ViR2x5cGg7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TbG90X0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIGBGVF9TbG90X0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUsIHVzZWQgdG8gICAgKi8KKyAgLyogICAgbW9kZWwgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gQEZUX0dseXBoU2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TbG90X0ludGVybmFsUmVjXyogIEZUX1Nsb3RfSW50ZXJuYWw7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaFNsb3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSByb290IGdseXBoIHNsb3QgY2xhc3Mgc3RydWN0dXJlLiAgQSBnbHlwaCBzbG90IGlzIGEgICAgICAgKi8KKyAgLyogICAgY29udGFpbmVyIHdoZXJlIGluZGl2aWR1YWwgZ2x5cGhzIGNhbiBiZSBsb2FkZWQsIGJlIHRoZXkgaW4gICAgICAgICovCisgIC8qICAgIG91dGxpbmUgb3IgYml0bWFwIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNsb3QgYmVsb25ncyB0by4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbmV4dCAgICAgICAgICAgICAgOjogSW4gc29tZSBjYXNlcyAobGlrZSBzb21lIGZvbnQgdG9vbHMpLCBzZXZlcmFsICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIHNsb3RzIHBlciBmYWNlIG9iamVjdCBjYW4gYmUgYSBnb29kICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGluZy4gIEFzIHRoaXMgaXMgcmFyZSwgdGhlIGdseXBoIHNsb3RzIGFyZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIHRocm91Z2ggYSBkaXJlY3QsIHNpbmdsZS1saW5rZWQgbGlzdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGl0cyBgbmV4dCcgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2VuZXJpYyAgICAgICAgICAgOjogQSB0eXBlbGVzcyBwb2ludGVyIHVudXNlZCBieSB0aGUgRnJlZVR5cGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgb3IgYW55IG9mIGl0cyBkcml2ZXJzLiAgSXQgY2FuIGJlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gbGluayB0aGVpciBvd24gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0byBlYWNoIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzICAgICAgICAgICA6OiBUaGUgbWV0cmljcyBvZiB0aGUgbGFzdCBsb2FkZWQgZ2x5cGggaW4gdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgZGVwZW5kIG9uIHRoZSBsYXN0ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgZmxhZ3MgKHNlZSB0aGUgQEZUX0xvYWRfR2x5cGggQVBJICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbikgYW5kIGNhbiBiZSBleHByZXNzZWQgZWl0aGVyIGluIDI2LjYgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25hbCBwaXhlbHMgb3IgZm9udCB1bml0cy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgZXZlbiB3aGVuIHRoZSBnbHlwaCBpbWFnZSBpcyAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQsIHRoZSBtZXRyaWNzIGFyZSBub3QuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaW5lYXJIb3JpQWR2YW5jZSA6OiBUaGUgYWR2YW5jZSB3aWR0aCBvZiB0aGUgdW5oaW50ZWQgZ2x5cGguICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgSXRzIHZhbHVlIGlzIGV4cHJlc3NlZCBpbiAxNi4xNiBmcmFjdGlvbmFsICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscywgdW5sZXNzIEBGVF9MT0FEX0xJTkVBUl9ERVNJR04gaXMgc2V0ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGxvYWRpbmcgdGhlIGdseXBoLiAgVGhpcyBmaWVsZCBjYW4gYmUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW50IHRvIHBlcmZvcm0gY29ycmVjdCBXWVNJV1lHIGxheW91dC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIG91dGxpbmUgZ2x5cGhzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGluZWFyVmVydEFkdmFuY2UgOjogVGhlIGFkdmFuY2UgaGVpZ2h0IG9mIHRoZSB1bmhpbnRlZCBnbHlwaC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEl0cyB2YWx1ZSBpcyBleHByZXNzZWQgaW4gMTYuMTYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHMsIHVubGVzcyBARlRfTE9BRF9MSU5FQVJfREVTSUdOIGlzIHNldCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBnbHlwaC4gIFRoaXMgZmllbGQgY2FuIGJlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFudCB0byBwZXJmb3JtIGNvcnJlY3QgV1lTSVdZRyBsYXlvdXQuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHJlbGV2YW50IGZvciBvdXRsaW5lIGdseXBocy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkdmFuY2UgICAgICAgICAgIDo6IFRoaXMgc2hvcnRoYW5kIGlzLCBkZXBlbmRpbmcgb24gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNLCB0aGUgdHJhbnNmb3JtZWQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgKGhpbnRlZCkgYWR2YW5jZSB3aWR0aCBmb3IgdGhlIGdseXBoLCBpbiAyNi42ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0LiAgQXMgc3BlY2lmaWVkIHdpdGggICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQsIGl0IHVzZXMgZWl0aGVyIHRoZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYGhvcmlBZHZhbmNlJyBvciB0aGUgYHZlcnRBZHZhbmNlJyB2YWx1ZSBvZiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGBtZXRyaWNzJyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9ybWF0ICAgICAgICAgICAgOjogVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIGZvcm1hdCBvZiB0aGUgaW1hZ2UgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpbiB0aGUgZ2x5cGggc2xvdC4gIFR5cGljYWxseSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX0JJVE1BUCwgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLCBvciAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLCBidXQgb3RoZXJzIGFyZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcCAgICAgICAgICAgIDo6IFRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBzbG90IGZvcm1hdCBpcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICBOb3RlIHRoYXQgdGhlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYW5kIGNvbnRlbnQgb2YgdGhlIGJpdG1hcCBidWZmZXIgY2FuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgYmV0d2VlbiBjYWxscyBvZiBARlRfTG9hZF9HbHlwaCBhbmQgYSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZmV3IG90aGVyIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiaXRtYXBfbGVmdCAgICAgICA6OiBUaGUgYml0bWFwJ3MgbGVmdCBiZWFyaW5nIGV4cHJlc3NlZCBpbiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBwaXhlbHMuICBPbmx5IHZhbGlkIGlmIHRoZSBmb3JtYXQgaXMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQklUTUFQLCB0aGlzIGlzLCBpZiB0aGUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBzbG90IGNvbnRhaW5zIGEgYml0bWFwLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcF90b3AgICAgICAgIDo6IFRoZSBiaXRtYXAncyB0b3AgYmVhcmluZyBleHByZXNzZWQgaW4gaW50ZWdlciAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHMuICBSZW1lbWJlciB0aGF0IHRoaXMgaXMgdGhlIGRpc3RhbmNlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcC1tb3N0IGdseXBoICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5saW5lLCB1cHdhcmRzIHl+Y29vcmRpbmF0ZXMgYmVpbmcgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAqcG9zaXRpdmUqLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgICAgICAgICAgIDo6IFRoZSBvdXRsaW5lIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IGdseXBoICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpZiBpdHMgZm9ybWF0IGlzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLiAgT25jZSBhIGdseXBoIGlzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZCwgYG91dGxpbmUnIGNhbiBiZSB0cmFuc2Zvcm1lZCwgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0b3J0ZWQsIGVtYm9sZGVkLCBldGMuICBIb3dldmVyLCBpdCBtdXN0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlIGZyZWVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fc3ViZ2x5cGhzICAgICA6OiBUaGUgbnVtYmVyIG9mIHN1YmdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGZvciB0aGUgY29tcG9zaXRlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIGZvcm1hdCB0aGF0IHNob3VsZCBub3JtYWxseSBvbmx5IGJlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQgd2l0aCB0aGUgQEZUX0xPQURfTk9fUkVDVVJTRSBmbGFnLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN1YmdseXBocyAgICAgICAgIDo6IEFuIGFycmF5IG9mIHN1YmdseXBoIGRlc2NyaXB0b3JzIGZvciAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGUgZ2x5cGhzLiAgVGhlcmUgYXJlIGBudW1fc3ViZ2x5cGhzJyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgaW4gdGhlcmUuICBDdXJyZW50bHkgaW50ZXJuYWwgdG8gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbF9kYXRhICAgICAgOjogQ2VydGFpbiBmb250IGRyaXZlcnMgY2FuIGFsc28gcmV0dXJuIHRoZSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgZGF0YSBmb3IgYSBnaXZlbiBnbHlwaCBpbWFnZSAoZS5nLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBieXRlY29kZSwgVHlwZX4xIGNoYXJzdHJpbmdzLCBldGMuKS4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gc3VjaCBkYXRhLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb250cm9sX2xlbiAgICAgICA6OiBUaGlzIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbnRyb2wgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdGhlciAgICAgICAgICAgICA6OiBSZWFsbHkgd2lja2VkIGZvcm1hdHMgY2FuIHVzZSB0aGlzIHBvaW50ZXIgdG8gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudCB0aGVpciBvd24gZ2x5cGggaW1hZ2UgdG8gY2xpZW50ICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4gIE5vdGUgdGhhdCB0aGUgYXBwbGljYXRpb24gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBpbWFnZSBmb3JtYXQuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxzYl9kZWx0YSAgICAgICAgIDo6IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaGludGVkIGFuZCB1bmhpbnRlZCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvLWhpbnRpbmcgaXMgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLiAgWmVybyBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByc2JfZGVsdGEgICAgICAgICA6OiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpbnRlZCBhbmQgdW5oaW50ZWQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgc2lkZSBiZWFyaW5nIHdoaWxlIGF1dG8taGludGluZyBpcyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS4gIFplcm8gb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIEBGVF9Mb2FkX0dseXBoIGlzIGNhbGxlZCB3aXRoIGRlZmF1bHQgZmxhZ3MgKHNlZSAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfTE9BRF9ERUZBVUxUKSB0aGUgZ2x5cGggaW1hZ2UgaXMgbG9hZGVkIGluIHRoZSBnbHlwaCBzbG90IGluICAgKi8KKyAgLyogICAgaXRzIG5hdGl2ZSBmb3JtYXQgKGUuZy4sIGFuIG91dGxpbmUgZ2x5cGggZm9yIFRydWVUeXBlIGFuZCBUeXBlfjEgICovCisgIC8qICAgIGZvcm1hdHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBpbWFnZSBjYW4gbGF0ZXIgYmUgY29udmVydGVkIGludG8gYSBiaXRtYXAgYnkgY2FsbGluZyAgICAgICAgICovCisgIC8qICAgIEBGVF9SZW5kZXJfR2x5cGguICBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciAgICAqLworICAvKiAgICB0aGUgbmF0aXZlIGltYWdlJ3MgZm9ybWF0LCB0aGVuIGludm9rZXMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZW5kZXJlciBpcyBpbiBjaGFyZ2Ugb2YgdHJhbnNmb3JtaW5nIHRoZSBuYXRpdmUgaW1hZ2UgdGhyb3VnaCAqLworICAvKiAgICB0aGUgc2xvdCdzIGZhY2UgdHJhbnNmb3JtYXRpb24gZmllbGRzLCB0aGVuIGNvbnZlcnRpbmcgaXQgaW50byBhICAgKi8KKyAgLyogICAgYml0bWFwIHRoYXQgaXMgcmV0dXJuZWQgaW4gYHNsb3QtPmJpdG1hcCcuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgYHNsb3QtPmJpdG1hcF9sZWZ0JyBhbmQgYHNsb3QtPmJpdG1hcF90b3AnIGFyZSBhbHNvIHVzZWQgKi8KKyAgLyogICAgdG8gc3BlY2lmeSB0aGUgcG9zaXRpb24gb2YgdGhlIGJpdG1hcCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwZW4gICovCisgIC8qICAgIHBvc2l0aW9uIChlLmcuLCBjb29yZGluYXRlcyAoMCwwKSBvbiB0aGUgYmFzZWxpbmUpLiAgT2YgY291cnNlLCAgICAqLworICAvKiAgICBgc2xvdC0+Zm9ybWF0JyBpcyBhbHNvIGNoYW5nZWQgdG8gQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBIZXJlIGlzIGEgc21hbGwgcHNldWRvIGNvZGUgZnJhZ21lbnQgdGhhdCBzaG93cyBob3cgdG8gdXNlICAgICAgICAgKi8KKyAgLyogICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Qb3MgIG9yaWdpbl94ICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfUG9zICBwcmV2X3JzYl9kZWx0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZm9yIGFsbCBnbHlwaHMgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgPGNvbXB1dGUga2VybiBiZXR3ZWVuIGN1cnJlbnQgYW5kIHByZXZpb3VzIGdseXBoIGFuZCBhZGQgaXQgdG8gKi8KKyAgLyogICAgICAgICBgb3JpZ2luX3gnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgPGxvYWQgZ2x5cGggd2l0aCBgRlRfTG9hZF9HbHlwaCc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBpZiAoIHByZXZfcnNiX2RlbHRhIC0gZmFjZS0+Z2x5cGgtPmxzYl9kZWx0YSA+PSAzMiApICAgICAgICAgICAqLworICAvKiAgICAgICAgICBvcmlnaW5feCAtPSA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGVsc2UgaWYgKCBwcmV2X3JzYl9kZWx0YSAtIGZhY2UtPmdseXBoLT5sc2JfZGVsdGEgPCAtMzIgKSAgICAgICovCisgIC8qICAgICAgICAgIG9yaWdpbl94ICs9IDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIHByZXZfcnNiX2RlbHRhID0gZmFjZS0+Z2x5cGgtPnJzYl9kZWx0YTsgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgPHNhdmUgZ2x5cGggaW1hZ2UsIG9yIHJlbmRlciBnbHlwaCwgb3IgLi4uPiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBvcmlnaW5feCArPSBmYWNlLT5nbHlwaC0+YWR2YW5jZS54OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGVuZGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfR2x5cGhTbG90UmVjXworICB7CisgICAgRlRfTGlicmFyeSAgICAgICAgbGlicmFyeTsKKyAgICBGVF9GYWNlICAgICAgICAgICBmYWNlOworICAgIEZUX0dseXBoU2xvdCAgICAgIG5leHQ7CisgICAgRlRfVUludCAgICAgICAgICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIHJldGFpbmVkIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSAqLworICAgIEZUX0dlbmVyaWMgICAgICAgIGdlbmVyaWM7CisKKyAgICBGVF9HbHlwaF9NZXRyaWNzICBtZXRyaWNzOworICAgIEZUX0ZpeGVkICAgICAgICAgIGxpbmVhckhvcmlBZHZhbmNlOworICAgIEZUX0ZpeGVkICAgICAgICAgIGxpbmVhclZlcnRBZHZhbmNlOworICAgIEZUX1ZlY3RvciAgICAgICAgIGFkdmFuY2U7CisKKyAgICBGVF9HbHlwaF9Gb3JtYXQgICBmb3JtYXQ7CisKKyAgICBGVF9CaXRtYXAgICAgICAgICBiaXRtYXA7CisgICAgRlRfSW50ICAgICAgICAgICAgYml0bWFwX2xlZnQ7CisgICAgRlRfSW50ICAgICAgICAgICAgYml0bWFwX3RvcDsKKworICAgIEZUX091dGxpbmUgICAgICAgIG91dGxpbmU7CisKKyAgICBGVF9VSW50ICAgICAgICAgICBudW1fc3ViZ2x5cGhzOworICAgIEZUX1N1YkdseXBoICAgICAgIHN1YmdseXBoczsKKworICAgIHZvaWQqICAgICAgICAgICAgIGNvbnRyb2xfZGF0YTsKKyAgICBsb25nICAgICAgICAgICAgICBjb250cm9sX2xlbjsKKworICAgIEZUX1BvcyAgICAgICAgICAgIGxzYl9kZWx0YTsKKyAgICBGVF9Qb3MgICAgICAgICAgICByc2JfZGVsdGE7CisKKyAgICB2b2lkKiAgICAgICAgICAgICBvdGhlcjsKKworICAgIEZUX1Nsb3RfSW50ZXJuYWwgIGludGVybmFsOworCisgIH0gRlRfR2x5cGhTbG90UmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Jbml0X0ZyZWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbml0aWFsaXplIGEgbmV3IEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiAgVGhlIHNldCBvZiBtb2R1bGVzICAgICAgKi8KKyAgLyogICAgdGhhdCBhcmUgcmVnaXN0ZXJlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYXQgYnVpbGQgdGltZS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBuZXcgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW4gY2FzZSB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIgb3duIG1lbW9yeSBhbGxvY2F0aW5nIHJvdXRpbmVzLCAgICovCisgIC8qICAgIHVzZSBARlRfTmV3X0xpYnJhcnkgaW5zdGVhZCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvICAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfQWRkX0RlZmF1bHRfTW9kdWxlcyAob3IgYSBzZXJpZXMgb2YgY2FsbHMgdG8gQEZUX0FkZF9Nb2R1bGUpLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBARlRfTGlicmFyeSBhbmQgQEZUX0ZhY2UgZm9yICAgICAgICAgICAgICAqLworICAvKiAgICBtdWx0aS10aHJlYWRpbmcgaXNzdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHlvdSBuZWVkIHJlZmVyZW5jZS1jb3VudGluZyAoY2YuIEBGVF9SZWZlcmVuY2VfTGlicmFyeSksIHVzZSAgICAqLworICAvKiAgICBARlRfTmV3X0xpYnJhcnkgYW5kIEBGVF9Eb25lX0xpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5ICAqYWxpYnJhcnkgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RvbmVfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc3Ryb3kgYSBnaXZlbiBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdCBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiwgICAqLworICAvKiAgICBpbmNsdWRpbmcgcmVzb3VyY2VzLCBkcml2ZXJzLCBmYWNlcywgc2l6ZXMsIGV0Yy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Eb25lX0ZyZWVUeXBlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGhpbiB0aGUgYGZsYWdzJyBmaWVsZCBvZiB0aGUgKi8KKyAgLyogICAgQEZUX09wZW5fQXJncyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9NRU1PUlkgICA6OiBUaGlzIGlzIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX1NUUkVBTSAgIDo6IENvcHkgdGhlIHN0cmVhbSBmcm9tIHRoZSBgc3RyZWFtJyBmaWVsZC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fUEFUSE5BTUUgOjogQ3JlYXRlIGEgbmV3IGlucHV0IHN0cmVhbSBmcm9tIGEgQ35wYXRoICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fRFJJVkVSICAgOjogVXNlIHRoZSBgZHJpdmVyJyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9QQVJBTVMgICA6OiBVc2UgdGhlIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgZmllbGRzLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGBGVF9PUEVOX01FTU9SWScsIGBGVF9PUEVOX1NUUkVBTScsIGFuZCBgRlRfT1BFTl9QQVRITkFNRScgICAgICovCisgIC8qICAgIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfT1BFTl9NRU1PUlkgICAgMHgxCisjZGVmaW5lIEZUX09QRU5fU1RSRUFNICAgIDB4MgorI2RlZmluZSBGVF9PUEVOX1BBVEhOQU1FICAweDQKKyNkZWZpbmUgRlRfT1BFTl9EUklWRVIgICAgMHg4CisjZGVmaW5lIEZUX09QRU5fUEFSQU1TICAgIDB4MTAKKworCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGBGVF9PUEVOX1hYWCcgKi8KKyAgLyogdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9vcGVuX21lbW9yeSAgICBGVF9PUEVOX01FTU9SWQorI2RlZmluZSBmdF9vcGVuX3N0cmVhbSAgICBGVF9PUEVOX1NUUkVBTQorI2RlZmluZSBmdF9vcGVuX3BhdGhuYW1lICBGVF9PUEVOX1BBVEhOQU1FCisjZGVmaW5lIGZ0X29wZW5fZHJpdmVyICAgIEZUX09QRU5fRFJJVkVSCisjZGVmaW5lIGZ0X29wZW5fcGFyYW1zICAgIEZUX09QRU5fUEFSQU1TCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIG1vcmUgb3IgbGVzcyBnZW5lcmljIHBhcmFtZXRlcnMgdG8gKi8KKyAgLyogICAgQEZUX09wZW5fRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFnICA6OiBBIGZvdXItYnl0ZSBpZGVudGlmaWNhdGlvbiB0YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkYXRhIDo6IEEgcG9pbnRlciB0byB0aGUgcGFyYW1ldGVyIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgSUQgYW5kIGZ1bmN0aW9uIG9mIHBhcmFtZXRlcnMgYXJlIGRyaXZlci1zcGVjaWZpYy4gIFNlZSB0aGUgICAgKi8KKyAgLyogICAgdmFyaW91cyBGVF9QQVJBTV9UQUdfWFhYIGZsYWdzIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfUGFyYW1ldGVyXworICB7CisgICAgRlRfVUxvbmcgICAgdGFnOworICAgIEZUX1BvaW50ZXIgIGRhdGE7CisKKyAgfSBGVF9QYXJhbWV0ZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGluZGljYXRlIGhvdyB0byBvcGVuIGEgbmV3IGZvbnQgZmlsZSBvciAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtLiAgQSBwb2ludGVyIHRvIHN1Y2ggYSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXIgICovCisgIC8qICAgIGZvciB0aGUgZnVuY3Rpb25zIEBGVF9PcGVuX0ZhY2UgYW5kIEBGVF9BdHRhY2hfU3RyZWFtLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZsYWdzICAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBpbmRpY2F0aW5nIGhvdyB0byB1c2UgdGhlICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeV9iYXNlIDo6IFRoZSBmaXJzdCBieXRlIG9mIHRoZSBmaWxlIGluIG1lbW9yeS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5X3NpemUgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGZpbGUgaW4gbWVtb3J5LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXRobmFtZSAgICA6OiBBIHBvaW50ZXIgdG8gYW4gOC1iaXQgZmlsZSBwYXRobmFtZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgc291cmNlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZHJpdmVyICAgICAgOjogVGhpcyBmaWVsZCBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IEBGVF9PcGVuX0ZhY2U7ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGl0IHNpbXBseSBzcGVjaWZpZXMgdGhlIGZvbnQgZHJpdmVyIHRvIHVzZSB0byBvcGVuICAqLworICAvKiAgICAgICAgICAgICAgICAgICB0aGUgZmFjZS4gIElmIHNldCB0b34wLCBGcmVlVHlwZSB0cmllcyB0byBsb2FkIHRoZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZmFjZSB3aXRoIGVhY2ggb25lIG9mIHRoZSBkcml2ZXJzIGluIGl0cyBsaXN0LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fcGFyYW1zICA6OiBUaGUgbnVtYmVyIG9mIGV4dHJhIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhcmFtcyAgICAgIDo6IEV4dHJhIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBmb250IGRyaXZlciB3aGVuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBvcGVuaW5nIGEgbmV3IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc3RyZWFtIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudHMgb2YgYGZsYWdzJyB0aGF0ICAgICAgKi8KKyAgLyogICAgYXJlIHRlc3RlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIGJ5IEBGVF9PcGVuX0ZhY2U6ICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB0aGUgQEZUX09QRU5fTUVNT1JZIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IHRoaXMgaXMgYSAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IGZpbGUgb2YgYG1lbW9yeV9zaXplJyBieXRlcywgbG9jYXRlZCBhdCBgbWVtb3J5X2FkZHJlc3MnLiAgICovCisgIC8qICAgIFRoZSBkYXRhIGFyZSBhcmUgbm90IGNvcGllZCwgYW5kIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yICAgICAqLworICAvKiAgICByZWxlYXNpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbSBfYWZ0ZXJfIHRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gICAgKi8KKyAgLyogICAgQEZUX0RvbmVfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPdGhlcndpc2UsIGlmIHRoZSBARlRfT1BFTl9TVFJFQU0gYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgYSAgICAgICAgKi8KKyAgLyogICAgY3VzdG9tIGlucHV0IHN0cmVhbSBgc3RyZWFtJyBpcyB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPdGhlcndpc2UsIGlmIHRoZSBARlRfT1BFTl9QQVRITkFNRSBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCB0aGlzICAgKi8KKyAgLyogICAgaXMgYSBub3JtYWwgZmlsZSBhbmQgdXNlIGBwYXRobmFtZScgdG8gb3BlbiBpdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB0aGUgQEZUX09QRU5fRFJJVkVSIGJpdCBpcyBzZXQsIEBGVF9PcGVuX0ZhY2Ugb25seSB0cmllcyB0byAgICAgKi8KKyAgLyogICAgb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBkcml2ZXIgd2hvc2UgaGFuZGxlciBpcyBpbiBgZHJpdmVyJy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB0aGUgQEZUX09QRU5fUEFSQU1TIGJpdCBpcyBzZXQsIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIGJ5ICAgICAgICAgKi8KKyAgLyogICAgYG51bV9wYXJhbXMnIGFuZCBgcGFyYW1zJyBpcyB1c2VkLiAgVGhleSBhcmUgaWdub3JlZCBvdGhlcndpc2UuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZGVhbGx5LCBib3RoIHRoZSBgcGF0aG5hbWUnIGFuZCBgcGFyYW1zJyBmaWVsZHMgc2hvdWxkIGJlIHRhZ2dlZCAgKi8KKyAgLyogICAgYXMgYGNvbnN0JzsgdGhpcyBpcyBtaXNzaW5nIGZvciBBUEkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICBJbiAgICovCisgIC8qICAgIG90aGVyIHdvcmRzLCBhcHBsaWNhdGlvbnMgc2hvdWxkIHRyZWF0IHRoZW0gYXMgcmVhZC1vbmx5LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX09wZW5fQXJnc18KKyAgeworICAgIEZUX1VJbnQgICAgICAgICBmbGFnczsKKyAgICBjb25zdCBGVF9CeXRlKiAgbWVtb3J5X2Jhc2U7CisgICAgRlRfTG9uZyAgICAgICAgIG1lbW9yeV9zaXplOworICAgIEZUX1N0cmluZyogICAgICBwYXRobmFtZTsKKyAgICBGVF9TdHJlYW0gICAgICAgc3RyZWFtOworICAgIEZUX01vZHVsZSAgICAgICBkcml2ZXI7CisgICAgRlRfSW50ICAgICAgICAgIG51bV9wYXJhbXM7CisgICAgRlRfUGFyYW1ldGVyKiAgIHBhcmFtczsKKworICB9IEZUX09wZW5fQXJnczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX09wZW5fRmFjZSB0byBvcGVuIGEgZm9udCBieSBpdHMgcGF0aG5hbWUuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhdGhuYW1lICAgOjogQSBwYXRoIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiAgVGhlIGZpcnN0ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFjZSBoYXMgaW5kZXh+MC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICBJZiBgZmFjZV9pbmRleCcgaXMgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtdXN0IGJlIG5vbi1OVUxMLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBTZWUgQEZUX09wZW5fRmFjZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlIEBGVF9Eb25lX0ZhY2UgdG8gZGVzdHJveSB0aGUgY3JlYXRlZCBARlRfRmFjZSBvYmplY3QgKGFsb25nICAgICovCisgIC8qICAgIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUsCisgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTmV3X01lbW9yeV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfT3Blbl9GYWNlIHRvIG9wZW4gYSBmb250IHRoYXQgaGFzIGJlZW4gICAgICovCisgIC8qICAgIGxvYWRlZCBpbnRvIG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZpbGVfYmFzZSAgOjogQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZvbnQgZGF0YS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmlsZV9zaXplICA6OiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLworICAvKiAgICAgICAgICAgICAgICAgIFNlZSBARlRfT3Blbl9GYWNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3UgbXVzdCBub3QgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIEBGVF9Eb25lX0ZhY2UuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9OZXdfTWVtb3J5X0ZhY2UoIEZUX0xpYnJhcnkgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBmaWxlX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAqYWZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09wZW5fRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENyZWF0ZSBhIGZhY2Ugb2JqZWN0IGZyb20gYSBnaXZlbiByZXNvdXJjZSBkZXNjcmliZWQgYnkgICAgICAgICAgICAqLworICAvKiAgICBARlRfT3Blbl9BcmdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhcmdzICAgICAgIDo6IEEgcG9pbnRlciB0byBhbiBgRlRfT3Blbl9BcmdzJyBzdHJ1Y3R1cmUgdGhhdCBtdXN0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgYnkgdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLworICAvKiAgICAgICAgICAgICAgICAgIFNlZSBub3RlIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVbmxpa2UgRnJlZVR5cGUgMS54LCB0aGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGdseXBoICAgKi8KKyAgLyogICAgc2xvdCBmb3IgdGhlIGZhY2Ugb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHRocm91Z2ggICAgICovCisgIC8qICAgIGBmYWNlLT5nbHlwaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3Blbl9GYWNlIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgY2hlY2sgd2hldGhlciB0aGUgZm9udCAgICAgICAgICovCisgIC8qICAgIGZvcm1hdCBvZiBhIGdpdmVuIGZvbnQgcmVzb3VyY2UgaXMgc3VwcG9ydGVkIGJ5IEZyZWVUeXBlLiAgSWYgdGhlICAqLworICAvKiAgICBgZmFjZV9pbmRleCcgZmllbGQgaXMgbmVnYXRpdmUsIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpc34wICAgKi8KKyAgLyogICAgaWYgdGhlIGZvbnQgZm9ybWF0IGlzIHJlY29nbml6ZWQsIG9yIG5vbi16ZXJvIG90aGVyd2lzZTsgICAgICAgICAgICovCisgIC8qICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluIGAqYWZhY2UnICAqLworICAvKiAgICAoaWYgYGFmYWNlJyBpc24ndCBOVUxMKS4gIFRoZSBvbmx5IHVzZWZ1bCBmaWVsZCBpbiB0aGlzIHNwZWNpYWwgICAgKi8KKyAgLyogICAgY2FzZSBpcyBgZmFjZS0+bnVtX2ZhY2VzJyB0aGF0IGdpdmVzIHRoZSBudW1iZXIgb2YgZmFjZXMgd2l0aGluICAgICovCisgIC8qICAgIHRoZSBmb250IGZpbGUuICBBZnRlciBleGFtaW5hdGlvbiwgdGhlIHJldHVybmVkIEBGVF9GYWNlIHN0cnVjdHVyZSAqLworICAvKiAgICBzaG91bGQgYmUgZGVhbGxvY2F0ZWQgd2l0aCBhIGNhbGwgdG8gQEZUX0RvbmVfRmFjZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVhY2ggbmV3IGZhY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIGFsc28gb3ducyBhICAgICAgICAqLworICAvKiAgICBkZWZhdWx0IEBGVF9TaXplIG9iamVjdCwgYWNjZXNzaWJsZSBhcyBgZmFjZS0+c2l6ZScuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9uZSBARlRfTGlicmFyeSBpbnN0YW5jZSBjYW4gaGF2ZSBtdWx0aXBsZSBmYWNlIG9iamVjdHMsIHRoaXMgaXMsICAqLworICAvKiAgICBARlRfT3Blbl9GYWNlIGFuZCBpdHMgc2libGluZ3MgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB1c2luZyAgKi8KKyAgLyogICAgdGhlIHNhbWUgYGxpYnJhcnknIGFyZ3VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgcmVmZXJlbmNlIGNvdW50ZXJzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgKi8KKyAgLyogICAgQEZUX1JlZmVyZW5jZV9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfT3Blbl9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgIGNvbnN0IEZUX09wZW5fQXJncyogIGFyZ3MsCisgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgICAgICphZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXR0YWNoX0ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfQXR0YWNoX1N0cmVhbSB0byBhdHRhY2ggYSBmaWxlLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgIDo6IFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmlsZXBhdGhuYW1lIDo6IFRoZSBwYXRobmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfQXR0YWNoX0ZpbGUoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXR0YWNoX1N0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYEF0dGFjaCcgZGF0YSB0byBhIGZhY2Ugb2JqZWN0LiAgTm9ybWFsbHksIHRoaXMgaXMgdXNlZCB0byByZWFkICAgICovCisgIC8qICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBmYWNlIG9iamVjdC4gIEZvciBleGFtcGxlLCB5b3UgY2FuICAqLworICAvKiAgICBhdHRhY2ggYW4gQUZNIGZpbGUgdGhhdCBjb21lcyB3aXRoIGEgVHlwZX4xIGZvbnQgdG8gZ2V0IHRoZSAgICAgICAgKi8KKyAgLyogICAga2VybmluZyB2YWx1ZXMgYW5kIG90aGVyIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFyYW1ldGVycyA6OiBBIHBvaW50ZXIgdG8gQEZUX09wZW5fQXJncyB0aGF0IG11c3QgYmUgZmlsbGVkIGJ5ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtZWFuaW5nIG9mIHRoZSBgYXR0YWNoJyAoaS5lLiwgd2hhdCByZWFsbHkgaGFwcGVucyB3aGVuIHRoZSAgICAqLworICAvKiAgICBuZXcgZmlsZSBpcyByZWFkKSBpcyBub3QgZml4ZWQgYnkgRnJlZVR5cGUgaXRzZWxmLiAgSXQgcmVhbGx5ICAgICAgKi8KKyAgLyogICAgZGVwZW5kcyBvbiB0aGUgZm9udCBmb3JtYXQgKGFuZCB0aHVzIHRoZSBmb250IGRyaXZlcikuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDbGllbnQgYXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcgICAgICAgKi8KKyAgLyogICAgd2hlbiBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLiAgTW9zdCBkcml2ZXJzIHNpbXBseSBkbyBub3QgaW1wbGVtZW50ICovCisgIC8qICAgIGZpbGUgYXR0YWNobWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0F0dGFjaF9TdHJlYW0oIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX09wZW5fQXJncyogIHBhcmFtZXRlcnMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlZmVyZW5jZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgY291bnRlciBnZXRzIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlICAqLworICAvKiAgICBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgQEZUX0RvbmVfRmFjZSAgKi8KKyAgLyogICAgdGhlbiBvbmx5IGRlc3Ryb3lzIGEgZmFjZSBpZiB0aGUgY291bnRlciBpc34xLCBvdGhlcndpc2UgaXQgc2ltcGx5ICovCisgIC8qICAgIGRlY3JlbWVudHMgdGhlIGNvdW50ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBoZWxwcyBpbiBtYW5hZ2luZyBsaWZlLWN5Y2xlcyBvZiBzdHJ1Y3R1cmVzIHRoYXQgICAgICovCisgIC8qICAgIHJlZmVyZW5jZSBARlRfRmFjZSBvYmplY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuNC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1JlZmVyZW5jZV9GYWNlKCBGVF9GYWNlICBmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEaXNjYXJkIGEgZ2l2ZW4gZmFjZSBvYmplY3QsIGFzIHdlbGwgYXMgYWxsIG9mIGl0cyBjaGlsZCBzbG90cyBhbmQgKi8KKyAgLyogICAgc2l6ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCisgIC8qICAgIEBGVF9SZWZlcmVuY2VfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0RvbmVfRmFjZSggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2VsZWN0X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VsZWN0IGEgYml0bWFwIHN0cmlrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyaWtlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgYml0bWFwIHN0cmlrZSBpbiB0aGUgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiBARlRfRmFjZVJlYyBzdHJ1Y3R1cmUuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NlbGVjdF9TaXplKCBGVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgc3RyaWtlX2luZGV4ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlbnVtZXJhdGlvbiB0eXBlIHRoYXQgbGlzdHMgdGhlIHN1cHBvcnRlZCBzaXplIHJlcXVlc3QgdHlwZXMuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgbm9taW5hbCBzaXplLiAgVGhlIGB1bml0c19wZXJfRU0nIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzICAgICovCisgIC8qICAgICAgdXNlZCB0byBkZXRlcm1pbmUgYm90aCBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHJlYWwgZGltZW5zaW9uLiAgVGhlIHN1bSBvZiB0aGUgdGhlIGBhc2NlbmRlcicgYW5kIChtaW51cyAgICAqLworICAvKiAgICAgIG9mKSB0aGUgYGRlc2NlbmRlcicgZmllbGRzIG9mIEBGVF9GYWNlUmVjIGFyZSB1c2VkIHRvIGRldGVybWluZSAgKi8KKyAgLyogICAgICBib3RoIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZm9udCBib3VuZGluZyBib3guICBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYGJib3gnIGZpZWxkICovCisgIC8qICAgICAgb2YgQEZUX0ZhY2VSZWMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCAqLworICAvKiAgICAgIHNjYWxpbmcgdmFsdWUsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0NFTEwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBgbWF4X2FkdmFuY2Vfd2lkdGgnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzIHVzZWQgdG8gICAgICAgICAgKi8KKyAgLyogICAgICBkZXRlcm1pbmUgdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZTsgdGhlIHZlcnRpY2FsIHNjYWxpbmcgICAgICovCisgIC8qICAgICAgdmFsdWUgaXMgZGV0ZXJtaW5lZCB0aGUgc2FtZSB3YXkgYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSBkb2VzLiAgRmluYWxseSwgYm90aCBzY2FsaW5nICAgICAgKi8KKyAgLyogICAgICB2YWx1ZXMgYXJlIHNldCB0byB0aGUgc21hbGxlciBvbmUuICBUaGlzIHR5cGUgaXMgdXNlZnVsIGlmIHlvdSAgICovCisgIC8qICAgICAgd2FudCB0byBzcGVjaWZ5IHRoZSBmb250IHNpemUgZm9yLCBzYXksIGEgd2luZG93IG9mIGEgZ2l2ZW4gICAgICAqLworICAvKiAgICAgIGRpbWVuc2lvbiBhbmQgODB4MjQgY2VsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1NDQUxFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFNwZWNpZnkgdGhlIHNjYWxpbmcgdmFsdWVzIGRpcmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYWJvdmUgZGVzY3JpcHRpb25zIG9ubHkgYXBwbHkgdG8gc2NhbGFibGUgZm9ybWF0cy4gIEZvciBiaXRtYXAgKi8KKyAgLyogICAgZm9ybWF0cywgdGhlIGJlaGF2aW91ciBpcyB1cCB0byB0aGUgZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgdGhlIG5vdGUgc2VjdGlvbiBvZiBARlRfU2l6ZV9NZXRyaWNzIGlmIHlvdSB3b25kZXIgaG93IHNpemUgICAgKi8KKyAgLyogICAgcmVxdWVzdGluZyByZWxhdGVzIHRvIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGVudW0gIEZUX1NpemVfUmVxdWVzdF9UeXBlXworICB7CisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTCwKKyAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSwKKyAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YLAorICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0NFTEwsCisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTLAorCisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfTUFYCisKKyAgfSBGVF9TaXplX1JlcXVlc3RfVHlwZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfUmVxdWVzdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBzaXplIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR5cGUgICAgICAgICAgIDo6IFNlZSBARlRfU2l6ZV9SZXF1ZXN0X1R5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgd2lkdGggICAgICAgICAgOjogVGhlIGRlc2lyZWQgd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgICA6OiBUaGUgZGVzaXJlZCBoZWlnaHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlSZXNvbHV0aW9uIDo6IFRoZSBob3Jpem9udGFsIHJlc29sdXRpb24uICBJZiBzZXQgdG8gemVybywgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBgd2lkdGgnIGlzIHRyZWF0ZWQgYXMgYSAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJ0UmVzb2x1dGlvbiA6OiBUaGUgdmVydGljYWwgcmVzb2x1dGlvbi4gIElmIHNldCB0byB6ZXJvLCAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgYGhlaWdodCcgaXMgdHJlYXRlZCBhcyBhIDI2LjYgZnJhY3Rpb25hbCBwaXhlbCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGB3aWR0aCcgaXMgemVybywgdGhlbiB0aGUgaG9yaXpvbnRhbCBzY2FsaW5nIHZhbHVlIGlzIHNldCBlcXVhbCAqLworICAvKiAgICB0byB0aGUgdmVydGljYWwgc2NhbGluZyB2YWx1ZSwgYW5kIHZpY2UgdmVyc2EuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX1JlcXVlc3RSZWNfCisgIHsKKyAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgdHlwZTsKKyAgICBGVF9Mb25nICAgICAgICAgICAgICAgd2lkdGg7CisgICAgRlRfTG9uZyAgICAgICAgICAgICAgIGhlaWdodDsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICAgaG9yaVJlc29sdXRpb247CisgICAgRlRfVUludCAgICAgICAgICAgICAgIHZlcnRSZXNvbHV0aW9uOworCisgIH0gRlRfU2l6ZV9SZXF1ZXN0UmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYSBzaXplIHJlcXVlc3Qgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TaXplX1JlcXVlc3RSZWNfICAqRlRfU2l6ZV9SZXF1ZXN0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVxdWVzdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVzaXplIHRoZSBzY2FsZSBvZiB0aGUgYWN0aXZlIEBGVF9TaXplIG9iamVjdCBpbiBhIGZhY2UuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmVxICA6OiBBIHBvaW50ZXIgdG8gYSBARlRfU2l6ZV9SZXF1ZXN0UmVjLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQWx0aG91Z2ggZHJpdmVycyBtYXkgc2VsZWN0IHRoZSBiaXRtYXAgc3RyaWtlIG1hdGNoaW5nIHRoZSAgICAgICAgICovCisgIC8qICAgIHJlcXVlc3QsIHlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyBpZiB5b3UgaW50ZW5kIHRvIHNlbGVjdCBhICAgICAqLworICAvKiAgICBwYXJ0aWN1bGFyIGJpdG1hcCBzdHJpa2UuICBVc2UgQEZUX1NlbGVjdF9TaXplIGluc3RlYWQgaW4gdGhhdCAgICAgKi8KKyAgLyogICAgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgcmVxdWVzdGVkIHNpemUgYW5kIHRoZSByZXN1bHRpbmcgZ2x5cGggICAgKi8KKyAgLyogICAgc2l6ZSBpcyBkZXBlbmRlbnQgZW50aXJlbHkgb24gaG93IHRoZSBzaXplIGlzIGRlZmluZWQgaW4gdGhlICAgICAgICovCisgIC8qICAgIHNvdXJjZSBmYWNlLiAgVGhlIGZvbnQgZGVzaWduZXIgY2hvb3NlcyB0aGUgZmluYWwgc2l6ZSBvZiBlYWNoICAgICAqLworICAvKiAgICBnbHlwaCByZWxhdGl2ZSB0byB0aGlzIHNpemUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byAgICAgICAgKi8KKyAgLyogICAgYGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2NzL2dseXBocy9nbHlwaHMtMi5odG1sJyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9SZXF1ZXN0X1NpemUoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X0NoYXJfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfUmVxdWVzdF9TaXplIHRvIHJlcXVlc3QgdGhlIG5vbWluYWwgc2l6ZSAgICovCisgIC8qICAgIChpbiBwb2ludHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJfd2lkdGggICAgICA6OiBUaGUgbm9taW5hbCB3aWR0aCwgaW4gMjYuNiBmcmFjdGlvbmFsIHBvaW50cy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcl9oZWlnaHQgICAgIDo6IFRoZSBub21pbmFsIGhlaWdodCwgaW4gMjYuNiBmcmFjdGlvbmFsIHBvaW50cy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3J6X3Jlc29sdXRpb24gOjogVGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBkcGkuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRfcmVzb2x1dGlvbiA6OiBUaGUgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBkcGkuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGVpdGhlciB0aGUgY2hhcmFjdGVyIHdpZHRoIG9yIGhlaWdodCBpcyB6ZXJvLCBpdCBpcyBzZXQgZXF1YWwgICAqLworICAvKiAgICB0byB0aGUgb3RoZXIgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGVpdGhlciB0aGUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCByZXNvbHV0aW9uIGlzIHplcm8sIGl0IGlzIHNldCAqLworICAvKiAgICBlcXVhbCB0byB0aGUgb3RoZXIgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgY2hhcmFjdGVyIHdpZHRoIG9yIGhlaWdodCBzbWFsbGVyIHRoYW4gMXB0IGlzIHNldCB0byAxcHQ7IGlmICAgICAqLworICAvKiAgICBib3RoIHJlc29sdXRpb24gdmFsdWVzIGFyZSB6ZXJvLCB0aGV5IGFyZSBzZXQgdG8gNzJkcGkuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEZyZWVUeXBlIGNhY2hlIEFQSS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9DaGFyX1NpemUoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBob3J6X3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHZlcnRfcmVzb2x1dGlvbiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X1BpeGVsX1NpemVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfUmVxdWVzdF9TaXplIHRvIHJlcXVlc3QgdGhlIG5vbWluYWwgc2l6ZSAgICovCisgIC8qICAgIChpbiBwaXhlbHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBpeGVsX3dpZHRoICA6OiBUaGUgbm9taW5hbCB3aWR0aCwgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGl4ZWxfaGVpZ2h0IDo6IFRoZSBub21pbmFsIGhlaWdodCwgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGUgcmVzdWx0aW5nIGdseXBocyBtYXRjaGluZywgb3IgYmVpbmcgICAgICovCisgIC8qICAgIGNvbnN0cmFpbmVkLCB0byB0aGlzIHBpeGVsIHNpemUuICBSZWZlciB0byBARlRfUmVxdWVzdF9TaXplIHRvICAgICAqLworICAvKiAgICB1bmRlcnN0YW5kIGhvdyByZXF1ZXN0ZWQgc2l6ZXMgcmVsYXRlIHRvIGFjdHVhbCBzaXplcy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEZyZWVUeXBlIGNhY2hlIEFQSS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9QaXhlbF9TaXplcyggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF9oZWlnaHQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xvYWRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBsb2FkIGEgc2luZ2xlIGdseXBoIGludG8gdGhlIGdseXBoIHNsb3Qgb2YgYSAgICAqLworICAvKiAgICBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgaXMgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGhfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBmaWxlLiAgRm9yICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIENJRC1rZXllZCBmb250cyAoZWl0aGVyIGluIFBTIG9yIGluIENGRiBmb3JtYXQpICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB0aGlzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgQ0lEIHZhbHVlLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZSAqLworICAvKiAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9YWFggY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbG9hZGVkIGdseXBoIG1heSBiZSB0cmFuc2Zvcm1lZC4gIFNlZSBARlRfU2V0X1RyYW5zZm9ybSBmb3IgICAgKi8KKyAgLyogICAgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGb3Igc3Vic2V0dGVkIENJRC1rZXllZCBmb250cywgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBpcyAgICAgICAgKi8KKyAgLyogICAgcmV0dXJuZWQgZm9yIGludmFsaWQgQ0lEIHZhbHVlcyAodGhpcyBpcywgZm9yIENJRCB2YWx1ZXMgdGhhdCAgICAgICovCisgIC8qICAgIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGdseXBoIGluIHRoZSBmb250KS4gIFNlZSB0aGUgZGlzY3Vzc2lvbiAqLworICAvKiAgICBvZiB0aGUgQEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgZmxhZyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Mb2FkX0dseXBoKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgbG9hZF9mbGFncyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTG9hZF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGxvYWQgYSBzaW5nbGUgZ2x5cGggaW50byB0aGUgZ2x5cGggc2xvdCBvZiBhICAgICovCisgIC8qICAgIGZhY2Ugb2JqZWN0LCBhY2NvcmRpbmcgdG8gaXRzIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBpcyBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyX2NvZGUgICA6OiBUaGUgZ2x5cGgncyBjaGFyYWN0ZXIgY29kZSwgYWNjb3JkaW5nIHRvIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgY3VycmVudCBjaGFybWFwIHVzZWQgaW4gdGhlIGZhY2UuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkX2ZsYWdzICA6OiBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgQEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgQEZUX0dldF9DaGFyX0luZGV4IGFuZCBARlRfTG9hZF9HbHlwaC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTG9hZF9DaGFyKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgIEZUX0ludDMyICBsb2FkX2ZsYWdzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9MT0FEX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoIEBGVF9Mb2FkX0dseXBoIHRvIGluZGljYXRlCisgICAqICAgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSBkdXJpbmcgZ2x5cGggbG9hZGluZy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9MT0FEX0RFRkFVTFQgOjoKKyAgICogICAgIENvcnJlc3BvbmRpbmcgdG9+MCwgdGhpcyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGdseXBoIGxvYWQKKyAgICogICAgIG9wZXJhdGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgorICAgKgorICAgKiAgICAgMS4gRnJlZVR5cGUgbG9va3MgZm9yIGEgYml0bWFwIGZvciB0aGUgZ2x5cGggY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICogICAgICAgIGZhY2UncyBjdXJyZW50IHNpemUuICBJZiBvbmUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICAgKiAgICAgICAgVGhlIGJpdG1hcCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBnbHlwaCBzbG90IChzZWUgbm90ZQorICAgKiAgICAgICAgYmVsb3cpLgorICAgKgorICAgKiAgICAgMi4gSWYgbm8gZW1iZWRkZWQgYml0bWFwIGlzIHNlYXJjaGVkIG9yIGZvdW5kLCBGcmVlVHlwZSBsb29rcyBmb3IgYQorICAgKiAgICAgICAgc2NhbGFibGUgb3V0bGluZS4gIElmIG9uZSBpcyBmb3VuZCwgaXQgaXMgbG9hZGVkIGZyb20gdGhlIGZvbnQKKyAgICogICAgICAgIGZpbGUsIHNjYWxlZCB0byBkZXZpY2UgcGl4ZWxzLCB0aGVuIGBoaW50ZWQnIHRvIHRoZSBwaXhlbCBncmlkCisgICAqICAgICAgICBpbiBvcmRlciB0byBvcHRpbWl6ZSBpdC4gIFRoZSBvdXRsaW5lIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20KKyAgICogICAgICAgIHRoZSBnbHlwaCBzbG90IChzZWUgbm90ZSBiZWxvdykuCisgICAqCisgICAqICAgICBOb3RlIHRoYXQgYnkgZGVmYXVsdCwgdGhlIGdseXBoIGxvYWRlciBkb2Vzbid0IHJlbmRlciBvdXRsaW5lcyBpbnRvCisgICAqICAgICBiaXRtYXBzLiAgVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCB0byBtb2RpZnkgdGhpcyBkZWZhdWx0CisgICAqICAgICBiZWhhdmlvdXIgdG8gbW9yZSBzcGVjaWZpYyBhbmQgdXNlZnVsIGNhc2VzLgorICAgKgorICAgKiAgIEZUX0xPQURfTk9fU0NBTEUgOjoKKyAgICogICAgIERvbid0IHNjYWxlIHRoZSBsb2FkZWQgb3V0bGluZSBnbHlwaCBidXQga2VlcCBpdCBpbiBmb250IHVuaXRzLgorICAgKgorICAgKiAgICAgVGhpcyBmbGFnIGltcGxpZXMgQEZUX0xPQURfTk9fSElOVElORyBhbmQgQEZUX0xPQURfTk9fQklUTUFQLCBhbmQKKyAgICogICAgIHVuc2V0cyBARlRfTE9BRF9SRU5ERVIuCisgICAqCisgICAqICAgICBJZiB0aGUgZm9udCBpcyBgdHJpY2t5JyAoc2VlIEBGVF9GQUNFX0ZMQUdfVFJJQ0tZIGZvciBtb3JlKSwgdXNpbmcKKyAgICogICAgIEZUX0xPQURfTk9fU0NBTEUgdXN1YWxseSB5aWVsZHMgbWVhbmluZ2xlc3Mgb3V0bGluZXMgYmVjYXVzZSB0aGUKKyAgICogICAgIHN1YmdseXBocyBtdXN0IGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCB3aXRoIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zLgorICAgKiAgICAgVGhpcyBjYW4gYmUgc29sdmVkIGJ5IGxvYWRpbmcgdGhlIGZvbnQgd2l0aG91dCBGVF9MT0FEX05PX1NDQUxFIGFuZAorICAgKiAgICAgc2V0dGluZyB0aGUgY2hhcmFjdGVyIHNpemUgdG8gYGZvbnQtPnVuaXRzX3Blcl9FTScuCisgICAqCisgICAqICAgRlRfTE9BRF9OT19ISU5USU5HIDo6CisgICAqICAgICBEaXNhYmxlIGhpbnRpbmcuICBUaGlzIGdlbmVyYWxseSBnZW5lcmF0ZXMgYGJsdXJyaWVyJyBiaXRtYXAgZ2x5cGhzCisgICAqICAgICB3aGVuIHRoZSBnbHlwaCBhcmUgcmVuZGVyZWQgaW4gYW55IG9mIHRoZSBhbnRpLWFsaWFzZWQgbW9kZXMuICBTZWUKKyAgICogICAgIGFsc28gdGhlIG5vdGUgYmVsb3cuCisgICAqCisgICAqICAgICBUaGlzIGZsYWcgaXMgaW1wbGllZCBieSBARlRfTE9BRF9OT19TQ0FMRS4KKyAgICoKKyAgICogICBGVF9MT0FEX1JFTkRFUiA6OgorICAgKiAgICAgQ2FsbCBARlRfUmVuZGVyX0dseXBoIGFmdGVyIHRoZSBnbHlwaCBpcyBsb2FkZWQuICBCeSBkZWZhdWx0LCB0aGUKKyAgICogICAgIGdseXBoIGlzIHJlbmRlcmVkIGluIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgbW9kZS4gIFRoaXMgY2FuIGJlCisgICAqICAgICBvdmVycmlkZGVuIGJ5IEBGVF9MT0FEX1RBUkdFVF9YWFggb3IgQEZUX0xPQURfTU9OT0NIUk9NRS4KKyAgICoKKyAgICogICAgIFRoaXMgZmxhZyBpcyB1bnNldCBieSBARlRfTE9BRF9OT19TQ0FMRS4KKyAgICoKKyAgICogICBGVF9MT0FEX05PX0JJVE1BUCA6OgorICAgKiAgICAgSWdub3JlIGJpdG1hcCBzdHJpa2VzIHdoZW4gbG9hZGluZy4gIEJpdG1hcC1vbmx5IGZvbnRzIGlnbm9yZSB0aGlzCisgICAqICAgICBmbGFnLgorICAgKgorICAgKiAgICAgQEZUX0xPQURfTk9fU0NBTEUgYWx3YXlzIHNldHMgdGhpcyBmbGFnLgorICAgKgorICAgKiAgIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIDo6CisgICAqICAgICBMb2FkIHRoZSBnbHlwaCBmb3IgdmVydGljYWwgdGV4dCBsYXlvdXQuICBJbiBwYXJ0aWN1bGFyLCB0aGUKKyAgICogICAgIGBhZHZhbmNlJyB2YWx1ZSBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgaXMgc2V0IHRvIHRoZQorICAgKiAgICAgYHZlcnRBZHZhbmNlJyB2YWx1ZSBvZiB0aGUgYG1ldHJpY3MnIGZpZWxkLgorICAgKgorICAgKiAgICAgSW4gY2FzZSBARlRfSEFTX1ZFUlRJQ0FMIGRvZXNuJ3QgcmV0dXJuIHRydWUsIHlvdSBzaG91bGRuJ3QgdXNlCisgICAqICAgICB0aGlzIGZsYWcgY3VycmVudGx5LiAgUmVhc29uIGlzIHRoYXQgaW4gdGhpcyBjYXNlIHZlcnRpY2FsIG1ldHJpY3MKKyAgICogICAgIGdldCBzeW50aGVzaXplZCwgYW5kIHRob3NlIHZhbHVlcyBhcmUgbm90IGFsd2F5cyBjb25zaXN0ZW50IGFjcm9zcworICAgKiAgICAgdmFyaW91cyBmb250IGZvcm1hdHMuCisgICAqCisgICAqICAgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCA6OgorICAgKiAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGF1dG8taGludGVyIGlzIHByZWZlcnJlZCBvdmVyIHRoZSBmb250J3MgbmF0aXZlCisgICAqICAgICBoaW50ZXIuICBTZWUgYWxzbyB0aGUgbm90ZSBiZWxvdy4KKyAgICoKKyAgICogICBGVF9MT0FEX1BFREFOVElDIDo6CisgICAqICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBkcml2ZXIgc2hvdWxkIHBlcmZvcm0gcGVkYW50aWMgdmVyaWZpY2F0aW9ucworICAgKiAgICAgZHVyaW5nIGdseXBoIGxvYWRpbmcuICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIGRldGVjdCBicm9rZW4gZ2x5cGhzCisgICAqICAgICBpbiBmb250cy4gIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIHRyaWVzIHRvIGhhbmRsZSBicm9rZW4gZm9udHMgYWxzby4KKyAgICoKKyAgICogICAgIEluIHBhcnRpY3VsYXIsIGVycm9ycyBmcm9tIHRoZSBUcnVlVHlwZSBieXRlY29kZSBlbmdpbmUgYXJlIG5vdAorICAgKiAgICAgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGlzIGZsYWcgaXMgbm90IHNldDsgdGhpcyBtaWdodAorICAgKiAgICAgcmVzdWx0IGluIHBhcnRpYWxseSBoaW50ZWQgb3IgZGlzdG9ydGVkIGdseXBocyBpbiBjYXNlIGEgZ2x5cGgncworICAgKiAgICAgYnl0ZWNvZGUgaXMgYnVnZ3kuCisgICAqCisgICAqICAgRlRfTE9BRF9OT19SRUNVUlNFIDo6CisgICAqICAgICBJbmRpY2F0ZSB0aGF0IHRoZSBmb250IGRyaXZlciBzaG91bGQgbm90IGxvYWQgY29tcG9zaXRlIGdseXBocworICAgKiAgICAgcmVjdXJzaXZlbHkuICBJbnN0ZWFkLCBpdCBzaG91bGQgc2V0IHRoZSBgbnVtX3N1YmdseXBoJyBhbmQKKyAgICogICAgIGBzdWJnbHlwaHMnIHZhbHVlcyBvZiB0aGUgZ2x5cGggc2xvdCBhY2NvcmRpbmdseSwgYW5kIHNldAorICAgKiAgICAgYGdseXBoLT5mb3JtYXQnIHRvIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLiAgVGhlIGRlc2NyaXB0aW9uIG9mCisgICAqICAgICBzdWJnbHlwaHMgY2FuIHRoZW4gYmUgYWNjZXNzZWQgd2l0aCBARlRfR2V0X1N1YkdseXBoX0luZm8uCisgICAqCisgICAqICAgICBUaGlzIGZsYWcgaW1wbGllcyBARlRfTE9BRF9OT19TQ0FMRSBhbmQgQEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STS4KKyAgICoKKyAgICogICBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0gOjoKKyAgICogICAgIEluZGljYXRlcyB0aGF0IHRoZSB0cmFuc2Zvcm0gbWF0cml4IHNldCBieSBARlRfU2V0X1RyYW5zZm9ybSBzaG91bGQKKyAgICogICAgIGJlIGlnbm9yZWQuCisgICAqCisgICAqICAgRlRfTE9BRF9NT05PQ0hST01FIDo6CisgICAqICAgICBUaGlzIGZsYWcgaXMgdXNlZCB3aXRoIEBGVF9MT0FEX1JFTkRFUiB0byBpbmRpY2F0ZSB0aGF0IHlvdSB3YW50IHRvCisgICAqICAgICByZW5kZXIgYW4gb3V0bGluZSBnbHlwaCB0byBhIDEtYml0IG1vbm9jaHJvbWUgYml0bWFwIGdseXBoLCB3aXRoCisgICAqICAgICA4fnBpeGVscyBwYWNrZWQgaW50byBlYWNoIGJ5dGUgb2YgdGhlIGJpdG1hcCBkYXRhLgorICAgKgorICAgKiAgICAgTm90ZSB0aGF0IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaGludGluZyBhbGdvcml0aG0gdXNlZC4gIFlvdQorICAgKiAgICAgc2hvdWxkIHJhdGhlciB1c2UgQEZUX0xPQURfVEFSR0VUX01PTk8gc28gdGhhdCB0aGUKKyAgICogICAgIG1vbm9jaHJvbWUtb3B0aW1pemVkIGhpbnRpbmcgYWxnb3JpdGhtIGlzIHVzZWQuCisgICAqCisgICAqICAgRlRfTE9BRF9MSU5FQVJfREVTSUdOIDo6CisgICAqICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgYGxpbmVhckhvcmlBZHZhbmNlJyBhbmQgYGxpbmVhclZlcnRBZHZhbmNlJworICAgKiAgICAgZmllbGRzIG9mIEBGVF9HbHlwaFNsb3RSZWMgc2hvdWxkIGJlIGtlcHQgaW4gZm9udCB1bml0cy4gIFNlZQorICAgKiAgICAgQEZUX0dseXBoU2xvdFJlYyBmb3IgZGV0YWlscy4KKyAgICoKKyAgICogICBGVF9MT0FEX05PX0FVVE9ISU5UIDo6CisgICAqICAgICBEaXNhYmxlIGF1dG8taGludGVyLiAgU2VlIGFsc28gdGhlIG5vdGUgYmVsb3cuCisgICAqCisgICAqICAgRlRfTE9BRF9DT0xPUiA6OgorICAgKiAgICAgVGhpcyBmbGFnIGlzIHVzZWQgdG8gcmVxdWVzdCBsb2FkaW5nIG9mIGNvbG9yIGVtYmVkZGVkLWJpdG1hcAorICAgKiAgICAgaW1hZ2VzLiAgVGhlIHJlc3VsdGluZyBjb2xvciBiaXRtYXBzLCBpZiBhdmFpbGFibGUsIHdpbGwgaGF2ZSB0aGUKKyAgICogICAgIEBGVF9QSVhFTF9NT0RFX0JHUkEgZm9ybWF0LiAgV2hlbiB0aGUgZmxhZyBpcyBub3QgdXNlZCBhbmQgY29sb3IKKyAgICogICAgIGJpdG1hcHMgYXJlIGZvdW5kLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIDI1Ni1sZXZlbCBncmF5CisgICAqICAgICBiaXRtYXBzIHRyYW5zcGFyZW50bHkuICBUaG9zZSBiaXRtYXBzIHdpbGwgYmUgaW4gdGhlCisgICAqICAgICBARlRfUElYRUxfTU9ERV9HUkFZIGZvcm1hdC4KKyAgICoKKyAgICogICBGVF9MT0FEX0NST1BfQklUTUFQIDo6CisgICAqICAgICBJZ25vcmVkLiAgRGVwcmVjYXRlZC4KKyAgICoKKyAgICogICBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCA6OgorICAgKiAgICAgSWdub3JlZC4gIERlcHJlY2F0ZWQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEJ5IGRlZmF1bHQsIGhpbnRpbmcgaXMgZW5hYmxlZCBhbmQgdGhlIGZvbnQncyBuYXRpdmUgaGludGVyIChzZWUKKyAgICogICBARlRfRkFDRV9GTEFHX0hJTlRFUikgaXMgcHJlZmVycmVkIG92ZXIgdGhlIGF1dG8taGludGVyLiAgWW91IGNhbgorICAgKiAgIGRpc2FibGUgaGludGluZyBieSBzZXR0aW5nIEBGVF9MT0FEX05PX0hJTlRJTkcgb3IgY2hhbmdlIHRoZQorICAgKiAgIHByZWNlZGVuY2UgYnkgc2V0dGluZyBARlRfTE9BRF9GT1JDRV9BVVRPSElOVC4gIFlvdSBjYW4gYWxzbyBzZXQKKyAgICogICBARlRfTE9BRF9OT19BVVRPSElOVCBpbiBjYXNlIHlvdSBkb24ndCB3YW50IHRoZSBhdXRvLWhpbnRlciB0byBiZQorICAgKiAgIHVzZWQgYXQgYWxsLgorICAgKgorICAgKiAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgQEZUX0ZBQ0VfRkxBR19UUklDS1kgZm9yIGEgc3BlY2lhbCBleGNlcHRpb24KKyAgICogICAoYWZmZWN0aW5nIG9ubHkgYSBoYW5kZnVsIG9mIEFzaWFuIGZvbnRzKS4KKyAgICoKKyAgICogICBCZXNpZGVzIGRlY2lkaW5nIHdoaWNoIGhpbnRlciB0byB1c2UsIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hpY2gKKyAgICogICBoaW50aW5nIGFsZ29yaXRobSB0byB1c2UuICBTZWUgQEZUX0xPQURfVEFSR0VUX1hYWCBmb3IgZGV0YWlscy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhlIGF1dG8taGludGVyIG5lZWRzIGEgdmFsaWQgVW5pY29kZSBjbWFwIChlaXRoZXIgYSBuYXRpdmUKKyAgICogICBvbmUgb3Igc3ludGhlc2l6ZWQgYnkgRnJlZVR5cGUpIGZvciBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzLiAgSWYgYQorICAgKiAgIGZvbnQgcHJvdmlkZXMgYW4gaW5jb3JyZWN0IG1hcHBpbmcgKGZvciBleGFtcGxlLCBhc3NpZ25pbmcgdGhlCisgICAqICAgY2hhcmFjdGVyIGNvZGUgVSswMDVBLCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaLCB0byBhIGdseXBoIGRlcGljdGluZyBhCisgICAqICAgbWF0aGVtYXRpY2FsIGludGVncmFsIHNpZ24pLCB0aGUgYXV0by1oaW50ZXIgbWlnaHQgcHJvZHVjZSB1c2VsZXNzCisgICAqICAgcmVzdWx0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0xPQURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMCApCisjZGVmaW5lIEZUX0xPQURfTk9fSElOVElORyAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDEgKQorI2RlZmluZSBGVF9MT0FEX1JFTkRFUiAgICAgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAyICkKKyNkZWZpbmUgRlRfTE9BRF9OT19CSVRNQVAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMyApCisjZGVmaW5lIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICAgICAgICAgICAgICAoIDFMIDw8IDQgKQorI2RlZmluZSBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UICAgICAgICAgICAgICAgKCAxTCA8PCA1ICkKKyNkZWZpbmUgRlRfTE9BRF9DUk9QX0JJVE1BUCAgICAgICAgICAgICAgICAgICggMUwgPDwgNiApCisjZGVmaW5lIEZUX0xPQURfUEVEQU5USUMgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDcgKQorI2RlZmluZSBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCAgKCAxTCA8PCA5ICkKKyNkZWZpbmUgRlRfTE9BRF9OT19SRUNVUlNFICAgICAgICAgICAgICAgICAgICggMUwgPDwgMTAgKQorI2RlZmluZSBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0gICAgICAgICAgICAgKCAxTCA8PCAxMSApCisjZGVmaW5lIEZUX0xPQURfTU9OT0NIUk9NRSAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDEyICkKKyNkZWZpbmUgRlRfTE9BRF9MSU5FQVJfREVTSUdOICAgICAgICAgICAgICAgICggMUwgPDwgMTMgKQorI2RlZmluZSBGVF9MT0FEX05PX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxNSApCisgIC8qIEJpdHMgMTYuLjE5IGFyZSB1c2VkIGJ5IGBGVF9MT0FEX1RBUkdFVF8nICovCisjZGVmaW5lIEZUX0xPQURfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDIwICkKKworICAvKiAqLworCisgIC8qIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IGNlcnRhaW4gZm9udCBkcml2ZXJzISAqLworI2RlZmluZSBGVF9MT0FEX0FEVkFOQ0VfT05MWSAgICAgICAgICAgICAgICAgKCAxTCA8PCA4ICkKKyNkZWZpbmUgRlRfTE9BRF9TQklUU19PTkxZICAgICAgICAgICAgICAgICAgICggMUwgPDwgMTQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0xPQURfVEFSR0VUX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbHVlcyB0aGF0IGFyZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIGhpbnRpbmcgYWxnb3JpdGhtCisgICAqICAgdG8gdXNlIGJ5IHRoZSBoaW50ZXIuICBZb3Ugc2hvdWxkIE9SIG9uZSBvZiB0aGVzZSB2YWx1ZXMgdG8geW91cgorICAgKiAgIGBsb2FkX2ZsYWdzJyB3aGVuIGNhbGxpbmcgQEZUX0xvYWRfR2x5cGguCisgICAqCisgICAqICAgTm90ZSB0aGF0IGZvbnQncyBuYXRpdmUgaGludGVycyBtYXkgaWdub3JlIHRoZSBoaW50aW5nIGFsZ29yaXRobSB5b3UKKyAgICogICBoYXZlIHNwZWNpZmllZCAoZS5nLiwgdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyKS4gIFlvdSBjYW4gc2V0CisgICAqICAgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG8taGludGVyIGlzIHVzZWQuCisgICAqCisgICAqICAgQWxzbyBub3RlIHRoYXQgQEZUX0xPQURfVEFSR0VUX0xJR0hUIGlzIGFuIGV4Y2VwdGlvbiwgaW4gdGhhdCBpdAorICAgKiAgIGFsd2F5cyBpbXBsaWVzIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5ULgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0xPQURfVEFSR0VUX05PUk1BTCA6OgorICAgKiAgICAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdCBoaW50aW5nIGFsZ29yaXRobSwgb3B0aW1pemVkIGZvcgorICAgKiAgICAgc3RhbmRhcmQgZ3JheS1sZXZlbCByZW5kZXJpbmcuICBGb3IgbW9ub2Nocm9tZSBvdXRwdXQsIHVzZQorICAgKiAgICAgQEZUX0xPQURfVEFSR0VUX01PTk8gaW5zdGVhZC4KKyAgICoKKyAgICogICBGVF9MT0FEX1RBUkdFVF9MSUdIVCA6OgorICAgKiAgICAgQSBsaWdodGVyIGhpbnRpbmcgYWxnb3JpdGhtIGZvciBub24tbW9ub2Nocm9tZSBtb2Rlcy4gIE1hbnkKKyAgICogICAgIGdlbmVyYXRlZCBnbHlwaHMgYXJlIG1vcmUgZnV6enkgYnV0IGJldHRlciByZXNlbWJsZSBpdHMgb3JpZ2luYWwKKyAgICogICAgIHNoYXBlLiAgQSBiaXQgbGlrZSByZW5kZXJpbmcgb24gTWFjIE9TflguCisgICAqCisgICAqICAgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGlzIHRhcmdldCBpbXBsaWVzIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5ULgorICAgKgorICAgKiAgIEZUX0xPQURfVEFSR0VUX01PTk8gOjoKKyAgICogICAgIFN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUKKyAgICogICAgIG91dHB1dC4gIFRoZSByZXN1bHQgaXMgcHJvYmFibHkgdW5wbGVhc2FudCBpZiB0aGUgZ2x5cGggaXMgcmVuZGVyZWQKKyAgICogICAgIGluIG5vbi1tb25vY2hyb21lIG1vZGVzLgorICAgKgorICAgKiAgIEZUX0xPQURfVEFSR0VUX0xDRCA6OgorICAgKiAgICAgQSB2YXJpYW50IG9mIEBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgb3B0aW1pemVkIGZvciBob3Jpem9udGFsbHkKKyAgICogICAgIGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuCisgICAqCisgICAqICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgOjoKKyAgICogICAgIEEgdmFyaWFudCBvZiBARlRfTE9BRF9UQVJHRVRfTk9STUFMIG9wdGltaXplZCBmb3IgdmVydGljYWxseQorICAgKiAgICAgZGVjaW1hdGVkIExDRCBkaXNwbGF5cy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IHNob3VsZCB1c2Ugb25seSBfb25lXyBvZiB0aGUgRlRfTE9BRF9UQVJHRVRfWFhYIHZhbHVlcyBpbiB5b3VyCisgICAqICAgYGxvYWRfZmxhZ3MnLiAgVGhleSBjYW4ndCBiZSBPUmVkLgorICAgKgorICAgKiAgIElmIEBGVF9MT0FEX1JFTkRFUiBpcyBhbHNvIHNldCwgdGhlIGdseXBoIGlzIHJlbmRlcmVkIGluIHRoZQorICAgKiAgIGNvcnJlc3BvbmRpbmcgbW9kZSAoaS5lLiwgdGhlIG1vZGUgdGhhdCBtYXRjaGVzIHRoZSB1c2VkIGFsZ29yaXRobQorICAgKiAgIGJlc3QpLiAgQW4gZXhlcHRpb24gaXMgRlRfTE9BRF9UQVJHRVRfTU9OTyBzaW5jZSBpdCBpbXBsaWVzCisgICAqICAgQEZUX0xPQURfTU9OT0NIUk9NRS4KKyAgICoKKyAgICogICBZb3UgY2FuIHVzZSBhIGhpbnRpbmcgYWxnb3JpdGhtIHRoYXQgZG9lc24ndCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lCisgICAqICAgcmVuZGVyaW5nIG1vZGUuICBBcyBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhlIGBsaWdodCcKKyAgICogICBoaW50aW5nIGFsZ29yaXRobSBhbmQgaGF2ZSB0aGUgcmVzdWx0cyByZW5kZXJlZCBpbiBob3Jpem9udGFsIExDRAorICAgKiAgIHBpeGVsIG1vZGUsIHdpdGggY29kZSBsaWtlCisgICAqCisgICAqICAgICB7CisgICAqICAgICAgIEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LAorICAgKiAgICAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzIHwgRlRfTE9BRF9UQVJHRVRfTElHSFQgKTsKKyAgICoKKyAgICogICAgICAgRlRfUmVuZGVyX0dseXBoKCBmYWNlLT5nbHlwaCwgRlRfUkVOREVSX01PREVfTENEICk7CisgICAqICAgICB9CisgICAqCisgICAqLworI2RlZmluZSBGVF9MT0FEX1RBUkdFVF8oIHggKSAgICggKEZUX0ludDMyKSggKHgpICYgMTUgKSA8PCAxNiApCisKKyNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTk9STUFMICBGVF9MT0FEX1RBUkdFVF8oIEZUX1JFTkRFUl9NT0RFX05PUk1BTCApCisjZGVmaW5lIEZUX0xPQURfVEFSR0VUX0xJR0hUICAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9MSUdIVCAgKQorI2RlZmluZSBGVF9MT0FEX1RBUkdFVF9NT05PICAgIEZUX0xPQURfVEFSR0VUXyggRlRfUkVOREVSX01PREVfTU9OTyAgICkKKyNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTENEICAgICBGVF9MT0FEX1RBUkdFVF8oIEZUX1JFTkRFUl9NT0RFX0xDRCAgICApCisjZGVmaW5lIEZUX0xPQURfVEFSR0VUX0xDRF9WICAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9MQ0RfViAgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9MT0FEX1RBUkdFVF9NT0RFCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIEBGVF9SZW5kZXJfTW9kZSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4KKyAgICogICBARlRfTE9BRF9UQVJHRVRfWFhYIHZhbHVlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTU9ERSggeCApICAoIChGVF9SZW5kZXJfTW9kZSkoICggKHgpID4+IDE2ICkgJiAxNSApICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBnbHlwaCAqLworICAvKiAgICBpbWFnZXMgd2hlbiB0aGV5IGFyZSBsb2FkZWQgaW50byBhIGdseXBoIHNsb3QgdGhyb3VnaCAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0xvYWRfR2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF0cml4IDo6IEEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24ncyAyeDIgbWF0cml4LiAgVXNlfjAgZm9yICovCisgIC8qICAgICAgICAgICAgICB0aGUgaWRlbnRpdHkgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWx0YSAgOjogQSBwb2ludGVyIHRvIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IuICBVc2V+MCBmb3IgdGhlIG51bGwgKi8KKyAgLyogICAgICAgICAgICAgIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHRyYW5zZm9ybWF0aW9uIGlzIG9ubHkgYXBwbGllZCB0byBzY2FsYWJsZSBpbWFnZSBmb3JtYXRzIGFmdGVyICovCisgIC8qICAgIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQuICBJdCBtZWFucyB0aGF0IGhpbnRpbmcgaXMgdW5hbHRlcmVkIGJ5ICAqLworICAvKiAgICB0aGUgdHJhbnNmb3JtYXRpb24gYW5kIGlzIHBlcmZvcm1lZCBvbiB0aGUgY2hhcmFjdGVyIHNpemUgZ2l2ZW4gaW4gKi8KKyAgLyogICAgdGhlIGxhc3QgY2FsbCB0byBARlRfU2V0X0NoYXJfU2l6ZSBvciBARlRfU2V0X1BpeGVsX1NpemVzLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgdGhpcyBhbHNvIHRyYW5zZm9ybXMgdGhlIGBmYWNlLmdseXBoLmFkdmFuY2UnIGZpZWxkLCBidXQgKi8KKyAgLyogICAgKm5vdCogdGhlIHZhbHVlcyBpbiBgZmFjZS5nbHlwaC5tZXRyaWNzJy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9TZXRfVHJhbnNmb3JtKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGRlbHRhICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlbnVtZXJhdGlvbiB0eXBlIHRoYXQgbGlzdHMgdGhlIHJlbmRlciBtb2RlcyBzdXBwb3J0ZWQgYnkgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGV+Mi4gIEVhY2ggbW9kZSBjb3JyZXNwb25kcyB0byBhIHNwZWNpZmljIHR5cGUgb2Ygc2NhbmxpbmUgICovCisgIC8qICAgIGNvbnZlcnNpb24gcGVyZm9ybWVkIG9uIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRm9yIGJpdG1hcCBmb250cyBhbmQgZW1iZWRkZWQgYml0bWFwcyB0aGUgYGJpdG1hcC0+cGl4ZWxfbW9kZScgICAgICovCisgIC8qICAgIGZpZWxkIGluIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSBnaXZlcyB0aGUgZm9ybWF0IG9mIHRoZSAgICAqLworICAvKiAgICByZXR1cm5lZCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFsbCBtb2RlcyBleGNlcHQgQEZUX1JFTkRFUl9NT0RFX01PTk8gdXNlIDI1NiBsZXZlbHMgb2Ygb3BhY2l0eS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JFTkRFUl9NT0RFX05PUk1BTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgcmVuZGVyIG1vZGU7IGl0IGNvcnJlc3BvbmRzIHRvIDgtYml0ICAgICAgICAgKi8KKyAgLyogICAgICBhbnRpLWFsaWFzZWQgYml0bWFwcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SRU5ERVJfTU9ERV9MSUdIVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gQEZUX1JFTkRFUl9NT0RFX05PUk1BTC4gIEl0IGlzIG9ubHkgICAgICAgICovCisgIC8qICAgICAgZGVmaW5lZCBhcyBhIHNlcGFyYXRlIHZhbHVlIGJlY2F1c2UgcmVuZGVyIG1vZGVzIGFyZSBhbHNvIHVzZWQgICAqLworICAvKiAgICAgIGluZGlyZWN0bHkgdG8gZGVmaW5lIGhpbnRpbmcgYWxnb3JpdGhtIHNlbGVjdG9ycy4gIFNlZSAgICAgICAgICAgKi8KKyAgLyogICAgICBARlRfTE9BRF9UQVJHRVRfWFhYIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SRU5ERVJfTU9ERV9NT05PIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gMS1iaXQgYml0bWFwcyAod2l0aCAyfmxldmVscyBvZiAgICAgICAgICovCisgIC8qICAgICAgb3BhY2l0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkVOREVSX01PREVfTENEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIGhvcml6b250YWwgUkdCIGFuZCBCR1Igc3ViLXBpeGVsICAgICAgICAqLworICAvKiAgICAgIGRpc3BsYXlzIGxpa2UgTENEIHNjcmVlbnMuICBJdCBwcm9kdWNlcyA4LWJpdCBiaXRtYXBzIHRoYXQgYXJlICAgKi8KKyAgLyogICAgICAzfnRpbWVzIHRoZSB3aWR0aCBvZiB0aGUgb3JpZ2luYWwgZ2x5cGggb3V0bGluZSBpbiBwaXhlbHMsIGFuZCAgICovCisgIC8qICAgICAgd2hpY2ggdXNlIHRoZSBARlRfUElYRUxfTU9ERV9MQ0QgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkVOREVSX01PREVfTENEX1YgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIHZlcnRpY2FsIFJHQiBhbmQgQkdSIHN1Yi1waXhlbCBkaXNwbGF5cyAqLworICAvKiAgICAgIChsaWtlIFBEQSBzY3JlZW5zLCByb3RhdGVkIExDRCBkaXNwbGF5cywgZXRjLikuICBJdCBwcm9kdWNlcyAgICAgKi8KKyAgLyogICAgICA4LWJpdCBiaXRtYXBzIHRoYXQgYXJlIDN+dGltZXMgdGhlIGhlaWdodCBvZiB0aGUgb3JpZ2luYWwgICAgICAgICovCisgIC8qICAgICAgZ2x5cGggb3V0bGluZSBpbiBwaXhlbHMgYW5kIHVzZSB0aGUgQEZUX1BJWEVMX01PREVfTENEX1YgbW9kZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBMQ0Qtb3B0aW1pemVkIGdseXBoIGJpdG1hcHMgcHJvZHVjZWQgYnkgRlRfUmVuZGVyX0dseXBoIGNhbiBiZSAqLworICAvKiAgICBmaWx0ZXJlZCB0byByZWR1Y2UgY29sb3ItZnJpbmdlcyBieSB1c2luZyBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgKi8KKyAgLyogICAgKG5vdCBhY3RpdmUgaW4gdGhlIGRlZmF1bHQgYnVpbGRzKS4gIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gICAgICovCisgIC8qICAgIGVpdGhlciBjYWxsIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciAoaWYgYXZhaWxhYmxlKSBvciBkbyB0aGUgICAgICAqLworICAvKiAgICBmaWx0ZXJpbmcgaXRzZWxmLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBzZWxlY3RlZCByZW5kZXIgbW9kZSBvbmx5IGFmZmVjdHMgdmVjdG9yIGdseXBocyBvZiBhIGZvbnQuICAgICAqLworICAvKiAgICBFbWJlZGRlZCBiaXRtYXBzIG9mdGVuIGhhdmUgYSBkaWZmZXJlbnQgcGl4ZWwgbW9kZSBsaWtlICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX1BJWEVMX01PREVfTU9OTy4gIFlvdSBjYW4gdXNlIEBGVF9CaXRtYXBfQ29udmVydCB0byB0cmFuc2Zvcm0gICovCisgIC8qICAgIHRoZW0gaW50byA4LWJpdCBwaXhtYXBzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9SZW5kZXJfTW9kZV8KKyAgeworICAgIEZUX1JFTkRFUl9NT0RFX05PUk1BTCA9IDAsCisgICAgRlRfUkVOREVSX01PREVfTElHSFQsCisgICAgRlRfUkVOREVSX01PREVfTU9OTywKKyAgICBGVF9SRU5ERVJfTU9ERV9MQ0QsCisgICAgRlRfUkVOREVSX01PREVfTENEX1YsCisKKyAgICBGVF9SRU5ERVJfTU9ERV9NQVgKKworICB9IEZUX1JlbmRlcl9Nb2RlOworCisKKyAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgKi8KKyAgLyogYEZUX1JlbmRlcl9Nb2RlJyB2YWx1ZXMgaW5zdGVhZCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfcmVuZGVyX21vZGVfbm9ybWFsICBGVF9SRU5ERVJfTU9ERV9OT1JNQUwKKyNkZWZpbmUgZnRfcmVuZGVyX21vZGVfbW9ubyAgICBGVF9SRU5ERVJfTU9ERV9NT05PCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgdG8gYSBiaXRtYXAuICBJdCBkb2VzIHNvIGJ5IGluc3BlY3RpbmcgKi8KKyAgLyogICAgdGhlIGdseXBoIGltYWdlIGZvcm1hdCwgZmluZGluZyB0aGUgcmVsZXZhbnQgcmVuZGVyZXIsIGFuZCAgICAgICAgICovCisgIC8qICAgIGludm9raW5nIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNsb3QgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBnbHlwaCBzbG90IGNvbnRhaW5pbmcgdGhlIGltYWdlIHRvICAqLworICAvKiAgICAgICAgICAgICAgICAgICBjb252ZXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZW5kZXJfbW9kZSA6OiBUaGlzIGlzIHRoZSByZW5kZXIgbW9kZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2x5cGggICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgaW1hZ2UgaW50byBhIGJpdG1hcC4gIFNlZSBARlRfUmVuZGVyX01vZGUgZm9yIGEgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMsIGZvbnQgc2NhbGluZyB2YWx1ZXMgbXVzdCBiZSBzZXQgd2l0aCAgICAqLworICAvKiAgICBmdW5jdGlvbnMgbGlrZSBARlRfU2V0X0NoYXJfU2l6ZSBiZWZvcmUgY2FsbGluZyBGVF9SZW5kZXJfR2x5cGguICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9SZW5kZXJfR2x5cGgoIEZUX0dseXBoU2xvdCAgICBzbG90LAorICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfS2VybmluZ19Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGtlcm5pbmcgdmFsdWVzIHRvIHJldHVybiBpbiAgICovCisgIC8qICAgIEBGVF9HZXRfS2VybmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgOjogUmV0dXJuIHNjYWxlZCBhbmQgZ3JpZC1maXR0ZWQga2VybmluZyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlcyAodmFsdWUgaXN+MCkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfVU5GSVRURUQgOjogUmV0dXJuIHNjYWxlZCBidXQgdW4tZ3JpZC1maXR0ZWQga2VybmluZyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfVU5TQ0FMRUQgOjogUmV0dXJuIHRoZSBrZXJuaW5nIHZlY3RvciBpbiBvcmlnaW5hbCBmb250ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfS2VybmluZ19Nb2RlXworICB7CisgICAgRlRfS0VSTklOR19ERUZBVUxUICA9IDAsCisgICAgRlRfS0VSTklOR19VTkZJVFRFRCwKKyAgICBGVF9LRVJOSU5HX1VOU0NBTEVECisKKyAgfSBGVF9LZXJuaW5nX01vZGU7CisKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBgRlRfS2VybmluZ19Nb2RlJyB2YWx1ZXMgaW5zdGVhZCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9rZXJuaW5nX2RlZmF1bHQgICBGVF9LRVJOSU5HX0RFRkFVTFQKKyNkZWZpbmUgZnRfa2VybmluZ191bmZpdHRlZCAgRlRfS0VSTklOR19VTkZJVFRFRAorI2RlZmluZSBmdF9rZXJuaW5nX3Vuc2NhbGVkICBGVF9LRVJOSU5HX1VOU0NBTEVECisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvIGdseXBocyBvZiBhIHNhbWUgZmFjZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBrZXJuX21vZGUgICA6OiBTZWUgQEZUX0tlcm5pbmdfTW9kZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgc2NhbGUgYW5kIGRpbWVuc2lvbiBvZiB0aGUgcmV0dXJuZWQgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFrZXJuaW5nICAgIDo6IFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgZWl0aGVyIGluIGZvbnQgdW5pdHMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBvciBpbiBwaXhlbHMgKDI2LjYgZm9ybWF0KSBmb3Igc2NhbGFibGUgZm9ybWF0cywgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgYW5kIGluIHBpeGVscyBmb3IgZml4ZWQtc2l6ZXMgZm9ybWF0cy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUgICAgICAgICovCisgIC8qICAgIHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZC4gIE90aGVyIGxheW91dHMsIG9yIG1vcmUgc29waGlzdGljYXRlZCAgICAqLworICAvKiAgICBrZXJuaW5ncywgYXJlIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcyBBUEkgZnVuY3Rpb24gLS0gdGhleSBjYW4gYmUgKi8KKyAgLyogICAgaW1wbGVtZW50ZWQgdGhyb3VnaCBmb3JtYXQtc3BlY2lmaWMgaW50ZXJmYWNlcy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0tlcm5pbmcoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcmlnaHRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBrZXJuX21vZGUsCisgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICpha2VybmluZyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1RyYWNrX0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIHRoZSB0cmFjayBrZXJuaW5nIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb2ludF9zaXplIDo6IFRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlZ3JlZSAgICAgOjogVGhlIGRlZ3JlZSBvZiB0aWdodG5lc3MuICBJbmNyZWFzaW5nbHkgbmVnYXRpdmUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyByZXByZXNlbnQgdGlnaHRlciB0cmFjayBrZXJuaW5nLCB3aGlsZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nbHkgcG9zaXRpdmUgdmFsdWVzIHJlcHJlc2VudCBsb29zZXIgdHJhY2sgICovCisgIC8qICAgICAgICAgICAgICAgICAga2VybmluZy4gIFZhbHVlIHplcm8gbWVhbnMgbm8gdHJhY2sga2VybmluZy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFrZXJuaW5nICAgOjogVGhlIGtlcm5pbmcgaW4gMTYuMTYgZnJhY3Rpb25hbCBwb2ludHMsIHRvIGJlICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHVuaWZvcm1seSBhcHBsaWVkIGJldHdlZW4gYWxsIGdseXBocy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDdXJyZW50bHksIG9ubHkgdGhlIFR5cGV+MSBmb250IGRyaXZlciBzdXBwb3J0cyB0cmFjayBrZXJuaW5nLCAgICAgKi8KKyAgLyogICAgdXNpbmcgZGF0YSBmcm9tIEFGTSBmaWxlcyAoaWYgYXR0YWNoZWQgd2l0aCBARlRfQXR0YWNoX0ZpbGUgb3IgICAgICovCisgIC8qICAgIEBGVF9BdHRhY2hfU3RyZWFtKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB2ZXJ5IGZldyBBRk0gZmlsZXMgY29tZSB3aXRoIHRyYWNrIGtlcm5pbmcgZGF0YTsgcGxlYXNlIHJlZmVyICovCisgIC8qICAgIHRvIHRoZSBBZG9iZSdzIEFGTSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9UcmFja19LZXJuaW5nKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgIHBvaW50X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRlZ3JlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgYWtlcm5pbmcgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9HbHlwaF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIHRoZSBBU0NJSSBuYW1lIG9mIGEgZ2l2ZW4gZ2x5cGggaW4gYSBmYWNlLiAgVGhpcyBvbmx5ICAgICAqLworICAvKiAgICB3b3JrcyBmb3IgdGhvc2UgZmFjZXMgd2hlcmUgQEZUX0hBU19HTFlQSF9OQU1FUyhmYWNlKSByZXR1cm5zfjEuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVmZmVyX21heCAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1ZmZlciAgICAgIDo6IEEgcG9pbnRlciB0byBhIHRhcmdldCBidWZmZXIgd2hlcmUgdGhlIG5hbWUgaXMgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBjb3BpZWQgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiB0aGUgZmFjZSBkb2Vzbid0IHByb3ZpZGUgZ2x5cGggbmFtZXMgb3IgaWYgKi8KKyAgLyogICAgdGhlIGdseXBoIGluZGV4IGlzIGludmFsaWQuICBJbiBhbGwgY2FzZXMgb2YgZmFpbHVyZSwgdGhlIGZpcnN0ICAgICovCisgIC8qICAgIGJ5dGUgb2YgYGJ1ZmZlcicgaXMgc2V0IHRvfjAgdG8gaW5kaWNhdGUgYW4gZW1wdHkgbmFtZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGdseXBoIG5hbWUgaXMgdHJ1bmNhdGVkIHRvIGZpdCB3aXRoaW4gdGhlIGJ1ZmZlciBpZiBpdCBpcyB0b28gICovCisgIC8qICAgIGxvbmcuICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyB6ZXJvLXRlcm1pbmF0ZWQuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQmUgYXdhcmUgdGhhdCBGcmVlVHlwZSByZW9yZGVycyBnbHlwaCBpbmRpY2VzIGludGVybmFsbHkgc28gdGhhdCAgICovCisgIC8qICAgIGdseXBoIGluZGV4fjAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZSBgbWlzc2luZyBnbHlwaCcgKGNhbGxlZCAgICAqLworICAvKiAgICBgLm5vdGRlZicpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybyAgICAgICAgICAqLworICAvKiAgICBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9ucy5oJy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfR2x5cGhfTmFtZSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgYnVmZmVyX21heCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0cmlldmUgdGhlIEFTQ0lJIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuIGZhY2UsIGlmIGF2YWlsYWJsZS4gICovCisgIC8qICAgIFRoaXMgb25seSB3b3JrcyB3aXRoIFBvc3RTY3JpcHQgYW5kIFRydWVUeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgcG9pbnRlciB0byB0aGUgZmFjZSdzIFBvc3RTY3JpcHQgbmFtZS4gIE5VTEwgaWYgdW5hdmFpbGFibGUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG93bmVkIGJ5IHRoZSBmYWNlIGFuZCBpcyBkZXN0cm95ZWQgd2l0aCAgICAqLworICAvKiAgICBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggY29uc3QgY2hhciogKQorICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKCBGVF9GYWNlICBmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZWxlY3RfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWxlY3QgYSBnaXZlbiBjaGFybWFwIGJ5IGl0cyBlbmNvZGluZyB0YWcgKGFzIGxpc3RlZCBpbiAgICAgICAgICAgKi8KKyAgLyogICAgYGZyZWV0eXBlLmgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZW5jb2RpbmcgOjogQSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIG5vIGNoYXJtYXAgaW4gdGhlIGZhY2UgICAgICAgICAgICovCisgIC8qICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBlbmNvZGluZyBxdWVyaWVkIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQmVjYXVzZSBtYW55IGZvbnRzIGNvbnRhaW4gbW9yZSB0aGFuIGEgc2luZ2xlIGNtYXAgZm9yIFVuaWNvZGUgICAgICovCisgIC8qICAgIGVuY29kaW5nLCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIHNwZWNpYWwgY29kZSB0byBzZWxlY3QgdGhlIG9uZSAgICAqLworICAvKiAgICB0aGF0IGNvdmVycyBVbmljb2RlIGJlc3QgKGBiZXN0JyBpbiB0aGUgc2Vuc2UgdGhhdCBhIFVDUy00IGNtYXAgaXMgKi8KKyAgLyogICAgcHJlZmVycmVkIHRvIGEgVUNTLTIgY21hcCkuICBJdCBpcyB0aHVzIHByZWZlcmFibGUgdG8gICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9TZXRfQ2hhcm1hcCBpbiB0aGlzIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NlbGVjdF9DaGFybWFwKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0VuY29kaW5nICBlbmNvZGluZyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBmb3IgY2hhcmFjdGVyIGNvZGUgdG8gZ2x5cGggaW5kZXggbWFwcGluZy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcm1hcCA6OiBBIGhhbmRsZSB0byB0aGUgc2VsZWN0ZWQgY2hhcm1hcC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjaGFybWFwIGlzIG5vdCBwYXJ0IG9mICAgICAgICovCisgIC8qICAgIHRoZSBmYWNlIChpLmUuLCBpZiBpdCBpcyBub3QgbGlzdGVkIGluIHRoZSBgZmFjZS0+Y2hhcm1hcHMnICAgICAgICAqLworICAvKiAgICB0YWJsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEl0IGFsc28gZmFpbHMgaWYgYSB0eXBlfjE0IGNoYXJtYXAgaXMgc2VsZWN0ZWQuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9DaGFybWFwKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfQ2hhck1hcCAgY2hhcm1hcCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9DaGFybWFwX0luZGV4CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSBpbmRleCBvZiBhIGdpdmVuIGNoYXJtYXAuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBjaGFybWFwIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIGNoYXJtYXAuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIGluZGV4IGludG8gdGhlIGFycmF5IG9mIGNoYXJhY3RlciBtYXBzIHdpdGhpbiB0aGUgZmFjZSB0byB3aGljaAorICAgKiAgIGBjaGFybWFwJyBiZWxvbmdzLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAtMSBpcyByZXR1cm5lZC4KKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggRlRfSW50ICkKKyAgRlRfR2V0X0NoYXJtYXBfSW5kZXgoIEZUX0NoYXJNYXAgIGNoYXJtYXAgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9DaGFyX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiB0aGUgZ2x5cGggaW5kZXggb2YgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZS4gIFRoaXMgZnVuY3Rpb24gICAqLworICAvKiAgICB1c2VzIGEgY2hhcm1hcCBvYmplY3QgdG8gZG8gdGhlIG1hcHBpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJjb2RlIDo6IFRoZSBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHlvdSB1c2UgRnJlZVR5cGUgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcyAgICAgICAqLworICAvKiAgICBkaXJlY3RseSwgYmUgYXdhcmUgdGhhdCB0aGUgZ2x5cGggaW5kZXggcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiAgKi8KKyAgLyogICAgZG9lc24ndCBhbHdheXMgY29ycmVzcG9uZCB0byB0aGUgaW50ZXJuYWwgaW5kaWNlcyB1c2VkIHdpdGhpbiB0aGUgICovCisgIC8qICAgIGZpbGUuICBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdmFsdWV+MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gICAqLworICAvKiAgICB0aGUgYG1pc3NpbmcgZ2x5cGgnLiAgSWYgdGhlIGZpcnN0IGdseXBoIGlzIG5vdCBuYW1lZCBgLm5vdGRlZicsICAgKi8KKyAgLyogICAgdGhlbiBmb3IgVHlwZX4xIGFuZCBUeXBlfjQyIGZvbnRzLCBgLm5vdGRlZicgd2lsbCBiZSBtb3ZlZCBpbnRvICAgICovCisgIC8qICAgIHRoZSBnbHlwaCBJRH4wIHBvc2l0aW9uLCBhbmQgd2hhdGV2ZXIgd2FzIHRoZXJlIHdpbGwgYmUgbW92ZWQgdG8gICAqLworICAvKiAgICB0aGUgcG9zaXRpb24gYC5ub3RkZWYnIGhhZC4gIEZvciBUeXBlfjEgZm9udHMsIGlmIHRoZXJlIGlzIG5vICAgICAgKi8KKyAgLyogICAgYC5ub3RkZWYnIGdseXBoIGF0IGFsbCwgdGhlbiBvbmUgd2lsbCBiZSBjcmVhdGVkIGF0IGluZGV4fjAgYW5kICAgICovCisgIC8qICAgIHdoYXRldmVyIHdhcyB0aGVyZSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBsYXN0IGluZGV4IC0tIFR5cGV+NDIgICAgICAqLworICAvKiAgICBmb250cyBhcmUgY29uc2lkZXJlZCBpbnZhbGlkIHVuZGVyIHRoaXMgY29uZGl0aW9uLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfVUludCApCisgIEZUX0dldF9DaGFyX0luZGV4KCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0ZpcnN0X0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGNvZGUgaW4gdGhlICAgICovCisgIC8qICAgIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuIGZhY2UuICBJdCBhbHNvIHJldHVybnMgdGhlICAgICAgICAgICAgICAqLworICAvKiAgICBjb3JyZXNwb25kaW5nIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZ2luZGV4IDo6IEdseXBoIGluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBjb2RlLiAgMH5pZiBjaGFybWFwIGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGNoYXJtYXAncyBmaXJzdCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIEBGVF9HZXRfTmV4dF9DaGFyIHRvIGJlIGFibGUgdG8gICovCisgIC8qICAgIHBhcnNlIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFRoZSBjb2RlICAqLworICAvKiAgICBzaG91bGQgbG9vayBsaWtlIHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX1VMb25nICBjaGFyY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9VSW50ICAgZ2luZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBjaGFyY29kZSA9IEZUX0dldF9GaXJzdF9DaGFyKCBmYWNlLCAmZ2luZGV4ICk7ICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgd2hpbGUgKCBnaW5kZXggIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCAoY2hhcmNvZGUsZ2luZGV4KSBwYWlyIC4uLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgY2hhcmNvZGUgPSBGVF9HZXRfTmV4dF9DaGFyKCBmYWNlLCBjaGFyY29kZSwgJmdpbmRleCApOyAgICAgICAgKi8KKyAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGAqYWdpbmRleCcgaXMgc2V0IHRvfjAgaWYgdGhlIGNoYXJtYXAgaXMgZW1wdHkuICBUaGUgICAgICovCisgIC8qICAgIHJlc3VsdCBpdHNlbGYgY2FuIGJlfjAgaW4gdHdvIGNhc2VzOiBpZiB0aGUgY2hhcm1hcCBpcyBlbXB0eSBvciAgICAqLworICAvKiAgICBpZiB0aGUgdmFsdWV+MCBpcyB0aGUgZmlyc3QgdmFsaWQgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfVUxvbmcgKQorICBGVF9HZXRfRmlyc3RfQ2hhciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAqYWdpbmRleCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X05leHRfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgICAgICovCisgIC8qICAgIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuIGZhY2UgZm9sbG93aW5nIHRoZSB2YWx1ZSBgY2hhcl9jb2RlJywgICAqLworICAvKiAgICBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcl9jb2RlIDo6IFRoZSBzdGFydGluZyBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWdpbmRleCAgIDo6IEdseXBoIGluZGV4IG9mIG5leHQgY2hhcmFjdGVyIGNvZGUuICAwfmlmIGNoYXJtYXAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBjaGFybWFwJ3MgbmV4dCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBARlRfR2V0X0ZpcnN0X0NoYXIgdG8gd2FsayAgICAgICAqLworICAvKiAgICBvdmVyIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFNlZSB0aGUgICAgKi8KKyAgLyogICAgbm90ZSBmb3IgdGhpcyBmdW5jdGlvbiBmb3IgYSBzaW1wbGUgY29kZSBleGFtcGxlLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgYCphZ2luZGV4JyBpcyBzZXQgdG9+MCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGNvZGVzIGluICAgKi8KKyAgLyogICAgdGhlIGNoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VMb25nICkKKyAgRlRfR2V0X05leHRfQ2hhciggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNoYXJfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICphZ2luZGV4ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfTmFtZV9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gZ2x5cGggbmFtZS4gIFRoaXMgZnVuY3Rpb24gdXNlcyAgKi8KKyAgLyogICAgZHJpdmVyIHNwZWNpZmljIG9iamVjdHMgdG8gZG8gdGhlIHRyYW5zbGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9uYW1lIDo6IFRoZSBnbHlwaCBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZ2x5cGggaW5kZXguICAwfm1lYW5zIGB1bmRlZmluZWQgY2hhcmFjdGVyIGNvZGUnLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfVUludCApCisgIEZUX0dldF9OYW1lX0luZGV4KCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiAgZ2x5cGhfbmFtZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgY29uc3RhbnRzIHVzZWQgdG8gZGVzY3JpYmUgc3ViZ2x5cGhzLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorICAgKiAgIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGZsYWdzLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMgOjoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyA6OgorICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfUk9VTkRfWFlfVE9fR1JJRCA6OgorICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfU0NBTEUgOjoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1hZX1NDQUxFIDo6CisgICAqICAgRlRfU1VCR0xZUEhfRkxBR18yWDIgOjoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTIDo6CisgICAqCisgICAqLworI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1dPUkRTICAgICAgICAgIDEKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMgICAgICAyCisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfUk9VTkRfWFlfVE9fR1JJRCAgICAgICAgNAorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1NDQUxFICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19YWV9TQ0FMRSAgICAgICAgICAgICAweDQwCisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfMlgyICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTICAgICAgMHgyMDAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jOgorICAgKiAgIEZUX0dldF9TdWJHbHlwaF9JbmZvCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSBhIGRlc2NyaXB0aW9uIG9mIGEgZ2l2ZW4gc3ViZ2x5cGguICBPbmx5IHVzZSBpdCBpZgorICAgKiAgIGBnbHlwaC0+Zm9ybWF0JyBpcyBARlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTsgYW4gZXJyb3IgaXMKKyAgICogICByZXR1cm5lZCBvdGhlcndpc2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIHNvdXJjZSBnbHlwaCBzbG90LgorICAgKgorICAgKiAgIHN1Yl9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBzdWJnbHlwaC4gIE11c3QgYmUgbGVzcyB0aGFuCisgICAqICAgICBgZ2x5cGgtPm51bV9zdWJnbHlwaHMnLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHBfaW5kZXggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleCBvZiB0aGUgc3ViZ2x5cGguCisgICAqCisgICAqICAgcF9mbGFncyA6OgorICAgKiAgICAgVGhlIHN1YmdseXBoIGZsYWdzLCBzZWUgQEZUX1NVQkdMWVBIX0ZMQUdfWFhYLgorICAgKgorICAgKiAgIHBfYXJnMSA6OgorICAgKiAgICAgVGhlIHN1YmdseXBoJ3MgZmlyc3QgYXJndW1lbnQgKGlmIGFueSkuCisgICAqCisgICAqICAgcF9hcmcyIDo6CisgICAqICAgICBUaGUgc3ViZ2x5cGgncyBzZWNvbmQgYXJndW1lbnQgKGlmIGFueSkuCisgICAqCisgICAqICAgcF90cmFuc2Zvcm0gOjoKKyAgICogICAgIFRoZSBzdWJnbHlwaCB0cmFuc2Zvcm1hdGlvbiAoaWYgYW55KS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgdmFsdWVzIG9mIGAqcF9hcmcxJywgYCpwX2FyZzInLCBhbmQgYCpwX3RyYW5zZm9ybScgbXVzdCBiZQorICAgKiAgIGludGVycHJldGVkIGRlcGVuZGluZyBvbiB0aGUgZmxhZ3MgcmV0dXJuZWQgaW4gYCpwX2ZsYWdzJy4gIFNlZSB0aGUKKyAgICogICBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9TdWJHbHlwaF9JbmZvKCBGVF9HbHlwaFNsb3QgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBzdWJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgKnBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAqcF9hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4ICAgICpwX3RyYW5zZm9ybSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBsaXN0IG9mIGJpdCBmbGFncyB1c2VkIGluIHRoZSBgZnNUeXBlJyBmaWVsZCBvZiB0aGUgT1MvMiB0YWJsZSAgICovCisgIC8qICAgIGluIGEgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgZm9udCBhbmQgdGhlIGBGU1R5cGUnIGVudHJ5IGluIGEgICAgICAgICAqLworICAvKiAgICBQb3N0U2NyaXB0IGZvbnQuICBUaGVzZSBiaXQgZmxhZ3MgYXJlIHJldHVybmVkIGJ5ICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0dldF9GU1R5cGVfRmxhZ3M7IHRoZXkgaW5mb3JtIGNsaWVudCBhcHBsaWNhdGlvbnMgb2YgZW1iZWRkaW5nICovCisgIC8qICAgIGFuZCBzdWJzZXR0aW5nIHJlc3RyaWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmb250LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL2NvbnRlbnQvZGFtL0Fkb2JlL2VuL2Rldm5ldC9hY3JvYmF0L3BkZnMvRm9udFBvbGljaWVzLnBkZiAqLworICAvKiAgICBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGb250cyB3aXRoIG5vIGZzVHlwZSBiaXQgc2V0IG1heSBiZSBlbWJlZGRlZCBhbmQgcGVybWFuZW50bHkgICAgICovCisgIC8qICAgICAgaW5zdGFsbGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtIGJ5IGFuIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRm9udHMgdGhhdCBoYXZlIG9ubHkgdGhpcyBiaXQgc2V0IG11c3Qgbm90IGJlIG1vZGlmaWVkLCBlbWJlZGRlZCAqLworICAvKiAgICAgIG9yIGV4Y2hhbmdlZCBpbiBhbnkgbWFubmVyIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIHBlcm1pc3Npb24gb2YgKi8KKyAgLyogICAgICB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBhbmQgdGVtcG9yYXJpbHkgICAgICovCisgIC8qICAgICAgbG9hZGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtLiAgRG9jdW1lbnRzIGNvbnRhaW5pbmcgUHJldmlldyAmICAgICAqLworICAvKiAgICAgIFByaW50IGZvbnRzIG11c3QgYmUgb3BlbmVkIGByZWFkLW9ubHknOyBubyBlZGl0cyBjYW4gYmUgYXBwbGllZCAgKi8KKyAgLyogICAgICB0byB0aGUgZG9jdW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBidXQgbXVzdCBvbmx5IGJlICAgICovCisgIC8qICAgICAgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IG9uIG90aGVyIHN5c3RlbXMuICBJbiBjb250cmFzdCB0byBQcmV2aWV3ICAqLworICAvKiAgICAgICYgUHJpbnQgZm9udHMsIGRvY3VtZW50cyBjb250YWluaW5nIGVkaXRhYmxlIGZvbnRzIG1heSBiZSBvcGVuZWQgKi8KKyAgLyogICAgICBmb3IgcmVhZGluZywgZWRpdGluZyBpcyBwZXJtaXR0ZWQsIGFuZCBjaGFuZ2VzIG1heSBiZSBzYXZlZC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfTk9fU1VCU0VUVElORyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBub3QgYmUgc3Vic2V0dGVkIHByaW9yIHRvICAgICAgICovCisgIC8qICAgICAgZW1iZWRkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSWYgdGhpcyBiaXQgaXMgc2V0LCBvbmx5IGJpdG1hcHMgY29udGFpbmVkIGluIHRoZSBmb250IG1heSBiZSAgICAqLworICAvKiAgICAgIGVtYmVkZGVkOyBubyBvdXRsaW5lIGRhdGEgbWF5IGJlIGVtYmVkZGVkLiAgSWYgdGhlcmUgYXJlIG5vICAgICAgKi8KKyAgLyogICAgICBiaXRtYXBzIGF2YWlsYWJsZSBpbiB0aGUgZm9udCwgdGhlbiB0aGUgZm9udCBpcyB1bmVtYmVkZGFibGUuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hpbGUgdGhlIGZzVHlwZSBmbGFncyBjYW4gaW5kaWNhdGUgdGhhdCBhIGZvbnQgbWF5IGJlIGVtYmVkZGVkLCBhICovCisgIC8qICAgIGxpY2Vuc2Ugd2l0aCB0aGUgZm9udCB2ZW5kb3IgbWF5IGJlIHNlcGFyYXRlbHkgcmVxdWlyZWQgdG8gdXNlIHRoZSAqLworICAvKiAgICBmb250IGluIHRoaXMgd2F5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkcgICAgICAgICAweDAwMDAKKyNkZWZpbmUgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgIDB4MDAwMgorI2RlZmluZSBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HICAgMHgwMDA0CisjZGVmaW5lIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgRlRfRlNUWVBFX05PX1NVQlNFVFRJTkcgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBGVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZICAgICAgICAgMHgwMjAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfRlNUeXBlX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGZzVHlwZSBmbGFncyBmb3IgYSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZnNUeXBlIGZsYWdzLCBARlRfRlNUWVBFX1hYWC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSBgZnNfdHlwZScgZmllbGQgKi8KKyAgLyogICAgaW4gdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUsIHdoaWNoIGlzIG9ubHkgZ3VhcmFudGVlZCB0byAgICAgICovCisgIC8qICAgIHJldHVybiB0aGUgY29ycmVjdCByZXN1bHRzIGZvciBUeXBlfjEgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VU2hvcnQgKQorICBGVF9HZXRfRlNUeXBlX0ZsYWdzKCBGVF9GYWNlICBmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF92YXJpYW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHbHlwaCBWYXJpYW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgRnJlZVR5cGV+MiBpbnRlcmZhY2UgdG8gVW5pY29kZSBJZGVvZ3JhcGhpYyBWYXJpYXRpb24gICAgICAgICAgKi8KKyAgLyogICAgU2VxdWVuY2VzIChJVlMpLCB1c2luZyB0aGUgU0ZOVCBjbWFwIGZvcm1hdH4xNC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTWFueSBDSksgY2hhcmFjdGVycyBoYXZlIHZhcmlhbnQgZm9ybXMuICBUaGV5IGFyZSBhIHNvcnQgb2YgZ3JleSAgICovCisgIC8qICAgIGFyZWEgc29tZXdoZXJlIGJldHdlZW4gYmVpbmcgdG90YWxseSBpcnJlbGV2YW50IGFuZCBzZW1hbnRpY2FsbHkgICAqLworICAvKiAgICBkaXN0aW5jdDsgZm9yIHRoaXMgcmVhc29uLCB0aGUgVW5pY29kZSBjb25zb3J0aXVtIGRlY2lkZWQgdG8gICAgICAgKi8KKyAgLyogICAgaW50cm9kdWNlIElkZW9ncmFwaGljIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKElWUyksIGNvbnNpc3Rpbmcgb2YgYSAgICovCisgIC8qICAgIFVuaWNvZGUgYmFzZSBjaGFyYWN0ZXIgYW5kIG9uZSBvZiAyNDAgdmFyaWFudCBzZWxlY3RvcnMgICAgICAgICAgICAqLworICAvKiAgICAoVStFMDEwMC1VK0UwMUVGKSwgaW5zdGVhZCBvZiBmdXJ0aGVyIGV4dGVuZGluZyB0aGUgYWxyZWFkeSBodWdlICAgKi8KKyAgLyogICAgY29kZSByYW5nZSBmb3IgQ0pLIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBJVlMgaXMgcmVnaXN0ZXJlZCBhbmQgdW5pcXVlOyBmb3IgZnVydGhlciBkZXRhaWxzIHBsZWFzZSByZWZlciAgKi8KKyAgLyogICAgdG8gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM3LCB0aGUgSWRlb2dyYXBoaWMgVmFyaWF0aW9uICAgICAgICovCisgIC8qICAgIERhdGFiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBkYXRlIChOb3ZlbWJlciAyMDE0KSwgdGhlIGNoYXJhY3RlciB3aXRoIHRoZSBtb3N0IHZhcmlhbnRzIGlzICAgKi8KKyAgLyogICAgVSs5MDg5LCBoYXZpbmcgMzIgc3VjaCBJVlMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZG9iZSBhbmQgTVMgZGVjaWRlZCB0byBzdXBwb3J0IElWUyB3aXRoIGEgbmV3IGNtYXAgc3VidGFibGUgICAgICAgKi8KKyAgLyogICAgKGZvcm1hdH4xNCkuICBJdCBpcyBhbiBvZGQgc3VidGFibGUgYmVjYXVzZSBpdCBpcyBub3QgYSBtYXBwaW5nIG9mICovCisgIC8qICAgIGlucHV0IGNvZGUgcG9pbnRzIHRvIGdseXBocywgYnV0IGNvbnRhaW5zIGxpc3RzIG9mIGFsbCB2YXJpYW50cyAgICAqLworICAvKiAgICBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmFyaWFudCBtYXkgYmUgZWl0aGVyIGBkZWZhdWx0JyBvciBgbm9uLWRlZmF1bHQnLiAgQSBkZWZhdWx0ICAgICAqLworICAvKiAgICB2YXJpYW50IGlzIHRoZSBvbmUgeW91IHdpbGwgZ2V0IGZvciB0aGF0IGNvZGUgcG9pbnQgaWYgeW91IGxvb2sgaXQgKi8KKyAgLyogICAgdXAgaW4gdGhlIHN0YW5kYXJkIFVuaWNvZGUgY21hcC4gIEEgbm9uLWRlZmF1bHQgdmFyaWFudCBpcyBhICAgICAgICovCisgIC8qICAgIGRpZmZlcmVudCBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgYXMgbW9kaWZpZWQgYnkgICAgKi8KKyAgLyogICAgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcmNvZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlIHBvaW50IGluIFVuaWNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgdmFyaWF0aW9uIHNlbGVjdG9yLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgZWl0aGVyIGB1bmRlZmluZWQgY2hhcmFjdGVyIGNvZGUnLCBvciAgICAqLworICAvKiAgICBgdW5kZWZpbmVkIHNlbGVjdG9yIGNvZGUnLCBvciBgbm8gdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgICAgICAgICAgKi8KKyAgLyogICAgc3VidGFibGUnLCBvciBgY3VycmVudCBDaGFyTWFwIGlzIG5vdCBVbmljb2RlJy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgeW91IHVzZSBGcmVlVHlwZSB0byBtYW5pcHVsYXRlIHRoZSBjb250ZW50cyBvZiBmb250IGZpbGVzICAgICAgICovCisgIC8qICAgIGRpcmVjdGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBnbHlwaCBpbmRleCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uICAqLworICAvKiAgICBkb2Vzbid0IGFsd2F5cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcm5hbCBpbmRpY2VzIHVzZWQgd2l0aGluICAgICAgKi8KKyAgLyogICAgdGhlIGZpbGUuICBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdmFsdWV+MCBhbHdheXMgY29ycmVzcG9uZHMgICovCisgIC8qICAgIHRvIHRoZSBgbWlzc2luZyBnbHlwaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYSkgdGhlIGZvbnQgaGFzIGEgdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgc3ViIHRhYmxlLCAgICAgICAgICAgICAqLworICAvKiAgICBhbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBiKSB0aGUgY3VycmVudCBjaGFybWFwIGhhcyBhIFVuaWNvZGUgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQgKQorICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDaGVjayB3aGV0aGVyIHRoaXMgdmFyaWFudCBvZiB0aGlzIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHRoZSBvbmUgdG8gKi8KKyAgLyogICAgYmUgZm91bmQgaW4gdGhlIGBjbWFwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcmNvZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIFVuaWNvZGUgY29kZXBvaW50IG9mIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDF+aWYgZm91bmQgaW4gdGhlIHN0YW5kYXJkIChVbmljb2RlKSBjbWFwLCAwfmlmIGZvdW5kIGluIHRoZSAgICAgICAqLworICAvKiAgICB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgdmFyaWFudC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gICAgICAgKi8KKyAgLyogICAgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0ludCApCisgIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB2YXJpYW50U2VsZWN0b3IgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgICAqLworICAvKiAgICBpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNlbGVjdG9yIGNvZGUgcG9pbnRzLCBvciBOVUxMIGlmIHRoZXJlIGlzICovCisgIC8qICAgIG5vIHZhbGlkIHZhcmlhbnQgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgICAgICAgICAqLworICAvKiAgICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dCAgICAgKi8KKyAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQorICBGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgICAqLworICAvKiAgICBmb3IgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyY29kZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgY2hhcmFjdGVyIGNvZGVwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHZhcmlhbnQgc2VsZWN0b3IgY29kZSBwb2ludHMgdGhhdCBhcmUgICAgICovCisgIC8qICAgIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IgTlVMTCBpZiB0aGUgY29ycmVzcG9uZGluZyBsaXN0ICAqLworICAvKiAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpc34wOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlICAgICAgICAgKi8KKyAgLyogICAgQEZUX0ZhY2Ugb2JqZWN0IGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW4gb3IgcmVsZWFzZWQgb24gdGhlIG5leHQgICAgICovCisgIC8qICAgIGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VSW50MzIqICkKKyAgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXIgY29kZXMgZm91bmQgZm9yICovCisgIC8qICAgIHRoZSBzcGVjaWZpZWQgdmFyaWFudCBzZWxlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhcmlhbnRTZWxlY3RvciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSB2YXJpYW50IHNlbGVjdG9yIGNvZGUgcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGxpc3Qgb2YgYWxsIHRoZSBjb2RlIHBvaW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgYnkgdGhpcyBzZWxlY3RvciAgKi8KKyAgLyogICAgKGJvdGggZGVmYXVsdCBhbmQgbm9uLWRlZmF1bHQgY29kZXMgYXJlIHJldHVybmVkKSBvciBOVUxMIGlmIHRoZXJlICovCisgIC8qICAgIGlzIG5vIHZhbGlkIGNtYXAgb3IgdGhlIHZhcmlhbnQgc2VsZWN0b3IgaXMgaW52YWxpZC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgICAgICAgICAqLworICAvKiAgICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dCAgICAgKi8KKyAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQorICBGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50KCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHZhcmlhbnRTZWxlY3RvciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29tcHV0YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ3J1bmNoaW5nIGZpeGVkIG51bWJlcnMgYW5kIHZlY3RvcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgZnVuY3Rpb25zIHVzZWQgdG8gcGVyZm9ybSAgICAgICAgICAgICovCisgIC8qICAgIGNvbXB1dGF0aW9ucyBvbiAxNi4xNiBmaXhlZC1mbG9hdCBudW1iZXJzIG9yIDJkIHZlY3RvcnMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bERpdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NdWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRGl2Rml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JvdW5kRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9DZWlsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmxvb3JGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NYXRyaXhfTXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTWF0cml4X0ludmVydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bERpdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBgKGEqYikvYycgICAqLworICAvKiAgICB3aXRoIG1heGltdW0gYWNjdXJhY3kgKGl0IHVzZXMgYSA2NC1iaXQgaW50ZXJtZWRpYXRlIGludGVnZXIgICAgICAgKi8KKyAgLyogICAgd2hlbmV2ZXIgbmVjZXNzYXJ5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzbid0IG5lY2Vzc2FyaWx5IGFzIGZhc3QgYXMgc29tZSBwcm9jZXNzb3Igc3BlY2lmaWMgKi8KKyAgLyogICAgb3BlcmF0aW9ucywgYnV0IGlzIGF0IGxlYXN0IGNvbXBsZXRlbHkgcG9ydGFibGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgZmlyc3QgbXVsdGlwbGllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjIDo6IFRoZSBkaXZpc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS9jJy4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgdHJhcHMgd2hlbiB0cnlpbmcgdG8gKi8KKyAgLyogICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZyAgICovCisgIC8qICAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Mb25nICkKKyAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIsCisgICAgICAgICAgICAgRlRfTG9uZyAgYyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTXVsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uICAgICAgICAgICAgICovCisgIC8qICAgIGAoYSpiKS8weDEwMDAwJyB3aXRoIG1heGltdW0gYWNjdXJhY3kuICBNb3N0IG9mIHRoZSB0aW1lIHRoaXMgaXMgICAqLworICAvKiAgICB1c2VkIHRvIG11bHRpcGx5IGEgZ2l2ZW4gdmFsdWUgYnkgYSAxNi4xNiBmaXhlZC1wb2ludCBmYWN0b3IuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IFRoZSBmaXJzdCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYiA6OiBUaGUgc2Vjb25kIG11bHRpcGxpZXIuICBVc2UgYSAxNi4xNiBmYWN0b3IgaGVyZSB3aGVuZXZlciAgICAgICovCisgIC8qICAgICAgICAgcG9zc2libGUgKHNlZSBub3RlIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXN1bHQgb2YgYChhKmIpLzB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYWJzb2x1dGUgICAqLworICAvKiAgICB2YWx1ZSBvZiBgYScgaXMgbGVzcyB0aGFuIDIwNDgsIGFuZCBgYicgaXMgYSAxNi4xNiBzY2FsaW5nIGZhY3Rvci4gKi8KKyAgLyogICAgQXMgdGhpcyBoYXBwZW5zIG1haW5seSB3aGVuIHNjYWxpbmcgZnJvbSBub3Rpb25hbCB1bml0cyB0byAgICAgICAgICovCisgIC8qICAgIGZyYWN0aW9uYWwgcGl4ZWxzIGluIEZyZWVUeXBlLCBpdCByZXN1bHRlZCBpbiBub3RpY2VhYmxlIHNwZWVkICAgICAqLworICAvKiAgICBpbXByb3ZlbWVudHMgYmV0d2VlbiB2ZXJzaW9ucyAyLnggYW5kIDEueC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFzIGEgY29uY2x1c2lvbiwgYWx3YXlzIHRyeSB0byBwbGFjZSBhIDE2LjE2IGZhY3RvciBhcyB0aGUgICAgICAgICAqLworICAvKiAgICBfc2Vjb25kXyBhcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uOyB0aGlzIGNhbiBtYWtlIGEgZ3JlYXQgICAgICAgICAgKi8KKyAgLyogICAgZGlmZmVyZW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0xvbmcgKQorICBGVF9NdWxGaXgoIEZUX0xvbmcgIGEsCisgICAgICAgICAgICAgRlRfTG9uZyAgYiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRGl2Rml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uICAgICAgICAgICAgICovCisgIC8qICAgIGAoYSoweDEwMDAwKS9iJyB3aXRoIG1heGltdW0gYWNjdXJhY3kuICBNb3N0IG9mIHRoZSB0aW1lLCB0aGlzIGlzICAqLworICAvKiAgICB1c2VkIHRvIGRpdmlkZSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IFRoZSBudW1lcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYiA6OiBUaGUgZGVub21pbmF0b3IuICBVc2UgYSAxNi4xNiBmYWN0b3IgaGVyZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEqMHgxMDAwMCkvYicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0xvbmcgKQorICBGVF9EaXZGaXgoIEZUX0xvbmcgIGEsCisgICAgICAgICAgICAgRlRfTG9uZyAgYiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUm91bmRGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHJvdW5kIGEgMTYuMTYgZml4ZWQgbnVtYmVyLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgbnVtYmVyIHRvIGJlIHJvdW5kZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEgKyAweDgwMDApICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKKyAgRlRfUm91bmRGaXgoIEZUX0ZpeGVkICBhICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9DZWlsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgY2VpbGluZyBmdW5jdGlvbiBvZiBhICAgKi8KKyAgLyogICAgMTYuMTYgZml4ZWQgbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgY2VpbGluZyBmdW5jdGlvbiBpcyB0byBiZSBjb21wdXRlZC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEgKyAweDEwMDAwIC0gMSkgJiAtMHgxMDAwMCcuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKKyAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0Zsb29yRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBjb21wdXRlIHRoZSBmbG9vciBmdW5jdGlvbiBvZiBhICAgICAqLworICAvKiAgICAxNi4xNiBmaXhlZCBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IFRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBmbG9vciBmdW5jdGlvbiBpcyB0byBiZSBjb21wdXRlZC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGBhICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQorICBGVF9GbG9vckZpeCggRlRfRml4ZWQgIGEgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRyYW5zZm9ybSBhIHNpbmdsZSB2ZWN0b3IgdGhyb3VnaCBhIDJ4MiBtYXRyaXguICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlY3RvciA6OiBUaGUgdGFyZ2V0IHZlY3RvciB0byB0cmFuc2Zvcm0uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hdHJpeCA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSAyeDIgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIGVpdGhlciBgdmVjdG9yJyBvciBgbWF0cml4JyBpcyBpbnZhbGlkLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfVmVjdG9yX1RyYW5zZm9ybSggRlRfVmVjdG9yKiAgICAgICAgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9NYXRyaXgqICBtYXRyaXggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZ1bmN0aW9ucyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gRnJlZVR5cGUgdmVyc2lvbnMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCB0aG9zZSBmdW5jdGlvbnMgYW5kIG1hY3JvcyBhcmUgb2YgbGltaXRlZCB1c2UgYmVjYXVzZSAgICAqLworICAvKiAgICBldmVuIGEgbmV3IHJlbGVhc2Ugb2YgRnJlZVR5cGUgd2l0aCBvbmx5IGRvY3VtZW50YXRpb24gY2hhbmdlcyAgICAgKi8KKyAgLyogICAgaW5jcmVhc2VzIHRoZSB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlicmFyeV9WZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGUkVFVFlQRV9NQUpPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlJFRVRZUEVfTUlOT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZSRUVUWVBFX1BBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlJFRVRZUEVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZSRUVUWVBFX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlc2UgdGhyZWUgbWFjcm9zIGlkZW50aWZ5IHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZSB2ZXJzaW9uLgorICAgKiAgIFVzZSBARlRfTGlicmFyeV9WZXJzaW9uIHRvIGFjY2VzcyB0aGVtIGF0IHJ1bnRpbWUuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlJFRVRZUEVfTUFKT1IgOjogVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLgorICAgKiAgIEZSRUVUWVBFX01JTk9SIDo6IFRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci4KKyAgICogICBGUkVFVFlQRV9QQVRDSCA6OiBUaGUgcGF0Y2ggbGV2ZWwuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSB2ZXJzaW9uIG51bWJlciBvZiBGcmVlVHlwZSBpZiBidWlsdCBhcyBhIGR5bmFtaWMgbGluayBsaWJyYXJ5CisgICAqICAgd2l0aCB0aGUgYGxpYnRvb2wnIHBhY2thZ2UgaXMgX25vdF8gY29udHJvbGxlZCBieSB0aGVzZSB0aHJlZQorICAgKiAgIG1hY3Jvcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZSRUVUWVBFX01BSk9SICAyCisjZGVmaW5lIEZSRUVUWVBFX01JTk9SICA2CisjZGVmaW5lIEZSRUVUWVBFX1BBVENIICAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaWJyYXJ5X1ZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkgYmVpbmcgdXNlZC4gIFRoaXMgaXMgICAgKi8KKyAgLyogICAgdXNlZnVsIHdoZW4gZHluYW1pY2FsbHkgbGlua2luZyB0byB0aGUgbGlicmFyeSwgc2luY2Ugb25lIGNhbm5vdCAgICovCisgIC8qICAgIHVzZSB0aGUgbWFjcm9zIEBGUkVFVFlQRV9NQUpPUiwgQEZSRUVUWVBFX01JTk9SLCBhbmQgICAgICAgICAgICAgICAqLworICAvKiAgICBARlJFRVRZUEVfUEFUQ0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgc291cmNlIGxpYnJhcnkgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbWFqb3IgIDo6IFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFtaW5vciAgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXBhdGNoICA6OiBUaGUgcGF0Y2ggdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBsaWJyYXJ5JyBhcmd1bWVudCBpcyBiZWNhdXNlICovCisgIC8qICAgIGNlcnRhaW4gcHJvZ3JhbXMgaW1wbGVtZW50IGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gaW4gYSBjdXN0b20gd2F5ICAqLworICAvKiAgICB0aGF0IGRvZXNuJ3QgdXNlIEBGVF9Jbml0X0ZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluIHN1Y2ggY2FzZXMsIHRoZSBsaWJyYXJ5IHZlcnNpb24gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBiZWZvcmUgICAqLworICAvKiAgICB0aGUgbGlicmFyeSBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX0xpYnJhcnlfVmVyc2lvbiggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgKmFtYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICphcGF0Y2ggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBhcnNlIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgb2YgYSBUcnVlVHlwZSBmb250IGZpbGUgdG8gY2hlY2sgICAqLworICAvKiAgICB3aGV0aGVyIGFueSBvZiB0aGUgcGF0ZW50ZWQgb3Bjb2RlcyBhcmUgdXNlZC4gIFRoaXMgaXMgb25seSB1c2VmdWwgKi8KKyAgLyogICAgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHVucGF0ZW50ZWQgaGludGVyIHdpdGggICAgICAgICAgICovCisgIC8qICAgIGZvbnRzIHRoYXQgZG8gKm5vdCogdXNlIHRoZXNlIG9wY29kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcGFyc2VzICphbGwqIGdseXBoIGluc3RydWN0aW9ucyBpbiB0aGUgICAgICovCisgIC8qICAgIGZvbnQgZmlsZSwgd2hpY2ggbWF5IGJlIHNsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBmYWNlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDF+aWYgdGhpcyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCB1c2VzIG9uZSBvZiB0aGUgcGF0ZW50ZWQgICAgICAgICAqLworICAvKiAgICBvcGNvZGVzLCAwfm90aGVyd2lzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjMuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfQm9vbCApCisgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1bnBhdGVudGVkIGhpbnRlciBmb3IgYSBnaXZlbiBmYWNlLiAgICAgICAgICAqLworICAvKiAgICBPbmx5IGVuYWJsZSBpdCBpZiB5b3UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZhY2UgZG9lc24ndCAgICAgICAgKi8KKyAgLyogICAgdXNlIGFueSBwYXRlbnRlZCBvcGNvZGVzIChzZWUgQEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMpLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgOjogQSBmYWNlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2YWx1ZSA6OiBOZXcgYm9vbGVhbiBzZXR0aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgb2xkIHNldHRpbmcgdmFsdWUuICBUaGlzIHdpbGwgYWx3YXlzIGJlIGZhbHNlIGlmIHRoaXMgaXMgbm90ICAgKi8KKyAgLyogICAgYW4gU0ZOVCBmb250LCBvciBpZiB0aGUgdW5wYXRlbnRlZCBoaW50ZXIgaXMgbm90IGNvbXBpbGVkIGluIHRoaXMgICovCisgIC8qICAgIGluc3RhbmNlIG9mIHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNpbmNlIE1heSAyMDEwLCBUcnVlVHlwZSBoaW50aW5nIGlzIG5vIGxvbmdlciBwYXRlbnRlZC4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Cb29sICkKKyAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZyggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgdmFsdWUgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlJFRVRZUEVfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdDJidWlsZC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnQyYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMxOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnQyYnVpbGQuaApAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdDJidWlsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGlzIHRoZSBgZW50cnkgcG9pbnQnIGZvciBGcmVlVHlwZSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zLiAgSXQgaXMgKi8KKyAgLyogdGhlIG9ubHkgaGVhZGVyIGZpbGUgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkIGRpcmVjdGx5OyBhbGwgb3RoZXIgICAgICovCisgIC8qIEZyZWVUeXBlIGhlYWRlciBmaWxlcyBzaG91bGQgYmUgYWNjZXNzZWQgd2l0aCBtYWNybyBuYW1lcyAoYWZ0ZXIgICAgICAqLworICAvKiBpbmNsdWRpbmcgYGZ0MmJ1aWxkLmgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEEgdHlwaWNhbCBleGFtcGxlIGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUMkJVSUxEX0hfXworI2RlZmluZSBfX0ZUMkJVSUxEX0hfXworCisjaW5jbHVkZSA8Y29uZmlnL2Z0aGVhZGVyLmg+CisKKyNlbmRpZiAvKiBfX0ZUMkJVSUxEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRhZHZhbmMuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YWR2YW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMmFlZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YWR2YW5jLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0YWR2YW5jLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQURWQU5DX0hfXworI2RlZmluZSBfX0ZUQURWQU5DX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBxdWlja19hZHZhbmNlCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBRdWljayByZXRyaWV2YWwgb2YgYWR2YW5jZSB2YWx1ZXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFJldHJpZXZlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFkdmFuY2UgdmFsdWVzIHdpdGhvdXQgcHJvY2Vzc2luZworICAgKiAgIGdseXBoIG91dGxpbmVzLCBpZiBwb3NzaWJsZS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgdG8gcXVpY2tseSBleHRyYWN0IGFkdmFuY2UgdmFsdWVzCisgICAqICAgd2l0aG91dCBoYW5kbGluZyBnbHlwaCBvdXRsaW5lcywgaWYgcG9zc2libGUuCisgICAqCisgICAqIEBvcmRlcjoKKyAgICogICBGVF9HZXRfQWR2YW5jZQorICAgKiAgIEZUX0dldF9BZHZhbmNlcworICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPENvbnN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgYml0LWZsYWcgdG8gYmUgT1ItZWQgd2l0aCB0aGUgYGZsYWdzJyBwYXJhbWV0ZXIgb2YgdGhlICAgICAgICAgICAqLworICAvKiAgICBARlRfR2V0X0FkdmFuY2UgYW5kIEBGVF9HZXRfQWR2YW5jZXMgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZhaWwgaWYgdGhlICAqLworICAvKiAgICBjb3JyZXNwb25kaW5nIGhpbnRpbmcgbW9kZSBvciBmb250IGRyaXZlciBkb2Vzbid0IGFsbG93IGZvciB2ZXJ5ICAgKi8KKyAgLyogICAgcXVpY2sgYWR2YW5jZSBjb21wdXRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUeXBpY2FsbHksIGdseXBocyB0aGF0IGFyZSBlaXRoZXIgdW5zY2FsZWQsIHVuaGludGVkLCBiaXRtYXBwZWQsICAgKi8KKyAgLyogICAgb3IgbGlnaHQtaGludGVkIGNhbiBoYXZlIHRoZWlyIGFkdmFuY2Ugd2lkdGggY29tcHV0ZWQgdmVyeSAgICAgICAgICovCisgIC8qICAgIHF1aWNrbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm9ybWFsIGFuZCBieXRlY29kZSBoaW50ZWQgbW9kZXMgdGhhdCByZXF1aXJlIGxvYWRpbmcsIHNjYWxpbmcsICAgICovCisgIC8qICAgIGFuZCBoaW50aW5nIG9mIHRoZSBnbHlwaCBvdXRsaW5lLCBhcmUgZXh0cmVtZWx5IHNsb3cgYnkgICAgICAgICAgICAqLworICAvKiAgICBjb21wYXJpc29uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgIDB4MjAwMDAwMDBMCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQWR2YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgYWR2YW5jZSB2YWx1ZSBvZiBhIGdpdmVuIGdseXBoIG91dGxpbmUgaW4gYW4gICAgICAgICAgKi8KKyAgLyogICAgQEZUX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgc291cmNlIEBGVF9GYWNlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnaW5kZXggICAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgOjogQSBzZXQgb2YgYml0IGZsYWdzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCB3aGVuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNhbGxpbmcgQEZUX0xvYWRfR2x5cGgsIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBvZiBhZHZhbmNlcyB5b3UgbmVlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYWR2YW5jZSA6OiBUaGUgYWR2YW5jZSB2YWx1ZS4gIElmIHNjYWxpbmcgaXMgcGVyZm9ybWVkIChiYXNlZCBvbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIGBsb2FkX2ZsYWdzJyksIHRoZSBhZHZhbmNlIHZhbHVlIGlzIGluICAgICovCisgIC8qICAgICAgICAgICAgICAgIDE2LjE2IGZvcm1hdC4gIE90aGVyd2lzZSwgaXQgaXMgaW4gZm9udCB1bml0cy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgSWYgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIGlzIHNldCwgdGhpcyBpcyB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgIHZlcnRpY2FsIGFkdmFuY2UgY29ycmVzcG9uZGluZyB0byBhIHZlcnRpY2FsIGxheW91dC4gICAqLworICAvKiAgICAgICAgICAgICAgICBPdGhlcndpc2UsIGl0IGlzIHRoZSBob3Jpem9udGFsIGFkdmFuY2UgaW4gYSAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgaG9yaXpvbnRhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBtYXkgZmFpbCBpZiB5b3UgdXNlIEBGVF9BRFZBTkNFX0ZMQUdfRkFTVF9PTkxZIGFuZCAgICovCisgIC8qICAgIGlmIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBxdWljayB3YXkgdG8gICAgICAqLworICAvKiAgICByZXRyaWV2ZSB0aGUgYWR2YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2NhbGVkIGFkdmFuY2UgaXMgcmV0dXJuZWQgaW4gMTYuMTYgZm9ybWF0IGJ1dCBpc24ndCB0cmFuc2Zvcm1lZCAqLworICAvKiAgICBieSB0aGUgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIHNwZWNpZmllZCBieSBARlRfU2V0X1RyYW5zZm9ybS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfQWR2YW5jZSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgKnBhZHZhbmNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQWR2YW5jZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgYWR2YW5jZSB2YWx1ZXMgb2Ygc2V2ZXJhbCBnbHlwaCBvdXRsaW5lcyBpbiBhbiAgICAgICAgKi8KKyAgLyogICAgQEZUX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgOjogVGhlIHNvdXJjZSBARlRfRmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdGFydCAgICAgICA6OiBUaGUgZmlyc3QgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvdW50ICAgICAgIDo6IFRoZSBudW1iZXIgb2YgYWR2YW5jZSB2YWx1ZXMgeW91IHdhbnQgdG8gcmV0cmlldmUuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbG9hZF9mbGFncyAgOjogQSBzZXQgb2YgYml0IGZsYWdzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCB3aGVuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGNhbGxpbmcgQEZUX0xvYWRfR2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhZHZhbmNlIDo6IFRoZSBhZHZhbmNlIHZhbHVlcy4gIFRoaXMgYXJyYXksIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSAqLworICAvKiAgICAgICAgICAgICAgICBjYWxsZXIsIG11c3QgY29udGFpbiBhdCBsZWFzdCBgY291bnQnIGVsZW1lbnRzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgIElmIHNjYWxpbmcgaXMgcGVyZm9ybWVkIChiYXNlZCBvbiB0aGUgdmFsdWUgb2YgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICBgbG9hZF9mbGFncycpLCB0aGUgYWR2YW5jZSB2YWx1ZXMgYXJlIGluIDE2LjE2IGZvcm1hdC4gKi8KKyAgLyogICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGV5IGFyZSBpbiBmb250IHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICBJZiBARlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgaXMgc2V0LCB0aGVzZSBhcmUgdGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgdmVydGljYWwgYWR2YW5jZXMgY29ycmVzcG9uZGluZyB0byBhIHZlcnRpY2FsIGxheW91dC4gICovCisgIC8qICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhleSBhcmUgdGhlIGhvcml6b250YWwgYWR2YW5jZXMgaW4gYSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIG1heSBmYWlsIGlmIHlvdSB1c2UgQEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgYW5kICAgKi8KKyAgLyogICAgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZm9udCBiYWNrZW5kIGRvZXNuJ3QgaGF2ZSBhIHF1aWNrIHdheSB0byAgICAgICovCisgIC8qICAgIHJldHJpZXZlIHRoZSBhZHZhbmNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2NhbGVkIGFkdmFuY2VzIGFyZSByZXR1cm5lZCBpbiAxNi4xNiBmb3JtYXQgYnV0IGFyZW4ndCAgICAgICAgICAgICovCisgIC8qICAgIHRyYW5zZm9ybWVkIGJ5IHRoZSBhZmZpbmUgdHJhbnNmb3JtYXRpb24gc3BlY2lmaWVkIGJ5ICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfU2V0X1RyYW5zZm9ybS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfQWR2YW5jZXMoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICBsb2FkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqcGFkdmFuY2VzICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUQURWQU5DX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRhdXRvaC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRhdXRvaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2I3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGF1dG9oLmgKQEAgLTAsMCArMSw0NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0YXV0b2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQVVUT0hfSF9fCisjZGVmaW5lIF9fRlRBVVRPSF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGF1dG9faGludGVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgYXV0by1oaW50ZXIKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIENvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRpbmcgbW9kdWxlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgV2hpbGUgRnJlZVR5cGUncyBhdXRvLWhpbnRlciBkb2Vzbid0IGV4cG9zZSBBUEkgZnVuY3Rpb25zIGJ5IGl0c2VsZiwKKyAgICogICBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCBARlRfUHJvcGVydHlfU2V0IGFuZAorICAgKiAgIEBGVF9Qcm9wZXJ0eV9HZXQuICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcworICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZSBhdXRvLWhpbnRlcidzIG1vZHVsZSBuYW1lIGlzIGBhdXRvZml0dGVyJyBmb3IKKyAgICogICBoaXN0b3JpY2FsIHJlYXNvbnMuCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICBnbHlwaC10by1zY3JpcHQtbWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBUaGUgYXV0by1oaW50ZXIgcHJvdmlkZXMgdmFyaW91cyBzY3JpcHQgbW9kdWxlcyB0byBoaW50IGdseXBocy4KKyAgICogICBFeGFtcGxlcyBvZiBzdXBwb3J0ZWQgc2NyaXB0cyBhcmUgTGF0aW4gb3IgQ0pLLiAgQmVmb3JlIGEgZ2x5cGggaXMKKyAgICogICBhdXRvLWhpbnRlZCwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIG1hcCBvZiB0aGUgZm9udCBnZXRzIGV4YW1pbmVkLCBhbmQKKyAgICogICB0aGUgc2NyaXB0IGlzIHRoZW4gZGV0ZXJtaW5lZCBiYXNlZCBvbiBVbmljb2RlIGNoYXJhY3RlciByYW5nZXMsIHNlZQorICAgKiAgIGJlbG93LgorICAgKgorICAgKiAgIE9wZW5UeXBlIGZvbnRzLCBob3dldmVyLCBvZnRlbiBwcm92aWRlIG11Y2ggbW9yZSBnbHlwaHMgdGhhbgorICAgKiAgIGNoYXJhY3RlciBjb2RlcyAoc21hbGwgY2Fwcywgc3VwZXJzY3JpcHRzLCBsaWdhdHVyZXMsIHN3YXNoZXMsIGV0Yy4pLAorICAgKiAgIHRvIGJlIGNvbnRyb2xsZWQgYnkgc28tY2FsbGVkIGBmZWF0dXJlcycuICBIYW5kbGluZyBPcGVuVHlwZSBmZWF0dXJlcworICAgKiAgIGNhbiBiZSBxdWl0ZSBjb21wbGljYXRlZCBhbmQgdGh1cyBuZWVkcyBhIHNlcGFyYXRlIGxpYnJhcnkgb24gdG9wIG9mCisgICAqICAgRnJlZVR5cGUuCisgICAqCisgICAqICAgVGhlIG1hcHBpbmcgYmV0d2VlbiBnbHlwaCBpbmRpY2VzIGFuZCBzY3JpcHRzIChpbiB0aGUgYXV0by1oaW50ZXIKKyAgICogICBzZW5zZSwgc2VlIHRoZSBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIHZhbHVlcykgaXMgc3RvcmVkIGFzIGFuCisgICAqICAgYXJyYXkgd2l0aCBgbnVtX2dseXBocycgZWxlbWVudHMsIGFzIGZvdW5kIGluIHRoZSBmb250J3MgQEZUX0ZhY2UKKyAgICogICBzdHJ1Y3R1cmUuICBUaGUgYGdseXBoLXRvLXNjcmlwdC1tYXAnIHByb3BlcnR5IHJldHVybnMgYSBwb2ludGVyIHRvCisgICAqICAgdGhpcyBhcnJheSwgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGFzIG5lZWRlZC4gIE5vdGUgdGhhdCB0aGUKKyAgICogICBtb2RpZmljYXRpb24gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IGdseXBoIGdldHMgcHJvY2Vzc2VkIGJ5CisgICAqICAgdGhlIGF1dG8taGludGVyIHNvIHRoYXQgdGhlIGdsb2JhbCBhbmFseXNpcyBvZiB0aGUgZm9udCBzaGFwZXMKKyAgICogICBhY3R1YWxseSB1c2VzIHRoZSBtb2RpZmllZCBtYXBwaW5nLgorICAgKgorICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIGl0IChvbWl0dGluZworICAgKiAgIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5OworICAgKiAgICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICBmYWNlOworICAgKiAgICAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwICBwcm9wOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICogICAgIEZUX05ld19GYWNlKCBsaWJyYXJ5LCAiZm9vLnR0ZiIsIDAsICZmYWNlICk7CisgICAqCisgICAqICAgICBwcm9wLmZhY2UgPSBmYWNlOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfR2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbHlwaC10by1zY3JpcHQtbWFwIiwgJnByb3AgKTsKKyAgICoKKyAgICogICAgIC8vIGFkanVzdCBgcHJvcC5tYXAnIGFzIG5lZWRlZCByaWdodCBoZXJlCisgICAqCisgICAqICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCAuLi4sIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgKTsKKyAgICogICB9CisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCisgICAqCisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGdseXBoLXRvLXNjcmlwdC1tYXAgcHJvcGVydHkgdG8KKyAgICogICBzcGVjaWZ5IHRoZSBzY3JpcHQgc3VibW9kdWxlIHRoZSBhdXRvLWhpbnRlciBzaG91bGQgdXNlIGZvciBoaW50aW5nIGEKKyAgICogICBwYXJ0aWN1bGFyIGdseXBoLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkUgOjoKKyAgICogICAgIERvbid0IGF1dG8taGludCB0aGlzIGdseXBoLgorICAgKgorICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX0xBVElOIDo6CisgICAqICAgICBBcHBseSB0aGUgbGF0aW4gYXV0by1oaW50ZXIuICBGb3IgdGhlIGF1dG8taGludGVyLCBgbGF0aW4nIGlzIGEKKyAgICogICAgIHZlcnkgYnJvYWQgdGVybSwgaW5jbHVkaW5nIEN5cmlsbGljIGFuZCBHcmVlayBhbHNvIHNpbmNlIGNoYXJhY3RlcnMKKyAgICogICAgIGZyb20gdGhvc2Ugc2NyaXB0cyBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gY29uc3RyYWludHMuCisgICAqCisgICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKKyAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgorICAgKgorICAgKiAgICAgeworICAgKiAgICAgICBVKzAwMjAgLSBVKzAwN0YgIC8vIEJhc2ljIExhdGluIChubyBjb250cm9sIGNoYXJhY3RlcnMpCisgICAqICAgICAgIFUrMDBBMCAtIFUrMDBGRiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IChubyBjb250cm9sIGNoYXJhY3RlcnMpCisgICAqICAgICAgIFUrMDEwMCAtIFUrMDE3RiAgLy8gTGF0aW4gRXh0ZW5kZWQtQQorICAgKiAgICAgICBVKzAxODAgLSBVKzAyNEYgIC8vIExhdGluIEV4dGVuZGVkLUIKKyAgICogICAgICAgVSswMjUwIC0gVSswMkFGICAvLyBJUEEgRXh0ZW5zaW9ucworICAgKiAgICAgICBVKzAyQjAgLSBVKzAyRkYgIC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycworICAgKiAgICAgICBVKzAzMDAgLSBVKzAzNkYgIC8vIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcworICAgKiAgICAgICBVKzAzNzAgLSBVKzAzRkYgIC8vIEdyZWVrIGFuZCBDb3B0aWMKKyAgICogICAgICAgVSswNDAwIC0gVSswNEZGICAvLyBDeXJpbGxpYworICAgKiAgICAgICBVKzA1MDAgLSBVKzA1MkYgIC8vIEN5cmlsbGljIFN1cHBsZW1lbnQKKyAgICogICAgICAgVSsxRDAwIC0gVSsxRDdGICAvLyBQaG9uZXRpYyBFeHRlbnNpb25zCisgICAqICAgICAgIFUrMUQ4MCAtIFUrMURCRiAgLy8gUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50CisgICAqICAgICAgIFUrMURDMCAtIFUrMURGRiAgLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQKKyAgICogICAgICAgVSsxRTAwIC0gVSsxRUZGICAvLyBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsCisgICAqICAgICAgIFUrMUYwMCAtIFUrMUZGRiAgLy8gR3JlZWsgRXh0ZW5kZWQKKyAgICogICAgICAgVSsyMDAwIC0gVSsyMDZGICAvLyBHZW5lcmFsIFB1bmN0dWF0aW9uCisgICAqICAgICAgIFUrMjA3MCAtIFUrMjA5RiAgLy8gU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzCisgICAqICAgICAgIFUrMjBBMCAtIFUrMjBDRiAgLy8gQ3VycmVuY3kgU3ltYm9scworICAgKiAgICAgICBVKzIxNTAgLSBVKzIxOEYgIC8vIE51bWJlciBGb3JtcworICAgKiAgICAgICBVKzI0NjAgLSBVKzI0RkYgIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpY3MKKyAgICogICAgICAgVSsyQzYwIC0gVSsyQzdGICAvLyBMYXRpbiBFeHRlbmRlZC1DCisgICAqICAgICAgIFUrMkRFMCAtIFUrMkRGRiAgLy8gQ3lyaWxsaWMgRXh0ZW5kZWQtQQorICAgKiAgICAgICBVKzJFMDAgLSBVKzJFN0YgIC8vIFN1cHBsZW1lbnRhbCBQdW5jdHVhdGlvbgorICAgKiAgICAgICBVK0E2NDAgLSBVK0E2OUYgIC8vIEN5cmlsbGljIEV4dGVuZGVkLUIKKyAgICogICAgICAgVStBNzIwIC0gVStBN0ZGICAvLyBMYXRpbiBFeHRlbmRlZC1ECisgICAqICAgICAgIFUrRkIwMCAtIFUrRkIwNiAgLy8gQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoTGF0aW4gTGlnYXR1cmVzKQorICAgKiAgICAgIFUrMUQ0MDAgLSBVKzFEN0ZGIC8vIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scworICAgKiAgICAgIFUrMUYxMDAgLSBVKzFGMUZGIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpYyBTdXBwbGVtZW50CisgICAqICAgICB9CisgICAqCisgICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLIDo6CisgICAqICAgICBBcHBseSB0aGUgQ0pLIGF1dG8taGludGVyLCBjb3ZlcmluZyBDaGluZXNlLCBKYXBhbmVzZSwgS29yZWFuLCBvbGQKKyAgICogICAgIFZpZXRuYW1lc2UsIGFuZCBzb21lIG90aGVyIHNjcmlwdHMuCisgICAqCisgICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKKyAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgorICAgKgorICAgKiAgICAgeworICAgKiAgICAgICBVKzExMDAgLSBVKzExRkYgIC8vIEhhbmd1bCBKYW1vCisgICAqICAgICAgIFUrMkU4MCAtIFUrMkVGRiAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQKKyAgICogICAgICAgVSsyRjAwIC0gVSsyRkRGICAvLyBLYW5neGkgUmFkaWNhbHMKKyAgICogICAgICAgVSsyRkYwIC0gVSsyRkZGICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzCisgICAqICAgICAgIFUrMzAwMCAtIFUrMzAzRiAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uCisgICAqICAgICAgIFUrMzA0MCAtIFUrMzA5RiAgLy8gSGlyYWdhbmEKKyAgICogICAgICAgVSszMEEwIC0gVSszMEZGICAvLyBLYXRha2FuYQorICAgKiAgICAgICBVKzMxMDAgLSBVKzMxMkYgIC8vIEJvcG9tb2ZvCisgICAqICAgICAgIFUrMzEzMCAtIFUrMzE4RiAgLy8gSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbworICAgKiAgICAgICBVKzMxOTAgLSBVKzMxOUYgIC8vIEthbmJ1bgorICAgKiAgICAgICBVKzMxQTAgLSBVKzMxQkYgIC8vIEJvcG9tb2ZvIEV4dGVuZGVkCisgICAqICAgICAgIFUrMzFDMCAtIFUrMzFFRiAgLy8gQ0pLIFN0cm9rZXMKKyAgICogICAgICAgVSszMUYwIC0gVSszMUZGICAvLyBLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zCisgICAqICAgICAgIFUrMzIwMCAtIFUrMzJGRiAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocworICAgKiAgICAgICBVKzMzMDAgLSBVKzMzRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5CisgICAqICAgICAgIFUrMzQwMCAtIFUrNERCRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQQorICAgKiAgICAgICBVKzREQzAgLSBVKzRERkYgIC8vIFlpamluZyBIZXhhZ3JhbSBTeW1ib2xzCisgICAqICAgICAgIFUrNEUwMCAtIFUrOUZGRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocworICAgKiAgICAgICBVK0E5NjAgLSBVK0E5N0YgIC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUEKKyAgICogICAgICAgVStBQzAwIC0gVStEN0FGICAvLyBIYW5ndWwgU3lsbGFibGVzCisgICAqICAgICAgIFUrRDdCMCAtIFUrRDdGRiAgLy8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQgorICAgKiAgICAgICBVK0Y5MDAgLSBVK0ZBRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMKKyAgICogICAgICAgVStGRTEwIC0gVStGRTFGICAvLyBWZXJ0aWNhbCBmb3JtcworICAgKiAgICAgICBVK0ZFMzAgLSBVK0ZFNEYgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zCisgICAqICAgICAgIFUrRkYwMCAtIFUrRkZFRiAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKKyAgICogICAgICBVKzFCMDAwIC0gVSsxQjBGRiAvLyBLYW5hIFN1cHBsZW1lbnQKKyAgICogICAgICBVKzFEMzAwIC0gVSsxRDM1RiAvLyBUYWkgWHVhbiBIaW5nIFN5bWJvbHMKKyAgICogICAgICBVKzFGMjAwIC0gVSsxRjJGRiAvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50CisgICAqICAgICAgVSsyMDAwMCAtIFUrMkE2REYgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQgorICAgKiAgICAgIFUrMkE3MDAgLSBVKzJCNzNGIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMKKyAgICogICAgICBVKzJCNzQwIC0gVSsyQjgxRiAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBECisgICAqICAgICAgVSsyRjgwMCAtIFUrMkZBMUYgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50CisgICAqICAgICB9CisgICAqCisgICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfSU5ESUMgOjoKKyAgICogICAgIEFwcGx5IHRoZSBpbmRpYyBhdXRvLWhpbnRlciwgY292ZXJpbmcgYWxsIG1ham9yIHNjcmlwdHMgZnJvbSB0aGUKKyAgICogICAgIEluZGlhbiBzdWItY29udGluZW50IGFuZCBzb21lIG90aGVyIHJlbGF0ZWQgc2NyaXB0cyBsaWtlIFRoYWksIExhbywKKyAgICogICAgIG9yIFRpYmV0YW4uCisgICAqCisgICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKKyAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgorICAgKgorICAgKiAgICAgeworICAgKiAgICAgICBVKzA5MDAgLSBVKzBERkYgIC8vIEluZGljIFJhbmdlCisgICAqICAgICAgIFUrMEYwMCAtIFUrMEZGRiAgLy8gVGliZXRhbgorICAgKiAgICAgICBVKzE5MDAgLSBVKzE5NEYgIC8vIExpbWJ1CisgICAqICAgICAgIFUrMUI4MCAtIFUrMUJCRiAgLy8gU3VuZGFuZXNlCisgICAqICAgICAgIFUrMUM4MCAtIFUrMUNERiAgLy8gTWVldGVpIE1heWFrCisgICAqICAgICAgIFUrQTgwMCAtIFUrQTgyRiAgLy8gU3lsb3RpIE5hZ3JpCisgICAqICAgICAgVSsxMTgwMCAtIFUrMTE4REYgLy8gU2hhcmFkYQorICAgKiAgICAgfQorICAgKgorICAgKiAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBJbmRpYyBzdXBwb3J0IGlzIHJ1ZGltZW50YXJ5IG9ubHksIG1pc3NpbmcgYmx1ZQorICAgKiAgICAgem9uZSBzdXBwb3J0LgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORSAgIDAKKyNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU4gIDEKKyNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLICAgIDIKKyNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfSU5ESUMgIDMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCisgICAqCisgICAqICAgVGhlIGRhdGEgZXhjaGFuZ2Ugc3RydWN0dXJlIGZvciB0aGUgQGdseXBoLXRvLXNjcmlwdC1tYXAgcHJvcGVydHkuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwXworICB7CisgICAgRlRfRmFjZSAgIGZhY2U7CisgICAgRlRfQnl0ZSogIG1hcDsKKworICB9IEZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgZmFsbGJhY2stc2NyaXB0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBJZiBubyBhdXRvLWhpbnRlciBzY3JpcHQgbW9kdWxlIGNhbiBiZSBhc3NpZ25lZCB0byBhIGdseXBoLCBhCisgICAqICAgZmFsbGJhY2sgc2NyaXB0IGdldHMgYXNzaWduZWQgdG8gaXQgKHNlZSBhbHNvIHRoZQorICAgKiAgIEBnbHlwaC10by1zY3JpcHQtbWFwIHByb3BlcnR5KS4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMKKyAgICogICBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLLiAgVXNpbmcgdGhlIGBmYWxsYmFjay1zY3JpcHQnIHByb3BlcnR5LAorICAgKiAgIHRoaXMgZmFsbGJhY2sgdmFsdWUgY2FuIGJlIGNoYW5nZWQuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX1VJbnQgICAgIGZhbGxiYWNrX3NjcmlwdCA9IEZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkU7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWxsYmFjay1zY3JpcHQiLCAmZmFsbGJhY2tfc2NyaXB0ICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIEl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgcmlnaHQgdGltaW5nIGZvciBjaGFuZ2luZyB0aGlzIHZhbHVlOiBUaGUKKyAgICogICBjcmVhdGlvbiBvZiB0aGUgZ2x5cGgtdG8tc2NyaXB0IG1hcCB0aGF0IGV2ZW50dWFsbHkgdXNlcyB0aGUKKyAgICogICBmYWxsYmFjayBzY3JpcHQgdmFsdWUgZ2V0cyB0cmlnZ2VyZWQgZWl0aGVyIGJ5IHNldHRpbmcgb3IgcmVhZGluZyBhCisgICAqICAgZmFjZS1zcGVjaWZpYyBwcm9wZXJ0eSBsaWtlIEBnbHlwaC10by1zY3JpcHQtbWFwLCBvciBieSBhdXRvLWhpbnRpbmcKKyAgICogICBhbnkgZ2x5cGggZnJvbSB0aGF0IGZhY2UuICBJbiBwYXJ0aWN1bGFyLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQKKyAgICogICBhbiBARlRfRmFjZSBzdHJ1Y3R1cmUgYnV0IG5vdCBsb2FkZWQgYW55IGdseXBoICh1c2luZyB0aGUKKyAgICogICBhdXRvLWhpbnRlciksIGEgY2hhbmdlIG9mIHRoZSBmYWxsYmFjayBzY3JpcHQgd2lsbCBhZmZlY3QgdGhpcyBmYWNlLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgZGVmYXVsdC1zY3JpcHQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICpFeHBlcmltZW50YWwqICpvbmx5KgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGdldHMgY29tcGlsZWQgd2l0aCBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiB0byBtYWtlCisgICAqICAgdGhlIEhhcmZCdXp6IGxpYnJhcnkgYWNjZXNzIE9wZW5UeXBlIGZlYXR1cmVzIGZvciBnZXR0aW5nIGJldHRlcgorICAgKiAgIGdseXBoIGNvdmVyYWdlcywgdGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSAoYXV0by1maXR0ZXIpIHNjcmlwdCB0byBiZQorICAgKiAgIHVzZWQgZm9yIHRoZSBkZWZhdWx0IChPcGVuVHlwZSkgc2NyaXB0IGRhdGEgb2YgYSBmb250J3MgR1NVQiB0YWJsZS4KKyAgICogICBGZWF0dXJlcyBmb3IgdGhlIGRlZmF1bHQgc2NyaXB0IGFyZSBpbnRlbmRlZCBmb3IgYWxsIHNjcmlwdHMgbm90CisgICAqICAgZXhwbGljaXRseSBoYW5kbGVkIGluIEdTVUI7IGFuIGV4YW1wbGUgaXMgYSBgZGxpZycgZmVhdHVyZSwKKyAgICogICBjb250YWluaW5nIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgY2hhcmFjdGVycyBgVCcsIGBFJywgYW5kIGBMJyB0bworICAgKiAgIGZvcm0gYSBgVEVMJyBsaWdhdHVyZS4KKyAgICoKKyAgICogICBCeSBkZWZhdWx0LCB0aGlzIGlzIEBGVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTi4gIFVzaW5nIHRoZQorICAgKiAgIGBkZWZhdWx0LXNjcmlwdCcgcHJvcGVydHksIHRoaXMgZGVmYXVsdCB2YWx1ZSBjYW4gYmUgY2hhbmdlZC4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfVUludCAgICAgZGVmYXVsdF9zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdC1zY3JpcHQiLCAmZGVmYXVsdF9zY3JpcHQgKTsKKyAgICogICB9CisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgSXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSByaWdodCB0aW1pbmcgZm9yIGNoYW5naW5nIHRoaXMgdmFsdWU6IFRoZQorICAgKiAgIGNyZWF0aW9uIG9mIHRoZSBnbHlwaC10by1zY3JpcHQgbWFwIHRoYXQgZXZlbnR1YWxseSB1c2VzIHRoZQorICAgKiAgIGRlZmF1bHQgc2NyaXB0IHZhbHVlIGdldHMgdHJpZ2dlcmVkIGVpdGhlciBieSBzZXR0aW5nIG9yIHJlYWRpbmcgYQorICAgKiAgIGZhY2Utc3BlY2lmaWMgcHJvcGVydHkgbGlrZSBAZ2x5cGgtdG8tc2NyaXB0LW1hcCwgb3IgYnkgYXV0by1oaW50aW5nCisgICAqICAgYW55IGdseXBoIGZyb20gdGhhdCBmYWNlLiAgSW4gcGFydGljdWxhciwgaWYgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkCisgICAqICAgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGJ1dCBub3QgbG9hZGVkIGFueSBnbHlwaCAodXNpbmcgdGhlCisgICAqICAgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZGVmYXVsdCBzY3JpcHQgd2lsbCBhZmZlY3QgdGhpcyBmYWNlLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgaW5jcmVhc2UteC1oZWlnaHQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEZvciBwcGVtIHZhbHVlcyBpbiB0aGUgcmFuZ2UgNn48PSBwcGVtIDw9IGBpbmNyZWFzZS14LWhlaWdodCcsIHJvdW5kCisgICAqICAgdXAgdGhlIGZvbnQncyB4fmhlaWdodCBtdWNoIG1vcmUgb2Z0ZW4gdGhhbiBub3JtYWxseS4gIElmIHRoZSB2YWx1ZQorICAgKiAgIGlzIHNldCB0b34wLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhpcyBmZWF0dXJlIGlzIHN3aXRjaGVkIG9mZi4gIFVzZQorICAgKiAgIHRoaXMgcHJvcGVydHkgdG8gaW1wcm92ZSB0aGUgbGVnaWJpbGl0eSBvZiBzbWFsbCBmb250IHNpemVzIGlmCisgICAqICAgbmVjZXNzYXJ5LgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICBsaWJyYXJ5OworICAgKiAgICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgIGZhY2U7CisgICAqICAgICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCAgcHJvcDsKKyAgICoKKyAgICoKKyAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7CisgICAqICAgICBGVF9OZXdfRmFjZSggbGlicmFyeSwgImZvby50dGYiLCAwLCAmZmFjZSApOworICAgKiAgICAgRlRfU2V0X0NoYXJfU2l6ZSggZmFjZSwgMTAgKiA2NCwgMCwgNzIsIDAgKTsKKyAgICoKKyAgICogICAgIHByb3AuZmFjZSAgPSBmYWNlOworICAgKiAgICAgcHJvcC5saW1pdCA9IDE0OworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNyZWFzZS14LWhlaWdodCIsICZwcm9wICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFNldCB0aGlzIHZhbHVlIHJpZ2h0IGFmdGVyIGNhbGxpbmcgQEZUX1NldF9DaGFyX1NpemUsIGJ1dCBiZWZvcmUKKyAgICogICBsb2FkaW5nIGFueSBnbHlwaCAodXNpbmcgdGhlIGF1dG8taGludGVyKS4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGRhdGEgZXhjaGFuZ2Ugc3RydWN0dXJlIGZvciB0aGUgQGluY3JlYXNlLXgtaGVpZ2h0IHByb3BlcnR5LgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0XworICB7CisgICAgRlRfRmFjZSAgZmFjZTsKKyAgICBGVF9VSW50ICBsaW1pdDsKKworICB9IEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICB3YXJwaW5nCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBJZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggb3B0aW9uIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiB0bworICAgKiAgIGFjdGl2YXRlIHRoZSB3YXJwIGhpbnRpbmcgY29kZSBpbiB0aGUgYXV0by1oaW50ZXIsIHRoaXMgcHJvcGVydHkKKyAgICogICBzd2l0Y2hlcyB3YXJwaW5nIG9uIGFuZCBvZmYuCisgICAqCisgICAqICAgV2FycGluZyBvbmx5IHdvcmtzIGluIGBsaWdodCcgYXV0by1oaW50aW5nIG1vZGUuICBUaGUgaWRlYSBvZiB0aGUKKyAgICogICBjb2RlIGlzIHRvIHNsaWdodGx5IHNjYWxlIGFuZCBzaGlmdCBhIGdseXBoIGFsb25nIHRoZSBub24taGludGVkCisgICAqICAgZGltZW5zaW9uICh3aGljaCBpcyB1c3VhbGx5IHRoZSBob3Jpem9udGFsIGF4aXMpIHNvIHRoYXQgYXMgbXVjaCBvZgorICAgKiAgIGl0cyBzZWdtZW50cyBhcmUgYWxpZ25lZCAobW9yZSBvciBsZXNzKSB0byB0aGUgZ3JpZC4gIFRvIGZpbmQgb3V0IGEKKyAgICogICBnbHlwaCdzIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMgcGFyYW1ldGVyCisgICAqICAgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLgorICAgKgorICAgKiAgIEJ5IGRlZmF1bHQsIHdhcnBpbmcgaXMgb2ZmLiAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRvIHN3aXRjaCBvbgorICAgKiAgIHdhcnBpbmcgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0Jvb2wgICAgIHdhcnBpbmcgPSAxOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FycGluZyIsICZ3YXJwaW5nICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFRoZSB3YXJwaW5nIGNvZGUgY2FuIGFsc28gY2hhbmdlIGFkdmFuY2Ugd2lkdGhzLiAgSGF2ZSBhIGxvb2sgYXQgdGhlCisgICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIGZpZWxkcyBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUKKyAgICogICBmb3IgZGV0YWlscyBvbiBpbXByb3ZpbmcgaW50ZXItZ2x5cGggZGlzdGFuY2VzIHdoaWxlIHJlbmRlcmluZy4KKyAgICoKKyAgICogICBTaW5jZSB3YXJwaW5nIGlzIGEgZ2xvYmFsIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciBpdCBpcyBiZXN0IHRvCisgICAqICAgY2hhbmdlIGl0cyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nIGFueSBmYWNlLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkCisgICAqICAgcmVsb2FkIGFsbCBmYWNlcyB0aGF0IGdldCBhdXRvLWhpbnRlZCBpbiBgbGlnaHQnIGhpbnRpbmcgbW9kZS4KKyAgICoKKyAgICovCisKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRBVVRPSF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YmJveC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRiYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5ZDA0MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YmJveC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGJib3guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgZXhhY3QgYmJveCBjb21wdXRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGNvbXBvbmVudCBoYXMgYSBfc2luZ2xlXyByb2xlOiB0byBjb21wdXRlIGV4YWN0IG91dGxpbmUgYm91bmRpbmcgKi8KKyAgLyogYm94ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJdCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZW5naW5lIGZvciB2YXJpb3VzIHRlY2huaWNhbCAgICAgKi8KKyAgLyogcmVhc29ucy4gIEl0IG1heSB3ZWxsIGJlIGludGVncmF0ZWQgaW4gYGZ0b3V0bG4nIGxhdGVyLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRCQk9YX0hfXworI2RlZmluZSBfX0ZUQkJPWF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdXRsaW5lX3Byb2Nlc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9HZXRfQkJveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZSB0aGUgZXhhY3QgYm91bmRpbmcgYm94IG9mIGFuIG91dGxpbmUuICBUaGlzIGlzIHNsb3dlciAgICAgICovCisgIC8qICAgIHRoYW4gY29tcHV0aW5nIHRoZSBjb250cm9sIGJveC4gIEhvd2V2ZXIsIGl0IHVzZXMgYW4gYWR2YW5jZWQgICAgICAqLworICAvKiAgICBhbGdvcml0aG0gdGhhdCByZXR1cm5zIF92ZXJ5XyBxdWlja2x5IHdoZW4gdGhlIHR3byBib3hlcyAgICAgICAgICAgKi8KKyAgLyogICAgY29pbmNpZGUuICBPdGhlcndpc2UsIHRoZSBvdXRsaW5lIELDqXppZXIgYXJjcyBhcmUgdHJhdmVyc2VkIHRvICAgICAqLworICAvKiAgICBleHRyYWN0IHRoZWlyIGV4dHJlbWEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdXRsaW5lIDo6IEEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhYmJveCAgIDo6IFRoZSBvdXRsaW5lJ3MgZXhhY3QgYm91bmRpbmcgYm94LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB0aGUgZm9udCBpcyB0cmlja3kgYW5kIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQgd2l0aCAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0xPQURfTk9fU0NBTEUsIHRoZSByZXN1bHRpbmcgQkJveCBpcyBtZWFuaW5nbGVzcy4gIFRvIGdldCAgICAgICovCisgIC8qICAgIHJlYXNvbmFibGUgdmFsdWVzIGZvciB0aGUgQkJveCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgZ2x5cGggICAqLworICAvKiAgICBhdCBhIGxhcmdlIHBwZW0gdmFsdWUgKHNvIHRoYXQgdGhlIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zIGNhbiAgICAgICAgKi8KKyAgLyogICAgcHJvcGVybHkgc2hpZnQgYW5kIHNjYWxlIHRoZSBzdWJnbHlwaHMpLCB0aGVuIGV4dHJhY3RpbmcgdGhlIEJCb3gsICovCisgIC8qICAgIHdoaWNoIGNhbiBiZSBldmVudHVhbGx5IGNvbnZlcnRlZCBiYWNrIHRvIGZvbnQgdW5pdHMuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfR2V0X0JCb3goIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAqYWJib3ggKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRCQk9YX0hfXyAqLworCisKKy8qIEVORCAqLworCisKKy8qIExvY2FsIFZhcmlhYmxlczogKi8KKy8qIGNvZGluZzogdXRmLTggICAgKi8KKy8qIEVuZDogICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YmRmLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGJkZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGFiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGJkZi5oCkBAIC0wLDAgKzEsMjEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGJkZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVEJERl9IX18KKyNkZWZpbmUgX19GVEJERl9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmRmX2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQkRGIGFuZCBQQ0YgRmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQkRGIGFuZCBQQ0Ygc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gQkRGICovCisgIC8qICAgIGFuZCBQQ0YgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICAgQkRGX1Byb3BlcnR5VHlwZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIEEgbGlzdCBvZiBCREYgcHJvcGVydHkgdHlwZXMuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgIEJERl9QUk9QRVJUWV9UWVBFX05PTkUgOjoKKyAgICogICAgICBWYWx1ZX4wIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBtaXNzaW5nIHByb3BlcnR5LgorICAgKgorICAgKiAgICBCREZfUFJPUEVSVFlfVFlQRV9BVE9NIDo6CisgICAqICAgICAgUHJvcGVydHkgaXMgYSBzdHJpbmcgYXRvbS4KKyAgICoKKyAgICogICAgQkRGX1BST1BFUlRZX1RZUEVfSU5URUdFUiA6OgorICAgKiAgICAgIFByb3BlcnR5IGlzIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyLgorICAgKgorICAgKiAgICBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTCA6OgorICAgKiAgICAgIFByb3BlcnR5IGlzIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIuCisgICAqLworICB0eXBlZGVmIGVudW0gIEJERl9Qcm9wZXJ0eVR5cGVfCisgIHsKKyAgICBCREZfUFJPUEVSVFlfVFlQRV9OT05FICAgICA9IDAsCisgICAgQkRGX1BST1BFUlRZX1RZUEVfQVRPTSAgICAgPSAxLAorICAgIEJERl9QUk9QRVJUWV9UWVBFX0lOVEVHRVIgID0gMiwKKyAgICBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTCA9IDMKKworICB9IEJERl9Qcm9wZXJ0eVR5cGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICAgQkRGX1Byb3BlcnR5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgQSBoYW5kbGUgdG8gYSBAQkRGX1Byb3BlcnR5UmVjIHN0cnVjdHVyZSB0byBtb2RlbCBhIGdpdmVuCisgICAqICAgIEJERi9QQ0YgcHJvcGVydHkuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBCREZfUHJvcGVydHlSZWNfKiAgQkRGX1Byb3BlcnR5OworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQHN0cnVjdDoKKyAgKiAgICBCREZfUHJvcGVydHlSZWMKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgYSBnaXZlbiBCREYvUENGIHByb3BlcnR5LgorICAqCisgICogQGZpZWxkczoKKyAgKiAgICB0eXBlIDo6CisgICogICAgICBUaGUgcHJvcGVydHkgdHlwZS4KKyAgKgorICAqICAgIHUuYXRvbSA6OgorICAqICAgICAgVGhlIGF0b20gc3RyaW5nLCBpZiB0eXBlIGlzIEBCREZfUFJPUEVSVFlfVFlQRV9BVE9NLiAgTWF5IGJlCisgICogICAgICBOVUxMLCBpbmRpY2F0aW5nIGFuIGVtcHR5IHN0cmluZy4KKyAgKgorICAqICAgIHUuaW50ZWdlciA6OgorICAqICAgICAgQSBzaWduZWQgaW50ZWdlciwgaWYgdHlwZSBpcyBAQkRGX1BST1BFUlRZX1RZUEVfSU5URUdFUi4KKyAgKgorICAqICAgIHUuY2FyZGluYWwgOjoKKyAgKiAgICAgIEFuIHVuc2lnbmVkIGludGVnZXIsIGlmIHR5cGUgaXMgQEJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMLgorICAqLworICB0eXBlZGVmIHN0cnVjdCAgQkRGX1Byb3BlcnR5UmVjXworICB7CisgICAgQkRGX1Byb3BlcnR5VHlwZSAgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICBjb25zdCBjaGFyKiAgICAgYXRvbTsKKyAgICAgIEZUX0ludDMyICAgICAgICBpbnRlZ2VyOworICAgICAgRlRfVUludDMyICAgICAgIGNhcmRpbmFsOworCisgICAgfSB1OworCisgIH0gQkRGX1Byb3BlcnR5UmVjOworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgIEZUX0dldF9CREZfQ2hhcnNldF9JRAorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFJldHJpZXZlIGEgQkRGIGZvbnQgY2hhcmFjdGVyIHNldCBpZGVudGl0eSwgYWNjb3JkaW5nIHRvCisgICogICAgdGhlIEJERiBzcGVjaWZpY2F0aW9uLgorICAqCisgICogQGlucHV0OgorICAqICAgIGZhY2UgOjoKKyAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICAgYWNoYXJzZXRfZW5jb2RpbmcgOjoKKyAgKiAgICAgICBDaGFyc2V0IGVuY29kaW5nLCBhcyBhIEN+c3RyaW5nLCBvd25lZCBieSB0aGUgZmFjZS4KKyAgKgorICAqICAgIGFjaGFyc2V0X3JlZ2lzdHJ5IDo6CisgICogICAgICAgQ2hhcnNldCByZWdpc3RyeSwgYXMgYSBDfnN0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuCisgICoKKyAgKiBAcmV0dXJuOgorICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQkRGIGZhY2VzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0JERl9DaGFyc2V0X0lEKCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKmFjaGFyc2V0X3JlZ2lzdHJ5ICk7CisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICAgRlRfR2V0X0JERl9Qcm9wZXJ0eQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFJldHJpZXZlIGEgQkRGIHByb3BlcnR5IGZyb20gYSBCREYgb3IgUENGIGZvbnQgZmlsZS4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAqCisgICogICAgbmFtZSA6OiBUaGUgcHJvcGVydHkgbmFtZS4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICAgYXByb3BlcnR5IDo6IFRoZSBwcm9wZXJ0eS4KKyAgKgorICAqIEByZXR1cm46CisgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggQkRGIF9hbmRfIFBDRiBmb250cy4gIEl0IHJldHVybnMgYW4gZXJyb3IKKyAgKiAgIG90aGVyd2lzZS4gIEl0IGFsc28gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluIHRoZQorICAqICAgZm9udC4KKyAgKgorICAqICAgQSBgcHJvcGVydHknIGlzIGEgZWl0aGVyIGtleS12YWx1ZSBwYWlyIHdpdGhpbiB0aGUgU1RBUlRQUk9QRVJUSUVTCisgICogICAuLi4gRU5EUFJPUEVSVElFUyBibG9jayBvZiBhIEJERiBmb250IG9yIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUKKyAgKiAgIGBpbmZvLT5wcm9wcycgYXJyYXkgd2l0aGluIGEgYEZvbnRSZWMnIHN0cnVjdHVyZSBvZiBhIFBDRiBmb250LgorICAqCisgICogICBJbnRlZ2VyIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBzdG9yZWQgYXMgYHNpZ25lZCcgd2l0aGluIFBDRiBmb250czsKKyAgKiAgIGNvbnNlcXVlbnRseSwgQEJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMIGlzIGEgcG9zc2libGUgcmV0dXJuIHZhbHVlCisgICogICBmb3IgQkRGIGZvbnRzIG9ubHkuCisgICoKKyAgKiAgIEluIGNhc2Ugb2YgZXJyb3IsIGBhcHJvcGVydHktPnR5cGUnIGlzIGFsd2F5cyBzZXQgdG8KKyAgKiAgIEBCREZfUFJPUEVSVFlfVFlQRV9OT05FLgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0JERl9Qcm9wZXJ0eSggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBCREZfUHJvcGVydHlSZWMgICphcHJvcGVydHkgKTsKKworICAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUQkRGX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRiaXRtYXAuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0Yml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjYzQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0Yml0bWFwLmgKQEAgLTAsMCArMSwyNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Yml0bWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQklUTUFQX0hfXworI2RlZmluZSBfX0ZUQklUTUFQX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcF9oYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEJpdG1hcCBIYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhhbmRsaW5nIEZUX0JpdG1hcCBvYmplY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIEBGVF9CaXRtYXAgb2JqZWN0cy4gICAqLworICAvKiAgICBOb3RlIHRoYXQgbm9uZSBvZiB0aGUgZnVuY3Rpb25zIGNoYW5nZXMgdGhlIGJpdG1hcCdzIGBmbG93JyAoYXMgICAgKi8KKyAgLyogICAgaW5kaWNhdGVkIGJ5IHRoZSBzaWduIG9mIHRoZSBgcGl0Y2gnIGZpZWxkIGluIGBGVF9CaXRtYXAnKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcF9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluaXRpYWxpemUgYSBwb2ludGVyIHRvIGFuIEBGVF9CaXRtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFiaXRtYXAgOjogQSBwb2ludGVyIHRvIHRoZSBiaXRtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcyBgRlRfQml0bWFwX05ldycuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfQml0bWFwX0luaXQoIEZUX0JpdG1hcCAgKmFiaXRtYXAgKTsKKworCisgIC8qIGRlcHJlY2F0ZWQgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfQml0bWFwX05ldyggRlRfQml0bWFwICAqYWJpdG1hcCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQml0bWFwX0NvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29weSBhIGJpdG1hcCBpbnRvIGFub3RoZXIgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzb3VyY2UgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YXJnZXQgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9CaXRtYXBfQ29weSggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0JpdG1hcCAgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICAgICAgKnRhcmdldCk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXBfRW1ib2xkZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFbWJvbGRlbiBhIGJpdG1hcC4gIFRoZSBuZXcgYml0bWFwIHdpbGwgYmUgYWJvdXQgYHhTdHJlbmd0aCcgICAgICAgKi8KKyAgLyogICAgcGl4ZWxzIHdpZGVyIGFuZCBgeVN0cmVuZ3RoJyBwaXhlbHMgaGlnaGVyLiAgVGhlIGxlZnQgYW5kIGJvdHRvbSAgICovCisgIC8qICAgIGJvcmRlcnMgYXJlIGtlcHQgdW5jaGFuZ2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICA6OiBBIGhhbmRsZSB0byBhIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeFN0cmVuZ3RoIDo6IEhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQgaG9yaXpvbnRhbGx5LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBFeHByZXNzZWQgaW4gMjYuNiBwaXhlbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeVN0cmVuZ3RoIDo6IEhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQgdmVydGljYWxseS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBFeHByZXNzZWQgaW4gMjYuNiBwaXhlbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcCAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJlc3RyaWN0cyBgeFN0cmVuZ3RoJyB0byBiZSBsZXNzIHRoYW4gICAqLworICAvKiAgICBvciBlcXVhbCB0b344IGlmIGJpdG1hcCBpcyBvZiBwaXhlbF9tb2RlIEBGVF9QSVhFTF9NT0RFX01PTk8uICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHlvdSB3YW50IHRvIGVtYm9sZGVuIHRoZSBiaXRtYXAgb3duZWQgYnkgYSBARlRfR2x5cGhTbG90UmVjLCAgICAqLworICAvKiAgICB5b3Ugc2hvdWxkIGNhbGwgQEZUX0dseXBoU2xvdF9Pd25fQml0bWFwIG9uIHRoZSBzbG90IGZpcnN0LiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEJpdG1hcHMgaW4gQEZUX1BJWEVMX01PREVfR1JBWTIgYW5kIEBGVF9QSVhFTF9NT0RFX0dSQVlAIGZvcm1hdCAgICAqLworICAvKiAgICBhcmUgY29udmVydGVkIHRvIEBGVF9QSVhFTF9NT0RFX0dSQVkgZm9ybWF0IChpLmUuLCA4YnBwKS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9CaXRtYXBfRW1ib2xkZW4oIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgRlRfQml0bWFwKiAgYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHhTdHJlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB5U3RyZW5ndGggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcF9Db252ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbnZlcnQgYSBiaXRtYXAgb2JqZWN0IHdpdGggZGVwdGggMWJwcCwgMmJwcCwgNGJwcCwgOGJwcCBvciAzMmJwcCAqLworICAvKiAgICB0byBhIGJpdG1hcCBvYmplY3Qgd2l0aCBkZXB0aCA4YnBwLCBtYWtpbmcgdGhlIG51bWJlciBvZiB1c2VkICAgICAgKi8KKyAgLyogICAgYnl0ZXMgbGluZSAoYS5rLmEuIHRoZSBgcGl0Y2gnKSBhIG11bHRpcGxlIG9mIGBhbGlnbm1lbnQnLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSAgIDo6IEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzb3VyY2UgICAgOjogVGhlIHNvdXJjZSBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFsaWdubWVudCA6OiBUaGUgcGl0Y2ggb2YgdGhlIGJpdG1hcCBpcyBhIG11bHRpcGxlIG9mIHRoaXMgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLiAgQ29tbW9uIHZhbHVlcyBhcmUgMSwgMiwgb3IgNC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YXJnZXQgICAgOjogVGhlIHRhcmdldCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJdCBpcyBwb3NzaWJsZSB0byBjYWxsIEBGVF9CaXRtYXBfQ29udmVydCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0ICAgKi8KKyAgLyogICAgY2FsbGluZyBARlRfQml0bWFwX0RvbmUgKHRoZSBtZW1vcnkgaXMgc2ltcGx5IHJlYWxsb2NhdGVkKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2UgQEZUX0JpdG1hcF9Eb25lIHRvIGZpbmFsbHkgcmVtb3ZlIHRoZSBiaXRtYXAgb2JqZWN0LiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBgbGlicmFyeScgYXJndW1lbnQgaXMgdGFrZW4gdG8gaGF2ZSBhY2Nlc3MgdG8gRnJlZVR5cGUncyAgICAgICAqLworICAvKiAgICBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9CaXRtYXBfQ29udmVydCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0JpdG1hcCAgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICAgICAgKnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICAgIGFsaWdubWVudCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhTbG90X093bl9CaXRtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTWFrZSBzdXJlIHRoYXQgYSBnbHlwaCBzbG90IG93bnMgYHNsb3QtPmJpdG1hcCcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2xvdCA6OiBUaGUgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9CaXRtYXBfRW1ib2xkZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dseXBoU2xvdF9Pd25fQml0bWFwKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcF9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc3Ryb3kgYSBiaXRtYXAgb2JqZWN0IGluaXRpYWxpemVkIHdpdGggQEZUX0JpdG1hcF9Jbml0LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYml0bWFwICA6OiBUaGUgYml0bWFwIG9iamVjdCB0byBiZSBmcmVlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGBsaWJyYXJ5JyBhcmd1bWVudCBpcyB0YWtlbiB0byBoYXZlIGFjY2VzcyB0byBGcmVlVHlwZSdzICAgICAgICovCisgIC8qICAgIG1lbW9yeSBoYW5kbGluZyBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0JpdG1hcF9Eb25lKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgRlRfQml0bWFwICAqYml0bWFwICk7CisKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRCSVRNQVBfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGJ6aXAyLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGJ6aXAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1Zjk0NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0YnppcDIuaApAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRiemlwMi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEJ6aXAyLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBKb2VsIEtsaW5naGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRCWklQMl9IX18KKyNkZWZpbmUgX19GVEJaSVAyX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnppcDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQlpJUDIgU3RyZWFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNpbmcgYnppcDItY29tcHJlc3NlZCBmb250IGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBCemlwMi1zcGVjaWZpYyBmdW5jdGlvbnMuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgRlRfU3RyZWFtX09wZW5CemlwMgorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgT3BlbiBhIG5ldyBzdHJlYW0gdG8gcGFyc2UgYnppcDItY29tcHJlc3NlZCBmb250IGZpbGVzLiAgVGhpcyBpcworICAqICAgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgY29tcHJlc3NlZCBgKi5wY2YuYnoyJyBmb250cyB0aGF0IGNvbWUKKyAgKiAgIHdpdGggWEZyZWU4Ni4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgIHN0cmVhbSA6OgorICAqICAgICBUaGUgdGFyZ2V0IGVtYmVkZGluZyBzdHJlYW0uCisgICoKKyAgKiAgIHNvdXJjZSA6OgorICAqICAgICBUaGUgc291cmNlIHN0cmVhbS4KKyAgKgorICAqIEByZXR1cm46CisgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICBUaGUgc291cmNlIHN0cmVhbSBtdXN0IGJlIG9wZW5lZCBfYmVmb3JlXyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICoKKyAgKiAgIENhbGxpbmcgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBGVF9TdHJlYW1fQ2xvc2UnIG9uIHRoZSBuZXcgc3RyZWFtIHdpbGwKKyAgKiAgICpub3QqIGNhbGwgYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIHNvdXJjZSBzdHJlYW0uICBOb25lIG9mIHRoZSBzdHJlYW0KKyAgKiAgIG9iamVjdHMgd2lsbCBiZSByZWxlYXNlZCB0byB0aGUgaGVhcC4KKyAgKgorICAqICAgVGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24KKyAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbS4KKyAgKgorICAqICAgSW4gY2VydGFpbiBidWlsZHMgb2YgdGhlIGxpYnJhcnksIGJ6aXAyIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzCisgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdworICAqICAgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgYnppcDIgY29tcHJlc3NlZCBzdHJlYW0KKyAgKiAgIGZyb20gaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgKgorICAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBpZiB5b3VyIGJ1aWxkCisgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggYnppcDIgc3VwcG9ydC4KKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9PcGVuQnppcDIoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHNvdXJjZSApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVEJaSVAyX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjYWNoZS5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGNhY2hlLmgKQEAgLTAsMCArMSwxMDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGNhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQ2FjaGUgc3Vic3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVENBQ0hFX0hfXworI2RlZmluZSBfX0ZUQ0FDSEVfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9HTFlQSF9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiA8U2VjdGlvbj4KKyAgICogICAgY2FjaGVfc3Vic3lzdGVtCisgICAqCisgICAqIDxUaXRsZT4KKyAgICogICAgQ2FjaGUgU3ViLVN5c3RlbQorICAgKgorICAgKiA8QWJzdHJhY3Q+CisgICAqICAgIEhvdyB0byBjYWNoZSBmYWNlLCBzaXplLCBhbmQgZ2x5cGggZGF0YSB3aXRoIEZyZWVUeXBlfjIuCisgICAqCisgICAqIDxEZXNjcmlwdGlvbj4KKyAgICogICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0sIHdoaWNoIGlzIHVzZWQKKyAgICogICB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnRseSBvcGVuZWQgQEZUX0ZhY2UgYW5kIEBGVF9TaXplCisgICAqICAgb2JqZWN0cywgYXMgd2VsbCBhcyBjYWNoaW5nIGluZm9ybWF0aW9uIGxpa2UgY2hhcmFjdGVyIG1hcHMgYW5kIGdseXBoCisgICAqICAgaW1hZ2VzIHdoaWxlIGxpbWl0aW5nIHRoZWlyIG1heGltdW0gbWVtb3J5IHVzYWdlLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBhbGwgdHlwZXMgYW5kIGZ1bmN0aW9ucyBiZWdpbiB3aXRoIHRoZSBgRlRDXycgcHJlZml4LgorICAgKgorICAgKiAgIFRoZSBjYWNoZSBpcyBoaWdobHkgcG9ydGFibGUgYW5kIHRodXMgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoZQorICAgKiAgIGZvbnRzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSwgb3IgaG93IHRvIGFjY2VzcyB0aGVtLiAgVGhpcyBpbXBsaWVzCisgICAqICAgdGhlIGZvbGxvd2luZyBzY2hlbWU6CisgICAqCisgICAqICAgRmlyc3QsIGF2YWlsYWJsZSBvciBpbnN0YWxsZWQgZm9udCBmYWNlcyBhcmUgdW5pcXVlbHkgaWRlbnRpZmllZCBieQorICAgKiAgIEBGVENfRmFjZUlEIHZhbHVlcywgcHJvdmlkZWQgdG8gdGhlIGNhY2hlIGJ5IHRoZSBjbGllbnQuICBOb3RlIHRoYXQKKyAgICogICB0aGUgY2FjaGUgb25seSBzdG9yZXMgYW5kIGNvbXBhcmVzIHRoZXNlIHZhbHVlcywgYW5kIGRvZXNuJ3QgdHJ5IHRvCisgICAqICAgaW50ZXJwcmV0IHRoZW0gaW4gYW55IHdheS4KKyAgICoKKyAgICogICBTZWNvbmQsIHRoZSBjYWNoZSBjYWxscywgb25seSB3aGVuIG5lZWRlZCwgYSBjbGllbnQtcHJvdmlkZWQgZnVuY3Rpb24KKyAgICogICB0byBjb252ZXJ0IGFuIEBGVENfRmFjZUlEIGludG8gYSBuZXcgQEZUX0ZhY2Ugb2JqZWN0LiAgVGhlIGxhdHRlciBpcworICAgKiAgIHRoZW4gY29tcGxldGVseSBtYW5hZ2VkIGJ5IHRoZSBjYWNoZSwgaW5jbHVkaW5nIGl0cyB0ZXJtaW5hdGlvbgorICAgKiAgIHRocm91Z2ggQEZUX0RvbmVfRmFjZS4gIFRvIG1vbml0b3IgdGVybWluYXRpb24gb2YgZmFjZSBvYmplY3RzLCB0aGUKKyAgICogICBmaW5hbGl6ZXIgY2FsbGJhY2sgaW4gdGhlIGBnZW5lcmljJyBmaWVsZCBvZiB0aGUgQEZUX0ZhY2Ugb2JqZWN0IGNhbgorICAgKiAgIGJlIHVzZWQsIHdoaWNoIG1pZ2h0IGFsc28gYmUgdXNlZCB0byBzdG9yZSB0aGUgQEZUQ19GYWNlSUQgb2YgdGhlCisgICAqICAgZmFjZS4KKyAgICoKKyAgICogICBDbGllbnRzIGFyZSBmcmVlIHRvIG1hcCBmYWNlIElEcyB0byBhbnl0aGluZyBlbHNlLiAgVGhlIG1vc3Qgc2ltcGxlCisgICAqICAgdXNhZ2UgaXMgdG8gYXNzb2NpYXRlIHRoZW0gdG8gYSAocGF0aG5hbWUsZmFjZV9pbmRleCkgcGFpciB0aGF0IGlzCisgICAqICAgdXNlZCB0byBjYWxsIEBGVF9OZXdfRmFjZS4gIEhvd2V2ZXIsIG1vcmUgY29tcGxleCBzY2hlbWVzIGFyZSBhbHNvCisgICAqICAgcG9zc2libGUuCisgICAqCisgICAqICAgTm90ZSB0aGF0IGZvciB0aGUgY2FjaGUgdG8gd29yayBjb3JyZWN0bHksIHRoZSBmYWNlIElEIHZhbHVlcyBtdXN0IGJlCisgICAqICAgKnBlcnNpc3RlbnQqLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb250ZW50cyB0aGV5IHBvaW50IHRvIHNob3VsZCBub3QKKyAgICogICBjaGFuZ2UgYXQgcnVudGltZSwgb3IgdGhhdCB0aGVpciB2YWx1ZSBzaG91bGQgbm90IGJlY29tZSBpbnZhbGlkLgorICAgKgorICAgKiAgIElmIHRoaXMgaXMgdW5hdm9pZGFibGUgKGUuZy4sIHdoZW4gYSBmb250IGlzIHVuaW5zdGFsbGVkIGF0IHJ1bnRpbWUpLAorICAgKiAgIHlvdSBzaG91bGQgY2FsbCBARlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGxldAorICAgKiAgIHRoZSBjYWNoZSBnZXQgcmlkIG9mIGFueSByZWZlcmVuY2VzIHRvIHRoZSBvbGQgQEZUQ19GYWNlSUQgaXQgbWF5CisgICAqICAga2VlcCBpbnRlcm5hbGx5LiAgRmFpbHVyZSB0byBkbyBzbyB3aWxsIGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW91cgorICAgKiAgIG9yIGV2ZW4gY3Jhc2hlcy4KKyAgICoKKyAgICogICBUbyB1c2UgdGhlIGNhY2hlLCBzdGFydCB3aXRoIGNhbGxpbmcgQEZUQ19NYW5hZ2VyX05ldyB0byBjcmVhdGUgYSBuZXcKKyAgICogICBARlRDX01hbmFnZXIgb2JqZWN0LCB3aGljaCBtb2RlbHMgYSBzaW5nbGUgY2FjaGUgaW5zdGFuY2UuICBZb3UgY2FuCisgICAqICAgdGhlbiBsb29rIHVwIEBGVF9GYWNlIGFuZCBARlRfU2l6ZSBvYmplY3RzIHdpdGgKKyAgICogICBARlRDX01hbmFnZXJfTG9va3VwRmFjZSBhbmQgQEZUQ19NYW5hZ2VyX0xvb2t1cFNpemUsIHJlc3BlY3RpdmVseS4KKyAgICoKKyAgICogICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGNoYXJtYXAgY2FjaGluZywgY2FsbCBARlRDX0NNYXBDYWNoZV9OZXcsIHRoZW4KKyAgICogICBsYXRlciB1c2UgQEZUQ19DTWFwQ2FjaGVfTG9va3VwIHRvIHBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YKKyAgICogICBARlRfR2V0X0NoYXJfSW5kZXgsIG9ubHkgbXVjaCBmYXN0ZXIuCisgICAqCisgICAqICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBARlRfR2x5cGggY2FjaGluZywgY2FsbCBARlRDX0ltYWdlQ2FjaGUsIHRoZW4KKyAgICogICBsYXRlciB1c2UgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cCB0byByZXRyaWV2ZSB0aGUgY29ycmVzcG9uZGluZworICAgKiAgIEBGVF9HbHlwaCBvYmplY3RzIGZyb20gdGhlIGNhY2hlLgorICAgKgorICAgKiAgIElmIHlvdSBuZWVkIGxvdHMgb2Ygc21hbGwgYml0bWFwcywgaXQgaXMgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQKKyAgICogICB0byBjYWxsIEBGVENfU0JpdENhY2hlX05ldyBmb2xsb3dlZCBieSBARlRDX1NCaXRDYWNoZV9Mb29rdXAuICBUaGlzCisgICAqICAgcmV0dXJucyBARlRDX1NCaXRSZWMgc3RydWN0dXJlcywgd2hpY2ggYXJlIHVzZWQgdG8gc3RvcmUgc21hbGwKKyAgICogICBiaXRtYXBzIGRpcmVjdGx5LiAgKEEgc21hbGwgYml0bWFwIGlzIG9uZSB3aG9zZSBtZXRyaWNzIGFuZAorICAgKiAgIGRpbWVuc2lvbnMgYWxsIGZpdCBpbnRvIDgtYml0IGludGVnZXJzKS4KKyAgICoKKyAgICogICBXZSBob3BlIHRvIGFsc28gcHJvdmlkZSBhIGtlcm5pbmcgY2FjaGUgaW4gdGhlIG5lYXIgZnV0dXJlLgorICAgKgorICAgKgorICAgKiA8T3JkZXI+CisgICAqICAgRlRDX01hbmFnZXIKKyAgICogICBGVENfRmFjZUlECisgICAqICAgRlRDX0ZhY2VfUmVxdWVzdGVyCisgICAqCisgICAqICAgRlRDX01hbmFnZXJfTmV3CisgICAqICAgRlRDX01hbmFnZXJfUmVzZXQKKyAgICogICBGVENfTWFuYWdlcl9Eb25lCisgICAqICAgRlRDX01hbmFnZXJfTG9va3VwRmFjZQorICAgKiAgIEZUQ19NYW5hZ2VyX0xvb2t1cFNpemUKKyAgICogICBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQKKyAgICoKKyAgICogICBGVENfTm9kZQorICAgKiAgIEZUQ19Ob2RlX1VucmVmCisgICAqCisgICAqICAgRlRDX0ltYWdlQ2FjaGUKKyAgICogICBGVENfSW1hZ2VDYWNoZV9OZXcKKyAgICogICBGVENfSW1hZ2VDYWNoZV9Mb29rdXAKKyAgICoKKyAgICogICBGVENfU0JpdAorICAgKiAgIEZUQ19TQml0Q2FjaGUKKyAgICogICBGVENfU0JpdENhY2hlX05ldworICAgKiAgIEZUQ19TQml0Q2FjaGVfTG9va3VwCisgICAqCisgICAqICAgRlRDX0NNYXBDYWNoZQorICAgKiAgIEZUQ19DTWFwQ2FjaGVfTmV3CisgICAqICAgRlRDX0NNYXBDYWNoZV9Mb29rdXAKKyAgICoKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBCQVNJQyBUWVBFIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6IEZUQ19GYWNlSUQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIG9wYXF1ZSBwb2ludGVyIHR5cGUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aXR5IGZhY2Ugb2JqZWN0cy4gIFRoZQorICAgKiAgIGNvbnRlbnRzIG9mIHN1Y2ggb2JqZWN0cyBpcyBhcHBsaWNhdGlvbi1kZXBlbmRlbnQuCisgICAqCisgICAqICAgVGhlc2UgcG9pbnRlcnMgYXJlIHR5cGljYWxseSB1c2VkIHRvIHBvaW50IHRvIGEgdXNlci1kZWZpbmVkCisgICAqICAgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBmb250IGZpbGUgcGF0aCwgYW5kIGZhY2UgaW5kZXguCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIE5ldmVyIHVzZSBOVUxMIGFzIGEgdmFsaWQgQEZUQ19GYWNlSUQuCisgICAqCisgICAqICAgRmFjZSBJRHMgYXJlIHBhc3NlZCBieSB0aGUgY2xpZW50IHRvIHRoZSBjYWNoZSBtYW5hZ2VyIHRoYXQgY2FsbHMsCisgICAqICAgd2hlbiBuZWVkZWQsIHRoZSBARlRDX0ZhY2VfUmVxdWVzdGVyIHRvIHRyYW5zbGF0ZSB0aGVtIGludG8gbmV3CisgICAqICAgQEZUX0ZhY2Ugb2JqZWN0cy4KKyAgICoKKyAgICogICBJZiB0aGUgY29udGVudCBvZiBhIGdpdmVuIGZhY2UgSUQgY2hhbmdlcyBhdCBydW50aW1lLCBvciBpZiB0aGUgdmFsdWUKKyAgICogICBiZWNvbWVzIGludmFsaWQgKGUuZy4sIHdoZW4gdW5pbnN0YWxsaW5nIGEgZm9udCksIHlvdSBzaG91bGQKKyAgICogICBpbW1lZGlhdGVseSBjYWxsIEBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQgYmVmb3JlIGFueSBvdGhlciBjYWNoZQorICAgKiAgIGZ1bmN0aW9uLgorICAgKgorICAgKiAgIEZhaWx1cmUgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gaW5jb3JyZWN0IGJlaGF2aW91ciBvciBldmVuCisgICAqICAgbWVtb3J5IGxlYWtzIGFuZCBjcmFzaGVzLgorICAgKi8KKyAgdHlwZWRlZiBGVF9Qb2ludGVyICBGVENfRmFjZUlEOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRDX0ZhY2VfUmVxdWVzdGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuICBJdCBpcyB1c2VkIGJ5CisgICAqICAgdGhlIGNhY2hlIG1hbmFnZXIgdG8gdHJhbnNsYXRlIGEgZ2l2ZW4gQEZUQ19GYWNlSUQgaW50byBhIG5ldyB2YWxpZAorICAgKiAgIEBGVF9GYWNlIG9iamVjdCwgb24gZGVtYW5kLgorICAgKgorICAgKiA8SW5wdXQ+CisgICAqICAgZmFjZV9pZCA6OgorICAgKiAgICAgVGhlIGZhY2UgSUQgdG8gcmVzb2x2ZS4KKyAgICoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIHJlcV9kYXRhIDo6CisgICAqICAgICBBcHBsaWNhdGlvbi1wcm92aWRlZCByZXF1ZXN0IGRhdGEgKHNlZSBub3RlIGJlbG93KS4KKyAgICoKKyAgICogPE91dHB1dD4KKyAgICogICBhZmFjZSA6OgorICAgKiAgICAgQSBuZXcgQEZUX0ZhY2UgaGFuZGxlLgorICAgKgorICAgKiA8UmV0dXJuPgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIDxOb3RlPgorICAgKiAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgYHJlcV9kYXRhJyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHBhc3NlZCBieSB0aGUKKyAgICogICBjbGllbnQgd2hlbiBARlRDX01hbmFnZXJfTmV3IGlzIGNhbGxlZC4KKyAgICoKKyAgICogICBUaGUgZmFjZSByZXF1ZXN0ZXIgc2hvdWxkIG5vdCBwZXJmb3JtIGZ1bm55IHRoaW5ncyBvbiB0aGUgcmV0dXJuZWQKKyAgICogICBmYWNlIG9iamVjdCwgbGlrZSBjcmVhdGluZyBhIG5ldyBARlRfU2l6ZSBmb3IgaXQsIG9yIHNldHRpbmcgYQorICAgKiAgIHRyYW5zZm9ybWF0aW9uIHRocm91Z2ggQEZUX1NldF9UcmFuc2Zvcm0hCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRDX0ZhY2VfUmVxdWVzdGVyKSggRlRDX0ZhY2VJRCAgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIHJlcV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgIGFmYWNlICk7CisKKyAgLyogKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgQ0FDSEUgTUFOQUdFUiBPQkpFQ1QgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfTWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG9iamVjdCBjb3JyZXNwb25kcyB0byBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNhY2hlLXN1YnN5c3RlbS4gICAgKi8KKyAgLyogICAgSXQgaXMgdXNlZCB0byBjYWNoZSBvbmUgb3IgbW9yZSBARlRfRmFjZSBvYmplY3RzLCBhbG9uZyB3aXRoICAgICAgICovCisgIC8qICAgIGNvcnJlc3BvbmRpbmcgQEZUX1NpemUgb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1hbmFnZXIgaW50ZW50aW9uYWxseSBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZiBvcGVuZWQgICAgICAgICovCisgIC8qICAgIEBGVF9GYWNlIGFuZCBARlRfU2l6ZSBvYmplY3RzIHRvIGNvbnRyb2wgbWVtb3J5IHVzYWdlLiAgU2VlIHRoZSAgICAqLworICAvKiAgICBgbWF4X2ZhY2VzJyBhbmQgYG1heF9zaXplcycgcGFyYW1ldGVycyBvZiBARlRDX01hbmFnZXJfTmV3LiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtYW5hZ2VyIGlzIGFsc28gdXNlZCB0byBjYWNoZSBgbm9kZXMnIG9mIHZhcmlvdXMgdHlwZXMgd2hpbGUgICAqLworICAvKiAgICBsaW1pdGluZyB0aGVpciB0b3RhbCBtZW1vcnkgdXNhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFsbCBsaW1pdGF0aW9ucyBhcmUgZW5mb3JjZWQgYnkga2VlcGluZyBsaXN0cyBvZiBtYW5hZ2VkIG9iamVjdHMgICAqLworICAvKiAgICBpbiBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGFuZCBmbHVzaGluZyBvbGQgbm9kZXMgdG8gbWFrZSByb29tICAgKi8KKyAgLyogICAgZm9yIG5ldyBvbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVENfTWFuYWdlclJlY18qICBGVENfTWFuYWdlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19Ob2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYSBjYWNoZSBub2RlIG9iamVjdC4gIEVhY2ggY2FjaGUgbm9kZSBpcyAgICAgICAqLworICAvKiAgICByZWZlcmVuY2UtY291bnRlZC4gIEEgbm9kZSB3aXRoIGEgY291bnQgb2Z+MCBtaWdodCBiZSBmbHVzaGVkICAgICAgKi8KKyAgLyogICAgb3V0IG9mIGEgZnVsbCBjYWNoZSB3aGVuZXZlciBhIGxvb2t1cCByZXF1ZXN0IGlzIHBlcmZvcm1lZC4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB5b3UgbG9vayB1cCBub2RlcywgeW91IGhhdmUgdGhlIGFiaWxpdHkgdG8gYGFjcXVpcmUnIHRoZW0sICAgICAgKi8KKyAgLyogICAgaS5lLiwgdG8gaW5jcmVtZW50IHRoZWlyIHJlZmVyZW5jZSBjb3VudC4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSAgICovCisgIC8qICAgIG5vZGUgZnJvbSBiZWluZyBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgdW50aWwgeW91IGV4cGxpY2l0bHkgICAgICAqLworICAvKiAgICBgcmVsZWFzZScgaXQgKHNlZSBARlRDX05vZGVfVW5yZWYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBhbHNvIEBGVENfU0JpdENhY2hlX0xvb2t1cCBhbmQgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRDX05vZGVSZWNfKiAgRlRDX05vZGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfTWFuYWdlcl9OZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGUgYSBuZXcgY2FjaGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgOjogVGhlIHBhcmVudCBGcmVlVHlwZSBsaWJyYXJ5IGhhbmRsZSB0byB1c2UuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9mYWNlcyA6OiBNYXhpbXVtIG51bWJlciBvZiBvcGVuZWQgQEZUX0ZhY2Ugb2JqZWN0cyBtYW5hZ2VkIGJ5ICAqLworICAvKiAgICAgICAgICAgICAgICAgdGhpcyBjYWNoZSBpbnN0YW5jZS4gIFVzZX4wIGZvciBkZWZhdWx0cy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9zaXplcyA6OiBNYXhpbXVtIG51bWJlciBvZiBvcGVuZWQgQEZUX1NpemUgb2JqZWN0cyBtYW5hZ2VkIGJ5ICAqLworICAvKiAgICAgICAgICAgICAgICAgdGhpcyBjYWNoZSBpbnN0YW5jZS4gIFVzZX4wIGZvciBkZWZhdWx0cy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9ieXRlcyA6OiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIGNhY2hlZCBkYXRhIG5vZGVzLiAqLworICAvKiAgICAgICAgICAgICAgICAgVXNlfjAgZm9yIGRlZmF1bHRzLiAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgZG9lcyBub3QgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGFjY291bnQgZm9yIG1hbmFnZWQgQEZUX0ZhY2UgYW5kIEBGVF9TaXplIG9iamVjdHMuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZXF1ZXN0ZXIgOjogQW4gYXBwbGljYXRpb24tcHJvdmlkZWQgY2FsbGJhY2sgdXNlZCB0byB0cmFuc2xhdGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGZhY2UgSURzIGludG8gcmVhbCBARlRfRmFjZSBvYmplY3RzLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZXFfZGF0YSAgOjogQSBnZW5lcmljIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3RlciAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQgKHNlZSBARlRDX0ZhY2VfUmVxdWVzdGVyKS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYW1hbmFnZXIgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IG1hbmFnZXIgb2JqZWN0LiAgMH5pbiBjYXNlIG9mICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUQ19NYW5hZ2VyX05ldyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgbWF4X2ZhY2VzLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgbWF4X3NpemVzLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgICAgbWF4X2J5dGVzLAorICAgICAgICAgICAgICAgICAgIEZUQ19GYWNlX1JlcXVlc3RlciAgcmVxdWVzdGVyLAorICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgcmVxX2RhdGEsCisgICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgICAgICAgICphbWFuYWdlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX01hbmFnZXJfUmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRW1wdHkgYSBnaXZlbiBjYWNoZSBtYW5hZ2VyLiAgVGhpcyBzaW1wbHkgZ2V0cyByaWQgb2YgYWxsIHRoZSAgICAgICovCisgIC8qICAgIGN1cnJlbnRseSBjYWNoZWQgQEZUX0ZhY2UgYW5kIEBGVF9TaXplIG9iamVjdHMgd2l0aGluIHRoZSBtYW5hZ2VyLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hbmFnZXIgOjogQSBoYW5kbGUgdG8gdGhlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRDX01hbmFnZXJfUmVzZXQoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfTWFuYWdlcl9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZXN0cm95IGEgZ2l2ZW4gbWFuYWdlciBhZnRlciBlbXB0eWluZyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYW5hZ2VyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgY2FjaGUgbWFuYWdlciBvYmplY3QuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUQ19NYW5hZ2VyX0RvbmUoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfTWFuYWdlcl9Mb29rdXBGYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgQEZUX0ZhY2Ugb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBmYWNlIElEICAgKi8KKyAgLyogICAgdGhyb3VnaCBhIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWFuYWdlciA6OiBBIGhhbmRsZSB0byB0aGUgY2FjaGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2lkIDo6IFRoZSBJRCBvZiB0aGUgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmV0dXJuZWQgQEZUX0ZhY2Ugb2JqZWN0IGlzIGFsd2F5cyBvd25lZCBieSB0aGUgbWFuYWdlci4gIFlvdSAgKi8KKyAgLyogICAgc2hvdWxkIG5ldmVyIHRyeSB0byBkaXNjYXJkIGl0IHlvdXJzZWxmLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgQEZUX0ZhY2Ugb2JqZWN0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGN1cnJlbnQgc2l6ZSBvYmplY3QgKi8KKyAgLyogICAgKGkuZS4sIGZhY2UtPnNpemUgY2FuIGJlfjApLiAgSWYgeW91IG5lZWQgYSBzcGVjaWZpYyBgZm9udCBzaXplJywgICovCisgIC8qICAgIHVzZSBARlRDX01hbmFnZXJfTG9va3VwU2l6ZSBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTmV2ZXIgY2hhbmdlIHRoZSBmYWNlJ3MgdHJhbnNmb3JtYXRpb24gbWF0cml4IChpLmUuLCBuZXZlciBjYWxsICAgICovCisgIC8qICAgIHRoZSBARlRfU2V0X1RyYW5zZm9ybSBmdW5jdGlvbikgb24gYSByZXR1cm5lZCBmYWNlISAgSWYgeW91IG5lZWQgICAqLworICAvKiAgICB0byB0cmFuc2Zvcm0gZ2x5cGhzLCBkbyBpdCB5b3Vyc2VsZiBhZnRlciBnbHlwaCBsb2FkaW5nLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4geW91IHBlcmZvcm0gYSBsb29rdXAsIG91dC1vZi1tZW1vcnkgZXJyb3JzIGFyZSBkZXRlY3RlZCAgICAgICAqLworICAvKiAgICBfd2l0aGluXyB0aGUgbG9va3VwIGFuZCBmb3JjZSBpbmNyZW1lbnRhbCBmbHVzaGVzIG9mIHRoZSBjYWNoZSAgICAgKi8KKyAgLyogICAgdW50aWwgZW5vdWdoIG1lbW9yeSBpcyByZWxlYXNlZCBmb3IgdGhlIGxvb2t1cCB0byBzdWNjZWVkLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBhIGxvb2t1cCBmYWlscyB3aXRoIGBGVF9FcnJfT3V0X09mX01lbW9yeScgdGhlIGNhY2hlIGhhcyAgICAgICAgKi8KKyAgLyogICAgYWxyZWFkeSBiZWVuIGNvbXBsZXRlbHkgZmx1c2hlZCwgYW5kIHN0aWxsIG5vIG1lbW9yeSB3YXMgYXZhaWxhYmxlICovCisgIC8qICAgIGZvciB0aGUgb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUQ19NYW5hZ2VyX0xvb2t1cEZhY2UoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRmFjZUlEICAgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfU2NhbGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gY2hhcmFjdGVyIHNpemUgaW4gZWl0aGVyICAgICAgKi8KKyAgLyogICAgcGl4ZWxzIG9yIHBvaW50cyB0byB0aGUgY2FjaGUgbWFuYWdlci4gIFNlZSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVENfTWFuYWdlcl9Mb29rdXBTaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaWQgOjogVGhlIHNvdXJjZSBmYWNlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgd2lkdGggICA6OiBUaGUgY2hhcmFjdGVyIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgIDo6IFRoZSBjaGFyYWN0ZXIgaGVpZ2h0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBpeGVsICAgOjogQSBCb29sZWFuLiAgSWYgMSwgdGhlIGB3aWR0aCcgYW5kIGBoZWlnaHQnIGZpZWxkcyBhcmUgICAqLworICAvKiAgICAgICAgICAgICAgIGludGVycHJldGVkIGFzIGludGVnZXIgcGl4ZWwgY2hhcmFjdGVyIHNpemVzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZXkgYXJlIGV4cHJlc3NlZCBhcyAxLzY0dGggb2YgcG9pbnRzLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4X3JlcyAgIDo6IE9ubHkgdXNlZCB3aGVuIGBwaXhlbCcgaXMgdmFsdWV+MCB0byBpbmRpY2F0ZSB0aGUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gZHBpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5X3JlcyAgIDo6IE9ubHkgdXNlZCB3aGVuIGBwaXhlbCcgaXMgdmFsdWV+MCB0byBpbmRpY2F0ZSB0aGUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIGRwaS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyB0eXBlIGlzIG1haW5seSB1c2VkIHRvIHJldHJpZXZlIEBGVF9TaXplIG9iamVjdHMgdGhyb3VnaCB0aGUgICovCisgIC8qICAgIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19TY2FsZXJSZWNfCisgIHsKKyAgICBGVENfRmFjZUlEICBmYWNlX2lkOworICAgIEZUX1VJbnQgICAgIHdpZHRoOworICAgIEZUX1VJbnQgICAgIGhlaWdodDsKKyAgICBGVF9JbnQgICAgICBwaXhlbDsKKyAgICBGVF9VSW50ICAgICB4X3JlczsKKyAgICBGVF9VSW50ICAgICB5X3JlczsKKworICB9IEZUQ19TY2FsZXJSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfU2NhbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhbiBARlRDX1NjYWxlclJlYyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUQ19TY2FsZXJSZWNfKiAgRlRDX1NjYWxlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19NYW5hZ2VyX0xvb2t1cFNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIHRoZSBARlRfU2l6ZSBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byBhIGdpdmVuICAgICAgICAgICAqLworICAvKiAgICBARlRDX1NjYWxlclJlYyBwb2ludGVyIHRocm91Z2ggYSBjYWNoZSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYW5hZ2VyIDo6IEEgaGFuZGxlIHRvIHRoZSBjYWNoZSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNjYWxlciAgOjogQSBzY2FsZXIgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFzaXplICAgOjogQSBoYW5kbGUgdG8gdGhlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXR1cm5lZCBARlRfU2l6ZSBvYmplY3QgaXMgYWx3YXlzIG93bmVkIGJ5IHRoZSBtYW5hZ2VyLiAgWW91ICAqLworICAvKiAgICBzaG91bGQgbmV2ZXIgdHJ5IHRvIGRpc2NhcmQgaXQgYnkgeW91cnNlbGYuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBjYW4gYWNjZXNzIHRoZSBwYXJlbnQgQEZUX0ZhY2Ugb2JqZWN0IHNpbXBseSBhcyBgc2l6ZS0+ZmFjZScgICAqLworICAvKiAgICBpZiB5b3UgbmVlZCBpdC4gIE5vdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBhbHNvIG93bmVkIGJ5IHRoZSAgICAgICAgKi8KKyAgLyogICAgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiB5b3UgcGVyZm9ybSBhIGxvb2t1cCwgb3V0LW9mLW1lbW9yeSBlcnJvcnMgYXJlIGRldGVjdGVkICAgICAgICovCisgIC8qICAgIF93aXRoaW5fIHRoZSBsb29rdXAgYW5kIGZvcmNlIGluY3JlbWVudGFsIGZsdXNoZXMgb2YgdGhlIGNhY2hlICAgICAqLworICAvKiAgICB1bnRpbCBlbm91Z2ggbWVtb3J5IGlzIHJlbGVhc2VkIGZvciB0aGUgbG9va3VwIHRvIHN1Y2NlZWQuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGEgbG9va3VwIGZhaWxzIHdpdGggYEZUX0Vycl9PdXRfT2ZfTWVtb3J5JyB0aGUgY2FjaGUgaGFzICAgICAgICAqLworICAvKiAgICBhbHJlYWR5IGJlZW4gY29tcGxldGVseSBmbHVzaGVkLCBhbmQgc3RpbGwgbm8gbWVtb3J5IGlzIGF2YWlsYWJsZSAgKi8KKyAgLyogICAgZm9yIHRoZSBvcGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRDX01hbmFnZXJfTG9va3VwU2l6ZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19TY2FsZXIgICBzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICphc2l6ZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX05vZGVfVW5yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVjcmVtZW50IGEgY2FjaGUgbm9kZSdzIGludGVybmFsIHJlZmVyZW5jZSBjb3VudC4gIFdoZW4gdGhlIGNvdW50ICovCisgIC8qICAgIHJlYWNoZXMgMCwgaXQgaXMgbm90IGRlc3Ryb3llZCBidXQgYmVjb21lcyBlbGlnaWJsZSBmb3Igc3Vic2VxdWVudCAqLworICAvKiAgICBjYWNoZSBmbHVzaGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBub2RlICAgIDo6IFRoZSBjYWNoZSBub2RlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hbmFnZXIgOjogVGhlIGNhY2hlIG1hbmFnZXIgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRDX05vZGVfVW5yZWYoIEZUQ19Ob2RlICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgIG1hbmFnZXIgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3BlY2lhbCBmdW5jdGlvbiB1c2VkIHRvIGluZGljYXRlIHRvIHRoZSBjYWNoZSBtYW5hZ2VyIHRoYXQKKyAgICogICBhIGdpdmVuIEBGVENfRmFjZUlEIGlzIG5vIGxvbmdlciB2YWxpZCwgZWl0aGVyIGJlY2F1c2UgaXRzCisgICAqICAgY29udGVudCBjaGFuZ2VkLCBvciBiZWNhdXNlIGl0IHdhcyBkZWFsbG9jYXRlZCBvciB1bmluc3RhbGxlZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1hbmFnZXIgOjoKKyAgICogICAgIFRoZSBjYWNoZSBtYW5hZ2VyIGhhbmRsZS4KKyAgICoKKyAgICogICBmYWNlX2lkIDo6CisgICAqICAgICBUaGUgQEZUQ19GYWNlSUQgdG8gYmUgcmVtb3ZlZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCBub2RlcyBmcm9tIHRoZSBjYWNoZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKyAgICogICBgZmFjZV9pZCcsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBub2RlcyB3aXRoIGEgbm9uLW51bGwgcmVmZXJlbmNlCisgICAqICAgY291bnQuCisgICAqCisgICAqICAgU3VjaCBub2RlcyBhcmUgaG93ZXZlciBtb2RpZmllZCBpbnRlcm5hbGx5IHNvIGFzIHRvIG5ldmVyIGFwcGVhcgorICAgKiAgIGluIGxhdGVyIGxvb2t1cHMgd2l0aCB0aGUgc2FtZSBgZmFjZV9pZCcgdmFsdWUsIGFuZCB0byBiZSBpbW1lZGlhdGVseQorICAgKiAgIGRlc3Ryb3llZCB3aGVuIHJlbGVhc2VkIGJ5IGFsbCB0aGVpciB1c2Vycy4KKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgIGZhY2VfaWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRDX0NNYXBDYWNoZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQW4gb3BhcXVlIGhhbmRsZSB1c2VkIHRvIG1vZGVsIGEgY2hhcm1hcCBjYWNoZS4gIFRoaXMgY2FjaGUgaXMgdG8KKyAgICogICBob2xkIGNoYXJhY3RlciBjb2RlcyAtPiBnbHlwaCBpbmRpY2VzIG1hcHBpbmdzLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRDX0NNYXBDYWNoZVJlY18qICBGVENfQ01hcENhY2hlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUQ19DTWFwQ2FjaGVfTmV3CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgY2hhcm1hcCBjYWNoZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1hbmFnZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBjYWNoZSBtYW5hZ2VyLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFjYWNoZSA6OgorICAgKiAgICAgQSBuZXcgY2FjaGUgaGFuZGxlLiAgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIExpa2UgYWxsIG90aGVyIGNhY2hlcywgdGhpcyBvbmUgd2lsbCBiZSBkZXN0cm95ZWQgd2l0aCB0aGUgY2FjaGUKKyAgICogICBtYW5hZ2VyLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUQ19DTWFwQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DTWFwQ2FjaGUgICphY2FjaGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUQ19DTWFwQ2FjaGVfTG9va3VwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUcmFuc2xhdGUgYSBjaGFyYWN0ZXIgY29kZSBpbnRvIGEgZ2x5cGggaW5kZXgsIHVzaW5nIHRoZSBjaGFybWFwCisgICAqICAgY2FjaGUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBjYWNoZSA6OgorICAgKiAgICAgQSBjaGFybWFwIGNhY2hlIGhhbmRsZS4KKyAgICoKKyAgICogICBmYWNlX2lkIDo6CisgICAqICAgICBUaGUgc291cmNlIGZhY2UgSUQuCisgICAqCisgICAqICAgY21hcF9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBjaGFybWFwIGluIHRoZSBzb3VyY2UgZmFjZS4gIEFueSBuZWdhdGl2ZSB2YWx1ZQorICAgKiAgICAgbWVhbnMgdG8gdXNlIHRoZSBjYWNoZSBARlRfRmFjZSdzIGRlZmF1bHQgY2hhcm1hcC4KKyAgICoKKyAgICogICBjaGFyX2NvZGUgOjoKKyAgICogICAgIFRoZSBjaGFyYWN0ZXIgY29kZSAoaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcm1hcCkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgIEdseXBoIGluZGV4LiAgMH5tZWFucyBgbm8gZ2x5cGgnLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VSW50ICkKKyAgRlRDX0NNYXBDYWNoZV9Mb29rdXAoIEZUQ19DTWFwQ2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgICAgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGNtYXBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgICBjaGFyX2NvZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBJTUFHRSBDQUNIRSBPQkpFQ1QgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVENfSW1hZ2VUeXBlUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIHRoZSB0eXBlIG9mIGltYWdlcyBpbiBhIGdseXBoIGNhY2hlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGZhY2VfaWQgOjoKKyAgICogICAgIFRoZSBmYWNlIElELgorICAgKgorICAgKiAgIHdpZHRoIDo6CisgICAqICAgICBUaGUgd2lkdGggaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGhlaWdodCBpbiBwaXhlbHMuCisgICAqCisgICAqICAgZmxhZ3MgOjoKKyAgICogICAgIFRoZSBsb2FkIGZsYWdzLCBhcyBpbiBARlRfTG9hZF9HbHlwaC4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVENfSW1hZ2VUeXBlUmVjXworICB7CisgICAgRlRDX0ZhY2VJRCAgZmFjZV9pZDsKKyAgICBGVF9VSW50ICAgICB3aWR0aDsKKyAgICBGVF9VSW50ICAgICBoZWlnaHQ7CisgICAgRlRfSW50MzIgICAgZmxhZ3M7CisKKyAgfSBGVENfSW1hZ2VUeXBlUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRDX0ltYWdlVHlwZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYW4gQEZUQ19JbWFnZVR5cGVSZWMgc3RydWN0dXJlLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRDX0ltYWdlVHlwZVJlY18qICBGVENfSW1hZ2VUeXBlOworCisKKyAgLyogKi8KKworCisjZGVmaW5lIEZUQ19JTUFHRV9UWVBFX0NPTVBBUkUoIGQxLCBkMiApICAgICAgXAorICAgICAgICAgICggKGQxKS0+ZmFjZV9pZCA9PSAoZDIpLT5mYWNlX2lkICYmIFwKKyAgICAgICAgICAgIChkMSktPndpZHRoICAgPT0gKGQyKS0+d2lkdGggICAmJiBcCisgICAgICAgICAgICAoZDEpLT5mbGFncyAgID09IChkMiktPmZsYWdzICAgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX0ltYWdlQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYSBnbHlwaCBpbWFnZSBjYWNoZSBvYmplY3QuICBUaGV5IGFyZSBkZXNpZ25lZCB0byAgICAgICovCisgIC8qICAgIGhvbGQgbWFueSBkaXN0aW5jdCBnbHlwaCBpbWFnZXMgd2hpbGUgbm90IGV4Y2VlZGluZyBhIGNlcnRhaW4gICAgICAqLworICAvKiAgICBtZW1vcnkgdGhyZXNob2xkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUQ19JbWFnZUNhY2hlUmVjXyogIEZUQ19JbWFnZUNhY2hlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX0ltYWdlQ2FjaGVfTmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ3JlYXRlIGEgbmV3IGdseXBoIGltYWdlIGNhY2hlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWFuYWdlciA6OiBUaGUgcGFyZW50IG1hbmFnZXIgZm9yIHRoZSBpbWFnZSBjYWNoZS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWNhY2hlICA6OiBBIGhhbmRsZSB0byB0aGUgbmV3IGdseXBoIGltYWdlIGNhY2hlIG9iamVjdC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRDX0ltYWdlQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlQ2FjaGUgICphY2FjaGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19JbWFnZUNhY2hlX0xvb2t1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgZnJvbSBhIGdseXBoIGltYWdlIGNhY2hlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhY2hlICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIGNhY2hlLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHlwZSAgIDo6IEEgcG9pbnRlciB0byBhIGdseXBoIGltYWdlIHR5cGUgZGVzY3JpcHRvci4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnaW5kZXggOjogVGhlIGdseXBoIGluZGV4IHRvIHJldHJpZXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZ2x5cGggOjogVGhlIGNvcnJlc3BvbmRpbmcgQEZUX0dseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgIGZhaWx1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbm9kZSAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUgKi8KKyAgLyogICAgICAgICAgICAgIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQgKHNlZSBub3RlICAgICovCisgIC8qICAgICAgICAgICAgICBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXR1cm5lZCBnbHlwaCBpcyBvd25lZCBhbmQgbWFuYWdlZCBieSB0aGUgZ2x5cGggaW1hZ2UgY2FjaGUuICAqLworICAvKiAgICBOZXZlciB0cnkgdG8gdHJhbnNmb3JtIG9yIGRpc2NhcmQgaXQgbWFudWFsbHkhICBZb3UgY2FuIGhvd2V2ZXIgICAgKi8KKyAgLyogICAgY3JlYXRlIGEgY29weSB3aXRoIEBGVF9HbHlwaF9Db3B5IGFuZCBtb2RpZnkgdGhlIG5ldyBvbmUuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSAgICAgKi8KKyAgLyogICAgbm9kZSBjb250YWluaW5nIHRoZSBnbHlwaCBpbWFnZSwgYWZ0ZXIgaW5jcmVhc2luZyBpdHMgcmVmZXJlbmNlICAgICovCisgIC8qICAgIGNvdW50LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG5vZGUgKGFzIHdlbGwgYXMgdGhlIEBGVF9HbHlwaCkgd2lsbCAqLworICAvKiAgICBhbHdheXMgYmUga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvICAgICAgKi8KKyAgLyogICAgYHJlbGVhc2UnIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgYW5vZGUnIGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyAgKi8KKyAgLyogICAgdGhhdCB0aGUgQEZUX0dseXBoIGNvdWxkIGJlIGZsdXNoZWQgb3V0IG9mIHRoZSBjYWNoZSBvbiB0aGUgbmV4dCAgICovCisgIC8qICAgIGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gIERvbid0IGFzc3VtZSB0aGF0IGl0ICAqLworICAvKiAgICBpcyBwZXJzaXN0ZW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVENfSW1hZ2VDYWNoZV9Mb29rdXAoIEZUQ19JbWFnZUNhY2hlICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICphZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX05vZGUgICAgICAgKmFub2RlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHZhcmlhbnQgb2YgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cCB0aGF0IHVzZXMgYW4gQEZUQ19TY2FsZXJSZWMgICAgKi8KKyAgLyogICAgdG8gc3BlY2lmeSB0aGUgZmFjZSBJRCBhbmQgaXRzIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FjaGUgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIGNhY2hlLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzY2FsZXIgICAgIDo6IEEgcG9pbnRlciB0byBhIHNjYWxlciBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgOjogVGhlIGNvcnJlc3BvbmRpbmcgbG9hZCBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2luZGV4ICAgICA6OiBUaGUgZ2x5cGggaW5kZXggdG8gcmV0cmlldmUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWdseXBoICAgICA6OiBUaGUgY29ycmVzcG9uZGluZyBARlRfR2x5cGggb2JqZWN0LiAgMH5pbiBjYXNlIG9mICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFpbHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYW5vZGUgICAgICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvZiB0aGUgY29ycmVzcG9uZGluZyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgY2FjaGUgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmV0dXJuZWQgZ2x5cGggaXMgb3duZWQgYW5kIG1hbmFnZWQgYnkgdGhlIGdseXBoIGltYWdlIGNhY2hlLiAgKi8KKyAgLyogICAgTmV2ZXIgdHJ5IHRvIHRyYW5zZm9ybSBvciBkaXNjYXJkIGl0IG1hbnVhbGx5ISAgWW91IGNhbiBob3dldmVyICAgICovCisgIC8qICAgIGNyZWF0ZSBhIGNvcHkgd2l0aCBARlRfR2x5cGhfQ29weSBhbmQgbW9kaWZ5IHRoZSBuZXcgb25lLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgYGFub2RlJyBpcyBfbm90XyBOVUxMLCBpdCByZWNlaXZlcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2FjaGUgICAgICovCisgIC8qICAgIG5vZGUgY29udGFpbmluZyB0aGUgZ2x5cGggaW1hZ2UsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSAgICAqLworICAvKiAgICBjb3VudC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBARlRfR2x5cGgpIHdpbGwgKi8KKyAgLyogICAgYWx3YXlzIGJlIGtlcHQgaW4gdGhlIGNhY2hlIHVudGlsIHlvdSBjYWxsIEBGVENfTm9kZV9VbnJlZiB0byAgICAgICovCisgIC8qICAgIGByZWxlYXNlJyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgYGFub2RlJyBpcyBOVUxMLCB0aGUgY2FjaGUgbm9kZSBpcyBsZWZ0IHVuY2hhbmdlZCwgd2hpY2ggbWVhbnMgICovCisgIC8qICAgIHRoYXQgdGhlIEBGVF9HbHlwaCBjb3VsZCBiZSBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgb24gdGhlIG5leHQgICAqLworICAvKiAgICBjYWxsIHRvIG9uZSBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIEFQSXMuICBEb24ndCBhc3N1bWUgdGhhdCBpdCAgKi8KKyAgLyogICAgaXMgcGVyc2lzdGVudCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDYWxscyB0byBARlRfU2V0X0NoYXJfU2l6ZSBhbmQgZnJpZW5kcyBoYXZlIG5vIGVmZmVjdCBvbiBjYWNoZWQgICAgKi8KKyAgLyogICAgZ2x5cGhzOyB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIEZyZWVUeXBlIGNhY2hlIEFQSSBpbnN0ZWFkLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyKCBGVENfSW1hZ2VDYWNoZSAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgICAgIHNjYWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICphZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX05vZGUgICAgICAgKmFub2RlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfU0JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLiAgU2VlIHRoZSBARlRDX1NCaXRSZWMgICAgICAgKi8KKyAgLyogICAgc3RydWN0dXJlIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVENfU0JpdFJlY18qICBGVENfU0JpdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19TQml0UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBjb21wYWN0IHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgc21hbGwgZ2x5cGggYml0bWFwLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICAgICA6OiBUaGUgYml0bWFwIHdpZHRoIGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGVpZ2h0ICAgIDo6IFRoZSBiaXRtYXAgaGVpZ2h0IGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsZWZ0ICAgICAgOjogVGhlIGhvcml6b250YWwgZGlzdGFuY2UgZnJvbSB0aGUgcGVuIHBvc2l0aW9uIHRvIHRoZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGxlZnQgYml0bWFwIGJvcmRlciAoYS5rLmEuIGBsZWZ0IHNpZGUgYmVhcmluZycsIG9yICAgICovCisgIC8qICAgICAgICAgICAgICAgICBgbHNiJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdG9wICAgICAgIDo6IFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBmcm9tIHRoZSBwZW4gcG9zaXRpb24gKG9uIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICBiYXNlbGluZSkgdG8gdGhlIHVwcGVyIGJpdG1hcCBib3JkZXIgKGEuay5hLiBgdG9wICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgc2lkZSBiZWFyaW5nJykuICBUaGUgZGlzdGFuY2UgaXMgcG9zaXRpdmUgZm9yIHVwd2FyZHMgKi8KKyAgLyogICAgICAgICAgICAgICAgIHl+Y29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb3JtYXQgICAgOjogVGhlIGZvcm1hdCBvZiB0aGUgZ2x5cGggYml0bWFwIChtb25vY2hyb21lIG9yIGdyYXkpLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9ncmF5cyA6OiBNYXhpbXVtIGdyYXkgbGV2ZWwgdmFsdWUgKGluIHRoZSByYW5nZSAxIHRvfjI1NSkuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGl0Y2ggICAgIDo6IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGJpdG1hcCBsaW5lLiAgTWF5IGJlIHBvc2l0aXZlICovCisgIC8qICAgICAgICAgICAgICAgICBvciBuZWdhdGl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeGFkdmFuY2UgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2Ugd2lkdGggaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5YWR2YW5jZSAgOjogVGhlIHZlcnRpY2FsIGFkdmFuY2UgaGVpZ2h0IGluIHBpeGVscy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1ZmZlciAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19TQml0UmVjXworICB7CisgICAgRlRfQnl0ZSAgIHdpZHRoOworICAgIEZUX0J5dGUgICBoZWlnaHQ7CisgICAgRlRfQ2hhciAgIGxlZnQ7CisgICAgRlRfQ2hhciAgIHRvcDsKKworICAgIEZUX0J5dGUgICBmb3JtYXQ7CisgICAgRlRfQnl0ZSAgIG1heF9ncmF5czsKKyAgICBGVF9TaG9ydCAgcGl0Y2g7CisgICAgRlRfQ2hhciAgIHhhZHZhbmNlOworICAgIEZUX0NoYXIgICB5YWR2YW5jZTsKKworICAgIEZUX0J5dGUqICBidWZmZXI7CisKKyAgfSBGVENfU0JpdFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19TQml0Q2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGNhY2hlLiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FjaGUgb2JqZWN0cyAqLworICAvKiAgICB1c2VkIHRvIHN0b3JlIHNtYWxsIGdseXBoIGJpdG1hcHMgKGFuZCBhbnRpLWFsaWFzZWQgcGl4bWFwcykgaW4gYSAgKi8KKyAgLyogICAgbXVjaCBtb3JlIGVmZmljaWVudCB3YXkgdGhhbiB0aGUgdHJhZGl0aW9uYWwgZ2x5cGggaW1hZ2UgY2FjaGUgICAgICovCisgIC8qICAgIGltcGxlbWVudGVkIGJ5IEBGVENfSW1hZ2VDYWNoZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRDX1NCaXRDYWNoZVJlY18qICBGVENfU0JpdENhY2hlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX1NCaXRDYWNoZV9OZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ3JlYXRlIGEgbmV3IGNhY2hlIHRvIHN0b3JlIHNtYWxsIGdseXBoIGJpdG1hcHMuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWFuYWdlciA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWNhY2hlICA6OiBBIGhhbmRsZSB0byB0aGUgbmV3IHNiaXQgY2FjaGUuICBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRDX1NCaXRDYWNoZV9OZXcoIEZUQ19NYW5hZ2VyICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgRlRDX1NCaXRDYWNoZSAgKmFjYWNoZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRDX1NCaXRDYWNoZV9Mb29rdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9vayB1cCBhIGdpdmVuIHNtYWxsIGdseXBoIGJpdG1hcCBpbiBhIGdpdmVuIHNiaXQgY2FjaGUgYW5kICAgICAgICovCisgIC8qICAgIGBsb2NrJyBpdCB0byBwcmV2ZW50IGl0cyBmbHVzaGluZyBmcm9tIHRoZSBjYWNoZSB1bnRpbCBuZWVkZWQuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhY2hlICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHlwZSAgIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggaW1hZ2UgdHlwZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnaW5kZXggOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzYml0ICAgOjogQSBoYW5kbGUgdG8gYSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFub2RlICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSAqLworICAvKiAgICAgICAgICAgICAgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgICAgKi8KKyAgLyogICAgICAgICAgICAgIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlICAgICovCisgIC8qICAgIGNhY2hlIGFuZCBzaG91bGQgbmV2ZXIgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhleSBtaWdodCAgICAqLworICAvKiAgICBhcyB3ZWxsIGRpc2FwcGVhciBmcm9tIG1lbW9yeSBvbiB0aGUgbmV4dCBjYWNoZSBsb29rdXAsIHNvIGRvbid0ICAgKi8KKyAgLyogICAgdHJlYXQgdGhlbSBhcyBwZXJzaXN0ZW50IGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGVzY3JpcHRvcidzIGBidWZmZXInIGZpZWxkIGlzIHNldCB0b34wIHRvIGluZGljYXRlIGEgbWlzc2luZyAgKi8KKyAgLyogICAgZ2x5cGggYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSAgICAgKi8KKyAgLyogICAgbm9kZSBjb250YWluaW5nIHRoZSBiaXRtYXAsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gICovCisgIC8qICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBpbWFnZSkgd2lsbCBhbHdheXMgYmUgICAqLworICAvKiAgICBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCBARlRDX05vZGVfVW5yZWYgdG8gYHJlbGVhc2UnIGl0LiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGBhbm9kZScgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zICAqLworICAvKiAgICB0aGF0IHRoZSBiaXRtYXAgY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0ICAgICAgKi8KKyAgLyogICAgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiAgRG9uJ3QgYXNzdW1lIHRoYXQgaXQgICovCisgIC8qICAgIGlzIHBlcnNpc3RlbnQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUQ19TQml0Q2FjaGVfTG9va3VwKCBGVENfU0JpdENhY2hlICAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlVHlwZSAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVENfU0JpdCAgICAgICAgKnNiaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICAgICAgKmFub2RlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHZhcmlhbnQgb2YgQEZUQ19TQml0Q2FjaGVfTG9va3VwIHRoYXQgdXNlcyBhbiBARlRDX1NjYWxlclJlYyAgICAgKi8KKyAgLyogICAgdG8gc3BlY2lmeSB0aGUgZmFjZSBJRCBhbmQgaXRzIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FjaGUgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzY2FsZXIgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgc2NhbGVyIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgOjogVGhlIGNvcnJlc3BvbmRpbmcgbG9hZCBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2luZGV4ICAgICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2JpdCAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgKHNlZSBub3RlIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvciBhbmQgaXRzIGJpdCBidWZmZXIgYXJlIG93bmVkIGJ5IHRoZSAgICAqLworICAvKiAgICBjYWNoZSBhbmQgc2hvdWxkIG5ldmVyIGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFRoZXkgbWlnaHQgICAgKi8KKyAgLyogICAgYXMgd2VsbCBkaXNhcHBlYXIgZnJvbSBtZW1vcnkgb24gdGhlIG5leHQgY2FjaGUgbG9va3VwLCBzbyBkb24ndCAgICovCisgIC8qICAgIHRyZWF0IHRoZW0gYXMgcGVyc2lzdGVudCBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGRlc2NyaXB0b3IncyBgYnVmZmVyJyBmaWVsZCBpcyBzZXQgdG9+MCB0byBpbmRpY2F0ZSBhIG1pc3NpbmcgICovCisgIC8qICAgIGdseXBoIGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgYGFub2RlJyBpcyBfbm90XyBOVUxMLCBpdCByZWNlaXZlcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2FjaGUgICAgICovCisgIC8qICAgIG5vZGUgY29udGFpbmluZyB0aGUgYml0bWFwLCBhZnRlciBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgY291bnQuICAqLworICAvKiAgICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgaW1hZ2UpIHdpbGwgYWx3YXlzIGJlICAgKi8KKyAgLyogICAga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvIGByZWxlYXNlJyBpdC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgYW5vZGUnIGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyAgKi8KKyAgLyogICAgdGhhdCB0aGUgYml0bWFwIGNvdWxkIGJlIGZsdXNoZWQgb3V0IG9mIHRoZSBjYWNoZSBvbiB0aGUgbmV4dCAgICAgICovCisgIC8qICAgIGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gIERvbid0IGFzc3VtZSB0aGF0IGl0ICAqLworICAvKiAgICBpcyBwZXJzaXN0ZW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlciggRlRDX1NCaXRDYWNoZSAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU2NhbGVyICAgICBzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBsb2FkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NCaXQgICAgICAqc2JpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgICAgKmFub2RlICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUQ0FDSEVfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGNmZmRydi5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjZmZkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhlNDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjZmZkcnYuaApAQCAtMCwwICsxLDI2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjZmZkcnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29udHJvbGxpbmcgdGhlIENGRiBkcml2ZXIgKHNwZWNpZmljYXRpb24gb25seSkuICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRDRkZEUlZfSF9fCisjZGVmaW5lIF9fRlRDRkZEUlZfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBjZmZfZHJpdmVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgQ0ZGIGRyaXZlcgorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgdGhlIENGRiBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgV2hpbGUgRnJlZVR5cGUncyBDRkYgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkgaXRzZWxmLAorICAgKiAgIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kCisgICAqICAgQEZUX1Byb3BlcnR5X0dldC4gIFRoZSBsaXN0IGJlbG93IGdpdmVzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcworICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCisgICAqCisgICAqICAgVGhlIENGRiBkcml2ZXIncyBtb2R1bGUgbmFtZSBpcyBgY2ZmJy4KKyAgICoKKyAgICogICAqSGludGluZyogKmFuZCogKmFudGlhbGlhc2luZyogKnByaW5jaXBsZXMqICpvZiogKnRoZSogKm5ldyogKmVuZ2luZSoKKyAgICoKKyAgICogICBUaGUgcmFzdGVyaXplciBpcyBwb3NpdGlvbmluZyBob3Jpem9udGFsIGZlYXR1cmVzIChlLmcuLCBhc2NlbmRlcgorICAgKiAgIGhlaWdodCAmIHgtaGVpZ2h0LCBvciBjcm9zc2JhcnMpIG9uIHRoZSBwaXhlbCBncmlkIGFuZCBtaW5pbWl6aW5nIHRoZQorICAgKiAgIGFtb3VudCBvZiBhbnRpYWxpYXNpbmcgYXBwbGllZCB0byB0aGVtLCB3aGlsZSBwbGFjaW5nIHZlcnRpY2FsCisgICAqICAgZmVhdHVyZXMgKHZlcnRpY2FsIHN0ZW1zKSBvbiB0aGUgcGl4ZWwgZ3JpZCB3aXRob3V0IGhpbnRpbmcsIHRodXMKKyAgICogICByZXByZXNlbnRpbmcgdGhlIHN0ZW0gcG9zaXRpb24gYW5kIHdlaWdodCBhY2N1cmF0ZWx5LiAgU29tZXRpbWVzIHRoZQorICAgKiAgIHZlcnRpY2FsIHN0ZW1zIG1heSBiZSBvbmx5IHBhcnRpYWxseSBibGFjay4gIEluIHRoaXMgY29udGV4dCwKKyAgICogICBgYW50aWFsaWFzaW5nJyBtZWFucyB0aGF0IHN0ZW1zIGFyZSBub3QgcG9zaXRpb25lZCBleGFjdGx5IG9uIHBpeGVsCisgICAqICAgYm9yZGVycywgY2F1c2luZyBhIGZ1enp5IGFwcGVhcmFuY2UuCisgICAqCisgICAqICAgVGhlcmUgYXJlIHR3byBwcmluY2lwbGVzIGJlaGluZCB0aGlzIGFwcHJvYWNoLgorICAgKgorICAgKiAgIDEpIE5vIGhpbnRpbmcgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uOiBVbmxpa2UgYHN1cGVyaGludGVkJworICAgKiAgIFRydWVUeXBlLCB3aGljaCBjaGFuZ2VzIGdseXBoIHdpZHRocyB0byBhY2NvbW1vZGF0ZSByZWd1bGFyCisgICAqICAgaW50ZXItZ2x5cGggc3BhY2luZywgQWRvYmUncyBhcHByb2FjaCBpcyBgZmFpdGhmdWwgdG8gdGhlIGRlc2lnbicgaW4KKyAgICogICByZXByZXNlbnRpbmcgYm90aCB0aGUgZ2x5cGggd2lkdGggYW5kIHRoZSBpbnRlci1nbHlwaCBzcGFjaW5nCisgICAqICAgZGVzaWduZWQgZm9yIHRoZSBmb250LiAgVGhpcyBtYWtlcyB0aGUgc2NyZWVuIGRpc3BsYXkgYXMgY2xvc2UgYXMgaXQKKyAgICogICBjYW4gYmUgdG8gdGhlIHJlc3VsdCBvbmUgd291bGQgZ2V0IHdpdGggaW5maW5pdGUgcmVzb2x1dGlvbiwgd2hpbGUKKyAgICogICBwcmVzZXJ2aW5nIHdoYXQgaXMgY29uc2lkZXJlZCB0aGUga2V5IGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIGdseXBoLgorICAgKiAgIE5vdGUgdGhhdCB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdW5oaW50ZWQgYW5kIGdyaWQtZml0dGVkIHBvc2l0aW9ucyBhdAorICAgKiAgIHNtYWxsIHNpemVzIGFyZSBjb21wYXJhYmxlIHRvIGtlcm5pbmcgdmFsdWVzIGFuZCB0aHVzIHdvdWxkIGJlCisgICAqICAgbm90aWNlYWJsZSAoYW5kIGRpc3RyYWN0aW5nKSB3aGlsZSByZWFkaW5nIGlmIGhpbnRpbmcgd2VyZSBhcHBsaWVkLgorICAgKgorICAgKiAgIE9uZSBvZiB0aGUgcmVhc29ucyB0byBub3QgaGludCBob3Jpem9udGFsbHkgaXMgYW50aWFsaWFzaW5nIGZvciBMQ0QKKyAgICogICBzY3JlZW5zOiBUaGUgcGl4ZWwgZ2VvbWV0cnkgb2YgbW9kZXJuIGRpc3BsYXlzIHN1cHBsaWVzIHRocmVlCisgICAqICAgdmVydGljYWwgc3ViLXBpeGVscyBhcyB0aGUgZXllIG1vdmVzIGhvcml6b250YWxseSBhY3Jvc3MgZWFjaCB2aXNpYmxlCisgICAqICAgcGl4ZWwuICBPbiBkZXZpY2VzIHdoZXJlIHdlIGNhbiBiZSBjZXJ0YWluIHRoaXMgY2hhcmFjdGVyaXN0aWMgaXMKKyAgICogICBwcmVzZW50IGEgcmFzdGVyaXplciBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN1Yi1waXhlbHMgdG8gYWRkCisgICAqICAgaW5jcmVtZW50cyBvZiB3ZWlnaHQuICBJbiBXZXN0ZXJuIHdyaXRpbmcgc3lzdGVtcyB0aGlzIHR1cm5zIG91dCB0bworICAgKiAgIGJlIHRoZSBtb3JlIGNyaXRpY2FsIGRpcmVjdGlvbiBhbnl3YXk7IHRoZSB3ZWlnaHRzIGFuZCBzcGFjaW5nIG9mCisgICAqICAgdmVydGljYWwgc3RlbXMgKHNlZSBhYm92ZSkgYXJlIGNlbnRyYWwgdG8gQXJtZW5pYW4sIEN5cmlsbGljLCBHcmVlaywKKyAgICogICBhbmQgTGF0aW4gdHlwZSBkZXNpZ25zLiAgRXZlbiB3aGVuIHRoZSByYXN0ZXJpemVyIHVzZXMgZ3JleXNjYWxlCisgICAqICAgYW50aWFsaWFzaW5nIGluc3RlYWQgb2YgY29sb3IgKGEgbmVjZXNzYXJ5IGNvbXByb21pc2Ugd2hlbiBvbmUKKyAgICogICBkb2Vzbid0IGtub3cgdGhlIHNjcmVlbiBjaGFyYWN0ZXJpc3RpY3MpLCB0aGUgdW5oaW50ZWQgdmVydGljYWwKKyAgICogICBmZWF0dXJlcyBwcmVzZXJ2ZSB0aGUgZGVzaWduJ3Mgd2VpZ2h0IGFuZCBzcGFjaW5nIG11Y2ggYmV0dGVyIHRoYW4KKyAgICogICBhbGlhc2VkIHR5cGUgd291bGQuCisgICAqCisgICAqICAgMikgQWxpZ21lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKKyAgICogICB5fmF4aXMgYXJlIGxlc3MgY3JpdGljYWw7IHdoYXQgaXMgbXVjaCBtb3JlIGltcG9ydGFudCBpcyB0aGUgdmlzdWFsCisgICAqICAgYWxpZ25tZW50IG9mIHJlbGF0ZWQgZmVhdHVyZXMgKGxpa2UgY2FwLWhlaWdodCBhbmQgeC1oZWlnaHQpLiAgVGhlCisgICAqICAgc2Vuc2Ugb2YgYWxpZ25tZW50IGZvciB0aGVzZSBpcyBlbmhhbmNlZCBieSB0aGUgc2hhcnBuZXNzIG9mIGdyaWQtZml0CisgICAqICAgZWRnZXMsIHdoaWxlIHRoZSBjcnVkZXIgdmVydGljYWwgcmVzb2x1dGlvbiAoZnVsbCBwaXhlbHMgaW5zdGVhZCBvZgorICAgKiAgIDEvMyBwaXhlbHMpIGlzIGxlc3Mgb2YgYSBwcm9ibGVtLgorICAgKgorICAgKiAgIE9uIHRoZSB0ZWNobmljYWwgc2lkZSwgaG9yaXpvbnRhbCBhbGlnbm1lbnQgem9uZXMgZm9yIGFzY2VuZGVyLAorICAgKiAgIHgtaGVpZ2h0LCBhbmQgb3RoZXIgaW1wb3J0YW50IGhlaWdodCB2YWx1ZXMgKHRyYWRpdGlvbmFsbHkgY2FsbGVkCisgICAqICAgYGJsdWUgem9uZXMnKSBhcyBkZWZpbmVkIGluIHRoZSBmb250IGFyZSBwb3NpdGlvbmVkIGluZGVwZW5kZW50bHksCisgICAqICAgZWFjaCBiZWluZyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBpeGVsIGVkZ2UsIHRha2luZyBjYXJlIG9mCisgICAqICAgb3ZlcnNob290IHN1cHByZXNzaW9uIGF0IHNtYWxsIHNpemVzLCBzdGVtIGRhcmtlbmluZywgYW5kIHNjYWxpbmcuCisgICAqCisgICAqICAgSHN0ZW1zICh0aGlzIGlzLCBoaW50IHZhbHVlcyBkZWZpbmVkIGluIHRoZSBmb250IHRvIGhlbHAgYWxpZ24KKyAgICogICBob3Jpem9udGFsIGZlYXR1cmVzKSB0aGF0IGZhbGwgd2l0aGluIGEgYmx1ZSB6b25lIGFyZSBzYWlkIHRvIGJlCisgICAqICAgYGNhcHR1cmVkJyBhbmQgYXJlIGFsaWduZWQgdG8gdGhhdCB6b25lLiAgVW5jYXB0dXJlZCBzdGVtcyBhcmUgbW92ZWQKKyAgICogICBpbiBvbmUgb2YgZm91ciB3YXlzLCB0b3AgZWRnZSB1cCBvciBkb3duLCBib3R0b20gZWRnZSB1cCBvciBkb3duLgorICAgKiAgIFVubGVzcyB0aGVyZSBhcmUgY29uZmxpY3RpbmcgaHN0ZW1zLCB0aGUgc21hbGxlc3QgbW92ZW1lbnQgaXMgdGFrZW4KKyAgICogICB0byBtaW5pbWl6ZSBkaXN0b3J0aW9uLgorICAgKgorICAgKiBAb3JkZXI6CisgICAqICAgaGludGluZy1lbmdpbmUKKyAgICogICBuby1zdGVtLWRhcmtlbmluZworICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICBoaW50aW5nLWVuZ2luZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhhbmtzIHRvIEFkb2JlLCB3aGljaCBjb250cmlidXRlZCBhIG5ldyBoaW50aW5nIChhbmQgcGFyc2luZykKKyAgICogICBlbmdpbmUsIGFuIGFwcGxpY2F0aW9uIGNhbiBzZWxlY3QgYmV0d2VlbiBgZnJlZXR5cGUnIGFuZCBgYWRvYmUnIGlmCisgICAqICAgY29tcGlsZWQgd2l0aCBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FLiAgSWYgdGhpcyBjb25maWd1cmF0aW9uCisgICAqICAgbWFjcm8gaXNuJ3QgZGVmaW5lZCwgYGhpbnRpbmctZW5naW5lJyBkb2VzIG5vdGhpbmcuCisgICAqCisgICAqICAgVGhlIGRlZmF1bHQgZW5naW5lIGlzIGBmcmVldHlwZScgaWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBpcworICAgKiAgIGRlZmluZWQsIGFuZCBgYWRvYmUnIG90aGVyd2lzZS4KKyAgICoKKyAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHNlbGVjdCBBZG9iZSdzIGhpbnRpbmcKKyAgICogICBlbmdpbmUgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX1VJbnQgICAgIGhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiY2ZmIiwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpbnRpbmctZW5naW5lIiwgJmhpbnRpbmdfZW5naW5lICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9DRkZfSElOVElOR19YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCBmb3IgdGhlIEBoaW50aW5nLWVuZ2luZSBwcm9wZXJ0eSB0byBzZWxlY3QKKyAgICogICB0aGUgaGludGluZyBlbmdpbmUgZm9yIENGRiBmb250cy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9DRkZfSElOVElOR19GUkVFVFlQRSA6OgorICAgKiAgICAgVXNlIHRoZSBvbGQgRnJlZVR5cGUgaGludGluZyBlbmdpbmUuCisgICAqCisgICAqICAgRlRfQ0ZGX0hJTlRJTkdfQURPQkUgOjoKKyAgICogICAgIFVzZSB0aGUgaGludGluZyBlbmdpbmUgY29udHJpYnV0ZWQgYnkgQWRvYmUuCisgICAqCisgICAqLworI2RlZmluZSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSAgMAorI2RlZmluZSBGVF9DRkZfSElOVElOR19BRE9CRSAgICAgMQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICBuby1zdGVtLWRhcmtlbmluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQnkgZGVmYXVsdCwgdGhlIEFkb2JlIENGRiBlbmdpbmUgZGFya2VucyBzdGVtcyBhdCBzbWFsbGVyIHNpemVzLAorICAgKiAgIHJlZ2FyZGxlc3Mgb2YgaGludGluZywgdG8gZW5oYW5jZSBjb250cmFzdC4gIFRoaXMgZmVhdHVyZSByZXF1aXJlcworICAgKiAgIGEgcmVuZGVyaW5nIHN5c3RlbSB3aXRoIHByb3BlciBnYW1tYSBjb3JyZWN0aW9uLiAgU2V0dGluZyB0aGlzCisgICAqICAgcHJvcGVydHksIHN0ZW0gZGFya2VuaW5nIGdldHMgc3dpdGNoZWQgb2ZmLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBzdGVtIGRhcmtlbmluZyBpcyBuZXZlciBhcHBsaWVkIGlmIEBGVF9MT0FEX05PX1NDQUxFIGlzIHNldC4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfQm9vbCAgICAgbm9fc3RlbV9kYXJrZW5pbmcgPSBUUlVFOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImNmZiIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuby1zdGVtLWRhcmtlbmluZyIsICZub19zdGVtX2RhcmtlbmluZyApOworICAgKiAgIH0KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBCeSBkZWZhdWx0LCB0aGUgQWRvYmUgQ0ZGIGVuZ2luZSBkYXJrZW5zIHN0ZW1zIGFzIGZvbGxvd3MgKGlmIHRoZQorICAgKiAgIGBuby1zdGVtLWRhcmtlbmluZycgcHJvcGVydHkgaXNuJ3Qgc2V0KToKKyAgICoKKyAgICogICB7CisgICAqICAgICBzdGVtIHdpZHRoIDw9IDAuNXB4OiAgIGRhcmtlbmluZyBhbW91bnQgPSAwLjRweAorICAgKiAgICAgc3RlbSB3aWR0aCAgPSAxcHg6ICAgICBkYXJrZW5pbmcgYW1vdW50ID0gMC4yNzVweAorICAgKiAgICAgc3RlbSB3aWR0aCAgPSAxLjY2N3B4OiBkYXJrZW5pbmcgYW1vdW50ID0gMC4yNzVweAorICAgKiAgICAgc3RlbSB3aWR0aCA+PSAyLjMzM3B4OiBkYXJrZW5pbmcgYW1vdW50ID0gMHB4CisgICAqICAgfQorICAgKgorICAgKiAgIGFuZCBwaWVjZXdpc2UgbGluZWFyIGluLWJldHdlZW4uICBBdCBjb25maWd1cmF0aW9uIHRpbWUsIHRoZXNlIGZvdXIKKyAgICogICBjb250cm9sIHBvaW50cyBjYW4gYmUgc2V0IHdpdGggdGhlIG1hY3JvCisgICAqICAgYENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJTJy4gIEF0IHJ1bnRpbWUsIHRoZSBjb250cm9sCisgICAqICAgcG9pbnRzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5LCBhcworICAgKiAgIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0ludCAgICAgIGRhcmtlbl9wYXJhbXNbOF0gPSB7ICA1MDAsIDMwMCwgICAvLyB4MSwgeTEKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDIwMCwgICAvLyB4MiwgeTIKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MDAsIDEwMCwgICAvLyB4MywgeTMKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAsICAgMCB9OyAvLyB4NCwgeTQKKyAgICoKKyAgICoKKyAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7CisgICAqCisgICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJjZmYiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFya2VuaW5nLXBhcmFtZXRlcnMiLCBkYXJrZW5fcGFyYW1zICk7CisgICAqICAgfQorICAgKgorICAgKiAgIFRoZSB4fnZhbHVlcyBnaXZlIHRoZSBzdGVtIHdpZHRoLCBhbmQgdGhlIHl+dmFsdWVzIHRoZSBkYXJrZW5pbmcKKyAgICogICBhbW91bnQuICBUaGUgdW5pdCBpcyAxMDAwdGggb2YgcGl4ZWxzLiAgQWxsIGNvb3JkaW5hdGUgdmFsdWVzIG11c3QgYmUKKyAgICogICBwb3NpdGl2ZTsgdGhlIHh+dmFsdWVzIG11c3QgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nOyB0aGUKKyAgICogICB5fnZhbHVlcyBtdXN0IGJlIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBhbmQgc21hbGxlciB0aGFuIG9yCisgICAqICAgZXF1YWwgdG8gNTAwIChjb3JyZXNwb25kaW5nIHRvIGhhbGYgYSBwaXhlbCk7IHRoZSBzbG9wZSBvZiBlYWNoCisgICAqICAgbGluZWFyIHBpZWNlIG11c3QgYmUgc2hhbGxvd2VyIHRoYW4gLTEgKGUuZy4sIC0uNCkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqLworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUQ0ZGRFJWX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjaGFwdGVycy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjaGFwdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzM3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGNoYXB0ZXJzLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgRnJlZVR5cGUgcmVmZXJlbmNlLiAgICAgICAgICAgICAgKi8KKy8qIEl0IGlzIHVzZWQgYnkgdGhlIHB5dGhvbiBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgdGhlIEhUTUwgZmlsZXMuICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxDaGFwdGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBnZW5lcmFsX3JlbWFya3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBHZW5lcmFsIFJlbWFya3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxTZWN0aW9ucz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBoZWFkZXJfaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgdXNlcl9hbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGNvcmVfYXBpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENvcmUgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgYmFzZV9pbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGdseXBoX3ZhcmlhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBnbHlwaF9tYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgbWFjX3NwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIHNpemVzX21hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBoZWFkZXJfZmlsZV9tYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA8Q2hhcHRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgZm9ybWF0X3NwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRm9ybWF0LVNwZWNpZmljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA8U2VjdGlvbnM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgbXVsdGlwbGVfbWFzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIHRydWV0eXBlX3RhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICB0eXBlMV90YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgc2ZudF9uYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGJkZl9mb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBjaWRfZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgcGZyX2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIHdpbmZudF9mb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBmb250X2Zvcm1hdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgZ2FzcF90YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIG1vZHVsZV9zcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENvbnRyb2xsaW5nIEZyZWVUeXBlIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGF1dG9faGludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBjZmZfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgdHRfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENhY2hlIFN1Yi1TeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxDaGFwdGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBzdXBwb3J0X2FwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBTdXBwb3J0IEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDxTZWN0aW9ucz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBjb21wdXRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgbGlzdF9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIG91dGxpbmVfcHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBxdWlja19hZHZhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgYml0bWFwX2hhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIHJhc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBnbHlwaF9zdHJva2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgc3lzdGVtX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIG1vZHVsZV9tYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBnemlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgbHp3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGJ6aXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBsY2RfZmlsdGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGNpZC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTc0MWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRjaWQuaApAQCAtMCwwICsxLDE2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjaWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEZXJlZyBDbGVnZyBhbmQgTWljaGFlbCBUb2Z0ZGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRDSURfSF9fCisjZGVmaW5lIF9fRlRDSURfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNpZF9mb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRCBGb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRC1rZXllZCBmb250IHNwZWNpZmljIEFQSS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgQ0lELWtleWVkIGZvbnQgc3BlY2lmaWMgICAqLworICAvKiAgICBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBSZXRyaWV2ZSB0aGUgUmVnaXN0cnkvT3JkZXJpbmcvU3VwcGxlbWVudCB0cmlwbGUgKGFsc28ga25vd24gYXMgdGhlCisgICAqICAgICJSL08vUyIpIGZyb20gYSBDSUQta2V5ZWQgZm9udC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgICBmYWNlIDo6CisgICAqICAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICByZWdpc3RyeSA6OgorICAgKiAgICAgICBUaGUgcmVnaXN0cnksIGFzIGEgQ35zdHJpbmcsIG93bmVkIGJ5IHRoZSBmYWNlLgorICAgKgorICAgKiAgICBvcmRlcmluZyA6OgorICAgKiAgICAgICBUaGUgb3JkZXJpbmcsIGFzIGEgQ35zdHJpbmcsIG93bmVkIGJ5IHRoZSBmYWNlLgorICAgKgorICAgKiAgICBzdXBwbGVtZW50IDo6CisgICAqICAgICAgIFRoZSBzdXBwbGVtZW50LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQ0lEIGZhY2VzLCByZXR1cm5pbmcgYW4gZXJyb3IKKyAgICogICAgb3RoZXJ3aXNlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgIDIuMy42CisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0NJRF9SZWdpc3RyeV9PcmRlcmluZ19TdXBwbGVtZW50KCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKm9yZGVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAqc3VwcGxlbWVudCk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBSZXRyaWV2ZSB0aGUgdHlwZSBvZiB0aGUgaW5wdXQgZmFjZSwgQ0lEIGtleWVkIG9yIG5vdC4gIEluCisgICAqICAgIGNvbnN0cmFzdCB0byB0aGUgQEZUX0lTX0NJRF9LRVlFRCBtYWNybyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgICogICAgc3VjY2Vzc2Z1bGx5IGFsc28gZm9yIENJRC1rZXllZCBmb250cyBpbiBhbiBTTkZUIHdyYXBwZXIuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICAgaXNfY2lkIDo6CisgICAqICAgICAgIFRoZSB0eXBlIG9mIHRoZSBmYWNlIGFzIGFuIEBGVF9Cb29sLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQ0lEIGZhY2VzIGFuZCBPcGVuVHlwZSBmb250cywKKyAgICogICAgcmV0dXJuaW5nIGFuIGVycm9yIG90aGVyd2lzZS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgICAyLjMuOQorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAqaXNfY2lkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9DSURfRnJvbV9HbHlwaF9JbmRleAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIFJldHJpZXZlIHRoZSBDSUQgb2YgdGhlIGlucHV0IGdseXBoIGluZGV4LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqCisgICAqICAgIGdseXBoX2luZGV4IDo6CisgICAqICAgICAgIFRoZSBpbnB1dCBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICAgY2lkIDo6CisgICAqICAgICAgIFRoZSBDSUQgYXMgYW4gQEZUX1VJbnQuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgICBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBDSUQgZmFjZXMgYW5kIE9wZW5UeXBlIGZvbnRzLAorICAgKiAgICByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgIDIuMy45CisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0NJRF9Gcm9tX0dseXBoX0luZGV4KCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmNpZCApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVENJRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0ZXJyZGVmLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGVycmRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjA3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGVycmRlZi5oCkBAIC0wLDAgKzEsMjQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGVycmRlZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgIExJU1QgT0YgRVJST1IgQ09ERVMvTUVTU0FHRVMgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBZb3UgbmVlZCB0byBkZWZpbmUgYm90aCBGVF9FUlJPUkRFRl8gYW5kIEZUX05PRVJST1JERUZfIGJlZm9yZSAqLworICAvKiBpbmNsdWRpbmcgdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyAgLyogZ2VuZXJpYyBlcnJvcnMgKi8KKworICBGVF9OT0VSUk9SREVGXyggT2ssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsCisgICAgICAgICAgICAgICAgICAibm8gZXJyb3IiICkKKworICBGVF9FUlJPUkRFRl8oIENhbm5vdF9PcGVuX1Jlc291cmNlLCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsCisgICAgICAgICAgICAgICAgImNhbm5vdCBvcGVuIHJlc291cmNlIiApCisgIEZUX0VSUk9SREVGXyggVW5rbm93bl9GaWxlX0Zvcm1hdCwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwKKyAgICAgICAgICAgICAgICAidW5rbm93biBmaWxlIGZvcm1hdCIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfRmlsZV9Gb3JtYXQsICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsCisgICAgICAgICAgICAgICAgImJyb2tlbiBmaWxlIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9WZXJzaW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBGcmVlVHlwZSB2ZXJzaW9uIiApCisgIEZUX0VSUk9SREVGXyggTG93ZXJfTW9kdWxlX1ZlcnNpb24sICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSwKKyAgICAgICAgICAgICAgICAibW9kdWxlIHZlcnNpb24gaXMgdG9vIGxvdyIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfQXJndW1lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsCisgICAgICAgICAgICAgICAgImludmFsaWQgYXJndW1lbnQiICkKKyAgRlRfRVJST1JERUZfKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUsICAgICAgICAgICAgICAgICAgICAgICAweDA3LAorICAgICAgICAgICAgICAgICJ1bmltcGxlbWVudGVkIGZlYXR1cmUiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX1RhYmxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LAorICAgICAgICAgICAgICAgICJicm9rZW4gdGFibGUiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX09mZnNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LAorICAgICAgICAgICAgICAgICJicm9rZW4gb2Zmc2V0IHdpdGhpbiB0YWJsZSIgKQorICBGVF9FUlJPUkRFRl8oIEFycmF5X1Rvb19MYXJnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsCisgICAgICAgICAgICAgICAgImFycmF5IGFsbG9jYXRpb24gc2l6ZSB0b28gbGFyZ2UiICkKKyAgRlRfRVJST1JERUZfKCBNaXNzaW5nX01vZHVsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLAorICAgICAgICAgICAgICAgICJtaXNzaW5nIG1vZHVsZSIgKQorICBGVF9FUlJPUkRFRl8oIE1pc3NpbmdfUHJvcGVydHksICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsCisgICAgICAgICAgICAgICAgIm1pc3NpbmcgcHJvcGVydHkiICkKKworICAvKiBnbHlwaC9jaGFyYWN0ZXIgZXJyb3JzICovCisKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX0dseXBoX0luZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGdseXBoIGluZGV4IiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9DaGFyYWN0ZXJfQ29kZSwgICAgICAgICAgICAgICAgICAgICAgMHgxMSwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBjaGFyYWN0ZXIgY29kZSIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfR2x5cGhfRm9ybWF0LCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsCisgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGdseXBoIGltYWdlIGZvcm1hdCIgKQorICBGVF9FUlJPUkRFRl8oIENhbm5vdF9SZW5kZXJfR2x5cGgsICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTMsCisgICAgICAgICAgICAgICAgImNhbm5vdCByZW5kZXIgdGhpcyBnbHlwaCBmb3JtYXQiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX091dGxpbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIG91dGxpbmUiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX0NvbXBvc2l0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbXBvc2l0ZSBnbHlwaCIgKQorICBGVF9FUlJPUkRFRl8oIFRvb19NYW55X0hpbnRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYsCisgICAgICAgICAgICAgICAgInRvbyBtYW55IGhpbnRzIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9QaXhlbF9TaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNywKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBwaXhlbCBzaXplIiApCisKKyAgLyogaGFuZGxlIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9IYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBvYmplY3QgaGFuZGxlIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgMHgyMSwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsaWJyYXJ5IGhhbmRsZSIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfRHJpdmVyX0hhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsCisgICAgICAgICAgICAgICAgImludmFsaWQgbW9kdWxlIGhhbmRsZSIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfRmFjZV9IYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjMsCisgICAgICAgICAgICAgICAgImludmFsaWQgZmFjZSBoYW5kbGUiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX1NpemVfSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAgICAweDI0LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIHNpemUgaGFuZGxlIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9TbG90X0hhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNSwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBnbHlwaCBzbG90IGhhbmRsZSIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfQ2hhck1hcF9IYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIDB4MjYsCisgICAgICAgICAgICAgICAgImludmFsaWQgY2hhcm1hcCBoYW5kbGUiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX0NhY2hlX0hhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICAweDI3LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIG1hbmFnZXIgaGFuZGxlIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9TdHJlYW1fSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAgMHgyOCwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBzdHJlYW0gaGFuZGxlIiApCisKKyAgLyogZHJpdmVyIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggVG9vX01hbnlfRHJpdmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMCwKKyAgICAgICAgICAgICAgICAidG9vIG1hbnkgbW9kdWxlcyIgKQorICBGVF9FUlJPUkRFRl8oIFRvb19NYW55X0V4dGVuc2lvbnMsICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzEsCisgICAgICAgICAgICAgICAgInRvbyBtYW55IGV4dGVuc2lvbnMiICkKKworICAvKiBtZW1vcnkgZXJyb3JzICovCisKKyAgRlRfRVJST1JERUZfKCBPdXRfT2ZfTWVtb3J5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwLAorICAgICAgICAgICAgICAgICJvdXQgb2YgbWVtb3J5IiApCisgIEZUX0VSUk9SREVGXyggVW5saXN0ZWRfT2JqZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwKKyAgICAgICAgICAgICAgICAidW5saXN0ZWQgb2JqZWN0IiApCisKKyAgLyogc3RyZWFtIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggQ2Fubm90X09wZW5fU3RyZWFtLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MSwKKyAgICAgICAgICAgICAgICAiY2Fubm90IG9wZW4gc3RyZWFtIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9TdHJlYW1fU2VlaywgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MiwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBzdHJlYW0gc2VlayIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfU3RyZWFtX1NraXAsICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTMsCisgICAgICAgICAgICAgICAgImludmFsaWQgc3RyZWFtIHNraXAiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX1N0cmVhbV9SZWFkLCAgICAgICAgICAgICAgICAgICAgICAgICAweDU0LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIHN0cmVhbSByZWFkIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uLCAgICAgICAgICAgICAgICAgICAgMHg1NSwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBzdHJlYW0gb3BlcmF0aW9uIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9GcmFtZV9PcGVyYXRpb24sICAgICAgICAgICAgICAgICAgICAgMHg1NiwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBmcmFtZSBvcGVyYXRpb24iICkKKyAgRlRfRVJST1JERUZfKCBOZXN0ZWRfRnJhbWVfQWNjZXNzLCAgICAgICAgICAgICAgICAgICAgICAgICAweDU3LAorICAgICAgICAgICAgICAgICJuZXN0ZWQgZnJhbWUgYWNjZXNzIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9GcmFtZV9SZWFkLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1OCwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBmcmFtZSByZWFkIiApCisKKyAgLyogcmFzdGVyIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggUmFzdGVyX1VuaW5pdGlhbGl6ZWQsICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCwKKyAgICAgICAgICAgICAgICAicmFzdGVyIHVuaW5pdGlhbGl6ZWQiICkKKyAgRlRfRVJST1JERUZfKCBSYXN0ZXJfQ29ycnVwdGVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxLAorICAgICAgICAgICAgICAgICJyYXN0ZXIgY29ycnVwdGVkIiApCisgIEZUX0VSUk9SREVGXyggUmFzdGVyX092ZXJmbG93LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MiwKKyAgICAgICAgICAgICAgICAicmFzdGVyIG92ZXJmbG93IiApCisgIEZUX0VSUk9SREVGXyggUmFzdGVyX05lZ2F0aXZlX0hlaWdodCwgICAgICAgICAgICAgICAgICAgICAgMHg2MywKKyAgICAgICAgICAgICAgICAibmVnYXRpdmUgaGVpZ2h0IHdoaWxlIHJhc3RlcmluZyIgKQorCisgIC8qIGNhY2hlIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggVG9vX01hbnlfQ2FjaGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MCwKKyAgICAgICAgICAgICAgICAidG9vIG1hbnkgcmVnaXN0ZXJlZCBjYWNoZXMiICkKKworICAvKiBUcnVlVHlwZSBhbmQgU0ZOVCBlcnJvcnMgKi8KKworICBGVF9FUlJPUkRFRl8oIEludmFsaWRfT3Bjb2RlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsCisgICAgICAgICAgICAgICAgImludmFsaWQgb3Bjb2RlIiApCisgIEZUX0VSUk9SREVGXyggVG9vX0Zld19Bcmd1bWVudHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MSwKKyAgICAgICAgICAgICAgICAidG9vIGZldyBhcmd1bWVudHMiICkKKyAgRlRfRVJST1JERUZfKCBTdGFja19PdmVyZmxvdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyLAorICAgICAgICAgICAgICAgICJzdGFjayBvdmVyZmxvdyIgKQorICBGVF9FUlJPUkRFRl8oIENvZGVfT3ZlcmZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMsCisgICAgICAgICAgICAgICAgImNvZGUgb3ZlcmZsb3ciICkKKyAgRlRfRVJST1JERUZfKCBCYWRfQXJndW1lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0LAorICAgICAgICAgICAgICAgICJiYWQgYXJndW1lbnQiICkKKyAgRlRfRVJST1JERUZfKCBEaXZpZGVfQnlfWmVybywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1LAorICAgICAgICAgICAgICAgICJkaXZpc2lvbiBieSB6ZXJvIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9SZWZlcmVuY2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NiwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCByZWZlcmVuY2UiICkKKyAgRlRfRVJST1JERUZfKCBEZWJ1Z19PcENvZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3LAorICAgICAgICAgICAgICAgICJmb3VuZCBkZWJ1ZyBvcGNvZGUiICkKKyAgRlRfRVJST1JERUZfKCBFTkRGX0luX0V4ZWNfU3RyZWFtLCAgICAgICAgICAgICAgICAgICAgICAgICAweDg4LAorICAgICAgICAgICAgICAgICJmb3VuZCBFTkRGIG9wY29kZSBpbiBleGVjdXRpb24gc3RyZWFtIiApCisgIEZUX0VSUk9SREVGXyggTmVzdGVkX0RFRlMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OSwKKyAgICAgICAgICAgICAgICAibmVzdGVkIERFRlMiICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX0NvZGVSYW5nZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvZGUgcmFuZ2UiICkKKyAgRlRfRVJST1JERUZfKCBFeGVjdXRpb25fVG9vX0xvbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCLAorICAgICAgICAgICAgICAgICJleGVjdXRpb24gY29udGV4dCB0b28gbG9uZyIgKQorICBGVF9FUlJPUkRFRl8oIFRvb19NYW55X0Z1bmN0aW9uX0RlZnMsICAgICAgICAgICAgICAgICAgICAgIDB4OEMsCisgICAgICAgICAgICAgICAgInRvbyBtYW55IGZ1bmN0aW9uIGRlZmluaXRpb25zIiApCisgIEZUX0VSUk9SREVGXyggVG9vX01hbnlfSW5zdHJ1Y3Rpb25fRGVmcywgICAgICAgICAgICAgICAgICAgMHg4RCwKKyAgICAgICAgICAgICAgICAidG9vIG1hbnkgaW5zdHJ1Y3Rpb24gZGVmaW5pdGlvbnMiICkKKyAgRlRfRVJST1JERUZfKCBUYWJsZV9NaXNzaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFLAorICAgICAgICAgICAgICAgICJTRk5UIGZvbnQgdGFibGUgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIEhvcml6X0hlYWRlcl9NaXNzaW5nLCAgICAgICAgICAgICAgICAgICAgICAgIDB4OEYsCisgICAgICAgICAgICAgICAgImhvcml6b250YWwgaGVhZGVyIChoaGVhKSB0YWJsZSBtaXNzaW5nIiApCisgIEZUX0VSUk9SREVGXyggTG9jYXRpb25zX01pc3NpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MCwKKyAgICAgICAgICAgICAgICAibG9jYXRpb25zIChsb2NhKSB0YWJsZSBtaXNzaW5nIiApCisgIEZUX0VSUk9SREVGXyggTmFtZV9UYWJsZV9NaXNzaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MSwKKyAgICAgICAgICAgICAgICAibmFtZSB0YWJsZSBtaXNzaW5nIiApCisgIEZUX0VSUk9SREVGXyggQ01hcF9UYWJsZV9NaXNzaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwKKyAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcCAoY21hcCkgdGFibGUgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIEhtdHhfVGFibGVfTWlzc2luZywgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTMsCisgICAgICAgICAgICAgICAgImhvcml6b250YWwgbWV0cmljcyAoaG10eCkgdGFibGUgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIFBvc3RfVGFibGVfTWlzc2luZywgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTQsCisgICAgICAgICAgICAgICAgIlBvc3RTY3JpcHQgKHBvc3QpIHRhYmxlIG1pc3NpbmciICkKKyAgRlRfRVJST1JERUZfKCBJbnZhbGlkX0hvcml6X01ldHJpY3MsICAgICAgICAgICAgICAgICAgICAgICAweDk1LAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGhvcml6b250YWwgbWV0cmljcyIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfQ2hhck1hcF9Gb3JtYXQsICAgICAgICAgICAgICAgICAgICAgIDB4OTYsCisgICAgICAgICAgICAgICAgImludmFsaWQgY2hhcmFjdGVyIG1hcCAoY21hcCkgZm9ybWF0IiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9QUGVtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NywKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBwcGVtIHZhbHVlIiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9WZXJ0X01ldHJpY3MsICAgICAgICAgICAgICAgICAgICAgICAgMHg5OCwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCB2ZXJ0aWNhbCBtZXRyaWNzIiApCisgIEZUX0VSUk9SREVGXyggQ291bGRfTm90X0ZpbmRfQ29udGV4dCwgICAgICAgICAgICAgICAgICAgICAgMHg5OSwKKyAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgY29udGV4dCIgKQorICBGVF9FUlJPUkRFRl8oIEludmFsaWRfUG9zdF9UYWJsZV9Gb3JtYXQsICAgICAgICAgICAgICAgICAgIDB4OUEsCisgICAgICAgICAgICAgICAgImludmFsaWQgUG9zdFNjcmlwdCAocG9zdCkgdGFibGUgZm9ybWF0IiApCisgIEZUX0VSUk9SREVGXyggSW52YWxpZF9Qb3N0X1RhYmxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QiwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBQb3N0U2NyaXB0IChwb3N0KSB0YWJsZSIgKQorCisgIC8qIENGRiwgQ0lELCBhbmQgVHlwZSAxIGVycm9ycyAqLworCisgIEZUX0VSUk9SREVGXyggU3ludGF4X0Vycm9yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBMCwKKyAgICAgICAgICAgICAgICAib3Bjb2RlIHN5bnRheCBlcnJvciIgKQorICBGVF9FUlJPUkRFRl8oIFN0YWNrX1VuZGVyZmxvdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTEsCisgICAgICAgICAgICAgICAgImFyZ3VtZW50IHN0YWNrIHVuZGVyZmxvdyIgKQorICBGVF9FUlJPUkRFRl8oIElnbm9yZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTIsCisgICAgICAgICAgICAgICAgImlnbm9yZSIgKQorICBGVF9FUlJPUkRFRl8oIE5vX1VuaWNvZGVfR2x5cGhfTmFtZSwgICAgICAgICAgICAgICAgICAgICAgIDB4QTMsCisgICAgICAgICAgICAgICAgIm5vIFVuaWNvZGUgZ2x5cGggbmFtZSBmb3VuZCIgKQorICBGVF9FUlJPUkRFRl8oIEdseXBoX1Rvb19CaWcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTQsCisgICAgICAgICAgICAgICAgImdseXBoIHRvIGJpZyBmb3IgaGludGluZyIgKQorCisgIC8qIEJERiBlcnJvcnMgKi8KKworICBGVF9FUlJPUkRFRl8oIE1pc3NpbmdfU3RhcnRmb250X0ZpZWxkLCAgICAgICAgICAgICAgICAgICAgIDB4QjAsCisgICAgICAgICAgICAgICAgImBTVEFSVEZPTlQnIGZpZWxkIG1pc3NpbmciICkKKyAgRlRfRVJST1JERUZfKCBNaXNzaW5nX0ZvbnRfRmllbGQsICAgICAgICAgICAgICAgICAgICAgICAgICAweEIxLAorICAgICAgICAgICAgICAgICJgRk9OVCcgZmllbGQgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIE1pc3NpbmdfU2l6ZV9GaWVsZCwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QjIsCisgICAgICAgICAgICAgICAgImBTSVpFJyBmaWVsZCBtaXNzaW5nIiApCisgIEZUX0VSUk9SREVGXyggTWlzc2luZ19Gb250Ym91bmRpbmdib3hfRmllbGQsICAgICAgICAgICAgICAgMHhCMywKKyAgICAgICAgICAgICAgICAiYEZPTlRCT1VORElOR0JPWCcgZmllbGQgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIE1pc3NpbmdfQ2hhcnNfRmllbGQsICAgICAgICAgICAgICAgICAgICAgICAgIDB4QjQsCisgICAgICAgICAgICAgICAgImBDSEFSUycgZmllbGQgbWlzc2luZyIgKQorICBGVF9FUlJPUkRFRl8oIE1pc3NpbmdfU3RhcnRjaGFyX0ZpZWxkLCAgICAgICAgICAgICAgICAgICAgIDB4QjUsCisgICAgICAgICAgICAgICAgImBTVEFSVENIQVInIGZpZWxkIG1pc3NpbmciICkKKyAgRlRfRVJST1JERUZfKCBNaXNzaW5nX0VuY29kaW5nX0ZpZWxkLCAgICAgICAgICAgICAgICAgICAgICAweEI2LAorICAgICAgICAgICAgICAgICJgRU5DT0RJTkcnIGZpZWxkIG1pc3NpbmciICkKKyAgRlRfRVJST1JERUZfKCBNaXNzaW5nX0JieF9GaWVsZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEI3LAorICAgICAgICAgICAgICAgICJgQkJYJyBmaWVsZCBtaXNzaW5nIiApCisgIEZUX0VSUk9SREVGXyggQmJ4X1Rvb19CaWcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCOCwKKyAgICAgICAgICAgICAgICAiYEJCWCcgdG9vIGJpZyIgKQorICBGVF9FUlJPUkRFRl8oIENvcnJ1cHRlZF9Gb250X0hlYWRlciwgICAgICAgICAgICAgICAgICAgICAgIDB4QjksCisgICAgICAgICAgICAgICAgIkZvbnQgaGVhZGVyIGNvcnJ1cHRlZCBvciBtaXNzaW5nIGZpZWxkcyIgKQorICBGVF9FUlJPUkRFRl8oIENvcnJ1cHRlZF9Gb250X0dseXBocywgICAgICAgICAgICAgICAgICAgICAgIDB4QkEsCisgICAgICAgICAgICAgICAgIkZvbnQgZ2x5cGhzIGNvcnJ1cHRlZCBvciBtaXNzaW5nIGZpZWxkcyIgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRlcnJvcnMuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0ZXJyb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2YmVlNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0ZXJyb3JzLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0ZXJyb3JzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgc3BlY2lhbCBoZWFkZXIgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgaGFuZGxpbmcgb2YgRlQyICAgICAgICAqLworICAvKiBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIGVycm9yIG1lc3NhZ2UgKi8KKyAgLyogc3RyaW5ncyB3aXRoIGEgc21hbGwgbWFjcm8gdHJpY2sgZXhwbGFpbmVkIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJIC0gRXJyb3IgRm9ybWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSBjb25maWd1cmF0aW9uIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgY2FuIGJlICAgKi8KKyAgLyogICBkZWZpbmVkIGluIGZ0b3B0aW9uLmggaW4gb3JkZXIgdG8gbWFrZSB0aGUgaGlnaGVyIGJ5dGUgaW5kaWNhdGUgICAgICovCisgIC8qICAgdGhlIG1vZHVsZSB3aGVyZSB0aGUgZXJyb3IgaGFzIGhhcHBlbmVkICh0aGlzIGlzIG5vdCBjb21wYXRpYmxlICAgICAqLworICAvKiAgIHdpdGggc3RhbmRhcmQgYnVpbGRzIG9mIEZyZWVUeXBlIDIpLiAgU2VlIHRoZSBmaWxlIGBmdG1vZGVyci5oJyBmb3IgKi8KKyAgLyogICBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSUkgLSBFcnJvciBNZXNzYWdlIHN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGUgZXJyb3IgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIG1hZGUgdGhyb3VnaCBzcGVjaWFsIG1hY3JvcyB0aGF0ICAgICovCisgIC8qICAgYWxsb3cgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBidWlsZCBhIHRhYmxlIG9mIGVycm9yIG1lc3NhZ2Ugc3RyaW5ncyAqLworICAvKiAgIGlmIHRoZXkgbmVlZCBpdC4gIFRoZSBzdHJpbmdzIGFyZSBub3QgaW5jbHVkZWQgaW4gYSBub3JtYWwgYnVpbGQgb2YgKi8KKyAgLyogICBGcmVlVHlwZSAyIHRvIHNhdmUgc3BhY2UgKG1vc3QgY2xpZW50IGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlICAgICAgICovCisgIC8qICAgdGhlbSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUbyBkbyBzbywgeW91IGhhdmUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGJlZm9yZSBpbmNsdWRpbmcgICovCisgIC8qICAgdGhpcyBmaWxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGVF9FUlJPUl9TVEFSVF9MSVNUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mICAqLworICAvKiAgICAgdGhlIGVycm9yIGxpc3QuICBJdCBpcyBmb2xsb3dlZCBieSBzZXZlcmFsIEZUX0VSUk9SX0RFRiBjYWxscyAgICAgKi8KKyAgLyogICAgIChzZWUgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZUX0VSUk9SX0RFRiggZSwgdiwgcyApIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIFRoaXMgbWFjcm8gaXMgY2FsbGVkIHRvIGRlZmluZSBvbmUgc2luZ2xlIGVycm9yLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBgZScgaXMgdGhlIGVycm9yIGNvZGUgaWRlbnRpZmllciAoZS5nLiBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCkuICAqLworICAvKiAgICAgYHYnIGlzIHRoZSBlcnJvciBudW1lcmljYWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGBzJyBpcyB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZUX0VSUk9SX0VORF9MSVNUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIFRoaXMgbWFjcm8gZW5kcyB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gdW5kZWZpbmUgX19GVEVSUk9SU19IX18gYmVmb3JlICNpbmNsdWRpbmcgKi8KKyAgLyogICB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAjdW5kZWYgX19GVEVSUk9SU19IX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgI2RlZmluZSBGVF9FUlJPUkRFRiggZSwgdiwgcyApICB7IGUsIHMgfSwgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICNkZWZpbmUgRlRfRVJST1JfU1RBUlRfTElTVCAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAjZGVmaW5lIEZUX0VSUk9SX0VORF9MSVNUICAgICAgIHsgMCwgMCB9IH07ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGNvbnN0IHN0cnVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBpbnQgICAgICAgICAgZXJyX2NvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgY29uc3QgY2hhciogIGVycl9tc2c7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICB9IGZ0X2Vycm9yc1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICNpbmNsdWRlIEZUX0VSUk9SU19IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVEVSUk9SU19IX18KKyNkZWZpbmUgX19GVEVSUk9SU19IX18KKworCisgIC8qIGluY2x1ZGUgbW9kdWxlIGJhc2UgZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBTRVRVUCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI3VuZGVmICBGVF9ORUVEX0VYVEVSTl9DCisKKworICAvKiBGVF9FUlJfUFJFRklYIGlzIHVzZWQgYXMgYSBwcmVmaXggZm9yIGVycm9yIGlkZW50aWZpZXJzLiAqLworICAvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgYEZUX0Vycl8nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEZUX0Vycl8KKyNlbmRpZgorCisKKyAgLyogRlRfRVJSX0JBU0UgaXMgdXNlZCBhcyB0aGUgYmFzZSBmb3IgbW9kdWxlLXNwZWNpZmljIGVycm9ycy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTCisKKyNpZm5kZWYgRlRfRVJSX0JBU0UKKyNkZWZpbmUgRlRfRVJSX0JBU0UgIEZUX01vZF9FcnJfQmFzZQorI2VuZGlmCisKKyNlbHNlCisKKyN1bmRlZiBGVF9FUlJfQkFTRQorI2RlZmluZSBGVF9FUlJfQkFTRSAgMAorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyAqLworCisKKyAgLyogSWYgRlRfRVJST1JERUYgaXMgbm90IGRlZmluZWQsIHdlIG5lZWQgdG8gZGVmaW5lIGEgc2ltcGxlICovCisgIC8qIGVudW1lcmF0aW9uIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgRlRfRVJST1JERUYKKworI2RlZmluZSBGVF9FUlJPUkRFRiggZSwgdiwgcyApICBlID0gdiwKKyNkZWZpbmUgRlRfRVJST1JfU1RBUlRfTElTVCAgICAgZW51bSB7CisjZGVmaW5lIEZUX0VSUk9SX0VORF9MSVNUICAgICAgIEZUX0VSUl9DQVQoIEZUX0VSUl9QUkVGSVgsIE1heCApIH07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9ORUVEX0VYVEVSTl9DCisgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNlbmRpZiAvKiAhRlRfRVJST1JERUYgKi8KKworCisgIC8qIHRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWZpbmUgYW4gZXJyb3IgKi8KKyNkZWZpbmUgRlRfRVJST1JERUZfKCBlLCB2LCBzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRVJST1JERUYoIEZUX0VSUl9DQVQoIEZUX0VSUl9QUkVGSVgsIGUgKSwgdiArIEZUX0VSUl9CQVNFLCBzICkKKworICAvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgPG1vZHVsZT5fRXJyX09rLCB3aGljaCBtdXN0IGJlIDAhICovCisjZGVmaW5lIEZUX05PRVJST1JERUZfKCBlLCB2LCBzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FUlJPUkRFRiggRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgZSApLCB2LCBzICkKKworCisjaWZkZWYgRlRfRVJST1JfU1RBUlRfTElTVAorICBGVF9FUlJPUl9TVEFSVF9MSVNUCisjZW5kaWYKKworCisgIC8qIG5vdyBpbmNsdWRlIHRoZSBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgRlRfRVJST1JfREVGSU5JVElPTlNfSAorCisKKyNpZmRlZiBGVF9FUlJPUl9FTkRfTElTVAorICBGVF9FUlJPUl9FTkRfTElTVAorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgU0lNUExFIENMRUFOVVAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEZUX05FRURfRVhURVJOX0MKKyAgfQorI2VuZGlmCisKKyN1bmRlZiBGVF9FUlJPUl9TVEFSVF9MSVNUCisjdW5kZWYgRlRfRVJST1JfRU5EX0xJU1QKKworI3VuZGVmIEZUX0VSUk9SREVGCisjdW5kZWYgRlRfRVJST1JERUZfCisjdW5kZWYgRlRfTk9FUlJPUkRFRl8KKworI3VuZGVmIEZUX05FRURfRVhURVJOX0MKKyN1bmRlZiBGVF9FUlJfQkFTRQorCisgIC8qIEZUX0VSUl9QUkVGSVggaXMgbmVlZGVkIGludGVybmFsbHkgKi8KKyNpZm5kZWYgRlQyX0JVSUxEX0xJQlJBUlkKKyN1bmRlZiBGVF9FUlJfUFJFRklYCisjZW5kaWYKKworI2VuZGlmIC8qIF9fRlRFUlJPUlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGZudGZtdC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRmbnRmbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjhmZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRmbnRmbXQuaApAQCAtMCwwICsxLDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGZudGZtdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGZvbnQgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVEZOVEZNVF9IX18KKyNkZWZpbmUgX19GVEZOVEZNVF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb250X2Zvcm1hdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGb250IEZvcm1hdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBHZXR0aW5nIHRoZSBmb250IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGUgc2luZ2xlIGZ1bmN0aW9uIGluIHRoaXMgc2VjdGlvbiBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGZvbnQgICAgICovCisgIC8qICAgZm9ybWF0LiAgTm90ZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgbm90IG5lZWRlZCBub3JtYWxseTsgICAgICAgICAqLworICAvKiAgIGhvd2V2ZXIsIHRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzIChsaWtlIGluIFBERiBkZXZpY2VzKSB3aGVyZSBpdCBpcyAgKi8KKyAgLyogICBpbXBvcnRhbnQgdG8gZGlmZmVyZW50aWF0ZSwgaW4gc3BpdGUgb2YgRnJlZVR5cGUncyB1bmlmb3JtIEFQSS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRlRfR2V0X0ZvbnRfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBvZiBhIGdpdmVuIGZhY2UuICBQb3NzaWJsZSAgICAqLworICAvKiAgIHZhbHVlcyBhcmUgYFRydWVUeXBlJywgYFR5cGV+MScsIGBCREYnLCBgUENGJywgYFR5cGV+NDInLCAgICAgICAgICAgKi8KKyAgLyogICBgQ0lEflR5cGV+MScsIGBDRkYnLCBgUEZSJywgYW5kIGBXaW5kb3dzfkZOVCcuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3VpdGFibGUgdG8gYmUgdXNlZCBhcyBhbiBYMTEgRk9OVF9QUk9QRVJUWS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIElucHV0IGZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGb250IGZvcm1hdCBzdHJpbmcuICBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBIGRlcHJlY2F0ZWQgbmFtZSBmb3IgdGhlIHNhbWUgZnVuY3Rpb24gaXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgYEZUX0dldF9YMTFfRm9udF9Gb3JtYXQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBjb25zdCBjaGFyKiApCisgIEZUX0dldF9Gb250X0Zvcm1hdCggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyogZGVwcmVjYXRlZCAqLworICBGVF9FWFBPUlQoIGNvbnN0IGNoYXIqICkKKyAgRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZURk5URk1UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRnYXNwLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGdhc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTliNjMyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRnYXNwLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z2FzcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfRlRfR0FTUF9IXworI2RlZmluZSBfRlRfR0FTUF9IXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGdhc3BfdGFibGUKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIEdhc3AgVGFibGUKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFJldHJpZXZpbmcgVHJ1ZVR5cGUgYGdhc3AnIHRhYmxlIGVudHJpZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgZnVuY3Rpb24gQEZUX0dldF9HYXNwIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGEgVHJ1ZVR5cGUgb3IgT3BlblR5cGUKKyAgICogICBmb250IGZvciBzcGVjaWZpYyBlbnRyaWVzIGluIGl0cyBgZ2FzcCcgdGFibGUsIGlmIGFueS4gIFRoaXMgaXMKKyAgICogICBtYWlubHkgdXNlZnVsIHdoZW4gaW1wbGVtZW50aW5nIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIHdpdGggdGhlCisgICAqICAgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdG8gZHVwbGljYXRlIHRoZSBXaW5kb3dzIHRleHQgcmVuZGVyaW5nIHJlc3VsdHMuCisgICAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0dBU1BfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgdmFsdWVzIGFuZC9vciBiaXQtZmxhZ3MgcmV0dXJuZWQgYnkgdGhlIEBGVF9HZXRfR2FzcAorICAgKiAgIGZ1bmN0aW9uLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0dBU1BfTk9fVEFCTEUgOjoKKyAgICogICAgIFRoaXMgc3BlY2lhbCB2YWx1ZSBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIEdBU1AgdGFibGUgaW4gdGhpcyBmYWNlLgorICAgKiAgICAgSXQgaXMgdXAgdG8gdGhlIGNsaWVudCB0byBkZWNpZGUgd2hhdCB0byBkby4KKyAgICoKKyAgICogICBGVF9HQVNQX0RPX0dSSURGSVQgOjoKKyAgICogICAgIEdyaWQtZml0dGluZyBhbmQgaGludGluZyBzaG91bGQgYmUgcGVyZm9ybWVkIGF0IHRoZSBzcGVjaWZpZWQgcHBlbS4KKyAgICogICAgIFRoaXMgKnJlYWxseSogbWVhbnMgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uICBJZiB0aGlzIGJpdAorICAgKiAgICAgaXMgbm90IHNldCwgbm8gaGludGluZyBnZXRzIGFwcGxpZWQuCisgICAqCisgICAqICAgRlRfR0FTUF9ET19HUkFZIDo6CisgICAqICAgICBBbnRpLWFsaWFzZWQgcmVuZGVyaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgYXQgdGhlIHNwZWNpZmllZCBwcGVtLgorICAgKiAgICAgSWYgbm90IHNldCwgZG8gbW9ub2Nocm9tZSByZW5kZXJpbmcuCisgICAqCisgICAqICAgRlRfR0FTUF9TWU1NRVRSSUNfU01PT1RISU5HIDo6CisgICAqICAgICBJZiBzZXQsIHNtb290aGluZyBhbG9uZyBtdWx0aXBsZSBheGVzIG11c3QgYmUgdXNlZCB3aXRoIENsZWFyVHlwZS4KKyAgICoKKyAgICogICBGVF9HQVNQX1NZTU1FVFJJQ19HUklERklUIDo6CisgICAqICAgICBHcmlkLWZpdHRpbmcgbXVzdCBiZSB1c2VkIHdpdGggQ2xlYXJUeXBlJ3Mgc3ltbWV0cmljIHNtb290aGluZy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGJpdC1mbGFncyBgRlRfR0FTUF9ET19HUklERklUJyBhbmQgYEZUX0dBU1BfRE9fR1JBWScgYXJlIHRvIGJlCisgICAqICAgdXNlZCBmb3Igc3RhbmRhcmQgZm9udCByYXN0ZXJpemF0aW9uIG9ubHkuICBJbmRlcGVuZGVudGx5IG9mIHRoYXQsCisgICAqICAgYEZUX0dBU1BfU1lNTUVUUklDX1NNT09USElORycgYW5kIGBGVF9HQVNQX1NZTU1FVFJJQ19HUklERklUJyBhcmUgdG8KKyAgICogICBiZSB1c2VkIGlmIENsZWFyVHlwZSBpcyBlbmFibGVkIChhbmQgYEZUX0dBU1BfRE9fR1JJREZJVCcgYW5kCisgICAqICAgYEZUX0dBU1BfRE9fR1JBWScgYXJlIGNvbnNlcXVlbnRseSBpZ25vcmVkKS4KKyAgICoKKyAgICogICBgQ2xlYXJUeXBlJyBpcyBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiBvZiBMQ0QgcmVuZGVyaW5nLCBwYXJ0bHkKKyAgICogICBwcm90ZWN0ZWQgYnkgcGF0ZW50cy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy4wCisgICAqLworI2RlZmluZSBGVF9HQVNQX05PX1RBQkxFICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgRlRfR0FTUF9ET19HUklERklUICAgICAgICAgICAweDAxCisjZGVmaW5lIEZUX0dBU1BfRE9fR1JBWSAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBGVF9HQVNQX1NZTU1FVFJJQ19TTU9PVEhJTkcgIDB4MDgKKyNkZWZpbmUgRlRfR0FTUF9TWU1NRVRSSUNfR1JJREZJVCAgICAweDEwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuYzoKKyAgICogICBGVF9HZXRfR2FzcAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmVhZCB0aGUgYGdhc3AnIHRhYmxlIGZyb20gYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250IGZpbGUgYW5kCisgICAqICAgcmV0dXJuIHRoZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gY2hhcmFjdGVyIHBpeGVsIHNpemUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6IFRoZSBzb3VyY2UgZmFjZSBoYW5kbGUuCisgICAqICAgcHBlbSA6OiBUaGUgdmVydGljYWwgY2hhcmFjdGVyIHBpeGVsIHNpemUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQml0IGZsYWdzIChzZWUgQEZUX0dBU1BfWFhYKSwgb3IgQEZUX0dBU1BfTk9fVEFCTEUgaWYgdGhlcmUgaXMgbm8KKyAgICogICBgZ2FzcCcgdGFibGUgaW4gdGhlIGZhY2UuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjMuMAorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9JbnQgKQorICBGVF9HZXRfR2FzcCggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgIEZUX1VJbnQgIHBwZW0gKTsKKworICAvKiAqLworCisKKyNlbmRpZiAvKiBfRlRfR0FTUF9IXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRnbHlwaC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRnbHlwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2FkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGdseXBoLmgKQEAgLTAsMCArMSw2MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z2x5cGguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGdseXBocyAoc3BlY2lmaWNhdGlvbikuICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBzZXZlcmFsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyAgICAqLworICAvKiB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZWFzaWx5IHJldHJpZXZlIGdseXBoICAgICAgKi8KKyAgLyogYml0bWFwcyBhbmQgb3V0bGluZXMgZnJvbSBhIGdpdmVuIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG9wdGlvbmFsIGlmIHlvdSBhcmUgd3JpdGluZyBhIGZvbnQgc2VydmVyICAgKi8KKyAgLyogb3IgdGV4dCBsYXlvdXQgZW5naW5lIG9uIHRvcCBvZiBGcmVlVHlwZS4gIEhvd2V2ZXIsIHRoZXkgYXJlIHByZXR0eSAgICovCisgIC8qIGhhbmR5IGZvciBtYW55IG90aGVyIHNpbXBsZSB1c2VzIG9mIHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUR0xZUEhfSF9fCisjZGVmaW5lIF9fRlRHTFlQSF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9tYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHbHlwaCBNYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHZW5lcmljIGludGVyZmFjZSB0byBtYW5hZ2UgaW5kaXZpZHVhbCBnbHlwaCBkYXRhLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgdXNlZCB0byBtYW5hZ2UgZ2x5cGggZGF0YSAgICAgICAgKi8KKyAgLyogICAgdGhyb3VnaCBnZW5lcmljIEZUX0dseXBoIG9iamVjdHMuICBFYWNoIG9mIHRoZW0gY2FuIGNvbnRhaW4gYSAgICAgICovCisgIC8qICAgIGJpdG1hcCwgYSB2ZWN0b3Igb3V0bGluZSwgb3IgZXZlbiBpbWFnZXMgaW4gb3RoZXIgZm9ybWF0cy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGEgcHJpdmF0ZSB0eXBlICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0dseXBoX0NsYXNzXyAgRlRfR2x5cGhfQ2xhc3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBIYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgZ2VuZXJpYyBnbHlwaCBpbWFnZXMuICBJdCBpcyBhICAgKi8KKyAgLyogICAgcG9pbnRlciB0byB0aGUgQEZUX0dseXBoUmVjIHN0cnVjdHVyZSBhbmQgY2FuIGNvbnRhaW4gYSBnbHlwaCAgICAgICovCisgIC8qICAgIGJpdG1hcCBvciBwb2ludGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdseXBoIG9iamVjdHMgYXJlIG5vdCBvd25lZCBieSB0aGUgbGlicmFyeS4gIFlvdSBtdXN0IHRodXMgcmVsZWFzZSAqLworICAvKiAgICB0aGVtIG1hbnVhbGx5ICh0aHJvdWdoIEBGVF9Eb25lX0dseXBoKSBfYmVmb3JlXyBjYWxsaW5nICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0RvbmVfRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9HbHlwaFJlY18qICBGVF9HbHlwaDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByb290IGdseXBoIHN0cnVjdHVyZSBjb250YWlucyBhIGdpdmVuIGdseXBoIGltYWdlIHBsdXMgaXRzICAgICAqLworICAvKiAgICBhZHZhbmNlIHdpZHRoIGluIDE2LjE2IGZpeGVkLXBvaW50IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNsYXp6ICAgOjogQSBwb2ludGVyIHRvIHRoZSBnbHlwaCdzIGNsYXNzLiAgUHJpdmF0ZS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9ybWF0ICA6OiBUaGUgZm9ybWF0IG9mIHRoZSBnbHlwaCdzIGltYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZHZhbmNlIDo6IEEgMTYuMTYgdmVjdG9yIHRoYXQgZ2l2ZXMgdGhlIGdseXBoJ3MgYWR2YW5jZSB3aWR0aC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9HbHlwaFJlY18KKyAgeworICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgbGlicmFyeTsKKyAgICBjb25zdCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6OworICAgIEZUX0dseXBoX0Zvcm1hdCAgICAgICAgZm9ybWF0OworICAgIEZUX1ZlY3RvciAgICAgICAgICAgICAgYWR2YW5jZTsKKworICB9IEZUX0dseXBoUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQml0bWFwR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgYSBiaXRtYXAgZ2x5cGggaW1hZ2UuICBUaGlzIGlzICovCisgIC8qICAgIGEgc3ViLWNsYXNzIG9mIEBGVF9HbHlwaCwgYW5kIGEgcG9pbnRlciB0byBARlRfQml0bWFwR2x5cGhSZWMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfQml0bWFwR2x5cGhSZWNfKiAgRlRfQml0bWFwR2x5cGg7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXBHbHlwaFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIGZvciBiaXRtYXAgZ2x5cGggaW1hZ2VzLiAgVGhpcyByZWFsbHkgaXMgYSAgICAgICAgKi8KKyAgLyogICAgYHN1Yi1jbGFzcycgb2YgQEZUX0dseXBoUmVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcm9vdCAgIDo6IFRoZSByb290IEBGVF9HbHlwaCBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsZWZ0ICAgOjogVGhlIGxlZnQtc2lkZSBiZWFyaW5nLCBpLmUuLCB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgIGZyb20gdGhlIGN1cnJlbnQgcGVuIHBvc2l0aW9uIHRvIHRoZSBsZWZ0IGJvcmRlciBvZiB0aGUgICovCisgIC8qICAgICAgICAgICAgICBnbHlwaCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdG9wICAgIDo6IFRoZSB0b3Atc2lkZSBiZWFyaW5nLCBpLmUuLCB0aGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSAgICovCisgIC8qICAgICAgICAgICAgICB0aGUgY3VycmVudCBwZW4gcG9zaXRpb24gdG8gdGhlIHRvcCBib3JkZXIgb2YgdGhlIGdseXBoICAqLworICAvKiAgICAgICAgICAgICAgYml0bWFwLiAgVGhpcyBkaXN0YW5jZSBpcyBwb3NpdGl2ZSBmb3IgdXB3YXJkc355ISAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcCA6OiBBIGRlc2NyaXB0b3IgZm9yIHRoZSBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBjYW4gdHlwZWNhc3QgYW4gQEZUX0dseXBoIHRvIEBGVF9CaXRtYXBHbHlwaCBpZiB5b3UgaGF2ZSAgICAgICAqLworICAvKiAgICBgZ2x5cGgtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQJy4gIFRoaXMgbGV0cyB5b3UgYWNjZXNzICAgKi8KKyAgLyogICAgdGhlIGJpdG1hcCdzIGNvbnRlbnRzIGVhc2lseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgY29ycmVzcG9uZGluZyBwaXhlbCBidWZmZXIgaXMgYWx3YXlzIG93bmVkIGJ5IEBGVF9CaXRtYXBHbHlwaCAgKi8KKyAgLyogICAgYW5kIGlzIHRodXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHdpdGggaXQuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfQml0bWFwR2x5cGhSZWNfCisgIHsKKyAgICBGVF9HbHlwaFJlYyAgcm9vdDsKKyAgICBGVF9JbnQgICAgICAgbGVmdDsKKyAgICBGVF9JbnQgICAgICAgdG9wOworICAgIEZUX0JpdG1hcCAgICBiaXRtYXA7CisKKyAgfSBGVF9CaXRtYXBHbHlwaFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGFuIG91dGxpbmUgZ2x5cGggaW1hZ2UuICBUaGlzICAqLworICAvKiAgICBpcyBhIHN1Yi1jbGFzcyBvZiBARlRfR2x5cGgsIGFuZCBhIHBvaW50ZXIgdG8gQEZUX091dGxpbmVHbHlwaFJlYy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX091dGxpbmVHbHlwaFJlY18qICBGVF9PdXRsaW5lR2x5cGg7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lR2x5cGhSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIGZvciBvdXRsaW5lICh2ZWN0b3JpYWwpIGdseXBoIGltYWdlcy4gIFRoaXMgICAgICAgKi8KKyAgLyogICAgcmVhbGx5IGlzIGEgYHN1Yi1jbGFzcycgb2YgQEZUX0dseXBoUmVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcm9vdCAgICA6OiBUaGUgcm9vdCBARlRfR2x5cGggZmllbGRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdXRsaW5lIDo6IEEgZGVzY3JpcHRvciBmb3IgdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3UgY2FuIHR5cGVjYXN0IGFuIEBGVF9HbHlwaCB0byBARlRfT3V0bGluZUdseXBoIGlmIHlvdSBoYXZlICAgICAgKi8KKyAgLyogICAgYGdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUnLiAgVGhpcyBsZXRzIHlvdSBhY2Nlc3MgICovCisgIC8qICAgIHRoZSBvdXRsaW5lJ3MgY29udGVudCBlYXNpbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQXMgdGhlIG91dGxpbmUgaXMgZXh0cmFjdGVkIGZyb20gYSBnbHlwaCBzbG90LCBpdHMgY29vcmRpbmF0ZXMgYXJlICovCisgIC8qICAgIGV4cHJlc3NlZCBub3JtYWxseSBpbiAyNi42IHBpeGVscywgdW5sZXNzIHRoZSBmbGFnICAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfTE9BRF9OT19TQ0FMRSB3YXMgdXNlZCBpbiBARlRfTG9hZF9HbHlwaCgpIG9yIEBGVF9Mb2FkX0NoYXIoKS4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBvdXRsaW5lJ3MgdGFibGVzIGFyZSBhbHdheXMgb3duZWQgYnkgdGhlIG9iamVjdCBhbmQgYXJlICAgICAgICAqLworICAvKiAgICBkZXN0cm95ZWQgd2l0aCBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9PdXRsaW5lR2x5cGhSZWNfCisgIHsKKyAgICBGVF9HbHlwaFJlYyAgcm9vdDsKKyAgICBGVF9PdXRsaW5lICAgb3V0bGluZTsKKworICB9IEZUX091dGxpbmVHbHlwaFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBleHRyYWN0IGEgZ2x5cGggaW1hZ2UgZnJvbSBhIHNsb3QuICBOb3RlIHRoYXQgICAqLworICAvKiAgICB0aGUgY3JlYXRlZCBARlRfR2x5cGggb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQgd2l0aCBARlRfRG9uZV9HbHlwaC4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzbG90ICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZ2x5cGggOjogQSBoYW5kbGUgdG8gdGhlIGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfR2x5cGgoIEZUX0dseXBoU2xvdCAgc2xvdCwKKyAgICAgICAgICAgICAgICBGVF9HbHlwaCAgICAgKmFnbHlwaCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhfQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGNvcHkgYSBnbHlwaCBpbWFnZS4gIE5vdGUgdGhhdCB0aGUgY3JlYXRlZCAgICAgICovCisgIC8qICAgIEBGVF9HbHlwaCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCB3aXRoIEBGVF9Eb25lX0dseXBoLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNvdXJjZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRhcmdldCA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HbHlwaF9Db3B5KCBGVF9HbHlwaCAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgRlRfR2x5cGggICp0YXJnZXQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRyYW5zZm9ybSBhIGdseXBoIGltYWdlIGlmIGl0cyBmb3JtYXQgaXMgc2NhbGFibGUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hdHJpeCA6OiBBIHBvaW50ZXIgdG8gYSAyeDIgbWF0cml4IHRvIGFwcGx5LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVsdGEgIDo6IEEgcG9pbnRlciB0byBhIDJkIHZlY3RvciB0byBhcHBseS4gIENvb3JkaW5hdGVzIGFyZSAgICAgICovCisgIC8qICAgICAgICAgICAgICBleHByZXNzZWQgaW4gMS82NHRoIG9mIGEgcGl4ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUgKGlmIG5vdCAwLCB0aGUgZ2x5cGggZm9ybWF0IGlzIG5vdCBzY2FsYWJsZSkuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSAyeDIgdHJhbnNmb3JtYXRpb24gbWF0cml4IGlzIGFsc28gYXBwbGllZCB0byB0aGUgZ2x5cGgncyAgICAgICAqLworICAvKiAgICBhZHZhbmNlIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HbHlwaF9UcmFuc2Zvcm0oIEZUX0dseXBoICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBkZWx0YSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhfQkJveF9Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1vZGUgaG93IHRoZSB2YWx1ZXMgb2YgQEZUX0dseXBoX0dldF9DQm94IGFyZSByZXR1cm5lZC4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfQkJPWF9VTlNDQUxFRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgUmV0dXJuIHVuc2NhbGVkIGZvbnQgdW5pdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgUmV0dXJuIHVuZml0dGVkIDI2LjYgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfQkJPWF9HUklERklUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgUmV0dXJuIGdyaWQtZml0dGVkIDI2LjYgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfQkJPWF9UUlVOQ0FURSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgUmV0dXJuIGNvb3JkaW5hdGVzIGluIGludGVnZXIgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfQkJPWF9QSVhFTFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgUmV0dXJuIGdyaWQtZml0dGVkIHBpeGVsIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9HbHlwaF9CQm94X01vZGVfCisgIHsKKyAgICBGVF9HTFlQSF9CQk9YX1VOU0NBTEVEICA9IDAsCisgICAgRlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMgPSAwLAorICAgIEZUX0dMWVBIX0JCT1hfR1JJREZJVCAgID0gMSwKKyAgICBGVF9HTFlQSF9CQk9YX1RSVU5DQVRFICA9IDIsCisgICAgRlRfR0xZUEhfQkJPWF9QSVhFTFMgICAgPSAzCisKKyAgfSBGVF9HbHlwaF9CQm94X01vZGU7CisKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBgRlRfR2x5cGhfQkJveF9Nb2RlJyB2YWx1ZXMgaW5zdGVhZCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9nbHlwaF9iYm94X3Vuc2NhbGVkICAgRlRfR0xZUEhfQkJPWF9VTlNDQUxFRAorI2RlZmluZSBmdF9nbHlwaF9iYm94X3N1YnBpeGVscyAgRlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMKKyNkZWZpbmUgZnRfZ2x5cGhfYmJveF9ncmlkZml0ICAgIEZUX0dMWVBIX0JCT1hfR1JJREZJVAorI2RlZmluZSBmdF9nbHlwaF9iYm94X3RydW5jYXRlICAgRlRfR0xZUEhfQkJPWF9UUlVOQ0FURQorI2RlZmluZSBmdF9nbHlwaF9iYm94X3BpeGVscyAgICAgRlRfR0xZUEhfQkJPWF9QSVhFTFMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX0dldF9DQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIGdseXBoJ3MgYGNvbnRyb2wgYm94Jy4gIFRoZSBjb250cm9sIGJveCBlbmNsb3NlcyBhbGwgdGhlICAqLworICAvKiAgICBvdXRsaW5lJ3MgcG9pbnRzLCBpbmNsdWRpbmcgQsOpemllciBjb250cm9sIHBvaW50cy4gIFRob3VnaCBpdCAgICAgICovCisgIC8qICAgIGNvaW5jaWRlcyB3aXRoIHRoZSBleGFjdCBib3VuZGluZyBib3ggZm9yIG1vc3QgZ2x5cGhzLCBpdCBjYW4gYmUgICAqLworICAvKiAgICBzbGlnaHRseSBsYXJnZXIgaW4gc29tZSBzaXR1YXRpb25zIChsaWtlIHdoZW4gcm90YXRpbmcgYW4gb3V0bGluZSAgKi8KKyAgLyogICAgdGhhdCBjb250YWlucyBCw6l6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCisgIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLworICAvKiAgICBhbmQgYXJjcyBpbiB0aGUgb3V0bGluZS4gIFRvIGdldCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgICAgICAgKi8KKyAgLyogICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGggOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2RlICA6OiBUaGUgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXR1cm5lZCAgICAgKi8KKyAgLyogICAgICAgICAgICAgYm91bmRpbmcgYm94IHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWNib3ggOjogVGhlIGdseXBoIGNvb3JkaW5hdGUgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAgICovCisgIC8qICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiAxLzY0dGggb2YgcGl4ZWxzIGlmIGl0IGlzIGdyaWQtZml0dGVkLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZ2x5cGggb3JpZ2luLCB1c2luZyB0aGUgeX51cHdhcmRzICAqLworICAvKiAgICBjb252ZW50aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQgd2l0aCBARlRfTE9BRF9OT19TQ0FMRSwgYGJib3hfbW9kZScgICAqLworICAvKiAgICBtdXN0IGJlIHNldCB0byBARlRfR0xZUEhfQkJPWF9VTlNDQUxFRCB0byBnZXQgdW5zY2FsZWQgZm9udCAgICAgICAgKi8KKyAgLyogICAgdW5pdHMgaW4gMjYuNiBwaXhlbCBmb3JtYXQuICBUaGUgdmFsdWUgQEZUX0dMWVBIX0JCT1hfU1VCUElYRUxTICAgICovCisgIC8qICAgIGlzIGFub3RoZXIgbmFtZSBmb3IgdGhpcyBjb25zdGFudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIGZvbnQgaXMgdHJpY2t5IGFuZCB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkIHdpdGggICAgICAgICAgICovCisgIC8qICAgIEBGVF9MT0FEX05PX1NDQUxFLCB0aGUgcmVzdWx0aW5nIENCb3ggaXMgbWVhbmluZ2xlc3MuICBUbyBnZXQgICAgICAqLworICAvKiAgICByZWFzb25hYmxlIHZhbHVlcyBmb3IgdGhlIENCb3ggaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlIGdseXBoICAgKi8KKyAgLyogICAgYXQgYSBsYXJnZSBwcGVtIHZhbHVlIChzbyB0aGF0IHRoZSBoaW50aW5nIGluc3RydWN0aW9ucyBjYW4gICAgICAgICovCisgIC8qICAgIHByb3Blcmx5IHNoaWZ0IGFuZCBzY2FsZSB0aGUgc3ViZ2x5cGhzKSwgdGhlbiBleHRyYWN0aW5nIHRoZSBDQm94LCAqLworICAvKiAgICB3aGljaCBjYW4gYmUgZXZlbnR1YWxseSBjb252ZXJ0ZWQgYmFjayB0byBmb250IHVuaXRzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBjb29yZGluYXRlcyBhcmUgZXhjbHVzaXZlLCB3aGljaCBtZWFucyB0aGF0ICAqLworICAvKiAgICBvbmUgY2FuIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGdseXBoIGltYWdlIChiZSBpdCBpbiAgKi8KKyAgLyogICAgaW50ZWdlciBvciAyNi42IHBpeGVscykgYXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB3aWR0aCAgPSBiYm94LnhNYXggLSBiYm94LnhNaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgaGVpZ2h0ID0gYmJveC55TWF4IC0gYmJveC55TWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgYWxzbyB0aGF0IGZvciAyNi42IGNvb3JkaW5hdGVzLCBpZiBgYmJveF9tb2RlJyBpcyBzZXQgdG8gICAgICAqLworICAvKiAgICBARlRfR0xZUEhfQkJPWF9HUklERklULCB0aGUgY29vcmRpbmF0ZXMgd2lsbCBhbHNvIGJlIGdyaWQtZml0dGVkLCAgKi8KKyAgLyogICAgd2hpY2ggY29ycmVzcG9uZHMgdG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBiYm94LnhNaW4gPSBGTE9PUihiYm94LnhNaW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYmJveC55TWluID0gRkxPT1IoYmJveC55TWluKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGJib3gueE1heCA9IENFSUxJTkcoYmJveC54TWF4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBiYm94LnlNYXggPSBDRUlMSU5HKGJib3gueU1heCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gZ2V0IHRoZSBiYm94IGluIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgYGJib3hfbW9kZScgdG8gICAgICAgICAgICovCisgIC8qICAgIEBGVF9HTFlQSF9CQk9YX1RSVU5DQVRFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gZ2V0IHRoZSBiYm94IGluIGdyaWQtZml0dGVkIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgYGJib3hfbW9kZScgICovCisgIC8qICAgIHRvIEBGVF9HTFlQSF9CQk9YX1BJWEVMUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfR2x5cGhfR2V0X0NCb3goIEZUX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBiYm94X21vZGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAqYWNib3ggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX1RvX0JpdG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbnZlcnQgYSBnaXZlbiBnbHlwaCBvYmplY3QgdG8gYSBiaXRtYXAgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRoZV9nbHlwaCAgIDo6IEEgcG9pbnRlciB0byBhIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlbmRlcl9tb2RlIDo6IEFuIGVudW1lcmF0aW9uIHRoYXQgZGVzY3JpYmVzIGhvdyB0aGUgZGF0YSBpcyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICByZW5kZXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9yaWdpbiAgICAgIDo6IEEgcG9pbnRlciB0byBhIHZlY3RvciB1c2VkIHRvIHRyYW5zbGF0ZSB0aGUgZ2x5cGggICAqLworICAvKiAgICAgICAgICAgICAgICAgICBpbWFnZSBiZWZvcmUgcmVuZGVyaW5nLiAgQ2FuIGJlfjAgKGlmIG5vICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24pLiAgVGhlIG9yaWdpbiBpcyBleHByZXNzZWQgaW4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIDI2LjYgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVzdHJveSAgICAgOjogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9yaWdpbmFsIGdseXBoICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGltYWdlIHNob3VsZCBiZSBkZXN0cm95ZWQgYnkgdGhpcyBmdW5jdGlvbi4gIEl0IGlzICAqLworICAvKiAgICAgICAgICAgICAgICAgICBuZXZlciBkZXN0cm95ZWQgaW4gY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiB0aGUgZ2x5cGggZm9ybWF0IGlzbid0IHNjYWxhYmxlLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBnbHlwaCBpbWFnZSBpcyB0cmFuc2xhdGVkIHdpdGggdGhlIGBvcmlnaW4nIHZlY3RvciBiZWZvcmUgICAgICAqLworICAvKiAgICByZW5kZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGFuIEBGVF9HbHlwaCBoYW5kbGUsIHRoYXQgd2lsbCAqLworICAvKiAgICBiZSBfcmVwbGFjZWRfIGJ5IHRoaXMgZnVuY3Rpb24gKHdpdGggbmV3bHkgYWxsb2NhdGVkIGRhdGEpLiAgICAgICAgKi8KKyAgLyogICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgdXNlIChvbWl0dGluZyBlcnJvciBoYW5kbGluZyk6ICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9HbHlwaCAgICAgICAgZ2x5cGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgRlRfQml0bWFwR2x5cGggIGdseXBoX2JpdG1hcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gbG9hZCBnbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGVycm9yID0gRlRfTG9hZF9DaGFyKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9ERUZBVVQgKTsgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gZXh0cmFjdCBnbHlwaCBpbWFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGVycm9yID0gRlRfR2V0X0dseXBoKCBmYWNlLT5nbHlwaCwgJmdseXBoICk7ICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gY29udmVydCB0byBhIGJpdG1hcCAoZGVmYXVsdCByZW5kZXIgbW9kZSArIGRlc3Ryb3lpbmcgb2xkKSAgKi8KKyAgLyogICAgICAgIGlmICggZ2x5cGgtPmZvcm1hdCAhPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQICkgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBlcnJvciA9IEZUX0dseXBoX1RvX0JpdG1hcCggJmdseXBoLCBGVF9SRU5ERVJfTU9ERV9OT1JNQUwsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIGlmICggZXJyb3IgKSAvLyBgZ2x5cGgnIHVuY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gYWNjZXNzIGJpdG1hcCBjb250ZW50IGJ5IHR5cGVjYXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGdseXBoX2JpdG1hcCA9IChGVF9CaXRtYXBHbHlwaClnbHlwaDsgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gZG8gZnVubnkgc3R1ZmYgd2l0aCBpdCwgbGlrZSBibGl0dGluZy9kcmF3aW5nICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLy8gZGlzY2FyZCBnbHlwaCBpbWFnZSAoYml0bWFwIG9yIG5vdCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX0RvbmVfR2x5cGgoIGdseXBoICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhlcmUgYW5vdGhlciBleGFtcGxlLCBhZ2FpbiB3aXRob3V0IGVycm9yIGhhbmRsaW5nOiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgRlRfR2x5cGggIGdseXBoc1tNQVhfR0xZUEhTXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBmb3IgKCBpZHggPSAwOyBpIDwgTUFYX0dMWVBIUzsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGlkeCwgRlRfTE9BRF9ERUZBVUxUICkgfHwgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBGVF9HZXRfR2x5cGggKCBmYWNlLT5nbHlwaCwgJmdseXBoW2lkeF0gKTsgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBmb3IgKCBpZHggPSAwOyBpIDwgTUFYX0dMWVBIUzsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgRlRfR2x5cGggIGJpdG1hcCA9IGdseXBoc1tpZHhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAvLyBhZnRlciB0aGlzIGNhbGwsIGBiaXRtYXAnIG5vIGxvbmdlciBwb2ludHMgaW50byAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgLy8gdGhlIGBnbHlwaHMnIGFycmF5IChhbmQgdGhlIG9sZCB2YWx1ZSBpc24ndCBkZXN0cm95ZWQpICAgICovCisgIC8qICAgICAgICAgIEZUX0dseXBoX1RvX0JpdG1hcCggJmJpdG1hcCwgRlRfUkVOREVSX01PREVfTU9OTywgMCwgMCApOyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBGVF9Eb25lX0dseXBoKCBiaXRtYXAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBmb3IgKCBpZHggPSAwOyBpIDwgTUFYX0dMWVBIUzsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBGVF9Eb25lX0dseXBoKCBnbHlwaHNbaWR4XSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfVG9fQml0bWFwKCBGVF9HbHlwaCogICAgICAgdGhlX2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgICAgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBkZXN0cm95ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZXN0cm95IGEgZ2l2ZW4gZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaCA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX0RvbmVfR2x5cGgoIEZUX0dseXBoICBnbHlwaCApOworCisgIC8qICovCisKKworICAvKiBvdGhlciBoZWxwZnVsIGZ1bmN0aW9ucyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvbXB1dGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NYXRyaXhfTXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQZXJmb3JtIHRoZSBtYXRyaXggb3BlcmF0aW9uIGBiID0gYSpiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IEEgcG9pbnRlciB0byBtYXRyaXggYGEnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiIDo6IEEgcG9pbnRlciB0byBtYXRyaXggYGInLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYGEnIG9yIGBiJyBpcyB6ZXJvLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX01hdHJpeF9NdWx0aXBseSggY29uc3QgRlRfTWF0cml4KiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICAgICAgICBiICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NYXRyaXhfSW52ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnZlcnQgYSAyeDIgbWF0cml4LiAgUmV0dXJuIGFuIGVycm9yIGlmIGl0IGNhbid0IGJlIGludmVydGVkLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXRyaXggOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgbWF0cml4LiAgUmVtYWlucyB1bnRvdWNoZWQgaW4gICAgKi8KKyAgLyogICAgICAgICAgICAgIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTWF0cml4X0ludmVydCggRlRfTWF0cml4KiAgbWF0cml4ICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUR0xZUEhfSF9fICovCisKKworLyogRU5EICovCisKKworLyogTG9jYWwgVmFyaWFibGVzOiAqLworLyogY29kaW5nOiB1dGYtOCAgICAqLworLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRneHZhbC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRneHZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOWFjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGd4dmFsLmgKQEAgLTAsMCArMSwzNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z3h2YWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVEdYVkFMX0hfXworI2RlZmluZSBfX0ZUR1hWQUxfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGd4X3ZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRydWVUeXBlR1gvQUFUIFZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIEFQSSB0byB2YWxpZGF0ZSBUcnVlVHlwZUdYL0FBVCB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHRvIHZhbGlkYXRlICAgICAqLworICAvKiAgICBzb21lIFRydWVUeXBlR1ggdGFibGVzIChmZWF0LCBtb3J0LCBtb3J4LCBic2xuLCBqdXN0LCBrZXJuLCBvcGJkLCAgKi8KKyAgLyogICAgdHJhaywgcHJvcCwgbGNhcikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1RydWVUeXBlR1hfRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NsYXNzaWNLZXJuX0ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVkFMSURBVEVfR1hfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZBTElEQVRFX0dYWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9WQUxJREFURV9DS0VSTlhYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdhcm5pbmc6IFVzZSBGVF9WQUxJREFURV9YWFggdG8gdmFsaWRhdGUgYSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBneHZhbGlkIGRldmVsb3BlcnMuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGVF9WQUxJREFURV9mZWF0X0lOREVYICAgICAwCisjZGVmaW5lIEZUX1ZBTElEQVRFX21vcnRfSU5ERVggICAgIDEKKyNkZWZpbmUgRlRfVkFMSURBVEVfbW9yeF9JTkRFWCAgICAgMgorI2RlZmluZSBGVF9WQUxJREFURV9ic2xuX0lOREVYICAgICAzCisjZGVmaW5lIEZUX1ZBTElEQVRFX2p1c3RfSU5ERVggICAgIDQKKyNkZWZpbmUgRlRfVkFMSURBVEVfa2Vybl9JTkRFWCAgICAgNQorI2RlZmluZSBGVF9WQUxJREFURV9vcGJkX0lOREVYICAgICA2CisjZGVmaW5lIEZUX1ZBTElEQVRFX3RyYWtfSU5ERVggICAgIDcKKyNkZWZpbmUgRlRfVkFMSURBVEVfcHJvcF9JTkRFWCAgICAgOAorI2RlZmluZSBGVF9WQUxJREFURV9sY2FyX0lOREVYICAgICA5CisjZGVmaW5lIEZUX1ZBTElEQVRFX0dYX0xBU1RfSU5ERVggIEZUX1ZBTElEQVRFX2xjYXJfSU5ERVgKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9WQUxJREFURV9HWF9MRU5HVEgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBudW1iZXIgb2YgdGFibGVzIGNoZWNrZWQgaW4gdGhpcyBtb2R1bGUuICBVc2UgaXQgYXMgYSBwYXJhbWV0ZXIKKyAgICogICBmb3IgdGhlIGB0YWJsZS1sZW5ndGgnIGFyZ3VtZW50IG9mIGZ1bmN0aW9uIEBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlLgorICAgKi8KKyNkZWZpbmUgRlRfVkFMSURBVEVfR1hfTEVOR1RIICAgICAoRlRfVkFMSURBVEVfR1hfTEFTVF9JTkRFWCArIDEpCisKKyAgLyogKi8KKworICAvKiBVcCB0byAweDEwMDAgaXMgdXNlZCBieSBvdHZhbGlkLgorICAgICBPeDJ4eHggaXMgcmVzZXJ2ZWQgZm9yIGZlYXR1cmUgT1QgZXh0ZW5zaW9uLiAqLworI2RlZmluZSBGVF9WQUxJREFURV9HWF9TVEFSVCAweDQwMDAKKyNkZWZpbmUgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIHRhZyApICAgICAgICAgICAgICAgICAgXAorICAoIEZUX1ZBTElEQVRFX0dYX1NUQVJUIDw8IEZUX1ZBTElEQVRFXyMjdGFnIyNfSU5ERVggKQorCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGVudW06CisgICogICAgRlRfVkFMSURBVEVfR1hYWFgKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX1RydWVUeXBlR1hfVmFsaWRhdGUgdG8KKyAgKiAgICBpbmRpY2F0ZSB3aGljaCBUcnVlVHlwZUdYL0FBVCBUeXBlIHRhYmxlcyBzaG91bGQgYmUgdmFsaWRhdGVkLgorICAqCisgICogQHZhbHVlczoKKyAgKiAgICBGVF9WQUxJREFURV9mZWF0IDo6CisgICogICAgICBWYWxpZGF0ZSBgZmVhdCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9tb3J0IDo6CisgICogICAgICBWYWxpZGF0ZSBgbW9ydCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9tb3J4IDo6CisgICogICAgICBWYWxpZGF0ZSBgbW9yeCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9ic2xuIDo6CisgICogICAgICBWYWxpZGF0ZSBgYnNsbicgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9qdXN0IDo6CisgICogICAgICBWYWxpZGF0ZSBganVzdCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9rZXJuIDo6CisgICogICAgICBWYWxpZGF0ZSBga2VybicgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9vcGJkIDo6CisgICogICAgICBWYWxpZGF0ZSBgb3BiZCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV90cmFrIDo6CisgICogICAgICBWYWxpZGF0ZSBgdHJhaycgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9wcm9wIDo6CisgICogICAgICBWYWxpZGF0ZSBgcHJvcCcgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9sY2FyIDo6CisgICogICAgICBWYWxpZGF0ZSBgbGNhcicgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9HWCA6OgorICAqICAgICAgVmFsaWRhdGUgYWxsIFRydWVUeXBlR1ggdGFibGVzIChmZWF0LCBtb3J0LCBtb3J4LCBic2xuLCBqdXN0LCBrZXJuLAorICAqICAgICAgb3BiZCwgdHJhaywgcHJvcCBhbmQgbGNhcikuCisgICoKKyAgKi8KKworI2RlZmluZSBGVF9WQUxJREFURV9mZWF0ICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggZmVhdCApCisjZGVmaW5lIEZUX1ZBTElEQVRFX21vcnQgIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBtb3J0ICkKKyNkZWZpbmUgRlRfVkFMSURBVEVfbW9yeCAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIG1vcnggKQorI2RlZmluZSBGVF9WQUxJREFURV9ic2xuICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggYnNsbiApCisjZGVmaW5lIEZUX1ZBTElEQVRFX2p1c3QgIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBqdXN0ICkKKyNkZWZpbmUgRlRfVkFMSURBVEVfa2VybiAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIGtlcm4gKQorI2RlZmluZSBGVF9WQUxJREFURV9vcGJkICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggb3BiZCApCisjZGVmaW5lIEZUX1ZBTElEQVRFX3RyYWsgIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCB0cmFrICkKKyNkZWZpbmUgRlRfVkFMSURBVEVfcHJvcCAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIHByb3AgKQorI2RlZmluZSBGVF9WQUxJREFURV9sY2FyICBGVF9WQUxJREFURV9HWF9CSVRGSUVMRCggbGNhciApCisKKyNkZWZpbmUgRlRfVkFMSURBVEVfR1ggICggRlRfVkFMSURBVEVfZmVhdCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfbW9ydCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfbW9yeCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfYnNsbiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfanVzdCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfa2VybiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfb3BiZCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfdHJhayB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfcHJvcCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfbGNhciApCisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFZhbGlkYXRlIHZhcmlvdXMgVHJ1ZVR5cGVHWCB0YWJsZXMgdG8gYXNzdXJlIHRoYXQgYWxsIG9mZnNldHMgYW5kCisgICogICAgaW5kaWNlcyBhcmUgdmFsaWQuICBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdAorICAqICAgIGFjdHVhbGx5IGRvZXMgdGhlIHRleHQgbGF5b3V0IGNhbiBhY2Nlc3MgdGhvc2UgdGFibGVzIHdpdGhvdXQKKyAgKiAgICBlcnJvciBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgICBmYWNlIDo6CisgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICoKKyAgKiAgICB2YWxpZGF0aW9uX2ZsYWdzIDo6CisgICogICAgICAgQSBiaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgdGhlIHRhYmxlcyB0byBiZSB2YWxpZGF0ZWQuICBTZWUKKyAgKiAgICAgICBARlRfVkFMSURBVEVfR1hYWFggZm9yIHBvc3NpYmxlIHZhbHVlcy4KKyAgKgorICAqICAgIHRhYmxlX2xlbmd0aCA6OgorICAqICAgICAgIFRoZSBzaXplIG9mIHRoZSBgdGFibGVzJyBhcnJheS4gIE5vcm1hbGx5LCBARlRfVkFMSURBVEVfR1hfTEVOR1RICisgICogICAgICAgc2hvdWxkIGJlIHBhc3NlZC4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICAgdGFibGVzIDo6CisgICogICAgICAgVGhlIGFycmF5IHdoZXJlIGFsbCB2YWxpZGF0ZWQgc2ZudCB0YWJsZXMgYXJlIHN0b3JlZC4KKyAgKiAgICAgICBUaGUgYXJyYXkgaXRzZWxmIG11c3QgYmUgYWxsb2NhdGVkIGJ5IGEgY2xpZW50LgorICAqCisgICogQHJldHVybjoKKyAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICoKKyAgKiBAbm90ZToKKyAgKiAgIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIFRydWVUeXBlR1ggZm9udHMsIHJldHVybmluZyBhbiBlcnJvcgorICAqICAgb3RoZXJ3aXNlLgorICAqCisgICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5CisgICogICBlYWNoIGB0YWJsZXMnIGVsZW1lbnQsIGJ5IGNhbGxpbmcgQEZUX1RydWVUeXBlR1hfRnJlZS4gIEEgTlVMTCB2YWx1ZQorICAqICAgaW5kaWNhdGVzIHRoYXQgdGhlIHRhYmxlIGVpdGhlciBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LCB0aGUKKyAgKiAgIGFwcGxpY2F0aW9uIGhhc24ndCBhc2tlZCBmb3IgdmFsaWRhdGlvbiwgb3IgdGhlIHZhbGlkYXRvciBkb2Vzbid0IGhhdmUKKyAgKiAgIHRoZSBhYmlsaXR5IHRvIHZhbGlkYXRlIHRoZSBzZm50IHRhYmxlLgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICB2YWxpZGF0aW9uX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGVzW0ZUX1ZBTElEQVRFX0dYX0xFTkdUSF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICB0YWJsZV9sZW5ndGggKTsKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBmdW5jdGlvbjoKKyAgKiAgICBGVF9UcnVlVHlwZUdYX0ZyZWUKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBGcmVlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IFRydWVUeXBlR1ggdmFsaWRhdG9yLgorICAqCisgICogQGlucHV0OgorICAqICAgIGZhY2UgOjoKKyAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgKgorICAqICAgIHRhYmxlIDo6CisgICogICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAgKiAgICAgICBARlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZS4KKyAgKgorICAqIEBub3RlOgorICAqICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieQorICAqICAgQEZUX1RydWVUeXBlR1hfVmFsaWRhdGUgb25seS4KKyAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfVHJ1ZVR5cGVHWF9GcmVlKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKTsKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBlbnVtOgorICAqICAgIEZUX1ZBTElEQVRFX0NLRVJOWFhYCisgICoKKyAgKiBAZGVzY3JpcHRpb246CisgICogICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZQorICAqICAgIHRvIGluZGljYXRlIHRoZSBjbGFzc2ljIGtlcm4gZGlhbGVjdCBvciBkaWFsZWN0cy4gIElmIHRoZSBzZWxlY3RlZAorICAqICAgIHR5cGUgZG9lc24ndCBmaXQsIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSByZWdhcmRzIHRoZSB0YWJsZSBhcworICAqICAgIGludmFsaWQuCisgICoKKyAgKiBAdmFsdWVzOgorICAqICAgIEZUX1ZBTElEQVRFX01TIDo6CisgICogICAgICBIYW5kbGUgdGhlIGBrZXJuJyB0YWJsZSBhcyBhIGNsYXNzaWMgTWljcm9zb2Z0IGtlcm4gdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9BUFBMRSA6OgorICAqICAgICAgSGFuZGxlIHRoZSBga2VybicgdGFibGUgYXMgYSBjbGFzc2ljIEFwcGxlIGtlcm4gdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9DS0VSTiA6OgorICAqICAgICAgSGFuZGxlIHRoZSBga2VybicgYXMgZWl0aGVyIGNsYXNzaWMgQXBwbGUgb3IgTWljcm9zb2Z0IGtlcm4gdGFibGUuCisgICovCisjZGVmaW5lIEZUX1ZBTElEQVRFX01TICAgICAoIEZUX1ZBTElEQVRFX0dYX1NUQVJUIDw8IDAgKQorI2RlZmluZSBGVF9WQUxJREFURV9BUFBMRSAgKCBGVF9WQUxJREFURV9HWF9TVEFSVCA8PCAxICkKKworI2RlZmluZSBGVF9WQUxJREFURV9DS0VSTiAgKCBGVF9WQUxJREFURV9NUyB8IEZUX1ZBTElEQVRFX0FQUExFICkKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBmdW5jdGlvbjoKKyAgKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFZhbGlkYXRlIGNsYXNzaWMgKDE2LWJpdCBmb3JtYXQpIGtlcm4gdGFibGUgdG8gYXNzdXJlIHRoYXQgdGhlIG9mZnNldHMKKyAgKiAgICBhbmQgaW5kaWNlcyBhcmUgdmFsaWQuICBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdAorICAqICAgIGFjdHVhbGx5IGRvZXMgdGhlIHRleHQgbGF5b3V0IGNhbiBhY2Nlc3MgdGhvc2UgdGFibGVzIHdpdGhvdXQgZXJyb3IKKyAgKiAgICBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS4KKyAgKgorICAqICAgIFRoZSBga2VybicgdGFibGUgdmFsaWRhdG9yIGluIEBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlIGRlYWxzIHdpdGggYm90aAorICAqICAgIHRoZSBuZXcgMzItYml0IGZvcm1hdCBhbmQgdGhlIGNsYXNzaWMgMTYtYml0IGZvcm1hdCwgd2hpbGUKKyAgKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSBvbmx5IHN1cHBvcnRzIHRoZSBjbGFzc2ljIDE2LWJpdCBmb3JtYXQuCisgICoKKyAgKiBAaW5wdXQ6CisgICogICAgZmFjZSA6OgorICAqICAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAqCisgICogICAgdmFsaWRhdGlvbl9mbGFncyA6OgorICAqICAgICAgIEEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSBkaWFsZWN0IHRvIGJlIHZhbGlkYXRlZC4gIFNlZQorICAqICAgICAgIEBGVF9WQUxJREFURV9DS0VSTlhYWCBmb3IgcG9zc2libGUgdmFsdWVzLgorICAqCisgICogQG91dHB1dDoKKyAgKiAgICBja2Vybl90YWJsZSA6OgorICAqICAgICAgIEEgcG9pbnRlciB0byB0aGUga2VybiB0YWJsZS4KKyAgKgorICAqIEByZXR1cm46CisgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5CisgICogICBgY2tlcm5fdGFibGUnLCBieSBjYWxsaW5nIEBGVF9DbGFzc2ljS2Vybl9GcmVlLiAgQSBOVUxMIHZhbHVlCisgICogICBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFibGUgZG9lc24ndCBleGlzdCBpbiB0aGUgZm9udC4KKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZhbGlkYXRpb25fZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKmNrZXJuX3RhYmxlICk7CisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICAgRlRfQ2xhc3NpY0tlcm5fRnJlZQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgY2xhc3NpYyBLZXJuIHZhbGlkYXRvci4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgICBmYWNlIDo6CisgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICoKKyAgKiAgICB0YWJsZSA6OgorICAqICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQgYnkKKyAgKiAgICAgICBARlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUuCisgICoKKyAgKiBAbm90ZToKKyAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAgKiAgIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSBvbmx5LgorICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9DbGFzc2ljS2Vybl9GcmVlKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgIHRhYmxlICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUR1hWQUxfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGd6aXAuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0Z3ppcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTUzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGd6aXAuaApAQCAtMCwwICsxLDE0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRnemlwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRHWklQX0hfXworI2RlZmluZSBfX0ZUR1pJUF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGd6aXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdaSVAgU3RyZWFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzaW5nIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgR3ppcC1zcGVjaWZpYyBmdW5jdGlvbnMuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBmdW5jdGlvbjoKKyAgKiAgIEZUX1N0cmVhbV9PcGVuR3ppcAorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgT3BlbiBhIG5ldyBzdHJlYW0gdG8gcGFyc2UgZ3ppcC1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCisgICogICBtYWlubHkgdXNlZCB0byBzdXBwb3J0IHRoZSBjb21wcmVzc2VkIGAqLnBjZi5neicgZm9udHMgdGhhdCBjb21lCisgICogICB3aXRoIFhGcmVlODYuCisgICoKKyAgKiBAaW5wdXQ6CisgICogICBzdHJlYW0gOjoKKyAgKiAgICAgVGhlIHRhcmdldCBlbWJlZGRpbmcgc3RyZWFtLgorICAqCisgICogICBzb3VyY2UgOjoKKyAgKiAgICAgVGhlIHNvdXJjZSBzdHJlYW0uCisgICoKKyAgKiBAcmV0dXJuOgorICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgVGhlIHNvdXJjZSBzdHJlYW0gbXVzdCBiZSBvcGVuZWQgX2JlZm9yZV8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAqCisgICogICBDYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgbmV3IHN0cmVhbSB3aWxsCisgICogICAqbm90KiBjYWxsIGBGVF9TdHJlYW1fQ2xvc2UnIG9uIHRoZSBzb3VyY2Ugc3RyZWFtLiAgTm9uZSBvZiB0aGUgc3RyZWFtCisgICogICBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuCisgICoKKyAgKiAgIFRoZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYyBhbmQgcmVzZXRzIHRoZSBkZWNvbXByZXNzaW9uCisgICogICBwcm9jZXNzIGVhY2ggdGltZSBzZWVraW5nIGJhY2t3YXJkcyBpcyBuZWVkZWQgd2l0aGluIHRoZSBzdHJlYW0uCisgICoKKyAgKiAgIEluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBnemlwIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzCisgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdworICAqICAgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgZ3ppcHBlZCBzdHJlYW0gZnJvbQorICAqICAgaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgKgorICAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBpZiB5b3VyIGJ1aWxkCisgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX09wZW5HemlwKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHNvdXJjZSApOworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICBGVF9HemlwX1VuY29tcHJlc3MKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgIERlY29tcHJlc3MgYSB6aXBwZWQgaW5wdXQgYnVmZmVyIGludG8gYW4gb3V0cHV0IGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24KKyAgKiAgIGlzIG1vZGVsZWQgYWZ0ZXIgemxpYidzIGB1bmNvbXByZXNzJyBmdW5jdGlvbi4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgIG1lbW9yeSA6OgorICAqICAgICBBIEZyZWVUeXBlIG1lbW9yeSBoYW5kbGUuCisgICoKKyAgKiAgIGlucHV0IDo6CisgICogICAgIFRoZSBpbnB1dCBidWZmZXIuCisgICoKKyAgKiAgIGlucHV0X2xlbiA6OgorICAqICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIuCisgICoKKyAgKiBAb3V0cHV0OgorICAqICAgb3V0cHV0OjoKKyAgKiAgICAgVGhlIG91dHB1dCBidWZmZXIuCisgICoKKyAgKiBAaW5vdXQ6CisgICogICBvdXRwdXRfbGVuIDo6CisgICogICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgdGhpcyBpcyB0aGUgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICogICAgIG91dHB1dCBidWZmZXIsIHdoaWNoIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVudGlyZQorICAqICAgICB1bmNvbXByZXNzZWQgZGF0YSAoc28gdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgYmUKKyAgKiAgICAga25vd24gaW4gYWR2YW5jZSkuICBBZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgYG91dHB1dF9sZW4nIGlzIHRoZQorICAqICAgICBzaXplIG9mIHRoZSB1c2VkIGRhdGEgaW4gYG91dHB1dCcuCisgICoKKyAgKiBAcmV0dXJuOgorICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBpZiB5b3VyIGJ1aWxkCisgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR3ppcF9VbmNvbXByZXNzKCBGVF9NZW1vcnkgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgIG91dHB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQnl0ZSogIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpbnB1dF9sZW4gKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRHWklQX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRpbWFnZS5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRpbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjI4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGltYWdlLmgKQEAgLTAsMCArMSwxMjE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGltYWdlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgZ2x5cGggaW1hZ2UgZm9ybWF0cyBhbmQgZGVmYXVsdCByYXN0ZXIgaW50ZXJmYWNlICAgICAgICAgICAgKi8KKy8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGU6IEEgYHJhc3RlcicgaXMgc2ltcGx5IGEgc2Nhbi1saW5lIGNvbnZlcnRlciwgdXNlZCB0byByZW5kZXIgICAgICAqLworICAvKiAgICAgICBGVF9PdXRsaW5lcyBpbnRvIEZUX0JpdG1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVElNQUdFX0hfXworI2RlZmluZSBfX0ZUSU1BR0VfSF9fCisKKworICAvKiBfU1RBTkRBTE9ORV8gaXMgZnJvbSBmdGdyYXlzLmMgKi8KKyNpZm5kZWYgX1NUQU5EQUxPTkVfCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmFzaWNfdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSB0eXBlIEZUX1BvcyBpcyB1c2VkIHRvIHN0b3JlIHZlY3RvcmlhbCBjb29yZGluYXRlcy4gIERlcGVuZGluZyAqLworICAvKiAgICBvbiB0aGUgY29udGV4dCwgdGhlc2UgY2FuIHJlcHJlc2VudCBkaXN0YW5jZXMgaW4gaW50ZWdlciBmb250ICAgICAgKi8KKyAgLyogICAgdW5pdHMsIG9yIDE2LjE2LCBvciAyNi42IGZpeGVkLXBvaW50IHBpeGVsIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBsb25nICBGVF9Qb3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9WZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBhIDJEIHZlY3RvcjsgY29vcmRpbmF0ZXMgYXJlIG9mICAgKi8KKyAgLyogICAgdGhlIEZUX1BvcyB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeCA6OiBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHkgOjogVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1ZlY3Rvcl8KKyAgeworICAgIEZUX1BvcyAgeDsKKyAgICBGVF9Qb3MgIHk7CisKKyAgfSBGVF9WZWN0b3I7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgYW4gb3V0bGluZSdzIGJvdW5kaW5nIGJveCwgaS5lLiwgdGhlICAgICAgKi8KKyAgLyogICAgY29vcmRpbmF0ZXMgb2YgaXRzIGV4dHJlbWEgaW4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICAgICAgICAgICovCisgIC8qICAgIGRpcmVjdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhNaW4gOjogVGhlIGhvcml6b250YWwgbWluaW11bSAobGVmdC1tb3N0KS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeU1pbiA6OiBUaGUgdmVydGljYWwgbWluaW11bSAoYm90dG9tLW1vc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4TWF4IDo6IFRoZSBob3Jpem9udGFsIG1heGltdW0gKHJpZ2h0LW1vc3QpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHlNYXggOjogVGhlIHZlcnRpY2FsIG1heGltdW0gKHRvcC1tb3N0KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBib3VuZGluZyBib3ggaXMgc3BlY2lmaWVkIHdpdGggdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsb3dlciAgICAqLworICAvKiAgICBsZWZ0IGFuZCB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLiAgSW4gUG9zdFNjcmlwdCwgdGhvc2UgdmFsdWVzIGFyZSAgKi8KKyAgLyogICAgb2Z0ZW4gY2FsbGVkIChsbHgsbGx5KSBhbmQgKHVyeCx1cnkpLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgeU1pbicgaXMgbmVnYXRpdmUsIHRoaXMgdmFsdWUgZ2l2ZXMgdGhlIGdseXBoJ3MgZGVzY2VuZGVyLiAgICAgKi8KKyAgLyogICAgT3RoZXJ3aXNlLCB0aGUgZ2x5cGggZG9lc24ndCBkZXNjZW5kIGJlbG93IHRoZSBiYXNlbGluZS4gICAgICAgICAgICovCisgIC8qICAgIFNpbWlsYXJseSwgaWYgYHltYXgnIGlzIHBvc2l0aXZlLCB0aGlzIHZhbHVlIGdpdmVzIHRoZSBnbHlwaCdzICAgICAqLworICAvKiAgICBhc2NlbmRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGB4TWluJyBnaXZlcyB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBmcm9tIHRoZSBnbHlwaCdzIG9yaWdpbiB0byAgICAqLworICAvKiAgICB0aGUgbGVmdCBlZGdlIG9mIHRoZSBnbHlwaCdzIGJvdW5kaW5nIGJveC4gIElmIGB4TWluJyBpcyBuZWdhdGl2ZSwgKi8KKyAgLyogICAgdGhlIGdseXBoIGV4dGVuZHMgdG8gdGhlIGxlZnQgb2YgdGhlIG9yaWdpbi4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfQkJveF8KKyAgeworICAgIEZUX1BvcyAgeE1pbiwgeU1pbjsKKyAgICBGVF9Qb3MgIHhNYXgsIHlNYXg7CisKKyAgfSBGVF9CQm94OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUGl4ZWxfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQgb2YgcGl4ZWxzIGluIGEgICAgICovCisgIC8qICAgIGdpdmVuIGJpdG1hcC4gIE5vdGUgdGhhdCBhZGRpdGlvbmFsIGZvcm1hdHMgbWF5IGJlIGFkZGVkIGluIHRoZSAgICAqLworICAvKiAgICBmdXR1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QSVhFTF9NT0RFX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBWYWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QSVhFTF9NT0RFX01PTk8gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIG1vbm9jaHJvbWUgYml0bWFwLCB1c2luZyAxfmJpdCBwZXIgcGl4ZWwuICBOb3RlIHRoYXQgcGl4ZWxzICAgICovCisgIC8qICAgICAgYXJlIHN0b3JlZCBpbiBtb3N0LXNpZ25pZmljYW50IG9yZGVyIChNU0IpLCB3aGljaCBtZWFucyB0aGF0ICAgICAqLworICAvKiAgICAgIHRoZSBsZWZ0LW1vc3QgcGl4ZWwgaW4gYSBieXRlIGhhcyB2YWx1ZSAxMjguICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEFuIDgtYml0IGJpdG1hcCwgZ2VuZXJhbGx5IHVzZWQgdG8gcmVwcmVzZW50IGFudGktYWxpYXNlZCBnbHlwaCAgKi8KKyAgLyogICAgICBpbWFnZXMuICBFYWNoIHBpeGVsIGlzIHN0b3JlZCBpbiBvbmUgYnl0ZS4gIE5vdGUgdGhhdCB0aGUgbnVtYmVyICovCisgIC8qICAgICAgb2YgYGdyYXknIGxldmVscyBpcyBzdG9yZWQgaW4gdGhlIGBudW1fZ3JheXMnIGZpZWxkIG9mIHRoZSAgICAgICAqLworICAvKiAgICAgIEBGVF9CaXRtYXAgc3RydWN0dXJlIChpdCBnZW5lcmFsbHkgaXMgMjU2KS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWTIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgMi1iaXQgcGVyIHBpeGVsIGJpdG1hcCwgdXNlZCB0byByZXByZXNlbnQgZW1iZWRkZWQgICAgICAgICAgICAgKi8KKyAgLyogICAgICBhbnRpLWFsaWFzZWQgYml0bWFwcyBpbiBmb250IGZpbGVzIGFjY29yZGluZyB0byB0aGUgT3BlblR5cGUgICAgICovCisgIC8qICAgICAgc3BlY2lmaWNhdGlvbi4gIFdlIGhhdmVuJ3QgZm91bmQgYSBzaW5nbGUgZm9udCB1c2luZyB0aGlzICAgICAgICAqLworICAvKiAgICAgIGZvcm1hdCwgaG93ZXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWTQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgNC1iaXQgcGVyIHBpeGVsIGJpdG1hcCwgcmVwcmVzZW50aW5nIGVtYmVkZGVkIGFudGktYWxpYXNlZCAgICAgKi8KKyAgLyogICAgICBiaXRtYXBzIGluIGZvbnQgZmlsZXMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICovCisgIC8qICAgICAgV2UgaGF2ZW4ndCBmb3VuZCBhIHNpbmdsZSBmb250IHVzaW5nIHRoaXMgZm9ybWF0LCBob3dldmVyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUElYRUxfTU9ERV9MQ0QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQW4gOC1iaXQgYml0bWFwLCByZXByZXNlbnRpbmcgUkdCIG9yIEJHUiBkZWNpbWF0ZWQgZ2x5cGggaW1hZ2VzICAqLworICAvKiAgICAgIHVzZWQgZm9yIGRpc3BsYXkgb24gTENEIGRpc3BsYXlzOyB0aGUgYml0bWFwIGlzIHRocmVlIHRpbWVzICAgICAgKi8KKyAgLyogICAgICB3aWRlciB0aGFuIHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZS4gIFNlZSBhbHNvICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX1JFTkRFUl9NT0RFX0xDRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUElYRUxfTU9ERV9MQ0RfViA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQW4gOC1iaXQgYml0bWFwLCByZXByZXNlbnRpbmcgUkdCIG9yIEJHUiBkZWNpbWF0ZWQgZ2x5cGggaW1hZ2VzICAqLworICAvKiAgICAgIHVzZWQgZm9yIGRpc3BsYXkgb24gcm90YXRlZCBMQ0QgZGlzcGxheXM7IHRoZSBiaXRtYXAgaXMgdGhyZWUgICAgKi8KKyAgLyogICAgICB0aW1lcyB0YWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwgZ2x5cGggaW1hZ2UuICBTZWUgYWxzbyAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX1JFTkRFUl9NT0RFX0xDRF9WLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUElYRUxfTU9ERV9CR1JBIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQW4gaW1hZ2Ugd2l0aCBmb3VyIDgtYml0IGNoYW5uZWxzIHBlciBwaXhlbCwgcmVwcmVzZW50aW5nIGEgICAgICAqLworICAvKiAgICAgIGNvbG9yIGltYWdlIChzdWNoIGFzIGVtb3RpY29ucykgd2l0aCBhbHBoYSBjaGFubmVsLiAgRm9yIGVhY2ggICAgKi8KKyAgLyogICAgICBwaXhlbCwgdGhlIGZvcm1hdCBpcyBCR1JBLCB3aGljaCBtZWFucywgdGhlIGJsdWUgY2hhbm5lbCBjb21lcyAgICovCisgIC8qICAgICAgZmlyc3QgaW4gbWVtb3J5LiAgVGhlIGNvbG9yIGNoYW5uZWxzIGFyZSBwcmUtbXVsdGlwbGllZCBhbmQgaW4gICAqLworICAvKiAgICAgIHRoZSBzUkdCIGNvbG9yc3BhY2UuICBGb3IgZXhhbXBsZSwgZnVsbCByZWQgYXQgaGFsZi10cmFuc2x1Y2VudCAgKi8KKyAgLyogICAgICBvcGFjaXR5IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgYDAwLDAwLDgwLDgwJywgbm90IGAwMCwwMCxGRiw4MCcuICovCisgIC8qICAgICAgU2VlIGFsc28gQEZUX0xPQURfQ09MT1IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9QaXhlbF9Nb2RlXworICB7CisgICAgRlRfUElYRUxfTU9ERV9OT05FID0gMCwKKyAgICBGVF9QSVhFTF9NT0RFX01PTk8sCisgICAgRlRfUElYRUxfTU9ERV9HUkFZLAorICAgIEZUX1BJWEVMX01PREVfR1JBWTIsCisgICAgRlRfUElYRUxfTU9ERV9HUkFZNCwKKyAgICBGVF9QSVhFTF9NT0RFX0xDRCwKKyAgICBGVF9QSVhFTF9NT0RFX0xDRF9WLAorICAgIEZUX1BJWEVMX01PREVfQkdSQSwKKworICAgIEZUX1BJWEVMX01PREVfTUFYICAgICAgLyogZG8gbm90IHJlbW92ZSAqLworCisgIH0gRlRfUGl4ZWxfTW9kZTsKKworCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGBGVF9QaXhlbF9Nb2RlJyAqLworICAvKiB2YWx1ZXMgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfcGl4ZWxfbW9kZV9ub25lICAgRlRfUElYRUxfTU9ERV9OT05FCisjZGVmaW5lIGZ0X3BpeGVsX21vZGVfbW9ubyAgIEZUX1BJWEVMX01PREVfTU9OTworI2RlZmluZSBmdF9waXhlbF9tb2RlX2dyYXlzICBGVF9QSVhFTF9NT0RFX0dSQVkKKyNkZWZpbmUgZnRfcGl4ZWxfbW9kZV9wYWwyICAgRlRfUElYRUxfTU9ERV9HUkFZMgorI2RlZmluZSBmdF9waXhlbF9tb2RlX3BhbDQgICBGVF9QSVhFTF9NT0RFX0dSQVk0CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgYml0bWFwIG9yIHBpeG1hcCB0byB0aGUgcmFzdGVyLiAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHdlIG5vdyBtYW5hZ2UgcGl4bWFwcyBvZiB2YXJpb3VzIGRlcHRocyB0aHJvdWdoIHRoZSAgICAgICovCisgIC8qICAgIGBwaXhlbF9tb2RlJyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJvd3MgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGJpdG1hcCByb3dzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgd2lkdGggICAgICAgIDo6IFRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIGJpdG1hcCByb3cuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwaXRjaCAgICAgICAgOjogVGhlIHBpdGNoJ3MgYWJzb2x1dGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRha2VuIGJ5IG9uZSBiaXRtYXAgcm93LCBpbmNsdWRpbmcgcGFkZGluZy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgcGl0Y2ggaXMgcG9zaXRpdmUgd2hlbiB0aGUgYml0bWFwIGhhcyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgYSBgZG93bicgZmxvdywgYW5kIG5lZ2F0aXZlIHdoZW4gaXQgaGFzIGFuIGB1cCcgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGZsb3cuICBJbiBhbGwgY2FzZXMsIHRoZSBwaXRjaCBpcyBhbiBvZmZzZXQgdG8gYWRkICovCisgIC8qICAgICAgICAgICAgICAgICAgICB0byBhIGJpdG1hcCBwb2ludGVyIGluIG9yZGVyIHRvIGdvIGRvd24gb25lIHJvdy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBgcGFkZGluZycgbWVhbnMgdGhlIGFsaWdubWVudCBvZiBhICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBiaXRtYXAgdG8gYSBieXRlIGJvcmRlciwgYW5kIEZyZWVUeXBlIGZ1bmN0aW9ucyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgbm9ybWFsbHkgYWxpZ24gdG8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGludGVnZXIgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBCL1cgcmFzdGVyaXplciwgYHBpdGNoJyBpcyBhbHdheXMgYW4gZXZlbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoZSBwaXRjaCBvZiBhIGJpdG1hcCAoc2F5LCB0byBtYWtlIGl0IGEgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG9mIDQpLCB1c2UgQEZUX0JpdG1hcF9Db252ZXJ0LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWlnaHQgdXNlIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byAqLworICAvKiAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgcmVuZGVyIHRvIHRoZSBhcHBsaWNhdGlvbidzIHN1cmZhY2U7IHNlZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlIGBleGFtcGxlMi5jcHAnIGluIHRoZSB0dXRvcmlhbCBmb3IgYSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBkZW1vbnN0cmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVmZmVyICAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0byB0aGUgYml0bWFwIGJ1ZmZlci4gIFRoaXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICB2YWx1ZSBzaG91bGQgYmUgYWxpZ25lZCBvbiAzMi1iaXQgYm91bmRhcmllcyBpbiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgbW9zdCBjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9ncmF5cyAgICA6OiBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCB3aXRoICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgQEZUX1BJWEVMX01PREVfR1JBWTsgaXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBncmF5ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGxldmVscyB1c2VkIGluIHRoZSBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwaXhlbF9tb2RlICAgOjogVGhlIHBpeGVsIG1vZGUsIGkuZS4sIGhvdyBwaXhlbCBiaXRzIGFyZSBzdG9yZWQuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIFNlZSBARlRfUGl4ZWxfTW9kZSBmb3IgcG9zc2libGUgdmFsdWVzLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYWxldHRlX21vZGUgOjogVGhpcyBmaWVsZCBpcyBpbnRlbmRlZCBmb3IgcGFsZXR0ZWQgcGl4ZWwgbW9kZXM7ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGl0IGluZGljYXRlcyBob3cgdGhlIHBhbGV0dGUgaXMgc3RvcmVkLiAgTm90ICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICB1c2VkIGN1cnJlbnRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFsZXR0ZSAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0byB0aGUgYml0bWFwIHBhbGV0dGU7IHRoaXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyBpbnRlbmRlZCBmb3IgcGFsZXR0ZWQgcGl4ZWwgbW9kZXMuICBOb3QgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgdXNlZCBjdXJyZW50bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9CaXRtYXBfCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgcm93czsKKyAgICB1bnNpZ25lZCBpbnQgICAgd2lkdGg7CisgICAgaW50ICAgICAgICAgICAgIHBpdGNoOworICAgIHVuc2lnbmVkIGNoYXIqICBidWZmZXI7CisgICAgdW5zaWduZWQgc2hvcnQgIG51bV9ncmF5czsKKyAgICB1bnNpZ25lZCBjaGFyICAgcGl4ZWxfbW9kZTsKKyAgICB1bnNpZ25lZCBjaGFyICAgcGFsZXR0ZV9tb2RlOworICAgIHZvaWQqICAgICAgICAgICBwYWxldHRlOworCisgIH0gRlRfQml0bWFwOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZV9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYW4gb3V0bGluZSB0byB0aGUgc2Nhbi1saW5lICAgICAqLworICAvKiAgICBjb252ZXJ0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuX2NvbnRvdXJzIDo6IFRoZSBudW1iZXIgb2YgY29udG91cnMgaW4gdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5fcG9pbnRzICAgOjogVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9pbnRzICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYG5fcG9pbnRzJyBARlRfVmVjdG9yICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZWxlbWVudHMsIGdpdmluZyB0aGUgb3V0bGluZSdzIHBvaW50IGNvb3JkaW5hdGVzLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFncyAgICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYG5fcG9pbnRzJyBjaGFycywgZ2l2aW5nICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZWFjaCBvdXRsaW5lIHBvaW50J3MgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBJZiBiaXR+MCBpcyB1bnNldCwgdGhlIHBvaW50IGlzIGBvZmYnIHRoZSBjdXJ2ZSwgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaS5lLiwgYSBCw6l6aWVyIGNvbnRyb2wgcG9pbnQsIHdoaWxlIGl0IGlzIGBvbicgaWYgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIEJpdH4xIGlzIG1lYW5pbmdmdWwgZm9yIGBvZmYnIHBvaW50cyBvbmx5LiAgSWYgc2V0LCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpdCBpbmRpY2F0ZXMgYSB0aGlyZC1vcmRlciBCw6l6aWVyIGFyYyBjb250cm9sIHBvaW50OyAqLworICAvKiAgICAgICAgICAgICAgICAgIGFuZCBhIHNlY29uZC1vcmRlciBjb250cm9sIHBvaW50IGlmIHVuc2V0LiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgSWYgYml0fjIgaXMgc2V0LCBiaXRzIDUtNyBjb250YWluIHRoZSBkcm9wLW91dCBtb2RlICAqLworICAvKiAgICAgICAgICAgICAgICAgIChhcyBkZWZpbmVkIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uOyB0aGUgdmFsdWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpcyB0aGUgc2FtZSBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIFNDQU5NT0RFICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBCaXRzIDMgYW5kfjQgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCBwdXJwb3Nlcy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb250b3VycyAgIDo6IEFuIGFycmF5IG9mIGBuX2NvbnRvdXJzJyBzaG9ydHMsIGdpdmluZyB0aGUgZW5kICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBwb2ludCBvZiBlYWNoIGNvbnRvdXIgd2l0aGluIHRoZSBvdXRsaW5lLiAgRm9yICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgdGhlIGZpcnN0IGNvbnRvdXIgaXMgZGVmaW5lZCBieSB0aGUgcG9pbnRzICAqLworICAvKiAgICAgICAgICAgICAgICAgIGAwJyB0byBgY29udG91cnNbMF0nLCB0aGUgc2Vjb25kIG9uZSBpcyBkZWZpbmVkIGJ5ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB0aGUgcG9pbnRzIGBjb250b3Vyc1swXSsxJyB0byBgY29udG91cnNbMV0nLCBldGMuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmbGFncyAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyB1c2VkIHRvIGNoYXJhY3Rlcml6ZSB0aGUgb3V0bGluZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBhbmQgZ2l2ZSBoaW50cyB0byB0aGUgc2Nhbi1jb252ZXJ0ZXIgYW5kIGhpbnRlciBvbiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaG93IHRvIGNvbnZlcnQvZ3JpZC1maXQgaXQuICBTZWUgQEZUX09VVExJTkVfWFhYLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBCL1cgcmFzdGVyaXplciBvbmx5IGNoZWNrcyBiaXR+MiBpbiB0aGUgYHRhZ3MnIGFycmF5IGZvciB0aGUgICAqLworICAvKiAgICBmaXJzdCBwb2ludCBvZiBlYWNoIGNvbnRvdXIuICBUaGUgZHJvcC1vdXQgbW9kZSBhcyBnaXZlbiB3aXRoICAgICAgKi8KKyAgLyogICAgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTLCBARlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUywgYW5kICAgICAgICovCisgIC8qICAgIEBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgaW4gYGZsYWdzJyBpcyB0aGVuIG92ZXJyaWRkZW4uICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX091dGxpbmVfCisgIHsKKyAgICBzaG9ydCAgICAgICBuX2NvbnRvdXJzOyAgICAgIC8qIG51bWJlciBvZiBjb250b3VycyBpbiBnbHlwaCAgICAgICAgKi8KKyAgICBzaG9ydCAgICAgICBuX3BvaW50czsgICAgICAgIC8qIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGdseXBoICAgICAgKi8KKworICAgIEZUX1ZlY3RvciogIHBvaW50czsgICAgICAgICAgLyogdGhlIG91dGxpbmUncyBwb2ludHMgICAgICAgICAgICAgICAqLworICAgIGNoYXIqICAgICAgIHRhZ3M7ICAgICAgICAgICAgLyogdGhlIHBvaW50cyBmbGFncyAgICAgICAgICAgICAgICAgICAqLworICAgIHNob3J0KiAgICAgIGNvbnRvdXJzOyAgICAgICAgLyogdGhlIGNvbnRvdXIgZW5kIHBvaW50cyAgICAgICAgICAgICAqLworCisgICAgaW50ICAgICAgICAgZmxhZ3M7ICAgICAgICAgICAvKiBvdXRsaW5lIG1hc2tzICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgfSBGVF9PdXRsaW5lOworCisgIC8qICovCisKKyAgLyogRm9sbG93aW5nIGxpbWl0cyBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCAqLworICAvKiBGVF9PdXRsaW5lLntuX2NvbnRvdXJzLG5fcG9pbnRzfSAgICAgICAgICovCisjZGVmaW5lIEZUX09VVExJTkVfQ09OVE9VUlNfTUFYICBTSFJUX01BWAorI2RlZmluZSBGVF9PVVRMSU5FX1BPSU5UU19NQVggICAgU0hSVF9NQVgKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09VVExJTkVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZSBmb3IgdGhlIGZsYWdzIGluIGFuIG91dGxpbmUncyAgICAqLworICAvKiAgICBgZmxhZ3MnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PVVRMSU5FX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBWYWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PVVRMSU5FX09XTkVSIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiBzZXQsIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgb3V0bGluZSdzIGZpZWxkIGFycmF5cyAgICAgICovCisgIC8qICAgICAgKGkuZS4sIGBwb2ludHMnLCBgZmxhZ3MnLCBhbmQgYGNvbnRvdXJzJykgYXJlIGBvd25lZCcgYnkgdGhlICAgICAqLworICAvKiAgICAgIG91dGxpbmUgb2JqZWN0LCBhbmQgc2hvdWxkIHRodXMgYmUgZnJlZWQgd2hlbiBpdCBpcyBkZXN0cm95ZWQuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09VVExJTkVfRVZFTl9PRERfRklMTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEJ5IGRlZmF1bHQsIG91dGxpbmVzIGFyZSBmaWxsZWQgdXNpbmcgdGhlIG5vbi16ZXJvIHdpbmRpbmcgcnVsZS4gKi8KKyAgLyogICAgICBJZiBzZXQgdG8gMSwgdGhlIG91dGxpbmUgd2lsbCBiZSBmaWxsZWQgdXNpbmcgdGhlIGV2ZW4tb2RkIGZpbGwgICovCisgIC8qICAgICAgcnVsZSAob25seSB3b3JrcyB3aXRoIHRoZSBzbW9vdGggcmFzdGVyaXplcikuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQnkgZGVmYXVsdCwgb3V0c2lkZSBjb250b3VycyBvZiBhbiBvdXRsaW5lIGFyZSBvcmllbnRlZCBpbiAgICAgICAqLworICAvKiAgICAgIGNsb2NrLXdpc2UgZGlyZWN0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLiAgKi8KKyAgLyogICAgICBUaGlzIGZsYWcgaXMgc2V0IGlmIHRoZSBvdXRsaW5lIHVzZXMgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiAgICAgICovCisgIC8qICAgICAgKHR5cGljYWxseSBmb3IgVHlwZX4xIGZvbnRzKS4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGJ5IHRoZSBzY2FuICAqLworICAvKiAgICAgIGNvbnZlcnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEJ5IGRlZmF1bHQsIHRoZSBzY2FuIGNvbnZlcnRlciB3aWxsIHRyeSB0byBkZXRlY3QgZHJvcC1vdXRzIGluICAgKi8KKyAgLyogICAgICBhbiBvdXRsaW5lIGFuZCBjb3JyZWN0IHRoZSBnbHlwaCBiaXRtYXAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgICAgICovCisgIC8qICAgICAgc2hhcGUgY29udGludWl0eS4gIElmIHNldCwgdGhpcyBmbGFnIGhpbnRzIHRoZSBzY2FuLWxpbmUgICAgICAgICAqLworICAvKiAgICAgIGNvbnZlcnRlciB0byBpZ25vcmUgc3VjaCBjYXNlcy4gIFNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFNlbGVjdCBzbWFydCBkcm9wb3V0IGNvbnRyb2wuICBJZiB1bnNldCwgdXNlIHNpbXBsZSBkcm9wb3V0ICAgICAgKi8KKyAgLyogICAgICBjb250cm9sLiAgSWdub3JlZCBpZiBARlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMgaXMgc2V0LiAgU2VlICAgICovCisgIC8qICAgICAgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1VUTElORV9JTkNMVURFX1NUVUJTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSWYgc2V0LCB0dXJuIHBpeGVscyBvbiBmb3IgYHN0dWJzJywgb3RoZXJ3aXNlIGV4Y2x1ZGUgdGhlbS4gICAgICAqLworICAvKiAgICAgIElnbm9yZWQgaWYgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTIGlzIHNldC4gIFNlZSBiZWxvdyBmb3IgICAgKi8KKyAgLyogICAgICBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIgc2hvdWxkIHRyeSB0byAgICovCisgIC8qICAgICAgY29udmVydCB0aGlzIG91dGxpbmUgdG8gYml0bWFwcyB3aXRoIHRoZSBoaWdoZXN0IHBvc3NpYmxlICAgICAgICAqLworICAvKiAgICAgIHF1YWxpdHkuICBJdCBpcyB0eXBpY2FsbHkgc2V0IGZvciBzbWFsbCBjaGFyYWN0ZXIgc2l6ZXMuICBOb3RlICAgKi8KKyAgLyogICAgICB0aGF0IHRoaXMgaXMgb25seSBhIGhpbnQgdGhhdCBtaWdodCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSAgICovCisgIC8qICAgICAgZ2l2ZW4gc2Nhbi1jb252ZXJ0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1VUTElORV9TSU5HTEVfUEFTUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBmbGFnIGlzIHNldCB0byBmb3JjZSBhIGdpdmVuIHNjYW4tY29udmVydGVyIHRvIG9ubHkgdXNlIGEgICAqLworICAvKiAgICAgIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG91dGxpbmUgdG8gcmVuZGVyIGEgYml0bWFwIGdseXBoIGltYWdlLiAgICAgKi8KKyAgLyogICAgICBOb3JtYWxseSwgaXQgaXMgc2V0IGZvciB2ZXJ5IGxhcmdlIGNoYXJhY3RlciBzaXplcy4gIEl0IGlzIG9ubHkgICovCisgIC8qICAgICAgYSBoaW50IHRoYXQgbWlnaHQgYmUgY29tcGxldGVseSBpZ25vcmVkIGJ5IGEgZ2l2ZW4gICAgICAgICAgICAgICAqLworICAvKiAgICAgIHNjYW4tY29udmVydGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZmxhZ3MgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTLCBARlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUywgKi8KKyAgLyogICAgYW5kIEBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgYXJlIGlnbm9yZWQgYnkgdGhlIHNtb290aCAgICAgICAgICAgICovCisgIC8qICAgIHJhc3Rlcml6ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlcmUgZXhpc3RzIGEgc2Vjb25kIG1lY2hhbmlzbSB0byBwYXNzIHRoZSBkcm9wLW91dCBtb2RlIHRvIHRoZSAgICovCisgIC8qICAgIEIvVyByYXN0ZXJpemVyOyBzZWUgdGhlIGB0YWdzJyBmaWVsZCBpbiBARlRfT3V0bGluZS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYFNDQU5UWVBFJyBpbnN0cnVjdGlvbiBpbiAgICovCisgIC8qICAgIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIChpbiBmaWxlIGB0dGluc3QxLmRvYycpIGhvdyBzaW1wbGUgICAgICAqLworICAvKiAgICBkcm9wLW91dHMsIHNtYXJ0IGRyb3Atb3V0cywgYW5kIHN0dWJzIGFyZSBkZWZpbmVkLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX09VVExJTkVfTk9ORSAgICAgICAgICAgICAweDAKKyNkZWZpbmUgRlRfT1VUTElORV9PV05FUiAgICAgICAgICAgIDB4MQorI2RlZmluZSBGVF9PVVRMSU5FX0VWRU5fT0REX0ZJTEwgICAgMHgyCisjZGVmaW5lIEZUX09VVExJTkVfUkVWRVJTRV9GSUxMICAgICAweDQKKyNkZWZpbmUgRlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMgIDB4OAorI2RlZmluZSBGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTICAgMHgxMAorI2RlZmluZSBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgICAgMHgyMAorCisjZGVmaW5lIEZUX09VVExJTkVfSElHSF9QUkVDSVNJT04gICAweDEwMAorI2RlZmluZSBGVF9PVVRMSU5FX1NJTkdMRV9QQVNTICAgICAgMHgyMDAKKworCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nICovCisgIC8qIGBGVF9PVVRMSU5FX1hYWCcgdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X291dGxpbmVfbm9uZSAgICAgICAgICAgICBGVF9PVVRMSU5FX05PTkUKKyNkZWZpbmUgZnRfb3V0bGluZV9vd25lciAgICAgICAgICAgIEZUX09VVExJTkVfT1dORVIKKyNkZWZpbmUgZnRfb3V0bGluZV9ldmVuX29kZF9maWxsICAgIEZUX09VVExJTkVfRVZFTl9PRERfRklMTAorI2RlZmluZSBmdF9vdXRsaW5lX3JldmVyc2VfZmlsbCAgICAgRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwKKyNkZWZpbmUgZnRfb3V0bGluZV9pZ25vcmVfZHJvcG91dHMgIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTCisjZGVmaW5lIGZ0X291dGxpbmVfaGlnaF9wcmVjaXNpb24gICBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OCisjZGVmaW5lIGZ0X291dGxpbmVfc2luZ2xlX3Bhc3MgICAgICBGVF9PVVRMSU5FX1NJTkdMRV9QQVNTCisKKyAgLyogKi8KKworI2RlZmluZSBGVF9DVVJWRV9UQUcoIGZsYWcgKSAgKCBmbGFnICYgMyApCisKKyNkZWZpbmUgRlRfQ1VSVkVfVEFHX09OICAgICAgICAgICAgMQorI2RlZmluZSBGVF9DVVJWRV9UQUdfQ09OSUMgICAgICAgICAwCisjZGVmaW5lIEZUX0NVUlZFX1RBR19DVUJJQyAgICAgICAgIDIKKworI2RlZmluZSBGVF9DVVJWRV9UQUdfSEFTX1NDQU5NT0RFICA0CisKKyNkZWZpbmUgRlRfQ1VSVkVfVEFHX1RPVUNIX1ggICAgICAgOCAgLyogcmVzZXJ2ZWQgZm9yIHRoZSBUcnVlVHlwZSBoaW50ZXIgKi8KKyNkZWZpbmUgRlRfQ1VSVkVfVEFHX1RPVUNIX1kgICAgICAxNiAgLyogcmVzZXJ2ZWQgZm9yIHRoZSBUcnVlVHlwZSBoaW50ZXIgKi8KKworI2RlZmluZSBGVF9DVVJWRV9UQUdfVE9VQ0hfQk9USCAgICAoIEZUX0NVUlZFX1RBR19UT1VDSF9YIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBR19UT1VDSF9ZICkKKworI2RlZmluZSBGVF9DdXJ2ZV9UYWdfT24gICAgICAgRlRfQ1VSVkVfVEFHX09OCisjZGVmaW5lIEZUX0N1cnZlX1RhZ19Db25pYyAgICBGVF9DVVJWRV9UQUdfQ09OSUMKKyNkZWZpbmUgRlRfQ3VydmVfVGFnX0N1YmljICAgIEZUX0NVUlZFX1RBR19DVUJJQworI2RlZmluZSBGVF9DdXJ2ZV9UYWdfVG91Y2hfWCAgRlRfQ1VSVkVfVEFHX1RPVUNIX1gKKyNkZWZpbmUgRlRfQ3VydmVfVGFnX1RvdWNoX1kgIEZUX0NVUlZFX1RBR19UT1VDSF9ZCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX01vdmVUb0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzaWduYXR1cmUgb2YgYSBgbW92ZSAgKi8KKyAgLyogICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcvZGVjb21wb3NpdGlvbi4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGBtb3ZlIHRvJyBpcyBlbWl0dGVkIHRvIHN0YXJ0IGEgbmV3IGNvbnRvdXIgaW4gYW4gb3V0bGluZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0byAgIDo6IEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IHBvaW50IG9mIHRoZSBgbW92ZSB0bycuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgOjogQSB0eXBlbGVzcyBwb2ludGVyLCB3aGljaCBpcyBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyIG9mIHRoZSAqLworICAvKiAgICAgICAgICAgIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgaW50CisgICgqRlRfT3V0bGluZV9Nb3ZlVG9GdW5jKSggY29uc3QgRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdXNlciApOworCisjZGVmaW5lIEZUX091dGxpbmVfTW92ZVRvX0Z1bmMgIEZUX091dGxpbmVfTW92ZVRvRnVuYworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9MaW5lVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgYGxpbmUgICovCisgIC8qICAgIHRvJyBmdW5jdGlvbiBkdXJpbmcgb3V0bGluZSB3YWxraW5nL2RlY29tcG9zaXRpb24uICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBgbGluZSB0bycgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHNlZ21lbnQgaW4gdGhlIG91dGxpbmUuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdG8gICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBwb2ludCBvZiB0aGUgYGxpbmUgdG8nLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiB0aGUgKi8KKyAgLyogICAgICAgICAgICBkZWNvbXBvc2l0aW9uIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGludAorICAoKkZUX091dGxpbmVfTGluZVRvRnVuYykoIGNvbnN0IEZUX1ZlY3RvciogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgIHVzZXIgKTsKKworI2RlZmluZSBGVF9PdXRsaW5lX0xpbmVUb19GdW5jICBGVF9PdXRsaW5lX0xpbmVUb0Z1bmMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBjb25pYyAqLworICAvKiAgICB0bycgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZyBvciBkZWNvbXBvc2l0aW9uLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgYGNvbmljIHRvJyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgc2Vjb25kLW9yZGVyIELDqXppZXIgYXJjIGluICAgKi8KKyAgLyogICAgdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbCA6OiBBbiBpbnRlcm1lZGlhdGUgY29udHJvbCBwb2ludCBiZXR3ZWVuIHRoZSBsYXN0IHBvc2l0aW9uICovCisgIC8qICAgICAgICAgICAgICAgYW5kIHRoZSBuZXcgdGFyZ2V0IGluIGB0bycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdG8gICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBlbmQgcG9pbnQgb2YgdGhlIGNvbmljIGFyYy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiAgKi8KKyAgLyogICAgICAgICAgICAgICB0aGUgZGVjb21wb3NpdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGludAorICAoKkZUX091dGxpbmVfQ29uaWNUb0Z1bmMpKCBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdXNlciApOworCisjZGVmaW5lIEZUX091dGxpbmVfQ29uaWNUb19GdW5jICBGVF9PdXRsaW5lX0NvbmljVG9GdW5jCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0N1YmljVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzaWduYXR1cmUgb2YgYSBgY3ViaWMgKi8KKyAgLyogICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcgb3IgZGVjb21wb3NpdGlvbi4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGBjdWJpYyB0bycgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHRoaXJkLW9yZGVyIELDqXppZXIgYXJjLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbDEgOjogQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbDIgOjogQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgQsOpemllciBjb250cm9sIHBvaW50LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdG8gICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgZW5kIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyICAgICA6OiBBIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgb2YgKi8KKyAgLyogICAgICAgICAgICAgICAgdGhlIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGludAorICAoKkZUX091dGxpbmVfQ3ViaWNUb0Z1bmMpKCBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgY29udHJvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICB1c2VyICk7CisKKyNkZWZpbmUgRlRfT3V0bGluZV9DdWJpY1RvX0Z1bmMgIEZUX091dGxpbmVfQ3ViaWNUb0Z1bmMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfRnVuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHRvIGhvbGQgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyB1c2VkIGR1cmluZyBvdXRsaW5lICAqLworICAvKiAgICBkZWNvbXBvc2l0aW9uIGluIG9yZGVyIHRvIGVtaXQgc2VnbWVudHMsIGNvbmljLCBhbmQgY3ViaWMgQsOpemllcnMuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW92ZV90byAgOjogVGhlIGBtb3ZlIHRvJyBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaW5lX3RvICA6OiBUaGUgc2VnbWVudCBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvbmljX3RvIDo6IFRoZSBzZWNvbmQtb3JkZXIgQsOpemllciBhcmMgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN1YmljX3RvIDo6IFRoZSB0aGlyZC1vcmRlciBCw6l6aWVyIGFyYyBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNoaWZ0ICAgIDo6IFRoZSBzaGlmdCB0aGF0IGlzIGFwcGxpZWQgdG8gY29vcmRpbmF0ZXMgYmVmb3JlIHRoZXkgICAqLworICAvKiAgICAgICAgICAgICAgICBhcmUgc2VudCB0byB0aGUgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlbHRhICAgIDo6IFRoZSBkZWx0YSB0aGF0IGlzIGFwcGxpZWQgdG8gY29vcmRpbmF0ZXMgYmVmb3JlIHRoZXkgICAqLworICAvKiAgICAgICAgICAgICAgICBhcmUgc2VudCB0byB0aGUgZW1pdHRlciwgYnV0IGFmdGVyIHRoZSBzaGlmdC4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcG9pbnQgY29vcmRpbmF0ZXMgc2VudCB0byB0aGUgZW1pdHRlcnMgYXJlIHRoZSB0cmFuc2Zvcm1lZCAgICAgKi8KKyAgLyogICAgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgY29vcmRpbmF0ZXMgKHRoaXMgaXMgaW1wb3J0YW50IGZvciBoaWdoICAgICovCisgIC8qICAgIGFjY3VyYWN5IGR1cmluZyBzY2FuLWNvbnZlcnNpb24pLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGlzIHNpbXBsZTogICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgeCcgPSAoeCA8PCBzaGlmdCkgLSBkZWx0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHknID0gKHggPDwgc2hpZnQpIC0gZGVsdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZXQgdGhlIHZhbHVlcyBvZiBgc2hpZnQnIGFuZCBgZGVsdGEnIHRvfjAgdG8gZ2V0IHRoZSBvcmlnaW5hbCAgICAgKi8KKyAgLyogICAgcG9pbnQgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfT3V0bGluZV9GdW5jc18KKyAgeworICAgIEZUX091dGxpbmVfTW92ZVRvRnVuYyAgIG1vdmVfdG87CisgICAgRlRfT3V0bGluZV9MaW5lVG9GdW5jICAgbGluZV90bzsKKyAgICBGVF9PdXRsaW5lX0NvbmljVG9GdW5jICBjb25pY190bzsKKyAgICBGVF9PdXRsaW5lX0N1YmljVG9GdW5jICBjdWJpY190bzsKKworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHNoaWZ0OworICAgIEZUX1BvcyAgICAgICAgICAgICAgICAgIGRlbHRhOworCisgIH0gRlRfT3V0bGluZV9GdW5jczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJhc2ljX3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JTUFHRV9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgdG8gYW4gdW5zaWduZWQgbG9uZyB0eXBlLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTaW5jZSBtYW55IDE2LWJpdCBjb21waWxlcnMgZG9uJ3QgbGlrZSAzMi1iaXQgZW51bWVyYXRpb25zLCB5b3UgICAgKi8KKyAgLyogICAgc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZSAgICovCisgIC8qICAgIHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2RlZmluZSBGVF9JTUFHRV9UQUcoIHZhbHVlLCBfeDEsIF94MiwgX3gzLCBfeDQgKSAgdmFsdWUgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvIGdldCBhIHNpbXBsZSBlbnVtZXJhdGlvbiB3aXRob3V0IGFzc2lnbmluZyBzcGVjaWFsIG51bWJlcnMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgRlRfSU1BR0VfVEFHCisjZGVmaW5lIEZUX0lNQUdFX1RBRyggdmFsdWUsIF94MSwgX3gyLCBfeDMsIF94NCApICBcCisgICAgICAgICAgdmFsdWUgPSAoICggKHVuc2lnbmVkIGxvbmcpX3gxIDw8IDI0ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkIGxvbmcpX3gyIDw8IDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkIGxvbmcpX3gzIDw8IDggICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX3g0ICAgICAgICAgKQorI2VuZGlmIC8qIEZUX0lNQUdFX1RBRyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQgb2YgYSBnaXZlbiBnbHlwaCAgICovCisgIC8qICAgIGltYWdlLiAgTm90ZSB0aGF0IHRoaXMgdmVyc2lvbiBvZiBGcmVlVHlwZSBvbmx5IHN1cHBvcnRzIHR3byBpbWFnZSAqLworICAvKiAgICBmb3JtYXRzLCBldmVuIHRob3VnaCBmdXR1cmUgZm9udCBkcml2ZXJzIHdpbGwgYmUgYWJsZSB0byByZWdpc3RlciAgKi8KKyAgLyogICAgdGhlaXIgb3duIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfRk9STUFUX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHZhbHVlfjAgaXMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGdseXBoIGltYWdlIGlzIGEgY29tcG9zaXRlIG9mIHNldmVyYWwgb3RoZXIgaW1hZ2VzLiAgVGhpcyAgICAqLworICAvKiAgICAgIGZvcm1hdCBpcyBfb25seV8gdXNlZCB3aXRoIEBGVF9MT0FEX05PX1JFQ1VSU0UsIGFuZCBpcyB1c2VkIHRvICAgKi8KKyAgLyogICAgICByZXBvcnQgY29tcG91bmQgZ2x5cGhzIChsaWtlIGFjY2VudGVkIGNoYXJhY3RlcnMpLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HTFlQSF9GT1JNQVRfQklUTUFQIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgYSBiaXRtYXAsIGFuZCBjYW4gYmUgZGVzY3JpYmVkIGFzIGFuICAgICAgICAgICovCisgIC8qICAgICAgQEZUX0JpdG1hcC4gIFlvdSBnZW5lcmFsbHkgbmVlZCB0byBhY2Nlc3MgdGhlIGBiaXRtYXAnIGZpZWxkIG9mICAqLworICAvKiAgICAgIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSB0byByZWFkIGl0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBnbHlwaCBpbWFnZSBpcyBhIHZlY3RvcmlhbCBvdXRsaW5lIG1hZGUgb2YgbGluZSBzZWdtZW50cyAgICAgKi8KKyAgLyogICAgICBhbmQgQsOpemllciBhcmNzOyBpdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGFuIEBGVF9PdXRsaW5lOyB5b3UgICAgICAqLworICAvKiAgICAgIGdlbmVyYWxseSB3YW50IHRvIGFjY2VzcyB0aGUgYG91dGxpbmUnIGZpZWxkIG9mIHRoZSAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSB0byByZWFkIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HTFlQSF9GT1JNQVRfUExPVFRFUiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgYSB2ZWN0b3JpYWwgcGF0aCB3aXRoIG5vIGluc2lkZSBhbmQgb3V0c2lkZSAgICovCisgIC8qICAgICAgY29udG91cnMuICBTb21lIFR5cGV+MSBmb250cywgbGlrZSB0aG9zZSBpbiB0aGUgSGVyc2hleSBmYW1pbHksICAqLworICAvKiAgICAgIGNvbnRhaW4gZ2x5cGhzIGluIHRoaXMgZm9ybWF0LiAgVGhlc2UgYXJlIGRlc2NyaWJlZCBhcyAgICAgICAgICAgKi8KKyAgLyogICAgICBARlRfT3V0bGluZSwgYnV0IEZyZWVUeXBlIGlzbid0IGN1cnJlbnRseSBjYXBhYmxlIG9mIHJlbmRlcmluZyAgICovCisgIC8qICAgICAgdGhlbSBjb3JyZWN0bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9HbHlwaF9Gb3JtYXRfCisgIHsKKyAgICBGVF9JTUFHRV9UQUcoIEZUX0dMWVBIX0ZPUk1BVF9OT05FLCAwLCAwLCAwLCAwICksCisKKyAgICBGVF9JTUFHRV9UQUcoIEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUsICdjJywgJ28nLCAnbScsICdwJyApLAorICAgIEZUX0lNQUdFX1RBRyggRlRfR0xZUEhfRk9STUFUX0JJVE1BUCwgICAgJ2InLCAnaScsICd0JywgJ3MnICksCisgICAgRlRfSU1BR0VfVEFHKCBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwgICAnbycsICd1JywgJ3QnLCAnbCcgKSwKKyAgICBGVF9JTUFHRV9UQUcoIEZUX0dMWVBIX0ZPUk1BVF9QTE9UVEVSLCAgICdwJywgJ2wnLCAnbycsICd0JyApCisKKyAgfSBGVF9HbHlwaF9Gb3JtYXQ7CisKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBgRlRfR2x5cGhfRm9ybWF0JyB2YWx1ZXMgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9nbHlwaF9mb3JtYXRfbm9uZSAgICAgICBGVF9HTFlQSF9GT1JNQVRfTk9ORQorI2RlZmluZSBmdF9nbHlwaF9mb3JtYXRfY29tcG9zaXRlICBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFCisjZGVmaW5lIGZ0X2dseXBoX2Zvcm1hdF9iaXRtYXAgICAgIEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAKKyNkZWZpbmUgZnRfZ2x5cGhfZm9ybWF0X291dGxpbmUgICAgRlRfR0xZUEhfRk9STUFUX09VVExJTkUKKyNkZWZpbmUgZnRfZ2x5cGhfZm9ybWF0X3Bsb3R0ZXIgICAgRlRfR0xZUEhfRk9STUFUX1BMT1RURVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICBSIEEgUyBUIEUgUiAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEEgcmFzdGVyIGlzIGEgc2NhbiBjb252ZXJ0ZXIsIGluIGNoYXJnZSBvZiByZW5kZXJpbmcgYW4gb3V0bGluZSBpbnRvICAqLworICAvKiBhIGEgYml0bWFwLiAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBwdWJsaWMgQVBJIGZvciByYXN0ZXJzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5vdGUgdGhhdCBpbiBGcmVlVHlwZSAyLCBhbGwgcmFzdGVycyBhcmUgbm93IGVuY2Fwc3VsYXRlZCB3aXRoaW4gICAgICAqLworICAvKiBzcGVjaWZpYyBtb2R1bGVzIGNhbGxlZCBgcmVuZGVyZXJzJy4gIFNlZSBgZnRyZW5kZXIuaCcgZm9yIG1vcmUgICAgICAgKi8KKyAgLyogZGV0YWlscyBvbiByZW5kZXJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJhc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNjYW5saW5lIENvbnZlcnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhvdyB2ZWN0b3JpYWwgb3V0bGluZXMgYXJlIGNvbnZlcnRlZCBpbnRvIGJpdG1hcHMgYW5kIHBpeG1hcHMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0ZWNobmljYWwgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1Jhc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TcGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU3BhbkZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfUGFyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkFTVEVSX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfTmV3RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX0RvbmVGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1Jhc3Rlcl9SZXNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfU2V0TW9kZUZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX1JlbmRlckZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1Jhc3Rlcl9GdW5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBvcGFxdWUgaGFuZGxlIChwb2ludGVyKSB0byBhIHJhc3RlciBvYmplY3QuICBFYWNoIG9iamVjdCBjYW4gYmUgKi8KKyAgLyogICAgdXNlZCBpbmRlcGVuZGVudGx5IHRvIGNvbnZlcnQgYW4gb3V0bGluZSBpbnRvIGEgYml0bWFwIG9yIHBpeG1hcC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9SYXN0ZXJSZWNfKiAgRlRfUmFzdGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU3BhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIHNpbmdsZSBzcGFuIG9mIGdyYXkgcGl4ZWxzIHdoZW4gICAgICAgICovCisgIC8qICAgIHJlbmRlcmluZyBhbiBhbnRpLWFsaWFzZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHggICAgICAgIDo6IFRoZSBzcGFuJ3MgaG9yaXpvbnRhbCBzdGFydCBwb3NpdGlvbi4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGVuICAgICAgOjogVGhlIHNwYW4ncyBsZW5ndGggaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb3ZlcmFnZSA6OiBUaGUgc3BhbiBjb2xvci9jb3ZlcmFnZSwgcmFuZ2luZyBmcm9tIDAgKGJhY2tncm91bmQpICAgKi8KKyAgLyogICAgICAgICAgICAgICAgdG8gMjU1IChmb3JlZ3JvdW5kKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgc3BhbiBkcmF3aW5nIGNhbGxiYWNrIHR5cGUgbmFtZWQgICAgICovCisgIC8qICAgIEBGVF9TcGFuRnVuYyB0aGF0IHRha2VzIHRoZSB5fmNvb3JkaW5hdGUgb2YgdGhlIHNwYW4gYXMgYSAgICAgICAgICAqLworICAvKiAgICBwYXJhbWV0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBjb3ZlcmFnZSB2YWx1ZSBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCAyNTUuICBJZiB5b3Ugd2FudCBsZXNzICAqLworICAvKiAgICBncmF5IHZhbHVlcywgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0byByZWR1Y2UgdGhlbS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TcGFuXworICB7CisgICAgc2hvcnQgICAgICAgICAgIHg7CisgICAgdW5zaWduZWQgc2hvcnQgIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICAgY292ZXJhZ2U7CisKKyAgfSBGVF9TcGFuOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU3BhbkZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIGFzIGEgY2FsbC1iYWNrIGJ5IHRoZSBhbnRpLWFsaWFzZWQgcmVuZGVyZXIgaW4gICAgICovCisgIC8qICAgIG9yZGVyIHRvIGxldCBjbGllbnQgYXBwbGljYXRpb25zIGRyYXcgdGhlbXNlbHZlcyB0aGUgZ3JheSBwaXhlbCAgICAqLworICAvKiAgICBzcGFucyBvbiBlYWNoIHNjYW4gbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5ICAgICA6OiBUaGUgc2NhbmxpbmUncyB5fmNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvdW50IDo6IFRoZSBudW1iZXIgb2Ygc3BhbnMgdG8gZHJhdyBvbiB0aGlzIHNjYW5saW5lLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3BhbnMgOjogQSB0YWJsZSBvZiBgY291bnQnIHNwYW5zIHRvIGRyYXcgb24gdGhlIHNjYW5saW5lLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyICA6OiBVc2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGNhbGxiYWNrIGFsbG93cyBjbGllbnQgYXBwbGljYXRpb25zIHRvIGRpcmVjdGx5IHJlbmRlciB0aGUgICAgKi8KKyAgLyogICAgZ3JheSBzcGFucyBvZiB0aGUgYW50aS1hbGlhc2VkIGJpdG1hcCB0byBhbnkga2luZCBvZiBzdXJmYWNlcy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGFudGktYWxpYXNlZCBvdXRsaW5lcyBkaXJlY3RseSB0byBhICAgICAgKi8KKyAgLyogICAgZ2l2ZW4gYmFja2dyb3VuZCBiaXRtYXAsIGFuZCBldmVuIHBlcmZvcm0gdHJhbnNsdWNlbmN5LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgdGhlIGBjb3VudCcgZmllbGQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBhIGZpeGVkIHZhbHVlICAgKi8KKyAgLyogICAgZGVmaW5lZCBieSB0aGUgYEZUX01BWF9HUkFZX1NQQU5TJyBjb25maWd1cmF0aW9uIG1hY3JvIGluICAgICAgICAgICovCisgIC8qICAgIGBmdG9wdGlvbi5oJy4gIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgaXMgc2V0IHRvfjMyLCB3aGljaCBtZWFucyAgICAqLworICAvKiAgICB0aGF0IGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMzJ+c3BhbnMgb24gYSBnaXZlbiBzY2FubGluZSwgdGhlICAgICAgKi8KKyAgLyogICAgY2FsbGJhY2sgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aCB0aGUgc2FtZSBgeScgcGFyYW1ldGVyIGluICAgICovCisgIC8qICAgIG9yZGVyIHRvIGRyYXcgYWxsIGNhbGxiYWNrcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT3RoZXJ3aXNlLCB0aGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgc2Nhbi1saW5lLCBhbmQgICAgICovCisgIC8qICAgIG9ubHkgZm9yIHRob3NlIHNjYW5saW5lcyB0aGF0IGRvIGhhdmUgYGdyYXknIHBpeGVscyBvbiB0aGVtLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqRlRfU3BhbkZ1bmMpKCBpbnQgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1NwYW4qICBzcGFucywKKyAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICB1c2VyICk7CisKKyNkZWZpbmUgRlRfUmFzdGVyX1NwYW5fRnVuYyAgRlRfU3BhbkZ1bmMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1Jhc3Rlcl9CaXRUZXN0X0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlcHJlY2F0ZWQsIHVuaW1wbGVtZW50ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBpbnQKKyAgKCpGVF9SYXN0ZXJfQml0VGVzdF9GdW5jKSggaW50ICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX0JpdFNldF9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVwcmVjYXRlZCwgdW5pbXBsZW1lbnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9SYXN0ZXJfQml0U2V0X0Z1bmMpKCBpbnQgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkFTVEVSX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBsaXN0IG9mIGJpdCBmbGFnIGNvbnN0YW50cyBhcyB1c2VkIGluIHRoZSBgZmxhZ3MnIGZpZWxkIG9mIGEgICAgICovCisgIC8qICAgIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JBU1RFUl9GTEFHX0RFRkFVTFQgOjogVGhpcyB2YWx1ZSBpcyAwLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkFTVEVSX0ZMQUdfQUEgICAgICA6OiBUaGlzIGZsYWcgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgYW4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW50aS1hbGlhc2VkIGdseXBoIGltYWdlIHNob3VsZCBiZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZC4gIE90aGVyd2lzZSwgaXQgd2lsbCBiZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vY2hyb21lICgxLWJpdCkuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SQVNURVJfRkxBR19ESVJFQ1QgIDo6IFRoaXMgZmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgZGlyZWN0ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcuICBJbiB0aGlzIG1vZGUsIGNsaWVudCAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIG11c3QgcHJvdmlkZSB0aGVpciBvd24gc3BhbiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLiAgVGhpcyBsZXRzIHRoZW0gZGlyZWN0bHkgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3IG9yIGNvbXBvc2Ugb3ZlciBhbiBleGlzdGluZyBiaXRtYXAuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlIHRhcmdldCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeG1hcCdzIGJ1ZmZlciBfbXVzdF8gYmUgemVyb2VkIGJlZm9yZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdCByZW5kZXJpbmcgaXMgb25seSBwb3NzaWJsZSB3aXRoICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnRpLWFsaWFzZWQgZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SQVNURVJfRkxBR19DTElQICAgIDo6IFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgaW4gZGlyZWN0ICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgbW9kZS4gIElmIHNldCwgdGhlIG91dHB1dCB3aWxsICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY2xpcHBlZCB0byBhIGJveCBzcGVjaWZpZWQgaW4gdGhlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjbGlwX2JveCcgZmllbGQgb2YgdGhlICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfUmFzdGVyX1BhcmFtcyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBieSBkZWZhdWx0LCB0aGUgZ2x5cGggYml0bWFwICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjbGlwcGVkIHRvIHRoZSB0YXJnZXQgcGl4bWFwLCBleGNlcHQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gZGlyZWN0IHJlbmRlcmluZyBtb2RlIHdoZXJlIGFsbCBzcGFucyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaWYgbm8gY2xpcHBpbmcgYm94IGlzIHNldC4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1JBU1RFUl9GTEFHX0RFRkFVTFQgIDB4MAorI2RlZmluZSBGVF9SQVNURVJfRkxBR19BQSAgICAgICAweDEKKyNkZWZpbmUgRlRfUkFTVEVSX0ZMQUdfRElSRUNUICAgMHgyCisjZGVmaW5lIEZUX1JBU1RFUl9GTEFHX0NMSVAgICAgIDB4NAorCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nICovCisgIC8qIGBGVF9SQVNURVJfRkxBR19YWFgnIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIGZ0X3Jhc3Rlcl9mbGFnX2RlZmF1bHQgIEZUX1JBU1RFUl9GTEFHX0RFRkFVTFQKKyNkZWZpbmUgZnRfcmFzdGVyX2ZsYWdfYWEgICAgICAgRlRfUkFTVEVSX0ZMQUdfQUEKKyNkZWZpbmUgZnRfcmFzdGVyX2ZsYWdfZGlyZWN0ICAgRlRfUkFTVEVSX0ZMQUdfRElSRUNUCisjZGVmaW5lIGZ0X3Jhc3Rlcl9mbGFnX2NsaXAgICAgIEZUX1JBU1RFUl9GTEFHX0NMSVAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1Jhc3Rlcl9QYXJhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGFyZ3VtZW50cyB1c2VkIGJ5IGEgcmFzdGVyJ3MgcmVuZGVyICAgICAgICAqLworICAvKiAgICBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YXJnZXQgICAgICA6OiBUaGUgdGFyZ2V0IGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNvdXJjZSAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIChlLmcuLCBhbiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBARlRfT3V0bGluZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZsYWdzICAgICAgIDo6IFRoZSByZW5kZXJpbmcgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ3JheV9zcGFucyAgOjogVGhlIGdyYXkgc3BhbiBkcmF3aW5nIGNhbGxiYWNrLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBibGFja19zcGFucyA6OiBVbnVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdF90ZXN0ICAgIDo6IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYml0X3NldCAgICAgOjogVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyICAgICAgICA6OiBVc2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gZWFjaCBkcmF3aW5nICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgY2FsbGJhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjbGlwX2JveCAgICA6OiBBbiBvcHRpb25hbCBjbGlwcGluZyBib3guICBJdCBpcyBvbmx5IHVzZWQgaW4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZGlyZWN0IHJlbmRlcmluZyBtb2RlLiAgTm90ZSB0aGF0IGNvb3JkaW5hdGVzIGhlcmUgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBleHByZXNzZWQgaW4gX2ludGVnZXJfIHBpeGVscyAoYW5kIG5vdCBpbiAqLworICAvKiAgICAgICAgICAgICAgICAgICAyNi42IGZpeGVkLXBvaW50IHVuaXRzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBhbnRpLWFsaWFzZWQgZ2x5cGggYml0bWFwIGlzIGRyYXduIGlmIHRoZSBARlRfUkFTVEVSX0ZMQUdfQUEgICAgKi8KKyAgLyogICAgYml0IGZsYWcgaXMgc2V0IGluIHRoZSBgZmxhZ3MnIGZpZWxkLCBvdGhlcndpc2UgYSBtb25vY2hyb21lICAgICAgICovCisgIC8qICAgIGJpdG1hcCBpcyBnZW5lcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIEBGVF9SQVNURVJfRkxBR19ESVJFQ1QgYml0IGZsYWcgaXMgc2V0IGluIGBmbGFncycsIHRoZSAgICAgICovCisgIC8qICAgIHJhc3RlciB3aWxsIGNhbGwgdGhlIGBncmF5X3NwYW5zJyBjYWxsYmFjayB0byBkcmF3IGdyYXkgcGl4ZWwgICAgICAqLworICAvKiAgICBzcGFucy4gIFRoaXMgYWxsb3dzIGRpcmVjdCBjb21wb3NpdGlvbiBvdmVyIGEgcHJlLWV4aXN0aW5nIGJpdG1hcCAgKi8KKyAgLyogICAgdGhyb3VnaCB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrcyB0byBwZXJmb3JtIHRoZSBzcGFuIGRyYXdpbmcgYW5kICAgICovCisgIC8qICAgIGNvbXBvc2l0aW9uLiAgICBOb3Qgc3VwcG9ydGVkIGJ5IHRoZSBtb25vY2hyb21lIHJhc3Rlcml6ZXIuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Jhc3Rlcl9QYXJhbXNfCisgIHsKKyAgICBjb25zdCBGVF9CaXRtYXAqICAgICAgICB0YXJnZXQ7CisgICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgc291cmNlOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgIEZUX1NwYW5GdW5jICAgICAgICAgICAgIGdyYXlfc3BhbnM7CisgICAgRlRfU3BhbkZ1bmMgICAgICAgICAgICAgYmxhY2tfc3BhbnM7ICAvKiB1bnVzZWQgKi8KKyAgICBGVF9SYXN0ZXJfQml0VGVzdF9GdW5jICBiaXRfdGVzdDsgICAgIC8qIHVudXNlZCAqLworICAgIEZUX1Jhc3Rlcl9CaXRTZXRfRnVuYyAgIGJpdF9zZXQ7ICAgICAgLyogdW51c2VkICovCisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgdXNlcjsKKyAgICBGVF9CQm94ICAgICAgICAgICAgICAgICBjbGlwX2JveDsKKworICB9IEZUX1Jhc3Rlcl9QYXJhbXM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfTmV3RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHJhc3RlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgOjogQSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXIgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYG1lbW9yeScgcGFyYW1ldGVyIGlzIGEgdHlwZWxlc3MgcG9pbnRlciBpbiBvcmRlciB0byBhdm9pZCAgICAgKi8KKyAgLyogICAgdW4td2FudGVkIGRlcGVuZGVuY2llcyBvbiB0aGUgcmVzdCBvZiB0aGUgRnJlZVR5cGUgY29kZS4gIEluICAgICAgICovCisgIC8qICAgIHByYWN0aWNlLCBpdCBpcyBhbiBARlRfTWVtb3J5IG9iamVjdCwgaS5lLiwgYSBoYW5kbGUgdG8gdGhlICAgICAgICAqLworICAvKiAgICBzdGFuZGFyZCBGcmVlVHlwZSBtZW1vcnkgYWxsb2NhdG9yLiAgSG93ZXZlciwgdGhpcyBmaWVsZCBjYW4gYmUgICAgKi8KKyAgLyogICAgY29tcGxldGVseSBpZ25vcmVkIGJ5IGEgZ2l2ZW4gcmFzdGVyIGltcGxlbWVudGF0aW9uLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGludAorICAoKkZUX1Jhc3Rlcl9OZXdGdW5jKSggdm9pZCogICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmFzdGVyKiAgcmFzdGVyICk7CisKKyNkZWZpbmUgRlRfUmFzdGVyX05ld19GdW5jICBGVF9SYXN0ZXJfTmV3RnVuYworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX0RvbmVGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgYSBnaXZlbiByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFzdGVyIDo6IEEgaGFuZGxlIHRvIHRoZSByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9SYXN0ZXJfRG9uZUZ1bmMpKCBGVF9SYXN0ZXIgIHJhc3RlciApOworCisjZGVmaW5lIEZUX1Jhc3Rlcl9Eb25lX0Z1bmMgIEZUX1Jhc3Rlcl9Eb25lRnVuYworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX1Jlc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgdXNlZCB0byBwcm92aWRlIGFuIGFyZWEgb2YgbWVtb3J5IGNhbGxlZCB0aGUgYHJlbmRlciAgICAgICovCisgIC8qICAgIHBvb2wnIGF2YWlsYWJsZSB0byBhbGwgcmVnaXN0ZXJlZCByYXN0ZXJzLiAgVGhpcyB3YXMgbm90IHRocmVhZCAgICAqLworICAvKiAgICBzYWZlIGhvd2V2ZXIgYW5kIG5vdyBGcmVlVHlwZSBuZXZlciBhbGxvY2F0ZXMgdGhpcyBwb29sLiAgTlVMTCAgICAgKi8KKyAgLyogICAgaXMgYWx3YXlzIHBhc3NlZCBpbiBhcyBwb29sX2Jhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlYWNoIHRpbWUgdGhlIHJlbmRlciBwb29sIGNoYW5nZXMsIG9yIGp1c3QgKi8KKyAgLyogICAgYWZ0ZXIgYSBuZXcgcmFzdGVyIG9iamVjdCBpcyBjcmVhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFzdGVyICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBuZXcgcmFzdGVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb29sX2Jhc2UgOjogVGhlIGFkZHJlc3MgaW4gbWVtb3J5IG9mIHRoZSByZW5kZXIgcG9vbC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvb2xfc2l6ZSA6OiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJhc3RlcnMgc2hvdWxkIGlnbm9yZSB0aGUgcmVuZGVyIHBvb2wgYW5kIHJlbHkgb24gZHluYW1pYyBvciBzdGFjayAqLworICAvKiAgICBhbGxvY2F0aW9uIGlmIHRoZXkgd2FudCB0byAoYSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IgaXMgICAgKi8KKyAgLyogICAgcGFzc2VkIHRvIHRoZSByYXN0ZXIgY29uc3RydWN0b3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9SYXN0ZXJfUmVzZXRGdW5jKSggRlRfUmFzdGVyICAgICAgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIHBvb2xfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIHBvb2xfc2l6ZSApOworCisjZGVmaW5lIEZUX1Jhc3Rlcl9SZXNldF9GdW5jICBGVF9SYXN0ZXJfUmVzZXRGdW5jCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfU2V0TW9kZUZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIGEgZ2VuZXJpYyBmYWNpbGl0eSB0byBjaGFuZ2UgbW9kZXMgb3IgYXR0cmlidXRlcyAgKi8KKyAgLyogICAgaW4gYSBnaXZlbiByYXN0ZXIuICBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIG9yICAgICovCisgIC8qICAgIHNpbXBseSB0byBhbGxvdyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBgZmVhdHVyZXMnIGluIGEgZ2l2ZW4gICAgICAqLworICAvKiAgICByYXN0ZXIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXIgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1vZGUgICA6OiBBIDQtYnl0ZSB0YWcgdXNlZCB0byBuYW1lIHRoZSBtb2RlIG9yIHByb3BlcnR5LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXJncyAgIDo6IEEgcG9pbnRlciB0byB0aGUgbmV3IG1vZGUvcHJvcGVydHkgdG8gdXNlLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGludAorICAoKkZUX1Jhc3Rlcl9TZXRNb2RlRnVuYykoIEZUX1Jhc3RlciAgICAgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgIGFyZ3MgKTsKKworI2RlZmluZSBGVF9SYXN0ZXJfU2V0X01vZGVfRnVuYyAgRlRfUmFzdGVyX1NldE1vZGVGdW5jCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SYXN0ZXJfUmVuZGVyRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnZva2UgYSBnaXZlbiByYXN0ZXIgdG8gc2Nhbi1jb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgaW50byBhICAgKi8KKyAgLyogICAgdGFyZ2V0IGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFzdGVyIDo6IEEgaGFuZGxlIHRvIHRoZSByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXJhbXMgOjogQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvICAgICAgKi8KKyAgLyogICAgICAgICAgICAgIHN0b3JlIHRoZSByZW5kZXJpbmcgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIGRlcGVuZHMgb24gdGhlIHJhc3RlcidzIGdseXBoICovCisgIC8qICAgIGZvcm1hdCBkZWZpbmVkIGluIGl0cyBARlRfUmFzdGVyX0Z1bmNzIHN0cnVjdHVyZS4gIEl0IGNhbiBiZSBhbiAgICAqLworICAvKiAgICBARlRfT3V0bGluZSBvciBhbnl0aGluZyBlbHNlIGluIG9yZGVyIHRvIHN1cHBvcnQgYSBsYXJnZSBhcnJheSBvZiAgKi8KKyAgLyogICAgZ2x5cGggZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIGFsc28gdGhhdCB0aGUgcmVuZGVyIGZ1bmN0aW9uIGNhbiBmYWlsIGFuZCByZXR1cm4gYSAgICAgICAgICAgKi8KKyAgLyogICAgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGVycm9yIGNvZGUgaWYgdGhlIHJhc3RlciB1c2VkIGRvZXMgICovCisgIC8qICAgIG5vdCBzdXBwb3J0IGRpcmVjdCBjb21wb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWFhYOiBGb3Igbm93LCB0aGUgc3RhbmRhcmQgcmFzdGVyIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgICAgICAgICAgICovCisgIC8qICAgICAgICAgY29tcG9zaXRpb24gYnV0IHRoaXMgc2hvdWxkIGNoYW5nZSBmb3IgdGhlIGZpbmFsIHJlbGVhc2UgKHNlZSAqLworICAvKiAgICAgICAgIHRoZSBmaWxlcyBgZGVtb3Mvc3JjL2Z0Z3JheXMuYycgYW5kIGBkZW1vcy9zcmMvZnRncmF5czIuYycgICAgKi8KKyAgLyogICAgICAgICBmb3IgZXhhbXBsZXMgb2YgZGlzdGluY3QgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9ydCBkaXJlY3QgICovCisgIC8qICAgICAgICAgY29tcG9zaXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBpbnQKKyAgKCpGVF9SYXN0ZXJfUmVuZGVyRnVuYykoIEZUX1Jhc3RlciAgICAgICAgICAgICAgICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9SYXN0ZXJfUGFyYW1zKiAgcGFyYW1zICk7CisKKyNkZWZpbmUgRlRfUmFzdGVyX1JlbmRlcl9GdW5jICBGVF9SYXN0ZXJfUmVuZGVyRnVuYworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmFzdGVyX0Z1bmNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gcmFzdGVyIGNsYXNzIHRvIHRoZSBsaWJyYXJ5LiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGhfZm9ybWF0ICA6OiBUaGUgc3VwcG9ydGVkIGdseXBoIGZvcm1hdCBmb3IgdGhpcyByYXN0ZXIuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXJfbmV3ICAgIDo6IFRoZSByYXN0ZXIgY29uc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJhc3Rlcl9yZXNldCAgOjogVXNlZCB0byByZXNldCB0aGUgcmVuZGVyIHBvb2wgd2l0aGluIHRoZSByYXN0ZXIuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFzdGVyX3JlbmRlciA6OiBBIGZ1bmN0aW9uIHRvIHJlbmRlciBhIGdseXBoIGludG8gYSBnaXZlbiBiaXRtYXAuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXJfZG9uZSAgIDo6IFRoZSByYXN0ZXIgZGVzdHJ1Y3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9SYXN0ZXJfRnVuY3NfCisgIHsKKyAgICBGVF9HbHlwaF9Gb3JtYXQgICAgICAgIGdseXBoX2Zvcm1hdDsKKyAgICBGVF9SYXN0ZXJfTmV3RnVuYyAgICAgIHJhc3Rlcl9uZXc7CisgICAgRlRfUmFzdGVyX1Jlc2V0RnVuYyAgICByYXN0ZXJfcmVzZXQ7CisgICAgRlRfUmFzdGVyX1NldE1vZGVGdW5jICByYXN0ZXJfc2V0X21vZGU7CisgICAgRlRfUmFzdGVyX1JlbmRlckZ1bmMgICByYXN0ZXJfcmVuZGVyOworICAgIEZUX1Jhc3Rlcl9Eb25lRnVuYyAgICAgcmFzdGVyX2RvbmU7CisKKyAgfSBGVF9SYXN0ZXJfRnVuY3M7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUSU1BR0VfSF9fICovCisKKworLyogRU5EICovCisKKworLyogTG9jYWwgVmFyaWFibGVzOiAqLworLyogY29kaW5nOiB1dGYtOCAgICAqLworLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRpbmNyZW0uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0aW5jcmVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwYWYyNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0aW5jcmVtLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0aW5jcmVtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBpbmNyZW1lbnRhbCBsb2FkaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUSU5DUkVNX0hfXworI2RlZmluZSBfX0ZUSU5DUkVNX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICAgaW5jcmVtZW50YWwKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgICBJbmNyZW1lbnRhbCBMb2FkaW5nCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICAgQ3VzdG9tIEdseXBoIExvYWRpbmcuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBmdW5jdGlvbnMgdXNlZCB0byBwZXJmb3JtIHNvLWNhbGxlZAorICAgKiAgIGBpbmNyZW1lbnRhbCcgZ2x5cGggbG9hZGluZy4gIFRoaXMgaXMgYSBtb2RlIHdoZXJlIGFsbCBnbHlwaHMgbG9hZGVkCisgICAqICAgZnJvbSBhIGdpdmVuIEBGVF9GYWNlIGFyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uLgorICAgKgorICAgKiAgIEFwYXJ0IGZyb20gdGhhdCwgYWxsIG90aGVyIHRhYmxlcyBhcmUgbG9hZGVkIG5vcm1hbGx5IGZyb20gdGhlIGZvbnQKKyAgICogICBmaWxlLiAgVGhpcyBtb2RlIGlzIHVzZWZ1bCB3aGVuIEZyZWVUeXBlIGlzIHVzZWQgd2l0aGluIGFub3RoZXIKKyAgICogICBlbmdpbmUsIGUuZy4sIGEgUG9zdFNjcmlwdCBJbWFnaW5nIFByb2Nlc3Nvci4KKyAgICoKKyAgICogICBUbyBlbmFibGUgdGhpcyBtb2RlLCB5b3UgbXVzdCB1c2UgQEZUX09wZW5fRmFjZSwgcGFzc2luZyBhbgorICAgKiAgIEBGVF9QYXJhbWV0ZXIgd2l0aCB0aGUgQEZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTCB0YWcgYW5kIGFuCisgICAqICAgQEZUX0luY3JlbWVudGFsX0ludGVyZmFjZSB2YWx1ZS4gIFNlZSB0aGUgY29tbWVudHMgZm9yCisgICAqICAgQEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyBmb3IgYW4gZXhhbXBsZS4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0luY3JlbWVudGFsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBvcGFxdWUgdHlwZSBkZXNjcmliaW5nIGEgdXNlci1wcm92aWRlZCBvYmplY3QgdXNlZCB0byBpbXBsZW1lbnQKKyAgICogICBgaW5jcmVtZW50YWwnIGdseXBoIGxvYWRpbmcgd2l0aGluIEZyZWVUeXBlLiAgVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQKKyAgICogICBlbWJlZGRlZCBmb250cyBpbiBjZXJ0YWluIGVudmlyb25tZW50cyAoZS5nLiwgUG9zdFNjcmlwdCBpbnRlcnByZXRlcnMpLAorICAgKiAgIHdoZXJlIHRoZSBnbHlwaCBkYXRhIGlzbid0IGluIHRoZSBmb250IGZpbGUsIG9yIG11c3QgYmUgb3ZlcnJpZGRlbiBieQorICAgKiAgIGRpZmZlcmVudCB2YWx1ZXMuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEl0IGlzIHVwIHRvIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gY3JlYXRlIGFuZCBpbXBsZW1lbnQgQEZUX0luY3JlbWVudGFsCisgICAqICAgb2JqZWN0cywgYXMgbG9uZyBhcyB0aGV5IHByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgbWV0aG9kcworICAgKiAgIEBGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jLCBARlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMKKyAgICogICBhbmQgQEZUX0luY3JlbWVudGFsX0dldEdseXBoTWV0cmljc0Z1bmMuCisgICAqCisgICAqICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBARlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjIHRvIHVuZGVyc3RhbmQgaG93CisgICAqICAgdG8gdXNlIGluY3JlbWVudGFsIG9iamVjdHMgd2l0aCBGcmVlVHlwZS4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0luY3JlbWVudGFsUmVjXyogIEZUX0luY3JlbWVudGFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc21hbGwgc3RydWN0dXJlIHVzZWQgdG8gY29udGFpbiB0aGUgYmFzaWMgZ2x5cGggbWV0cmljcyByZXR1cm5lZAorICAgKiAgIGJ5IHRoZSBARlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyBtZXRob2QuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgYmVhcmluZ194IDo6CisgICAqICAgICBMZWZ0IGJlYXJpbmcsIGluIGZvbnQgdW5pdHMuCisgICAqCisgICAqICAgYmVhcmluZ195IDo6CisgICAqICAgICBUb3AgYmVhcmluZywgaW4gZm9udCB1bml0cy4KKyAgICoKKyAgICogICBhZHZhbmNlIDo6CisgICAqICAgICBIb3Jpem9udGFsIGNvbXBvbmVudCBvZiBnbHlwaCBhZHZhbmNlLCBpbiBmb250IHVuaXRzLgorICAgKgorICAgKiAgIGFkdmFuY2VfdiA6OgorICAgKiAgICAgVmVydGljYWwgY29tcG9uZW50IG9mIGdseXBoIGFkdmFuY2UsIGluIGZvbnQgdW5pdHMuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZXNlIGNvcnJlc3BvbmQgdG8gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBtZXRyaWNzIGRlcGVuZGluZyBvbiB0aGUKKyAgICogICB2YWx1ZSBvZiB0aGUgYHZlcnRpY2FsJyBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24KKyAgICogICBARlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYy4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjXworICB7CisgICAgRlRfTG9uZyAgYmVhcmluZ194OworICAgIEZUX0xvbmcgIGJlYXJpbmdfeTsKKyAgICBGVF9Mb25nICBhZHZhbmNlOworICAgIEZUX0xvbmcgIGFkdmFuY2VfdjsgICAgIC8qIHNpbmNlIDIuMy4xMiAqLworCisgIH0gRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhbiBARlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYyBzdHJ1Y3R1cmUuCisgICAqCisgICAqLworICAgdHlwZWRlZiBzdHJ1Y3QgRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlY18qICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIGNhbGxlZCBieSBGcmVlVHlwZSB0byBhY2Nlc3MgYSBnaXZlbiBnbHlwaCdzIGRhdGEgYnl0ZXMKKyAgICogICBkdXJpbmcgQEZUX0xvYWRfR2x5cGggb3IgQEZUX0xvYWRfQ2hhciBpZiBpbmNyZW1lbnRhbCBsb2FkaW5nIGlzCisgICAqICAgZW5hYmxlZC4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgZ2x5cGgncyBkYXRhIGJ5dGVzIGRlcGVuZHMgb24gdGhlIGZvbnQKKyAgICogICBmaWxlIGZvcm1hdC4gIEZvciBUcnVlVHlwZSwgaXQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSByYXcgYnl0ZXMgd2l0aGluCisgICAqICAgdGhlIGBnbHlmJyB0YWJsZS4gIEZvciBQb3N0U2NyaXB0IGZvcm1hdHMsIGl0IG11c3QgY29ycmVzcG9uZCB0byB0aGUKKyAgICogICAqdW5lbmNyeXB0ZWQqIGNoYXJzdHJpbmcgYnl0ZXMsIHdpdGhvdXQgYW55IGBsZW5JVicgaGVhZGVyLiAgSXQgaXMKKyAgICogICB1bmRlZmluZWQgZm9yIGFueSBvdGhlciBmb3JtYXQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBpbmNyZW1lbnRhbCA6OgorICAgKiAgICAgSGFuZGxlIHRvIGFuIG9wYXF1ZSBARlRfSW5jcmVtZW50YWwgaGFuZGxlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQKKyAgICogICAgIGFwcGxpY2F0aW9uLgorICAgKgorICAgKiAgIGdseXBoX2luZGV4IDo6CisgICAqICAgICBJbmRleCBvZiByZWxldmFudCBnbHlwaC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhZGF0YSA6OgorICAgKiAgICAgQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgcmV0dXJuZWQgZ2x5cGggZGF0YSBieXRlcyAod2hpY2ggd2lsbCBiZQorICAgKiAgICAgYWNjZXNzZWQgYXMgYSByZWFkLW9ubHkgYnl0ZSBibG9jaykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSB0aGUgbWV0aG9kCisgICAqICAgQEZUX0luY3JlbWVudGFsX0ZyZWVHbHlwaERhdGFGdW5jIHdpbGwgYmUgY2FsbGVkIGxhdGVyIHRvIHJlbGVhc2UKKyAgICogICB0aGUgZGF0YSBieXRlcy4KKyAgICoKKyAgICogICBOZXN0ZWQgY2FsbHMgdG8gQEZUX0luY3JlbWVudGFsX0dldEdseXBoRGF0YUZ1bmMgY2FuIGhhcHBlbiBmb3IKKyAgICogICBjb21wb3VuZCBnbHlwaHMuCisgICAqCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhEYXRhRnVuYykoIEZUX0luY3JlbWVudGFsICBpbmNyZW1lbnRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EYXRhKiAgICAgICAgYWRhdGEgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfSW5jcmVtZW50YWxfRnJlZUdseXBoRGF0YUZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byByZWxlYXNlIHRoZSBnbHlwaCBkYXRhIGJ5dGVzIHJldHVybmVkIGJ5IGEKKyAgICogICBzdWNjZXNzZnVsIGNhbGwgdG8gQEZUX0luY3JlbWVudGFsX0dldEdseXBoRGF0YUZ1bmMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBpbmNyZW1lbnRhbCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYW4gb3BhcXVlIEBGVF9JbmNyZW1lbnRhbCBoYW5kbGUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudAorICAgKiAgICAgYXBwbGljYXRpb24uCisgICAqCisgICAqICAgZGF0YSA6OgorICAgKiAgICAgQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgZ2x5cGggZGF0YSBieXRlcyAod2hpY2ggd2lsbCBiZSBhY2Nlc3NlZAorICAgKiAgICAgYXMgYSByZWFkLW9ubHkgYnl0ZSBibG9jaykuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9JbmNyZW1lbnRhbF9GcmVlR2x5cGhEYXRhRnVuYykoIEZUX0luY3JlbWVudGFsICBpbmNyZW1lbnRhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RhdGEqICAgICAgICBkYXRhICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0luY3JlbWVudGFsX0dldEdseXBoTWV0cmljc0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byByZXRyaWV2ZSB0aGUgYmFzaWMgbWV0cmljcyBvZiBhIGdpdmVuIGdseXBoIGluZGV4CisgICAqICAgYmVmb3JlIGFjY2Vzc2luZyBpdHMgZGF0YS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsIGluIGNlcnRhaW4KKyAgICogICBmb3JtYXRzIGxpa2UgVHJ1ZVR5cGUsIHRoZSBtZXRyaWNzIGFyZSBzdG9yZWQgaW4gYSBkaWZmZXJlbnQgcGxhY2UgZnJvbQorICAgKiAgIHRoZSBnbHlwaCBpbWFnZXMgcHJvcGVyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaW5jcmVtZW50YWwgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGFuIG9wYXF1ZSBARlRfSW5jcmVtZW50YWwgaGFuZGxlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQKKyAgICogICAgIGFwcGxpY2F0aW9uLgorICAgKgorICAgKiAgIGdseXBoX2luZGV4IDo6CisgICAqICAgICBJbmRleCBvZiByZWxldmFudCBnbHlwaC4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgSWYgdHJ1ZSwgcmV0dXJuIHZlcnRpY2FsIG1ldHJpY3MuCisgICAqCisgICAqICAgYW1ldHJpY3MgOjoKKyAgICogICAgIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dC4KKyAgICogICAgIFRoZSBvcmlnaW5hbCBnbHlwaCBtZXRyaWNzLCBpZiBhbnksIGluIGZvbnQgdW5pdHMuICBJZiBtZXRyaWNzIGFyZQorICAgKiAgICAgbm90IGF2YWlsYWJsZSBhbGwgdGhlIHZhbHVlcyBtdXN0IGJlIHNldCB0byB6ZXJvLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFtZXRyaWNzIDo6CisgICAqICAgICBUaGUgcmVwbGFjZW1lbnQgZ2x5cGggbWV0cmljcyBpbiBmb250IHVuaXRzLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0luY3JlbWVudGFsX0dldEdseXBoTWV0cmljc0Z1bmMpCisgICAgICAgICAgICAgICAgICAgICAgKCBGVF9JbmNyZW1lbnRhbCAgICAgICAgICAgICAgaW5jcmVtZW50YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjICAqYW1ldHJpY3MgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX0luY3JlbWVudGFsX0Z1bmNzUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHRhYmxlIG9mIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIGZvbnRzIHRoYXQgbG9hZCBkYXRhCisgICAqICAgaW5jcmVtZW50YWxseS4gIFVzZWQgaW4gQEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBnZXRfZ2x5cGhfZGF0YSA6OgorICAgKiAgICAgVGhlIGZ1bmN0aW9uIHRvIGdldCBnbHlwaCBkYXRhLiAgTXVzdCBub3QgYmUgbnVsbC4KKyAgICoKKyAgICogICBmcmVlX2dseXBoX2RhdGEgOjoKKyAgICogICAgIFRoZSBmdW5jdGlvbiB0byByZWxlYXNlIGdseXBoIGRhdGEuICBNdXN0IG5vdCBiZSBudWxsLgorICAgKgorICAgKiAgIGdldF9nbHlwaF9tZXRyaWNzIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gZ2V0IGdseXBoIG1ldHJpY3MuICBNYXkgYmUgbnVsbCBpZiB0aGUgZm9udCBkb2VzCisgICAqICAgICBub3QgcHJvdmlkZSBvdmVycmlkaW5nIGdseXBoIG1ldHJpY3MuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfSW5jcmVtZW50YWxfRnVuY3NSZWNfCisgIHsKKyAgICBGVF9JbmNyZW1lbnRhbF9HZXRHbHlwaERhdGFGdW5jICAgICBnZXRfZ2x5cGhfZGF0YTsKKyAgICBGVF9JbmNyZW1lbnRhbF9GcmVlR2x5cGhEYXRhRnVuYyAgICBmcmVlX2dseXBoX2RhdGE7CisgICAgRlRfSW5jcmVtZW50YWxfR2V0R2x5cGhNZXRyaWNzRnVuYyAgZ2V0X2dseXBoX21ldHJpY3M7CisKKyAgfSBGVF9JbmNyZW1lbnRhbF9GdW5jc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIGJlIHVzZWQgd2l0aCBARlRfT3Blbl9GYWNlIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZXIKKyAgICogICB3YW50cyB0byBzdXBwb3J0IGluY3JlbWVudGFsIGdseXBoIGxvYWRpbmcuICBZb3Ugc2hvdWxkIHVzZSBpdCB3aXRoCisgICAqICAgQEZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAqCisgICAqICAgICB7CisgICAqICAgICAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyAgaW5jX2ludDsKKyAgICogICAgICAgRlRfUGFyYW1ldGVyICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI7CisgICAqICAgICAgIEZUX09wZW5fQXJncyAgICAgICAgICAgICAgICAgb3Blbl9hcmdzOworICAgKgorICAgKgorICAgKiAgICAgICAvLyBzZXQgdXAgaW5jcmVtZW50YWwgZGVzY3JpcHRvcgorICAgKiAgICAgICBpbmNfaW50LmZ1bmNzICA9IG15X2Z1bmNzOworICAgKiAgICAgICBpbmNfaW50Lm9iamVjdCA9IG15X29iamVjdDsKKyAgICoKKyAgICogICAgICAgLy8gc2V0IHVwIG9wdGlvbmFsIHBhcmFtZXRlcgorICAgKiAgICAgICBwYXJhbWV0ZXIudGFnICA9IEZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTDsKKyAgICogICAgICAgcGFyYW1ldGVyLmRhdGEgPSAmaW5jX2ludDsKKyAgICoKKyAgICogICAgICAgLy8gc2V0IHVwIEZUX09wZW5fQXJncyBzdHJ1Y3R1cmUKKyAgICogICAgICAgb3Blbl9hcmdzLmZsYWdzICAgICAgPSBGVF9PUEVOX1BBVEhOQU1FIHwgRlRfT1BFTl9QQVJBTVM7CisgICAqICAgICAgIG9wZW5fYXJncy5wYXRobmFtZSAgID0gbXlfZm9udF9wYXRobmFtZTsKKyAgICogICAgICAgb3Blbl9hcmdzLm51bV9wYXJhbXMgPSAxOworICAgKiAgICAgICBvcGVuX2FyZ3MucGFyYW1zICAgICA9ICZwYXJhbWV0ZXI7IC8vIHdlIHVzZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQKKyAgICoKKyAgICogICAgICAgLy8gb3BlbiB0aGUgZm9udAorICAgKiAgICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJm9wZW5fYXJncywgaW5kZXgsICZmYWNlICk7CisgICAqICAgICAgIC4uLgorICAgKiAgICAgfQorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlY18KKyAgeworICAgIGNvbnN0IEZUX0luY3JlbWVudGFsX0Z1bmNzUmVjKiAgZnVuY3M7CisgICAgRlRfSW5jcmVtZW50YWwgICAgICAgICAgICAgICAgICBvYmplY3Q7CisKKyAgfSBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBwb2ludGVyIHRvIGFuIEBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgc3RydWN0dXJlLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMqICAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZXMgdG8gaW5kaWNhdGUKKyAgICogICBhbiBpbmNyZW1lbnRhbCBsb2FkaW5nIG9iamVjdCB0byBiZSB1c2VkIGJ5IEZyZWVUeXBlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMICBGVF9NQUtFX1RBRyggJ2knLCAnbicsICdjJywgJ3InICkKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRJTkNSRU1fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGxjZGZpbC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRsY2RmaWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Q5OTlhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRsY2RmaWwuaApAQCAtMCwwICsxLDI1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRsY2RmaWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgICAgICAgICAgICovCisvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUX0xDRF9GSUxURVJfSF9fCisjZGVmaW5lIF9fRlRfTENEX0ZJTFRFUl9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgbGNkX2ZpbHRlcmluZworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgTENEIEZpbHRlcmluZworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgUmVkdWNlIGNvbG9yIGZyaW5nZXMgb2YgTENELW9wdGltaXplZCBiaXRtYXBzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciBBUEkgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxvdy1wYXNzCisgICAqICAgZmlsdGVyLCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8gTENELW9wdGltaXplZCBiaXRtYXBzIGdlbmVyYXRlZAorICAgKiAgIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgaXMgdXNlZnVsIHRvIHJlZHVjZSBjb2xvciBmcmluZ2VzCisgICAqICAgdGhhdCB3b3VsZCBvY2N1ciB3aXRoIHVuZmlsdGVyZWQgcmVuZGVyaW5nLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBubyBmaWx0ZXIgaXMgYWN0aXZlIGJ5IGRlZmF1bHQsIGFuZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMKKyAgICogICAqbm90KiBpbXBsZW1lbnRlZCBpbiBkZWZhdWx0IGJ1aWxkcyBvZiB0aGUgbGlicmFyeS4gIFlvdSBuZWVkIHRvCisgICAqICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyIGBmdG9wdGlvbi5oJyBmaWxlCisgICAqICAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXQuCisgICAqCisgICAqICAgRnJlZVR5cGUgZ2VuZXJhdGVzIGFscGhhIGNvdmVyYWdlIG1hcHMsIHdoaWNoIGFyZSBsaW5lYXIgYnkgbmF0dXJlLgorICAgKiAgIEZvciBpbnN0YW5jZSwgdGhlIHZhbHVlIDB4ODAgaW4gYml0bWFwIHJlcHJlc2VudGF0aW9uIG1lYW5zIHRoYXQKKyAgICogICAod2l0aGluIG51bWVyaWNhbCBwcmVjaXNpb24pIDB4ODAvMHhGRiBmcmFjdGlvbiBvZiB0aGF0IHBpeGVsIGlzCisgICAqICAgY292ZXJlZCBieSB0aGUgZ2x5cGgncyBvdXRsaW5lLiAgVGhlIGJsZW5kaW5nIGZ1bmN0aW9uIGZvciBwbGFjaW5nCisgICAqICAgdGV4dCBvdmVyIGEgYmFja2dyb3VuZCBpcworICAgKgorICAgKiAgIHsKKyAgICogICAgIGRzdCA9IGFscGhhICogc3JjICsgKDEgLSBhbHBoYSkgKiBkc3QgICAgLAorICAgKiAgIH0KKyAgICoKKyAgICogICB3aGljaCBpcyBrbm93biBhcyBPVkVSLiAgSG93ZXZlciwgd2hlbiBjYWxjdWxhdGluZyB0aGUgb3V0cHV0IG9mIHRoZQorICAgKiAgIE9WRVIgb3BlcmF0b3IsIHRoZSBzb3VyY2UgY29sb3JzIHNob3VsZCBmaXJzdCBiZSB0cmFuc2Zvcm1lZCB0byBhCisgICAqICAgbGluZWFyIGNvbG9yIHNwYWNlLCB0aGVuIGFscGhhIGJsZW5kZWQgaW4gdGhhdCBzcGFjZSwgYW5kIHRyYW5zZm9ybWVkCisgICAqICAgYmFjayB0byB0aGUgb3V0cHV0IGNvbG9yIHNwYWNlLgorICAgKgorICAgKiAgIFdoZW4gbGluZWFyIGxpZ2h0IGJsZW5kaW5nIGlzIHVzZWQsIHRoZSBkZWZhdWx0IEZJUjUgZmlsdGVyaW5nCisgICAqICAgd2VpZ2h0cyAoYXMgZ2l2ZW4gYnkgRlRfTENEX0ZJTFRFUl9ERUZBVUxUKSBhcmUgbm8gbG9uZ2VyIG9wdGltYWwsIGFzCisgICAqICAgdGhleSBoYXZlIGJlZW4gZGVzaWduZWQgZm9yIGJsYWNrIG9uIHdoaXRlIHJlbmRlcmluZyB3aGlsZSBsYWNraW5nCisgICAqICAgZ2FtbWEgY29ycmVjdGlvbi4gIFRvIHByZXNlcnZlIGNvbG9yIG5ldXRyYWxpdHksIHdlaWdodHMgZm9yIGEgRklSNQorICAgKiAgIGZpbHRlciBzaG91bGQgYmUgY2hvc2VuIGFjY29yZGluZyB0byB0d28gZnJlZSBwYXJhbWV0ZXJzIGBhJyBhbmQgYGMnLAorICAgKiAgIGFuZCB0aGUgRklSIHdlaWdodHMgc2hvdWxkIGJlCisgICAqCisgICAqICAgeworICAgKiAgICAgW2EgLSBjLCBhICsgYywgMiAqIGEsIGEgKyBjLCBhIC0gY10gICAgLgorICAgKiAgIH0KKyAgICoKKyAgICogICBUaGlzIGZvcm11bGEgZ2VuZXJhdGVzIGVxdWFsIHdlaWdodHMgZm9yIGFsbCB0aGUgY29sb3IgcHJpbWFyaWVzCisgICAqICAgYWNyb3NzIHRoZSBmaWx0ZXIga2VybmVsLCB3aGljaCBtYWtlcyBpdCBjb2xvcmxlc3MuICBPbmUgc3VnZ2VzdGVkCisgICAqICAgc2V0IG9mIHdlaWdodHMgaXMKKyAgICoKKyAgICogICB7CisgICAqICAgICBbMHgxMCwgMHg1MCwgMHg2MCwgMHg1MCwgMHgxMF0gICAgLAorICAgKiAgIH0KKyAgICoKKyAgICogICB3aGVyZSBgYScgaGFzIHZhbHVlIDB4MzAgYW5kIGBiJyB2YWx1ZSAweDIwLiAgVGhlIHdlaWdodHMgaW4gZmlsdGVyCisgICAqICAgbWF5IGhhdmUgYSBzdW0gbGFyZ2VyIHRoYW4gMHgxMDAsIHdoaWNoIGluY3JlYXNlcyBjb2xvcmF0aW9uIHNsaWdodGx5CisgICAqICAgYnV0IGFsc28gaW1wcm92ZXMgY29udHJhc3QuCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfTGNkRmlsdGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgdmFsdWVzIHRvIGlkZW50aWZ5IHZhcmlvdXMgdHlwZXMgb2YgTENEIGZpbHRlcnMuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfTENEX0ZJTFRFUl9OT05FIDo6CisgICAqICAgICBEbyBub3QgcGVyZm9ybSBmaWx0ZXJpbmcuICBXaGVuIHVzZWQgd2l0aCBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMKKyAgICogICAgIHJlc3VsdHMgaW4gc29tZXRpbWVzIHNldmVyZSBjb2xvciBmcmluZ2VzLgorICAgKgorICAgKiAgIEZUX0xDRF9GSUxURVJfREVGQVVMVCA6OgorICAgKiAgICAgVGhlIGRlZmF1bHQgZmlsdGVyIHJlZHVjZXMgY29sb3IgZnJpbmdlcyBjb25zaWRlcmFibHksIGF0IHRoZSBjb3N0CisgICAqICAgICBvZiBhIHNsaWdodCBibHVycmluZXNzIGluIHRoZSBvdXRwdXQuCisgICAqCisgICAqICAgRlRfTENEX0ZJTFRFUl9MSUdIVCA6OgorICAgKiAgICAgVGhlIGxpZ2h0IGZpbHRlciBpcyBhIHZhcmlhbnQgdGhhdCBwcm9kdWNlcyBsZXNzIGJsdXJyaW5lc3MgYXQgdGhlCisgICAqICAgICBjb3N0IG9mIHNsaWdodGx5IG1vcmUgY29sb3IgZnJpbmdlcyB0aGFuIHRoZSBkZWZhdWx0IG9uZS4gIEl0IG1pZ2h0CisgICAqICAgICBiZSBiZXR0ZXIsIGRlcGVuZGluZyBvbiB0YXN0ZSwgeW91ciBtb25pdG9yLCBvciB5b3VyIHBlcnNvbmFsIHZpc2lvbi4KKyAgICoKKyAgICogICBGVF9MQ0RfRklMVEVSX0xFR0FDWSA6OgorICAgKiAgICAgVGhpcyBmaWx0ZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGxpYlhmdCBjb2xvciBmaWx0ZXIuICBJdAorICAgKiAgICAgcHJvdmlkZXMgaGlnaCBjb250cmFzdCBvdXRwdXQgYnV0IGNhbiBleGhpYml0IHJlYWxseSBiYWQgY29sb3IKKyAgICogICAgIGZyaW5nZXMgaWYgZ2x5cGhzIGFyZSBub3QgZXh0cmVtZWx5IHdlbGwgaGludGVkIHRvIHRoZSBwaXhlbCBncmlkLgorICAgKiAgICAgSW4gb3RoZXIgd29yZHMsIGl0IG9ubHkgd29ya3Mgd2VsbCBpZiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUKKyAgICogICAgIGludGVycHJldGVyIGlzIGVuYWJsZWQgKmFuZCogaGlnaC1xdWFsaXR5IGhpbnRlZCBmb250cyBhcmUgdXNlZC4KKyAgICoKKyAgICogICAgIFRoaXMgZmlsdGVyIGlzIG9ubHkgcHJvdmlkZWQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMsIGFuZCBtaWdodCBiZQorICAgKiAgICAgZGlzYWJsZWQgb3Igc3RheSB1bnN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4zLjAKKyAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfTGNkRmlsdGVyXworICB7CisgICAgRlRfTENEX0ZJTFRFUl9OT05FICAgID0gMCwKKyAgICBGVF9MQ0RfRklMVEVSX0RFRkFVTFQgPSAxLAorICAgIEZUX0xDRF9GSUxURVJfTElHSFQgICA9IDIsCisgICAgRlRfTENEX0ZJTFRFUl9MRUdBQ1kgID0gMTYsCisKKyAgICBGVF9MQ0RfRklMVEVSX01BWCAgIC8qIGRvIG5vdCByZW1vdmUgKi8KKworICB9IEZUX0xjZEZpbHRlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuYzoKKyAgICogICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFwcGx5IGNvbG9yIGZpbHRlcmluZyB0byBMQ0QgZGVjaW1hdGVkCisgICAqICAgYml0bWFwcywgbGlrZSB0aGUgb25lcyB1c2VkIHdoZW4gY2FsbGluZyBARlRfUmVuZGVyX0dseXBoIHdpdGgKKyAgICogICBARlRfUkVOREVSX01PREVfTENEIG9yIEBGVF9SRU5ERVJfTU9ERV9MQ0RfVi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICBmaWx0ZXIgOjoKKyAgICogICAgIFRoZSBmaWx0ZXIgdHlwZS4KKyAgICoKKyAgICogICAgIFlvdSBjYW4gdXNlIEBGVF9MQ0RfRklMVEVSX05PTkUgaGVyZSB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgb3IKKyAgICogICAgIEBGVF9MQ0RfRklMVEVSX0RFRkFVTFQgdG8gdXNlIGEgZGVmYXVsdCBmaWx0ZXIgdGhhdCBzaG91bGQgd29yaworICAgKiAgICAgd2VsbCBvbiBtb3N0IExDRCBzY3JlZW5zLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIENsaWVudHMgbXVzdCBtYWtlIGFuCisgICAqICAgZXhwbGljaXQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggYSBgZmlsdGVyJyB2YWx1ZSBvdGhlciB0aGFuCisgICAqICAgQEZUX0xDRF9GSUxURVJfTk9ORSBpbiBvcmRlciB0byBlbmFibGUgaXQuCisgICAqCisgICAqICAgRHVlIHRvICpQQVRFTlRTKiBjb3ZlcmluZyBzdWJwaXhlbCByZW5kZXJpbmcsIHRoaXMgZnVuY3Rpb24gZG9lc24ndAorICAgKiAgIGRvIGFueXRoaW5nIGV4Y2VwdCByZXR1cm5pbmcgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHRoZQorICAgKiAgIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgaXMgbm90CisgICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKKyAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KKyAgICoKKyAgICogICBUaGUgZmlsdGVyIGFmZmVjdHMgZ2x5cGggYml0bWFwcyByZW5kZXJlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGgsCisgICAqICAgQEZUX091dGxpbmVfR2V0X0JpdG1hcCwgQEZUX0xvYWRfR2x5cGgsIGFuZCBARlRfTG9hZF9DaGFyLgorICAgKgorICAgKiAgIEl0IGRvZXMgX25vdF8gYWZmZWN0IHRoZSBvdXRwdXQgb2YgQEZUX091dGxpbmVfUmVuZGVyIGFuZAorICAgKiAgIEBGVF9PdXRsaW5lX0dldF9CaXRtYXAuCisgICAqCisgICAqICAgSWYgdGhpcyBmZWF0dXJlIGlzIGFjdGl2YXRlZCwgdGhlIGRpbWVuc2lvbnMgb2YgTENEIGdseXBoIGJpdG1hcHMgYXJlCisgICAqICAgZWl0aGVyIGxhcmdlciBvciB0YWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZworICAgKiAgIG91dGxpbmUgd2l0aCByZWdhcmRzIHRvIHRoZSBwaXhlbCBncmlkLiAgRm9yIGV4YW1wbGUsIGZvcgorICAgKiAgIEBGVF9SRU5ERVJfTU9ERV9MQ0QsIHRoZSBmaWx0ZXIgYWRkcyB1cCB0byAzfnBpeGVscyB0byB0aGUgbGVmdCwgYW5kCisgICAqICAgdXAgdG8gM35waXhlbHMgdG8gdGhlIHJpZ2h0LgorICAgKgorICAgKiAgIFRoZSBiaXRtYXAgb2Zmc2V0IHZhbHVlcyBhcmUgYWRqdXN0ZWQgY29ycmVjdGx5LCBzbyBjbGllbnRzIHNob3VsZG4ndAorICAgKiAgIG5lZWQgdG8gbW9kaWZ5IHRoZWlyIGxheW91dCBhbmQgZ2x5cGggcG9zaXRpb25pbmcgY29kZSB3aGVuIGVuYWJsaW5nCisgICAqICAgdGhlIGZpbHRlci4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy4wCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xjZEZpbHRlciAgZmlsdGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmM6CisgICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBVc2UgdGhpcyBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZmlsdGVyIHdlaWdodHMgc2VsZWN0ZWQgYnkKKyAgICogICBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIuICBCeSBkZWZhdWx0LCBGcmVlVHlwZSB1c2VzIHRoZSBxdWludHVwbGUKKyAgICogICAoMHgwMCwgMHg1NSwgMHg1NiwgMHg1NSwgMHgwMCkgZm9yIEZUX0xDRF9GSUxURVJfTElHSFQsIGFuZCAoMHgxMCwKKyAgICogICAweDQwLCAweDcwLCAweDQwLCAweDEwKSBmb3IgRlRfTENEX0ZJTFRFUl9ERUZBVUxUIGFuZAorICAgKiAgIEZUX0xDRF9GSUxURVJfTEVHQUNZLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IGluc3RhbmNlLgorICAgKgorICAgKiAgIHdlaWdodHMgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiBhcnJheTsgdGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUgZmlyc3QgZml2ZSBieXRlcyBhbmQKKyAgICogICAgIHVzZXMgdGhlbSB0byBzcGVjaWZ5IHRoZSBmaWx0ZXIgd2VpZ2h0cy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBEdWUgdG8gKlBBVEVOVFMqIGNvdmVyaW5nIHN1YnBpeGVsIHJlbmRlcmluZywgdGhpcyBmdW5jdGlvbiBkb2Vzbid0CisgICAqICAgZG8gYW55dGhpbmcgZXhjZXB0IHJldHVybmluZyBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgdGhlCisgICAqICAgY29uZmlndXJhdGlvbiBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpcyBub3QKKyAgICogICBkZWZpbmVkIGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHdoaWNoIHNob3VsZCBjb3JyZXNwb25kIHRvIGFsbAorICAgKiAgIGRlZmF1bHQgYnVpbGRzIG9mIEZyZWVUeXBlLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIHRvIGhhdmUKKyAgICogICBhbnkgZWZmZWN0LgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi40LjAKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMoIEZUX0xpYnJhcnkgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgICp3ZWlnaHRzICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUX0xDRF9GSUxURVJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGxpc3QuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0bGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjQ4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGxpc3QuaApAQCAtMCwwICsxLDI3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRsaXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEdlbmVyaWMgbGlzdCBzdXBwb3J0IGZvciBGcmVlVHlwZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyByZWxhdGl2ZSB0byBsaXN0IHByb2Nlc3NpbmcuICBJdHMgICAgICovCisgIC8qICBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgaW4gYGZyZWV0eXBlLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUTElTVF9IX18KKyNkZWZpbmUgX19GVExJU1RfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdF9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGlzdCBQcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2ltcGxlIG1hbmFnZW1lbnQgb2YgbGlzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBsaXN0ICAgICAgICAgICovCisgIC8qICAgIHByb2Nlc3NpbmcgdXNpbmcgZG91Ymx5LWxpbmtlZCBub2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0Tm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3ROb2RlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9BZGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3RfSW5zZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X0ZpbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9SZW1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3RfVXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X0l0ZXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9JdGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3RfRmluYWxpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X0Rlc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9GaW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluZCB0aGUgbGlzdCBub2RlIGZvciBhIGdpdmVuIGxpc3RlZCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdCA6OiBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRhdGEgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGxpc3RlZCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExpc3Qgbm9kZS4gIE5VTEwgaWYgaXQgd2Fzbid0IGZvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9MaXN0Tm9kZSApCisgIEZUX0xpc3RfRmluZCggRlRfTGlzdCAgbGlzdCwKKyAgICAgICAgICAgICAgICB2b2lkKiAgICBkYXRhICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X0FkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBcHBlbmQgYW4gZWxlbWVudCB0byB0aGUgZW5kIG9mIGEgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaXN0IDo6IEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbm9kZSA6OiBUaGUgbm9kZSB0byBhcHBlbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9MaXN0X0FkZCggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9JbnNlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5zZXJ0IGFuIGVsZW1lbnQgYXQgdGhlIGhlYWQgb2YgYSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdCA6OiBBIHBvaW50ZXIgdG8gcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5vZGUgOjogVGhlIG5vZGUgdG8gaW5zZXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfTGlzdF9JbnNlcnQoIEZUX0xpc3QgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3RfUmVtb3ZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJlbW92ZSBhIG5vZGUgZnJvbSBhIGxpc3QuICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgd2hldGhlciAgICAqLworICAvKiAgICB0aGUgbm9kZSBpcyBpbiB0aGUgbGlzdCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBub2RlIDo6IFRoZSBub2RlIHRvIHJlbW92ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaXN0IDo6IEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX0xpc3RfUmVtb3ZlKCBGVF9MaXN0ICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgIEZUX0xpc3ROb2RlICBub2RlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X1VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBNb3ZlIGEgbm9kZSB0byB0aGUgaGVhZC90b3Agb2YgYSBsaXN0LiAgVXNlZCB0byBtYWludGFpbiBMUlUgICAgICAgKi8KKyAgLyogICAgbGlzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdCA6OiBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5vZGUgOjogVGhlIG5vZGUgdG8gbW92ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfTGlzdF9VcCggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgIEZUX0xpc3ROb2RlICBub2RlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaXN0X0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBGVF9MaXN0IGl0ZXJhdG9yIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBhIGxpc3QgcGFyc2UgICAgKi8KKyAgLyogICAgYnkgQEZUX0xpc3RfSXRlcmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbm9kZSA6OiBUaGUgY3VycmVudCBpdGVyYXRpb24gbGlzdCBub2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyIDo6IEEgdHlwZWxlc3MgcG9pbnRlciBwYXNzZWQgdG8gQEZUX0xpc3RfSXRlcmF0ZS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfTGlzdF9JdGVyYXRvcikoIEZUX0xpc3ROb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9JdGVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGFyc2UgYSBsaXN0IGFuZCBjYWxscyBhIGdpdmVuIGl0ZXJhdG9yIGZ1bmN0aW9uIG9uIGVhY2ggZWxlbWVudC4gICovCisgIC8qICAgIE5vdGUgdGhhdCBwYXJzaW5nIGlzIHN0b3BwZWQgYXMgc29vbiBhcyBvbmUgb2YgdGhlIGl0ZXJhdG9yIGNhbGxzICAqLworICAvKiAgICByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaXN0ICAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaXRlcmF0b3IgOjogQW4gaXRlcmF0b3IgZnVuY3Rpb24sIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIGxpc3QuICovCisgIC8qICAgIHVzZXIgICAgIDo6IEEgdXNlci1zdXBwbGllZCBmaWVsZCB0aGF0IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kICAgICAqLworICAvKiAgICAgICAgICAgICAgICBhcmd1bWVudCB0byB0aGUgaXRlcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IChhIEZyZWVUeXBlIGVycm9yIGNvZGUpIG9mIHRoZSBsYXN0IGl0ZXJhdG9yIGNhbGwuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9MaXN0X0l0ZXJhdGUoIEZUX0xpc3QgICAgICAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgRlRfTGlzdF9JdGVyYXRvciAgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9EZXN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gQEZUX0xpc3QgaXRlcmF0b3IgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZHVyaW5nIGEgbGlzdCAgICAgICAgICovCisgIC8qICAgIGZpbmFsaXphdGlvbiBieSBARlRfTGlzdF9GaW5hbGl6ZSB0byBkZXN0cm95IGFsbCBlbGVtZW50cyBpbiBhICAgICAqLworICAvKiAgICBnaXZlbiBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzeXN0ZW0gOjogVGhlIGN1cnJlbnQgc3lzdGVtIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRhdGEgICA6OiBUaGUgY3VycmVudCBvYmplY3QgdG8gZGVzdHJveS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdXNlciAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciBwYXNzZWQgdG8gQEZUX0xpc3RfSXRlcmF0ZS4gIEl0IGNhbiAgICovCisgIC8qICAgICAgICAgICAgICBiZSB1c2VkIHRvIHBvaW50IHRvIHRoZSBpdGVyYXRpb24ncyBzdGF0ZS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqRlRfTGlzdF9EZXN0cnVjdG9yKSggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdF9GaW5hbGl6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzdHJveSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXMgd2VsbCBhcyB0aGUgbGlzdCBpdHNlbGYuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdCAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZXN0cm95IDo6IEEgbGlzdCBkZXN0cnVjdG9yIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggZWxlbWVudCAgKi8KKyAgLyogICAgICAgICAgICAgICBvZiB0aGUgbGlzdC4gIFNldCB0aGlzIHRvIE5VTEwgaWYgbm90IG5lZWRlZC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgIDo6IFRoZSBjdXJyZW50IG1lbW9yeSBvYmplY3QgdGhhdCBoYW5kbGVzIGRlYWxsb2NhdGlvbi4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgICAgOjogQSB1c2VyLXN1cHBsaWVkIGZpZWxkIHRoYXQgaXMgcGFzc2VkIGFzIHRoZSBsYXN0ICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIGFyZ3VtZW50IHRvIHRoZSBkZXN0cnVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCBhbGwgbm9kZXMgYWRkZWQgYnkgQEZUX0xpc3RfQWRkIG9yICAgICAgKi8KKyAgLyogICAgQEZUX0xpc3RfSW5zZXJ0IGhhdmUgYmVlbiBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9MaXN0X0ZpbmFsaXplKCBGVF9MaXN0ICAgICAgICAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgIEZUX0xpc3RfRGVzdHJ1Y3RvciAgZGVzdHJveSwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgdXNlciApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVExJU1RfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdGx6dy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRsencuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2VjMjhlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRsencuaApAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGx6dy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgTFpXLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVExaV19IX18KKyNkZWZpbmUgX19GVExaV19IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGx6dyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExaVyBTdHJlYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzaW5nIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgTFpXLXNwZWNpZmljIGZ1bmN0aW9ucy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICBGVF9TdHJlYW1fT3BlbkxaVworICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgT3BlbiBhIG5ldyBzdHJlYW0gdG8gcGFyc2UgTFpXLWNvbXByZXNzZWQgZm9udCBmaWxlcy4gIFRoaXMgaXMKKyAgKiAgIG1haW5seSB1c2VkIHRvIHN1cHBvcnQgdGhlIGNvbXByZXNzZWQgYCoucGNmLlonIGZvbnRzIHRoYXQgY29tZQorICAqICAgd2l0aCBYRnJlZTg2LgorICAqCisgICogQGlucHV0OgorICAqICAgc3RyZWFtIDo6IFRoZSB0YXJnZXQgZW1iZWRkaW5nIHN0cmVhbS4KKyAgKgorICAqICAgc291cmNlIDo6IFRoZSBzb3VyY2Ugc3RyZWFtLgorICAqCisgICogQHJldHVybjoKKyAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICoKKyAgKiBAbm90ZToKKyAgKiAgIFRoZSBzb3VyY2Ugc3RyZWFtIG11c3QgYmUgb3BlbmVkIF9iZWZvcmVfIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgKgorICAqICAgQ2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIG5ldyBzdHJlYW0gd2lsbAorICAqICAgKm5vdCogY2FsbCBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgc291cmNlIHN0cmVhbS4gIE5vbmUgb2YgdGhlIHN0cmVhbQorICAqICAgb2JqZWN0cyB3aWxsIGJlIHJlbGVhc2VkIHRvIHRoZSBoZWFwLgorICAqCisgICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgorICAqICAgcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtCisgICoKKyAgKiAgIEluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBMWlcgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKKyAgKiAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UuCisgICogICBUaGlzIG1lYW5zIHRoYXQgaWYgbm8gZm9udCBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUgcmF3CisgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBMWlcgc3RyZWFtIGZyb20gaXQKKyAgKiAgIGFuZCByZS1vcGVuIHRoZSBmYWNlIHdpdGggaXQuCisgICoKKyAgKiAgIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgeW91ciBidWlsZAorICAqICAgb2YgRnJlZVR5cGUgd2FzIG5vdCBjb21waWxlZCB3aXRoIExaVyBzdXBwb3J0LgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX09wZW5MWlcoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRMWldfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1hYy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGM1NWNmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRtYWMuaApAQCAtMCwwICsxLDI3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRtYWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkZGl0aW9uYWwgTWFjLXNwZWNpZmljIEFQSS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBKdXN0IHZhbiBSb3NzdW0sIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIE5PVEU6IEluY2x1ZGUgdGhpcyBmaWxlIGFmdGVyIEZUX0ZSRUVUWVBFX0ggYW5kIGFmdGVyIGFueSAgICAgICAgICAgICAgICovCisvKiAgICAgICBNYWMtc3BlY2lmaWMgaGVhZGVycyAoYmVjYXVzZSB0aGlzIGhlYWRlciB1c2VzIE1hYyB0eXBlcyBzdWNoIGFzICAqLworLyogICAgICAgSGFuZGxlLCBGU1NwZWMsIEZTUmVmLCBldGMuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVE1BQ19IX18KKyNkZWZpbmUgX19GVE1BQ19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKworCitGVF9CRUdJTl9IRUFERVIKKworCisvKiBnY2MtMy40LjEgYW5kIGxhdGVyIGNhbiB3YXJuIGFib3V0IGZ1bmN0aW9ucyB0YWdnZWQgYXMgZGVwcmVjYXRlZCAqLworI2lmbmRlZiBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURQorI2lmIGRlZmluZWQoX19HTlVDX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcCisgICAgKChfX0dOVUNfXyA+PSA0KSB8fCAoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAxKSkpCisjZGVmaW5lIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFICBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKKyNlbHNlCisjZGVmaW5lIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFCisjZW5kaWYKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWFjX3NwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTWFjIFNwZWNpZmljIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSBhdmFpbGFibGUgb24gdGhlIE1hY2ludG9zaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgRnJlZVR5cGUgaXMgICAgICAgICovCisgIC8qICAgIGNvbXBpbGVkIG9uIGEgTWFjaW50b3NoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIEZPTkQgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb25kICAgICAgIDo6IEEgRk9ORCByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogT25seSBzdXBwb3J0ZWQgZm9yIHRoZSAtMSBgc2FuaXR5IGNoZWNrJyBzcGVjaWFsICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3Rlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBARlRfRmFjZSBvYmplY3RzIGZyb20gZm9udHMgICAgKi8KKyAgLyogICAgdGhhdCBhcmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gYXMgZm9sbG93cy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBmb25kID0gR2V0UmVzb3VyY2UoICdGT05EJywgZm9udE5hbWUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIGxpYnJhcnksIGZvbmQsIDAsICZmYWNlICk7ICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlICAgICAgZm9uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgKmFmYWNlICkKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gYW4gRlNTcGVjIGZvciB0aGUgZGlzayBmaWxlIGNvbnRhaW5pbmcgdGhlIG5hbWVkIGZvbnQuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb250TmFtZSAgIDo6IE1hYyBPUyBuYW1lIG9mIHRoZSBmb250IChlLmcuLCBUaW1lcyBOZXcgUm9tYW4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBCb2xkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGF0aFNwZWMgICA6OiBGU1NwZWMgdG8gdGhlIGZpbGUuICBGb3IgcGFzc2luZyB0byAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBJbmRleCBvZiB0aGUgZmFjZS4gIEZvciBwYXNzaW5nIHRvICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgICBwYXRoU3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIGFuIEZTU3BlYyBmb3IgdGhlIGRpc2sgZmlsZSBjb250YWluaW5nIHRoZSBuYW1lZCBmb250LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9udE5hbWUgICA6OiBNYWMgT1MgbmFtZSBvZiB0aGUgZm9udCBpbiBBVFMgZnJhbWV3b3JrLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGF0aFNwZWMgICA6OiBGU1NwZWMgdG8gdGhlIGZpbGUuIEZvciBwYXNzaW5nIHRvICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBJbmRleCBvZiB0aGUgZmFjZS4gRm9yIHBhc3NpbmcgdG8gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIHBhdGhuYW1lIG9mIHRoZSBkaXNrIGZpbGUgYW5kIGZhY2UgaW5kZXggZm9yIGdpdmVuIGZvbnQgICAqLworICAvKiAgICBuYW1lIHRoYXQgaXMgaGFuZGxlZCBieSBBVFMgZnJhbWV3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb250TmFtZSAgICA6OiBNYWMgT1MgbmFtZSBvZiB0aGUgZm9udCBpbiBBVFMgZnJhbWV3b3JrLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXRoICAgICAgICA6OiBCdWZmZXIgdG8gc3RvcmUgcGF0aG5hbWUgb2YgdGhlIGZpbGUuICBGb3IgcGFzc2luZyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgdG8gQEZUX05ld19GYWNlLiAgVGhlIGNsaWVudCBtdXN0IGFsbG9jYXRlIHRoaXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4UGF0aFNpemUgOjogTGVuZ3RocyBvZiB0aGUgYnVmZmVyIGBwYXRoJyB0aGF0IGNsaWVudCBhbGxvY2F0ZWQuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4ICA6OiBJbmRleCBvZiB0aGUgZmFjZS4gIEZvciBwYXNzaW5nIHRvIEBGVF9OZXdfRmFjZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgICAgICAgbWF4UGF0aFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIGdpdmVuIHJlc291cmNlIGFuZCB0eXBlZmFjZSBpbmRleCAgKi8KKyAgLyogICAgdXNpbmcgYW4gRlNTcGVjIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3BlYyAgICAgICA6OiBGU1NwZWMgdG8gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIHJlc291cmNlLiAgVGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBmaXJzdCBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMgaXMgaWRlbnRpY2FsIHRvIEBGVF9OZXdfRmFjZSBleGNlcHQgICAgICAgKi8KKyAgLyogICAgaXQgYWNjZXB0cyBhbiBGU1NwZWMgaW5zdGVhZCBvZiBhIHBhdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1NwZWMgICpzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgKmFmYWNlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENyZWF0ZSBhIG5ldyBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcmVzb3VyY2UgYW5kIHR5cGVmYWNlIGluZGV4ICAqLworICAvKiAgICB1c2luZyBhbiBGU1JlZiB0byB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzcGVjICAgICAgIDo6IEZTUmVmIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmYWNlIHdpdGhpbiB0aGUgcmVzb3VyY2UuICBUaGUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZpcnN0IGZhY2UgaGFzIGluZGV4fjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmIGlzIGlkZW50aWNhbCB0byBARlRfTmV3X0ZhY2UgZXhjZXB0ICAgICAgICAqLworICAvKiAgICBpdCBhY2NlcHRzIGFuIEZTUmVmIGluc3RlYWQgb2YgYSBwYXRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZTUmVmICAqcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAqYWZhY2UgKQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fRlRNQUNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1tLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmNDc5OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0bW0uaApAQCAtMCwwICsxLDM3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRtbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIE11bHRpcGxlIE1hc3RlciBmb250IGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRNTV9IX18KKyNkZWZpbmUgX19GVE1NX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG11bHRpcGxlX21hc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE11bHRpcGxlIE1hc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhvdyB0byBtYW5hZ2UgTXVsdGlwbGUgTWFzdGVycyBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYW5kIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBtYW5hZ2UgTXVsdGlwbGUgICAgICAqLworICAvKiAgICBNYXN0ZXIgZm9udHMsIGkuZS4sIHRoZSBzZWxlY3Rpb24gb2Ygc3BlY2lmaWMgZGVzaWduIGluc3RhbmNlcyBieSAgKi8KKyAgLyogICAgc2V0dGluZyBkZXNpZ24gYXhpcyBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHZW9yZ2UgV2lsbGlhbXMgaGFzIGV4dGVuZGVkIHRoaXMgaW50ZXJmYWNlIHRvIG1ha2UgaXQgd29yayB3aXRoICAgKi8KKyAgLyogICAgYm90aCBUeXBlfjEgTXVsdGlwbGUgTWFzdGVycyBmb250cyBhbmQgR1ggZGlzdG9ydGFibGUgKHZhcikgICAgICAgICovCisgIC8qICAgIGZvbnRzLiAgU29tZSBvZiB0aGVzZSByb3V0aW5lcyBvbmx5IHdvcmsgd2l0aCBNTSBmb250cywgb3RoZXJzICAgICAqLworICAvKiAgICB3aWxsIHdvcmsgd2l0aCBib3RoIHR5cGVzLiAgVGhleSBhcmUgc2ltaWxhciBlbm91Z2ggdGhhdCBhICAgICAgICAgKi8KKyAgLyogICAgY29uc2lzdGVudCBpbnRlcmZhY2UgbWFrZXMgc2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01NX0F4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgZ2l2ZW4gYXhpcyBpbiBkZXNpZ24gc3BhY2UgZm9yICAqLworICAvKiAgICBNdWx0aXBsZSBNYXN0ZXJzIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc3RydWN0dXJlIGNhbid0IGJlIHVzZWQgZm9yIEdYIHZhciBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWUgICAgOjogVGhlIGF4aXMncyBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWluaW11bSA6OiBUaGUgYXhpcydzIG1pbmltdW0gZGVzaWduIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhpbXVtIDo6IFRoZSBheGlzJ3MgbWF4aW11bSBkZXNpZ24gY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9NTV9BeGlzXworICB7CisgICAgRlRfU3RyaW5nKiAgbmFtZTsKKyAgICBGVF9Mb25nICAgICBtaW5pbXVtOworICAgIEZUX0xvbmcgICAgIG1heGltdW07CisKKyAgfSBGVF9NTV9BeGlzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTXVsdGlfTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYSBNdWx0aXBsZSBNYXN0ZXJzICovCisgIC8qICAgIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY2FuJ3QgYmUgdXNlZCBmb3IgR1ggdmFyIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2F4aXMgICAgOjogTnVtYmVyIG9mIGF4ZXMuICBDYW5ub3QgZXhjZWVkfjQuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZGVzaWducyA6OiBOdW1iZXIgb2YgZGVzaWduczsgc2hvdWxkIGJlIG5vcm1hbGx5IDJebnVtX2F4aXMgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggdGhlIFR5cGV+MSBzcGVjaWZpY2F0aW9uIHN0cmFuZ2VseSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGFsbG93cyBmb3IgaW50ZXJtZWRpYXRlIGRlc2lnbnMgdG8gYmUgcHJlc2VudC4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBjYW5ub3QgZXhjZWVkfjE2LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGF4aXMgICAgICAgIDo6IEEgdGFibGUgb2YgYXhpcyBkZXNjcmlwdG9ycy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX011bHRpX01hc3Rlcl8KKyAgeworICAgIEZUX1VJbnQgICAgIG51bV9heGlzOworICAgIEZUX1VJbnQgICAgIG51bV9kZXNpZ25zOworICAgIEZUX01NX0F4aXMgIGF4aXNbVDFfTUFYX01NX0FYSVNdOworCisgIH0gRlRfTXVsdGlfTWFzdGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVmFyX0F4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBnaXZlbiBheGlzIGluIGRlc2lnbiBzcGFjZSBmb3IgICovCisgIC8qICAgIE11bHRpcGxlIE1hc3RlcnMgYW5kIEdYIHZhciBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWUgICAgOjogVGhlIGF4aXMncyBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIE5vdCBhbHdheXMgbWVhbmluZ2Z1bCBmb3IgR1guICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbmltdW0gOjogVGhlIGF4aXMncyBtaW5pbXVtIGRlc2lnbiBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVmICAgICA6OiBUaGUgYXhpcydzIGRlZmF1bHQgZGVzaWduIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgRnJlZVR5cGUgY29tcHV0ZXMgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlcyBmb3IgTU07IGl0ICAqLworICAvKiAgICAgICAgICAgICAgIGlzIHRoZW4gYW4gaW50ZWdlciB2YWx1ZSwgbm90IGluIDE2LjE2IGZvcm1hdC4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heGltdW0gOjogVGhlIGF4aXMncyBtYXhpbXVtIGRlc2lnbiBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFnICAgICA6OiBUaGUgYXhpcydzIHRhZyAodGhlIEdYIGVxdWl2YWxlbnQgdG8gYG5hbWUnKS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgRnJlZVR5cGUgcHJvdmlkZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIE1NIGlmIHBvc3NpYmxlLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyaWQgICA6OiBUaGUgZW50cnkgaW4gYG5hbWUnIHRhYmxlIChhbm90aGVyIEdYIHZlcnNpb24gb2YgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgYG5hbWUnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIE5vdCBtZWFuaW5nZnVsIGZvciBNTS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9WYXJfQXhpc18KKyAgeworICAgIEZUX1N0cmluZyogIG5hbWU7CisKKyAgICBGVF9GaXhlZCAgICBtaW5pbXVtOworICAgIEZUX0ZpeGVkICAgIGRlZjsKKyAgICBGVF9GaXhlZCAgICBtYXhpbXVtOworCisgICAgRlRfVUxvbmcgICAgdGFnOworICAgIEZUX1VJbnQgICAgIHN0cmlkOworCisgIH0gRlRfVmFyX0F4aXM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9WYXJfTmFtZWRfU3R5bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIG5hbWVkIHN0eWxlIGluIGEgR1ggdmFyIGZvbnQuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc3RydWN0dXJlIGNhbid0IGJlIHVzZWQgZm9yIE1NIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvb3JkcyA6OiBUaGUgZGVzaWduIGNvb3JkaW5hdGVzIGZvciB0aGlzIHN0eWxlLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgVGhpcyBpcyBhbiBhcnJheSB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaCBheGlzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmlkICA6OiBUaGUgZW50cnkgaW4gYG5hbWUnIHRhYmxlIGlkZW50aWZ5aW5nIHRoaXMgc3R5bGUuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Zhcl9OYW1lZF9TdHlsZV8KKyAgeworICAgIEZUX0ZpeGVkKiAgY29vcmRzOworICAgIEZUX1VJbnQgICAgc3RyaWQ7CisKKyAgfSBGVF9WYXJfTmFtZWRfU3R5bGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NTV9WYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIHRoZSBheGVzIGFuZCBzcGFjZSBvZiBhIE11bHRpcGxlIE1hc3RlcnMgKi8KKyAgLyogICAgb3IgR1ggdmFyIGRpc3RvcnRhYmxlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTb21lIGZpZWxkcyBhcmUgc3BlY2lmaWMgdG8gb25lIGZvcm1hdCBhbmQgbm90IHRvIHRoZSBvdGhlci4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fYXhpcyAgICAgICAgOjogVGhlIG51bWJlciBvZiBheGVzLiAgVGhlIG1heGltdW0gdmFsdWUgaXN+NCBmb3IgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIE1NOyBubyBsaW1pdCBpbiBHWC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZGVzaWducyAgICAgOjogVGhlIG51bWJlciBvZiBkZXNpZ25zOyBzaG91bGQgYmUgbm9ybWFsbHkgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIDJebnVtX2F4aXMgZm9yIE1NIGZvbnRzLiAgTm90IG1lYW5pbmdmdWwgZm9yIEdYICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAod2hlcmUgZXZlcnkgZ2x5cGggY291bGQgaGF2ZSBhIGRpZmZlcmVudCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGRlc2lnbnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9uYW1lZHN0eWxlcyA6OiBUaGUgbnVtYmVyIG9mIG5hbWVkIHN0eWxlczsgb25seSBtZWFuaW5nZnVsIGZvciAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgR1ggdGhhdCBhbGxvd3MgY2VydGFpbiBkZXNpZ24gY29vcmRpbmF0ZXMgdG8gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSBzdHJpbmcgSUQgKGluIHRoZSBgbmFtZScgdGFibGUpICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbS4gIFRoZSBmb250IGNhbiB0ZWxsIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgdXNlciB0aGF0LCBmb3IgZXhhbXBsZSwgV2VpZ2h0PTEuNSBpcyBgQm9sZCcuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGF4aXMgICAgICAgICAgICA6OiBBbiBheGlzIGRlc2NyaXB0b3IgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgR1ggZm9udHMgY29udGFpbiBzbGlnaHRseSBtb3JlIGRhdGEgdGhhbiBNTS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWVkc3R5bGUgICAgICA6OiBBIG5hbWVkIHN0eWxlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgT25seSBtZWFuaW5nZnVsIHdpdGggR1guICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9NTV9WYXJfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICBudW1fYXhpczsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICBudW1fZGVzaWduczsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICBudW1fbmFtZWRzdHlsZXM7CisgICAgRlRfVmFyX0F4aXMqICAgICAgICAgYXhpczsKKyAgICBGVF9WYXJfTmFtZWRfU3R5bGUqICBuYW1lZHN0eWxlOworCisgIH0gRlRfTU1fVmFyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X011bHRpX01hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0cmlldmUgdGhlIE11bHRpcGxlIE1hc3RlciBkZXNjcmlwdG9yIG9mIGEgZ2l2ZW4gZm9udC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbid0IGJlIHVzZWQgd2l0aCBHWCBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbWFzdGVyIDo6IFRoZSBNdWx0aXBsZSBNYXN0ZXJzIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfTXVsdGlfTWFzdGVyKCBGVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWx0aV9NYXN0ZXIgICphbWFzdGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfTU1fVmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgTXVsdGlwbGUgTWFzdGVyL0dYIHZhciBkZXNjcmlwdG9yIG9mIGEgZ2l2ZW4gZm9udC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbWFzdGVyIDo6IFRoZSBNdWx0aXBsZSBNYXN0ZXJzL0dYIHZhciBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBBbGxvY2F0ZXMgYSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggdGhlIHVzZXIgbXVzdCBmcmVlLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X01NX1ZhciggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgIEZUX01NX1ZhciogICphbWFzdGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGb3IgTXVsdGlwbGUgTWFzdGVycyBmb250cywgY2hvb3NlIGFuIGludGVycG9sYXRlZCBmb250IGRlc2lnbiAgICAgKi8KKyAgLyogICAgdGhyb3VnaCBkZXNpZ24gY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbid0IGJlIHVzZWQgd2l0aCBHWCBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gIElmIGl0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzICovCisgIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvb3JkcyAgICAgOjogQW4gYXJyYXkgb2YgZGVzaWduIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRm9yIE11bHRpcGxlIE1hc3RlciBvciBHWCBWYXIgZm9udHMsIGNob29zZSBhbiBpbnRlcnBvbGF0ZWQgZm9udCAgICovCisgIC8qICAgIGRlc2lnbiB0aHJvdWdoIGRlc2lnbiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBhdmFpbGFibGUgZGVzaWduIGNvb3JkaW5hdGVzLiAgSWYgaXQgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgKi8KKyAgLyogICAgICAgICAgICAgICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdXNlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29vcmRzICAgICA6OiBBbiBhcnJheSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGb3IgTXVsdGlwbGUgTWFzdGVycyBhbmQgR1ggdmFyIGZvbnRzLCBjaG9vc2UgYW4gaW50ZXJwb2xhdGVkIGZvbnQgKi8KKyAgLyogICAgZGVzaWduIHRocm91Z2ggbm9ybWFsaXplZCBibGVuZCBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuICBJZiBpdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb29yZHMgICAgIDo6IFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkgKGVhY2ggZWxlbWVudCBtdXN0IGJlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBiZXR3ZWVuIDAgYW5kIDEuMCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGlzIGFub3RoZXIgbmFtZSBvZiBARlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRNTV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0bW9kYXBpLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1vZGFwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjNmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1vZGFwaS5oCkBAIC0wLDAgKzEsNjY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdG1vZGFwaS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVE1PREFQSV9IX18KKyNkZWZpbmUgX19GVE1PREFQSV9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGVfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBNb2R1bGUgTWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBIb3cgdG8gYWRkLCB1cGdyYWRlLCByZW1vdmUsIGFuZCBjb250cm9sIG1vZHVsZXMgZnJvbSBGcmVlVHlwZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gbWFuYWdlIG1vZHVsZXMgd2l0aGluIEZyZWVUeXBlLiAgKi8KKyAgLyogICAgTW9kdWxlcyBjYW4gYmUgYWRkZWQsIHVwZ3JhZGVkLCBhbmQgcmVtb3ZlZCBhdCBydW50aW1lLiAgICAgICAgICAgICovCisgIC8qICAgIEFkZGl0aW9uYWxseSwgc29tZSBtb2R1bGUgcHJvcGVydGllcyBjYW4gYmUgY29udHJvbGxlZCBhbHNvLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSGVyZSBpcyBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBgbW9kdWxlX25hbWUnIGZpZWxkIGluICAgICovCisgIC8qICAgIHRoZSBARlRfTW9kdWxlX0NsYXNzIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYXV0b2ZpdHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGJkZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBjZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZ3h2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIG90dmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBwY2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgcGZyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHBzYXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBwc2hpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgcHNuYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHJhc3RlcjEsIHJhc3RlcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBzZm50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgc21vb3RoLCBzbW9vdGgtbGNkLCBzbW9vdGgtbGNkdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHRydWV0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB0eXBlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgdHlwZTQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHQxY2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB3aW5mb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHRoZSBGcmVlVHlwZSBDYWNoZSBzdWItc3lzdGVtIGlzIG5vdCBhIEZyZWVUeXBlIG1vZHVsZS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01vZHVsZV9Db25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfRGVzdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTW9kdWxlX1JlcXVlc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01vZHVsZV9DbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQWRkX01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9Nb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW1vdmVfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Qcm9wZXJ0eV9TZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUHJvcGVydHlfR2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlZmVyZW5jZV9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlbmRlcmVyX0NsYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1JlbmRlcmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X0RlYnVnX0hvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIG1vZHVsZSBiaXQgZmxhZ3MgKi8KKyNkZWZpbmUgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgICAgMSAgLyogdGhpcyBtb2R1bGUgaXMgYSBmb250IGRyaXZlciAgKi8KKyNkZWZpbmUgRlRfTU9EVUxFX1JFTkRFUkVSICAgICAgICAgICAgMiAgLyogdGhpcyBtb2R1bGUgaXMgYSByZW5kZXJlciAgICAgKi8KKyNkZWZpbmUgRlRfTU9EVUxFX0hJTlRFUiAgICAgICAgICAgICAgNCAgLyogdGhpcyBtb2R1bGUgaXMgYSBnbHlwaCBoaW50ZXIgKi8KKyNkZWZpbmUgRlRfTU9EVUxFX1NUWUxFUiAgICAgICAgICAgICAgOCAgLyogdGhpcyBtb2R1bGUgaXMgYSBzdHlsZXIgICAgICAgKi8KKworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFICAgICAweDEwMCAgIC8qIHRoZSBkcml2ZXIgc3VwcG9ydHMgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjYWxhYmxlIGZvbnRzICAgICAgICAgICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX05PX09VVExJTkVTICAweDIwMCAgIC8qIHRoZSBkcml2ZXIgZG9lcyBub3QgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgdmVjdG9yIG91dGxpbmVzICAqLworI2RlZmluZSBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIgICAweDQwMCAgIC8qIHRoZSBkcml2ZXIgcHJvdmlkZXMgaXRzICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG93biBoaW50ZXIgICAgICAgICAgICAgICAqLworCisKKyAgLyogZGVwcmVjYXRlZCB2YWx1ZXMgKi8KKyNkZWZpbmUgZnRfbW9kdWxlX2ZvbnRfZHJpdmVyICAgICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSCisjZGVmaW5lIGZ0X21vZHVsZV9yZW5kZXJlciAgICAgICAgICAgIEZUX01PRFVMRV9SRU5ERVJFUgorI2RlZmluZSBmdF9tb2R1bGVfaGludGVyICAgICAgICAgICAgICBGVF9NT0RVTEVfSElOVEVSCisjZGVmaW5lIGZ0X21vZHVsZV9zdHlsZXIgICAgICAgICAgICAgIEZUX01PRFVMRV9TVFlMRVIKKworI2RlZmluZSBmdF9tb2R1bGVfZHJpdmVyX3NjYWxhYmxlICAgICBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFCisjZGVmaW5lIGZ0X21vZHVsZV9kcml2ZXJfbm9fb3V0bGluZXMgIEZUX01PRFVMRV9EUklWRVJfTk9fT1VUTElORVMKKyNkZWZpbmUgZnRfbW9kdWxlX2RyaXZlcl9oYXNfaGludGVyICAgRlRfTU9EVUxFX0RSSVZFUl9IQVNfSElOVEVSCisKKworICB0eXBlZGVmIEZUX1BvaW50ZXIgIEZUX01vZHVsZV9JbnRlcmZhY2U7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSAobm90IGNyZWF0ZSkgYSBuZXcgbW9kdWxlIG9iamVjdC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGUgOjogVGhlIG1vZHVsZSB0byBpbml0aWFsaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9Nb2R1bGVfQ29uc3RydWN0b3IpKCBGVF9Nb2R1bGUgIG1vZHVsZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTW9kdWxlX0Rlc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGZpbmFsaXplIChub3QgZGVzdHJveSkgYSBnaXZlbiBtb2R1bGUgb2JqZWN0LiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlIDo6IFRoZSBtb2R1bGUgdG8gZmluYWxpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikoIEZUX01vZHVsZSAgbW9kdWxlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfUmVxdWVzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gcXVlcnkgYSBnaXZlbiBtb2R1bGUgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGUgOjogVGhlIG1vZHVsZSB0byBiZSBzZWFyY2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWUgOjogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGluIHRoZSBtb2R1bGUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9Nb2R1bGVfSW50ZXJmYWNlCisgICgqRlRfTW9kdWxlX1JlcXVlc3RlcikoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBuYW1lICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbW9kdWxlIGNsYXNzIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGVfZmxhZ3MgICAgOjogQml0IGZsYWdzIGRlc2NyaWJpbmcgdGhlIG1vZHVsZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1vZHVsZV9zaXplICAgICA6OiBUaGUgc2l6ZSBvZiBvbmUgbW9kdWxlIG9iamVjdC9pbnN0YW5jZSBpbiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1vZHVsZV9uYW1lICAgICA6OiBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlX3ZlcnNpb24gIDo6IFRoZSB2ZXJzaW9uLCBhcyBhIDE2LjE2IGZpeGVkIG51bWJlciAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAobWFqb3IubWlub3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlX3JlcXVpcmVzIDo6IFRoZSB2ZXJzaW9uIG9mIEZyZWVUeXBlIHRoaXMgbW9kdWxlIHJlcXVpcmVzLCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBhcyBhIDE2LjE2IGZpeGVkIG51bWJlciAobWFqb3IubWlub3IpLiAgU3RhcnRzICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgYXQgdmVyc2lvbiAyLjAsIGkuZS4sIDB4MjAwMDAuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1vZHVsZV9pbml0ICAgICA6OiBUaGUgaW5pdGlhbGl6aW5nIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlX2RvbmUgICAgIDo6IFRoZSBmaW5hbGl6aW5nIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnZXRfaW50ZXJmYWNlICAgOjogVGhlIGludGVyZmFjZSByZXF1ZXN0aW5nIGZ1bmN0aW9uLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9Nb2R1bGVfQ2xhc3NfCisgIHsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgIG1vZHVsZV9mbGFnczsKKyAgICBGVF9Mb25nICAgICAgICAgICAgICAgIG1vZHVsZV9zaXplOworICAgIGNvbnN0IEZUX1N0cmluZyogICAgICAgbW9kdWxlX25hbWU7CisgICAgRlRfRml4ZWQgICAgICAgICAgICAgICBtb2R1bGVfdmVyc2lvbjsKKyAgICBGVF9GaXhlZCAgICAgICAgICAgICAgIG1vZHVsZV9yZXF1aXJlczsKKworICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgbW9kdWxlX2ludGVyZmFjZTsKKworICAgIEZUX01vZHVsZV9Db25zdHJ1Y3RvciAgbW9kdWxlX2luaXQ7CisgICAgRlRfTW9kdWxlX0Rlc3RydWN0b3IgICBtb2R1bGVfZG9uZTsKKyAgICBGVF9Nb2R1bGVfUmVxdWVzdGVyICAgIGdldF9pbnRlcmZhY2U7CisKKyAgfSBGVF9Nb2R1bGVfQ2xhc3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9BZGRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZGQgYSBuZXcgbW9kdWxlIHRvIGEgZ2l2ZW4gbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjbGF6eiAgIDo6IEEgcG9pbnRlciB0byBjbGFzcyBkZXNjcmlwdG9yIGZvciB0aGUgbW9kdWxlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlcnJvciB3aWxsIGJlIHJldHVybmVkIGlmIGEgbW9kdWxlIGFscmVhZHkgZXhpc3RzIGJ5IHRoYXQgbmFtZSwgKi8KKyAgLyogICAgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfQWRkX01vZHVsZSggRlRfTGlicmFyeSAgICAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgY29uc3QgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9Nb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmQgYSBtb2R1bGUgYnkgaXRzIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlX25hbWUgOjogVGhlIG1vZHVsZSdzIG5hbWUgKGFzIGFuIEFTQ0lJIHN0cmluZykuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBtb2R1bGUgaGFuZGxlLiAgMH5pZiBub25lIHdhcyBmb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUncyBpbnRlcm5hbCBtb2R1bGVzIGFyZW4ndCBkb2N1bWVudGVkIHZlcnkgd2VsbCwgYW5kIHlvdSAgICovCisgIC8qICAgIHNob3VsZCBsb29rIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Nb2R1bGUgKQorICBGVF9HZXRfTW9kdWxlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG1vZHVsZV9uYW1lICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW1vdmVfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZW1vdmUgYSBnaXZlbiBtb2R1bGUgZnJvbSBhIGxpYnJhcnkgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGUgIDo6IEEgaGFuZGxlIHRvIGEgbW9kdWxlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbW9kdWxlIG9iamVjdCBpcyBkZXN0cm95ZWQgYnkgdGhlIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzcy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9SZW1vdmVfTW9kdWxlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGUgICBtb2R1bGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICAgRlRfUHJvcGVydHlfU2V0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgU2V0IGEgcHJvcGVydHkgZm9yIGEgZ2l2ZW4gbW9kdWxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGxpYnJhcnkgOjoKKyAgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLgorICAgKgorICAgKiAgICBtb2R1bGVfbmFtZSA6OgorICAgKiAgICAgICBUaGUgbW9kdWxlIG5hbWUuCisgICAqCisgICAqICAgIHByb3BlcnR5X25hbWUgOjoKKyAgICogICAgICAgVGhlIHByb3BlcnR5IG5hbWUuICBQcm9wZXJ0aWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGBTeW5vcHNpcycKKyAgICogICAgICAgc3Vic2VjdGlvbiBvZiB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbi4KKyAgICoKKyAgICogICAgICAgTm90ZSB0aGF0IG9ubHkgYSBmZXcgbW9kdWxlcyBoYXZlIHByb3BlcnRpZXMuCisgICAqCisgICAqICAgIHZhbHVlIDo6CisgICAqICAgICAgIEEgZ2VuZXJpYyBwb2ludGVyIHRvIGEgdmFyaWFibGUgb3Igc3RydWN0dXJlIHRoYXQgZ2l2ZXMgdGhlIG5ldworICAgKiAgICAgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuICBUaGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmFsdWUnIGlzCisgICAqICAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSB0aGUgYFN5bm9wc2lzJyBzdWJzZWN0aW9uIG9mIHRoZQorICAgKiAgICAgICBtb2R1bGUncyBkb2N1bWVudGF0aW9uLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgICBJZiBgbW9kdWxlX25hbWUnIGlzbid0IGEgdmFsaWQgbW9kdWxlIG5hbWUsIG9yIGBwcm9wZXJ0eV9uYW1lJworICAgKiAgICBkb2Vzbid0IHNwZWNpZnkgYSB2YWxpZCBwcm9wZXJ0eSwgb3IgaWYgYHZhbHVlJyBkb2Vzbid0IHJlcHJlc2VudCBhCisgICAqICAgIHZhbGlkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIGFuIGVycm9yIGlzIHJldHVybmVkLgorICAgKgorICAgKiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2V0cyBwcm9wZXJ0eSBgYmFyJyAoYSBzaW1wbGUgaW50ZWdlcikgaW4KKyAgICogICAgbW9kdWxlIGBmb28nIHRvIHZhbHVlfjEuCisgICAqCisgICAqICAgIHsKKyAgICogICAgICBGVF9VSW50ICBiYXI7CisgICAqCisgICAqCisgICAqICAgICAgYmFyID0gMTsKKyAgICogICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJmb28iLCAiYmFyIiwgJmJhciApOworICAgKiAgICB9CisgICAqCisgICAqICAgIE5vdGUgdGhhdCB0aGUgRnJlZVR5cGUgQ2FjaGUgc3ViLXN5c3RlbSBkb2Vzbid0IHJlY29nbml6ZSBtb2R1bGUKKyAgICogICAgcHJvcGVydHkgY2hhbmdlcy4gIFRvIGF2b2lkIGdseXBoIGxvb2t1cCBjb25mdXNpb24gd2l0aGluIHRoZSBjYWNoZQorICAgKiAgICB5b3Ugc2hvdWxkIGNhbGwgQEZUQ19NYW5hZ2VyX1Jlc2V0IHRvIGNvbXBsZXRlbHkgZmx1c2ggdGhlIGNhY2hlIGlmCisgICAqICAgIGEgbW9kdWxlIHByb3BlcnR5IGdldHMgY2hhbmdlZCBhZnRlciBARlRDX01hbmFnZXJfTmV3IGhhcyBiZWVuCisgICAqICAgIGNhbGxlZC4KKyAgICoKKyAgICogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNldCBwcm9wZXJ0aWVzIG9mIHRoZSBGcmVlVHlwZSBDYWNoZQorICAgKiAgICBzdWItc3lzdGVtIGl0c2VsZiB3aXRoIEZUX1Byb3BlcnR5X1NldDsgdXNlIEBGVENfUHJvcGVydHlfU2V0CisgICAqICAgIGluc3RlYWQuCisgICAqCisgICAqICBAc2luY2U6CisgICAqICAgIDIuNC4xMQorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1Byb3BlcnR5X1NldCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgIHZhbHVlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX1Byb3BlcnR5X0dldAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIEdldCBhIG1vZHVsZSdzIHByb3BlcnR5IHZhbHVlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGxpYnJhcnkgOjoKKyAgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLgorICAgKgorICAgKiAgICBtb2R1bGVfbmFtZSA6OgorICAgKiAgICAgICBUaGUgbW9kdWxlIG5hbWUuCisgICAqCisgICAqICAgIHByb3BlcnR5X25hbWUgOjoKKyAgICogICAgICAgVGhlIHByb3BlcnR5IG5hbWUuICBQcm9wZXJ0aWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGBTeW5vcHNpcycKKyAgICogICAgICAgc3Vic2VjdGlvbiBvZiB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbi4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgICB2YWx1ZSA6OgorICAgKiAgICAgICBBIGdlbmVyaWMgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGdpdmVzIHRoZQorICAgKiAgICAgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuICBUaGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmFsdWUnIGlzCisgICAqICAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSB0aGUgYFN5bm9wc2lzJyBzdWJzZWN0aW9uIG9mIHRoZQorICAgKiAgICAgICBtb2R1bGUncyBkb2N1bWVudGF0aW9uLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgICBJZiBgbW9kdWxlX25hbWUnIGlzbid0IGEgdmFsaWQgbW9kdWxlIG5hbWUsIG9yIGBwcm9wZXJ0eV9uYW1lJworICAgKiAgICBkb2Vzbid0IHNwZWNpZnkgYSB2YWxpZCBwcm9wZXJ0eSwgb3IgaWYgYHZhbHVlJyBkb2Vzbid0IHJlcHJlc2VudCBhCisgICAqICAgIHZhbGlkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIGFuIGVycm9yIGlzIHJldHVybmVkLgorICAgKgorICAgKiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZ2V0cyBwcm9wZXJ0eSBgYmF6JyAoYSByYW5nZSkgaW4gbW9kdWxlIGBmb28nLgorICAgKgorICAgKiAgICB7CisgICAqICAgICAgdHlwZWRlZiAgcmFuZ2VfCisgICAqICAgICAgeworICAgKiAgICAgICAgRlRfSW50MzIgIG1pbjsKKyAgICogICAgICAgIEZUX0ludDMyICBtYXg7CisgICAqCisgICAqICAgICAgfSByYW5nZTsKKyAgICoKKyAgICogICAgICByYW5nZSAgYmF6OworICAgKgorICAgKgorICAgKiAgICAgIEZUX1Byb3BlcnR5X0dldCggbGlicmFyeSwgImZvbyIsICJiYXoiLCAmYmF6ICk7CisgICAqICAgIH0KKyAgICoKKyAgICogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIHByb3BlcnRpZXMgb2YgdGhlIEZyZWVUeXBlIENhY2hlCisgICAqICAgIHN1Yi1zeXN0ZW0gd2l0aCBGVF9Qcm9wZXJ0eV9HZXQ7IHVzZSBARlRDX1Byb3BlcnR5X0dldCBpbnN0ZWFkLgorICAgKgorICAgKiAgQHNpbmNlOgorICAgKiAgICAyLjQuMTEKKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Qcm9wZXJ0eV9HZXQoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICB2YWx1ZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVmZXJlbmNlX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBjb3VudGVyIGdldHMgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiBARlRfTGlicmFyeSAgICAgICAgICovCisgIC8qICAgIHN0cnVjdHVyZSBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgICAgICAqLworICAvKiAgICBARlRfRG9uZV9MaWJyYXJ5IHRoZW4gb25seSBkZXN0cm95cyBhIGxpYnJhcnkgaWYgdGhlIGNvdW50ZXIgaXN+MSwgKi8KKyAgLyogICAgb3RoZXJ3aXNlIGl0IHNpbXBseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGhlbHBzIGluIG1hbmFnaW5nIGxpZmUtY3ljbGVzIG9mIHN0cnVjdHVyZXMgdGhhdCAgICAgKi8KKyAgLyogICAgcmVmZXJlbmNlIEBGVF9MaWJyYXJ5IG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi40LjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfUmVmZXJlbmNlX0xpYnJhcnkoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZSAgICAqLworICAvKiAgICBmcm9tIGEgZ2l2ZW4gbWVtb3J5IG9iamVjdC4gIEl0IGlzIHRodXMgcG9zc2libGUgdG8gdXNlIGxpYnJhcmllcyAgKi8KKyAgLyogICAgd2l0aCBkaXN0aW5jdCBtZW1vcnkgYWxsb2NhdG9ycyB3aXRoaW4gdGhlIHNhbWUgcHJvZ3JhbS4gIE5vdGUsICAgICovCisgIC8qICAgIGhvd2V2ZXIsIHRoYXQgdGhlIHVzZWQgQEZUX01lbW9yeSBzdHJ1Y3R1cmUgaXMgZXhwZWN0ZWQgdG8gcmVtYWluICAqLworICAvKiAgICB2YWxpZCBmb3IgdGhlIGxpZmUgb2YgdGhlIEBGVF9MaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vcm1hbGx5LCB5b3Ugd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIChmb2xsb3dlZCBieSBhIGNhbGwgdG8gICAgICAqLworICAvKiAgICBARlRfQWRkX0RlZmF1bHRfTW9kdWxlcyBvciBhIHNlcmllcyBvZiBjYWxscyB0byBARlRfQWRkX01vZHVsZSkgICAgKi8KKyAgLyogICAgaW5zdGVhZCBvZiBARlRfSW5pdF9GcmVlVHlwZSB0byBpbml0aWFsaXplIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEb24ndCB1c2UgQEZUX0RvbmVfRnJlZVR5cGUgYnV0IEBGVF9Eb25lX0xpYnJhcnkgdG8gZGVzdHJveSBhICAgICAgKi8KKyAgLyogICAgbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgOjogQSBoYW5kbGUgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWxpYnJhcnkgOjogQSBwb2ludGVyIHRvIGhhbmRsZSBvZiBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCisgIC8qICAgIEBGVF9SZWZlcmVuY2VfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX05ld19MaWJyYXJ5KCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEaXNjYXJkIGEgZ2l2ZW4gbGlicmFyeSBvYmplY3QuICBUaGlzIGNsb3NlcyBhbGwgZHJpdmVycyBhbmQgICAgICAgKi8KKyAgLyogICAgZGlzY2FyZHMgYWxsIHJlc291cmNlIG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCisgIC8qICAgIEBGVF9SZWZlcmVuY2VfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0RvbmVfTGlicmFyeSggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisgIC8qICovCisKKyAgdHlwZWRlZiB2b2lkCisgICgqRlRfRGVidWdIb29rX0Z1bmMpKCB2b2lkKiAgYXJnICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfRGVidWdfSG9vayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZXQgYSBkZWJ1ZyBob29rIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgdGhlIGludGVycHJldGVyIG9mIGEgZm9udCAgKi8KKyAgLyogICAgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaG9va19pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGRlYnVnIGhvb2suICBZb3Ugc2hvdWxkIHVzZSB0aGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzIGRlZmluZWQgaW4gYGZ0b2Jqcy5oJywgZS5nLiwgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlYnVnX2hvb2sgOjogVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVidWcgdGhlIGludGVycHJldGVyLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEN1cnJlbnRseSwgZm91ciBkZWJ1ZyBob29rIHNsb3RzIGFyZSBhdmFpbGFibGUsIGJ1dCBvbmx5IHR3byAoZm9yICAqLworICAvKiAgICB0aGUgVHJ1ZVR5cGUgYW5kIHRoZSBUeXBlfjEgaW50ZXJwcmV0ZXIpIGFyZSBkZWZpbmVkLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNpbmNlIHRoZSBpbnRlcm5hbCBoZWFkZXJzIG9mIEZyZWVUeXBlIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkLCAgICAqLworICAvKiAgICB0aGUgc3ltYm9sIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJyBpc24ndCBhdmFpbGFibGUgcHVibGljbHkuICAgICAgKi8KKyAgLyogICAgVGhpcyBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZCBpbiBhIGZvcnRoY29taW5nIHJlbGVhc2UuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9TZXRfRGVidWdfSG9vayggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgaG9va19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0RlYnVnSG9va19GdW5jICBkZWJ1Z19ob29rICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZGQgdGhlIHNldCBvZiBkZWZhdWx0IGRyaXZlcnMgdG8gYSBnaXZlbiBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHlvdSBjcmVhdGUgYSBsaWJyYXJ5IG9iamVjdCB3aXRoICAgICAgICAgICovCisgIC8qICAgIEBGVF9OZXdfTGlicmFyeSAodXN1YWxseSB0byBwbHVnIGEgY3VzdG9tIG1lbW9yeSBtYW5hZ2VyKS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBuZXcgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgdHJ1ZXR5cGVfZW5naW5lCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgVHJ1ZVR5cGUgRW5naW5lCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBUcnVlVHlwZSBieXRlY29kZSBzdXBwb3J0LgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGEgZnVuY3Rpb24gdXNlZCB0byBxdWVyeSB0aGUgbGV2ZWwgb2YgVHJ1ZVR5cGUKKyAgICogICBieXRlY29kZSBzdXBwb3J0IGNvbXBpbGVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogIEBlbnVtOgorICAgKiAgICAgRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlCisgICAqCisgICAqICBAZGVzY3JpcHRpb246CisgICAqICAgICBBIGxpc3Qgb2YgdmFsdWVzIGRlc2NyaWJpbmcgd2hpY2gga2luZCBvZiBUcnVlVHlwZSBieXRlY29kZQorICAgKiAgICAgZW5naW5lIGlzIGltcGxlbWVudGVkIGluIGEgZ2l2ZW4gRlRfTGlicmFyeSBpbnN0YW5jZS4gIEl0IGlzIHVzZWQKKyAgICogICAgIGJ5IHRoZSBARlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlIGZ1bmN0aW9uLgorICAgKgorICAgKiAgQHZhbHVlczoKKyAgICogICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX05PTkUgOjoKKyAgICogICAgICAgVGhlIGxpYnJhcnkgZG9lc24ndCBpbXBsZW1lbnQgYW55IGtpbmQgb2YgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuCisgICAqCisgICAqICAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9VTlBBVEVOVEVEIDo6CisgICAqICAgICAgIFRoZSBsaWJyYXJ5IGltcGxlbWVudHMgYSBieXRlY29kZSBpbnRlcnByZXRlciB0aGF0IGRvZXNuJ3QKKyAgICogICAgICAgc3VwcG9ydCB0aGUgcGF0ZW50ZWQgb3BlcmF0aW9ucyBvZiB0aGUgVHJ1ZVR5cGUgdmlydHVhbCBtYWNoaW5lLgorICAgKgorICAgKiAgICAgICBJdHMgbWFpbiB1c2UgaXMgdG8gbG9hZCBjZXJ0YWluIEFzaWFuIGZvbnRzIHRoYXQgcG9zaXRpb24gYW5kCisgICAqICAgICAgIHNjYWxlIGdseXBoIGNvbXBvbmVudHMgd2l0aCBieXRlY29kZSBpbnN0cnVjdGlvbnMuICBJdCBwcm9kdWNlcworICAgKiAgICAgICBiYWQgb3V0cHV0IGZvciBtb3N0IG90aGVyIGZvbnRzLgorICAgKgorICAgKiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfUEFURU5URUQgOjoKKyAgICogICAgICAgVGhlIGxpYnJhcnkgaW1wbGVtZW50cyBhIGJ5dGVjb2RlIGludGVycHJldGVyIHRoYXQgY292ZXJzCisgICAqICAgICAgIHRoZSBmdWxsIGluc3RydWN0aW9uIHNldCBvZiB0aGUgVHJ1ZVR5cGUgdmlydHVhbCBtYWNoaW5lICh0aGlzCisgICAqICAgICAgIHdhcyBnb3Zlcm5lZCBieSBwYXRlbnRzIHVudGlsIE1heSAyMDEwLCBoZW5jZSB0aGUgbmFtZSkuCisgICAqCisgICAqICBAc2luY2U6CisgICAqICAgICAyLjIKKyAgICoKKyAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlXworICB7CisgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfTk9ORSA9IDAsCisgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfVU5QQVRFTlRFRCwKKyAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRAorCisgIH0gRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICBAZnVuYzoKKyAgICogICAgIEZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZQorICAgKgorICAgKiAgQGRlc2NyaXB0aW9uOgorICAgKiAgICAgUmV0dXJuIGFuIEBGVF9UcnVlVHlwZUVuZ2luZVR5cGUgdmFsdWUgdG8gaW5kaWNhdGUgd2hpY2ggbGV2ZWwgb2YKKyAgICogICAgIHRoZSBUcnVlVHlwZSB2aXJ0dWFsIG1hY2hpbmUgYSBnaXZlbiBsaWJyYXJ5IGluc3RhbmNlIHN1cHBvcnRzLgorICAgKgorICAgKiAgQGlucHV0OgorICAgKiAgICAgbGlicmFyeSA6OgorICAgKiAgICAgICBBIGxpYnJhcnkgaW5zdGFuY2UuCisgICAqCisgICAqICBAcmV0dXJuOgorICAgKiAgICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIGxldmVsIGlzIHN1cHBvcnRlZC4KKyAgICoKKyAgICogIEBzaW5jZToKKyAgICogICAgIDIuMgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9UcnVlVHlwZUVuZ2luZVR5cGUgKQorICBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRNT0RBUElfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG1vZGVyci5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRtb2RlcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdmOTgxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRtb2RlcnIuaApAQCAtMCwwICsxLDE5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRtb2RlcnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIG1vZHVsZSBlcnJvciBvZmZzZXRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBGcmVlVHlwZSBtb2R1bGUgZXJyb3IgY29kZXMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBpbiBgZnRvcHRpb24uaCcgaXMgICAgKi8KKyAgLyogc2V0LCB0aGUgbG93ZXIgYnl0ZSBvZiBhbiBlcnJvciB2YWx1ZSBpZGVudGlmaWVzIHRoZSBlcnJvciBjb2RlIGFzICAgICovCisgIC8qIHVzdWFsLiAgSW4gYWRkaXRpb24sIHRoZSBoaWdoZXIgYnl0ZSBpZGVudGlmaWVzIHRoZSBtb2R1bGUuICBGb3IgICAgICAqLworICAvKiBleGFtcGxlLCB0aGUgZXJyb3IgYEZUX0Vycl9JbnZhbGlkX0ZpbGVfRm9ybWF0JyBoYXMgdmFsdWUgMHgwMDAzLCB0aGUgKi8KKyAgLyogZXJyb3IgYFRUX0Vycl9JbnZhbGlkX0ZpbGVfRm9ybWF0JyBoYXMgdmFsdWUgMHgxMzAzLCB0aGUgZXJyb3IgICAgICAgICovCisgIC8qIGBUMV9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MTQwMywgZXRjLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IGBGVF9FcnJfT2snLCBgVFRfRXJyX09rJywgZXRjLiBhcmUgYWx3YXlzIGVxdWFsIHRvIHplcm8sICAgICovCisgIC8qIGluY2x1ZGluZyB0aGUgaGlnaCBieXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBpc24ndCBzZXQsIHRoZSBoaWdoZXIgYnl0ZSBvZiAgICovCisgIC8qIGFuIGVycm9yIHZhbHVlIGlzIHNldCB0byB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVG8gaGlkZSB0aGUgdmFyaW91cyBgWFhYX0Vycl8nIHByZWZpeGVzIGluIHRoZSBzb3VyY2UgY29kZSwgRnJlZVR5cGUgICovCisgIC8qIHByb3ZpZGVzIHNvbWUgbWFjcm9zIGluIGBmdHR5cGVzLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGVF9FUlIoIGVyciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBBZGQgY3VycmVudCBlcnJvciBtb2R1bGUgcHJlZml4IChhcyBkZWZpbmVkIHdpdGggdGhlICAgICAgICAgICAgICAqLworICAvKiAgICAgYEZUX0VSUl9QUkVGSVgnIG1hY3JvKSB0byBgZXJyJy4gIEZvciBleGFtcGxlLCBpbiB0aGUgQkRGIG1vZHVsZSAgKi8KKyAgLyogICAgIHRoZSBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9PdXRsaW5lICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBleHBhbmRzIHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgZXJyb3IgPSBCREZfRXJyX0ludmFsaWRfT3V0bGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRm9yIHNpbXBsaWNpdHksIHlvdSBjYW4gYWx3YXlzIHVzZSBgRlRfRXJyX09rJyBkaXJlY3RseSBpbnN0ZWFkICAgKi8KKyAgLyogICAgIG9mIGBGVF9FUlIoIE9rICknLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZUX0VSUl9FUSggZXJyY29kZSwgZXJyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGVF9FUlJfTkVRKCBlcnJjb2RlLCBlcnIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBDb21wYXJlIGVycm9yIGNvZGUgYGVycmNvZGUnIHdpdGggdGhlIGVycm9yIGBlcnInIGZvciBlcXVhbGl0eSAgICAqLworICAvKiAgICAgYW5kIGluZXF1YWxpdHksIHJlc3BlY3RpdmVseS4gIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgSW52YWxpZF9PdXRsaW5lICkgKSAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBVc2luZyB0aGlzIG1hY3JvIHlvdSBkb24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IGVycm9yIHByZWZpeGVzLiAgICAqLworICAvKiAgICAgT2YgY291cnNlLCBpZiBtb2R1bGUgZXJyb3JzIGFyZSBub3QgYWN0aXZlLCB0aGUgYWJvdmUgZXhhbXBsZSBpcyAgKi8KKyAgLyogICAgIHRoZSBzYW1lIGFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBpZiAoIGVycm9yID09IEZUX0Vycl9JbnZhbGlkX091dGxpbmUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZUX0VSUk9SX0JBU0UoIGVycmNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGVF9FUlJPUl9NT0RVTEUoIGVycmNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBHZXQgYmFzZSBlcnJvciBhbmQgbW9kdWxlIGVycm9yIGNvZGUsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIGEgbW9kdWxlIGVycm9yIG1lc3NhZ2UgdGFibGUgZWFzaWx5ICAgICAqLworICAvKiB3aXRoIHNvbWV0aGluZyBsaWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI3VuZGVmIF9fRlRNT0RFUlJfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICNkZWZpbmUgRlRfTU9ERVJSREVGKCBlLCB2LCBzICkgIHsgRlRfTW9kX0Vycl8gIyMgZSwgcyB9LCAgICAgICAgICovCisgIC8qICAgICAjZGVmaW5lIEZUX01PREVSUl9TVEFSVF9MSVNUICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI2RlZmluZSBGVF9NT0RFUlJfRU5EX0xJU1QgICAgICAgeyAwLCAwIH0gfTsgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBjb25zdCBzdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgaW50ICAgICAgICAgIG1vZF9lcnJfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGNvbnN0IGNoYXIqICBtb2RfZXJyX21zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgfSBmdF9tb2RfZXJyb3JzW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVE1PREVSUl9IX18KKyNkZWZpbmUgX19GVE1PREVSUl9IX18KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgU0VUVVAgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyN1bmRlZiAgRlRfTkVFRF9FWFRFUk5fQworCisjaWZuZGVmIEZUX01PREVSUkRFRgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUworI2RlZmluZSBGVF9NT0RFUlJERUYoIGUsIHYsIHMgKSAgRlRfTW9kX0Vycl8gIyMgZSA9IHYsCisjZWxzZQorI2RlZmluZSBGVF9NT0RFUlJERUYoIGUsIHYsIHMgKSAgRlRfTW9kX0Vycl8gIyMgZSA9IDAsCisjZW5kaWYKKworI2RlZmluZSBGVF9NT0RFUlJfU1RBUlRfTElTVCAgZW51bSB7CisjZGVmaW5lIEZUX01PREVSUl9FTkRfTElTVCAgICBGVF9Nb2RfRXJyX01heCB9OworCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfTkVFRF9FWFRFUk5fQworICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZW5kaWYgLyogIUZUX01PREVSUkRFRiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgTElTVCBNT0RVTEUgRVJST1IgQkFTRVMgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmZGVmIEZUX01PREVSUl9TVEFSVF9MSVNUCisgIEZUX01PREVSUl9TVEFSVF9MSVNUCisjZW5kaWYKKworCisgIEZUX01PREVSUkRFRiggQmFzZSwgICAgICAweDAwMCwgImJhc2UgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggQXV0b2ZpdCwgICAweDEwMCwgImF1dG9maXR0ZXIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggQkRGLCAgICAgICAweDIwMCwgIkJERiBtb2R1bGUiICkKKyAgRlRfTU9ERVJSREVGKCBCemlwMiwgICAgIDB4MzAwLCAiQnppcDIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggQ2FjaGUsICAgICAweDQwMCwgImNhY2hlIG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIENGRiwgICAgICAgMHg1MDAsICJDRkYgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggQ0lELCAgICAgICAweDYwMCwgIkNJRCBtb2R1bGUiICkKKyAgRlRfTU9ERVJSREVGKCBHemlwLCAgICAgIDB4NzAwLCAiR3ppcCBtb2R1bGUiICkKKyAgRlRfTU9ERVJSREVGKCBMWlcsICAgICAgIDB4ODAwLCAiTFpXIG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIE9UdmFsaWQsICAgMHg5MDAsICJPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIFBDRiwgICAgICAgMHhBMDAsICJQQ0YgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggUEZSLCAgICAgICAweEIwMCwgIlBGUiBtb2R1bGUiICkKKyAgRlRfTU9ERVJSREVGKCBQU2F1eCwgICAgIDB4QzAwLCAiUFMgYXV4aWxpYXJ5IG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIFBTaGludGVyLCAgMHhEMDAsICJQUyBoaW50ZXIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggUFNuYW1lcywgICAweEUwMCwgIlBTIG5hbWVzIG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIFJhc3RlciwgICAgMHhGMDAsICJyYXN0ZXIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggU0ZOVCwgICAgIDB4MTAwMCwgIlNGTlQgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggU21vb3RoLCAgIDB4MTEwMCwgInNtb290aCByYXN0ZXIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggVHJ1ZVR5cGUsIDB4MTIwMCwgIlRydWVUeXBlIG1vZHVsZSIgKQorICBGVF9NT0RFUlJERUYoIFR5cGUxLCAgICAweDEzMDAsICJUeXBlIDEgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggVHlwZTQyLCAgIDB4MTQwMCwgIlR5cGUgNDIgbW9kdWxlIiApCisgIEZUX01PREVSUkRFRiggV2luZm9udHMsIDB4MTUwMCwgIldpbmRvd3MgRk9OL0ZOVCBtb2R1bGUiICkKKyAgRlRfTU9ERVJSREVGKCBHWHZhbGlkLCAgMHgxNjAwLCAiR1ggdmFsaWRhdGlvbiBtb2R1bGUiICkKKworCisjaWZkZWYgRlRfTU9ERVJSX0VORF9MSVNUCisgIEZUX01PREVSUl9FTkRfTElTVAorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgQ0xFQU5VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZkZWYgRlRfTkVFRF9FWFRFUk5fQworICB9CisjZW5kaWYKKworI3VuZGVmIEZUX01PREVSUl9TVEFSVF9MSVNUCisjdW5kZWYgRlRfTU9ERVJSX0VORF9MSVNUCisjdW5kZWYgRlRfTU9ERVJSREVGCisjdW5kZWYgRlRfTkVFRF9FWFRFUk5fQworCisKKyNlbmRpZiAvKiBfX0ZUTU9ERVJSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRvdHZhbC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRvdHZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDRiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdG90dmFsLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0b3R2YWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgT3BlblR5cGUgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogV2FybmluZzogVGhpcyBtb2R1bGUgbWlnaHQgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbGlicmFyeSBpbiB0aGUgICAgICAgKi8KKy8qICAgICAgICAgIGZ1dHVyZSB0byBhdm9pZCBhIHRpZ2h0IGRlcGVuZGVuY3kgYmV0d2VlbiBGcmVlVHlwZSBhbmQgdGhlICAgICovCisvKiAgICAgICAgICBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVE9UVkFMX0hfXworI2RlZmluZSBfX0ZUT1RWQUxfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG90X3ZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9wZW5UeXBlIFZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIEFQSSB0byB2YWxpZGF0ZSBPcGVuVHlwZSB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHRvIHZhbGlkYXRlICAgICAqLworICAvKiAgICBzb21lIE9wZW5UeXBlIHRhYmxlcyAoQkFTRSwgR0RFRiwgR1BPUywgR1NVQiwgSlNURiwgTUFUSCkuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PcGVuVHlwZV9WYWxpZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3BlblR5cGVfRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9WQUxJREFURV9PVFhYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGVudW06CisgICogICAgRlRfVkFMSURBVEVfT1RYWFgKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX09wZW5UeXBlX1ZhbGlkYXRlIHRvCisgICogICAgaW5kaWNhdGUgd2hpY2ggT3BlblR5cGUgdGFibGVzIHNob3VsZCBiZSB2YWxpZGF0ZWQuCisgICoKKyAgKiBAdmFsdWVzOgorICAqICAgIEZUX1ZBTElEQVRFX0JBU0UgOjoKKyAgKiAgICAgIFZhbGlkYXRlIEJBU0UgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9HREVGIDo6CisgICogICAgICBWYWxpZGF0ZSBHREVGIHRhYmxlLgorICAqCisgICogICAgRlRfVkFMSURBVEVfR1BPUyA6OgorICAqICAgICAgVmFsaWRhdGUgR1BPUyB0YWJsZS4KKyAgKgorICAqICAgIEZUX1ZBTElEQVRFX0dTVUIgOjoKKyAgKiAgICAgIFZhbGlkYXRlIEdTVUIgdGFibGUuCisgICoKKyAgKiAgICBGVF9WQUxJREFURV9KU1RGIDo6CisgICogICAgICBWYWxpZGF0ZSBKU1RGIHRhYmxlLgorICAqCisgICogICAgRlRfVkFMSURBVEVfTUFUSCA6OgorICAqICAgICAgVmFsaWRhdGUgTUFUSCB0YWJsZS4KKyAgKgorICAqICAgIEZUX1ZBTElEQVRFX09UIDo6CisgICogICAgICBWYWxpZGF0ZSBhbGwgT3BlblR5cGUgdGFibGVzIChCQVNFLCBHREVGLCBHUE9TLCBHU1VCLCBKU1RGLCBNQVRIKS4KKyAgKgorICAqLworI2RlZmluZSBGVF9WQUxJREFURV9CQVNFICAweDAxMDAKKyNkZWZpbmUgRlRfVkFMSURBVEVfR0RFRiAgMHgwMjAwCisjZGVmaW5lIEZUX1ZBTElEQVRFX0dQT1MgIDB4MDQwMAorI2RlZmluZSBGVF9WQUxJREFURV9HU1VCICAweDA4MDAKKyNkZWZpbmUgRlRfVkFMSURBVEVfSlNURiAgMHgxMDAwCisjZGVmaW5lIEZUX1ZBTElEQVRFX01BVEggIDB4MjAwMAorCisjZGVmaW5lIEZUX1ZBTElEQVRFX09UICBGVF9WQUxJREFURV9CQVNFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfR0RFRiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dQT1MgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9WQUxJREFURV9HU1VCIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfSlNURiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX01BVEgKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICAgRlRfT3BlblR5cGVfVmFsaWRhdGUKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBWYWxpZGF0ZSB2YXJpb3VzIE9wZW5UeXBlIHRhYmxlcyB0byBhc3N1cmUgdGhhdCBhbGwgb2Zmc2V0cyBhbmQKKyAgKiAgICBpbmRpY2VzIGFyZSB2YWxpZC4gIFRoZSBpZGVhIGlzIHRoYXQgYSBoaWdoZXItbGV2ZWwgbGlicmFyeSB0aGF0CisgICogICAgYWN0dWFsbHkgZG9lcyB0aGUgdGV4dCBsYXlvdXQgY2FuIGFjY2VzcyB0aG9zZSB0YWJsZXMgd2l0aG91dAorICAqICAgIGVycm9yIGNoZWNraW5nICh3aGljaCBjYW4gYmUgcXVpdGUgdGltZSBjb25zdW1pbmcpLgorICAqCisgICogQGlucHV0OgorICAqICAgIGZhY2UgOjoKKyAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgKgorICAqICAgIHZhbGlkYXRpb25fZmxhZ3MgOjoKKyAgKiAgICAgICBBIGJpdCBmaWVsZCB0aGF0IHNwZWNpZmllcyB0aGUgdGFibGVzIHRvIGJlIHZhbGlkYXRlZC4gIFNlZQorICAqICAgICAgIEBGVF9WQUxJREFURV9PVFhYWCBmb3IgcG9zc2libGUgdmFsdWVzLgorICAqCisgICogQG91dHB1dDoKKyAgKiAgICBCQVNFX3RhYmxlIDo6CisgICogICAgICAgQSBwb2ludGVyIHRvIHRoZSBCQVNFIHRhYmxlLgorICAqCisgICogICAgR0RFRl90YWJsZSA6OgorICAqICAgICAgIEEgcG9pbnRlciB0byB0aGUgR0RFRiB0YWJsZS4KKyAgKgorICAqICAgIEdQT1NfdGFibGUgOjoKKyAgKiAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEdQT1MgdGFibGUuCisgICoKKyAgKiAgICBHU1VCX3RhYmxlIDo6CisgICogICAgICAgQSBwb2ludGVyIHRvIHRoZSBHU1VCIHRhYmxlLgorICAqCisgICogICAgSlNURl90YWJsZSA6OgorICAqICAgICAgIEEgcG9pbnRlciB0byB0aGUgSlNURiB0YWJsZS4KKyAgKgorICAqIEByZXR1cm46CisgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBPcGVuVHlwZSBmb250cywgcmV0dXJuaW5nIGFuIGVycm9yCisgICogICBvdGhlcndpc2UuCisgICoKKyAgKiAgIEFmdGVyIHVzZSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZWFsbG9jYXRlIHRoZSBmaXZlIHRhYmxlcyB3aXRoCisgICogICBARlRfT3BlblR5cGVfRnJlZS4gIEEgTlVMTCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFibGUgZWl0aGVyCisgICogICBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LCBvciB0aGUgYXBwbGljYXRpb24gaGFzbid0IGFza2VkIGZvcgorICAqICAgdmFsaWRhdGlvbi4KKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX09wZW5UeXBlX1ZhbGlkYXRlKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZhbGlkYXRpb25fZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkJBU0VfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdERUZfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdQT1NfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdTVUJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkpTVEZfdGFibGUgKTsKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAZnVuY3Rpb246CisgICogICAgRlRfT3BlblR5cGVfRnJlZQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgT3BlblR5cGUgdmFsaWRhdG9yLgorICAqCisgICogQGlucHV0OgorICAqICAgIGZhY2UgOjoKKyAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgKgorICAqICAgIHRhYmxlIDo6CisgICogICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCBieQorICAqICAgICAgIEBGVF9PcGVuVHlwZV9WYWxpZGF0ZS4KKyAgKgorICAqIEBub3RlOgorICAqICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieQorICAqICAgQEZUX09wZW5UeXBlX1ZhbGlkYXRlIG9ubHkuCisgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX09wZW5UeXBlX0ZyZWUoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRPVFZBTF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0b3V0bG4uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0b3V0bG4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDZjZmRlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRvdXRsbi5oCkBAIC0wLDAgKzEsNTc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdG91dGxuLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU3VwcG9ydCBmb3IgdGhlIEZUX091dGxpbmUgdHlwZSB1c2VkIHRvIHN0b3JlIGdseXBoIHNoYXBlcyBvZiAgICAgICAgKi8KKy8qICAgIG1vc3Qgc2NhbGFibGUgZm9udCBmb3JtYXRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRPVVRMTl9IX18KKyNkZWZpbmUgX19GVE9VVExOX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmVfcHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE91dGxpbmUgUHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZ1bmN0aW9ucyB0byBjcmVhdGUsIHRyYW5zZm9ybSwgYW5kIHJlbmRlciB2ZWN0b3JpYWwgZ2x5cGggaW1hZ2VzLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyByb3V0aW5lcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBzY2FsYWJsZSAqLworICAvKiAgICBnbHlwaCBpbWFnZXMga25vd24gYXMgYG91dGxpbmVzJy4gIFRoZXNlIGNhbiBhbHNvIGJlIG1lYXN1cmVkLCAgICAgKi8KKyAgLyogICAgdHJhbnNmb3JtZWQsIGFuZCBjb252ZXJ0ZWQgaW50byBiaXRtYXBzIGFuZCBwaXhtYXBzLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfTmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9Db3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfVHJhbnNsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9FbWJvbGRlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfRW1ib2xkZW5YWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX1JldmVyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9DaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0dldF9DQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9HZXRfQkJveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0dldF9CaXRtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9SZW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0Z1bmNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9Nb3ZlVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfTGluZVRvRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0NvbmljVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9DdWJpY1RvRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PcmllbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PVVRMSU5FX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9EZWNvbXBvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2FsayBvdmVyIGFuIG91dGxpbmUncyBzdHJ1Y3R1cmUgdG8gZGVjb21wb3NlIGl0IGludG8gaW5kaXZpZHVhbCAgICovCisgIC8qICAgIHNlZ21lbnRzIGFuZCBCw6l6aWVyIGFyY3MuICBUaGlzIGZ1bmN0aW9uIGFsc28gZW1pdHMgYG1vdmUgdG8nICAgICAgKi8KKyAgLyogICAgb3BlcmF0aW9ucyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgbmV3IGNvbnRvdXJzIGluIHRoZSBvdXRsaW5lLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgdGFyZ2V0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdW5jX2ludGVyZmFjZSA6OiBBIHRhYmxlIG9mIGBlbWl0dGVycycsIGkuZS4sIGZ1bmN0aW9uIHBvaW50ZXJzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGggICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgICAgICAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCB0byBlYWNoICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVyIGR1cmluZyB0aGUgZGVjb21wb3NpdGlvbi4gIEl0IGNhbiBiZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZHVyaW5nIHRoZSAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIGRlY29tcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgY29udG91ciB0aGF0IGNvbnRhaW5zIGEgc2luZ2xlIHBvaW50IG9ubHkgaXMgcmVwcmVzZW50ZWQgYnkgYSAgICAqLworICAvKiAgICBgbW92ZSB0bycgb3BlcmF0aW9uIGZvbGxvd2VkIGJ5IGBsaW5lIHRvJyB0byB0aGUgc2FtZSBwb2ludC4gIEluICAgKi8KKyAgLyogICAgbW9zdCBjYXNlcywgaXQgaXMgYmVzdCB0byBmaWx0ZXIgdGhpcyBvdXQgYmVmb3JlIHVzaW5nIHRoZSAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgZm9yIHN0cm9raW5nIHB1cnBvc2VzIChvdGhlcndpc2UgaXQgd291bGQgcmVzdWx0IGluIGEgICAgICAqLworICAvKiAgICB2aXNpYmxlIGRvdCB3aGVuIHJvdW5kIGNhcHMgYXJlIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0RlY29tcG9zZSggRlRfT3V0bGluZSogICAgICAgICAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9PdXRsaW5lX0Z1bmNzKiAgZnVuY19pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgdXNlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9OZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ3JlYXRlIGEgbmV3IG91dGxpbmUgb2YgYSBnaXZlbiBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0IGZyb20gd2hlcmUgdGhlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIG91dGxpbmUgaXMgYWxsb2NhdGVkLiAgTm90ZSBob3dldmVyIHRoYXQgdGhlIG5ldyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBvdXRsaW5lIHdpbGwgKm5vdCogbmVjZXNzYXJpbHkgYmUgKmZyZWVkKiwgd2hlbiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZGVzdHJveWluZyB0aGUgbGlicmFyeSwgYnkgQEZUX0RvbmVfRnJlZVR5cGUuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1Qb2ludHMgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIHdpdGhpbiB0aGUgb3V0bGluZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgTXVzdCBiZSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gMHhGRkZGICg2NTUzNSkuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1Db250b3VycyA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgd2l0aGluIHRoZSBvdXRsaW5lLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSAwIHRvIGBudW1Qb2ludHMnLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYW5vdXRsaW5lICAgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBsaWJyYXJ5JyBwYXJhbWV0ZXIgaXMgc2ltcGx5ICovCisgIC8qICAgIHRvIHVzZSB0aGUgbGlicmFyeSdzIG1lbW9yeSBhbGxvY2F0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfTmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBudW1Qb2ludHMsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgbnVtQ29udG91cnMsCisgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAqYW5vdXRsaW5lICk7CisKKworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9OZXdfSW50ZXJuYWwoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtUG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIG51bUNvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSAgKmFub3V0bGluZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzdHJveSBhbiBvdXRsaW5lIGNyZWF0ZWQgd2l0aCBARlRfT3V0bGluZV9OZXcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSBvZiB0aGUgbGlicmFyeSBvYmplY3QgdXNlZCB0byBhbGxvY2F0ZSB0aGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIG91dGxpbmUgb2JqZWN0IHRvIGJlIGRpc2NhcmRlZC4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIG91dGxpbmUncyBgb3duZXInIGZpZWxkIGlzIG5vdCBzZXQsIG9ubHkgdGhlIG91dGxpbmUgICAgICAgICovCisgIC8qICAgIGRlc2NyaXB0b3Igd2lsbCBiZSByZWxlYXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBgbGlicmFyeScgcGFyYW1ldGVyIGlzICAgICAgICovCisgIC8qICAgIHNpbXBseSB0byB1c2UgZnRfbWVtX2ZyZWUoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRG9uZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKTsKKworCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENoZWNrIHRoZSBjb250ZW50cyBvZiBhbiBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgOjogQSBoYW5kbGUgdG8gYSBzb3VyY2Ugb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfQ2hlY2soIEZUX091dGxpbmUqICBvdXRsaW5lICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0dldF9DQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gYW4gb3V0bGluZSdzIGBjb250cm9sIGJveCcuICBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsICAgKi8KKyAgLyogICAgdGhlIG91dGxpbmUncyBwb2ludHMsIGluY2x1ZGluZyBCw6l6aWVyIGNvbnRyb2wgcG9pbnRzLiAgVGhvdWdoIGl0ICAqLworICAvKiAgICBjb2luY2lkZXMgd2l0aCB0aGUgZXhhY3QgYm91bmRpbmcgYm94IGZvciBtb3N0IGdseXBocywgaXQgY2FuIGJlICAgKi8KKyAgLyogICAgc2xpZ2h0bHkgbGFyZ2VyIGluIHNvbWUgc2l0dWF0aW9ucyAobGlrZSB3aGVuIHJvdGF0aW5nIGFuIG91dGxpbmUgICovCisgIC8qICAgIHRoYXQgY29udGFpbnMgQsOpemllciBvdXRzaWRlIGFyY3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZyAqLworICAvKiAgICBib3ggY2FuIHRha2UgbXVjaCBtb3JlIHRpbWUgYXMgaXQgbmVlZHMgdG8gd2FsayBvdmVyIGFsbCBzZWdtZW50cyAgKi8KKyAgLyogICAgYW5kIGFyY3MgaW4gdGhlIG91dGxpbmUuICBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlICAgICAgICovCisgIC8qICAgIGBmdGJib3gnIGNvbXBvbmVudCwgd2hpY2ggaXMgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHRhc2suICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFjYm94ICAgOjogVGhlIG91dGxpbmUncyBjb250cm9sIGJveC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfR2x5cGhfR2V0X0NCb3ggZm9yIGEgZGlzY3Vzc2lvbiBvZiB0cmlja3kgZm9udHMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfT3V0bGluZV9HZXRfQ0JveCggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3ggICAgICAgICAgICphY2JveCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9UcmFuc2xhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQXBwbHkgYSBzaW1wbGUgdHJhbnNsYXRpb24gdG8gdGhlIHBvaW50cyBvZiBhbiBvdXRsaW5lLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeE9mZnNldCA6OiBUaGUgaG9yaXpvbnRhbCBvZmZzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5T2Zmc2V0IDo6IFRoZSB2ZXJ0aWNhbCBvZmZzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICAgICB4T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgICAgIHlPZmZzZXQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvcHkgYW4gb3V0bGluZSBpbnRvIGFub3RoZXIgb25lLiAgQm90aCBvYmplY3RzIG11c3QgaGF2ZSB0aGUgICAgICAqLworICAvKiAgICBzYW1lIHNpemVzIChudW1iZXIgb2YgcG9pbnRzICYgbnVtYmVyIG9mIGNvbnRvdXJzKSB3aGVuIHRoaXMgICAgICAgKi8KKyAgLyogICAgZnVuY3Rpb24gaXMgY2FsbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc291cmNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFyZ2V0IDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9Db3B5KCBjb25zdCBGVF9PdXRsaW5lKiAgc291cmNlLAorICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUgICAgICAgICp0YXJnZXQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFwcGx5IGEgc2ltcGxlIDJ4MiBtYXRyaXggdG8gYWxsIG9mIGFuIG91dGxpbmUncyBwb2ludHMuICBVc2VmdWwgICAqLworICAvKiAgICBmb3IgYXBwbHlpbmcgcm90YXRpb25zLCBzbGFudGluZywgZmxpcHBpbmcsIGV0Yy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdXRsaW5lIDo6IEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXRyaXggIDo6IEEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3UgY2FuIHVzZSBARlRfT3V0bGluZV9UcmFuc2xhdGUgaWYgeW91IG5lZWQgdG8gdHJhbnNsYXRlIHRoZSAgICAgKi8KKyAgLyogICAgb3V0bGluZSdzIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9NYXRyaXgqICAgbWF0cml4ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0VtYm9sZGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFbWJvbGRlbiBhbiBvdXRsaW5lLiAgVGhlIG5ldyBvdXRsaW5lIHdpbGwgYmUgYXQgbW9zdCA0fnRpbWVzICAgICAgKi8KKyAgLyogICAgYHN0cmVuZ3RoJyBwaXhlbHMgd2lkZXIgYW5kIGhpZ2hlci4gIFlvdSBtYXkgdGhpbmsgb2YgdGhlIGxlZnQgYW5kICovCisgIC8qICAgIGJvdHRvbSBib3JkZXJzIGFzIHVuY2hhbmdlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTmVnYXRpdmUgYHN0cmVuZ3RoJyB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBvdXRsaW5lIHRoaWNrbmVzcyBhcmUgICAgICovCisgIC8qICAgIHBvc3NpYmxlIGFsc28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVuZ3RoIDo6IEhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQuICBFeHByZXNzZWQgaW4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAyNi42IHBpeGVsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgdXNlZCBhbGdvcml0aG0gdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHRoaWNrbmVzcyBvZiB0aGUgICAgKi8KKyAgLyogICAgZ2x5cGggZG9lc24ndCBjaGFuZ2UgdGhlIG51bWJlciBvZiBwb2ludHM7IHRoaXMgbWVhbnMgdGhhdCBjZXJ0YWluICovCisgIC8qICAgIHNpdHVhdGlvbnMgbGlrZSBhY3V0ZSBhbmdsZXMgb3IgaW50ZXJzZWN0aW9ucyBhcmUgc29tZXRpbWVzICAgICAgICAqLworICAvKiAgICBoYW5kbGVkIGluY29ycmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIHlvdSBuZWVkIGBiZXR0ZXInIG1ldHJpY3MgdmFsdWVzIHlvdSBzaG91bGQgY2FsbCAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfT3V0bGluZV9HZXRfQ0JveCBvciBARlRfT3V0bGluZV9HZXRfQkJveC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEV4YW1wbGUgY2FsbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfTG9hZF9HbHlwaCggZmFjZSwgaW5kZXgsIEZUX0xPQURfREVGQVVMVCApOyAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGlmICggZmFjZS0+c2xvdC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FICkgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX091dGxpbmVfRW1ib2xkZW4oICZmYWNlLT5zbG90LT5vdXRsaW5lLCBzdHJlbmd0aCApOyAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoICAgICovCisgIC8qICAgIGZ1bmN0aW9ucyBsaWtlIEBGVF9TZXRfQ2hhcl9TaXplIGJlZm9yZSBjYWxsaW5nIEZUX1JlbmRlcl9HbHlwaC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRW1ib2xkZW4oIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgc3RyZW5ndGggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfRW1ib2xkZW5YWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVtYm9sZGVuIGFuIG91dGxpbmUuICBUaGUgbmV3IG91dGxpbmUgd2lsbCBiZSBgeHN0cmVuZ3RoJyBwaXhlbHMgICAqLworICAvKiAgICB3aWRlciBhbmQgYHlzdHJlbmd0aCcgcGl4ZWxzIGhpZ2hlci4gIE90aGVyd2lzZSwgaXQgaXMgc2ltaWxhciB0byAgKi8KKyAgLyogICAgQEZUX091dGxpbmVfRW1ib2xkZW4sIHdoaWNoIHVzZXMgdGhlIHNhbWUgc3RyZW5ndGggaW4gYm90aCAgICAgICAgICovCisgIC8qICAgIGRpcmVjdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRW1ib2xkZW5YWSggRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHhzdHJlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeXN0cmVuZ3RoICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX1JldmVyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXZlcnNlIHRoZSBkcmF3aW5nIGRpcmVjdGlvbiBvZiBhbiBvdXRsaW5lLiAgVGhpcyBpcyB1c2VkIHRvICAgICAgKi8KKyAgLyogICAgZW5zdXJlIGNvbnNpc3RlbnQgZmlsbCBjb252ZW50aW9ucyBmb3IgbWlycm9yZWQgZ2x5cGhzLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBiaXQgZmxhZyBARlRfT1VUTElORV9SRVZFUlNFX0ZJTEwgaW4gICAgICovCisgIC8qICAgIHRoZSBvdXRsaW5lJ3MgYGZsYWdzJyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSXQgc2hvdWxkbid0IGJlIHVzZWQgYnkgYSBub3JtYWwgY2xpZW50IGFwcGxpY2F0aW9uLCB1bmxlc3MgaXQgICAgICovCisgIC8qICAgIGtub3dzIHdoYXQgaXQgaXMgZG9pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfT3V0bGluZV9SZXZlcnNlKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9HZXRfQml0bWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVuZGVyIGFuIG91dGxpbmUgd2l0aGluIGEgYml0bWFwLiAgVGhlIG91dGxpbmUncyBpbWFnZSBpcyBzaW1wbHkgICovCisgIC8qICAgIE9SLWVkIHRvIHRoZSB0YXJnZXQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWJpdG1hcCA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBiaXRtYXAgZGVzY3JpcHRvci4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBDUkVBVEUgdGhlIGJpdG1hcCwgaXQgb25seSByZW5kZXJzIGFuICAgICAgICovCisgIC8qICAgIG91dGxpbmUgaW1hZ2Ugd2l0aGluIHRoZSBvbmUgeW91IHBhc3MgdG8gaXQhICBDb25zZXF1ZW50bHksIHRoZSAgICAqLworICAvKiAgICB2YXJpb3VzIGZpZWxkcyBpbiBgYWJpdG1hcCcgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmdseS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEl0IHdpbGwgdXNlIHRoZSByYXN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmYXVsdCBnbHlwaCBmb3JtYXQuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHZhbHVlIG9mIHRoZSBgbnVtX2dyYXlzJyBmaWVsZCBpbiBgYWJpdG1hcCcgaXMgaWdub3JlZC4gIElmICAgICovCisgIC8qICAgIHlvdSBzZWxlY3QgdGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciwgYW5kIHlvdSB3YW50IGxlc3MgdGhhbiAyNTYgICAqLworICAvKiAgICBncmF5IGxldmVscywgeW91IGhhdmUgdG8gdXNlIEBGVF9PdXRsaW5lX1JlbmRlciBkaXJlY3RseS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0dldF9CaXRtYXAoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CaXRtYXAgICphYml0bWFwICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX1JlbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZW5kZXIgYW4gb3V0bGluZSB3aXRoaW4gYSBiaXRtYXAgdXNpbmcgdGhlIGN1cnJlbnQgc2Nhbi1jb252ZXJ0LiAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiB1c2VzIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSBhcyBhbiBhcmd1bWVudCwgICovCisgIC8qICAgIGFsbG93aW5nIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgZGlyZWN0IGNvbXBvc2l0aW9uLCB0cmFuc2x1Y2VuY3ksICAqLworICAvKiAgICBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhcmFtcyAgOjogQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvICAgICAqLworICAvKiAgICAgICAgICAgICAgIGRlc2NyaWJlIHRoZSByZW5kZXJpbmcgb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCBob3cgQEZUX1Jhc3Rlcl9QYXJhbXMgd29ya3MgKi8KKyAgLyogICAgdG8gdXNlIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZmllbGQgYHBhcmFtcy5zb3VyY2UnIHdpbGwgYmUgc2V0IHRvIGBvdXRsaW5lJyBiZWZvcmUgdGhlIHNjYW4gKi8KKyAgLyogICAgY29udmVydGVyIGlzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdmFsdWUgeW91IGdpdmUgdG8gaXQgaXMgICovCisgIC8qICAgIGFjdHVhbGx5IGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciBhbHdheXMgdXNlcyAyNTYgZ3JheSBsZXZlbHMuICBJZiB5b3UgICAgICovCisgIC8qICAgIHdhbnQgbGVzcyBncmF5IGxldmVscywgeW91IGhhdmUgdG8gcHJvdmlkZSB5b3VyIG93biBzcGFuIGNhbGxiYWNrLiAqLworICAvKiAgICBTZWUgdGhlIEBGVF9SQVNURVJfRkxBR19ESVJFQ1QgdmFsdWUgb2YgdGhlIGBmbGFncycgZmllbGQgaW4gdGhlICAgKi8KKyAgLyogICAgQEZUX1Jhc3Rlcl9QYXJhbXMgc3RydWN0dXJlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9SZW5kZXIoIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICBGVF9SYXN0ZXJfUGFyYW1zKiAgcGFyYW1zICk7CisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGVudW06CisgICogICBGVF9PcmllbnRhdGlvbgorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgQSBsaXN0IG9mIHZhbHVlcyB1c2VkIHRvIGRlc2NyaWJlIGFuIG91dGxpbmUncyBjb250b3VyIG9yaWVudGF0aW9uLgorICAqCisgICogICBUaGUgVHJ1ZVR5cGUgYW5kIFBvc3RTY3JpcHQgc3BlY2lmaWNhdGlvbnMgdXNlIGRpZmZlcmVudCBjb252ZW50aW9ucworICAqICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3V0bGluZSBjb250b3VycyBzaG91bGQgYmUgZmlsbGVkIG9yIHVuZmlsbGVkLgorICAqCisgICogQHZhbHVlczoKKyAgKiAgIEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIDo6CisgICogICAgIEFjY29yZGluZyB0byB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiwgY2xvY2t3aXNlIGNvbnRvdXJzIG11c3QKKyAgKiAgICAgYmUgZmlsbGVkLCBhbmQgY291bnRlci1jbG9ja3dpc2Ugb25lcyBtdXN0IGJlIHVuZmlsbGVkLgorICAqCisgICogICBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUIDo6CisgICogICAgIEFjY29yZGluZyB0byB0aGUgUG9zdFNjcmlwdCBzcGVjaWZpY2F0aW9uLCBjb3VudGVyLWNsb2Nrd2lzZSBjb250b3VycworICAqICAgICBtdXN0IGJlIGZpbGxlZCwgYW5kIGNsb2Nrd2lzZSBvbmVzIG11c3QgYmUgdW5maWxsZWQuCisgICoKKyAgKiAgIEZUX09SSUVOVEFUSU9OX0ZJTExfUklHSFQgOjoKKyAgKiAgICAgVGhpcyBpcyBpZGVudGljYWwgdG8gQEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFLCBidXQgaXMgdXNlZCB0bworICAqICAgICByZW1lbWJlciB0aGF0IGluIFRydWVUeXBlLCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIHJpZ2h0IG9mCisgICogICAgIHRoZSBkcmF3aW5nIGRpcmVjdGlvbiBvZiBhIGNvbnRvdXIgbXVzdCBiZSBmaWxsZWQuCisgICoKKyAgKiAgIEZUX09SSUVOVEFUSU9OX0ZJTExfTEVGVCA6OgorICAqICAgICBUaGlzIGlzIGlkZW50aWNhbCB0byBARlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVCwgYnV0IGlzIHVzZWQgdG8KKyAgKiAgICAgcmVtZW1iZXIgdGhhdCBpbiBQb3N0U2NyaXB0LCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIGxlZnQgb2YKKyAgKiAgICAgdGhlIGRyYXdpbmcgZGlyZWN0aW9uIG9mIGEgY29udG91ciBtdXN0IGJlIGZpbGxlZC4KKyAgKgorICAqICAgRlRfT1JJRU5UQVRJT05fTk9ORSA6OgorICAqICAgICBUaGUgb3JpZW50YXRpb24gY2Fubm90IGJlIGRldGVybWluZWQuICBUaGF0IGlzLCBkaWZmZXJlbnQgcGFydHMgb2YKKyAgKiAgICAgdGhlIGdseXBoIGhhdmUgZGlmZmVyZW50IG9yaWVudGF0aW9uLgorICAqCisgICovCisgIHR5cGVkZWYgZW51bSAgRlRfT3JpZW50YXRpb25fCisgIHsKKyAgICBGVF9PUklFTlRBVElPTl9UUlVFVFlQRSAgID0gMCwKKyAgICBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUID0gMSwKKyAgICBGVF9PUklFTlRBVElPTl9GSUxMX1JJR0hUID0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUsCisgICAgRlRfT1JJRU5UQVRJT05fRklMTF9MRUZUICA9IEZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQsCisgICAgRlRfT1JJRU5UQVRJT05fTk9ORQorCisgIH0gRlRfT3JpZW50YXRpb247CisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24KKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgIFRoaXMgZnVuY3Rpb24gYW5hbHl6ZXMgYSBnbHlwaCBvdXRsaW5lIGFuZCB0cmllcyB0byBjb21wdXRlIGl0cworICAqICAgZmlsbCBvcmllbnRhdGlvbiAoc2VlIEBGVF9PcmllbnRhdGlvbikuICBUaGlzIGlzIGRvbmUgYnkgaW50ZWdyYXRpbmcKKyAgKiAgIHRoZSB0b3RhbCBhcmVhIGNvdmVyZWQgYnkgdGhlIG91dGxpbmUuIFRoZSBwb3NpdGl2ZSBpbnRlZ3JhbAorICAqICAgY29ycmVzcG9uZHMgdG8gdGhlIGNsb2Nrd2lzZSBvcmllbnRhdGlvbiBhbmQgQEZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQKKyAgKiAgIGlzIHJldHVybmVkLiBUaGUgbmVnYXRpdmUgaW50ZWdyYWwgY29ycmVzcG9uZHMgdG8gdGhlIGNvdW50ZXItY2xvY2t3aXNlCisgICogICBvcmllbnRhdGlvbiBhbmQgQEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIGlzIHJldHVybmVkLgorICAqCisgICogICBOb3RlIHRoYXQgdGhpcyB3aWxsIHJldHVybiBARlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgZm9yIGVtcHR5CisgICogICBvdXRsaW5lcy4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgIG91dGxpbmUgOjoKKyAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBvdXRsaW5lLgorICAqCisgICogQHJldHVybjoKKyAgKiAgIFRoZSBvcmllbnRhdGlvbi4KKyAgKgorICAqLworICBGVF9FWFBPUlQoIEZUX09yaWVudGF0aW9uICkKKyAgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24oIEZUX091dGxpbmUqICBvdXRsaW5lICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUT1VUTE5fSF9fICovCisKKworLyogRU5EICovCisKKworLyogTG9jYWwgVmFyaWFibGVzOiAqLworLyogY29kaW5nOiB1dGYtOCAgICAqLworLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRwZnIuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0cGZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMDJhMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0cGZyLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0cGZyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUUEZSX0hfXworI2RlZmluZSBfX0ZUUEZSX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwZnJfZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQRlIgRm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQRlIvVHJ1ZURvYyBzcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIFBGUi1zcGVjaWZpYyBmdW5jdGlvbnMuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgIEZUX0dldF9QRlJfTWV0cmljcworICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFJldHVybiB0aGUgb3V0bGluZSBhbmQgbWV0cmljcyByZXNvbHV0aW9ucyBvZiBhIGdpdmVuIFBGUiBmYWNlLgorICAqCisgICogQGlucHV0OgorICAqICAgIGZhY2UgOjogSGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLiAgSXQgY2FuIGJlIGEgbm9uLVBGUiBmYWNlLgorICAqCisgICogQG91dHB1dDoKKyAgKiAgICBhb3V0bGluZV9yZXNvbHV0aW9uIDo6CisgICogICAgICBPdXRsaW5lIHJlc29sdXRpb24uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGZhY2UtPnVuaXRzX3Blcl9FTScKKyAgKiAgICAgIGZvciBub24tUEZSIGZvbnRzLiAgT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuCisgICoKKyAgKiAgICBhbWV0cmljc19yZXNvbHV0aW9uIDo6CisgICogICAgICBNZXRyaWNzIHJlc29sdXRpb24uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYG91dGxpbmVfcmVzb2x1dGlvbicKKyAgKiAgICAgIGZvciBub24tUEZSIGZvbnRzLiAgT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuCisgICoKKyAgKiAgICBhbWV0cmljc194X3NjYWxlIDo6CisgICogICAgICBBIDE2LjE2IGZpeGVkLXBvaW50IG51bWJlciB1c2VkIHRvIHNjYWxlIGRpc3RhbmNlIGV4cHJlc3NlZAorICAqICAgICAgaW4gbWV0cmljcyB1bml0cyB0byBkZXZpY2Ugc3ViLXBpeGVscy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAqICAgICAgYGZhY2UtPnNpemUtPnhfc2NhbGUnLCBidXQgZm9yIG1ldHJpY3Mgb25seS4gIE9wdGlvbmFsIChwYXJhbWV0ZXIKKyAgKiAgICAgIGNhbiBiZSBOVUxMKS4KKyAgKgorICAqICAgIGFtZXRyaWNzX3lfc2NhbGUgOjoKKyAgKiAgICAgIFNhbWUgYXMgYGFtZXRyaWNzX3hfc2NhbGUnIGJ1dCBmb3IgdGhlIHZlcnRpY2FsIGRpcmVjdGlvbi4KKyAgKiAgICAgIG9wdGlvbmFsIChwYXJhbWV0ZXIgY2FuIGJlIE5VTEwpLgorICAqCisgICogQHJldHVybjoKKyAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICBJZiB0aGUgaW5wdXQgZmFjZSBpcyBub3QgYSBQRlIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IuCisgICogICBIb3dldmVyLCBpbiBhbGwgY2FzZXMsIGl0IHdpbGwgcmV0dXJuIHZhbGlkIHZhbHVlcy4KKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9QRlJfTWV0cmljcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYW91dGxpbmVfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmFtZXRyaWNzX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICphbWV0cmljc194X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqYW1ldHJpY3NfeV9zY2FsZSApOworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgIEZUX0dldF9QRlJfS2VybmluZworICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgIFJldHVybiB0aGUga2VybmluZyBwYWlyIGNvcnJlc3BvbmRpbmcgdG8gdHdvIGdseXBocyBpbiBhIFBGUiBmYWNlLgorICAqICAgIFRoZSBkaXN0YW5jZSBpcyBleHByZXNzZWQgaW4gbWV0cmljcyB1bml0cywgdW5saWtlIHRoZSByZXN1bHQgb2YKKyAgKiAgICBARlRfR2V0X0tlcm5pbmcuCisgICoKKyAgKiBAaW5wdXQ6CisgICogICAgZmFjZSAgOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICoKKyAgKiAgICBsZWZ0ICA6OiBJbmRleCBvZiB0aGUgbGVmdCBnbHlwaC4KKyAgKgorICAqICAgIHJpZ2h0IDo6IEluZGV4IG9mIHRoZSByaWdodCBnbHlwaC4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICAgYXZlY3RvciA6OiBBIGtlcm5pbmcgdmVjdG9yLgorICAqCisgICogQHJldHVybjoKKyAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAqCisgICogQG5vdGU6CisgICogICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGRpc3RhbmNlcyBpbiBvcmlnaW5hbCBQRlIgbWV0cmljcworICAqICAgIHVuaXRzLiAgVGhpcyBpcyB1bmxpa2UgQEZUX0dldF9LZXJuaW5nIHdpdGggdGhlIEBGVF9LRVJOSU5HX1VOU0NBTEVECisgICogICAgbW9kZSwgd2hpY2ggYWx3YXlzIHJldHVybnMgZGlzdGFuY2VzIGNvbnZlcnRlZCB0byBvdXRsaW5lIHVuaXRzLgorICAqCisgICogICAgWW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBgeF9zY2FsZScgYW5kIGB5X3NjYWxlJyBwYXJhbWV0ZXJzCisgICogICAgcmV0dXJuZWQgYnkgQEZUX0dldF9QRlJfTWV0cmljcyB0byBzY2FsZSB0aGVzZSB0byBkZXZpY2Ugc3ViLXBpeGVscy4KKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9QRlJfS2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciAgKmF2ZWN0b3IgKTsKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBmdW5jdGlvbjoKKyAgKiAgICBGVF9HZXRfUEZSX0FkdmFuY2UKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBSZXR1cm4gYSBnaXZlbiBnbHlwaCBhZHZhbmNlLCBleHByZXNzZWQgaW4gb3JpZ2luYWwgbWV0cmljcyB1bml0cywKKyAgKiAgICBmcm9tIGEgUEZSIGZvbnQuCisgICoKKyAgKiBAaW5wdXQ6CisgICogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAqCisgICogICAgZ2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICAgYWFkdmFuY2UgOjogVGhlIGdseXBoIGFkdmFuY2UgaW4gbWV0cmljcyB1bml0cy4KKyAgKgorICAqIEByZXR1cm46CisgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgIFlvdSBjYW4gdXNlIHRoZSBgeF9zY2FsZScgb3IgYHlfc2NhbGUnIHJlc3VsdHMgb2YgQEZUX0dldF9QRlJfTWV0cmljcworICAqICAgIHRvIGNvbnZlcnQgdGhlIGFkdmFuY2UgdG8gZGV2aWNlIHN1Yi1waXhlbHMgKGkuZS4sIDEvNjR0aCBvZiBwaXhlbHMpLgorICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1BGUl9BZHZhbmNlKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICphYWR2YW5jZSApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVFBGUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0cmVuZGVyLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHJlbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOGRhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHJlbmRlci5oCkBAIC0wLDAgKzEsMjMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHJlbmRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFJFTkRFUl9IX18KKyNkZWZpbmUgX19GVFJFTkRFUl9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSBGVF9HTFlQSF9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGVfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogY3JlYXRlIGEgbmV3IGdseXBoIG9iamVjdCAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfR2x5cGhfSW5pdEZ1bmMpKCBGVF9HbHlwaCAgICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKyAgLyogZGVzdHJveXMgYSBnaXZlbiBnbHlwaCBvYmplY3QgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqRlRfR2x5cGhfRG9uZUZ1bmMpKCBGVF9HbHlwaCAgZ2x5cGggKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9HbHlwaF9UcmFuc2Zvcm1GdW5jKSggRlRfR2x5cGggICAgICAgICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgZGVsdGEgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9HbHlwaF9HZXRCQm94RnVuYykoIEZUX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3gqICBhYmJveCApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9HbHlwaF9Db3B5RnVuYykoIEZUX0dseXBoICAgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggICB0YXJnZXQgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfR2x5cGhfUHJlcGFyZUZ1bmMpKCBGVF9HbHlwaCAgICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKy8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgRlRfR2x5cGhfSW5pdF9GdW5jICAgICAgIEZUX0dseXBoX0luaXRGdW5jCisjZGVmaW5lIEZUX0dseXBoX0RvbmVfRnVuYyAgICAgICBGVF9HbHlwaF9Eb25lRnVuYworI2RlZmluZSBGVF9HbHlwaF9UcmFuc2Zvcm1fRnVuYyAgRlRfR2x5cGhfVHJhbnNmb3JtRnVuYworI2RlZmluZSBGVF9HbHlwaF9CQm94X0Z1bmMgICAgICAgRlRfR2x5cGhfR2V0QkJveEZ1bmMKKyNkZWZpbmUgRlRfR2x5cGhfQ29weV9GdW5jICAgICAgIEZUX0dseXBoX0NvcHlGdW5jCisjZGVmaW5lIEZUX0dseXBoX1ByZXBhcmVfRnVuYyAgICBGVF9HbHlwaF9QcmVwYXJlRnVuYworCisKKyAgc3RydWN0ICBGVF9HbHlwaF9DbGFzc18KKyAgeworICAgIEZUX0xvbmcgICAgICAgICAgICAgICAgIGdseXBoX3NpemU7CisgICAgRlRfR2x5cGhfRm9ybWF0ICAgICAgICAgZ2x5cGhfZm9ybWF0OworICAgIEZUX0dseXBoX0luaXRGdW5jICAgICAgIGdseXBoX2luaXQ7CisgICAgRlRfR2x5cGhfRG9uZUZ1bmMgICAgICAgZ2x5cGhfZG9uZTsKKyAgICBGVF9HbHlwaF9Db3B5RnVuYyAgICAgICBnbHlwaF9jb3B5OworICAgIEZUX0dseXBoX1RyYW5zZm9ybUZ1bmMgIGdseXBoX3RyYW5zZm9ybTsKKyAgICBGVF9HbHlwaF9HZXRCQm94RnVuYyAgICBnbHlwaF9iYm94OworICAgIEZUX0dseXBoX1ByZXBhcmVGdW5jICAgIGdseXBoX3ByZXBhcmU7CisgIH07CisKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfUmVuZGVyZXJfUmVuZGVyRnVuYykoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4gKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYykoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9NYXRyaXgqICBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIGRlbHRhICk7CisKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9SZW5kZXJlcl9HZXRDQm94RnVuYykoIEZUX1JlbmRlcmVyICAgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgICAgIGNib3ggKTsKKworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykoIEZUX1JlbmRlcmVyICByZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBtb2RlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBtb2RlX3B0ciApOworCisvKiBkZXByZWNhdGVkIGlkZW50aWZpZXJzICovCisjZGVmaW5lIEZUUmVuZGVyZXJfcmVuZGVyICBGVF9SZW5kZXJlcl9SZW5kZXJGdW5jCisjZGVmaW5lIEZUUmVuZGVyZXJfdHJhbnNmb3JtICBGVF9SZW5kZXJlcl9UcmFuc2Zvcm1GdW5jCisjZGVmaW5lIEZUUmVuZGVyZXJfZ2V0Q0JveCAgRlRfUmVuZGVyZXJfR2V0Q0JveEZ1bmMKKyNkZWZpbmUgRlRSZW5kZXJlcl9zZXRNb2RlICBGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVuZGVyZXJfQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlbmRlcmVyIG1vZHVsZSBjbGFzcyBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcm9vdCAgICAgICAgICAgIDo6IFRoZSByb290IEBGVF9Nb2R1bGVfQ2xhc3MgZmllbGRzLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9mb3JtYXQgICAgOjogVGhlIGdseXBoIGltYWdlIGZvcm1hdCB0aGlzIHJlbmRlcmVyIGhhbmRsZXMuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlbmRlcl9nbHlwaCAgICA6OiBBIG1ldGhvZCB1c2VkIHRvIHJlbmRlciB0aGUgaW1hZ2UgdGhhdCBpcyBpbiBhICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gZ2x5cGggc2xvdCBpbnRvIGEgYml0bWFwLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRyYW5zZm9ybV9nbHlwaCA6OiBBIG1ldGhvZCB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgaW1hZ2UgdGhhdCBpcyBpbiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgYSBnaXZlbiBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdldF9nbHlwaF9jYm94ICA6OiBBIG1ldGhvZCB1c2VkIHRvIGFjY2VzcyB0aGUgZ2x5cGgncyBjYm94LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2V0X21vZGUgICAgICAgIDo6IEEgbWV0aG9kIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXJfY2xhc3MgICAgOjogRm9yIEBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSByZW5kZXJlcnMgb25seS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBwb2ludGVyIHRvIGl0cyByYXN0ZXIncyBjbGFzcy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfUmVuZGVyZXJfQ2xhc3NfCisgIHsKKyAgICBGVF9Nb2R1bGVfQ2xhc3MgICAgICAgICAgICByb290OworCisgICAgRlRfR2x5cGhfRm9ybWF0ICAgICAgICAgICAgZ2x5cGhfZm9ybWF0OworCisgICAgRlRfUmVuZGVyZXJfUmVuZGVyRnVuYyAgICAgcmVuZGVyX2dseXBoOworICAgIEZUX1JlbmRlcmVyX1RyYW5zZm9ybUZ1bmMgIHRyYW5zZm9ybV9nbHlwaDsKKyAgICBGVF9SZW5kZXJlcl9HZXRDQm94RnVuYyAgICBnZXRfZ2x5cGhfY2JveDsKKyAgICBGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYyAgICBzZXRfbW9kZTsKKworICAgIEZUX1Jhc3Rlcl9GdW5jcyogICAgICAgICAgIHJhc3Rlcl9jbGFzczsKKworICB9IEZUX1JlbmRlcmVyX0NsYXNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1JlbmRlcmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIGEgZ2l2ZW4gZ2x5cGggZm9ybWF0LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb3JtYXQgIDo6IFRoZSBnbHlwaCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHJlbmRlcmVyIGhhbmRsZS4gIDB+aWYgbm9uZSBmb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlcnJvciB3aWxsIGJlIHJldHVybmVkIGlmIGEgbW9kdWxlIGFscmVhZHkgZXhpc3RzIGJ5IHRoYXQgbmFtZSwgKi8KKyAgLyogICAgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBhZGQgYSBuZXcgcmVuZGVyZXIsIHNpbXBseSB1c2UgQEZUX0FkZF9Nb2R1bGUuICBUbyByZXRyaWV2ZSBhICAgKi8KKyAgLyogICAgcmVuZGVyZXIgYnkgaXRzIG5hbWUsIHVzZSBARlRfR2V0X01vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1JlbmRlcmVyICkKKyAgRlRfR2V0X1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhfRm9ybWF0ICBmb3JtYXQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNldCB0aGUgY3VycmVudCByZW5kZXJlciB0byB1c2UsIGFuZCBzZXQgYWRkaXRpb25hbCBtb2RlLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlbmRlcmVyICAgOjogQSBoYW5kbGUgdG8gdGhlIHJlbmRlcmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3BhcmFtcyA6OiBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXJhbWV0ZXJzIDo6IEFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSByZW5kZXJlciB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBnbHlwaCAgICAgKi8KKyAgLyogICAgaW1hZ2VzIGluIHRoZSByZW5kZXJlcidzIGtub3duIGZvcm1hdCBpbnRvIGJpdG1hcHMuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciBvdGhlciBmb3JtYXRzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEN1cnJlbnRseSwgbm8gRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlIHVzZXMgYHBhcmFtZXRlcnMnOyB5b3UgICAgICAqLworICAvKiAgICBzaG91bGQgdGh1cyBhbHdheXMgcGFzcyBOVUxMIGFzIHRoZSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZXRfUmVuZGVyZXIoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyZXIgICAgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbWV0ZXJzICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUUkVOREVSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRzaXplcy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRzaXplcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjg0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHNpemVzLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c2l6ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBzaXplIG9iamVjdHMgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFR5cGljYWwgYXBwbGljYXRpb24gd291bGQgbm9ybWFsbHkgbm90IG5lZWQgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4gICAqLworICAvKiBIb3dldmVyLCB0aGV5IGhhdmUgYmVlbiBwbGFjZWQgaW4gYSBwdWJsaWMgQVBJIGZvciB0aGUgcmFyZSBjYXNlcyAgICAgKi8KKyAgLyogd2hlcmUgdGhleSBhcmUgbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRTSVpFU19IX18KKyNkZWZpbmUgX19GVFNJWkVTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemVzX21hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNpemUgTWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE1hbmFnaW5nIG11bHRpcGxlIHNpemVzIHBlciBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gY3JlYXRpbmcgYSBuZXcgZmFjZSBvYmplY3QgKGUuZy4sIHdpdGggQEZUX05ld19GYWNlKSwgYW4gICAgICAqLworICAvKiAgICBARlRfU2l6ZSBvYmplY3QgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGFuZCB1c2VkIHRvIHN0b3JlIGFsbCAgICAgKi8KKyAgLyogICAgcGl4ZWwtc2l6ZSBkZXBlbmRlbnQgaW5mb3JtYXRpb24sIGF2YWlsYWJsZSBpbiB0aGUgYGZhY2UtPnNpemUnICAgICovCisgIC8qICAgIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSXQgaXMgaG93ZXZlciBwb3NzaWJsZSB0byBjcmVhdGUgbW9yZSBzaXplcyBmb3IgYSBnaXZlbiBmYWNlLCAgICAgICovCisgIC8qICAgIG1vc3RseSBpbiBvcmRlciB0byBtYW5hZ2Ugc2V2ZXJhbCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZXMgb2YgdGhlICAgICAqLworICAvKiAgICBzYW1lIGZvbnQgZmFtaWx5IGFuZCBzdHlsZS4gIFNlZSBARlRfTmV3X1NpemUgYW5kIEBGVF9Eb25lX1NpemUuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCBARlRfU2V0X1BpeGVsX1NpemVzIGFuZCBARlRfU2V0X0NoYXJfU2l6ZSBvbmx5ICAgICAgICAgICAqLworICAvKiAgICBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGBhY3RpdmUnIHNpemU7IHlvdSB0aHVzIG5lZWQgICAgKi8KKyAgLyogICAgdG8gdXNlIEBGVF9BY3RpdmF0ZV9TaXplIHRvIGNoYW5nZSBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICA5OSUgb2YgYXBwbGljYXRpb25zIHdvbid0IG5lZWQgdGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBoZXJlLCAgICAgICAgKi8KKyAgLyogICAgZXNwZWNpYWxseSBpZiB0aGV5IHVzZSB0aGUgY2FjaGluZyBzdWItc3lzdGVtLCBzbyBiZSBjYXV0aW91cyAgICAgICovCisgIC8qICAgIHdoZW4gdXNpbmcgdGhlc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGUgYSBuZXcgc2l6ZSBvYmplY3QgZnJvbSBhIGdpdmVuIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIGEgcGFyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhc2l6ZSA6OiBBIGhhbmRsZSB0byBhIG5ldyBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3UgbmVlZCB0byBjYWxsIEBGVF9BY3RpdmF0ZV9TaXplIGluIG9yZGVyIHRvIHNlbGVjdCB0aGUgbmV3IHNpemUgKi8KKyAgLyogICAgZm9yIHVwY29taW5nIGNhbGxzIHRvIEBGVF9TZXRfUGl4ZWxfU2l6ZXMsIEBGVF9TZXRfQ2hhcl9TaXplLCAgICAgICovCisgIC8qICAgIEBGVF9Mb2FkX0dseXBoLCBARlRfTG9hZF9DaGFyLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX05ld19TaXplKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgIEZUX1NpemUqICBzaXplICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Eb25lX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEaXNjYXJkIGEgZ2l2ZW4gc2l6ZSBvYmplY3QuICBOb3RlIHRoYXQgQEZUX0RvbmVfRmFjZSAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXV0b21hdGljYWxseSBkaXNjYXJkcyBhbGwgc2l6ZSBvYmplY3RzIGFsbG9jYXRlZCB3aXRoICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9OZXdfU2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0RvbmVfU2l6ZSggRlRfU2l6ZSAgc2l6ZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQWN0aXZhdGVfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRXZlbiB0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIHNldmVyYWwgc2l6ZSBvYmplY3RzIGZvciBhICAgICovCisgIC8qICAgIGdpdmVuIGZhY2UgKHNlZSBARlRfTmV3X1NpemUgZm9yIGRldGFpbHMpLCBmdW5jdGlvbnMgbGlrZSAgICAgICAgICAqLworICAvKiAgICBARlRfTG9hZF9HbHlwaCBvciBARlRfTG9hZF9DaGFyIG9ubHkgdXNlIHRoZSBvbmUgdGhhdCBoYXMgYmVlbiAgICAgKi8KKyAgLyogICAgYWN0aXZhdGVkIGxhc3QgdG8gZGV0ZXJtaW5lIHRoZSBgY3VycmVudCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZScuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGBhY3RpdmF0ZScgYSBwcmV2aW91c2x5IGNyZWF0ZWQgc2l6ZSAgKi8KKyAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgYGZhY2UnIGlzIHRoZSBzaXplJ3MgcGFyZW50IGZhY2Ugb2JqZWN0LCB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMgICovCisgIC8qICAgIHRoZSB2YWx1ZSBvZiBgZmFjZS0+c2l6ZScgdG8gdGhlIGlucHV0IHNpemUgaGFuZGxlLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0FjdGl2YXRlX1NpemUoIEZUX1NpemUgIHNpemUgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRTSVpFU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0c25hbWVzLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHNuYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmN2ZiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHNuYW1lcy5oCkBAIC0wLDAgKzEsMjAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHNuYW1lcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU2ltcGxlIGludGVyZmFjZSB0byBhY2Nlc3MgU0ZOVCBuYW1lIHRhYmxlcyAod2hpY2ggYXJlIHVzZWQgICAgICAgICAgKi8KKy8qICAgIHRvIGhvbGQgZm9udCBuYW1lcywgY29weXJpZ2h0IGluZm8sIG5vdGljZXMsIGV0Yy4pIChzcGVjaWZpY2F0aW9uKS4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVF9TRk5UX05BTUVTX0hfXworI2RlZmluZSBfX0ZUX1NGTlRfTkFNRVNfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2ZudF9uYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU0ZOVCBOYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQWNjZXNzIHRoZSBuYW1lcyBlbWJlZGRlZCBpbiBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZmlsZXMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBzcGVjaWZpY2F0aW9ucyBhbGxvdyB0aGUgaW5jbHVzaW9uIG9mICAgICovCisgIC8qICAgIGEgc3BlY2lhbCBgbmFtZXMgdGFibGUnIGluIGZvbnQgZmlsZXMuICBUaGlzIHRhYmxlIGNvbnRhaW5zICAgICAgICAqLworICAvKiAgICB0ZXh0dWFsIChhbmQgaW50ZXJuYXRpb25hbGl6ZWQpIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgZm9udCwgICAgKi8KKyAgLyogICAgbGlrZSBmYW1pbHkgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZW0gaWYgYXZhaWxhYmxlLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZ2x5cGggbmFtZXMhICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZm50TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGFuIFNGTlQgYG5hbWUnIHRhYmxlIGVudHJ5LiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwbGF0Zm9ybV9pZCA6OiBUaGUgcGxhdGZvcm0gSUQgZm9yIGBzdHJpbmcnLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVuY29kaW5nX2lkIDo6IFRoZSBlbmNvZGluZyBJRCBmb3IgYHN0cmluZycuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGFuZ3VhZ2VfaWQgOjogVGhlIGxhbmd1YWdlIElEIGZvciBgc3RyaW5nJy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1lX2lkICAgICA6OiBBbiBpZGVudGlmaWVyIGZvciBgc3RyaW5nJy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmluZyAgICAgIDo6IFRoZSBgbmFtZScgc3RyaW5nLiAgTm90ZSB0aGF0IGl0cyBmb3JtYXQgZGlmZmVycyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIChwbGF0Zm9ybSxlbmNvZGluZykgcGFpci4gIEl0IGNhbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgYmUgYSBQYXNjYWwgU3RyaW5nLCBhIFVURi0xNiBvbmUsIGV0Yy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcsIHRoZSBzdHJpbmcgaXMgbm90ICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgemVyby10ZXJtaW5hdGVkLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBUcnVlVHlwZSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyaW5nX2xlbiAgOjogVGhlIGxlbmd0aCBvZiBgc3RyaW5nJyBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUG9zc2libGUgdmFsdWVzIGZvciBgcGxhdGZvcm1faWQnLCBgZW5jb2RpbmdfaWQnLCBgbGFuZ3VhZ2VfaWQnLCAgICovCisgIC8qICAgIGFuZCBgbmFtZV9pZCcgYXJlIGdpdmVuIGluIHRoZSBmaWxlIGB0dG5hbWVpZC5oJy4gIEZvciBkZXRhaWxzICAgICAqLworICAvKiAgICBwbGVhc2UgcmVmZXIgdG8gdGhlIFRydWVUeXBlIG9yIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBhbHNvIEBUVF9QTEFURk9STV9YWFgsIEBUVF9BUFBMRV9JRF9YWFgsIEBUVF9NQUNfSURfWFhYLCAgICAgICAqLworICAvKiAgICBAVFRfSVNPX0lEX1hYWCwgYW5kIEBUVF9NU19JRF9YWFguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TZm50TmFtZV8KKyAgeworICAgIEZUX1VTaG9ydCAgcGxhdGZvcm1faWQ7CisgICAgRlRfVVNob3J0ICBlbmNvZGluZ19pZDsKKyAgICBGVF9VU2hvcnQgIGxhbmd1YWdlX2lkOworICAgIEZUX1VTaG9ydCAgbmFtZV9pZDsKKworICAgIEZUX0J5dGUqICAgc3RyaW5nOyAgICAgIC8qIHRoaXMgc3RyaW5nIGlzICpub3QqIG51bGwtdGVybWluYXRlZCEgKi8KKyAgICBGVF9VSW50ICAgIHN0cmluZ19sZW47ICAvKiBpbiBieXRlcyAqLworCisgIH0gRlRfU2ZudE5hbWU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfU2ZudF9OYW1lX0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG5hbWUgc3RyaW5ncyBpbiB0aGUgU0ZOVCBgbmFtZScgdGFibGUuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIGBuYW1lJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfVUludCApCisgIEZUX0dldF9TZm50X05hbWVfQ291bnQoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9TZm50X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIGEgc3RyaW5nIG9mIHRoZSBTRk5UIGBuYW1lJyB0YWJsZSBmb3IgYSBnaXZlbiBpbmRleC4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaWR4ICAgOjogVGhlIGluZGV4IG9mIHRoZSBgbmFtZScgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYW5hbWUgOjogVGhlIGluZGV4ZWQgQEZUX1NmbnROYW1lIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGBzdHJpbmcnIGFycmF5IHJldHVybmVkIGluIHRoZSBgYW5hbWUnIHN0cnVjdHVyZSBpcyBub3QgICAgICAgICovCisgIC8qICAgIG51bGwtdGVybWluYXRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSBpdCBpZiBpdCBpcyBubyAqLworICAvKiAgICBsb25nZXIgaW4gdXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZSBARlRfR2V0X1NmbnRfTmFtZV9Db3VudCB0byBnZXQgdGhlIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgICAqLworICAvKiAgICBgbmFtZScgdGFibGUgZW50cmllcywgdGhlbiBkbyBhIGxvb3AgdW50aWwgeW91IGdldCB0aGUgcmlnaHQgICAgICAgKi8KKyAgLyogICAgcGxhdGZvcm0sIGVuY29kaW5nLCBhbmQgbmFtZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1NmbnRfTmFtZSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2ZudE5hbWUgICphbmFtZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfRkFNSUxZCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZXMgdG8gbWFrZQorICAgKiAgIEZUX09wZW5fRmFjZSgpIGlnbm9yZSBwcmVmZXJyZWQgZmFtaWx5IHN1YmZhbWlseSBuYW1lcyBpbiBgbmFtZScKKyAgICogICB0YWJsZSBzaW5jZSBPcGVuVHlwZSB2ZXJzaW9uIDEuNC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisgICAqICAgbGVnYWN5IHN5c3RlbXMgdGhhdCBoYXZlIGEgNC1mYWNlLXBlci1mYW1pbHkgcmVzdHJpY3Rpb24uCisgICAqCisgICAqLworI2RlZmluZSBGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9GQU1JTFkgIEZUX01BS0VfVEFHKCAnaScsICdnJywgJ3AnLCAnZicgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfU1VCRkFNSUxZCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZXMgdG8gbWFrZQorICAgKiAgIEZUX09wZW5fRmFjZSgpIGlnbm9yZSBwcmVmZXJyZWQgc3ViZmFtaWx5IG5hbWVzIGluIGBuYW1lJyB0YWJsZSBzaW5jZQorICAgKiAgIE9wZW5UeXBlIHZlcnNpb24gMS40LiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5CisgICAqICAgc3lzdGVtcyB0aGF0IGhhdmUgYSA0LWZhY2UtcGVyLWZhbWlseSByZXN0cmljdGlvbi4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWSAgRlRfTUFLRV9UQUcoICdpJywgJ2cnLCAncCcsICdzJyApCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUX1NGTlRfTkFNRVNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHN0cm9rZS5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRzdHJva2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJiMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRzdHJva2UuaApAQCAtMCwwICsxLDc4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRzdHJva2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRfU1RST0tFX0hfXworI2RlZmluZSBfX0ZUX1NUUk9LRV9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0dMWVBIX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQHNlY3Rpb246CisgICogICAgZ2x5cGhfc3Ryb2tlcgorICAqCisgICogQHRpdGxlOgorICAqICAgIEdseXBoIFN0cm9rZXIKKyAgKgorICAqIEBhYnN0cmFjdDoKKyAgKiAgICBHZW5lcmF0aW5nIGJvcmRlcmVkIGFuZCBzdHJva2VkIGdseXBocy4KKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgICBUaGlzIGNvbXBvbmVudCBnZW5lcmF0ZXMgc3Ryb2tlZCBvdXRsaW5lcyBvZiBhIGdpdmVuIHZlY3RvcmlhbAorICAqICAgIGdseXBoLiAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHJldHJpZXZlIHRoZSBgb3V0c2lkZScgYW5kL29yIHRoZQorICAqICAgIGBpbnNpZGUnIGJvcmRlcnMgb2YgdGhlIHN0cm9rZS4KKyAgKgorICAqICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBnZW5lcmF0ZSBgYm9yZGVyZWQnIGdseXBoLCBpLmUuLCBnbHlwaHMKKyAgKiAgICBkaXNwbGF5ZWQgd2l0aCBhIGNvbG91cmVkIChhbmQgYW50aS1hbGlhc2VkKSBib3JkZXIgYXJvdW5kIHRoZWlyCisgICogICAgc2hhcGUuCisgICoKKyAgKiBAb3JkZXI6CisgICogICAgRlRfU3Ryb2tlcgorICAqCisgICogICAgRlRfU3Ryb2tlcl9MaW5lSm9pbgorICAqICAgIEZUX1N0cm9rZXJfTGluZUNhcAorICAqICAgIEZUX1N0cm9rZXJCb3JkZXIKKyAgKgorICAqICAgIEZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyCisgICogICAgRlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyCisgICoKKyAgKiAgICBGVF9HbHlwaF9TdHJva2UKKyAgKiAgICBGVF9HbHlwaF9TdHJva2VCb3JkZXIKKyAgKgorICAqICAgIEZUX1N0cm9rZXJfTmV3CisgICogICAgRlRfU3Ryb2tlcl9TZXQKKyAgKiAgICBGVF9TdHJva2VyX1Jld2luZAorICAqICAgIEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lCisgICogICAgRlRfU3Ryb2tlcl9Eb25lCisgICoKKyAgKiAgICBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aAorICAqICAgIEZUX1N0cm9rZXJfRW5kU3ViUGF0aAorICAqCisgICogICAgRlRfU3Ryb2tlcl9MaW5lVG8KKyAgKiAgICBGVF9TdHJva2VyX0NvbmljVG8KKyAgKiAgICBGVF9TdHJva2VyX0N1YmljVG8KKyAgKgorICAqICAgIEZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzCisgICogICAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIKKyAgKiAgICBGVF9TdHJva2VyX0dldENvdW50cworICAqICAgIEZUX1N0cm9rZXJfRXhwb3J0CisgICoKKyAgKi8KKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBAdHlwZToKKyAgKiAgIEZUX1N0cm9rZXIKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgIE9wYXF1ZSBoYW5kbGUgdG8gYSBwYXRoIHN0cm9rZXIgb2JqZWN0LgorICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TdHJva2VyUmVjXyogIEZUX1N0cm9rZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfU3Ryb2tlcl9MaW5lSm9pbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlc2UgdmFsdWVzIGRldGVybWluZSBob3cgdHdvIGpvaW5pbmcgbGluZXMgYXJlIHJlbmRlcmVkCisgICAqICAgaW4gYSBzdHJva2VyLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX1NUUk9LRVJfTElORUpPSU5fUk9VTkQgOjoKKyAgICogICAgIFVzZWQgdG8gcmVuZGVyIHJvdW5kZWQgbGluZSBqb2lucy4gIENpcmN1bGFyIGFyY3MgYXJlIHVzZWQKKyAgICogICAgIHRvIGpvaW4gdHdvIGxpbmVzIHNtb290aGx5LgorICAgKgorICAgKiAgIEZUX1NUUk9LRVJfTElORUpPSU5fQkVWRUwgOjoKKyAgICogICAgIFVzZWQgdG8gcmVuZGVyIGJldmVsZWQgbGluZSBqb2lucy4gIFRoZSBvdXRlciBjb3JuZXIgb2YKKyAgICogICAgIHRoZSBqb2luZWQgbGluZXMgaXMgZmlsbGVkIGJ5IGVuY2xvc2luZyB0aGUgdHJpYW5ndWxhcgorICAgKiAgICAgcmVnaW9uIG9mIHRoZSBjb3JuZXIgd2l0aCBhIHN0cmFpZ2h0IGxpbmUgYmV0d2VlbiB0aGUKKyAgICogICAgIG91dGVyIGNvcm5lcnMgb2YgZWFjaCBzdHJva2UuCisgICAqCisgICAqICAgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9GSVhFRCA6OgorICAgKiAgICAgVXNlZCB0byByZW5kZXIgbWl0ZXJlZCBsaW5lIGpvaW5zLCB3aXRoIGZpeGVkIGJldmVscyBpZiB0aGUKKyAgICogICAgIG1pdGVyIGxpbWl0IGlzIGV4Y2VlZGVkLiAgVGhlIG91dGVyIGVkZ2VzIG9mIHRoZSBzdHJva2VzCisgICAqICAgICBmb3IgdGhlIHR3byBzZWdtZW50cyBhcmUgZXh0ZW5kZWQgdW50aWwgdGhleSBtZWV0IGF0IGFuCisgICAqICAgICBhbmdsZS4gIElmIHRoZSBzZWdtZW50cyBtZWV0IGF0IHRvbyBzaGFycCBhbiBhbmdsZSAoc3VjaAorICAgKiAgICAgdGhhdCB0aGUgbWl0ZXIgd291bGQgZXh0ZW5kIGZyb20gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUKKyAgICogICAgIHNlZ21lbnRzIGEgZGlzdGFuY2UgZ3JlYXRlciB0aGFuIHRoZSBwcm9kdWN0IG9mIHRoZSBtaXRlcgorICAgKiAgICAgbGltaXQgdmFsdWUgYW5kIHRoZSBib3JkZXIgcmFkaXVzKSwgdGhlbiBhIGJldmVsIGpvaW4gKHNlZQorICAgKiAgICAgYWJvdmUpIGlzIHVzZWQgaW5zdGVhZC4gIFRoaXMgcHJldmVudHMgbG9uZyBzcGlrZXMgYmVpbmcKKyAgICogICAgIGNyZWF0ZWQuICBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX0ZJWEVEIGdlbmVyYXRlcyBhIG1pdGVyCisgICAqICAgICBsaW5lIGpvaW4gYXMgdXNlZCBpbiBQb3N0U2NyaXB0IGFuZCBQREYuCisgICAqCisgICAqICAgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSA6OgorICAgKiAgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVIgOjoKKyAgICogICAgIFVzZWQgdG8gcmVuZGVyIG1pdGVyZWQgbGluZSBqb2lucywgd2l0aCB2YXJpYWJsZSBiZXZlbHMgaWYKKyAgICogICAgIHRoZSBtaXRlciBsaW1pdCBpcyBleGNlZWRlZC4gIFRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCisgICAqICAgICBzdHJva2VzIGlzIGNsaXBwZWQgYXQgYSBsaW5lIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGJpc2VjdG9yCisgICAqICAgICBvZiB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgc3Ryb2tlcywgYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlCisgICAqICAgICBpbnRlcnNlY3Rpb24gb2YgdGhlIHNlZ21lbnRzIGVxdWFsIHRvIHRoZSBwcm9kdWN0IG9mIHRoZQorICAgKiAgICAgbWl0ZXIgbGltaXQgdmFsdWUgYW5kIHRoZSBib3JkZXIgcmFkaXVzLiAgVGhpcyBwcmV2ZW50cworICAgKiAgICAgbG9uZyBzcGlrZXMgYmVpbmcgY3JlYXRlZC4KKyAgICogICAgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUgZ2VuZXJhdGVzIGEgbWl0ZXJlZCBsaW5lCisgICAqICAgICBqb2luIGFzIHVzZWQgaW4gWFBTLiAgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUiBpcyBhbiBhbGlhcworICAgKiAgICAgZm9yIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUsIHJldGFpbmVkIGZvcgorICAgKiAgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAqLworICB0eXBlZGVmIGVudW0gIEZUX1N0cm9rZXJfTGluZUpvaW5fCisgIHsKKyAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5EICAgICAgICAgID0gMCwKKyAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX0JFVkVMICAgICAgICAgID0gMSwKKyAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFID0gMiwKKyAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSICAgICAgICAgID0gRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSwKKyAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX0ZJWEVEICAgID0gMworCisgIH0gRlRfU3Ryb2tlcl9MaW5lSm9pbjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9TdHJva2VyX0xpbmVDYXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZXNlIHZhbHVlcyBkZXRlcm1pbmUgaG93IHRoZSBlbmQgb2Ygb3BlbmVkIHN1Yi1wYXRocyBhcmUKKyAgICogICByZW5kZXJlZCBpbiBhIHN0cm9rZS4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9TVFJPS0VSX0xJTkVDQVBfQlVUVCA6OgorICAgKiAgICAgVGhlIGVuZCBvZiBsaW5lcyBpcyByZW5kZXJlZCBhcyBhIGZ1bGwgc3RvcCBvbiB0aGUgbGFzdAorICAgKiAgICAgcG9pbnQgaXRzZWxmLgorICAgKgorICAgKiAgIEZUX1NUUk9LRVJfTElORUNBUF9ST1VORCA6OgorICAgKiAgICAgVGhlIGVuZCBvZiBsaW5lcyBpcyByZW5kZXJlZCBhcyBhIGhhbGYtY2lyY2xlIGFyb3VuZCB0aGUKKyAgICogICAgIGxhc3QgcG9pbnQuCisgICAqCisgICAqICAgRlRfU1RST0tFUl9MSU5FQ0FQX1NRVUFSRSA6OgorICAgKiAgICAgVGhlIGVuZCBvZiBsaW5lcyBpcyByZW5kZXJlZCBhcyBhIHNxdWFyZSBhcm91bmQgdGhlCisgICAqICAgICBsYXN0IHBvaW50LgorICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9TdHJva2VyX0xpbmVDYXBfCisgIHsKKyAgICBGVF9TVFJPS0VSX0xJTkVDQVBfQlVUVCA9IDAsCisgICAgRlRfU1RST0tFUl9MSU5FQ0FQX1JPVU5ELAorICAgIEZUX1NUUk9LRVJfTElORUNBUF9TUVVBUkUKKworICB9IEZUX1N0cm9rZXJfTGluZUNhcDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9TdHJva2VyQm9yZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gc2VsZWN0IGEgZ2l2ZW4gc3Ryb2tlIGJvcmRlcgorICAgKiAgIGluIEBGVF9TdHJva2VyX0dldEJvcmRlckNvdW50cyBhbmQgQEZUX1N0cm9rZXJfRXhwb3J0Qm9yZGVyLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX1NUUk9LRVJfQk9SREVSX0xFRlQgOjoKKyAgICogICAgIFNlbGVjdCB0aGUgbGVmdCBib3JkZXIsIHJlbGF0aXZlIHRvIHRoZSBkcmF3aW5nIGRpcmVjdGlvbi4KKyAgICoKKyAgICogICBGVF9TVFJPS0VSX0JPUkRFUl9SSUdIVCA6OgorICAgKiAgICAgU2VsZWN0IHRoZSByaWdodCBib3JkZXIsIHJlbGF0aXZlIHRvIHRoZSBkcmF3aW5nIGRpcmVjdGlvbi4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQXBwbGljYXRpb25zIGFyZSBnZW5lcmFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYGluc2lkZScgYW5kIGBvdXRzaWRlJworICAgKiAgIGJvcmRlcnMuICBIb3dldmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgbWFwcGluZyBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUKKyAgICogICBgbGVmdCcgYW5kIGByaWdodCcgb25lcywgc2luY2UgdGhpcyByZWFsbHkgZGVwZW5kcyBvbiB0aGUgZ2x5cGgncworICAgKiAgIGRyYXdpbmcgb3JpZW50YXRpb24sIHdoaWNoIHZhcmllcyBiZXR3ZWVuIGZvbnQgZm9ybWF0cy4KKyAgICoKKyAgICogICBZb3UgY2FuIGhvd2V2ZXIgdXNlIEBGVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlciBhbmQKKyAgICogICBARlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyIHRvIGdldCB0aGVzZS4KKyAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfU3Ryb2tlckJvcmRlcl8KKyAgeworICAgIEZUX1NUUk9LRVJfQk9SREVSX0xFRlQgPSAwLAorICAgIEZUX1NUUk9LRVJfQk9SREVSX1JJR0hUCisKKyAgfSBGVF9TdHJva2VyQm9yZGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0dldEluc2lkZUJvcmRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIEBGVF9TdHJva2VyQm9yZGVyIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAqICAgYGluc2lkZScgYm9yZGVycyBvZiBhIGdpdmVuIG91dGxpbmUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBUaGUgc291cmNlIG91dGxpbmUgaGFuZGxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBib3JkZXIgaW5kZXguICBARlRfU1RST0tFUl9CT1JERVJfUklHSFQgZm9yIGVtcHR5IG9yIGludmFsaWQKKyAgICogICBvdXRsaW5lcy4KKyAgICovCisgIEZUX0VYUE9SVCggRlRfU3Ryb2tlckJvcmRlciApCisgIEZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHJpZXZlIHRoZSBARlRfU3Ryb2tlckJvcmRlciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgKiAgIGBvdXRzaWRlJyBib3JkZXJzIG9mIGEgZ2l2ZW4gb3V0bGluZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIFRoZSBzb3VyY2Ugb3V0bGluZSBoYW5kbGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIGJvcmRlciBpbmRleC4gIEBGVF9TVFJPS0VSX0JPUkRFUl9MRUZUIGZvciBlbXB0eSBvciBpbnZhbGlkCisgICAqICAgb3V0bGluZXMuCisgICAqLworICBGVF9FWFBPUlQoIEZUX1N0cm9rZXJCb3JkZXIgKQorICBGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIoIEZUX091dGxpbmUqICBvdXRsaW5lICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1N0cm9rZXJfTmV3CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgc3Ryb2tlciBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBGcmVlVHlwZSBsaWJyYXJ5IGhhbmRsZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhc3Ryb2tlciA6OgorICAgKiAgICAgQSBuZXcgc3Ryb2tlciBvYmplY3QgaGFuZGxlLiAgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1N0cm9rZXJfTmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIEZUX1N0cm9rZXIgICphc3Ryb2tlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX1NldAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmVzZXQgYSBzdHJva2VyIG9iamVjdCdzIGF0dHJpYnV0ZXMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJva2VyIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLgorICAgKgorICAgKiAgIHJhZGl1cyA6OgorICAgKiAgICAgVGhlIGJvcmRlciByYWRpdXMuCisgICAqCisgICAqICAgbGluZV9jYXAgOjoKKyAgICogICAgIFRoZSBsaW5lIGNhcCBzdHlsZS4KKyAgICoKKyAgICogICBsaW5lX2pvaW4gOjoKKyAgICogICAgIFRoZSBsaW5lIGpvaW4gc3R5bGUuCisgICAqCisgICAqICAgbWl0ZXJfbGltaXQgOjoKKyAgICogICAgIFRoZSBtaXRlciBsaW1pdCBmb3IgdGhlIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfRklYRUQgYW5kCisgICAqICAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX01JVEVSX1ZBUklBQkxFIGxpbmUgam9pbiBzdHlsZXMsCisgICAqICAgICBleHByZXNzZWQgYXMgMTYuMTYgZml4ZWQtcG9pbnQgdmFsdWUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSByYWRpdXMgaXMgZXhwcmVzc2VkIGluIHRoZSBzYW1lIHVuaXRzIGFzIHRoZSBvdXRsaW5lCisgICAqICAgY29vcmRpbmF0ZXMuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfU3Ryb2tlcl9SZXdpbmQgYXV0b21hdGljYWxseS4KKyAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX1N0cm9rZXJfU2V0KCBGVF9TdHJva2VyICAgICAgICAgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICAgICAgICAgcmFkaXVzLAorICAgICAgICAgICAgICAgICAgRlRfU3Ryb2tlcl9MaW5lQ2FwICAgbGluZV9jYXAsCisgICAgICAgICAgICAgICAgICBGVF9TdHJva2VyX0xpbmVKb2luICBsaW5lX2pvaW4sCisgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgICAgICAgICBtaXRlcl9saW1pdCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX1Jld2luZAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmVzZXQgYSBzdHJva2VyIG9iamVjdCB3aXRob3V0IGNoYW5naW5nIGl0cyBhdHRyaWJ1dGVzLgorICAgKiAgIFlvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBiZWdpbm5pbmcgYSBuZXcKKyAgICogICBzZXJpZXMgb2YgY2FsbHMgdG8gQEZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIG9yCisgICAqICAgQEZUX1N0cm9rZXJfRW5kU3ViUGF0aC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cm9rZXIgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgc3Ryb2tlciBoYW5kbGUuCisgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9TdHJva2VyX1Jld2luZCggRlRfU3Ryb2tlciAgc3Ryb2tlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX1BhcnNlT3V0bGluZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB1c2VkIHRvIHBhcnNlIGEgd2hvbGUgb3V0bGluZSB3aXRoCisgICAqICAgdGhlIHN0cm9rZXIuICBUaGUgcmVzdWx0aW5nIG91dGxpbmUocykgY2FuIGJlIHJldHJpZXZlZAorICAgKiAgIGxhdGVyIGJ5IGZ1bmN0aW9ucyBsaWtlIEBGVF9TdHJva2VyX0dldENvdW50cyBhbmQgQEZUX1N0cm9rZXJfRXhwb3J0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBUaGUgc291cmNlIG91dGxpbmUuCisgICAqCisgICAqICAgb3BlbmVkIDo6CisgICAqICAgICBBIGJvb2xlYW4uICBJZn4xLCB0aGUgb3V0bGluZSBpcyB0cmVhdGVkIGFzIGFuIG9wZW4gcGF0aCBpbnN0ZWFkCisgICAqICAgICBvZiBhIGNsb3NlZCBvbmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSWYgYG9wZW5lZCcgaXN+MCAodGhlIGRlZmF1bHQpLCB0aGUgb3V0bGluZSBpcyB0cmVhdGVkIGFzIGEgY2xvc2VkCisgICAqICAgcGF0aCwgYW5kIHRoZSBzdHJva2VyIGdlbmVyYXRlcyB0d28gZGlzdGluY3QgYGJvcmRlcicgb3V0bGluZXMuCisgICAqCisgICAqICAgSWYgYG9wZW5lZCcgaXN+MSwgdGhlIG91dGxpbmUgaXMgcHJvY2Vzc2VkIGFzIGFuIG9wZW4gcGF0aCwgYW5kIHRoZQorICAgKiAgIHN0cm9rZXIgZ2VuZXJhdGVzIGEgc2luZ2xlIGBzdHJva2UnIG91dGxpbmUuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfU3Ryb2tlcl9SZXdpbmQgYXV0b21hdGljYWxseS4KKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TdHJva2VyX1BhcnNlT3V0bGluZSggRlRfU3Ryb2tlciAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBvcGVuZWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU3Ryb2tlcl9CZWdpblN1YlBhdGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFN0YXJ0IGEgbmV3IHN1Yi1wYXRoIGluIHRoZSBzdHJva2VyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogICB0byA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBzdGFydCB2ZWN0b3IuCisgICAqCisgICAqICAgb3BlbiA6OgorICAgKiAgICAgQSBib29sZWFuLiAgSWZ+MSwgdGhlIHN1Yi1wYXRoIGlzIHRyZWF0ZWQgYXMgYW4gb3BlbiBvbmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3UgbmVlZCB0byBzdHJva2UgYSBwYXRoIHRoYXQgaXMKKyAgICogICBub3Qgc3RvcmVkIGFzIGFuIEBGVF9PdXRsaW5lIG9iamVjdC4KKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCggRlRfU3Ryb2tlciAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgb3BlbiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX0VuZFN1YlBhdGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENsb3NlIHRoZSBjdXJyZW50IHN1Yi1wYXRoIGluIHRoZSBzdHJva2VyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciBARlRfU3Ryb2tlcl9CZWdpblN1YlBhdGguCisgICAqICAgSWYgdGhlIHN1YnBhdGggd2FzIG5vdCBgb3BlbmVkJywgdGhpcyBmdW5jdGlvbiBgZHJhd3MnIGEKKyAgICogICBzaW5nbGUgbGluZSBzZWdtZW50IHRvIHRoZSBzdGFydCBwb3NpdGlvbiB3aGVuIG5lZWRlZC4KKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TdHJva2VyX0VuZFN1YlBhdGgoIEZUX1N0cm9rZXIgIHN0cm9rZXIgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU3Ryb2tlcl9MaW5lVG8KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIGBEcmF3JyBhIHNpbmdsZSBsaW5lIHNlZ21lbnQgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLAorICAgKiAgIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJva2VyIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLgorICAgKgorICAgKiAgIHRvIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHBvaW50LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFlvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGJldHdlZW4gQEZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIGFuZAorICAgKiAgIEBGVF9TdHJva2VyX0VuZFN1YlBhdGguCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9MaW5lVG8oIEZUX1N0cm9rZXIgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0byApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX0NvbmljVG8KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIGBEcmF3JyBhIHNpbmdsZSBxdWFkcmF0aWMgQsOpemllciBpbiB0aGUgc3Ryb2tlcidzIGN1cnJlbnQgc3ViLXBhdGgsCisgICAqICAgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cm9rZXIgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgc3Ryb2tlciBoYW5kbGUuCisgICAqCisgICAqICAgY29udHJvbCA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgQsOpemllciBjb250cm9sIHBvaW50LgorICAgKgorICAgKiAgIHRvIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHBvaW50LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFlvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGJldHdlZW4gQEZUX1N0cm9rZXJfQmVnaW5TdWJQYXRoIGFuZAorICAgKiAgIEBGVF9TdHJva2VyX0VuZFN1YlBhdGguCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9Db25pY1RvKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8gKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU3Ryb2tlcl9DdWJpY1RvCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBgRHJhdycgYSBzaW5nbGUgY3ViaWMgQsOpemllciBpbiB0aGUgc3Ryb2tlcidzIGN1cnJlbnQgc3ViLXBhdGgsCisgICAqICAgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cm9rZXIgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgc3Ryb2tlciBoYW5kbGUuCisgICAqCisgICAqICAgY29udHJvbDEgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQsOpemllciBjb250cm9sIHBvaW50LgorICAgKgorICAgKiAgIGNvbnRyb2wyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gc2Vjb25kIELDqXppZXIgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogICB0byA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBiZXR3ZWVuIEBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCBhbmQKKyAgICogICBARlRfU3Ryb2tlcl9FbmRTdWJQYXRoLgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1N0cm9rZXJfQ3ViaWNUbyggRlRfU3Ryb2tlciAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBjb250cm9sMSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBjb250cm9sMiwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0byApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJva2VyX0dldEJvcmRlckNvdW50cworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgeW91IGhhdmUgZmluaXNoZWQgcGFyc2luZyB5b3VyIHBhdGhzCisgICAqICAgd2l0aCB0aGUgc3Ryb2tlci4gIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBwb2ludHMgYW5kCisgICAqICAgY29udG91cnMgbmVjZXNzYXJ5IHRvIGV4cG9ydCBvbmUgb2YgdGhlIGBib3JkZXInIG9yIGBzdHJva2UnCisgICAqICAgb3V0bGluZXMgZ2VuZXJhdGVkIGJ5IHRoZSBzdHJva2VyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogICBib3JkZXIgOjoKKyAgICogICAgIFRoZSBib3JkZXIgaW5kZXguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYW51bV9wb2ludHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgcG9pbnRzLgorICAgKgorICAgKiAgIGFudW1fY29udG91cnMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgY29udG91cnMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgV2hlbiBhbiBvdXRsaW5lLCBvciBhIHN1Yi1wYXRoLCBpcyBgY2xvc2VkJywgdGhlIHN0cm9rZXIgZ2VuZXJhdGVzCisgICAqICAgdHdvIGluZGVwZW5kZW50IGBib3JkZXInIG91dGxpbmVzLCBuYW1lZCBgbGVmdCcgYW5kIGByaWdodCcuCisgICAqCisgICAqICAgV2hlbiB0aGUgb3V0bGluZSwgb3IgYSBzdWItcGF0aCwgaXMgYG9wZW5lZCcsIHRoZSBzdHJva2VyIG1lcmdlcworICAgKiAgIHRoZSBgYm9yZGVyJyBvdXRsaW5lcyB3aXRoIGNhcHMuICBUaGUgYGxlZnQnIGJvcmRlciByZWNlaXZlcyBhbGwKKyAgICogICBwb2ludHMsIHdoaWxlIHRoZSBgcmlnaHQnIGJvcmRlciBiZWNvbWVzIGVtcHR5LgorICAgKgorICAgKiAgIFVzZSB0aGUgZnVuY3Rpb24gQEZUX1N0cm9rZXJfR2V0Q291bnRzIGluc3RlYWQgaWYgeW91IHdhbnQgdG8KKyAgICogICByZXRyaWV2ZSB0aGUgY291bnRzIGFzc29jaWF0ZWQgdG8gYm90aCBib3JkZXJzLgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzKCBGVF9TdHJva2VyICAgICAgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3Ryb2tlckJvcmRlciAgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAqYW51bV9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICphbnVtX2NvbnRvdXJzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1N0cm9rZXJfRXhwb3J0Qm9yZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgQEZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzIHRvCisgICAqICAgZXhwb3J0IHRoZSBjb3JyZXNwb25kaW5nIGJvcmRlciB0byB5b3VyIG93biBARlRfT3V0bGluZQorICAgKiAgIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhcHBlbmRzIHRoZSBib3JkZXIgcG9pbnRzIGFuZAorICAgKiAgIGNvbnRvdXJzIHRvIHlvdXIgb3V0bGluZSwgYnV0IGRvZXMgbm90IHRyeSB0byByZXNpemUgaXRzCisgICAqICAgYXJyYXlzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogICBib3JkZXIgOjoKKyAgICogICAgIFRoZSBib3JkZXIgaW5kZXguCisgICAqCisgICAqICAgb3V0bGluZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCBvdXRsaW5lIGhhbmRsZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQWx3YXlzIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciBARlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMgdG8KKyAgICogICBnZXQgc3VyZSB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHlvdXIgQEZUX091dGxpbmUgb2JqZWN0IHRvCisgICAqICAgcmVjZWl2ZSBhbGwgbmV3IGRhdGEuCisgICAqCisgICAqICAgV2hlbiBhbiBvdXRsaW5lLCBvciBhIHN1Yi1wYXRoLCBpcyBgY2xvc2VkJywgdGhlIHN0cm9rZXIgZ2VuZXJhdGVzCisgICAqICAgdHdvIGluZGVwZW5kZW50IGBib3JkZXInIG91dGxpbmVzLCBuYW1lZCBgbGVmdCcgYW5kIGByaWdodCcuCisgICAqCisgICAqICAgV2hlbiB0aGUgb3V0bGluZSwgb3IgYSBzdWItcGF0aCwgaXMgYG9wZW5lZCcsIHRoZSBzdHJva2VyIG1lcmdlcworICAgKiAgIHRoZSBgYm9yZGVyJyBvdXRsaW5lcyB3aXRoIGNhcHMuICBUaGUgYGxlZnQnIGJvcmRlciByZWNlaXZlcyBhbGwKKyAgICogICBwb2ludHMsIHdoaWxlIHRoZSBgcmlnaHQnIGJvcmRlciBiZWNvbWVzIGVtcHR5LgorICAgKgorICAgKiAgIFVzZSB0aGUgZnVuY3Rpb24gQEZUX1N0cm9rZXJfRXhwb3J0IGluc3RlYWQgaWYgeW91IHdhbnQgdG8KKyAgICogICByZXRyaWV2ZSBhbGwgYm9yZGVycyBhdCBvbmNlLgorICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIoIEZUX1N0cm9rZXIgICAgICAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJva2VyQm9yZGVyICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgICBvdXRsaW5lICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1N0cm9rZXJfR2V0Q291bnRzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDYWxsIHRoaXMgZnVuY3Rpb24gb25jZSB5b3UgaGF2ZSBmaW5pc2hlZCBwYXJzaW5nIHlvdXIgcGF0aHMKKyAgICogICB3aXRoIHRoZSBzdHJva2VyLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50cyBhbmQKKyAgICogICBjb250b3VycyBuZWNlc3NhcnkgdG8gZXhwb3J0IGFsbCBwb2ludHMvYm9yZGVycyBmcm9tIHRoZSBzdHJva2VkCisgICAqICAgb3V0bGluZS9wYXRoLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhbnVtX3BvaW50cyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBwb2ludHMuCisgICAqCisgICAqICAgYW51bV9jb250b3VycyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBjb250b3Vycy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1N0cm9rZXJfR2V0Q291bnRzKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAqYW51bV9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICphbnVtX2NvbnRvdXJzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1N0cm9rZXJfRXhwb3J0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgQEZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzIHRvCisgICAqICAgZXhwb3J0IGFsbCBib3JkZXJzIHRvIHlvdXIgb3duIEBGVF9PdXRsaW5lIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhcHBlbmRzIHRoZSBib3JkZXIgcG9pbnRzIGFuZAorICAgKiAgIGNvbnRvdXJzIHRvIHlvdXIgb3V0bGluZSwgYnV0IGRvZXMgbm90IHRyeSB0byByZXNpemUgaXRzCisgICAqICAgYXJyYXlzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3Ryb2tlciA6OgorICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KKyAgICoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IG91dGxpbmUgaGFuZGxlLgorICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfU3Ryb2tlcl9FeHBvcnQoIEZUX1N0cm9rZXIgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU3Ryb2tlcl9Eb25lCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEZXN0cm95IGEgc3Ryb2tlciBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJva2VyIDo6CisgICAqICAgICBBIHN0cm9rZXIgaGFuZGxlLiAgQ2FuIGJlIE5VTEwuCisgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9TdHJva2VyX0RvbmUoIEZUX1N0cm9rZXIgIHN0cm9rZXIgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2x5cGhfU3Ryb2tlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBTdHJva2UgYSBnaXZlbiBvdXRsaW5lIGdseXBoIG9iamVjdCB3aXRoIGEgZ2l2ZW4gc3Ryb2tlci4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIHBnbHlwaCA6OgorICAgKiAgICAgU291cmNlIGdseXBoIGhhbmRsZSBvbiBpbnB1dCwgbmV3IGdseXBoIGhhbmRsZSBvbiBvdXRwdXQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJva2VyIDo6CisgICAqICAgICBBIHN0cm9rZXIgaGFuZGxlLgorICAgKgorICAgKiAgIGRlc3Ryb3kgOjoKKyAgICogICAgIEEgQm9vbGVhbi4gIElmfjEsIHRoZSBzb3VyY2UgZ2x5cGggb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgKiAgICAgb24gc3VjY2Vzcy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHNvdXJjZSBnbHlwaCBpcyB1bnRvdWNoZWQgaW4gY2FzZSBvZiBlcnJvci4KKyAgICoKKyAgICogICBBZGRpbmcgc3Ryb2tlIG1heSB5aWVsZCBhIHNpZ25pZmljYW50bHkgd2lkZXIgYW5kIHRhbGxlciBnbHlwaAorICAgKiAgIGRlcGVuZGluZyBvbiBob3cgbGFyZ2Ugb2YgYSByYWRpdXMgd2FzIHVzZWQgdG8gc3Ryb2tlIHRoZSBnbHlwaC4gIFlvdQorICAgKiAgIG1heSBuZWVkIHRvIG1hbnVhbGx5IGFkanVzdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhZHZhbmNlIGFtb3VudHMKKyAgICogICB0byBhY2NvdW50IGZvciB0aGlzIGFkZGVkIHNpemUuCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfU3Ryb2tlKCBGVF9HbHlwaCAgICAqcGdseXBoLAorICAgICAgICAgICAgICAgICAgIEZUX1N0cm9rZXIgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBkZXN0cm95ICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dseXBoX1N0cm9rZUJvcmRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU3Ryb2tlIGEgZ2l2ZW4gb3V0bGluZSBnbHlwaCBvYmplY3Qgd2l0aCBhIGdpdmVuIHN0cm9rZXIsIGJ1dAorICAgKiAgIG9ubHkgcmV0dXJuIGVpdGhlciBpdHMgaW5zaWRlIG9yIG91dHNpZGUgYm9yZGVyLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgcGdseXBoIDo6CisgICAqICAgICBTb3VyY2UgZ2x5cGggaGFuZGxlIG9uIGlucHV0LCBuZXcgZ2x5cGggaGFuZGxlIG9uIG91dHB1dC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cm9rZXIgOjoKKyAgICogICAgIEEgc3Ryb2tlciBoYW5kbGUuCisgICAqCisgICAqICAgaW5zaWRlIDo6CisgICAqICAgICBBIEJvb2xlYW4uICBJZn4xLCByZXR1cm4gdGhlIGluc2lkZSBib3JkZXIsIG90aGVyd2lzZQorICAgKiAgICAgdGhlIG91dHNpZGUgYm9yZGVyLgorICAgKgorICAgKiAgIGRlc3Ryb3kgOjoKKyAgICogICAgIEEgQm9vbGVhbi4gIElmfjEsIHRoZSBzb3VyY2UgZ2x5cGggb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgKiAgICAgb24gc3VjY2Vzcy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHNvdXJjZSBnbHlwaCBpcyB1bnRvdWNoZWQgaW4gY2FzZSBvZiBlcnJvci4KKyAgICoKKyAgICogICBBZGRpbmcgc3Ryb2tlIG1heSB5aWVsZCBhIHNpZ25pZmljYW50bHkgd2lkZXIgYW5kIHRhbGxlciBnbHlwaAorICAgKiAgIGRlcGVuZGluZyBvbiBob3cgbGFyZ2Ugb2YgYSByYWRpdXMgd2FzIHVzZWQgdG8gc3Ryb2tlIHRoZSBnbHlwaC4gIFlvdQorICAgKiAgIG1heSBuZWVkIHRvIG1hbnVhbGx5IGFkanVzdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhZHZhbmNlIGFtb3VudHMKKyAgICogICB0byBhY2NvdW50IGZvciB0aGlzIGFkZGVkIHNpemUuCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfU3Ryb2tlQm9yZGVyKCBGVF9HbHlwaCAgICAqcGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cm9rZXIgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBpbnNpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIGRlc3Ryb3kgKTsKKworICAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUX1NUUk9LRV9IX18gKi8KKworCisvKiBFTkQgKi8KKworCisvKiBMb2NhbCBWYXJpYWJsZXM6ICovCisvKiBjb2Rpbmc6IHV0Zi04ICAgICovCisvKiBFbmQ6ICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHN5bnRoLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHN5bnRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjYmFkOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0c3ludGguaApAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHN5bnRoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZyAgICAgICAgICAgICAgKi8KKy8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKiogICAgICAgIFdBUk5JTkcsIFRISVMgSVMgQUxQSEEgQ09ERSEgIFRISVMgQVBJICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqICAgIElTIERVRSBUTyBDSEFOR0UgVU5USUwgU1RSSUNUTFkgTk9USUZJRUQgQlkgVEhFICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiAgICAgICAgICAgIEZSRUVUWVBFIERFVkVMT1BNRU5UIFRFQU0gICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBNYWluIHJlYXNvbiBmb3Igbm90IGxpZnRpbmcgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0byBhICAqLworICAvKiBgc3RhbmRhcmQnIEFQSSBpcyB0aGF0IHRoZSB1c2VkIHBhcmFtZXRlcnMgZm9yIGVtYm9sZGVuaW5nIGFuZCAqLworICAvKiBzbGFudGluZyBhcmUgbm90IGNvbmZpZ3VyYWJsZS4gIENvbnNpZGVyIHRoZSBmdW5jdGlvbnMgYXMgYSAgICAqLworICAvKiBjb2RlIHJlc291cmNlIHRoYXQgc2hvdWxkIGJlIGNvcGllZCBpbnRvIHRoZSBhcHBsaWNhdGlvbiBhbmQgICAqLworICAvKiBhZGFwdGVkIHRvIHRoZSBwYXJ0aWN1bGFyIG5lZWRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyNpZm5kZWYgX19GVFNZTlRIX0hfXworI2RlZmluZSBfX0ZUU1lOVEhfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qIEVtYm9sZGVuIGEgZ2x5cGggYnkgYSBgcmVhc29uYWJsZScgdmFsdWUgKHdoaWNoIGlzIGhpZ2hseSBhIG1hdHRlciBvZiAqLworICAvKiB0YXN0ZSkuICBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgY29udmVuaWVuY2UgZnVuY3Rpb24sIHByb3ZpZGluZyAgKi8KKyAgLyogYSB3cmFwcGVyIGZvciBARlRfT3V0bGluZV9FbWJvbGRlbiBhbmQgQEZUX0JpdG1hcF9FbWJvbGRlbi4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGb3IgZW1ib2xkZW5lZCBvdXRsaW5lcyB0aGUgaGVpZ2h0LCB3aWR0aCwgYW5kIGFkdmFuY2UgbWV0cmljcyBhcmUgICAgKi8KKyAgLyogaW5jcmVhc2VkIGJ5IHRoZSBzdHJlbmd0aCBvZiB0aGUgZW1ib2xkZW5pbmcgLS0gdGhpcyBldmVuIGFmZmVjdHMgICAgICovCisgIC8qIG1vbm8td2lkdGggZm9udHMhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWW91IGNhbiBhbHNvIGNhbGwgQEZUX091dGxpbmVfR2V0X0NCb3ggdG8gZ2V0IHByZWNpc2UgdmFsdWVzLiAgICAgICAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX0dseXBoU2xvdF9FbWJvbGRlbiggRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKyAgLyogU2xhbnQgYW4gb3V0bGluZSBnbHlwaCB0byB0aGUgcmlnaHQgYnkgYWJvdXQgMTIgZGVncmVlcy4gKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfR2x5cGhTbG90X09ibGlxdWUoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVFNZTlRIX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnRzeXN0ZW0uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0c3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0c3lzdGVtLmgKQEAgLTAsMCArMSwzNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c3lzdGVtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSBkZWZpbml0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUU1lTVEVNX0hfXworI2RlZmluZSBfX0ZUU1lTVEVNX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBzeXN0ZW1faW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBTeXN0ZW0gSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBIb3cgRnJlZVR5cGUgbWFuYWdlcyBtZW1vcnkgYW5kIGkvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSAgICAgICAgICovCisgIC8qICAgbWFuYWdlbWVudCBhbmQgaS9vIGFjY2Vzcy4gIFlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAgICAgICAgICAgICAqLworICAvKiAgIGluZm9ybWF0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgbWFuYWdlciBvciB5b3Ugb3duICAgKi8KKyAgLyogICBpL28gc3RyZWFtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBNIEUgTSBPIFIgWSAgIE0gQSBOIEEgRyBFIE0gRSBOIFQgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX01lbW9yeQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBtZW1vcnkgbWFuYWdlciBvYmplY3QsIGRlZmluZWQgd2l0aCBhbgorICAgKiAgIEBGVF9NZW1vcnlSZWMgc3RydWN0dXJlLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfTWVtb3J5UmVjXyogIEZUX01lbW9yeTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9BbGxvY19GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIHVzZWQgdG8gYWxsb2NhdGUgYHNpemUnIGJ5dGVzIGZyb20gYG1lbW9yeScuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgbWVtb3J5IG1hbmFnZXIuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIHNpemUgaW4gYnl0ZXMgdG8gYWxsb2NhdGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQWRkcmVzcyBvZiBuZXcgbWVtb3J5IGJsb2NrLiAgMH5pbiBjYXNlIG9mIGZhaWx1cmUuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQqCisgICgqRlRfQWxsb2NfRnVuYykoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9GcmVlX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byByZWxlYXNlIGEgZ2l2ZW4gYmxvY2sgb2YgbWVtb3J5LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIG1lbW9yeSBtYW5hZ2VyLgorICAgKgorICAgKiAgIGJsb2NrIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IG1lbW9yeSBibG9jay4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKkZUX0ZyZWVfRnVuYykoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9SZWFsbG9jX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byByZS1hbGxvY2F0ZSBhIGdpdmVuIGJsb2NrIG9mIG1lbW9yeS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBtZW1vcnkgbWFuYWdlci4KKyAgICoKKyAgICogICBjdXJfc2l6ZSA6OgorICAgKiAgICAgVGhlIGJsb2NrJ3MgY3VycmVudCBzaXplIGluIGJ5dGVzLgorICAgKgorICAgKiAgIG5ld19zaXplIDo6CisgICAqICAgICBUaGUgYmxvY2sncyByZXF1ZXN0ZWQgbmV3IHNpemUuCisgICAqCisgICAqICAgYmxvY2sgOjoKKyAgICogICAgIFRoZSBibG9jaydzIGN1cnJlbnQgYWRkcmVzcy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBOZXcgYmxvY2sgYWRkcmVzcy4gIDB+aW4gY2FzZSBvZiBtZW1vcnkgc2hvcnRhZ2UuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEluIGNhc2Ugb2YgZXJyb3IsIHRoZSBvbGQgYmxvY2sgbXVzdCBzdGlsbCBiZSBhdmFpbGFibGUuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQqCisgICgqRlRfUmVhbGxvY19GdW5jKSggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgICBjdXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIG5ld19zaXplLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTWVtb3J5UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gbWVtb3J5IG1hbmFnZXIgdG8gRnJlZVR5cGV+Mi4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB1c2VyIDo6CisgICAqICAgICBBIGdlbmVyaWMgdHlwZWxlc3MgcG9pbnRlciBmb3IgdXNlciBkYXRhLgorICAgKgorICAgKiAgIGFsbG9jIDo6CisgICAqICAgICBBIHBvaW50ZXIgdHlwZSB0byBhbiBhbGxvY2F0aW9uIGZ1bmN0aW9uLgorICAgKgorICAgKiAgIGZyZWUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0eXBlIHRvIGFuIG1lbW9yeSBmcmVlaW5nIGZ1bmN0aW9uLgorICAgKgorICAgKiAgIHJlYWxsb2MgOjoKKyAgICogICAgIEEgcG9pbnRlciB0eXBlIHRvIGEgcmVhbGxvY2F0aW9uIGZ1bmN0aW9uLgorICAgKgorICAgKi8KKyAgc3RydWN0ICBGVF9NZW1vcnlSZWNfCisgIHsKKyAgICB2b2lkKiAgICAgICAgICAgIHVzZXI7CisgICAgRlRfQWxsb2NfRnVuYyAgICBhbGxvYzsKKyAgICBGVF9GcmVlX0Z1bmMgICAgIGZyZWU7CisgICAgRlRfUmVhbGxvY19GdW5jICByZWFsbG9jOworICB9OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgSSAvIE8gICBNIEEgTiBBIEcgRSBNIEUgTiBUICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfU3RyZWFtCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhbiBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBhbHNvOgorICAgKiAgIFNlZSBARlRfU3RyZWFtUmVjIGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmaWVsZHMgb2YgYSBnaXZlbgorICAgKiAgIHN0cmVhbSBvYmplY3QuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9TdHJlYW1SZWNfKiAgRlRfU3RyZWFtOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9TdHJlYW1EZXNjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHVuaW9uIHR5cGUgdXNlZCB0byBzdG9yZSBlaXRoZXIgYSBsb25nIG9yIGEgcG9pbnRlci4gIFRoaXMgaXMgdXNlZAorICAgKiAgIHRvIHN0b3JlIGEgZmlsZSBkZXNjcmlwdG9yIG9yIGEgYEZJTEUqJyBpbiBhbiBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqLworICB0eXBlZGVmIHVuaW9uICBGVF9TdHJlYW1EZXNjXworICB7CisgICAgbG9uZyAgIHZhbHVlOworICAgIHZvaWQqICBwb2ludGVyOworCisgIH0gRlRfU3RyZWFtRGVzYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9TdHJlYW1fSW9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIHVzZWQgdG8gc2VlayBhbmQgcmVhZCBkYXRhIGZyb20gYSBnaXZlbiBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugc3RyZWFtLgorICAgKgorICAgKiAgIG9mZnNldCA6OgorICAgKiAgICAgVGhlIG9mZnNldCBvZiByZWFkIGluIHN0cmVhbSAoYWx3YXlzIGZyb20gc3RhcnQpLgorICAgKgorICAgKiAgIGJ1ZmZlciA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlYWQgYnVmZmVyLgorICAgKgorICAgKiAgIGNvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgZWZmZWN0aXZlbHkgcmVhZCBieSB0aGUgc3RyZWFtLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCB0byBwZXJmb3JtIGEgc2VlayBvciBza2lwIG9wZXJhdGlvbgorICAgKiAgIHdpdGggYSBgY291bnQnIG9mfjAuICBBIG5vbi16ZXJvIHJldHVybiB2YWx1ZSB0aGVuIGluZGljYXRlcyBhbgorICAgKiAgIGVycm9yLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nCisgICgqRlRfU3RyZWFtX0lvRnVuYykoIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBjb3VudCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX1N0cmVhbV9DbG9zZUZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byBjbG9zZSBhIGdpdmVuIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgc3RyZWFtIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHN0cmVhbS4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKkZUX1N0cmVhbV9DbG9zZUZ1bmMpKCBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9TdHJlYW1SZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYW4gaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgYmFzZSA6OgorICAgKiAgICAgRm9yIG1lbW9yeS1iYXNlZCBzdHJlYW1zLCB0aGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzdHJlYW0KKyAgICogICAgIGJ5dGUgaW4gbWVtb3J5LiAgVGhpcyBmaWVsZCBzaG91bGQgYWx3YXlzIGJlIHNldCB0byBOVUxMIGZvcgorICAgKiAgICAgZGlzay1iYXNlZCBzdHJlYW1zLgorICAgKgorICAgKiAgIHNpemUgOjoKKyAgICogICAgIFRoZSBzdHJlYW0gc2l6ZSBpbiBieXRlcy4KKyAgICoKKyAgICogICAgIEluIGNhc2Ugb2YgY29tcHJlc3NlZCBzdHJlYW1zIHdoZXJlIHRoZSBzaXplIGlzIHVua25vd24gYmVmb3JlCisgICAqICAgICBhY3R1YWxseSBkb2luZyB0aGUgZGVjb21wcmVzc2lvbiwgdGhlIHZhbHVlIGlzIHNldCB0byAweDdGRkZGRkZGLiAKKyAgICogICAgIChOb3RlIHRoYXQgdGhpcyBzaXplIHZhbHVlIGNhbiBvY2N1ciBmb3Igbm9ybWFsIHN0cmVhbXMgYWxzbzsgaXQgaXMKKyAgICogICAgIHRodXMganVzdCBhIGhpbnQuKQorICAgKgorICAgKiAgIHBvcyA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIHRoZSBzdHJlYW0uCisgICAqCisgICAqICAgZGVzY3JpcHRvciA6OgorICAgKiAgICAgVGhpcyBmaWVsZCBpcyBhIHVuaW9uIHRoYXQgY2FuIGhvbGQgYW4gaW50ZWdlciBvciBhIHBvaW50ZXIuICBJdCBpcworICAgKiAgICAgdXNlZCBieSBzdHJlYW0gaW1wbGVtZW50YXRpb25zIHRvIHN0b3JlIGZpbGUgZGVzY3JpcHRvcnMgb3IgYEZJTEUqJworICAgKiAgICAgcG9pbnRlcnMuCisgICAqCisgICAqICAgcGF0aG5hbWUgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IEZyZWVUeXBlLiAgSG93ZXZlciwgaXQgaXMgb2Z0ZW4KKyAgICogICAgIHVzZWZ1bCBkdXJpbmcgZGVidWdnaW5nIHRvIHVzZSBpdCB0byBzdG9yZSB0aGUgc3RyZWFtJ3MgZmlsZW5hbWUKKyAgICogICAgICh3aGVyZSBhdmFpbGFibGUpLgorICAgKgorICAgKiAgIHJlYWQgOjoKKyAgICogICAgIFRoZSBzdHJlYW0ncyBpbnB1dCBmdW5jdGlvbi4KKyAgICoKKyAgICogICBjbG9zZSA6OgorICAgKiAgICAgVGhlIHN0cmVhbSdzIGNsb3NlIGZ1bmN0aW9uLgorICAgKgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIG1lbW9yeSBtYW5hZ2VyIHRvIHVzZSB0byBwcmVsb2FkIGZyYW1lcy4gIFRoaXMgaXMgc2V0CisgICAqICAgICBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlIGFuZCBzaG91bGRuJ3QgYmUgdG91Y2hlZCBieSBzdHJlYW0KKyAgICogICAgIGltcGxlbWVudGF0aW9ucy4KKyAgICoKKyAgICogICBjdXJzb3IgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgc2V0IGFuZCB1c2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUgd2hlbiBwYXJzaW5nCisgICAqICAgICBmcmFtZXMuCisgICAqCisgICAqICAgbGltaXQgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgc2V0IGFuZCB1c2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUgd2hlbiBwYXJzaW5nCisgICAqICAgICBmcmFtZXMuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfU3RyZWFtUmVjXworICB7CisgICAgdW5zaWduZWQgY2hhciogICAgICAgYmFzZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgICBzaXplOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgIHBvczsKKworICAgIEZUX1N0cmVhbURlc2MgICAgICAgIGRlc2NyaXB0b3I7CisgICAgRlRfU3RyZWFtRGVzYyAgICAgICAgcGF0aG5hbWU7CisgICAgRlRfU3RyZWFtX0lvRnVuYyAgICAgcmVhZDsKKyAgICBGVF9TdHJlYW1fQ2xvc2VGdW5jICBjbG9zZTsKKworICAgIEZUX01lbW9yeSAgICAgICAgICAgIG1lbW9yeTsKKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgICBjdXJzb3I7CisgICAgdW5zaWduZWQgY2hhciogICAgICAgbGltaXQ7CisKKyAgfSBGVF9TdHJlYW1SZWM7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUU1lTVEVNX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnR0cmlnb24uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0dHJpZ29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MjFiYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0dHJpZ29uLmgKQEAgLTAsMCArMSwzNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dHJpZ29uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUVFJJR09OX0hfXworI2RlZmluZSBfX0ZUVFJJR09OX0hfXworCisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBjb21wdXRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0FuZ2xlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHR5cGUgaXMgdXNlZCB0byBtb2RlbCBhbmdsZSB2YWx1ZXMgaW4gRnJlZVR5cGUuICBOb3RlIHRoYXQgdGhlCisgICAqICAgYW5nbGUgaXMgYSAxNi4xNiBmaXhlZC1wb2ludCB2YWx1ZSBleHByZXNzZWQgaW4gZGVncmVlcy4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgRlRfRml4ZWQgIEZUX0FuZ2xlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0FOR0xFX1BJCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgYW5nbGUgcGkgZXhwcmVzc2VkIGluIEBGVF9BbmdsZSB1bml0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FOR0xFX1BJICAoIDE4MEwgPDwgMTYgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0FOR0xFXzJQSQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGFuZ2xlIDIqcGkgZXhwcmVzc2VkIGluIEBGVF9BbmdsZSB1bml0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FOR0xFXzJQSSAgKCBGVF9BTkdMRV9QSSAqIDIgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0FOR0xFX1BJMgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGFuZ2xlIHBpLzIgZXhwcmVzc2VkIGluIEBGVF9BbmdsZSB1bml0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FOR0xFX1BJMiAgKCBGVF9BTkdMRV9QSSAvIDIgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0FOR0xFX1BJNAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGFuZ2xlIHBpLzQgZXhwcmVzc2VkIGluIEBGVF9BbmdsZSB1bml0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FOR0xFX1BJNCAgKCBGVF9BTkdMRV9QSSAvIDQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NpbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBzaW51cyBvZiBhIGdpdmVuIGFuZ2xlIGluIGZpeGVkLXBvaW50IGZvcm1hdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGFuZ2xlIDo6CisgICAqICAgICBUaGUgaW5wdXQgYW5nbGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIHNpbnVzIHZhbHVlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiB5b3UgbmVlZCBib3RoIHRoZSBzaW51cyBhbmQgY29zaW51cyBmb3IgYSBnaXZlbiBhbmdsZSwgdXNlIHRoZQorICAgKiAgIGZ1bmN0aW9uIEBGVF9WZWN0b3JfVW5pdC4KKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQorICBGVF9TaW4oIEZUX0FuZ2xlICBhbmdsZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0NvcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBjb3NpbnVzIG9mIGEgZ2l2ZW4gYW5nbGUgaW4gZml4ZWQtcG9pbnQgZm9ybWF0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgYW5nbGUgOjoKKyAgICogICAgIFRoZSBpbnB1dCBhbmdsZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgY29zaW51cyB2YWx1ZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSWYgeW91IG5lZWQgYm90aCB0aGUgc2ludXMgYW5kIGNvc2ludXMgZm9yIGEgZ2l2ZW4gYW5nbGUsIHVzZSB0aGUKKyAgICogICBmdW5jdGlvbiBARlRfVmVjdG9yX1VuaXQuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKKyAgRlRfQ29zKCBGVF9BbmdsZSAgYW5nbGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9UYW4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiB0aGUgdGFuZ2VudCBvZiBhIGdpdmVuIGFuZ2xlIGluIGZpeGVkLXBvaW50IGZvcm1hdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGFuZ2xlIDo6CisgICAqICAgICBUaGUgaW5wdXQgYW5nbGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIHRhbmdlbnQgdmFsdWUuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKKyAgRlRfVGFuKCBGVF9BbmdsZSAgYW5nbGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9BdGFuMgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBhcmMtdGFuZ2VudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gdmVjdG9yICh4LHkpIGluCisgICAqICAgdGhlIDJkIHBsYW5lLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgeCA6OgorICAgKiAgICAgVGhlIGhvcml6b250YWwgdmVjdG9yIGNvb3JkaW5hdGUuCisgICAqCisgICAqICAgeSA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIHZlY3RvciBjb29yZGluYXRlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBhcmMtdGFuZ2VudCB2YWx1ZSAoaS5lLiBhbmdsZSkuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0FuZ2xlICkKKyAgRlRfQXRhbjIoIEZUX0ZpeGVkICB4LAorICAgICAgICAgICAgRlRfRml4ZWQgIHkgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9BbmdsZV9EaWZmCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gYW5nbGVzLiAgVGhlIHJlc3VsdCBpcyBhbHdheXMKKyAgICogICBjb25zdHJhaW5lZCB0byB0aGUgXS1QSS4uUEldIGludGVydmFsLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgYW5nbGUxIDo6CisgICAqICAgICBGaXJzdCBhbmdsZS4KKyAgICoKKyAgICogICBhbmdsZTIgOjoKKyAgICogICAgIFNlY29uZCBhbmdsZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBDb25zdHJhaW5lZCB2YWx1ZSBvZiBgdmFsdWUyLXZhbHVlMScuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0FuZ2xlICkKKyAgRlRfQW5nbGVfRGlmZiggRlRfQW5nbGUgIGFuZ2xlMSwKKyAgICAgICAgICAgICAgICAgRlRfQW5nbGUgIGFuZ2xlMiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1ZlY3Rvcl9Vbml0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIHVuaXQgdmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBhbmdsZS4gIEFmdGVyIHRoZQorICAgKiAgIGNhbGwsIHRoZSB2YWx1ZSBvZiBgdmVjLngnIHdpbGwgYmUgYHNpbihhbmdsZSknLCBhbmQgdGhlIHZhbHVlIG9mCisgICAqICAgYHZlYy55JyB3aWxsIGJlIGBjb3MoYW5nbGUpJy4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0byByZXRyaWV2ZSBib3RoIHRoZSBzaW51cyBhbmQgY29zaW51cyBvZiBhCisgICAqICAgZ2l2ZW4gYW5nbGUgcXVpY2tseS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICB2ZWMgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRhcmdldCB2ZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhbmdsZSA6OgorICAgKiAgICAgVGhlIGlucHV0IGFuZ2xlLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfVmVjdG9yX1VuaXQoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIGFuZ2xlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfVmVjdG9yX1JvdGF0ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUm90YXRlIGEgdmVjdG9yIGJ5IGEgZ2l2ZW4gYW5nbGUuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICB2ZWMgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRhcmdldCB2ZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhbmdsZSA6OgorICAgKiAgICAgVGhlIGlucHV0IGFuZ2xlLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfVmVjdG9yX1JvdGF0ZSggRlRfVmVjdG9yKiAgdmVjLAorICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICBhbmdsZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1ZlY3Rvcl9MZW5ndGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gdmVjdG9yLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgdmVjIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0YXJnZXQgdmVjdG9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSB2ZWN0b3IgbGVuZ3RoLCBleHByZXNzZWQgaW4gdGhlIHNhbWUgdW5pdHMgdGhhdCB0aGUgb3JpZ2luYWwKKyAgICogICB2ZWN0b3IgY29vcmRpbmF0ZXMuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKKyAgRlRfVmVjdG9yX0xlbmd0aCggRlRfVmVjdG9yKiAgdmVjICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfVmVjdG9yX1BvbGFyaXplCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlIGJvdGggdGhlIGxlbmd0aCBhbmQgYW5nbGUgb2YgYSBnaXZlbiB2ZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICB2ZWMgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHNvdXJjZSB2ZWN0b3IuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgbGVuZ3RoIDo6CisgICAqICAgICBUaGUgdmVjdG9yIGxlbmd0aC4KKyAgICoKKyAgICogICBhbmdsZSA6OgorICAgKiAgICAgVGhlIHZlY3RvciBhbmdsZS4KKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggdm9pZCApCisgIEZUX1ZlY3Rvcl9Qb2xhcml6ZSggRlRfVmVjdG9yKiAgdmVjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlIHZlY3RvciBjb29yZGluYXRlcyBmcm9tIGEgbGVuZ3RoIGFuZCBhbmdsZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICB2ZWMgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHNvdXJjZSB2ZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsZW5ndGggOjoKKyAgICogICAgIFRoZSB2ZWN0b3IgbGVuZ3RoLgorICAgKgorICAgKiAgIGFuZ2xlIDo6CisgICAqICAgICBUaGUgdmVjdG9yIGFuZ2xlLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIGFuZ2xlICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUVFJJR09OX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnR0dGRydi5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvZnR0dGRydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjA0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHR0ZHJ2LmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dHRkcnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFRURFJWX0hfXworI2RlZmluZSBfX0ZUVFREUlZfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB0dF9kcml2ZXIKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIENvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgV2hpbGUgRnJlZVR5cGUncyBUcnVlVHlwZSBkcml2ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieQorICAgKiAgIGl0c2VsZiwgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3VyIHdpdGggQEZUX1Byb3BlcnR5X1NldAorICAgKiAgIGFuZCBARlRfUHJvcGVydHlfR2V0LiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXMKKyAgICogICB0b2dldGhlciB3aXRoIHRoZSBuZWNlc3NhcnkgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzLgorICAgKgorICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIncyBtb2R1bGUgbmFtZSBpcyBgdHJ1ZXR5cGUnLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgaW50ZXJwcmV0ZXItdmVyc2lvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ3VycmVudGx5LCB0d28gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZQorICAgKiAgIGludGVycHJldGVyIHdpdGggYW5kIHdpdGhvdXQgc3VicGl4ZWwgaGludGluZyBzdXBwb3J0LAorICAgKiAgIHJlc3BlY3RpdmVseS4gIFRoZSBkZWZhdWx0IGlzIHN1YnBpeGVsIHN1cHBvcnQgaWYKKyAgICogICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCwgYW5kIG5vIHN1YnBpeGVsCisgICAqICAgc3VwcG9ydCBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS4KKyAgICoKKyAgICogICBJZiBzdWJwaXhlbCBoaW50aW5nIGlzIG9uLCBtYW55IFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBiZWhhdmUKKyAgICogICBkaWZmZXJlbnRseSBjb21wYXJlZCB0byBCL1cgb3IgZ3JheXNjYWxlIHJlbmRlcmluZyAoZXhjZXB0IGlmIGBuYXRpdmUKKyAgICogICBDbGVhclR5cGUnIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb250KS4gIFRoZSBtYWluIGlkZWEgaXMgdG8gcmVuZGVyIGF0IGEKKyAgICogICBtdWNoIGluY3JlYXNlZCBob3Jpem9udGFsIHJlc29sdXRpb24sIHRoZW4gc2FtcGxpbmcgZG93biB0aGUgY3JlYXRlZAorICAgKiAgIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzIGFyZSBub3QKKyAgICogICBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieSBhcHBseWluZworICAgKiAgIChoYXJkY29kZWQpIGZvbnQtc3BlY2lmaWMgdHdlYWtzLgorICAgKgorICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKKyAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKKyAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLgorICAgKgorICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWN0aXZhdGUgc3VicGl4ZWwKKyAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9GYWNlICAgICBmYWNlOworICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHJ1ZXR5cGUiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcnByZXRlcl92ZXJzaW9uICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KKyAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KKyAgICoKKyAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgorICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKKyAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KKyAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgorICAgKgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKKyAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQorICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzCisgICAqICAgICBjYW4gYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCisgICAqICAgICBXaW5kb3dzfjcpLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCisgICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCisgICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCisgICAqICAgZmlsdGVyaW5nLgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uCisgICAqICAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HLCBzZWxlY3RpbmcgdmVyc2lvbn4zOCBjYXVzZXMgYW4KKyAgICogICBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgZXJyb3IuCisgICAqCisgICAqICAgRGVwZW5kaW5nIG9uIHRoZSBncmFwaGljcyBmcmFtZXdvcmssIE1pY3Jvc29mdCB1c2VzIGRpZmZlcmVudAorICAgKiAgIGJ5dGVjb2RlIGFuZCByZW5kZXJpbmcgZW5naW5lcy4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJzaW9uCisgICAqICAgbnVtYmVycyByZXR1cm5lZCBieSBhIGNhbGwgdG8gdGhlIGBHRVRJTkZPJyBieXRlY29kZSBpbnN0cnVjdGlvbiBhcmUKKyAgICogICBtb3JlIGNvbnZvbHV0ZWQgdGhhbiBkZXNpcmVkLgorICAgKgorICAgKiAgIEhlcmUgYXJlIHR3byB0YWJsZXMgdGhhdCB0cnkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwb3NzaWJsZQorICAgKiAgIHZhbHVlcyBmb3IgdGhlIE1TIHJhc3Rlcml6ZXIgZW5naW5lLCB0b2dldGhlciB3aXRoIHRoZSBhZGRpdGlvbmFsCisgICAqICAgZmVhdHVyZXMgaW50cm9kdWNlZCBieSBpdC4KKyAgICoKKyAgICogICB7CisgICAqICAgICBHRVRJTkZPIGZyYW1ld29yayAgICAgICAgICAgICAgIHZlcnNpb24gZmVhdHVyZQorICAgKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICAgIDMgICBHREkgKFdpbiAzLjEpLCAgICAgICAgICAgIHYxLjAgIDE2LWJpdCwgZmlyc3QgdmVyc2lvbgorICAgKiAgICAgICAgICAgICBUcnVlSW1hZ2UKKyAgICogICAgICAgIDMzICAgR0RJIChXaW4gTlQgMy4xKSwgICAgICAgICB2MS41ICAzMi1iaXQKKyAgICogICAgICAgICAgICAgSFAgTGFzZXJqZXQKKyAgICogICAgICAgIDM0ICAgR0RJIChXaW4gOTUpICAgICAgICAgICAgICB2MS42ICBmb250IHNtb290aGluZywKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU0NBTlRZUEUgb3Bjb2RlCisgICAqICAgICAgICAzNSAgIEdESSAoV2luIDk4LzIwMDApICAgICAgICAgdjEuNyAgKFVOKVNDQUxFRF9DT01QT05FTlRfT0ZGU0VUCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMKKyAgICogICAgICAgIDM2ICAgTUdESSAoV2luIENFIDIpICAgICAgICAgICB2MS42KyBjbGFzc2ljIENsZWFyVHlwZQorICAgKiAgICAgICAgMzcgICBHREkgKFhQIGFuZCBsYXRlciksICAgICAgIHYxLjggIENsZWFyVHlwZQorICAgKiAgICAgICAgICAgICBHREkrIG9sZCAoYmVmb3JlIFZpc3RhKQorICAgKiAgICAgICAgMzggICBHREkrIG9sZCAoVmlzdGEsIFdpbiA3KSwgIHYxLjkgIHN1YnBpeGVsIENsZWFyVHlwZSwKKyAgICogICAgICAgICAgICAgV1BGICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZLWRpcmVjdGlvbiBDbGVhclR5cGUsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBlcnJvciBjaGVja2luZworICAgKiAgICAgICAgMzkgICBEV3JpdGUgKGJlZm9yZSBXaW4gOCkgICAgIHYyLjAgIHN1YnBpeGVsIENsZWFyVHlwZSBmbGFncworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gR0VUSU5GTyBvcGNvZGUsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnIGZpeGVzCisgICAqICAgICAgICA0MCAgIEdESSsgKGFmdGVyIFdpbiA3KSwgICAgICAgdjIuMSAgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGZsYWcKKyAgICogICAgICAgICAgICAgRFdyaXRlIChXaW4gOCkgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXkgQ2xlYXJUeXBlCisgICAqICAgfQorICAgKgorICAgKiAgIFRoZSBgdmVyc2lvbicgZmllbGQgZ2l2ZXMgYSByb3VnaCBvcmllbnRhdGlvbiBvbmx5LCBzaW5jZSBzb21lCisgICAqICAgYXBwbGljYXRpb25zIHByb3ZpZGVkIGNlcnRhaW4gZmVhdHVyZXMgbXVjaCBlYXJsaWVyIChhcyBhbiBleGFtcGxlLAorICAgKiAgIE1pY3Jvc29mdCBSZWFkZXIgdXNlZCBzdWJwaXhlbCBhbmQgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGFscmVhZHkgaW4KKyAgICogICBXaW5kb3dzIDIwMDApLiAgU2ltaWxhcmx5LCB1cGRhdGVzIHRvIGEgZ2l2ZW4gZnJhbWV3b3JrIG1pZ2h0IGluY2x1ZGUKKyAgICogICBpbXByb3ZlZCBoaW50aW5nIHN1cHBvcnQuCisgICAqCisgICAqICAgeworICAgKiAgICAgIHZlcnNpb24gICBzYW1wbGluZyAgICAgICAgICByZW5kZXJpbmcgICAgICAgIGNvbW1lbnQKKyAgICogICAgICAgICAgICAgICB4ICAgICAgICB5ICAgICAgIHggICAgICAgICAgIHkKKyAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqICAgICAgIHYxLjAgICBub3JtYWwgIG5vcm1hbCAgQi9XICAgICAgICAgICBCL1cgICAgYmktbGV2ZWwKKyAgICogICAgICAgdjEuNiAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBncmF5c2NhbGUKKyAgICogICAgICAgdjEuOCAgIGhpZ2ggICAgbm9ybWFsICBjb2xvci1maWx0ZXIgIEIvVyAgICAoR0RJKSBDbGVhclR5cGUKKyAgICogICAgICAgdjEuOSAgIGhpZ2ggICAgaGlnaCAgICBjb2xvci1maWx0ZXIgIGdyYXkgICBDb2xvciBDbGVhclR5cGUKKyAgICogICAgICAgdjIuMSAgIGhpZ2ggICAgbm9ybWFsICBncmF5ICAgICAgICAgIEIvVyAgICBHcmF5IENsZWFyVHlwZQorICAgKiAgICAgICB2Mi4xICAgaGlnaCAgICBoaWdoICAgIGdyYXkgICAgICAgICAgZ3JheSAgIEdyYXkgQ2xlYXJUeXBlCisgICAqICAgfQorICAgKgorICAgKiAgIENvbG9yIGFuZCBHcmF5IENsZWFyVHlwZSBhcmUgdGhlIHR3byBhdmFpbGFibGUgdmFyaWFudHMgb2YKKyAgICogICBgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlJywgbWVhbmluZyBncmF5c2NhbGUgcmFzdGVyaXphdGlvbiBhbG9uZyB0aGUKKyAgICogICBZLWRpcmVjdGlvbjsgdGhlIG5hbWUgdXNlZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcworICAgKiAgIGZlYXR1cmUgaXMgYHN5bW1ldHJpYyBzbW9vdGhpbmcnLiAgYENsYXNzaWMgQ2xlYXJUeXBlJyBpcyB0aGUKKyAgICogICBvcmlnaW5hbCBhbGdvcml0aG0gdXNlZCBiZWZvcmUgaW50cm9kdWNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIGluCisgICAqICAgV2luflhQLiAgQW5vdGhlciBuYW1lIGZvciB2MS42J3MgZ3JheXNjYWxlIHJlbmRlcmluZyBpcyBgZm9udAorICAgKiAgIHNtb290aGluZycsIGFuZCBgQ29sb3IgQ2xlYXJUeXBlJyBpcyBzb21ldGltZXMgYWxzbyBjYWxsZWQgYERXcml0ZQorICAgKiAgIENsZWFyVHlwZScuICBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdG9kYXkncyBDb2xvciBDbGVhclR5cGUgYW5kIHRoZQorICAgKiAgIGVhcmxpZXIgQ2xlYXJUeXBlIHZhcmlhbnQgd2l0aCBCL1cgcmVuZGVyaW5nIGFsb25nIHRoZSB2ZXJ0aWNhbCBheGlzLAorICAgKiAgIHRoZSBsYXR0ZXIgaXMgc29tZXRpbWVzIGNhbGxlZCBgR0RJIENsZWFyVHlwZScuCisgICAqCisgICAqICAgYE5vcm1hbCcgYW5kIGBoaWdoJyBzYW1wbGluZyBkZXNjcmliZSB0aGUgKHZpcnR1YWwpIHJlc29sdXRpb24gdG8KKyAgICogICBhY2Nlc3MgdGhlIHJhc3Rlcml6ZWQgb3V0bGluZSBhZnRlciB0aGUgaGludGluZyBwcm9jZXNzLiAgYE5vcm1hbCcKKyAgICogICBtZWFucyAxIHNhbXBsZSBwZXIgZ3JpZCBsaW5lIChpLmUuLCBCL1cpLiAgSW4gdGhlIGN1cnJlbnQgTWljcm9zb2Z0CisgICAqICAgaW1wbGVtZW50YXRpb24sIGBoaWdoJyBtZWFucyBhbiBleHRyYSB2aXJ0dWFsIHJlc29sdXRpb24gb2YgMTZ4MTYgKG9yCisgICAqICAgMTZ4MSkgZ3JpZCBsaW5lcyBwZXIgcGl4ZWwgZm9yIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBsaWtlIGBNSVJQJy4KKyAgICogICBBZnRlciBoaW50aW5nLCB0aGVzZSAxNiBncmlkIGxpbmVzIGFyZSBtYXBwZWQgdG8gNng1IChvciA2eDEpIGdyaWQKKyAgICogICBsaW5lcyBmb3IgY29sb3IgZmlsdGVyaW5nIGlmIENvbG9yIENsZWFyVHlwZSBpcyBhY3RpdmF0ZWQuCisgICAqCisgICAqICAgTm90ZSB0aGF0IGBHcmF5IENsZWFyVHlwZScgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdjEuNidzCisgICAqICAgZ3JheXNjYWxlIHJlbmRlcmluZy4gIEhvd2V2ZXIsIHRoZSBHRVRJTkZPIGluc3RydWN0aW9uIGhhbmRsZXMgaXQKKyAgICogICBkaWZmZXJlbnRseTogdjEuNiByZXR1cm5zIGJpdH4xMiAoaGludGluZyBmb3IgZ3JheXNjYWxlKSwgd2hpbGUgdjIuMQorICAgKiAgIHJldHVybnMgYml0c34xMyAoaGludGluZyBmb3IgQ2xlYXJUeXBlKSwgMTggKHN5bW1ldHJpY2FsIHNtb290aGluZyksCisgICAqICAgYW5kfjE5IChHcmF5IENsZWFyVHlwZSkuICBBbHNvLCB0aGlzIG1vZGUgcmVzcGVjdHMgYml0cyAyIGFuZH4zIGZvcgorICAgKiAgIHRoZSB2ZXJzaW9ufjEgZ2FzcCB0YWJsZSBleGNsdXNpdmVseSAobGlrZSBDb2xvciBDbGVhclR5cGUpLCB3aGlsZQorICAgKiAgIHYxLjYgb25seSByZXNwZWN0cyB0aGUgdmFsdWVzIG9mIHZlcnNpb25+MCAoYml0cyAwIGFuZH4xKS4KKyAgICoKKyAgICogICBGcmVlVHlwZSBkb2Vzbid0IHByb3ZpZGUgYWxsIGNhcGFiaWxpdGllcyBvZiB0aGUgbW9zdCByZWNlbnQKKyAgICogICBDbGVhclR5cGUgaW5jYXJuYXRpb24sIHRodXMgd2UgaWRlbnRpZnkgb3VyIHN1YnBpeGVsIHN1cHBvcnQgYXMKKyAgICogICB2ZXJzaW9ufjM4LgorICAgKgorICAgKi8KKyNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSAgMzUKKyNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCAgMzgKKworIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUVFREUlZfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHR5cGVzLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2YTFiZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0dHlwZXMuaApAQCAtMCwwICsxLDYwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnR0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHNpbXBsZSB0eXBlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRUWVBFU19IX18KKyNkZWZpbmUgX19GVFRZUEVTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisjaW5jbHVkZSBGVF9TWVNURU1fSAorI2luY2x1ZGUgRlRfSU1BR0VfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCYXNpYyBEYXRhIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYmFzaWMgZGF0YSB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGJhc2ljIGRhdGEgdHlwZXMgZGVmaW5lZCBieSBGcmVlVHlwZX4yLCAgKi8KKyAgLyogICAgcmFuZ2luZyBmcm9tIHNpbXBsZSBzY2FsYXIgdHlwZXMgdG8gYml0bWFwIGRlc2NyaXB0b3JzLiAgTW9yZSAgICAgICovCisgIC8qICAgIGZvbnQtc3BlY2lmaWMgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VJbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ludDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VSW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Mb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUHRyRGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9UYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Qb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VRldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRjJEb3QxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VuaXRWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GMjZEb3Q2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NQUtFX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZW5lcmljX0ZpbmFsaXplciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QaXhlbF9Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUGFsZXR0ZV9Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JTUFHRV9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIG9mIHVuc2lnbmVkIGNoYXIsIHVzZWQgZm9yIHNpbXBsZSBib29sZWFucy4gIEFzIHVzdWFsLCAgICovCisgIC8qICAgIHZhbHVlcyAxIGFuZH4wIHJlcHJlc2VudCB0cnVlIGFuZCBmYWxzZSwgcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBGVF9Cb29sOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzaWduZWQgMTYtYml0IGludGVnZXIgdXNlZCB0byBzdG9yZSBhIGRpc3RhbmNlIGluIG9yaWdpbmFsIGZvbnQgICovCisgIC8qICAgIHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzaWduZWQgc2hvcnQgIEZUX0ZXb3JkOyAgIC8qIGRpc3RhbmNlIGluIEZVbml0cyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVUZXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgdXNlZCB0byBzdG9yZSBhIGRpc3RhbmNlIGluIG9yaWdpbmFsICAgICovCisgIC8qICAgIGZvbnQgdW5pdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVUZXb3JkOyAgLyogdW5zaWduZWQgZGlzdGFuY2UgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBfc2lnbmVkXyBjaGFyIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzaWduZWQgY2hhciAgRlRfQ2hhcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBfdW5zaWduZWRfIGNoYXIgdHlwZS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBGVF9CeXRlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciBjb25zdGFudCBtZW1vcnkgYXJlYXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGNvbnN0IEZUX0J5dGUqICBGVF9CeXRlczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgMzItYml0IHRhZ3MgKGFzIHVzZWQgaW4gdGhlIFNGTlQgZm9ybWF0KS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9VSW50MzIgIEZUX1RhZzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBjaGFyIHR5cGUsIHVzdWFsbHkgdXNlZCBmb3Igc3RyaW5ncy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBjaGFyICBGVF9TdHJpbmc7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIHNpZ25lZCBzaG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIHNob3J0ICBGVF9TaG9ydDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgdW5zaWduZWQgc2hvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVVNob3J0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0eXBlZGVmIGZvciB0aGUgaW50IHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHNpZ25lZCBpbnQgIEZUX0ludDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1VJbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdHlwZWRlZiBmb3IgdGhlIHVuc2lnbmVkIGludCB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgIEZUX1VJbnQ7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Mb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIHNpZ25lZCBsb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIGxvbmcgIEZUX0xvbmc7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9VTG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGVkZWYgZm9yIHVuc2lnbmVkIGxvbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUxvbmc7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GMkRvdDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpZ25lZCAyLjE0IGZpeGVkLXBvaW50IHR5cGUgdXNlZCBmb3IgdW5pdCB2ZWN0b3JzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIHNob3J0ICBGVF9GMkRvdDE0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRjI2RG90NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzaWduZWQgMjYuNiBmaXhlZC1wb2ludCB0eXBlIHVzZWQgZm9yIHZlY3RvcmlhbCBwaXhlbCAgICAgICAgICAgICovCisgIC8qICAgIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzaWduZWQgbG9uZyAgRlRfRjI2RG90NjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHN0b3JlIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlcywgbGlrZSBzY2FsaW5nICAqLworICAvKiAgICB2YWx1ZXMgb3IgbWF0cml4IGNvZWZmaWNpZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2lnbmVkIGxvbmcgIEZUX0ZpeGVkOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIEZyZWVUeXBlIGVycm9yIGNvZGUgdHlwZS4gIEEgdmFsdWUgb2Z+MCBpcyBhbHdheXMgaW50ZXJwcmV0ZWQgICovCisgIC8qICAgIGFzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBpbnQgIEZUX0Vycm9yOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzaW1wbGUgdHlwZWRlZiBmb3IgYSB0eXBlbGVzcyBwb2ludGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQqICBGVF9Qb2ludGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBBTlNJfkMgYHNpemVfdCcgdHlwZSwgaS5lLiwgdGhlIGxhcmdlc3QgICovCisgIC8qICAgIF91bnNpZ25lZF8gaW50ZWdlciB0eXBlIHVzZWQgdG8gZXhwcmVzcyBhIGZpbGUgc2l6ZSBvciBwb3NpdGlvbiwgICAqLworICAvKiAgICBvciBhIG1lbW9yeSBibG9jayBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc2l6ZV90ICBGVF9PZmZzZXQ7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QdHJEaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEFOU0l+QyBgcHRyZGlmZl90JyB0eXBlLCBpLmUuLCB0aGUgICAgICAgKi8KKyAgLyogICAgbGFyZ2VzdCBfc2lnbmVkXyBpbnRlZ2VyIHR5cGUgdXNlZCB0byBleHByZXNzIHRoZSBkaXN0YW5jZSAgICAgICAgICovCisgIC8qICAgIGJldHdlZW4gdHdvIHBvaW50ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBmdF9wdHJkaWZmX3QgIEZUX1B0ckRpc3Q7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Vbml0VmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBhIDJEIHZlY3RvciB1bml0IHZlY3Rvci4gIFVzZXMgICAgKi8KKyAgLyogICAgRlRfRjJEb3QxNCB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeCA6OiBIb3Jpem9udGFsIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5IDo6IFZlcnRpY2FsIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9Vbml0VmVjdG9yXworICB7CisgICAgRlRfRjJEb3QxNCAgeDsKKyAgICBGVF9GMkRvdDE0ICB5OworCisgIH0gRlRfVW5pdFZlY3RvcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01hdHJpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGEgMngyIG1hdHJpeC4gIENvZWZmaWNpZW50cyBhcmUgICAqLworICAvKiAgICBpbiAxNi4xNiBmaXhlZC1wb2ludCBmb3JtYXQuICBUaGUgY29tcHV0YXRpb24gcGVyZm9ybWVkIGlzOiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICB4JyA9IHgqeHggKyB5Knh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgeScgPSB4Knl4ICsgeSp5eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHh4IDo6IE1hdHJpeCBjb2VmZmljaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeHkgOjogTWF0cml4IGNvZWZmaWNpZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5eCA6OiBNYXRyaXggY29lZmZpY2llbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHl5IDo6IE1hdHJpeCBjb2VmZmljaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX01hdHJpeF8KKyAgeworICAgIEZUX0ZpeGVkICB4eCwgeHk7CisgICAgRlRfRml4ZWQgIHl4LCB5eTsKKworICB9IEZUX01hdHJpeDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJlYWQtb25seSBiaW5hcnkgZGF0YSByZXByZXNlbnRlZCBhcyBhIHBvaW50ZXIgYW5kIGEgbGVuZ3RoLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvaW50ZXIgOjogVGhlIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGVuZ3RoICA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfRGF0YV8KKyAgeworICAgIGNvbnN0IEZUX0J5dGUqICBwb2ludGVyOworICAgIEZUX0ludCAgICAgICAgICBsZW5ndGg7CisKKyAgfSBGVF9EYXRhOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2VuZXJpY19GaW5hbGl6ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzY3JpYmUgYSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgdGhlIGBjbGllbnQnIGRhdGEgb2YgYW55ICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIG9iamVjdC4gIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEBGVF9HZW5lcmljIHR5cGUgZm9yICAqLworICAvKiAgICBkZXRhaWxzIG9mIHVzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYWRkcmVzcyBvZiB0aGUgRnJlZVR5cGUgb2JqZWN0IHRoYXQgaXMgdW5kZXIgZmluYWxpemF0aW9uLiAgICAgKi8KKyAgLyogICAgSXRzIGNsaWVudCBkYXRhIGlzIGFjY2Vzc2VkIHRocm91Z2ggaXRzIGBnZW5lcmljJyBmaWVsZC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQgICgqRlRfR2VuZXJpY19GaW5hbGl6ZXIpKHZvaWQqICBvYmplY3QpOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2VuZXJpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ2xpZW50IGFwcGxpY2F0aW9ucyBvZnRlbiBuZWVkIHRvIGFzc29jaWF0ZSB0aGVpciBvd24gZGF0YSB0byBhICAgICovCisgIC8qICAgIHZhcmlldHkgb2YgRnJlZVR5cGUgY29yZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIGEgdGV4dCBsYXlvdXQgQVBJICAqLworICAvKiAgICBtaWdodCB3YW50IHRvIGFzc29jaWF0ZSBhIGdseXBoIGNhY2hlIHRvIGEgZ2l2ZW4gc2l6ZSBvYmplY3QuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNvbWUgRnJlZVR5cGUgb2JqZWN0IGNvbnRhaW5zIGEgYGdlbmVyaWMnIGZpZWxkLCBvZiB0eXBlICAgICAgICAgICAqLworICAvKiAgICBGVF9HZW5lcmljLCB3aGljaCB1c2FnZSBpcyBsZWZ0IHRvIGNsaWVudCBhcHBsaWNhdGlvbnMgYW5kIGZvbnQgICAgKi8KKyAgLyogICAgc2VydmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhIHBvaW50ZXIgdG8gY2xpZW50LXNwZWNpZmljIGRhdGEsIGFzIHdlbGwgKi8KKyAgLyogICAgYXMgdGhlIGFkZHJlc3Mgb2YgYSBgZmluYWxpemVyJyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgYnkgICovCisgIC8qICAgIEZyZWVUeXBlIHdoZW4gdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQgKGZvciBleGFtcGxlLCB0aGUgcHJldmlvdXMgICAqLworICAvKiAgICBjbGllbnQgZXhhbXBsZSB3b3VsZCBwdXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGdseXBoIGNhY2hlIGRlc3RydWN0b3IgKi8KKyAgLyogICAgaW4gdGhlIGBmaW5hbGl6ZXInIGZpZWxkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGF0YSAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0byBhbnkgY2xpZW50LXNwZWNpZmllZCBkYXRhLiBUaGlzICovCisgIC8qICAgICAgICAgICAgICAgICBmaWVsZCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgdGhlIEZyZWVUeXBlIGxpYnJhcnkuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmluYWxpemVyIDo6IEEgcG9pbnRlciB0byBhIGBnZW5lcmljIGZpbmFsaXplcicgZnVuY3Rpb24sIHdoaWNoICAgICovCisgIC8qICAgICAgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLiAgSWYgdGhpcyAqLworICAvKiAgICAgICAgICAgICAgICAgZmllbGQgaXMgc2V0IHRvIE5VTEwsIG5vIGNvZGUgd2lsbCBiZSBjYWxsZWQuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9HZW5lcmljXworICB7CisgICAgdm9pZCogICAgICAgICAgICAgICAgIGRhdGE7CisgICAgRlRfR2VuZXJpY19GaW5hbGl6ZXIgIGZpbmFsaXplcjsKKworICB9IEZUX0dlbmVyaWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NQUtFX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgdGhhdCBhcmUgdXNlZCB0byBsYWJlbCAgICAgICAgKi8KKyAgLyogICAgVHJ1ZVR5cGUgdGFibGVzIGludG8gYW4gdW5zaWduZWQgbG9uZywgdG8gYmUgdXNlZCB3aXRoaW4gRnJlZVR5cGUuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHByb2R1Y2VkIHZhbHVlcyAqbXVzdCogYmUgMzItYml0IGludGVnZXJzLiAgRG9uJ3QgcmVkZWZpbmUgICAgICovCisgIC8qICAgIHRoaXMgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfTUFLRV9UQUcoIF94MSwgX3gyLCBfeDMsIF94NCApIFwKKyAgICAgICAgICAoRlRfVGFnKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoICggKEZUX1VMb25nKV94MSA8PCAyNCApIHwgICAgIFwKKyAgICAgICAgICAgICggKEZUX1VMb25nKV94MiA8PCAxNiApIHwgICAgIFwKKyAgICAgICAgICAgICggKEZUX1VMb25nKV94MyA8PCAgOCApIHwgICAgIFwKKyAgICAgICAgICAgICAgKEZUX1VMb25nKV94NCAgICAgICAgICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBMIEkgUyBUICAgTSBBIE4gQSBHIEUgTSBFIE4gVCAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlzdF9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3ROb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBNYW55IGVsZW1lbnRzIGFuZCBvYmplY3RzIGluIEZyZWVUeXBlIGFyZSBsaXN0ZWQgdGhyb3VnaCBhbiAgICAgICAqLworICAvKiAgICAgQEZUX0xpc3QgcmVjb3JkIChzZWUgQEZUX0xpc3RSZWMpLiAgQXMgaXRzIG5hbWUgc3VnZ2VzdHMsIGFuICAgICAgKi8KKyAgLyogICAgIEZUX0xpc3ROb2RlIGlzIGEgaGFuZGxlIHRvIGEgc2luZ2xlIGxpc3QgZWxlbWVudC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9MaXN0Tm9kZVJlY18qICBGVF9MaXN0Tm9kZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgbGlzdCByZWNvcmQgKHNlZSBARlRfTGlzdFJlYykuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfTGlzdFJlY18qICBGVF9MaXN0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTGlzdE5vZGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGEgc2luZ2xlIGxpc3QgZWxlbWVudC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHJldiA6OiBUaGUgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUgbGlzdC4gIE5VTEwgaWYgZmlyc3QuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuZXh0IDo6IFRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIGxpc3QuICBOVUxMIGlmIGxhc3QuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRhdGEgOjogQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBsaXN0ZWQgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0xpc3ROb2RlUmVjXworICB7CisgICAgRlRfTGlzdE5vZGUgIHByZXY7CisgICAgRlRfTGlzdE5vZGUgIG5leHQ7CisgICAgdm9pZCogICAgICAgIGRhdGE7CisKKyAgfSBGVF9MaXN0Tm9kZVJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpc3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gaG9sZCBhIHNpbXBsZSBkb3VibHktbGlua2VkIGxpc3QuICBUaGVzZSBhcmUgICAqLworICAvKiAgICB1c2VkIGluIG1hbnkgcGFydHMgb2YgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWFkIDo6IFRoZSBoZWFkIChmaXJzdCBlbGVtZW50KSBvZiBkb3VibHktbGlua2VkIGxpc3QuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRhaWwgOjogVGhlIHRhaWwgKGxhc3QgZWxlbWVudCkgb2YgZG91Ymx5LWxpbmtlZCBsaXN0LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0xpc3RSZWNfCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgaGVhZDsKKyAgICBGVF9MaXN0Tm9kZSAgdGFpbDsKKworICB9IEZUX0xpc3RSZWM7CisKKyAgLyogKi8KKworCisjZGVmaW5lIEZUX0lTX0VNUFRZKCBsaXN0ICkgICggKGxpc3QpLmhlYWQgPT0gMCApCisjZGVmaW5lIEZUX0JPT0woIHggKSAgKCAoRlRfQm9vbCkoIHggKSApCisKKyAgLyogY29uY2F0ZW5hdGUgQyB0b2tlbnMgKi8KKyNkZWZpbmUgRlRfRVJSX1hDQVQoIHgsIHkgKSAgeCAjIyB5CisjZGVmaW5lIEZUX0VSUl9DQVQoIHgsIHkgKSAgIEZUX0VSUl9YQ0FUKCB4LCB5ICkKKworICAvKiBzZWUgYGZ0bW9kZXJyLmgnIGZvciBkZXNjcmlwdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBtYWNyb3MgKi8KKworI2RlZmluZSBGVF9FUlIoIGUgKSAgRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgZSApCisKKyNkZWZpbmUgRlRfRVJST1JfQkFTRSggeCApICAgICggKHgpICYgMHhGRiApCisjZGVmaW5lIEZUX0VSUk9SX01PRFVMRSggeCApICAoICh4KSAmIDB4RkYwMFUgKQorCisjZGVmaW5lIEZUX0VSUl9FUSggeCwgZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEZUX0VSUk9SX0JBU0UoIHggKSA9PSBGVF9FUlJPUl9CQVNFKCBGVF9FUlIoIGUgKSApICkKKyNkZWZpbmUgRlRfRVJSX05FUSggeCwgZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggRlRfRVJST1JfQkFTRSggeCApICE9IEZUX0VSUk9SX0JBU0UoIEZUX0VSUiggZSApICkgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRUWVBFU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2Z0d2luZm50LmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHdpbmZudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZWRhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9mdHdpbmZudC5oCkBAIC0wLDAgKzEsMjc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHdpbmZudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBmbnQtc3BlY2lmaWMgZGF0YS4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFdJTkZOVF9IX18KKyNkZWZpbmUgX19GVFdJTkZOVF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgd2luZm50X2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2luZG93IEZOVCBGaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2luZG93cyBGTlQgc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBXaW5kb3dzIEZOVCBzcGVjaWZpYyAgICAgICovCisgIC8qICAgIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9XaW5GTlRfSURfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGNoYXJzZXQnIGJ5dGUgaW4KKyAgICogICBARlRfV2luRk5UX0hlYWRlclJlYy4gIEV4YWN0IG1hcHBpbmcgdGFibGVzIGZvciB0aGUgdmFyaW91cyBjcFhYWFgKKyAgICogICBlbmNvZGluZ3MgKGV4Y2VwdCBmb3IgY3AxMzYxKSBjYW4gYmUgZm91bmQgYXQKKyAgICogICBmdHA6Ly9mdHAudW5pY29kZS5vcmcvUHVibGljIGluIHRoZSBNQVBQSU5HUy9WRU5ET1JTL01JQ1NGVC9XSU5ET1dTCisgICAqICAgc3ViZGlyZWN0b3J5LiAgY3AxMzYxIGlzIHJvdWdobHkgYSBzdXBlcnNldCBvZgorICAgKiAgIE1BUFBJTkdTL09CU09MRVRFL0VBU1RBU0lBL0tTQy9KT0hBQi5UWFQuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfV2luRk5UX0lEX0RFRkFVTFQgOjoKKyAgICogICAgIFRoaXMgaXMgdXNlZCBmb3IgZm9udCBlbnVtZXJhdGlvbiBhbmQgZm9udCBjcmVhdGlvbiBhcyBhCisgICAqICAgICBgZG9uJ3QgY2FyZScgdmFsdWUuICBWYWxpZCBmb250IGZpbGVzIGRvbid0IGNvbnRhaW4gdGhpcyB2YWx1ZS4KKyAgICogICAgIFdoZW4gcXVlcnlpbmcgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBmb250CisgICAqICAgICB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBpbnRvIGEgc3BlY2lmaWVkIGRldmljZSBjb250ZXh0LCB0aGlzCisgICAqICAgICByZXR1cm4gdmFsdWUgKG9mIHRoZSByZWxhdGVkIFdpbmRvd3MgQVBJKSBzaW1wbHkgZGVub3RlcyBmYWlsdXJlLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9TWU1CT0wgOjoKKyAgICogICAgIFRoZXJlIGlzIG5vIGtub3duIG1hcHBpbmcgdGFibGUgYXZhaWxhYmxlLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9NQUMgOjoKKyAgICogICAgIE1hYyBSb21hbiBlbmNvZGluZy4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfT0VNIDo6CisgICAqICAgICBGcm9tIE1pY2hhZWwgUMO2dHRnZW4gPG1pY2hhZWxAcG9ldHRnZW4uZGU+OgorICAgKgorICAgKiAgICAgICBUaGUgYFdpbmRvd3MgRm9udCBNYXBwaW5nJyBhcnRpY2xlIHNheXMgdGhhdCBGVF9XaW5GTlRfSURfT0VNCisgICAqICAgICAgIGlzIHVzZWQgZm9yIHRoZSBjaGFyc2V0IG9mIHZlY3RvciBmb250cywgbGlrZSBgbW9kZXJuLmZvbicsCisgICAqICAgICAgIGByb21hbi5mb24nLCBhbmQgYHNjcmlwdC5mb24nIG9uIFdpbmRvd3MuCisgICAqCisgICAqICAgICAgIFRoZSBgQ3JlYXRlRm9udCcgZG9jdW1lbnRhdGlvbiBzYXlzOiBUaGUgRlRfV2luRk5UX0lEX09FTSB2YWx1ZQorICAgKiAgICAgICBzcGVjaWZpZXMgYSBjaGFyYWN0ZXIgc2V0IHRoYXQgaXMgb3BlcmF0aW5nLXN5c3RlbSBkZXBlbmRlbnQuCisgICAqCisgICAqICAgICAgIFRoZSBgSUZJTUVUUklDUycgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBgV2luZG93cyBEcml2ZXIKKyAgICogICAgICAgRGV2ZWxvcG1lbnQgS2l0JyBzYXlzOiBUaGlzIGZvbnQgc3VwcG9ydHMgYW4gT0VNLXNwZWNpZmljCisgICAqICAgICAgIGNoYXJhY3RlciBzZXQuICBUaGUgT0VNIGNoYXJhY3RlciBzZXQgaXMgc3lzdGVtIGRlcGVuZGVudC4KKyAgICoKKyAgICogICAgICAgSW4gZ2VuZXJhbCBPRU0sIGFzIG9wcG9zZWQgdG8gQU5TSSAoaS5lLiwgY3AxMjUyKSwgZGVub3RlcyB0aGUKKyAgICogICAgICAgc2Vjb25kIGRlZmF1bHQgY29kZXBhZ2UgdGhhdCBtb3N0IGludGVybmF0aW9uYWwgdmVyc2lvbnMgb2YKKyAgICogICAgICAgV2luZG93cyBoYXZlLiAgSXQgaXMgb25lIG9mIHRoZSBPRU0gY29kZXBhZ2VzIGZyb20KKyAgICoKKyAgICogICAgICAgICBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9nb2dsb2JhbC9iYjk2NDY1NSwKKyAgICoKKyAgICogICAgICAgYW5kIGlzIHVzZWQgZm9yIHRoZSBgRE9TIGJveGVzJywgdG8gc3VwcG9ydCBsZWdhY3kgYXBwbGljYXRpb25zLgorICAgKiAgICAgICBBIEdlcm1hbiBXaW5kb3dzIHZlcnNpb24gZm9yIGV4YW1wbGUgdXN1YWxseSB1c2VzIEFOU0kgY29kZXBhZ2UKKyAgICogICAgICAgMTI1MiBhbmQgT0VNIGNvZGVwYWdlIDg1MC4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1A4NzQgOjoKKyAgICogICAgIEEgc3VwZXJzZXQgb2YgVGhhaSBUSVMgNjIwIGFuZCBJU08gODg1OS0xMS4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1A5MzIgOjoKKyAgICogICAgIEEgc3VwZXJzZXQgb2YgSmFwYW5lc2UgU2hpZnQtSklTICh3aXRoIG1pbm9yIGRldmlhdGlvbnMpLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9DUDkzNiA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiBzaW1wbGlmaWVkIENoaW5lc2UgR0IgMjMxMi0xOTgwICh3aXRoIGRpZmZlcmVudAorICAgKiAgICAgb3JkZXJpbmcgYW5kIG1pbm9yIGRldmlhdGlvbnMpLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9DUDk0OSA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiBLb3JlYW4gSGFuZ3VsIEtTfkMgNTYwMS0xOTg3ICh3aXRoIGRpZmZlcmVudAorICAgKiAgICAgb3JkZXJpbmcgYW5kIG1pbm9yIGRldmlhdGlvbnMpLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9DUDk1MCA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiB0cmFkaXRpb25hbCBDaGluZXNlIEJpZ341IEVUZW4gKHdpdGggZGlmZmVyZW50CisgICAqICAgICBvcmRlcmluZyBhbmQgbWlub3IgZGV2aWF0aW9ucykuCisgICAqCisgICAqICAgRlRfV2luRk5UX0lEX0NQMTI1MCA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiBFYXN0IEV1cm9wZWFuIElTTyA4ODU5LTIgKHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50CisgICAqICAgICBvcmRlcmluZykuCisgICAqCisgICAqICAgRlRfV2luRk5UX0lEX0NQMTI1MSA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiBSdXNzaWFuIElTTyA4ODU5LTUgKHdpdGggZGlmZmVyZW50IG9yZGVyaW5nKS4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1AxMjUyIDo6CisgICAqICAgICBBTlNJIGVuY29kaW5nLiAgQSBzdXBlcnNldCBvZiBJU08gODg1OS0xLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9DUDEyNTMgOjoKKyAgICogICAgIEEgc3VwZXJzZXQgb2YgR3JlZWsgSVNPIDg4NTktNyAod2l0aCBtaW5vciBtb2RpZmljYXRpb25zKS4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1AxMjU0IDo6CisgICAqICAgICBBIHN1cGVyc2V0IG9mIFR1cmtpc2ggSVNPIDg4NTktOS4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1AxMjU1IDo6CisgICAqICAgICBBIHN1cGVyc2V0IG9mIEhlYnJldyBJU08gODg1OS04ICh3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucykuCisgICAqCisgICAqICAgRlRfV2luRk5UX0lEX0NQMTI1NiA6OgorICAgKiAgICAgQSBzdXBlcnNldCBvZiBBcmFiaWMgSVNPIDg4NTktNiAod2l0aCBkaWZmZXJlbnQgb3JkZXJpbmcpLgorICAgKgorICAgKiAgIEZUX1dpbkZOVF9JRF9DUDEyNTcgOjoKKyAgICogICAgIEEgc3VwZXJzZXQgb2YgQmFsdGljIElTTyA4ODU5LTEzICh3aXRoIHNvbWUgZGV2aWF0aW9ucykuCisgICAqCisgICAqICAgRlRfV2luRk5UX0lEX0NQMTI1OCA6OgorICAgKiAgICAgRm9yIFZpZXRuYW1lc2UuICBUaGlzIGVuY29kaW5nIGRvZXNuJ3QgY292ZXIgYWxsIG5lY2Vzc2FyeQorICAgKiAgICAgY2hhcmFjdGVycy4KKyAgICoKKyAgICogICBGVF9XaW5GTlRfSURfQ1AxMzYxIDo6CisgICAqICAgICBLb3JlYW4gKEpvaGFiKS4KKyAgICovCisKKyNkZWZpbmUgRlRfV2luRk5UX0lEX0NQMTI1MiAgICAwCisjZGVmaW5lIEZUX1dpbkZOVF9JRF9ERUZBVUxUICAgMQorI2RlZmluZSBGVF9XaW5GTlRfSURfU1lNQk9MICAgIDIKKyNkZWZpbmUgRlRfV2luRk5UX0lEX01BQyAgICAgIDc3CisjZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDkzMiAgIDEyOAorI2RlZmluZSBGVF9XaW5GTlRfSURfQ1A5NDkgICAxMjkKKyNkZWZpbmUgRlRfV2luRk5UX0lEX0NQMTM2MSAgMTMwCisjZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDkzNiAgIDEzNAorI2RlZmluZSBGVF9XaW5GTlRfSURfQ1A5NTAgICAxMzYKKyNkZWZpbmUgRlRfV2luRk5UX0lEX0NQMTI1MyAgMTYxCisjZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTQgIDE2MgorI2RlZmluZSBGVF9XaW5GTlRfSURfQ1AxMjU4ICAxNjMKKyNkZWZpbmUgRlRfV2luRk5UX0lEX0NQMTI1NSAgMTc3CisjZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDEyNTYgIDE3OAorI2RlZmluZSBGVF9XaW5GTlRfSURfQ1AxMjU3ICAxODYKKyNkZWZpbmUgRlRfV2luRk5UX0lEX0NQMTI1MSAgMjA0CisjZGVmaW5lIEZUX1dpbkZOVF9JRF9DUDg3NCAgIDIyMgorI2RlZmluZSBGVF9XaW5GTlRfSURfQ1AxMjUwICAyMzgKKyNkZWZpbmUgRlRfV2luRk5UX0lEX09FTSAgICAgMjU1CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9XaW5GTlRfSGVhZGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXaW5kb3dzIEZOVCBIZWFkZXIgaW5mby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9XaW5GTlRfSGVhZGVyUmVjXworICB7CisgICAgRlRfVVNob3J0ICB2ZXJzaW9uOworICAgIEZUX1VMb25nICAgZmlsZV9zaXplOworICAgIEZUX0J5dGUgICAgY29weXJpZ2h0WzYwXTsKKyAgICBGVF9VU2hvcnQgIGZpbGVfdHlwZTsKKyAgICBGVF9VU2hvcnQgIG5vbWluYWxfcG9pbnRfc2l6ZTsKKyAgICBGVF9VU2hvcnQgIHZlcnRpY2FsX3Jlc29sdXRpb247CisgICAgRlRfVVNob3J0ICBob3Jpem9udGFsX3Jlc29sdXRpb247CisgICAgRlRfVVNob3J0ICBhc2NlbnQ7CisgICAgRlRfVVNob3J0ICBpbnRlcm5hbF9sZWFkaW5nOworICAgIEZUX1VTaG9ydCAgZXh0ZXJuYWxfbGVhZGluZzsKKyAgICBGVF9CeXRlICAgIGl0YWxpYzsKKyAgICBGVF9CeXRlICAgIHVuZGVybGluZTsKKyAgICBGVF9CeXRlICAgIHN0cmlrZV9vdXQ7CisgICAgRlRfVVNob3J0ICB3ZWlnaHQ7CisgICAgRlRfQnl0ZSAgICBjaGFyc2V0OworICAgIEZUX1VTaG9ydCAgcGl4ZWxfd2lkdGg7CisgICAgRlRfVVNob3J0ICBwaXhlbF9oZWlnaHQ7CisgICAgRlRfQnl0ZSAgICBwaXRjaF9hbmRfZmFtaWx5OworICAgIEZUX1VTaG9ydCAgYXZnX3dpZHRoOworICAgIEZUX1VTaG9ydCAgbWF4X3dpZHRoOworICAgIEZUX0J5dGUgICAgZmlyc3RfY2hhcjsKKyAgICBGVF9CeXRlICAgIGxhc3RfY2hhcjsKKyAgICBGVF9CeXRlICAgIGRlZmF1bHRfY2hhcjsKKyAgICBGVF9CeXRlICAgIGJyZWFrX2NoYXI7CisgICAgRlRfVVNob3J0ICBieXRlc19wZXJfcm93OworICAgIEZUX1VMb25nICAgZGV2aWNlX29mZnNldDsKKyAgICBGVF9VTG9uZyAgIGZhY2VfbmFtZV9vZmZzZXQ7CisgICAgRlRfVUxvbmcgICBiaXRzX3BvaW50ZXI7CisgICAgRlRfVUxvbmcgICBiaXRzX29mZnNldDsKKyAgICBGVF9CeXRlICAgIHJlc2VydmVkOworICAgIEZUX1VMb25nICAgZmxhZ3M7CisgICAgRlRfVVNob3J0ICBBX3NwYWNlOworICAgIEZUX1VTaG9ydCAgQl9zcGFjZTsKKyAgICBGVF9VU2hvcnQgIENfc3BhY2U7CisgICAgRlRfVVNob3J0ICBjb2xvcl90YWJsZV9vZmZzZXQ7CisgICAgRlRfVUxvbmcgICByZXNlcnZlZDFbNF07CisKKyAgfSBGVF9XaW5GTlRfSGVhZGVyUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfV2luRk5UX0hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYW4gQEZUX1dpbkZOVF9IZWFkZXJSZWMgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9XaW5GTlRfSGVhZGVyUmVjXyogIEZUX1dpbkZOVF9IZWFkZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9XaW5GTlRfSGVhZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0cmlldmUgYSBXaW5kb3dzIEZOVCBmb250IGluZm8gaGVhZGVyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgICAgOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIGFoZWFkZXIgOjogVGhlIFdpbkZOVCBoZWFkZXIuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggV2luZG93cyBGTlQgZmFjZXMsIHJldHVybmluZyBhbiBlcnJvcgorICAgKiAgIG90aGVyd2lzZS4KKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfV2luRk5UX0hlYWRlciggRlRfRmFjZSAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9XaW5GTlRfSGVhZGVyUmVjICAqYWhlYWRlciApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVFdJTkZOVF9IX18gKi8KKworCisvKiBFTkQgKi8KKworCisvKiBMb2NhbCBWYXJpYWJsZXM6ICovCisvKiBjb2Rpbmc6IHV0Zi04ICAgICovCisvKiBFbmQ6ICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9hdXRvaGludC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvYXV0b2hpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVhOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvYXV0b2hpbnQuaApAQCAtMCwwICsxLDI0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYXV0b2hpbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhpZ2gtbGV2ZWwgYGF1dG9oaW50JyBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGF1dG8taGludGVyIGlzIHVzZWQgdG8gbG9hZCBhbmQgYXV0b21hdGljYWxseSBoaW50IGdseXBocyBpZiBhICAgICovCisgIC8qIGZvcm1hdC1zcGVjaWZpYyBoaW50ZXIgaXNuJ3QgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FVVE9ISU5UX0hfXworI2RlZmluZSBfX0FVVE9ISU5UX0hfXworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIHNtYWxsIHRlY2huaWNhbCBub3RlIHJlZ2FyZGluZyBhdXRvbWF0aWMgaGludGluZyBpbiBvcmRlciB0byAgICAgICAgKi8KKyAgLyogY2xhcmlmeSB0aGlzIG1vZHVsZSBpbnRlcmZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBbiBhdXRvbWF0aWMgaGludGVyIG1pZ2h0IGNvbXB1dGUgdHdvIGtpbmRzIG9mIGRhdGEgZm9yIGEgZ2l2ZW4gZmFjZTogKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZ2xvYmFsIGhpbnRzOiBVc3VhbGx5IHNvbWUgbWV0cmljcyB0aGF0IGRlc2NyaWJlIGdsb2JhbCBwcm9wZXJ0aWVzICAqLworICAvKiAgICAgICAgICAgICAgICAgb2YgdGhlIGZhY2UuICBJdCBpcyBjb21wdXRlZCBieSBzY2FubmluZyBtb3JlIG9yIGxlc3MgKi8KKyAgLyogICAgICAgICAgICAgICAgIGFnZ3Jlc3NpdmVseSB0aGUgZ2x5cGhzIGluIHRoZSBmYWNlLCBhbmQgdGh1cyBjYW4gYmUgICovCisgIC8qICAgICAgICAgICAgICAgICB2ZXJ5IHNsb3cgdG8gY29tcHV0ZSAoZXZlbiBpZiB0aGUgc2l6ZSBvZiBnbG9iYWwgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgaGludHMgaXMgcmVhbGx5IHNtYWxsKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZ2x5cGggaGludHM6ICBUaGVzZSBkZXNjcmliZSBzb21lIGltcG9ydGFudCBmZWF0dXJlcyBvZiB0aGUgZ2x5cGggICAqLworICAvKiAgICAgICAgICAgICAgICAgb3V0bGluZSwgYXMgd2VsbCBhcyBob3cgdG8gYWxpZ24gdGhlbS4gIFRoZXkgYXJlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGdlbmVyYWxseSBtdWNoIGZhc3RlciB0byBjb21wdXRlIHRoYW4gZ2xvYmFsIGhpbnRzLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgY3VycmVudCBGcmVlVHlwZSBhdXRvLWhpbnRlciBkb2VzIGEgcHJldHR5IGdvb2Qgam9iIHdoaWxlICAgICAgICAgKi8KKyAgLyogcGVyZm9ybWluZyBmYXN0IGNvbXB1dGF0aW9ucyBmb3IgYm90aCBnbG9iYWwgYW5kIGdseXBoIGhpbnRzLiAgICAgICAgICovCisgIC8qIEhvd2V2ZXIsIHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gaW50cm9kdWNpbmcgbW9yZSBjb21wbGV4IGFuZCAgICAgICAqLworICAvKiBwb3dlcmZ1bCBhbGdvcml0aG1zIGluIHRoZSBmdXR1cmUsIGxpa2UgdGhlIG9uZSBkZXNjcmliZWQgaW4gdGhlIEpvaG4gKi8KKyAgLyogRC4gSG9iYnkgcGFwZXIsIHdoaWNoIHVuZm9ydHVuYXRlbHkgcmVxdWlyZXMgYSBsb3QgbW9yZSBob3JzZXBvd2VyLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCZWNhdXNlIGEgc3VmZmljaWVudGx5IHNvcGhpc3RpY2F0ZWQgZm9udCBtYW5hZ2VtZW50IHN5c3RlbSB3b3VsZCAgICAgKi8KKyAgLyogdHlwaWNhbGx5IGltcGxlbWVudCBhbiBMUlUgY2FjaGUgb2Ygb3BlbmVkIGZhY2Ugb2JqZWN0cyB0byByZWR1Y2UgICAgICovCisgIC8qIG1lbW9yeSB1c2FnZSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gYmUgYWJsZSB0byBhdm9pZCByZWNvbXB1dGluZyAgICAgICAqLworICAvKiBnbG9iYWwgaGludHMgZXZlcnkgdGltZSB0aGUgc2FtZSBmYWNlIGlzIHJlLW9wZW5lZC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIHRodXMgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBjYWNoZSBnbG9iYWwgaGludHMgb3V0c2lkZSBvZiB0aGUgZmFjZSAqLworICAvKiBvYmplY3QsIGluIG9yZGVyIHRvIHNwZWVkIHVwIGZvbnQgcmUtb3BlbmluZyB0aW1lLiAgT2YgY291cnNlLCB0aGlzICAgKi8KKyAgLyogZmVhdHVyZSBpcyBwdXJlbHkgb3B0aW9uYWwsIHNvIG1vc3QgY2xpZW50IHByb2dyYW1zIHdvbid0IGV2ZW4gbm90aWNlICovCisgIC8qIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoZSBnbHlwaCAgICovCisgIC8qIGhpbnRzIHRvby4gIEhvd2V2ZXIsIG15IGdlbmVyYWwgaWRlYSBub3cgaXMgdGhhdCBpZiB5b3UgcmVhbGx5IG5lZWQgICAqLworICAvKiB0byBjYWNoZSB0aGVzZSB0b28sIHlvdSBhcmUgc2ltcGx5IGluIG5lZWQgb2YgYSBuZXcgZm9udCBmb3JtYXQsICAgICAgKi8KKyAgLyogd2hlcmUgYWxsIHRoaXMgaW5mb3JtYXRpb24gY291bGQgYmUgc3RvcmVkIHdpdGhpbiB0aGUgZm9udCBmaWxlIGFuZCAgICovCisgIC8qIGRlY29kZWQgb24gdGhlIGZseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICB0eXBlZGVmIHN0cnVjdCBGVF9BdXRvSGludGVyUmVjXyAgKkZUX0F1dG9IaW50ZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9BdXRvSGludGVyX0dsb2JhbEdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXRyaWV2ZSB0aGUgZ2xvYmFsIGhpbnRzIGNvbXB1dGVkIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0LiAgVGhlICAgKi8KKyAgLyogICAgcmVzdWx0aW5nIGRhdGEgaXMgZGlzc29jaWF0ZWQgZnJvbSB0aGUgZmFjZSBhbmQgd2lsbCBzdXJ2aXZlIGEgICAgICovCisgIC8qICAgIGNhbGwgdG8gRlRfRG9uZV9GYWNlKCkuICBJdCBtdXN0IGJlIGRpc2NhcmRlZCB0aHJvdWdoIHRoZSBBUEkgICAgICAqLworICAvKiAgICBGVF9BdXRvSGludGVyX0dsb2JhbERvbmVGdW5jKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50ZXIgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBhdXRvLWhpbnRlci4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdsb2JhbF9oaW50cyA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGdsb2JhbCBoaW50cy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2xvYmFsX2xlbiAgIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBnbG9iYWwgaGludHMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9BdXRvSGludGVyX0dsb2JhbEdldEZ1bmMpKCBGVF9BdXRvSGludGVyICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICAgICBnbG9iYWxfaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyogICAgICAgICAgZ2xvYmFsX2xlbiApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxEb25lRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGlzY2FyZCB0aGUgZ2xvYmFsIGhpbnRzIHJldHJpZXZlZCB0aHJvdWdoICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0F1dG9IaW50ZXJfR2xvYmFsR2V0RnVuYygpLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdGhlc2UgaGludHMgICAqLworICAvKiAgICBhcmUgZnJlZWQgZnJvbSBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50ZXIgOjogQSBoYW5kbGUgdG8gdGhlIGF1dG8taGludGVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdsb2JhbCA6OiBBIHBvaW50ZXIgdG8gcmV0cmlldmVkIGdsb2JhbCBoaW50cyB0byBkaXNjYXJkLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqRlRfQXV0b0hpbnRlcl9HbG9iYWxEb25lRnVuYykoIEZUX0F1dG9IaW50ZXIgIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgZ2xvYmFsICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9BdXRvSGludGVyX0dsb2JhbFJlc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjb21wdXRlIHRoZSBnbG9iYWwgbWV0cmljcyBpbiBhIGdpdmVuICAgKi8KKyAgLyogICAgZm9udC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gZ2xvYmFsIGZvbnQgZGF0YSBjaGFuZ2VzIChlLmcuIE11bHRpcGxlICovCisgIC8qICAgIE1hc3RlcnMgZm9udHMgd2hlcmUgYmxlbmQgY29vcmRpbmF0ZXMgY2hhbmdlKS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhpbnRlciA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGF1dG8taGludGVyLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9BdXRvSGludGVyX0dsb2JhbFJlc2V0RnVuYykoIEZUX0F1dG9IaW50ZXIgIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0F1dG9IaW50ZXJfR2x5cGhMb2FkRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkLCBzY2FsZSwgYW5kIGF1dG9tYXRpY2FsbHkgaGludCBhICAgICAqLworICAvKiAgICBnbHlwaCBmcm9tIGEgZ2l2ZW4gZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbG9hZF9mbGFncyAgOjogVGhlIGxvYWQgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGxvYWRpbmcgY29tcG9zaXRlIGdseXBocyBieSBoaW50aW5nICAgICovCisgIC8qICAgIGVhY2ggc3ViLWdseXBoIGluZGVwZW5kZW50bHkgKHdoaWNoIGltcHJvdmVzIHF1YWxpdHkpLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSXQgd2lsbCBjYWxsIHRoZSBmb250IGRyaXZlciB3aXRoIEBGVF9Mb2FkX0dseXBoLCB3aXRoICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9MT0FEX05PX1NDQUxFIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0F1dG9IaW50ZXJfR2x5cGhMb2FkRnVuYykoIEZUX0F1dG9IaW50ZXIgIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICAgbG9hZF9mbGFncyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGF1dG8taGludGVyIG1vZHVsZSdzIGludGVyZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWNfCisgIHsKKyAgICBGVF9BdXRvSGludGVyX0dsb2JhbFJlc2V0RnVuYyAgcmVzZXRfZmFjZTsKKyAgICBGVF9BdXRvSGludGVyX0dsb2JhbEdldEZ1bmMgICAgZ2V0X2dsb2JhbF9oaW50czsKKyAgICBGVF9BdXRvSGludGVyX0dsb2JhbERvbmVGdW5jICAgZG9uZV9nbG9iYWxfaGludHM7CisgICAgRlRfQXV0b0hpbnRlcl9HbHlwaExvYWRGdW5jICAgIGxvYWRfZ2x5cGg7CisKKyAgfSBGVF9BdXRvSGludGVyX0ludGVyZmFjZVJlYywgKkZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlOworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUZJTkVfQVVUT0hJTlRFUl9JTlRFUkZBQ0UoICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmVzZXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9nbG9iYWxfaGludHNfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lX2dsb2JhbF9oaW50c18sICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9nbHlwaF8gKSAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29uc3QgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWMgIGNsYXNzXyA9ICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlc2V0X2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfZ2xvYmFsX2hpbnRzXywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG9uZV9nbG9iYWxfaGludHNfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfZ2x5cGhfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfQVVUT0hJTlRFUl9JTlRFUkZBQ0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmVzZXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9nbG9iYWxfaGludHNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lX2dsb2JhbF9oaW50c18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9nbHlwaF8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgIGxpYnJhcnksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWMqICBjbGF6eiApICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5yZXNldF9mYWNlICAgICAgICA9IHJlc2V0X2ZhY2VfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X2dsb2JhbF9oaW50cyAgPSBnZXRfZ2xvYmFsX2hpbnRzXzsgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmRvbmVfZ2xvYmFsX2hpbnRzID0gZG9uZV9nbG9iYWxfaGludHNfOyAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2dseXBoICAgICAgICA9IGxvYWRfZ2x5cGhfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19BVVRPSElOVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRjYWxjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3NTJjMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oCkBAIC0wLDAgKzEsNDA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGNhbGMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVENBTENfSF9fCisjZGVmaW5lIF9fRlRDQUxDX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9NdWxEaXYoKSBhbmQgRlRfTXVsRml4KCkgYXJlIGRlY2xhcmVkIGluIGZyZWV0eXBlLmguICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmICBGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUgorICAvKiBQcm92aWRlIGFzc2VtYmxlciBmcmFnbWVudHMgZm9yIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9ucy4gKi8KKyAgLyogVGhlc2UgbXVzdCBiZSBkZWZpbmVkIGBzdGF0aWMgX19pbmxpbmVfXycgd2l0aCBHQ0MuICAgICAgICAgICAgICovCisKKyNpZiBkZWZpbmVkKCBfX0NDX0FSTSApIHx8IGRlZmluZWQoIF9fQVJNQ0NfXyApICAvKiBSVkNUICovCisKKyNkZWZpbmUgRlRfTVVMRklYX0FTU0VNQkxFUiAgRlRfTXVsRml4X2FybQorCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIHN0YXRpYyBfX2lubGluZSBGVF9JbnQzMgorICBGVF9NdWxGaXhfYXJtKCBGVF9JbnQzMiAgYSwKKyAgICAgICAgICAgICAgICAgRlRfSW50MzIgIGIgKQorICB7CisgICAgcmVnaXN0ZXIgRlRfSW50MzIgIHQsIHQyOworCisKKyAgICBfX2FzbQorICAgIHsKKyAgICAgIHNtdWxsIHQyLCB0LCAgYiwgIGEgICAgICAgICAgIC8qIChsbz10MixoaT10KSA9IGEqYiAqLworICAgICAgbW92ICAgYSwgIHQsICBhc3IgIzMxICAgICAgICAgLyogYSAgID0gKGhpID4+IDMxKSAqLworICAgICAgYWRkICAgYSwgIGEsICAjMHg4MDAwICAgICAgICAgLyogYSAgKz0gMHg4MDAwICovCisgICAgICBhZGRzICB0MiwgdDIsIGEgICAgICAgICAgICAgICAvKiB0MiArPSBhICovCisgICAgICBhZGMgICB0LCAgdCwgICMwICAgICAgICAgICAgICAvKiB0ICArPSBjYXJyeSAqLworICAgICAgbW92ICAgYSwgIHQyLCBsc3IgIzE2ICAgICAgICAgLyogYSAgID0gdDIgPj4gMTYgKi8KKyAgICAgIG9yciAgIGEsICBhLCAgdCwgIGxzbCAjMTYgICAgIC8qIGEgIHw9IHQgPDwgMTYgKi8KKyAgICB9CisgICAgcmV0dXJuIGE7CisgIH0KKworI2VuZGlmIC8qIF9fQ0NfQVJNIHx8IF9fQVJNQ0NfXyAqLworCisKKyNpZmRlZiBfX0dOVUNfXworCisjaWYgZGVmaW5lZCggX19hcm1fXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAorICAgICggIWRlZmluZWQoIF9fdGh1bWJfXyApIHx8IGRlZmluZWQoIF9fdGh1bWIyX18gKSApICYmIFwKKyAgICAhKCBkZWZpbmVkKCBfX0NDX0FSTSApIHx8IGRlZmluZWQoIF9fQVJNQ0NfXyApICkKKworI2RlZmluZSBGVF9NVUxGSVhfQVNTRU1CTEVSICBGVF9NdWxGaXhfYXJtCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgc3RhdGljIF9faW5saW5lX18gRlRfSW50MzIKKyAgRlRfTXVsRml4X2FybSggRlRfSW50MzIgIGEsCisgICAgICAgICAgICAgICAgIEZUX0ludDMyICBiICkKKyAgeworICAgIHJlZ2lzdGVyIEZUX0ludDMyICB0LCB0MjsKKworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgInNtdWxsICAlMSwgJTIsICU0LCAlM1xuXHQiICAgICAgIC8qIChsbz0lMSxoaT0lMikgPSBhKmIgKi8KKyAgICAgICJtb3YgICAgJTAsICUyLCBhc3IgIzMxXG5cdCIgICAgICAvKiAlMCAgPSAoaGkgPj4gMzEpICovCisjaWYgZGVmaW5lZCggX19jbGFuZ19fICkgJiYgZGVmaW5lZCggX190aHVtYjJfXyApCisgICAgICAiYWRkLncgICUwLCAlMCwgIzB4ODAwMFxuXHQiICAgICAgLyogJTAgKz0gMHg4MDAwICovCisjZWxzZQorICAgICAgImFkZCAgICAlMCwgJTAsICMweDgwMDBcblx0IiAgICAgIC8qICUwICs9IDB4ODAwMCAqLworI2VuZGlmCisgICAgICAiYWRkcyAgICUxLCAlMSwgJTBcblx0IiAgICAgICAgICAgLyogJTEgKz0gJTAgKi8KKyAgICAgICJhZGMgICAgJTIsICUyLCAjMFxuXHQiICAgICAgICAgICAvKiAlMiArPSBjYXJyeSAqLworICAgICAgIm1vdiAgICAlMCwgJTEsIGxzciAjMTZcblx0IiAgICAgIC8qICUwICA9ICUxID4+IDE2ICovCisgICAgICAib3JyICAgICUwLCAlMCwgJTIsIGxzbCAjMTZcblx0IiAgLyogJTAgfD0gJTIgPDwgMTYgKi8KKyAgICAgIDogIj1yIihhKSwgIj0mciIodDIpLCAiPSZyIih0KQorICAgICAgOiAiciIoYSksICJyIihiKQorICAgICAgOiAiY2MiICk7CisgICAgcmV0dXJuIGE7CisgIH0KKworI2VuZGlmIC8qIF9fYXJtX18gICAgICAgICAgICAgICAgICAgICAgJiYgKi8KKyAgICAgICAvKiAoIF9fdGh1bWIyX18gfHwgIV9fdGh1bWJfXyApICYmICovCisgICAgICAgLyogISggX19DQ19BUk0gfHwgX19BUk1DQ19fICkgICAgICAqLworCisKKyNpZiBkZWZpbmVkKCBfX2kzODZfXyApCisKKyNkZWZpbmUgRlRfTVVMRklYX0FTU0VNQkxFUiAgRlRfTXVsRml4X2kzODYKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBzdGF0aWMgX19pbmxpbmVfXyBGVF9JbnQzMgorICBGVF9NdWxGaXhfaTM4NiggRlRfSW50MzIgIGEsCisgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgYiApCisgIHsKKyAgICByZWdpc3RlciBGVF9JbnQzMiAgcmVzdWx0OworCisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAiaW11bCAgJSVlZHhcbiIKKyAgICAgICJtb3ZsICAlJWVkeCwgJSVlY3hcbiIKKyAgICAgICJzYXJsICAkMzEsICUlZWN4XG4iCisgICAgICAiYWRkbCAgJDB4ODAwMCwgJSVlY3hcbiIKKyAgICAgICJhZGRsICAlJWVjeCwgJSVlYXhcbiIKKyAgICAgICJhZGNsICAkMCwgJSVlZHhcbiIKKyAgICAgICJzaHJsICAkMTYsICUlZWF4XG4iCisgICAgICAic2hsbCAgJDE2LCAlJWVkeFxuIgorICAgICAgImFkZGwgICUlZWR4LCAlJWVheFxuIgorICAgICAgOiAiPWEiKHJlc3VsdCksICI9ZCIoYikKKyAgICAgIDogImEiKGEpLCAiZCIoYikKKyAgICAgIDogIiVlY3giLCAiY2MiICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisjZW5kaWYgLyogaTM4NiAqLworCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworCisjaWZkZWYgX01TQ19WRVIgLyogVmlzdWFsIEMrKyAqLworCisjaWZkZWYgX01fSVg4NgorCisjZGVmaW5lIEZUX01VTEZJWF9BU1NFTUJMRVIgIEZUX011bEZpeF9pMzg2CisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgc3RhdGljIF9faW5saW5lIEZUX0ludDMyCisgIEZUX011bEZpeF9pMzg2KCBGVF9JbnQzMiAgYSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludDMyICBiICkKKyAgeworICAgIHJlZ2lzdGVyIEZUX0ludDMyICByZXN1bHQ7CisKKyAgICBfX2FzbQorICAgIHsKKyAgICAgIG1vdiBlYXgsIGEKKyAgICAgIG1vdiBlZHgsIGIKKyAgICAgIGltdWwgZWR4CisgICAgICBtb3YgZWN4LCBlZHgKKyAgICAgIHNhciBlY3gsIDMxCisgICAgICBhZGQgZWN4LCA4MDAwaAorICAgICAgYWRkIGVheCwgZWN4CisgICAgICBhZGMgZWR4LCAwCisgICAgICBzaHIgZWF4LCAxNgorICAgICAgc2hsIGVkeCwgMTYKKyAgICAgIGFkZCBlYXgsIGVkeAorICAgICAgbW92IHJlc3VsdCwgZWF4CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworI2VuZGlmIC8qIF9NX0lYODYgKi8KKworI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKworI2lmIGRlZmluZWQoIF9fR05VQ19fICkgJiYgZGVmaW5lZCggX194ODZfNjRfXyApCisKKyNkZWZpbmUgRlRfTVVMRklYX0FTU0VNQkxFUiAgRlRfTXVsRml4X3g4Nl82NAorCisgIHN0YXRpYyBfX2lubGluZV9fIEZUX0ludDMyCisgIEZUX011bEZpeF94ODZfNjQoIEZUX0ludDMyICBhLAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgYiApCisgIHsKKyAgICAvKiBUZW1wb3JhcmlseSBkaXNhYmxlIHRoZSB3YXJuaW5nIHRoYXQgQzkwIGRvZXNuJ3Qgc3VwcG9ydCAqLworICAgIC8qIGBsb25nIGxvbmcnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgX19HTlVDX18gPiA0IHx8ICggX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA2ICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2xvbmctbG9uZyIKKyNlbmRpZgorCisjaWYgMQorICAgIC8qIFRlY2huaWNhbGx5IG5vdCBhbiBhc3NlbWJseSBmcmFnbWVudCwgYnV0IEdDQyBkb2VzIGEgcmVhbGx5IGdvb2QgKi8KKyAgICAvKiBqb2IgYXQgaW5saW5pbmcgaXQgYW5kIGdlbmVyYXRpbmcgZ29vZCBtYWNoaW5lIGNvZGUgZm9yIGl0LiAgICAgICovCisgICAgbG9uZyBsb25nICByZXQsIHRtcDsKKworCisgICAgcmV0ICA9IChsb25nIGxvbmcpYSAqIGI7CisgICAgdG1wICA9IHJldCA+PiA2MzsKKyAgICByZXQgKz0gMHg4MDAwICsgdG1wOworCisgICAgcmV0dXJuIChGVF9JbnQzMikoIHJldCA+PiAxNiApOworI2Vsc2UKKworICAgIC8qIEZvciBzb21lIHJlYXNvbiwgR0NDIDQuNiBvbiBVYnVudHUgMTIuMDQgZ2VuZXJhdGVzIGludmFsaWQgbWFjaGluZSAgKi8KKyAgICAvKiBjb2RlIGZyb20gdGhlIGxpbmVzIGJlbG93LiAgVGhlIG1haW4gaXNzdWUgaXMgdGhhdCBgd2lkZV9hJyBpcyBub3QgICovCisgICAgLyogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgc2lnbi1leHRlbmRpbmcgYGEnLiAgSW5zdGVhZCwgdGhlIGdlbmVyYXRlZCAqLworICAgIC8qIG1hY2hpbmUgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgYGEnIG9uIGlucHV0ICAgKi8KKyAgICAvKiBjYW4gYmUgdXNlZCBkaXJlY3RseSBhcyBhIDY0LWJpdCB2YWx1ZSwgd2hpY2ggaXMgd3JvbmcgbW9zdCBvZiB0aGUgICovCisgICAgLyogdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGxvbmcgbG9uZyAgd2lkZV9hID0gKGxvbmcgbG9uZylhOworICAgIGxvbmcgbG9uZyAgd2lkZV9iID0gKGxvbmcgbG9uZyliOworICAgIGxvbmcgbG9uZyAgcmVzdWx0OworCisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAiaW11bCAlMiwgJTFcbiIKKyAgICAgICJtb3YgJTEsICUwXG4iCisgICAgICAic2FyICQ2MywgJTBcbiIKKyAgICAgICJsZWEgMHg4MDAwKCUxLCAlMCksICUwXG4iCisgICAgICAic2FyICQxNiwgJTBcbiIKKyAgICAgIDogIj0mciIocmVzdWx0KSwgIj0mciIod2lkZV9hKQorICAgICAgOiAiciIod2lkZV9iKQorICAgICAgOiAiY2MiICk7CisKKyAgICByZXR1cm4gKEZUX0ludDMyKXJlc3VsdDsKKyNlbmRpZgorCisjaWYgX19HTlVDX18gPiA0IHx8ICggX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA2ICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgfQorCisjZW5kaWYgLyogX19HTlVDX18gJiYgX194ODZfNjRfXyAqLworCisjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fTk9fQVNTRU1CTEVSICovCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5MSU5FX01VTEZJWAorI2lmZGVmIEZUX01VTEZJWF9BU1NFTUJMRVIKKyNkZWZpbmUgRlRfTXVsRml4KCBhLCBiICkgIEZUX01VTEZJWF9BU1NFTUJMRVIoIChGVF9JbnQzMikoYSksIChGVF9JbnQzMikoYikgKQorI2VuZGlmCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bERpdl9Ob19Sb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBgKGEqYikvYycgICAqLworICAvKiAgICAod2l0aG91dCByb3VuZGluZykgd2l0aCBtYXhpbXVtIGFjY3VyYWN5IChpdCB1c2VzIGEgNjQtYml0ICAgICAgICAgKi8KKyAgLyogICAgaW50ZXJtZWRpYXRlIGludGVnZXIgd2hlbmV2ZXIgbmVjZXNzYXJ5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzbid0IG5lY2Vzc2FyaWx5IGFzIGZhc3QgYXMgc29tZSBwcm9jZXNzb3Igc3BlY2lmaWMgKi8KKyAgLyogICAgb3BlcmF0aW9ucywgYnV0IGlzIGF0IGxlYXN0IGNvbXBsZXRlbHkgcG9ydGFibGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgZmlyc3QgbXVsdGlwbGllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjIDo6IFRoZSBkaXZpc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS9jJy4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgdHJhcHMgd2hlbiB0cnlpbmcgdG8gKi8KKyAgLyogICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZyAgICovCisgIC8qICAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggRlRfTG9uZyApCisgIEZUX011bERpdl9Ob19Sb3VuZCggRlRfTG9uZyAgYSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBiLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGMgKTsKKworCisgIC8qCisgICAqICBBIHZhcmlhbnQgb2YgRlRfTWF0cml4X011bHRpcGx5IHdoaWNoIHNjYWxlcyBpdHMgcmVzdWx0IGFmdGVyd2FyZHMuCisgICAqICBUaGUgaWRlYSBpcyB0aGF0IGJvdGggYGEnIGFuZCBgYicgYXJlIHNjYWxlZCBieSBmYWN0b3JzIG9mIDEwIHNvIHRoYXQKKyAgICogIHRoZSB2YWx1ZXMgYXJlIGFzIHByZWNpc2UgYXMgcG9zc2libGUgdG8gZ2V0IGEgY29ycmVjdCByZXN1bHQgZHVyaW5nCisgICAqICB0aGUgNjRiaXQgbXVsdGlwbGljYXRpb24uICBMZXQgYHNhJyBhbmQgYHNiJyBiZSB0aGUgc2NhbGluZyBmYWN0b3JzIG9mCisgICAqICBgYScgYW5kIGBiJywgcmVzcGVjdGl2ZWx5LCB0aGVuIHRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgcmVzdWx0IGlzCisgICAqICBgc2Eqc2InLgorICAgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQoIGNvbnN0IEZUX01hdHJpeCogIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCAgICAgICAgKmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAgIHNjYWxpbmcgKTsKKworCisgIC8qCisgICAqICBBIHZhcmlhbnQgb2YgRlRfVmVjdG9yX1RyYW5zZm9ybS4gIFNlZSBjb21tZW50cyBmb3IKKyAgICogIEZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQuCisgICAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfVmVjdG9yX1RyYW5zZm9ybV9TY2FsZWQoIEZUX1ZlY3RvciogICAgICAgIHZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAgIHNjYWxpbmcgKTsKKworCisgIC8qCisgICAqICBSZXR1cm4gLTEsIDAsIG9yICsxLCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIGEgZ2l2ZW4gY29ybmVyLgorICAgKiAgV2UgdXNlIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0sIHdpdGggcG9zaXRpdmUgdmVydGljYWwgdmFsdWVzCisgICAqICBnb2luZyB1cHdhcmRzLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgKzEgaWYgdGhlIGNvcm5lciB0dXJucyB0byB0aGUKKyAgICogIGxlZnQsIC0xIHRvIHRoZSByaWdodCwgYW5kIDAgZm9yIHVuZGVjaWRhYmxlIGNhc2VzLgorICAgKi8KKyAgRlRfQkFTRSggRlRfSW50ICkKKyAgZnRfY29ybmVyX29yaWVudGF0aW9uKCBGVF9Qb3MgIGluX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBpbl95LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgb3V0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeSApOworCisKKyAgLyoKKyAgICogIFJldHVybiBUUlVFIGlmIGEgY29ybmVyIGlzIGZsYXQgb3IgbmVhcmx5IGZsYXQuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICogIHNheWluZyB0aGF0IHRoZSBjb3JuZXIgcG9pbnQgaXMgY2xvc2UgdG8gaXRzIG5laWdoYm9ycywgb3IgaW5zaWRlIGFuCisgICAqICBlbGxpcHNlIGRlZmluZWQgYnkgdGhlIG5laWdoYm9yIGZvY2FsIHBvaW50cyB0byBiZSBtb3JlIHByZWNpc2UuCisgICAqLworICBGVF9CQVNFKCBGVF9JbnQgKQorICBmdF9jb3JuZXJfaXNfZmxhdCggRlRfUG9zICBpbl94LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBpbl95LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgb3V0X3kgKTsKKworCisgIC8qCisgICAqICBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluZGV4LgorICAgKi8KKworI2lmbmRlZiAgRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVIKKyNpZiBkZWZpbmVkKCBfX0dOVUNfXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAorICAgICggX19HTlVDX18gPiAzIHx8ICggX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0ICkgKQorCisjaWYgRlRfU0laRU9GX0lOVCA9PSA0CisKKyNkZWZpbmUgRlRfTVNCKCB4ICkgICggMzEgLSBfX2J1aWx0aW5fY2x6KCB4ICkgKQorCisjZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSA0CisKKyNkZWZpbmUgRlRfTVNCKCB4ICkgICggMzEgLSBfX2J1aWx0aW5fY2x6bCggeCApICkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUiAqLworCisjaWZuZGVmIEZUX01TQgorCisgIEZUX0JBU0UoIEZUX0ludCApCisgIEZUX01TQiggRlRfVUludDMyICB6ICk7CisKKyNlbmRpZgorCisKKyAgLyoKKyAgICogIFJldHVybiBzcXJ0KHgqeCt5KnkpLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBgRlRfVmVjdG9yX0xlbmd0aCcgYnV0IHVzZXMKKyAgICogIHR3byBmaXhlZC1wb2ludCBhcmd1bWVudHMgaW5zdGVhZC4KKyAgICovCisgIEZUX0JBU0UoIEZUX0ZpeGVkICkKKyAgRlRfSHlwb3QoIEZUX0ZpeGVkICB4LAorICAgICAgICAgICAgRlRfRml4ZWQgIHkgKTsKKworCisjaWYgMAorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NxcnRGaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHggOjogVGhlIHZhbHVlIHRvIGNvbXB1dGUgdGhlIHJvb3QgZm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXN1bHQgb2YgYHNxcnQoeCknLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHZlcnkgZmFzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggRlRfSW50MzIgKQorICBGVF9TcXJ0Rml4ZWQoIEZUX0ludDMyICB4ICk7CisKKyNlbmRpZiAvKiAwICovCisKKworI2RlZmluZSBJTlRfVE9fRjI2RE9UNiggeCApICAgICggKEZUX0xvbmcpKHgpIDw8IDYgICkKKyNkZWZpbmUgSU5UX1RPX0YyRE9UMTQoIHggKSAgICAoIChGVF9Mb25nKSh4KSA8PCAxNCApCisjZGVmaW5lIElOVF9UT19GSVhFRCggeCApICAgICAgKCAoRlRfTG9uZykoeCkgPDwgMTYgKQorI2RlZmluZSBGMkRPVDE0X1RPX0ZJWEVEKCB4ICkgICggKEZUX0xvbmcpKHgpIDw8IDIgICkKKyNkZWZpbmUgRkxPQVRfVE9fRklYRUQoIHggKSAgICAoIChGVF9Mb25nKSggeCAqIDY1NTM2LjAgKSApCisjZGVmaW5lIEZJWEVEX1RPX0lOVCggeCApICAgICAgKCBGVF9Sb3VuZEZpeCggeCApID4+IDE2ICkKKworI2RlZmluZSBST1VORF9GMjZET1Q2KCB4ICkgICAgICggeCA+PSAwID8gKCAgICAoICh4KSArIDMyICkgJiAtNjQgKSAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCAtKCAoIDMyIC0gKHgpICkgJiAtNjQgKSApICkKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUQ0FMQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0ZGVidWcuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0ZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZjNzMwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGRlYnVnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIElNUE9SVEFOVDogQSBkZXNjcmlwdGlvbiBvZiBGcmVlVHlwZSdzIGRlYnVnZ2luZyBzdXBwb3J0IGNhbiBiZSAgICAgICAgKi8KKy8qICAgICAgICAgICAgIGZvdW5kIGluIGBkb2NzL0RFQlVHLlRYVCcuICBSZWFkIGl0IGlmIHlvdSBuZWVkIHRvIHVzZSBvciAgICovCisvKiAgICAgICAgICAgICB1bmRlcnN0YW5kIHRoaXMgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUREVCVUdfSF9fCisjZGVmaW5lIF9fRlRERUJVR19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyogZm9yY2UgdGhlIGRlZmluaXRpb24gb2YgRlRfREVCVUdfTEVWRUxfRVJST1IgaWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKyAgLyogaXMgYWxyZWFkeSBkZWZpbmVkOyB0aGlzIHNpbXBsaWZpZXMgdGhlIGZvbGxvd2luZyAjaWZkZWZzICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorI3VuZGVmICBGVF9ERUJVR19MRVZFTF9FUlJPUgorI2RlZmluZSBGVF9ERUJVR19MRVZFTF9FUlJPUgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmluZSB0aGUgdHJhY2UgZW51bXMgYXMgd2VsbCBhcyB0aGUgdHJhY2UgbGV2ZWxzIGFycmF5IHdoZW4gdGhleSAgICAqLworICAvKiBhcmUgbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworI2RlZmluZSBGVF9UUkFDRV9ERUYoIHggKSAgdHJhY2VfICMjIHggLAorCisgIC8qIGRlZmluaW5nIHRoZSBlbnVtZXJhdGlvbiAqLworICB0eXBlZGVmIGVudW0gIEZUX1RyYWNlXworICB7CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUkFDRV9ICisgICAgdHJhY2VfY291bnQKKworICB9IEZUX1RyYWNlOworCisKKyAgLyogZGVmaW5pbmcgdGhlIGFycmF5IG9mIHRyYWNlIGxldmVscywgcHJvdmlkZWQgYnkgYHNyYy9iYXNlL2Z0ZGVidWcuYycgKi8KKyAgZXh0ZXJuIGludCAgZnRfdHJhY2VfbGV2ZWxzW3RyYWNlX2NvdW50XTsKKworI3VuZGVmIEZUX1RSQUNFX0RFRgorCisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIHRoZSBGVF9UUkFDRSBtYWNybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJTVBPUlRBTlQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVhY2ggY29tcG9uZW50IG11c3QgZGVmaW5lIHRoZSBtYWNybyBGVF9DT01QT05FTlQgdG8gYSB2YWxpZCBGVF9UcmFjZSAqLworICAvKiB2YWx1ZSBiZWZvcmUgdXNpbmcgYW55IFRSQUNFIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworI2RlZmluZSBGVF9UUkFDRSggbGV2ZWwsIHZhcmZvcm1hdCApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCBmdF90cmFjZV9sZXZlbHNbRlRfQ09NUE9ORU5UXSA+PSBsZXZlbCApIFwKKyAgICAgICAgICAgICAgRlRfTWVzc2FnZSB2YXJmb3JtYXQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQorCisjZWxzZSAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworI2RlZmluZSBGVF9UUkFDRSggbGV2ZWwsIHZhcmZvcm1hdCApICBkbyB7IH0gd2hpbGUgKCAwICkgICAgICAvKiBub3RoaW5nICovCisKKyNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1RyYWNlX0dldF9Db3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSB0cmFjZSBjb21wb25lbnRzLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBudW1iZXIgb2YgdHJhY2UgY29tcG9uZW50cy4gIDAgaWYgRnJlZVR5cGUgMiBpcyBub3QgYnVpbHQgd2l0aCAqLworICAvKiAgICBGVF9ERUJVR19MRVZFTF9UUkFDRSBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYWNjZXNzIGVsZW1lbnRzIG9mICAgICAgKi8KKyAgLyogICAgdGhlIGludGVybmFsIGBmdF90cmFjZV9sZXZlbHMnIGFycmF5IGJ5IGFuIGluZGV4LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9JbnQgKQorICBGVF9UcmFjZV9HZXRfQ291bnQoIHZvaWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1RyYWNlX0dldF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiB0aGUgbmFtZSBvZiBhIHRyYWNlIGNvbXBvbmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBpbmRleCBvZiB0aGUgdHJhY2UgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBuYW1lIG9mIHRoZSB0cmFjZSBjb21wb25lbnQuICBUaGlzIGlzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgICAqLworICAvKiAgICBDIHN0cmluZywgc28gZG8gbm90IGZyZWUgaXQgYWZ0ZXIgdXNlLiAgTlVMTCBpZiBGcmVlVHlwZSAyIGlzIG5vdCAgKi8KKyAgLyogICAgYnVpbHQgd2l0aCBGVF9ERUJVR19MRVZFTF9UUkFDRSBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlIEBGVF9UcmFjZV9HZXRfQ291bnQgdG8gZ2V0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHRyYWNlICAgICAgICovCisgIC8qICAgIGNvbXBvbmVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgRnJlZVR5cGUgMidzICAgICovCisgIC8qICAgIGRlYnVnIGxldmVsIGluIHlvdXIgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggY29uc3QgY2hhciogKQorICBGVF9UcmFjZV9HZXRfTmFtZSggRlRfSW50ICBpZHggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWW91IG5lZWQgdHdvIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW50aGVzZXMhICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFeGFtcGxlOiBGVF9UUkFDRTAoKCAiVmFsdWUgaXMgJWkiLCBmb28gKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE91dHB1dCBvZiB0aGUgRlRfVFJBQ0VYIG1hY3JvcyBpcyBzZW50IHRvIHN0ZGVyci4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRlRfVFJBQ0UwKCB2YXJmb3JtYXQgKSAgRlRfVFJBQ0UoIDAsIHZhcmZvcm1hdCApCisjZGVmaW5lIEZUX1RSQUNFMSggdmFyZm9ybWF0ICkgIEZUX1RSQUNFKCAxLCB2YXJmb3JtYXQgKQorI2RlZmluZSBGVF9UUkFDRTIoIHZhcmZvcm1hdCApICBGVF9UUkFDRSggMiwgdmFyZm9ybWF0ICkKKyNkZWZpbmUgRlRfVFJBQ0UzKCB2YXJmb3JtYXQgKSAgRlRfVFJBQ0UoIDMsIHZhcmZvcm1hdCApCisjZGVmaW5lIEZUX1RSQUNFNCggdmFyZm9ybWF0ICkgIEZUX1RSQUNFKCA0LCB2YXJmb3JtYXQgKQorI2RlZmluZSBGVF9UUkFDRTUoIHZhcmZvcm1hdCApICBGVF9UUkFDRSggNSwgdmFyZm9ybWF0ICkKKyNkZWZpbmUgRlRfVFJBQ0U2KCB2YXJmb3JtYXQgKSAgRlRfVFJBQ0UoIDYsIHZhcmZvcm1hdCApCisjZGVmaW5lIEZUX1RSQUNFNyggdmFyZm9ybWF0ICkgIEZUX1RSQUNFKCA3LCB2YXJmb3JtYXQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgdGhlIEZUX0VSUk9SIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE91dHB1dCBvZiB0aGlzIG1hY3JvIGlzIHNlbnQgdG8gc3RkZXJyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgorCisjZGVmaW5lIEZUX0VSUk9SKCB2YXJmb3JtYXQgKSAgRlRfTWVzc2FnZSAgdmFyZm9ybWF0CisKKyNlbHNlICAvKiAhRlRfREVCVUdfTEVWRUxfRVJST1IgKi8KKworI2RlZmluZSBGVF9FUlJPUiggdmFyZm9ybWF0ICkgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAgIC8qIG5vdGhpbmcgKi8KKworI2VuZGlmIC8qICFGVF9ERUJVR19MRVZFTF9FUlJPUiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgdGhlIEZUX0FTU0VSVCBhbmQgRlRfVEhST1cgbWFjcm9zLiAgVGhlIGNhbGwgdG8gYEZUX1Rocm93JyAgICAgKi8KKyAgLyogbWFrZXMgaXQgcG9zc2libGUgdG8gZWFzaWx5IHNldCBhIGJyZWFrcG9pbnQgYXQgdGhpcyBmdW5jdGlvbi4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX0VSUk9SCisKKyNkZWZpbmUgRlRfQVNTRVJUKCBjb25kaXRpb24gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggISggY29uZGl0aW9uICkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBGVF9QYW5pYyggImFzc2VydGlvbiBmYWlsZWQgb24gbGluZSAlZCBvZiBmaWxlICVzXG4iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX0xJTkVfXywgX19GSUxFX18gKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9IHdoaWxlICggMCApCisKKyNkZWZpbmUgRlRfVEhST1coIGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggRlRfVGhyb3coIEZUX0VSUl9DQVQoIEZUX0VSUl9QUkVGSVgsIGUgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXyApICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgRlRfRVJSX0NBVCggRlRfRVJSX1BSRUZJWCwgZSApICAgICAgICAgICAgKQorCisjZWxzZSAvKiAhRlRfREVCVUdfTEVWRUxfRVJST1IgKi8KKworI2RlZmluZSBGVF9BU1NFUlQoIGNvbmRpdGlvbiApICBkbyB7IH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBGVF9USFJPVyggZSApICBGVF9FUlJfQ0FUKCBGVF9FUlJfUFJFRklYLCBlICkKKworI2VuZGlmIC8qICFGVF9ERUJVR19MRVZFTF9FUlJPUiAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEZWZpbmUgYEZUX01lc3NhZ2UnIGFuZCBgRlRfUGFuaWMnIHdoZW4gbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKKworI2luY2x1ZGUgInN0ZGlvLmgiICAvKiBmb3IgdmZwcmludGYoKSAqLworCisgIC8qIHByaW50IGEgbWVzc2FnZSAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfTWVzc2FnZSggY29uc3QgY2hhciogIGZtdCwKKyAgICAgICAgICAgICAgLi4uICk7CisKKyAgLyogcHJpbnQgYSBtZXNzYWdlIGFuZCBleGl0ICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9QYW5pYyggY29uc3QgY2hhciogIGZtdCwKKyAgICAgICAgICAgIC4uLiApOworCisgIC8qIHJlcG9ydCBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIG9mIGFuIGVycm9yICovCisgIEZUX0JBU0UoIGludCApCisgIEZUX1Rocm93KCBGVF9FcnJvciAgICAgZXJyb3IsCisgICAgICAgICAgICBpbnQgICAgICAgICAgbGluZSwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlICk7CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLworCisKKyAgRlRfQkFTRSggdm9pZCApCisgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKTsKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVERFQlVHX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRkcml2ZXIuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0ZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4NTZkMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0ZHJpdmVyLmgKQEAgLTAsMCArMSw0MDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0ZHJpdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZURFJJVkVSX0hfXworI2RlZmluZSBfX0ZURFJJVkVSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfTU9EVUxFX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9GYWNlX0luaXRGdW5jKSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICB0eXBlZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1ldGVycyApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkZUX0ZhY2VfRG9uZUZ1bmMpKCBGVF9GYWNlICBmYWNlICk7CisKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2l6ZV9Jbml0RnVuYykoIEZUX1NpemUgIHNpemUgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9TaXplX0RvbmVGdW5jKSggRlRfU2l6ZSAgc2l6ZSApOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1Nsb3RfSW5pdEZ1bmMpKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9TbG90X0RvbmVGdW5jKSggRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2l6ZV9SZXF1ZXN0RnVuYykoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2l6ZV9TZWxlY3RGdW5jKSggRlRfU2l6ZSAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHNpemVfaW5kZXggKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2xvdF9Mb2FkRnVuYykoIEZUX0dseXBoU2xvdCAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKTsKKworCisgIHR5cGVkZWYgRlRfVUludAorICAoKkZUX0NoYXJNYXBfQ2hhckluZGV4RnVuYykoIEZUX0NoYXJNYXAgIGNoYXJtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgY2hhcmNvZGUgKTsKKworICB0eXBlZGVmIEZUX0xvbmcKKyAgKCpGVF9DaGFyTWFwX0NoYXJOZXh0RnVuYykoIEZUX0NoYXJNYXAgIGNoYXJtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBjaGFyY29kZSApOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0ZhY2VfR2V0S2VybmluZ0Z1bmMpKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAga2VybmluZyApOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0ZhY2VfQXR0YWNoRnVuYykoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jKSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBhZHZhbmNlcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRHJpdmVyX0NsYXNzUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZvbnQgZHJpdmVyIGNsYXNzLiAgVGhpcyBzdHJ1Y3R1cmUgbW9zdGx5IGNvbnRhaW5zIHBvaW50ZXJzIHRvICovCisgIC8qICAgIGRyaXZlciBtZXRob2RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJvb3QgICAgICAgICAgICAgOjogVGhlIHBhcmVudCBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9vYmplY3Rfc2l6ZSA6OiBUaGUgc2l6ZSBvZiBhIGZhY2Ugb2JqZWN0IGluIGJ5dGVzLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplX29iamVjdF9zaXplIDo6IFRoZSBzaXplIG9mIGEgc2l6ZSBvYmplY3QgaW4gYnl0ZXMuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNsb3Rfb2JqZWN0X3NpemUgOjogVGhlIHNpemUgb2YgYSBnbHlwaCBvYmplY3QgaW4gYnl0ZXMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5pdF9mYWNlICAgICAgICA6OiBUaGUgZm9ybWF0LXNwZWNpZmljIGZhY2UgY29uc3RydWN0b3IuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkb25lX2ZhY2UgICAgICAgIDo6IFRoZSBmb3JtYXQtc3BlY2lmaWMgZmFjZSBkZXN0cnVjdG9yLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluaXRfc2l6ZSAgICAgICAgOjogVGhlIGZvcm1hdC1zcGVjaWZpYyBzaXplIGNvbnN0cnVjdG9yLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZG9uZV9zaXplICAgICAgICA6OiBUaGUgZm9ybWF0LXNwZWNpZmljIHNpemUgZGVzdHJ1Y3Rvci4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbml0X3Nsb3QgICAgICAgIDo6IFRoZSBmb3JtYXQtc3BlY2lmaWMgc2xvdCBjb25zdHJ1Y3Rvci4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRvbmVfc2xvdCAgICAgICAgOjogVGhlIGZvcm1hdC1zcGVjaWZpYyBzbG90IGRlc3RydWN0b3IuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZ2x5cGggICAgICAgOjogQSBmdW5jdGlvbiBoYW5kbGUgdG8gbG9hZCBhIGdseXBoIHRvIGEgc2xvdC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgbWFuZGF0b3J5ISAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdldF9rZXJuaW5nICAgICAgOjogQSBmdW5jdGlvbiBoYW5kbGUgdG8gcmV0dXJuIHRoZSB1bnNjYWxlZCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgZm9yIGEgZ2l2ZW4gcGFpciBvZiBnbHlwaHMuICBDYW4gYmUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gMCBpZiB0aGUgZm9ybWF0IGRvZXNuJ3Qgc3VwcG9ydCAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAga2VybmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXR0YWNoX2ZpbGUgICAgICA6OiBUaGlzIGZ1bmN0aW9uIGhhbmRsZSBpcyB1c2VkIHRvIHJlYWQgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBkYXRhIGZvciBhIGZhY2UgZnJvbSBhbm90aGVyICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUvc3RyZWFtLiAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlIHVzZWQgdG8gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBhZGQgZGF0YSBmcm9tIEFGTSBvciBQRk0gZmlsZXMgb24gYSBUeXBlIDEgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwgb3IgYSBDSURNYXAgb24gYSBDSUQta2V5ZWQgZmFjZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2V0X2FkdmFuY2VzICAgICA6OiBBIGZ1bmN0aW9uIGhhbmRsZSB1c2VkIHRvIHJldHVybiBhZHZhbmNlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzIG9mIGBjb3VudCcgZ2x5cGhzIChpbiBmb250IHVuaXRzKSwgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IGBmaXJzdCcuICBUaGUgYHZlcnRpY2FsJyBmbGFnIG11c3QgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXQgdG8gZ2V0IHZlcnRpY2FsIGFkdmFuY2UgaGVpZ2h0cy4gIFRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgYGFkdmFuY2VzJyBidWZmZXIgaXMgY2FsbGVyLWFsbG9jYXRlZC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpZGVhIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgYWJsZSB0byAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtIGRldmljZS1pbmRlcGVuZGVudCB0ZXh0IGxheW91dCB3aXRob3V0ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZyBhIHNpbmdsZSBnbHlwaCBpbWFnZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmVxdWVzdF9zaXplICAgICA6OiBBIGhhbmRsZSB0byBhIGZ1bmN0aW9uIHVzZWQgdG8gcmVxdWVzdCB0aGUgbmV3ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNpemUuICBDYW4gYmUgc2V0IHRvIDAgaWYgdGhlICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgZG9uZSBpbiB0aGUgYmFzZSBsYXllciBzdWZmaWNlcy4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNlbGVjdF9zaXplICAgICAgOjogQSBoYW5kbGUgdG8gYSBmdW5jdGlvbiB1c2VkIHRvIHNlbGVjdCBhIG5ldyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIHNpemUuICBJdCBpcyB1c2VkIG9ubHkgaWYgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIGlzIHNldC4gIENhbiBiZSBzZXQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgdG8gMCBpZiB0aGUgc2NhbGluZyBkb25lIGluIHRoZSBiYXNlIGxheWVyICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE1vc3QgZnVuY3Rpb24gcG9pbnRlcnMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgbG9hZF9nbHlwaCcsIGNhbiBiZSAqLworICAvKiAgICBzZXQgdG8gMCB0byBpbmRpY2F0ZSBhIGRlZmF1bHQgYmVoYXZpb3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9Ecml2ZXJfQ2xhc3NSZWNfCisgIHsKKyAgICBGVF9Nb2R1bGVfQ2xhc3MgICAgICAgICAgcm9vdDsKKworICAgIEZUX0xvbmcgICAgICAgICAgICAgICAgICBmYWNlX29iamVjdF9zaXplOworICAgIEZUX0xvbmcgICAgICAgICAgICAgICAgICBzaXplX29iamVjdF9zaXplOworICAgIEZUX0xvbmcgICAgICAgICAgICAgICAgICBzbG90X29iamVjdF9zaXplOworCisgICAgRlRfRmFjZV9Jbml0RnVuYyAgICAgICAgIGluaXRfZmFjZTsKKyAgICBGVF9GYWNlX0RvbmVGdW5jICAgICAgICAgZG9uZV9mYWNlOworCisgICAgRlRfU2l6ZV9Jbml0RnVuYyAgICAgICAgIGluaXRfc2l6ZTsKKyAgICBGVF9TaXplX0RvbmVGdW5jICAgICAgICAgZG9uZV9zaXplOworCisgICAgRlRfU2xvdF9Jbml0RnVuYyAgICAgICAgIGluaXRfc2xvdDsKKyAgICBGVF9TbG90X0RvbmVGdW5jICAgICAgICAgZG9uZV9zbG90OworCisgICAgRlRfU2xvdF9Mb2FkRnVuYyAgICAgICAgIGxvYWRfZ2x5cGg7CisKKyAgICBGVF9GYWNlX0dldEtlcm5pbmdGdW5jICAgZ2V0X2tlcm5pbmc7CisgICAgRlRfRmFjZV9BdHRhY2hGdW5jICAgICAgIGF0dGFjaF9maWxlOworICAgIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICBnZXRfYWR2YW5jZXM7CisKKyAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuMiAqLworICAgIEZUX1NpemVfUmVxdWVzdEZ1bmMgICAgICByZXF1ZXN0X3NpemU7CisgICAgRlRfU2l6ZV9TZWxlY3RGdW5jICAgICAgIHNlbGVjdF9zaXplOworCisgIH0gRlRfRHJpdmVyX0NsYXNzUmVjLCAqRlRfRHJpdmVyX0NsYXNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfREVDTEFSRV9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlZCB0byBjcmVhdGUgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGFuIEZUX0RyaXZlcl9DbGFzc1JlYyAgICAgICovCisgIC8qICAgIHN0cnVjdCBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9Ecml2ZXJfQ2xhc3NSZWMgc3RydWN0LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVuY3Rpb24gaGFzIHRvIGJlICovCisgIC8qICAgIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB3aGVyZSB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBpcyByZXR1cm5lZC4gICAqLworICAvKiAgICBBbmQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIGEgYGRlc3Ryb3knIGZ1bmN0aW9uIG5lZWRzIHRvIGJlICAgKi8KKyAgLyogICAgY2FsbGVkIHRvIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgZmNpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyBhICAgKi8KKyAgLyogICAgbWVjaGFuaXNtIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGZvciB0aGUgZGVmYXVsdCBtb2R1bGVzICAgICAgICAgICovCisgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90aWNlIHRoYXQgdGhlIGNyZWF0ZWQgYGNyZWF0ZScgYW5kIGBkZXN0cm95JyBmdW5jdGlvbnMgY2FsbCAgICAgICovCisgIC8qICAgIGBwaWNfaW5pdCcgYW5kIGBwaWNfZnJlZScgdG8gYWxsb3cgeW91IHRvIG1hbnVhbGx5IGFsbG9jYXRlIGFuZCAgICAqLworICAvKiAgICBpbml0aWFsaXplIGFueSBhZGRpdGlvbmFsIGdsb2JhbCBkYXRhLCBsaWtlIGEgbW9kdWxlIHNwZWNpZmljICAgICAgKi8KKyAgLyogICAgaW50ZXJmYWNlLCBhbmQgcHV0IHRoZW0gaW4gdGhlIGdsb2JhbCBwaWMgY29udGFpbmVyIGRlZmluZWQgaW4gICAgICovCisgIC8qICAgIGBmdHBpYy5oJy4gIElmIHlvdSBkb24ndCBuZWVkIHRoZW0ganVzdCBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9ucyBhcyAqLworICAvKiAgICBlbXB0eSB0byByZXNvbHZlIHRoZSBsaW5rIGVycm9yLiAgQWxzbyB0aGUgYHBpY19pbml0JyBhbmQgICAgICAgICAgKi8KKyAgLyogICAgYHBpY19mcmVlJyBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIGBwaWMuaCcsIHRvIGJlIHJlZmVycmVkICovCisgIC8qICAgIGJ5IGRyaXZlciBkZWZpbml0aW9uIGNhbGxpbmcgYEZUX0RFRklORV9EUklWRVInIGluIGZvbGxvd2luZy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgc3RydWN0IHdpbGwgYmUgICAgICAgICovCisgIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvIGlzICAgICAqLworICAvKiAgICB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVDTEFSRV9EUklWRVIoIGNsYXNzXyApICBcCisgIEZUX0NBTExCQUNLX1RBQkxFICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIGNsYXNzXzsKKworI2RlZmluZSBGVF9ERUZJTkVfRFJJVkVSKCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZsYWdzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9pbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZhY2Vfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNsb3Rfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfc2xvdF8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfc2xvdF8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfZ2x5cGhfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9rZXJuaW5nXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGF0dGFjaF9maWxlXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9hZHZhbmNlc18sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVlc3Rfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNlbGVjdF9zaXplXyApICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIGNsYXNzXyA9ICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0RFRklORV9ST09UX01PRFVMRSggZmxhZ3NfLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZhY2Vfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNsb3Rfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGluaXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGluaXRfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGluaXRfc2xvdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfc2xvdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfZ2x5cGhfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9rZXJuaW5nXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGF0dGFjaF9maWxlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9hZHZhbmNlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcXVlc3Rfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNlbGVjdF9zaXplXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0RFQ0xBUkVfRFJJVkVSKCBjbGFzc18gKSAgRlRfREVDTEFSRV9NT0RVTEUoIGNsYXNzXyApCisKKyNkZWZpbmUgRlRfREVGSU5FX0RSSVZFUiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9pbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZmFjZV9vYmplY3Rfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplX29iamVjdF9zaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNsb3Rfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lX2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG9uZV9zaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbml0X3Nsb3RfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfc2xvdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfa2VybmluZ18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGF0dGFjaF9maWxlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X2FkdmFuY2VzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXF1ZXN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNlbGVjdF9zaXplXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICkgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0RyaXZlcl9DbGFzcyAgZGNsYXp6ID0gKEZUX0RyaXZlcl9DbGFzcyljbGF6ejsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXNzXyAjIyBfcGljX2ZyZWUoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBkY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGRjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyoqICBvdXRwdXRfY2xhc3MgKSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfRHJpdmVyX0NsYXNzICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSApICkgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVycm9yID0gY2xhc3NfICMjIF9waWNfaW5pdCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBlcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfREVGSU5FX1JPT1RfTU9EVUxFKCBmbGFnc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+ZmFjZV9vYmplY3Rfc2l6ZSA9IGZhY2Vfb2JqZWN0X3NpemVfOyAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5zaXplX29iamVjdF9zaXplID0gc2l6ZV9vYmplY3Rfc2l6ZV87ICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnNsb3Rfb2JqZWN0X3NpemUgPSBzbG90X29iamVjdF9zaXplXzsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5pbml0X2ZhY2UgICAgICAgID0gaW5pdF9mYWNlXzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmRvbmVfZmFjZSAgICAgICAgPSBkb25lX2ZhY2VfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5pbml0X3NpemUgICAgICAgID0gaW5pdF9zaXplXzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmRvbmVfc2l6ZSAgICAgICAgPSBkb25lX3NpemVfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5pbml0X3Nsb3QgICAgICAgID0gaW5pdF9zbG90XzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmRvbmVfc2xvdCAgICAgICAgPSBkb25lX3Nsb3RfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2dseXBoICAgICAgID0gbG9hZF9nbHlwaF87ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X2tlcm5pbmcgICAgICA9IGdldF9rZXJuaW5nXzsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5hdHRhY2hfZmlsZSAgICAgID0gYXR0YWNoX2ZpbGVfOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9hZHZhbmNlcyAgICAgPSBnZXRfYWR2YW5jZXNfOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5yZXF1ZXN0X3NpemUgICAgID0gcmVxdWVzdF9zaXplXzsgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnNlbGVjdF9zaXplICAgICAgPSBzZWxlY3Rfc2l6ZV87ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSAoRlRfTW9kdWxlX0NsYXNzKiljbGF6ejsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlREUklWRVJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdGdsb2Fkci5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRnbG9hZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzBkZDcwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRnbG9hZHIuaApAQCAtMCwwICsxLDE3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRnbG9hZHIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRHTE9BRFJfSF9fCisjZGVmaW5lIF9fRlRHTE9BRFJfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaExvYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZ2x5cGggbG9hZGVyIGlzIGFuIGludGVybmFsIG9iamVjdCB1c2VkIHRvIGxvYWQgc2V2ZXJhbCBnbHlwaHMgKi8KKyAgLyogICAgdG9nZXRoZXIgKGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBjb21wb3NpdGVzKS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGdseXBoIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgaGlnaC1sZXZlbCBBUEksICovCisgIC8qICAgIGhlbmNlIHRoZSBmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfR2x5cGhMb2FkZXJSZWNfKiAgRlRfR2x5cGhMb2FkZXIgOworCisKKyNpZiAwICAvKiBtb3ZlZCB0byBmcmVldHlwZS5oIGluIHZlcnNpb24gMi4yICovCisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMgICAgICAgICAgMQorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyAgICAgIDIKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEICAgICAgICA0CisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfU0NBTEUgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1hZX1NDQUxFICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR18yWDIgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfVVNFX01ZX01FVFJJQ1MgICAgICAweDIwMAorI2VuZGlmCisKKworICB0eXBlZGVmIHN0cnVjdCAgRlRfU3ViR2x5cGhSZWNfCisgIHsKKyAgICBGVF9JbnQgICAgIGluZGV4OworICAgIEZUX1VTaG9ydCAgZmxhZ3M7CisgICAgRlRfSW50ICAgICBhcmcxOworICAgIEZUX0ludCAgICAgYXJnMjsKKyAgICBGVF9NYXRyaXggIHRyYW5zZm9ybTsKKworICB9IEZUX1N1YkdseXBoUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0dseXBoTG9hZFJlY18KKyAgeworICAgIEZUX091dGxpbmUgICBvdXRsaW5lOyAgICAgICAvKiBvdXRsaW5lICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfVmVjdG9yKiAgIGV4dHJhX3BvaW50czsgIC8qIGV4dHJhIHBvaW50cyB0YWJsZSAgICAgICAgKi8KKyAgICBGVF9WZWN0b3IqICAgZXh0cmFfcG9pbnRzMjsgLyogc2Vjb25kIGV4dHJhIHBvaW50cyB0YWJsZSAqLworICAgIEZUX1VJbnQgICAgICBudW1fc3ViZ2x5cGhzOyAvKiBudW1iZXIgb2Ygc3ViZ2x5cGhzICAgICAgICovCisgICAgRlRfU3ViR2x5cGggIHN1YmdseXBoczsgICAgIC8qIHN1YmdseXBocyAgICAgICAgICAgICAgICAgKi8KKworICB9IEZUX0dseXBoTG9hZFJlYywgKkZUX0dseXBoTG9hZDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVF9HbHlwaExvYWRlclJlY18KKyAgeworICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5OworICAgIEZUX1VJbnQgICAgICAgICAgbWF4X3BvaW50czsKKyAgICBGVF9VSW50ICAgICAgICAgIG1heF9jb250b3VyczsKKyAgICBGVF9VSW50ICAgICAgICAgIG1heF9zdWJnbHlwaHM7CisgICAgRlRfQm9vbCAgICAgICAgICB1c2VfZXh0cmE7CisKKyAgICBGVF9HbHlwaExvYWRSZWMgIGJhc2U7CisgICAgRlRfR2x5cGhMb2FkUmVjICBjdXJyZW50OworCisgICAgdm9pZCogICAgICAgICAgICBvdGhlcjsgICAgICAgICAgICAvKiBmb3IgcG9zc2libGUgZnV0dXJlIGV4dGVuc2lvbj8gKi8KKworICB9IEZUX0dseXBoTG9hZGVyUmVjOworCisKKyAgLyogY3JlYXRlIG5ldyBlbXB0eSBnbHlwaCBsb2FkZXIgKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9HbHlwaExvYWRlcl9OZXcoIEZUX01lbW9yeSAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyICAqYWxvYWRlciApOworCisgIC8qIGFkZCBhbiBleHRyYSBwb2ludHMgdGFibGUgdG8gYSBnbHlwaCBsb2FkZXIgKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9HbHlwaExvYWRlcl9DcmVhdGVFeHRyYSggRlRfR2x5cGhMb2FkZXIgIGxvYWRlciApOworCisgIC8qIGRlc3Ryb3kgYSBnbHlwaCBsb2FkZXIgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX0RvbmUoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKTsKKworICAvKiByZXNldCBhIGdseXBoIGxvYWRlciAoZnJlZXMgZXZlcnl0aGluZyBpbnQgaXQpICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9HbHlwaExvYWRlcl9SZXNldCggRlRfR2x5cGhMb2FkZXIgIGxvYWRlciApOworCisgIC8qIHJld2luZCBhIGdseXBoIGxvYWRlciAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfR2x5cGhMb2FkZXJfUmV3aW5kKCBGVF9HbHlwaExvYWRlciAgbG9hZGVyICk7CisKKyAgLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgdG8gYWRkIGBuX3BvaW50cycgYW5kIGBuX2NvbnRvdXJzJyAqLworICAvKiB0byB0aGUgZ2x5cGggbG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9jb250b3VycyApOworCisKKyNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCggX2xvYWRlciwgX2NvdW50ICkgICAgICAgXAorICAoIChfY291bnQpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgKCAoRlRfVUludCkoX2xvYWRlciktPmJhc2Uub3V0bGluZS5uX3BvaW50cyAgICArICAgIFwKKyAgICAgIChGVF9VSW50KShfbG9hZGVyKS0+Y3VycmVudC5vdXRsaW5lLm5fcG9pbnRzICsgICAgXAorICAgICAgKEZUX1VJbnQpKF9jb3VudCkgKSA8PSAoX2xvYWRlciktPm1heF9wb2ludHMgICApCisKKyNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfQyggX2xvYWRlciwgX2NvdW50ICkgICAgICAgICBcCisgICggKF9jb3VudCkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICggKEZUX1VJbnQpKF9sb2FkZXIpLT5iYXNlLm91dGxpbmUubl9jb250b3VycyAgICArICAgIFwKKyAgICAgIChGVF9VSW50KShfbG9hZGVyKS0+Y3VycmVudC5vdXRsaW5lLm5fY29udG91cnMgKyAgICBcCisgICAgICAoRlRfVUludCkoX2NvdW50KSApIDw9IChfbG9hZGVyKS0+bWF4X2NvbnRvdXJzICAgKQorCisjZGVmaW5lIEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggX2xvYWRlciwgX3BvaW50cywgX2NvbnRvdXJzICkgXAorICAoICggRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCggX2xvYWRlciwgX3BvaW50cyApICAgJiYgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0dMWVBITE9BREVSX0NIRUNLX0MoIF9sb2FkZXIsIF9jb250b3VycyApICkgICAgICAgICAgICAgICBcCisgICAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDogRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIChfbG9hZGVyKSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCkoX3BvaW50cyksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpKF9jb250b3VycykgKSApCisKKworICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSB0byBhZGQgYG5fc3Vicycgc3ViLWdseXBocyB0byAqLworICAvKiBhIGdseXBoIGxvYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX0dseXBoTG9hZGVyX0NoZWNrU3ViR2x5cGhzKCBGVF9HbHlwaExvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIG5fc3VicyApOworCisgIC8qIHByZXBhcmUgYSBnbHlwaCBsb2FkZXIsIGkuZS4gZW1wdHkgdGhlIGN1cnJlbnQgZ2x5cGggKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX1ByZXBhcmUoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKTsKKworICAvKiBhZGQgdGhlIGN1cnJlbnQgZ2x5cGggdG8gdGhlIGJhc2UgZ2x5cGggKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX0FkZCggRlRfR2x5cGhMb2FkZXIgIGxvYWRlciApOworCisgIC8qIGNvcHkgcG9pbnRzIGZyb20gb25lIGdseXBoIGxvYWRlciB0byBhbm90aGVyICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfQ29weVBvaW50cyggRlRfR2x5cGhMb2FkZXIgIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIgIHNvdXJjZSApOworCisgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUR0xPQURSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRtZW1vcnkuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0bWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjNTUzYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0bWVtb3J5LmgKQEAgLTAsMCArMSwzODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0bWVtb3J5LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgbWVtb3J5IG1hbmFnZW1lbnQgbWFjcm9zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUTUVNT1JZX0hfXworI2RlZmluZSBfX0ZUTUVNT1JZX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisjaW5jbHVkZSBGVF9UWVBFU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TRVRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGFuIGltcGxpY2l0IGBlcnJvcicgdmFyaWFibGUgdG8gYSBnaXZlbiAgKi8KKyAgLyogICAgZXhwcmVzc2lvbidzIHZhbHVlICh1c3VhbGx5IGEgZnVuY3Rpb24gY2FsbCksIGFuZCBjb252ZXJ0IGl0IHRvIGEgICovCisgIC8qICAgIGJvb2xlYW4gd2hpY2ggaXMgc2V0IHdoZW5ldmVyIHRoZSB2YWx1ZSBpcyAhPSAwLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfU0VUX0VSUk9SCisjZGVmaW5lIEZUX1NFVF9FUlJPUiggZXhwcmVzc2lvbiApIFwKKyAgICAgICAgICAoICggZXJyb3IgPSAoZXhwcmVzc2lvbikgKSAhPSAwICkKKworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gRSBNIE8gUiBZICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoKKyAgICogIEMrKyByZWZ1c2VzIHRvIGhhbmRsZSBzdGF0ZW1lbnRzIGxpa2UgcCA9ICh2b2lkKilhbnl0aGluZywgd2l0aCBgcCcgYQorICAgKiAgdHlwZWQgcG9pbnRlci4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBgdHlwZW9mJyBvcGVyYXRvciBpbiBzdGFuZGFyZAorICAgKiAgQysrLCB3ZSBoYXZlIHRvIHVzZSBhIHRlbXBsYXRlIHRvIGVtdWxhdGUgaXQuCisgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworICBleHRlcm4gIkMrKyIKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKgorICBjcGx1c3BsdXNfdHlwZW9mKCAgICAgICAgVCosCisgICAgICAgICAgICAgICAgICAgIHZvaWQgICp2ICkKKyAgeworICAgIHJldHVybiBzdGF0aWNfY2FzdCA8VCo+ICggdiApOworICB9CisKKyNkZWZpbmUgRlRfQVNTSUdOUCggcCwgdmFsICkgIChwKSA9IGNwbHVzcGx1c190eXBlb2YoIChwKSwgKHZhbCkgKQorCisjZWxzZQorCisjZGVmaW5lIEZUX0FTU0lHTlAoIHAsIHZhbCApICAocCkgPSAodmFsKQorCisjZW5kaWYKKworCisKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKworICBGVF9CQVNFKCBjb25zdCBjaGFyKiApICBfZnRfZGVidWdfZmlsZTsKKyAgRlRfQkFTRSggbG9uZyApICAgICAgICAgX2Z0X2RlYnVnX2xpbmVubzsKKworI2RlZmluZSBGVF9ERUJVR19JTk5FUiggZXhwICkgICggX2Z0X2RlYnVnX2ZpbGUgICA9IF9fRklMRV9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnRfZGVidWdfbGluZW5vID0gX19MSU5FX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHApICkKKworI2RlZmluZSBGVF9BU1NJR05QX0lOTkVSKCBwLCBleHAgKSAgKCBfZnRfZGVidWdfZmlsZSAgID0gX19GSUxFX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Z0X2RlYnVnX2xpbmVubyA9IF9fTElORV9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FTU0lHTlAoIHAsIGV4cCApICkKKworI2Vsc2UgLyogIUZUX0RFQlVHX01FTU9SWSAqLworCisjZGVmaW5lIEZUX0RFQlVHX0lOTkVSKCBleHAgKSAgICAgICAoZXhwKQorI2RlZmluZSBGVF9BU1NJR05QX0lOTkVSKCBwLCBleHAgKSAgRlRfQVNTSUdOUCggcCwgZXhwICkKKworI2VuZGlmIC8qICFGVF9ERUJVR19NRU1PUlkgKi8KKworCisgIC8qCisgICAqICBUaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciwgYW5kIHRoZSBlcnJvciBjb2RlCisgICAqICBpcyB3cml0dGVuIHRvIHRocm91Z2ggdGhlIGBwX2Vycm9yJyBwYXJhbWV0ZXIuICBTZWUgYmVsb3cgZm9yCisgICAqICBmb3IgZG9jdW1lbnRhdGlvbi4KKyAgICovCisKKyAgRlRfQkFTRSggRlRfUG9pbnRlciApCisgIGZ0X21lbV9hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBzaXplLAorICAgICAgICAgICAgICAgIEZUX0Vycm9yICAqcF9lcnJvciApOworCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fcWFsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBzaXplLAorICAgICAgICAgICAgICAgICBGVF9FcnJvciAgKnBfZXJyb3IgKTsKKworICBGVF9CQVNFKCBGVF9Qb2ludGVyICkKKyAgZnRfbWVtX3JlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBpdGVtX3NpemUsCisgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGN1cl9jb3VudCwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgbmV3X2NvdW50LAorICAgICAgICAgICAgICAgICAgdm9pZCogICAgICBibG9jaywKKyAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAqcF9lcnJvciApOworCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fcXJlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgaXRlbV9zaXplLAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgY3VyX2NvdW50LAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgbmV3X2NvdW50LAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IgICpwX2Vycm9yICk7CisKKyAgRlRfQkFTRSggdm9pZCApCisgIGZ0X21lbV9mcmVlKCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIFAgKTsKKworCisjZGVmaW5lIEZUX01FTV9BTExPQyggcHRyLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX2FsbG9jKCBtZW1vcnksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKHNpemUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fRlJFRSggcHRyICkgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZnRfbWVtX2ZyZWUoIG1lbW9yeSwgKHB0cikgKTsgXAorICAgICAgICAgICAgKHB0cikgPSBOVUxMOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIEZUX01FTV9ORVcoIHB0ciApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9BTExPQyggcHRyLCBzaXplb2YgKCAqKHB0cikgKSApCisKKyNkZWZpbmUgRlRfTUVNX1JFQUxMT0MoIHB0ciwgY3Vyc3osIG5ld3N6ICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcmVhbGxvYyggbWVtb3J5LCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoY3Vyc3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKG5ld3N6KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKSApCisKKyNkZWZpbmUgRlRfTUVNX1FBTExPQyggcHRyLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FhbGxvYyggbWVtb3J5LCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoc2l6ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUU5FVyggcHRyICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1FBTExPQyggcHRyLCBzaXplb2YgKCAqKHB0cikgKSApCisKKyNkZWZpbmUgRlRfTUVNX1FSRUFMTE9DKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jKCBtZW1vcnksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKGN1cnN6KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykobmV3c3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9BTExPQ19NVUxUKCBwdHIsIGNvdW50LCBpdGVtX3NpemUgKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShpdGVtX3NpemUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoY291bnQpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9SRUFMTE9DX01VTFQoIHB0ciwgb2xkY250LCBuZXdjbnQsIGl0bXN6ICkgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShpdG1zeiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKG9sZGNudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykobmV3Y250KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9RQUxMT0NfTVVMVCggcHRyLCBjb3VudCwgaXRlbV9zaXplICkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShpdGVtX3NpemUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShjb3VudCksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUVJFQUxMT0NfTVVMVCggcHRyLCBvbGRjbnQsIG5ld2NudCwgaXRtc3opICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoaXRtc3opLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykob2xkY250KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykobmV3Y250KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKSApCisKKworI2RlZmluZSBGVF9NRU1fU0VUX0VSUk9SKCBjb25kICkgICggKGNvbmQpLCBlcnJvciAhPSAwICkKKworCisjZGVmaW5lIEZUX01FTV9TRVQoIGRlc3QsIGJ5dGUsIGNvdW50ICkgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnRfbWVtc2V0KCBkZXN0LCBieXRlLCAoRlRfT2Zmc2V0KShjb3VudCkgKQorCisjZGVmaW5lIEZUX01FTV9DT1BZKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmdF9tZW1jcHkoIGRlc3QsIHNvdXJjZSwgKEZUX09mZnNldCkoY291bnQpICkKKworI2RlZmluZSBGVF9NRU1fTU9WRSggZGVzdCwgc291cmNlLCBjb3VudCApICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZ0X21lbW1vdmUoIGRlc3QsIHNvdXJjZSwgKEZUX09mZnNldCkoY291bnQpICkKKworCisjZGVmaW5lIEZUX01FTV9aRVJPKCBkZXN0LCBjb3VudCApICBGVF9NRU1fU0VUKCBkZXN0LCAwLCBjb3VudCApCisKKyNkZWZpbmUgRlRfWkVSTyggcCApICAgICAgICAgICAgICAgIEZUX01FTV9aRVJPKCBwLCBzaXplb2YgKCAqKHApICkgKQorCisKKyNkZWZpbmUgRlRfQVJSQVlfWkVSTyggZGVzdCwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9aRVJPKCBkZXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNvdW50KSAqIHNpemVvZiAoICooZGVzdCkgKSApCisKKyNkZWZpbmUgRlRfQVJSQVlfQ09QWSggZGVzdCwgc291cmNlLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9DT1BZKCBkZXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY291bnQpICogc2l6ZW9mICggKihkZXN0KSApICkKKworI2RlZmluZSBGVF9BUlJBWV9NT1ZFKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX01PVkUoIGRlc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjb3VudCkgKiBzaXplb2YgKCAqKGRlc3QpICkgKQorCisKKyAgLyoKKyAgICogIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWRkcmVzc2FibGUgZWxlbWVudHMgaW4gYW4gYXJyYXkuCisgICAqICBXZSBsaW1pdCBvdXJzZWx2ZXMgdG8gSU5UX01BWCwgcmF0aGVyIHRoYW4gVUlOVF9NQVgsIHRvIGF2b2lkCisgICAqICBhbnkgcHJvYmxlbXMuCisgICAqLworI2RlZmluZSBGVF9BUlJBWV9NQVgoIHB0ciApICAgICAgICAgICAoIEZUX0lOVF9NQVggLyBzaXplb2YgKCAqKHB0cikgKSApCisKKyNkZWZpbmUgRlRfQVJSQVlfQ0hFQ0soIHB0ciwgY291bnQgKSAgKCAoY291bnQpIDw9IEZUX0FSUkFZX01BWCggcHRyICkgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtYWNyb3MgZXhwZWN0IHRoYXQgdGhlaXIgcG9pbnRlciBhcmd1bWVudCBpcyAgKi8KKyAgLyogX3R5cGVkXyBpbiBvcmRlciB0byBhdXRvbWF0aWNhbGx5IGNvbXB1dGUgYXJyYXkgZWxlbWVudCBzaXplcy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZUX01FTV9ORVdfQVJSQVkoIHB0ciwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoICoocHRyKSApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoY291bnQpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9SRU5FV19BUlJBWSggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoICoocHRyKSApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKGN1cnN6KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykobmV3c3opLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9RTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoICoocHRyKSApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShjb3VudCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUVJFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykoY3Vyc3opLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZykobmV3c3opLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKSApCisKKyNkZWZpbmUgRlRfQUxMT0MoIHB0ciwgc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9BTExPQyggcHRyLCBzaXplICkgKQorCisjZGVmaW5lIEZUX1JFQUxMT0MoIHB0ciwgY3Vyc3osIG5ld3N6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX1JFQUxMT0MoIHB0ciwgY3Vyc3osIG5ld3N6ICkgKQorCisjZGVmaW5lIEZUX0FMTE9DX01VTFQoIHB0ciwgY291bnQsIGl0ZW1fc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9BTExPQ19NVUxUKCBwdHIsIGNvdW50LCBpdGVtX3NpemUgKSApCisKKyNkZWZpbmUgRlRfUkVBTExPQ19NVUxUKCBwdHIsIG9sZGNudCwgbmV3Y250LCBpdG1zeiApICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX1JFQUxMT0NfTVVMVCggcHRyLCBvbGRjbnQsICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2NudCwgaXRtc3ogKSApCisKKyNkZWZpbmUgRlRfUUFMTE9DKCBwdHIsIHNpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9NRU1fU0VUX0VSUk9SKCBGVF9NRU1fUUFMTE9DKCBwdHIsIHNpemUgKSApCisKKyNkZWZpbmUgRlRfUVJFQUxMT0MoIHB0ciwgY3Vyc3osIG5ld3N6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX1FSRUFMTE9DKCBwdHIsIGN1cnN6LCBuZXdzeiApICkKKworI2RlZmluZSBGVF9RQUxMT0NfTVVMVCggcHRyLCBjb3VudCwgaXRlbV9zaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX1FBTExPQ19NVUxUKCBwdHIsIGNvdW50LCBpdGVtX3NpemUgKSApCisKKyNkZWZpbmUgRlRfUVJFQUxMT0NfTVVMVCggcHRyLCBvbGRjbnQsIG5ld2NudCwgaXRtc3ogKSAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9RUkVBTExPQ19NVUxUKCBwdHIsIG9sZGNudCwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2NudCwgaXRtc3ogKSApCisKKyNkZWZpbmUgRlRfRlJFRSggcHRyICkgIEZUX01FTV9GUkVFKCBwdHIgKQorCisjZGVmaW5lIEZUX05FVyggcHRyICkgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9ORVcoIHB0ciApICkKKworI2RlZmluZSBGVF9ORVdfQVJSQVkoIHB0ciwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9NRU1fU0VUX0VSUk9SKCBGVF9NRU1fTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgKQorCisjZGVmaW5lIEZUX1JFTkVXX0FSUkFZKCBwdHIsIGN1cmNudCwgbmV3Y250ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX1JFTkVXX0FSUkFZKCBwdHIsIGN1cmNudCwgbmV3Y250ICkgKQorCisjZGVmaW5lIEZUX1FORVcoIHB0ciApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9RTkVXKCBwdHIgKSApCisKKyNkZWZpbmUgRlRfUU5FV19BUlJBWSggcHRyLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX1NFVF9FUlJPUiggRlRfTUVNX05FV19BUlJBWSggcHRyLCBjb3VudCApICkKKworI2RlZmluZSBGVF9RUkVORVdfQVJSQVkoIHB0ciwgY3VyY250LCBuZXdjbnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9SRU5FV19BUlJBWSggcHRyLCBjdXJjbnQsIG5ld2NudCApICkKKworCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fc3RyZHVwKCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgc3RyLAorICAgICAgICAgICAgICAgICBGVF9FcnJvciAgICAqcF9lcnJvciApOworCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fZHVwKCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgYWRkcmVzcywKKyAgICAgICAgICAgICAgRlRfVUxvbmcgICAgIHNpemUsCisgICAgICAgICAgICAgIEZUX0Vycm9yICAgICpwX2Vycm9yICk7CisKKworI2RlZmluZSBGVF9NRU1fU1RSRFVQKCBkc3QsIHN0ciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKGRzdCkgPSAoY2hhciopZnRfbWVtX3N0cmR1cCggbWVtb3J5LCAoY29uc3QgY2hhciopKHN0ciksICZlcnJvciApCisKKyNkZWZpbmUgRlRfU1RSRFVQKCBkc3QsIHN0ciApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9TRVRfRVJST1IoIEZUX01FTV9TVFJEVVAoIGRzdCwgc3RyICkgKQorCisjZGVmaW5lIEZUX01FTV9EVVAoIGRzdCwgYWRkcmVzcywgc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChkc3QpID0gZnRfbWVtX2R1cCggbWVtb3J5LCAoYWRkcmVzcyksIChGVF9VTG9uZykoc2l6ZSksICZlcnJvciApCisKKyNkZWZpbmUgRlRfRFVQKCBkc3QsIGFkZHJlc3MsIHNpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9NRU1fU0VUX0VSUk9SKCBGVF9NRU1fRFVQKCBkc3QsIGFkZHJlc3MsIHNpemUgKSApCisKKworICAvKiBSZXR1cm4gPj0gMSBpZiBhIHRydW5jYXRpb24gb2NjdXJzLiAgICAgICAgICAgICovCisgIC8qIFJldHVybiAwIGlmIHRoZSBzb3VyY2Ugc3RyaW5nIGZpdHMgdGhlIGJ1ZmZlci4gKi8KKyAgLyogVGhpcyBpcyAqbm90KiB0aGUgc2FtZSBhcyBzdHJsY3B5KCkuICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9JbnQgKQorICBmdF9tZW1fc3RyY3B5biggY2hhciogICAgICAgIGRzdCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzcmMsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgc2l6ZSApOworCisjZGVmaW5lIEZUX1NUUkNQWU4oIGRzdCwgc3JjLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmdF9tZW1fc3RyY3B5biggKGNoYXIqKWRzdCwgKGNvbnN0IGNoYXIqKShzcmMpLCAoRlRfVUxvbmcpKHNpemUpICkKKworIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVE1FTU9SWV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMTdhNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oCkBAIC0wLDAgKzEsMTU3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwcml2YXRlIGJhc2UgY2xhc3NlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBhbGwgaW50ZXJuYWwgRnJlZVR5cGUgY2xhc3Nlcy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRPQkpTX0hfXworI2RlZmluZSBfX0ZUT0JKU19IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9SRU5ERVJfSAorI2luY2x1ZGUgRlRfU0laRVNfSAorI2luY2x1ZGUgRlRfTENEX0ZJTFRFUl9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfR0xZUEhfTE9BREVSX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9BVVRPSElOVF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisjaW5jbHVkZSBGVF9JTkNSRU1FTlRBTF9ICisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU29tZSBnZW5lcmljIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgIDEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZW5kaWYKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgICh2b2lkKikwCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1pbiBhbmQgbWF4IGZ1bmN0aW9ucyBtaXNzaW5nIGluIEMuICBBcyB1c3VhbCwgYmUgY2FyZWZ1bCBub3QgdG8gICovCisgIC8qIHdyaXRlIHRoaW5ncyBsaWtlIEZUX01JTiggYSsrLCBiKysgKSB0byBhdm9pZCBzaWRlIGVmZmVjdHMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfTUlOKCBhLCBiICkgICggKGEpIDwgKGIpID8gKGEpIDogKGIpICkKKyNkZWZpbmUgRlRfTUFYKCBhLCBiICkgICggKGEpID4gKGIpID8gKGEpIDogKGIpICkKKworI2RlZmluZSBGVF9BQlMoIGEgKSAgICAgKCAoYSkgPCAwID8gLShhKSA6IChhKSApCisKKyAgLyoKKyAgICogIEFwcHJveGltYXRlIHNxcnQoeCp4K3kqeSkgdXNpbmcgdGhlIGBhbHBoYSBtYXggcGx1cyBiZXRhIG1pbicKKyAgICogIGFsZ29yaXRobS4gIFdlIHVzZSBhbHBoYSA9IDEsIGJldGEgPSAzLzgsIGdpdmluZyB1cyByZXN1bHRzIHdpdGggYQorICAgKiAgbGFyZ2VzdCBlcnJvciBsZXNzIHRoYW4gNyUgY29tcGFyZWQgdG8gdGhlIGV4YWN0IHZhbHVlLgorICAgKi8KKyNkZWZpbmUgRlRfSFlQT1QoIHgsIHkgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggeCA9IEZUX0FCUyggeCApLCAgICAgICAgICAgICBcCisgICAgICAgICAgICB5ID0gRlRfQUJTKCB5ICksICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHggPiB5ID8geCArICggMyAqIHkgPj4gMyApICAgXAorICAgICAgICAgICAgICAgICAgOiB5ICsgKCAzICogeCA+PiAzICkgKQorCisgIC8qIHdlIHVzZSB0aGUgVFlQRU9GIG1hY3JvIHRvIHN1cHByZXNzIHNpZ25lZG5lc3MgY29tcGlsYXRpb24gd2FybmluZ3MgKi8KKyNkZWZpbmUgRlRfUEFEX0ZMT09SKCB4LCBuICkgICggKHgpICYgflRZUEVPRiggeCApKCAobiktMSApICkKKyNkZWZpbmUgRlRfUEFEX1JPVU5EKCB4LCBuICkgIEZUX1BBRF9GTE9PUiggKHgpICsgKChuKS8yKSwgbiApCisjZGVmaW5lIEZUX1BBRF9DRUlMKCB4LCBuICkgICBGVF9QQURfRkxPT1IoICh4KSArICgobiktMSksIG4gKQorCisjZGVmaW5lIEZUX1BJWF9GTE9PUiggeCApICAgICAoICh4KSAmIH5UWVBFT0YoIHggKTYzICkKKyNkZWZpbmUgRlRfUElYX1JPVU5EKCB4ICkgICAgIEZUX1BJWF9GTE9PUiggKHgpICsgMzIgKQorI2RlZmluZSBGVF9QSVhfQ0VJTCggeCApICAgICAgRlRfUElYX0ZMT09SKCAoeCkgKyA2MyApCisKKworICAvKgorICAgKiAgY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyAtLSBzaW5jZSB0aGVzZSBhcmUgdXNlZCB0byBwYXJzZQorICAgKiAgZm9udCBmaWxlcywgd2UgbXVzdCBub3QgdXNlIHRob3NlIGluIDxjdHlwZXMuaD4gd2hpY2ggYXJlCisgICAqICBsb2NhbGUtZGVwZW5kZW50CisgICAqLworI2RlZmluZSAgZnRfaXNkaWdpdCggeCApICAgKCAoICh1bnNpZ25lZCkoeCkgLSAnMCcgKSA8IDEwVSApCisKKyNkZWZpbmUgIGZ0X2lzeGRpZ2l0KCB4ICkgICggKCAodW5zaWduZWQpKHgpIC0gJzAnICkgPCAxMFUgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICh1bnNpZ25lZCkoeCkgLSAnYScgKSA8IDZVICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkKSh4KSAtICdBJyApIDwgNlUgICkKKworICAvKiB0aGUgbmV4dCB0d28gbWFjcm9zIGFzc3VtZSBBU0NJSSByZXByZXNlbnRhdGlvbiAqLworI2RlZmluZSAgZnRfaXN1cHBlciggeCApICAoICggKHVuc2lnbmVkKSh4KSAtICdBJyApIDwgMjZVICkKKyNkZWZpbmUgIGZ0X2lzbG93ZXIoIHggKSAgKCAoICh1bnNpZ25lZCkoeCkgLSAnYScgKSA8IDI2VSApCisKKyNkZWZpbmUgIGZ0X2lzYWxwaGEoIHggKSAgKCBmdF9pc3VwcGVyKCB4ICkgfHwgZnRfaXNsb3dlciggeCApICkKKyNkZWZpbmUgIGZ0X2lzYWxudW0oIHggKSAgKCBmdF9pc2RpZ2l0KCB4ICkgfHwgZnRfaXNhbHBoYSggeCApICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgIEMgSCBBIFIgTSBBIFAgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBoYW5kbGUgdG8gaW50ZXJuYWwgY2hhcm1hcCBvYmplY3QgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfQ01hcFJlY18qICAgICAgICAgICAgICBGVF9DTWFwOworCisgIC8qIGhhbmRsZSB0byBjaGFybWFwIGNsYXNzIHN0cnVjdHVyZSAqLworICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBGVF9DTWFwX0NsYXNzUmVjXyogIEZUX0NNYXBfQ2xhc3M7CisKKyAgLyogaW50ZXJuYWwgY2hhcm1hcCBvYmplY3Qgc3RydWN0dXJlICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9DTWFwUmVjXworICB7CisgICAgRlRfQ2hhck1hcFJlYyAgY2hhcm1hcDsKKyAgICBGVF9DTWFwX0NsYXNzICBjbGF6ejsKKworICB9IEZUX0NNYXBSZWM7CisKKyAgLyogdHlwZWNhc2UgYW55IHBvaW50ZXIgdG8gYSBjaGFybWFwIGhhbmRsZSAqLworI2RlZmluZSBGVF9DTUFQKCB4ICkgICAgICAgICAgICAgICgoRlRfQ01hcCkoIHggKSkKKworICAvKiBvYnZpb3VzIG1hY3JvcyAqLworI2RlZmluZSBGVF9DTUFQX1BMQVRGT1JNX0lEKCB4ICkgIEZUX0NNQVAoIHggKS0+Y2hhcm1hcC5wbGF0Zm9ybV9pZAorI2RlZmluZSBGVF9DTUFQX0VOQ09ESU5HX0lEKCB4ICkgIEZUX0NNQVAoIHggKS0+Y2hhcm1hcC5lbmNvZGluZ19pZAorI2RlZmluZSBGVF9DTUFQX0VOQ09ESU5HKCB4ICkgICAgIEZUX0NNQVAoIHggKS0+Y2hhcm1hcC5lbmNvZGluZworI2RlZmluZSBGVF9DTUFQX0ZBQ0UoIHggKSAgICAgICAgIEZUX0NNQVAoIHggKS0+Y2hhcm1hcC5mYWNlCisKKworICAvKiBjbGFzcyBtZXRob2QgZGVmaW5pdGlvbnMgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0NNYXBfSW5pdEZ1bmMpKCBGVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBpbml0X2RhdGEgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9DTWFwX0RvbmVGdW5jKSggRlRfQ01hcCAgY21hcCApOworCisgIHR5cGVkZWYgRlRfVUludAorICAoKkZUX0NNYXBfQ2hhckluZGV4RnVuYykoIEZUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApOworCisgIHR5cGVkZWYgRlRfVUludAorICAoKkZUX0NNYXBfQ2hhck5leHRGdW5jKSggRlRfQ01hcCAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKmFjaGFyX2NvZGUgKTsKKworICB0eXBlZGVmIEZUX1VJbnQKKyAgKCpGVF9DTWFwX0NoYXJWYXJJbmRleEZ1bmMpKCBGVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ01hcCAgICB1bmljb2RlX2NtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICB2YXJpYW50X3NlbGVjdG9yICk7CisKKyAgdHlwZWRlZiBGVF9Cb29sCisgICgqRlRfQ01hcF9DaGFyVmFySXNEZWZhdWx0RnVuYykoIEZUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgdmFyaWFudF9zZWxlY3RvciApOworCisgIHR5cGVkZWYgRlRfVUludDMyICoKKyAgKCpGVF9DTWFwX1ZhcmlhbnRMaXN0RnVuYykoIEZUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtICk7CisKKyAgdHlwZWRlZiBGVF9VSW50MzIgKgorICAoKkZUX0NNYXBfQ2hhclZhcmlhbnRMaXN0RnVuYykoIEZUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApOworCisgIHR5cGVkZWYgRlRfVUludDMyICoKKyAgKCpGVF9DTWFwX1ZhcmlhbnRDaGFyTGlzdEZ1bmMpKCBGVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICB2YXJpYW50X3NlbGVjdG9yICk7CisKKworICB0eXBlZGVmIHN0cnVjdCAgRlRfQ01hcF9DbGFzc1JlY18KKyAgeworICAgIEZUX1VMb25nICAgICAgICAgICAgICAgc2l6ZTsKKyAgICBGVF9DTWFwX0luaXRGdW5jICAgICAgIGluaXQ7CisgICAgRlRfQ01hcF9Eb25lRnVuYyAgICAgICBkb25lOworICAgIEZUX0NNYXBfQ2hhckluZGV4RnVuYyAgY2hhcl9pbmRleDsKKyAgICBGVF9DTWFwX0NoYXJOZXh0RnVuYyAgIGNoYXJfbmV4dDsKKworICAgIC8qIFN1YnNlcXVlbnQgZW50cmllcyBhcmUgc3BlY2lhbCBvbmVzIGZvciBmb3JtYXQgMTQgLS0gdGhlIHZhcmlhbnQgKi8KKyAgICAvKiBzZWxlY3RvciBzdWJ0YWJsZSB3aGljaCBiZWhhdmVzIGxpa2Ugbm8gb3RoZXIgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9DTWFwX0NoYXJWYXJJbmRleEZ1bmMgICAgICBjaGFyX3Zhcl9pbmRleDsKKyAgICBGVF9DTWFwX0NoYXJWYXJJc0RlZmF1bHRGdW5jICBjaGFyX3Zhcl9kZWZhdWx0OworICAgIEZUX0NNYXBfVmFyaWFudExpc3RGdW5jICAgICAgIHZhcmlhbnRfbGlzdDsKKyAgICBGVF9DTWFwX0NoYXJWYXJpYW50TGlzdEZ1bmMgICBjaGFydmFyaWFudF9saXN0OworICAgIEZUX0NNYXBfVmFyaWFudENoYXJMaXN0RnVuYyAgIHZhcmlhbnRjaGFyX2xpc3Q7CisKKyAgfSBGVF9DTWFwX0NsYXNzUmVjOworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoIGNsYXNzXyApICAgICAgICAgICAgICBcCisgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0ICBGVF9DTWFwX0NsYXNzUmVjIGNsYXNzXzsKKworI2RlZmluZSBGVF9ERUZJTkVfQ01BUF9DTEFTUyggICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNoYXJfaW5kZXhfLCAgICAgICAgICAgICAgXAorICAgICAgICAgIGNoYXJfbmV4dF8sICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNoYXJfdmFyX2luZGV4XywgICAgICAgICAgXAorICAgICAgICAgIGNoYXJfdmFyX2RlZmF1bHRfLCAgICAgICAgXAorICAgICAgICAgIHZhcmlhbnRfbGlzdF8sICAgICAgICAgICAgXAorICAgICAgICAgIGNoYXJ2YXJpYW50X2xpc3RfLCAgICAgICAgXAorICAgICAgICAgIHZhcmlhbnRjaGFyX2xpc3RfICkgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgICAgXAorICBjb25zdCBGVF9DTWFwX0NsYXNzUmVjICBjbGFzc18gPSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNoYXJfaW5kZXhfLCAgICAgICAgICAgICAgICAgICAgXAorICAgIGNoYXJfbmV4dF8sICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNoYXJfdmFyX2luZGV4XywgICAgICAgICAgICAgICAgXAorICAgIGNoYXJfdmFyX2RlZmF1bHRfLCAgICAgICAgICAgICAgXAorICAgIHZhcmlhbnRfbGlzdF8sICAgICAgICAgICAgICAgICAgXAorICAgIGNoYXJ2YXJpYW50X2xpc3RfLCAgICAgICAgICAgICAgXAorICAgIHZhcmlhbnRjaGFyX2xpc3RfICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0RFQ0xBUkVfQ01BUF9DTEFTUyggY2xhc3NfICkgICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ01hcF9DbGFzc1JlYyogIGNsYXp6ICk7CisKKyNkZWZpbmUgRlRfREVGSU5FX0NNQVBfQ0xBU1MoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaGFyX2luZGV4XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaGFyX25leHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaGFyX3Zhcl9pbmRleF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaGFyX3Zhcl9kZWZhdWx0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB2YXJpYW50X2xpc3RfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaGFydmFyaWFudF9saXN0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB2YXJpYW50Y2hhcl9saXN0XyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9DTWFwX0NsYXNzUmVjKiAgY2xhenogKSAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2l6ZSAgICAgICAgICAgICA9IHNpemVfOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+aW5pdCAgICAgICAgICAgICA9IGluaXRfOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+ZG9uZSAgICAgICAgICAgICA9IGRvbmVfOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2hhcl9pbmRleCAgICAgICA9IGNoYXJfaW5kZXhfOyAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2hhcl9uZXh0ICAgICAgICA9IGNoYXJfbmV4dF87ICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2hhcl92YXJfaW5kZXggICA9IGNoYXJfdmFyX2luZGV4XzsgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2hhcl92YXJfZGVmYXVsdCA9IGNoYXJfdmFyX2RlZmF1bHRfOyAgICAgICAgIFwKKyAgICBjbGF6ei0+dmFyaWFudF9saXN0ICAgICA9IHZhcmlhbnRfbGlzdF87ICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2hhcnZhcmlhbnRfbGlzdCA9IGNoYXJ2YXJpYW50X2xpc3RfOyAgICAgICAgIFwKKyAgICBjbGF6ei0+dmFyaWFudGNoYXJfbGlzdCA9IHZhcmlhbnRjaGFyX2xpc3RfOyAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisgIC8qIGNyZWF0ZSBhIG5ldyBjaGFybWFwIGFuZCBhZGQgaXQgdG8gY2hhcm1hcC0+ZmFjZSAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX0NNYXBfTmV3KCBGVF9DTWFwX0NsYXNzICBjbGF6eiwKKyAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgIGluaXRfZGF0YSwKKyAgICAgICAgICAgICAgIEZUX0NoYXJNYXAgICAgIGNoYXJtYXAsCisgICAgICAgICAgICAgICBGVF9DTWFwICAgICAgICphY21hcCApOworCisgIC8qIGRlc3Ryb3kgYSBjaGFybWFwIGFuZCByZW1vdmUgaXQgZnJvbSBmYWNlJ3MgbGlzdCAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfQ01hcF9Eb25lKCBGVF9DTWFwICBjbWFwICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlX0ludGVybmFsUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmllbGRzIG9mIGVhY2ggRlRfRmFjZSAgICAgICAgKi8KKyAgLyogICAgb2JqZWN0LiAgVGhlc2UgZmllbGRzIG1heSBjaGFuZ2UgYmV0d2VlbiBkaWZmZXJlbnQgcmVsZWFzZXMgb2YgICAgICovCisgIC8qICAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9wb2ludHMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgdXNlZCB0byBzdG9yZSB0aGUgdmVjdG9yaWFsIG91dGxpbmUgKi8KKyAgLyogICAgICBvZiBhbnkgZ2x5cGggaW4gdGhpcyBmYWNlLiAgSWYgdGhpcyB2YWx1ZSBjYW5ub3QgYmUga25vd24gaW4gICAgICovCisgIC8qICAgICAgYWR2YW5jZSwgb3IgaWYgdGhlIGZhY2UgaXNuJ3Qgc2NhbGFibGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byAwLiAqLworICAvKiAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9jb250b3VycyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb250b3VycyB1c2VkIHRvIHN0b3JlIHRoZSB2ZWN0b3JpYWwgICAgICAgKi8KKyAgLyogICAgICBvdXRsaW5lIG9mIGFueSBnbHlwaCBpbiB0aGlzIGZhY2UuICBJZiB0aGlzIHZhbHVlIGNhbm5vdCBiZSAgICAgICovCisgIC8qICAgICAga25vd24gaW4gYWR2YW5jZSwgb3IgaWYgdGhlIGZhY2UgaXNuJ3Qgc2NhbGFibGUsIHRoaXMgc2hvdWxkIGJlICAqLworICAvKiAgICAgIHNldCB0byAwLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRyYW5zZm9ybV9tYXRyaXggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgMngyIG1hdHJpeCBvZiAxNi4xNiBjb2VmZmljaWVudHMgdXNlZCB0byB0cmFuc2Zvcm0gZ2x5cGggICAgICAgKi8KKyAgLyogICAgICBvdXRsaW5lcyBhZnRlciB0aGV5IGFyZSBsb2FkZWQgZnJvbSB0aGUgZm9udC4gIE9ubHkgdXNlZCBieSB0aGUgICovCisgIC8qICAgICAgY29udmVuaWVuY2UgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHJhbnNmb3JtX2RlbHRhIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSB0cmFuc2xhdGlvbiB2ZWN0b3IgdXNlZCB0byB0cmFuc2Zvcm0gZ2x5cGggb3V0bGluZXMgYWZ0ZXIgdGhleSAqLworICAvKiAgICAgIGFyZSBsb2FkZWQgZnJvbSB0aGUgZm9udC4gIE9ubHkgdXNlZCBieSB0aGUgY29udmVuaWVuY2UgICAgICAgICAgKi8KKyAgLyogICAgICBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0cmFuc2Zvcm1fZmxhZ3MgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTb21lIGZsYWdzIHVzZWQgdG8gY2xhc3NpZnkgdGhlIHRyYW5zZm9ybS4gIE9ubHkgdXNlZCBieSB0aGUgICAgICovCisgIC8qICAgICAgY29udmVuaWVuY2UgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2VydmljZXMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBjYWNoZSBmb3IgZnJlcXVlbnRseSB1c2VkIHNlcnZpY2VzLiAgSXQgc2hvdWxkIGJlIG9ubHkgICAgICAgICAqLworICAvKiAgICAgIGFjY2Vzc2VkIHdpdGggdGhlIG1hY3JvIGBGVF9GQUNFX0xPT0tVUF9TRVJWSUNFJy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluY3JlbWVudGFsX2ludGVyZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIElmIG5vbi1udWxsLCB0aGUgaW50ZXJmYWNlIHRocm91Z2ggd2hpY2ggZ2x5cGggZGF0YSBhbmQgbWV0cmljcyAgKi8KKyAgLyogICAgICBhcmUgbG9hZGVkIGluY3JlbWVudGFsbHkgZm9yIGZhY2VzIHRoYXQgZG8gbm90IHByb3ZpZGUgYWxsIG9mICAgICovCisgIC8qICAgICAgdGhpcyBkYXRhIHdoZW4gZmlyc3Qgb3BlbmVkLiAgVGhpcyBmaWVsZCBleGlzdHMgb25seSBpZiAgICAgICAgICAqLworICAvKiAgICAgIEBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMIGlzIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGlnbm9yZV91bnBhdGVudGVkX2hpbnRlciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgYm9vbGVhbiBmbGFnIGluc3RydWN0cyB0aGUgZ2x5cGggbG9hZGVyIHRvIGlnbm9yZSB0aGUgICAgICAgKi8KKyAgLyogICAgICBuYXRpdmUgZm9udCBoaW50ZXIsIGlmIG9uZSBpcyBmb3VuZC4gIFRoaXMgaXMgZXhjbHVzaXZlbHkgdXNlZCAgICovCisgIC8qICAgICAgaW4gdGhlIGNhc2Ugd2hlbiB0aGUgdW5wYXRlbnRlZCBoaW50ZXIgaXMgY29tcGlsZWQgd2l0aGluIHRoZSAgICAqLworICAvKiAgICAgIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlZmNvdW50IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgY291bnRlciBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSBpcyAgKi8KKyAgLyogICAgICBjcmVhdGVkLiAgQEZUX1JlZmVyZW5jZV9GYWNlIGluY3JlbWVudHMgdGhpcyBjb3VudGVyLCBhbmQgICAgICAgICovCisgIC8qICAgICAgQEZUX0RvbmVfRmFjZSBvbmx5IGRlc3Ryb3lzIGEgZmFjZSBpZiB0aGUgY291bnRlciBpc34xLCAgICAgICAgICAqLworICAvKiAgICAgIG90aGVyd2lzZSBpdCBzaW1wbHkgZGVjcmVtZW50cyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9GYWNlX0ludGVybmFsUmVjXworICB7CisgICAgRlRfTWF0cml4ICAgICAgICAgICB0cmFuc2Zvcm1fbWF0cml4OworICAgIEZUX1ZlY3RvciAgICAgICAgICAgdHJhbnNmb3JtX2RlbHRhOworICAgIEZUX0ludCAgICAgICAgICAgICAgdHJhbnNmb3JtX2ZsYWdzOworCisgICAgRlRfU2VydmljZUNhY2hlUmVjICBzZXJ2aWNlczsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMqICBpbmNyZW1lbnRhbF9pbnRlcmZhY2U7CisjZW5kaWYKKworICAgIEZUX0Jvb2wgICAgICAgICAgICAgaWdub3JlX3VucGF0ZW50ZWRfaGludGVyOworICAgIEZUX0ludCAgICAgICAgICAgICAgcmVmY291bnQ7CisKKyAgfSBGVF9GYWNlX0ludGVybmFsUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2xvdF9JbnRlcm5hbFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGludGVybmFsIGZpZWxkcyBvZiBlYWNoIEZUX0dseXBoU2xvdCAgICovCisgIC8qICAgIG9iamVjdC4gIFRoZXNlIGZpZWxkcyBtYXkgY2hhbmdlIGJldHdlZW4gZGlmZmVyZW50IHJlbGVhc2VzIG9mICAgICAqLworICAvKiAgICBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkZXIgICAgICAgICAgICA6OiBUaGUgZ2x5cGggbG9hZGVyIG9iamVjdCB1c2VkIHRvIGxvYWQgb3V0bGluZXMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmbGFncyAgICAgICAgICAgICA6OiBQb3NzaWJsZSB2YWx1ZXMgYXJlIHplcm8gb3IgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgRlRfR0xZUEhfT1dOX0JJVE1BUC4gIFRoZSBsYXR0ZXIgaW5kaWNhdGVzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIEZUX0dseXBoU2xvdCBzdHJ1Y3R1cmUgb3ducyB0aGUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX3RyYW5zZm9ybWVkIDo6IEJvb2xlYW4uICBTZXQgdG8gVFJVRSB3aGVuIHRoZSBsb2FkZWQgZ2x5cGggICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHRyYW5zZm9ybWVkIHRocm91Z2ggYSBzcGVjaWZpYyAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZm9udCB0cmFuc2Zvcm1hdGlvbi4gIFRoaXMgaXMgX25vdF8gdGhlIHNhbWUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBmYWNlIHRyYW5zZm9ybSBzZXQgdGhyb3VnaCAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXRfVHJhbnNmb3JtKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX21hdHJpeCAgICAgIDo6IFRoZSAyeDIgbWF0cml4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdseXBoICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbiwgaWYgbmVjZXNzYXJ5LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2RlbHRhICAgICAgIDo6IFRoZSAyZCB0cmFuc2xhdGlvbiB2ZWN0b3IgY29ycmVzcG9uZGluZyB0byAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2x5cGggdHJhbnNmb3JtYXRpb24sIGlmIG5lY2Vzc2FyeS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2hpbnRzICAgICAgIDo6IEZvcm1hdC1zcGVjaWZpYyBnbHlwaCBoaW50cyBtYW5hZ2VtZW50LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBGVF9HTFlQSF9PV05fQklUTUFQICAweDFVCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Nsb3RfSW50ZXJuYWxSZWNfCisgIHsKKyAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyOworICAgIEZUX1VJbnQgICAgICAgICBmbGFnczsKKyAgICBGVF9Cb29sICAgICAgICAgZ2x5cGhfdHJhbnNmb3JtZWQ7CisgICAgRlRfTWF0cml4ICAgICAgIGdseXBoX21hdHJpeDsKKyAgICBGVF9WZWN0b3IgICAgICAgZ2x5cGhfZGVsdGE7CisgICAgdm9pZCogICAgICAgICAgIGdseXBoX2hpbnRzOworCisgIH0gRlRfR2x5cGhTbG90X0ludGVybmFsUmVjOworCisKKyNpZiAwCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9JbnRlcm5hbFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGludGVybmFsIGZpZWxkcyBvZiBlYWNoIEZUX1NpemUgICAgICAgICovCisgIC8qICAgIG9iamVjdC4gIEN1cnJlbnRseSwgaXQncyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVfSW50ZXJuYWxSZWNfCisgIHsKKyAgICAvKiBlbXB0eSAqLworCisgIH0gRlRfU2l6ZV9JbnRlcm5hbFJlYzsKKworI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgIE0gTyBEIFUgTCBFIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIG1vZHVsZSBvYmplY3QgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjbGF6eiAgIDo6IEEgcG9pbnRlciB0byB0aGUgbW9kdWxlJ3MgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICA6OiBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfTW9kdWxlUmVjXworICB7CisgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xheno7CisgICAgRlRfTGlicmFyeSAgICAgICAgbGlicmFyeTsKKyAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CisKKyAgfSBGVF9Nb2R1bGVSZWM7CisKKworICAvKiB0eXBlY2FzdCBhbiBvYmplY3QgdG8gYW4gRlRfTW9kdWxlICovCisjZGVmaW5lIEZUX01PRFVMRSggeCApICAgICAgICAgICgoRlRfTW9kdWxlKSggeCApKQorI2RlZmluZSBGVF9NT0RVTEVfQ0xBU1MoIHggKSAgICBGVF9NT0RVTEUoIHggKS0+Y2xhenoKKyNkZWZpbmUgRlRfTU9EVUxFX0xJQlJBUlkoIHggKSAgRlRfTU9EVUxFKCB4ICktPmxpYnJhcnkKKyNkZWZpbmUgRlRfTU9EVUxFX01FTU9SWSggeCApICAgRlRfTU9EVUxFKCB4ICktPm1lbW9yeQorCisKKyNkZWZpbmUgRlRfTU9EVUxFX0lTX0RSSVZFUiggeCApICAoIEZUX01PRFVMRV9DTEFTUyggeCApLT5tb2R1bGVfZmxhZ3MgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NT0RVTEVfRk9OVF9EUklWRVIgKQorCisjZGVmaW5lIEZUX01PRFVMRV9JU19SRU5ERVJFUiggeCApICAoIEZUX01PRFVMRV9DTEFTUyggeCApLT5tb2R1bGVfZmxhZ3MgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9SRU5ERVJFUiApCisKKyNkZWZpbmUgRlRfTU9EVUxFX0lTX0hJTlRFUiggeCApICAoIEZUX01PRFVMRV9DTEFTUyggeCApLT5tb2R1bGVfZmxhZ3MgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NT0RVTEVfSElOVEVSICkKKworI2RlZmluZSBGVF9NT0RVTEVfSVNfU1RZTEVSKCB4ICkgICggRlRfTU9EVUxFX0NMQVNTKCB4ICktPm1vZHVsZV9mbGFncyAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9TVFlMRVIgKQorCisjZGVmaW5lIEZUX0RSSVZFUl9JU19TQ0FMQUJMRSggeCApICAoIEZUX01PRFVMRV9DTEFTUyggeCApLT5tb2R1bGVfZmxhZ3MgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgKQorCisjZGVmaW5lIEZUX0RSSVZFUl9VU0VTX09VVExJTkVTKCB4ICkgICEoIEZUX01PRFVMRV9DTEFTUyggeCApLT5tb2R1bGVfZmxhZ3MgJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9EUklWRVJfTk9fT1VUTElORVMgKQorCisjZGVmaW5lIEZUX0RSSVZFUl9IQVNfSElOVEVSKCB4ICkgICggRlRfTU9EVUxFX0NMQVNTKCB4ICktPm1vZHVsZV9mbGFncyAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluZHMgYSBtb2R1bGUgYW5kIHJldHVybnMgaXRzIHNwZWNpZmljIGludGVyZmFjZSBhcyBhIHR5cGVsZXNzICAgICovCisgIC8qICAgIHBvaW50ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlX25hbWUgOjogVGhlIG1vZHVsZSdzIG5hbWUgKGFzIGFuIEFTQ0lJIHN0cmluZykuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlIGlmIGF2YWlsYWJsZSwgMCBvdGhlcndpc2UuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IHNob3VsZCBiZXR0ZXIgYmUgZmFtaWxpYXIgd2l0aCBGcmVlVHlwZSBpbnRlcm5hbHMgdG8ga25vdyAgICAgICovCisgIC8qICAgIHdoaWNoIG1vZHVsZSB0byBsb29rIGZvciwgYW5kIHdoYXQgaXRzIGludGVyZmFjZSBpcyA6LSkgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggY29uc3Qgdm9pZCogKQorICBGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kX25hbWUgKTsKKworICBGVF9CQVNFKCBGVF9Qb2ludGVyICkKKyAgZnRfbW9kdWxlX2dldF9zZXJ2aWNlKCBGVF9Nb2R1bGUgICAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzZXJ2aWNlX2lkICk7CisKKyAgLyogKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICBGIEEgQyBFLCAgIFMgSSBaIEUgICAmICAgRyBMIFkgUCBIICAgUyBMIE8gVCAgIE8gQiBKIEUgQyBUIFMgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBhIGZldyBtYWNyb3MgdXNlZCB0byBwZXJmb3JtIGVhc3kgdHlwZWNhc3RzIHdpdGggbWluaW1hbCBicmFpbiBkYW1hZ2UgKi8KKworI2RlZmluZSBGVF9GQUNFKCB4ICkgICAgICAgICAgKChGVF9GYWNlKSh4KSkKKyNkZWZpbmUgRlRfU0laRSggeCApICAgICAgICAgICgoRlRfU2l6ZSkoeCkpCisjZGVmaW5lIEZUX1NMT1QoIHggKSAgICAgICAgICAoKEZUX0dseXBoU2xvdCkoeCkpCisKKyNkZWZpbmUgRlRfRkFDRV9EUklWRVIoIHggKSAgIEZUX0ZBQ0UoIHggKS0+ZHJpdmVyCisjZGVmaW5lIEZUX0ZBQ0VfTElCUkFSWSggeCApICBGVF9GQUNFX0RSSVZFUiggeCApLT5yb290LmxpYnJhcnkKKyNkZWZpbmUgRlRfRkFDRV9NRU1PUlkoIHggKSAgIEZUX0ZBQ0UoIHggKS0+bWVtb3J5CisjZGVmaW5lIEZUX0ZBQ0VfU1RSRUFNKCB4ICkgICBGVF9GQUNFKCB4ICktPnN0cmVhbQorCisjZGVmaW5lIEZUX1NJWkVfRkFDRSggeCApICAgICBGVF9TSVpFKCB4ICktPmZhY2UKKyNkZWZpbmUgRlRfU0xPVF9GQUNFKCB4ICkgICAgIEZUX1NMT1QoIHggKS0+ZmFjZQorCisjZGVmaW5lIEZUX0ZBQ0VfU0xPVCggeCApICAgICBGVF9GQUNFKCB4ICktPmdseXBoCisjZGVmaW5lIEZUX0ZBQ0VfU0laRSggeCApICAgICBGVF9GQUNFKCB4ICktPnNpemUKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGdseXBoIHNsb3QgZm9yIGEgICAgICAqLworICAvKiAgICBnaXZlbiBmYWNlIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgYWRkaXRpb25hbCAgICAgKi8KKyAgLyogICAgc2xvdHMuICBBbGwgb2YgdGhlbSBhcmUgYXV0b21hdGljYWxseSBkaXNjYXJkZWQgd2hlbiB0aGUgZmFjZSBpcyAgICovCisgIC8qICAgIGRlc3Ryb3llZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgIDo6IEEgaGFuZGxlIHRvIGEgcGFyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFzbG90IDo6IEEgaGFuZGxlIHRvIGEgbmV3IGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9OZXdfR2x5cGhTbG90KCBGVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICphc2xvdCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzdHJveXMgYSBnaXZlbiBnbHlwaCBzbG90LiAgUmVtZW1iZXIgaG93ZXZlciB0aGF0IGFsbCBzbG90cyBhcmUgICovCisgIC8qICAgIGF1dG9tYXRpY2FsbHkgZGVzdHJveWVkIHdpdGggaXRzIHBhcmVudC4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gaXMgICAqLworICAvKiAgICBub3QgYWx3YXlzIG1hbmRhdG9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzbG90IDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKyAvKiAqLworCisjZGVmaW5lIEZUX1JFUVVFU1RfV0lEVEgoIHJlcSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAocmVxKS0+aG9yaVJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgID8gKCAocmVxKS0+d2lkdGggKiAoRlRfUG9zKShyZXEpLT5ob3JpUmVzb2x1dGlvbiArIDM2ICkgLyA3MiBcCisgICAgICAgICAgICAgIDogKHJlcSktPndpZHRoICkKKworI2RlZmluZSBGVF9SRVFVRVNUX0hFSUdIVCggcmVxICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChyZXEpLT52ZXJ0UmVzb2x1dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgID8gKCAocmVxKS0+aGVpZ2h0ICogKEZUX1BvcykocmVxKS0+dmVydFJlc29sdXRpb24gKyAzNiApIC8gNzIgXAorICAgICAgICAgICAgICA6IChyZXEpLT5oZWlnaHQgKQorCisKKyAgLyogU2V0IHRoZSBtZXRyaWNzIGFjY29yZGluZyB0byBhIGJpdG1hcCBzdHJpa2UuICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9TZWxlY3RfTWV0cmljcyggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgc3RyaWtlX2luZGV4ICk7CisKKworICAvKiBTZXQgdGhlIG1ldHJpY3MgYWNjb3JkaW5nIHRvIGEgc2l6ZSByZXF1ZXN0LiAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfUmVxdWVzdF9NZXRyaWNzKCBGVF9GYWNlICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKTsKKworCisgIC8qIE1hdGNoIGEgc2l6ZSByZXF1ZXN0IGFnYWluc3QgYGF2YWlsYWJsZV9zaXplcycuICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgRlRfTWF0Y2hfU2l6ZSggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSwKKyAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICBpZ25vcmVfd2lkdGgsCisgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICAgc2l6ZV9pbmRleCApOworCisKKyAgLyogVXNlIHRoZSBob3Jpem9udGFsIG1ldHJpY3MgdG8gc3ludGhlc2l6ZSB0aGUgdmVydGljYWwgbWV0cmljcy4gKi8KKyAgLyogSWYgYGFkdmFuY2UnIGlzIHplcm8sIGl0IGlzIGFsc28gc3ludGhlc2l6ZWQuICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIGZ0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcyggRlRfR2x5cGhfTWV0cmljcyogIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgICAgIGFkdmFuY2UgKTsKKworCisgIC8qIEZyZWUgdGhlIGJpdG1hcCBvZiBhIGdpdmVuIGdseXBoc2xvdCB3aGVuIG5lZWRlZCAoaS5lLiwgb25seSB3aGVuIGl0ICovCisgIC8qIHdhcyBhbGxvY2F0ZWQgd2l0aCBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwKS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXAoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisKKyAgLyogQWxsb2NhdGUgYSBuZXcgYml0bWFwIGJ1ZmZlciBpbiBhIGdseXBoIHNsb3QuICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIHNpemUgKTsKKworCisgIC8qIFNldCB0aGUgYml0bWFwIGJ1ZmZlciBpbiBhIGdseXBoIHNsb3QgdG8gYSBnaXZlbiBwb2ludGVyLiAgVGhlIGJ1ZmZlciAqLworICAvKiB3aWxsIG5vdCBiZSBmcmVlZCBieSBhIGxhdGVyIGNhbGwgdG8gZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwLiAgICAgICAgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIGZ0X2dseXBoc2xvdF9zZXRfYml0bWFwKCBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGJ1ZmZlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgIFIgRSBOIEQgRSBSIEUgUiBTICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRfUkVOREVSRVIoIHggKSAgICAgICgoRlRfUmVuZGVyZXIpKCB4ICkpCisjZGVmaW5lIEZUX0dMWVBIKCB4ICkgICAgICAgICAoKEZUX0dseXBoKSggeCApKQorI2RlZmluZSBGVF9CSVRNQVBfR0xZUEgoIHggKSAgKChGVF9CaXRtYXBHbHlwaCkoIHggKSkKKyNkZWZpbmUgRlRfT1VUTElORV9HTFlQSCggeCApICgoRlRfT3V0bGluZUdseXBoKSggeCApKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1JlbmRlcmVyUmVjXworICB7CisgICAgRlRfTW9kdWxlUmVjICAgICAgICAgICAgcm9vdDsKKyAgICBGVF9SZW5kZXJlcl9DbGFzcyogICAgICBjbGF6ejsKKyAgICBGVF9HbHlwaF9Gb3JtYXQgICAgICAgICBnbHlwaF9mb3JtYXQ7CisgICAgRlRfR2x5cGhfQ2xhc3MgICAgICAgICAgZ2x5cGhfY2xhc3M7CisKKyAgICBGVF9SYXN0ZXIgICAgICAgICAgICAgICByYXN0ZXI7CisgICAgRlRfUmFzdGVyX1JlbmRlcl9GdW5jICAgcmFzdGVyX3JlbmRlcjsKKyAgICBGVF9SZW5kZXJlcl9SZW5kZXJGdW5jICByZW5kZXI7CisKKyAgfSBGVF9SZW5kZXJlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgIEYgTyBOIFQgICBEIFIgSSBWIEUgUiBTICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIHR5cGVjYXN0IGEgbW9kdWxlIGludG8gYSBkcml2ZXIgZWFzaWx5ICovCisjZGVmaW5lIEZUX0RSSVZFUiggeCApICAgICAgICAoKEZUX0RyaXZlcikoeCkpCisKKyAgLyogdHlwZWNhc3QgYSBtb2R1bGUgYXMgYSBkcml2ZXIsIGFuZCBnZXQgaXRzIGRyaXZlciBjbGFzcyAqLworI2RlZmluZSBGVF9EUklWRVJfQ0xBU1MoIHggKSAgRlRfRFJJVkVSKCB4ICktPmNsYXp6CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Ecml2ZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcm9vdCBmb250IGRyaXZlciBjbGFzcy4gIEEgZm9udCBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yICAgICAgKi8KKyAgLyogICAgbWFuYWdpbmcgYW5kIGxvYWRpbmcgZm9udCBmaWxlcyBvZiBhIGdpdmVuIGZvcm1hdC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHJvb3QgICAgICAgICA6OiBDb250YWlucyB0aGUgZmllbGRzIG9mIHRoZSByb290IG1vZHVsZSBjbGFzcy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY2xhenogICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgZm9udCBkcml2ZXIncyBjbGFzcy4gIE5vdGUgdGhhdCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIE5PVCByb290LmNsYXp6LiAgYGNsYXNzJyB3YXNuJ3QgdXNlZCAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgYXMgaXQgaXMgYSByZXNlcnZlZCB3b3JkIGluIEMrKy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGZhY2VzX2xpc3QgICA6OiBUaGUgbGlzdCBvZiBmYWNlcyBjdXJyZW50bHkgb3BlbmVkIGJ5IHRoaXMgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGdseXBoX2xvYWRlciA6OiBVbnVzZWQuICBVc2VkIHRvIGJlIGdseXBoIGxvYWRlciBmb3IgYWxsIGZhY2VzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgbWFuYWdlZCBieSB0aGlzIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0RyaXZlclJlY18KKyAgeworICAgIEZUX01vZHVsZVJlYyAgICAgcm9vdDsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIGNsYXp6OworICAgIEZUX0xpc3RSZWMgICAgICAgZmFjZXNfbGlzdDsKKyAgICBGVF9HbHlwaExvYWRlciAgIGdseXBoX2xvYWRlcjsKKworICB9IEZUX0RyaXZlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgIEwgSSBCIFIgQSBSIEkgRSBTICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFRoaXMgaG9vayBpcyB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBkZWJ1Z2dlci4gIEl0IG11c3QgYmUgc2V0IHRvIGFuICovCisgIC8qIGFsdGVybmF0ZSB0cnVldHlwZSBieXRlY29kZSBpbnRlcnByZXRlciBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0RFQlVHX0hPT0tfVFJVRVRZUEUgICAgICAgICAgICAwCisKKworICAvKiBTZXQgdGhpcyBkZWJ1ZyBob29rIHRvIGEgbm9uLW51bGwgcG9pbnRlciB0byBmb3JjZSB1bnBhdGVudGVkIGhpbnRpbmcgKi8KKyAgLyogZm9yIGFsbCBmYWNlcyB3aGVuIGJvdGggVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGFuZCAgICAgICAgICAgICAgICovCisgIC8qIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HIGFyZSBkZWZpbmVkLiAgVGhpcyBpcyBvbmx5IHVzZWQgICAqLworICAvKiBkdXJpbmcgZGVidWdnaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfREVCVUdfSE9PS19VTlBBVEVOVEVEX0hJTlRJTkcgIDEKKworCisgIHR5cGVkZWYgdm9pZCAgKCpGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYykoIEZUX0JpdG1hcCogICAgICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgICAgIGxpYnJhcnkgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpYnJhcnlSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBGcmVlVHlwZSBsaWJyYXJ5IGNsYXNzLiAgVGhpcyBpcyB0aGUgcm9vdCBvZiBhbGwgRnJlZVR5cGUgICAgICAqLworICAvKiAgICBkYXRhLiAgVXNlIEZUX05ld19MaWJyYXJ5KCkgdG8gY3JlYXRlIGEgbGlicmFyeSBvYmplY3QsIGFuZCAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9MaWJyYXJ5KCkgdG8gZGlzY2FyZCBpdCBhbmQgYWxsIGNoaWxkIG9iamVjdHMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgICAgICAgICA6OiBUaGUgbGlicmFyeSdzIG1lbW9yeSBvYmplY3QuICBNYW5hZ2VzIG1lbW9yeSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVyc2lvbl9tYWpvciAgICA6OiBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJzaW9uX21pbm9yICAgIDo6IFRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGlicmFyeS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnNpb25fcGF0Y2ggICAgOjogVGhlIGN1cnJlbnQgcGF0Y2ggbGV2ZWwgb2YgdGhlIGxpYnJhcnkuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX21vZHVsZXMgICAgICA6OiBUaGUgbnVtYmVyIG9mIG1vZHVsZXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgbGlicmFyeS4gIFRoaXMgaXMgc2V0IHRvIDAgZm9yIG5ldyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcy4gIE5ldyBtb2R1bGVzIGFyZSBhZGRlZCB0aHJvdWdoIHRoZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBGVF9BZGRfTW9kdWxlKCkgQVBJIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtb2R1bGVzICAgICAgICAgIDo6IEEgdGFibGUgdXNlZCB0byBzdG9yZSBoYW5kbGVzIHRvIHRoZSBjdXJyZW50bHkgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkIG1vZHVsZXMuIE5vdGUgdGhhdCBlYWNoIGZvbnQgZHJpdmVyICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYSBsaXN0IG9mIGl0cyBvcGVuZWQgZmFjZXMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmVuZGVyZXJzICAgICAgICA6OiBUaGUgbGlzdCBvZiByZW5kZXJlcnMgY3VycmVudGx5IHJlZ2lzdGVyZWQgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY3VyX3JlbmRlcmVyICAgICA6OiBUaGUgY3VycmVudCBvdXRsaW5lIHJlbmRlcmVyLiAgVGhpcyBpcyBhICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRjdXQgdXNlZCB0byBhdm9pZCBwYXJzaW5nIHRoZSBsaXN0IG9uICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggY2FsbCB0byBGVF9PdXRsaW5lX1JlbmRlcigpLiAgSXQgaXMgYSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIHRoZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgRlRfR0xZUEhfRk9STUFUX09VVExJTkUgZm9ybWF0LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXV0b19oaW50ZXIgICAgICA6OiBYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXJfcG9vbCAgICAgIDo6IFRoZSByYXN0ZXIgb2JqZWN0J3MgcmVuZGVyIHBvb2wuICBUaGlzIGNhbiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBpZGVhbGx5IGJlIGNoYW5nZWQgZHluYW1pY2FsbHkgYXQgcnVuLXRpbWUuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByYXN0ZXJfcG9vbF9zaXplIDo6IFRoZSBzaXplIG9mIHRoZSByZW5kZXIgcG9vbCBpbiBieXRlcy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlYnVnX2hvb2tzICAgICAgOjogWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGNkX2ZpbHRlciAgICAgICA6OiBJZiBzdWJwaXhlbCByZW5kZXJpbmcgaXMgYWN0aXZhdGVkLCB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgTENEIGZpbHRlciBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGNkX2V4dHJhICAgICAgICA6OiBJZiBzdWJwaXhlbCByZW5kZXJpbmcgaXMgYWN0aXZhdGVkLCB0aGUgbnVtYmVyICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgb2YgZXh0cmEgcGl4ZWxzIG5lZWRlZCBmb3IgdGhlIExDRCBmaWx0ZXIuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGNkX3dlaWdodHMgICAgICA6OiBJZiBzdWJwaXhlbCByZW5kZXJpbmcgaXMgYWN0aXZhdGVkLCB0aGUgTENEICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyIHdlaWdodHMsIGlmIGFueS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGNkX2ZpbHRlcl9mdW5jICA6OiBJZiBzdWJwaXhlbCByZW5kZXJpbmcgaXMgYWN0aXZhdGVkLCB0aGUgTENEICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGljX2NvbnRhaW5lciAgICA6OiBDb250YWlucyBnbG9iYWwgc3RydWN0cyBhbmQgdGFibGVzLCBpbnN0ZWFkICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGVmaW5pbmcgdGhlbSBnbG9iYWxsbHkuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmVmY291bnQgICAgICAgICA6OiBBIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xpYnJhcnkgc3RydWN0dXJlIGlzIGNyZWF0ZWQuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9SZWZlcmVuY2VfTGlicmFyeSBpbmNyZW1lbnRzIHRoaXMgY291bnRlciwgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBhbmQgQEZUX0RvbmVfTGlicmFyeSBvbmx5IGRlc3Ryb3lzIGEgbGlicmFyeSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGNvdW50ZXIgaXN+MSwgb3RoZXJ3aXNlIGl0IHNpbXBseSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudHMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9MaWJyYXJ5UmVjXworICB7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsgICAgICAgICAgIC8qIGxpYnJhcnkncyBtZW1vcnkgbWFuYWdlciAqLworCisgICAgRlRfSW50ICAgICAgICAgICAgIHZlcnNpb25fbWFqb3I7CisgICAgRlRfSW50ICAgICAgICAgICAgIHZlcnNpb25fbWlub3I7CisgICAgRlRfSW50ICAgICAgICAgICAgIHZlcnNpb25fcGF0Y2g7CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX21vZHVsZXM7CisgICAgRlRfTW9kdWxlICAgICAgICAgIG1vZHVsZXNbRlRfTUFYX01PRFVMRVNdOyAgLyogbW9kdWxlIG9iamVjdHMgICovCisKKyAgICBGVF9MaXN0UmVjICAgICAgICAgcmVuZGVyZXJzOyAgICAgICAgLyogbGlzdCBvZiByZW5kZXJlcnMgICAgICAgICovCisgICAgRlRfUmVuZGVyZXIgICAgICAgIGN1cl9yZW5kZXJlcjsgICAgIC8qIGN1cnJlbnQgb3V0bGluZSByZW5kZXJlciAqLworICAgIEZUX01vZHVsZSAgICAgICAgICBhdXRvX2hpbnRlcjsKKworICAgIEZUX0J5dGUqICAgICAgICAgICByYXN0ZXJfcG9vbDsgICAgICAvKiBzY2FuLWxpbmUgY29udmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXIgcG9vbCAgICAgICAgICAqLworICAgIEZUX1VMb25nICAgICAgICAgICByYXN0ZXJfcG9vbF9zaXplOyAvKiBzaXplIG9mIHJlbmRlciBwb29sIGluIGJ5dGVzICovCisKKyAgICBGVF9EZWJ1Z0hvb2tfRnVuYyAgZGVidWdfaG9va3NbNF07CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworICAgIEZUX0xjZEZpbHRlciAgICAgICAgICAgICBsY2RfZmlsdGVyOworICAgIEZUX0ludCAgICAgICAgICAgICAgICAgICBsY2RfZXh0cmE7ICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgcGl4ZWxzICovCisgICAgRlRfQnl0ZSAgICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzddOyAgIC8qIGZpbHRlciB3ZWlnaHRzLCBpZiBhbnkgKi8KKyAgICBGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyAgbGNkX2ZpbHRlcl9mdW5jOyAgLyogZmlsdGVyaW5nIGNhbGxiYWNrICAgICAqLworI2VuZGlmCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAgIEZUX1BJQ19Db250YWluZXIgICBwaWNfY29udGFpbmVyOworI2VuZGlmCisKKyAgICBGVF9JbnQgICAgICAgICAgICAgcmVmY291bnQ7CisKKyAgfSBGVF9MaWJyYXJ5UmVjOworCisKKyAgRlRfQkFTRSggRlRfUmVuZGVyZXIgKQorICBGVF9Mb29rdXBfUmVuZGVyZXIoIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaF9Gb3JtYXQgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSogICAgIG5vZGUgKTsKKworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCggRlRfTGlicmFyeSAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlICk7CisKKyAgdHlwZWRlZiBjb25zdCBjaGFyKgorICAoKkZUX0ZhY2VfR2V0UG9zdHNjcmlwdE5hbWVGdW5jKSggRlRfRmFjZSAgZmFjZSApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9GYWNlX0dldEdseXBoTmFtZUZ1bmMpKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBidWZmZXJfbWF4ICk7CisKKyAgdHlwZWRlZiBGVF9VSW50CisgICgqRlRfRmFjZV9HZXRHbHlwaE5hbWVJbmRleEZ1bmMpKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiAgZ2x5cGhfbmFtZSApOworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9OT19ERUZBVUxUX1NZU1RFTQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19NZW1vcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENyZWF0ZXMgYSBuZXcgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgcG9pbnRlciB0byB0aGUgbmV3IG1lbW9yeSBvYmplY3QuICAwIGluIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggRlRfTWVtb3J5ICkKKyAgRlRfTmV3X01lbW9yeSggdm9pZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9NZW1vcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGlzY2FyZHMgbWVtb3J5IG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IEEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfRG9uZV9NZW1vcnkoIEZUX01lbW9yeSAgbWVtb3J5ICk7CisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9OT19ERUZBVUxUX1NZU1RFTSAqLworCisKKyAgLyogRGVmaW5lIGRlZmF1bHQgcmFzdGVyJ3MgaW50ZXJmYWNlLiAgVGhlIGRlZmF1bHQgcmFzdGVyIGlzIGxvY2F0ZWQgaW4gICovCisgIC8qIGBzcmMvYmFzZS9mdHJhc3Rlci5jJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ2xpZW50IGFwcGxpY2F0aW9ucyBjYW4gcmVnaXN0ZXIgbmV3IHJhc3RlcnMgdGhyb3VnaCB0aGUgICAgICAgICAgICAgICovCisgIC8qIEZUX1NldF9SYXN0ZXIoKSBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZuZGVmIEZUX05PX0RFRkFVTFRfUkFTVEVSCisgIEZUX0VYUE9SVF9WQVIoIEZUX1Jhc3Rlcl9GdW5jcyApICBmdF9kZWZhdWx0X3Jhc3RlcjsKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICBQIEkgQyAgIFMgVSBQIFAgTyBSIFQgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogUElDIHN1cHBvcnQgbWFjcm9zIGZvciBmdGltYWdlLmggKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9PdXRsaW5lX0Z1bmNzIHN0cnVjdC4gICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW50aW9uIHdpbGwgbmVlZCB0byAgKi8KKyAgLyogICAgYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLworICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KKyAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKCAgICAgICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtb3ZlX3RvXywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbGluZV90b18sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNvbmljX3RvXywgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjdWJpY190b18sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc2hpZnRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRlbHRhXyApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0ICBGVF9PdXRsaW5lX0Z1bmNzIGNsYXNzXyA9ICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1vdmVfdG9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsaW5lX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uaWNfdG9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGN1YmljX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaGlmdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVsdGFfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG1vdmVfdG9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbGluZV90b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjb25pY190b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGN1YmljX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc2hpZnRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkZWx0YV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEluaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfT3V0bGluZV9GdW5jcyogIGNsYXp6ICkgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5tb3ZlX3RvICA9IG1vdmVfdG9fOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmxpbmVfdG8gID0gbGluZV90b187ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y29uaWNfdG8gPSBjb25pY190b187ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5jdWJpY190byA9IGN1YmljX3RvXzsgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnNoaWZ0ICAgID0gc2hpZnRfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+ZGVsdGEgICAgPSBkZWx0YV87ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9SQVNURVJfRlVOQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9SYXN0ZXJfRnVuY3Mgc3RydWN0LiAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW50aW9uIHdpbGwgbmVlZCB0byAgKi8KKyAgLyogICAgYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLworICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KKyAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9SQVNURVJfRlVOQ1MoICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdseXBoX2Zvcm1hdF8sICAgICAgICAgICBcCisgICAgICAgICAgcmFzdGVyX25ld18sICAgICAgICAgICAgIFwKKyAgICAgICAgICByYXN0ZXJfcmVzZXRfLCAgICAgICAgICAgXAorICAgICAgICAgIHJhc3Rlcl9zZXRfbW9kZV8sICAgICAgICBcCisgICAgICAgICAgcmFzdGVyX3JlbmRlcl8sICAgICAgICAgIFwKKyAgICAgICAgICByYXN0ZXJfZG9uZV8gKSAgICAgICAgICAgXAorICBjb25zdCBGVF9SYXN0ZXJfRnVuY3MgIGNsYXNzXyA9ICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbHlwaF9mb3JtYXRfLCAgICAgICAgICAgICAgICAgXAorICAgIHJhc3Rlcl9uZXdfLCAgICAgICAgICAgICAgICAgICBcCisgICAgcmFzdGVyX3Jlc2V0XywgICAgICAgICAgICAgICAgIFwKKyAgICByYXN0ZXJfc2V0X21vZGVfLCAgICAgICAgICAgICAgXAorICAgIHJhc3Rlcl9yZW5kZXJfLCAgICAgICAgICAgICAgICBcCisgICAgcmFzdGVyX2RvbmVfICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfUkFTVEVSX0ZVTkNTKCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2x5cGhfZm9ybWF0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJhc3Rlcl9uZXdfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByYXN0ZXJfcmVzZXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmFzdGVyX3NldF9tb2RlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJhc3Rlcl9yZW5kZXJfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByYXN0ZXJfZG9uZV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1Jhc3Rlcl9GdW5jcyogIGNsYXp6ICkgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdseXBoX2Zvcm1hdCAgICA9IGdseXBoX2Zvcm1hdF87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5yYXN0ZXJfbmV3ICAgICAgPSByYXN0ZXJfbmV3XzsgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cmFzdGVyX3Jlc2V0ICAgID0gcmFzdGVyX3Jlc2V0XzsgICAgICAgICAgICBcCisgICAgY2xhenotPnJhc3Rlcl9zZXRfbW9kZSA9IHJhc3Rlcl9zZXRfbW9kZV87ICAgICAgICAgXAorICAgIGNsYXp6LT5yYXN0ZXJfcmVuZGVyICAgPSByYXN0ZXJfcmVuZGVyXzsgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cmFzdGVyX2RvbmUgICAgID0gcmFzdGVyX2RvbmVfOyAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworICAvKiBQSUMgc3VwcG9ydCBtYWNyb3MgZm9yIGZ0cmVuZGVyLmggKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9HbHlwaF9DbGFzcyBzdHJ1Y3QuICAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW50aW9uIHdpbGwgbmVlZCB0byAgKi8KKyAgLyogICAgYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0Y3R1cmUgdG8gYmUgZmlsbGVkLiAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLworICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KKyAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9HTFlQSCggICAgICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZm9ybWF0XywgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY29weV8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHRyYW5zZm9ybV8sICAgICAgICAgICAgIFwKKyAgICAgICAgICBiYm94XywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcHJlcGFyZV8gKSAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgIFwKKyAgY29uc3QgRlRfR2x5cGhfQ2xhc3MgIGNsYXNzXyA9ICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5XywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHJhbnNmb3JtXywgICAgICAgICAgICAgICAgICAgXAorICAgIGJib3hfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwcmVwYXJlXyAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX0dMWVBIKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjb3B5XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB0cmFuc2Zvcm1fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBiYm94XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBwcmVwYXJlXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6ICkgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfc2l6ZSAgICAgID0gc2l6ZV87ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfZm9ybWF0ICAgID0gZm9ybWF0XzsgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfaW5pdCAgICAgID0gaW5pdF87ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfZG9uZSAgICAgID0gZG9uZV87ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfY29weSAgICAgID0gY29weV87ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfdHJhbnNmb3JtID0gdHJhbnNmb3JtXzsgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfYmJveCAgICAgID0gYmJveF87ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2x5cGhfcHJlcGFyZSAgID0gcHJlcGFyZV87ICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFQ0xBUkVfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gY3JlYXRlIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJlcl9DbGFzcyBzdHJ1Y3QgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9ERUZJTkVfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfUmVuZGVyZXJfQ2xhc3Mgc3RydWN0LiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bnRpb24gd2lsbCBuZWVkICAqLworICAvKiAgICB0byBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgd2hlcmUgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgaXMgICAgICAgKi8KKyAgLyogICAgcmV0dXJuZWQuICBBbmQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIGEgYGRlc3Ryb3knIGZ1bmN0aW9uICAgICovCisgIC8qICAgIG5lZWRzIHRvIGJlIGNhbGxlZCB0byByZWxlYXNlIHRoYXQgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgZmNpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyAgICAgKi8KKyAgLyogICAgYSBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICovCisgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90aWNlIHRoYXQgdGhlIGNyZWF0ZWQgYGNyZWF0ZScgYW5kIGBkZXN0cm95JyBmdW5jdGlvbnMgY2FsbCAgICAgICovCisgIC8qICAgIGBwaWNfaW5pdCcgYW5kIGBwaWNfZnJlZScgdG8gYWxsb3cgeW91IHRvIG1hbnVhbGx5IGFsbG9jYXRlIGFuZCAgICAqLworICAvKiAgICBpbml0aWFsaXplIGFueSBhZGRpdGlvbmFsIGdsb2JhbCBkYXRhLCBsaWtlIGEgbW9kdWxlIHNwZWNpZmljICAgICAgKi8KKyAgLyogICAgaW50ZXJmYWNlLCBhbmQgcHV0IHRoZW0gaW4gdGhlIGdsb2JhbCBwaWMgY29udGFpbmVyIGRlZmluZWQgaW4gICAgICovCisgIC8qICAgIGBmdHBpYy5oJy4gIElmIHlvdSBkb24ndCBuZWVkIHRoZW0ganVzdCBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9ucyBhcyAqLworICAvKiAgICBlbXB0eSB0byByZXNvbHZlIHRoZSBsaW5rIGVycm9yLiAgQWxzbyB0aGUgYHBpY19pbml0JyBhbmQgICAgICAgICAgKi8KKyAgLyogICAgYHBpY19mcmVlJyBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIGBwaWMuaCcsIHRvIGJlIHJlZmVycmVkICovCisgIC8qICAgIGJ5IHRoZSByZW5kZXJlciBkZWZpbml0aW9uIGNhbGxpbmcgYEZUX0RFRklORV9SRU5ERVJFUicgaW4gdGhlICAgICAqLworICAvKiAgICBmb2xsb3dpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLworICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KKyAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGNsYXNzXyApICAgICAgICAgICAgICAgXAorICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9SZW5kZXJlcl9DbGFzcyApIGNsYXNzXzsKKworI2RlZmluZSBGVF9ERUZJTkVfUkVOREVSRVIoICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZsYWdzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9pbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdseXBoX2Zvcm1hdF8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlbmRlcl9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHRyYW5zZm9ybV9nbHlwaF8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9nbHlwaF9jYm94XywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNldF9tb2RlXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJhc3Rlcl9jbGFzc18gKSAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBGVF9SZW5kZXJlcl9DbGFzcyAgY2xhc3NfID0gICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0RFRklORV9ST09UX01PRFVMRSggZmxhZ3NfLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV8sICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgXAorICAgIGdseXBoX2Zvcm1hdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlbmRlcl9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRyYW5zZm9ybV9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9nbHlwaF9jYm94XywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNldF9tb2RlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhc3Rlcl9jbGFzc18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGNsYXNzXyApICBGVF9ERUNMQVJFX01PRFVMRSggY2xhc3NfICkKKworI2RlZmluZSBGVF9ERUZJTkVfUkVOREVSRVIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmbGFnc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB2ZXJzaW9uXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X2ludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnbHlwaF9mb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlbmRlcl9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdHJhbnNmb3JtX2dseXBoXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfZ2x5cGhfY2JveF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNldF9tb2RlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmFzdGVyX2NsYXNzXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKSAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1JlbmRlcmVyX0NsYXNzKiAgcmNsYXp6ID0gKEZUX1JlbmRlcmVyX0NsYXNzKiljbGF6ejsgICAgICBcCisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhc3NfICMjIF9waWNfZnJlZSggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIHJjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRlJFRSggcmNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiogIG91dHB1dF9jbGFzcyApICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9SZW5kZXJlcl9DbGFzcyogIGNsYXp6ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICkgKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXJyb3IgPSBjbGFzc18gIyMgX3BpY19pbml0KCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIGVycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9ERUZJTkVfUk9PVF9NT0RVTEUoIGZsYWdzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfaW50ZXJmYWNlXyApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nbHlwaF9mb3JtYXQgICAgPSBnbHlwaF9mb3JtYXRfOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cmVuZGVyX2dseXBoICAgID0gcmVuZGVyX2dseXBoXzsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT50cmFuc2Zvcm1fZ2x5cGggPSB0cmFuc2Zvcm1fZ2x5cGhfOyAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9nbHlwaF9jYm94ICA9IGdldF9nbHlwaF9jYm94XzsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2V0X21vZGUgICAgICAgID0gc2V0X21vZGVfOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnJhc3Rlcl9jbGFzcyAgICA9IHJhc3Rlcl9jbGFzc187ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSAoRlRfTW9kdWxlX0NsYXNzKiljbGF6ejsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKyAgLyogUElDIHN1cHBvcnQgbWFjcm9zIGZvciBmdG1vZGFwaS5oICoqLworCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX01vZHVsZV9DcmVhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgKGFsbG9jYXRlKSBhIG5ldyBtb2R1bGUgY2xhc3Mgb2JqZWN0LiAgICAqLworICAvKiAgICBUaGUgb2JqZWN0J3MgbWVtYmVycyBhcmUgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgbW9kdWxlIGl0c2VsZiBpcyAgICAgKi8KKyAgLyogICAgbm90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dHB1dF9jbGFzcyA6OiBJbml0aWFsaXplZCB3aXRoIHRoZSBuZXdseSBhbGxvY2F0ZWQgY2xhc3MuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX01vZHVsZV9DcmVhdG9yKSggRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyoqICBvdXRwdXRfY2xhc3MgKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfRGVzdHJveWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gZGVzdHJveSAoZGVhbGxvY2F0ZSkgYSBtb2R1bGUgY2xhc3Mgb2JqZWN0LiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgOjogQSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2xhenogIDo6IE1vZHVsZSBjbGFzcyB0byBkZXN0cm95LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpGVF9Nb2R1bGVfRGVzdHJveWVyKSggRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiApOworCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFQ0xBUkVfTU9EVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZWQgdG8gY3JlYXRlIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9ERUZJTkVfTU9EVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgYW4gRlRfTW9kdWxlX0NsYXNzIHN0cnVjdC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bnRpb24gbmVlZHMgdG8gICAqLworICAvKiAgICBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgd2hlcmUgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgaXMgICAgICAgICAgKi8KKyAgLyogICAgcmV0dXJuZWQuICBBbmQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIGEgYGRlc3Ryb3knIGZ1bmN0aW9uICAgICovCisgIC8qICAgIG5lZWRzIHRvIGJlIGNhbGxlZCB0byByZWxlYXNlIHRoYXQgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgZmNpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyAgICAgKi8KKyAgLyogICAgYSBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICovCisgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90aWNlIHRoYXQgdGhlIGNyZWF0ZWQgYGNyZWF0ZScgYW5kIGBkZXN0cm95JyBmdW5jdGlvbnMgY2FsbCAgICAgICovCisgIC8qICAgIGBwaWNfaW5pdCcgYW5kIGBwaWNfZnJlZScgdG8gYWxsb3cgeW91IHRvIG1hbnVhbGx5IGFsbG9jYXRlIGFuZCAgICAqLworICAvKiAgICBpbml0aWFsaXplIGFueSBhZGRpdGlvbmFsIGdsb2JhbCBkYXRhLCBsaWtlIGEgbW9kdWxlIHNwZWNpZmljICAgICAgKi8KKyAgLyogICAgaW50ZXJmYWNlLCBhbmQgcHV0IHRoZW0gaW4gdGhlIGdsb2JhbCBwaWMgY29udGFpbmVyIGRlZmluZWQgaW4gICAgICovCisgIC8qICAgIGBmdHBpYy5oJy4gIElmIHlvdSBkb24ndCBuZWVkIHRoZW0ganVzdCBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9ucyBhcyAqLworICAvKiAgICBlbXB0eSB0byByZXNvbHZlIHRoZSBsaW5rIGVycm9yLiAgQWxzbyB0aGUgYHBpY19pbml0JyBhbmQgICAgICAgICAgKi8KKyAgLyogICAgYHBpY19mcmVlJyBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIGBwaWMuaCcsIHRvIGJlIHJlZmVycmVkICovCisgIC8qICAgIGJ5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBjYWxsaW5nIGBGVF9ERUZJTkVfTU9EVUxFJyBpbiB0aGUgICAgICAgICAqLworICAvKiAgICBmb2xsb3dpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLworICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KKyAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfREVGSU5FX1JPT1RfTU9EVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGFuIEZUX01vZHVsZV9DbGFzcyBzdHJ1Y3QgaW5zaWRlICovCisgIC8qICAgIGFub3RoZXIgc3RydWN0IHRoYXQgY29udGFpbnMgaXQgb3IgaW4gYSBmdW5jdGlvbiB0aGF0IGluaXRpYWxpemVzICAqLworICAvKiAgICB0aGF0IGNvbnRhaW5pbmcgc3RydWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVDTEFSRV9NT0RVTEUoIGNsYXNzXyApICBcCisgIEZUX0NBTExCQUNLX1RBQkxFICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MgIGNsYXNzXzsKKworI2RlZmluZSBGVF9ERUZJTkVfUk9PVF9NT0RVTEUoICBcCisgICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgXAorICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9pbnRlcmZhY2VfICkgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmbGFnc18sICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuYW1lXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICBcCisgICAgcmVxdWlyZXNfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2V0X2ludGVyZmFjZV8sICAgICAgICAgICAgIFwKKyAgfSwKKworI2RlZmluZSBGVF9ERUZJTkVfTU9EVUxFKCAgICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBuYW1lXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbnRlcmZhY2VfLCAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfaW50ZXJmYWNlXyApICAgICAgICBcCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgICAgICAgICAgXAorICBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MgY2xhc3NfID0gIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfaW50ZXJmYWNlXywgICAgICAgICAgICAgICBcCisgIH07CisKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUNMQVJFX01PRFVMRSggY2xhc3NfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiogIG91dHB1dF9jbGFzcyApOyAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICk7CisKKyNkZWZpbmUgRlRfREVGSU5FX1JPT1RfTU9EVUxFKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBuYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfaW50ZXJmYWNlXyApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnJvb3QubW9kdWxlX2ZsYWdzICAgICA9IGZsYWdzXzsgICAgICAgICAgXAorICAgIGNsYXp6LT5yb290Lm1vZHVsZV9zaXplICAgICAgPSBzaXplXzsgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cm9vdC5tb2R1bGVfbmFtZSAgICAgID0gbmFtZV87ICAgICAgICAgICBcCisgICAgY2xhenotPnJvb3QubW9kdWxlX3ZlcnNpb24gICA9IHZlcnNpb25fOyAgICAgICAgXAorICAgIGNsYXp6LT5yb290Lm1vZHVsZV9yZXF1aXJlcyAgPSByZXF1aXJlc187ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnJvb3QubW9kdWxlX2ludGVyZmFjZSA9IGludGVyZmFjZV87ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cm9vdC5tb2R1bGVfaW5pdCAgICAgID0gaW5pdF87ICAgICAgICAgICBcCisgICAgY2xhenotPnJvb3QubW9kdWxlX2RvbmUgICAgICA9IGRvbmVfOyAgICAgICAgICAgXAorICAgIGNsYXp6LT5yb290LmdldF9pbnRlcmZhY2UgICAgPSBnZXRfaW50ZXJmYWNlXzsKKworI2RlZmluZSBGVF9ERUZJTkVfTU9EVUxFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmbGFnc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB2ZXJzaW9uXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKSAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXNzXyAjIyBfcGljX2ZyZWUoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyoqICBvdXRwdXRfY2xhc3MgKSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSApICkgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlcnJvciA9IGNsYXNzXyAjIyBfcGljX2luaXQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggZXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5tb2R1bGVfZmxhZ3MgICAgID0gZmxhZ3NfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPm1vZHVsZV9zaXplICAgICAgPSBzaXplXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+bW9kdWxlX25hbWUgICAgICA9IG5hbWVfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5tb2R1bGVfdmVyc2lvbiAgID0gdmVyc2lvbl87ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPm1vZHVsZV9yZXF1aXJlcyAgPSByZXF1aXJlc187ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5tb2R1bGVfaW50ZXJmYWNlID0gaW50ZXJmYWNlXzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+bW9kdWxlX2luaXQgICAgICA9IGluaXRfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5tb2R1bGVfZG9uZSAgICAgID0gZG9uZV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9pbnRlcmZhY2UgICAgPSBnZXRfaW50ZXJmYWNlXzsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRPQkpTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRwaWMuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0cGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5MTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0cGljLmgKQEAgLTAsMCArMSw3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIChkZWNsYXJhdGlvbikuICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBNb2R1bGVzIHRoYXQgb3JkaW5hcmlseSBoYXZlIGNvbnN0IGdsb2JhbCBkYXRhIHRoYXQgbmVlZCBhZGRyZXNzICAgICAqLworICAvKiAgY2FuIGluc3RlYWQgZGVmaW5lIHBvaW50ZXJzIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFBJQ19IX18KKyNkZWZpbmUgX19GVFBJQ19IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1BJQ19Db250YWluZXJfCisgIHsKKyAgICAvKiBwaWMgY29udGFpbmVycyBmb3IgYmFzZSAqLworICAgIHZvaWQqICBiYXNlOworCisgICAgLyogcGljIGNvbnRhaW5lcnMgZm9yIG1vZHVsZXMgKi8KKyAgICB2b2lkKiAgYXV0b2ZpdDsKKyAgICB2b2lkKiAgY2ZmOworICAgIHZvaWQqICBwc2hpbnRlcjsKKyAgICB2b2lkKiAgcHNuYW1lczsKKyAgICB2b2lkKiAgcmFzdGVyOworICAgIHZvaWQqICBzZm50OworICAgIHZvaWQqICBzbW9vdGg7CisgICAgdm9pZCogIHRydWV0eXBlOworCisgIH0gRlRfUElDX0NvbnRhaW5lcjsKKworCisgIC8qIEluaXRpYWxpemUgdGhlIHZhcmlvdXMgZnVuY3Rpb24gdGFibGVzLCBzdHJ1Y3RzLCBldGMuICovCisgIC8qIHN0b3JlZCBpbiB0aGUgY29udGFpbmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgZnRfcGljX2NvbnRhaW5lcl9pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKworICAvKiBEZXN0cm95IHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyLiAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgZnRfcGljX2NvbnRhaW5lcl9kZXN0cm95KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVFBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0cmZvcmsuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0cmZvcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTYxY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRyZm9yay5oCkBAIC0wLDAgKzEsMjY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHJmb3JrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MgYWNjZXNzb3IgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGV2ZWxvcG1lbnQgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIHN1cHBvcnQgb2YgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFJGT1JLX0hfXworI2RlZmluZSBfX0ZUUkZPUktfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIE51bWJlciBvZiBndWVzc2luZyBydWxlcyBzdXBwb3J0ZWQgaW4gYEZUX1JhY2Nlc3NfR3Vlc3MnLiAgICAgICAgICAgICovCisgIC8qIERvbid0IGZvcmdldCB0byBpbmNyZW1lbnQgdGhlIG51bWJlciBpZiB5b3UgYWRkIGEgbmV3IGd1ZXNzaW5nIHJ1bGUuICovCisjZGVmaW5lIEZUX1JBQ0NFU1NfTl9SVUxFUyAgOQorCisKKyAgLyogQSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSByZWZlcmVuY2UgaW4gYSByZXNvdXJjZSBieSBpdHMgcmVzb3VyY2UgSUQgKi8KKyAgLyogYW5kIGludGVybmFsIG9mZnNldC4gIFRoZSBgUE9TVCcgcmVzb3VyY2UgZXhwZWN0cyB0byBiZSBjb25jYXRlbmF0ZWQgKi8KKyAgLyogYnkgdGhlIG9yZGVyIG9mIHJlc291cmNlIElEcyBpbnN0ZWFkIG9mIGl0cyBhcHBlYXJhbmNlIGluIHRoZSBmaWxlLiAgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgRlRfUkZvcmtfUmVmXworICB7CisgICAgRlRfVVNob3J0ICByZXNfaWQ7CisgICAgRlRfTG9uZyAgICBvZmZzZXQ7CisKKyAgfSBGVF9SRm9ya19SZWY7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpmdF9yYWNjZXNzX2d1ZXNzX2Z1bmMpKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKTsKKworICB0eXBlZGVmIGVudW0gIEZUX1JGb3JrX1J1bGVfIHsKKyAgICBGVF9SRm9ya19SdWxlX2ludmFsaWQgPSAtMiwKKyAgICBGVF9SRm9ya19SdWxlX3Vrbm93biwgLyogLTEgKi8KKyAgICBGVF9SRm9ya19SdWxlX2FwcGxlX2RvdWJsZSwKKyAgICBGVF9SRm9ya19SdWxlX2FwcGxlX3NpbmdsZSwKKyAgICBGVF9SRm9ya19SdWxlX2Rhcndpbl91ZnNfZXhwb3J0LAorICAgIEZUX1JGb3JrX1J1bGVfZGFyd2luX25ld3ZmcywKKyAgICBGVF9SRm9ya19SdWxlX2Rhcndpbl9oZnNwbHVzLAorICAgIEZUX1JGb3JrX1J1bGVfdmZhdCwKKyAgICBGVF9SRm9ya19SdWxlX2xpbnV4X2NhcCwKKyAgICBGVF9SRm9ya19SdWxlX2xpbnV4X2RvdWJsZSwKKyAgICBGVF9SRm9ya19SdWxlX2xpbnV4X25ldGF0YWxrCisgIH0gRlRfUkZvcmtfUnVsZTsKKworICAvKiBGb3IgZmFzdCB0cmFuc2xhdGlvbiBiZXR3ZWVuIHJ1bGUgaW5kZXggYW5kIHJ1bGUgdHlwZSwKKyAgICogdGhlIG1hY3JvcyBGVF9SRk9SS194eHggc2hvdWxkIGJlIGtlcHQgY29uc2lzdGVudCB3aXRoCisgICAqIHRoZSByYWNjZXNzX2d1ZXNzX2Z1bmNzIHRhYmxlCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBmdF9yYWNjZXNzX2d1ZXNzX3JlY18geworICAgIGZ0X3JhY2Nlc3NfZ3Vlc3NfZnVuYyAgZnVuYzsKKyAgICBGVF9SRm9ya19SdWxlICAgICAgICAgIHR5cGU7CisgIH0gZnRfcmFjY2Vzc19ndWVzc19yZWM7CisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworICAvKiB0aGlzIGFycmF5IGlzIGEgc3RvcmFnZSBpbiBub24tUElDIG1vZGUsIHNvIDsgaXMgbmVlZGVkIGluIEVORCAqLworI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0JFR0lOKCBuYW1lLCB0eXBlICkgIFwKKyAgICAgICAgICBzdGF0aWMgY29uc3QgdHlwZSBuYW1lW10gPSB7CisjZGVmaW5lIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoIGZ1bmNfc3VmZml4LCB0eXBlX3N1ZmZpeCApICBcCisgICAgICAgICAgeyByYWNjZXNzX2d1ZXNzXyAjIyBmdW5jX3N1ZmZpeCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9SRm9ya19SdWxlXyAjIyB0eXBlX3N1ZmZpeCB9LAorI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VORCAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworICAvKiB0aGlzIGFycmF5IGlzIGEgZnVuY3Rpb24gaW4gUElDIG1vZGUsIHNvIG5vIDsgaXMgbmVlZGVkIGluIEVORCAqLworI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0JFR0lOKCBuYW1lLCB0eXBlICkgIFwKKyAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfSW5pdF9UYWJsZV8gIyMgbmFtZSggdHlwZSogIHN0b3JhZ2UgKSAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHR5cGUqICBsb2NhbCA9IHN0b3JhZ2U7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGludCAgaSA9IDA7CisjZGVmaW5lIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoIGZ1bmNfc3VmZml4LCB0eXBlX3N1ZmZpeCApICBcCisgICAgICAgICAgbG9jYWxbaV0uZnVuYyA9IHJhY2Nlc3NfZ3Vlc3NfICMjIGZ1bmNfc3VmZml4OyAgICAgICAgICAgICBcCisgICAgICAgICAgbG9jYWxbaV0udHlwZSA9IEZUX1JGb3JrX1J1bGVfICMjIHR5cGVfc3VmZml4OyAgICAgICAgICAgICBcCisgICAgICAgICAgaSsrOworI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VORCAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JhY2Nlc3NfR3Vlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEd1ZXNzIGEgZmlsZSBuYW1lIGFuZCBvZmZzZXQgd2hlcmUgdGhlIGFjdHVhbCByZXNvdXJjZSBmb3JrIGlzICAgICAqLworICAvKiAgICBzdG9yZWQuICBUaGUgbWFjcm8gRlRfUkFDQ0VTU19OX1JVTEVTIGhvbGRzIHRoZSBudW1iZXIgb2YgICAgICAgICAgKi8KKyAgLyogICAgZ3Vlc3NpbmcgcnVsZXM7ICB0aGUgZ3Vlc3NlZCByZXN1bHQgZm9yIHRoZSBOdGggcnVsZSBpcyAgICAgICAgICAgICovCisgIC8qICAgIHJlcHJlc2VudGVkIGFzIGEgdHJpcGxldDogYSBuZXcgZmlsZSBuYW1lIChuZXdfbmFtZXNbTl0pLCBhIGZpbGUgICAqLworICAvKiAgICBvZmZzZXQgKG9mZnNldHNbTl0pLCBhbmQgYW4gZXJyb3IgY29kZSAoZXJyb3JzW05dKS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIEZyZWVUeXBlIGxpYnJhcnkgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGZpbGUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIGZvcmsuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlX25hbWUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgKGJhc2UpIGZpbGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgZm9yayB1c2VkIGZvciBzb21lICAgICAgICAgICovCisgIC8qICAgICAgZ3Vlc3NpbmcgcnVsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5ld19uYW1lcyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEFuIGFycmF5IG9mIGd1ZXNzZWQgZmlsZSBuYW1lcyBpbiB3aGljaCB0aGUgcmVzb3VyY2UgZm9ya3MgbWF5ICAgKi8KKyAgLyogICAgICBleGlzdC4gIElmIGBuZXdfbmFtZXNbTl0nIGlzIE5VTEwsIHRoZSBndWVzc2VkIGZpbGUgbmFtZSBpcyAgICAgICovCisgIC8qICAgICAgZXF1YWwgdG8gYGJhc2VfbmFtZScuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb2Zmc2V0cyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQW4gYXJyYXkgb2YgZ3Vlc3NlZCBmaWxlIG9mZnNldHMuICBgb2Zmc2V0c1tOXScgaG9sZHMgdGhlIGZpbGUgICAqLworICAvKiAgICAgIG9mZnNldCBvZiB0aGUgcG9zc2libGUgc3RhcnQgb2YgdGhlIHJlc291cmNlIGZvcmsgaW4gZmlsZSAgICAgICAgKi8KKyAgLyogICAgICBgbmV3X25hbWVzW05dJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBlcnJvcnMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBbiBhcnJheSBvZiBGcmVlVHlwZSBlcnJvciBjb2Rlcy4gIGBlcnJvcnNbTl0nIGlzIHRoZSBlcnJvciAgICAgICovCisgIC8qICAgICAgY29kZSBvZiBOdGggZ3Vlc3NpbmcgcnVsZSBmdW5jdGlvbi4gIElmIGBlcnJvcnNbTl0nIGlzIG5vdCAgICAgICAqLworICAvKiAgICAgIEZUX0Vycl9PaywgYG5ld19uYW1lc1tOXScgYW5kIGBvZmZzZXRzW05dJyBhcmUgbWVhbmluZ2xlc3MuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9SYWNjZXNzX0d1ZXNzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgIGJhc2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY2hhcioqICAgICAgbmV3X25hbWVzLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICBvZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogICBlcnJvcnMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdldCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVyIG9mIHJlc291cmNlIGZvcmsuICBUaGUgICAgICAgICAqLworICAvKiAgICBpbmZvcm1hdGlvbiBpbmNsdWRlcyB0aGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIG1hcCAgICAgICAgKi8KKyAgLyogICAgc3RhcnRzLCBhbmQgdGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBkYXRhIHN0YXJ0cy4gICAgICAgICovCisgIC8qICAgIGBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cycgcmVxdWlyZXMgdGhlc2UgdHdvIGRhdGEuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgZmlsZSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmVzb3VyY2UgZm9yay4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJmb3JrX29mZnNldCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgZm9yayBzdGFydHMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXBfb2Zmc2V0IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIG1hcCBzdGFydHMuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZGF0YV9wb3MgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIGRhdGEgc3RhcnRzLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIEZUX0Vycl9PayBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8oIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgcmZvcmtfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICptYXBfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZGF0YV9wb3MgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdldCB0aGUgZGF0YSBvZmZzZXRzIGZvciBhIHRhZyBpbiBhIHJlc291cmNlIGZvcmsuICBPZmZzZXRzIGFyZSAgICAqLworICAvKiAgICBzdG9yZWQgaW4gYW4gYXJyYXkgYmVjYXVzZSwgaW4gc29tZSBjYXNlcywgcmVzb3VyY2VzIGluIGEgcmVzb3VyY2UgKi8KKyAgLyogICAgZm9yayBoYXZlIHRoZSBzYW1lIHRhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBmaWxlIHN0cmVhbSBjb250YWluaW5nIHRoZSByZXNvdXJjZSBmb3JrLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWFwX29mZnNldCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBtYXAgc3RhcnRzLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmRhdGFfcG9zIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBkYXRhIHN0YXJ0cy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFnIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHJlc291cmNlIHRhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc29ydF9ieV9yZXNfaWQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBCb29sZWFuIHRvIHNvcnQgdGhlIGZyYWdtZW50ZWQgcmVzb3VyY2UgYnkgdGhlaXIgaWRzLiAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBmcmFnbWVudGVkIHJlc291cmNlcyBmb3IgYFBPU1QnIHJlc291cmNlIHNob3VsZCBiZSBzb3J0ZWQgICAgKi8KKyAgLyogICAgICB0byByZXN0b3JlIFR5cGUxIGZvbnQgcHJvcGVybHkuICBGb3IgYHNuZnQnIHJlc291cmNlcywgc29ydGluZyAgICovCisgIC8qICAgICAgbWF5IGluZHVjZSBhIGRpZmZlcmVudCBvcmRlciBvZiB0aGUgZmFjZXMgaW4gY29tcGFyaXNvbiB0byB0aGF0ICAqLworICAvKiAgICAgIGJ5IFF1aWNrRHJhdyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvZmZzZXRzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgc3RyZWFtIG9mZnNldHMgZm9yIHRoZSByZXNvdXJjZSBkYXRhIHNwZWNpZmllZCBieSBgdGFnJy4gICAgICovCisgIC8qICAgICAgVGhpcyBhcnJheSBpcyBhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uLCBzbyB5b3UgaGF2ZSB0byBjYWxsICAgICAqLworICAvKiAgICAgIEBmdF9tZW1fZnJlZSBhZnRlciB1c2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvdW50IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBsZW5ndGggb2Ygb2Zmc2V0cyBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgRlRfRXJyX09rIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3JtYWxseSB5b3Ugc2hvdWxkIHVzZSBgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbycgdG8gZ2V0IHRoZSAgICAgKi8KKyAgLyogICAgdmFsdWUgZm9yIGBtYXBfb2Zmc2V0JyBhbmQgYHJkYXRhX3BvcycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgbWFwX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIHJkYXRhX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIHNvcnRfYnlfcmVzX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICoqb2Zmc2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKmNvdW50ICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVFJGT1JLX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRzZXJ2LmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdHNlcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjgzN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnRzZXJ2LmgKQEAgLTAsMCArMSw3NjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c2Vydi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgc2VydmljZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRWFjaCBtb2R1bGUgY2FuIGV4cG9ydCBvbmUgb3IgbW9yZSBgc2VydmljZXMnLiAgRWFjaCBzZXJ2aWNlIGlzICAgICAgKi8KKyAgLyogIGlkZW50aWZpZWQgYnkgYSBjb25zdGFudCBzdHJpbmcgYW5kIG1vZGVsZWQgYnkgYSBwb2ludGVyOyB0aGUgbGF0dGVyICovCisgIC8qICBnZW5lcmFsbHkgY29ycmVzcG9uZHMgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBmdW5jdGlvbiBwb2ludGVycy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIE5vdGUgdGhhdCBhIHNlcnZpY2UncyBkYXRhIGNhbm5vdCBiZSBhIG1lcmUgZnVuY3Rpb24gcG9pbnRlciBiZWNhdXNlICovCisgIC8qICBpbiBDIGl0IGlzIHBvc3NpYmxlIHRoYXQgZnVuY3Rpb24gcG9pbnRlcnMgbWlnaHQgYmUgaW1wbGVtZW50ZWQgICAgICAqLworICAvKiAgZGlmZmVyZW50bHkgdGhhbiBkYXRhIHBvaW50ZXJzIChlLmcuIDQ4IGJpdHMgaW5zdGVhZCBvZiAzMikuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFNFUlZfSF9fCisjZGVmaW5lIF9fRlRTRVJWX0hfXworCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIC8qCisgICAqIEBtYWNybzoKKyAgICogICBGVF9GQUNFX0ZJTkRfU0VSVklDRQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGxvb2sgdXAgYSBzZXJ2aWNlIGZyb20gYSBmYWNlJ3MgZHJpdmVyIG1vZHVsZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgZmFjZSBoYW5kbGUuCisgICAqCisgICAqICAgaWQgOjoKKyAgICogICAgIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNlcnZpY2UgYXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSdzCisgICAqICAgICBoZWFkZXIgZmlsZXMgKGUuZy4gRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTIHdoaWNoIGV4cGFuZHMgdG8KKyAgICogICAgIGBtdWx0aS1tYXN0ZXJzJykuICBJdCBpcyBhdXRvbWF0aWNhbGx5IHByZWZpeGVkIHdpdGgKKyAgICogICAgIGBGVF9TRVJWSUNFX0lEXycuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgcHRyIDo6CisgICAqICAgICBBIHZhcmlhYmxlIHRoYXQgcmVjZWl2ZXMgdGhlIHNlcnZpY2UgcG9pbnRlci4gIFdpbGwgYmUgTlVMTAorICAgKiAgICAgaWYgbm90IGZvdW5kLgorICAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworCisjZGVmaW5lIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBwdHIsIGlkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Nb2R1bGUgICAgbW9kdWxlID0gRlRfTU9EVUxFKCBGVF9GQUNFKCBmYWNlICktPmRyaXZlciApOyAgICAgICAgICAgICBcCisgICAgRlRfUG9pbnRlciAgIF90bXBfICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1BvaW50ZXIqICBfcHB0cl8gPSAoRlRfUG9pbnRlciopJihwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggbW9kdWxlLT5jbGF6ei0+Z2V0X2ludGVyZmFjZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF90bXBfID0gbW9kdWxlLT5jbGF6ei0+Z2V0X2ludGVyZmFjZSggbW9kdWxlLCBGVF9TRVJWSUNFX0lEXyAjIyBpZCApOyBcCisgICAgKl9wcHRyXyA9IF90bXBfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FTkRfU1RNTlQKKworI2Vsc2UgLyogIUMrKyAqLworCisjZGVmaW5lIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBwdHIsIGlkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Nb2R1bGUgICBtb2R1bGUgPSBGVF9NT0RVTEUoIEZUX0ZBQ0UoIGZhY2UgKS0+ZHJpdmVyICk7ICAgICAgICAgICAgICBcCisgICAgRlRfUG9pbnRlciAgX3RtcF8gID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIG1vZHVsZS0+Y2xhenotPmdldF9pbnRlcmZhY2UgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfdG1wXyA9IG1vZHVsZS0+Y2xhenotPmdldF9pbnRlcmZhY2UoIG1vZHVsZSwgRlRfU0VSVklDRV9JRF8gIyMgaWQgKTsgXAorICAgIHB0ciA9IF90bXBfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNlbmRpZiAvKiAhQysrICovCisKKworICAvKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gbG9vayB1cCBhIHNlcnZpY2UgZnJvbSBhbGwgbW9kdWxlcy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgZmFjZSBoYW5kbGUuCisgICAqCisgICAqICAgaWQgOjoKKyAgICogICAgIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNlcnZpY2UgYXMgZGVmaW5lZCBpbiB0aGUgc2VydmljZSdzCisgICAqICAgICBoZWFkZXIgZmlsZXMgKGUuZy4gRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTIHdoaWNoIGV4cGFuZHMgdG8KKyAgICogICAgIGBtdWx0aS1tYXN0ZXJzJykuICBJdCBpcyBhdXRvbWF0aWNhbGx5IHByZWZpeGVkIHdpdGgKKyAgICogICAgIGBGVF9TRVJWSUNFX0lEXycuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgcHRyIDo6CisgICAqICAgICBBIHZhcmlhYmxlIHRoYXQgcmVjZWl2ZXMgdGhlIHNlcnZpY2UgcG9pbnRlci4gIFdpbGwgYmUgTlVMTAorICAgKiAgICAgaWYgbm90IGZvdW5kLgorICAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworCisjZGVmaW5lIEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSggZmFjZSwgcHRyLCBpZCApICAgICAgICAgICAgICAgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Nb2R1bGUgICAgbW9kdWxlID0gRlRfTU9EVUxFKCBGVF9GQUNFKCBmYWNlICktPmRyaXZlciApOyAgICBcCisgICAgRlRfUG9pbnRlciAgIF90bXBfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1BvaW50ZXIqICBfcHB0cl8gPSAoRlRfUG9pbnRlciopJihwdHIpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF90bXBfID0gZnRfbW9kdWxlX2dldF9zZXJ2aWNlKCBtb2R1bGUsIEZUX1NFUlZJQ0VfSURfICMjIGlkICk7IFwKKyAgICAqX3BwdHJfID0gX3RtcF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0VORF9TVE1OVAorCisjZWxzZSAvKiAhQysrICovCisKKyNkZWZpbmUgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBwdHIsIGlkICkgICAgICAgICAgICAgICBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01vZHVsZSAgIG1vZHVsZSA9IEZUX01PRFVMRSggRlRfRkFDRSggZmFjZSApLT5kcml2ZXIgKTsgICAgIFwKKyAgICBGVF9Qb2ludGVyICBfdG1wXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfdG1wXyA9IGZ0X21vZHVsZV9nZXRfc2VydmljZSggbW9kdWxlLCBGVF9TRVJWSUNFX0lEXyAjIyBpZCApOyBcCisgICAgcHRyICAgPSBfdG1wXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FTkRfU1RNTlQKKworI2VuZGlmIC8qICFDKysgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgIFMgRSBSIFYgSSBDIEUgICBEIEUgUyBDIFIgSSBQIFQgTyBSIFMgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIF9kZXNjcmliZV8gYSBnaXZlbiBzZXJ2aWNlCisgICAqICB0byB0aGUgbGlicmFyeS4gIFRoaXMgaXMgdXNlZnVsIHRvIGJ1aWxkIHNpbXBsZSBzdGF0aWMgc2VydmljZSBsaXN0cy4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TZXJ2aWNlRGVzY1JlY18KKyAgeworICAgIGNvbnN0IGNoYXIqICBzZXJ2X2lkOyAgICAgLyogc2VydmljZSBuYW1lICAgICAgICAgKi8KKyAgICBjb25zdCB2b2lkKiAgc2Vydl9kYXRhOyAgIC8qIHNlcnZpY2UgcG9pbnRlci9kYXRhICovCisKKyAgfSBGVF9TZXJ2aWNlRGVzY1JlYzsKKworICB0eXBlZGVmIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjKiAgRlRfU2VydmljZURlc2M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gYXJyYXkgb2YgRlRfU2VydmljZURlc2NSZWMgc3RydWN0dXJlcy4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bmN0aW9uIG5lZWRzIHRvICAqLworICAvKiAgICBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gcmV0dXJuIGFuIGFsbG9jYXRlZCBhcnJheS4gIEFzIHNvb24gYXMgKi8KKyAgLyogICAgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgYSBgZGVzdHJveScgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIHRvICovCisgIC8qICAgIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBtYW51YWxseSBjYWxsZWQgZnJvbSB0aGUgYHBpY19pbml0JyBhbmQgICovCisgIC8qICAgIGBwaWNfZnJlZScgZnVuY3Rpb25zIG9mIHlvdXIgbW9kdWxlIChzZWUgRlRfREVGSU5FX01PRFVMRSkuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgYXJyYXkgd2lsbCBiZSAgICAgICAgICovCisgIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvIGlzICAgICAqLworICAvKiAgICB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMSggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEgKSAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIGNsYXNzX1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgTlVMTCwgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMyKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIgKSAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIGNsYXNzX1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IE5VTEwsIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMyApICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgY2xhc3NfW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IE5VTEwsIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNCggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQgKSAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIGNsYXNzX1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMywgc2Vydl9kYXRhXzMgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgTlVMTCwgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM1KCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF80LCBzZXJ2X2RhdGFfNCwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNSwgc2Vydl9kYXRhXzUgKSAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIGNsYXNzX1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMywgc2Vydl9kYXRhXzMgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IE5VTEwsIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNiggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81LCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiApICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgY2xhc3NfW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IE5VTEwsIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81LCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNywgc2Vydl9kYXRhXzcgKSAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIGNsYXNzX1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMywgc2Vydl9kYXRhXzMgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfNiwgc2Vydl9kYXRhXzYgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzcsIHNlcnZfZGF0YV83IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgTlVMTCwgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSApICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiAyICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMiggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yICkgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqIDMgKSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elswXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsyXS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMl0uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMywgc2Vydl9kYXRhXzMgKSAgICAgICAgICAgICAgICAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogNCApICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzJdLnNlcnZfaWQgICA9IHNlcnZfaWRfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsyXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbM10uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzNdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0KCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF80LCBzZXJ2X2RhdGFfNCApICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiA1ICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IHNlcnZfaWRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMl0uc2Vydl9pZCAgID0gc2Vydl9pZF8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzJdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elszXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbM10uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzRdLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els0XS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNSggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81ICkgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqIDYgKSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elswXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsyXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzNdLnNlcnZfaWQgICA9IHNlcnZfaWRfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elszXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNF0uc2Vydl9pZCAgID0gc2Vydl9pZF81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzRdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els1XS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNV0uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzYoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMywgc2Vydl9kYXRhXzMsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80LCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNiwgc2Vydl9kYXRhXzYgKSAgICAgICAgICAgICAgICAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcykgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogNyApICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzJdLnNlcnZfaWQgICA9IHNlcnZfaWRfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsyXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbM10uc2Vydl9pZCAgID0gc2Vydl9pZF80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzNdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els0XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzVdLnNlcnZfaWQgICA9IHNlcnZfaWRfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els1XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNl0uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzZdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM3KCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF80LCBzZXJ2X2RhdGFfNCwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNSwgc2Vydl9kYXRhXzUsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzYsIHNlcnZfZGF0YV82LCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF83LCBzZXJ2X2RhdGFfNyApICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzKSAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiA4ICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IHNlcnZfaWRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbMl0uc2Vydl9pZCAgID0gc2Vydl9pZF8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzJdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elszXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbM10uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzRdLnNlcnZfaWQgICA9IHNlcnZfaWRfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els0XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNV0uc2Vydl9pZCAgID0gc2Vydl9pZF82OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzVdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV82OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els2XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbNl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzddLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6els3XS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKyAgLyoKKyAgICogIFBhcnNlIGEgbGlzdCBvZiBGVF9TZXJ2aWNlRGVzY1JlYyBkZXNjcmlwdG9ycyBhbmQgbG9vayBmb3IKKyAgICogIGEgc3BlY2lmaWMgc2VydmljZSBieSBJRC4gIE5vdGUgdGhhdCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZQorICAgKiAgYXJyYXkgbXVzdCBiZSB7IE5VTEwsIE5VTEwgfSwgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZAorICAgKiAgcmV0dXJuIE5VTEwgaWYgdGhlIHNlcnZpY2UgaXNuJ3QgYXZhaWxhYmxlLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBtb2R1bGVzIHRvIGltcGxlbWVudCB0aGVpcgorICAgKiAgYGdldF9zZXJ2aWNlJyBtZXRob2QuCisgICAqLworICBGVF9CQVNFKCBGVF9Qb2ludGVyICkKKyAgZnRfc2VydmljZV9saXN0X2xvb2t1cCggRlRfU2VydmljZURlc2MgIHNlcnZpY2VfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICBzZXJ2aWNlX2lkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgUyBFIFIgViBJIEMgRSBTICAgQyBBIEMgSCBFICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKgorICAgKiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzdG9yZSBhIGNhY2hlIGZvciBzZXZlcmFsIGZyZXF1ZW50bHkgdXNlZAorICAgKiAgc2VydmljZXMuICBJdCBpcyB0aGUgdHlwZSBvZiBgZmFjZS0+aW50ZXJuYWwtPnNlcnZpY2VzJy4gIFlvdQorICAgKiAgc2hvdWxkIG9ubHkgdXNlIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UgdG8gYWNjZXNzIGl0LgorICAgKgorICAgKiAgQWxsIGZpZWxkcyBzaG91bGQgaGF2ZSB0aGUgdHlwZSBGVF9Qb2ludGVyIHRvIHJlbGF4IGNvbXBpbGF0aW9uCisgICAqICBkZXBlbmRlbmNpZXMuICBXZSBhc3N1bWUgdGhlIGRldmVsb3BlciBpc24ndCBjb21wbGV0ZWx5IHN0dXBpZC4KKyAgICoKKyAgICogIEVhY2ggZmllbGQgbXVzdCBiZSBuYW1lZCBgc2VydmljZV9YWFhYJyB3aGVyZSBgWFhYJyBjb3JyZXNwb25kcyB0bworICAgKiAgdGhlIGNvcnJlY3QgRlRfU0VSVklDRV9JRF9YWFhYIG1hY3JvLiAgU2VlIHRoZSBkZWZpbml0aW9uIG9mCisgICAqICBGVF9GQUNFX0xPT0tVUF9TRVJWSUNFIGJlbG93IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NlcnZpY2VDYWNoZVJlY18KKyAgeworICAgIEZUX1BvaW50ZXIgIHNlcnZpY2VfUE9TVFNDUklQVF9GT05UX05BTUU7CisgICAgRlRfUG9pbnRlciAgc2VydmljZV9NVUxUSV9NQVNURVJTOworICAgIEZUX1BvaW50ZXIgIHNlcnZpY2VfR0xZUEhfRElDVDsKKyAgICBGVF9Qb2ludGVyICBzZXJ2aWNlX1BGUl9NRVRSSUNTOworICAgIEZUX1BvaW50ZXIgIHNlcnZpY2VfV0lORk5UOworCisgIH0gRlRfU2VydmljZUNhY2hlUmVjLCAqRlRfU2VydmljZUNhY2hlOworCisKKyAgLyoKKyAgICogIEEgbWFnaWMgbnVtYmVyIHVzZWQgd2l0aGluIHRoZSBzZXJ2aWNlcyBjYWNoZS4KKyAgICovCisKKyAgLyogZW5zdXJlIHRoYXQgdmFsdWUgYDEnIGhhcyB0aGUgc2FtZSB3aWR0aCBhcyBhIHBvaW50ZXIgKi8KKyNkZWZpbmUgRlRfU0VSVklDRV9VTkFWQUlMQUJMRSAgKChGVF9Qb2ludGVyKX4oRlRfUHRyRGlzdCkxKQorCisKKyAgLyoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBsb29rdXAgYSBzZXJ2aWNlIGZyb20gYSBmYWNlJ3MgZHJpdmVyIG1vZHVsZQorICAgKiAgIHVzaW5nIGl0cyBjYWNoZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2U6OgorICAgKiAgICAgVGhlIHNvdXJjZSBmYWNlIGhhbmRsZSBjb250YWluaW5nIHRoZSBjYWNoZS4KKyAgICoKKyAgICogICBmaWVsZCA6OgorICAgKiAgICAgVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGNhY2hlLgorICAgKgorICAgKiAgIGlkIDo6CisgICAqICAgICBUaGUgc2VydmljZSBJRC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBwdHIgOjoKKyAgICogICAgIEEgdmFyaWFibGUgcmVjZWl2aW5nIHRoZSBzZXJ2aWNlIGRhdGEuICBOVUxMIGlmIG5vdCBhdmFpbGFibGUuCisgICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisKKyNkZWZpbmUgRlRfRkFDRV9MT09LVVBfU0VSVklDRSggZmFjZSwgcHRyLCBpZCApICAgICAgICAgICAgICAgIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Qb2ludGVyICAgc3ZjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9Qb2ludGVyKiAgUHB0ciA9IChGVF9Qb2ludGVyKikmKHB0cik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdmMgPSBGVF9GQUNFKCBmYWNlICktPmludGVybmFsLT5zZXJ2aWNlcy4gc2VydmljZV8gIyMgaWQ7IFwKKyAgICBpZiAoIHN2YyA9PSBGVF9TRVJWSUNFX1VOQVZBSUxBQkxFICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN2YyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICggc3ZjID09IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzdmMsIGlkICk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZBQ0UoIGZhY2UgKS0+aW50ZXJuYWwtPnNlcnZpY2VzLiBzZXJ2aWNlXyAjIyBpZCA9ICAgIFwKKyAgICAgICAgKEZUX1BvaW50ZXIpKCBzdmMgIT0gTlVMTCA/IHN2YyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZUX1NFUlZJQ0VfVU5BVkFJTEFCTEUgKTsgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqUHB0ciA9IHN2YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNlbHNlIC8qICFDKysgKi8KKworI2RlZmluZSBGVF9GQUNFX0xPT0tVUF9TRVJWSUNFKCBmYWNlLCBwdHIsIGlkICkgICAgICAgICAgICAgICAgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1BvaW50ZXIgIHN2YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN2YyA9IEZUX0ZBQ0UoIGZhY2UgKS0+aW50ZXJuYWwtPnNlcnZpY2VzLiBzZXJ2aWNlXyAjIyBpZDsgXAorICAgIGlmICggc3ZjID09IEZUX1NFUlZJQ0VfVU5BVkFJTEFCTEUgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3ZjID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKCBzdmMgPT0gTlVMTCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHN2YywgaWQgKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRfRkFDRSggZmFjZSApLT5pbnRlcm5hbC0+c2VydmljZXMuIHNlcnZpY2VfICMjIGlkID0gICAgXAorICAgICAgICAoRlRfUG9pbnRlcikoIHN2YyAhPSBOVUxMID8gc3ZjICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRlRfU0VSVklDRV9VTkFWQUlMQUJMRSApOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB0ciA9IHN2YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FTkRfU1RNTlQKKworI2VuZGlmIC8qICFDKysgKi8KKworICAvKgorICAgKiAgQSBtYWNybyB1c2VkIHRvIGRlZmluZSBuZXcgc2VydmljZSBzdHJ1Y3R1cmUgdHlwZXMuCisgICAqLworCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFKCBuYW1lICkgICAgICAgICAgICBcCisgIHR5cGVkZWYgc3RydWN0IEZUX1NlcnZpY2VfICMjIG5hbWUgIyMgUmVjXyBcCisgICAgRlRfU2VydmljZV8gIyMgbmFtZSAjIyBSZWMgOyAgICAgICAgICAgICBcCisgIHR5cGVkZWYgc3RydWN0IEZUX1NlcnZpY2VfICMjIG5hbWUgIyMgUmVjXyBcCisgICAgY29uc3QgKiBGVF9TZXJ2aWNlXyAjIyBuYW1lIDsgICAgICAgICAgICBcCisgIHN0cnVjdCBGVF9TZXJ2aWNlXyAjIyBuYW1lICMjIFJlY18KKworICAvKiAqLworCisgIC8qCisgICAqICBUaGUgaGVhZGVyIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNlcnZpY2VzLgorICAgKi8KKworI2RlZmluZSBGVF9TRVJWSUNFX0JERl9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgorI2RlZmluZSBGVF9TRVJWSUNFX0NJRF9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSCAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX0dYX1ZBTElEQVRFX0ggICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfS0VSTklOR19IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oPgorI2RlZmluZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSCAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9QRlJfSCAgICAgICAgICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0ggICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0ggICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfU0ZOVF9IICAgICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9IICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfVFRfQ01BUF9IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfV0lORk5UX0ggICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSCAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9IICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmg+CisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUU0VSVl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL2Z0c3RyZWFtLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdHN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NGU1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC0wLDAgKzEsNTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHN0cmVhbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU3RyZWFtIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFNUUkVBTV9IX18KKyNkZWZpbmUgX19GVFNUUkVBTV9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIGZvcm1hdCBvZiBhbiA4LWJpdCBmcmFtZV9vcCB2YWx1ZTogICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGJpdCAgNzY1NDMyMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgeHh4eHh4ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHMgaXMgc2V0IHRvIDEgaWYgdGhlIHZhbHVlIGlzIHNpZ25lZC4gICAgICAgICovCisgIC8qIGUgaXMgc2V0IHRvIDEgaWYgdGhlIHZhbHVlIGlzIGxpdHRsZS1lbmRpYW4uICovCisgIC8qIHh4eCBpcyBhIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRlRfRlJBTUVfT1BfU0hJRlQgICAgICAgICAyCisjZGVmaW5lIEZUX0ZSQU1FX09QX1NJR05FRCAgICAgICAgMQorI2RlZmluZSBGVF9GUkFNRV9PUF9MSVRUTEUgICAgICAgIDIKKyNkZWZpbmUgRlRfRlJBTUVfT1BfQ09NTUFORCggeCApICAoIHggPj4gRlRfRlJBTUVfT1BfU0hJRlQgKQorCisjZGVmaW5lIEZUX01BS0VfRlJBTUVfT1AoIGNvbW1hbmQsIGxpdHRsZSwgc2lnbiApIFwKKyAgICAgICAgICAoICggY29tbWFuZCA8PCBGVF9GUkFNRV9PUF9TSElGVCApIHwgKCBsaXR0bGUgPDwgMSApIHwgc2lnbiApCisKKyNkZWZpbmUgRlRfRlJBTUVfT1BfRU5EICAgIDAKKyNkZWZpbmUgRlRfRlJBTUVfT1BfU1RBUlQgIDEgIC8qIHN0YXJ0IGEgbmV3IGZyYW1lICAgICAqLworI2RlZmluZSBGVF9GUkFNRV9PUF9CWVRFICAgMiAgLyogcmVhZCAxLWJ5dGUgdmFsdWUgICAgICovCisjZGVmaW5lIEZUX0ZSQU1FX09QX1NIT1JUICAzICAvKiByZWFkIDItYnl0ZSB2YWx1ZSAgICAgKi8KKyNkZWZpbmUgRlRfRlJBTUVfT1BfTE9ORyAgIDQgIC8qIHJlYWQgNC1ieXRlIHZhbHVlICAgICAqLworI2RlZmluZSBGVF9GUkFNRV9PUF9PRkYzICAgNSAgLyogcmVhZCAzLWJ5dGUgdmFsdWUgICAgICovCisjZGVmaW5lIEZUX0ZSQU1FX09QX0JZVEVTICA2ICAvKiByZWFkIGEgYnl0ZXMgc2VxdWVuY2UgKi8KKworCisgIHR5cGVkZWYgZW51bSAgRlRfRnJhbWVfT3BfCisgIHsKKyAgICBmdF9mcmFtZV9lbmQgICAgICAgPSAwLAorICAgIGZ0X2ZyYW1lX3N0YXJ0ICAgICA9IEZUX01BS0VfRlJBTUVfT1AoIEZUX0ZSQU1FX09QX1NUQVJULCAwLCAwICksCisKKyAgICBmdF9mcmFtZV9ieXRlICAgICAgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9CWVRFLCAgMCwgMCApLAorICAgIGZ0X2ZyYW1lX3NjaGFyICAgICA9IEZUX01BS0VfRlJBTUVfT1AoIEZUX0ZSQU1FX09QX0JZVEUsICAwLCAxICksCisKKyAgICBmdF9mcmFtZV91c2hvcnRfYmUgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9TSE9SVCwgMCwgMCApLAorICAgIGZ0X2ZyYW1lX3Nob3J0X2JlICA9IEZUX01BS0VfRlJBTUVfT1AoIEZUX0ZSQU1FX09QX1NIT1JULCAwLCAxICksCisgICAgZnRfZnJhbWVfdXNob3J0X2xlID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfU0hPUlQsIDEsIDAgKSwKKyAgICBmdF9mcmFtZV9zaG9ydF9sZSAgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9TSE9SVCwgMSwgMSApLAorCisgICAgZnRfZnJhbWVfdWxvbmdfYmUgID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfTE9ORywgMCwgMCApLAorICAgIGZ0X2ZyYW1lX2xvbmdfYmUgICA9IEZUX01BS0VfRlJBTUVfT1AoIEZUX0ZSQU1FX09QX0xPTkcsIDAsIDEgKSwKKyAgICBmdF9mcmFtZV91bG9uZ19sZSAgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9MT05HLCAxLCAwICksCisgICAgZnRfZnJhbWVfbG9uZ19sZSAgID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfTE9ORywgMSwgMSApLAorCisgICAgZnRfZnJhbWVfdW9mZjNfYmUgID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfT0ZGMywgMCwgMCApLAorICAgIGZ0X2ZyYW1lX29mZjNfYmUgICA9IEZUX01BS0VfRlJBTUVfT1AoIEZUX0ZSQU1FX09QX09GRjMsIDAsIDEgKSwKKyAgICBmdF9mcmFtZV91b2ZmM19sZSAgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9PRkYzLCAxLCAwICksCisgICAgZnRfZnJhbWVfb2ZmM19sZSAgID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfT0ZGMywgMSwgMSApLAorCisgICAgZnRfZnJhbWVfYnl0ZXMgICAgID0gRlRfTUFLRV9GUkFNRV9PUCggRlRfRlJBTUVfT1BfQllURVMsIDAsIDAgKSwKKyAgICBmdF9mcmFtZV9za2lwICAgICAgPSBGVF9NQUtFX0ZSQU1FX09QKCBGVF9GUkFNRV9PUF9CWVRFUywgMCwgMSApCisKKyAgfSBGVF9GcmFtZV9PcDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVF9GcmFtZV9GaWVsZF8KKyAgeworICAgIEZUX0J5dGUgICAgdmFsdWU7CisgICAgRlRfQnl0ZSAgICBzaXplOworICAgIEZUX1VTaG9ydCAgb2Zmc2V0OworCisgIH0gRlRfRnJhbWVfRmllbGQ7CisKKworICAvKiBDb25zdHJ1Y3QgYW4gRlRfRnJhbWVfRmllbGQgb3V0IG9mIGEgc3RydWN0dXJlIHR5cGUgYW5kIGEgZmllbGQgbmFtZS4gKi8KKyAgLyogVGhlIHN0cnVjdHVyZSB0eXBlIG11c3QgYmUgc2V0IGluIHRoZSBGVF9TVFJVQ1RVUkUgbWFjcm8gYmVmb3JlICAgICAgICovCisgIC8qIGNhbGxpbmcgdGhlIEZUX0ZSQU1FX1NUQVJUKCkgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfRklFTERfU0laRSggZiApIFwKKyAgICAgICAgICAoRlRfQnl0ZSlzaXplb2YgKCAoKEZUX1NUUlVDVFVSRSopMCktPmYgKQorCisjZGVmaW5lIEZUX0ZJRUxEX1NJWkVfREVMVEEoIGYgKSBcCisgICAgICAgICAgKEZUX0J5dGUpc2l6ZW9mICggKChGVF9TVFJVQ1RVUkUqKTApLT5mWzBdICkKKworI2RlZmluZSBGVF9GSUVMRF9PRkZTRVQoIGYgKSBcCisgICAgICAgICAgKEZUX1VTaG9ydCkoIG9mZnNldG9mKCBGVF9TVFJVQ1RVUkUsIGYgKSApCisKKyNkZWZpbmUgRlRfRlJBTUVfRklFTEQoIGZyYW1lX29wLCBmaWVsZCApIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZyYW1lX29wLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX1NJWkUoIGZpZWxkICksICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX09GRlNFVCggZmllbGQgKSAgICAgIFwKKyAgICAgICAgICB9CisKKyNkZWZpbmUgRlRfTUFLRV9FTVBUWV9GSUVMRCggZnJhbWVfb3AgKSAgeyBmcmFtZV9vcCwgMCwgMCB9CisKKyNkZWZpbmUgRlRfRlJBTUVfU1RBUlQoIHNpemUgKSAgIHsgZnRfZnJhbWVfc3RhcnQsIDAsIHNpemUgfQorI2RlZmluZSBGVF9GUkFNRV9FTkQgICAgICAgICAgICAgeyBmdF9mcmFtZV9lbmQsIDAsIDAgfQorCisjZGVmaW5lIEZUX0ZSQU1FX0xPTkcoIGYgKSAgICAgICBGVF9GUkFNRV9GSUVMRCggZnRfZnJhbWVfbG9uZ19iZSwgZiApCisjZGVmaW5lIEZUX0ZSQU1FX1VMT05HKCBmICkgICAgICBGVF9GUkFNRV9GSUVMRCggZnRfZnJhbWVfdWxvbmdfYmUsIGYgKQorI2RlZmluZSBGVF9GUkFNRV9TSE9SVCggZiApICAgICAgRlRfRlJBTUVfRklFTEQoIGZ0X2ZyYW1lX3Nob3J0X2JlLCBmICkKKyNkZWZpbmUgRlRfRlJBTUVfVVNIT1JUKCBmICkgICAgIEZUX0ZSQU1FX0ZJRUxEKCBmdF9mcmFtZV91c2hvcnRfYmUsIGYgKQorI2RlZmluZSBGVF9GUkFNRV9PRkYzKCBmICkgICAgICAgRlRfRlJBTUVfRklFTEQoIGZ0X2ZyYW1lX29mZjNfYmUsIGYgKQorI2RlZmluZSBGVF9GUkFNRV9VT0ZGMyggZiApICAgICAgRlRfRlJBTUVfRklFTEQoIGZ0X2ZyYW1lX3VvZmYzX2JlLCBmICkKKyNkZWZpbmUgRlRfRlJBTUVfQllURSggZiApICAgICAgIEZUX0ZSQU1FX0ZJRUxEKCBmdF9mcmFtZV9ieXRlLCBmICkKKyNkZWZpbmUgRlRfRlJBTUVfQ0hBUiggZiApICAgICAgIEZUX0ZSQU1FX0ZJRUxEKCBmdF9mcmFtZV9zY2hhciwgZiApCisKKyNkZWZpbmUgRlRfRlJBTUVfTE9OR19MRSggZiApICAgIEZUX0ZSQU1FX0ZJRUxEKCBmdF9mcmFtZV9sb25nX2xlLCBmICkKKyNkZWZpbmUgRlRfRlJBTUVfVUxPTkdfTEUoIGYgKSAgIEZUX0ZSQU1FX0ZJRUxEKCBmdF9mcmFtZV91bG9uZ19sZSwgZiApCisjZGVmaW5lIEZUX0ZSQU1FX1NIT1JUX0xFKCBmICkgICBGVF9GUkFNRV9GSUVMRCggZnRfZnJhbWVfc2hvcnRfbGUsIGYgKQorI2RlZmluZSBGVF9GUkFNRV9VU0hPUlRfTEUoIGYgKSAgRlRfRlJBTUVfRklFTEQoIGZ0X2ZyYW1lX3VzaG9ydF9sZSwgZiApCisjZGVmaW5lIEZUX0ZSQU1FX09GRjNfTEUoIGYgKSAgICBGVF9GUkFNRV9GSUVMRCggZnRfZnJhbWVfb2ZmM19sZSwgZiApCisjZGVmaW5lIEZUX0ZSQU1FX1VPRkYzX0xFKCBmICkgICBGVF9GUkFNRV9GSUVMRCggZnRfZnJhbWVfdW9mZjNfbGUsIGYgKQorCisjZGVmaW5lIEZUX0ZSQU1FX1NLSVBfTE9ORyAgICAgICB7IGZ0X2ZyYW1lX2xvbmdfYmUsIDAsIDAgfQorI2RlZmluZSBGVF9GUkFNRV9TS0lQX1NIT1JUICAgICAgeyBmdF9mcmFtZV9zaG9ydF9iZSwgMCwgMCB9CisjZGVmaW5lIEZUX0ZSQU1FX1NLSVBfQllURSAgICAgICB7IGZ0X2ZyYW1lX2J5dGUsIDAsIDAgfQorCisjZGVmaW5lIEZUX0ZSQU1FX0JZVEVTKCBmaWVsZCwgY291bnQgKSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmdF9mcmFtZV9ieXRlcywgICAgICAgICAgICBcCisgICAgICAgICAgICBjb3VudCwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9PRkZTRVQoIGZpZWxkICkgICBcCisgICAgICAgICAgfQorCisjZGVmaW5lIEZUX0ZSQU1FX1NLSVBfQllURVMoIGNvdW50ICkgIHsgZnRfZnJhbWVfc2tpcCwgY291bnQsIDAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbnRlZ2VyIGV4dHJhY3Rpb24gbWFjcm9zIC0tIHRoZSBgYnVmZmVyJyBwYXJhbWV0ZXIgbXVzdCBBTFdBWVMgYmUgb2YgKi8KKyAgLyogdHlwZSBgY2hhcionIG9yIGVxdWl2YWxlbnQgKDEtYnl0ZSBlbGVtZW50cykuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZUX0JZVEVfKCBwLCBpICkgICggKChjb25zdCBGVF9CeXRlKikocCkpWyhpKV0gKQorCisjZGVmaW5lIEZUX0lOVDE2KCB4ICkgICAoIChGVF9JbnQxNikoeCkgICkKKyNkZWZpbmUgRlRfVUlOVDE2KCB4ICkgICggKEZUX1VJbnQxNikoeCkgKQorI2RlZmluZSBGVF9JTlQzMiggeCApICAgKCAoRlRfSW50MzIpKHgpICApCisjZGVmaW5lIEZUX1VJTlQzMiggeCApICAoIChGVF9VSW50MzIpKHgpICkKKworCisjZGVmaW5lIEZUX0JZVEVfVTE2KCBwLCBpLCBzICkgICggRlRfVUlOVDE2KCBGVF9CWVRFXyggcCwgaSApICkgPDwgKHMpICkKKyNkZWZpbmUgRlRfQllURV9VMzIoIHAsIGksIHMgKSAgKCBGVF9VSU5UMzIoIEZUX0JZVEVfKCBwLCBpICkgKSA8PCAocykgKQorCisKKyNkZWZpbmUgRlRfUEVFS19TSE9SVCggcCApICBGVF9JTlQxNiggRlRfQllURV9VMTYoIHAsIDAsIDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UxNiggcCwgMSwgMCkgKQorCisjZGVmaW5lIEZUX1BFRUtfVVNIT1JUKCBwICkgIEZUX1VJTlQxNiggRlRfQllURV9VMTYoIHAsIDAsIDggKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UxNiggcCwgMSwgMCApICkKKworI2RlZmluZSBGVF9QRUVLX0xPTkcoIHAgKSAgRlRfSU5UMzIoIEZUX0JZVEVfVTMyKCBwLCAwLCAyNCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAxLCAxNiApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAyLCAgOCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAzLCAgMCApICkKKworI2RlZmluZSBGVF9QRUVLX1VMT05HKCBwICkgIEZUX1VJTlQzMiggRlRfQllURV9VMzIoIHAsIDAsIDI0ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMSwgMTYgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAyLCAgOCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDMsICAwICkgKQorCisjZGVmaW5lIEZUX1BFRUtfT0ZGMyggcCApICBGVF9JTlQzMiggRlRfQllURV9VMzIoIHAsIDAsIDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDEsICA4ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDIsICAwICkgKQorCisjZGVmaW5lIEZUX1BFRUtfVU9GRjMoIHAgKSAgRlRfVUlOVDMyKCBGVF9CWVRFX1UzMiggcCwgMCwgMTYgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAxLCAgOCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDIsICAwICkgKQorCisjZGVmaW5lIEZUX1BFRUtfU0hPUlRfTEUoIHAgKSAgRlRfSU5UMTYoIEZUX0JZVEVfVTE2KCBwLCAxLCA4ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTE2KCBwLCAwLCAwICkgKQorCisjZGVmaW5lIEZUX1BFRUtfVVNIT1JUX0xFKCBwICkgIEZUX1VJTlQxNiggRlRfQllURV9VMTYoIHAsIDEsIDggKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMTYoIHAsIDAsIDAgKSApCisKKyNkZWZpbmUgRlRfUEVFS19MT05HX0xFKCBwICkgIEZUX0lOVDMyKCBGVF9CWVRFX1UzMiggcCwgMywgMjQgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMiwgMTYgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMSwgIDggKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMCwgIDAgKSApCisKKyNkZWZpbmUgRlRfUEVFS19VTE9OR19MRSggcCApICBGVF9VSU5UMzIoIEZUX0JZVEVfVTMyKCBwLCAzLCAyNCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDIsIDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMSwgIDggKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAwLCAgMCApICkKKworI2RlZmluZSBGVF9QRUVLX09GRjNfTEUoIHAgKSAgRlRfSU5UMzIoIEZUX0JZVEVfVTMyKCBwLCAyLCAxNiApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAxLCAgOCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAwLCAgMCApICkKKworI2RlZmluZSBGVF9QRUVLX1VPRkYzX0xFKCBwICkgIEZUX1VJTlQzMiggRlRfQllURV9VMzIoIHAsIDIsIDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UzMiggcCwgMSwgIDggKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAwLCAgMCApICkKKworCisjZGVmaW5lIEZUX05FWFRfQ0hBUiggYnVmZmVyICkgICAgICAgXAorICAgICAgICAgICggKHNpZ25lZCBjaGFyKSpidWZmZXIrKyApCisKKyNkZWZpbmUgRlRfTkVYVF9CWVRFKCBidWZmZXIgKSAgICAgICAgIFwKKyAgICAgICAgICAoICh1bnNpZ25lZCBjaGFyKSpidWZmZXIrKyApCisKKyNkZWZpbmUgRlRfTkVYVF9TSE9SVCggYnVmZmVyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChzaG9ydCkoIGJ1ZmZlciArPSAyLCBGVF9QRUVLX1NIT1JUKCBidWZmZXIgLSAyICkgKSApCisKKyNkZWZpbmUgRlRfTkVYVF9VU0hPUlQoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAodW5zaWduZWQgc2hvcnQpKCBidWZmZXIgKz0gMiwgRlRfUEVFS19VU0hPUlQoIGJ1ZmZlciAtIDIgKSApICkKKworI2RlZmluZSBGVF9ORVhUX09GRjMoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChsb25nKSggYnVmZmVyICs9IDMsIEZUX1BFRUtfT0ZGMyggYnVmZmVyIC0gMyApICkgKQorCisjZGVmaW5lIEZUX05FWFRfVU9GRjMoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSggYnVmZmVyICs9IDMsIEZUX1BFRUtfVU9GRjMoIGJ1ZmZlciAtIDMgKSApICkKKworI2RlZmluZSBGVF9ORVhUX0xPTkcoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChsb25nKSggYnVmZmVyICs9IDQsIEZUX1BFRUtfTE9ORyggYnVmZmVyIC0gNCApICkgKQorCisjZGVmaW5lIEZUX05FWFRfVUxPTkcoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSggYnVmZmVyICs9IDQsIEZUX1BFRUtfVUxPTkcoIGJ1ZmZlciAtIDQgKSApICkKKworCisjZGVmaW5lIEZUX05FWFRfU0hPUlRfTEUoIGJ1ZmZlciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoc2hvcnQpKCBidWZmZXIgKz0gMiwgRlRfUEVFS19TSE9SVF9MRSggYnVmZmVyIC0gMiApICkgKQorCisjZGVmaW5lIEZUX05FWFRfVVNIT1JUX0xFKCBidWZmZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKHVuc2lnbmVkIHNob3J0KSggYnVmZmVyICs9IDIsIEZUX1BFRUtfVVNIT1JUX0xFKCBidWZmZXIgLSAyICkgKSApCisKKyNkZWZpbmUgRlRfTkVYVF9PRkYzX0xFKCBidWZmZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAobG9uZykoIGJ1ZmZlciArPSAzLCBGVF9QRUVLX09GRjNfTEUoIGJ1ZmZlciAtIDMgKSApICkKKworI2RlZmluZSBGVF9ORVhUX1VPRkYzX0xFKCBidWZmZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAodW5zaWduZWQgbG9uZykoIGJ1ZmZlciArPSAzLCBGVF9QRUVLX1VPRkYzX0xFKCBidWZmZXIgLSAzICkgKSApCisKKyNkZWZpbmUgRlRfTkVYVF9MT05HX0xFKCBidWZmZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAobG9uZykoIGJ1ZmZlciArPSA0LCBGVF9QRUVLX0xPTkdfTEUoIGJ1ZmZlciAtIDQgKSApICkKKworI2RlZmluZSBGVF9ORVhUX1VMT05HX0xFKCBidWZmZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAodW5zaWduZWQgbG9uZykoIGJ1ZmZlciArPSA0LCBGVF9QRUVLX1VMT05HX0xFKCBidWZmZXIgLSA0ICkgKSApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVhY2ggR0VUX3h4eHgoKSBtYWNybyB1c2VzIGFuIGltcGxpY2l0IGBzdHJlYW0nIHZhcmlhYmxlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiAwCisjZGVmaW5lIEZUX0dFVF9NQUNSTyggdHlwZSApICAgIEZUX05FWFRfICMjIHR5cGUgKCBzdHJlYW0tPmN1cnNvciApCisKKyNkZWZpbmUgRlRfR0VUX0NIQVIoKSAgICAgICBGVF9HRVRfTUFDUk8oIENIQVIgKQorI2RlZmluZSBGVF9HRVRfQllURSgpICAgICAgIEZUX0dFVF9NQUNSTyggQllURSApCisjZGVmaW5lIEZUX0dFVF9TSE9SVCgpICAgICAgRlRfR0VUX01BQ1JPKCBTSE9SVCApCisjZGVmaW5lIEZUX0dFVF9VU0hPUlQoKSAgICAgRlRfR0VUX01BQ1JPKCBVU0hPUlQgKQorI2RlZmluZSBGVF9HRVRfT0ZGMygpICAgICAgIEZUX0dFVF9NQUNSTyggT0ZGMyApCisjZGVmaW5lIEZUX0dFVF9VT0ZGMygpICAgICAgRlRfR0VUX01BQ1JPKCBVT0ZGMyApCisjZGVmaW5lIEZUX0dFVF9MT05HKCkgICAgICAgRlRfR0VUX01BQ1JPKCBMT05HICkKKyNkZWZpbmUgRlRfR0VUX1VMT05HKCkgICAgICBGVF9HRVRfTUFDUk8oIFVMT05HICkKKyNkZWZpbmUgRlRfR0VUX1RBRzQoKSAgICAgICBGVF9HRVRfTUFDUk8oIFVMT05HICkKKworI2RlZmluZSBGVF9HRVRfU0hPUlRfTEUoKSAgIEZUX0dFVF9NQUNSTyggU0hPUlRfTEUgKQorI2RlZmluZSBGVF9HRVRfVVNIT1JUX0xFKCkgIEZUX0dFVF9NQUNSTyggVVNIT1JUX0xFICkKKyNkZWZpbmUgRlRfR0VUX0xPTkdfTEUoKSAgICBGVF9HRVRfTUFDUk8oIExPTkdfTEUgKQorI2RlZmluZSBGVF9HRVRfVUxPTkdfTEUoKSAgIEZUX0dFVF9NQUNSTyggVUxPTkdfTEUgKQorCisjZWxzZQorI2RlZmluZSBGVF9HRVRfTUFDUk8oIGZ1bmMsIHR5cGUgKSAgICAgICAgKCAodHlwZSlmdW5jKCBzdHJlYW0gKSApCisKKyNkZWZpbmUgRlRfR0VUX0NIQVIoKSAgICAgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRDaGFyLCBGVF9DaGFyICkKKyNkZWZpbmUgRlRfR0VUX0JZVEUoKSAgICAgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRDaGFyLCBGVF9CeXRlICkKKyNkZWZpbmUgRlRfR0VUX1NIT1JUKCkgICAgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRVU2hvcnQsIEZUX1Nob3J0ICkKKyNkZWZpbmUgRlRfR0VUX1VTSE9SVCgpICAgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRVU2hvcnQsIEZUX1VTaG9ydCApCisjZGVmaW5lIEZUX0dFVF9PRkYzKCkgICAgICAgRlRfR0VUX01BQ1JPKCBGVF9TdHJlYW1fR2V0VU9mZnNldCwgRlRfTG9uZyApCisjZGVmaW5lIEZUX0dFVF9VT0ZGMygpICAgICAgRlRfR0VUX01BQ1JPKCBGVF9TdHJlYW1fR2V0VU9mZnNldCwgRlRfVUxvbmcgKQorI2RlZmluZSBGVF9HRVRfTE9ORygpICAgICAgIEZUX0dFVF9NQUNSTyggRlRfU3RyZWFtX0dldFVMb25nLCBGVF9Mb25nICkKKyNkZWZpbmUgRlRfR0VUX1VMT05HKCkgICAgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRVTG9uZywgRlRfVUxvbmcgKQorI2RlZmluZSBGVF9HRVRfVEFHNCgpICAgICAgIEZUX0dFVF9NQUNSTyggRlRfU3RyZWFtX0dldFVMb25nLCBGVF9VTG9uZyApCisKKyNkZWZpbmUgRlRfR0VUX1NIT1JUX0xFKCkgICBGVF9HRVRfTUFDUk8oIEZUX1N0cmVhbV9HZXRVU2hvcnRMRSwgRlRfU2hvcnQgKQorI2RlZmluZSBGVF9HRVRfVVNIT1JUX0xFKCkgIEZUX0dFVF9NQUNSTyggRlRfU3RyZWFtX0dldFVTaG9ydExFLCBGVF9VU2hvcnQgKQorI2RlZmluZSBGVF9HRVRfTE9OR19MRSgpICAgIEZUX0dFVF9NQUNSTyggRlRfU3RyZWFtX0dldFVMb25nTEUsIEZUX0xvbmcgKQorI2RlZmluZSBGVF9HRVRfVUxPTkdfTEUoKSAgIEZUX0dFVF9NQUNSTyggRlRfU3RyZWFtX0dldFVMb25nTEUsIEZUX1VMb25nICkKKyNlbmRpZgorCisjZGVmaW5lIEZUX1JFQURfTUFDUk8oIGZ1bmMsIHR5cGUsIHZhciApICAgICAgICBcCisgICAgICAgICAgKCB2YXIgPSAodHlwZSlmdW5jKCBzdHJlYW0sICZlcnJvciApLCBcCisgICAgICAgICAgICBlcnJvciAhPSBGVF9FcnJfT2sgKQorCisjZGVmaW5lIEZUX1JFQURfQllURSggdmFyICkgICAgICAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRDaGFyLCBGVF9CeXRlLCB2YXIgKQorI2RlZmluZSBGVF9SRUFEX0NIQVIoIHZhciApICAgICAgIEZUX1JFQURfTUFDUk8oIEZUX1N0cmVhbV9SZWFkQ2hhciwgRlRfQ2hhciwgdmFyICkKKyNkZWZpbmUgRlRfUkVBRF9TSE9SVCggdmFyICkgICAgICBGVF9SRUFEX01BQ1JPKCBGVF9TdHJlYW1fUmVhZFVTaG9ydCwgRlRfU2hvcnQsIHZhciApCisjZGVmaW5lIEZUX1JFQURfVVNIT1JUKCB2YXIgKSAgICAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRVU2hvcnQsIEZUX1VTaG9ydCwgdmFyICkKKyNkZWZpbmUgRlRfUkVBRF9PRkYzKCB2YXIgKSAgICAgICBGVF9SRUFEX01BQ1JPKCBGVF9TdHJlYW1fUmVhZFVPZmZzZXQsIEZUX0xvbmcsIHZhciApCisjZGVmaW5lIEZUX1JFQURfVU9GRjMoIHZhciApICAgICAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRVT2Zmc2V0LCBGVF9VTG9uZywgdmFyICkKKyNkZWZpbmUgRlRfUkVBRF9MT05HKCB2YXIgKSAgICAgICBGVF9SRUFEX01BQ1JPKCBGVF9TdHJlYW1fUmVhZFVMb25nLCBGVF9Mb25nLCB2YXIgKQorI2RlZmluZSBGVF9SRUFEX1VMT05HKCB2YXIgKSAgICAgIEZUX1JFQURfTUFDUk8oIEZUX1N0cmVhbV9SZWFkVUxvbmcsIEZUX1VMb25nLCB2YXIgKQorCisjZGVmaW5lIEZUX1JFQURfU0hPUlRfTEUoIHZhciApICAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRVU2hvcnRMRSwgRlRfU2hvcnQsIHZhciApCisjZGVmaW5lIEZUX1JFQURfVVNIT1JUX0xFKCB2YXIgKSAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRVU2hvcnRMRSwgRlRfVVNob3J0LCB2YXIgKQorI2RlZmluZSBGVF9SRUFEX0xPTkdfTEUoIHZhciApICAgIEZUX1JFQURfTUFDUk8oIEZUX1N0cmVhbV9SZWFkVUxvbmdMRSwgRlRfTG9uZywgdmFyICkKKyNkZWZpbmUgRlRfUkVBRF9VTE9OR19MRSggdmFyICkgICBGVF9SRUFEX01BQ1JPKCBGVF9TdHJlYW1fUmVhZFVMb25nTEUsIEZUX1VMb25nLCB2YXIgKQorCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9OT19ERUZBVUxUX1NZU1RFTQorCisgIC8qIGluaXRpYWxpemUgYSBzdHJlYW0gZm9yIHJlYWRpbmcgYSByZWd1bGFyIHN5c3RlbSBzdHJlYW0gKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbiggRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKTsKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fTk9fREVGQVVMVF9TWVNURU0gKi8KKworCisgIC8qIGNyZWF0ZSBhIG5ldyAoaW5wdXQpIHN0cmVhbSBmcm9tIGFuIEZUX09wZW5fQXJncyBzdHJ1Y3R1cmUgKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fTmV3KCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBjb25zdCBGVF9PcGVuX0FyZ3MqICBhcmdzLAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICphc3RyZWFtICk7CisKKyAgLyogZnJlZSBhIHN0cmVhbSAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfU3RyZWFtX0ZyZWUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBleHRlcm5hbCApOworCisgIC8qIGluaXRpYWxpemUgYSBzdHJlYW0gZm9yIHJlYWRpbmcgaW4tbWVtb3J5IGRhdGEgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX1N0cmVhbV9PcGVuTWVtb3J5KCBGVF9TdHJlYW0gICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQnl0ZSogIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgc2l6ZSApOworCisgIC8qIGNsb3NlIGEgc3RyZWFtIChkb2VzIG5vdCBkZXN0cm95IHRoZSBzdHJlYW0gc3RydWN0dXJlKSAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfU3RyZWFtX0Nsb3NlKCBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgLyogc2VlayB3aXRoaW4gYSBzdHJlYW0uIHBvc2l0aW9uIGlzIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0cmVhbSAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9TZWVrKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zICk7CisKKyAgLyogc2tpcCBieXRlcyBpbiBhIHN0cmVhbSAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9Ta2lwKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgZGlzdGFuY2UgKTsKKworICAvKiByZXR1cm4gY3VycmVudCBzdHJlYW0gcG9zaXRpb24gKi8KKyAgRlRfQkFTRSggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fUG9zKCBGVF9TdHJlYW0gIHN0cmVhbSApOworCisgIC8qIHJlYWQgYnl0ZXMgZnJvbSBhIHN0cmVhbSBpbnRvIGEgdXNlci1hbGxvY2F0ZWQgYnVmZmVyLCByZXR1cm5zIGFuICovCisgIC8qIGVycm9yIGlmIG5vdCBhbGwgYnl0ZXMgY291bGQgYmUgcmVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX1JlYWQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50ICk7CisKKyAgLyogcmVhZCBieXRlcyBmcm9tIGEgc3RyZWFtIGF0IGEgZ2l2ZW4gcG9zaXRpb24gKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fUmVhZEF0KCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBwb3MsCisgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50ICk7CisKKyAgLyogdHJ5IHRvIHJlYWQgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIHN0cmVhbTsgcmV0dXJuIG51bWJlciBvZiBieXRlcyAqLworICAvKiByZWFsbHkgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIEZUX1VMb25nICkKKyAgRlRfU3RyZWFtX1RyeVJlYWQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50ICk7CisKKyAgLyogRW50ZXIgYSBmcmFtZSBvZiBgY291bnQnIGNvbnNlY3V0aXZlIGJ5dGVzIGluIGEgc3RyZWFtLiAgUmV0dXJucyBhbiAqLworICAvKiBlcnJvciBpZiB0aGUgZnJhbWUgY291bGQgbm90IGJlIHJlYWQvYWNjZXNzZWQuICBUaGUgY2FsbGVyIGNhbiB1c2UgICovCisgIC8qIHRoZSBGVF9TdHJlYW1fR2V0X1hYWCBmdW5jdGlvbnMgdG8gcmV0cmlldmUgZnJhbWUgZGF0YSB3aXRob3V0ICAgICAgKi8KKyAgLyogZXJyb3IgY2hlY2tzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFlvdSBtdXN0IF9hbHdheXNfIGNhbGwgRlRfU3RyZWFtX0V4aXRGcmFtZSgpIG9uY2UgeW91IGhhdmUgZW50ZXJlZCAgKi8KKyAgLyogYSBzdHJlYW0gZnJhbWUhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX0VudGVyRnJhbWUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApOworCisgIC8qIGV4aXQgYSBzdHJlYW0gZnJhbWUgKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIEZUX1N0cmVhbV9FeGl0RnJhbWUoIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgLyogRXh0cmFjdCBhIHN0cmVhbSBmcmFtZS4gIElmIHRoZSBzdHJlYW0gaXMgZGlzay1iYXNlZCwgYSBoZWFwIGJsb2NrICovCisgIC8qIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGJ5dGVzIGFyZSByZWFkIGludG8gaXQuICBJZiB0aGUgc3RyZWFtICAqLworICAvKiBpcyBtZW1vcnktYmFzZWQsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IHNldCBhIHBvaW50ZXIgdG8gdGhlIGRhdGEuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFVzZWZ1bCB0byBvcHRpbWl6ZSBhY2Nlc3MgdG8gbWVtb3J5LWJhc2VkIHN0cmVhbXMgdHJhbnNwYXJlbnRseS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQWxsIGV4dHJhY3RlZCBmcmFtZXMgbXVzdCBiZSBgZnJlZWQnIHdpdGggYSBjYWxsIHRvIHRoZSBmdW5jdGlvbiAgICovCisgIC8qIEZUX1N0cmVhbV9SZWxlYXNlRnJhbWUoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRSggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fRXh0cmFjdEZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKTsKKworICAvKiByZWxlYXNlIGFuIGV4dHJhY3QgZnJhbWUgKHNlZSBGVF9TdHJlYW1fRXh0cmFjdEZyYW1lKSAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICk7CisKKyAgLyogcmVhZCBhIGJ5dGUgZnJvbSBhbiBlbnRlcmVkIGZyYW1lICovCisgIEZUX0JBU0UoIEZUX0NoYXIgKQorICBGVF9TdHJlYW1fR2V0Q2hhciggRlRfU3RyZWFtICBzdHJlYW0gKTsKKworICAvKiByZWFkIGEgMTYtYml0IGJpZy1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGFuIGVudGVyZWQgZnJhbWUgKi8KKyAgRlRfQkFTRSggRlRfVVNob3J0ICkKKyAgRlRfU3RyZWFtX0dldFVTaG9ydCggRlRfU3RyZWFtICBzdHJlYW0gKTsKKworICAvKiByZWFkIGEgMjQtYml0IGJpZy1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGFuIGVudGVyZWQgZnJhbWUgKi8KKyAgRlRfQkFTRSggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fR2V0VU9mZnNldCggRlRfU3RyZWFtICBzdHJlYW0gKTsKKworICAvKiByZWFkIGEgMzItYml0IGJpZy1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGFuIGVudGVyZWQgZnJhbWUgKi8KKyAgRlRfQkFTRSggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fR2V0VUxvbmcoIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgLyogcmVhZCBhIDE2LWJpdCBsaXR0bGUtZW5kaWFuIHVuc2lnbmVkIGludGVnZXIgZnJvbSBhbiBlbnRlcmVkIGZyYW1lICovCisgIEZUX0JBU0UoIEZUX1VTaG9ydCApCisgIEZUX1N0cmVhbV9HZXRVU2hvcnRMRSggRlRfU3RyZWFtICBzdHJlYW0gKTsKKworICAvKiByZWFkIGEgMzItYml0IGxpdHRsZS1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGFuIGVudGVyZWQgZnJhbWUgKi8KKyAgRlRfQkFTRSggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fR2V0VUxvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIC8qIHJlYWQgYSBieXRlIGZyb20gYSBzdHJlYW0gKi8KKyAgRlRfQkFTRSggRlRfQ2hhciApCisgIEZUX1N0cmVhbV9SZWFkQ2hhciggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApOworCisgIC8qIHJlYWQgYSAxNi1iaXQgYmlnLWVuZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIGZyb20gYSBzdHJlYW0gKi8KKyAgRlRfQkFTRSggRlRfVVNob3J0ICkKKyAgRlRfU3RyZWFtX1JlYWRVU2hvcnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApOworCisgIC8qIHJlYWQgYSAyNC1iaXQgYmlnLWVuZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIGZyb20gYSBzdHJlYW0gKi8KKyAgRlRfQkFTRSggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fUmVhZFVPZmZzZXQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKTsKKworICAvKiByZWFkIGEgMzItYml0IGJpZy1lbmRpYW4gaW50ZWdlciBmcm9tIGEgc3RyZWFtICovCisgIEZUX0JBU0UoIEZUX1VMb25nICkKKyAgRlRfU3RyZWFtX1JlYWRVTG9uZyggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKTsKKworICAvKiByZWFkIGEgMTYtYml0IGxpdHRsZS1lbmRpYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGEgc3RyZWFtICovCisgIEZUX0JBU0UoIEZUX1VTaG9ydCApCisgIEZUX1N0cmVhbV9SZWFkVVNob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICk7CisKKyAgLyogcmVhZCBhIDMyLWJpdCBsaXR0bGUtZW5kaWFuIHVuc2lnbmVkIGludGVnZXIgZnJvbSBhIHN0cmVhbSAqLworICBGVF9CQVNFKCBGVF9VTG9uZyApCisgIEZUX1N0cmVhbV9SZWFkVUxvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApOworCisgIC8qIFJlYWQgYSBzdHJ1Y3R1cmUgZnJvbSBhIHN0cmVhbS4gIFRoZSBzdHJ1Y3R1cmUgbXVzdCBiZSBkZXNjcmliZWQgKi8KKyAgLyogYnkgYW4gYXJyYXkgb2YgRlRfRnJhbWVfRmllbGQgcmVjb3Jkcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9SZWFkRmllbGRzKCBGVF9TdHJlYW0gICAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkKiAgZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgKTsKKworCisjZGVmaW5lIEZUX1NUUkVBTV9QT1MoKSAgICAgICAgICAgXAorICAgICAgICAgIEZUX1N0cmVhbV9Qb3MoIHN0cmVhbSApCisKKyNkZWZpbmUgRlRfU1RSRUFNX1NFRUsoIHBvc2l0aW9uICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX1NFVF9FUlJPUiggRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKShwb3NpdGlvbikgKSApCisKKyNkZWZpbmUgRlRfU1RSRUFNX1NLSVAoIGRpc3RhbmNlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfU0VUX0VSUk9SKCBGVF9TdHJlYW1fU2tpcCggc3RyZWFtLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKShkaXN0YW5jZSkgKSApCisKKyNkZWZpbmUgRlRfU1RSRUFNX1JFQUQoIGJ1ZmZlciwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX1NFVF9FUlJPUiggRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKShidWZmZXIpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpKGNvdW50KSApICkKKworI2RlZmluZSBGVF9TVFJFQU1fUkVBRF9BVCggcG9zaXRpb24sIGJ1ZmZlciwgY291bnQgKSAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9TRVRfRVJST1IoIEZUX1N0cmVhbV9SZWFkQXQoIHN0cmVhbSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpKHBvc2l0aW9uKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKWJ1ZmZlciwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoY291bnQpICkgKQorCisjZGVmaW5lIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggZmllbGRzLCBvYmplY3QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX1NFVF9FUlJPUiggRlRfU3RyZWFtX1JlYWRGaWVsZHMoIHN0cmVhbSwgZmllbGRzLCBvYmplY3QgKSApCisKKworI2RlZmluZSBGVF9GUkFNRV9FTlRFUiggc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9TRVRfRVJST1IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9ERUJVR19JTk5FUiggRlRfU3RyZWFtX0VudGVyRnJhbWUoIHN0cmVhbSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpKHNpemUpICkgKSApCisKKyNkZWZpbmUgRlRfRlJBTUVfRVhJVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfREVCVUdfSU5ORVIoIEZUX1N0cmVhbV9FeGl0RnJhbWUoIHN0cmVhbSApICkKKworI2RlZmluZSBGVF9GUkFNRV9FWFRSQUNUKCBzaXplLCBieXRlcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX1NFVF9FUlJPUiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfREVCVUdfSU5ORVIoIEZUX1N0cmVhbV9FeHRyYWN0RnJhbWUoIHN0cmVhbSwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoc2l6ZSksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiopJihieXRlcykgKSApICkKKworI2RlZmluZSBGVF9GUkFNRV9SRUxFQVNFKCBieXRlcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfREVCVUdfSU5ORVIoIEZUX1N0cmVhbV9SZWxlYXNlRnJhbWUoIHN0cmVhbSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKikmKGJ5dGVzKSApICkKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUU1RSRUFNX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjhkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dHJhY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcmFjaW5nIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBkZWZpbml0aW9ucyBvZiB0cmFjZSBsZXZlbHMgZm9yIEZyZWVUeXBlIDIgKi8KKworICAvKiB0aGUgZmlyc3QgbGV2ZWwgbXVzdCBhbHdheXMgYmUgYHRyYWNlX2FueScgKi8KK0ZUX1RSQUNFX0RFRiggYW55ICkKKworICAvKiBiYXNlIGNvbXBvbmVudHMgKi8KK0ZUX1RSQUNFX0RFRiggY2FsYyApICAgICAgLyogY2FsY3VsYXRpb25zICAgICAgICAgICAgKGZ0Y2FsYy5jKSAgICovCitGVF9UUkFDRV9ERUYoIG1lbW9yeSApICAgIC8qIG1lbW9yeSBtYW5hZ2VyICAgICAgICAgIChmdG9ianMuYykgICAqLworRlRfVFJBQ0VfREVGKCBzdHJlYW0gKSAgICAvKiBzdHJlYW0gbWFuYWdlciAgICAgICAgICAoZnRzdHJlYW0uYykgKi8KK0ZUX1RSQUNFX0RFRiggaW8gKSAgICAgICAgLyogaS9vIGludGVyZmFjZSAgICAgICAgICAgKGZ0c3lzdGVtLmMpICovCitGVF9UUkFDRV9ERUYoIGxpc3QgKSAgICAgIC8qIGxpc3QgbWFuYWdlbWVudCAgICAgICAgIChmdGxpc3QuYykgICAqLworRlRfVFJBQ0VfREVGKCBpbml0ICkgICAgICAvKiBpbml0aWFsaXphdGlvbiAgICAgICAgICAoZnRpbml0LmMpICAgKi8KK0ZUX1RSQUNFX0RFRiggb2JqcyApICAgICAgLyogYmFzZSBvYmplY3RzICAgICAgICAgICAgKGZ0b2Jqcy5jKSAgICovCitGVF9UUkFDRV9ERUYoIG91dGxpbmUgKSAgIC8qIG91dGxpbmUgbWFuYWdlbWVudCAgICAgIChmdG91dGxuLmMpICAqLworRlRfVFJBQ0VfREVGKCBnbHlwaCApICAgICAvKiBnbHlwaCBtYW5hZ2VtZW50ICAgICAgICAoZnRnbHlwaC5jKSAgKi8KK0ZUX1RSQUNFX0RFRiggZ2xvYWRlciApICAgLyogZ2x5cGggbG9hZGVyICAgICAgICAgICAgKGZ0Z2xvYWRyLmMpICovCisKK0ZUX1RSQUNFX0RFRiggcmFzdGVyICkgICAgLyogbW9ub2Nocm9tZSByYXN0ZXJpemVyICAgKGZ0cmFzdGVyLmMpICovCitGVF9UUkFDRV9ERUYoIHNtb290aCApICAgIC8qIGFudGktYWxpYXNpbmcgcmFzdGVyICAgIChmdGdyYXlzLmMpICAqLworRlRfVFJBQ0VfREVGKCBtbSApICAgICAgICAvKiBNTSBpbnRlcmZhY2UgICAgICAgICAgICAoZnRtbS5jKSAgICAgKi8KK0ZUX1RSQUNFX0RFRiggcmFjY2VzcyApICAgLyogcmVzb3VyY2UgZm9yayBhY2Nlc3NvciAgKGZ0cmZvcmsuYykgICovCitGVF9UUkFDRV9ERUYoIHN5bnRoICkgICAgIC8qIGJvbGQvc2xhbnQgc3ludGhlc2l6ZXIgIChmdHN5bnRoLmMpICAqLworRlRfVFJBQ0VfREVGKCBiaXRtYXAgKSAgICAvKiBiaXRtYXAgY2hlY2tzdW0gICAgICAgICAoZnRvYmpzLmMpICAgKi8KKworICAvKiBDYWNoZSBzdWItc3lzdGVtICovCitGVF9UUkFDRV9ERUYoIGNhY2hlICkgICAgIC8qIGNhY2hlIHN1Yi1zeXN0ZW0gICAgICAgIChmdGNhY2hlLmMsIGV0Yy4pICovCisKKyAgLyogU0ZOVCBkcml2ZXIgY29tcG9uZW50cyAqLworRlRfVFJBQ0VfREVGKCBzZmRyaXZlciApICAvKiBTRk5UIGZvbnQgZHJpdmVyICAgICAgICAoc2Zkcml2ZXIuYykgKi8KK0ZUX1RSQUNFX0RFRiggc2ZvYmpzICkgICAgLyogU0ZOVCBvYmplY3QgaGFuZGxlciAgICAgKHNmb2Jqcy5jKSAgICovCitGVF9UUkFDRV9ERUYoIHR0Y21hcCApICAgIC8qIGNoYXJtYXAgaGFuZGxlciAgICAgICAgICh0dGNtYXAuYykgICAqLworRlRfVFJBQ0VfREVGKCB0dGtlcm4gKSAgICAvKiBrZXJuaW5nIGhhbmRsZXIgICAgICAgICAodHRrZXJuLmMpICAgKi8KK0ZUX1RSQUNFX0RFRiggdHRsb2FkICkgICAgLyogYmFzaWMgVHJ1ZVR5cGUgdGFibGVzICAgKHR0bG9hZC5jKSAgICovCitGVF9UUkFDRV9ERUYoIHR0bXR4ICkgICAgIC8qIG1ldHJpY3MtcmVsYXRlZCB0YWJsZXMgICh0dG10eC5jKSAgICAqLworRlRfVFJBQ0VfREVGKCB0dHBvc3QgKSAgICAvKiBQUyB0YWJsZSBwcm9jZXNzaW5nICAgICAodHRwb3N0LmMpICAgKi8KK0ZUX1RSQUNFX0RFRiggdHRzYml0ICkgICAgLyogVHJ1ZVR5cGUgc2JpdCBoYW5kbGluZyAgKHR0c2JpdC5jKSAgICovCitGVF9UUkFDRV9ERUYoIHR0YmRmICkgICAgIC8qIFRydWVUeXBlIGVtYmVkZGVkIEJERiAgICh0dGJkZi5jKSAgICAqLworCisgIC8qIFRydWVUeXBlIGRyaXZlciBjb21wb25lbnRzICovCitGVF9UUkFDRV9ERUYoIHR0ZHJpdmVyICkgIC8qIFRUIGZvbnQgZHJpdmVyICAgICAgICAgICh0dGRyaXZlci5jKSAqLworRlRfVFJBQ0VfREVGKCB0dGdsb2FkICkgICAvKiBUVCBnbHlwaCBsb2FkZXIgICAgICAgICAodHRnbG9hZC5jKSAgKi8KK0ZUX1RSQUNFX0RFRiggdHRpbnRlcnAgKSAgLyogYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgICAgKHR0aW50ZXJwLmMpICovCitGVF9UUkFDRV9ERUYoIHR0b2JqcyApICAgIC8qIFRUIG9iamVjdHMgbWFuYWdlciAgICAgICh0dG9ianMuYykgICAqLworRlRfVFJBQ0VfREVGKCB0dHBsb2FkICkgICAvKiBUVCBkYXRhL3Byb2dyYW0gbG9hZGVyICAodHRwbG9hZC5jKSAgKi8KK0ZUX1RSQUNFX0RFRiggdHRneHZhciApICAgLyogVHJ1ZVR5cGUgR1ggdmFyIGhhbmRsZXIgKHR0Z3h2YXIuYykgICovCisKKyAgLyogVHlwZSAxIGRyaXZlciBjb21wb25lbnRzICovCitGVF9UUkFDRV9ERUYoIHQxYWZtICkKK0ZUX1RSQUNFX0RFRiggdDFkcml2ZXIgKQorRlRfVFJBQ0VfREVGKCB0MWdsb2FkICkKK0ZUX1RSQUNFX0RFRiggdDFoaW50ICkKK0ZUX1RSQUNFX0RFRiggdDFsb2FkICkKK0ZUX1RSQUNFX0RFRiggdDFvYmpzICkKK0ZUX1RSQUNFX0RFRiggdDFwYXJzZSApCisKKyAgLyogUG9zdFNjcmlwdCBoZWxwZXIgbW9kdWxlIGBwc2F1eCcgKi8KK0ZUX1RSQUNFX0RFRiggdDFkZWNvZGUgKQorRlRfVFJBQ0VfREVGKCBwc29ianMgKQorRlRfVFJBQ0VfREVGKCBwc2NvbnYgKQorCisgIC8qIFBvc3RTY3JpcHQgaGludGluZyBtb2R1bGUgYHBzaGludGVyJyAqLworRlRfVFJBQ0VfREVGKCBwc2hyZWMgKQorRlRfVFJBQ0VfREVGKCBwc2hhbGdvMSApCitGVF9UUkFDRV9ERUYoIHBzaGFsZ28yICkKKworICAvKiBUeXBlIDIgZHJpdmVyIGNvbXBvbmVudHMgKi8KK0ZUX1RSQUNFX0RFRiggY2ZmZHJpdmVyICkKK0ZUX1RSQUNFX0RFRiggY2ZmZ2xvYWQgKQorRlRfVFJBQ0VfREVGKCBjZmZsb2FkICkKK0ZUX1RSQUNFX0RFRiggY2Zmb2JqcyApCitGVF9UUkFDRV9ERUYoIGNmZnBhcnNlICkKKworRlRfVFJBQ0VfREVGKCBjZjJibHVlcyApCitGVF9UUkFDRV9ERUYoIGNmMmhpbnRzICkKK0ZUX1RSQUNFX0RFRiggY2YyaW50ZXJwICkKKworICAvKiBUeXBlIDQyIGRyaXZlciBjb21wb25lbnQgKi8KK0ZUX1RSQUNFX0RFRiggdDQyICkKKworICAvKiBDSUQgZHJpdmVyIGNvbXBvbmVudHMgKi8KK0ZUX1RSQUNFX0RFRiggY2lkYWZtICkKK0ZUX1RSQUNFX0RFRiggY2lkZHJpdmVyICkKK0ZUX1RSQUNFX0RFRiggY2lkZ2xvYWQgKQorRlRfVFJBQ0VfREVGKCBjaWRsb2FkICkKK0ZUX1RSQUNFX0RFRiggY2lkb2JqcyApCitGVF9UUkFDRV9ERUYoIGNpZHBhcnNlICkKKworICAvKiBXaW5kb3dzIGZvbnQgY29tcG9uZW50ICovCitGVF9UUkFDRV9ERUYoIHdpbmZudCApCisKKyAgLyogUENGIGZvbnQgY29tcG9uZW50cyAqLworRlRfVFJBQ0VfREVGKCBwY2Zkcml2ZXIgKQorRlRfVFJBQ0VfREVGKCBwY2ZyZWFkICkKKworICAvKiBCREYgZm9udCBjb21wb25lbnRzICovCitGVF9UUkFDRV9ERUYoIGJkZmRyaXZlciApCitGVF9UUkFDRV9ERUYoIGJkZmxpYiApCisKKyAgLyogUEZSIGZvbnQgY29tcG9uZW50ICovCitGVF9UUkFDRV9ERUYoIHBmciApCisKKyAgLyogT3BlblR5cGUgdmFsaWRhdGlvbiBjb21wb25lbnRzICovCitGVF9UUkFDRV9ERUYoIG90dm1vZHVsZSApCitGVF9UUkFDRV9ERUYoIG90dmNvbW1vbiApCitGVF9UUkFDRV9ERUYoIG90dmJhc2UgKQorRlRfVFJBQ0VfREVGKCBvdHZnZGVmICkKK0ZUX1RSQUNFX0RFRiggb3R2Z3BvcyApCitGVF9UUkFDRV9ERUYoIG90dmdzdWIgKQorRlRfVFJBQ0VfREVGKCBvdHZqc3RmICkKK0ZUX1RSQUNFX0RFRiggb3R2bWF0aCApCisKKyAgLyogVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBjb21wb25lbnRzICovCitGVF9UUkFDRV9ERUYoIGd4dm1vZHVsZSApCitGVF9UUkFDRV9ERUYoIGd4dmNvbW1vbiApCitGVF9UUkFDRV9ERUYoIGd4dmZlYXQgKQorRlRfVFJBQ0VfREVGKCBneHZtb3J0ICkKK0ZUX1RSQUNFX0RFRiggZ3h2bW9yeCApCitGVF9UUkFDRV9ERUYoIGd4dmJzbG4gKQorRlRfVFJBQ0VfREVGKCBneHZqdXN0ICkKK0ZUX1RSQUNFX0RFRiggZ3h2a2VybiApCitGVF9UUkFDRV9ERUYoIGd4dm9wYmQgKQorRlRfVFJBQ0VfREVGKCBneHZ0cmFrICkKK0ZUX1RSQUNFX0RFRiggZ3h2cHJvcCApCitGVF9UUkFDRV9ERUYoIGd4dmxjYXIgKQorCisgIC8qIGF1dG9maXQgY29tcG9uZW50cyAqLworRlRfVFJBQ0VfREVGKCBhZm1vZHVsZSApCitGVF9UUkFDRV9ERUYoIGFmaGludHMgKQorRlRfVFJBQ0VfREVGKCBhZmNqayApCitGVF9UUkFDRV9ERUYoIGFmbGF0aW4gKQorRlRfVFJBQ0VfREVGKCBhZmxhdGluMiApCitGVF9UUkFDRV9ERUYoIGFmd2FycCApCitGVF9UUkFDRV9ERUYoIGFmaGFyZmJ1enogKQorRlRfVFJBQ0VfREVGKCBhZmdsb2JhbCApCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZGE2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9mdHZhbGlkLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dmFsaWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB2YWxpZGF0aW9uIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUVkFMSURfSF9fCisjZGVmaW5lIF9fRlRWQUxJRF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IICAgLyogZm9yIGZ0X3NldGptcCBhbmQgZnRfbG9uZ2ptcCAqLworCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgViBBIEwgSSBEIEEgVCBJIE8gTiAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIGhhbmRsZSB0byBhIHZhbGlkYXRpb24gb2JqZWN0ICovCisgIHR5cGVkZWYgc3RydWN0IEZUX1ZhbGlkYXRvclJlY18gdm9sYXRpbGUqICBGVF9WYWxpZGF0b3I7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZXJlIGFyZSB0aHJlZSBkaXN0aW5jdCB2YWxpZGF0aW9uIGxldmVscyBkZWZpbmVkIGhlcmU6ICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfVkFMSURBVEVfREVGQVVMVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgQSB0YWJsZSB0aGF0IHBhc3NlcyB0aGlzIHZhbGlkYXRpb24gbGV2ZWwgY2FuIGJlIHVzZWQgcmVsaWFibHkgYnkgICAqLworICAvKiAgIEZyZWVUeXBlLiAgSXQgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgYWxsIG9mZnNldHMgaGF2ZSBiZWVuIGNoZWNrZWQgdG8gKi8KKyAgLyogICBwcmV2ZW50IG91dC1vZi1ib3VuZCByZWFkcywgdGhhdCBhcnJheSBjb3VudHMgYXJlIGNvcnJlY3QsIGV0Yy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9WQUxJREFURV9USUdIVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBIHRhYmxlIHRoYXQgcGFzc2VzIHRoaXMgdmFsaWRhdGlvbiBsZXZlbCBjYW4gYmUgdXNlZCByZWxpYWJseSBhbmQgICovCisgIC8qICAgZG9lc24ndCBjb250YWluIGludmFsaWQgZGF0YS4gIEZvciBleGFtcGxlLCBhIGNoYXJtYXAgdGFibGUgdGhhdCAgICAqLworICAvKiAgIHJldHVybnMgaW52YWxpZCBnbHlwaCBpbmRpY2VzIHdpbGwgbm90IHBhc3MsIGV2ZW4gdGhvdWdoIGl0IGNhbiAgICAgKi8KKyAgLyogICBiZSB1c2VkIHdpdGggRnJlZVR5cGUgaW4gZGVmYXVsdCBtb2RlICh0aGUgbGlicmFyeSB3aWxsIHNpbXBseSAgICAgICovCisgIC8qICAgcmV0dXJuIGFuIGVycm9yIGxhdGVyIHdoZW4gdHJ5aW5nIHRvIGxvYWQgdGhlIGdseXBoKS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBJdCBhbHNvIGNoZWNrcyB0aGF0IGZpZWxkcyB3aGljaCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMiwgNCwgb3IgOCwgICovCisgIC8qICAgZG9uJ3QgaGF2ZSBpbmNvcnJlY3QgdmFsdWVzLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfVkFMSURBVEVfUEFSQU5PSUQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgT25seSBmb3IgZm9udCBkZWJ1Z2dpbmcuICBDaGVja3MgdGhhdCBhIHRhYmxlIGZvbGxvd3MgdGhlICAgICAgICAgICAqLworICAvKiAgIHNwZWNpZmljYXRpb24gYnkgMTAwJS4gIFZlcnkgZmV3IGZvbnRzIHdpbGwgYmUgYWJsZSB0byBwYXNzIHRoaXMgICAgKi8KKyAgLyogICBsZXZlbCBhbnl3YXkgYnV0IGl0IGNhbiBiZSB1c2VmdWwgZm9yIGNlcnRhaW4gdG9vbHMgbGlrZSBmb250ICAgICAgICovCisgIC8qICAgZWRpdG9ycy9jb252ZXJ0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9WYWxpZGF0aW9uTGV2ZWxfCisgIHsKKyAgICBGVF9WQUxJREFURV9ERUZBVUxUID0gMCwKKyAgICBGVF9WQUxJREFURV9USUdIVCwKKyAgICBGVF9WQUxJREFURV9QQVJBTk9JRAorCisgIH0gRlRfVmFsaWRhdGlvbkxldmVsOworCisKKyNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICAgICAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KKyAgLyogV2UgZGlzYWJsZSB0aGUgd2FybmluZyBgc3RydWN0dXJlIHdhcyBwYWRkZWQgZHVlIHRvICAgKi8KKyAgLyogX19kZWNsc3BlYyhhbGlnbigpKScgaW4gb3JkZXIgdG8gY29tcGlsZSBjbGVhbmx5IHdpdGggKi8KKyAgLyogdGhlIG1heGltdW0gbGV2ZWwgb2Ygd2FybmluZ3MuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNwcmFnbWEgd2FybmluZyggcHVzaCApCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MzI0ICkKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisgIC8qIHZhbGlkYXRvciBzdHJ1Y3R1cmUgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1ZhbGlkYXRvclJlY18KKyAgeworICAgIGZ0X2ptcF9idWYgICAgICAgICAganVtcF9idWZmZXI7IC8qIHVzZWQgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZyAgICAgICovCisKKyAgICBjb25zdCBGVF9CeXRlKiAgICAgIGJhc2U7ICAgICAgICAvKiBhZGRyZXNzIG9mIHRhYmxlIGluIG1lbW9yeSAgICAgICAqLworICAgIGNvbnN0IEZUX0J5dGUqICAgICAgbGltaXQ7ICAgICAgIC8qIGBiYXNlJyArIHNpemVvZih0YWJsZSkgaW4gbWVtb3J5ICovCisgICAgRlRfVmFsaWRhdGlvbkxldmVsICBsZXZlbDsgICAgICAgLyogdmFsaWRhdGlvbiBsZXZlbCAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAvKiBlcnJvciByZXR1cm5lZC4gMCBtZWFucyBzdWNjZXNzICAqLworCisgIH0gRlRfVmFsaWRhdG9yUmVjOworCisjaWYgZGVmaW5lZCggX01TQ19WRVIgKQorI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQorI2VuZGlmCisKKyNkZWZpbmUgRlRfVkFMSURBVE9SKCB4ICkgICggKEZUX1ZhbGlkYXRvcikoIHggKSApCisKKworICBGVF9CQVNFKCB2b2lkICkKKyAgZnRfdmFsaWRhdG9yX2luaXQoIEZUX1ZhbGlkYXRvciAgICAgICAgdmFsaWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdGlvbkxldmVsICBsZXZlbCApOworCisgIC8qIERvIG5vdCB1c2UgdGhpcy4gSXQncyBicm9rZW4gYW5kIHdpbGwgY2F1c2UgeW91ciB2YWxpZGF0b3IgdG8gY3Jhc2ggKi8KKyAgLyogaWYgeW91IHJ1biBpdCBvbiBhbiBpbnZhbGlkIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCBGVF9JbnQgKQorICBmdF92YWxpZGF0b3JfcnVuKCBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgLyogU2V0cyB0aGUgZXJyb3IgZmllbGQgaW4gYSB2YWxpZGF0b3IsIHRoZW4gY2FsbHMgYGxvbmdqbXAnIHRvIHJldHVybiAqLworICAvKiB0byBoaWdoLWxldmVsIGNhbGxlci4gIFVzaW5nIGBzZXRqbXAvbG9uZ2ptcCcgYXZvaWRzIG1hbnkgc3R1cGlkICAgICovCisgIC8qIGVycm9yIGNoZWNrcyB3aXRoaW4gdGhlIHZhbGlkYXRpb24gcm91dGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgZnRfdmFsaWRhdG9yX2Vycm9yKCBGVF9WYWxpZGF0b3IgIHZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAgICAgZXJyb3IgKTsKKworCisgIC8qIENhbGxzIGZ0X3ZhbGlkYXRlX2Vycm9yLiAgQXNzdW1lcyB0aGF0IHRoZSBgdmFsaWQnIGxvY2FsIHZhcmlhYmxlICovCisgIC8qIGhvbGRzIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCB2YWxpZGF0b3Igb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0lOVkFMSUQoIF9lcnJvciApICBGVF9JTlZBTElEXyggX2Vycm9yICkKKyNkZWZpbmUgRlRfSU5WQUxJRF8oIF9lcnJvciApIFwKKyAgICAgICAgICBmdF92YWxpZGF0b3JfZXJyb3IoIHZhbGlkLCBGVF9USFJPVyggX2Vycm9yICkgKQorCisgIC8qIGNhbGxlZCB3aGVuIGEgYnJva2VuIHRhYmxlIGlzIGRldGVjdGVkICovCisjZGVmaW5lIEZUX0lOVkFMSURfVE9PX1NIT1JUIFwKKyAgICAgICAgICBGVF9JTlZBTElEKCBJbnZhbGlkX1RhYmxlICkKKworICAvKiBjYWxsZWQgd2hlbiBhbiBpbnZhbGlkIG9mZnNldCBpcyBkZXRlY3RlZCAqLworI2RlZmluZSBGVF9JTlZBTElEX09GRlNFVCBcCisgICAgICAgICAgRlRfSU5WQUxJRCggSW52YWxpZF9PZmZzZXQgKQorCisgIC8qIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgZm9ybWF0L3ZhbHVlIGlzIGRldGVjdGVkICovCisjZGVmaW5lIEZUX0lOVkFMSURfRk9STUFUIFwKKyAgICAgICAgICBGVF9JTlZBTElEKCBJbnZhbGlkX1RhYmxlICkKKworICAvKiBjYWxsZWQgd2hlbiBhbiBpbnZhbGlkIGdseXBoIGluZGV4IGlzIGRldGVjdGVkICovCisjZGVmaW5lIEZUX0lOVkFMSURfR0xZUEhfSUQgXAorICAgICAgICAgIEZUX0lOVkFMSUQoIEludmFsaWRfR2x5cGhfSW5kZXggKQorCisgIC8qIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgZmllbGQgdmFsdWUgaXMgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRlRfSU5WQUxJRF9EQVRBIFwKKyAgICAgICAgICBGVF9JTlZBTElEKCBJbnZhbGlkX1RhYmxlICkKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUVkFMSURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9pbnRlcm5hbC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzFmZDBlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvaW50ZXJuYWwuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBpbnRlcm5hbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSW50ZXJuYWwgaGVhZGVyIGZpbGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBieSBgZnQyYnVpbGQuaCcuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRG8gbm90IGluY2x1ZGUgaXQgbWFudWFsbHkhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX0lOVEVSTkFMX09CSkVDVFNfSCAgICAgICAgICAgICA8aW50ZXJuYWwvZnRvYmpzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1BJQ19IICAgICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRwaWMuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfU1RSRUFNX0ggICAgICAgICAgICAgIDxpbnRlcm5hbC9mdHN0cmVhbS5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9NRU1PUllfSCAgICAgICAgICAgICAgPGludGVybmFsL2Z0bWVtb3J5Lmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0RFQlVHX0ggICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRkZWJ1Zy5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9DQUxDX0ggICAgICAgICAgICAgICAgPGludGVybmFsL2Z0Y2FsYy5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9EUklWRVJfSCAgICAgICAgICAgICAgPGludGVybmFsL2Z0ZHJpdmVyLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1RSQUNFX0ggICAgICAgICAgICAgICA8aW50ZXJuYWwvZnR0cmFjZS5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9HTFlQSF9MT0FERVJfSCAgICAgICAgPGludGVybmFsL2Z0Z2xvYWRyLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1NGTlRfSCAgICAgICAgICAgICAgICA8aW50ZXJuYWwvc2ZudC5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0ggICAgICAgICAgICAgPGludGVybmFsL2Z0c2Vydi5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9SRk9SS19IICAgICAgICAgICAgICAgPGludGVybmFsL2Z0cmZvcmsuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfVkFMSURBVEVfSCAgICAgICAgICAgIDxpbnRlcm5hbC9mdHZhbGlkLmg+CisKKyNkZWZpbmUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSCAgICAgIDxpbnRlcm5hbC90dHR5cGVzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0ggICAgICAgICA8aW50ZXJuYWwvdDF0eXBlcy5oPgorCisjZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0ggICAgICA8aW50ZXJuYWwvcHNhdXguaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19IICAgIDxpbnRlcm5hbC9wc2hpbnRzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfR0xPQkFMU19IICA8aW50ZXJuYWwvcHNnbG9iYWwuaD4KKworI2RlZmluZSBGVF9JTlRFUk5BTF9BVVRPSElOVF9IICAgICAgICAgICAgPGludGVybmFsL2F1dG9oaW50Lmg+CisKKworI2lmIGRlZmluZWQoIF9NU0NfVkVSICkgICAgICAvKiBWaXN1YWwgQysrIChhbmQgSW50ZWwgQysrKSAqLworCisgIC8qIFdlIGRpc2FibGUgdGhlIHdhcm5pbmcgYGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQnIGhlcmUgKi8KKyAgLyogaW4gb3JkZXIgdG8gY29tcGlsZSBjbGVhbmx5IHdpdGggdGhlIG1heGltdW0gbGV2ZWwgb2Ygd2FybmluZ3MuICAqLworICAvKiBJbiBwYXJ0aWN1bGFyLCB0aGUgd2FybmluZyBjb21wbGFpbnMgYWJvdXQgc3R1ZmYgbGlrZSBgd2hpbGUoMCknICovCisgIC8qIHdoaWNoIGlzIHZlcnkgdXNlZnVsIGluIG1hY3JvIGRlZmluaXRpb25zLiAgVGhlcmUgaXMgbm8gYmVuZWZpdCAgKi8KKyAgLyogaW4gaGF2aW5nIGl0IGVuYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDEyNyApCisKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvcHNhdXguaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3BzYXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3BzYXV4LmgKQEAgLTAsMCArMSw4NzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzYXV4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXhpbGlhcnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBQb3N0U2NyaXB0IGZvbnRzICAqLworLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU0FVWF9IX18KKyNkZWZpbmUgX19QU0FVWF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDFfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgUFNfVGFibGVSZWNfKiAgICAgICAgICAgICAgUFNfVGFibGU7CisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IFBTX1RhYmxlX0Z1bmNzUmVjXyogIFBTX1RhYmxlX0Z1bmNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfVGFibGVfRnVuY3NSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdG8gbWFuYWdlIFBTX1RhYmxlIG9iamVjdHMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFibGVfaW5pdCAgICA6OiBVc2VkIHRvIGluaXRpYWxpemUgYSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWJsZV9kb25lICAgIDo6IEZpbmFsaXplcyByZXNwLiBkZXN0cm95IGEgZ2l2ZW4gdGFibGUuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRhYmxlX2FkZCAgICAgOjogQWRkcyBhIG5ldyBvYmplY3QgdG8gYSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFibGVfcmVsZWFzZSA6OiBSZWxlYXNlcyB0YWJsZSBkYXRhLCB0aGVuIGZpbmFsaXplcyBpdC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNfVGFibGVfRnVuY3NSZWNfCisgIHsKKyAgICBGVF9FcnJvcgorICAgICgqaW5pdCkoIFBTX1RhYmxlICAgdGFibGUsCisgICAgICAgICAgICAgRlRfSW50ICAgICBjb3VudCwKKyAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgICAgdm9pZAorICAgICgqZG9uZSkoIFBTX1RhYmxlICB0YWJsZSApOworCisgICAgRlRfRXJyb3IKKyAgICAoKmFkZCkoIFBTX1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgIEZUX0ludCAgICBpZHgsCisgICAgICAgICAgICB2b2lkKiAgICAgb2JqZWN0LAorICAgICAgICAgICAgRlRfVUludCAgIGxlbmd0aCApOworCisgICAgdm9pZAorICAgICgqcmVsZWFzZSkoIFBTX1RhYmxlICB0YWJsZSApOworCisgIH0gUFNfVGFibGVfRnVuY3NSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19UYWJsZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIFBTX1RhYmxlIGlzIGEgc2ltcGxlIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIGFycmF5IG9mIG9iamVjdHMgaW4gKi8KKyAgLyogICAgYSBzaW5nbGUgbWVtb3J5IGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxvY2sgICAgIDo6IFRoZSBhZGRyZXNzIGluIG1lbW9yeSBvZiB0aGUgZ3Jvd2hlYXAncyBibG9jay4gIFRoaXMgICovCisgIC8qICAgICAgICAgICAgICAgICBjYW4gY2hhbmdlIGJldHdlZW4gdHdvIG9iamVjdCBhZGRzLCBkdWUgdG8gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgcmVhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN1cnNvciAgICA6OiBUaGUgY3VycmVudCB0b3Agb2YgdGhlIGdyb3cgaGVhcCB3aXRoaW4gaXRzIGJsb2NrLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FwYWNpdHkgIDo6IFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAgYmxvY2suICBJbmNyZW1lbnRzIGJ5ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAxa0J5dGUgY2h1bmtzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5pdCAgICAgIDo6IFNldCB0byAweERFQURCRUVGIGlmIGBlbGVtZW50cycgYW5kIGBsZW5ndGhzJyBoYXZlICAgICovCisgIC8qICAgICAgICAgICAgICAgICBiZWVuIGFsbG9jYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4X2VsZW1zIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0YWJsZS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZWxlbXMgOjogVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRhYmxlLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVsZW1lbnRzICA6OiBBIHRhYmxlIG9mIGVsZW1lbnQgYWRkcmVzc2VzIHdpdGhpbiB0aGUgYmxvY2suICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGVuZ3RocyAgIDo6IEEgdGFibGUgb2YgZWxlbWVudCBzaXplcyB3aXRoaW4gdGhlIGJsb2NrLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgICAgOjogVGhlIG9iamVjdCB1c2VkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIChhbGxvYy9yZWFsbG9jKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdW5jcyAgICAgOjogQSB0YWJsZSBvZiBtZXRob2QgcG9pbnRlcnMgZm9yIHRoaXMgb2JqZWN0LiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBQU19UYWJsZVJlY18KKyAgeworICAgIEZUX0J5dGUqICAgICAgICAgICBibG9jazsgICAgICAgICAgLyogY3VycmVudCBtZW1vcnkgYmxvY2sgICAgICAgICAgICovCisgICAgRlRfT2Zmc2V0ICAgICAgICAgIGN1cnNvcjsgICAgICAgICAvKiBjdXJyZW50IGN1cnNvciBpbiBtZW1vcnkgYmxvY2sgKi8KKyAgICBGVF9PZmZzZXQgICAgICAgICAgY2FwYWNpdHk7ICAgICAgIC8qIGN1cnJlbnQgc2l6ZSBvZiBtZW1vcnkgYmxvY2sgICAqLworICAgIEZUX1VMb25nICAgICAgICAgICBpbml0OworCisgICAgRlRfSW50ICAgICAgICAgICAgIG1heF9lbGVtczsKKyAgICBGVF9JbnQgICAgICAgICAgICAgbnVtX2VsZW1zOworICAgIEZUX0J5dGUqKiAgICAgICAgICBlbGVtZW50czsgICAgICAgLyogYWRkcmVzc2VzIG9mIHRhYmxlIGVsZW1lbnRzICovCisgICAgRlRfVUludCogICAgICAgICAgIGxlbmd0aHM7ICAgICAgICAvKiBsZW5ndGhzIG9mIHRhYmxlIGVsZW1lbnRzICAgKi8KKworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnk7CisgICAgUFNfVGFibGVfRnVuY3NSZWMgIGZ1bmNzOworCisgIH0gUFNfVGFibGVSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIFQxIEZJRUxEUyAmIFRPS0VOUyAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICB0eXBlZGVmIHN0cnVjdCBQU19QYXJzZXJSZWNfKiAgUFNfUGFyc2VyOworCisgIHR5cGVkZWYgc3RydWN0IFQxX1Rva2VuUmVjXyogICBUMV9Ub2tlbjsKKworICB0eXBlZGVmIHN0cnVjdCBUMV9GaWVsZFJlY18qICAgVDFfRmllbGQ7CisKKworICAvKiBzaW1wbGUgZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGlkZW50aWZ5IHRva2VuIHR5cGVzICovCisgIHR5cGVkZWYgZW51bSAgVDFfVG9rZW5UeXBlXworICB7CisgICAgVDFfVE9LRU5fVFlQRV9OT05FID0gMCwKKyAgICBUMV9UT0tFTl9UWVBFX0FOWSwKKyAgICBUMV9UT0tFTl9UWVBFX1NUUklORywKKyAgICBUMV9UT0tFTl9UWVBFX0FSUkFZLAorICAgIFQxX1RPS0VOX1RZUEVfS0VZLCAvKiBha2EgYG5hbWUnICovCisKKyAgICAvKiBkbyBub3QgcmVtb3ZlICovCisgICAgVDFfVE9LRU5fVFlQRV9NQVgKKworICB9IFQxX1Rva2VuVHlwZTsKKworCisgIC8qIGEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIGlkZW50aWZ5IHRva2VucyAqLworICB0eXBlZGVmIHN0cnVjdCAgVDFfVG9rZW5SZWNfCisgIHsKKyAgICBGVF9CeXRlKiAgICAgIHN0YXJ0OyAgIC8qIGZpcnN0IGNoYXJhY3RlciBvZiB0b2tlbiBpbiBpbnB1dCBzdHJlYW0gKi8KKyAgICBGVF9CeXRlKiAgICAgIGxpbWl0OyAgIC8qIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgdG9rZW4gICAgICAgICAgKi8KKyAgICBUMV9Ub2tlblR5cGUgIHR5cGU7ICAgIC8qIHR5cGUgb2YgdG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB9IFQxX1Rva2VuUmVjOworCisKKyAgLyogZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGlkZW50aWZ5IG9iamVjdCBmaWVsZHMgKi8KKyAgdHlwZWRlZiBlbnVtICBUMV9GaWVsZFR5cGVfCisgIHsKKyAgICBUMV9GSUVMRF9UWVBFX05PTkUgPSAwLAorICAgIFQxX0ZJRUxEX1RZUEVfQk9PTCwKKyAgICBUMV9GSUVMRF9UWVBFX0lOVEVHRVIsCisgICAgVDFfRklFTERfVFlQRV9GSVhFRCwKKyAgICBUMV9GSUVMRF9UWVBFX0ZJWEVEXzEwMDAsCisgICAgVDFfRklFTERfVFlQRV9TVFJJTkcsCisgICAgVDFfRklFTERfVFlQRV9LRVksCisgICAgVDFfRklFTERfVFlQRV9CQk9YLAorICAgIFQxX0ZJRUxEX1RZUEVfTU1fQkJPWCwKKyAgICBUMV9GSUVMRF9UWVBFX0lOVEVHRVJfQVJSQVksCisgICAgVDFfRklFTERfVFlQRV9GSVhFRF9BUlJBWSwKKyAgICBUMV9GSUVMRF9UWVBFX0NBTExCQUNLLAorCisgICAgLyogZG8gbm90IHJlbW92ZSAqLworICAgIFQxX0ZJRUxEX1RZUEVfTUFYCisKKyAgfSBUMV9GaWVsZFR5cGU7CisKKworICB0eXBlZGVmIGVudW0gIFQxX0ZpZWxkTG9jYXRpb25fCisgIHsKKyAgICBUMV9GSUVMRF9MT0NBVElPTl9DSURfSU5GTywKKyAgICBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0RJQ1QsCisgICAgVDFfRklFTERfTE9DQVRJT05fRk9OVF9FWFRSQSwKKyAgICBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0lORk8sCisgICAgVDFfRklFTERfTE9DQVRJT05fUFJJVkFURSwKKyAgICBUMV9GSUVMRF9MT0NBVElPTl9CQk9YLAorICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0xPQURFUiwKKyAgICBUMV9GSUVMRF9MT0NBVElPTl9GQUNFLAorICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0JMRU5ELAorCisgICAgLyogZG8gbm90IHJlbW92ZSAqLworICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX01BWAorCisgIH0gVDFfRmllbGRMb2NhdGlvbjsKKworCisgIHR5cGVkZWYgdm9pZAorICAoKlQxX0ZpZWxkX1BhcnNlRnVuYykoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcGFyc2VyICk7CisKKworICAvKiBzdHJ1Y3R1cmUgdHlwZSB1c2VkIHRvIG1vZGVsIG9iamVjdCBmaWVsZHMgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0ZpZWxkUmVjXworICB7CisgICAgY29uc3QgY2hhciogICAgICAgICBpZGVudDsgICAgICAgIC8qIGZpZWxkIGlkZW50aWZpZXIgICAgICAgICAgICAgICAqLworICAgIFQxX0ZpZWxkTG9jYXRpb24gICAgbG9jYXRpb247CisgICAgVDFfRmllbGRUeXBlICAgICAgICB0eXBlOyAgICAgICAgIC8qIHR5cGUgb2YgZmllbGQgICAgICAgICAgICAgICAgICAqLworICAgIFQxX0ZpZWxkX1BhcnNlRnVuYyAgcmVhZGVyOworICAgIEZUX1VJbnQgICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAvKiBvZmZzZXQgb2YgZmllbGQgaW4gb2JqZWN0ICAgICAgKi8KKyAgICBGVF9CeXRlICAgICAgICAgICAgIHNpemU7ICAgICAgICAgLyogc2l6ZSBvZiBmaWVsZCBpbiBieXRlcyAgICAgICAgICovCisgICAgRlRfVUludCAgICAgICAgICAgICBhcnJheV9tYXg7ICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGZvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgIGNvdW50X29mZnNldDsgLyogb2Zmc2V0IG9mIGVsZW1lbnQgY291bnQgZm9yICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5czsgbXVzdCBub3QgYmUgemVybyBpZiBpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2UgLS0gaW4gb3RoZXIgd29yZHMsIGEgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYG51bV9GT08nIGVsZW1lbnQgbXVzdCBub3QgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHRoZSB1c2VkIHN0cnVjdHVyZSBpZiB3ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXJzZSBhIGBGT08nIGFycmF5ICAgICAgICAgICAgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgIGRpY3Q7ICAgICAgICAgLyogd2hlcmUgd2UgZXhwZWN0IGl0ICAgICAgICAgICAgICovCisgIH0gVDFfRmllbGRSZWM7CisKKyNkZWZpbmUgVDFfRklFTERfRElDVF9GT05URElDVCAoIDEgPDwgMCApIC8qIGFsc28gRm9udEluZm8gYW5kIEZEQXJyYXkgKi8KKyNkZWZpbmUgVDFfRklFTERfRElDVF9QUklWQVRFICAoIDEgPDwgMSApCisKKworCisjZGVmaW5lIFQxX05FV19TSU1QTEVfRklFTEQoIF9pZGVudCwgX3R5cGUsIF9mbmFtZSwgX2RpY3QgKSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfaWRlbnQsIFQxQ09ERSwgX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9PRkZTRVQoIF9mbmFtZSApLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9TSVpFKCBfZm5hbWUgKSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSwKKworI2RlZmluZSBUMV9ORVdfQ0FMTEJBQ0tfRklFTEQoIF9pZGVudCwgX3JlYWRlciwgX2RpY3QgKSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9pZGVudCwgVDFDT0RFLCBUMV9GSUVMRF9UWVBFX0NBTExCQUNLLCAgICAgXAorICAgICAgICAgICAgKFQxX0ZpZWxkX1BhcnNlRnVuYylfcmVhZGVyLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2RpY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSwKKworI2RlZmluZSBUMV9ORVdfVEFCTEVfRklFTEQoIF9pZGVudCwgX3R5cGUsIF9mbmFtZSwgX21heCwgX2RpY3QgKSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9pZGVudCwgVDFDT0RFLCBfdHlwZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9PRkZTRVQoIF9mbmFtZSApLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX1NJWkVfREVMVEEoIF9mbmFtZSApLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX21heCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9PRkZTRVQoIG51bV8gIyMgX2ZuYW1lICksICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0sCisKKyNkZWZpbmUgVDFfTkVXX1RBQkxFX0ZJRUxEMiggX2lkZW50LCBfdHlwZSwgX2ZuYW1lLCBfbWF4LCBfZGljdCApIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9pZGVudCwgVDFDT0RFLCBfdHlwZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX09GRlNFVCggX2ZuYW1lICksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX1NJWkVfREVMVEEoIF9mbmFtZSApLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9tYXgsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9LAorCisKKyNkZWZpbmUgVDFfRklFTERfQk9PTCggX2lkZW50LCBfZm5hbWUsIF9kaWN0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfU0lNUExFX0ZJRUxEKCBfaWRlbnQsIFQxX0ZJRUxEX1RZUEVfQk9PTCwgX2ZuYW1lLCBfZGljdCApCisKKyNkZWZpbmUgVDFfRklFTERfTlVNKCBfaWRlbnQsIF9mbmFtZSwgX2RpY3QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfU0lNUExFX0ZJRUxEKCBfaWRlbnQsIFQxX0ZJRUxEX1RZUEVfSU5URUdFUiwgX2ZuYW1lLCBfZGljdCApCisKKyNkZWZpbmUgVDFfRklFTERfRklYRUQoIF9pZGVudCwgX2ZuYW1lLCBfZGljdCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgVDFfTkVXX1NJTVBMRV9GSUVMRCggX2lkZW50LCBUMV9GSUVMRF9UWVBFX0ZJWEVELCBfZm5hbWUsIF9kaWN0ICkKKworI2RlZmluZSBUMV9GSUVMRF9GSVhFRF8xMDAwKCBfaWRlbnQsIF9mbmFtZSwgX2RpY3QgKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfU0lNUExFX0ZJRUxEKCBfaWRlbnQsIFQxX0ZJRUxEX1RZUEVfRklYRURfMTAwMCwgX2ZuYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpY3QgKQorCisjZGVmaW5lIFQxX0ZJRUxEX1NUUklORyggX2lkZW50LCBfZm5hbWUsIF9kaWN0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfU0lNUExFX0ZJRUxEKCBfaWRlbnQsIFQxX0ZJRUxEX1RZUEVfU1RSSU5HLCBfZm5hbWUsIF9kaWN0ICkKKworI2RlZmluZSBUMV9GSUVMRF9LRVkoIF9pZGVudCwgX2ZuYW1lLCBfZGljdCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgVDFfTkVXX1NJTVBMRV9GSUVMRCggX2lkZW50LCBUMV9GSUVMRF9UWVBFX0tFWSwgX2ZuYW1lLCBfZGljdCApCisKKyNkZWZpbmUgVDFfRklFTERfQkJPWCggX2lkZW50LCBfZm5hbWUsIF9kaWN0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfU0lNUExFX0ZJRUxEKCBfaWRlbnQsIFQxX0ZJRUxEX1RZUEVfQkJPWCwgX2ZuYW1lLCBfZGljdCApCisKKworI2RlZmluZSBUMV9GSUVMRF9OVU1fVEFCTEUoIF9pZGVudCwgX2ZuYW1lLCBfZm1heCwgX2RpY3QgKSAgICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfVEFCTEVfRklFTEQoIF9pZGVudCwgVDFfRklFTERfVFlQRV9JTlRFR0VSX0FSUkFZLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZm5hbWUsIF9mbWF4LCBfZGljdCApCisKKyNkZWZpbmUgVDFfRklFTERfRklYRURfVEFCTEUoIF9pZGVudCwgX2ZuYW1lLCBfZm1heCwgX2RpY3QgKSAgICAgXAorICAgICAgICAgIFQxX05FV19UQUJMRV9GSUVMRCggX2lkZW50LCBUMV9GSUVMRF9UWVBFX0ZJWEVEX0FSUkFZLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZm5hbWUsIF9mbWF4LCBfZGljdCApCisKKyNkZWZpbmUgVDFfRklFTERfTlVNX1RBQkxFMiggX2lkZW50LCBfZm5hbWUsIF9mbWF4LCBfZGljdCApICAgICAgICAgXAorICAgICAgICAgIFQxX05FV19UQUJMRV9GSUVMRDIoIF9pZGVudCwgVDFfRklFTERfVFlQRV9JTlRFR0VSX0FSUkFZLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZuYW1lLCBfZm1heCwgX2RpY3QgKQorCisjZGVmaW5lIFQxX0ZJRUxEX0ZJWEVEX1RBQkxFMiggX2lkZW50LCBfZm5hbWUsIF9mbWF4LCBfZGljdCApICAgICBcCisgICAgICAgICAgVDFfTkVXX1RBQkxFX0ZJRUxEMiggX2lkZW50LCBUMV9GSUVMRF9UWVBFX0ZJWEVEX0FSUkFZLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZuYW1lLCBfZm1heCwgX2RpY3QgKQorCisjZGVmaW5lIFQxX0ZJRUxEX0NBTExCQUNLKCBfaWRlbnQsIF9uYW1lLCBfZGljdCApICAgICAgIFwKKyAgICAgICAgICBUMV9ORVdfQ0FMTEJBQ0tfRklFTEQoIF9pZGVudCwgX25hbWUsIF9kaWN0ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMSBQQVJTRVIgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IFBTX1BhcnNlcl9GdW5jc1JlY18qICBQU19QYXJzZXJfRnVuY3M7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX1BhcnNlcl9GdW5jc1JlY18KKyAgeworICAgIHZvaWQKKyAgICAoKmluaXQpKCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICBGVF9CeXRlKiAgIGJhc2UsCisgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgICAgdm9pZAorICAgICgqZG9uZSkoIFBTX1BhcnNlciAgcGFyc2VyICk7CisKKyAgICB2b2lkCisgICAgKCpza2lwX3NwYWNlcykoIFBTX1BhcnNlciAgcGFyc2VyICk7CisgICAgdm9pZAorICAgICgqc2tpcF9QU190b2tlbikoIFBTX1BhcnNlciAgcGFyc2VyICk7CisKKyAgICBGVF9Mb25nCisgICAgKCp0b19pbnQpKCBQU19QYXJzZXIgIHBhcnNlciApOworICAgIEZUX0ZpeGVkCisgICAgKCp0b19maXhlZCkoIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIHBvd2VyX3RlbiApOworCisgICAgRlRfRXJyb3IKKyAgICAoKnRvX2J5dGVzKSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnl0ZXMsCisgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbWF4X2J5dGVzLAorICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHBudW1fYnl0ZXMsCisgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgZGVsaW1pdGVycyApOworCisgICAgRlRfSW50CisgICAgKCp0b19jb29yZF9hcnJheSkoIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIG1heF9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgY29vcmRzICk7CisgICAgRlRfSW50CisgICAgKCp0b19maXhlZF9hcnJheSkoIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIG1heF92YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIHBvd2VyX3RlbiApOworCisgICAgdm9pZAorICAgICgqdG9fdG9rZW4pKCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgVDFfVG9rZW4gICB0b2tlbiApOworICAgIHZvaWQKKyAgICAoKnRvX3Rva2VuX2FycmF5KSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX1Rva2VuICAgdG9rZW5zLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG1heF90b2tlbnMsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCogICAgcG51bV90b2tlbnMgKTsKKworICAgIEZUX0Vycm9yCisgICAgKCpsb2FkX2ZpZWxkKSggUFNfUGFyc2VyICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUMV9GaWVsZCAgZmllbGQsCisgICAgICAgICAgICAgICAgICAgdm9pZCoqICAgICAgICAgIG9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIG1heF9vYmplY3RzLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBwZmxhZ3MgKTsKKworICAgIEZUX0Vycm9yCisgICAgKCpsb2FkX2ZpZWxkX3RhYmxlKSggUFNfUGFyc2VyICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMV9GaWVsZCAgZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqICAgICAgICAgIG9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIG1heF9vYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBwZmxhZ3MgKTsKKworICB9IFBTX1BhcnNlcl9GdW5jc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX1BhcnNlclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgUFNfUGFyc2VyIGlzIGFuIG9iamVjdCB1c2VkIHRvIHBhcnNlIGEgVHlwZSAxIGZvbnQgdmVyeSBxdWlja2x5LiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN1cnNvciA6OiBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmFzZSAgIDo6IFN0YXJ0IG9mIHRoZSBwcm9jZXNzZWQgdGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaW1pdCAgOjogRW5kIG9mIHRoZSBwcm9jZXNzZWQgdGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVycm9yICA6OiBUaGUgbGFzdCBlcnJvciByZXR1cm5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IFRoZSBvYmplY3QgdXNlZCBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgKGFsbG9jL3JlYWxsb2MpLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdW5jcyAgOjogQSB0YWJsZSBvZiBmdW5jdGlvbnMgZm9yIHRoZSBwYXJzZXIuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBQU19QYXJzZXJSZWNfCisgIHsKKyAgICBGVF9CeXRlKiAgIGN1cnNvcjsKKyAgICBGVF9CeXRlKiAgIGJhc2U7CisgICAgRlRfQnl0ZSogICBsaW1pdDsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisgICAgUFNfUGFyc2VyX0Z1bmNzUmVjICBmdW5jczsKKworICB9IFBTX1BhcnNlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBUMSBCVUlMREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgVDFfQnVpbGRlclJlY18qICBUMV9CdWlsZGVyOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlQxX0J1aWxkZXJfQ2hlY2tfUG9pbnRzX0Z1bmMpKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBjb3VudCApOworCisgIHR5cGVkZWYgdm9pZAorICAoKlQxX0J1aWxkZXJfQWRkX1BvaW50X0Z1bmMpKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICBmbGFnICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlQxX0J1aWxkZXJfQWRkX1BvaW50MV9GdW5jKSggVDFfQnVpbGRlciAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB5ICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlQxX0J1aWxkZXJfQWRkX0NvbnRvdXJfRnVuYykoIFQxX0J1aWxkZXIgIGJ1aWxkZXIgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVDFfQnVpbGRlcl9TdGFydF9Qb2ludF9GdW5jKSggVDFfQnVpbGRlciAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHkgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpUMV9CdWlsZGVyX0Nsb3NlX0NvbnRvdXJfRnVuYykoIFQxX0J1aWxkZXIgIGJ1aWxkZXIgKTsKKworCisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IFQxX0J1aWxkZXJfRnVuY3NSZWNfKiAgVDFfQnVpbGRlcl9GdW5jczsKKworICB0eXBlZGVmIHN0cnVjdCAgVDFfQnVpbGRlcl9GdW5jc1JlY18KKyAgeworICAgIHZvaWQKKyAgICAoKmluaXQpKCBUMV9CdWlsZGVyICAgIGJ1aWxkZXIsCisgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgIEZUX1NpemUgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgRlRfQm9vbCAgICAgICBoaW50aW5nICk7CisKKyAgICB2b2lkCisgICAgKCpkb25lKSggVDFfQnVpbGRlciAgIGJ1aWxkZXIgKTsKKworICAgIFQxX0J1aWxkZXJfQ2hlY2tfUG9pbnRzX0Z1bmMgICBjaGVja19wb2ludHM7CisgICAgVDFfQnVpbGRlcl9BZGRfUG9pbnRfRnVuYyAgICAgIGFkZF9wb2ludDsKKyAgICBUMV9CdWlsZGVyX0FkZF9Qb2ludDFfRnVuYyAgICAgYWRkX3BvaW50MTsKKyAgICBUMV9CdWlsZGVyX0FkZF9Db250b3VyX0Z1bmMgICAgYWRkX2NvbnRvdXI7CisgICAgVDFfQnVpbGRlcl9TdGFydF9Qb2ludF9GdW5jICAgIHN0YXJ0X3BvaW50OworICAgIFQxX0J1aWxkZXJfQ2xvc2VfQ29udG91cl9GdW5jICBjbG9zZV9jb250b3VyOworCisgIH0gVDFfQnVpbGRlcl9GdW5jc1JlYzsKKworCisgIC8qIGFuIGVudW1lcmF0aW9uIHR5cGUgdG8gaGFuZGxlIGNoYXJzdHJpbmcgcGFyc2luZyBzdGF0ZXMgKi8KKyAgdHlwZWRlZiBlbnVtICBUMV9QYXJzZVN0YXRlXworICB7CisgICAgVDFfUGFyc2VfU3RhcnQsCisgICAgVDFfUGFyc2VfSGF2ZV9XaWR0aCwKKyAgICBUMV9QYXJzZV9IYXZlX01vdmV0bywKKyAgICBUMV9QYXJzZV9IYXZlX1BhdGgKKworICB9IFQxX1BhcnNlU3RhdGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3R1cmU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9CdWlsZGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgQSBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgZ2x5cGggbG9hZGluZyB0byBzdG9yZSBpdHMgb3V0bGluZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgICAgICAgOjogVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGggICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkZXIgICAgICAgOjogWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJhc2UgICAgICAgICA6OiBUaGUgYmFzZSBnbHlwaCBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY3VycmVudCAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfcG9pbnRzICAgOjogbWF4aW11bSBwb2ludHMgaW4gYnVpbGRlciBvdXRsaW5lICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9jb250b3VycyA6OiBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBidWlsZGVyIG91dGxpbmUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zX3ggICAgICAgIDo6IFRoZSBob3Jpem9udGFsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb3NfeSAgICAgICAgOjogVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfYmVhcmluZyA6OiBUaGUgbGVmdCBzaWRlIGJlYXJpbmcgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWR2YW5jZSAgICAgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYm94ICAgICAgICAgOjogVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhcnNlX3N0YXRlICA6OiBBbiBlbnVtZXJhdGlvbiB3aGljaCBjb250cm9scyB0aGUgY2hhcnN0cmluZyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgcGFyc2luZyBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfcG9pbnRzICA6OiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbm9fcmVjdXJzZSAgIDo6IFNldCBidXQgbm90IHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzX29ubHkgOjogQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnVuY3MgICAgICAgIDo6IEFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGUgYnVpbGRlci4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVDFfQnVpbGRlclJlY18KKyAgeworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnk7CisgICAgRlRfRmFjZSAgICAgICAgIGZhY2U7CisgICAgRlRfR2x5cGhTbG90ICAgIGdseXBoOworICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXI7CisgICAgRlRfT3V0bGluZSogICAgIGJhc2U7CisgICAgRlRfT3V0bGluZSogICAgIGN1cnJlbnQ7CisKKyAgICBGVF9Qb3MgICAgICAgICAgcG9zX3g7CisgICAgRlRfUG9zICAgICAgICAgIHBvc195OworCisgICAgRlRfVmVjdG9yICAgICAgIGxlZnRfYmVhcmluZzsKKyAgICBGVF9WZWN0b3IgICAgICAgYWR2YW5jZTsKKworICAgIEZUX0JCb3ggICAgICAgICBiYm94OyAgICAgICAgICAvKiBib3VuZGluZyBib3ggKi8KKyAgICBUMV9QYXJzZVN0YXRlICAgcGFyc2Vfc3RhdGU7CisgICAgRlRfQm9vbCAgICAgICAgIGxvYWRfcG9pbnRzOworICAgIEZUX0Jvb2wgICAgICAgICBub19yZWN1cnNlOworCisgICAgRlRfQm9vbCAgICAgICAgIG1ldHJpY3Nfb25seTsKKworICAgIHZvaWQqICAgICAgICAgICBoaW50c19mdW5jczsgICAgLyogaGludGVyLXNwZWNpZmljICovCisgICAgdm9pZCogICAgICAgICAgIGhpbnRzX2dsb2JhbHM7ICAvKiBoaW50ZXItc3BlY2lmaWMgKi8KKworICAgIFQxX0J1aWxkZXJfRnVuY3NSZWMgIGZ1bmNzOworCisgIH0gVDFfQnVpbGRlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBUMSBERUNPREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMAorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVDFfTUFYX1NVQlJTX0NBTExTIGRldGFpbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBzdWItcm91dGluZSAgICovCisgIC8qIGNhbGxzIGR1cmluZyBnbHlwaCBsb2FkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVDFfTUFYX1NVQlJTX0NBTExTICA4CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFQxX01BWF9DSEFSU1RSSU5HX09QRVJBTkRTIGlzIHRoZSBjaGFyc3RyaW5nIHN0YWNrJ3MgY2FwYWNpdHkuICBBICAgICAqLworICAvKiBtaW5pbXVtIG9mIDE2IGlzIHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyAgMzIKKworI2VuZGlmIC8qIDAgKi8KKworCisgIHR5cGVkZWYgc3RydWN0ICBUMV9EZWNvZGVyX1pvbmVSZWNfCisgIHsKKyAgICBGVF9CeXRlKiAgY3Vyc29yOworICAgIEZUX0J5dGUqICBiYXNlOworICAgIEZUX0J5dGUqICBsaW1pdDsKKworICB9IFQxX0RlY29kZXJfWm9uZVJlYywgKlQxX0RlY29kZXJfWm9uZTsKKworCisgIHR5cGVkZWYgc3RydWN0IFQxX0RlY29kZXJSZWNfKiAgICAgICAgICAgICAgVDFfRGVjb2RlcjsKKyAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgVDFfRGVjb2Rlcl9GdW5jc1JlY18qICBUMV9EZWNvZGVyX0Z1bmNzOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlQxX0RlY29kZXJfQ2FsbGJhY2spKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCApOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0RlY29kZXJfRnVuY3NSZWNfCisgIHsKKyAgICBGVF9FcnJvcgorICAgICgqaW5pdCkoIFQxX0RlY29kZXIgICAgICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICBGVF9TaXplICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICAgICAgIHNsb3QsCisgICAgICAgICAgICAgRlRfQnl0ZSoqICAgICAgICAgICAgZ2x5cGhfbmFtZXMsCisgICAgICAgICAgICAgUFNfQmxlbmQgICAgICAgICAgICAgYmxlbmQsCisgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICAgICBoaW50X21vZGUsCisgICAgICAgICAgICAgVDFfRGVjb2Rlcl9DYWxsYmFjayAgY2FsbGJhY2sgKTsKKworICAgIHZvaWQKKyAgICAoKmRvbmUpKCBUMV9EZWNvZGVyICBkZWNvZGVyICk7CisKKyAgICBGVF9FcnJvcgorICAgICgqcGFyc2VfY2hhcnN0cmluZ3MpKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZW4gKTsKKworICB9IFQxX0RlY29kZXJfRnVuY3NSZWM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgVDFfRGVjb2RlclJlY18KKyAgeworICAgIFQxX0J1aWxkZXJSZWMgICAgICAgIGJ1aWxkZXI7CisKKyAgICBGVF9Mb25nICAgICAgICAgICAgICBzdGFja1tUMV9NQVhfQ0hBUlNUUklOR1NfT1BFUkFORFNdOworICAgIEZUX0xvbmcqICAgICAgICAgICAgIHRvcDsKKworICAgIFQxX0RlY29kZXJfWm9uZVJlYyAgIHpvbmVzW1QxX01BWF9TVUJSU19DQUxMUyArIDFdOworICAgIFQxX0RlY29kZXJfWm9uZSAgICAgIHpvbmU7CisKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgICBwc25hbWVzOyAgICAgIC8qIGZvciBzZWFjICovCisgICAgRlRfVUludCAgICAgICAgICAgICAgbnVtX2dseXBoczsKKyAgICBGVF9CeXRlKiogICAgICAgICAgICBnbHlwaF9uYW1lczsKKworICAgIEZUX0ludCAgICAgICAgICAgICAgIGxlbklWOyAgICAgICAgLyogaW50ZXJuYWwgZm9yIHN1YiByb3V0aW5lIGNhbGxzICovCisgICAgRlRfSW50ICAgICAgICAgICAgICAgbnVtX3N1YnJzOworICAgIEZUX0J5dGUqKiAgICAgICAgICAgIHN1YnJzOworICAgIEZUX1VJbnQqICAgICAgICAgICAgIHN1YnJzX2xlbjsgICAgLyogYXJyYXkgb2Ygc3VicnMgbGVuZ3RoIChvcHRpb25hbCkgKi8KKworICAgIEZUX01hdHJpeCAgICAgICAgICAgIGZvbnRfbWF0cml4OworICAgIEZUX1ZlY3RvciAgICAgICAgICAgIGZvbnRfb2Zmc2V0OworCisgICAgRlRfSW50ICAgICAgICAgICAgICAgZmxleF9zdGF0ZTsKKyAgICBGVF9JbnQgICAgICAgICAgICAgICBudW1fZmxleF92ZWN0b3JzOworICAgIEZUX1ZlY3RvciAgICAgICAgICAgIGZsZXhfdmVjdG9yc1s3XTsKKworICAgIFBTX0JsZW5kICAgICAgICAgICAgIGJsZW5kOyAgICAgICAvKiBmb3IgbXVsdGlwbGUgbWFzdGVyIHN1cHBvcnQgKi8KKworICAgIEZUX1JlbmRlcl9Nb2RlICAgICAgIGhpbnRfbW9kZTsKKworICAgIFQxX0RlY29kZXJfQ2FsbGJhY2sgIHBhcnNlX2NhbGxiYWNrOworICAgIFQxX0RlY29kZXJfRnVuY3NSZWMgIGZ1bmNzOworCisgICAgRlRfTG9uZyogICAgICAgICAgICAgYnVpbGRjaGFyOworICAgIEZUX1VJbnQgICAgICAgICAgICAgIGxlbl9idWlsZGNoYXI7CisKKyAgICBGVF9Cb29sICAgICAgICAgICAgICBzZWFjOworCisgIH0gVDFfRGVjb2RlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRk0gUEFSU0VSICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0IEFGTV9QYXJzZXJSZWNfKiAgQUZNX1BhcnNlcjsKKworICB0eXBlZGVmIHN0cnVjdCAgQUZNX1BhcnNlcl9GdW5jc1JlY18KKyAgeworICAgIEZUX0Vycm9yCisgICAgKCppbml0KSggQUZNX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgIEZUX01lbW9yeSAgIG1lbW9yeSwKKyAgICAgICAgICAgICBGVF9CeXRlKiAgICBiYXNlLAorICAgICAgICAgICAgIEZUX0J5dGUqICAgIGxpbWl0ICk7CisKKyAgICB2b2lkCisgICAgKCpkb25lKSggQUZNX1BhcnNlciAgcGFyc2VyICk7CisKKyAgICBGVF9FcnJvcgorICAgICgqcGFyc2UpKCBBRk1fUGFyc2VyICBwYXJzZXIgKTsKKworICB9IEFGTV9QYXJzZXJfRnVuY3NSZWM7CisKKworICB0eXBlZGVmIHN0cnVjdCBBRk1fU3RyZWFtUmVjXyogIEFGTV9TdHJlYW07CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBRk1fUGFyc2VyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBBRk1fUGFyc2VyIGlzIGEgcGFyc2VyIGZvciB0aGUgQUZNIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgICAgOjogVGhlIG9iamVjdCB1c2VkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyAoYWxsb2MgYW5kICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIHJlYWxsb2MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gICAgOjogVGhpcyBpcyBhbiBvcGFxdWUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZvbnRJbmZvICA6OiBUaGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2V0X2luZGV4IDo6IEEgdXNlciBwcm92aWRlZCBmdW5jdGlvbiB0byBnZXQgYSBnbHlwaCBpbmRleCBieSBpdHMgICovCisgIC8qICAgICAgICAgICAgICAgICBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGTV9QYXJzZXJSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeTsKKyAgICBBRk1fU3RyZWFtICAgIHN0cmVhbTsKKworICAgIEFGTV9Gb250SW5mbyAgRm9udEluZm87CisKKyAgICBGVF9JbnQKKyAgICAoKmdldF9pbmRleCkoIGNvbnN0IGNoYXIqICBuYW1lLAorICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICB1c2VyX2RhdGEgKTsKKworICAgIHZvaWQqICAgICAgICAgdXNlcl9kYXRhOworCisgIH0gQUZNX1BhcnNlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIFRZUEUxIENIQVJNQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IFQxX0NNYXBfQ2xhc3Nlc1JlY18qICBUMV9DTWFwX0NsYXNzZXM7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgVDFfQ01hcF9DbGFzc2VzUmVjXworICB7CisgICAgRlRfQ01hcF9DbGFzcyAgc3RhbmRhcmQ7CisgICAgRlRfQ01hcF9DbGFzcyAgZXhwZXJ0OworICAgIEZUX0NNYXBfQ2xhc3MgIGN1c3RvbTsKKyAgICBGVF9DTWFwX0NsYXNzICB1bmljb2RlOworCisgIH0gVDFfQ01hcF9DbGFzc2VzUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgUFNBdXggTW9kdWxlIEludGVyZmFjZSAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTQXV4X1NlcnZpY2VSZWNfCisgIHsKKyAgICAvKiBkb24ndCB1c2UgYFBTX1RhYmxlX0Z1bmNzJyBhbmQgZnJpZW5kcyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLworICAgIGNvbnN0IFBTX1RhYmxlX0Z1bmNzUmVjKiAgICBwc190YWJsZV9mdW5jczsKKyAgICBjb25zdCBQU19QYXJzZXJfRnVuY3NSZWMqICAgcHNfcGFyc2VyX2Z1bmNzOworICAgIGNvbnN0IFQxX0J1aWxkZXJfRnVuY3NSZWMqICB0MV9idWlsZGVyX2Z1bmNzOworICAgIGNvbnN0IFQxX0RlY29kZXJfRnVuY3NSZWMqICB0MV9kZWNvZGVyX2Z1bmNzOworCisgICAgdm9pZAorICAgICgqdDFfZGVjcnlwdCkoIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgc2VlZCApOworCisgICAgVDFfQ01hcF9DbGFzc2VzICB0MV9jbWFwX2NsYXNzZXM7CisKKyAgICAvKiBmaWVsZHMgYWZ0ZXIgdGhpcyBjb21tZW50IGxpbmUgd2VyZSBhZGRlZCBhZnRlciB2ZXJzaW9uIDIuMS4xMCAqLworICAgIGNvbnN0IEFGTV9QYXJzZXJfRnVuY3NSZWMqICBhZm1fcGFyc2VyX2Z1bmNzOworCisgIH0gUFNBdXhfU2VydmljZVJlYywgKlBTQXV4X1NlcnZpY2U7CisKKyAgLyogYmFja3dhcmRzLWNvbXBhdGlibGUgdHlwZSBkZWZpbml0aW9uICovCisgIHR5cGVkZWYgUFNBdXhfU2VydmljZVJlYyAgIFBTQXV4X0ludGVyZmFjZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgU29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElTX1BTX05FV0xJTkUoIGNoICkgXAorICAoIChjaCkgPT0gJ1xyJyB8fCAgICAgICAgIFwKKyAgICAoY2gpID09ICdcbicgKQorCisjZGVmaW5lIElTX1BTX1NQQUNFKCBjaCApICBcCisgICggKGNoKSA9PSAnICcgICAgICAgICB8fCBcCisgICAgSVNfUFNfTkVXTElORSggY2ggKSB8fCBcCisgICAgKGNoKSA9PSAnXHQnICAgICAgICB8fCBcCisgICAgKGNoKSA9PSAnXGYnICAgICAgICB8fCBcCisgICAgKGNoKSA9PSAnXDAnICkKKworI2RlZmluZSBJU19QU19TUEVDSUFMKCBjaCApICAgICAgIFwKKyAgKCAoY2gpID09ICcvJyAgICAgICAgICAgICAgICB8fCBcCisgICAgKGNoKSA9PSAnKCcgfHwgKGNoKSA9PSAnKScgfHwgXAorICAgIChjaCkgPT0gJzwnIHx8IChjaCkgPT0gJz4nIHx8IFwKKyAgICAoY2gpID09ICdbJyB8fCAoY2gpID09ICddJyB8fCBcCisgICAgKGNoKSA9PSAneycgfHwgKGNoKSA9PSAnfScgfHwgXAorICAgIChjaCkgPT0gJyUnICAgICAgICAgICAgICAgICkKKworI2RlZmluZSBJU19QU19ERUxJTSggY2ggKSAgXAorICAoIElTX1BTX1NQQUNFKCBjaCApICAgfHwgXAorICAgIElTX1BTX1NQRUNJQUwoIGNoICkgKQorCisjZGVmaW5lIElTX1BTX0RJR0lUKCBjaCApICAgICAgICBcCisgICggKGNoKSA+PSAnMCcgJiYgKGNoKSA8PSAnOScgKQorCisjZGVmaW5lIElTX1BTX1hESUdJVCggY2ggKSAgICAgICAgICAgIFwKKyAgKCBJU19QU19ESUdJVCggY2ggKSAgICAgICAgICAgICAgfHwgXAorICAgICggKGNoKSA+PSAnQScgJiYgKGNoKSA8PSAnRicgKSB8fCBcCisgICAgKCAoY2gpID49ICdhJyAmJiAoY2gpIDw9ICdmJyApICkKKworI2RlZmluZSBJU19QU19CQVNFODUoIGNoICkgICAgICAgXAorICAoIChjaCkgPj0gJyEnICYmIChjaCkgPD0gJ3UnICkKKworI2RlZmluZSBJU19QU19UT0tFTiggY3VyLCBsaW1pdCwgdG9rZW4gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoIChjaGFyKShjdXIpWzBdID09ICh0b2tlbilbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAorICAgICggKGN1cikgKyBzaXplb2YgKCAodG9rZW4pICkgPT0gKGxpbWl0KSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKCAoY3VyKSArIHNpemVvZiggKHRva2VuKSApIDwgKGxpbWl0KSAgICAgICAgICAmJiAgICAgICAgICAgICAgICAgXAorICAgICAgICBJU19QU19ERUxJTSggKGN1cilbc2l6ZW9mICggKHRva2VuKSApIC0gMV0gKSApICkgICAgICAgICAgICAgJiYgXAorICAgIGZ0X3N0cm5jbXAoIChjaGFyKikoY3VyKSwgKHRva2VuKSwgc2l6ZW9mICggKHRva2VuKSApIC0gMSApID09IDAgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUFNBVVhfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9wc2hpbnRzLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9wc2hpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhYWFiYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3BzaGludHMuaApAQCAtMCwwICsxLDcyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNoaW50cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEludGVyZmFjZSB0byBQb3N0c2NyaXB0LXNwZWNpZmljIChUeXBlIDEgYW5kIFR5cGUgMikgaGludHMgICAgICAgICAgICovCisvKiAgICByZWNvcmRlcnMgKHNwZWNpZmljYXRpb24gb25seSkuICBUaGVzZSBhcmUgdXNlZCB0byBzdXBwb3J0IG5hdGl2ZSAgICAqLworLyogICAgVDEvVDIgaGludHMgaW4gdGhlIGB0eXBlMScsIGBjaWQnLCBhbmQgYGNmZicgZm9udCBkcml2ZXJzLiAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU0hJTlRTX0hfXworI2RlZmluZSBfX1BTSElOVFNfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9UWVBFMV9UQUJMRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgSU5URVJOQUwgUkVQUkVTRU5UQVRJT04gT0YgR0xPQkFMUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgUFNIX0dsb2JhbHNSZWNfKiAgUFNIX0dsb2JhbHM7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlBTSF9HbG9iYWxzX05ld0Z1bmMpKCBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVDFfUHJpdmF0ZSogICBwcml2YXRlX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzKiAgYWdsb2JhbHMgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpQU0hfR2xvYmFsc19TZXRTY2FsZUZ1bmMpKCBQU0hfR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgeV9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgeF9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgeV9kZWx0YSApOworCisgIHR5cGVkZWYgdm9pZAorICAoKlBTSF9HbG9iYWxzX0Rlc3Ryb3lGdW5jKSggUFNIX0dsb2JhbHMgIGdsb2JhbHMgKTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfR2xvYmFsc19GdW5jc1JlY18KKyAgeworICAgIFBTSF9HbG9iYWxzX05ld0Z1bmMgICAgICAgY3JlYXRlOworICAgIFBTSF9HbG9iYWxzX1NldFNjYWxlRnVuYyAgc2V0X3NjYWxlOworICAgIFBTSF9HbG9iYWxzX0Rlc3Ryb3lGdW5jICAgZGVzdHJveTsKKworICB9IFBTSF9HbG9iYWxzX0Z1bmNzUmVjLCAqUFNIX0dsb2JhbHNfRnVuY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICBQVUJMSUMgVFlQRSAxIEhJTlRTIFJFQ09SREVSICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBUMV9IaW50cworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBpcyBhIGhhbmRsZSB0byBhbiBvcGFxdWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIGdseXBoIGhpbnRzCisgICAqICAgZnJvbSBhIFR5cGUgMSBjaGFyYWN0ZXIgZ2x5cGggY2hhcmFjdGVyIHN0cmluZy4KKyAgICoKKyAgICogICBUaGUgbWV0aG9kcyB1c2VkIHRvIG9wZXJhdGUgb24gdGhpcyBvYmplY3QgYXJlIGRlZmluZWQgYnkgdGhlCisgICAqICAgQFQxX0hpbnRzX0Z1bmNzUmVjIHN0cnVjdHVyZS4gIFJlY29yZGluZyBnbHlwaCBoaW50cyBpcyBub3JtYWxseQorICAgKiAgIGFjaGlldmVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzY2hlbWU6CisgICAqCisgICAqICAgLSBPcGVuIGEgbmV3IGhpbnQgcmVjb3JkaW5nIHNlc3Npb24gYnkgY2FsbGluZyB0aGUgYG9wZW4nIG1ldGhvZC4KKyAgICogICAgIFRoaXMgcmV3aW5kcyB0aGUgcmVjb3JkZXIgYW5kIHByZXBhcmUgaXQgZm9yIG5ldyBpbnB1dC4KKyAgICoKKyAgICogICAtIEZvciBlYWNoIGhpbnQgZm91bmQgaW4gdGhlIGdseXBoIGNoYXJzdHJpbmcsIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICAgIG1ldGhvZCAoYHN0ZW0nLCBgc3RlbTMnLCBvciBgcmVzZXQnKS4gIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG8KKyAgICogICAgIG5vdCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKyAgICoKKyAgICogICAtIENsb3NlIHRoZSByZWNvcmRpbmcgc2Vzc2lvbiBieSBjYWxsaW5nIHRoZSBgY2xvc2UnIG1ldGhvZC4gIEl0CisgICAqICAgICByZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhlIGhpbnRzIHdlcmUgaW52YWxpZCBvciBzb21ldGhpbmcKKyAgICogICAgIHN0cmFuZ2UgaGFwcGVuZWQgKGUuZy4sIG1lbW9yeSBzaG9ydGFnZSkuCisgICAqCisgICAqICAgVGhlIGhpbnRzIGFjY3VtdWxhdGVkIGluIHRoZSBvYmplY3QgY2FuIGxhdGVyIGJlIHVzZWQgYnkgdGhlCisgICAqICAgUG9zdFNjcmlwdCBoaW50ZXIuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBUMV9IaW50c1JlY18qICBUMV9IaW50czsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFQxX0hpbnRzX0Z1bmNzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHBvaW50ZXIgdG8gdGhlIEBUMV9IaW50c19GdW5jc1JlYyBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHRoZSBBUEkgb2YKKyAgICogICBhIGdpdmVuIEBUMV9IaW50cyBvYmplY3QuCisgICAqCisgICAqLworICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBUMV9IaW50c19GdW5jc1JlY18qICBUMV9IaW50c19GdW5jczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMV9IaW50c19PcGVuRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMV9IaW50cyBjbGFzcyB1c2VkIHRvIHByZXBhcmUgaXQgZm9yIGEgbmV3IFR5cGUgMQorICAgKiAgIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUeXBlIDEgaGludHMgcmVjb3JkZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFlvdSBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIEBUMV9IaW50c19DbG9zZUZ1bmMgbWV0aG9kIGluIG9yZGVyIHRvCisgICAqICAgY2xvc2UgYW4gb3BlbmVkIHJlY29yZGluZyBzZXNzaW9uLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVDFfSGludHNfT3BlbkZ1bmMpKCBUMV9IaW50cyAgaGludHMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMV9IaW50c19TZXRTdGVtRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMV9IaW50cyBjbGFzcyB1c2VkIHRvIHJlY29yZCBhIG5ldyBob3Jpem9udGFsIG9yCisgICAqICAgdmVydGljYWwgc3RlbS4gIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIFR5cGUgMSBgaHN0ZW0nIGFuZCBgdnN0ZW0nCisgICAqICAgb3BlcmF0b3JzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUeXBlIDEgaGludHMgcmVjb3JkZXIuCisgICAqCisgICAqICAgZGltZW5zaW9uIDo6CisgICAqICAgICAwIGZvciBob3Jpem9udGFsIHN0ZW1zIChoc3RlbSksIDEgZm9yIHZlcnRpY2FsIG9uZXMgKHZzdGVtKS4KKyAgICoKKyAgICogICBjb29yZHMgOjoKKyAgICogICAgIEFycmF5IG9mIDIgY29vcmRpbmF0ZXMgaW4gMTYuMTYgZm9ybWF0LCB1c2VkIGFzIChwb3NpdGlvbixsZW5ndGgpCisgICAqICAgICBzdGVtIGRlc2NyaXB0b3IuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFVzZSB2ZXJ0aWNhbCBjb29yZGluYXRlcyAoeSkgZm9yIGhvcml6b250YWwgc3RlbXMgKGRpbT0wKS4gIFVzZQorICAgKiAgIGhvcml6b250YWwgY29vcmRpbmF0ZXMgKHgpIGZvciB2ZXJ0aWNhbCBzdGVtcyAoZGltPTEpLgorICAgKgorICAgKiAgIGBjb29yZHNbMF0nIGlzIHRoZSBhYnNvbHV0ZSBzdGVtIHBvc2l0aW9uIChsb3dlc3QgY29vcmRpbmF0ZSk7CisgICAqICAgYGNvb3Jkc1sxXScgaXMgdGhlIGxlbmd0aC4KKyAgICoKKyAgICogICBUaGUgbGVuZ3RoIGNhbiBiZSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGVpdGhlciAtMjAgb3IKKyAgICogICAtMjEuICBJdCBpcyBpbnRlcnByZXRlZCBhcyBhIGBnaG9zdCcgc3RlbSwgYWNjb3JkaW5nIHRvIHRoZSBUeXBlIDEKKyAgICogICBzcGVjaWZpY2F0aW9uLgorICAgKgorICAgKiAgIElmIHRoZSBsZW5ndGggaXMgLTIxIChjb3JyZXNwb25kaW5nIHRvIGEgYm90dG9tIGdob3N0IHN0ZW0pLCB0aGVuCisgICAqICAgdGhlIHJlYWwgc3RlbSBwb3NpdGlvbiBpcyBgY29vcmRzWzBdK2Nvb3Jkc1sxXScuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpUMV9IaW50c19TZXRTdGVtRnVuYykoIFQxX0hpbnRzICAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGRpbWVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVDFfSGludHNfU2V0U3RlbTNGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1ldGhvZCBvZiB0aGUgQFQxX0hpbnRzIGNsYXNzIHVzZWQgdG8gcmVjb3JkIHRocmVlCisgICAqICAgY291bnRlci1jb250cm9sbGVkIGhvcml6b250YWwgb3IgdmVydGljYWwgc3RlbXMgYXQgb25jZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhpbnRzIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgVHlwZSAxIGhpbnRzIHJlY29yZGVyLgorICAgKgorICAgKiAgIGRpbWVuc2lvbiA6OgorICAgKiAgICAgMCBmb3IgaG9yaXpvbnRhbCBzdGVtcywgMSBmb3IgdmVydGljYWwgb25lcy4KKyAgICoKKyAgICogICBjb29yZHMgOjoKKyAgICogICAgIEFuIGFycmF5IG9mIDYgdmFsdWVzIGluIDE2LjE2IGZvcm1hdCwgaG9sZGluZyAzIChwb3NpdGlvbixsZW5ndGgpCisgICAqICAgICBwYWlycyBmb3IgdGhlIGNvdW50ZXItY29udHJvbGxlZCBzdGVtcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVXNlIHZlcnRpY2FsIGNvb3JkaW5hdGVzICh5KSBmb3IgaG9yaXpvbnRhbCBzdGVtcyAoZGltPTApLiAgVXNlCisgICAqICAgaG9yaXpvbnRhbCBjb29yZGluYXRlcyAoeCkgZm9yIHZlcnRpY2FsIHN0ZW1zIChkaW09MSkuCisgICAqCisgICAqICAgVGhlIGxlbmd0aHMgY2Fubm90IGJlIG5lZ2F0aXZlIChnaG9zdCBzdGVtcyBhcmUgbmV2ZXIKKyAgICogICBjb3VudGVyLWNvbnRyb2xsZWQpLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVDFfSGludHNfU2V0U3RlbTNGdW5jKSggVDFfSGludHMgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGRpbWVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFQxX0hpbnRzX1Jlc2V0RnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMV9IaW50cyBjbGFzcyB1c2VkIHRvIHJlc2V0IHRoZSBzdGVtcyBoaW50cyBpbiBhCisgICAqICAgcmVjb3JkaW5nIHNlc3Npb24uCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBoaW50cyA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIFR5cGUgMSBoaW50cyByZWNvcmRlci4KKyAgICoKKyAgICogICBlbmRfcG9pbnQgOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBwb2ludCBpbiB0aGUgaW5wdXQgZ2x5cGggaW4gd2hpY2ggdGhlCisgICAqICAgICBwcmV2aW91c2x5IGRlZmluZWQgaGludHMgYXBwbHkuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpUMV9IaW50c19SZXNldEZ1bmMpKCBUMV9IaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGVuZF9wb2ludCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFQxX0hpbnRzX0Nsb3NlRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMV9IaW50cyBjbGFzcyB1c2VkIHRvIGNsb3NlIGEgaGludCByZWNvcmRpbmcKKyAgICogICBzZXNzaW9uLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUeXBlIDEgaGludHMgcmVjb3JkZXIuCisgICAqCisgICAqICAgZW5kX3BvaW50IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGxhc3QgcG9pbnQgaW4gdGhlIGlucHV0IGdseXBoLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBlcnJvciBjb2RlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUKKyAgICogICByZWNvcmRpbmcgc2Vzc2lvbi4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpUMV9IaW50c19DbG9zZUZ1bmMpKCBUMV9IaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGVuZF9wb2ludCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFQxX0hpbnRzX0FwcGx5RnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMV9IaW50cyBjbGFzcyB1c2VkIHRvIGFwcGx5IGhpbnRzIHRvIHRoZQorICAgKiAgIGNvcnJlc3BvbmRpbmcgZ2x5cGggb3V0bGluZS4gIE11c3QgYmUgY2FsbGVkIG9uY2UgYWxsIGhpbnRzIGhhdmUgYmVlbgorICAgKiAgIHJlY29yZGVkLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUeXBlIDEgaGludHMgcmVjb3JkZXIuCisgICAqCisgICAqICAgb3V0bGluZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgb3V0bGluZSBkZXNjcmlwdG9yLgorICAgKgorICAgKiAgIGdsb2JhbHMgOjoKKyAgICogICAgIFRoZSBoaW50ZXIgZ2xvYmFscyBmb3IgdGhpcyBmb250LgorICAgKgorICAgKiAgIGhpbnRfbW9kZSA6OgorICAgKiAgICAgSGludGluZyBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBPbiBpbnB1dCwgYWxsIHBvaW50cyB3aXRoaW4gdGhlIG91dGxpbmUgYXJlIGluIGZvbnQgY29vcmRpbmF0ZXMuIE9uCisgICAqICAgb3V0cHV0LCB0aGV5IGFyZSBpbiAxLzY0dGggb2YgcGl4ZWxzLgorICAgKgorICAgKiAgIFRoZSBzY2FsaW5nIHRyYW5zZm9ybWF0aW9uIGlzIHRha2VuIGZyb20gdGhlIGBnbG9iYWxzJyBvYmplY3Qgd2hpY2gKKyAgICogICBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9udCBhcyB0aGUgZ2x5cGguCisgICAqCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVDFfSGludHNfQXBwbHlGdW5jKSggVDFfSGludHMgICAgICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzICAgICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBoaW50X21vZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVDFfSGludHNfRnVuY3NSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwcm92aWRlIHRoZSBBUEkgdG8gQFQxX0hpbnRzIG9iamVjdHMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUMSBIaW50cyByZWNvcmRlci4KKyAgICoKKyAgICogICBvcGVuIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gb3BlbiBhIHJlY29yZGluZyBzZXNzaW9uLgorICAgKgorICAgKiAgIGNsb3NlIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gY2xvc2UgYSByZWNvcmRpbmcgc2Vzc2lvbi4KKyAgICoKKyAgICogICBzdGVtIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gc2V0IGEgc2ltcGxlIHN0ZW0uCisgICAqCisgICAqICAgc3RlbTMgOjoKKyAgICogICAgIFRoZSBmdW5jdGlvbiB0byBzZXQgY291bnRlci1jb250cm9sbGVkIHN0ZW1zLgorICAgKgorICAgKiAgIHJlc2V0IDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gcmVzZXQgc3RlbSBoaW50cy4KKyAgICoKKyAgICogICBhcHBseSA6OgorICAgKiAgICAgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRoZSBoaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBvdXRsaW5lLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0hpbnRzX0Z1bmNzUmVjXworICB7CisgICAgVDFfSGludHMgICAgICAgICAgICAgICBoaW50czsKKyAgICBUMV9IaW50c19PcGVuRnVuYyAgICAgIG9wZW47CisgICAgVDFfSGludHNfQ2xvc2VGdW5jICAgICBjbG9zZTsKKyAgICBUMV9IaW50c19TZXRTdGVtRnVuYyAgIHN0ZW07CisgICAgVDFfSGludHNfU2V0U3RlbTNGdW5jICBzdGVtMzsKKyAgICBUMV9IaW50c19SZXNldEZ1bmMgICAgIHJlc2V0OworICAgIFQxX0hpbnRzX0FwcGx5RnVuYyAgICAgYXBwbHk7CisKKyAgfSBUMV9IaW50c19GdW5jc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgIFBVQkxJQyBUWVBFIDIgSElOVFMgUkVDT1JERVIgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFQyX0hpbnRzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGlzIGEgaGFuZGxlIHRvIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUgdXNlZCB0byByZWNvcmQgZ2x5cGggaGludHMKKyAgICogICBmcm9tIGEgVHlwZSAyIGNoYXJhY3RlciBnbHlwaCBjaGFyYWN0ZXIgc3RyaW5nLgorICAgKgorICAgKiAgIFRoZSBtZXRob2RzIHVzZWQgdG8gb3BlcmF0ZSBvbiB0aGlzIG9iamVjdCBhcmUgZGVmaW5lZCBieSB0aGUKKyAgICogICBAVDJfSGludHNfRnVuY3NSZWMgc3RydWN0dXJlLiAgUmVjb3JkaW5nIGdseXBoIGhpbnRzIGlzIG5vcm1hbGx5CisgICAqICAgYWNoaWV2ZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHNjaGVtZToKKyAgICoKKyAgICogICAtIE9wZW4gYSBuZXcgaGludCByZWNvcmRpbmcgc2Vzc2lvbiBieSBjYWxsaW5nIHRoZSBgb3BlbicgbWV0aG9kLgorICAgKiAgICAgVGhpcyByZXdpbmRzIHRoZSByZWNvcmRlciBhbmQgcHJlcGFyZSBpdCBmb3IgbmV3IGlucHV0LgorICAgKgorICAgKiAgIC0gRm9yIGVhY2ggaGludCBmb3VuZCBpbiB0aGUgZ2x5cGggY2hhcnN0cmluZywgY2FsbCB0aGUgY29ycmVzcG9uZGluZworICAgKiAgICAgbWV0aG9kIChgc3RlbXMnLCBgaGludG1hc2snLCBgY291bnRlcnMnKS4gIE5vdGUgdGhhdCB0aGVzZQorICAgKiAgICAgZnVuY3Rpb25zIGRvIG5vdCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKyAgICoKKyAgICogICAtIENsb3NlIHRoZSByZWNvcmRpbmcgc2Vzc2lvbiBieSBjYWxsaW5nIHRoZSBgY2xvc2UnIG1ldGhvZC4gIEl0CisgICAqICAgICByZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhlIGhpbnRzIHdlcmUgaW52YWxpZCBvciBzb21ldGhpbmcKKyAgICogICAgIHN0cmFuZ2UgaGFwcGVuZWQgKGUuZy4sIG1lbW9yeSBzaG9ydGFnZSkuCisgICAqCisgICAqICAgVGhlIGhpbnRzIGFjY3VtdWxhdGVkIGluIHRoZSBvYmplY3QgY2FuIGxhdGVyIGJlIHVzZWQgYnkgdGhlCisgICAqICAgUG9zdHNjcmlwdCBoaW50ZXIuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBUMl9IaW50c1JlY18qICBUMl9IaW50czsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFQyX0hpbnRzX0Z1bmNzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHBvaW50ZXIgdG8gdGhlIEBUMl9IaW50c19GdW5jc1JlYyBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHRoZSBBUEkgb2YKKyAgICogICBhIGdpdmVuIEBUMl9IaW50cyBvYmplY3QuCisgICAqCisgICAqLworICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBUMl9IaW50c19GdW5jc1JlY18qICBUMl9IaW50c19GdW5jczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMl9IaW50c19PcGVuRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtZXRob2Qgb2YgdGhlIEBUMl9IaW50cyBjbGFzcyB1c2VkIHRvIHByZXBhcmUgaXQgZm9yIGEgbmV3IFR5cGUgMgorICAgKiAgIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUeXBlIDIgaGludHMgcmVjb3JkZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFlvdSBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIEBUMl9IaW50c19DbG9zZUZ1bmMgbWV0aG9kIGluIG9yZGVyIHRvCisgICAqICAgY2xvc2UgYW4gb3BlbmVkIHJlY29yZGluZyBzZXNzaW9uLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVDJfSGludHNfT3BlbkZ1bmMpKCBUMl9IaW50cyAgaGludHMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMl9IaW50c19TdGVtc0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWV0aG9kIG9mIHRoZSBAVDJfSGludHMgY2xhc3MgdXNlZCB0byBzZXQgdGhlIHRhYmxlIG9mIHN0ZW1zIGluCisgICAqICAgZWl0aGVyIHRoZSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIGRpbWVuc2lvbi4gIEVxdWl2YWxlbnQgdG8gdGhlCisgICAqICAgYGhzdGVtJywgYHZzdGVtJywgYGhzdGVtaG0nLCBhbmQgYHZzdGVtaG0nIFR5cGUgMiBvcGVyYXRvcnMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBoaW50cyA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIFR5cGUgMiBoaW50cyByZWNvcmRlci4KKyAgICoKKyAgICogICBkaW1lbnNpb24gOjoKKyAgICogICAgIDAgZm9yIGhvcml6b250YWwgc3RlbXMgKGhzdGVtKSwgMSBmb3IgdmVydGljYWwgb25lcyAodnN0ZW0pLgorICAgKgorICAgKiAgIGNvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHN0ZW1zLgorICAgKgorICAgKiAgIGNvb3JkcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgYGNvdW50JyAocG9zaXRpb24sbGVuZ3RoKSBwYWlycyBpbiAxNi4xNiBmb3JtYXQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFVzZSB2ZXJ0aWNhbCBjb29yZGluYXRlcyAoeSkgZm9yIGhvcml6b250YWwgc3RlbXMgKGRpbT0wKS4gIFVzZQorICAgKiAgIGhvcml6b250YWwgY29vcmRpbmF0ZXMgKHgpIGZvciB2ZXJ0aWNhbCBzdGVtcyAoZGltPTEpLgorICAgKgorICAgKiAgIFRoZXJlIGFyZSBgMipjb3VudCcgZWxlbWVudHMgaW4gdGhlIGBjb29yZHMnIGFycmF5LiAgRWFjaCBldmVuCisgICAqICAgZWxlbWVudCBpcyBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBpbiBmb250IHVuaXRzLCBlYWNoIG9kZCBlbGVtZW50IGlzIGEKKyAgICogICBsZW5ndGggaW4gZm9udCB1bml0cy4KKyAgICoKKyAgICogICBBIGxlbmd0aCBjYW4gYmUgbmVnYXRpdmUsIGluIHdoaWNoIGNhc2UgaXQgbXVzdCBiZSBlaXRoZXIgLTIwIG9yCisgICAqICAgLTIxLiAgSXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBgZ2hvc3QnIHN0ZW0sIGFjY29yZGluZyB0byB0aGUgVHlwZSAxCisgICAqICAgc3BlY2lmaWNhdGlvbi4KKyAgICoKKyAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKlQyX0hpbnRzX1N0ZW1zRnVuYykoIFQyX0hpbnRzICAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkaW5hdGVzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVDJfSGludHNfTWFza0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWV0aG9kIG9mIHRoZSBAVDJfSGludHMgY2xhc3MgdXNlZCB0byBzZXQgYSBnaXZlbiBoaW50bWFzayAodGhpcworICAgKiAgIGNvcnJlc3BvbmRzIHRvIHRoZSBgaGludG1hc2snIFR5cGUgMiBvcGVyYXRvcikuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBoaW50cyA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIFR5cGUgMiBoaW50cyByZWNvcmRlci4KKyAgICoKKyAgICogICBlbmRfcG9pbnQgOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleCBvZiB0aGUgbGFzdCBwb2ludCB0byB3aGljaCB0aGUgcHJldmlvdXNseSBkZWZpbmVkCisgICAqICAgICBvciBhY3RpdmF0ZWQgaGludHMgYXBwbHkuCisgICAqCisgICAqICAgYml0X2NvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGhpbnQgbWFzay4KKyAgICoKKyAgICogICBieXRlcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgYnl0ZXMgbW9kZWxsaW5nIHRoZSBoaW50IG1hc2suCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIElmIHRoZSBoaW50bWFzayBzdGFydHMgdGhlIGNoYXJzdHJpbmcgKGJlZm9yZSBhbnkgZ2x5cGggcG9pbnQKKyAgICogICBkZWZpbml0aW9uKSwgdGhlIHZhbHVlIG9mIGBlbmRfcG9pbnQnIHNob3VsZCBiZSAwLgorICAgKgorICAgKiAgIGBiaXRfY291bnQnIGlzIHRoZSBudW1iZXIgb2YgbWVhbmluZ2Z1bCBiaXRzIGluIHRoZSBgYnl0ZXMnIGFycmF5OyBpdAorICAgKiAgIG11c3QgYmUgZXF1YWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBoaW50cyBkZWZpbmVkIHNvIGZhciAoaS5lLiwKKyAgICogICBob3Jpem9udGFsK3ZlcnRpY2FscykuCisgICAqCisgICAqICAgVGhlIGBieXRlcycgYXJyYXkgY2FuIGNvbWUgZGlyZWN0bHkgZnJvbSB0aGUgVHlwZSAyIGNoYXJzdHJpbmcgYW5kCisgICAqICAgcmVzcGVjdHMgdGhlIHNhbWUgZm9ybWF0LgorICAgKgorICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVDJfSGludHNfTWFza0Z1bmMpKCBUMl9IaW50cyAgICAgICAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZW5kX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGJpdF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBieXRlcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFQyX0hpbnRzX0NvdW50ZXJGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1ldGhvZCBvZiB0aGUgQFQyX0hpbnRzIGNsYXNzIHVzZWQgdG8gc2V0IGEgZ2l2ZW4gY291bnRlciBtYXNrCisgICAqICAgKHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBoaW50bWFzaycgVHlwZSAyIG9wZXJhdG9yKS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhpbnRzIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgVHlwZSAyIGhpbnRzIHJlY29yZGVyLgorICAgKgorICAgKiAgIGVuZF9wb2ludCA6OgorICAgKiAgICAgQSBnbHlwaCBpbmRleCBvZiB0aGUgbGFzdCBwb2ludCB0byB3aGljaCB0aGUgcHJldmlvdXNseSBkZWZpbmVkIG9yCisgICAqICAgICBhY3RpdmUgaGludHMgYXBwbHkuCisgICAqCisgICAqICAgYml0X2NvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGhpbnQgbWFzay4KKyAgICoKKyAgICogICBieXRlcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgYnl0ZXMgbW9kZWxsaW5nIHRoZSBoaW50IG1hc2suCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIElmIHRoZSBoaW50bWFzayBzdGFydHMgdGhlIGNoYXJzdHJpbmcgKGJlZm9yZSBhbnkgZ2x5cGggcG9pbnQKKyAgICogICBkZWZpbml0aW9uKSwgdGhlIHZhbHVlIG9mIGBlbmRfcG9pbnQnIHNob3VsZCBiZSAwLgorICAgKgorICAgKiAgIGBiaXRfY291bnQnIGlzIHRoZSBudW1iZXIgb2YgbWVhbmluZ2Z1bCBiaXRzIGluIHRoZSBgYnl0ZXMnIGFycmF5OyBpdAorICAgKiAgIG11c3QgYmUgZXF1YWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBoaW50cyBkZWZpbmVkIHNvIGZhciAoaS5lLiwKKyAgICogICBob3Jpem9udGFsK3ZlcnRpY2FscykuCisgICAqCisgICAqICAgIFRoZSBgYnl0ZXMnIGFycmF5IGNhbiBjb21lIGRpcmVjdGx5IGZyb20gdGhlIFR5cGUgMiBjaGFyc3RyaW5nIGFuZAorICAgKiAgICByZXNwZWN0cyB0aGUgc2FtZSBmb3JtYXQuCisgICAqCisgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpUMl9IaW50c19Db3VudGVyRnVuYykoIFQyX0hpbnRzICAgICAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBiaXRfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgYnl0ZXMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMl9IaW50c19DbG9zZUZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWV0aG9kIG9mIHRoZSBAVDJfSGludHMgY2xhc3MgdXNlZCB0byBjbG9zZSBhIGhpbnQgcmVjb3JkaW5nCisgICAqICAgc2Vzc2lvbi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhpbnRzIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgVHlwZSAyIGhpbnRzIHJlY29yZGVyLgorICAgKgorICAgKiAgIGVuZF9wb2ludCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBsYXN0IHBvaW50IGluIHRoZSBpbnB1dCBnbHlwaC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgZXJyb3IgY29kZSBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlCisgICAqICAgcmVjb3JkaW5nIHNlc3Npb24uCisgICAqCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVDJfSGludHNfQ2xvc2VGdW5jKSggVDJfSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBlbmRfcG9pbnQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUMl9IaW50c19BcHBseUZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWV0aG9kIG9mIHRoZSBAVDJfSGludHMgY2xhc3MgdXNlZCB0byBhcHBseSBoaW50cyB0byB0aGUKKyAgICogICBjb3JyZXNwb25kaW5nIGdseXBoIG91dGxpbmUuICBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYGNsb3NlJworICAgKiAgIG1ldGhvZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhpbnRzIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgVHlwZSAyIGhpbnRzIHJlY29yZGVyLgorICAgKgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogICBnbG9iYWxzIDo6CisgICAqICAgICBUaGUgaGludGVyIGdsb2JhbHMgZm9yIHRoaXMgZm9udC4KKyAgICoKKyAgICogICBoaW50X21vZGUgOjoKKyAgICogICAgIEhpbnRpbmcgaW5mb3JtYXRpb24uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgT24gaW5wdXQsIGFsbCBwb2ludHMgd2l0aGluIHRoZSBvdXRsaW5lIGFyZSBpbiBmb250IGNvb3JkaW5hdGVzLiBPbgorICAgKiAgIG91dHB1dCwgdGhleSBhcmUgaW4gMS82NHRoIG9mIHBpeGVscy4KKyAgICoKKyAgICogICBUaGUgc2NhbGluZyB0cmFuc2Zvcm1hdGlvbiBpcyB0YWtlbiBmcm9tIHRoZSBgZ2xvYmFscycgb2JqZWN0IHdoaWNoCisgICAqICAgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvbnQgdGhhbiB0aGUgZ2x5cGguCisgICAqCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVDJfSGludHNfQXBwbHlGdW5jKSggVDJfSGludHMgICAgICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzICAgICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBoaW50X21vZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVDJfSGludHNfRnVuY3NSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwcm92aWRlIHRoZSBBUEkgdG8gQFQyX0hpbnRzIG9iamVjdHMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgaGludHMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBUMiBoaW50cyByZWNvcmRlciBvYmplY3QuCisgICAqCisgICAqICAgb3BlbiA6OgorICAgKiAgICAgVGhlIGZ1bmN0aW9uIHRvIG9wZW4gYSByZWNvcmRpbmcgc2Vzc2lvbi4KKyAgICoKKyAgICogICBjbG9zZSA6OgorICAgKiAgICAgVGhlIGZ1bmN0aW9uIHRvIGNsb3NlIGEgcmVjb3JkaW5nIHNlc3Npb24uCisgICAqCisgICAqICAgc3RlbXMgOjoKKyAgICogICAgIFRoZSBmdW5jdGlvbiB0byBzZXQgdGhlIGRpbWVuc2lvbidzIHN0ZW1zIHRhYmxlLgorICAgKgorICAgKiAgIGhpbnRtYXNrIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gc2V0IGhpbnQgbWFza3MuCisgICAqCisgICAqICAgY291bnRlciA6OgorICAgKiAgICAgVGhlIGZ1bmN0aW9uIHRvIHNldCBjb3VudGVyIG1hc2tzLgorICAgKgorICAgKiAgIGFwcGx5IDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgdGhlIGhpbnRzIG9uIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIG91dGxpbmUuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVDJfSGludHNfRnVuY3NSZWNfCisgIHsKKyAgICBUMl9IaW50cyAgICAgICAgICAgICAgaGludHM7CisgICAgVDJfSGludHNfT3BlbkZ1bmMgICAgIG9wZW47CisgICAgVDJfSGludHNfQ2xvc2VGdW5jICAgIGNsb3NlOworICAgIFQyX0hpbnRzX1N0ZW1zRnVuYyAgICBzdGVtczsKKyAgICBUMl9IaW50c19NYXNrRnVuYyAgICAgaGludG1hc2s7CisgICAgVDJfSGludHNfQ291bnRlckZ1bmMgIGNvdW50ZXI7CisgICAgVDJfSGludHNfQXBwbHlGdW5jICAgIGFwcGx5OworCisgIH0gVDJfSGludHNfRnVuY3NSZWM7CisKKworICAvKiAqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSGludGVyX0ludGVyZmFjZV8KKyAgeworICAgIFBTSF9HbG9iYWxzX0Z1bmNzICAoKmdldF9nbG9iYWxzX2Z1bmNzKSggRlRfTW9kdWxlICBtb2R1bGUgKTsKKyAgICBUMV9IaW50c19GdW5jcyAgICAgKCpnZXRfdDFfZnVuY3MpICAgICAoIEZUX01vZHVsZSAgbW9kdWxlICk7CisgICAgVDJfSGludHNfRnVuY3MgICAgICgqZ2V0X3QyX2Z1bmNzKSAgICAgKCBGVF9Nb2R1bGUgIG1vZHVsZSApOworCisgIH0gUFNIaW50ZXJfSW50ZXJmYWNlOworCisgIHR5cGVkZWYgUFNIaW50ZXJfSW50ZXJmYWNlKiAgUFNIaW50ZXJfU2VydmljZTsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1BTSElOVEVSX0lOVEVSRkFDRSggICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfZ2xvYmFsc19mdW5jc18sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfdDFfZnVuY3NfLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfdDJfZnVuY3NfICkgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IFBTSGludGVyX0ludGVyZmFjZSAgY2xhc3NfID0gIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfZ2xvYmFsc19mdW5jc18sICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfdDFfZnVuY3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfdDJfZnVuY3NfICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfUFNISU5URVJfSU5URVJGQUNFKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfZ2xvYmFsc19mdW5jc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF90MV9mdW5jc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X3QyX2Z1bmNzXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNIaW50ZXJfSW50ZXJmYWNlKiAgY2xhenogKSAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X2dsb2JhbHNfZnVuY3MgPSBnZXRfZ2xvYmFsc19mdW5jc187ICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfdDFfZnVuY3MgICAgICA9IGdldF90MV9mdW5jc187ICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF90Ml9mdW5jcyAgICAgID0gZ2V0X3QyX2Z1bmNzXzsgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QU0hJTlRTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1YjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3ZiZGYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBCREYgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU1ZCREZfSF9fCisjZGVmaW5lIF9fU1ZCREZfSF9fCisKKyNpbmNsdWRlIEZUX0JERl9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfQkRGICAiYmRmIgorCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9CREZfR2V0Q2hhcnNldElkRnVuYykoIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKmFjaGFyc2V0X3JlZ2lzdHJ5ICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0JERl9HZXRQcm9wZXJ0eUZ1bmMpKCBGVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgICBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJERl9Qcm9wZXJ0eVJlYyAgKmFwcm9wZXJ0eSApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIEJERiApCisgIHsKKyAgICBGVF9CREZfR2V0Q2hhcnNldElkRnVuYyAgZ2V0X2NoYXJzZXRfaWQ7CisgICAgRlRfQkRGX0dldFByb3BlcnR5RnVuYyAgIGdldF9wcm9wZXJ0eTsKKyAgfTsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQkRGUmVjKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NoYXJzZXRfaWRfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9wcm9wZXJ0eV8gKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfQkRGUmVjICBjbGFzc18gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9jaGFyc2V0X2lkXywgZ2V0X3Byb3BlcnR5XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9CREZSZWMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY2hhcnNldF9pZF8sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Byb3BlcnR5XyApICAgICAgICAgICAgICAgICAgICAgICAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9TZXJ2aWNlX0JERlJlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfY2hhcnNldF9pZCA9IGdldF9jaGFyc2V0X2lkXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X3Byb3BlcnR5ICAgPSBnZXRfcHJvcGVydHlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZCREZfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTUzNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdmNpZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIENJRCBmb250IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TVkNJRF9IX18KKyNkZWZpbmUgX19TVkNJRF9IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX0NJRCAgIkNJRCIKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfQ0lEX0dldFJlZ2lzdHJ5T3JkZXJpbmdTdXBwbGVtZW50RnVuYykoIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpvcmRlcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpzdXBwbGVtZW50ICk7CisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9DSURfR2V0SXNJbnRlcm5hbGx5Q0lES2V5ZWRGdW5jKSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICppc19jaWQgKTsKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0NJRF9HZXRDSURGcm9tR2x5cGhJbmRleEZ1bmMpKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAqY2lkICk7CisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIENJRCApCisgIHsKKyAgICBGVF9DSURfR2V0UmVnaXN0cnlPcmRlcmluZ1N1cHBsZW1lbnRGdW5jICBnZXRfcm9zOworICAgIEZUX0NJRF9HZXRJc0ludGVybmFsbHlDSURLZXllZEZ1bmMgICAgICAgIGdldF9pc19jaWQ7CisgICAgRlRfQ0lEX0dldENJREZyb21HbHlwaEluZGV4RnVuYyAgICAgICAgICAgZ2V0X2NpZF9mcm9tX2dseXBoX2luZGV4OworICB9OworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9DSURSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcm9zXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2lzX2NpZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9jaWRfZnJvbV9nbHlwaF9pbmRleF8gKSAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfQ0lEUmVjIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9yb3NfLCBnZXRfaXNfY2lkXywgZ2V0X2NpZF9mcm9tX2dseXBoX2luZGV4XyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9DSURSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcm9zXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2lzX2NpZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9jaWRfZnJvbV9nbHlwaF9pbmRleF8gKSAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfQ0lEUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X3JvcyAgICAgICAgICAgICAgICAgID0gZ2V0X3Jvc187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9pc19jaWQgICAgICAgICAgICAgICA9IGdldF9pc19jaWRfOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXggPSBnZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXhfOyAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19TVkNJRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjM2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2Zm50Zm10LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgZm9udCBmb3JtYXQgc2VydmljZSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWRk5URk1UX0hfXworI2RlZmluZSBfX1NWRk5URk1UX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qCisgICAqICBBIHRyaXZpYWwgc2VydmljZSB1c2VkIHRvIHJldHVybiB0aGUgbmFtZSBvZiBhIGZhY2UncyBmb250IGRyaXZlciwKKyAgICogIGFjY29yZGluZyB0byB0aGUgWEZyZWU4NiBub21lbmNsYXR1cmUuICBOb3RlIHRoYXQgdGhlIHNlcnZpY2UgZGF0YQorICAgKiAgaXMgYSBzaW1wbGUgY29uc3RhbnQgc3RyaW5nIHBvaW50ZXIuCisgICAqLworCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQgICJmb250LWZvcm1hdCIKKworI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9UUlVFVFlQRSAgIlRydWVUeXBlIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9UWVBFXzEgICAgIlR5cGUgMSIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfQkRGICAgICAgICJCREYiCisjZGVmaW5lIEZUX0ZPTlRfRk9STUFUX1BDRiAgICAgICAiUENGIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9UWVBFXzQyICAgIlR5cGUgNDIiCisjZGVmaW5lIEZUX0ZPTlRfRk9STUFUX0NJRCAgICAgICAiQ0lEIFR5cGUgMSIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfQ0ZGICAgICAgICJDRkYiCisjZGVmaW5lIEZUX0ZPTlRfRk9STUFUX1BGUiAgICAgICAiUEZSIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9XSU5GTlQgICAgIldpbmRvd3MgRk5UIgorCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1NWRk5URk1UX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4YmNhNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3ZnbGRpY3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBkaWN0aW9uYXJ5IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU1ZHTERJQ1RfSF9fCisjZGVmaW5lIF9fU1ZHTERJQ1RfSF9fCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoKKyAgICogIEEgc2VydmljZSB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzLCBhcyB3ZWxsIGFzIHRvIGZpbmQgdGhlCisgICAqICBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUgaW4gYSBmb250LgorICAgKgorICAgKi8KKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX0dMWVBIX0RJQ1QgICJnbHlwaC1kaWN0IgorCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX0dseXBoRGljdF9HZXROYW1lRnVuYykoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKTsKKworICB0eXBlZGVmIEZUX1VJbnQKKyAgKCpGVF9HbHlwaERpY3RfTmFtZUluZGV4RnVuYykoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICBnbHlwaF9uYW1lICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggR2x5cGhEaWN0ICkKKyAgeworICAgIEZUX0dseXBoRGljdF9HZXROYW1lRnVuYyAgICBnZXRfbmFtZTsKKyAgICBGVF9HbHlwaERpY3RfTmFtZUluZGV4RnVuYyAgbmFtZV9pbmRleDsgIC8qIG9wdGlvbmFsICovCisgIH07CisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX0dMWVBIRElDVFJFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbmFtZV8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfaW5kZXhfKSAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyAgY2xhc3NfID0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9uYW1lXywgbmFtZV9pbmRleF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfR0xZUEhESUNUUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleF8pICAgICAgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgbGlicmFyeSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9HbHlwaERpY3RSZWMqICBjbGF6eiApICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X25hbWUgICA9IGdldF9uYW1lXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5uYW1lX2luZGV4ID0gbmFtZV9pbmRleF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZHTERJQ1RfSF9fICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljYzNiNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaApAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdmd4dmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU1ZHWFZBTF9IX18KKyNkZWZpbmUgX19TVkdYVkFMX0hfXworCisjaW5jbHVkZSBGVF9HWF9WQUxJREFURV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9HWF9WQUxJREFURSAgICAgICAgICAgInRydWV0eXBlZ3gtdmFsaWRhdGUiCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfQ0xBU1NJQ0tFUk5fVkFMSURBVEUgICJjbGFzc2lja2Vybi12YWxpZGF0ZSIKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqZ3h2X3ZhbGlkYXRlX2Z1bmMpKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBneF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICB0YWJsZXNbRlRfVkFMSURBVEVfR1hfTEVOR1RIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICB0YWJsZV9sZW5ndGggKTsKKworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpja2Vybl92YWxpZGF0ZV9mdW5jKSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBja2Vybl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpja2Vybl90YWJsZSApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIEdYdmFsaWRhdGUgKQorICB7CisgICAgZ3h2X3ZhbGlkYXRlX2Z1bmMgIHZhbGlkYXRlOworICB9OworCisgIEZUX0RFRklORV9TRVJWSUNFKCBDS0VSTnZhbGlkYXRlICkKKyAgeworICAgIGNrZXJuX3ZhbGlkYXRlX2Z1bmMgIHZhbGlkYXRlOworICB9OworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1NWR1hWQUxfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjZmMTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdmtlcm4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIEtlcm5pbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TVktFUk5fSF9fCisjZGVmaW5lIF9fU1ZLRVJOX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9LRVJOSU5HICAia2VybmluZyIKKworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9LZXJuaW5nX1RyYWNrR2V0RnVuYykoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgcG9pbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgZGVncmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBha2VybmluZyApOworCisgIEZUX0RFRklORV9TRVJWSUNFKCBLZXJuaW5nICkKKyAgeworICAgIEZUX0tlcm5pbmdfVHJhY2tHZXRGdW5jICBnZXRfdHJhY2s7CisgIH07CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZLRVJOX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyY2VjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2bW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVycyBhbmQgR1ggdmFyIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWTU1fSF9fCisjZGVmaW5lIF9fU1ZNTV9IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKgorICAgKiAgQSBzZXJ2aWNlIHVzZWQgdG8gbWFuYWdlIG11bHRpcGxlLW1hc3RlcnMgZGF0YSBpbiBhIGdpdmVuIGZhY2UuCisgICAqCisgICAqICBTZWUgdGhlIHJlbGF0ZWQgQVBJcyBpbiBgZnRtbS5oJyAoRlRfTVVMVElQTEVfTUFTVEVSU19IKS4KKyAgICoKKyAgICovCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTICAibXVsdGktbWFzdGVycyIKKworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9HZXRfTU1fRnVuYykoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9NdWx0aV9NYXN0ZXIqICBtYXN0ZXIgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfR2V0X01NX1Zhcl9GdW5jKSggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKm1hc3RlciApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9TZXRfTU1fRGVzaWduX0Z1bmMpKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgY29vcmRzICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1NldF9WYXJfRGVzaWduX0Z1bmMpKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2V0X01NX0JsZW5kX0Z1bmMpKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIE11bHRpTWFzdGVycyApCisgIHsKKyAgICBGVF9HZXRfTU1fRnVuYyAgICAgICAgICBnZXRfbW07CisgICAgRlRfU2V0X01NX0Rlc2lnbl9GdW5jICAgc2V0X21tX2Rlc2lnbjsKKyAgICBGVF9TZXRfTU1fQmxlbmRfRnVuYyAgICBzZXRfbW1fYmxlbmQ7CisgICAgRlRfR2V0X01NX1Zhcl9GdW5jICAgICAgZ2V0X21tX3ZhcjsKKyAgICBGVF9TZXRfVmFyX0Rlc2lnbl9GdW5jICBzZXRfdmFyX2Rlc2lnbjsKKyAgfTsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfTVVMVElNQVNURVJTUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X21tXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9tbV9kZXNpZ25fLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbW1fYmxlbmRfLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X21tX3Zhcl8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF92YXJfZGVzaWduXyApICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjICBjbGFzc18gPSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9tbV8sIHNldF9tbV9kZXNpZ25fLCBzZXRfbW1fYmxlbmRfLCBnZXRfbW1fdmFyXywgc2V0X3Zhcl9kZXNpZ25fICAgIFwKKyAgfTsKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9NVUxUSU1BU1RFUlNSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X21tX2Rlc2lnbl8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9tbV9ibGVuZF8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fdmFyXywgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3Zhcl9kZXNpZ25fICkgICAgICAgICAgICAgICAgXAorICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9TZXJ2aWNlX011bHRpTWFzdGVyc1JlYyogIGNsYXp6ICkgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfbW0gICAgICAgICA9IGdldF9tbV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2V0X21tX2Rlc2lnbiAgPSBzZXRfbW1fZGVzaWduXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnNldF9tbV9ibGVuZCAgID0gc2V0X21tX2JsZW5kXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfbW1fdmFyICAgICA9IGdldF9tbV92YXJfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2V0X3Zhcl9kZXNpZ24gPSBzZXRfdmFyX2Rlc2lnbl87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1NWTU1fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyYTY0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdm90dmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIE9wZW5UeXBlIHZhbGlkYXRpb24gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TVk9UVkFMX0hfXworI2RlZmluZSBfX1NWT1RWQUxfSF9fCisKKyNpbmNsdWRlIEZUX09QRU5UWVBFX1ZBTElEQVRFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX09QRU5UWVBFX1ZBTElEQVRFICAib3BlbnR5cGUtdmFsaWRhdGUiCisKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqb3R2X3ZhbGlkYXRlX2Z1bmMpKCBGVF9GYWNlIHZvbGF0aWxlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgb3RfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICAgICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgICAqZ2RlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgKmdwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICAgICpnc3ViLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgICAqanN0ZiApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIE9UdmFsaWRhdGUgKQorICB7CisgICAgb3R2X3ZhbGlkYXRlX2Z1bmMgIHZhbGlkYXRlOworICB9OworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1NWT1RWQUxfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGViMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaApAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdnBmci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TVlBGUl9IX18KKyNkZWZpbmUgX19TVlBGUl9IX18KKworI2luY2x1ZGUgRlRfUEZSX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9QRlJfTUVUUklDUyAgInBmci1tZXRyaWNzIgorCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1BGUl9HZXRNZXRyaWNzRnVuYykoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmFvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYW1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICpheF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgKmF5X3NjYWxlICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1BGUl9HZXRLZXJuaW5nRnVuYykoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICphdmVjdG9yICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1BGUl9HZXRBZHZhbmNlRnVuYykoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgKmFhZHZhbmNlICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggUGZyTWV0cmljcyApCisgIHsKKyAgICBGVF9QRlJfR2V0TWV0cmljc0Z1bmMgIGdldF9tZXRyaWNzOworICAgIEZUX1BGUl9HZXRLZXJuaW5nRnVuYyAgZ2V0X2tlcm5pbmc7CisgICAgRlRfUEZSX0dldEFkdmFuY2VGdW5jICBnZXRfYWR2YW5jZTsKKworICB9OworCisgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19TVlBGUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWY3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2cG9zdG5tLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBuYW1lIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWUE9TVE5NX0hfXworI2RlZmluZSBfX1NWUE9TVE5NX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworICAvKgorICAgKiAgQSB0cml2aWFsIHNlcnZpY2UgdXNlZCB0byByZXRyaWV2ZSB0aGUgUG9zdFNjcmlwdCBuYW1lIG9mIGEgZ2l2ZW4KKyAgICogIGZvbnQgd2hlbiBhdmFpbGFibGUuICBUaGUgYGdldF9uYW1lJyBmaWVsZCBzaG91bGQgbmV2ZXIgYmUgTlVMTC4KKyAgICoKKyAgICogIFRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgKiAgUG9zdFNjcmlwdCBuYW1lIGlzIG5vdCBhdmFpbGFibGUuCisgICAqCisgICAqICBUaGUgbmFtZSBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgd2lsbCBiZSBkZXN0cm95ZWQgd2l0aCBpdC4KKyAgICovCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSAgInBvc3RzY3JpcHQtZm9udC1uYW1lIgorCisKKyAgdHlwZWRlZiBjb25zdCBjaGFyKgorICAoKkZUX1BzTmFtZV9HZXRGdW5jKSggRlRfRmFjZSAgZmFjZSApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIFBzRm9udE5hbWUgKQorICB7CisgICAgRlRfUHNOYW1lX0dldEZ1bmMgIGdldF9wc19mb250X25hbWU7CisgIH07CisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1BTRk9OVE5BTUVSRUMoIGNsYXNzXywgZ2V0X3BzX2ZvbnRfbmFtZV8gKSBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1BzRm9udE5hbWVSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2V0X3BzX2ZvbnRfbmFtZV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFNGT05UTkFNRVJFQyggY2xhc3NfLCBnZXRfcHNfZm9udF9uYW1lXyApIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICBsaWJyYXJ5LCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX1BzRm9udE5hbWVSZWMqICBjbGF6eiApICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X3BzX2ZvbnRfbmFtZSA9IGdldF9wc19mb250X25hbWVfOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19TVlBPU1ROTV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmMDdjZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2cHJvcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcHJvcGVydHkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWUFJPUF9IX18KKyNkZWZpbmUgX19TVlBST1BfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMgICJwcm9wZXJ0aWVzIgorCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1Byb3BlcnRpZXNfU2V0RnVuYykoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1Byb3BlcnRpZXNfR2V0RnVuYykoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIHZhbHVlICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggUHJvcGVydGllcyApCisgIHsKKyAgICBGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMgIHNldF9wcm9wZXJ0eTsKKyAgICBGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMgIGdldF9wcm9wZXJ0eTsKKyAgfTsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQyggY2xhc3NfLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcm9wZXJ0eV8sICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcHJvcGVydHlfICkgIFwKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfUHJvcGVydGllc1JlYyAgY2xhc3NfID0gICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNldF9wcm9wZXJ0eV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfcHJvcGVydHlfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQyggY2xhc3NfLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcm9wZXJ0eV8sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcHJvcGVydHlfICkgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfU2VydmljZV9Qcm9wZXJ0aWVzUmVjKiAgY2xhenogKSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2V0X3Byb3BlcnR5ID0gc2V0X3Byb3BlcnR5XzsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9wcm9wZXJ0eSA9IGdldF9wcm9wZXJ0eV87ICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1NWUFJPUF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZGE2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCkBAIC0wLDAgKzEsMTc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdnBzY21hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgY2hhcm1hcCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TVlBTQ01BUF9IX18KKyNkZWZpbmUgX19TVlBTQ01BUF9IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfQ01BUFMgICJwb3N0c2NyaXB0LWNtYXBzIgorCisKKyAgLyoKKyAgICogIEFkb2JlIGdseXBoIG5hbWUgdG8gdW5pY29kZSB2YWx1ZS4KKyAgICovCisgIHR5cGVkZWYgRlRfVUludDMyCisgICgqUFNfVW5pY29kZV9WYWx1ZUZ1bmMpKCBjb25zdCBjaGFyKiAgZ2x5cGhfbmFtZSApOworCisgIC8qCisgICAqICBNYWNpbnRvc2ggbmFtZSBpZCB0byBnbHlwaCBuYW1lLiAgTlVMTCBpZiBpbnZhbGlkIGluZGV4LgorICAgKi8KKyAgdHlwZWRlZiBjb25zdCBjaGFyKgorICAoKlBTX01hY2ludG9zaF9OYW1lRnVuYykoIEZUX1VJbnQgIG5hbWVfaW5kZXggKTsKKworICAvKgorICAgKiAgQWRvYmUgc3RhbmRhcmQgc3RyaW5nIElEIHRvIGdseXBoIG5hbWUuICBOVUxMIGlmIGludmFsaWQgaW5kZXguCisgICAqLworICB0eXBlZGVmIGNvbnN0IGNoYXIqCisgICgqUFNfQWRvYmVfU3RkX1N0cmluZ3NGdW5jKSggRlRfVUludCAgc3RyaW5nX2luZGV4ICk7CisKKworICAvKgorICAgKiAgU2ltcGxlIHVuaWNvZGUgLT4gZ2x5cGggaW5kZXggY2hhcm1hcCBidWlsdCBmcm9tIGZvbnQgZ2x5cGggbmFtZXMKKyAgICogIHRhYmxlLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX1VuaU1hcF8KKyAgeworICAgIEZUX1VJbnQzMiAgdW5pY29kZTsgICAgICAvKiBiaXQgMzEgc2V0OiBpcyBnbHlwaCB2YXJpYW50ICovCisgICAgRlRfVUludCAgICBnbHlwaF9pbmRleDsKKworICB9IFBTX1VuaU1hcDsKKworCisgIHR5cGVkZWYgc3RydWN0IFBTX1VuaWNvZGVzUmVjXyogIFBTX1VuaWNvZGVzOworCisgIHR5cGVkZWYgc3RydWN0ICBQU19Vbmljb2Rlc1JlY18KKyAgeworICAgIEZUX0NNYXBSZWMgIGNtYXA7CisgICAgRlRfVUludCAgICAgbnVtX21hcHM7CisgICAgUFNfVW5pTWFwKiAgbWFwczsKKworICB9IFBTX1VuaWNvZGVzUmVjOworCisKKyAgLyoKKyAgICogIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIGdseXBoIG5hbWUgZm9yIGEgZ2l2ZW4gaW5kZXguICBSZXR1cm5zCisgICAqICBOVUxMIGlmIGludmFsaWQgaW5kZXguCisgICAqLworICB0eXBlZGVmIGNvbnN0IGNoYXIqCisgICgqUFNfR2V0R2x5cGhOYW1lRnVuYykoIEZUX1BvaW50ZXIgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHN0cmluZ19pbmRleCApOworCisgIC8qCisgICAqICBBIGZ1bmN0aW9uIHVzZWQgdG8gcmVsZWFzZSB0aGUgZ2x5cGggbmFtZSByZXR1cm5lZCBieQorICAgKiAgUFNfR2V0R2x5cGhOYW1lRnVuYywgd2hlbiBuZWVkZWQKKyAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKlBTX0ZyZWVHbHlwaE5hbWVGdW5jKSggRlRfUG9pbnRlciAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBuYW1lICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlBTX1VuaWNvZGVzX0luaXRGdW5jKSggRlRfTWVtb3J5ICAgICAgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTX1VuaWNvZGVzICAgICAgICAgICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgICBudW1fZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfR2V0R2x5cGhOYW1lRnVuYyAgIGdldF9nbHlwaF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfRnJlZUdseXBoTmFtZUZ1bmMgIGZyZWVfZ2x5cGhfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgICBnbHlwaF9kYXRhICk7CisKKyAgdHlwZWRlZiBGVF9VSW50CisgICgqUFNfVW5pY29kZXNfQ2hhckluZGV4RnVuYykoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHVuaWNvZGUgKTsKKworICB0eXBlZGVmIEZUX1VJbnQzMgorICAoKlBTX1VuaWNvZGVzX0NoYXJOZXh0RnVuYykoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAqdW5pY29kZSApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIFBzQ01hcHMgKQorICB7CisgICAgUFNfVW5pY29kZV9WYWx1ZUZ1bmMgICAgICAgdW5pY29kZV92YWx1ZTsKKworICAgIFBTX1VuaWNvZGVzX0luaXRGdW5jICAgICAgIHVuaWNvZGVzX2luaXQ7CisgICAgUFNfVW5pY29kZXNfQ2hhckluZGV4RnVuYyAgdW5pY29kZXNfY2hhcl9pbmRleDsKKyAgICBQU19Vbmljb2Rlc19DaGFyTmV4dEZ1bmMgICB1bmljb2Rlc19jaGFyX25leHQ7CisKKyAgICBQU19NYWNpbnRvc2hfTmFtZUZ1bmMgICAgICBtYWNpbnRvc2hfbmFtZTsKKyAgICBQU19BZG9iZV9TdGRfU3RyaW5nc0Z1bmMgICBhZG9iZV9zdGRfc3RyaW5nczsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogICAgICBhZG9iZV9zdGRfZW5jb2Rpbmc7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQqICAgICAgYWRvYmVfZXhwZXJ0X2VuY29kaW5nOworICB9OworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9QU0NNQVBTUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZV92YWx1ZV8sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVzX2luaXRfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2Rlc19jaGFyX2luZGV4XywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXNfY2hhcl9uZXh0XywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2ludG9zaF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG9iZV9zdGRfc3RyaW5nc18sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRvYmVfc3RkX2VuY29kaW5nXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkb2JlX2V4cGVydF9lbmNvZGluZ18gKSAgICAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9Qc0NNYXBzUmVjICBjbGFzc18gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5pY29kZV92YWx1ZV8sIHVuaWNvZGVzX2luaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuaWNvZGVzX2NoYXJfaW5kZXhfLCB1bmljb2Rlc19jaGFyX25leHRfLCBtYWNpbnRvc2hfbmFtZV8sICAgICAgICAgICAgIFwKKyAgICBhZG9iZV9zdGRfc3RyaW5nc18sIGFkb2JlX3N0ZF9lbmNvZGluZ18sIGFkb2JlX2V4cGVydF9lbmNvZGluZ18gICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFNDTUFQU1JFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfdmFsdWVfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2Rlc19pbml0XywgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXNfY2hhcl9pbmRleF8sICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVzX2NoYXJfbmV4dF8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNpbnRvc2hfbmFtZV8sICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRvYmVfc3RkX3N0cmluZ3NfLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkb2JlX3N0ZF9lbmNvZGluZ18sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG9iZV9leHBlcnRfZW5jb2RpbmdfICkgICAgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfUHNDTWFwc1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+dW5pY29kZV92YWx1ZSAgICAgICAgID0gdW5pY29kZV92YWx1ZV87ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPnVuaWNvZGVzX2luaXQgICAgICAgICA9IHVuaWNvZGVzX2luaXRfOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT51bmljb2Rlc19jaGFyX2luZGV4ICAgPSB1bmljb2Rlc19jaGFyX2luZGV4XzsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+dW5pY29kZXNfY2hhcl9uZXh0ICAgID0gdW5pY29kZXNfY2hhcl9uZXh0XzsgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPm1hY2ludG9zaF9uYW1lICAgICAgICA9IG1hY2ludG9zaF9uYW1lXzsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5hZG9iZV9zdGRfc3RyaW5ncyAgICAgPSBhZG9iZV9zdGRfc3RyaW5nc187ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+YWRvYmVfc3RkX2VuY29kaW5nICAgID0gYWRvYmVfc3RkX2VuY29kaW5nXzsgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmFkb2JlX2V4cGVydF9lbmNvZGluZyA9IGFkb2JlX2V4cGVydF9lbmNvZGluZ187ICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1NWUFNDTUFQX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyYTI2NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2cHNpbmZvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBpbmZvIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWUFNJTkZPX0hfXworI2RlZmluZSBfX1NWUFNJTkZPX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPICAicG9zdHNjcmlwdC1pbmZvIgorCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlBTX0dldEZvbnRJbmZvRnVuYykoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQU19Gb250SW5mb1JlYyogIGFmb250X2luZm8gKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqUFNfR2V0Rm9udEV4dHJhRnVuYykoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBTX0ZvbnRFeHRyYVJlYyogIGFmb250X2V4dHJhICk7CisKKyAgdHlwZWRlZiBGVF9JbnQKKyAgKCpQU19IYXNHbHlwaE5hbWVzRnVuYykoIEZUX0ZhY2UgIGZhY2UgKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqUFNfR2V0Rm9udFByaXZhdGVGdW5jKSggRlRfRmFjZSAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZVJlYyogIGFmb250X3ByaXZhdGUgKTsKKworICB0eXBlZGVmIEZUX0xvbmcKKyAgKCpQU19HZXRGb250VmFsdWVGdW5jKSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQU19EaWN0X0tleXMgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgdmFsdWVfbGVuICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggUHNJbmZvICkKKyAgeworICAgIFBTX0dldEZvbnRJbmZvRnVuYyAgICAgcHNfZ2V0X2ZvbnRfaW5mbzsKKyAgICBQU19HZXRGb250RXh0cmFGdW5jICAgIHBzX2dldF9mb250X2V4dHJhOworICAgIFBTX0hhc0dseXBoTmFtZXNGdW5jICAgcHNfaGFzX2dseXBoX25hbWVzOworICAgIFBTX0dldEZvbnRQcml2YXRlRnVuYyAgcHNfZ2V0X2ZvbnRfcHJpdmF0ZTsKKyAgICBQU19HZXRGb250VmFsdWVGdW5jICAgIHBzX2dldF9mb250X3ZhbHVlOworICB9OworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9QU0lORk9SRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ZvbnRfaW5mb18sICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc19nZXRfZm9udF9leHRyYV8sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19nbHlwaF9uYW1lc18sICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ZvbnRfcHJpdmF0ZV8sICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZm9udF92YWx1ZV8gKSAgICAgICAgICAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9Qc0luZm9SZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfZm9udF9pbmZvXywgcHNfZ2V0X2ZvbnRfZXh0cmFfLCBoYXNfZ2x5cGhfbmFtZXNfLCAgICAgICAgXAorICAgIGdldF9mb250X3ByaXZhdGVfLCBnZXRfZm9udF92YWx1ZV8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFNJTkZPUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9mb250X2luZm9fLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNfZ2V0X2ZvbnRfZXh0cmFfLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfZ2x5cGhfbmFtZXNfLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9mb250X3ByaXZhdGVfLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ZvbnRfdmFsdWVfICkgICAgICAgICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgICAgbGlicmFyeSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0luZm9SZWMqICBjbGF6eiApICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cHNfZ2V0X2ZvbnRfaW5mbyAgICA9IGdldF9mb250X2luZm9fOyAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5wc19nZXRfZm9udF9leHRyYSAgID0gcHNfZ2V0X2ZvbnRfZXh0cmFfOyAgICAgICAgICAgICBcCisgICAgY2xhenotPnBzX2hhc19nbHlwaF9uYW1lcyAgPSBoYXNfZ2x5cGhfbmFtZXNfOyAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+cHNfZ2V0X2ZvbnRfcHJpdmF0ZSA9IGdldF9mb250X3ByaXZhdGVfOyAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5wc19nZXRfZm9udF92YWx1ZSAgID0gZ2V0X2ZvbnRfdmFsdWVfOyAgICAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZQU0lORk9fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MmFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaApAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3ZzZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBTRk5UIHRhYmxlIGxvYWRpbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU1ZTRk5UX0hfXworI2RlZmluZSBfX1NWU0ZOVF9IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoKKyAgICogIFNGTlQgdGFibGUgbG9hZGluZyBzZXJ2aWNlLgorICAgKi8KKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUgICJzZm50LXRhYmxlIgorCisKKyAgLyoKKyAgICogVXNlZCB0byBpbXBsZW1lbnQgRlRfTG9hZF9TZm50X1RhYmxlKCkuCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU0ZOVF9UYWJsZUxvYWRGdW5jKSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CisKKyAgLyoKKyAgICogVXNlZCB0byBpbXBsZW1lbnQgRlRfR2V0X1NmbnRfVGFibGUoKS4KKyAgICovCisgIHR5cGVkZWYgdm9pZCoKKyAgKCpGVF9TRk5UX1RhYmxlR2V0RnVuYykoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2ZudF9UYWcgIHRhZyApOworCisKKyAgLyoKKyAgICogVXNlZCB0byBpbXBsZW1lbnQgRlRfU2ZudF9UYWJsZV9JbmZvKCkuCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU0ZOVF9UYWJsZUluZm9GdW5jKSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqbGVuZ3RoICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggU0ZOVF9UYWJsZSApCisgIHsKKyAgICBGVF9TRk5UX1RhYmxlTG9hZEZ1bmMgIGxvYWRfdGFibGU7CisgICAgRlRfU0ZOVF9UYWJsZUdldEZ1bmMgICBnZXRfdGFibGU7CisgICAgRlRfU0ZOVF9UYWJsZUluZm9GdW5jICB0YWJsZV9pbmZvOworICB9OworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9TRk5UX1RBQkxFUkVDKCBjbGFzc18sIGxvYWRfLCBnZXRfLCBpbmZvXyApICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1NGTlRfVGFibGVSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfLCBnZXRfLCBpbmZvXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfU0ZOVF9UQUJMRVJFQyggY2xhc3NfLCBsb2FkXywgZ2V0XywgaW5mb18gKSBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZVJlYyogIGNsYXp6ICkgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfdGFibGUgPSBsb2FkXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5nZXRfdGFibGUgID0gZ2V0XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+dGFibGVfaW5mbyA9IGluZm9fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZTRk5UX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2dHRjbWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUvc2ZudCBjbWFwIGV4dHJhIGluZm9ybWF0aW9uIHNlcnZpY2UuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZXZlbG9wbWVudCBvZiB0aGlzIHNlcnZpY2UgaXMgc3VwcG9ydCBvZgorICAgSW5mb3JtYXRpb24tdGVjaG5vbG9neSBQcm9tb3Rpb24gQWdlbmN5LCBKYXBhbi4gKi8KKworI2lmbmRlZiBfX1NWVFRDTUFQX0hfXworI2RlZmluZSBfX1NWVFRDTUFQX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX1RUX0NNQVAgICJ0dC1jbWFwcyIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0NNYXBJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgVHJ1ZVR5cGUvc2ZudCBzcGVjaWZpYyBjbWFwIGluZm9ybWF0aW9uICAqLworICAvKiAgICB3aGljaCBpcyBub3QgY292ZXJlZCBieSB0aGUgZ2VuZXJpYyBARlRfQ2hhck1hcCBzdHJ1Y3R1cmUuICBUaGlzICAgKi8KKyAgLyogICAgc3RydWN0dXJlIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBARlRfR2V0X1RUX0NNYXBfSW5mbyBmdW5jdGlvbi4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGFuZ3VhZ2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGxhbmd1YWdlIElEIHVzZWQgaW4gTWFjIGZvbnRzLiAgRGVmaW5pdGlvbnMgb2YgdmFsdWVzIGFyZSBpbiAqLworICAvKiAgICAgIGB0dG5hbWVpZC5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZvcm1hdCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBjbWFwIGZvcm1hdC4gIE9wZW5UeXBlIDEuNSBkZWZpbmVzIHRoZSBmb3JtYXRzIDAgKGJ5dGUgICAgICAgKi8KKyAgLyogICAgICBlbmNvZGluZyB0YWJsZSksIDJ+KGhpZ2gtYnl0ZSBtYXBwaW5nIHRocm91Z2ggdGFibGUpLCA0fihzZWdtZW50ICovCisgIC8qICAgICAgbWFwcGluZyB0byBkZWx0YSB2YWx1ZXMpLCA2fih0cmltbWVkIHRhYmxlIG1hcHBpbmcpLCA4fihtaXhlZCAgICAqLworICAvKiAgICAgIDE2LWJpdCBhbmQgMzItYml0IGNvdmVyYWdlKSwgMTB+KHRyaW1tZWQgYXJyYXkpLCAxMn4oc2VnbWVudGVkICAgKi8KKyAgLyogICAgICBjb3ZlcmFnZSksIGFuZCAxNCAoVW5pY29kZSBWYXJpYXRpb24gU2VxdWVuY2VzKS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfQ01hcEluZm9fCisgIHsKKyAgICBGVF9VTG9uZyAgbGFuZ3VhZ2U7CisgICAgRlRfTG9uZyAgIGZvcm1hdDsKKworICB9IFRUX0NNYXBJbmZvOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0NNYXBfSW5mb19HZXRGdW5jKSggRlRfQ2hhck1hcCAgICBjaGFybWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfQ01hcEluZm8gICpjbWFwX2luZm8gKTsKKworCisgIEZUX0RFRklORV9TRVJWSUNFKCBUVENNYXBzICkKKyAgeworICAgIFRUX0NNYXBfSW5mb19HZXRGdW5jICBnZXRfY21hcF9pbmZvOworICB9OworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfVFRDTUFQU1JFQyggY2xhc3NfLCBnZXRfY21hcF9pbmZvXyApICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1RUQ01hcHNSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfY21hcF9pbmZvXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfVFRDTUFQU1JFQyggY2xhc3NfLCBnZXRfY21hcF9pbmZvXyApICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgICAgIGxpYnJhcnksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX1RUQ01hcHNSZWMqICBjbGF6eiApICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdldF9jbWFwX2luZm8gPSBnZXRfY21hcF9pbmZvXzsgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19TVlRUQ01BUF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzJlZThjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2dHRlbmcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUgZW5naW5lIHF1ZXJ5IHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWVFRFTkdfSF9fCisjZGVmaW5lIF9fU1ZUVEVOR19IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSBGVF9NT0RVTEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoKKyAgICogIFNGTlQgdGFibGUgbG9hZGluZyBzZXJ2aWNlLgorICAgKi8KKworI2RlZmluZSBGVF9TRVJWSUNFX0lEX1RSVUVUWVBFX0VOR0lORSAgInRydWV0eXBlLWVuZ2luZSIKKworICAvKgorICAgKiBVc2VkIHRvIGltcGxlbWVudCBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUKKyAgICovCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIFRydWVUeXBlRW5naW5lICkKKyAgeworICAgIEZUX1RydWVUeXBlRW5naW5lVHlwZSAgZW5naW5lX3R5cGU7CisgIH07CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fU1ZUVEVOR19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2I3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2dHRnbHlmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUgZ2x5cGggc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19TVlRUR0xZRl9IX18KKyNkZWZpbmUgX19TVlRUR0xZRl9IX18KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyNkZWZpbmUgRlRfU0VSVklDRV9JRF9UVF9HTFlGICAidHQtZ2x5ZiIKKworCisgIHR5cGVkZWYgRlRfVUxvbmcKKyAgKCpUVF9HbHlmX0dldExvY2F0aW9uRnVuYykoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICpwc2l6ZSApOworCisgIEZUX0RFRklORV9TRVJWSUNFKCBUVEdseWYgKQorICB7CisgICAgVFRfR2x5Zl9HZXRMb2NhdGlvbkZ1bmMgIGdldF9sb2NhdGlvbjsKKyAgfTsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfVFRHTFlGUkVDKCBjbGFzc18sIGdldF9sb2NhdGlvbl8gKSAgXAorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9UVEdseWZSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbG9jYXRpb25fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1RUR0xZRlJFQyggY2xhc3NfLCBnZXRfbG9jYXRpb25fICkgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfVFRHbHlmUmVjKiAgY2xhenogKSAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X2xvY2F0aW9uID0gZ2V0X2xvY2F0aW9uXzsgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19TVlRUR0xZRl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzY5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2d2luZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgV2luZG93cyBGTlQvRk9OVCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1NWV0lORk5UX0hfXworI2RlZmluZSBfX1NWV0lORk5UX0hfXworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX1dJTkZPTlRTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfV0lORk5UICAid2luZm9udHMiCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUX1dpbkZudF9HZXRIZWFkZXJGdW5jKSggRlRfRmFjZSAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9XaW5GTlRfSGVhZGVyUmVjICAqYWhlYWRlciApOworCisKKyAgRlRfREVGSU5FX1NFUlZJQ0UoIFdpbkZudCApCisgIHsKKyAgICBGVF9XaW5GbnRfR2V0SGVhZGVyRnVuYyAgZ2V0X2hlYWRlcjsKKyAgfTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19TVldJTkZOVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NmbnQuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3NmbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2NlMzkwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvc2ZudC5oCkBAIC0wLDAgKzEsNzExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSGlnaC1sZXZlbCBgc2ZudCcgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19TRk5UX0hfXworI2RlZmluZSBfX1NGTlRfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfSW5pdF9GYWNlX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmlyc3QgcGFydCBvZiB0aGUgU0ZOVCBmYWNlIG9iamVjdCBpbml0aWFsaXphdGlvbi4gIFRoaXMgZmluZHMgICAgICovCisgIC8qICAgIHRoZSBmYWNlIGluIGEgU0ZOVCBmaWxlIG9yIGNvbGxlY3Rpb24sIGFuZCBsb2FkIGl0cyBmb3JtYXQgdGFnIGluICAqLworICAvKiAgICBmYWNlLT5mb3JtYXRfdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gICAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIFRydWVUeXBlIGZvbnQsIGlmIHdlIGFyZSBvcGVuaW5nIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3BhcmFtcyA6OiBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXJhbXMgICAgIDo6IE9wdGlvbmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc3RyZWFtIGN1cnNvciBtdXN0IGJlIGF0IHRoZSBmb250IGZpbGUncyBvcmlnaW4uICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gcmVjb2duaXplcyBmb250cyBlbWJlZGRlZCBpbiBhIGBUcnVlVHlwZSAgICAgICAgICAgICAqLworICAvKiAgICBjb2xsZWN0aW9uJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9uY2UgdGhlIGZvcm1hdCB0YWcgaGFzIGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBmb250IGRyaXZlciwgaXQgICAgICAqLworICAvKiAgICBzaG91bGQgdGhlbiBjYWxsIHRoZSBUVF9Mb2FkX0ZhY2VfRnVuYygpIGNhbGxiYWNrIHRvIHJlYWQgdGhlIHJlc3QgKi8KKyAgLyogICAgb2YgdGhlIFNGTlQgdGFibGVzIGluIHRoZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfSW5pdF9GYWNlX0Z1bmMpKCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRfRmFjZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlY29uZCBwYXJ0IG9mIHRoZSBTRk5UIGZhY2Ugb2JqZWN0IGluaXRpYWxpemF0aW9uLiAgVGhpcyBsb2FkcyAgICAqLworICAvKiAgICB0aGUgY29tbW9uIFNGTlQgdGFibGVzIChoZWFkLCBPUy8yLCBtYXhwLCBtZXRyaWNzLCBldGMuKSBpbiB0aGUgICAgKi8KKyAgLyogICAgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBUcnVlVHlwZSBmb250LCBpZiB3ZSBhcmUgb3BlbmluZyBhICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9wYXJhbXMgOjogVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFyYW1zICAgICA6OiBPcHRpb25hbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBUVF9Jbml0X0ZhY2VfRnVuYygpLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfTG9hZF9GYWNlX0Z1bmMpKCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0RvbmVfRmFjZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgY2FsbGJhY2sgdXNlZCB0byBkZWxldGUgdGhlIGNvbW1vbiBTRk5UIGRhdGEgZnJvbSBhIGZhY2UuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgZGVzdHJveSB0aGUgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVFRfRG9uZV9GYWNlX0Z1bmMpKCBUVF9GYWNlICBmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Mb2FkX0FueV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIGFueSBmb250IHRhYmxlIGludG8gY2xpZW50IG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogVGhlIGZhY2Ugb2JqZWN0IHRvIGxvb2sgZm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRhZyAgICA6OiBUaGUgdGFnIG9mIHRhYmxlIHRvIGxvYWQuICBVc2UgdGhlIHZhbHVlIDAgaWYgeW91IHdhbnQgICAqLworICAvKiAgICAgICAgICAgICAgdG8gYWNjZXNzIHRoZSB3aG9sZSBmb250IGZpbGUsIGVsc2Ugc2V0IHRoaXMgcGFyYW1ldGVyICAgKi8KKyAgLyogICAgICAgICAgICAgIHRvIGEgdmFsaWQgVHJ1ZVR5cGUgdGFibGUgdGFnIHRoYXQgeW91IGNhbiBmb3JnZSB3aXRoICAgICovCisgIC8qICAgICAgICAgICAgICB0aGUgTUFLRV9UVF9UQUcgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb2Zmc2V0IDo6IFRoZSBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHRhYmxlIChvciB0aGUgZmlsZSBpZiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICB0YWcgPT0gMCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGVuZ3RoIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBkZWNpc2lvbiB2YXJpYWJsZTogICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICBJZiBsZW5ndGggPT0gTlVMTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBMb2FkcyB0aGUgd2hvbGUgdGFibGUuICBSZXR1cm5zIGFuIGVycm9yIGlmICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgYG9mZnNldCcgPT0gMCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgSWYgKmxlbmd0aCA9PSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgRXhpdHMgaW1tZWRpYXRlbHk7IHJldHVybmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiAqLworICAvKiAgICAgICAgICAgICAgICAgIHRhYmxlIG9yIG9mIHRoZSBmb250IGZpbGUsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgKi8KKyAgLyogICAgICAgICAgICAgICAgICBgdGFnJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICBJZiAqbGVuZ3RoICE9IDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBMb2FkcyB0aGUgbmV4dCBgbGVuZ3RoJyBieXRlcyBvZiB0YWJsZSBvciBmb250LCAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgb2Zmc2V0IGBvZmZzZXQnIChpbiB0YWJsZSBvciBmb250IHRvbykuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1ZmZlciA6OiBUaGUgYWRkcmVzcyBvZiB0YXJnZXQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0xvYWRfQW55X0Z1bmMpKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9GaW5kX1NCaXRfSW1hZ2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDaGVjayB3aGV0aGVyIGFuIGVtYmVkZGVkIGJpdG1hcCAoYW4gYHNiaXQnKSBleGlzdHMgZm9yIGEgZ2l2ZW4gICAgKi8KKyAgLyogICAgZ2x5cGgsIGF0IGEgZ2l2ZW4gc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9pbmRleCAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmlrZV9pbmRleCAgOjogVGhlIGN1cnJlbnQgc3RyaWtlIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFyYW5nZSAgICAgICAgOjogVGhlIFNCaXQgcmFuZ2UgY29udGFpbmluZyB0aGUgZ2x5cGggaW5kZXguICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXN0cmlrZSAgICAgICA6OiBUaGUgU0JpdCBzdHJpa2UgY29udGFpbmluZyB0aGUgZ2x5cGggaW5kZXguICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZ2x5cGhfb2Zmc2V0IDo6IFRoZSBvZmZzZXQgb2YgdGhlIGdseXBoIGRhdGEgaW4gYEVCRFQnIHRhYmxlLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU0ZOVF9FcnJfSW52YWxpZF9Bcmd1bWVudCBpZiBubyBzYml0IGV4aXN0cyBmb3IgdGhlIHJlcXVlc3RlZCAgICAgICovCisgIC8qICAgIGdseXBoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0ZpbmRfU0JpdF9JbWFnZV9GdW5jKSggVFRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgc3RyaWtlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdF9SYW5nZSAgICphcmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X1N0cmlrZSAgKmFzdHJpa2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmFnbHlwaF9vZmZzZXQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRfU0JpdF9NZXRyaWNzX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdldCB0aGUgYmlnIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gZW1iZWRkZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgICAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFuZ2UgICAgICAgOjogVGhlIFNCaXQgcmFuZ2UgY29udGFpbmluZyB0aGUgZ2x5cGguICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmlnX21ldHJpY3MgOjogQSBiaWcgU0JpdCBtZXRyaWNzIHN0cnVjdHVyZSBmb3IgdGhlIGdseXBoLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBnbHlwaCdzIG9mZnNldCB3aXRoaW4gICovCisgIC8qICAgIHRoZSBgRUJEVCcgdGFibGUgYmVmb3JlIHRoZSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIGltYWdlIGZvcm1hdCB1c2VzIHZhcmlhYmxlIG1ldHJpY3MsIHRoZSBzdHJlYW0gY3Vyc29yIGlzICAgICovCisgIC8qICAgIHBvc2l0aW9uZWQganVzdCBhZnRlciB0aGUgbWV0cmljcyBoZWFkZXIgaW4gdGhlIGBFQkRUJyB0YWJsZSBvbiAgICAqLworICAvKiAgICBmdW5jdGlvbiBleGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpUVF9Mb2FkX1NCaXRfTWV0cmljc19GdW5jKSggRlRfU3RyZWFtICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX1NCaXRfUmFuZ2UgICAgcmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX1NCaXRfTWV0cmljcyAgbWV0cmljcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfTG9hZF9TQml0X0ltYWdlX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZCBhIGdpdmVuIGdseXBoIHNiaXQgaW1hZ2UgZnJvbSB0aGUgZm9udCByZXNvdXJjZS4gIFRoaXMgYWxzbyAgICovCisgIC8qICAgIHJldHVybnMgaXRzIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmlrZV9pbmRleCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBzdHJpa2UgaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBjdXJyZW50IGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBjdXJyZW50IGxvYWQgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbWFwIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgdGFyZ2V0IHBpeG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbWV0cmljcyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGJpZyBzYml0IG1ldHJpY3Mgc3RydWN0dXJlIGZvciB0aGUgZ2x5cGggaW1hZ2UuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gIFJldHVybnMgYW4gZXJyb3IgaWYgbm8gICAgICovCisgIC8qICAgIGdseXBoIHNiaXQgZXhpc3RzIGZvciB0aGUgaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBgbWFwLmJ1ZmZlcicgZmllbGQgaXMgYWx3YXlzIGZyZWVkIGJlZm9yZSB0aGUgZ2x5cGggaXMgbG9hZGVkLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0xvYWRfU0JpdF9JbWFnZV9GdW5jKSggVFRfRmFjZSAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgICAgIHN0cmlrZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICAgICAgICAgKmFtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMgICphbWV0cmljcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfU2V0X1NCaXRfU3RyaWtlX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VsZWN0IGFuIHNiaXQgc3RyaWtlIGZvciBhIGdpdmVuIHNpemUgcmVxdWVzdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZXEgICAgICAgICAgIDo6IFRoZSBzaXplIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhc3RyaWtlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgc2JpdCBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyBhbiBlcnJvciBpZiBubyAgICAgKi8KKyAgLyogICAgc2JpdCBzdHJpa2UgZXhpc3RzIGZvciB0aGUgc2VsZWN0ZWQgcHBlbSB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfU2V0X1NCaXRfU3RyaWtlX0Z1bmMpKCBUVF9GYWNlICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICAgYXN0cmlrZV9pbmRleCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfTG9hZF9TdHJpa2VfTWV0cmljc19GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZCB0aGUgbWV0cmljcyBvZiBhIGdpdmVuIHN0cmlrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJpa2VfaW5kZXggIDo6IFRoZSBzdHJpa2UgaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzICAgICAgIDo6IHRoZSBtZXRyaWNzIG9mIHRoZSBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyBhbiBlcnJvciBpZiBubyAgICAgKi8KKyAgLyogICAgc3VjaCBzYml0IHN0cmlrZSBleGlzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfTG9hZF9TdHJpa2VfTWV0cmljc19GdW5jKSggVFRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR2V0X1BTX05hbWVfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgR2V0IHRoZSBQb3N0U2NyaXB0IGdseXBoIG5hbWUgb2YgYSBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaWR4ICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU25hbWUgOjogVGhlIGFkZHJlc3Mgb2YgYSBzdHJpbmcgcG9pbnRlci4gIFdpbGwgYmUgTlVMTCBpbiBjYXNlICAgKi8KKyAgLyogICAgICAgICAgICAgIG9mIGVycm9yLCBvdGhlcndpc2UgaXQgaXMgYSBwb2ludGVyIHRvIHRoZSBnbHlwaCBuYW1lLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgWW91IG11c3Qgbm90IG1vZGlmeSB0aGUgcmV0dXJuZWQgc3RyaW5nISAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpUVF9HZXRfUFNfTmFtZV9GdW5jKSggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBQU25hbWUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRfTWV0cmljc19GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvYWQgYSBtZXRyaWNzIHRhYmxlLCB3aGljaCBpcyBhIHRhYmxlIHdpdGggYSBob3Jpem9udGFsIGFuZCBhICAgICAqLworICAvKiAgICB2ZXJ0aWNhbCB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydGljYWwgOjogQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgdGhlIHZlcnRpY2FsIG9uZS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfTG9hZF9NZXRyaWNzX0Z1bmMpKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgdmVydGljYWwgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0dldF9NZXRyaWNzX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvYWQgdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgaGVhZGVyIGluIGEgZmFjZSBvYmplY3QuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydGljYWwgOjogQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgdmVydGljYWwgbWV0cmljcy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnaW5kZXggICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhYmVhcmluZyA6OiBUaGUgaG9yaXpvbnRhbCAob3IgdmVydGljYWwpIGJlYXJpbmcuICBTZXQgdG8gemVybyBpbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhYWR2YW5jZSA6OiBUaGUgaG9yaXpvbnRhbCAob3IgdmVydGljYWwpIGFkdmFuY2UuICBTZXQgdG8gemVybyBpbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHZvaWQKKyAgKCpUVF9HZXRfTWV0cmljc19GdW5jKSggVFRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgdmVydGljYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2hvcnQqICAgYWJlYXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogIGFhZHZhbmNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIGEgZ2l2ZW4gVHJ1ZVR5cGUgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmdW5jdGlvbiB1c2VzIGBmYWNlLT5nb3RvX3RhYmxlJyB0byBzZWVrIHRoZSBzdHJlYW0gdG8gdGhlICAgICAqLworICAvKiAgICBzdGFydCBvZiB0aGUgdGFibGUsIGV4Y2VwdCB3aGlsZSBsb2FkaW5nIHRoZSBmb250IGRpcmVjdG9yeS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpUVF9Mb2FkX1RhYmxlX0Z1bmMpKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWUgYSBnaXZlbiBUcnVlVHlwZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVFRfRnJlZV9UYWJsZV9GdW5jKSggVFRfRmFjZSAgZmFjZSApOworCisKKyAgLyoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgICBUVF9GYWNlX0dldEtlcm5pbmdGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0dXJuIHRoZSBob3Jpem9udGFsIGtlcm5pbmcgdmFsdWUgYmV0d2VlbiB0d28gZ2x5cGhzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBsZWZ0IGdseXBoIGluZGV4LgorICAgKiAgICByaWdodF9nbHlwaCA6OiBUaGUgcmlnaHQgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgIFRoZSBrZXJuaW5nIHZhbHVlIGluIGZvbnQgdW5pdHMuCisgICAqLworICB0eXBlZGVmIEZUX0ludAorICAoKlRUX0ZhY2VfR2V0S2VybmluZ0Z1bmMpKCBUVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICByaWdodF9nbHlwaCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU0ZOVF9JbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGxvYWQgYW5kICAgICovCisgIC8qICAgIGZyZWUgdGhlIGJhc2ljIHRhYmxlcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBhIGBzZm50JyBmb250IGZpbGUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENoZWNrIHRoZSB2YXJpb3VzIHh4eF9GdW5jKCkgZGVzY3JpcHRpb25zIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFNGTlRfSW50ZXJmYWNlXworICB7CisgICAgVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMgICAgICBnb3RvX3RhYmxlOworCisgICAgVFRfSW5pdF9GYWNlX0Z1bmMgICAgICAgICAgICBpbml0X2ZhY2U7CisgICAgVFRfTG9hZF9GYWNlX0Z1bmMgICAgICAgICAgICBsb2FkX2ZhY2U7CisgICAgVFRfRG9uZV9GYWNlX0Z1bmMgICAgICAgICAgICBkb25lX2ZhY2U7CisgICAgRlRfTW9kdWxlX1JlcXVlc3RlciAgICAgICAgICBnZXRfaW50ZXJmYWNlOworCisgICAgVFRfTG9hZF9BbnlfRnVuYyAgICAgICAgICAgICBsb2FkX2FueTsKKworICAgIC8qIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IGBsb2FkX2ZhY2UnIGJ1dCB0aGV5IGNhbiBhbHNvICAqLworICAgIC8qIGJlIGNhbGxlZCBmcm9tIGV4dGVybmFsIG1vZHVsZXMsIGlmIHRoZXJlIGlzIGEgbmVlZCB0byBkbyBzbyAqLworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9oZWFkOworICAgIFRUX0xvYWRfTWV0cmljc19GdW5jICAgICAgICAgbG9hZF9oaGVhOworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9jbWFwOworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9tYXhwOworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9vczI7CisgICAgVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgICAgICBsb2FkX3Bvc3Q7CisKKyAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgIGxvYWRfbmFtZTsKKyAgICBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICAgICAgIGZyZWVfbmFtZTsKKworICAgIC8qIHRoaXMgZmllbGQgd2FzIGNhbGxlZCBgbG9hZF9rZXJuaW5nJyB1cCB0byB2ZXJzaW9uIDIuMS4xMCAqLworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9rZXJuOworCisgICAgVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgICAgICBsb2FkX2dhc3A7CisgICAgVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgICAgICBsb2FkX3BjbHQ7CisKKyAgICAvKiBzZWUgYHR0bG9hZC5oJzsgdGhpcyBmaWVsZCB3YXMgY2FsbGVkIGBsb2FkX2JpdG1hcF9oZWFkZXInIHVwIHRvICovCisgICAgLyogdmVyc2lvbiAyLjEuMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgbG9hZF9iaGVkOworCisgICAgVFRfTG9hZF9TQml0X0ltYWdlX0Z1bmMgICAgICBsb2FkX3NiaXRfaW1hZ2U7CisKKyAgICAvKiBzZWUgYHR0cG9zdC5oJyAqLworICAgIFRUX0dldF9QU19OYW1lX0Z1bmMgICAgICAgICAgZ2V0X3BzbmFtZTsKKyAgICBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICAgICAgIGZyZWVfcHNuYW1lczsKKworICAgIC8qIHN0YXJ0aW5nIGhlcmUsIHRoZSBzdHJ1Y3R1cmUgZGlmZmVycyBmcm9tIHZlcnNpb24gMi4xLjcgKi8KKworICAgIC8qIHRoaXMgZmllbGQgd2FzIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjEuOCwgbmFtZWQgYGdldF9wc25hbWUnICovCisgICAgVFRfRmFjZV9HZXRLZXJuaW5nRnVuYyAgICAgICBnZXRfa2VybmluZzsKKworICAgIC8qIG5ldyBlbGVtZW50cyBpbnRyb2R1Y2VkIGFmdGVyIHZlcnNpb24gMi4xLjEwICovCisKKyAgICAvKiBsb2FkIHRoZSBmb250IGRpcmVjdG9yeSwgaS5lLiwgdGhlIG9mZnNldCB0YWJsZSBhbmQgKi8KKyAgICAvKiB0aGUgdGFibGUgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgIGxvYWRfZm9udF9kaXI7CisgICAgVFRfTG9hZF9NZXRyaWNzX0Z1bmMgICAgICAgICBsb2FkX2htdHg7CisKKyAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgIGxvYWRfZWJsYzsKKyAgICBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICAgICAgIGZyZWVfZWJsYzsKKworICAgIFRUX1NldF9TQml0X1N0cmlrZV9GdW5jICAgICAgc2V0X3NiaXRfc3RyaWtlOworICAgIFRUX0xvYWRfU3RyaWtlX01ldHJpY3NfRnVuYyAgbG9hZF9zdHJpa2VfbWV0cmljczsKKworICAgIFRUX0dldF9NZXRyaWNzX0Z1bmMgICAgICAgICAgZ2V0X21ldHJpY3M7CisKKyAgfSBTRk5UX0ludGVyZmFjZTsKKworCisgIC8qIHRyYW5zaXRpb25hbCAqLworICB0eXBlZGVmIFNGTlRfSW50ZXJmYWNlKiAgIFNGTlRfU2VydmljZTsKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSggICAgICAgIFwKKyAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG9fdGFibGVfLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF9mYWNlXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGRvbmVfZmFjZV8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X2ludGVyZmFjZV8sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2FueV8sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfaGVhZF8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9oaGVhXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2NtYXBfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfbWF4cF8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9vczJfLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX3Bvc3RfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfbmFtZV8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnJlZV9uYW1lXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2tlcm5fLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfZ2FzcF8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9wY2x0XywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2JoZWRfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfc2JpdF9pbWFnZV8sICAgICAgICAgICAgICBcCisgICAgICAgICAgZ2V0X3BzbmFtZV8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmcmVlX3BzbmFtZXNfLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9rZXJuaW5nXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9mb250X2Rpcl8sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2htdHhfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfZWJsY18sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnJlZV9lYmxjXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICBcCisgICAgICAgICAgZ2V0X21ldHJpY3NfICkgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IFNGTlRfSW50ZXJmYWNlICBjbGFzc18gPSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290b190YWJsZV8sICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbml0X2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG9uZV9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfYW55XywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9oZWFkXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2FkX2hoZWFfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfY21hcF8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9tYXhwXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2FkX29zMl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfcG9zdF8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmcmVlX25hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfa2Vybl8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9nYXNwXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2FkX3BjbHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfYmhlZF8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9zYml0X2ltYWdlXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfcHNuYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyZWVfcHNuYW1lc18sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2V0X2tlcm5pbmdfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2FkX2ZvbnRfZGlyXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvYWRfaG10eF8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9lYmxjXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmcmVlX2VibGNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNldF9zYml0X3N0cmlrZV8sICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9zdHJpa2VfbWV0cmljc18sICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEZUX0lOVEVSTkFMKCBhLCBhXyApICBcCisgICAgICAgICAgY2xhenotPmEgPSBhXzsKKworI2RlZmluZSBGVF9ERUZJTkVfU0ZOVF9JTlRFUkZBQ0UoICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnb3RvX3RhYmxlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkb25lX2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9pbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9hbnlfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2hlYWRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfaGhlYV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9jbWFwXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX21heHBfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfb3MyXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9wb3N0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX25hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZyZWVfbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9rZXJuXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2dhc3BfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfcGNsdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9iaGVkXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX3NiaXRfaW1hZ2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9wc25hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnJlZV9wc25hbWVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfa2VybmluZ18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGxvYWRfZm9udF9kaXJfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9obXR4XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2VibGNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZyZWVfZWJsY18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc2V0X3NiaXRfc3RyaWtlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX3N0cmlrZV9tZXRyaWNzXywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9tZXRyaWNzXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNGTlRfSW50ZXJmYWNlKiAgY2xhenogKSAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmdvdG9fdGFibGUgICAgICAgICAgPSBnb3RvX3RhYmxlXzsgICAgICAgICAgIFwKKyAgICBjbGF6ei0+aW5pdF9mYWNlICAgICAgICAgICA9IGluaXRfZmFjZV87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2ZhY2UgICAgICAgICAgID0gbG9hZF9mYWNlXzsgICAgICAgICAgICBcCisgICAgY2xhenotPmRvbmVfZmFjZSAgICAgICAgICAgPSBkb25lX2ZhY2VfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X2ludGVyZmFjZSAgICAgICA9IGdldF9pbnRlcmZhY2VfOyAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2FueSAgICAgICAgICAgID0gbG9hZF9hbnlfOyAgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfaGVhZCAgICAgICAgICAgPSBsb2FkX2hlYWRfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+bG9hZF9oaGVhICAgICAgICAgICA9IGxvYWRfaGhlYV87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2NtYXAgICAgICAgICAgID0gbG9hZF9jbWFwXzsgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfbWF4cCAgICAgICAgICAgPSBsb2FkX21heHBfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+bG9hZF9vczIgICAgICAgICAgICA9IGxvYWRfb3MyXzsgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX3Bvc3QgICAgICAgICAgID0gbG9hZF9wb3N0XzsgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfbmFtZSAgICAgICAgICAgPSBsb2FkX25hbWVfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+ZnJlZV9uYW1lICAgICAgICAgICA9IGZyZWVfbmFtZV87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2tlcm4gICAgICAgICAgID0gbG9hZF9rZXJuXzsgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfZ2FzcCAgICAgICAgICAgPSBsb2FkX2dhc3BfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+bG9hZF9wY2x0ICAgICAgICAgICA9IGxvYWRfcGNsdF87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2JoZWQgICAgICAgICAgID0gbG9hZF9iaGVkXzsgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfc2JpdF9pbWFnZSAgICAgPSBsb2FkX3NiaXRfaW1hZ2VfOyAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X3BzbmFtZSAgICAgICAgICA9IGdldF9wc25hbWVfOyAgICAgICAgICAgXAorICAgIGNsYXp6LT5mcmVlX3BzbmFtZXMgICAgICAgID0gZnJlZV9wc25hbWVzXzsgICAgICAgICBcCisgICAgY2xhenotPmdldF9rZXJuaW5nICAgICAgICAgPSBnZXRfa2VybmluZ187ICAgICAgICAgIFwKKyAgICBjbGF6ei0+bG9hZF9mb250X2RpciAgICAgICA9IGxvYWRfZm9udF9kaXJfOyAgICAgICAgXAorICAgIGNsYXp6LT5sb2FkX2htdHggICAgICAgICAgID0gbG9hZF9obXR4XzsgICAgICAgICAgICBcCisgICAgY2xhenotPmxvYWRfZWJsYyAgICAgICAgICAgPSBsb2FkX2VibGNfOyAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+ZnJlZV9lYmxjICAgICAgICAgICA9IGZyZWVfZWJsY187ICAgICAgICAgICAgXAorICAgIGNsYXp6LT5zZXRfc2JpdF9zdHJpa2UgICAgID0gc2V0X3NiaXRfc3RyaWtlXzsgICAgICBcCisgICAgY2xhenotPmxvYWRfc3RyaWtlX21ldHJpY3MgPSBsb2FkX3N0cmlrZV9tZXRyaWNzXzsgIFwKKyAgICBjbGF6ei0+Z2V0X21ldHJpY3MgICAgICAgICA9IGdldF9tZXRyaWNzXzsgICAgICAgICAgXAorICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1NGTlRfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC90MXR5cGVzLmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC90MXR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5YWNjNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL2ludGVybmFsL3QxdHlwZXMuaApAQCAtMCwwICsxLDI1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDF0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEJhc2ljIFR5cGUxL1R5cGUyIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAgICovCisvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1QxVFlQRVNfSF9fCisjZGVmaW5lIF9fVDFUWVBFU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgUkVRVUlSRUQgVFlQRTEvVFlQRTIgVEFCTEVTIERFRklOSVRJT05TICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0VuY29kaW5nUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIGEgY3VzdG9tIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9jaGFycyAgOjogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgY29kZXMgaW4gdGhlIGVuY29kaW5nLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIFVzdWFsbHkgMjU2LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvZGVfZmlyc3QgOjogVGhlIGxvd2VzdCB2YWxpZCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgZW5jb2RpbmcuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29kZV9sYXN0ICA6OiBUaGUgaGlnaGVzdCB2YWxpZCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgZW5jb2RpbmcgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgKyAxLiBXaGVuIGVxdWFsIHRvIGNvZGVfZmlyc3QgdGhlcmUgYXJlIG5vIHZhbGlkICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBjb2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJfaW5kZXggOjogQW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRpY2VzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcl9uYW1lICA6OiBBbiBhcnJheSBvZiBjb3JyZXNwb25kaW5nIGdseXBoIG5hbWVzLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVDFfRW5jb2RpbmdSZWNSZWNfCisgIHsKKyAgICBGVF9JbnQgICAgICAgbnVtX2NoYXJzOworICAgIEZUX0ludCAgICAgICBjb2RlX2ZpcnN0OworICAgIEZUX0ludCAgICAgICBjb2RlX2xhc3Q7CisKKyAgICBGVF9VU2hvcnQqICAgY2hhcl9pbmRleDsKKyAgICBGVF9TdHJpbmcqKiAgY2hhcl9uYW1lOworCisgIH0gVDFfRW5jb2RpbmdSZWMsICpUMV9FbmNvZGluZzsKKworCisgIC8qIHVzZWQgdG8gaG9sZCBleHRyYSBkYXRhIG9mIFBTX0ZvbnRJbmZvUmVjIHRoYXQKKyAgICogY2Fubm90IGJlIHN0b3JlZCBpbiB0aGUgcHVibGljbHkgZGVmaW5lZCBzdHJ1Y3R1cmUuCisgICAqCisgICAqIE5vdGUgdGhlc2UgY2FuJ3QgYmUgYmxlbmRlZCB3aXRoIG11bHRpcGxlLW1hc3RlcnMuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNfRm9udEV4dHJhUmVjXworICB7CisgICAgRlRfVVNob3J0ICBmc190eXBlOworCisgIH0gUFNfRm9udEV4dHJhUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0ZvbnRSZWNfCisgIHsKKyAgICBQU19Gb250SW5mb1JlYyAgIGZvbnRfaW5mbzsgICAgICAgICAvKiBmb250IGluZm8gZGljdGlvbmFyeSAgICovCisgICAgUFNfRm9udEV4dHJhUmVjICBmb250X2V4dHJhOyAgICAgICAgLyogZm9udCBpbmZvIGV4dHJhIGZpZWxkcyAqLworICAgIFBTX1ByaXZhdGVSZWMgICAgcHJpdmF0ZV9kaWN0OyAgICAgIC8qIHByaXZhdGUgZGljdGlvbmFyeSAgICAgKi8KKyAgICBGVF9TdHJpbmcqICAgICAgIGZvbnRfbmFtZTsgICAgICAgICAvKiB0b3AtbGV2ZWwgZGljdGlvbmFyeSAgICovCisKKyAgICBUMV9FbmNvZGluZ1R5cGUgIGVuY29kaW5nX3R5cGU7CisgICAgVDFfRW5jb2RpbmdSZWMgICBlbmNvZGluZzsKKworICAgIEZUX0J5dGUqICAgICAgICAgc3VicnNfYmxvY2s7CisgICAgRlRfQnl0ZSogICAgICAgICBjaGFyc3RyaW5nc19ibG9jazsKKyAgICBGVF9CeXRlKiAgICAgICAgIGdseXBoX25hbWVzX2Jsb2NrOworCisgICAgRlRfSW50ICAgICAgICAgICBudW1fc3VicnM7CisgICAgRlRfQnl0ZSoqICAgICAgICBzdWJyczsKKyAgICBGVF9VSW50KiAgICAgICAgIHN1YnJzX2xlbjsKKworICAgIEZUX0ludCAgICAgICAgICAgbnVtX2dseXBoczsKKyAgICBGVF9TdHJpbmcqKiAgICAgIGdseXBoX25hbWVzOyAgICAgICAvKiBhcnJheSBvZiBnbHlwaCBuYW1lcyAgICAgICAqLworICAgIEZUX0J5dGUqKiAgICAgICAgY2hhcnN0cmluZ3M7ICAgICAgIC8qIGFycmF5IG9mIGdseXBoIGNoYXJzdHJpbmdzICovCisgICAgRlRfVUludCogICAgICAgICBjaGFyc3RyaW5nc19sZW47CisKKyAgICBGVF9CeXRlICAgICAgICAgIHBhaW50X3R5cGU7CisgICAgRlRfQnl0ZSAgICAgICAgICBmb250X3R5cGU7CisgICAgRlRfTWF0cml4ICAgICAgICBmb250X21hdHJpeDsKKyAgICBGVF9WZWN0b3IgICAgICAgIGZvbnRfb2Zmc2V0OworICAgIEZUX0JCb3ggICAgICAgICAgZm9udF9iYm94OworICAgIEZUX0xvbmcgICAgICAgICAgZm9udF9pZDsKKworICAgIEZUX0ZpeGVkICAgICAgICAgc3Ryb2tlX3dpZHRoOworCisgIH0gVDFfRm9udFJlYywgKlQxX0ZvbnQ7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQ0lEX1N1YnJzUmVjXworICB7CisgICAgRlRfSW50ICAgICBudW1fc3VicnM7CisgICAgRlRfQnl0ZSoqICBjb2RlOworCisgIH0gQ0lEX1N1YnJzUmVjLCAqQ0lEX1N1YnJzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgIEFGTSBGT05UIElORk9STUFUSU9OIFNUUlVDVFVSRVMgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBBRk1fVHJhY2tLZXJuUmVjXworICB7CisgICAgRlRfSW50ICAgIGRlZ3JlZTsKKyAgICBGVF9GaXhlZCAgbWluX3B0c2l6ZTsKKyAgICBGVF9GaXhlZCAgbWluX2tlcm47CisgICAgRlRfRml4ZWQgIG1heF9wdHNpemU7CisgICAgRlRfRml4ZWQgIG1heF9rZXJuOworCisgIH0gQUZNX1RyYWNrS2VyblJlYywgKkFGTV9UcmFja0tlcm47CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGTV9LZXJuUGFpclJlY18KKyAgeworICAgIEZUX1VJbnQgIGluZGV4MTsKKyAgICBGVF9VSW50ICBpbmRleDI7CisgICAgRlRfSW50ICAgeDsKKyAgICBGVF9JbnQgICB5OworCisgIH0gQUZNX0tlcm5QYWlyUmVjLCAqQUZNX0tlcm5QYWlyOworCisgIHR5cGVkZWYgc3RydWN0ICBBRk1fRm9udEluZm9SZWNfCisgIHsKKyAgICBGVF9Cb29sICAgICAgICBJc0NJREZvbnQ7CisgICAgRlRfQkJveCAgICAgICAgRm9udEJCb3g7CisgICAgRlRfRml4ZWQgICAgICAgQXNjZW5kZXI7CisgICAgRlRfRml4ZWQgICAgICAgRGVzY2VuZGVyOworICAgIEFGTV9UcmFja0tlcm4gIFRyYWNrS2VybnM7ICAgLyogZnJlZSBpZiBub24tTlVMTCAqLworICAgIEZUX1VJbnQgICAgICAgIE51bVRyYWNrS2VybjsKKyAgICBBRk1fS2VyblBhaXIgICBLZXJuUGFpcnM7ICAgIC8qIGZyZWUgaWYgbm9uLU5VTEwgKi8KKyAgICBGVF9VSW50ICAgICAgICBOdW1LZXJuUGFpcjsKKworICB9IEFGTV9Gb250SW5mb1JlYywgKkFGTV9Gb250SW5mbzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICBPUklHSU5BTCBUMV9GQUNFIENMQVNTIERFRklOSVRJT04gICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHR5cGVkZWYgc3RydWN0IFQxX0ZhY2VSZWNfKiAgIFQxX0ZhY2U7CisgIHR5cGVkZWYgc3RydWN0IENJRF9GYWNlUmVjXyogIENJRF9GYWNlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0ZhY2VSZWNfCisgIHsKKyAgICBGVF9GYWNlUmVjICAgICAgcm9vdDsKKyAgICBUMV9Gb250UmVjICAgICAgdHlwZTE7CisgICAgY29uc3Qgdm9pZCogICAgIHBzbmFtZXM7CisgICAgY29uc3Qgdm9pZCogICAgIHBzYXV4OworICAgIGNvbnN0IHZvaWQqICAgICBhZm1fZGF0YTsKKyAgICBGVF9DaGFyTWFwUmVjICAgY2hhcm1hcHJlY3NbMl07CisgICAgRlRfQ2hhck1hcCAgICAgIGNoYXJtYXBzWzJdOworCisgICAgLyogc3VwcG9ydCBmb3IgTXVsdGlwbGUgTWFzdGVycyBmb250cyAqLworICAgIFBTX0JsZW5kICAgICAgICBibGVuZDsKKworICAgIC8qIHVuZG9jdW1lbnRlZCwgb3B0aW9uYWw6IGluZGljZXMgb2Ygc3Vicm91dGluZXMgdGhhdCBleHByZXNzICAgICAgKi8KKyAgICAvKiB0aGUgTm9ybWFsaXplRGVzaWduVmVjdG9yIGFuZCB0aGUgQ29udmVydERlc2lnblZlY3RvciBwcm9jZWR1cmUsICovCisgICAgLyogcmVzcGVjdGl2ZWx5LCBhcyBUeXBlIDIgY2hhcnN0cmluZ3M7IC0xIGlmIGtleXdvcmRzIG5vdCBwcmVzZW50ICAqLworICAgIEZUX0ludCAgICAgICAgICAgbmR2X2lkeDsKKyAgICBGVF9JbnQgICAgICAgICAgIGNkdl9pZHg7CisKKyAgICAvKiB1bmRvY3VtZW50ZWQsIG9wdGlvbmFsOiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBsZW5fYnVpbGRjaGFyICovCisgICAgLyogZm9yIFR5cGUgMiBmb250czsgbWFuaXB1bGF0ZWQgYnkgb3RoZXJzdWJycyAxOSwgMjQsIGFuZCAyNSAgICAqLworICAgIEZUX1VJbnQgICAgICAgICAgbGVuX2J1aWxkY2hhcjsKKyAgICBGVF9Mb25nKiAgICAgICAgIGJ1aWxkY2hhcjsKKworICAgIC8qIHNpbmNlIHZlcnNpb24gMi4xIC0gaW50ZXJmYWNlIHRvIFBvc3RTY3JpcHQgaGludGVyICovCisgICAgY29uc3Qgdm9pZCogICAgIHBzaGludGVyOworCisgIH0gVDFfRmFjZVJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDSURfRmFjZVJlY18KKyAgeworICAgIEZUX0ZhY2VSZWMgICAgICAgcm9vdDsKKyAgICB2b2lkKiAgICAgICAgICAgIHBzbmFtZXM7CisgICAgdm9pZCogICAgICAgICAgICBwc2F1eDsKKyAgICBDSURfRmFjZUluZm9SZWMgIGNpZDsKKyAgICBQU19Gb250RXh0cmFSZWMgIGZvbnRfZXh0cmE7CisjaWYgMAorICAgIHZvaWQqICAgICAgICAgICAgYWZtX2RhdGE7CisjZW5kaWYKKyAgICBDSURfU3VicnMgICAgICAgIHN1YnJzOworCisgICAgLyogc2luY2UgdmVyc2lvbiAyLjEgLSBpbnRlcmZhY2UgdG8gUG9zdFNjcmlwdCBoaW50ZXIgKi8KKyAgICB2b2lkKiAgICAgICAgICAgIHBzaGludGVyOworCisgICAgLyogc2luY2UgdmVyc2lvbiAyLjEuOCwgYnV0IHdhcyBvcmlnaW5hbGx5IHBvc2l0aW9uZWQgYWZ0ZXIgYGFmbV9kYXRhJyAqLworICAgIEZUX0J5dGUqICAgICAgICAgYmluYXJ5X2RhdGE7IC8qIHVzZWQgaWYgaGV4IGRhdGEgaGFzIGJlZW4gY29udmVydGVkICovCisgICAgRlRfU3RyZWFtICAgICAgICBjaWRfc3RyZWFtOworCisgIH0gQ0lEX0ZhY2VSZWM7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UMVRZUEVTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGQwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvaW5jbHVkZS9pbnRlcm5hbC90dHR5cGVzLmgKQEAgLTAsMCArMSwxNTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQmFzaWMgU0ZOVC9UcnVlVHlwZSB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgKi8KKy8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFRUWVBFU19IX18KKyNkZWZpbmUgX19UVFRZUEVTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICBSRVFVSVJFRCBUUlVFVFlQRS9PUEVOVFlQRSBUQUJMRVMgREVGSU5JVElPTlMgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUQ19IZWFkZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRydWVUeXBlIGNvbGxlY3Rpb24gaGVhZGVyLiAgVGhpcyB0YWJsZSBjb250YWlucyB0aGUgb2Zmc2V0cyBvZiAgICAqLworICAvKiAgICB0aGUgZm9udCBoZWFkZXJzIG9mIGVhY2ggZGlzdGluY3QgVHJ1ZVR5cGUgZmFjZSBpbiB0aGUgZmlsZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWcgICAgIDo6IE11c3QgYmUgYHR0YyAnIHRvIGluZGljYXRlIGEgVHJ1ZVR5cGUgY29sbGVjdGlvbi4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnNpb24gOjogVGhlIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY291bnQgICA6OiBUaGUgbnVtYmVyIG9mIGZhY2VzIGluIHRoZSBjb2xsZWN0aW9uLiAgVGhlICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIGxvbmcsIGJ1dCAqLworICAvKiAgICAgICAgICAgICAgIHdlIHVzZSBhIHNpZ25lZCBsb25nIHNpbmNlIHdlIG5lZWQgdGhlIHZhbHVlIC0xIGZvciAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBzcGVjaWZpYyBwdXJwb3Nlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvZmZzZXRzIDo6IFRoZSBvZmZzZXRzIG9mIHRoZSBmb250IGhlYWRlcnMsIG9uZSBwZXIgZmFjZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVENfSGVhZGVyUmVjXworICB7CisgICAgRlRfVUxvbmcgICB0YWc7CisgICAgRlRfRml4ZWQgICB2ZXJzaW9uOworICAgIEZUX0xvbmcgICAgY291bnQ7CisgICAgRlRfVUxvbmcqICBvZmZzZXRzOworCisgIH0gVFRDX0hlYWRlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNGTlRfSGVhZGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNGTlQgZmlsZSBmb3JtYXQgaGVhZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZvcm1hdF90YWcgICAgIDo6IFRoZSBmb250IGZvcm1hdCB0YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3RhYmxlcyAgICAgOjogVGhlIG51bWJlciBvZiB0YWJsZXMgaW4gZmlsZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzZWFyY2hfcmFuZ2UgICA6OiBNdXN0IGJlIGAxNiAqIChtYXggcG93ZXIgb2YgMiA8PSBudW1fdGFibGVzKScuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVudHJ5X3NlbGVjdG9yIDo6IE11c3QgYmUgbG9nMiBvZiBgc2VhcmNoX3JhbmdlIC8gMTYnLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFuZ2Vfc2hpZnQgICAgOjogTXVzdCBiZSBgbnVtX3RhYmxlcyAqIDE2IC0gc2VhcmNoX3JhbmdlJy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgU0ZOVF9IZWFkZXJSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgIGZvcm1hdF90YWc7CisgICAgRlRfVVNob3J0ICBudW1fdGFibGVzOworICAgIEZUX1VTaG9ydCAgc2VhcmNoX3JhbmdlOworICAgIEZUX1VTaG9ydCAgZW50cnlfc2VsZWN0b3I7CisgICAgRlRfVVNob3J0ICByYW5nZV9zaGlmdDsKKworICAgIEZUX1VMb25nICAgb2Zmc2V0OyAgLyogbm90IGluIGZpbGUgKi8KKworICB9IFNGTlRfSGVhZGVyUmVjLCAqU0ZOVF9IZWFkZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9UYWJsZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBnaXZlbiB0YWJsZSBvZiBhIFRydWVUeXBlIGZvbnQuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUYWcgICAgICA6OiBBIGZvdXItYnl0ZXMgdGFnIGRlc2NyaWJpbmcgdGhlIHRhYmxlLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENoZWNrU3VtIDo6IFRoZSB0YWJsZSBjaGVja3N1bS4gIFRoaXMgdmFsdWUgY2FuIGJlIGlnbm9yZWQuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT2Zmc2V0ICAgOjogVGhlIG9mZnNldCBvZiB0aGUgdGFibGUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFRydWVUeXBlICovCisgIC8qICAgICAgICAgICAgICAgIGZvbnQgaW4gaXRzIHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGVuZ3RoICAgOjogVGhlIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfVGFibGVSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgVGFnOyAgICAgICAgLyogICAgICAgIHRhYmxlIHR5cGUgKi8KKyAgICBGVF9VTG9uZyAgQ2hlY2tTdW07ICAgLyogICAgdGFibGUgY2hlY2tzdW0gKi8KKyAgICBGVF9VTG9uZyAgT2Zmc2V0OyAgICAgLyogdGFibGUgZmlsZSBvZmZzZXQgKi8KKyAgICBGVF9VTG9uZyAgTGVuZ3RoOyAgICAgLyogICAgICB0YWJsZSBsZW5ndGggKi8KKworICB9IFRUX1RhYmxlUmVjLCAqVFRfVGFibGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXT0ZGX0hlYWRlclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXT0ZGIGZpbGUgZm9ybWF0IGhlYWRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvV09GRi8jV09GRkhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFdPRkZfSGVhZGVyUmVjXworICB7CisgICAgRlRfVUxvbmcgICBzaWduYXR1cmU7CisgICAgRlRfVUxvbmcgICBmbGF2b3I7CisgICAgRlRfVUxvbmcgICBsZW5ndGg7CisgICAgRlRfVVNob3J0ICBudW1fdGFibGVzOworICAgIEZUX1VTaG9ydCAgcmVzZXJ2ZWQ7CisgICAgRlRfVUxvbmcgICB0b3RhbFNmbnRTaXplOworICAgIEZUX1VTaG9ydCAgbWFqb3JWZXJzaW9uOworICAgIEZUX1VTaG9ydCAgbWlub3JWZXJzaW9uOworICAgIEZUX1VMb25nICAgbWV0YU9mZnNldDsKKyAgICBGVF9VTG9uZyAgIG1ldGFMZW5ndGg7CisgICAgRlRfVUxvbmcgICBtZXRhT3JpZ0xlbmd0aDsKKyAgICBGVF9VTG9uZyAgIHByaXZPZmZzZXQ7CisgICAgRlRfVUxvbmcgICBwcml2TGVuZ3RoOworCisgIH0gV09GRl9IZWFkZXJSZWMsICpXT0ZGX0hlYWRlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFdPRkZfVGFibGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIGdpdmVuIHRhYmxlIG9mIGEgV09GRiBmb250LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRhZyAgICAgICAgOjogQSBmb3VyLWJ5dGVzIHRhZyBkZXNjcmliaW5nIHRoZSB0YWJsZS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT2Zmc2V0ICAgICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSB0YWJsZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgV09GRiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZm9udCBpbiBpdHMgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcExlbmd0aCA6OiBDb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPcmlnTGVuZ3RoIDo6IFVub21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENoZWNrU3VtICAgOjogVGhlIHRhYmxlIGNoZWNrc3VtLiAgVGhpcyB2YWx1ZSBjYW4gYmUgaWdub3JlZC4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT3JpZ09mZnNldCA6OiBUaGUgdW5jb21wcmVzc2VkIHRhYmxlIGZpbGUgb2Zmc2V0LiAgVGhpcyB2YWx1ZSBnZXRzICovCisgIC8qICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgd2hpbGUgY29uc3RydWN0aW5nIHRoZSAodW5jb21wcmVzc2VkKSBTRk5UICAqLworICAvKiAgICAgICAgICAgICAgICAgIGhlYWRlci4gIEl0IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIFdPRkYgZmlsZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBXT0ZGX1RhYmxlUmVjXworICB7CisgICAgRlRfVUxvbmcgIFRhZzsgICAgICAgICAgIC8qIHRhYmxlIElEICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9VTG9uZyAgT2Zmc2V0OyAgICAgICAgLyogdGFibGUgZmlsZSBvZmZzZXQgICAgICAgICAqLworICAgIEZUX1VMb25nICBDb21wTGVuZ3RoOyAgICAvKiBjb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAgICovCisgICAgRlRfVUxvbmcgIE9yaWdMZW5ndGg7ICAgIC8qIHVuY29tcHJlc3NlZCB0YWJsZSBsZW5ndGggKi8KKyAgICBGVF9VTG9uZyAgQ2hlY2tTdW07ICAgICAgLyogdW5jb21wcmVzc2VkIGNoZWNrc3VtICAgICAqLworCisgICAgRlRfVUxvbmcgIE9yaWdPZmZzZXQ7ICAgIC8qIHVuY29tcHJlc3NlZCB0YWJsZSBmaWxlIG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAobm90IGluIHRoZSBXT0ZGIGZpbGUpICAgICAgICAgKi8KKyAgfSBXT0ZGX1RhYmxlUmVjLCAqV09GRl9UYWJsZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvbmdNZXRyaWNzUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIHRoZSBsb25nIG1ldHJpY3Mgb2YgdGhlIGBobXR4JyBhbmQgYHZtdHgnICAgICAqLworICAvKiAgICBUcnVlVHlwZSB0YWJsZXMuICBUaGUgdmFsdWVzIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZHZhbmNlIDo6IFRoZSBhZHZhbmNlIHdpZHRoIG9yIGhlaWdodCBmb3IgdGhlIGdseXBoLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJlYXJpbmcgOjogVGhlIGxlZnQtc2lkZSBvciB0b3Atc2lkZSBiZWFyaW5nIGZvciB0aGUgZ2x5cGguICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0xvbmdNZXRyaWNzUmVjXworICB7CisgICAgRlRfVVNob3J0ICBhZHZhbmNlOworICAgIEZUX1Nob3J0ICAgYmVhcmluZzsKKworICB9IFRUX0xvbmdNZXRyaWNzUmVjLCAqVFRfTG9uZ01ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TaG9ydE1ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSB0eXBlIHRvIG1vZGVsIHRoZSBzaG9ydCBtZXRyaWNzIG9mIHRoZSBgaG10eCcgYW5kIGB2bXR4JyAgKi8KKyAgLyogICAgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX1Nob3J0ICBUVF9TaG9ydE1ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9OYW1lRW50cnlSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSBtb2RlbGluZyBUcnVlVHlwZSBuYW1lIHJlY29yZHMuICBOYW1lIHJlY29yZHMgYXJlIHVzZWQgKi8KKyAgLyogICAgdG8gc3RvcmUgaW1wb3J0YW50IHN0cmluZ3MgbGlrZSBmYW1pbHkgbmFtZSwgc3R5bGUgbmFtZSwgICAgICAgICAgICovCisgIC8qICAgIGNvcHlyaWdodCwgZXRjLiBpbiBfbG9jYWxpemVkXyB2ZXJzaW9ucyAoaS5lLiwgbGFuZ3VhZ2UsIGVuY29kaW5nLCAqLworICAvKiAgICBldGMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwbGF0Zm9ybUlEICAgOjogVGhlIElEIG9mIHRoZSBuYW1lJ3MgZW5jb2RpbmcgcGxhdGZvcm0uICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVuY29kaW5nSUQgICA6OiBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgSUQgZm9yIHRoZSBuYW1lJ3MgZW5jb2RpbmcuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGFuZ3VhZ2VJRCAgIDo6IFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBJRCBmb3IgdGhlIG5hbWUncyBsYW5ndWFnZS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1lSUQgICAgICAgOjogVGhlIElEIHNwZWNpZnlpbmcgd2hhdCBraW5kIG9mIG5hbWUgdGhpcyBpcy4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmluZ0xlbmd0aCA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyaW5nT2Zmc2V0IDo6IFRoZSBvZmZzZXQgdG8gdGhlIHN0cmluZyBpbiB0aGUgYG5hbWUnIHRhYmxlLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJpbmcgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzdHJpbmcncyBieXRlcy4gIE5vdGUgdGhhdCB0aGVzZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGFyZSB1c3VhbGx5IFVURi0xNiBlbmNvZGVkIGNoYXJhY3RlcnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfTmFtZUVudHJ5UmVjXworICB7CisgICAgRlRfVVNob3J0ICBwbGF0Zm9ybUlEOworICAgIEZUX1VTaG9ydCAgZW5jb2RpbmdJRDsKKyAgICBGVF9VU2hvcnQgIGxhbmd1YWdlSUQ7CisgICAgRlRfVVNob3J0ICBuYW1lSUQ7CisgICAgRlRfVVNob3J0ICBzdHJpbmdMZW5ndGg7CisgICAgRlRfVUxvbmcgICBzdHJpbmdPZmZzZXQ7CisKKyAgICAvKiB0aGlzIGxhc3QgZmllbGQgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNwZWMgKi8KKyAgICAvKiBidXQgdXNlZCBieSB0aGUgRnJlZVR5cGUgZW5naW5lICAgICAgICAgICAgKi8KKworICAgIEZUX0J5dGUqICAgc3RyaW5nOworCisgIH0gVFRfTmFtZUVudHJ5UmVjLCAqVFRfTmFtZUVudHJ5OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfTmFtZVRhYmxlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgbW9kZWxpbmcgdGhlIFRydWVUeXBlIG5hbWUgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9ybWF0ICAgICAgICAgOjogVGhlIGZvcm1hdCBvZiB0aGUgbmFtZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1OYW1lUmVjb3JkcyA6OiBUaGUgbnVtYmVyIG9mIG5hbWVzIGluIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0b3JhZ2VPZmZzZXQgIDo6IFRoZSBvZmZzZXQgb2YgdGhlIG5hbWUgdGFibGUgaW4gdGhlIGBuYW1lJyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWVzICAgICAgICAgIDo6IEFuIGFycmF5IG9mIG5hbWUgcmVjb3Jkcy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICAgICAgOjogdGhlIGZpbGUncyBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfTmFtZVRhYmxlUmVjXworICB7CisgICAgRlRfVVNob3J0ICAgICAgICAgZm9ybWF0OworICAgIEZUX1VJbnQgICAgICAgICAgIG51bU5hbWVSZWNvcmRzOworICAgIEZUX1VJbnQgICAgICAgICAgIHN0b3JhZ2VPZmZzZXQ7CisgICAgVFRfTmFtZUVudHJ5UmVjKiAgbmFtZXM7CisgICAgRlRfU3RyZWFtICAgICAgICAgc3RyZWFtOworCisgIH0gVFRfTmFtZVRhYmxlUmVjLCAqVFRfTmFtZVRhYmxlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgIE9QVElPTkFMIFRSVUVUWVBFL09QRU5UWVBFIFRBQkxFUyBERUZJTklUSU9OUyAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR2FzcFJhbmdlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB0aW55IHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgZ2FzcCByYW5nZSBhY2NvcmRpbmcgdG8gdGhlICAgICAgICovCisgIC8qICAgIFRydWVUeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heFBQRU0gIDo6IFRoZSBtYXhpbXVtIHBwZW0gdmFsdWUgdG8gd2hpY2ggYGdhc3BGbGFnJyBhcHBsaWVzLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2FzcEZsYWcgOjogQSBmbGFnIGRlc2NyaWJpbmcgdGhlIGdyaWQtZml0dGluZyBhbmQgYW50aS1hbGlhc2luZyAgICovCisgIC8qICAgICAgICAgICAgICAgIG1vZGVzIHRvIGJlIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0dhc3BSYW5nZVJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgbWF4UFBFTTsKKyAgICBGVF9VU2hvcnQgIGdhc3BGbGFnOworCisgIH0gVFRfR2FzcFJhbmdlUmVjLCAqVFRfR2FzcFJhbmdlOworCisKKyNkZWZpbmUgVFRfR0FTUF9HUklERklUICAweDAxCisjZGVmaW5lIFRUX0dBU1BfRE9HUkFZICAgMHgwMgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR2FzcFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgbW9kZWxpbmcgdGhlIFRydWVUeXBlIGBnYXNwJyB0YWJsZSB1c2VkIHRvIHNwZWNpZnkgICAgICovCisgIC8qICAgIGdyaWQtZml0dGluZyBhbmQgYW50aS1hbGlhc2luZyBiZWhhdmlvdXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnNpb24gICAgOjogVGhlIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtUmFuZ2VzICA6OiBUaGUgbnVtYmVyIG9mIGdhc3AgcmFuZ2VzIGluIHRhYmxlLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnYXNwUmFuZ2VzIDo6IEFuIGFycmF5IG9mIGdhc3AgcmFuZ2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9HYXNwXworICB7CisgICAgRlRfVVNob3J0ICAgICB2ZXJzaW9uOworICAgIEZUX1VTaG9ydCAgICAgbnVtUmFuZ2VzOworICAgIFRUX0dhc3BSYW5nZSAgZ2FzcFJhbmdlczsKKworICB9IFRUX0dhc3BSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgIEVNQkVEREVEIEJJVE1BUFMgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TQml0X01ldHJpY3NSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGhlIGJpZyBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGggYml0bWFwICAgKi8KKyAgLyogICAgaW4gYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250LiAgVGhlc2UgYXJlIHVzdWFsbHkgZm91bmQgaW4gdGhlICAgICovCisgIC8qICAgIGBFQkRUJyAoTWljcm9zb2Z0KSBvciBgYmxvYycgKEFwcGxlKSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlaWdodCAgICAgICA6OiBUaGUgZ2x5cGggaGVpZ2h0IGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgd2lkdGggICAgICAgIDo6IFRoZSBnbHlwaCB3aWR0aCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3JpQmVhcmluZ1ggOjogVGhlIGhvcml6b250YWwgbGVmdCBiZWFyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlCZWFyaW5nWSA6OiBUaGUgaG9yaXpvbnRhbCB0b3AgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaG9yaUFkdmFuY2UgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJ0QmVhcmluZ1ggOjogVGhlIHZlcnRpY2FsIGxlZnQgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRCZWFyaW5nWSA6OiBUaGUgdmVydGljYWwgdG9wIGJlYXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydEFkdmFuY2UgIDo6IFRoZSB2ZXJ0aWNhbCBhZHZhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9NZXRyaWNzUmVjXworICB7CisgICAgRlRfVVNob3J0ICBoZWlnaHQ7CisgICAgRlRfVVNob3J0ICB3aWR0aDsKKworICAgIEZUX1Nob3J0ICAgaG9yaUJlYXJpbmdYOworICAgIEZUX1Nob3J0ICAgaG9yaUJlYXJpbmdZOworICAgIEZUX1VTaG9ydCAgaG9yaUFkdmFuY2U7CisKKyAgICBGVF9TaG9ydCAgIHZlcnRCZWFyaW5nWDsKKyAgICBGVF9TaG9ydCAgIHZlcnRCZWFyaW5nWTsKKyAgICBGVF9VU2hvcnQgIHZlcnRBZHZhbmNlOworCisgIH0gVFRfU0JpdF9NZXRyaWNzUmVjLCAqVFRfU0JpdF9NZXRyaWNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfU0JpdF9TbWFsbE1ldHJpY3NSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIHRoZSBzbWFsbCBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGggYml0bWFwICovCisgIC8qICAgIGluIGEgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgZm9udC4gIFRoZXNlIGFyZSB1c3VhbGx5IGZvdW5kIGluIHRoZSAgICAqLworICAvKiAgICBgRUJEVCcgKE1pY3Jvc29mdCkgb3IgdGhlIGBiZGF0JyAoQXBwbGUpIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICA6OiBUaGUgZ2x5cGggaGVpZ2h0IGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICAgIDo6IFRoZSBnbHlwaCB3aWR0aCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmVhcmluZ1ggOjogVGhlIGxlZnQtc2lkZSBiZWFyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiZWFyaW5nWSA6OiBUaGUgdG9wLXNpZGUgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkdmFuY2UgIDo6IFRoZSBhZHZhbmNlIHdpZHRoIG9yIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfU21hbGxfTWV0cmljc18KKyAgeworICAgIEZUX0J5dGUgIGhlaWdodDsKKyAgICBGVF9CeXRlICB3aWR0aDsKKworICAgIEZUX0NoYXIgIGJlYXJpbmdYOworICAgIEZUX0NoYXIgIGJlYXJpbmdZOworICAgIEZUX0J5dGUgIGFkdmFuY2U7CisKKyAgfSBUVF9TQml0X1NtYWxsTWV0cmljc1JlYywgKlRUX1NCaXRfU21hbGxNZXRyaWNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfU0JpdF9MaW5lTWV0cmljc1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSB0aGUgdGV4dCBsaW5lIG1ldHJpY3Mgb2YgYSBnaXZlbiAgICAgICovCisgIC8qICAgIGJpdG1hcCBzdHJpa2UsIGZvciBlaXRoZXIgYSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGxheW91dC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFzY2VuZGVyICAgICAgICAgICAgICAgIDo6IFRoZSBhc2NlbmRlciBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVzY2VuZGVyICAgICAgICAgICAgICAgOjogVGhlIGRlc2NlbmRlciBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfd2lkdGggICAgICAgICAgICAgICA6OiBUaGUgbWF4aW11bSBnbHlwaCB3aWR0aCBpbiBwaXhlbHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X3Nsb3BlX2VudW1lcmF0b3IgIDo6IFJpc2Ugb2YgdGhlIGNhcmV0IHNsb3BlLCB0eXBpY2FsbHkgc2V0ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAxIGZvciBub24taXRhbGljIGZvbnRzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X3Nsb3BlX2Rlbm9taW5hdG9yIDo6IFJpc2Ugb2YgdGhlIGNhcmV0IHNsb3BlLCB0eXBpY2FsbHkgc2V0ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAwIGZvciBub24taXRhbGljIGZvbnRzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X29mZnNldCAgICAgICAgICAgIDo6IE9mZnNldCBpbiBwaXhlbHMgdG8gbW92ZSB0aGUgY2FyZXQgZm9yICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXIgcG9zaXRpb25pbmcuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbl9vcmlnaW5fU0IgICAgICAgICAgIDo6IE1pbmltdW0gb2YgaG9yaUJlYXJpbmdYIChyZXNwLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0QmVhcmluZ1kpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWluX2FkdmFuY2VfU0IgICAgICAgICAgOjogTWluaW11bSBvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWwgYWR2YW5jZSAtICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaG9yaUJlYXJpbmdYICsgd2lkdGggKSAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgYWR2YW5jZSAtICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ZXJ0QmVhcmluZ1kgKyBoZWlnaHQgKSAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heF9iZWZvcmVfQkwgICAgICAgICAgIDo6IE1heGltdW0gb2YgaG9yaUJlYXJpbmdZIChyZXNwLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0QmVhcmluZ1kpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbl9hZnRlcl9CTCAgICAgICAgICAgIDo6IE1pbmltdW0gb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3JpQmVhcmluZ1kgLSBoZWlnaHQgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydEJlYXJpbmdYIC0gd2lkdGggICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFkcyAgICAgICAgICAgICAgICAgICAgOjogVW51c2VkICh0byBtYWtlIHRoZSBzaXplIG9mIHRoZSByZWNvcmQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbXVsdGlwbGUgb2YgMzIgYml0cy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfTGluZU1ldHJpY3NSZWNfCisgIHsKKyAgICBGVF9DaGFyICBhc2NlbmRlcjsKKyAgICBGVF9DaGFyICBkZXNjZW5kZXI7CisgICAgRlRfQnl0ZSAgbWF4X3dpZHRoOworICAgIEZUX0NoYXIgIGNhcmV0X3Nsb3BlX251bWVyYXRvcjsKKyAgICBGVF9DaGFyICBjYXJldF9zbG9wZV9kZW5vbWluYXRvcjsKKyAgICBGVF9DaGFyICBjYXJldF9vZmZzZXQ7CisgICAgRlRfQ2hhciAgbWluX29yaWdpbl9TQjsKKyAgICBGVF9DaGFyICBtaW5fYWR2YW5jZV9TQjsKKyAgICBGVF9DaGFyICBtYXhfYmVmb3JlX0JMOworICAgIEZUX0NoYXIgIG1pbl9hZnRlcl9CTDsKKyAgICBGVF9DaGFyICBwYWRzWzJdOworCisgIH0gVFRfU0JpdF9MaW5lTWV0cmljc1JlYywgKlRUX1NCaXRfTGluZU1ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TQml0X1JhbmdlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIFRydWVUeXBlL09wZW5UeXBlIHN1YkluZGV4VGFibGUgYXMgZGVmaW5lZCBpbiB0aGUgYEVCTEMnICAgICAgICAgKi8KKyAgLyogICAgKE1pY3Jvc29mdCkgb3IgYGJsb2MnIChBcHBsZSkgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmlyc3RfZ2x5cGggICA6OiBUaGUgZmlyc3QgZ2x5cGggaW5kZXggaW4gdGhlIHJhbmdlLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsYXN0X2dseXBoICAgIDo6IFRoZSBsYXN0IGdseXBoIGluZGV4IGluIHRoZSByYW5nZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluZGV4X2Zvcm1hdCAgOjogVGhlIGZvcm1hdCBvZiBpbmRleCB0YWJsZS4gIFZhbGlkIHZhbHVlcyBhcmUgMSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIHRvIDUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGltYWdlX2Zvcm1hdCAgOjogVGhlIGZvcm1hdCBvZiBgRUJEVCcgaW1hZ2UgZGF0YS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW1hZ2Vfb2Zmc2V0ICA6OiBUaGUgb2Zmc2V0IHRvIGltYWdlIGRhdGEgaW4gYEVCRFQnLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbWFnZV9zaXplICAgIDo6IEZvciBpbmRleCBmb3JtYXRzIDIgYW5kIDUuICBUaGlzIGlzIHRoZSBzaXplIGluICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBieXRlcyBvZiBlYWNoIGdseXBoIGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiaWdfbWV0cmljcyAgIDo6IEZvciBpbmRleCBmb3JtYXRzIDIgYW5kIDUuICBUaGlzIGlzIHRoZSBiaWcgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBtZXRyaWNzIGZvciBlYWNoIGdseXBoIGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZ2x5cGhzICAgIDo6IEZvciBpbmRleCBmb3JtYXRzIDQgYW5kIDUuICBUaGlzIGlzIHRoZSBudW1iZXIgb2YgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBnbHlwaHMgaW4gdGhlIGNvZGUgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9vZmZzZXRzIDo6IEZvciBpbmRleCBmb3JtYXRzIDEgYW5kIDMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2NvZGVzICAgOjogRm9yIGluZGV4IGZvcm1hdHMgNCBhbmQgNS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFibGVfb2Zmc2V0ICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSBpbmRleCB0YWJsZSBpbiB0aGUgYEVCTEMnICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgdGFibGUuICBPbmx5IHVzZWQgZHVyaW5nIHN0cmlrZSBsb2FkaW5nLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfUmFuZ2VSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgIGZpcnN0X2dseXBoOworICAgIEZUX1VTaG9ydCAgICAgICAgICAgbGFzdF9nbHlwaDsKKworICAgIEZUX1VTaG9ydCAgICAgICAgICAgaW5kZXhfZm9ybWF0OworICAgIEZUX1VTaG9ydCAgICAgICAgICAgaW1hZ2VfZm9ybWF0OworICAgIEZUX1VMb25nICAgICAgICAgICAgaW1hZ2Vfb2Zmc2V0OworCisgICAgRlRfVUxvbmcgICAgICAgICAgICBpbWFnZV9zaXplOworICAgIFRUX1NCaXRfTWV0cmljc1JlYyAgbWV0cmljczsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgIG51bV9nbHlwaHM7CisKKyAgICBGVF9VTG9uZyogICAgICAgICAgIGdseXBoX29mZnNldHM7CisgICAgRlRfVVNob3J0KiAgICAgICAgICBnbHlwaF9jb2RlczsKKworICAgIEZUX1VMb25nICAgICAgICAgICAgdGFibGVfb2Zmc2V0OworCisgIH0gVFRfU0JpdF9SYW5nZVJlYywgKlRUX1NCaXRfUmFuZ2U7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TQml0X1N0cmlrZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIGRlc2NyaWJlIGEgZ2l2ZW4gYml0bWFwIHN0cmlrZSBpbiB0aGUgYEVCTEMnICAgICAgKi8KKyAgLyogICAgKE1pY3Jvc29mdCkgb3IgYGJsb2MnIChBcHBsZSkgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBudW1faW5kZXhfcmFuZ2VzIDo6IFRoZSBudW1iZXIgb2YgaW5kZXggcmFuZ2VzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGluZGV4X3JhbmdlcyAgICAgOjogQW4gYXJyYXkgb2YgZ2x5cGggaW5kZXggcmFuZ2VzLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgY29sb3JfcmVmICAgICAgICA6OiBVbnVzZWQuICBgY29sb3JfcmVmJyBpcyBwdXQgaW4gZm9yIGZ1dHVyZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgZW5oYW5jZW1lbnRzLCBidXQgdGhlc2UgZmllbGRzIGFyZSBhbHJlYWR5ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIGluIHVzZSBieSBvdGhlciBwbGF0Zm9ybXMgKGUuZy4gTmV3dG9uKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscywgcGxlYXNlIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmJsb2MuaHRtbCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBob3JpICAgICAgICAgICAgIDo6IFRoZSBsaW5lIG1ldHJpY3MgZm9yIGhvcml6b250YWwgbGF5b3V0cy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHZlcnQgICAgICAgICAgICAgOjogVGhlIGxpbmUgbWV0cmljcyBmb3IgdmVydGljYWwgbGF5b3V0cy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgc3RhcnRfZ2x5cGggICAgICA6OiBUaGUgbG93ZXN0IGdseXBoIGluZGV4IGZvciB0aGlzIHN0cmlrZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBlbmRfZ2x5cGggICAgICAgIDo6IFRoZSBoaWdoZXN0IGdseXBoIGluZGV4IGZvciB0aGlzIHN0cmlrZS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHhfcHBlbSAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBob3Jpem9udGFsIHBpeGVscyBwZXIgRU0uICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeV9wcGVtICAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIHZlcnRpY2FsIHBpeGVscyBwZXIgRU0uICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBiaXRfZGVwdGggICAgICAgIDo6IFRoZSBiaXQgZGVwdGguICBWYWxpZCB2YWx1ZXMgYXJlIDEsIDIsIDQsICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBhbmQgOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmbGFncyAgICAgICAgICAgIDo6IElzIHRoaXMgYSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIHN0cmlrZT8gIEZvciAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLCBwbGVhc2Ugc2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmJsb2MuaHRtbCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfU3RyaWtlUmVjXworICB7CisgICAgRlRfSW50ICAgICAgICAgICAgICAgICAgbnVtX3JhbmdlczsKKyAgICBUVF9TQml0X1JhbmdlICAgICAgICAgICBzYml0X3JhbmdlczsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgICByYW5nZXNfb2Zmc2V0OworCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgY29sb3JfcmVmOworCisgICAgVFRfU0JpdF9MaW5lTWV0cmljc1JlYyAgaG9yaTsKKyAgICBUVF9TQml0X0xpbmVNZXRyaWNzUmVjICB2ZXJ0OworCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgc3RhcnRfZ2x5cGg7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgZW5kX2dseXBoOworCisgICAgRlRfQnl0ZSAgICAgICAgICAgICAgICAgeF9wcGVtOworICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgIHlfcHBlbTsKKworICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgIGJpdF9kZXB0aDsKKyAgICBGVF9DaGFyICAgICAgICAgICAgICAgICBmbGFnczsKKworICB9IFRUX1NCaXRfU3RyaWtlUmVjLCAqVFRfU0JpdF9TdHJpa2U7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TQml0X0NvbXBvbmVudFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBjb21wb3VuZCBzYml0IGVsZW1lbnQuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9jb2RlIDo6IFRoZSBlbGVtZW50J3MgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhfb2Zmc2V0ICAgOjogVGhlIGVsZW1lbnQncyBsZWZ0IGJlYXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeV9vZmZzZXQgICA6OiBUaGUgZWxlbWVudCdzIHRvcCBiZWFyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9Db21wb25lbnRSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIGdseXBoX2NvZGU7CisgICAgRlRfQ2hhciAgICB4X29mZnNldDsKKyAgICBGVF9DaGFyICAgIHlfb2Zmc2V0OworCisgIH0gVFRfU0JpdF9Db21wb25lbnRSZWMsICpUVF9TQml0X0NvbXBvbmVudDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1NCaXRfU2NhbGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgZGVzY3JpYmUgYSBnaXZlbiBiaXRtYXAgc2NhbGluZyB0YWJsZSwgYXMgZGVmaW5lZCAqLworICAvKiAgICBpbiB0aGUgYEVCU0MnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3JpICAgICAgICAgICAgICA6OiBUaGUgaG9yaXpvbnRhbCBsaW5lIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnQgICAgICAgICAgICAgIDo6IFRoZSB2ZXJ0aWNhbCBsaW5lIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeF9wcGVtICAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBob3Jpem9udGFsIHBpeGVscyBwZXIgRU0uICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5X3BwZW0gICAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIHZlcnRpY2FsIHBpeGVscyBwZXIgRU0uICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhfcHBlbV9zdWJzdGl0dXRlIDo6IFN1YnN0aXR1dGlvbiB4X3BwZW0gdmFsdWUuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeV9wcGVtX3N1YnN0aXR1dGUgOjogU3Vic3RpdHV0aW9uIHlfcHBlbSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9TY2FsZVJlY18KKyAgeworICAgIFRUX1NCaXRfTGluZU1ldHJpY3NSZWMgIGhvcmk7CisgICAgVFRfU0JpdF9MaW5lTWV0cmljc1JlYyAgdmVydDsKKworICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgIHhfcHBlbTsKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICB5X3BwZW07CisKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICB4X3BwZW1fc3Vic3RpdHV0ZTsKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICB5X3BwZW1fc3Vic3RpdHV0ZTsKKworICB9IFRUX1NCaXRfU2NhbGVSZWMsICpUVF9TQml0X1NjYWxlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgUE9TVFNDUklQVCBHTFlQSCBOQU1FUyBTVVBQT1JUICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfUG9zdF8yMFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUG9zdHNjcmlwdCBuYW1lcyBzdWItdGFibGUsIGZvcm1hdCAyLjAuICBTdG9yZXMgdGhlIFBTIG5hbWUgb2YgICAgICovCisgIC8qICAgIGVhY2ggZ2x5cGggaW4gdGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9nbHlwaHMgICAgOjogVGhlIG51bWJlciBvZiBuYW1lZCBnbHlwaHMgaW4gdGhlIHRhYmxlLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX25hbWVzICAgICA6OiBUaGUgbnVtYmVyIG9mIFBTIG5hbWVzIHN0b3JlZCBpbiB0aGUgdGFibGUuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9pbmRpY2VzIDo6IFRoZSBpbmRpY2VzIG9mIHRoZSBnbHlwaHMgaW4gdGhlIG5hbWVzIGFycmF5cy4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX25hbWVzICAgOjogVGhlIFBTIG5hbWVzIG5vdCBpbiBNYWMgRW5jb2RpbmcuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1Bvc3RfMjBSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgICBudW1fZ2x5cGhzOworICAgIEZUX1VTaG9ydCAgIG51bV9uYW1lczsKKyAgICBGVF9VU2hvcnQqICBnbHlwaF9pbmRpY2VzOworICAgIEZUX0NoYXIqKiAgIGdseXBoX25hbWVzOworCisgIH0gVFRfUG9zdF8yMFJlYywgKlRUX1Bvc3RfMjA7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Qb3N0XzI1UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQb3N0c2NyaXB0IG5hbWVzIHN1Yi10YWJsZSwgZm9ybWF0IDIuNS4gIFN0b3JlcyB0aGUgUFMgbmFtZSBvZiAgICAgKi8KKyAgLyogICAgZWFjaCBnbHlwaCBpbiB0aGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2dseXBocyA6OiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgdGFibGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvZmZzZXRzICAgIDo6IEFuIGFycmF5IG9mIHNpZ25lZCBvZmZzZXRzIGluIGEgbm9ybWFsIE1hYyAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBQb3N0c2NyaXB0IG5hbWUgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfUG9zdF8yNV8KKyAgeworICAgIEZUX1VTaG9ydCAgbnVtX2dseXBoczsKKyAgICBGVF9DaGFyKiAgIG9mZnNldHM7CisKKyAgfSBUVF9Qb3N0XzI1UmVjLCAqVFRfUG9zdF8yNTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1Bvc3RfTmFtZXNSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBvc3RzY3JpcHQgbmFtZXMgdGFibGUsIGVpdGhlciBmb3JtYXQgMi4wIG9yIDIuNS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRlZCAgICA6OiBBIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgUFMgbmFtZXMgYXJlIGxvYWRlZC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9ybWF0XzIwIDo6IFRoZSBzdWItdGFibGUgdXNlZCBmb3IgZm9ybWF0IDIuMC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb3JtYXRfMjUgOjogVGhlIHN1Yi10YWJsZSB1c2VkIGZvciBmb3JtYXQgMi41LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9Qb3N0X05hbWVzUmVjXworICB7CisgICAgRlRfQm9vbCAgbG9hZGVkOworCisgICAgdW5pb24KKyAgICB7CisgICAgICBUVF9Qb3N0XzIwUmVjICBmb3JtYXRfMjA7CisgICAgICBUVF9Qb3N0XzI1UmVjICBmb3JtYXRfMjU7CisKKyAgICB9IG5hbWVzOworCisgIH0gVFRfUG9zdF9OYW1lc1JlYywgKlRUX1Bvc3RfTmFtZXM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgIEdYIFZBUklBVElPTiBUQUJMRSBTVVBQT1JUICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgdHlwZWRlZiBzdHJ1Y3QgR1hfQmxlbmRSZWNfICAqR1hfQmxlbmQ7CisjZW5kaWYKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgIEVNQkVEREVEIEJERiBQUk9QRVJUSUVTIFRBQkxFIFNVUFBPUlQgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoKKyAgICogVGhlc2UgdHlwZXMgYXJlIHVzZWQgdG8gc3VwcG9ydCBhIGBCREYgJyB0YWJsZSB0aGF0IGlzbid0IHBhcnQgb2YgdGhlCisgICAqIG9mZmljaWFsIFRydWVUeXBlIHNwZWNpZmljYXRpb24uICBJdCBpcyBtYWlubHkgdXNlZCBpbiBTRk5ULWJhc2VkCisgICAqIGJpdG1hcCBmb250cyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gYSBzZXQgb2YgQkRGIGZvbnRzLgorICAgKgorICAgKiBUaGUgZm9ybWF0IG9mIHRoZSB0YWJsZSBpcyBhcyBmb2xsb3dzLgorICAgKgorICAgKiAgIFVTSE9SVCAgIHZlcnNpb24gICAgICBgQkRGICcgdGFibGUgdmVyc2lvbiBudW1iZXIsIHNob3VsZCBiZSAweDAwMDEuCisgICAqICAgVVNIT1JUICAgc3RyaWtlQ291bnQgIE51bWJlciBvZiBzdHJpa2VzIChiaXRtYXAgc2l6ZXMpIGluIHRoaXMgdGFibGUuCisgICAqICAgVUxPTkcgICAgc3RyaW5nVGFibGUgIE9mZnNldCAoZnJvbSBzdGFydCBvZiBCREYgdGFibGUpIHRvIHN0cmluZworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS4KKyAgICoKKyAgICogVGhpcyBpcyBmb2xsb3dlZCBieSBhbiBhcnJheSBvZiBgc3RyaWtlQ291bnQnIGRlc2NyaXB0b3JzLCBoYXZpbmcgdGhlCisgICAqIGZvbGxvd2luZyBmb3JtYXQuCisgICAqCisgICAqICAgVVNIT1JUICAgcHBlbSAgICAgICAgIFZlcnRpY2FsIHBpeGVscyBwZXIgRU0gZm9yIHRoaXMgc3RyaWtlLgorICAgKiAgIFVTSE9SVCAgIG51bUl0ZW1zICAgICBOdW1iZXIgb2YgaXRlbXMgZm9yIHRoaXMgc3RyaWtlIChwcm9wZXJ0aWVzIGFuZAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tcykuICBNYXhpbXVtIGlzIDI1NS4KKyAgICoKKyAgICogVGhpcyBhcnJheSBpbiB0dXJuIGlzIGZvbGxvd2VkIGJ5IGBzdHJpa2VDb3VudCcgdmFsdWUgc2V0cy4gIEVhY2gKKyAgICogYHZhbHVlIHNldCcgaXMgYW4gYXJyYXkgb2YgYG51bUl0ZW1zJyBpdGVtcyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0LgorICAgKgorICAgKiAgIFVMT05HICAgIGl0ZW1fbmFtZSAgICBPZmZzZXQgaW4gc3RyaW5nIHRhYmxlIHRvIGl0ZW0gbmFtZS4KKyAgICogICBVU0hPUlQgICBpdGVtX3R5cGUgICAgVGhlIGl0ZW0gdHlwZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PiBzdHJpbmcgKGUuZy4sIENPTU1FTlQpCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT4gYXRvbSAgIChlLmcuLCBGT05UIG9yIGV2ZW4gU0laRSkKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9PiBpbnQzMgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0+IHVpbnQzMgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAweDEwID0+IEEgZmxhZyB0byBpbmRpY2F0ZSBhIHByb3BlcnRpZXMuICBUaGlzCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgT1JlZCB3aXRoIHRoZSBhYm92ZSB2YWx1ZXMuCisgICAqICAgVUxPTkcgICAgaXRlbV92YWx1ZSAgIEZvciBzdHJpbmdzICA9PiBPZmZzZXQgaW50byBzdHJpbmcgdGFibGUgd2l0aG91dAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlIHF1b3Rlcy4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGF0b21zICAgID0+IE9mZnNldCBpbnRvIHN0cmluZyB0YWJsZS4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGludGVnZXJzID0+IERpcmVjdCB2YWx1ZS4KKyAgICoKKyAgICogQWxsIHN0cmluZ3MgaW4gdGhlIHN0cmluZyB0YWJsZSBjb25zaXN0IG9mIGJ5dGVzIGFuZCBhcmUKKyAgICogemVyby10ZXJtaW5hdGVkLgorICAgKgorICAgKi8KKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0JERlJlY18KKyAgeworICAgIEZUX0J5dGUqICAgdGFibGU7CisgICAgRlRfQnl0ZSogICB0YWJsZV9lbmQ7CisgICAgRlRfQnl0ZSogICBzdHJpbmdzOworICAgIEZUX1VMb25nICAgc3RyaW5nc19zaXplOworICAgIEZUX1VJbnQgICAgbnVtX3N0cmlrZXM7CisgICAgRlRfQm9vbCAgICBsb2FkZWQ7CisKKyAgfSBUVF9CREZSZWMsICpUVF9CREY7CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0JERiAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgIE9SSUdJTkFMIFRUX0ZBQ0UgQ0xBU1MgREVGSU5JVElPTiAgICAgICAgICAgICAgICAqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBzdHJ1Y3R1cmUvY2xhc3MgaXMgZGVmaW5lZCBoZXJlIGJlY2F1c2UgaXQgaXMgY29tbW9uIHRvIHRoZSAgICAgICovCisgIC8qIGZvbGxvd2luZyBmb3JtYXRzOiBUVEYsIE9wZW5UeXBlLVRULCBhbmQgT3BlblR5cGUtQ0ZGLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgY2xhc3NlcyBUVF9TaXplIGFuZCBUVF9HbHlwaFNsb3QgYXJlIG5vdCAgICAgICovCisgIC8qIHNoYXJlZCBiZXR3ZWVuIGZvbnQgZHJpdmVycywgYW5kIGFyZSB0aHVzIGRlZmluZWQgaW4gYHR0b2Jqcy5oJy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIGZhY2UvZm9udCBvYmplY3QuICBBIFRUX0ZhY2UgZW5jYXBzdWxhdGVzICAgKi8KKyAgLyogICAgdGhlIHJlc29sdXRpb24gYW5kIHNjYWxpbmcgaW5kZXBlbmRlbnQgcGFydHMgb2YgYSBUcnVlVHlwZSBmb250ICAgICovCisgIC8qICAgIHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBUVF9GYWNlIHN0cnVjdHVyZSBpcyBhbHNvIHVzZWQgYXMgYSBgcGFyZW50IGNsYXNzJyBmb3IgdGhlICAgICAqLworICAvKiAgICBPcGVuVHlwZS1DRkYgY2xhc3MgKFQyX0ZhY2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IFRUX0ZhY2VSZWNfKiAgVFRfRmFjZTsKKworCisgIC8qIGEgZnVuY3Rpb24gdHlwZSB1c2VkIGZvciB0aGUgdHJ1ZXR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaG9va3MgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0ludGVycHJldGVyKSggdm9pZCogIGV4ZWNfY29udGV4dCApOworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgVFRfTG9hZGVyUmVjXyogIFRUX0xvYWRlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRlcl9Hb3RvVGFibGVGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZWtzIGEgc3RyZWFtIHRvIHRoZSBzdGFydCBvZiBhIGdpdmVuIFRydWVUeXBlIHRhYmxlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFnICAgIDo6IEEgNC1ieXRlIHRhZyB1c2VkIHRvIG5hbWUgdGhlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsZW5ndGggOjogVGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgaW4gYnl0ZXMuICBTZXQgdG8gMCBpZiBub3QgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgZm9udCBmaWxlJ3Mgb3JpZ2luLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMpKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBsZW5ndGggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRlcl9TdGFydEdseXBoRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZWtzIGEgc3RyZWFtIHRvIHRoZSBzdGFydCBvZiBhIGdpdmVuIGdseXBoIGVsZW1lbnQsIGFuZCBvcGVucyBhICAqLworICAvKiAgICBmcmFtZSBmb3IgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkZXIgICAgICA6OiBUaGUgY3VycmVudCBUcnVlVHlwZSBnbHlwaCBsb2FkZXIgb2JqZWN0LiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoIGluZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggdG8gYWNjZXNzLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb2Zmc2V0ICAgICAgOjogVGhlIG9mZnNldCBvZiB0aGUgZ2x5cGggYWNjb3JkaW5nIHRvIHRoZSAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGBsb2NhdGlvbnMnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnl0ZV9jb3VudCAgOjogVGhlIHNpemUgb2YgdGhlIGZyYW1lIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSBlcXVpdmFsZW50IHRvIEZUX1NUUkVBTV9TRUVLKG9mZnNldCkgICAgICovCisgIC8qICAgIGZvbGxvd2VkIGJ5IEZUX0ZSQU1FX0VOVEVSKGJ5dGVfY291bnQpIHdpdGggdGhlIGxvYWRlcidzIHN0cmVhbSwgICAqLworICAvKiAgICBidXQgYWx0ZXJuYXRpdmUgZm9ybWF0cyAoZS5nLiBjb21wcmVzc2VkIG9uZXMpIG1pZ2h0IHVzZSBzb21ldGhpbmcgKi8KKyAgLyogICAgZGlmZmVyZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfTG9hZGVyX1N0YXJ0R2x5cGhGdW5jKSggVFRfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGJ5dGVfY291bnQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRlcl9SZWFkR2x5cGhGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJlYWRzIG9uZSBnbHlwaCBlbGVtZW50IChpdHMgaGVhZGVyLCBhIHNpbXBsZSBnbHlwaCwgb3IgYSAgICAgICAgICAqLworICAvKiAgICBjb21wb3NpdGUpIGZyb20gdGhlIGxvYWRlcidzIGN1cnJlbnQgc3RyZWFtIGZyYW1lLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkZXIgOjogVGhlIGN1cnJlbnQgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIG9iamVjdC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpUVF9Mb2FkZXJfUmVhZEdseXBoRnVuYykoIFRUX0xvYWRlciAgbG9hZGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Mb2FkZXJfRW5kR2x5cGhGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDbG9zZXMgdGhlIGN1cnJlbnQgbG9hZGVyIHN0cmVhbSBmcmFtZSBmb3IgdGhlIGdseXBoLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkZXIgOjogVGhlIGN1cnJlbnQgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIG9iamVjdC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKlRUX0xvYWRlcl9FbmRHbHlwaEZ1bmMpKCBUVF9Mb2FkZXIgIGxvYWRlciApOworCisKKyAgdHlwZWRlZiBlbnVtIFRUX1NiaXRUYWJsZVR5cGVfCisgIHsKKyAgICBUVF9TQklUX1RBQkxFX1RZUEVfTk9ORSA9IDAsCisgICAgVFRfU0JJVF9UQUJMRV9UWVBFX0VCTEMsIC8qIGBFQkxDJyAoTWljcm9zb2Z0KSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYGJsb2MnIChBcHBsZSkgICAgICAqLworICAgIFRUX1NCSVRfVEFCTEVfVFlQRV9DQkxDLCAvKiBgQ0JMQycgKEdvb2dsZSkgICAgICovCisgICAgVFRfU0JJVF9UQUJMRV9UWVBFX1NCSVgsIC8qIGBzYml4JyAoQXBwbGUpICAgICAgKi8KKworICAgIC8qIGRvIG5vdCByZW1vdmUgKi8KKyAgICBUVF9TQklUX1RBQkxFX1RZUEVfTUFYCisKKyAgfSBUVF9TYml0VGFibGVUeXBlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBGYWNlIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgVHJ1ZVR5cGUgZmFjZSBjbGFzcy4gIFRoZXNlIG9iamVjdHMgbW9kZWwgdGhlIHJlc29sdXRpb24gYW5kICAgKi8KKyAgLyogICAgcG9pbnQtc2l6ZSBpbmRlcGVuZGVudCBkYXRhIGZvdW5kIGluIGEgVHJ1ZVR5cGUgZm9udCBmaWxlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcm9vdCAgICAgICAgICAgICAgICAgOjogVGhlIGJhc2UgRlRfRmFjZSBzdHJ1Y3R1cmUsIG1hbmFnZWQgYnkgdGhlICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRjX2hlYWRlciAgICAgICAgICAgOjogVGhlIFRydWVUeXBlIGNvbGxlY3Rpb24gaGVhZGVyLCB1c2VkIHdoZW4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlIGlzIGEgYHR0YycgcmF0aGVyIHRoYW4gYSBgdHRmJy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3Igb3JkaW5hcnkgZm9udCBmaWxlcywgdGhlIGZpZWxkICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYHR0Y19oZWFkZXIuY291bnQnIGlzIHNldCB0byAwLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb3JtYXRfdGFnICAgICAgICAgICA6OiBUaGUgZm9udCBmb3JtYXQgdGFnLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV90YWJsZXMgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgVHJ1ZVR5cGUgdGFibGVzIGluIHRoaXMgZm9udCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRpcl90YWJsZXMgICAgICAgICAgIDo6IFRoZSBkaXJlY3Rvcnkgb2YgVHJ1ZVR5cGUgdGFibGVzIGZvciB0aGlzICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlYWRlciAgICAgICAgICAgICAgIDo6IFRoZSBmb250J3MgZm9udCBoZWFkZXIgKGBoZWFkJyB0YWJsZSkuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIG9uIGZvbnQgb3BlbmluZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcml6b250YWwgICAgICAgICAgIDo6IFRoZSBmb250J3MgaG9yaXpvbnRhbCBoZWFkZXIgKGBoaGVhJyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSkuICBUaGlzIGZpZWxkIGFsc28gY29udGFpbnMgdGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBob3Jpem9udGFsIG1ldHJpY3MgdGFibGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIChgaG10eCcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4X3Byb2ZpbGUgICAgICAgICAgOjogVGhlIGZvbnQncyBtYXhpbXVtIHByb2ZpbGUgdGFibGUuICBSZWFkIG9uICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgb3BlbmluZy4gIE5vdGUgdGhhdCBzb21lIG1heGltdW0gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgY2Fubm90IGJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhpcyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuICBXZSB0aHVzIGRlZmluZSBhZGRpdGlvbmFsIGZpZWxkcyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93IHRvIGhvbGQgdGhlIGNvbXB1dGVkIG1heGltYS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydGljYWxfaW5mbyAgICAgICAgOjogQSBib29sZWFuIHdoaWNoIGlzIHNldCB3aGVuIHRoZSBmb250IGZpbGUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHZlcnRpY2FsIG1ldHJpY3MuICBJZiBub3QsIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgYHZlcnRpY2FsJyBmaWVsZCBpcyAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJ0aWNhbCAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIHZlcnRpY2FsIGhlYWRlciAoYHZoZWEnIHRhYmxlKS4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSBhc3NvY2lhdGVkICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG1ldHJpY3MgdGFibGUgKGB2bXR4JyksIGlmIGZvdW5kLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQ6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpZWxkIGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIGlmIHRoZSBgdmVydGljYWxfaW5mbycgZmllbGQgaXMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX25hbWVzICAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBuYW1lIHJlY29yZHMgd2l0aGluIHRoaXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbmFtZV90YWJsZSAgICAgICAgICAgOjogVGhlIHRhYmxlIG9mIG5hbWUgcmVjb3JkcyAoYG5hbWUnKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvczIgICAgICAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIE9TLzIgdGFibGUgKGBPUy8yJykuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvc3RzY3JpcHQgICAgICAgICAgIDo6IFRoZSBmb250J3MgUG9zdFNjcmlwdCB0YWJsZSAoYHBvc3QnICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSkuICBUaGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcyBhcmUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGxvYWRlZCBieSB0aGUgZHJpdmVyIG9uIGZhY2Ugb3BlbmluZy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgYHR0cG9zdCcgbW9kdWxlIGZvciBtb3JlIGRldGFpbHMuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY21hcF90YWJsZSAgICAgICAgICAgOjogQWRkcmVzcyBvZiB0aGUgZmFjZSdzIGBjbWFwJyBTRk5UIHRhYmxlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1lbW9yeSAoaXQncyBhbiBleHRyYWN0ZWQgZnJhbWUpLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY21hcF9zaXplICAgICAgICAgICAgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGBjbWFwX3RhYmxlJyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBhYm92ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ290b190YWJsZSAgICAgICAgICAgOjogQSBmdW5jdGlvbiBjYWxsZWQgYnkgZWFjaCBUcnVlVHlwZSB0YWJsZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlciB0byBwb3NpdGlvbiBhIHN0cmVhbSdzIGN1cnNvciB0byAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhcnQgb2YgYSBnaXZlbiB0YWJsZSBhY2NvcmRpbmcgdG8gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzIHRhZy4gIEl0IGRlZmF1bHRzIHRvIFRUX0dvdG9fRmFjZSBidXQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBkaWZmZXJlbnQgZm9yIHN0cmFuZ2UgZm9ybWF0cyAoZS5nLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIDQyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFjY2Vzc19nbHlwaF9mcmFtZSAgIDo6IEEgZnVuY3Rpb24gdXNlZCB0byBhY2Nlc3MgdGhlIGZyYW1lIG9mIGEgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBnbHlwaCB3aXRoaW4gdGhlIGZhY2UncyBmb250IGZpbGUuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZvcmdldF9nbHlwaF9mcmFtZSAgIDo6IEEgZnVuY3Rpb24gdXNlZCB0byBmb3JnZXQgdGhlIGZyYW1lIG9mIGEgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBnbHlwaCB3aGVuIGFsbCBkYXRhIGhhcyBiZWVuIGxvYWRlZC4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlYWRfZ2x5cGhfaGVhZGVyICAgIDo6IEEgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgZ2x5cGggaGVhZGVyLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGNhbGxlZCBiZXR3ZWVuIGFuIGBhY2Nlc3MnIGFuZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZvcmdldCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByZWFkX3NpbXBsZV9nbHlwaCAgICA6OiBBIGZ1bmN0aW9uIHVzZWQgdG8gcmVhZCBhIHNpbXBsZSBnbHlwaC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGhlYWRlciB3YXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQsIGFuZCBiZWZvcmUgdGhlIGBmb3JnZXQnLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmVhZF9jb21wb3NpdGVfZ2x5cGggOjogQSBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBjb21wb3NpdGUgZ2x5cGguICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBoZWFkZXIgd2FzICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLCBhbmQgYmVmb3JlIHRoZSBgZm9yZ2V0Jy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNmbnQgICAgICAgICAgICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgU0ZOVCBzZXJ2aWNlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHNuYW1lcyAgICAgICAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBQb3N0U2NyaXB0IG5hbWVzIHNlcnZpY2UuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZG14ICAgICAgICAgICAgICAgICA6OiBUaGUgZmFjZSdzIGhvcml6b250YWwgZGV2aWNlIG1ldHJpY3MgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBoZG14JyB0YWJsZSkuICBUaGlzIHRhYmxlIGlzIG9wdGlvbmFsIGluICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2FzcCAgICAgICAgICAgICAgICAgOjogVGhlIGdyaWQtZml0dGluZyBhbmQgc2NhbGluZyBwcm9wZXJ0aWVzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlIChgZ2FzcCcpLiAgVGhpcyB0YWJsZSBpcyBvcHRpb25hbCBpbiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZS9PcGVuVHlwZSBmb250cy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBjbHQgICAgICAgICAgICAgICAgIDo6IFRoZSBgcGNsdCcgU0ZOVCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3NiaXRfc2NhbGVzICAgICAgOjogVGhlIG51bWJlciBvZiBzYml0IHNjYWxlcyBmb3IgdGhpcyBmb250LiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzYml0X3NjYWxlcyAgICAgICAgICA6OiBBcnJheSBvZiBzYml0IHNjYWxlcyBlbWJlZGRlZCBpbiB0aGlzICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC4gIFRoaXMgdGFibGUgaXMgb3B0aW9uYWwgaW4gYSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnQuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zdHNjcmlwdF9uYW1lcyAgICAgOjogQSB0YWJsZSB1c2VkIHRvIHN0b3JlIHRoZSBQb3N0c2NyaXB0IG5hbWVzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mICB0aGUgZ2x5cGhzIGZvciB0aGlzIGZvbnQuICBTZWUgdGhlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlICBgdHRjb25maWcuaCcgZm9yIGNvbW1lbnRzIG9uIHRoZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIG9wdGlvbi4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fbG9jYXRpb25zICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBoIGxvY2F0aW9ucyBpbiB0aGlzICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgZmlsZS4gIFRoaXMgc2hvdWxkIGJlICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUgbnVtYmVyIG9mIGdseXBocy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udHMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2xvY2F0aW9ucyAgICAgIDo6IEFuIGFycmF5IG9mIGxvbmdzLiAgVGhlc2UgYXJlIG9mZnNldHMgdG8gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBkYXRhIHdpdGhpbiB0aGUgYGdseWYnIHRhYmxlLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWdub3JlZCBmb3IgVHlwZSAyIGZvbnQgZmFjZXMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlmX2xlbiAgICAgICAgICAgICA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBgZ2x5ZicgdGFibGUuICBOZWVkZWQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1hbGZvcm1lZCBgbG9jYScgdGFibGVzLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmb250X3Byb2dyYW1fc2l6ZSAgICA6OiBTaXplIGluIGJ5dGVjb2RlcyBvZiB0aGUgZmFjZSdzIGZvbnQgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS4gIDAgaWYgbm9uZSBkZWZpbmVkLiAgSWdub3JlZCBmb3IgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMiBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZm9udF9wcm9ncmFtICAgICAgICAgOjogVGhlIGZhY2UncyBmb250IHByb2dyYW0gKGJ5dGVjb2RlIHN0cmVhbSkgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGF0IGxvYWQgdGltZSwgYWxzbyB1c2VkIGR1cmluZyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCByZW5kZXJpbmcuICBDb21lcyBmcm9tIHRoZSBgZnBnbScgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udCBmb250cy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdnRfcHJvZ3JhbV9zaXplICAgICA6OiBUaGUgc2l6ZSBpbiBieXRlY29kZXMgb2YgdGhlIGZhY2UncyBjdnQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdnRfcHJvZ3JhbSAgICAgICAgICA6OiBUaGUgZmFjZSdzIGN2dCBwcm9ncmFtIChieXRlY29kZSBzdHJlYW0pICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZWFjaCB0aW1lIGFuIGluc3RhbmNlL3NpemUgaXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQvcmVzZXQuICBDb21lcyBmcm9tIHRoZSBgcHJlcCcgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN2dF9zaXplICAgICAgICAgICAgIDo6IFNpemUgb2YgdGhlIGNvbnRyb2wgdmFsdWUgdGFibGUgKGluICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzKS4gICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN2dCAgICAgICAgICAgICAgICAgIDo6IFRoZSBmYWNlJ3Mgb3JpZ2luYWwgY29udHJvbCB2YWx1ZSB0YWJsZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29yZGluYXRlcyBhcmUgZXhwcmVzc2VkIGluIHVuc2NhbGVkIGZvbnQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMuICBDb21lcyBmcm9tIHRoZSBgY3Z0ICcgdGFibGUuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2tlcm5fcGFpcnMgICAgICAgOjogVGhlIG51bWJlciBvZiBrZXJuaW5nIHBhaXJzIHByZXNlbnQgaW4gdGhlICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgZmlsZS4gIFRoZSBlbmdpbmUgb25seSBsb2FkcyB0aGUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBob3Jpem9udGFsIGZvcm1hdCAwIGtlcm4gdGFibGUgaXQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZHMgaW4gdGhlIGZvbnQgZmlsZS4gIElnbm9yZWQgZm9yICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMiBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAga2Vybl90YWJsZV9pbmRleCAgICAgOjogVGhlIGluZGV4IG9mIHRoZSBrZXJuaW5nIHRhYmxlIGluIHRoZSBmb250ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgZGlyZWN0b3J5LiAgSWdub3JlZCBmb3IgVHlwZSAyICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGludGVycHJldGVyICAgICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRlcnMgZmllbGQgaXMgYWxzbyB1c2VkIHRvIGhvb2sgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlYnVnZ2VyIGluIGB0dGRlYnVnJy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1bnBhdGVudGVkX2hpbnRpbmcgICA6OiBJZiB0cnVlLCB1c2Ugb25seSB1bnBhdGVudGVkIG1ldGhvZHMgaW4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkb2JsZW5kICAgICAgICAgICAgICA6OiBBIGJvb2xlYW4gd2hpY2ggaXMgc2V0IGlmIHRoZSBmb250IHNob3VsZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYmxlbmRlZCAodGhpcyBpcyBmb3IgR1ggdmFyKS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBibGVuZCAgICAgICAgICAgICAgICA6OiBDb250YWlucyB0aGUgZGF0YSBuZWVkZWQgdG8gY29udHJvbCBHWCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uIHRhYmxlcyAocmF0aGVyIGxpa2UgTXVsdGlwbGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc3RlciBkYXRhKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXh0cmEgICAgICAgICAgICAgICAgOjogUmVzZXJ2ZWQgZm9yIHRoaXJkLXBhcnR5IGZvbnQgZHJpdmVycy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb3N0c2NyaXB0X25hbWUgICAgICA6OiBUaGUgUFMgbmFtZSBvZiB0aGUgZm9udC4gIFVzZWQgYnkgdGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdHNjcmlwdCBuYW1lIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfRmFjZVJlY18KKyAgeworICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICByb290OworCisgICAgVFRDX0hlYWRlclJlYyAgICAgICAgIHR0Y19oZWFkZXI7CisKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgZm9ybWF0X3RhZzsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgbnVtX3RhYmxlczsKKyAgICBUVF9UYWJsZSAgICAgICAgICAgICAgZGlyX3RhYmxlczsKKworICAgIFRUX0hlYWRlciAgICAgICAgICAgICBoZWFkZXI7ICAgICAgIC8qIFRydWVUeXBlIGhlYWRlciB0YWJsZSAgICAgICAgICAqLworICAgIFRUX0hvcmlIZWFkZXIgICAgICAgICBob3Jpem9udGFsOyAgIC8qIFRydWVUeXBlIGhvcml6b250YWwgaGVhZGVyICAgICAqLworCisgICAgVFRfTWF4UHJvZmlsZSAgICAgICAgIG1heF9wcm9maWxlOworCisgICAgRlRfQm9vbCAgICAgICAgICAgICAgIHZlcnRpY2FsX2luZm87CisgICAgVFRfVmVydEhlYWRlciAgICAgICAgIHZlcnRpY2FsOyAgICAgLyogVFQgVmVydGljYWwgaGVhZGVyLCBpZiBwcmVzZW50ICovCisKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgbnVtX25hbWVzOyAgICAvKiBudW1iZXIgb2YgbmFtZSByZWNvcmRzICAqLworICAgIFRUX05hbWVUYWJsZVJlYyAgICAgICBuYW1lX3RhYmxlOyAgIC8qIG5hbWUgdGFibGUgICAgICAgICAgICAgICovCisKKyAgICBUVF9PUzIgICAgICAgICAgICAgICAgb3MyOyAgICAgICAgICAvKiBUcnVlVHlwZSBPUy8yIHRhYmxlICAgICAgICAgICAgKi8KKyAgICBUVF9Qb3N0c2NyaXB0ICAgICAgICAgcG9zdHNjcmlwdDsgICAvKiBUcnVlVHlwZSBQb3N0c2NyaXB0IHRhYmxlICAgICAgKi8KKworICAgIEZUX0J5dGUqICAgICAgICAgICAgICBjbWFwX3RhYmxlOyAgIC8qIGV4dHJhY3RlZCBgY21hcCcgdGFibGUgKi8KKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgY21hcF9zaXplOworCisgICAgVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMgICBnb3RvX3RhYmxlOworCisgICAgVFRfTG9hZGVyX1N0YXJ0R2x5cGhGdW5jICBhY2Nlc3NfZ2x5cGhfZnJhbWU7CisgICAgVFRfTG9hZGVyX0VuZEdseXBoRnVuYyAgICBmb3JnZXRfZ2x5cGhfZnJhbWU7CisgICAgVFRfTG9hZGVyX1JlYWRHbHlwaEZ1bmMgICByZWFkX2dseXBoX2hlYWRlcjsKKyAgICBUVF9Mb2FkZXJfUmVhZEdseXBoRnVuYyAgIHJlYWRfc2ltcGxlX2dseXBoOworICAgIFRUX0xvYWRlcl9SZWFkR2x5cGhGdW5jICAgcmVhZF9jb21wb3NpdGVfZ2x5cGg7CisKKyAgICAvKiBhIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIFNGTlRfSW50ZXJmYWNlIHRhYmxlIHVzZWQgdG8gbG9hZCAqLworICAgIC8qIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMgaW4gdGhlIGZhY2Ugb2JqZWN0ICAgICAgICAgICAgICAgICovCisgICAgdm9pZCogICAgICAgICAgICAgICAgIHNmbnQ7CisKKyAgICAvKiBhIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIEZUX1NlcnZpY2VfUHNDTWFwc1JlYyB0YWJsZSB1c2VkIHRvICovCisgICAgLyogaGFuZGxlIGdseXBoIG5hbWVzIDwtPiB1bmljb2RlICYgTWFjIHZhbHVlcyAgICAgICAgICAgICAgICAgICAqLworICAgIHZvaWQqICAgICAgICAgICAgICAgICBwc25hbWVzOworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIE9wdGlvbmFsIFRydWVUeXBlL09wZW5UeXBlIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgLyogZ3JpZC1maXR0aW5nIGFuZCBzY2FsaW5nIHRhYmxlICovCisgICAgVFRfR2FzcFJlYyAgICAgICAgICAgIGdhc3A7ICAgICAgICAgICAgICAgICAvKiB0aGUgYGdhc3AnIHRhYmxlICovCisKKyAgICAvKiBQQ0wgNSB0YWJsZSAqLworICAgIFRUX1BDTFQgICAgICAgICAgICAgICBwY2x0OworCisgICAgLyogZW1iZWRkZWQgYml0bWFwcyBzdXBwb3J0ICovCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIG51bV9zYml0X3NjYWxlczsKKyAgICBUVF9TQml0X1NjYWxlICAgICAgICAgc2JpdF9zY2FsZXM7CisKKyAgICAvKiBwb3N0c2NyaXB0IG5hbWVzIHRhYmxlICovCisgICAgVFRfUG9zdF9OYW1lc1JlYyAgICAgIHBvc3RzY3JpcHRfbmFtZXM7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVHJ1ZVR5cGUtc3BlY2lmaWMgZmllbGRzIChpZ25vcmVkIGJ5IHRoZSBPVEYtVHlwZTIgZHJpdmVyKSAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAvKiB0aGUgZm9udCBwcm9ncmFtLCBpZiBhbnkgKi8KKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgZm9udF9wcm9ncmFtX3NpemU7CisgICAgRlRfQnl0ZSogICAgICAgICAgICAgIGZvbnRfcHJvZ3JhbTsKKworICAgIC8qIHRoZSBjdnQgcHJvZ3JhbSwgaWYgYW55ICovCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIGN2dF9wcm9ncmFtX3NpemU7CisgICAgRlRfQnl0ZSogICAgICAgICAgICAgIGN2dF9wcm9ncmFtOworCisgICAgLyogdGhlIG9yaWdpbmFsLCB1bnNjYWxlZCwgY29udHJvbCB2YWx1ZSB0YWJsZSAqLworICAgIEZUX1VMb25nICAgICAgICAgICAgICBjdnRfc2l6ZTsKKyAgICBGVF9TaG9ydCogICAgICAgICAgICAgY3Z0OworCisgICAgLyogQSBwb2ludGVyIHRvIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciB0byB1c2UuICBUaGlzIGlzIGFsc28gKi8KKyAgICAvKiB1c2VkIHRvIGhvb2sgdGhlIGRlYnVnZ2VyIGZvciB0aGUgYHR0ZGVidWcnIHV0aWxpdHkuICAgICAgICAqLworICAgIFRUX0ludGVycHJldGVyICAgICAgICBpbnRlcnByZXRlcjsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgLyogVXNlIHVucGF0ZW50ZWQgaGludGluZyBvbmx5LiAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICAgICB1bnBhdGVudGVkX2hpbnRpbmc7CisjZW5kaWYKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogT3RoZXIgdGFibGVzIG9yIGZpZWxkcy4gVGhpcyBpcyB1c2VkIGJ5IGRlcml2YXRpdmUgZm9ybWF0cyBsaWtlICAgICAqLworICAgIC8qIE9wZW5UeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgRlRfR2VuZXJpYyAgICAgICAgICAgIGV4dHJhOworCisgICAgY29uc3QgY2hhciogICAgICAgICAgIHBvc3RzY3JpcHRfbmFtZTsKKworICAgIEZUX1VMb25nICAgICAgICAgICAgICBnbHlmX2xlbjsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICBGVF9Cb29sICAgICAgICAgICAgICAgZG9ibGVuZDsKKyAgICBHWF9CbGVuZCAgICAgICAgICAgICAgYmxlbmQ7CisjZW5kaWYKKworICAgIC8qIHNpbmNlIHZlcnNpb24gMi4yICovCisKKyAgICBGVF9CeXRlKiAgICAgICAgICAgICAgaG9yel9tZXRyaWNzOworICAgIEZUX1VMb25nICAgICAgICAgICAgICBob3J6X21ldHJpY3Nfc2l6ZTsKKworICAgIEZUX0J5dGUqICAgICAgICAgICAgICB2ZXJ0X21ldHJpY3M7CisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIHZlcnRfbWV0cmljc19zaXplOworCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIG51bV9sb2NhdGlvbnM7IC8qIGluIGJyb2tlbiBUVEYsIGdpZCA+IDB4RkZGRiAqLworICAgIEZUX0J5dGUqICAgICAgICAgICAgICBnbHlwaF9sb2NhdGlvbnM7CisKKyAgICBGVF9CeXRlKiAgICAgICAgICAgICAgaGRteF90YWJsZTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgaGRteF90YWJsZV9zaXplOworICAgIEZUX1VJbnQgICAgICAgICAgICAgICBoZG14X3JlY29yZF9jb3VudDsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgaGRteF9yZWNvcmRfc2l6ZTsKKyAgICBGVF9CeXRlKiAgICAgICAgICAgICAgaGRteF9yZWNvcmRfc2l6ZXM7CisKKyAgICBGVF9CeXRlKiAgICAgICAgICAgICAgc2JpdF90YWJsZTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgc2JpdF90YWJsZV9zaXplOworICAgIFRUX1NiaXRUYWJsZVR5cGUgICAgICBzYml0X3RhYmxlX3R5cGU7CisgICAgRlRfVUludCAgICAgICAgICAgICAgIHNiaXRfbnVtX3N0cmlrZXM7CisKKyAgICBGVF9CeXRlKiAgICAgICAgICAgICAga2Vybl90YWJsZTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAga2Vybl90YWJsZV9zaXplOworICAgIEZUX1VJbnQgICAgICAgICAgICAgICBudW1fa2Vybl90YWJsZXM7CisgICAgRlRfVUludDMyICAgICAgICAgICAgIGtlcm5fYXZhaWxfYml0czsKKyAgICBGVF9VSW50MzIgICAgICAgICAgICAga2Vybl9vcmRlcl9iaXRzOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9CREYKKyAgICBUVF9CREZSZWMgICAgICAgICAgICAgYmRmOworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fQkRGICovCisKKyAgICAvKiBzaW5jZSAyLjMuMCAqLworICAgIEZUX1VMb25nICAgICAgICAgICAgICBob3J6X21ldHJpY3Nfb2Zmc2V0OworICAgIEZUX1VMb25nICAgICAgICAgICAgICB2ZXJ0X21ldHJpY3Nfb2Zmc2V0OworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgLyogc2luY2UgMi40LjEyICovCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIHNwaF9mb3VuZF9mdW5jX2ZsYWdzOyAvKiBzcGVjaWFsIGZ1bmN0aW9ucyBmb3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHRoaXMgZmFjZSAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgICAgc3BoX2NvbXBhdGliaWxpdHlfbW9kZTsKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICB9IFRUX0ZhY2VSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgVFRfR2x5cGhab25lUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgQSBnbHlwaCB6b25lIGlzIHVzZWQgdG8gbG9hZCwgc2NhbGUgYW5kIGhpbnQgZ2x5cGggb3V0bGluZSAgICAgICAgKi8KKyAgLyogICAgIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIG1lbW9yeSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgbWF4X3BvaW50cyAgIDo6IFRoZSBtYXhpbXVtIHNpemUgaW4gcG9pbnRzIG9mIHRoZSB6b25lLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBtYXhfY29udG91cnMgOjogTWF4IHNpemUgaW4gbGlua3MgY29udG91cnMgb2YgdGhlIHpvbmUuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIG5fcG9pbnRzICAgICA6OiBUaGUgY3VycmVudCBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSB6b25lLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgbl9jb250b3VycyAgIDo6IFRoZSBjdXJyZW50IG51bWJlciBvZiBjb250b3VycyBpbiB0aGUgem9uZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBvcmcgICAgICAgICAgOjogVGhlIG9yaWdpbmFsIGdseXBoIGNvb3JkaW5hdGVzIChmb250ICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIHVuaXRzL3NjYWxlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBjdXIgICAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggY29vcmRpbmF0ZXMgKHNjYWxlZC9oaW50ZWQpLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHRhZ3MgICAgICAgICA6OiBUaGUgcG9pbnQgY29udHJvbCB0YWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY29udG91cnMgICAgIDo6IFRoZSBjb250b3VycyBlbmQgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBmaXJzdF9wb2ludCAgOjogT2Zmc2V0IG9mIHRoZSBjdXJyZW50IHN1YmdseXBoJ3MgZmlyc3QgcG9pbnQuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0dseXBoWm9uZVJlY18KKyAgeworICAgIEZUX01lbW9yeSAgIG1lbW9yeTsKKyAgICBGVF9VU2hvcnQgICBtYXhfcG9pbnRzOworICAgIEZUX1Nob3J0ICAgIG1heF9jb250b3VyczsKKyAgICBGVF9VU2hvcnQgICBuX3BvaW50czsgICAgLyogbnVtYmVyIG9mIHBvaW50cyBpbiB6b25lICAgICovCisgICAgRlRfU2hvcnQgICAgbl9jb250b3VyczsgIC8qIG51bWJlciBvZiBjb250b3VycyAgICAgICAgICAqLworCisgICAgRlRfVmVjdG9yKiAgb3JnOyAgICAgICAgIC8qIG9yaWdpbmFsIHBvaW50IGNvb3JkaW5hdGVzICAqLworICAgIEZUX1ZlY3RvciogIGN1cjsgICAgICAgICAvKiBjdXJyZW50IHBvaW50IGNvb3JkaW5hdGVzICAgKi8KKyAgICBGVF9WZWN0b3IqICBvcnVzOyAgICAgICAgLyogb3JpZ2luYWwgKHVuc2NhbGVkKSBwb2ludCBjb29yZGluYXRlcyAqLworCisgICAgRlRfQnl0ZSogICAgdGFnczsgICAgICAgIC8qIGN1cnJlbnQgdG91Y2ggZmxhZ3MgICAgICAgICAqLworICAgIEZUX1VTaG9ydCogIGNvbnRvdXJzOyAgICAvKiBjb250b3VyIGVuZCBwb2ludHMgICAgICAgICAgKi8KKworICAgIEZUX1VTaG9ydCAgIGZpcnN0X3BvaW50OyAvKiBvZmZzZXQgb2YgZmlyc3QgKCMwKSBwb2ludCAgKi8KKworICB9IFRUX0dseXBoWm9uZVJlYywgKlRUX0dseXBoWm9uZTsKKworCisgIC8qIGhhbmRsZSB0byBleGVjdXRpb24gY29udGV4dCAqLworICB0eXBlZGVmIHN0cnVjdCBUVF9FeGVjQ29udGV4dFJlY18qICBUVF9FeGVjQ29udGV4dDsKKworICAvKiBnbHlwaCBsb2FkZXIgc3RydWN0dXJlICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9Mb2FkZXJSZWNfCisgIHsKKyAgICBGVF9GYWNlICAgICAgICAgIGZhY2U7CisgICAgRlRfU2l6ZSAgICAgICAgICBzaXplOworICAgIEZUX0dseXBoU2xvdCAgICAgZ2x5cGg7CisgICAgRlRfR2x5cGhMb2FkZXIgICBnbG9hZGVyOworCisgICAgRlRfVUxvbmcgICAgICAgICBsb2FkX2ZsYWdzOworICAgIEZUX1VJbnQgICAgICAgICAgZ2x5cGhfaW5kZXg7CisKKyAgICBGVF9TdHJlYW0gICAgICAgIHN0cmVhbTsKKyAgICBGVF9JbnQgICAgICAgICAgIGJ5dGVfbGVuOworCisgICAgRlRfU2hvcnQgICAgICAgICBuX2NvbnRvdXJzOworICAgIEZUX0JCb3ggICAgICAgICAgYmJveDsKKyAgICBGVF9JbnQgICAgICAgICAgIGxlZnRfYmVhcmluZzsKKyAgICBGVF9JbnQgICAgICAgICAgIGFkdmFuY2U7CisgICAgRlRfSW50ICAgICAgICAgICBsaW5lYXI7CisgICAgRlRfQm9vbCAgICAgICAgICBsaW5lYXJfZGVmOworICAgIEZUX1ZlY3RvciAgICAgICAgcHAxOworICAgIEZUX1ZlY3RvciAgICAgICAgcHAyOworCisgICAgRlRfVUxvbmcgICAgICAgICBnbHlmX29mZnNldDsKKworICAgIC8qIHRoZSB6b25lIHdoZXJlIHdlIGxvYWQgb3VyIGdseXBocyAqLworICAgIFRUX0dseXBoWm9uZVJlYyAgYmFzZTsKKyAgICBUVF9HbHlwaFpvbmVSZWMgIHpvbmU7CisKKyAgICBUVF9FeGVjQ29udGV4dCAgIGV4ZWM7CisgICAgRlRfQnl0ZSogICAgICAgICBpbnN0cnVjdGlvbnM7CisgICAgRlRfVUxvbmcgICAgICAgICBpbnNfcG9zOworCisgICAgLyogZm9yIHBvc3NpYmxlIGV4dGVuc2liaWxpdHkgaW4gb3RoZXIgZm9ybWF0cyAqLworICAgIHZvaWQqICAgICAgICAgICAgb3RoZXI7CisKKyAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuMS44ICovCisgICAgRlRfSW50ICAgICAgICAgICB0b3BfYmVhcmluZzsKKyAgICBGVF9JbnQgICAgICAgICAgIHZhZHZhbmNlOworICAgIEZUX1ZlY3RvciAgICAgICAgcHAzOworICAgIEZUX1ZlY3RvciAgICAgICAgcHA0OworCisgICAgLyogc2luY2UgdmVyc2lvbiAyLjIuMSAqLworICAgIEZUX0J5dGUqICAgICAgICAgY3Vyc29yOworICAgIEZUX0J5dGUqICAgICAgICAgbGltaXQ7CisKKyAgfSBUVF9Mb2FkZXJSZWM7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVFRZUEVTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvdDF0YWJsZXMuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3QxdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTQxNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3QxdGFibGVzLmgKQEAgLTAsMCArMSw3NjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxdGFibGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBCYXNpYyBUeXBlIDEvVHlwZSAyIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAqLworLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UMVRBQkxFU19IX18KKyNkZWZpbmUgX19UMVRBQkxFU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0eXBlMV90YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUeXBlIDEgVGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUeXBlfjEgKFBvc3RTY3JpcHQpIHNwZWNpZmljIGZvbnQgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgVHlwZSAxLXNwZWNpZmljIHRhYmxlcywgICAgKi8KKyAgLyogICAgaW5jbHVkaW5nIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBvdGhlciBQb3N0U2NyaXB0IGZvbnQgZm9ybWF0cy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRm9udEluZm9SZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0ZvbnRJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19Qcml2YXRlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfUHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDSURfRmFjZURpY3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0lEX0ZhY2VEaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9GYWNlSW5mb1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDSURfRmFjZUluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0hhc19QU19HbHlwaF9OYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfUFNfRm9udF9JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1BTX0ZvbnRfUHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9QU19Gb250X1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQmxlbmRfRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0VuY29kaW5nVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19EaWN0X0tleXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogTm90ZSB0aGF0IHdlIHNlcGFyYXRlIGZvbnQgZGF0YSBpbiBQU19Gb250SW5mb1JlYyBhbmQgUFNfUHJpdmF0ZVJlYyAqLworICAvKiBzdHJ1Y3R1cmVzIGluIG9yZGVyIHRvIHN1cHBvcnQgTXVsdGlwbGUgTWFzdGVyIGZvbnRzLiAgICAgICAgICAgICAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19Gb250SW5mb1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHlwZX4xIG9yIFR5cGV+MiBGb250SW5mbyBkaWN0aW9uYXJ5LiAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGZvciBNdWx0aXBsZSBNYXN0ZXIgZm9udHMsIGVhY2ggaW5zdGFuY2UgaGFzIGl0cyBvd24gICAgICovCisgIC8qICAgIEZvbnRJbmZvIGRpY3Rpb25hcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0ZvbnRJbmZvUmVjXworICB7CisgICAgRlRfU3RyaW5nKiAgdmVyc2lvbjsKKyAgICBGVF9TdHJpbmcqICBub3RpY2U7CisgICAgRlRfU3RyaW5nKiAgZnVsbF9uYW1lOworICAgIEZUX1N0cmluZyogIGZhbWlseV9uYW1lOworICAgIEZUX1N0cmluZyogIHdlaWdodDsKKyAgICBGVF9Mb25nICAgICBpdGFsaWNfYW5nbGU7CisgICAgRlRfQm9vbCAgICAgaXNfZml4ZWRfcGl0Y2g7CisgICAgRlRfU2hvcnQgICAgdW5kZXJsaW5lX3Bvc2l0aW9uOworICAgIEZUX1VTaG9ydCAgIHVuZGVybGluZV90aGlja25lc3M7CisKKyAgfSBQU19Gb250SW5mb1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0ZvbnRJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgQFBTX0ZvbnRJbmZvUmVjIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgUFNfRm9udEluZm9SZWNfKiAgUFNfRm9udEluZm87CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9Gb250SW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byBAUFNfRm9udEluZm9SZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dCAgKi8KKyAgLyogICAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgICovCisgIC8qICAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBQU19Gb250SW5mb1JlYyAgVDFfRm9udEluZm87CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19Qcml2YXRlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHlwZX4xIG9yIFR5cGV+MiBwcml2YXRlIGRpY3Rpb25hcnkuICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGZvciBNdWx0aXBsZSBNYXN0ZXIgZm9udHMsIGVhY2ggaW5zdGFuY2UgaGFzIGl0cyBvd24gICAgICovCisgIC8qICAgIFByaXZhdGUgZGljdGlvbmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX1ByaXZhdGVSZWNfCisgIHsKKyAgICBGVF9JbnQgICAgIHVuaXF1ZV9pZDsKKyAgICBGVF9JbnQgICAgIGxlbklWOworCisgICAgRlRfQnl0ZSAgICBudW1fYmx1ZV92YWx1ZXM7CisgICAgRlRfQnl0ZSAgICBudW1fb3RoZXJfYmx1ZXM7CisgICAgRlRfQnl0ZSAgICBudW1fZmFtaWx5X2JsdWVzOworICAgIEZUX0J5dGUgICAgbnVtX2ZhbWlseV9vdGhlcl9ibHVlczsKKworICAgIEZUX1Nob3J0ICAgYmx1ZV92YWx1ZXNbMTRdOworICAgIEZUX1Nob3J0ICAgb3RoZXJfYmx1ZXNbMTBdOworCisgICAgRlRfU2hvcnQgICBmYW1pbHlfYmx1ZXMgICAgICBbMTRdOworICAgIEZUX1Nob3J0ICAgZmFtaWx5X290aGVyX2JsdWVzWzEwXTsKKworICAgIEZUX0ZpeGVkICAgYmx1ZV9zY2FsZTsKKyAgICBGVF9JbnQgICAgIGJsdWVfc2hpZnQ7CisgICAgRlRfSW50ICAgICBibHVlX2Z1eno7CisKKyAgICBGVF9VU2hvcnQgIHN0YW5kYXJkX3dpZHRoWzFdOworICAgIEZUX1VTaG9ydCAgc3RhbmRhcmRfaGVpZ2h0WzFdOworCisgICAgRlRfQnl0ZSAgICBudW1fc25hcF93aWR0aHM7CisgICAgRlRfQnl0ZSAgICBudW1fc25hcF9oZWlnaHRzOworICAgIEZUX0Jvb2wgICAgZm9yY2VfYm9sZDsKKyAgICBGVF9Cb29sICAgIHJvdW5kX3N0ZW1fdXA7CisKKyAgICBGVF9TaG9ydCAgIHNuYXBfd2lkdGhzIFsxM107ICAvKiBpbmNsdWRpbmcgc3RkIHdpZHRoICAqLworICAgIEZUX1Nob3J0ICAgc25hcF9oZWlnaHRzWzEzXTsgIC8qIGluY2x1ZGluZyBzdGQgaGVpZ2h0ICovCisKKyAgICBGVF9GaXhlZCAgIGV4cGFuc2lvbl9mYWN0b3I7CisKKyAgICBGVF9Mb25nICAgIGxhbmd1YWdlX2dyb3VwOworICAgIEZUX0xvbmcgICAgcGFzc3dvcmQ7CisKKyAgICBGVF9TaG9ydCAgIG1pbl9mZWF0dXJlWzJdOworCisgIH0gUFNfUHJpdmF0ZVJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX1ByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgQFBTX1ByaXZhdGVSZWMgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgUFNfUHJpdmF0ZVJlY18qICBQU19Qcml2YXRlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfUHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byBAUFNfUHJpdmF0ZVJlYy4gIEl0IGlzIGRlcHJlY2F0ZWQgYnV0ICAgICovCisgIC8qICAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgICAqLworICAvKiAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgUFNfUHJpdmF0ZVJlYyAgVDFfUHJpdmF0ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JsZW5kX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc2V0IG9mIGZsYWdzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggZmllbGRzIGFyZSBwcmVzZW50IGluIGEgICAgICAqLworICAvKiAgICBnaXZlbiBibGVuZCBkaWN0aW9uYXJ5IChmb250IGluZm8gb3IgcHJpdmF0ZSkuICBVc2VkIHRvIHN1cHBvcnQgICAgKi8KKyAgLyogICAgTXVsdGlwbGUgTWFzdGVycyBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQkxFTkRfVU5ERVJMSU5FX1BPU0lUSU9OIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JMRU5EX1VOREVSTElORV9USElDS05FU1MgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9CTEVORF9JVEFMSUNfQU5HTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQkxFTkRfQkxVRV9WQUxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JMRU5EX09USEVSX0JMVUVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9CTEVORF9TVEFOREFSRF9XSURUSCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQkxFTkRfU1RBTkRBUkRfSEVJR0hUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JMRU5EX1NURU1fU05BUF9XSURUSFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9CTEVORF9TVEVNX1NOQVBfSEVJR0hUUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQkxFTkRfQkxVRV9TQ0FMRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JMRU5EX0JMVUVfU0hJRlQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9CTEVORF9GQU1JTFlfQkxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfQkxFTkRfRkFNSUxZX09USEVSX0JMVUVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0JMRU5EX0ZPUkNFX0JPTEQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBUMV9CbGVuZF9GbGFnc18KKyAgeworICAgIC8qIHJlcXVpcmVkIGZpZWxkcyBpbiBhIEZvbnRJbmZvIGJsZW5kIGRpY3Rpb25hcnkgKi8KKyAgICBUMV9CTEVORF9VTkRFUkxJTkVfUE9TSVRJT04gPSAwLAorICAgIFQxX0JMRU5EX1VOREVSTElORV9USElDS05FU1MsCisgICAgVDFfQkxFTkRfSVRBTElDX0FOR0xFLAorCisgICAgLyogcmVxdWlyZWQgZmllbGRzIGluIGEgUHJpdmF0ZSBibGVuZCBkaWN0aW9uYXJ5ICovCisgICAgVDFfQkxFTkRfQkxVRV9WQUxVRVMsCisgICAgVDFfQkxFTkRfT1RIRVJfQkxVRVMsCisgICAgVDFfQkxFTkRfU1RBTkRBUkRfV0lEVEgsCisgICAgVDFfQkxFTkRfU1RBTkRBUkRfSEVJR0hULAorICAgIFQxX0JMRU5EX1NURU1fU05BUF9XSURUSFMsCisgICAgVDFfQkxFTkRfU1RFTV9TTkFQX0hFSUdIVFMsCisgICAgVDFfQkxFTkRfQkxVRV9TQ0FMRSwKKyAgICBUMV9CTEVORF9CTFVFX1NISUZULAorICAgIFQxX0JMRU5EX0ZBTUlMWV9CTFVFUywKKyAgICBUMV9CTEVORF9GQU1JTFlfT1RIRVJfQkxVRVMsCisgICAgVDFfQkxFTkRfRk9SQ0VfQk9MRCwKKworICAgIFQxX0JMRU5EX01BWCAgICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBUMV9CbGVuZF9GbGFnczsKKworCisgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb3JyZXNwb25kaW5nICovCisgIC8qIGBUMV9CbGVuZF9GbGFncycgdmFsdWVzIGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIHQxX2JsZW5kX3VuZGVybGluZV9wb3NpdGlvbiAgIFQxX0JMRU5EX1VOREVSTElORV9QT1NJVElPTgorI2RlZmluZSB0MV9ibGVuZF91bmRlcmxpbmVfdGhpY2tuZXNzICBUMV9CTEVORF9VTkRFUkxJTkVfVEhJQ0tORVNTCisjZGVmaW5lIHQxX2JsZW5kX2l0YWxpY19hbmdsZSAgICAgICAgIFQxX0JMRU5EX0lUQUxJQ19BTkdMRQorI2RlZmluZSB0MV9ibGVuZF9ibHVlX3ZhbHVlcyAgICAgICAgICBUMV9CTEVORF9CTFVFX1ZBTFVFUworI2RlZmluZSB0MV9ibGVuZF9vdGhlcl9ibHVlcyAgICAgICAgICBUMV9CTEVORF9PVEhFUl9CTFVFUworI2RlZmluZSB0MV9ibGVuZF9zdGFuZGFyZF93aWR0aHMgICAgICBUMV9CTEVORF9TVEFOREFSRF9XSURUSAorI2RlZmluZSB0MV9ibGVuZF9zdGFuZGFyZF9oZWlnaHQgICAgICBUMV9CTEVORF9TVEFOREFSRF9IRUlHSFQKKyNkZWZpbmUgdDFfYmxlbmRfc3RlbV9zbmFwX3dpZHRocyAgICAgVDFfQkxFTkRfU1RFTV9TTkFQX1dJRFRIUworI2RlZmluZSB0MV9ibGVuZF9zdGVtX3NuYXBfaGVpZ2h0cyAgICBUMV9CTEVORF9TVEVNX1NOQVBfSEVJR0hUUworI2RlZmluZSB0MV9ibGVuZF9ibHVlX3NjYWxlICAgICAgICAgICBUMV9CTEVORF9CTFVFX1NDQUxFCisjZGVmaW5lIHQxX2JsZW5kX2JsdWVfc2hpZnQgICAgICAgICAgIFQxX0JMRU5EX0JMVUVfU0hJRlQKKyNkZWZpbmUgdDFfYmxlbmRfZmFtaWx5X2JsdWVzICAgICAgICAgVDFfQkxFTkRfRkFNSUxZX0JMVUVTCisjZGVmaW5lIHQxX2JsZW5kX2ZhbWlseV9vdGhlcl9ibHVlcyAgIFQxX0JMRU5EX0ZBTUlMWV9PVEhFUl9CTFVFUworI2RlZmluZSB0MV9ibGVuZF9mb3JjZV9ib2xkICAgICAgICAgICBUMV9CTEVORF9GT1JDRV9CT0xECisjZGVmaW5lIHQxX2JsZW5kX21heCAgICAgICAgICAgICAgICAgIFQxX0JMRU5EX01BWAorCisgIC8qICovCisKKworICAvKiBtYXhpbXVtIG51bWJlciBvZiBNdWx0aXBsZSBNYXN0ZXJzIGRlc2lnbnMsIGFzIGRlZmluZWQgaW4gdGhlIHNwZWMgKi8KKyNkZWZpbmUgVDFfTUFYX01NX0RFU0lHTlMgICAgIDE2CisKKyAgLyogbWF4aW11bSBudW1iZXIgb2YgTXVsdGlwbGUgTWFzdGVycyBheGVzLCBhcyBkZWZpbmVkIGluIHRoZSBzcGVjICovCisjZGVmaW5lIFQxX01BWF9NTV9BWElTICAgICAgICA0CisKKyAgLyogbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBkZXNpZ24gbWFwICovCisjZGVmaW5lIFQxX01BWF9NTV9NQVBfUE9JTlRTICAyMAorCisKKyAgLyogdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzdG9yZSB0aGUgQmxlbmREZXNpZ25NYXAgZW50cnkgZm9yIGFuIGF4aXMgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0Rlc2lnbk1hcF8KKyAgeworICAgIEZUX0J5dGUgICAgbnVtX3BvaW50czsKKyAgICBGVF9Mb25nKiAgIGRlc2lnbl9wb2ludHM7CisgICAgRlRfRml4ZWQqICBibGVuZF9wb2ludHM7CisKKyAgfSBQU19EZXNpZ25NYXBSZWMsICpQU19EZXNpZ25NYXA7CisKKyAgLyogYmFja3dhcmRzLWNvbXBhdGlibGUgZGVmaW5pdGlvbiAqLworICB0eXBlZGVmIFBTX0Rlc2lnbk1hcFJlYyAgVDFfRGVzaWduTWFwOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0JsZW5kUmVjXworICB7CisgICAgRlRfVUludCAgICAgICAgICBudW1fZGVzaWduczsKKyAgICBGVF9VSW50ICAgICAgICAgIG51bV9heGlzOworCisgICAgRlRfU3RyaW5nKiAgICAgICBheGlzX25hbWVzW1QxX01BWF9NTV9BWElTXTsKKyAgICBGVF9GaXhlZCogICAgICAgIGRlc2lnbl9wb3NbVDFfTUFYX01NX0RFU0lHTlNdOworICAgIFBTX0Rlc2lnbk1hcFJlYyAgZGVzaWduX21hcFtUMV9NQVhfTU1fQVhJU107CisKKyAgICBGVF9GaXhlZCogICAgICAgIHdlaWdodF92ZWN0b3I7CisgICAgRlRfRml4ZWQqICAgICAgICBkZWZhdWx0X3dlaWdodF92ZWN0b3I7CisKKyAgICBQU19Gb250SW5mbyAgICAgIGZvbnRfaW5mb3NbVDFfTUFYX01NX0RFU0lHTlMgKyAxXTsKKyAgICBQU19Qcml2YXRlICAgICAgIHByaXZhdGVzICBbVDFfTUFYX01NX0RFU0lHTlMgKyAxXTsKKworICAgIEZUX1VMb25nICAgICAgICAgYmxlbmRfYml0ZmxhZ3M7CisKKyAgICBGVF9CQm94KiAgICAgICAgIGJib3hlcyAgICBbVDFfTUFYX01NX0RFU0lHTlMgKyAxXTsKKworICAgIC8qIHNpbmNlIDIuMy4wICovCisKKyAgICAvKiB1bmRvY3VtZW50ZWQsIG9wdGlvbmFsOiB0aGUgZGVmYXVsdCBkZXNpZ24gaW5zdGFuY2U7ICAgKi8KKyAgICAvKiBjb3JyZXNwb25kcyB0byBkZWZhdWx0X3dlaWdodF92ZWN0b3IgLS0gICAgICAgICAgICAgICAgKi8KKyAgICAvKiBudW1fZGVmYXVsdF9kZXNpZ25fdmVjdG9yID09IDAgbWVhbnMgaXQgaXMgbm90IHByZXNlbnQgKi8KKyAgICAvKiBpbiB0aGUgZm9udCBhbmQgYXNzb2NpYXRlZCBtZXRyaWNzIGZpbGVzICAgICAgICAgICAgICAgKi8KKyAgICBGVF9VSW50ICAgICAgICAgIGRlZmF1bHRfZGVzaWduX3ZlY3RvcltUMV9NQVhfTU1fREVTSUdOU107CisgICAgRlRfVUludCAgICAgICAgICBudW1fZGVmYXVsdF9kZXNpZ25fdmVjdG9yOworCisgIH0gUFNfQmxlbmRSZWMsICpQU19CbGVuZDsKKworCisgIC8qIGJhY2t3YXJkcy1jb21wYXRpYmxlIGRlZmluaXRpb24gKi8KKyAgdHlwZWRlZiBQU19CbGVuZFJlYyAgVDFfQmxlbmQ7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDSURfRmFjZURpY3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIHJlcHJlc2VudCBkYXRhIGluIGEgQ0lEIHRvcC1sZXZlbCBkaWN0aW9uYXJ5LiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDSURfRmFjZURpY3RSZWNfCisgIHsKKyAgICBQU19Qcml2YXRlUmVjICBwcml2YXRlX2RpY3Q7CisKKyAgICBGVF9VSW50ICAgICAgICBsZW5fYnVpbGRjaGFyOworICAgIEZUX0ZpeGVkICAgICAgIGZvcmNlYm9sZF90aHJlc2hvbGQ7CisgICAgRlRfUG9zICAgICAgICAgc3Ryb2tlX3dpZHRoOworICAgIEZUX0ZpeGVkICAgICAgIGV4cGFuc2lvbl9mYWN0b3I7CisKKyAgICBGVF9CeXRlICAgICAgICBwYWludF90eXBlOworICAgIEZUX0J5dGUgICAgICAgIGZvbnRfdHlwZTsKKyAgICBGVF9NYXRyaXggICAgICBmb250X21hdHJpeDsKKyAgICBGVF9WZWN0b3IgICAgICBmb250X29mZnNldDsKKworICAgIEZUX1VJbnQgICAgICAgIG51bV9zdWJyczsKKyAgICBGVF9VTG9uZyAgICAgICBzdWJybWFwX29mZnNldDsKKyAgICBGVF9JbnQgICAgICAgICBzZF9ieXRlczsKKworICB9IENJRF9GYWNlRGljdFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9GYWNlRGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgQENJRF9GYWNlRGljdFJlYyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX0ZhY2VEaWN0UmVjXyogIENJRF9GYWNlRGljdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9Gb250RGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIEBDSURfRmFjZURpY3RSZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dCAqLworICAvKiAgICBrZXB0IHRvIG1haW50YWluIHNvdXJjZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiAgKi8KKyAgLyogICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIENJRF9GYWNlRGljdFJlYyAgQ0lEX0ZvbnREaWN0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0lEX0ZhY2VJbmZvUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQ0lEIEZhY2UgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgQ0lEX0ZhY2VJbmZvUmVjXworICB7CisgICAgRlRfU3RyaW5nKiAgICAgIGNpZF9mb250X25hbWU7CisgICAgRlRfRml4ZWQgICAgICAgIGNpZF92ZXJzaW9uOworICAgIEZUX0ludCAgICAgICAgICBjaWRfZm9udF90eXBlOworCisgICAgRlRfU3RyaW5nKiAgICAgIHJlZ2lzdHJ5OworICAgIEZUX1N0cmluZyogICAgICBvcmRlcmluZzsKKyAgICBGVF9JbnQgICAgICAgICAgc3VwcGxlbWVudDsKKworICAgIFBTX0ZvbnRJbmZvUmVjICBmb250X2luZm87CisgICAgRlRfQkJveCAgICAgICAgIGZvbnRfYmJveDsKKyAgICBGVF9VTG9uZyAgICAgICAgdWlkX2Jhc2U7CisKKyAgICBGVF9JbnQgICAgICAgICAgbnVtX3h1aWQ7CisgICAgRlRfVUxvbmcgICAgICAgIHh1aWRbMTZdOworCisgICAgRlRfVUxvbmcgICAgICAgIGNpZG1hcF9vZmZzZXQ7CisgICAgRlRfSW50ICAgICAgICAgIGZkX2J5dGVzOworICAgIEZUX0ludCAgICAgICAgICBnZF9ieXRlczsKKyAgICBGVF9VTG9uZyAgICAgICAgY2lkX2NvdW50OworCisgICAgRlRfSW50ICAgICAgICAgIG51bV9kaWN0czsKKyAgICBDSURfRmFjZURpY3QgICAgZm9udF9kaWN0czsKKworICAgIEZUX1VMb25nICAgICAgICBkYXRhX29mZnNldDsKKworICB9IENJRF9GYWNlSW5mb1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9GYWNlSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgQENJRF9GYWNlSW5mb1JlYyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX0ZhY2VJbmZvUmVjXyogIENJRF9GYWNlSW5mbzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gQENJRF9GYWNlSW5mb1JlYy4gIEl0IGlzIGRlcHJlY2F0ZWQgYnV0ICAqLworICAvKiAgIGtlcHQgdG8gbWFpbnRhaW4gc291cmNlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mICAgKi8KKyAgLyogICBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIENJRF9GYWNlSW5mb1JlYyAgQ0lEX0luZm87CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICAgRlRfSGFzX1BTX0dseXBoX05hbWVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0dXJuIHRydWUgaWYgYSBnaXZlbiBmYWNlIHByb3ZpZGVzIHJlbGlhYmxlIFBvc3RTY3JpcHQgZ2x5cGgKKyAgICogICAgbmFtZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdXNpbmcgdGhlIEBGVF9IQVNfR0xZUEhfTkFNRVMgbWFjcm8sCisgICAqICAgIGV4Y2VwdCB0aGF0IGNlcnRhaW4gZm9udHMgKG1vc3RseSBUcnVlVHlwZSkgY29udGFpbiBpbmNvcnJlY3QKKyAgICogICAgZ2x5cGggbmFtZSB0YWJsZXMuCisgICAqCisgICAqICAgIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSBjYWxsZXIgaXMgc3VyZSB0aGF0IHRoZSBnbHlwaAorICAgKiAgICBuYW1lcyByZXR1cm5lZCBieSBARlRfR2V0X0dseXBoX05hbWUgYXJlIHJlbGlhYmxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICAgZmFjZSBoYW5kbGUKKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAgQm9vbGVhbi4gIFRydWUgaWYgZ2x5cGggbmFtZXMgYXJlIHJlbGlhYmxlLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9JbnQgKQorICBGVF9IYXNfUFNfR2x5cGhfTmFtZXMoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9HZXRfUFNfRm9udF9JbmZvCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0cmlldmUgdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuCisgICAqICAgIFBvc3RTY3JpcHQgZm9udC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgICBmYWNlIDo6CisgICAqICAgICAgIFBvc3RTY3JpcHQgZmFjZSBoYW5kbGUuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIGFmb250X2luZm8gOjoKKyAgICogICAgICAgT3V0cHV0IGZvbnQgaW5mbyBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgIFN0cmluZyBwb2ludGVycyB3aXRoaW4gdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUgYXJlIG93bmVkIGJ5CisgICAqICAgIHRoZSBmYWNlIGFuZCBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICBNaXNzaW5nIGVudHJpZXMKKyAgICogICAgaW4gdGhlIGZvbnQncyBGb250SW5mbyBkaWN0aW9uYXJ5IGFyZSByZXByZXNlbnRlZCBieSBOVUxMIHBvaW50ZXJzLgorICAgKgorICAgKiAgICBJZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsCisgICAqICAgIHJldHVybiB0aGUgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBlcnJvciBjb2RlLgorICAgKgorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9QU19Gb250X0luZm8oIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBQU19Gb250SW5mbyAgYWZvbnRfaW5mbyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9QU19Gb250X1ByaXZhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBSZXRyaWV2ZSB0aGUgQFBTX1ByaXZhdGVSZWMgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbgorICAgKiAgICBQb3N0U2NyaXB0IGZvbnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgICBQb3N0U2NyaXB0IGZhY2UgaGFuZGxlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICBhZm9udF9wcml2YXRlIDo6CisgICAqICAgICAgIE91dHB1dCBwcml2YXRlIGRpY3Rpb25hcnkgc3RydWN0dXJlIHBvaW50ZXIuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgICBUaGUgc3RyaW5nIHBvaW50ZXJzIHdpdGhpbiB0aGUgQFBTX1ByaXZhdGVSZWMgc3RydWN0dXJlIGFyZSBvd25lZCBieQorICAgKiAgICB0aGUgZmFjZSBhbmQgZG9uJ3QgbmVlZCB0byBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICAgKgorICAgKiAgICBJZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICAqICAgIHRoZSBgRlRfRXJyX0ludmFsaWRfQXJndW1lbnQnIGVycm9yIGNvZGUuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1BTX0ZvbnRfUHJpdmF0ZSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZSAgYWZvbnRfcHJpdmF0ZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfRW5jb2RpbmdUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gZGVzY3JpYmluZyB0aGUgYEVuY29kaW5nJyBlbnRyeSBpbiBhIFR5cGUgMSAgICAgICAgICovCisgIC8qICAgIGRpY3Rpb25hcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0VOQ09ESU5HX1RZUEVfTk9ORSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9FTkNPRElOR19UWVBFX0FSUkFZIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfRU5DT0RJTkdfVFlQRV9TVEFOREFSRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0VOQ09ESU5HX1RZUEVfSVNPTEFUSU4xIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9FTkNPRElOR19UWVBFX0VYUEVSVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgVDFfRW5jb2RpbmdUeXBlXworICB7CisgICAgVDFfRU5DT0RJTkdfVFlQRV9OT05FID0gMCwKKyAgICBUMV9FTkNPRElOR19UWVBFX0FSUkFZLAorICAgIFQxX0VOQ09ESU5HX1RZUEVfU1RBTkRBUkQsCisgICAgVDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjEsCisgICAgVDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQKKworICB9IFQxX0VuY29kaW5nVHlwZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RpY3RfS2V5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIGVudW1lcmF0aW9uIHVzZWQgaW4gY2FsbHMgdG8gQEZUX0dldF9QU19Gb250X1ZhbHVlIHRvIGlkZW50aWZ5ICAqLworICAvKiAgICB0aGUgVHlwZX4xIGRpY3Rpb25hcnkgZW50cnkgdG8gcmV0cmlldmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0ZPTlRfVFlQRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9GT05UX01BVFJJWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfRk9OVF9CQk9YIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX1BBSU5UX1RZUEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9GT05UX05BTUUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfVU5JUVVFX0lEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX05VTV9DSEFSX1NUUklOR1MgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9DSEFSX1NUUklOR19LRVkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfQ0hBUl9TVFJJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0VOQ09ESU5HX1RZUEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9FTkNPRElOR19FTlRSWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfTlVNX1NVQlJTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX1NVQlIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9TVERfSFcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfU1REX1ZXIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX05VTV9CTFVFX1ZBTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9CTFVFX1ZBTFVFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfQkxVRV9GVVpaIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX05VTV9PVEhFUl9CTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9PVEhFUl9CTFVFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfTlVNX0ZBTUlMWV9CTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0ZBTUlMWV9CTFVFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9OVU1fRkFNSUxZX09USEVSX0JMVUVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0JMVUVfU0NBTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9CTFVFX1NISUZUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfTlVNX1NURU1fU05BUF9IIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX1NURU1fU05BUF9IIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9OVU1fU1RFTV9TTkFQX1YgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfU1RFTV9TTkFQX1YgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0ZPUkNFX0JPTEQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9STkRfU1RFTV9VUCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfTUlOX0ZFQVRVUkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0xFTl9JViA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9QQVNTV09SRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfTEFOR1VBR0VfR1JPVVAgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX1ZFUlNJT04gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9OT1RJQ0UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfRlVMTF9OQU1FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0ZBTUlMWV9OQU1FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9XRUlHSFQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfSVNfRklYRURfUElUQ0ggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX1VOREVSTElORV9QT1NJVElPTiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfRElDVF9VTkRFUkxJTkVfVEhJQ0tORVNTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0RJQ1RfRlNfVFlQRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19ESUNUX0lUQUxJQ19BTkdMRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgUFNfRGljdF9LZXlzXworICB7CisgICAgLyogY29udmVudGlvbmFsbHkgaW4gdGhlIGZvbnQgZGljdGlvbmFyeSAqLworICAgIFBTX0RJQ1RfRk9OVF9UWVBFLCAgICAgICAgICAgICAgLyogRlRfQnl0ZSAgICAgICAgICovCisgICAgUFNfRElDVF9GT05UX01BVFJJWCwgICAgICAgICAgICAvKiBGVF9GaXhlZCAgICAgICAgKi8KKyAgICBQU19ESUNUX0ZPTlRfQkJPWCwgICAgICAgICAgICAgIC8qIEZUX0ZpeGVkICAgICAgICAqLworICAgIFBTX0RJQ1RfUEFJTlRfVFlQRSwgICAgICAgICAgICAgLyogRlRfQnl0ZSAgICAgICAgICovCisgICAgUFNfRElDVF9GT05UX05BTUUsICAgICAgICAgICAgICAvKiBGVF9TdHJpbmcqICAgICAgKi8KKyAgICBQU19ESUNUX1VOSVFVRV9JRCwgICAgICAgICAgICAgIC8qIEZUX0ludCAgICAgICAgICAqLworICAgIFBTX0RJQ1RfTlVNX0NIQVJfU1RSSU5HUywgICAgICAgLyogRlRfSW50ICAgICAgICAgICovCisgICAgUFNfRElDVF9DSEFSX1NUUklOR19LRVksICAgICAgICAvKiBGVF9TdHJpbmcqICAgICAgKi8KKyAgICBQU19ESUNUX0NIQVJfU1RSSU5HLCAgICAgICAgICAgIC8qIEZUX1N0cmluZyogICAgICAqLworICAgIFBTX0RJQ1RfRU5DT0RJTkdfVFlQRSwgICAgICAgICAgLyogVDFfRW5jb2RpbmdUeXBlICovCisgICAgUFNfRElDVF9FTkNPRElOR19FTlRSWSwgICAgICAgICAvKiBGVF9TdHJpbmcqICAgICAgKi8KKworICAgIC8qIGNvbnZlbnRpb25hbGx5IGluIHRoZSBmb250IFByaXZhdGUgZGljdGlvbmFyeSAqLworICAgIFBTX0RJQ1RfTlVNX1NVQlJTLCAgICAgICAgICAgICAgLyogRlRfSW50ICAgICAqLworICAgIFBTX0RJQ1RfU1VCUiwgICAgICAgICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfU1REX0hXLCAgICAgICAgICAgICAgICAgLyogRlRfVVNob3J0ICAqLworICAgIFBTX0RJQ1RfU1REX1ZXLCAgICAgICAgICAgICAgICAgLyogRlRfVVNob3J0ICAqLworICAgIFBTX0RJQ1RfTlVNX0JMVUVfVkFMVUVTLCAgICAgICAgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfQkxVRV9WQUxVRSwgICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfQkxVRV9GVVpaLCAgICAgICAgICAgICAgLyogRlRfSW50ICAgICAqLworICAgIFBTX0RJQ1RfTlVNX09USEVSX0JMVUVTLCAgICAgICAgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfT1RIRVJfQkxVRSwgICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfTlVNX0ZBTUlMWV9CTFVFUywgICAgICAgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfRkFNSUxZX0JMVUUsICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfTlVNX0ZBTUlMWV9PVEhFUl9CTFVFUywgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUUsICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfQkxVRV9TQ0FMRSwgICAgICAgICAgICAgLyogRlRfRml4ZWQgICAqLworICAgIFBTX0RJQ1RfQkxVRV9TSElGVCwgICAgICAgICAgICAgLyogRlRfSW50ICAgICAqLworICAgIFBTX0RJQ1RfTlVNX1NURU1fU05BUF9ILCAgICAgICAgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfU1RFTV9TTkFQX0gsICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfTlVNX1NURU1fU05BUF9WLCAgICAgICAgLyogRlRfQnl0ZSAgICAqLworICAgIFBTX0RJQ1RfU1RFTV9TTkFQX1YsICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfRk9SQ0VfQk9MRCwgICAgICAgICAgICAgLyogRlRfQm9vbCAgICAqLworICAgIFBTX0RJQ1RfUk5EX1NURU1fVVAsICAgICAgICAgICAgLyogRlRfQm9vbCAgICAqLworICAgIFBTX0RJQ1RfTUlOX0ZFQVRVUkUsICAgICAgICAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfTEVOX0lWLCAgICAgICAgICAgICAgICAgLyogRlRfSW50ICAgICAqLworICAgIFBTX0RJQ1RfUEFTU1dPUkQsICAgICAgICAgICAgICAgLyogRlRfTG9uZyAgICAqLworICAgIFBTX0RJQ1RfTEFOR1VBR0VfR1JPVVAsICAgICAgICAgLyogRlRfTG9uZyAgICAqLworCisgICAgLyogY29udmVudGlvbmFsbHkgaW4gdGhlIGZvbnQgRm9udEluZm8gZGljdGlvbmFyeSAqLworICAgIFBTX0RJQ1RfVkVSU0lPTiwgICAgICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfTk9USUNFLCAgICAgICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfRlVMTF9OQU1FLCAgICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfRkFNSUxZX05BTUUsICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfV0VJR0hULCAgICAgICAgICAgICAgICAgLyogRlRfU3RyaW5nKiAqLworICAgIFBTX0RJQ1RfSVNfRklYRURfUElUQ0gsICAgICAgICAgLyogRlRfQm9vbCAgICAqLworICAgIFBTX0RJQ1RfVU5ERVJMSU5FX1BPU0lUSU9OLCAgICAgLyogRlRfU2hvcnQgICAqLworICAgIFBTX0RJQ1RfVU5ERVJMSU5FX1RISUNLTkVTUywgICAgLyogRlRfVVNob3J0ICAqLworICAgIFBTX0RJQ1RfRlNfVFlQRSwgICAgICAgICAgICAgICAgLyogRlRfVVNob3J0ICAqLworICAgIFBTX0RJQ1RfSVRBTElDX0FOR0xFLCAgICAgICAgICAgLyogRlRfTG9uZyAgICAqLworCisgICAgUFNfRElDVF9NQVggPSBQU19ESUNUX0lUQUxJQ19BTkdMRQorCisgIH0gUFNfRGljdF9LZXlzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9QU19Gb250X1ZhbHVlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0cmlldmUgdGhlIHZhbHVlIGZvciB0aGUgc3VwcGxpZWQga2V5IGZyb20gYSBQb3N0U2NyaXB0IGZvbnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgICBQb3N0U2NyaXB0IGZhY2UgaGFuZGxlLgorICAgKgorICAgKiAgICBrZXkgOjoKKyAgICogICAgICAgQW4gZW51bWVyYXRpb24gdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBkaWN0aW9uYXJ5IGtleSB0byByZXRyaWV2ZS4KKyAgICoKKyAgICogICAgaWR4IDo6CisgICAqICAgICAgIEZvciBhcnJheSB2YWx1ZXMsIHRoaXMgc3BlY2lmaWVzIHRoZSBpbmRleCB0byBiZSByZXR1cm5lZC4KKyAgICoKKyAgICogICAgdmFsdWUgOjoKKyAgICogICAgICAgQSBwb2ludGVyIHRvIG1lbW9yeSBpbnRvIHdoaWNoIHRvIHdyaXRlIHRoZSB2YWx1ZS4KKyAgICoKKyAgICogICAgdmFsZW5fbGVuIDo6CisgICAqICAgICAgIFRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1lbW9yeSBzdXBwbGllZCBmb3IgdGhlIHZhbHVlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICB2YWx1ZSA6OgorICAgKiAgICAgICBUaGUgdmFsdWUgbWF0Y2hpbmcgdGhlIGFib3ZlIGtleSwgaWYgaXQgZXhpc3RzLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgdGhlIHJlcXVlc3RlZAorICAgKiAgICB2YWx1ZSAoaWYgaXQgZXhpc3RzLCAtMSBvdGhlcndpc2UpLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICAgVGhlIHZhbHVlcyByZXR1cm5lZCBhcmUgbm90IHBvaW50ZXJzIGludG8gdGhlIGludGVybmFsIHN0cnVjdHVyZXMgb2YKKyAgICogICAgdGhlIGZhY2UsIGJ1dCBhcmUgYGZyZXNoJyBjb3BpZXMsIHNvIHRoYXQgdGhlIG1lbW9yeSBjb250YWluaW5nIHRoZW0KKyAgICogICAgYmVsb25ncyB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gIFRoaXMgYWxzbyBlbmZvcmNlcyB0aGUKKyAgICogICAgYHJlYWQtb25seScgbmF0dXJlIG9mIHRoZXNlIHZhbHVlcywgaS5lLiwgdGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUKKyAgICogICAgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBmYWNlLgorICAgKgorICAgKiAgICBgdmFsdWUnIGlzIGEgdm9pZCBwb2ludGVyIGJlY2F1c2UgdGhlIHZhbHVlcyByZXR1cm5lZCBjYW4gYmUgb2YKKyAgICogICAgdmFyaW91cyB0eXBlcy4KKyAgICoKKyAgICogICAgSWYgZWl0aGVyIGB2YWx1ZScgaXMgTlVMTCBvciBgdmFsdWVfbGVuJyBpcyB0b28gc21hbGwsIGp1c3QgdGhlCisgICAqICAgIHJlcXVpcmVkIG1lbW9yeSBzaXplIGZvciB0aGUgcmVxdWVzdGVkIGVudHJ5IGlzIHJldHVybmVkLgorICAgKgorICAgKiAgICBUaGUgYGlkeCcgcGFyYW1ldGVyIGlzIHVzZWQsIG5vdCBvbmx5IHRvIHJldHJpZXZlIGVsZW1lbnRzIG9mLCBmb3IKKyAgICogICAgZXhhbXBsZSwgdGhlIEZvbnRNYXRyaXggb3IgRm9udEJCb3gsIGJ1dCBhbHNvIHRvIHJldHJpZXZlIG5hbWUga2V5cworICAgKiAgICBmcm9tIHRoZSBDaGFyU3RyaW5ncyBkaWN0aW9uYXJ5LCBhbmQgdGhlIGNoYXJzdHJpbmdzIHRoZW1zZWx2ZXMuICBJdAorICAgKiAgICBpcyBpZ25vcmVkIGZvciBhdG9taWMgdmFsdWVzLgorICAgKgorICAgKiAgICBQU19ESUNUX0JMVUVfU0NBTEUgcmV0dXJucyBhIHZhbHVlIHRoYXQgaXMgc2NhbGVkIHVwIGJ5IDEwMDAuICBUbworICAgKiAgICBnZXQgdGhlIHZhbHVlIGFzIGluIHRoZSBmb250IHN0cmVhbSwgeW91IG5lZWQgdG8gZGl2aWRlIGJ5CisgICAqICAgIDY1NTM2MDAwLjAgKHRvIHJlbW92ZSB0aGUgRlRfRml4ZWQgc2NhbGUsIGFuZCB0aGUgeDEwMDAgc2NhbGUpLgorICAgKgorICAgKiAgICBJTVBPUlRBTlQ6IE9ubHkga2V5L3ZhbHVlIHBhaXJzIHJlYWQgYnkgdGhlIEZyZWVUeXBlIGludGVycHJldGVyIGNhbgorICAgKiAgICBiZSByZXRyaWV2ZWQuICBTbywgZm9yIGV4YW1wbGUsIFBvc3RTY3JpcHQgcHJvY2VkdXJlcyBzdWNoIGFzIE5QLAorICAgKiAgICBORCwgYW5kIFJEIGFyZSBub3QgYXZhaWxhYmxlLiAgQXJiaXRyYXJ5IGtleXMgYXJlLCBvYnZpb3VzbHksIG5vdCBiZQorICAgKiAgICBhdmFpbGFibGUgZWl0aGVyLgorICAgKgorICAgKiAgICBJZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgICAqICAgIHRoZSBgRlRfRXJyX0ludmFsaWRfQXJndW1lbnQnIGVycm9yIGNvZGUuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0xvbmcgKQorICBGVF9HZXRfUFNfRm9udF9WYWx1ZSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNfRGljdF9LZXlzICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIHZhbHVlX2xlbiApOworCisgIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVDFUQUJMRVNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS90dG5hbWVpZC5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvdHRuYW1laWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU4NWYyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvdHRuYW1laWQuaApAQCAtMCwwICsxLDEyMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0bmFtZWlkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBuYW1lIElEIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUTkFNRUlEX0hfXworI2RlZmluZSBfX1RUTkFNRUlEX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHJ1ZXR5cGVfdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBgcGxhdGZvcm0nIGlkZW50aWZpZXIgY29kZSBpbiB0aGUgbmFtZSAgICAgICAgKi8KKyAgLyogcmVjb3JkcyBvZiB0aGUgVFRGIGBuYW1lJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9QTEFURk9STV9YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgcGxhdGZvcm1faWQnIGlkZW50aWZpZXIgY29kZSBpbgorICAgKiAgIEBGVF9DaGFyTWFwUmVjIGFuZCBARlRfU2ZudE5hbWUgc3RydWN0dXJlcy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBUVF9QTEFURk9STV9BUFBMRV9VTklDT0RFIDo6CisgICAqICAgICBVc2VkIGJ5IEFwcGxlIHRvIGluZGljYXRlIGEgVW5pY29kZSBjaGFyYWN0ZXIgbWFwIGFuZC9vciBuYW1lIGVudHJ5LgorICAgKiAgICAgU2VlIEBUVF9BUFBMRV9JRF9YWFggZm9yIGNvcnJlc3BvbmRpbmcgYGVuY29kaW5nX2lkJyB2YWx1ZXMuICBOb3RlCisgICAqICAgICB0aGF0IG5hbWUgZW50cmllcyBpbiB0aGlzIGZvcm1hdCBhcmUgY29kZWQgYXMgYmlnLWVuZGlhbiBVQ1MtMgorICAgKiAgICAgY2hhcmFjdGVyIGNvZGVzIF9vbmx5Xy4KKyAgICoKKyAgICogICBUVF9QTEFURk9STV9NQUNJTlRPU0ggOjoKKyAgICogICAgIFVzZWQgYnkgQXBwbGUgdG8gaW5kaWNhdGUgYSBNYWNPUy1zcGVjaWZpYyBjaGFybWFwIGFuZC9vciBuYW1lIGVudHJ5LgorICAgKiAgICAgU2VlIEBUVF9NQUNfSURfWFhYIGZvciBjb3JyZXNwb25kaW5nIGBlbmNvZGluZ19pZCcgdmFsdWVzLiAgTm90ZSB0aGF0CisgICAqICAgICBtb3N0IFRydWVUeXBlIGZvbnRzIGNvbnRhaW4gYW4gQXBwbGUgcm9tYW4gY2hhcm1hcCB0byBiZSB1c2FibGUgb24KKyAgICogICAgIE1hY09TIHN5c3RlbXMgKGV2ZW4gaWYgdGhleSBjb250YWluIGEgTWljcm9zb2Z0IGNoYXJtYXAgYXMgd2VsbCkuCisgICAqCisgICAqICAgVFRfUExBVEZPUk1fSVNPIDo6CisgICAqICAgICBUaGlzIHZhbHVlIHdhcyB1c2VkIHRvIHNwZWNpZnkgSVNPL0lFQyAxMDY0NiBjaGFybWFwcy4gIEl0IGlzIGhvd2V2ZXIKKyAgICogICAgIG5vdyBkZXByZWNhdGVkLiAgU2VlIEBUVF9JU09fSURfWFhYIGZvciBhIGxpc3Qgb2YgY29ycmVzcG9uZGluZworICAgKiAgICAgYGVuY29kaW5nX2lkJyB2YWx1ZXMuCisgICAqCisgICAqICAgVFRfUExBVEZPUk1fTUlDUk9TT0ZUIDo6CisgICAqICAgICBVc2VkIGJ5IE1pY3Jvc29mdCB0byBpbmRpY2F0ZSBXaW5kb3dzLXNwZWNpZmljIGNoYXJtYXBzLiAgU2VlCisgICAqICAgICBAVFRfTVNfSURfWFhYIGZvciBhIGxpc3Qgb2YgY29ycmVzcG9uZGluZyBgZW5jb2RpbmdfaWQnIHZhbHVlcy4KKyAgICogICAgIE5vdGUgdGhhdCBtb3N0IGZvbnRzIGNvbnRhaW4gYSBVbmljb2RlIGNoYXJtYXAgdXNpbmcKKyAgICogICAgIChUVF9QTEFURk9STV9NSUNST1NPRlQsIEBUVF9NU19JRF9VTklDT0RFX0NTKS4KKyAgICoKKyAgICogICBUVF9QTEFURk9STV9DVVNUT00gOjoKKyAgICogICAgIFVzZWQgdG8gaW5kaWNhdGUgYXBwbGljYXRpb24tc3BlY2lmaWMgY2hhcm1hcHMuCisgICAqCisgICAqICAgVFRfUExBVEZPUk1fQURPQkUgOjoKKyAgICogICAgIFRoaXMgdmFsdWUgaXNuJ3QgcGFydCBvZiBhbnkgZm9udCBmb3JtYXQgc3BlY2lmaWNhdGlvbiwgYnV0IGlzIHVzZWQKKyAgICogICAgIGJ5IEZyZWVUeXBlIHRvIHJlcG9ydCBBZG9iZS1zcGVjaWZpYyBjaGFybWFwcyBpbiBhbiBARlRfQ2hhck1hcFJlYworICAgKiAgICAgc3RydWN0dXJlLiAgU2VlIEBUVF9BRE9CRV9JRF9YWFguCisgICAqLworCisjZGVmaW5lIFRUX1BMQVRGT1JNX0FQUExFX1VOSUNPREUgIDAKKyNkZWZpbmUgVFRfUExBVEZPUk1fTUFDSU5UT1NIICAgICAgMQorI2RlZmluZSBUVF9QTEFURk9STV9JU08gICAgICAgICAgICAyIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVFRfUExBVEZPUk1fTUlDUk9TT0ZUICAgICAgMworI2RlZmluZSBUVF9QTEFURk9STV9DVVNUT00gICAgICAgICA0CisjZGVmaW5lIFRUX1BMQVRGT1JNX0FET0JFICAgICAgICAgIDcgLyogYXJ0aWZpY2lhbCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIFRUX0FQUExFX0lEX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlIGBlbmNvZGluZ19pZCcgZm9yCisgICAqICAgQFRUX1BMQVRGT1JNX0FQUExFX1VOSUNPREUgY2hhcm1hcHMgYW5kIG5hbWUgZW50cmllcy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBUVF9BUFBMRV9JRF9ERUZBVUxUIDo6CisgICAqICAgICBVbmljb2RlIHZlcnNpb24gMS4wLgorICAgKgorICAgKiAgIFRUX0FQUExFX0lEX1VOSUNPREVfMV8xIDo6CisgICAqICAgICBVbmljb2RlIDEuMTsgc3BlY2lmaWVzIEhhbmd1bCBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IFUrMzR4eC4KKyAgICoKKyAgICogICBUVF9BUFBMRV9JRF9JU09fMTA2NDYgOjoKKyAgICogICAgIERlcHJlY2F0ZWQgKGlkZW50aWNhbCB0byBwcmVjZWRpbmcpLgorICAgKgorICAgKiAgIFRUX0FQUExFX0lEX1VOSUNPREVfMl8wIDo6CisgICAqICAgICBVbmljb2RlIDIuMCBhbmQgYmV5b25kIChVVEYtMTYgQk1QIG9ubHkpLgorICAgKgorICAgKiAgIFRUX0FQUExFX0lEX1VOSUNPREVfMzIgOjoKKyAgICogICAgIFVuaWNvZGUgMy4xIGFuZCBiZXlvbmQsIHVzaW5nIFVURi0zMi4KKyAgICoKKyAgICogICBUVF9BUFBMRV9JRF9WQVJJQU5UX1NFTEVDVE9SIDo6CisgICAqICAgICBGcm9tIEFkb2JlLCBub3QgQXBwbGUuICBOb3QgYSBub3JtYWwgY21hcC4gIFNwZWNpZmllcyB2YXJpYXRpb25zCisgICAqICAgICBvbiBhIHJlYWwgY21hcC4KKyAgICovCisKKyNkZWZpbmUgVFRfQVBQTEVfSURfREVGQVVMVCAgICAgICAgICAgMCAvKiBVbmljb2RlIDEuMCAqLworI2RlZmluZSBUVF9BUFBMRV9JRF9VTklDT0RFXzFfMSAgICAgICAxIC8qIHNwZWNpZnkgSGFuZ3VsIGF0IFUrMzR4eCAqLworI2RlZmluZSBUVF9BUFBMRV9JRF9JU09fMTA2NDYgICAgICAgICAyIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVFRfQVBQTEVfSURfVU5JQ09ERV8yXzAgICAgICAgMyAvKiBvciBsYXRlciAqLworI2RlZmluZSBUVF9BUFBMRV9JRF9VTklDT0RFXzMyICAgICAgICA0IC8qIDIuMCBvciBsYXRlciwgZnVsbCByZXBlcnRvaXJlICovCisjZGVmaW5lIFRUX0FQUExFX0lEX1ZBUklBTlRfU0VMRUNUT1IgIDUgLyogdmFyaWF0aW9uIHNlbGVjdG9yIGRhdGEgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9NQUNfSURfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGVuY29kaW5nX2lkJyBmb3IKKyAgICogICBAVFRfUExBVEZPUk1fTUFDSU5UT1NIIGNoYXJtYXBzIGFuZCBuYW1lIGVudHJpZXMuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgVFRfTUFDX0lEX1JPTUFOIDo6CisgICAqICAgVFRfTUFDX0lEX0pBUEFORVNFIDo6CisgICAqICAgVFRfTUFDX0lEX1RSQURJVElPTkFMX0NISU5FU0UgOjoKKyAgICogICBUVF9NQUNfSURfS09SRUFOIDo6CisgICAqICAgVFRfTUFDX0lEX0FSQUJJQyA6OgorICAgKiAgIFRUX01BQ19JRF9IRUJSRVcgOjoKKyAgICogICBUVF9NQUNfSURfR1JFRUsgOjoKKyAgICogICBUVF9NQUNfSURfUlVTU0lBTiA6OgorICAgKiAgIFRUX01BQ19JRF9SU1lNQk9MIDo6CisgICAqICAgVFRfTUFDX0lEX0RFVkFOQUdBUkkgOjoKKyAgICogICBUVF9NQUNfSURfR1VSTVVLSEkgOjoKKyAgICogICBUVF9NQUNfSURfR1VKQVJBVEkgOjoKKyAgICogICBUVF9NQUNfSURfT1JJWUEgOjoKKyAgICogICBUVF9NQUNfSURfQkVOR0FMSSA6OgorICAgKiAgIFRUX01BQ19JRF9UQU1JTCA6OgorICAgKiAgIFRUX01BQ19JRF9URUxVR1UgOjoKKyAgICogICBUVF9NQUNfSURfS0FOTkFEQSA6OgorICAgKiAgIFRUX01BQ19JRF9NQUxBWUFMQU0gOjoKKyAgICogICBUVF9NQUNfSURfU0lOSEFMRVNFIDo6CisgICAqICAgVFRfTUFDX0lEX0JVUk1FU0UgOjoKKyAgICogICBUVF9NQUNfSURfS0hNRVIgOjoKKyAgICogICBUVF9NQUNfSURfVEhBSSA6OgorICAgKiAgIFRUX01BQ19JRF9MQU9USUFOIDo6CisgICAqICAgVFRfTUFDX0lEX0dFT1JHSUFOIDo6CisgICAqICAgVFRfTUFDX0lEX0FSTUVOSUFOIDo6CisgICAqICAgVFRfTUFDX0lEX01BTERJVklBTiA6OgorICAgKiAgIFRUX01BQ19JRF9TSU1QTElGSUVEX0NISU5FU0UgOjoKKyAgICogICBUVF9NQUNfSURfVElCRVRBTiA6OgorICAgKiAgIFRUX01BQ19JRF9NT05HT0xJQU4gOjoKKyAgICogICBUVF9NQUNfSURfR0VFWiA6OgorICAgKiAgIFRUX01BQ19JRF9TTEFWSUMgOjoKKyAgICogICBUVF9NQUNfSURfVklFVE5BTUVTRSA6OgorICAgKiAgIFRUX01BQ19JRF9TSU5ESEkgOjoKKyAgICogICBUVF9NQUNfSURfVU5JTlRFUlAgOjoKKyAgICovCisKKyNkZWZpbmUgVFRfTUFDX0lEX1JPTUFOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRUX01BQ19JRF9KQVBBTkVTRSAgICAgICAgICAgICAgMQorI2RlZmluZSBUVF9NQUNfSURfVFJBRElUSU9OQUxfQ0hJTkVTRSAgIDIKKyNkZWZpbmUgVFRfTUFDX0lEX0tPUkVBTiAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFRUX01BQ19JRF9BUkFCSUMgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUVF9NQUNfSURfSEVCUkVXICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFRfTUFDX0lEX0dSRUVLICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFRUX01BQ19JRF9SVVNTSUFOICAgICAgICAgICAgICAgNworI2RlZmluZSBUVF9NQUNfSURfUlNZTUJPTCAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVFRfTUFDX0lEX0RFVkFOQUdBUkkgICAgICAgICAgICA5CisjZGVmaW5lIFRUX01BQ19JRF9HVVJNVUtISSAgICAgICAgICAgICAxMAorI2RlZmluZSBUVF9NQUNfSURfR1VKQVJBVEkgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVFRfTUFDX0lEX09SSVlBICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFRUX01BQ19JRF9CRU5HQUxJICAgICAgICAgICAgICAxMworI2RlZmluZSBUVF9NQUNfSURfVEFNSUwgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgVFRfTUFDX0lEX1RFTFVHVSAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFRUX01BQ19JRF9LQU5OQURBICAgICAgICAgICAgICAxNgorI2RlZmluZSBUVF9NQUNfSURfTUFMQVlBTEFNICAgICAgICAgICAgMTcKKyNkZWZpbmUgVFRfTUFDX0lEX1NJTkhBTEVTRSAgICAgICAgICAgIDE4CisjZGVmaW5lIFRUX01BQ19JRF9CVVJNRVNFICAgICAgICAgICAgICAxOQorI2RlZmluZSBUVF9NQUNfSURfS0hNRVIgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgVFRfTUFDX0lEX1RIQUkgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFRUX01BQ19JRF9MQU9USUFOICAgICAgICAgICAgICAyMgorI2RlZmluZSBUVF9NQUNfSURfR0VPUkdJQU4gICAgICAgICAgICAgMjMKKyNkZWZpbmUgVFRfTUFDX0lEX0FSTUVOSUFOICAgICAgICAgICAgIDI0CisjZGVmaW5lIFRUX01BQ19JRF9NQUxESVZJQU4gICAgICAgICAgICAyNQorI2RlZmluZSBUVF9NQUNfSURfU0lNUExJRklFRF9DSElORVNFICAgMjUKKyNkZWZpbmUgVFRfTUFDX0lEX1RJQkVUQU4gICAgICAgICAgICAgIDI2CisjZGVmaW5lIFRUX01BQ19JRF9NT05HT0xJQU4gICAgICAgICAgICAyNworI2RlZmluZSBUVF9NQUNfSURfR0VFWiAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgVFRfTUFDX0lEX1NMQVZJQyAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFRUX01BQ19JRF9WSUVUTkFNRVNFICAgICAgICAgICAzMAorI2RlZmluZSBUVF9NQUNfSURfU0lOREhJICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgVFRfTUFDX0lEX1VOSU5URVJQICAgICAgICAgICAgIDMyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgVFRfSVNPX0lEX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlIGBlbmNvZGluZ19pZCcgZm9yCisgICAqICAgQFRUX1BMQVRGT1JNX0lTTyBjaGFybWFwcyBhbmQgbmFtZSBlbnRyaWVzLgorICAgKgorICAgKiAgIFRoZWlyIHVzZSBpcyBub3cgZGVwcmVjYXRlZC4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBUVF9JU09fSURfN0JJVF9BU0NJSSA6OgorICAgKiAgICAgQVNDSUkuCisgICAqICAgVFRfSVNPX0lEXzEwNjQ2IDo6CisgICAqICAgICBJU08vMTA2NDYuCisgICAqICAgVFRfSVNPX0lEXzg4NTlfMSA6OgorICAgKiAgICAgQWxzbyBrbm93biBhcyBMYXRpbi0xLgorICAgKi8KKworI2RlZmluZSBUVF9JU09fSURfN0JJVF9BU0NJSSAgMAorI2RlZmluZSBUVF9JU09fSURfMTA2NDYgICAgICAgMQorI2RlZmluZSBUVF9JU09fSURfODg1OV8xICAgICAgMgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIFRUX01TX0lEX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlIGBlbmNvZGluZ19pZCcgZm9yCisgICAqICAgQFRUX1BMQVRGT1JNX01JQ1JPU09GVCBjaGFybWFwcyBhbmQgbmFtZSBlbnRyaWVzLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIFRUX01TX0lEX1NZTUJPTF9DUyA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gTWljcm9zb2Z0IHN5bWJvbCBlbmNvZGluZy4gU2VlCisgICAqICAgICBARlRfRU5DT0RJTkdfTVNfU1lNQk9MLgorICAgKgorICAgKiAgIFRUX01TX0lEX1VOSUNPREVfQ1MgOjoKKyAgICogICAgIENvcnJlc3BvbmRzIHRvIGEgTWljcm9zb2Z0IFdHTDQgY2hhcm1hcCwgbWF0Y2hpbmcgVW5pY29kZS4gIFNlZQorICAgKiAgICAgQEZUX0VOQ09ESU5HX1VOSUNPREUuCisgICAqCisgICAqICAgVFRfTVNfSURfU0pJUyA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gU0pJUyBKYXBhbmVzZSBlbmNvZGluZy4gIFNlZSBARlRfRU5DT0RJTkdfU0pJUy4KKyAgICoKKyAgICogICBUVF9NU19JRF9HQjIzMTIgOjoKKyAgICogICAgIENvcnJlc3BvbmRzIHRvIFNpbXBsaWZpZWQgQ2hpbmVzZSBhcyB1c2VkIGluIE1haW5sYW5kIENoaW5hLiAgU2VlCisgICAqICAgICBARlRfRU5DT0RJTkdfR0IyMzEyLgorICAgKgorICAgKiAgIFRUX01TX0lEX0JJR181IDo6CisgICAqICAgICBDb3JyZXNwb25kcyB0byBUcmFkaXRpb25hbCBDaGluZXNlIGFzIHVzZWQgaW4gVGFpd2FuIGFuZCBIb25nIEtvbmcuCisgICAqICAgICBTZWUgQEZUX0VOQ09ESU5HX0JJRzUuCisgICAqCisgICAqICAgVFRfTVNfSURfV0FOU1VORyA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gS29yZWFuIFdhbnN1bmcgZW5jb2RpbmcuICBTZWUgQEZUX0VOQ09ESU5HX1dBTlNVTkcuCisgICAqCisgICAqICAgVFRfTVNfSURfSk9IQUIgOjoKKyAgICogICAgIENvcnJlc3BvbmRzIHRvIEpvaGFiIGVuY29kaW5nLiAgU2VlIEBGVF9FTkNPRElOR19KT0hBQi4KKyAgICoKKyAgICogICBUVF9NU19JRF9VQ1NfNCA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gVUNTLTQgb3IgVVRGLTMyIGNoYXJtYXBzLiAgVGhpcyBoYXMgYmVlbiBhZGRlZCB0bworICAgKiAgICAgdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjQgKG1pZC0yMDAxLikKKyAgICovCisKKyNkZWZpbmUgVFRfTVNfSURfU1lNQk9MX0NTICAgIDAKKyNkZWZpbmUgVFRfTVNfSURfVU5JQ09ERV9DUyAgIDEKKyNkZWZpbmUgVFRfTVNfSURfU0pJUyAgICAgICAgIDIKKyNkZWZpbmUgVFRfTVNfSURfR0IyMzEyICAgICAgIDMKKyNkZWZpbmUgVFRfTVNfSURfQklHXzUgICAgICAgIDQKKyNkZWZpbmUgVFRfTVNfSURfV0FOU1VORyAgICAgIDUKKyNkZWZpbmUgVFRfTVNfSURfSk9IQUIgICAgICAgIDYKKyNkZWZpbmUgVFRfTVNfSURfVUNTXzQgICAgICAgMTAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9BRE9CRV9JRF9YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgZW5jb2RpbmdfaWQnIGZvcgorICAgKiAgIEBUVF9QTEFURk9STV9BRE9CRSBjaGFybWFwcy4gIFRoaXMgaXMgYSBGcmVlVHlwZS1zcGVjaWZpYyBleHRlbnNpb24hCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgVFRfQURPQkVfSURfU1RBTkRBUkQgOjoKKyAgICogICAgIEFkb2JlIHN0YW5kYXJkIGVuY29kaW5nLgorICAgKiAgIFRUX0FET0JFX0lEX0VYUEVSVCA6OgorICAgKiAgICAgQWRvYmUgZXhwZXJ0IGVuY29kaW5nLgorICAgKiAgIFRUX0FET0JFX0lEX0NVU1RPTSA6OgorICAgKiAgICAgQWRvYmUgY3VzdG9tIGVuY29kaW5nLgorICAgKiAgIFRUX0FET0JFX0lEX0xBVElOXzEgOjoKKyAgICogICAgIEFkb2JlIExhdGlufjEgZW5jb2RpbmcuCisgICAqLworCisjZGVmaW5lIFRUX0FET0JFX0lEX1NUQU5EQVJEICAwCisjZGVmaW5lIFRUX0FET0JFX0lEX0VYUEVSVCAgICAxCisjZGVmaW5lIFRUX0FET0JFX0lEX0NVU1RPTSAgICAyCisjZGVmaW5lIFRUX0FET0JFX0lEX0xBVElOXzEgICAzCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgbGFuZ3VhZ2UgaWRlbnRpZmllciBmaWVsZCBpbiB0aGUgbmFtZSByZWNvcmRzICAqLworICAvKiBvZiB0aGUgVFRGIGBuYW1lJyB0YWJsZSBpZiB0aGUgYHBsYXRmb3JtJyBpZGVudGlmaWVyIGNvZGUgaXMgICAgICAgICAgKi8KKyAgLyogVFRfUExBVEZPUk1fTUFDSU5UT1NILiAgVGhlc2UgdmFsdWVzIGFyZSBhbHNvIHVzZWQgYXMgcmV0dXJuIHZhbHVlcyAgICovCisgIC8qIGZvciBmdW5jdGlvbiBARlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGNhbm9uaWNhbCBzb3VyY2UgZm9yIHRoZSBBcHBsZSBhc3NpZ25lZCBMYW5ndWFnZSBJRCdzIGlzIGF0ICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZuYW1lLmh0bWwgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX01BQ19MQU5HSURfRU5HTElTSCAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0ZSRU5DSCAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HRVJNQU4gICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfSVRBTElBTiAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0RVVENIICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9TV0VESVNIICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfU1BBTklTSCAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0RBTklTSCAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9QT1JUVUdVRVNFICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRUX01BQ19MQU5HSURfTk9SV0VHSUFOICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0hFQlJFVyAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9KQVBBTkVTRSAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFRUX01BQ19MQU5HSURfQVJBQklDICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0ZJTk5JU0ggICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HUkVFSyAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFRUX01BQ19MQU5HSURfSUNFTEFORElDICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX01BTFRFU0UgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9UVVJLSVNIICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQ1JPQVRJQU4gICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0NISU5FU0VfVFJBRElUSU9OQUwgICAgICAgICAgMTkKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9VUkRVICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFRUX01BQ19MQU5HSURfSElOREkgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1RIQUkgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9LT1JFQU4gICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFRUX01BQ19MQU5HSURfTElUSFVBTklBTiAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1BPTElTSCAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9IVU5HQVJJQU4gICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFRUX01BQ19MQU5HSURfRVNUT05JQU4gICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0xFVFRJU0ggICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9TQUFNSVNLICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFRUX01BQ19MQU5HSURfRkFFUk9FU0UgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0ZBUlNJICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9SVVNTSUFOICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfQ0hJTkVTRV9TSU1QTElGSUVEICAgICAgICAgICAzMworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0ZMRU1JU0ggICAgICAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9JUklTSCAgICAgICAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQUxCQU5JQU4gICAgICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1JPTUFOSUFOICAgICAgICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9DWkVDSCAgICAgICAgICAgICAgICAgICAgICAgIDM4CisjZGVmaW5lIFRUX01BQ19MQU5HSURfU0xPVkFLICAgICAgICAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1NMT1ZFTklBTiAgICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9ZSURESVNIICAgICAgICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIFRUX01BQ19MQU5HSURfU0VSQklBTiAgICAgICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX01BQ0VET05JQU4gICAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9CVUxHQVJJQU4gICAgICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIFRUX01BQ19MQU5HSURfVUtSQUlOSUFOICAgICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0JZRUxPUlVTU0lBTiAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9VWkJFSyAgICAgICAgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIFRUX01BQ19MQU5HSURfS0FaQUtIICAgICAgICAgICAgICAgICAgICAgICA0OAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FaRVJCQUlKQU5JICAgICAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9BWkVSQkFJSkFOSV9DWVJJTExJQ19TQ1JJUFQgIDQ5CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQVpFUkJBSUpBTklfQVJBQklDX1NDUklQVCAgICA1MAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FSTUVOSUFOICAgICAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HRU9SR0lBTiAgICAgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfTU9MREFWSUFOICAgICAgICAgICAgICAgICAgICA1MworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0tJUkdISVogICAgICAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9UQUpJS0kgICAgICAgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfVFVSS01FTiAgICAgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX01PTkdPTElBTiAgICAgICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NT05HT0xJQU5fTU9OR09MSUFOX1NDUklQVCAgIDU3CisjZGVmaW5lIFRUX01BQ19MQU5HSURfTU9OR09MSUFOX0NZUklMTElDX1NDUklQVCAgICA1OAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1BBU0hUTyAgICAgICAgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9LVVJESVNIICAgICAgICAgICAgICAgICAgICAgIDYwCisjZGVmaW5lIFRUX01BQ19MQU5HSURfS0FTSE1JUkkgICAgICAgICAgICAgICAgICAgICA2MQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1NJTkRISSAgICAgICAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9USUJFVEFOICAgICAgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIFRUX01BQ19MQU5HSURfTkVQQUxJICAgICAgICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1NBTlNLUklUICAgICAgICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NQVJBVEhJICAgICAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQkVOR0FMSSAgICAgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FTU0FNRVNFICAgICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HVUpBUkFUSSAgICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIFRUX01BQ19MQU5HSURfUFVOSkFCSSAgICAgICAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX09SSVlBICAgICAgICAgICAgICAgICAgICAgICAgNzEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NQUxBWUFMQU0gICAgICAgICAgICAgICAgICAgIDcyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfS0FOTkFEQSAgICAgICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBUVF9NQUNfTEFOR0lEX1RBTUlMICAgICAgICAgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9URUxVR1UgICAgICAgICAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfU0lOSEFMRVNFICAgICAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0JVUk1FU0UgICAgICAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9LSE1FUiAgICAgICAgICAgICAgICAgICAgICAgIDc4CisjZGVmaW5lIFRUX01BQ19MQU5HSURfTEFPICAgICAgICAgICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1ZJRVROQU1FU0UgICAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9JTkRPTkVTSUFOICAgICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIFRUX01BQ19MQU5HSURfVEFHQUxPRyAgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX01BTEFZX1JPTUFOX1NDUklQVCAgICAgICAgICAgODMKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NQUxBWV9BUkFCSUNfU0NSSVBUICAgICAgICAgIDg0CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQU1IQVJJQyAgICAgICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1RJR1JJTllBICAgICAgICAgICAgICAgICAgICAgODYKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HQUxMQSAgICAgICAgICAgICAgICAgICAgICAgIDg3CisjZGVmaW5lIFRUX01BQ19MQU5HSURfU09NQUxJICAgICAgICAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1NXQUhJTEkgICAgICAgICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9SVUFOREEgICAgICAgICAgICAgICAgICAgICAgIDkwCisjZGVmaW5lIFRUX01BQ19MQU5HSURfUlVOREkgICAgICAgICAgICAgICAgICAgICAgICA5MQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0NIRVdBICAgICAgICAgICAgICAgICAgICAgICAgOTIKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NQUxBR0FTWSAgICAgICAgICAgICAgICAgICAgIDkzCisjZGVmaW5lIFRUX01BQ19MQU5HSURfRVNQRVJBTlRPICAgICAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1dFTFNIICAgICAgICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9CQVNRVUUgICAgICAgICAgICAgICAgICAgICAgMTI5CisjZGVmaW5lIFRUX01BQ19MQU5HSURfQ0FUQUxBTiAgICAgICAgICAgICAgICAgICAgIDEzMAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0xBVElOICAgICAgICAgICAgICAgICAgICAgICAxMzEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9RVUVDSFVBICAgICAgICAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfR1VBUkFOSSAgICAgICAgICAgICAgICAgICAgIDEzMworI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FZTUFSQSAgICAgICAgICAgICAgICAgICAgICAxMzQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9UQVRBUiAgICAgICAgICAgICAgICAgICAgICAgMTM1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfVUlHSFVSICAgICAgICAgICAgICAgICAgICAgIDEzNgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0RaT05HS0hBICAgICAgICAgICAgICAgICAgICAxMzcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9KQVZBTkVTRSAgICAgICAgICAgICAgICAgICAgMTM4CisjZGVmaW5lIFRUX01BQ19MQU5HSURfU1VOREFORVNFICAgICAgICAgICAgICAgICAgIDEzOQorCisKKyNpZiAwICAvKiB0aGVzZSBzZWVtIHRvIGJlIGVycm9ycyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkICovCisKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9TQ09UVElTSF9HQUVMSUMgICAgICAgICAgICAgMTQwCisjZGVmaW5lIFRUX01BQ19MQU5HSURfSVJJU0hfR0FFTElDICAgICAgICAgICAgICAgIDE0MQorCisjZW5kaWYKKworCisgIC8qIFRoZSBmb2xsb3dpbmcgY29kZXMgYXJlIG5ldyBhcyBvZiAyMDAwLTAzLTEwICovCisjZGVmaW5lIFRUX01BQ19MQU5HSURfR0FMSUNJQU4gICAgICAgICAgICAgICAgICAgIDE0MAorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FGUklLQUFOUyAgICAgICAgICAgICAgICAgICAxNDEKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9CUkVUT04gICAgICAgICAgICAgICAgICAgICAgMTQyCisjZGVmaW5lIFRUX01BQ19MQU5HSURfSU5VS1RJVFVUICAgICAgICAgICAgICAgICAgIDE0MworI2RlZmluZSBUVF9NQUNfTEFOR0lEX1NDT1RUSVNIX0dBRUxJQyAgICAgICAgICAgICAxNDQKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9NQU5YX0dBRUxJQyAgICAgICAgICAgICAgICAgMTQ1CisjZGVmaW5lIFRUX01BQ19MQU5HSURfSVJJU0hfR0FFTElDICAgICAgICAgICAgICAgIDE0NgorI2RlZmluZSBUVF9NQUNfTEFOR0lEX1RPTkdBTiAgICAgICAgICAgICAgICAgICAgICAxNDcKKyNkZWZpbmUgVFRfTUFDX0xBTkdJRF9HUkVFS19QT0xZVE9OSUMgICAgICAgICAgICAgMTQ4CisjZGVmaW5lIFRUX01BQ19MQU5HSURfR1JFRUxBTkRJQyAgICAgICAgICAgICAgICAgIDE0OQorI2RlZmluZSBUVF9NQUNfTEFOR0lEX0FaRVJCQUlKQU5JX1JPTUFOX1NDUklQVCAgICAxNTAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBsYW5ndWFnZSBpZGVudGlmaWVyIGZpZWxkIGluIHRoZSBuYW1lIHJlY29yZHMgICovCisgIC8qIG9mIHRoZSBUVEYgYG5hbWUnIHRhYmxlIGlmIHRoZSBgcGxhdGZvcm0nIGlkZW50aWZpZXIgY29kZSBpcyAgICAgICAgICAqLworICAvKiBUVF9QTEFURk9STV9NSUNST1NPRlQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBjYW5vbmljYWwgc291cmNlIGZvciB0aGUgTVMgYXNzaWduZWQgTENJRHMgaXMgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFsZGV2L3JlZmVyZW5jZS9sY2lkLWFsbC5tc3B4ICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfR0VORVJBTCAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfU0FVRElfQVJBQklBICAgICAgICAgICAgICAgMHgwNDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfSVJBUSAgICAgICAgICAgICAgICAgICAgICAgMHgwODAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfRUdZUFQgICAgICAgICAgICAgICAgICAgICAgMHgwQzAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfTElCWUEgICAgICAgICAgICAgICAgICAgICAgMHgxMDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfQUxHRVJJQSAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfTU9ST0NDTyAgICAgICAgICAgICAgICAgICAgMHgxODAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfVFVOSVNJQSAgICAgICAgICAgICAgICAgICAgMHgxQzAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfT01BTiAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfWUVNRU4gICAgICAgICAgICAgICAgICAgICAgMHgyNDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfU1lSSUEgICAgICAgICAgICAgICAgICAgICAgMHgyODAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfSk9SREFOICAgICAgICAgICAgICAgICAgICAgMHgyQzAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfTEVCQU5PTiAgICAgICAgICAgICAgICAgICAgMHgzMDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfS1VXQUlUICAgICAgICAgICAgICAgICAgICAgMHgzNDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfVUFFICAgICAgICAgICAgICAgICAgICAgICAgMHgzODAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfQkFIUkFJTiAgICAgICAgICAgICAgICAgICAgMHgzQzAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUkFCSUNfUUFUQVIgICAgICAgICAgICAgICAgICAgICAgMHg0MDAxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9CVUxHQVJJQU5fQlVMR0FSSUEgICAgICAgICAgICAgICAgMHgwNDAyCisjZGVmaW5lIFRUX01TX0xBTkdJRF9DQVRBTEFOX1NQQUlOICAgICAgICAgICAgICAgICAgICAgMHgwNDAzCisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSElORVNFX0dFTkVSQUwgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSElORVNFX1RBSVdBTiAgICAgICAgICAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSElORVNFX1BSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwODA0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSElORVNFX0hPTkdfS09ORyAgICAgICAgICAgICAgICAgMHgwQzA0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSElORVNFX1NJTkdBUE9SRSAgICAgICAgICAgICAgICAgMHgxMDA0CisKKyNpZiAxICAvKiB0aGlzIGxvb2tzIGxpa2UgdGhlIGNvcnJlY3QgdmFsdWUgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0NISU5FU0VfTUFDQVUgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyNlbHNlICAvKiBidXQgYmV3YXJlLCBNaWNyb3NvZnQgbWF5IGNoYW5nZSBpdHMgbWluZC4uLgorICAgICAgICAgIHRoZSBtb3N0IHJlY2VudCBXb3JkIHJlZmVyZW5jZSBoYXMgdGhlIGZvbGxvd2luZzogKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0NISU5FU0VfTUFDQVUgIFRUX01TX0xBTkdJRF9DSElORVNFX0hPTkdfS09ORworI2VuZGlmCisKKyNpZiAwICAvKiB1c2VkIG9ubHkgd2l0aCAuTkVUIGBjdWx0dXJlcyc7IGNvbW1lbnRlZCBvdXQgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0NISU5FU0VfVFJBRElUSU9OQUwgICAgICAgICAgICAgICAweDdDMDQKKyNlbmRpZgorCisjZGVmaW5lIFRUX01TX0xBTkdJRF9DWkVDSF9DWkVDSF9SRVBVQkxJQyAgICAgICAgICAgICAgMHgwNDA1CisjZGVmaW5lIFRUX01TX0xBTkdJRF9EQU5JU0hfREVOTUFSSyAgICAgICAgICAgICAgICAgICAgMHgwNDA2CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRVJNQU5fR0VSTUFOWSAgICAgICAgICAgICAgICAgICAgMHgwNDA3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRVJNQU5fU1dJVFpFUkxBTkQgICAgICAgICAgICAgICAgMHgwODA3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRVJNQU5fQVVTVFJJQSAgICAgICAgICAgICAgICAgICAgMHgwQzA3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRVJNQU5fTFVYRU1CT1VSRyAgICAgICAgICAgICAgICAgMHgxMDA3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRVJNQU5fTElFQ0hURU5TVEVJICAgICAgICAgICAgICAgMHgxNDA3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HUkVFS19HUkVFQ0UgICAgICAgICAgICAgICAgICAgICAgMHgwNDA4CisKKyAgLyogZG9uJ3QgYXNrIHdoYXQgdGhpcyBvbmUgbWVhbnMuLi4gSXQgaXMgY29tbWVudGVkIG91dCBjdXJyZW50bHkuICovCisjaWYgMAorI2RlZmluZSBUVF9NU19MQU5HSURfR1JFRUtfR1JFRUNFMiAgICAgICAgICAgICAgICAgICAgIDB4MjAwOAorI2VuZGlmCisKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfR0VORVJBTCAgICAgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfVU5JVEVEX1NUQVRFUyAgICAgICAgICAgICAweDA0MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfVU5JVEVEX0tJTkdET00gICAgICAgICAgICAweDA4MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfQVVTVFJBTElBICAgICAgICAgICAgICAgICAweDBDMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfQ0FOQURBICAgICAgICAgICAgICAgICAgICAweDEwMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfTkVXX1pFQUxBTkQgICAgICAgICAgICAgICAweDE0MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfSVJFTEFORCAgICAgICAgICAgICAgICAgICAweDE4MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfU09VVEhfQUZSSUNBICAgICAgICAgICAgICAweDFDMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfSkFNQUlDQSAgICAgICAgICAgICAgICAgICAweDIwMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfQ0FSSUJCRUFOICAgICAgICAgICAgICAgICAweDI0MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfQkVMSVpFICAgICAgICAgICAgICAgICAgICAweDI4MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfVFJJTklEQUQgICAgICAgICAgICAgICAgICAweDJDMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfWklNQkFCV0UgICAgICAgICAgICAgICAgICAweDMwMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfUEhJTElQUElORVMgICAgICAgICAgICAgICAweDM0MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfSU5ET05FU0lBICAgICAgICAgICAgICAgICAweDM4MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfSE9OR19LT05HICAgICAgICAgICAgICAgICAweDNDMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfSU5ESUEgICAgICAgICAgICAgICAgICAgICAweDQwMDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfTUFMQVlTSUEgICAgICAgICAgICAgICAgICAweDQ0MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0VOR0xJU0hfU0lOR0FQT1JFICAgICAgICAgICAgICAgICAweDQ4MDkKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfU1BBSU5fVFJBRElUSU9OQUxfU09SVCAgICAweDA0MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfTUVYSUNPICAgICAgICAgICAgICAgICAgICAweDA4MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfU1BBSU5fSU5URVJOQVRJT05BTF9TT1JUICAweDBDMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfR1VBVEVNQUxBICAgICAgICAgICAgICAgICAweDEwMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfQ09TVEFfUklDQSAgICAgICAgICAgICAgICAweDE0MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfUEFOQU1BICAgICAgICAgICAgICAgICAgICAweDE4MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDICAgICAgICAweDFDMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfVkVORVpVRUxBICAgICAgICAgICAgICAgICAweDIwMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfQ09MT01CSUEgICAgICAgICAgICAgICAgICAweDI0MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfUEVSVSAgICAgICAgICAgICAgICAgICAgICAweDI4MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfQVJHRU5USU5BICAgICAgICAgICAgICAgICAweDJDMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfRUNVQURPUiAgICAgICAgICAgICAgICAgICAweDMwMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfQ0hJTEUgICAgICAgICAgICAgICAgICAgICAweDM0MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfVVJVR1VBWSAgICAgICAgICAgICAgICAgICAweDM4MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfUEFSQUdVQVkgICAgICAgICAgICAgICAgICAweDNDMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfQk9MSVZJQSAgICAgICAgICAgICAgICAgICAweDQwMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfRUxfU0FMVkFET1IgICAgICAgICAgICAgICAweDQ0MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfSE9ORFVSQVMgICAgICAgICAgICAgICAgICAweDQ4MEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfTklDQVJBR1VBICAgICAgICAgICAgICAgICAweDRDMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfUFVFUlRPX1JJQ08gICAgICAgICAgICAgICAweDUwMEEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfVU5JVEVEX1NUQVRFUyAgICAgICAgICAgICAweDU0MEEKKyAgLyogVGhlIGZvbGxvd2luZyBJRCBibGF0YW50bHkgdmlvbGF0ZSBNUyBzcGVjcyBieSB1c2luZyBhICovCisgIC8qIHN1Ymxhbmd1YWdlID4gMHgxRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUVF9NU19MQU5HSURfU1BBTklTSF9MQVRJTl9BTUVSSUNBICAgICAgICAgICAgIDB4RTQwQVUKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZJTk5JU0hfRklOTEFORCAgICAgICAgICAgICAgICAgICAweDA0MEIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9GUkFOQ0UgICAgICAgICAgICAgICAgICAgICAweDA0MEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9CRUxHSVVNICAgICAgICAgICAgICAgICAgICAweDA4MEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9DQU5BREEgICAgICAgICAgICAgICAgICAgICAweDBDMEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9TV0lUWkVSTEFORCAgICAgICAgICAgICAgICAweDEwMEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9MVVhFTUJPVVJHICAgICAgICAgICAgICAgICAweDE0MEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9NT05BQ08gICAgICAgICAgICAgICAgICAgICAweDE4MEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9XRVNUX0lORElFUyAgICAgICAgICAgICAgICAweDFDMEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9SRVVOSU9OICAgICAgICAgICAgICAgICAgICAweDIwMEMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9DT05HTyAgICAgICAgICAgICAgICAgICAgICAweDI0MEMKKyAgLyogd2hpY2ggd2FzIGZvcm1lcmx5OiAqLworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX1pBSVJFICBUVF9NU19MQU5HSURfRlJFTkNIX0NPTkdPCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfU0VORUdBTCAgICAgICAgICAgICAgICAgICAgMHgyODBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ0FNRVJPT04gICAgICAgICAgICAgICAgICAgMHgyQzBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ09URV9EX0lWT0lSRSAgICAgICAgICAgICAgMHgzMDBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTUFMSSAgICAgICAgICAgICAgICAgICAgICAgMHgzNDBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTU9ST0NDTyAgICAgICAgICAgICAgICAgICAgMHgzODBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfSEFJVEkgICAgICAgICAgICAgICAgICAgICAgMHgzQzBDCisgIC8qIGFuZCBhbm90aGVyIHZpb2xhdGlvbiBvZiB0aGUgc3BlYyAoc2VlIDB4RTQwQVUpICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTk9SVEhfQUZSSUNBICAgICAgICAgICAgICAgMHhFNDBDVQorI2RlZmluZSBUVF9NU19MQU5HSURfSEVCUkVXX0lTUkFFTCAgICAgICAgICAgICAgICAgICAgIDB4MDQwRAorI2RlZmluZSBUVF9NU19MQU5HSURfSFVOR0FSSUFOX0hVTkdBUlkgICAgICAgICAgICAgICAgIDB4MDQwRQorI2RlZmluZSBUVF9NU19MQU5HSURfSUNFTEFORElDX0lDRUxBTkQgICAgICAgICAgICAgICAgIDB4MDQwRgorI2RlZmluZSBUVF9NU19MQU5HSURfSVRBTElBTl9JVEFMWSAgICAgICAgICAgICAgICAgICAgIDB4MDQxMAorI2RlZmluZSBUVF9NU19MQU5HSURfSVRBTElBTl9TV0lUWkVSTEFORCAgICAgICAgICAgICAgIDB4MDgxMAorI2RlZmluZSBUVF9NU19MQU5HSURfSkFQQU5FU0VfSkFQQU4gICAgICAgICAgICAgICAgICAgIDB4MDQxMQorI2RlZmluZSBUVF9NU19MQU5HSURfS09SRUFOX0VYVEVOREVEX1dBTlNVTkdfS09SRUEgICAgIDB4MDQxMgorI2RlZmluZSBUVF9NU19MQU5HSURfS09SRUFOX0pPSEFCX0tPUkVBICAgICAgICAgICAgICAgIDB4MDgxMgorI2RlZmluZSBUVF9NU19MQU5HSURfRFVUQ0hfTkVUSEVSTEFORFMgICAgICAgICAgICAgICAgIDB4MDQxMworI2RlZmluZSBUVF9NU19MQU5HSURfRFVUQ0hfQkVMR0lVTSAgICAgICAgICAgICAgICAgICAgIDB4MDgxMworI2RlZmluZSBUVF9NU19MQU5HSURfTk9SV0VHSUFOX05PUldBWV9CT0tNQUwgICAgICAgICAgIDB4MDQxNAorI2RlZmluZSBUVF9NU19MQU5HSURfTk9SV0VHSUFOX05PUldBWV9OWU5PUlNLICAgICAgICAgIDB4MDgxNAorI2RlZmluZSBUVF9NU19MQU5HSURfUE9MSVNIX1BPTEFORCAgICAgICAgICAgICAgICAgICAgIDB4MDQxNQorI2RlZmluZSBUVF9NU19MQU5HSURfUE9SVFVHVUVTRV9CUkFaSUwgICAgICAgICAgICAgICAgIDB4MDQxNgorI2RlZmluZSBUVF9NU19MQU5HSURfUE9SVFVHVUVTRV9QT1JUVUdBTCAgICAgICAgICAgICAgIDB4MDgxNgorI2RlZmluZSBUVF9NU19MQU5HSURfUkhBRVRPX1JPTUFOSUNfU1dJVFpFUkxBTkQgICAgICAgIDB4MDQxNworI2RlZmluZSBUVF9NU19MQU5HSURfUk9NQU5JQU5fUk9NQU5JQSAgICAgICAgICAgICAgICAgIDB4MDQxOAorI2RlZmluZSBUVF9NU19MQU5HSURfTU9MREFWSUFOX01PTERBVklBICAgICAgICAgICAgICAgIDB4MDgxOAorI2RlZmluZSBUVF9NU19MQU5HSURfUlVTU0lBTl9SVVNTSUEgICAgICAgICAgICAgICAgICAgIDB4MDQxOQorI2RlZmluZSBUVF9NU19MQU5HSURfUlVTU0lBTl9NT0xEQVZJQSAgICAgICAgICAgICAgICAgIDB4MDgxOQorI2RlZmluZSBUVF9NU19MQU5HSURfQ1JPQVRJQU5fQ1JPQVRJQSAgICAgICAgICAgICAgICAgIDB4MDQxQQorI2RlZmluZSBUVF9NU19MQU5HSURfU0VSQklBTl9TRVJCSUFfTEFUSU4gICAgICAgICAgICAgIDB4MDgxQQorI2RlZmluZSBUVF9NU19MQU5HSURfU0VSQklBTl9TRVJCSUFfQ1lSSUxMSUMgICAgICAgICAgIDB4MEMxQQorCisjaWYgMCAgLyogdGhpcyB1c2VkIHRvIGJlIHRoaXMgdmFsdWUsIGJ1dCBpdCBsb29rcyBsaWtlIHdlIHdlcmUgd3JvbmcgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0JPU05JQU5fQk9TTklBX0hFUlpFR09WSU5BICAgICAgICAweDEwMUEKKyNlbHNlICAvKiBjdXJyZW50IHNvdXJjZXMgc2F5ICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9DUk9BVElBTl9CT1NOSUFfSEVSWkVHT1ZJTkEgICAgICAgMHgxMDFBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9CT1NOSUFOX0JPU05JQV9IRVJaRUdPVklOQSAgICAgICAgMHgxNDFBCisgICAgICAgLyogYW5kIFhQc3AyIFBsYXRmb3JtIFNESyBhZGRlZCAoMjAwNC0wNy0yNikgKi8KKyAgICAgICAvKiBOYW1lcyBhcmUgc2hvcnRlbmVkIHRvIGJlIHNpZ25pZmljYW50IHdpdGhpbiA0MCBjaGFycy4gKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fQk9TTklBX0hFUlpfTEFUSU4gICAgICAgICAweDE4MUEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fQk9TTklBX0hFUlpfQ1lSSUxMSUMgICAgICAweDE4MUEKKyNlbmRpZgorCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TTE9WQUtfU0xPVkFLSUEgICAgICAgICAgICAgICAgICAgMHgwNDFCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BTEJBTklBTl9BTEJBTklBICAgICAgICAgICAgICAgICAgMHgwNDFDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TV0VESVNIX1NXRURFTiAgICAgICAgICAgICAgICAgICAgMHgwNDFECisjZGVmaW5lIFRUX01TX0xBTkdJRF9TV0VESVNIX0ZJTkxBTkQgICAgICAgICAgICAgICAgICAgMHgwODFECisjZGVmaW5lIFRUX01TX0xBTkdJRF9USEFJX1RIQUlMQU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDFFCisjZGVmaW5lIFRUX01TX0xBTkdJRF9UVVJLSVNIX1RVUktFWSAgICAgICAgICAgICAgICAgICAgMHgwNDFGCisjZGVmaW5lIFRUX01TX0xBTkdJRF9VUkRVX1BBS0lTVEFOICAgICAgICAgICAgICAgICAgICAgMHgwNDIwCisjZGVmaW5lIFRUX01TX0xBTkdJRF9VUkRVX0lORElBICAgICAgICAgICAgICAgICAgICAgICAgMHgwODIwCisjZGVmaW5lIFRUX01TX0xBTkdJRF9JTkRPTkVTSUFOX0lORE9ORVNJQSAgICAgICAgICAgICAgMHgwNDIxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9VS1JBSU5JQU5fVUtSQUlORSAgICAgICAgICAgICAgICAgMHgwNDIyCisjZGVmaW5lIFRUX01TX0xBTkdJRF9CRUxBUlVTSUFOX0JFTEFSVVMgICAgICAgICAgICAgICAgMHgwNDIzCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TTE9WRU5FX1NMT1ZFTklBICAgICAgICAgICAgICAgICAgMHgwNDI0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9FU1RPTklBTl9FU1RPTklBICAgICAgICAgICAgICAgICAgMHgwNDI1CisjZGVmaW5lIFRUX01TX0xBTkdJRF9MQVRWSUFOX0xBVFZJQSAgICAgICAgICAgICAgICAgICAgMHgwNDI2CisjZGVmaW5lIFRUX01TX0xBTkdJRF9MSVRIVUFOSUFOX0xJVEhVQU5JQSAgICAgICAgICAgICAgMHgwNDI3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9DTEFTU0lDX0xJVEhVQU5JQU5fTElUSFVBTklBICAgICAgMHgwODI3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9UQUpJS19UQUpJS0lTVEFOICAgICAgICAgICAgICAgICAgMHgwNDI4CisjZGVmaW5lIFRUX01TX0xBTkdJRF9GQVJTSV9JUkFOICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDI5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9WSUVUTkFNRVNFX1ZJRVRfTkFNICAgICAgICAgICAgICAgMHgwNDJBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BUk1FTklBTl9BUk1FTklBICAgICAgICAgICAgICAgICAgMHgwNDJCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BWkVSSV9BWkVSQkFJSkFOX0xBVElOICAgICAgICAgICAgMHgwNDJDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9BWkVSSV9BWkVSQkFJSkFOX0NZUklMTElDICAgICAgICAgMHgwODJDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9CQVNRVUVfU1BBSU4gICAgICAgICAgICAgICAgICAgICAgMHgwNDJECisjZGVmaW5lIFRUX01TX0xBTkdJRF9TT1JCSUFOX0dFUk1BTlkgICAgICAgICAgICAgICAgICAgMHgwNDJFCisjZGVmaW5lIFRUX01TX0xBTkdJRF9NQUNFRE9OSUFOX01BQ0VET05JQSAgICAgICAgICAgICAgMHgwNDJGCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TVVRVX1NPVVRIX0FGUklDQSAgICAgICAgICAgICAgICAgMHgwNDMwCisjZGVmaW5lIFRUX01TX0xBTkdJRF9UU09OR0FfU09VVEhfQUZSSUNBICAgICAgICAgICAgICAgMHgwNDMxCisjZGVmaW5lIFRUX01TX0xBTkdJRF9UU1dBTkFfU09VVEhfQUZSSUNBICAgICAgICAgICAgICAgMHgwNDMyCisjZGVmaW5lIFRUX01TX0xBTkdJRF9WRU5EQV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAgMHgwNDMzCisjZGVmaW5lIFRUX01TX0xBTkdJRF9YSE9TQV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAgMHgwNDM0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9aVUxVX1NPVVRIX0FGUklDQSAgICAgICAgICAgICAgICAgMHgwNDM1CisjZGVmaW5lIFRUX01TX0xBTkdJRF9BRlJJS0FBTlNfU09VVEhfQUZSSUNBICAgICAgICAgICAgMHgwNDM2CisjZGVmaW5lIFRUX01TX0xBTkdJRF9HRU9SR0lBTl9HRU9SR0lBICAgICAgICAgICAgICAgICAgMHgwNDM3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9GQUVST0VTRV9GQUVST0VfSVNMQU5EUyAgICAgICAgICAgMHgwNDM4CisjZGVmaW5lIFRUX01TX0xBTkdJRF9ISU5ESV9JTkRJQSAgICAgICAgICAgICAgICAgICAgICAgMHgwNDM5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9NQUxURVNFX01BTFRBICAgICAgICAgICAgICAgICAgICAgMHgwNDNBCisgIC8qIEFkZGVkIGJ5IFhQc3AyIFBsYXRmb3JtIFNESyAoMjAwNC0wNy0yNikgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDA0M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDA4M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fRklOTEFORCAgICAgICAgICAgICAweDBDM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9OT1JXQVkgICAgICAgICAgICAgICAgICAweDEwM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9TV0VERU4gICAgICAgICAgICAgICAgICAweDE0M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDE4M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDFDM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU0tPTFRfRklOTEFORCAgICAgICAgICAgICAgICAweDIwM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfSU5BUklfRklOTEFORCAgICAgICAgICAgICAgICAweDI0M0IKKyAgLyogLi4uIGFuZCB3ZSBhbHNvIGtlZXAgb3VyIG9sZCBpZGVudGlmaWVyLi4uICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TQUFNSV9MQVBPTklBICAgICAgICAgICAgICAgICAgICAgMHgwNDNCCisKKyNpZiAwIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBwcmV2aW91cyBpbnZlcnNpb24gKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0lSSVNIX0dBRUxJQ19JUkVMQU5EICAgICAgICAgICAgICAweDA0M0MKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NDT1RUSVNIX0dBRUxJQ19VTklURURfS0lOR0RPTSAgICAweDA4M0MKKyNlbHNlCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TQ09UVElTSF9HQUVMSUNfVU5JVEVEX0tJTkdET00gICAgMHgwODNDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9JUklTSF9HQUVMSUNfSVJFTEFORCAgICAgICAgICAgICAgMHgwNDNDCisjZW5kaWYKKworI2RlZmluZSBUVF9NU19MQU5HSURfWUlERElTSF9HRVJNQU5ZICAgICAgICAgICAgICAgICAgIDB4MDQzRAorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfTUFMQVlTSUEgICAgICAgICAgICAgICAgICAgIDB4MDQzRQorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gICAgICAgICAgIDB4MDgzRQorI2RlZmluZSBUVF9NU19MQU5HSURfS0FaQUtfS0FaQUtTVEFOICAgICAgICAgICAgICAgICAgIDB4MDQzRgorI2RlZmluZSBUVF9NU19MQU5HSURfS0lSR0hJWl9LSVJHSElaU1RBTiAvKiBDeXJpbGxpYyovIDB4MDQ0MAorICAvKiBhbGlhcyBkZWNsYXJlZCBpbiBXaW5kb3dzIDIwMDAgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0tJUkdISVpfS0lSR0hJWl9SRVBVQkxJQyBcCisgICAgICAgICAgVFRfTVNfTEFOR0lEX0tJUkdISVpfS0lSR0hJWlNUQU4KKworI2RlZmluZSBUVF9NU19MQU5HSURfU1dBSElMSV9LRU5ZQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0MQorI2RlZmluZSBUVF9NU19MQU5HSURfVFVSS01FTl9UVVJLTUVOSVNUQU4gICAgICAgICAgICAgIDB4MDQ0MgorI2RlZmluZSBUVF9NU19MQU5HSURfVVpCRUtfVVpCRUtJU1RBTl9MQVRJTiAgICAgICAgICAgIDB4MDQ0MworI2RlZmluZSBUVF9NU19MQU5HSURfVVpCRUtfVVpCRUtJU1RBTl9DWVJJTExJQyAgICAgICAgIDB4MDg0MworI2RlZmluZSBUVF9NU19MQU5HSURfVEFUQVJfVEFUQVJTVEFOICAgICAgICAgICAgICAgICAgIDB4MDQ0NAorI2RlZmluZSBUVF9NU19MQU5HSURfQkVOR0FMSV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0NQorI2RlZmluZSBUVF9NU19MQU5HSURfQkVOR0FMSV9CQU5HTEFERVNIICAgICAgICAgICAgICAgIDB4MDg0NQorI2RlZmluZSBUVF9NU19MQU5HSURfUFVOSkFCSV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0NgorI2RlZmluZSBUVF9NU19MQU5HSURfUFVOSkFCSV9BUkFCSUNfUEFLSVNUQU4gICAgICAgICAgIDB4MDg0NgorI2RlZmluZSBUVF9NU19MQU5HSURfR1VKQVJBVElfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0NworI2RlZmluZSBUVF9NU19MQU5HSURfT1JJWUFfSU5ESUEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0OAorI2RlZmluZSBUVF9NU19MQU5HSURfVEFNSUxfSU5ESUEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0OQorI2RlZmluZSBUVF9NU19MQU5HSURfVEVMVUdVX0lORElBICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0QQorI2RlZmluZSBUVF9NU19MQU5HSURfS0FOTkFEQV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0QgorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlBTEFNX0lORElBICAgICAgICAgICAgICAgICAgIDB4MDQ0QworI2RlZmluZSBUVF9NU19MQU5HSURfQVNTQU1FU0VfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0RAorI2RlZmluZSBUVF9NU19MQU5HSURfTUFSQVRISV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0RQorI2RlZmluZSBUVF9NU19MQU5HSURfU0FOU0tSSVRfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0RgorI2RlZmluZSBUVF9NU19MQU5HSURfTU9OR09MSUFOX01PTkdPTElBIC8qIEN5cmlsbGljICovIDB4MDQ1MAorI2RlZmluZSBUVF9NU19MQU5HSURfTU9OR09MSUFOX01PTkdPTElBX01PTkdPTElBTiAgICAgIDB4MDg1MAorI2RlZmluZSBUVF9NU19MQU5HSURfVElCRVRBTl9DSElOQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ1MQorICAvKiBEb24ndCB1c2UgdGhlIG5leHQgY29uc3RhbnQhICBJdCBoYXMgICAgICAgICAgICAqLworICAvKiAgICgxKSB0aGUgd3Jvbmcgc3BlbGxpbmcgKER6b25naGthKSAgICAgICAgICAgICAqLworICAvKiAgICgyKSBNaWNyb3NvZnQgZG9lc24ndCBvZmZpY2lhbGx5IGRlZmluZSBpdCAtLSAqLworICAvKiAgICAgICBhdCBsZWFzdCBpdCBpcyBub3QgaW4gdGhlIExpc3Qgb2YgTG9jYWwgICAqLworICAvKiAgICAgICBJRCBWYWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICgzKSBEem9uZ2toYSBpcyBub3QgdGhlIHNhbWUgbGFuZ3VhZ2UgYXMgICAgICAqLworICAvKiAgICAgICBUaWJldGFuLCBzbyBtZXJnaW5nIGl0IGlzIHdyb25nIGFueXdheS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUVF9NU19MQU5HSURfVElCRVRBTl9CSFVUQU4gaXMgY29ycmVjdCwgQlRXLiAgICAqLworI2RlZmluZSBUVF9NU19MQU5HSURfRFpPTkdIS0FfQkhVVEFOICAgICAgICAgICAgICAgICAgIDB4MDg1MQorCisjaWYgMAorICAvKiB0aGUgZm9sbG93aW5nIHVzZWQgdG8gYmUgZGVmaW5lZCAqLworI2RlZmluZSBUVF9NU19MQU5HSURfVElCRVRBTl9CSFVUQU4gICAgICAgICAgICAgICAgICAgIDB4MDQ1MQorICAvKiAuLi4gYnV0IGl0IHdhcyBjaGFuZ2VkOyAqLworI2Vsc2UKKyAgLyogU28gd2Ugd2lsbCBjb250aW51ZSB0byAjZGVmaW5lIGl0LCBidXQgd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSAqLworI2RlZmluZSBUVF9NU19MQU5HSURfVElCRVRBTl9CSFVUQU4gICBUVF9NU19MQU5HSURfRFpPTkdIS0FfQkhVVEFOCisjZW5kaWYKKworI2RlZmluZSBUVF9NU19MQU5HSURfV0VMU0hfV0FMRVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ1MgorI2RlZmluZSBUVF9NU19MQU5HSURfS0hNRVJfQ0FNQk9ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ1MworI2RlZmluZSBUVF9NU19MQU5HSURfTEFPX0xBT1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ1NAorI2RlZmluZSBUVF9NU19MQU5HSURfQlVSTUVTRV9NWUFOTUFSICAgICAgICAgICAgICAgICAgIDB4MDQ1NQorI2RlZmluZSBUVF9NU19MQU5HSURfR0FMSUNJQU5fU1BBSU4gICAgICAgICAgICAgICAgICAgIDB4MDQ1NgorI2RlZmluZSBUVF9NU19MQU5HSURfS09OS0FOSV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ1NworI2RlZmluZSBUVF9NU19MQU5HSURfTUFOSVBVUklfSU5ESUEgIC8qIEJlbmdhbGkgKi8gICAgIDB4MDQ1OAorI2RlZmluZSBUVF9NU19MQU5HSURfU0lOREhJX0lORElBIC8qIEFyYWJpYyAqLyAgICAgICAgIDB4MDQ1OQorI2RlZmluZSBUVF9NU19MQU5HSURfU0lOREhJX1BBS0lTVEFOICAgICAgICAgICAgICAgICAgIDB4MDg1OQorICAvKiBNaXNzaW5nIGEgTENJRCBmb3IgU2luZGhpIGluIERldmFuYWdhcmkgc2NyaXB0ICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TWVJJQUNfU1lSSUEgICAgICAgICAgICAgICAgICAgICAgMHgwNDVBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TSU5IQUxFU0VfU1JJX0xBTktBICAgICAgICAgICAgICAgMHgwNDVCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9DSEVST0tFRV9VTklURURfU1RBVEVTICAgICAgICAgICAgMHgwNDVDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9JTlVLVElUVVRfQ0FOQURBICAgICAgICAgICAgICAgICAgMHgwNDVECisjZGVmaW5lIFRUX01TX0xBTkdJRF9BTUhBUklDX0VUSElPUElBICAgICAgICAgICAgICAgICAgMHgwNDVFCisjZGVmaW5lIFRUX01TX0xBTkdJRF9UQU1BWklHSFRfTU9ST0NDTyAvKiBBcmFiaWMgKi8gICAgMHgwNDVGCisjZGVmaW5lIFRUX01TX0xBTkdJRF9UQU1BWklHSFRfTU9ST0NDT19MQVRJTiAgICAgICAgICAgMHgwODVGCisgIC8qIE1pc3NpbmcgYSBMQ0lEIGZvciBUaWZpbmFnaCBzY3JpcHQgKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0tBU0hNSVJJX1BBS0lTVEFOIC8qIEFyYWJpYyAqLyAgICAweDA0NjAKKyAgLyogU3BlbGxlZCB0aGlzIHdheSBieSBYUHNwMiBQbGF0Zm9ybSBTREsgKDIwMDQtMDctMjYpICovCisgIC8qIHNjcmlwdCBpcyB5ZXQgdW5jbGVhci4uLiBtaWdodCBiZSBBcmFiaWMsIE5hZ2FyaSBvciBTaGFyYWRhICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9LQVNITUlSSV9TQVNJQSAgICAgICAgICAgICAgICAgICAgMHgwODYwCisgIC8qIC4uLiBhbmQgYWxpYXNlZCAoYnkgTVMpIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9LQVNITUlSSV9JTkRJQSBUVF9NU19MQU5HSURfS0FTSE1JUklfU0FTSUEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX05FUEFMSV9ORVBBTCAgICAgICAgICAgICAgICAgICAgICAweDA0NjEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX05FUEFMSV9JTkRJQSAgICAgICAgICAgICAgICAgICAgICAweDA4NjEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSSVNJQU5fTkVUSEVSTEFORFMgICAgICAgICAgICAgICAweDA0NjIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1BBU0hUT19BRkdIQU5JU1RBTiAgICAgICAgICAgICAgICAweDA0NjMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZJTElQSU5PX1BISUxJUFBJTkVTICAgICAgICAgICAgICAweDA0NjQKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0RISVZFSElfTUFMRElWRVMgICAgICAgICAgICAgICAgICAweDA0NjUKKyAgLyogYWxpYXMgZGVjbGFyZWQgaW4gV2luZG93cyAyMDAwICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9ESVZFSElfTUFMRElWRVMgIFRUX01TX0xBTkdJRF9ESElWRUhJX01BTERJVkVTCisjZGVmaW5lIFRUX01TX0xBTkdJRF9FRE9fTklHRVJJQSAgICAgICAgICAgICAgICAgICAgICAgMHgwNDY2CisjZGVmaW5lIFRUX01TX0xBTkdJRF9GVUxGVUxERV9OSUdFUklBICAgICAgICAgICAgICAgICAgMHgwNDY3CisjZGVmaW5lIFRUX01TX0xBTkdJRF9IQVVTQV9OSUdFUklBICAgICAgICAgICAgICAgICAgICAgMHgwNDY4CisjZGVmaW5lIFRUX01TX0xBTkdJRF9JQklCSU9fTklHRVJJQSAgICAgICAgICAgICAgICAgICAgMHgwNDY5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9ZT1JVQkFfTklHRVJJQSAgICAgICAgICAgICAgICAgICAgMHgwNDZBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9RVUVDSFVBX0JPTElWSUEgICAgICAgICAgICAgICAgICAgMHgwNDZCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9RVUVDSFVBX0VDVUFET1IgICAgICAgICAgICAgICAgICAgMHgwODZCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9RVUVDSFVBX1BFUlUgICAgICAgICAgICAgICAgICAgICAgMHgwQzZCCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TRVBFRElfU09VVEhfQUZSSUNBICAgICAgICAgICAgICAgMHgwNDZDCisgIC8qIEFsc28gc3BlbGxlZCBieSBYUHNwMiBQbGF0Zm9ybSBTREsgKDIwMDQtMDctMjYpICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TT1RIT19TT1VUSEVSTl9TT1VUSF9BRlJJQ0EgXAorICAgICAgICAgIFRUX01TX0xBTkdJRF9TRVBFRElfU09VVEhfQUZSSUNBCisgIC8qIGxhbmd1YWdlIGNvZGVzIDB4MDQ2RCwgMHgwNDZFIGFuZCAweDA0NkYgYXJlIChzdGlsbCkgdW5rbm93bi4gKi8KKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0lHQk9fTklHRVJJQSAgICAgICAgICAgICAgICAgICAgICAweDA0NzAKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0tBTlVSSV9OSUdFUklBICAgICAgICAgICAgICAgICAgICAweDA0NzEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX09ST01PX0VUSElPUElBICAgICAgICAgICAgICAgICAgICAweDA0NzIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1RJR1JJR05BX0VUSElPUElBICAgICAgICAgICAgICAgICAweDA0NzMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1RJR1JJR05BX0VSWVRIUkVBICAgICAgICAgICAgICAgICAweDA4NzMKKyAgLyogYWxzbyBzcGVsbGVkIGluIHRoZSBgUGFzc3BvcnQgU0RLJyBsaXN0IGFzOiAqLworI2RlZmluZSBUVF9NU19MQU5HSURfVElHUklHTkFfRVJZVFJFQSAgVFRfTVNfTEFOR0lEX1RJR1JJR05BX0VSWVRIUkVBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9HVUFSQU5JX1BBUkFHVUFZICAgICAgICAgICAgICAgICAgMHgwNDc0CisjZGVmaW5lIFRUX01TX0xBTkdJRF9IQVdBSUlBTl9VTklURURfU1RBVEVTICAgICAgICAgICAgMHgwNDc1CisjZGVmaW5lIFRUX01TX0xBTkdJRF9MQVRJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDc2CisjZGVmaW5lIFRUX01TX0xBTkdJRF9TT01BTElfU09NQUxJQSAgICAgICAgICAgICAgICAgICAgMHgwNDc3CisgIC8qIE5vdGU6IFlpIGRvZXMgbm90IGhhdmUgYSAocHJvcGVyKSBJU08gNjM5LTIgY29kZSwgc2luY2UgaXQgaXMgbW9zdGx5ICovCisgIC8qICAgICAgIG5vdCB3cml0dGVuIChidXQgT1RPSCB0aGUgcGVjdWxpYXIgd3JpdGluZyBzeXN0ZW0gaXMgd29ydGggICAgICovCisgIC8qICAgICAgIHN0dWR5aW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9ZSV9DSElOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDc4CisjZGVmaW5lIFRUX01TX0xBTkdJRF9QQVBJQU1FTlRVX05FVEhFUkxBTkRTX0FOVElMTEVTICAgMHgwNDc5CisgIC8qIGxhbmd1YWdlIGNvZGVzIGZyb20gMHgwNDdBIHRvIDB4MDQ3RiBhcmUgKHN0aWxsKSB1bmtub3duLiAqLworI2RlZmluZSBUVF9NU19MQU5HSURfVUlHSFVSX0NISU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4MAorI2RlZmluZSBUVF9NU19MQU5HSURfTUFPUklfTkVXX1pFQUxBTkQgICAgICAgICAgICAgICAgIDB4MDQ4MQorCisjaWYgMCAgLyogbm90IGRlZW1lZCB1c2VmdWwgZm9yIGZvbnRzICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9IVU1BTl9JTlRFUkZBQ0VfREVWSUNFICAgICAgICAgICAgMHgwNEZGCisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBgbmFtZScgaWRlbnRpZmllciBmaWVsZCBpbiB0aGUgbmFtZSByZWNvcmRzIG9mICovCisgIC8qIHRoZSBUVEYgYG5hbWUnIHRhYmxlLiAgVGhlc2UgdmFsdWVzIGFyZSBwbGF0Zm9ybSBpbmRlcGVuZGVudC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfTkFNRV9JRF9DT1BZUklHSFQgICAgICAgICAgICAwCisjZGVmaW5lIFRUX05BTUVfSURfRk9OVF9GQU1JTFkgICAgICAgICAgMQorI2RlZmluZSBUVF9OQU1FX0lEX0ZPTlRfU1VCRkFNSUxZICAgICAgIDIKKyNkZWZpbmUgVFRfTkFNRV9JRF9VTklRVUVfSUQgICAgICAgICAgICAzCisjZGVmaW5lIFRUX05BTUVfSURfRlVMTF9OQU1FICAgICAgICAgICAgNAorI2RlZmluZSBUVF9OQU1FX0lEX1ZFUlNJT05fU1RSSU5HICAgICAgIDUKKyNkZWZpbmUgVFRfTkFNRV9JRF9QU19OQU1FICAgICAgICAgICAgICA2CisjZGVmaW5lIFRUX05BTUVfSURfVFJBREVNQVJLICAgICAgICAgICAgNworCisgIC8qIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBmcm9tIHRoZSBPcGVuVHlwZSBzcGVjICovCisjZGVmaW5lIFRUX05BTUVfSURfTUFOVUZBQ1RVUkVSICAgICAgICAgOAorI2RlZmluZSBUVF9OQU1FX0lEX0RFU0lHTkVSICAgICAgICAgICAgIDkKKyNkZWZpbmUgVFRfTkFNRV9JRF9ERVNDUklQVElPTiAgICAgICAgICAxMAorI2RlZmluZSBUVF9OQU1FX0lEX1ZFTkRPUl9VUkwgICAgICAgICAgIDExCisjZGVmaW5lIFRUX05BTUVfSURfREVTSUdORVJfVVJMICAgICAgICAgMTIKKyNkZWZpbmUgVFRfTkFNRV9JRF9MSUNFTlNFICAgICAgICAgICAgICAxMworI2RlZmluZSBUVF9OQU1FX0lEX0xJQ0VOU0VfVVJMICAgICAgICAgIDE0CisgIC8qIG51bWJlciAxNSBpcyByZXNlcnZlZCAqLworI2RlZmluZSBUVF9OQU1FX0lEX1BSRUZFUlJFRF9GQU1JTFkgICAgIDE2CisjZGVmaW5lIFRUX05BTUVfSURfUFJFRkVSUkVEX1NVQkZBTUlMWSAgMTcKKyNkZWZpbmUgVFRfTkFNRV9JRF9NQUNfRlVMTF9OQU1FICAgICAgICAxOAorCisgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBuZXcgYXMgb2YgMjAwMC0wMS0yMSAqLworI2RlZmluZSBUVF9OQU1FX0lEX1NBTVBMRV9URVhUICAgICAgICAgIDE5CisKKyAgLyogVGhpcyBpcyBuZXcgaW4gT3BlblR5cGUgMS4zICovCisjZGVmaW5lIFRUX05BTUVfSURfQ0lEX0ZJTkRGT05UX05BTUUgICAgMjAKKworICAvKiBUaGlzIGlzIG5ldyBpbiBPcGVuVHlwZSAxLjUgKi8KKyNkZWZpbmUgVFRfTkFNRV9JRF9XV1NfRkFNSUxZICAgICAgICAgICAyMQorI2RlZmluZSBUVF9OQU1FX0lEX1dXU19TVUJGQU1JTFkgICAgICAgIDIyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEJpdCBtYXNrIHZhbHVlcyBmb3IgdGhlIFVuaWNvZGUgUmFuZ2VzIGZyb20gdGhlIFRURiBgT1MyICcgdGFibGUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVXBkYXRlZCAwOC1Ob3YtMjAwOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIEJpdCAgMCAgIEJhc2ljIExhdGluICovCisjZGVmaW5lIFRUX1VDUl9CQVNJQ19MQVRJTiAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgMCkgLyogVSswMDIwLVUrMDA3RSAqLworICAvKiBCaXQgIDEgICBDMSBDb250cm9scyBhbmQgTGF0aW4tMSBTdXBwbGVtZW50ICovCisjZGVmaW5lIFRUX1VDUl9MQVRJTjFfU1VQUExFTUVOVCAgICAgICAgICAgICAgICgxTCA8PCAgMSkgLyogVSswMDgwLVUrMDBGRiAqLworICAvKiBCaXQgIDIgICBMYXRpbiBFeHRlbmRlZC1BICovCisjZGVmaW5lIFRUX1VDUl9MQVRJTl9FWFRFTkRFRF9BICAgICAgICAgICAgICAgICgxTCA8PCAgMikgLyogVSswMTAwLVUrMDE3RiAqLworICAvKiBCaXQgIDMgICBMYXRpbiBFeHRlbmRlZC1CICovCisjZGVmaW5lIFRUX1VDUl9MQVRJTl9FWFRFTkRFRF9CICAgICAgICAgICAgICAgICgxTCA8PCAgMykgLyogVSswMTgwLVUrMDI0RiAqLworICAvKiBCaXQgIDQgICBJUEEgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgUGhvbmV0aWMgRXh0ZW5zaW9ucyAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIFBob25ldGljIEV4dGVuc2lvbnMgU3VwcGxlbWVudCAqLworI2RlZmluZSBUVF9VQ1JfSVBBX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAgICAoMUwgPDwgIDQpIC8qIFUrMDI1MC1VKzAyQUYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzFEMDAtVSsxRDdGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsxRDgwLVUrMURCRiAqLworICAvKiBCaXQgIDUgICBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgKi8KKyAgLyogICAgICAgICAgTW9kaWZpZXIgVG9uZSBMZXR0ZXJzICAgICovCisjZGVmaW5lIFRUX1VDUl9TUEFDSU5HX01PRElGSUVSICAgICAgICAgICAgICAgICgxTCA8PCAgNSkgLyogVSswMkIwLVUrMDJGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrQTcwMC1VK0E3MUYgKi8KKyAgLyogQml0ICA2ICAgQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQgKi8KKyNkZWZpbmUgVFRfVUNSX0NPTUJJTklOR19ESUFDUklUSUNTICAgICAgICAgICAgKDFMIDw8ICA2KSAvKiBVKzAzMDAtVSswMzZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsxREMwLVUrMURGRiAqLworICAvKiBCaXQgIDcgICBHcmVlayBhbmQgQ29wdGljICovCisjZGVmaW5lIFRUX1VDUl9HUkVFSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgNykgLyogVSswMzcwLVUrMDNGRiAqLworICAvKiBCaXQgIDggICBDb3B0aWMgKi8KKyNkZWZpbmUgVFRfVUNSX0NPUFRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICA4KSAvKiBVKzJDODAtVSsyQ0ZGICovCisgIC8qIEJpdCAgOSAgIEN5cmlsbGljICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgQ3lyaWxsaWMgU3VwcGxlbWVudCAqLworICAvKiAgICAgICAgICBDeXJpbGxpYyBFeHRlbmRlZC1BICovCisgIC8qICAgICAgICAgIEN5cmlsbGljIEV4dGVuZGVkLUIgKi8KKyNkZWZpbmUgVFRfVUNSX0NZUklMTElDICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICA5KSAvKiBVKzA0MDAtVSswNEZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSswNTAwLVUrMDUyRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkRFMC1VKzJERkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVK0E2NDAtVStBNjlGICovCisgIC8qIEJpdCAxMCAgIEFybWVuaWFuICovCisjZGVmaW5lIFRUX1VDUl9BUk1FTklBTiAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxMCkgLyogVSswNTMwLVUrMDU4RiAqLworICAvKiBCaXQgMTEgICBIZWJyZXcgKi8KKyNkZWZpbmUgVFRfVUNSX0hFQlJFVyAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDExKSAvKiBVKzA1OTAtVSswNUZGICovCisgIC8qIEJpdCAxMiAgIFZhaSAqLworI2RlZmluZSBUVF9VQ1JfVkFJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTIpIC8qIFUrQTUwMC1VK0E2M0YgKi8KKyAgLyogQml0IDEzICAgQXJhYmljICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgQXJhYmljIFN1cHBsZW1lbnQgKi8KKyNkZWZpbmUgVFRfVUNSX0FSQUJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDEzKSAvKiBVKzA2MDAtVSswNkZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSswNzUwLVUrMDc3RiAqLworICAvKiBCaXQgMTQgICBOS28gKi8KKyNkZWZpbmUgVFRfVUNSX05LTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE0KSAvKiBVKzA3QzAtVSswN0ZGICovCisgIC8qIEJpdCAxNSAgIERldmFuYWdhcmkgKi8KKyNkZWZpbmUgVFRfVUNSX0RFVkFOQUdBUkkgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE1KSAvKiBVKzA5MDAtVSswOTdGICovCisgIC8qIEJpdCAxNiAgIEJlbmdhbGkgKi8KKyNkZWZpbmUgVFRfVUNSX0JFTkdBTEkgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE2KSAvKiBVKzA5ODAtVSswOUZGICovCisgIC8qIEJpdCAxNyAgIEd1cm11a2hpICovCisjZGVmaW5lIFRUX1VDUl9HVVJNVUtISSAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxNykgLyogVSswQTAwLVUrMEE3RiAqLworICAvKiBCaXQgMTggICBHdWphcmF0aSAqLworI2RlZmluZSBUVF9VQ1JfR1VKQVJBVEkgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTgpIC8qIFUrMEE4MC1VKzBBRkYgKi8KKyAgLyogQml0IDE5ICAgT3JpeWEgKi8KKyNkZWZpbmUgVFRfVUNSX09SSVlBICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE5KSAvKiBVKzBCMDAtVSswQjdGICovCisgIC8qIEJpdCAyMCAgIFRhbWlsICovCisjZGVmaW5lIFRUX1VDUl9UQU1JTCAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyMCkgLyogVSswQjgwLVUrMEJGRiAqLworICAvKiBCaXQgMjEgICBUZWx1Z3UgKi8KKyNkZWZpbmUgVFRfVUNSX1RFTFVHVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDIxKSAvKiBVKzBDMDAtVSswQzdGICovCisgIC8qIEJpdCAyMiAgIEthbm5hZGEgKi8KKyNkZWZpbmUgVFRfVUNSX0tBTk5BREEgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDIyKSAvKiBVKzBDODAtVSswQ0ZGICovCisgIC8qIEJpdCAyMyAgIE1hbGF5YWxhbSAqLworI2RlZmluZSBUVF9VQ1JfTUFMQVlBTEFNICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjMpIC8qIFUrMEQwMC1VKzBEN0YgKi8KKyAgLyogQml0IDI0ICAgVGhhaSAqLworI2RlZmluZSBUVF9VQ1JfVEhBSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjQpIC8qIFUrMEUwMC1VKzBFN0YgKi8KKyAgLyogQml0IDI1ICAgTGFvICovCisjZGVmaW5lIFRUX1VDUl9MQU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyNSkgLyogVSswRTgwLVUrMEVGRiAqLworICAvKiBCaXQgMjYgICBHZW9yZ2lhbiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEdlb3JnaWFuIFN1cHBsZW1lbnQgKi8KKyNkZWZpbmUgVFRfVUNSX0dFT1JHSUFOICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDI2KSAvKiBVKzEwQTAtVSsxMEZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsyRDAwLVUrMkQyRiAqLworICAvKiBCaXQgMjcgICBCYWxpbmVzZSAqLworI2RlZmluZSBUVF9VQ1JfQkFMSU5FU0UgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjcpIC8qIFUrMUIwMC1VKzFCN0YgKi8KKyAgLyogQml0IDI4ICAgSGFuZ3VsIEphbW8gKi8KKyNkZWZpbmUgVFRfVUNSX0hBTkdVTF9KQU1PICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDI4KSAvKiBVKzExMDAtVSsxMUZGICovCisgIC8qIEJpdCAyOSAgIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwgKi8KKyAgLyogICAgICAgICAgTGF0aW4gRXh0ZW5kZWQtQyAgICAgICAgICAqLworICAvKiAgICAgICAgICBMYXRpbiBFeHRlbmRlZC1EICAgICAgICAgICovCisjZGVmaW5lIFRUX1VDUl9MQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMICAgICAgICgxTCA8PCAyOSkgLyogVSsxRTAwLVUrMUVGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkM2MC1VKzJDN0YgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVK0E3MjAtVStBN0ZGICovCisgIC8qIEJpdCAzMCAgIEdyZWVrIEV4dGVuZGVkICovCisjZGVmaW5lIFRUX1VDUl9HUkVFS19FWFRFTkRFRCAgICAgICAgICAgICAgICAgICgxTCA8PCAzMCkgLyogVSsxRjAwLVUrMUZGRiAqLworICAvKiBCaXQgMzEgICBHZW5lcmFsIFB1bmN0dWF0aW9uICAgICAgKi8KKyAgLyogICAgICAgICAgU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uICovCisjZGVmaW5lIFRUX1VDUl9HRU5FUkFMX1BVTkNUVUFUSU9OICAgICAgICAgICAgICgxTCA8PCAzMSkgLyogVSsyMDAwLVUrMjA2RiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkUwMC1VKzJFN0YgKi8KKyAgLyogQml0IDMyICAgU3VwZXJzY3JpcHRzIEFuZCBTdWJzY3JpcHRzICovCisjZGVmaW5lIFRUX1VDUl9TVVBFUlNDUklQVFNfU1VCU0NSSVBUUyAgICAgICAgICgxTCA8PCAgMCkgLyogVSsyMDcwLVUrMjA5RiAqLworICAvKiBCaXQgMzMgICBDdXJyZW5jeSBTeW1ib2xzICovCisjZGVmaW5lIFRUX1VDUl9DVVJSRU5DWV9TWU1CT0xTICAgICAgICAgICAgICAgICgxTCA8PCAgMSkgLyogVSsyMEEwLVUrMjBDRiAqLworICAvKiBCaXQgMzQgICBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgRm9yIFN5bWJvbHMgKi8KKyNkZWZpbmUgVFRfVUNSX0NPTUJJTklOR19ESUFDUklUSUNTX1NZTUIgICAgICAgKDFMIDw8ICAyKSAvKiBVKzIwRDAtVSsyMEZGICovCisgIC8qIEJpdCAzNSAgIExldHRlcmxpa2UgU3ltYm9scyAqLworI2RlZmluZSBUVF9VQ1JfTEVUVEVSTElLRV9TWU1CT0xTICAgICAgICAgICAgICAoMUwgPDwgIDMpIC8qIFUrMjEwMC1VKzIxNEYgKi8KKyAgLyogQml0IDM2ICAgTnVtYmVyIEZvcm1zICovCisjZGVmaW5lIFRUX1VDUl9OVU1CRVJfRk9STVMgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgNCkgLyogVSsyMTUwLVUrMjE4RiAqLworICAvKiBCaXQgMzcgICBBcnJvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBTdXBwbGVtZW50YWwgQXJyb3dzLUEgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBTdXBwbGVtZW50YWwgQXJyb3dzLUIgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyAqLworI2RlZmluZSBUVF9VQ1JfQVJST1dTICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDUpIC8qIFUrMjE5MC1VKzIxRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzI3RjAtVSsyN0ZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsyOTAwLVUrMjk3RiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkIwMC1VKzJCRkYgKi8KKyAgLyogQml0IDM4ICAgTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIFN1cHBsZW1lbnRhbCBNYXRoZW1hdGljYWwgT3BlcmF0b3JzICAqLworICAvKiAgICAgICAgICBNaXNjZWxsYW5lb3VzIE1hdGhlbWF0aWNhbCBTeW1ib2xzLUEgKi8KKyAgLyogICAgICAgICAgTWlzY2VsbGFuZW91cyBNYXRoZW1hdGljYWwgU3ltYm9scy1CICovCisjZGVmaW5lIFRUX1VDUl9NQVRIRU1BVElDQUxfT1BFUkFUT1JTICAgICAgICAgICgxTCA8PCAgNikgLyogVSsyMjAwLVUrMjJGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkEwMC1VKzJBRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzI3QzAtVSsyN0VGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsyOTgwLVUrMjlGRiAqLworICAvKiBCaXQgMzkgTWlzY2VsbGFuZW91cyBUZWNobmljYWwgKi8KKyNkZWZpbmUgVFRfVUNSX01JU0NFTExBTkVPVVNfVEVDSE5JQ0FMICAgICAgICAgKDFMIDw8ICA3KSAvKiBVKzIzMDAtVSsyM0ZGICovCisgIC8qIEJpdCA0MCAgIENvbnRyb2wgUGljdHVyZXMgKi8KKyNkZWZpbmUgVFRfVUNSX0NPTlRST0xfUElDVFVSRVMgICAgICAgICAgICAgICAgKDFMIDw8ICA4KSAvKiBVKzI0MDAtVSsyNDNGICovCisgIC8qIEJpdCA0MSAgIE9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uICovCisjZGVmaW5lIFRUX1VDUl9PQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgOSkgLyogVSsyNDQwLVUrMjQ1RiAqLworICAvKiBCaXQgNDIgICBFbmNsb3NlZCBBbHBoYW51bWVyaWNzICovCisjZGVmaW5lIFRUX1VDUl9FTkNMT1NFRF9BTFBIQU5VTUVSSUNTICAgICAgICAgICgxTCA8PCAxMCkgLyogVSsyNDYwLVUrMjRGRiAqLworICAvKiBCaXQgNDMgICBCb3ggRHJhd2luZyAqLworI2RlZmluZSBUVF9VQ1JfQk9YX0RSQVdJTkcgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTEpIC8qIFUrMjUwMC1VKzI1N0YgKi8KKyAgLyogQml0IDQ0ICAgQmxvY2sgRWxlbWVudHMgKi8KKyNkZWZpbmUgVFRfVUNSX0JMT0NLX0VMRU1FTlRTICAgICAgICAgICAgICAgICAgKDFMIDw8IDEyKSAvKiBVKzI1ODAtVSsyNTlGICovCisgIC8qIEJpdCA0NSAgIEdlb21ldHJpYyBTaGFwZXMgKi8KKyNkZWZpbmUgVFRfVUNSX0dFT01FVFJJQ19TSEFQRVMgICAgICAgICAgICAgICAgKDFMIDw8IDEzKSAvKiBVKzI1QTAtVSsyNUZGICovCisgIC8qIEJpdCA0NiAgIE1pc2NlbGxhbmVvdXMgU3ltYm9scyAqLworI2RlZmluZSBUVF9VQ1JfTUlTQ0VMTEFORU9VU19TWU1CT0xTICAgICAgICAgICAoMUwgPDwgMTQpIC8qIFUrMjYwMC1VKzI2RkYgKi8KKyAgLyogQml0IDQ3ICAgRGluZ2JhdHMgKi8KKyNkZWZpbmUgVFRfVUNSX0RJTkdCQVRTICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE1KSAvKiBVKzI3MDAtVSsyN0JGICovCisgIC8qIEJpdCA0OCAgIENKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiAqLworI2RlZmluZSBUVF9VQ1JfQ0pLX1NZTUJPTFMgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTYpIC8qIFUrMzAwMC1VKzMwM0YgKi8KKyAgLyogQml0IDQ5ICAgSGlyYWdhbmEgKi8KKyNkZWZpbmUgVFRfVUNSX0hJUkFHQU5BICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE3KSAvKiBVKzMwNDAtVSszMDlGICovCisgIC8qIEJpdCA1MCAgIEthdGFrYW5hICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBUVF9VQ1JfS0FUQUtBTkEgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTgpIC8qIFUrMzBBMC1VKzMwRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzMxRjAtVSszMUZGICovCisgIC8qIEJpdCA1MSAgIEJvcG9tb2ZvICAgICAgICAgICovCisgIC8qICAgICAgICAgIEJvcG9tb2ZvIEV4dGVuZGVkICovCisjZGVmaW5lIFRUX1VDUl9CT1BPTU9GTyAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxOSkgLyogVSszMTAwLVUrMzEyRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMzFBMC1VKzMxQkYgKi8KKyAgLyogQml0IDUyICAgSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyAqLworI2RlZmluZSBUVF9VQ1JfSEFOR1VMX0NPTVBBVElCSUxJVFlfSkFNTyAgICAgICAoMUwgPDwgMjApIC8qIFUrMzEzMC1VKzMxOEYgKi8KKyAgLyogQml0IDUzICAgUGhhZ3MtUGEgKi8KKyNkZWZpbmUgVFRfVUNSX0NKS19NSVNDICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDIxKSAvKiBVK0E4NDAtVStBODdGICovCisjZGVmaW5lIFRUX1VDUl9LQU5CVU4gIFRUX1VDUl9DSktfTUlTQyAvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIFRUX1VDUl9QSEFHU1BBCisgIC8qIEJpdCA1NCAgIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMgKi8KKyNkZWZpbmUgVFRfVUNSX0VOQ0xPU0VEX0NKS19MRVRURVJTX01PTlRIUyAgICAgKDFMIDw8IDIyKSAvKiBVKzMyMDAtVSszMkZGICovCisgIC8qIEJpdCA1NSAgIENKSyBDb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRUX1VDUl9DSktfQ09NUEFUSUJJTElUWSAgICAgICAgICAgICAgICgxTCA8PCAyMykgLyogVSszMzAwLVUrMzNGRiAqLworICAvKiBCaXQgNTYgICBIYW5ndWwgU3lsbGFibGVzICovCisjZGVmaW5lIFRUX1VDUl9IQU5HVUwgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyNCkgLyogVStBQzAwLVUrRDdBMyAqLworICAvKiBCaXQgNTcgICBIaWdoIFN1cnJvZ2F0ZXMgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEhpZ2ggUHJpdmF0ZSBVc2UgU3Vycm9nYXRlcyAgKi8KKyAgLyogICAgICAgICAgTG93IFN1cnJvZ2F0ZXMgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFjY29yZGluZyB0byBPcGVuVHlwZSBzcGVjcyB2LjEuMyssICAgKi8KKyAgLyogc2V0dGluZyBiaXQgNTcgaW1wbGllcyB0aGF0IHRoZXJlIGlzICAqLworICAvKiBhdCBsZWFzdCBvbmUgY29kZXBvaW50IGJleW9uZCB0aGUgICAgICovCisgIC8qIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSB0aGF0IGlzICAgICAgKi8KKyAgLyogc3VwcG9ydGVkIGJ5IHRoaXMgZm9udC4gIFNvIGl0IHJlYWxseSAqLworICAvKiBtZWFucyA+PSBVKzEwMDAwICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX1VDUl9TVVJST0dBVEVTICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyNSkgLyogVStEODAwLVUrREI3RiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrREI4MC1VK0RCRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVK0RDMDAtVStERkZGICovCisjZGVmaW5lIFRUX1VDUl9OT05fUExBTkVfMCAgVFRfVUNSX1NVUlJPR0FURVMKKyAgLyogQml0IDU4ICBQaG9lbmljaWFuICovCisjZGVmaW5lIFRUX1VDUl9QSE9FTklDSUFOICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyNikgLypVKzEwOTAwLVUrMTA5MUYqLworICAvKiBCaXQgNTkgICBDSksgVW5pZmllZCBJZGVvZ3JhcGhzICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIENKSyBSYWRpY2FscyBTdXBwbGVtZW50ICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgS2FuZ3hpIFJhZGljYWxzICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzICovCisgIC8qICAgICAgICAgIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEgKi8KKyAgLyogICAgICAgICAgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAqLworICAvKiAgICAgICAgICBLYW5idW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX1VDUl9DSktfVU5JRklFRF9JREVPR1JBUEhTICAgICAgICAgICgxTCA8PCAyNykgLyogVSs0RTAwLVUrOUZGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMkU4MC1VKzJFRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzJGMDAtVSsyRkRGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsyRkYwLVUrMkZGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMzQwMC1VKzREQjUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMjAwMDAtVSsyQTZERiovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSszMTkwLVUrMzE5RiAqLworICAvKiBCaXQgNjAgICBQcml2YXRlIFVzZSAqLworI2RlZmluZSBUVF9VQ1JfUFJJVkFURV9VU0UgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjgpIC8qIFUrRTAwMC1VK0Y4RkYgKi8KKyAgLyogQml0IDYxICAgQ0pLIFN0cm9rZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQgKi8KKyNkZWZpbmUgVFRfVUNSX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFMgICAgKDFMIDw8IDI5KSAvKiBVKzMxQzAtVSszMUVGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVStGOTAwLVUrRkFGRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qVSsyRjgwMC1VKzJGQTFGKi8KKyAgLyogQml0IDYyICAgQWxwaGFiZXRpYyBQcmVzZW50YXRpb24gRm9ybXMgKi8KKyNkZWZpbmUgVFRfVUNSX0FMUEhBQkVUSUNfUFJFU0VOVEFUSU9OX0ZPUk1TICAgKDFMIDw8IDMwKSAvKiBVK0ZCMDAtVStGQjRGICovCisgIC8qIEJpdCA2MyAgIEFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSAqLworI2RlZmluZSBUVF9VQ1JfQVJBQklDX1BSRVNFTlRBVElPTlNfQSAgICAgICAgICAoMUwgPDwgMzEpIC8qIFUrRkI1MC1VK0ZERkYgKi8KKyAgLyogQml0IDY0ICAgQ29tYmluaW5nIEhhbGYgTWFya3MgKi8KKyNkZWZpbmUgVFRfVUNSX0NPTUJJTklOR19IQUxGX01BUktTICAgICAgICAgICAgKDFMIDw8ICAwKSAvKiBVK0ZFMjAtVStGRTJGICovCisgIC8qIEJpdCA2NSAgIFZlcnRpY2FsIGZvcm1zICAgICAgICAgICovCisgIC8qICAgICAgICAgIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zICovCisjZGVmaW5lIFRUX1VDUl9DSktfQ09NUEFUSUJJTElUWV9GT1JNUyAgICAgICAgICgxTCA8PCAgMSkgLyogVStGRTEwLVUrRkUxRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrRkUzMC1VK0ZFNEYgKi8KKyAgLyogQml0IDY2ICAgU21hbGwgRm9ybSBWYXJpYW50cyAqLworI2RlZmluZSBUVF9VQ1JfU01BTExfRk9STV9WQVJJQU5UUyAgICAgICAgICAgICAoMUwgPDwgIDIpIC8qIFUrRkU1MC1VK0ZFNkYgKi8KKyAgLyogQml0IDY3ICAgQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CICovCisjZGVmaW5lIFRUX1VDUl9BUkFCSUNfUFJFU0VOVEFUSU9OU19CICAgICAgICAgICgxTCA8PCAgMykgLyogVStGRTcwLVUrRkVGRSAqLworICAvKiBCaXQgNjggICBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyAqLworI2RlZmluZSBUVF9VQ1JfSEFMRldJRFRIX0ZVTExXSURUSF9GT1JNUyAgICAgICAoMUwgPDwgIDQpIC8qIFUrRkYwMC1VK0ZGRUYgKi8KKyAgLyogQml0IDY5ICAgU3BlY2lhbHMgKi8KKyNkZWZpbmUgVFRfVUNSX1NQRUNJQUxTICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICA1KSAvKiBVK0ZGRjAtVStGRkZEICovCisgIC8qIEJpdCA3MCAgIFRpYmV0YW4gKi8KKyNkZWZpbmUgVFRfVUNSX1RJQkVUQU4gICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICA2KSAvKiBVKzBGMDAtVSswRkZGICovCisgIC8qIEJpdCA3MSAgIFN5cmlhYyAqLworI2RlZmluZSBUVF9VQ1JfU1lSSUFDICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDcpIC8qIFUrMDcwMC1VKzA3NEYgKi8KKyAgLyogQml0IDcyICAgVGhhYW5hICovCisjZGVmaW5lIFRUX1VDUl9USEFBTkEgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgOCkgLyogVSswNzgwLVUrMDdCRiAqLworICAvKiBCaXQgNzMgICBTaW5oYWxhICovCisjZGVmaW5lIFRUX1VDUl9TSU5IQUxBICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgOSkgLyogVSswRDgwLVUrMERGRiAqLworICAvKiBCaXQgNzQgICBNeWFubWFyICovCisjZGVmaW5lIFRUX1VDUl9NWUFOTUFSICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxMCkgLyogVSsxMDAwLVUrMTA5RiAqLworICAvKiBCaXQgNzUgICBFdGhpb3BpYyAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEV0aGlvcGljIFN1cHBsZW1lbnQgKi8KKyAgLyogICAgICAgICAgRXRoaW9waWMgRXh0ZW5kZWQgICAqLworI2RlZmluZSBUVF9VQ1JfRVRISU9QSUMgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTEpIC8qIFUrMTIwMC1VKzEzN0YgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzEzODAtVSsxMzlGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsyRDgwLVUrMkRERiAqLworICAvKiBCaXQgNzYgICBDaGVyb2tlZSAqLworI2RlZmluZSBUVF9VQ1JfQ0hFUk9LRUUgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTIpIC8qIFUrMTNBMC1VKzEzRkYgKi8KKyAgLyogQml0IDc3ICAgVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyAqLworI2RlZmluZSBUVF9VQ1JfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MgICAoMUwgPDwgMTMpIC8qIFUrMTQwMC1VKzE2N0YgKi8KKyAgLyogQml0IDc4ICAgT2doYW0gKi8KKyNkZWZpbmUgVFRfVUNSX09HSEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE0KSAvKiBVKzE2ODAtVSsxNjlGICovCisgIC8qIEJpdCA3OSAgIFJ1bmljICovCisjZGVmaW5lIFRUX1VDUl9SVU5JQyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxNSkgLyogVSsxNkEwLVUrMTZGRiAqLworICAvKiBCaXQgODAgICBLaG1lciAgICAgICAgICovCisgIC8qICAgICAgICAgIEtobWVyIFN5bWJvbHMgKi8KKyNkZWZpbmUgVFRfVUNSX0tITUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE2KSAvKiBVKzE3ODAtVSsxN0ZGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsxOUUwLVUrMTlGRiAqLworICAvKiBCaXQgODEgICBNb25nb2xpYW4gKi8KKyNkZWZpbmUgVFRfVUNSX01PTkdPTElBTiAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE3KSAvKiBVKzE4MDAtVSsxOEFGICovCisgIC8qIEJpdCA4MiAgIEJyYWlsbGUgUGF0dGVybnMgKi8KKyNkZWZpbmUgVFRfVUNSX0JSQUlMTEUgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE4KSAvKiBVKzI4MDAtVSsyOEZGICovCisgIC8qIEJpdCA4MyAgIFlpIFN5bGxhYmxlcyAqLworICAvKiAgICAgICAgICBZaSBSYWRpY2FscyAgKi8KKyNkZWZpbmUgVFRfVUNSX1lJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE5KSAvKiBVK0EwMDAtVStBNDhGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVStBNDkwLVUrQTRDRiAqLworICAvKiBCaXQgODQgICBUYWdhbG9nICAqLworICAvKiAgICAgICAgICBIYW51bm9vICAqLworICAvKiAgICAgICAgICBCdWhpZCAgICAqLworICAvKiAgICAgICAgICBUYWdiYW53YSAqLworI2RlZmluZSBUVF9VQ1JfUEhJTElQUElORSAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjApIC8qIFUrMTcwMC1VKzE3MUYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVKzE3MjAtVSsxNzNGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVSsxNzQwLVUrMTc1RiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFUrMTc2MC1VKzE3N0YgKi8KKyAgLyogQml0IDg1ICAgT2xkIEl0YWxpYyAqLworI2RlZmluZSBUVF9VQ1JfT0xEX0lUQUxJQyAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjEpIC8qVSsxMDMwMC1VKzEwMzJGKi8KKyAgLyogQml0IDg2ICAgR290aGljICovCisjZGVmaW5lIFRUX1VDUl9HT1RISUMgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyMikgLypVKzEwMzMwLVUrMTAzNEYqLworICAvKiBCaXQgODcgICBEZXNlcmV0ICovCisjZGVmaW5lIFRUX1VDUl9ERVNFUkVUICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyMykgLypVKzEwNDAwLVUrMTA0NEYqLworICAvKiBCaXQgODggICBCeXphbnRpbmUgTXVzaWNhbCBTeW1ib2xzICAgICAgKi8KKyAgLyogICAgICAgICAgTXVzaWNhbCBTeW1ib2xzICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEFuY2llbnQgR3JlZWsgTXVzaWNhbCBOb3RhdGlvbiAqLworI2RlZmluZSBUVF9VQ1JfTVVTSUNBTF9TWU1CT0xTICAgICAgICAgICAgICAgICAoMUwgPDwgMjQpIC8qVSsxRDAwMC1VKzFEMEZGKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMUQxMDAtVSsxRDFGRiovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypVKzFEMjAwLVUrMUQyNEYqLworICAvKiBCaXQgODkgICBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgKi8KKyNkZWZpbmUgVFRfVUNSX01BVEhfQUxQSEFOVU1FUklDX1NZTUJPTFMgICAgICAgKDFMIDw8IDI1KSAvKlUrMUQ0MDAtVSsxRDdGRiovCisgIC8qIEJpdCA5MCAgIFByaXZhdGUgVXNlIChwbGFuZSAxNSkgKi8KKyAgLyogICAgICAgICAgUHJpdmF0ZSBVc2UgKHBsYW5lIDE2KSAqLworI2RlZmluZSBUVF9VQ1JfUFJJVkFURV9VU0VfU1VQUExFTUVOVEFSWSAgICAgICAoMUwgPDwgMjYpIC8qVStGMDAwMC1VK0ZGRkZEKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypVKzEwMDAwMC1VKzEwRkZGRCovCisgIC8qIEJpdCA5MSAgIFZhcmlhdGlvbiBTZWxlY3RvcnMgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBWYXJpYXRpb24gU2VsZWN0b3JzIFN1cHBsZW1lbnQgKi8KKyNkZWZpbmUgVFRfVUNSX1ZBUklBVElPTl9TRUxFQ1RPUlMgICAgICAgICAgICAgKDFMIDw8IDI3KSAvKiBVK0ZFMDAtVStGRTBGICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypVK0UwMTAwLVUrRTAxRUYqLworICAvKiBCaXQgOTIgICBUYWdzICovCisjZGVmaW5lIFRUX1VDUl9UQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyOCkgLypVK0UwMDAwLVUrRTAwN0YqLworICAvKiBCaXQgOTMgICBMaW1idSAqLworI2RlZmluZSBUVF9VQ1JfTElNQlUgICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjkpIC8qIFUrMTkwMC1VKzE5NEYgKi8KKyAgLyogQml0IDk0ICAgVGFpIExlICovCisjZGVmaW5lIFRUX1VDUl9UQUlfTEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAzMCkgLyogVSsxOTUwLVUrMTk3RiAqLworICAvKiBCaXQgOTUgICBOZXcgVGFpIEx1ZSAqLworI2RlZmluZSBUVF9VQ1JfTkVXX1RBSV9MVUUgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMzEpIC8qIFUrMTk4MC1VKzE5REYgKi8KKyAgLyogQml0IDk2ICAgQnVnaW5lc2UgKi8KKyNkZWZpbmUgVFRfVUNSX0JVR0lORVNFICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICAwKSAvKiBVKzFBMDAtVSsxQTFGICovCisgIC8qIEJpdCA5NyAgIEdsYWdvbGl0aWMgKi8KKyNkZWZpbmUgVFRfVUNSX0dMQUdPTElUSUMgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8ICAxKSAvKiBVKzJDMDAtVSsyQzVGICovCisgIC8qIEJpdCA5OCAgIFRpZmluYWdoICovCisjZGVmaW5lIFRUX1VDUl9USUZJTkFHSCAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgMikgLyogVSsyRDMwLVUrMkQ3RiAqLworICAvKiBCaXQgOTkgICBZaWppbmcgSGV4YWdyYW0gU3ltYm9scyAqLworI2RlZmluZSBUVF9VQ1JfWUlKSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDMpIC8qIFUrNERDMC1VKzRERkYgKi8KKyAgLyogQml0IDEwMCAgU3lsb3RpIE5hZ3JpICovCisjZGVmaW5lIFRUX1VDUl9TWUxPVElfTkFHUkkgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgNCkgLyogVStBODAwLVUrQTgyRiAqLworICAvKiBCaXQgMTAxICBMaW5lYXIgQiBTeWxsYWJhcnkgKi8KKyAgLyogICAgICAgICAgTGluZWFyIEIgSWRlb2dyYW1zICovCisgIC8qICAgICAgICAgIEFlZ2VhbiBOdW1iZXJzICAgICAqLworI2RlZmluZSBUVF9VQ1JfTElORUFSX0IgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDUpIC8qVSsxMDAwMC1VKzEwMDdGKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMTAwODAtVSsxMDBGRiovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypVKzEwMTAwLVUrMTAxM0YqLworICAvKiBCaXQgMTAyICBBbmNpZW50IEdyZWVrIE51bWJlcnMgKi8KKyNkZWZpbmUgVFRfVUNSX0FOQ0lFTlRfR1JFRUtfTlVNQkVSUyAgICAgICAgICAgKDFMIDw8ICA2KSAvKlUrMTAxNDAtVSsxMDE4RiovCisgIC8qIEJpdCAxMDMgIFVnYXJpdGljICovCisjZGVmaW5lIFRUX1VDUl9VR0FSSVRJQyAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAgNykgLypVKzEwMzgwLVUrMTAzOUYqLworICAvKiBCaXQgMTA0ICBPbGQgUGVyc2lhbiAqLworI2RlZmluZSBUVF9VQ1JfT0xEX1BFUlNJQU4gICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDgpIC8qVSsxMDNBMC1VKzEwM0RGKi8KKyAgLyogQml0IDEwNSAgU2hhdmlhbiAqLworI2RlZmluZSBUVF9VQ1JfU0hBVklBTiAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgIDkpIC8qVSsxMDQ1MC1VKzEwNDdGKi8KKyAgLyogQml0IDEwNiAgT3NtYW55YSAqLworI2RlZmluZSBUVF9VQ1JfT1NNQU5ZQSAgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTApIC8qVSsxMDQ4MC1VKzEwNEFGKi8KKyAgLyogQml0IDEwNyAgQ3lwcmlvdCBTeWxsYWJhcnkgKi8KKyNkZWZpbmUgVFRfVUNSX0NZUFJJT1RfU1lMTEFCQVJZICAgICAgICAgICAgICAgKDFMIDw8IDExKSAvKlUrMTA4MDAtVSsxMDgzRiovCisgIC8qIEJpdCAxMDggIEtoYXJvc2h0aGkgKi8KKyNkZWZpbmUgVFRfVUNSX0tIQVJPU0hUSEkgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDEyKSAvKlUrMTBBMDAtVSsxMEE1RiovCisgIC8qIEJpdCAxMDkgIFRhaSBYdWFuIEppbmcgU3ltYm9scyAqLworI2RlZmluZSBUVF9VQ1JfVEFJX1hVQU5fSklORyAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTMpIC8qVSsxRDMwMC1VKzFEMzVGKi8KKyAgLyogQml0IDExMCAgQ3VuZWlmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEN1bmVpZm9ybSBOdW1iZXJzIGFuZCBQdW5jdHVhdGlvbiAqLworI2RlZmluZSBUVF9VQ1JfQ1VORUlGT1JNICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMTQpIC8qVSsxMjAwMC1VKzEyM0ZGKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMTI0MDAtVSsxMjQ3RiovCisgIC8qIEJpdCAxMTEgIENvdW50aW5nIFJvZCBOdW1lcmFscyAqLworI2RlZmluZSBUVF9VQ1JfQ09VTlRJTkdfUk9EX05VTUVSQUxTICAgICAgICAgICAoMUwgPDwgMTUpIC8qVSsxRDM2MC1VKzFEMzdGKi8KKyAgLyogQml0IDExMiAgU3VuZGFuZXNlICovCisjZGVmaW5lIFRUX1VDUl9TVU5EQU5FU0UgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxNikgLyogVSsxQjgwLVUrMUJCRiAqLworICAvKiBCaXQgMTEzICBMZXBjaGEgKi8KKyNkZWZpbmUgVFRfVUNSX0xFUENIQSAgICAgICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IDE3KSAvKiBVKzFDMDAtVSsxQzRGICovCisgIC8qIEJpdCAxMTQgIE9sIENoaWtpICovCisjZGVmaW5lIFRUX1VDUl9PTF9DSElLSSAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxOCkgLyogVSsxQzUwLVUrMUM3RiAqLworICAvKiBCaXQgMTE1ICBTYXVyYXNodHJhICovCisjZGVmaW5lIFRUX1VDUl9TQVVSQVNIVFJBICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAxOSkgLyogVStBODgwLVUrQThERiAqLworICAvKiBCaXQgMTE2ICBLYXlhaCBMaSAqLworI2RlZmluZSBUVF9VQ1JfS0FZQUhfTEkgICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjApIC8qIFUrQTkwMC1VK0E5MkYgKi8KKyAgLyogQml0IDExNyAgUmVqYW5nICovCisjZGVmaW5lIFRUX1VDUl9SRUpBTkcgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyMSkgLyogVStBOTMwLVUrQTk1RiAqLworICAvKiBCaXQgMTE4ICBDaGFtICovCisjZGVmaW5lIFRUX1VDUl9DSEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAyMikgLyogVStBQTAwLVUrQUE1RiAqLworICAvKiBCaXQgMTE5ICBBbmNpZW50IFN5bWJvbHMgKi8KKyNkZWZpbmUgVFRfVUNSX0FOQ0lFTlRfU1lNQk9MUyAgICAgICAgICAgICAgICAgKDFMIDw8IDIzKSAvKlUrMTAxOTAtVSsxMDFDRiovCisgIC8qIEJpdCAxMjAgIFBoYWlzdG9zIERpc2MgKi8KKyNkZWZpbmUgVFRfVUNSX1BIQUlTVE9TX0RJU0MgICAgICAgICAgICAgICAgICAgKDFMIDw8IDI0KSAvKlUrMTAxRDAtVSsxMDFGRiovCisgIC8qIEJpdCAxMjEgIENhcmlhbiAqLworICAvKiAgICAgICAgICBMeWNpYW4gKi8KKyAgLyogICAgICAgICAgTHlkaWFuICovCisjZGVmaW5lIFRUX1VDUl9PTERfQU5BVE9MSUFOICAgICAgICAgICAgICAgICAgICgxTCA8PCAyNSkgLypVKzEwMkEwLVUrMTAyREYqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qVSsxMDI4MC1VKzEwMjlGKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMTA5MjAtVSsxMDkzRiovCisgIC8qIEJpdCAxMjIgIERvbWlubyBUaWxlcyAgKi8KKyAgLyogICAgICAgICAgTWFoam9uZyBUaWxlcyAqLworI2RlZmluZSBUVF9VQ1JfR0FNRV9USUxFUyAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgMjYpIC8qVSsxRjAzMC1VKzFGMDlGKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlUrMUYwMDAtVSsxRjAyRiovCisgIC8qIEJpdCAxMjMtMTI3IFJlc2VydmVkIGZvciBwcm9jZXNzLWludGVybmFsIHVzYWdlICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNvbWUgY29tcGlsZXJzIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgbGVuZ3RoIG9mIGlkZW50aWZpZXJzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKCBfX1RVUkJPQ19fICkgJiYgX19UVVJCT0NfXyA8IDB4MDQxMCB8fCBkZWZpbmVkKCBfX1BBQ0lGSUNfXyApCisjZGVmaW5lIEhBVkVfTElNSVRfT05fSURFTlRTCisjZW5kaWYKKworCisjaWZuZGVmIEhBVkVfTElNSVRfT05fSURFTlRTCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEhlcmUgc29tZSBhbGlhcyAjZGVmaW5lcyBpbiBvcmRlciB0byBiZSBjbGVhcmVyLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlc2UgYXJlIG5vdCBhbHdheXMgI2RlZmluZWQgdG8gc3RheSB3aXRoaW4gdGhlIDMxfmNoYXJhY3RlciBsaW1pdCwgICovCisgIC8qIHdoaWNoIHNvbWUgY29tcGlsZXJzIGhhdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ3JlZGl0cyBnbyB0byBEYXZlIEhvbyA8ZGhvb0BmbGFzaC5uZXQ+IGZvciBwb2ludGluZyBvdXQgdGhhdCBtb2Rlcm4gICovCisgIC8qIEJvcmxhbmQgY29tcGlsZXJzIChyZWFkOiBmcm9tIEJDKysgMy4xIG9uKSBjYW4gaW5jcmVhc2UgdGhpcyBsaW1pdC4gICAqLworICAvKiBJZiB5b3UgZ2V0IGEgd2FybmluZyB3aXRoIHN1Y2ggYSBjb21waWxlciwgdXNlIHRoZSAtaTQwIHN3aXRjaC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRUX1VDUl9BUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0EgICAgICBcCisgICAgICAgICBUVF9VQ1JfQVJBQklDX1BSRVNFTlRBVElPTlNfQQorI2RlZmluZSBUVF9VQ1JfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19CICAgICAgXAorICAgICAgICAgVFRfVUNSX0FSQUJJQ19QUkVTRU5UQVRJT05TX0IKKworI2RlZmluZSBUVF9VQ1JfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTICAgICAgXAorICAgICAgICAgVFRfVUNSX0NPTUJJTklOR19ESUFDUklUSUNTCisjZGVmaW5lIFRUX1VDUl9DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1NfU1lNQiBcCisgICAgICAgICBUVF9VQ1JfQ09NQklOSU5HX0RJQUNSSVRJQ1NfU1lNQgorCisKKyNlbmRpZiAvKiAhSEFWRV9MSU1JVF9PTl9JREVOVFMgKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1RUTkFNRUlEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L2luY2x1ZGUvdHR0YWJsZXMuaCBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3R0dGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2OGY0MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3R0dGFibGVzLmgKQEAgLTAsMCArMSw4MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0dGFibGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBCYXNpYyBTRk5UL1RydWVUeXBlIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVFRBQkxFU19IX18KKyNkZWZpbmUgX19UVFRBQkxFU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHJ1ZXR5cGVfdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHJ1ZVR5cGUgVGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHJ1ZVR5cGUgc3BlY2lmaWMgdGFibGUgdHlwZXMgYW5kIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyAgICovCisgIC8qICAgIGFzIHdlbGwgYXMgc29tZSByb3V0aW5lcyB1c2VkIHRvIGFjY2VzcyBhbmQgcHJvY2VzcyB0aGVtLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Ib3JpSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfVmVydEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX09TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Qb3N0c2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfUENMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX01heFByb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2ZudF9UYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9TZm50X1RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Mb2FkX1NmbnRfVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2ZudF9UYWJsZV9JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0NNYXBfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIGZvbnQgaGVhZGVyIHRhYmxlLiAgQWxsICAgICAgICovCisgIC8qICAgIGZpZWxkcyBmb2xsb3cgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0hlYWRlcl8KKyAgeworICAgIEZUX0ZpeGVkICAgVGFibGVfVmVyc2lvbjsKKyAgICBGVF9GaXhlZCAgIEZvbnRfUmV2aXNpb247CisKKyAgICBGVF9Mb25nICAgIENoZWNrU3VtX0FkanVzdDsKKyAgICBGVF9Mb25nICAgIE1hZ2ljX051bWJlcjsKKworICAgIEZUX1VTaG9ydCAgRmxhZ3M7CisgICAgRlRfVVNob3J0ICBVbml0c19QZXJfRU07CisKKyAgICBGVF9Mb25nICAgIENyZWF0ZWQgWzJdOworICAgIEZUX0xvbmcgICAgTW9kaWZpZWRbMl07CisKKyAgICBGVF9TaG9ydCAgIHhNaW47CisgICAgRlRfU2hvcnQgICB5TWluOworICAgIEZUX1Nob3J0ICAgeE1heDsKKyAgICBGVF9TaG9ydCAgIHlNYXg7CisKKyAgICBGVF9VU2hvcnQgIE1hY19TdHlsZTsKKyAgICBGVF9VU2hvcnQgIExvd2VzdF9SZWNfUFBFTTsKKworICAgIEZUX1Nob3J0ICAgRm9udF9EaXJlY3Rpb247CisgICAgRlRfU2hvcnQgICBJbmRleF9Ub19Mb2NfRm9ybWF0OworICAgIEZUX1Nob3J0ICAgR2x5cGhfRGF0YV9Gb3JtYXQ7CisKKyAgfSBUVF9IZWFkZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Ib3JpSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHJ1ZVR5cGUgaG9yaXpvbnRhbCBoZWFkZXIsIHRoZSBgaGhlYScgKi8KKyAgLyogICAgdGFibGUsIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaG9yaXpvbnRhbCBtZXRyaWNzIHRhYmxlLCAgICAgICovCisgIC8qICAgIGkuZS4sIHRoZSBgaG10eCcgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFZlcnNpb24gICAgICAgICAgICAgICAgOjogVGhlIHRhYmxlIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQXNjZW5kZXIgICAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIGFzY2VuZGVyLCBpLmUuLCB0aGUgZGlzdGFuY2UgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcC1tb3N0IG9mIGFsbCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIHBvaW50cyBmb3VuZCBpbiB0aGUgZm9udC4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgdGhlICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZSBBU0NJSSkuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGUgYHNUeXBvQXNjZW5kZXInIGZpZWxkICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIE9TLzIgdGFibGUgaW5zdGVhZCBpZiB5b3Ugd2FudCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc2NlbmRlciAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBkZXNjZW5kZXIsIGkuZS4sIHRoZSBkaXN0YW5jZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSBib3R0b20tbW9zdCBvZiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgZ2x5cGggcG9pbnRzIGZvdW5kIGluIHRoZSBmb250LiAgSXQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbmVnYXRpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgdXN1YWxseSBzZXQgYnkgdGhlIGZvbnQgZGVzaWduZXIsICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvZnRlbiByZWZsZWN0cyBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnQgKG1heWJlIEFTQ0lJKS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgdXNlIHRoZSBgc1R5cG9EZXNjZW5kZXInICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiB0aGUgT1MvMiB0YWJsZSBpbnN0ZWFkIGlmIHlvdSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0aGUgY29ycmVjdCBvbmUuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGluZV9HYXAgICAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIGxpbmUgZ2FwLCBpLmUuLCB0aGUgZGlzdGFuY2UgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWRkIHRvIHRoZSBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHRvICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCB0aGUgQlRCLCBpLmUuLCB0aGUgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZSBmb3IgdGhlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWR2YW5jZV9XaWR0aF9NYXggICAgICA6OiBUaGlzIGZpZWxkIGlzIHRoZSBtYXhpbXVtIG9mIGFsbCBhZHZhbmNlICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzIGZvdW5kIGluIHRoZSBmb250LiAgSXQgY2FuIGJlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gY29tcHV0ZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmJpdHJhcnkgc3RyaW5nIG9mIHRleHQuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtaW5fTGVmdF9TaWRlX0JlYXJpbmcgIDo6IFRoZSBtaW5pbXVtIGxlZnQgc2lkZSBiZWFyaW5nIG9mIGFsbCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMgd2l0aGluIHRoZSBmb250LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtaW5fUmlnaHRfU2lkZV9CZWFyaW5nIDo6IFRoZSBtaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZyBvZiBhbGwgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMgd2l0aGluIHRoZSBmb250LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4TWF4X0V4dGVudCAgICAgICAgICAgIDo6IFRoZSBtYXhpbXVtIGhvcml6b250YWwgZXh0ZW50IChpLmUuLCB0aGUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgd2lkdGgnIG9mIGEgZ2x5cGgncyBib3VuZGluZyBib3gpIGZvciAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGdseXBocyBpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FyZXRfU2xvcGVfUmlzZSAgICAgICA6OiBUaGUgcmlzZSBjb2VmZmljaWVudCBvZiB0aGUgY3Vyc29yJ3MgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvcGUgb2YgdGhlIGN1cnNvciAoc2xvcGU9cmlzZS9ydW4pLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FyZXRfU2xvcGVfUnVuICAgICAgICA6OiBUaGUgcnVuIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvcGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICA6OiA4fnJlc2VydmVkIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNfRGF0YV9Gb3JtYXQgICAgIDo6IEFsd2F5c34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bWJlcl9PZl9ITWV0cmljcyAgICAgOjogTnVtYmVyIG9mIEhNZXRyaWNzIGVudHJpZXMgaW4gdGhlIGBobXR4JyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlIC0tIHRoaXMgdmFsdWUgY2FuIGJlIHNtYWxsZXIgdGhhbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb25nX21ldHJpY3MgICAgICAgICAgIDo6IEEgcG9pbnRlciBpbnRvIHRoZSBgaG10eCcgdGFibGUuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNob3J0X21ldHJpY3MgICAgICAgICAgOjogQSBwb2ludGVyIGludG8gdGhlIGBobXR4JyB0YWJsZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElNUE9SVEFOVDogVGhlIFRUX0hvcmlIZWFkZXIgYW5kIFRUX1ZlcnRIZWFkZXIgc3RydWN0dXJlcyBzaG91bGQgICAqLworICAvKiAgICAgICAgICAgICAgIGJlIGlkZW50aWNhbCBleGNlcHQgZm9yIHRoZSBuYW1lcyBvZiB0aGVpciBmaWVsZHMsICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICB3aGljaCBhcmUgZGlmZmVyZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IGEgc2luZ2xlIGZ1bmN0aW9uIGluIHRoZSBgdHRsb2FkJyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBtb2R1bGUgaXMgYWJsZSB0byByZWFkIGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICovCisgIC8qICAgICAgICAgICAgICAgaGVhZGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0hvcmlIZWFkZXJfCisgIHsKKyAgICBGVF9GaXhlZCAgIFZlcnNpb247CisgICAgRlRfU2hvcnQgICBBc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgIERlc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgIExpbmVfR2FwOworCisgICAgRlRfVVNob3J0ICBhZHZhbmNlX1dpZHRoX01heDsgICAgICAvKiBhZHZhbmNlIHdpZHRoIG1heGltdW0gKi8KKworICAgIEZUX1Nob3J0ICAgbWluX0xlZnRfU2lkZV9CZWFyaW5nOyAgLyogbWluaW11bSBsZWZ0LXNiICAgICAgICovCisgICAgRlRfU2hvcnQgICBtaW5fUmlnaHRfU2lkZV9CZWFyaW5nOyAvKiBtaW5pbXVtIHJpZ2h0LXNiICAgICAgKi8KKyAgICBGVF9TaG9ydCAgIHhNYXhfRXh0ZW50OyAgICAgICAgICAgIC8qIHhtYXggZXh0ZW50cyAgICAgICAgICAqLworICAgIEZUX1Nob3J0ICAgY2FyZXRfU2xvcGVfUmlzZTsKKyAgICBGVF9TaG9ydCAgIGNhcmV0X1Nsb3BlX1J1bjsKKyAgICBGVF9TaG9ydCAgIGNhcmV0X09mZnNldDsKKworICAgIEZUX1Nob3J0ICAgUmVzZXJ2ZWRbNF07CisKKyAgICBGVF9TaG9ydCAgIG1ldHJpY19EYXRhX0Zvcm1hdDsKKyAgICBGVF9VU2hvcnQgIG51bWJlcl9PZl9ITWV0cmljczsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgZGVmaW5lZCBieSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiAqLworICAgIC8qIGJ1dCB0aGV5IGFyZSB1c2VkIHRvIGNvbm5lY3QgdGhlIG1ldHJpY3MgaGVhZGVyIHRvIHRoZSByZWxldmFudCAgICAqLworICAgIC8qIGBITVRYJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgdm9pZCogICAgICBsb25nX21ldHJpY3M7CisgICAgdm9pZCogICAgICBzaG9ydF9tZXRyaWNzOworCisgIH0gVFRfSG9yaUhlYWRlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1ZlcnRIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUcnVlVHlwZSB2ZXJ0aWNhbCBoZWFkZXIsIHRoZSBgdmhlYScgICAqLworICAvKiAgICB0YWJsZSwgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlLCBpLmUuLCAgKi8KKyAgLyogICAgdGhlIGB2bXR4JyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVmVyc2lvbiAgICAgICAgICAgICAgICAgOjogVGhlIHRhYmxlIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBc2NlbmRlciAgICAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIGFzY2VuZGVyLCBpLmUuLCB0aGUgZGlzdGFuY2UgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcC1tb3N0IG9mICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBnbHlwaCBwb2ludHMgZm91bmQgaW4gdGhlIGZvbnQuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0FzY2VuZGVyJyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRoZSBjb3JyZWN0IG9uZS4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc2NlbmRlciAgICAgICAgICAgICAgIDo6IFRoZSBmb250J3MgZGVzY2VuZGVyLCBpLmUuLCB0aGUgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tLW1vc3Qgb2YgYWxsIGdseXBoIHBvaW50cyBmb3VuZCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmb250LiAgSXQgaXMgbmVnYXRpdmUuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0Rlc2NlbmRlcicgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlIGluc3RlYWQgaWYgeW91ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRoZSBjb3JyZWN0IG9uZS4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExpbmVfR2FwICAgICAgICAgICAgICAgIDo6IFRoZSBmb250J3MgbGluZSBnYXAsIGkuZS4sIHRoZSBkaXN0YW5jZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgdG8gdGhlIGFzY2VuZGVyIGFuZCBkZXNjZW5kZXIgdG8gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZSBCVEIsIGkuZS4sIHRoZSAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlIGZvciB0aGUgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkdmFuY2VfSGVpZ2h0X01heCAgICAgIDo6IFRoaXMgZmllbGQgaXMgdGhlIG1heGltdW0gb2YgYWxsICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlIGhlaWdodHMgZm91bmQgaW4gdGhlIGZvbnQuICBJdCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgbWF4aW11bSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCBvZiBhbiBhcmJpdHJhcnkgc3RyaW5nIG9mIHRleHQuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWluX1RvcF9TaWRlX0JlYXJpbmcgICAgOjogVGhlIG1pbmltdW0gdG9wIHNpZGUgYmVhcmluZyBvZiBhbGwgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWluX0JvdHRvbV9TaWRlX0JlYXJpbmcgOjogVGhlIG1pbmltdW0gYm90dG9tIHNpZGUgYmVhcmluZyBvZiBhbGwgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeU1heF9FeHRlbnQgICAgICAgICAgICAgOjogVGhlIG1heGltdW0gdmVydGljYWwgZXh0ZW50IChpLmUuLCB0aGUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBoZWlnaHQnIG9mIGEgZ2x5cGgncyBib3VuZGluZyBib3gpIGZvciAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgZ2x5cGhzIGluIHRoZSBmb250LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X1Nsb3BlX1Jpc2UgICAgICAgIDo6IFRoZSByaXNlIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG9wZSBvZiB0aGUgY3Vyc29yIChzbG9wZT1yaXNlL3J1bikuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X1Nsb3BlX1J1biAgICAgICAgIDo6IFRoZSBydW4gY29lZmZpY2llbnQgb2YgdGhlIGN1cnNvcidzICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG9wZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNhcmV0X09mZnNldCAgICAgICAgICAgIDo6IFRoZSBjdXJzb3IncyBvZmZzZXQgZm9yIHNsYW50ZWQgZm9udHMuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGByZXNlcnZlZCcgaW4gdm10eCAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAxLjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICA6OiA4fnJlc2VydmVkIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1ldHJpY19EYXRhX0Zvcm1hdCAgICAgIDo6IEFsd2F5c34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtYmVyX09mX0hNZXRyaWNzICAgICAgOjogTnVtYmVyIG9mIFZNZXRyaWNzIGVudHJpZXMgaW4gdGhlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2bXR4JyB0YWJsZSAtLSB0aGlzIHZhbHVlIGNhbiBiZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBnbHlwaHMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb25nX21ldHJpY3MgICAgICAgICAgIDo6IEEgcG9pbnRlciBpbnRvIHRoZSBgdm10eCcgdGFibGUuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNob3J0X21ldHJpY3MgICAgICAgICAgOjogQSBwb2ludGVyIGludG8gdGhlIGB2bXR4JyB0YWJsZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElNUE9SVEFOVDogVGhlIFRUX0hvcmlIZWFkZXIgYW5kIFRUX1ZlcnRIZWFkZXIgc3RydWN0dXJlcyBzaG91bGQgICAqLworICAvKiAgICAgICAgICAgICAgIGJlIGlkZW50aWNhbCBleGNlcHQgZm9yIHRoZSBuYW1lcyBvZiB0aGVpciBmaWVsZHMsICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICB3aGljaCBhcmUgZGlmZmVyZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IGEgc2luZ2xlIGZ1bmN0aW9uIGluIHRoZSBgdHRsb2FkJyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBtb2R1bGUgaXMgYWJsZSB0byByZWFkIGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICovCisgIC8qICAgICAgICAgICAgICAgaGVhZGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1ZlcnRIZWFkZXJfCisgIHsKKyAgICBGVF9GaXhlZCAgIFZlcnNpb247CisgICAgRlRfU2hvcnQgICBBc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgIERlc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgIExpbmVfR2FwOworCisgICAgRlRfVVNob3J0ICBhZHZhbmNlX0hlaWdodF9NYXg7ICAgICAgLyogYWR2YW5jZSBoZWlnaHQgbWF4aW11bSAqLworCisgICAgRlRfU2hvcnQgICBtaW5fVG9wX1NpZGVfQmVhcmluZzsgICAgLyogbWluaW11bSBsZWZ0LXNiIG9yIHRvcC1zYiAgICAgICAqLworICAgIEZUX1Nob3J0ICAgbWluX0JvdHRvbV9TaWRlX0JlYXJpbmc7IC8qIG1pbmltdW0gcmlnaHQtc2Igb3IgYm90dG9tLXNiICAgKi8KKyAgICBGVF9TaG9ydCAgIHlNYXhfRXh0ZW50OyAgICAgICAgICAgICAvKiB4bWF4IG9yIHltYXggZXh0ZW50cyAgICAgICAgICAgICovCisgICAgRlRfU2hvcnQgICBjYXJldF9TbG9wZV9SaXNlOworICAgIEZUX1Nob3J0ICAgY2FyZXRfU2xvcGVfUnVuOworICAgIEZUX1Nob3J0ICAgY2FyZXRfT2Zmc2V0OworCisgICAgRlRfU2hvcnQgICBSZXNlcnZlZFs0XTsKKworICAgIEZUX1Nob3J0ICAgbWV0cmljX0RhdGFfRm9ybWF0OworICAgIEZUX1VTaG9ydCAgbnVtYmVyX09mX1ZNZXRyaWNzOworCisgICAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uICovCisgICAgLyogYnV0IHRoZXkncmUgdXNlZCB0byBjb25uZWN0IHRoZSBtZXRyaWNzIGhlYWRlciB0byB0aGUgcmVsZXZhbnQgICAgICovCisgICAgLyogYEhNVFgnIG9yIGBWTVRYJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICB2b2lkKiAgICAgIGxvbmdfbWV0cmljczsKKyAgICB2b2lkKiAgICAgIHNob3J0X21ldHJpY3M7CisKKyAgfSBUVF9WZXJ0SGVhZGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIE9TLzIgdGFibGUuICBBbGwgZmllbGRzICAgICAgICovCisgIC8qICAgIGNvbXBseSB0byB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHdlIG5vdyBzdXBwb3J0IG9sZCBNYWMgZm9udHMgdGhhdCBkbyBub3QgaW5jbHVkZSBhbiBPUy8yICovCisgIC8qICAgIHRhYmxlLiAgSW4gdGhpcyBjYXNlLCB0aGUgYHZlcnNpb24nIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMHhGRkZGLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX09TMl8KKyAgeworICAgIEZUX1VTaG9ydCAgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogMHgwMDAxIC0gbW9yZSBvciAweEZGRkYgKi8KKyAgICBGVF9TaG9ydCAgIHhBdmdDaGFyV2lkdGg7CisgICAgRlRfVVNob3J0ICB1c1dlaWdodENsYXNzOworICAgIEZUX1VTaG9ydCAgdXNXaWR0aENsYXNzOworICAgIEZUX1VTaG9ydCAgZnNUeXBlOworICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFhTaXplOworICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFlTaXplOworICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFhPZmZzZXQ7CisgICAgRlRfU2hvcnQgICB5U3Vic2NyaXB0WU9mZnNldDsKKyAgICBGVF9TaG9ydCAgIHlTdXBlcnNjcmlwdFhTaXplOworICAgIEZUX1Nob3J0ICAgeVN1cGVyc2NyaXB0WVNpemU7CisgICAgRlRfU2hvcnQgICB5U3VwZXJzY3JpcHRYT2Zmc2V0OworICAgIEZUX1Nob3J0ICAgeVN1cGVyc2NyaXB0WU9mZnNldDsKKyAgICBGVF9TaG9ydCAgIHlTdHJpa2VvdXRTaXplOworICAgIEZUX1Nob3J0ICAgeVN0cmlrZW91dFBvc2l0aW9uOworICAgIEZUX1Nob3J0ICAgc0ZhbWlseUNsYXNzOworCisgICAgRlRfQnl0ZSAgICBwYW5vc2VbMTBdOworCisgICAgRlRfVUxvbmcgICB1bFVuaWNvZGVSYW5nZTE7ICAgICAgICAvKiBCaXRzIDAtMzEgICAqLworICAgIEZUX1VMb25nICAgdWxVbmljb2RlUmFuZ2UyOyAgICAgICAgLyogQml0cyAzMi02MyAgKi8KKyAgICBGVF9VTG9uZyAgIHVsVW5pY29kZVJhbmdlMzsgICAgICAgIC8qIEJpdHMgNjQtOTUgICovCisgICAgRlRfVUxvbmcgICB1bFVuaWNvZGVSYW5nZTQ7ICAgICAgICAvKiBCaXRzIDk2LTEyNyAqLworCisgICAgRlRfQ2hhciAgICBhY2hWZW5kSURbNF07CisKKyAgICBGVF9VU2hvcnQgIGZzU2VsZWN0aW9uOworICAgIEZUX1VTaG9ydCAgdXNGaXJzdENoYXJJbmRleDsKKyAgICBGVF9VU2hvcnQgIHVzTGFzdENoYXJJbmRleDsKKyAgICBGVF9TaG9ydCAgIHNUeXBvQXNjZW5kZXI7CisgICAgRlRfU2hvcnQgICBzVHlwb0Rlc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgIHNUeXBvTGluZUdhcDsKKyAgICBGVF9VU2hvcnQgIHVzV2luQXNjZW50OworICAgIEZUX1VTaG9ydCAgdXNXaW5EZXNjZW50OworCisgICAgLyogb25seSB2ZXJzaW9uIDEgYW5kIGhpZ2hlcjogKi8KKworICAgIEZUX1VMb25nICAgdWxDb2RlUGFnZVJhbmdlMTsgICAgICAgLyogQml0cyAwLTMxICAgKi8KKyAgICBGVF9VTG9uZyAgIHVsQ29kZVBhZ2VSYW5nZTI7ICAgICAgIC8qIEJpdHMgMzItNjMgICovCisKKyAgICAvKiBvbmx5IHZlcnNpb24gMiBhbmQgaGlnaGVyOiAqLworCisgICAgRlRfU2hvcnQgICBzeEhlaWdodDsKKyAgICBGVF9TaG9ydCAgIHNDYXBIZWlnaHQ7CisgICAgRlRfVVNob3J0ICB1c0RlZmF1bHRDaGFyOworICAgIEZUX1VTaG9ydCAgdXNCcmVha0NoYXI7CisgICAgRlRfVVNob3J0ICB1c01heENvbnRleHQ7CisKKyAgICAvKiBvbmx5IHZlcnNpb24gNSBhbmQgaGlnaGVyOiAqLworCisgICAgRlRfVVNob3J0ICB1c0xvd2VyT3B0aWNhbFBvaW50U2l6ZTsgICAgICAgLyogaW4gdHdpcHMgKDEvMjB0aCBwb2ludHMpICovCisgICAgRlRfVVNob3J0ICB1c1VwcGVyT3B0aWNhbFBvaW50U2l6ZTsgICAgICAgLyogaW4gdHdpcHMgKDEvMjB0aCBwb2ludHMpICovCisKKyAgfSBUVF9PUzI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Qb3N0c2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHJ1ZVR5cGUgUG9zdFNjcmlwdCB0YWJsZS4gIEFsbCBmaWVsZHMgKi8KKyAgLyogICAgY29tcGx5IHRvIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLiAgVGhpcyBzdHJ1Y3R1cmUgZG9lcyBub3QgICAgICovCisgIC8qICAgIHJlZmVyZW5jZSB0aGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcywgd2hpY2ggY2FuIGJlIG5ldmVydGhlbGVzcyAgICAqLworICAvKiAgICBhY2Nlc3NlZCB3aXRoIHRoZSBgdHRwb3N0JyBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9Qb3N0c2NyaXB0XworICB7CisgICAgRlRfRml4ZWQgIEZvcm1hdFR5cGU7CisgICAgRlRfRml4ZWQgIGl0YWxpY0FuZ2xlOworICAgIEZUX1Nob3J0ICB1bmRlcmxpbmVQb3NpdGlvbjsKKyAgICBGVF9TaG9ydCAgdW5kZXJsaW5lVGhpY2tuZXNzOworICAgIEZUX1VMb25nICBpc0ZpeGVkUGl0Y2g7CisgICAgRlRfVUxvbmcgIG1pbk1lbVR5cGU0MjsKKyAgICBGVF9VTG9uZyAgbWF4TWVtVHlwZTQyOworICAgIEZUX1VMb25nICBtaW5NZW1UeXBlMTsKKyAgICBGVF9VTG9uZyAgbWF4TWVtVHlwZTE7CisKKyAgICAvKiBHbHlwaCBuYW1lcyBmb2xsb3cgaW4gdGhlIGZpbGUsIGJ1dCB3ZSBkb24ndCAgICovCisgICAgLyogbG9hZCB0aGVtIGJ5IGRlZmF1bHQuICBTZWUgdGhlIHR0cG9zdC5jIGZpbGUuICAqLworCisgIH0gVFRfUG9zdHNjcmlwdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1BDTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUcnVlVHlwZSBQQ0xUIHRhYmxlLiAgQWxsIGZpZWxkcyAgICAgICAqLworICAvKiAgICBjb21wbHkgdG8gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9QQ0xUXworICB7CisgICAgRlRfRml4ZWQgICBWZXJzaW9uOworICAgIEZUX1VMb25nICAgRm9udE51bWJlcjsKKyAgICBGVF9VU2hvcnQgIFBpdGNoOworICAgIEZUX1VTaG9ydCAgeEhlaWdodDsKKyAgICBGVF9VU2hvcnQgIFN0eWxlOworICAgIEZUX1VTaG9ydCAgVHlwZUZhbWlseTsKKyAgICBGVF9VU2hvcnQgIENhcEhlaWdodDsKKyAgICBGVF9VU2hvcnQgIFN5bWJvbFNldDsKKyAgICBGVF9DaGFyICAgIFR5cGVGYWNlWzE2XTsKKyAgICBGVF9DaGFyICAgIENoYXJhY3RlckNvbXBsZW1lbnRbOF07CisgICAgRlRfQ2hhciAgICBGaWxlTmFtZVs2XTsKKyAgICBGVF9DaGFyICAgIFN0cm9rZVdlaWdodDsKKyAgICBGVF9DaGFyICAgIFdpZHRoVHlwZTsKKyAgICBGVF9CeXRlICAgIFNlcmlmU3R5bGU7CisgICAgRlRfQnl0ZSAgICBSZXNlcnZlZDsKKworICB9IFRUX1BDTFQ7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9NYXhQcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbWF4aW11bSBwcm9maWxlIGlzIGEgdGFibGUgY29udGFpbmluZyBtYW55IG1heCB2YWx1ZXMsIHdoaWNoICAgKi8KKyAgLyogICAgY2FuIGJlIHVzZWQgdG8gcHJlLWFsbG9jYXRlIGFycmF5cy4gIFRoaXMgZW5zdXJlcyB0aGF0IG5vIG1lbW9yeSAgICovCisgIC8qICAgIGFsbG9jYXRpb24gb2NjdXJzIGR1cmluZyBhIGdseXBoIGxvYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnNpb24gICAgICAgICAgICAgICA6OiBUaGUgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtR2x5cGhzICAgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoaXMgVHJ1ZVR5cGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4UG9pbnRzICAgICAgICAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gYSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tY29tcG9zaXRlIFRydWVUeXBlIGdseXBoLiAgU2VlIGFsc28gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0cnVjdHVyZSBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBtYXhDb21wb3NpdGVQb2ludHMnLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhDb250b3VycyAgICAgICAgICAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGEgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1jb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguICBTZWUgYWxzbyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RydWN0dXJlIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG1heENvbXBvc2l0ZUNvbnRvdXJzJy4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heENvbXBvc2l0ZVBvaW50cyAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGEgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlIFRydWVUeXBlIGdseXBoLiAgU2VlIGFsc28gdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBlbGVtZW50IGBtYXhQb2ludHMnLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhDb21wb3NpdGVDb250b3VycyAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGEgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSBUcnVlVHlwZSBnbHlwaC4gIFNlZSBhbHNvIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgZWxlbWVudCBgbWF4Q29udG91cnMnLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4Wm9uZXMgICAgICAgICAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiB6b25lcyB1c2VkIGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4VHdpbGlnaHRQb2ludHMgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gdGhlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d2lsaWdodCB6b25lIHVzZWQgZm9yIGdseXBoIGhpbnRpbmcuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4U3RvcmFnZSAgICAgICAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlIGFyZWEgdXNlZCBmb3IgZ2x5cGggaGludGluZy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4RnVuY3Rpb25EZWZzICAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9ucyBpbiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgZm9yICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heEluc3RydWN0aW9uRGVmcyAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMgaW4gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGZvciAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhTdGFja0VsZW1lbnRzICAgICAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YWNrIGVsZW1lbnRzIHVzZWQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBieXRlY29kZSBpbnRlcnByZXRhdGlvbi4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIFRydWVUeXBlIG9wY29kZXMgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGdseXBoIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhDb21wb25lbnRFbGVtZW50cyAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXBsZSAoaS5lLiwgbm9uLSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSkgZ2x5cGhzIGluIGEgY29tcG9zaXRlIGdseXBoLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhDb21wb25lbnREZXB0aCAgICAgOjogVGhlIG1heGltdW0gbmVzdGluZyBkZXB0aCBvZiBjb21wb3NpdGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGR1cmluZyBmb250IGxvYWRpbmcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfTWF4UHJvZmlsZV8KKyAgeworICAgIEZUX0ZpeGVkICAgdmVyc2lvbjsKKyAgICBGVF9VU2hvcnQgIG51bUdseXBoczsKKyAgICBGVF9VU2hvcnQgIG1heFBvaW50czsKKyAgICBGVF9VU2hvcnQgIG1heENvbnRvdXJzOworICAgIEZUX1VTaG9ydCAgbWF4Q29tcG9zaXRlUG9pbnRzOworICAgIEZUX1VTaG9ydCAgbWF4Q29tcG9zaXRlQ29udG91cnM7CisgICAgRlRfVVNob3J0ICBtYXhab25lczsKKyAgICBGVF9VU2hvcnQgIG1heFR3aWxpZ2h0UG9pbnRzOworICAgIEZUX1VTaG9ydCAgbWF4U3RvcmFnZTsKKyAgICBGVF9VU2hvcnQgIG1heEZ1bmN0aW9uRGVmczsKKyAgICBGVF9VU2hvcnQgIG1heEluc3RydWN0aW9uRGVmczsKKyAgICBGVF9VU2hvcnQgIG1heFN0YWNrRWxlbWVudHM7CisgICAgRlRfVVNob3J0ICBtYXhTaXplT2ZJbnN0cnVjdGlvbnM7CisgICAgRlRfVVNob3J0ICBtYXhDb21wb25lbnRFbGVtZW50czsKKyAgICBGVF9VU2hvcnQgIG1heENvbXBvbmVudERlcHRoOworCisgIH0gVFRfTWF4UHJvZmlsZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NmbnRfVGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIGVudW1lcmF0aW9uIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW5kZXggb2YgYW4gU0ZOVCB0YWJsZS4gICAgICAgICAqLworICAvKiAgICBVc2VkIGluIHRoZSBARlRfR2V0X1NmbnRfVGFibGUgQVBJIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TRk5UX0hFQUQgOjogVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX0hlYWRlciBzdHJ1Y3R1cmUuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NGTlRfTUFYUCA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfTWF4UHJvZmlsZSBzdHJ1Y3R1cmUuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU0ZOVF9PUzIgIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9PUzIgc3RydWN0dXJlLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TRk5UX0hIRUEgOjogVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX0hvcmlIZWFkZXIgc3RydWN0dXJlLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NGTlRfVkhFQSA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfVmVydEhlYWRlciBzdHJ1dHVyZS4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU0ZOVF9QT1NUIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9Qb3N0c2NyaXB0IHN0cnVjdHVyZS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TRk5UX1BDTFQgOjogVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX1BDTFQgc3RydWN0dXJlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfU2ZudF9UYWdfCisgIHsKKyAgICBGVF9TRk5UX0hFQUQsCisgICAgRlRfU0ZOVF9NQVhQLAorICAgIEZUX1NGTlRfT1MyLAorICAgIEZUX1NGTlRfSEhFQSwKKyAgICBGVF9TRk5UX1ZIRUEsCisgICAgRlRfU0ZOVF9QT1NULAorICAgIEZUX1NGTlRfUENMVCwKKworICAgIEZUX1NGTlRfTUFYCisKKyAgfSBGVF9TZm50X1RhZzsKKworICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY29ycmVzcG9uZGluZyBgRlRfU2ZudF9UYWcnICovCisgIC8qIHZhbHVlcyBpbnN0ZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfc2ZudF9oZWFkICBGVF9TRk5UX0hFQUQKKyNkZWZpbmUgZnRfc2ZudF9tYXhwICBGVF9TRk5UX01BWFAKKyNkZWZpbmUgZnRfc2ZudF9vczIgICBGVF9TRk5UX09TMgorI2RlZmluZSBmdF9zZm50X2hoZWEgIEZUX1NGTlRfSEhFQQorI2RlZmluZSBmdF9zZm50X3ZoZWEgIEZUX1NGTlRfVkhFQQorI2RlZmluZSBmdF9zZm50X3Bvc3QgIEZUX1NGTlRfUE9TVAorI2RlZmluZSBmdF9zZm50X3BjbHQgIEZUX1NGTlRfUENMVAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1NmbnRfVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIGdpdmVuIFNGTlQgdGFibGUgd2l0aGluIGEgZmFjZS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWcgIDo6IFRoZSBpbmRleCBvZiB0aGUgU0ZOVCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHR5cGUtbGVzcyBwb2ludGVyIHRvIHRoZSB0YWJsZS4gIFRoaXMgd2lsbCBiZX4wIGluIGNhc2Ugb2YgICAgICAgKi8KKyAgLyogICAgZXJyb3IsIG9yIGlmIHRoZSBjb3JyZXNwb25kaW5nIHRhYmxlIHdhcyBub3QgZm91bmQgKk9SKiBsb2FkZWQgICAgICovCisgIC8qICAgIGZyb20gdGhlIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlIGEgdHlwZWNhc3QgYWNjb3JkaW5nIHRvIGB0YWcnIHRvIGFjY2VzcyB0aGUgc3RydWN0dXJlICAgICAgICAgICovCisgIC8qICAgIGVsZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSB0YWJsZSBpcyBvd25lZCBieSB0aGUgZmFjZSBvYmplY3QgYW5kIGRpc2FwcGVhcnMgd2l0aCBpdC4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bCB0byBhY2Nlc3MgU0ZOVCB0YWJsZXMgdGhhdCBhcmUgbG9hZGVkICovCisgIC8qICAgIGJ5IHRoZSBzZm50LCB0cnVldHlwZSwgYW5kIG9wZW50eXBlIGRyaXZlcnMuICBTZWUgQEZUX1NmbnRfVGFnIGZvciAqLworICAvKiAgICBhIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhlcmUgYW4gZXhhbXBsZSBob3cgdG8gYWNjZXNzIHRoZSBgdmhlYScgdGFibGU6ICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVFRfVmVydEhlYWRlciogIHZlcnRfaGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgdmVydF9oZWFkZXIgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgKFRUX1ZlcnRIZWFkZXIqKUZUX0dldF9TZm50X1RhYmxlKCBmYWNlLCBGVF9TRk5UX1ZIRUEgKTsgICAgICAgKi8KKyAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQqICkKKyAgRlRfR2V0X1NmbnRfVGFibGUoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU2ZudF9UYWcgIHRhZyApOworCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBmdW5jdGlvbjoKKyAgKiAgIEZUX0xvYWRfU2ZudF9UYWJsZQorICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgTG9hZCBhbnkgZm9udCB0YWJsZSBpbnRvIGNsaWVudCBtZW1vcnkuCisgICoKKyAgKiBAaW5wdXQ6CisgICogICBmYWNlIDo6CisgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgKgorICAqICAgdGFnIDo6CisgICogICAgIFRoZSBmb3VyLWJ5dGUgdGFnIG9mIHRoZSB0YWJsZSB0byBsb2FkLiAgVXNlIHRoZSB2YWx1ZX4wIGlmIHlvdSB3YW50CisgICogICAgIHRvIGFjY2VzcyB0aGUgd2hvbGUgZm9udCBmaWxlLiAgT3RoZXJ3aXNlLCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlCisgICogICAgIGRlZmluaXRpb25zIGZvdW5kIGluIHRoZSBARlRfVFJVRVRZUEVfVEFHU19IIGZpbGUsIG9yIGZvcmdlIGEgbmV3CisgICogICAgIG9uZSB3aXRoIEBGVF9NQUtFX1RBRy4KKyAgKgorICAqICAgb2Zmc2V0IDo6CisgICogICAgIFRoZSBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHRhYmxlIChvciBmaWxlIGlmIHRhZyA9PSAwKS4KKyAgKgorICAqIEBvdXRwdXQ6CisgICogICBidWZmZXIgOjoKKyAgKiAgICAgVGhlIHRhcmdldCBidWZmZXIgYWRkcmVzcy4gIFRoZSBjbGllbnQgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5CisgICogICAgIGFycmF5IGlzIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgZGF0YS4KKyAgKgorICAqIEBpbm91dDoKKyAgKiAgIGxlbmd0aCA6OgorICAqICAgICBJZiB0aGUgYGxlbmd0aCcgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdHJ5IHRvIGxvYWQgdGhlIHdob2xlIHRhYmxlLgorICAqICAgICBSZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBpdCBmYWlscy4KKyAgKgorICAqICAgICBFbHNlLCBpZiBgKmxlbmd0aCcgaXN+MCwgZXhpdCBpbW1lZGlhdGVseSB3aGlsZSByZXR1cm5pbmcgdGhlCisgICogICAgIHRhYmxlJ3MgKG9yIGZpbGUpIGZ1bGwgc2l6ZSBpbiBpdC4KKyAgKgorICAqICAgICBFbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSB0YWJsZSBvciBmaWxlLCBmcm9tIHRoZQorICAqICAgICBzdGFydGluZyBvZmZzZXQuCisgICoKKyAgKiBAcmV0dXJuOgorICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgSWYgeW91IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSB0YWJsZSdzIGxlbmd0aCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwgdGhpcworICAqICAgZnVuY3Rpb24gd2l0aCBgKmxlbmd0aCcgc2V0IHRvfjAsIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgKgorICAqICAgICB7CisgICogICAgICAgRlRfVUxvbmcgIGxlbmd0aCA9IDA7CisgICoKKyAgKgorICAqICAgICAgIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKCBmYWNlLCB0YWcsIDAsIE5VTEwsICZsZW5ndGggKTsKKyAgKiAgICAgICBpZiAoIGVycm9yICkgeyAuLi4gdGFibGUgZG9lcyBub3QgZXhpc3QgLi4uIH0KKyAgKgorICAqICAgICAgIGJ1ZmZlciA9IG1hbGxvYyggbGVuZ3RoICk7CisgICogICAgICAgaWYgKCBidWZmZXIgPT0gTlVMTCApIHsgLi4uIG5vdCBlbm91Z2ggbWVtb3J5IC4uLiB9CisgICoKKyAgKiAgICAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZSggZmFjZSwgdGFnLCAwLCBidWZmZXIsICZsZW5ndGggKTsKKyAgKiAgICAgICBpZiAoIGVycm9yICkgeyAuLi4gY291bGQgbm90IGxvYWQgdGFibGUgLi4uIH0KKyAgKiAgICAgfQorICAqCisgICogICBOb3RlIHRoYXQgc3RydWN0dXJlcyBsaWtlIEBUVF9IZWFkZXIgb3IgQFRUX09TMiBjYW4ndCBiZSB1c2VkIHdpdGgKKyAgKiAgIHRoaXMgZnVuY3Rpb247IHRoZXkgYXJlIGxpbWl0ZWQgdG8gQEZUX0dldF9TZm50X1RhYmxlLiAgUmVhc29uIGlzIHRoYXQKKyAgKiAgIHRob3NlIHN0cnVjdHVyZXMgZGVwZW5kIG9uIHRoZSBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLCB3aXRoIHZhcnlpbmcKKyAgKiAgIHNpemUgKGUuZy4gMzJiaXQgdnMuIDY0Yml0KSBvciBvcmRlciAoYmlnIGVuZGlhbiB2cy4gbGl0dGxlIGVuZGlhbikuCisgICoKKyAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0xvYWRfU2ZudF9UYWJsZSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGZ1bmN0aW9uOgorICAqICAgRlRfU2ZudF9UYWJsZV9JbmZvCisgICoKKyAgKiBAZGVzY3JpcHRpb246CisgICogICBSZXR1cm4gaW5mb3JtYXRpb24gb24gYW4gU0ZOVCB0YWJsZS4KKyAgKgorICAqIEBpbnB1dDoKKyAgKiAgIGZhY2UgOjoKKyAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLgorICAqCisgICogICB0YWJsZV9pbmRleCA6OgorICAqICAgICBUaGUgaW5kZXggb2YgYW4gU0ZOVCB0YWJsZS4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgICogICAgIEZUX0Vycl9UYWJsZV9NaXNzaW5nIGZvciBhbiBpbnZhbGlkIHZhbHVlLgorICAqCisgICogQGlub3V0OgorICAqICAgdGFnIDo6CisgICogICAgIFRoZSBuYW1lIHRhZyBvZiB0aGUgU0ZOVCB0YWJsZS4gIElmIHRoZSB2YWx1ZSBpcyBOVUxMLCBgdGFibGVfaW5kZXgnCisgICogICAgIGlzIGlnbm9yZWQsIGFuZCBgbGVuZ3RoJyByZXR1cm5zIHRoZSBudW1iZXIgb2YgU0ZOVCB0YWJsZXMgaW4gdGhlCisgICogICAgIGZvbnQuCisgICoKKyAgKiBAb3V0cHV0OgorICAqICAgbGVuZ3RoIDo6CisgICogICAgIFRoZSBsZW5ndGggb2YgdGhlIFNGTlQgdGFibGUgKG9yIHRoZSBudW1iZXIgb2YgU0ZOVCB0YWJsZXMsIGRlcGVuZGluZworICAqICAgICBvbiBgdGFnJykuCisgICoKKyAgKiBAcmV0dXJuOgorICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgKgorICAqIEBub3RlOgorICAqICAgV2hpbGUgcGFyc2luZyBmb250cywgRnJlZVR5cGUgaGFuZGxlcyBTRk5UIHRhYmxlcyB3aXRoIGxlbmd0aCB6ZXJvIGFzCisgICogICBtaXNzaW5nLgorICAqCisgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZm50X1RhYmxlX0luZm8oIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHRhYmxlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqbGVuZ3RoICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gVHJ1ZVR5cGUvc2ZudCBzcGVjaWZpYyBjbWFwIGxhbmd1YWdlIElELiAgRGVmaW5pdGlvbnMgb2YgICAgKi8KKyAgLyogICAgbGFuZ3VhZ2UgSUQgdmFsdWVzIGFyZSBpbiBgdHRuYW1laWQuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcm1hcCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHRhcmdldCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsYW5ndWFnZSBJRCBvZiBgY2hhcm1hcCcuICBJZiBgY2hhcm1hcCcgZG9lc24ndCBiZWxvbmcgdG8gYSAgICAqLworICAvKiAgICBUcnVlVHlwZS9zZm50IGZhY2UsIGp1c3QgcmV0dXJufjAgYXMgdGhlIGRlZmF1bHQgdmFsdWUuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZvciBhIGZvcm1hdH4xNCBjbWFwICh0byBhY2Nlc3MgVW5pY29kZSBJVlMpLCB0aGUgcmV0dXJuIHZhbHVlIGlzICAqLworICAvKiAgICAweEZGRkZGRkZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfVUxvbmcgKQorICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCggRlRfQ2hhck1hcCAgY2hhcm1hcCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0NNYXBfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIFRydWVUeXBlL3NmbnQgc3BlY2lmaWMgY21hcCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcm1hcCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIHRhcmdldCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmb3JtYXQgb2YgYGNoYXJtYXAnLiAgSWYgYGNoYXJtYXAnIGRvZXNuJ3QgYmVsb25nIHRvIGEgICAgICAgICAqLworICAvKiAgICBUcnVlVHlwZS9zZm50IGZhY2UsIHJldHVybiAtMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfTG9uZyApCisgIEZUX0dldF9DTWFwX0Zvcm1hdCggRlRfQ2hhck1hcCAgY2hhcm1hcCApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVFRBQkxFU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3R0dGFncy5oIGIvZnJlZXR5cGUtMi42L2luY2x1ZGUvdHR0YWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzNmM3YgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3R0dGFncy5oCkBAIC0wLDAgKzEsMTExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHRhZ3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGFncyBmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIHRhYmxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVEFHU19IX18KKyNkZWZpbmUgX19UVEFHU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBUVEFHX2F2YXIgIEZUX01BS0VfVEFHKCAnYScsICd2JywgJ2EnLCAncicgKQorI2RlZmluZSBUVEFHX0JBU0UgIEZUX01BS0VfVEFHKCAnQicsICdBJywgJ1MnLCAnRScgKQorI2RlZmluZSBUVEFHX2JkYXQgIEZUX01BS0VfVEFHKCAnYicsICdkJywgJ2EnLCAndCcgKQorI2RlZmluZSBUVEFHX0JERiAgIEZUX01BS0VfVEFHKCAnQicsICdEJywgJ0YnLCAnICcgKQorI2RlZmluZSBUVEFHX2JoZWQgIEZUX01BS0VfVEFHKCAnYicsICdoJywgJ2UnLCAnZCcgKQorI2RlZmluZSBUVEFHX2Jsb2MgIEZUX01BS0VfVEFHKCAnYicsICdsJywgJ28nLCAnYycgKQorI2RlZmluZSBUVEFHX2JzbG4gIEZUX01BS0VfVEFHKCAnYicsICdzJywgJ2wnLCAnbicgKQorI2RlZmluZSBUVEFHX0NCRFQgIEZUX01BS0VfVEFHKCAnQycsICdCJywgJ0QnLCAnVCcgKQorI2RlZmluZSBUVEFHX0NCTEMgIEZUX01BS0VfVEFHKCAnQycsICdCJywgJ0wnLCAnQycgKQorI2RlZmluZSBUVEFHX0NGRiAgIEZUX01BS0VfVEFHKCAnQycsICdGJywgJ0YnLCAnICcgKQorI2RlZmluZSBUVEFHX0NJRCAgIEZUX01BS0VfVEFHKCAnQycsICdJJywgJ0QnLCAnICcgKQorI2RlZmluZSBUVEFHX2NtYXAgIEZUX01BS0VfVEFHKCAnYycsICdtJywgJ2EnLCAncCcgKQorI2RlZmluZSBUVEFHX2N2YXIgIEZUX01BS0VfVEFHKCAnYycsICd2JywgJ2EnLCAncicgKQorI2RlZmluZSBUVEFHX2N2dCAgIEZUX01BS0VfVEFHKCAnYycsICd2JywgJ3QnLCAnICcgKQorI2RlZmluZSBUVEFHX0RTSUcgIEZUX01BS0VfVEFHKCAnRCcsICdTJywgJ0knLCAnRycgKQorI2RlZmluZSBUVEFHX0VCRFQgIEZUX01BS0VfVEFHKCAnRScsICdCJywgJ0QnLCAnVCcgKQorI2RlZmluZSBUVEFHX0VCTEMgIEZUX01BS0VfVEFHKCAnRScsICdCJywgJ0wnLCAnQycgKQorI2RlZmluZSBUVEFHX0VCU0MgIEZUX01BS0VfVEFHKCAnRScsICdCJywgJ1MnLCAnQycgKQorI2RlZmluZSBUVEFHX2ZlYXQgIEZUX01BS0VfVEFHKCAnZicsICdlJywgJ2EnLCAndCcgKQorI2RlZmluZSBUVEFHX0ZPTkQgIEZUX01BS0VfVEFHKCAnRicsICdPJywgJ04nLCAnRCcgKQorI2RlZmluZSBUVEFHX2ZwZ20gIEZUX01BS0VfVEFHKCAnZicsICdwJywgJ2cnLCAnbScgKQorI2RlZmluZSBUVEFHX2Z2YXIgIEZUX01BS0VfVEFHKCAnZicsICd2JywgJ2EnLCAncicgKQorI2RlZmluZSBUVEFHX2dhc3AgIEZUX01BS0VfVEFHKCAnZycsICdhJywgJ3MnLCAncCcgKQorI2RlZmluZSBUVEFHX0dERUYgIEZUX01BS0VfVEFHKCAnRycsICdEJywgJ0UnLCAnRicgKQorI2RlZmluZSBUVEFHX2dseWYgIEZUX01BS0VfVEFHKCAnZycsICdsJywgJ3knLCAnZicgKQorI2RlZmluZSBUVEFHX0dQT1MgIEZUX01BS0VfVEFHKCAnRycsICdQJywgJ08nLCAnUycgKQorI2RlZmluZSBUVEFHX0dTVUIgIEZUX01BS0VfVEFHKCAnRycsICdTJywgJ1UnLCAnQicgKQorI2RlZmluZSBUVEFHX2d2YXIgIEZUX01BS0VfVEFHKCAnZycsICd2JywgJ2EnLCAncicgKQorI2RlZmluZSBUVEFHX2hkbXggIEZUX01BS0VfVEFHKCAnaCcsICdkJywgJ20nLCAneCcgKQorI2RlZmluZSBUVEFHX2hlYWQgIEZUX01BS0VfVEFHKCAnaCcsICdlJywgJ2EnLCAnZCcgKQorI2RlZmluZSBUVEFHX2hoZWEgIEZUX01BS0VfVEFHKCAnaCcsICdoJywgJ2UnLCAnYScgKQorI2RlZmluZSBUVEFHX2htdHggIEZUX01BS0VfVEFHKCAnaCcsICdtJywgJ3QnLCAneCcgKQorI2RlZmluZSBUVEFHX0pTVEYgIEZUX01BS0VfVEFHKCAnSicsICdTJywgJ1QnLCAnRicgKQorI2RlZmluZSBUVEFHX2p1c3QgIEZUX01BS0VfVEFHKCAnaicsICd1JywgJ3MnLCAndCcgKQorI2RlZmluZSBUVEFHX2tlcm4gIEZUX01BS0VfVEFHKCAnaycsICdlJywgJ3InLCAnbicgKQorI2RlZmluZSBUVEFHX2xjYXIgIEZUX01BS0VfVEFHKCAnbCcsICdjJywgJ2EnLCAncicgKQorI2RlZmluZSBUVEFHX2xvY2EgIEZUX01BS0VfVEFHKCAnbCcsICdvJywgJ2MnLCAnYScgKQorI2RlZmluZSBUVEFHX0xUU0ggIEZUX01BS0VfVEFHKCAnTCcsICdUJywgJ1MnLCAnSCcgKQorI2RlZmluZSBUVEFHX0xXRk4gIEZUX01BS0VfVEFHKCAnTCcsICdXJywgJ0YnLCAnTicgKQorI2RlZmluZSBUVEFHX01BVEggIEZUX01BS0VfVEFHKCAnTScsICdBJywgJ1QnLCAnSCcgKQorI2RlZmluZSBUVEFHX21heHAgIEZUX01BS0VfVEFHKCAnbScsICdhJywgJ3gnLCAncCcgKQorI2RlZmluZSBUVEFHX01FVEEgIEZUX01BS0VfVEFHKCAnTScsICdFJywgJ1QnLCAnQScgKQorI2RlZmluZSBUVEFHX01NRlggIEZUX01BS0VfVEFHKCAnTScsICdNJywgJ0YnLCAnWCcgKQorI2RlZmluZSBUVEFHX01NU0QgIEZUX01BS0VfVEFHKCAnTScsICdNJywgJ1MnLCAnRCcgKQorI2RlZmluZSBUVEFHX21vcnQgIEZUX01BS0VfVEFHKCAnbScsICdvJywgJ3InLCAndCcgKQorI2RlZmluZSBUVEFHX21vcnggIEZUX01BS0VfVEFHKCAnbScsICdvJywgJ3InLCAneCcgKQorI2RlZmluZSBUVEFHX25hbWUgIEZUX01BS0VfVEFHKCAnbicsICdhJywgJ20nLCAnZScgKQorI2RlZmluZSBUVEFHX29wYmQgIEZUX01BS0VfVEFHKCAnbycsICdwJywgJ2InLCAnZCcgKQorI2RlZmluZSBUVEFHX09TMiAgIEZUX01BS0VfVEFHKCAnTycsICdTJywgJy8nLCAnMicgKQorI2RlZmluZSBUVEFHX09UVE8gIEZUX01BS0VfVEFHKCAnTycsICdUJywgJ1QnLCAnTycgKQorI2RlZmluZSBUVEFHX1BDTFQgIEZUX01BS0VfVEFHKCAnUCcsICdDJywgJ0wnLCAnVCcgKQorI2RlZmluZSBUVEFHX1BPU1QgIEZUX01BS0VfVEFHKCAnUCcsICdPJywgJ1MnLCAnVCcgKQorI2RlZmluZSBUVEFHX3Bvc3QgIEZUX01BS0VfVEFHKCAncCcsICdvJywgJ3MnLCAndCcgKQorI2RlZmluZSBUVEFHX3ByZXAgIEZUX01BS0VfVEFHKCAncCcsICdyJywgJ2UnLCAncCcgKQorI2RlZmluZSBUVEFHX3Byb3AgIEZUX01BS0VfVEFHKCAncCcsICdyJywgJ28nLCAncCcgKQorI2RlZmluZSBUVEFHX3NiaXggIEZUX01BS0VfVEFHKCAncycsICdiJywgJ2knLCAneCcgKQorI2RlZmluZSBUVEFHX3NmbnQgIEZUX01BS0VfVEFHKCAncycsICdmJywgJ24nLCAndCcgKQorI2RlZmluZSBUVEFHX1NJTkcgIEZUX01BS0VfVEFHKCAnUycsICdJJywgJ04nLCAnRycgKQorI2RlZmluZSBUVEFHX3RyYWsgIEZUX01BS0VfVEFHKCAndCcsICdyJywgJ2EnLCAnaycgKQorI2RlZmluZSBUVEFHX3RydWUgIEZUX01BS0VfVEFHKCAndCcsICdyJywgJ3UnLCAnZScgKQorI2RlZmluZSBUVEFHX3R0YyAgIEZUX01BS0VfVEFHKCAndCcsICd0JywgJ2MnLCAnICcgKQorI2RlZmluZSBUVEFHX3R0Y2YgIEZUX01BS0VfVEFHKCAndCcsICd0JywgJ2MnLCAnZicgKQorI2RlZmluZSBUVEFHX1RZUDEgIEZUX01BS0VfVEFHKCAnVCcsICdZJywgJ1AnLCAnMScgKQorI2RlZmluZSBUVEFHX3R5cDEgIEZUX01BS0VfVEFHKCAndCcsICd5JywgJ3AnLCAnMScgKQorI2RlZmluZSBUVEFHX1ZETVggIEZUX01BS0VfVEFHKCAnVicsICdEJywgJ00nLCAnWCcgKQorI2RlZmluZSBUVEFHX3ZoZWEgIEZUX01BS0VfVEFHKCAndicsICdoJywgJ2UnLCAnYScgKQorI2RlZmluZSBUVEFHX3ZtdHggIEZUX01BS0VfVEFHKCAndicsICdtJywgJ3QnLCAneCcgKQorI2RlZmluZSBUVEFHX3dPRkYgIEZUX01BS0VfVEFHKCAndycsICdPJywgJ0YnLCAnRicgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRBR1NfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvaW5jbHVkZS90dHVucGF0LmggYi9mcmVldHlwZS0yLjYvaW5jbHVkZS90dHVucGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNTU2OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9pbmNsdWRlL3R0dW5wYXQuaApAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHVucGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRGVmaW5pdGlvbnMgZm9yIHRoZSB1bnBhdGVudGVkIFRydWVUeXBlIGhpbnRpbmcgc3lzdGVtICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgV3JpdHRlbiBieSBHcmFoYW0gQXNoZXIgPGdyYWhhbS5hc2hlckBidGludGVybmV0LmNvbT4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUVU5QQVRfSF9fCisjZGVmaW5lIF9fVFRVTlBBVF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqIEBjb25zdGFudDoKKyAgKiAgIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcKKyAgKgorICAqIEBkZXNjcmlwdGlvbjoKKyAgKiAgIEEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIGFuIEBGVF9QYXJhbWV0ZXIgc3RydWN0dXJlIHRvIGluZGljYXRlCisgICogICB0aGF0IHVucGF0ZW50ZWQgbWV0aG9kcyBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBieXRlY29kZQorICAqICAgaW50ZXJwcmV0ZXIgZm9yIGEgdHlwZWZhY2Ugb3BlbmVkIGJ5IEBGVF9PcGVuX0ZhY2UuCisgICoKKyAgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyAgRlRfTUFLRV9UQUcoICd1JywgJ24nLCAncCcsICdhJyApCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fVFRVTlBBVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9tb2R1bGVzLmNmZyBiL2ZyZWV0eXBlLTIuNi9tb2R1bGVzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE2NmRmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L21vZHVsZXMuY2ZnCkBAIC0wLDAgKzEsMjU1IEBACisjIG1vZHVsZXMuY2ZnCisjCisjIENvcHlyaWdodCAyMDA1LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorIworIworIyBJbiBjYXNlIHlvdSBjb21waWxlIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IHdpdGggR05VIG1ha2Ugb3IgbWFrZXBwLCB0aGlzCisjIGZpbGUgY29udHJvbHMgd2hpY2ggY29tcG9uZW50cyBhcmUgYnVpbHQgaW50byB0aGUgbGlicmFyeS4gIE90aGVyd2lzZSwKKyMgcGxlYXNlIHJlYWQgdGhpcyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBtb2R1bGVzIGFuZCBpdHMKKyMgZGVwZW5kZW5jaWVzLCB0aGVuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBmaWxlIGBkb2NzL0lOU1RBTEwuQU5ZJy4KKyMKKyMgVG8gZGVhY3RpdmF0ZSBhIG1vZHVsZSwgc2ltcGx5IGNvbW1lbnQgb3V0IHRoZSBjb3JyZXNwb25kaW5nIGxpbmUuICBUbworIyBhY3RpdmF0ZSBhIG1vZHVsZSwgcmVtb3ZlIHRoZSBjb21tZW50IGNoYXJhY3Rlci4KKyMKKyMgTm90ZSB0aGF0IG1hbnkgbW9kdWxlcyBhbmQgY29tcG9uZW50cyBhcmUgZnVydGhlciBjb250cm9sbGVkIHdpdGggbWFjcm9zCisjIGluIHRoZSBmaWxlIGBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oJy4KKworCisjIyMjCisjIyMjIGZvbnQgbW9kdWxlcyAtLSBhdCBsZWFzdCBvbmUgaXMgcmVxdWlyZWQKKyMjIyMKKyMjIyMgICBUaGUgb3JkZXIgZ2l2ZW4gaGVyZSAoZnJvbSB0b3AgdG8gZG93bikgaXMgdGhlIG9yZGVyIHVzZWQgZm9yIHRlc3RpbmcKKyMjIyMgICBmb250IGZvcm1hdHMgaW4gdGhlIGNvbXBpbGVkIGxpYnJhcnkuCisjIyMjCisKKyMgVHJ1ZVR5cGUgZm9udCBkcml2ZXIuCisjCisjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgc2ZudCcgbW9kdWxlLgorRk9OVF9NT0RVTEVTICs9IHRydWV0eXBlCisKKyMgUG9zdFNjcmlwdCBUeXBlIDEgZm9udCBkcml2ZXIuCisjCisjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgcHNhdXgnLCBgcHNoaW50ZXInLCBhbmQgYHBzbmFtZXMnIG1vZHVsZXMuCitGT05UX01PRFVMRVMgKz0gdHlwZTEKKworIyBDRkYvT3BlblR5cGUgZm9udCBkcml2ZXIuCisjCisjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgc2ZudCcsIGBwc2hpbnRlcicsIGFuZCBgcHNuYW1lcycgbW9kdWxlcy4KK0ZPTlRfTU9EVUxFUyArPSBjZmYKKworIyBUeXBlIDEgQ0lELWtleWVkIGZvbnQgZHJpdmVyLgorIworIyBUaGlzIGRyaXZlciBuZWVkcyB0aGUgYHBzYXV4JywgYHBzaGludGVyJywgYW5kIGBwc25hbWVzJyBtb2R1bGVzLgorRk9OVF9NT0RVTEVTICs9IGNpZAorCisjIFBGUi9UcnVlRG9jIGZvbnQgZHJpdmVyLiAgU2VlIG9wdGlvbmFsIGV4dGVuc2lvbiBmdHBmci5jIGJlbG93IGFsc28uCitGT05UX01PRFVMRVMgKz0gcGZyCisKKyMgUG9zdFNjcmlwdCBUeXBlIDQyIGZvbnQgZHJpdmVyLgorIworIyBUaGlzIGRyaXZlciBuZWVkcyB0aGUgYHRydWV0eXBlJyBhbmQgYHBzYXV4JyBtb2R1bGVzLgorRk9OVF9NT0RVTEVTICs9IHR5cGU0MgorCisjIFdpbmRvd3MgRk9OVC9GTlQgZm9udCBkcml2ZXIuICBTZWUgb3B0aW9uYWwgZXh0ZW5zaW9uIGZ0d2luZm50LmMgYmVsb3cKKyMgYWxzby4KK0ZPTlRfTU9EVUxFUyArPSB3aW5mb250cworCisjIFBDRiBmb250IGRyaXZlci4KK0ZPTlRfTU9EVUxFUyArPSBwY2YKKworIyBCREYgZm9udCBkcml2ZXIuICBTZWUgb3B0aW9uYWwgZXh0ZW5zaW9uIGZ0YmRmLmMgYmVsb3cgYWxzby4KK0ZPTlRfTU9EVUxFUyArPSBiZGYKKworIyBTRk5UIGZpbGVzIHN1cHBvcnQuICBJZiB1c2VkIHdpdGhvdXQgYHRydWV0eXBlJyBvciBgY2ZmJywgaXQgc3VwcG9ydHMKKyMgYml0bWFwLW9ubHkgZm9udHMgd2l0aGluIGFuIFNGTlQgd3JhcHBlci4KKyMKKyMgVGhpcyBkcml2ZXIgbmVlZHMgdGhlIGBwc25hbWVzJyBtb2R1bGUuCitGT05UX01PRFVMRVMgKz0gc2ZudAorCisKKyMjIyMKKyMjIyMgaGludGluZyBtb2R1bGVzCisjIyMjCisKKyMgRnJlZVR5cGUncyBhdXRvIGhpbnRlci4KK0hJTlRJTkdfTU9EVUxFUyArPSBhdXRvZml0CisKKyMgUG9zdFNjcmlwdCBoaW50ZXIuCitISU5USU5HX01PRFVMRVMgKz0gcHNoaW50ZXIKKworIyBUaGUgVHJ1ZVR5cGUgaGludGluZyBlbmdpbmUgZG9lc24ndCBoYXZlIGEgbW9kdWxlIG9mIGl0cyBvd24gYnV0IGlzCisjIGNvbnRyb2xsZWQgaW4gZmlsZSBpbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oCisjIChUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGFuZCBmcmllbmRzKS4KKworCisjIyMjCisjIyMjIHJhc3RlciBtb2R1bGVzIC0tIGF0IGxlYXN0IG9uZSBpcyByZXF1aXJlZCBmb3IgdmVjdG9yIGZvbnQgZm9ybWF0cworIyMjIworCisjIE1vbm9jaHJvbWUgcmFzdGVyaXplci4KK1JBU1RFUl9NT0RVTEVTICs9IHJhc3RlcgorCisjIEFudGktYWxpYXNpbmcgcmFzdGVyaXplci4KK1JBU1RFUl9NT0RVTEVTICs9IHNtb290aAorCisKKyMjIyMKKyMjIyMgYXV4aWxpYXJ5IG1vZHVsZXMKKyMjIyMKKworIyBGcmVlVHlwZSdzIGNhY2hlIHN1Yi1zeXN0ZW0gKHF1aXRlIHN0YWJsZSBidXQgc3RpbGwgaW4gYmV0YSAtLSB0aGlzIG1lYW5zCisjIHRoYXQgaXRzIHB1YmxpYyBBUEkgaXMgc3ViamVjdCB0byBjaGFuZ2UgaWYgbmVjZXNzYXJ5KS4gIFNlZQorIyBpbmNsdWRlL2Z0Y2FjaGUuaC4gIE5lZWRzIGZ0Z2x5cGguYy4KK0FVWF9NT0RVTEVTICs9IGNhY2hlCisKKyMgVHJ1ZVR5cGUgR1gvQUFUIHRhYmxlIHZhbGlkYXRpb24uICBOZWVkcyBmdGd4dmFsLmMgYmVsb3cuCisjIEFVWF9NT0RVTEVTICs9IGd4dmFsaWQKKworIyBTdXBwb3J0IGZvciBzdHJlYW1zIGNvbXByZXNzZWQgd2l0aCBnemlwIChmaWxlcyB3aXRoIHN1ZmZpeCAuZ3opLgorIworIyBTZWUgaW5jbHVkZS9mdGd6aXAuaCBmb3IgdGhlIEFQSS4KK0FVWF9NT0RVTEVTICs9IGd6aXAKKworIyBTdXBwb3J0IGZvciBzdHJlYW1zIGNvbXByZXNzZWQgd2l0aCBMWlcgKGZpbGVzIHdpdGggc3VmZml4IC5aKS4KKyMKKyMgU2VlIGluY2x1ZGUvZnRsencuaCBmb3IgdGhlIEFQSS4KK0FVWF9NT0RVTEVTICs9IGx6dworCisjIFN1cHBvcnQgZm9yIHN0cmVhbXMgY29tcHJlc3NlZCB3aXRoIGJ6aXAyIChmaWxlcyB3aXRoIHN1ZmZpeCAuYnoyKS4KKyMKKyMgU2VlIGluY2x1ZGUvZnRiemlwMi5oIGZvciB0aGUgQVBJLgorQVVYX01PRFVMRVMgKz0gYnppcDIKKworIyBPcGVuVHlwZSB0YWJsZSB2YWxpZGF0aW9uLiAgTmVlZHMgZnRvdHZhbC5jIGJlbG93LgorIworIyBBVVhfTU9EVUxFUyArPSBvdHZhbGlkCisKKyMgQXV4aWxpYXJ5IFBvc3RTY3JpcHQgZHJpdmVyIGNvbXBvbmVudCB0byBzaGFyZSBjb21tb24gY29kZS4KKyMKKyMgVGhpcyBtb2R1bGUgZGVwZW5kcyBvbiBgcHNuYW1lcycuCitBVVhfTU9EVUxFUyArPSBwc2F1eAorCisjIFN1cHBvcnQgZm9yIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMuCisjCisjIFRoaXMgbW9kdWxlIGNhbiBiZSBjb250cm9sbGVkIGluIGZ0Y29uZmlnLmgKKyMgKEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUykuCitBVVhfTU9EVUxFUyArPSBwc25hbWVzCisKKworIyMjIworIyMjIyBiYXNlIG1vZHVsZSBleHRlbnNpb25zCisjIyMjCisKKyMgRXhhY3QgYm91bmRpbmcgYm94IGNhbGN1bGF0aW9uLgorIworIyBTZWUgaW5jbHVkZS9mdGJib3guaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGJib3guYworCisjIEFjY2VzcyBCREYtc3BlY2lmaWMgc3RyaW5ncy4gIE5lZWRzIEJERiBmb250IGRyaXZlci4KKyMKKyMgU2VlIGluY2x1ZGUvZnRiZGYuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGJkZi5jCisKKyMgVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgMWJwcCwgMmJwcCwgNGJwcCwgYW5kIDhicHAgYml0bWFwcyBpbnRvCisjIDhicHAgZm9ybWF0LCBhbmQgZm9yIGVtYm9sZGVuaW5nIG9mIGJpdG1hcCBnbHlwaHMuCisjCisjIFNlZSBpbmNsdWRlL2Z0Yml0bWFwLmggZm9yIHRoZSBBUEkuCitCQVNFX0VYVEVOU0lPTlMgKz0gZnRiaXRtYXAuYworCisjIEFjY2VzcyBDSUQgZm9udCBpbmZvcm1hdGlvbi4KKyMKKyMgU2VlIGluY2x1ZGUvZnRjaWQuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGNpZC5jCisKKyMgU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGZvbnQgZm9ybWF0cy4KKyMKKyMgU2VlIGluY2x1ZGUvZnRmbnRmbXQuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGZudGZtdC5jCisKKyMgQWNjZXNzIEZTVHlwZSBpbmZvcm1hdGlvbi4gIE5lZWRzIGZ0dHlwZTEuYy4KKyMKKyMgU2VlIGluY2x1ZGUvZnJlZXR5cGUuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGZzdHlwZS5jCisKKyMgU3VwcG9ydCBmb3IgR0FTUCB0YWJsZSBxdWVyaWVzLgorIworIyBTZWUgaW5jbHVkZS9mdGdhc3AuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGdhc3AuYworCisjIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzLiAgTmVlZHMgZnRiaXRtYXAuYy4KKyMKKyMgU2VlIGluY2x1ZGUvZnRnbHlwaC5oIGZvciB0aGUgQVBJLgorQkFTRV9FWFRFTlNJT05TICs9IGZ0Z2x5cGguYworCisjIEludGVyZmFjZSBmb3IgZ3h2YWxpZCBtb2R1bGUuCisjCisjIFNlZSBpbmNsdWRlL2Z0Z3h2YWwuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdGd4dmFsLmMKKworIyBTdXBwb3J0IGZvciBMQ0QgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcHMuCisjCisjIFNlZSBpbmNsdWRlL2Z0bGNkZmlsLmggZm9yIHRoZSBBUEkuCitCQVNFX0VYVEVOU0lPTlMgKz0gZnRsY2RmaWwuYworCisjIE11bHRpcGxlIE1hc3RlciBmb250IGludGVyZmFjZS4KKyMKKyMgU2VlIGluY2x1ZGUvZnRtbS5oIGZvciB0aGUgQVBJLgorQkFTRV9FWFRFTlNJT05TICs9IGZ0bW0uYworCisjIEludGVyZmFjZSBmb3Igb3R2YWxpZCBtb2R1bGUuCisjCisjIFNlZSBpbmNsdWRlL2Z0b3R2YWwuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdG90dmFsLmMKKworIyBTdXBwb3J0IGZvciBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzLgorIworIyBTZWUgaW5jbHVkZS9mcmVldHlwZS5oIGZvciB0aGUgQVBJLgorQkFTRV9FWFRFTlNJT05TICs9IGZ0cGF0ZW50LmMKKworIyBJbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YS4gIE5lZWRzIFBGUiBmb250IGRyaXZlci4KKyMKKyMgU2VlIGluY2x1ZGUvZnRwZnIuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdHBmci5jCisKKyMgUGF0aCBzdHJva2VyLiAgTmVlZHMgZnRnbHlwaC5jLgorIworIyBTZWUgaW5jbHVkZS9mdHN0cm9rZS5oIGZvciB0aGUgQVBJLgorQkFTRV9FWFRFTlNJT05TICs9IGZ0c3Ryb2tlLmMKKworIyBTdXBwb3J0IGZvciBzeW50aGV0aWMgZW1ib2xkaW5nIGFuZCBzbGFudGluZyBvZiBmb250cy4gIE5lZWRzIGZ0Yml0bWFwLmMuCisjCisjIFNlZSBpbmNsdWRlL2Z0c3ludGguaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdHN5bnRoLmMKKworIyBJbnRlcmZhY2UgdG8gYWNjZXNzIGRhdGEgc3BlY2lmaWMgdG8gUG9zdFNjcmlwdCBUeXBlIDEgYW5kIFR5cGUgMiAoQ0ZGKQorIyBmb250cy4KKyMKKyMgU2VlIGluY2x1ZGUvdDF0YWJsZXMuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdHR5cGUxLmMKKworIyBJbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBkYXRhIHNwZWNpZmljIHRvIFdpbmRvd3MgRk5UIGZpbGVzLiAgTmVlZHMgd2luZm50CisjIGRyaXZlci4KKyMKKyMgU2VlIGluY2x1ZGUvZnR3aW5mbnQuaCBmb3IgdGhlIEFQSS4KK0JBU0VfRVhURU5TSU9OUyArPSBmdHdpbmZudC5jCisKKyMjIyMKKyMjIyMgVGhlIGNvbXBvbmVudHMgYGZ0c3lzdGVtLmMnIChmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHN0cmVhbSBJL08KKyMjIyMgbWFuYWdlbWVudCkgYW5kIGBmdGRlYnVnLmMnIChmb3IgZW1pdHRpbmcgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHVzZXIpCisjIyMjIGFyZSBjb250cm9sbGVkIHdpdGggdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuCisjIyMjCisjIyMjICAgZnRzeXN0ZW0uYzogICQoRlRTWVNfU1JDKQorIyMjIyAgIGZ0ZGVidWcuYzogICAkKEZUREVCVUdfU1JDKQorIyMjIworIyMjIyBQbGVhc2UgcmVmZXIgdG8gZG9jcy9DVVNUT01JWkUgZm9yIGRldGFpbHMuCisjIyMjCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9vYmpzL1JFQURNRSBiL2ZyZWV0eXBlLTIuNi9vYmpzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZiNjNlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L29ianMvUkVBRE1FCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBvYmplY3QgZmlsZXMgY3JlYXRlZCB3aGVuIGJ1aWxkaW5nIHRoZQorbGlicmFyeS4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTllZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9KYW1maWxlCkBAIC0wLDAgKzEsMjUgQEAKKyMgRnJlZVR5cGUgMiBzcmMgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIDsKKworIyBUaGUgZmlsZSA8aW50ZXJuYWwvaW50ZXJuYWwuaD4gaXMgdXNlZCB0byBkZWZpbmUgbWFjcm9zIHRoYXQgYXJlCisjIGxhdGVyIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cy4gIEl0IG5lZWRzIHRvIGJlIHBhcnNlZCBpbiBvcmRlciB0bworIyByZWNvcmQgdGhlc2UgZGVmaW5pdGlvbnMuCisjCitIRFJNQUNSTyAgWyBGVDJfU3ViRGlyICQoRlQyX0lOQ0xVREVfRElSKSBpbnRlcm5hbCBpbnRlcm5hbC5oIF0gOworCitmb3IgeHggaW4gJChGVDJfQ09NUE9ORU5UUykKK3sKKyAgU3ViSW5jbHVkZSBGVDJfVE9QICQoRlQyX1NSQ19ESVIpICQoeHgpIDsKK30KKworIyBlbmQgb2Ygc3JjIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwMGEzNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9KYW1maWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMgRnJlZVR5cGUgMiBzcmMvYXV0b2ZpdCBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAzLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgRlQyX1RPUCBzcmMgYXV0b2ZpdCA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICAjIGRlZmluZSBGVDJfQVVUT0ZJVDIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCBsYXRpbiBoaW50ZXIgcmVwbGFjZW1lbnQKKyAgaWYgJChGVDJfQVVUT0ZJVDIpCisgIHsKKyAgICBERUZJTkVTICs9IEZUX09QVElPTl9BVVRPRklUMiA7CisgIH0KKyAgaWYgJChGVDJfTVVMVEkpCisgIHsKKyAgICBfc291cmNlcyA9IGFmYW5nbGVzIGFmZ2xvYmFsIGFmaGludHMgYWZsYXRpbiBhZmNqayBhZmluZGljIGFmbG9hZGVyIGFmbW9kdWxlIGFmZHVtbXkgYWZ3YXJwIGFmcGljIDsKKworICAgIGlmICQoRlQyX0FVVE9GSVQyKQorICAgIHsKKyAgICAgIF9zb3VyY2VzICs9IGFmbGF0aW4yIDsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSBhdXRvZml0IDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL2F1dG9maXQgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYW5nbGVzLmMgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZhbmdsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjFlYjMxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmYW5nbGVzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBSb3V0aW5lcyB1c2VkIHRvIGNvbXB1dGUgdmVjdG9yIGFuZ2xlcyB3aXRoIGxpbWl0ZWQgYWNjdXJhY3kgICAgICAgICAqLworLyogICAgYW5kIHZlcnkgaGlnaCBzcGVlZC4gIEl0IGFsc28gY29udGFpbnMgc29ydGluZyByb3V0aW5lcyAoYm9keSkuICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJhZnR5cGVzLmgiCisKKworICAvKgorICAgKiAgV2UgYXJlIG5vdCB1c2luZyBgYWZfYW5nbGVfYXRhbicgYW55bW9yZSwgYnV0IHdlIGtlZXAgdGhlIHNvdXJjZQorICAgKiAgY29kZSBiZWxvdyBqdXN0IGluIGNhc2UuLi4KKyAgICovCisKKworI2lmIDAKKworCisgIC8qCisgICAqICBUaGUgdHJpY2sgaGVyZSBpcyB0byByZWFsaXplIHRoYXQgd2UgZG9uJ3QgbmVlZCBhIHZlcnkgYWNjdXJhdGUgYW5nbGUKKyAgICogIGFwcHJveGltYXRpb24uICBXZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZXN1bHQgb2YgYGFmX2FuZ2xlX2F0YW4nIHRvCisgICAqICBvbmx5IGNvbXBhcmUgdGhlIHNpZ24gb2YgYW5nbGUgZGlmZmVyZW5jZXMsIG9yIGNoZWNrIHdoZXRoZXIgaXRzCisgICAqICBtYWduaXR1ZGUgaXMgdmVyeSBzbWFsbC4KKyAgICoKKyAgICogIFRoZSBhcHByb3hpbWF0aW9uCisgICAqCisgICAqICAgIGR5ICogUEkgLyAofGR4fCt8ZHl8KQorICAgKgorICAgKiAgc2hvdWxkIGJlIGVub3VnaCwgYW5kIG11Y2ggZmFzdGVyIHRvIGNvbXB1dGUuCisgICAqLworICBGVF9MT0NBTF9ERUYoIEFGX0FuZ2xlICkKKyAgYWZfYW5nbGVfYXRhbiggRlRfRml4ZWQgIGR4LAorICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgZHkgKQorICB7CisgICAgQUZfQW5nbGUgIGFuZ2xlOworICAgIEZUX0ZpeGVkICBheCA9IGR4OworICAgIEZUX0ZpeGVkICBheSA9IGR5OworCisKKyAgICBpZiAoIGF4IDwgMCApCisgICAgICBheCA9IC1heDsKKyAgICBpZiAoIGF5IDwgMCApCisgICAgICBheSA9IC1heTsKKworICAgIGF4ICs9IGF5OworCisgICAgaWYgKCBheCA9PSAwICkKKyAgICAgIGFuZ2xlID0gMDsKKyAgICBlbHNlCisgICAgeworICAgICAgYW5nbGUgPSAoIEFGX0FOR0xFX1BJMiAqIGR5ICkgLyAoIGF4ICsgYXkgKTsKKyAgICAgIGlmICggZHggPCAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBhbmdsZSA+PSAwICkKKyAgICAgICAgICBhbmdsZSA9IEFGX0FOR0xFX1BJIC0gYW5nbGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhbmdsZSA9IC1BRl9BTkdMRV9QSSAtIGFuZ2xlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhbmdsZTsKKyAgfQorCisKKyNlbGlmIDAKKworCisgIC8qIHRoZSBmb2xsb3dpbmcgdGFibGUgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd2l0aCAqLworICAvKiB0aGUgYG1hdGhlci5weScgUHl0aG9uIHNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBBRl9BVEFOX0JJVFMgIDgKKworICBzdGF0aWMgY29uc3QgRlRfQnl0ZSAgYWZfYXJjdGFuWzFMIDw8IEFGX0FUQU5fQklUU10gPQorICB7CisgICAgIDAsICAwLCAgMSwgIDEsICAxLCAgMiwgIDIsICAyLAorICAgICAzLCAgMywgIDMsICAzLCAgNCwgIDQsICA0LCAgNSwKKyAgICAgNSwgIDUsICA2LCAgNiwgIDYsICA3LCAgNywgIDcsCisgICAgIDgsICA4LCAgOCwgIDksICA5LCAgOSwgMTAsIDEwLAorICAgIDEwLCAxMCwgMTEsIDExLCAxMSwgMTIsIDEyLCAxMiwKKyAgICAxMywgMTMsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTUsCisgICAgMTUsIDE1LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LAorICAgIDE4LCAxOCwgMTgsIDE4LCAxOSwgMTksIDE5LCAyMCwKKyAgICAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAyMiwgMjIsCisgICAgMjIsIDIzLCAyMywgMjMsIDI0LCAyNCwgMjQsIDI0LAorICAgIDI1LCAyNSwgMjUsIDI2LCAyNiwgMjYsIDI2LCAyNywKKyAgICAyNywgMjcsIDI4LCAyOCwgMjgsIDI4LCAyOSwgMjksCisgICAgMjksIDMwLCAzMCwgMzAsIDMwLCAzMSwgMzEsIDMxLAorICAgIDMxLCAzMiwgMzIsIDMyLCAzMywgMzMsIDMzLCAzMywKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzUsIDM1LCAzNSwgMzUsCisgICAgMzYsIDM2LCAzNiwgMzYsIDM3LCAzNywgMzcsIDM4LAorICAgIDM4LCAzOCwgMzgsIDM5LCAzOSwgMzksIDM5LCA0MCwKKyAgICA0MCwgNDAsIDQwLCA0MSwgNDEsIDQxLCA0MSwgNDIsCisgICAgNDIsIDQyLCA0MiwgNDIsIDQzLCA0MywgNDMsIDQzLAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NSwgNDUsIDQ1LCA0NSwKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ3LCA0NywgNDcsCisgICAgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDQ5LAorICAgIDQ5LCA0OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MSwKKyAgICA1MSwgNTEsIDUxLCA1MSwgNTIsIDUyLCA1MiwgNTIsCisgICAgNTIsIDUzLCA1MywgNTMsIDUzLCA1MywgNTQsIDU0LAorICAgIDU0LCA1NCwgNTQsIDU1LCA1NSwgNTUsIDU1LCA1NSwKKyAgICA1NiwgNTYsIDU2LCA1NiwgNTYsIDU3LCA1NywgNTcsCisgICAgNTcsIDU3LCA1NywgNTgsIDU4LCA1OCwgNTgsIDU4LAorICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDYwLCA2MCwKKyAgICA2MCwgNjAsIDYwLCA2MSwgNjEsIDYxLCA2MSwgNjEsCisgICAgNjEsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYzLAorICAgIDYzLCA2MywgNjMsIDYzLCA2MywgNjQsIDY0LCA2NAorICB9OworCisKKyAgRlRfTE9DQUxfREVGKCBBRl9BbmdsZSApCisgIGFmX2FuZ2xlX2F0YW4oIEZUX0ZpeGVkICBkeCwKKyAgICAgICAgICAgICAgICAgRlRfRml4ZWQgIGR5ICkKKyAgeworICAgIEFGX0FuZ2xlICBhbmdsZTsKKworCisgICAgLyogY2hlY2sgdHJpdmlhbCBjYXNlcyAqLworICAgIGlmICggZHkgPT0gMCApCisgICAgeworICAgICAgYW5nbGUgPSAwOworICAgICAgaWYgKCBkeCA8IDAgKQorICAgICAgICBhbmdsZSA9IEFGX0FOR0xFX1BJOworICAgICAgcmV0dXJuIGFuZ2xlOworICAgIH0KKyAgICBlbHNlIGlmICggZHggPT0gMCApCisgICAgeworICAgICAgYW5nbGUgPSBBRl9BTkdMRV9QSTI7CisgICAgICBpZiAoIGR5IDwgMCApCisgICAgICAgIGFuZ2xlID0gLUFGX0FOR0xFX1BJMjsKKyAgICAgIHJldHVybiBhbmdsZTsKKyAgICB9CisKKyAgICBhbmdsZSA9IDA7CisgICAgaWYgKCBkeCA8IDAgKQorICAgIHsKKyAgICAgIGR4ID0gLWR4OworICAgICAgZHkgPSAtZHk7CisgICAgICBhbmdsZSA9IEFGX0FOR0xFX1BJOworICAgIH0KKworICAgIGlmICggZHkgPCAwICkKKyAgICB7CisgICAgICBGVF9Qb3MgIHRtcDsKKworCisgICAgICB0bXAgPSBkeDsKKyAgICAgIGR4ICA9IC1keTsKKyAgICAgIGR5ICA9IHRtcDsKKyAgICAgIGFuZ2xlIC09IEFGX0FOR0xFX1BJMjsKKyAgICB9CisKKyAgICBpZiAoIGR4ID09IDAgJiYgZHkgPT0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggZHggPT0gZHkgKQorICAgICAgYW5nbGUgKz0gQUZfQU5HTEVfUEk0OworICAgIGVsc2UgaWYgKCBkeCA+IGR5ICkKKyAgICAgIGFuZ2xlICs9IGFmX2FyY3RhbltGVF9EaXZGaXgoIGR5LCBkeCApID4+ICggMTYgLSBBRl9BVEFOX0JJVFMgKV07CisgICAgZWxzZQorICAgICAgYW5nbGUgKz0gQUZfQU5HTEVfUEkyIC0KKyAgICAgICAgICAgICAgIGFmX2FyY3RhbltGVF9EaXZGaXgoIGR4LCBkeSApID4+ICggMTYgLSBBRl9BVEFOX0JJVFMgKV07CisKKyAgICBpZiAoIGFuZ2xlID4gQUZfQU5HTEVfUEkgKQorICAgICAgYW5nbGUgLT0gQUZfQU5HTEVfMlBJOworCisgICAgcmV0dXJuIGFuZ2xlOworICB9CisKKworI2VuZGlmIC8qIDAgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX3NvcnRfcG9zKCBGVF9VSW50ICBjb3VudCwKKyAgICAgICAgICAgICAgIEZUX1BvcyogIHRhYmxlICkKKyAgeworICAgIEZUX1VJbnQgIGksIGo7CisgICAgRlRfUG9zICAgc3dhcDsKKworCisgICAgZm9yICggaSA9IDE7IGkgPCBjb3VudDsgaSsrICkKKyAgICB7CisgICAgICBmb3IgKCBqID0gaTsgaiA+IDA7IGotLSApCisgICAgICB7CisgICAgICAgIGlmICggdGFibGVbal0gPj0gdGFibGVbaiAtIDFdICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBzd2FwICAgICAgICAgPSB0YWJsZVtqXTsKKyAgICAgICAgdGFibGVbal0gICAgID0gdGFibGVbaiAtIDFdOworICAgICAgICB0YWJsZVtqIC0gMV0gPSBzd2FwOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfc29ydF9hbmRfcXVhbnRpemVfd2lkdGhzKCBGVF9VSW50KiAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfV2lkdGggIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICB0aHJlc2hvbGQgKQorICB7CisgICAgRlRfVUludCAgICAgIGksIGo7CisgICAgRlRfVUludCAgICAgIGN1cl9pZHg7CisgICAgRlRfUG9zICAgICAgIGN1cl92YWw7CisgICAgRlRfUG9zICAgICAgIHN1bTsKKyAgICBBRl9XaWR0aFJlYyAgc3dhcDsKKworCisgICAgaWYgKCAqY291bnQgPT0gMSApCisgICAgICByZXR1cm47CisKKyAgICAvKiBzb3J0ICovCisgICAgZm9yICggaSA9IDE7IGkgPCAqY291bnQ7IGkrKyApCisgICAgeworICAgICAgZm9yICggaiA9IGk7IGogPiAwOyBqLS0gKQorICAgICAgeworICAgICAgICBpZiAoIHRhYmxlW2pdLm9yZyA+PSB0YWJsZVtqIC0gMV0ub3JnICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBzd2FwICAgICAgICAgPSB0YWJsZVtqXTsKKyAgICAgICAgdGFibGVbal0gICAgID0gdGFibGVbaiAtIDFdOworICAgICAgICB0YWJsZVtqIC0gMV0gPSBzd2FwOworICAgICAgfQorICAgIH0KKworICAgIGN1cl9pZHggPSAwOworICAgIGN1cl92YWwgPSB0YWJsZVtjdXJfaWR4XS5vcmc7CisKKyAgICAvKiBjb21wdXRlIGFuZCB1c2UgbWVhbiB2YWx1ZXMgZm9yIGNsdXN0ZXJzIG5vdCBsYXJnZXIgdGhhbiAgKi8KKyAgICAvKiBgdGhyZXNob2xkJzsgdGhpcyBpcyB2ZXJ5IHByaW1pdGl2ZSBhbmQgbWlnaHQgbm90IHlpZWxkICAgKi8KKyAgICAvKiB0aGUgYmVzdCByZXN1bHQsIGJ1dCBub3JtYWxseSwgdXNpbmcgcmVmZXJlbmNlIGNoYXJhY3RlciAgKi8KKyAgICAvKiBgbycsIGAqY291bnQnIGlzIDIsIHNvIHRoZSBjb2RlIGJlbG93IGlzIGZ1bGx5IHN1ZmZpY2llbnQgKi8KKyAgICBmb3IgKCBpID0gMTsgaSA8ICpjb3VudDsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIHRhYmxlW2ldLm9yZyAtIGN1cl92YWwgPiB0aHJlc2hvbGQgfHwKKyAgICAgICAgICAgaSA9PSAqY291bnQgLSAxICAgICAgICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIHN1bSA9IDA7CisKKyAgICAgICAgLyogZml4IGxvb3AgZm9yIGVuZCBvZiBhcnJheSAqLworICAgICAgICBpZiAoIHRhYmxlW2ldLm9yZyAtIGN1cl92YWwgPD0gdGhyZXNob2xkICYmCisgICAgICAgICAgICAgaSA9PSAqY291bnQgLSAxICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgIGkrKzsKKworICAgICAgICBmb3IgKCBqID0gY3VyX2lkeDsgaiA8IGk7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBzdW0gICAgICAgICArPSB0YWJsZVtqXS5vcmc7CisgICAgICAgICAgdGFibGVbal0ub3JnID0gMDsKKyAgICAgICAgfQorICAgICAgICB0YWJsZVtjdXJfaWR4XS5vcmcgPSBzdW0gLyAoRlRfUG9zKWo7CisKKyAgICAgICAgaWYgKCBpIDwgKmNvdW50IC0gMSApCisgICAgICAgIHsKKyAgICAgICAgICBjdXJfaWR4ID0gaSArIDE7CisgICAgICAgICAgY3VyX3ZhbCA9IHRhYmxlW2N1cl9pZHhdLm9yZzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGN1cl9pZHggPSAxOworCisgICAgLyogY29tcHJlc3MgYXJyYXkgdG8gcmVtb3ZlIHplcm8gdmFsdWVzICovCisgICAgZm9yICggaSA9IDE7IGkgPCAqY291bnQ7IGkrKyApCisgICAgeworICAgICAgaWYgKCB0YWJsZVtpXS5vcmcgKQorICAgICAgICB0YWJsZVtjdXJfaWR4KytdID0gdGFibGVbaV07CisgICAgfQorCisgICAgKmNvdW50ID0gY3VyX2lkeDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYW5nbGVzLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZhbmdsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzNmOWUxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYW5nbGVzLmgKQEAgLTAsMCArMSw3IEBACisvKgorICogIGFmYW5nbGVzLmgKKyAqCisgKiAgVGhpcyBpcyBhIGR1bW15IGZpbGUsIHVzZWQgdG8gcGxlYXNlIHRoZSBidWlsZCBzeXN0ZW0uICBJdCBpcyBuZXZlcgorICogIGluY2x1ZGVkIGJ5IHRoZSBhdXRvLWZpdHRlciBzb3VyY2VzLgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYmx1ZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYmx1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjI0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIFBlcmwgc2NyaXB0IGBhZmJsdWUucGwnLCAqLworLyogdXNpbmcgZGF0YSBmcm9tIGZpbGUgYGFmYmx1ZS5kYXQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmYmx1ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImFmdHlwZXMuaCIKKworCisgIEZUX0xPQ0FMX0FSUkFZX0RFRiggY2hhciApCisgIGFmX2JsdWVfc3RyaW5nc1tdID0KKyAgeworICAgIC8qICovCisgICAgJ1x4RDgnLCAnXHhBNycsICdceEQ4JywgJ1x4QTUnLCAnXHhEOScsICdceDg0JywgJ1x4RDknLCAnXHg4MycsICdceEQ4JywgJ1x4QjcnLCAnXHhEOCcsICdceEI4JywgIC8qINinINilINmEINmDINi3INi4ICovCisgICAgJ1wwJywKKyAgICAnXHhEOCcsICdceEFBJywgJ1x4RDgnLCAnXHhBQicsICdceEQ4JywgJ1x4QjcnLCAnXHhEOCcsICdceEI4JywgJ1x4RDknLCAnXHg4MycsICAvKiDYqiDYqyDYtyDYuCDZgyAqLworICAgICdcMCcsCisgICAgJ1x4RDAnLCAnXHg5MScsICdceEQwJywgJ1x4OTInLCAnXHhEMCcsICdceDk1JywgJ1x4RDAnLCAnXHg5RicsICdceEQwJywgJ1x4OTcnLCAnXHhEMCcsICdceDlFJywgJ1x4RDAnLCAnXHhBMScsICdceEQwJywgJ1x4QUQnLCAgLyog0JHQktCV0J/Ql9Ce0KHQrSAqLworICAgICdcMCcsCisgICAgJ1x4RDAnLCAnXHg5MScsICdceEQwJywgJ1x4OTInLCAnXHhEMCcsICdceDk1JywgJ1x4RDAnLCAnXHhBOCcsICdceEQwJywgJ1x4OTcnLCAnXHhEMCcsICdceDlFJywgJ1x4RDAnLCAnXHhBMScsICdceEQwJywgJ1x4QUQnLCAgLyog0JHQktCV0KjQl9Ce0KHQrSAqLworICAgICdcMCcsCisgICAgJ1x4RDEnLCAnXHg4NScsICdceEQwJywgJ1x4QkYnLCAnXHhEMCcsICdceEJEJywgJ1x4RDEnLCAnXHg4OCcsICdceEQwJywgJ1x4QjUnLCAnXHhEMCcsICdceEI3JywgJ1x4RDAnLCAnXHhCRScsICdceEQxJywgJ1x4ODEnLCAgLyog0YXQv9C90YjQtdC30L7RgSAqLworICAgICdcMCcsCisgICAgJ1x4RDEnLCAnXHg4MCcsICdceEQxJywgJ1x4ODMnLCAnXHhEMScsICdceDg0JywgIC8qINGA0YPRhCAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBNCcsICdceDk1JywgJ1x4RTAnLCAnXHhBNCcsICdceEFFJywgJ1x4RTAnLCAnXHhBNCcsICdceDg1JywgJ1x4RTAnLCAnXHhBNCcsICdceDg2JywgJ1x4RTAnLCAnXHhBNCcsICdceEE1JywgJ1x4RTAnLCAnXHhBNCcsICdceEE3JywgJ1x4RTAnLCAnXHhBNCcsICdceEFEJywgJ1x4RTAnLCAnXHhBNCcsICdceEI2JywgIC8qIOCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QTQnLCAnXHg4OCcsICdceEUwJywgJ1x4QTQnLCAnXHg5MCcsICdceEUwJywgJ1x4QTQnLCAnXHg5MycsICdceEUwJywgJ1x4QTQnLCAnXHg5NCcsICdceEUwJywgJ1x4QTQnLCAnXHhCRicsICdceEUwJywgJ1x4QTUnLCAnXHg4MCcsICdceEUwJywgJ1x4QTUnLCAnXHg4QicsICdceEUwJywgJ1x4QTUnLCAnXHg4QycsICAvKiDgpIgg4KSQIOCkkyDgpJQg4KS/IOClgCDgpYsg4KWMICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE0JywgJ1x4OTUnLCAnXHhFMCcsICdceEE0JywgJ1x4QUUnLCAnXHhFMCcsICdceEE0JywgJ1x4ODUnLCAnXHhFMCcsICdceEE0JywgJ1x4ODYnLCAnXHhFMCcsICdceEE0JywgJ1x4QTUnLCAnXHhFMCcsICdceEE0JywgJ1x4QTcnLCAnXHhFMCcsICdceEE0JywgJ1x4QUQnLCAnXHhFMCcsICdceEE0JywgJ1x4QjYnLCAgLyog4KSVIOCkriDgpIUg4KSGIOCkpSDgpKcg4KStIOCktiAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhBNScsICdceDgxJywgJ1x4RTAnLCAnXHhBNScsICdceDgzJywgIC8qIOClgSDgpYMgKi8KKyAgICAnXDAnLAorICAgICdceENFJywgJ1x4OTMnLCAnXHhDRScsICdceDkyJywgJ1x4Q0UnLCAnXHg5NScsICdceENFJywgJ1x4OTYnLCAnXHhDRScsICdceDk4JywgJ1x4Q0UnLCAnXHg5RicsICdceENFJywgJ1x4QTknLCAgLyogzpPOks6VzpbOmM6fzqkgKi8KKyAgICAnXDAnLAorICAgICdceENFJywgJ1x4OTInLCAnXHhDRScsICdceDk0JywgJ1x4Q0UnLCAnXHg5NicsICdceENFJywgJ1x4OUUnLCAnXHhDRScsICdceDk4JywgJ1x4Q0UnLCAnXHg5RicsICAvKiDOks6UzpbOns6Yzp8gKi8KKyAgICAnXDAnLAorICAgICdceENFJywgJ1x4QjInLCAnXHhDRScsICdceEI4JywgJ1x4Q0UnLCAnXHhCNCcsICdceENFJywgJ1x4QjYnLCAnXHhDRScsICdceEJCJywgJ1x4Q0UnLCAnXHhCRScsICAvKiDOss64zrTOts67zr4gKi8KKyAgICAnXDAnLAorICAgICdceENFJywgJ1x4QjEnLCAnXHhDRScsICdceEI1JywgJ1x4Q0UnLCAnXHhCOScsICdceENFJywgJ1x4QkYnLCAnXHhDRicsICdceDgwJywgJ1x4Q0YnLCAnXHg4MycsICdceENGJywgJ1x4ODQnLCAnXHhDRicsICdceDg5JywgIC8qIM6xzrXOuc6/z4DPg8+Ez4kgKi8KKyAgICAnXDAnLAorICAgICdceENFJywgJ1x4QjInLCAnXHhDRScsICdceEIzJywgJ1x4Q0UnLCAnXHhCNycsICdceENFJywgJ1x4QkMnLCAnXHhDRicsICdceDgxJywgJ1x4Q0YnLCAnXHg4NicsICdceENGJywgJ1x4ODcnLCAnXHhDRicsICdceDg4JywgIC8qIM6yzrPOt868z4HPhs+Hz4ggKi8KKyAgICAnXDAnLAorICAgICdceEQ3JywgJ1x4OTEnLCAnXHhENycsICdceDkzJywgJ1x4RDcnLCAnXHg5NCcsICdceEQ3JywgJ1x4OTcnLCAnXHhENycsICdceDlBJywgJ1x4RDcnLCAnXHg5QicsICdceEQ3JywgJ1x4OUQnLCAnXHhENycsICdceEExJywgIC8qINeR15PXlNeX15rXm9ed16EgKi8KKyAgICAnXDAnLAorICAgICdceEQ3JywgJ1x4OTEnLCAnXHhENycsICdceDk4JywgJ1x4RDcnLCAnXHg5QicsICdceEQ3JywgJ1x4OUQnLCAnXHhENycsICdceEExJywgJ1x4RDcnLCAnXHhBNicsICAvKiDXkdeY15vXndeh16YgKi8KKyAgICAnXDAnLAorICAgICdceEQ3JywgJ1x4QTcnLCAnXHhENycsICdceDlBJywgJ1x4RDcnLCAnXHg5RicsICdceEQ3JywgJ1x4QTMnLCAnXHhENycsICdceEE1JywgIC8qINen15rXn9ej16UgKi8KKyAgICAnXDAnLAorICAgICdUJywgJ0gnLCAnRScsICdaJywgJ08nLCAnQycsICdRJywgJ1MnLCAgLyogVEhFWk9DUVMgKi8KKyAgICAnXDAnLAorICAgICdIJywgJ0UnLCAnWicsICdMJywgJ08nLCAnQycsICdVJywgJ1MnLCAgLyogSEVaTE9DVVMgKi8KKyAgICAnXDAnLAorICAgICdmJywgJ2knLCAnaicsICdrJywgJ2QnLCAnYicsICdoJywgIC8qIGZpamtkYmggKi8KKyAgICAnXDAnLAorICAgICd4JywgJ3onLCAncicsICdvJywgJ2UnLCAncycsICdjJywgIC8qIHh6cm9lc2MgKi8KKyAgICAnXDAnLAorICAgICdwJywgJ3EnLCAnZycsICdqJywgJ3knLCAgLyogcHFnankgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QjAnLCAnXHg4NycsICdceEUwJywgJ1x4QjAnLCAnXHg4QycsICdceEUwJywgJ1x4QjAnLCAnXHg5OScsICdceEUwJywgJ1x4QjAnLCAnXHg5RScsICdceEUwJywgJ1x4QjAnLCAnXHhBMycsICdceEUwJywgJ1x4QjAnLCAnXHhCMScsICdceEUwJywgJ1x4QjEnLCAnXHhBRicsICAvKiDgsIcg4LCMIOCwmSDgsJ4g4LCjIOCwsSDgsa8gKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QjAnLCAnXHg4NScsICdceEUwJywgJ1x4QjAnLCAnXHg5NScsICdceEUwJywgJ1x4QjAnLCAnXHg5QScsICdceEUwJywgJ1x4QjAnLCAnXHhCMCcsICdceEUwJywgJ1x4QjAnLCAnXHhCRCcsICdceEUwJywgJ1x4QjEnLCAnXHhBOCcsICdceEUwJywgJ1x4QjEnLCAnXHhBQycsICAvKiDgsIUg4LCVIOCwmiDgsLAg4LC9IOCxqCDgsawgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QjgnLCAnXHg5QScsICdceEUwJywgJ1x4QjknLCAnXHg4MCcsICdceEUwJywgJ1x4QjknLCAnXHg4MScsICdceEUwJywgJ1x4QjgnLCAnXHhBRCcsICdceEUwJywgJ1x4QjgnLCAnXHg4MScsICdceEUwJywgJ1x4QjgnLCAnXHhCMicsICAvKiDguJog4LmAIOC5gSDguK0g4LiBIOC4siAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDlBJywgJ1x4RTAnLCAnXHhCOCcsICdceDlCJywgJ1x4RTAnLCAnXHhCOCcsICdceEE5JywgJ1x4RTAnLCAnXHhCOCcsICdceEFGJywgJ1x4RTAnLCAnXHhCOCcsICdceEFEJywgJ1x4RTAnLCAnXHhCOCcsICdceEEyJywgJ1x4RTAnLCAnXHhCOCcsICdceEFFJywgIC8qIOC4miDguJsg4LipIOC4ryDguK0g4LiiIOC4riAqLworICAgICdcMCcsCisgICAgJ1x4RTAnLCAnXHhCOCcsICdceDlCJywgJ1x4RTAnLCAnXHhCOCcsICdceDlEJywgJ1x4RTAnLCAnXHhCOCcsICdceDlGJywgIC8qIOC4myDguJ0g4LifICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI5JywgJ1x4ODInLCAnXHhFMCcsICdceEI5JywgJ1x4ODMnLCAnXHhFMCcsICdceEI5JywgJ1x4ODQnLCAgLyog4LmCIOC5gyDguYQgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QjgnLCAnXHg4RScsICdceEUwJywgJ1x4QjgnLCAnXHg4RicsICdceEUwJywgJ1x4QjgnLCAnXHhBNCcsICdceEUwJywgJ1x4QjgnLCAnXHhBNicsICAvKiDguI4g4LiPIOC4pCDguKYgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QjgnLCAnXHg4RCcsICdceEUwJywgJ1x4QjgnLCAnXHg5MCcsICAvKiDguI0g4LiQICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI5JywgJ1x4OTAnLCAnXHhFMCcsICdceEI5JywgJ1x4OTEnLCAnXHhFMCcsICdceEI5JywgJ1x4OTMnLCAgLyog4LmQIOC5kSDguZMgKi8KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSworICAgICdcMCcsCisgICAgJ1x4RTQnLCAnXHhCQicsICdceDk2JywgJ1x4RTQnLCAnXHhCQicsICdceEFDJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJ1x4RTQnLCAnXHhCRScsICdceDg2JywgJ1x4RTUnLCAnXHg4MCcsICdceDkxJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJ1x4RTUnLCAnXHg5MicsICdceDhDJywgJ1x4RTUnLCAnXHg5QycsICdceEIwJywgIC8qIOS7luS7rOS9oOS+huWAkeWIsOWSjOWcsCAqLworICAgICdceEU1JywgJ1x4QUYnLCAnXHhCOScsICdceEU1JywgJ1x4QjAnLCAnXHg4RCcsICdceEU1JywgJ1x4QjAnLCAnXHhCMScsICdceEU1JywgJ1x4QjgnLCAnXHhBRCcsICdceEU2JywgJ1x4ODgnLCAnXHg5MScsICdceEU2JywgJ1x4OTcnLCAnXHhCNicsICdceEU2JywgJ1x4OTknLCAnXHg4MicsICdceEU2JywgJ1x4OUMnLCAnXHg4MycsICAvKiDlr7nlsI3lsLHluK3miJHml7bmmYLmnIMgKi8KKyAgICAnXHhFNicsICdceDlEJywgJ1x4QTUnLCAnXHhFNycsICdceDgyJywgJ1x4QkEnLCAnXHhFOCcsICdceDgzJywgJ1x4QkQnLCAnXHhFOCcsICdceDg4JywgJ1x4QjAnLCAnXHhFOCcsICdceEFBJywgJ1x4QUEnLCAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnXHhFOCcsICdceEJGJywgJ1x4OTknLCAnXHhFOScsICdceDgwJywgJ1x4OTknLCAgLyog5p2l54K66IO96Iiw6Kqq6K+06L+Z6YCZICovCisgICAgJ1x4RTknLCAnXHhCRCcsICdceDhBJywgJ3wnLCAgLyog6b2KIHwgKi8KKyAgICAnXHhFNScsICdceDg2JywgJ1x4OUInLCAnXHhFNScsICdceDkwJywgJ1x4OEMnLCAnXHhFNScsICdceEI3JywgJ1x4QjInLCAnXHhFNicsICdceDg0JywgJ1x4QkYnLCAnXHhFNicsICdceDk3JywgJ1x4QTInLCAnXHhFNicsICdceDk4JywgJ1x4OUYnLCAnXHhFNicsICdceDk4JywgJ1x4QUYnLCAnXHhFNicsICdceDk5JywgJ1x4QUYnLCAgLyog5Yab5ZCM5bey5oS/5pei5pif5piv5pmvICovCisgICAgJ1x4RTYnLCAnXHhCMCcsICdceDkxJywgJ1x4RTcnLCAnXHg4NScsICdceEE3JywgJ1x4RTcnLCAnXHg4RScsICdceEIwJywgJ1x4RTcnLCAnXHg4RicsICdceEJFJywgJ1x4RTcnLCAnXHg5MCcsICdceDg2JywgJ1x4RTcnLCAnXHg5NCcsICdceEE4JywgJ1x4RTcnLCAnXHhCRCcsICdceEFFJywgJ1x4RTgnLCAnXHhBNicsICdceDgxJywgIC8qIOawkeeFp+eOsOePvueQhueUqOe9ruimgSAqLworICAgICdceEU4JywgJ1x4QkInLCAnXHg4RCcsICdceEU5JywgJ1x4ODInLCAnXHhBMycsICdceEU5JywgJ1x4ODUnLCAnXHg4RCcsICdceEU5JywgJ1x4ODcnLCAnXHg4QycsICdceEU5JywgJ1x4OTYnLCAnXHg4QicsICdceEU5JywgJ1x4OUInLCAnXHhCNycsICdceEU5JywgJ1x4OUMnLCAnXHhCMicsICdceEU5JywgJ1x4OUQnLCAnXHhBMicsICAvKiDou43pgqPphY3ph4zplovpm7fpnLLpnaIgKi8KKyAgICAnXHhFOScsICdceEExJywgJ1x4QkUnLCAgLyog6aG+ICovCisgICAgJ1wwJywKKyAgICAnXHhFNCcsICdceEI4JywgJ1x4QUEnLCAnXHhFNCcsICdceEI4JywgJ1x4QkEnLCAnXHhFNCcsICdceEJBJywgJ1x4QkEnLCAnXHhFNCcsICdceEJCJywgJ1x4OTYnLCAnXHhFNCcsICdceEJCJywgJ1x4QTUnLCAnXHhFNCcsICdceEJCJywgJ1x4QUMnLCAnXHhFNCcsICdceEJEJywgJ1x4QTAnLCAnXHhFNCcsICdceEJFJywgJ1x4ODYnLCAgLyog5Liq5Li65Lq65LuW5Lul5Lus5L2g5L6GICovCisgICAgJ1x4RTUnLCAnXHg4MCcsICdceDhCJywgJ1x4RTUnLCAnXHg4MCcsICdceDkxJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJ1x4RTUnLCAnXHg5MicsICdceDhDJywgJ1x4RTUnLCAnXHhBNCcsICdceEE3JywgJ1x4RTUnLCAnXHhBRicsICdceEI5JywgJ1x4RTUnLCAnXHhCMCcsICdceDhEJywgJ1x4RTUnLCAnXHhCMCcsICdceEIxJywgIC8qIOWAi+WAkeWIsOWSjOWkp+WvueWwjeWwsSAqLworICAgICdceEU2JywgJ1x4ODgnLCAnXHg5MScsICdceEU2JywgJ1x4OTcnLCAnXHhCNicsICdceEU2JywgJ1x4OTknLCAnXHg4MicsICdceEU2JywgJ1x4OUMnLCAnXHg4OScsICdceEU2JywgJ1x4OUQnLCAnXHhBNScsICdceEU3JywgJ1x4ODInLCAnXHhCQScsICdceEU4JywgJ1x4QTYnLCAnXHg4MScsICdceEU4JywgJ1x4QUEnLCAnXHhBQScsICAvKiDmiJHml7bmmYLmnInmnaXngrropoHoqqogKi8KKyAgICAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnfCcsICAvKiDor7QgfCAqLworICAgICdceEU0JywgJ1x4QjgnLCAnXHhCQicsICdceEU0JywgJ1x4QkEnLCAnXHg5QicsICdceEU1JywgJ1x4OUInLCAnXHhBMCcsICdceEU1JywgJ1x4QUUnLCAnXHg4MycsICdceEU2JywgJ1x4ODMnLCAnXHhCMycsICdceEU2JywgJ1x4ODQnLCAnXHg4RicsICdceEU3JywgJ1x4OTAnLCAnXHg4NicsICdceEU3JywgJ1x4OTQnLCAnXHg5RicsICAvKiDkuLvkupvlm6DlroPmg7PmhI/nkIbnlJ8gKi8KKyAgICAnXHhFNycsICdceDk1JywgJ1x4QjYnLCAnXHhFNycsICdceDlDJywgJ1x4OEInLCAnXHhFNycsICdceDlEJywgJ1x4ODAnLCAnXHhFNycsICdceEJEJywgJ1x4QUUnLCAnXHhFOCcsICdceDgwJywgJ1x4ODUnLCAnXHhFOCcsICdceDg3JywgJ1x4QUEnLCAnXHhFOCcsICdceDkxJywgJ1x4OTcnLCAnXHhFOCcsICdceEEzJywgJ1x4QTEnLCAgLyog55W255yL552A572u6ICF6Ieq6JGX6KOhICovCisgICAgJ1x4RTgnLCAnXHhCRicsICdceDg3JywgJ1x4RTgnLCAnXHhCRicsICdceDk4JywgJ1x4RTgnLCAnXHhCRicsICdceDlCJywgJ1x4RTknLCAnXHg4MCcsICdceEIyJywgJ1x4RTknLCAnXHg4MScsICdceDhFJywgJ1x4RTknLCAnXHg4MScsICdceDkzJywgJ1x4RTknLCAnXHg4MicsICdceDg0JywgJ1x4RTknLCAnXHg4NycsICdceDhDJywgIC8qIOi/h+i/mOi/m+mAsumBjumBk+mChOmHjCAqLworICAgICdceEU5JywgJ1x4OUQnLCAnXHhBMicsICAvKiDpnaIgKi8KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVAorICAgICdcMCcsCisgICAgJ1x4RTQnLCAnXHhCQScsICdceDlCJywgJ1x4RTQnLCAnXHhCQicsICdceEFDJywgJ1x4RTQnLCAnXHhCRCcsICdceEEwJywgJ1x4RTQnLCAnXHhCRScsICdceDg2JywgJ1x4RTUnLCAnXHg4MCcsICdceDkxJywgJ1x4RTUnLCAnXHg4OCcsICdceEIwJywgJ1x4RTUnLCAnXHg5MicsICdceDhDJywgJ1x4RTUnLCAnXHg5QycsICdceEIwJywgIC8qIOS6m+S7rOS9oOS+huWAkeWIsOWSjOWcsCAqLworICAgICdceEU1JywgJ1x4QTUnLCAnXHhCOScsICdceEU1JywgJ1x4QjAnLCAnXHg4NicsICdceEU1JywgJ1x4QjAnLCAnXHg4NycsICdceEU1JywgJ1x4QjAnLCAnXHhCMScsICdceEU1JywgJ1x4QjknLCAnXHhCNCcsICdceEU1JywgJ1x4QkUnLCAnXHg5NycsICdceEU2JywgJ1x4ODMnLCAnXHg4NScsICdceEU2JywgJ1x4OUMnLCAnXHg4MCcsICAvKiDlpbnlsIblsIflsLHlubTlvpfmg4XmnIAgKi8KKyAgICAnXHhFNicsICdceEEwJywgJ1x4QjcnLCAnXHhFNicsICdceEE4JywgJ1x4QTMnLCAnXHhFNycsICdceDkwJywgJ1x4ODYnLCAnXHhFOCcsICdceDgzJywgJ1x4QkQnLCAnXHhFOCcsICdceEFBJywgJ1x4QUEnLCAnXHhFOCcsICdceEFGJywgJ1x4QjQnLCAnXHhFOCcsICdceEJGJywgJ1x4OTknLCAnXHhFOScsICdceDgwJywgJ1x4OTknLCAgLyog5qC35qij55CG6IO96Kqq6K+06L+Z6YCZICovCisgICAgJ1x4RTknLCAnXHg4MCcsICdceDlBJywgJ3wnLCAgLyog6YCaIHwgKi8KKyAgICAnXHhFNScsICdceDhEJywgJ1x4QjMnLCAnXHhFNScsICdceDkwJywgJ1x4OTcnLCAnXHhFNScsICdceDkwJywgJ1x4QTcnLCAnXHhFNScsICdceDkwJywgJ1x4QUMnLCAnXHhFNScsICdceDkxJywgJ1x4QTInLCAnXHhFNScsICdceDkzJywgJ1x4ODEnLCAnXHhFNScsICdceDkzJywgJ1x4OEQnLCAnXHhFNScsICdceDk3JywgJ1x4OEUnLCAgLyog5Y2z5ZCX5ZCn5ZCs5ZGi5ZOB5ZON5ZeOICovCisgICAgJ1x4RTUnLCAnXHhCOCcsICdceDg4JywgJ1x4RTUnLCAnXHhCOCcsICdceEFCJywgJ1x4RTYnLCAnXHg5NCcsICdceEI2JywgJ1x4RTYnLCAnXHg5NicsICdceEFEJywgJ1x4RTYnLCAnXHg5NicsICdceEI3JywgJ1x4RTYnLCAnXHg5OCcsICdceDhFJywgJ1x4RTcnLCAnXHg5QycsICdceEJDJywgJ1x4RTknLCAnXHg5NicsICdceDkzJywgIC8qIOW4iOW4q+aUtuaWreaWt+aYjuecvOmWkyAqLworICAgICdceEU5JywgJ1x4OTcnLCAnXHhCNCcsICdceEU5JywgJ1x4OTknLCAnXHg4NScsICdceEU5JywgJ1x4OTknLCAnXHg4OCcsICdceEU5JywgJ1x4OTknLCAnXHg5MCcsICdceEU5JywgJ1x4OTknLCAnXHhBNCcsICdceEU5JywgJ1x4OTknLCAnXHhCMycsICdceEU5JywgJ1x4OUEnLCAnXHg4RicsICdceEU5JywgJ1x4OUEnLCAnXHg5QicsICAvKiDpl7TpmYXpmYjpmZDpmaTpmbPpmo/pmpsgKi8KKyAgICAnXHhFOScsICdceDlBJywgJ1x4QTgnLCAgLyog6ZqoICovCisgICAgJ1wwJywKKyAgICAnXHhFNCcsICdceEJBJywgJ1x4OEInLCAnXHhFNScsICdceDg5JywgJ1x4OEQnLCAnXHhFNScsICdceEFEJywgJ1x4QjgnLCAnXHhFNScsICdceEIwJywgJ1x4ODYnLCAnXHhFNScsICdceEIwJywgJ1x4ODcnLCAnXHhFNicsICdceDgzJywgJ1x4ODUnLCAnXHhFNicsICdceDgzJywgJ1x4QjMnLCAnXHhFNicsICdceDg4JywgJ1x4OTYnLCAgLyog5LqL5YmN5a245bCG5bCH5oOF5oOz5oiWICovCisgICAgJ1x4RTYnLCAnXHg5NCcsICdceEJGJywgJ1x4RTYnLCAnXHg5NicsICdceEFGJywgJ1x4RTYnLCAnXHg5NicsICdceEIwJywgJ1x4RTYnLCAnXHhBMCcsICdceEI3JywgJ1x4RTYnLCAnXHhBOCcsICdceEEzJywgJ1x4RTYnLCAnXHhCMCcsICdceDkxJywgJ1x4RTYnLCAnXHhCMicsICdceDkyJywgJ1x4RTYnLCAnXHhCMicsICdceEExJywgIC8qIOaUv+aWr+aWsOagt+aoo+awkeaykuayoSAqLworICAgICdceEU3JywgJ1x4ODQnLCAnXHhCNicsICdceEU3JywgJ1x4ODknLCAnXHhCOScsICdceEU3JywgJ1x4OEUnLCAnXHhCMCcsICdceEU3JywgJ1x4OEYnLCAnXHhCRScsICdceEU3JywgJ1x4OTAnLCAnXHg4MycsICdceEU3JywgJ1x4QUMnLCAnXHhBQycsICdceEU3JywgJ1x4QjYnLCAnXHg5MycsICdceEU4JywgJ1x4QjAnLCAnXHg4MScsICAvKiDnhLbnibnnjrDnj77nkIPnrKzntpPosIEgKi8KKyAgICAnXHhFOCcsICdceEI1JywgJ1x4QjcnLCAnfCcsICAvKiDotbcgfCAqLworICAgICdceEU0JywgJ1x4QkUnLCAnXHg4QicsICdceEU1JywgJ1x4ODgnLCAnXHhBNScsICdceEU1JywgJ1x4ODgnLCAnXHhBQicsICdceEU1JywgJ1x4ODgnLCAnXHhCNicsICdceEU1JywgJ1x4OEEnLCAnXHhBOCcsICdceEU1JywgJ1x4OEInLCAnXHg5NScsICdceEU1JywgJ1x4OTAnLCAnXHg5NycsICdceEU1JywgJ1x4OTcnLCAnXHg4RScsICAvKiDkvovliKXliKvliLbliqjli5XlkJfll44gKi8KKyAgICAnXHhFNScsICdceEEyJywgJ1x4OUUnLCAnXHhFNicsICdceDhDJywgJ1x4ODcnLCAnXHhFNicsICdceDk4JywgJ1x4OEUnLCAnXHhFNicsICdceDlDJywgJ1x4OUQnLCAnXHhFNicsICdceDlDJywgJ1x4OUYnLCAnXHhFNicsICdceDlFJywgJ1x4ODQnLCAnXHhFNycsICdceDg5JywgJ1x4QTknLCAnXHhFNycsICdceEExJywgJ1x4QUUnLCAgLyog5aKe5oyH5piO5pyd5pyf5p6E54mp56GuICovCisgICAgJ1x4RTcnLCAnXHhBNycsICdceDhEJywgJ1x4RTgnLCAnXHhBQScsICdceEJGJywgJ1x4RTgnLCAnXHhCMCcsICdceDgzJywgJ1x4RTgnLCAnXHhCMicsICdceEJCJywgJ1x4RTgnLCAnXHhCNCcsICdceEI5JywgJ1x4RTknLCAnXHg4MicsICdceEEzJywgJ1x4RTknLCAnXHg4MycsICdceEJEJywgJ1x4RTknLCAnXHg5NicsICdceDkzJywgIC8qIOenjeiqv+iwg+iyu+i0uemCo+mDvemWkyAqLworICAgICdceEU5JywgJ1x4OTcnLCAnXHhCNCcsICAvKiDpl7QgKi8KKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVCAqLworI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLICAgICAgICAgICAgICAgICovCisgICAgJ1wwJywKKworICB9OworCisKKyAgLyogc3RyaW5nc2V0cyBhcmUgc3BlY2lmaWMgdG8gc3R5bGVzICovCisgIEZUX0xPQ0FMX0FSUkFZX0RFRiggQUZfQmx1ZV9TdHJpbmdSZWMgKQorICBhZl9ibHVlX3N0cmluZ3NldHNbXSA9CisgIHsKKyAgICAvKiAqLworICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUCwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4sICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRSwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTEwsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfQVNDRU5ERVIsICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSworICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0pLX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUCisgICAgeyBBRl9CTFVFX1NUUklOR19DSktfTEVGVCwgICBBRl9CTFVFX1BST1BFUlRZX0NKS19IT1JJWiAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSktfUklHSFQsICBBRl9CTFVFX1BST1BFUlRZX0NKS19IT1JJWiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0NKS19SSUdIVCAgIH0sCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQgKi8KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKSyAgICAgICAgICAgICAgICAqLworCisgIH07CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmNpbiBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDNhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmNpbgpAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmJsdWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJhZnR5cGVzLmgiCisKKworICBGVF9MT0NBTF9BUlJBWV9ERUYoIGNoYXIgKQorICBhZl9ibHVlX3N0cmluZ3NbXSA9CisgIHsKKyAgICAvKiAqLworQEFGX0JMVUVfU1RSSU5HU19BUlJBWUAKKyAgfTsKKworCisgIC8qIHN0cmluZ3NldHMgYXJlIHNwZWNpZmljIHRvIHN0eWxlcyAqLworICBGVF9MT0NBTF9BUlJBWV9ERUYoIEFGX0JsdWVfU3RyaW5nUmVjICkKKyAgYWZfYmx1ZV9zdHJpbmdzZXRzW10gPQorICB7CisgICAgLyogKi8KK0BBRl9CTFVFX1NUUklOR1NFVFNfQVJSQVlACisgIH07CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmRhdCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTY4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmRhdApAQCAtMCwwICsxLDM3NCBAQAorLy8gIGFmYmx1ZS5kYXQKKy8vCisvLyAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MuCisvLworLy8gIENvcHlyaWdodCAyMDEzLTIwMTUgYnkKKy8vICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisvLworLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKy8vICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorLy8gIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorLy8gIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorLy8gIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKworCisvLyBUaGlzIGZpbGUgY29udGFpbnMgZGF0YSBzcGVjaWZpYyB0byBibHVlIHpvbmVzLiAgSXQgZ2V0cyBwcm9jZXNzZWQgYnkKKy8vIGEgc2NyaXB0IHRvIHNpbXVsYXRlIGBqYWdnZWQgYXJyYXlzJywgd2l0aCBlbnVtZXJhdGlvbiB2YWx1ZXMgaG9sZGluZworLy8gb2Zmc2V0cyBpbnRvIHRoZSBhcnJheXMuCisvLworLy8gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyByYXRoZXIgc2ltcGxlOiAgQSBzZWN0aW9uIHN0YXJ0cyB3aXRoIHRocmVlCisvLyBsYWJlbHMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UgYW5kIGZvbGxvd2VkIGJ5IGEgY29sb24gKGV2ZXJ5dGhpbmcgaW4gYQorLy8gc2luZ2xlIGxpbmUpOyB0aGUgZmlyc3QgbGFiZWwgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGVudW1lcmF0aW9uIHRlbXBsYXRlLAorLy8gdGhlIHNlY29uZCB0aGUgbmFtZSBvZiB0aGUgYXJyYXkgdGVtcGxhdGUsIGFuZCB0aGUgdGhpcmQgdGhlIG5hbWUgb2YgdGhlCisvLyBgbWF4aW11bScgdGVtcGxhdGUsIGhvbGRpbmcgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgYXJyYXkgZWxlbWVudC4gIFRoZQorLy8gc2NyaXB0IHRoZW4gZmlsbHMgdGhlIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGVzIChpbmRpY2F0ZWQgYnkgYEAnCisvLyBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgbmFtZSkuCisvLworLy8gQSBzZWN0aW9uIGNvbnRhaW5zIG9uZSBvciBtb3JlIGRhdGEgcmVjb3Jkcy4gIEVhY2ggZGF0YSByZWNvcmQgY29uc2lzdHMKKy8vIG9mIHR3byBvciBtb3JlIGxpbmVzLiAgVGhlIGZpcnN0IGxpbmUgaG9sZHMgdGhlIGVudW1lcmF0aW9uIG5hbWUsIGFuZCB0aGUKKy8vIHJlbWFpbmluZyBsaW5lcyB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBkYXRhLgorLy8KKy8vIFRoZXJlIGFyZSB0d28gcG9zc2libGUgcmVwcmVzZW50YXRpb25zIGZvciBhcnJheSBkYXRhLgorLy8KKy8vIC0gQSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpbiBVVEYtOCBlbmNvZGluZyBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzLAorLy8gICB1c2luZyBDIHN5bnRheC4gIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdHJpbmcgcGVyIGxpbmUsIHRodXMgdGhlCisvLyAgIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZG91YmxlIHF1b3RlIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBsYXN0IGNoYXJhY3RlcgorLy8gICBpbiB0aGUgbGluZSwgcmVzcGVjdGl2ZWx5LCBpZ25vcmluZyB3aGl0ZXNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisvLyAgIHN0cmluZy4gIFNwYWNlIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBzdHJpbmcgYXJlIGlnbm9yZWQgdG9vLiAgSWYgdGhlcmUKKy8vICAgYXJlIG11bHRpcGxlIHN0cmluZ3MgKGluIG11bHRpcGxlIGxpbmVzKSwgdGhleSBhcmUgY29uY2F0ZW5hdGVkIHRvIGEKKy8vICAgc2luZ2xlIHN0cmluZy4gIEluIHRoZSBvdXRwdXQsIGEgc3RyaW5nIGdldHMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YKKy8vICAgc2luZ2xlcyBieXRlcywgZm9sbG93ZWQgYnkgYSB6ZXJvIGJ5dGUuICBUaGUgZW51bWVyYXRpb24gdmFsdWVzIHNpbXBseQorLy8gICBob2xkIGJ5dGUgb2Zmc2V0cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5ncy4KKy8vCisvLyAtIERhdGEgYmxvY2tzIGVuY2xvc2VkIGluIGJhbGFuY2VkIGJyYWNlcywgd2hpY2ggZ2V0IGNvcGllZCB2ZXJiYXRpbSBhbmQKKy8vICAgd2hpY2ggY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMuICBUaGUgb3BlbmluZyBicmFjZSBvZiBhIGJsb2NrIG11c3QgYmUKKy8vICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgKGlnbm9yaW5nIHdoaXRlc3BhY2UpLCBhbmQgdGhlIGNsb3NpbmcKKy8vICAgYnJhY2UgdGhlIGxhc3QgKGlnbm9yaW5nIHdoaXRlc3BhY2UgYWxzbykuICBUaGUgc2NyaXB0IGFwcGVuZHMgYSBjb21tYQorLy8gICBjaGFyYWN0ZXIgYWZ0ZXIgZWFjaCBibG9jayBhbmQgY291bnRzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIHNldCB0aGUKKy8vICAgZW51bWVyYXRpb24gdmFsdWVzLgorLy8KKy8vIEEgc2VjdGlvbiBjYW4gY29udGFpbiBlaXRoZXIgc3RyaW5ncyBvbmx5IG9yIGRhdGEgYmxvY2tzIG9ubHkuCisvLworLy8gQSBjb21tZW50IGxpbmUgc3RhcnRzIHdpdGggYC8vJzsgaXQgZ2V0cyByZW1vdmVkLiAgQSBwcmVwcm9jZXNzb3IKKy8vIGRpcmVjdGl2ZSBsaW5lICh1c2luZyB0aGUgc3RhbmRhcmQgc3ludGF4IG9mIGBjcHAnKSBzdGFydHMgd2l0aCBgIycgYW5kCisvLyBnZXRzIGNvcGllZCB2ZXJiYXRpbSB0byBib3RoIHRoZSBlbnVtZXJhdGlvbiBhbmQgdGhlIGFycmF5LiAgV2hpdGVzcGFjZQorLy8gb3V0c2lkZSBvZiBhIHN0cmluZyBpcyBpbnNpZ25pZmljYW50LgorLy8KKy8vIFByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBpZ25vcmVkIHdoaWxlIHRoZSBzY3JpcHQgY29tcHV0ZXMgbWF4aW11bQorLy8gdmFsdWVzOyB0aGlzIGVzc2VudGlhbGx5IG1lYW5zIHRoYXQgdGhlIG1heGltdW0gdmFsdWVzIGNhbiBlYXNpbHkgYmUgdG9vCisvLyBsYXJnZS4gIEdpdmVuIHRoYXQgdGhlIHB1cnBvc2Ugb2YgdGhvc2UgdmFsdWVzIGlzIHRvIGNyZWF0ZSBsb2NhbAorLy8gZml4ZWQtc2l6ZSBhcnJheXMgYXQgY29tcGlsZSB0aW1lIGZvciBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgdGhlIGJsdWUgem9uZQorLy8gZGF0YSwgdGhpcyBpc24ndCBhIHByb2JsZW0uICBOb3RlIHRoZSB0aGUgZmluYWwgemVybyBieXRlIG9mIGEgc3RyaW5nIGlzCisvLyBub3QgY291bnRlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3VudCBob2xkcyB0aGUgbnVtYmVyIG9mIFVURi04IGVuY29kZWQKKy8vIGNoYXJhY3RlcnMsIG5vdCBieXRlcy4KKworCisvLyBUaGUgYmx1ZSB6b25lIHN0cmluZyBkYXRhLCB0byBiZSB1c2VkIGluIHRoZSBibHVlIHN0cmluZ3NldHMgYmVsb3cuCisKK0FGX0JMVUVfU1RSSU5HX0VOVU0gQUZfQkxVRV9TVFJJTkdTX0FSUkFZIEFGX0JMVUVfU1RSSU5HX01BWF9MRU46CisKKyAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUAorICAgICLYpyDYpSDZhCDZgyDYtyDYuCIKKyAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4KKyAgICAi2Kog2Ksg2Lcg2Lgg2YMiCisKKyAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AKKyAgICAi0JHQktCV0J/Ql9Ce0KHQrSIKKyAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9CT1RUT00KKyAgICAi0JHQktCV0KjQl9Ce0KHQrSIKKyAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwKKyAgICAi0YXQv9C90YjQtdC30L7RgSIKKyAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTExfREVTQ0VOREVSCisgICAgItGA0YPRhCIKKworICAvLyB3ZSBzZXBhcmF0ZSB0aGUgbGV0dGVycyB3aXRoIHNwYWNlcyB0byBhdm9pZCBsaWdhdHVyZXM7CisgIC8vIHRoaXMgaXMganVzdCBmb3IgY29udmVuaWVuY2UgdG8gc2ltcGxpZnkgcmVhZGluZworICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JBU0UKKyAgICAi4KSVIOCkriDgpIUg4KSGIOCkpSDgpKcg4KStIOCktiIKKyAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9UT1AKKyAgICAi4KSIIOCkkCDgpJMg4KSUIOCkvyDgpYAg4KWLIOCljCIKKyAgLy8gbm90ZSB0aGF0IHNvbWUgZm9udHMgaGF2ZSBleHRyZW1lIHZhcmlhdGlvbiBpbiB0aGUgaGVpZ2h0IG9mIHRoZQorICAvLyByb3VuZCBoZWFkIGVsZW1lbnRzOyBmb3IgdGhpcyByZWFzb24gd2UgYWxzbyBkZWZpbmUgdGhlIGBiYXNlJworICAvLyBibHVlIHpvbmUsIHdoaWNoIG11c3QgYmUgYWx3YXlzIHByZXNlbnQKKyAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9IRUFECisgICAgIuCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYiCisgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NCisgICAgIuClgSDgpYMiCisKKyAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AKKyAgICAizpPOks6VzpbOmM6fzqkiCisgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NCisgICAgIs6SzpTOls6ezpjOnyIKKyAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AKKyAgICAizrLOuM60zrbOu86+IgorICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTAorICAgICLOsc61zrnOv8+Az4PPhM+JIgorICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIKKyAgICAizrLOs863zrzPgc+Gz4fPiCIKKworICBBRl9CTFVFX1NUUklOR19IRUJSRVdfVE9QCisgICAgIteR15PXlNeX15rXm9ed16EiCisgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00KKyAgICAi15HXmNeb153XodemIgorICBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSCisgICAgIten15rXn9ej16UiCisKKyAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9UT1AKKyAgICAiVEhFWk9DUVMiCisgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfQk9UVE9NCisgICAgIkhFWkxPQ1VTIgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9GX1RPUAorICAgICJmaWprZGJoIgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTAorICAgICJ4enJvZXNjIgorICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIKKyAgICAicHFnankiCisKKyAgLy8gd2Ugc2VwYXJhdGUgdGhlIGxldHRlcnMgd2l0aCBzcGFjZXMgdG8gYXZvaWQgbGlnYXR1cmVzOworICAvLyB0aGlzIGlzIGp1c3QgZm9yIGNvbnZlbmllbmNlIHRvIHNpbXBsaWZ5IHJlYWRpbmcKKyAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUAorICAgICLgsIcg4LCMIOCwmSDgsJ4g4LCjIOCwsSDgsa8iCisgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00KKyAgICAi4LCFIOCwlSDgsJog4LCwIOCwvSDgsagg4LGsIgorCisgIEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QCisgICAgIuC4miDguYAg4LmBIOC4rSDguIEg4LiyIgorICBBRl9CTFVFX1NUUklOR19USEFJX0JPVFRPTQorICAgICLguJog4LibIOC4qSDguK8g4LitIOC4oiDguK4iCisgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQVNDRU5ERVIKKyAgICAi4LibIOC4nSDguJ8iCisgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIKKyAgICAi4LmCIOC5gyDguYQiCisgIEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSCisgICAgIuC4jiDguI8g4LikIOC4piIKKyAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIKKyAgICAi4LiNIOC4kCIKKyAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AKKyAgICAi4LmQIOC5kSDguZMiCisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisKKyAgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUAorICAgICLku5bku6zkvaDkvoblgJHliLDlkozlnLAiCisgICAgIuWvueWwjeWwseW4reaIkeaXtuaZguacgyIKKyAgICAi5p2l54K66IO96Iiw6Kqq6K+06L+Z6YCZIgorICAgICLpvYogfCIKKyAgICAi5Yab5ZCM5bey5oS/5pei5pif5piv5pmvIgorICAgICLmsJHnhafnjrDnj77nkIbnlKjnva7opoEiCisgICAgIui7jemCo+mFjemHjOmWi+mbt+mcsumdoiIKKyAgICAi6aG+IgorICBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NCisgICAgIuS4quS4uuS6uuS7luS7peS7rOS9oOS+hiIKKyAgICAi5YCL5YCR5Yiw5ZKM5aSn5a+55bCN5bCxIgorICAgICLmiJHml7bmmYLmnInmnaXngrropoHoqqoiCisgICAgIuivtCB8IgorICAgICLkuLvkupvlm6DlroPmg7PmhI/nkIbnlJ8iCisgICAgIueVtueci+edgOe9ruiAheiHquiRl+ijoSIKKyAgICAi6L+H6L+Y6L+b6YCy6YGO6YGT6YKE6YeMIgorICAgICLpnaIiCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVAorCisgIEFGX0JMVUVfU1RSSU5HX0NKS19MRUZUCisgICAgIuS6m+S7rOS9oOS+huWAkeWIsOWSjOWcsCIKKyAgICAi5aW55bCG5bCH5bCx5bm05b6X5oOF5pyAIgorICAgICLmoLfmqKPnkIbog73oqqror7Tov5npgJkiCisgICAgIumAmiB8IgorICAgICLljbPlkJflkKflkKzlkaLlk4Hlk43ll44iCisgICAgIuW4iOW4q+aUtuaWreaWt+aYjuecvOmWkyIKKyAgICAi6Ze06ZmF6ZmI6ZmQ6Zmk6Zmz6ZqP6ZqbIgorICAgICLpmqgiCisgIEFGX0JMVUVfU1RSSU5HX0NKS19SSUdIVAorICAgICLkuovliY3lrbjlsIblsIfmg4Xmg7PmiJYiCisgICAgIuaUv+aWr+aWsOagt+aoo+awkeaykuayoSIKKyAgICAi54S254m5546w54++55CD56ys57aT6LCBIgorICAgICLotbcgfCIKKyAgICAi5L6L5Yil5Yir5Yi25Yqo5YuV5ZCX5ZeOIgorICAgICLlop7mjIfmmI7mnJ3mnJ/mnoTniannoa4iCisgICAgIuenjeiqv+iwg+iyu+i0uemCo+mDvemWkyIKKyAgICAi6Ze0IgorCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQgKi8KKworI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLICAgICAgICAgICAgICAgICovCisKKworLy8gVGhlIGJsdWUgem9uZSBzdHJpbmdzZXRzLCBhcyB1c2VkIGluIHRoZSBzY3JpcHQgc3R5bGVzLCBjZi4gYGFmc3R5bGVzLmgnLgorLy8KKy8vIFRoZSBBRl9CTFVFX1BST1BFUlRZX1hYWCBmbGFncyBhcmUgZGVmaW5lZCBpbiBgYWZibHVlLmgnOyBoZXJlIHNvbWUKKy8vIGV4cGxhbmF0aW9ucy4KKy8vCisvLyBBIGJsdWUgem9uZSBpbiBnZW5lcmFsIGlzIGRlZmluZWQgYnkgYSByZWZlcmVuY2UgYW5kIGFuIG92ZXJzaG9vdCBsaW5lLgorLy8gRHVyaW5nIHRoZSBoaW50aW5nIHByb2Nlc3MsIGFsbCBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRob3NlIHR3byBsaW5lcworLy8gYXJlIHNldCBlcXVhbCB0byB0aGUgcmVmZXJlbmNlIHZhbHVlLCBwcm92aWRlZCB0aGF0IHRoZSBibHVlIHpvbmUgaXMgbm90CisvLyB3aWRlciB0aGFuIDAuNzUgcGl4ZWxzIChvdGhlcndpc2UgdGhlIGJsdWUgem9uZSBnZXRzIGlnbm9yZWQpLiAgQWxsCisvLyBlbnRyaWVzIG11c3QgaGF2ZSBgQUZfQkxVRV9TVFJJTkdfTUFYJyBhcyB0aGUgZmluYWwgbGluZS4KKy8vCisvLyBEdXJpbmcgdGhlIGdseXBoIGFuYWx5c2lzLCBlZGdlcyBhcmUgc29ydGVkIGZyb20gYm90dG9tIHRvIHRvcCwgYW5kIHRoZW4KKy8vIHNlcXVlbnRpYWxseSBjaGVja2VkLCBlZGdlIGJ5IGVkZ2UsIGFnYWluc3QgdGhlIGJsdWUgem9uZXMgaW4gdGhlIG9yZGVyCisvLyBnaXZlbiBiZWxvdy4KKy8vCisvLworLy8gbGF0aW4gYXV0by1oaW50ZXIKKy8vIC0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gQ2hhcmFjdGVycyBpbiBhIGJsdWUgc3RyaW5nIGFyZSBhdXRvbWF0aWNhbGx5IGNsYXNzaWZpZWQgYXMgaGF2aW5nIGEgZmxhdAorLy8gKHJlZmVyZW5jZSkgb3IgYSByb3VuZCAob3ZlcnNob290KSBleHRyZW11bS4gIFRoZSBibHVlIHpvbmUgaXMgdGhlbiBzZXQKKy8vIHVwIGJ5IHRoZSBtZWFuIHZhbHVlcyBvZiBhbGwgZmxhdCBleHRyZW1hIGFuZCBhbGwgcm91bmQgZXh0cmVtYSwKKy8vIHJlc3BlY3RpdmVseS4gIE9ubHkgaG9yaXpvbnRhbCBibHVlIHpvbmVzIChpLmUuLCBhZGp1c3RpbmcgdmVydGljYWwKKy8vIGNvb3JkaW5hdGUgdmFsdWVzKSBhcmUgc3VwcG9ydGVkLgorLy8KKy8vIEZvciB0aGUgbGF0aW4gYXV0by1oaW50ZXIsIHRoZSBvdmVyc2hvb3Qgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoZQorLy8gcmVmZXJlbmNlIGZvciB0b3Agem9uZXMsIGFuZCB2aWNlIHZlcnNhIGZvciBib3R0b20gem9uZXMuCisvLworLy8gICBMQVRJTl9UT1AKKy8vICAgICBUYWtlIHRoZSBtYXhpbXVtIGZsYXQgYW5kIHJvdW5kIGNvb3JkaW5hdGUgdmFsdWVzIG9mIHRoZSBibHVlIHN0cmluZworLy8gICAgIGNoYXJhY3RlcnMgZm9yIGNvbXB1dGluZyB0aGUgYmx1ZSB6b25lJ3MgcmVmZXJlbmNlIGFuZCBvdmVyc2hvb3QKKy8vICAgICB2YWx1ZXMuCisvLworLy8gICAgIElmIG5vdCBzZXQsIHRha2UgdGhlIG1pbmltdW0gdmFsdWVzLgorLy8KKy8vICAgTEFUSU5fTkVVVFJBTAorLy8gICAgIElnbm9yZSByb3VuZCBleHRyZW1hIGFuZCBkZWZpbmUgdGhlIGJsdWUgem9uZSB3aXRoIGZsYXQgdmFsdWVzIG9ubHkuCisvLyAgICAgQm90aCB0b3AgYW5kIGJvdHRvbSBvZiBjb250b3VycyBjYW4gbWF0Y2guICBUaGlzIGlzIHVzZWZ1bCBmb3IKKy8vICAgICBzY3JpcHRzIGxpa2UgRGV2YW5hZ2FyaSB3aGVyZSB2b3dlbCBzaWducyBhdHRhY2ggdG8gdGhlIGJhc2UKKy8vICAgICBjaGFyYWN0ZXIgYW5kIGFyZSBpbXBsZW1lbnRlZCBhcyBjb21wb25lbnRzIG9mIGNvbXBvc2l0ZSBnbHlwaHMuCisvLworLy8gICAgIElmIG5vdCBzZXQsIGJvdGggcm91bmQgYW5kIGZsYXQgZXh0cmVtYSBhcmUgdGFrZW4gaW50byBhY2NvdW50LgorLy8gICAgIEFkZGl0aW9uYWxseSwgb25seSB0aGUgdG9wIG9yIHRoZSBib3R0b20gb2YgYSBjb250b3VyIGNhbiBtYXRjaCwKKy8vICAgICBkZXBlbmRpbmcgb24gdGhlIExBVElOX1RPUCBmbGFnLgorLy8KKy8vICAgICBOZXV0cmFsIGJsdWUgem9uZXMgc2hvdWxkIGFsd2F5cyBmb2xsb3cgbm9uLW5ldXRyYWwgYmx1ZSB6b25lcy4KKy8vCisvLyAgIExBVElOX1hfSEVJR0hUCisvLyAgICAgU2NhbGUgYWxsIGdseXBocyB2ZXJ0aWNhbGx5IGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgc2NyaXB0IHRvIG1ha2UgdGhlCisvLyAgICAgcmVmZXJlbmNlIGxpbmUgb2YgdGhpcyBibHVlIHpvbmUgYWxpZ24gb24gdGhlIGdyaWQuICBUaGUgc2NhbGluZworLy8gICAgIHRha2VzIHBsYWNlIGJlZm9yZSBhbGwgb3RoZXIgYmx1ZSB6b25lcyBnZXQgYWxpZ25lZCB0byB0aGUgZ3JpZC4KKy8vICAgICBPbmx5IG9uZSBibHVlIGNoYXJhY3RlciBzdHJpbmcgb2YgYSBzY3JpcHQgc3R5bGUgY2FuIGhhdmUgdGhpcyBmbGFnLgorLy8KKy8vICAgTEFUSU5fTE9ORworLy8gICAgIEFwcGx5IGFuIGFkZGl0aW9uYWwgY29uc3RyYWludCBmb3IgYmx1ZSB6b25lIHZhbHVlczogRG9uJ3QKKy8vICAgICBuZWNlc3NhcmlseSB1c2UgdGhlIGV4dHJlbXVtIGFzLWlzIGJ1dCBhIHNlZ21lbnQgb2YgdGhlIHRvcG1vc3QgKG9yCisvLyAgICAgYm90dG9tbW9zdCkgY29udG91ciB0aGF0IGlzIGxvbmdlciB0aGFuIGEgaGV1cmlzdGljIHRocmVzaG9sZCwgYW5kCisvLyAgICAgd2hpY2ggaXMgbm90IHRvbyBmYXIgYXdheSB2ZXJ0aWNhbGx5IGZyb20gdGhlIHJlYWwgZXh0cmVtdW0uICBUaGlzCisvLyAgICAgZW5zdXJlcyB0aGF0IHNtYWxsIGJ1bXBzIGluIHRoZSBvdXRsaW5lIGFyZSBpZ25vcmVkIChmb3IgZXhhbXBsZSwgdGhlCisvLyAgICAgYHZlcnRpY2FsIHNlcmlmcycgZm91bmQgaW4gbWFueSBIZWJyZXcgZ2x5cGggZGVzaWducykuCisvLworLy8gICAgIFRoZSBzZWdtZW50IG11c3QgYmUgYXQgbGVhc3QgRU0vMjUgZm9udCB1bml0cyBsb25nLCBhbmQgdGhlIGRpc3RhbmNlCisvLyAgICAgdG8gdGhlIGV4dHJlbXVtIG11c3QgYmUgc21hbGxlciB0aGFuIEVNLzQuCisvLworLy8KKy8vIGNqayBhdXRvLWhpbnRlcgorLy8gLS0tLS0tLS0tLS0tLS0tCisvLworLy8gQ2hhcmFjdGVycyBpbiBhIGJsdWUgc3RyaW5nIGFyZSAqbm90KiBhdXRvbWF0aWNhbGx5IGNsYXNzaWZpZWQuICBJbnN0ZWFkLAorLy8gZmlyc3QgY29tZSB0aGUgY2hhcmFjdGVycyB1c2VkIGZvciB0aGUgb3ZlcnNob290IHZhbHVlLCB0aGVuIHRoZQorLy8gY2hhcmFjdGVyIGB8JywgdGhlbiB0aGUgY2hhcmFjdGVycyB1c2VkIGZvciB0aGUgcmVmZXJlbmNlIHZhbHVlLiAgVGhlCisvLyBibHVlIHpvbmUgaXMgdGhlbiBzZXQgdXAgYnkgdGhlIG1lYW4gdmFsdWVzIG9mIGFsbCByZWZlcmVuY2UgdmFsdWVzIGFuZAorLy8gYWxsIG92ZXJzaG9vdCB2YWx1ZXMsIHJlc3BlY3RpdmVseS4gIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYmx1ZQorLy8gem9uZXMgKGkuZS4sIGFkanVzdGluZyB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBjb29yZGluYXRlIHZhbHVlcywKKy8vIHJlc3BlY3RpdmVseSkgYXJlIHN1cHBvcnRlZC4KKy8vCisvLyBGb3IgdGhlIGNqayBhdXRvLWhpbnRlciwgdGhlIG92ZXJzaG9vdCBzaG91bGQgYmUgc21hbGxlciB0aGFuIHRoZQorLy8gcmVmZXJlbmNlIGZvciB0b3Agem9uZXMsIGFuZCB2aWNlIHZlcnNhIGZvciBib3R0b20gem9uZXMuCisvLworLy8gICBDSktfVE9QCisvLyAgICAgVGFrZSB0aGUgbWF4aW11bSBmbGF0IGFuZCByb3VuZCBjb29yZGluYXRlIHZhbHVlcyBvZiB0aGUgYmx1ZSBzdHJpbmcKKy8vICAgICBjaGFyYWN0ZXJzLiAgSWYgbm90IHNldCwgdGFrZSB0aGUgbWluaW11bSB2YWx1ZXMuCisvLworLy8gICBDSktfUklHSFQKKy8vICAgICBBIHN5bm9ueW0gZm9yIENKS19UT1AuICBJZiBDSktfSE9SSVogaXMgc2V0LCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoZQorLy8gICAgIHJpZ2h0IGJsdWUgem9uZSwgdGFraW5nIGhvcml6b250YWwgbWF4aW11bSB2YWx1ZXMuCisvLworLy8gICBDSktfSE9SSVoKKy8vICAgICBEZWZpbmUgYSBibHVlIHpvbmUgZm9yIGhvcml6b250YWwgaGludGluZyAoaS5lLiwgdmVydGljYWwgYmx1ZQorLy8gICAgIHpvbmVzKS4gIElmIG5vdCBzZXQsIHRoaXMgaXMgYSBibHVlIHpvbmUgZm9yIHZlcnRpY2FsIGhpbnRpbmcuCisKKworQUZfQkxVRV9TVFJJTkdTRVRfRU5VTSBBRl9CTFVFX1NUUklOR1NFVFNfQVJSQVkgQUZfQkxVRV9TVFJJTkdTRVRfTUFYX0xFTjoKKworICBBRl9CTFVFX1NUUklOR1NFVF9BUkFCCisgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QLCAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19KT0lOLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfQ1lSTAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwsICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBCisgICAgeyBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFLCAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JBU0UsICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfR1JFSworICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTEwsICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSCisgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9MT05HICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVE4KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMLCAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTCwgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUkKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00sICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19USEFJX0FTQ0VOREVSLCAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9ERVNDRU5ERVIsICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfSEFOSQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0pLX0xFRlQsICAgQUZfQkxVRV9QUk9QRVJUWV9DSktfSE9SSVogICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSktfUklHSFQsICBBRl9CTFVFX1BST1BFUlRZX0NKS19IT1JJWiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0NKS19SSUdIVCAgIH0KKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVCAqLworICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKSyAgICAgICAgICAgICAgICAqLworCisKKy8vIEVORApkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYmx1ZS5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYmx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTMzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZibHVlLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIFBlcmwgc2NyaXB0IGBhZmJsdWUucGwnLCAqLworLyogdXNpbmcgZGF0YSBmcm9tIGZpbGUgYGFmYmx1ZS5kYXQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmYmx1ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGQkxVRV9IX18KKyNkZWZpbmUgX19BRkJMVUVfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKiBhbiBhdXhpbGlhcnkgbWFjcm8gdG8gZGVjb2RlIGEgVVRGLTggY2hhcmFjdGVyIC0tIHNpbmNlIHdlIG9ubHkgdXNlICovCisgIC8qIGhhcmQtY29kZWQsIHNlbGYtY29udmVydGVkIGRhdGEsIG5vIGVycm9yIGNoZWNraW5nIGlzIHBlcmZvcm1lZCAgICAgKi8KKyNkZWZpbmUgR0VUX1VURjhfQ0hBUiggY2gsIHAgKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYgKCBjaCA+PSAweDgwICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfVUludCAgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCBjaCA8IDB4RTAgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgbGVuID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjaCAmPSAweDFGOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVsc2UgaWYgKCBjaCA8IDB4RjAgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGxlbiA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgY2ggJj0gMHgwRjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBsZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGNoICY9IDB4MDc7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKCA7IGxlbiA+IDA7IGxlbi0tICkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgY2ggPSAoIGNoIDw8IDYgKSB8ICggKnArKyAmIDB4M0YgKTsgXAorICAgICAgICAgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgQiBMIFUgRSAgIFMgVCBSIEkgTiBHIFMgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIEF0IHRoZSBib3R0b21tb3N0IGxldmVsLCB3ZSBkZWZpbmUgc3RyaW5ncyBmb3IgZmluZGluZyBibHVlIHpvbmVzLiAqLworCisKKyNkZWZpbmUgQUZfQkxVRV9TVFJJTkdfTUFYX0xFTiAgNTEKKworICAvKiBUaGUgQUZfQmx1ZV9TdHJpbmcgZW51bWVyYXRpb24gdmFsdWVzIGFyZSBvZmZzZXRzIGludG8gdGhlICovCisgIC8qIGBhZl9ibHVlX3N0cmluZ3MnIGFycmF5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB0eXBlZGVmIGVudW0gIEFGX0JsdWVfU3RyaW5nXworICB7CisgICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUCA9IDAsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4gPSAxMywKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUCA9IDI0LAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NID0gNDEsCisgICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwgPSA1OCwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIgPSA3NSwKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JBU0UgPSA4MiwKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX1RPUCA9IDEwNywKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0hFQUQgPSAxMzIsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CT1RUT00gPSAxNTcsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AgPSAxNjQsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00gPSAxNzksCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AgPSAxOTIsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTEwgPSAyMDUsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfREVTQ0VOREVSID0gMjIyLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AgPSAyMzksCisgICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0JPVFRPTSA9IDI1NiwKKyAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSID0gMjY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gMjgwLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfQk9UVE9NID0gMjg5LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QID0gMjk4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMID0gMzA2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0RFU0NFTkRFUiA9IDMxNCwKKyAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QID0gMzIwLAorICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00gPSAzNDIsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9UT1AgPSAzNjQsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00gPSAzODMsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9BU0NFTkRFUiA9IDQwNSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0FTQ0VOREVSID0gNDE1LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSID0gNDI1LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfREVTQ0VOREVSID0gNDM4LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QID0gNDQ1LAorICAgIGFmX2JsdWVfMV8xID0gNDU0LAorI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisgICAgQUZfQkxVRV9TVFJJTkdfQ0pLX1RPUCA9IGFmX2JsdWVfMV8xICsgMSwKKyAgICBBRl9CTFVFX1NUUklOR19DSktfQk9UVE9NID0gYWZfYmx1ZV8xXzEgKyAxNTMsCisgICAgYWZfYmx1ZV8xXzFfMSA9IGFmX2JsdWVfMV8xICsgMzA0LAorI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUCisgICAgQUZfQkxVRV9TVFJJTkdfQ0pLX0xFRlQgPSBhZl9ibHVlXzFfMV8xICsgMSwKKyAgICBBRl9CTFVFX1NUUklOR19DSktfUklHSFQgPSBhZl9ibHVlXzFfMV8xICsgMTUzLAorICAgIGFmX2JsdWVfMV8xXzIgPSBhZl9ibHVlXzFfMV8xICsgMzA0LAorI2Vsc2UKKyAgICBhZl9ibHVlXzFfMV8yID0gYWZfYmx1ZV8xXzFfMSArIDAsCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQgKi8KKyAgICBhZl9ibHVlXzFfMiA9IGFmX2JsdWVfMV8xXzIgKyAwLAorI2Vsc2UKKyAgICBhZl9ibHVlXzFfMiA9IGFmX2JsdWVfMV8xICsgMCwKKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0NKSyAgICAgICAgICAgICAgICAqLworCisKKyAgICBBRl9CTFVFX1NUUklOR19NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9CbHVlX1N0cmluZzsKKworCisgIEZUX0xPQ0FMX0FSUkFZKCBjaGFyICkKKyAgYWZfYmx1ZV9zdHJpbmdzW107CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgIEIgTCBVIEUgICBTIFQgUiBJIE4gRyBTIEUgVCBTICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBUaGUgbmV4dCBsZXZlbCBpcyB0byBncm91cCBibHVlIHN0cmluZ3MgaW50byBzdHlsZS1zcGVjaWZpYyBzZXRzLiAqLworCisKKyAgLyogUHJvcGVydGllcyBhcmUgc3BlY2lmaWMgdG8gYSB3cml0aW5nIHN5c3RlbS4gIFdlIGFzc3VtZSB0aGF0IGEgZ2l2ZW4gICovCisgIC8qIGJsdWUgc3RyaW5nIGNhbid0IGJlIHVzZWQgaW4gbW9yZSB0aGFuIGEgc2luZ2xlIHdyaXRpbmcgc3lzdGVtLCB3aGljaCAqLworICAvKiBpcyBhIHNhZmUgYmV0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgKCAxVSA8PCAwICkgIC8qIG11c3QgaGF2ZSB2YWx1ZSAxICovCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgICggMVUgPDwgMSApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICggMVUgPDwgMiApCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTE9ORyAgICAgICggMVUgPDwgMyApCisKKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QICAgICggMVUgPDwgMCApICAgICAgIC8qIG11c3QgaGF2ZSB2YWx1ZSAxICovCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfQ0pLX0hPUklaICAoIDFVIDw8IDEgKSAgICAgICAvKiBtdXN0IGhhdmUgdmFsdWUgMiAqLworI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0NKS19SSUdIVCAgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QCisKKworI2RlZmluZSBBRl9CTFVFX1NUUklOR1NFVF9NQVhfTEVOICA4CisKKyAgLyogVGhlIEFGX0JsdWVfU3RyaW5nc2V0IGVudW1lcmF0aW9uIHZhbHVlcyBhcmUgb2Zmc2V0cyBpbnRvIHRoZSAqLworICAvKiBgYWZfYmx1ZV9zdHJpbmdzZXRzJyBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgdHlwZWRlZiBlbnVtICBBRl9CbHVlX1N0cmluZ3NldF8KKyAgeworICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSQUIgPSAwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwgPSAzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0RFVkEgPSA5LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsgPSAxNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSID0gMjIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDI2LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RFTFUgPSAzMywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9USEFJID0gMzYsCisgICAgYWZfYmx1ZV8yXzEgPSA0NCwKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSworICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hBTkkgPSBhZl9ibHVlXzJfMSArIDAsCisgICAgYWZfYmx1ZV8yXzFfMSA9IGFmX2JsdWVfMl8xICsgMiwKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKS19CTFVFX0hBTklfVkVSVAorICAgIGFmX2JsdWVfMl8xXzIgPSBhZl9ibHVlXzJfMV8xICsgMiwKKyNlbHNlCisgICAgYWZfYmx1ZV8yXzFfMiA9IGFmX2JsdWVfMl8xXzEgKyAwLAorI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUICovCisgICAgYWZfYmx1ZV8yXzIgPSBhZl9ibHVlXzJfMV8yICsgMSwKKyNlbHNlCisgICAgYWZfYmx1ZV8yXzIgPSBhZl9ibHVlXzJfMSArIDAsCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSksgICAgICAgICAgICAgICAgKi8KKworCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTUFYICAgLyogZG8gbm90IHJlbW92ZSAqLworCisgIH0gQUZfQmx1ZV9TdHJpbmdzZXQ7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfQmx1ZV9TdHJpbmdSZWNfCisgIHsKKyAgICBBRl9CbHVlX1N0cmluZyAgc3RyaW5nOworICAgIEZUX1VTaG9ydCAgICAgICBwcm9wZXJ0aWVzOworCisgIH0gQUZfQmx1ZV9TdHJpbmdSZWM7CisKKworICBGVF9MT0NBTF9BUlJBWSggQUZfQmx1ZV9TdHJpbmdSZWMgKQorICBhZl9ibHVlX3N0cmluZ3NldHNbXTsKKworLyogKi8KKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0FGQkxVRV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0M2ZlNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmJsdWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRkJMVUVfSF9fCisjZGVmaW5lIF9fQUZCTFVFX0hfXworCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyogYW4gYXV4aWxpYXJ5IG1hY3JvIHRvIGRlY29kZSBhIFVURi04IGNoYXJhY3RlciAtLSBzaW5jZSB3ZSBvbmx5IHVzZSAqLworICAvKiBoYXJkLWNvZGVkLCBzZWxmLWNvbnZlcnRlZCBkYXRhLCBubyBlcnJvciBjaGVja2luZyBpcyBwZXJmb3JtZWQgICAgICovCisjZGVmaW5lIEdFVF9VVEY4X0NIQVIoIGNoLCBwICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjaCA9ICh1bnNpZ25lZCBjaGFyKSpwKys7ICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmICggY2ggPj0gMHg4MCApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX1VJbnQgIGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggY2ggPCAweEUwICkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGxlbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgY2ggJj0gMHgxRjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbHNlIGlmICggY2ggPCAweEYwICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBsZW4gPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGNoICY9IDB4MEY7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgbGVuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjaCAmPSAweDA3OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yICggOyBsZW4gPiAwOyBsZW4tLSApICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGNoID0gKCBjaCA8PCA2ICkgfCAoICpwKysgJiAweDNGICk7IFwKKyAgICAgICAgICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIEIgTCBVIEUgICBTIFQgUiBJIE4gRyBTICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBBdCB0aGUgYm90dG9tbW9zdCBsZXZlbCwgd2UgZGVmaW5lIHN0cmluZ3MgZm9yIGZpbmRpbmcgYmx1ZSB6b25lcy4gKi8KKworCisjZGVmaW5lIEFGX0JMVUVfU1RSSU5HX01BWF9MRU4gIEBBRl9CTFVFX1NUUklOR19NQVhfTEVOQAorCisgIC8qIFRoZSBBRl9CbHVlX1N0cmluZyBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlIG9mZnNldHMgaW50byB0aGUgKi8KKyAgLyogYGFmX2JsdWVfc3RyaW5ncycgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHR5cGVkZWYgZW51bSAgQUZfQmx1ZV9TdHJpbmdfCisgIHsKK0BBRl9CTFVFX1NUUklOR19FTlVNQAorCisgICAgQUZfQkxVRV9TVFJJTkdfTUFYICAgLyogZG8gbm90IHJlbW92ZSAqLworCisgIH0gQUZfQmx1ZV9TdHJpbmc7CisKKworICBGVF9MT0NBTF9BUlJBWSggY2hhciApCisgIGFmX2JsdWVfc3RyaW5nc1tdOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICBCIEwgVSBFICAgUyBUIFIgSSBOIEcgUyBFIFQgUyAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogVGhlIG5leHQgbGV2ZWwgaXMgdG8gZ3JvdXAgYmx1ZSBzdHJpbmdzIGludG8gc3R5bGUtc3BlY2lmaWMgc2V0cy4gKi8KKworCisgIC8qIFByb3BlcnRpZXMgYXJlIHNwZWNpZmljIHRvIGEgd3JpdGluZyBzeXN0ZW0uICBXZSBhc3N1bWUgdGhhdCBhIGdpdmVuICAqLworICAvKiBibHVlIHN0cmluZyBjYW4ndCBiZSB1c2VkIGluIG1vcmUgdGhhbiBhIHNpbmdsZSB3cml0aW5nIHN5c3RlbSwgd2hpY2ggKi8KKyAgLyogaXMgYSBzYWZlIGJldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICggMVUgPDwgMCApICAvKiBtdXN0IGhhdmUgdmFsdWUgMSAqLworI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgICAoIDFVIDw8IDEgKQorI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAoIDFVIDw8IDIgKQorI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0xBVElOX0xPTkcgICAgICAoIDFVIDw8IDMgKQorCisjZGVmaW5lIEFGX0JMVUVfUFJPUEVSVFlfQ0pLX1RPUCAgICAoIDFVIDw8IDAgKSAgICAgICAvKiBtdXN0IGhhdmUgdmFsdWUgMSAqLworI2RlZmluZSBBRl9CTFVFX1BST1BFUlRZX0NKS19IT1JJWiAgKCAxVSA8PCAxICkgICAgICAgLyogbXVzdCBoYXZlIHZhbHVlIDIgKi8KKyNkZWZpbmUgQUZfQkxVRV9QUk9QRVJUWV9DSktfUklHSFQgIEFGX0JMVUVfUFJPUEVSVFlfQ0pLX1RPUAorCisKKyNkZWZpbmUgQUZfQkxVRV9TVFJJTkdTRVRfTUFYX0xFTiAgQEFGX0JMVUVfU1RSSU5HU0VUX01BWF9MRU5ACisKKyAgLyogVGhlIEFGX0JsdWVfU3RyaW5nc2V0IGVudW1lcmF0aW9uIHZhbHVlcyBhcmUgb2Zmc2V0cyBpbnRvIHRoZSAqLworICAvKiBgYWZfYmx1ZV9zdHJpbmdzZXRzJyBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgdHlwZWRlZiBlbnVtICBBRl9CbHVlX1N0cmluZ3NldF8KKyAgeworQEFGX0JMVUVfU1RSSU5HU0VUX0VOVU1ACisKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9CbHVlX1N0cmluZ3NldDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9CbHVlX1N0cmluZ1JlY18KKyAgeworICAgIEFGX0JsdWVfU3RyaW5nICBzdHJpbmc7CisgICAgRlRfVVNob3J0ICAgICAgIHByb3BlcnRpZXM7CisKKyAgfSBBRl9CbHVlX1N0cmluZ1JlYzsKKworCisgIEZUX0xPQ0FMX0FSUkFZKCBBRl9CbHVlX1N0cmluZ1JlYyApCisgIGFmX2JsdWVfc3RyaW5nc2V0c1tdOworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fQUZCTFVFX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmY2prLmMgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZjamsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU0MDhiCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmY2prLmMKQEAgLTAsMCArMSwyMzA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmNqay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIGFraXRvJ3MgYXV0b2hpbnQgcGF0Y2gsIGF2YWlsYWJsZSBoZXJlOgorICAgKgorICAgKiAgaHR0cDovL3d3dy5rZGUuZ3IuanAvfmFraXRvL3BhdGNoL2ZyZWV0eXBlMi8KKyAgICoKKyAgICovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQURWQU5DRVNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiYWZnbG9iYWwuaCIKKyNpbmNsdWRlICJhZnBpYy5oIgorI2luY2x1ZGUgImFmbGF0aW4uaCIKKworCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKKworI3VuZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLX0JMVUVfSEFOSV9WRVJUCisKKyNpbmNsdWRlICJhZmNqay5oIgorI2luY2x1ZGUgImFmZXJyb3JzLmgiCisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorI2luY2x1ZGUgImFmd2FycC5oIgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmNqaworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICBDIEogSyAgIEcgTCBPIEIgQSBMICAgTSBFIFQgUiBJIEMgUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBCYXNpY2FsbHkgdGhlIExhdGluIHZlcnNpb24gd2l0aCBBRl9DSktNZXRyaWNzICovCisgIC8qIHRvIHJlcGxhY2UgQUZfTGF0aW5NZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9jamtfbWV0cmljc19pbml0X3dpZHRocyggQUZfQ0pLTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKQorICB7CisgICAgLyogc2NhbiB0aGUgYXJyYXkgb2Ygc2VnbWVudHMgaW4gZWFjaCBkaXJlY3Rpb24gKi8KKyAgICBBRl9HbHlwaEhpbnRzUmVjICBoaW50c1sxXTsKKworCisgICAgRlRfVFJBQ0U1KCggIlxuIgorICAgICAgICAgICAgICAgICJjamsgc3RhbmRhcmQgd2lkdGhzIGNvbXB1dGF0aW9uIChzdHlsZSBgJXMnKVxuIgorICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKyAgICAgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKworICAgIGFmX2dseXBoX2hpbnRzX2luaXQoIGhpbnRzLCBmYWNlLT5tZW1vcnkgKTsKKworICAgIG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLndpZHRoX2NvdW50ID0gMDsKKyAgICBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXS53aWR0aF9jb3VudCA9IDA7CisKKyAgICB7CisgICAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsKKyAgICAgIEZUX1VMb25nICAgICAgICAgIGdseXBoX2luZGV4OworICAgICAgRlRfTG9uZyAgICAgICAgICAgeV9vZmZzZXQ7CisgICAgICBpbnQgICAgICAgICAgICAgICBkaW07CisgICAgICBBRl9DSktNZXRyaWNzUmVjICBkdW1teVsxXTsKKyAgICAgIEFGX1NjYWxlciAgICAgICAgIHNjYWxlciA9ICZkdW1teS0+cm9vdC5zY2FsZXI7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAgICAgQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMgPSBtZXRyaWNzLT5yb290Lmdsb2JhbHM7CisjZW5kaWYKKworICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzICA9IG1ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3M7CisgICAgICBBRl9TY3JpcHRDbGFzcyAgc2NyaXB0X2NsYXNzID0gQUZfU0NSSVBUX0NMQVNTRVNfR0VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICAgIEZUX1VJbnQzMiAgc3RhbmRhcmRfY2hhcjsKKworCisgICAgICBzdGFuZGFyZF9jaGFyID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMTsKKyAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmeV9vZmZzZXQgKTsKKyAgICAgIGlmICggIWdseXBoX2luZGV4ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIyICkKKyAgICAgICAgeworICAgICAgICAgIHN0YW5kYXJkX2NoYXIgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIyOworICAgICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeV9vZmZzZXQgKTsKKyAgICAgICAgICBpZiAoICFnbHlwaF9pbmRleCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjM7CisgICAgICAgICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeV9vZmZzZXQgKTsKKyAgICAgICAgICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBGVF9UUkFDRTUoKCAic3RhbmRhcmQgY2hhcmFjdGVyOiBVKyUwNGxYIChnbHlwaCBpbmRleCAlZClcbiIsCisgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLCBnbHlwaF9pbmRleCApKTsKKworICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOworICAgICAgaWYgKCBlcnJvciB8fCBmYWNlLT5nbHlwaC0+b3V0bGluZS5uX3BvaW50cyA8PSAwICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBGVF9aRVJPKCBkdW1teSApOworCisgICAgICBkdW1teS0+dW5pdHNfcGVyX2VtID0gbWV0cmljcy0+dW5pdHNfcGVyX2VtOworCisgICAgICBzY2FsZXItPnhfc2NhbGUgPSAweDEwMDAwTDsKKyAgICAgIHNjYWxlci0+eV9zY2FsZSA9IDB4MTAwMDBMOworICAgICAgc2NhbGVyLT54X2RlbHRhID0gMDsKKyAgICAgIHNjYWxlci0+eV9kZWx0YSA9IDA7CisKKyAgICAgIHNjYWxlci0+ZmFjZSAgICAgICAgPSBmYWNlOworICAgICAgc2NhbGVyLT5yZW5kZXJfbW9kZSA9IEZUX1JFTkRFUl9NT0RFX05PUk1BTDsKKyAgICAgIHNjYWxlci0+ZmxhZ3MgICAgICAgPSAwOworCisgICAgICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBoaW50cywgKEFGX1N0eWxlTWV0cmljcylkdW1teSApOworCisgICAgICBlcnJvciA9IGFmX2dseXBoX2hpbnRzX3JlbG9hZCggaGludHMsICZmYWNlLT5nbHlwaC0+b3V0bGluZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZm9yICggZGltID0gMDsgZGltIDwgQUZfRElNRU5TSU9OX01BWDsgZGltKysgKQorICAgICAgeworICAgICAgICBBRl9DSktBeGlzICAgIGF4aXMgICAgPSAmbWV0cmljcy0+YXhpc1tkaW1dOworICAgICAgICBBRl9BeGlzSGludHMgIGF4aGludHMgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICAgICAgQUZfU2VnbWVudCAgICBzZWcsIGxpbWl0LCBsaW5rOworICAgICAgICBGVF9VSW50ICAgICAgIG51bV93aWR0aHMgPSAwOworCisKKyAgICAgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyggaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9EaW1lbnNpb24pZGltICk7CisKKyAgICAgICAgc2VnICAgPSBheGhpbnRzLT5zZWdtZW50czsKKyAgICAgICAgbGltaXQgPSBzZWcgKyBheGhpbnRzLT5udW1fc2VnbWVudHM7CisKKyAgICAgICAgZm9yICggOyBzZWcgPCBsaW1pdDsgc2VnKysgKQorICAgICAgICB7CisgICAgICAgICAgbGluayA9IHNlZy0+bGluazsKKworICAgICAgICAgIC8qIHdlIG9ubHkgY29uc2lkZXIgc3RlbSBzZWdtZW50cyB0aGVyZSEgKi8KKyAgICAgICAgICBpZiAoIGxpbmsgJiYgbGluay0+bGluayA9PSBzZWcgJiYgbGluayA+IHNlZyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICBkaXN0OworCisKKyAgICAgICAgICAgIGRpc3QgPSBzZWctPnBvcyAtIGxpbmstPnBvczsKKyAgICAgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgICAgIGlmICggbnVtX3dpZHRocyA8IEFGX0NKS19NQVhfV0lEVEhTICkKKyAgICAgICAgICAgICAgYXhpcy0+d2lkdGhzW251bV93aWR0aHMrK10ub3JnID0gZGlzdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiB0aGlzIGFsc28gcmVwbGFjZXMgbXVsdGlwbGUgYWxtb3N0IGlkZW50aWNhbCBzdGVtIHdpZHRocyAqLworICAgICAgICAvKiB3aXRoIGEgc2luZ2xlIG9uZSAodGhlIHZhbHVlIDEwMCBpcyBoZXVyaXN0aWMpICAgICAgICAgICAqLworICAgICAgICBhZl9zb3J0X2FuZF9xdWFudGl6ZV93aWR0aHMoICZudW1fd2lkdGhzLCBheGlzLT53aWR0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXktPnVuaXRzX3Blcl9lbSAvIDEwMCApOworICAgICAgICBheGlzLT53aWR0aF9jb3VudCA9IG51bV93aWR0aHM7CisgICAgICB9CisKKyAgICBFeGl0OgorICAgICAgZm9yICggZGltID0gMDsgZGltIDwgQUZfRElNRU5TSU9OX01BWDsgZGltKysgKQorICAgICAgeworICAgICAgICBBRl9DSktBeGlzICBheGlzID0gJm1ldHJpY3MtPmF4aXNbZGltXTsKKyAgICAgICAgRlRfUG9zICAgICAgc3RkdzsKKworCisgICAgICAgIHN0ZHcgPSAoIGF4aXMtPndpZHRoX2NvdW50ID4gMCApID8gYXhpcy0+d2lkdGhzWzBdLm9yZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFGX0xBVElOX0NPTlNUQU5UKCBtZXRyaWNzLCA1MCApOworCisgICAgICAgIC8qIGxldCdzIHRyeSAyMCUgb2YgdGhlIHNtYWxsZXN0IHdpZHRoICovCisgICAgICAgIGF4aXMtPmVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gc3RkdyAvIDU7CisgICAgICAgIGF4aXMtPnN0YW5kYXJkX3dpZHRoICAgICAgICAgID0gc3RkdzsKKyAgICAgICAgYXhpcy0+ZXh0cmFfbGlnaHQgICAgICAgICAgICAgPSAwOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIlcyB3aWR0aHM6XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCA/ICJob3Jpem9udGFsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJ2ZXJ0aWNhbCIgKSk7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICAlZCAoc3RhbmRhcmQpIiwgYXhpcy0+c3RhbmRhcmRfd2lkdGggKSk7CisgICAgICAgICAgZm9yICggaSA9IDE7IGkgPCBheGlzLT53aWR0aF9jb3VudDsgaSsrICkKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgJWQiLCBheGlzLT53aWR0aHNbaV0ub3JnICkpOworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICB9CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIGFmX2dseXBoX2hpbnRzX2RvbmUoIGhpbnRzICk7CisgIH0KKworCisgIC8qIEZpbmQgYWxsIGJsdWUgem9uZXMuICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfY2prX21ldHJpY3NfaW5pdF9ibHVlcyggQUZfQ0pLTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSApCisgIHsKKyAgICBGVF9Qb3MgICAgICBmaWxsc1tBRl9CTFVFX1NUUklOR19NQVhfTEVOXTsKKyAgICBGVF9Qb3MgICAgICBmbGF0c1tBRl9CTFVFX1NUUklOR19NQVhfTEVOXTsKKworICAgIEZUX1VJbnQgICAgIG51bV9maWxsczsKKyAgICBGVF9VSW50ICAgICBudW1fZmxhdHM7CisKKyAgICBGVF9Cb29sICAgICBmaWxsOworCisgICAgQUZfQ0pLQmx1ZSAgYmx1ZTsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBBRl9DSktBeGlzICBheGlzOworICAgIEZUX091dGxpbmUgIG91dGxpbmU7CisKKyAgICBBRl9TdHlsZUNsYXNzICBzYyA9IG1ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3M7CisKKyAgICBBRl9CbHVlX1N0cmluZ3NldCAgICAgICAgIGJzcyA9IHNjLT5ibHVlX3N0cmluZ3NldDsKKyAgICBjb25zdCBBRl9CbHVlX1N0cmluZ1JlYyogIGJzICA9ICZhZl9ibHVlX3N0cmluZ3NldHNbYnNzXTsKKworCisgICAgLyogd2Ugd2FsayBvdmVyIHRoZSBibHVlIGNoYXJhY3RlciBzdHJpbmdzIGFzIHNwZWNpZmllZCBpbiB0aGUgICAqLworICAgIC8qIHN0eWxlJ3MgZW50cnkgaW4gdGhlIGBhZl9ibHVlX3N0cmluZ3NldCcgYXJyYXksIGNvbXB1dGluZyBpdHMgKi8KKyAgICAvKiBleHRyZW11bSBwb2ludHMgKGRlcGVuZGluZyBvbiB0aGUgc3RyaW5nIHByb3BlcnRpZXMpICAgICAgICAgICovCisKKyAgICBGVF9UUkFDRTUoKCAiY2prIGJsdWUgem9uZXMgY29tcHV0YXRpb25cbiIKKyAgICAgICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKyAgICAgICAgICAgICAgICAiXG4iICkpOworCisgICAgZm9yICggOyBicy0+c3RyaW5nICE9IEFGX0JMVUVfU1RSSU5HX01BWDsgYnMrKyApCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgPSAmYWZfYmx1ZV9zdHJpbmdzW2JzLT5zdHJpbmddOworICAgICAgRlRfUG9zKiAgICAgIGJsdWVfcmVmOworICAgICAgRlRfUG9zKiAgICAgIGJsdWVfc2hvb3Q7CisKKworICAgICAgaWYgKCBBRl9DSktfSVNfSE9SSVpfQkxVRSggYnMgKSApCisgICAgICAgIGF4aXMgPSAmbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl07CisgICAgICBlbHNlCisgICAgICAgIGF4aXMgPSAmbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fVkVSVF07CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgeworICAgICAgICBGVF9TdHJpbmcqICBjamtfYmx1ZV9uYW1lWzRdID0KKyAgICAgICAgeworICAgICAgICAgIChGVF9TdHJpbmcqKSJib3R0b20iLCAgICAvKiAtLSAgICwgLS0gICovCisgICAgICAgICAgKEZUX1N0cmluZyopInRvcCIsICAgICAgIC8qIC0tICAgLCBUT1AgKi8KKyAgICAgICAgICAoRlRfU3RyaW5nKikibGVmdCIsICAgICAgLyogSE9SSVosIC0tICAqLworICAgICAgICAgIChGVF9TdHJpbmcqKSJyaWdodCIgICAgICAvKiBIT1JJWiwgVE9QICovCisgICAgICAgIH07CisKKworICAgICAgICBGVF9UUkFDRTUoKCAiYmx1ZSB6b25lICVkICglcyk6XG4iLAorICAgICAgICAgICAgICAgICAgICBheGlzLT5ibHVlX2NvdW50LAorICAgICAgICAgICAgICAgICAgICBjamtfYmx1ZV9uYW1lW0FGX0NKS19JU19IT1JJWl9CTFVFKCBicyApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9DSktfSVNfVE9QX0JMVUUoIGJzICkgICBdICkpOworICAgICAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgIG51bV9maWxscyA9IDA7CisgICAgICBudW1fZmxhdHMgPSAwOworCisgICAgICBmaWxsID0gMTsgIC8qIHN0YXJ0IHdpdGggY2hhcmFjdGVycyB0aGF0IGRlZmluZSBmaWxsIHZhbHVlcyAqLworICAgICAgRlRfVFJBQ0U1KCggIiAgW292ZXJzaG9vdCB2YWx1ZXNdXG4iICkpOworCisgICAgICB3aGlsZSAoICpwICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgICAgY2g7CisgICAgICAgIEZUX1VMb25nICAgIGdseXBoX2luZGV4OworICAgICAgICBGVF9Mb25nICAgICB5X29mZnNldDsKKyAgICAgICAgRlRfUG9zICAgICAgYmVzdF9wb3M7ICAgICAgIC8qIHNhbWUgYXMgcG9pbnRzLnkgb3IgcG9pbnRzLngsIHJlc3AuICovCisgICAgICAgIEZUX0ludCAgICAgIGJlc3RfcG9pbnQ7CisgICAgICAgIEZUX1ZlY3RvciogIHBvaW50czsKKworCisgICAgICAgIEdFVF9VVEY4X0NIQVIoIGNoLCBwICk7CisKKyAgICAgICAgLyogc3dpdGNoIHRvIGNoYXJhY3RlcnMgdGhhdCBkZWZpbmUgZmxhdCB2YWx1ZXMgKi8KKyAgICAgICAgaWYgKCBjaCA9PSAnfCcgKQorICAgICAgICB7CisgICAgICAgICAgZmlsbCA9IDA7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgW3JlZmVyZW5jZSB2YWx1ZXNdXG4iICkpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogbG9hZCB0aGUgY2hhcmFjdGVyIGluIHRoZSBmYWNlIC0tIHNraXAgdW5rbm93biBvciBlbXB0eSBvbmVzICovCisgICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwgY2gsICZnbHlwaF9pbmRleCwgJnlfb2Zmc2V0ICk7CisgICAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYIHVuYXZhaWxhYmxlXG4iLCBjaCApKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yICAgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOworICAgICAgICBvdXRsaW5lID0gZmFjZS0+Z2x5cGgtPm91dGxpbmU7CisgICAgICAgIGlmICggZXJyb3IgfHwgb3V0bGluZS5uX3BvaW50cyA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFUrJTA0bFggY29udGFpbnMgbm8gb3V0bGluZXNcbiIsIGNoICkpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGNvbXB1dGUgbWluIG9yIG1heCBwb2ludCBpbmRpY2VzIGFuZCBjb29yZGluYXRlcyAqLworICAgICAgICBwb2ludHMgICAgID0gb3V0bGluZS5wb2ludHM7CisgICAgICAgIGJlc3RfcG9pbnQgPSAtMTsKKyAgICAgICAgYmVzdF9wb3MgICA9IDA7ICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgbm47CisgICAgICAgICAgRlRfSW50ICBmaXJzdCA9IDA7CisgICAgICAgICAgRlRfSW50ICBsYXN0ICA9IC0xOworCisKKyAgICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgb3V0bGluZS5uX2NvbnRvdXJzOyBmaXJzdCA9IGxhc3QgKyAxLCBubisrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHBwOworCisKKyAgICAgICAgICAgIGxhc3QgPSBvdXRsaW5lLmNvbnRvdXJzW25uXTsKKworICAgICAgICAgICAgLyogQXZvaWQgc2luZ2xlLXBvaW50IGNvbnRvdXJzIHNpbmNlIHRoZXkgYXJlIG5ldmVyIHJhc3Rlcml6ZWQuICovCisgICAgICAgICAgICAvKiBJbiBzb21lIGZvbnRzLCB0aGV5IGNvcnJlc3BvbmQgdG8gbWFyayBhdHRhY2htZW50IHBvaW50cyAgICAgKi8KKyAgICAgICAgICAgIC8qIHdoaWNoIGFyZSB3YXkgb3V0c2lkZSBvZiB0aGUgZ2x5cGgncyByZWFsIG91dGxpbmUuICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBsYXN0IDw9IGZpcnN0ICkKKyAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICggQUZfQ0pLX0lTX0hPUklaX0JMVUUoIGJzICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIEFGX0NKS19JU19SSUdIVF9CTFVFKCBicyApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoIHBwID0gZmlyc3Q7IHBwIDw9IGxhc3Q7IHBwKysgKQorICAgICAgICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50IDwgMCB8fCBwb2ludHNbcHBdLnggPiBiZXN0X3BvcyApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJlc3RfcG9pbnQgPSBwcDsKKyAgICAgICAgICAgICAgICAgICAgYmVzdF9wb3MgICA9IHBvaW50c1twcF0ueDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBwcCA9IGZpcnN0OyBwcCA8PSBsYXN0OyBwcCsrICkKKyAgICAgICAgICAgICAgICAgIGlmICggYmVzdF9wb2ludCA8IDAgfHwgcG9pbnRzW3BwXS54IDwgYmVzdF9wb3MgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gcHA7CisgICAgICAgICAgICAgICAgICAgIGJlc3RfcG9zICAgPSBwb2ludHNbcHBdLng7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBBRl9DSktfSVNfVE9QX0JMVUUoIGJzICkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICggcHAgPSBmaXJzdDsgcHAgPD0gbGFzdDsgcHArKyApCisgICAgICAgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgPCAwIHx8IHBvaW50c1twcF0ueSA+IGJlc3RfcG9zICkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmVzdF9wb2ludCA9IHBwOworICAgICAgICAgICAgICAgICAgICBiZXN0X3BvcyAgID0gcG9pbnRzW3BwXS55OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoIHBwID0gZmlyc3Q7IHBwIDw9IGxhc3Q7IHBwKysgKQorICAgICAgICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50IDwgMCB8fCBwb2ludHNbcHBdLnkgPCBiZXN0X3BvcyApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJlc3RfcG9pbnQgPSBwcDsKKyAgICAgICAgICAgICAgICAgICAgYmVzdF9wb3MgICA9IHBvaW50c1twcF0ueTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFUrJTA0bFg6IGJlc3RfcG9zID0gJTVsZFxuIiwgY2gsIGJlc3RfcG9zICkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmaWxsICkKKyAgICAgICAgICBmaWxsc1tudW1fZmlsbHMrK10gPSBiZXN0X3BvczsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZsYXRzW251bV9mbGF0cysrXSA9IGJlc3RfcG9zOworICAgICAgfQorCisgICAgICBpZiAoIG51bV9mbGF0cyA9PSAwICYmIG51bV9maWxscyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogIHdlIGNvdWxkbid0IGZpbmQgYSBzaW5nbGUgZ2x5cGggdG8gY29tcHV0ZSB0aGlzIGJsdWUgem9uZSwKKyAgICAgICAgICogIHdlIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCB0aGVuCisgICAgICAgICAqLworICAgICAgICBGVF9UUkFDRTUoKCAiICBlbXB0eVxuIiApKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIHdlIGhhdmUgY29tcHV0ZWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBgZmlsbCcgYW5kIGBmbGF0cycgdGFibGVzLCAgICovCisgICAgICAvKiBub3cgZGV0ZXJtaW5lIHRoZSByZWZlcmVuY2UgYW5kIG92ZXJzaG9vdCBwb3NpdGlvbiBvZiB0aGUgYmx1ZSAtLSAqLworICAgICAgLyogd2Ugc2ltcGx5IHRha2UgdGhlIG1lZGlhbiB2YWx1ZSBhZnRlciBhIHNpbXBsZSBzb3J0ICAgICAgICAgICAgICAgKi8KKyAgICAgIGFmX3NvcnRfcG9zKCBudW1fZmlsbHMsIGZpbGxzICk7CisgICAgICBhZl9zb3J0X3BvcyggbnVtX2ZsYXRzLCBmbGF0cyApOworCisgICAgICBibHVlICAgICAgID0gJmF4aXMtPmJsdWVzW2F4aXMtPmJsdWVfY291bnRdOworICAgICAgYmx1ZV9yZWYgICA9ICZibHVlLT5yZWYub3JnOworICAgICAgYmx1ZV9zaG9vdCA9ICZibHVlLT5zaG9vdC5vcmc7CisKKyAgICAgIGF4aXMtPmJsdWVfY291bnQrKzsKKworICAgICAgaWYgKCBudW1fZmxhdHMgPT0gMCApCisgICAgICB7CisgICAgICAgICpibHVlX3JlZiAgID0KKyAgICAgICAgKmJsdWVfc2hvb3QgPSBmaWxsc1tudW1fZmlsbHMgLyAyXTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBudW1fZmlsbHMgPT0gMCApCisgICAgICB7CisgICAgICAgICpibHVlX3JlZiAgID0KKyAgICAgICAgKmJsdWVfc2hvb3QgPSBmbGF0c1tudW1fZmxhdHMgLyAyXTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgKmJsdWVfcmVmICAgPSBmaWxsc1tudW1fZmlsbHMgLyAyXTsKKyAgICAgICAgKmJsdWVfc2hvb3QgPSBmbGF0c1tudW1fZmxhdHMgLyAyXTsKKyAgICAgIH0KKworICAgICAgLyogbWFrZSBzdXJlIGJsdWVfcmVmID49IGJsdWVfc2hvb3QgZm9yIHRvcC9yaWdodCBvciAqLworICAgICAgLyogdmljZSB2ZXJzYSBmb3IgYm90dG9tL2xlZnQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAqYmx1ZV9zaG9vdCAhPSAqYmx1ZV9yZWYgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgICByZWYgICAgICAgPSAqYmx1ZV9yZWY7CisgICAgICAgIEZUX1BvcyAgIHNob290ICAgICA9ICpibHVlX3Nob290OworICAgICAgICBGVF9Cb29sICB1bmRlcl9yZWYgPSBGVF9CT09MKCBzaG9vdCA8IHJlZiApOworCisKKyAgICAgICAgLyogQUZfQ0pLX0lTX1RPUF9CTFVFIGNvdmVycyBgcmlnaHQnIGFuZCBgdG9wJyAqLworICAgICAgICBpZiAoIEFGX0NKS19JU19UT1BfQkxVRSggYnMgKSBeIHVuZGVyX3JlZiApCisgICAgICAgIHsKKyAgICAgICAgICAqYmx1ZV9yZWYgICA9CisgICAgICAgICAgKmJsdWVfc2hvb3QgPSAoIHNob290ICsgcmVmICkgLyAyOworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgW3JlZmVyZW5jZSBzbWFsbGVyIHRoYW4gb3ZlcnNob290LCIKKyAgICAgICAgICAgICAgICAgICAgICAiIHRha2luZyBtZWFuIHZhbHVlXVxuIiApKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBibHVlLT5mbGFncyA9IDA7CisgICAgICBpZiAoIEFGX0NKS19JU19UT1BfQkxVRSggYnMgKSApCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0NKS19CTFVFX1RPUDsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgICAtPiByZWZlcmVuY2UgPSAlbGRcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgICAgb3ZlcnNob290ID0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgKmJsdWVfcmVmLCAqYmx1ZV9zaG9vdCApKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworCisgICAgcmV0dXJuOworICB9CisKKworICAvKiBCYXNpY2FsbHkgdGhlIExhdGluIHZlcnNpb24gd2l0aCB0eXBlIEFGX0NKS01ldHJpY3MgZm9yIG1ldHJpY3MuICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfY2prX21ldHJpY3NfY2hlY2tfZGlnaXRzKCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKQorICB7CisgICAgRlRfVUludCAgIGk7CisgICAgRlRfQm9vbCAgIHN0YXJ0ZWQgPSAwLCBzYW1lX3dpZHRoID0gMTsKKyAgICBGVF9GaXhlZCAgYWR2YW5jZSwgb2xkX2FkdmFuY2UgPSAwOworCisKKyAgICAvKiBkaWdpdCBgMCcgaXMgMHgzMCBpbiBhbGwgc3VwcG9ydGVkIGNoYXJtYXBzICovCisgICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgZ2x5cGhfaW5kZXg7CisgICAgICBGVF9Mb25nICAgeV9vZmZzZXQ7CisKKworICAgICAgYWZfZ2V0X2NoYXJfaW5kZXgoICZtZXRyaWNzLT5yb290LCBpLCAmZ2x5cGhfaW5kZXgsICZ5X29mZnNldCApOworICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggRlRfR2V0X0FkdmFuY2UoIGZhY2UsIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fSElOVElORyAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZSApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggc3RhcnRlZCApCisgICAgICB7CisgICAgICAgIGlmICggYWR2YW5jZSAhPSBvbGRfYWR2YW5jZSApCisgICAgICAgIHsKKyAgICAgICAgICBzYW1lX3dpZHRoID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBvbGRfYWR2YW5jZSA9IGFkdmFuY2U7CisgICAgICAgIHN0YXJ0ZWQgICAgID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBtZXRyaWNzLT5yb290LmRpZ2l0c19oYXZlX3NhbWVfd2lkdGggPSBzYW1lX3dpZHRoOworICB9CisKKworICAvKiBJbml0aWFsaXplIGdsb2JhbCBtZXRyaWNzLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9jamtfbWV0cmljc19pbml0KCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlICkKKyAgeworICAgIEZUX0NoYXJNYXAgIG9sZG1hcCA9IGZhY2UtPmNoYXJtYXA7CisKKworICAgIG1ldHJpY3MtPnVuaXRzX3Blcl9lbSA9IGZhY2UtPnVuaXRzX3Blcl9FTTsKKworICAgIGlmICggIUZUX1NlbGVjdF9DaGFybWFwKCBmYWNlLCBGVF9FTkNPRElOR19VTklDT0RFICkgKQorICAgIHsKKyAgICAgIGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzKCBtZXRyaWNzLCBmYWNlICk7CisgICAgICBhZl9jamtfbWV0cmljc19pbml0X2JsdWVzKCBtZXRyaWNzLCBmYWNlICk7CisgICAgICBhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMoIG1ldHJpY3MsIGZhY2UgKTsKKyAgICB9CisKKyAgICBGVF9TZXRfQ2hhcm1hcCggZmFjZSwgb2xkbWFwICk7CisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogQWRqdXN0IHNjYWxpbmcgdmFsdWUsIHRoZW4gc2NhbGUgYW5kIHNoaWZ0IHdpZHRocyAgICovCisgIC8qIGFuZCBibHVlIHpvbmVzIChpZiBhcHBsaWNhYmxlKSBmb3IgZ2l2ZW4gZGltZW5zaW9uLiAqLworCisgIHN0YXRpYyB2b2lkCisgIGFmX2Nqa19tZXRyaWNzX3NjYWxlX2RpbSggQUZfQ0pLTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICBzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEZUX0ZpeGVkICAgIHNjYWxlOworICAgIEZUX1BvcyAgICAgIGRlbHRhOworICAgIEFGX0NKS0F4aXMgIGF4aXM7CisgICAgRlRfVUludCAgICAgbm47CisKKworICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICB7CisgICAgICBzY2FsZSA9IHNjYWxlci0+eF9zY2FsZTsKKyAgICAgIGRlbHRhID0gc2NhbGVyLT54X2RlbHRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2NhbGUgPSBzY2FsZXItPnlfc2NhbGU7CisgICAgICBkZWx0YSA9IHNjYWxlci0+eV9kZWx0YTsKKyAgICB9CisKKyAgICBheGlzID0gJm1ldHJpY3MtPmF4aXNbZGltXTsKKworICAgIGlmICggYXhpcy0+b3JnX3NjYWxlID09IHNjYWxlICYmIGF4aXMtPm9yZ19kZWx0YSA9PSBkZWx0YSApCisgICAgICByZXR1cm47CisKKyAgICBheGlzLT5vcmdfc2NhbGUgPSBzY2FsZTsKKyAgICBheGlzLT5vcmdfZGVsdGEgPSBkZWx0YTsKKworICAgIGF4aXMtPnNjYWxlID0gc2NhbGU7CisgICAgYXhpcy0+ZGVsdGEgPSBkZWx0YTsKKworICAgIC8qIHNjYWxlIHRoZSBibHVlIHpvbmVzICovCisgICAgZm9yICggbm4gPSAwOyBubiA8IGF4aXMtPmJsdWVfY291bnQ7IG5uKysgKQorICAgIHsKKyAgICAgIEFGX0NKS0JsdWUgIGJsdWUgPSAmYXhpcy0+Ymx1ZXNbbm5dOworICAgICAgRlRfUG9zICAgICAgZGlzdDsKKworCisgICAgICBibHVlLT5yZWYuY3VyICAgPSBGVF9NdWxGaXgoIGJsdWUtPnJlZi5vcmcsIHNjYWxlICkgKyBkZWx0YTsKKyAgICAgIGJsdWUtPnJlZi5maXQgICA9IGJsdWUtPnJlZi5jdXI7CisgICAgICBibHVlLT5zaG9vdC5jdXIgPSBGVF9NdWxGaXgoIGJsdWUtPnNob290Lm9yZywgc2NhbGUgKSArIGRlbHRhOworICAgICAgYmx1ZS0+c2hvb3QuZml0ID0gYmx1ZS0+c2hvb3QuY3VyOworICAgICAgYmx1ZS0+ZmxhZ3MgICAgJj0gfkFGX0NKS19CTFVFX0FDVElWRTsKKworICAgICAgLyogYSBibHVlIHpvbmUgaXMgb25seSBhY3RpdmUgaWYgaXQgaXMgbGVzcyB0aGFuIDMvNCBwaXhlbHMgdGFsbCAqLworICAgICAgZGlzdCA9IEZUX011bEZpeCggYmx1ZS0+cmVmLm9yZyAtIGJsdWUtPnNob290Lm9yZywgc2NhbGUgKTsKKyAgICAgIGlmICggZGlzdCA8PSA0OCAmJiBkaXN0ID49IC00OCApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgZGVsdGExLCBkZWx0YTI7CisKKworICAgICAgICBibHVlLT5yZWYuZml0ICA9IEZUX1BJWF9ST1VORCggYmx1ZS0+cmVmLmN1ciApOworCisgICAgICAgIC8qIHNob290IGlzIHVuZGVyIHNob290IGZvciBjamsgKi8KKyAgICAgICAgZGVsdGExID0gRlRfRGl2Rml4KCBibHVlLT5yZWYuZml0LCBzY2FsZSApIC0gYmx1ZS0+c2hvb3Qub3JnOworICAgICAgICBkZWx0YTIgPSBkZWx0YTE7CisgICAgICAgIGlmICggZGVsdGExIDwgMCApCisgICAgICAgICAgZGVsdGEyID0gLWRlbHRhMjsKKworICAgICAgICBkZWx0YTIgPSBGVF9NdWxGaXgoIGRlbHRhMiwgc2NhbGUgKTsKKworICAgICAgICBGVF9UUkFDRTUoKCAiZGVsdGE6ICVkIiwgZGVsdGExICkpOworICAgICAgICBpZiAoIGRlbHRhMiA8IDMyICkKKyAgICAgICAgICBkZWx0YTIgPSAwOworI2lmIDAKKyAgICAgICAgZWxzZSBpZiAoIGRlbHRhMiA8IDY0ICkKKyAgICAgICAgICBkZWx0YTIgPSAzMiArICggKCAoIGRlbHRhMiAtIDMyICkgKyAxNiApICYgfjMxICk7CisjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRlbHRhMiA9IEZUX1BJWF9ST1VORCggZGVsdGEyICk7CisgICAgICAgIEZUX1RSQUNFNSgoICIvJWRcbiIsIGRlbHRhMiApKTsKKworICAgICAgICBpZiAoIGRlbHRhMSA8IDAgKQorICAgICAgICAgIGRlbHRhMiA9IC1kZWx0YTI7CisKKyAgICAgICAgYmx1ZS0+c2hvb3QuZml0ID0gYmx1ZS0+cmVmLmZpdCAtIGRlbHRhMjsKKworICAgICAgICBGVF9UUkFDRTUoKCAiPj4gYWN0aXZlIGNqayBibHVlIHpvbmUgJWMlZFslbGQvJWxkXTpcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgcmVmOiAgIGN1cj0lLjJmIGZpdD0lLjJmXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgIHNob290OiBjdXI9JS4yZiBmaXQ9JS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/ICdIJyA6ICdWJywKKyAgICAgICAgICAgICAgICAgICAgbm4sIGJsdWUtPnJlZi5vcmcsIGJsdWUtPnNob290Lm9yZywKKyAgICAgICAgICAgICAgICAgICAgYmx1ZS0+cmVmLmN1ciAvIDY0LjAsIGJsdWUtPnJlZi5maXQgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5zaG9vdC5jdXIgLyA2NC4wLCBibHVlLT5zaG9vdC5maXQgLyA2NC4wICkpOworCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0NKS19CTFVFX0FDVElWRTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qIFNjYWxlIGdsb2JhbCB2YWx1ZXMgaW4gYm90aCBkaXJlY3Rpb25zLiAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2Nqa19tZXRyaWNzX3NjYWxlKCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfU2NhbGVyICAgICAgc2NhbGVyICkKKyAgeworICAgIC8qIHdlIGNvcHkgdGhlIHdob2xlIHN0cnVjdHVyZSBzaW5jZSB0aGUgeCBhbmQgeSBzY2FsaW5nIHZhbHVlcyAqLworICAgIC8qIGFyZSBub3QgbW9kaWZpZWQsIGNvbnRyYXJ5IHRvIGUuZy4gdGhlIGBsYXRpbicgYXV0by1oaW50ZXIgICAqLworICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyID0gKnNjYWxlcjsKKworICAgIGFmX2Nqa19tZXRyaWNzX3NjYWxlX2RpbSggbWV0cmljcywgc2NhbGVyLCBBRl9ESU1FTlNJT05fSE9SWiApOworICAgIGFmX2Nqa19tZXRyaWNzX3NjYWxlX2RpbSggbWV0cmljcywgc2NhbGVyLCBBRl9ESU1FTlNJT05fVkVSVCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgIEMgSiBLICAgRyBMIFkgUCBIICAgQSBOIEEgTCBZIFMgSSBTICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFdhbGsgb3ZlciBhbGwgY29udG91cnMgYW5kIGNvbXB1dGUgaXRzIHNlZ21lbnRzLiAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9jamtfaGludHNfY29tcHV0ZV9zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50cyAgICAgID0gYXhpcy0+c2VnbWVudHM7CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X2xpbWl0ID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBBRl9TZWdtZW50ICAgIHNlZzsKKworCisgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBoaW50cywgZGltICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiBhIHNlZ21lbnQgaXMgcm91bmQgaWYgaXQgZG9lc24ndCBoYXZlIHN1Y2Nlc3NpdmUgKi8KKyAgICAvKiBvbi1jdXJ2ZSBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBmb3IgKCBzZWcgPSBzZWdtZW50czsgc2VnIDwgc2VnbWVudF9saW1pdDsgc2VnKysgKQorICAgIHsKKyAgICAgIEFGX1BvaW50ICBwdCAgID0gc2VnLT5maXJzdDsKKyAgICAgIEFGX1BvaW50ICBsYXN0ID0gc2VnLT5sYXN0OworICAgICAgRlRfVUludCAgIGYwICAgPSBwdC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0w7CisgICAgICBGVF9VSW50ICAgZjE7CisKKworICAgICAgc2VnLT5mbGFncyAmPSB+QUZfRURHRV9ST1VORDsKKworICAgICAgZm9yICggOyBwdCAhPSBsYXN0OyBmMCA9IGYxICkKKyAgICAgIHsKKyAgICAgICAgcHQgPSBwdC0+bmV4dDsKKyAgICAgICAgZjEgPSBwdC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0w7CisKKyAgICAgICAgaWYgKCAhZjAgJiYgIWYxICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIHB0ID09IGxhc3QgKQorICAgICAgICAgIHNlZy0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBhZl9jamtfaGludHNfbGlua19zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50cyAgICAgID0gYXhpcy0+c2VnbWVudHM7CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X2xpbWl0ID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CisgICAgQUZfRGlyZWN0aW9uICBtYWpvcl9kaXIgICAgID0gYXhpcy0+bWFqb3JfZGlyOworICAgIEFGX1NlZ21lbnQgICAgc2VnMSwgc2VnMjsKKyAgICBGVF9Qb3MgICAgICAgIGxlbl90aHJlc2hvbGQ7CisgICAgRlRfUG9zICAgICAgICBkaXN0X3RocmVzaG9sZDsKKworCisgICAgbGVuX3RocmVzaG9sZCA9IEFGX0xBVElOX0NPTlNUQU5UKCBoaW50cy0+bWV0cmljcywgOCApOworCisgICAgZGlzdF90aHJlc2hvbGQgPSAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApID8gaGludHMtPnhfc2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoaW50cy0+eV9zY2FsZTsKKyAgICBkaXN0X3RocmVzaG9sZCA9IEZUX0RpdkZpeCggNjQgKiAzLCBkaXN0X3RocmVzaG9sZCApOworCisgICAgLyogbm93IGNvbXBhcmUgZWFjaCBzZWdtZW50IHRvIHRoZSBvdGhlcnMgKi8KKyAgICBmb3IgKCBzZWcxID0gc2VnbWVudHM7IHNlZzEgPCBzZWdtZW50X2xpbWl0OyBzZWcxKysgKQorICAgIHsKKyAgICAgIGlmICggc2VnMS0+ZGlyICE9IG1ham9yX2RpciApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBmb3IgKCBzZWcyID0gc2VnbWVudHM7IHNlZzIgPCBzZWdtZW50X2xpbWl0OyBzZWcyKysgKQorICAgICAgICBpZiAoIHNlZzIgIT0gc2VnMSAmJiBzZWcxLT5kaXIgKyBzZWcyLT5kaXIgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Qb3MgIGRpc3QgPSBzZWcyLT5wb3MgLSBzZWcxLT5wb3M7CisKKworICAgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIG1pbiA9IHNlZzEtPm1pbl9jb29yZDsKKyAgICAgICAgICAgIEZUX1BvcyAgbWF4ID0gc2VnMS0+bWF4X2Nvb3JkOworICAgICAgICAgICAgRlRfUG9zICBsZW47CisKKworICAgICAgICAgICAgaWYgKCBtaW4gPCBzZWcyLT5taW5fY29vcmQgKQorICAgICAgICAgICAgICBtaW4gPSBzZWcyLT5taW5fY29vcmQ7CisKKyAgICAgICAgICAgIGlmICggbWF4ID4gc2VnMi0+bWF4X2Nvb3JkICkKKyAgICAgICAgICAgICAgbWF4ID0gc2VnMi0+bWF4X2Nvb3JkOworCisgICAgICAgICAgICBsZW4gPSBtYXggLSBtaW47CisgICAgICAgICAgICBpZiAoIGxlbiA+PSBsZW5fdGhyZXNob2xkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBkaXN0ICogOCA8IHNlZzEtPnNjb3JlICogOSAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKCBkaXN0ICogOCA8IHNlZzEtPnNjb3JlICogNyB8fCBzZWcxLT5sZW4gPCBsZW4gKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWcxLT5zY29yZSA9IGRpc3Q7CisgICAgICAgICAgICAgICAgc2VnMS0+bGVuICAgPSBsZW47CisgICAgICAgICAgICAgICAgc2VnMS0+bGluayAgPSBzZWcyOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKCBkaXN0ICogOCA8IHNlZzItPnNjb3JlICogOSAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKCBkaXN0ICogOCA8IHNlZzItPnNjb3JlICogNyB8fCBzZWcyLT5sZW4gPCBsZW4gKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWcyLT5zY29yZSA9IGRpc3Q7CisgICAgICAgICAgICAgICAgc2VnMi0+bGVuICAgPSBsZW47CisgICAgICAgICAgICAgICAgc2VnMi0+bGluayAgPSBzZWcxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgbm93IGNvbXB1dGUgdGhlIGBzZXJpZicgc2VnbWVudHMKKyAgICAgKgorICAgICAqICBJbiBIYW56aSwgc29tZSBzdHJva2VzIGFyZSB3aWRlciBvbiBvbmUgb3IgYm90aCBvZiB0aGUgZW5kcy4KKyAgICAgKiAgV2UgZWl0aGVyIGlkZW50aWZ5IHRoZSBzdGVtcyBvbiB0aGUgZW5kcyBhcyBzZXJpZnMgb3IgcmVtb3ZlCisgICAgICogIHRoZSBsaW5rYWdlLCBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZiB0aGUgc3RlbXMuCisgICAgICoKKyAgICAgKi8KKworICAgIHsKKyAgICAgIEFGX1NlZ21lbnQgIGxpbmsxLCBsaW5rMjsKKworCisgICAgICBmb3IgKCBzZWcxID0gc2VnbWVudHM7IHNlZzEgPCBzZWdtZW50X2xpbWl0OyBzZWcxKysgKQorICAgICAgeworICAgICAgICBsaW5rMSA9IHNlZzEtPmxpbms7CisgICAgICAgIGlmICggIWxpbmsxIHx8IGxpbmsxLT5saW5rICE9IHNlZzEgfHwgbGluazEtPnBvcyA8PSBzZWcxLT5wb3MgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggc2VnMS0+c2NvcmUgPj0gZGlzdF90aHJlc2hvbGQgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoIHNlZzIgPSBzZWdtZW50czsgc2VnMiA8IHNlZ21lbnRfbGltaXQ7IHNlZzIrKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHNlZzItPnBvcyA+IHNlZzEtPnBvcyB8fCBzZWcxID09IHNlZzIgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBsaW5rMiA9IHNlZzItPmxpbms7CisgICAgICAgICAgaWYgKCAhbGluazIgfHwgbGluazItPmxpbmsgIT0gc2VnMiB8fCBsaW5rMi0+cG9zIDwgbGluazEtPnBvcyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGlmICggc2VnMS0+cG9zID09IHNlZzItPnBvcyAmJiBsaW5rMS0+cG9zID09IGxpbmsyLT5wb3MgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBpZiAoIHNlZzItPnNjb3JlIDw9IHNlZzEtPnNjb3JlIHx8IHNlZzEtPnNjb3JlICogNCA8PSBzZWcyLT5zY29yZSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIC8qIHNlZzIgPCBzZWcxIDwgbGluazEgPCBsaW5rMiAqLworCisgICAgICAgICAgaWYgKCBzZWcxLT5sZW4gPj0gc2VnMi0+bGVuICogMyApCisgICAgICAgICAgeworICAgICAgICAgICAgQUZfU2VnbWVudCAgc2VnOworCisKKyAgICAgICAgICAgIGZvciAoIHNlZyA9IHNlZ21lbnRzOyBzZWcgPCBzZWdtZW50X2xpbWl0OyBzZWcrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFGX1NlZ21lbnQgIGxpbmsgPSBzZWctPmxpbms7CisKKworICAgICAgICAgICAgICBpZiAoIGxpbmsgPT0gc2VnMiApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZWctPmxpbmsgID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzZWctPnNlcmlmID0gbGluazE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoIGxpbmsgPT0gbGluazIgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VnLT5saW5rICA9IE5VTEw7CisgICAgICAgICAgICAgICAgc2VnLT5zZXJpZiA9IHNlZzE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNlZzEtPmxpbmsgPSBsaW5rMS0+bGluayA9IE5VTEw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZvciAoIHNlZzEgPSBzZWdtZW50czsgc2VnMSA8IHNlZ21lbnRfbGltaXQ7IHNlZzErKyApCisgICAgeworICAgICAgc2VnMiA9IHNlZzEtPmxpbms7CisKKyAgICAgIGlmICggc2VnMiApCisgICAgICB7CisgICAgICAgIHNlZzItPm51bV9saW5rZWQrKzsKKyAgICAgICAgaWYgKCBzZWcyLT5saW5rICE9IHNlZzEgKQorICAgICAgICB7CisgICAgICAgICAgc2VnMS0+bGluayA9IE5VTEw7CisKKyAgICAgICAgICBpZiAoIHNlZzItPnNjb3JlIDwgZGlzdF90aHJlc2hvbGQgfHwgc2VnMS0+c2NvcmUgPCBzZWcyLT5zY29yZSAqIDQgKQorICAgICAgICAgICAgc2VnMS0+c2VyaWYgPSBzZWcyLT5saW5rOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlZzItPm51bV9saW5rZWQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX2Nqa19oaW50c19jb21wdXRlX2VkZ2VzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gaGludHMtPm1lbW9yeTsKKyAgICBBRl9DSktBeGlzICAgIGxheGlzICA9ICYoKEFGX0NKS01ldHJpY3MpaGludHMtPm1ldHJpY3MpLT5heGlzW2RpbV07CisKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzICAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZzsKKworICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CisgICAgRlRfUG9zICAgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZDsKKworCisgICAgYXhpcy0+bnVtX2VkZ2VzID0gMDsKKworICAgIHNjYWxlID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/IGhpbnRzLT54X3NjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGludHMtPnlfc2NhbGU7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogV2UgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlIGN1cnJlbnQgICAgKi8KKyAgICAvKiBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkgdG8gZmluZCAqLworICAgIC8qIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLiAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJZiBubyBlZGdlIGlzIGZvdW5kLCB3ZSBjcmVhdGUgYW5kIGluc2VydCBhIG5ldyBlZGdlIGluIHRoZSAgICAgICAqLworICAgIC8qIHNvcnRlZCB0YWJsZS4gIE90aGVyd2lzZSwgd2Ugc2ltcGx5IGFkZCB0aGUgc2VnbWVudCB0byB0aGUgZWRnZSdzICovCisgICAgLyogbGlzdCB3aGljaCBpcyB0aGVuIHByb2Nlc3NlZCBpbiB0aGUgc2Vjb25kIHN0ZXAgdG8gY29tcHV0ZSB0aGUgICAgKi8KKyAgICAvKiBlZGdlJ3MgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogTm90ZSB0aGF0IHRoZSBlZGdlcyB0YWJsZSBpcyBzb3J0ZWQgYWxvbmcgdGhlIHNlZ21lbnQvZWRnZSAgICAgICAgKi8KKyAgICAvKiBwb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gRlRfTXVsRml4KCBsYXhpcy0+ZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CisgICAgaWYgKCBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA+IDY0IC8gNCApCisgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggNjQgLyA0LCBzY2FsZSApOworICAgIGVsc2UKKyAgICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gbGF4aXMtPmVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkOworCisgICAgZm9yICggc2VnID0gc2VnbWVudHM7IHNlZyA8IHNlZ21lbnRfbGltaXQ7IHNlZysrICkKKyAgICB7CisgICAgICBBRl9FZGdlICBmb3VuZCA9IE5VTEw7CisgICAgICBGVF9Qb3MgICBiZXN0ICA9IDB4RkZGRlU7CisgICAgICBGVF9JbnQgICBlZTsKKworCisgICAgICAvKiBsb29rIGZvciBhbiBlZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlZ21lbnQgKi8KKyAgICAgIGZvciAoIGVlID0gMDsgZWUgPCBheGlzLT5udW1fZWRnZXM7IGVlKysgKQorICAgICAgeworICAgICAgICBBRl9FZGdlICBlZGdlID0gYXhpcy0+ZWRnZXMgKyBlZTsKKyAgICAgICAgRlRfUG9zICAgZGlzdDsKKworCisgICAgICAgIGlmICggZWRnZS0+ZGlyICE9IHNlZy0+ZGlyICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkaXN0ID0gc2VnLT5wb3MgLSBlZGdlLT5mcG9zOworICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgaWYgKCBkaXN0IDwgZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgJiYgZGlzdCA8IGJlc3QgKQorICAgICAgICB7CisgICAgICAgICAgQUZfU2VnbWVudCAgbGluayA9IHNlZy0+bGluazsKKworCisgICAgICAgICAgLyogY2hlY2sgd2hldGhlciBhbGwgbGlua2VkIHNlZ21lbnRzIG9mIHRoZSBjYW5kaWRhdGUgZWRnZSAqLworICAgICAgICAgIC8qIGNhbiBtYWtlIGEgc2luZ2xlIGVkZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGxpbmsgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFGX1NlZ21lbnQgIHNlZzEgID0gZWRnZS0+Zmlyc3Q7CisgICAgICAgICAgICBGVF9Qb3MgICAgICBkaXN0MiA9IDA7CisKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQUZfU2VnbWVudCAgbGluazEgPSBzZWcxLT5saW5rOworCisKKyAgICAgICAgICAgICAgaWYgKCBsaW5rMSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaXN0MiA9IEFGX1NFR01FTlRfRElTVCggbGluaywgbGluazEgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRpc3QyID49IGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkICkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gd2hpbGUgKCAoIHNlZzEgPSBzZWcxLT5lZGdlX25leHQgKSAhPSBlZGdlLT5maXJzdCApOworCisgICAgICAgICAgICBpZiAoIGRpc3QyID49IGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkICkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgYmVzdCAgPSBkaXN0OworICAgICAgICAgIGZvdW5kID0gZWRnZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICFmb3VuZCApCisgICAgICB7CisgICAgICAgIEFGX0VkZ2UgIGVkZ2U7CisKKworICAgICAgICAvKiBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUgbGlzdCBhbmQgKi8KKyAgICAgICAgLyogc29ydCBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uICAgICovCisgICAgICAgIGVycm9yID0gYWZfYXhpc19oaW50c19uZXdfZWRnZSggYXhpcywgc2VnLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFGX0RpcmVjdGlvbilzZWctPmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksICZlZGdlICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIG5ldyBlZGdlJ3MgbGlzdCAqLworICAgICAgICBGVF9aRVJPKCBlZGdlICk7CisKKyAgICAgICAgZWRnZS0+Zmlyc3QgICAgPSBzZWc7CisgICAgICAgIGVkZ2UtPmxhc3QgICAgID0gc2VnOworICAgICAgICBlZGdlLT5kaXIgICAgICA9IHNlZy0+ZGlyOworICAgICAgICBlZGdlLT5mcG9zICAgICA9IHNlZy0+cG9zOworICAgICAgICBlZGdlLT5vcG9zICAgICA9IEZUX011bEZpeCggc2VnLT5wb3MsIHNjYWxlICk7CisgICAgICAgIGVkZ2UtPnBvcyAgICAgID0gZWRnZS0+b3BvczsKKyAgICAgICAgc2VnLT5lZGdlX25leHQgPSBzZWc7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGlmIGFuIGVkZ2Ugd2FzIGZvdW5kLCBzaW1wbHkgYWRkIHRoZSBzZWdtZW50IHRvIHRoZSBlZGdlJ3MgKi8KKyAgICAgICAgLyogbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzZWctPmVkZ2VfbmV4dCAgICAgICAgID0gZm91bmQtPmZpcnN0OworICAgICAgICBmb3VuZC0+bGFzdC0+ZWRnZV9uZXh0ID0gc2VnOworICAgICAgICBmb3VuZC0+bGFzdCAgICAgICAgICAgID0gc2VnOworICAgICAgfQorICAgIH0KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBHb29kLCB3ZSBub3cgY29tcHV0ZSBlYWNoIGVkZ2UncyBwcm9wZXJ0aWVzIGFjY29yZGluZyB0byB0aGUgICAqLworICAgIC8qIHNlZ21lbnRzIGZvdW5kIG9uIGl0cyBwb3NpdGlvbi4gIEJhc2ljYWxseSwgdGhlc2UgYXJlICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgLSB0aGUgZWRnZSdzIG1haW4gZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAtIHN0ZW0gZWRnZSwgc2VyaWYgZWRnZSBvciBib3RoICh3aGljaCBkZWZhdWx0cyB0byBzdGVtIHRoZW4pICovCisgICAgLyogIC0gcm91bmRlZCBlZGdlLCBzdHJhaWdodCBvciBib3RoICh3aGljaCBkZWZhdWx0cyB0byBzdHJhaWdodCkgKi8KKyAgICAvKiAgLSBsaW5rIGZvciBlZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIC8qIGZpcnN0IG9mIGFsbCwgc2V0IHRoZSBgZWRnZScgZmllbGQgaW4gZWFjaCBzZWdtZW50IC0tIHRoaXMgaXMgKi8KKyAgICAvKiByZXF1aXJlZCBpbiBvcmRlciB0byBjb21wdXRlIGVkZ2UgbGlua3MgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKgorICAgICAqIE5vdGUgdGhhdCByZW1vdmluZyB0aGlzIGxvb3AgYW5kIHNldHRpbmcgdGhlIGBlZGdlJyBmaWVsZCBvZiBlYWNoCisgICAgICogc2VnbWVudCBkaXJlY3RseSBpbiB0aGUgY29kZSBhYm92ZSBzbG93cyBkb3duIGV4ZWN1dGlvbiBzcGVlZCBmb3IKKyAgICAgKiBzb21lIHJlYXNvbnMgb24gcGxhdGZvcm1zIGxpa2UgdGhlIFN1bi4KKyAgICAgKi8KKyAgICB7CisgICAgICBBRl9FZGdlICBlZGdlcyAgICAgID0gYXhpcy0+ZWRnZXM7CisgICAgICBBRl9FZGdlICBlZGdlX2xpbWl0ID0gZWRnZXMgKyBheGlzLT5udW1fZWRnZXM7CisgICAgICBBRl9FZGdlICBlZGdlOworCisKKyAgICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgICB7CisgICAgICAgIHNlZyA9IGVkZ2UtPmZpcnN0OworICAgICAgICBpZiAoIHNlZyApCisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBzZWctPmVkZ2UgPSBlZGdlOworICAgICAgICAgICAgc2VnICAgICAgID0gc2VnLT5lZGdlX25leHQ7CisKKyAgICAgICAgICB9IHdoaWxlICggc2VnICE9IGVkZ2UtPmZpcnN0ICk7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBjb21wdXRlIGVhY2ggZWRnZSBwcm9wZXJ0aWVzICovCisgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgICAgeworICAgICAgICBGVF9JbnQgIGlzX3JvdW5kICAgID0gMDsgIC8qIGRvZXMgaXQgY29udGFpbiByb3VuZCBzZWdtZW50cz8gICAgKi8KKyAgICAgICAgRlRfSW50ICBpc19zdHJhaWdodCA9IDA7ICAvKiBkb2VzIGl0IGNvbnRhaW4gc3RyYWlnaHQgc2VnbWVudHM/ICovCisKKworICAgICAgICBzZWcgPSBlZGdlLT5maXJzdDsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgRlRfQm9vbCAgaXNfc2VyaWY7CisKKworICAgICAgICAgIC8qIGNoZWNrIGZvciByb3VuZG5lc3Mgb2Ygc2VnbWVudCAqLworICAgICAgICAgIGlmICggc2VnLT5mbGFncyAmIEFGX0VER0VfUk9VTkQgKQorICAgICAgICAgICAgaXNfcm91bmQrKzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpc19zdHJhaWdodCsrOworCisgICAgICAgICAgLyogY2hlY2sgZm9yIGxpbmtzIC0tIGlmIHNlZy0+c2VyaWYgaXMgc2V0LCB0aGVuIHNlZy0+bGluayBtdXN0ICovCisgICAgICAgICAgLyogYmUgaWdub3JlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaXNfc2VyaWYgPSAoRlRfQm9vbCkoIHNlZy0+c2VyaWYgJiYgc2VnLT5zZXJpZi0+ZWRnZSAhPSBlZGdlICk7CisKKyAgICAgICAgICBpZiAoIHNlZy0+bGluayB8fCBpc19zZXJpZiApCisgICAgICAgICAgeworICAgICAgICAgICAgQUZfRWRnZSAgICAgZWRnZTI7CisgICAgICAgICAgICBBRl9TZWdtZW50ICBzZWcyOworCisKKyAgICAgICAgICAgIGVkZ2UyID0gZWRnZS0+bGluazsKKyAgICAgICAgICAgIHNlZzIgID0gc2VnLT5saW5rOworCisgICAgICAgICAgICBpZiAoIGlzX3NlcmlmICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2VnMiAgPSBzZWctPnNlcmlmOworICAgICAgICAgICAgICBlZGdlMiA9IGVkZ2UtPnNlcmlmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVkZ2UyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfUG9zICBlZGdlX2RlbHRhOworICAgICAgICAgICAgICBGVF9Qb3MgIHNlZ19kZWx0YTsKKworCisgICAgICAgICAgICAgIGVkZ2VfZGVsdGEgPSBlZGdlLT5mcG9zIC0gZWRnZTItPmZwb3M7CisgICAgICAgICAgICAgIGlmICggZWRnZV9kZWx0YSA8IDAgKQorICAgICAgICAgICAgICAgIGVkZ2VfZGVsdGEgPSAtZWRnZV9kZWx0YTsKKworICAgICAgICAgICAgICBzZWdfZGVsdGEgPSBBRl9TRUdNRU5UX0RJU1QoIHNlZywgc2VnMiApOworCisgICAgICAgICAgICAgIGlmICggc2VnX2RlbHRhIDwgZWRnZV9kZWx0YSApCisgICAgICAgICAgICAgICAgZWRnZTIgPSBzZWcyLT5lZGdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlZGdlMiA9IHNlZzItPmVkZ2U7CisKKyAgICAgICAgICAgIGlmICggaXNfc2VyaWYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlZGdlLT5zZXJpZiAgID0gZWRnZTI7CisgICAgICAgICAgICAgIGVkZ2UyLT5mbGFncyB8PSBBRl9FREdFX1NFUklGOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlZGdlLT5saW5rICA9IGVkZ2UyOworICAgICAgICAgIH0KKworICAgICAgICAgIHNlZyA9IHNlZy0+ZWRnZV9uZXh0OworCisgICAgICAgIH0gd2hpbGUgKCBzZWcgIT0gZWRnZS0+Zmlyc3QgKTsKKworICAgICAgICAvKiBzZXQgdGhlIHJvdW5kL3N0cmFpZ2h0IGZsYWdzICovCisgICAgICAgIGVkZ2UtPmZsYWdzID0gQUZfRURHRV9OT1JNQUw7CisKKyAgICAgICAgaWYgKCBpc19yb3VuZCA+IDAgJiYgaXNfcm91bmQgPj0gaXNfc3RyYWlnaHQgKQorICAgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfUk9VTkQ7CisKKyAgICAgICAgLyogZ2V0IHJpZCBvZiBzZXJpZnMgaWYgbGluayBpcyBzZXQgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFhYWDogVGhpcyBnZXRzIHJpZCBvZiBtYW55IHVucGxlYXNhbnQgYXJ0ZWZhY3RzISAqLworICAgICAgICAvKiAgICAgIEV4YW1wbGU6IHRoZSBgYycgaW4gY291ci5wZmEgYXQgc2l6ZSAxMyAgICAgKi8KKworICAgICAgICBpZiAoIGVkZ2UtPnNlcmlmICYmIGVkZ2UtPmxpbmsgKQorICAgICAgICAgIGVkZ2UtPnNlcmlmID0gTlVMTDsKKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIERldGVjdCBzZWdtZW50cyBhbmQgZWRnZXMgZm9yIGdpdmVuIGRpbWVuc2lvbi4gKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZfY2prX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gYWZfY2prX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMoIGhpbnRzLCBkaW0gKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgYWZfY2prX2hpbnRzX2xpbmtfc2VnbWVudHMoIGhpbnRzLCBkaW0gKTsKKworICAgICAgZXJyb3IgPSBhZl9jamtfaGludHNfY29tcHV0ZV9lZGdlcyggaGludHMsIGRpbSApOworICAgIH0KKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIENvbXB1dGUgYWxsIGVkZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYmx1ZSB6b25lcy4gKi8KKworICBzdGF0aWMgdm9pZAorICBhZl9jamtfaGludHNfY29tcHV0ZV9ibHVlX2VkZ2VzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEFGX0VkZ2UgICAgICAgZWRnZSAgICAgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX0VkZ2UgICAgICAgZWRnZV9saW1pdCA9IGVkZ2UgKyBheGlzLT5udW1fZWRnZXM7CisgICAgQUZfQ0pLQXhpcyAgICBjamsgICAgICAgID0gJm1ldHJpY3MtPmF4aXNbZGltXTsKKyAgICBGVF9GaXhlZCAgICAgIHNjYWxlICAgICAgPSBjamstPnNjYWxlOworICAgIEZUX1BvcyAgICAgICAgYmVzdF9kaXN0MDsgIC8qIGluaXRpYWwgdGhyZXNob2xkICovCisKKworICAgIC8qIGNvbXB1dGUgdGhlIGluaXRpYWwgdGhyZXNob2xkIGFzIGEgZnJhY3Rpb24gb2YgdGhlIEVNIHNpemUgKi8KKyAgICBiZXN0X2Rpc3QwID0gRlRfTXVsRml4KCBtZXRyaWNzLT51bml0c19wZXJfZW0gLyA0MCwgc2NhbGUgKTsKKworICAgIGlmICggYmVzdF9kaXN0MCA+IDY0IC8gMiApIC8qIG1heGltdW0gMS8yIHBpeGVsICovCisgICAgICBiZXN0X2Rpc3QwID0gNjQgLyAyOworCisgICAgLyogY29tcHV0ZSB3aGljaCBibHVlIHpvbmVzIGFyZSBhY3RpdmUsIGkuZS4gaGF2ZSB0aGVpciBzY2FsZWQgKi8KKyAgICAvKiBzaXplIDwgMy80IHBpeGVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogSWYgdGhlIGRpc3RhbnQgYmV0d2VlbiBhbiBlZGdlIGFuZCBhIGJsdWUgem9uZSBpcyBzaG9ydGVyIHRoYW4gKi8KKyAgICAvKiBiZXN0X2Rpc3QwLCBzZXQgdGhlIGJsdWUgem9uZSBmb3IgdGhlIGVkZ2UuICBUaGVuIHNlYXJjaCBmb3IgICAqLworICAgIC8qIHRoZSBibHVlIHpvbmUgd2l0aCB0aGUgc21hbGxlc3QgYmVzdF9kaXN0IHRvIHRoZSBlZGdlLiAgICAgICAgICovCisKKyAgICBmb3IgKCA7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICBiYjsKKyAgICAgIEFGX1dpZHRoICBiZXN0X2JsdWUgPSBOVUxMOworICAgICAgRlRfUG9zICAgIGJlc3RfZGlzdCA9IGJlc3RfZGlzdDA7CisKKworICAgICAgZm9yICggYmIgPSAwOyBiYiA8IGNqay0+Ymx1ZV9jb3VudDsgYmIrKyApCisgICAgICB7CisgICAgICAgIEFGX0NKS0JsdWUgIGJsdWUgPSBjamstPmJsdWVzICsgYmI7CisgICAgICAgIEZUX0Jvb2wgICAgIGlzX3RvcF9yaWdodF9ibHVlLCBpc19tYWpvcl9kaXI7CisKKworICAgICAgICAvKiBza2lwIGluYWN0aXZlIGJsdWUgem9uZXMgKGkuZS4sIHRob3NlIHRoYXQgYXJlIHRvbyBzbWFsbCkgKi8KKyAgICAgICAgaWYgKCAhKCBibHVlLT5mbGFncyAmIEFGX0NKS19CTFVFX0FDVElWRSApICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBpZiBpdCBpcyBhIHRvcCB6b25lLCBjaGVjayBmb3IgcmlnaHQgZWRnZXMgLS0gaWYgaXQgaXMgYSBib3R0b20gKi8KKyAgICAgICAgLyogem9uZSwgY2hlY2sgZm9yIGxlZnQgZWRnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBvZiBjb3Vyc2UsIHRoYXQncyBmb3IgVHJ1ZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaXNfdG9wX3JpZ2h0X2JsdWUgPQorICAgICAgICAgIChGVF9CeXRlKSggKCBibHVlLT5mbGFncyAmIEFGX0NKS19CTFVFX1RPUCApICE9IDAgKTsKKyAgICAgICAgaXNfbWFqb3JfZGlyID0KKyAgICAgICAgICBGVF9CT09MKCBlZGdlLT5kaXIgPT0gYXhpcy0+bWFqb3JfZGlyICk7CisKKyAgICAgICAgLyogaWYgaXQgaXMgYSB0b3Agem9uZSwgdGhlIGVkZ2UgbXVzdCBiZSBhZ2FpbnN0IHRoZSBtYWpvciAgICAqLworICAgICAgICAvKiBkaXJlY3Rpb247IGlmIGl0IGlzIGEgYm90dG9tIHpvbmUsIGl0IG11c3QgYmUgaW4gdGhlIG1ham9yICovCisgICAgICAgIC8qIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc190b3BfcmlnaHRfYmx1ZSBeIGlzX21ham9yX2RpciApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Qb3MgICAgZGlzdDsKKyAgICAgICAgICBBRl9XaWR0aCAgY29tcGFyZTsKKworCisgICAgICAgICAgLyogQ29tcGFyZSB0aGUgZWRnZSB0byB0aGUgY2xvc2VzdCBibHVlIHpvbmUgdHlwZSAqLworICAgICAgICAgIGlmICggRlRfQUJTKCBlZGdlLT5mcG9zIC0gYmx1ZS0+cmVmLm9yZyApID4KKyAgICAgICAgICAgICAgIEZUX0FCUyggZWRnZS0+ZnBvcyAtIGJsdWUtPnNob290Lm9yZyApICkKKyAgICAgICAgICAgIGNvbXBhcmUgPSAmYmx1ZS0+c2hvb3Q7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZSA9ICZibHVlLT5yZWY7CisKKyAgICAgICAgICBkaXN0ID0gZWRnZS0+ZnBvcyAtIGNvbXBhcmUtPm9yZzsKKyAgICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICAgIGRpc3QgPSBGVF9NdWxGaXgoIGRpc3QsIHNjYWxlICk7CisgICAgICAgICAgaWYgKCBkaXN0IDwgYmVzdF9kaXN0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBiZXN0X2Rpc3QgPSBkaXN0OworICAgICAgICAgICAgYmVzdF9ibHVlID0gY29tcGFyZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBiZXN0X2JsdWUgKQorICAgICAgICBlZGdlLT5ibHVlX2VkZ2UgPSBiZXN0X2JsdWU7CisgICAgfQorICB9CisKKworICAvKiBJbml0YWxpemUgaGludGluZyBlbmdpbmUuICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGFmX2Nqa19oaW50c19pbml0KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MgKQorICB7CisgICAgRlRfUmVuZGVyX01vZGUgIG1vZGU7CisgICAgRlRfVUludDMyICAgICAgIHNjYWxlcl9mbGFncywgb3RoZXJfZmxhZ3M7CisKKworICAgIGFmX2dseXBoX2hpbnRzX3Jlc2NhbGUoIGhpbnRzLCAoQUZfU3R5bGVNZXRyaWNzKW1ldHJpY3MgKTsKKworICAgIC8qCisgICAgICogIGNvcnJlY3QgeF9zY2FsZSBhbmQgeV9zY2FsZSB3aGVuIG5lZWRlZCwgc2luY2UgdGhleSBtYXkgaGF2ZQorICAgICAqICBiZWVuIG1vZGlmaWVkIGFmX2Nqa19zY2FsZV9kaW0gYWJvdmUKKyAgICAgKi8KKyAgICBoaW50cy0+eF9zY2FsZSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLnNjYWxlOworICAgIGhpbnRzLT54X2RlbHRhID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0uZGVsdGE7CisgICAgaGludHMtPnlfc2NhbGUgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXS5zY2FsZTsKKyAgICBoaW50cy0+eV9kZWx0YSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLmRlbHRhOworCisgICAgLyogY29tcHV0ZSBmbGFncyBkZXBlbmRpbmcgb24gcmVuZGVyIG1vZGUsIGV0Yy4gKi8KKyAgICBtb2RlID0gbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGU7CisKKyNpZiAwIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9IG1vZGUgPSBGVF9SRU5ERVJfTU9ERV9OT1JNQUw7CisjZW5kaWYKKworICAgIHNjYWxlcl9mbGFncyA9IGhpbnRzLT5zY2FsZXJfZmxhZ3M7CisgICAgb3RoZXJfZmxhZ3MgID0gMDsKKworICAgIC8qCisgICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIHZlcnRpY2FsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiAgaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19IT1JaX1NOQVA7CisKKyAgICAvKgorICAgICAqICBXZSBzbmFwIHRoZSB3aWR0aCBvZiBob3Jpem9udGFsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiAgdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCisgICAgICovCisgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19WRVJUX1NOQVA7CisKKyAgICAvKgorICAgICAqICBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgb25seSBpZiB3ZSBkb24ndCB1c2UgdGhlIGBsaWdodCcgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfU1RFTV9BREpVU1Q7CisKKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19NT05POworCisgICAgc2NhbGVyX2ZsYWdzIHw9IEFGX1NDQUxFUl9GTEFHX05PX0FEVkFOQ0U7CisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyAgICAvKiBnZXQgKGdsb2JhbCkgd2FycGVyIGZsYWcgKi8KKyAgICBpZiAoICFtZXRyaWNzLT5yb290Lmdsb2JhbHMtPm1vZHVsZS0+d2FycGluZyApCisgICAgICBzY2FsZXJfZmxhZ3MgfD0gQUZfU0NBTEVSX0ZMQUdfTk9fV0FSUEVSOworI2VuZGlmCisKKyAgICBoaW50cy0+c2NhbGVyX2ZsYWdzID0gc2NhbGVyX2ZsYWdzOworICAgIGhpbnRzLT5vdGhlcl9mbGFncyAgPSBvdGhlcl9mbGFnczsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICBDIEogSyAgIEcgTCBZIFAgSCAgIEcgUiBJIEQgLSBGIEkgVCBUIEkgTiBHICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIFNuYXAgYSBnaXZlbiB3aWR0aCBpbiBzY2FsZWQgY29vcmRpbmF0ZXMgdG8gb25lIG9mIHRoZSAqLworICAvKiBjdXJyZW50IHN0YW5kYXJkIHdpZHRocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfUG9zCisgIGFmX2Nqa19zbmFwX3dpZHRoKCBBRl9XaWR0aCAgd2lkdGhzLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgIHdpZHRoICkKKyAgeworICAgIEZUX1VJbnQgIG47CisgICAgRlRfUG9zICAgYmVzdCAgICAgID0gNjQgKyAzMiArIDI7CisgICAgRlRfUG9zICAgcmVmZXJlbmNlID0gd2lkdGg7CisgICAgRlRfUG9zICAgc2NhbGVkOworCisKKyAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKysgKQorICAgIHsKKyAgICAgIEZUX1BvcyAgdzsKKyAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICB3ID0gd2lkdGhzW25dLmN1cjsKKyAgICAgIGRpc3QgPSB3aWR0aCAtIHc7CisgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgZGlzdCA9IC1kaXN0OworICAgICAgaWYgKCBkaXN0IDwgYmVzdCApCisgICAgICB7CisgICAgICAgIGJlc3QgICAgICA9IGRpc3Q7CisgICAgICAgIHJlZmVyZW5jZSA9IHc7CisgICAgICB9CisgICAgfQorCisgICAgc2NhbGVkID0gRlRfUElYX1JPVU5EKCByZWZlcmVuY2UgKTsKKworICAgIGlmICggd2lkdGggPj0gcmVmZXJlbmNlICkKKyAgICB7CisgICAgICBpZiAoIHdpZHRoIDwgc2NhbGVkICsgNDggKQorICAgICAgICB3aWR0aCA9IHJlZmVyZW5jZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggd2lkdGggPiBzY2FsZWQgLSA0OCApCisgICAgICAgIHdpZHRoID0gcmVmZXJlbmNlOworICAgIH0KKworICAgIHJldHVybiB3aWR0aDsKKyAgfQorCisKKyAgLyogQ29tcHV0ZSB0aGUgc25hcHBlZCB3aWR0aCBvZiBhIGdpdmVuIHN0ZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVyZSBpcyBhIGxvdCBvZiB2b29kb28gaW4gdGhpcyBmdW5jdGlvbjsgY2hhbmdpbmcgdGhlIGhhcmQtY29kZWQgICovCisgIC8qIHBhcmFtZXRlcnMgaW5mbHVlbmNlIHRoZSB3aG9sZSBoaW50aW5nIHByb2Nlc3MuICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfUG9zCisgIGFmX2Nqa19jb21wdXRlX3N0ZW1fd2lkdGgoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBiYXNlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBzdGVtX2ZsYWdzICkKKyAgeworICAgIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MgID0gKEFGX0NKS01ldHJpY3MpaGludHMtPm1ldHJpY3M7CisgICAgQUZfQ0pLQXhpcyAgICAgYXhpcyAgICAgPSAmbWV0cmljcy0+YXhpc1tkaW1dOworICAgIEZUX1BvcyAgICAgICAgIGRpc3QgICAgID0gd2lkdGg7CisgICAgRlRfSW50ICAgICAgICAgc2lnbiAgICAgPSAwOworICAgIEZUX0Jvb2wgICAgICAgIHZlcnRpY2FsID0gRlRfQk9PTCggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICk7CisKKyAgICBGVF9VTlVTRUQoIGJhc2VfZmxhZ3MgKTsKKyAgICBGVF9VTlVTRUQoIHN0ZW1fZmxhZ3MgKTsKKworCisgICAgaWYgKCAhQUZfTEFUSU5fSElOVFNfRE9fU1RFTV9BREpVU1QoIGhpbnRzICkgKQorICAgICAgcmV0dXJuIHdpZHRoOworCisgICAgaWYgKCBkaXN0IDwgMCApCisgICAgeworICAgICAgZGlzdCA9IC13aWR0aDsKKyAgICAgIHNpZ24gPSAxOworICAgIH0KKworICAgIGlmICggKCAgdmVydGljYWwgJiYgIUFGX0xBVElOX0hJTlRTX0RPX1ZFUlRfU05BUCggaGludHMgKSApIHx8CisgICAgICAgICAoICF2ZXJ0aWNhbCAmJiAhQUZfTEFUSU5fSElOVFNfRE9fSE9SWl9TTkFQKCBoaW50cyApICkgKQorICAgIHsKKyAgICAgIC8qIHNtb290aCBoaW50aW5nIHByb2Nlc3M6IHZlcnkgbGlnaHRseSBxdWFudGl6ZSB0aGUgc3RlbSB3aWR0aCAqLworCisgICAgICBpZiAoIGF4aXMtPndpZHRoX2NvdW50ID4gMCApCisgICAgICB7CisgICAgICAgIGlmICggRlRfQUJTKCBkaXN0IC0gYXhpcy0+d2lkdGhzWzBdLmN1ciApIDwgNDAgKQorICAgICAgICB7CisgICAgICAgICAgZGlzdCA9IGF4aXMtPndpZHRoc1swXS5jdXI7CisgICAgICAgICAgaWYgKCBkaXN0IDwgNDggKQorICAgICAgICAgICAgZGlzdCA9IDQ4OworCisgICAgICAgICAgZ290byBEb25lX1dpZHRoOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggZGlzdCA8IDU0ICkKKyAgICAgICAgZGlzdCArPSAoIDU0IC0gZGlzdCApIC8gMiA7CisgICAgICBlbHNlIGlmICggZGlzdCA8IDMgKiA2NCApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgZGVsdGE7CisKKworICAgICAgICBkZWx0YSAgPSBkaXN0ICYgNjM7CisgICAgICAgIGRpc3QgICY9IC02NDsKKworICAgICAgICBpZiAoIGRlbHRhIDwgMTAgKQorICAgICAgICAgIGRpc3QgKz0gZGVsdGE7CisgICAgICAgIGVsc2UgaWYgKCBkZWx0YSA8IDIyICkKKyAgICAgICAgICBkaXN0ICs9IDEwOworICAgICAgICBlbHNlIGlmICggZGVsdGEgPCA0MiApCisgICAgICAgICAgZGlzdCArPSBkZWx0YTsKKyAgICAgICAgZWxzZSBpZiAoIGRlbHRhIDwgNTQgKQorICAgICAgICAgIGRpc3QgKz0gNTQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBkaXN0ICs9IGRlbHRhOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogc3Ryb25nIGhpbnRpbmcgcHJvY2Vzczogc25hcCB0aGUgc3RlbSB3aWR0aCB0byBpbnRlZ2VyIHBpeGVscyAqLworCisgICAgICBkaXN0ID0gYWZfY2prX3NuYXBfd2lkdGgoIGF4aXMtPndpZHRocywgYXhpcy0+d2lkdGhfY291bnQsIGRpc3QgKTsKKworICAgICAgaWYgKCB2ZXJ0aWNhbCApCisgICAgICB7CisgICAgICAgIC8qIGluIHRoZSBjYXNlIG9mIHZlcnRpY2FsIGhpbnRpbmcsIGFsd2F5cyByb3VuZCAqLworICAgICAgICAvKiB0aGUgc3RlbSBoZWlnaHRzIHRvIGludGVnZXIgcGl4ZWxzICAgICAgICAgICAgKi8KKworICAgICAgICBpZiAoIGRpc3QgPj0gNjQgKQorICAgICAgICAgIGRpc3QgPSAoIGRpc3QgKyAxNiApICYgfjYzOworICAgICAgICBlbHNlCisgICAgICAgICAgZGlzdCA9IDY0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEFGX0xBVElOX0hJTlRTX0RPX01PTk8oIGhpbnRzICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogbW9ub2Nocm9tZSBob3Jpem9udGFsIGhpbnRpbmc6IHNuYXAgd2lkdGhzIHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgICAgICAgLyogd2l0aCBhIGRpZmZlcmVudCB0aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA2NCApCisgICAgICAgICAgICBkaXN0ID0gNjQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogZm9yIGhvcml6b250YWwgYW50aS1hbGlhc2VkIGhpbnRpbmcsIHdlIGFkb3B0IGEgbW9yZSBzdWJ0bGUgKi8KKyAgICAgICAgICAvKiBhcHByb2FjaDogd2Ugc3RyZW5ndGhlbiBzbWFsbCBzdGVtcywgcm91bmQgc3RlbXMgd2hvc2Ugc2l6ZSAqLworICAgICAgICAgIC8qIGlzIGJldHdlZW4gMSBhbmQgMiBwaXhlbHMgdG8gYW4gaW50ZWdlciwgb3RoZXJ3aXNlIG5vdGhpbmcgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA0OCApCisgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgNjQgKSA+PiAxOworCisgICAgICAgICAgZWxzZSBpZiAoIGRpc3QgPCAxMjggKQorICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDIyICkgJiB+NjM7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogcm91bmQgb3RoZXJ3aXNlIHRvIHByZXZlbnQgY29sb3IgZnJpbmdlcyBpbiBMQ0QgbW9kZSAqLworICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRG9uZV9XaWR0aDoKKyAgICBpZiAoIHNpZ24gKQorICAgICAgZGlzdCA9IC1kaXN0OworCisgICAgcmV0dXJuIGRpc3Q7CisgIH0KKworCisgIC8qIEFsaWduIG9uZSBzdGVtIGVkZ2UgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHN0ZW0gZWRnZS4gKi8KKworICBzdGF0aWMgdm9pZAorICBhZl9jamtfYWxpZ25fbGlua2VkX2VkZ2UoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9FZGdlICAgICAgICBiYXNlX2VkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgc3RlbV9lZGdlICkKKyAgeworICAgIEZUX1BvcyAgZGlzdCA9IHN0ZW1fZWRnZS0+b3BvcyAtIGJhc2VfZWRnZS0+b3BvczsKKworICAgIEZUX1BvcyAgZml0dGVkX3dpZHRoID0gYWZfY2prX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZWRnZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtX2VkZ2UtPmZsYWdzICk7CisKKworICAgIHN0ZW1fZWRnZS0+cG9zID0gYmFzZV9lZGdlLT5wb3MgKyBmaXR0ZWRfd2lkdGg7CisKKyAgICBGVF9UUkFDRTUoKCAiICBDSktMSU5LOiBlZGdlICVkIEAlZCAob3Bvcz0lLjJmKSBsaW5rZWQgdG8gJS4yZiwiCisgICAgICAgICAgICAgICAgIiBkaXN0IHdhcyAlLjJmLCBub3cgJS4yZlxuIiwKKyAgICAgICAgICAgICAgICBzdGVtX2VkZ2UgLSBoaW50cy0+YXhpc1tkaW1dLmVkZ2VzLCBzdGVtX2VkZ2UtPmZwb3MsCisgICAgICAgICAgICAgICAgc3RlbV9lZGdlLT5vcG9zIC8gNjQuMCwgc3RlbV9lZGdlLT5wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgIGRpc3QgLyA2NC4wLCBmaXR0ZWRfd2lkdGggLyA2NC4wICkpOworICB9CisKKworICAvKiBTaGlmdCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGBzZXJpZicgZWRnZSBieSB0aGUgc2FtZSBhbW91bnQgKi8KKyAgLyogYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGJhc2UnIGVkZ2UgaGFzIGJlZW4gbW92ZWQgYWxyZWFkeS4gICAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfY2prX2FsaWduX3NlcmlmX2VkZ2UoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIHNlcmlmICkKKyAgeworICAgIEZUX1VOVVNFRCggaGludHMgKTsKKworICAgIHNlcmlmLT5wb3MgPSBiYXNlLT5wb3MgKyAoIHNlcmlmLT5vcG9zIC0gYmFzZS0+b3BvcyApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgIEUgRCBHIEUgICBIIEkgTiBUIEkgTiBHICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgQUZfTElHSFRfTU9ERV9NQVhfSE9SWl9HQVAgICAgOQorI2RlZmluZSBBRl9MSUdIVF9NT0RFX01BWF9WRVJUX0dBUCAgIDE1CisjZGVmaW5lIEFGX0xJR0hUX01PREVfTUFYX0RFTFRBX0FCUyAgMTQKKworCisgIHN0YXRpYyBGVF9Qb3MKKyAgYWZfaGludF9ub3JtYWxfc3RlbSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIGVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIGVkZ2UyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICBhbmNob3IsCisgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBGVF9Qb3MgIG9yZ19sZW4sIGN1cl9sZW4sIG9yZ19jZW50ZXI7CisgICAgRlRfUG9zICBjdXJfcG9zMSwgY3VyX3BvczI7CisgICAgRlRfUG9zICBkX29mZjEsIHVfb2ZmMSwgZF9vZmYyLCB1X29mZjIsIGRlbHRhOworICAgIEZUX1BvcyAgb2Zmc2V0OworICAgIEZUX1BvcyAgdGhyZXNob2xkID0gNjQ7CisKKworICAgIGlmICggIUFGX0xBVElOX0hJTlRTX0RPX1NURU1fQURKVVNUKCBoaW50cyApICkKKyAgICB7CisgICAgICBpZiAoICggZWRnZS0+ZmxhZ3MgICYgQUZfRURHRV9ST1VORCApICYmCisgICAgICAgICAgICggZWRnZTItPmZsYWdzICYgQUZfRURHRV9ST1VORCApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKQorICAgICAgICAgIHRocmVzaG9sZCA9IDY0IC0gQUZfTElHSFRfTU9ERV9NQVhfSE9SWl9HQVA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aHJlc2hvbGQgPSA2NCAtIEFGX0xJR0hUX01PREVfTUFYX1ZFUlRfR0FQOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApCisgICAgICAgICAgdGhyZXNob2xkID0gNjQgLSBBRl9MSUdIVF9NT0RFX01BWF9IT1JaX0dBUCAvIDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aHJlc2hvbGQgPSA2NCAtIEFGX0xJR0hUX01PREVfTUFYX1ZFUlRfR0FQIC8gMzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBvcmdfbGVuICAgID0gZWRnZTItPm9wb3MgLSBlZGdlLT5vcG9zOworICAgIGN1cl9sZW4gICAgPSBhZl9jamtfY29tcHV0ZV9zdGVtX3dpZHRoKCBoaW50cywgZGltLCBvcmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZTItPmZsYWdzICk7CisKKyAgICBvcmdfY2VudGVyID0gKCBlZGdlLT5vcG9zICsgZWRnZTItPm9wb3MgKSAvIDIgKyBhbmNob3I7CisgICAgY3VyX3BvczEgICA9IG9yZ19jZW50ZXIgLSBjdXJfbGVuIC8gMjsKKyAgICBjdXJfcG9zMiAgID0gY3VyX3BvczEgKyBjdXJfbGVuOworICAgIGRfb2ZmMSAgICAgPSBjdXJfcG9zMSAtIEZUX1BJWF9GTE9PUiggY3VyX3BvczEgKTsKKyAgICBkX29mZjIgICAgID0gY3VyX3BvczIgLSBGVF9QSVhfRkxPT1IoIGN1cl9wb3MyICk7CisgICAgdV9vZmYxICAgICA9IDY0IC0gZF9vZmYxOworICAgIHVfb2ZmMiAgICAgPSA2NCAtIGRfb2ZmMjsKKyAgICBkZWx0YSAgICAgID0gMDsKKworCisgICAgaWYgKCBkX29mZjEgPT0gMCB8fCBkX29mZjIgPT0gMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGN1cl9sZW4gPD0gdGhyZXNob2xkICkKKyAgICB7CisgICAgICBpZiAoIGRfb2ZmMiA8IGN1cl9sZW4gKQorICAgICAgeworICAgICAgICBpZiAoIHVfb2ZmMSA8PSBkX29mZjIgKQorICAgICAgICAgIGRlbHRhID0gIHVfb2ZmMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRlbHRhID0gLWRfb2ZmMjsKKyAgICAgIH0KKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggdGhyZXNob2xkIDwgNjQgKQorICAgIHsKKyAgICAgIGlmICggZF9vZmYxID49IHRocmVzaG9sZCB8fCB1X29mZjEgPj0gdGhyZXNob2xkIHx8CisgICAgICAgICAgIGRfb2ZmMiA+PSB0aHJlc2hvbGQgfHwgdV9vZmYyID49IHRocmVzaG9sZCApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBvZmZzZXQgPSBjdXJfbGVuICYgNjM7CisKKyAgICBpZiAoIG9mZnNldCA8IDMyICkKKyAgICB7CisgICAgICBpZiAoIHVfb2ZmMSA8PSBvZmZzZXQgfHwgZF9vZmYyIDw9IG9mZnNldCApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZQorICAgICAgb2Zmc2V0ID0gNjQgLSB0aHJlc2hvbGQ7CisKKyAgICBkX29mZjEgPSB0aHJlc2hvbGQgLSB1X29mZjE7CisgICAgdV9vZmYxID0gdV9vZmYxICAgIC0gb2Zmc2V0OworICAgIHVfb2ZmMiA9IHRocmVzaG9sZCAtIGRfb2ZmMjsKKyAgICBkX29mZjIgPSBkX29mZjIgICAgLSBvZmZzZXQ7CisKKyAgICBpZiAoIGRfb2ZmMSA8PSB1X29mZjEgKQorICAgICAgdV9vZmYxID0gLWRfb2ZmMTsKKworICAgIGlmICggZF9vZmYyIDw9IHVfb2ZmMiApCisgICAgICB1X29mZjIgPSAtZF9vZmYyOworCisgICAgaWYgKCBGVF9BQlMoIHVfb2ZmMSApIDw9IEZUX0FCUyggdV9vZmYyICkgKQorICAgICAgZGVsdGEgPSB1X29mZjE7CisgICAgZWxzZQorICAgICAgZGVsdGEgPSB1X29mZjI7CisKKyAgRXhpdDoKKworI2lmIDEKKyAgICBpZiAoICFBRl9MQVRJTl9ISU5UU19ET19TVEVNX0FESlVTVCggaGludHMgKSApCisgICAgeworICAgICAgaWYgKCBkZWx0YSA+IEFGX0xJR0hUX01PREVfTUFYX0RFTFRBX0FCUyApCisgICAgICAgIGRlbHRhID0gQUZfTElHSFRfTU9ERV9NQVhfREVMVEFfQUJTOworICAgICAgZWxzZSBpZiAoIGRlbHRhIDwgLUFGX0xJR0hUX01PREVfTUFYX0RFTFRBX0FCUyApCisgICAgICAgIGRlbHRhID0gLUFGX0xJR0hUX01PREVfTUFYX0RFTFRBX0FCUzsKKyAgICB9CisjZW5kaWYKKworICAgIGN1cl9wb3MxICs9IGRlbHRhOworCisgICAgaWYgKCBlZGdlLT5vcG9zIDwgZWRnZTItPm9wb3MgKQorICAgIHsKKyAgICAgIGVkZ2UtPnBvcyAgPSBjdXJfcG9zMTsKKyAgICAgIGVkZ2UyLT5wb3MgPSBjdXJfcG9zMSArIGN1cl9sZW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBlZGdlLT5wb3MgID0gY3VyX3BvczEgKyBjdXJfbGVuOworICAgICAgZWRnZTItPnBvcyA9IGN1cl9wb3MxOworICAgIH0KKworICAgIHJldHVybiBkZWx0YTsKKyAgfQorCisKKyAgLyogVGhlIG1haW4gZ3JpZC1maXR0aW5nIHJvdXRpbmUuICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfY2prX2hpbnRfZWRnZXMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEFGX0VkZ2UgICAgICAgZWRnZXMgICAgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX0VkZ2UgICAgICAgZWRnZV9saW1pdCA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOworICAgIEZUX1B0ckRpc3QgICAgbl9lZGdlczsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2U7CisgICAgQUZfRWRnZSAgICAgICBhbmNob3IgICA9IE5VTEw7CisgICAgRlRfUG9zICAgICAgICBkZWx0YSAgICA9IDA7CisgICAgRlRfSW50ICAgICAgICBza2lwcGVkICA9IDA7CisgICAgRlRfQm9vbCAgICAgICBoYXNfbGFzdF9zdGVtID0gRkFMU0U7CisgICAgRlRfUG9zICAgICAgICBsYXN0X3N0ZW1fcG9zID0gMDsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgRlRfVUludCAgICAgICBudW1fYWN0aW9ucyA9IDA7CisjZW5kaWYKKworCisgICAgRlRfVFJBQ0U1KCggImNqayAlcyBlZGdlIGhpbnRpbmcgKHN0eWxlIGAlcycpXG4iLAorICAgICAgICAgICAgICAgIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIsCisgICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbaGludHMtPm1ldHJpY3MtPnN0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CisKKyAgICAvKiB3ZSBiZWdpbiBieSBhbGlnbmluZyBhbGwgc3RlbXMgcmVsYXRpdmUgdG8gdGhlIGJsdWUgem9uZSAqLworCisgICAgaWYgKCBBRl9ISU5UU19ET19CTFVFUyggaGludHMgKSApCisgICAgeworICAgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICAgIHsKKyAgICAgICAgQUZfV2lkdGggIGJsdWU7CisgICAgICAgIEFGX0VkZ2UgICBlZGdlMSwgZWRnZTI7CisKKworICAgICAgICBpZiAoIGVkZ2UtPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBibHVlICA9IGVkZ2UtPmJsdWVfZWRnZTsKKyAgICAgICAgZWRnZTEgPSBOVUxMOworICAgICAgICBlZGdlMiA9IGVkZ2UtPmxpbms7CisKKyAgICAgICAgaWYgKCBibHVlICkKKyAgICAgICAgeworICAgICAgICAgIGVkZ2UxID0gZWRnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZWRnZTIgJiYgZWRnZTItPmJsdWVfZWRnZSApCisgICAgICAgIHsKKyAgICAgICAgICBibHVlICA9IGVkZ2UyLT5ibHVlX2VkZ2U7CisgICAgICAgICAgZWRnZTEgPSBlZGdlMjsKKyAgICAgICAgICBlZGdlMiA9IGVkZ2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFlZGdlMSApCisgICAgICAgICAgY29udGludWU7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBGVF9UUkFDRTUoKCAiICBDSktCTFVFOiBlZGdlICVkIEAlZCAob3Bvcz0lLjJmKSBzbmFwcGVkIHRvICUuMmYsIgorICAgICAgICAgICAgICAgICAgICAiIHdhcyAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICBlZGdlMSAtIGVkZ2VzLCBlZGdlMS0+ZnBvcywgZWRnZTEtPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICBibHVlLT5maXQgLyA2NC4wLCBlZGdlMS0+cG9zIC8gNjQuMCApKTsKKworICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisKKyAgICAgICAgZWRnZTEtPnBvcyAgICA9IGJsdWUtPmZpdDsKKyAgICAgICAgZWRnZTEtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBpZiAoIGVkZ2UyICYmICFlZGdlMi0+Ymx1ZV9lZGdlICkKKyAgICAgICAgeworICAgICAgICAgIGFmX2Nqa19hbGlnbl9saW5rZWRfZWRnZSggaGludHMsIGRpbSwgZWRnZTEsIGVkZ2UyICk7CisgICAgICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhYW5jaG9yICkKKyAgICAgICAgICBhbmNob3IgPSBlZGdlOworICAgICAgfQorICAgIH0KKworICAgIC8qIG5vdyB3ZSBhbGlnbiBhbGwgc3RlbSBlZGdlcy4gKi8KKyAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgIHsKKyAgICAgIEFGX0VkZ2UgIGVkZ2UyOworCisKKyAgICAgIGlmICggZWRnZS0+ZmxhZ3MgJiBBRl9FREdFX0RPTkUgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogc2tpcCBhbGwgbm9uLXN0ZW0gZWRnZXMgKi8KKyAgICAgIGVkZ2UyID0gZWRnZS0+bGluazsKKyAgICAgIGlmICggIWVkZ2UyICkKKyAgICAgIHsKKyAgICAgICAgc2tpcHBlZCsrOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogU29tZSBDSksgY2hhcmFjdGVycyBoYXZlIHNvIG1hbnkgc3RlbXMgdGhhdAorICAgICAgICogdGhlIGhpbnRlciBpcyBsaWtlbHkgdG8gbWVyZ2UgdHdvIGFkamFjZW50IG9uZXMuCisgICAgICAgKiBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIGlmIGVpdGhlciBlZGdlIG9mIGEgc3RlbQorICAgICAgICogaXMgdG9vIGNsb3NlIHRvIHRoZSBwcmV2aW91cyBvbmUsIHdlIGF2b2lkCisgICAgICAgKiBhbGlnbmluZyB0aGUgdHdvIGVkZ2VzLCBidXQgcmF0aGVyIGludGVycG9sYXRlCisgICAgICAgKiB0aGVpciBsb2NhdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uIGluCisgICAgICAgKiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlbXMuCisgICAgICAgKi8KKyAgICAgIGlmICggaGFzX2xhc3Rfc3RlbSAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBlZGdlLT5wb3MgIDwgbGFzdF9zdGVtX3BvcyArIDY0IHx8CisgICAgICAgICAgICAgZWRnZTItPnBvcyA8IGxhc3Rfc3RlbV9wb3MgKyA2NCApICkKKyAgICAgIHsKKyAgICAgICAgc2tpcHBlZCsrOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogbm93IGFsaWduIHRoZSBzdGVtICovCisKKyAgICAgIC8qIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBpdCdzIGJldHRlciB0byBiZSBzYWZlICovCisgICAgICBpZiAoIGVkZ2UyLT5ibHVlX2VkZ2UgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKCAiQVNTRVJUSU9OIEZBSUxFRCBmb3IgZWRnZSAlZFxuIiwgZWRnZTItZWRnZXMgKSk7CisKKyAgICAgICAgYWZfY2prX2FsaWduX2xpbmtlZF9lZGdlKCBoaW50cywgZGltLCBlZGdlMiwgZWRnZSApOworICAgICAgICBlZGdlLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggZWRnZTIgPCBlZGdlICkKKyAgICAgIHsKKyAgICAgICAgYWZfY2prX2FsaWduX2xpbmtlZF9lZGdlKCBoaW50cywgZGltLCBlZGdlMiwgZWRnZSApOworICAgICAgICBlZGdlLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisKKyAgICAgICAgLyogV2UgcmFyZWx5IHJlYWNoZXMgaGVyZSBpdCBzZWVtczsKKyAgICAgICAgICogdXN1YWxseSB0aGUgdHdvIGVkZ2VzIGJlbG9uZ2luZworICAgICAgICAgKiB0byBvbmUgc3RlbSBhcmUgbWFya2VkIGFzIERPTkUgdG9nZXRoZXIKKyAgICAgICAgICovCisgICAgICAgIGhhc19sYXN0X3N0ZW0gPSBUUlVFOworICAgICAgICBsYXN0X3N0ZW1fcG9zID0gZWRnZS0+cG9zOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKCBkaW0gIT0gQUZfRElNRU5TSU9OX1ZFUlQgJiYgIWFuY2hvciApCisgICAgICB7CisKKyNpZiAwCisgICAgICAgIGlmICggZml4ZWRwaXRjaCApCisgICAgICAgIHsKKyAgICAgICAgICBBRl9FZGdlICAgICBsZWZ0ICA9IGVkZ2U7CisgICAgICAgICAgQUZfRWRnZSAgICAgcmlnaHQgPSBlZGdlX2xpbWl0IC0gMTsKKyAgICAgICAgICBBRl9FZGdlUmVjICBsZWZ0MSwgbGVmdDIsIHJpZ2h0MSwgcmlnaHQyOworICAgICAgICAgIEZUX1BvcyAgICAgIHRhcmdldCwgY2VudGVyMSwgY2VudGVyMjsKKyAgICAgICAgICBGVF9Qb3MgICAgICBkZWx0YTEsIGRlbHRhMiwgZDEsIGQyOworCisKKyAgICAgICAgICB3aGlsZSAoIHJpZ2h0ID4gbGVmdCAmJiAhcmlnaHQtPmxpbmsgKQorICAgICAgICAgICAgcmlnaHQtLTsKKworICAgICAgICAgIGxlZnQxICA9ICpsZWZ0OworICAgICAgICAgIGxlZnQyICA9ICpsZWZ0LT5saW5rOworICAgICAgICAgIHJpZ2h0MSA9ICpyaWdodC0+bGluazsKKyAgICAgICAgICByaWdodDIgPSAqcmlnaHQ7CisKKyAgICAgICAgICBkZWx0YSAgPSAoICggKCBoaW50ZXItPnBwMi54ICsgMzIgKSAmIC02NCApIC0gaGludGVyLT5wcDIueCApIC8gMjsKKyAgICAgICAgICB0YXJnZXQgPSBsZWZ0LT5vcG9zICsgKCByaWdodC0+b3BvcyAtIGxlZnQtPm9wb3MgKSAvIDIgKyBkZWx0YSAtIDE2OworCisgICAgICAgICAgZGVsdGExICA9IGRlbHRhOworICAgICAgICAgIGRlbHRhMSArPSBhZl9oaW50X25vcm1hbF9zdGVtKCBoaW50cywgbGVmdCwgbGVmdC0+bGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGExLCAwICk7CisKKyAgICAgICAgICBpZiAoIGxlZnQtPmxpbmsgIT0gcmlnaHQgKQorICAgICAgICAgICAgYWZfaGludF9ub3JtYWxfc3RlbSggaGludHMsIHJpZ2h0LT5saW5rLCByaWdodCwgZGVsdGExLCAwICk7CisKKyAgICAgICAgICBjZW50ZXIxID0gbGVmdC0+cG9zICsgKCByaWdodC0+cG9zIC0gbGVmdC0+cG9zICkgLyAyOworCisgICAgICAgICAgaWYgKCBjZW50ZXIxID49IHRhcmdldCApCisgICAgICAgICAgICBkZWx0YTIgPSBkZWx0YSAtIDMyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbHRhMiA9IGRlbHRhICsgMzI7CisKKyAgICAgICAgICBkZWx0YTIgKz0gYWZfaGludF9ub3JtYWxfc3RlbSggaGludHMsICZsZWZ0MSwgJmxlZnQyLCBkZWx0YTIsIDAgKTsKKworICAgICAgICAgIGlmICggZGVsdGExICE9IGRlbHRhMiApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBsZWZ0LT5saW5rICE9IHJpZ2h0ICkKKyAgICAgICAgICAgICAgYWZfaGludF9ub3JtYWxfc3RlbSggaGludHMsICZyaWdodDEsICZyaWdodDIsIGRlbHRhMiwgMCApOworCisgICAgICAgICAgICBjZW50ZXIyID0gbGVmdDEucG9zICsgKCByaWdodDIucG9zIC0gbGVmdDEucG9zICkgLyAyOworCisgICAgICAgICAgICBkMSA9IGNlbnRlcjEgLSB0YXJnZXQ7CisgICAgICAgICAgICBkMiA9IGNlbnRlcjIgLSB0YXJnZXQ7CisKKyAgICAgICAgICAgIGlmICggRlRfQUJTKCBkMiApIDwgRlRfQUJTKCBkMSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbGVmdC0+cG9zICAgICAgID0gbGVmdDEucG9zOworICAgICAgICAgICAgICBsZWZ0LT5saW5rLT5wb3MgPSBsZWZ0Mi5wb3M7CisKKyAgICAgICAgICAgICAgaWYgKCBsZWZ0LT5saW5rICE9IHJpZ2h0ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJpZ2h0LT5saW5rLT5wb3MgPSByaWdodDEucG9zOworICAgICAgICAgICAgICAgIHJpZ2h0LT5wb3MgICAgICAgPSByaWdodDIucG9zOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZGVsdGExID0gZGVsdGEyOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGRlbHRhICAgICAgICAgICAgICAgPSBkZWx0YTE7CisgICAgICAgICAgcmlnaHQtPmxpbmstPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgICAgICByaWdodC0+ZmxhZ3MgICAgICAgfD0gQUZfRURHRV9ET05FOworICAgICAgICB9CisgICAgICAgIGVsc2UKKworI2VuZGlmIC8qIDAgKi8KKworICAgICAgICAgIGRlbHRhID0gYWZfaGludF9ub3JtYWxfc3RlbSggaGludHMsIGVkZ2UsIGVkZ2UyLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRElNRU5TSU9OX0hPUlogKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgYWZfaGludF9ub3JtYWxfc3RlbSggaGludHMsIGVkZ2UsIGVkZ2UyLCBkZWx0YSwgZGltICk7CisKKyNpZiAwCisgICAgICBwcmludGYoICJzdGVtICglZCwlZCkgYWRqdXN0ZWQgKCUuMWYsJS4xZilcbiIsCisgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UyIC0gZWRnZXMsCisgICAgICAgICAgICAgICAoIGVkZ2UtPnBvcyAtIGVkZ2UtPm9wb3MgKSAvIDY0LjAsCisgICAgICAgICAgICAgICAoIGVkZ2UyLT5wb3MgLSBlZGdlMi0+b3BvcyApIC8gNjQuMCApOworI2VuZGlmCisKKyAgICAgIGFuY2hvciA9IGVkZ2U7CisgICAgICBlZGdlLT5mbGFncyAgfD0gQUZfRURHRV9ET05FOworICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgIGhhc19sYXN0X3N0ZW0gPSBUUlVFOworICAgICAgbGFzdF9zdGVtX3BvcyA9IGVkZ2UyLT5wb3M7CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgbG93ZXJjYXNlIG0ncyBtYWludGFpbiB0aGVpciBzeW1tZXRyeSAqLworCisgICAgLyogSW4gZ2VuZXJhbCwgbG93ZXJjYXNlIG0ncyBoYXZlIHNpeCB2ZXJ0aWNhbCBlZGdlcyBpZiB0aGV5IGFyZSBzYW5zICovCisgICAgLyogc2VyaWYsIG9yIHR3ZWx2ZSBpZiB0aGV5IGFyZSB3aXRoIHNlcmlmcy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgICovCisgICAgLyogYmFzZWQgb24gdGhhdCBhc3N1bXB0aW9uLCBhbmQgc2VlbXMgdG8gd29yayB2ZXJ5IHdlbGwgd2l0aCBtb3N0ICAgICovCisgICAgLyogZmFjZXMuICBIb3dldmVyLCBpZiBmb3IgYSBjZXJ0YWluIGZhY2UgdGhpcyBhc3N1bXB0aW9uIGlzIG5vdCAgICAgICovCisgICAgLyogdHJ1ZSwgdGhlIG0gaXMganVzdCByZW5kZXJlZCBsaWtlIGJlZm9yZS4gIEluIGFkZGl0aW9uLCBhbnkgc3RlbSAgICovCisgICAgLyogY29ycmVjdGlvbiB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byBzeW1tZXRyaWNhbCBnbHlwaHMgKGV2ZW4gaWYgdGhlICovCisgICAgLyogZ2x5cGggaXMgbm90IGFuIG0pLCBzbyB0aGUgcG90ZW50aWFsIGZvciB1bndhbnRlZCBkaXN0b3J0aW9uIGlzICAgICovCisgICAgLyogcmVsYXRpdmVseSBsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBXZSBkb24ndCBoYW5kbGUgaG9yaXpvbnRhbCBlZGdlcyBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkgYXNzdXJlIHRoYXQgKi8KKyAgICAvKiB0aGUgdGhpcmQgKGxvd2VzdCkgc3RlbSBhbGlnbnMgd2l0aCB0aGUgYmFzZSBsaW5lOyBpdCBtaWdodCBlbmQgdXAgKi8KKyAgICAvKiBvbmUgcGl4ZWwgaGlnaGVyIG9yIGxvd2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIG5fZWRnZXMgPSBlZGdlX2xpbWl0IC0gZWRnZXM7CisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogJiYgKCBuX2VkZ2VzID09IDYgfHwgbl9lZGdlcyA9PSAxMiApICkKKyAgICB7CisgICAgICBBRl9FZGdlICBlZGdlMSwgZWRnZTIsIGVkZ2UzOworICAgICAgRlRfUG9zICAgZGlzdDEsIGRpc3QyLCBzcGFuOworCisKKyAgICAgIGlmICggbl9lZGdlcyA9PSA2ICkKKyAgICAgIHsKKyAgICAgICAgZWRnZTEgPSBlZGdlczsKKyAgICAgICAgZWRnZTIgPSBlZGdlcyArIDI7CisgICAgICAgIGVkZ2UzID0gZWRnZXMgKyA0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBlZGdlMSA9IGVkZ2VzICsgMTsKKyAgICAgICAgZWRnZTIgPSBlZGdlcyArIDU7CisgICAgICAgIGVkZ2UzID0gZWRnZXMgKyA5OworICAgICAgfQorCisgICAgICBkaXN0MSA9IGVkZ2UyLT5vcG9zIC0gZWRnZTEtPm9wb3M7CisgICAgICBkaXN0MiA9IGVkZ2UzLT5vcG9zIC0gZWRnZTItPm9wb3M7CisKKyAgICAgIHNwYW4gPSBkaXN0MSAtIGRpc3QyOworICAgICAgaWYgKCBzcGFuIDwgMCApCisgICAgICAgIHNwYW4gPSAtc3BhbjsKKworICAgICAgaWYgKCBlZGdlMS0+bGluayA9PSBlZGdlMSArIDEgJiYKKyAgICAgICAgICAgZWRnZTItPmxpbmsgPT0gZWRnZTIgKyAxICYmCisgICAgICAgICAgIGVkZ2UzLT5saW5rID09IGVkZ2UzICsgMSAmJiBzcGFuIDwgOCApCisgICAgICB7CisgICAgICAgIGRlbHRhID0gZWRnZTMtPnBvcyAtICggMiAqIGVkZ2UyLT5wb3MgLSBlZGdlMS0+cG9zICk7CisgICAgICAgIGVkZ2UzLT5wb3MgLT0gZGVsdGE7CisgICAgICAgIGlmICggZWRnZTMtPmxpbmsgKQorICAgICAgICAgIGVkZ2UzLT5saW5rLT5wb3MgLT0gZGVsdGE7CisKKyAgICAgICAgLyogbW92ZSB0aGUgc2VyaWZzIGFsb25nIHdpdGggdGhlIHN0ZW0gKi8KKyAgICAgICAgaWYgKCBuX2VkZ2VzID09IDEyICkKKyAgICAgICAgeworICAgICAgICAgICggZWRnZXMgKyA4ICktPnBvcyAtPSBkZWx0YTsKKyAgICAgICAgICAoIGVkZ2VzICsgMTEgKS0+cG9zIC09IGRlbHRhOworICAgICAgICB9CisKKyAgICAgICAgZWRnZTMtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgICAgaWYgKCBlZGdlMy0+bGluayApCisgICAgICAgICAgZWRnZTMtPmxpbmstPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFza2lwcGVkICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qCisgICAgICogIG5vdyBoaW50IHRoZSByZW1haW5pbmcgZWRnZXMgKHNlcmlmcyBhbmQgc2luZ2xlKSBpbiBvcmRlcgorICAgICAqICB0byBjb21wbGV0ZSBvdXIgcHJvY2Vzc2luZworICAgICAqLworICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgeworICAgICAgaWYgKCBlZGdlLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoIGVkZ2UtPnNlcmlmICkKKyAgICAgIHsKKyAgICAgICAgYWZfY2prX2FsaWduX3NlcmlmX2VkZ2UoIGhpbnRzLCBlZGdlLT5zZXJpZiwgZWRnZSApOworICAgICAgICBlZGdlLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisgICAgICAgIHNraXBwZWQtLTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFza2lwcGVkICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgeworICAgICAgQUZfRWRnZSAgYmVmb3JlLCBhZnRlcjsKKworCisgICAgICBpZiAoIGVkZ2UtPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGJlZm9yZSA9IGFmdGVyID0gZWRnZTsKKworICAgICAgd2hpbGUgKCAtLWJlZm9yZSA+PSBlZGdlcyApCisgICAgICAgIGlmICggYmVmb3JlLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgIHdoaWxlICggKythZnRlciA8IGVkZ2VfbGltaXQgKQorICAgICAgICBpZiAoIGFmdGVyLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggYmVmb3JlID49IGVkZ2VzIHx8IGFmdGVyIDwgZWRnZV9saW1pdCApCisgICAgICB7CisgICAgICAgIGlmICggYmVmb3JlIDwgZWRnZXMgKQorICAgICAgICAgIGFmX2Nqa19hbGlnbl9zZXJpZl9lZGdlKCBoaW50cywgYWZ0ZXIsIGVkZ2UgKTsKKyAgICAgICAgZWxzZSBpZiAoIGFmdGVyID49IGVkZ2VfbGltaXQgKQorICAgICAgICAgIGFmX2Nqa19hbGlnbl9zZXJpZl9lZGdlKCBoaW50cywgYmVmb3JlLCBlZGdlICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICggYWZ0ZXItPmZwb3MgPT0gYmVmb3JlLT5mcG9zICkKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGJlZm9yZS0+cG9zOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGJlZm9yZS0+cG9zICsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZWRnZS0+ZnBvcyAtIGJlZm9yZS0+ZnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXItPnBvcyAtIGJlZm9yZS0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlci0+ZnBvcyAtIGJlZm9yZS0+ZnBvcyApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIGlmICggIW51bV9hY3Rpb25zICkKKyAgICAgIEZUX1RSQUNFNSgoICIgIChub25lKVxuIiApKTsKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworI2VuZGlmCisKKyAgICByZXR1cm47CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGFmX2Nqa19hbGlnbl9lZGdlX3BvaW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICAgICA9ICYgaGludHMtPmF4aXNbZGltXTsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2VzICAgICAgPSBheGlzLT5lZGdlczsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2VfbGltaXQgPSBlZGdlcyArIGF4aXMtPm51bV9lZGdlczsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2U7CisgICAgRlRfQm9vbCAgICAgICBzbmFwcGluZzsKKworCisgICAgc25hcHBpbmcgPSBGVF9CT09MKCAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9MQVRJTl9ISU5UU19ET19IT1JaX1NOQVAoIGhpbnRzICkgKSAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xBVElOX0hJTlRTX0RPX1ZFUlRfU05BUCggaGludHMgKSApICApOworCisgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICB7CisgICAgICAvKiBtb3ZlIHRoZSBwb2ludHMgb2YgZWFjaCBzZWdtZW50ICAgICAqLworICAgICAgLyogaW4gZWFjaCBlZGdlIHRvIHRoZSBlZGdlJ3MgcG9zaXRpb24gKi8KKyAgICAgIEFGX1NlZ21lbnQgIHNlZyA9IGVkZ2UtPmZpcnN0OworCisKKyAgICAgIGlmICggc25hcHBpbmcgKQorICAgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgQUZfUG9pbnQgIHBvaW50ID0gc2VnLT5maXJzdDsKKworCisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBvaW50LT54ICAgICAgPSBlZGdlLT5wb3M7CisgICAgICAgICAgICAgIHBvaW50LT5mbGFncyB8PSBBRl9GTEFHX1RPVUNIX1g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBvaW50LT55ICAgICAgPSBlZGdlLT5wb3M7CisgICAgICAgICAgICAgIHBvaW50LT5mbGFncyB8PSBBRl9GTEFHX1RPVUNIX1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggcG9pbnQgPT0gc2VnLT5sYXN0ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2VnID0gc2VnLT5lZGdlX25leHQ7CisKKyAgICAgICAgfSB3aGlsZSAoIHNlZyAhPSBlZGdlLT5maXJzdCApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGRlbHRhID0gZWRnZS0+cG9zIC0gZWRnZS0+b3BvczsKKworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBBRl9Qb2ludCAgcG9pbnQgPSBzZWctPmZpcnN0OworCisKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcG9pbnQtPnggICAgICs9IGRlbHRhOworICAgICAgICAgICAgICBwb2ludC0+ZmxhZ3MgfD0gQUZfRkxBR19UT1VDSF9YOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwb2ludC0+eSAgICAgKz0gZGVsdGE7CisgICAgICAgICAgICAgIHBvaW50LT5mbGFncyB8PSBBRl9GTEFHX1RPVUNIX1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggcG9pbnQgPT0gc2VnLT5sYXN0ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2VnID0gc2VnLT5lZGdlX25leHQ7CisKKyAgICAgICAgfSB3aGlsZSAoIHNlZyAhPSBlZGdlLT5maXJzdCApOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogQXBwbHkgdGhlIGNvbXBsZXRlIGhpbnRpbmcgYWxnb3JpdGhtIHRvIGEgQ0pLIGdseXBoLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9jamtfaGludHNfYXBwbHkoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgaW50ICAgICAgIGRpbTsKKworICAgIEZUX1VOVVNFRCggbWV0cmljcyApOworCisKKyAgICBlcnJvciA9IGFmX2dseXBoX2hpbnRzX3JlbG9hZCggaGludHMsIG91dGxpbmUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGFuYWx5emUgZ2x5cGggb3V0bGluZSAqLworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgIGlmICggKCBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJgorICAgICAgICAgICBBRl9ISU5UU19ET19XQVJQKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2Vsc2UKKyAgICBpZiAoIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGhpbnRzICkgKQorI2VuZGlmCisgICAgeworICAgICAgZXJyb3IgPSBhZl9jamtfaGludHNfZGV0ZWN0X2ZlYXR1cmVzKCBoaW50cywgQUZfRElNRU5TSU9OX0hPUlogKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGFmX2Nqa19oaW50c19jb21wdXRlX2JsdWVfZWRnZXMoIGhpbnRzLCBtZXRyaWNzLCBBRl9ESU1FTlNJT05fSE9SWiApOworICAgIH0KKworICAgIGlmICggQUZfSElOVFNfRE9fVkVSVElDQUwoIGhpbnRzICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gYWZfY2prX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggaGludHMsIEFGX0RJTUVOU0lPTl9WRVJUICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBhZl9jamtfaGludHNfY29tcHV0ZV9ibHVlX2VkZ2VzKCBoaW50cywgbWV0cmljcywgQUZfRElNRU5TSU9OX1ZFUlQgKTsKKyAgICB9CisKKyAgICAvKiBncmlkLWZpdCB0aGUgb3V0bGluZSAqLworICAgIGZvciAoIGRpbSA9IDA7IGRpbSA8IEFGX0RJTUVOU0lPTl9NQVg7IGRpbSsrICkKKyAgICB7CisgICAgICBpZiAoICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICYmIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGhpbnRzICkgKSB8fAorICAgICAgICAgICAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCAmJiBBRl9ISU5UU19ET19WRVJUSUNBTCggaGludHMgKSApICAgKQorICAgICAgeworCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCisgICAgICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJgorICAgICAgICAgICAgIEFGX0hJTlRTX0RPX1dBUlAoIGhpbnRzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIEFGX1dhcnBlclJlYyAgd2FycGVyOworICAgICAgICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CisgICAgICAgICAgRlRfUG9zICAgICAgICBkZWx0YTsKKworCisgICAgICAgICAgYWZfd2FycGVyX2NvbXB1dGUoICZ3YXJwZXIsIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjYWxlLCAmZGVsdGEgKTsKKyAgICAgICAgICBhZl9nbHlwaF9oaW50c19zY2FsZV9kaW0oIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlLCBkZWx0YSApOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisKKyAgICAgICAgYWZfY2prX2hpbnRfZWRnZXMoIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgICBhZl9jamtfYWxpZ25fZWRnZV9wb2ludHMoIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgICBhZl9nbHlwaF9oaW50c19hbGlnbl9zdHJvbmdfcG9pbnRzKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgICAgYWZfZ2x5cGhfaGludHNfYWxpZ25fd2Vha19wb2ludHMoIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgfQorICAgIH0KKworICAgIGFmX2dseXBoX2hpbnRzX3NhdmUoIGhpbnRzLCBvdXRsaW5lICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICBDIEogSyAgIFMgQyBSIEkgUCBUICAgQyBMIEEgUyBTICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKAorICAgIGFmX2Nqa193cml0aW5nX3N5c3RlbV9jbGFzcywKKworICAgIEFGX1dSSVRJTkdfU1lTVEVNX0NKSywKKworICAgIHNpemVvZiAoIEFGX0NKS01ldHJpY3NSZWMgKSwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgYWZfY2prX21ldHJpY3NfaW5pdCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKWFmX2Nqa19tZXRyaWNzX3NjYWxlLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0RvbmVNZXRyaWNzRnVuYykgTlVMTCwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRIaW50c0Z1bmMpICAgYWZfY2prX2hpbnRzX2luaXQsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBhZl9jamtfaGludHNfYXBwbHkKKyAgKQorCisKKyNlbHNlIC8qICFBRl9DT05GSUdfT1BUSU9OX0NKSyAqLworCisKKyAgQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKAorICAgIGFmX2Nqa193cml0aW5nX3N5c3RlbV9jbGFzcywKKworICAgIEFGX1dSSVRJTkdfU1lTVEVNX0NKSywKKworICAgIHNpemVvZiAoIEFGX0NKS01ldHJpY3NSZWMgKSwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKU5VTEwsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSBOVUxMLAorCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdEhpbnRzRnVuYykgICBOVUxMLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSAgTlVMTAorICApCisKKworI2VuZGlmIC8qICFBRl9DT05GSUdfT1BUSU9OX0NKSyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmY2prLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZjamsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQxMWYyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmY2prLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmY2prLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBDSksgd3JpdGluZyBzeXN0ZW0gKHNwZWNpZmljYXRpb24pLiAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGQ0pLX0hfXworI2RlZmluZSBfX0FGQ0pLX0hfXworCisjaW5jbHVkZSAiYWZoaW50cy5oIgorI2luY2x1ZGUgImFmbGF0aW4uaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIHRoZSBDSkstc3BlY2lmaWMgd3JpdGluZyBzeXN0ZW0gKi8KKworICBBRl9ERUNMQVJFX1dSSVRJTkdfU1lTVEVNX0NMQVNTKCBhZl9jamtfd3JpdGluZ19zeXN0ZW1fY2xhc3MgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICBDIEogSyAgIEcgTCBPIEIgQSBMICAgTSBFIFQgUiBJIEMgUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKgorICAgKiAgQ0pLIGdseXBocyB0ZW5kIHRvIGZpbGwgdGhlIHNxdWFyZS4gIFNvIHdlIGhhdmUgYm90aCB2ZXJ0aWNhbCBhbmQKKyAgICogIGhvcml6b250YWwgYmx1ZSB6b25lcy4gIEJ1dCBzb21lIGdseXBocyBoYXZlIGZsYXQgYm91bmRpbmcgc3Ryb2tlcyB0aGF0CisgICAqICBsZWF2ZSBzb21lIHNwYWNlIGJldHdlZW4gbmVpZ2hib3VyIGdseXBocy4KKyAgICovCisKKyNkZWZpbmUgQUZfQ0pLX0lTX1RPUF9CTFVFKCBiICkgXAorICAgICAgICAgICggKGIpLT5wcm9wZXJ0aWVzICYgQUZfQkxVRV9QUk9QRVJUWV9DSktfVE9QICkKKyNkZWZpbmUgQUZfQ0pLX0lTX0hPUklaX0JMVUUoIGIgKSBcCisgICAgICAgICAgKCAoYiktPnByb3BlcnRpZXMgJiBBRl9CTFVFX1BST1BFUlRZX0NKS19IT1JJWiApCisjZGVmaW5lIEFGX0NKS19JU19SSUdIVF9CTFVFICBBRl9DSktfSVNfVE9QX0JMVUUKKworI2RlZmluZSBBRl9DSktfTUFYX1dJRFRIUyAgMTYKKworCisjZGVmaW5lIEFGX0NKS19CTFVFX0FDVElWRSAgICAgICggMVUgPDwgMCApIC8qIHpvbmUgaGVpZ2h0IGlzIDw9IDMvNHB4ICAgICAgKi8KKyNkZWZpbmUgQUZfQ0pLX0JMVUVfVE9QICAgICAgICAgKCAxVSA8PCAxICkgLyogcmVzdWx0IG9mIEFGX0NKS19JU19UT1BfQkxVRSAqLworI2RlZmluZSBBRl9DSktfQkxVRV9BREpVU1RNRU5UICAoIDFVIDw8IDIgKSAvKiB1c2VkIGZvciBzY2FsZSBhZGp1c3RtZW50ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9wdGltaXphdGlvbiAgICAgICAgICAgICAgICAgKi8KKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9DSktCbHVlUmVjXworICB7CisgICAgQUZfV2lkdGhSZWMgIHJlZjsKKyAgICBBRl9XaWR0aFJlYyAgc2hvb3Q7IC8qIHVuZGVyc2hvb3QgKi8KKyAgICBGVF9VSW50ICAgICAgZmxhZ3M7CisKKyAgfSBBRl9DSktCbHVlUmVjLCAqQUZfQ0pLQmx1ZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9DSktBeGlzUmVjXworICB7CisgICAgRlRfRml4ZWQgICAgICAgc2NhbGU7CisgICAgRlRfUG9zICAgICAgICAgZGVsdGE7CisKKyAgICBGVF9VSW50ICAgICAgICB3aWR0aF9jb3VudDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHVzZWQgd2lkdGhzICovCisgICAgQUZfV2lkdGhSZWMgICAgd2lkdGhzW0FGX0NKS19NQVhfV0lEVEhTXTsgICAgIC8qIHdpZHRocyBhcnJheSAgICAgICAgICAqLworICAgIEZUX1BvcyAgICAgICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkOyAgICAgLyogdXNlZCBmb3IgY3JlYXRpbmcgZWRnZXMgKi8KKyAgICBGVF9Qb3MgICAgICAgICBzdGFuZGFyZF93aWR0aDsgICAgICAgICAgIC8qIHRoZSBkZWZhdWx0IHN0ZW0gdGhpY2tuZXNzICovCisgICAgRlRfQm9vbCAgICAgICAgZXh0cmFfbGlnaHQ7ICAgICAgICAgICAvKiBpcyBzdGFuZGFyZCB3aWR0aCB2ZXJ5IGxpZ2h0PyAqLworCisgICAgLyogdXNlZCBmb3IgaG9yaXpvbnRhbCBtZXRyaWNzIHRvbyBmb3IgQ0pLICovCisgICAgRlRfQm9vbCAgICAgICAgY29udHJvbF9vdmVyc2hvb3Q7CisgICAgRlRfVUludCAgICAgICAgYmx1ZV9jb3VudDsKKyAgICBBRl9DSktCbHVlUmVjICBibHVlc1tBRl9CTFVFX1NUUklOR1NFVF9NQVhdOworCisgICAgRlRfRml4ZWQgICAgICAgb3JnX3NjYWxlOworICAgIEZUX1BvcyAgICAgICAgIG9yZ19kZWx0YTsKKworICB9IEFGX0NKS0F4aXNSZWMsICpBRl9DSktBeGlzOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0NKS01ldHJpY3NSZWNfCisgIHsKKyAgICBBRl9TdHlsZU1ldHJpY3NSZWMgIHJvb3Q7CisgICAgRlRfVUludCAgICAgICAgICAgICB1bml0c19wZXJfZW07CisgICAgQUZfQ0pLQXhpc1JlYyAgICAgICBheGlzW0FGX0RJTUVOU0lPTl9NQVhdOworCisgIH0gQUZfQ0pLTWV0cmljc1JlYywgKkFGX0NKS01ldHJpY3M7CisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2Nqa19tZXRyaWNzX2luaXQoIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX2Nqa19tZXRyaWNzX3NjYWxlKCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfU2NhbGVyICAgICAgc2NhbGVyICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgYWZfY2prX2hpbnRzX2luaXQoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2Nqa19oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBBRl9DSktNZXRyaWNzICBtZXRyaWNzICk7CisKKyAgLyogc2hhcmVkOyBjYWxsZWQgZnJvbSBhZmluZGljLmMgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMoIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfY2prX21ldHJpY3NfaW5pdF93aWR0aHMoIEFGX0NKS01ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlICk7CisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSksgKi8KKworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGQ0pLX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmY292ZXIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwZThhNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmY292ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBjb3ZlcmFnZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBUaGlzIGhlYWRlciBmaWxlIGNhbiBiZSBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcy4gKi8KKyAgLyogRGVmaW5lIGBDT1ZFUkFHRScgYXMgbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICovCisKKworICAvKiBBZGQgbmV3IGNvdmVyYWdlcyBoZXJlLiAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIGFyZSB0aGUgICAqLworICAvKiBjb3ZlcmFnZSBuYW1lIGluIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlLCByZXNwZWN0aXZlbHksIGZvbGxvd2VkICAqLworICAvKiBieSBhIGRlc2NyaXB0aW9uIHN0cmluZy4gIFRoZSBsYXN0IGZvdXIgYXJndW1lbnRzIGFyZSB0aGUgZm91ciAgICAqLworICAvKiBjaGFyYWN0ZXJzIGRlZmluaW5nIHRoZSBjb3JyZXNwb25kaW5nIE9wZW5UeXBlIGZlYXR1cmUuICAgICAgICAgICAqLworCisjaWYgMAorICAvKiBYWFg6IEl0J3Mgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBibHVlIHpvbmUgY2hhcmFjdGVycyBpbiBhZHZhbmNlLiAqLworICBDT1ZFUkFHRSggYWx0ZXJuYXRpdmVfZnJhY3Rpb25zLCBBTFRFUk5BVElWRV9GUkFDVElPTlMsCisgICAgICAgICAgICAiYWx0ZXJuYXRpdmUgZnJhY3Rpb25zIiwKKyAgICAgICAgICAgICdhJywgJ2YnLCAncicsICdjJyApCisjZW5kaWYKKworICBDT1ZFUkFHRSggcGV0aXRlX2NhcGl0YWxzX2Zyb21fY2FwaXRhbHMsIFBFVElURV9DQVBJVEFMU19GUk9NX0NBUElUQUxTLAorICAgICAgICAgICAgInBldGl0ZSBjYXBpdGFscyBmcm9tIGNhcGl0YWxzIiwKKyAgICAgICAgICAgICdjJywgJzInLCAnYycsICdwJyApCisKKyAgQ09WRVJBR0UoIHNtYWxsX2NhcGl0YWxzX2Zyb21fY2FwaXRhbHMsIFNNQUxMX0NBUElUQUxTX0ZST01fQ0FQSVRBTFMsCisgICAgICAgICAgICAic21hbGwgY2FwaXRhbHMgZnJvbSBjYXBpdGFscyIsCisgICAgICAgICAgICAnYycsICcyJywgJ3MnLCAnYycgKQorCisjaWYgMAorICAvKiBYWFg6IE9ubHkgZGlnaXRzIGFyZSBpbiB0aGlzIGNvdmVyYWdlLCBob3dldmVyLCBib3RoIG5vcm1hbCBzdHlsZSAqLworICAvKiAgICAgIGFuZCBvbGRzdHlsZSByZXByZXNlbnRhdGlvbiBmb3JtcyBhcmUgcG9zc2libGUuICAgICAgICAgICAgICAqLworICBDT1ZFUkFHRSggZGVub21pbmF0b3JzLCBERU5PTUlOQVRPUlMsCisgICAgICAgICAgICAiZGVub21pbmF0b3JzIiwKKyAgICAgICAgICAgICdkJywgJ24nLCAnbycsICdtJyApCisjZW5kaWYKKworI2lmIDAKKyAgLyogWFhYOiBJdCdzIG5vdCBwb3NzaWJsZSB0byBkZWZpbmUgYmx1ZSB6b25lIGNoYXJhY3RlcnMgaW4gYWR2YW5jZS4gKi8KKyAgQ09WRVJBR0UoIGZyYWN0aW9ucywgRlJBQ1RJT05TLAorICAgICAgICAgICAgImZyYWN0aW9ucyIsCisgICAgICAgICAgICAnZicsICdyJywgJ2EnLCAnYycgKQorI2VuZGlmCisKKyNpZiAwCisgIC8qIFhYWDogT25seSBkaWdpdHMgYXJlIGluIHRoaXMgY292ZXJhZ2UsIGhvd2V2ZXIsIGJvdGggbm9ybWFsIHN0eWxlICovCisgIC8qICAgICAgYW5kIG9sZHN0eWxlIHJlcHJlc2VudGF0aW9uIGZvcm1zIGFyZSBwb3NzaWJsZS4gICAgICAgICAgICAgICovCisgIENPVkVSQUdFKCBudW1lcmF0b3JzLCBOVU1FUkFUT1JTLAorICAgICAgICAgICAgIm51bWVyYXRvcnMiLAorICAgICAgICAgICAgJ24nLCAndScsICdtJywgJ3InICkKKyNlbmRpZgorCisgIENPVkVSQUdFKCBvcmRpbmFscywgT1JESU5BTFMsCisgICAgICAgICAgICAib3JkaW5hbHMiLAorICAgICAgICAgICAgJ28nLCAncicsICdkJywgJ24nICkKKworICBDT1ZFUkFHRSggcGV0aXRlX2NhcGl0YWxzLCBQRVRJVEVfQ0FQSVRBTFMsCisgICAgICAgICAgICAicGV0aXRlIGNhcGl0YWxzIiwKKyAgICAgICAgICAgICdwJywgJ2MnLCAnYScsICdwJyApCisKKyAgQ09WRVJBR0UoIHJ1YnksIFJVQlksCisgICAgICAgICAgICAicnVieSIsCisgICAgICAgICAgICAncicsICd1JywgJ2InLCAneScgKQorCisgIENPVkVSQUdFKCBzY2llbnRpZmljX2luZmVyaW9ycywgU0NJRU5USUZJQ19JTkZFUklPUlMsCisgICAgICAgICAgICAic2NpZW50aWZpYyBpbmZlcmlvcnMiLAorICAgICAgICAgICAgJ3MnLCAnaScsICduJywgJ2YnICkKKworICBDT1ZFUkFHRSggc21hbGxfY2FwaXRhbHMsIFNNQUxMX0NBUElUQUxTLAorICAgICAgICAgICAgInNtYWxsIGNhcGl0YWxzIiwKKyAgICAgICAgICAgICdzJywgJ20nLCAnYycsICdwJyApCisKKyAgQ09WRVJBR0UoIHN1YnNjcmlwdCwgU1VCU0NSSVBULAorICAgICAgICAgICAgInN1YnNjcmlwdCIsCisgICAgICAgICAgICAncycsICd1JywgJ2InLCAncycgKQorCisgIENPVkVSQUdFKCBzdXBlcnNjcmlwdCwgU1VQRVJTQ1JJUFQsCisgICAgICAgICAgICAic3VwZXJzY3JpcHQiLAorICAgICAgICAgICAgJ3MnLCAndScsICdwJywgJ3MnICkKKworICBDT1ZFUkFHRSggdGl0bGluZywgVElUTElORywKKyAgICAgICAgICAgICJ0aXRsaW5nIiwKKyAgICAgICAgICAgICd0JywgJ2knLCAndCcsICdsJyApCisKKyNpZiAwCisgIC8qIHRvIGJlIGFsd2F5cyBleGNsdWRlZCAqLworICBDT1ZFUkFHRShuYWx0LCAnbicsICdhJywgJ2wnLCAndCcpOyAvKiBBbHRlcm5hdGUgQW5ub3RhdGlvbiBGb3JtcyAoPykgKi8KKyAgQ09WRVJBR0Uob3JubSwgJ28nLCAncicsICduJywgJ20nKTsgLyogT3JuYW1lbnRzICg/KSAqLworI2VuZGlmCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZkdW1teS5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZHVtbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2NhMjVmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZHVtbXkuYwpAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmR1bW15LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZSAgICAgICAgKi8KKy8qICAgIHBlcmZvcm1lZCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiYWZkdW1teS5oIgorI2luY2x1ZGUgImFmaGludHMuaCIKKyNpbmNsdWRlICJhZmVycm9ycy5oIgorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX2R1bW15X2hpbnRzX2luaXQoIEFGX0dseXBoSGludHMgICAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBoaW50cywgbWV0cmljcyApOworCisgICAgaGludHMtPnhfc2NhbGUgPSBtZXRyaWNzLT5zY2FsZXIueF9zY2FsZTsKKyAgICBoaW50cy0+eV9zY2FsZSA9IG1ldHJpY3MtPnNjYWxlci55X3NjYWxlOworICAgIGhpbnRzLT54X2RlbHRhID0gbWV0cmljcy0+c2NhbGVyLnhfZGVsdGE7CisgICAgaGludHMtPnlfZGVsdGEgPSBtZXRyaWNzLT5zY2FsZXIueV9kZWx0YTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9kdW1teV9oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICBvdXRsaW5lICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBhZl9nbHlwaF9oaW50c19yZWxvYWQoIGhpbnRzLCBvdXRsaW5lICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgYWZfZ2x5cGhfaGludHNfc2F2ZSggaGludHMsIG91dGxpbmUgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKAorICAgIGFmX2R1bW15X3dyaXRpbmdfc3lzdGVtX2NsYXNzLAorCisgICAgQUZfV1JJVElOR19TWVNURU1fRFVNTVksCisKKyAgICBzaXplb2YgKCBBRl9TdHlsZU1ldHJpY3NSZWMgKSwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9TY2FsZU1ldHJpY3NGdW5jKU5VTEwsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSBOVUxMLAorCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdEhpbnRzRnVuYykgICBhZl9kdW1teV9oaW50c19pbml0LAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSAgYWZfZHVtbXlfaGludHNfYXBwbHkKKyAgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZHVtbXkuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmZGM3OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZkdW1teS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIGR1bW15IHJvdXRpbmVzIHRvIGJlIHVzZWQgaWYgbm8gaGludGluZyBzaG91bGQgYmUgICAgICAgICovCisvKiAgICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGRFVNTVlfSF9fCisjZGVmaW5lIF9fQUZEVU1NWV9IX18KKworI2luY2x1ZGUgImFmdHlwZXMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworICAvKiBBIGR1bW15IHdyaXRpbmcgc3lzdGVtIHVzZWQgd2hlbiBubyBoaW50aW5nIHNob3VsZCBiZSBwZXJmb3JtZWQuICovCisKKyAgQUZfREVDTEFSRV9XUklUSU5HX1NZU1RFTV9DTEFTUyggYWZfZHVtbXlfd3JpdGluZ19zeXN0ZW1fY2xhc3MgKQorCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fQUZEVU1NWV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0MTZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmZXJyb3JzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvZml0dGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQXV0b2ZpdHRlciBlcnJvciBlbnVtZXJhdGlvbiAgICAgICAgICAqLworICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQUZFUlJPUlNfSF9fCisjZGVmaW5lIF9fQUZFUlJPUlNfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEFGX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9BdXRvZml0CisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX0FGRVJST1JTX0hfXyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiOTI5MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCkBAIC0wLDAgKzEsNDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmdsb2JhbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgcm91dGluZXMgdG8gY29tcHV0ZSBnbG9iYWwgaGludGluZyB2YWx1ZXMgKGJvZHkpLiAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJhZmdsb2JhbC5oIgorI2luY2x1ZGUgImFmcmFuZ2VzLmgiCisjaW5jbHVkZSAiaGJzaGltLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmdsb2JhbAorCisKKyAgLyogZ2V0IHdyaXRpbmcgc3lzdGVtIHNwZWNpZmljIGhlYWRlciBmaWxlcyAqLworI3VuZGVmICBXUklUSU5HX1NZU1RFTQorI2RlZmluZSBXUklUSU5HX1NZU1RFTSggd3MsIFdTICkgIC8qIGVtcHR5ICovCisjaW5jbHVkZSAiYWZ3cnRzeXMuaCIKKworI2luY2x1ZGUgImFmZXJyb3JzLmgiCisjaW5jbHVkZSAiYWZwaWMuaCIKKworCisjdW5kZWYgIFNDUklQVAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNjMSwgc2MyLCBzYzMgKSBcCisgICAgICAgICAgQUZfREVGSU5FX1NDUklQVF9DTEFTUyggICAgICAgICAgIFwKKyAgICAgICAgICAgIGFmXyAjIyBzICMjIF9zY3JpcHRfY2xhc3MsICAgICAgXAorICAgICAgICAgICAgQUZfU0NSSVBUXyAjIyBTLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhZl8gIyMgcyAjIyBfdW5pcmFuZ2VzLCAgICAgICAgIFwKKyAgICAgICAgICAgIHNjMSwgc2MyLCBzYzMgKQorCisjaW5jbHVkZSAiYWZzY3JpcHQuaCIKKworCisjdW5kZWYgIFNUWUxFCisjZGVmaW5lIFNUWUxFKCBzLCBTLCBkLCB3cywgc2MsIHNzLCBjICkgIFwKKyAgICAgICAgICBBRl9ERUZJTkVfU1RZTEVfQ0xBU1MoICAgICAgICAgXAorICAgICAgICAgICAgYWZfICMjIHMgIyMgX3N0eWxlX2NsYXNzLCAgICBcCisgICAgICAgICAgICBBRl9TVFlMRV8gIyMgUywgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHdzLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2MsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzcywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGMgKQorCisjaW5jbHVkZSAiYWZzdHlsZXMuaCIKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyN1bmRlZiAgV1JJVElOR19TWVNURU0KKyNkZWZpbmUgV1JJVElOR19TWVNURU0oIHdzLCBXUyApICAgICAgICAgICAgICAgXAorICAgICAgICAgICZhZl8gIyMgd3MgIyMgX3dyaXRpbmdfc3lzdGVtX2NsYXNzLAorCisgIEZUX0xPQ0FMX0FSUkFZX0RFRiggQUZfV3JpdGluZ1N5c3RlbUNsYXNzICkKKyAgYWZfd3JpdGluZ19zeXN0ZW1fY2xhc3Nlc1tdID0KKyAgeworCisjaW5jbHVkZSAiYWZ3cnRzeXMuaCIKKworICAgIE5VTEwgIC8qIGRvIG5vdCByZW1vdmUgKi8KKyAgfTsKKworCisjdW5kZWYgIFNDUklQVAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNjMSwgc2MyLCBzYzMgKSBcCisgICAgICAgICAgJmFmXyAjIyBzICMjIF9zY3JpcHRfY2xhc3MsCisKKyAgRlRfTE9DQUxfQVJSQVlfREVGKCBBRl9TY3JpcHRDbGFzcyApCisgIGFmX3NjcmlwdF9jbGFzc2VzW10gPQorICB7CisKKyNpbmNsdWRlICJhZnNjcmlwdC5oIgorCisgICAgTlVMTCAgLyogZG8gbm90IHJlbW92ZSAqLworICB9OworCisKKyN1bmRlZiAgU1RZTEUKKyNkZWZpbmUgU1RZTEUoIHMsIFMsIGQsIHdzLCBzYywgc3MsIGMgKSBcCisgICAgICAgICAgJmFmXyAjIyBzICMjIF9zdHlsZV9jbGFzcywKKworICBGVF9MT0NBTF9BUlJBWV9ERUYoIEFGX1N0eWxlQ2xhc3MgKQorICBhZl9zdHlsZV9jbGFzc2VzW10gPQorICB7CisKKyNpbmNsdWRlICJhZnN0eWxlcy5oIgorCisgICAgTlVMTCAgLyogZG8gbm90IHJlbW92ZSAqLworICB9OworCisjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisKKyN1bmRlZiAgU1RZTEUKKyNkZWZpbmUgU1RZTEUoIHMsIFMsIGQsIHdzLCBzYywgc3MsIGMgKSAgI3MsCisKKyAgRlRfTE9DQUxfQVJSQVlfREVGKCBjaGFyKiApCisgIGFmX3N0eWxlX25hbWVzW10gPQorICB7CisKKyNpbmNsdWRlICJhZnN0eWxlcy5oIgorCisgIH07CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisKKyAgLyogQ29tcHV0ZSB0aGUgc3R5bGUgaW5kZXggb2YgZWFjaCBnbHlwaCB3aXRoaW4gYSBnaXZlbiBmYWNlLiAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9mYWNlX2dsb2JhbHNfY29tcHV0ZV9zdHlsZV9jb3ZlcmFnZSggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfRmFjZSAgICAgZmFjZSAgICAgICAgPSBnbG9iYWxzLT5mYWNlOworICAgIEZUX0NoYXJNYXAgIG9sZF9jaGFybWFwID0gZmFjZS0+Y2hhcm1hcDsKKyAgICBGVF9CeXRlKiAgICBnc3R5bGVzICAgICA9IGdsb2JhbHMtPmdseXBoX3N0eWxlczsKKyAgICBGVF9VSW50ICAgICBzczsKKyAgICBGVF9VSW50ICAgICBpOworICAgIEZUX1VJbnQgICAgIGRmbHQgICAgICAgID0gfjBVOyAvKiBhIG5vbi12YWxpZCB2YWx1ZSAqLworCisKKyAgICAvKiB0aGUgdmFsdWUgQUZfU1RZTEVfVU5BU1NJR05FRCBtZWFucyBgdW5jb3ZlcmVkIGdseXBoJyAqLworICAgIEZUX01FTV9TRVQoIGdsb2JhbHMtPmdseXBoX3N0eWxlcywKKyAgICAgICAgICAgICAgICBBRl9TVFlMRV9VTkFTU0lHTkVELAorICAgICAgICAgICAgICAgIGdsb2JhbHMtPmdseXBoX2NvdW50ICk7CisKKyAgICBlcnJvciA9IEZUX1NlbGVjdF9DaGFybWFwKCBmYWNlLCBGVF9FTkNPRElOR19VTklDT0RFICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgLyoKKyAgICAgICAqIElnbm9yZSB0aGlzIGVycm9yOyB3ZSBzaW1wbHkgdXNlIHRoZSBmYWxsYmFjayBzdHlsZS4KKyAgICAgICAqIFhYWDogU2hvdWxkbid0IHdlIHJhdGhlciBkaXNhYmxlIGhpbnRpbmc/CisgICAgICAgKi8KKyAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHNjYW4gZWFjaCBzdHlsZSBpbiBhIFVuaWNvZGUgY2hhcm1hcCAqLworICAgIGZvciAoIHNzID0gMDsgQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOyBzcysrICkKKyAgICB7CisgICAgICBBRl9TdHlsZUNsYXNzICAgICAgIHN0eWxlX2NsYXNzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107CisgICAgICBBRl9TY3JpcHRDbGFzcyAgICAgIHNjcmlwdF9jbGFzcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU0NSSVBUX0NMQVNTRVNfR0VUW3N0eWxlX2NsYXNzLT5zY3JpcHRdOworICAgICAgQUZfU2NyaXB0X1VuaVJhbmdlICByYW5nZTsKKworCisgICAgICBpZiAoIHNjcmlwdF9jbGFzcy0+c2NyaXB0X3VuaV9yYW5nZXMgPT0gTlVMTCApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKgorICAgICAgICogIFNjYW4gYWxsIFVuaWNvZGUgcG9pbnRzIGluIHRoZSByYW5nZSBhbmQgc2V0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgKiAgZ2x5cGggc3R5bGUgaW5kZXguCisgICAgICAgKi8KKyAgICAgIGlmICggc3R5bGVfY2xhc3MtPmNvdmVyYWdlID09IEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorICAgICAgeworICAgICAgICBpZiAoIChGVF9VSW50KXN0eWxlX2NsYXNzLT5zY3JpcHQgPT0KKyAgICAgICAgICAgICBnbG9iYWxzLT5tb2R1bGUtPmRlZmF1bHRfc2NyaXB0ICkKKyAgICAgICAgICBkZmx0ID0gc3M7CisKKyAgICAgICAgZm9yICggcmFuZ2UgPSBzY3JpcHRfY2xhc3MtPnNjcmlwdF91bmlfcmFuZ2VzOworICAgICAgICAgICAgICByYW5nZS0+Zmlyc3QgIT0gMDsKKyAgICAgICAgICAgICAgcmFuZ2UrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUgPSByYW5nZS0+Zmlyc3Q7CisgICAgICAgICAgRlRfVUludCAgIGdpbmRleDsKKworCisgICAgICAgICAgZ2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGNoYXJjb2RlICk7CisKKyAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgZ2luZGV4IDwgKEZUX1VMb25nKWdsb2JhbHMtPmdseXBoX2NvdW50ICYmCisgICAgICAgICAgICAgICBnc3R5bGVzW2dpbmRleF0gPT0gQUZfU1RZTEVfVU5BU1NJR05FRCAgKQorICAgICAgICAgICAgZ3N0eWxlc1tnaW5kZXhdID0gKEZUX0J5dGUpc3M7CisKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJjb2RlID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgY2hhcmNvZGUsICZnaW5kZXggKTsKKworICAgICAgICAgICAgaWYgKCBnaW5kZXggPT0gMCB8fCBjaGFyY29kZSA+IHJhbmdlLT5sYXN0ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggZ2luZGV4IDwgKEZUX1VMb25nKWdsb2JhbHMtPmdseXBoX2NvdW50ICYmCisgICAgICAgICAgICAgICAgIGdzdHlsZXNbZ2luZGV4XSA9PSBBRl9TVFlMRV9VTkFTU0lHTkVEICApCisgICAgICAgICAgICAgIGdzdHlsZXNbZ2luZGV4XSA9IChGVF9CeXRlKXNzOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBnZXQgZ2x5cGhzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSBieSBjbWFwICovCisgICAgICAgIGFmX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBoYW5kbGUgdGhlIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHQgc2NyaXB0IC4uLiAqLworICAgIGFmX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgQUZfU1RZTEVfQ0xBU1NFU19HRVRbZGZsdF0sIGdzdHlsZXMgKTsKKworICAgIC8qIC4uLiBhbmQgdGhlIHJlbWFpbmluZyBkZWZhdWx0IE9wZW5UeXBlIGZlYXR1cmVzICovCisgICAgZm9yICggc3MgPSAwOyBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107IHNzKysgKQorICAgIHsKKyAgICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzID0gQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOworCisKKyAgICAgIGlmICggc3MgIT0gZGZsdCAmJiBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgPT0gQUZfQ09WRVJBR0VfREVGQVVMVCApCisgICAgICAgIGFmX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMgKTsKKyAgICB9CisKKyAgICAvKiBtYXJrIEFTQ0lJIGRpZ2l0cyAqLworICAgIGZvciAoIGkgPSAweDMwOyBpIDw9IDB4Mzk7IGkrKyApCisgICAgeworICAgICAgRlRfVUludCAgZ2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGkgKTsKKworCisgICAgICBpZiAoIGdpbmRleCAhPSAwICYmIGdpbmRleCA8IChGVF9VTG9uZylnbG9iYWxzLT5nbHlwaF9jb3VudCApCisgICAgICAgIGdzdHlsZXNbZ2luZGV4XSB8PSBBRl9ESUdJVDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICAvKgorICAgICAqICBCeSBkZWZhdWx0LCBhbGwgdW5jb3ZlcmVkIGdseXBocyBhcmUgc2V0IHRvIHRoZSBmYWxsYmFjayBzdHlsZS4KKyAgICAgKiAgWFhYOiBTaG91bGRuJ3Qgd2UgZGlzYWJsZSBoaW50aW5nIG9yIGRvIHNvbWV0aGluZyBzaW1pbGFyPworICAgICAqLworICAgIGlmICggZ2xvYmFscy0+bW9kdWxlLT5mYWxsYmFja19zdHlsZSAhPSBBRl9TVFlMRV9VTkFTU0lHTkVEICkKKyAgICB7CisgICAgICBGVF9Mb25nICBubjsKKworCisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgZ2xvYmFscy0+Z2x5cGhfY291bnQ7IG5uKysgKQorICAgICAgeworICAgICAgICBpZiAoICggZ3N0eWxlc1tubl0gJiB+QUZfRElHSVQgKSA9PSBBRl9TVFlMRV9VTkFTU0lHTkVEICkKKyAgICAgICAgeworICAgICAgICAgIGdzdHlsZXNbbm5dICY9IH5BRl9TVFlMRV9VTkFTU0lHTkVEOworICAgICAgICAgIGdzdHlsZXNbbm5dIHw9IGdsb2JhbHMtPm1vZHVsZS0+ZmFsbGJhY2tfc3R5bGU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgRlRfVFJBQ0U0KCggIlxuIgorICAgICAgICAgICAgICAgICJzdHlsZSBjb3ZlcmFnZVxuIgorICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PVxuIgorICAgICAgICAgICAgICAgICJcbiIgKSk7CisKKyAgICBmb3IgKCBzcyA9IDA7IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsgc3MrKyApCisgICAgeworICAgICAgQUZfU3R5bGVDbGFzcyAgc3R5bGVfY2xhc3MgPSBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107CisgICAgICBGVF9VSW50ICAgICAgICBjb3VudCAgICAgICA9IDA7CisgICAgICBGVF9Mb25nICAgICAgICBpZHg7CisKKworICAgICAgRlRfVFJBQ0U0KCggIiVzOlxuIiwgYWZfc3R5bGVfbmFtZXNbc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKworICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgZ2xvYmFscy0+Z2x5cGhfY291bnQ7IGlkeCsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAoIGdzdHlsZXNbaWR4XSAmIH5BRl9ESUdJVCApID09IHN0eWxlX2NsYXNzLT5zdHlsZSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICEoIGNvdW50ICUgMTAgKSApCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICIgKSk7CisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgaWR4ICkpOworICAgICAgICAgIGNvdW50Kys7CisKKyAgICAgICAgICBpZiAoICEoIGNvdW50ICUgMTAgKSApCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggIWNvdW50ICkKKyAgICAgICAgRlRfVFJBQ0U0KCggIiAgKG5vbmUpXG4iICkpOworICAgICAgaWYgKCBjb3VudCAlIDEwICkKKyAgICAgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKyAgICB9CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisgICAgRlRfU2V0X0NoYXJtYXAoIGZhY2UsIG9sZF9jaGFybWFwICk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgYWZfZmFjZV9nbG9iYWxzX25ldyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9GYWNlR2xvYmFscyAgKmFnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9Nb2R1bGUgICAgICAgIG1vZHVsZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeTsKKyAgICBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscyA9IE5VTEw7CisKKworICAgIG1lbW9yeSA9IGZhY2UtPm1lbW9yeTsKKworICAgIGlmICggRlRfQUxMT0MoIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggKmdsb2JhbHMgKSArCisgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpZmFjZS0+bnVtX2dseXBocyAqIHNpemVvZiAoIEZUX0J5dGUgKSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGdsb2JhbHMtPmZhY2UgICAgICAgICA9IGZhY2U7CisgICAgZ2xvYmFscy0+Z2x5cGhfY291bnQgID0gZmFjZS0+bnVtX2dseXBoczsKKyAgICBnbG9iYWxzLT5nbHlwaF9zdHlsZXMgPSAoRlRfQnl0ZSopKCBnbG9iYWxzICsgMSApOworICAgIGdsb2JhbHMtPm1vZHVsZSAgICAgICA9IG1vZHVsZTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgZ2xvYmFscy0+aGJfZm9udCA9IGhiX2Z0X2ZvbnRfY3JlYXRlKCBmYWNlLCBOVUxMICk7CisjZW5kaWYKKworICAgIGVycm9yID0gYWZfZmFjZV9nbG9iYWxzX2NvbXB1dGVfc3R5bGVfY292ZXJhZ2UoIGdsb2JhbHMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBhZl9mYWNlX2dsb2JhbHNfZnJlZSggZ2xvYmFscyApOworICAgICAgZ2xvYmFscyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGdsb2JhbHMtPmluY3JlYXNlX3hfaGVpZ2h0ID0gQUZfUFJPUF9JTkNSRUFTRV9YX0hFSUdIVF9NQVg7CisKKyAgRXhpdDoKKyAgICAqYWdsb2JhbHMgPSBnbG9iYWxzOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfZmFjZV9nbG9iYWxzX2ZyZWUoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzICkKKyAgeworICAgIGlmICggZ2xvYmFscyApCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBnbG9iYWxzLT5mYWNlLT5tZW1vcnk7CisgICAgICBGVF9VSW50ICAgIG5uOworCisKKyAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBBRl9TVFlMRV9NQVg7IG5uKysgKQorICAgICAgeworICAgICAgICBpZiAoIGdsb2JhbHMtPm1ldHJpY3Nbbm5dICkKKyAgICAgICAgeworICAgICAgICAgIEFGX1N0eWxlQ2xhc3MgICAgICAgICAgc3R5bGVfY2xhc3MgPQorICAgICAgICAgICAgQUZfU1RZTEVfQ0xBU1NFU19HRVRbbm5dOworICAgICAgICAgIEFGX1dyaXRpbmdTeXN0ZW1DbGFzcyAgd3JpdGluZ19zeXN0ZW1fY2xhc3MgPQorICAgICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVRbc3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKworCisgICAgICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19kb25lICkKKyAgICAgICAgICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzLT5zdHlsZV9tZXRyaWNzX2RvbmUoIGdsb2JhbHMtPm1ldHJpY3Nbbm5dICk7CisKKyAgICAgICAgICBGVF9GUkVFKCBnbG9iYWxzLT5tZXRyaWNzW25uXSApOworICAgICAgICB9CisgICAgICB9CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgorICAgICAgaGJfZm9udF9kZXN0cm95KCBnbG9iYWxzLT5oYl9mb250ICk7CisgICAgICBnbG9iYWxzLT5oYl9mb250ID0gTlVMTDsKKyNlbmRpZgorCisgICAgICBnbG9iYWxzLT5nbHlwaF9jb3VudCAgPSAwOworICAgICAgZ2xvYmFscy0+Z2x5cGhfc3R5bGVzID0gTlVMTDsgIC8qIG5vIG5lZWQgdG8gZnJlZSB0aGlzIG9uZSEgKi8KKyAgICAgIGdsb2JhbHMtPmZhY2UgICAgICAgICA9IE5VTEw7CisKKyAgICAgIEZUX0ZSRUUoIGdsb2JhbHMgKTsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9mYWNlX2dsb2JhbHNfZ2V0X21ldHJpY3MoIEFGX0ZhY2VHbG9iYWxzICAgIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVNZXRyaWNzICAqYW1ldHJpY3MgKQorICB7CisgICAgQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzID0gTlVMTDsKKworICAgIEFGX1N0eWxlICAgICAgICAgICAgICAgc3R5bGUgPSAoQUZfU3R5bGUpb3B0aW9uczsKKyAgICBBRl9Xcml0aW5nU3lzdGVtQ2xhc3MgIHdyaXRpbmdfc3lzdGVtX2NsYXNzOworICAgIEFGX1N0eWxlQ2xhc3MgICAgICAgICAgc3R5bGVfY2xhc3M7CisKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggZ2luZGV4ID49IChGVF9VTG9uZylnbG9iYWxzLT5nbHlwaF9jb3VudCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGlmIHdlIGhhdmUgYSBmb3JjZWQgc3R5bGUgKHZpYSBgb3B0aW9ucycpLCB1c2UgaXQsICovCisgICAgLyogb3RoZXJ3aXNlIGxvb2sgaW50byBgZ2x5cGhfc3R5bGVzJyBhcnJheSAgICAgICAgICAgKi8KKyAgICBpZiAoIHN0eWxlID09IEFGX1NUWUxFX05PTkVfREZMVCB8fCBzdHlsZSArIDEgPj0gQUZfU1RZTEVfTUFYICkKKyAgICAgIHN0eWxlID0gKEFGX1N0eWxlKSggZ2xvYmFscy0+Z2x5cGhfc3R5bGVzW2dpbmRleF0gJgorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TVFlMRV9VTkFTU0lHTkVEICAgICAgICAgICApOworCisgICAgc3R5bGVfY2xhc3MgICAgICAgICAgPSBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzdHlsZV07CisgICAgd3JpdGluZ19zeXN0ZW1fY2xhc3MgPSBBRl9XUklUSU5HX1NZU1RFTV9DTEFTU0VTX0dFVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKworICAgIG1ldHJpY3MgPSBnbG9iYWxzLT5tZXRyaWNzW3N0eWxlXTsKKyAgICBpZiAoIG1ldHJpY3MgPT0gTlVMTCApCisgICAgeworICAgICAgLyogY3JlYXRlIHRoZSBnbG9iYWwgbWV0cmljcyBvYmplY3QgaWYgbmVjZXNzYXJ5ICovCisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGdsb2JhbHMtPmZhY2UtPm1lbW9yeTsKKworCisgICAgICBpZiAoIEZUX0FMTE9DKCBtZXRyaWNzLCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19zaXplICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIG1ldHJpY3MtPnN0eWxlX2NsYXNzID0gc3R5bGVfY2xhc3M7CisgICAgICBtZXRyaWNzLT5nbG9iYWxzICAgICA9IGdsb2JhbHM7CisKKyAgICAgIGlmICggd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX21ldHJpY3NfaW5pdCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX21ldHJpY3NfaW5pdCggbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzLT5mYWNlICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19kb25lICkKKyAgICAgICAgICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzLT5zdHlsZV9tZXRyaWNzX2RvbmUoIG1ldHJpY3MgKTsKKworICAgICAgICAgIEZUX0ZSRUUoIG1ldHJpY3MgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZ2xvYmFscy0+bWV0cmljc1tzdHlsZV0gPSBtZXRyaWNzOworICAgIH0KKworICBFeGl0OgorICAgICphbWV0cmljcyA9IG1ldHJpY3M7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGFmX2ZhY2VfZ2xvYmFsc19pc19kaWdpdCggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGdpbmRleCApCisgIHsKKyAgICBpZiAoIGdpbmRleCA8IChGVF9VTG9uZylnbG9iYWxzLT5nbHlwaF9jb3VudCApCisgICAgICByZXR1cm4gKEZUX0Jvb2wpKCBnbG9iYWxzLT5nbHlwaF9zdHlsZXNbZ2luZGV4XSAmIEFGX0RJR0lUICk7CisKKyAgICByZXR1cm4gKEZUX0Jvb2wpMDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZ2xvYmFsLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZnbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmZ2xvYmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRkdMT0JBTF9IX18KKyNkZWZpbmUgX19BRkdMT0JBTF9IX18KKworCisjaW5jbHVkZSAiYWZ0eXBlcy5oIgorI2luY2x1ZGUgImFmbW9kdWxlLmgiCisjaW5jbHVkZSAiaGJzaGltLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTF9BUlJBWSggQUZfV3JpdGluZ1N5c3RlbUNsYXNzICkKKyAgYWZfd3JpdGluZ19zeXN0ZW1fY2xhc3Nlc1tdOworCisKKyN1bmRlZiAgU0NSSVBUCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc2MxLCBzYzIsIHNjMyApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgQUZfREVDTEFSRV9TQ1JJUFRfQ0xBU1MoIGFmXyAjIyBzICMjIF9zY3JpcHRfY2xhc3MgKQorCisjaW5jbHVkZSAiYWZzY3JpcHQuaCIKKworICBGVF9MT0NBTF9BUlJBWSggQUZfU2NyaXB0Q2xhc3MgKQorICBhZl9zY3JpcHRfY2xhc3Nlc1tdOworCisKKyN1bmRlZiAgU1RZTEUKKyNkZWZpbmUgU1RZTEUoIHMsIFMsIGQsIHdzLCBzYywgc3MsIGMgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgQUZfREVDTEFSRV9TVFlMRV9DTEFTUyggYWZfICMjIHMgIyMgX3N0eWxlX2NsYXNzICkKKworI2luY2x1ZGUgImFmc3R5bGVzLmgiCisKKyAgRlRfTE9DQUxfQVJSQVkoIEFGX1N0eWxlQ2xhc3MgKQorICBhZl9zdHlsZV9jbGFzc2VzW107CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgIEZUX0xPQ0FMX0FSUkFZKCBjaGFyKiApCisgIGFmX3N0eWxlX25hbWVzW107CisjZW5kaWYKKworCisgIC8qCisgICAqICBEZWZhdWx0IHZhbHVlcyBhbmQgZmxhZ3MgZm9yIGJvdGggYXV0b2ZpdHRlciBnbG9iYWxzIChmb3VuZCBpbgorICAgKiAgQUZfTW9kdWxlUmVjKSBhbmQgZmFjZSBnbG9iYWxzIChpbiBBRl9GYWNlR2xvYmFsc1JlYykuCisgICAqLworCisgIC8qIGluZGV4IG9mIGZhbGxiYWNrIHN0eWxlIGluIGBhZl9zdHlsZV9jbGFzc2VzJyAqLworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisjZGVmaW5lIEFGX1NUWUxFX0ZBTExCQUNLICAgIEFGX1NUWUxFX0hBTklfREZMVAorI2Vsc2UKKyNkZWZpbmUgQUZfU1RZTEVfRkFMTEJBQ0sgICAgQUZfU1RZTEVfTk9ORV9ERkxUCisjZW5kaWYKKyAgLyogZGVmYXVsdCBzY3JpcHQgZm9yIE9wZW5UeXBlOyBpZ25vcmVkIGlmIEhhcmZCdXp6IGlzbid0IHVzZWQgKi8KKyNkZWZpbmUgQUZfU0NSSVBUX0RFRkFVTFQgICAgQUZfU0NSSVBUX0xBVE4KKyAgLyogYSBiaXQgbWFzayBpbmRpY2F0aW5nIGFuIHVuY292ZXJlZCBnbHlwaCAgICAgICAgKi8KKyNkZWZpbmUgQUZfU1RZTEVfVU5BU1NJR05FRCAgMHg3RgorICAvKiBpZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGFuIEFTQ0lJIGRpZ2l0ICAgICAqLworI2RlZmluZSBBRl9ESUdJVCAgICAgICAgICAgICAweDgwCisKKyAgLyogYGluY3JlYXNlLXgtaGVpZ2h0JyBwcm9wZXJ0eSAqLworI2RlZmluZSBBRl9QUk9QX0lOQ1JFQVNFX1hfSEVJR0hUX01JTiAgNgorI2RlZmluZSBBRl9QUk9QX0lOQ1JFQVNFX1hfSEVJR0hUX01BWCAgMAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgRiBBIEMgRSAgIEcgTCBPIEIgQSBMIFMgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qCisgICAqICBOb3RlIHRoYXQgZ2x5cGhfc3R5bGVzW10gbWFwcyBlYWNoIGdseXBoIHRvIGFuIGluZGV4IGludG8gdGhlCisgICAqICBgYWZfc3R5bGVfY2xhc3NlcycgYXJyYXkuCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgQUZfRmFjZUdsb2JhbHNSZWNfCisgIHsKKyAgICBGVF9GYWNlICAgICAgICAgIGZhY2U7CisgICAgRlRfTG9uZyAgICAgICAgICBnbHlwaF9jb3VudDsgICAgLyogc2FtZSBhcyBmYWNlLT5udW1fZ2x5cGhzICovCisgICAgRlRfQnl0ZSogICAgICAgICBnbHlwaF9zdHlsZXM7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgorICAgIGhiX2ZvbnRfdCogICAgICAgaGJfZm9udDsKKyNlbmRpZgorCisgICAgLyogcGVyLWZhY2UgYXV0by1oaW50ZXIgcHJvcGVydGllcyAqLworICAgIEZUX1VJbnQgICAgICAgICAgaW5jcmVhc2VfeF9oZWlnaHQ7CisKKyAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3NbQUZfU1RZTEVfTUFYXTsKKworICAgIEFGX01vZHVsZSAgICAgICAgbW9kdWxlOyAgICAgICAgIC8qIHRvIGFjY2VzcyBnbG9iYWwgcHJvcGVydGllcyAqLworCisgIH0gQUZfRmFjZUdsb2JhbHNSZWM7CisKKworICAvKgorICAgKiAgbW9kZWwgdGhlIGdsb2JhbCBoaW50cyBkYXRhIGZvciBhIGdpdmVuIGZhY2UsIGRlY29tcG9zZWQgaW50bworICAgKiAgc3R5bGUtc3BlY2lmaWMgaXRlbXMKKyAgICovCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgYWZfZmFjZV9nbG9iYWxzX25ldyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9GYWNlR2xvYmFscyAgKmFnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9Nb2R1bGUgICAgICAgIG1vZHVsZSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2ZhY2VfZ2xvYmFsc19nZXRfbWV0cmljcyggQUZfRmFjZUdsb2JhbHMgICAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgICphbWV0cmljcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfZmFjZV9nbG9iYWxzX2ZyZWUoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzICk7CisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgYWZfZmFjZV9nbG9iYWxzX2lzX2RpZ2l0KCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2luZGV4ICk7CisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGR0xPQkFMX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmaGludHMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0ODJlYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKQEAgLTAsMCArMSwxNTA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmhpbnRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJhZmhpbnRzLmgiCisjaW5jbHVkZSAiYWZlcnJvcnMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYWZoaW50cworCisKKyAgLyogR2V0IG5ldyBzZWdtZW50IGZvciBnaXZlbiBheGlzLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9heGlzX2hpbnRzX25ld19zZWdtZW50KCBBRl9BeGlzSGludHMgIGF4aXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TZWdtZW50ICAgKmFzZWdtZW50ICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CisgICAgQUZfU2VnbWVudCAgc2VnbWVudCA9IE5VTEw7CisKKworICAgIGlmICggYXhpcy0+bnVtX3NlZ21lbnRzIDwgQUZfU0VHTUVOVFNfRU1CRURERUQgKQorICAgIHsKKyAgICAgIGlmICggYXhpcy0+c2VnbWVudHMgPT0gTlVMTCApCisgICAgICB7CisgICAgICAgIGF4aXMtPnNlZ21lbnRzICAgICA9IGF4aXMtPmVtYmVkZGVkLnNlZ21lbnRzOworICAgICAgICBheGlzLT5tYXhfc2VnbWVudHMgPSBBRl9TRUdNRU5UU19FTUJFRERFRDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIGF4aXMtPm51bV9zZWdtZW50cyA+PSBheGlzLT5tYXhfc2VnbWVudHMgKQorICAgIHsKKyAgICAgIEZUX0ludCAgb2xkX21heCA9IGF4aXMtPm1heF9zZWdtZW50czsKKyAgICAgIEZUX0ludCAgbmV3X21heCA9IG9sZF9tYXg7CisgICAgICBGVF9JbnQgIGJpZ19tYXggPSAoRlRfSW50KSggRlRfSU5UX01BWCAvIHNpemVvZiAoICpzZWdtZW50ICkgKTsKKworCisgICAgICBpZiAoIG9sZF9tYXggPj0gYmlnX21heCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBuZXdfbWF4ICs9ICggbmV3X21heCA+PiAyICkgKyA0OworICAgICAgaWYgKCBuZXdfbWF4IDwgb2xkX21heCB8fCBuZXdfbWF4ID4gYmlnX21heCApCisgICAgICAgIG5ld19tYXggPSBiaWdfbWF4OworCisgICAgICBpZiAoIGF4aXMtPnNlZ21lbnRzID09IGF4aXMtPmVtYmVkZGVkLnNlZ21lbnRzICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGF4aXMtPnNlZ21lbnRzLCBuZXdfbWF4ICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgZnRfbWVtY3B5KCBheGlzLT5zZWdtZW50cywgYXhpcy0+ZW1iZWRkZWQuc2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggYXhpcy0+ZW1iZWRkZWQuc2VnbWVudHMgKSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBheGlzLT5zZWdtZW50cywgb2xkX21heCwgbmV3X21heCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGF4aXMtPm1heF9zZWdtZW50cyA9IG5ld19tYXg7CisgICAgfQorCisgICAgc2VnbWVudCA9IGF4aXMtPnNlZ21lbnRzICsgYXhpcy0+bnVtX3NlZ21lbnRzKys7CisKKyAgRXhpdDoKKyAgICAqYXNlZ21lbnQgPSBzZWdtZW50OworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogR2V0IG5ldyBlZGdlIGZvciBnaXZlbiBheGlzLCBkaXJlY3Rpb24sIGFuZCBwb3NpdGlvbiwgKi8KKyAgLyogd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIGVkZ2UgaXRzZWxmLiAgICAgICAgICAgICAgICAgKi8KKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBBRl9BeGlzSGludHMgIGF4aXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgZnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGlyZWN0aW9uICBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9FZGdlICAgICAgKmFuZWRnZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgQUZfRWRnZSAgIGVkZ2UgID0gTlVMTDsKKyAgICBBRl9FZGdlICAgZWRnZXM7CisKKworICAgIGlmICggYXhpcy0+bnVtX2VkZ2VzIDwgQUZfRURHRVNfRU1CRURERUQgKQorICAgIHsKKyAgICAgIGlmICggYXhpcy0+ZWRnZXMgPT0gTlVMTCApCisgICAgICB7CisgICAgICAgIGF4aXMtPmVkZ2VzICAgICA9IGF4aXMtPmVtYmVkZGVkLmVkZ2VzOworICAgICAgICBheGlzLT5tYXhfZWRnZXMgPSBBRl9FREdFU19FTUJFRERFRDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIGF4aXMtPm51bV9lZGdlcyA+PSBheGlzLT5tYXhfZWRnZXMgKQorICAgIHsKKyAgICAgIEZUX0ludCAgb2xkX21heCA9IGF4aXMtPm1heF9lZGdlczsKKyAgICAgIEZUX0ludCAgbmV3X21heCA9IG9sZF9tYXg7CisgICAgICBGVF9JbnQgIGJpZ19tYXggPSAoRlRfSW50KSggRlRfSU5UX01BWCAvIHNpemVvZiAoICplZGdlICkgKTsKKworCisgICAgICBpZiAoIG9sZF9tYXggPj0gYmlnX21heCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBuZXdfbWF4ICs9ICggbmV3X21heCA+PiAyICkgKyA0OworICAgICAgaWYgKCBuZXdfbWF4IDwgb2xkX21heCB8fCBuZXdfbWF4ID4gYmlnX21heCApCisgICAgICAgIG5ld19tYXggPSBiaWdfbWF4OworCisgICAgICBpZiAoIGF4aXMtPmVkZ2VzID09IGF4aXMtPmVtYmVkZGVkLmVkZ2VzICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGF4aXMtPmVkZ2VzLCBuZXdfbWF4ICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgZnRfbWVtY3B5KCBheGlzLT5lZGdlcywgYXhpcy0+ZW1iZWRkZWQuZWRnZXMsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggYXhpcy0+ZW1iZWRkZWQuZWRnZXMgKSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBheGlzLT5lZGdlcywgb2xkX21heCwgbmV3X21heCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGF4aXMtPm1heF9lZGdlcyA9IG5ld19tYXg7CisgICAgfQorCisgICAgZWRnZXMgPSBheGlzLT5lZGdlczsKKyAgICBlZGdlICA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOworCisgICAgd2hpbGUgKCBlZGdlID4gZWRnZXMgKQorICAgIHsKKyAgICAgIGlmICggZWRnZVstMV0uZnBvcyA8IGZwb3MgKQorICAgICAgICBicmVhazsKKworICAgICAgLyogd2Ugd2FudCB0aGUgZWRnZSB3aXRoIHNhbWUgcG9zaXRpb24gYW5kIG1pbm9yIGRpcmVjdGlvbiAqLworICAgICAgLyogdG8gYXBwZWFyIGJlZm9yZSB0aG9zZSBpbiB0aGUgbWFqb3Igb25lIGluIHRoZSBsaXN0ICAgICAqLworICAgICAgaWYgKCBlZGdlWy0xXS5mcG9zID09IGZwb3MgJiYgZGlyID09IGF4aXMtPm1ham9yX2RpciApCisgICAgICAgIGJyZWFrOworCisgICAgICBlZGdlWzBdID0gZWRnZVstMV07CisgICAgICBlZGdlLS07CisgICAgfQorCisgICAgYXhpcy0+bnVtX2VkZ2VzKys7CisKKyAgRXhpdDoKKyAgICAqYW5lZGdlID0gZWRnZTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisjaWZkZWYgRlRfREVCVUdfQVVUT0ZJVAorCisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKyAgLyogVGhlIGR1bXAgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBgZnRncmlkJyBkZW1vIHByb2dyYW0sIHRvby4gKi8KKyNkZWZpbmUgQUZfRFVNUCggdmFyZm9ybWF0ICkgICAgICAgICAgXAorICAgICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggdG9fc3Rkb3V0ICkgICAgICAgICAgXAorICAgICAgICAgICAgICBwcmludGYgdmFyZm9ybWF0OyAgICAgICBcCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgRlRfVFJBQ0U3KCB2YXJmb3JtYXQgKTsgXAorICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworCisgIHN0YXRpYyBjb25zdCBjaGFyKgorICBhZl9kaXJfc3RyKCBBRl9EaXJlY3Rpb24gIGRpciApCisgIHsKKyAgICBjb25zdCBjaGFyKiAgcmVzdWx0OworCisKKyAgICBzd2l0Y2ggKCBkaXIgKQorICAgIHsKKyAgICBjYXNlIEFGX0RJUl9VUDoKKyAgICAgIHJlc3VsdCA9ICJ1cCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFGX0RJUl9ET1dOOgorICAgICAgcmVzdWx0ID0gImRvd24iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBRl9ESVJfTEVGVDoKKyAgICAgIHJlc3VsdCA9ICJsZWZ0IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQUZfRElSX1JJR0hUOgorICAgICAgcmVzdWx0ID0gInJpZ2h0IjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXN1bHQgPSAibm9uZSI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyNkZWZpbmUgQUZfSU5ERVhfTlVNKCBwdHIsIGJhc2UgKSAgKGludCkoIChwdHIpID8gKCAocHRyKSAtIChiYXNlKSApIDogLTEgKQorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiIHsKKyNlbmRpZgorICB2b2lkCisgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIHRvX3N0ZG91dCApCisgIHsKKyAgICBBRl9Qb2ludCAgcG9pbnRzID0gaGludHMtPnBvaW50czsKKyAgICBBRl9Qb2ludCAgbGltaXQgID0gcG9pbnRzICsgaGludHMtPm51bV9wb2ludHM7CisgICAgQUZfUG9pbnQgIHBvaW50OworCisKKyAgICBBRl9EVU1QKCggIlRhYmxlIG9mIHBvaW50czpcbiIgKSk7CisKKyAgICBpZiAoIGhpbnRzLT5udW1fcG9pbnRzICkKKyAgICAgIEFGX0RVTVAoKCAiICBbIGluZGV4IHwgIHhvcmcgfCAgeW9yZyB8IHhzY2FsZSB8IHlzY2FsZSIKKyAgICAgICAgICAgICAgICAiIHwgIHhmaXQgfCAgeWZpdCB8ICBmbGFncyBdXG4iICkpOworICAgIGVsc2UKKyAgICAgIEFGX0RVTVAoKCAiICAobm9uZSlcbiIgKSk7CisKKyAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBsaW1pdDsgcG9pbnQrKyApCisgICAgICBBRl9EVU1QKCggIiAgWyAlNWQgfCAlNWQgfCAlNWQgfCAlNi4yZiB8ICU2LjJmIgorICAgICAgICAgICAgICAgICIgfCAlNS4yZiB8ICU1LjJmIHwgJWMgXVxuIiwKKyAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIHBvaW50LCBwb2ludHMgKSwKKyAgICAgICAgICAgICAgICBwb2ludC0+ZngsCisgICAgICAgICAgICAgICAgcG9pbnQtPmZ5LAorICAgICAgICAgICAgICAgIHBvaW50LT5veCAvIDY0LjAsCisgICAgICAgICAgICAgICAgcG9pbnQtPm95IC8gNjQuMCwKKyAgICAgICAgICAgICAgICBwb2ludC0+eCAvIDY0LjAsCisgICAgICAgICAgICAgICAgcG9pbnQtPnkgLyA2NC4wLAorICAgICAgICAgICAgICAgICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gKSA/ICd3JyA6ICcgJykpOworICAgIEFGX0RVTVAoKCAiXG4iICkpOworICB9CisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorI2VuZGlmCisKKworICBzdGF0aWMgY29uc3QgY2hhcioKKyAgYWZfZWRnZV9mbGFnc190b19zdHJpbmcoIEZUX1VJbnQgIGZsYWdzICkKKyAgeworICAgIHN0YXRpYyBjaGFyICB0ZW1wWzMyXTsKKyAgICBpbnQgICAgICAgICAgcG9zID0gMDsKKworCisgICAgaWYgKCBmbGFncyAmIEFGX0VER0VfUk9VTkQgKQorICAgIHsKKyAgICAgIGZ0X21lbWNweSggdGVtcCArIHBvcywgInJvdW5kIiwgNSApOworICAgICAgcG9zICs9IDU7CisgICAgfQorICAgIGlmICggZmxhZ3MgJiBBRl9FREdFX1NFUklGICkKKyAgICB7CisgICAgICBpZiAoIHBvcyA+IDAgKQorICAgICAgICB0ZW1wW3BvcysrXSA9ICcgJzsKKyAgICAgIGZ0X21lbWNweSggdGVtcCArIHBvcywgInNlcmlmIiwgNSApOworICAgICAgcG9zICs9IDU7CisgICAgfQorICAgIGlmICggcG9zID09IDAgKQorICAgICAgcmV0dXJuICJub3JtYWwiOworCisgICAgdGVtcFtwb3NdID0gJ1wwJzsKKworICAgIHJldHVybiB0ZW1wOworICB9CisKKworICAvKiBEdW1wIHRoZSBhcnJheSBvZiBsaW5rZWQgc2VnbWVudHMuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiIHsKKyNlbmRpZgorICB2b2lkCisgIGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICB0b19zdGRvdXQgKQorICB7CisgICAgRlRfSW50ICBkaW1lbnNpb247CisKKworICAgIGZvciAoIGRpbWVuc2lvbiA9IDE7IGRpbWVuc2lvbiA+PSAwOyBkaW1lbnNpb24tLSApCisgICAgeworICAgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICA9ICZoaW50cy0+YXhpc1tkaW1lbnNpb25dOworICAgICAgQUZfUG9pbnQgICAgICBwb2ludHMgICA9IGhpbnRzLT5wb2ludHM7CisgICAgICBBRl9FZGdlICAgICAgIGVkZ2VzICAgID0gYXhpcy0+ZWRnZXM7CisgICAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzID0gYXhpcy0+c2VnbWVudHM7CisgICAgICBBRl9TZWdtZW50ICAgIGxpbWl0ICAgID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CisgICAgICBBRl9TZWdtZW50ICAgIHNlZzsKKworCisgICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIHNlZ21lbnRzOlxuIiwKKyAgICAgICAgICAgICAgICBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAidmVydGljYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImhvcml6b250YWwiICkpOworICAgICAgaWYgKCBheGlzLT5udW1fc2VnbWVudHMgKQorICAgICAgICBBRl9EVU1QKCggIiAgWyBpbmRleCB8ICBwb3MgIHwgIGRpciAgfCBmcm9tIgorICAgICAgICAgICAgICAgICAgIiB8ICB0byAgfCBsaW5rIHwgc2VyaWYgfCBlZGdlIgorICAgICAgICAgICAgICAgICAgIiB8IGhlaWdodCB8IGV4dHJhIHwgICAgZmxhZ3MgICAgXVxuIiApKTsKKyAgICAgIGVsc2UKKyAgICAgICAgQUZfRFVNUCgoICIgIChub25lKVxuIiApKTsKKworICAgICAgZm9yICggc2VnID0gc2VnbWVudHM7IHNlZyA8IGxpbWl0OyBzZWcrKyApCisgICAgICAgIEFGX0RVTVAoKCAiICBbICU1ZCB8ICU1LjJnIHwgJTVzIHwgJTRkIgorICAgICAgICAgICAgICAgICAgIiB8ICU0ZCB8ICU0ZCB8ICU1ZCB8ICU0ZCIKKyAgICAgICAgICAgICAgICAgICIgfCAlNmQgfCAlNWQgfCAlMTFzIF1cbiIsCisgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIHNlZywgc2VnbWVudHMgKSwKKyAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9PSBBRl9ESU1FTlNJT05fSE9SWgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGludClzZWctPmZpcnN0LT5veCAvIDY0LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpbnQpc2VnLT5maXJzdC0+b3kgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgYWZfZGlyX3N0ciggKEFGX0RpcmVjdGlvbilzZWctPmRpciApLAorICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPmZpcnN0LCBwb2ludHMgKSwKKyAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggc2VnLT5sYXN0LCBwb2ludHMgKSwKKyAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggc2VnLT5saW5rLCBzZWdtZW50cyApLAorICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPnNlcmlmLCBzZWdtZW50cyApLAorICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPmVkZ2UsIGVkZ2VzICksCisgICAgICAgICAgICAgICAgICBzZWctPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgIHNlZy0+aGVpZ2h0IC0gKCBzZWctPm1heF9jb29yZCAtIHNlZy0+bWluX2Nvb3JkICksCisgICAgICAgICAgICAgICAgICBhZl9lZGdlX2ZsYWdzX3RvX3N0cmluZyggc2VnLT5mbGFncyApICkpOworICAgICAgQUZfRFVNUCgoICJcbiIgKSk7CisgICAgfQorICB9CisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorI2VuZGlmCisKKworICAvKiBGZXRjaCBudW1iZXIgb2Ygc2VnbWVudHMuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiIHsKKyNlbmRpZgorICBGVF9FcnJvcgorICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQqICAgICAgICBudW1fc2VnbWVudHMgKQorICB7CisgICAgQUZfRGltZW5zaW9uICBkaW07CisgICAgQUZfQXhpc0hpbnRzICBheGlzOworCisKKyAgICBkaW0gPSAoIGRpbWVuc2lvbiA9PSAwICkgPyBBRl9ESU1FTlNJT05fSE9SWiA6IEFGX0RJTUVOU0lPTl9WRVJUOworCisgICAgYXhpcyAgICAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgICpudW1fc2VnbWVudHMgPSBheGlzLT5udW1fc2VnbWVudHM7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorI2VuZGlmCisKKworICAvKiBGZXRjaCBvZmZzZXQgb2Ygc2VnbWVudHMgaW50byB1c2VyIHN1cHBsaWVkIG9mZnNldCBhcnJheS4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIGV4dGVybiAiQyIgeworI2VuZGlmCisgIEZUX0Vycm9yCisgIGFmX2dseXBoX2hpbnRzX2dldF9zZWdtZW50X29mZnNldCggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAqaXNfYmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICpibHVlX29mZnNldCApCisgIHsKKyAgICBBRl9EaW1lbnNpb24gIGRpbTsKKyAgICBBRl9BeGlzSGludHMgIGF4aXM7CisgICAgQUZfU2VnbWVudCAgICBzZWc7CisKKworICAgIGlmICggIW9mZnNldCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGRpbSA9ICggZGltZW5zaW9uID09IDAgKSA/IEFGX0RJTUVOU0lPTl9IT1JaIDogQUZfRElNRU5TSU9OX1ZFUlQ7CisKKyAgICBheGlzID0gJmhpbnRzLT5heGlzW2RpbV07CisKKyAgICBpZiAoIGlkeCA8IDAgfHwgaWR4ID49IGF4aXMtPm51bV9zZWdtZW50cyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIHNlZyAgICAgID0gJmF4aXMtPnNlZ21lbnRzW2lkeF07CisgICAgKm9mZnNldCAgPSAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApID8gc2VnLT5maXJzdC0+b3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWctPmZpcnN0LT5veTsKKyAgICBpZiAoIHNlZy0+ZWRnZSApCisgICAgICAqaXNfYmx1ZSA9IChGVF9Cb29sKSggc2VnLT5lZGdlLT5ibHVlX2VkZ2UgIT0gMCApOworICAgIGVsc2UKKyAgICAgICppc19ibHVlID0gRkFMU0U7CisKKyAgICBpZiAoICppc19ibHVlICkKKyAgICAgICpibHVlX29mZnNldCA9IHNlZy0+ZWRnZS0+Ymx1ZV9lZGdlLT5jdXI7CisgICAgZWxzZQorICAgICAgKmJsdWVfb2Zmc2V0ID0gMDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKyNpZmRlZiBfX2NwbHVzcGx1cworICB9CisjZW5kaWYKKworCisgIC8qIER1bXAgdGhlIGFycmF5IG9mIGxpbmtlZCBlZGdlcy4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIGV4dGVybiAiQyIgeworI2VuZGlmCisgIHZvaWQKKyAgYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIHRvX3N0ZG91dCApCisgIHsKKyAgICBGVF9JbnQgIGRpbWVuc2lvbjsKKworCisgICAgZm9yICggZGltZW5zaW9uID0gMTsgZGltZW5zaW9uID49IDA7IGRpbWVuc2lvbi0tICkKKyAgICB7CisgICAgICBBRl9BeGlzSGludHMgIGF4aXMgID0gJmhpbnRzLT5heGlzW2RpbWVuc2lvbl07CisgICAgICBBRl9FZGdlICAgICAgIGVkZ2VzID0gYXhpcy0+ZWRnZXM7CisgICAgICBBRl9FZGdlICAgICAgIGxpbWl0ID0gZWRnZXMgKyBheGlzLT5udW1fZWRnZXM7CisgICAgICBBRl9FZGdlICAgICAgIGVkZ2U7CisKKworICAgICAgLyoKKyAgICAgICAqICBub3RlOiBBRl9ESU1FTlNJT05fSE9SWiBjb3JyZXNwb25kcyB0byBfdmVydGljYWxfIGVkZ2VzCisgICAgICAgKiAgICAgICAgc2luY2UgdGhleSBoYXZlIGEgY29uc3RhbnQgWCBjb29yZGluYXRlLgorICAgICAgICovCisgICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIGVkZ2VzOlxuIiwKKyAgICAgICAgICAgICAgICBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAidmVydGljYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImhvcml6b250YWwiICkpOworICAgICAgaWYgKCBheGlzLT5udW1fZWRnZXMgKQorICAgICAgICBBRl9EVU1QKCggIiAgWyBpbmRleCB8ICBwb3MgIHwgIGRpciAgfCBsaW5rIgorICAgICAgICAgICAgICAgICAgIiB8IHNlcmlmIHwgYmx1ZSB8IG9wb3MgIHwgIHBvcyAgfCAgICBmbGFncyAgICBdXG4iICkpOworICAgICAgZWxzZQorICAgICAgICBBRl9EVU1QKCggIiAgKG5vbmUpXG4iICkpOworCisgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBsaW1pdDsgZWRnZSsrICkKKyAgICAgICAgQUZfRFVNUCgoICIgIFsgJTVkIHwgJTUuMmcgfCAlNXMgfCAlNGQiCisgICAgICAgICAgICAgICAgICAiIHwgJTVkIHwgICAlYyAgfCAlNS4yZiB8ICU1LjJmIHwgJTExcyBdXG4iLAorICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBlZGdlLCBlZGdlcyApLAorICAgICAgICAgICAgICAgICAgKGludCllZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgIGFmX2Rpcl9zdHIoIChBRl9EaXJlY3Rpb24pZWRnZS0+ZGlyICksCisgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIGVkZ2UtPmxpbmssIGVkZ2VzICksCisgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIGVkZ2UtPnNlcmlmLCBlZGdlcyApLAorICAgICAgICAgICAgICAgICAgZWRnZS0+Ymx1ZV9lZGdlID8gJ3knIDogJ24nLAorICAgICAgICAgICAgICAgICAgZWRnZS0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgYWZfZWRnZV9mbGFnc190b19zdHJpbmcoIGVkZ2UtPmZsYWdzICkgKSk7CisgICAgICBBRl9EVU1QKCggIlxuIiApKTsKKyAgICB9CisgIH0KKyNpZmRlZiBfX2NwbHVzcGx1cworICB9CisjZW5kaWYKKworI3VuZGVmIEFGX0RVTVAKKworI2VuZGlmIC8qICFGVF9ERUJVR19BVVRPRklUICovCisKKworICAvKiBDb21wdXRlIHRoZSBkaXJlY3Rpb24gdmFsdWUgb2YgYSBnaXZlbiB2ZWN0b3IuICovCisKKyAgRlRfTE9DQUxfREVGKCBBRl9EaXJlY3Rpb24gKQorICBhZl9kaXJlY3Rpb25fY29tcHV0ZSggRlRfUG9zICBkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgZHkgKQorICB7CisgICAgRlRfUG9zICAgICAgICBsbCwgc3M7ICAvKiBsb25nIGFuZCBzaG9ydCBhcm0gbGVuZ3RocyAqLworICAgIEFGX0RpcmVjdGlvbiAgZGlyOyAgICAgLyogY2FuZGlkYXRlIGRpcmVjdGlvbiAgICAgICAgKi8KKworCisgICAgaWYgKCBkeSA+PSBkeCApCisgICAgeworICAgICAgaWYgKCBkeSA+PSAtZHggKQorICAgICAgeworICAgICAgICBkaXIgPSBBRl9ESVJfVVA7CisgICAgICAgIGxsICA9IGR5OworICAgICAgICBzcyAgPSBkeDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZGlyID0gQUZfRElSX0xFRlQ7CisgICAgICAgIGxsICA9IC1keDsKKyAgICAgICAgc3MgID0gZHk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogZHkgPCBkeCAqLworICAgIHsKKyAgICAgIGlmICggZHkgPj0gLWR4ICkKKyAgICAgIHsKKyAgICAgICAgZGlyID0gQUZfRElSX1JJR0hUOworICAgICAgICBsbCAgPSBkeDsKKyAgICAgICAgc3MgID0gZHk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGRpciA9IEFGX0RJUl9ET1dOOworICAgICAgICBsbCAgPSAtZHk7CisgICAgICAgIHNzICA9IGR4OworICAgICAgfQorICAgIH0KKworICAgIC8qIHJldHVybiBubyBkaXJlY3Rpb24gaWYgYXJtIGxlbmd0aHMgZG8gbm90IGRpZmZlciBlbm91Z2ggICAgICAgKi8KKyAgICAvKiAodmFsdWUgMTQgaXMgaGV1cmlzdGljLCBjb3JyZXNwb25kaW5nIHRvIGFwcHJveC4gNC4xIGRlZ3JlZXMpICovCisgICAgLyogdGhlIGxvbmcgYXJtIGlzIG5ldmVyIG5lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggbGwgPD0gMTQgKiBGVF9BQlMoIHNzICkgKQorICAgICAgZGlyID0gQUZfRElSX05PTkU7CisKKyAgICByZXR1cm4gZGlyOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19pbml0KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICkKKyAgeworICAgIC8qIG5vIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZW1iZWRkZWQgaXRlbXMgKi8KKyAgICBGVF9NRU1fWkVSTyggaGludHMsIHNpemVvZiAoICpoaW50cyApIC0gc2l6ZW9mICggaGludHMtPmVtYmVkZGVkICkgKTsKKyAgICBoaW50cy0+bWVtb3J5ID0gbWVtb3J5OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19kb25lKCBBRl9HbHlwaEhpbnRzICBoaW50cyApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKyAgICBpbnQgICAgICAgIGRpbTsKKworCisgICAgaWYgKCAhKCBoaW50cyAmJiBoaW50cy0+bWVtb3J5ICkgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gaGludHMtPm1lbW9yeTsKKworICAgIC8qCisgICAgICogIG5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGZyZWUgdGhlIHNlZ21lbnQgYW5kIGVkZ2UKKyAgICAgKiAgYnVmZmVycyBzaW5jZSB0aGV5IGFyZSByZWFsbHkgd2l0aGluIHRoZSBoaW50cy0+cG9pbnRzIGFycmF5CisgICAgICovCisgICAgZm9yICggZGltID0gMDsgZGltIDwgQUZfRElNRU5TSU9OX01BWDsgZGltKysgKQorICAgIHsKKyAgICAgIEFGX0F4aXNIaW50cyAgYXhpcyA9ICZoaW50cy0+YXhpc1tkaW1dOworCisKKyAgICAgIGF4aXMtPm51bV9zZWdtZW50cyA9IDA7CisgICAgICBheGlzLT5tYXhfc2VnbWVudHMgPSAwOworICAgICAgaWYgKCBheGlzLT5zZWdtZW50cyAhPSBheGlzLT5lbWJlZGRlZC5zZWdtZW50cyApCisgICAgICAgIEZUX0ZSRUUoIGF4aXMtPnNlZ21lbnRzICk7CisKKyAgICAgIGF4aXMtPm51bV9lZGdlcyA9IDA7CisgICAgICBheGlzLT5tYXhfZWRnZXMgPSAwOworICAgICAgaWYgKCBheGlzLT5lZGdlcyAhPSBheGlzLT5lbWJlZGRlZC5lZGdlcyApCisgICAgICAgIEZUX0ZSRUUoIGF4aXMtPmVkZ2VzICk7CisgICAgfQorCisgICAgaWYgKCBoaW50cy0+Y29udG91cnMgIT0gaGludHMtPmVtYmVkZGVkLmNvbnRvdXJzICkKKyAgICAgIEZUX0ZSRUUoIGhpbnRzLT5jb250b3VycyApOworICAgIGhpbnRzLT5tYXhfY29udG91cnMgPSAwOworICAgIGhpbnRzLT5udW1fY29udG91cnMgPSAwOworCisgICAgaWYgKCBoaW50cy0+cG9pbnRzICE9IGhpbnRzLT5lbWJlZGRlZC5wb2ludHMgKQorICAgICAgRlRfRlJFRSggaGludHMtPnBvaW50cyApOworICAgIGhpbnRzLT5tYXhfcG9pbnRzID0gMDsKKyAgICBoaW50cy0+bnVtX3BvaW50cyA9IDA7CisKKyAgICBoaW50cy0+bWVtb3J5ID0gTlVMTDsKKyAgfQorCisKKyAgLyogUmVzZXQgbWV0cmljcy4gKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MgKQorICB7CisgICAgaGludHMtPm1ldHJpY3MgICAgICA9IG1ldHJpY3M7CisgICAgaGludHMtPnNjYWxlcl9mbGFncyA9IG1ldHJpY3MtPnNjYWxlci5mbGFnczsKKyAgfQorCisKKyAgLyogUmVjb21wdXRlIGFsbCBBRl9Qb2ludCBpbiBBRl9HbHlwaEhpbnRzIGZyb20gdGhlIGRlZmluaXRpb25zICovCisgIC8qIGluIGEgc291cmNlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9nbHlwaF9oaW50c19yZWxvYWQoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgIG91dGxpbmUgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvciAgID0gRlRfRXJyX09rOworICAgIEFGX1BvaW50ICAgcG9pbnRzOworICAgIEZUX1VJbnQgICAgb2xkX21heCwgbmV3X21heDsKKyAgICBGVF9GaXhlZCAgIHhfc2NhbGUgPSBoaW50cy0+eF9zY2FsZTsKKyAgICBGVF9GaXhlZCAgIHlfc2NhbGUgPSBoaW50cy0+eV9zY2FsZTsKKyAgICBGVF9Qb3MgICAgIHhfZGVsdGEgPSBoaW50cy0+eF9kZWx0YTsKKyAgICBGVF9Qb3MgICAgIHlfZGVsdGEgPSBoaW50cy0+eV9kZWx0YTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSAgPSBoaW50cy0+bWVtb3J5OworCisKKyAgICBoaW50cy0+bnVtX3BvaW50cyAgID0gMDsKKyAgICBoaW50cy0+bnVtX2NvbnRvdXJzID0gMDsKKworICAgIGhpbnRzLT5heGlzWzBdLm51bV9zZWdtZW50cyA9IDA7CisgICAgaGludHMtPmF4aXNbMF0ubnVtX2VkZ2VzICAgID0gMDsKKyAgICBoaW50cy0+YXhpc1sxXS5udW1fc2VnbWVudHMgPSAwOworICAgIGhpbnRzLT5heGlzWzFdLm51bV9lZGdlcyAgICA9IDA7CisKKyAgICAvKiBmaXJzdCBvZiBhbGwsIHJlYWxsb2NhdGUgdGhlIGNvbnRvdXJzIGFycmF5IGlmIG5lY2Vzc2FyeSAqLworICAgIG5ld19tYXggPSAoRlRfVUludClvdXRsaW5lLT5uX2NvbnRvdXJzOworICAgIG9sZF9tYXggPSAoRlRfVUludCloaW50cy0+bWF4X2NvbnRvdXJzOworCisgICAgaWYgKCBuZXdfbWF4IDw9IEFGX0NPTlRPVVJTX0VNQkVEREVEICkKKyAgICB7CisgICAgICBpZiAoIGhpbnRzLT5jb250b3VycyA9PSBOVUxMICkKKyAgICAgIHsKKyAgICAgICAgaGludHMtPmNvbnRvdXJzICAgICA9IGhpbnRzLT5lbWJlZGRlZC5jb250b3VyczsKKyAgICAgICAgaGludHMtPm1heF9jb250b3VycyA9IEFGX0NPTlRPVVJTX0VNQkVEREVEOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICggbmV3X21heCA+IG9sZF9tYXggKQorICAgIHsKKyAgICAgIGlmICggaGludHMtPmNvbnRvdXJzID09IGhpbnRzLT5lbWJlZGRlZC5jb250b3VycyApCisgICAgICAgIGhpbnRzLT5jb250b3VycyA9IE5VTEw7CisKKyAgICAgIG5ld19tYXggPSAoIG5ld19tYXggKyAzICkgJiB+M1U7IC8qIHJvdW5kIHVwIHRvIGEgbXVsdGlwbGUgb2YgNCAqLworCisgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBoaW50cy0+Y29udG91cnMsIG9sZF9tYXgsIG5ld19tYXggKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaGludHMtPm1heF9jb250b3VycyA9IChGVF9JbnQpbmV3X21heDsKKyAgICB9CisKKyAgICAvKgorICAgICAqICB0aGVuIHJlYWxsb2NhdGUgdGhlIHBvaW50cyBhcnJheXMgaWYgbmVjZXNzYXJ5IC0tCisgICAgICogIG5vdGUgdGhhdCB3ZSByZXNlcnZlIHR3byBhZGRpdGlvbmFsIHBvaW50IHBvc2l0aW9ucywgdXNlZCB0bworICAgICAqICBoaW50IG1ldHJpY3MgYXBwcm9wcmlhdGVseQorICAgICAqLworICAgIG5ld19tYXggPSAoRlRfVUludCkoIG91dGxpbmUtPm5fcG9pbnRzICsgMiApOworICAgIG9sZF9tYXggPSAoRlRfVUludCloaW50cy0+bWF4X3BvaW50czsKKworICAgIGlmICggbmV3X21heCA8PSBBRl9QT0lOVFNfRU1CRURERUQgKQorICAgIHsKKyAgICAgIGlmICggaGludHMtPnBvaW50cyA9PSBOVUxMICkKKyAgICAgIHsKKyAgICAgICAgaGludHMtPnBvaW50cyAgICAgPSBoaW50cy0+ZW1iZWRkZWQucG9pbnRzOworICAgICAgICBoaW50cy0+bWF4X3BvaW50cyA9IEFGX1BPSU5UU19FTUJFRERFRDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIG5ld19tYXggPiBvbGRfbWF4ICkKKyAgICB7CisgICAgICBpZiAoIGhpbnRzLT5wb2ludHMgPT0gaGludHMtPmVtYmVkZGVkLnBvaW50cyApCisgICAgICAgIGhpbnRzLT5wb2ludHMgPSBOVUxMOworCisgICAgICBuZXdfbWF4ID0gKCBuZXdfbWF4ICsgMiArIDcgKSAmIH43VTsgLyogcm91bmQgdXAgdG8gYSBtdWx0aXBsZSBvZiA4ICovCisKKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGhpbnRzLT5wb2ludHMsIG9sZF9tYXgsIG5ld19tYXggKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaGludHMtPm1heF9wb2ludHMgPSAoRlRfSW50KW5ld19tYXg7CisgICAgfQorCisgICAgaGludHMtPm51bV9wb2ludHMgICA9IG91dGxpbmUtPm5fcG9pbnRzOworICAgIGhpbnRzLT5udW1fY29udG91cnMgPSBvdXRsaW5lLT5uX2NvbnRvdXJzOworCisgICAgLyogV2UgY2FuJ3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYEZUX091dGxpbmUuZmxhZ3MnIHRvIGtub3cgdGhlIGZpbGwgICAqLworICAgIC8qIGRpcmVjdGlvbiB1c2VkIGZvciBhIGdseXBoLCBnaXZlbiB0aGF0IHNvbWUgZm9udHMgYXJlIGJyb2tlbiAoZS5nLiwgKi8KKyAgICAvKiB0aGUgQXJwaGljIG9uZXMpLiAgV2UgdGh1cyByZWNvbXB1dGUgaXQgZWFjaCB0aW1lIHdlIG5lZWQgdG8uICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGhpbnRzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5tYWpvcl9kaXIgPSBBRl9ESVJfVVA7CisgICAgaGludHMtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLm1ham9yX2RpciA9IEFGX0RJUl9MRUZUOworCisgICAgaWYgKCBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiggb3V0bGluZSApID09IEZUX09SSUVOVEFUSU9OX1BPU1RTQ1JJUFQgKQorICAgIHsKKyAgICAgIGhpbnRzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5tYWpvcl9kaXIgPSBBRl9ESVJfRE9XTjsKKyAgICAgIGhpbnRzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXS5tYWpvcl9kaXIgPSBBRl9ESVJfUklHSFQ7CisgICAgfQorCisgICAgaGludHMtPnhfc2NhbGUgPSB4X3NjYWxlOworICAgIGhpbnRzLT55X3NjYWxlID0geV9zY2FsZTsKKyAgICBoaW50cy0+eF9kZWx0YSA9IHhfZGVsdGE7CisgICAgaGludHMtPnlfZGVsdGEgPSB5X2RlbHRhOworCisgICAgaGludHMtPnhtaW5fZGVsdGEgPSAwOworICAgIGhpbnRzLT54bWF4X2RlbHRhID0gMDsKKworICAgIHBvaW50cyA9IGhpbnRzLT5wb2ludHM7CisgICAgaWYgKCBoaW50cy0+bnVtX3BvaW50cyA9PSAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHsKKyAgICAgIEFGX1BvaW50ICBwb2ludDsKKyAgICAgIEFGX1BvaW50ICBwb2ludF9saW1pdCA9IHBvaW50cyArIGhpbnRzLT5udW1fcG9pbnRzOworCisKKyAgICAgIC8qIGNvbXB1dGUgY29vcmRpbmF0ZXMgJiBCZXppZXIgZmxhZ3MsIG5leHQgYW5kIHByZXYgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVmVjdG9yKiAgdmVjICAgICAgICAgICA9IG91dGxpbmUtPnBvaW50czsKKyAgICAgICAgY2hhciogICAgICAgdGFnICAgICAgICAgICA9IG91dGxpbmUtPnRhZ3M7CisgICAgICAgIEFGX1BvaW50ICAgIGVuZCAgICAgICAgICAgPSBwb2ludHMgKyBvdXRsaW5lLT5jb250b3Vyc1swXTsKKyAgICAgICAgQUZfUG9pbnQgICAgcHJldiAgICAgICAgICA9IGVuZDsKKyAgICAgICAgRlRfSW50ICAgICAgY29udG91cl9pbmRleCA9IDA7CisKKworICAgICAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBwb2ludF9saW1pdDsgcG9pbnQrKywgdmVjKyssIHRhZysrICkKKyAgICAgICAgeworICAgICAgICAgIHBvaW50LT5pbl9kaXIgID0gKEZUX0NoYXIpQUZfRElSX05PTkU7CisgICAgICAgICAgcG9pbnQtPm91dF9kaXIgPSAoRlRfQ2hhcilBRl9ESVJfTk9ORTsKKworICAgICAgICAgIHBvaW50LT5meCA9IChGVF9TaG9ydCl2ZWMtPng7CisgICAgICAgICAgcG9pbnQtPmZ5ID0gKEZUX1Nob3J0KXZlYy0+eTsKKyAgICAgICAgICBwb2ludC0+b3ggPSBwb2ludC0+eCA9IEZUX011bEZpeCggdmVjLT54LCB4X3NjYWxlICkgKyB4X2RlbHRhOworICAgICAgICAgIHBvaW50LT5veSA9IHBvaW50LT55ID0gRlRfTXVsRml4KCB2ZWMtPnksIHlfc2NhbGUgKSArIHlfZGVsdGE7CisKKyAgICAgICAgICBzd2l0Y2ggKCBGVF9DVVJWRV9UQUcoICp0YWcgKSApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX0NPTklDOgorICAgICAgICAgICAgcG9pbnQtPmZsYWdzID0gQUZfRkxBR19DT05JQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX0NVQklDOgorICAgICAgICAgICAgcG9pbnQtPmZsYWdzID0gQUZfRkxBR19DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwb2ludC0+ZmxhZ3MgPSBBRl9GTEFHX05PTkU7CisgICAgICAgICAgfQorCisgICAgICAgICAgcG9pbnQtPnByZXYgPSBwcmV2OworICAgICAgICAgIHByZXYtPm5leHQgID0gcG9pbnQ7CisgICAgICAgICAgcHJldiAgICAgICAgPSBwb2ludDsKKworICAgICAgICAgIGlmICggcG9pbnQgPT0gZW5kICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICsrY29udG91cl9pbmRleCA8IG91dGxpbmUtPm5fY29udG91cnMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbmQgID0gcG9pbnRzICsgb3V0bGluZS0+Y29udG91cnNbY29udG91cl9pbmRleF07CisgICAgICAgICAgICAgIHByZXYgPSBlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIHNldCB1cCB0aGUgY29udG91cnMgYXJyYXkgKi8KKyAgICAgIHsKKyAgICAgICAgQUZfUG9pbnQqICBjb250b3VyICAgICAgID0gaGludHMtPmNvbnRvdXJzOworICAgICAgICBBRl9Qb2ludCogIGNvbnRvdXJfbGltaXQgPSBjb250b3VyICsgaGludHMtPm51bV9jb250b3VyczsKKyAgICAgICAgc2hvcnQqICAgICBlbmQgICAgICAgICAgID0gb3V0bGluZS0+Y29udG91cnM7CisgICAgICAgIHNob3J0ICAgICAgaWR4ICAgICAgICAgICA9IDA7CisKKworICAgICAgICBmb3IgKCA7IGNvbnRvdXIgPCBjb250b3VyX2xpbWl0OyBjb250b3VyKyssIGVuZCsrICkKKyAgICAgICAgeworICAgICAgICAgIGNvbnRvdXJbMF0gPSBwb2ludHMgKyBpZHg7CisgICAgICAgICAgaWR4ICAgICAgICA9IChzaG9ydCkoIGVuZFswXSArIDEgKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqICBDb21wdXRlIGRpcmVjdGlvbnMgb2YgYGluJyBhbmQgYG91dCcgdmVjdG9ycy4KKyAgICAgICAgICoKKyAgICAgICAgICogIE5vdGUgdGhhdCBkaXN0YW5jZXMgYmV0d2VlbiBwb2ludHMgdGhhdCBhcmUgdmVyeSBuZWFyIHRvIGVhY2gKKyAgICAgICAgICogIG90aGVyIGFyZSBhY2N1bXVsYXRlZC4gIEluIG90aGVyIHdvcmRzLCB0aGUgYXV0by1oaW50ZXIKKyAgICAgICAgICogIHByZXBlbmRzIHRoZSBzbWFsbCB2ZWN0b3JzIGJldHdlZW4gbmVhciBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgICAqICBub24tbmVhciB2ZWN0b3IuICBBbGwgaW50ZXJtZWRpYXRlIHBvaW50cyBhcmUgdGFnZ2VkIGFzCisgICAgICAgICAqICB3ZWFrOyB0aGUgZGlyZWN0aW9ucyBhcmUgYWRqdXN0ZWQgYWxzbyB0byBiZSBlcXVhbCB0byB0aGUKKyAgICAgICAgICogIGFjY3VtdWxhdGVkIG9uZS4KKyAgICAgICAgICovCisKKyAgICAgICAgLyogdmFsdWUgMjAgaW4gYG5lYXJfbGltaXQnIGlzIGhldXJpc3RpYyAqLworICAgICAgICBGVF9VSW50ICB1bml0c19wZXJfZW0gPSBoaW50cy0+bWV0cmljcy0+c2NhbGVyLmZhY2UtPnVuaXRzX3Blcl9FTTsKKyAgICAgICAgRlRfSW50ICAgbmVhcl9saW1pdCAgID0gMjAgKiB1bml0c19wZXJfZW0gLyAyMDQ4OworICAgICAgICBGVF9JbnQgICBuZWFyX2xpbWl0MiAgPSAyICogbmVhcl9saW1pdCAtIDE7CisKKyAgICAgICAgQUZfUG9pbnQqICBjb250b3VyOworICAgICAgICBBRl9Qb2ludCogIGNvbnRvdXJfbGltaXQgPSBoaW50cy0+Y29udG91cnMgKyBoaW50cy0+bnVtX2NvbnRvdXJzOworCisKKyAgICAgICAgZm9yICggY29udG91ciA9IGhpbnRzLT5jb250b3VyczsgY29udG91ciA8IGNvbnRvdXJfbGltaXQ7IGNvbnRvdXIrKyApCisgICAgICAgIHsKKyAgICAgICAgICBBRl9Qb2ludCAgZmlyc3QgPSAqY29udG91cjsKKyAgICAgICAgICBBRl9Qb2ludCAgbmV4dCwgcHJldiwgY3VycjsKKworICAgICAgICAgIEZUX1BvcyAgb3V0X3gsIG91dF95OworCisKKyAgICAgICAgICAvKiBzaW5jZSB0aGUgZmlyc3QgcG9pbnQgb2YgYSBjb250b3VyIGNvdWxkIGJlIHBhcnQgb2YgYSAqLworICAgICAgICAgIC8qIHNlcmllcyBvZiBuZWFyIHBvaW50cywgZ28gYmFja3dhcmRzIHRvIGZpbmQgdGhlIGZpcnN0ICovCisgICAgICAgICAgLyogbm9uLW5lYXIgcG9pbnQgYW5kIGFkanVzdCBgZmlyc3QnICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgIHBvaW50ID0gZmlyc3Q7CisgICAgICAgICAgcHJldiAgPSBmaXJzdC0+cHJldjsKKworICAgICAgICAgIHdoaWxlICggcHJldiAhPSBmaXJzdCApCisgICAgICAgICAgeworICAgICAgICAgICAgb3V0X3ggPSBwb2ludC0+ZnggLSBwcmV2LT5meDsKKyAgICAgICAgICAgIG91dF95ID0gcG9pbnQtPmZ5IC0gcHJldi0+Znk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAgV2UgdXNlIFRheGljYWIgbWV0cmljcyB0byBtZWFzdXJlIHRoZSB2ZWN0b3IgbGVuZ3RoLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFjY3VtdWxhdGVkIGRpc3RhbmNlcyBzbyBmYXIgY291bGQgaGF2ZSB0aGUKKyAgICAgICAgICAgICAqICBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgdGhlIGRpc3RhbmNlIG1lYXN1cmVkIGhlcmUuICBGb3IgdGhpcworICAgICAgICAgICAgICogIHJlYXNvbiB3ZSB1c2UgYG5lYXJfbGltaXQyJyBmb3IgdGhlIGNvbXBhcmlzb24gdG8gZ2V0IGEKKyAgICAgICAgICAgICAqICBub24tbmVhciBwb2ludCBldmVuIGluIHRoZSB3b3JzdCBjYXNlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIEZUX0FCUyggb3V0X3ggKSArIEZUX0FCUyggb3V0X3kgKSA+PSBuZWFyX2xpbWl0MiApCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBwb2ludCA9IHByZXY7CisgICAgICAgICAgICBwcmV2ICA9IHByZXYtPnByZXY7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogYWRqdXN0IGZpcnN0IHBvaW50ICovCisgICAgICAgICAgZmlyc3QgPSBwb2ludDsKKworICAgICAgICAgIC8qIG5vdyBsb29wIG92ZXIgYWxsIHBvaW50cyBvZiB0aGUgY29udG91ciB0byBnZXQgKi8KKyAgICAgICAgICAvKiBgaW4nIGFuZCBgb3V0JyB2ZWN0b3IgZGlyZWN0aW9ucyAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBjdXJyICA9IGZpcnN0OworCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiAgV2UgYWJ1c2UgdGhlIGB1JyBhbmQgYHYnIGZpZWxkcyB0byBzdG9yZSBpbmRleCBkZWx0YXMgdG8gdGhlCisgICAgICAgICAgICogIG5leHQgYW5kIHByZXZpb3VzIG5vbi1uZWFyIHBvaW50LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiAgVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBub3QgaGF2aW5nIG5vbi1uZWFyIHBvaW50cywgd2UgcG9pbnQgdG8KKyAgICAgICAgICAgKiAgYGZpcnN0JyBieSBkZWZhdWx0IGFzIHRoZSBuZXh0IG5vbi1uZWFyIHBvaW50LgorICAgICAgICAgICAqCisgICAgICAgICAgICovCisgICAgICAgICAgY3Vyci0+dSAgPSAoRlRfUG9zKSggZmlyc3QgLSBjdXJyICk7CisgICAgICAgICAgZmlyc3QtPnYgPSAtY3Vyci0+dTsKKworICAgICAgICAgIG91dF94ID0gMDsKKyAgICAgICAgICBvdXRfeSA9IDA7CisKKyAgICAgICAgICBuZXh0ID0gZmlyc3Q7CisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBBRl9EaXJlY3Rpb24gIG91dF9kaXI7CisKKworICAgICAgICAgICAgcG9pbnQgPSBuZXh0OworICAgICAgICAgICAgbmV4dCA9IHBvaW50LT5uZXh0OworCisgICAgICAgICAgICBvdXRfeCArPSBuZXh0LT5meCAtIHBvaW50LT5meDsKKyAgICAgICAgICAgIG91dF95ICs9IG5leHQtPmZ5IC0gcG9pbnQtPmZ5OworCisgICAgICAgICAgICBpZiAoIEZUX0FCUyggb3V0X3ggKSArIEZUX0FCUyggb3V0X3kgKSA8IG5lYXJfbGltaXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXh0LT5mbGFncyB8PSBBRl9GTEFHX1dFQUtfSU5URVJQT0xBVElPTjsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnItPnUgPSAoRlRfUG9zKSggbmV4dCAtIGN1cnIgKTsKKyAgICAgICAgICAgIG5leHQtPnYgPSAtY3Vyci0+dTsKKworICAgICAgICAgICAgb3V0X2RpciA9IGFmX2RpcmVjdGlvbl9jb21wdXRlKCBvdXRfeCwgb3V0X3kgKTsKKworICAgICAgICAgICAgLyogYWRqdXN0IGRpcmVjdGlvbnMgZm9yIGFsbCBwb2ludHMgaW5iZXR3ZWVuOyAqLworICAgICAgICAgICAgLyogdGhlIGxvb3AgYWxzbyB1cGRhdGVzIHBvc2l0aW9uIG9mIGBjdXJyJyAgICAqLworICAgICAgICAgICAgY3Vyci0+b3V0X2RpciA9IChGVF9DaGFyKW91dF9kaXI7CisgICAgICAgICAgICBmb3IgKCBjdXJyID0gY3Vyci0+bmV4dDsgY3VyciAhPSBuZXh0OyBjdXJyID0gY3Vyci0+bmV4dCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGN1cnItPmluX2RpciAgPSAoRlRfQ2hhcilvdXRfZGlyOworICAgICAgICAgICAgICBjdXJyLT5vdXRfZGlyID0gKEZUX0NoYXIpb3V0X2RpcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQtPmluX2RpciA9IChGVF9DaGFyKW91dF9kaXI7CisKKyAgICAgICAgICAgIGN1cnItPnUgID0gKEZUX1BvcykoIGZpcnN0IC0gY3VyciApOworICAgICAgICAgICAgZmlyc3QtPnYgPSAtY3Vyci0+dTsKKworICAgICAgICAgICAgb3V0X3ggPSAwOworICAgICAgICAgICAgb3V0X3kgPSAwOworCisgICAgICAgICAgfSB3aGlsZSAoIG5leHQgIT0gZmlyc3QgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICBUaGUgbmV4dCBzdGVwIGlzIHRvIGBzaW1wbGlmeScgYW4gb3V0bGluZSdzIHRvcG9sb2d5IHNvIHRoYXQgd2UKKyAgICAgICAgICogIGNhbiBpZGVudGlmeSBsb2NhbCBleHRyZW1hIG1vcmUgcmVsaWFibHk6IEEgc2VyaWVzIG9mCisgICAgICAgICAqICBub24taG9yaXpvbnRhbCBvciBub24tdmVydGljYWwgdmVjdG9ycyBwb2ludGluZyBpbnRvIHRoZSBzYW1lCisgICAgICAgICAqICBxdWFkcmFudCBhcmUgaGFuZGxlZCBhcyBhIHNpbmdsZSwgbG9uZyB2ZWN0b3IuICBGcm9tIGEKKyAgICAgICAgICogIHRvcG9sb2dpY2FsIHBvaW50IG9mIHRoZSB2aWV3LCB0aGUgaW50ZXJtZWRpYXRlIHBvaW50cyBhcmUgb2Ygbm8KKyAgICAgICAgICogIGludGVyZXN0IGFuZCB0aHVzIHRhZ2dlZCBhcyB3ZWFrLgorICAgICAgICAgKi8KKworICAgICAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBwb2ludF9saW1pdDsgcG9pbnQrKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBvaW50LT5mbGFncyAmIEFGX0ZMQUdfV0VBS19JTlRFUlBPTEFUSU9OICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgaWYgKCBwb2ludC0+aW5fZGlyICA9PSBBRl9ESVJfTk9ORSAmJgorICAgICAgICAgICAgICAgcG9pbnQtPm91dF9kaXIgPT0gQUZfRElSX05PTkUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgYm90aCB2ZWN0b3JzIHBvaW50IGludG8gdGhlIHNhbWUgcXVhZHJhbnQgKi8KKworICAgICAgICAgICAgRlRfUG9zICBpbl94LCBpbl95OworICAgICAgICAgICAgRlRfUG9zICBvdXRfeCwgb3V0X3k7CisKKyAgICAgICAgICAgIEFGX1BvaW50ICBuZXh0X3UgPSBwb2ludCArIHBvaW50LT51OworICAgICAgICAgICAgQUZfUG9pbnQgIHByZXZfdiA9IHBvaW50ICsgcG9pbnQtPnY7CisKKworICAgICAgICAgICAgaW5feCA9IHBvaW50LT5meCAtIHByZXZfdi0+Zng7CisgICAgICAgICAgICBpbl95ID0gcG9pbnQtPmZ5IC0gcHJldl92LT5meTsKKworICAgICAgICAgICAgb3V0X3ggPSBuZXh0X3UtPmZ4IC0gcG9pbnQtPmZ4OworICAgICAgICAgICAgb3V0X3kgPSBuZXh0X3UtPmZ5IC0gcG9pbnQtPmZ5OworCisgICAgICAgICAgICBpZiAoICggaW5feCBeIG91dF94ICkgPj0gMCAmJiAoIGluX3kgXiBvdXRfeSApID49IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiB5ZXMsIHNvIHRhZyBjdXJyZW50IHBvaW50IGFzIHdlYWsgKi8KKyAgICAgICAgICAgICAgLyogYW5kIHVwZGF0ZSBpbmRleCBkZWx0YXMgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgcG9pbnQtPmZsYWdzIHw9IEFGX0ZMQUdfV0VBS19JTlRFUlBPTEFUSU9OOworCisgICAgICAgICAgICAgIHByZXZfdi0+dSA9IChGVF9Qb3MpKCBuZXh0X3UgLSBwcmV2X3YgKTsKKyAgICAgICAgICAgICAgbmV4dF91LT52ID0gLXByZXZfdi0+dTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAgRmluYWxseSwgY2hlY2sgZm9yIHJlbWFpbmluZyB3ZWFrIHBvaW50cy4gIEV2ZXJ5dGhpbmcgZWxzZSBub3QKKyAgICAgICAgICogIGNvbGxlY3RlZCBpbiBlZGdlcyBzbyBmYXIgaXMgdGhlbiBpbXBsaWNpdGx5IGNsYXNzaWZpZWQgYXMgc3Ryb25nCisgICAgICAgICAqICBwb2ludHMuCisgICAgICAgICAqLworCisgICAgICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IHBvaW50X2xpbWl0OyBwb2ludCsrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBpZiAoIHBvaW50LT5mbGFncyAmIEFGX0ZMQUdfQ09OVFJPTCApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogY29udHJvbCBwb2ludHMgYXJlIGFsd2F5cyB3ZWFrICovCisgICAgICAgICAgSXNfV2Vha19Qb2ludDoKKyAgICAgICAgICAgIHBvaW50LT5mbGFncyB8PSBBRl9GTEFHX1dFQUtfSU5URVJQT0xBVElPTjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIHBvaW50LT5vdXRfZGlyID09IHBvaW50LT5pbl9kaXIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggcG9pbnQtPm91dF9kaXIgIT0gQUZfRElSX05PTkUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBjdXJyZW50IHBvaW50IGxpZXMgb24gYSBob3Jpem9udGFsIG9yICAgICAgICAgICovCisgICAgICAgICAgICAgIC8qIHZlcnRpY2FsIHNlZ21lbnQgKGJ1dCBkb2Vzbid0IHN0YXJ0IG9yIGVuZCBpdCkgKi8KKyAgICAgICAgICAgICAgZ290byBJc19XZWFrX1BvaW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFGX1BvaW50ICBuZXh0X3UgPSBwb2ludCArIHBvaW50LT51OworICAgICAgICAgICAgICBBRl9Qb2ludCAgcHJldl92ID0gcG9pbnQgKyBwb2ludC0+djsKKworCisgICAgICAgICAgICAgIGlmICggZnRfY29ybmVyX2lzX2ZsYXQoIHBvaW50LT5meCAgLSBwcmV2X3YtPmZ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC0+ZnkgIC0gcHJldl92LT5meSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF91LT5meCAtIHBvaW50LT5meCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF91LT5meSAtIHBvaW50LT5meSApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGVpdGhlciB0aGUgYGluJyBvciB0aGUgYG91dCcgdmVjdG9yIGlzIG11Y2ggbW9yZSAgKi8KKyAgICAgICAgICAgICAgICAvKiBkb21pbmFudCB0aGFuIHRoZSBvdGhlciBvbmUsIHNvIHRhZyBjdXJyZW50IHBvaW50ICovCisgICAgICAgICAgICAgICAgLyogYXMgd2VhayBhbmQgdXBkYXRlIGluZGV4IGRlbHRhcyAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgcHJldl92LT51ID0gKEZUX1BvcykoIG5leHRfdSAtIHByZXZfdiApOworICAgICAgICAgICAgICAgIG5leHRfdS0+diA9IC1wcmV2X3YtPnU7CisKKyAgICAgICAgICAgICAgICBnb3RvIElzX1dlYWtfUG9pbnQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIHBvaW50LT5pbl9kaXIgPT0gLXBvaW50LT5vdXRfZGlyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBjdXJyZW50IHBvaW50IGZvcm1zIGEgc3Bpa2UgKi8KKyAgICAgICAgICAgIGdvdG8gSXNfV2Vha19Qb2ludDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIFN0b3JlIHRoZSBoaW50ZWQgb3V0bGluZSBpbiBhbiBGVF9PdXRsaW5lIHN0cnVjdHVyZS4gKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19zYXZlKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgb3V0bGluZSApCisgIHsKKyAgICBBRl9Qb2ludCAgICBwb2ludCA9IGhpbnRzLT5wb2ludHM7CisgICAgQUZfUG9pbnQgICAgbGltaXQgPSBwb2ludCArIGhpbnRzLT5udW1fcG9pbnRzOworICAgIEZUX1ZlY3RvciogIHZlYyAgID0gb3V0bGluZS0+cG9pbnRzOworICAgIGNoYXIqICAgICAgIHRhZyAgID0gb3V0bGluZS0+dGFnczsKKworCisgICAgZm9yICggOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrLCB2ZWMrKywgdGFnKysgKQorICAgIHsKKyAgICAgIHZlYy0+eCA9IHBvaW50LT54OworICAgICAgdmVjLT55ID0gcG9pbnQtPnk7CisKKyAgICAgIGlmICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19DT05JQyApCisgICAgICAgIHRhZ1swXSA9IEZUX0NVUlZFX1RBR19DT05JQzsKKyAgICAgIGVsc2UgaWYgKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX0NVQklDICkKKyAgICAgICAgdGFnWzBdID0gRlRfQ1VSVkVfVEFHX0NVQklDOworICAgICAgZWxzZQorICAgICAgICB0YWdbMF0gPSBGVF9DVVJWRV9UQUdfT047CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgIEVER0UgUE9JTlQgR1JJRC1GSVRUSU5HCisgICAqCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogQWxpZ24gYWxsIHBvaW50cyBvZiBhbiBlZGdlIHRvIHRoZSBzYW1lIGNvb3JkaW5hdGUgdmFsdWUsICovCisgIC8qIGVpdGhlciBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseS4gICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2dseXBoX2hpbnRzX2FsaWduX2VkZ2VfcG9pbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgICAgPSAmIGhpbnRzLT5heGlzW2RpbV07CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50cyAgICAgID0gYXhpcy0+c2VnbWVudHM7CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X2xpbWl0ID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CisgICAgQUZfU2VnbWVudCAgICBzZWc7CisKKworICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICB7CisgICAgICBmb3IgKCBzZWcgPSBzZWdtZW50czsgc2VnIDwgc2VnbWVudF9saW1pdDsgc2VnKysgKQorICAgICAgeworICAgICAgICBBRl9FZGdlICAgZWRnZSA9IHNlZy0+ZWRnZTsKKyAgICAgICAgQUZfUG9pbnQgIHBvaW50LCBmaXJzdCwgbGFzdDsKKworCisgICAgICAgIGlmICggZWRnZSA9PSBOVUxMICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmaXJzdCA9IHNlZy0+Zmlyc3Q7CisgICAgICAgIGxhc3QgID0gc2VnLT5sYXN0OworICAgICAgICBwb2ludCA9IGZpcnN0OworICAgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgICAgcG9pbnQtPnggICAgICA9IGVkZ2UtPnBvczsKKyAgICAgICAgICBwb2ludC0+ZmxhZ3MgfD0gQUZfRkxBR19UT1VDSF9YOworCisgICAgICAgICAgaWYgKCBwb2ludCA9PSBsYXN0ICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcG9pbnQgPSBwb2ludC0+bmV4dDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZm9yICggc2VnID0gc2VnbWVudHM7IHNlZyA8IHNlZ21lbnRfbGltaXQ7IHNlZysrICkKKyAgICAgIHsKKyAgICAgICAgQUZfRWRnZSAgIGVkZ2UgPSBzZWctPmVkZ2U7CisgICAgICAgIEFGX1BvaW50ICBwb2ludCwgZmlyc3QsIGxhc3Q7CisKKworICAgICAgICBpZiAoIGVkZ2UgPT0gTlVMTCApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZmlyc3QgPSBzZWctPmZpcnN0OworICAgICAgICBsYXN0ICA9IHNlZy0+bGFzdDsKKyAgICAgICAgcG9pbnQgPSBmaXJzdDsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIHBvaW50LT55ICAgICAgPSBlZGdlLT5wb3M7CisgICAgICAgICAgcG9pbnQtPmZsYWdzIHw9IEFGX0ZMQUdfVE9VQ0hfWTsKKworICAgICAgICAgIGlmICggcG9pbnQgPT0gbGFzdCApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICBTVFJPTkcgUE9JTlQgSU5URVJQT0xBVElPTgorICAgKgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIEhpbnQgdGhlIHN0cm9uZyBwb2ludHMgLS0gdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBUcnVlVHlwZSBgSVAnICovCisgIC8qIGhpbnRpbmcgaW5zdHJ1Y3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfZ2x5cGhfaGludHNfYWxpZ25fc3Ryb25nX3BvaW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9Qb2ludCAgICAgIHBvaW50cyAgICAgID0gaGludHMtPnBvaW50czsKKyAgICBBRl9Qb2ludCAgICAgIHBvaW50X2xpbWl0ID0gcG9pbnRzICsgaGludHMtPm51bV9wb2ludHM7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEFGX0VkZ2UgICAgICAgZWRnZXMgICAgICAgPSBheGlzLT5lZGdlczsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2VfbGltaXQgID0gZWRnZXMgKyBheGlzLT5udW1fZWRnZXM7CisgICAgRlRfVUludCAgICAgICB0b3VjaF9mbGFnOworCisKKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgICB0b3VjaF9mbGFnID0gQUZfRkxBR19UT1VDSF9YOworICAgIGVsc2UKKyAgICAgIHRvdWNoX2ZsYWcgID0gQUZfRkxBR19UT1VDSF9ZOworCisgICAgaWYgKCBlZGdlcyA8IGVkZ2VfbGltaXQgKQorICAgIHsKKyAgICAgIEFGX1BvaW50ICBwb2ludDsKKyAgICAgIEFGX0VkZ2UgICBlZGdlOworCisKKyAgICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IHBvaW50X2xpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICB1LCBvdSwgZnU7ICAvKiBwb2ludCBwb3NpdGlvbiAqLworICAgICAgICBGVF9Qb3MgIGRlbHRhOworCisKKyAgICAgICAgaWYgKCBwb2ludC0+ZmxhZ3MgJiB0b3VjaF9mbGFnICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBpZiB0aGlzIHBvaW50IGlzIGNhbmRpZGF0ZSB0byB3ZWFrIGludGVycG9sYXRpb24sIHdlICAgICAgICovCisgICAgICAgIC8qIGludGVycG9sYXRlIGl0IGFmdGVyIGFsbCBzdHJvbmcgcG9pbnRzIGhhdmUgYmVlbiBwcm9jZXNzZWQgKi8KKworICAgICAgICBpZiAoICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gKSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKQorICAgICAgICB7CisgICAgICAgICAgdSAgPSBwb2ludC0+Znk7CisgICAgICAgICAgb3UgPSBwb2ludC0+b3k7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdSAgPSBwb2ludC0+Zng7CisgICAgICAgICAgb3UgPSBwb2ludC0+b3g7CisgICAgICAgIH0KKworICAgICAgICBmdSA9IHU7CisKKyAgICAgICAgLyogaXMgdGhlIHBvaW50IGJlZm9yZSB0aGUgZmlyc3QgZWRnZT8gKi8KKyAgICAgICAgZWRnZSAgPSBlZGdlczsKKyAgICAgICAgZGVsdGEgPSBlZGdlLT5mcG9zIC0gdTsKKyAgICAgICAgaWYgKCBkZWx0YSA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHUgPSBlZGdlLT5wb3MgLSAoIGVkZ2UtPm9wb3MgLSBvdSApOworICAgICAgICAgIGdvdG8gU3RvcmVfUG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBpcyB0aGUgcG9pbnQgYWZ0ZXIgdGhlIGxhc3QgZWRnZT8gKi8KKyAgICAgICAgZWRnZSAgPSBlZGdlX2xpbWl0IC0gMTsKKyAgICAgICAgZGVsdGEgPSB1IC0gZWRnZS0+ZnBvczsKKyAgICAgICAgaWYgKCBkZWx0YSA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHUgPSBlZGdlLT5wb3MgKyAoIG91IC0gZWRnZS0+b3BvcyApOworICAgICAgICAgIGdvdG8gU3RvcmVfUG9pbnQ7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgRlRfUHRyRGlzdCAgbWluLCBtYXgsIG1pZDsKKyAgICAgICAgICBGVF9Qb3MgICAgICBmcG9zOworCisKKyAgICAgICAgICAvKiBmaW5kIGVuY2xvc2luZyBlZGdlcyAqLworICAgICAgICAgIG1pbiA9IDA7CisgICAgICAgICAgbWF4ID0gZWRnZV9saW1pdCAtIGVkZ2VzOworCisjaWYgMQorICAgICAgICAgIC8qIGZvciBhIHNtYWxsIG51bWJlciBvZiBlZGdlcywgYSBsaW5lYXIgc2VhcmNoIGlzIGJldHRlciAqLworICAgICAgICAgIGlmICggbWF4IDw9IDggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1B0ckRpc3QgIG5uOworCisKKyAgICAgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBtYXg7IG5uKysgKQorICAgICAgICAgICAgICBpZiAoIGVkZ2VzW25uXS5mcG9zID49IHUgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIGVkZ2VzW25uXS5mcG9zID09IHUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB1ID0gZWRnZXNbbm5dLnBvczsKKyAgICAgICAgICAgICAgZ290byBTdG9yZV9Qb2ludDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1pbiA9IG5uOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgICAgICAgeworICAgICAgICAgICAgbWlkICA9ICggbWF4ICsgbWluICkgPj4gMTsKKyAgICAgICAgICAgIGVkZ2UgPSBlZGdlcyArIG1pZDsKKyAgICAgICAgICAgIGZwb3MgPSBlZGdlLT5mcG9zOworCisgICAgICAgICAgICBpZiAoIHUgPCBmcG9zICkKKyAgICAgICAgICAgICAgbWF4ID0gbWlkOworICAgICAgICAgICAgZWxzZSBpZiAoIHUgPiBmcG9zICkKKyAgICAgICAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogd2UgYXJlIG9uIHRoZSBlZGdlICovCisgICAgICAgICAgICAgIHUgPSBlZGdlLT5wb3M7CisgICAgICAgICAgICAgIGdvdG8gU3RvcmVfUG9pbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcG9pbnQgaXMgbm90IG9uIGFuIGVkZ2UgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBBRl9FZGdlICBiZWZvcmUgPSBlZGdlcyArIG1pbiAtIDE7CisgICAgICAgICAgICBBRl9FZGdlICBhZnRlciAgPSBlZGdlcyArIG1pbiArIDA7CisKKworICAgICAgICAgICAgLyogYXNzZXJ0KCBiZWZvcmUgJiYgYWZ0ZXIgJiYgYmVmb3JlICE9IGFmdGVyICkgKi8KKyAgICAgICAgICAgIGlmICggYmVmb3JlLT5zY2FsZSA9PSAwICkKKyAgICAgICAgICAgICAgYmVmb3JlLT5zY2FsZSA9IEZUX0RpdkZpeCggYWZ0ZXItPnBvcyAtIGJlZm9yZS0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlci0+ZnBvcyAtIGJlZm9yZS0+ZnBvcyApOworCisgICAgICAgICAgICB1ID0gYmVmb3JlLT5wb3MgKyBGVF9NdWxGaXgoIGZ1IC0gYmVmb3JlLT5mcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUtPnNjYWxlICk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIFN0b3JlX1BvaW50OgorICAgICAgICAvKiBzYXZlIHRoZSBwb2ludCBwb3NpdGlvbiAqLworICAgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgICAgICAgcG9pbnQtPnggPSB1OworICAgICAgICBlbHNlCisgICAgICAgICAgcG9pbnQtPnkgPSB1OworCisgICAgICAgIHBvaW50LT5mbGFncyB8PSB0b3VjaF9mbGFnOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgIFdFQUsgUE9JTlQgSU5URVJQT0xBVElPTgorICAgKgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFNoaWZ0IHRoZSBvcmlnaW5hbCBjb29yZGluYXRlcyBvZiBhbGwgcG9pbnRzIGJldHdlZW4gYHAxJyBhbmQgKi8KKyAgLyogYHAyJyB0byBnZXQgaGludGVkIGNvb3JkaW5hdGVzLCB1c2luZyB0aGUgc2FtZSBkaWZmZXJlbmNlIGFzICAqLworICAvKiBnaXZlbiBieSBgcmVmJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfaXVwX3NoaWZ0KCBBRl9Qb2ludCAgcDEsCisgICAgICAgICAgICAgICAgQUZfUG9pbnQgIHAyLAorICAgICAgICAgICAgICAgIEFGX1BvaW50ICByZWYgKQorICB7CisgICAgQUZfUG9pbnQgIHA7CisgICAgRlRfUG9zICAgIGRlbHRhID0gcmVmLT51IC0gcmVmLT52OworCisKKyAgICBpZiAoIGRlbHRhID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgZm9yICggcCA9IHAxOyBwIDwgcmVmOyBwKysgKQorICAgICAgcC0+dSA9IHAtPnYgKyBkZWx0YTsKKworICAgIGZvciAoIHAgPSByZWYgKyAxOyBwIDw9IHAyOyBwKysgKQorICAgICAgcC0+dSA9IHAtPnYgKyBkZWx0YTsKKyAgfQorCisKKyAgLyogSW50ZXJwb2xhdGUgdGhlIG9yaWdpbmFsIGNvb3JkaW5hdGVzIG9mIGFsbCBwb2ludHMgYmV0d2VlbiBgcDEnIGFuZCAgKi8KKyAgLyogYHAyJyB0byBnZXQgaGludGVkIGNvb3JkaW5hdGVzLCB1c2luZyBgcmVmMScgYW5kIGByZWYyJyBhcyB0aGUgICAgICAgKi8KKyAgLyogcmVmZXJlbmNlIHBvaW50cy4gIFRoZSBgdScgYW5kIGB2JyBtZW1iZXJzIGFyZSB0aGUgY3VycmVudCBhbmQgICAgICAgKi8KKyAgLyogb3JpZ2luYWwgY29vcmRpbmF0ZSB2YWx1ZXMsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIHNwZWNpZmljYXRpb24uICAgICAgICAgKi8KKworICBzdGF0aWMgdm9pZAorICBhZl9pdXBfaW50ZXJwKCBBRl9Qb2ludCAgcDEsCisgICAgICAgICAgICAgICAgIEFGX1BvaW50ICBwMiwKKyAgICAgICAgICAgICAgICAgQUZfUG9pbnQgIHJlZjEsCisgICAgICAgICAgICAgICAgIEFGX1BvaW50ICByZWYyICkKKyAgeworICAgIEFGX1BvaW50ICBwOworICAgIEZUX1BvcyAgICB1LCB2MSwgdjIsIHUxLCB1MiwgZDEsIGQyOworCisKKyAgICBpZiAoIHAxID4gcDIgKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKCByZWYxLT52ID4gcmVmMi0+diApCisgICAgeworICAgICAgcCAgICA9IHJlZjE7CisgICAgICByZWYxID0gcmVmMjsKKyAgICAgIHJlZjIgPSBwOworICAgIH0KKworICAgIHYxID0gcmVmMS0+djsKKyAgICB2MiA9IHJlZjItPnY7CisgICAgdTEgPSByZWYxLT51OworICAgIHUyID0gcmVmMi0+dTsKKyAgICBkMSA9IHUxIC0gdjE7CisgICAgZDIgPSB1MiAtIHYyOworCisgICAgaWYgKCB1MSA9PSB1MiB8fCB2MSA9PSB2MiApCisgICAgeworICAgICAgZm9yICggcCA9IHAxOyBwIDw9IHAyOyBwKysgKQorICAgICAgeworICAgICAgICB1ID0gcC0+djsKKworICAgICAgICBpZiAoIHUgPD0gdjEgKQorICAgICAgICAgIHUgKz0gZDE7CisgICAgICAgIGVsc2UgaWYgKCB1ID49IHYyICkKKyAgICAgICAgICB1ICs9IGQyOworICAgICAgICBlbHNlCisgICAgICAgICAgdSA9IHUxOworCisgICAgICAgIHAtPnUgPSB1OworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfRml4ZWQgIHNjYWxlID0gRlRfRGl2Rml4KCB1MiAtIHUxLCB2MiAtIHYxICk7CisKKworICAgICAgZm9yICggcCA9IHAxOyBwIDw9IHAyOyBwKysgKQorICAgICAgeworICAgICAgICB1ID0gcC0+djsKKworICAgICAgICBpZiAoIHUgPD0gdjEgKQorICAgICAgICAgIHUgKz0gZDE7CisgICAgICAgIGVsc2UgaWYgKCB1ID49IHYyICkKKyAgICAgICAgICB1ICs9IGQyOworICAgICAgICBlbHNlCisgICAgICAgICAgdSA9IHUxICsgRlRfTXVsRml4KCB1IC0gdjEsIHNjYWxlICk7CisKKyAgICAgICAgcC0+dSA9IHU7CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKiBIaW50IHRoZSB3ZWFrIHBvaW50cyAtLSB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFRydWVUeXBlIGBJVVAnICovCisgIC8qIGhpbnRpbmcgaW5zdHJ1Y3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19hbGlnbl93ZWFrX3BvaW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfUG9pbnQgICBwb2ludHMgICAgICAgID0gaGludHMtPnBvaW50czsKKyAgICBBRl9Qb2ludCAgIHBvaW50X2xpbWl0ICAgPSBwb2ludHMgKyBoaW50cy0+bnVtX3BvaW50czsKKyAgICBBRl9Qb2ludCogIGNvbnRvdXIgICAgICAgPSBoaW50cy0+Y29udG91cnM7CisgICAgQUZfUG9pbnQqICBjb250b3VyX2xpbWl0ID0gY29udG91ciArIGhpbnRzLT5udW1fY29udG91cnM7CisgICAgRlRfVUludCAgICB0b3VjaF9mbGFnOworICAgIEFGX1BvaW50ICAgcG9pbnQ7CisgICAgQUZfUG9pbnQgICBlbmRfcG9pbnQ7CisgICAgQUZfUG9pbnQgICBmaXJzdF9wb2ludDsKKworCisgICAgLyogUEFTUyAxOiBNb3ZlIHNlZ21lbnQgcG9pbnRzIHRvIGVkZ2UgcG9zaXRpb25zICovCisKKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgdG91Y2hfZmxhZyA9IEFGX0ZMQUdfVE9VQ0hfWDsKKworICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRfbGltaXQ7IHBvaW50KysgKQorICAgICAgeworICAgICAgICBwb2ludC0+dSA9IHBvaW50LT54OworICAgICAgICBwb2ludC0+diA9IHBvaW50LT5veDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHRvdWNoX2ZsYWcgPSBBRl9GTEFHX1RPVUNIX1k7CisKKyAgICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IHBvaW50X2xpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnUgPSBwb2ludC0+eTsKKyAgICAgICAgcG9pbnQtPnYgPSBwb2ludC0+b3k7CisgICAgICB9CisgICAgfQorCisgICAgZm9yICggOyBjb250b3VyIDwgY29udG91cl9saW1pdDsgY29udG91cisrICkKKyAgICB7CisgICAgICBBRl9Qb2ludCAgZmlyc3RfdG91Y2hlZCwgbGFzdF90b3VjaGVkOworCisKKyAgICAgIHBvaW50ICAgICAgID0gKmNvbnRvdXI7CisgICAgICBlbmRfcG9pbnQgICA9IHBvaW50LT5wcmV2OworICAgICAgZmlyc3RfcG9pbnQgPSBwb2ludDsKKworICAgICAgLyogZmluZCBmaXJzdCB0b3VjaGVkIHBvaW50ICovCisgICAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgICBpZiAoIHBvaW50ID4gZW5kX3BvaW50ICkgIC8qIG5vIHRvdWNoZWQgcG9pbnQgaW4gY29udG91ciAqLworICAgICAgICAgIGdvdG8gTmV4dENvbnRvdXI7CisKKyAgICAgICAgaWYgKCBwb2ludC0+ZmxhZ3MgJiB0b3VjaF9mbGFnICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBwb2ludCsrOworICAgICAgfQorCisgICAgICBmaXJzdF90b3VjaGVkID0gcG9pbnQ7CisKKyAgICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIEZUX0FTU0VSVCggcG9pbnQgPD0gZW5kX3BvaW50ICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICggcG9pbnQtPmZsYWdzICYgdG91Y2hfZmxhZyApICE9IDAgKTsKKworICAgICAgICAvKiBza2lwIGFueSB0b3VjaGVkIG5laWdoYm91cnMgKi8KKyAgICAgICAgd2hpbGUgKCBwb2ludCA8IGVuZF9wb2ludCAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAoIHBvaW50WzFdLmZsYWdzICYgdG91Y2hfZmxhZyApICE9IDAgKQorICAgICAgICAgIHBvaW50Kys7CisKKyAgICAgICAgbGFzdF90b3VjaGVkID0gcG9pbnQ7CisKKyAgICAgICAgLyogZmluZCB0aGUgbmV4dCB0b3VjaGVkIHBvaW50LCBpZiBhbnkgKi8KKyAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIGlmICggcG9pbnQgPiBlbmRfcG9pbnQgKQorICAgICAgICAgICAgZ290byBFbmRDb250b3VyOworCisgICAgICAgICAgaWYgKCAoIHBvaW50LT5mbGFncyAmIHRvdWNoX2ZsYWcgKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGludGVycG9sYXRlIGJldHdlZW4gbGFzdF90b3VjaGVkIGFuZCBwb2ludCAqLworICAgICAgICBhZl9pdXBfaW50ZXJwKCBsYXN0X3RvdWNoZWQgKyAxLCBwb2ludCAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG91Y2hlZCwgcG9pbnQgKTsKKyAgICAgIH0KKworICAgIEVuZENvbnRvdXI6CisgICAgICAvKiBzcGVjaWFsIGNhc2U6IG9ubHkgb25lIHBvaW50IHdhcyB0b3VjaGVkICovCisgICAgICBpZiAoIGxhc3RfdG91Y2hlZCA9PSBmaXJzdF90b3VjaGVkICkKKyAgICAgICAgYWZfaXVwX3NoaWZ0KCBmaXJzdF9wb2ludCwgZW5kX3BvaW50LCBmaXJzdF90b3VjaGVkICk7CisKKyAgICAgIGVsc2UgLyogaW50ZXJwb2xhdGUgdGhlIGxhc3QgcGFydCAqLworICAgICAgeworICAgICAgICBpZiAoIGxhc3RfdG91Y2hlZCA8IGVuZF9wb2ludCApCisgICAgICAgICAgYWZfaXVwX2ludGVycCggbGFzdF90b3VjaGVkICsgMSwgZW5kX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG91Y2hlZCwgZmlyc3RfdG91Y2hlZCApOworCisgICAgICAgIGlmICggZmlyc3RfdG91Y2hlZCA+IHBvaW50cyApCisgICAgICAgICAgYWZfaXVwX2ludGVycCggZmlyc3RfcG9pbnQsIGZpcnN0X3RvdWNoZWQgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG91Y2hlZCwgZmlyc3RfdG91Y2hlZCApOworICAgICAgfQorCisgICAgTmV4dENvbnRvdXI6CisgICAgICA7CisgICAgfQorCisgICAgLyogbm93IHNhdmUgdGhlIGludGVycG9sYXRlZCB2YWx1ZXMgYmFjayB0byB4L3kgKi8KKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRfbGltaXQ7IHBvaW50KysgKQorICAgICAgICBwb2ludC0+eCA9IHBvaW50LT51OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRfbGltaXQ7IHBvaW50KysgKQorICAgICAgICBwb2ludC0+eSA9IHBvaW50LT51OworICAgIH0KKyAgfQorCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKworICAvKiBBcHBseSAoc21hbGwpIHdhcnAgc2NhbGUgYW5kIHdhcnAgZGVsdGEgZm9yIGdpdmVuIGRpbWVuc2lvbi4gKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19zY2FsZV9kaW0oIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgICBzY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICBkZWx0YSApCisgIHsKKyAgICBBRl9Qb2ludCAgcG9pbnRzICAgICAgID0gaGludHMtPnBvaW50czsKKyAgICBBRl9Qb2ludCAgcG9pbnRzX2xpbWl0ID0gcG9pbnRzICsgaGludHMtPm51bV9wb2ludHM7CisgICAgQUZfUG9pbnQgIHBvaW50OworCisKKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRzX2xpbWl0OyBwb2ludCsrICkKKyAgICAgICAgcG9pbnQtPnggPSBGVF9NdWxGaXgoIHBvaW50LT5meCwgc2NhbGUgKSArIGRlbHRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRzX2xpbWl0OyBwb2ludCsrICkKKyAgICAgICAgcG9pbnQtPnkgPSBGVF9NdWxGaXgoIHBvaW50LT5meSwgc2NhbGUgKSArIGRlbHRhOworICAgIH0KKyAgfQorCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmaGludHMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0YzdhNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKQEAgLTAsMCArMSw0NzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmaGludHMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGSElOVFNfSF9fCisjZGVmaW5lIF9fQUZISU5UU19IX18KKworI2luY2x1ZGUgImFmdHlwZXMuaCIKKworI2RlZmluZSB4eEFGX1NPUlRfU0VHTUVOVFMKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoKKyAgICogIFRoZSBkZWZpbml0aW9uIG9mIG91dGxpbmUgZ2x5cGggaGludHMuICBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbAorICAgKiAgd3JpdGluZyBzeXN0ZW0gYW5hbHlzaXMgcm91dGluZXMgKHVudGlsIG5vdykuCisgICAqLworCisgIHR5cGVkZWYgZW51bSAgQUZfRGltZW5zaW9uXworICB7CisgICAgQUZfRElNRU5TSU9OX0hPUlogPSAwLCAgLyogeCBjb29yZGluYXRlcywgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaS5lLiwgdmVydGljYWwgc2VnbWVudHMgJiBlZGdlcyAgICovCisgICAgQUZfRElNRU5TSU9OX1ZFUlQgPSAxLCAgLyogeSBjb29yZGluYXRlcywgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaS5lLiwgaG9yaXpvbnRhbCBzZWdtZW50cyAmIGVkZ2VzICovCisKKyAgICBBRl9ESU1FTlNJT05fTUFYICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9EaW1lbnNpb247CisKKworICAvKiBoaW50IGRpcmVjdGlvbnMgLS0gdGhlIHZhbHVlcyBhcmUgY29tcHV0ZWQgc28gdGhhdCB0d28gdmVjdG9ycyBhcmUgKi8KKyAgLyogaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucyBpZmYgYGRpcjEgKyBkaXIyID09IDAnICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgQUZfRGlyZWN0aW9uXworICB7CisgICAgQUZfRElSX05PTkUgID0gIDQsCisgICAgQUZfRElSX1JJR0hUID0gIDEsCisgICAgQUZfRElSX0xFRlQgID0gLTEsCisgICAgQUZfRElSX1VQICAgID0gIDIsCisgICAgQUZfRElSX0RPV04gID0gLTIKKworICB9IEFGX0RpcmVjdGlvbjsKKworCisgIC8qCisgICAqICBUaGUgZm9sbG93aW5nIGV4cGxhbmF0aW9ucyBhcmUgbW9zdGx5IHRha2VuIGZyb20gdGhlIGFydGljbGUKKyAgICoKKyAgICogICAgUmVhbC1UaW1lIEdyaWQgRml0dGluZyBvZiBUeXBvZ3JhcGhpYyBPdXRsaW5lcworICAgKgorICAgKiAgYnkgRGF2aWQgVHVybmVyIGFuZCBXZXJuZXIgTGVtYmVyZworICAgKgorICAgKiAgICBodHRwOi8vd3d3LnR1Zy5vcmcvVFVHYm9hdC9BcnRpY2xlcy90YjI0LTMvbGVtYmVyZy5wZGYKKyAgICoKKyAgICogIHdpdGggYXBwcm9wcmlhdGUgdXBkYXRlcy4KKyAgICoKKyAgICoKKyAgICogIFNlZ21lbnRzCisgICAqCisgICAqICAgIGBhZl97Y2prLGxhdGluLC4uLn1faGludHNfY29tcHV0ZV9zZWdtZW50cycgYXJlIHRoZSBmdW5jdGlvbnMgdG8KKyAgICogICAgZmluZCBzZWdtZW50cyBpbiBhbiBvdXRsaW5lLgorICAgKgorICAgKiAgICBBIHNlZ21lbnQgaXMgYSBzZXJpZXMgb2YgYXQgbGVhc3QgdHdvIGNvbnNlY3V0aXZlIHBvaW50cyB0aGF0IGFyZQorICAgKiAgICBhcHByb3hpbWF0ZWx5IGFsaWduZWQgYWxvbmcgYSBjb29yZGluYXRlIGF4aXMuICBUaGUgYW5hbHlzaXMgdG8gZG8KKyAgICogICAgc28gaXMgc3BlY2lmaWMgdG8gYSB3cml0aW5nIHN5c3RlbS4KKyAgICoKKyAgICoKKyAgICogIEVkZ2VzCisgICAqCisgICAqICAgIGBhZl97Y2prLGxhdGluLC4uLn1faGludHNfY29tcHV0ZV9lZGdlcycgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZmluZAorICAgKiAgICBlZGdlcy4KKyAgICoKKyAgICogICAgQXMgc29vbiBhcyBzZWdtZW50cyBhcmUgZGVmaW5lZCwgdGhlIGF1dG8taGludGVyIGdyb3VwcyB0aGVtIGludG8KKyAgICogICAgZWRnZXMuICBBbiBlZGdlIGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIHBvc2l0aW9uIG9uIHRoZSBtYWluCisgICAqICAgIGRpbWVuc2lvbiB0aGF0IGNvbGxlY3RzIG9uZSBvciBtb3JlIHNlZ21lbnRzIChhbGxvd2luZyBmb3IgYSBzbWFsbAorICAgKiAgICB0aHJlc2hvbGQpLgorICAgKgorICAgKiAgICBBcyBhbiBleGFtcGxlLCB0aGUgYGxhdGluJyB3cml0aW5nIHN5c3RlbSBmaXJzdCB0cmllcyB0byBncmlkLWZpdAorICAgKiAgICBlZGdlcywgdGhlbiB0byBhbGlnbiBzZWdtZW50cyBvbiB0aGUgZWRnZXMgdW5sZXNzIGl0IGRldGVjdHMgdGhhdAorICAgKiAgICB0aGV5IGZvcm0gYSBzZXJpZi4KKyAgICoKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICBICisgICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAqICAgICAgICAgQyAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIEYKKyAgICogICAgICAgICAgKy0tLS0tLTwtLS0tLSsgICAgICAgICstLS0tLTwtLS0tLS0rCisgICAqICAgICAgICAgIHwgICAgICAgICAgICAgQiAgICAgIEcgICAgICAgICAgICAgfAorICAgKiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0+LS0tLS0tLS0tLS0tLS0tLS0tKworICAgKiAgICAgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFCisgICAqCisgICAqCisgICAqICBTdGVtcworICAgKgorICAgKiAgICBTdGVtcyBhcmUgZGV0ZWN0ZWQgYnkgYGFmX3tjamssbGF0aW4sLi4ufV9oaW50X2VkZ2VzJy4KKyAgICoKKyAgICogICAgU2VnbWVudHMgbmVlZCB0byBiZSBgbGlua2VkJyB0byBvdGhlciBvbmVzIGluIG9yZGVyIHRvIGRldGVjdCBzdGVtcy4KKyAgICogICAgQSBzdGVtIGlzIG1hZGUgb2YgdHdvIHNlZ21lbnRzIHRoYXQgZmFjZSBlYWNoIG90aGVyIGluIG9wcG9zaXRlCisgICAqICAgIGRpcmVjdGlvbnMgYW5kIHRoYXQgYXJlIHN1ZmZpY2llbnRseSBjbG9zZSB0byBlYWNoIG90aGVyLiAgVXNpbmcKKyAgICogICAgdm9jYWJ1bGFyeSBmcm9tIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLCBzdGVtIHNlZ21lbnRzIGZvcm0gYQorICAgKiAgICBgYmxhY2sgZGlzdGFuY2UnLgorICAgKgorICAgKiAgICBJbiB0aGUgYWJvdmUgQVNDSUkgZHJhd2luZywgdGhlIGhvcml6b250YWwgc2VnbWVudHMgYXJlIEJDLCBERSwgYW5kCisgICAqICAgIEZHOyB0aGUgdmVydGljYWwgc2VnbWVudHMgYXJlIEFCLCBDRCwgRUYsIGFuZCBHSC4KKyAgICoKKyAgICogICAgRWFjaCBzZWdtZW50IGhhcyBhdCBtb3N0IG9uZSBgYmVzdCcgY2FuZGlkYXRlIHRvIGZvcm0gYSBibGFjaworICAgKiAgICBkaXN0YW5jZSwgb3Igbm8gY2FuZGlkYXRlIGF0IGFsbC4gIE5vdGljZSB0aGF0IHR3byBkaXN0aW5jdCBzZWdtZW50cworICAgKiAgICBjYW4gaGF2ZSB0aGUgc2FtZSBjYW5kaWRhdGUsIHdoaWNoIGZyZXF1ZW50bHkgbWVhbnMgYSBzZXJpZi4KKyAgICoKKyAgICogICAgQSBzdGVtIGlzIHJlY29nbml6ZWQgYnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb246CisgICAqCisgICAqICAgICAgYmVzdCBzZWdtZW50XzEgPSBzZWdtZW50XzIgJiYgYmVzdCBzZWdtZW50XzIgPSBzZWdtZW50XzEKKyAgICoKKyAgICogICAgVGhlIGJlc3QgY2FuZGlkYXRlIGlzIHN0b3JlZCBpbiBmaWVsZCBgbGluaycgaW4gc3RydWN0dXJlCisgICAqICAgIGBBRl9TZWdtZW50Jy4KKyAgICoKKyAgICogICAgSW4gdGhlIGFib3ZlIEFTQ0lJIGRyYXdpbmcsIHRoZSBiZXN0IGNhbmRpZGF0ZSBmb3IgYm90aCBBQiBhbmQgQ0QgaXMKKyAgICogICAgR0gsIHdoaWxlIHRoZSBiZXN0IGNhbmRpZGF0ZSBmb3IgR0ggaXMgQUIuICBTaW1pbGFybHksIHRoZSBiZXN0CisgICAqICAgIGNhbmRpZGF0ZSBmb3IgRUYgYW5kIEdIIGlzIEFCLCB3aGlsZSB0aGUgYmVzdCBjYW5kaWRhdGUgZm9yIEFCIGlzCisgICAqICAgIEdILgorICAgKgorICAgKiAgICBUaGUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyBvZiBzdGVtcyBpcyBkZXBlbmRlbnQgb24gdGhlIHdyaXRpbmcKKyAgICogICAgc3lzdGVtLgorICAgKgorICAgKgorICAgKiAgU2VyaWZzCisgICAqCisgICAqICAgIFNlcmlmcyBhcmUgZGV0ZWN0ZWQgYnkgYGFmX3tjamssbGF0aW4sLi4ufV9oaW50X2VkZ2VzJy4KKyAgICoKKyAgICogICAgSW4gY29tcGFyaXNvbiB0byBhIHN0ZW0sIGEgc2VyaWYgKGFzIGhhbmRsZWQgYnkgdGhlIGF1dG8taGludGVyCisgICAqICAgIG1vZHVsZSB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGBsYXRpbicgd3JpdGluZyBzeXN0ZW0pIGhhcworICAgKgorICAgKiAgICAgIGJlc3Qgc2VnbWVudF8xID0gc2VnbWVudF8yICYmIGJlc3Qgc2VnbWVudF8yICE9IHNlZ21lbnRfMQorICAgKgorICAgKiAgICB3aGVyZSBzZWdtZW50XzEgY29ycmVzcG9uZHMgdG8gdGhlIHNlcmlmIHNlZ21lbnQgKENEIGFuZCBFRiBpbiB0aGUKKyAgICogICAgYWJvdmUgQVNDSUkgZHJhd2luZykuCisgICAqCisgICAqICAgIFRoZSBiZXN0IGNhbmRpZGF0ZSBpcyBzdG9yZWQgaW4gZmllbGQgYHNlcmlmJyBpbiBzdHJ1Y3R1cmUKKyAgICogICAgYEFGX1NlZ21lbnQnIChhbmQgYGxpbmsnIGlzIHNldCB0byBOVUxMKS4KKyAgICoKKyAgICoKKyAgICogIFRvdWNoZWQgcG9pbnRzCisgICAqCisgICAqICAgIEEgcG9pbnQgaXMgY2FsbGVkIGB0b3VjaGVkJyBpZiBpdCBoYXMgYmVlbiBwcm9jZXNzZWQgc29tZWhvdyBieSB0aGUKKyAgICogICAgYXV0by1oaW50ZXIuICBJdCBiYXNpY2FsbHkgbWVhbnMgdGhhdCBpdCBzaG91bGRuJ3QgYmUgbW92ZWQgYWdhaW4KKyAgICogICAgKG9yIG1vdmVkIG9ubHkgdW5kZXIgY2VydGFpbiBjb25zdHJhaW50cyB0byBwcmVzZXJ2ZSB0aGUgYWxyZWFkeQorICAgKiAgICBhcHBsaWVkIHByb2Nlc3NpbmcpLgorICAgKgorICAgKgorICAgKiAgRmxhdCBhbmQgcm91bmQgc2VnbWVudHMKKyAgICoKKyAgICogICAgU2VnbWVudHMgYXJlIGByb3VuZCcgb3IgYGZsYXQnLCBkZXBlbmRpbmcgb24gdGhlIHNlcmllcyBvZiBwb2ludHMKKyAgICogICAgdGhhdCBkZWZpbmUgdGhlbS4gIEEgc2VnbWVudCBpcyByb3VuZCBpZiB0aGUgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnQKKyAgICogICAgb2YgYW4gZXh0cmVtdW0gKHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgcG9pbnQgb3Igc2VxdWVuY2Ugb2YKKyAgICogICAgcG9pbnRzKSBhcmUgYm90aCBjb25pYyBvciBjdWJpYyBjb250cm9sIHBvaW50cy4gIE90aGVyd2lzZSwgYQorICAgKiAgICBzZWdtZW50IHdpdGggYW4gZXh0cmVtdW0gaXMgZmxhdC4KKyAgICoKKyAgICoKKyAgICogIFN0cm9uZyBQb2ludHMKKyAgICoKKyAgICogICAgRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCBwb2ludHMgbm90IHBhcnQgb2YgYW4gZWRnZSBuZWVkIHRvIGJlCisgICAqICAgIGludGVycG9sYXRlZCBsaW5lYXJseSBiZXR3ZWVuIHRoZWlyIHR3byBjbG9zZXN0IGVkZ2VzLCBldmVuIGlmIHRoZXNlCisgICAqICAgIGFyZSBub3QgcGFydCBvZiB0aGUgY29udG91ciBvZiB0aG9zZSBwYXJ0aWN1bGFyIHBvaW50cy4gIFR5cGljYWwKKyAgICogICAgY2FuZGlkYXRlcyBmb3IgdGhpcyBhcmUKKyAgICoKKyAgICogICAgLSBhbmdsZSBwb2ludHMgKGkuZS4sIHBvaW50cyB3aGVyZSB0aGUgYGluJyBhbmQgYG91dCcgZGlyZWN0aW9uCisgICAqICAgICAgZGlmZmVyIGdyZWF0bHkpCisgICAqCisgICAqICAgIC0gaW5mbGVjdGlvbiBwb2ludHMgKGkuZS4sIHdoZXJlIHRoZSBgaW4nIGFuZCBgb3V0JyBhbmdsZXMgYXJlIHRoZQorICAgKiAgICAgIHNhbWUsIGJ1dCB0aGUgY3VydmF0dXJlIGNoYW5nZXMgc2lnbikgW2N1cnJlbnRseSwgc3VjaCBwb2ludHMKKyAgICogICAgICBhcmVuJ3QgaGFuZGxlZCBzcGVjaWFsbHkgaW4gdGhlIGF1dG8taGludGVyXQorICAgKgorICAgKiAgICBgYWZfZ2x5cGhfaGludHNfYWxpZ25fc3Ryb25nX3BvaW50cycgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgdGFrZXMKKyAgICogICAgY2FyZSBvZiBzdWNoIHNpdHVhdGlvbnM7IGl0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIFRydWVUeXBlIGBJUCcKKyAgICogICAgaGludGluZyBpbnN0cnVjdGlvbi4KKyAgICoKKyAgICoKKyAgICogIFdlYWsgUG9pbnRzCisgICAqCisgICAqICAgIE90aGVyIHBvaW50cyBpbiB0aGUgb3V0bGluZSBtdXN0IGJlIGludGVycG9sYXRlZCB1c2luZyB0aGUKKyAgICogICAgY29vcmRpbmF0ZXMgb2YgdGhlaXIgcHJldmlvdXMgYW5kIG5leHQgdW5maXR0ZWQgY29udG91ciBuZWlnaGJvdXJzLgorICAgKiAgICBUaGVzZSBhcmUgY2FsbGVkIGB3ZWFrIHBvaW50cycgYW5kIGFyZSB0b3VjaGVkIGJ5IHRoZSBmdW5jdGlvbgorICAgKiAgICBgYWZfZ2x5cGhfaGludHNfYWxpZ25fd2Vha19wb2ludHMnLCBlcXVpdmFsZW50IHRvIHRoZSBUcnVlVHlwZSBgSVVQJworICAgKiAgICBoaW50aW5nIGluc3RydWN0aW9uLiAgVHlwaWNhbCBjYW5kaWRhdGVzIGFyZSBjb250cm9sIHBvaW50cyBhbmQKKyAgICogICAgcG9pbnRzIG9uIHRoZSBjb250b3VyIHdpdGhvdXQgYSBtYWpvciBkaXJlY3Rpb24uCisgICAqCisgICAqICAgIFRoZSBtYWpvciBlZmZlY3QgaXMgdG8gcmVkdWNlIHBvc3NpYmxlIGRpc3RvcnRpb24gY2F1c2VkIGJ5CisgICAqICAgIGFsaWdubWVudCBvZiBlZGdlcyBhbmQgc3Ryb25nIHBvaW50cywgdGh1cyB3ZWFrIHBvaW50cyBhcmUgcHJvY2Vzc2VkCisgICAqICAgIGFmdGVyIHN0cm9uZyBwb2ludHMuCisgICAqLworCisKKyAgLyogcG9pbnQgaGludCBmbGFncyAqLworI2RlZmluZSBBRl9GTEFHX05PTkUgIDAKKworICAvKiBwb2ludCB0eXBlIGZsYWdzICovCisjZGVmaW5lIEFGX0ZMQUdfQ09OSUMgICAgKCAxVSA8PCAwICkKKyNkZWZpbmUgQUZfRkxBR19DVUJJQyAgICAoIDFVIDw8IDEgKQorI2RlZmluZSBBRl9GTEFHX0NPTlRST0wgICggQUZfRkxBR19DT05JQyB8IEFGX0ZMQUdfQ1VCSUMgKQorCisgIC8qIHBvaW50IHRvdWNoIGZsYWdzICovCisjZGVmaW5lIEFGX0ZMQUdfVE9VQ0hfWCAgKCAxVSA8PCAyICkKKyNkZWZpbmUgQUZfRkxBR19UT1VDSF9ZICAoIDFVIDw8IDMgKQorCisgIC8qIGNhbmRpZGF0ZXMgZm9yIHdlYWsgaW50ZXJwb2xhdGlvbiBoYXZlIHRoaXMgZmxhZyBzZXQgKi8KKyNkZWZpbmUgQUZfRkxBR19XRUFLX0lOVEVSUE9MQVRJT04gICggMVUgPDwgNCApCisKKworICAvKiBlZGdlIGhpbnQgZmxhZ3MgKi8KKyNkZWZpbmUgQUZfRURHRV9OT1JNQUwgIDAKKyNkZWZpbmUgQUZfRURHRV9ST1VORCAgICAoIDFVIDw8IDAgKQorI2RlZmluZSBBRl9FREdFX1NFUklGICAgICggMVUgPDwgMSApCisjZGVmaW5lIEFGX0VER0VfRE9ORSAgICAgKCAxVSA8PCAyICkKKyNkZWZpbmUgQUZfRURHRV9ORVVUUkFMICAoIDFVIDw8IDMgKSAvKiBlZGdlIGFsaWducyB0byBhIG5ldXRyYWwgYmx1ZSB6b25lICovCisKKworICB0eXBlZGVmIHN0cnVjdCBBRl9Qb2ludFJlY18qICAgIEFGX1BvaW50OworICB0eXBlZGVmIHN0cnVjdCBBRl9TZWdtZW50UmVjXyogIEFGX1NlZ21lbnQ7CisgIHR5cGVkZWYgc3RydWN0IEFGX0VkZ2VSZWNfKiAgICAgQUZfRWRnZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9Qb2ludFJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgZmxhZ3M7ICAgIC8qIHBvaW50IGZsYWdzIHVzZWQgYnkgaGludGVyICAgKi8KKyAgICBGVF9DaGFyICAgIGluX2RpcjsgICAvKiBkaXJlY3Rpb24gb2YgaW53YXJkcyB2ZWN0b3IgICovCisgICAgRlRfQ2hhciAgICBvdXRfZGlyOyAgLyogZGlyZWN0aW9uIG9mIG91dHdhcmRzIHZlY3RvciAqLworCisgICAgRlRfUG9zICAgICBveCwgb3k7ICAgLyogb3JpZ2luYWwsIHNjYWxlZCBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX1Nob3J0ICAgZngsIGZ5OyAgIC8qIG9yaWdpbmFsLCB1bnNjYWxlZCBwb3NpdGlvbiAoaW4gZm9udCB1bml0cykgKi8KKyAgICBGVF9Qb3MgICAgIHgsIHk7ICAgICAvKiBjdXJyZW50IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfUG9zICAgICB1LCB2OyAgICAgLyogY3VycmVudCAoeCx5KSBvciAoeSx4KSBkZXBlbmRpbmcgb24gY29udGV4dCAqLworCisgICAgQUZfUG9pbnQgICBuZXh0OyAgICAgLyogbmV4dCBwb2ludCBpbiBjb250b3VyICAgICAqLworICAgIEFGX1BvaW50ICAgcHJldjsgICAgIC8qIHByZXZpb3VzIHBvaW50IGluIGNvbnRvdXIgKi8KKworICB9IEFGX1BvaW50UmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX1NlZ21lbnRSZWNfCisgIHsKKyAgICBGVF9CeXRlICAgICBmbGFnczsgICAgICAgLyogZWRnZS9zZWdtZW50IGZsYWdzIGZvciB0aGlzIHNlZ21lbnQgKi8KKyAgICBGVF9DaGFyICAgICBkaXI7ICAgICAgICAgLyogc2VnbWVudCBkaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9TaG9ydCAgICBwb3M7ICAgICAgICAgLyogcG9zaXRpb24gb2Ygc2VnbWVudCAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9TaG9ydCAgICBtaW5fY29vcmQ7ICAgLyogbWluaW11bSBjb29yZGluYXRlIG9mIHNlZ21lbnQgICAgICAgKi8KKyAgICBGVF9TaG9ydCAgICBtYXhfY29vcmQ7ICAgLyogbWF4aW11bSBjb29yZGluYXRlIG9mIHNlZ21lbnQgICAgICAgKi8KKyAgICBGVF9TaG9ydCAgICBoZWlnaHQ7ICAgICAgLyogdGhlIGhpbnRlZCBzZWdtZW50IGhlaWdodCAgICAgICAgICAgKi8KKworICAgIEFGX0VkZ2UgICAgIGVkZ2U7ICAgICAgICAvKiB0aGUgc2VnbWVudCdzIHBhcmVudCBlZGdlICAgICAgICAgICAqLworICAgIEFGX1NlZ21lbnQgIGVkZ2VfbmV4dDsgICAvKiBsaW5rIHRvIG5leHQgc2VnbWVudCBpbiBwYXJlbnQgZWRnZSAqLworCisgICAgQUZfU2VnbWVudCAgbGluazsgICAgICAgIC8qIChzdGVtKSBsaW5rIHNlZ21lbnQgICAgICAgICovCisgICAgQUZfU2VnbWVudCAgc2VyaWY7ICAgICAgIC8qIHByaW1hcnkgc2VnbWVudCBmb3Igc2VyaWZzICovCisgICAgRlRfUG9zICAgICAgbnVtX2xpbmtlZDsgIC8qIG51bWJlciBvZiBsaW5rZWQgc2VnbWVudHMgICovCisgICAgRlRfUG9zICAgICAgc2NvcmU7ICAgICAgIC8qIHVzZWQgZHVyaW5nIHN0ZW0gbWF0Y2hpbmcgICovCisgICAgRlRfUG9zICAgICAgbGVuOyAgICAgICAgIC8qIHVzZWQgZHVyaW5nIHN0ZW0gbWF0Y2hpbmcgICovCisKKyAgICBBRl9Qb2ludCAgICBmaXJzdDsgICAgICAgLyogZmlyc3QgcG9pbnQgaW4gZWRnZSBzZWdtZW50ICovCisgICAgQUZfUG9pbnQgICAgbGFzdDsgICAgICAgIC8qIGxhc3QgcG9pbnQgaW4gZWRnZSBzZWdtZW50ICAqLworCisgIH0gQUZfU2VnbWVudFJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9FZGdlUmVjXworICB7CisgICAgRlRfU2hvcnQgICAgZnBvczsgICAgICAgLyogb3JpZ2luYWwsIHVuc2NhbGVkIHBvc2l0aW9uIChpbiBmb250IHVuaXRzKSAqLworICAgIEZUX1BvcyAgICAgIG9wb3M7ICAgICAgIC8qIG9yaWdpbmFsLCBzY2FsZWQgcG9zaXRpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Qb3MgICAgICBwb3M7ICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9CeXRlICAgICBmbGFnczsgICAgICAvKiBlZGdlIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0NoYXIgICAgIGRpcjsgICAgICAgIC8qIGVkZ2UgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfRml4ZWQgICAgc2NhbGU7ICAgICAgLyogdXNlZCB0byBzcGVlZCB1cCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gZWRnZXMgKi8KKworICAgIEFGX1dpZHRoICAgIGJsdWVfZWRnZTsgIC8qIG5vbi1OVUxMIGlmIHRoaXMgaXMgYSBibHVlIGVkZ2UgKi8KKyAgICBBRl9FZGdlICAgICBsaW5rOyAgICAgICAvKiBsaW5rIGVkZ2UgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfRWRnZSAgICAgc2VyaWY7ICAgICAgLyogcHJpbWFyeSBlZGdlIGZvciBzZXJpZnMgICAgICAgICAqLworICAgIEZUX1Nob3J0ICAgIG51bV9saW5rZWQ7IC8qIG51bWJlciBvZiBsaW5rZWQgZWRnZXMgICAgICAgICAgKi8KKyAgICBGVF9JbnQgICAgICBzY29yZTsgICAgICAvKiB1c2VkIGR1cmluZyBzdGVtIG1hdGNoaW5nICAgICAgICovCisKKyAgICBBRl9TZWdtZW50ICBmaXJzdDsgICAgICAvKiBmaXJzdCBzZWdtZW50IGluIGVkZ2UgKi8KKyAgICBBRl9TZWdtZW50ICBsYXN0OyAgICAgICAvKiBsYXN0IHNlZ21lbnQgaW4gZWRnZSAgKi8KKworICB9IEFGX0VkZ2VSZWM7CisKKyNkZWZpbmUgQUZfU0VHTUVOVFNfRU1CRURERUQgIDE4ICAgLyogbnVtYmVyIG9mIGVtYmVkZGVkIHNlZ21lbnRzICAgKi8KKyNkZWZpbmUgQUZfRURHRVNfRU1CRURERUQgICAgIDEyICAgLyogbnVtYmVyIG9mIGVtYmVkZGVkIGVkZ2VzICAgICAgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgQUZfQXhpc0hpbnRzUmVjXworICB7CisgICAgRlRfSW50ICAgICAgICBudW1fc2VnbWVudHM7IC8qIG51bWJlciBvZiB1c2VkIHNlZ21lbnRzICAgICAgKi8KKyAgICBGVF9JbnQgICAgICAgIG1heF9zZWdtZW50czsgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBzZWdtZW50cyAqLworICAgIEFGX1NlZ21lbnQgICAgc2VnbWVudHM7ICAgICAvKiBzZWdtZW50cyBhcnJheSAgICAgICAgICAgICAgICovCisjaWZkZWYgQUZfU09SVF9TRUdNRU5UUworICAgIEZUX0ludCAgICAgICAgbWlkX3NlZ21lbnRzOworI2VuZGlmCisKKyAgICBGVF9JbnQgICAgICAgIG51bV9lZGdlczsgICAgLyogbnVtYmVyIG9mIHVzZWQgZWRnZXMgICAgICAqLworICAgIEZUX0ludCAgICAgICAgbWF4X2VkZ2VzOyAgICAvKiBudW1iZXIgb2YgYWxsb2NhdGVkIGVkZ2VzICovCisgICAgQUZfRWRnZSAgICAgICBlZGdlczsgICAgICAgIC8qIGVkZ2VzIGFycmF5ICAgICAgICAgICAgICAgKi8KKworICAgIEFGX0RpcmVjdGlvbiAgbWFqb3JfZGlyOyAgICAvKiBlaXRoZXIgdmVydGljYWwgb3IgaG9yaXpvbnRhbCAqLworCisgICAgLyogdHdvIGFycmF5cyB0byBhdm9pZCBhbGxvY2F0aW9uIHBlbmFsdHkgKi8KKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBBRl9TZWdtZW50UmVjICBzZWdtZW50c1tBRl9TRUdNRU5UU19FTUJFRERFRF07CisgICAgICBBRl9FZGdlUmVjICAgICBlZGdlc1tBRl9FREdFU19FTUJFRERFRF07CisgICAgfSBlbWJlZGRlZDsKKworCisgIH0gQUZfQXhpc0hpbnRzUmVjLCAqQUZfQXhpc0hpbnRzOworCisKKyNkZWZpbmUgQUZfUE9JTlRTX0VNQkVEREVEICAgICA5NiAgIC8qIG51bWJlciBvZiBlbWJlZGRlZCBwb2ludHMgICAqLworI2RlZmluZSBBRl9DT05UT1VSU19FTUJFRERFRCAgICA4ICAgLyogbnVtYmVyIG9mIGVtYmVkZGVkIGNvbnRvdXJzICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0dseXBoSGludHNSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeTsKKworICAgIEZUX0ZpeGVkICAgICAgICAgeF9zY2FsZTsKKyAgICBGVF9Qb3MgICAgICAgICAgIHhfZGVsdGE7CisKKyAgICBGVF9GaXhlZCAgICAgICAgIHlfc2NhbGU7CisgICAgRlRfUG9zICAgICAgICAgICB5X2RlbHRhOworCisgICAgRlRfSW50ICAgICAgICAgICBtYXhfcG9pbnRzOyAgICAvKiBudW1iZXIgb2YgYWxsb2NhdGVkIHBvaW50cyAqLworICAgIEZUX0ludCAgICAgICAgICAgbnVtX3BvaW50czsgICAgLyogbnVtYmVyIG9mIHVzZWQgcG9pbnRzICAgICAgKi8KKyAgICBBRl9Qb2ludCAgICAgICAgIHBvaW50czsgICAgICAgIC8qIHBvaW50cyBhcnJheSAgICAgICAgICAgICAgICovCisKKyAgICBGVF9JbnQgICAgICAgICAgIG1heF9jb250b3VyczsgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgY29udG91cnMgKi8KKyAgICBGVF9JbnQgICAgICAgICAgIG51bV9jb250b3VyczsgIC8qIG51bWJlciBvZiB1c2VkIGNvbnRvdXJzICAgICAgKi8KKyAgICBBRl9Qb2ludCogICAgICAgIGNvbnRvdXJzOyAgICAgIC8qIGNvbnRvdXJzIGFycmF5ICAgICAgICAgICAgICAgKi8KKworICAgIEFGX0F4aXNIaW50c1JlYyAgYXhpc1tBRl9ESU1FTlNJT05fTUFYXTsKKworICAgIEZUX1VJbnQzMiAgICAgICAgc2NhbGVyX2ZsYWdzOyAgLyogY29weSBvZiBzY2FsZXIgZmxhZ3MgICAgKi8KKyAgICBGVF9VSW50MzIgICAgICAgIG90aGVyX2ZsYWdzOyAgIC8qIGZyZWUgZm9yIHN0eWxlLXNwZWNpZmljICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbXBsZW1lbnRhdGlvbnMgICAgICAgICAqLworICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljczsKKworICAgIEZUX1BvcyAgICAgICAgICAgeG1pbl9kZWx0YTsgICAgLyogdXNlZCBmb3Igd2FycGluZyAqLworICAgIEZUX1BvcyAgICAgICAgICAgeG1heF9kZWx0YTsKKworICAgIC8qIFR3byBhcnJheXMgdG8gYXZvaWQgYWxsb2NhdGlvbiBwZW5hbHR5LiAgICAgICAgICAgICovCisgICAgLyogVGhlIGBlbWJlZGRlZCcgc3RydWN0dXJlIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCEgKi8KKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBBRl9Qb2ludCAgICAgICBjb250b3Vyc1tBRl9DT05UT1VSU19FTUJFRERFRF07CisgICAgICBBRl9Qb2ludFJlYyAgICBwb2ludHNbQUZfUE9JTlRTX0VNQkVEREVEXTsKKyAgICB9IGVtYmVkZGVkOworCisgIH0gQUZfR2x5cGhIaW50c1JlYzsKKworCisjZGVmaW5lIEFGX0hJTlRTX1RFU1RfU0NBTEVSKCBoLCBmICkgICggKGgpLT5zY2FsZXJfZmxhZ3MgJiAoZikgKQorI2RlZmluZSBBRl9ISU5UU19URVNUX09USEVSKCBoLCBmICkgICAoIChoKS0+b3RoZXJfZmxhZ3MgICYgKGYpICkKKworCisjaWZkZWYgRlRfREVCVUdfQVVUT0ZJVAorCisjZGVmaW5lIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAhX2FmX2RlYnVnX2Rpc2FibGVfaG9yel9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcCisgICAgICAgICAgICAhQUZfSElOVFNfVEVTVF9TQ0FMRVIoIGgsIEFGX1NDQUxFUl9GTEFHX05PX0hPUklaT05UQUwgKSApCisKKyNkZWZpbmUgQUZfSElOVFNfRE9fVkVSVElDQUwoIGggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAhX2FmX2RlYnVnX2Rpc2FibGVfdmVydF9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAorICAgICAgICAgICAgIUFGX0hJTlRTX1RFU1RfU0NBTEVSKCBoLCBBRl9TQ0FMRVJfRkxBR19OT19WRVJUSUNBTCApICkKKworI2RlZmluZSBBRl9ISU5UU19ET19CTFVFUyggaCApICAoICFfYWZfZGVidWdfZGlzYWJsZV9ibHVlX2hpbnRzICkKKworI2Vsc2UgLyogIUZUX0RFQlVHX0FVVE9GSVQgKi8KKworI2RlZmluZSBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAhQUZfSElOVFNfVEVTVF9TQ0FMRVIoIGgsIEFGX1NDQUxFUl9GTEFHX05PX0hPUklaT05UQUwgKQorCisjZGVmaW5lIEFGX0hJTlRTX0RPX1ZFUlRJQ0FMKCBoICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAhQUZfSElOVFNfVEVTVF9TQ0FMRVIoIGgsIEFGX1NDQUxFUl9GTEFHX05PX1ZFUlRJQ0FMICkKKworI2RlZmluZSBBRl9ISU5UU19ET19CTFVFUyggaCApICAxCisKKyNlbmRpZiAvKiAhRlRfREVCVUdfQVVUT0ZJVCAqLworCisKKyNkZWZpbmUgQUZfSElOVFNfRE9fQURWQU5DRSggaCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIUFGX0hJTlRTX1RFU1RfU0NBTEVSKCBoLCBBRl9TQ0FMRVJfRkxBR19OT19BRFZBTkNFICkKKworI2RlZmluZSBBRl9ISU5UU19ET19XQVJQKCBoICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICFBRl9ISU5UU19URVNUX1NDQUxFUiggaCwgQUZfU0NBTEVSX0ZMQUdfTk9fV0FSUEVSICkKKworCisKKyAgRlRfTE9DQUwoIEFGX0RpcmVjdGlvbiApCisgIGFmX2RpcmVjdGlvbl9jb21wdXRlKCBGVF9Qb3MgIGR4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBkeSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgYWZfYXhpc19oaW50c19uZXdfc2VnbWVudCggQUZfQXhpc0hpbnRzICBheGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU2VnbWVudCAgICphc2VnbWVudCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvcikKKyAgYWZfYXhpc19oaW50c19uZXdfZWRnZSggQUZfQXhpc0hpbnRzICBheGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpcmVjdGlvbiAgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICplZGdlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19pbml0KCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBhZl9nbHlwaF9oaW50c19yZWxvYWQoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgIG91dGxpbmUgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX2dseXBoX2hpbnRzX3NhdmUoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICBvdXRsaW5lICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9nbHlwaF9oaW50c19hbGlnbl9lZGdlX3BvaW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX2dseXBoX2hpbnRzX2FsaWduX3N0cm9uZ19wb2ludHMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX2dseXBoX2hpbnRzX2FsaWduX3dlYWtfcG9pbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApOworCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfZ2x5cGhfaGludHNfc2NhbGVfZGltKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICAgc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgZGVsdGEgKTsKKyNlbmRpZgorCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfZ2x5cGhfaGludHNfZG9uZSggQUZfR2x5cGhIaW50cyAgaGludHMgKTsKKworLyogKi8KKworI2RlZmluZSBBRl9TRUdNRU5UX0xFTiggc2VnICkgICAgICAgICAgKCAoc2VnKS0+bWF4X2Nvb3JkIC0gKHNlZyktPm1pbl9jb29yZCApCisKKyNkZWZpbmUgQUZfU0VHTUVOVF9ESVNUKCBzZWcxLCBzZWcyICkgICggKCAoc2VnMSktPnBvcyA+IChzZWcyKS0+cG9zICkgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoc2VnMSktPnBvcyAtIChzZWcyKS0+cG9zICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHNlZzIpLT5wb3MgLSAoc2VnMSktPnBvcyApCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19BRkhJTlRTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmaW5kaWMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxMmNkMQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmaW5kaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgUmFodWwgQmhhbGVyYW8gPHJhaHVsLmJoYWxlcmFvQHJlZGhhdC5jb20+LCA8Yi5yYWh1bC5wbUBnbWFpbC5jb20+LiAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImFmdHlwZXMuaCIKKyNpbmNsdWRlICJhZmxhdGluLmgiCisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKKworI2luY2x1ZGUgImFmaW5kaWMuaCIKKyNpbmNsdWRlICJhZmVycm9ycy5oIgorI2luY2x1ZGUgImFmY2prLmgiCisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorI2luY2x1ZGUgImFmd2FycC5oIgorI2VuZGlmCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZfaW5kaWNfbWV0cmljc19pbml0KCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKQorICB7CisgICAgLyogc2tpcCBibHVlIHpvbmUgaW5pdCBpbiBDSksgcm91dGluZXMgKi8KKyAgICBGVF9DaGFyTWFwICBvbGRtYXAgPSBmYWNlLT5jaGFybWFwOworCisKKyAgICBtZXRyaWNzLT51bml0c19wZXJfZW0gPSBmYWNlLT51bml0c19wZXJfRU07CisKKyAgICBpZiAoIEZUX1NlbGVjdF9DaGFybWFwKCBmYWNlLCBGVF9FTkNPRElOR19VTklDT0RFICkgKQorICAgICAgZmFjZS0+Y2hhcm1hcCA9IE5VTEw7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzKCBtZXRyaWNzLCBmYWNlICk7CisjaWYgMAorICAgICAgLyogZWl0aGVyIG5lZWQgaW5kaWMgc3BlY2lmaWMgYmx1ZV9jaGFyc1tdIG9yIGp1c3Qgc2tpcCBibHVlIHpvbmVzICovCisgICAgICBhZl9jamtfbWV0cmljc19pbml0X2JsdWVzKCBtZXRyaWNzLCBmYWNlLCBhZl9jamtfYmx1ZV9jaGFycyApOworI2VuZGlmCisgICAgICBhZl9jamtfbWV0cmljc19jaGVja19kaWdpdHMoIG1ldHJpY3MsIGZhY2UgKTsKKyAgICB9CisKKyAgICBGVF9TZXRfQ2hhcm1hcCggZmFjZSwgb2xkbWFwICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBhZl9pbmRpY19tZXRyaWNzX3NjYWxlKCBBRl9DSktNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICBzY2FsZXIgKQorICB7CisgICAgLyogdXNlIENKSyByb3V0aW5lcyAqLworICAgIGFmX2Nqa19tZXRyaWNzX3NjYWxlKCBtZXRyaWNzLCBzY2FsZXIgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX2luZGljX2hpbnRzX2luaXQoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9DSktNZXRyaWNzICBtZXRyaWNzICkKKyAgeworICAgIC8qIHVzZSBDSksgcm91dGluZXMgKi8KKyAgICByZXR1cm4gYWZfY2prX2hpbnRzX2luaXQoIGhpbnRzLCBtZXRyaWNzICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9pbmRpY19oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfQ0pLTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICAvKiB1c2UgQ0pLIHJvdXRpbmVzICovCisgICAgcmV0dXJuIGFmX2Nqa19oaW50c19hcHBseSggaGludHMsIG91dGxpbmUsIG1ldHJpY3MgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgIEkgTiBEIEkgQyAgIFMgQyBSIEkgUCBUICAgQyBMIEEgUyBTICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBBRl9ERUZJTkVfV1JJVElOR19TWVNURU1fQ0xBU1MoCisgICAgYWZfaW5kaWNfd3JpdGluZ19zeXN0ZW1fY2xhc3MsCisKKyAgICBBRl9XUklUSU5HX1NZU1RFTV9JTkRJQywKKworICAgIHNpemVvZiAoIEFGX0NKS01ldHJpY3NSZWMgKSwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgYWZfaW5kaWNfbWV0cmljc19pbml0LAorICAgIChBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMpYWZfaW5kaWNfbWV0cmljc19zY2FsZSwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMpIE5VTEwsCisKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIGFmX2luZGljX2hpbnRzX2luaXQsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBhZl9pbmRpY19oaW50c19hcHBseQorICApCisKKworI2Vsc2UgLyogIUFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KKworCisgIEFGX0RFRklORV9XUklUSU5HX1NZU1RFTV9DTEFTUygKKyAgICBhZl9pbmRpY193cml0aW5nX3N5c3RlbV9jbGFzcywKKworICAgIEFGX1dSSVRJTkdfU1lTVEVNX0lORElDLAorCisgICAgc2l6ZW9mICggQUZfQ0pLTWV0cmljc1JlYyApLAorCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fSW5pdE1ldHJpY3NGdW5jKSBOVUxMLAorICAgIChBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMpTlVMTCwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMpIE5VTEwsCisKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIE5VTEwsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBOVUxMCisgICkKKworCisjZW5kaWYgLyogIUFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmluZGljLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZpbmRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzY5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZpbmRpYy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmaW5kaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4gICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRklORElDX0hfXworI2RlZmluZSBfX0FGSU5ESUNfSF9fCisKKyNpbmNsdWRlICJhZmhpbnRzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKiB0aGUgYGluZGljJyB3cml0aW5nIHN5c3RlbSAqLworCisgIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIGFmX2luZGljX3dyaXRpbmdfc3lzdGVtX2NsYXNzICkKKworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGSU5ESUNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsYXRpbi5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbGF0aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNlOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbGF0aW4uYwpAQCAtMCwwICsxLDI5MTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbGF0aW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9BRFZBTkNFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlICJhZmdsb2JhbC5oIgorI2luY2x1ZGUgImFmcGljLmgiCisjaW5jbHVkZSAiYWZsYXRpbi5oIgorI2luY2x1ZGUgImFmZXJyb3JzLmgiCisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorI2luY2x1ZGUgImFmd2FycC5oIgorI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmxhdGluCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICBMIEEgVCBJIE4gICBHIEwgTyBCIEEgTCAgIE0gRSBUIFIgSSBDIFMgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIEZpbmQgc2VnbWVudHMgYW5kIGxpbmtzLCBjb21wdXRlIGFsbCBzdGVtIHdpZHRocywgYW5kIGluaXRpYWxpemUgKi8KKyAgLyogc3RhbmRhcmQgd2lkdGggYW5kIGhlaWdodCBmb3IgdGhlIGdseXBoIHdpdGggZ2l2ZW4gY2hhcmNvZGUuICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluX21ldHJpY3NfaW5pdF93aWR0aHMoIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICkKKyAgeworICAgIC8qIHNjYW4gdGhlIGFycmF5IG9mIHNlZ21lbnRzIGluIGVhY2ggZGlyZWN0aW9uICovCisgICAgQUZfR2x5cGhIaW50c1JlYyAgaGludHNbMV07CisKKworICAgIEZUX1RSQUNFNSgoICJcbiIKKyAgICAgICAgICAgICAgICAibGF0aW4gc3RhbmRhcmQgd2lkdGhzIGNvbXB1dGF0aW9uIChzdHlsZSBgJXMnKVxuIgorICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorICAgICAgICAgICAgICAgICJcbiIsCisgICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzcy0+c3R5bGVdICkpOworCisgICAgYWZfZ2x5cGhfaGludHNfaW5pdCggaGludHMsIGZhY2UtPm1lbW9yeSApOworCisgICAgbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0ud2lkdGhfY291bnQgPSAwOworICAgIG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLndpZHRoX2NvdW50ID0gMDsKKworICAgIHsKKyAgICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7CisgICAgICBGVF9VTG9uZyAgICAgICAgICAgIGdseXBoX2luZGV4OworICAgICAgRlRfTG9uZyAgICAgICAgICAgICB5X29mZnNldDsKKyAgICAgIGludCAgICAgICAgICAgICAgICAgZGltOworICAgICAgQUZfTGF0aW5NZXRyaWNzUmVjICBkdW1teVsxXTsKKyAgICAgIEFGX1NjYWxlciAgICAgICAgICAgc2NhbGVyID0gJmR1bW15LT5yb290LnNjYWxlcjsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgICBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscyA9IG1ldHJpY3MtPnJvb3QuZ2xvYmFsczsKKyNlbmRpZgorCisgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzczsKKyAgICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKKworICAgICAgRlRfVUludDMyICBzdGFuZGFyZF9jaGFyOworCisKKyAgICAgIC8qCisgICAgICAgKiBXZSBjaGVjayBtb3JlIHRoYW4gYSBzaW5nbGUgc3RhbmRhcmQgY2hhcmFjdGVyIHRvIGNhdGNoIGZlYXR1cmVzCisgICAgICAgKiBsaWtlIGBjMnNjJyAoc21hbGwgY2FwcyBmcm9tIGNhcHMpIHRoYXQgZG9uJ3QgY29udGFpbiBsb3dlcmNhc2UKKyAgICAgICAqIGxldHRlcnMgYnkgZGVmaW5pdGlvbiwgb3Igb3RoZXIgZmVhdHVyZXMgdGhhdCBtYWlubHkgb3BlcmF0ZSBvbgorICAgICAgICogbnVtZXJhbHMuCisgICAgICAgKi8KKworICAgICAgc3RhbmRhcmRfY2hhciA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcjE7CisgICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7CisgICAgICBpZiAoICFnbHlwaF9pbmRleCApCisgICAgICB7CisgICAgICAgIGlmICggc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMiApCisgICAgICAgIHsKKyAgICAgICAgICBzdGFuZGFyZF9jaGFyID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMjsKKyAgICAgICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7CisgICAgICAgICAgaWYgKCAhZ2x5cGhfaW5kZXggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyMyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YW5kYXJkX2NoYXIgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXIzOworICAgICAgICAgICAgICBhZl9nZXRfY2hhcl9pbmRleCggJm1ldHJpY3MtPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9jaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnlfb2Zmc2V0ICk7CisgICAgICAgICAgICAgIGlmICggIWdseXBoX2luZGV4ICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggInN0YW5kYXJkIGNoYXJhY3RlcjogVSslMDRsWCAoZ2x5cGggaW5kZXggJWQpXG4iLAorICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfY2hhciwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfTk9fU0NBTEUgKTsKKyAgICAgIGlmICggZXJyb3IgfHwgZmFjZS0+Z2x5cGgtPm91dGxpbmUubl9wb2ludHMgPD0gMCApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfWkVSTyggZHVtbXkgKTsKKworICAgICAgZHVtbXktPnVuaXRzX3Blcl9lbSA9IG1ldHJpY3MtPnVuaXRzX3Blcl9lbTsKKworICAgICAgc2NhbGVyLT54X3NjYWxlID0gMHgxMDAwMEw7CisgICAgICBzY2FsZXItPnlfc2NhbGUgPSAweDEwMDAwTDsKKyAgICAgIHNjYWxlci0+eF9kZWx0YSA9IDA7CisgICAgICBzY2FsZXItPnlfZGVsdGEgPSAwOworCisgICAgICBzY2FsZXItPmZhY2UgICAgICAgID0gZmFjZTsKKyAgICAgIHNjYWxlci0+cmVuZGVyX21vZGUgPSBGVF9SRU5ERVJfTU9ERV9OT1JNQUw7CisgICAgICBzY2FsZXItPmZsYWdzICAgICAgID0gMDsKKworICAgICAgYWZfZ2x5cGhfaGludHNfcmVzY2FsZSggaGludHMsIChBRl9TdHlsZU1ldHJpY3MpZHVtbXkgKTsKKworICAgICAgZXJyb3IgPSBhZl9nbHlwaF9oaW50c19yZWxvYWQoIGhpbnRzLCAmZmFjZS0+Z2x5cGgtPm91dGxpbmUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZvciAoIGRpbSA9IDA7IGRpbSA8IEFGX0RJTUVOU0lPTl9NQVg7IGRpbSsrICkKKyAgICAgIHsKKyAgICAgICAgQUZfTGF0aW5BeGlzICBheGlzICAgID0gJm1ldHJpY3MtPmF4aXNbZGltXTsKKyAgICAgICAgQUZfQXhpc0hpbnRzICBheGhpbnRzID0gJmhpbnRzLT5heGlzW2RpbV07CisgICAgICAgIEFGX1NlZ21lbnQgICAgc2VnLCBsaW1pdCwgbGluazsKKyAgICAgICAgRlRfVUludCAgICAgICBudW1fd2lkdGhzID0gMDsKKworCisgICAgICAgIGVycm9yID0gYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyggaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIC8qCisgICAgICAgICAqICBXZSBhc3N1bWUgdGhhdCB0aGUgZ2x5cGhzIHNlbGVjdGVkIGZvciB0aGUgc3RlbSB3aWR0aAorICAgICAgICAgKiAgY29tcHV0YXRpb24gYXJlIGBmZWF0dXJlbGVzcycgZW5vdWdoIHNvIHRoYXQgdGhlIGxpbmtpbmcKKyAgICAgICAgICogIGFsZ29yaXRobSB3b3JrcyBmaW5lIHdpdGhvdXQgYWRqdXN0bWVudHMgb2YgaXRzIHNjb3JpbmcKKyAgICAgICAgICogIGZ1bmN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyggaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9EaW1lbnNpb24pZGltICk7CisKKyAgICAgICAgc2VnICAgPSBheGhpbnRzLT5zZWdtZW50czsKKyAgICAgICAgbGltaXQgPSBzZWcgKyBheGhpbnRzLT5udW1fc2VnbWVudHM7CisKKyAgICAgICAgZm9yICggOyBzZWcgPCBsaW1pdDsgc2VnKysgKQorICAgICAgICB7CisgICAgICAgICAgbGluayA9IHNlZy0+bGluazsKKworICAgICAgICAgIC8qIHdlIG9ubHkgY29uc2lkZXIgc3RlbSBzZWdtZW50cyB0aGVyZSEgKi8KKyAgICAgICAgICBpZiAoIGxpbmsgJiYgbGluay0+bGluayA9PSBzZWcgJiYgbGluayA+IHNlZyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICBkaXN0OworCisKKyAgICAgICAgICAgIGRpc3QgPSBzZWctPnBvcyAtIGxpbmstPnBvczsKKyAgICAgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgICAgIGlmICggbnVtX3dpZHRocyA8IEFGX0xBVElOX01BWF9XSURUSFMgKQorICAgICAgICAgICAgICBheGlzLT53aWR0aHNbbnVtX3dpZHRocysrXS5vcmcgPSBkaXN0OworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIHRoaXMgYWxzbyByZXBsYWNlcyBtdWx0aXBsZSBhbG1vc3QgaWRlbnRpY2FsIHN0ZW0gd2lkdGhzICovCisgICAgICAgIC8qIHdpdGggYSBzaW5nbGUgb25lICh0aGUgdmFsdWUgMTAwIGlzIGhldXJpc3RpYykgICAgICAgICAgICovCisgICAgICAgIGFmX3NvcnRfYW5kX3F1YW50aXplX3dpZHRocyggJm51bV93aWR0aHMsIGF4aXMtPndpZHRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teS0+dW5pdHNfcGVyX2VtIC8gMTAwICk7CisgICAgICAgIGF4aXMtPndpZHRoX2NvdW50ID0gbnVtX3dpZHRoczsKKyAgICAgIH0KKworICAgIEV4aXQ6CisgICAgICBmb3IgKCBkaW0gPSAwOyBkaW0gPCBBRl9ESU1FTlNJT05fTUFYOyBkaW0rKyApCisgICAgICB7CisgICAgICAgIEFGX0xhdGluQXhpcyAgYXhpcyA9ICZtZXRyaWNzLT5heGlzW2RpbV07CisgICAgICAgIEZUX1BvcyAgICAgICAgc3RkdzsKKworCisgICAgICAgIHN0ZHcgPSAoIGF4aXMtPndpZHRoX2NvdW50ID4gMCApID8gYXhpcy0+d2lkdGhzWzBdLm9yZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFGX0xBVElOX0NPTlNUQU5UKCBtZXRyaWNzLCA1MCApOworCisgICAgICAgIC8qIGxldCdzIHRyeSAyMCUgb2YgdGhlIHNtYWxsZXN0IHdpZHRoICovCisgICAgICAgIGF4aXMtPmVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gc3RkdyAvIDU7CisgICAgICAgIGF4aXMtPnN0YW5kYXJkX3dpZHRoICAgICAgICAgID0gc3RkdzsKKyAgICAgICAgYXhpcy0+ZXh0cmFfbGlnaHQgICAgICAgICAgICAgPSAwOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIlcyB3aWR0aHM6XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCA/ICJob3Jpem9udGFsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJ2ZXJ0aWNhbCIgKSk7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICAlZCAoc3RhbmRhcmQpIiwgYXhpcy0+c3RhbmRhcmRfd2lkdGggKSk7CisgICAgICAgICAgZm9yICggaSA9IDE7IGkgPCBheGlzLT53aWR0aF9jb3VudDsgaSsrICkKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgJWQiLCBheGlzLT53aWR0aHNbaV0ub3JnICkpOworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICB9CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIGFmX2dseXBoX2hpbnRzX2RvbmUoIGhpbnRzICk7CisgIH0KKworCisgIC8qIEZpbmQgYWxsIGJsdWUgem9uZXMuICBGbGF0IHNlZ21lbnRzIGdpdmUgdGhlIHJlZmVyZW5jZSBwb2ludHMsICovCisgIC8qIHJvdW5kIHNlZ21lbnRzIHRoZSBvdmVyc2hvb3QgcG9zaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKCBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICkKKyAgeworICAgIEZUX1BvcyAgICAgICAgZmxhdHMgW0FGX0JMVUVfU1RSSU5HX01BWF9MRU5dOworICAgIEZUX1BvcyAgICAgICAgcm91bmRzW0FGX0JMVUVfU1RSSU5HX01BWF9MRU5dOworCisgICAgRlRfVUludCAgICAgICBudW1fZmxhdHM7CisgICAgRlRfVUludCAgICAgICBudW1fcm91bmRzOworCisgICAgQUZfTGF0aW5CbHVlICBibHVlOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgQUZfTGF0aW5BeGlzICBheGlzID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgIEZUX091dGxpbmUgICAgb3V0bGluZTsKKworICAgIEFGX1N0eWxlQ2xhc3MgIHNjID0gbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzczsKKworICAgIEFGX0JsdWVfU3RyaW5nc2V0ICAgICAgICAgYnNzID0gc2MtPmJsdWVfc3RyaW5nc2V0OworICAgIGNvbnN0IEFGX0JsdWVfU3RyaW5nUmVjKiAgYnMgID0gJmFmX2JsdWVfc3RyaW5nc2V0c1tic3NdOworCisKKyAgICAvKiB3ZSB3YWxrIG92ZXIgdGhlIGJsdWUgY2hhcmFjdGVyIHN0cmluZ3MgYXMgc3BlY2lmaWVkIGluIHRoZSAqLworICAgIC8qIHN0eWxlJ3MgZW50cnkgaW4gdGhlIGBhZl9ibHVlX3N0cmluZ3NldCcgYXJyYXkgICAgICAgICAgICAgICovCisKKyAgICBGVF9UUkFDRTUoKCAibGF0aW4gYmx1ZSB6b25lcyBjb21wdXRhdGlvblxuIgorICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCisgICAgICAgICAgICAgICAgIlxuIiApKTsKKworICAgIGZvciAoIDsgYnMtPnN0cmluZyAhPSBBRl9CTFVFX1NUUklOR19NQVg7IGJzKysgKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIqICBwID0gJmFmX2JsdWVfc3RyaW5nc1ticy0+c3RyaW5nXTsKKyAgICAgIEZUX1BvcyogICAgICBibHVlX3JlZjsKKyAgICAgIEZUX1BvcyogICAgICBibHVlX3Nob290OworCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgeworICAgICAgICBGVF9Cb29sICBoYXZlX2ZsYWcgPSAwOworCisKKyAgICAgICAgRlRfVFJBQ0U1KCggImJsdWUgem9uZSAlZCIsIGF4aXMtPmJsdWVfY291bnQgKSk7CisKKyAgICAgICAgaWYgKCBicy0+cHJvcGVydGllcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICgiICkpOworCisgICAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19UT1BfQkxVRSggYnMgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U1KCggInRvcCIgKSk7CisgICAgICAgICAgICBoYXZlX2ZsYWcgPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfTkVVVFJBTF9CTFVFKCBicyApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGhhdmVfZmxhZyApCisgICAgICAgICAgICAgIEZUX1RSQUNFNSgoICIsICIgKSk7CisgICAgICAgICAgICBGVF9UUkFDRTUoKCAibmV1dHJhbCIgKSk7CisgICAgICAgICAgICBoYXZlX2ZsYWcgPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfWF9IRUlHSFRfQkxVRSggYnMgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBoYXZlX2ZsYWcgKQorICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiLCAiICkpOworICAgICAgICAgICAgRlRfVFJBQ0U1KCggInNtYWxsIHRvcCIgKSk7CisgICAgICAgICAgICBoYXZlX2ZsYWcgPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfTE9OR19CTFVFKCBicyApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGhhdmVfZmxhZyApCisgICAgICAgICAgICAgIEZUX1RSQUNFNSgoICIsICIgKSk7CisgICAgICAgICAgICBGVF9UUkFDRTUoKCAibG9uZyIgKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgRlRfVFJBQ0U1KCggIikiICkpOworICAgICAgICB9CisKKyAgICAgICAgRlRfVFJBQ0U1KCggIjpcbiIgKSk7CisgICAgICB9CisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworICAgICAgbnVtX2ZsYXRzICA9IDA7CisgICAgICBudW1fcm91bmRzID0gMDsKKworICAgICAgd2hpbGUgKCAqcCApCisgICAgICB7CisgICAgICAgIEZUX1VMb25nICAgIGNoOworICAgICAgICBGVF9VTG9uZyAgICBnbHlwaF9pbmRleDsKKyAgICAgICAgRlRfTG9uZyAgICAgeV9vZmZzZXQ7CisgICAgICAgIEZUX1BvcyAgICAgIGJlc3RfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2FtZSBhcyBwb2ludHMueSAqLworICAgICAgICBGVF9JbnQgICAgICBiZXN0X3BvaW50LCBiZXN0X2NvbnRvdXJfZmlyc3QsIGJlc3RfY29udG91cl9sYXN0OworICAgICAgICBGVF9WZWN0b3IqICBwb2ludHM7CisgICAgICAgIEZUX0Jvb2wgICAgIHJvdW5kID0gMDsKKworCisgICAgICAgIEdFVF9VVEY4X0NIQVIoIGNoLCBwICk7CisKKyAgICAgICAgLyogbG9hZCB0aGUgY2hhcmFjdGVyIGluIHRoZSBmYWNlIC0tIHNraXAgdW5rbm93biBvciBlbXB0eSBvbmVzICovCisgICAgICAgIGFmX2dldF9jaGFyX2luZGV4KCAmbWV0cmljcy0+cm9vdCwgY2gsICZnbHlwaF9pbmRleCwgJnlfb2Zmc2V0ICk7CisgICAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBVKyUwNGxYIHVuYXZhaWxhYmxlXG4iLCBjaCApKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yICAgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgRlRfTE9BRF9OT19TQ0FMRSApOworICAgICAgICBvdXRsaW5lID0gZmFjZS0+Z2x5cGgtPm91dGxpbmU7CisgICAgICAgIC8qIHJlamVjdCBnbHlwaHMgdGhhdCBkb24ndCBwcm9kdWNlIGFueSByZW5kZXJpbmcgKi8KKyAgICAgICAgaWYgKCBlcnJvciB8fCBvdXRsaW5lLm5fcG9pbnRzIDw9IDIgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgVSslMDRsWCBjb250YWlucyBubyAodXNhYmxlKSBvdXRsaW5lc1xuIiwgY2ggKSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBub3cgY29tcHV0ZSBtaW4gb3IgbWF4IHBvaW50IGluZGljZXMgYW5kIGNvb3JkaW5hdGVzICovCisgICAgICAgIHBvaW50cyAgICAgICAgICAgICA9IG91dGxpbmUucG9pbnRzOworICAgICAgICBiZXN0X3BvaW50ICAgICAgICAgPSAtMTsKKyAgICAgICAgYmVzdF95ICAgICAgICAgICAgID0gMDsgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gMDsgIC8qIGRpdHRvICovCisgICAgICAgIGJlc3RfY29udG91cl9sYXN0ICA9IDA7ICAvKiBkaXR0byAqLworCisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgIG5uOworICAgICAgICAgIEZUX0ludCAgZmlyc3QgPSAwOworICAgICAgICAgIEZUX0ludCAgbGFzdCAgPSAtMTsKKworCisgICAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG91dGxpbmUubl9jb250b3VyczsgZmlyc3QgPSBsYXN0ICsgMSwgbm4rKyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBvbGRfYmVzdF9wb2ludCA9IGJlc3RfcG9pbnQ7CisgICAgICAgICAgICBGVF9JbnQgIHBwOworCisKKyAgICAgICAgICAgIGxhc3QgPSBvdXRsaW5lLmNvbnRvdXJzW25uXTsKKworICAgICAgICAgICAgLyogQXZvaWQgc2luZ2xlLXBvaW50IGNvbnRvdXJzIHNpbmNlIHRoZXkgYXJlIG5ldmVyIHJhc3Rlcml6ZWQuICovCisgICAgICAgICAgICAvKiBJbiBzb21lIGZvbnRzLCB0aGV5IGNvcnJlc3BvbmQgdG8gbWFyayBhdHRhY2htZW50IHBvaW50cyAgICAgKi8KKyAgICAgICAgICAgIC8qIHRoYXQgYXJlIHdheSBvdXRzaWRlIG9mIHRoZSBnbHlwaCdzIHJlYWwgb3V0bGluZS4gICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBsYXN0IDw9IGZpcnN0ICkKKyAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfVE9QX0JMVUUoIGJzICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKCBwcCA9IGZpcnN0OyBwcCA8PSBsYXN0OyBwcCsrICkKKyAgICAgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgPCAwIHx8IHBvaW50c1twcF0ueSA+IGJlc3RfeSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgYmVzdF9wb2ludCA9IHBwOworICAgICAgICAgICAgICAgICAgYmVzdF95ICAgICA9IHBvaW50c1twcF0ueTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoIHBwID0gZmlyc3Q7IHBwIDw9IGxhc3Q7IHBwKysgKQorICAgICAgICAgICAgICAgIGlmICggYmVzdF9wb2ludCA8IDAgfHwgcG9pbnRzW3BwXS55IDwgYmVzdF95ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gcHA7CisgICAgICAgICAgICAgICAgICBiZXN0X3kgICAgID0gcG9pbnRzW3BwXS55OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50ICE9IG9sZF9iZXN0X3BvaW50ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYmVzdF9jb250b3VyX2ZpcnN0ID0gZmlyc3Q7CisgICAgICAgICAgICAgIGJlc3RfY29udG91cl9sYXN0ICA9IGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGNoZWNrIHdoZXRoZXIgdGhlIHBvaW50IGJlbG9uZ3MgdG8gYSBzdHJhaWdodCBvciByb3VuZCAgICovCisgICAgICAgIC8qIHNlZ21lbnQ7IHdlIGZpcnN0IG5lZWQgdG8gZmluZCBpbiB3aGljaCBjb250b3VyIHRoZSBleHRyZW11bSAqLworICAgICAgICAvKiBsaWVzLCB0aGVuIGluc3BlY3QgaXRzIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50cyAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBiZXN0X3BvaW50ID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfUG9zICBiZXN0X3ggPSBwb2ludHNbYmVzdF9wb2ludF0ueDsKKyAgICAgICAgICBGVF9JbnQgIHByZXYsIG5leHQ7CisgICAgICAgICAgRlRfSW50ICBiZXN0X3NlZ21lbnRfZmlyc3QsIGJlc3Rfc2VnbWVudF9sYXN0OworICAgICAgICAgIEZUX0ludCAgYmVzdF9vbl9wb2ludF9maXJzdCwgYmVzdF9vbl9wb2ludF9sYXN0OworICAgICAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICAgICAgYmVzdF9zZWdtZW50X2ZpcnN0ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCAgPSBiZXN0X3BvaW50OworCisgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tiZXN0X3BvaW50XSApID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgeworICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9maXJzdCA9IGJlc3RfcG9pbnQ7CisgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgID0gYmVzdF9wb2ludDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfZmlyc3QgPSAtMTsKKyAgICAgICAgICAgIGJlc3Rfb25fcG9pbnRfbGFzdCAgPSAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBsb29rIGZvciB0aGUgcHJldmlvdXMgYW5kIG5leHQgcG9pbnRzIG9uIHRoZSBjb250b3VyICAqLworICAgICAgICAgIC8qIHRoYXQgYXJlIG5vdCBvbiB0aGUgc2FtZSBZIGNvb3JkaW5hdGUsIHRoZW4gdGhyZXNob2xkICovCisgICAgICAgICAgLyogdGhlIGBjbG9zZW5lc3MnLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBwcmV2ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICBuZXh0ID0gcHJldjsKKworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwcmV2ID4gYmVzdF9jb250b3VyX2ZpcnN0ICkKKyAgICAgICAgICAgICAgcHJldi0tOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmV2ID0gYmVzdF9jb250b3VyX2xhc3Q7CisKKyAgICAgICAgICAgIGRpc3QgPSBGVF9BQlMoIHBvaW50c1twcmV2XS55IC0gYmVzdF95ICk7CisgICAgICAgICAgICAvKiBhY2NlcHQgYSBzbWFsbCBkaXN0YW5jZSBvciBhIHNtYWxsIGFuZ2xlIChib3RoIHZhbHVlcyBhcmUgKi8KKyAgICAgICAgICAgIC8qIGhldXJpc3RpYzsgdmFsdWUgMjAgY29ycmVzcG9uZHMgdG8gYXBwcm94LiAyLjkgZGVncmVlcykgICAqLworICAgICAgICAgICAgaWYgKCBkaXN0ID4gNSApCisgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBwb2ludHNbcHJldl0ueCAtIGJlc3RfeCApIDw9IDIwICogZGlzdCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9maXJzdCA9IHByZXY7CisKKyAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbcHJldl0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2ZpcnN0ID0gcHJldjsKKyAgICAgICAgICAgICAgaWYgKCBiZXN0X29uX3BvaW50X2xhc3QgPCAwICkKKyAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgPSBwcmV2OworICAgICAgICAgICAgfQorCisgICAgICAgICAgfSB3aGlsZSAoIHByZXYgIT0gYmVzdF9wb2ludCApOworCisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIG5leHQgPCBiZXN0X2NvbnRvdXJfbGFzdCApCisgICAgICAgICAgICAgIG5leHQrKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbmV4dCA9IGJlc3RfY29udG91cl9maXJzdDsKKworICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW25leHRdLnkgLSBiZXN0X3kgKTsKKyAgICAgICAgICAgIGlmICggZGlzdCA+IDUgKQorICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBiZXN0X3ggKSA8PSAyMCAqIGRpc3QgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCA9IG5leHQ7CisKKyAgICAgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLnRhZ3NbbmV4dF0gKSA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgPSBuZXh0OworICAgICAgICAgICAgICBpZiAoIGJlc3Rfb25fcG9pbnRfZmlyc3QgPCAwICkKKyAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2ZpcnN0ID0gbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIH0gd2hpbGUgKCBuZXh0ICE9IGJlc3RfcG9pbnQgKTsKKworICAgICAgICAgIGlmICggQUZfTEFUSU5fSVNfTE9OR19CTFVFKCBicyApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwgY29uc3RyYWludCB0byAgKi8KKyAgICAgICAgICAgIC8qIGdldCB0aGUgYmx1ZSB6b25lIGRpc3RhbmNlOiBGaW5kIGEgc2VnbWVudCBvZiB0aGUgdG9wbW9zdCAqLworICAgICAgICAgICAgLyogKG9yIGJvdHRvbW1vc3QpIGNvbnRvdXIgdGhhdCBpcyBsb25nZXIgdGhhbiBhIGhldXJpc3RpYyAgICovCisgICAgICAgICAgICAvKiB0aHJlc2hvbGQuICBUaGlzIGVuc3VyZXMgdGhhdCBzbWFsbCBidW1wcyBpbiB0aGUgb3V0bGluZSAgKi8KKyAgICAgICAgICAgIC8qIGFyZSBpZ25vcmVkIChmb3IgZXhhbXBsZSwgdGhlIGB2ZXJ0aWNhbCBzZXJpZnMnIGZvdW5kIGluICAqLworICAgICAgICAgICAgLyogbWFueSBIZWJyZXcgZ2x5cGggZGVzaWducykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIC8qIElmIHRoaXMgc2VnbWVudCBpcyBsb25nIGVub3VnaCwgd2UgYXJlIGRvbmUuICBPdGhlcndpc2UsICAqLworICAgICAgICAgICAgLyogc2VhcmNoIHRoZSBzZWdtZW50IG5leHQgdG8gdGhlIGV4dHJlbXVtIHRoYXQgaXMgbG9uZyAgICAgICovCisgICAgICAgICAgICAvKiBlbm91Z2gsIGhhcyB0aGUgc2FtZSBkaXJlY3Rpb24sIGFuZCBhIG5vdCB0b28gbGFyZ2UgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20gdGhlIGV4dHJlbXVtLiAgTm90ZSB0aGF0IHRoZSAgICAgICAqLworICAgICAgICAgICAgLyogYWxnb3JpdGhtIGRvZXNuJ3QgY2hlY2sgd2hldGhlciB0aGUgZm91bmQgc2VnbWVudCBpcyAgICAgICovCisgICAgICAgICAgICAvKiBhY3R1YWxseSB0aGUgb25lICh2ZXJ0aWNhbGx5KSBuZWFyZXN0IHRvIHRoZSBleHRyZW11bS4gICAgKi8KKworICAgICAgICAgICAgLyogaGV1cmlzdGljIHRocmVzaG9sZCB2YWx1ZSAqLworICAgICAgICAgICAgRlRfUG9zICBsZW5ndGhfdGhyZXNob2xkID0gbWV0cmljcy0+dW5pdHNfcGVyX2VtIC8gMjU7CisKKworICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW2Jlc3Rfc2VnbWVudF9sYXN0XS54IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2Jlc3Rfc2VnbWVudF9maXJzdF0ueCApOworCisgICAgICAgICAgICBpZiAoIGRpc3QgPCBsZW5ndGhfdGhyZXNob2xkICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICBiZXN0X3NlZ21lbnRfbGFzdCAtIGJlc3Rfc2VnbWVudF9maXJzdCArIDIgPD0KKyAgICAgICAgICAgICAgICAgICBiZXN0X2NvbnRvdXJfbGFzdCAtIGJlc3RfY29udG91cl9maXJzdCAgICAgICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogaGV1cmlzdGljIHRocmVzaG9sZCB2YWx1ZSAqLworICAgICAgICAgICAgICBGVF9Qb3MgIGhlaWdodF90aHJlc2hvbGQgPSBtZXRyaWNzLT51bml0c19wZXJfZW0gLyA0OworCisgICAgICAgICAgICAgIEZUX0ludCAgIGZpcnN0OworICAgICAgICAgICAgICBGVF9JbnQgICBsYXN0OworICAgICAgICAgICAgICBGVF9Cb29sICBoaXQ7CisKKyAgICAgICAgICAgICAgLyogd2UgaW50ZW50aW9uYWxseSBkZWNsYXJlIHRoZXNlIHR3byB2YXJpYWJsZXMgICAgICAgICovCisgICAgICAgICAgICAgIC8qIG91dHNpZGUgb2YgdGhlIGxvb3Agc2luY2UgdmFyaW91cyBjb21waWxlcnMgZW1pdCAgICAqLworICAgICAgICAgICAgICAvKiBpbmNvcnJlY3Qgd2FybmluZyBtZXNzYWdlcyBvdGhlcndpc2UsIHRhbGtpbmcgYWJvdXQgKi8KKyAgICAgICAgICAgICAgLyogYHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzJyAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIEZUX0ludCAgcF9maXJzdCA9IDA7ICAgICAgICAgICAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworICAgICAgICAgICAgICBGVF9JbnQgIHBfbGFzdCAgPSAwOworCisgICAgICAgICAgICAgIEZUX0Jvb2wgIGxlZnQycmlnaHQ7CisKKworICAgICAgICAgICAgICAvKiBjb21wdXRlIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgICBwcmV2ID0gYmVzdF9wb2ludDsKKworICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBwcmV2ID4gYmVzdF9jb250b3VyX2ZpcnN0ICkKKyAgICAgICAgICAgICAgICAgIHByZXYtLTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmV2ID0gYmVzdF9jb250b3VyX2xhc3Q7CisKKyAgICAgICAgICAgICAgICBpZiAoIHBvaW50c1twcmV2XS54ICE9IGJlc3RfeCApCisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICB9IHdoaWxlICggcHJldiAhPSBiZXN0X3BvaW50ICk7CisKKyAgICAgICAgICAgICAgLyogc2tpcCBnbHlwaCBmb3IgdGhlIGRlZ2VuZXJhdGUgY2FzZSAqLworICAgICAgICAgICAgICBpZiAoIHByZXYgPT0gYmVzdF9wb2ludCApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgbGVmdDJyaWdodCA9IEZUX0JPT0woIHBvaW50c1twcmV2XS54IDwgcG9pbnRzW2Jlc3RfcG9pbnRdLnggKTsKKworICAgICAgICAgICAgICBmaXJzdCA9IGJlc3Rfc2VnbWVudF9sYXN0OworICAgICAgICAgICAgICBsYXN0ICA9IGZpcnN0OworICAgICAgICAgICAgICBoaXQgICA9IDA7CisKKyAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUX0Jvb2wgIGwycjsKKyAgICAgICAgICAgICAgICBGVF9Qb3MgICBkOworCisKKyAgICAgICAgICAgICAgICBpZiAoICFoaXQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIG5vIGhpdDsgYWRqdXN0IGZpcnN0IHBvaW50ICovCisgICAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3Q7CisKKyAgICAgICAgICAgICAgICAgIC8qIGFsc28gYWRqdXN0IGZpcnN0IGFuZCBsYXN0IG9uIHBvaW50ICovCisgICAgICAgICAgICAgICAgICBpZiAoIEZUX0NVUlZFX1RBRyggb3V0bGluZS50YWdzW2ZpcnN0XSApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcF9maXJzdCA9IGZpcnN0OworICAgICAgICAgICAgICAgICAgICBwX2xhc3QgID0gZmlyc3Q7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgcF9sYXN0ICA9IC0xOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBoaXQgPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggbGFzdCA8IGJlc3RfY29udG91cl9sYXN0ICkKKyAgICAgICAgICAgICAgICAgIGxhc3QrKzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBsYXN0ID0gYmVzdF9jb250b3VyX2ZpcnN0OworCisgICAgICAgICAgICAgICAgaWYgKCBGVF9BQlMoIGJlc3RfeSAtIHBvaW50c1tmaXJzdF0ueSApID4gaGVpZ2h0X3RocmVzaG9sZCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgZGlzdGFuY2UgdG9vIGxhcmdlICovCisgICAgICAgICAgICAgICAgICBoaXQgPSAwOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogc2FtZSB0ZXN0IGFzIGFib3ZlICovCisgICAgICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW2xhc3RdLnkgLSBwb2ludHNbZmlyc3RdLnkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRpc3QgPiA1ICkKKyAgICAgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBwb2ludHNbbGFzdF0ueCAtIHBvaW50c1tmaXJzdF0ueCApIDw9CisgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKiBkaXN0ICkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGl0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIEZUX0NVUlZFX1RBRyggb3V0bGluZS50YWdzW2xhc3RdICkgPT0gRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBwX2xhc3QgPSBsYXN0OworICAgICAgICAgICAgICAgICAgaWYgKCBwX2ZpcnN0IDwgMCApCisgICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSBsYXN0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGwyciA9IEZUX0JPT0woIHBvaW50c1tmaXJzdF0ueCA8IHBvaW50c1tsYXN0XS54ICk7CisgICAgICAgICAgICAgICAgZCAgID0gRlRfQUJTKCBwb2ludHNbbGFzdF0ueCAtIHBvaW50c1tmaXJzdF0ueCApOworCisgICAgICAgICAgICAgICAgaWYgKCBsMnIgPT0gbGVmdDJyaWdodCAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgIGQgPj0gbGVuZ3RoX3RocmVzaG9sZCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogYWxsIGNvbnN0cmFpbnRzIGFyZSBtZXQ7IHVwZGF0ZSBzZWdtZW50IGFmdGVyIGZpbmRpbmcgKi8KKyAgICAgICAgICAgICAgICAgIC8qIGl0cyBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgPCBiZXN0X2NvbnRvdXJfbGFzdCApCisgICAgICAgICAgICAgICAgICAgICAgbGFzdCsrOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGJlc3RfY29udG91cl9maXJzdDsKKworICAgICAgICAgICAgICAgICAgICBkID0gRlRfQUJTKCBwb2ludHNbbGFzdF0ueSAtIHBvaW50c1tmaXJzdF0ueSApOworICAgICAgICAgICAgICAgICAgICBpZiAoIGQgPiA1ICkKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBwb2ludHNbZmlyc3RdLnggKSA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAqIGRpc3QgKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGFzdCA+IGJlc3RfY29udG91cl9maXJzdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGJlc3RfY29udG91cl9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBfbGFzdCA9IGxhc3Q7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBGVF9DVVJWRV9UQUcoIG91dGxpbmUudGFnc1tsYXN0XSApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcF9sYXN0ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBfZmlyc3QgPCAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBfZmlyc3QgPSBsYXN0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBsYXN0ICE9IGJlc3Rfc2VnbWVudF9maXJzdCApOworCisgICAgICAgICAgICAgICAgICBiZXN0X3kgPSBwb2ludHNbZmlyc3RdLnk7CisKKyAgICAgICAgICAgICAgICAgIGJlc3Rfc2VnbWVudF9maXJzdCA9IGZpcnN0OworICAgICAgICAgICAgICAgICAgYmVzdF9zZWdtZW50X2xhc3QgID0gbGFzdDsKKworICAgICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9maXJzdCA9IHBfZmlyc3Q7CisgICAgICAgICAgICAgICAgICBiZXN0X29uX3BvaW50X2xhc3QgID0gcF9sYXN0OworCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgfSB3aGlsZSAoIGxhc3QgIT0gYmVzdF9zZWdtZW50X2ZpcnN0ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZm9yIGNvbXB1dGluZyBibHVlIHpvbmVzLCB3ZSBhZGQgdGhlIHkgb2Zmc2V0IGFzIHJldHVybmVkICovCisgICAgICAgICAgLyogYnkgdGhlIGN1cnJlbnRseSB1c2VkIE9wZW5UeXBlIGZlYXR1cmUgLS0gZm9yIGV4YW1wbGUsICAgICovCisgICAgICAgICAgLyogc3VwZXJzY3JpcHQgZ2x5cGhzIG1pZ2h0IGJlIGlkZW50aWNhbCB0byBzdWJzY3JpcHQgZ2x5cGhzICovCisgICAgICAgICAgLyogd2l0aCBhIHZlcnRpY2FsIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgYmVzdF95ICs9IHlfb2Zmc2V0OworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgVSslMDRsWDogYmVzdF95ID0gJTVsZCIsIGNoLCBiZXN0X3kgKSk7CisKKyAgICAgICAgICAvKiBub3cgc2V0IHRoZSBgcm91bmQnIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBzZWdtZW50J3Mga2luZDogKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAtIGlmIHRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0ICAgKi8KKyAgICAgICAgICAvKiAgIGBvbicgcG9pbnQgaXMgbGFyZ2VyIHRoYW4gdXBlbS84ICh2YWx1ZSA4IGlzIGhldXJpc3RpYykgKi8KKyAgICAgICAgICAvKiAgIHdlIGhhdmUgYSBmbGF0IHNlZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAtIGlmIGVpdGhlciB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIHNlZ21lbnQgaXMgKi8KKyAgICAgICAgICAvKiAgIGFuIGBvZmYnIHBvaW50LCB0aGUgc2VnbWVudCBpcyByb3VuZCwgb3RoZXJ3aXNlIGl0IGlzICAgKi8KKyAgICAgICAgICAvKiAgIGZsYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGJlc3Rfb25fcG9pbnRfZmlyc3QgPj0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgYmVzdF9vbl9wb2ludF9sYXN0ID49IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAoRlRfVUludCkoIEZUX0FCUyggcG9pbnRzW2Jlc3Rfb25fcG9pbnRfbGFzdF0ueCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2Jlc3Rfb25fcG9pbnRfZmlyc3RdLnggKSApID4KKyAgICAgICAgICAgICAgICAgbWV0cmljcy0+dW5pdHNfcGVyX2VtIC8gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByb3VuZCA9IDA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcm91bmQgPSBGVF9CT09MKAorICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBRyggb3V0bGluZS50YWdzW2Jlc3Rfc2VnbWVudF9maXJzdF0gKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBRyggb3V0bGluZS50YWdzW2Jlc3Rfc2VnbWVudF9sYXN0XSAgKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgaWYgKCByb3VuZCAmJiBBRl9MQVRJTl9JU19ORVVUUkFMX0JMVUUoIGJzICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG9ubHkgdXNlIGZsYXQgc2VnbWVudHMgZm9yIGEgbmV1dHJhbCBibHVlIHpvbmUgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgKHJvdW5kLCBza2lwcGVkKVxuIiApKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgKCVzKVxuIiwgcm91bmQgPyAicm91bmQiIDogImZsYXQiICkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCByb3VuZCApCisgICAgICAgICAgcm91bmRzW251bV9yb3VuZHMrK10gPSBiZXN0X3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmbGF0c1tudW1fZmxhdHMrK10gICA9IGJlc3RfeTsKKyAgICAgIH0KKworICAgICAgaWYgKCBudW1fZmxhdHMgPT0gMCAmJiBudW1fcm91bmRzID09IDAgKQorICAgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAgd2UgY291bGRuJ3QgZmluZCBhIHNpbmdsZSBnbHlwaCB0byBjb21wdXRlIHRoaXMgYmx1ZSB6b25lLAorICAgICAgICAgKiAgd2Ugd2lsbCBzaW1wbHkgaWdub3JlIGl0IHRoZW4KKyAgICAgICAgICovCisgICAgICAgIEZUX1RSQUNFNSgoICIgIGVtcHR5XG4iICkpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogd2UgaGF2ZSBjb21wdXRlZCB0aGUgY29udGVudHMgb2YgdGhlIGByb3VuZHMnIGFuZCBgZmxhdHMnIHRhYmxlcywgKi8KKyAgICAgIC8qIG5vdyBkZXRlcm1pbmUgdGhlIHJlZmVyZW5jZSBhbmQgb3ZlcnNob290IHBvc2l0aW9uIG9mIHRoZSBibHVlIC0tICovCisgICAgICAvKiB3ZSBzaW1wbHkgdGFrZSB0aGUgbWVkaWFuIHZhbHVlIGFmdGVyIGEgc2ltcGxlIHNvcnQgICAgICAgICAgICAgICAqLworICAgICAgYWZfc29ydF9wb3MoIG51bV9yb3VuZHMsIHJvdW5kcyApOworICAgICAgYWZfc29ydF9wb3MoIG51bV9mbGF0cywgIGZsYXRzICk7CisKKyAgICAgIGJsdWUgICAgICAgPSAmYXhpcy0+Ymx1ZXNbYXhpcy0+Ymx1ZV9jb3VudF07CisgICAgICBibHVlX3JlZiAgID0gJmJsdWUtPnJlZi5vcmc7CisgICAgICBibHVlX3Nob290ID0gJmJsdWUtPnNob290Lm9yZzsKKworICAgICAgYXhpcy0+Ymx1ZV9jb3VudCsrOworCisgICAgICBpZiAoIG51bV9mbGF0cyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgKmJsdWVfcmVmICAgPQorICAgICAgICAqYmx1ZV9zaG9vdCA9IHJvdW5kc1tudW1fcm91bmRzIC8gMl07CisgICAgICB9CisgICAgICBlbHNlIGlmICggbnVtX3JvdW5kcyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgKmJsdWVfcmVmICAgPQorICAgICAgICAqYmx1ZV9zaG9vdCA9IGZsYXRzW251bV9mbGF0cyAvIDJdOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAqYmx1ZV9yZWYgICA9IGZsYXRzIFtudW1fZmxhdHMgIC8gMl07CisgICAgICAgICpibHVlX3Nob290ID0gcm91bmRzW251bV9yb3VuZHMgLyAyXTsKKyAgICAgIH0KKworICAgICAgLyogdGhlcmUgYXJlIHNvbWV0aW1lcyBwcm9ibGVtczogaWYgdGhlIG92ZXJzaG9vdCBwb3NpdGlvbiBvZiB0b3AgICAgICovCisgICAgICAvKiB6b25lcyBpcyB1bmRlciBpdHMgcmVmZXJlbmNlIHBvc2l0aW9uLCBvciB0aGUgb3Bwb3NpdGUgZm9yIGJvdHRvbSAgKi8KKyAgICAgIC8qIHpvbmVzLiAgV2UgbXVzdCB0aHVzIGNoZWNrIGV2ZXJ5dGhpbmcgdGhlcmUgYW5kIGNvcnJlY3QgdGhlIGVycm9ycyAqLworICAgICAgaWYgKCAqYmx1ZV9zaG9vdCAhPSAqYmx1ZV9yZWYgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgICByZWYgICAgICA9ICpibHVlX3JlZjsKKyAgICAgICAgRlRfUG9zICAgc2hvb3QgICAgPSAqYmx1ZV9zaG9vdDsKKyAgICAgICAgRlRfQm9vbCAgb3Zlcl9yZWYgPSBGVF9CT09MKCBzaG9vdCA+IHJlZiApOworCisKKyAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19UT1BfQkxVRSggYnMgKSBeIG92ZXJfcmVmICkKKyAgICAgICAgeworICAgICAgICAgICpibHVlX3JlZiAgID0KKyAgICAgICAgICAqYmx1ZV9zaG9vdCA9ICggc2hvb3QgKyByZWYgKSAvIDI7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBbb3ZlcnNob290IHNtYWxsZXIgdGhhbiByZWZlcmVuY2UsIgorICAgICAgICAgICAgICAgICAgICAgICIgdGFraW5nIG1lYW4gdmFsdWVdXG4iICkpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGJsdWUtPmZsYWdzID0gMDsKKyAgICAgIGlmICggQUZfTEFUSU5fSVNfVE9QX0JMVUUoIGJzICkgKQorICAgICAgICBibHVlLT5mbGFncyB8PSBBRl9MQVRJTl9CTFVFX1RPUDsKKyAgICAgIGlmICggQUZfTEFUSU5fSVNfTkVVVFJBTF9CTFVFKCBicyApICkKKyAgICAgICAgYmx1ZS0+ZmxhZ3MgfD0gQUZfTEFUSU5fQkxVRV9ORVVUUkFMOworCisgICAgICAvKgorICAgICAgICogVGhlIGZvbGxvd2luZyBmbGFnIGlzIHVzZWQgbGF0ZXIgdG8gYWRqdXN0IHRoZSB5IGFuZCB4IHNjYWxlcworICAgICAgICogaW4gb3JkZXIgdG8gb3B0aW1pemUgdGhlIHBpeGVsIGdyaWQgYWxpZ25tZW50IG9mIHRoZSB0b3Agb2Ygc21hbGwKKyAgICAgICAqIGxldHRlcnMuCisgICAgICAgKi8KKyAgICAgIGlmICggQUZfTEFUSU5fSVNfWF9IRUlHSFRfQkxVRSggYnMgKSApCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0xBVElOX0JMVUVfQURKVVNUTUVOVDsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgICAtPiByZWZlcmVuY2UgPSAlbGRcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgICAgb3ZlcnNob290ID0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgKmJsdWVfcmVmLCAqYmx1ZV9zaG9vdCApKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworCisgICAgcmV0dXJuOworICB9CisKKworICAvKiBDaGVjayB3aGV0aGVyIGFsbCBBU0NJSSBkaWdpdHMgaGF2ZSB0aGUgc2FtZSBhZHZhbmNlIHdpZHRoLiAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKCBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgIGZhY2UgKQorICB7CisgICAgRlRfVUludCAgIGk7CisgICAgRlRfQm9vbCAgIHN0YXJ0ZWQgPSAwLCBzYW1lX3dpZHRoID0gMTsKKyAgICBGVF9GaXhlZCAgYWR2YW5jZSwgb2xkX2FkdmFuY2UgPSAwOworCisKKyAgICAvKiBkaWdpdCBgMCcgaXMgMHgzMCBpbiBhbGwgc3VwcG9ydGVkIGNoYXJtYXBzICovCisgICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgZ2x5cGhfaW5kZXg7CisgICAgICBGVF9Mb25nICAgeV9vZmZzZXQ7CisKKworICAgICAgYWZfZ2V0X2NoYXJfaW5kZXgoICZtZXRyaWNzLT5yb290LCBpLCAmZ2x5cGhfaW5kZXgsICZ5X29mZnNldCApOworICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggRlRfR2V0X0FkdmFuY2UoIGZhY2UsIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fSElOVElORyAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZSApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggc3RhcnRlZCApCisgICAgICB7CisgICAgICAgIGlmICggYWR2YW5jZSAhPSBvbGRfYWR2YW5jZSApCisgICAgICAgIHsKKyAgICAgICAgICBzYW1lX3dpZHRoID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBvbGRfYWR2YW5jZSA9IGFkdmFuY2U7CisgICAgICAgIHN0YXJ0ZWQgICAgID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBtZXRyaWNzLT5yb290LmRpZ2l0c19oYXZlX3NhbWVfd2lkdGggPSBzYW1lX3dpZHRoOworICB9CisKKworICAvKiBJbml0aWFsaXplIGdsb2JhbCBtZXRyaWNzLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sYXRpbl9tZXRyaWNzX2luaXQoIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgIGZhY2UgKQorICB7CisgICAgRlRfQ2hhck1hcCAgb2xkbWFwID0gZmFjZS0+Y2hhcm1hcDsKKworCisgICAgbWV0cmljcy0+dW5pdHNfcGVyX2VtID0gZmFjZS0+dW5pdHNfcGVyX0VNOworCisgICAgaWYgKCAhRlRfU2VsZWN0X0NoYXJtYXAoIGZhY2UsIEZUX0VOQ09ESU5HX1VOSUNPREUgKSApCisgICAgeworICAgICAgYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyggbWV0cmljcywgZmFjZSApOworICAgICAgYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKCBtZXRyaWNzLCBmYWNlICk7CisgICAgICBhZl9sYXRpbl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyggbWV0cmljcywgZmFjZSApOworICAgIH0KKworICAgIEZUX1NldF9DaGFybWFwKCBmYWNlLCBvbGRtYXAgKTsKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBBZGp1c3Qgc2NhbGluZyB2YWx1ZSwgdGhlbiBzY2FsZSBhbmQgc2hpZnQgd2lkdGhzICAgKi8KKyAgLyogYW5kIGJsdWUgem9uZXMgKGlmIGFwcGxpY2FibGUpIGZvciBnaXZlbiBkaW1lbnNpb24uICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW0oIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1NjYWxlciAgICAgICAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgICBkaW0gKQorICB7CisgICAgRlRfRml4ZWQgICAgICBzY2FsZTsKKyAgICBGVF9Qb3MgICAgICAgIGRlbHRhOworICAgIEFGX0xhdGluQXhpcyAgYXhpczsKKyAgICBGVF9VSW50ICAgICAgIG5uOworCisKKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgc2NhbGUgPSBzY2FsZXItPnhfc2NhbGU7CisgICAgICBkZWx0YSA9IHNjYWxlci0+eF9kZWx0YTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNjYWxlID0gc2NhbGVyLT55X3NjYWxlOworICAgICAgZGVsdGEgPSBzY2FsZXItPnlfZGVsdGE7CisgICAgfQorCisgICAgYXhpcyA9ICZtZXRyaWNzLT5heGlzW2RpbV07CisKKyAgICBpZiAoIGF4aXMtPm9yZ19zY2FsZSA9PSBzY2FsZSAmJiBheGlzLT5vcmdfZGVsdGEgPT0gZGVsdGEgKQorICAgICAgcmV0dXJuOworCisgICAgYXhpcy0+b3JnX3NjYWxlID0gc2NhbGU7CisgICAgYXhpcy0+b3JnX2RlbHRhID0gZGVsdGE7CisKKyAgICAvKgorICAgICAqIGNvcnJlY3QgWCBhbmQgWSBzY2FsZSB0byBvcHRpbWl6ZSB0aGUgYWxpZ25tZW50IG9mIHRoZSB0b3Agb2Ygc21hbGwKKyAgICAgKiBsZXR0ZXJzIHRvIHRoZSBwaXhlbCBncmlkCisgICAgICovCisgICAgeworICAgICAgQUZfTGF0aW5BeGlzICBBeGlzID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgICAgQUZfTGF0aW5CbHVlICBibHVlID0gTlVMTDsKKworCisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgQXhpcy0+Ymx1ZV9jb3VudDsgbm4rKyApCisgICAgICB7CisgICAgICAgIGlmICggQXhpcy0+Ymx1ZXNbbm5dLmZsYWdzICYgQUZfTEFUSU5fQkxVRV9BREpVU1RNRU5UICkKKyAgICAgICAgeworICAgICAgICAgIGJsdWUgPSAmQXhpcy0+Ymx1ZXNbbm5dOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggYmx1ZSApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgIHNjYWxlZDsKKyAgICAgICAgRlRfUG9zICAgdGhyZXNob2xkOworICAgICAgICBGVF9Qb3MgICBmaXR0ZWQ7CisgICAgICAgIEZUX1VJbnQgIGxpbWl0OworICAgICAgICBGVF9VSW50ICBwcGVtOworCisKKyAgICAgICAgc2NhbGVkICAgID0gRlRfTXVsRml4KCBibHVlLT5zaG9vdC5vcmcsIHNjYWxlci0+eV9zY2FsZSApOworICAgICAgICBwcGVtICAgICAgPSBtZXRyaWNzLT5yb290LnNjYWxlci5mYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsKKyAgICAgICAgbGltaXQgICAgID0gbWV0cmljcy0+cm9vdC5nbG9iYWxzLT5pbmNyZWFzZV94X2hlaWdodDsKKyAgICAgICAgdGhyZXNob2xkID0gNDA7CisKKyAgICAgICAgLyogaWYgdGhlIGBpbmNyZWFzZS14LWhlaWdodCcgcHJvcGVydHkgaXMgYWN0aXZlLCAqLworICAgICAgICAvKiB3ZSByb3VuZCB1cCBtdWNoIG1vcmUgb2Z0ZW4gICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIHBwZW0gPD0gbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcGVtID49IEFGX1BST1BfSU5DUkVBU0VfWF9IRUlHSFRfTUlOICkKKyAgICAgICAgICB0aHJlc2hvbGQgPSA1MjsKKworICAgICAgICBmaXR0ZWQgPSAoIHNjYWxlZCArIHRocmVzaG9sZCApICYgfjYzOworCisgICAgICAgIGlmICggc2NhbGVkICE9IGZpdHRlZCApCisgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZml0dGVkIDwgc2NhbGVkICkKKyAgICAgICAgICAgICAgc2NhbGUgLT0gc2NhbGUgLyA1MDsgIC8qIHNjYWxlICo9IDAuOTggKi8KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNjYWxlID0gRlRfTXVsRGl2KCBzY2FsZSwgZml0dGVkLCBzY2FsZWQgKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U1KCgKKyAgICAgICAgICAgICAgImFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltOiIKKyAgICAgICAgICAgICAgIiB4IGhlaWdodCBhbGlnbm1lbnQgKHN0eWxlIGAlcycpOlxuIgorICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAiIHZlcnRpY2FsIHNjYWxpbmcgY2hhbmdlZCBmcm9tICUuNGYgdG8gJS40ZiAoYnkgJWQlJSlcbiIKKyAgICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzcy0+c3R5bGVdLAorICAgICAgICAgICAgICBheGlzLT5vcmdfc2NhbGUgLyA2NTUzNi4wLAorICAgICAgICAgICAgICBzY2FsZSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICggZml0dGVkIC0gc2NhbGVkICkgKiAxMDAgLyBzY2FsZWQgKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgYXhpcy0+c2NhbGUgPSBzY2FsZTsKKyAgICBheGlzLT5kZWx0YSA9IGRlbHRhOworCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKQorICAgIHsKKyAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnhfc2NhbGUgPSBzY2FsZTsKKyAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnhfZGVsdGEgPSBkZWx0YTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnlfc2NhbGUgPSBzY2FsZTsKKyAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnlfZGVsdGEgPSBkZWx0YTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiJXMgd2lkdGhzIChzdHlsZSBgJXMnKVxuIiwKKyAgICAgICAgICAgICAgICBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAiaG9yaXpvbnRhbCIgOiAidmVydGljYWwiLAorICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKworICAgIC8qIHNjYWxlIHRoZSB3aWR0aHMgKi8KKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgYXhpcy0+d2lkdGhfY291bnQ7IG5uKysgKQorICAgIHsKKyAgICAgIEFGX1dpZHRoICB3aWR0aCA9IGF4aXMtPndpZHRocyArIG5uOworCisKKyAgICAgIHdpZHRoLT5jdXIgPSBGVF9NdWxGaXgoIHdpZHRoLT5vcmcsIHNjYWxlICk7CisgICAgICB3aWR0aC0+Zml0ID0gd2lkdGgtPmN1cjsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgJWQgc2NhbGVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICAgICAgICB3aWR0aC0+b3JnLAorICAgICAgICAgICAgICAgICAgd2lkdGgtPmN1ciAvIDY0LjAgKSk7CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIC8qIGFuIGV4dHJhLWxpZ2h0IGF4aXMgY29ycmVzcG9uZHMgdG8gYSBzdGFuZGFyZCB3aWR0aCB0aGF0IGlzICovCisgICAgLyogc21hbGxlciB0aGFuIDUvOCBwaXhlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBheGlzLT5leHRyYV9saWdodCA9CisgICAgICAoRlRfQm9vbCkoIEZUX011bEZpeCggYXhpcy0+c3RhbmRhcmRfd2lkdGgsIHNjYWxlICkgPCAzMiArIDggKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCBheGlzLT5leHRyYV9saWdodCApCisgICAgICBGVF9UUkFDRTUoKCAiYCVzJyBzdHlsZSBpcyBleHRyYSBsaWdodCAoYXQgY3VycmVudCByZXNvbHV0aW9uKVxuIgorICAgICAgICAgICAgICAgICAgIlxuIiwKKyAgICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKyNlbmRpZgorCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFNSgoICJibHVlIHpvbmVzIChzdHlsZSBgJXMnKVxuIiwKKyAgICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKworICAgICAgLyogc2NhbGUgdGhlIGJsdWUgem9uZXMgKi8KKyAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBheGlzLT5ibHVlX2NvdW50OyBubisrICkKKyAgICAgIHsKKyAgICAgICAgQUZfTGF0aW5CbHVlICBibHVlID0gJmF4aXMtPmJsdWVzW25uXTsKKyAgICAgICAgRlRfUG9zICAgICAgICBkaXN0OworCisKKyAgICAgICAgYmx1ZS0+cmVmLmN1ciAgID0gRlRfTXVsRml4KCBibHVlLT5yZWYub3JnLCBzY2FsZSApICsgZGVsdGE7CisgICAgICAgIGJsdWUtPnJlZi5maXQgICA9IGJsdWUtPnJlZi5jdXI7CisgICAgICAgIGJsdWUtPnNob290LmN1ciA9IEZUX011bEZpeCggYmx1ZS0+c2hvb3Qub3JnLCBzY2FsZSApICsgZGVsdGE7CisgICAgICAgIGJsdWUtPnNob290LmZpdCA9IGJsdWUtPnNob290LmN1cjsKKyAgICAgICAgYmx1ZS0+ZmxhZ3MgICAgJj0gfkFGX0xBVElOX0JMVUVfQUNUSVZFOworCisgICAgICAgIC8qIGEgYmx1ZSB6b25lIGlzIG9ubHkgYWN0aXZlIGlmIGl0IGlzIGxlc3MgdGhhbiAzLzQgcGl4ZWxzIHRhbGwgKi8KKyAgICAgICAgZGlzdCA9IEZUX011bEZpeCggYmx1ZS0+cmVmLm9yZyAtIGJsdWUtPnNob290Lm9yZywgc2NhbGUgKTsKKyAgICAgICAgaWYgKCBkaXN0IDw9IDQ4ICYmIGRpc3QgPj0gLTQ4ICkKKyAgICAgICAgeworI2lmIDAKKyAgICAgICAgICBGVF9Qb3MgIGRlbHRhMTsKKyNlbmRpZgorICAgICAgICAgIEZUX1BvcyAgZGVsdGEyOworCisKKyAgICAgICAgICAvKiB1c2UgZGlzY3JldGUgdmFsdWVzIGZvciBibHVlIHpvbmUgd2lkdGhzICovCisKKyNpZiAwCisKKyAgICAgICAgICAvKiBnZW5lcmljLCBvcmlnaW5hbCBjb2RlICovCisgICAgICAgICAgZGVsdGExID0gYmx1ZS0+c2hvb3Qub3JnIC0gYmx1ZS0+cmVmLm9yZzsKKyAgICAgICAgICBkZWx0YTIgPSBkZWx0YTE7CisgICAgICAgICAgaWYgKCBkZWx0YTEgPCAwICkKKyAgICAgICAgICAgIGRlbHRhMiA9IC1kZWx0YTI7CisKKyAgICAgICAgICBkZWx0YTIgPSBGVF9NdWxGaXgoIGRlbHRhMiwgc2NhbGUgKTsKKworICAgICAgICAgIGlmICggZGVsdGEyIDwgMzIgKQorICAgICAgICAgICAgZGVsdGEyID0gMDsKKyAgICAgICAgICBlbHNlIGlmICggZGVsdGEyIDwgNjQgKQorICAgICAgICAgICAgZGVsdGEyID0gMzIgKyAoICggKCBkZWx0YTIgLSAzMiApICsgMTYgKSAmIH4zMSApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbHRhMiA9IEZUX1BJWF9ST1VORCggZGVsdGEyICk7CisKKyAgICAgICAgICBpZiAoIGRlbHRhMSA8IDAgKQorICAgICAgICAgICAgZGVsdGEyID0gLWRlbHRhMjsKKworICAgICAgICAgIGJsdWUtPnJlZi5maXQgICA9IEZUX1BJWF9ST1VORCggYmx1ZS0+cmVmLmN1ciApOworICAgICAgICAgIGJsdWUtPnNob290LmZpdCA9IGJsdWUtPnJlZi5maXQgKyBkZWx0YTI7CisKKyNlbHNlCisKKyAgICAgICAgICAvKiBzaW1wbGlmaWVkIHZlcnNpb24gZHVlIHRvIGFicyhkaXN0KSA8PSA0OCAqLworICAgICAgICAgIGRlbHRhMiA9IGRpc3Q7CisgICAgICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgICAgICBkZWx0YTIgPSAtZGVsdGEyOworCisgICAgICAgICAgaWYgKCBkZWx0YTIgPCAzMiApCisgICAgICAgICAgICBkZWx0YTIgPSAwOworICAgICAgICAgIGVsc2UgaWYgKCBkZWx0YTIgPCA0OCApCisgICAgICAgICAgICBkZWx0YTIgPSAzMjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWx0YTIgPSA2NDsKKworICAgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgICAgZGVsdGEyID0gLWRlbHRhMjsKKworICAgICAgICAgIGJsdWUtPnJlZi5maXQgICA9IEZUX1BJWF9ST1VORCggYmx1ZS0+cmVmLmN1ciApOworICAgICAgICAgIGJsdWUtPnNob290LmZpdCA9IGJsdWUtPnJlZi5maXQgLSBkZWx0YTI7CisKKyNlbmRpZgorCisgICAgICAgICAgYmx1ZS0+ZmxhZ3MgfD0gQUZfTEFUSU5fQkxVRV9BQ1RJVkU7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICByZWZlcmVuY2UgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICBvdmVyc2hvb3QgJWQ6ICVkIHNjYWxlZCB0byAlLjJmJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgbm4sCisgICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+cmVmLm9yZywKKyAgICAgICAgICAgICAgICAgICAgICBibHVlLT5yZWYuZml0IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfQUNUSVZFID8gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAoaW5hY3RpdmUpIiwKKyAgICAgICAgICAgICAgICAgICAgICBubiwKKyAgICAgICAgICAgICAgICAgICAgICBibHVlLT5zaG9vdC5vcmcsCisgICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+c2hvb3QuZml0IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICBibHVlLT5mbGFncyAmIEFGX0xBVElOX0JMVUVfQUNUSVZFID8gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAoaW5hY3RpdmUpIiApKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogU2NhbGUgZ2xvYmFsIHZhbHVlcyBpbiBib3RoIGRpcmVjdGlvbnMuICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfbGF0aW5fbWV0cmljc19zY2FsZSggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICAgIHNjYWxlciApCisgIHsKKyAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9IHNjYWxlci0+cmVuZGVyX21vZGU7CisgICAgbWV0cmljcy0+cm9vdC5zY2FsZXIuZmFjZSAgICAgICAgPSBzY2FsZXItPmZhY2U7CisgICAgbWV0cmljcy0+cm9vdC5zY2FsZXIuZmxhZ3MgICAgICAgPSBzY2FsZXItPmZsYWdzOworCisgICAgYWZfbGF0aW5fbWV0cmljc19zY2FsZV9kaW0oIG1ldHJpY3MsIHNjYWxlciwgQUZfRElNRU5TSU9OX0hPUlogKTsKKyAgICBhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSggbWV0cmljcywgc2NhbGVyLCBBRl9ESU1FTlNJT05fVkVSVCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgIEwgQSBUIEkgTiAgIEcgTCBZIFAgSCAgIEEgTiBBIEwgWSBTIEkgUyAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFdhbGsgb3ZlciBhbGwgY29udG91cnMgYW5kIGNvbXB1dGUgaXRzIHNlZ21lbnRzLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgIGF4aXMgICAgICAgICAgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgICAgICAgID0gaGludHMtPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIEFGX1NlZ21lbnQgICAgIHNlZ21lbnQgICAgICAgPSBOVUxMOworICAgIEFGX1NlZ21lbnRSZWMgIHNlZzA7CisgICAgQUZfUG9pbnQqICAgICAgY29udG91ciAgICAgICA9IGhpbnRzLT5jb250b3VyczsKKyAgICBBRl9Qb2ludCogICAgICBjb250b3VyX2xpbWl0ID0gY29udG91ciArIGhpbnRzLT5udW1fY29udG91cnM7CisgICAgQUZfRGlyZWN0aW9uICAgbWFqb3JfZGlyLCBzZWdtZW50X2RpcjsKKworCisgICAgRlRfWkVSTyggJnNlZzAgKTsKKyAgICBzZWcwLnNjb3JlID0gMzIwMDA7CisgICAgc2VnMC5mbGFncyA9IEFGX0VER0VfTk9STUFMOworCisgICAgbWFqb3JfZGlyICAgPSAoQUZfRGlyZWN0aW9uKUZUX0FCUyggYXhpcy0+bWFqb3JfZGlyICk7CisgICAgc2VnbWVudF9kaXIgPSBtYWpvcl9kaXI7CisKKyAgICBheGlzLT5udW1fc2VnbWVudHMgPSAwOworCisgICAgLyogc2V0IHVwICh1LHYpIGluIGVhY2ggcG9pbnQgKi8KKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgQUZfUG9pbnQgIHBvaW50ID0gaGludHMtPnBvaW50czsKKyAgICAgIEFGX1BvaW50ICBsaW1pdCA9IHBvaW50ICsgaGludHMtPm51bV9wb2ludHM7CisKKworICAgICAgZm9yICggOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnUgPSBwb2ludC0+Zng7CisgICAgICAgIHBvaW50LT52ID0gcG9pbnQtPmZ5OworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgQUZfUG9pbnQgIHBvaW50ID0gaGludHMtPnBvaW50czsKKyAgICAgIEFGX1BvaW50ICBsaW1pdCA9IHBvaW50ICsgaGludHMtPm51bV9wb2ludHM7CisKKworICAgICAgZm9yICggOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnUgPSBwb2ludC0+Znk7CisgICAgICAgIHBvaW50LT52ID0gcG9pbnQtPmZ4OworICAgICAgfQorICAgIH0KKworICAgIC8qIGRvIGVhY2ggY29udG91ciBzZXBhcmF0ZWx5ICovCisgICAgZm9yICggOyBjb250b3VyIDwgY29udG91cl9saW1pdDsgY29udG91cisrICkKKyAgICB7CisgICAgICBBRl9Qb2ludCAgcG9pbnQgICA9ICBjb250b3VyWzBdOworICAgICAgQUZfUG9pbnQgIGxhc3QgICAgPSAgcG9pbnQtPnByZXY7CisgICAgICBpbnQgICAgICAgb25fZWRnZSA9ICAwOworICAgICAgRlRfUG9zICAgIG1pbl9wb3MgPSAgMzIwMDA7ICAvKiBtaW5pbXVtIHNlZ21lbnQgcG9zICE9IG1pbl9jb29yZCAqLworICAgICAgRlRfUG9zICAgIG1heF9wb3MgPSAtMzIwMDA7ICAvKiBtYXhpbXVtIHNlZ21lbnQgcG9zICE9IG1heF9jb29yZCAqLworICAgICAgRlRfQm9vbCAgIHBhc3NlZDsKKworCisgICAgICBpZiAoIHBvaW50ID09IGxhc3QgKSAgLyogc2tpcCBzaW5nbGV0b25zIC0tIGp1c3QgaW4gY2FzZSAqLworICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCBGVF9BQlMoIGxhc3QtPm91dF9kaXIgKSAgPT0gbWFqb3JfZGlyICYmCisgICAgICAgICAgIEZUX0FCUyggcG9pbnQtPm91dF9kaXIgKSA9PSBtYWpvcl9kaXIgKQorICAgICAgeworICAgICAgICAvKiB3ZSBhcmUgYWxyZWFkeSBvbiBhbiBlZGdlLCB0cnkgdG8gbG9jYXRlIGl0cyBzdGFydCAqLworICAgICAgICBsYXN0ID0gcG9pbnQ7CisKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIHBvaW50ID0gcG9pbnQtPnByZXY7CisgICAgICAgICAgaWYgKCBGVF9BQlMoIHBvaW50LT5vdXRfZGlyICkgIT0gbWFqb3JfZGlyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwb2ludCA9IHBvaW50LT5uZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggcG9pbnQgPT0gbGFzdCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBsYXN0ICAgPSBwb2ludDsKKyAgICAgIHBhc3NlZCA9IDA7CisKKyAgICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgdSwgdjsKKworCisgICAgICAgIGlmICggb25fZWRnZSApCisgICAgICAgIHsKKyAgICAgICAgICB1ID0gcG9pbnQtPnU7CisgICAgICAgICAgaWYgKCB1IDwgbWluX3BvcyApCisgICAgICAgICAgICBtaW5fcG9zID0gdTsKKyAgICAgICAgICBpZiAoIHUgPiBtYXhfcG9zICkKKyAgICAgICAgICAgIG1heF9wb3MgPSB1OworCisgICAgICAgICAgaWYgKCBwb2ludC0+b3V0X2RpciAhPSBzZWdtZW50X2RpciB8fCBwb2ludCA9PSBsYXN0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBhcmUganVzdCBsZWF2aW5nIGFuIGVkZ2U7IHJlY29yZCBhIG5ldyBzZWdtZW50ISAqLworICAgICAgICAgICAgc2VnbWVudC0+bGFzdCA9IHBvaW50OworICAgICAgICAgICAgc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggbWluX3BvcyArIG1heF9wb3MgKSA+PiAxICk7CisKKyAgICAgICAgICAgIC8qIGEgc2VnbWVudCBpcyByb3VuZCBpZiBlaXRoZXIgaXRzIGZpcnN0IG9yIGxhc3QgcG9pbnQgKi8KKyAgICAgICAgICAgIC8qIGlzIGEgY29udHJvbCBwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggKCBzZWdtZW50LT5maXJzdC0+ZmxhZ3MgfCBwb2ludC0+ZmxhZ3MgKSAmCisgICAgICAgICAgICAgICAgIEFGX0ZMQUdfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworCisgICAgICAgICAgICAvKiBjb21wdXRlIHNlZ21lbnQgc2l6ZSAqLworICAgICAgICAgICAgbWluX3BvcyA9IG1heF9wb3MgPSBwb2ludC0+djsKKworICAgICAgICAgICAgdiA9IHNlZ21lbnQtPmZpcnN0LT52OworICAgICAgICAgICAgaWYgKCB2IDwgbWluX3BvcyApCisgICAgICAgICAgICAgIG1pbl9wb3MgPSB2OworICAgICAgICAgICAgaWYgKCB2ID4gbWF4X3BvcyApCisgICAgICAgICAgICAgIG1heF9wb3MgPSB2OworCisgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpbWluX3BvczsKKyAgICAgICAgICAgIHNlZ21lbnQtPm1heF9jb29yZCA9IChGVF9TaG9ydCltYXhfcG9zOworICAgICAgICAgICAgc2VnbWVudC0+aGVpZ2h0ICAgID0gKEZUX1Nob3J0KSggc2VnbWVudC0+bWF4X2Nvb3JkIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPm1pbl9jb29yZCApOworCisgICAgICAgICAgICBvbl9lZGdlID0gMDsKKyAgICAgICAgICAgIHNlZ21lbnQgPSBOVUxMOworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGV4aXQgaWYgd2UgYXJlIGF0IHRoZSBzdGFydC9lbmQgcG9pbnQgKi8KKyAgICAgICAgaWYgKCBwb2ludCA9PSBsYXN0ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggcGFzc2VkICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHBhc3NlZCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFvbl9lZGdlICYmIEZUX0FCUyggcG9pbnQtPm91dF9kaXIgKSA9PSBtYWpvcl9kaXIgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgc2VnbWVudCEgKi8KKyAgICAgICAgICBzZWdtZW50X2RpciA9IChBRl9EaXJlY3Rpb24pcG9pbnQtPm91dF9kaXI7CisKKyAgICAgICAgICBlcnJvciA9IGFmX2F4aXNfaGludHNfbmV3X3NlZ21lbnQoIGF4aXMsIG1lbW9yeSwgJnNlZ21lbnQgKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgIC8qIGNsZWFyIGFsbCBzZWdtZW50IGZpZWxkcyAqLworICAgICAgICAgIHNlZ21lbnRbMF0gPSBzZWcwOworCisgICAgICAgICAgc2VnbWVudC0+ZGlyICAgICAgPSAoRlRfQ2hhcilzZWdtZW50X2RpcjsKKyAgICAgICAgICBtaW5fcG9zID0gbWF4X3BvcyA9IHBvaW50LT51OworICAgICAgICAgIHNlZ21lbnQtPmZpcnN0ICAgID0gcG9pbnQ7CisgICAgICAgICAgc2VnbWVudC0+bGFzdCAgICAgPSBwb2ludDsKKworICAgICAgICAgIG9uX2VkZ2UgPSAxOworICAgICAgICB9CisKKyAgICAgICAgcG9pbnQgPSBwb2ludC0+bmV4dDsKKyAgICAgIH0KKworICAgIH0gLyogY29udG91cnMgKi8KKworCisgICAgLyogbm93IHNsaWdodGx5IGluY3JlYXNlIHRoZSBoZWlnaHQgb2Ygc2VnbWVudHMgaWYgdGhpcyBtYWtlcyAqLworICAgIC8qIHNlbnNlIC0tIHRoaXMgaXMgdXNlZCB0byBiZXR0ZXIgZGV0ZWN0IGFuZCBpZ25vcmUgc2VyaWZzICAgKi8KKyAgICB7CisgICAgICBBRl9TZWdtZW50ICBzZWdtZW50cyAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICAgIEFGX1NlZ21lbnQgIHNlZ21lbnRzX2VuZCA9IHNlZ21lbnRzICsgYXhpcy0+bnVtX3NlZ21lbnRzOworCisKKyAgICAgIGZvciAoIHNlZ21lbnQgPSBzZWdtZW50czsgc2VnbWVudCA8IHNlZ21lbnRzX2VuZDsgc2VnbWVudCsrICkKKyAgICAgIHsKKyAgICAgICAgQUZfUG9pbnQgIGZpcnN0ICAgPSBzZWdtZW50LT5maXJzdDsKKyAgICAgICAgQUZfUG9pbnQgIGxhc3QgICAgPSBzZWdtZW50LT5sYXN0OworICAgICAgICBGVF9Qb3MgICAgZmlyc3RfdiA9IGZpcnN0LT52OworICAgICAgICBGVF9Qb3MgICAgbGFzdF92ICA9IGxhc3QtPnY7CisKKworICAgICAgICBpZiAoIGZpcnN0X3YgPCBsYXN0X3YgKQorICAgICAgICB7CisgICAgICAgICAgQUZfUG9pbnQgIHA7CisKKworICAgICAgICAgIHAgPSBmaXJzdC0+cHJldjsKKyAgICAgICAgICBpZiAoIHAtPnYgPCBmaXJzdF92ICkKKyAgICAgICAgICAgIHNlZ21lbnQtPmhlaWdodCA9IChGVF9TaG9ydCkoIHNlZ21lbnQtPmhlaWdodCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggZmlyc3RfdiAtIHAtPnYgKSA+PiAxICkgKTsKKworICAgICAgICAgIHAgPSBsYXN0LT5uZXh0OworICAgICAgICAgIGlmICggcC0+diA+IGxhc3RfdiApCisgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBzZWdtZW50LT5oZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHAtPnYgLSBsYXN0X3YgKSA+PiAxICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBBRl9Qb2ludCAgcDsKKworCisgICAgICAgICAgcCA9IGZpcnN0LT5wcmV2OworICAgICAgICAgIGlmICggcC0+diA+IGZpcnN0X3YgKQorICAgICAgICAgICAgc2VnbWVudC0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggc2VnbWVudC0+aGVpZ2h0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCBwLT52IC0gZmlyc3RfdiApID4+IDEgKSApOworCisgICAgICAgICAgcCA9IGxhc3QtPm5leHQ7CisgICAgICAgICAgaWYgKCBwLT52IDwgbGFzdF92ICkKKyAgICAgICAgICAgIHNlZ21lbnQtPmhlaWdodCA9IChGVF9TaG9ydCkoIHNlZ21lbnQtPmhlaWdodCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggbGFzdF92IC0gcC0+diApID4+IDEgKSApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBMaW5rIHNlZ21lbnRzIHRvIGZvcm0gc3RlbXMgYW5kIHNlcmlmcy4gIElmIGB3aWR0aF9jb3VudCcgYW5kICAgICAgKi8KKyAgLyogYHdpZHRocycgYXJlIG5vbi16ZXJvLCB1c2UgdGhlbSB0byBmaW5lLXR1bmUgdGhlIHNjb3JpbmcgZnVuY3Rpb24uICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIHdpZHRoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9XaWR0aFJlYyogICB3aWR0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgICAgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzICAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyAgICBGVF9Qb3MgICAgICAgIGxlbl90aHJlc2hvbGQsIGxlbl9zY29yZSwgZGlzdF9zY29yZSwgbWF4X3dpZHRoOworICAgIEFGX1NlZ21lbnQgICAgc2VnMSwgc2VnMjsKKworCisgICAgaWYgKCB3aWR0aF9jb3VudCApCisgICAgICBtYXhfd2lkdGggPSB3aWR0aHNbd2lkdGhfY291bnQgLSAxXS5vcmc7CisgICAgZWxzZQorICAgICAgbWF4X3dpZHRoID0gMDsKKworICAgIC8qIGEgaGV1cmlzdGljIHZhbHVlIHRvIHNldCB1cCBhIG1pbmltdW0gdmFsdWUgZm9yIG92ZXJsYXBwaW5nICovCisgICAgbGVuX3RocmVzaG9sZCA9IEFGX0xBVElOX0NPTlNUQU5UKCBoaW50cy0+bWV0cmljcywgOCApOworICAgIGlmICggbGVuX3RocmVzaG9sZCA9PSAwICkKKyAgICAgIGxlbl90aHJlc2hvbGQgPSAxOworCisgICAgLyogYSBoZXVyaXN0aWMgdmFsdWUgdG8gd2VpZ2h0IGxlbmd0aHMgKi8KKyAgICBsZW5fc2NvcmUgPSBBRl9MQVRJTl9DT05TVEFOVCggaGludHMtPm1ldHJpY3MsIDYwMDAgKTsKKworICAgIC8qIGEgaGV1cmlzdGljIHZhbHVlIHRvIHdlaWdodCBkaXN0YW5jZXMgKG5vIGNhbGwgdG8gICAgKi8KKyAgICAvKiBBRl9MQVRJTl9DT05TVEFOVCBuZWVkZWQsIHNpbmNlIHdlIHdvcmsgb24gbXVsdGlwbGVzICovCisgICAgLyogb2YgdGhlIHN0ZW0gd2lkdGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGRpc3Rfc2NvcmUgPSAzMDAwOworCisgICAgLyogbm93IGNvbXBhcmUgZWFjaCBzZWdtZW50IHRvIHRoZSBvdGhlcnMgKi8KKyAgICBmb3IgKCBzZWcxID0gc2VnbWVudHM7IHNlZzEgPCBzZWdtZW50X2xpbWl0OyBzZWcxKysgKQorICAgIHsKKyAgICAgIGlmICggc2VnMS0+ZGlyICE9IGF4aXMtPm1ham9yX2RpciApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBzZWFyY2ggZm9yIHN0ZW1zIGhhdmluZyBvcHBvc2l0ZSBkaXJlY3Rpb25zLCAqLworICAgICAgLyogd2l0aCBzZWcxIHRvIHRoZSBgbGVmdCcgb2Ygc2VnMiAgICAgICAgICAgICAgKi8KKyAgICAgIGZvciAoIHNlZzIgPSBzZWdtZW50czsgc2VnMiA8IHNlZ21lbnRfbGltaXQ7IHNlZzIrKyApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgcG9zMSA9IHNlZzEtPnBvczsKKyAgICAgICAgRlRfUG9zICBwb3MyID0gc2VnMi0+cG9zOworCisKKyAgICAgICAgaWYgKCBzZWcxLT5kaXIgKyBzZWcyLT5kaXIgPT0gMCAmJiBwb3MyID4gcG9zMSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBjb21wdXRlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBzZWdtZW50cyAqLworICAgICAgICAgIEZUX1BvcyAgbWluID0gc2VnMS0+bWluX2Nvb3JkOworICAgICAgICAgIEZUX1BvcyAgbWF4ID0gc2VnMS0+bWF4X2Nvb3JkOworICAgICAgICAgIEZUX1BvcyAgbGVuOworCisKKyAgICAgICAgICBpZiAoIG1pbiA8IHNlZzItPm1pbl9jb29yZCApCisgICAgICAgICAgICBtaW4gPSBzZWcyLT5taW5fY29vcmQ7CisKKyAgICAgICAgICBpZiAoIG1heCA+IHNlZzItPm1heF9jb29yZCApCisgICAgICAgICAgICBtYXggPSBzZWcyLT5tYXhfY29vcmQ7CisKKyAgICAgICAgICAvKiBjb21wdXRlIG1heGltdW0gY29vcmRpbmF0ZSBkaWZmZXJlbmNlIG9mIHRoZSB0d28gc2VnbWVudHMgKi8KKyAgICAgICAgICAvKiAodGhpcyBpcywgaG93IG11Y2ggdGhleSBvdmVybGFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBsZW4gPSBtYXggLSBtaW47CisgICAgICAgICAgaWYgKCBsZW4gPj0gbGVuX3RocmVzaG9sZCApCisgICAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqICBUaGUgc2NvcmUgaXMgdGhlIHN1bSBvZiB0d28gZGVtZXJpdHMgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgICAgICAqICBgYmFkbmVzcycgb2YgYSBmaXQsIG1lYXN1cmVkIGFsb25nIHRoZSBzZWdtZW50cycgbWFpbiBheGlzCisgICAgICAgICAgICAgKiAgYW5kIG9ydGhvZ29uYWwgdG8gaXQsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgbyBUaGUgbGVzcyBvdmVybGFwcGluZyBhbG9uZyB0aGUgbWFpbiBheGlzLCB0aGUgd29yc2UgaXQKKyAgICAgICAgICAgICAqICAgIGlzLCBjYXVzaW5nIGEgbGFyZ2VyIGRlbWVyaXQuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogIG8gVGhlIG5lYXJlciB0aGUgb3J0aG9nb25hbCBkaXN0YW5jZSB0byBhIHN0ZW0gd2lkdGgsIHRoZQorICAgICAgICAgICAgICogICAgYmV0dGVyIGl0IGlzLCBjYXVzaW5nIGEgc21hbGxlciBkZW1lcml0LiAgRm9yIHNpbXBsaWNpdHksCisgICAgICAgICAgICAgKiAgICBob3dldmVyLCB3ZSBvbmx5IGluY3JlYXNlIHRoZSBkZW1lcml0IGZvciB2YWx1ZXMgdGhhdAorICAgICAgICAgICAgICogICAgZXhjZWVkIHRoZSBsYXJnZXN0IHN0ZW0gd2lkdGguCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgRlRfUG9zICBkaXN0ID0gcG9zMiAtIHBvczE7CisKKyAgICAgICAgICAgIEZUX1BvcyAgZGlzdF9kZW1lcml0LCBzY29yZTsKKworCisgICAgICAgICAgICBpZiAoIG1heF93aWR0aCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGRlbWVyaXRzIGFyZSBiYXNlZCBvbiBtdWx0aXBsZXMgb2YgYG1heF93aWR0aCc7ICovCisgICAgICAgICAgICAgIC8qIHdlIHNjYWxlIGJ5IDEwMjQgZm9yIGdldHRpbmcgbW9yZSBwcmVjaXNpb24gICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIEZUX1BvcyAgZGVsdGEgPSAoIGRpc3QgPDwgMTAgKSAvIG1heF93aWR0aCAtICggMSA8PCAxMCApOworCisKKyAgICAgICAgICAgICAgaWYgKCBkZWx0YSA+IDEwMDAwICkKKyAgICAgICAgICAgICAgICBkaXN0X2RlbWVyaXQgPSAzMjAwMDsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoIGRlbHRhID4gMCApCisgICAgICAgICAgICAgICAgZGlzdF9kZW1lcml0ID0gZGVsdGEgKiBkZWx0YSAvIGRpc3Rfc2NvcmU7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaXN0X2RlbWVyaXQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkaXN0X2RlbWVyaXQgPSBkaXN0OyAvKiBkZWZhdWx0IGlmIG5vIHdpZHRocyBhdmFpbGFibGUgKi8KKworICAgICAgICAgICAgc2NvcmUgPSBkaXN0X2RlbWVyaXQgKyBsZW5fc2NvcmUgLyBsZW47CisKKyAgICAgICAgICAgIC8qIGFuZCB3ZSBzZWFyY2ggZm9yIHRoZSBzbWFsbGVzdCBzY29yZSAqLworICAgICAgICAgICAgaWYgKCBzY29yZSA8IHNlZzEtPnNjb3JlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2VnMS0+c2NvcmUgPSBzY29yZTsKKyAgICAgICAgICAgICAgc2VnMS0+bGluayAgPSBzZWcyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNjb3JlIDwgc2VnMi0+c2NvcmUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWcyLT5zY29yZSA9IHNjb3JlOworICAgICAgICAgICAgICBzZWcyLT5saW5rICA9IHNlZzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogbm93IGNvbXB1dGUgdGhlIGBzZXJpZicgc2VnbWVudHMsIGNmLiBleHBsYW5hdGlvbnMgaW4gYGFmaGludHMuaCcgKi8KKyAgICBmb3IgKCBzZWcxID0gc2VnbWVudHM7IHNlZzEgPCBzZWdtZW50X2xpbWl0OyBzZWcxKysgKQorICAgIHsKKyAgICAgIHNlZzIgPSBzZWcxLT5saW5rOworCisgICAgICBpZiAoIHNlZzIgKQorICAgICAgeworICAgICAgICBpZiAoIHNlZzItPmxpbmsgIT0gc2VnMSApCisgICAgICAgIHsKKyAgICAgICAgICBzZWcxLT5saW5rICA9IDA7CisgICAgICAgICAgc2VnMS0+c2VyaWYgPSBzZWcyLT5saW5rOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKiBMaW5rIHNlZ21lbnRzIHRvIGVkZ2VzLCB1c2luZyBmZWF0dXJlIGFuYWx5c2lzIGZvciBzZWxlY3Rpb24uICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CisgICAgQUZfTGF0aW5BeGlzICBsYXhpcyAgPSAmKChBRl9MYXRpbk1ldHJpY3MpaGludHMtPm1ldHJpY3MpLT5heGlzW2RpbV07CisKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzICAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZzsKKworI2lmIDAKKyAgICBBRl9EaXJlY3Rpb24gIHVwX2RpcjsKKyNlbmRpZgorICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CisgICAgRlRfUG9zICAgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZDsKKyAgICBGVF9Qb3MgICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZDsKKworCisgICAgYXhpcy0+bnVtX2VkZ2VzID0gMDsKKworICAgIHNjYWxlID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/IGhpbnRzLT54X3NjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGludHMtPnlfc2NhbGU7CisKKyNpZiAwCisgICAgdXBfZGlyID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/IEFGX0RJUl9VUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBRl9ESVJfUklHSFQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogIFdlIGlnbm9yZSBhbGwgc2VnbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIDEgcGl4ZWwgaW4gbGVuZ3RoCisgICAgICogIHRvIGF2b2lkIG1hbnkgcHJvYmxlbXMgd2l0aCBzZXJpZiBmb250cy4gIFdlIGNvbXB1dGUgdGhlCisgICAgICogIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIGluIGZvbnQgdW5pdHMuCisgICAgICovCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKQorICAgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSBGVF9EaXZGaXgoIDY0LCBoaW50cy0+eV9zY2FsZSApOworICAgIGVsc2UKKyAgICAgICAgc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkID0gMDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBXZSBiZWdpbiBieSBnZW5lcmF0aW5nIGEgc29ydGVkIHRhYmxlIG9mIGVkZ2VzIGZvciB0aGUgY3VycmVudCAgICAqLworICAgIC8qIGRpcmVjdGlvbi4gIFRvIGRvIHNvLCB3ZSBzaW1wbHkgc2NhbiBlYWNoIHNlZ21lbnQgYW5kIHRyeSB0byBmaW5kICovCisgICAgLyogYW4gZWRnZSBpbiBvdXIgdGFibGUgdGhhdCBjb3JyZXNwb25kcyB0byBpdHMgcG9zaXRpb24uICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIElmIG5vIGVkZ2UgaXMgZm91bmQsIHdlIGNyZWF0ZSBhbmQgaW5zZXJ0IGEgbmV3IGVkZ2UgaW4gdGhlICAgICAgICovCisgICAgLyogc29ydGVkIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSBzaW1wbHkgYWRkIHRoZSBzZWdtZW50IHRvIHRoZSBlZGdlJ3MgKi8KKyAgICAvKiBsaXN0IHdoaWNoIGdldHMgcHJvY2Vzc2VkIGluIHRoZSBzZWNvbmQgc3RlcCB0byBjb21wdXRlIHRoZSAgICAgICAqLworICAgIC8qIGVkZ2UncyBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBOb3RlIHRoYXQgdGhlIHRhYmxlIG9mIGVkZ2VzIGlzIHNvcnRlZCBhbG9uZyB0aGUgc2VnbWVudC9lZGdlICAgICAqLworICAgIC8qIHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgLyogYXNzdXJlIHRoYXQgZWRnZSBkaXN0YW5jZSB0aHJlc2hvbGQgaXMgYXQgbW9zdCAwLjI1cHggKi8KKyAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IEZUX011bEZpeCggbGF4aXMtPmVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSApOworICAgIGlmICggZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgPiA2NCAvIDQgKQorICAgICAgZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgPSA2NCAvIDQ7CisKKyAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CisKKyAgICBmb3IgKCBzZWcgPSBzZWdtZW50czsgc2VnIDwgc2VnbWVudF9saW1pdDsgc2VnKysgKQorICAgIHsKKyAgICAgIEFGX0VkZ2UgIGZvdW5kID0gTlVMTDsKKyAgICAgIEZUX0ludCAgIGVlOworCisKKyAgICAgIGlmICggc2VnLT5oZWlnaHQgPCBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogQSBzcGVjaWFsIGNhc2UgZm9yIHNlcmlmIGVkZ2VzOiBJZiB0aGV5IGFyZSBzbWFsbGVyIHRoYW4gKi8KKyAgICAgIC8qIDEuNSBwaXhlbHMgd2UgaWdub3JlIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHNlZy0+c2VyaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgMiAqIHNlZy0+aGVpZ2h0IDwgMyAqIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBsb29rIGZvciBhbiBlZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlZ21lbnQgKi8KKyAgICAgIGZvciAoIGVlID0gMDsgZWUgPCBheGlzLT5udW1fZWRnZXM7IGVlKysgKQorICAgICAgeworICAgICAgICBBRl9FZGdlICBlZGdlID0gYXhpcy0+ZWRnZXMgKyBlZTsKKyAgICAgICAgRlRfUG9zICAgZGlzdDsKKworCisgICAgICAgIGRpc3QgPSBzZWctPnBvcyAtIGVkZ2UtPmZwb3M7CisgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICBpZiAoIGRpc3QgPCBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCAmJiBlZGdlLT5kaXIgPT0gc2VnLT5kaXIgKQorICAgICAgICB7CisgICAgICAgICAgZm91bmQgPSBlZGdlOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggIWZvdW5kICkKKyAgICAgIHsKKyAgICAgICAgQUZfRWRnZSAgZWRnZTsKKworCisgICAgICAgIC8qIGluc2VydCBhIG5ldyBlZGdlIGluIHRoZSBsaXN0IGFuZCAqLworICAgICAgICAvKiBzb3J0IGFjY29yZGluZyB0byB0aGUgcG9zaXRpb24gICAgKi8KKyAgICAgICAgZXJyb3IgPSBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBheGlzLCBzZWctPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGlyZWN0aW9uKXNlZy0+ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgJmVkZ2UgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIC8qIGFkZCB0aGUgc2VnbWVudCB0byB0aGUgbmV3IGVkZ2UncyBsaXN0ICovCisgICAgICAgIEZUX1pFUk8oIGVkZ2UgKTsKKworICAgICAgICBlZGdlLT5maXJzdCAgICA9IHNlZzsKKyAgICAgICAgZWRnZS0+bGFzdCAgICAgPSBzZWc7CisgICAgICAgIGVkZ2UtPmRpciAgICAgID0gc2VnLT5kaXI7CisgICAgICAgIGVkZ2UtPmZwb3MgICAgID0gc2VnLT5wb3M7CisgICAgICAgIGVkZ2UtPm9wb3MgICAgID0gRlRfTXVsRml4KCBzZWctPnBvcywgc2NhbGUgKTsKKyAgICAgICAgZWRnZS0+cG9zICAgICAgPSBlZGdlLT5vcG9zOworICAgICAgICBzZWctPmVkZ2VfbmV4dCA9IHNlZzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogaWYgYW4gZWRnZSB3YXMgZm91bmQsIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncyAqLworICAgICAgICAvKiBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHNlZy0+ZWRnZV9uZXh0ICAgICAgICAgPSBmb3VuZC0+Zmlyc3Q7CisgICAgICAgIGZvdW5kLT5sYXN0LT5lZGdlX25leHQgPSBzZWc7CisgICAgICAgIGZvdW5kLT5sYXN0ICAgICAgICAgICAgPSBzZWc7CisgICAgICB9CisgICAgfQorCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogR29vZCwgd2Ugbm93IGNvbXB1dGUgZWFjaCBlZGdlJ3MgcHJvcGVydGllcyBhY2NvcmRpbmcgdG8gdGhlICAgKi8KKyAgICAvKiBzZWdtZW50cyBmb3VuZCBvbiBpdHMgcG9zaXRpb24uICBCYXNpY2FsbHksIHRoZXNlIGFyZSAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogIC0gdGhlIGVkZ2UncyBtYWluIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgLSBzdGVtIGVkZ2UsIHNlcmlmIGVkZ2Ugb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RlbSB0aGVuKSAqLworICAgIC8qICAtIHJvdW5kZWQgZWRnZSwgc3RyYWlnaHQgb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RyYWlnaHQpICovCisgICAgLyogIC0gbGluayBmb3IgZWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAvKiBmaXJzdCBvZiBhbGwsIHNldCB0aGUgYGVkZ2UnIGZpZWxkIGluIGVhY2ggc2VnbWVudCAtLSB0aGlzIGlzICovCisgICAgLyogcmVxdWlyZWQgaW4gb3JkZXIgdG8gY29tcHV0ZSBlZGdlIGxpbmtzICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyoKKyAgICAgKiBOb3RlIHRoYXQgcmVtb3ZpbmcgdGhpcyBsb29wIGFuZCBzZXR0aW5nIHRoZSBgZWRnZScgZmllbGQgb2YgZWFjaAorICAgICAqIHNlZ21lbnQgZGlyZWN0bHkgaW4gdGhlIGNvZGUgYWJvdmUgc2xvd3MgZG93biBleGVjdXRpb24gc3BlZWQgZm9yCisgICAgICogc29tZSByZWFzb25zIG9uIHBsYXRmb3JtcyBsaWtlIHRoZSBTdW4uCisgICAgICovCisgICAgeworICAgICAgQUZfRWRnZSAgZWRnZXMgICAgICA9IGF4aXMtPmVkZ2VzOworICAgICAgQUZfRWRnZSAgZWRnZV9saW1pdCA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOworICAgICAgQUZfRWRnZSAgZWRnZTsKKworCisgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgICAgeworICAgICAgICBzZWcgPSBlZGdlLT5maXJzdDsKKyAgICAgICAgaWYgKCBzZWcgKQorICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgc2VnLT5lZGdlID0gZWRnZTsKKyAgICAgICAgICAgIHNlZyAgICAgICA9IHNlZy0+ZWRnZV9uZXh0OworCisgICAgICAgICAgfSB3aGlsZSAoIHNlZyAhPSBlZGdlLT5maXJzdCApOworICAgICAgfQorCisgICAgICAvKiBub3cgY29tcHV0ZSBlYWNoIGVkZ2UgcHJvcGVydGllcyAqLworICAgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBpc19yb3VuZCAgICA9IDA7ICAvKiBkb2VzIGl0IGNvbnRhaW4gcm91bmQgc2VnbWVudHM/ICAgICovCisgICAgICAgIEZUX0ludCAgaXNfc3RyYWlnaHQgPSAwOyAgLyogZG9lcyBpdCBjb250YWluIHN0cmFpZ2h0IHNlZ21lbnRzPyAqLworI2lmIDAKKyAgICAgICAgRlRfUG9zICB1cHMgICAgICAgICA9IDA7ICAvKiBudW1iZXIgb2YgdXB3YXJkcyBzZWdtZW50cyAgICAgICAgICovCisgICAgICAgIEZUX1BvcyAgZG93bnMgICAgICAgPSAwOyAgLyogbnVtYmVyIG9mIGRvd253YXJkcyBzZWdtZW50cyAgICAgICAqLworI2VuZGlmCisKKworICAgICAgICBzZWcgPSBlZGdlLT5maXJzdDsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgRlRfQm9vbCAgaXNfc2VyaWY7CisKKworICAgICAgICAgIC8qIGNoZWNrIGZvciByb3VuZG5lc3Mgb2Ygc2VnbWVudCAqLworICAgICAgICAgIGlmICggc2VnLT5mbGFncyAmIEFGX0VER0VfUk9VTkQgKQorICAgICAgICAgICAgaXNfcm91bmQrKzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpc19zdHJhaWdodCsrOworCisjaWYgMAorICAgICAgICAgIC8qIGNoZWNrIGZvciBzZWdtZW50IGRpcmVjdGlvbiAqLworICAgICAgICAgIGlmICggc2VnLT5kaXIgPT0gdXBfZGlyICkKKyAgICAgICAgICAgIHVwcyAgICs9IHNlZy0+bWF4X2Nvb3JkIC0gc2VnLT5taW5fY29vcmQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG93bnMgKz0gc2VnLT5tYXhfY29vcmQgLSBzZWctPm1pbl9jb29yZDsKKyNlbmRpZgorCisgICAgICAgICAgLyogY2hlY2sgZm9yIGxpbmtzIC0tIGlmIHNlZy0+c2VyaWYgaXMgc2V0LCB0aGVuIHNlZy0+bGluayBtdXN0ICovCisgICAgICAgICAgLyogYmUgaWdub3JlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaXNfc2VyaWYgPSAoRlRfQm9vbCkoIHNlZy0+c2VyaWYgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWctPnNlcmlmLT5lZGdlICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnLT5zZXJpZi0+ZWRnZSAhPSBlZGdlICk7CisKKyAgICAgICAgICBpZiAoICggc2VnLT5saW5rICYmIHNlZy0+bGluay0+ZWRnZSAhPSBOVUxMICkgfHwgaXNfc2VyaWYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFGX0VkZ2UgICAgIGVkZ2UyOworICAgICAgICAgICAgQUZfU2VnbWVudCAgc2VnMjsKKworCisgICAgICAgICAgICBlZGdlMiA9IGVkZ2UtPmxpbms7CisgICAgICAgICAgICBzZWcyICA9IHNlZy0+bGluazsKKworICAgICAgICAgICAgaWYgKCBpc19zZXJpZiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNlZzIgID0gc2VnLT5zZXJpZjsKKyAgICAgICAgICAgICAgZWRnZTIgPSBlZGdlLT5zZXJpZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBlZGdlMiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1BvcyAgZWRnZV9kZWx0YTsKKyAgICAgICAgICAgICAgRlRfUG9zICBzZWdfZGVsdGE7CisKKworICAgICAgICAgICAgICBlZGdlX2RlbHRhID0gZWRnZS0+ZnBvcyAtIGVkZ2UyLT5mcG9zOworICAgICAgICAgICAgICBpZiAoIGVkZ2VfZGVsdGEgPCAwICkKKyAgICAgICAgICAgICAgICBlZGdlX2RlbHRhID0gLWVkZ2VfZGVsdGE7CisKKyAgICAgICAgICAgICAgc2VnX2RlbHRhID0gc2VnLT5wb3MgLSBzZWcyLT5wb3M7CisgICAgICAgICAgICAgIGlmICggc2VnX2RlbHRhIDwgMCApCisgICAgICAgICAgICAgICAgc2VnX2RlbHRhID0gLXNlZ19kZWx0YTsKKworICAgICAgICAgICAgICBpZiAoIHNlZ19kZWx0YSA8IGVkZ2VfZGVsdGEgKQorICAgICAgICAgICAgICAgIGVkZ2UyID0gc2VnMi0+ZWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWRnZTIgPSBzZWcyLT5lZGdlOworCisgICAgICAgICAgICBpZiAoIGlzX3NlcmlmICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZWRnZS0+c2VyaWYgICA9IGVkZ2UyOworICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgfD0gQUZfRURHRV9TRVJJRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWRnZS0+bGluayAgPSBlZGdlMjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzZWcgPSBzZWctPmVkZ2VfbmV4dDsKKworICAgICAgICB9IHdoaWxlICggc2VnICE9IGVkZ2UtPmZpcnN0ICk7CisKKyAgICAgICAgLyogc2V0IHRoZSByb3VuZC9zdHJhaWdodCBmbGFncyAqLworICAgICAgICBlZGdlLT5mbGFncyA9IEFGX0VER0VfTk9STUFMOworCisgICAgICAgIGlmICggaXNfcm91bmQgPiAwICYmIGlzX3JvdW5kID49IGlzX3N0cmFpZ2h0ICkKKyAgICAgICAgICBlZGdlLT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworCisjaWYgMAorICAgICAgICAvKiBzZXQgdGhlIGVkZ2UncyBtYWluIGRpcmVjdGlvbiAqLworICAgICAgICBlZGdlLT5kaXIgPSBBRl9ESVJfTk9ORTsKKworICAgICAgICBpZiAoIHVwcyA+IGRvd25zICkKKyAgICAgICAgICBlZGdlLT5kaXIgPSAoRlRfQ2hhcil1cF9kaXI7CisKKyAgICAgICAgZWxzZSBpZiAoIHVwcyA8IGRvd25zICkKKyAgICAgICAgICBlZGdlLT5kaXIgPSAoRlRfQ2hhciktdXBfZGlyOworCisgICAgICAgIGVsc2UgaWYgKCB1cHMgPT0gZG93bnMgKQorICAgICAgICAgIGVkZ2UtPmRpciA9IDA7ICAvKiBib3RoIHVwIGFuZCBkb3duISAqLworI2VuZGlmCisKKyAgICAgICAgLyogZ2V0IHJpZCBvZiBzZXJpZnMgaWYgbGluayBpcyBzZXQgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFhYWDogVGhpcyBnZXRzIHJpZCBvZiBtYW55IHVucGxlYXNhbnQgYXJ0ZWZhY3RzISAqLworICAgICAgICAvKiAgICAgIEV4YW1wbGU6IHRoZSBgYycgaW4gY291ci5wZmEgYXQgc2l6ZSAxMyAgICAgKi8KKworICAgICAgICBpZiAoIGVkZ2UtPnNlcmlmICYmIGVkZ2UtPmxpbmsgKQorICAgICAgICAgIGVkZ2UtPnNlcmlmID0gTlVMTDsKKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIERldGVjdCBzZWdtZW50cyBhbmQgZWRnZXMgZm9yIGdpdmVuIGRpbWVuc2lvbi4gKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgYWZfbGF0aW5faGludHNfZGV0ZWN0X2ZlYXR1cmVzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICB3aWR0aF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9XaWR0aFJlYyogICB3aWR0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBoaW50cywgZGltICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGFmX2xhdGluX2hpbnRzX2xpbmtfc2VnbWVudHMoIGhpbnRzLCB3aWR0aF9jb3VudCwgd2lkdGhzLCBkaW0gKTsKKworICAgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzKCBoaW50cywgZGltICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDb21wdXRlIGFsbCBlZGdlcyB3aGljaCBsaWUgd2l0aGluIGJsdWUgem9uZXMuICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfbGF0aW5faGludHNfY29tcHV0ZV9ibHVlX2VkZ2VzKCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgPSAmaGludHMtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgIEFGX0VkZ2UgICAgICAgZWRnZSAgICAgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX0VkZ2UgICAgICAgZWRnZV9saW1pdCA9IGVkZ2UgKyBheGlzLT5udW1fZWRnZXM7CisgICAgQUZfTGF0aW5BeGlzICBsYXRpbiAgICAgID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgIEZUX0ZpeGVkICAgICAgc2NhbGUgICAgICA9IGxhdGluLT5zY2FsZTsKKworCisgICAgLyogY29tcHV0ZSB3aGljaCBibHVlIHpvbmVzIGFyZSBhY3RpdmUsIGkuZS4gaGF2ZSB0aGVpciBzY2FsZWQgKi8KKyAgICAvKiBzaXplIDwgMy80IHBpeGVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogZm9yIGVhY2ggaG9yaXpvbnRhbCBlZGdlIHNlYXJjaCB0aGUgYmx1ZSB6b25lIHdoaWNoIGlzIGNsb3Nlc3QgKi8KKyAgICBmb3IgKCA7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICBiYjsKKyAgICAgIEFGX1dpZHRoICBiZXN0X2JsdWUgICAgICAgICAgICA9IE5VTEw7CisgICAgICBGVF9Cb29sICAgYmVzdF9ibHVlX2lzX25ldXRyYWwgPSAwOworICAgICAgRlRfUG9zICAgIGJlc3RfZGlzdDsgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgdGhyZXNob2xkICovCisKKworICAgICAgLyogY29tcHV0ZSB0aGUgaW5pdGlhbCB0aHJlc2hvbGQgYXMgYSBmcmFjdGlvbiBvZiB0aGUgRU0gc2l6ZSAqLworICAgICAgLyogKHRoZSB2YWx1ZSA0MCBpcyBoZXVyaXN0aWMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgYmVzdF9kaXN0ID0gRlRfTXVsRml4KCBtZXRyaWNzLT51bml0c19wZXJfZW0gLyA0MCwgc2NhbGUgKTsKKworICAgICAgLyogYXNzdXJlIGEgbWluaW11bSBkaXN0YW5jZSBvZiAwLjVweCAqLworICAgICAgaWYgKCBiZXN0X2Rpc3QgPiA2NCAvIDIgKQorICAgICAgICBiZXN0X2Rpc3QgPSA2NCAvIDI7CisKKyAgICAgIGZvciAoIGJiID0gMDsgYmIgPCBsYXRpbi0+Ymx1ZV9jb3VudDsgYmIrKyApCisgICAgICB7CisgICAgICAgIEFGX0xhdGluQmx1ZSAgYmx1ZSA9IGxhdGluLT5ibHVlcyArIGJiOworICAgICAgICBGVF9Cb29sICAgICAgIGlzX3RvcF9ibHVlLCBpc19uZXV0cmFsX2JsdWUsIGlzX21ham9yX2RpcjsKKworCisgICAgICAgIC8qIHNraXAgaW5hY3RpdmUgYmx1ZSB6b25lcyAoaS5lLiwgdGhvc2UgdGhhdCBhcmUgdG9vIGxhcmdlKSAqLworICAgICAgICBpZiAoICEoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9BQ1RJVkUgKSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogaWYgaXQgaXMgYSB0b3Agem9uZSwgY2hlY2sgZm9yIHJpZ2h0IGVkZ2VzIChhZ2FpbnN0IHRoZSBtYWpvciAqLworICAgICAgICAvKiBkaXJlY3Rpb24pOyBpZiBpdCBpcyBhIGJvdHRvbSB6b25lLCBjaGVjayBmb3IgbGVmdCBlZGdlcyAoaW4gICovCisgICAgICAgIC8qIHRoZSBtYWpvciBkaXJlY3Rpb24pIC0tIHRoaXMgYXNzdW1lcyB0aGUgVHJ1ZVR5cGUgY29udmVudGlvbiAgKi8KKyAgICAgICAgLyogZm9yIHRoZSBvcmllbnRhdGlvbiBvZiBjb250b3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpc190b3BfYmx1ZSA9CisgICAgICAgICAgKEZUX0J5dGUpKCAoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9UT1AgKSAhPSAwICk7CisgICAgICAgIGlzX25ldXRyYWxfYmx1ZSA9CisgICAgICAgICAgKEZUX0J5dGUpKCAoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9ORVVUUkFMICkgIT0gMCk7CisgICAgICAgIGlzX21ham9yX2RpciA9CisgICAgICAgICAgRlRfQk9PTCggZWRnZS0+ZGlyID09IGF4aXMtPm1ham9yX2RpciApOworCisgICAgICAgIC8qIG5ldXRyYWwgYmx1ZSB6b25lcyBhcmUgaGFuZGxlZCBmb3IgYm90aCBkaXJlY3Rpb25zICovCisgICAgICAgIGlmICggaXNfdG9wX2JsdWUgXiBpc19tYWpvcl9kaXIgfHwgaXNfbmV1dHJhbF9ibHVlICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICAgICAgLyogZmlyc3Qgb2YgYWxsLCBjb21wYXJlIGl0IHRvIHRoZSByZWZlcmVuY2UgcG9zaXRpb24gKi8KKyAgICAgICAgICBkaXN0ID0gZWRnZS0+ZnBvcyAtIGJsdWUtPnJlZi5vcmc7CisgICAgICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgICBkaXN0ID0gRlRfTXVsRml4KCBkaXN0LCBzY2FsZSApOworICAgICAgICAgIGlmICggZGlzdCA8IGJlc3RfZGlzdCApCisgICAgICAgICAgeworICAgICAgICAgICAgYmVzdF9kaXN0ICAgICAgICAgICAgPSBkaXN0OworICAgICAgICAgICAgYmVzdF9ibHVlICAgICAgICAgICAgPSAmYmx1ZS0+cmVmOworICAgICAgICAgICAgYmVzdF9ibHVlX2lzX25ldXRyYWwgPSBpc19uZXV0cmFsX2JsdWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogbm93IGNvbXBhcmUgaXQgdG8gdGhlIG92ZXJzaG9vdCBwb3NpdGlvbiBhbmQgY2hlY2sgd2hldGhlciAqLworICAgICAgICAgIC8qIHRoZSBlZGdlIGlzIHJvdW5kZWQsIGFuZCB3aGV0aGVyIHRoZSBlZGdlIGlzIG92ZXIgdGhlICAgICAgKi8KKyAgICAgICAgICAvKiByZWZlcmVuY2UgcG9zaXRpb24gb2YgYSB0b3Agem9uZSwgb3IgdW5kZXIgdGhlIHJlZmVyZW5jZSAgICovCisgICAgICAgICAgLyogcG9zaXRpb24gb2YgYSBib3R0b20gem9uZSAocHJvdmlkZWQgd2UgZG9uJ3QgaGF2ZSBhICAgICAgICAqLworICAgICAgICAgIC8qIG5ldXRyYWwgYmx1ZSB6b25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGVkZ2UtPmZsYWdzICYgQUZfRURHRV9ST1VORCAmJgorICAgICAgICAgICAgICAgZGlzdCAhPSAwICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAhaXNfbmV1dHJhbF9ibHVlICAgICAgICAgICAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0Jvb2wgIGlzX3VuZGVyX3JlZiA9IEZUX0JPT0woIGVkZ2UtPmZwb3MgPCBibHVlLT5yZWYub3JnICk7CisKKworICAgICAgICAgICAgaWYgKCBpc190b3BfYmx1ZSBeIGlzX3VuZGVyX3JlZiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRpc3QgPSBlZGdlLT5mcG9zIC0gYmx1ZS0+c2hvb3Qub3JnOworICAgICAgICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgICAgICAgZGlzdCA9IEZUX011bEZpeCggZGlzdCwgc2NhbGUgKTsKKyAgICAgICAgICAgICAgaWYgKCBkaXN0IDwgYmVzdF9kaXN0ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJlc3RfZGlzdCAgICAgICAgICAgID0gZGlzdDsKKyAgICAgICAgICAgICAgICBiZXN0X2JsdWUgICAgICAgICAgICA9ICZibHVlLT5zaG9vdDsKKyAgICAgICAgICAgICAgICBiZXN0X2JsdWVfaXNfbmV1dHJhbCA9IGlzX25ldXRyYWxfYmx1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIGJlc3RfYmx1ZSApCisgICAgICB7CisgICAgICAgIGVkZ2UtPmJsdWVfZWRnZSA9IGJlc3RfYmx1ZTsKKyAgICAgICAgaWYgKCBiZXN0X2JsdWVfaXNfbmV1dHJhbCApCisgICAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ORVVUUkFMOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogSW5pdGFsaXplIGhpbnRpbmcgZW5naW5lLiAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9sYXRpbl9oaW50c19pbml0KCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MgKQorICB7CisgICAgRlRfUmVuZGVyX01vZGUgIG1vZGU7CisgICAgRlRfVUludDMyICAgICAgIHNjYWxlcl9mbGFncywgb3RoZXJfZmxhZ3M7CisgICAgRlRfRmFjZSAgICAgICAgIGZhY2UgPSBtZXRyaWNzLT5yb290LnNjYWxlci5mYWNlOworCisKKyAgICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBoaW50cywgKEFGX1N0eWxlTWV0cmljcyltZXRyaWNzICk7CisKKyAgICAvKgorICAgICAqICBjb3JyZWN0IHhfc2NhbGUgYW5kIHlfc2NhbGUgaWYgbmVlZGVkLCBzaW5jZSB0aGV5IG1heSBoYXZlCisgICAgICogIGJlZW4gbW9kaWZpZWQgYnkgYGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltJyBhYm92ZQorICAgICAqLworICAgIGhpbnRzLT54X3NjYWxlID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0uc2NhbGU7CisgICAgaGludHMtPnhfZGVsdGEgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5kZWx0YTsKKyAgICBoaW50cy0+eV9zY2FsZSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdLnNjYWxlOworICAgIGhpbnRzLT55X2RlbHRhID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fVkVSVF0uZGVsdGE7CisKKyAgICAvKiBjb21wdXRlIGZsYWdzIGRlcGVuZGluZyBvbiByZW5kZXIgbW9kZSwgZXRjLiAqLworICAgIG1vZGUgPSBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZTsKKworI2lmIDAgLyogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9IG1vZGUgPSBGVF9SRU5ERVJfTU9ERV9OT1JNQUw7CisjZW5kaWYKKworICAgIHNjYWxlcl9mbGFncyA9IGhpbnRzLT5zY2FsZXJfZmxhZ3M7CisgICAgb3RoZXJfZmxhZ3MgID0gMDsKKworICAgIC8qCisgICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIHZlcnRpY2FsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiAgaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19IT1JaX1NOQVA7CisKKyAgICAvKgorICAgICAqICBXZSBzbmFwIHRoZSB3aWR0aCBvZiBob3Jpem9udGFsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiAgdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCisgICAgICovCisgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19WRVJUX1NOQVA7CisKKyAgICAvKgorICAgICAqICBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgb25seSBpZiB3ZSBkb24ndCB1c2UgdGhlIGBsaWdodCcgbW9kZS4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfU1RFTV9BREpVU1Q7CisKKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19NT05POworCisgICAgLyoKKyAgICAgKiAgSW4gYGxpZ2h0JyBoaW50aW5nIG1vZGUgd2UgZGlzYWJsZSBob3Jpem9udGFsIGhpbnRpbmcgY29tcGxldGVseS4KKyAgICAgKiAgV2UgYWxzbyBkbyBpdCBpZiB0aGUgZmFjZSBpcyBpdGFsaWMuCisgICAgICoKKyAgICAgKiAgSG93ZXZlciwgaWYgd2FycGluZyBpcyBlbmFibGVkICh3aGljaCBvbmx5IHdvcmtzIGluIGBsaWdodCcgaGludGluZworICAgICAqICBtb2RlKSwgYWR2YW5jZSB3aWR0aHMgZ2V0IGFkanVzdGVkLCB0b28uCisgICAgICovCisgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAoIGZhY2UtPnN0eWxlX2ZsYWdzICYgRlRfU1RZTEVfRkxBR19JVEFMSUMgKSAhPSAwICkKKyAgICAgIHNjYWxlcl9mbGFncyB8PSBBRl9TQ0FMRVJfRkxBR19OT19IT1JJWk9OVEFMOworCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCisgICAgLyogZ2V0IChnbG9iYWwpIHdhcnBlciBmbGFnICovCisgICAgaWYgKCAhbWV0cmljcy0+cm9vdC5nbG9iYWxzLT5tb2R1bGUtPndhcnBpbmcgKQorICAgICAgc2NhbGVyX2ZsYWdzIHw9IEFGX1NDQUxFUl9GTEFHX05PX1dBUlBFUjsKKyNlbmRpZgorCisgICAgaGludHMtPnNjYWxlcl9mbGFncyA9IHNjYWxlcl9mbGFnczsKKyAgICBoaW50cy0+b3RoZXJfZmxhZ3MgID0gb3RoZXJfZmxhZ3M7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgIEwgQSBUIEkgTiAgIEcgTCBZIFAgSCAgIEcgUiBJIEQgLSBGIEkgVCBUIEkgTiBHICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBTbmFwIGEgZ2l2ZW4gd2lkdGggaW4gc2NhbGVkIGNvb3JkaW5hdGVzIHRvIG9uZSBvZiB0aGUgKi8KKyAgLyogY3VycmVudCBzdGFuZGFyZCB3aWR0aHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIEZUX1BvcworICBhZl9sYXRpbl9zbmFwX3dpZHRoKCBBRl9XaWR0aCAgd2lkdGhzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICB3aWR0aCApCisgIHsKKyAgICBGVF9VSW50ICBuOworICAgIEZUX1BvcyAgIGJlc3QgICAgICA9IDY0ICsgMzIgKyAyOworICAgIEZUX1BvcyAgIHJlZmVyZW5jZSA9IHdpZHRoOworICAgIEZUX1BvcyAgIHNjYWxlZDsKKworCisgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICB7CisgICAgICBGVF9Qb3MgIHc7CisgICAgICBGVF9Qb3MgIGRpc3Q7CisKKworICAgICAgdyA9IHdpZHRoc1tuXS5jdXI7CisgICAgICBkaXN0ID0gd2lkdGggLSB3OworICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgIGRpc3QgPSAtZGlzdDsKKyAgICAgIGlmICggZGlzdCA8IGJlc3QgKQorICAgICAgeworICAgICAgICBiZXN0ICAgICAgPSBkaXN0OworICAgICAgICByZWZlcmVuY2UgPSB3OworICAgICAgfQorICAgIH0KKworICAgIHNjYWxlZCA9IEZUX1BJWF9ST1VORCggcmVmZXJlbmNlICk7CisKKyAgICBpZiAoIHdpZHRoID49IHJlZmVyZW5jZSApCisgICAgeworICAgICAgaWYgKCB3aWR0aCA8IHNjYWxlZCArIDQ4ICkKKyAgICAgICAgd2lkdGggPSByZWZlcmVuY2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHdpZHRoID4gc2NhbGVkIC0gNDggKQorICAgICAgICB3aWR0aCA9IHJlZmVyZW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gd2lkdGg7CisgIH0KKworCisgIC8qIENvbXB1dGUgdGhlIHNuYXBwZWQgd2lkdGggb2YgYSBnaXZlbiBzdGVtLCBpZ25vcmluZyB2ZXJ5IHRoaW4gb25lcy4gKi8KKyAgLyogVGhlcmUgaXMgYSBsb3Qgb2Ygdm9vZG9vIGluIHRoaXMgZnVuY3Rpb247IGNoYW5naW5nIHRoZSBoYXJkLWNvZGVkICAqLworICAvKiBwYXJhbWV0ZXJzIGluZmx1ZW5jZSB0aGUgd2hvbGUgaGludGluZyBwcm9jZXNzLiAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIEZUX1BvcworICBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBiYXNlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIHN0ZW1fZmxhZ3MgKQorICB7CisgICAgQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzICA9IChBRl9MYXRpbk1ldHJpY3MpaGludHMtPm1ldHJpY3M7CisgICAgQUZfTGF0aW5BeGlzICAgICBheGlzICAgICA9ICZtZXRyaWNzLT5heGlzW2RpbV07CisgICAgRlRfUG9zICAgICAgICAgICBkaXN0ICAgICA9IHdpZHRoOworICAgIEZUX0ludCAgICAgICAgICAgc2lnbiAgICAgPSAwOworICAgIEZUX0ludCAgICAgICAgICAgdmVydGljYWwgPSAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApOworCisKKyAgICBpZiAoICFBRl9MQVRJTl9ISU5UU19ET19TVEVNX0FESlVTVCggaGludHMgKSB8fAorICAgICAgICAgYXhpcy0+ZXh0cmFfbGlnaHQgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmICggZGlzdCA8IDAgKQorICAgIHsKKyAgICAgIGRpc3QgPSAtd2lkdGg7CisgICAgICBzaWduID0gMTsKKyAgICB9CisKKyAgICBpZiAoICggIHZlcnRpY2FsICYmICFBRl9MQVRJTl9ISU5UU19ET19WRVJUX1NOQVAoIGhpbnRzICkgKSB8fAorICAgICAgICAgKCAhdmVydGljYWwgJiYgIUFGX0xBVElOX0hJTlRTX0RPX0hPUlpfU05BUCggaGludHMgKSApICkKKyAgICB7CisgICAgICAvKiBzbW9vdGggaGludGluZyBwcm9jZXNzOiB2ZXJ5IGxpZ2h0bHkgcXVhbnRpemUgdGhlIHN0ZW0gd2lkdGggKi8KKworICAgICAgLyogbGVhdmUgdGhlIHdpZHRocyBvZiBzZXJpZnMgYWxvbmUgKi8KKyAgICAgIGlmICggKCBzdGVtX2ZsYWdzICYgQUZfRURHRV9TRVJJRiApICYmCisgICAgICAgICAgIHZlcnRpY2FsICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIGRpc3QgPCAzICogNjQgKSAgICAgICAgICAgICAgKQorICAgICAgICBnb3RvIERvbmVfV2lkdGg7CisKKyAgICAgIGVsc2UgaWYgKCBiYXNlX2ZsYWdzICYgQUZfRURHRV9ST1VORCApCisgICAgICB7CisgICAgICAgIGlmICggZGlzdCA8IDgwICkKKyAgICAgICAgICBkaXN0ID0gNjQ7CisgICAgICB9CisgICAgICBlbHNlIGlmICggZGlzdCA8IDU2ICkKKyAgICAgICAgZGlzdCA9IDU2OworCisgICAgICBpZiAoIGF4aXMtPndpZHRoX2NvdW50ID4gMCApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgZGVsdGE7CisKKworICAgICAgICAvKiBjb21wYXJlIHRvIHN0YW5kYXJkIHdpZHRoICovCisgICAgICAgIGRlbHRhID0gZGlzdCAtIGF4aXMtPndpZHRoc1swXS5jdXI7CisKKyAgICAgICAgaWYgKCBkZWx0YSA8IDAgKQorICAgICAgICAgIGRlbHRhID0gLWRlbHRhOworCisgICAgICAgIGlmICggZGVsdGEgPCA0MCApCisgICAgICAgIHsKKyAgICAgICAgICBkaXN0ID0gYXhpcy0+d2lkdGhzWzBdLmN1cjsKKyAgICAgICAgICBpZiAoIGRpc3QgPCA0OCApCisgICAgICAgICAgICBkaXN0ID0gNDg7CisKKyAgICAgICAgICBnb3RvIERvbmVfV2lkdGg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRpc3QgPCAzICogNjQgKQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgID0gZGlzdCAmIDYzOworICAgICAgICAgIGRpc3QgICY9IC02NDsKKworICAgICAgICAgIGlmICggZGVsdGEgPCAxMCApCisgICAgICAgICAgICBkaXN0ICs9IGRlbHRhOworCisgICAgICAgICAgZWxzZSBpZiAoIGRlbHRhIDwgMzIgKQorICAgICAgICAgICAgZGlzdCArPSAxMDsKKworICAgICAgICAgIGVsc2UgaWYgKCBkZWx0YSA8IDU0ICkKKyAgICAgICAgICAgIGRpc3QgKz0gNTQ7CisKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkaXN0ICs9IGRlbHRhOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgMzIgKSAmIH42MzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIHN0cm9uZyBoaW50aW5nIHByb2Nlc3M6IHNuYXAgdGhlIHN0ZW0gd2lkdGggdG8gaW50ZWdlciBwaXhlbHMgKi8KKworICAgICAgRlRfUG9zICBvcmdfZGlzdCA9IGRpc3Q7CisKKworICAgICAgZGlzdCA9IGFmX2xhdGluX3NuYXBfd2lkdGgoIGF4aXMtPndpZHRocywgYXhpcy0+d2lkdGhfY291bnQsIGRpc3QgKTsKKworICAgICAgaWYgKCB2ZXJ0aWNhbCApCisgICAgICB7CisgICAgICAgIC8qIGluIHRoZSBjYXNlIG9mIHZlcnRpY2FsIGhpbnRpbmcsIGFsd2F5cyByb3VuZCAqLworICAgICAgICAvKiB0aGUgc3RlbSBoZWlnaHRzIHRvIGludGVnZXIgcGl4ZWxzICAgICAgICAgICAgKi8KKworICAgICAgICBpZiAoIGRpc3QgPj0gNjQgKQorICAgICAgICAgIGRpc3QgPSAoIGRpc3QgKyAxNiApICYgfjYzOworICAgICAgICBlbHNlCisgICAgICAgICAgZGlzdCA9IDY0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEFGX0xBVElOX0hJTlRTX0RPX01PTk8oIGhpbnRzICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogbW9ub2Nocm9tZSBob3Jpem9udGFsIGhpbnRpbmc6IHNuYXAgd2lkdGhzIHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgICAgICAgLyogd2l0aCBhIGRpZmZlcmVudCB0aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA2NCApCisgICAgICAgICAgICBkaXN0ID0gNjQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogZm9yIGhvcml6b250YWwgYW50aS1hbGlhc2VkIGhpbnRpbmcsIHdlIGFkb3B0IGEgbW9yZSBzdWJ0bGUgKi8KKyAgICAgICAgICAvKiBhcHByb2FjaDogd2Ugc3RyZW5ndGhlbiBzbWFsbCBzdGVtcywgcm91bmQgc3RlbXMgd2hvc2Ugc2l6ZSAqLworICAgICAgICAgIC8qIGlzIGJldHdlZW4gMSBhbmQgMiBwaXhlbHMgdG8gYW4gaW50ZWdlciwgb3RoZXJ3aXNlIG5vdGhpbmcgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA0OCApCisgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgNjQgKSA+PiAxOworCisgICAgICAgICAgZWxzZSBpZiAoIGRpc3QgPCAxMjggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdlIG9ubHkgcm91bmQgdG8gYW4gaW50ZWdlciB3aWR0aCBpZiB0aGUgY29ycmVzcG9uZGluZyAqLworICAgICAgICAgICAgLyogZGlzdG9ydGlvbiBpcyBsZXNzIHRoYW4gMS80IHBpeGVsLiAgT3RoZXJ3aXNlIHRoaXMgICAgICovCisgICAgICAgICAgICAvKiBtYWtlcyBldmVyeXRoaW5nIHdvcnNlIHNpbmNlIHRoZSBkaWFnb25hbHMsIHdoaWNoIGFyZSAgKi8KKyAgICAgICAgICAgIC8qIG5vdCBoaW50ZWQsIGFwcGVhciBhIGxvdCBib2xkZXIgb3IgdGhpbm5lciB0aGFuIHRoZSAgICAqLworICAgICAgICAgICAgLyogdmVydGljYWwgc3RlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIEZUX1BvcyAgZGVsdGE7CisKKworICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDIyICkgJiB+NjM7CisgICAgICAgICAgICBkZWx0YSA9IGRpc3QgLSBvcmdfZGlzdDsKKyAgICAgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGE7CisKKyAgICAgICAgICAgIGlmICggZGVsdGEgPj0gMTYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkaXN0ID0gb3JnX2Rpc3Q7CisgICAgICAgICAgICAgIGlmICggZGlzdCA8IDQ4ICkKKyAgICAgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgNjQgKSA+PiAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiByb3VuZCBvdGhlcndpc2UgdG8gcHJldmVudCBjb2xvciBmcmluZ2VzIGluIExDRCBtb2RlICovCisgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgMzIgKSAmIH42MzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBEb25lX1dpZHRoOgorICAgIGlmICggc2lnbiApCisgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICByZXR1cm4gZGlzdDsKKyAgfQorCisKKyAgLyogQWxpZ24gb25lIHN0ZW0gZWRnZSByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgc3RlbSBlZGdlLiAqLworCisgIHN0YXRpYyB2b2lkCisgIGFmX2xhdGluX2FsaWduX2xpbmtlZF9lZGdlKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIGJhc2VfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIHN0ZW1fZWRnZSApCisgIHsKKyAgICBGVF9Qb3MgIGRpc3QgPSBzdGVtX2VkZ2UtPm9wb3MgLSBiYXNlX2VkZ2UtPm9wb3M7CisKKyAgICBGVF9Qb3MgIGZpdHRlZF93aWR0aCA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9lZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbV9lZGdlLT5mbGFncyApOworCisKKyAgICBzdGVtX2VkZ2UtPnBvcyA9IGJhc2VfZWRnZS0+cG9zICsgZml0dGVkX3dpZHRoOworCisgICAgRlRfVFJBQ0U1KCggIiAgTElOSzogZWRnZSAlZCAob3Bvcz0lLjJmKSBsaW5rZWQgdG8gJS4yZiwiCisgICAgICAgICAgICAgICAgIiBkaXN0IHdhcyAlLjJmLCBub3cgJS4yZlxuIiwKKyAgICAgICAgICAgICAgICBzdGVtX2VkZ2UgLSBoaW50cy0+YXhpc1tkaW1dLmVkZ2VzLCBzdGVtX2VkZ2UtPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgIHN0ZW1fZWRnZS0+cG9zIC8gNjQuMCwgZGlzdCAvIDY0LjAsIGZpdHRlZF93aWR0aCAvIDY0LjAgKSk7CisgIH0KKworCisgIC8qIFNoaWZ0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgYHNlcmlmJyBlZGdlIGJ5IHRoZSBzYW1lIGFtb3VudCAqLworICAvKiBhcyB0aGUgY29ycmVzcG9uZGluZyBgYmFzZScgZWRnZSBoYXMgYmVlbiBtb3ZlZCBhbHJlYWR5LiAgICAgKi8KKworICBzdGF0aWMgdm9pZAorICBhZl9sYXRpbl9hbGlnbl9zZXJpZl9lZGdlKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgc2VyaWYgKQorICB7CisgICAgRlRfVU5VU0VEKCBoaW50cyApOworCisgICAgc2VyaWYtPnBvcyA9IGJhc2UtPnBvcyArICggc2VyaWYtPm9wb3MgLSBiYXNlLT5vcG9zICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgRSBEIEcgRSAgIEggSSBOIFQgSSBOIEcgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBUaGUgbWFpbiBncmlkLWZpdHRpbmcgcm91dGluZS4gKi8KKworICBzdGF0aWMgdm9pZAorICBhZl9sYXRpbl9oaW50X2VkZ2VzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICkKKyAgeworICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEFGX0VkZ2UgICAgICAgZWRnZXMgICAgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX0VkZ2UgICAgICAgZWRnZV9saW1pdCA9IGVkZ2VzICsgYXhpcy0+bnVtX2VkZ2VzOworICAgIEZUX1B0ckRpc3QgICAgbl9lZGdlczsKKyAgICBBRl9FZGdlICAgICAgIGVkZ2U7CisgICAgQUZfRWRnZSAgICAgICBhbmNob3IgICAgID0gTlVMTDsKKyAgICBGVF9JbnQgICAgICAgIGhhc19zZXJpZnMgPSAwOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBGVF9VSW50ICAgICAgIG51bV9hY3Rpb25zID0gMDsKKyNlbmRpZgorCisKKyAgICBGVF9UUkFDRTUoKCAibGF0aW4gJXMgZWRnZSBoaW50aW5nIChzdHlsZSBgJXMnKVxuIiwKKyAgICAgICAgICAgICAgICBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgPyAiaG9yaXpvbnRhbCIgOiAidmVydGljYWwiLAorICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW2hpbnRzLT5tZXRyaWNzLT5zdHlsZV9jbGFzcy0+c3R5bGVdICkpOworCisgICAgLyogd2UgYmVnaW4gYnkgYWxpZ25pbmcgYWxsIHN0ZW1zIHJlbGF0aXZlIHRvIHRoZSBibHVlIHpvbmUgKi8KKyAgICAvKiBpZiBuZWVkZWQgLS0gdGhhdCdzIG9ubHkgZm9yIGhvcml6b250YWwgZWRnZXMgICAgICAgICAgICAqLworCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgJiYgQUZfSElOVFNfRE9fQkxVRVMoIGhpbnRzICkgKQorICAgIHsKKyAgICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgICB7CisgICAgICAgIEFGX1dpZHRoICBibHVlOworICAgICAgICBBRl9FZGdlICAgZWRnZTEsIGVkZ2UyOyAvKiB0aGVzZSBlZGdlcyBmb3JtIHRoZSBzdGVtIHRvIGNoZWNrICovCisKKworICAgICAgICBpZiAoIGVkZ2UtPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZGdlMSA9IE5VTEw7CisgICAgICAgIGVkZ2UyID0gZWRnZS0+bGluazsKKworICAgICAgICAvKgorICAgICAgICAgKiAgSWYgYSBzdGVtIGNvbnRhaW5zIGJvdGggYSBuZXV0cmFsIGFuZCBhIG5vbi1uZXV0cmFsIGJsdWUgem9uZSwKKyAgICAgICAgICogIHNraXAgdGhlIG5ldXRyYWwgb25lLiAgT3RoZXJ3aXNlLCBvdXRsaW5lcyB3aXRoIGRpZmZlcmVudAorICAgICAgICAgKiAgZGlyZWN0aW9ucyBtaWdodCBiZSBpbmNvcnJlY3RseSBhbGlnbmVkIGF0IHRoZSBzYW1lIHZlcnRpY2FsCisgICAgICAgICAqICBwb3NpdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICogIElmIHdlIGhhdmUgdHdvIG5ldXRyYWwgYmx1ZSB6b25lcywgc2tpcCBvbmUgb2YgdGhlbS4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGlmICggZWRnZS0+Ymx1ZV9lZGdlICYmIGVkZ2UyICYmIGVkZ2UyLT5ibHVlX2VkZ2UgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSAgbmV1dHJhbCAgPSBlZGdlLT5mbGFncyAgJiBBRl9FREdFX05FVVRSQUw7CisgICAgICAgICAgRlRfQnl0ZSAgbmV1dHJhbDIgPSBlZGdlMi0+ZmxhZ3MgJiBBRl9FREdFX05FVVRSQUw7CisKKworICAgICAgICAgIGlmICggbmV1dHJhbDIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkZ2UyLT5ibHVlX2VkZ2UgPSBOVUxMOworICAgICAgICAgICAgZWRnZTItPmZsYWdzICAgICY9IH5BRl9FREdFX05FVVRSQUw7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBuZXV0cmFsICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlZGdlLT5ibHVlX2VkZ2UgPSBOVUxMOworICAgICAgICAgICAgZWRnZS0+ZmxhZ3MgICAgJj0gfkFGX0VER0VfTkVVVFJBTDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBibHVlID0gZWRnZS0+Ymx1ZV9lZGdlOworICAgICAgICBpZiAoIGJsdWUgKQorICAgICAgICAgIGVkZ2UxID0gZWRnZTsKKworICAgICAgICAvKiBmbGlwIGVkZ2VzIGlmIHRoZSBvdGhlciBlZGdlIGlzIGFsaWduZWQgdG8gYSBibHVlIHpvbmUgKi8KKyAgICAgICAgZWxzZSBpZiAoIGVkZ2UyICYmIGVkZ2UyLT5ibHVlX2VkZ2UgKQorICAgICAgICB7CisgICAgICAgICAgYmx1ZSAgPSBlZGdlMi0+Ymx1ZV9lZGdlOworICAgICAgICAgIGVkZ2UxID0gZWRnZTI7CisgICAgICAgICAgZWRnZTIgPSBlZGdlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhZWRnZTEgKQorICAgICAgICAgIGNvbnRpbnVlOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaWYgKCAhYW5jaG9yICkKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCTFVFX0FOQ0hPUjogZWRnZSAlZCAob3Bvcz0lLjJmKSBzbmFwcGVkIHRvICUuMmYsIgorICAgICAgICAgICAgICAgICAgICAgICIgd2FzICUuMmYgKGFuY2hvcj1lZGdlICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlMSAtIGVkZ2VzLCBlZGdlMS0+b3BvcyAvIDY0LjAsIGJsdWUtPmZpdCAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZTEtPnBvcyAvIDY0LjAsIGVkZ2UgLSBlZGdlcyApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJMVUU6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmLCIKKyAgICAgICAgICAgICAgICAgICAgICAiIHdhcyAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UxIC0gZWRnZXMsIGVkZ2UxLT5vcG9zIC8gNjQuMCwgYmx1ZS0+Zml0IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlMS0+cG9zIC8gNjQuMCApKTsKKworICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisKKyAgICAgICAgZWRnZTEtPnBvcyAgICA9IGJsdWUtPmZpdDsKKyAgICAgICAgZWRnZTEtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBpZiAoIGVkZ2UyICYmICFlZGdlMi0+Ymx1ZV9lZGdlICkKKyAgICAgICAgeworICAgICAgICAgIGFmX2xhdGluX2FsaWduX2xpbmtlZF9lZGdlKCBoaW50cywgZGltLCBlZGdlMSwgZWRnZTIgKTsKKyAgICAgICAgICBlZGdlMi0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoICFhbmNob3IgKQorICAgICAgICAgIGFuY2hvciA9IGVkZ2U7CisgICAgICB9CisgICAgfQorCisgICAgLyogbm93IHdlIGFsaWduIGFsbCBvdGhlciBzdGVtIGVkZ2VzLCB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlICovCisgICAgLyogcmVsYXRpdmUgb3JkZXIgb2Ygc3RlbXMgaW4gdGhlIGdseXBoICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICB7CisgICAgICBBRl9FZGdlICBlZGdlMjsKKworCisgICAgICBpZiAoIGVkZ2UtPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIHNraXAgYWxsIG5vbi1zdGVtIGVkZ2VzICovCisgICAgICBlZGdlMiA9IGVkZ2UtPmxpbms7CisgICAgICBpZiAoICFlZGdlMiApCisgICAgICB7CisgICAgICAgIGhhc19zZXJpZnMrKzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBhbGlnbiB0aGUgc3RlbSAqLworCisgICAgICAvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgc2FmZSAqLworICAgICAgaWYgKCBlZGdlMi0+Ymx1ZV9lZGdlICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgQVNTRVJUSU9OIEZBSUxFRCBmb3IgZWRnZSAlZFxuIiwgZWRnZTIgLSBlZGdlcyApKTsKKworICAgICAgICBhZl9sYXRpbl9hbGlnbl9saW5rZWRfZWRnZSggaGludHMsIGRpbSwgZWRnZTIsIGVkZ2UgKTsKKyAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyNlbmRpZgorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKCAhYW5jaG9yICkKKyAgICAgIHsKKyAgICAgICAgLyogaWYgd2UgcmVhY2ggdGhpcyBpZiBjbGF1c2UsIG5vIHN0ZW0gaGFzIGJlZW4gYWxpZ25lZCB5ZXQgKi8KKworICAgICAgICBGVF9Qb3MgIG9yZ19sZW4sIG9yZ19jZW50ZXIsIGN1cl9sZW47CisgICAgICAgIEZUX1BvcyAgY3VyX3BvczEsIGVycm9yMSwgZXJyb3IyLCB1X29mZiwgZF9vZmY7CisKKworICAgICAgICBvcmdfbGVuID0gZWRnZTItPm9wb3MgLSBlZGdlLT5vcG9zOworICAgICAgICBjdXJfbGVuID0gYWZfbGF0aW5fY29tcHV0ZV9zdGVtX3dpZHRoKCBoaW50cywgZGltLCBvcmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZTItPmZsYWdzICk7CisKKyAgICAgICAgLyogc29tZSB2b29kb28gdG8gc3BlY2lhbGx5IHJvdW5kIGVkZ2VzIGZvciBzbWFsbCBzdGVtIHdpZHRoczsgKi8KKyAgICAgICAgLyogdGhlIGlkZWEgaXMgdG8gYWxpZ24gdGhlIGNlbnRlciBvZiBhIHN0ZW0sIHRoZW4gc2hpZnRpbmcgICAgKi8KKyAgICAgICAgLyogdGhlIHN0ZW0gZWRnZXMgdG8gc3VpdGFibGUgcG9zaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBjdXJfbGVuIDw9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHdpZHRoIDw9IDFweCAqLworICAgICAgICAgIHVfb2ZmID0gMzI7CisgICAgICAgICAgZF9vZmYgPSAzMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiAxcHggPCB3aWR0aCA8IDEuNXB4ICovCisgICAgICAgICAgdV9vZmYgPSAzODsKKyAgICAgICAgICBkX29mZiA9IDI2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBjdXJfbGVuIDwgOTYgKQorICAgICAgICB7CisgICAgICAgICAgb3JnX2NlbnRlciA9IGVkZ2UtPm9wb3MgKyAoIG9yZ19sZW4gPj4gMSApOworICAgICAgICAgIGN1cl9wb3MxICAgPSBGVF9QSVhfUk9VTkQoIG9yZ19jZW50ZXIgKTsKKworICAgICAgICAgIGVycm9yMSA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxIC0gdV9vZmYgKTsKKyAgICAgICAgICBpZiAoIGVycm9yMSA8IDAgKQorICAgICAgICAgICAgZXJyb3IxID0gLWVycm9yMTsKKworICAgICAgICAgIGVycm9yMiA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxICsgZF9vZmYgKTsKKyAgICAgICAgICBpZiAoIGVycm9yMiA8IDAgKQorICAgICAgICAgICAgZXJyb3IyID0gLWVycm9yMjsKKworICAgICAgICAgIGlmICggZXJyb3IxIDwgZXJyb3IyICkKKyAgICAgICAgICAgIGN1cl9wb3MxIC09IHVfb2ZmOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cl9wb3MxICs9IGRfb2ZmOworCisgICAgICAgICAgZWRnZS0+cG9zICA9IGN1cl9wb3MxIC0gY3VyX2xlbiAvIDI7CisgICAgICAgICAgZWRnZTItPnBvcyA9IGVkZ2UtPnBvcyArIGN1cl9sZW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGVkZ2UtPnBvcyA9IEZUX1BJWF9ST1VORCggZWRnZS0+b3BvcyApOworCisgICAgICAgIGFuY2hvciAgICAgICA9IGVkZ2U7CisgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBGVF9UUkFDRTUoKCAiICBBTkNIT1I6IGVkZ2UgJWQgKG9wb3M9JS4yZikgYW5kICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gJS4yZiBhbmQgJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgZWRnZTIgLSBlZGdlcywgZWRnZTItPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLCBlZGdlMi0+cG9zIC8gNjQuMCApKTsKKworICAgICAgICBhZl9sYXRpbl9hbGlnbl9saW5rZWRfZWRnZSggaGludHMsIGRpbSwgZWRnZSwgZWRnZTIgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIG51bV9hY3Rpb25zICs9IDI7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICBvcmdfcG9zLCBvcmdfbGVuLCBvcmdfY2VudGVyLCBjdXJfbGVuOworICAgICAgICBGVF9Qb3MgIGN1cl9wb3MxLCBjdXJfcG9zMiwgZGVsdGExLCBkZWx0YTI7CisKKworICAgICAgICBvcmdfcG9zICAgID0gYW5jaG9yLT5wb3MgKyAoIGVkZ2UtPm9wb3MgLSBhbmNob3ItPm9wb3MgKTsKKyAgICAgICAgb3JnX2xlbiAgICA9IGVkZ2UyLT5vcG9zIC0gZWRnZS0+b3BvczsKKyAgICAgICAgb3JnX2NlbnRlciA9IG9yZ19wb3MgKyAoIG9yZ19sZW4gPj4gMSApOworCisgICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIG9yZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgKTsKKworICAgICAgICBpZiAoIGVkZ2UyLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBBREpVU1Q6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+cG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAoIGVkZ2UyLT5wb3MgLSBjdXJfbGVuICkgLyA2NC4wICkpOworCisgICAgICAgICAgZWRnZS0+cG9zID0gZWRnZTItPnBvcyAtIGN1cl9sZW47CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmICggY3VyX2xlbiA8IDk2ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgdV9vZmYsIGRfb2ZmOworCisKKyAgICAgICAgICBjdXJfcG9zMSA9IEZUX1BJWF9ST1VORCggb3JnX2NlbnRlciApOworCisgICAgICAgICAgaWYgKCBjdXJfbGVuIDw9IDY0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB1X29mZiA9IDMyOworICAgICAgICAgICAgZF9vZmYgPSAzMjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHVfb2ZmID0gMzg7CisgICAgICAgICAgICBkX29mZiA9IDI2OworICAgICAgICAgIH0KKworICAgICAgICAgIGRlbHRhMSA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxIC0gdV9vZmYgKTsKKyAgICAgICAgICBpZiAoIGRlbHRhMSA8IDAgKQorICAgICAgICAgICAgZGVsdGExID0gLWRlbHRhMTsKKworICAgICAgICAgIGRlbHRhMiA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxICsgZF9vZmYgKTsKKyAgICAgICAgICBpZiAoIGRlbHRhMiA8IDAgKQorICAgICAgICAgICAgZGVsdGEyID0gLWRlbHRhMjsKKworICAgICAgICAgIGlmICggZGVsdGExIDwgZGVsdGEyICkKKyAgICAgICAgICAgIGN1cl9wb3MxIC09IHVfb2ZmOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cl9wb3MxICs9IGRfb2ZmOworCisgICAgICAgICAgZWRnZS0+cG9zICA9IGN1cl9wb3MxIC0gY3VyX2xlbiAvIDI7CisgICAgICAgICAgZWRnZTItPnBvcyA9IGN1cl9wb3MxICsgY3VyX2xlbiAvIDI7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBTVEVNOiBlZGdlICVkIChvcG9zPSUuMmYpIGxpbmtlZCB0byAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gJS4yZiBhbmQgJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlIC0gZWRnZXMsIGVkZ2UtPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UyIC0gZWRnZXMsIGVkZ2UyLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5wb3MgLyA2NC4wLCBlZGdlMi0+cG9zIC8gNjQuMCApKTsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIG9yZ19wb3MgICAgPSBhbmNob3ItPnBvcyArICggZWRnZS0+b3BvcyAtIGFuY2hvci0+b3BvcyApOworICAgICAgICAgIG9yZ19sZW4gICAgPSBlZGdlMi0+b3BvcyAtIGVkZ2UtPm9wb3M7CisgICAgICAgICAgb3JnX2NlbnRlciA9IG9yZ19wb3MgKyAoIG9yZ19sZW4gPj4gMSApOworCisgICAgICAgICAgY3VyX2xlbiAgICA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgb3JnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgKTsKKworICAgICAgICAgIGN1cl9wb3MxID0gRlRfUElYX1JPVU5EKCBvcmdfcG9zICk7CisgICAgICAgICAgZGVsdGExICAgPSBjdXJfcG9zMSArICggY3VyX2xlbiA+PiAxICkgLSBvcmdfY2VudGVyOworICAgICAgICAgIGlmICggZGVsdGExIDwgMCApCisgICAgICAgICAgICBkZWx0YTEgPSAtZGVsdGExOworCisgICAgICAgICAgY3VyX3BvczIgPSBGVF9QSVhfUk9VTkQoIG9yZ19wb3MgKyBvcmdfbGVuICkgLSBjdXJfbGVuOworICAgICAgICAgIGRlbHRhMiAgID0gY3VyX3BvczIgKyAoIGN1cl9sZW4gPj4gMSApIC0gb3JnX2NlbnRlcjsKKyAgICAgICAgICBpZiAoIGRlbHRhMiA8IDAgKQorICAgICAgICAgICAgZGVsdGEyID0gLWRlbHRhMjsKKworICAgICAgICAgIGVkZ2UtPnBvcyAgPSAoIGRlbHRhMSA8IGRlbHRhMiApID8gY3VyX3BvczEgOiBjdXJfcG9zMjsKKyAgICAgICAgICBlZGdlMi0+cG9zID0gZWRnZS0+cG9zICsgY3VyX2xlbjsKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNURU06IGVkZ2UgJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgICAgICAgICAgICAgICIgc25hcHBlZCB0byAlLjJmIGFuZCAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZTIgLSBlZGdlcywgZWRnZTItPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsIGVkZ2UyLT5wb3MgLyA2NC4wICkpOworICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisKKyAgICAgICAgZWRnZS0+ZmxhZ3MgIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAmJiBlZGdlLT5wb3MgPCBlZGdlWy0xXS5wb3MgKQorICAgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5wb3MgLyA2NC4wLCBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOworCisgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyNlbmRpZgorCisgICAgICAgICAgZWRnZS0+cG9zID0gZWRnZVstMV0ucG9zOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgbG93ZXJjYXNlIG0ncyBtYWludGFpbiB0aGVpciBzeW1tZXRyeSAqLworCisgICAgLyogSW4gZ2VuZXJhbCwgbG93ZXJjYXNlIG0ncyBoYXZlIHNpeCB2ZXJ0aWNhbCBlZGdlcyBpZiB0aGV5IGFyZSBzYW5zICovCisgICAgLyogc2VyaWYsIG9yIHR3ZWx2ZSBpZiB0aGV5IGFyZSB3aXRoIHNlcmlmcy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgICovCisgICAgLyogYmFzZWQgb24gdGhhdCBhc3N1bXB0aW9uLCBhbmQgc2VlbXMgdG8gd29yayB2ZXJ5IHdlbGwgd2l0aCBtb3N0ICAgICovCisgICAgLyogZmFjZXMuICBIb3dldmVyLCBpZiBmb3IgYSBjZXJ0YWluIGZhY2UgdGhpcyBhc3N1bXB0aW9uIGlzIG5vdCAgICAgICovCisgICAgLyogdHJ1ZSwgdGhlIG0gaXMganVzdCByZW5kZXJlZCBsaWtlIGJlZm9yZS4gIEluIGFkZGl0aW9uLCBhbnkgc3RlbSAgICovCisgICAgLyogY29ycmVjdGlvbiB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byBzeW1tZXRyaWNhbCBnbHlwaHMgKGV2ZW4gaWYgdGhlICovCisgICAgLyogZ2x5cGggaXMgbm90IGFuIG0pLCBzbyB0aGUgcG90ZW50aWFsIGZvciB1bndhbnRlZCBkaXN0b3J0aW9uIGlzICAgICovCisgICAgLyogcmVsYXRpdmVseSBsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBXZSBkb24ndCBoYW5kbGUgaG9yaXpvbnRhbCBlZGdlcyBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkgYXNzdXJlIHRoYXQgKi8KKyAgICAvKiB0aGUgdGhpcmQgKGxvd2VzdCkgc3RlbSBhbGlnbnMgd2l0aCB0aGUgYmFzZSBsaW5lOyBpdCBtaWdodCBlbmQgdXAgKi8KKyAgICAvKiBvbmUgcGl4ZWwgaGlnaGVyIG9yIGxvd2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIG5fZWRnZXMgPSBlZGdlX2xpbWl0IC0gZWRnZXM7CisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogJiYgKCBuX2VkZ2VzID09IDYgfHwgbl9lZGdlcyA9PSAxMiApICkKKyAgICB7CisgICAgICBBRl9FZGdlICBlZGdlMSwgZWRnZTIsIGVkZ2UzOworICAgICAgRlRfUG9zICAgZGlzdDEsIGRpc3QyLCBzcGFuLCBkZWx0YTsKKworCisgICAgICBpZiAoIG5fZWRnZXMgPT0gNiApCisgICAgICB7CisgICAgICAgIGVkZ2UxID0gZWRnZXM7CisgICAgICAgIGVkZ2UyID0gZWRnZXMgKyAyOworICAgICAgICBlZGdlMyA9IGVkZ2VzICsgNDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZWRnZTEgPSBlZGdlcyArIDE7CisgICAgICAgIGVkZ2UyID0gZWRnZXMgKyA1OworICAgICAgICBlZGdlMyA9IGVkZ2VzICsgOTsKKyAgICAgIH0KKworICAgICAgZGlzdDEgPSBlZGdlMi0+b3BvcyAtIGVkZ2UxLT5vcG9zOworICAgICAgZGlzdDIgPSBlZGdlMy0+b3BvcyAtIGVkZ2UyLT5vcG9zOworCisgICAgICBzcGFuID0gZGlzdDEgLSBkaXN0MjsKKyAgICAgIGlmICggc3BhbiA8IDAgKQorICAgICAgICBzcGFuID0gLXNwYW47CisKKyAgICAgIGlmICggc3BhbiA8IDggKQorICAgICAgeworICAgICAgICBkZWx0YSA9IGVkZ2UzLT5wb3MgLSAoIDIgKiBlZGdlMi0+cG9zIC0gZWRnZTEtPnBvcyApOworICAgICAgICBlZGdlMy0+cG9zIC09IGRlbHRhOworICAgICAgICBpZiAoIGVkZ2UzLT5saW5rICkKKyAgICAgICAgICBlZGdlMy0+bGluay0+cG9zIC09IGRlbHRhOworCisgICAgICAgIC8qIG1vdmUgdGhlIHNlcmlmcyBhbG9uZyB3aXRoIHRoZSBzdGVtICovCisgICAgICAgIGlmICggbl9lZGdlcyA9PSAxMiApCisgICAgICAgIHsKKyAgICAgICAgICAoIGVkZ2VzICsgOCApLT5wb3MgLT0gZGVsdGE7CisgICAgICAgICAgKCBlZGdlcyArIDExICktPnBvcyAtPSBkZWx0YTsKKyAgICAgICAgfQorCisgICAgICAgIGVkZ2UzLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisgICAgICAgIGlmICggZWRnZTMtPmxpbmsgKQorICAgICAgICAgIGVkZ2UzLT5saW5rLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBoYXNfc2VyaWZzIHx8ICFhbmNob3IgKQorICAgIHsKKyAgICAgIC8qCisgICAgICAgKiAgbm93IGhpbnQgdGhlIHJlbWFpbmluZyBlZGdlcyAoc2VyaWZzIGFuZCBzaW5nbGUpIGluIG9yZGVyCisgICAgICAgKiAgdG8gY29tcGxldGUgb3VyIHByb2Nlc3NpbmcKKyAgICAgICAqLworICAgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICBkZWx0YTsKKworCisgICAgICAgIGlmICggZWRnZS0+ZmxhZ3MgJiBBRl9FREdFX0RPTkUgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlbHRhID0gMTAwMDsKKworICAgICAgICBpZiAoIGVkZ2UtPnNlcmlmICkKKyAgICAgICAgeworICAgICAgICAgIGRlbHRhID0gZWRnZS0+c2VyaWYtPm9wb3MgLSBlZGdlLT5vcG9zOworICAgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICAgIGRlbHRhID0gLWRlbHRhOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZWx0YSA8IDY0ICsgMTYgKQorICAgICAgICB7CisgICAgICAgICAgYWZfbGF0aW5fYWxpZ25fc2VyaWZfZWRnZSggaGludHMsIGVkZ2UtPnNlcmlmLCBlZGdlICk7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUY6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc2VyaWYgdG8gJWQgKG9wb3M9JS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgIiBhbGlnbmVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5zZXJpZiAtIGVkZ2VzLCBlZGdlLT5zZXJpZi0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+cG9zIC8gNjQuMCApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggIWFuY2hvciApCisgICAgICAgIHsKKyAgICAgICAgICBlZGdlLT5wb3MgPSBGVF9QSVhfUk9VTkQoIGVkZ2UtPm9wb3MgKTsKKyAgICAgICAgICBhbmNob3IgICAgPSBlZGdlOworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFNFUklGX0FOQ0hPUjogZWRnZSAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlLWVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwgZWRnZS0+cG9zIC8gNjQuMCApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBBRl9FZGdlICBiZWZvcmUsIGFmdGVyOworCisKKyAgICAgICAgICBmb3IgKCBiZWZvcmUgPSBlZGdlIC0gMTsgYmVmb3JlID49IGVkZ2VzOyBiZWZvcmUtLSApCisgICAgICAgICAgICBpZiAoIGJlZm9yZS0+ZmxhZ3MgJiBBRl9FREdFX0RPTkUgKQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGZvciAoIGFmdGVyID0gZWRnZSArIDE7IGFmdGVyIDwgZWRnZV9saW1pdDsgYWZ0ZXIrKyApCisgICAgICAgICAgICBpZiAoIGFmdGVyLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKCBiZWZvcmUgPj0gZWRnZXMgJiYgYmVmb3JlIDwgZWRnZSAgICYmCisgICAgICAgICAgICAgICBhZnRlciA8IGVkZ2VfbGltaXQgJiYgYWZ0ZXIgPiBlZGdlICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGFmdGVyLT5vcG9zID09IGJlZm9yZS0+b3BvcyApCisgICAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGJlZm9yZS0+cG9zOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlZGdlLT5wb3MgPSBiZWZvcmUtPnBvcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZWRnZS0+b3BvcyAtIGJlZm9yZS0+b3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlci0+cG9zIC0gYmVmb3JlLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXItPm9wb3MgLSBiZWZvcmUtPm9wb3MgKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUZfTElOSzE6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAlLjJmIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBmcm9tICVkIChvcG9zPSUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgLSBlZGdlcywgYmVmb3JlLT5vcG9zIC8gNjQuMCApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGFuY2hvci0+cG9zICsKKyAgICAgICAgICAgICAgICAgICAgICAgICggKCBlZGdlLT5vcG9zIC0gYW5jaG9yLT5vcG9zICsgMTYgKSAmIH4zMSApOworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgU0VSSUZfTElOSzI6IGVkZ2UgJWQgKG9wb3M9JS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsIGVkZ2UtPnBvcyAvIDY0LjAgKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBudW1fYWN0aW9ucysrOworI2VuZGlmCisgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAmJiBlZGdlLT5wb3MgPCBlZGdlWy0xXS5wb3MgKQorICAgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5wb3MgLyA2NC4wLCBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOworCisgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyNlbmRpZgorICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbLTFdLnBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZWRnZSArIDEgPCBlZGdlX2xpbWl0ICAgICAgICAmJgorICAgICAgICAgICAgIGVkZ2VbMV0uZmxhZ3MgJiBBRl9FREdFX0RPTkUgJiYKKyAgICAgICAgICAgICBlZGdlLT5wb3MgPiBlZGdlWzFdLnBvcyAgICAgICkKKyAgICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+cG9zIC8gNjQuMCwgZWRnZVsxXS5wb3MgLyA2NC4wICkpOworCisgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyNlbmRpZgorCisgICAgICAgICAgZWRnZS0+cG9zID0gZWRnZVsxXS5wb3M7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIGlmICggIW51bV9hY3Rpb25zICkKKyAgICAgIEZUX1RSQUNFNSgoICIgIChub25lKVxuIiApKTsKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworI2VuZGlmCisgIH0KKworCisgIC8qIEFwcGx5IHRoZSBjb21wbGV0ZSBoaW50aW5nIGFsZ29yaXRobSB0byBhIGxhdGluIGdseXBoLiAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9sYXRpbl9oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgaW50ICAgICAgIGRpbTsKKworICAgIEFGX0xhdGluQXhpcyAgYXhpczsKKworCisgICAgZXJyb3IgPSBhZl9nbHlwaF9oaW50c19yZWxvYWQoIGhpbnRzLCBvdXRsaW5lICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBhbmFseXplIGdseXBoIG91dGxpbmUgKi8KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyAgICBpZiAoICggbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYKKyAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fAorICAgICAgICAgQUZfSElOVFNfRE9fSE9SSVpPTlRBTCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNlbHNlCisgICAgaWYgKCBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICkKKyNlbmRpZgorICAgIHsKKyAgICAgIGF4aXMgID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdOworICAgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19kZXRlY3RfZmVhdHVyZXMoIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMtPndpZHRoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMtPndpZHRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9ESU1FTlNJT05fSE9SWiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIEFGX0hJTlRTX0RPX1ZFUlRJQ0FMKCBoaW50cyApICkKKyAgICB7CisgICAgICBheGlzICA9ICZtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXTsKKyAgICAgIGVycm9yID0gYWZfbGF0aW5faGludHNfZGV0ZWN0X2ZlYXR1cmVzKCBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLT53aWR0aF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLT53aWR0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRElNRU5TSU9OX1ZFUlQgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfYmx1ZV9lZGdlcyggaGludHMsIG1ldHJpY3MgKTsKKyAgICB9CisKKyAgICAvKiBncmlkLWZpdCB0aGUgb3V0bGluZSAqLworICAgIGZvciAoIGRpbSA9IDA7IGRpbSA8IEFGX0RJTUVOU0lPTl9NQVg7IGRpbSsrICkKKyAgICB7CisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCisgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnJlbmRlcl9tb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICYmCisgICAgICAgICAgIEFGX0hJTlRTX0RPX1dBUlAoIGhpbnRzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgQUZfV2FycGVyUmVjICB3YXJwZXI7CisgICAgICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CisgICAgICAgIEZUX1BvcyAgICAgICAgZGVsdGE7CisKKworICAgICAgICBhZl93YXJwZXJfY29tcHV0ZSggJndhcnBlciwgaGludHMsIChBRl9EaW1lbnNpb24pZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjYWxlLCAmZGVsdGEgKTsKKyAgICAgICAgYWZfZ2x5cGhfaGludHNfc2NhbGVfZGltKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUsIGRlbHRhICk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworCisgICAgICBpZiAoICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICYmIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGhpbnRzICkgKSB8fAorICAgICAgICAgICAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCAmJiBBRl9ISU5UU19ET19WRVJUSUNBTCggaGludHMgKSApICAgKQorICAgICAgeworICAgICAgICBhZl9sYXRpbl9oaW50X2VkZ2VzKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgICAgYWZfZ2x5cGhfaGludHNfYWxpZ25fZWRnZV9wb2ludHMoIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgICBhZl9nbHlwaF9oaW50c19hbGlnbl9zdHJvbmdfcG9pbnRzKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgICAgYWZfZ2x5cGhfaGludHNfYWxpZ25fd2Vha19wb2ludHMoIGhpbnRzLCAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgfQorICAgIH0KKworICAgIGFmX2dseXBoX2hpbnRzX3NhdmUoIGhpbnRzLCBvdXRsaW5lICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgTCBBIFQgSSBOICAgUyBDIFIgSSBQIFQgICBDIEwgQSBTIFMgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKAorICAgIGFmX2xhdGluX3dyaXRpbmdfc3lzdGVtX2NsYXNzLAorCisgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisKKyAgICBzaXplb2YgKCBBRl9MYXRpbk1ldHJpY3NSZWMgKSwKKworICAgIChBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykgYWZfbGF0aW5fbWV0cmljc19pbml0LAorICAgIChBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMpYWZfbGF0aW5fbWV0cmljc19zY2FsZSwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMpIE5VTEwsCisKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIGFmX2xhdGluX2hpbnRzX2luaXQsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBhZl9sYXRpbl9oaW50c19hcHBseQorICApCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsYXRpbi5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbGF0aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU1NDkyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbGF0aW4uaApAQCAtMCwwICsxLDE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZsYXRpbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtICAgICAgICAgICAgICAgICovCisvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGTEFUSU5fSF9fCisjZGVmaW5lIF9fQUZMQVRJTl9IX18KKworI2luY2x1ZGUgImFmaGludHMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworICAvKiB0aGUgYGxhdGluJyB3cml0aW5nIHN5c3RlbSAqLworCisgIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIGFmX2xhdGluX3dyaXRpbmdfc3lzdGVtX2NsYXNzICkKKworCisgIC8qIGNvbnN0YW50cyBhcmUgZ2l2ZW4gd2l0aCB1bml0c19wZXJfZW0gPT0gMjA0OCBpbiBtaW5kICovCisjZGVmaW5lIEFGX0xBVElOX0NPTlNUQU5UKCBtZXRyaWNzLCBjICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCAoIChjKSAqIChGVF9Mb25nKSggKEFGX0xhdGluTWV0cmljcykobWV0cmljcykgKS0+dW5pdHNfcGVyX2VtICkgLyAyMDQ4ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgIEwgQSBUIEkgTiAgIEcgTCBPIEIgQSBMICAgTSBFIFQgUiBJIEMgUyAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoKKyAgICogIFRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGNvdWxkIGJlIGVtYmVkZGVkIGluIHRoZSBmaWxlIGBhZmxhdGluLmMnOworICAgKiAgdGhleSBoYXZlIGJlZW4gbWFkZSBzZW1pLXB1YmxpYyB0byBhbGxvdyBhbHRlcm5hdGUgd3JpdGluZyBzeXN0ZW0KKyAgICogIGhpbnRlcnMgdG8gcmUtdXNlIHNvbWUgb2YgdGhlbS4KKyAgICovCisKKworI2RlZmluZSBBRl9MQVRJTl9JU19UT1BfQkxVRSggYiApIFwKKyAgICAgICAgICAoIChiKS0+cHJvcGVydGllcyAmIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICkKKyNkZWZpbmUgQUZfTEFUSU5fSVNfTkVVVFJBTF9CTFVFKCBiICkgXAorICAgICAgICAgICggKGIpLT5wcm9wZXJ0aWVzICYgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICkKKyNkZWZpbmUgQUZfTEFUSU5fSVNfWF9IRUlHSFRfQkxVRSggYiApIFwKKyAgICAgICAgICAoIChiKS0+cHJvcGVydGllcyAmIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgKQorI2RlZmluZSBBRl9MQVRJTl9JU19MT05HX0JMVUUoIGIgKSBcCisgICAgICAgICAgKCAoYiktPnByb3BlcnRpZXMgJiBBRl9CTFVFX1BST1BFUlRZX0xBVElOX0xPTkcgKQorCisjZGVmaW5lIEFGX0xBVElOX01BWF9XSURUSFMgIDE2CisKKworI2RlZmluZSBBRl9MQVRJTl9CTFVFX0FDVElWRSAgICAgICggMVUgPDwgMCApIC8qIHpvbmUgaGVpZ2h0IGlzIDw9IDMvNHB4ICAgKi8KKyNkZWZpbmUgQUZfTEFUSU5fQkxVRV9UT1AgICAgICAgICAoIDFVIDw8IDEgKSAvKiB3ZSBoYXZlIGEgdG9wIGJsdWUgem9uZSAgICovCisjZGVmaW5lIEFGX0xBVElOX0JMVUVfTkVVVFJBTCAgICAgKCAxVSA8PCAyICkgLyogd2UgaGF2ZSBuZXV0cmFsIGJsdWUgem9uZSAqLworI2RlZmluZSBBRl9MQVRJTl9CTFVFX0FESlVTVE1FTlQgICggMVUgPDwgMyApIC8qIHVzZWQgZm9yIHNjYWxlIGFkanVzdG1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvcHRpbWl6YXRpb24gICAgICAgICAgICAgICovCisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfTGF0aW5CbHVlUmVjXworICB7CisgICAgQUZfV2lkdGhSZWMgIHJlZjsKKyAgICBBRl9XaWR0aFJlYyAgc2hvb3Q7CisgICAgRlRfVUludCAgICAgIGZsYWdzOworCisgIH0gQUZfTGF0aW5CbHVlUmVjLCAqQUZfTGF0aW5CbHVlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0xhdGluQXhpc1JlY18KKyAgeworICAgIEZUX0ZpeGVkICAgICAgICAgc2NhbGU7CisgICAgRlRfUG9zICAgICAgICAgICBkZWx0YTsKKworICAgIEZUX1VJbnQgICAgICAgICAgd2lkdGhfY291bnQ7ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdXNlZCB3aWR0aHMgKi8KKyAgICBBRl9XaWR0aFJlYyAgICAgIHdpZHRoc1tBRl9MQVRJTl9NQVhfV0lEVEhTXTsgLyogd2lkdGhzIGFycmF5ICAgICAgICAgICovCisgICAgRlRfUG9zICAgICAgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZDsgICAvKiB1c2VkIGZvciBjcmVhdGluZyBlZGdlcyAqLworICAgIEZUX1BvcyAgICAgICAgICAgc3RhbmRhcmRfd2lkdGg7ICAgICAgICAgLyogdGhlIGRlZmF1bHQgc3RlbSB0aGlja25lc3MgKi8KKyAgICBGVF9Cb29sICAgICAgICAgIGV4dHJhX2xpZ2h0OyAgICAgICAgIC8qIGlzIHN0YW5kYXJkIHdpZHRoIHZlcnkgbGlnaHQ/ICovCisKKyAgICAvKiBpZ25vcmVkIGZvciBob3Jpem9udGFsIG1ldHJpY3MgKi8KKyAgICBGVF9VSW50ICAgICAgICAgIGJsdWVfY291bnQ7CisgICAgQUZfTGF0aW5CbHVlUmVjICBibHVlc1tBRl9CTFVFX1NUUklOR1NFVF9NQVhdOworCisgICAgRlRfRml4ZWQgICAgICAgICBvcmdfc2NhbGU7CisgICAgRlRfUG9zICAgICAgICAgICBvcmdfZGVsdGE7CisKKyAgfSBBRl9MYXRpbkF4aXNSZWMsICpBRl9MYXRpbkF4aXM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfTGF0aW5NZXRyaWNzUmVjXworICB7CisgICAgQUZfU3R5bGVNZXRyaWNzUmVjICByb290OworICAgIEZUX1VJbnQgICAgICAgICAgICAgdW5pdHNfcGVyX2VtOworICAgIEFGX0xhdGluQXhpc1JlYyAgICAgYXhpc1tBRl9ESU1FTlNJT05fTUFYXTsKKworICB9IEFGX0xhdGluTWV0cmljc1JlYywgKkFGX0xhdGluTWV0cmljczsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2xhdGluX21ldHJpY3NfaW5pdCggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgZmFjZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfbGF0aW5fbWV0cmljc19zY2FsZSggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICAgIHNjYWxlciApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfbGF0aW5fbWV0cmljc19pbml0X3dpZHRocyggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgIGZhY2UgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKCBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgTCBBIFQgSSBOICAgRyBMIFkgUCBIICAgQSBOIEEgTCBZIFMgSSBTICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFGX0xBVElOX0hJTlRTX0hPUlpfU05BUCAgICAoIDFVIDw8IDAgKSAvKiBzdGVtIHdpZHRoIHNuYXBwaW5nICAqLworI2RlZmluZSBBRl9MQVRJTl9ISU5UU19WRVJUX1NOQVAgICAgKCAxVSA8PCAxICkgLyogc3RlbSBoZWlnaHQgc25hcHBpbmcgKi8KKyNkZWZpbmUgQUZfTEFUSU5fSElOVFNfU1RFTV9BREpVU1QgICggMVUgPDwgMiApIC8qIHN0ZW0gd2lkdGgvaGVpZ2h0ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGp1c3RtZW50ICAgICAgICAgICAqLworI2RlZmluZSBBRl9MQVRJTl9ISU5UU19NT05PICAgICAgICAgKCAxVSA8PCAzICkgLyogbW9ub2Nocm9tZSByZW5kZXJpbmcgKi8KKworCisjZGVmaW5lIEFGX0xBVElOX0hJTlRTX0RPX0hPUlpfU05BUCggaCApICAgICAgICAgICAgIFwKKyAgQUZfSElOVFNfVEVTVF9PVEhFUiggaCwgQUZfTEFUSU5fSElOVFNfSE9SWl9TTkFQICkKKworI2RlZmluZSBBRl9MQVRJTl9ISU5UU19ET19WRVJUX1NOQVAoIGggKSAgICAgICAgICAgICBcCisgIEFGX0hJTlRTX1RFU1RfT1RIRVIoIGgsIEFGX0xBVElOX0hJTlRTX1ZFUlRfU05BUCApCisKKyNkZWZpbmUgQUZfTEFUSU5fSElOVFNfRE9fU1RFTV9BREpVU1QoIGggKSAgICAgICAgICAgICBcCisgIEFGX0hJTlRTX1RFU1RfT1RIRVIoIGgsIEFGX0xBVElOX0hJTlRTX1NURU1fQURKVVNUICkKKworI2RlZmluZSBBRl9MQVRJTl9ISU5UU19ET19NT05PKCBoICkgICAgICAgICAgICAgXAorICBBRl9ISU5UU19URVNUX09USEVSKCBoLCBBRl9MQVRJTl9ISU5UU19NT05PICkKKworCisgIC8qCisgICAqICBUaGUgbmV4dCBmdW5jdGlvbnMgc2hvdWxkbid0IG5vcm1hbGx5IGJlIGV4cG9ydGVkLiAgSG93ZXZlciwgb3RoZXIKKyAgICogIHdyaXRpbmcgc3lzdGVtcyBtaWdodCBsaWtlIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMtaXMuCisgICAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgd2lkdGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1dpZHRoUmVjKiAgIHdpZHRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgYWZfbGF0aW5faGludHNfY29tcHV0ZV9lZGdlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2xhdGluX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgd2lkdGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfV2lkdGhSZWMqICAgd2lkdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApOworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGTEFUSU5fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsYXRpbjIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWY5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsYXRpbjIuYwpAQCAtMCwwICsxLDIzOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbGF0aW4yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgRlRfQURWQU5DRVNfSAorCisjaW5jbHVkZSAiYWZnbG9iYWwuaCIKKyNpbmNsdWRlICJhZmxhdGluLmgiCisjaW5jbHVkZSAiYWZsYXRpbjIuaCIKKyNpbmNsdWRlICJhZmVycm9ycy5oIgorCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyNpbmNsdWRlICJhZndhcnAuaCIKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYWZsYXRpbjIKKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sYXRpbjJfaGludHNfY29tcHV0ZV9zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKTsKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9sYXRpbjJfaGludHNfbGlua19zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICBMIEEgVCBJIE4gICBHIEwgTyBCIEEgTCAgIE0gRSBUIFIgSSBDIFMgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9sYXRpbjJfbWV0cmljc19pbml0X3dpZHRocyggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICkKKyAgeworICAgIC8qIHNjYW4gdGhlIGFycmF5IG9mIHNlZ21lbnRzIGluIGVhY2ggZGlyZWN0aW9uICovCisgICAgQUZfR2x5cGhIaW50c1JlYyAgaGludHNbMV07CisKKworICAgIGFmX2dseXBoX2hpbnRzX2luaXQoIGhpbnRzLCBmYWNlLT5tZW1vcnkgKTsKKworICAgIG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLndpZHRoX2NvdW50ID0gMDsKKyAgICBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXS53aWR0aF9jb3VudCA9IDA7CisKKyAgICB7CisgICAgICBGVF9FcnJvciAgICAgICAgICAgICBlcnJvcjsKKyAgICAgIEZUX1VJbnQgICAgICAgICAgICAgIGdseXBoX2luZGV4OworICAgICAgaW50ICAgICAgICAgICAgICAgICAgZGltOworICAgICAgQUZfTGF0aW5NZXRyaWNzUmVjICAgZHVtbXlbMV07CisgICAgICBBRl9TY2FsZXIgICAgICAgICAgICBzY2FsZXIgPSAmZHVtbXktPnJvb3Quc2NhbGVyOworCisKKyAgICAgIGdseXBoX2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT5yb290LnN0eWxlX2NsYXNzLT5zdGFuZGFyZF9jaGFyICk7CisgICAgICBpZiAoIGdseXBoX2luZGV4ID09IDAgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfTk9fU0NBTEUgKTsKKyAgICAgIGlmICggZXJyb3IgfHwgZmFjZS0+Z2x5cGgtPm91dGxpbmUubl9wb2ludHMgPD0gMCApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfWkVSTyggZHVtbXkgKTsKKworICAgICAgZHVtbXktPnVuaXRzX3Blcl9lbSA9IG1ldHJpY3MtPnVuaXRzX3Blcl9lbTsKKyAgICAgIHNjYWxlci0+eF9zY2FsZSAgICAgPSBzY2FsZXItPnlfc2NhbGUgPSAweDEwMDAwTDsKKyAgICAgIHNjYWxlci0+eF9kZWx0YSAgICAgPSBzY2FsZXItPnlfZGVsdGEgPSAwOworICAgICAgc2NhbGVyLT5mYWNlICAgICAgICA9IGZhY2U7CisgICAgICBzY2FsZXItPnJlbmRlcl9tb2RlID0gRlRfUkVOREVSX01PREVfTk9STUFMOworICAgICAgc2NhbGVyLT5mbGFncyAgICAgICA9IDA7CisKKyAgICAgIGFmX2dseXBoX2hpbnRzX3Jlc2NhbGUoIGhpbnRzLCAoQUZfU3R5bGVNZXRyaWNzKWR1bW15ICk7CisKKyAgICAgIGVycm9yID0gYWZfZ2x5cGhfaGludHNfcmVsb2FkKCBoaW50cywgJmZhY2UtPmdseXBoLT5vdXRsaW5lICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBmb3IgKCBkaW0gPSAwOyBkaW0gPCBBRl9ESU1FTlNJT05fTUFYOyBkaW0rKyApCisgICAgICB7CisgICAgICAgIEFGX0xhdGluQXhpcyAgYXhpcyAgICA9ICZtZXRyaWNzLT5heGlzW2RpbV07CisgICAgICAgIEFGX0F4aXNIaW50cyAgYXhoaW50cyA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgICAgICBBRl9TZWdtZW50ICAgIHNlZywgbGltaXQsIGxpbms7CisgICAgICAgIEZUX1VJbnQgICAgICAgbnVtX3dpZHRocyA9IDA7CisKKworICAgICAgICBlcnJvciA9IGFmX2xhdGluMl9oaW50c19jb21wdXRlX3NlZ21lbnRzKCBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGltZW5zaW9uKWRpbSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgYWZfbGF0aW4yX2hpbnRzX2xpbmtfc2VnbWVudHMoIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGltZW5zaW9uKWRpbSApOworCisgICAgICAgIHNlZyAgID0gYXhoaW50cy0+c2VnbWVudHM7CisgICAgICAgIGxpbWl0ID0gc2VnICsgYXhoaW50cy0+bnVtX3NlZ21lbnRzOworCisgICAgICAgIGZvciAoIDsgc2VnIDwgbGltaXQ7IHNlZysrICkKKyAgICAgICAgeworICAgICAgICAgIGxpbmsgPSBzZWctPmxpbms7CisKKyAgICAgICAgICAvKiB3ZSBvbmx5IGNvbnNpZGVyIHN0ZW0gc2VnbWVudHMgdGhlcmUhICovCisgICAgICAgICAgaWYgKCBsaW5rICYmIGxpbmstPmxpbmsgPT0gc2VnICYmIGxpbmsgPiBzZWcgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICAgICAgICBkaXN0ID0gc2VnLT5wb3MgLSBsaW5rLT5wb3M7CisgICAgICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICAgICAgZGlzdCA9IC1kaXN0OworCisgICAgICAgICAgICBpZiAoIG51bV93aWR0aHMgPCBBRl9MQVRJTl9NQVhfV0lEVEhTICkKKyAgICAgICAgICAgICAgYXhpcy0+d2lkdGhzW251bV93aWR0aHMrK10ub3JnID0gZGlzdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhZl9zb3J0X3dpZHRocyggbnVtX3dpZHRocywgYXhpcy0+d2lkdGhzICk7CisgICAgICAgIGF4aXMtPndpZHRoX2NvdW50ID0gbnVtX3dpZHRoczsKKyAgICAgIH0KKworICBFeGl0OgorICAgICAgZm9yICggZGltID0gMDsgZGltIDwgQUZfRElNRU5TSU9OX01BWDsgZGltKysgKQorICAgICAgeworICAgICAgICBBRl9MYXRpbkF4aXMgIGF4aXMgPSAmbWV0cmljcy0+YXhpc1tkaW1dOworICAgICAgICBGVF9Qb3MgICAgICAgIHN0ZHc7CisKKworICAgICAgICBzdGR3ID0gKCBheGlzLT53aWR0aF9jb3VudCA+IDAgKQorICAgICAgICAgICAgICAgICA/IGF4aXMtPndpZHRoc1swXS5vcmcKKyAgICAgICAgICAgICAgICAgOiBBRl9MQVRJTl9DT05TVEFOVCggbWV0cmljcywgNTAgKTsKKworICAgICAgICAvKiBsZXQncyB0cnkgMjAlIG9mIHRoZSBzbWFsbGVzdCB3aWR0aCAqLworICAgICAgICBheGlzLT5lZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IHN0ZHcgLyA1OworICAgICAgICBheGlzLT5zdGFuZGFyZF93aWR0aCAgICAgICAgICA9IHN0ZHc7CisgICAgICAgIGF4aXMtPmV4dHJhX2xpZ2h0ICAgICAgICAgICAgID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhZl9nbHlwaF9oaW50c19kb25lKCBoaW50cyApOworICB9CisKKworCisjZGVmaW5lIEFGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlMgIDEyCisKKworICBzdGF0aWMgY29uc3QgY2hhciBhZl9sYXRpbjJfYmx1ZV9jaGFyc1tBRl9MQVRJTl9NQVhfQkxVRVNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlMrMV0gPQorICB7CisgICAgIlRIRVpPQ1FTIiwKKyAgICAiSEVaTE9DVVMiLAorICAgICJmaWprZGJoIiwKKyAgICAieHpyb2VzYyIsCisgICAgInh6cm9lc2MiLAorICAgICJwcWdqeSIKKyAgfTsKKworCisgIHN0YXRpYyB2b2lkCisgIGFmX2xhdGluMl9tZXRyaWNzX2luaXRfYmx1ZXMoIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICkKKyAgeworICAgIEZUX1BvcyAgICAgICAgZmxhdHMgW0FGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlNdOworICAgIEZUX1BvcyAgICAgICAgcm91bmRzW0FGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlNdOworICAgIEZUX0ludCAgICAgICAgbnVtX2ZsYXRzOworICAgIEZUX0ludCAgICAgICAgbnVtX3JvdW5kczsKKyAgICBGVF9JbnQgICAgICAgIGJiOworICAgIEFGX0xhdGluQmx1ZSAgYmx1ZTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIEFGX0xhdGluQXhpcyAgYXhpcyAgPSAmbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fVkVSVF07CisgICAgRlRfR2x5cGhTbG90ICBnbHlwaCA9IGZhY2UtPmdseXBoOworCisKKyAgICAvKiB3ZSBjb21wdXRlIHRoZSBibHVlcyBzaW1wbHkgYnkgbG9hZGluZyBlYWNoIGNoYXJhY3RlciBmcm9tIHRoZSAgICAgKi8KKyAgICAvKiAnYWZfbGF0aW4yX2JsdWVfY2hhcnNbYmx1ZXNdJyBzdHJpbmcsIHRoZW4gY29tcHV0ZSBpdHMgdG9wLW1vc3Qgb3IgKi8KKyAgICAvKiBib3R0b20tbW9zdCBwb2ludHMgKGRlcGVuZGluZyBvbiBgQUZfSVNfVE9QX0JMVUUnKSAgICAgICAgICAgICAgICAgKi8KKworICAgIEZUX1RSQUNFNSgoICJibHVlIHpvbmVzIGNvbXB1dGF0aW9uXG4iCisgICAgICAgICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT1cblxuIiApKTsKKworICAgIGZvciAoIGJiID0gMDsgYmIgPCBBRl9MQVRJTl9CTFVFX01BWDsgYmIrKyApCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgICAgID0gYWZfbGF0aW4yX2JsdWVfY2hhcnNbYmJdOworICAgICAgY29uc3QgY2hhciogIGxpbWl0ID0gcCArIEFGX0xBVElOX01BWF9URVNUX0NIQVJBQ1RFUlM7CisgICAgICBGVF9Qb3MqICAgICAgYmx1ZV9yZWY7CisgICAgICBGVF9Qb3MqICAgICAgYmx1ZV9zaG9vdDsKKworCisgICAgICBGVF9UUkFDRTUoKCAiYmx1ZSB6b25lICVkOlxuIiwgYmIgKSk7CisKKyAgICAgIG51bV9mbGF0cyAgPSAwOworICAgICAgbnVtX3JvdW5kcyA9IDA7CisKKyAgICAgIGZvciAoIDsgcCA8IGxpbWl0ICYmICpwOyBwKysgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleDsKKyAgICAgICAgRlRfSW50ICAgICAgYmVzdF9wb2ludCwgYmVzdF95LCBiZXN0X2ZpcnN0LCBiZXN0X2xhc3Q7CisgICAgICAgIEZUX1ZlY3RvciogIHBvaW50czsKKyAgICAgICAgRlRfQm9vbCAgICAgcm91bmQ7CisKKworICAgICAgICAvKiBsb2FkIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGZhY2UgLS0gc2tpcCB1bmtub3duIG9yIGVtcHR5IG9uZXMgKi8KKyAgICAgICAgZ2x5cGhfaW5kZXggPSBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgKEZUX1VJbnQpKnAgKTsKKyAgICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LCBGVF9MT0FEX05PX1NDQUxFICk7CisgICAgICAgIGlmICggZXJyb3IgfHwgZ2x5cGgtPm91dGxpbmUubl9wb2ludHMgPD0gMCApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogbm93IGNvbXB1dGUgbWluIG9yIG1heCBwb2ludCBpbmRpY2VzIGFuZCBjb29yZGluYXRlcyAqLworICAgICAgICBwb2ludHMgICAgICA9IGdseXBoLT5vdXRsaW5lLnBvaW50czsKKyAgICAgICAgYmVzdF9wb2ludCAgPSAtMTsKKyAgICAgICAgYmVzdF95ICAgICAgPSAwOyAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworICAgICAgICBiZXN0X2ZpcnN0ICA9IDA7ICAvKiBkaXR0byAqLworICAgICAgICBiZXN0X2xhc3QgICA9IDA7ICAvKiBkaXR0byAqLworCisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgIG5uOworICAgICAgICAgIEZUX0ludCAgZmlyc3QgPSAwOworICAgICAgICAgIEZUX0ludCAgbGFzdCAgPSAtMTsKKworCisgICAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IGdseXBoLT5vdXRsaW5lLm5fY29udG91cnM7IGZpcnN0ID0gbGFzdCsxLCBubisrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIG9sZF9iZXN0X3BvaW50ID0gYmVzdF9wb2ludDsKKyAgICAgICAgICAgIEZUX0ludCAgcHA7CisKKworICAgICAgICAgICAgbGFzdCA9IGdseXBoLT5vdXRsaW5lLmNvbnRvdXJzW25uXTsKKworICAgICAgICAgICAgLyogQXZvaWQgc2luZ2xlLXBvaW50IGNvbnRvdXJzIHNpbmNlIHRoZXkgYXJlIG5ldmVyIHJhc3Rlcml6ZWQuICovCisgICAgICAgICAgICAvKiBJbiBzb21lIGZvbnRzLCB0aGV5IGNvcnJlc3BvbmQgdG8gbWFyayBhdHRhY2htZW50IHBvaW50cyAgICAgKi8KKyAgICAgICAgICAgIC8qIHdoaWNoIGFyZSB3YXkgb3V0c2lkZSBvZiB0aGUgZ2x5cGgncyByZWFsIG91dGxpbmUuICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBsYXN0ID09IGZpcnN0ICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCBBRl9MQVRJTl9JU19UT1BfQkxVRSggYmIgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoIHBwID0gZmlyc3Q7IHBwIDw9IGxhc3Q7IHBwKysgKQorICAgICAgICAgICAgICAgIGlmICggYmVzdF9wb2ludCA8IDAgfHwgcG9pbnRzW3BwXS55ID4gYmVzdF95ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBiZXN0X3BvaW50ID0gcHA7CisgICAgICAgICAgICAgICAgICBiZXN0X3kgICAgID0gcG9pbnRzW3BwXS55OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yICggcHAgPSBmaXJzdDsgcHAgPD0gbGFzdDsgcHArKyApCisgICAgICAgICAgICAgICAgaWYgKCBiZXN0X3BvaW50IDwgMCB8fCBwb2ludHNbcHBdLnkgPCBiZXN0X3kgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGJlc3RfcG9pbnQgPSBwcDsKKyAgICAgICAgICAgICAgICAgIGJlc3RfeSAgICAgPSBwb2ludHNbcHBdLnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGJlc3RfcG9pbnQgIT0gb2xkX2Jlc3RfcG9pbnQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiZXN0X2ZpcnN0ID0gZmlyc3Q7CisgICAgICAgICAgICAgIGJlc3RfbGFzdCAgPSBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICAlYyAgJWQiLCAqcCwgYmVzdF95ICkpOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGNoZWNrIHdoZXRoZXIgdGhlIHBvaW50IGJlbG9uZ3MgdG8gYSBzdHJhaWdodCBvciByb3VuZCAgICovCisgICAgICAgIC8qIHNlZ21lbnQ7IHdlIGZpcnN0IG5lZWQgdG8gZmluZCBpbiB3aGljaCBjb250b3VyIHRoZSBleHRyZW11bSAqLworICAgICAgICAvKiBsaWVzLCB0aGVuIGluc3BlY3QgaXRzIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50cyAgICAgICAgICAgICAgKi8KKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgYmVzdF94ID0gcG9pbnRzW2Jlc3RfcG9pbnRdLng7CisgICAgICAgICAgRlRfSW50ICBzdGFydCwgZW5kLCBwcmV2LCBuZXh0OworICAgICAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICAgICAgLyogbm93IGxvb2sgZm9yIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBwb2ludHMgdGhhdCBhcmUgbm90IG9uIHRoZSAqLworICAgICAgICAgIC8qIHNhbWUgWSBjb29yZGluYXRlLiAgVGhyZXNob2xkIHRoZSBgY2xvc2VuZXNzJy4uLiAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBzdGFydCA9IGVuZCA9IGJlc3RfcG9pbnQ7CisKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIHByZXYgPSBzdGFydCAtIDE7CisgICAgICAgICAgICBpZiAoIHByZXYgPCBiZXN0X2ZpcnN0ICkKKyAgICAgICAgICAgICAgcHJldiA9IGJlc3RfbGFzdDsKKworICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW3ByZXZdLnkgLSBiZXN0X3kgKTsKKyAgICAgICAgICAgIC8qIGFjY2VwdCBhIHNtYWxsIGRpc3RhbmNlIG9yIGEgc21hbGwgYW5nbGUgKGJvdGggdmFsdWVzIGFyZSAqLworICAgICAgICAgICAgLyogaGV1cmlzdGljOyB2YWx1ZSAyMCBjb3JyZXNwb25kcyB0byBhcHByb3guIDIuOSBkZWdyZWVzKSAgICovCisgICAgICAgICAgICBpZiAoIGRpc3QgPiA1ICkKKyAgICAgICAgICAgICAgaWYgKCBGVF9BQlMoIHBvaW50c1twcmV2XS54IC0gYmVzdF94ICkgPD0gMjAgKiBkaXN0ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgc3RhcnQgPSBwcmV2OworCisgICAgICAgICAgfSB3aGlsZSAoIHN0YXJ0ICE9IGJlc3RfcG9pbnQgKTsKKworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgbmV4dCA9IGVuZCArIDE7CisgICAgICAgICAgICBpZiAoIG5leHQgPiBiZXN0X2xhc3QgKQorICAgICAgICAgICAgICBuZXh0ID0gYmVzdF9maXJzdDsKKworICAgICAgICAgICAgZGlzdCA9IEZUX0FCUyggcG9pbnRzW25leHRdLnkgLSBiZXN0X3kgKTsKKyAgICAgICAgICAgIGlmICggZGlzdCA+IDUgKQorICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcG9pbnRzW25leHRdLnggLSBiZXN0X3ggKSA8PSAyMCAqIGRpc3QgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBlbmQgPSBuZXh0OworCisgICAgICAgICAgfSB3aGlsZSAoIGVuZCAhPSBiZXN0X3BvaW50ICk7CisKKyAgICAgICAgICAvKiBub3csIHNldCB0aGUgYHJvdW5kJyBmbGFnIGRlcGVuZGluZyBvbiB0aGUgc2VnbWVudCdzIGtpbmQgKi8KKyAgICAgICAgICByb3VuZCA9IEZUX0JPT0woCisgICAgICAgICAgICBGVF9DVVJWRV9UQUcoIGdseXBoLT5vdXRsaW5lLnRhZ3Nbc3RhcnRdICkgIT0gRlRfQ1VSVkVfVEFHX09OIHx8CisgICAgICAgICAgICBGVF9DVVJWRV9UQUcoIGdseXBoLT5vdXRsaW5lLnRhZ3NbIGVuZCBdICkgIT0gRlRfQ1VSVkVfVEFHX09OICk7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICglcylcbiIsIHJvdW5kID8gInJvdW5kIiA6ICJmbGF0IiApKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcm91bmQgKQorICAgICAgICAgIHJvdW5kc1tudW1fcm91bmRzKytdID0gYmVzdF95OworICAgICAgICBlbHNlCisgICAgICAgICAgZmxhdHNbbnVtX2ZsYXRzKytdICAgPSBiZXN0X3k7CisgICAgICB9CisKKyAgICAgIGlmICggbnVtX2ZsYXRzID09IDAgJiYgbnVtX3JvdW5kcyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogIHdlIGNvdWxkbid0IGZpbmQgYSBzaW5nbGUgZ2x5cGggdG8gY29tcHV0ZSB0aGlzIGJsdWUgem9uZSwKKyAgICAgICAgICogIHdlIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCB0aGVuCisgICAgICAgICAqLworICAgICAgICBGVF9UUkFDRTUoKCAiICBlbXB0eVxuIiApKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIHdlIGhhdmUgY29tcHV0ZWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBgcm91bmRzJyBhbmQgYGZsYXRzJyB0YWJsZXMsICovCisgICAgICAvKiBub3cgZGV0ZXJtaW5lIHRoZSByZWZlcmVuY2UgYW5kIG92ZXJzaG9vdCBwb3NpdGlvbiBvZiB0aGUgYmx1ZSAtLSAqLworICAgICAgLyogd2Ugc2ltcGx5IHRha2UgdGhlIG1lZGlhbiB2YWx1ZSBhZnRlciBhIHNpbXBsZSBzb3J0ICAgICAgICAgICAgICAgKi8KKyAgICAgIGFmX3NvcnRfcG9zKCBudW1fcm91bmRzLCByb3VuZHMgKTsKKyAgICAgIGFmX3NvcnRfcG9zKCBudW1fZmxhdHMsICBmbGF0cyApOworCisgICAgICBibHVlICAgICAgID0gJiBheGlzLT5ibHVlc1theGlzLT5ibHVlX2NvdW50XTsKKyAgICAgIGJsdWVfcmVmICAgPSAmIGJsdWUtPnJlZi5vcmc7CisgICAgICBibHVlX3Nob290ID0gJiBibHVlLT5zaG9vdC5vcmc7CisKKyAgICAgIGF4aXMtPmJsdWVfY291bnQrKzsKKworICAgICAgaWYgKCBudW1fZmxhdHMgPT0gMCApCisgICAgICB7CisgICAgICAgICpibHVlX3JlZiAgID0KKyAgICAgICAgKmJsdWVfc2hvb3QgPSByb3VuZHNbbnVtX3JvdW5kcyAvIDJdOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIG51bV9yb3VuZHMgPT0gMCApCisgICAgICB7CisgICAgICAgICpibHVlX3JlZiAgID0KKyAgICAgICAgKmJsdWVfc2hvb3QgPSBmbGF0c1tudW1fZmxhdHMgLyAyXTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgKmJsdWVfcmVmICAgPSBmbGF0c1tudW1fZmxhdHMgLyAyXTsKKyAgICAgICAgKmJsdWVfc2hvb3QgPSByb3VuZHNbbnVtX3JvdW5kcyAvIDJdOworICAgICAgfQorCisgICAgICAvKiB0aGVyZSBhcmUgc29tZXRpbWVzIHByb2JsZW1zOiBpZiB0aGUgb3ZlcnNob290IHBvc2l0aW9uIG9mIHRvcCAgICAgKi8KKyAgICAgIC8qIHpvbmVzIGlzIHVuZGVyIGl0cyByZWZlcmVuY2UgcG9zaXRpb24sIG9yIHRoZSBvcHBvc2l0ZSBmb3IgYm90dG9tICAqLworICAgICAgLyogem9uZXMuICBXZSBtdXN0IHRodXMgY2hlY2sgZXZlcnl0aGluZyB0aGVyZSBhbmQgY29ycmVjdCB0aGUgZXJyb3JzICovCisgICAgICBpZiAoICpibHVlX3Nob290ICE9ICpibHVlX3JlZiApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgIHJlZiAgICAgID0gKmJsdWVfcmVmOworICAgICAgICBGVF9Qb3MgICBzaG9vdCAgICA9ICpibHVlX3Nob290OworICAgICAgICBGVF9Cb29sICBvdmVyX3JlZiA9IEZUX0JPT0woIHNob290ID4gcmVmICk7CisKKworICAgICAgICBpZiAoIEFGX0xBVElOX0lTX1RPUF9CTFVFKCBiYiApIF4gb3Zlcl9yZWYgKQorICAgICAgICB7CisgICAgICAgICAgKmJsdWVfcmVmICAgPQorICAgICAgICAgICpibHVlX3Nob290ID0gKCBzaG9vdCArIHJlZiApIC8gMjsKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIFtvdmVyc2hvb3Qgc21hbGxlciB0aGFuIHJlZmVyZW5jZSwiCisgICAgICAgICAgICAgICAgICAgICAgIiB0YWtpbmcgbWVhbiB2YWx1ZV1cbiIgKSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYmx1ZS0+ZmxhZ3MgPSAwOworICAgICAgaWYgKCBBRl9MQVRJTl9JU19UT1BfQkxVRSggYmIgKSApCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0xBVElOX0JMVUVfVE9QOworCisgICAgICAvKgorICAgICAgICogVGhlIGZvbGxvd2luZyBmbGFnIGlzIHVzZWQgbGF0ZXIgdG8gYWRqdXN0IHRoZSB5IGFuZCB4IHNjYWxlcworICAgICAgICogaW4gb3JkZXIgdG8gb3B0aW1pemUgdGhlIHBpeGVsIGdyaWQgYWxpZ25tZW50IG9mIHRoZSB0b3Agb2Ygc21hbGwKKyAgICAgICAqIGxldHRlcnMuCisgICAgICAgKi8KKyAgICAgIGlmICggQUZfTEFUSU5fSVNfWF9IRUlHSFRfQkxVRSggYmIgKSApCisgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0xBVElOX0JMVUVfQURKVVNUTUVOVDsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgICAtPiByZWZlcmVuY2UgPSAlbGRcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgICAgb3ZlcnNob290ID0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgKmJsdWVfcmVmLCAqYmx1ZV9zaG9vdCApKTsKKyAgICB9CisKKyAgICByZXR1cm47CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluMl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgZmFjZSApCisgIHsKKyAgICBGVF9VSW50ICAgaTsKKyAgICBGVF9Cb29sICAgc3RhcnRlZCA9IDAsIHNhbWVfd2lkdGggPSAxOworICAgIEZUX0ZpeGVkICBhZHZhbmNlLCBvbGRfYWR2YW5jZSA9IDA7CisKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgYWxsIEFTQ0lJIGRpZ2l0cyBoYXZlIHRoZSBzYW1lIGFkdmFuY2Ugd2lkdGg7ICovCisgICAgLyogZGlnaXQgYDAnIGlzIDB4MzAgaW4gYWxsIHN1cHBvcnRlZCBjaGFybWFwcyAgICAgICAgICAgICAgICAgKi8KKyAgICBmb3IgKCBpID0gMHgzMDsgaSA8PSAweDM5OyBpKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIGdseXBoX2luZGV4OworCisKKyAgICAgIGdseXBoX2luZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGkgKTsKKyAgICAgIGlmICggZ2x5cGhfaW5kZXggPT0gMCApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoIEZUX0dldF9BZHZhbmNlKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfTk9fU0NBTEUgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX05PX0hJTlRJTkcgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkdmFuY2UgKSApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoIHN0YXJ0ZWQgKQorICAgICAgeworICAgICAgICBpZiAoIGFkdmFuY2UgIT0gb2xkX2FkdmFuY2UgKQorICAgICAgICB7CisgICAgICAgICAgc2FtZV93aWR0aCA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgb2xkX2FkdmFuY2UgPSBhZHZhbmNlOworICAgICAgICBzdGFydGVkICAgICA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgbWV0cmljcy0+cm9vdC5kaWdpdHNfaGF2ZV9zYW1lX3dpZHRoID0gc2FtZV93aWR0aDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGFmX2xhdGluMl9tZXRyaWNzX2luaXQoIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9DaGFyTWFwICBvbGRtYXAgPSBmYWNlLT5jaGFybWFwOworICAgIEZUX1VJbnQgICAgIGVlOworCisgICAgc3RhdGljIGNvbnN0IEZUX0VuY29kaW5nICBsYXRpbl9lbmNvZGluZ3NbXSA9CisgICAgeworICAgICAgRlRfRU5DT0RJTkdfVU5JQ09ERSwKKyAgICAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOLAorICAgICAgRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQsCisgICAgICBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xLAorICAgICAgRlRfRU5DT0RJTkdfTk9ORSAgLyogZW5kIG9mIGxpc3QgKi8KKyAgICB9OworCisKKyAgICBtZXRyaWNzLT51bml0c19wZXJfZW0gPSBmYWNlLT51bml0c19wZXJfRU07CisKKyAgICAvKiBkbyB3ZSBoYXZlIGEgbGF0aW4gY2hhcm1hcCBpbiB0aGVyZT8gKi8KKyAgICBmb3IgKCBlZSA9IDA7IGxhdGluX2VuY29kaW5nc1tlZV0gIT0gRlRfRU5DT0RJTkdfTk9ORTsgZWUrKyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9TZWxlY3RfQ2hhcm1hcCggZmFjZSwgbGF0aW5fZW5jb2RpbmdzW2VlXSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgYWZfbGF0aW4yX21ldHJpY3NfaW5pdF93aWR0aHMoIG1ldHJpY3MsIGZhY2UgKTsKKyAgICAgIGFmX2xhdGluMl9tZXRyaWNzX2luaXRfYmx1ZXMoIG1ldHJpY3MsIGZhY2UgKTsKKyAgICAgIGFmX2xhdGluMl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyggbWV0cmljcywgZmFjZSApOworICAgIH0KKworICAgIEZUX1NldF9DaGFybWFwKCBmYWNlLCBvbGRtYXAgKTsKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBhZl9sYXRpbjJfbWV0cmljc19zY2FsZV9kaW0oIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICAgIHNjYWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICAgIGRpbSApCisgIHsKKyAgICBGVF9GaXhlZCAgICAgIHNjYWxlOworICAgIEZUX1BvcyAgICAgICAgZGVsdGE7CisgICAgQUZfTGF0aW5BeGlzICBheGlzOworICAgIEZUX1VJbnQgICAgICAgbm47CisKKworICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICB7CisgICAgICBzY2FsZSA9IHNjYWxlci0+eF9zY2FsZTsKKyAgICAgIGRlbHRhID0gc2NhbGVyLT54X2RlbHRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2NhbGUgPSBzY2FsZXItPnlfc2NhbGU7CisgICAgICBkZWx0YSA9IHNjYWxlci0+eV9kZWx0YTsKKyAgICB9CisKKyAgICBheGlzID0gJm1ldHJpY3MtPmF4aXNbZGltXTsKKworICAgIGlmICggYXhpcy0+b3JnX3NjYWxlID09IHNjYWxlICYmIGF4aXMtPm9yZ19kZWx0YSA9PSBkZWx0YSApCisgICAgICByZXR1cm47CisKKyAgICBheGlzLT5vcmdfc2NhbGUgPSBzY2FsZTsKKyAgICBheGlzLT5vcmdfZGVsdGEgPSBkZWx0YTsKKworICAgIC8qCisgICAgICogY29ycmVjdCBZIHNjYWxlIHRvIG9wdGltaXplIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHRvcCBvZiBzbWFsbAorICAgICAqIGxldHRlcnMgdG8gdGhlIHBpeGVsIGdyaWQKKyAgICAgKi8KKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApCisgICAgeworICAgICAgQUZfTGF0aW5BeGlzICB2YXhpcyA9ICZtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXTsKKyAgICAgIEFGX0xhdGluQmx1ZSAgYmx1ZSA9IE5VTEw7CisKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IHZheGlzLT5ibHVlX2NvdW50OyBubisrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCB2YXhpcy0+Ymx1ZXNbbm5dLmZsYWdzICYgQUZfTEFUSU5fQkxVRV9BREpVU1RNRU5UICkKKyAgICAgICAgeworICAgICAgICAgIGJsdWUgPSAmdmF4aXMtPmJsdWVzW25uXTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIGJsdWUgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgICBzY2FsZWQ7CisgICAgICAgIEZUX1BvcyAgIHRocmVzaG9sZDsKKyAgICAgICAgRlRfUG9zICAgZml0dGVkOworICAgICAgICBGVF9VSW50ICBsaW1pdDsKKyAgICAgICAgRlRfVUludCAgcHBlbTsKKworCisgICAgICAgIHNjYWxlZCAgICA9IEZUX011bEZpeCggYmx1ZS0+c2hvb3Qub3JnLCBzY2FsZXItPnlfc2NhbGUgKTsKKyAgICAgICAgcHBlbSAgICAgID0gbWV0cmljcy0+cm9vdC5zY2FsZXIuZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgICAgIGxpbWl0ICAgICA9IG1ldHJpY3MtPnJvb3QuZ2xvYmFscy0+aW5jcmVhc2VfeF9oZWlnaHQ7CisgICAgICAgIHRocmVzaG9sZCA9IDQwOworCisgICAgICAgIC8qIGlmIHRoZSBgaW5jcmVhc2UteC1oZWlnaHQnIHByb3BlcnR5IGlzIGFjdGl2ZSwgKi8KKyAgICAgICAgLyogd2Ugcm91bmQgdXAgbXVjaCBtb3JlIG9mdGVuICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcGVtIDw9IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgcHBlbSA+PSBBRl9QUk9QX0lOQ1JFQVNFX1hfSEVJR0hUX01JTiApCisgICAgICAgICAgdGhyZXNob2xkID0gNTI7CisKKyAgICAgICAgZml0dGVkID0gKCBzY2FsZWQgKyB0aHJlc2hvbGQgKSAmIH42MzsKKworI2lmIDEKKyAgICAgICAgaWYgKCBzY2FsZWQgIT0gZml0dGVkICkKKyAgICAgICAgeworICAgICAgICAgIHNjYWxlID0gRlRfTXVsRGl2KCBzY2FsZSwgZml0dGVkLCBzY2FsZWQgKTsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiPT0gc2NhbGVkIHgtdG9wID0gJS4yZyIKKyAgICAgICAgICAgICAgICAgICAgICAiICBmaXR0ZWQgPSAlLjJnLCBzY2FsaW5nID0gJS40Z1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgLyA2NC4wLCBmaXR0ZWQgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgICggZml0dGVkICogMS4wICkgLyBzY2FsZWQgKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgfQorICAgIH0KKworICAgIGF4aXMtPnNjYWxlID0gc2NhbGU7CisgICAgYXhpcy0+ZGVsdGEgPSBkZWx0YTsKKworICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICB7CisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci54X3NjYWxlID0gc2NhbGU7CisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci54X2RlbHRhID0gZGVsdGE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci55X3NjYWxlID0gc2NhbGU7CisgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci55X2RlbHRhID0gZGVsdGE7CisgICAgfQorCisgICAgLyogc2NhbGUgdGhlIHN0YW5kYXJkIHdpZHRocyAqLworICAgIGZvciAoIG5uID0gMDsgbm4gPCBheGlzLT53aWR0aF9jb3VudDsgbm4rKyApCisgICAgeworICAgICAgQUZfV2lkdGggIHdpZHRoID0gYXhpcy0+d2lkdGhzICsgbm47CisKKworICAgICAgd2lkdGgtPmN1ciA9IEZUX011bEZpeCggd2lkdGgtPm9yZywgc2NhbGUgKTsKKyAgICAgIHdpZHRoLT5maXQgPSB3aWR0aC0+Y3VyOworICAgIH0KKworICAgIC8qIGFuIGV4dHJhLWxpZ2h0IGF4aXMgY29ycmVzcG9uZHMgdG8gYSBzdGFuZGFyZCB3aWR0aCB0aGF0IGlzICovCisgICAgLyogc21hbGxlciB0aGFuIDUvOCBwaXhlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBheGlzLT5leHRyYV9saWdodCA9CisgICAgICAoRlRfQm9vbCkoIEZUX011bEZpeCggYXhpcy0+c3RhbmRhcmRfd2lkdGgsIHNjYWxlICkgPCAzMiArIDggKTsKKworICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICkKKyAgICB7CisgICAgICAvKiBzY2FsZSB0aGUgYmx1ZSB6b25lcyAqLworICAgICAgZm9yICggbm4gPSAwOyBubiA8IGF4aXMtPmJsdWVfY291bnQ7IG5uKysgKQorICAgICAgeworICAgICAgICBBRl9MYXRpbkJsdWUgIGJsdWUgPSAmYXhpcy0+Ymx1ZXNbbm5dOworICAgICAgICBGVF9Qb3MgICAgICAgIGRpc3Q7CisKKworICAgICAgICBibHVlLT5yZWYuY3VyICAgPSBGVF9NdWxGaXgoIGJsdWUtPnJlZi5vcmcsIHNjYWxlICkgKyBkZWx0YTsKKyAgICAgICAgYmx1ZS0+cmVmLmZpdCAgID0gYmx1ZS0+cmVmLmN1cjsKKyAgICAgICAgYmx1ZS0+c2hvb3QuY3VyID0gRlRfTXVsRml4KCBibHVlLT5zaG9vdC5vcmcsIHNjYWxlICkgKyBkZWx0YTsKKyAgICAgICAgYmx1ZS0+c2hvb3QuZml0ID0gYmx1ZS0+c2hvb3QuY3VyOworICAgICAgICBibHVlLT5mbGFncyAgICAmPSB+QUZfTEFUSU5fQkxVRV9BQ1RJVkU7CisKKyAgICAgICAgLyogYSBibHVlIHpvbmUgaXMgb25seSBhY3RpdmUgaWYgaXQgaXMgbGVzcyB0aGFuIDMvNCBwaXhlbHMgdGFsbCAqLworICAgICAgICBkaXN0ID0gRlRfTXVsRml4KCBibHVlLT5yZWYub3JnIC0gYmx1ZS0+c2hvb3Qub3JnLCBzY2FsZSApOworICAgICAgICBpZiAoIGRpc3QgPD0gNDggJiYgZGlzdCA+PSAtNDggKQorICAgICAgICB7CisgICAgICAgICAgRlRfUG9zICBkZWx0YTEsIGRlbHRhMjsKKworICAgICAgICAgIGRlbHRhMSA9IGJsdWUtPnNob290Lm9yZyAtIGJsdWUtPnJlZi5vcmc7CisgICAgICAgICAgZGVsdGEyID0gZGVsdGExOworICAgICAgICAgIGlmICggZGVsdGExIDwgMCApCisgICAgICAgICAgICBkZWx0YTIgPSAtZGVsdGEyOworCisgICAgICAgICAgZGVsdGEyID0gRlRfTXVsRml4KCBkZWx0YTIsIHNjYWxlICk7CisKKyAgICAgICAgICBpZiAoIGRlbHRhMiA8IDMyICkKKyAgICAgICAgICAgIGRlbHRhMiA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoIGRlbHRhMiA8IDY0ICkKKyAgICAgICAgICAgIGRlbHRhMiA9IDMyICsgKCAoICggZGVsdGEyIC0gMzIgKSArIDE2ICkgJiB+MzEgKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWx0YTIgPSBGVF9QSVhfUk9VTkQoIGRlbHRhMiApOworCisgICAgICAgICAgaWYgKCBkZWx0YTEgPCAwICkKKyAgICAgICAgICAgIGRlbHRhMiA9IC1kZWx0YTI7CisKKyAgICAgICAgICBibHVlLT5yZWYuZml0ICAgPSBGVF9QSVhfUk9VTkQoIGJsdWUtPnJlZi5jdXIgKTsKKyAgICAgICAgICBibHVlLT5zaG9vdC5maXQgPSBibHVlLT5yZWYuZml0ICsgZGVsdGEyOworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIj4+IGFjdGl2YXRpbmcgYmx1ZSB6b25lICVkOiIKKyAgICAgICAgICAgICAgICAgICAgICAiICByZWYuY3VyPSUuMmcgcmVmLmZpdD0lLjJnIgorICAgICAgICAgICAgICAgICAgICAgICIgIHNob290LmN1cj0lLjJnIHNob290LmZpdD0lLjJnXG4iLAorICAgICAgICAgICAgICAgICAgICAgIG5uLCBibHVlLT5yZWYuY3VyIC8gNjQuMCwgYmx1ZS0+cmVmLmZpdCAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgYmx1ZS0+c2hvb3QuY3VyIC8gNjQuMCwgYmx1ZS0+c2hvb3QuZml0IC8gNjQuMCApKTsKKworICAgICAgICAgIGJsdWUtPmZsYWdzIHw9IEFGX0xBVElOX0JMVUVfQUNUSVZFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBhZl9sYXRpbjJfbWV0cmljc19zY2FsZSggQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU2NhbGVyICAgICAgICBzY2FsZXIgKQorICB7CisgICAgbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPSBzY2FsZXItPnJlbmRlcl9tb2RlOworICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLmZhY2UgICAgICAgID0gc2NhbGVyLT5mYWNlOworICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLmZsYWdzICAgICAgID0gc2NhbGVyLT5mbGFnczsKKworICAgIGFmX2xhdGluMl9tZXRyaWNzX3NjYWxlX2RpbSggbWV0cmljcywgc2NhbGVyLCBBRl9ESU1FTlNJT05fSE9SWiApOworICAgIGFmX2xhdGluMl9tZXRyaWNzX3NjYWxlX2RpbSggbWV0cmljcywgc2NhbGVyLCBBRl9ESU1FTlNJT05fVkVSVCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgIEwgQSBUIEkgTiAgIEcgTCBZIFAgSCAgIEEgTiBBIEwgWSBTIEkgUyAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSAgU09SVF9TRUdNRU5UUworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sYXRpbjJfaGludHNfY29tcHV0ZV9zZWdtZW50cyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07CisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgICAgICAgID0gaGludHMtPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50ICAgICAgID0gTlVMTDsKKyAgICBBRl9TZWdtZW50UmVjIHNlZzA7CisgICAgQUZfUG9pbnQqICAgICBjb250b3VyICAgICAgID0gaGludHMtPmNvbnRvdXJzOworICAgIEFGX1BvaW50KiAgICAgY29udG91cl9saW1pdCA9IGNvbnRvdXIgKyBoaW50cy0+bnVtX2NvbnRvdXJzOworICAgIEFGX0RpcmVjdGlvbiAgbWFqb3JfZGlyLCBzZWdtZW50X2RpcjsKKworCisgICAgRlRfWkVSTyggJnNlZzAgKTsKKyAgICBzZWcwLnNjb3JlID0gMzIwMDA7CisgICAgc2VnMC5mbGFncyA9IEFGX0VER0VfTk9STUFMOworCisgICAgbWFqb3JfZGlyICAgPSAoQUZfRGlyZWN0aW9uKUZUX0FCUyggYXhpcy0+bWFqb3JfZGlyICk7CisgICAgc2VnbWVudF9kaXIgPSBtYWpvcl9kaXI7CisKKyAgICBheGlzLT5udW1fc2VnbWVudHMgPSAwOworCisgICAgLyogc2V0IHVwICh1LHYpIGluIGVhY2ggcG9pbnQgKi8KKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCisgICAgeworICAgICAgQUZfUG9pbnQgIHBvaW50ID0gaGludHMtPnBvaW50czsKKyAgICAgIEFGX1BvaW50ICBsaW1pdCA9IHBvaW50ICsgaGludHMtPm51bV9wb2ludHM7CisKKworICAgICAgZm9yICggOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnUgPSBwb2ludC0+Zng7CisgICAgICAgIHBvaW50LT52ID0gcG9pbnQtPmZ5OworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgQUZfUG9pbnQgIHBvaW50ID0gaGludHMtPnBvaW50czsKKyAgICAgIEFGX1BvaW50ICBsaW1pdCA9IHBvaW50ICsgaGludHMtPm51bV9wb2ludHM7CisKKworICAgICAgZm9yICggOyBwb2ludCA8IGxpbWl0OyBwb2ludCsrICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnUgPSBwb2ludC0+Znk7CisgICAgICAgIHBvaW50LT52ID0gcG9pbnQtPmZ4OworICAgICAgfQorICAgIH0KKworICAgIC8qIGRvIGVhY2ggY29udG91ciBzZXBhcmF0ZWx5ICovCisgICAgZm9yICggOyBjb250b3VyIDwgY29udG91cl9saW1pdDsgY29udG91cisrICkKKyAgICB7CisgICAgICBBRl9Qb2ludCAgcG9pbnQgICA9ICBjb250b3VyWzBdOworICAgICAgQUZfUG9pbnQgIHN0YXJ0ICAgPSAgcG9pbnQ7CisgICAgICBBRl9Qb2ludCAgbGFzdCAgICA9ICBwb2ludC0+cHJldjsKKworCisgICAgICBpZiAoIHBvaW50ID09IGxhc3QgKSAgLyogc2tpcCBzaW5nbGV0b25zIC0tIGp1c3QgaW4gY2FzZSAqLworICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogYWxyZWFkeSBvbiBhbiBlZGdlID8sIGJhY2t0cmFjayB0byBmaW5kIGl0cyBzdGFydCAqLworICAgICAgaWYgKCBGVF9BQlMoIHBvaW50LT5pbl9kaXIgKSA9PSBtYWpvcl9kaXIgKQorICAgICAgeworICAgICAgICBwb2ludCA9IHBvaW50LT5wcmV2OworCisgICAgICAgIHdoaWxlICggcG9pbnQtPmluX2RpciA9PSBzdGFydC0+aW5fZGlyICkKKyAgICAgICAgICBwb2ludCA9IHBvaW50LT5wcmV2OworICAgICAgfQorICAgICAgZWxzZSAgLyogb3RoZXJ3aXNlLCBmaW5kIGZpcnN0IHNlZ21lbnQgc3RhcnQsIGlmIGFueSAqLworICAgICAgeworICAgICAgICB3aGlsZSAoIEZUX0FCUyggcG9pbnQtPm91dF9kaXIgKSAhPSBtYWpvcl9kaXIgKQorICAgICAgICB7CisgICAgICAgICAgcG9pbnQgPSBwb2ludC0+bmV4dDsKKworICAgICAgICAgIGlmICggcG9pbnQgPT0gc3RhcnQgKQorICAgICAgICAgICAgZ290byBOZXh0Q29udG91cjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzdGFydCA9IHBvaW50OworCisgICAgICBmb3IgICg7OykKKyAgICAgIHsKKyAgICAgICAgQUZfUG9pbnQgIGZpcnN0OworICAgICAgICBGVF9Qb3MgICAgbWluX3UsIG1pbl92LCBtYXhfdSwgbWF4X3Y7CisKKyAgICAgICAgLyogd2UncmUgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IHNlZ21lbnQgKi8KKyAgICAgICAgRlRfQVNTRVJUKCBGVF9BQlMoIHBvaW50LT5vdXRfZGlyICkgPT0gbWFqb3JfZGlyICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC0+aW5fZGlyICE9IHBvaW50LT5vdXRfZGlyICk7CisgICAgICAgIGZpcnN0ID0gcG9pbnQ7CisKKyAgICAgICAgbWluX3UgPSBtYXhfdSA9IHBvaW50LT51OworICAgICAgICBtaW5fdiA9IG1heF92ID0gcG9pbnQtPnY7CisKKyAgICAgICAgcG9pbnQgPSBwb2ludC0+bmV4dDsKKworICAgICAgICB3aGlsZSAoIHBvaW50LT5vdXRfZGlyID09IGZpcnN0LT5vdXRfZGlyICkKKyAgICAgICAgeworICAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CisKKyAgICAgICAgICBpZiAoIHBvaW50LT51IDwgbWluX3UgKQorICAgICAgICAgICAgbWluX3UgPSBwb2ludC0+dTsKKworICAgICAgICAgIGlmICggcG9pbnQtPnUgPiBtYXhfdSApCisgICAgICAgICAgICBtYXhfdSA9IHBvaW50LT51OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwb2ludC0+diA8IG1pbl92ICkKKyAgICAgICAgICBtaW5fdiA9IHBvaW50LT52OworCisgICAgICAgIGlmICggcG9pbnQtPnYgPiBtYXhfdiApCisgICAgICAgICAgbWF4X3YgPSBwb2ludC0+djsKKworICAgICAgICAvKiByZWNvcmQgbmV3IHNlZ21lbnQgKi8KKyAgICAgICAgZXJyb3IgPSBhZl9heGlzX2hpbnRzX25ld19zZWdtZW50KCBheGlzLCBtZW1vcnksICZzZWdtZW50ICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBzZWdtZW50WzBdICAgICAgICAgPSBzZWcwOworICAgICAgICBzZWdtZW50LT5kaXIgICAgICAgPSBmaXJzdC0+b3V0X2RpcjsKKyAgICAgICAgc2VnbWVudC0+Zmlyc3QgICAgID0gZmlyc3Q7CisgICAgICAgIHNlZ21lbnQtPmxhc3QgICAgICA9IHBvaW50OworICAgICAgICBzZWdtZW50LT5wb3MgICAgICAgPSAoRlRfU2hvcnQpKCAoIG1pbl91ICsgbWF4X3UgKSA+PiAxICk7CisgICAgICAgIHNlZ21lbnQtPm1pbl9jb29yZCA9IChGVF9TaG9ydCkgbWluX3Y7CisgICAgICAgIHNlZ21lbnQtPm1heF9jb29yZCA9IChGVF9TaG9ydCkgbWF4X3Y7CisgICAgICAgIHNlZ21lbnQtPmhlaWdodCAgICA9IChGVF9TaG9ydCkoIG1heF92IC0gbWluX3YgKTsKKworICAgICAgICAvKiBhIHNlZ21lbnQgaXMgcm91bmQgaWYgaXQgZG9lc24ndCBoYXZlIHN1Y2Nlc3NpdmUgKi8KKyAgICAgICAgLyogb24tY3VydmUgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHsKKyAgICAgICAgICBBRl9Qb2ludCAgcHQgICA9IGZpcnN0OworICAgICAgICAgIEFGX1BvaW50ICBsYXN0ID0gcG9pbnQ7CisgICAgICAgICAgRlRfVUludCAgIGYwICAgPSBwdC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0w7CisgICAgICAgICAgRlRfVUludCAgIGYxOworCisKKyAgICAgICAgICBzZWdtZW50LT5mbGFncyAmPSB+QUZfRURHRV9ST1VORDsKKworICAgICAgICAgIGZvciAoIDsgcHQgIT0gbGFzdDsgZjAgPSBmMSApCisgICAgICAgICAgeworICAgICAgICAgICAgcHQgPSBwdC0+bmV4dDsKKyAgICAgICAgICAgIGYxID0gcHQtPmZsYWdzICYgQUZfRkxBR19DT05UUk9MOworCisgICAgICAgICAgICBpZiAoICFmMCAmJiAhZjEgKQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKCBwdCA9PSBsYXN0ICkKKyAgICAgICAgICAgICAgc2VnbWVudC0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgIC8qIHRoaXMgY2FuIGhhcHBlbiBpbiB0aGUgY2FzZSBvZiBhIGRlZ2VuZXJhdGUgY29udG91cgorICAgICAgICAqIGUuZy4gYSAyLXBvaW50IHZlcnRpY2FsIGNvbnRvdXIKKyAgICAgICAgKi8KKyAgICAgICAgaWYgKCBwb2ludCA9PSBzdGFydCApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VnbWVudCwgaWYgYW55ICovCisgICAgICAgIHdoaWxlICggRlRfQUJTKCBwb2ludC0+b3V0X2RpciApICE9IG1ham9yX2RpciApCisgICAgICAgIHsKKyAgICAgICAgICBwb2ludCA9IHBvaW50LT5uZXh0OworCisgICAgICAgICAgaWYgKCBwb2ludCA9PSBzdGFydCApCisgICAgICAgICAgICBnb3RvIE5leHRDb250b3VyOworICAgICAgICB9CisgICAgICB9CisKKyAgICBOZXh0Q29udG91cjoKKyAgICAgIDsKKyAgICB9IC8qIGNvbnRvdXJzICovCisKKyAgICAvKiBub3cgc2xpZ2h0bHkgaW5jcmVhc2UgdGhlIGhlaWdodCBvZiBzZWdtZW50cyB3aGVuIHRoaXMgbWFrZXMgKi8KKyAgICAvKiBzZW5zZSAtLSB0aGlzIGlzIHVzZWQgdG8gYmV0dGVyIGRldGVjdCBhbmQgaWdub3JlIHNlcmlmcyAgICAgKi8KKyAgICB7CisgICAgICBBRl9TZWdtZW50ICBzZWdtZW50cyAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICAgIEFGX1NlZ21lbnQgIHNlZ21lbnRzX2VuZCA9IHNlZ21lbnRzICsgYXhpcy0+bnVtX3NlZ21lbnRzOworCisKKyAgICAgIGZvciAoIHNlZ21lbnQgPSBzZWdtZW50czsgc2VnbWVudCA8IHNlZ21lbnRzX2VuZDsgc2VnbWVudCsrICkKKyAgICAgIHsKKyAgICAgICAgQUZfUG9pbnQgIGZpcnN0ICAgPSBzZWdtZW50LT5maXJzdDsKKyAgICAgICAgQUZfUG9pbnQgIGxhc3QgICAgPSBzZWdtZW50LT5sYXN0OworICAgICAgICBBRl9Qb2ludCAgcDsKKyAgICAgICAgRlRfUG9zICAgIGZpcnN0X3YgPSBmaXJzdC0+djsKKyAgICAgICAgRlRfUG9zICAgIGxhc3RfdiAgPSBsYXN0LT52OworCisKKyAgICAgICAgaWYgKCBmaXJzdF92IDwgbGFzdF92ICkKKyAgICAgICAgeworICAgICAgICAgIHAgPSBmaXJzdC0+cHJldjsKKyAgICAgICAgICBpZiAoIHAtPnYgPCBmaXJzdF92ICkKKyAgICAgICAgICAgIHNlZ21lbnQtPmhlaWdodCA9IChGVF9TaG9ydCkoIHNlZ21lbnQtPmhlaWdodCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggZmlyc3RfdiAtIHAtPnYgKSA+PiAxICkgKTsKKworICAgICAgICAgIHAgPSBsYXN0LT5uZXh0OworICAgICAgICAgIGlmICggcC0+diA+IGxhc3RfdiApCisgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBzZWdtZW50LT5oZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHAtPnYgLSBsYXN0X3YgKSA+PiAxICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwID0gZmlyc3QtPnByZXY7CisgICAgICAgICAgaWYgKCBwLT52ID4gZmlyc3RfdiApCisgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBzZWdtZW50LT5oZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHAtPnYgLSBmaXJzdF92ICkgPj4gMSApICk7CisKKyAgICAgICAgICBwID0gbGFzdC0+bmV4dDsKKyAgICAgICAgICBpZiAoIHAtPnYgPCBsYXN0X3YgKQorICAgICAgICAgICAgc2VnbWVudC0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggc2VnbWVudC0+aGVpZ2h0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCBsYXN0X3YgLSBwLT52ICkgPj4gMSApICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBBRl9TT1JUX1NFR01FTlRTCisgICAvKiBwbGFjZSBhbGwgc2VnbWVudHMgd2l0aCBhIG5lZ2F0aXZlIGRpcmVjdGlvbiB0byB0aGUgc3RhcnQKKyAgICAqIG9mIHRoZSBhcnJheSwgdXNlZCB0byBzcGVlZCB1cCBzZWdtZW50IGxpbmtpbmcgbGF0ZXIuLi4KKyAgICAqLworICAgIHsKKyAgICAgIEFGX1NlZ21lbnQgIHNlZ21lbnRzID0gYXhpcy0+c2VnbWVudHM7CisgICAgICBGVF9VSW50ICAgICBjb3VudCAgICA9IGF4aXMtPm51bV9zZWdtZW50czsKKyAgICAgIEZUX1VJbnQgICAgIGlpLCBqajsKKworICAgICAgZm9yICggaWkgPSAwOyBpaSA8IGNvdW50OyBpaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzZWdtZW50c1tpaV0uZGlyID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKCBqaiA9IGlpICsgMTsgamogPCBjb3VudDsgamorKyApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBzZWdtZW50c1tqal0uZGlyIDwgMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEFGX1NlZ21lbnRSZWMgIHRtcDsKKworCisgICAgICAgICAgICAgIHRtcCAgICAgICAgICA9IHNlZ21lbnRzW2lpXTsKKyAgICAgICAgICAgICAgc2VnbWVudHNbaWldID0gc2VnbWVudHNbampdOworICAgICAgICAgICAgICBzZWdtZW50c1tqal0gPSB0bXA7CisKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBqaiA9PSBjb3VudCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYXhpcy0+bWlkX3NlZ21lbnRzID0gaWk7CisgICAgfQorI2VuZGlmCisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xhdGluMl9oaW50c19saW5rX3NlZ21lbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgICAgPSAmaGludHMtPmF4aXNbZGltXTsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzICAgICAgPSBheGlzLT5zZWdtZW50czsKKyAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRfbGltaXQgPSBzZWdtZW50cyArIGF4aXMtPm51bV9zZWdtZW50czsKKyNpZmRlZiBBRl9TT1JUX1NFR01FTlRTCisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X21pZCAgID0gc2VnbWVudHMgKyBheGlzLT5taWRfc2VnbWVudHM7CisjZW5kaWYKKyAgICBGVF9Qb3MgICAgICAgIGxlbl90aHJlc2hvbGQsIGxlbl9zY29yZTsKKyAgICBBRl9TZWdtZW50ICAgIHNlZzEsIHNlZzI7CisKKworICAgIGxlbl90aHJlc2hvbGQgPSBBRl9MQVRJTl9DT05TVEFOVCggaGludHMtPm1ldHJpY3MsIDggKTsKKyAgICBpZiAoIGxlbl90aHJlc2hvbGQgPT0gMCApCisgICAgICBsZW5fdGhyZXNob2xkID0gMTsKKworICAgIGxlbl9zY29yZSA9IEFGX0xBVElOX0NPTlNUQU5UKCBoaW50cy0+bWV0cmljcywgNjAwMCApOworCisjaWZkZWYgQUZfU09SVF9TRUdNRU5UUworICAgIGZvciAoIHNlZzEgPSBzZWdtZW50czsgc2VnMSA8IHNlZ21lbnRfbWlkOyBzZWcxKysgKQorICAgIHsKKyAgICAgIGlmICggc2VnMS0+ZGlyICE9IGF4aXMtPm1ham9yX2RpciApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBmb3IgKCBzZWcyID0gc2VnbWVudF9taWQ7IHNlZzIgPCBzZWdtZW50X2xpbWl0OyBzZWcyKysgKQorI2Vsc2UKKyAgICAvKiBub3cgY29tcGFyZSBlYWNoIHNlZ21lbnQgdG8gdGhlIG90aGVycyAqLworICAgIGZvciAoIHNlZzEgPSBzZWdtZW50czsgc2VnMSA8IHNlZ21lbnRfbGltaXQ7IHNlZzErKyApCisgICAgeworICAgICAgaWYgKCBzZWcxLT5kaXIgIT0gYXhpcy0+bWFqb3JfZGlyICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGZvciAoIHNlZzIgPSBzZWdtZW50czsgc2VnMiA8IHNlZ21lbnRfbGltaXQ7IHNlZzIrKyApCisgICAgICAgIGlmICggc2VnMS0+ZGlyICsgc2VnMi0+ZGlyID09IDAgJiYgc2VnMi0+cG9zID4gc2VnMS0+cG9zICkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgRlRfUG9zICBwb3MxID0gc2VnMS0+cG9zOworICAgICAgICAgIEZUX1BvcyAgcG9zMiA9IHNlZzItPnBvczsKKyAgICAgICAgICBGVF9Qb3MgIGRpc3QgPSBwb3MyIC0gcG9zMTsKKworCisgICAgICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyAgbWluID0gc2VnMS0+bWluX2Nvb3JkOworICAgICAgICAgICAgRlRfUG9zICBtYXggPSBzZWcxLT5tYXhfY29vcmQ7CisgICAgICAgICAgICBGVF9Qb3MgIGxlbiwgc2NvcmU7CisKKworICAgICAgICAgICAgaWYgKCBtaW4gPCBzZWcyLT5taW5fY29vcmQgKQorICAgICAgICAgICAgICBtaW4gPSBzZWcyLT5taW5fY29vcmQ7CisKKyAgICAgICAgICAgIGlmICggbWF4ID4gc2VnMi0+bWF4X2Nvb3JkICkKKyAgICAgICAgICAgICAgbWF4ID0gc2VnMi0+bWF4X2Nvb3JkOworCisgICAgICAgICAgICBsZW4gPSBtYXggLSBtaW47CisgICAgICAgICAgICBpZiAoIGxlbiA+PSBsZW5fdGhyZXNob2xkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2NvcmUgPSBkaXN0ICsgbGVuX3Njb3JlIC8gbGVuOworICAgICAgICAgICAgICBpZiAoIHNjb3JlIDwgc2VnMS0+c2NvcmUgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VnMS0+c2NvcmUgPSBzY29yZTsKKyAgICAgICAgICAgICAgICBzZWcxLT5saW5rICA9IHNlZzI7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoIHNjb3JlIDwgc2VnMi0+c2NvcmUgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VnMi0+c2NvcmUgPSBzY29yZTsKKyAgICAgICAgICAgICAgICBzZWcyLT5saW5rICA9IHNlZzE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWYgMAorICAgIH0KKyNlbmRpZgorCisgICAgLyogbm93LCBjb21wdXRlIHRoZSBgc2VyaWYnIHNlZ21lbnRzICovCisgICAgZm9yICggc2VnMSA9IHNlZ21lbnRzOyBzZWcxIDwgc2VnbWVudF9saW1pdDsgc2VnMSsrICkKKyAgICB7CisgICAgICBzZWcyID0gc2VnMS0+bGluazsKKworICAgICAgaWYgKCBzZWcyICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzZWcyLT5saW5rICE9IHNlZzEgKQorICAgICAgICB7CisgICAgICAgICAgc2VnMS0+bGluayAgPSBOVUxMOworICAgICAgICAgIHNlZzEtPnNlcmlmID0gc2VnMi0+bGluazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGFmX2xhdGluMl9oaW50c19jb21wdXRlX2VkZ2VzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gaGludHMtPm1lbW9yeTsKKyAgICBBRl9MYXRpbkF4aXMgIGxheGlzICA9ICYoKEFGX0xhdGluTWV0cmljcyloaW50cy0+bWV0cmljcyktPmF4aXNbZGltXTsKKworICAgIEFGX1NlZ21lbnQgICAgc2VnbWVudHMgICAgICA9IGF4aXMtPnNlZ21lbnRzOworICAgIEFGX1NlZ21lbnQgICAgc2VnbWVudF9saW1pdCA9IHNlZ21lbnRzICsgYXhpcy0+bnVtX3NlZ21lbnRzOworICAgIEFGX1NlZ21lbnQgICAgc2VnOworCisgICAgQUZfRGlyZWN0aW9uICB1cF9kaXI7CisgICAgRlRfRml4ZWQgICAgICBzY2FsZTsKKyAgICBGVF9Qb3MgICAgICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkOworICAgIEZUX1BvcyAgICAgICAgc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkOworCisKKyAgICBheGlzLT5udW1fZWRnZXMgPSAwOworCisgICAgc2NhbGUgPSAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApID8gaGludHMtPnhfc2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoaW50cy0+eV9zY2FsZTsKKworICAgIHVwX2RpciA9ICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkgPyBBRl9ESVJfVVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQUZfRElSX1JJR0hUOworCisgICAgLyoKKyAgICAgKiAgV2Ugd2FudCB0byBpZ25vcmUgdmVyeSBzbWFsbCAobW9zdGx5IHNlcmlmKSBzZWdtZW50cywgd2UgZG8gdGhhdAorICAgICAqICBieSBpZ25vcmluZyB0aG9zZSB0aGF0IHdob3NlIGxlbmd0aCBpcyBsZXNzIHRoYW4gYSBnaXZlbiBmcmFjdGlvbgorICAgICAqICBvZiB0aGUgc3RhbmRhcmQgd2lkdGguIElmIHRoZXJlIGlzIG5vIHN0YW5kYXJkIHdpZHRoLCB3ZSBpZ25vcmUKKyAgICAgKiAgdGhvc2UgdGhhdCBhcmUgbGVzcyB0aGFuIGEgZ2l2ZW4gc2l6ZSBpbiBwaXhlbHMKKyAgICAgKgorICAgICAqICBhbHNvLCB1bmxpbmsgc2VyaWYgc2VnbWVudHMgdGhhdCBhcmUgbGlua2VkIHRvIHNlZ21lbnRzIGZhcnRoZXIKKyAgICAgKiAgdGhhbiA1MCUgb2YgdGhlIHN0YW5kYXJkIHdpZHRoCisgICAgICovCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKQorICAgIHsKKyAgICAgIGlmICggbGF4aXMtPndpZHRoX2NvdW50ID4gMCApCisgICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9ICggbGF4aXMtPnN0YW5kYXJkX3dpZHRoICogMTAgKSA+PiA0OworICAgICAgZWxzZQorICAgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSBGVF9EaXZGaXgoIDY0LCBoaW50cy0+eV9zY2FsZSApOworICAgIH0KKyAgICBlbHNlCisgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSAwOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFdlIHdpbGwgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlICAgICAgICovCisgICAgLyogY3VycmVudCBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkgKi8KKyAgICAvKiB0byBmaW5kIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLiAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogSWYgbm8gZWRnZSBpcyBmb3VuZCwgd2UgY3JlYXRlIGFuZCBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUgICAgICAgKi8KKyAgICAvKiBzb3J0ZWQgdGFibGUuICBPdGhlcndpc2UsIHdlIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncyAqLworICAgIC8qIGxpc3Qgd2hpY2ggd2lsbCBiZSBwcm9jZXNzZWQgaW4gdGhlIHNlY29uZCBzdGVwIHRvIGNvbXB1dGUgdGhlICAgICovCisgICAgLyogZWRnZSdzIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIE5vdGUgdGhhdCB0aGUgZWRnZXMgdGFibGUgaXMgc29ydGVkIGFsb25nIHRoZSBzZWdtZW50L2VkZ2UgICAgICAgICovCisgICAgLyogcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IEZUX011bEZpeCggbGF4aXMtPmVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSApOworICAgIGlmICggZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgPiA2NCAvIDQgKQorICAgICAgZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgPSA2NCAvIDQ7CisKKyAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CisKKyAgICBmb3IgKCBzZWcgPSBzZWdtZW50czsgc2VnIDwgc2VnbWVudF9saW1pdDsgc2VnKysgKQorICAgIHsKKyAgICAgIEFGX0VkZ2UgIGZvdW5kID0gTlVMTDsKKyAgICAgIEZUX0ludCAgIGVlOworCisKKyAgICAgIGlmICggc2VnLT5oZWlnaHQgPCBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogQSBzcGVjaWFsIGNhc2UgZm9yIHNlcmlmIGVkZ2VzOiBJZiB0aGV5IGFyZSBzbWFsbGVyIHRoYW4gKi8KKyAgICAgIC8qIDEuNSBwaXhlbHMgd2UgaWdub3JlIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHNlZy0+c2VyaWYgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGRpc3QgPSBzZWctPnNlcmlmLT5wb3MgLSBzZWctPnBvczsKKworCisgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICBpZiAoIGRpc3QgPj0gbGF4aXMtPnN0YW5kYXJkX3dpZHRoID4+IDEgKQorICAgICAgICB7CisgICAgICAgICAgLyogdW5saW5rIHRoaXMgc2VyaWYsIGl0IGlzIHRvbyBkaXN0YW50IGZyb20gaXRzIHJlZmVyZW5jZSBzdGVtICovCisgICAgICAgICAgc2VnLT5zZXJpZiA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIDIqc2VnLT5oZWlnaHQgPCAzICogc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkICkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogbG9vayBmb3IgYW4gZWRnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWdtZW50ICovCisgICAgICBmb3IgKCBlZSA9IDA7IGVlIDwgYXhpcy0+bnVtX2VkZ2VzOyBlZSsrICkKKyAgICAgIHsKKyAgICAgICAgQUZfRWRnZSAgZWRnZSA9IGF4aXMtPmVkZ2VzICsgZWU7CisgICAgICAgIEZUX1BvcyAgIGRpc3Q7CisKKworICAgICAgICBkaXN0ID0gc2VnLT5wb3MgLSBlZGdlLT5mcG9zOworICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgaWYgKCBkaXN0IDwgZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQgJiYgZWRnZS0+ZGlyID09IHNlZy0+ZGlyICkKKyAgICAgICAgeworICAgICAgICAgIGZvdW5kID0gZWRnZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICFmb3VuZCApCisgICAgICB7CisgICAgICAgIEFGX0VkZ2UgICBlZGdlOworCisKKyAgICAgICAgLyogaW5zZXJ0IGEgbmV3IGVkZ2UgaW4gdGhlIGxpc3QgYW5kICovCisgICAgICAgIC8qIHNvcnQgYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbiAgICAqLworICAgICAgICBlcnJvciA9IGFmX2F4aXNfaGludHNfbmV3X2VkZ2UoIGF4aXMsIHNlZy0+cG9zLCBzZWctPmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksICZlZGdlICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIG5ldyBlZGdlJ3MgbGlzdCAqLworICAgICAgICBGVF9aRVJPKCBlZGdlICk7CisKKyAgICAgICAgZWRnZS0+Zmlyc3QgICAgPSBzZWc7CisgICAgICAgIGVkZ2UtPmxhc3QgICAgID0gc2VnOworICAgICAgICBlZGdlLT5kaXIgICAgICA9IHNlZy0+ZGlyOworICAgICAgICBlZGdlLT5mcG9zICAgICA9IHNlZy0+cG9zOworICAgICAgICBlZGdlLT5vcG9zICAgICA9IEZUX011bEZpeCggc2VnLT5wb3MsIHNjYWxlICk7CisgICAgICAgIGVkZ2UtPnBvcyAgICAgID0gZWRnZS0+b3BvczsKKyAgICAgICAgc2VnLT5lZGdlX25leHQgPSBzZWc7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGlmIGFuIGVkZ2Ugd2FzIGZvdW5kLCBzaW1wbHkgYWRkIHRoZSBzZWdtZW50IHRvIHRoZSBlZGdlJ3MgKi8KKyAgICAgICAgLyogbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzZWctPmVkZ2VfbmV4dCAgICAgICAgID0gZm91bmQtPmZpcnN0OworICAgICAgICBmb3VuZC0+bGFzdC0+ZWRnZV9uZXh0ID0gc2VnOworICAgICAgICBmb3VuZC0+bGFzdCAgICAgICAgICAgID0gc2VnOworICAgICAgfQorICAgIH0KKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEdvb2QsIHdlIHdpbGwgbm93IGNvbXB1dGUgZWFjaCBlZGdlJ3MgcHJvcGVydGllcyBhY2NvcmRpbmcgdG8gICAgICovCisgICAgLyogc2VnbWVudHMgZm91bmQgb24gaXRzIHBvc2l0aW9uLiAgQmFzaWNhbGx5LCB0aGVzZSBhcmU6ICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAtIGVkZ2UncyBtYWluIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogIC0gc3RlbSBlZGdlLCBzZXJpZiBlZGdlIG9yIGJvdGggKHdoaWNoIGRlZmF1bHRzIHRvIHN0ZW0gdGhlbikgICAgKi8KKyAgICAvKiAgLSByb3VuZGVkIGVkZ2UsIHN0cmFpZ2h0IG9yIGJvdGggKHdoaWNoIGRlZmF1bHRzIHRvIHN0cmFpZ2h0KSAgICAqLworICAgIC8qICAtIGxpbmsgZm9yIGVkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgLyogZmlyc3Qgb2YgYWxsLCBzZXQgdGhlIGBlZGdlJyBmaWVsZCBpbiBlYWNoIHNlZ21lbnQgLS0gdGhpcyBpcyAqLworICAgIC8qIHJlcXVpcmVkIGluIG9yZGVyIHRvIGNvbXB1dGUgZWRnZSBsaW5rcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qCisgICAgICogTm90ZSB0aGF0IHJlbW92aW5nIHRoaXMgbG9vcCBhbmQgc2V0dGluZyB0aGUgYGVkZ2UnIGZpZWxkIG9mIGVhY2gKKyAgICAgKiBzZWdtZW50IGRpcmVjdGx5IGluIHRoZSBjb2RlIGFib3ZlIHNsb3dzIGRvd24gZXhlY3V0aW9uIHNwZWVkIGZvcgorICAgICAqIHNvbWUgcmVhc29ucyBvbiBwbGF0Zm9ybXMgbGlrZSB0aGUgU3VuLgorICAgICAqLworICAgIHsKKyAgICAgIEFGX0VkZ2UgIGVkZ2VzICAgICAgPSBheGlzLT5lZGdlczsKKyAgICAgIEFGX0VkZ2UgIGVkZ2VfbGltaXQgPSBlZGdlcyArIGF4aXMtPm51bV9lZGdlczsKKyAgICAgIEFGX0VkZ2UgIGVkZ2U7CisKKworICAgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICAgIHsKKyAgICAgICAgc2VnID0gZWRnZS0+Zmlyc3Q7CisgICAgICAgIGlmICggc2VnICkKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIHNlZy0+ZWRnZSA9IGVkZ2U7CisgICAgICAgICAgICBzZWcgICAgICAgPSBzZWctPmVkZ2VfbmV4dDsKKworICAgICAgICAgIH0gd2hpbGUgKCBzZWcgIT0gZWRnZS0+Zmlyc3QgKTsKKyAgICAgIH0KKworICAgICAgLyogbm93LCBjb21wdXRlIGVhY2ggZWRnZSBwcm9wZXJ0aWVzICovCisgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgICAgeworICAgICAgICBGVF9JbnQgIGlzX3JvdW5kICAgID0gMDsgIC8qIGRvZXMgaXQgY29udGFpbiByb3VuZCBzZWdtZW50cz8gICAgKi8KKyAgICAgICAgRlRfSW50ICBpc19zdHJhaWdodCA9IDA7ICAvKiBkb2VzIGl0IGNvbnRhaW4gc3RyYWlnaHQgc2VnbWVudHM/ICovCisjaWYgMAorICAgICAgICBGVF9Qb3MgIHVwcyAgICAgICAgID0gMDsgIC8qIG51bWJlciBvZiB1cHdhcmRzIHNlZ21lbnRzICAgICAgICAgKi8KKyAgICAgICAgRlRfUG9zICBkb3ducyAgICAgICA9IDA7ICAvKiBudW1iZXIgb2YgZG93bndhcmRzIHNlZ21lbnRzICAgICAgICovCisjZW5kaWYKKworCisgICAgICAgIHNlZyA9IGVkZ2UtPmZpcnN0OworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Cb29sICBpc19zZXJpZjsKKworCisgICAgICAgICAgLyogY2hlY2sgZm9yIHJvdW5kbmVzcyBvZiBzZWdtZW50ICovCisgICAgICAgICAgaWYgKCBzZWctPmZsYWdzICYgQUZfRURHRV9ST1VORCApCisgICAgICAgICAgICBpc19yb3VuZCsrOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzX3N0cmFpZ2h0Kys7CisKKyNpZiAwCisgICAgICAgICAgLyogY2hlY2sgZm9yIHNlZ21lbnQgZGlyZWN0aW9uICovCisgICAgICAgICAgaWYgKCBzZWctPmRpciA9PSB1cF9kaXIgKQorICAgICAgICAgICAgdXBzICAgKz0gc2VnLT5tYXhfY29vcmQtc2VnLT5taW5fY29vcmQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG93bnMgKz0gc2VnLT5tYXhfY29vcmQtc2VnLT5taW5fY29vcmQ7CisjZW5kaWYKKworICAgICAgICAgIC8qIGNoZWNrIGZvciBsaW5rcyAtLSBpZiBzZWctPnNlcmlmIGlzIHNldCwgdGhlbiBzZWctPmxpbmsgbXVzdCAqLworICAgICAgICAgIC8qIGJlIGlnbm9yZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlzX3NlcmlmID0gKEZUX0Jvb2wpKCBzZWctPnNlcmlmICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnLT5zZXJpZi0+ZWRnZSAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZy0+c2VyaWYtPmVkZ2UgIT0gZWRnZSApOworCisgICAgICAgICAgaWYgKCAoIHNlZy0+bGluayAmJiBzZWctPmxpbmstPmVkZ2UgIT0gTlVMTCApIHx8IGlzX3NlcmlmICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBRl9FZGdlICAgICBlZGdlMjsKKyAgICAgICAgICAgIEFGX1NlZ21lbnQgIHNlZzI7CisKKworICAgICAgICAgICAgZWRnZTIgPSBlZGdlLT5saW5rOworICAgICAgICAgICAgc2VnMiAgPSBzZWctPmxpbms7CisKKyAgICAgICAgICAgIGlmICggaXNfc2VyaWYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWcyICA9IHNlZy0+c2VyaWY7CisgICAgICAgICAgICAgIGVkZ2UyID0gZWRnZS0+c2VyaWY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWRnZTIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9Qb3MgIGVkZ2VfZGVsdGE7CisgICAgICAgICAgICAgIEZUX1BvcyAgc2VnX2RlbHRhOworCisKKyAgICAgICAgICAgICAgZWRnZV9kZWx0YSA9IGVkZ2UtPmZwb3MgLSBlZGdlMi0+ZnBvczsKKyAgICAgICAgICAgICAgaWYgKCBlZGdlX2RlbHRhIDwgMCApCisgICAgICAgICAgICAgICAgZWRnZV9kZWx0YSA9IC1lZGdlX2RlbHRhOworCisgICAgICAgICAgICAgIHNlZ19kZWx0YSA9IHNlZy0+cG9zIC0gc2VnMi0+cG9zOworICAgICAgICAgICAgICBpZiAoIHNlZ19kZWx0YSA8IDAgKQorICAgICAgICAgICAgICAgIHNlZ19kZWx0YSA9IC1zZWdfZGVsdGE7CisKKyAgICAgICAgICAgICAgaWYgKCBzZWdfZGVsdGEgPCBlZGdlX2RlbHRhICkKKyAgICAgICAgICAgICAgICBlZGdlMiA9IHNlZzItPmVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVkZ2UyID0gc2VnMi0+ZWRnZTsKKworICAgICAgICAgICAgaWYgKCBpc19zZXJpZiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVkZ2UtPnNlcmlmICAgPSBlZGdlMjsKKyAgICAgICAgICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfU0VSSUY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVkZ2UtPmxpbmsgID0gZWRnZTI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2VnID0gc2VnLT5lZGdlX25leHQ7CisKKyAgICAgICAgfSB3aGlsZSAoIHNlZyAhPSBlZGdlLT5maXJzdCApOworCisgICAgICAgIC8qIHNldCB0aGUgcm91bmQvc3RyYWlnaHQgZmxhZ3MgKi8KKyAgICAgICAgZWRnZS0+ZmxhZ3MgPSBBRl9FREdFX05PUk1BTDsKKworICAgICAgICBpZiAoIGlzX3JvdW5kID4gMCAmJiBpc19yb3VuZCA+PSBpc19zdHJhaWdodCApCisgICAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKworI2lmIDAKKyAgICAgICAgLyogc2V0IHRoZSBlZGdlJ3MgbWFpbiBkaXJlY3Rpb24gKi8KKyAgICAgICAgZWRnZS0+ZGlyID0gQUZfRElSX05PTkU7CisKKyAgICAgICAgaWYgKCB1cHMgPiBkb3ducyApCisgICAgICAgICAgZWRnZS0+ZGlyID0gKEZUX0NoYXIpdXBfZGlyOworCisgICAgICAgIGVsc2UgaWYgKCB1cHMgPCBkb3ducyApCisgICAgICAgICAgZWRnZS0+ZGlyID0gKEZUX0NoYXIpLXVwX2RpcjsKKworICAgICAgICBlbHNlIGlmICggdXBzID09IGRvd25zICkKKyAgICAgICAgICBlZGdlLT5kaXIgPSAwOyAgLyogYm90aCB1cCBhbmQgZG93biEgKi8KKyNlbmRpZgorCisgICAgICAgIC8qIGdldHMgcmlkIG9mIHNlcmlmcyBpZiBsaW5rIGlzIHNldCAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBYWFg6IFRoaXMgZ2V0cyByaWQgb2YgbWFueSB1bnBsZWFzYW50IGFydGVmYWN0cyEgKi8KKyAgICAgICAgLyogICAgICBFeGFtcGxlOiB0aGUgYGMnIGluIGNvdXIucGZhIGF0IHNpemUgMTMgICAgICovCisKKyAgICAgICAgaWYgKCBlZGdlLT5zZXJpZiAmJiBlZGdlLT5saW5rICkKKyAgICAgICAgICBlZGdlLT5zZXJpZiA9IE5VTEw7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgYWZfbGF0aW4yX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gYWZfbGF0aW4yX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMoIGhpbnRzLCBkaW0gKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgYWZfbGF0aW4yX2hpbnRzX2xpbmtfc2VnbWVudHMoIGhpbnRzLCBkaW0gKTsKKworICAgICAgZXJyb3IgPSBhZl9sYXRpbjJfaGludHNfY29tcHV0ZV9lZGdlcyggaGludHMsIGRpbSApOworICAgIH0KKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGFmX2xhdGluMl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMoIEFGX0dseXBoSGludHMgICAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0xhdGluTWV0cmljcyAgbWV0cmljcyApCisgIHsKKyAgICBBRl9BeGlzSGludHMgIGF4aXMgICAgICAgPSAmaGludHMtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgIEFGX0VkZ2UgICAgICAgZWRnZSAgICAgICA9IGF4aXMtPmVkZ2VzOworICAgIEFGX0VkZ2UgICAgICAgZWRnZV9saW1pdCA9IGVkZ2UgKyBheGlzLT5udW1fZWRnZXM7CisgICAgQUZfTGF0aW5BeGlzICBsYXRpbiAgICAgID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX1ZFUlRdOworICAgIEZUX0ZpeGVkICAgICAgc2NhbGUgICAgICA9IGxhdGluLT5zY2FsZTsKKyAgICBGVF9Qb3MgICAgICAgIGJlc3RfZGlzdDA7ICAvKiBpbml0aWFsIHRocmVzaG9sZCAqLworCisKKyAgICAvKiBjb21wdXRlIHRoZSBpbml0aWFsIHRocmVzaG9sZCBhcyBhIGZyYWN0aW9uIG9mIHRoZSBFTSBzaXplICovCisgICAgYmVzdF9kaXN0MCA9IEZUX011bEZpeCggbWV0cmljcy0+dW5pdHNfcGVyX2VtIC8gNDAsIHNjYWxlICk7CisKKyAgICBpZiAoIGJlc3RfZGlzdDAgPiA2NCAvIDIgKQorICAgICAgYmVzdF9kaXN0MCA9IDY0IC8gMjsKKworICAgIC8qIGNvbXB1dGUgd2hpY2ggYmx1ZSB6b25lcyBhcmUgYWN0aXZlLCBpLmUuIGhhdmUgdGhlaXIgc2NhbGVkICovCisgICAgLyogc2l6ZSA8IDMvNCBwaXhlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIGZvciBlYWNoIGhvcml6b250YWwgZWRnZSBzZWFyY2ggdGhlIGJsdWUgem9uZSB3aGljaCBpcyBjbG9zZXN0ICovCisgICAgZm9yICggOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKKyAgICB7CisgICAgICBGVF9JbnQgICAgYmI7CisgICAgICBBRl9XaWR0aCAgYmVzdF9ibHVlID0gTlVMTDsKKyAgICAgIEZUX1BvcyAgICBiZXN0X2Rpc3QgPSBiZXN0X2Rpc3QwOworCisgICAgICBmb3IgKCBiYiA9IDA7IGJiIDwgQUZfTEFUSU5fQkxVRV9NQVg7IGJiKysgKQorICAgICAgeworICAgICAgICBBRl9MYXRpbkJsdWUgIGJsdWUgPSBsYXRpbi0+Ymx1ZXMgKyBiYjsKKyAgICAgICAgRlRfQm9vbCAgICAgICBpc190b3BfYmx1ZSwgaXNfbWFqb3JfZGlyOworCisKKyAgICAgICAgLyogc2tpcCBpbmFjdGl2ZSBibHVlIHpvbmVzIChpLmUuLCB0aG9zZSB0aGF0IGFyZSB0b28gc21hbGwpICovCisgICAgICAgIGlmICggISggYmx1ZS0+ZmxhZ3MgJiBBRl9MQVRJTl9CTFVFX0FDVElWRSApICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBpZiBpdCBpcyBhIHRvcCB6b25lLCBjaGVjayBmb3IgcmlnaHQgZWRnZXMgLS0gaWYgaXQgaXMgYSBib3R0b20gKi8KKyAgICAgICAgLyogem9uZSwgY2hlY2sgZm9yIGxlZnQgZWRnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBvZiBjb3Vyc2UsIHRoYXQncyBmb3IgVHJ1ZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaXNfdG9wX2JsdWUgID0gKEZUX0J5dGUpKCAoIGJsdWUtPmZsYWdzICYgQUZfTEFUSU5fQkxVRV9UT1AgKSAhPSAwICk7CisgICAgICAgIGlzX21ham9yX2RpciA9IEZUX0JPT0woIGVkZ2UtPmRpciA9PSBheGlzLT5tYWpvcl9kaXIgKTsKKworICAgICAgICAvKiBpZiBpdCBpcyBhIHRvcCB6b25lLCB0aGUgZWRnZSBtdXN0IGJlIGFnYWluc3QgdGhlIG1ham9yICAgICovCisgICAgICAgIC8qIGRpcmVjdGlvbjsgaWYgaXQgaXMgYSBib3R0b20gem9uZSwgaXQgbXVzdCBiZSBpbiB0aGUgbWFqb3IgKi8KKyAgICAgICAgLyogZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGlzX3RvcF9ibHVlIF4gaXNfbWFqb3JfZGlyICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgICAgZGlzdDsKKyAgICAgICAgICBBRl9XaWR0aCAgIGNvbXBhcmU7CisKKworICAgICAgICAgIC8qIGlmIGl0J3MgYSByb3VuZGVkIGVkZ2UsIGNvbXBhcmUgaXQgdG8gdGhlIG92ZXJzaG9vdCBwb3NpdGlvbiAqLworICAgICAgICAgIC8qIGlmIGl0J3MgYSBmbGF0IGVkZ2UsIGNvbXBhcmUgaXQgdG8gdGhlIHJlZmVyZW5jZSBwb3NpdGlvbiAgICAqLworICAgICAgICAgIGlmICggZWRnZS0+ZmxhZ3MgJiBBRl9FREdFX1JPVU5EICkKKyAgICAgICAgICAgIGNvbXBhcmUgPSAmYmx1ZS0+c2hvb3Q7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZSA9ICZibHVlLT5yZWY7CisKKyAgICAgICAgICBkaXN0ID0gZWRnZS0+ZnBvcyAtIGNvbXBhcmUtPm9yZzsKKyAgICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICAgIGRpc3QgPSBGVF9NdWxGaXgoIGRpc3QsIHNjYWxlICk7CisgICAgICAgICAgaWYgKCBkaXN0IDwgYmVzdF9kaXN0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBiZXN0X2Rpc3QgPSBkaXN0OworICAgICAgICAgICAgYmVzdF9ibHVlID0gY29tcGFyZTsKKyAgICAgICAgICB9CisKKyNpZiAwCisgICAgICAgICAgLyogbm93LCBjb21wYXJlIGl0IHRvIHRoZSBvdmVyc2hvb3QgcG9zaXRpb24gaWYgdGhlIGVkZ2UgaXMgICAgICovCisgICAgICAgICAgLyogcm91bmRlZCwgYW5kIGlmIHRoZSBlZGdlIGlzIG92ZXIgdGhlIHJlZmVyZW5jZSBwb3NpdGlvbiBvZiBhICovCisgICAgICAgICAgLyogdG9wIHpvbmUsIG9yIHVuZGVyIHRoZSByZWZlcmVuY2UgcG9zaXRpb24gb2YgYSBib3R0b20gem9uZSAgICovCisgICAgICAgICAgaWYgKCBlZGdlLT5mbGFncyAmIEFGX0VER0VfUk9VTkQgJiYgZGlzdCAhPSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Cb29sICBpc191bmRlcl9yZWYgPSBGVF9CT09MKCBlZGdlLT5mcG9zIDwgYmx1ZS0+cmVmLm9yZyApOworCisKKyAgICAgICAgICAgIGlmICggaXNfdG9wX2JsdWUgXiBpc191bmRlcl9yZWYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBibHVlID0gbGF0aW4tPmJsdWVzICsgYmI7CisgICAgICAgICAgICAgIGRpc3QgPSBlZGdlLT5mcG9zIC0gYmx1ZS0+c2hvb3Qub3JnOworICAgICAgICAgICAgICBpZiAoIGRpc3QgPCAwICkKKyAgICAgICAgICAgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICAgICAgICAgICAgZGlzdCA9IEZUX011bEZpeCggZGlzdCwgc2NhbGUgKTsKKyAgICAgICAgICAgICAgaWYgKCBkaXN0IDwgYmVzdF9kaXN0ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJlc3RfZGlzdCA9IGRpc3Q7CisgICAgICAgICAgICAgICAgYmVzdF9ibHVlID0gJiBibHVlLT5zaG9vdDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggYmVzdF9ibHVlICkKKyAgICAgICAgZWRnZS0+Ymx1ZV9lZGdlID0gYmVzdF9ibHVlOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX2xhdGluMl9oaW50c19pbml0KCBBRl9HbHlwaEhpbnRzICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzICkKKyAgeworICAgIEZUX1JlbmRlcl9Nb2RlICBtb2RlOworICAgIEZUX1VJbnQzMiAgICAgICBzY2FsZXJfZmxhZ3MsIG90aGVyX2ZsYWdzOworICAgIEZUX0ZhY2UgICAgICAgICBmYWNlID0gbWV0cmljcy0+cm9vdC5zY2FsZXIuZmFjZTsKKworCisgICAgYWZfZ2x5cGhfaGludHNfcmVzY2FsZSggaGludHMsIChBRl9TdHlsZU1ldHJpY3MpbWV0cmljcyApOworCisgICAgLyoKKyAgICAgKiAgY29ycmVjdCB4X3NjYWxlIGFuZCB5X3NjYWxlIGlmIG5lZWRlZCwgc2luY2UgdGhleSBtYXkgaGF2ZQorICAgICAqICBiZWVuIG1vZGlmaWVkIGBhZl9sYXRpbjJfbWV0cmljc19zY2FsZV9kaW0nIGFib3ZlCisgICAgICovCisgICAgaGludHMtPnhfc2NhbGUgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5zY2FsZTsKKyAgICBoaW50cy0+eF9kZWx0YSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLmRlbHRhOworICAgIGhpbnRzLT55X3NjYWxlID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fVkVSVF0uc2NhbGU7CisgICAgaGludHMtPnlfZGVsdGEgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9WRVJUXS5kZWx0YTsKKworICAgIC8qIGNvbXB1dGUgZmxhZ3MgZGVwZW5kaW5nIG9uIHJlbmRlciBtb2RlLCBldGMuICovCisgICAgbW9kZSA9IG1ldHJpY3MtPnJvb3Quc2NhbGVyLnJlbmRlcl9tb2RlOworCisjaWYgMCAvKiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRF9WICkKKyAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnJlbmRlcl9tb2RlID0gbW9kZSA9IEZUX1JFTkRFUl9NT0RFX05PUk1BTDsKKyNlbmRpZgorCisgICAgc2NhbGVyX2ZsYWdzID0gaGludHMtPnNjYWxlcl9mbGFnczsKKyAgICBvdGhlcl9mbGFncyAgPSAwOworCisgICAgLyoKKyAgICAgKiAgV2Ugc25hcCB0aGUgd2lkdGggb2YgdmVydGljYWwgc3RlbXMgZm9yIHRoZSBtb25vY2hyb21lIGFuZAorICAgICAqICBob3Jpem9udGFsIExDRCByZW5kZXJpbmcgdGFyZ2V0cyBvbmx5LgorICAgICAqLworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9NT05PIHx8IG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICkKKyAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX0hPUlpfU05BUDsKKworICAgIC8qCisgICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIGhvcml6b250YWwgc3RlbXMgZm9yIHRoZSBtb25vY2hyb21lIGFuZAorICAgICAqICB2ZXJ0aWNhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRF9WICkKKyAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX1ZFUlRfU05BUDsKKworICAgIC8qCisgICAgICogIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyBvbmx5IGlmIHdlIGRvbid0IHVzZSB0aGUgYGxpZ2h0JyBtb2RlLgorICAgICAqLworICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCisgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19TVEVNX0FESlVTVDsKKworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9NT05PICkKKyAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX01PTk87CisKKyAgICAvKgorICAgICAqICBJbiBgbGlnaHQnIGhpbnRpbmcgbW9kZSB3ZSBkaXNhYmxlIGhvcml6b250YWwgaGludGluZyBjb21wbGV0ZWx5LgorICAgICAqICBXZSBhbHNvIGRvIGl0IGlmIHRoZSBmYWNlIGlzIGl0YWxpYy4KKyAgICAgKi8KKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICggZmFjZS0+c3R5bGVfZmxhZ3MgJiBGVF9TVFlMRV9GTEFHX0lUQUxJQyApICE9IDAgKQorICAgICAgc2NhbGVyX2ZsYWdzIHw9IEFGX1NDQUxFUl9GTEFHX05PX0hPUklaT05UQUw7CisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyAgICAvKiBnZXQgKGdsb2JhbCkgd2FycGVyIGZsYWcgKi8KKyAgICBpZiAoICFtZXRyaWNzLT5yb290Lmdsb2JhbHMtPm1vZHVsZS0+d2FycGluZyApCisgICAgICBzY2FsZXJfZmxhZ3MgfD0gQUZfU0NBTEVSX0ZMQUdfTk9fV0FSUEVSOworI2VuZGlmCisKKyAgICBoaW50cy0+c2NhbGVyX2ZsYWdzID0gc2NhbGVyX2ZsYWdzOworICAgIGhpbnRzLT5vdGhlcl9mbGFncyAgPSBvdGhlcl9mbGFnczsKKworICAgIHJldHVybiAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgIEwgQSBUIEkgTiAgIEcgTCBZIFAgSCAgIEcgUiBJIEQgLSBGIEkgVCBUIEkgTiBHICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBzbmFwIGEgZ2l2ZW4gd2lkdGggaW4gc2NhbGVkIGNvb3JkaW5hdGVzIHRvIG9uZSBvZiB0aGUgKi8KKyAgLyogY3VycmVudCBzdGFuZGFyZCB3aWR0aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIEZUX1BvcworICBhZl9sYXRpbjJfc25hcF93aWR0aCggQUZfV2lkdGggIHdpZHRocywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICB3aWR0aCApCisgIHsKKyAgICBGVF9VSW50ICBuOworICAgIEZUX1BvcyAgIGJlc3QgICAgICA9IDY0ICsgMzIgKyAyOworICAgIEZUX1BvcyAgIHJlZmVyZW5jZSA9IHdpZHRoOworICAgIEZUX1BvcyAgIHNjYWxlZDsKKworCisgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICB7CisgICAgICBGVF9Qb3MgIHc7CisgICAgICBGVF9Qb3MgIGRpc3Q7CisKKworICAgICAgdyA9IHdpZHRoc1tuXS5jdXI7CisgICAgICBkaXN0ID0gd2lkdGggLSB3OworICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgIGRpc3QgPSAtZGlzdDsKKyAgICAgIGlmICggZGlzdCA8IGJlc3QgKQorICAgICAgeworICAgICAgICBiZXN0ICAgICAgPSBkaXN0OworICAgICAgICByZWZlcmVuY2UgPSB3OworICAgICAgfQorICAgIH0KKworICAgIHNjYWxlZCA9IEZUX1BJWF9ST1VORCggcmVmZXJlbmNlICk7CisKKyAgICBpZiAoIHdpZHRoID49IHJlZmVyZW5jZSApCisgICAgeworICAgICAgaWYgKCB3aWR0aCA8IHNjYWxlZCArIDQ4ICkKKyAgICAgICAgd2lkdGggPSByZWZlcmVuY2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHdpZHRoID4gc2NhbGVkIC0gNDggKQorICAgICAgICB3aWR0aCA9IHJlZmVyZW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gd2lkdGg7CisgIH0KKworCisgIC8qIGNvbXB1dGUgdGhlIHNuYXBwZWQgd2lkdGggb2YgYSBnaXZlbiBzdGVtICovCisKKyAgc3RhdGljIEZUX1BvcworICBhZl9sYXRpbjJfY29tcHV0ZV9zdGVtX3dpZHRoKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgYmFzZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgc3RlbV9mbGFncyApCisgIHsKKyAgICBBRl9MYXRpbk1ldHJpY3MgIG1ldHJpY3MgID0gKEFGX0xhdGluTWV0cmljcykgaGludHMtPm1ldHJpY3M7CisgICAgQUZfTGF0aW5BeGlzICAgICBheGlzICAgICA9ICYgbWV0cmljcy0+YXhpc1tkaW1dOworICAgIEZUX1BvcyAgICAgICAgICAgZGlzdCAgICAgPSB3aWR0aDsKKyAgICBGVF9JbnQgICAgICAgICAgIHNpZ24gICAgID0gMDsKKyAgICBGVF9JbnQgICAgICAgICAgIHZlcnRpY2FsID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgKTsKKworICAgIEZUX1VOVVNFRCggYmFzZV9mbGFncyApOworCisKKyAgICBpZiAoICFBRl9MQVRJTl9ISU5UU19ET19TVEVNX0FESlVTVCggaGludHMgKSB8fAorICAgICAgICAgIGF4aXMtPmV4dHJhX2xpZ2h0ICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmICggZGlzdCA8IDAgKQorICAgIHsKKyAgICAgIGRpc3QgPSAtd2lkdGg7CisgICAgICBzaWduID0gMTsKKyAgICB9CisKKyAgICBpZiAoICggIHZlcnRpY2FsICYmICFBRl9MQVRJTl9ISU5UU19ET19WRVJUX1NOQVAoIGhpbnRzICkgKSB8fAorICAgICAgICAgKCAhdmVydGljYWwgJiYgIUFGX0xBVElOX0hJTlRTX0RPX0hPUlpfU05BUCggaGludHMgKSApICkKKyAgICB7CisgICAgICAvKiBzbW9vdGggaGludGluZyBwcm9jZXNzOiB2ZXJ5IGxpZ2h0bHkgcXVhbnRpemUgdGhlIHN0ZW0gd2lkdGggKi8KKworICAgICAgLyogbGVhdmUgdGhlIHdpZHRocyBvZiBzZXJpZnMgYWxvbmUgKi8KKworICAgICAgaWYgKCAoIHN0ZW1fZmxhZ3MgJiBBRl9FREdFX1NFUklGICkgJiYgdmVydGljYWwgJiYgKCBkaXN0IDwgMyAqIDY0ICkgKQorICAgICAgICBnb3RvIERvbmVfV2lkdGg7CisKKyNpZiAwCisgICAgICBlbHNlIGlmICggKCBiYXNlX2ZsYWdzICYgQUZfRURHRV9ST1VORCApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkaXN0IDwgODAgKQorICAgICAgICAgIGRpc3QgPSA2NDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBkaXN0IDwgNTYgKQorICAgICAgICBkaXN0ID0gNTY7CisjZW5kaWYKKyAgICAgIGlmICggYXhpcy0+d2lkdGhfY291bnQgPiAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICBkZWx0YTsKKworCisgICAgICAgIC8qIGNvbXBhcmUgdG8gc3RhbmRhcmQgd2lkdGggKi8KKyAgICAgICAgaWYgKCBheGlzLT53aWR0aF9jb3VudCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgPSBkaXN0IC0gYXhpcy0+d2lkdGhzWzBdLmN1cjsKKworICAgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICAgIGRlbHRhID0gLWRlbHRhOworCisgICAgICAgICAgaWYgKCBkZWx0YSA8IDQwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBkaXN0ID0gYXhpcy0+d2lkdGhzWzBdLmN1cjsKKyAgICAgICAgICAgIGlmICggZGlzdCA8IDQ4ICkKKyAgICAgICAgICAgICAgZGlzdCA9IDQ4OworCisgICAgICAgICAgICBnb3RvIERvbmVfV2lkdGg7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkaXN0IDwgMyAqIDY0ICkKKyAgICAgICAgeworICAgICAgICAgIGRlbHRhICA9IGRpc3QgJiA2MzsKKyAgICAgICAgICBkaXN0ICAmPSAtNjQ7CisKKyAgICAgICAgICBpZiAoIGRlbHRhIDwgMTAgKQorICAgICAgICAgICAgZGlzdCArPSBkZWx0YTsKKworICAgICAgICAgIGVsc2UgaWYgKCBkZWx0YSA8IDMyICkKKyAgICAgICAgICAgIGRpc3QgKz0gMTA7CisKKyAgICAgICAgICBlbHNlIGlmICggZGVsdGEgPCA1NCApCisgICAgICAgICAgICBkaXN0ICs9IDU0OworCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlzdCArPSBkZWx0YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBzdHJvbmcgaGludGluZyBwcm9jZXNzOiBzbmFwIHRoZSBzdGVtIHdpZHRoIHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgICBGVF9Qb3MgIG9yZ19kaXN0ID0gZGlzdDsKKworCisgICAgICBkaXN0ID0gYWZfbGF0aW4yX3NuYXBfd2lkdGgoIGF4aXMtPndpZHRocywgYXhpcy0+d2lkdGhfY291bnQsIGRpc3QgKTsKKworICAgICAgaWYgKCB2ZXJ0aWNhbCApCisgICAgICB7CisgICAgICAgIC8qIGluIHRoZSBjYXNlIG9mIHZlcnRpY2FsIGhpbnRpbmcsIGFsd2F5cyByb3VuZCAqLworICAgICAgICAvKiB0aGUgc3RlbSBoZWlnaHRzIHRvIGludGVnZXIgcGl4ZWxzICAgICAgICAgICAgKi8KKworICAgICAgICBpZiAoIGRpc3QgPj0gNjQgKQorICAgICAgICAgIGRpc3QgPSAoIGRpc3QgKyAxNiApICYgfjYzOworICAgICAgICBlbHNlCisgICAgICAgICAgZGlzdCA9IDY0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEFGX0xBVElOX0hJTlRTX0RPX01PTk8oIGhpbnRzICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogbW9ub2Nocm9tZSBob3Jpem9udGFsIGhpbnRpbmc6IHNuYXAgd2lkdGhzIHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgICAgICAgLyogd2l0aCBhIGRpZmZlcmVudCB0aHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA2NCApCisgICAgICAgICAgICBkaXN0ID0gNjQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogZm9yIGhvcml6b250YWwgYW50aS1hbGlhc2VkIGhpbnRpbmcsIHdlIGFkb3B0IGEgbW9yZSBzdWJ0bGUgKi8KKyAgICAgICAgICAvKiBhcHByb2FjaDogd2Ugc3RyZW5ndGhlbiBzbWFsbCBzdGVtcywgcm91bmQgc3RlbXMgd2hvc2Ugc2l6ZSAqLworICAgICAgICAgIC8qIGlzIGJldHdlZW4gMSBhbmQgMiBwaXhlbHMgdG8gYW4gaW50ZWdlciwgb3RoZXJ3aXNlIG5vdGhpbmcgICovCisKKyAgICAgICAgICBpZiAoIGRpc3QgPCA0OCApCisgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgNjQgKSA+PiAxOworCisgICAgICAgICAgZWxzZSBpZiAoIGRpc3QgPCAxMjggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdlIG9ubHkgcm91bmQgdG8gYW4gaW50ZWdlciB3aWR0aCBpZiB0aGUgY29ycmVzcG9uZGluZyAqLworICAgICAgICAgICAgLyogZGlzdG9ydGlvbiBpcyBsZXNzIHRoYW4gMS80IHBpeGVsLiAgT3RoZXJ3aXNlIHRoaXMgICAgICovCisgICAgICAgICAgICAvKiBtYWtlcyBldmVyeXRoaW5nIHdvcnNlIHNpbmNlIHRoZSBkaWFnb25hbHMsIHdoaWNoIGFyZSAgKi8KKyAgICAgICAgICAgIC8qIG5vdCBoaW50ZWQsIGFwcGVhciBhIGxvdCBib2xkZXIgb3IgdGhpbm5lciB0aGFuIHRoZSAgICAqLworICAgICAgICAgICAgLyogdmVydGljYWwgc3RlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIEZUX0ludCAgZGVsdGE7CisKKworICAgICAgICAgICAgZGlzdCA9ICggZGlzdCArIDIyICkgJiB+NjM7CisgICAgICAgICAgICBkZWx0YSA9IGRpc3QgLSBvcmdfZGlzdDsKKyAgICAgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGE7CisKKyAgICAgICAgICAgIGlmICggZGVsdGEgPj0gMTYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkaXN0ID0gb3JnX2Rpc3Q7CisgICAgICAgICAgICAgIGlmICggZGlzdCA8IDQ4ICkKKyAgICAgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgNjQgKSA+PiAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiByb3VuZCBvdGhlcndpc2UgdG8gcHJldmVudCBjb2xvciBmcmluZ2VzIGluIExDRCBtb2RlICovCisgICAgICAgICAgICBkaXN0ID0gKCBkaXN0ICsgMzIgKSAmIH42MzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBEb25lX1dpZHRoOgorICAgIGlmICggc2lnbiApCisgICAgICBkaXN0ID0gLWRpc3Q7CisKKyAgICByZXR1cm4gZGlzdDsKKyAgfQorCisKKyAgLyogYWxpZ24gb25lIHN0ZW0gZWRnZSByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgc3RlbSBlZGdlICovCisKKyAgc3RhdGljIHZvaWQKKyAgYWZfbGF0aW4yX2FsaWduX2xpbmtlZF9lZGdlKCBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgYmFzZV9lZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAgIHN0ZW1fZWRnZSApCisgIHsKKyAgICBGVF9Qb3MgIGRpc3QgPSBzdGVtX2VkZ2UtPm9wb3MgLSBiYXNlX2VkZ2UtPm9wb3M7CisKKyAgICBGVF9Qb3MgIGZpdHRlZF93aWR0aCA9IGFmX2xhdGluMl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIGRpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2VkZ2UtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbV9lZGdlLT5mbGFncyApOworCisKKyAgICBzdGVtX2VkZ2UtPnBvcyA9IGJhc2VfZWRnZS0+cG9zICsgZml0dGVkX3dpZHRoOworCisgICAgRlRfVFJBQ0U1KCggIkxJTks6IGVkZ2UgJWQgKG9wb3M9JS4yZikgbGlua2VkIHRvICglLjJmKSwgIgorICAgICAgICAgICAgICAgICJkaXN0IHdhcyAlLjJmLCBub3cgJS4yZlxuIiwKKyAgICAgICAgICAgICAgICBzdGVtX2VkZ2UtaGludHMtPmF4aXNbZGltXS5lZGdlcywgc3RlbV9lZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICBzdGVtX2VkZ2UtPnBvcyAvIDY0LjAsIGRpc3QgLyA2NC4wLCBmaXR0ZWRfd2lkdGggLyA2NC4wICkpOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBhZl9sYXRpbjJfYWxpZ25fc2VyaWZfZWRnZSggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9FZGdlICAgICAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgc2VyaWYgKQorICB7CisgICAgRlRfVU5VU0VEKCBoaW50cyApOworCisgICAgc2VyaWYtPnBvcyA9IGJhc2UtPnBvcyArICggc2VyaWYtPm9wb3MgLSBiYXNlLT5vcG9zICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgRSBEIEcgRSAgIEggSSBOIFQgSSBOIEcgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMgdm9pZAorICBhZl9sYXRpbjJfaGludF9lZGdlcyggQUZfR2x5cGhIaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaW1lbnNpb24gICBkaW0gKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzICAgICAgID0gJmhpbnRzLT5heGlzW2RpbV07CisgICAgQUZfRWRnZSAgICAgICBlZGdlcyAgICAgID0gYXhpcy0+ZWRnZXM7CisgICAgQUZfRWRnZSAgICAgICBlZGdlX2xpbWl0ID0gZWRnZXMgKyBheGlzLT5udW1fZWRnZXM7CisgICAgQUZfRWRnZSAgICAgICBlZGdlOworICAgIEFGX0VkZ2UgICAgICAgYW5jaG9yICAgICA9IE5VTEw7CisgICAgRlRfSW50ICAgICAgICBoYXNfc2VyaWZzID0gMDsKKyAgICBGVF9Qb3MgICAgICAgIGFuY2hvcl9kcmlmdCA9IDA7CisKKworCisgICAgRlRfVFJBQ0U1KCggIj09PT0gaGludGluZyAlcyBlZGdlcyA9PT09PVxuIiwKKyAgICAgICAgICAgICAgICBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAidmVydGljYWwiIDogImhvcml6b250YWwiICkpOworCisgICAgLyogd2UgYmVnaW4gYnkgYWxpZ25pbmcgYWxsIHN0ZW1zIHJlbGF0aXZlIHRvIHRoZSBibHVlIHpvbmUgKi8KKyAgICAvKiBpZiBuZWVkZWQgLS0gdGhhdCdzIG9ubHkgZm9yIGhvcml6b250YWwgZWRnZXMgICAgICAgICAgICAqLworCisgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX1ZFUlQgJiYgQUZfSElOVFNfRE9fQkxVRVMoIGhpbnRzICkgKQorICAgIHsKKyAgICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgICB7CisgICAgICAgIEFGX1dpZHRoICBibHVlOworICAgICAgICBBRl9FZGdlICAgZWRnZTEsIGVkZ2UyOworCisKKyAgICAgICAgaWYgKCBlZGdlLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYmx1ZSAgPSBlZGdlLT5ibHVlX2VkZ2U7CisgICAgICAgIGVkZ2UxID0gTlVMTDsKKyAgICAgICAgZWRnZTIgPSBlZGdlLT5saW5rOworCisgICAgICAgIGlmICggYmx1ZSApCisgICAgICAgIHsKKyAgICAgICAgICBlZGdlMSA9IGVkZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGVkZ2UyICYmIGVkZ2UyLT5ibHVlX2VkZ2UgKQorICAgICAgICB7CisgICAgICAgICAgYmx1ZSAgPSBlZGdlMi0+Ymx1ZV9lZGdlOworICAgICAgICAgIGVkZ2UxID0gZWRnZTI7CisgICAgICAgICAgZWRnZTIgPSBlZGdlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhZWRnZTEgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEZUX1RSQUNFNSgoICJCTFVFOiBlZGdlICVkIChvcG9zPSUuMmYpIHNuYXBwZWQgdG8gKCUuMmYpLCAiCisgICAgICAgICAgICAgICAgICAgICJ3YXMgKCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICBlZGdlMS1lZGdlcywgZWRnZTEtPm9wb3MgLyA2NC4wLCBibHVlLT5maXQgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICBlZGdlMS0+cG9zIC8gNjQuMCApKTsKKworICAgICAgICBlZGdlMS0+cG9zICAgID0gYmx1ZS0+Zml0OworICAgICAgICBlZGdlMS0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworCisgICAgICAgIGlmICggZWRnZTIgJiYgIWVkZ2UyLT5ibHVlX2VkZ2UgKQorICAgICAgICB7CisgICAgICAgICAgYWZfbGF0aW4yX2FsaWduX2xpbmtlZF9lZGdlKCBoaW50cywgZGltLCBlZGdlMSwgZWRnZTIgKTsKKyAgICAgICAgICBlZGdlMi0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhYW5jaG9yICkKKyAgICAgICAgeworICAgICAgICAgIGFuY2hvciA9IGVkZ2U7CisKKyAgICAgICAgICBhbmNob3JfZHJpZnQgPSAoIGFuY2hvci0+cG9zIC0gYW5jaG9yLT5vcG9zICk7CisgICAgICAgICAgaWYgKCBlZGdlMiApCisgICAgICAgICAgICBhbmNob3JfZHJpZnQgPSAoIGFuY2hvcl9kcmlmdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggZWRnZTItPnBvcyAtIGVkZ2UyLT5vcG9zICkgKSA+PiAxOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogbm93IHdlIHdpbGwgYWxpZ24gYWxsIHN0ZW0gZWRnZXMsIHRyeWluZyB0byBtYWludGFpbiB0aGUgKi8KKyAgICAvKiByZWxhdGl2ZSBvcmRlciBvZiBzdGVtcyBpbiB0aGUgZ2x5cGggICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCisgICAgeworICAgICAgQUZfRWRnZSAgZWRnZTI7CisKKworICAgICAgaWYgKCBlZGdlLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBza2lwIGFsbCBub24tc3RlbSBlZGdlcyAqLworICAgICAgZWRnZTIgPSBlZGdlLT5saW5rOworICAgICAgaWYgKCAhZWRnZTIgKQorICAgICAgeworICAgICAgICBoYXNfc2VyaWZzKys7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBub3cgYWxpZ24gdGhlIHN0ZW0gKi8KKworICAgICAgLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGl0J3MgYmV0dGVyIHRvIGJlIHNhZmUgKi8KKyAgICAgIGlmICggZWRnZTItPmJsdWVfZWRnZSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoICJBU1NFUlRJT04gRkFJTEVEIGZvciBlZGdlICVkXG4iLCBlZGdlMi1lZGdlcyApKTsKKworICAgICAgICBhZl9sYXRpbjJfYWxpZ25fbGlua2VkX2VkZ2UoIGhpbnRzLCBkaW0sIGVkZ2UyLCBlZGdlICk7CisgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggIWFuY2hvciApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgb3JnX2xlbiwgb3JnX2NlbnRlciwgY3VyX2xlbjsKKyAgICAgICAgRlRfUG9zICBjdXJfcG9zMSwgZXJyb3IxLCBlcnJvcjIsIHVfb2ZmLCBkX29mZjsKKworCisgICAgICAgIG9yZ19sZW4gPSBlZGdlMi0+b3BvcyAtIGVkZ2UtPm9wb3M7CisgICAgICAgIGN1cl9sZW4gPSBhZl9sYXRpbjJfY29tcHV0ZV9zdGVtX3dpZHRoKCBoaW50cywgZGltLCBvcmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlMi0+ZmxhZ3MgKTsKKyAgICAgICAgaWYgKCBjdXJfbGVuIDw9IDY0ICkKKyAgICAgICAgICB1X29mZiA9IGRfb2ZmID0gMzI7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHVfb2ZmID0gMzg7CisgICAgICAgICAgZF9vZmYgPSAyNjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY3VyX2xlbiA8IDk2ICkKKyAgICAgICAgeworICAgICAgICAgIG9yZ19jZW50ZXIgPSBlZGdlLT5vcG9zICsgKCBvcmdfbGVuID4+IDEgKTsKKworICAgICAgICAgIGN1cl9wb3MxICAgPSBGVF9QSVhfUk9VTkQoIG9yZ19jZW50ZXIgKTsKKworICAgICAgICAgIGVycm9yMSA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxIC0gdV9vZmYgKTsKKyAgICAgICAgICBpZiAoIGVycm9yMSA8IDAgKQorICAgICAgICAgICAgZXJyb3IxID0gLWVycm9yMTsKKworICAgICAgICAgIGVycm9yMiA9IG9yZ19jZW50ZXIgLSAoIGN1cl9wb3MxICsgZF9vZmYgKTsKKyAgICAgICAgICBpZiAoIGVycm9yMiA8IDAgKQorICAgICAgICAgICAgZXJyb3IyID0gLWVycm9yMjsKKworICAgICAgICAgIGlmICggZXJyb3IxIDwgZXJyb3IyICkKKyAgICAgICAgICAgIGN1cl9wb3MxIC09IHVfb2ZmOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cl9wb3MxICs9IGRfb2ZmOworCisgICAgICAgICAgZWRnZS0+cG9zICA9IGN1cl9wb3MxIC0gY3VyX2xlbiAvIDI7CisgICAgICAgICAgZWRnZTItPnBvcyA9IGVkZ2UtPnBvcyArIGN1cl9sZW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGVkZ2UtPnBvcyA9IEZUX1BJWF9ST1VORCggZWRnZS0+b3BvcyApOworCisgICAgICAgIEZUX1RSQUNFNSgoICJBTkNIT1I6IGVkZ2UgJWQgKG9wb3M9JS4yZikgYW5kICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gKCUuMmYpICglLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZWRnZS1lZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgIGVkZ2UyLWVkZ2VzLCBlZGdlMi0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsIGVkZ2UyLT5wb3MgLyA2NC4wICkpOworICAgICAgICBhbmNob3IgPSBlZGdlOworCisgICAgICAgIGVkZ2UtPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBhZl9sYXRpbjJfYWxpZ25fbGlua2VkX2VkZ2UoIGhpbnRzLCBkaW0sIGVkZ2UsIGVkZ2UyICk7CisKKyAgICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKKworICAgICAgICBhbmNob3JfZHJpZnQgPSAoICggYW5jaG9yLT5wb3MgLSBhbmNob3ItPm9wb3MgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgKCBlZGdlMi0+cG9zIC0gZWRnZTItPm9wb3MgKSApID4+IDE7CisKKyAgICAgICAgRlRfVFJBQ0U1KCggIkRSSUZUOiAlLjJmXG4iLCBhbmNob3JfZHJpZnQvNjQuMCApKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICAgb3JnX3Bvcywgb3JnX2xlbiwgb3JnX2NlbnRlciwgY3VyX2NlbnRlciwgY3VyX2xlbjsKKyAgICAgICAgRlRfUG9zICAgb3JnX2xlZnQsIG9yZ19yaWdodDsKKworCisgICAgICAgIG9yZ19wb3MgICAgPSBlZGdlLT5vcG9zICsgYW5jaG9yX2RyaWZ0OworICAgICAgICBvcmdfbGVuICAgID0gZWRnZTItPm9wb3MgLSBlZGdlLT5vcG9zOworICAgICAgICBvcmdfY2VudGVyID0gb3JnX3BvcyArICggb3JnX2xlbiA+PiAxICk7CisKKyAgICAgICAgY3VyX2xlbiA9IGFmX2xhdGluMl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sIG9yZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UyLT5mbGFncyApOworCisgICAgICAgIG9yZ19sZWZ0ICA9IG9yZ19wb3MgKyAoICggb3JnX2xlbiAtIGN1cl9sZW4gKSA+PiAxICk7CisgICAgICAgIG9yZ19yaWdodCA9IG9yZ19wb3MgKyAoICggb3JnX2xlbiArIGN1cl9sZW4gKSA+PiAxICk7CisKKyAgICAgICAgRlRfVFJBQ0U1KCggIkFMSUdOOiBsZWZ0PSUuMmYgcmlnaHQ9JS4yZiAiLAorICAgICAgICAgICAgICAgICAgICBvcmdfbGVmdCAvIDY0LjAsIG9yZ19yaWdodCAvIDY0LjAgKSk7CisgICAgICAgIGN1cl9jZW50ZXIgPSBvcmdfY2VudGVyOworCisgICAgICAgIGlmICggZWRnZTItPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CisgICAgICAgICAgZWRnZS0+cG9zID0gZWRnZTItPnBvcyAtIGN1cl9sZW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAvKiB3ZSB3YW50IHRvIGNvbXBhcmUgc2V2ZXJhbCBkaXNwbGFjZW1lbnQsIGFuZCBjaG9vc2UKKyAgICAgICAgICAqIHRoZSBvbmUgdGhhdCBpbmNyZWFzZXMgZml0bmVzcyB3aGlsZSBtaW5pbWl6aW5nCisgICAgICAgICAgKiBkaXN0b3J0aW9uIGFzIHdlbGwKKyAgICAgICAgICAqLworICAgICAgICAgIEZUX1BvcyAgIGRpc3BsYWNlbWVudHNbNl0sIHNjb3Jlc1s2XSwgb3JnLCBmaXQsIGRlbHRhOworICAgICAgICAgIEZUX1VJbnQgIGNvdW50ID0gMDsKKworICAgICAgICAgIC8qIG5vdGU6IGRvbid0IGV2ZW4gdHJ5IHRvIGZpdCB0aW55IHN0ZW1zICovCisgICAgICAgICAgaWYgKCBjdXJfbGVuIDwgMzIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICJ0aW55IHN0ZW1cbiIgKSk7CisgICAgICAgICAgICBnb3RvIEFsaWduU3RlbTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBpZiB0aGUgc3BhbiBpcyB3aXRoaW4gYSBzaW5nbGUgcGl4ZWwsIGRvbid0IHRvdWNoIGl0ICovCisgICAgICAgICAgaWYgKCBGVF9QSVhfRkxPT1IoIG9yZ19sZWZ0ICkgPT0gRlRfUElYX0NFSUwoIG9yZ19yaWdodCApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTUoKCAic2luZ2xlIHBpeGVsIHN0ZW1cbiIgKSk7CisgICAgICAgICAgICBnb3RvIEFsaWduU3RlbTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIGN1cl9sZW4gPD0gOTYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgLyogd2Ugd2FudCB0byBhdm9pZCB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSB3aGljaCBpcworICAgICAgICAgICAgKiB3aGVuIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlcyBvZiB0aGUgc3BhbiBlYWNoIHJlcHJlc2VudAorICAgICAgICAgICAgKiBhYm91dCA1MCUgb2YgdGhlIGdyYXkuIHdlJ2QgYmV0dGVyIHdhbnQgdG8gY2hhbmdlIHRoaXMKKyAgICAgICAgICAgICogdG8gMjUvNzUlLCBzaW5jZSB0aGlzIGlzIG11Y2ggbW9yZSBwbGVhc2FudCB0byB0aGUgZXllIHdpdGgKKyAgICAgICAgICAgICogdmVyeSBhY2NlcHRhYmxlIGRpc3RvcnRpb24KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBGVF9Qb3MgIGZyYWNfbGVmdCAgPSBvcmdfbGVmdCAgJiA2MzsKKyAgICAgICAgICAgIEZUX1BvcyAgZnJhY19yaWdodCA9IG9yZ19yaWdodCAmIDYzOworCisgICAgICAgICAgICBpZiAoIGZyYWNfbGVmdCAgPj0gMjIgJiYgZnJhY19sZWZ0ICA8PSA0MiAmJgorICAgICAgICAgICAgICAgICBmcmFjX3JpZ2h0ID49IDIyICYmIGZyYWNfcmlnaHQgPD0gNDIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBvcmcgPSBmcmFjX2xlZnQ7CisgICAgICAgICAgICAgIGZpdCA9ICggb3JnIDw9IDMyICkgPyAxNiA6IDQ4OworICAgICAgICAgICAgICBkZWx0YSA9IEZUX0FCUyggZml0IC0gb3JnICk7CisgICAgICAgICAgICAgIGRpc3BsYWNlbWVudHNbY291bnRdID0gZml0IC0gb3JnOworICAgICAgICAgICAgICBzY29yZXNbY291bnQrK10gICAgICA9IGRlbHRhOworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiZGlzcEE9JS4yZiAoJWQpICIsICggZml0IC0gb3JnICkgLyA2NC4wLCBkZWx0YSApKTsKKworICAgICAgICAgICAgICBvcmcgPSBmcmFjX3JpZ2h0OworICAgICAgICAgICAgICBmaXQgPSAoIG9yZyA8PSAzMiApID8gMTYgOiA0ODsKKyAgICAgICAgICAgICAgZGVsdGEgPSBGVF9BQlMoIGZpdCAtIG9yZyApOworICAgICAgICAgICAgICBkaXNwbGFjZW1lbnRzW2NvdW50XSA9IGZpdCAtIG9yZzsKKyAgICAgICAgICAgICAgc2NvcmVzW2NvdW50KytdICAgICA9IGRlbHRhOworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiZGlzcEI9JS4yZiAoJWQpICIsICggZml0IC0gb3JnICkgLyA2NC4wLCBkZWx0YSApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBzbmFwcGluZyB0aGUgbGVmdCBlZGdlIHRvIHRoZSBncmlkICovCisgICAgICAgICAgb3JnICAgPSBvcmdfbGVmdDsKKyAgICAgICAgICBmaXQgICA9IEZUX1BJWF9ST1VORCggb3JnICk7CisgICAgICAgICAgZGVsdGEgPSBGVF9BQlMoIGZpdCAtIG9yZyApOworICAgICAgICAgIGRpc3BsYWNlbWVudHNbY291bnRdID0gZml0IC0gb3JnOworICAgICAgICAgIHNjb3Jlc1tjb3VudCsrXSAgICAgID0gZGVsdGE7CisgICAgICAgICAgRlRfVFJBQ0U1KCggImRpc3BDPSUuMmYgKCVkKSAiLCAoIGZpdCAtIG9yZyApIC8gNjQuMCwgZGVsdGEgKSk7CisKKyAgICAgICAgICAvKiBzbmFwcGluZyB0aGUgcmlnaHQgZWRnZSB0byB0aGUgZ3JpZCAqLworICAgICAgICAgIG9yZyAgID0gb3JnX3JpZ2h0OworICAgICAgICAgIGZpdCAgID0gRlRfUElYX1JPVU5EKCBvcmcgKTsKKyAgICAgICAgICBkZWx0YSA9IEZUX0FCUyggZml0IC0gb3JnICk7CisgICAgICAgICAgZGlzcGxhY2VtZW50c1tjb3VudF0gPSBmaXQgLSBvcmc7CisgICAgICAgICAgc2NvcmVzW2NvdW50KytdICAgICAgPSBkZWx0YTsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiZGlzcEQ9JS4yZiAoJWQpICIsICggZml0IC0gb3JnICkgLyA2NC4wLCBkZWx0YSApKTsKKworICAgICAgICAgIC8qIG5vdyBmaW5kIHRoZSBiZXN0IGRpc3BsYWNlbWVudCAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyAgYmVzdF9zY29yZSA9IHNjb3Jlc1swXTsKKyAgICAgICAgICAgIEZUX1BvcyAgYmVzdF9kaXNwICA9IGRpc3BsYWNlbWVudHNbMF07CisgICAgICAgICAgICBGVF9VSW50IG5uOworCisgICAgICAgICAgICBmb3IgKCBubiA9IDE7IG5uIDwgY291bnQ7IG5uKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHNjb3Jlc1tubl0gPCBiZXN0X3Njb3JlICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJlc3Rfc2NvcmUgPSBzY29yZXNbbm5dOworICAgICAgICAgICAgICAgIGJlc3RfZGlzcCAgPSBkaXNwbGFjZW1lbnRzW25uXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJfY2VudGVyID0gb3JnX2NlbnRlciArIGJlc3RfZGlzcDsKKyAgICAgICAgICB9CisgICAgICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKyAgICAgICAgfQorCisgICAgICBBbGlnblN0ZW06CisgICAgICAgIGVkZ2UtPnBvcyAgPSBjdXJfY2VudGVyIC0gKCBjdXJfbGVuID4+IDEgKTsKKyAgICAgICAgZWRnZTItPnBvcyA9IGVkZ2UtPnBvcyArIGN1cl9sZW47CisKKyAgICAgICAgRlRfVFJBQ0U1KCggIlNURU0xOiAlZCAob3Bvcz0lLjJmKSB0byAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgIiBzbmFwcGVkIHRvICglLjJmKSBhbmQgKCUuMmYpLCIKKyAgICAgICAgICAgICAgICAgICAgIiBvcmdfbGVuPSUuMmYgY3VyX2xlbj0lLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICBlZGdlLWVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgZWRnZTItZWRnZXMsIGVkZ2UyLT5vcG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgZWRnZS0+cG9zIC8gNjQuMCwgZWRnZTItPnBvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgIG9yZ19sZW4gLyA2NC4wLCBjdXJfbGVuIC8gNjQuMCApKTsKKworICAgICAgICBlZGdlLT5mbGFncyAgfD0gQUZfRURHRV9ET05FOworICAgICAgICBlZGdlMi0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworCisgICAgICAgIGlmICggZWRnZSA+IGVkZ2VzICYmIGVkZ2UtPnBvcyA8IGVkZ2VbLTFdLnBvcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiQk9VTkQ6ICVkIChwb3M9JS4yZikgdG8gKCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtZWRnZXMsIGVkZ2UtPnBvcyAvIDY0LjAsIGVkZ2VbLTFdLnBvcyAvIDY0LjAgKSk7CisgICAgICAgICAgZWRnZS0+cG9zID0gZWRnZVstMV0ucG9zOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgbG93ZXJjYXNlIG0ncyBtYWludGFpbiB0aGVpciBzeW1tZXRyeSAqLworCisgICAgLyogSW4gZ2VuZXJhbCwgbG93ZXJjYXNlIG0ncyBoYXZlIHNpeCB2ZXJ0aWNhbCBlZGdlcyBpZiB0aGV5IGFyZSBzYW5zICovCisgICAgLyogc2VyaWYsIG9yIHR3ZWx2ZSBpZiB0aGV5IGFyZSB3aXRoIHNlcmlmcy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgICovCisgICAgLyogYmFzZWQgb24gdGhhdCBhc3N1bXB0aW9uLCBhbmQgc2VlbXMgdG8gd29yayB2ZXJ5IHdlbGwgd2l0aCBtb3N0ICAgICovCisgICAgLyogZmFjZXMuICBIb3dldmVyLCBpZiBmb3IgYSBjZXJ0YWluIGZhY2UgdGhpcyBhc3N1bXB0aW9uIGlzIG5vdCAgICAgICovCisgICAgLyogdHJ1ZSwgdGhlIG0gaXMganVzdCByZW5kZXJlZCBsaWtlIGJlZm9yZS4gIEluIGFkZGl0aW9uLCBhbnkgc3RlbSAgICovCisgICAgLyogY29ycmVjdGlvbiB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byBzeW1tZXRyaWNhbCBnbHlwaHMgKGV2ZW4gaWYgdGhlICovCisgICAgLyogZ2x5cGggaXMgbm90IGFuIG0pLCBzbyB0aGUgcG90ZW50aWFsIGZvciB1bndhbnRlZCBkaXN0b3J0aW9uIGlzICAgICovCisgICAgLyogcmVsYXRpdmVseSBsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBXZSBkb24ndCBoYW5kbGUgaG9yaXpvbnRhbCBlZGdlcyBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkgYXNzdXJlIHRoYXQgKi8KKyAgICAvKiB0aGUgdGhpcmQgKGxvd2VzdCkgc3RlbSBhbGlnbnMgd2l0aCB0aGUgYmFzZSBsaW5lOyBpdCBtaWdodCBlbmQgdXAgKi8KKyAgICAvKiBvbmUgcGl4ZWwgaGlnaGVyIG9yIGxvd2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmIDAKKyAgICB7CisgICAgICBGVF9JbnQgIG5fZWRnZXMgPSBlZGdlX2xpbWl0IC0gZWRnZXM7CisKKworICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogJiYgKCBuX2VkZ2VzID09IDYgfHwgbl9lZGdlcyA9PSAxMiApICkKKyAgICAgIHsKKyAgICAgICAgQUZfRWRnZSAgZWRnZTEsIGVkZ2UyLCBlZGdlMzsKKyAgICAgICAgRlRfUG9zICAgZGlzdDEsIGRpc3QyLCBzcGFuLCBkZWx0YTsKKworCisgICAgICAgIGlmICggbl9lZGdlcyA9PSA2ICkKKyAgICAgICAgeworICAgICAgICAgIGVkZ2UxID0gZWRnZXM7CisgICAgICAgICAgZWRnZTIgPSBlZGdlcyArIDI7CisgICAgICAgICAgZWRnZTMgPSBlZGdlcyArIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZWRnZTEgPSBlZGdlcyArIDE7CisgICAgICAgICAgZWRnZTIgPSBlZGdlcyArIDU7CisgICAgICAgICAgZWRnZTMgPSBlZGdlcyArIDk7CisgICAgICAgIH0KKworICAgICAgICBkaXN0MSA9IGVkZ2UyLT5vcG9zIC0gZWRnZTEtPm9wb3M7CisgICAgICAgIGRpc3QyID0gZWRnZTMtPm9wb3MgLSBlZGdlMi0+b3BvczsKKworICAgICAgICBzcGFuID0gZGlzdDEgLSBkaXN0MjsKKyAgICAgICAgaWYgKCBzcGFuIDwgMCApCisgICAgICAgICAgc3BhbiA9IC1zcGFuOworCisgICAgICAgIGlmICggc3BhbiA8IDggKQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgPSBlZGdlMy0+cG9zIC0gKCAyICogZWRnZTItPnBvcyAtIGVkZ2UxLT5wb3MgKTsKKyAgICAgICAgICBlZGdlMy0+cG9zIC09IGRlbHRhOworICAgICAgICAgIGlmICggZWRnZTMtPmxpbmsgKQorICAgICAgICAgICAgZWRnZTMtPmxpbmstPnBvcyAtPSBkZWx0YTsKKworICAgICAgICAgIC8qIG1vdmUgdGhlIHNlcmlmcyBhbG9uZyB3aXRoIHRoZSBzdGVtICovCisgICAgICAgICAgaWYgKCBuX2VkZ2VzID09IDEyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAoIGVkZ2VzICsgOCApLT5wb3MgLT0gZGVsdGE7CisgICAgICAgICAgICAoIGVkZ2VzICsgMTEgKS0+cG9zIC09IGRlbHRhOworICAgICAgICAgIH0KKworICAgICAgICAgIGVkZ2UzLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisgICAgICAgICAgaWYgKCBlZGdlMy0+bGluayApCisgICAgICAgICAgICBlZGdlMy0+bGluay0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOworICAgICAgICB9CisgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIGhhc19zZXJpZnMgfHwgIWFuY2hvciApCisgICAgeworICAgICAgLyoKKyAgICAgICAqICBub3cgaGludCB0aGUgcmVtYWluaW5nIGVkZ2VzIChzZXJpZnMgYW5kIHNpbmdsZSkgaW4gb3JkZXIKKyAgICAgICAqICB0byBjb21wbGV0ZSBvdXIgcHJvY2Vzc2luZworICAgICAgICovCisgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGRlbHRhOworCisKKyAgICAgICAgaWYgKCBlZGdlLT5mbGFncyAmIEFGX0VER0VfRE9ORSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVsdGEgPSAxMDAwOworCisgICAgICAgIGlmICggZWRnZS0+c2VyaWYgKQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgPSBlZGdlLT5zZXJpZi0+b3BvcyAtIGVkZ2UtPm9wb3M7CisgICAgICAgICAgaWYgKCBkZWx0YSA8IDAgKQorICAgICAgICAgICAgZGVsdGEgPSAtZGVsdGE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRlbHRhIDwgNjQgKyAxNiApCisgICAgICAgIHsKKyAgICAgICAgICBhZl9sYXRpbjJfYWxpZ25fc2VyaWZfZWRnZSggaGludHMsIGVkZ2UtPnNlcmlmLCBlZGdlICk7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIlNFUklGOiBlZGdlICVkIChvcG9zPSUuMmYpIHNlcmlmIHRvICVkIChvcG9zPSUuMmYpIgorICAgICAgICAgICAgICAgICAgICAgICIgYWxpZ25lZCB0byAoJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZS1lZGdlcywgZWRnZS0+b3BvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2VyaWYgLSBlZGdlcywgZWRnZS0+c2VyaWYtPm9wb3MgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAgKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoICFhbmNob3IgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIlNFUklGX0FOQ0hPUjogZWRnZSAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNuYXBwZWQgdG8gKCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtZWRnZXMsIGVkZ2UtPm9wb3MgLyA2NC4wLCBlZGdlLT5wb3MgLyA2NC4wICkpOworICAgICAgICAgIGVkZ2UtPnBvcyA9IEZUX1BJWF9ST1VORCggZWRnZS0+b3BvcyApOworICAgICAgICAgIGFuY2hvciAgICA9IGVkZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgQUZfRWRnZSAgYmVmb3JlLCBhZnRlcjsKKworCisgICAgICAgICAgZm9yICggYmVmb3JlID0gZWRnZSAtIDE7IGJlZm9yZSA+PSBlZGdlczsgYmVmb3JlLS0gKQorICAgICAgICAgICAgaWYgKCBiZWZvcmUtPmZsYWdzICYgQUZfRURHRV9ET05FICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBmb3IgKCBhZnRlciA9IGVkZ2UgKyAxOyBhZnRlciA8IGVkZ2VfbGltaXQ7IGFmdGVyKysgKQorICAgICAgICAgICAgaWYgKCBhZnRlci0+ZmxhZ3MgJiBBRl9FREdFX0RPTkUgKQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmICggYmVmb3JlID49IGVkZ2VzICYmIGJlZm9yZSA8IGVkZ2UgICAmJgorICAgICAgICAgICAgICAgYWZ0ZXIgPCBlZGdlX2xpbWl0ICYmIGFmdGVyID4gZWRnZSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBhZnRlci0+b3BvcyA9PSBiZWZvcmUtPm9wb3MgKQorICAgICAgICAgICAgICBlZGdlLT5wb3MgPSBiZWZvcmUtPnBvczsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWRnZS0+cG9zID0gYmVmb3JlLT5wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGVkZ2UtPm9wb3MgLSBiZWZvcmUtPm9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXItPnBvcyAtIGJlZm9yZS0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyLT5vcG9zIC0gYmVmb3JlLT5vcG9zICk7CisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiU0VSSUZfTElOSzE6IGVkZ2UgJWQgKG9wb3M9JS4yZikgc25hcHBlZCB0byAoJS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgICAiIGZyb20gJWQgKG9wb3M9JS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLWVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwgZWRnZS0+cG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSAtIGVkZ2VzLCBiZWZvcmUtPm9wb3MgLyA2NC4wICkpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgZWRnZS0+cG9zID0gYW5jaG9yLT5wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgKCAoIGVkZ2UtPm9wb3MgLSBhbmNob3ItPm9wb3MgKyAxNiApICYgfjMxICk7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICJTRVJJRl9MSU5LMjogZWRnZSAlZCAob3Bvcz0lLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgc25hcHBlZCB0byAoJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLWVkZ2VzLCBlZGdlLT5vcG9zIC8gNjQuMCwgZWRnZS0+cG9zIC8gNjQuMCApKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlZGdlLT5mbGFncyB8PSBBRl9FREdFX0RPTkU7CisKKyAgICAgICAgaWYgKCBlZGdlID4gZWRnZXMgJiYgZWRnZS0+cG9zIDwgZWRnZVstMV0ucG9zICkKKyAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWy0xXS5wb3M7CisKKyAgICAgICAgaWYgKCBlZGdlICsgMSA8IGVkZ2VfbGltaXQgICAgICAgICYmCisgICAgICAgICAgICAgZWRnZVsxXS5mbGFncyAmIEFGX0VER0VfRE9ORSAmJgorICAgICAgICAgICAgIGVkZ2UtPnBvcyA+IGVkZ2VbMV0ucG9zICAgICAgKQorICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbMV0ucG9zOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX2xhdGluMl9oaW50c19hcHBseSggQUZfR2x5cGhIaW50cyAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUZfTGF0aW5NZXRyaWNzICBtZXRyaWNzICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBpbnQgICAgICAgZGltOworCisKKyAgICBlcnJvciA9IGFmX2dseXBoX2hpbnRzX3JlbG9hZCggaGludHMsIG91dGxpbmUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGFuYWx5emUgZ2x5cGggb3V0bGluZSAqLworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgIGlmICggKCBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJgorICAgICAgICAgICBBRl9ISU5UU19ET19XQVJQKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2Vsc2UKKyAgICBpZiAoIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGhpbnRzICkgKQorI2VuZGlmCisgICAgeworICAgICAgZXJyb3IgPSBhZl9sYXRpbjJfaGludHNfZGV0ZWN0X2ZlYXR1cmVzKCBoaW50cywgQUZfRElNRU5TSU9OX0hPUlogKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBBRl9ISU5UU19ET19WRVJUSUNBTCggaGludHMgKSApCisgICAgeworICAgICAgZXJyb3IgPSBhZl9sYXRpbjJfaGludHNfZGV0ZWN0X2ZlYXR1cmVzKCBoaW50cywgQUZfRElNRU5TSU9OX1ZFUlQgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGFmX2xhdGluMl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMoIGhpbnRzLCBtZXRyaWNzICk7CisgICAgfQorCisgICAgLyogZ3JpZC1maXQgdGhlIG91dGxpbmUgKi8KKyAgICBmb3IgKCBkaW0gPSAwOyBkaW0gPCBBRl9ESU1FTlNJT05fTUFYOyBkaW0rKyApCisgICAgeworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJgorICAgICAgICAgICBBRl9ISU5UU19ET19XQVJQKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIEFGX1dhcnBlclJlYyAgd2FycGVyOworICAgICAgICBGVF9GaXhlZCAgICAgIHNjYWxlOworICAgICAgICBGVF9Qb3MgICAgICAgIGRlbHRhOworCisKKyAgICAgICAgYWZfd2FycGVyX2NvbXB1dGUoICZ3YXJwZXIsIGhpbnRzLCBkaW0sICZzY2FsZSwgJmRlbHRhICk7CisgICAgICAgIGFmX2dseXBoX2hpbnRzX3NjYWxlX2RpbSggaGludHMsIGRpbSwgc2NhbGUsIGRlbHRhICk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworCisgICAgICBpZiAoICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICYmIEFGX0hJTlRTX0RPX0hPUklaT05UQUwoIGhpbnRzICkgKSB8fAorICAgICAgICAgICAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCAmJiBBRl9ISU5UU19ET19WRVJUSUNBTCggaGludHMgKSApICAgKQorICAgICAgeworICAgICAgICBhZl9sYXRpbjJfaGludF9lZGdlcyggaGludHMsIChBRl9EaW1lbnNpb24pZGltICk7CisgICAgICAgIGFmX2dseXBoX2hpbnRzX2FsaWduX2VkZ2VfcG9pbnRzKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgICAgYWZfZ2x5cGhfaGludHNfYWxpZ25fc3Ryb25nX3BvaW50cyggaGludHMsIChBRl9EaW1lbnNpb24pZGltICk7CisgICAgICAgIGFmX2dseXBoX2hpbnRzX2FsaWduX3dlYWtfcG9pbnRzKCBoaW50cywgKEFGX0RpbWVuc2lvbilkaW0gKTsKKyAgICAgIH0KKyAgICB9CisgICAgYWZfZ2x5cGhfaGludHNfc2F2ZSggaGludHMsIG91dGxpbmUgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICBMIEEgVCBJIE4gICBTIEMgUiBJIFAgVCAgIEMgTCBBIFMgUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBBRl9ERUZJTkVfV1JJVElOR19TWVNURU1fQ0xBU1MoCisgICAgYWZfbGF0aW4yX3dyaXRpbmdfc3lzdGVtX2NsYXNzLAorCisgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4yLAorCisgICAgc2l6ZW9mICggQUZfTGF0aW5NZXRyaWNzUmVjICksCisKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0TWV0cmljc0Z1bmMpIGFmX2xhdGluMl9tZXRyaWNzX2luaXQsCisgICAgKEFGX1dyaXRpbmdTeXN0ZW1fU2NhbGVNZXRyaWNzRnVuYylhZl9sYXRpbjJfbWV0cmljc19zY2FsZSwKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMpIE5VTEwsCisKKyAgICAoQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSAgIGFmX2xhdGluMl9oaW50c19pbml0LAorICAgIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSAgYWZfbGF0aW4yX2hpbnRzX2FwcGx5CisgICkKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyNjc1MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbGF0aW4yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRkxBVElOMl9IX18KKyNkZWZpbmUgX19BRkxBVElOMl9IX18KKworI2luY2x1ZGUgImFmaGludHMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIHRoZSBgbGF0aW4nIHdyaXRpbmcgc3lzdGVtICovCisKKyAgQUZfREVDTEFSRV9XUklUSU5HX1NZU1RFTV9DTEFTUyggYWZfbGF0aW4yX3dyaXRpbmdfc3lzdGVtX2NsYXNzICkKKworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGTEFUSU5fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsb2FkZXIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsb2FkZXIuYwpAQCAtMCwwICsxLDQwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZsb2FkZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIGdseXBoIGxvYWRpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiYWZnbG9iYWwuaCIKKyNpbmNsdWRlICJhZmxvYWRlci5oIgorI2luY2x1ZGUgImFmaGludHMuaCIKKyNpbmNsdWRlICJhZmVycm9ycy5oIgorI2luY2x1ZGUgImFmbW9kdWxlLmgiCisjaW5jbHVkZSAiYWZwaWMuaCIKKworCisgIC8qIEluaXRpYWxpemUgZ2x5cGggbG9hZGVyLiAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xvYWRlcl9pbml0KCBBRl9Mb2FkZXIgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICBBRl9HbHlwaEhpbnRzICBoaW50cyApCisgIHsKKyAgICBGVF9aRVJPKCBsb2FkZXIgKTsKKworICAgIGxvYWRlci0+aGludHMgPSBoaW50czsKKyAgfQorCisKKyAgLyogUmVzZXQgZ2x5cGggbG9hZGVyIGFuZCBjb21wdXRlIGdsb2JhbHMgaWYgbmVjZXNzYXJ5LiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sb2FkZXJfcmVzZXQoIEFGX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgIEFGX01vZHVsZSAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGxvYWRlci0+ZmFjZSAgICA9IGZhY2U7CisgICAgbG9hZGVyLT5nbG9iYWxzID0gKEFGX0ZhY2VHbG9iYWxzKWZhY2UtPmF1dG9oaW50LmRhdGE7CisKKyAgICBpZiAoIGxvYWRlci0+Z2xvYmFscyA9PSBOVUxMICkKKyAgICB7CisgICAgICBlcnJvciA9IGFmX2ZhY2VfZ2xvYmFsc19uZXcoIGZhY2UsICZsb2FkZXItPmdsb2JhbHMsIG1vZHVsZSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBmYWNlLT5hdXRvaGludC5kYXRhID0KKyAgICAgICAgICAoRlRfUG9pbnRlcilsb2FkZXItPmdsb2JhbHM7CisgICAgICAgIGZhY2UtPmF1dG9oaW50LmZpbmFsaXplciA9CisgICAgICAgICAgKEZUX0dlbmVyaWNfRmluYWxpemVyKWFmX2ZhY2VfZ2xvYmFsc19mcmVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogRmluYWxpemUgZ2x5cGggbG9hZGVyLiAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGFmX2xvYWRlcl9kb25lKCBBRl9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBsb2FkZXItPmZhY2UgICAgPSBOVUxMOworICAgIGxvYWRlci0+Z2xvYmFscyA9IE5VTEw7CisgICAgbG9hZGVyLT5oaW50cyAgID0gTlVMTDsKKyAgfQorCisKKyAgLyogRG8gdGhlIG1haW4gd29yayBvZiBgYWZfbG9hZGVyX2xvYWRfZ2x5cGgnLiAgTm90ZSB0aGF0IHdlIG5ldmVyICAgKi8KKyAgLyogaGF2ZSB0byBkZWFsIHdpdGggY29tcG9zaXRlIGdseXBocyBhcyB0aG9zZSBnZXQgbG9hZGVkIGludG8gICAgICAgKi8KKyAgLyogRlRfR0xZUEhfRk9STUFUX09VVExJTkUgYnkgdGhlIHJlY3Vyc2VkIGBGVF9Mb2FkX0dseXBoJyBmdW5jdGlvbi4gKi8KKyAgLyogSW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgRlRfTE9BRF9OT19SRUNVUlNFIGlzIHNldCwgaXQgaW1wbGllcyAgICAgKi8KKyAgLyogRlRfTE9BRF9OT19TQ0FMRSBhbmQgYXMgc3VjaCB0aGUgYXV0by1oaW50ZXIgaXMgbmV2ZXIgY2FsbGVkLiAgICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZfbG9hZGVyX2xvYWRfZyggQUZfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgIEFGX1NjYWxlciAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgZXJyb3I7CisgICAgRlRfRmFjZSAgICAgICAgICAgZmFjZSAgICAgPSBsb2FkZXItPmZhY2U7CisgICAgQUZfU3R5bGVNZXRyaWNzICAgbWV0cmljcyAgPSBsb2FkZXItPm1ldHJpY3M7CisgICAgQUZfR2x5cGhIaW50cyAgICAgaGludHMgICAgPSBsb2FkZXItPmhpbnRzOworICAgIEZUX0dseXBoU2xvdCAgICAgIHNsb3QgICAgID0gZmFjZS0+Z2x5cGg7CisgICAgRlRfU2xvdF9JbnRlcm5hbCAgaW50ZXJuYWwgPSBzbG90LT5pbnRlcm5hbDsKKyAgICBGVF9HbHlwaExvYWRlciAgICBnbG9hZGVyICA9IGludGVybmFsLT5sb2FkZXI7CisgICAgRlRfSW50MzIgICAgICAgICAgZmxhZ3M7CisKKworICAgIGZsYWdzID0gbG9hZF9mbGFncyB8IEZUX0xPQURfTElORUFSX0RFU0lHTjsKKyAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LCBmbGFncyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgbG9hZGVyLT50cmFuc2Zvcm1lZCA9IGludGVybmFsLT5nbHlwaF90cmFuc2Zvcm1lZDsKKyAgICBpZiAoIGxvYWRlci0+dHJhbnNmb3JtZWQgKQorICAgIHsKKyAgICAgIEZUX01hdHJpeCAgaW52ZXJzZTsKKworCisgICAgICBsb2FkZXItPnRyYW5zX21hdHJpeCA9IGludGVybmFsLT5nbHlwaF9tYXRyaXg7CisgICAgICBsb2FkZXItPnRyYW5zX2RlbHRhICA9IGludGVybmFsLT5nbHlwaF9kZWx0YTsKKworICAgICAgaW52ZXJzZSA9IGxvYWRlci0+dHJhbnNfbWF0cml4OworICAgICAgaWYgKCAhRlRfTWF0cml4X0ludmVydCggJmludmVyc2UgKSApCisgICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZsb2FkZXItPnRyYW5zX2RlbHRhLCAmaW52ZXJzZSApOworICAgIH0KKworICAgIHN3aXRjaCAoIHNsb3QtPmZvcm1hdCApCisgICAgeworICAgIGNhc2UgRlRfR0xZUEhfRk9STUFUX09VVExJTkU6CisgICAgICAvKiB0cmFuc2xhdGUgdGhlIGxvYWRlZCBnbHlwaCB3aGVuIGFuIGludGVybmFsIHRyYW5zZm9ybSBpcyBuZWVkZWQgKi8KKyAgICAgIGlmICggbG9hZGVyLT50cmFuc2Zvcm1lZCApCisgICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCAmc2xvdC0+b3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+dHJhbnNfZGVsdGEueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+dHJhbnNfZGVsdGEueSApOworCisgICAgICAvKiBjb21wdXRlIG9yaWdpbmFsIGhvcml6b250YWwgcGhhbnRvbSBwb2ludHMgKGFuZCBpZ25vcmUgKi8KKyAgICAgIC8qIHZlcnRpY2FsIG9uZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgbG9hZGVyLT5wcDEueCA9IGhpbnRzLT54X2RlbHRhOworICAgICAgbG9hZGVyLT5wcDEueSA9IGhpbnRzLT55X2RlbHRhOworICAgICAgbG9hZGVyLT5wcDIueCA9IEZUX011bEZpeCggc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLT54X3NjYWxlICkgKyBoaW50cy0+eF9kZWx0YTsKKyAgICAgIGxvYWRlci0+cHAyLnkgPSBoaW50cy0+eV9kZWx0YTsKKworICAgICAgLyogYmUgc3VyZSB0byBjaGVjayBmb3Igc3BhY2luZyBnbHlwaHMgKi8KKyAgICAgIGlmICggc2xvdC0+b3V0bGluZS5uX3BvaW50cyA9PSAwICkKKyAgICAgICAgZ290byBIaW50X01ldHJpY3M7CisKKyAgICAgIC8qIG5vdyBsb2FkIHRoZSBzbG90IGltYWdlIGludG8gdGhlIGF1dG8tb3V0bGluZSBhbmQgcnVuIHRoZSAqLworICAgICAgLyogYXV0b21hdGljIGhpbnRpbmcgcHJvY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICB7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgICAgICAgQUZfRmFjZUdsb2JhbHMgICAgICAgICBnbG9iYWxzID0gbG9hZGVyLT5nbG9iYWxzOworI2VuZGlmCisgICAgICAgIEFGX1N0eWxlQ2xhc3MgICAgICAgICAgc3R5bGVfY2xhc3MgPSBtZXRyaWNzLT5zdHlsZV9jbGFzczsKKyAgICAgICAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzICB3cml0aW5nX3N5c3RlbV9jbGFzcyA9CisgICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVRbc3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKworCisgICAgICAgIGlmICggd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX2hpbnRzX2FwcGx5ICkKKyAgICAgICAgICB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfaGludHNfYXBwbHkoIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdsb2FkZXItPmJhc2Uub3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgKTsKKyAgICAgIH0KKworICAgICAgLyogd2Ugbm93IG5lZWQgdG8gYWRqdXN0IHRoZSBtZXRyaWNzIGFjY29yZGluZyB0byB0aGUgY2hhbmdlIGluICovCisgICAgICAvKiB3aWR0aC9wb3NpdGlvbmluZyB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgaGludGluZyBwcm9jZXNzICAgKi8KKyAgICAgIGlmICggc2NhbGVyLT5yZW5kZXJfbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgICAgICAgb2xkX3JzYiwgb2xkX2xzYiwgbmV3X2xzYjsKKyAgICAgICAgRlRfUG9zICAgICAgICBwcDF4X3VoLCBwcDJ4X3VoOworICAgICAgICBBRl9BeGlzSGludHMgIGF4aXMgID0gJmhpbnRzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXTsKKyAgICAgICAgQUZfRWRnZSAgICAgICBlZGdlMSA9IGF4aXMtPmVkZ2VzOyAgICAgICAgIC8qIGxlZnRtb3N0IGVkZ2UgICovCisgICAgICAgIEFGX0VkZ2UgICAgICAgZWRnZTIgPSBlZGdlMSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLT5udW1fZWRnZXMgLSAxOyAvKiByaWdodG1vc3QgZWRnZSAqLworCisKKyAgICAgICAgaWYgKCBheGlzLT5udW1fZWRnZXMgPiAxICYmIEFGX0hJTlRTX0RPX0FEVkFOQ0UoIGhpbnRzICkgKQorICAgICAgICB7CisgICAgICAgICAgb2xkX3JzYiA9IGxvYWRlci0+cHAyLnggLSBlZGdlMi0+b3BvczsKKyAgICAgICAgICBvbGRfbHNiID0gZWRnZTEtPm9wb3M7CisgICAgICAgICAgbmV3X2xzYiA9IGVkZ2UxLT5wb3M7CisKKyAgICAgICAgICAvKiByZW1lbWJlciB1bmhpbnRlZCB2YWx1ZXMgdG8gbGF0ZXIgYWNjb3VudCAqLworICAgICAgICAgIC8qIGZvciByb3VuZGluZyBlcnJvcnMgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBwcDF4X3VoID0gbmV3X2xzYiAgICAtIG9sZF9sc2I7CisgICAgICAgICAgcHAyeF91aCA9IGVkZ2UyLT5wb3MgKyBvbGRfcnNiOworCisgICAgICAgICAgLyogcHJlZmVyIHRvbyBtdWNoIHNwYWNlIG92ZXIgdG9vIGxpdHRsZSBzcGFjZSAqLworICAgICAgICAgIC8qIGZvciB2ZXJ5IHNtYWxsIHNpemVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgIGlmICggb2xkX2xzYiA8IDI0ICkKKyAgICAgICAgICAgIHBwMXhfdWggLT0gODsKKworICAgICAgICAgIGlmICggb2xkX3JzYiA8IDI0ICkKKyAgICAgICAgICAgIHBwMnhfdWggKz0gODsKKworICAgICAgICAgIGxvYWRlci0+cHAxLnggPSBGVF9QSVhfUk9VTkQoIHBwMXhfdWggKTsKKyAgICAgICAgICBsb2FkZXItPnBwMi54ID0gRlRfUElYX1JPVU5EKCBwcDJ4X3VoICk7CisKKyAgICAgICAgICBpZiAoIGxvYWRlci0+cHAxLnggPj0gbmV3X2xzYiAmJiBvbGRfbHNiID4gMCApCisgICAgICAgICAgICBsb2FkZXItPnBwMS54IC09IDY0OworCisgICAgICAgICAgaWYgKCBsb2FkZXItPnBwMi54IDw9IGVkZ2UyLT5wb3MgJiYgb2xkX3JzYiA+IDAgKQorICAgICAgICAgICAgbG9hZGVyLT5wcDIueCArPSA2NDsKKworICAgICAgICAgIHNsb3QtPmxzYl9kZWx0YSA9IGxvYWRlci0+cHAxLnggLSBwcDF4X3VoOworICAgICAgICAgIHNsb3QtPnJzYl9kZWx0YSA9IGxvYWRlci0+cHAyLnggLSBwcDJ4X3VoOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgcHAxeCA9IGxvYWRlci0+cHAxLng7CisgICAgICAgICAgRlRfUG9zICBwcDJ4ID0gbG9hZGVyLT5wcDIueDsKKworCisgICAgICAgICAgbG9hZGVyLT5wcDEueCA9IEZUX1BJWF9ST1VORCggcHAxeCApOworICAgICAgICAgIGxvYWRlci0+cHAyLnggPSBGVF9QSVhfUk9VTkQoIHBwMnggKTsKKworICAgICAgICAgIHNsb3QtPmxzYl9kZWx0YSA9IGxvYWRlci0+cHAxLnggLSBwcDF4OworICAgICAgICAgIHNsb3QtPnJzYl9kZWx0YSA9IGxvYWRlci0+cHAyLnggLSBwcDJ4OworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1BvcyAgcHAxeCA9IGxvYWRlci0+cHAxLng7CisgICAgICAgIEZUX1BvcyAgcHAyeCA9IGxvYWRlci0+cHAyLng7CisKKworICAgICAgICBsb2FkZXItPnBwMS54ID0gRlRfUElYX1JPVU5EKCBwcDF4ICsgaGludHMtPnhtaW5fZGVsdGEgKTsKKyAgICAgICAgbG9hZGVyLT5wcDIueCA9IEZUX1BJWF9ST1VORCggcHAyeCArIGhpbnRzLT54bWF4X2RlbHRhICk7CisKKyAgICAgICAgc2xvdC0+bHNiX2RlbHRhID0gbG9hZGVyLT5wcDEueCAtIHBwMXg7CisgICAgICAgIHNsb3QtPnJzYl9kZWx0YSA9IGxvYWRlci0+cHAyLnggLSBwcDJ4OworICAgICAgfQorCisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IG90aGVyIGZvcm1hdHMgKHlldD8pICovCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICB9CisKKyAgSGludF9NZXRyaWNzOgorICAgIHsKKyAgICAgIEZUX0JCb3ggICAgYmJveDsKKyAgICAgIEZUX1ZlY3RvciAgdnZlY3RvcjsKKworCisgICAgICB2dmVjdG9yLnggPSBzbG90LT5tZXRyaWNzLnZlcnRCZWFyaW5nWCAtIHNsb3QtPm1ldHJpY3MuaG9yaUJlYXJpbmdYOworICAgICAgdnZlY3Rvci55ID0gc2xvdC0+bWV0cmljcy52ZXJ0QmVhcmluZ1kgLSBzbG90LT5tZXRyaWNzLmhvcmlCZWFyaW5nWTsKKyAgICAgIHZ2ZWN0b3IueCA9IEZUX011bEZpeCggdnZlY3Rvci54LCBtZXRyaWNzLT5zY2FsZXIueF9zY2FsZSApOworICAgICAgdnZlY3Rvci55ID0gRlRfTXVsRml4KCB2dmVjdG9yLnksIG1ldHJpY3MtPnNjYWxlci55X3NjYWxlICk7CisKKyAgICAgIC8qIHRyYW5zZm9ybSB0aGUgaGludGVkIG91dGxpbmUgaWYgbmVlZGVkICovCisgICAgICBpZiAoIGxvYWRlci0+dHJhbnNmb3JtZWQgKQorICAgICAgeworICAgICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggJmdsb2FkZXItPmJhc2Uub3V0bGluZSwgJmxvYWRlci0+dHJhbnNfbWF0cml4ICk7CisgICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZ2dmVjdG9yLCAmbG9hZGVyLT50cmFuc19tYXRyaXggKTsKKyAgICAgIH0KKyNpZiAxCisgICAgICAvKiB3ZSBtdXN0IHRyYW5zbGF0ZSBvdXIgZmluYWwgb3V0bGluZSBieSAtcHAxLnggYW5kIGNvbXB1dGUgKi8KKyAgICAgIC8qIHRoZSBuZXcgbWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBsb2FkZXItPnBwMS54ICkKKyAgICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZnbG9hZGVyLT5iYXNlLm91dGxpbmUsIC1sb2FkZXItPnBwMS54LCAwICk7CisjZW5kaWYKKyAgICAgIEZUX091dGxpbmVfR2V0X0NCb3goICZnbG9hZGVyLT5iYXNlLm91dGxpbmUsICZiYm94ICk7CisKKyAgICAgIGJib3gueE1pbiA9IEZUX1BJWF9GTE9PUiggYmJveC54TWluICk7CisgICAgICBiYm94LnlNaW4gPSBGVF9QSVhfRkxPT1IoIGJib3gueU1pbiApOworICAgICAgYmJveC54TWF4ID0gRlRfUElYX0NFSUwoICBiYm94LnhNYXggKTsKKyAgICAgIGJib3gueU1heCA9IEZUX1BJWF9DRUlMKCAgYmJveC55TWF4ICk7CisKKyAgICAgIHNsb3QtPm1ldHJpY3Mud2lkdGggICAgICAgID0gYmJveC54TWF4IC0gYmJveC54TWluOworICAgICAgc2xvdC0+bWV0cmljcy5oZWlnaHQgICAgICAgPSBiYm94LnlNYXggLSBiYm94LnlNaW47CisgICAgICBzbG90LT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IGJib3gueE1pbjsKKyAgICAgIHNsb3QtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gYmJveC55TWF4OworCisgICAgICBzbG90LT5tZXRyaWNzLnZlcnRCZWFyaW5nWCA9IEZUX1BJWF9GTE9PUiggYmJveC54TWluICsgdnZlY3Rvci54ICk7CisgICAgICBzbG90LT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IEZUX1BJWF9GTE9PUiggYmJveC55TWF4ICsgdnZlY3Rvci55ICk7CisKKyAgICAgIC8qIGZvciBtb25vLXdpZHRoIGZvbnRzIChsaWtlIEFuZGFsZSwgQ291cmllciwgZXRjLikgd2UgbmVlZCAqLworICAgICAgLyogdG8ga2VlcCB0aGUgb3JpZ2luYWwgcm91bmRlZCBhZHZhbmNlIHdpZHRoOyBkaXR0byBmb3IgICAgICovCisgICAgICAvKiBkaWdpdHMgaWYgYWxsIGhhdmUgdGhlIHNhbWUgYWR2YW5jZSB3aWR0aCAgICAgICAgICAgICAgICAgKi8KKyNpZiAwCisgICAgICBpZiAoICFGVF9JU19GSVhFRF9XSURUSCggc2xvdC0+ZmFjZSApICkKKyAgICAgICAgc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9IGxvYWRlci0+cHAyLnggLSBsb2FkZXItPnBwMS54OworICAgICAgZWxzZQorICAgICAgICBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3NjYWxlICk7CisjZWxzZQorICAgICAgaWYgKCBzY2FsZXItPnJlbmRlcl9tb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICggRlRfSVNfRklYRURfV0lEVEgoIHNsb3QtPmZhY2UgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgKCBhZl9mYWNlX2dsb2JhbHNfaXNfZGlnaXQoIGxvYWRlci0+Z2xvYmFscywgZ2x5cGhfaW5kZXggKSAmJgorICAgICAgICAgICAgICAgbWV0cmljcy0+ZGlnaXRzX2hhdmVfc2FtZV93aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgKSApICkKKyAgICAgIHsKKyAgICAgICAgc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9IEZUX011bEZpeCggc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+c2NhbGVyLnhfc2NhbGUgKTsKKworICAgICAgICAvKiBTZXQgZGVsdGEgdmFsdWVzIHRvIDAuICBPdGhlcndpc2UgY29kZSB0aGF0IHVzZXMgdGhlbSBpcyAqLworICAgICAgICAvKiBnb2luZyB0byBydWluIHRoZSBmaXhlZCBhZHZhbmNlIHdpZHRoLiAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzbG90LT5sc2JfZGVsdGEgPSAwOworICAgICAgICBzbG90LT5yc2JfZGVsdGEgPSAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBub24tc3BhY2luZyBnbHlwaHMgbXVzdCBzdGF5IGFzLWlzICovCisgICAgICAgIGlmICggc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSApCisgICAgICAgICAgc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9IGxvYWRlci0+cHAyLnggLSBsb2FkZXItPnBwMS54OworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHNsb3QtPm1ldHJpY3MudmVydEFkdmFuY2UgPSBGVF9NdWxGaXgoIHNsb3QtPm1ldHJpY3MudmVydEFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT5zY2FsZXIueV9zY2FsZSApOworCisgICAgICBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlID0gRlRfUElYX1JPVU5EKCBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlICk7CisgICAgICBzbG90LT5tZXRyaWNzLnZlcnRBZHZhbmNlID0gRlRfUElYX1JPVU5EKCBzbG90LT5tZXRyaWNzLnZlcnRBZHZhbmNlICk7CisKKyNpZiAwCisgICAgICAvKiByZWFzc2lnbiBhbGwgb3V0bGluZSBmaWVsZHMgZXhjZXB0IGZsYWdzIHRvIHByb3RlY3QgdGhlbSAqLworICAgICAgc2xvdC0+b3V0bGluZS5uX2NvbnRvdXJzID0gaW50ZXJuYWwtPmxvYWRlci0+YmFzZS5vdXRsaW5lLm5fY29udG91cnM7CisgICAgICBzbG90LT5vdXRsaW5lLm5fcG9pbnRzICAgPSBpbnRlcm5hbC0+bG9hZGVyLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgICBzbG90LT5vdXRsaW5lLnBvaW50cyAgICAgPSBpbnRlcm5hbC0+bG9hZGVyLT5iYXNlLm91dGxpbmUucG9pbnRzOworICAgICAgc2xvdC0+b3V0bGluZS50YWdzICAgICAgID0gaW50ZXJuYWwtPmxvYWRlci0+YmFzZS5vdXRsaW5lLnRhZ3M7CisgICAgICBzbG90LT5vdXRsaW5lLmNvbnRvdXJzICAgPSBpbnRlcm5hbC0+bG9hZGVyLT5iYXNlLm91dGxpbmUuY29udG91cnM7CisjZW5kaWYKKworICAgICAgc2xvdC0+Zm9ybWF0ICA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogTG9hZCBhIGdseXBoLiAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBhZl9sb2FkZXJfbG9hZF9nbHlwaCggQUZfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBBRl9Nb2R1bGUgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICBsb2FkX2ZsYWdzICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfU2l6ZSAgICAgICBzaXplICAgPSBmYWNlLT5zaXplOworICAgIEFGX1NjYWxlclJlYyAgc2NhbGVyOworCisKKyAgICBpZiAoICFzaXplICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TaXplX0hhbmRsZSApOworCisgICAgRlRfWkVSTyggJnNjYWxlciApOworCisgICAgc2NhbGVyLmZhY2UgICAgPSBmYWNlOworICAgIHNjYWxlci54X3NjYWxlID0gc2l6ZS0+bWV0cmljcy54X3NjYWxlOworICAgIHNjYWxlci54X2RlbHRhID0gMDsgIC8qIFhYWDogVE9ETzogYWRkIHN1cHBvcnQgZm9yIHN1Yi1waXhlbCBoaW50aW5nICovCisgICAgc2NhbGVyLnlfc2NhbGUgPSBzaXplLT5tZXRyaWNzLnlfc2NhbGU7CisgICAgc2NhbGVyLnlfZGVsdGEgPSAwOyAgLyogWFhYOiBUT0RPOiBhZGQgc3VwcG9ydCBmb3Igc3ViLXBpeGVsIGhpbnRpbmcgKi8KKworICAgIHNjYWxlci5yZW5kZXJfbW9kZSA9IEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKTsKKyAgICBzY2FsZXIuZmxhZ3MgICAgICAgPSAwOyAgLyogWFhYOiBmaXggdGhpcyAqLworCisgICAgZXJyb3IgPSBhZl9sb2FkZXJfcmVzZXQoIGxvYWRlciwgbW9kdWxlLCBmYWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljczsKKyAgICAgIEZUX1VJbnQgICAgICAgICAgb3B0aW9ucyA9IEFGX1NUWUxFX05PTkVfREZMVDsKKworCisjaWZkZWYgRlRfT1BUSU9OX0FVVE9GSVQyCisgICAgICAvKiBYWFg6IHVuZG9jdW1lbnRlZCBob29rIHRvIGFjdGl2YXRlIHRoZSBsYXRpbjIgd3JpdGluZyBzeXN0ZW0gKi8KKyAgICAgIGlmICggbG9hZF9mbGFncyAmICggMVVMIDw8IDIwICkgKQorICAgICAgICBvcHRpb25zID0gQUZfU1RZTEVfTFROMl9ERkxUOworI2VuZGlmCisKKyAgICAgIGVycm9yID0gYWZfZmFjZV9nbG9iYWxzX2dldF9tZXRyaWNzKCBsb2FkZXItPmdsb2JhbHMsIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCAmbWV0cmljcyApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgICAgIEFGX0ZhY2VHbG9iYWxzICAgICAgICAgZ2xvYmFscyA9IGxvYWRlci0+Z2xvYmFsczsKKyNlbmRpZgorICAgICAgICBBRl9TdHlsZUNsYXNzICAgICAgICAgIHN0eWxlX2NsYXNzID0gbWV0cmljcy0+c3R5bGVfY2xhc3M7CisgICAgICAgIEFGX1dyaXRpbmdTeXN0ZW1DbGFzcyAgd3JpdGluZ19zeXN0ZW1fY2xhc3MgPQorICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0NMQVNTRVNfR0VUW3N0eWxlX2NsYXNzLT53cml0aW5nX3N5c3RlbV07CisKKworICAgICAgICBsb2FkZXItPm1ldHJpY3MgPSBtZXRyaWNzOworCisgICAgICAgIGlmICggd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX21ldHJpY3Nfc2NhbGUgKQorICAgICAgICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzLT5zdHlsZV9tZXRyaWNzX3NjYWxlKCBtZXRyaWNzLCAmc2NhbGVyICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtZXRyaWNzLT5zY2FsZXIgPSBzY2FsZXI7CisKKyAgICAgICAgbG9hZF9mbGFncyB8PSAgRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTsKKyAgICAgICAgbG9hZF9mbGFncyAmPSB+RlRfTE9BRF9SRU5ERVI7CisKKyAgICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfaGludHNfaW5pdCApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IHdyaXRpbmdfc3lzdGVtX2NsYXNzLT5zdHlsZV9oaW50c19pbml0KCBsb2FkZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gYWZfbG9hZGVyX2xvYWRfZyggbG9hZGVyLCAmc2NhbGVyLCBnaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKyAgICAgIH0KKyAgICB9CisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsb2FkZXIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Y2ZkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZsb2FkZXIuaApAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZmxvYWRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRkxPQURFUl9IX18KKyNkZWZpbmUgX19BRkxPQURFUl9IX18KKworI2luY2x1ZGUgImFmaGludHMuaCIKKyNpbmNsdWRlICJhZm1vZHVsZS5oIgorI2luY2x1ZGUgImFmZ2xvYmFsLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoKKyAgICogIFRoZSBhdXRvZml0dGVyIG1vZHVsZSdzIChnbG9iYWwpIGRhdGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGgKKyAgICogIGFjdHVhbCBmb250cy4gIElmIG5lY2Vzc2FyeSwgYGxvY2FsJyBkYXRhIGxpa2UgdGhlIGN1cnJlbnQgZmFjZSwgdGhlCisgICAqICBjdXJyZW50IGZhY2UncyBhdXRvLWhpbnQgZGF0YSwgb3IgdGhlIGN1cnJlbnQgZ2x5cGgncyBwYXJhbWV0ZXJzCisgICAqICByZWxldmFudCB0byBhdXRvLWhpbnRpbmcgYXJlIGBzd2FwcGVkIGluJy4gIENmLiBmdW5jdGlvbnMgbGlrZQorICAgKiAgYGFmX2xvYWRlcl9yZXNldCcgYW5kIGBhZl9sb2FkZXJfbG9hZF9nJy4KKyAgICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0xvYWRlclJlY18KKyAgeworICAgIC8qIGN1cnJlbnQgZmFjZSBkYXRhICovCisgICAgRlRfRmFjZSAgICAgICAgICAgZmFjZTsKKyAgICBBRl9GYWNlR2xvYmFscyAgICBnbG9iYWxzOworCisgICAgLyogY3VycmVudCBnbHlwaCBkYXRhICovCisgICAgQUZfR2x5cGhIaW50cyAgICAgaGludHM7CisgICAgQUZfU3R5bGVNZXRyaWNzICAgbWV0cmljczsKKyAgICBGVF9Cb29sICAgICAgICAgICB0cmFuc2Zvcm1lZDsKKyAgICBGVF9NYXRyaXggICAgICAgICB0cmFuc19tYXRyaXg7CisgICAgRlRfVmVjdG9yICAgICAgICAgdHJhbnNfZGVsdGE7CisgICAgRlRfVmVjdG9yICAgICAgICAgcHAxOworICAgIEZUX1ZlY3RvciAgICAgICAgIHBwMjsKKyAgICAvKiB3ZSBkb24ndCBoYW5kbGUgdmVydGljYWwgcGhhbnRvbSBwb2ludHMgKi8KKworICB9IEFGX0xvYWRlclJlYywgKkFGX0xvYWRlcjsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZfbG9hZGVyX2luaXQoIEFGX0xvYWRlciAgICAgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgIEFGX0dseXBoSGludHMgIGhpbnRzICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBhZl9sb2FkZXJfcmVzZXQoIEFGX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgIEFGX01vZHVsZSAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgZmFjZSApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9sb2FkZXJfZG9uZSggQUZfTG9hZGVyICBsb2FkZXIgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmX2xvYWRlcl9sb2FkX2dseXBoKCBBRl9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFGX01vZHVsZSAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MgKTsKKworLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGTE9BREVSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbW9kdWxlLmMgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZtb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWU0MjVjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbW9kdWxlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImFmZ2xvYmFsLmgiCisjaW5jbHVkZSAiYWZtb2R1bGUuaCIKKyNpbmNsdWRlICJhZmxvYWRlci5oIgorI2luY2x1ZGUgImFmZXJyb3JzLmgiCisjaW5jbHVkZSAiYWZwaWMuaCIKKworI2lmZGVmIEZUX0RFQlVHX0FVVE9GSVQKKworI2lmbmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisgIGV4dGVybiB2b2lkCisgIGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICB0b19zdGRvdXQgKTsKKyAgZXh0ZXJuIHZvaWQKKyAgYWZfZ2x5cGhfaGludHNfZHVtcF9wb2ludHMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgdG9fc3Rkb3V0ICk7CisgIGV4dGVybiB2b2lkCisgIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMoIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICB0b19zdGRvdXQgKTsKKyNlbmRpZgorCisgIGludCAgX2FmX2RlYnVnX2Rpc2FibGVfaG9yel9oaW50czsKKyAgaW50ICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzOworICBpbnQgIF9hZl9kZWJ1Z19kaXNhYmxlX2JsdWVfaGludHM7CisKKyAgLyogd2UgdXNlIGEgZ2xvYmFsIG9iamVjdCBpbnN0ZWFkIG9mIGEgbG9jYWwgb25lIGZvciBkZWJ1Z2dpbmcgKi8KKyAgQUZfR2x5cGhIaW50c1JlYyAgX2FmX2RlYnVnX2hpbnRzX3JlY1sxXTsKKworICB2b2lkKiAgX2FmX2RlYnVnX2hpbnRzID0gX2FmX2RlYnVnX2hpbnRzX3JlYzsKKyNlbmRpZgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0FVVE9ISU5URVJfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmbW9kdWxlCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZfcHJvcGVydHlfZ2V0X2ZhY2VfZ2xvYmFscyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9GYWNlR2xvYmFscyogIGFnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9Nb2R1bGUgICAgICAgIG1vZHVsZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHM7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBnbG9iYWxzID0gKEFGX0ZhY2VHbG9iYWxzKWZhY2UtPmF1dG9oaW50LmRhdGE7CisgICAgaWYgKCAhZ2xvYmFscyApCisgICAgeworICAgICAgLyogdHJpZ2dlciBjb21wdXRhdGlvbiBvZiB0aGUgZ2xvYmFsIHN0eWxlIGRhdGEgKi8KKyAgICAgIC8qIGluIGNhc2UgaXQgaGFzbid0IGJlZW4gZG9uZSB5ZXQgICAgICAgICAgICAgICovCisgICAgICBlcnJvciA9IGFmX2ZhY2VfZ2xvYmFsc19uZXcoIGZhY2UsICZnbG9iYWxzLCBtb2R1bGUgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgIHsKKyAgICAgICAgZmFjZS0+YXV0b2hpbnQuZGF0YSA9CisgICAgICAgICAgKEZUX1BvaW50ZXIpZ2xvYmFsczsKKyAgICAgICAgZmFjZS0+YXV0b2hpbnQuZmluYWxpemVyID0KKyAgICAgICAgICAoRlRfR2VuZXJpY19GaW5hbGl6ZXIpYWZfZmFjZV9nbG9iYWxzX2ZyZWU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgKmFnbG9iYWxzID0gZ2xvYmFsczsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFmX3Byb3BlcnR5X3NldCggRlRfTW9kdWxlICAgIGZ0X21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgQUZfTW9kdWxlICBtb2R1bGUgPSAoQUZfTW9kdWxlKWZ0X21vZHVsZTsKKworCisgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZmFsbGJhY2stc2NyaXB0IiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgZmFsbGJhY2tfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworCisgICAgICBGVF9VSW50ICBzczsKKworCisgICAgICAvKiBXZSB0cmFuc2xhdGUgdGhlIGZhbGxiYWNrIHNjcmlwdCB0byBhIGZhbGxiYWNrIHN0eWxlIHRoYXQgdXNlcyAqLworICAgICAgLyogYGZhbGxiYWNrLXNjcmlwdCcgYXMgaXRzIHNjcmlwdCBhbmQgYEFGX0NPVkVSQUdFX05PTkUnIGFzIGl0cyAgKi8KKyAgICAgIC8qIGNvdmVyYWdlIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBmb3IgKCBzcyA9IDA7IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsgc3MrKyApCisgICAgICB7CisgICAgICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzID0gQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOworCisKKyAgICAgICAgaWYgKCAoRlRfVUludClzdHlsZV9jbGFzcy0+c2NyaXB0ID09ICpmYWxsYmFja19zY3JpcHQgJiYKKyAgICAgICAgICAgICBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgPT0gQUZfQ09WRVJBR0VfREVGQVVMVCAgICAgKQorICAgICAgICB7CisgICAgICAgICAgbW9kdWxlLT5mYWxsYmFja19zdHlsZSA9IHNzOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggIUFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJhZl9wcm9wZXJ0eV9zZXQ6IEludmFsaWQgdmFsdWUgJWQgZm9yIHByb3BlcnR5IGAlcydcbiIsCisgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX3NjcmlwdCwgcHJvcGVydHlfbmFtZSApKTsKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJkZWZhdWx0LXNjcmlwdCIgKSApCisgICAgeworICAgICAgRlRfVUludCogIGRlZmF1bHRfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworCisKKyAgICAgIG1vZHVsZS0+ZGVmYXVsdF9zY3JpcHQgPSAqZGVmYXVsdF9zY3JpcHQ7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJpbmNyZWFzZS14LWhlaWdodCIgKSApCisgICAgeworICAgICAgRlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQqICBwcm9wID0gKEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0Kil2YWx1ZTsKKyAgICAgIEFGX0ZhY2VHbG9iYWxzICAgICAgICAgICAgZ2xvYmFsczsKKworCisgICAgICBlcnJvciA9IGFmX3Byb3BlcnR5X2dldF9mYWNlX2dsb2JhbHMoIHByb3AtPmZhY2UsICZnbG9iYWxzLCBtb2R1bGUgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZ2xvYmFscy0+aW5jcmVhc2VfeF9oZWlnaHQgPSBwcm9wLT5saW1pdDsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgIndhcnBpbmciICkgKQorICAgIHsKKyAgICAgIEZUX0Jvb2wqICB3YXJwaW5nID0gKEZUX0Jvb2wqKXZhbHVlOworCisKKyAgICAgIG1vZHVsZS0+d2FycGluZyA9ICp3YXJwaW5nOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworCisgICAgRlRfVFJBQ0UwKCggImFmX3Byb3BlcnR5X3NldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAorICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX1Byb3BlcnR5ICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZl9wcm9wZXJ0eV9nZXQoIEZUX01vZHVsZSAgICBmdF9tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIHZhbHVlICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgICAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgQUZfTW9kdWxlICBtb2R1bGUgICAgICAgICA9IChBRl9Nb2R1bGUpZnRfbW9kdWxlOworICAgIEZUX1VJbnQgICAgZmFsbGJhY2tfc3R5bGUgPSBtb2R1bGUtPmZhbGxiYWNrX3N0eWxlOworICAgIEZUX1VJbnQgICAgZGVmYXVsdF9zY3JpcHQgPSBtb2R1bGUtPmRlZmF1bHRfc2NyaXB0OworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgIEZUX0Jvb2wgICAgd2FycGluZyAgICAgICAgPSBtb2R1bGUtPndhcnBpbmc7CisjZW5kaWYKKworCisgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZ2x5cGgtdG8tc2NyaXB0LW1hcCIgKSApCisgICAgeworICAgICAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwKiAgcHJvcCA9IChGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXAqKXZhbHVlOworICAgICAgQUZfRmFjZUdsb2JhbHMgICAgICAgICAgICAgZ2xvYmFsczsKKworCisgICAgICBlcnJvciA9IGFmX3Byb3BlcnR5X2dldF9mYWNlX2dsb2JhbHMoIHByb3AtPmZhY2UsICZnbG9iYWxzLCBtb2R1bGUgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgcHJvcC0+bWFwID0gZ2xvYmFscy0+Z2x5cGhfc3R5bGVzOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZmFsbGJhY2stc2NyaXB0IiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgdmFsID0gKEZUX1VJbnQqKXZhbHVlOworCisgICAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzcyA9IEFGX1NUWUxFX0NMQVNTRVNfR0VUW2ZhbGxiYWNrX3N0eWxlXTsKKworCisgICAgICAqdmFsID0gc3R5bGVfY2xhc3MtPnNjcmlwdDsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImRlZmF1bHQtc2NyaXB0IiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgdmFsID0gKEZUX1VJbnQqKXZhbHVlOworCisKKyAgICAgICp2YWwgPSBkZWZhdWx0X3NjcmlwdDsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImluY3JlYXNlLXgtaGVpZ2h0IiApICkKKyAgICB7CisgICAgICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCogIHByb3AgPSAoRlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQqKXZhbHVlOworICAgICAgQUZfRmFjZUdsb2JhbHMgICAgICAgICAgICBnbG9iYWxzOworCisKKyAgICAgIGVycm9yID0gYWZfcHJvcGVydHlfZ2V0X2ZhY2VfZ2xvYmFscyggcHJvcC0+ZmFjZSwgJmdsb2JhbHMsIG1vZHVsZSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBwcm9wLT5saW1pdCA9IGdsb2JhbHMtPmluY3JlYXNlX3hfaGVpZ2h0OworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAid2FycGluZyIgKSApCisgICAgeworICAgICAgRlRfQm9vbCogIHZhbCA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICAqdmFsID0gd2FycGluZzsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIgKi8KKworICAgIEZUX1RSQUNFMCgoICJhZl9wcm9wZXJ0eV9nZXQ6IG1pc3NpbmcgcHJvcGVydHkgYCVzJ1xuIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lICkpOworICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Qcm9wZXJ0eSApOworICB9CisKKworICBGVF9ERUZJTkVfU0VSVklDRV9QUk9QRVJUSUVTUkVDKAorICAgIGFmX3NlcnZpY2VfcHJvcGVydGllcywKKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKWFmX3Byb3BlcnR5X3NldCwKKyAgICAoRlRfUHJvcGVydGllc19HZXRGdW5jKWFmX3Byb3BlcnR5X2dldCApCisKKworICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxKAorICAgIGFmX3NlcnZpY2VzLAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgJkFGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgKQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Nb2R1bGVfSW50ZXJmYWNlICkKKyAgYWZfZ2V0X2ludGVyZmFjZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG1vZHVsZV9pbnRlcmZhY2UgKQorICB7CisgICAgLyogQUZfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisKKworICAgIGlmICggIW1vZHVsZSApCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBsaWJyYXJ5ID0gbW9kdWxlLT5saWJyYXJ5OworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIE5VTEw7CisjZWxzZQorICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CisjZW5kaWYKKworICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBBRl9TRVJWSUNFU19HRVQsIG1vZHVsZV9pbnRlcmZhY2UgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGFmX2F1dG9maXR0ZXJfaW5pdCggRlRfTW9kdWxlICBmdF9tb2R1bGUgKSAgICAgIC8qIEFGX01vZHVsZSAqLworICB7CisgICAgQUZfTW9kdWxlICBtb2R1bGUgPSAoQUZfTW9kdWxlKWZ0X21vZHVsZTsKKworCisgICAgbW9kdWxlLT5mYWxsYmFja19zdHlsZSA9IEFGX1NUWUxFX0ZBTExCQUNLOworICAgIG1vZHVsZS0+ZGVmYXVsdF9zY3JpcHQgPSBBRl9TQ1JJUFRfREVGQVVMVDsKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyAgICBtb2R1bGUtPndhcnBpbmcgICAgICAgID0gMDsKKyNlbmRpZgorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgYWZfYXV0b2ZpdHRlcl9kb25lKCBGVF9Nb2R1bGUgIGZ0X21vZHVsZSApICAgICAgLyogQUZfTW9kdWxlICovCisgIHsKKyAgICBGVF9VTlVTRUQoIGZ0X21vZHVsZSApOworCisjaWZkZWYgRlRfREVCVUdfQVVUT0ZJVAorICAgIGlmICggX2FmX2RlYnVnX2hpbnRzX3JlYy0+bWVtb3J5ICkKKyAgICAgIGFmX2dseXBoX2hpbnRzX2RvbmUoIF9hZl9kZWJ1Z19oaW50c19yZWMgKTsKKyNlbmRpZgorICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgYWZfYXV0b2ZpdHRlcl9sb2FkX2dseXBoKCBBRl9Nb2R1bGUgICAgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICBsb2FkX2ZsYWdzICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbW9kdWxlLT5yb290LmxpYnJhcnktPm1lbW9yeTsKKworI2lmZGVmIEZUX0RFQlVHX0FVVE9GSVQKKworICAgIC8qIGluIGRlYnVnIG1vZGUsIHdlIHVzZSBhIGdsb2JhbCBvYmplY3QgdGhhdCBzdXJ2aXZlcyB0aGlzIHJvdXRpbmUgKi8KKworICAgIEFGX0dseXBoSGludHMgIGhpbnRzID0gX2FmX2RlYnVnX2hpbnRzX3JlYzsKKyAgICBBRl9Mb2FkZXJSZWMgICBsb2FkZXJbMV07CisKKyAgICBGVF9VTlVTRUQoIHNpemUgKTsKKworCisgICAgaWYgKCBoaW50cy0+bWVtb3J5ICkKKyAgICAgIGFmX2dseXBoX2hpbnRzX2RvbmUoIGhpbnRzICk7CisKKyAgICBhZl9nbHlwaF9oaW50c19pbml0KCBoaW50cywgbWVtb3J5ICk7CisgICAgYWZfbG9hZGVyX2luaXQoIGxvYWRlciwgaGludHMgKTsKKworICAgIGVycm9yID0gYWZfbG9hZGVyX2xvYWRfZ2x5cGgoIGxvYWRlciwgbW9kdWxlLCBzbG90LT5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBsb2FkX2ZsYWdzICk7CisKKyAgICBhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyggaGludHMsIDAgKTsKKyAgICBhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzKCBoaW50cywgMCApOworICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMoIGhpbnRzLCAwICk7CisKKyAgICBhZl9sb2FkZXJfZG9uZSggbG9hZGVyICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisKKyNlbHNlIC8qICFGVF9ERUJVR19BVVRPRklUICovCisKKyAgICBBRl9HbHlwaEhpbnRzUmVjICBoaW50c1sxXTsKKyAgICBBRl9Mb2FkZXJSZWMgICAgICBsb2FkZXJbMV07CisKKyAgICBGVF9VTlVTRUQoIHNpemUgKTsKKworCisgICAgYWZfZ2x5cGhfaGludHNfaW5pdCggaGludHMsIG1lbW9yeSApOworICAgIGFmX2xvYWRlcl9pbml0KCBsb2FkZXIsIGhpbnRzICk7CisKKyAgICBlcnJvciA9IGFmX2xvYWRlcl9sb2FkX2dseXBoKCBsb2FkZXIsIG1vZHVsZSwgc2xvdC0+ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyApOworCisgICAgYWZfbG9hZGVyX2RvbmUoIGxvYWRlciApOworICAgIGFmX2dseXBoX2hpbnRzX2RvbmUoIGhpbnRzICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisKKyNlbmRpZiAvKiAhRlRfREVCVUdfQVVUT0ZJVCAqLworICB9CisKKworICBGVF9ERUZJTkVfQVVUT0hJTlRFUl9JTlRFUkZBQ0UoCisgICAgYWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UsCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXRfZmFjZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF9nbG9iYWxfaGludHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmVfZ2xvYmFsX2hpbnRzICovCisgICAgKEZUX0F1dG9IaW50ZXJfR2x5cGhMb2FkRnVuYylhZl9hdXRvZml0dGVyX2xvYWRfZ2x5cGggKSAgLyogbG9hZF9nbHlwaCAqLworCisKKyAgRlRfREVGSU5FX01PRFVMRSgKKyAgICBhdXRvZml0X21vZHVsZV9jbGFzcywKKworICAgIEZUX01PRFVMRV9ISU5URVIsCisgICAgc2l6ZW9mICggQUZfTW9kdWxlUmVjICksCisKKyAgICAiYXV0b2ZpdHRlciIsCisgICAgMHgxMDAwMEwsICAgLyogdmVyc2lvbiAxLjAgb2YgdGhlIGF1dG9maXR0ZXIgICovCisgICAgMHgyMDAwMEwsICAgLyogcmVxdWlyZXMgRnJlZVR5cGUgMi4wIG9yIGFib3ZlICovCisKKyAgICAoY29uc3Qgdm9pZCopJkFGX0lOVEVSRkFDRV9HRVQsCisKKyAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKWFmX2F1dG9maXR0ZXJfaW5pdCwKKyAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIGFmX2F1dG9maXR0ZXJfZG9uZSwKKyAgICAoRlRfTW9kdWxlX1JlcXVlc3RlcikgIGFmX2dldF9pbnRlcmZhY2UgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbW9kdWxlLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZtb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMyZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZtb2R1bGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQUZNT0RVTEVfSF9fCisjZGVmaW5lIF9fQUZNT0RVTEVfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9NT0RVTEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoKKyAgICogIFRoaXMgaXMgdGhlIGBleHRlbmRlZCcgRlRfTW9kdWxlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZQorICAgKiAgYXV0b2ZpdHRlcidzIGdsb2JhbCBkYXRhLgorICAgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgQUZfTW9kdWxlUmVjXworICB7CisgICAgRlRfTW9kdWxlUmVjICByb290OworCisgICAgRlRfVUludCAgICAgICBmYWxsYmFja19zdHlsZTsKKyAgICBGVF9VSW50ICAgICAgIGRlZmF1bHRfc2NyaXB0OworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorICAgIEZUX0Jvb2wgICAgICAgd2FycGluZzsKKyNlbmRpZgorCisgIH0gQUZfTW9kdWxlUmVjLCAqQUZfTW9kdWxlOworCisKK0ZUX0RFQ0xBUkVfTU9EVUxFKCBhdXRvZml0X21vZHVsZV9jbGFzcyApCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19BRk1PRFVMRV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnBpYy5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4OWU2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnBpYy5jCkBAIC0wLDAgKzEsMTUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZnBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGF1dG9maXQgbW9kdWxlLiAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSAiYWZwaWMuaCIKKyNpbmNsdWRlICJhZmdsb2JhbC5oIgorI2luY2x1ZGUgImFmZXJyb3JzLmgiCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBhZm1vZHVsZS5jICovCisgIEZUX0Vycm9yCisgIEZUX0NyZWF0ZV9DbGFzc19hZl9zZXJ2aWNlcyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKTsKKworICB2b2lkCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfYWZfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApOworCisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc19hZl9zZXJ2aWNlX3Byb3BlcnRpZXMoIEZUX1NlcnZpY2VfUHJvcGVydGllc1JlYyogIGNsYXp6ICk7CisKKyAgdm9pZCBGVF9Jbml0X0NsYXNzX2FmX2F1dG9maXR0ZXJfaW50ZXJmYWNlKAorICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgbGlicmFyeSwKKyAgICBGVF9BdXRvSGludGVyX0ludGVyZmFjZVJlYyogIGNsYXp6ICk7CisKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHdyaXRpbmcgc3lzdGVtIGNsYXNzZXMgKi8KKyN1bmRlZiAgV1JJVElOR19TWVNURU0KKyNkZWZpbmUgV1JJVElOR19TWVNURU0oIHdzLCBXUyApICAvKiBlbXB0eSAqLworCisjaW5jbHVkZSAiYWZ3cnRzeXMuaCIKKworCisgIHZvaWQKKyAgYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgaWYgKCBwaWNfY29udGFpbmVyLT5hdXRvZml0ICkKKyAgICB7CisgICAgICBBRk1vZHVsZVBJQyogIGNvbnRhaW5lciA9IChBRk1vZHVsZVBJQyopcGljX2NvbnRhaW5lci0+YXV0b2ZpdDsKKworCisgICAgICBpZiAoIGNvbnRhaW5lci0+YWZfc2VydmljZXMgKQorICAgICAgICBGVF9EZXN0cm95X0NsYXNzX2FmX3NlcnZpY2VzKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXItPmFmX3NlcnZpY2VzICk7CisgICAgICBjb250YWluZXItPmFmX3NlcnZpY2VzID0gTlVMTDsKKworICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7CisgICAgICBwaWNfY29udGFpbmVyLT5hdXRvZml0ID0gTlVMTDsKKyAgICB9CisgIH0KKworCisgIEZUX0Vycm9yCisgIGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7CisgICAgRlRfVUludCAgICAgICAgICAgIHNzOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIEFGTW9kdWxlUElDKiAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KKyAgICBpZiAoIEZUX0FMTE9DICggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKKyAgICBwaWNfY29udGFpbmVyLT5hdXRvZml0ID0gY29udGFpbmVyOworCisgICAgLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIC0gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogdGhpcyBpcyBob3cgdGhlIG1vZHVsZSB1c3VhbGx5IGV4cGVjdHMgdGhpcyBkYXRhICovCisgICAgZXJyb3IgPSBGVF9DcmVhdGVfQ2xhc3NfYWZfc2VydmljZXMoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb250YWluZXItPmFmX3NlcnZpY2VzICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9Jbml0X0NsYXNzX2FmX3NlcnZpY2VfcHJvcGVydGllcyggJmNvbnRhaW5lci0+YWZfc2VydmljZV9wcm9wZXJ0aWVzICk7CisKKyAgICBmb3IgKCBzcyA9IDA7IHNzIDwgQUZfV1JJVElOR19TWVNURU1fTUFYOyBzcysrICkKKyAgICAgIGNvbnRhaW5lci0+YWZfd3JpdGluZ19zeXN0ZW1fY2xhc3Nlc1tzc10gPQorICAgICAgICAmY29udGFpbmVyLT5hZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzX3JlY1tzc107CisgICAgY29udGFpbmVyLT5hZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzW0FGX1dSSVRJTkdfU1lTVEVNX01BWF0gPSBOVUxMOworCisgICAgZm9yICggc3MgPSAwOyBzcyA8IEFGX1NDUklQVF9NQVg7IHNzKysgKQorICAgICAgY29udGFpbmVyLT5hZl9zY3JpcHRfY2xhc3Nlc1tzc10gPQorICAgICAgICAmY29udGFpbmVyLT5hZl9zY3JpcHRfY2xhc3Nlc19yZWNbc3NdOworICAgIGNvbnRhaW5lci0+YWZfc2NyaXB0X2NsYXNzZXNbQUZfU0NSSVBUX01BWF0gPSBOVUxMOworCisgICAgZm9yICggc3MgPSAwOyBzcyA8IEFGX1NUWUxFX01BWDsgc3MrKyApCisgICAgICBjb250YWluZXItPmFmX3N0eWxlX2NsYXNzZXNbc3NdID0KKyAgICAgICAgJmNvbnRhaW5lci0+YWZfc3R5bGVfY2xhc3Nlc19yZWNbc3NdOworICAgIGNvbnRhaW5lci0+YWZfc3R5bGVfY2xhc3Nlc1tBRl9TVFlMRV9NQVhdID0gTlVMTDsKKworI3VuZGVmICBXUklUSU5HX1NZU1RFTQorI2RlZmluZSBXUklUSU5HX1NZU1RFTSggd3MsIFdTICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRlRfSW5pdF9DbGFzc19hZl8gIyMgd3MgIyMgX3dyaXRpbmdfc3lzdGVtX2NsYXNzKCAgICBcCisgICAgICAgICAgJmNvbnRhaW5lci0+YWZfd3JpdGluZ19zeXN0ZW1fY2xhc3Nlc19yZWNbc3MrK10gKTsKKworICAgIHNzID0gMDsKKyNpbmNsdWRlICJhZndydHN5cy5oIgorCisjdW5kZWYgIFNDUklQVAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNjMSwgc2MyLCBzYzMgKSAgICAgICAgICBcCisgICAgICAgIEZUX0luaXRfQ2xhc3NfYWZfICMjIHMgIyMgX3NjcmlwdF9jbGFzcyggICAgIFwKKyAgICAgICAgICAmY29udGFpbmVyLT5hZl9zY3JpcHRfY2xhc3Nlc19yZWNbc3MrK10gKTsKKworICAgIHNzID0gMDsKKyNpbmNsdWRlICJhZnNjcmlwdC5oIgorCisjdW5kZWYgIFNUWUxFCisjZGVmaW5lIFNUWUxFKCBzLCBTLCBkLCB3cywgc2MsIGJzcywgYyApICAgICAgICAgICAgXAorICAgICAgICBGVF9Jbml0X0NsYXNzX2FmXyAjIyBzICMjIF9zdHlsZV9jbGFzcyggICAgIFwKKyAgICAgICAgICAmY29udGFpbmVyLT5hZl9zdHlsZV9jbGFzc2VzX3JlY1tzcysrXSApOworCisgICAgc3MgPSAwOworI2luY2x1ZGUgImFmc3R5bGVzLmgiCisKKyAgICBGVF9Jbml0X0NsYXNzX2FmX2F1dG9maXR0ZXJfaW50ZXJmYWNlKAorICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+YWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UgKTsKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgICAgYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZwaWMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDcxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZwaWMuaApAQCAtMCwwICsxLDEwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBhdXRvZml0IG1vZHVsZS4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQUZQSUNfSF9fCisjZGVmaW5lIF9fQUZQSUNfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEFGX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICBhZl9zZXJ2aWNlcworI2RlZmluZSBBRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICAgICAgYWZfc2VydmljZV9wcm9wZXJ0aWVzCisKKyNkZWZpbmUgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVQgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMKKyNkZWZpbmUgQUZfU0NSSVBUX0NMQVNTRVNfR0VUICAgICAgICAgIGFmX3NjcmlwdF9jbGFzc2VzCisjZGVmaW5lIEFGX1NUWUxFX0NMQVNTRVNfR0VUICAgICAgICAgICBhZl9zdHlsZV9jbGFzc2VzCisjZGVmaW5lIEFGX0lOVEVSRkFDRV9HRVQgICAgICAgICAgICAgICBhZl9hdXRvZml0dGVyX2ludGVyZmFjZQorCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qIHNvbWUgaW5jbHVkZSBmaWxlcyByZXF1aXJlZCBmb3IgbWVtYmVycyBvZiBBRk1vZHVsZVBJQyAqLworI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKKworI2luY2x1ZGUgImFmdHlwZXMuaCIKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRk1vZHVsZVBJQ18KKyAgeworICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgICBhZl9zZXJ2aWNlczsKKyAgICBGVF9TZXJ2aWNlX1Byb3BlcnRpZXNSZWMgICAgYWZfc2VydmljZV9wcm9wZXJ0aWVzOworCisgICAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzICAgICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfV1JJVElOR19TWVNURU1fTUFYICsgMV07CisgICAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNfcmVjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FGX1dSSVRJTkdfU1lTVEVNX01BWF07CisKKyAgICBBRl9TY3JpcHRDbGFzcyAgICAgICAgICAgICAgYWZfc2NyaXB0X2NsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU0NSSVBUX01BWCArIDFdOworICAgIEFGX1NjcmlwdENsYXNzUmVjICAgICAgICAgICBhZl9zY3JpcHRfY2xhc3Nlc19yZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU0NSSVBUX01BWF07CisKKyAgICBBRl9TdHlsZUNsYXNzICAgICAgICAgICAgICAgYWZfc3R5bGVfY2xhc3NlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBRl9TVFlMRV9NQVggKyAxXTsKKyAgICBBRl9TdHlsZUNsYXNzUmVjICAgICAgICAgICAgYWZfc3R5bGVfY2xhc3Nlc19yZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU1RZTEVfTUFYXTsKKworICAgIEZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlUmVjICBhZl9hdXRvZml0dGVyX2ludGVyZmFjZTsKKworICB9IEFGTW9kdWxlUElDOworCisKKyNkZWZpbmUgR0VUX1BJQyggbGliICkgIFwKKyAgICAgICAgICAoIChBRk1vZHVsZVBJQyopKChsaWIpLT5waWNfY29udGFpbmVyLmF1dG9maXQpICkKKworI2RlZmluZSBBRl9TRVJWSUNFU19HRVQgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+YWZfc2VydmljZXMgKQorI2RlZmluZSBBRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmFmX3NlcnZpY2VfcHJvcGVydGllcyApCisKKyNkZWZpbmUgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVQgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIEZUX0ZBQ0VfTElCUkFSWSggZ2xvYmFscy0+ZmFjZSApICktPmFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMgKQorI2RlZmluZSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIEZUX0ZBQ0VfTElCUkFSWSggZ2xvYmFscy0+ZmFjZSApICktPmFmX3NjcmlwdF9jbGFzc2VzICkKKyNkZWZpbmUgQUZfU1RZTEVfQ0xBU1NFU19HRVQgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIEZUX0ZBQ0VfTElCUkFSWSggZ2xvYmFscy0+ZmFjZSApICktPmFmX3N0eWxlX2NsYXNzZXMgKQorI2RlZmluZSBBRl9JTlRFUkZBQ0VfR0VUICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmFmX2F1dG9maXR0ZXJfaW50ZXJmYWNlICkKKworCisgIC8qIHNlZSBhZnBpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KKyAgdm9pZAorICBhdXRvZml0X21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisgIEZUX0Vycm9yCisgIGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19BRlBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlMGFmYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCkBAIC0wLDAgKzEsMjM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZnJhbmdlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJhZnJhbmdlcy5oIgorCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hcmFiX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDYwMFVMLCAgMHgwNkZGVUwgKSwgIC8qIEFyYWJpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNzUwVUwsICAweDA3RkZVTCApLCAgLyogQXJhYmljIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4QTBVTCwgIDB4MDhGRlVMICksICAvKiBBcmFiaWMgRXh0ZW5kZWQtQSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkI1MFVMLCAgMHhGREZGVUwgKSwgIC8qIEFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcwVUwsICAweEZFRkZVTCApLCAgLyogQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUVFMDBVTCwgMHgxRUVGRlVMICksICAvKiBBcmFiaWMgTWF0aGVtYXRpY2FsIEFscGhhYmV0aWMgU3ltYm9scyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY3lybF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA0MDBVTCwgIDB4MDRGRlVMICksICAvKiBDeXJpbGxpYyAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTAwVUwsICAweDA1MkZVTCApLCAgLyogQ3lyaWxsaWMgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkRFMFVMLCAgMHgyREZGVUwgKSwgIC8qIEN5cmlsbGljIEV4dGVuZGVkLUEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE2NDBVTCwgIDB4QTY5RlVMICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1CICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgIH07CisKKyAgLyogdGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgRGV2YW5hZ2FyaSBVbmljb2RlIGJsb2NrIHRoYXQgYXJlICAgICovCisgIC8qIGdlbmVyaWMgdG8gSW5kaWMgc2NyaXB0czsgd2Ugb21pdCB0aGVtIHNvIHRoYXQgdGhlaXIgcHJlc2VuY2UgZG9lc24ndCAqLworICAvKiB0cmlnZ2VyIERldmFuYWdhcmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2RldmFfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTAwVUwsICAweDA5M0JVTCApLCAgLyogRGV2YW5hZ2FyaSAgICAgICAqLworICAgIC8qIG9taXR0aW5nIFUrMDkzQyBudWt0YSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDkzRFVMLCAgMHgwOTUwVUwgKSwKKyAgICAvKiBvbWl0dGluZyBVKzA5NTEgdWRhdHRhLCBVKzA5NTIgYW51ZGF0dGEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NTNVTCwgIDB4MDk2M1VMICksCisgICAgLyogb21pdHRpbmcgVSswOTY0IGRhbmRhLCBVKzA5NjUgZG91YmxlIGRhbmRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTY2VUwsICAweDA5N0ZVTCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjBCOVVMLCAgMHgyMEI5VUwgKSwgIC8qIChuZXcpIFJ1cGVlIHNpZ24gKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dyZWtfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzcwVUwsICAweDAzRkZVTCApLCAgLyogR3JlZWsgYW5kIENvcHRpYyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUYwMFVMLCAgMHgxRkZGVUwgKSwgIC8qIEdyZWVrIEV4dGVuZGVkICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hlYnJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTkwVUwsICAweDA1RkZVTCApLCAgLyogSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxRFVMLCAgMHhGQjRGVUwgKSwgIC8qIEFscGhhYi4gUHJlc2VudC4gRm9ybXMgKEhlYnJldykgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdG5fdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMDIwVUwsICAweDAwN0ZVTCApLCAgLyogQmFzaWMgTGF0aW4gKG5vIGNvbnRyb2wgY2hhcnMpICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQTBVTCwgIDB4MDBGRlVMICksICAvKiBMYXRpbi0xIFN1cHBsZW1lbnQgKG5vIGNvbnRyb2wgY2hhcnMpICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDEwMFVMLCAgMHgwMTdGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMTgwVUwsICAweDAyNEZVTCApLCAgLyogTGF0aW4gRXh0ZW5kZWQtQiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyNTBVTCwgIDB4MDJBRlVMICksICAvKiBJUEEgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJCMFVMLCAgMHgwMkZGVUwgKSwgIC8qIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzAwVUwsICAweDAzNkZVTCApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEMDBVTCwgIDB4MUQ3RlVMICksICAvKiBQaG9uZXRpYyBFeHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ4MFVMLCAgMHgxREJGVUwgKSwgIC8qIFBob25ldGljIEV4dGVuc2lvbnMgU3VwcGxlbWVudCAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxREMwVUwsICAweDFERkZVTCApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFFMDBVTCwgIDB4MUVGRlVMICksICAvKiBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAwMFVMLCAgMHgyMDZGVUwgKSwgIC8qIEdlbmVyYWwgUHVuY3R1YXRpb24gICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDcwVUwsICAweDIwOUZVTCApLCAgLyogU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQTBVTCwgIDB4MjBCOFVMICksICAvKiBDdXJyZW5jeSBTeW1ib2xzIC4uLiAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjBCQVVMLCAgMHgyMENGVUwgKSwgIC8qIC4uLiBleGNlcHQgbmV3IFJ1cGVlIHNpZ24gICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMTUwVUwsICAweDIxOEZVTCApLCAgLyogTnVtYmVyIEZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDI0NjBVTCwgIDB4MjRGRlVMICksICAvKiBFbmNsb3NlZCBBbHBoYW51bWVyaWNzICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM2MFVMLCAgMHgyQzdGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkLUMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTAwVUwsICAweDJFN0ZVTCApLCAgLyogU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3MjBVTCwgIDB4QTdGRlVMICksICAvKiBMYXRpbiBFeHRlbmRlZC1EICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIwMFVMLCAgMHhGQjA2VUwgKSwgIC8qIEFscGhhYi4gUHJlc2VudC4gRm9ybXMgKExhdGluIExpZ3MpICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDFENDAwVUwsIDB4MUQ3RkZVTCApLCAgLyogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUYxMDBVTCwgMHgxRjFGRlVMICksICAvKiBFbmNsb3NlZCBBbHBoYW51bWVyaWMgU3VwcGxlbWVudCAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbm9uZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDBVTCwgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RlbHVfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwVUwsICAweDBDN0ZVTCApLCAgLyogVGVsdWd1ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90aGFpX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEUwMFVMLCAgMHgwRTdGVUwgKSwgIC8qIFRoYWkgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2JlbmdfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTgwVUwsICAweDA5RkZVTCApLCAgLyogQmVuZ2FsaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3Vqcl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBODBVTCwgIDB4MEFGRlVMICksICAvKiBHdWphcmF0aSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3VydV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBMDBVTCwgIDB4MEE3RlVMICksICAvKiBHdXJtdWtoaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa25kYV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODBVTCwgIDB4MENGRlVMICksICAvKiBLYW5uYWRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saW1iX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkwMFVMLCAgMHgxOTRGVUwgKSwgIC8qIExpbWJ1ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9tbHltX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMFVMLCAgMHgwRDdGVUwgKSwgIC8qIE1hbGF5YWxhbSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb3J5YV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCMDBVTCwgIDB4MEI3RlVMICksICAvKiBPcml5YSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc2luaF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEODBVTCwgIDB4MERGRlVMICksICAvKiBTaW5oYWxhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MFVMLCAgMHgxQkJGVUwgKSwgIC8qIFN1bmRhbmVzZSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc3lsb191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MDBVTCwgIDB4QTgyRlVMICksICAvKiBTeWxvdGkgTmFncmkgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RhbWxfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjgwVUwsICAweDBCRkZVTCApLCAgLyogVGFtaWwgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RpYnRfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRjAwVUwsICAweDBGRkZVTCApLCAgLyogVGliZXRhbiAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICB9OworCisjZW5kaWYgLyogIUFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisKKyAgLyogdGhpcyBjb3JyZXNwb25kcyB0byBVbmljb2RlIDYuMCAqLworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfaGFuaV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDExMDBVTCwgIDB4MTFGRlVMICksICAvKiBIYW5ndWwgSmFtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJFODBVTCwgIDB4MkVGRlVMICksICAvKiBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJGMDBVTCwgIDB4MkZERlVMICksICAvKiBLYW5neGkgUmFkaWNhbHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJGRjBVTCwgIDB4MkZGRlVMICksICAvKiBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwMDBVTCwgIDB4MzAzRlVMICksICAvKiBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24gICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwNDBVTCwgIDB4MzA5RlVMICksICAvKiBIaXJhZ2FuYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwQTBVTCwgIDB4MzBGRlVMICksICAvKiBLYXRha2FuYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxMDBVTCwgIDB4MzEyRlVMICksICAvKiBCb3BvbW9mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxMzBVTCwgIDB4MzE4RlVMICksICAvKiBIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxOTBVTCwgIDB4MzE5RlVMICksICAvKiBLYW5idW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxQTBVTCwgIDB4MzFCRlVMICksICAvKiBCb3BvbW9mbyBFeHRlbmRlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxQzBVTCwgIDB4MzFFRlVMICksICAvKiBDSksgU3Ryb2tlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxRjBVTCwgIDB4MzFGRlVMICksICAvKiBLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMyMDBVTCwgIDB4MzJGRlVMICksICAvKiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMzMDBVTCwgIDB4MzNGRlVMICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDM0MDBVTCwgIDB4NERCRlVMICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDREQzBVTCwgIDB4NERGRlVMICksICAvKiBZaWppbmcgSGV4YWdyYW0gU3ltYm9scyAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDRFMDBVTCwgIDB4OUZGRlVMICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE5NjBVTCwgIDB4QTk3RlVMICksICAvKiBIYW5ndWwgSmFtbyBFeHRlbmRlZC1BICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFDMDBVTCwgIDB4RDdBRlVMICksICAvKiBIYW5ndWwgU3lsbGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEQ3QjBVTCwgIDB4RDdGRlVMICksICAvKiBIYW5ndWwgSmFtbyBFeHRlbmRlZC1CICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEY5MDBVTCwgIDB4RkFGRlVMICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFMTBVTCwgIDB4RkUxRlVMICksICAvKiBWZXJ0aWNhbCBmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFMzBVTCwgIDB4RkU0RlVMICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZGMDBVTCwgIDB4RkZFRlVMICksICAvKiBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUIwMDBVTCwgMHgxQjBGRlVMICksICAvKiBLYW5hIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUQzMDBVTCwgMHgxRDM1RlVMICksICAvKiBUYWkgWHVhbiBIaW5nIFN5bWJvbHMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUYyMDBVTCwgMHgxRjJGRlVMICksICAvKiBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50ICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MjAwMDBVTCwgMHgyQTZERlVMICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkE3MDBVTCwgMHgyQjczRlVMICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBDICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkI3NDBVTCwgMHgyQjgxRlVMICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBEICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkY4MDBVTCwgMHgyRkExRlVMICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgfTsKKworI2VuZGlmIC8qICFBRl9DT05GSUdfT1BUSU9OX0NKSyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3OGFiMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmcmFuZ2VzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBVbmljb2RlIHNjcmlwdCByYW5nZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGUkFOR0VTX0hfXworI2RlZmluZSBfX0FGUkFOR0VTX0hfXworCisKKyNpbmNsdWRlICJhZnR5cGVzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKyN1bmRlZiAgU0NSSVBUCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc2MxLCBzYzIsIHNjMyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXh0ZXJuIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfICMjIHMgIyMgX3VuaXJhbmdlc1tdOworCisjaW5jbHVkZSAiYWZzY3JpcHQuaCIKKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQUZSQU5HRVNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZzY3JpcHQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmY2M4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZzY3JpcHQuaApAQCAtMCwwICsxLDE0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZzY3JpcHQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIHNjcmlwdHMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFRoZSBmb2xsb3dpbmcgcGFydCBjYW4gYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuICovCisgIC8qIERlZmluZSBgU0NSSVBUJyBhcyBuZWVkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworICAvKiBBZGQgbmV3IHNjcmlwdHMgaGVyZS4gIFRoZSBmaXJzdCBhbmQgc2Vjb25kIGFyZ3VtZW50cyBhcmUgdGhlICAgICovCisgIC8qIHNjcmlwdCBuYW1lIGluIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlLCByZXNwZWN0aXZlbHksIGZvbGxvd2VkICAgKi8KKyAgLyogYnkgYSBkZXNjcmlwdGlvbiBzdHJpbmcuICBUaGVuIGNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIEhhcmZCdXp6ICAqLworICAvKiBzY3JpcHQgbmFtZSB0YWcsIGZvbGxvd2VkIGJ5IGEgc3RyaW5nIG9mIHN0YW5kYXJkIGNoYXJhY3RlcnMgKHRvICovCisgIC8qIGRlcml2ZSB0aGUgc3RhbmRhcmQgd2lkdGggYW5kIGhlaWdodCBvZiBzdGVtcykuICAgICAgICAgICAgICAgICAgKi8KKworICBTQ1JJUFQoIGFyYWIsIEFSQUIsCisgICAgICAgICAgIkFyYWJpYyIsCisgICAgICAgICAgSEJfU0NSSVBUX0FSQUJJQywKKyAgICAgICAgICAweDY0NCwgMHg2MkQsIDB4NjQwICkgLyog2YQg2K0g2YAgKi8KKworICBTQ1JJUFQoIGN5cmwsIENZUkwsCisgICAgICAgICAgIkN5cmlsbGljIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfQ1lSSUxMSUMsCisgICAgICAgICAgMHg0M0UsIDB4NDFFLCAweDAgKSAvKiDQvtCeICovCisKKyAgU0NSSVBUKCBkZXZhLCBERVZBLAorICAgICAgICAgICJEZXZhbmFnYXJpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfREVWQU5BR0FSSSwKKyAgICAgICAgICAweDkyMCwgMHg5MzUsIDB4OTFGICkgLyog4KSgIOCktSDgpJ8gKi8KKworICBTQ1JJUFQoIGdyZWssIEdSRUssCisgICAgICAgICAgIkdyZWVrIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfR1JFRUssCisgICAgICAgICAgMHgzQkYsIDB4MzlGLCAweDAgKSAvKiDOv86fICovCisKKyAgU0NSSVBUKCBoZWJyLCBIRUJSLAorICAgICAgICAgICJIZWJyZXciLAorICAgICAgICAgIEhCX1NDUklQVF9IRUJSRVcsCisgICAgICAgICAgMHg1REQsIDB4MCwgMHgwICkgLyog150gKi8KKworICBTQ1JJUFQoIGxhdG4sIExBVE4sCisgICAgICAgICAgIkxhdGluIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfTEFUSU4sCisgICAgICAgICAgJ28nLCAnTycsICcwJyApCisKKyAgU0NSSVBUKCBub25lLCBOT05FLAorICAgICAgICAgICJubyBzY3JpcHQiLAorICAgICAgICAgIEhCX1NDUklQVF9JTlZBTElELAorICAgICAgICAgIDB4MCwgMHgwLCAweDAgKQorCisgIC8qIHRoZXJlIGFyZSBubyBzaW1wbGUgZm9ybXMgZm9yIGxldHRlcnM7IHdlIHRodXMgdXNlIHR3byBkaWdpdCBzaGFwZXMgKi8KKyAgU0NSSVBUKCB0ZWx1LCBURUxVLAorICAgICAgICAgICJUZWx1Z3UiLAorICAgICAgICAgIEhCX1NDUklQVF9URUxVR1UsCisgICAgICAgICAgMHhDNjYsIDB4QzY3LCAweDAgKSAvKiDgsaYg4LGnICovCisKKyAgU0NSSVBUKCB0aGFpLCBUSEFJLAorICAgICAgICAgICJUaGFpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfVEhBSSwKKyAgICAgICAgICAweEUzMiwgMHhFNDUsIDB4RTUwICkgLyog4LiyIOC5hSDguZAgKi8KKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKKworICBTQ1JJUFQoIGJlbmcsIEJFTkcsCisgICAgICAgICAgIkJlbmdhbGkiLAorICAgICAgICAgIEhCX1NDUklQVF9CRU5HQUxJLAorICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KKworICBTQ1JJUFQoIGd1anIsIEdVSlIsCisgICAgICAgICAgIkd1amFyYXRpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfR1VKQVJBVEksCisgICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLworCisgIFNDUklQVCggZ3VydSwgR1VSVSwKKyAgICAgICAgICAiR3VybXVraGkiLAorICAgICAgICAgIEhCX1NDUklQVF9HVVJNVUtISSwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyAgU0NSSVBUKCBrbmRhLCBLTkRBLAorICAgICAgICAgICJLYW5uYWRhIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfS0FOTkFEQSwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyAgU0NSSVBUKCBsaW1iLCBMSU1CLAorICAgICAgICAgICJMaW1idSIsCisgICAgICAgICAgSEJfU0NSSVBUX0xJTUJVLAorICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KKworICBTQ1JJUFQoIG1seW0sIE1MWU0sCisgICAgICAgICAgIk1hbGF5YWxhbSIsCisgICAgICAgICAgSEJfU0NSSVBUX01BTEFZQUxBTSwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyAgU0NSSVBUKCBvcnlhLCBPUllBLAorICAgICAgICAgICJPcml5YSIsCisgICAgICAgICAgSEJfU0NSSVBUX09SSVlBLAorICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KKworICBTQ1JJUFQoIHNpbmgsIFNJTkgsCisgICAgICAgICAgIlNpbmhhbGEiLAorICAgICAgICAgIEhCX1NDUklQVF9TSU5IQUxBLAorICAgICAgICAgICdvJywgMHgwLCAweDAgKSAvKiBYWFggKi8KKworICBTQ1JJUFQoIHN1bmQsIFNVTkQsCisgICAgICAgICAgIlN1bmRhbmVzZSIsCisgICAgICAgICAgSEJfU0NSSVBUX1NVTkRBTkVTRSwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyAgU0NSSVBUKCBzeWxvLCBTWUxPLAorICAgICAgICAgICJTeWxvdGkgTmFncmkiLAorICAgICAgICAgIEhCX1NDUklQVF9TWUxPVElfTkFHUkksCisgICAgICAgICAgJ28nLCAweDAsIDB4MCApIC8qIFhYWCAqLworCisgIFNDUklQVCggdGFtbCwgVEFNTCwKKyAgICAgICAgICAiVGFtaWwiLAorICAgICAgICAgIEhCX1NDUklQVF9UQU1JTCwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyAgU0NSSVBUKCB0aWJ0LCBUSUJULAorICAgICAgICAgICJUaWJldGFuIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfVElCRVRBTiwKKyAgICAgICAgICAnbycsIDB4MCwgMHgwICkgLyogWFhYICovCisKKyNlbmRpZiAvKiBBRl9DT05GSUdfT1BUSU9OX0lORElDICovCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSworCisgIFNDUklQVCggaGFuaSwgSEFOSSwKKyAgICAgICAgICAiQ0pLViBpZGVvZ3JhcGhzIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfSEFOLAorICAgICAgICAgIDB4NzUzMCwgMHg1NkQ3LCAweDAgKSAvKiDnlLDlm5cgKi8KKworI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fQ0pLICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZzdHlsZXMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDViYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZzdHlsZXMuaApAQCAtMCwwICsxLDE3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZzdHlsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIHN0eWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIFRoZSBmb2xsb3dpbmcgcGFydCBjYW4gYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuICovCisgIC8qIERlZmluZSBgU1RZTEUnIGFzIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworICAvKiBBZGQgbmV3IHN0eWxlcyBoZXJlLiAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIGFyZSB0aGUgICovCisgIC8qIHN0eWxlIG5hbWUgaW4gbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UsIHJlc3BlY3RpdmVseSwgZm9sbG93ZWQgKi8KKyAgLyogYnkgYSBkZXNjcmlwdGlvbiBzdHJpbmcuICBUaGUgbmV4dCBhcmd1bWVudHMgYXJlIHRoZSAgICAgICAgICAqLworICAvKiBjb3JyZXNwb25kaW5nIHdyaXRpbmcgc3lzdGVtLCBzY3JpcHQsIGJsdWUgc3RyaW5nc2V0LCBhbmQgICAgICovCisgIC8qIGNvdmVyYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgc3R5bGVzIHVzaW5nIGBBRl9DT1ZFUkFHRV9ERUZBVUxUJyBzaG91bGQgYWx3YXlzICAgICovCisgIC8qIGNvbWUgYWZ0ZXIgc3R5bGVzIHdpdGggb3RoZXIgY292ZXJhZ2VzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBTVFlMRSggY3lybF9kZmx0LCBDWVJMX0RGTFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAiQ3lyaWxsaWMgZGVmYXVsdCBzdHlsZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgQUZfU0NSSVBUX0NZUkwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DWVJMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI3VuZGVmICBTVFlMRV9MQVRJTgorI2RlZmluZSBTVFlMRV9MQVRJTiggcywgUywgZiwgRiwgZHMsIGRmLCBDICkgXAorICAgICAgICAgIFNUWUxFKCBzICMjIF8gIyMgZiwgUyAjIyBfICMjIEYsICAgXAorICAgICAgICAgICAgICAgICBkcyAiICIgZGYgIiBzdHlsZSIsICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwgICAgXAorICAgICAgICAgICAgICAgICBBRl9TQ1JJUFRfICMjIFMsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF8gIyMgUywgICAgXAorICAgICAgICAgICAgICAgICBBRl9DT1ZFUkFHRV8gIyMgQyApCisKKyN1bmRlZiAgTUVUQV9TVFlMRV9MQVRJTgorI2RlZmluZSBNRVRBX1NUWUxFX0xBVElOKCBzLCBTLCBkcyApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBjMmNwLCBDMkNQLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAicGV0aXRlIGNhcHRpY2FscyBmcm9tIGNhcGl0YWxzIiwgXAorICAgICAgICAgICAgICAgICAgICAgICBQRVRJVEVfQ0FQSVRBTFNfRlJPTV9DQVBJVEFMUyApICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBjMnNjLCBDMlNDLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwdGljYWxzIGZyb20gY2FwaXRhbHMiLCAgXAorICAgICAgICAgICAgICAgICAgICAgICBTTUFMTF9DQVBJVEFMU19GUk9NX0NBUElUQUxTICkgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBvcmRuLCBPUkROLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAib3JkaW5hbHMiLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBPUkRJTkFMUyApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBwY2FwLCBQQ0FQLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAicGV0aXRlIGNhcGl0YWxzIiwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBQRVRJVEVfQ0FQSVRBTFMgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBzaW5mLCBTSU5GLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAic2NpZW50aWZpYyBpbmZlcmlvcnMiLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBTQ0lFTlRJRklDX0lORkVSSU9SUyApICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBzbWNwLCBTTUNQLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwaXRhbHMiLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBTTUFMTF9DQVBJVEFMUyApICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBzdWJzLCBTVUJTLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAic3Vic2NyaXB0IiwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBTVUJTQ1JJUFQgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBzdXBzLCBTVVBTLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAic3VwZXJzY3JpcHQiLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlNDUklQVCApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCB0aXRsLCBUSVRMLCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAidGl0bGluZyIsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBUSVRMSU5HICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBkZmx0LCBERkxULCBkcywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCIsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUICkKKworCisgIFNUWUxFKCBhcmFiX2RmbHQsIEFSQUJfREZMVCwKKyAgICAgICAgICJBcmFiaWMgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9BUkFCLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJBQiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIE1FVEFfU1RZTEVfTEFUSU4oIGN5cmwsIENZUkwsICJDeXJpbGxpYyIgKQorCisgIE1FVEFfU1RZTEVfTEFUSU4oIGdyZWssIEdSRUssICJHcmVlayIgKQorCisgIFNUWUxFKCBoZWJyX2RmbHQsIEhFQlJfREZMVCwKKyAgICAgICAgICJIZWJyZXcgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9IRUJSLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEVCUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorICBNRVRBX1NUWUxFX0xBVElOKCBsYXRuLCBMQVROLCAiTGF0aW4iICkKKworICBTVFlMRSggZGV2YV9kZmx0LCBERVZBX0RGTFQsCisgICAgICAgICAiRGV2YW5hZ2FyaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0RFVkEsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyNpZmRlZiBGVF9PUFRJT05fQVVUT0ZJVDIKKyAgU1RZTEUoIGx0bjJfZGZsdCwgTFROMl9ERkxULAorICAgICAgICAgIkxhdGluIDIgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTjIsCisgICAgICAgICBBRl9TQ1JJUFRfTEFUTiwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVE4sCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKyNlbmRpZgorCisgIFNUWUxFKCBub25lX2RmbHQsIE5PTkVfREZMVCwKKyAgICAgICAgICJubyBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9EVU1NWSwKKyAgICAgICAgIEFGX1NDUklQVF9OT05FLAorICAgICAgICAgKEFGX0JsdWVfU3RyaW5nc2V0KTAsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggdGVsdV9kZmx0LCBURUxVX0RGTFQsCisgICAgICAgICAiVGVsdWd1IGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfVEVMVSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RFTFUsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggdGhhaV9kZmx0LCBUSEFJX0RGTFQsCisgICAgICAgICAiVGhhaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX1RIQUksCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9USEFJLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0lORElDCisKKyAgLyogbm8gYmx1ZSBzdHJpbmdzZXQgc3VwcG9ydCBmb3IgdGhlIEluZGljIHdyaXRpbmcgc3lzdGVtIHlldCAqLworI3VuZGVmICBTVFlMRV9ERUZBVUxUX0lORElDCisjZGVmaW5lIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHMsIFMsIGQgKSAgICBcCisgICAgICAgICAgU1RZTEUoIHMgIyMgX2RmbHQsIFMgIyMgX0RGTFQsICBcCisgICAgICAgICAgICAgICAgIGQgIiBkZWZhdWx0IHN0eWxlIiwgICAgICBcCisgICAgICAgICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0lORElDLCBcCisgICAgICAgICAgICAgICAgIEFGX1NDUklQVF8gIyMgUywgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChBRl9CbHVlX1N0cmluZ3NldCkwLCAgICBcCisgICAgICAgICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIGJlbmcsIEJFTkcsICJCZW5nYWxpIiApCisgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIGd1anIsIEdVSlIsICJHdWphcmF0aSIgKQorICBTVFlMRV9ERUZBVUxUX0lORElDKCBndXJ1LCBHVVJVLCAiR3VybXVraGkiICkKKyAgU1RZTEVfREVGQVVMVF9JTkRJQygga25kYSwgS05EQSwgIkthbm5hZGEiICkKKyAgU1RZTEVfREVGQVVMVF9JTkRJQyggbGltYiwgTElNQiwgIkxpbWJ1IiApCisgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIG1seW0sIE1MWU0sICJNYWxheWFsYW0iICkKKyAgU1RZTEVfREVGQVVMVF9JTkRJQyggb3J5YSwgT1JZQSwgIk9yaXlhIiApCisgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHNpbmgsIFNJTkgsICJTaW5oYWxhIiApCisgIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHN1bmQsIFNVTkQsICJTdW5kYW5lc2UiICkKKyAgU1RZTEVfREVGQVVMVF9JTkRJQyggc3lsbywgU1lMTywgIlN5bG90aSBOYWdyaSIgKQorICBTVFlMRV9ERUZBVUxUX0lORElDKCB0YW1sLCBUQU1MLCAiVGFtaWwiICkKKyAgU1RZTEVfREVGQVVMVF9JTkRJQyggdGlidCwgVElCVCwgIlRpYmV0YW4iICkKKworI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCisKKyAgU1RZTEUoIGhhbmlfZGZsdCwgSEFOSV9ERkxULAorICAgICAgICAgIkNKS1YgaWRlb2dyYXBocyBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0NKSywKKyAgICAgICAgIEFGX1NDUklQVF9IQU5JLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEFOSSwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSksgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZnR5cGVzLmggYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZTNmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCkBAIC0wLDAgKzEsNjMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBhZnR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV0by1maXR0ZXIgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogIFRoZSBhdXRvLWZpdHRlciBpcyBhIGNvbXBsZXRlIHJld3JpdGUgb2YgdGhlIG9sZCBhdXRvLWhpbnRlci4KKyAgICogIEl0cyBtYWluIGZlYXR1cmUgaXMgdGhlIGFiaWxpdHkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGRpZmZlcmVudAorICAgKiAgd3JpdGluZyBzeXN0ZW1zIGFuZCBzY3JpcHRzIGluIG9yZGVyIHRvIGFwcGx5IHNwZWNpZmljIHJ1bGVzLgorICAgKgorICAgKiAgVGhlIGNvZGUgaGFzIGFsc28gYmVlbiBjb21wYXJ0bWVudGl6ZWQgaW50byBzZXZlcmFsIGVudGl0aWVzIHRoYXQKKyAgICogIHNob3VsZCBtYWtlIGFsZ29yaXRobWljIGV4cGVyaW1lbnRhdGlvbiBlYXNpZXIgdGhhbiB3aXRoIHRoZSBvbGQKKyAgICogIGNvZGUuCisgICAqCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19BRlRZUEVTX0hfXworI2RlZmluZSBfX0FGVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiYWZibHVlLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBEIEUgQiBVIEcgRyBJIE4gRyAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBGVF9ERUJVR19BVVRPRklUCisKKyNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKKworZXh0ZXJuIGludCAgICBfYWZfZGVidWdfZGlzYWJsZV9ob3J6X2hpbnRzOworZXh0ZXJuIGludCAgICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzOworZXh0ZXJuIGludCAgICBfYWZfZGVidWdfZGlzYWJsZV9ibHVlX2hpbnRzOworZXh0ZXJuIHZvaWQqICBfYWZfZGVidWdfaGludHM7CisKKyNlbmRpZiAvKiBGVF9ERUJVR19BVVRPRklUICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgIFUgVCBJIEwgSSBUIFkgICBTIFQgVSBGIEYgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICB0eXBlZGVmIHN0cnVjdCAgQUZfV2lkdGhSZWNfCisgIHsKKyAgICBGVF9Qb3MgIG9yZzsgIC8qIG9yaWdpbmFsIHBvc2l0aW9uL3dpZHRoIGluIGZvbnQgdW5pdHMgICAgICAgICAgICAgICovCisgICAgRlRfUG9zICBjdXI7ICAvKiBjdXJyZW50L3NjYWxlZCBwb3NpdGlvbi93aWR0aCBpbiBkZXZpY2Ugc3ViLXBpeGVscyAqLworICAgIEZUX1BvcyAgZml0OyAgLyogY3VycmVudC9maXR0ZWQgcG9zaXRpb24vd2lkdGggaW4gZGV2aWNlIHN1Yi1waXhlbHMgKi8KKworICB9IEFGX1dpZHRoUmVjLCAqQUZfV2lkdGg7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX3NvcnRfcG9zKCBGVF9VSW50ICBjb3VudCwKKyAgICAgICAgICAgICAgIEZUX1BvcyogIHRhYmxlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZl9zb3J0X2FuZF9xdWFudGl6ZV93aWR0aHMoIEZUX1VJbnQqICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9XaWR0aCAgd2lkdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICB0aHJlc2hvbGQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICBBIE4gRyBMIEUgICBUIFkgUCBFIFMgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBUaGUgYXV0by1maXR0ZXIgZG9lc24ndCBuZWVkIGEgdmVyeSBoaWdoIGFuZ3VsYXIgYWNjdXJhY3k7CisgICAqICB0aGlzIGFsbG93cyB1cyB0byBzcGVlZCB1cCBzb21lIGNvbXB1dGF0aW9ucyBjb25zaWRlcmFibHkgd2l0aCBhCisgICAqICBsaWdodCBDb3JkaWMgYWxnb3JpdGhtIChzZWUgYWZhbmdsZXMuYykuCisgICAqLworCisgIHR5cGVkZWYgRlRfSW50ICBBRl9BbmdsZTsKKworCisjZGVmaW5lIEFGX0FOR0xFX1BJICAgMjU2CisjZGVmaW5lIEFGX0FOR0xFXzJQSSAgKCBBRl9BTkdMRV9QSSAqIDIgKQorI2RlZmluZSBBRl9BTkdMRV9QSTIgICggQUZfQU5HTEVfUEkgLyAyICkKKyNkZWZpbmUgQUZfQU5HTEVfUEk0ICAoIEFGX0FOR0xFX1BJIC8gNCApCisKKworI2lmIDAKKyAgLyoKKyAgICogIGNvbXB1dGUgdGhlIGFuZ2xlIG9mIGEgZ2l2ZW4gMi1EIHZlY3RvcgorICAgKi8KKyAgRlRfTE9DQUwoIEFGX0FuZ2xlICkKKyAgYWZfYW5nbGVfYXRhbiggRlRfUG9zICBkeCwKKyAgICAgICAgICAgICAgICAgRlRfUG9zICBkeSApOworCisKKyAgLyoKKyAgICogIGNvbXB1dGUgYGFuZ2xlMiAtIGFuZ2xlMSc7IHRoZSByZXN1bHQgaXMgYWx3YXlzIHdpdGhpbgorICAgKiAgdGhlIHJhbmdlIFstQUZfQU5HTEVfUEkgLi4gQUZfQU5HTEVfUEkgLSAxXQorICAgKi8KKyAgRlRfTE9DQUwoIEFGX0FuZ2xlICkKKyAgYWZfYW5nbGVfZGlmZiggQUZfQW5nbGUgIGFuZ2xlMSwKKyAgICAgICAgICAgICAgICAgQUZfQW5nbGUgIGFuZ2xlMiApOworI2VuZGlmIC8qIDAgKi8KKworCisjZGVmaW5lIEFGX0FOR0xFX0RJRkYoIHJlc3VsdCwgYW5nbGUxLCBhbmdsZTIgKSBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUZfQW5nbGUgIF9kZWx0YSA9IChhbmdsZTIpIC0gKGFuZ2xlMSk7ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKCBfZGVsdGEgPD0gLUFGX0FOR0xFX1BJICkgICAgICAgICAgICBcCisgICAgICBfZGVsdGEgKz0gQUZfQU5HTEVfMlBJOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKCBfZGVsdGEgPiBBRl9BTkdMRV9QSSApICAgICAgICAgICAgICBcCisgICAgICBfZGVsdGEgLT0gQUZfQU5HTEVfMlBJOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzdWx0ID0gX2RlbHRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0VORF9TVE1OVAorCisKKyAgLyogIG9wYXF1ZSBoYW5kbGUgdG8gZ2x5cGgtc3BlY2lmaWMgaGludHMgLS0gc2VlIGBhZmhpbnRzLmgnIGZvciBtb3JlCisgICAqICBkZXRhaWxzCisgICAqLworICB0eXBlZGVmIHN0cnVjdCBBRl9HbHlwaEhpbnRzUmVjXyogIEFGX0dseXBoSGludHM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIFMgQyBBIEwgRSBSIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKgorICAgKiAgQSBzY2FsZXIgbW9kZWxzIHRoZSB0YXJnZXQgcGl4ZWwgZGV2aWNlIHRoYXQgd2lsbCByZWNlaXZlIHRoZQorICAgKiAgYXV0by1oaW50ZWQgZ2x5cGggaW1hZ2UuCisgICAqLworCisjZGVmaW5lIEFGX1NDQUxFUl9GTEFHX05PX0hPUklaT05UQUwgIDFVIC8qIGRpc2FibGUgaG9yaXpvbnRhbCBoaW50aW5nICovCisjZGVmaW5lIEFGX1NDQUxFUl9GTEFHX05PX1ZFUlRJQ0FMICAgIDJVIC8qIGRpc2FibGUgdmVydGljYWwgaGludGluZyAgICovCisjZGVmaW5lIEFGX1NDQUxFUl9GTEFHX05PX0FEVkFOQ0UgICAgIDRVIC8qIGRpc2FibGUgYWR2YW5jZSBoaW50aW5nICAgICovCisjZGVmaW5lIEFGX1NDQUxFUl9GTEFHX05PX1dBUlBFUiAgICAgIDhVIC8qIGRpc2FibGUgd2FycGVyICAgICAgICAgICAgICovCisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfU2NhbGVyUmVjXworICB7CisgICAgRlRfRmFjZSAgICAgICAgIGZhY2U7ICAgICAgICAvKiBzb3VyY2UgZm9udCBmYWNlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9GaXhlZCAgICAgICAgeF9zY2FsZTsgICAgIC8qIGZyb20gZm9udCB1bml0cyB0byAxLzY0dGggZGV2aWNlIHBpeGVscyAqLworICAgIEZUX0ZpeGVkICAgICAgICB5X3NjYWxlOyAgICAgLyogZnJvbSBmb250IHVuaXRzIHRvIDEvNjR0aCBkZXZpY2UgcGl4ZWxzICovCisgICAgRlRfUG9zICAgICAgICAgIHhfZGVsdGE7ICAgICAvKiBpbiAxLzY0dGggZGV2aWNlIHBpeGVscyAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Qb3MgICAgICAgICAgeV9kZWx0YTsgICAgIC8qIGluIDEvNjR0aCBkZXZpY2UgcGl4ZWxzICAgICAgICAgICAgICAgICAqLworICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZTsgLyogbW9ub2Nocm9tZSwgYW50aS1hbGlhc2VkLCBMQ0QsIGV0Yy4gICAgICovCisgICAgRlRfVUludDMyICAgICAgIGZsYWdzOyAgICAgICAvKiBhZGRpdGlvbmFsIGNvbnRyb2wgZmxhZ3MsIHNlZSBhYm92ZSAgICAgKi8KKworICB9IEFGX1NjYWxlclJlYywgKkFGX1NjYWxlcjsKKworCisjZGVmaW5lIEFGX1NDQUxFUl9FUVVBTF9TQ0FMRVMoIGEsIGIgKSAgICAgIFwKKyAgICAgICAgICAoIChhKS0+eF9zY2FsZSA9PSAoYiktPnhfc2NhbGUgJiYgXAorICAgICAgICAgICAgKGEpLT55X3NjYWxlID09IChiKS0+eV9zY2FsZSAmJiBcCisgICAgICAgICAgICAoYSktPnhfZGVsdGEgPT0gKGIpLT54X2RlbHRhICYmIFwKKyAgICAgICAgICAgIChhKS0+eV9kZWx0YSA9PSAoYiktPnlfZGVsdGEgKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgQUZfU3R5bGVNZXRyaWNzUmVjXyogIEFGX1N0eWxlTWV0cmljczsKKworICAvKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYW4gRlRfRmFjZSB0byBjb21wdXRlIGdsb2JhbCBtZXRyaWNzIGZvcgorICAgKiAgYSBzcGVjaWZpYyBzdHlsZS4KKyAgICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYykoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgZmFjZSApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkFGX1dyaXRpbmdTeXN0ZW1fU2NhbGVNZXRyaWNzRnVuYykoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TY2FsZXIgICAgICAgIHNjYWxlciApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkFGX1dyaXRpbmdTeXN0ZW1fRG9uZU1ldHJpY3NGdW5jKSggQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzICk7CisKKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqQUZfV3JpdGluZ1N5c3RlbV9Jbml0SGludHNGdW5jKSggQUZfR2x5cGhIaW50cyAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKSggQUZfR2x5cGhIaW50cyAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICBXIFIgSSBUIEkgTiBHICAgUyBZIFMgVCBFIE0gUyAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBGb3IgdGhlIGF1dG8taGludGVyLCBhIHdyaXRpbmcgc3lzdGVtIGNvbnNpc3RzIG9mIG11bHRpcGxlIHNjcmlwdHMgdGhhdAorICAgKiAgY2FuIGJlIGhhbmRsZWQgc2ltaWxhcmx5ICppbiBhIHR5cG9ncmFwaGljYWwgd2F5KjsgdGhlIHJlbGF0aW9uc2hpcCBpcworICAgKiAgbm90IGJhc2VkIG9uIGhpc3RvcnkuICBGb3IgZXhhbXBsZSwgYm90aCB0aGUgR3JlZWsgYW5kIHRoZSB1bnJlbGF0ZWQKKyAgICogIEFybWVuaWFuIHNjcmlwdHMgc2hhcmUgdGhlIHNhbWUgZmVhdHVyZXMgbGlrZSBhc2NlbmRlciwgZGVzY2VuZGVyLAorICAgKiAgeC1oZWlnaHQsIGV0Yy4gIEVzc2VudGlhbGx5LCBhIHdyaXRpbmcgc3lzdGVtIGlzIGNvdmVyZWQgYnkgYQorICAgKiAgc3VibW9kdWxlIG9mIHRoZSBhdXRvLWZpdHRlcjsgaXQgY29udGFpbnMKKyAgICoKKyAgICogIC0gYSBzcGVjaWZpYyBnbG9iYWwgYW5hbHl6ZXIgdGhhdCBjb21wdXRlcyBnbG9iYWwgbWV0cmljcyBzcGVjaWZpYyB0bworICAgKiAgICB0aGUgc2NyaXB0IChiYXNlZCBvbiBzY3JpcHQtc3BlY2lmaWMgY2hhcmFjdGVycyB0byBpZGVudGlmeSBhc2NlbmRlcgorICAgKiAgICBoZWlnaHQsIHgtaGVpZ2h0LCBldGMuKSwKKyAgICoKKyAgICogIC0gYSBzcGVjaWZpYyBnbHlwaCBhbmFseXplciB0aGF0IGNvbXB1dGVzIHNlZ21lbnRzIGFuZCBlZGdlcyBmb3IgZWFjaAorICAgKiAgICBnbHlwaCBjb3ZlcmVkIGJ5IHRoZSBzY3JpcHQsCisgICAqCisgICAqICAtIGEgc3BlY2lmaWMgZ3JpZC1maXR0aW5nIGFsZ29yaXRobSB0aGF0IGRpc3RvcnRzIHRoZSBzY2FsZWQgZ2x5cGgKKyAgICogICAgb3V0bGluZSBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgb2YgdGhlIGdseXBoIGFuYWx5emVyLgorICAgKi8KKworI2RlZmluZSBfX0FGV1JUU1lTX0hfXyAgLyogZG9uJ3QgbG9hZCBoZWFkZXIgZmlsZXMgKi8KKyN1bmRlZiAgV1JJVElOR19TWVNURU0KKyNkZWZpbmUgV1JJVElOR19TWVNURU0oIHdzLCBXUyApICAgIFwKKyAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV8gIyMgV1MsCisKKyAgLyogVGhlIGxpc3Qgb2Yga25vd24gd3JpdGluZyBzeXN0ZW1zLiAqLworICB0eXBlZGVmIGVudW0gIEFGX1dyaXRpbmdTeXN0ZW1fCisgIHsKKworI2luY2x1ZGUgImFmd3J0c3lzLmgiCisKKyAgICBBRl9XUklUSU5HX1NZU1RFTV9NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9Xcml0aW5nU3lzdGVtOworCisjdW5kZWYgIF9fQUZXUlRTWVNfSF9fCisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjXworICB7CisgICAgQUZfV3JpdGluZ1N5c3RlbSAgd3JpdGluZ19zeXN0ZW07CisKKyAgICBGVF9PZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX21ldHJpY3Nfc2l6ZTsKKyAgICBBRl9Xcml0aW5nU3lzdGVtX0luaXRNZXRyaWNzRnVuYyAgIHN0eWxlX21ldHJpY3NfaW5pdDsKKyAgICBBRl9Xcml0aW5nU3lzdGVtX1NjYWxlTWV0cmljc0Z1bmMgIHN0eWxlX21ldHJpY3Nfc2NhbGU7CisgICAgQUZfV3JpdGluZ1N5c3RlbV9Eb25lTWV0cmljc0Z1bmMgICBzdHlsZV9tZXRyaWNzX2RvbmU7CisKKyAgICBBRl9Xcml0aW5nU3lzdGVtX0luaXRIaW50c0Z1bmMgICAgIHN0eWxlX2hpbnRzX2luaXQ7CisgICAgQUZfV3JpdGluZ1N5c3RlbV9BcHBseUhpbnRzRnVuYyAgICBzdHlsZV9oaW50c19hcHBseTsKKworICB9IEFGX1dyaXRpbmdTeXN0ZW1DbGFzc1JlYzsKKworICB0eXBlZGVmIGNvbnN0IEFGX1dyaXRpbmdTeXN0ZW1DbGFzc1JlYyogIEFGX1dyaXRpbmdTeXN0ZW1DbGFzczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgIFMgQyBSIEkgUCBUIFMgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBFYWNoIHNjcmlwdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBzZXQgb2YgVW5pY29kZSByYW5nZXMgdGhhdCBnZXRzIHVzZWQKKyAgICogIHRvIHRlc3Qgd2hldGhlciB0aGUgZm9udCBmYWNlIHN1cHBvcnRzIHRoZSBzY3JpcHQuCisgICAqCisgICAqICBXZSB1c2UgZm91ci1sZXR0ZXIgc2NyaXB0IHRhZ3MgZnJvbSB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiwKKyAgICogIGV4dGVuZGVkIGJ5IGBOT05FJywgd2hpY2ggaW5kaWNhdGVzIGBubyBzY3JpcHQnLgorICAgKi8KKworI3VuZGVmICBTQ1JJUFQKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzYzEsIHNjMiwgc2MzICkgXAorICAgICAgICAgIEFGX1NDUklQVF8gIyMgUywKKworICAvKiBUaGUgbGlzdCBvZiBrbm93biBzY3JpcHRzLiAqLworICB0eXBlZGVmIGVudW0gIEFGX1NjcmlwdF8KKyAgeworCisjaW5jbHVkZSAiYWZzY3JpcHQuaCIKKworICAgIEFGX1NDUklQVF9NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9TY3JpcHQ7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZfU2NyaXB0X1VuaVJhbmdlUmVjXworICB7CisgICAgRlRfVUludDMyICBmaXJzdDsKKyAgICBGVF9VSW50MzIgIGxhc3Q7CisKKyAgfSBBRl9TY3JpcHRfVW5pUmFuZ2VSZWM7CisKKyNkZWZpbmUgQUZfVU5JUkFOR0VfUkVDKCBhLCBiICkgeyAoRlRfVUludDMyKShhKSwgKEZUX1VJbnQzMikoYikgfQorCisgIHR5cGVkZWYgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjKiAgQUZfU2NyaXB0X1VuaVJhbmdlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX1NjcmlwdENsYXNzUmVjXworICB7CisgICAgQUZfU2NyaXB0ICBzY3JpcHQ7CisKKyAgICBBRl9TY3JpcHRfVW5pUmFuZ2UgIHNjcmlwdF91bmlfcmFuZ2VzOyAvKiBsYXN0IG11c3QgYmUgeyAwLCAwIH0gICAgICAgICovCisKKyAgICBGVF9VSW50MzIgIHN0YW5kYXJkX2NoYXIxOyAgICAgICAgICAgICAvKiBmb3IgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0ICovCisgICAgRlRfVUludDMyICBzdGFuZGFyZF9jaGFyMjsgICAgICAgICAgICAgLyogZGl0dG8gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX1VJbnQzMiAgc3RhbmRhcmRfY2hhcjM7ICAgICAgICAgICAgIC8qIGRpdHRvICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB9IEFGX1NjcmlwdENsYXNzUmVjOworCisgIHR5cGVkZWYgY29uc3QgQUZfU2NyaXB0Q2xhc3NSZWMqICBBRl9TY3JpcHRDbGFzczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBDIE8gViBFIFIgQSBHIEUgUyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBVc3VhbGx5LCBhIGZvbnQgY29udGFpbnMgbW9yZSBnbHlwaHMgdGhhbiBjYW4gYmUgYWRkcmVzc2VkIGJ5IGl0cworICAgKiAgY2hhcmFjdGVyIG1hcC4KKyAgICoKKyAgICogIEluIHRoZSBQb3N0U2NyaXB0IGZvbnQgd29ybGQsIGVuY29kaW5nIHZlY3RvcnMgc3BlY2lmaWMgdG8gYSBnaXZlbgorICAgKiAgdGFzayBhcmUgdXNlZCB0byBzZWxlY3Qgc3VjaCBnbHlwaHMsIGFuZCB0aGVzZSBnbHlwaHMgY2FuIGJlIG9mdGVuCisgICAqICByZWNvZ25pemVkIGJ5IGhhdmluZyBhIHN1ZmZpeCBpbiBpdHMgZ2x5cGggbmFtZXMuICBGb3IgZXhhbXBsZSwgYQorICAgKiAgc3VwZXJzY3JpcHQgZ2x5cGggYEEnIG1pZ2h0IGJlIGNhbGxlZCBgQS5zdXAnLiAgVW5mb3J0dW5hdGVseSwgdGhpcworICAgKiAgbmFtaW5nIHNjaGVtZSBpcyBub3Qgc3RhbmRhcmRpemVkIGFuZCB0aHVzIHVudXNhYmxlIGZvciB1cy4KKyAgICoKKyAgICogIEluIHRoZSBPcGVuVHlwZSB3b3JsZCwgYSBiZXR0ZXIgc29sdXRpb24gd2FzIGludmVudGVkLCBuYW1lbHkKKyAgICogIGBmZWF0dXJlcycsIHdoaWNoIGNsZWFubHkgc2VwYXJhdGUgYSBjaGFyYWN0ZXIncyBpbnB1dCBlbmNvZGluZyBmcm9tCisgICAqICB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCdzIGFwcGVhcmFuY2UsIGFuZCB3aGljaCBkb24ndCB1c2UgZ2x5cGggbmFtZXMKKyAgICogIGF0IGFsbC4gIEZvciBvdXIgcHVycG9zZXMsIGFuZCBzbGlnaHRseSBnZW5lcmFsaXplZCwgYW4gT3BlblR5cGUKKyAgICogIGZlYXR1cmUgaXMgYSBuYW1lIG9mIGEgbWFwcGluZyB0aGF0IG1hcHMgY2hhcmFjdGVyIGNvZGVzIHRvCisgICAqICBub24tc3RhbmRhcmQgZ2x5cGggaW5kaWNlcyAoZmVhdHVyZXMgZ2V0IHVzZWQgZm9yIG90aGVyIHRoaW5ncyBhbHNvKS4KKyAgICogIEZvciBleGFtcGxlLCB0aGUgYHN1cHMnIGZlYXR1cmUgcHJvdmlkZXMgc3VwZXJzY3JpcHQgZ2x5cGhzLCB0aHVzCisgICAqICBtYXBwaW5nIGNoYXJhY3RlciBjb2RlcyBsaWtlIGBBJyBvciBgQicgdG8gc3VwZXJzY3JpcHQgZ2x5cGgKKyAgICogIHJlcHJlc2VudGF0aW9uIGZvcm1zLiAgSG93IHRoaXMgbWFwcGluZyBoYXBwZW5zIGlzIGNvbXBsZXRlbHkKKyAgICogIHVuaW50ZXJlc3RpbmcgdG8gdXMuCisgICAqCisgICAqICBGb3IgdGhlIGF1dG8taGludGVyLCBhIGBjb3ZlcmFnZScgcmVwcmVzZW50cyBhbGwgZ2x5cGhzIG9mIGFuIE9wZW5UeXBlCisgICAqICBmZWF0dXJlIGNvbGxlY3RlZCBpbiBhIHNldCAoYXMgbGlzdGVkIGJlbG93KSB0aGF0IGNhbiBiZSBoaW50ZWQKKyAgICogIHRvZ2V0aGVyLiAgVG8gY29udGludWUgdGhlIGFib3ZlIGV4YW1wbGUsIHN1cGVyc2NyaXB0IGdseXBocyBtdXN0IG5vdAorICAgKiAgYmUgaGludGVkIHRvZ2V0aGVyIHdpdGggbm9ybWFsIGdseXBocyBiZWNhdXNlIHRoZSBibHVlIHpvbmVzCisgICAqICBjb21wbGV0ZWx5IGRpZmZlci4KKyAgICoKKyAgICogIE5vdGUgdGhhdCBGcmVlVHlwZSBpdHNlbGYgZG9lc24ndCBjb21wdXRlIGNvdmVyYWdlczsgaXQgb25seSBwcm92aWRlcworICAgKiAgdGhlIGdseXBocyBhZGRyZXNzYWJsZSBieSB0aGUgZGVmYXVsdCBVbmljb2RlIGNoYXJhY3RlciBtYXAuICBJbnN0ZWFkLAorICAgKiAgd2UgdXNlIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IChpZiBhdmFpbGFibGUpLCB3aGljaCBoYXMgbWFueSBmdW5jdGlvbnMKKyAgICogIGV4YWN0bHkgZm9yIHRoaXMgcHVycG9zZS4KKyAgICoKKyAgICogIEFGX0NPVkVSQUdFX0RFRkFVTFQgaXMgc3BlY2lhbDogSXQgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcgdGhhdCBpc24ndAorICAgKiAgbGlzdGVkIHNlcGFyYXRlbHkgKGluY2x1ZGluZyB0aGUgZ2x5cGhzIGFkZHJlc3NhYmxlIGJ5IHRoZSBjaGFyYWN0ZXIKKyAgICogIG1hcCkuICBJbiBjYXNlIEhhcmZCdXp6IGlzbid0IGF2YWlsYWJsZSwgaXQgZXhhY3RseSBjb3ZlcnMgdGhlIGdseXBocworICAgKiAgYWRkcmVzc2FibGUgYnkgdGhlIGNoYXJhY3RlciBtYXAuCisgICAqCisgICAqLworCisjdW5kZWYgIENPVkVSQUdFCisjZGVmaW5lIENPVkVSQUdFKCBuYW1lLCBOQU1FLCBkZXNjcmlwdGlvbiwgXAorICAgICAgICAgICAgICAgICAgdGFnMSwgdGFnMiwgdGFnMywgdGFnNCApIFwKKyAgICAgICAgICBBRl9DT1ZFUkFHRV8gIyMgTkFNRSwKKworCisgIHR5cGVkZWYgZW51bSAgQUZfQ292ZXJhZ2VfCisgIHsKKyNpbmNsdWRlICJhZmNvdmVyLmgiCisKKyAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUCisKKyAgfSBBRl9Db3ZlcmFnZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBTIFQgWSBMIEUgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qCisgICAqICBUaGUgdG9wbW9zdCBzdHJ1Y3R1cmUgZm9yIG1vZGVsbGluZyB0aGUgYXV0by1oaW50ZXIgZ2x5cGggaW5wdXQgZGF0YQorICAgKiAgaXMgYSBgc3R5bGUgY2xhc3MnLCBncm91cGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLgorICAgKi8KKworI3VuZGVmICBTVFlMRQorI2RlZmluZSBTVFlMRSggcywgUywgZCwgd3MsIHNjLCBzcywgYyApIFwKKyAgICAgICAgICBBRl9TVFlMRV8gIyMgUywKKworICAvKiBUaGUgbGlzdCBvZiBrbm93biBzdHlsZXMuICovCisgIHR5cGVkZWYgZW51bSAgQUZfU3R5bGVfCisgIHsKKworI2luY2x1ZGUgImFmc3R5bGVzLmgiCisKKyAgICBBRl9TVFlMRV9NQVggICAvKiBkbyBub3QgcmVtb3ZlICovCisKKyAgfSBBRl9TdHlsZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9TdHlsZUNsYXNzUmVjXworICB7CisgICAgQUZfU3R5bGUgIHN0eWxlOworCisgICAgQUZfV3JpdGluZ1N5c3RlbSAgIHdyaXRpbmdfc3lzdGVtOworICAgIEFGX1NjcmlwdCAgICAgICAgICBzY3JpcHQ7CisgICAgQUZfQmx1ZV9TdHJpbmdzZXQgIGJsdWVfc3RyaW5nc2V0OworICAgIEFGX0NvdmVyYWdlICAgICAgICBjb3ZlcmFnZTsKKworICB9IEFGX1N0eWxlQ2xhc3NSZWM7CisKKyAgdHlwZWRlZiBjb25zdCBBRl9TdHlsZUNsYXNzUmVjKiAgQUZfU3R5bGVDbGFzczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICBTIFQgWSBMIEUgICBNIEUgVCBSIEkgQyBTICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0IEFGX0ZhY2VHbG9iYWxzUmVjXyogIEFGX0ZhY2VHbG9iYWxzOworCisgIC8qIFRoaXMgaXMgdGhlIG1haW4gc3RydWN0dXJlIHRoYXQgY29tYmluZXMgZXZlcnl0aGluZy4gIEF1dG9maXQgbW9kdWxlcyAqLworICAvKiBzcGVjaWZpYyB0byB3cml0aW5nIHN5c3RlbXMgZGVyaXZlIHRoZWlyIHN0cnVjdHVyZXMgZnJvbSBpdCwgZm9yICAgICAgKi8KKyAgLyogZXhhbXBsZSBgQUZfTGF0aW5NZXRyaWNzJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEFGX1N0eWxlTWV0cmljc1JlY18KKyAgeworICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzczsKKyAgICBBRl9TY2FsZXJSZWMgICAgc2NhbGVyOworICAgIEZUX0Jvb2wgICAgICAgICBkaWdpdHNfaGF2ZV9zYW1lX3dpZHRoOworCisgICAgQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHM7ICAgIC8qIHRvIGFjY2VzcyBwcm9wZXJ0aWVzICovCisKKyAgfSBBRl9TdHlsZU1ldHJpY3NSZWM7CisKKworICAvKiBEZWNsYXJlIGFuZCBkZWZpbmUgdnRhYmxlcyBmb3IgY2xhc3NlcyAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIHdyaXRpbmdfc3lzdGVtX2NsYXNzICkgXAorICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBBRl9Xcml0aW5nU3lzdGVtQ2xhc3NSZWMgICAgICAgICAgICAgIFwKKyAgd3JpdGluZ19zeXN0ZW1fY2xhc3M7CisKKyNkZWZpbmUgQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3cml0aW5nX3N5c3RlbV9jbGFzcywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzeXN0ZW0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX3NpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX3NjYWxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBoX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBoX2FwcGx5ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29uc3QgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjICB3cml0aW5nX3N5c3RlbV9jbGFzcyA9IFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzeXN0ZW0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtX3NpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtX3NjYWxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBoX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBoX2FwcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfTsKKworCisjZGVmaW5lIEFGX0RFQ0xBUkVfU0NSSVBUX0NMQVNTKCBzY3JpcHRfY2xhc3MgKSBcCisgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0IEFGX1NjcmlwdENsYXNzUmVjICAgICBcCisgIHNjcmlwdF9jbGFzczsKKworI2RlZmluZSBBRl9ERUZJTkVfU0NSSVBUX0NMQVNTKCAgICAgICAgICAgXAorICAgICAgICAgIHNjcmlwdF9jbGFzcywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNjcmlwdCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0ZF9jaGFyMSwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0ZF9jaGFyMiwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0ZF9jaGFyMyApICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBBRl9TY3JpcHRDbGFzc1JlYyAgc2NyaXB0X2NsYXNzID0gXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNjcmlwdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0ZF9jaGFyMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0ZF9jaGFyMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0ZF9jaGFyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisKKyNkZWZpbmUgQUZfREVDTEFSRV9TVFlMRV9DTEFTUyggc3R5bGVfY2xhc3MgKSBcCisgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0IEFGX1N0eWxlQ2xhc3NSZWMgICAgXAorICBzdHlsZV9jbGFzczsKKworI2RlZmluZSBBRl9ERUZJTkVfU1RZTEVfQ0xBU1MoICAgICAgICAgIFwKKyAgICAgICAgICBzdHlsZV9jbGFzcywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc3R5bGUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHdyaXRpbmdfc3lzdGVtLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzY3JpcHQsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgYmx1ZV9zdHJpbmdzZXQsICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNvdmVyYWdlICkgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAgICAgICAgICAgICAgICBcCisgIGNvbnN0IEFGX1N0eWxlQ2xhc3NSZWMgIHN0eWxlX2NsYXNzID0gXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHlsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd3JpdGluZ19zeXN0ZW0sICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNjcmlwdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBibHVlX3N0cmluZ3NldCwgICAgICAgICAgICAgICAgICAgICBcCisgICAgY292ZXJhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjZGVmaW5lIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIHdyaXRpbmdfc3lzdGVtX2NsYXNzICkgICAgICAgICAgICBcCisgIEZUX0xPQ0FMKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIHdyaXRpbmdfc3lzdGVtX2NsYXNzKCBBRl9Xcml0aW5nU3lzdGVtQ2xhc3NSZWMqICBhYyApOworCisjZGVmaW5lIEFGX0RFRklORV9XUklUSU5HX1NZU1RFTV9DTEFTUyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3cml0aW5nX3N5c3RlbV9jbGFzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN5c3RlbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbV9zaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBtX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG1fc2NhbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbV9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBoX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGhfYXBwbHkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgd3JpdGluZ19zeXN0ZW1fY2xhc3MoIEFGX1dyaXRpbmdTeXN0ZW1DbGFzc1JlYyogIGFjICkgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPndyaXRpbmdfc3lzdGVtICAgICAgPSBzeXN0ZW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdHlsZV9tZXRyaWNzX3NpemUgID0gbV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c3R5bGVfbWV0cmljc19pbml0ICA9IG1faW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdHlsZV9tZXRyaWNzX3NjYWxlID0gbV9zY2FsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0eWxlX21ldHJpY3NfZG9uZSAgPSBtX2RvbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdHlsZV9oaW50c19pbml0ICAgID0gaF9pbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0eWxlX2hpbnRzX2FwcGx5ICAgPSBoX2FwcGx5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisKKyNkZWZpbmUgQUZfREVDTEFSRV9TQ1JJUFRfQ0xBU1MoIHNjcmlwdF9jbGFzcyApICAgICAgICAgICAgIFwKKyAgRlRfTE9DQUwoIHZvaWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgc2NyaXB0X2NsYXNzKCBBRl9TY3JpcHRDbGFzc1JlYyogIGFjICk7CisKKyNkZWZpbmUgQUZfREVGSU5FX1NDUklQVF9DTEFTUyggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNjcmlwdF9jbGFzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc2NyaXB0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByYW5nZXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0ZF9jaGFyMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgc3RkX2NoYXIyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdGRfY2hhcjMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9MT0NBTF9ERUYoIHZvaWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0luaXRfQ2xhc3NfICMjIHNjcmlwdF9jbGFzcyggQUZfU2NyaXB0Q2xhc3NSZWMqICBhYyApIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zY3JpcHQgICAgICAgICAgICA9IHNjcmlwdF87ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnNjcmlwdF91bmlfcmFuZ2VzID0gcmFuZ2VzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c3RhbmRhcmRfY2hhcjEgICAgPSBzdGRfY2hhcjE7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFjLT5zdGFuZGFyZF9jaGFyMiAgICA9IHN0ZF9jaGFyMjsgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWMtPnN0YW5kYXJkX2NoYXIzICAgID0gc3RkX2NoYXIzOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisKKyNkZWZpbmUgQUZfREVDTEFSRV9TVFlMRV9DTEFTUyggc3R5bGVfY2xhc3MgKSAgICAgICAgICAgICBcCisgIEZUX0xPQ0FMKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9Jbml0X0NsYXNzXyAjIyBzdHlsZV9jbGFzcyggQUZfU3R5bGVDbGFzc1JlYyogIGFjICk7CisKKyNkZWZpbmUgQUZfREVGSU5FX1NUWUxFX0NMQVNTKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdHlsZV9jbGFzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdHlsZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3cml0aW5nX3N5c3RlbV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzY3JpcHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBibHVlX3N0cmluZ3NldF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjb3ZlcmFnZV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgc3R5bGVfY2xhc3MoIEFGX1N0eWxlQ2xhc3NSZWMqICBhYyApIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c3R5bGUgICAgICAgICAgPSBzdHlsZV87ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+d3JpdGluZ19zeXN0ZW0gPSB3cml0aW5nX3N5c3RlbV87ICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+c2NyaXB0ICAgICAgICAgPSBzY3JpcHRfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+Ymx1ZV9zdHJpbmdzZXQgPSBibHVlX3N0cmluZ3NldF87ICAgICAgICAgICAgICAgIFwKKyAgICBhYy0+Y292ZXJhZ2UgICAgICAgPSBjb3ZlcmFnZV87ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0FGVFlQRVNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZ3YXJwLmMgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYWZ3YXJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhZjRmMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZndhcnAuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgYWZ3YXJwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qCisgICAqICBUaGUgaWRlYSBvZiB0aGUgd2FycGluZyBjb2RlIGlzIHRvIHNsaWdodGx5IHNjYWxlIGFuZCBzaGlmdCBhIGdseXBoCisgICAqICB3aXRoaW4gYSBzaW5nbGUgZGltZW5zaW9uIHNvIHRoYXQgYXMgbXVjaCBvZiBpdHMgc2VnbWVudHMgYXJlIGFsaWduZWQKKyAgICogIChtb3JlIG9yIGxlc3MpIG9uIHRoZSBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQKKyAgICogIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuCisgICAqLworCisjaW5jbHVkZSAiYWZ3YXJwLmgiCisKKyNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZndhcnAKKworCisgIC8qIFRoZSB3ZWlnaHRzIGNvdmVyIHRoZSByYW5nZSAwLzY0IC0gNjMvNjQgb2YgYSBwaXhlbC4gIE9idmlvdXNseSwgKi8KKyAgLyogdmFsdWVzIGFyb3VuZCBhIGhhbGYgcGl4ZWwgKHdoaWNoIG1lYW5zIGV4YWN0bHkgYmV0d2VlbiB0d28gZ3JpZCAqLworICAvKiBsaW5lcykgZ2V0cyB0aGUgd29yc3Qgd2VpZ2h0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgMQorICBzdGF0aWMgY29uc3QgQUZfV2FycFNjb3JlCisgIGFmX3dhcnBlcl93ZWlnaHRzWzY0XSA9CisgIHsKKyAgICAzNSwgMzIsIDMwLCAyNSwgMjAsIDE1LCAxMiwgMTAsICA1LCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAtMSwgLTIsIC01LCAtOCwtMTAsLTEwLC0yMCwtMjAsLTMwLC0zMCwKKworICAgLTMwLC0zMCwtMjAsLTIwLC0xMCwtMTAsIC04LCAtNSwgLTIsIC0xLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorICAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDUsIDEwLCAxMiwgMTUsIDIwLCAyNSwgMzAsIDMyLAorICB9OworI2Vsc2UKKyAgc3RhdGljIGNvbnN0IEFGX1dhcnBTY29yZQorICBhZl93YXJwZXJfd2VpZ2h0c1s2NF0gPQorICB7CisgICAgMzAsIDIwLCAxMCwgIDUsICA0LCAgNCwgIDMsICAyLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIC0xLCAtMiwgLTIsIC01LCAtNSwtMTAsLTEwLC0xNSwtMjAsCisKKyAgIC0yMCwtMTUsLTE1LC0xMCwtMTAsIC01LCAtNSwgLTIsIC0yLCAtMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMiwgIDMsICA0LCAgNCwgIDUsIDEwLCAyMCwKKyAgfTsKKyNlbmRpZgorCisKKyAgLyogU2NvcmUgc2VnbWVudHMgZm9yIGEgZ2l2ZW4gYHNjYWxlJyBhbmQgYGRlbHRhJyBpbiB0aGUgcmFuZ2UgKi8KKyAgLyogYHh4MScgdG8gYHh4MicsIGFuZCBzdG9yZSB0aGUgYmVzdCByZXN1bHQgaW4gYHdhcnBlcicuICBJZiAgKi8KKyAgLyogdGhlIG5ldyBiZXN0IHNjb3JlIGlzIGVxdWFsIHRvIHRoZSBvbGQgb25lLCBwcmVmZXIgdGhlICAgICAgKi8KKyAgLyogdmFsdWUgd2l0aCBhIHNtYWxsZXIgZGlzdG9ydGlvbiAoYXJvdW5kIGBiYXNlX2Rpc3RvcnQnKS4gICAgKi8KKworICBzdGF0aWMgdm9pZAorICBhZl93YXJwZXJfY29tcHV0ZV9saW5lX2Jlc3QoIEFGX1dhcnBlciAgICAgd2FycGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICAgc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICBkZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHh4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHh4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9XYXJwU2NvcmUgIGJhc2VfZGlzdG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TZWdtZW50ICAgIHNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgbnVtX3NlZ21lbnRzICkKKyAgeworICAgIEZUX0ludCAgICAgICAgaWR4X21pbiwgaWR4X21heCwgaWR4MDsKKyAgICBGVF9JbnQgICAgICAgIG5uOworICAgIEFGX1dhcnBTY29yZSAgc2NvcmVzWzY1XTsKKworCisgICAgZm9yICggbm4gPSAwOyBubiA8IDY1OyBubisrICkKKyAgICAgIHNjb3Jlc1tubl0gPSAwOworCisgICAgaWR4MCA9IHh4MSAtIHdhcnBlci0+dDE7CisKKyAgICAvKiBjb21wdXRlIG1pbmltdW0gYW5kIG1heGltdW0gaW5kaWNlcyAqLworICAgIHsKKyAgICAgIEZUX1BvcyAgeHgxbWluID0gd2FycGVyLT54MW1pbjsKKyAgICAgIEZUX1BvcyAgeHgxbWF4ID0gd2FycGVyLT54MW1heDsKKyAgICAgIEZUX1BvcyAgdyAgICAgID0geHgyIC0geHgxOworCisKKyAgICAgIGlmICggeHgxbWluICsgdyA8IHdhcnBlci0+eDJtaW4gKQorICAgICAgICB4eDFtaW4gPSB3YXJwZXItPngybWluIC0gdzsKKworICAgICAgeHgxbWF4ID0gd2FycGVyLT54MW1heDsKKyAgICAgIGlmICggeHgxbWF4ICsgdyA+IHdhcnBlci0+eDJtYXggKQorICAgICAgICB4eDFtYXggPSB3YXJwZXItPngybWF4IC0gdzsKKworICAgICAgaWR4X21pbiA9IHh4MW1pbiAtIHdhcnBlci0+dDE7CisgICAgICBpZHhfbWF4ID0geHgxbWF4IC0gd2FycGVyLT50MTsKKworICAgICAgaWYgKCBpZHhfbWluIDwgMCB8fCBpZHhfbWluID4gaWR4X21heCB8fCBpZHhfbWF4ID4gNjQgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKCAiaW52YWxpZCBpbmRpY2VzOlxuIgorICAgICAgICAgICAgICAgICAgICAiICBtaW49JWQgbWF4PSVkLCB4eDE9JWxkIHh4Mj0lbGQsXG4iCisgICAgICAgICAgICAgICAgICAgICIgIHgxbWluPSVsZCB4MW1heD0lbGQsIHgybWluPSVsZCB4Mm1heD0lbGRcbiIsCisgICAgICAgICAgICAgICAgICAgIGlkeF9taW4sIGlkeF9tYXgsIHh4MSwgeHgyLAorICAgICAgICAgICAgICAgICAgICB3YXJwZXItPngxbWluLCB3YXJwZXItPngxbWF4LAorICAgICAgICAgICAgICAgICAgICB3YXJwZXItPngybWluLCB3YXJwZXItPngybWF4ICkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9zZWdtZW50czsgbm4rKyApCisgICAgeworICAgICAgRlRfUG9zICBsZW4gPSBzZWdtZW50c1tubl0ubWF4X2Nvb3JkIC0gc2VnbWVudHNbbm5dLm1pbl9jb29yZDsKKyAgICAgIEZUX1BvcyAgeTAgID0gRlRfTXVsRml4KCBzZWdtZW50c1tubl0ucG9zLCBzY2FsZSApICsgZGVsdGE7CisgICAgICBGVF9Qb3MgIHkgICA9IHkwICsgKCBpZHhfbWluIC0gaWR4MCApOworICAgICAgRlRfSW50ICBpZHg7CisKKworICAgICAgLyogc2NvcmUgdGhlIGxlbmd0aCBvZiB0aGUgc2VnbWVudHMgZm9yIHRoZSBnaXZlbiByYW5nZSAqLworICAgICAgZm9yICggaWR4ID0gaWR4X21pbjsgaWR4IDw9IGlkeF9tYXg7IGlkeCsrLCB5KysgKQorICAgICAgICBzY29yZXNbaWR4XSArPSBhZl93YXJwZXJfd2VpZ2h0c1t5ICYgNjNdICogbGVuOworICAgIH0KKworICAgIC8qIGZpbmQgYmVzdCBzY29yZSAqLworICAgIHsKKyAgICAgIEZUX0ludCAgaWR4OworCisKKyAgICAgIGZvciAoIGlkeCA9IGlkeF9taW47IGlkeCA8PSBpZHhfbWF4OyBpZHgrKyApCisgICAgICB7CisgICAgICAgIEFGX1dhcnBTY29yZSAgc2NvcmUgPSBzY29yZXNbaWR4XTsKKyAgICAgICAgQUZfV2FycFNjb3JlICBkaXN0b3J0ID0gYmFzZV9kaXN0b3J0ICsgKCBpZHggLSBpZHgwICk7CisKKworICAgICAgICBpZiAoIHNjb3JlID4gd2FycGVyLT5iZXN0X3Njb3JlICAgICAgICAgfHwKKyAgICAgICAgICAgICAoIHNjb3JlID09IHdhcnBlci0+YmVzdF9zY29yZSAgICAmJgorICAgICAgICAgICAgICAgZGlzdG9ydCA8IHdhcnBlci0+YmVzdF9kaXN0b3J0ICkgKQorICAgICAgICB7CisgICAgICAgICAgd2FycGVyLT5iZXN0X3Njb3JlICAgPSBzY29yZTsKKyAgICAgICAgICB3YXJwZXItPmJlc3RfZGlzdG9ydCA9IGRpc3RvcnQ7CisgICAgICAgICAgd2FycGVyLT5iZXN0X3NjYWxlICAgPSBzY2FsZTsKKyAgICAgICAgICB3YXJwZXItPmJlc3RfZGVsdGEgICA9IGRlbHRhICsgKCBpZHggLSBpZHgwICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qIENvbXB1dGUgb3B0aW1hbCBzY2FsaW5nIGFuZCBkZWx0YSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gZ2x5cGggYW5kICovCisgIC8qIGRpbWVuc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgYWZfd2FycGVyX2NvbXB1dGUoIEFGX1dhcnBlciAgICAgIHdhcnBlciwKKyAgICAgICAgICAgICAgICAgICAgIEFGX0dseXBoSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltLAorICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICAqYV9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgKmFfZGVsdGEgKQorICB7CisgICAgQUZfQXhpc0hpbnRzICBheGlzOworICAgIEFGX1BvaW50ICAgICAgcG9pbnRzOworCisgICAgRlRfRml4ZWQgICAgICBvcmdfc2NhbGU7CisgICAgRlRfUG9zICAgICAgICBvcmdfZGVsdGE7CisKKyAgICBGVF9JbnQgICAgICAgIG5uLCBudW1fcG9pbnRzLCBudW1fc2VnbWVudHM7CisgICAgRlRfSW50ICAgICAgICBYMSwgWDI7CisgICAgRlRfSW50ICAgICAgICB3OworCisgICAgQUZfV2FycFNjb3JlICBiYXNlX2Rpc3RvcnQ7CisgICAgQUZfU2VnbWVudCAgICBzZWdtZW50czsKKworCisgICAgLyogZ2V0IG9yaWdpbmFsIHNjYWxpbmcgdHJhbnNmb3JtYXRpb24gKi8KKyAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fVkVSVCApCisgICAgeworICAgICAgb3JnX3NjYWxlID0gaGludHMtPnlfc2NhbGU7CisgICAgICBvcmdfZGVsdGEgPSBoaW50cy0+eV9kZWx0YTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG9yZ19zY2FsZSA9IGhpbnRzLT54X3NjYWxlOworICAgICAgb3JnX2RlbHRhID0gaGludHMtPnhfZGVsdGE7CisgICAgfQorCisgICAgd2FycGVyLT5iZXN0X3NjYWxlICAgPSBvcmdfc2NhbGU7CisgICAgd2FycGVyLT5iZXN0X2RlbHRhICAgPSBvcmdfZGVsdGE7CisgICAgd2FycGVyLT5iZXN0X3Njb3JlICAgPSBJTlRfTUlOOworICAgIHdhcnBlci0+YmVzdF9kaXN0b3J0ID0gMDsKKworICAgIGF4aXMgICAgICAgICA9ICZoaW50cy0+YXhpc1tkaW1dOworICAgIHNlZ21lbnRzICAgICA9IGF4aXMtPnNlZ21lbnRzOworICAgIG51bV9zZWdtZW50cyA9IGF4aXMtPm51bV9zZWdtZW50czsKKyAgICBwb2ludHMgICAgICAgPSBoaW50cy0+cG9pbnRzOworICAgIG51bV9wb2ludHMgICA9IGhpbnRzLT5udW1fcG9pbnRzOworCisgICAgKmFfc2NhbGUgPSBvcmdfc2NhbGU7CisgICAgKmFfZGVsdGEgPSBvcmdfZGVsdGE7CisKKyAgICAvKiBnZXQgWDEgYW5kIFgyLCBtaW5pbXVtIGFuZCBtYXhpbXVtIGluIG9yaWdpbmFsIGNvb3JkaW5hdGVzICovCisgICAgaWYgKCBudW1fc2VnbWVudHMgPCAxICkKKyAgICAgIHJldHVybjsKKworI2lmIDEKKyAgICBYMSA9IFgyID0gcG9pbnRzWzBdLmZ4OworICAgIGZvciAoIG5uID0gMTsgbm4gPCBudW1fcG9pbnRzOyBubisrICkKKyAgICB7CisgICAgICBGVF9JbnQgIFggPSBwb2ludHNbbm5dLmZ4OworCisKKyAgICAgIGlmICggWCA8IFgxICkKKyAgICAgICAgWDEgPSBYOworICAgICAgaWYgKCBYID4gWDIgKQorICAgICAgICBYMiA9IFg7CisgICAgfQorI2Vsc2UKKyAgICBYMSA9IFgyID0gc2VnbWVudHNbMF0ucG9zOworICAgIGZvciAoIG5uID0gMTsgbm4gPCBudW1fc2VnbWVudHM7IG5uKysgKQorICAgIHsKKyAgICAgIEZUX0ludCAgWCA9IHNlZ21lbnRzW25uXS5wb3M7CisKKworICAgICAgaWYgKCBYIDwgWDEgKQorICAgICAgICBYMSA9IFg7CisgICAgICBpZiAoIFggPiBYMiApCisgICAgICAgIFgyID0gWDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggWDEgPj0gWDIgKQorICAgICAgcmV0dXJuOworCisgICAgd2FycGVyLT54MSA9IEZUX011bEZpeCggWDEsIG9yZ19zY2FsZSApICsgb3JnX2RlbHRhOworICAgIHdhcnBlci0+eDIgPSBGVF9NdWxGaXgoIFgyLCBvcmdfc2NhbGUgKSArIG9yZ19kZWx0YTsKKworICAgIHdhcnBlci0+dDEgPSBBRl9XQVJQRVJfRkxPT1IoIHdhcnBlci0+eDEgKTsKKyAgICB3YXJwZXItPnQyID0gQUZfV0FSUEVSX0NFSUwoIHdhcnBlci0+eDIgKTsKKworICAgIC8qIGV4YW1pbmUgYSBoYWxmIHBpeGVsIHdpZGUgcmFuZ2UgYXJvdW5kIHRoZSBtYXhpbXVtIGNvb3JkaW5hdGVzICovCisgICAgd2FycGVyLT54MW1pbiA9IHdhcnBlci0+eDEgJiB+MzE7CisgICAgd2FycGVyLT54MW1heCA9IHdhcnBlci0+eDFtaW4gKyAzMjsKKyAgICB3YXJwZXItPngybWluID0gd2FycGVyLT54MiAmIH4zMTsKKyAgICB3YXJwZXItPngybWF4ID0gd2FycGVyLT54Mm1pbiArIDMyOworCisgICAgaWYgKCB3YXJwZXItPngxbWF4ID4gd2FycGVyLT54MiApCisgICAgICB3YXJwZXItPngxbWF4ID0gd2FycGVyLT54MjsKKworICAgIGlmICggd2FycGVyLT54Mm1pbiA8IHdhcnBlci0+eDEgKQorICAgICAgd2FycGVyLT54Mm1pbiA9IHdhcnBlci0+eDE7CisKKyAgICB3YXJwZXItPncwID0gd2FycGVyLT54MiAtIHdhcnBlci0+eDE7CisKKyAgICBpZiAoIHdhcnBlci0+dzAgPD0gNjQgKQorICAgIHsKKyAgICAgIHdhcnBlci0+eDFtYXggPSB3YXJwZXItPngxOworICAgICAgd2FycGVyLT54Mm1pbiA9IHdhcnBlci0+eDI7CisgICAgfQorCisgICAgLyogZXhhbWluZSAoYXQgbW9zdCkgYSBwaXhlbCB3aWRlIHJhbmdlIGFyb3VuZCB0aGUgbmF0dXJhbCB3aWR0aCAqLworICAgIHdhcnBlci0+d21pbiA9IHdhcnBlci0+eDJtaW4gLSB3YXJwZXItPngxbWF4OworICAgIHdhcnBlci0+d21heCA9IHdhcnBlci0+eDJtYXggLSB3YXJwZXItPngxbWluOworCisjaWYgMQorICAgIC8qIHNvbWUgaGV1cmlzdGljcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiB3aWR0aHMgdG8gYmUgZXhhbWluZWQgKi8KKyAgICB7CisgICAgICBpbnQgIG1hcmdpbiA9IDE2OworCisKKyAgICAgIGlmICggd2FycGVyLT53MCA8PSAxMjggKQorICAgICAgeworICAgICAgICAgbWFyZ2luID0gODsKKyAgICAgICAgIGlmICggd2FycGVyLT53MCA8PSA5NiApCisgICAgICAgICAgIG1hcmdpbiA9IDQ7CisgICAgICB9CisKKyAgICAgIGlmICggd2FycGVyLT53bWluIDwgd2FycGVyLT53MCAtIG1hcmdpbiApCisgICAgICAgIHdhcnBlci0+d21pbiA9IHdhcnBlci0+dzAgLSBtYXJnaW47CisKKyAgICAgIGlmICggd2FycGVyLT53bWF4ID4gd2FycGVyLT53MCArIG1hcmdpbiApCisgICAgICAgIHdhcnBlci0+d21heCA9IHdhcnBlci0+dzAgKyBtYXJnaW47CisgICAgfQorCisgICAgaWYgKCB3YXJwZXItPndtaW4gPCB3YXJwZXItPncwICogMyAvIDQgKQorICAgICAgd2FycGVyLT53bWluID0gd2FycGVyLT53MCAqIDMgLyA0OworCisgICAgaWYgKCB3YXJwZXItPndtYXggPiB3YXJwZXItPncwICogNSAvIDQgKQorICAgICAgd2FycGVyLT53bWF4ID0gd2FycGVyLT53MCAqIDUgLyA0OworI2Vsc2UKKyAgICAvKiBubyBzY2FsaW5nLCBqdXN0IHRyYW5zbGF0aW9uICovCisgICAgd2FycGVyLT53bWluID0gd2FycGVyLT53bWF4ID0gd2FycGVyLT53MDsKKyNlbmRpZgorCisgICAgZm9yICggdyA9IHdhcnBlci0+d21pbjsgdyA8PSB3YXJwZXItPndtYXg7IHcrKyApCisgICAgeworICAgICAgRlRfRml4ZWQgIG5ld19zY2FsZTsKKyAgICAgIEZUX1BvcyAgICBuZXdfZGVsdGE7CisgICAgICBGVF9Qb3MgICAgeHgxLCB4eDI7CisKKworICAgICAgLyogY29tcHV0ZSBtaW4gYW5kIG1heCBwb3NpdGlvbnMgZm9yIGdpdmVuIHdpZHRoLCAgICAgICAqLworICAgICAgLyogYXNzdXJpbmcgdGhhdCB0aGV5IHN0YXkgd2l0aGluIHRoZSBjb29yZGluYXRlIHJhbmdlcyAqLworICAgICAgeHgxID0gd2FycGVyLT54MTsKKyAgICAgIHh4MiA9IHdhcnBlci0+eDI7CisgICAgICBpZiAoIHcgPj0gd2FycGVyLT53MCApCisgICAgICB7CisgICAgICAgIHh4MSAtPSB3IC0gd2FycGVyLT53MDsKKyAgICAgICAgaWYgKCB4eDEgPCB3YXJwZXItPngxbWluICkKKyAgICAgICAgeworICAgICAgICAgIHh4MiArPSB3YXJwZXItPngxbWluIC0geHgxOworICAgICAgICAgIHh4MSAgPSB3YXJwZXItPngxbWluOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHh4MSAtPSB3IC0gd2FycGVyLT53MDsKKyAgICAgICAgaWYgKCB4eDEgPiB3YXJwZXItPngxbWF4ICkKKyAgICAgICAgeworICAgICAgICAgIHh4MiAtPSB4eDEgLSB3YXJwZXItPngxbWF4OworICAgICAgICAgIHh4MSAgPSB3YXJwZXItPngxbWF4OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggeHgxIDwgd2FycGVyLT54MSApCisgICAgICAgIGJhc2VfZGlzdG9ydCA9IHdhcnBlci0+eDEgLSB4eDE7CisgICAgICBlbHNlCisgICAgICAgIGJhc2VfZGlzdG9ydCA9IHh4MSAtIHdhcnBlci0+eDE7CisKKyAgICAgIGlmICggeHgyIDwgd2FycGVyLT54MiApCisgICAgICAgIGJhc2VfZGlzdG9ydCArPSB3YXJwZXItPngyIC0geHgyOworICAgICAgZWxzZQorICAgICAgICBiYXNlX2Rpc3RvcnQgKz0geHgyIC0gd2FycGVyLT54MjsKKworICAgICAgLyogZ2l2ZSBiYXNlIGRpc3RvcnRpb24gYSBncmVhdGVyIHdlaWdodCB3aGlsZSBzY29yaW5nICovCisgICAgICBiYXNlX2Rpc3RvcnQgKj0gMTA7CisKKyAgICAgIG5ld19zY2FsZSA9IG9yZ19zY2FsZSArIEZUX0RpdkZpeCggdyAtIHdhcnBlci0+dzAsIFgyIC0gWDEgKTsKKyAgICAgIG5ld19kZWx0YSA9IHh4MSAtIEZUX011bEZpeCggWDEsIG5ld19zY2FsZSApOworCisgICAgICBhZl93YXJwZXJfY29tcHV0ZV9saW5lX2Jlc3QoIHdhcnBlciwgbmV3X3NjYWxlLCBuZXdfZGVsdGEsIHh4MSwgeHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2Rpc3RvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLCBudW1fc2VnbWVudHMgKTsKKyAgICB9CisKKyAgICB7CisgICAgICBGVF9GaXhlZCAgYmVzdF9zY2FsZSA9IHdhcnBlci0+YmVzdF9zY2FsZTsKKyAgICAgIEZUX1BvcyAgICBiZXN0X2RlbHRhID0gd2FycGVyLT5iZXN0X2RlbHRhOworCisKKyAgICAgIGhpbnRzLT54bWluX2RlbHRhID0gRlRfTXVsRml4KCBYMSwgYmVzdF9zY2FsZSAtIG9yZ19zY2FsZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmVzdF9kZWx0YTsKKyAgICAgIGhpbnRzLT54bWF4X2RlbHRhID0gRlRfTXVsRml4KCBYMiwgYmVzdF9zY2FsZSAtIG9yZ19zY2FsZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmVzdF9kZWx0YTsKKworICAgICAgKmFfc2NhbGUgPSBiZXN0X3NjYWxlOworICAgICAgKmFfZGVsdGEgPSBiZXN0X2RlbHRhOworICAgIH0KKyAgfQorCisjZWxzZSAvKiAhQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisKKyAgLyogQU5TSSBDIGRvZXNuJ3QgbGlrZSBlbXB0eSBzb3VyY2UgZmlsZXMgKi8KKyAgdHlwZWRlZiBpbnQgIF9hZl93YXJwX2R1bW15OworCisjZW5kaWYgLyogIUFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZndhcnAuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZndhcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTYyMDhhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2Fmd2FycC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmd2FycC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciB3YXJwaW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGV0FSUF9IX18KKyNkZWZpbmUgX19BRldBUlBfSF9fCisKKyNpbmNsdWRlICJhZmhpbnRzLmgiCisKK0ZUX0JFR0lOX0hFQURFUgorCisjZGVmaW5lIEFGX1dBUlBFUl9TQ0FMRQorCisjZGVmaW5lIEFGX1dBUlBFUl9GTE9PUiggeCApICAoICh4KSAmIH5UWVBFT0YoIHggKTYzICkKKyNkZWZpbmUgQUZfV0FSUEVSX0NFSUwoIHggKSAgIEFGX1dBUlBFUl9GTE9PUiggKHgpICsgNjMgKQorCisKKyAgdHlwZWRlZiBGVF9JbnQzMiAgQUZfV2FycFNjb3JlOworCisgIHR5cGVkZWYgc3RydWN0ICBBRl9XYXJwZXJSZWNfCisgIHsKKyAgICBGVF9Qb3MgICAgICAgIHgxLCB4MjsKKyAgICBGVF9Qb3MgICAgICAgIHQxLCB0MjsKKyAgICBGVF9Qb3MgICAgICAgIHgxbWluLCB4MW1heDsKKyAgICBGVF9Qb3MgICAgICAgIHgybWluLCB4Mm1heDsKKyAgICBGVF9Qb3MgICAgICAgIHcwLCB3bWluLCB3bWF4OworCisgICAgRlRfRml4ZWQgICAgICBiZXN0X3NjYWxlOworICAgIEZUX1BvcyAgICAgICAgYmVzdF9kZWx0YTsKKyAgICBBRl9XYXJwU2NvcmUgIGJlc3Rfc2NvcmU7CisgICAgQUZfV2FycFNjb3JlICBiZXN0X2Rpc3RvcnQ7CisKKyAgfSBBRl9XYXJwZXJSZWMsICpBRl9XYXJwZXI7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGFmX3dhcnBlcl9jb21wdXRlKCBBRl9XYXJwZXIgICAgICB3YXJwZXIsCisgICAgICAgICAgICAgICAgICAgICBBRl9HbHlwaEhpbnRzICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICAgKmFfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgICphX2RlbHRhICk7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0FGV0FSUF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZndydHN5cy5oIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhODlkMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmd3J0c3lzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciB3cml0aW5nIHN5c3RlbXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGV1JUU1lTX0hfXworI2RlZmluZSBfX0FGV1JUU1lTX0hfXworCisgIC8qIFNpbmNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNhbid0IGNyZWF0ZSBvdGhlciBwcmVwcm9jZXNzb3IgKi8KKyAgLyogZGlyZWN0aXZlcywgd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgbWFudWFsbHkuICAgICAqLworCisjaW5jbHVkZSAiYWZkdW1teS5oIgorI2luY2x1ZGUgImFmbGF0aW4uaCIKKyNpbmNsdWRlICJhZmNqay5oIgorI2luY2x1ZGUgImFmaW5kaWMuaCIKKyNpZmRlZiBGVF9PUFRJT05fQVVUT0ZJVDIKKyNpbmNsdWRlICJhZmxhdGluMi5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FGV1JUU1lTX0hfXyAqLworCisKKyAgLyogVGhlIGZvbGxvd2luZyBwYXJ0IGNhbiBiZSBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcy4gKi8KKyAgLyogRGVmaW5lIGBXUklUSU5HX1NZU1RFTScgYXMgbmVlZGVkLiAgICAgICAgICAgICAgICAgKi8KKworCisgIC8qIEFkZCBuZXcgd3JpdGluZyBzeXN0ZW1zIGhlcmUuICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgd3JpdGluZyBzeXN0ZW0gKi8KKyAgLyogbmFtZSBpbiBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSwgcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAgICAgICAqLworCisgIFdSSVRJTkdfU1lTVEVNKCBkdW1teSwgIERVTU1ZICApCisgIFdSSVRJTkdfU1lTVEVNKCBsYXRpbiwgIExBVElOICApCisgIFdSSVRJTkdfU1lTVEVNKCBjamssICAgIENKSyAgICApCisgIFdSSVRJTkdfU1lTVEVNKCBpbmRpYywgIElORElDICApCisjaWZkZWYgRlRfT1BUSU9OX0FVVE9GSVQyCisgIFdSSVRJTkdfU1lTVEVNKCBsYXRpbjIsIExBVElOMiApCisjZW5kaWYKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9hdXRvZml0LmMgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZWQ0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGF1dG9maXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXRvLWZpdHRlciBtb2R1bGUgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJhZnBpYy5jIgorI2luY2x1ZGUgImFmYW5nbGVzLmMiCisjaW5jbHVkZSAiYWZibHVlLmMiCisjaW5jbHVkZSAiYWZnbG9iYWwuYyIKKyNpbmNsdWRlICJhZmhpbnRzLmMiCisKKyNpbmNsdWRlICJhZnJhbmdlcy5jIgorCisjaW5jbHVkZSAiYWZkdW1teS5jIgorI2luY2x1ZGUgImFmbGF0aW4uYyIKKyNpZmRlZiBGVF9PUFRJT05fQVVUT0ZJVDIKKyNpbmNsdWRlICJhZmxhdGluMi5jIgorI2VuZGlmCisjaW5jbHVkZSAiYWZjamsuYyIKKyNpbmNsdWRlICJhZmluZGljLmMiCisKKyNpbmNsdWRlICJoYnNoaW0uYyIKKworI2luY2x1ZGUgImFmbG9hZGVyLmMiCisjaW5jbHVkZSAiYWZtb2R1bGUuYyIKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgorI2luY2x1ZGUgImFmd2FycC5jIgorI2VuZGlmCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2hic2hpbS5jIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2hic2hpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YzFkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvaGJzaGltLmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGhic2hpbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoYm9keSkuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSAiYWZnbG9iYWwuaCIKKyNpbmNsdWRlICJhZnR5cGVzLmgiCisjaW5jbHVkZSAiaGJzaGltLmgiCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYWZoYXJmYnV6egorCisKKyAgLyoKKyAgICogV2UgdXNlIGBzZXRzJyAoaW4gdGhlIEhhcmZCdXp6IHNlbnNlLCB3aGljaCBjb21lcyBxdWl0ZSBuZWFyIHRvIHRoZQorICAgKiB1c3VhbCBtYXRoZW1hdGljYWwgbWVhbmluZykgdG8gbWFuYWdlIGJvdGggbG9va3VwcyBhbmQgZ2x5cGggaW5kaWNlcy4KKyAgICoKKyAgICogMS4gRm9yIGVhY2ggY292ZXJhZ2UsIGNvbGxlY3QgbG9va3VwIElEcyBpbiBhIHNldC4gIE5vdGUgdGhhdCBhbgorICAgKiAgICBhdXRvLWhpbnRlciBgY292ZXJhZ2UnIGlzIHJlcHJlc2VudGVkIGJ5IG9uZSBgZmVhdHVyZScsIGFuZCBhCisgICAqICAgIGZlYXR1cmUgY29uc2lzdHMgb2YgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiAoZm9udCBzcGVjaWZpYykgYGxvb2t1cCdzCisgICAqICAgIHRoYXQgYWN0dWFsbHkgZG8gdGhlIG1hcHBpbmcgam9iLiAgUGxlYXNlIGNoZWNrIHRoZSBPcGVuVHlwZQorICAgKiAgICBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gZmVhdHVyZXMgYW5kIGxvb2t1cHMuCisgICAqCisgICAqIDIuIENyZWF0ZSBnbHlwaCBJRCBzZXRzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgbG9va3VwIHNldHMuCisgICAqCisgICAqIDMuIFRoZSBnbHlwaCBzZXQgY29ycmVzcG9uZGluZyB0byBBRl9DT1ZFUkFHRV9ERUZBVUxUIGlzIGNvbXB1dGVkCisgICAqICAgIHdpdGggYWxsIGxvb2t1cHMgc3BlY2lmaWMgdG8gdGhlIE9wZW5UeXBlIHNjcmlwdCBhY3RpdmF0ZWQuICBJdAorICAgKiAgICByZWxpZXMgb24gdGhlIG9yZGVyIG9mIEFGX0RFRklORV9TVFlMRV9DTEFTUyBlbnRyaWVzIHNvIHRoYXQKKyAgICogICAgc3BlY2lhbCBjb3ZlcmFnZXMgKGxpa2UgYG9sZHN0eWxlIGZpZ3VyZXMnKSBkb24ndCBnZXQgb3ZlcndyaXR0ZW4uCisgICAqCisgICAqLworCisKKyAgLyogbG9hZCBjb3ZlcmFnZSB0YWdzICovCisjdW5kZWYgIENPVkVSQUdFCisjZGVmaW5lIENPVkVSQUdFKCBuYW1lLCBOQU1FLCBkZXNjcmlwdGlvbiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgdGFnMSwgdGFnMiwgdGFnMywgdGFnNCApICAgICAgICAgICAgIFwKKyAgICAgICAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3QgIG5hbWUgIyMgX2NvdmVyYWdlW10gPSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgSEJfVEFHKCB0YWcxLCB0YWcyLCB0YWczLCB0YWc0ICksICAgICAgICAgIFwKKyAgICAgICAgICAgIEhCX1RBR19OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfTsKKworCisjaW5jbHVkZSAiYWZjb3Zlci5oIgorCisKKyAgLyogZGVmaW5lIG1hcHBpbmcgYmV0d2VlbiBjb3ZlcmFnZSB0YWdzIGFuZCBBRl9Db3ZlcmFnZSAqLworI3VuZGVmICBDT1ZFUkFHRQorI2RlZmluZSBDT1ZFUkFHRSggbmFtZSwgTkFNRSwgZGVzY3JpcHRpb24sIFwKKyAgICAgICAgICAgICAgICAgIHRhZzEsIHRhZzIsIHRhZzMsIHRhZzQgKSBcCisgICAgICAgICAgbmFtZSAjIyBfY292ZXJhZ2UsCisKKworICBzdGF0aWMgY29uc3QgaGJfdGFnX3QqICBjb3ZlcmFnZXNbXSA9CisgIHsKKyNpbmNsdWRlICJhZmNvdmVyLmgiCisKKyAgICBOVUxMIC8qIEFGX0NPVkVSQUdFX0RFRkFVTFQgKi8KKyAgfTsKKworCisgIC8qIGxvYWQgSGFyZkJ1enogc2NyaXB0IHRhZ3MgKi8KKyN1bmRlZiAgU0NSSVBUCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc2MxLCBzYzIsIHNjMyApICBoLAorCisKKyAgc3RhdGljIGNvbnN0IGhiX3NjcmlwdF90ICBzY3JpcHRzW10gPQorICB7CisjaW5jbHVkZSAiYWZzY3JpcHQuaCIKKyAgfTsKKworCisgIEZUX0Vycm9yCisgIGFmX2dldF9jb3ZlcmFnZSggQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzLAorICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBnc3R5bGVzICkKKyAgeworICAgIGhiX2ZhY2VfdCogIGZhY2U7CisKKyAgICBoYl9zZXRfdCogIGdzdWJfbG9va3VwczsgIC8qIEdTVUIgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KKyAgICBoYl9zZXRfdCogIGdzdWJfZ2x5cGhzOyAgIC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdTVUIgbG9va3VwcyAgKi8KKyAgICBoYl9zZXRfdCogIGdwb3NfbG9va3VwczsgIC8qIEdQT1MgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KKyAgICBoYl9zZXRfdCogIGdwb3NfZ2x5cGhzOyAgIC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdQT1MgbG9va3VwcyAgKi8KKworICAgIGhiX3NjcmlwdF90ICAgICAgc2NyaXB0OworICAgIGNvbnN0IGhiX3RhZ190KiAgY292ZXJhZ2VfdGFnczsKKyAgICBoYl90YWdfdCAgICAgICAgIHNjcmlwdF90YWdzW10gPSB7IEhCX1RBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfVEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9UQUdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX1RBR19OT05FIH07CisKKyAgICBoYl9jb2RlcG9pbnRfdCAgaWR4OworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaW50ICAgICAgICAgICAgIGNvdW50OworI2VuZGlmCisKKworICAgIGlmICggIWdsb2JhbHMgfHwgIXN0eWxlX2NsYXNzIHx8ICFnc3R5bGVzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZmFjZSA9IGhiX2ZvbnRfZ2V0X2ZhY2UoIGdsb2JhbHMtPmhiX2ZvbnQgKTsKKworICAgIGdzdWJfbG9va3VwcyA9IGhiX3NldF9jcmVhdGUoKTsKKyAgICBnc3ViX2dseXBocyAgPSBoYl9zZXRfY3JlYXRlKCk7CisgICAgZ3Bvc19sb29rdXBzID0gaGJfc2V0X2NyZWF0ZSgpOworICAgIGdwb3NfZ2x5cGhzICA9IGhiX3NldF9jcmVhdGUoKTsKKworICAgIGNvdmVyYWdlX3RhZ3MgPSBjb3ZlcmFnZXNbc3R5bGVfY2xhc3MtPmNvdmVyYWdlXTsKKyAgICBzY3JpcHQgICAgICAgID0gc2NyaXB0c1tzdHlsZV9jbGFzcy0+c2NyaXB0XTsKKworICAgIC8qIENvbnZlcnQgYSBIYXJmQnV6eiBzY3JpcHQgdGFnIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgT3BlblR5cGUgKi8KKyAgICAvKiB0YWcgb3IgdGFncyAtLSBzb21lIEluZGljIHNjcmlwdHMgbGlrZSBEZXZhbmFnYXJpIGhhdmUgYW4gb2xkICovCisgICAgLyogYW5kIGEgbmV3IHNldCBvZiBmZWF0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGhiX290X3RhZ3NfZnJvbV9zY3JpcHQoIHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2NyaXB0X3RhZ3NbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjcmlwdF90YWdzWzFdICk7CisKKyAgICAvKiBgaGJfb3RfdGFnc19mcm9tX3NjcmlwdCcgdXN1YWxseSByZXR1cm5zIEhCX09UX1RBR19ERUZBVUxUX1NDUklQVCAqLworICAgIC8qIGFzIHRoZSBzZWNvbmQgdGFnLiAgV2UgY2hhbmdlIHRoYXQgdG8gSEJfVEFHX05PTkUgZXhjZXB0IGZvciB0aGUgICovCisgICAgLyogZGVmYXVsdCBzY3JpcHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHN0eWxlX2NsYXNzLT5zY3JpcHQgPT0gZ2xvYmFscy0+bW9kdWxlLT5kZWZhdWx0X3NjcmlwdCAmJgorICAgICAgICAgc3R5bGVfY2xhc3MtPmNvdmVyYWdlID09IEFGX0NPVkVSQUdFX0RFRkFVTFQgICAgICAgICAgICkKKyAgICB7CisgICAgICBpZiAoIHNjcmlwdF90YWdzWzBdID09IEhCX1RBR19OT05FICkKKyAgICAgICAgc2NyaXB0X3RhZ3NbMF0gPSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQ7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmICggc2NyaXB0X3RhZ3NbMV0gPT0gSEJfVEFHX05PTkUgKQorICAgICAgICAgIHNjcmlwdF90YWdzWzFdID0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUOworICAgICAgICBlbHNlIGlmICggc2NyaXB0X3RhZ3NbMV0gIT0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUICkKKyAgICAgICAgICBzY3JpcHRfdGFnc1syXSA9IEhCX09UX1RBR19ERUZBVUxUX1NDUklQVDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggc2NyaXB0X3RhZ3NbMV0gPT0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUICkKKyAgICAgICAgc2NyaXB0X3RhZ3NbMV0gPSBIQl9UQUdfTk9ORTsKKyAgICB9CisKKyAgICBoYl9vdF9sYXlvdXRfY29sbGVjdF9sb29rdXBzKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX09UX1RBR19HU1VCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF90YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY292ZXJhZ2VfdGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3ViX2xvb2t1cHMgKTsKKworICAgIGlmICggaGJfc2V0X2lzX2VtcHR5KCBnc3ViX2xvb2t1cHMgKSApCisgICAgICBnb3RvIEV4aXQ7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIGhiX290X2xheW91dF9jb2xsZWN0X2xvb2t1cHMoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfT1RfVEFHX0dQT1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X3RhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZlcmFnZV90YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb3NfbG9va3VwcyApOworCisgICAgRlRfVFJBQ0U0KCggIkdTVUIgbG9va3VwcyAoc3R5bGUgYCVzJyk6XG4iCisgICAgICAgICAgICAgICAgIiAiLAorICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW3N0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIGNvdW50ID0gMDsKKyNlbmRpZgorCisgICAgZm9yICggaWR4ID0gSEJfU0VUX1ZBTFVFX0lOVkFMSUQ7IGhiX3NldF9uZXh0KCBnc3ViX2xvb2t1cHMsICZpZHggKTsgKQorICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIGlkeCApKTsKKyAgICAgIGNvdW50Kys7CisjZW5kaWYKKworICAgICAgLyogZ2V0IG91dHB1dCBjb3ZlcmFnZSBvZiBHU1VCIGZlYXR1cmUgKi8KKyAgICAgIGhiX290X2xheW91dF9sb29rdXBfY29sbGVjdF9nbHlwaHMoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9PVF9UQUdfR1NVQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWJfZ2x5cGhzICk7CisgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBpZiAoICFjb3VudCApCisgICAgICBGVF9UUkFDRTQoKCAiIChub25lKSIgKSk7CisgICAgRlRfVFJBQ0U0KCggIlxuXG4iICkpOworI2VuZGlmCisKKyAgICBGVF9UUkFDRTQoKCAiR1BPUyBsb29rdXBzIChzdHlsZSBgJXMnKTpcbiIKKyAgICAgICAgICAgICAgICAiICIsCisgICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgY291bnQgPSAwOworI2VuZGlmCisKKyAgICBmb3IgKCBpZHggPSBIQl9TRVRfVkFMVUVfSU5WQUxJRDsgaGJfc2V0X25leHQoIGdwb3NfbG9va3VwcywgJmlkeCApOyApCisgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgaWR4ICkpOworICAgICAgY291bnQrKzsKKyNlbmRpZgorCisgICAgICAvKiBnZXQgaW5wdXQgY292ZXJhZ2Ugb2YgR1BPUyBmZWF0dXJlICovCisgICAgICBoYl9vdF9sYXlvdXRfbG9va3VwX2NvbGxlY3RfZ2x5cGhzKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfT1RfVEFHX0dQT1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bvc19nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCAhY291bnQgKQorICAgICAgRlRfVFJBQ0U0KCggIiAobm9uZSkiICkpOworICAgIEZUX1RSQUNFNCgoICJcblxuIiApKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBXZSBub3cgY2hlY2sgd2hldGhlciB3ZSBjYW4gY29uc3RydWN0IGJsdWUgem9uZXMsIHVzaW5nIGdseXBocworICAgICAqIGNvdmVyZWQgYnkgdGhlIGZlYXR1cmUgb25seS4gIEluIGNhc2UgdGhlcmUgaXMgbm90IGEgc2luZ2xlIHpvbmUKKyAgICAgKiAodGhpcyBpcywgbm90IGEgc2luZ2xlIGNoYXJhY3RlciBpcyBjb3ZlcmVkKSwgd2Ugc2tpcCB0aGlzIGNvdmVyYWdlLgorICAgICAqCisgICAgICovCisgICAgaWYgKCBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgIT0gQUZfQ09WRVJBR0VfREVGQVVMVCApCisgICAgeworICAgICAgQUZfQmx1ZV9TdHJpbmdzZXQgICAgICAgICBic3MgPSBzdHlsZV9jbGFzcy0+Ymx1ZV9zdHJpbmdzZXQ7CisgICAgICBjb25zdCBBRl9CbHVlX1N0cmluZ1JlYyogIGJzICA9ICZhZl9ibHVlX3N0cmluZ3NldHNbYnNzXTsKKworICAgICAgRlRfQm9vbCAgZm91bmQgPSAwOworCisKKyAgICAgIGZvciAoIDsgYnMtPnN0cmluZyAhPSBBRl9CTFVFX1NUUklOR19NQVg7IGJzKysgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcCA9ICZhZl9ibHVlX3N0cmluZ3NbYnMtPnN0cmluZ107CisKKworICAgICAgICB3aGlsZSAoICpwICkKKyAgICAgICAgeworICAgICAgICAgIGhiX2NvZGVwb2ludF90ICBjaDsKKworCisgICAgICAgICAgR0VUX1VURjhfQ0hBUiggY2gsIHAgKTsKKworICAgICAgICAgIGZvciAoIGlkeCA9IEhCX1NFVF9WQUxVRV9JTlZBTElEOyBoYl9zZXRfbmV4dCggZ3N1Yl9sb29rdXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlkeCApOyApCisgICAgICAgICAgeworICAgICAgICAgICAgaGJfY29kZXBvaW50X3QgIGdpZHggPSBGVF9HZXRfQ2hhcl9JbmRleCggZ2xvYmFscy0+ZmFjZSwgY2ggKTsKKworCisgICAgICAgICAgICBpZiAoIGhiX290X2xheW91dF9sb29rdXBfd291bGRfc3Vic3RpdHV0ZSggZmFjZSwgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnaWR4LCAxLCAxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICFmb3VuZCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNCgoICIgIG5vIGJsdWUgY2hhcmFjdGVycyBmb3VuZDsgc3R5bGUgc2tpcHBlZFxuIiApKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogVmFyaW91cyBPcGVuVHlwZSBmZWF0dXJlcyBtaWdodCB1c2UgdGhlIHNhbWUgZ2x5cGhzIGF0IGRpZmZlcmVudAorICAgICAqIHZlcnRpY2FsIHBvc2l0aW9uczsgZm9yIGV4YW1wbGUsIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgZ2x5cGhzCisgICAgICogY291bGQgYmUgdGhlIHNhbWUuICBIb3dldmVyLCB0aGUgYXV0by1oaW50ZXIgaXMgY29tcGxldGVseQorICAgICAqIGFnbm9zdGljIG9mIE9wZW5UeXBlIGZlYXR1cmVzIGFmdGVyIHRoZSBmZWF0dXJlIGFuYWx5c2lzIGhhcyBiZWVuCisgICAgICogY29tcGxldGVkOiBUaGUgZW5naW5lIHRoZW4gc2ltcGx5IHJlY2VpdmVzIGEgZ2x5cGggaW5kZXggYW5kIHJldHVybnMgYQorICAgICAqIGhpbnRlZCBhbmQgdXN1YWxseSByZW5kZXJlZCBnbHlwaC4KKyAgICAgKgorICAgICAqIENvbnNpZGVyIHRoZSBzdXBlcnNjcmlwdCBmZWF0dXJlIG9mIGZvbnQgYHBhbGEudHRmJzogU29tZSBvZiB0aGUKKyAgICAgKiBnbHlwaHMgYXJlIGByZWFsJywgdGhpcyBpcywgdGhleSBoYXZlIGEgemVybyB2ZXJ0aWNhbCBvZmZzZXQsIGJ1dAorICAgICAqIG1vc3Qgb2YgdGhlbSBhcmUgc21hbGwgY2FwcyBnbHlwaHMgc2hpZnRlZCB1cCB0byB0aGUgc3VwZXJzY3JpcHQKKyAgICAgKiBwb3NpdGlvbiAodGhpcyBpcywgdGhlIGBzdXBzJyBmZWF0dXJlIGlzIHByZXNlbnQgaW4gYm90aCB0aGUgR1NVQiBhbmQKKyAgICAgKiBHUE9TIHRhYmxlcykuICBUaGUgY29kZSBmb3IgYmx1ZSB6b25lcyBjb21wdXRhdGlvbiBhY3R1YWxseSB1c2VzIGEKKyAgICAgKiBmZWF0dXJlJ3MgeSBvZmZzZXQgc28gdGhhdCB0aGUgYHJlYWwnIGdseXBocyBnZXQgY29ycmVjdCBoaW50cy4gIEJ1dAorICAgICAqIGxhdGVyIG9uIGl0IGlzIGltcG9zc2libGUgdG8gZGVjaWRlIHdoZXRoZXIgYSBnbHlwaCBpbmRleCBiZWxvbmdzIHRvLAorICAgICAqIHNheSwgdGhlIHNtYWxsIGNhcHMgb3Igc3VwZXJzY3JpcHQgZmVhdHVyZS4KKyAgICAgKgorICAgICAqIEZvciB0aGlzIHJlYXNvbiwgd2UgZG9uJ3QgYXNzaWduIGEgc3R5bGUgdG8gYSBnbHlwaCBpZiB0aGUgY3VycmVudAorICAgICAqIGZlYXR1cmUgY292ZXJzIHRoZSBnbHlwaCBpbiBib3RoIHRoZSBHU1VCIGFuZCB0aGUgR1BPUyB0YWJsZXMuICBUaGlzCisgICAgICogaXMgcXVpdGUgYSBicm9hZCBjb25kaXRpb24sIGFzc3VtaW5nIHRoYXQKKyAgICAgKgorICAgICAqICAgKGEpIGdseXBocyB0aGF0IGdldCB1c2VkIGluIG11bHRpcGxlIGZlYXR1cmVzIGFyZSBwcmVzZW50IGluIGEKKyAgICAgKiAgICAgICBmZWF0dXJlIHdpdGhvdXQgdmVydGljYWwgc2hpZnQsCisgICAgICoKKyAgICAgKiBhbmQKKyAgICAgKgorICAgICAqICAgKGIpIGEgZmVhdHVyZSdzIEdQT1MgZGF0YSByZWFsbHkgbW92ZXMgdGhlIGdseXBoIHZlcnRpY2FsbHkuCisgICAgICoKKyAgICAgKiBOb3QgZnVsZmlsbGluZyBjb25kaXRpb24gKGEpIG1ha2VzIGEgZm9udCBsYXJnZXI7IGl0IHdvdWxkIGFsc28KKyAgICAgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBnbHlwaHMgdGhhdCBjb3VsZCBiZSBhZGRyZXNzZWQgZGlyZWN0bHkgd2l0aG91dAorICAgICAqIHVzaW5nIE9wZW5UeXBlIGZlYXR1cmVzLCBzbyB0aGlzIGFzc3VtcHRpb24gaXMgcmF0aGVyIHN0cm9uZy4KKyAgICAgKgorICAgICAqIENvbmRpdGlvbiAoYikgaXMgbXVjaCB3ZWFrZXIsIGFuZCB0aGVyZSBtaWdodCBiZSBnbHlwaHMgd2hpY2ggZ2V0CisgICAgICogbWlzc2VkLiAgSG93ZXZlciwgdGhlIE9wZW5UeXBlIGZlYXR1cmVzIHdlIGFyZSBnb2luZyB0byBoYW5kbGUgYXJlCisgICAgICogcHJpbWFyaWx5IGxvY2F0ZWQgaW4gR1NVQiwgYW5kIEhhcmZCdXp6IGRvZXNuJ3QgcHJvdmlkZSBhbiBBUEkgdG8KKyAgICAgKiBkaXJlY3RseSBnZXQgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBHUE9TIHRhYmxlLiAgQQorICAgICAqIHBvc3NpYmxlIHNvbHV0aW9uIG1pZ2h0IGJlIHRvIGRpcmVjdGx5IHBhcnNlIHRoZSBHUE9TIHRhYmxlIHRvIGZpbmQKKyAgICAgKiBvdXQgd2hldGhlciBhIGdseXBoIGdldHMgc2hpZnRlZCB2ZXJ0aWNhbGx5LCBidXQgdGhpcyBpcyBzb21ldGhpbmcgSQorICAgICAqIHdvdWxkIGxpa2UgdG8gYXZvaWQgaWYgbm90IHJlYWxseSBuZWNlc3NhcnkuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgZm9sbG93IHRoaXMgbG9naWMgZm9yIHRoZSBkZWZhdWx0IGNvdmVyYWdlLgorICAgICAqIENvbXBsZXggc2NyaXB0cyBsaWtlIERldmFuYWdhcmkgaGF2ZSBtYW5kYXRvcnkgR1BPUyBmZWF0dXJlcyB0bworICAgICAqIHBvc2l0aW9uIG1hbnkgZ2x5cGggZWxlbWVudHMsIHVzaW5nIG1hcmstdG8tYmFzZSBvciBtYXJrLXRvLWxpZ2F0dXJlCisgICAgICogdGFibGVzOyB0aGUgbnVtYmVyIG9mIGdseXBocyBtaXNzZWQgZHVlIHRvIGNvbmRpdGlvbiAoYikgd291bGQgYmUgZmFyCisgICAgICogdG9vIGxhcmdlLgorICAgICAqCisgICAgICovCisgICAgaWYgKCBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgIT0gQUZfQ09WRVJBR0VfREVGQVVMVCApCisgICAgICBoYl9zZXRfc3VidHJhY3QoIGdzdWJfZ2x5cGhzLCBncG9zX2dseXBocyApOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBGVF9UUkFDRTQoKCAiICBnbHlwaHMgd2l0aG91dCBHUE9TIGRhdGEgKGAqJyBtZWFucyBhbHJlYWR5IGFzc2lnbmVkKSIgKSk7CisgICAgY291bnQgPSAwOworI2VuZGlmCisKKyAgICBmb3IgKCBpZHggPSBIQl9TRVRfVkFMVUVfSU5WQUxJRDsgaGJfc2V0X25leHQoIGdzdWJfZ2x5cGhzLCAmaWR4ICk7ICkKKyAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIGlmICggISggY291bnQgJSAxMCApICkKKyAgICAgICAgRlRfVFJBQ0U0KCggIlxuIgorICAgICAgICAgICAgICAgICAgICAiICAgIiApKTsKKworICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIGlkeCApKTsKKyAgICAgIGNvdW50Kys7CisjZW5kaWYKKworICAgICAgLyogZ2x5cGggaW5kaWNlcyByZXR1cm5lZCBieSBgaGJfb3RfbGF5b3V0X2xvb2t1cF9jb2xsZWN0X2dseXBocycgKi8KKyAgICAgIC8qIGNhbiBiZSBhcmJpdHJhcnk6IHNvbWUgZm9udHMgdXNlIGZha2UgaW5kaWNlcyBmb3IgcHJvY2Vzc2luZyAgICovCisgICAgICAvKiBpbnRlcm5hbCB0byBHU1VCIG9yIEdQT1MsIHdoaWNoIGlzIGZ1bGx5IHZhbGlkICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBpZHggPj0gKGhiX2NvZGVwb2ludF90KWdsb2JhbHMtPmdseXBoX2NvdW50ICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggZ3N0eWxlc1tpZHhdID09IEFGX1NUWUxFX1VOQVNTSUdORUQgKQorICAgICAgICBnc3R5bGVzW2lkeF0gPSAoRlRfQnl0ZSlzdHlsZV9jbGFzcy0+c3R5bGU7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIGVsc2UKKyAgICAgICAgRlRfVFJBQ0U0KCggIioiICkpOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBpZiAoICFjb3VudCApCisgICAgICBGVF9UUkFDRTQoKCAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIChub25lKSIgKSk7CisgICAgRlRfVFJBQ0U0KCggIlxuXG4iICkpOworI2VuZGlmCisKKyAgRXhpdDoKKyAgICBoYl9zZXRfZGVzdHJveSggZ3N1Yl9sb29rdXBzICk7CisgICAgaGJfc2V0X2Rlc3Ryb3koIGdzdWJfZ2x5cGhzICApOworICAgIGhiX3NldF9kZXN0cm95KCBncG9zX2xvb2t1cHMgKTsKKyAgICBoYl9zZXRfZGVzdHJveSggZ3Bvc19nbHlwaHMgICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBjb25zdHJ1Y3QgSGFyZkJ1enogZmVhdHVyZXMgKi8KKyN1bmRlZiAgQ09WRVJBR0UKKyNkZWZpbmUgQ09WRVJBR0UoIG5hbWUsIE5BTUUsIGRlc2NyaXB0aW9uLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB0YWcxLCB0YWcyLCB0YWczLCB0YWc0ICkgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0YXRpYyBjb25zdCBoYl9mZWF0dXJlX3QgIG5hbWUgIyMgX2ZlYXR1cmVbXSA9IFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBIQl9UQUcoIHRhZzEsIHRhZzIsIHRhZzMsIHRhZzQgKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgMSwgMCwgKHVuc2lnbmVkIGludCktMSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH07CisKKworI2luY2x1ZGUgImFmY292ZXIuaCIKKworCisgIC8qIGRlZmluZSBtYXBwaW5nIGJldHdlZW4gSGFyZkJ1enogZmVhdHVyZXMgYW5kIEFGX0NvdmVyYWdlICovCisjdW5kZWYgIENPVkVSQUdFCisjZGVmaW5lIENPVkVSQUdFKCBuYW1lLCBOQU1FLCBkZXNjcmlwdGlvbiwgXAorICAgICAgICAgICAgICAgICAgdGFnMSwgdGFnMiwgdGFnMywgdGFnNCApIFwKKyAgICAgICAgICBuYW1lICMjIF9mZWF0dXJlLAorCisKKyAgc3RhdGljIGNvbnN0IGhiX2ZlYXR1cmVfdCogIGZlYXR1cmVzW10gPQorICB7CisjaW5jbHVkZSAiYWZjb3Zlci5oIgorCisgICAgTlVMTCAvKiBBRl9DT1ZFUkFHRV9ERUZBVUxUICovCisgIH07CisKKworICBGVF9FcnJvcgorICBhZl9nZXRfY2hhcl9pbmRleCggQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAqY29kZXBvaW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICp5X29mZnNldCApCisgIHsKKyAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzczsKKworICAgIGNvbnN0IGhiX2ZlYXR1cmVfdCogIGZlYXR1cmU7CisKKyAgICBGVF9VTG9uZyAgaW5faWR4LCBvdXRfaWR4OworCisKKyAgICBpZiAoICFtZXRyaWNzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaW5faWR4ID0gRlRfR2V0X0NoYXJfSW5kZXgoIG1ldHJpY3MtPmdsb2JhbHMtPmZhY2UsIGNoYXJjb2RlICk7CisKKyAgICBzdHlsZV9jbGFzcyA9IG1ldHJpY3MtPnN0eWxlX2NsYXNzOworCisgICAgZmVhdHVyZSA9IGZlYXR1cmVzW3N0eWxlX2NsYXNzLT5jb3ZlcmFnZV07CisKKyAgICBpZiAoIGZlYXR1cmUgKQorICAgIHsKKyAgICAgIEZUX0ludCAgdXBlbSA9IChGVF9JbnQpbWV0cmljcy0+Z2xvYmFscy0+ZmFjZS0+dW5pdHNfcGVyX0VNOworCisgICAgICBoYl9mb250X3QqICAgIGZvbnQgPSBtZXRyaWNzLT5nbG9iYWxzLT5oYl9mb250OworICAgICAgaGJfYnVmZmVyX3QqICBidWYgID0gaGJfYnVmZmVyX2NyZWF0ZSgpOworCisgICAgICB1aW50MzJfdCAgYyA9ICh1aW50MzJfdCljaGFyY29kZTsKKworICAgICAgaGJfZ2x5cGhfaW5mb190KiAgICAgIGdpbmZvOworICAgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogIGdwb3M7CisgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgZ2NvdW50OworCisKKyAgICAgIC8qIHdlIHNoYXBlIGF0IGEgc2l6ZSBvZiB1bml0cyBwZXIgRU07IHRoaXMgbWVhbnMgZm9udCB1bml0cyAqLworICAgICAgaGJfZm9udF9zZXRfc2NhbGUoIGZvbnQsIHVwZW0sIHVwZW0gKTsKKworICAgICAgLyogWFhYOiBpcyB0aGlzIHN1ZmZpY2llbnQgZm9yIGEgc2luZ2xlIGNoYXJhY3RlciBvZiBhbnkgc2NyaXB0PyAqLworICAgICAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24oIGJ1ZiwgSEJfRElSRUNUSU9OX0xUUiApOworICAgICAgaGJfYnVmZmVyX3NldF9zY3JpcHQoIGJ1Ziwgc2NyaXB0c1tzdHlsZV9jbGFzcy0+c2NyaXB0XSApOworCisgICAgICAvKiB3ZSBhZGQgb25lIGNoYXJhY3RlciB0byBgYnVmJyAuLi4gKi8KKyAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMzIoIGJ1ZiwgJmMsIDEsIDAsIDEgKTsKKworICAgICAgLyogLi4uIGFuZCBhcHBseSBvbmUgZmVhdHVyZSAqLworICAgICAgaGJfc2hhcGUoIGZvbnQsIGJ1ZiwgZmVhdHVyZSwgMSApOworCisgICAgICBnaW5mbyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoIGJ1ZiwgJmdjb3VudCApOworICAgICAgZ3BvcyAgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyggYnVmLCAmZ2NvdW50ICk7CisKKyAgICAgIG91dF9pZHggPSBnaW5mb1swXS5jb2RlcG9pbnQ7CisKKyAgICAgIC8qIGdldHRpbmcgdGhlIHNhbWUgaW5kZXggaW5kaWNhdGVzIG5vIHN1YnN0aXR1dGlvbiwgICAgICAgICAqLworICAgICAgLyogd2hpY2ggbWVhbnMgdGhhdCB0aGUgZ2x5cGggaXNuJ3QgYXZhaWxhYmxlIGluIHRoZSBmZWF0dXJlICovCisgICAgICBpZiAoIGluX2lkeCA9PSBvdXRfaWR4ICkKKyAgICAgIHsKKyAgICAgICAgKmNvZGVwb2ludCA9IDA7CisgICAgICAgICp5X29mZnNldCAgPSAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAqY29kZXBvaW50ID0gb3V0X2lkeDsKKyAgICAgICAgKnlfb2Zmc2V0ICA9IGdwb3NbMF0ueV9vZmZzZXQ7CisgICAgICB9CisKKyAgICAgIGhiX2J1ZmZlcl9kZXN0cm95KCBidWYgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBpZiAoIGdjb3VudCA+IDEgKQorICAgICAgICBGVF9UUkFDRTEoKCAiYWZfZ2V0X2NoYXJfaW5kZXg6IgorICAgICAgICAgICAgICAgICAgICAiIGlucHV0IGNoYXJhY3RlciBtYXBwZWQgdG8gbXVsdGlwbGUgZ2x5cGhzXG4iICkpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAqY29kZXBvaW50ID0gaW5faWR4OworICAgICAgKnlfb2Zmc2V0ICA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyNlbHNlIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiAqLworCisKKyAgRlRfRXJyb3IKKyAgYWZfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGdzdHlsZXMgKQorICB7CisgICAgRlRfVU5VU0VEKCBnbG9iYWxzICk7CisgICAgRlRfVU5VU0VEKCBzdHlsZV9jbGFzcyApOworICAgIEZUX1VOVVNFRCggZ3N0eWxlcyApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgYWZfZ2V0X2NoYXJfaW5kZXgoIEFGX1N0eWxlTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmNvZGVwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAqeV9vZmZzZXQgKQorICB7CisgICAgRlRfRmFjZSAgZmFjZTsKKworCisgICAgaWYgKCAhbWV0cmljcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGZhY2UgPSBtZXRyaWNzLT5nbG9iYWxzLT5mYWNlOworCisgICAgKmNvZGVwb2ludCA9IEZUX0dldF9DaGFyX0luZGV4KCBmYWNlLCBjaGFyY29kZSApOworICAgICp5X29mZnNldCAgPSAwOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlogKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9oYnNoaW0uaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9oYnNoaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjM2Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L2hic2hpbS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGhic2hpbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoc3BlY2lmaWNhdGlvbikuICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0hCU0hJTV9IX18KKyNkZWZpbmUgX19IQlNISU1fSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisKKyNpbmNsdWRlIDxoYi5oPgorI2luY2x1ZGUgPGhiLW90Lmg+CisjaW5jbHVkZSA8aGItZnQuaD4KKworI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgRlRfRXJyb3IKKyAgYWZfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGdzdHlsZXMgKTsKKworICBGVF9FcnJvcgorICBhZl9nZXRfY2hhcl9pbmRleCggQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAqY29kZXBvaW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICp5X29mZnNldCApOworCisgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19IQlNISU1fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L21vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzIxNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9hdXRvZml0L21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgYXV0by1maXR0ZXIgbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAyMDAzLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gQVVUT0ZJVF9NT0RVTEUKKworZGVmaW5lIEFVVE9GSVRfTU9EVUxFCiskKE9QRU5fRFJJVkVSKSBGVF9Nb2R1bGVfQ2xhc3MsIGF1dG9maXRfbW9kdWxlX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUilhdXRvZml0ICAgJChFQ0hPX0RSSVZFUl9ERVNDKWF1dG9tYXRpYyBoaW50aW5nIG1vZHVsZSQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL2F1dG9maXQvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmOTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYXV0b2ZpdC9ydWxlcy5tawpAQCAtMCwwICsxLDg5IEBACisjCisjIEZyZWVUeXBlIDIgYXV0by1maXR0ZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAyMDAzLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgQVVUT0YgZHJpdmVyIGRpcmVjdG9yeQorIworQVVUT0ZfRElSIDo9ICQoU1JDX0RJUikvYXV0b2ZpdAorCisKKyMgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZSBkcml2ZXIKKyMKK0FVVE9GX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChBVVRPRl9ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBBVVRPRiBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK0FVVE9GX0RSVl9TUkMgOj0gJChBVVRPRl9ESVIpL2FmYW5nbGVzLmMgXAorICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZibHVlLmMgICBcCisgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZmNqay5jICAgIFwKKyAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmZHVtbXkuYyAgXAorICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZnbG9iYWwuYyBcCisgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZmhpbnRzLmMgIFwKKyAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmaW5kaWMuYyAgXAorICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZsYXRpbi5jICBcCisgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZmxvYWRlci5jIFwKKyAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmbW9kdWxlLmMgXAorICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZwaWMuYyAgICBcCisgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZnJhbmdlcy5jIFwKKyAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2Fmd2FycC5jICAgXAorICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvaGJzaGltLmMKKworIyBBVVRPRiBkcml2ZXIgaGVhZGVycworIworQVVUT0ZfRFJWX0ggOj0gJChBVVRPRl9EUlZfU1JDOiVjPSVoKSAgXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmY292ZXIuaCAgXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmZXJyb3JzLmggXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2Fmc2NyaXB0LmggXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2Fmc3R5bGVzLmggXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmdHlwZXMuaCAgXAorICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2Fmd3J0c3lzLmgKKworCisjIEFVVE9GIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBBVVRPRl9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMuCisjICAgQVVUT0ZfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcy4KKyMKK0FVVE9GX0RSVl9PQkpfTSA6PSAkKEFVVE9GX0RSVl9TUkM6JChBVVRPRl9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitBVVRPRl9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9hdXRvZml0LiRPCisKKyMgQVVUT0YgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK0FVVE9GX0RSVl9TUkNfUyA6PSAkKEFVVE9GX0RJUikvYXV0b2ZpdC5jCisKKworIyBBVVRPRiBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKEFVVE9GX0RSVl9PQkpfUyk6ICQoQVVUT0ZfRFJWX1NSQ19TKSAkKEFVVE9GX0RSVl9TUkMpIFwKKyAgICAgICAgICAgICAgICAgICAkKEZSRUVUWVBFX0gpICQoQVVUT0ZfRFJWX0gpCisJJChBVVRPRl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChBVVRPRl9EUlZfU1JDX1MpKQorCisKKyMgQVVUT0YgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKEFVVE9GX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChBVVRPRl9EUlZfSCkKKwkkKEFVVE9GX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChBVVRPRl9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoQVVUT0ZfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODExNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvSmFtZmlsZQpAQCAtMCwwICsxLDYwIEBACisjIEZyZWVUeXBlIDIgc3JjL2Jhc2UgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGJhc2UgOworCisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gZnRhZHZhbmMgZnRjYWxjICAgZnRkYmdtZW0gZnRnbG9hZHIKKyAgICAgICAgICAgICAgIGZ0b2JqcyAgIGZ0b3V0bG4gIGZ0cmZvcmsgIGZ0c25hbWVzCisgICAgICAgICAgICAgICBmdHN0cmVhbSBmdHRyaWdvbiBmdHV0aWwKKyAgICAgICAgICAgICAgIGJhc2VwaWMgIGZ0cGljCisgICAgICAgICAgICAgICA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSBmdGJhc2UgOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIEFkZCB0aGUgb3B0aW9uYWwvcmVwbGFjZWFibGUgZmlsZXMuCisjCit7CisgIGxvY2FsICBfc291cmNlcyA9IGJib3ggICBiZGYgICAgYml0bWFwIGRlYnVnICBnYXNwCisgICAgICAgICAgICAgICAgICAgIGdseXBoICBneHZhbCAgaW5pdCAgIGxjZGZpbCBtbQorICAgICAgICAgICAgICAgICAgICBvdHZhbCAgcGZyICAgIHN0cm9rZSBzeW50aCAgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHR5cGUxICB3aW5mbnQgeGY4NiAgIHBhdGVudAorICAgICAgICAgICAgICAgICAgICA7CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0JChfc291cmNlcykuYyA7Cit9CisKKyMgQWRkIE1hY2ludG9zaC1zcGVjaWZpYyBmaWxlIHRvIHRoZSBsaWJyYXJ5IHdoZW4gbmVjZXNzYXJ5LgorIworaWYgJChNQUMpCit7CisgIExpYnJhcnkgICQoRlQyX0xJQikgOiBmdG1hYy5jIDsKK30KK2Vsc2UgaWYgJChPUykgPSBNQUNPU1gKK3sKKyAgaWYgJChGVDJfTVVMVEkpCisgIHsKKyAgICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogZnRtYWMuYyA7CisgIH0KK30KKworIyBlbmQgb2Ygc3JjL2Jhc2UgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Jhc2VwaWMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9iYXNlcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1MGVkOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9iYXNlcGljLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGJhc2VwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYmFzZS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlICJiYXNlcGljLmgiCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBmdGdseXBoLmMgKi8KKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX2Z0X291dGxpbmVfZ2x5cGhfY2xhc3MoIEZUX0dseXBoX0NsYXNzKiAgY2xhenogKTsKKworICB2b2lkCisgIEZUX0luaXRfQ2xhc3NfZnRfYml0bWFwX2dseXBoX2NsYXNzKCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6ICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9uIGZyb20gZnRyZm9yay5jICovCisgIC8qIChub3QgbW9kdWxhcml6ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdm9pZAorICBGVF9Jbml0X1RhYmxlX2Z0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUoIGZ0X3JhY2Nlc3NfZ3Vlc3NfcmVjKiAgcmVjb3JkICk7CisjZW5kaWYKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIGZ0aW5pdC5jICovCisgIEZUX0Vycm9yCisgIGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyAgdm9pZAorICBmdF9kZXN0cm95X2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworCisgIHZvaWQKKyAgZnRfYmFzZV9waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBpZiAoIHBpY19jb250YWluZXItPmJhc2UgKQorICAgIHsKKyAgICAgIC8qIGRlc3Ryb3kgZGVmYXVsdCBtb2R1bGUgY2xhc3NlcyAgICAgICAgICAgICovCisgICAgICAvKiAoaW4gY2FzZSBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIHdhcyB1c2VkKSAqLworICAgICAgZnRfZGVzdHJveV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKCBsaWJyYXJ5ICk7CisKKyAgICAgIEZUX0ZSRUUoIHBpY19jb250YWluZXItPmJhc2UgKTsKKyAgICAgIHBpY19jb250YWluZXItPmJhc2UgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfYmFzZV9waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIEJhc2VQSUMqICAgICAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KKyAgICBpZiAoIEZUX0FMTE9DKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOworICAgIHBpY19jb250YWluZXItPmJhc2UgPSBjb250YWluZXI7CisKKyAgICAvKiBpbml0aWFsaXplIGRlZmF1bHQgbW9kdWxlcyBsaXN0IGFuZCBwb2ludGVycyAqLworICAgIGVycm9yID0gZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIGxpYnJhcnkgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGluaXRpYWxpemUgcG9pbnRlciB0YWJsZSAtICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHRoaXMgaXMgaG93IHRoZSBtb2R1bGUgdXN1YWxseSBleHBlY3RzIHRoaXMgZGF0YSAqLworICAgIEZUX0luaXRfQ2xhc3NfZnRfb3V0bGluZV9nbHlwaF9jbGFzcygKKyAgICAgICZjb250YWluZXItPmZ0X291dGxpbmVfZ2x5cGhfY2xhc3MgKTsKKyAgICBGVF9Jbml0X0NsYXNzX2Z0X2JpdG1hcF9nbHlwaF9jbGFzcygKKyAgICAgICZjb250YWluZXItPmZ0X2JpdG1hcF9nbHlwaF9jbGFzcyApOworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCisgICAgRlRfSW5pdF9UYWJsZV9mdF9yYWNjZXNzX2d1ZXNzX3RhYmxlKAorICAgICAgKGZ0X3JhY2Nlc3NfZ3Vlc3NfcmVjKikmY29udGFpbmVyLT5mdF9yYWNjZXNzX2d1ZXNzX3RhYmxlICk7CisjZW5kaWYKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgICAgZnRfYmFzZV9waWNfZnJlZSggbGlicmFyeSApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9iYXNlcGljLmggYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvYmFzZXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWNmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvYmFzZXBpYy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGJhc2VwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYmFzZS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0JBU0VQSUNfSF9fCisjZGVmaW5lIF9fQkFTRVBJQ19IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICAmZnRfb3V0bGluZV9nbHlwaF9jbGFzcworI2RlZmluZSBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VUICAgJmZ0X2JpdG1hcF9nbHlwaF9jbGFzcworI2RlZmluZSBGVF9ERUZBVUxUX01PRFVMRVNfR0VUICAgICAgZnRfZGVmYXVsdF9tb2R1bGVzCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLCisjZGVmaW5lIEZUX1JBQ0NFU1NfR1VFU1NfVEFCTEVfR0VUICBmdF9yYWNjZXNzX2d1ZXNzX3RhYmxlCisjZW5kaWYKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworI2luY2x1ZGUgRlRfR0xZUEhfSAorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSworI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAorI2VuZGlmCisKKworICB0eXBlZGVmIHN0cnVjdCAgQmFzZVBJQ18KKyAgeworICAgIEZUX01vZHVsZV9DbGFzcyoqICBkZWZhdWx0X21vZHVsZV9jbGFzc2VzOworICAgIEZUX0dseXBoX0NsYXNzICAgICBmdF9vdXRsaW5lX2dseXBoX2NsYXNzOworICAgIEZUX0dseXBoX0NsYXNzICAgICBmdF9iaXRtYXBfZ2x5cGhfY2xhc3M7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLCisgICAgZnRfcmFjY2Vzc19ndWVzc19yZWMgIGZ0X3JhY2Nlc3NfZ3Vlc3NfdGFibGVbRlRfUkFDQ0VTU19OX1JVTEVTXTsKKyNlbmRpZgorCisgIH0gQmFzZVBJQzsKKworCisjZGVmaW5lIEdFVF9QSUMoIGxpYiApICAoIChCYXNlUElDKikoIChsaWIpLT5waWNfY29udGFpbmVyLmJhc2UgKSApCisKKyNkZWZpbmUgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggJkdFVF9QSUMoIGxpYnJhcnkgKS0+ZnRfb3V0bGluZV9nbHlwaF9jbGFzcyApCisjZGVmaW5lIEZUX0JJVE1BUF9HTFlQSF9DTEFTU19HRVQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAmR0VUX1BJQyggbGlicmFyeSApLT5mdF9iaXRtYXBfZ2x5cGhfY2xhc3MgKQorI2RlZmluZSBGVF9ERUZBVUxUX01PRFVMRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5kZWZhdWx0X21vZHVsZV9jbGFzc2VzICkKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksKKyNkZWZpbmUgRlRfUkFDQ0VTU19HVUVTU19UQUJMRV9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+ZnRfcmFjY2Vzc19ndWVzc190YWJsZSApCisjZW5kaWYKKworCisgIC8qIHNlZSBiYXNlcGljLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiAqLworICB2b2lkCisgIGZ0X2Jhc2VfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBmdF9iYXNlX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQkFTRVBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGFkdmFuYy5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0YWR2YW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyOTA4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGFkdmFuYy5jCkBAIC0wLDAgKzEsMTY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGFkdmFuYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUXVpY2sgY29tcHV0YXRpb24gb2YgYWR2YW5jZSB3aWR0aHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9BRFZBTkNFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBfZnRfZmFjZV9zY2FsZV9hZHZhbmNlcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBhZHZhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzICkKKyAgeworICAgIEZUX0ZpeGVkICBzY2FsZTsKKyAgICBGVF9VSW50ICAgbm47CisKKworICAgIGlmICggZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgICBpZiAoIGZhY2UtPnNpemUgPT0gTlVMTCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU2l6ZV9IYW5kbGUgKTsKKworICAgIGlmICggZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICBzY2FsZSA9IGZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2FsZTsKKyAgICBlbHNlCisgICAgICBzY2FsZSA9IGZhY2UtPnNpemUtPm1ldHJpY3MueF9zY2FsZTsKKworICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgc2FtZSBzY2FsaW5nIGFzIHRvIGdldCBsaW5lYXJ7SG9yaSxWZXJ0fUFkdmFuY2UgKi8KKyAgICAvKiAoc2VlIGBGVF9Mb2FkX0dseXBoJyBpbXBsZW1lbnRhdGlvbiBpbiBzcmMvYmFzZS9mdG9ianMuYykgICAgICAgICovCisKKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgY291bnQ7IG5uKysgKQorICAgICAgYWR2YW5jZXNbbm5dID0gRlRfTXVsRGl2KCBhZHZhbmNlc1tubl0sIHNjYWxlLCA2NCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgIC8qIGF0IHRoZSBtb21lbnQsIHdlIGNhbiBwZXJmb3JtIGZhc3QgYWR2YW5jZSByZXRyaWV2YWwgb25seSBpbiAqLworICAgLyogdGhlIGZvbGxvd2luZyBjYXNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qICAtIHVuc2NhbGVkIGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgLyogIC0gdW5oaW50ZWQgbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgLSBsaWdodC1oaW50ZWQgbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBmbGFncyAmICggRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORyApICAgIHx8IFwKKyAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX01PREUoIGZsYWdzICkgPT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGFkdmFuYy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfQWR2YW5jZSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICpwYWR2YW5jZSApCisgIHsKKyAgICBGVF9GYWNlX0dldEFkdmFuY2VzRnVuYyAgZnVuYzsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGlmICggIXBhZHZhbmNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKKworICAgIGZ1bmMgPSBmYWNlLT5kcml2ZXItPmNsYXp6LT5nZXRfYWR2YW5jZXM7CisgICAgaWYgKCBmdW5jICYmIExPQURfQURWQU5DRV9GQVNUX0NIRUNLKCBmbGFncyApICkKKyAgICB7CisgICAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgICAgZXJyb3IgPSBmdW5jKCBmYWNlLCBnaW5kZXgsIDEsIGZsYWdzLCBwYWR2YW5jZSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICByZXR1cm4gX2Z0X2ZhY2Vfc2NhbGVfYWR2YW5jZXMoIGZhY2UsIHBhZHZhbmNlLCAxLCBmbGFncyApOworCisgICAgICBpZiAoIEZUX0VSUl9ORVEoIGVycm9yLCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm4gRlRfR2V0X0FkdmFuY2VzKCBmYWNlLCBnaW5kZXgsIDEsIGZsYWdzLCBwYWR2YW5jZSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0YWR2YW5jLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9BZHZhbmNlcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqcGFkdmFuY2VzICkKKyAgeworICAgIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICBmdW5jOworICAgIEZUX1VJbnQgICAgICAgICAgICAgICAgICBudW0sIGVuZCwgbm47CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhcGFkdmFuY2VzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgbnVtID0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBoczsKKyAgICBlbmQgPSBzdGFydCArIGNvdW50OworICAgIGlmICggc3RhcnQgPj0gbnVtIHx8IGVuZCA8IHN0YXJ0IHx8IGVuZCA+IG51bSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKKworICAgIGlmICggY291bnQgPT0gMCApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgZnVuYyA9IGZhY2UtPmRyaXZlci0+Y2xhenotPmdldF9hZHZhbmNlczsKKyAgICBpZiAoIGZ1bmMgJiYgTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0soIGZsYWdzICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gZnVuYyggZmFjZSwgc3RhcnQsIGNvdW50LCBmbGFncywgcGFkdmFuY2VzICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIHJldHVybiBfZnRfZmFjZV9zY2FsZV9hZHZhbmNlcyggZmFjZSwgcGFkdmFuY2VzLCBjb3VudCwgZmxhZ3MgKTsKKworICAgICAgaWYgKCBGVF9FUlJfTkVRKCBlcnJvciwgVW5pbXBsZW1lbnRlZF9GZWF0dXJlICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIGZsYWdzICYgRlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworCisgICAgZmxhZ3MgfD0gKEZUX1VJbnQzMilGVF9MT0FEX0FEVkFOQ0VfT05MWTsKKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgY291bnQ7IG5uKysgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgc3RhcnQgKyBubiwgZmxhZ3MgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKworICAgICAgLyogc2NhbGUgZnJvbSAyNi42IHRvIDE2LjE2ICovCisgICAgICBwYWR2YW5jZXNbbm5dID0gKCBmbGFncyAmIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICkKKyAgICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPmdseXBoLT5hZHZhbmNlLnkgPDwgMTAKKyAgICAgICAgICAgICAgICAgICAgICA6IGZhY2UtPmdseXBoLT5hZHZhbmNlLnggPDwgMTA7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRhcGkuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmExODEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRhcGkuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRhcGkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0xJU1RfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICBDIE8gTSBQIEEgVCBJIEIgSSBMIEkgVCBZICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgQVBJICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9OZXdfTWVtb3J5X1N0cmVhbSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtICkKKyAgeworICAgIEZUX1VOVVNFRCggbGlicmFyeSApOworCisgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoIHN0cmVhbSwgYmFzZSwgc2l6ZSApOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZWVrX1N0cmVhbSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHBvcyApCisgIHsKKyAgICByZXR1cm4gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgcG9zICk7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1NraXBfU3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgZGlzdGFuY2UgKQorICB7CisgICAgcmV0dXJuIEZUX1N0cmVhbV9Ta2lwKCBzdHJlYW0sIGRpc3RhbmNlICk7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1JlYWRfU3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIHsKKyAgICByZXR1cm4gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgYnVmZmVyLCBjb3VudCApOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZWFkX1N0cmVhbV9BdCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHBvcywKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIHsKKyAgICByZXR1cm4gRlRfU3RyZWFtX1JlYWRBdCggc3RyZWFtLCBwb3MsIGJ1ZmZlciwgY291bnQgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfRXh0cmFjdF9GcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICkKKyAgeworICAgIHJldHVybiBGVF9TdHJlYW1fRXh0cmFjdEZyYW1lKCBzdHJlYW0sIGNvdW50LCBwYnl0ZXMgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9SZWxlYXNlX0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKQorICB7CisgICAgRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSggc3RyZWFtLCBwYnl0ZXMgKTsKKyAgfQorCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0FjY2Vzc19GcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIHsKKyAgICByZXR1cm4gRlRfU3RyZWFtX0VudGVyRnJhbWUoIHN0cmVhbSwgY291bnQgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9Gb3JnZXRfRnJhbWUoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIEZUX1N0cmVhbV9FeGl0RnJhbWUoIHN0cmVhbSApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiYXNlLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzZGZiNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJhc2UuYwpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGJhc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisjZGVmaW5lICBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlICJmdHBpYy5jIgorI2luY2x1ZGUgImJhc2VwaWMuYyIKKyNpbmNsdWRlICJmdGFkdmFuYy5jIgorI2luY2x1ZGUgImZ0Y2FsYy5jIgorI2luY2x1ZGUgImZ0ZGJnbWVtLmMiCisjaW5jbHVkZSAiZnRnbG9hZHIuYyIKKyNpbmNsdWRlICJmdG9ianMuYyIKKyNpbmNsdWRlICJmdG91dGxuLmMiCisjaW5jbHVkZSAiZnRyZm9yay5jIgorI2luY2x1ZGUgImZ0c25hbWVzLmMiCisjaW5jbHVkZSAiZnRzdHJlYW0uYyIKKyNpbmNsdWRlICJmdHRyaWdvbi5jIgorI2luY2x1ZGUgImZ0dXRpbC5jIgorCisjaWZkZWYgRlRfTUFDSU5UT1NICisjaW5jbHVkZSAiZnRtYWMuYyIKKyNlbmRpZgorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJhc2UuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjU3Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0YmFzZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0YmFzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBmdW5jdGlvbnMgdXNlZCBpbiBiYXNlIG1vZHVsZSAoc3BlY2lmaWNhdGlvbikuICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBzdXp1a2kgdG9zaGl5YS4gICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQkFTRV9IX18KKyNkZWZpbmUgX19GVEJBU0VfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIEFzc3VtZSB0aGUgc3RyZWFtIGlzIHNmbnQtd3JhcHBlZCBQUyBUeXBlMSBvciBzZm50LXdyYXBwZWQgQ0lELWtleWVkICovCisgIC8qIGZvbnQsIGFuZCB0cnkgdG8gbG9hZCBhIGZhY2Ugc3BlY2lmaWVkIGJ5IHRoZSBmYWNlX2luZGV4LiAgICAgICAgICAgICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIgICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICphZmFjZSApOworCisKKyAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZ2l2ZW4gYSBidWZmZXIgYW5kIGEgZHJpdmVyIG5hbWUuICovCisgIC8qIEZyb20gZnRtYWMuYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBkcml2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKTsKKworCisjaWYgIGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksgKSAmJiBcCisgICAgIWRlZmluZWQoIEZUX01BQ0lOVE9TSCApCisgIC8qIE1hYyBPUyBYL0RhcndpbiBrZXJuZWwgb2Z0ZW4gY2hhbmdlcyByZWNvbW1lbmRlZCBtZXRob2QgdG8gYWNjZXNzICovCisgIC8qIHRoZSByZXNvdXJjZSBmb3JrIGFuZCBvbGRlciBtZXRob2RzIG1ha2VzIHRoZSBrZXJuZWwgaXNzdWUgdGhlICAgICovCisgIC8qIHdhcm5pbmcgb2YgZGVwcmVjYXRlZCBtZXRob2QuICBUbyBjYWxtIGl0IGRvd24sIHRoZSBtZXRob2RzIGJhc2VkICovCisgIC8qIG9uIERhcndpbiBWRlMgc2hvdWxkIGJlIGdyb3VwZWQgYW5kIHNraXAgdGhlIHJlc3QgbWV0aG9kcyBhZnRlciAgICovCisgIC8qIHRoZSBjYXNlIHRoZSByZXNvdXJjZSBpcyBvcGVuZWQgYnV0IGZvdW5kIHRvIGxhY2sgYSBmb250IGluIGl0LiAgICovCisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgZnRfcmFjY2Vzc19ydWxlX2J5X2Rhcndpbl92ZnMoIEZUX0xpYnJhcnkgbGlicmFyeSwgRlRfVUludCAgcnVsZV9pbmRleCApOworI2VuZGlmCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GVEJBU0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiYm94LmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiYm94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkZjk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJib3guYwpAQCAtMCwwICsxLDUwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRiYm94LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIGJib3ggY29tcHV0YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KKy8qICBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBjb21wb25lbnQgaGFzIGEgX3NpbmdsZV8gcm9sZTogdG8gY29tcHV0ZSBleGFjdCBvdXRsaW5lIGJvdW5kaW5nICovCisgIC8qIGJveGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlIEZUX0JCT1hfSAorI2luY2x1ZGUgRlRfSU1BR0VfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRCQm94X1JlY18KKyAgeworICAgIEZUX1ZlY3RvciAgbGFzdDsKKyAgICBGVF9CQm94ICAgIGJib3g7CisKKyAgfSBUQkJveF9SZWM7CisKKworI2RlZmluZSBGVF9VUERBVEVfQkJPWCggcCwgYmJveCApIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBwLT54IDwgYmJveC54TWluICkgICAgICAgXAorICAgICAgYmJveC54TWluID0gcC0+eDsgICAgICAgICAgIFwKKyAgICBpZiAoIHAtPnggPiBiYm94LnhNYXggKSAgICAgICBcCisgICAgICBiYm94LnhNYXggPSBwLT54OyAgICAgICAgICAgXAorICAgIGlmICggcC0+eSA8IGJib3gueU1pbiApICAgICAgIFwKKyAgICAgIGJib3gueU1pbiA9IHAtPnk7ICAgICAgICAgICBcCisgICAgaWYgKCBwLT55ID4gYmJveC55TWF4ICkgICAgICAgXAorICAgICAgYmJveC55TWF4ID0gcC0+eTsgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNkZWZpbmUgQ0hFQ0tfWCggcCwgYmJveCApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIHAtPnggPCBiYm94LnhNaW4gfHwgcC0+eCA+IGJib3gueE1heCApCisKKyNkZWZpbmUgQ0hFQ0tfWSggcCwgYmJveCApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIHAtPnkgPCBiYm94LnlNaW4gfHwgcC0+eSA+IGJib3gueU1heCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCQm94X01vdmVfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBgbW92ZV90bycgZW1pdHRlciBkdXJpbmcgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9EZWNvbXBvc2UoKS4gIEl0IHNpbXBseSByZWNvcmRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludCAgICovCisgIC8qICAgIGluIGB1c2VyLT5sYXN0Jy4gV2UgYWxzbyB1cGRhdGUgYmJveCBpbiBjYXNlIGNvbnRvdXIgc3RhcnRzIHdpdGggICAqLworICAvKiAgICBhbiBpbXBsaWNpdCBgb24nIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0byAgIDo6IEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyIDo6IEEgcG9pbnRlciB0byB0aGUgY3VycmVudCB3YWxrIGNvbnRleHQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbHdheXMgMC4gIE5lZWRlZCBmb3IgdGhlIGludGVyZmFjZSBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBpbnQKKyAgQkJveF9Nb3ZlX1RvKCBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICBUQkJveF9SZWMqICB1c2VyICkKKyAgeworICAgIEZUX1VQREFURV9CQk9YKCB0bywgdXNlci0+YmJveCApOworCisgICAgdXNlci0+bGFzdCA9ICp0bzsKKworICAgIHJldHVybiAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCQm94X0xpbmVfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBgbGluZV90bycgZW1pdHRlciBkdXJpbmcgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9EZWNvbXBvc2UoKS4gIEl0IHNpbXBseSByZWNvcmRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludCAgICovCisgIC8qICAgIGluIGB1c2VyLT5sYXN0Jzsgbm8gZnVydGhlciBjb21wdXRhdGlvbnMgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlICAgICAqLworICAvKiAgICBiYm94IGFscmVhZHkgY29udGFpbnMgYm90aCBleHBsaWNpdCBlbmRzIG9mIHRoZSBsaW5lIHNlZ21lbnQuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0byAgIDo6IEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1c2VyIDo6IEEgcG9pbnRlciB0byB0aGUgY3VycmVudCB3YWxrIGNvbnRleHQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbHdheXMgMC4gIE5lZWRlZCBmb3IgdGhlIGludGVyZmFjZSBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBpbnQKKyAgQkJveF9MaW5lX1RvKCBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICBUQkJveF9SZWMqICB1c2VyICkKKyAgeworICAgIHVzZXItPmxhc3QgPSAqdG87CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQkJveF9Db25pY19DaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluZCB0aGUgZXh0cmVtYSBvZiBhIDEtZGltZW5zaW9uYWwgY29uaWMgQmV6aWVyIGN1cnZlIGFuZCB1cGRhdGUgICovCisgIC8qICAgIGEgYm91bmRpbmcgcmFuZ2UuICBUaGlzIHZlcnNpb24gdXNlcyBkaXJlY3QgY29tcHV0YXRpb24sIGFzIGl0ICAgICAqLworICAvKiAgICBkb2Vzbid0IG5lZWQgc3F1YXJlIHJvb3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5MSAgOjogVGhlIHN0YXJ0IGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHkyICA6OiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgY29udHJvbCBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeTMgIDo6IFRoZSBlbmQgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWluIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IG1pbmltdW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXggOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgbWF4aW11bS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEJCb3hfQ29uaWNfQ2hlY2soIEZUX1BvcyAgIHkxLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB5MiwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgeTMsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKKyAgeworICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBhIGNvbnRyb2wgb2ZmLXBvaW50IGlzIG91dHNpZGUgKi8KKyAgICAvKiB0aGUgYmJveCB0aGF0IGNvbnRhaW5zIGFsbCBvbi1wb2ludHMuICBJdCBmaW5kcyBhIGxvY2FsIGV4dHJlbXVtICovCisgICAgLyogd2l0aGluIHRoZSBzZWdtZW50LCBlcXVhbCB0byAoeTEqeTMgLSB5Mip5MikvKHkxIC0gMip5MiArIHkzKS4gICAqLworICAgIC8qIE9yLCBvZmZzZXR0aW5nIGZyb20geTIsIHdlIGdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHkxIC09IHkyOworICAgIHkzIC09IHkyOworICAgIHkyICs9IEZUX011bERpdiggeTEsIHkzLCB5MSArIHkzICk7CisKKyAgICBpZiAoIHkyIDwgKm1pbiApCisgICAgICAqbWluID0geTI7CisgICAgaWYgKCB5MiA+ICptYXggKQorICAgICAgKm1heCA9IHkyOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCQm94X0NvbmljX1RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBgY29uaWNfdG8nIGVtaXR0ZXIgZHVyaW5nICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3V0bGluZV9EZWNvbXBvc2UoKS4gIEl0IGNoZWNrcyBhIGNvbmljIEJlemllciBjdXJ2ZSB3aXRoIHRoZSAgICovCisgIC8qICAgIGN1cnJlbnQgYm91bmRpbmcgYm94LCBhbmQgY29tcHV0ZXMgaXRzIGV4dHJlbWEgaWYgbmVjZXNzYXJ5IHRvICAgICAqLworICAvKiAgICB1cGRhdGUgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb250cm9sIDo6IEEgcG9pbnRlciB0byBhIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgICAgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgd2FsayBjb250ZXh0LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLW1vbm90b25vdXMgYXJjLCB3ZSBjb21wdXRlIGRpcmVjdGx5IHRoZSAgICAgICAqLworICAvKiAgICBleHRyZW11bSBjb29yZGluYXRlcywgYXMgaXQgaXMgc3VmZmljaWVudGx5IGZhc3QuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBpbnQKKyAgQkJveF9Db25pY19UbyggRlRfVmVjdG9yKiAgY29udHJvbCwKKyAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgIFRCQm94X1JlYyogIHVzZXIgKQorICB7CisgICAgLyogaW4gY2FzZSBgdG8nIGlzIGltcGxpY2l0IGFuZCBub3QgaW5jbHVkZWQgaW4gYmJveCB5ZXQgKi8KKyAgICBGVF9VUERBVEVfQkJPWCggdG8sIHVzZXItPmJib3ggKTsKKworICAgIGlmICggQ0hFQ0tfWCggY29udHJvbCwgdXNlci0+YmJveCApICkKKyAgICAgIEJCb3hfQ29uaWNfQ2hlY2soIHVzZXItPmxhc3QueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wtPngsCisgICAgICAgICAgICAgICAgICAgICAgICB0by0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5iYm94LnhNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YmJveC54TWF4ICk7CisKKyAgICBpZiAoIENIRUNLX1koIGNvbnRyb2wsIHVzZXItPmJib3ggKSApCisgICAgICBCQm94X0NvbmljX0NoZWNrKCB1c2VyLT5sYXN0LnksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLT55LAorICAgICAgICAgICAgICAgICAgICAgICAgdG8tPnksCisgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YmJveC55TWluLAorICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmJib3gueU1heCApOworCisgICAgdXNlci0+bGFzdCA9ICp0bzsKKworICAgIHJldHVybiAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCQm94X0N1YmljX0NoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGaW5kIHRoZSBleHRyZW1hIG9mIGEgMS1kaW1lbnNpb25hbCBjdWJpYyBCZXppZXIgY3VydmUgYW5kICAgICAgICAgKi8KKyAgLyogICAgdXBkYXRlIGEgYm91bmRpbmcgcmFuZ2UuICBUaGlzIHZlcnNpb24gdXNlcyBpdGVyYXRpdmUgc3BsaXR0aW5nICAgICovCisgIC8qICAgIGJlY2F1c2UgaXQgaXMgZmFzdGVyIHRoYW4gdGhlIGV4YWN0IHNvbHV0aW9uIHdpdGggc3F1YXJlIHJvb3RzLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHAxICA6OiBUaGUgc3RhcnQgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcDIgIDo6IFRoZSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwMyAgOjogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHA0ICA6OiBUaGUgZW5kIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbiA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBtaW5pbXVtLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4IDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IG1heGltdW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfUG9zCisgIGN1YmljX3BlYWsoIEZUX1BvcyAgcTEsCisgICAgICAgICAgICAgIEZUX1BvcyAgcTIsCisgICAgICAgICAgICAgIEZUX1BvcyAgcTMsCisgICAgICAgICAgICAgIEZUX1BvcyAgcTQgKQorICB7CisgICAgRlRfUG9zICBwZWFrID0gMDsKKyAgICBGVF9JbnQgIHNoaWZ0OworCisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgcGVhayBvZiBhIGN1YmljIHNlZ21lbnQgaWYgaXQgaXMgYWJvdmUgMCAgICAqLworICAgIC8qIHVzaW5nIGl0ZXJhdGl2ZSBiaXNlY3Rpb24gb2YgdGhlIHNlZ21lbnQsIG9yIHJldHVybnMgMC4gICAgICAgICAgICovCisgICAgLyogVGhlIGZpeGVkLXBvaW50IGFyaXRobWV0aWMgb2YgYmlzZWN0aW9uIGlzIGluaGVyZW50bHkgc3RhYmxlICAgICAgKi8KKyAgICAvKiBidXQgbWF5IGxvb3NlIGFjY3VyYWN5IGluIHRoZSB0d28gbG93ZXN0IGJpdHMuICBUbyBjb21wZW5zYXRlLCAgICAqLworICAgIC8qIHdlIHVwc2NhbGUgdGhlIHNlZ21lbnQgaWYgdGhlcmUgaXMgcm9vbS4gIExhcmdlIHZhbHVlcyBtYXkgbmVlZCAgICovCisgICAgLyogdG8gYmUgZG93bnNjYWxlZCB0byBhdm9pZCBvdmVyZmxvd3MgZHVyaW5nIGJpc2VjdGlvbi4gICAgICAgICAgICAgKi8KKyAgICAvKiBJdCBpcyBjYWxsZWQgd2l0aCBlaXRoZXIgcTIgb3IgcTMgcG9zaXRpdmUsIHdoaWNoIGlzIG5lY2Vzc2FyeSAgICAqLworICAgIC8qIGZvciB0aGUgcGVhayB0byBleGlzdCBhbmQgYXZvaWRzIHVuZGVmaW5lZCBGVF9NU0IuICAgICAgICAgICAgICAgICovCisKKyAgICBzaGlmdCA9IDI3IC0gRlRfTVNCKCAoRlRfVUludDMyKSggRlRfQUJTKCBxMSApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxMiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxMyApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxNCApICkgKTsKKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICB7CisgICAgICAvKiB1cHNjYWxpbmcgdG9vIG11Y2gganVzdCB3YXN0ZXMgdGltZSAqLworICAgICAgaWYgKCBzaGlmdCA+IDIgKQorICAgICAgICBzaGlmdCA9IDI7CisKKyAgICAgIHExIDw8PSAgc2hpZnQ7CisgICAgICBxMiA8PD0gIHNoaWZ0OworICAgICAgcTMgPDw9ICBzaGlmdDsKKyAgICAgIHE0IDw8PSAgc2hpZnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBxMSA+Pj0gLXNoaWZ0OworICAgICAgcTIgPj49IC1zaGlmdDsKKyAgICAgIHEzID4+PSAtc2hpZnQ7CisgICAgICBxNCA+Pj0gLXNoaWZ0OworICAgIH0KKworICAgIC8qIGZvciBhIHBlYWsgdG8gZXhpc3QgYWJvdmUgMCwgdGhlIGN1YmljIHNlZ21lbnQgbXVzdCBoYXZlICovCisgICAgLyogYXQgbGVhc3Qgb25lIG9mIGl0cyBjb250cm9sIG9mZi1wb2ludHMgYWJvdmUgMC4gICAgICAgICAgKi8KKyAgICB3aGlsZSAoIHEyID4gMCB8fCBxMyA+IDAgKQorICAgIHsKKyAgICAgIC8qIGRldGVybWluZSB3aGljaCBoYWxmIGNvbnRhaW5zIHRoZSBtYXhpbXVtIGFuZCBzcGxpdCAqLworICAgICAgaWYgKCBxMSArIHEyID4gcTMgKyBxNCApIC8qIGZpcnN0IGhhbGYgKi8KKyAgICAgIHsKKyAgICAgICAgcTQgPSBxNCArIHEzOworICAgICAgICBxMyA9IHEzICsgcTI7CisgICAgICAgIHEyID0gcTIgKyBxMTsKKyAgICAgICAgcTQgPSBxNCArIHEzOworICAgICAgICBxMyA9IHEzICsgcTI7CisgICAgICAgIHE0ID0gKCBxNCArIHEzICkgLyA4OworICAgICAgICBxMyA9IHEzIC8gNDsKKyAgICAgICAgcTIgPSBxMiAvIDI7CisgICAgICB9CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgLyogc2Vjb25kIGhhbGYgKi8KKyAgICAgIHsKKyAgICAgICAgcTEgPSBxMSArIHEyOworICAgICAgICBxMiA9IHEyICsgcTM7CisgICAgICAgIHEzID0gcTMgKyBxNDsKKyAgICAgICAgcTEgPSBxMSArIHEyOworICAgICAgICBxMiA9IHEyICsgcTM7CisgICAgICAgIHExID0gKCBxMSArIHEyICkgLyA4OworICAgICAgICBxMiA9IHEyIC8gNDsKKyAgICAgICAgcTMgPSBxMyAvIDI7CisgICAgICB9CisKKyAgICAgIC8qIGNoZWNrIHdoZXRoZXIgZWl0aGVyIGVuZCByZWFjaGVkIHRoZSBtYXhpbXVtICovCisgICAgICBpZiAoIHExID09IHEyICYmIHExID49IHEzICkKKyAgICAgIHsKKyAgICAgICAgcGVhayA9IHExOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmICggcTMgPT0gcTQgJiYgcTIgPD0gcTQgKQorICAgICAgeworICAgICAgICBwZWFrID0gcTQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICAgIHBlYWsgPj49ICBzaGlmdDsKKyAgICBlbHNlCisgICAgICBwZWFrIDw8PSAtc2hpZnQ7CisKKyAgICByZXR1cm4gcGVhazsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgQkJveF9DdWJpY19DaGVjayggRlRfUG9zICAgcDEsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIHAyLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICBwMywKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgcDQsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKKyAgeworICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBhIGNvbnRyb2wgb2ZmLXBvaW50IGlzIG91dHNpZGUgICovCisgICAgLyogdGhlIGJib3ggdGhhdCBjb250YWlucyBhbGwgb24tcG9pbnRzLiAgU28gYXQgbGVhc3Qgb25lIG9mIHRoZSAgICAgKi8KKyAgICAvKiBjb25kaXRpb25zIGJlbG93IGhvbGRzIGFuZCBjdWJpY19wZWFrIGlzIGNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSAqLworICAgIC8qIG5vbi16ZXJvIGFyZ3VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoIHAyID4gKm1heCB8fCBwMyA+ICptYXggKQorICAgICAgKm1heCArPSBjdWJpY19wZWFrKCBwMSAtICptYXgsIHAyIC0gKm1heCwgcDMgLSAqbWF4LCBwNCAtICptYXggKTsKKworICAgIC8qIG5vdyBmbGlwIHRoZSBzaWducyB0byB1cGRhdGUgdGhlIG1pbmltdW0gKi8KKyAgICBpZiAoIHAyIDwgKm1pbiB8fCBwMyA8ICptaW4gKQorICAgICAgKm1pbiAtPSBjdWJpY19wZWFrKCAqbWluIC0gcDEsICptaW4gLSBwMiwgKm1pbiAtIHAzLCAqbWluIC0gcDQgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQkJveF9DdWJpY19UbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgYGN1YmljX3RvJyBlbWl0dGVyIGR1cmluZyAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlKCkuICBJdCBjaGVja3MgYSBjdWJpYyBCZXppZXIgY3VydmUgd2l0aCB0aGUgICAqLworICAvKiAgICBjdXJyZW50IGJvdW5kaW5nIGJveCwgYW5kIGNvbXB1dGVzIGl0cyBleHRyZW1hIGlmIG5lY2Vzc2FyeSB0byAgICAgKi8KKyAgLyogICAgdXBkYXRlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbDEgOjogQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb250cm9sMiA6OiBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgICAgIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHdhbGsgY29udGV4dC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLW1vbm90b25vdXMgYXJjLCB3ZSBkb24ndCBjb21wdXRlIGRpcmVjdGx5ICAgICAqLworICAvKiAgICBleHRyZW11bSBjb29yZGluYXRlcywgd2Ugc3ViZGl2aWRlIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBpbnQKKyAgQkJveF9DdWJpY19UbyggRlRfVmVjdG9yKiAgY29udHJvbDEsCisgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wyLAorICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICAgVEJCb3hfUmVjKiAgdXNlciApCisgIHsKKyAgICAvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGB0bycgc2luY2UgaXQgaXMgYWx3YXlzIGFuIG9uLXBvaW50LCAgICAqLworICAgIC8qIHRodXMgd2l0aGluIHRoZSBiYm94LiAgT25seSBzZWdtZW50cyB3aXRoIGFuIG9mZi1wb2ludCBvdXRzaWRlICovCisgICAgLyogdGhlIGJib3ggY2FuIHBvc3NpYmx5IHJlYWNoIG5ldyBleHRyZW1lIHZhbHVlcy4gICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggQ0hFQ0tfWCggY29udHJvbDEsIHVzZXItPmJib3ggKSB8fAorICAgICAgICAgQ0hFQ0tfWCggY29udHJvbDIsIHVzZXItPmJib3ggKSApCisgICAgICBCQm94X0N1YmljX0NoZWNrKCB1c2VyLT5sYXN0LngsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sMS0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgdG8tPngsCisgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YmJveC54TWluLAorICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmJib3gueE1heCApOworCisgICAgaWYgKCBDSEVDS19ZKCBjb250cm9sMSwgdXNlci0+YmJveCApIHx8CisgICAgICAgICBDSEVDS19ZKCBjb250cm9sMiwgdXNlci0+YmJveCApICkKKyAgICAgIEJCb3hfQ3ViaWNfQ2hlY2soIHVzZXItPmxhc3QueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wxLT55LAorICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDItPnksCisgICAgICAgICAgICAgICAgICAgICAgICB0by0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5iYm94LnlNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YmJveC55TWF4ICk7CisKKyAgICB1c2VyLT5sYXN0ID0gKnRvOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKGJib3hfaW50ZXJmYWNlLAorICAgIChGVF9PdXRsaW5lX01vdmVUb19GdW5jKSBCQm94X01vdmVfVG8sCisgICAgKEZUX091dGxpbmVfTGluZVRvX0Z1bmMpIEJCb3hfTGluZV9UbywKKyAgICAoRlRfT3V0bGluZV9Db25pY1RvX0Z1bmMpQkJveF9Db25pY19UbywKKyAgICAoRlRfT3V0bGluZV9DdWJpY1RvX0Z1bmMpQkJveF9DdWJpY19UbywKKyAgICAwLCAwCisgICkKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiYm94LmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfR2V0X0JCb3goIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAqYWJib3ggKQorICB7CisgICAgRlRfQkJveCAgICAgY2JveCA9IHsgIDB4N0ZGRkZGRkZMLCAgMHg3RkZGRkZGRkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4N0ZGRkZGRkZMLCAtMHg3RkZGRkZGRkwgfTsKKyAgICBGVF9CQm94ICAgICBiYm94ID0geyAgMHg3RkZGRkZGRkwsICAweDdGRkZGRkZGTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg3RkZGRkZGRkwsIC0weDdGRkZGRkZGTCB9OworICAgIEZUX1ZlY3RvciogIHZlYzsKKyAgICBGVF9VU2hvcnQgICBuOworCisKKyAgICBpZiAoICFhYmJveCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggIW91dGxpbmUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKworICAgIC8qIGlmIG91dGxpbmUgaXMgZW1wdHksIHJldHVybiAoMCwwLDAsMCkgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID09IDAgfHwgb3V0bGluZS0+bl9jb250b3VycyA8PSAwICkKKyAgICB7CisgICAgICBhYmJveC0+eE1pbiA9IGFiYm94LT54TWF4ID0gMDsKKyAgICAgIGFiYm94LT55TWluID0gYWJib3gtPnlNYXggPSAwOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogV2UgY29tcHV0ZSB0aGUgY29udHJvbCBib3ggYXMgd2VsbCBhcyB0aGUgYm91bmRpbmcgYm94IG9mICAqLworICAgIC8qIGFsbCBgb24nIHBvaW50cyBpbiB0aGUgb3V0bGluZS4gIFRoZW4sIGlmIHRoZSB0d28gYm94ZXMgICAgKi8KKyAgICAvKiBjb2luY2lkZSwgd2UgZXhpdCBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICB2ZWMgPSBvdXRsaW5lLT5wb2ludHM7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IG91dGxpbmUtPm5fcG9pbnRzOyBuKysgKQorICAgIHsKKyAgICAgIEZUX1VQREFURV9CQk9YKCB2ZWMsIGNib3gpOworCisgICAgICBpZiAoIEZUX0NVUlZFX1RBRyggb3V0bGluZS0+dGFnc1tuXSApID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgIEZUX1VQREFURV9CQk9YKCB2ZWMsIGJib3gpOworCisgICAgICB2ZWMrKzsKKyAgICB9CisKKyAgICAvKiB0ZXN0IHR3byBib3hlcyBmb3IgZXF1YWxpdHkgKi8KKyAgICBpZiAoIGNib3gueE1pbiA8IGJib3gueE1pbiB8fCBjYm94LnhNYXggPiBiYm94LnhNYXggfHwKKyAgICAgICAgIGNib3gueU1pbiA8IGJib3gueU1pbiB8fCBjYm94LnlNYXggPiBiYm94LnlNYXggKQorICAgIHsKKyAgICAgIC8qIHRoZSB0d28gYm94ZXMgYXJlIGRpZmZlcmVudCwgbm93IHdhbGsgb3ZlciB0aGUgb3V0bGluZSB0byAqLworICAgICAgLyogZ2V0IHRoZSBCZXppZXIgYXJjIGV4dHJlbWEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgICBUQkJveF9SZWMgIHVzZXI7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAgICAgRlRfT3V0bGluZV9GdW5jcyBiYm94X2ludGVyZmFjZTsKKyAgICAgIEluaXRfQ2xhc3NfYmJveF9pbnRlcmZhY2UoJmJib3hfaW50ZXJmYWNlKTsKKyNlbmRpZgorCisgICAgICB1c2VyLmJib3ggPSBiYm94OworCisgICAgICBlcnJvciA9IEZUX091dGxpbmVfRGVjb21wb3NlKCBvdXRsaW5lLCAmYmJveF9pbnRlcmZhY2UsICZ1c2VyICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAqYWJib3ggPSB1c2VyLmJib3g7CisgICAgfQorICAgIGVsc2UKKyAgICAgICphYmJveCA9IGJib3g7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiZGYuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJkZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzJkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiZGYuYwpAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGJkZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKGJvZHkpLiAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfQkRGX0gKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiZGYuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0JERl9DaGFyc2V0X0lEKCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKmFjaGFyc2V0X3JlZ2lzdHJ5ICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBjb25zdCBjaGFyKiAgZW5jb2RpbmcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqICByZWdpc3RyeSA9IE5VTEw7CisKKyAgICBGVF9TZXJ2aWNlX0JERiAgc2VydmljZTsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBCREYgKTsKKworICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfY2hhcnNldF9pZCApCisgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9jaGFyc2V0X2lkKCBmYWNlLCAmZW5jb2RpbmcsICZyZWdpc3RyeSApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggYWNoYXJzZXRfZW5jb2RpbmcgKQorICAgICAgKmFjaGFyc2V0X2VuY29kaW5nID0gZW5jb2Rpbmc7CisKKyAgICBpZiAoIGFjaGFyc2V0X3JlZ2lzdHJ5ICkKKyAgICAgICphY2hhcnNldF9yZWdpc3RyeSA9IHJlZ2lzdHJ5OworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0YmRmLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9CREZfUHJvcGVydHkoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICAgIHByb3BfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgQkRGX1Byb3BlcnR5UmVjICAqYXByb3BlcnR5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIEZUX1NlcnZpY2VfQkRGICBzZXJ2aWNlOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhYXByb3BlcnR5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgYXByb3BlcnR5LT50eXBlID0gQkRGX1BST1BFUlRZX1RZUEVfTk9ORTsKKworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBCREYgKTsKKworICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfcHJvcGVydHkgKQorICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfcHJvcGVydHkoIGZhY2UsIHByb3BfbmFtZSwgYXByb3BlcnR5ICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiaXRtYXAuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGJpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDU3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRiaXRtYXAuYwpAQCAtMCwwICsxLDgwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRiaXRtYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworI2luY2x1ZGUgRlRfQklUTUFQX0gKKyNpbmNsdWRlIEZUX0lNQUdFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0JpdG1hcCAgbnVsbF9iaXRtYXAgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiaXRtYXAuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9CaXRtYXBfSW5pdCggRlRfQml0bWFwICAqYWJpdG1hcCApCisgIHsKKyAgICBpZiAoIGFiaXRtYXAgKQorICAgICAgKmFiaXRtYXAgPSBudWxsX2JpdG1hcDsKKyAgfQorCisKKyAgLyogZGVwcmVjYXRlZCBmdW5jdGlvbiBuYW1lOyByZXRhaW5lZCBmb3IgQUJJIGNvbXBhdGliaWxpdHkgKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfQml0bWFwX05ldyggRlRfQml0bWFwICAqYWJpdG1hcCApCisgIHsKKyAgICBpZiAoIGFiaXRtYXAgKQorICAgICAgKmFiaXRtYXAgPSBudWxsX2JpdG1hcDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGJpdG1hcC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9CaXRtYXBfQ29weSggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0JpdG1hcCAgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICAgICAgKnRhcmdldCkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworCisgICAgRlRfSW50ICAgIHBpdGNoOworICAgIEZUX1VMb25nICBzaXplOworCisgICAgRlRfSW50ICBzb3VyY2VfcGl0Y2hfc2lnbiwgdGFyZ2V0X3BpdGNoX3NpZ247CisKKworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CisKKyAgICBpZiAoICFzb3VyY2UgfHwgIXRhcmdldCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggc291cmNlID09IHRhcmdldCApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgc291cmNlX3BpdGNoX3NpZ24gPSBzb3VyY2UtPnBpdGNoIDwgMCA/IC0xIDogMTsKKyAgICB0YXJnZXRfcGl0Y2hfc2lnbiA9IHRhcmdldC0+cGl0Y2ggPCAwID8gLTEgOiAxOworCisgICAgaWYgKCBzb3VyY2UtPmJ1ZmZlciA9PSBOVUxMICkKKyAgICB7CisgICAgICAqdGFyZ2V0ID0gKnNvdXJjZTsKKyAgICAgIGlmICggc291cmNlX3BpdGNoX3NpZ24gIT0gdGFyZ2V0X3BpdGNoX3NpZ24gKQorICAgICAgICB0YXJnZXQtPnBpdGNoID0gLXRhcmdldC0+cGl0Y2g7CisKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworICAgIHBpdGNoICA9IHNvdXJjZS0+cGl0Y2g7CisKKyAgICBpZiAoIHBpdGNoIDwgMCApCisgICAgICBwaXRjaCA9IC1waXRjaDsKKyAgICBzaXplID0gKEZUX1VMb25nKXBpdGNoICogc291cmNlLT5yb3dzOworCisgICAgaWYgKCB0YXJnZXQtPmJ1ZmZlciApCisgICAgeworICAgICAgRlRfSW50ICAgIHRhcmdldF9waXRjaCA9IHRhcmdldC0+cGl0Y2g7CisgICAgICBGVF9VTG9uZyAgdGFyZ2V0X3NpemU7CisKKworICAgICAgaWYgKCB0YXJnZXRfcGl0Y2ggPCAwICkKKyAgICAgICAgdGFyZ2V0X3BpdGNoID0gLXRhcmdldF9waXRjaDsKKyAgICAgIHRhcmdldF9zaXplID0gKEZUX1VMb25nKXRhcmdldF9waXRjaCAqIHRhcmdldC0+cm93czsKKworICAgICAgaWYgKCB0YXJnZXRfc2l6ZSAhPSBzaXplICkKKyAgICAgICAgKHZvaWQpRlRfUVJFQUxMT0MoIHRhcmdldC0+YnVmZmVyLCB0YXJnZXRfc2l6ZSwgc2l6ZSApOworICAgIH0KKyAgICBlbHNlCisgICAgICAodm9pZClGVF9RQUxMT0MoIHRhcmdldC0+YnVmZmVyLCBzaXplICk7CisKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqcDsKKworCisgICAgICBwID0gdGFyZ2V0LT5idWZmZXI7CisgICAgICAqdGFyZ2V0ID0gKnNvdXJjZTsKKyAgICAgIHRhcmdldC0+YnVmZmVyID0gcDsKKworICAgICAgaWYgKCBzb3VyY2VfcGl0Y2hfc2lnbiA9PSB0YXJnZXRfcGl0Y2hfc2lnbiApCisgICAgICAgIEZUX01FTV9DT1BZKCB0YXJnZXQtPmJ1ZmZlciwgc291cmNlLT5idWZmZXIsIHNpemUgKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogdGFrZSBjYXJlIG9mIGJpdG1hcCBmbG93ICovCisgICAgICAgIEZUX1VJbnQgICBpOworICAgICAgICBGVF9CeXRlKiAgcyA9IHNvdXJjZS0+YnVmZmVyOworICAgICAgICBGVF9CeXRlKiAgdCA9IHRhcmdldC0+YnVmZmVyOworCisKKyAgICAgICAgdCArPSAoRlRfVUxvbmcpcGl0Y2ggKiAoIHRhcmdldC0+cm93cyAtIDEgKTsKKworICAgICAgICBmb3IgKCBpID0gdGFyZ2V0LT5yb3dzOyBpID4gMDsgaS0tICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0FSUkFZX0NPUFkoIHQsIHMsIHBpdGNoICk7CisKKyAgICAgICAgICBzICs9IHBpdGNoOworICAgICAgICAgIHQgLT0gcGl0Y2g7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIEVubGFyZ2UgYGJpdG1hcCcgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGJ5IGB4cGl4ZWxzJyAqLworICAvKiBhbmQgYHlwaXhlbHMnLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIoIEZUX01lbW9yeSAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHhwaXhlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICB5cGl4ZWxzICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKyAgICBpbnQgICAgICAgICAgICAgcGl0Y2g7CisgICAgaW50ICAgICAgICAgICAgIG5ld19waXRjaDsKKyAgICBGVF9VSW50ICAgICAgICAgYnBwOworICAgIEZUX1VJbnQgICAgICAgICBpLCB3aWR0aCwgaGVpZ2h0OworICAgIHVuc2lnbmVkIGNoYXIqICBidWZmZXIgPSBOVUxMOworCisKKyAgICB3aWR0aCAgPSBiaXRtYXAtPndpZHRoOworICAgIGhlaWdodCA9IGJpdG1hcC0+cm93czsKKyAgICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOworICAgIGlmICggcGl0Y2ggPCAwICkKKyAgICAgIHBpdGNoID0gLXBpdGNoOworCisgICAgc3dpdGNoICggYml0bWFwLT5waXhlbF9tb2RlICkKKyAgICB7CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86CisgICAgICBicHAgICAgICAgPSAxOworICAgICAgbmV3X3BpdGNoID0gKGludCkoICggd2lkdGggKyB4cGl4ZWxzICsgNyApID4+IDMgKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZMjoKKyAgICAgIGJwcCAgICAgICA9IDI7CisgICAgICBuZXdfcGl0Y2ggPSAoaW50KSggKCB3aWR0aCArIHhwaXhlbHMgKyAzICkgPj4gMiApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVk0OgorICAgICAgYnBwICAgICAgID0gNDsKKyAgICAgIG5ld19waXRjaCA9IChpbnQpKCAoIHdpZHRoICsgeHBpeGVscyArIDEgKSA+PiAxICk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfR1JBWToKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEOgorICAgIGNhc2UgRlRfUElYRUxfTU9ERV9MQ0RfVjoKKyAgICAgIGJwcCAgICAgICA9IDg7CisgICAgICBuZXdfcGl0Y2ggPSAoaW50KSggd2lkdGggKyB4cGl4ZWxzICk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgIH0KKworICAgIC8qIGlmIG5vIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICovCisgICAgaWYgKCB5cGl4ZWxzID09IDAgJiYgbmV3X3BpdGNoIDw9IHBpdGNoICkKKyAgICB7CisgICAgICAvKiB6ZXJvIHRoZSBwYWRkaW5nICovCisgICAgICBGVF9VSW50ICBiaXRfd2lkdGggPSAoRlRfVUludClwaXRjaCAqIDg7CisgICAgICBGVF9VSW50ICBiaXRfbGFzdCAgPSAoIHdpZHRoICsgeHBpeGVscyApICogYnBwOworCisKKyAgICAgIGlmICggYml0X2xhc3QgPCBiaXRfd2lkdGggKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgbGluZSAgPSBiaXRtYXAtPmJ1ZmZlciArICggYml0X2xhc3QgPj4gMyApOworICAgICAgICBGVF9CeXRlKiAgZW5kICAgPSBiaXRtYXAtPmJ1ZmZlciArIHBpdGNoOworICAgICAgICBGVF9VSW50ICAgc2hpZnQgPSBiaXRfbGFzdCAmIDc7CisgICAgICAgIEZUX1VJbnQgICBtYXNrICA9IDB4RkYwMFUgPj4gc2hpZnQ7CisgICAgICAgIEZUX1VJbnQgICBjb3VudCA9IGhlaWdodDsKKworCisgICAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBsaW5lICs9IHBpdGNoLCBlbmQgKz0gcGl0Y2ggKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogIHdyaXRlID0gbGluZTsKKworCisgICAgICAgICAgaWYgKCBzaGlmdCA+IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHdyaXRlWzBdID0gKEZUX0J5dGUpKCB3cml0ZVswXSAmIG1hc2sgKTsKKyAgICAgICAgICAgIHdyaXRlKys7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggd3JpdGUgPCBlbmQgKQorICAgICAgICAgICAgRlRfTUVNX1pFUk8oIHdyaXRlLCBlbmQgLSB3cml0ZSApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgICAgLyogb3RoZXJ3aXNlIGFsbG9jYXRlIG5ldyBidWZmZXIgKi8KKyAgICBpZiAoIEZUX1FBTExPQ19NVUxUKCBidWZmZXIsIG5ld19waXRjaCwgYml0bWFwLT5yb3dzICsgeXBpeGVscyApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIG5ldyByb3dzIGdldCBhZGRlZCBhdCB0aGUgdG9wIG9mIHRoZSBiaXRtYXAsICovCisgICAgLyogdGh1cyB0YWtlIGNhcmUgb2YgdGhlIGZsb3cgZGlyZWN0aW9uICAgICAgICAgKi8KKyAgICBpZiAoIGJpdG1hcC0+cGl0Y2ggPiAwICkKKyAgICB7CisgICAgICBGVF9VSW50ICBsZW4gPSAoIHdpZHRoICogYnBwICsgNyApID4+IDM7CisKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBiaXRtYXAtPnJvd3M7IGkrKyApCisgICAgICAgIEZUX01FTV9DT1BZKCBidWZmZXIgKyAoRlRfVUludCluZXdfcGl0Y2ggKiAoIHlwaXhlbHMgKyBpICksCisgICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPmJ1ZmZlciArIChGVF9VSW50KXBpdGNoICogaSwKKyAgICAgICAgICAgICAgICAgICAgIGxlbiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfVUludCAgbGVuID0gKCB3aWR0aCAqIGJwcCArIDcgKSA+PiAzOworCisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgYml0bWFwLT5yb3dzOyBpKysgKQorICAgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyICsgKEZUX1VJbnQpbmV3X3BpdGNoICogaSwKKyAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC0+YnVmZmVyICsgKEZUX1VJbnQpcGl0Y2ggKiBpLAorICAgICAgICAgICAgICAgICAgICAgbGVuICk7CisgICAgfQorCisgICAgRlRfRlJFRSggYml0bWFwLT5idWZmZXIgKTsKKyAgICBiaXRtYXAtPmJ1ZmZlciA9IGJ1ZmZlcjsKKworICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQorICAgICAgbmV3X3BpdGNoID0gLW5ld19waXRjaDsKKworICAgIC8qIHNldCBwaXRjaCBvbmx5LCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBsZWZ0IHVudG91Y2hlZCAqLworICAgIGJpdG1hcC0+cGl0Y2ggPSBuZXdfcGl0Y2g7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Yml0bWFwLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0JpdG1hcF9FbWJvbGRlbiggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeFN0cmVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHlTdHJlbmd0aCApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgdW5zaWduZWQgY2hhciogIHA7CisgICAgRlRfSW50ICAgICAgICAgIGksIHgsIHBpdGNoOworICAgIEZUX1VJbnQgICAgICAgICB5OworICAgIEZUX0ludCAgICAgICAgICB4c3RyLCB5c3RyOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhYml0bWFwIHx8ICFiaXRtYXAtPmJ1ZmZlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggKCAoIEZUX1BJWF9ST1VORCggeFN0cmVuZ3RoICkgPj4gNiApID4gRlRfSU5UX01BWCApIHx8CisgICAgICAgICAoICggRlRfUElYX1JPVU5EKCB5U3RyZW5ndGggKSA+PiA2ICkgPiBGVF9JTlRfTUFYICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICB4c3RyID0gKEZUX0ludClGVF9QSVhfUk9VTkQoIHhTdHJlbmd0aCApID4+IDY7CisgICAgeXN0ciA9IChGVF9JbnQpRlRfUElYX1JPVU5EKCB5U3RyZW5ndGggKSA+PiA2OworCisgICAgaWYgKCB4c3RyID09IDAgJiYgeXN0ciA9PSAwICkKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgZWxzZSBpZiAoIHhzdHIgPCAwIHx8IHlzdHIgPCAwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgc3dpdGNoICggYml0bWFwLT5waXhlbF9tb2RlICkKKyAgICB7CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVkyOgorICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZNDoKKyAgICAgIHsKKyAgICAgICAgRlRfQml0bWFwICB0bXA7CisKKworICAgICAgICAvKiBjb252ZXJ0IHRvIDhicHAgKi8KKyAgICAgICAgRlRfQml0bWFwX0luaXQoICZ0bXAgKTsKKyAgICAgICAgZXJyb3IgPSBGVF9CaXRtYXBfQ29udmVydCggbGlicmFyeSwgYml0bWFwLCAmdG1wLCAxICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgYml0bWFwICk7CisgICAgICAgICpiaXRtYXAgPSB0bXA7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfUElYRUxfTU9ERV9NT05POgorICAgICAgaWYgKCB4c3RyID4gOCApCisgICAgICAgIHhzdHIgPSA4OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEOgorICAgICAgeHN0ciAqPSAzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEX1Y6CisgICAgICB5c3RyICo9IDM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfUElYRUxfTU9ERV9CR1JBOgorICAgICAgLyogV2UgZG9uJ3QgZW1ib2xkZW4gY29sb3IgZ2x5cGhzLiAqLworICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisKKyAgICBlcnJvciA9IGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKCBsaWJyYXJ5LT5tZW1vcnksIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCl4c3RyLCAoRlRfVUludCl5c3RyICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KKyAgICBwaXRjaCA9IGJpdG1hcC0+cGl0Y2g7CisgICAgaWYgKCBwaXRjaCA+IDAgKQorICAgICAgcCA9IGJpdG1hcC0+YnVmZmVyICsgcGl0Y2ggKiB5c3RyOworICAgIGVsc2UKKyAgICB7CisgICAgICBwaXRjaCA9IC1waXRjaDsKKyAgICAgIHAgPSBiaXRtYXAtPmJ1ZmZlciArIChGVF9VSW50KXBpdGNoICogKCBiaXRtYXAtPnJvd3MgLSAxICk7CisgICAgfQorCisgICAgLyogZm9yIGVhY2ggcm93ICovCisgICAgZm9yICggeSA9IDA7IHkgPCBiaXRtYXAtPnJvd3MgOyB5KysgKQorICAgIHsKKyAgICAgIC8qCisgICAgICAgKiBIb3Jpem9udGFsbHk6CisgICAgICAgKgorICAgICAgICogRnJvbSB0aGUgbGFzdCBwaXhlbCBvbiwgbWFrZSBlYWNoIHBpeGVsIG9yJ2VkIHdpdGggdGhlCisgICAgICAgKiBgeHN0cicgcGl4ZWxzIGJlZm9yZSBpdC4KKyAgICAgICAqLworICAgICAgZm9yICggeCA9IHBpdGNoIC0gMTsgeCA+PSAwOyB4LS0gKQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyICB0bXA7CisKKworICAgICAgICB0bXAgPSBwW3hdOworICAgICAgICBmb3IgKCBpID0gMTsgaSA8PSB4c3RyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBiaXRtYXAtPnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9NT05PICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwW3hdIHw9IHRtcCA+PiBpOworCisgICAgICAgICAgICAvKiB0aGUgbWF4aW11bSB2YWx1ZSBvZiA4IGZvciBgeHN0cicgY29tZXMgZnJvbSBoZXJlICovCisgICAgICAgICAgICBpZiAoIHggPiAwICkKKyAgICAgICAgICAgICAgcFt4XSB8PSBwW3ggLSAxXSA8PCAoIDggLSBpICk7CisKKyNpZiAwCisgICAgICAgICAgICBpZiAoIHBbeF0gPT0gMHhGRiApCisgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHggLSBpID49IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHBbeF0gKyBwW3ggLSBpXSA+IGJpdG1hcC0+bnVtX2dyYXlzIC0gMSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwW3hdID0gKHVuc2lnbmVkIGNoYXIpKCBiaXRtYXAtPm51bV9ncmF5cyAtIDEgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwW3hdID0gKHVuc2lnbmVkIGNoYXIpKCBwW3hdICsgcFt4IC0gaV0gKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBbeF0gPT0gYml0bWFwLT5udW1fZ3JheXMgLSAxICkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKgorICAgICAgICogVmVydGljYWxseToKKyAgICAgICAqCisgICAgICAgKiBNYWtlIHRoZSBhYm92ZSBgeXN0cicgcm93cyBvcidlZCB3aXRoIGl0LgorICAgICAgICovCisgICAgICBmb3IgKCB4ID0gMTsgeCA8PSB5c3RyOyB4KysgKQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiAgcTsKKworCisgICAgICAgIHEgPSBwIC0gYml0bWFwLT5waXRjaCAqIHg7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcGl0Y2g7IGkrKyApCisgICAgICAgICAgcVtpXSB8PSBwW2ldOworICAgICAgfQorCisgICAgICBwICs9IGJpdG1hcC0+cGl0Y2g7CisgICAgfQorCisgICAgYml0bWFwLT53aWR0aCArPSAoRlRfVUludCl4c3RyOworICAgIGJpdG1hcC0+cm93cyArPSAoRlRfVUludCl5c3RyOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0J5dGUKKyAgZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEoIGNvbnN0IEZUX0J5dGUqICBiZ3JhICkKKyAgeworICAgIEZUX1VJbnQgIGEgPSBiZ3JhWzNdOworICAgIEZUX1VJbnQgIGw7CisKKworICAgIC8qIFNob3J0LWNpcmN1aXQgdHJhbnNwYXJlbnQgY29sb3IgdG8gYXZvaWQgZGl2aXNpb24gYnkgemVyby4gKi8KKyAgICBpZiAoICFhICkKKyAgICAgIHJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBMdW1pbm9zaXR5IGZvciBzUkdCIGlzIGRlZmluZWQgdXNpbmcgfjAuMjEyNiwwLjcxNTIsMC4wNzIyCisgICAgICogY29lZmZpY2llbnRzIGZvciBSR0IgY2hhbm5lbHMgKm9uIHRoZSBsaW5lYXIgY29sb3JzKi4KKyAgICAgKiBBIGdhbW1hIG9mIDIuMiBpcyBmYWlyIHRvIGFzc3VtZS4gIEFuZCB0aGVuLCB3ZSBuZWVkIHRvCisgICAgICogdW5kbyB0aGUgcHJlbXVsdGlwbGljYXRpb24gdG9vLgorICAgICAqCisgICAgICogICBodHRwOi8vYWNjZXNzaWJpbGl0eS5rZGUub3JnL2hzbC1hZGp1c3RlZC5waHAKKyAgICAgKgorICAgICAqIFdlIGRvIHRoZSBjb21wdXRhdGlvbiB3aXRoIGludGVnZXJzIG9ubHksIGFwcGx5aW5nIGEgZ2FtbWEgb2YgMi4wLgorICAgICAqIFdlIGd1YXJhbnRlZSAzMi1iaXQgYXJpdGhtZXRpYyB0byBhdm9pZCBvdmVyZmxvdyBidXQgdGhlIHJlc3VsdGluZworICAgICAqIGx1bWlub3NpdHkgZml0cyBpbnRvIDE2IGJpdHMuCisgICAgICoKKyAgICAgKi8KKworICAgIGwgPSAoICA0NzMyVUwgLyogMC4wNzIyICogNjU1MzYgKi8gKiBiZ3JhWzBdICogYmdyYVswXSArCisgICAgICAgICAgNDY4NzFVTCAvKiAwLjcxNTIgKiA2NTUzNiAqLyAqIGJncmFbMV0gKiBiZ3JhWzFdICsKKyAgICAgICAgICAxMzkzM1VMIC8qIDAuMjEyNiAqIDY1NTM2ICovICogYmdyYVsyXSAqIGJncmFbMl0gKSA+PiAxNjsKKworICAgIC8qCisgICAgICogRmluYWwgdHJhbnNwYXJlbmN5IGNhbiBiZSBkZXRlcm1pbmVkIGFzIGZvbGxvd3MuCisgICAgICoKKyAgICAgKiAtIElmIGFscGhhIGlzIHplcm8sIHdlIHdhbnQgMC4KKyAgICAgKiAtIElmIGFscGhhIGlzIHplcm8gYW5kIGx1bWlub3NpdHkgaXMgemVybywgd2Ugd2FudCAyNTUuCisgICAgICogLSBJZiBhbHBoYSBpcyB6ZXJvIGFuZCBsdW1pbm9zaXR5IGlzIG9uZSwgd2Ugd2FudCAwLgorICAgICAqCisgICAgICogU28gdGhlIGZvcm11bGEgaXMgYSAqICgxIC0gbCkgPSBhIC0gbCAqIGEuCisgICAgICoKKyAgICAgKiBXZSBzdGlsbCBuZWVkIHRvIHVuZG8gcHJlbXVsdGlwbGljYXRpb24gYnkgZGl2aWRpbmcgbCBieSBhKmEuCisgICAgICoKKyAgICAgKi8KKworICAgIHJldHVybiAoRlRfQnl0ZSkoIGEgLSBsIC8gYSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Yml0bWFwLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0JpdG1hcF9Db252ZXJ0KCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQml0bWFwICAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQml0bWFwICAgICAgICAqdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgICAgYWxpZ25tZW50ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKyAgICBGVF9CeXRlKiAgczsKKyAgICBGVF9CeXRlKiAgdDsKKworCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGlmICggIXNvdXJjZSB8fCAhdGFyZ2V0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisgICAgc3dpdGNoICggc291cmNlLT5waXhlbF9tb2RlICkKKyAgICB7CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVk6CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVkyOgorICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZNDoKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEOgorICAgIGNhc2UgRlRfUElYRUxfTU9ERV9MQ0RfVjoKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfQkdSQToKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICAgIHBhZCwgb2xkX3RhcmdldF9waXRjaCwgdGFyZ2V0X3BpdGNoOworICAgICAgICBGVF9VTG9uZyAgb2xkX3NpemU7CisKKworICAgICAgICBvbGRfdGFyZ2V0X3BpdGNoID0gdGFyZ2V0LT5waXRjaDsKKyAgICAgICAgaWYgKCBvbGRfdGFyZ2V0X3BpdGNoIDwgMCApCisgICAgICAgICAgb2xkX3RhcmdldF9waXRjaCA9IC1vbGRfdGFyZ2V0X3BpdGNoOworCisgICAgICAgIG9sZF9zaXplID0gdGFyZ2V0LT5yb3dzICogKEZUX1VJbnQpb2xkX3RhcmdldF9waXRjaDsKKworICAgICAgICB0YXJnZXQtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVk7CisgICAgICAgIHRhcmdldC0+cm93cyAgICAgICA9IHNvdXJjZS0+cm93czsKKyAgICAgICAgdGFyZ2V0LT53aWR0aCAgICAgID0gc291cmNlLT53aWR0aDsKKworICAgICAgICBwYWQgPSAwOworICAgICAgICBpZiAoIGFsaWdubWVudCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgcGFkID0gKEZUX0ludClzb3VyY2UtPndpZHRoICUgYWxpZ25tZW50OworICAgICAgICAgIGlmICggcGFkICE9IDAgKQorICAgICAgICAgICAgcGFkID0gYWxpZ25tZW50IC0gcGFkOworICAgICAgICB9CisKKyAgICAgICAgdGFyZ2V0X3BpdGNoID0gKEZUX0ludClzb3VyY2UtPndpZHRoICsgcGFkOworCisgICAgICAgIGlmICggdGFyZ2V0X3BpdGNoID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoRlRfVUxvbmcpdGFyZ2V0LT5yb3dzID4gRlRfVUxPTkdfTUFYIC8gKEZUX1VMb25nKXRhcmdldF9waXRjaCApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgICAgaWYgKCB0YXJnZXQtPnJvd3MgKiAoRlRfVUxvbmcpdGFyZ2V0X3BpdGNoID4gb2xkX3NpemUgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgRlRfUVJFQUxMT0MoIHRhcmdldC0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfc2l6ZSwgdGFyZ2V0LT5yb3dzICogKEZUX1VJbnQpdGFyZ2V0X3BpdGNoICkgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICB0YXJnZXQtPnBpdGNoID0gdGFyZ2V0LT5waXRjaCA8IDAgPyAtdGFyZ2V0X3BpdGNoIDogdGFyZ2V0X3BpdGNoOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKworICAgIHMgPSBzb3VyY2UtPmJ1ZmZlcjsKKyAgICB0ID0gdGFyZ2V0LT5idWZmZXI7CisKKyAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KKyAgICBpZiAoIHNvdXJjZS0+cGl0Y2ggPCAwICkKKyAgICAgIHMgLT0gc291cmNlLT5waXRjaCAqIChGVF9JbnQpKCBzb3VyY2UtPnJvd3MgLSAxICk7CisgICAgaWYgKCB0YXJnZXQtPnBpdGNoIDwgMCApCisgICAgICB0IC09IHRhcmdldC0+cGl0Y2ggKiAoRlRfSW50KSggdGFyZ2V0LT5yb3dzIC0gMSApOworCisgICAgc3dpdGNoICggc291cmNlLT5waXhlbF9tb2RlICkKKyAgICB7CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICB0YXJnZXQtPm51bV9ncmF5cyA9IDI7CisKKyAgICAgICAgZm9yICggaSA9IHNvdXJjZS0+cm93czsgaSA+IDA7IGktLSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlKiAgc3MgPSBzOworICAgICAgICAgIEZUX0J5dGUqICB0dCA9IHQ7CisgICAgICAgICAgRlRfVUludCAgIGo7CisKKworICAgICAgICAgIC8qIGdldCB0aGUgZnVsbCBieXRlcyAqLworICAgICAgICAgIGZvciAoIGogPSBzb3VyY2UtPndpZHRoID4+IDM7IGogPiAwOyBqLS0gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgdmFsID0gc3NbMF07IC8qIGF2b2lkIGEgYnl0ZS0+aW50IGNhc3Qgb24gZWFjaCBsaW5lICovCisKKworICAgICAgICAgICAgdHRbMF0gPSAoRlRfQnl0ZSkoICggdmFsICYgMHg4MCApID4+IDcgKTsKKyAgICAgICAgICAgIHR0WzFdID0gKEZUX0J5dGUpKCAoIHZhbCAmIDB4NDAgKSA+PiA2ICk7CisgICAgICAgICAgICB0dFsyXSA9IChGVF9CeXRlKSggKCB2YWwgJiAweDIwICkgPj4gNSApOworICAgICAgICAgICAgdHRbM10gPSAoRlRfQnl0ZSkoICggdmFsICYgMHgxMCApID4+IDQgKTsKKyAgICAgICAgICAgIHR0WzRdID0gKEZUX0J5dGUpKCAoIHZhbCAmIDB4MDggKSA+PiAzICk7CisgICAgICAgICAgICB0dFs1XSA9IChGVF9CeXRlKSggKCB2YWwgJiAweDA0ICkgPj4gMiApOworICAgICAgICAgICAgdHRbNl0gPSAoRlRfQnl0ZSkoICggdmFsICYgMHgwMiApID4+IDEgKTsKKyAgICAgICAgICAgIHR0WzddID0gKEZUX0J5dGUpKCAgIHZhbCAmIDB4MDEgKTsKKworICAgICAgICAgICAgdHQgKz0gODsKKyAgICAgICAgICAgIHNzICs9IDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZ2V0IHJlbWFpbmluZyBwaXhlbHMgKGlmIGFueSkgKi8KKyAgICAgICAgICBqID0gc291cmNlLT53aWR0aCAmIDc7CisgICAgICAgICAgaWYgKCBqID4gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICB2YWwgPSAqc3M7CisKKworICAgICAgICAgICAgZm9yICggOyBqID4gMDsgai0tICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHRbMF0gPSAoRlRfQnl0ZSkoICggdmFsICYgMHg4MCApID4+IDcpOworICAgICAgICAgICAgICB2YWwgPDw9IDE7CisgICAgICAgICAgICAgIHR0ICAgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBzICs9IHNvdXJjZS0+cGl0Y2g7CisgICAgICAgICAgdCArPSB0YXJnZXQtPnBpdGNoOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworCisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVk6CisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0xDRDoKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEX1Y6CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIHdpZHRoID0gc291cmNlLT53aWR0aDsKKyAgICAgICAgRlRfVUludCAgaTsKKworCisgICAgICAgIHRhcmdldC0+bnVtX2dyYXlzID0gMjU2OworCisgICAgICAgIGZvciAoIGkgPSBzb3VyY2UtPnJvd3M7IGkgPiAwOyBpLS0gKQorICAgICAgICB7CisgICAgICAgICAgRlRfQVJSQVlfQ09QWSggdCwgcywgd2lkdGggKTsKKworICAgICAgICAgIHMgKz0gc291cmNlLT5waXRjaDsKKyAgICAgICAgICB0ICs9IHRhcmdldC0+cGl0Y2g7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfR1JBWTI6CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICB0YXJnZXQtPm51bV9ncmF5cyA9IDQ7CisKKyAgICAgICAgZm9yICggaSA9IHNvdXJjZS0+cm93czsgaSA+IDA7IGktLSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlKiAgc3MgPSBzOworICAgICAgICAgIEZUX0J5dGUqICB0dCA9IHQ7CisgICAgICAgICAgRlRfVUludCAgIGo7CisKKworICAgICAgICAgIC8qIGdldCB0aGUgZnVsbCBieXRlcyAqLworICAgICAgICAgIGZvciAoIGogPSBzb3VyY2UtPndpZHRoID4+IDI7IGogPiAwOyBqLS0gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgdmFsID0gc3NbMF07CisKKworICAgICAgICAgICAgdHRbMF0gPSAoRlRfQnl0ZSkoICggdmFsICYgMHhDMCApID4+IDYgKTsKKyAgICAgICAgICAgIHR0WzFdID0gKEZUX0J5dGUpKCAoIHZhbCAmIDB4MzAgKSA+PiA0ICk7CisgICAgICAgICAgICB0dFsyXSA9IChGVF9CeXRlKSggKCB2YWwgJiAweDBDICkgPj4gMiApOworICAgICAgICAgICAgdHRbM10gPSAoRlRfQnl0ZSkoICggdmFsICYgMHgwMyApICk7CisKKyAgICAgICAgICAgIHNzICs9IDE7CisgICAgICAgICAgICB0dCArPSA0OworICAgICAgICAgIH0KKworICAgICAgICAgIGogPSBzb3VyY2UtPndpZHRoICYgMzsKKyAgICAgICAgICBpZiAoIGogPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHZhbCA9IHNzWzBdOworCisKKyAgICAgICAgICAgIGZvciAoIDsgaiA+IDA7IGotLSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHR0WzBdICA9IChGVF9CeXRlKSggKCB2YWwgJiAweEMwICkgPj4gNiApOworICAgICAgICAgICAgICB2YWwgIDw8PSAyOworICAgICAgICAgICAgICB0dCAgICArPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHMgKz0gc291cmNlLT5waXRjaDsKKyAgICAgICAgICB0ICs9IHRhcmdldC0+cGl0Y2g7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfR1JBWTQ6CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICB0YXJnZXQtPm51bV9ncmF5cyA9IDE2OworCisgICAgICAgIGZvciAoIGkgPSBzb3VyY2UtPnJvd3M7IGkgPiAwOyBpLS0gKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogIHNzID0gczsKKyAgICAgICAgICBGVF9CeXRlKiAgdHQgPSB0OworICAgICAgICAgIEZUX1VJbnQgICBqOworCisKKyAgICAgICAgICAvKiBnZXQgdGhlIGZ1bGwgYnl0ZXMgKi8KKyAgICAgICAgICBmb3IgKCBqID0gc291cmNlLT53aWR0aCA+PiAxOyBqID4gMDsgai0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHZhbCA9IHNzWzBdOworCisKKyAgICAgICAgICAgIHR0WzBdID0gKEZUX0J5dGUpKCAoIHZhbCAmIDB4RjAgKSA+PiA0ICk7CisgICAgICAgICAgICB0dFsxXSA9IChGVF9CeXRlKSggKCB2YWwgJiAweDBGICkgKTsKKworICAgICAgICAgICAgc3MgKz0gMTsKKyAgICAgICAgICAgIHR0ICs9IDI7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBzb3VyY2UtPndpZHRoICYgMSApCisgICAgICAgICAgICB0dFswXSA9IChGVF9CeXRlKSggKCBzc1swXSAmIDB4RjAgKSA+PiA0ICk7CisKKyAgICAgICAgICBzICs9IHNvdXJjZS0+cGl0Y2g7CisgICAgICAgICAgdCArPSB0YXJnZXQtPnBpdGNoOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworCisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0JHUkE6CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICB0YXJnZXQtPm51bV9ncmF5cyA9IDI1NjsKKworICAgICAgICBmb3IgKCBpID0gc291cmNlLT5yb3dzOyBpID4gMDsgaS0tICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0J5dGUqICBzcyA9IHM7CisgICAgICAgICAgRlRfQnl0ZSogIHR0ID0gdDsKKyAgICAgICAgICBGVF9VSW50ICAgajsKKworCisgICAgICAgICAgZm9yICggaiA9IHNvdXJjZS0+d2lkdGg7IGogPiAwOyBqLS0gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHR0WzBdID0gZnRfZ3JheV9mb3JfcHJlbXVsdGlwbGllZF9zcmdiX2JncmEoIHNzICk7CisKKyAgICAgICAgICAgIHNzICs9IDQ7CisgICAgICAgICAgICB0dCArPSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIHMgKz0gc291cmNlLT5waXRjaDsKKyAgICAgICAgICB0ICs9IHRhcmdldC0+cGl0Y2g7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiaXRtYXAuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhTbG90X093bl9CaXRtYXAoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBpZiAoIHNsb3QgJiYgc2xvdC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgICAmJgorICAgICAgICAgISggc2xvdC0+aW50ZXJuYWwtPmZsYWdzICYgRlRfR0xZUEhfT1dOX0JJVE1BUCApICkKKyAgICB7CisgICAgICBGVF9CaXRtYXAgIGJpdG1hcDsKKyAgICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgICAgRlRfQml0bWFwX0luaXQoICZiaXRtYXAgKTsKKyAgICAgIGVycm9yID0gRlRfQml0bWFwX0NvcHkoIHNsb3QtPmxpYnJhcnksICZzbG90LT5iaXRtYXAsICZiaXRtYXAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIHNsb3QtPmJpdG1hcCA9IGJpdG1hcDsKKyAgICAgIHNsb3QtPmludGVybmFsLT5mbGFncyB8PSBGVF9HTFlQSF9PV05fQklUTUFQOworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiaXRtYXAuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfQml0bWFwX0RvbmUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICpiaXRtYXAgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CisKKyAgICBpZiAoICFiaXRtYXAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBGVF9GUkVFKCBiaXRtYXAtPmJ1ZmZlciApOworICAgICpiaXRtYXAgPSBudWxsX2JpdG1hcDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGNhbGMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGNhbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2EwZTFkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Y2FsYy5jCkBAIC0wLDAgKzEsOTUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGNhbGMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3VwcG9ydCBmb3IgMS1jb21wbGVtZW50IGFyaXRobWV0aWMgaGFzIGJlZW4gdG90YWxseSBkcm9wcGVkIGluIHRoaXMgICovCisgIC8qIHJlbGVhc2UuICBZb3UgY2FuIHN0aWxsIHdyaXRlIHlvdXIgb3duIGNvZGUgaWYgeW91IG5lZWQgaXQuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbXBsZW1lbnRpbmcgYmFzaWMgY29tcHV0YXRpb24gcm91dGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZUX011bERpdigpLCBGVF9NdWxGaXgoKSwgRlRfRGl2Rml4KCksIEZUX1JvdW5kRml4KCksIEZUX0NlaWxGaXgoKSwgICAqLworICAvKiBhbmQgRlRfRmxvb3JGaXgoKSBhcmUgZGVjbGFyZWQgaW4gZnJlZXR5cGUuaC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfR0xZUEhfSAorI2luY2x1ZGUgRlRfVFJJR09OT01FVFJZX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKworI2lmZGVmIEZUX01VTEZJWF9BU1NFTUJMRVIKKyN1bmRlZiBGVF9NdWxGaXgKKyNlbmRpZgorCisvKiB3ZSBuZWVkIHRvIGVtdWxhdGUgYSA2NC1iaXQgZGF0YSB0eXBlIGlmIGEgcmVhbCBvbmUgaXNuJ3QgYXZhaWxhYmxlICovCisKKyNpZm5kZWYgRlRfTE9ORzY0CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0ludDY0XworICB7CisgICAgRlRfVUludDMyICBsbzsKKyAgICBGVF9VSW50MzIgIGhpOworCisgIH0gRlRfSW50NjQ7CisKKyNlbmRpZiAvKiAhRlRfTE9ORzY0ICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jYWxjCisKKworICAvKiB0cmFuc2ZlciBzaWduIGxlYXZpbmcgYSBwb3NpdGl2ZSBudW1iZXIgKi8KKyNkZWZpbmUgRlRfTU9WRV9TSUdOKCB4LCBzICkgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICBcCisgICAgaWYgKCB4IDwgMCApICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeCA9IC14OyAgICAgICAgICAgICAgICBcCisgICAgICBzID0gLXM7ICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FTkRfU1RNTlQKKworICAvKiBUaGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciAqLworICAvKiBGVF9MT05HNjQgaXMgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKKyAgRlRfUm91bmRGaXgoIEZUX0ZpeGVkICBhICkKKyAgeworICAgIHJldHVybiBhID49IDAgPyAgICggYSArIDB4ODAwMEwgKSAmIH4weEZGRkZMCisgICAgICAgICAgICAgICAgICA6IC0oKC1hICsgMHg4MDAwTCApICYgfjB4RkZGRkwgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApCisgIHsKKyAgICByZXR1cm4gYSA+PSAwID8gICAoIGEgKyAweEZGRkZMICkgJiB+MHhGRkZGTAorICAgICAgICAgICAgICAgICAgOiAtKCgtYSArIDB4RkZGRkwgKSAmIH4weEZGRkZMICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKKyAgRlRfRmxvb3JGaXgoIEZUX0ZpeGVkICBhICkKKyAgeworICAgIHJldHVybiBhID49IDAgPyAgIGEgJiB+MHhGRkZGTAorICAgICAgICAgICAgICAgICAgOiAtKCgtYSkgJiB+MHhGRkZGTCApOworICB9CisKKyNpZm5kZWYgRlRfTVNCCisKKyAgRlRfQkFTRV9ERUYgKCBGVF9JbnQgKQorICBGVF9NU0IoIEZUX1VJbnQzMiB6ICkKKyAgeworICAgIEZUX0ludCAgc2hpZnQgPSAwOworCisKKyAgICAvKiBkZXRlcm1pbmUgbXNiIGJpdCBpbmRleCBpbiBgc2hpZnQnICovCisgICAgaWYgKCB6ICYgMHhGRkZGMDAwMFVMICkKKyAgICB7CisgICAgICB6ICAgICA+Pj0gMTY7CisgICAgICBzaGlmdCAgKz0gMTY7CisgICAgfQorICAgIGlmICggeiAmIDB4MDAwMEZGMDBVTCApCisgICAgeworICAgICAgeiAgICAgPj49IDg7CisgICAgICBzaGlmdCAgKz0gODsKKyAgICB9CisgICAgaWYgKCB6ICYgMHgwMDAwMDBGMFVMICkKKyAgICB7CisgICAgICB6ICAgICA+Pj0gNDsKKyAgICAgIHNoaWZ0ICArPSA0OworICAgIH0KKyAgICBpZiAoIHogJiAweDAwMDAwMDBDVUwgKQorICAgIHsKKyAgICAgIHogICAgID4+PSAyOworICAgICAgc2hpZnQgICs9IDI7CisgICAgfQorICAgIGlmICggeiAmIDB4MDAwMDAwMDJVTCApCisgICAgeworICAgLyogeiAgICAgPj49IDE7ICovCisgICAgICBzaGlmdCAgKz0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gc2hpZnQ7CisgIH0KKworI2VuZGlmIC8qICFGVF9NU0IgKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfRml4ZWQgKQorICBGVF9IeXBvdCggRlRfRml4ZWQgIHgsCisgICAgICAgICAgICBGVF9GaXhlZCAgeSApCisgIHsKKyAgICBGVF9WZWN0b3IgIHY7CisKKworICAgIHYueCA9IHg7CisgICAgdi55ID0geTsKKworICAgIHJldHVybiBGVF9WZWN0b3JfTGVuZ3RoKCAmdiApOworICB9CisKKworI2lmZGVmIEZUX0xPTkc2NAorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX011bERpdiggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgRlRfTG9uZyAgYl8sCisgICAgICAgICAgICAgRlRfTG9uZyAgY18gKQorICB7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50NjQgIGEsIGIsIGMsIGQ7CisgICAgRlRfTG9uZyAgICBkXzsKKworCisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7CisKKyAgICBhID0gKEZUX1VJbnQ2NClhXzsKKyAgICBiID0gKEZUX1VJbnQ2NCliXzsKKyAgICBjID0gKEZUX1VJbnQ2NCljXzsKKworICAgIGQgPSBjID4gMCA/ICggYSAqIGIgKyAoIGMgPj4gMSApICkgLyBjCisgICAgICAgICAgICAgIDogMHg3RkZGRkZGRlVMOworCisgICAgZF8gPSAoRlRfTG9uZylkOworCisgICAgcmV0dXJuIHMgPCAwID8gLWRfIDogZF87CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfTG9uZyApCisgIEZUX011bERpdl9Ob19Sb3VuZCggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYl8sCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgY18gKQorICB7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50NjQgIGEsIGIsIGMsIGQ7CisgICAgRlRfTG9uZyAgICBkXzsKKworCisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7CisKKyAgICBhID0gKEZUX1VJbnQ2NClhXzsKKyAgICBiID0gKEZUX1VJbnQ2NCliXzsKKyAgICBjID0gKEZUX1VJbnQ2NCljXzsKKworICAgIGQgPSBjID4gMCA/IGEgKiBiIC8gYworICAgICAgICAgICAgICA6IDB4N0ZGRkZGRkZVTDsKKworICAgIGRfID0gKEZUX0xvbmcpZDsKKworICAgIHJldHVybiBzIDwgMCA/IC1kXyA6IGRfOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfTXVsRml4KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXyApCisgIHsKKyNpZmRlZiBGVF9NVUxGSVhfQVNTRU1CTEVSCisKKyAgICByZXR1cm4gRlRfTVVMRklYX0FTU0VNQkxFUiggYV8sIGJfICk7CisKKyNlbHNlCisKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQ2NCAgYSwgYiwgYzsKKyAgICBGVF9Mb25nICAgIGNfOworCisKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOworCisgICAgYSA9IChGVF9VSW50NjQpYV87CisgICAgYiA9IChGVF9VSW50NjQpYl87CisKKyAgICBjID0gKCBhICogYiArIDB4ODAwMFVMICkgPj4gMTY7CisKKyAgICBjXyA9IChGVF9Mb25nKWM7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtY18gOiBjXzsKKworI2VuZGlmIC8qIEZUX01VTEZJWF9BU1NFTUJMRVIgKi8KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX0RpdkZpeCggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgRlRfTG9uZyAgYl8gKQorICB7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50NjQgIGEsIGIsIHE7CisgICAgRlRfTG9uZyAgICBxXzsKKworCisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKworICAgIGEgPSAoRlRfVUludDY0KWFfOworICAgIGIgPSAoRlRfVUludDY0KWJfOworCisgICAgcSA9IGIgPiAwID8gKCAoIGEgPDwgMTYgKSArICggYiA+PiAxICkgKSAvIGIKKyAgICAgICAgICAgICAgOiAweDdGRkZGRkZGVUw7CisKKyAgICBxXyA9IChGVF9Mb25nKXE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtcV8gOiBxXzsKKyAgfQorCisKKyNlbHNlIC8qICFGVF9MT05HNjQgKi8KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X211bHRvNjQoIEZUX1VJbnQzMiAgeCwKKyAgICAgICAgICAgICAgRlRfVUludDMyICB5LAorICAgICAgICAgICAgICBGVF9JbnQ2NCAgKnogKQorICB7CisgICAgRlRfVUludDMyICBsbzEsIGhpMSwgbG8yLCBoaTIsIGxvLCBoaSwgaTEsIGkyOworCisKKyAgICBsbzEgPSB4ICYgMHgwMDAwRkZGRlU7ICBoaTEgPSB4ID4+IDE2OworICAgIGxvMiA9IHkgJiAweDAwMDBGRkZGVTsgIGhpMiA9IHkgPj4gMTY7CisKKyAgICBsbyA9IGxvMSAqIGxvMjsKKyAgICBpMSA9IGxvMSAqIGhpMjsKKyAgICBpMiA9IGxvMiAqIGhpMTsKKyAgICBoaSA9IGhpMSAqIGhpMjsKKworICAgIC8qIENoZWNrIGNhcnJ5IG92ZXJmbG93IG9mIGkxICsgaTIgKi8KKyAgICBpMSArPSBpMjsKKyAgICBoaSArPSAoRlRfVUludDMyKSggaTEgPCBpMiApIDw8IDE2OworCisgICAgaGkgKz0gaTEgPj4gMTY7CisgICAgaTEgID0gaTEgPDwgMTY7CisKKyAgICAvKiBDaGVjayBjYXJyeSBvdmVyZmxvdyBvZiBpMSArIGxvICovCisgICAgbG8gKz0gaTE7CisgICAgaGkgKz0gKCBsbyA8IGkxICk7CisKKyAgICB6LT5sbyA9IGxvOworICAgIHotPmhpID0gaGk7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50MzIKKyAgZnRfZGl2NjRieTMyKCBGVF9VSW50MzIgIGhpLAorICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgbG8sCisgICAgICAgICAgICAgICAgRlRfVUludDMyICB5ICkKKyAgeworICAgIEZUX1VJbnQzMiAgciwgcTsKKyAgICBGVF9JbnQgICAgIGk7CisKKworICAgIGlmICggaGkgPj0geSApCisgICAgICByZXR1cm4gKEZUX1VJbnQzMikweDdGRkZGRkZGTDsKKworICAgIC8qIFdlIHNoaWZ0IGFzIG1hbnkgYml0cyBhcyB3ZSBjYW4gaW50byB0aGUgaGlnaCByZWdpc3RlciwgcGVyZm9ybSAgICAgKi8KKyAgICAvKiAzMi1iaXQgZGl2aXNpb24gd2l0aCBtb2R1bG8gdGhlcmUsIHRoZW4gd29yayB0aHJvdWdoIHRoZSByZW1haW5pbmcgICovCisgICAgLyogYml0cyB3aXRoIGxvbmcgZGl2aXNpb24uIFRoaXMgb3B0aW1pemF0aW9uIGlzIGVzcGVjaWFsbHkgbm90aWNlYWJsZSAqLworICAgIC8qIGZvciBzbWFsbGVyIGRpdmlkZW5kcyB0aGF0IGJhcmVseSB1c2UgdGhlIGhpZ2ggcmVnaXN0ZXIuICAgICAgICAgICAgKi8KKworICAgIGkgPSAzMSAtIEZUX01TQiggaGkgKTsKKyAgICByID0gKCBoaSA8PCBpICkgfCAoIGxvID4+ICggMzIgLSBpICkgKTsgbG8gPDw9IGk7IC8qIGxlZnQgNjQtYml0IHNoaWZ0ICovCisgICAgcSA9IHIgLyB5OworICAgIHIgLT0gcSAqIHk7ICAgLyogcmVtYWluZGVyICovCisKKyAgICBpID0gMzIgLSBpOyAgIC8qIGJpdHMgcmVtYWluaW5nIGluIGxvdyByZWdpc3RlciAqLworICAgIGRvCisgICAgeworICAgICAgcSA8PD0gMTsKKyAgICAgIHIgICA9ICggciA8PCAxICkgfCAoIGxvID4+IDMxICk7IGxvIDw8PSAxOworCisgICAgICBpZiAoIHIgPj0geSApCisgICAgICB7CisgICAgICAgIHIgLT0geTsKKyAgICAgICAgcSB8PSAxOworICAgICAgfQorICAgIH0gd2hpbGUgKCAtLWkgKTsKKworICAgIHJldHVybiBxOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBGVF9BZGQ2NCggRlRfSW50NjQqICB4LAorICAgICAgICAgICAgRlRfSW50NjQqICB5LAorICAgICAgICAgICAgRlRfSW50NjQgICp6ICkKKyAgeworICAgIEZUX1VJbnQzMiAgbG8sIGhpOworCisKKyAgICBsbyA9IHgtPmxvICsgeS0+bG87CisgICAgaGkgPSB4LT5oaSArIHktPmhpICsgKCBsbyA8IHgtPmxvICk7CisKKyAgICB6LT5sbyA9IGxvOworICAgIHotPmhpID0gaGk7CisgIH0KKworCisgIC8qICBUaGUgRlRfTXVsRGl2IGZ1bmN0aW9uIGhhcyBiZWVuIG9wdGltaXplZCB0aGFua3MgdG8gaWRlYXMgZnJvbSAgICAgKi8KKyAgLyogIEdyYWhhbSBBc2hlciBhbmQgQWxleGVpIFBvZHRlbGV6aG5pa292LiAgVGhlIHRyaWNrIGlzIHRvIG9wdGltaXplICAqLworICAvKiAgYSByYXRoZXIgY29tbW9uIGNhc2Ugd2hlbiBldmVyeXRoaW5nIGZpdHMgd2l0aGluIDMyLWJpdHMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFdlIGNvbXB1dGUgJ2EqYitjLzInLCB0aGVuIGRpdmlkZSBpdCBieSAnYycgKGFsbCBwb3NpdGl2ZSB2YWx1ZXMpLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBUaGUgcHJvZHVjdCBvZiB0d28gcG9zaXRpdmUgbnVtYmVycyBuZXZlciBleGNlZWRzIHRoZSBzcXVhcmUgb2YgICAgKi8KKyAgLyogIGl0cyBtZWFuIHZhbHVlcy4gIFRoZXJlZm9yZSwgd2UgYWx3YXlzIGF2b2lkIHRoZSBvdmVyZmxvdyBieSAgICAgICAqLworICAvKiAgaW1wb3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgKGEgKyBiKSAvIDIgPD0gc3FydChYIC0gYy8yKSAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICB3aGVyZSBYID0gMl4zMiAtIDEsIHRoZSBtYXhpbXVtIHVuc2lnbmVkIDMyLWJpdCB2YWx1ZSwgYW5kIHVzaW5nICAgKi8KKyAgLyogIHVuc2lnbmVkIGFyaXRobWV0aWMuICBOb3cgd2UgcmVwbGFjZSBgc3FydCcgd2l0aCBhIGxpbmVhciBmdW5jdGlvbiAqLworICAvKiAgdGhhdCBpcyBzbWFsbGVyIG9yIGVxdWFsIGZvciBhbGwgdmFsdWVzIG9mIGMgaW4gdGhlIGludGVydmFsICAgICAgICovCisgIC8qICBbMDtYLzJdOyBpdCBzaG91bGQgYmUgZXF1YWwgdG8gc3FydChYKSBhbmQgc3FydCgzWC80KSBhdCB0aGUgICAgICAgKi8KKyAgLyogIGVuZHBvaW50cy4gIFN1YnN0aXR1dGluZyB0aGUgbGluZWFyIHNvbHV0aW9uIGFuZCBleHBsaWNpdCBudW1iZXJzICAqLworICAvKiAgd2UgZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSArIGIgPD0gMTMxMDcxLjk5IC0gYyAvIDEyMjI5MS44NCAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBJbiBwcmFjdGljZSwgd2Ugc2hvdWxkIHVzZSBhIGZhc3RlciBhbmQgZXZlbiBzdHJvbmdlciBpbmVxdWFsaXR5ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhICsgYiA8PSAxMzEwNzEgLSAoYyA+PiAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIG9yLCBhbHRlcm5hdGl2ZWx5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGEgKyBiIDw9IDEyOTg5NCAtIChjID4+IDE3KSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRlRfTXVsRml4LCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgb3B0aW1pemVkIGZvciBhIHNtYWxsIHZhbHVlIG9mICAgICovCisgIC8qICB0aGUgZmlyc3QgYXJndW1lbnQsIHdoZW4gdGhlIHNlY29uZCBhcmd1bWVudCBjYW4gYmUgbXVjaCBsYXJnZXIuICAgKi8KKyAgLyogIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNjYWxpbmcgdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgdGhlIGxpbWl0ICAqLworICAvKiAgaW4gdGhlIGFib3ZlIGluZXF1YWxpdGllcy4gIEZvciBleGFtcGxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSArIChiID4+IDgpIDw9ICgxMzEwNzEgPj4gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBjb3ZlcnMgdGhlIHByYWN0aWNhbCByYW5nZSBvZiB1c2UuIFRoZSBhY3R1YWwgdGVzdCBiZWxvdyBpcyBhIGJpdCAgKi8KKyAgLyogIHRpZ2h0ZXIgdG8gYXZvaWQgdGhlIGJvcmRlciBjYXNlIG92ZXJmbG93cy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBJbiB0aGUgY2FzZSBvZiBGVF9EaXZGaXgsIHRoZSBleGFjdCBvdmVyZmxvdyBjaGVjayAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDw8IDE2IDw9IFggLSBjLzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIGlzIHNjYWxlZCBkb3duIGJ5IDJeMTYgYW5kIHdlIHVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGEgPD0gNjU1MzUgLSAoYyA+PiAxNykgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfTXVsRGl2KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXywKKyAgICAgICAgICAgICBGVF9Mb25nICBjXyApCisgIHsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQzMiAgYSwgYiwgYzsKKworCisgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KKworICAgIGlmICggYV8gPT0gMCB8fCBiXyA9PSBjXyApCisgICAgICByZXR1cm4gYV87CisKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOworICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKKworICAgIGEgPSAoRlRfVUludDMyKWFfOworICAgIGIgPSAoRlRfVUludDMyKWJfOworICAgIGMgPSAoRlRfVUludDMyKWNfOworCisgICAgaWYgKCBjID09IDAgKQorICAgICAgYSA9IDB4N0ZGRkZGRkZVTDsKKworICAgIGVsc2UgaWYgKCBhICsgYiA8PSAxMjk4OTRVTCAtICggYyA+PiAxNyApICkKKyAgICAgIGEgPSAoIGEgKiBiICsgKCBjID4+IDEgKSApIC8gYzsKKworICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9JbnQ2NCAgdGVtcCwgdGVtcDI7CisKKworICAgICAgZnRfbXVsdG82NCggYSwgYiwgJnRlbXAgKTsKKworICAgICAgdGVtcDIuaGkgPSAwOworICAgICAgdGVtcDIubG8gPSBjID4+IDE7CisKKyAgICAgIEZUX0FkZDY0KCAmdGVtcCwgJnRlbXAyLCAmdGVtcCApOworCisgICAgICAvKiBsYXN0IGF0dGVtcHQgdG8gZGl0Y2ggbG9uZyBkaXZpc2lvbiAqLworICAgICAgYSA9IHRlbXAuaGkgPT0gMCA/IHRlbXAubG8gLyBjCisgICAgICAgICAgICAgICAgICAgICAgIDogZnRfZGl2NjRieTMyKCB0ZW1wLmhpLCB0ZW1wLmxvLCBjICk7CisgICAgfQorCisgICAgYV8gPSAoRlRfTG9uZylhOworCisgICAgcmV0dXJuIHMgPCAwID8gLWFfIDogYV87CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9Mb25nICkKKyAgRlRfTXVsRGl2X05vX1JvdW5kKCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBiXywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBjXyApCisgIHsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQzMiAgYSwgYiwgYzsKKworCisgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KKworICAgIGlmICggYV8gPT0gMCB8fCBiXyA9PSBjXyApCisgICAgICByZXR1cm4gYV87CisKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOworICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKKworICAgIGEgPSAoRlRfVUludDMyKWFfOworICAgIGIgPSAoRlRfVUludDMyKWJfOworICAgIGMgPSAoRlRfVUludDMyKWNfOworCisgICAgaWYgKCBjID09IDAgKQorICAgICAgYSA9IDB4N0ZGRkZGRkZVTDsKKworICAgIGVsc2UgaWYgKCBhICsgYiA8PSAxMzEwNzFVTCApCisgICAgICBhID0gYSAqIGIgLyBjOworCisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX0ludDY0ICB0ZW1wOworCisKKyAgICAgIGZ0X211bHRvNjQoIGEsIGIsICZ0ZW1wICk7CisKKyAgICAgIC8qIGxhc3QgYXR0ZW1wdCB0byBkaXRjaCBsb25nIGRpdmlzaW9uICovCisgICAgICBhID0gdGVtcC5oaSA9PSAwID8gdGVtcC5sbyAvIGMKKyAgICAgICAgICAgICAgICAgICAgICAgOiBmdF9kaXY2NGJ5MzIoIHRlbXAuaGksIHRlbXAubG8sIGMgKTsKKyAgICB9CisKKyAgICBhXyA9IChGVF9Mb25nKWE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX011bEZpeCggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgRlRfTG9uZyAgYl8gKQorICB7CisjaWZkZWYgRlRfTVVMRklYX0FTU0VNQkxFUgorCisgICAgcmV0dXJuIEZUX01VTEZJWF9BU1NFTUJMRVIoIGFfLCBiXyApOworCisjZWxpZiAwCisKKyAgICAvKgorICAgICAqICBUaGlzIGNvZGUgaXMgbm9ucG9ydGFibGUuICBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgKgorICAgICAqICBIb3dldmVyLCBvbiBhIHBsYXRmb3JtIHdoZXJlIHJpZ2h0LXNoaWZ0IG9mIGEgc2lnbmVkIHF1YW50aXR5IGZpbGxzCisgICAgICogIHRoZSBsZWZ0bW9zdCBiaXRzIGJ5IGNvcHlpbmcgdGhlIHNpZ24gYml0LCBpdCBtaWdodCBiZSBmYXN0ZXIuCisgICAgICovCisKKyAgICBGVF9Mb25nICAgIHNhLCBzYjsKKyAgICBGVF9VSW50MzIgIGEsIGI7CisKKworICAgIGlmICggYV8gPT0gMCB8fCBiXyA9PSAweDEwMDAwTCApCisgICAgICByZXR1cm4gYV87CisKKyAgICAvKgorICAgICAqICBUaGlzIGlzIGEgY2xldmVyIHdheSBvZiBjb252ZXJ0aW5nIGEgc2lnbmVkIG51bWJlciBgYScgaW50byBpdHMKKyAgICAgKiAgYWJzb2x1dGUgdmFsdWUgKHN0b3JlZCBiYWNrIGludG8gYGEnKSBhbmQgaXRzIHNpZ24uICBUaGUgc2lnbiBpcworICAgICAqICBzdG9yZWQgaW4gYHNhJzsgMCBtZWFucyBgYScgd2FzIHBvc2l0aXZlIG9yIHplcm8sIGFuZCAtMSBtZWFucyBgYScKKyAgICAgKiAgd2FzIG5lZ2F0aXZlLiAgKFNpbWlsYXJseSBmb3IgYGInIGFuZCBgc2InKS4KKyAgICAgKgorICAgICAqICBVbmZvcnR1bmF0ZWx5LCBpdCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG5vdCBwb3J0YWJseSkuCisgICAgICoKKyAgICAgKiAgSXQgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCByaWdodC1zaGlmdCBvbiBhIG5lZ2F0aXZlIHNpZ25lZCB2YWx1ZQorICAgICAqICBmaWxscyB0aGUgbGVmdG1vc3QgYml0cyBieSBjb3B5aW5nIHRoZSBzaWduIGJpdC4gIFRoaXMgaXMgd3JvbmcuCisgICAgICogIEFjY29yZGluZyB0byBLJlIgMm5kIGVkLCBzZWN0aW9uIGBBNy44IFNoaWZ0IE9wZXJhdG9ycycgb24gcGFnZSAyMDYsCisgICAgICogIHRoZSByZXN1bHQgb2YgcmlnaHQtc2hpZnQgb2YgYSBuZWdhdGl2ZSBzaWduZWQgdmFsdWUgaXMKKyAgICAgKiAgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBmaWxscyB0aGUKKyAgICAgKiAgbGVmdG1vc3QgYml0cyB3aXRoIDBzIChpLmUuLCBpdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGFuIHVuc2lnbmVkCisgICAgICogIHJpZ2h0IHNoaWZ0KS4gIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBhJyBpcyBuZWdhdGl2ZSwgYHNhJyBlbmRzIHVwCisgICAgICogIHdpdGggdGhlIHZhbHVlIDEgcmF0aGVyIHRoYW4gLTEuICBBZnRlciB0aGF0LCBldmVyeXRoaW5nIGVsc2UgZ29lcworICAgICAqICB3cm9uZy4KKyAgICAgKi8KKyAgICBzYSA9ICggYV8gPj4gKCBzaXplb2YgKCBhXyApICogOCAtIDEgKSApOworICAgIGEgID0gKCBhXyBeIHNhICkgLSBzYTsKKyAgICBzYiA9ICggYl8gPj4gKCBzaXplb2YgKCBiXyApICogOCAtIDEgKSApOworICAgIGIgID0gKCBiXyBeIHNiICkgLSBzYjsKKworICAgIGEgPSAoRlRfVUludDMyKWFfOworICAgIGIgPSAoRlRfVUludDMyKWJfOworCisgICAgaWYgKCBhICsgKCBiID4+IDggKSA8PSA4MTkwVUwgKQorICAgICAgYSA9ICggYSAqIGIgKyAweDgwMDBVICkgPj4gMTY7CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1VJbnQzMiAgYWwgPSBhICYgMHhGRkZGVUw7CisKKworICAgICAgYSA9ICggYSA+PiAxNiApICogYiArIGFsICogKCBiID4+IDE2ICkgKworICAgICAgICAgICggKCBhbCAqICggYiAmIDB4RkZGRlVMICkgKyAweDgwMDBVTCApID4+IDE2ICk7CisgICAgfQorCisgICAgc2EgXj0gc2I7CisgICAgYSAgID0gKCBhIF4gc2EgKSAtIHNhOworCisgICAgcmV0dXJuIChGVF9Mb25nKWE7CisKKyNlbHNlIC8qIDAgKi8KKworICAgIEZUX0ludCAgICAgcyA9IDE7CisgICAgRlRfVUludDMyICBhLCBiOworCisKKyAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWxsb3cgNjQtYml0IGFyZ3VtZW50cyAqLworCisgICAgaWYgKCBhXyA9PSAwIHx8IGJfID09IDB4MTAwMDBMICkKKyAgICAgIHJldHVybiBhXzsKKworICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7CisKKyAgICBhID0gKEZUX1VJbnQzMilhXzsKKyAgICBiID0gKEZUX1VJbnQzMiliXzsKKworICAgIGlmICggYSArICggYiA+PiA4ICkgPD0gODE5MFVMICkKKyAgICAgIGEgPSAoIGEgKiBiICsgMHg4MDAwVUwgKSA+PiAxNjsKKyAgICBlbHNlCisgICAgeworICAgICAgRlRfVUludDMyICBhbCA9IGEgJiAweEZGRkZVTDsKKworCisgICAgICBhID0gKCBhID4+IDE2ICkgKiBiICsgYWwgKiAoIGIgPj4gMTYgKSArCisgICAgICAgICAgKCAoIGFsICogKCBiICYgMHhGRkZGVUwgKSArIDB4ODAwMFVMICkgPj4gMTYgKTsKKyAgICB9CisKKyAgICBhXyA9IChGVF9Mb25nKWE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKKworI2VuZGlmIC8qIDAgKi8KKworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfRGl2Rml4KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXyApCisgIHsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQzMiAgYSwgYiwgcTsKKyAgICBGVF9Mb25nICAgIHFfOworCisKKyAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWxsb3cgNjQtYml0IGFyZ3VtZW50cyAqLworCisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKworICAgIGEgPSAoRlRfVUludDMyKWFfOworICAgIGIgPSAoRlRfVUludDMyKWJfOworCisgICAgaWYgKCBiID09IDAgKQorICAgIHsKKyAgICAgIC8qIGNoZWNrIGZvciBkaXZpc2lvbiBieSAwICovCisgICAgICBxID0gMHg3RkZGRkZGRlVMOworICAgIH0KKyAgICBlbHNlIGlmICggYSA8PSA2NTUzNVVMIC0gKCBiID4+IDE3ICkgKQorICAgIHsKKyAgICAgIC8qIGNvbXB1dGUgcmVzdWx0IGRpcmVjdGx5ICovCisgICAgICBxID0gKCAoIGEgPDwgMTYgKSArICggYiA+PiAxICkgKSAvIGI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiB3ZSBuZWVkIG1vcmUgYml0czsgd2UgaGF2ZSB0byBkbyBpdCBieSBoYW5kICovCisgICAgICBGVF9JbnQ2NCAgdGVtcCwgdGVtcDI7CisKKworICAgICAgdGVtcC5oaSAgPSBhID4+IDE2OworICAgICAgdGVtcC5sbyAgPSBhIDw8IDE2OworICAgICAgdGVtcDIuaGkgPSAwOworICAgICAgdGVtcDIubG8gPSBiID4+IDE7CisKKyAgICAgIEZUX0FkZDY0KCAmdGVtcCwgJnRlbXAyLCAmdGVtcCApOworICAgICAgcSA9IGZ0X2RpdjY0YnkzMiggdGVtcC5oaSwgdGVtcC5sbywgYiApOworICAgIH0KKworICAgIHFfID0gKEZUX0xvbmcpcTsKKworICAgIHJldHVybiBzIDwgMCA/IC1xXyA6IHFfOworICB9CisKKworI2VuZGlmIC8qICFGVF9MT05HNjQgKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX01hdHJpeF9NdWx0aXBseSggY29uc3QgRlRfTWF0cml4KiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXggICAgICAgICpiICkKKyAgeworICAgIEZUX0ZpeGVkICB4eCwgeHksIHl4LCB5eTsKKworCisgICAgaWYgKCAhYSB8fCAhYiApCisgICAgICByZXR1cm47CisKKyAgICB4eCA9IEZUX011bEZpeCggYS0+eHgsIGItPnh4ICkgKyBGVF9NdWxGaXgoIGEtPnh5LCBiLT55eCApOworICAgIHh5ID0gRlRfTXVsRml4KCBhLT54eCwgYi0+eHkgKSArIEZUX011bEZpeCggYS0+eHksIGItPnl5ICk7CisgICAgeXggPSBGVF9NdWxGaXgoIGEtPnl4LCBiLT54eCApICsgRlRfTXVsRml4KCBhLT55eSwgYi0+eXggKTsKKyAgICB5eSA9IEZUX011bEZpeCggYS0+eXgsIGItPnh5ICkgKyBGVF9NdWxGaXgoIGEtPnl5LCBiLT55eSApOworCisgICAgYi0+eHggPSB4eDsgIGItPnh5ID0geHk7CisgICAgYi0+eXggPSB5eDsgIGItPnl5ID0geXk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9NYXRyaXhfSW52ZXJ0KCBGVF9NYXRyaXgqICBtYXRyaXggKQorICB7CisgICAgRlRfUG9zICBkZWx0YSwgeHgsIHl5OworCisKKyAgICBpZiAoICFtYXRyaXggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAvKiBjb21wdXRlIGRpc2NyaW1pbmFudCAqLworICAgIGRlbHRhID0gRlRfTXVsRml4KCBtYXRyaXgtPnh4LCBtYXRyaXgtPnl5ICkgLQorICAgICAgICAgICAgRlRfTXVsRml4KCBtYXRyaXgtPnh5LCBtYXRyaXgtPnl4ICk7CisKKyAgICBpZiAoICFkZWx0YSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsgIC8qIG1hdHJpeCBjYW4ndCBiZSBpbnZlcnRlZCAqLworCisgICAgbWF0cml4LT54eSA9IC0gRlRfRGl2Rml4KCBtYXRyaXgtPnh5LCBkZWx0YSApOworICAgIG1hdHJpeC0+eXggPSAtIEZUX0RpdkZpeCggbWF0cml4LT55eCwgZGVsdGEgKTsKKworICAgIHh4ID0gbWF0cml4LT54eDsKKyAgICB5eSA9IG1hdHJpeC0+eXk7CisKKyAgICBtYXRyaXgtPnh4ID0gRlRfRGl2Rml4KCB5eSwgZGVsdGEgKTsKKyAgICBtYXRyaXgtPnl5ID0gRlRfRGl2Rml4KCB4eCwgZGVsdGEgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQoIGNvbnN0IEZUX01hdHJpeCogIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCAgICAgICAgKmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAgIHNjYWxpbmcgKQorICB7CisgICAgRlRfRml4ZWQgIHh4LCB4eSwgeXgsIHl5OworCisgICAgRlRfTG9uZyAgIHZhbCA9IDB4MTAwMDBMICogc2NhbGluZzsKKworCisgICAgaWYgKCAhYSB8fCAhYiApCisgICAgICByZXR1cm47CisKKyAgICB4eCA9IEZUX011bERpdiggYS0+eHgsIGItPnh4LCB2YWwgKSArIEZUX011bERpdiggYS0+eHksIGItPnl4LCB2YWwgKTsKKyAgICB4eSA9IEZUX011bERpdiggYS0+eHgsIGItPnh5LCB2YWwgKSArIEZUX011bERpdiggYS0+eHksIGItPnl5LCB2YWwgKTsKKyAgICB5eCA9IEZUX011bERpdiggYS0+eXgsIGItPnh4LCB2YWwgKSArIEZUX011bERpdiggYS0+eXksIGItPnl4LCB2YWwgKTsKKyAgICB5eSA9IEZUX011bERpdiggYS0+eXgsIGItPnh5LCB2YWwgKSArIEZUX011bERpdiggYS0+eXksIGItPnl5LCB2YWwgKTsKKworICAgIGItPnh4ID0geHg7ICBiLT54eSA9IHh5OworICAgIGItPnl4ID0geXg7ICBiLT55eSA9IHl5OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9WZWN0b3JfVHJhbnNmb3JtX1NjYWxlZCggRlRfVmVjdG9yKiAgICAgICAgdmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfTWF0cml4KiAgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICAgc2NhbGluZyApCisgIHsKKyAgICBGVF9Qb3MgICB4eiwgeXo7CisKKyAgICBGVF9Mb25nICB2YWwgPSAweDEwMDAwTCAqIHNjYWxpbmc7CisKKworICAgIGlmICggIXZlY3RvciB8fCAhbWF0cml4ICkKKyAgICAgIHJldHVybjsKKworICAgIHh6ID0gRlRfTXVsRGl2KCB2ZWN0b3ItPngsIG1hdHJpeC0+eHgsIHZhbCApICsKKyAgICAgICAgIEZUX011bERpdiggdmVjdG9yLT55LCBtYXRyaXgtPnh5LCB2YWwgKTsKKworICAgIHl6ID0gRlRfTXVsRGl2KCB2ZWN0b3ItPngsIG1hdHJpeC0+eXgsIHZhbCApICsKKyAgICAgICAgIEZUX011bERpdiggdmVjdG9yLT55LCBtYXRyaXgtPnl5LCB2YWwgKTsKKworICAgIHZlY3Rvci0+eCA9IHh6OworICAgIHZlY3Rvci0+eSA9IHl6OworICB9CisKKworI2lmIDAKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0ludDMyICkKKyAgRlRfU3FydEZpeGVkKCBGVF9JbnQzMiAgeCApCisgIHsKKyAgICBGVF9VSW50MzIgIHJvb3QsIHJlbV9oaSwgcmVtX2xvLCB0ZXN0X2RpdjsKKyAgICBGVF9JbnQgICAgIGNvdW50OworCisKKyAgICByb290ID0gMDsKKworICAgIGlmICggeCA+IDAgKQorICAgIHsKKyAgICAgIHJlbV9oaSA9IDA7CisgICAgICByZW1fbG8gPSAoRlRfVUludDMyKXg7CisgICAgICBjb3VudCAgPSAyNDsKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIHJlbV9oaSAgID0gKCByZW1faGkgPDwgMiApIHwgKCByZW1fbG8gPj4gMzAgKTsKKyAgICAgICAgcmVtX2xvIDw8PSAyOworICAgICAgICByb290ICAgPDw9IDE7CisgICAgICAgIHRlc3RfZGl2ID0gKCByb290IDw8IDEgKSArIDE7CisKKyAgICAgICAgaWYgKCByZW1faGkgPj0gdGVzdF9kaXYgKQorICAgICAgICB7CisgICAgICAgICAgcmVtX2hpIC09IHRlc3RfZGl2OworICAgICAgICAgIHJvb3QgICArPSAxOworICAgICAgICB9CisgICAgICB9IHdoaWxlICggLS1jb3VudCApOworICAgIH0KKworICAgIHJldHVybiAoRlRfSW50MzIpcm9vdDsKKyAgfQorCisjZW5kaWYgLyogMCAqLworCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhbGMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9JbnQgKQorICBmdF9jb3JuZXJfb3JpZW50YXRpb24oIEZUX1BvcyAgaW5feCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGluX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF95ICkKKyAgeworICAgIEZUX0xvbmcgIHJlc3VsdDsgLyogYXZvaWQgb3ZlcmZsb3cgb24gMTYtYml0IHN5c3RlbSAqLworCisKKyAgICAvKiBkZWFsIHdpdGggdGhlIHRyaXZpYWwgY2FzZXMgcXVpY2tseSAqLworICAgIGlmICggaW5feSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoIGluX3ggPj0gMCApCisgICAgICAgIHJlc3VsdCA9IG91dF95OworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSAtb3V0X3k7CisgICAgfQorICAgIGVsc2UgaWYgKCBpbl94ID09IDAgKQorICAgIHsKKyAgICAgIGlmICggaW5feSA+PSAwICkKKyAgICAgICAgcmVzdWx0ID0gLW91dF94OworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBvdXRfeDsKKyAgICB9CisgICAgZWxzZSBpZiAoIG91dF95ID09IDAgKQorICAgIHsKKyAgICAgIGlmICggb3V0X3ggPj0gMCApCisgICAgICAgIHJlc3VsdCA9IGluX3k7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IC1pbl95OworICAgIH0KKyAgICBlbHNlIGlmICggb3V0X3ggPT0gMCApCisgICAgeworICAgICAgaWYgKCBvdXRfeSA+PSAwICkKKyAgICAgICAgcmVzdWx0ID0gLWluX3g7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9ICBpbl94OworICAgIH0KKyAgICBlbHNlIC8qIGdlbmVyYWwgY2FzZSAqLworICAgIHsKKyNpZmRlZiBGVF9MT05HNjQKKworICAgICAgRlRfSW50NjQgIGRlbHRhID0gKEZUX0ludDY0KWluX3ggKiBvdXRfeSAtIChGVF9JbnQ2NClpbl95ICogb3V0X3g7CisKKworICAgICAgaWYgKCBkZWx0YSA9PSAwICkKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gMSAtIDIgKiAoIGRlbHRhIDwgMCApOworCisjZWxzZQorCisgICAgICBGVF9JbnQ2NCAgejEsIHoyOworCisKKyAgICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvdyA2NC1iaXQgYXJndW1lbnRzICovCisgICAgICBmdF9tdWx0bzY0KCAoRlRfVUludDMyKWluX3gsIChGVF9VSW50MzIpb3V0X3ksICZ6MSApOworICAgICAgZnRfbXVsdG82NCggKEZUX1VJbnQzMilpbl95LCAoRlRfVUludDMyKW91dF94LCAmejIgKTsKKworICAgICAgaWYgKCB6MS5oaSA+IHoyLmhpICkKKyAgICAgICAgcmVzdWx0ID0gKzE7CisgICAgICBlbHNlIGlmICggejEuaGkgPCB6Mi5oaSApCisgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgZWxzZSBpZiAoIHoxLmxvID4gejIubG8gKQorICAgICAgICByZXN1bHQgPSArMTsKKyAgICAgIGVsc2UgaWYgKCB6MS5sbyA8IHoyLmxvICkKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IDA7CisKKyNlbmRpZgorICAgIH0KKworICAgIC8qIFhYWDogb25seSB0aGUgc2lnbiBvZiByZXR1cm4gdmFsdWUsICsxLzAvLTEgbXVzdCBiZSB1c2VkICovCisgICAgcmV0dXJuIChGVF9JbnQpcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0ludCApCisgIGZ0X2Nvcm5lcl9pc19mbGF0KCBGVF9Qb3MgIGluX3gsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGluX3ksCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF94LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBvdXRfeSApCisgIHsKKyAgICBGVF9Qb3MgIGF4ID0gaW5feCArIG91dF94OworICAgIEZUX1BvcyAgYXkgPSBpbl95ICsgb3V0X3k7CisKKyAgICBGVF9Qb3MgIGRfaW4sIGRfb3V0LCBkX2h5cG90OworCisKKyAgICAvKiBUaGUgaWRlYSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGNvbXBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgKi8KKyAgICAvKiBoeXBvdGVudXNlIHdpdGggdGhlIGBpbicgYW5kIGBvdXQnIGxlbmd0aC4gIFRoZSBgY29ybmVyJyAgKi8KKyAgICAvKiByZXByZXNlbnRlZCBieSBgaW4nIGFuZCBgb3V0JyBpcyBmbGF0IGlmIHRoZSBoeXBvdGVudXNlJ3MgKi8KKyAgICAvKiBsZW5ndGggaXNuJ3QgdG9vIGxhcmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBUaGlzIGFwcHJvYWNoIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgdGhlIGFuZ2xlIGJldHdlZW4gICAgKi8KKyAgICAvKiBgaW4nIGFuZCBgb3V0JyBpcyBub3QgY2hlY2tlZC4gIEluIGNhc2Ugb25lIG9mIHRoZSB0d28gICAgKi8KKyAgICAvKiB2ZWN0b3JzIGlzIGBkb21pbmFudCcsIHRoaXMgaXMsIG11Y2ggbGFyZ2VyIHRoYW4gdGhlICAgICAgKi8KKyAgICAvKiBvdGhlciB2ZWN0b3IsIHdlIHRodXMgYWx3YXlzIGhhdmUgYSBmbGF0IGNvcm5lci4gICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICBoeXBvdGVudXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICB4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0teCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgIFwgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgIGluICBcICAgICAgICAgIC8gIG91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgXCAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgIG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGRfaW4gICAgPSBGVF9IWVBPVCggIGluX3gsICBpbl95ICk7CisgICAgZF9vdXQgICA9IEZUX0hZUE9UKCBvdXRfeCwgb3V0X3kgKTsKKyAgICBkX2h5cG90ID0gRlRfSFlQT1QoICAgIGF4LCAgICBheSApOworCisgICAgLyogbm93IGRvIGEgc2ltcGxlIGxlbmd0aCBjb21wYXJpc29uOiAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIGRfaW4gKyBkX291dCA8IDE3LzE2IGRfaHlwb3QgICAgICovCisKKyAgICByZXR1cm4gKCBkX2luICsgZF9vdXQgLSBkX2h5cG90ICkgPCAoIGRfaHlwb3QgPj4gNCApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRjaWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGNpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzQ4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRjaWQuYwpAQCAtMCwwICsxLDExOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEZXJlayBDbGVnZyBhbmQgTWljaGFlbCBUb2Z0ZGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NJRF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0lEX0gKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjaWQuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0NJRF9SZWdpc3RyeV9PcmRlcmluZ19TdXBwbGVtZW50KCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKm9yZGVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAqc3VwcGxlbWVudCkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBjb25zdCBjaGFyKiAgciA9IE5VTEw7CisgICAgY29uc3QgY2hhciogIG8gPSBOVUxMOworICAgIEZUX0ludCAgICAgICBzID0gMDsKKworCisgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggZmFjZSApCisgICAgeworICAgICAgRlRfU2VydmljZV9DSUQgIHNlcnZpY2U7CisKKworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIENJRCApOworCisgICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X3JvcyApCisgICAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X3JvcyggZmFjZSwgJnIsICZvLCAmcyApOworICAgIH0KKworICAgIGlmICggcmVnaXN0cnkgKQorICAgICAgKnJlZ2lzdHJ5ID0gcjsKKworICAgIGlmICggb3JkZXJpbmcgKQorICAgICAgKm9yZGVyaW5nID0gbzsKKworICAgIGlmICggc3VwcGxlbWVudCApCisgICAgICAqc3VwcGxlbWVudCA9IHM7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0NJRF9Jc19JbnRlcm5hbGx5X0NJRF9LZXllZCggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICppc19jaWQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgRlRfQm9vbCAgIGljID0gMDsKKworCisgICAgaWYgKCBmYWNlICkKKyAgICB7CisgICAgICBGVF9TZXJ2aWNlX0NJRCAgc2VydmljZTsKKworCisgICAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgQ0lEICk7CisKKyAgICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfaXNfY2lkICkKKyAgICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfaXNfY2lkKCBmYWNlLCAmaWMpOworICAgIH0KKworICAgIGlmICggaXNfY2lkICkKKyAgICAgICppc19jaWQgPSBpYzsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfQ0lEX0Zyb21fR2x5cGhfSW5kZXgoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAqY2lkICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOworICAgIEZUX1VJbnQgICBjID0gMDsKKworCisgICAgaWYgKCBmYWNlICkKKyAgICB7CisgICAgICBGVF9TZXJ2aWNlX0NJRCAgc2VydmljZTsKKworCisgICAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgQ0lEICk7CisKKyAgICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXggKQorICAgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9jaWRfZnJvbV9nbHlwaF9pbmRleCggZmFjZSwgZ2x5cGhfaW5kZXgsICZjKTsKKyAgICB9CisKKyAgICBpZiAoIGNpZCApCisgICAgICAqY2lkID0gYzsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0ZGJnbWVtLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRkYmdtZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjIwMzEzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0ZGJnbWVtLmMKQEAgLTAsMCArMSw5OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0ZGJnbWVtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBNZW1vcnkgZGVidWdnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICisjaW5jbHVkZSBGVF9TWVNURU1fSAorI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIEZUX1RZUEVTX0gKKworCisjaWZkZWYgRlRfREVCVUdfTUVNT1JZCisKKyNkZWZpbmUgIEtFRVBBTElWRSAvKiBgS2VlcCBhbGl2ZScgbWVhbnMgdGhhdCBmcmVlZCBibG9ja3MgYXJlbid0IHJlbGVhc2VkCisgICAgICAgICAgICAgICAgICAgICogdG8gdGhlIGhlYXAuICBUaGlzIGlzIHVzZWZ1bCB0byBkZXRlY3QgZG91YmxlLWZyZWVzCisgICAgICAgICAgICAgICAgICAgICogb3Igd2VpcmQgaGVhcCBjb3JydXB0aW9uLCBidXQgaXQgdXNlcyBsYXJnZSBhbW91bnRzIG9mCisgICAgICAgICAgICAgICAgICAgICogbWVtb3J5LCBob3dldmVyLgorICAgICAgICAgICAgICAgICAgICAqLworCisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKyAgRlRfQkFTRV9ERUYoIGNvbnN0IGNoYXIqICkgIF9mdF9kZWJ1Z19maWxlICAgPSBOVUxMOworICBGVF9CQVNFX0RFRiggbG9uZyApICAgICAgICAgX2Z0X2RlYnVnX2xpbmVubyA9IDA7CisKKyAgZXh0ZXJuIHZvaWQKKyAgRlRfRHVtcE1lbW9yeSggRlRfTWVtb3J5ICBtZW1vcnkgKTsKKworCisgIHR5cGVkZWYgc3RydWN0IEZUX01lbVNvdXJjZVJlY18qICBGVF9NZW1Tb3VyY2U7CisgIHR5cGVkZWYgc3RydWN0IEZUX01lbU5vZGVSZWNfKiAgICBGVF9NZW1Ob2RlOworICB0eXBlZGVmIHN0cnVjdCBGVF9NZW1UYWJsZVJlY18qICAgRlRfTWVtVGFibGU7CisKKworI2RlZmluZSBGVF9NRU1fVkFMKCBhZGRyICkgICggKEZUX1B0ckRpc3QpKEZUX1BvaW50ZXIpKCBhZGRyICkgKQorCisgIC8qCisgICAqICBUaGlzIHN0cnVjdHVyZSBob2xkcyBzdGF0aXN0aWNzIGZvciBhIHNpbmdsZSBhbGxvY2F0aW9uL3JlbGVhc2UKKyAgICogIHNpdGUuICBUaGlzIGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIG1lbW9yeSBvcGVyYXRpb25zIGhhcHBlbiB0aGUKKyAgICogIG1vc3QuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfTWVtU291cmNlUmVjXworICB7CisgICAgY29uc3QgY2hhciogICBmaWxlX25hbWU7CisgICAgbG9uZyAgICAgICAgICBsaW5lX25vOworCisgICAgRlRfTG9uZyAgICAgICBjdXJfYmxvY2tzOyAgIC8qIGN1cnJlbnQgbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9ja3MgKi8KKyAgICBGVF9Mb25nICAgICAgIG1heF9ibG9ja3M7ICAgLyogbWF4LiBudW1iZXIgb2YgYWxsb2NhdGVkIGJsb2NrcyAgICAqLworICAgIEZUX0xvbmcgICAgICAgYWxsX2Jsb2NrczsgICAvKiB0b3RhbCBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCAgICovCisKKyAgICBGVF9Mb25nICAgICAgIGN1cl9zaXplOyAgICAgLyogY3VycmVudCBjdW11bGF0aXZlIGFsbG9jYXRlZCBzaXplICovCisgICAgRlRfTG9uZyAgICAgICBtYXhfc2l6ZTsgICAgIC8qIG1heGltdW0gY3VtdWxhdGl2ZSBhbGxvY2F0ZWQgc2l6ZSAqLworICAgIEZUX0xvbmcgICAgICAgYWxsX3NpemU7ICAgICAvKiB0b3RhbCBjdW11bGF0aXZlIGFsbG9jYXRlZCBzaXplICAgKi8KKworICAgIEZUX0xvbmcgICAgICAgY3VyX21heDsgICAgICAvKiBjdXJyZW50IG1heGltdW0gYWxsb2NhdGVkIHNpemUgKi8KKworICAgIEZUX1VJbnQzMiAgICAgaGFzaDsKKyAgICBGVF9NZW1Tb3VyY2UgIGxpbms7CisKKyAgfSBGVF9NZW1Tb3VyY2VSZWM7CisKKworICAvKgorICAgKiAgV2UgZG9uJ3QgbmVlZCBhIHJlc2l6YWJsZSBhcnJheSBmb3IgdGhlIG1lbW9yeSBzb3VyY2VzIGJlY2F1c2UKKyAgICogIHRoZWlyIG51bWJlciBpcyBwcmV0dHkgbGltaXRlZCB3aXRoaW4gRnJlZVR5cGUuCisgICAqLworI2RlZmluZSBGVF9NRU1fU09VUkNFX0JVQ0tFVFMgIDEyOAorCisgIC8qCisgICAqICBUaGlzIHN0cnVjdHVyZSBob2xkcyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgc2luZ2xlIGFsbG9jYXRlZAorICAgKiAgbWVtb3J5IGJsb2NrLiAgSWYgS0VFUEFMSVZFIGlzIGRlZmluZWQsIGJsb2NrcyB0aGF0IGFyZSBmcmVlZCBieQorICAgKiAgRnJlZVR5cGUgYXJlIG5ldmVyIHJlbGVhc2VkIHRvIHRoZSBzeXN0ZW0uICBJbnN0ZWFkLCB0aGVpciBgc2l6ZScKKyAgICogIGZpZWxkIGlzIHNldCB0byBgLXNpemUnLiAgVGhpcyBpcyBtYWlubHkgdXNlZnVsIHRvIGRldGVjdCBkb3VibGUKKyAgICogIGZyZWVzLCBhdCB0aGUgcHJpY2Ugb2YgYSBsYXJnZSBtZW1vcnkgZm9vdHByaW50IGR1cmluZyBleGVjdXRpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfTWVtTm9kZVJlY18KKyAgeworICAgIEZUX0J5dGUqICAgICAgYWRkcmVzczsKKyAgICBGVF9Mb25nICAgICAgIHNpemU7ICAgICAvKiA8IDAgaWYgdGhlIGJsb2NrIHdhcyBmcmVlZCAqLworCisgICAgRlRfTWVtU291cmNlICBzb3VyY2U7CisKKyNpZmRlZiBLRUVQQUxJVkUKKyAgICBjb25zdCBjaGFyKiAgIGZyZWVfZmlsZV9uYW1lOworICAgIEZUX0xvbmcgICAgICAgZnJlZV9saW5lX25vOworI2VuZGlmCisKKyAgICBGVF9NZW1Ob2RlICAgIGxpbms7CisKKyAgfSBGVF9NZW1Ob2RlUmVjOworCisKKyAgLyoKKyAgICogIFRoZSBnbG9iYWwgc3RydWN0dXJlLCBjb250YWluaW5nIGNvbXBvdW5kIHN0YXRpc3RpY3MgYW5kIGFsbCBoYXNoCisgICAqICB0YWJsZXMuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfTWVtVGFibGVSZWNfCisgIHsKKyAgICBGVF9Mb25nICAgICAgICAgIHNpemU7CisgICAgRlRfTG9uZyAgICAgICAgICBub2RlczsKKyAgICBGVF9NZW1Ob2RlKiAgICAgIGJ1Y2tldHM7CisKKyAgICBGVF9Mb25nICAgICAgICAgIGFsbG9jX3RvdGFsOworICAgIEZUX0xvbmcgICAgICAgICAgYWxsb2NfY3VycmVudDsKKyAgICBGVF9Mb25nICAgICAgICAgIGFsbG9jX21heDsKKyAgICBGVF9Mb25nICAgICAgICAgIGFsbG9jX2NvdW50OworCisgICAgRlRfQm9vbCAgICAgICAgICBib3VuZF90b3RhbDsKKyAgICBGVF9Mb25nICAgICAgICAgIGFsbG9jX3RvdGFsX21heDsKKworICAgIEZUX0Jvb2wgICAgICAgICAgYm91bmRfY291bnQ7CisgICAgRlRfTG9uZyAgICAgICAgICBhbGxvY19jb3VudF9tYXg7CisKKyAgICBGVF9NZW1Tb3VyY2UgICAgIHNvdXJjZXNbRlRfTUVNX1NPVVJDRV9CVUNLRVRTXTsKKworICAgIEZUX0Jvb2wgICAgICAgICAga2VlcF9hbGl2ZTsKKworICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5OworICAgIEZUX1BvaW50ZXIgICAgICAgbWVtb3J5X3VzZXI7CisgICAgRlRfQWxsb2NfRnVuYyAgICBhbGxvYzsKKyAgICBGVF9GcmVlX0Z1bmMgICAgIGZyZWU7CisgICAgRlRfUmVhbGxvY19GdW5jICByZWFsbG9jOworCisgIH0gRlRfTWVtVGFibGVSZWM7CisKKworI2RlZmluZSBGVF9NRU1fU0laRV9NSU4gIDcKKyNkZWZpbmUgRlRfTUVNX1NJWkVfTUFYICAxMzg0NTE2MworCisjZGVmaW5lIEZUX0ZJTEVOQU1FKCB4ICkgICggKHgpID8gKHgpIDogInVua25vd24gZmlsZSIgKQorCisKKyAgLyoKKyAgICogIFByaW1lIG51bWJlcnMgYXJlIHVnbHkgdG8gaGFuZGxlLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIGltcGxlbWVudAorICAgKiAgTC1IYXNoaW5nLCB3aGljaCBpcyAxMCUgZmFzdGVyIGFuZCBkb2Vzbid0IHJlcXVpcmUgZGl2aXNpb25zLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IEZUX0ludCAgZnRfbWVtX3ByaW1lc1tdID0KKyAgeworICAgIDcsCisgICAgMTEsCisgICAgMTksCisgICAgMzcsCisgICAgNzMsCisgICAgMTA5LAorICAgIDE2MywKKyAgICAyNTEsCisgICAgMzY3LAorICAgIDU1NywKKyAgICA4MjMsCisgICAgMTIzNywKKyAgICAxODYxLAorICAgIDI3NzcsCisgICAgNDE3NywKKyAgICA2MjQ3LAorICAgIDkzNzEsCisgICAgMTQwNTcsCisgICAgMjEwODksCisgICAgMzE2MjcsCisgICAgNDc0MzEsCisgICAgNzExNDMsCisgICAgMTA2NzIxLAorICAgIDE2MDA3MywKKyAgICAyNDAxMDEsCisgICAgMzYwMTYzLAorICAgIDU0MDIxNywKKyAgICA4MTAzNDMsCisgICAgMTIxNTQ5NywKKyAgICAxODIzMjMxLAorICAgIDI3MzQ4NjcsCisgICAgNDEwMjI4MywKKyAgICA2MTUzNDA5LAorICAgIDkyMzAxMTMsCisgICAgMTM4NDUxNjMsCisgIH07CisKKworICBzdGF0aWMgRlRfTG9uZworICBmdF9tZW1fY2xvc2VzdF9wcmltZSggRlRfTG9uZyAgbnVtICkKKyAgeworICAgIHNpemVfdCAgaTsKKworCisgICAgZm9yICggaSA9IDA7CisgICAgICAgICAgaSA8IHNpemVvZiAoIGZ0X21lbV9wcmltZXMgKSAvIHNpemVvZiAoIGZ0X21lbV9wcmltZXNbMF0gKTsgaSsrICkKKyAgICAgIGlmICggZnRfbWVtX3ByaW1lc1tpXSA+IG51bSApCisgICAgICAgIHJldHVybiBmdF9tZW1fcHJpbWVzW2ldOworCisgICAgcmV0dXJuIEZUX01FTV9TSVpFX01BWDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfbWVtX2RlYnVnX3BhbmljKCBjb25zdCBjaGFyKiAgZm10LAorICAgICAgICAgICAgICAgICAgICAgIC4uLiApCisgIHsKKyAgICB2YV9saXN0ICBhcDsKKworCisgICAgcHJpbnRmKCAiRnJlZVR5cGUuRGVidWc6ICIgKTsKKworICAgIHZhX3N0YXJ0KCBhcCwgZm10ICk7CisgICAgdnByaW50ZiggZm10LCBhcCApOworICAgIHZhX2VuZCggYXAgKTsKKworICAgIHByaW50ZiggIlxuIiApOworICAgIGV4aXQoIEVYSVRfRkFJTFVSRSApOworICB9CisKKworICBzdGF0aWMgRlRfUG9pbnRlcgorICBmdF9tZW1fdGFibGVfYWxsb2MoIEZUX01lbVRhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgc2l6ZSApCisgIHsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSB0YWJsZS0+bWVtb3J5OworICAgIEZUX1BvaW50ZXIgIGJsb2NrOworCisKKyAgICBtZW1vcnktPnVzZXIgPSB0YWJsZS0+bWVtb3J5X3VzZXI7CisgICAgYmxvY2sgPSB0YWJsZS0+YWxsb2MoIG1lbW9yeSwgc2l6ZSApOworICAgIG1lbW9yeS0+dXNlciA9IHRhYmxlOworCisgICAgcmV0dXJuIGJsb2NrOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9tZW1fdGFibGVfZnJlZSggRlRfTWVtVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGJsb2NrICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gdGFibGUtPm1lbW9yeTsKKworCisgICAgbWVtb3J5LT51c2VyID0gdGFibGUtPm1lbW9yeV91c2VyOworICAgIHRhYmxlLT5mcmVlKCBtZW1vcnksIGJsb2NrICk7CisgICAgbWVtb3J5LT51c2VyID0gdGFibGU7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X21lbV90YWJsZV9yZXNpemUoIEZUX01lbVRhYmxlICB0YWJsZSApCisgIHsKKyAgICBGVF9Mb25nICBuZXdfc2l6ZTsKKworCisgICAgbmV3X3NpemUgPSBmdF9tZW1fY2xvc2VzdF9wcmltZSggdGFibGUtPm5vZGVzICk7CisgICAgaWYgKCBuZXdfc2l6ZSAhPSB0YWJsZS0+c2l6ZSApCisgICAgeworICAgICAgRlRfTWVtTm9kZSogIG5ld19idWNrZXRzOworICAgICAgRlRfTG9uZyAgICAgIGk7CisKKworICAgICAgbmV3X2J1Y2tldHMgPSAoRlRfTWVtTm9kZSAqKQorICAgICAgICAgICAgICAgICAgICAgIGZ0X21lbV90YWJsZV9hbGxvYygKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NpemUgKiAoRlRfTG9uZylzaXplb2YgKCBGVF9NZW1Ob2RlICkgKTsKKyAgICAgIGlmICggbmV3X2J1Y2tldHMgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgICAgRlRfQVJSQVlfWkVSTyggbmV3X2J1Y2tldHMsIG5ld19zaXplICk7CisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgdGFibGUtPnNpemU7IGkrKyApCisgICAgICB7CisgICAgICAgIEZUX01lbU5vZGUgIG5vZGUsIG5leHQsICpwbm9kZTsKKyAgICAgICAgRlRfUHRyRGlzdCAgaGFzaDsKKworCisgICAgICAgIG5vZGUgPSB0YWJsZS0+YnVja2V0c1tpXTsKKyAgICAgICAgd2hpbGUgKCBub2RlICkKKyAgICAgICAgeworICAgICAgICAgIG5leHQgID0gbm9kZS0+bGluazsKKyAgICAgICAgICBoYXNoICA9IEZUX01FTV9WQUwoIG5vZGUtPmFkZHJlc3MgKSAlIChGVF9QdHJEaXN0KW5ld19zaXplOworICAgICAgICAgIHBub2RlID0gbmV3X2J1Y2tldHMgKyBoYXNoOworCisgICAgICAgICAgbm9kZS0+bGluayA9IHBub2RlWzBdOworICAgICAgICAgIHBub2RlWzBdICAgPSBub2RlOworCisgICAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCB0YWJsZS0+YnVja2V0cyApCisgICAgICAgIGZ0X21lbV90YWJsZV9mcmVlKCB0YWJsZSwgdGFibGUtPmJ1Y2tldHMgKTsKKworICAgICAgdGFibGUtPmJ1Y2tldHMgPSBuZXdfYnVja2V0czsKKyAgICAgIHRhYmxlLT5zaXplICAgID0gbmV3X3NpemU7CisgICAgfQorICB9CisKKworICBzdGF0aWMgRlRfTWVtVGFibGUKKyAgZnRfbWVtX3RhYmxlX25ldyggRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgRlRfTWVtVGFibGUgIHRhYmxlOworCisKKyAgICB0YWJsZSA9IChGVF9NZW1UYWJsZSltZW1vcnktPmFsbG9jKCBtZW1vcnksIHNpemVvZiAoICp0YWJsZSApICk7CisgICAgaWYgKCB0YWJsZSA9PSBOVUxMICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX1pFUk8oIHRhYmxlICk7CisKKyAgICB0YWJsZS0+c2l6ZSAgPSBGVF9NRU1fU0laRV9NSU47CisgICAgdGFibGUtPm5vZGVzID0gMDsKKworICAgIHRhYmxlLT5tZW1vcnkgPSBtZW1vcnk7CisKKyAgICB0YWJsZS0+bWVtb3J5X3VzZXIgPSBtZW1vcnktPnVzZXI7CisKKyAgICB0YWJsZS0+YWxsb2MgICA9IG1lbW9yeS0+YWxsb2M7CisgICAgdGFibGUtPnJlYWxsb2MgPSBtZW1vcnktPnJlYWxsb2M7CisgICAgdGFibGUtPmZyZWUgICAgPSBtZW1vcnktPmZyZWU7CisKKyAgICB0YWJsZS0+YnVja2V0cyA9IChGVF9NZW1Ob2RlICopCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+YWxsb2MoCisgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5zaXplICogKEZUX0xvbmcpc2l6ZW9mICggRlRfTWVtTm9kZSApICk7CisgICAgaWYgKCB0YWJsZS0+YnVja2V0cyApCisgICAgICBGVF9BUlJBWV9aRVJPKCB0YWJsZS0+YnVja2V0cywgdGFibGUtPnNpemUgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgbWVtb3J5LT5mcmVlKCBtZW1vcnksIHRhYmxlICk7CisgICAgICB0YWJsZSA9IE5VTEw7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIHRhYmxlOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9tZW1fdGFibGVfZGVzdHJveSggRlRfTWVtVGFibGUgIHRhYmxlICkKKyAgeworICAgIEZUX0xvbmcgIGk7CisgICAgRlRfTG9uZyAgbGVha19jb3VudCA9IDA7CisgICAgRlRfTG9uZyAgbGVha3MgICAgICA9IDA7CisKKworICAgIEZUX0R1bXBNZW1vcnkoIHRhYmxlLT5tZW1vcnkgKTsKKworICAgIC8qIHJlbW92ZSBhbGwgYmxvY2tzIGZyb20gdGhlIHRhYmxlLCByZXZlYWxpbmcgbGVha2VkIG9uZXMgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IHRhYmxlLT5zaXplOyBpKysgKQorICAgIHsKKyAgICAgIEZUX01lbU5vZGUgICpwbm9kZSA9IHRhYmxlLT5idWNrZXRzICsgaSwgbmV4dCwgbm9kZSA9ICpwbm9kZTsKKworCisgICAgICB3aGlsZSAoIG5vZGUgKQorICAgICAgeworICAgICAgICBuZXh0ICAgICAgID0gbm9kZS0+bGluazsKKyAgICAgICAgbm9kZS0+bGluayA9IE5VTEw7CisKKyAgICAgICAgaWYgKCBub2RlLT5zaXplID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAibGVha2VkIG1lbW9yeSBibG9jayBhdCBhZGRyZXNzICVwLCBzaXplICU4bGQgaW4gKCVzOiVsZClcbiIsCisgICAgICAgICAgICBub2RlLT5hZGRyZXNzLCBub2RlLT5zaXplLAorICAgICAgICAgICAgRlRfRklMRU5BTUUoIG5vZGUtPnNvdXJjZS0+ZmlsZV9uYW1lICksCisgICAgICAgICAgICBub2RlLT5zb3VyY2UtPmxpbmVfbm8gKTsKKworICAgICAgICAgIGxlYWtfY291bnQrKzsKKyAgICAgICAgICBsZWFrcyArPSBub2RlLT5zaXplOworCisgICAgICAgICAgZnRfbWVtX3RhYmxlX2ZyZWUoIHRhYmxlLCBub2RlLT5hZGRyZXNzICk7CisgICAgICAgIH0KKworICAgICAgICBub2RlLT5hZGRyZXNzID0gTlVMTDsKKyAgICAgICAgbm9kZS0+c2l6ZSAgICA9IDA7CisKKyAgICAgICAgZnRfbWVtX3RhYmxlX2ZyZWUoIHRhYmxlLCBub2RlICk7CisgICAgICAgIG5vZGUgPSBuZXh0OworICAgICAgfQorICAgICAgdGFibGUtPmJ1Y2tldHNbaV0gPSBOVUxMOworICAgIH0KKworICAgIGZ0X21lbV90YWJsZV9mcmVlKCB0YWJsZSwgdGFibGUtPmJ1Y2tldHMgKTsKKyAgICB0YWJsZS0+YnVja2V0cyA9IE5VTEw7CisKKyAgICB0YWJsZS0+c2l6ZSAgPSAwOworICAgIHRhYmxlLT5ub2RlcyA9IDA7CisKKyAgICAvKiByZW1vdmUgYWxsIHNvdXJjZXMgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IEZUX01FTV9TT1VSQ0VfQlVDS0VUUzsgaSsrICkKKyAgICB7CisgICAgICBGVF9NZW1Tb3VyY2UgIHNvdXJjZSwgbmV4dDsKKworCisgICAgICBmb3IgKCBzb3VyY2UgPSB0YWJsZS0+c291cmNlc1tpXTsgc291cmNlICE9IE5VTEw7IHNvdXJjZSA9IG5leHQgKQorICAgICAgeworICAgICAgICBuZXh0ID0gc291cmNlLT5saW5rOworICAgICAgICBmdF9tZW1fdGFibGVfZnJlZSggdGFibGUsIHNvdXJjZSApOworICAgICAgfQorCisgICAgICB0YWJsZS0+c291cmNlc1tpXSA9IE5VTEw7CisgICAgfQorCisgICAgcHJpbnRmKCAiRnJlZVR5cGU6IHRvdGFsIG1lbW9yeSBhbGxvY2F0aW9ucyA9ICVsZFxuIiwKKyAgICAgICAgICAgIHRhYmxlLT5hbGxvY190b3RhbCApOworICAgIHByaW50ZiggIkZyZWVUeXBlOiBtYXhpbXVtIG1lbW9yeSBmb290cHJpbnQgPSAlbGRcbiIsCisgICAgICAgICAgICB0YWJsZS0+YWxsb2NfbWF4ICk7CisKKyAgICBmdF9tZW1fdGFibGVfZnJlZSggdGFibGUsIHRhYmxlICk7CisKKyAgICBpZiAoIGxlYWtfY291bnQgPiAwICkKKyAgICAgIGZ0X21lbV9kZWJ1Z19wYW5pYygKKyAgICAgICAgIkZyZWVUeXBlOiAlbGQgYnl0ZXMgb2YgbWVtb3J5IGxlYWtlZCBpbiAlbGQgYmxvY2tzXG4iLAorICAgICAgICBsZWFrcywgbGVha19jb3VudCApOworCisgICAgcHJpbnRmKCAiRnJlZVR5cGU6IG5vIG1lbW9yeSBsZWFrcyBkZXRlY3RlZFxuIiApOworICB9CisKKworICBzdGF0aWMgRlRfTWVtTm9kZSoKKyAgZnRfbWVtX3RhYmxlX2dldF9ub2RlcCggRlRfTWVtVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgYWRkcmVzcyApCisgIHsKKyAgICBGVF9QdHJEaXN0ICAgaGFzaDsKKyAgICBGVF9NZW1Ob2RlICAqcG5vZGUsIG5vZGU7CisKKworICAgIGhhc2ggID0gRlRfTUVNX1ZBTCggYWRkcmVzcyApOworICAgIHBub2RlID0gdGFibGUtPmJ1Y2tldHMgKyAoIGhhc2ggJSAoRlRfUHRyRGlzdCl0YWJsZS0+c2l6ZSApOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBub2RlID0gcG5vZGVbMF07CisgICAgICBpZiAoICFub2RlICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggbm9kZS0+YWRkcmVzcyA9PSBhZGRyZXNzICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHBub2RlID0gJm5vZGUtPmxpbms7CisgICAgfQorICAgIHJldHVybiBwbm9kZTsKKyAgfQorCisKKyAgc3RhdGljIEZUX01lbVNvdXJjZQorICBmdF9tZW1fdGFibGVfZ2V0X3NvdXJjZSggRlRfTWVtVGFibGUgIHRhYmxlICkKKyAgeworICAgIEZUX1VJbnQzMiAgICAgaGFzaDsKKyAgICBGVF9NZW1Tb3VyY2UgIG5vZGUsICpwbm9kZTsKKworCisgICAgLyogY2FzdCB0byBGVF9QdHJEaXN0IGZpcnN0IHNpbmNlIHZvaWQqIGNhbiBiZSBsYXJnZXIgKi8KKyAgICAvKiB0aGFuIEZUX1VJbnQzMiBhbmQgR0NDIDQuMS4xIGVtaXRzIGEgd2FybmluZyAgICAgICAqLworICAgIGhhc2ggID0gKEZUX1VJbnQzMikoRlRfUHRyRGlzdCkodm9pZCopX2Z0X2RlYnVnX2ZpbGUgKworICAgICAgICAgICAgICAoRlRfVUludDMyKSggNSAqIF9mdF9kZWJ1Z19saW5lbm8gKTsKKyAgICBwbm9kZSA9ICZ0YWJsZS0+c291cmNlc1toYXNoICUgRlRfTUVNX1NPVVJDRV9CVUNLRVRTXTsKKworICAgIGZvciAoIDs7ICkKKyAgICB7CisgICAgICBub2RlID0gKnBub2RlOworICAgICAgaWYgKCBub2RlID09IE5VTEwgKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBub2RlLT5maWxlX25hbWUgPT0gX2Z0X2RlYnVnX2ZpbGUgICAmJgorICAgICAgICAgICBub2RlLT5saW5lX25vICAgPT0gX2Z0X2RlYnVnX2xpbmVubyApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcG5vZGUgPSAmbm9kZS0+bGluazsKKyAgICB9CisKKyAgICBub2RlID0gKEZUX01lbVNvdXJjZSlmdF9tZW1fdGFibGVfYWxsb2MoIHRhYmxlLCBzaXplb2YgKCAqbm9kZSApICk7CisgICAgaWYgKCBub2RlID09IE5VTEwgKQorICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKAorICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gcGVyZm9ybSBtZW1vcnkgZGVidWdnaW5nXG4iICk7CisKKyAgICBub2RlLT5maWxlX25hbWUgPSBfZnRfZGVidWdfZmlsZTsKKyAgICBub2RlLT5saW5lX25vICAgPSBfZnRfZGVidWdfbGluZW5vOworCisgICAgbm9kZS0+Y3VyX2Jsb2NrcyA9IDA7CisgICAgbm9kZS0+bWF4X2Jsb2NrcyA9IDA7CisgICAgbm9kZS0+YWxsX2Jsb2NrcyA9IDA7CisKKyAgICBub2RlLT5jdXJfc2l6ZSA9IDA7CisgICAgbm9kZS0+bWF4X3NpemUgPSAwOworICAgIG5vZGUtPmFsbF9zaXplID0gMDsKKworICAgIG5vZGUtPmN1cl9tYXggPSAwOworCisgICAgbm9kZS0+bGluayA9IE5VTEw7CisgICAgbm9kZS0+aGFzaCA9IGhhc2g7CisgICAgKnBub2RlICAgICA9IG5vZGU7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gbm9kZTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfbWVtX3RhYmxlX3NldCggRlRfTWVtVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBkZWx0YSApCisgIHsKKyAgICBGVF9NZW1Ob2RlICAqcG5vZGUsIG5vZGU7CisKKworICAgIGlmICggdGFibGUgKQorICAgIHsKKyAgICAgIEZUX01lbVNvdXJjZSAgc291cmNlOworCisKKyAgICAgIHBub2RlID0gZnRfbWVtX3RhYmxlX2dldF9ub2RlcCggdGFibGUsIGFkZHJlc3MgKTsKKyAgICAgIG5vZGUgID0gKnBub2RlOworICAgICAgaWYgKCBub2RlICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBub2RlLT5zaXplIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGlzIGJsb2NrIHdhcyBhbHJlYWR5IGZyZWVkLiAgT3VyIG1lbW9yeSBpcyBub3cgY29tcGxldGVseSAqLworICAgICAgICAgIC8qIGNvcnJ1cHRlZCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogVGhpcyBjYW4gb25seSBoYXBwZW4gaW4ga2VlcC1hbGl2ZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBmdF9tZW1fZGVidWdfcGFuaWMoCisgICAgICAgICAgICAibWVtb3J5IGhlYXAgY29ycnVwdGVkIChhbGxvY2F0aW5nIGZyZWVkIGJsb2NrKSIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGlzIGJsb2NrIHdhcyBhbHJlYWR5IGFsbG9jYXRlZC4gIFRoaXMgbWVhbnMgdGhhdCBvdXIgbWVtb3J5ICovCisgICAgICAgICAgLyogaXMgYWxzbyBjb3JydXB0ZWQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGZ0X21lbV9kZWJ1Z19wYW5pYygKKyAgICAgICAgICAgICJtZW1vcnkgaGVhcCBjb3JydXB0ZWQgKHJlLWFsbG9jYXRpbmcgYWxsb2NhdGVkIGJsb2NrIGF0IgorICAgICAgICAgICAgIiAlcCwgb2Ygc2l6ZSAlbGQpXG4iCisgICAgICAgICAgICAib3JnPSVzOiVkIG5ldz0lczolZFxuIiwKKyAgICAgICAgICAgIG5vZGUtPmFkZHJlc3MsIG5vZGUtPnNpemUsCisgICAgICAgICAgICBGVF9GSUxFTkFNRSggbm9kZS0+c291cmNlLT5maWxlX25hbWUgKSwgbm9kZS0+c291cmNlLT5saW5lX25vLAorICAgICAgICAgICAgRlRfRklMRU5BTUUoIF9mdF9kZWJ1Z19maWxlICksIF9mdF9kZWJ1Z19saW5lbm8gKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBub2RlIGluIHRoaXMgdGFibGUgKi8KKyAgICAgIG5vZGUgPSAoRlRfTWVtTm9kZSlmdF9tZW1fdGFibGVfYWxsb2MoIHRhYmxlLCBzaXplb2YgKCAqbm9kZSApICk7CisgICAgICBpZiAoIG5vZGUgPT0gTlVMTCApCisgICAgICAgIGZ0X21lbV9kZWJ1Z19wYW5pYyggIm5vdCBlbm91Z2ggbWVtb3J5IHRvIHJ1biBtZW1vcnkgdGVzdHMiICk7CisKKyAgICAgIG5vZGUtPmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgbm9kZS0+c2l6ZSAgICA9IHNpemU7CisgICAgICBub2RlLT5zb3VyY2UgID0gc291cmNlID0gZnRfbWVtX3RhYmxlX2dldF9zb3VyY2UoIHRhYmxlICk7CisKKyAgICAgIGlmICggZGVsdGEgPT0gMCApCisgICAgICB7CisgICAgICAgIC8qIHRoaXMgaXMgYW4gYWxsb2NhdGlvbiAqLworICAgICAgICBzb3VyY2UtPmFsbF9ibG9ja3MrKzsKKyAgICAgICAgc291cmNlLT5jdXJfYmxvY2tzKys7CisgICAgICAgIGlmICggc291cmNlLT5jdXJfYmxvY2tzID4gc291cmNlLT5tYXhfYmxvY2tzICkKKyAgICAgICAgICBzb3VyY2UtPm1heF9ibG9ja3MgPSBzb3VyY2UtPmN1cl9ibG9ja3M7CisgICAgICB9CisKKyAgICAgIGlmICggc2l6ZSA+IHNvdXJjZS0+Y3VyX21heCApCisgICAgICAgIHNvdXJjZS0+Y3VyX21heCA9IHNpemU7CisKKyAgICAgIGlmICggZGVsdGEgIT0gMCApCisgICAgICB7CisgICAgICAgIC8qIHdlIGFyZSBncm93aW5nIG9yIHNocmlua2luZyBhIHJlYWxsb2NhdGVkIGJsb2NrICovCisgICAgICAgIHNvdXJjZS0+Y3VyX3NpemUgICAgICs9IGRlbHRhOworICAgICAgICB0YWJsZS0+YWxsb2NfY3VycmVudCArPSBkZWx0YTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogd2UgYXJlIGFsbG9jYXRpbmcgYSBuZXcgYmxvY2sgKi8KKyAgICAgICAgc291cmNlLT5jdXJfc2l6ZSAgICAgKz0gc2l6ZTsKKyAgICAgICAgdGFibGUtPmFsbG9jX2N1cnJlbnQgKz0gc2l6ZTsKKyAgICAgIH0KKworICAgICAgc291cmNlLT5hbGxfc2l6ZSArPSBzaXplOworCisgICAgICBpZiAoIHNvdXJjZS0+Y3VyX3NpemUgPiBzb3VyY2UtPm1heF9zaXplICkKKyAgICAgICAgc291cmNlLT5tYXhfc2l6ZSA9IHNvdXJjZS0+Y3VyX3NpemU7CisKKyAgICAgIG5vZGUtPmZyZWVfZmlsZV9uYW1lID0gTlVMTDsKKyAgICAgIG5vZGUtPmZyZWVfbGluZV9ubyAgID0gMDsKKworICAgICAgbm9kZS0+bGluayA9IHBub2RlWzBdOworCisgICAgICBwbm9kZVswXSA9IG5vZGU7CisgICAgICB0YWJsZS0+bm9kZXMrKzsKKworICAgICAgdGFibGUtPmFsbG9jX3RvdGFsICs9IHNpemU7CisKKyAgICAgIGlmICggdGFibGUtPmFsbG9jX2N1cnJlbnQgPiB0YWJsZS0+YWxsb2NfbWF4ICkKKyAgICAgICAgdGFibGUtPmFsbG9jX21heCA9IHRhYmxlLT5hbGxvY19jdXJyZW50OworCisgICAgICBpZiAoIHRhYmxlLT5ub2RlcyAqIDMgPCB0YWJsZS0+c2l6ZSAgfHwKKyAgICAgICAgICAgdGFibGUtPnNpemUgICogMyA8IHRhYmxlLT5ub2RlcyApCisgICAgICAgIGZ0X21lbV90YWJsZV9yZXNpemUoIHRhYmxlICk7CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9tZW1fdGFibGVfcmVtb3ZlKCBGVF9NZW1UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgZGVsdGEgKQorICB7CisgICAgaWYgKCB0YWJsZSApCisgICAgeworICAgICAgRlRfTWVtTm9kZSAgKnBub2RlLCBub2RlOworCisKKyAgICAgIHBub2RlID0gZnRfbWVtX3RhYmxlX2dldF9ub2RlcCggdGFibGUsIGFkZHJlc3MgKTsKKyAgICAgIG5vZGUgID0gKnBub2RlOworICAgICAgaWYgKCBub2RlICkKKyAgICAgIHsKKyAgICAgICAgRlRfTWVtU291cmNlICBzb3VyY2U7CisKKworICAgICAgICBpZiAoIG5vZGUtPnNpemUgPCAwICkKKyAgICAgICAgICBmdF9tZW1fZGVidWdfcGFuaWMoCisgICAgICAgICAgICAiZnJlZWluZyBtZW1vcnkgYmxvY2sgYXQgJXAgbW9yZSB0aGFuIG9uY2UgYXQgKCVzOiVsZClcbiIKKyAgICAgICAgICAgICJibG9jayBhbGxvY2F0ZWQgYXQgKCVzOiVsZCkgYW5kIHJlbGVhc2VkIGF0ICglczolbGQpIiwKKyAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICBGVF9GSUxFTkFNRSggX2Z0X2RlYnVnX2ZpbGUgKSwgX2Z0X2RlYnVnX2xpbmVubywKKyAgICAgICAgICAgIEZUX0ZJTEVOQU1FKCBub2RlLT5zb3VyY2UtPmZpbGVfbmFtZSApLCBub2RlLT5zb3VyY2UtPmxpbmVfbm8sCisgICAgICAgICAgICBGVF9GSUxFTkFNRSggbm9kZS0+ZnJlZV9maWxlX25hbWUgKSwgbm9kZS0+ZnJlZV9saW5lX25vICk7CisKKyAgICAgICAgLyogc2NyYW1ibGUgdGhlIG5vZGUncyBjb250ZW50IGZvciBhZGRpdGlvbmFsIHNhZmV0eSAqLworICAgICAgICBGVF9NRU1fU0VUKCBhZGRyZXNzLCAweEYzLCBub2RlLT5zaXplICk7CisKKyAgICAgICAgaWYgKCBkZWx0YSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHNvdXJjZSA9IG5vZGUtPnNvdXJjZTsKKworICAgICAgICAgIHNvdXJjZS0+Y3VyX2Jsb2Nrcy0tOworICAgICAgICAgIHNvdXJjZS0+Y3VyX3NpemUgLT0gbm9kZS0+c2l6ZTsKKworICAgICAgICAgIHRhYmxlLT5hbGxvY19jdXJyZW50IC09IG5vZGUtPnNpemU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRhYmxlLT5rZWVwX2FsaXZlICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHdlIHNpbXBseSBpbnZlcnQgdGhlIG5vZGUncyBzaXplIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUgKi8KKyAgICAgICAgICAvKiB3YXMgZnJlZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgbm9kZS0+c2l6ZSAgICAgICAgICAgPSAtbm9kZS0+c2l6ZTsKKyAgICAgICAgICBub2RlLT5mcmVlX2ZpbGVfbmFtZSA9IF9mdF9kZWJ1Z19maWxlOworICAgICAgICAgIG5vZGUtPmZyZWVfbGluZV9ubyAgID0gX2Z0X2RlYnVnX2xpbmVubzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB0YWJsZS0+bm9kZXMtLTsKKworICAgICAgICAgICpwbm9kZSA9IG5vZGUtPmxpbms7CisKKyAgICAgICAgICBub2RlLT5zaXplICAgPSAwOworICAgICAgICAgIG5vZGUtPnNvdXJjZSA9IE5VTEw7CisKKyAgICAgICAgICBmdF9tZW1fdGFibGVfZnJlZSggdGFibGUsIG5vZGUgKTsKKworICAgICAgICAgIGlmICggdGFibGUtPm5vZGVzICogMyA8IHRhYmxlLT5zaXplICB8fAorICAgICAgICAgICAgICAgdGFibGUtPnNpemUgICogMyA8IHRhYmxlLT5ub2RlcyApCisgICAgICAgICAgICBmdF9tZW1fdGFibGVfcmVzaXplKCB0YWJsZSApOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGZ0X21lbV9kZWJ1Z19wYW5pYygKKyAgICAgICAgICAidHJ5aW5nIHRvIGZyZWUgdW5rbm93biBibG9jayBhdCAlcCBpbiAoJXM6JWxkKVxuIiwKKyAgICAgICAgICBhZGRyZXNzLAorICAgICAgICAgIEZUX0ZJTEVOQU1FKCBfZnRfZGVidWdfZmlsZSApLCBfZnRfZGVidWdfbGluZW5vICk7CisgICAgfQorICB9CisKKworICBzdGF0aWMgRlRfUG9pbnRlcgorICBmdF9tZW1fZGVidWdfYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgc2l6ZSApCisgIHsKKyAgICBGVF9NZW1UYWJsZSAgdGFibGUgPSAoRlRfTWVtVGFibGUpbWVtb3J5LT51c2VyOworICAgIEZUX0J5dGUqICAgICBibG9jazsKKworCisgICAgaWYgKCBzaXplIDw9IDAgKQorICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKCAibmVnYXRpdmUgYmxvY2sgc2l6ZSBhbGxvY2F0aW9uICglbGQpIiwgc2l6ZSApOworCisgICAgLyogcmV0dXJuIE5VTEwgaWYgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG9jYXRpb25zIHdhcyByZWFjaGVkICovCisgICAgaWYgKCB0YWJsZS0+Ym91bmRfY291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgdGFibGUtPmFsbG9jX2NvdW50ID49IHRhYmxlLT5hbGxvY19jb3VudF9tYXggKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiByZXR1cm4gTlVMTCBpZiB0aGlzIGFsbG9jYXRpb24gd291bGQgb3ZlcmZsb3cgdGhlIG1heGltdW0gaGVhcCBzaXplICovCisgICAgaWYgKCB0YWJsZS0+Ym91bmRfdG90YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICB0YWJsZS0+YWxsb2NfdG90YWxfbWF4IC0gdGFibGUtPmFsbG9jX2N1cnJlbnQgPiBzaXplICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgYmxvY2sgPSAoRlRfQnl0ZSAqKWZ0X21lbV90YWJsZV9hbGxvYyggdGFibGUsIHNpemUgKTsKKyAgICBpZiAoIGJsb2NrICkKKyAgICB7CisgICAgICBmdF9tZW1fdGFibGVfc2V0KCB0YWJsZSwgYmxvY2ssIHNpemUsIDAgKTsKKworICAgICAgdGFibGUtPmFsbG9jX2NvdW50Kys7CisgICAgfQorCisgICAgX2Z0X2RlYnVnX2ZpbGUgICA9ICI8dW5rbm93bj4iOworICAgIF9mdF9kZWJ1Z19saW5lbm8gPSAwOworCisgICAgcmV0dXJuIChGVF9Qb2ludGVyKWJsb2NrOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9tZW1fZGVidWdfZnJlZSggRlRfTWVtb3J5ICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYmxvY2sgKQorICB7CisgICAgRlRfTWVtVGFibGUgIHRhYmxlID0gKEZUX01lbVRhYmxlKW1lbW9yeS0+dXNlcjsKKworCisgICAgaWYgKCBibG9jayA9PSBOVUxMICkKKyAgICAgIGZ0X21lbV9kZWJ1Z19wYW5pYyggInRyeWluZyB0byBmcmVlIE5VTEwgaW4gKCVzOiVsZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GSUxFTkFNRSggX2Z0X2RlYnVnX2ZpbGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX2Z0X2RlYnVnX2xpbmVubyApOworCisgICAgZnRfbWVtX3RhYmxlX3JlbW92ZSggdGFibGUsIChGVF9CeXRlKilibG9jaywgMCApOworCisgICAgaWYgKCAhdGFibGUtPmtlZXBfYWxpdmUgKQorICAgICAgZnRfbWVtX3RhYmxlX2ZyZWUoIHRhYmxlLCBibG9jayApOworCisgICAgdGFibGUtPmFsbG9jX2NvdW50LS07CisKKyAgICBfZnRfZGVidWdfZmlsZSAgID0gIjx1bmtub3duPiI7CisgICAgX2Z0X2RlYnVnX2xpbmVubyA9IDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9Qb2ludGVyCisgIGZ0X21lbV9kZWJ1Z19yZWFsbG9jKCBGVF9NZW1vcnkgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBjdXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIG5ld19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYmxvY2sgKQorICB7CisgICAgRlRfTWVtVGFibGUgIHRhYmxlID0gKEZUX01lbVRhYmxlKW1lbW9yeS0+dXNlcjsKKyAgICBGVF9NZW1Ob2RlICAgbm9kZSwgKnBub2RlOworICAgIEZUX1BvaW50ZXIgICBuZXdfYmxvY2s7CisgICAgRlRfTG9uZyAgICAgIGRlbHRhOworCisgICAgY29uc3QgY2hhciogIGZpbGVfbmFtZSA9IEZUX0ZJTEVOQU1FKCBfZnRfZGVidWdfZmlsZSApOworICAgIEZUX0xvbmcgICAgICBsaW5lX25vICAgPSBfZnRfZGVidWdfbGluZW5vOworCisKKyAgICAvKiB1bmxpa2VseSwgYnV0IHBvc3NpYmxlICovCisgICAgaWYgKCBuZXdfc2l6ZSA9PSBjdXJfc2l6ZSApCisgICAgICByZXR1cm4gYmxvY2s7CisKKyAgICAvKiB0aGUgZm9sbG93aW5nIGlzIHZhbGlkIGFjY29yZGluZyB0byBBTlNJIEMgKi8KKyNpZiAwCisgICAgaWYgKCBibG9jayA9PSBOVUxMIHx8IGN1cl9zaXplID09IDAgKQorICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKCAidHJ5aW5nIHRvIHJlYWxsb2NhdGUgTlVMTCBpbiAoJXM6JWxkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSwgbGluZV9ubyApOworI2VuZGlmCisKKyAgICAvKiB3aGlsZSB0aGUgZm9sbG93aW5nIGlzIGFsbG93ZWQgaW4gQU5TSSBDIGFsc28sIHdlIGFib3J0IHNpbmNlICovCisgICAgLyogc3VjaCBjYXNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggbmV3X3NpemUgPD0gMCApCisgICAgICBmdF9tZW1fZGVidWdfcGFuaWMoCisgICAgICAgICJ0cnlpbmcgdG8gcmVhbGxvY2F0ZSAlcCB0byBzaXplIDAgKGN1cnJlbnQgaXMgJWxkKSBpbiAoJXM6JWxkKSIsCisgICAgICAgIGJsb2NrLCBjdXJfc2l6ZSwgZmlsZV9uYW1lLCBsaW5lX25vICk7CisKKyAgICAvKiBjaGVjayBgY3VyX3NpemUnIHZhbHVlICovCisgICAgcG5vZGUgPSBmdF9tZW1fdGFibGVfZ2V0X25vZGVwKCB0YWJsZSwgKEZUX0J5dGUqKWJsb2NrICk7CisgICAgbm9kZSAgPSAqcG5vZGU7CisgICAgaWYgKCAhbm9kZSApCisgICAgICBmdF9tZW1fZGVidWdfcGFuaWMoCisgICAgICAgICJ0cnlpbmcgdG8gcmVhbGxvY2F0ZSB1bmtub3duIGJsb2NrIGF0ICVwIGluICglczolbGQpIiwKKyAgICAgICAgYmxvY2ssIGZpbGVfbmFtZSwgbGluZV9ubyApOworCisgICAgaWYgKCBub2RlLT5zaXplIDw9IDAgKQorICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKAorICAgICAgICAidHJ5aW5nIHRvIHJlYWxsb2NhdGUgZnJlZWQgYmxvY2sgYXQgJXAgaW4gKCVzOiVsZCkiLAorICAgICAgICBibG9jaywgZmlsZV9uYW1lLCBsaW5lX25vICk7CisKKyAgICBpZiAoIG5vZGUtPnNpemUgIT0gY3VyX3NpemUgKQorICAgICAgZnRfbWVtX2RlYnVnX3BhbmljKCAiaW52YWxpZCBmdF9yZWFsbG9jIHJlcXVlc3QgZm9yICVwLiBjdXJfc2l6ZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlbGQgaW5zdGVhZCBvZiAlbGQgaW4gKCVzOiVsZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgY3VyX3NpemUsIG5vZGUtPnNpemUsIGZpbGVfbmFtZSwgbGluZV9ubyApOworCisgICAgLyogcmV0dXJuIE5VTEwgaWYgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG9jYXRpb25zIHdhcyByZWFjaGVkICovCisgICAgaWYgKCB0YWJsZS0+Ym91bmRfY291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgdGFibGUtPmFsbG9jX2NvdW50ID49IHRhYmxlLT5hbGxvY19jb3VudF9tYXggKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkZWx0YSA9IG5ld19zaXplIC0gY3VyX3NpemU7CisKKyAgICAvKiByZXR1cm4gTlVMTCBpZiB0aGlzIGFsbG9jYXRpb24gd291bGQgb3ZlcmZsb3cgdGhlIG1heGltdW0gaGVhcCBzaXplICovCisgICAgaWYgKCBkZWx0YSA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgdGFibGUtPmJvdW5kX3RvdGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHRhYmxlLT5hbGxvY19jdXJyZW50ICsgZGVsdGEgPiB0YWJsZS0+YWxsb2NfdG90YWxfbWF4ICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgbmV3X2Jsb2NrID0gKEZUX1BvaW50ZXIpZnRfbWVtX3RhYmxlX2FsbG9jKCB0YWJsZSwgbmV3X3NpemUgKTsKKyAgICBpZiAoIG5ld19ibG9jayA9PSBOVUxMICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgZnRfbWVtX3RhYmxlX3NldCggdGFibGUsIChGVF9CeXRlKiluZXdfYmxvY2ssIG5ld19zaXplLCBkZWx0YSApOworCisgICAgZnRfbWVtY3B5KCBuZXdfYmxvY2ssIGJsb2NrLCBjdXJfc2l6ZSA8IG5ld19zaXplID8gKHNpemVfdCljdXJfc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChzaXplX3QpbmV3X3NpemUgKTsKKworICAgIGZ0X21lbV90YWJsZV9yZW1vdmUoIHRhYmxlLCAoRlRfQnl0ZSopYmxvY2ssIGRlbHRhICk7CisKKyAgICBfZnRfZGVidWdfZmlsZSAgID0gIjx1bmtub3duPiI7CisgICAgX2Z0X2RlYnVnX2xpbmVubyA9IDA7CisKKyAgICBpZiAoICF0YWJsZS0+a2VlcF9hbGl2ZSApCisgICAgICBmdF9tZW1fdGFibGVfZnJlZSggdGFibGUsIGJsb2NrICk7CisKKyAgICByZXR1cm4gbmV3X2Jsb2NrOworICB9CisKKworICBleHRlcm4gRlRfSW50CisgIGZ0X21lbV9kZWJ1Z19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9NZW1UYWJsZSAgdGFibGU7CisgICAgRlRfSW50ICAgICAgIHJlc3VsdCA9IDA7CisKKworICAgIGlmICggZ2V0ZW52KCAiRlQyX0RFQlVHX01FTU9SWSIgKSApCisgICAgeworICAgICAgdGFibGUgPSBmdF9tZW1fdGFibGVfbmV3KCBtZW1vcnkgKTsKKyAgICAgIGlmICggdGFibGUgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcDsKKworCisgICAgICAgIG1lbW9yeS0+dXNlciAgICA9IHRhYmxlOworICAgICAgICBtZW1vcnktPmFsbG9jICAgPSBmdF9tZW1fZGVidWdfYWxsb2M7CisgICAgICAgIG1lbW9yeS0+cmVhbGxvYyA9IGZ0X21lbV9kZWJ1Z19yZWFsbG9jOworICAgICAgICBtZW1vcnktPmZyZWUgICAgPSBmdF9tZW1fZGVidWdfZnJlZTsKKworICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0FMTE9DX1RPVEFMX01BWCIgKTsKKyAgICAgICAgaWYgKCBwICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTG9uZyAgIHRvdGFsX21heCA9IGZ0X2F0b2woIHAgKTsKKworCisgICAgICAgICAgaWYgKCB0b3RhbF9tYXggPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0YWJsZS0+Ym91bmRfdG90YWwgICAgID0gMTsKKyAgICAgICAgICAgIHRhYmxlLT5hbGxvY190b3RhbF9tYXggPSB0b3RhbF9tYXg7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcCA9IGdldGVudiggIkZUMl9BTExPQ19DT1VOVF9NQVgiICk7CisgICAgICAgIGlmICggcCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0xvbmcgIHRvdGFsX2NvdW50ID0gZnRfYXRvbCggcCApOworCisKKyAgICAgICAgICBpZiAoIHRvdGFsX2NvdW50ID4gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgdGFibGUtPmJvdW5kX2NvdW50ICAgICA9IDE7CisgICAgICAgICAgICB0YWJsZS0+YWxsb2NfY291bnRfbWF4ID0gdG90YWxfY291bnQ7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcCA9IGdldGVudiggIkZUMl9LRUVQX0FMSVZFIiApOworICAgICAgICBpZiAoIHAgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Mb25nICBrZWVwX2FsaXZlID0gZnRfYXRvbCggcCApOworCisKKyAgICAgICAgICBpZiAoIGtlZXBfYWxpdmUgPiAwICkKKyAgICAgICAgICAgIHRhYmxlLT5rZWVwX2FsaXZlID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIGV4dGVybiB2b2lkCisgIGZ0X21lbV9kZWJ1Z19kb25lKCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9NZW1UYWJsZSAgdGFibGUgPSAoRlRfTWVtVGFibGUpbWVtb3J5LT51c2VyOworCisKKyAgICBpZiAoIHRhYmxlICkKKyAgICB7CisgICAgICBtZW1vcnktPmZyZWUgICAgPSB0YWJsZS0+ZnJlZTsKKyAgICAgIG1lbW9yeS0+cmVhbGxvYyA9IHRhYmxlLT5yZWFsbG9jOworICAgICAgbWVtb3J5LT5hbGxvYyAgID0gdGFibGUtPmFsbG9jOworCisgICAgICBmdF9tZW1fdGFibGVfZGVzdHJveSggdGFibGUgKTsKKyAgICAgIG1lbW9yeS0+dXNlciA9IE5VTEw7CisgICAgfQorICB9CisKKworICBzdGF0aWMgaW50CisgIGZ0X21lbV9zb3VyY2VfY29tcGFyZSggY29uc3Qgdm9pZCogIHAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBwMiApCisgIHsKKyAgICBGVF9NZW1Tb3VyY2UgIHMxID0gKihGVF9NZW1Tb3VyY2UqKXAxOworICAgIEZUX01lbVNvdXJjZSAgczIgPSAqKEZUX01lbVNvdXJjZSopcDI7CisKKworICAgIGlmICggczItPm1heF9zaXplID4gczEtPm1heF9zaXplICkKKyAgICAgIHJldHVybiAxOworICAgIGVsc2UgaWYgKCBzMi0+bWF4X3NpemUgPCBzMS0+bWF4X3NpemUgKQorICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICB9CisKKworICBleHRlcm4gdm9pZAorICBGVF9EdW1wTWVtb3J5KCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9NZW1UYWJsZSAgdGFibGUgPSAoRlRfTWVtVGFibGUpbWVtb3J5LT51c2VyOworCisKKyAgICBpZiAoIHRhYmxlICkKKyAgICB7CisgICAgICBGVF9NZW1Tb3VyY2UqICBidWNrZXQgPSB0YWJsZS0+c291cmNlczsKKyAgICAgIEZUX01lbVNvdXJjZSogIGxpbWl0ICA9IGJ1Y2tldCArIEZUX01FTV9TT1VSQ0VfQlVDS0VUUzsKKyAgICAgIEZUX01lbVNvdXJjZSogIHNvdXJjZXM7CisgICAgICBGVF9JbnQgICAgICAgICBubiwgY291bnQ7CisgICAgICBjb25zdCBjaGFyKiAgICBmbXQ7CisKKworICAgICAgY291bnQgPSAwOworICAgICAgZm9yICggOyBidWNrZXQgPCBsaW1pdDsgYnVja2V0KysgKQorICAgICAgeworICAgICAgICBGVF9NZW1Tb3VyY2UgIHNvdXJjZSA9ICpidWNrZXQ7CisKKworICAgICAgICBmb3IgKCA7IHNvdXJjZTsgc291cmNlID0gc291cmNlLT5saW5rICkKKyAgICAgICAgICBjb3VudCsrOworICAgICAgfQorCisgICAgICBzb3VyY2VzID0gKEZUX01lbVNvdXJjZSopCisgICAgICAgICAgICAgICAgICBmdF9tZW1fdGFibGVfYWxsb2MoCisgICAgICAgICAgICAgICAgICAgIHRhYmxlLCBjb3VudCAqIChGVF9Mb25nKXNpemVvZiAoICpzb3VyY2VzICkgKTsKKworICAgICAgY291bnQgPSAwOworICAgICAgZm9yICggYnVja2V0ID0gdGFibGUtPnNvdXJjZXM7IGJ1Y2tldCA8IGxpbWl0OyBidWNrZXQrKyApCisgICAgICB7CisgICAgICAgIEZUX01lbVNvdXJjZSAgc291cmNlID0gKmJ1Y2tldDsKKworCisgICAgICAgIGZvciAoIDsgc291cmNlOyBzb3VyY2UgPSBzb3VyY2UtPmxpbmsgKQorICAgICAgICAgIHNvdXJjZXNbY291bnQrK10gPSBzb3VyY2U7CisgICAgICB9CisKKyAgICAgIGZ0X3Fzb3J0KCBzb3VyY2VzLAorICAgICAgICAgICAgICAgIChzaXplX3QpY291bnQsCisgICAgICAgICAgICAgICAgc2l6ZW9mICggKnNvdXJjZXMgKSwKKyAgICAgICAgICAgICAgICBmdF9tZW1fc291cmNlX2NvbXBhcmUgKTsKKworICAgICAgcHJpbnRmKCAiRnJlZVR5cGUgTWVtb3J5IER1bXA6ICIKKyAgICAgICAgICAgICAgImN1cnJlbnQ9JWxkIG1heD0lbGQgdG90YWw9JWxkIGNvdW50PSVsZFxuIiwKKyAgICAgICAgICAgICAgdGFibGUtPmFsbG9jX2N1cnJlbnQsIHRhYmxlLT5hbGxvY19tYXgsCisgICAgICAgICAgICAgIHRhYmxlLT5hbGxvY190b3RhbCwgdGFibGUtPmFsbG9jX2NvdW50ICk7CisgICAgICBwcmludGYoICIgYmxvY2sgIGJsb2NrICAgIHNpemVzICAgIHNpemVzICAgIHNpemVzICAgc291cmNlXG4iICk7CisgICAgICBwcmludGYoICIgY291bnQgICBoaWdoICAgICAgc3VtICBoaWdoc3VtICAgICAgbWF4ICAgbG9jYXRpb25cbiIgKTsKKyAgICAgIHByaW50ZiggIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKworICAgICAgZm10ID0gIiU2bGQgJTZsZCAlOGxkICU4bGQgJThsZCAlczolZFxuIjsKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IGNvdW50OyBubisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfTWVtU291cmNlICBzb3VyY2UgPSBzb3VyY2VzW25uXTsKKworCisgICAgICAgIHByaW50ZiggZm10LAorICAgICAgICAgICAgICAgIHNvdXJjZS0+Y3VyX2Jsb2Nrcywgc291cmNlLT5tYXhfYmxvY2tzLAorICAgICAgICAgICAgICAgIHNvdXJjZS0+Y3VyX3NpemUsIHNvdXJjZS0+bWF4X3NpemUsIHNvdXJjZS0+Y3VyX21heCwKKyAgICAgICAgICAgICAgICBGVF9GSUxFTkFNRSggc291cmNlLT5maWxlX25hbWUgKSwKKyAgICAgICAgICAgICAgICBzb3VyY2UtPmxpbmVfbm8gKTsKKyAgICAgIH0KKyAgICAgIHByaW50ZiggIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiApOworCisgICAgICBmdF9tZW1fdGFibGVfZnJlZSggdGFibGUsIHNvdXJjZXMgKTsKKyAgICB9CisgIH0KKworI2Vsc2UgIC8qICFGVF9ERUJVR19NRU1PUlkgKi8KKworICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLworICB0eXBlZGVmIGludCAgX2RlYnVnX21lbV9kdW1teTsKKworI2VuZGlmIC8qICFGVF9ERUJVR19NRU1PUlkgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGRlYnVnLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZGI3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRkZWJ1Zy5jCkBAIC0wLDAgKzEsMjY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGRlYnVnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGNvbXBvbmVudCBjb250YWlucyB2YXJpb3VzIG1hY3JvcyBhbmQgZnVuY3Rpb25zIHVzZWQgdG8gZWFzZSB0aGUgKi8KKyAgLyogZGVidWdnaW5nIG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUuICBJdHMgbWFpbiBwdXJwb3NlIGlzIGluIGFzc2VydGlvbiAgICovCisgIC8qIGNoZWNraW5nLCB0cmFjaW5nLCBhbmQgZXJyb3IgZGV0ZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlcmUgYXJlIG5vdyB0aHJlZSBkZWJ1Z2dpbmcgbW9kZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHRyYWNlIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBsb2cgZmlsZSAod2hpY2ggY2FuIGJlIHRoZSAqLworICAvKiAgIHN0YW5kYXJkIGVycm9yIG91dHB1dCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZXJyb3IgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBPbmx5IGVycm9yIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIHJlbGVhc2UgbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm8gZXJyb3IgbWVzc2FnZSBpcyBzZW50IG9yIGdlbmVyYXRlZC4gIFRoZSBjb2RlIGlzIGZyZWUgZnJvbSBhbnkgICAqLworICAvKiAgIGRlYnVnZ2luZyBwYXJ0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgorCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9NZXNzYWdlKCBjb25zdCBjaGFyKiAgZm10LAorICAgICAgICAgICAgICAuLi4gKQorICB7CisgICAgdmFfbGlzdCAgYXA7CisKKworICAgIHZhX3N0YXJ0KCBhcCwgZm10ICk7CisgICAgdmZwcmludGYoIHN0ZGVyciwgZm10LCBhcCApOworICAgIHZhX2VuZCggYXAgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX1BhbmljKCBjb25zdCBjaGFyKiAgZm10LAorICAgICAgICAgICAgLi4uICkKKyAgeworICAgIHZhX2xpc3QgIGFwOworCisKKyAgICB2YV9zdGFydCggYXAsIGZtdCApOworICAgIHZmcHJpbnRmKCBzdGRlcnIsIGZtdCwgYXAgKTsKKyAgICB2YV9lbmQoIGFwICk7CisKKyAgICBleGl0KCBFWElUX0ZBSUxVUkUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggaW50ICkKKyAgRlRfVGhyb3coIEZUX0Vycm9yICAgICBlcnJvciwKKyAgICAgICAgICAgIGludCAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGUgKQorICB7CisgICAgRlRfVU5VU0VEKCBlcnJvciApOworICAgIEZUX1VOVVNFRCggbGluZSApOworICAgIEZUX1VOVVNFRCggZmlsZSApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX0VSUk9SICovCisKKworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworICAvKiBhcnJheSBvZiB0cmFjZSBsZXZlbHMsIGluaXRpYWxpemVkIHRvIDAgKi8KKyAgaW50ICBmdF90cmFjZV9sZXZlbHNbdHJhY2VfY291bnRdOworCisKKyAgLyogZGVmaW5lIGFycmF5IG9mIHRyYWNlIHRvZ2dsZSBuYW1lcyAqLworI2RlZmluZSBGVF9UUkFDRV9ERUYoIHggKSAgI3ggLAorCisgIHN0YXRpYyBjb25zdCBjaGFyKiAgZnRfdHJhY2VfdG9nZ2xlc1t0cmFjZV9jb3VudCArIDFdID0KKyAgeworI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJBQ0VfSAorICAgIE5VTEwKKyAgfTsKKworI3VuZGVmIEZUX1RSQUNFX0RFRgorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfSW50ICkKKyAgRlRfVHJhY2VfR2V0X0NvdW50KCB2b2lkICkKKyAgeworICAgIHJldHVybiB0cmFjZV9jb3VudDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggY29uc3QgY2hhciAqICkKKyAgRlRfVHJhY2VfR2V0X05hbWUoIEZUX0ludCAgaWR4ICkKKyAgeworICAgIGludCAgbWF4ID0gRlRfVHJhY2VfR2V0X0NvdW50KCk7CisKKworICAgIGlmICggaWR4IDwgbWF4ICkKKyAgICAgIHJldHVybiBmdF90cmFjZV90b2dnbGVzW2lkeF07CisgICAgZWxzZQorICAgICAgcmV0dXJuIE5VTEw7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW5pdGlhbGl6ZSB0aGUgdHJhY2luZyBzdWItc3lzdGVtLiAgVGhpcyBpcyBkb25lIGJ5IHJldHJpZXZpbmcgdGhlICAgICovCisgIC8qIHZhbHVlIG9mIHRoZSBgRlQyX0RFQlVHJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIEl0IG11c3QgYmUgYSBsaXN0IG9mICAqLworICAvKiB0b2dnbGVzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBgOycsIG9yIGAsJy4gIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGV4cG9ydCBGVDJfREVCVUc9ImFueTozIG1lbW9yeTo3IHN0cmVhbTo1IiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyByZXF1ZXN0cyB0aGF0IGFsbCBsZXZlbHMgYmUgc2V0IHRvIDMsIGV4Y2VwdCB0aGUgdHJhY2UgbGV2ZWwgZm9yICovCisgIC8qIHRoZSBtZW1vcnkgYW5kIHN0cmVhbSBjb21wb25lbnRzIHdoaWNoIGFyZSBzZXQgdG8gNyBhbmQgNSwgICAgICAgICAgICAqLworICAvKiByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNlZSB0aGUgZmlsZSA8aW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmg+IGZvciBkZXRhaWxzIG9mIHRoZSAgICAgICAgICAqLworICAvKiBhdmFpbGFibGUgdG9nZ2xlIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBsZXZlbCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNzsgMCBtZWFucyBxdWlldCAoZXhjZXB0IGZvciBzZXJpb3VzICAqLworICAvKiBydW50aW1lIGVycm9ycyksIGFuZCA3IG1lYW5zIF92ZXJ5XyB2ZXJib3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgZnRfZGVidWdfaW5pdCggdm9pZCApCisgIHsKKyAgICBjb25zdCBjaGFyKiAgZnQyX2RlYnVnID0gZ2V0ZW52KCAiRlQyX0RFQlVHIiApOworCisKKyAgICBpZiAoIGZ0Ml9kZWJ1ZyApCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgPSBmdDJfZGVidWc7CisgICAgICBjb25zdCBjaGFyKiAgcTsKKworCisgICAgICBmb3IgKCA7ICpwOyBwKysgKQorICAgICAgeworICAgICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgc2VwYXJhdG9ycyAqLworICAgICAgICBpZiAoICpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICcsJyB8fCAqcCA9PSAnOycgfHwgKnAgPT0gJz0nICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiByZWFkIHRvZ2dsZSBuYW1lLCBmb2xsb3dlZCBieSAnOicgKi8KKyAgICAgICAgcSA9IHA7CisgICAgICAgIHdoaWxlICggKnAgJiYgKnAgIT0gJzonICkKKyAgICAgICAgICBwKys7CisKKyAgICAgICAgaWYgKCAhKnAgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggKnAgPT0gJzonICYmIHAgPiBxICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgbiwgaSwgbGVuID0gKEZUX0ludCkoIHAgLSBxICk7CisgICAgICAgICAgRlRfSW50ICBsZXZlbCA9IC0xLCBmb3VuZCA9IC0xOworCisKKyAgICAgICAgICBmb3IgKCBuID0gMDsgbiA8IHRyYWNlX2NvdW50OyBuKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICB0b2dnbGUgPSBmdF90cmFjZV90b2dnbGVzW25dOworCisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHRvZ2dsZVtpXSAhPSBxW2ldICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBpID09IGxlbiAmJiB0b2dnbGVbaV0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvdW5kID0gbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcmVhZCBsZXZlbCAqLworICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZiAoICpwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOworICAgICAgICAgICAgaWYgKCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA3ICkKKyAgICAgICAgICAgICAgbGV2ZWwgPSAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIGZvdW5kID49IDAgJiYgbGV2ZWwgPj0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBmb3VuZCA9PSB0cmFjZV9hbnkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yIGBhbnknICovCisgICAgICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApCisgICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW25dID0gbGV2ZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1tmb3VuZF0gPSBsZXZlbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisjZWxzZSAgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQorICB7CisgICAgLyogbm90aGluZyAqLworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfSW50ICkKKyAgRlRfVHJhY2VfR2V0X0NvdW50KCB2b2lkICkKKyAgeworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9CQVNFX0RFRiggY29uc3QgY2hhciAqICkKKyAgRlRfVHJhY2VfR2V0X05hbWUoIEZUX0ludCAgaWR4ICkKKyAgeworICAgIEZUX1VOVVNFRCggaWR4ICk7CisKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisKKyNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGZudGZtdC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Zm50Zm10LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNzQzMQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGZudGZtdC5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Zm50Zm10LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIGZvbnQgZm9ybWF0cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GT05UX0ZPUk1BVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRmbnRmbXQuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIGNvbnN0IGNoYXIqICkKKyAgRlRfR2V0X0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIGNvbnN0IGNoYXIqICByZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoIGZhY2UgKQorICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHJlc3VsdCwgRk9OVF9GT1JNQVQgKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGRlcHJlY2F0ZWQgZnVuY3Rpb24gbmFtZTsgcmV0YWluZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5ICovCisKKyAgRlRfRVhQT1JUX0RFRiggY29uc3QgY2hhciogKQorICBGVF9HZXRfWDExX0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIGNvbnN0IGNoYXIqICByZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoIGZhY2UgKQorICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHJlc3VsdCwgRk9OVF9GT1JNQVQgKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGZzdHlwZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0ZnN0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzNDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGZzdHlwZS5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0ZnN0eXBlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgdG8gYWNjZXNzIEZTVHlwZSBkYXRhIChib2R5KS4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX1VTaG9ydCApCisgIEZUX0dldF9GU1R5cGVfRmxhZ3MoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgVFRfT1MyKiAgb3MyOworCisKKyAgICAvKiBmaXJzdCwgdHJ5IHRvIGdldCB0aGUgZnNfdHlwZSBkaXJlY3RseSBmcm9tIHRoZSBmb250ICovCisgICAgaWYgKCBmYWNlICkKKyAgICB7CisgICAgICBGVF9TZXJ2aWNlX1BzSW5mbyAgc2VydmljZSA9IE5VTEw7CisKKworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFBPU1RTQ1JJUFRfSU5GTyApOworCisgICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+cHNfZ2V0X2ZvbnRfZXh0cmEgKQorICAgICAgeworICAgICAgICBQU19Gb250RXh0cmFSZWMgIGV4dHJhOworCisKKyAgICAgICAgaWYgKCAhc2VydmljZS0+cHNfZ2V0X2ZvbnRfZXh0cmEoIGZhY2UsICZleHRyYSApICYmCisgICAgICAgICAgICAgZXh0cmEuZnNfdHlwZSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgcmV0dXJuIGV4dHJhLmZzX3R5cGU7CisgICAgICB9CisgICAgfQorCisgICAgLyogbG9vayBhdCBGU1R5cGUgYmVmb3JlIGZzVHlwZSBmb3IgVHlwZTQyICovCisKKyAgICBpZiAoICggb3MyID0gKFRUX09TMiopRlRfR2V0X1NmbnRfVGFibGUoIGZhY2UsIEZUX1NGTlRfT1MyICkgKSAhPSBOVUxMICYmCisgICAgICAgICBvczItPnZlcnNpb24gIT0gMHhGRkZGVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICByZXR1cm4gb3MyLT5mc1R5cGU7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z2FzcC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z2FzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDI1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRnYXNwLmMKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRnYXNwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFjY2VzcyBvZiBUcnVlVHlwZSdzIGBnYXNwJyB0YWJsZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0dBU1BfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfSW50ICkKKyAgRlRfR2V0X0dhc3AoIEZUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICBGVF9VSW50ICBwcGVtICkKKyAgeworICAgIEZUX0ludCAgcmVzdWx0ID0gRlRfR0FTUF9OT19UQUJMRTsKKworCisgICAgaWYgKCBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgeworICAgICAgVFRfRmFjZSAgdHRmYWNlID0gKFRUX0ZhY2UpZmFjZTsKKworCisgICAgICBpZiAoIHR0ZmFjZS0+Z2FzcC5udW1SYW5nZXMgPiAwICkKKyAgICAgIHsKKyAgICAgICAgVFRfR2FzcFJhbmdlICByYW5nZSAgICAgPSB0dGZhY2UtPmdhc3AuZ2FzcFJhbmdlczsKKyAgICAgICAgVFRfR2FzcFJhbmdlICByYW5nZV9lbmQgPSByYW5nZSArIHR0ZmFjZS0+Z2FzcC5udW1SYW5nZXM7CisKKworICAgICAgICB3aGlsZSAoIHBwZW0gPiByYW5nZS0+bWF4UFBFTSApCisgICAgICAgIHsKKyAgICAgICAgICByYW5nZSsrOworICAgICAgICAgIGlmICggcmFuZ2UgPj0gcmFuZ2VfZW5kICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHJhbmdlLT5nYXNwRmxhZzsKKworICAgICAgICAvKiBlbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIHNwdXJpb3VzIGJpdHMgKi8KKyAgICAgICAgaWYgKCB0dGZhY2UtPmdhc3AudmVyc2lvbiA9PSAwICkKKyAgICAgICAgICByZXN1bHQgJj0gMzsKKyAgICAgIH0KKyAgICB9CisgIEV4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z2xvYWRyLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRnbG9hZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI4NjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z2xvYWRyLmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z2xvYWRyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9HTFlQSF9MT0FERVJfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2dsb2FkZXIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBHIEwgWSBQIEggICBMIE8gQSBEIEUgUiAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBnbHlwaCBsb2FkZXIgaXMgYSBzaW1wbGUgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gbG9hZCBhIHNldCBvZiAgICAqLworICAvKiBnbHlwaHMgZWFzaWx5LiAgSXQgaXMgY3JpdGljYWwgZm9yIHRoZSBjb3JyZWN0IGxvYWRpbmcgb2YgY29tcG9zaXRlcy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIElkZWFsbHksIG9uZSBjYW4gc2VlIGl0IGFzIGEgc3RhY2sgb2YgYWJzdHJhY3QgYGdseXBoJyBvYmplY3RzLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBsb2FkZXIuYmFzZSAgICAgSXMgcmVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiAgSXQgZGVzY3JpYmVzIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNpbmdsZSBnbHlwaCBpbWFnZSBtYWRlIG9mIHRoZSBqdXh0YXBvc2l0aW9uIG9mICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzZXZlcmFsIGdseXBocyAodGhvc2UgYGluIHRoZSBzdGFjaycpLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgbG9hZGVyLmN1cnJlbnQgIERlc2NyaWJlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb24gd2hpY2ggYSBuZXcgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBnbHlwaCBjYW4gYmUgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgUmV3aW5kICAgICAgICAgIENsZWFycyB0aGUgc3RhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFByZXBhcmUgICAgICAgICBTZXQgdXAgYGxvYWRlci5jdXJyZW50JyBmb3IgYWRkaXRpb24gb2YgYSBuZXcgZ2x5cGggKi8KKyAgLyogICAgICAgICAgICAgICAgICAgaW1hZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgQWRkICAgICAgICAgICAgIEFkZCB0aGUgYGN1cnJlbnQnIGdseXBoIGltYWdlIHRvIHRoZSBgYmFzZScgb25lLCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBhbmQgcHJlcGFyZSBmb3IgYW5vdGhlciBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBnbHlwaCBsb2FkZXIgaXMgbm93IGEgYmFzZSBvYmplY3QuICBFYWNoIGRyaXZlciB1c2VkIHRvICAgICAgICAgICAqLworICAvKiByZS1pbXBsZW1lbnQgaXQgaW4gb25lIHdheSBvciB0aGUgb3RoZXIsIHdoaWNoIHdhc3RlZCBjb2RlIGFuZCAgICAgICAgKi8KKyAgLyogZW5lcmd5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIGNyZWF0ZSBhIG5ldyBnbHlwaCBsb2FkZXIgKi8KKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfTmV3KCBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaExvYWRlciAgKmFsb2FkZXIgKQorICB7CisgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IE5VTEw7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworCisKKyAgICBpZiAoICFGVF9ORVcoIGxvYWRlciApICkKKyAgICB7CisgICAgICBsb2FkZXItPm1lbW9yeSA9IG1lbW9yeTsKKyAgICAgICphbG9hZGVyICAgICAgID0gbG9hZGVyOworICAgIH0KKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHJld2luZCB0aGUgZ2x5cGggbG9hZGVyIC0gcmVzZXQgY291bnRlcnMgdG8gMCAqLworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggRlRfR2x5cGhMb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBGVF9HbHlwaExvYWQgIGJhc2UgICAgPSAmbG9hZGVyLT5iYXNlOworICAgIEZUX0dseXBoTG9hZCAgY3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQ7CisKKworICAgIGJhc2UtPm91dGxpbmUubl9wb2ludHMgICA9IDA7CisgICAgYmFzZS0+b3V0bGluZS5uX2NvbnRvdXJzID0gMDsKKyAgICBiYXNlLT5udW1fc3ViZ2x5cGhzICAgICAgPSAwOworCisgICAgKmN1cnJlbnQgPSAqYmFzZTsKKyAgfQorCisKKyAgLyogcmVzZXQgdGhlIGdseXBoIGxvYWRlciwgZnJlZXMgYWxsIGFsbG9jYXRlZCB0YWJsZXMgKi8KKyAgLyogYW5kIHN0YXJ0cyBmcm9tIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9HbHlwaExvYWRlcl9SZXNldCggRlRfR2x5cGhMb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBGVF9NZW1vcnkgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CisKKworICAgIEZUX0ZSRUUoIGxvYWRlci0+YmFzZS5vdXRsaW5lLnBvaW50cyApOworICAgIEZUX0ZSRUUoIGxvYWRlci0+YmFzZS5vdXRsaW5lLnRhZ3MgKTsKKyAgICBGVF9GUkVFKCBsb2FkZXItPmJhc2Uub3V0bGluZS5jb250b3VycyApOworICAgIEZUX0ZSRUUoIGxvYWRlci0+YmFzZS5leHRyYV9wb2ludHMgKTsKKyAgICBGVF9GUkVFKCBsb2FkZXItPmJhc2Uuc3ViZ2x5cGhzICk7CisKKyAgICBsb2FkZXItPmJhc2UuZXh0cmFfcG9pbnRzMiA9IE5VTEw7CisKKyAgICBsb2FkZXItPm1heF9wb2ludHMgICAgPSAwOworICAgIGxvYWRlci0+bWF4X2NvbnRvdXJzICA9IDA7CisgICAgbG9hZGVyLT5tYXhfc3ViZ2x5cGhzID0gMDsKKworICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CisgIH0KKworCisgIC8qIGRlbGV0ZSBhIGdseXBoIGxvYWRlciAqLworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX0RvbmUoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgaWYgKCBsb2FkZXIgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSBtZW1vcnkgPSBsb2FkZXItPm1lbW9yeTsKKworCisgICAgICBGVF9HbHlwaExvYWRlcl9SZXNldCggbG9hZGVyICk7CisgICAgICBGVF9GUkVFKCBsb2FkZXIgKTsKKyAgICB9CisgIH0KKworCisgIC8qIHJlLWFkanVzdCB0aGUgYGN1cnJlbnQnIG91dGxpbmUgZmllbGRzICovCisgIHN0YXRpYyB2b2lkCisgIEZUX0dseXBoTG9hZGVyX0FkanVzdF9Qb2ludHMoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfT3V0bGluZSogIGJhc2UgICAgPSAmbG9hZGVyLT5iYXNlLm91dGxpbmU7CisgICAgRlRfT3V0bGluZSogIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50Lm91dGxpbmU7CisKKworICAgIGN1cnJlbnQtPnBvaW50cyAgID0gYmFzZS0+cG9pbnRzICAgKyBiYXNlLT5uX3BvaW50czsKKyAgICBjdXJyZW50LT50YWdzICAgICA9IGJhc2UtPnRhZ3MgICAgICsgYmFzZS0+bl9wb2ludHM7CisgICAgY3VycmVudC0+Y29udG91cnMgPSBiYXNlLT5jb250b3VycyArIGJhc2UtPm5fY29udG91cnM7CisKKyAgICAvKiBoYW5kbGUgZXh0cmEgcG9pbnRzIHRhYmxlIC0gaWYgYW55ICovCisgICAgaWYgKCBsb2FkZXItPnVzZV9leHRyYSApCisgICAgeworICAgICAgbG9hZGVyLT5jdXJyZW50LmV4dHJhX3BvaW50cyAgPSBsb2FkZXItPmJhc2UuZXh0cmFfcG9pbnRzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+bl9wb2ludHM7CisKKyAgICAgIGxvYWRlci0+Y3VycmVudC5leHRyYV9wb2ludHMyID0gbG9hZGVyLT5iYXNlLmV4dHJhX3BvaW50czIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5uX3BvaW50czsKKyAgICB9CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoTG9hZGVyX0NyZWF0ZUV4dHJhKCBGVF9HbHlwaExvYWRlciAgbG9hZGVyICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsb2FkZXItPm1lbW9yeTsKKworCisgICAgaWYgKCAhRlRfTkVXX0FSUkFZKCBsb2FkZXItPmJhc2UuZXh0cmFfcG9pbnRzLCAyICogbG9hZGVyLT5tYXhfcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGxvYWRlci0+dXNlX2V4dHJhICAgICAgICAgID0gMTsKKyAgICAgIGxvYWRlci0+YmFzZS5leHRyYV9wb2ludHMyID0gbG9hZGVyLT5iYXNlLmV4dHJhX3BvaW50cyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+bWF4X3BvaW50czsKKworICAgICAgRlRfR2x5cGhMb2FkZXJfQWRqdXN0X1BvaW50cyggbG9hZGVyICk7CisgICAgfQorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogcmUtYWRqdXN0IHRoZSBgY3VycmVudCcgc3ViZ2x5cGhzIGZpZWxkICovCisgIHN0YXRpYyB2b2lkCisgIEZUX0dseXBoTG9hZGVyX0FkanVzdF9TdWJnbHlwaHMoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfR2x5cGhMb2FkICBiYXNlICAgID0gJmxvYWRlci0+YmFzZTsKKyAgICBGVF9HbHlwaExvYWQgIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50OworCisKKyAgICBjdXJyZW50LT5zdWJnbHlwaHMgPSBiYXNlLT5zdWJnbHlwaHMgKyBiYXNlLT5udW1fc3ViZ2x5cGhzOworICB9CisKKworICAvKiBFbnN1cmUgdGhhdCB3ZSBjYW4gYWRkIGBuX3BvaW50cycgYW5kIGBuX2NvbnRvdXJzJyB0byBvdXIgZ2x5cGguICAgICAgKi8KKyAgLyogVGhpcyBmdW5jdGlvbiByZWFsbG9jYXRlcyBpdHMgb3V0bGluZSB0YWJsZXMgaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0ICovCisgIC8qIGl0IERPRVNOJ1QgY2hhbmdlIHRoZSBudW1iZXIgb2YgcG9pbnRzIHdpdGhpbiB0aGUgbG9hZGVyISAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9jb250b3VycyApCisgIHsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICA9IGxvYWRlci0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgICBlcnJvciAgID0gRlRfRXJyX09rOworICAgIEZUX091dGxpbmUqICBiYXNlICAgID0gJmxvYWRlci0+YmFzZS5vdXRsaW5lOworICAgIEZUX091dGxpbmUqICBjdXJyZW50ID0gJmxvYWRlci0+Y3VycmVudC5vdXRsaW5lOworICAgIEZUX0Jvb2wgICAgICBhZGp1c3QgID0gMDsKKworICAgIEZUX1VJbnQgICAgICBuZXdfbWF4LCBvbGRfbWF4OworCisKKyAgICAvKiBjaGVjayBwb2ludHMgJiB0YWdzICovCisgICAgbmV3X21heCA9IChGVF9VSW50KWJhc2UtPm5fcG9pbnRzICsgKEZUX1VJbnQpY3VycmVudC0+bl9wb2ludHMgKworICAgICAgICAgICAgICBuX3BvaW50czsKKyAgICBvbGRfbWF4ID0gbG9hZGVyLT5tYXhfcG9pbnRzOworCisgICAgaWYgKCBuZXdfbWF4ID4gb2xkX21heCApCisgICAgeworICAgICAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBuZXdfbWF4LCA4ICk7CisKKyAgICAgIGlmICggbmV3X21heCA+IEZUX09VVExJTkVfUE9JTlRTX01BWCApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggQXJyYXlfVG9vX0xhcmdlICk7CisKKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGJhc2UtPnBvaW50cywgb2xkX21heCwgbmV3X21heCApIHx8CisgICAgICAgICAgIEZUX1JFTkVXX0FSUkFZKCBiYXNlLT50YWdzLCAgIG9sZF9tYXgsIG5ld19tYXggKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBsb2FkZXItPnVzZV9leHRyYSApCisgICAgICB7CisgICAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGxvYWRlci0+YmFzZS5leHRyYV9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXggKiAyLCBuZXdfbWF4ICogMiApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgRlRfQVJSQVlfTU9WRSggbG9hZGVyLT5iYXNlLmV4dHJhX3BvaW50cyArIG5ld19tYXgsCisgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+YmFzZS5leHRyYV9wb2ludHMgKyBvbGRfbWF4LAorICAgICAgICAgICAgICAgICAgICAgICBvbGRfbWF4ICk7CisKKyAgICAgICAgbG9hZGVyLT5iYXNlLmV4dHJhX3BvaW50czIgPSBsb2FkZXItPmJhc2UuZXh0cmFfcG9pbnRzICsgbmV3X21heDsKKyAgICAgIH0KKworICAgICAgYWRqdXN0ID0gMTsKKyAgICAgIGxvYWRlci0+bWF4X3BvaW50cyA9IG5ld19tYXg7CisgICAgfQorCisgICAgLyogY2hlY2sgY29udG91cnMgKi8KKyAgICBvbGRfbWF4ID0gbG9hZGVyLT5tYXhfY29udG91cnM7CisgICAgbmV3X21heCA9IChGVF9VSW50KWJhc2UtPm5fY29udG91cnMgKyAoRlRfVUludCljdXJyZW50LT5uX2NvbnRvdXJzICsKKyAgICAgICAgICAgICAgbl9jb250b3VyczsKKyAgICBpZiAoIG5ld19tYXggPiBvbGRfbWF4ICkKKyAgICB7CisgICAgICBuZXdfbWF4ID0gRlRfUEFEX0NFSUwoIG5ld19tYXgsIDQgKTsKKworICAgICAgaWYgKCBuZXdfbWF4ID4gRlRfT1VUTElORV9DT05UT1VSU19NQVggKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEFycmF5X1Rvb19MYXJnZSApOworCisgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBiYXNlLT5jb250b3Vycywgb2xkX21heCwgbmV3X21heCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBhZGp1c3QgPSAxOworICAgICAgbG9hZGVyLT5tYXhfY29udG91cnMgPSBuZXdfbWF4OworICAgIH0KKworICAgIGlmICggYWRqdXN0ICkKKyAgICAgIEZUX0dseXBoTG9hZGVyX0FkanVzdF9Qb2ludHMoIGxvYWRlciApOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9HbHlwaExvYWRlcl9SZXNldCggbG9hZGVyICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIEVuc3VyZSB0aGF0IHdlIGNhbiBhZGQgYG5fc3ViZ2x5cGhzJyB0byBvdXIgZ2x5cGguIHRoaXMgZnVuY3Rpb24gKi8KKyAgLyogcmVhbGxvY2F0ZXMgaXRzIHN1YmdseXBocyB0YWJsZSBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgaXQgRE9FUyAqLworICAvKiBOT1QgY2hhbmdlIHRoZSBudW1iZXIgb2Ygc3ViZ2x5cGhzIHdpdGhpbiB0aGUgbG9hZGVyISAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9zdWJzICkKKyAgeworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfVUludCAgICAgICBuZXdfbWF4LCBvbGRfbWF4OworCisgICAgRlRfR2x5cGhMb2FkICBiYXNlICAgID0gJmxvYWRlci0+YmFzZTsKKyAgICBGVF9HbHlwaExvYWQgIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50OworCisKKyAgICBuZXdfbWF4ID0gYmFzZS0+bnVtX3N1YmdseXBocyArIGN1cnJlbnQtPm51bV9zdWJnbHlwaHMgKyBuX3N1YnM7CisgICAgb2xkX21heCA9IGxvYWRlci0+bWF4X3N1YmdseXBoczsKKyAgICBpZiAoIG5ld19tYXggPiBvbGRfbWF4ICkKKyAgICB7CisgICAgICBuZXdfbWF4ID0gRlRfUEFEX0NFSUwoIG5ld19tYXgsIDIgKTsKKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGJhc2UtPnN1YmdseXBocywgb2xkX21heCwgbmV3X21heCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBsb2FkZXItPm1heF9zdWJnbHlwaHMgPSBuZXdfbWF4OworCisgICAgICBGVF9HbHlwaExvYWRlcl9BZGp1c3RfU3ViZ2x5cGhzKCBsb2FkZXIgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHByZXBhcmUgbG9hZGVyIGZvciB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZ2x5cGggb24gdG9wIG9mIHRoZSBiYXNlIG9uZSAqLworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX1ByZXBhcmUoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfR2x5cGhMb2FkICBjdXJyZW50ID0gJmxvYWRlci0+Y3VycmVudDsKKworCisgICAgY3VycmVudC0+b3V0bGluZS5uX3BvaW50cyAgID0gMDsKKyAgICBjdXJyZW50LT5vdXRsaW5lLm5fY29udG91cnMgPSAwOworICAgIGN1cnJlbnQtPm51bV9zdWJnbHlwaHMgICAgICA9IDA7CisKKyAgICBGVF9HbHlwaExvYWRlcl9BZGp1c3RfUG9pbnRzICAgKCBsb2FkZXIgKTsKKyAgICBGVF9HbHlwaExvYWRlcl9BZGp1c3RfU3ViZ2x5cGhzKCBsb2FkZXIgKTsKKyAgfQorCisKKyAgLyogYWRkIGN1cnJlbnQgZ2x5cGggdG8gdGhlIGJhc2UgaW1hZ2UgLS0gYW5kIHByZXBhcmUgZm9yIGFub3RoZXIgKi8KKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9HbHlwaExvYWRlcl9BZGQoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfR2x5cGhMb2FkICBiYXNlOworICAgIEZUX0dseXBoTG9hZCAgY3VycmVudDsKKworICAgIEZUX0ludCAgICAgICAgbl9jdXJyX2NvbnRvdXJzOworICAgIEZUX0ludCAgICAgICAgbl9iYXNlX3BvaW50czsKKyAgICBGVF9JbnQgICAgICAgIG47CisKKworICAgIGlmICggIWxvYWRlciApCisgICAgICByZXR1cm47CisKKyAgICBiYXNlICAgID0gJmxvYWRlci0+YmFzZTsKKyAgICBjdXJyZW50ID0gJmxvYWRlci0+Y3VycmVudDsKKworICAgIG5fY3Vycl9jb250b3VycyA9IGN1cnJlbnQtPm91dGxpbmUubl9jb250b3VyczsKKyAgICBuX2Jhc2VfcG9pbnRzICAgPSBiYXNlLT5vdXRsaW5lLm5fcG9pbnRzOworCisgICAgYmFzZS0+b3V0bGluZS5uX3BvaW50cyA9CisgICAgICAoc2hvcnQpKCBiYXNlLT5vdXRsaW5lLm5fcG9pbnRzICsgY3VycmVudC0+b3V0bGluZS5uX3BvaW50cyApOworICAgIGJhc2UtPm91dGxpbmUubl9jb250b3VycyA9CisgICAgICAoc2hvcnQpKCBiYXNlLT5vdXRsaW5lLm5fY29udG91cnMgKyBjdXJyZW50LT5vdXRsaW5lLm5fY29udG91cnMgKTsKKworICAgIGJhc2UtPm51bV9zdWJnbHlwaHMgKz0gY3VycmVudC0+bnVtX3N1YmdseXBoczsKKworICAgIC8qIGFkanVzdCBjb250b3VycyBjb3VudCBpbiBuZXdlc3Qgb3V0bGluZSAqLworICAgIGZvciAoIG4gPSAwOyBuIDwgbl9jdXJyX2NvbnRvdXJzOyBuKysgKQorICAgICAgY3VycmVudC0+b3V0bGluZS5jb250b3Vyc1tuXSA9CisgICAgICAgIChzaG9ydCkoIGN1cnJlbnQtPm91dGxpbmUuY29udG91cnNbbl0gKyBuX2Jhc2VfcG9pbnRzICk7CisKKyAgICAvKiBwcmVwYXJlIGZvciBhbm90aGVyIG5ldyBnbHlwaCBpbWFnZSAqLworICAgIEZUX0dseXBoTG9hZGVyX1ByZXBhcmUoIGxvYWRlciApOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9HbHlwaExvYWRlcl9Db3B5UG9pbnRzKCBGVF9HbHlwaExvYWRlciAgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaExvYWRlciAgc291cmNlICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBGVF9VSW50ICAgbnVtX3BvaW50cyAgID0gKEZUX1VJbnQpc291cmNlLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgRlRfVUludCAgIG51bV9jb250b3VycyA9IChGVF9VSW50KXNvdXJjZS0+YmFzZS5vdXRsaW5lLm5fY29udG91cnM7CisKKworICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIHRhcmdldCwgbnVtX3BvaW50cywgbnVtX2NvbnRvdXJzICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX091dGxpbmUqICBvdXQgPSAmdGFyZ2V0LT5iYXNlLm91dGxpbmU7CisgICAgICBGVF9PdXRsaW5lKiAgaW4gID0gJnNvdXJjZS0+YmFzZS5vdXRsaW5lOworCisKKyAgICAgIEZUX0FSUkFZX0NPUFkoIG91dC0+cG9pbnRzLCBpbi0+cG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgbnVtX3BvaW50cyApOworICAgICAgRlRfQVJSQVlfQ09QWSggb3V0LT50YWdzLCBpbi0+dGFncywKKyAgICAgICAgICAgICAgICAgICAgIG51bV9wb2ludHMgKTsKKyAgICAgIEZUX0FSUkFZX0NPUFkoIG91dC0+Y29udG91cnMsIGluLT5jb250b3VycywKKyAgICAgICAgICAgICAgICAgICAgIG51bV9jb250b3VycyApOworCisgICAgICAvKiBkbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGV4dHJhIHBvaW50cz8gKi8KKyAgICAgIGlmICggdGFyZ2V0LT51c2VfZXh0cmEgJiYgc291cmNlLT51c2VfZXh0cmEgKQorICAgICAgeworICAgICAgICBGVF9BUlJBWV9DT1BZKCB0YXJnZXQtPmJhc2UuZXh0cmFfcG9pbnRzLCBzb3VyY2UtPmJhc2UuZXh0cmFfcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBudW1fcG9pbnRzICk7CisgICAgICAgIEZUX0FSUkFZX0NPUFkoIHRhcmdldC0+YmFzZS5leHRyYV9wb2ludHMyLCBzb3VyY2UtPmJhc2UuZXh0cmFfcG9pbnRzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BvaW50cyApOworICAgICAgfQorCisgICAgICBvdXQtPm5fcG9pbnRzICAgPSAoc2hvcnQpbnVtX3BvaW50czsKKyAgICAgIG91dC0+bl9jb250b3VycyA9IChzaG9ydCludW1fY29udG91cnM7CisKKyAgICAgIEZUX0dseXBoTG9hZGVyX0FkanVzdF9Qb2ludHMoIHRhcmdldCApOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z2x5cGguYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGdseXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3ZmMzNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGdseXBoLmMKQEAgLTAsMCArMSw2MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z2x5cGguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGdseXBocyAoYm9keSkuICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIHNldmVyYWwgY29udmVuaWVuY2UgZnVuY3Rpb25zICAgKi8KKyAgLyogIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBlYXNpbHkgcmV0cmlldmUgZ2x5cGggICAgICovCisgIC8qICBiaXRtYXBzIGFuZCBvdXRsaW5lcyBmcm9tIGEgZ2l2ZW4gZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgb3B0aW9uYWwgaWYgeW91IGFyZSB3cml0aW5nIGEgZm9udCBzZXJ2ZXIgICovCisgIC8qICBvciB0ZXh0IGxheW91dCBlbmdpbmUgb24gdG9wIG9mIEZyZWVUeXBlLiAgSG93ZXZlciwgdGhleSBhcmUgcHJldHR5ICAqLworICAvKiAgaGFuZHkgZm9yIG1hbnkgb3RoZXIgc2ltcGxlIHVzZXMgb2YgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9HTFlQSF9ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0JJVE1BUF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworI2luY2x1ZGUgImJhc2VwaWMuaCIKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9nbHlwaAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICBGVF9CaXRtYXBHbHlwaCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGZ0X2JpdG1hcF9nbHlwaF9pbml0KCBGVF9HbHlwaCAgICAgIGJpdG1hcF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBGVF9CaXRtYXBHbHlwaCAgZ2x5cGggICA9IChGVF9CaXRtYXBHbHlwaCliaXRtYXBfZ2x5cGg7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CisgICAgRlRfTGlicmFyeSAgICAgIGxpYnJhcnkgPSBGVF9HTFlQSCggZ2x5cGggKS0+bGlicmFyeTsKKworCisgICAgaWYgKCBzbG90LT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBnbHlwaC0+bGVmdCA9IHNsb3QtPmJpdG1hcF9sZWZ0OworICAgIGdseXBoLT50b3AgID0gc2xvdC0+Yml0bWFwX3RvcDsKKworICAgIC8qIGRvIGxhenkgY29weWluZyB3aGVuZXZlciBwb3NzaWJsZSAqLworICAgIGlmICggc2xvdC0+aW50ZXJuYWwtPmZsYWdzICYgRlRfR0xZUEhfT1dOX0JJVE1BUCApCisgICAgeworICAgICAgZ2x5cGgtPmJpdG1hcCA9IHNsb3QtPmJpdG1hcDsKKyAgICAgIHNsb3QtPmludGVybmFsLT5mbGFncyAmPSB+RlRfR0xZUEhfT1dOX0JJVE1BUDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX0JpdG1hcF9Jbml0KCAmZ2x5cGgtPmJpdG1hcCApOworICAgICAgZXJyb3IgPSBGVF9CaXRtYXBfQ29weSggbGlicmFyeSwgJnNsb3QtPmJpdG1hcCwgJmdseXBoLT5iaXRtYXAgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBmdF9iaXRtYXBfZ2x5cGhfY29weSggRlRfR2x5cGggIGJpdG1hcF9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaCAgYml0bWFwX3RhcmdldCApCisgIHsKKyAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSA9IGJpdG1hcF9zb3VyY2UtPmxpYnJhcnk7CisgICAgRlRfQml0bWFwR2x5cGggIHNvdXJjZSAgPSAoRlRfQml0bWFwR2x5cGgpYml0bWFwX3NvdXJjZTsKKyAgICBGVF9CaXRtYXBHbHlwaCAgdGFyZ2V0ICA9IChGVF9CaXRtYXBHbHlwaCliaXRtYXBfdGFyZ2V0OworCisKKyAgICB0YXJnZXQtPmxlZnQgPSBzb3VyY2UtPmxlZnQ7CisgICAgdGFyZ2V0LT50b3AgID0gc291cmNlLT50b3A7CisKKyAgICByZXR1cm4gRlRfQml0bWFwX0NvcHkoIGxpYnJhcnksICZzb3VyY2UtPmJpdG1hcCwgJnRhcmdldC0+Yml0bWFwICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0X2JpdG1hcF9nbHlwaF9kb25lKCBGVF9HbHlwaCAgYml0bWFwX2dseXBoICkKKyAgeworICAgIEZUX0JpdG1hcEdseXBoICBnbHlwaCAgID0gKEZUX0JpdG1hcEdseXBoKWJpdG1hcF9nbHlwaDsKKyAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSA9IEZUX0dMWVBIKCBnbHlwaCApLT5saWJyYXJ5OworCisKKyAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgJmdseXBoLT5iaXRtYXAgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgZnRfYml0bWFwX2dseXBoX2Jib3goIEZUX0dseXBoICBiaXRtYXBfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgY2JveCApCisgIHsKKyAgICBGVF9CaXRtYXBHbHlwaCAgZ2x5cGggPSAoRlRfQml0bWFwR2x5cGgpYml0bWFwX2dseXBoOworCisKKyAgICBjYm94LT54TWluID0gZ2x5cGgtPmxlZnQgPDwgNjsKKyAgICBjYm94LT54TWF4ID0gY2JveC0+eE1pbiArIChGVF9Qb3MpKCBnbHlwaC0+Yml0bWFwLndpZHRoIDw8IDYgKTsKKyAgICBjYm94LT55TWF4ID0gZ2x5cGgtPnRvcCA8PCA2OworICAgIGNib3gtPnlNaW4gPSBjYm94LT55TWF4IC0gKEZUX1BvcykoIGdseXBoLT5iaXRtYXAucm93cyA8PCA2ICk7CisgIH0KKworCisgIEZUX0RFRklORV9HTFlQSChmdF9iaXRtYXBfZ2x5cGhfY2xhc3MsCisgICAgc2l6ZW9mICggRlRfQml0bWFwR2x5cGhSZWMgKSwKKyAgICBGVF9HTFlQSF9GT1JNQVRfQklUTUFQLAorCisgICAgZnRfYml0bWFwX2dseXBoX2luaXQsCisgICAgZnRfYml0bWFwX2dseXBoX2RvbmUsCisgICAgZnRfYml0bWFwX2dseXBoX2NvcHksCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0dseXBoX1RyYW5zZm9ybUZ1bmMgKi8KKyAgICBmdF9iaXRtYXBfZ2x5cGhfYmJveCwKKyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfR2x5cGhfUHJlcGFyZUZ1bmMgICAqLworICApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgIEZUX091dGxpbmVHbHlwaCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBmdF9vdXRsaW5lX2dseXBoX2luaXQoIEZUX0dseXBoICAgICAgb3V0bGluZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgRlRfT3V0bGluZUdseXBoICBnbHlwaCAgID0gKEZUX091dGxpbmVHbHlwaClvdXRsaW5lX2dseXBoOworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3IgICA9IEZUX0Vycl9PazsKKyAgICBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnkgPSBGVF9HTFlQSCggZ2x5cGggKS0+bGlicmFyeTsKKyAgICBGVF9PdXRsaW5lKiAgICAgIHNvdXJjZSAgPSAmc2xvdC0+b3V0bGluZTsKKyAgICBGVF9PdXRsaW5lKiAgICAgIHRhcmdldCAgPSAmZ2x5cGgtPm91dGxpbmU7CisKKworICAgIC8qIGNoZWNrIGZvcm1hdCBpbiBnbHlwaCBzbG90ICovCisgICAgaWYgKCBzbG90LT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgbmV3IG91dGxpbmUgKi8KKyAgICBlcnJvciA9IEZUX091dGxpbmVfTmV3KCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KXNvdXJjZS0+bl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5uX2NvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaC0+b3V0bGluZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfT3V0bGluZV9Db3B5KCBzb3VyY2UsIHRhcmdldCApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9vdXRsaW5lX2dseXBoX2RvbmUoIEZUX0dseXBoICBvdXRsaW5lX2dseXBoICkKKyAgeworICAgIEZUX091dGxpbmVHbHlwaCAgZ2x5cGggPSAoRlRfT3V0bGluZUdseXBoKW91dGxpbmVfZ2x5cGg7CisKKworICAgIEZUX091dGxpbmVfRG9uZSggRlRfR0xZUEgoIGdseXBoICktPmxpYnJhcnksICZnbHlwaC0+b3V0bGluZSApOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgZnRfb3V0bGluZV9nbHlwaF9jb3B5KCBGVF9HbHlwaCAgb3V0bGluZV9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggIG91dGxpbmVfdGFyZ2V0ICkKKyAgeworICAgIEZUX091dGxpbmVHbHlwaCAgc291cmNlICA9IChGVF9PdXRsaW5lR2x5cGgpb3V0bGluZV9zb3VyY2U7CisgICAgRlRfT3V0bGluZUdseXBoICB0YXJnZXQgID0gKEZUX091dGxpbmVHbHlwaClvdXRsaW5lX3RhcmdldDsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSA9IEZUX0dMWVBIKCBzb3VyY2UgKS0+bGlicmFyeTsKKworCisgICAgZXJyb3IgPSBGVF9PdXRsaW5lX05ldyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClzb3VyY2UtPm91dGxpbmUubl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5vdXRsaW5lLm5fY29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldC0+b3V0bGluZSApOworICAgIGlmICggIWVycm9yICkKKyAgICAgIEZUX091dGxpbmVfQ29weSggJnNvdXJjZS0+b3V0bGluZSwgJnRhcmdldC0+b3V0bGluZSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9vdXRsaW5lX2dseXBoX3RyYW5zZm9ybSggRlRfR2x5cGggICAgICAgICAgb3V0bGluZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIGRlbHRhICkKKyAgeworICAgIEZUX091dGxpbmVHbHlwaCAgZ2x5cGggPSAoRlRfT3V0bGluZUdseXBoKW91dGxpbmVfZ2x5cGg7CisKKworICAgIGlmICggbWF0cml4ICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmZ2x5cGgtPm91dGxpbmUsIG1hdHJpeCApOworCisgICAgaWYgKCBkZWx0YSApCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJmdseXBoLT5vdXRsaW5lLCBkZWx0YS0+eCwgZGVsdGEtPnkgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgZnRfb3V0bGluZV9nbHlwaF9iYm94KCBGVF9HbHlwaCAgb3V0bGluZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgYmJveCApCisgIHsKKyAgICBGVF9PdXRsaW5lR2x5cGggIGdseXBoID0gKEZUX091dGxpbmVHbHlwaClvdXRsaW5lX2dseXBoOworCisKKyAgICBGVF9PdXRsaW5lX0dldF9DQm94KCAmZ2x5cGgtPm91dGxpbmUsIGJib3ggKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGZ0X291dGxpbmVfZ2x5cGhfcHJlcGFyZSggRlRfR2x5cGggICAgICBvdXRsaW5lX2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBGVF9PdXRsaW5lR2x5cGggIGdseXBoID0gKEZUX091dGxpbmVHbHlwaClvdXRsaW5lX2dseXBoOworCisKKyAgICBzbG90LT5mb3JtYXQgICAgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOworICAgIHNsb3QtPm91dGxpbmUgICAgICAgID0gZ2x5cGgtPm91dGxpbmU7CisgICAgc2xvdC0+b3V0bGluZS5mbGFncyAmPSB+RlRfT1VUTElORV9PV05FUjsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0RFRklORV9HTFlQSCggZnRfb3V0bGluZV9nbHlwaF9jbGFzcywKKyAgICBzaXplb2YgKCBGVF9PdXRsaW5lR2x5cGhSZWMgKSwKKyAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwKKworICAgIGZ0X291dGxpbmVfZ2x5cGhfaW5pdCwKKyAgICBmdF9vdXRsaW5lX2dseXBoX2RvbmUsCisgICAgZnRfb3V0bGluZV9nbHlwaF9jb3B5LAorICAgIGZ0X291dGxpbmVfZ2x5cGhfdHJhbnNmb3JtLAorICAgIGZ0X291dGxpbmVfZ2x5cGhfYmJveCwKKyAgICBmdF9vdXRsaW5lX2dseXBoX3ByZXBhcmUKKyAgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICBGVF9HbHlwaCBjbGFzcyBhbmQgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgIHN0YXRpYyBGVF9FcnJvcgorICAgZnRfbmV3X2dseXBoKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgY2xhenosCisgICAgICAgICAgICAgICAgIEZUX0dseXBoKiAgICAgICAgICAgICAgYWdseXBoICkKKyAgIHsKKyAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisgICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgIEZUX0dseXBoICAgZ2x5cGggID0gTlVMTDsKKworCisgICAgICphZ2x5cGggPSBOVUxMOworCisgICAgIGlmICggIUZUX0FMTE9DKCBnbHlwaCwgY2xhenotPmdseXBoX3NpemUgKSApCisgICAgIHsKKyAgICAgICBnbHlwaC0+bGlicmFyeSA9IGxpYnJhcnk7CisgICAgICAgZ2x5cGgtPmNsYXp6ICAgPSBjbGF6ejsKKyAgICAgICBnbHlwaC0+Zm9ybWF0ICA9IGNsYXp6LT5nbHlwaF9mb3JtYXQ7CisKKyAgICAgICAqYWdseXBoID0gZ2x5cGg7CisgICAgIH0KKworICAgICByZXR1cm4gZXJyb3I7CisgICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z2x5cGguaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfQ29weSggRlRfR2x5cGggICBzb3VyY2UsCisgICAgICAgICAgICAgICAgIEZUX0dseXBoICAqdGFyZ2V0ICkKKyAgeworICAgIEZUX0dseXBoICAgICAgICAgICAgICAgY29weTsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yOworICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgY2xheno7CisKKworICAgIC8qIGNoZWNrIGFyZ3VtZW50cyAqLworICAgIGlmICggIXRhcmdldCB8fCAhc291cmNlIHx8ICFzb3VyY2UtPmNsYXp6ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgKnRhcmdldCA9IE5VTEw7CisKKyAgICBpZiAoICFzb3VyY2UgfHwgIXNvdXJjZS0+Y2xhenogKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBjbGF6eiA9IHNvdXJjZS0+Y2xheno7CisgICAgZXJyb3IgPSBmdF9uZXdfZ2x5cGgoIHNvdXJjZS0+bGlicmFyeSwgY2xhenosICZjb3B5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBjb3B5LT5hZHZhbmNlID0gc291cmNlLT5hZHZhbmNlOworICAgIGNvcHktPmZvcm1hdCAgPSBzb3VyY2UtPmZvcm1hdDsKKworICAgIGlmICggY2xhenotPmdseXBoX2NvcHkgKQorICAgICAgZXJyb3IgPSBjbGF6ei0+Z2x5cGhfY29weSggc291cmNlLCBjb3B5ICk7CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIEZUX0RvbmVfR2x5cGgoIGNvcHkgKTsKKyAgICBlbHNlCisgICAgICAqdGFyZ2V0ID0gY29weTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAqYWdseXBoICkKKyAgeworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfR2x5cGggICAgZ2x5cGg7CisKKyAgICBjb25zdCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6ID0gTlVMTDsKKworCisgICAgaWYgKCAhc2xvdCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU2xvdF9IYW5kbGUgKTsKKworICAgIGxpYnJhcnkgPSBzbG90LT5saWJyYXJ5OworCisgICAgaWYgKCAhYWdseXBoICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogaWYgaXQgaXMgYSBiaXRtYXAsIHRoYXQncyBlYXN5IDotKSAqLworICAgIGlmICggc2xvdC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgKQorICAgICAgY2xhenogPSBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VUOworCisgICAgLyogaWYgaXQgaXMgYW4gb3V0bGluZSAqLworICAgIGVsc2UgaWYgKCBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgY2xhenogPSBGVF9PVVRMSU5FX0dMWVBIX0NMQVNTX0dFVDsKKworICAgIGVsc2UKKyAgICB7CisgICAgICAvKiB0cnkgdG8gZmluZCBhIHJlbmRlcmVyIHRoYXQgc3VwcG9ydHMgdGhlIGdseXBoIGltYWdlIGZvcm1hdCAqLworICAgICAgRlRfUmVuZGVyZXIgIHJlbmRlciA9IEZUX0xvb2t1cF9SZW5kZXJlciggbGlicmFyeSwgc2xvdC0+Zm9ybWF0LCAwICk7CisKKworICAgICAgaWYgKCByZW5kZXIgKQorICAgICAgICBjbGF6eiA9ICZyZW5kZXItPmdseXBoX2NsYXNzOworICAgIH0KKworICAgIGlmICggIWNsYXp6ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGNyZWF0ZSBGVF9HbHlwaCBvYmplY3QgKi8KKyAgICBlcnJvciA9IGZ0X25ld19nbHlwaCggbGlicmFyeSwgY2xhenosICZnbHlwaCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY29weSBhZHZhbmNlIHdoaWxlIGNvbnZlcnRpbmcgaXQgdG8gMTYuMTYgZm9ybWF0ICovCisgICAgZ2x5cGgtPmFkdmFuY2UueCA9IHNsb3QtPmFkdmFuY2UueCA8PCAxMDsKKyAgICBnbHlwaC0+YWR2YW5jZS55ID0gc2xvdC0+YWR2YW5jZS55IDw8IDEwOworCisgICAgLyogbm93IGltcG9ydCB0aGUgaW1hZ2UgZnJvbSB0aGUgZ2x5cGggc2xvdCAqLworICAgIGVycm9yID0gY2xhenotPmdseXBoX2luaXQoIGdseXBoLCBzbG90ICk7CisKKyAgICAvKiBpZiBhbiBlcnJvciBvY2N1cnJlZCwgZGVzdHJveSB0aGUgZ2x5cGggKi8KKyAgICBpZiAoIGVycm9yICkKKyAgICAgIEZUX0RvbmVfR2x5cGgoIGdseXBoICk7CisgICAgZWxzZQorICAgICAgKmFnbHlwaCA9IGdseXBoOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z2x5cGguaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfVHJhbnNmb3JtKCBGVF9HbHlwaCAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgZGVsdGEgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoICFnbHlwaCB8fCAhZ2x5cGgtPmNsYXp6ICkKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgY29uc3QgRlRfR2x5cGhfQ2xhc3MqICBjbGF6eiA9IGdseXBoLT5jbGF6ejsKKworCisgICAgICBpZiAoIGNsYXp6LT5nbHlwaF90cmFuc2Zvcm0gKQorICAgICAgeworICAgICAgICAvKiB0cmFuc2Zvcm0gZ2x5cGggaW1hZ2UgKi8KKyAgICAgICAgY2xhenotPmdseXBoX3RyYW5zZm9ybSggZ2x5cGgsIG1hdHJpeCwgZGVsdGEgKTsKKworICAgICAgICAvKiB0cmFuc2Zvcm0gYWR2YW5jZSB2ZWN0b3IgKi8KKyAgICAgICAgaWYgKCBtYXRyaXggKQorICAgICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZnbHlwaC0+YWR2YW5jZSwgbWF0cml4ICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgfQorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfR2x5cGhfR2V0X0NCb3goIEZUX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBiYm94X21vZGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAqYWNib3ggKQorICB7CisgICAgY29uc3QgRlRfR2x5cGhfQ2xhc3MqICBjbGF6ejsKKworCisgICAgaWYgKCAhYWNib3ggKQorICAgICAgcmV0dXJuOworCisgICAgYWNib3gtPnhNaW4gPSBhY2JveC0+eU1pbiA9IGFjYm94LT54TWF4ID0gYWNib3gtPnlNYXggPSAwOworCisgICAgaWYgKCAhZ2x5cGggfHwgIWdseXBoLT5jbGF6eiApCisgICAgICByZXR1cm47CisKKyAgICBjbGF6eiA9IGdseXBoLT5jbGF6ejsKKyAgICBpZiAoICFjbGF6ei0+Z2x5cGhfYmJveCApCisgICAgICByZXR1cm47CisKKyAgICAvKiByZXRyaWV2ZSBiYm94IGluIDI2LjYgY29vcmRpbmF0ZXMgKi8KKyAgICBjbGF6ei0+Z2x5cGhfYmJveCggZ2x5cGgsIGFjYm94ICk7CisKKyAgICAvKiBwZXJmb3JtIGdyaWQgZml0dGluZyBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIGJib3hfbW9kZSA9PSBGVF9HTFlQSF9CQk9YX0dSSURGSVQgfHwKKyAgICAgICAgIGJib3hfbW9kZSA9PSBGVF9HTFlQSF9CQk9YX1BJWEVMUyAgKQorICAgIHsKKyAgICAgIGFjYm94LT54TWluID0gRlRfUElYX0ZMT09SKCBhY2JveC0+eE1pbiApOworICAgICAgYWNib3gtPnlNaW4gPSBGVF9QSVhfRkxPT1IoIGFjYm94LT55TWluICk7CisgICAgICBhY2JveC0+eE1heCA9IEZUX1BJWF9DRUlMKCBhY2JveC0+eE1heCApOworICAgICAgYWNib3gtPnlNYXggPSBGVF9QSVhfQ0VJTCggYWNib3gtPnlNYXggKTsKKyAgICB9CisKKyAgICAvKiBjb252ZXJ0IHRvIGludGVnZXIgcGl4ZWxzIGlmIG5lZWRlZCAqLworICAgIGlmICggYmJveF9tb2RlID09IEZUX0dMWVBIX0JCT1hfVFJVTkNBVEUgfHwKKyAgICAgICAgIGJib3hfbW9kZSA9PSBGVF9HTFlQSF9CQk9YX1BJWEVMUyAgICkKKyAgICB7CisgICAgICBhY2JveC0+eE1pbiA+Pj0gNjsKKyAgICAgIGFjYm94LT55TWluID4+PSA2OworICAgICAgYWNib3gtPnhNYXggPj49IDY7CisgICAgICBhY2JveC0+eU1heCA+Pj0gNjsKKyAgICB9CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HbHlwaF9Ub19CaXRtYXAoIEZUX0dseXBoKiAgICAgICB0aGVfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICAgICBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgIGRlc3Ryb3kgKQorICB7CisgICAgRlRfR2x5cGhTbG90UmVjICAgICAgICAgICBkdW1teTsKKyAgICBGVF9HbHlwaFNsb3RfSW50ZXJuYWxSZWMgIGR1bW15X2ludGVybmFsOworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfR2x5cGggICAgICAgICAgICAgICAgICBiLCBnbHlwaDsKKyAgICBGVF9CaXRtYXBHbHlwaCAgICAgICAgICAgIGJpdG1hcCA9IE5VTEw7CisgICAgY29uc3QgRlRfR2x5cGhfQ2xhc3MqICAgICBjbGF6ejsKKworICAgIC8qIEZUX0JJVE1BUF9HTFlQSF9DTEFTU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgbGlicmFyeTsKKworCisgICAgLyogY2hlY2sgYXJndW1lbnQgKi8KKyAgICBpZiAoICF0aGVfZ2x5cGggKQorICAgICAgZ290byBCYWQ7CisgICAgZ2x5cGggPSAqdGhlX2dseXBoOworICAgIGlmICggIWdseXBoICkKKyAgICAgIGdvdG8gQmFkOworCisgICAgY2xhenogICA9IGdseXBoLT5jbGF6ejsKKyAgICBsaWJyYXJ5ID0gZ2x5cGgtPmxpYnJhcnk7CisgICAgaWYgKCAhbGlicmFyeSB8fCAhY2xhenogKQorICAgICAgZ290byBCYWQ7CisKKyAgICAvKiB3aGVuIGNhbGxlZCB3aXRoIGEgYml0bWFwIGdseXBoLCBkbyBub3RoaW5nIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5ICovCisgICAgaWYgKCBjbGF6eiA9PSBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VUICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggIWNsYXp6LT5nbHlwaF9wcmVwYXJlICkKKyAgICAgIGdvdG8gQmFkOworCisgICAgLyogd2UgcmVuZGVyIHRoZSBnbHlwaCBpbnRvIGEgZ2x5cGggYml0bWFwIHVzaW5nIGEgYGR1bW15JyBnbHlwaCBzbG90ICovCisgICAgLyogdGhlbiBjYWxsaW5nIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9NRU1fWkVSTyggJmR1bW15LCBzaXplb2YgKCBkdW1teSApICk7CisgICAgRlRfTUVNX1pFUk8oICZkdW1teV9pbnRlcm5hbCwgc2l6ZW9mICggZHVtbXlfaW50ZXJuYWwgKSApOworICAgIGR1bW15LmludGVybmFsID0gJmR1bW15X2ludGVybmFsOworICAgIGR1bW15LmxpYnJhcnkgID0gbGlicmFyeTsKKyAgICBkdW1teS5mb3JtYXQgICA9IGNsYXp6LT5nbHlwaF9mb3JtYXQ7CisKKyAgICAvKiBjcmVhdGUgcmVzdWx0IGJpdG1hcCBnbHlwaCAqLworICAgIGVycm9yID0gZnRfbmV3X2dseXBoKCBsaWJyYXJ5LCBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VULCAmYiApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworICAgIGJpdG1hcCA9IChGVF9CaXRtYXBHbHlwaCliOworCisjaWYgMQorICAgIC8qIGlmIGBvcmlnaW4nIGlzIHNldCwgdHJhbnNsYXRlIHRoZSBnbHlwaCBpbWFnZSAqLworICAgIGlmICggb3JpZ2luICkKKyAgICAgIEZUX0dseXBoX1RyYW5zZm9ybSggZ2x5cGgsIDAsIG9yaWdpbiApOworI2Vsc2UKKyAgICBGVF9VTlVTRUQoIG9yaWdpbiApOworI2VuZGlmCisKKyAgICAvKiBwcmVwYXJlIGR1bW15IHNsb3QgZm9yIHJlbmRlcmluZyAqLworICAgIGVycm9yID0gY2xhenotPmdseXBoX3ByZXBhcmUoIGdseXBoLCAmZHVtbXkgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICBlcnJvciA9IEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCggZ2x5cGgtPmxpYnJhcnksICZkdW1teSwgcmVuZGVyX21vZGUgKTsKKworI2lmIDEKKyAgICBpZiAoICFkZXN0cm95ICYmIG9yaWdpbiApCisgICAgeworICAgICAgRlRfVmVjdG9yICB2OworCisKKyAgICAgIHYueCA9IC1vcmlnaW4tPng7CisgICAgICB2LnkgPSAtb3JpZ2luLT55OworICAgICAgRlRfR2x5cGhfVHJhbnNmb3JtKCBnbHlwaCwgMCwgJnYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogaW4gY2FzZSBvZiBzdWNjZXNzLCBjb3B5IHRoZSBiaXRtYXAgdG8gdGhlIGdseXBoIGJpdG1hcCAqLworICAgIGVycm9yID0gZnRfYml0bWFwX2dseXBoX2luaXQoIChGVF9HbHlwaCliaXRtYXAsICZkdW1teSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY29weSBhZHZhbmNlICovCisgICAgYml0bWFwLT5yb290LmFkdmFuY2UgPSBnbHlwaC0+YWR2YW5jZTsKKworICAgIGlmICggZGVzdHJveSApCisgICAgICBGVF9Eb25lX0dseXBoKCBnbHlwaCApOworCisgICAgKnRoZV9nbHlwaCA9IEZUX0dMWVBIKCBiaXRtYXAgKTsKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgJiYgYml0bWFwICkKKyAgICAgIEZUX0RvbmVfR2x5cGgoIEZUX0dMWVBIKCBiaXRtYXAgKSApOworCisgICAgcmV0dXJuIGVycm9yOworCisgIEJhZDoKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgZ290byBFeGl0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z2x5cGguaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9Eb25lX0dseXBoKCBGVF9HbHlwaCAgZ2x5cGggKQorICB7CisgICAgaWYgKCBnbHlwaCApCisgICAgeworICAgICAgRlRfTWVtb3J5ICAgICAgICAgICAgICBtZW1vcnkgPSBnbHlwaC0+bGlicmFyeS0+bWVtb3J5OworICAgICAgY29uc3QgRlRfR2x5cGhfQ2xhc3MqICBjbGF6eiAgPSBnbHlwaC0+Y2xheno7CisKKworICAgICAgaWYgKCBjbGF6ei0+Z2x5cGhfZG9uZSApCisgICAgICAgIGNsYXp6LT5nbHlwaF9kb25lKCBnbHlwaCApOworCisgICAgICBGVF9GUkVFKCBnbHlwaCApOworICAgIH0KKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0Z3h2YWwuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGd4dmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4NjhmMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdGd4dmFsLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z3h2YWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5ZXBHWC9BQVQgdGFibGVzIChib2R5KS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGd4dmFsLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1RydWVUeXBlR1hfVmFsaWRhdGUoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgdmFsaWRhdGlvbl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgIHRhYmxlc1tGVF9WQUxJREFURV9HWF9MRU5HVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgdGFibGVfbGVuZ3RoICkKKyAgeworICAgIEZUX1NlcnZpY2VfR1h2YWxpZGF0ZSAgc2VydmljZTsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCAhdGFibGVzICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBHWF9WQUxJREFURSApOworCisgICAgaWYgKCBzZXJ2aWNlICkKKyAgICAgIGVycm9yID0gc2VydmljZS0+dmFsaWRhdGUoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbGVuZ3RoICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9UcnVlVHlwZUdYX0ZyZWUoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICB0YWJsZSApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm47CisKKyAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisgICAgRlRfRlJFRSggdGFibGUgKTsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICB2YWxpZGF0aW9uX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpja2Vybl90YWJsZSApCisgIHsKKyAgICBGVF9TZXJ2aWNlX0NLRVJOdmFsaWRhdGUgIHNlcnZpY2U7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICBlcnJvcjsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggIWNrZXJuX3RhYmxlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBDTEFTU0lDS0VSTl9WQUxJREFURSApOworCisgICAgaWYgKCBzZXJ2aWNlICkKKyAgICAgIGVycm9yID0gc2VydmljZS0+dmFsaWRhdGUoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tlcm5fdGFibGUgKTsKKyAgICBlbHNlCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0NsYXNzaWNLZXJuX0ZyZWUoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgRlRfRlJFRSggdGFibGUgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0aW5pdC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0aW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTVlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRpbml0LmMKQEAgLTAsMCArMSwyODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0aW5pdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBpbml0aWFsaXphdGlvbiBsYXllciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlIGlzIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIHR3byAgICAgICAgICAgKi8KKyAgLyogIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcygpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgdGhlIHNldCBvZiBkZWZhdWx0IG1vZHVsZXMgdG8gYSAgICAgICovCisgIC8qICAgICBmcmVzaCBuZXcgbGlicmFyeSBvYmplY3QuICBUaGUgc2V0IGlzIHRha2VuIGZyb20gdGhlIGhlYWRlciBmaWxlICAqLworICAvKiAgICAgYGNvbmZpZy9mdG1vZHVsZS5oJy4gIFNlZSB0aGUgZG9jdW1lbnQgYEZyZWVUeXBlIDIuMCBCdWlsZCAgICAgICAgKi8KKyAgLyogICAgIFN5c3RlbScgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRlRfSW5pdF9GcmVlVHlwZSgpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHN5c3RlbSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLCAgICovCisgIC8qICAgICBidWlsZHMgYSBsaWJyYXJ5IG91dCBvZiBpdCwgdGhlbiBjYWxscyBGVF9EZWZhdWx0X0RyaXZlcnMoKS4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIE5vdGUgdGhhdCBldmVuIGlmIEZUX0luaXRfRnJlZVR5cGUoKSB1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgICovCisgIC8qICBzeXN0ZW0gb2JqZWN0IGRlZmluZWQgYXQgYnVpbGQgdGltZSwgY2xpZW50IGFwcGxpY2F0aW9ucyBhcmUgc3RpbGwgICAqLworICAvKiAgYWJsZSB0byBwcm92aWRlIHRoZWlyIG93biBgZnRzeXN0ZW0uYycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSAiYmFzZXBpYy5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfaW5pdAorCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworCisjdW5kZWYgIEZUX1VTRV9NT0RVTEUKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9VU0VfTU9EVUxFKCB0eXBlLCB4ICkgIGV4dGVybiAiQyIgY29uc3QgdHlwZSAgeDsKKyNlbHNlCisjZGVmaW5lIEZUX1VTRV9NT0RVTEUoIHR5cGUsIHggKSAgZXh0ZXJuIGNvbnN0IHR5cGUgIHg7CisjZW5kaWYKKworI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAorCisjdW5kZWYgIEZUX1VTRV9NT0RVTEUKKyNkZWZpbmUgRlRfVVNFX01PRFVMRSggdHlwZSwgeCApICAoY29uc3QgRlRfTW9kdWxlX0NsYXNzKikmKHgpLAorCisgIHN0YXRpYworICBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MqICBjb25zdCBmdF9kZWZhdWx0X21vZHVsZXNbXSA9CisgIHsKKyNpbmNsdWRlIEZUX0NPTkZJR19NT0RVTEVTX0gKKyAgICAwCisgIH07CisKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfRVhURVJOQyAgZXh0ZXJuICJDIgorI2Vsc2UKKyNkZWZpbmUgRlRfRVhURVJOQyAgZXh0ZXJuCisjZW5kaWYKKworICAvKiBkZWNsYXJlIHRoZSBtb2R1bGUncyBjbGFzcyBjcmVhdGlvbi9kZXN0cnVjdGlvbiBmdW5jdGlvbnMgKi8KKyN1bmRlZiAgRlRfVVNFX01PRFVMRQorI2RlZmluZSBGVF9VU0VfTU9EVUxFKCB0eXBlLCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FWFRFUk5DIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9DcmVhdGVfQ2xhc3NfICMjIHgoIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyogICpvdXRwdXRfY2xhc3MgKTsgXAorICBGVF9FWFRFUk5DIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyB4KCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiApOworCisjaW5jbHVkZSBGVF9DT05GSUdfTU9EVUxFU19ICisKKyAgLyogY291bnQgYWxsIG1vZHVsZSBjbGFzc2VzICovCisjdW5kZWYgIEZUX1VTRV9NT0RVTEUKKyNkZWZpbmUgRlRfVVNFX01PRFVMRSggdHlwZSwgeCApICBNT0RVTEVfQ0xBU1NfICMjIHgsCisKKyAgZW51bQorICB7CisjaW5jbHVkZSBGVF9DT05GSUdfTU9EVUxFU19ICisgICAgRlRfTlVNX01PRFVMRV9DTEFTU0VTCisgIH07CisKKyAgLyogZGVzdHJveSBhbGwgbW9kdWxlIGNsYXNzZXMgKi8KKyN1bmRlZiAgRlRfVVNFX01PRFVMRQorI2RlZmluZSBGVF9VU0VfTU9EVUxFKCB0eXBlLCB4ICkgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIGNsYXNzZXNbaV0gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIHgoIGxpYnJhcnksIGNsYXNzZXNbaV0gKTsgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpKys7CisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X2Rlc3Ryb3lfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9Nb2R1bGVfQ2xhc3MqICAqY2xhc3NlczsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5OworICAgIEZUX1VJbnQgICAgICAgICAgICBpOworICAgIEJhc2VQSUMqICAgICAgICAgICBwaWNfY29udGFpbmVyID0gKEJhc2VQSUMqKWxpYnJhcnktPnBpY19jb250YWluZXIuYmFzZTsKKworCisgICAgaWYgKCAhcGljX2NvbnRhaW5lci0+ZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyApCisgICAgICByZXR1cm47CisKKyAgICBtZW1vcnkgID0gbGlicmFyeS0+bWVtb3J5OworICAgIGNsYXNzZXMgPSBwaWNfY29udGFpbmVyLT5kZWZhdWx0X21vZHVsZV9jbGFzc2VzOworICAgIGkgICAgICAgPSAwOworCisjaW5jbHVkZSBGVF9DT05GSUdfTU9EVUxFU19ICisKKyAgICBGVF9GUkVFKCBjbGFzc2VzICk7CisgICAgcGljX2NvbnRhaW5lci0+ZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyA9IE5VTEw7CisgIH0KKworCisgIC8qIGluaXRpYWxpemUgYWxsIG1vZHVsZSBjbGFzc2VzIGFuZCB0aGUgcG9pbnRlciB0YWJsZSAqLworI3VuZGVmICBGVF9VU0VfTU9EVUxFCisjZGVmaW5lIEZUX1VTRV9NT0RVTEUoIHR5cGUsIHggKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgZXJyb3IgPSBGVF9DcmVhdGVfQ2xhc3NfICMjIHgoIGxpYnJhcnksICZjbGF6eiApOyAgXAorICBpZiAoIGVycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBFeGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3Nlc1tpKytdID0gY2xheno7CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsKKyAgICBGVF9Nb2R1bGVfQ2xhc3MqICAqY2xhc3NlcyA9IE5VTEw7CisgICAgRlRfTW9kdWxlX0NsYXNzKiAgIGNsYXp6OworICAgIEZUX1VJbnQgICAgICAgICAgICBpOworICAgIEJhc2VQSUMqICAgICAgICAgICBwaWNfY29udGFpbmVyID0gKEJhc2VQSUMqKWxpYnJhcnktPnBpY19jb250YWluZXIuYmFzZTsKKworCisgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisgICAgcGljX2NvbnRhaW5lci0+ZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyA9IE5VTEw7CisKKyAgICBpZiAoIEZUX0FMTE9DKCBjbGFzc2VzLCBzaXplb2YgKCBGVF9Nb2R1bGVfQ2xhc3MqICkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBGVF9OVU1fTU9EVUxFX0NMQVNTRVMgKyAxICkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiBpbml0aWFsaXplIGFsbCBwb2ludGVycyB0byAwLCBlc3BlY2lhbGx5IHRoZSBsYXN0IG9uZSAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgRlRfTlVNX01PRFVMRV9DTEFTU0VTOyBpKysgKQorICAgICAgY2xhc3Nlc1tpXSA9IE5VTEw7CisgICAgY2xhc3Nlc1tGVF9OVU1fTU9EVUxFX0NMQVNTRVNdID0gTlVMTDsKKworICAgIGkgPSAwOworCisjaW5jbHVkZSBGVF9DT05GSUdfTU9EVUxFU19ICisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGZ0X2Rlc3Ryb3lfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyggbGlicmFyeSApOworICAgIGVsc2UKKyAgICAgIHBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgPSBjbGFzc2VzOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kYXBpLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I7CisgICAgY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCogIGN1cjsKKworCisgICAgLyogRlRfREVGQVVMVF9NT0RVTEVTX0dFVCBkZXJlZmVyZW5jZXMgYGxpYnJhcnknIGluIFBJQyBtb2RlICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgLyogR0NDIDQuNiB3YXJucyB0aGUgdHlwZSBkaWZmZXJlbmNlOgorICAgICAqICAgRlRfTW9kdWxlX0NsYXNzKiogIT0gY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCoKKyAgICAgKi8KKyAgICBjdXIgPSAoY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCopRlRfREVGQVVMVF9NT0RVTEVTX0dFVDsKKworICAgIC8qIHRlc3QgZm9yIHZhbGlkIGBsaWJyYXJ5JyBkZWxheWVkIHRvIEZUX0FkZF9Nb2R1bGUoKSAqLworICAgIHdoaWxlICggKmN1ciApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9BZGRfTW9kdWxlKCBsaWJyYXJ5LCAqY3VyICk7CisgICAgICAvKiBub3RpZnkgZXJyb3JzLCBidXQgZG9uJ3Qgc3RvcCAqLworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIEZUX1RSQUNFMCgoICJGVF9BZGRfRGVmYXVsdF9Nb2R1bGU6IgorICAgICAgICAgICAgICAgICAgICAiIENhbm5vdCBpbnN0YWxsIGAlcycsIGVycm9yID0gMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgKCpjdXIpLT5tb2R1bGVfbmFtZSwgZXJyb3IgKSk7CisgICAgICBjdXIrKzsKKyAgICB9CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIC8qIGNoZWNrIG9mIGBhbGlicmFyeScgZGVsYXllZCB0byBgRlRfTmV3X0xpYnJhcnknICovCisKKyAgICAvKiBGaXJzdCBvZiBhbGwsIGFsbG9jYXRlIGEgbmV3IHN5c3RlbSBvYmplY3QgLS0gdGhpcyBmdW5jdGlvbiBpcyBwYXJ0ICovCisgICAgLyogb2YgdGhlIHN5c3RlbS1zcGVjaWZpYyBjb21wb25lbnQsIGkuZS4gYGZ0c3lzdGVtLmMnLiAgICAgICAgICAgICAgICAqLworCisgICAgbWVtb3J5ID0gRlRfTmV3X01lbW9yeSgpOworICAgIGlmICggIW1lbW9yeSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfSW5pdF9GcmVlVHlwZTogY2Fubm90IGZpbmQgbWVtb3J5IG1hbmFnZXJcbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgIH0KKworICAgIC8qIGJ1aWxkIGEgbGlicmFyeSBvdXQgb2YgaXQsIHRoZW4gZmlsbCBpdCB3aXRoIHRoZSBzZXQgb2YgKi8KKyAgICAvKiBkZWZhdWx0IGRyaXZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBlcnJvciA9IEZUX05ld19MaWJyYXJ5KCBtZW1vcnksIGFsaWJyYXJ5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9Eb25lX01lbW9yeSggbWVtb3J5ICk7CisgICAgZWxzZQorICAgICAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyggKmFsaWJyYXJ5ICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfRG9uZV9GcmVlVHlwZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIC8qIERpc2NhcmQgdGhlIGxpYnJhcnkgb2JqZWN0ICovCisgICAgRlRfRG9uZV9MaWJyYXJ5KCBsaWJyYXJ5ICk7CisKKyAgICAvKiBkaXNjYXJkIG1lbW9yeSBtYW5hZ2VyICovCisgICAgRlRfRG9uZV9NZW1vcnkoIG1lbW9yeSApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0bGNkZmlsLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRsY2RmaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjZmN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0bGNkZmlsLmMKQEAgLTAsMCArMSwzOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0bGNkZmlsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbG9yIGZpbHRlcmluZyBvZiBzdWJwaXhlbCBiaXRtYXAgZ2x5cGhzIChib2R5KS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlIEZUX0xDRF9GSUxURVJfSAorI2luY2x1ZGUgRlRfSU1BR0VfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCisKKy8qIGRlZmluZSBVU0VfTEVHQUNZIHRvIGltcGxlbWVudCB0aGUgbGVnYWN5IGZpbHRlciAqLworI2RlZmluZSAgVVNFX0xFR0FDWQorCisgIC8qIEZJUiBmaWx0ZXIgdXNlZCBieSB0aGUgZGVmYXVsdCBhbmQgbGlnaHQgZmlsdGVycyAqLworICBzdGF0aWMgdm9pZAorICBfZnRfbGNkX2ZpbHRlcl9maXIoIEZUX0JpdG1hcCogICAgICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgICAgIGxpYnJhcnkgKQorICB7CisgICAgRlRfQnl0ZSogIHdlaWdodHMgPSBsaWJyYXJ5LT5sY2Rfd2VpZ2h0czsKKyAgICBGVF9VSW50ICAgd2lkdGggICA9IChGVF9VSW50KWJpdG1hcC0+d2lkdGg7CisgICAgRlRfVUludCAgIGhlaWdodCAgPSAoRlRfVUludCliaXRtYXAtPnJvd3M7CisKKworICAgIC8qIGhvcml6b250YWwgaW4tcGxhY2UgRklSIGZpbHRlciAqLworICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgJiYgd2lkdGggPj0gNCApCisgICAgeworICAgICAgRlRfQnl0ZSogIGxpbmUgPSBiaXRtYXAtPmJ1ZmZlcjsKKworCisgICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KKyAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQorICAgICAgICBsaW5lIC09IGJpdG1hcC0+cGl0Y2ggKiAoRlRfSW50KSggYml0bWFwLT5yb3dzIC0gMSApOworCisgICAgICAvKiBgZmlyJyBhbmQgYHBpeCcgbXVzdCBiZSBhdCBsZWFzdCAzMiBiaXQgd2lkZSwgc2luY2UgdGhlIHN1bSBvZiAqLworICAgICAgLyogdGhlIHZhbHVlcyBpbiBgd2VpZ2h0cycgY2FuIGV4Y2VlZCAweEZGICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgZm9yICggOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgbGluZSArPSBiaXRtYXAtPnBpdGNoICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgZmlyWzRdOyAgICAgICAgLyogYmVsb3csIGBwaXgnIGlzIHVzZWQgYXMgdGhlIDV0aCBlbGVtZW50ICovCisgICAgICAgIEZUX1VJbnQgIHZhbDEsIHh4OworCisKKyAgICAgICAgdmFsMSAgID0gbGluZVswXTsKKyAgICAgICAgZmlyWzBdID0gd2VpZ2h0c1syXSAqIHZhbDE7CisgICAgICAgIGZpclsxXSA9IHdlaWdodHNbM10gKiB2YWwxOworICAgICAgICBmaXJbMl0gPSB3ZWlnaHRzWzRdICogdmFsMTsKKyAgICAgICAgZmlyWzNdID0gMDsKKworICAgICAgICB2YWwxICAgID0gbGluZVsxXTsKKyAgICAgICAgZmlyWzBdICs9IHdlaWdodHNbMV0gKiB2YWwxOworICAgICAgICBmaXJbMV0gKz0gd2VpZ2h0c1syXSAqIHZhbDE7CisgICAgICAgIGZpclsyXSArPSB3ZWlnaHRzWzNdICogdmFsMTsKKyAgICAgICAgZmlyWzNdICs9IHdlaWdodHNbNF0gKiB2YWwxOworCisgICAgICAgIGZvciAoIHh4ID0gMjsgeHggPCB3aWR0aDsgeHgrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICB2YWwsIHBpeDsKKworCisgICAgICAgICAgdmFsICAgID0gbGluZVt4eF07CisgICAgICAgICAgcGl4ICAgID0gZmlyWzBdICsgd2VpZ2h0c1swXSAqIHZhbDsKKyAgICAgICAgICBmaXJbMF0gPSBmaXJbMV0gKyB3ZWlnaHRzWzFdICogdmFsOworICAgICAgICAgIGZpclsxXSA9IGZpclsyXSArIHdlaWdodHNbMl0gKiB2YWw7CisgICAgICAgICAgZmlyWzJdID0gZmlyWzNdICsgd2VpZ2h0c1szXSAqIHZhbDsKKyAgICAgICAgICBmaXJbM10gPSAgICAgICAgICB3ZWlnaHRzWzRdICogdmFsOworCisgICAgICAgICAgcGl4ICAgICAgICA+Pj0gODsKKyAgICAgICAgICBwaXggICAgICAgICB8PSAoRlRfVUludCktKEZUX0ludCkoIHBpeCA+PiA4ICk7CisgICAgICAgICAgbGluZVt4eCAtIDJdID0gKEZUX0J5dGUpcGl4OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIHBpeDsKKworCisgICAgICAgICAgcGl4ICAgICAgICAgID0gZmlyWzBdID4+IDg7CisgICAgICAgICAgcGl4ICAgICAgICAgfD0gKEZUX1VJbnQpLShGVF9JbnQpKCBwaXggPj4gOCApOworICAgICAgICAgIGxpbmVbeHggLSAyXSA9IChGVF9CeXRlKXBpeDsKKworICAgICAgICAgIHBpeCAgICAgICAgICA9IGZpclsxXSA+PiA4OworICAgICAgICAgIHBpeCAgICAgICAgIHw9IChGVF9VSW50KS0oRlRfSW50KSggcGl4ID4+IDggKTsKKyAgICAgICAgICBsaW5lW3h4IC0gMV0gPSAoRlRfQnl0ZSlwaXg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB2ZXJ0aWNhbCBpbi1wbGFjZSBGSVIgZmlsdGVyICovCisgICAgZWxzZSBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1YgJiYgaGVpZ2h0ID49IDQgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBjb2x1bW4gPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICAgIEZUX0ludCAgICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOworCisKKyAgICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLworICAgICAgaWYgKCBiaXRtYXAtPnBpdGNoIDwgMCApCisgICAgICAgIGNvbHVtbiAtPSBiaXRtYXAtPnBpdGNoICogKEZUX0ludCkoIGJpdG1hcC0+cm93cyAtIDEgKTsKKworICAgICAgZm9yICggOyB3aWR0aCA+IDA7IHdpZHRoLS0sIGNvbHVtbisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIGNvbCA9IGNvbHVtbjsKKyAgICAgICAgRlRfVUludCAgIGZpcls0XTsgICAgICAgLyogYmVsb3csIGBwaXgnIGlzIHVzZWQgYXMgdGhlIDV0aCBlbGVtZW50ICovCisgICAgICAgIEZUX1VJbnQgICB2YWwxLCB5eTsKKworCisgICAgICAgIHZhbDEgICA9IGNvbFswXTsKKyAgICAgICAgZmlyWzBdID0gd2VpZ2h0c1syXSAqIHZhbDE7CisgICAgICAgIGZpclsxXSA9IHdlaWdodHNbM10gKiB2YWwxOworICAgICAgICBmaXJbMl0gPSB3ZWlnaHRzWzRdICogdmFsMTsKKyAgICAgICAgZmlyWzNdID0gMDsKKyAgICAgICAgY29sICAgKz0gcGl0Y2g7CisKKyAgICAgICAgdmFsMSAgICA9IGNvbFswXTsKKyAgICAgICAgZmlyWzBdICs9IHdlaWdodHNbMV0gKiB2YWwxOworICAgICAgICBmaXJbMV0gKz0gd2VpZ2h0c1syXSAqIHZhbDE7CisgICAgICAgIGZpclsyXSArPSB3ZWlnaHRzWzNdICogdmFsMTsKKyAgICAgICAgZmlyWzNdICs9IHdlaWdodHNbNF0gKiB2YWwxOworICAgICAgICBjb2wgICAgKz0gcGl0Y2g7CisKKyAgICAgICAgZm9yICggeXkgPSAyOyB5eSA8IGhlaWdodDsgeXkrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICB2YWwsIHBpeDsKKworCisgICAgICAgICAgdmFsICAgID0gY29sWzBdOworICAgICAgICAgIHBpeCAgICA9IGZpclswXSArIHdlaWdodHNbMF0gKiB2YWw7CisgICAgICAgICAgZmlyWzBdID0gZmlyWzFdICsgd2VpZ2h0c1sxXSAqIHZhbDsKKyAgICAgICAgICBmaXJbMV0gPSBmaXJbMl0gKyB3ZWlnaHRzWzJdICogdmFsOworICAgICAgICAgIGZpclsyXSA9IGZpclszXSArIHdlaWdodHNbM10gKiB2YWw7CisgICAgICAgICAgZmlyWzNdID0gICAgICAgICAgd2VpZ2h0c1s0XSAqIHZhbDsKKworICAgICAgICAgIHBpeCAgICAgICAgICAgPj49IDg7CisgICAgICAgICAgcGl4ICAgICAgICAgICAgfD0gKEZUX1VJbnQpLShGVF9JbnQpKCBwaXggPj4gOCApOworICAgICAgICAgIGNvbFstMiAqIHBpdGNoXSA9IChGVF9CeXRlKXBpeDsKKyAgICAgICAgICBjb2wgICAgICAgICAgICArPSBwaXRjaDsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBwaXg7CisKKworICAgICAgICAgIHBpeCAgICAgICAgICAgICA9IGZpclswXSA+PiA4OworICAgICAgICAgIHBpeCAgICAgICAgICAgIHw9IChGVF9VSW50KS0oRlRfSW50KSggcGl4ID4+IDggKTsKKyAgICAgICAgICBjb2xbLTIgKiBwaXRjaF0gPSAoRlRfQnl0ZSlwaXg7CisKKyAgICAgICAgICBwaXggICAgICAgICA9IGZpclsxXSA+PiA4OworICAgICAgICAgIHBpeCAgICAgICAgfD0gKEZUX1VJbnQpLShGVF9JbnQpKCBwaXggPj4gOCApOworICAgICAgICAgIGNvbFstcGl0Y2hdID0gKEZUX0J5dGUpcGl4OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKworI2lmZGVmIFVTRV9MRUdBQ1kKKworICAvKiBpbnRyYS1waXhlbCBmaWx0ZXIgdXNlZCBieSB0aGUgbGVnYWN5IGZpbHRlciAqLworICBzdGF0aWMgdm9pZAorICBfZnRfbGNkX2ZpbHRlcl9sZWdhY3koIEZUX0JpdG1hcCogICAgICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgICAgIGxpYnJhcnkgKQorICB7CisgICAgRlRfVUludCAgd2lkdGggID0gKEZUX1VJbnQpYml0bWFwLT53aWR0aDsKKyAgICBGVF9VSW50ICBoZWlnaHQgPSAoRlRfVUludCliaXRtYXAtPnJvd3M7CisgICAgRlRfSW50ICAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgIGZpbHRlcnNbM11bM10gPQorICAgIHsKKyAgICAgIHsgNjU1MzggKiA5LzEzLCA2NTUzOCAqIDEvNiwgNjU1MzggKiAxLzEzIH0sCisgICAgICB7IDY1NTM4ICogMy8xMywgNjU1MzggKiA0LzYsIDY1NTM4ICogMy8xMyB9LAorICAgICAgeyA2NTUzOCAqIDEvMTMsIDY1NTM4ICogMS82LCA2NTUzOCAqIDkvMTMgfQorICAgIH07CisKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKworCisgICAgLyogaG9yaXpvbnRhbCBpbi1wbGFjZSBpbnRyYS1waXhlbCBmaWx0ZXIgKi8KKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICYmIHdpZHRoID49IDMgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBsaW5lID0gYml0bWFwLT5idWZmZXI7CisKKworICAgICAgLyogdGFrZSBjYXJlIG9mIGJpdG1hcCBmbG93ICovCisgICAgICBpZiAoIGJpdG1hcC0+cGl0Y2ggPCAwICkKKyAgICAgICAgbGluZSAtPSBiaXRtYXAtPnBpdGNoICogKEZUX0ludCkoIGJpdG1hcC0+cm93cyAtIDEgKTsKKworICAgICAgZm9yICggOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgbGluZSArPSBwaXRjaCApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIHh4OworCisKKyAgICAgICAgZm9yICggeHggPSAwOyB4eCA8IHdpZHRoOyB4eCArPSAzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIHIgPSAwOworICAgICAgICAgIEZUX1VJbnQgIGcgPSAwOworICAgICAgICAgIEZUX1VJbnQgIGIgPSAwOworICAgICAgICAgIEZUX1VJbnQgIHA7CisKKworICAgICAgICAgIHAgID0gbGluZVt4eF07CisgICAgICAgICAgciArPSBmaWx0ZXJzWzBdWzBdICogcDsKKyAgICAgICAgICBnICs9IGZpbHRlcnNbMF1bMV0gKiBwOworICAgICAgICAgIGIgKz0gZmlsdGVyc1swXVsyXSAqIHA7CisKKyAgICAgICAgICBwICA9IGxpbmVbeHggKyAxXTsKKyAgICAgICAgICByICs9IGZpbHRlcnNbMV1bMF0gKiBwOworICAgICAgICAgIGcgKz0gZmlsdGVyc1sxXVsxXSAqIHA7CisgICAgICAgICAgYiArPSBmaWx0ZXJzWzFdWzJdICogcDsKKworICAgICAgICAgIHAgID0gbGluZVt4eCArIDJdOworICAgICAgICAgIHIgKz0gZmlsdGVyc1syXVswXSAqIHA7CisgICAgICAgICAgZyArPSBmaWx0ZXJzWzJdWzFdICogcDsKKyAgICAgICAgICBiICs9IGZpbHRlcnNbMl1bMl0gKiBwOworCisgICAgICAgICAgbGluZVt4eF0gICAgID0gKEZUX0J5dGUpKCByIC8gNjU1MzYgKTsKKyAgICAgICAgICBsaW5lW3h4ICsgMV0gPSAoRlRfQnl0ZSkoIGcgLyA2NTUzNiApOworICAgICAgICAgIGxpbmVbeHggKyAyXSA9IChGVF9CeXRlKSggYiAvIDY1NTM2ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1YgJiYgaGVpZ2h0ID49IDMgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBjb2x1bW4gPSBiaXRtYXAtPmJ1ZmZlcjsKKworCisgICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KKyAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQorICAgICAgICBjb2x1bW4gLT0gYml0bWFwLT5waXRjaCAqIChGVF9JbnQpKCBiaXRtYXAtPnJvd3MgLSAxICk7CisKKyAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tLCBjb2x1bW4rKyApCisgICAgICB7CisgICAgICAgIEZUX0J5dGUqICBjb2wgICAgID0gY29sdW1uOworICAgICAgICBGVF9CeXRlKiAgY29sX2VuZCA9IGNvbCArIChGVF9JbnQpaGVpZ2h0ICogcGl0Y2g7CisKKworICAgICAgICBmb3IgKCA7IGNvbCA8IGNvbF9lbmQ7IGNvbCArPSAzICogcGl0Y2ggKQorICAgICAgICB7CisgICAgICAgICAgRlRfVUludCAgciA9IDA7CisgICAgICAgICAgRlRfVUludCAgZyA9IDA7CisgICAgICAgICAgRlRfVUludCAgYiA9IDA7CisgICAgICAgICAgRlRfVUludCAgcDsKKworCisgICAgICAgICAgcCAgPSBjb2xbMF07CisgICAgICAgICAgciArPSBmaWx0ZXJzWzBdWzBdICogcDsKKyAgICAgICAgICBnICs9IGZpbHRlcnNbMF1bMV0gKiBwOworICAgICAgICAgIGIgKz0gZmlsdGVyc1swXVsyXSAqIHA7CisKKyAgICAgICAgICBwICA9IGNvbFtwaXRjaF07CisgICAgICAgICAgciArPSBmaWx0ZXJzWzFdWzBdICogcDsKKyAgICAgICAgICBnICs9IGZpbHRlcnNbMV1bMV0gKiBwOworICAgICAgICAgIGIgKz0gZmlsdGVyc1sxXVsyXSAqIHA7CisKKyAgICAgICAgICBwICA9IGNvbFtwaXRjaCAqIDJdOworICAgICAgICAgIHIgKz0gZmlsdGVyc1syXVswXSAqIHA7CisgICAgICAgICAgZyArPSBmaWx0ZXJzWzJdWzFdICogcDsKKyAgICAgICAgICBiICs9IGZpbHRlcnNbMl1bMl0gKiBwOworCisgICAgICAgICAgY29sWzBdICAgICAgICAgPSAoRlRfQnl0ZSkoIHIgLyA2NTUzNiApOworICAgICAgICAgIGNvbFtwaXRjaF0gICAgID0gKEZUX0J5dGUpKCBnIC8gNjU1MzYgKTsKKyAgICAgICAgICBjb2xbMiAqIHBpdGNoXSA9IChGVF9CeXRlKSggYiAvIDY1NTM2ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworI2VuZGlmIC8qIFVTRV9MRUdBQ1kgKi8KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICAqd2VpZ2h0cyApCisgIHsKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhd2VpZ2h0cyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGZ0X21lbWNweSggbGlicmFyeS0+bGNkX3dlaWdodHMsIHdlaWdodHMsIDUgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xjZEZpbHRlciAgZmlsdGVyICkKKyAgeworICAgIHN0YXRpYyBjb25zdCBGVF9CeXRlICBsaWdodF9maWx0ZXJbNV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMHgwMCwgMHg1NSwgMHg1NiwgMHg1NSwgMHgwMCB9OworICAgIC8qIHRoZSB2YWx1ZXMgaGVyZSBzdW0gdXAgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiAyNTYsICovCisgICAgLyogcHJvdmlkaW5nIGEgY2hlYXAgZ2FtbWEgY29ycmVjdGlvbiAgICAgICAgICAgICAgICAgKi8KKyAgICBzdGF0aWMgY29uc3QgRlRfQnl0ZSAgZGVmYXVsdF9maWx0ZXJbNV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMHgxMCwgMHg0MCwgMHg3MCwgMHg0MCwgMHgxMCB9OworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgc3dpdGNoICggZmlsdGVyICkKKyAgICB7CisgICAgY2FzZSBGVF9MQ0RfRklMVEVSX05PTkU6CisgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBOVUxMOworICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9MQ0RfRklMVEVSX0RFRkFVTFQ6CisjaWYgZGVmaW5lZCggRlRfRk9SQ0VfTEVHQUNZX0xDRF9GSUxURVIgKQorCisgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBfZnRfbGNkX2ZpbHRlcl9sZWdhY3k7CisgICAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAwOworCisjZWxpZiBkZWZpbmVkKCBGVF9GT1JDRV9MSUdIVF9MQ0RfRklMVEVSICkKKworICAgICAgZnRfbWVtY3B5KCBsaWJyYXJ5LT5sY2Rfd2VpZ2h0cywgbGlnaHRfZmlsdGVyLCA1ICk7CisgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBfZnRfbGNkX2ZpbHRlcl9maXI7CisgICAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAyOworCisjZWxzZQorCisgICAgICBmdF9tZW1jcHkoIGxpYnJhcnktPmxjZF93ZWlnaHRzLCBkZWZhdWx0X2ZpbHRlciwgNSApOworICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfZmlyOworICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMjsKKworI2VuZGlmCisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9MQ0RfRklMVEVSX0xJR0hUOgorICAgICAgZnRfbWVtY3B5KCBsaWJyYXJ5LT5sY2Rfd2VpZ2h0cywgbGlnaHRfZmlsdGVyLCA1ICk7CisgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBfZnRfbGNkX2ZpbHRlcl9maXI7CisgICAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAyOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBVU0VfTEVHQUNZCisKKyAgICBjYXNlIEZUX0xDRF9GSUxURVJfTEVHQUNZOgorICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfbGVnYWN5OworICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMDsKKyAgICAgIGJyZWFrOworCisjZW5kaWYKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICB9CisKKyAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyID0gZmlsdGVyOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0cyggRlRfTGlicmFyeSAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAgKndlaWdodHMgKQorICB7CisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisgICAgRlRfVU5VU0VEKCB3ZWlnaHRzICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MY2RGaWx0ZXIgIGZpbHRlciApCisgIHsKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKyAgICBGVF9VTlVTRUQoIGZpbHRlciApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCisjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRtYWMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmEyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRtYWMuYwpAQCAtMCwwICsxLDEwNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0bWFjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBNYWMgRk9ORCBzdXBwb3J0LiAgV3JpdHRlbiBieSBqdXN0QGxldHRlcnJvci5jb20uICAgICAgICAgICAgICAgICAgICAqLworLyogIEhlYXZpbHkgbW9kaWZpZWQgYnkgbXBzdXp1a2ksIEdlb3JnZSBXaWxsaWFtcywgYW5kIFNlYW4gTWNCcmlkZS4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIGZvciBNYWMgT1MgWCBvbmx5OyBzZWUgYnVpbGRzL21hYy9mdG9sZG1hYy5jIGZvciAgICAgICAgICAqLworLyogIGNsYXNzaWMgcGxhdGZvcm1zIGJ1aWx0IGJ5IE1QVy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoKKyAgICBOb3RlcworCisgICAgTWFjIHN1aXRjYXNlIGZpbGVzIGNhbiAoYW5kIG9mdGVuIGRvISkgY29udGFpbiBtdWx0aXBsZSBmb250cy4gIFRvCisgICAgc3VwcG9ydCB0aGlzIEkgdXNlIHRoZSBmYWNlX2luZGV4IGFyZ3VtZW50IG9mIEZUXyhPcGVufE5ldylfRmFjZSgpCisgICAgZnVuY3Rpb25zLCBhbmQgcHJldGVuZCB0aGUgc3VpdGNhc2UgZmlsZSBpcyBhIGNvbGxlY3Rpb24uCisKKyAgICBXYXJuaW5nOiBmYml0IGFuZCBORk5UIGJpdG1hcCByZXNvdXJjZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiAgSW4gb2xkCisgICAgc2ZudCBmb250cywgYml0bWFwIGdseXBoIGRhdGEgZm9yIGVhY2ggc2l6ZSBpcyBzdG9yZWQgaW4gZWFjaCBgTkZOVCcKKyAgICByZXNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgYGJkYXQnIHRhYmxlIGluIHRoZSBzZm50IHJlc291cmNlLiAgVGhlcmVmb3JlLAorICAgIGZhY2UtPm51bV9maXhlZF9zaXplcyBpcyBzZXQgdG8gMCwgYmVjYXVzZSBiaXRtYXAgZGF0YSBpbiBgTkZOVCcKKyAgICByZXNvdXJjZSBpcyB1bmF2YWlsYWJsZSBhdCBwcmVzZW50LgorCisgICAgVGhlIE1hYyBGT05EIHN1cHBvcnQgd29ya3Mgcm91Z2hseSBsaWtlIHRoaXM6CisKKyAgICAtIENoZWNrIHdoZXRoZXIgdGhlIG9mZmVyZWQgc3RyZWFtIHBvaW50cyB0byBhIE1hYyBzdWl0Y2FzZSBmaWxlLiAgVGhpcworICAgICAgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgZmlsZSB0eXBlOiBpdCBoYXMgdG8gYmUgJ0ZGSUwnIG9yICd0ZmlsJy4gIFRoZQorICAgICAgc3RyZWFtIHRoYXQgZ2V0cyBwYXNzZWQgdG8gb3VyIGluaXRfZmFjZSgpIHJvdXRpbmUgaXMgYSBzdGRpbyBzdHJlYW0sCisgICAgICB3aGljaCBpc24ndCB1c2FibGUgZm9yIHVzLCBzaW5jZSB0aGUgRk9ORCByZXNvdXJjZXMgbGl2ZSBpbiB0aGUKKyAgICAgIHJlc291cmNlIGZvcmsuICBTbyB3ZSBqdXN0IGdyYWIgdGhlIHN0cmVhbS0+cGF0aG5hbWUgZmllbGQuCisKKyAgICAtIFJlYWQgdGhlIEZPTkQgcmVzb3VyY2UgaW50byBtZW1vcnksIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhCisgICAgICBUcnVlVHlwZSBmb250IGFuZC9vcighKSBhIFR5cGUgMSBmb250IGF2YWlsYWJsZS4KKworICAgIC0gSWYgdGhlcmUgaXMgYSBUeXBlIDEgZm9udCBhdmFpbGFibGUgKGFzIGEgc2VwYXJhdGUgYExXRk4nIGZpbGUpLCByZWFkCisgICAgICBpdHMgZGF0YSBpbnRvIG1lbW9yeSwgbWFzc2FnZSBpdCBzbGlnaHRseSBzbyBpdCBiZWNvbWVzIFBGQiBkYXRhLCB3cmFwCisgICAgICBpdCBpbnRvIGEgbWVtb3J5IHN0cmVhbSwgbG9hZCB0aGUgVHlwZSAxIGRyaXZlciBhbmQgZGVsZWdhdGUgdGhlIHJlc3QKKyAgICAgIG9mIHRoZSB3b3JrIHRvIGl0IGJ5IGNhbGxpbmcgRlRfT3Blbl9GYWNlKCkuICAoWFhYIFRPRE86IGFmdGVyIHRoaXMKKyAgICAgIGhhcyBiZWVuIGRvbmUsIHRoZSBrZXJuaW5nIGRhdGEgZnJvbSB0aGUgRk9ORCByZXNvdXJjZSBzaG91bGQgYmUKKyAgICAgIGFwcGVuZGVkIHRvIHRoZSBmYWNlOiBPbiB0aGUgTWFjIHRoZXJlIGFyZSB1c3VhbGx5IG5vIEFGTSBmaWxlcworICAgICAgYXZhaWxhYmxlLiAgSG93ZXZlciwgdGhpcyBpcyB0cmlja3kgc2luY2Ugd2UgbmVlZCB0byBtYXAgTWFjIGNoYXIKKyAgICAgIGNvZGVzIHRvIHBzIGdseXBoIG5hbWVzIHRvIGdseXBoIElEJ3MuLi4pCisKKyAgICAtIElmIHRoZXJlIGlzIGEgVHJ1ZVR5cGUgZm9udCAoYW4gYHNmbnQnIHJlc291cmNlKSwgcmVhZCBpdCBpbnRvIG1lbW9yeSwKKyAgICAgIHdyYXAgaXQgaW50byBhIG1lbW9yeSBzdHJlYW0sIGxvYWQgdGhlIFRydWVUeXBlIGRyaXZlciBhbmQgZGVsZWdhdGUKKyAgICAgIHRoZSByZXN0IG9mIHRoZSB3b3JrIHRvIGl0LCBieSBjYWxsaW5nIEZUX09wZW5fRmFjZSgpLgorCisgICAgLSBTb21lIHN1aXRjYXNlIGZvbnRzIChub3RhYmx5IE9ueXgpIG1pZ2h0IHBvaW50IHRoZSBgTFdGTicgZmlsZSB0bworICAgICAgaXRzZWxmLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IGNvbnRhaW5zIGBQT1NUJyByZXNvdXJjZXMuICBUbyBoYW5kbGUKKyAgICAgIHRoaXMgc3BlY2lhbCBjYXNlIHdpdGhvdXQgb3BlbmluZyB0aGUgZmlsZSBhbiBleHRyYSB0aW1lLCB3ZSBqdXN0CisgICAgICBpZ25vcmUgZXJyb3JzIGZyb20gdGhlIGBMV0ZOJyBhbmQgZmFsbGJhY2sgdG8gdGhlIGBzZm50JyBpZiBib3RoIGFyZQorICAgICAgYXZhaWxhYmxlLgorICAqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgImZ0YmFzZS5oIgorCisgIC8qIFRoaXMgaXMgZm9yIE1hYyBPUyBYLiAgV2l0aG91dCByZWRlZmluaXRpb24sIE9TX0lOTElORSAqLworICAvKiBleHBhbmRzIHRvIGBzdGF0aWMgaW5saW5lJyB3aGljaCBkb2Vzbid0IHN1cnZpdmUgdGhlICAgKi8KKyAgLyogLWFuc2kgY29tcGlsYXRpb24gZmxhZyBvZiBHQ0MuICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgIUhBVkVfQU5TSV9PU19JTkxJTkUKKyN1bmRlZiAgT1NfSU5MSU5FCisjZGVmaW5lIE9TX0lOTElORSAgc3RhdGljIF9faW5saW5lX18KKyNlbmRpZgorCisgIC8qIGBjb25maWd1cmUnIGNoZWNrcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGBSZXNvdXJjZUluZGV4JyBzdHJpY3RseSAqLworICAvKiBhbmQgc2V0cyBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggMSBvciAwIGFsd2F5cy4gIElmIGl0IGlzICAgICAgKi8KKyAgLyogbm90IHNldCAoZS5nLiwgYSBidWlsZCB3aXRob3V0IGBjb25maWd1cmUnKSwgdGhlIGF2YWlsYWJpbGl0eSAgICovCisgIC8qIGlzIGd1ZXNzZWQgZnJvbSB0aGUgU0RLIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVgKKyNpZiAhZGVmaW5lZCggTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgfHwgXAorICAgICggTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNSApCisjZGVmaW5lIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCAwCisjZWxzZQorI2RlZmluZSBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggMQorI2VuZGlmCisjZW5kaWYgLyogIUhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCAqLworCisjaWYgKCBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggPT0gMCApCisgIHR5cGVkZWYgc2hvcnQgIFJlc291cmNlSW5kZXg7CisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzbGltaXRzLmg+IC8qIFBBVEhfTUFYICovCisKKyAgLyogRG9uJ3Qgd2FudCB3YXJuaW5ncyBhYm91dCBvdXIgb3duIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gKi8KKyNkZWZpbmUgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEUKKworI2luY2x1ZGUgRlRfTUFDX0gKKworI2lmbmRlZiBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSAvKiBzaW5jZSBNYWMgT1MgWCAxMC4xICovCisjZGVmaW5lIGtBVFNPcHRpb25GbGFnc1VuUmVzdHJpY3RlZFNjb3BlIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQKKyNlbmRpZgorCisKKyAgLyogU2V0IFBSRUZFUl9MV0ZOIHRvIDEgaWYgTFdGTiAoVHlwZSAxKSBpcyBwcmVmZXJyZWQgb3ZlcgorICAgICBUcnVlVHlwZSBpbiBjYXNlICpib3RoKiBhcmUgYXZhaWxhYmxlICh0aGlzIGlzIG5vdCBjb21tb24sCisgICAgIGJ1dCBpdCAqaXMqIHBvc3NpYmxlKS4gKi8KKyNpZm5kZWYgUFJFRkVSX0xXRk4KKyNkZWZpbmUgUFJFRkVSX0xXRk4gIDEKKyNlbmRpZgorCisKKyNpZmRlZiBGVF9NQUNJTlRPU0gKKworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBGU1NwZWMgaXMgZGVwcmVjYXRlZCBpbiBNYWMgT1MgWCAgKi8KKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgIGZhY2VfaW5kZXggKQorICB7CisgICAgRlRfVU5VU0VEKCBmb250TmFtZSApOworICAgIEZUX1VOVVNFRCggcGF0aFNwZWMgKTsKKyAgICBGVF9VTlVTRUQoIGZhY2VfaW5kZXggKTsKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgIH0KKworCisgIC8qIFByaXZhdGUgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgRlNTcGVjIHR5cGUgaGFzIGJlZW4gZGlzY291cmFnZWQgZm9yIGEgbG9uZyB0aW1lLCAgICAgKi8KKyAgLyogdW5mb3J0dW5hdGVseSBhbiBGU1JlZiByZXBsYWNlbWVudCBBUEkgZm9yICAgICAgICAgICAgICAgICovCisgIC8qIEFUU0ZvbnRHZXRGaWxlU3BlY2lmaWNhdGlvbigpIGlzIG9ubHkgYXZhaWxhYmxlIGluICAgICAgICAqLworICAvKiBNYWMgT1MgWCAxMC41IGFuZCBsYXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIE9TU3RhdHVzCisgIEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBBVFNGb250UmVmICBhdHNfZm9udF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTUmVmKiAgICAgIGF0c19mb250X3JlZiApCisgIHsKKyNpZiBkZWZpbmVkKCBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKSAmJiBcCisgICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKQorCisgICAgT1NTdGF0dXMgIGVycjsKKworICAgIGVyciA9IEFUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBhdHNfZm9udF9pZCwgYXRzX2ZvbnRfcmVmICk7CisKKyAgICByZXR1cm4gZXJyOworI2VsaWYgX19MUDY0X18gLyogTm8gNjRiaXQgQ2FyYm9uIEFQSSBvbiBsZWdhY3kgcGxhdGZvcm1zICovCisgICAgRlRfVU5VU0VEKCBhdHNfZm9udF9pZCApOworICAgIEZUX1VOVVNFRCggYXRzX2ZvbnRfcmVmICk7CisKKworICAgIHJldHVybiBmbmZFcnI7CisjZWxzZSAvKiAzMmJpdCBDYXJib24gQVBJIG9uIGxlZ2FjeSBwbGF0Zm9ybXMgKi8KKyAgICBPU1N0YXR1cyAgZXJyOworICAgIEZTU3BlYyAgICBzcGVjOworCisKKyAgICBlcnIgPSBBVFNGb250R2V0RmlsZVNwZWNpZmljYXRpb24oIGF0c19mb250X2lkLCAmc3BlYyApOworICAgIGlmICggbm9FcnIgPT0gZXJyICkKKyAgICAgIGVyciA9IEZTcE1ha2VGU1JlZiggJnNwZWMsIGF0c19mb250X3JlZiApOworCisgICAgcmV0dXJuIGVycjsKKyNlbmRpZgorICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1JlZiogICAgICAgYXRzX2ZvbnRfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBDRlN0cmluZ1JlZiAgY2ZfZm9udE5hbWU7CisgICAgQVRTRm9udFJlZiAgIGF0c19mb250X2lkOworCisKKyAgICAqZmFjZV9pbmRleCA9IDA7CisKKyAgICBjZl9mb250TmFtZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoIE5VTEwsIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiApOworICAgIGF0c19mb250X2lkID0gQVRTRm9udEZpbmRGcm9tTmFtZSggY2ZfZm9udE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSApOworICAgIENGUmVsZWFzZSggY2ZfZm9udE5hbWUgKTsKKworICAgIGlmICggYXRzX2ZvbnRfaWQgPT0gMCB8fCBhdHNfZm9udF9pZCA9PSAweEZGRkZGRkZGVUwgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBpZiAoIG5vRXJyICE9IEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBhdHNfZm9udF9pZCwgYXRzX2ZvbnRfcmVmICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAvKiBmYWNlX2luZGV4IGNhbGN1bGF0aW9uIGJ5IHNlYXJjaGluZyBwcmVjZWRpbmcgZm9udElEcyAqLworICAgIC8qIHdpdGggc2FtZSBGU1JlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgeworICAgICAgQVRTRm9udFJlZiAgaWQyID0gYXRzX2ZvbnRfaWQgLSAxOworICAgICAgRlNSZWYgICAgICAgcmVmMjsKKworCisgICAgICB3aGlsZSAoIGlkMiA+IDAgKQorICAgICAgeworICAgICAgICBpZiAoIG5vRXJyICE9IEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBpZDIsICZyZWYyICkgKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIG5vRXJyICE9IEZTQ29tcGFyZUZTUmVmcyggYXRzX2ZvbnRfcmVmLCAmcmVmMiApICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZDIgLS07CisgICAgICB9CisgICAgICAqZmFjZV9pbmRleCA9IGF0c19mb250X2lkIC0gKCBpZDIgKyAxICk7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgICAgICAgbWF4UGF0aFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBGU1JlZiAgICAgcmVmOworICAgIEZUX0Vycm9yICBlcnI7CisKKworICAgIGlmICggIWZvbnROYW1lIHx8ICFmYWNlX2luZGV4ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCkgOworCisgICAgZXJyID0gRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggZm9udE5hbWUsICZyZWYsIGZhY2VfaW5kZXggKTsKKyAgICBpZiAoIGVyciApCisgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKCBub0VyciAhPSBGU1JlZk1ha2VQYXRoKCAmcmVmLCBwYXRoLCBtYXhQYXRoU2l6ZSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgRlNTcGVjIGlzIGRlcHJlY2F0ZWQgaW4gTWFjIE9TIFggICovCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICBmYWNlX2luZGV4ICkKKyAgeworI2lmICggX19MUDY0X18gKSB8fCAoIGRlZmluZWQoIE1BQ19PU19YX1ZFUlNJT05fMTBfNSApICYmIFwKKyAgICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgKQorICAgIEZUX1VOVVNFRCggZm9udE5hbWUgKTsKKyAgICBGVF9VTlVTRUQoIHBhdGhTcGVjICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworI2Vsc2UKKyAgICBGU1JlZiAgICAgcmVmOworICAgIEZUX0Vycm9yICBlcnI7CisKKworICAgIGlmICggIWZvbnROYW1lIHx8ICFmYWNlX2luZGV4ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZXJyID0gRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggZm9udE5hbWUsICZyZWYsIGZhY2VfaW5kZXggKTsKKyAgICBpZiAoIGVyciApCisgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKCBub0VyciAhPSBGU0dldENhdGFsb2dJbmZvKCAmcmVmLCBrRlNDYXRJbmZvTm9uZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhTcGVjLCBOVUxMICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworI2VuZGlmCisgIH0KKworCisgIHN0YXRpYyBPU0VycgorICBGVF9GU1BhdGhNYWtlUmVzKCBjb25zdCBVSW50OCogICAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgIFJlc0ZpbGVSZWZOdW0qICByZXMgKQorICB7CisgICAgT1NFcnIgIGVycjsKKyAgICBGU1JlZiAgcmVmOworCisKKyAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhuYW1lLCAmcmVmLCBGQUxTRSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIC8qIGF0IHByZXNlbnQsIG5vIHN1cHBvcnQgZm9yIGRmb250IGZvcm1hdCAqLworICAgIGVyciA9IEZTT3BlblJlc291cmNlRmlsZSggJnJlZiwgMCwgTlVMTCwgZnNSZFBlcm0sIHJlcyApOworICAgIGlmICggbm9FcnIgPT0gZXJyICkKKyAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBmYWxsYmFjayB0byBvcmlnaW5hbCByZXNvdXJjZS1mb3JrIGZvbnQgKi8KKyAgICAqcmVzID0gRlNPcGVuUmVzRmlsZSggJnJlZiwgZnNSZFBlcm0gKTsKKyAgICBlcnIgID0gUmVzRXJyb3IoKTsKKworICAgIHJldHVybiBlcnI7CisgIH0KKworCisgIC8qIFJldHVybiB0aGUgZmlsZSB0eXBlIGZvciBnaXZlbiBwYXRobmFtZSAqLworICBzdGF0aWMgT1NUeXBlCisgIGdldF9maWxlX3R5cGVfZnJvbV9wYXRoKCBjb25zdCBVSW50OCogIHBhdGhuYW1lICkKKyAgeworICAgIEZTUmVmICAgICAgICAgIHJlZjsKKyAgICBGU0NhdGFsb2dJbmZvICBpbmZvOworCisKKyAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhuYW1lLCAmcmVmLCBGQUxTRSApICkKKyAgICAgIHJldHVybiAoIE9TVHlwZSApIDA7CisKKyAgICBpZiAoIG5vRXJyICE9IEZTR2V0Q2F0YWxvZ0luZm8oICZyZWYsIGtGU0NhdEluZm9GaW5kZXJJbmZvLCAmaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwgKSApCisgICAgICByZXR1cm4gKCBPU1R5cGUgKSAwOworCisgICAgcmV0dXJuICgoRkluZm8gKikoaW5mby5maW5kZXJJbmZvKSktPmZkVHlwZTsKKyAgfQorCisKKyAgLyogR2l2ZW4gYSBQb3N0U2NyaXB0IGZvbnQgbmFtZSwgY3JlYXRlIHRoZSBNYWNpbnRvc2ggTFdGTiBmaWxlIG5hbWUuICovCisgIHN0YXRpYyB2b2lkCisgIGNyZWF0ZV9sd2ZuX25hbWUoIGNoYXIqICAgcHNfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSApCisgIHsKKyAgICBpbnQgICAgICAgbWF4ID0gNSwgY291bnQgPSAwOworICAgIEZUX0J5dGUqICBwID0gbHdmbl9maWxlX25hbWU7CisgICAgRlRfQnl0ZSogIHEgPSAoRlRfQnl0ZSopcHNfbmFtZTsKKworCisgICAgbHdmbl9maWxlX25hbWVbMF0gPSAwOworCisgICAgd2hpbGUgKCAqcSApCisgICAgeworICAgICAgaWYgKCBmdF9pc3VwcGVyKCAqcSApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBjb3VudCApCisgICAgICAgICAgbWF4ID0gMzsKKyAgICAgICAgY291bnQgPSAwOworICAgICAgfQorICAgICAgaWYgKCBjb3VudCA8IG1heCAmJiAoIGZ0X2lzYWxudW0oICpxICkgfHwgKnEgPT0gJ18nICkgKQorICAgICAgeworICAgICAgICAqKytwID0gKnE7CisgICAgICAgIGx3Zm5fZmlsZV9uYW1lWzBdKys7CisgICAgICAgIGNvdW50Kys7CisgICAgICB9CisgICAgICBxKys7CisgICAgfQorICB9CisKKworICBzdGF0aWMgc2hvcnQKKyAgY291bnRfZmFjZXNfc2ZudCggY2hhciogIGZvbmRfZGF0YSApCisgIHsKKyAgICAvKiBUaGUgY291bnQgaXMgMSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIGluIHRoZSBGT05ELiAgKi8KKyAgICAvKiBJc24ndCB0aGF0IGN1dGU/IDotKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHJldHVybiBFbmRpYW5TMTZfQnRvTiggKiggKHNob3J0KikoIGZvbmRfZGF0YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRmFtUmVjICkgKSApICkgKyAxOworICB9CisKKworICBzdGF0aWMgc2hvcnQKKyAgY291bnRfZmFjZXNfc2NhbGFibGUoIGNoYXIqICBmb25kX2RhdGEgKQorICB7CisgICAgQXNzY0VudHJ5KiAgYXNzb2M7CisgICAgc2hvcnQgICAgICAgaSwgZmFjZSwgZmFjZV9hbGw7CisKKworICAgIGZhY2VfYWxsID0gRW5kaWFuUzE2X0J0b04oICooIChzaG9ydCAqKSggZm9uZF9kYXRhICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZhbVJlYyApICkgKSApICsgMTsKKyAgICBhc3NvYyAgICA9IChBc3NjRW50cnkqKSggZm9uZF9kYXRhICsgc2l6ZW9mICggRmFtUmVjICkgKyAyICk7CisgICAgZmFjZSAgICAgPSAwOworCisgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlX2FsbDsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIDAgPT0gRW5kaWFuUzE2X0J0b04oIGFzc29jW2ldLmZvbnRTaXplICkgKQorICAgICAgICBmYWNlKys7CisgICAgfQorICAgIHJldHVybiBmYWNlOworICB9CisKKworICAvKiBMb29rIGluc2lkZSB0aGUgRk9ORCBkYXRhLCBhbnN3ZXIgd2hldGhlciB0aGVyZSBzaG91bGQgYmUgYW4gU0ZOVAorICAgICByZXNvdXJjZSwgYW5kIGFuc3dlciB0aGUgbmFtZSBvZiBhIHBvc3NpYmxlIExXRk4gVHlwZSAxIGZpbGUuCisKKyAgICAgVGhhbmtzIHRvIFBhdWwgTWlsbGVyIChwYXVsbUBwcm9mb3VuZGVmZmVjdHMuY29tKSBmb3IgdGhlIGZpeAorICAgICB0byBsb2FkIGEgZmFjZSBPVEhFUiB0aGFuIHRoZSBmaXJzdCBvbmUgaW4gdGhlIEZPTkQhCisgICovCisKKworICBzdGF0aWMgdm9pZAorICBwYXJzZV9mb25kKCBjaGFyKiAgIGZvbmRfZGF0YSwKKyAgICAgICAgICAgICAgc2hvcnQqICBoYXZlX3NmbnQsCisgICAgICAgICAgICAgIFJlc0lEKiAgc2ZudF9pZCwKKyAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgc2hvcnQgICBmYWNlX2luZGV4ICkKKyAgeworICAgIEFzc2NFbnRyeSogIGFzc29jOworICAgIEFzc2NFbnRyeSogIGJhc2VfYXNzb2M7CisgICAgRmFtUmVjKiAgICAgZm9uZDsKKworCisgICAgKnNmbnRfaWQgICAgICAgICAgPSAwOworICAgICpoYXZlX3NmbnQgICAgICAgID0gMDsKKyAgICBsd2ZuX2ZpbGVfbmFtZVswXSA9IDA7CisKKyAgICBmb25kICAgICAgID0gKEZhbVJlYyopZm9uZF9kYXRhOworICAgIGFzc29jICAgICAgPSAoQXNzY0VudHJ5KikoIGZvbmRfZGF0YSArIHNpemVvZiAoIEZhbVJlYyApICsgMiApOworICAgIGJhc2VfYXNzb2MgPSBhc3NvYzsKKworICAgIC8qIHRoZSBtYXhpbXVtIGZhY2VzIGluIGEgRk9ORCBpcyA0OCwgc2l6ZSBvZiBTdHlsZVRhYmxlLmluZGV4ZXNbXSAqLworICAgIGlmICggNDcgPCBmYWNlX2luZGV4ICkKKyAgICAgIHJldHVybjsKKworICAgIC8qIExldCdzIGRvIGEgbGl0dGxlIHJhbmdlIGNoZWNraW5nIGJlZm9yZSB3ZSBnZXQgdG9vIGV4Y2l0ZWQgaGVyZSAqLworICAgIGlmICggZmFjZV9pbmRleCA8IGNvdW50X2ZhY2VzX3NmbnQoIGZvbmRfZGF0YSApICkKKyAgICB7CisgICAgICBhc3NvYyArPSBmYWNlX2luZGV4OyAgICAgICAgLyogYWRkIG9uIHRoZSBmYWNlX2luZGV4ISAqLworCisgICAgICAvKiBpZiB0aGUgZmFjZSBhdCB0aGlzIGluZGV4IGlzIG5vdCBzY2FsYWJsZSwKKyAgICAgICAgIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgb25lIChvbGQgYmVoYXZpb3IpICovCisgICAgICBpZiAoIEVuZGlhblMxNl9CdG9OKCBhc3NvYy0+Zm9udFNpemUgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgKmhhdmVfc2ZudCA9IDE7CisgICAgICAgICpzZm50X2lkICAgPSBFbmRpYW5TMTZfQnRvTiggYXNzb2MtPmZvbnRJRCApOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGJhc2VfYXNzb2MtPmZvbnRTaXplID09IDAgKQorICAgICAgeworICAgICAgICAqaGF2ZV9zZm50ID0gMTsKKyAgICAgICAgKnNmbnRfaWQgICA9IEVuZGlhblMxNl9CdG9OKCBiYXNlX2Fzc29jLT5mb250SUQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIEVuZGlhblMzMl9CdG9OKCBmb25kLT5mZlN0eWxPZmYgKSApCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciogIHAgPSAodW5zaWduZWQgY2hhciopZm9uZF9kYXRhOworICAgICAgU3R5bGVUYWJsZSogICAgIHN0eWxlOworICAgICAgdW5zaWduZWQgc2hvcnQgIHN0cmluZ19jb3VudDsKKyAgICAgIGNoYXIgICAgICAgICAgICBwc19uYW1lWzI1Nl07CisgICAgICB1bnNpZ25lZCBjaGFyKiAgbmFtZXNbNjRdOworICAgICAgaW50ICAgICAgICAgICAgIGk7CisKKworICAgICAgcCArPSBFbmRpYW5TMzJfQnRvTiggZm9uZC0+ZmZTdHlsT2ZmICk7CisgICAgICBzdHlsZSA9IChTdHlsZVRhYmxlKilwOworICAgICAgcCArPSBzaXplb2YgKCBTdHlsZVRhYmxlICk7CisgICAgICBzdHJpbmdfY291bnQgPSBFbmRpYW5TMTZfQnRvTiggKihzaG9ydCopKHApICk7CisgICAgICBzdHJpbmdfY291bnQgPSBGVF9NSU4oIDY0LCBzdHJpbmdfY291bnQgKTsKKyAgICAgIHAgKz0gc2l6ZW9mICggc2hvcnQgKTsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBzdHJpbmdfY291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIG5hbWVzW2ldID0gcDsKKyAgICAgICAgcCAgICAgICArPSBuYW1lc1tpXVswXTsKKyAgICAgICAgcCsrOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIHNpemVfdCAgcHNfbmFtZV9sZW4gPSAoc2l6ZV90KW5hbWVzWzBdWzBdOworCisKKyAgICAgICAgaWYgKCBwc19uYW1lX2xlbiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIGZ0X21lbWNweShwc19uYW1lLCBuYW1lc1swXSArIDEsIHBzX25hbWVfbGVuKTsKKyAgICAgICAgICBwc19uYW1lW3BzX25hbWVfbGVuXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA+IDEgJiYKKyAgICAgICAgICAgICBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA8PSBzdHJpbmdfY291bnQgKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciogIHN1ZmZpeGVzID0gbmFtZXNbc3R5bGUtPmluZGV4ZXNbZmFjZV9pbmRleF0gLSAxXTsKKworCisgICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gc3VmZml4ZXNbMF07IGkrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIHM7CisgICAgICAgICAgICBzaXplX3QgICAgICAgICAgaiA9IHN1ZmZpeGVzW2ldIC0gMTsKKworCisgICAgICAgICAgICBpZiAoIGogPCBzdHJpbmdfY291bnQgJiYgKCBzID0gbmFtZXNbal0gKSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2l6ZV90ICBzX2xlbiA9IChzaXplX3Qpc1swXTsKKworCisgICAgICAgICAgICAgIGlmICggc19sZW4gIT0gMCAmJiBwc19uYW1lX2xlbiArIHNfbGVuIDwgc2l6ZW9mICggcHNfbmFtZSApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZ0X21lbWNweSggcHNfbmFtZSArIHBzX25hbWVfbGVuLCBzICsgMSwgc19sZW4gKTsKKyAgICAgICAgICAgICAgICBwc19uYW1lX2xlbiArPSBzX2xlbjsKKyAgICAgICAgICAgICAgICBwc19uYW1lW3BzX25hbWVfbGVuXSA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY3JlYXRlX2x3Zm5fbmFtZSggcHNfbmFtZSwgbHdmbl9maWxlX25hbWUgKTsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyAgRlRfRXJyb3IKKyAgbG9va3VwX2x3Zm5fYnlfZm9uZCggY29uc3QgVUludDgqICAgICAgcGF0aF9mb25kLAorICAgICAgICAgICAgICAgICAgICAgICBDb25zdFN0cjI1NVBhcmFtICBiYXNlX2x3Zm4sCisgICAgICAgICAgICAgICAgICAgICAgIFVJbnQ4KiAgICAgICAgICAgIHBhdGhfbHdmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgICAgcGF0aF9zaXplICkKKyAgeworICAgIEZTUmVmICAgcmVmLCBwYXJfcmVmOworICAgIHNpemVfdCAgZGlybmFtZV9sZW47CisKKworICAgIC8qIFBhdGhuYW1lIGZvciBGU1JlZiBjYW4gYmUgaW4gdmFyaW91cyBmb3JtYXRzOiBIRlMsIEhGUyssIGFuZCBQT1NJWC4gKi8KKyAgICAvKiBXZSBzaG91bGQgbm90IGV4dHJhY3QgcGFyZW50IGRpcmVjdG9yeSBieSBzdHJpbmcgbWFuaXB1bGF0aW9uLiAgICAgICovCisKKyAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhfZm9uZCwgJnJlZiwgRkFMU0UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggbm9FcnIgIT0gRlNHZXRDYXRhbG9nSW5mbyggJnJlZiwga0ZTQ2F0SW5mb05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmcGFyX3JlZiApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBub0VyciAhPSBGU1JlZk1ha2VQYXRoKCAmcGFyX3JlZiwgcGF0aF9sd2ZuLCBwYXRoX3NpemUgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggZnRfc3RybGVuKCAoY2hhciAqKXBhdGhfbHdmbiApICsgMSArIGJhc2VfbHdmblswXSA+IHBhdGhfc2l6ZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIC8qIG5vdyB3ZSBoYXZlIGFic29sdXRlIGRpcm5hbWUgaW4gcGF0aF9sd2ZuICovCisgICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgIi8iICk7CisgICAgZGlybmFtZV9sZW4gPSBmdF9zdHJsZW4oIChjaGFyICopcGF0aF9sd2ZuICk7CisgICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgKGNoYXIgKiliYXNlX2x3Zm4gKyAxICk7CisgICAgcGF0aF9sd2ZuW2Rpcm5hbWVfbGVuICsgYmFzZV9sd2ZuWzBdXSA9ICdcMCc7CisKKyAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhfbHdmbiwgJnJlZiwgRkFMU0UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICBpZiAoIG5vRXJyICE9IEZTR2V0Q2F0YWxvZ0luZm8oICZyZWYsIGtGU0NhdEluZm9Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBzaG9ydAorICBjb3VudF9mYWNlcyggSGFuZGxlICAgICAgICBmb25kLAorICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSApCisgIHsKKyAgICBSZXNJRCAgICAgc2ZudF9pZDsKKyAgICBzaG9ydCAgICAgaGF2ZV9zZm50LCBoYXZlX2x3Zm47CisgICAgU3RyMjU1ICAgIGx3Zm5fZmlsZV9uYW1lOworICAgIFVJbnQ4ICAgICBidWZmW1BBVEhfTUFYXTsKKyAgICBGVF9FcnJvciAgZXJyOworICAgIHNob3J0ICAgICBudW1fZmFjZXM7CisKKworICAgIGhhdmVfc2ZudCA9IGhhdmVfbHdmbiA9IDA7CisKKyAgICBwYXJzZV9mb25kKCAqZm9uZCwgJmhhdmVfc2ZudCwgJnNmbnRfaWQsIGx3Zm5fZmlsZV9uYW1lLCAwICk7CisKKyAgICBpZiAoIGx3Zm5fZmlsZV9uYW1lWzBdICkKKyAgICB7CisgICAgICBlcnIgPSBsb29rdXBfbHdmbl9ieV9mb25kKCBwYXRobmFtZSwgbHdmbl9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmLCBzaXplb2YgKCBidWZmICkgICk7CisgICAgICBpZiAoICFlcnIgKQorICAgICAgICBoYXZlX2x3Zm4gPSAxOworICAgIH0KKworICAgIGlmICggaGF2ZV9sd2ZuICYmICggIWhhdmVfc2ZudCB8fCBQUkVGRVJfTFdGTiApICkKKyAgICAgIG51bV9mYWNlcyA9IDE7CisgICAgZWxzZQorICAgICAgbnVtX2ZhY2VzID0gY291bnRfZmFjZXNfc2NhbGFibGUoICpmb25kICk7CisKKyAgICByZXR1cm4gbnVtX2ZhY2VzOworICB9CisKKworICAvKiBSZWFkIFR5cGUgMSBkYXRhIGZyb20gdGhlIFBPU1QgcmVzb3VyY2VzIGluc2lkZSB0aGUgTFdGTiBmaWxlLAorICAgICByZXR1cm4gYSBQRkIgYnVmZmVyLiAgVGhpcyBpcyBzb21ld2hhdCBjb252b2x1dGVkIGJlY2F1c2UgdGhlIEZUMgorICAgICBQRkIgcGFyc2VyIHdhbnRzIHRoZSBBU0NJSSBoZWFkZXIgYXMgb25lIGNodW5rLCBhbmQgdGhlIExXRk4KKyAgICAgY2h1bmtzIGFyZSBvZnRlbiBub3Qgb3JnYW5pemVkIHRoYXQgd2F5LCBzbyB3ZSBnbHVlIGNodW5rcworICAgICBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmVhZF9sd2ZuKCBGVF9NZW1vcnkgICAgICBtZW1vcnksCisgICAgICAgICAgICAgUmVzRmlsZVJlZk51bSAgcmVzLAorICAgICAgICAgICAgIEZUX0J5dGUqKiAgICAgIHBmYl9kYXRhLAorICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIHNpemUgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgUmVzSUQgICAgICAgICAgcmVzX2lkOworICAgIHVuc2lnbmVkIGNoYXIgICpidWZmZXIsICpwLCAqc2l6ZV9wID0gTlVMTDsKKyAgICBGVF9VTG9uZyAgICAgICB0b3RhbF9zaXplID0gMDsKKyAgICBGVF9VTG9uZyAgICAgICBvbGRfdG90YWxfc2l6ZSA9IDA7CisgICAgRlRfVUxvbmcgICAgICAgcG9zdF9zaXplLCBwZmJfY2h1bmtfc2l6ZTsKKyAgICBIYW5kbGUgICAgICAgICBwb3N0X2RhdGE7CisgICAgY2hhciAgICAgICAgICAgY29kZSwgbGFzdF9jb2RlOworCisKKyAgICBVc2VSZXNGaWxlKCByZXMgKTsKKworICAgIC8qIEZpcnN0IHBhc3M6IGxvYWQgYWxsIFBPU1QgcmVzb3VyY2VzLCBhbmQgZGV0ZXJtaW5lIHRoZSBzaXplIG9mICovCisgICAgLyogdGhlIG91dHB1dCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICByZXNfaWQgICAgPSA1MDE7CisgICAgbGFzdF9jb2RlID0gLTE7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHBvc3RfZGF0YSA9IEdldDFSZXNvdXJjZSggVFRBR19QT1NULCByZXNfaWQrKyApOworICAgICAgaWYgKCBwb3N0X2RhdGEgPT0gTlVMTCApCisgICAgICAgIGJyZWFrOyAgLyogd2UgYXJlIGRvbmUgKi8KKworICAgICAgY29kZSA9ICgqcG9zdF9kYXRhKVswXTsKKworICAgICAgaWYgKCBjb2RlICE9IGxhc3RfY29kZSApCisgICAgICB7CisgICAgICAgIGlmICggY29kZSA9PSA1ICkKKyAgICAgICAgICB0b3RhbF9zaXplICs9IDI7IC8qIGp1c3QgdGhlIGVuZCBjb2RlICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICB0b3RhbF9zaXplICs9IDY7IC8qIGNvZGUgKyA0IGJ5dGVzIGNodW5rIGxlbmd0aCAqLworICAgICAgfQorCisgICAgICB0b3RhbF9zaXplICs9IEdldEhhbmRsZVNpemUoIHBvc3RfZGF0YSApIC0gMjsKKyAgICAgIGxhc3RfY29kZSA9IGNvZGU7CisKKyAgICAgIC8qIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93cyAqLworICAgICAgaWYgKCB0b3RhbF9zaXplIDwgb2xkX3RvdGFsX3NpemUgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKyAgICAgICAgZ290byBFcnJvcjsKKyAgICAgIH0KKworICAgICAgb2xkX3RvdGFsX3NpemUgPSB0b3RhbF9zaXplOworICAgIH0KKworICAgIGlmICggRlRfQUxMT0MoIGJ1ZmZlciwgKEZUX0xvbmcpdG90YWxfc2l6ZSApICkKKyAgICAgIGdvdG8gRXJyb3I7CisKKyAgICAvKiBTZWNvbmQgcGFzczogYXBwZW5kIGFsbCBQT1NUIGRhdGEgdG8gdGhlIGJ1ZmZlciwgYWRkIFBGQiBmaWVsZHMuICovCisgICAgLyogR2x1ZSBhbGwgY29uc2VjdXRpdmUgY2h1bmtzIG9mIHRoZSBzYW1lIHR5cGUgdG9nZXRoZXIuICAgICAgICAgICAqLworICAgIHAgICAgICAgICAgICAgID0gYnVmZmVyOworICAgIHJlc19pZCAgICAgICAgID0gNTAxOworICAgIGxhc3RfY29kZSAgICAgID0gLTE7CisgICAgcGZiX2NodW5rX3NpemUgPSAwOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBwb3N0X2RhdGEgPSBHZXQxUmVzb3VyY2UoIFRUQUdfUE9TVCwgcmVzX2lkKysgKTsKKyAgICAgIGlmICggcG9zdF9kYXRhID09IE5VTEwgKQorICAgICAgICBicmVhazsgIC8qIHdlIGFyZSBkb25lICovCisKKyAgICAgIHBvc3Rfc2l6ZSA9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBwb3N0X2RhdGEgKSAtIDI7CisgICAgICBjb2RlID0gKCpwb3N0X2RhdGEpWzBdOworCisgICAgICBpZiAoIGNvZGUgIT0gbGFzdF9jb2RlICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBsYXN0X2NvZGUgIT0gLTEgKQorICAgICAgICB7CisgICAgICAgICAgLyogd2UgYXJlIGRvbmUgYWRkaW5nIGEgY2h1bmssIGZpbGwgaW4gdGhlIHNpemUgZmllbGQgKi8KKyAgICAgICAgICBpZiAoIHNpemVfcCAhPSBOVUxMICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAqc2l6ZV9wKysgPSAoRlRfQnl0ZSkoICAgcGZiX2NodW5rX3NpemUgICAgICAgICAmIDB4RkYgKTsKKyAgICAgICAgICAgICpzaXplX3ArKyA9IChGVF9CeXRlKSggKCBwZmJfY2h1bmtfc2l6ZSA+PiA4ICApICYgMHhGRiApOworICAgICAgICAgICAgKnNpemVfcCsrID0gKEZUX0J5dGUpKCAoIHBmYl9jaHVua19zaXplID4+IDE2ICkgJiAweEZGICk7CisgICAgICAgICAgICAqc2l6ZV9wKysgPSAoRlRfQnl0ZSkoICggcGZiX2NodW5rX3NpemUgPj4gMjQgKSAmIDB4RkYgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcGZiX2NodW5rX3NpemUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgKnArKyA9IDB4ODA7CisgICAgICAgIGlmICggY29kZSA9PSA1ICkKKyAgICAgICAgICAqcCsrID0gMHgwMzsgIC8qIHRoZSBlbmQgKi8KKyAgICAgICAgZWxzZSBpZiAoIGNvZGUgPT0gMiApCisgICAgICAgICAgKnArKyA9IDB4MDI7ICAvKiBiaW5hcnkgc2VnbWVudCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgKnArKyA9IDB4MDE7ICAvKiBBU0NJSSBzZWdtZW50ICovCisKKyAgICAgICAgaWYgKCBjb2RlICE9IDUgKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV9wID0gcDsgICAvKiBzYXZlIGZvciBsYXRlciAqLworICAgICAgICAgIHAgKz0gNDsgICAgICAgLyogbWFrZSBzcGFjZSBmb3Igc2l6ZSBmaWVsZCAqLworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZ0X21lbWNweSggcCwgKnBvc3RfZGF0YSArIDIsIHBvc3Rfc2l6ZSApOworICAgICAgcGZiX2NodW5rX3NpemUgKz0gcG9zdF9zaXplOworICAgICAgcCArPSBwb3N0X3NpemU7CisgICAgICBsYXN0X2NvZGUgPSBjb2RlOworICAgIH0KKworICAgICpwZmJfZGF0YSA9IGJ1ZmZlcjsKKyAgICAqc2l6ZSA9IHRvdGFsX3NpemU7CisKKyAgRXJyb3I6CisgICAgQ2xvc2VSZXNGaWxlKCByZXMgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIENyZWF0ZSBhIG5ldyBGVF9GYWNlIGZyb20gYSBmaWxlIHBhdGggdG8gYW4gTFdGTiBmaWxlLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfTmV3X0ZhY2VfRnJvbV9MV0ZOKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCisgIHsKKyAgICBGVF9CeXRlKiAgICAgICBwZmJfZGF0YTsKKyAgICBGVF9VTG9uZyAgICAgICBwZmJfc2l6ZTsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICBSZXNGaWxlUmVmTnVtICByZXM7CisKKworICAgIGlmICggbm9FcnIgIT0gRlRfRlNQYXRoTWFrZVJlcyggcGF0aG5hbWUsICZyZXMgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICBwZmJfZGF0YSA9IE5VTEw7CisgICAgcGZiX3NpemUgPSAwOworICAgIGVycm9yID0gcmVhZF9sd2ZuKCBsaWJyYXJ5LT5tZW1vcnksIHJlcywgJnBmYl9kYXRhLCAmcGZiX3NpemUgKTsKKyAgICBDbG9zZVJlc0ZpbGUoIHJlcyApOyAvKiBQRkIgaXMgYWxyZWFkeSBsb2FkZWQsIHVzZWxlc3MgYW55bW9yZSAqLworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgcmV0dXJuIG9wZW5fZmFjZV9mcm9tX2J1ZmZlciggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKKyAgfQorCisKKyAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZnJvbSBhbiBTRk5UIHJlc291cmNlLCBzcGVjaWZpZWQgYnkgcmVzIElELiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlc0lEICAgICAgIHNmbnRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICBhZmFjZSApCisgIHsKKyAgICBIYW5kbGUgICAgIHNmbnQgPSBOVUxMOworICAgIEZUX0J5dGUqICAgc2ZudF9kYXRhOworICAgIHNpemVfdCAgICAgc2ZudF9zaXplOworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworICAgIGludCAgICAgICAgaXNfY2ZmLCBpc19zZm50X3BzOworCisKKyAgICBzZm50ID0gR2V0UmVzb3VyY2UoIFRUQUdfc2ZudCwgc2ZudF9pZCApOworICAgIGlmICggc2ZudCA9PSBOVUxMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9IYW5kbGUgKTsKKworICAgIHNmbnRfc2l6ZSA9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBzZm50ICk7CisgICAgaWYgKCBGVF9BTExPQyggc2ZudF9kYXRhLCAoRlRfTG9uZylzZm50X3NpemUgKSApCisgICAgeworICAgICAgUmVsZWFzZVJlc291cmNlKCBzZm50ICk7CisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgZnRfbWVtY3B5KCBzZm50X2RhdGEsICpzZm50LCBzZm50X3NpemUgKTsKKyAgICBSZWxlYXNlUmVzb3VyY2UoIHNmbnQgKTsKKworICAgIGlzX2NmZiAgICAgPSBzZm50X3NpemUgPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgIk9UVE8iLCA0ICk7CisgICAgaXNfc2ZudF9wcyA9IHNmbnRfc2l6ZSA+IDQgJiYgIWZ0X21lbWNtcCggc2ZudF9kYXRhLCAidHlwMSIsIDQgKTsKKworICAgIGlmICggaXNfc2ZudF9wcyApCisgICAgeworICAgICAgRlRfU3RyZWFtICBzdHJlYW07CisKKworICAgICAgaWYgKCBGVF9ORVcoIHN0cmVhbSApICkKKyAgICAgICAgZ290byBUcnlfT3BlblR5cGU7CisKKyAgICAgIEZUX1N0cmVhbV9PcGVuTWVtb3J5KCBzdHJlYW0sIHNmbnRfZGF0YSwgc2ZudF9zaXplICk7CisgICAgICBpZiAoICFvcGVuX2ZhY2VfUFNfZnJvbV9zZm50X3N0cmVhbSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICkgKQorICAgICAgeworICAgICAgICBGVF9TdHJlYW1fQ2xvc2UoIHN0cmVhbSApOworICAgICAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKyAgICAgICAgRlRfRlJFRSggc2ZudF9kYXRhICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgRlRfRlJFRSggc3RyZWFtICk7CisgICAgfQorICBUcnlfT3BlblR5cGU6CisgICAgZXJyb3IgPSBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19jZmYgPyAiY2ZmIiA6ICJ0cnVldHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICk7CisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDcmVhdGUgYSBuZXcgRlRfRmFjZSBmcm9tIGEgZmlsZSBwYXRoIHRvIGEgc3VpdGNhc2UgZmlsZS4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICAgIGFmYWNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgIGVycm9yID0gRlRfRVJSKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIFJlc0ZpbGVSZWZOdW0gIHJlc19yZWY7CisgICAgUmVzb3VyY2VJbmRleCAgcmVzX2luZGV4OworICAgIEhhbmRsZSAgICAgICAgIGZvbmQ7CisgICAgc2hvcnQgICAgICAgICAgbnVtX2ZhY2VzX2luX3JlczsKKworCisgICAgaWYgKCBub0VyciAhPSBGVF9GU1BhdGhNYWtlUmVzKCBwYXRobmFtZSwgJnJlc19yZWYgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICBVc2VSZXNGaWxlKCByZXNfcmVmICk7CisgICAgaWYgKCBSZXNFcnJvcigpICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIG51bV9mYWNlc19pbl9yZXMgPSAwOworICAgIGZvciAoIHJlc19pbmRleCA9IDE7IDsgKytyZXNfaW5kZXggKQorICAgIHsKKyAgICAgIHNob3J0ICBudW1fZmFjZXNfaW5fZm9uZDsKKworCisgICAgICBmb25kID0gR2V0MUluZFJlc291cmNlKCBUVEFHX0ZPTkQsIHJlc19pbmRleCApOworICAgICAgaWYgKCBSZXNFcnJvcigpICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIG51bV9mYWNlc19pbl9mb25kICA9IGNvdW50X2ZhY2VzKCBmb25kLCBwYXRobmFtZSApOworICAgICAgbnVtX2ZhY2VzX2luX3JlcyAgKz0gbnVtX2ZhY2VzX2luX2ZvbmQ7CisKKyAgICAgIGlmICggMCA8PSBmYWNlX2luZGV4ICYmIGZhY2VfaW5kZXggPCBudW1fZmFjZXNfaW5fZm9uZCAmJiBlcnJvciApCisgICAgICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9GT05EKCBsaWJyYXJ5LCBmb25kLCBmYWNlX2luZGV4LCBhZmFjZSApOworCisgICAgICBmYWNlX2luZGV4IC09IG51bV9mYWNlc19pbl9mb25kOworICAgIH0KKworICAgIENsb3NlUmVzRmlsZSggcmVzX3JlZiApOworICAgIGlmICggIWVycm9yICYmIGFmYWNlICYmICphZmFjZSApCisgICAgICAoKmFmYWNlKS0+bnVtX2ZhY2VzID0gbnVtX2ZhY2VzX2luX3JlczsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtYWMuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X0ZhY2VfRnJvbV9GT05EKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSAgICAgIGZvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICBhZmFjZSApCisgIHsKKyAgICBzaG9ydCAgICAgaGF2ZV9zZm50LCBoYXZlX2x3Zm4gPSAwOworICAgIFJlc0lEICAgICBzZm50X2lkLCBmb25kX2lkOworICAgIE9TVHlwZSAgICBmb25kX3R5cGU7CisgICAgU3RyMjU1ICAgIGZvbmRfbmFtZTsKKyAgICBTdHIyNTUgICAgbHdmbl9maWxlX25hbWU7CisgICAgVUludDggICAgIHBhdGhfbHdmbltQQVRIX01BWF07CisgICAgT1NFcnIgICAgIGVycjsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIC8qIGNoZWNrIG9mIGBsaWJyYXJ5JyBhbmQgYGFmYWNlJyBkZWxheWVkIHRvIGBGVF9OZXdfRmFjZV9Gcm9tX1hYWCcgKi8KKworICAgIEdldFJlc0luZm8oIGZvbmQsICZmb25kX2lkLCAmZm9uZF90eXBlLCBmb25kX25hbWUgKTsKKyAgICBpZiAoIFJlc0Vycm9yKCkgIT0gbm9FcnIgfHwgZm9uZF90eXBlICE9IFRUQUdfRk9ORCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICAgIHBhcnNlX2ZvbmQoICpmb25kLCAmaGF2ZV9zZm50LCAmc2ZudF9pZCwgbHdmbl9maWxlX25hbWUsIGZhY2VfaW5kZXggKTsKKworICAgIGlmICggbHdmbl9maWxlX25hbWVbMF0gKQorICAgIHsKKyAgICAgIFJlc0ZpbGVSZWZOdW0gIHJlczsKKworCisgICAgICByZXMgPSBIb21lUmVzRmlsZSggZm9uZCApOworICAgICAgaWYgKCBub0VyciAhPSBSZXNFcnJvcigpICkKKyAgICAgICAgZ290byBmb3VuZF9ub19sd2ZuX2ZpbGU7CisKKyAgICAgIHsKKyAgICAgICAgVUludDggIHBhdGhfZm9uZFtQQVRIX01BWF07CisgICAgICAgIEZTUmVmICByZWY7CisKKworICAgICAgICBlcnIgPSBGU0dldEZvcmtDQkluZm8oIHJlcywga0ZTSW52YWxpZFZvbHVtZVJlZk51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmcmVmLCBOVUxMICk7CisgICAgICAgIGlmICggbm9FcnIgIT0gZXJyICkKKyAgICAgICAgICBnb3RvIGZvdW5kX25vX2x3Zm5fZmlsZTsKKworICAgICAgICBlcnIgPSBGU1JlZk1ha2VQYXRoKCAmcmVmLCBwYXRoX2ZvbmQsIHNpemVvZiAoIHBhdGhfZm9uZCApICk7CisgICAgICAgIGlmICggbm9FcnIgIT0gZXJyICkKKyAgICAgICAgICBnb3RvIGZvdW5kX25vX2x3Zm5fZmlsZTsKKworICAgICAgICBlcnJvciA9IGxvb2t1cF9sd2ZuX2J5X2ZvbmQoIHBhdGhfZm9uZCwgbHdmbl9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9sd2ZuLCBzaXplb2YgKCBwYXRoX2x3Zm4gKSApOworICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICAgaGF2ZV9sd2ZuID0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGhhdmVfbHdmbiAmJiAoICFoYXZlX3NmbnQgfHwgUFJFRkVSX0xXRk4gKSApCisgICAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fTFdGTiggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2x3Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICBmb3VuZF9ub19sd2ZuX2ZpbGU6CisgICAgaWYgKCBoYXZlX3NmbnQgJiYgZXJyb3IgKQorICAgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX1NGTlQoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIENvbW1vbiBmdW5jdGlvbiB0byBsb2FkIGEgbmV3IEZUX0ZhY2UgZnJvbSBhIHJlc291cmNlIGZpbGUuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCisgIHsKKyAgICBPU1R5cGUgICAgZmlsZV90eXBlOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgLyogTFdGTiBpcyBhICh2ZXJ5KSBzcGVjaWZpYyBmaWxlIGZvcm1hdCwgY2hlY2sgZm9yIGl0IGV4cGxpY2l0bHkgKi8KKyAgICBmaWxlX3R5cGUgPSBnZXRfZmlsZV90eXBlX2Zyb21fcGF0aCggcGF0aG5hbWUgKTsKKyAgICBpZiAoIGZpbGVfdHlwZSA9PSBUVEFHX0xXRk4gKQorICAgICAgcmV0dXJuIEZUX05ld19GYWNlX0Zyb21fTFdGTiggbGlicmFyeSwgcGF0aG5hbWUsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisKKyAgICAvKiBPdGhlcndpc2UgdGhlIGZpbGUgdHlwZSBkb2Vzbid0IG1hdHRlciAodGhlcmUgYXJlIG1vcmUgdGhhbiAgKi8KKyAgICAvKiBgRkZJTCcgYW5kIGB0ZmlsJykuICBKdXN0IHRyeSBvcGVuaW5nIGl0IGFzIGEgZm9udCBzdWl0Y2FzZTsgKi8KKyAgICAvKiBpZiBpdCB3b3JrcywgZmluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9TdWl0Y2FzZSggbGlicmFyeSwgcGF0aG5hbWUsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgaWYgKCBlcnJvciA9PSAwICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGxldCBpdCBmYWxsIHRocm91Z2ggdG8gbm9ybWFsIGxvYWRlciAoLnR0ZiwgLm90ZiwgZXRjLik7ICovCisgICAgLyogd2Ugc2lnbmFsIHRoaXMgYnkgcmV0dXJuaW5nIG5vIGVycm9yIGFuZCBubyBGVF9GYWNlICAgICAgKi8KKyAgICAqYWZhY2UgPSBOVUxMOworICAgIHJldHVybiAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGlzIHRoZSBNYWMtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRlRfTmV3X0ZhY2UuICBJbiAgICAgICAgKi8KKyAgLyogICAgYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIEZUX05ld19GYWNlKCkgZnVuY3Rpb25hbGl0eSwgaXQgYWxzbyAgICAgICovCisgIC8qICAgIGFjY2VwdHMgcGF0aG5hbWVzIHRvIE1hYyBzdWl0Y2FzZSBmaWxlcy4gIEZvciBmdXJ0aGVyICAgICAgICAgICAgICAqLworICAvKiAgICBkb2N1bWVudGF0aW9uIHNlZSB0aGUgb3JpZ2luYWwgRlRfTmV3X0ZhY2UoKSBpbiBmcmVldHlwZS5oLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X0ZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICBGVF9GYWNlKiAgICAgYWZhY2UgKQorICB7CisgICAgRlRfT3Blbl9BcmdzICBhcmdzOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisKKworICAgIC8qIHRlc3QgZm9yIHZhbGlkIGBsaWJyYXJ5JyBhbmQgYGFmYWNlJyBkZWxheWVkIHRvIEZUX09wZW5fRmFjZSgpICovCisgICAgaWYgKCAhcGF0aG5hbWUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAqYWZhY2UgPSBOVUxMOworCisgICAgLyogdHJ5IHJlc291cmNlZm9yayBiYXNlZCBmb250OiBMV0ZOLCBGRklMICovCisgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlKCBsaWJyYXJ5LCAoVUludDggKilwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgaWYgKCBlcnJvciAhPSAwIHx8ICphZmFjZSAhPSBOVUxMICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGxldCBpdCBmYWxsIHRocm91Z2ggdG8gbm9ybWFsIGxvYWRlciAoLnR0ZiwgLm90ZiwgZXRjLikgKi8KKyAgICBhcmdzLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICBhcmdzLnBhdGhuYW1lID0gKGNoYXIqKXBhdGhuYW1lOworICAgIHJldHVybiBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZhcmdzLCBmYWNlX2luZGV4LCBhZmFjZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmIGlzIGlkZW50aWNhbCB0byBGVF9OZXdfRmFjZSBleGNlcHQgaXQgICAgICAgKi8KKyAgLyogICAgYWNjZXB0cyBhbiBGU1JlZiBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBDYXJib24gZGF0YSB0eXBlcyAoRlNSZWYpICAgICAgICAgKi8KKyAgLyogYXJlIG5vdCBjcm9zcy1wbGF0Zm9ybSwgYW5kIHRodXMgbm90IHN1aXRhYmxlIGZvciB0aGUgZnJlZXR5cGUgQVBJLiAgICovCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1JlZiogIHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICAgIGFmYWNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfT3Blbl9BcmdzICBhcmdzOworCisgICAgT1NFcnIgIGVycjsKKyAgICBVSW50OCAgcGF0aG5hbWVbUEFUSF9NQVhdOworCisKKyAgICAvKiBjaGVjayBvZiBgbGlicmFyeScgYW5kIGBhZmFjZScgZGVsYXllZCB0byAqLworICAgIC8qIGBGVF9OZXdfRmFjZV9Gcm9tX1Jlc291cmNlJyAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoICFyZWYgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBlcnIgPSBGU1JlZk1ha2VQYXRoKCByZWYsIHBhdGhuYW1lLCBzaXplb2YgKCBwYXRobmFtZSApICk7CisgICAgaWYgKCBlcnIgKQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKworICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggbGlicmFyeSwgcGF0aG5hbWUsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgaWYgKCBlcnJvciAhPSAwIHx8ICphZmFjZSAhPSBOVUxMICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGZhbGxiYWNrIHRvIGRhdGFmb3JrIGZvbnQgKi8KKyAgICBhcmdzLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICBhcmdzLnBhdGhuYW1lID0gKGNoYXIqKXBhdGhuYW1lOworICAgIHJldHVybiBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZhcmdzLCBmYWNlX2luZGV4LCBhZmFjZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyBpcyBpZGVudGljYWwgdG8gRlRfTmV3X0ZhY2UgZXhjZXB0IGl0ICAgICAgKi8KKyAgLyogICAgYWNjZXB0cyBhbiBGU1NwZWMgaW5zdGVhZCBvZiBhIHBhdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBGU1NwZWMgaXMgZGVwcmVjYXRlZCBpbiBNYWMgT1MgWCAgKi8KKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZTU3BlYyogIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICAgYWZhY2UgKQorICB7CisjaWYgKCBfX0xQNjRfXyApIHx8ICggZGVmaW5lZCggTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgJiYgXAorICAgICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKSApCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisgICAgRlRfVU5VU0VEKCBzcGVjICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisgICAgRlRfVU5VU0VEKCBhZmFjZSApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyNlbHNlCisgICAgRlNSZWYgIHJlZjsKKworCisgICAgLyogY2hlY2sgb2YgYGxpYnJhcnknIGFuZCBgYWZhY2UnIGRlbGF5ZWQgdG8gYEZUX05ld19GYWNlX0Zyb21fRlNSZWYnICovCisKKyAgICBpZiAoICFzcGVjIHx8IEZTcE1ha2VGU1JlZiggc3BlYywgJnJlZiApICE9IG5vRXJyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGVsc2UKKyAgICAgIHJldHVybiBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmKCBsaWJyYXJ5LCAmcmVmLCBmYWNlX2luZGV4LCBhZmFjZSApOworI2VuZGlmCisgIH0KKworI2VuZGlmIC8qIEZUX01BQ0lOVE9TSCAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0bW0uYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG1tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMTJhYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG1tLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0bW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBNdWx0aXBsZSBNYXN0ZXIgZm9udCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfbW0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKCBGVF9GYWNlICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICAqYXNlcnZpY2UgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICAqYXNlcnZpY2UgPSBOVUxMOworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBmYWNlICkgKQorICAgIHsKKyAgICAgIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSV9NQVNURVJTICk7CisKKyAgICAgIGlmICggKmFzZXJ2aWNlICkKKyAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW0uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X011bHRpX01hc3RlciggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsdGlfTWFzdGVyICAqYW1hc3RlciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgICAgZXJyb3I7CisgICAgRlRfU2VydmljZV9NdWx0aU1hc3RlcnMgIHNlcnZpY2U7CisKKworICAgIC8qIGNoZWNrIG9mIGBmYWNlJyBkZWxheWVkIHRvIGBmdF9mYWNlX2dldF9tbV9zZXJ2aWNlJyAqLworCisgICAgaWYgKCAhYW1hc3RlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGVycm9yID0gZnRfZmFjZV9nZXRfbW1fc2VydmljZSggZmFjZSwgJnNlcnZpY2UgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGlmICggc2VydmljZS0+Z2V0X21tICkKKyAgICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfbW0oIGZhY2UsIGFtYXN0ZXIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfTU1fVmFyKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKmFtYXN0ZXIgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICBzZXJ2aWNlOworCisKKyAgICAvKiBjaGVjayBvZiBgZmFjZScgZGVsYXllZCB0byBgZnRfZmFjZV9nZXRfbW1fc2VydmljZScgKi8KKworICAgIGlmICggIWFtYXN0ZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBpZiAoIHNlcnZpY2UtPmdldF9tbV92YXIgKQorICAgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9tbV92YXIoIGZhY2UsIGFtYXN0ZXIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBjb29yZHMgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICBzZXJ2aWNlOworCisKKyAgICAvKiBjaGVjayBvZiBgZmFjZScgZGVsYXllZCB0byBgZnRfZmFjZV9nZXRfbW1fc2VydmljZScgKi8KKworICAgIGlmICggIWNvb3JkcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGVycm9yID0gZnRfZmFjZV9nZXRfbW1fc2VydmljZSggZmFjZSwgJnNlcnZpY2UgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGlmICggc2VydmljZS0+c2V0X21tX2Rlc2lnbiApCisgICAgICAgIGVycm9yID0gc2VydmljZS0+c2V0X21tX2Rlc2lnbiggZmFjZSwgbnVtX2Nvb3JkcywgY29vcmRzICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW0uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICBlcnJvcjsKKyAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVycyAgc2VydmljZTsKKworCisgICAgLyogY2hlY2sgb2YgYGZhY2UnIGRlbGF5ZWQgdG8gYGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UnICovCisKKyAgICBpZiAoICFjb29yZHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBpZiAoIHNlcnZpY2UtPnNldF92YXJfZGVzaWduICkKKyAgICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5zZXRfdmFyX2Rlc2lnbiggZmFjZSwgbnVtX2Nvb3JkcywgY29vcmRzICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW0uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICBlcnJvcjsKKyAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVycyAgc2VydmljZTsKKworCisgICAgLyogY2hlY2sgb2YgYGZhY2UnIGRlbGF5ZWQgdG8gYGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UnICovCisKKyAgICBpZiAoICFjb29yZHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBpZiAoIHNlcnZpY2UtPnNldF9tbV9ibGVuZCApCisgICAgICAgICBlcnJvciA9IHNlcnZpY2UtPnNldF9tbV9ibGVuZCggZmFjZSwgbnVtX2Nvb3JkcywgY29vcmRzICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW0uaCAqLworCisgIC8qIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgZnVuY3Rpb24uICBJdCBleGlzdHMgZm9yICovCisgIC8qIG9ydGhvZ29uYWxpdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICBzZXJ2aWNlOworCisKKyAgICAvKiBjaGVjayBvZiBgZmFjZScgZGVsYXllZCB0byBgZnRfZmFjZV9nZXRfbW1fc2VydmljZScgKi8KKworICAgIGlmICggIWNvb3JkcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGVycm9yID0gZnRfZmFjZV9nZXRfbW1fc2VydmljZSggZmFjZSwgJnNlcnZpY2UgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGlmICggc2VydmljZS0+c2V0X21tX2JsZW5kICkKKyAgICAgICAgIGVycm9yID0gc2VydmljZS0+c2V0X21tX2JsZW5kKCBmYWNlLCBudW1fY29vcmRzLCBjb29yZHMgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG9ianMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG9ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzMzMzJjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0b2Jqcy5jCkBAIC0wLDAgKzEsNDg5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwcml2YXRlIGJhc2UgY2xhc3NlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0xJU1RfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1JGT1JLX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0ggICAgLyogZm9yIFNGTlRfTG9hZF9UYWJsZV9GdW5jICovCisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAorCisjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9TRk5UX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9LRVJOSU5HX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0gKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCisjaW5jbHVkZSAiZnRiYXNlLmgiCisjZW5kaWYKKworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworI2luY2x1ZGUgRlRfQklUTUFQX0gKKworI2lmIGRlZmluZWQoIF9NU0NfVkVSICkgICAgICAvKiBWaXN1YWwgQysrIChhbmQgSW50ZWwgQysrKSAgICovCisgIC8qIFdlIGRpc2FibGUgdGhlIHdhcm5pbmcgYGNvbnZlcnNpb24gZnJvbSBYWFggdG8gWVlZLCAgICAgKi8KKyAgLyogcG9zc2libGUgbG9zcyBvZiBkYXRhJyBpbiBvcmRlciB0byBjb21waWxlIGNsZWFubHkgd2l0aCAqLworICAvKiB0aGUgbWF4aW11bSBsZXZlbCBvZiB3YXJuaW5nczogYG1kNS5jJyBpcyBub24tRnJlZVR5cGUgICovCisgIC8qIGNvZGUsIGFuZCBpdCBnZXRzIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50IGJ1aWxkcyBvbmx5LiAgKi8KKyNwcmFnbWEgd2FybmluZyggcHVzaCApCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MjQ0ICkKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworCisgIC8qIGl0J3MgZWFzaWVzdCB0byBpbmNsdWRlIGBtZDUuYycgZGlyZWN0bHkgKi8KKyNpbmNsdWRlICJtZDUuYyIKKworI2lmIGRlZmluZWQoIF9NU0NfVkVSICkKKyNwcmFnbWEgd2FybmluZyggcG9wICkKKyNlbmRpZgorCisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisjZGVmaW5lIEdSSURfRklUX01FVFJJQ1MKKworCisgIEZUX0JBU0VfREVGKCBGVF9Qb2ludGVyICkKKyAgZnRfc2VydmljZV9saXN0X2xvb2t1cCggRlRfU2VydmljZURlc2MgIHNlcnZpY2VfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICBzZXJ2aWNlX2lkICkKKyAgeworICAgIEZUX1BvaW50ZXIgICAgICByZXN1bHQgPSBOVUxMOworICAgIEZUX1NlcnZpY2VEZXNjICBkZXNjICAgPSBzZXJ2aWNlX2Rlc2NyaXB0b3JzOworCisKKyAgICBpZiAoIGRlc2MgJiYgc2VydmljZV9pZCApCisgICAgeworICAgICAgZm9yICggOyBkZXNjLT5zZXJ2X2lkICE9IE5VTEw7IGRlc2MrKyApCisgICAgICB7CisgICAgICAgIGlmICggZnRfc3RyY21wKCBkZXNjLT5zZXJ2X2lkLCBzZXJ2aWNlX2lkICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSAoRlRfUG9pbnRlcilkZXNjLT5zZXJ2X2RhdGE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X3ZhbGlkYXRvcl9pbml0KCBGVF9WYWxpZGF0b3IgICAgICAgIHZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQnl0ZSogICAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQnl0ZSogICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRpb25MZXZlbCAgbGV2ZWwgKQorICB7CisgICAgdmFsaWQtPmJhc2UgID0gYmFzZTsKKyAgICB2YWxpZC0+bGltaXQgPSBsaW1pdDsKKyAgICB2YWxpZC0+bGV2ZWwgPSBsZXZlbDsKKyAgICB2YWxpZC0+ZXJyb3IgPSBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9JbnQgKQorICBmdF92YWxpZGF0b3JfcnVuKCBGVF9WYWxpZGF0b3IgIHZhbGlkICkKKyAgeworICAgIC8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrISAgTm9uZSBzaG91bGQgY2FsbCBpdC4gKi8KKyAgICBGVF9VTlVTRUQoIHZhbGlkICk7CisKKyAgICByZXR1cm4gLTE7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgZnRfdmFsaWRhdG9yX2Vycm9yKCBGVF9WYWxpZGF0b3IgIHZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAgICAgZXJyb3IgKQorICB7CisgICAgLyogc2luY2UgdGhlIGNhc3QgYmVsb3cgYWxzbyBkaXNhYmxlcyB0aGUgY29tcGlsZXIncyAqLworICAgIC8qIHR5cGUgY2hlY2ssIHdlIGludHJvZHVjZSBhIGR1bW15IHZhcmlhYmxlLCB3aGljaCAgKi8KKyAgICAvKiB3aWxsIGJlIG9wdGltaXplZCBhd2F5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdm9sYXRpbGUgZnRfam1wX2J1ZioganVtcF9idWZmZXIgPSAmdmFsaWQtPmp1bXBfYnVmZmVyOworCisKKyAgICB2YWxpZC0+ZXJyb3IgPSBlcnJvcjsKKworICAgIC8qIHRocm93IGF3YXkgdm9sYXRpbGVuZXNzOyB1c2UgYGp1bXBfYnVmZmVyJyBvciB0aGUgICovCisgICAgLyogY29tcGlsZXIgbWF5IHdhcm4gYWJvdXQgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICAgKi8KKyAgICBmdF9sb25nam1wKCAqKGZ0X2ptcF9idWYqKSBqdW1wX2J1ZmZlciwgMSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBUIFIgRSBBIE0gICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBjcmVhdGUgYSBuZXcgaW5wdXQgc3RyZWFtIGZyb20gYW4gRlRfT3Blbl9BcmdzIHN0cnVjdHVyZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fTmV3KCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBjb25zdCBGVF9PcGVuX0FyZ3MqICBhcmdzLAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICphc3RyZWFtICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBOVUxMOworCisKKyAgICAqYXN0cmVhbSA9IE5VTEw7CisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhYXJncyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIGlmICggRlRfTkVXKCBzdHJlYW0gKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBzdHJlYW0tPm1lbW9yeSA9IG1lbW9yeTsKKworICAgIGlmICggYXJncy0+ZmxhZ3MgJiBGVF9PUEVOX01FTU9SWSApCisgICAgeworICAgICAgLyogY3JlYXRlIGEgbWVtb3J5LWJhc2VkIHN0cmVhbSAqLworICAgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgRlRfQnl0ZSopYXJncy0+bWVtb3J5X2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKWFyZ3MtPm1lbW9yeV9zaXplICk7CisgICAgfQorCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVAorCisgICAgZWxzZSBpZiAoIGFyZ3MtPmZsYWdzICYgRlRfT1BFTl9QQVRITkFNRSApCisgICAgeworICAgICAgLyogY3JlYXRlIGEgbm9ybWFsIHN5c3RlbSBzdHJlYW0gKi8KKyAgICAgIGVycm9yID0gRlRfU3RyZWFtX09wZW4oIHN0cmVhbSwgYXJncy0+cGF0aG5hbWUgKTsKKyAgICAgIHN0cmVhbS0+cGF0aG5hbWUucG9pbnRlciA9IGFyZ3MtPnBhdGhuYW1lOworICAgIH0KKyAgICBlbHNlIGlmICggKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fU1RSRUFNICkgJiYgYXJncy0+c3RyZWFtICkKKyAgICB7CisgICAgICAvKiB1c2UgYW4gZXhpc3RpbmcsIHVzZXItcHJvdmlkZWQgc3RyZWFtICovCisKKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgd2UgZG8gbm90IG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc3RyZWFtIG9iamVjdCAqLworICAgICAgLyogc2luY2UgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xvc2luZyBpdCBoaW1zZWxmICAgICAgICovCisgICAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKyAgICAgIHN0cmVhbSA9IGFyZ3MtPnN0cmVhbTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKyAgICBlbHNlCisgICAgICBzdHJlYW0tPm1lbW9yeSA9IG1lbW9yeTsgIC8qIGp1c3QgdG8gYmUgY2VydGFpbiAqLworCisgICAgKmFzdHJlYW0gPSBzdHJlYW07CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfU3RyZWFtX0ZyZWUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBleHRlcm5hbCApCisgIHsKKyAgICBpZiAoIHN0cmVhbSApCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKworCisgICAgICBGVF9TdHJlYW1fQ2xvc2UoIHN0cmVhbSApOworCisgICAgICBpZiAoICFleHRlcm5hbCApCisgICAgICAgIEZUX0ZSRUUoIHN0cmVhbSApOworICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb2JqcworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgIEZBQ0UsIFNJWkUgJiBHTFlQSCBTTE9UIE9CSkVDVFMgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2dseXBoc2xvdF9pbml0KCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgRlRfRHJpdmVyICAgICAgICAgZHJpdmVyICAgPSBzbG90LT5mYWNlLT5kcml2ZXI7CisgICAgRlRfRHJpdmVyX0NsYXNzICAgY2xhenogICAgPSBkcml2ZXItPmNsYXp6OworICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSAgID0gZHJpdmVyLT5yb290Lm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgICAgICBlcnJvciAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9TbG90X0ludGVybmFsICBpbnRlcm5hbCA9IE5VTEw7CisKKworICAgIHNsb3QtPmxpYnJhcnkgPSBkcml2ZXItPnJvb3QubGlicmFyeTsKKworICAgIGlmICggRlRfTkVXKCBpbnRlcm5hbCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHNsb3QtPmludGVybmFsID0gaW50ZXJuYWw7CisKKyAgICBpZiAoIEZUX0RSSVZFUl9VU0VTX09VVExJTkVTKCBkcml2ZXIgKSApCisgICAgICBlcnJvciA9IEZUX0dseXBoTG9hZGVyX05ldyggbWVtb3J5LCAmaW50ZXJuYWwtPmxvYWRlciApOworCisgICAgaWYgKCAhZXJyb3IgJiYgY2xhenotPmluaXRfc2xvdCApCisgICAgICBlcnJvciA9IGNsYXp6LT5pbml0X3Nsb3QoIHNsb3QgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXAoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBpZiAoIHNsb3QtPmludGVybmFsICYmICggc2xvdC0+aW50ZXJuYWwtPmZsYWdzICYgRlRfR0xZUEhfT1dOX0JJVE1BUCApICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBzbG90LT5mYWNlICk7CisKKworICAgICAgRlRfRlJFRSggc2xvdC0+Yml0bWFwLmJ1ZmZlciApOworICAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzICY9IH5GVF9HTFlQSF9PV05fQklUTUFQOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogYXNzdW1lIHRoYXQgdGhlIGJpdG1hcCBidWZmZXIgd2FzIHN0b2xlbiBvciBub3QgKi8KKyAgICAgIC8qIGFsbG9jYXRlZCBmcm9tIHRoZSBoZWFwICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBzbG90LT5iaXRtYXAuYnVmZmVyID0gTlVMTDsKKyAgICB9CisgIH0KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAoIEZUX0dseXBoU2xvdCAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgYnVmZmVyICkKKyAgeworICAgIGZ0X2dseXBoc2xvdF9mcmVlX2JpdG1hcCggc2xvdCApOworCisgICAgc2xvdC0+Yml0bWFwLmJ1ZmZlciA9IGJ1ZmZlcjsKKworICAgIEZUX0FTU0VSVCggKHNsb3QtPmludGVybmFsLT5mbGFncyAmIEZUX0dMWVBIX09XTl9CSVRNQVApID09IDAgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIHNpemUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggc2xvdC0+ZmFjZSApOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgIGlmICggc2xvdC0+aW50ZXJuYWwtPmZsYWdzICYgRlRfR0xZUEhfT1dOX0JJVE1BUCApCisgICAgICBGVF9GUkVFKCBzbG90LT5iaXRtYXAuYnVmZmVyICk7CisgICAgZWxzZQorICAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzIHw9IEZUX0dMWVBIX09XTl9CSVRNQVA7CisKKyAgICAodm9pZClGVF9BTExPQyggc2xvdC0+Yml0bWFwLmJ1ZmZlciwgc2l6ZSApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfZ2x5cGhzbG90X2NsZWFyKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgLyogZnJlZSBiaXRtYXAgaWYgbmVlZGVkICovCisgICAgZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwKCBzbG90ICk7CisKKyAgICAvKiBjbGVhciBhbGwgcHVibGljIGZpZWxkcyBpbiB0aGUgZ2x5cGggc2xvdCAqLworICAgIEZUX1pFUk8oICZzbG90LT5tZXRyaWNzICk7CisgICAgRlRfWkVSTyggJnNsb3QtPm91dGxpbmUgKTsKKworICAgIHNsb3QtPmJpdG1hcC53aWR0aCAgICAgID0gMDsKKyAgICBzbG90LT5iaXRtYXAucm93cyAgICAgICA9IDA7CisgICAgc2xvdC0+Yml0bWFwLnBpdGNoICAgICAgPSAwOworICAgIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlID0gMDsKKyAgICAvKiBgc2xvdC0+Yml0bWFwLmJ1ZmZlcicgaGFzIGJlZW4gaGFuZGxlZCBieSBmdF9nbHlwaHNsb3RfZnJlZV9iaXRtYXAgKi8KKworICAgIHNsb3QtPmJpdG1hcF9sZWZ0ICAgPSAwOworICAgIHNsb3QtPmJpdG1hcF90b3AgICAgPSAwOworICAgIHNsb3QtPm51bV9zdWJnbHlwaHMgPSAwOworICAgIHNsb3QtPnN1YmdseXBocyAgICAgPSBOVUxMOworICAgIHNsb3QtPmNvbnRyb2xfZGF0YSAgPSBOVUxMOworICAgIHNsb3QtPmNvbnRyb2xfbGVuICAgPSAwOworICAgIHNsb3QtPm90aGVyICAgICAgICAgPSBOVUxMOworICAgIHNsb3QtPmZvcm1hdCAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfTk9ORTsKKworICAgIHNsb3QtPmxpbmVhckhvcmlBZHZhbmNlID0gMDsKKyAgICBzbG90LT5saW5lYXJWZXJ0QWR2YW5jZSA9IDA7CisgICAgc2xvdC0+bHNiX2RlbHRhICAgICAgICAgPSAwOworICAgIHNsb3QtPnJzYl9kZWx0YSAgICAgICAgID0gMDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfZ2x5cGhzbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBGVF9Ecml2ZXIgICAgICAgIGRyaXZlciA9IHNsb3QtPmZhY2UtPmRyaXZlcjsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIGNsYXp6ICA9IGRyaXZlci0+Y2xheno7CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgPSBkcml2ZXItPnJvb3QubWVtb3J5OworCisKKyAgICBpZiAoIGNsYXp6LT5kb25lX3Nsb3QgKQorICAgICAgY2xhenotPmRvbmVfc2xvdCggc2xvdCApOworCisgICAgLyogZnJlZSBiaXRtYXAgYnVmZmVyIGlmIG5lZWRlZCAqLworICAgIGZ0X2dseXBoc2xvdF9mcmVlX2JpdG1hcCggc2xvdCApOworCisgICAgLyogc2xvdC0+aW50ZXJuYWwgbWlnaHQgYmUgTlVMTCBpbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgKi8KKyAgICBpZiAoIHNsb3QtPmludGVybmFsICkKKyAgICB7CisgICAgICAvKiBmcmVlIGdseXBoIGxvYWRlciAqLworICAgICAgaWYgKCBGVF9EUklWRVJfVVNFU19PVVRMSU5FUyggZHJpdmVyICkgKQorICAgICAgeworICAgICAgICBGVF9HbHlwaExvYWRlcl9Eb25lKCBzbG90LT5pbnRlcm5hbC0+bG9hZGVyICk7CisgICAgICAgIHNsb3QtPmludGVybmFsLT5sb2FkZXIgPSBOVUxMOworICAgICAgfQorCisgICAgICBGVF9GUkVFKCBzbG90LT5pbnRlcm5hbCApOworICAgIH0KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19HbHlwaFNsb3QoIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgKmFzbG90ICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisgICAgRlRfRHJpdmVyICAgICAgICBkcml2ZXI7CisgICAgRlRfRHJpdmVyX0NsYXNzICBjbGF6ejsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeTsKKyAgICBGVF9HbHlwaFNsb3QgICAgIHNsb3QgPSBOVUxMOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhZmFjZS0+ZHJpdmVyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZHJpdmVyID0gZmFjZS0+ZHJpdmVyOworICAgIGNsYXp6ICA9IGRyaXZlci0+Y2xheno7CisgICAgbWVtb3J5ID0gZHJpdmVyLT5yb290Lm1lbW9yeTsKKworICAgIEZUX1RSQUNFNCgoICJGVF9OZXdfR2x5cGhTbG90OiBDcmVhdGluZyBuZXcgc2xvdCBvYmplY3RcbiIgKSk7CisgICAgaWYgKCAhRlRfQUxMT0MoIHNsb3QsIGNsYXp6LT5zbG90X29iamVjdF9zaXplICkgKQorICAgIHsKKyAgICAgIHNsb3QtPmZhY2UgPSBmYWNlOworCisgICAgICBlcnJvciA9IGZ0X2dseXBoc2xvdF9pbml0KCBzbG90ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgZnRfZ2x5cGhzbG90X2RvbmUoIHNsb3QgKTsKKyAgICAgICAgRlRfRlJFRSggc2xvdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIHNsb3QtPm5leHQgID0gZmFjZS0+Z2x5cGg7CisgICAgICBmYWNlLT5nbHlwaCA9IHNsb3Q7CisKKyAgICAgIGlmICggYXNsb3QgKQorICAgICAgICAqYXNsb3QgPSBzbG90OworICAgIH0KKyAgICBlbHNlIGlmICggYXNsb3QgKQorICAgICAgKmFzbG90ID0gTlVMTDsKKworCisgIEV4aXQ6CisgICAgRlRfVFJBQ0U0KCggIkZUX05ld19HbHlwaFNsb3Q6IFJldHVybiAlZFxuIiwgZXJyb3IgKSk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgeworICAgIGlmICggc2xvdCApCisgICAgeworICAgICAgRlRfRHJpdmVyICAgICBkcml2ZXIgPSBzbG90LT5mYWNlLT5kcml2ZXI7CisgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGRyaXZlci0+cm9vdC5tZW1vcnk7CisgICAgICBGVF9HbHlwaFNsb3QgIHByZXY7CisgICAgICBGVF9HbHlwaFNsb3QgIGN1cjsKKworCisgICAgICAvKiBSZW1vdmUgc2xvdCBmcm9tIGl0cyBwYXJlbnQgZmFjZSdzIGxpc3QgKi8KKyAgICAgIHByZXYgPSBOVUxMOworICAgICAgY3VyICA9IHNsb3QtPmZhY2UtPmdseXBoOworCisgICAgICB3aGlsZSAoIGN1ciApCisgICAgICB7CisgICAgICAgIGlmICggY3VyID09IHNsb3QgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCAhcHJldiApCisgICAgICAgICAgICBzbG90LT5mYWNlLT5nbHlwaCA9IGN1ci0+bmV4dDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmV2LT5uZXh0ID0gY3VyLT5uZXh0OworCisgICAgICAgICAgLyogZmluYWxpemUgY2xpZW50LXNwZWNpZmljIGRhdGEgKi8KKyAgICAgICAgICBpZiAoIHNsb3QtPmdlbmVyaWMuZmluYWxpemVyICkKKyAgICAgICAgICAgIHNsb3QtPmdlbmVyaWMuZmluYWxpemVyKCBzbG90ICk7CisKKyAgICAgICAgICBmdF9nbHlwaHNsb3RfZG9uZSggc2xvdCApOworICAgICAgICAgIEZUX0ZSRUUoIHNsb3QgKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwcmV2ID0gY3VyOworICAgICAgICBjdXIgID0gY3VyLT5uZXh0OworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1NldF9UcmFuc2Zvcm0oIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgZGVsdGEgKQorICB7CisgICAgRlRfRmFjZV9JbnRlcm5hbCAgaW50ZXJuYWw7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgaW50ZXJuYWwgPSBmYWNlLT5pbnRlcm5hbDsKKworICAgIGludGVybmFsLT50cmFuc2Zvcm1fZmxhZ3MgPSAwOworCisgICAgaWYgKCAhbWF0cml4ICkKKyAgICB7CisgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX21hdHJpeC54eCA9IDB4MTAwMDBMOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueHkgPSAwOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueXggPSAwOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueXkgPSAweDEwMDAwTDsKKworICAgICAgbWF0cml4ID0gJmludGVybmFsLT50cmFuc2Zvcm1fbWF0cml4OworICAgIH0KKyAgICBlbHNlCisgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX21hdHJpeCA9ICptYXRyaXg7CisKKyAgICAvKiBzZXQgdHJhbnNmb3JtX2ZsYWdzIGJpdCBmbGFnIDAgaWYgYG1hdHJpeCcgaXNuJ3QgdGhlIGlkZW50aXR5ICovCisgICAgaWYgKCAoIG1hdHJpeC0+eHkgfCBtYXRyaXgtPnl4ICkgfHwKKyAgICAgICAgIG1hdHJpeC0+eHggIT0gMHgxMDAwMEwgICAgICB8fAorICAgICAgICAgbWF0cml4LT55eSAhPSAweDEwMDAwTCAgICAgICkKKyAgICAgIGludGVybmFsLT50cmFuc2Zvcm1fZmxhZ3MgfD0gMTsKKworICAgIGlmICggIWRlbHRhICkKKyAgICB7CisgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX2RlbHRhLnggPSAwOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9kZWx0YS55ID0gMDsKKworICAgICAgZGVsdGEgPSAmaW50ZXJuYWwtPnRyYW5zZm9ybV9kZWx0YTsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9kZWx0YSA9ICpkZWx0YTsKKworICAgIC8qIHNldCB0cmFuc2Zvcm1fZmxhZ3MgYml0IGZsYWcgMSBpZiBgZGVsdGEnIGlzbid0IHRoZSBudWxsIHZlY3RvciAqLworICAgIGlmICggZGVsdGEtPnggfCBkZWx0YS0+eSApCisgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX2ZsYWdzIHw9IDI7CisgIH0KKworCisgIHN0YXRpYyBGVF9SZW5kZXJlcgorICBmdF9sb29rdXBfZ2x5cGhfcmVuZGVyZXIoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisKKyNpZmRlZiBHUklEX0ZJVF9NRVRSSUNTCisgIHN0YXRpYyB2b2lkCisgIGZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzKCBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIHZlcnRpY2FsICkKKyAgeworICAgIEZUX0dseXBoX01ldHJpY3MqICBtZXRyaWNzID0gJnNsb3QtPm1ldHJpY3M7CisgICAgRlRfUG9zICAgICAgICAgICAgIHJpZ2h0LCBib3R0b207CisKKworICAgIGlmICggdmVydGljYWwgKQorICAgIHsKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+aG9yaUJlYXJpbmdYICk7CisgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBGVF9QSVhfQ0VJTCAoIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSApOworCisgICAgICByaWdodCAgPSBGVF9QSVhfQ0VJTCggbWV0cmljcy0+dmVydEJlYXJpbmdYICsgbWV0cmljcy0+d2lkdGggKTsKKyAgICAgIGJvdHRvbSA9IEZUX1BJWF9DRUlMKCBtZXRyaWNzLT52ZXJ0QmVhcmluZ1kgKyBtZXRyaWNzLT5oZWlnaHQgKTsKKworICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdYID0gRlRfUElYX0ZMT09SKCBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggKTsKKyAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+dmVydEJlYXJpbmdZICk7CisKKyAgICAgIG1ldHJpY3MtPndpZHRoICA9IHJpZ2h0IC0gbWV0cmljcy0+dmVydEJlYXJpbmdYOworICAgICAgbWV0cmljcy0+aGVpZ2h0ID0gYm90dG9tIC0gbWV0cmljcy0+dmVydEJlYXJpbmdZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdYID0gRlRfUElYX0ZMT09SKCBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggKTsKKyAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+dmVydEJlYXJpbmdZICk7CisKKyAgICAgIHJpZ2h0ICA9IEZUX1BJWF9DRUlMICggbWV0cmljcy0+aG9yaUJlYXJpbmdYICsgbWV0cmljcy0+d2lkdGggKTsKKyAgICAgIGJvdHRvbSA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+aG9yaUJlYXJpbmdZIC0gbWV0cmljcy0+aGVpZ2h0ICk7CisKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+aG9yaUJlYXJpbmdYICk7CisgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBGVF9QSVhfQ0VJTCAoIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSApOworCisgICAgICBtZXRyaWNzLT53aWR0aCAgPSByaWdodCAtIG1ldHJpY3MtPmhvcmlCZWFyaW5nWDsKKyAgICAgIG1ldHJpY3MtPmhlaWdodCA9IG1ldHJpY3MtPmhvcmlCZWFyaW5nWSAtIGJvdHRvbTsKKyAgICB9CisKKyAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IEZUX1BJWF9ST1VORCggbWV0cmljcy0+aG9yaUFkdmFuY2UgKTsKKyAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSA9IEZUX1BJWF9ST1VORCggbWV0cmljcy0+dmVydEFkdmFuY2UgKTsKKyAgfQorI2VuZGlmIC8qIEdSSURfRklUX01FVFJJQ1MgKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTG9hZF9HbHlwaCggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50MzIgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBGVF9Ecml2ZXIgICAgIGRyaXZlcjsKKyAgICBGVF9HbHlwaFNsb3QgIHNsb3Q7CisgICAgRlRfTGlicmFyeSAgICBsaWJyYXJ5OworICAgIEZUX0Jvb2wgICAgICAgYXV0b2hpbnQgPSBGQUxTRTsKKyAgICBGVF9Nb2R1bGUgICAgIGhpbnRlcjsKKyAgICBUVF9GYWNlICAgICAgIHR0ZmFjZSA9IChUVF9GYWNlKWZhY2U7CisKKworICAgIGlmICggIWZhY2UgfHwgIWZhY2UtPnNpemUgfHwgIWZhY2UtPmdseXBoICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgLyogVGhlIHZhbGlkaXR5IHRlc3QgZm9yIGBnbHlwaF9pbmRleCcgaXMgcGVyZm9ybWVkIGJ5IHRoZSAqLworICAgIC8qIGZvbnQgZHJpdmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHNsb3QgPSBmYWNlLT5nbHlwaDsKKyAgICBmdF9nbHlwaHNsb3RfY2xlYXIoIHNsb3QgKTsKKworICAgIGRyaXZlciAgPSBmYWNlLT5kcml2ZXI7CisgICAgbGlicmFyeSA9IGRyaXZlci0+cm9vdC5saWJyYXJ5OworICAgIGhpbnRlciAgPSBsaWJyYXJ5LT5hdXRvX2hpbnRlcjsKKworICAgIC8qIHJlc29sdmUgbG9hZCBmbGFncyBkZXBlbmRlbmNpZXMgKi8KKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fUkVDVVJTRSApCisgICAgICBsb2FkX2ZsYWdzIHw9IEZUX0xPQURfTk9fU0NBTEUgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STTsKKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKQorICAgIHsKKyAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19ISU5USU5HIHwKKyAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9OT19CSVRNQVA7CisKKyAgICAgIGxvYWRfZmxhZ3MgJj0gfkZUX0xPQURfUkVOREVSOworICAgIH0KKworICAgIC8qCisgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBhdXRvLWhpbnQgb3Igbm90LgorICAgICAqIFRoZSBnZW5lcmFsIHJ1bGVzIGFyZToKKyAgICAgKgorICAgICAqIC0gRG8gb25seSBhdXRvLWhpbnRpbmcgaWYgd2UgaGF2ZSBhIGhpbnRlciBtb2R1bGUsIGEgc2NhbGFibGUgZm9udAorICAgICAqICAgZm9ybWF0IGRlYWxpbmcgd2l0aCBvdXRsaW5lcywgYW5kIG5vIHRyYW5zZm9ybXMgZXhjZXB0IHNpbXBsZQorICAgICAqICAgc2xhbnRzIGFuZC9vciByb3RhdGlvbnMgYnkgaW50ZWdlciBtdWx0aXBsZXMgb2YgOTAgZGVncmVlcy4KKyAgICAgKgorICAgICAqIC0gVGhlbiwgYXV0by1oaW50IGlmIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgaXMgc2V0IG9yIGlmIHdlIGRvbid0CisgICAgICogICBoYXZlIGEgbmF0aXZlIGZvbnQgaGludGVyLgorICAgICAqCisgICAgICogLSBPdGhlcndpc2UsIGF1dG8taGludCBmb3IgTElHSFQgaGludGluZyBtb2RlIG9yIGlmIHRoZXJlIGlzbid0CisgICAgICogICBhbnkgaGludGluZyBieXRlY29kZSBpbiB0aGUgVHJ1ZVR5cGUvT3BlblR5cGUgZm9udC4KKyAgICAgKgorICAgICAqIC0gRXhjZXB0aW9uOiBUaGUgZm9udCBpcyBgdHJpY2t5JyBhbmQgcmVxdWlyZXMgdGhlIG5hdGl2ZSBoaW50ZXIgdG8KKyAgICAgKiAgIGxvYWQgcHJvcGVybHkuCisgICAgICovCisKKyAgICBpZiAoIGhpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fSElOVElORyApICAgICAgICAgICAgICYmCisgICAgICAgICAhKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19BVVRPSElOVCApICAgICAgICAgICAgJiYKKyAgICAgICAgIEZUX0RSSVZFUl9JU19TQ0FMQUJMRSggZHJpdmVyICkgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgRlRfRFJJVkVSX1VTRVNfT1VUTElORVMoIGRyaXZlciApICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhRlRfSVNfVFJJQ0tZKCBmYWNlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNICkgICAgfHwKKyAgICAgICAgICAgKCBmYWNlLT5pbnRlcm5hbC0+dHJhbnNmb3JtX21hdHJpeC55eCA9PSAwICYmCisgICAgICAgICAgICAgZmFjZS0+aW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueHggIT0gMCApIHx8CisgICAgICAgICAgICggZmFjZS0+aW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueHggPT0gMCAmJgorICAgICAgICAgICAgIGZhY2UtPmludGVybmFsLT50cmFuc2Zvcm1fbWF0cml4Lnl4ICE9IDAgKSApICkKKyAgICB7CisgICAgICBpZiAoICggbG9hZF9mbGFncyAmIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgKSB8fAorICAgICAgICAgICAhRlRfRFJJVkVSX0hBU19ISU5URVIoIGRyaXZlciApICAgICAgICAgKQorICAgICAgICBhdXRvaGludCA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBtb2RlID0gRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApOworCisKKyAgICAgICAgLyogdGhlIGNoZWNrIGZvciBgbnVtX2xvY2F0aW9ucycgYXNzdXJlcyB0aGF0IHdlIGFjdHVhbGx5ICAgICovCisgICAgICAgIC8qIHRlc3QgZm9yIGluc3RydWN0aW9ucyBpbiBhIFRURiBhbmQgbm90IGluIGEgQ0ZGLWJhc2VkIE9URiAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogc2luY2UgYG1heFNpemVPZkluc3RydWN0aW9ucycgbWlnaHQgYmUgdW5yZWxpYWJsZSwgd2UgICAgICovCisgICAgICAgIC8qIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBgZnBnbScgYW5kIGBwcmVwJyB0YWJsZXMsIHRvbyAtLSAgICAqLworICAgICAgICAvKiB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXJlIGRvbid0IGV4aXN0IHJlYWwgVFRGcyB3aGVyZSAgKi8KKyAgICAgICAgLyogYm90aCBgZnBnbScgYW5kIGBwcmVwJyB0YWJsZXMgYXJlIG1pc3NpbmcgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICBmYWNlLT5pbnRlcm5hbC0+aWdub3JlX3VucGF0ZW50ZWRfaGludGVyICAgICAgICAgICB8fAorICAgICAgICAgICAgICggRlRfSVNfU0ZOVCggZmFjZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgdHRmYWNlLT5udW1fbG9jYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgdHRmYWNlLT5tYXhfcHJvZmlsZS5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgPT0gMCAmJgorICAgICAgICAgICAgICAgdHRmYWNlLT5mb250X3Byb2dyYW1fc2l6ZSA9PSAwICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgdHRmYWNlLT5jdnRfcHJvZ3JhbV9zaXplID09IDAgICAgICAgICAgICAgICAgICApICkKKyAgICAgICAgICBhdXRvaGludCA9IFRSVUU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBhdXRvaGludCApCisgICAgeworICAgICAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2UgIGhpbnRpbmc7CisKKworICAgICAgLyogdHJ5IHRvIGxvYWQgZW1iZWRkZWQgYml0bWFwcyBmaXJzdCBpZiBhdmFpbGFibGUgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogWFhYOiBUaGlzIGlzIHJlYWxseSBhIHRlbXBvcmFyeSBoYWNrIHRoYXQgc2hvdWxkIGRpc2FwcGVhciAqLworICAgICAgLyogICAgICBwcm9tcHRseSB3aXRoIEZyZWVUeXBlIDIuMSEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKSAgICAgICAgICAgICAmJgorICAgICAgICAgICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fQklUTUFQICkgPT0gMCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gZHJpdmVyLT5jbGF6ei0+bG9hZF9nbHlwaCggc2xvdCwgZmFjZS0+c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzIHwgRlRfTE9BRF9TQklUU19PTkxZICk7CisKKyAgICAgICAgaWYgKCAhZXJyb3IgJiYgc2xvdC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgKQorICAgICAgICAgIGdvdG8gTG9hZF9PazsKKyAgICAgIH0KKworICAgICAgeworICAgICAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbCAgICAgICAgPSBmYWNlLT5pbnRlcm5hbDsKKyAgICAgICAgRlRfSW50ICAgICAgICAgICAgdHJhbnNmb3JtX2ZsYWdzID0gaW50ZXJuYWwtPnRyYW5zZm9ybV9mbGFnczsKKworCisgICAgICAgIC8qIHNpbmNlIHRoZSBhdXRvLWhpbnRlciBjYWxscyBGVF9Mb2FkX0dseXBoIGJ5IGl0c2VsZiwgKi8KKyAgICAgICAgLyogbWFrZSBzdXJlIHRoYXQgZ2x5cGhzIGFyZW4ndCB0cmFuc2Zvcm1lZCAgICAgICAgICAgICAqLworICAgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX2ZsYWdzID0gMDsKKworICAgICAgICAvKiBsb2FkIGF1dG8taGludGVkIG91dGxpbmUgKi8KKyAgICAgICAgaGludGluZyA9IChGVF9BdXRvSGludGVyX0ludGVyZmFjZSloaW50ZXItPmNsYXp6LT5tb2R1bGVfaW50ZXJmYWNlOworCisgICAgICAgIGVycm9yICAgPSBoaW50aW5nLT5sb2FkX2dseXBoKCAoRlRfQXV0b0hpbnRlciloaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LCBmYWNlLT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKworICAgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX2ZsYWdzID0gdHJhbnNmb3JtX2ZsYWdzOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXJyb3IgPSBkcml2ZXItPmNsYXp6LT5sb2FkX2dseXBoKCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgeworICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBsb2FkZWQgb3V0bGluZSBpcyBjb3JyZWN0ICovCisgICAgICAgIGVycm9yID0gRlRfT3V0bGluZV9DaGVjayggJnNsb3QtPm91dGxpbmUgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisjaWZkZWYgR1JJRF9GSVRfTUVUUklDUworICAgICAgICBpZiAoICEoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0hJTlRJTkcgKSApCisgICAgICAgICAgZnRfZ2x5cGhzbG90X2dyaWRfZml0X21ldHJpY3MoIHNsb3QsCisgICAgICAgICAgICAgIEZUX0JPT0woIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApICk7CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgTG9hZF9PazoKKyAgICAvKiBjb21wdXRlIHRoZSBhZHZhbmNlICovCisgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQorICAgIHsKKyAgICAgIHNsb3QtPmFkdmFuY2UueCA9IDA7CisgICAgICBzbG90LT5hZHZhbmNlLnkgPSBzbG90LT5tZXRyaWNzLnZlcnRBZHZhbmNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2xvdC0+YWR2YW5jZS54ID0gc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZTsKKyAgICAgIHNsb3QtPmFkdmFuY2UueSA9IDA7CisgICAgfQorCisgICAgLyogY29tcHV0ZSB0aGUgbGluZWFyIGFkdmFuY2UgaW4gMTYuMTYgcGl4ZWxzICovCisgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX0xJTkVBUl9ERVNJR04gKSA9PSAwICYmCisgICAgICAgICAoIEZUX0lTX1NDQUxBQkxFKCBmYWNlICkgKSAgICAgICAgICAgICAgICAgICkKKyAgICB7CisgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzID0gJmZhY2UtPnNpemUtPm1ldHJpY3M7CisKKworICAgICAgLyogaXQncyB0cmlja3khICovCisgICAgICBzbG90LT5saW5lYXJIb3JpQWR2YW5jZSA9IEZUX011bERpdiggc2xvdC0+bGluZWFySG9yaUFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSwgNjQgKTsKKworICAgICAgc2xvdC0+bGluZWFyVmVydEFkdmFuY2UgPSBGVF9NdWxEaXYoIHNsb3QtPmxpbmVhclZlcnRBZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIDY0ICk7CisgICAgfQorCisgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0gKSA9PSAwICkKKyAgICB7CisgICAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbCA9IGZhY2UtPmludGVybmFsOworCisKKyAgICAgIC8qIG5vdywgdHJhbnNmb3JtIHRoZSBnbHlwaCBpbWFnZSBpZiBuZWVkZWQgKi8KKyAgICAgIGlmICggaW50ZXJuYWwtPnRyYW5zZm9ybV9mbGFncyApCisgICAgICB7CisgICAgICAgIC8qIGdldCByZW5kZXJlciAqLworICAgICAgICBGVF9SZW5kZXJlciAgcmVuZGVyZXIgPSBmdF9sb29rdXBfZ2x5cGhfcmVuZGVyZXIoIHNsb3QgKTsKKworCisgICAgICAgIGlmICggcmVuZGVyZXIgKQorICAgICAgICAgIGVycm9yID0gcmVuZGVyZXItPmNsYXp6LT50cmFuc2Zvcm1fZ2x5cGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludGVybmFsLT50cmFuc2Zvcm1fbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbC0+dHJhbnNmb3JtX2RlbHRhICk7CisgICAgICAgIGVsc2UgaWYgKCBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgICB7CisgICAgICAgICAgLyogYXBwbHkgYHN0YW5kYXJkJyB0cmFuc2Zvcm1hdGlvbiBpZiBubyByZW5kZXJlciBpcyBhdmFpbGFibGUgKi8KKyAgICAgICAgICBpZiAoIGludGVybmFsLT50cmFuc2Zvcm1fZmxhZ3MgJiAxICkKKyAgICAgICAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmc2xvdC0+b3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXggKTsKKworICAgICAgICAgIGlmICggaW50ZXJuYWwtPnRyYW5zZm9ybV9mbGFncyAmIDIgKQorICAgICAgICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZzbG90LT5vdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLT50cmFuc2Zvcm1fZGVsdGEueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX2RlbHRhLnkgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHRyYW5zZm9ybSBhZHZhbmNlICovCisgICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZzbG90LT5hZHZhbmNlLCAmaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXggKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiICB4IGFkdmFuY2U6ICVkXG4iICwgc2xvdC0+YWR2YW5jZS54ICkpOworICAgIEZUX1RSQUNFNSgoICIgIHkgYWR2YW5jZTogJWRcbiIgLCBzbG90LT5hZHZhbmNlLnkgKSk7CisKKyAgICBGVF9UUkFDRTUoKCAiICBsaW5lYXIgeCBhZHZhbmNlOiAlZFxuIiAsIHNsb3QtPmxpbmVhckhvcmlBZHZhbmNlICkpOworICAgIEZUX1RSQUNFNSgoICIgIGxpbmVhciB5IGFkdmFuY2U6ICVkXG4iICwgc2xvdC0+bGluZWFyVmVydEFkdmFuY2UgKSk7CisKKyAgICAvKiBkbyB3ZSBuZWVkIHRvIHJlbmRlciB0aGUgaW1hZ2Ugbm93PyAqLworICAgIGlmICggIWVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHNsb3QtPmZvcm1hdCAhPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQICAgICYmCisgICAgICAgICBzbG90LT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSAmJgorICAgICAgICAgbG9hZF9mbGFncyAmIEZUX0xPQURfUkVOREVSICkKKyAgICB7CisgICAgICBGVF9SZW5kZXJfTW9kZSAgbW9kZSA9IEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKTsKKworCisgICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTk9STUFMICAgICAgJiYKKyAgICAgICAgICAgKGxvYWRfZmxhZ3MgJiBGVF9MT0FEX01PTk9DSFJPTUUgKSApCisgICAgICAgIG1vZGUgPSBGVF9SRU5ERVJfTU9ERV9NT05POworCisgICAgICBlcnJvciA9IEZUX1JlbmRlcl9HbHlwaCggc2xvdCwgbW9kZSApOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Mb2FkX0NoYXIoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyX2NvZGUsCisgICAgICAgICAgICAgICAgRlRfSW50MzIgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgRlRfVUludCAgZ2x5cGhfaW5kZXg7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBnbHlwaF9pbmRleCA9IChGVF9VSW50KWNoYXJfY29kZTsKKyAgICBpZiAoIGZhY2UtPmNoYXJtYXAgKQorICAgICAgZ2x5cGhfaW5kZXggPSBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgY2hhcl9jb2RlICk7CisKKyAgICByZXR1cm4gRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKyAgfQorCisKKyAgLyogZGVzdHJ1Y3RvciBmb3Igc2l6ZXMgbGlzdCAqLworICBzdGF0aWMgdm9pZAorICBkZXN0cm95X3NpemUoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgIEZUX1NpemUgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICBGVF9Ecml2ZXIgIGRyaXZlciApCisgIHsKKyAgICAvKiBmaW5hbGl6ZSBjbGllbnQtc3BlY2lmaWMgZGF0YSAqLworICAgIGlmICggc2l6ZS0+Z2VuZXJpYy5maW5hbGl6ZXIgKQorICAgICAgc2l6ZS0+Z2VuZXJpYy5maW5hbGl6ZXIoIHNpemUgKTsKKworICAgIC8qIGZpbmFsaXplIGZvcm1hdC1zcGVjaWZpYyBzdHVmZiAqLworICAgIGlmICggZHJpdmVyLT5jbGF6ei0+ZG9uZV9zaXplICkKKyAgICAgIGRyaXZlci0+Y2xhenotPmRvbmVfc2l6ZSggc2l6ZSApOworCisgICAgRlRfRlJFRSggc2l6ZS0+aW50ZXJuYWwgKTsKKyAgICBGVF9GUkVFKCBzaXplICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2NtYXBfZG9uZV9pbnRlcm5hbCggRlRfQ01hcCAgY21hcCApOworCisKKyAgc3RhdGljIHZvaWQKKyAgZGVzdHJveV9jaGFybWFwcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9JbnQgIG47CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgZm9yICggbiA9IDA7IG4gPCBmYWNlLT5udW1fY2hhcm1hcHM7IG4rKyApCisgICAgeworICAgICAgRlRfQ01hcCAgY21hcCA9IEZUX0NNQVAoIGZhY2UtPmNoYXJtYXBzW25dICk7CisKKworICAgICAgZnRfY21hcF9kb25lX2ludGVybmFsKCBjbWFwICk7CisKKyAgICAgIGZhY2UtPmNoYXJtYXBzW25dID0gTlVMTDsKKyAgICB9CisKKyAgICBGVF9GUkVFKCBmYWNlLT5jaGFybWFwcyApOworICAgIGZhY2UtPm51bV9jaGFybWFwcyA9IDA7CisgIH0KKworCisgIC8qIGRlc3RydWN0b3IgZm9yIGZhY2VzIGxpc3QgKi8KKyAgc3RhdGljIHZvaWQKKyAgZGVzdHJveV9mYWNlKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgRlRfRHJpdmVyICBkcml2ZXIgKQorICB7CisgICAgRlRfRHJpdmVyX0NsYXNzICBjbGF6eiA9IGRyaXZlci0+Y2xheno7CisKKworICAgIC8qIGRpc2NhcmQgYXV0by1oaW50aW5nIGRhdGEgKi8KKyAgICBpZiAoIGZhY2UtPmF1dG9oaW50LmZpbmFsaXplciApCisgICAgICBmYWNlLT5hdXRvaGludC5maW5hbGl6ZXIoIGZhY2UtPmF1dG9oaW50LmRhdGEgKTsKKworICAgIC8qIERpc2NhcmQgZ2x5cGggc2xvdHMgZm9yIHRoaXMgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEJld2FyZSEgIEZUX0RvbmVfR2x5cGhTbG90KCkgY2hhbmdlcyB0aGUgZmllbGQgYGZhY2UtPmdseXBoJyAqLworICAgIHdoaWxlICggZmFjZS0+Z2x5cGggKQorICAgICAgRlRfRG9uZV9HbHlwaFNsb3QoIGZhY2UtPmdseXBoICk7CisKKyAgICAvKiBkaXNjYXJkIGFsbCBzaXplcyBmb3IgdGhpcyBmYWNlICovCisgICAgRlRfTGlzdF9GaW5hbGl6ZSggJmZhY2UtPnNpemVzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgKEZUX0xpc3RfRGVzdHJ1Y3RvcilkZXN0cm95X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciApOworICAgIGZhY2UtPnNpemUgPSBOVUxMOworCisgICAgLyogbm93IGRpc2NhcmQgY2xpZW50IGRhdGEgKi8KKyAgICBpZiAoIGZhY2UtPmdlbmVyaWMuZmluYWxpemVyICkKKyAgICAgIGZhY2UtPmdlbmVyaWMuZmluYWxpemVyKCBmYWNlICk7CisKKyAgICAvKiBkaXNjYXJkIGNoYXJtYXBzICovCisgICAgZGVzdHJveV9jaGFybWFwcyggZmFjZSwgbWVtb3J5ICk7CisKKyAgICAvKiBmaW5hbGl6ZSBmb3JtYXQtc3BlY2lmaWMgc3R1ZmYgKi8KKyAgICBpZiAoIGNsYXp6LT5kb25lX2ZhY2UgKQorICAgICAgY2xhenotPmRvbmVfZmFjZSggZmFjZSApOworCisgICAgLyogY2xvc2UgdGhlIHN0cmVhbSBmb3IgdGhpcyBmYWNlIGlmIG5lZWRlZCAqLworICAgIEZUX1N0cmVhbV9GcmVlKAorICAgICAgZmFjZS0+c3RyZWFtLAorICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSApICE9IDAgKTsKKworICAgIGZhY2UtPnN0cmVhbSA9IE5VTEw7CisKKyAgICAvKiBnZXQgcmlkIG9mIGl0ICovCisgICAgaWYgKCBmYWNlLT5pbnRlcm5hbCApCisgICAgeworICAgICAgRlRfRlJFRSggZmFjZS0+aW50ZXJuYWwgKTsKKyAgICB9CisgICAgRlRfRlJFRSggZmFjZSApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBEZXN0cm95X0RyaXZlciggRlRfRHJpdmVyICBkcml2ZXIgKQorICB7CisgICAgRlRfTGlzdF9GaW5hbGl6ZSggJmRyaXZlci0+ZmFjZXNfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfTGlzdF9EZXN0cnVjdG9yKWRlc3Ryb3lfZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBkcml2ZXItPnJvb3QubWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmaW5kX3VuaWNvZGVfY2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgVW5pY29kZSBjaGFybWFwLCBpZiB0aGVyZSBpcyBvbmUuICAgICAgICAgICAgKi8KKyAgLyogICAgQW5kIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUsIGl0IHRyaWVzIHRvIGZhdm91ciB0aGUgbW9yZSAgICAgICAgICovCisgIC8qICAgIGV4dGVuc2l2ZSBvbmUsIGkuZS4sIG9uZSB0aGF0IHN1cHBvcnRzIFVDUy00IGFnYWluc3QgdGhvc2Ugd2hpY2ggICAqLworICAvKiAgICBhcmUgbGltaXRlZCB0byB0aGUgQk1QIChzYWlkIFVDUy0yIGVuY29kaW5nLikgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gb3Blbl9mYWNlKCkgKGp1c3QgYmVsb3cpLCBhbmQgYWxzbyAgICAqLworICAvKiAgICBmcm9tIEZUX1NlbGVjdF9DaGFybWFwKCAuLi4sIEZUX0VOQ09ESU5HX1VOSUNPREUgKS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmaW5kX3VuaWNvZGVfY2hhcm1hcCggRlRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9DaGFyTWFwKiAgZmlyc3Q7CisgICAgRlRfQ2hhck1hcCogIGN1cjsKKworCisgICAgLyogY2FsbGVyIHNob3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IGBmYWNlJyBpcyB2YWxpZCAqLworICAgIEZUX0FTU0VSVCggZmFjZSApOworCisgICAgZmlyc3QgPSBmYWNlLT5jaGFybWFwczsKKworICAgIGlmICggIWZpcnN0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DaGFyTWFwX0hhbmRsZSApOworCisgICAgLyoKKyAgICAgKiAgVGhlIG9yaWdpbmFsIFRydWVUeXBlIHNwZWNpZmljYXRpb24ocykgb25seSBzcGVjaWZpZWQgY2hhcm1hcAorICAgICAqICBmb3JtYXRzIHRoYXQgYXJlIGNhcGFibGUgb2YgbWFwcGluZyA4IG9yIDE2IGJpdCBjaGFyYWN0ZXIgY29kZXMgdG8KKyAgICAgKiAgZ2x5cGggaW5kaWNlcy4KKyAgICAgKgorICAgICAqICBIb3dldmVyLCByZWNlbnQgdXBkYXRlcyB0byB0aGUgQXBwbGUgYW5kIE9wZW5UeXBlIHNwZWNpZmljYXRpb25zCisgICAgICogIGludHJvZHVjZWQgbmV3IGZvcm1hdHMgdGhhdCBhcmUgY2FwYWJsZSBvZiBtYXBwaW5nIDMyLWJpdCBjaGFyYWN0ZXIKKyAgICAgKiAgY29kZXMgYXMgd2VsbC4gIEFuZCB0aGVzZSBhcmUgYWxyZWFkeSB1c2VkIG9uIHNvbWUgZm9udHMsIG1haW5seSB0bworICAgICAqICBtYXAgbm9uLUJNUCBBc2lhbiBpZGVvZ3JhcGhzIGFzIGRlZmluZWQgaW4gVW5pY29kZS4KKyAgICAgKgorICAgICAqICBGb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcywgdGhlc2UgZm9udHMgZ2VuZXJhbGx5IGNvbWUgd2l0aAorICAgICAqICAqc2V2ZXJhbCogVW5pY29kZSBjaGFybWFwczoKKyAgICAgKgorICAgICAqICAgLSBPbmUgb2YgdGhlbSBpbiB0aGUgIm9sZCIgMTYtYml0IGZvcm1hdCwgdGhhdCBjYW5ub3QgYWNjZXNzCisgICAgICogICAgIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuCisgICAgICoKKyAgICAgKiAgIC0gQW5vdGhlciBvbmUgaW4gdGhlICJuZXciIDMyLWJpdCBmb3JtYXQsIHRoYXQgY2FuIGFjY2VzcyBhbGwKKyAgICAgKiAgICAgdGhlIGdseXBocy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gdG8gYWx3YXlzIGZhdm9yIGEgMzItYml0IGNoYXJtYXAKKyAgICAgKiAgd2hlbiBmb3VuZC4gIE90aGVyd2lzZSwgYSAxNi1iaXQgb25lIGlzIHJldHVybmVkIHdoZW4gZm91bmQuCisgICAgICovCisKKyAgICAvKiBTaW5jZSB0aGUgYGludGVyZXN0aW5nJyB0YWJsZSwgd2l0aCBJRHMgKDMsMTApLCBpcyBub3JtYWxseSB0aGUgKi8KKyAgICAvKiBsYXN0IG9uZSwgd2UgbG9vcCBiYWNrd2FyZHMuICBUaGlzIGxvc2VzIHdpdGggdHlwZTEgZm9udHMgd2l0aCAgKi8KKyAgICAvKiBub24tQk1QIGNoYXJhY3RlcnMgKDwuMDAwMSUpLCB0aGlzIHdpbnMgd2l0aCAudHRmIHdpdGggbm9uLUJNUCAgKi8KKyAgICAvKiBjaGFycyAoLjAxJSA/KSwgYW5kIHRoaXMgaXMgdGhlIHNhbWUgYWJvdXQgOTkuOTklIG9mIHRoZSB0aW1lISAgKi8KKworICAgIGN1ciA9IGZpcnN0ICsgZmFjZS0+bnVtX2NoYXJtYXBzOyAgLyogcG9pbnRzIGFmdGVyIHRoZSBsYXN0IG9uZSAqLworCisgICAgZm9yICggOyAtLWN1ciA+PSBmaXJzdDsgKQorICAgIHsKKyAgICAgIGlmICggY3VyWzBdLT5lbmNvZGluZyA9PSBGVF9FTkNPRElOR19VTklDT0RFICkKKyAgICAgIHsKKyAgICAgICAgLyogWFhYIElmIHNvbWUgbmV3IGVuY29kaW5ncyB0byByZXByZXNlbnQgVUNTLTQgYXJlIGFkZGVkLCAqLworICAgICAgICAvKiAgICAgdGhleSBzaG91bGQgYmUgYWRkZWQgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggKCBjdXJbMF0tPnBsYXRmb3JtX2lkID09IFRUX1BMQVRGT1JNX01JQ1JPU09GVCAmJgorICAgICAgICAgICAgICAgY3VyWzBdLT5lbmNvZGluZ19pZCA9PSBUVF9NU19JRF9VQ1NfNCAgICAgICAgKSAgICAgfHwKKyAgICAgICAgICAgICAoIGN1clswXS0+cGxhdGZvcm1faWQgPT0gVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERSAmJgorICAgICAgICAgICAgICAgY3VyWzBdLT5lbmNvZGluZ19pZCA9PSBUVF9BUFBMRV9JRF9VTklDT0RFXzMyICAgICkgKQorICAgICAgICB7CisgICAgICAgICAgZmFjZS0+Y2hhcm1hcCA9IGN1clswXTsKKyAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogV2UgZG8gbm90IGhhdmUgYW55IFVDUy00IGNoYXJtYXAuICAgICAgICAgICAgICAgICovCisgICAgLyogRG8gdGhlIGxvb3AgYWdhaW4gYW5kIHNlYXJjaCBmb3IgVUNTLTIgY2hhcm1hcHMuICovCisgICAgY3VyID0gZmlyc3QgKyBmYWNlLT5udW1fY2hhcm1hcHM7CisKKyAgICBmb3IgKCA7IC0tY3VyID49IGZpcnN0OyApCisgICAgeworICAgICAgaWYgKCBjdXJbMF0tPmVuY29kaW5nID09IEZUX0VOQ09ESU5HX1VOSUNPREUgKQorICAgICAgeworICAgICAgICBmYWNlLT5jaGFybWFwID0gY3VyWzBdOworICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DaGFyTWFwX0hhbmRsZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmaW5kX3ZhcmlhbnRfc2VsZWN0b3JfY2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSB2YXJpYW50IHNlbGVjdG9yIGNoYXJtYXAsIGlmIHRoZXJlIGlzIG9uZS4gKi8KKyAgLyogICAgVGhlcmUgY2FuIG9ubHkgYmUgb25lIChwbGF0Zm9ybT0wLCBzcGVjaWZpYz01LCBmb3JtYXQ9MTQpLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfQ2hhck1hcAorICBmaW5kX3ZhcmlhbnRfc2VsZWN0b3JfY2hhcm1hcCggRlRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9DaGFyTWFwKiAgZmlyc3Q7CisgICAgRlRfQ2hhck1hcCogIGVuZDsKKyAgICBGVF9DaGFyTWFwKiAgY3VyOworCisKKyAgICAvKiBjYWxsZXIgc2hvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgYGZhY2UnIGlzIHZhbGlkICovCisgICAgRlRfQVNTRVJUKCBmYWNlICk7CisKKyAgICBmaXJzdCA9IGZhY2UtPmNoYXJtYXBzOworCisgICAgaWYgKCAhZmlyc3QgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbmQgPSBmaXJzdCArIGZhY2UtPm51bV9jaGFybWFwczsgIC8qIHBvaW50cyBhZnRlciB0aGUgbGFzdCBvbmUgKi8KKworICAgIGZvciAoIGN1ciA9IGZpcnN0OyBjdXIgPCBlbmQ7ICsrY3VyICkKKyAgICB7CisgICAgICBpZiAoIGN1clswXS0+cGxhdGZvcm1faWQgPT0gVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERSAgICAmJgorICAgICAgICAgICBjdXJbMF0tPmVuY29kaW5nX2lkID09IFRUX0FQUExFX0lEX1ZBUklBTlRfU0VMRUNUT1IgJiYKKyAgICAgICAgICAgRlRfR2V0X0NNYXBfRm9ybWF0KCBjdXJbMF0gKSA9PSAxNCAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGN1clswXTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3Blbl9mYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBkb2VzIHNvbWUgd29yayBmb3IgRlRfT3Blbl9GYWNlKCkuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgb3Blbl9mYWNlKCBGVF9Ecml2ZXIgICAgICBkcml2ZXIsCisgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgKmFzdHJlYW0sCisgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgZXh0ZXJuYWxfc3RyZWFtLAorICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMsCisgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAqYWZhY2UgKQorICB7CisgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5OworICAgIEZUX0RyaXZlcl9DbGFzcyAgIGNsYXp6OworICAgIEZUX0ZhY2UgICAgICAgICAgIGZhY2UgICAgID0gTlVMTDsKKyAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbCA9IE5VTEw7CisKKyAgICBGVF9FcnJvciAgICAgICAgICBlcnJvciwgZXJyb3IyOworCisKKyAgICBjbGF6eiAgPSBkcml2ZXItPmNsYXp6OworICAgIG1lbW9yeSA9IGRyaXZlci0+cm9vdC5tZW1vcnk7CisKKyAgICAvKiBhbGxvY2F0ZSB0aGUgZmFjZSBvYmplY3QgYW5kIHBlcmZvcm0gYmFzaWMgaW5pdGlhbGl6YXRpb24gKi8KKyAgICBpZiAoIEZUX0FMTE9DKCBmYWNlLCBjbGF6ei0+ZmFjZV9vYmplY3Rfc2l6ZSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGZhY2UtPmRyaXZlciA9IGRyaXZlcjsKKyAgICBmYWNlLT5tZW1vcnkgPSBtZW1vcnk7CisgICAgZmFjZS0+c3RyZWFtID0gKmFzdHJlYW07CisKKyAgICAvKiBzZXQgdGhlIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gYml0IGZvciBGVF9Eb25lX0ZhY2UgKi8KKyAgICBpZiAoIGV4dGVybmFsX3N0cmVhbSApCisgICAgICBmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU07CisKKyAgICBpZiAoIEZUX05FVyggaW50ZXJuYWwgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBmYWNlLT5pbnRlcm5hbCA9IGludGVybmFsOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIHsKKyAgICAgIGludCAgaTsKKworCisgICAgICBmYWNlLT5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlID0gTlVMTDsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3BhcmFtcyAmJiAhZmFjZS0+aW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZTsKKyAgICAgICAgICAgIGkrKyApCisgICAgICAgIGlmICggcGFyYW1zW2ldLnRhZyA9PSBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwgKQorICAgICAgICAgIGZhY2UtPmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgPQorICAgICAgICAgICAgKEZUX0luY3JlbWVudGFsX0ludGVyZmFjZSlwYXJhbXNbaV0uZGF0YTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggY2xhenotPmluaXRfZmFjZSApCisgICAgICBlcnJvciA9IGNsYXp6LT5pbml0X2ZhY2UoICphc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyApOworICAgICphc3RyZWFtID0gZmFjZS0+c3RyZWFtOyAvKiBTdHJlYW0gbWF5IGhhdmUgYmVlbiBjaGFuZ2VkLiAqLworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogc2VsZWN0IFVuaWNvZGUgY2hhcm1hcCBieSBkZWZhdWx0ICovCisgICAgZXJyb3IyID0gZmluZF91bmljb2RlX2NoYXJtYXAoIGZhY2UgKTsKKworICAgIC8qIGlmIG5vIFVuaWNvZGUgY2hhcm1hcCBjYW4gYmUgZm91bmQsIEZUX0Vycl9JbnZhbGlkX0NoYXJNYXBfSGFuZGxlICovCisgICAgLyogaXMgcmV0dXJuZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIG5vIGVycm9yIHNob3VsZCBoYXBwZW4sIGJ1dCB3ZSB3YW50IHRvIHBsYXkgc2FmZSAqLworICAgIGlmICggZXJyb3IyICYmIEZUX0VSUl9ORVEoIGVycm9yMiwgSW52YWxpZF9DaGFyTWFwX0hhbmRsZSApICkKKyAgICB7CisgICAgICBlcnJvciA9IGVycm9yMjsKKyAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAqYWZhY2UgPSBmYWNlOworCisgIEZhaWw6CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgZGVzdHJveV9jaGFybWFwcyggZmFjZSwgbWVtb3J5ICk7CisgICAgICBpZiAoIGNsYXp6LT5kb25lX2ZhY2UgKQorICAgICAgICBjbGF6ei0+ZG9uZV9mYWNlKCBmYWNlICk7CisgICAgICBGVF9GUkVFKCBpbnRlcm5hbCApOworICAgICAgRlRfRlJFRSggZmFjZSApOworICAgICAgKmFmYWNlID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHRoZXJlJ3MgYSBNYWMtc3BlY2lmaWMgZXh0ZW5kZWQgaW1wbGVtZW50YXRpb24gb2YgRlRfTmV3X0ZhY2UoKSAqLworICAvKiBpbiBzcmMvYmFzZS9mdG1hYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmbmRlZiBGVF9NQUNJTlRPU0gKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICkKKyAgeworICAgIEZUX09wZW5fQXJncyAgYXJnczsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGFuZCBgYWZhY2UnIGRlbGF5ZWQgdG8gYEZUX09wZW5fRmFjZScgKi8KKyAgICBpZiAoICFwYXRobmFtZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGFyZ3MuZmxhZ3MgICAgPSBGVF9PUEVOX1BBVEhOQU1FOworICAgIGFyZ3MucGF0aG5hbWUgPSAoY2hhciopcGF0aG5hbWU7CisgICAgYXJncy5zdHJlYW0gICA9IE5VTEw7CisKKyAgICByZXR1cm4gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKKyAgfQorCisjZW5kaWYKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X01lbW9yeV9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgZmlsZV9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgKmFmYWNlICkKKyAgeworICAgIEZUX09wZW5fQXJncyAgYXJnczsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGFuZCBgZmFjZScgZGVsYXllZCB0byBgRlRfT3Blbl9GYWNlJyAqLworICAgIGlmICggIWZpbGVfYmFzZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGFyZ3MuZmxhZ3MgICAgICAgPSBGVF9PUEVOX01FTU9SWTsKKyAgICBhcmdzLm1lbW9yeV9iYXNlID0gZmlsZV9iYXNlOworICAgIGFyZ3MubWVtb3J5X3NpemUgPSBmaWxlX3NpemU7CisgICAgYXJncy5zdHJlYW0gICAgICA9IE5VTEw7CisKKyAgICByZXR1cm4gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKKyAgfQorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworCisgIC8qIFRoZSBiZWhhdmlvciBoZXJlIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0IGluIGJhc2UvZnRtYWMuYywgYnV0IGl0ICAgICAqLworICAvKiBpcyBkZXNpZ25lZCB0byB3b3JrIG9uIG5vbi1tYWMgc3lzdGVtcywgc28gbm8gbWFjIHNwZWNpZmljIGNhbGxzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIGxvb2sgYXQgdGhlIGZpbGUgYW5kIGRldGVybWluZSBpZiBpdCBpcyBhIG1hYyBkZm9udCBmaWxlIG9yIGEgbWFjICAqLworICAvKiByZXNvdXJjZSBmaWxlLCBvciBhIG1hY2JpbmFyeSBmaWxlIGNvbnRhaW5pbmcgYSBtYWMgcmVzb3VyY2UgZmlsZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFVubGlrZSBmdG1hYyBJJ20gbm90IGdvaW5nIHRvIGxvb2sgYXQgYSBgRk9ORCcuICBJIGRvbid0IHJlYWxseSBzZWUgICAqLworICAvKiB0aGUgcG9pbnQsIGVzcGVjaWFsbHkgc2luY2UgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGBGT05EJyByZXNvdXJjZXMuICAgKi8KKyAgLyogSW5zdGVhZCBJJ2xsIGp1c3QgbG9vayBmb3IgYHNmbnQnIGFuZCBgUE9TVCcgcmVzb3VyY2VzLCBvcmRlcmVkIGFzICAgICovCisgIC8qIHRoZXkgb2NjdXIgaW4gdGhlIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTm90ZSB0aGF0IG11bHRpcGxlIGBQT1NUJyByZXNvdXJjZXMgZG8gbm90IG1lYW4gbXVsdGlwbGUgcG9zdHNjcmlwdCAgICovCisgIC8qIGZvbnRzOyB0aGV5IGFsbCBnZXQgamFtbWVkIHRvZ2V0aGVyIHRvIG1ha2Ugd2hhdCBpcyBlc3NlbnRpYWxseSBhICAgICAqLworICAvKiBwZmIgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIGFyZW4ndCBpbnRlcmVzdGVkIGluIGBORk5UJyBvciBgRk9OVCcgYml0bWFwIHJlc291cmNlcy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQXMgc29vbiBhcyB3ZSBnZXQgYW4gYHNmbnQnIGxvYWQgaXQgaW50byBtZW1vcnkgYW5kIHBhc3MgaXQgb2ZmIHRvICAgICovCisgIC8qIEZUX09wZW5fRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgd2UgaGF2ZSBhIChzZXQgb2YpIGBQT1NUJyByZXNvdXJjZXMsIG1hc3NhZ2UgdGhlbSBpbnRvIGEgKG1lbW9yeSkgICovCisgIC8qIHBmYiBmaWxlIGFuZCBwYXNzIHRoYXQgdG8gRlRfT3Blbl9GYWNlLiAgKEFzIHdpdGggZnRtYWMuYyBJJ20gbm90ICAgICAqLworICAvKiBnb2luZyB0byB0cnkgdG8gc2F2ZSB0aGUga2VybmluZyBpbmZvLiAgQWZ0ZXIgYWxsIHRoYXQgbGl2ZXMgaW4gdGhlICAgKi8KKyAgLyogYEZPTkQnIHdoaWNoIGlzbid0IGluIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGBQT1NUJyByZXNvdXJjZXMgc28gICAgICovCisgIC8qIHdlIGRvbid0IHJlYWxseSBoYXZlIGFjY2VzcyB0byBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyAgLyogRmluYWxpemVyIGZvciBhIG1lbW9yeSBzdHJlYW07IGdldHMgY2FsbGVkIGJ5IEZUX0RvbmVfRmFjZSgpLiAqLworICAvKiBJdCBmcmVlcyB0aGUgbWVtb3J5IGl0IHVzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZyb20gZnRtYWMuYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgbWVtb3J5X3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKworCisgICAgRlRfRlJFRSggc3RyZWFtLT5iYXNlICk7CisKKyAgICBzdHJlYW0tPnNpemUgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgID0gTlVMTDsKKyAgICBzdHJlYW0tPmNsb3NlID0gTlVMTDsKKyAgfQorCisKKyAgLyogQ3JlYXRlIGEgbmV3IG1lbW9yeSBzdHJlYW0gZnJvbSBhIGJ1ZmZlciBhbmQgYSBzaXplLiAqLworICAvKiBGcm9tIGZ0bWFjLmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBuZXdfbWVtb3J5X3N0cmVhbSggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtX0Nsb3NlRnVuYyAgY2xvc2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICphc3RyZWFtICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBOVUxMOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhYmFzZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICphc3RyZWFtID0gTlVMTDsKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisgICAgaWYgKCBGVF9ORVcoIHN0cmVhbSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX1N0cmVhbV9PcGVuTWVtb3J5KCBzdHJlYW0sIGJhc2UsIHNpemUgKTsKKworICAgIHN0cmVhbS0+Y2xvc2UgPSBjbG9zZTsKKworICAgICphc3RyZWFtID0gc3RyZWFtOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDcmVhdGUgYSBuZXcgRlRfRmFjZSBnaXZlbiBhIGJ1ZmZlciBhbmQgYSBkcml2ZXIgbmFtZS4gKi8KKyAgLyogZnJvbSBmdG1hYy5jICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBkcml2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQorICB7CisgICAgRlRfT3Blbl9BcmdzICBhcmdzOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW0gPSBOVUxMOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBlcnJvciA9IG5ld19tZW1vcnlfc3RyZWFtKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfc3RyZWFtX2Nsb3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW0gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBGVF9GUkVFKCBiYXNlICk7CisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgYXJncy5mbGFncyA9IEZUX09QRU5fU1RSRUFNOworICAgIGFyZ3Muc3RyZWFtID0gc3RyZWFtOworICAgIGlmICggZHJpdmVyX25hbWUgKQorICAgIHsKKyAgICAgIGFyZ3MuZmxhZ3MgPSBhcmdzLmZsYWdzIHwgRlRfT1BFTl9EUklWRVI7CisgICAgICBhcmdzLmRyaXZlciA9IEZUX0dldF9Nb2R1bGUoIGxpYnJhcnksIGRyaXZlcl9uYW1lICk7CisgICAgfQorCisjaWZkZWYgRlRfTUFDSU5UT1NICisgICAgLyogQXQgdGhpcyBwb2ludCwgZmFjZV9pbmRleCBoYXMgc2VydmVkIGl0cyBwdXJwb3NlOyAgICAgICovCisgICAgLyogd2hvZXZlciBjYWxscyB0aGlzIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IHVzZWQgaXQgdG8gICAgICovCisgICAgLyogbG9jYXRlIHRoZSBjb3JyZWN0IGZvbnQgZGF0YS4gIFdlIHNob3VsZCBub3QgcHJvcGFnYXRlICovCisgICAgLyogdGhpcyBpbmRleCB0byBGVF9PcGVuX0ZhY2UoKSAodW5sZXNzIGl0IGlzIG5lZ2F0aXZlKS4gICovCisKKyAgICBpZiAoIGZhY2VfaW5kZXggPiAwICkKKyAgICAgIGZhY2VfaW5kZXggPSAwOworI2VuZGlmCisKKyAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJmFyZ3MsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisKKyAgICBpZiAoIGVycm9yID09IEZUX0Vycl9PayApCisgICAgICAoKmFmYWNlKS0+ZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTTsKKyAgICBlbHNlCisjaWZkZWYgRlRfTUFDSU5UT1NICisgICAgICBGVF9TdHJlYW1fRnJlZSggc3RyZWFtLCAwICk7CisjZWxzZQorICAgIHsKKyAgICAgIEZUX1N0cmVhbV9DbG9zZSggc3RyZWFtICk7CisgICAgICBGVF9GUkVFKCBzdHJlYW0gKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogTG9vayB1cCBgVFlQMScgb3IgYENJRCAnIHRhYmxlIGZyb20gc2ZudCB0YWJsZSBkaXJlY3RvcnkuICAgICAgICovCisgIC8qIGBvZmZzZXQnIGFuZCBgbGVuZ3RoJyBtdXN0IGV4Y2x1ZGUgdGhlIGJpbmFyeSBoZWFkZXIgaW4gdGFibGVzLiAqLworCisgIC8qIFR5cGUgMSBhbmQgQ0lELWtleWVkIGZvbnQgZHJpdmVycyBzaG91bGQgcmVjb2duaXplIHNmbnQtd3JhcHBlZCAqLworICAvKiBmb3JtYXQgdG9vLiAgSGVyZSwgc2luY2Ugd2UgY2FuJ3QgZXhwZWN0IHRoYXQgdGhlIFRydWVUeXBlIGZvbnQgKi8KKyAgLyogZHJpdmVyIGlzIGxvYWRlZCB1bmNvbmRpdGlhbGx5LCB3ZSBtdXN0IHBhcnNlIHRoZSBmb250IGJ5ICAgICAgICovCisgIC8qIG91cnNlbHZlcy4gIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGFuZCAqLworICAvKiB0aGUgb2Zmc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfbG9va3VwX1BTX2luX3NmbnRfc3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICBpc19zZm50X2NpZCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1VTaG9ydCAgbnVtVGFibGVzOworICAgIEZUX0xvbmcgICAgcHN0YWJsZV9pbmRleDsKKyAgICBGVF9VTG9uZyAgIHRhZzsKKyAgICBpbnQgICAgICAgIGk7CisKKworICAgICpvZmZzZXQgPSAwOworICAgICpsZW5ndGggPSAwOworICAgICppc19zZm50X2NpZCA9IEZBTFNFOworCisgICAgLyogVE9ETzogc3VwcG9ydCBmb3Igc2ZudC13cmFwcGVkIFBTL0NJRCBpbiBUVEMgZm9ybWF0ICovCisKKyAgICAvKiB2ZXJzaW9uIGNoZWNrIGZvciAndHlwMScgKHNob3VsZCBiZSBpZ25vcmVkPykgKi8KKyAgICBpZiAoIEZUX1JFQURfVUxPTkcoIHRhZyApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIHRhZyAhPSBUVEFHX3R5cDEgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1UYWJsZXMgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggMiAqIDMgKSApIC8qIHNraXAgYmluYXJ5IHNlYXJjaCBoZWFkZXIgKi8KKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIHBzdGFibGVfaW5kZXggPSAtMTsKKyAgICAqaXNfc2ZudF9jaWQgID0gRkFMU0U7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIEZUX1JFQURfVUxPTkcoIHRhZyApICAgICB8fCBGVF9TVFJFQU1fU0tJUCggNCApICAgICAgfHwKKyAgICAgICAgICAgRlRfUkVBRF9VTE9ORyggKm9mZnNldCApIHx8IEZUX1JFQURfVUxPTkcoICpsZW5ndGggKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgaWYgKCB0YWcgPT0gVFRBR19DSUQgKQorICAgICAgeworICAgICAgICBwc3RhYmxlX2luZGV4Kys7CisgICAgICAgICpvZmZzZXQgKz0gMjI7CisgICAgICAgICpsZW5ndGggLT0gMjI7CisgICAgICAgICppc19zZm50X2NpZCA9IFRSVUU7CisgICAgICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgICB9CisgICAgICBlbHNlIGlmICggdGFnID09IFRUQUdfVFlQMSApCisgICAgICB7CisgICAgICAgIHBzdGFibGVfaW5kZXgrKzsKKyAgICAgICAgKm9mZnNldCArPSAyNDsKKyAgICAgICAgKmxlbmd0aCAtPSAyNDsKKyAgICAgICAgKmlzX3NmbnRfY2lkID0gRkFMU0U7CisgICAgICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgICB9CisgICAgICBpZiAoIGZhY2VfaW5kZXggPj0gMCAmJiBwc3RhYmxlX2luZGV4ID09IGZhY2VfaW5kZXggKQorICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKyAgICByZXR1cm4gRlRfVEhST1coIFRhYmxlX01pc3NpbmcgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIgICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICphZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworICAgIEZUX1VMb25nICAgb2Zmc2V0LCBsZW5ndGg7CisgICAgRlRfVUxvbmcgICBwb3M7CisgICAgRlRfQm9vbCAgICBpc19zZm50X2NpZDsKKyAgICBGVF9CeXRlKiAgIHNmbnRfcHMgPSBOVUxMOworCisgICAgRlRfVU5VU0VEKCBudW1fcGFyYW1zICk7CisgICAgRlRfVU5VU0VEKCBwYXJhbXMgKTsKKworCisgICAgcG9zID0gRlRfU1RSRUFNX1BPUygpOworCisgICAgZXJyb3IgPSBmdF9sb29rdXBfUFNfaW5fc2ZudF9zdHJlYW0oIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzX3NmbnRfY2lkICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIHBvcyArIG9mZnNldCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfQUxMT0MoIHNmbnRfcHMsIChGVF9Mb25nKWxlbmd0aCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUgKilzZm50X3BzLCBsZW5ndGggKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gb3Blbl9mYWNlX2Zyb21fYnVmZmVyKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01JTiggZmFjZV9pbmRleCwgMCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zZm50X2NpZCA/ICJjaWQiIDogInR5cGUxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKKyAgRXhpdDoKKyAgICB7CisgICAgICBGVF9FcnJvciAgZXJyb3IxOworCisKKyAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IxID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgcG9zICk7CisgICAgICAgIGlmICggZXJyb3IxICkKKyAgICAgICAgICByZXR1cm4gZXJyb3IxOworICAgICAgfQorCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorICB9CisKKworI2lmbmRlZiBGVF9NQUNJTlRPU0gKKworICAvKiBUaGUgcmVzb3VyY2UgaGVhZGVyIHNheXMgd2UndmUgZ290IHJlc291cmNlX2NudCBgUE9TVCcgKHR5cGUxKSAqLworICAvKiByZXNvdXJjZXMgaW4gdGhpcyBmaWxlLiAgVGhleSBhbGwgbmVlZCB0byBiZSBjb2FsZXNjZWQgaW50byAgICAqLworICAvKiBvbmUgbHVtcCB3aGljaCBnZXRzIHBhc3NlZCBvbiB0byB0aGUgdHlwZTEgZHJpdmVyLiAgICAgICAgICAgICAqLworICAvKiBIZXJlIGNhbiBiZSBvbmx5IG9uZSBQb3N0U2NyaXB0IGZvbnQgaW4gYSBmaWxlIHNvIGZhY2VfaW5kZXggICAqLworICAvKiBtdXN0IGJlIDAgKG9yIC0xKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpvZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICByZXNvdXJjZV9jbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgKmFmYWNlICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRVJSKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworICAgIEZUX0J5dGUqICAgcGZiX2RhdGEgPSBOVUxMOworICAgIGludCAgICAgICAgaSwgdHlwZSwgZmxhZ3M7CisgICAgRlRfVUxvbmcgICBsZW47CisgICAgRlRfVUxvbmcgICBwZmJfbGVuLCBwZmJfcG9zLCBwZmJfbGVucG9zOworICAgIEZUX1VMb25nICAgcmxlbiwgdGVtcDsKKworCisgICAgaWYgKCBmYWNlX2luZGV4ID09IC0xICkKKyAgICAgIGZhY2VfaW5kZXggPSAwOworICAgIGlmICggZmFjZV9pbmRleCAhPSAwICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIEZpbmQgdGhlIGxlbmd0aCBvZiBhbGwgdGhlIFBPU1QgcmVzb3VyY2VzLCBjb25jYXRlbmF0ZWQuICBBc3N1bWUgKi8KKyAgICAvKiB3b3JzdCBjYXNlIChlYWNoIHJlc291cmNlIGluIGl0cyBvd24gc2VjdGlvbikuICAgICAgICAgICAgICAgICAgICovCisgICAgcGZiX2xlbiA9IDA7CisgICAgZm9yICggaSA9IDA7IGkgPCByZXNvdXJjZV9jbnQ7ICsraSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpb2Zmc2V0c1tpXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIGlmICggRlRfUkVBRF9VTE9ORyggdGVtcCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBGVDIgYWxsb2NhdG9yIHRha2VzIHNpZ25lZCBsb25nIGJ1ZmZlciBsZW5ndGgsCisgICAgICAgKiB0b28gbGFyZ2UgdmFsdWUgY2F1c2luZyBvdmVyZmxvdyBzaG91bGQgYmUgY2hlY2tlZAorICAgICAgICovCisgICAgICBGVF9UUkFDRTQoKCAiICAgICAgICAgICAgICAgICBQT1NUIGZyYWdtZW50ICMlZDogbGVuZ3RoPTB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgIGksIHRlbXApKTsKKyAgICAgIGlmICggMHg3RkZGRkZGRlVMIDwgdGVtcCB8fCBwZmJfbGVuICsgdGVtcCArIDYgPCBwZmJfbGVuICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgICAgICAgICAgICB0b28gbG9uZyBmcmFnbWVudCBsZW5ndGggbWFrZXMiCisgICAgICAgICAgICAgICAgICAgICIgcGZiX2xlbiBjb25mdXNlZDogdGVtcD0weCUwOHhcbiIsIHRlbXAgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfT2Zmc2V0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgcGZiX2xlbiArPSB0ZW1wICsgNjsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAiICAgICAgICAgICAgIHRvdGFsIGJ1ZmZlciBzaXplIHRvIGNvbmNhdGVuYXRlICVkIgorICAgICAgICAgICAgICAgICIgUE9TVCBmcmFnbWVudHM6IDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgcmVzb3VyY2VfY250LCBwZmJfbGVuICsgMikpOworICAgIGlmICggcGZiX2xlbiArIDIgPCA2ICkgeworICAgICAgRlRfVFJBQ0UyKCggIiAgICAgICAgICAgICB0b28gbG9uZyBmcmFnbWVudCBsZW5ndGggbWFrZXMiCisgICAgICAgICAgICAgICAgICAiIHBmYl9sZW4gY29uZnVzZWQ6IHBmYl9sZW49MHglMDh4XG4iLCBwZmJfbGVuICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggQXJyYXlfVG9vX0xhcmdlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorICAgIGlmICggRlRfQUxMT0MoIHBmYl9kYXRhLCAoRlRfTG9uZylwZmJfbGVuICsgMiApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHBmYl9kYXRhWzBdID0gMHg4MDsKKyAgICBwZmJfZGF0YVsxXSA9IDE7ICAgICAgICAgICAgLyogQXNjaWkgc2VjdGlvbiAqLworICAgIHBmYl9kYXRhWzJdID0gMDsgICAgICAgICAgICAvKiA0LWJ5dGUgbGVuZ3RoLCBmaWxsIGluIGxhdGVyICovCisgICAgcGZiX2RhdGFbM10gPSAwOworICAgIHBmYl9kYXRhWzRdID0gMDsKKyAgICBwZmJfZGF0YVs1XSA9IDA7CisgICAgcGZiX3BvcyAgICAgPSA2OworICAgIHBmYl9sZW5wb3MgID0gMjsKKworICAgIGxlbiA9IDA7CisgICAgdHlwZSA9IDE7CisgICAgZm9yICggaSA9IDA7IGkgPCByZXNvdXJjZV9jbnQ7ICsraSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpb2Zmc2V0c1tpXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDI7CisgICAgICBpZiAoIEZUX1JFQURfVUxPTkcoIHJsZW4gKSApCisgICAgICAgIGdvdG8gRXhpdDI7CisKKyAgICAgIC8qIEZUMiBhbGxvY2F0b3IgdGFrZXMgc2lnbmVkIGxvbmcgYnVmZmVyIGxlbmd0aCwKKyAgICAgICAqIHRvbyBsYXJnZSBmcmFnbWVudCBsZW5ndGggY2F1c2luZyBvdmVyZmxvdyBzaG91bGQgYmUgY2hlY2tlZAorICAgICAgICovCisgICAgICBpZiAoIDB4N0ZGRkZGRkZVTCA8IHJsZW4gKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09mZnNldCApOworICAgICAgICBnb3RvIEV4aXQyOworICAgICAgfQorCisgICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBmbGFncyApICkKKyAgICAgICAgZ290byBFeGl0MjsKKyAgICAgIEZUX1RSQUNFMygoICJQT1NUIGZyYWdtZW50WyVkXTogb2Zmc2V0cz0weCUwOHgsIHJsZW49MHglMDh4LCBmbGFncz0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgaSwgb2Zmc2V0c1tpXSwgcmxlbiwgZmxhZ3MgKSk7CisKKyAgICAgIGVycm9yID0gRlRfRVJSKCBBcnJheV9Ub29fTGFyZ2UgKTsKKyAgICAgIC8qIHBvc3Rwb25lIHRoZSBjaGVjayBvZiBybGVuIGxvbmdlciB0aGFuIGJ1ZmZlciB1bnRpbCBGVF9TdHJlYW1fUmVhZCgpICovCisgICAgICBpZiAoICggZmxhZ3MgPj4gOCApID09IDAgKSAgICAgICAgLyogQ29tbWVudCwgc2hvdWxkIG5vdCBiZSBsb2FkZWQgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UzKCggIiAgICBTa2lwIFBPU1QgZnJhZ21lbnQgIyVkIGJlY2F1c2UgaXQgaXMgYSBjb21tZW50XG4iLCBpICkpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogdGhlIGZsYWdzIGFyZSBwYXJ0IG9mIHRoZSByZXNvdXJjZSwgc28gcmxlbiA+PSAyLiAgKi8KKyAgICAgIC8qIGJ1dCBzb21lIGZvbnRzIGRlY2xhcmUgcmxlbiA9IDAgZm9yIGVtcHR5IGZyYWdtZW50ICovCisgICAgICBpZiAoIHJsZW4gPiAyICkKKyAgICAgICAgcmxlbiAtPSAyOworICAgICAgZWxzZQorICAgICAgICBybGVuID0gMDsKKworICAgICAgaWYgKCAoIGZsYWdzID4+IDggKSA9PSB0eXBlICkKKyAgICAgICAgbGVuICs9IHJsZW47CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMygoICIgICAgV3JpdGUgUE9TVCBmcmFnbWVudCAjJWQgaGVhZGVyICg0LWJ5dGUpIHRvIGJ1ZmZlciIKKyAgICAgICAgICAgICAgICAgICAgIiAweCVwICsgMHglMDh4XG4iLCBpLCBwZmJfZGF0YSwgcGZiX2xlbnBvcyApKTsKKyAgICAgICAgaWYgKCBwZmJfbGVucG9zICsgMyA+IHBmYl9sZW4gKyAyICkKKyAgICAgICAgICBnb3RvIEV4aXQyOworICAgICAgICBwZmJfZGF0YVtwZmJfbGVucG9zICAgIF0gPSAoRlRfQnl0ZSkoIGxlbiApOworICAgICAgICBwZmJfZGF0YVtwZmJfbGVucG9zICsgMV0gPSAoRlRfQnl0ZSkoIGxlbiA+PiA4ICk7CisgICAgICAgIHBmYl9kYXRhW3BmYl9sZW5wb3MgKyAyXSA9IChGVF9CeXRlKSggbGVuID4+IDE2ICk7CisgICAgICAgIHBmYl9kYXRhW3BmYl9sZW5wb3MgKyAzXSA9IChGVF9CeXRlKSggbGVuID4+IDI0ICk7CisKKyAgICAgICAgaWYgKCAoIGZsYWdzID4+IDggKSA9PSA1ICkgICAgICAvKiBFbmQgb2YgZm9udCBtYXJrICovCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgRlRfVFJBQ0UzKCggIiAgICBXcml0ZSBQT1NUIGZyYWdtZW50ICMlZCBoZWFkZXIgKDYtYnl0ZSkgdG8gYnVmZmVyIgorICAgICAgICAgICAgICAgICAgICAiIDB4JXAgKyAweCUwOHhcbiIsIGksIHBmYl9kYXRhLCBwZmJfcG9zICkpOworICAgICAgICBpZiAoIHBmYl9wb3MgKyA2ID4gcGZiX2xlbiArIDIgKQorICAgICAgICAgIGdvdG8gRXhpdDI7CisgICAgICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAweDgwOworCisgICAgICAgIHR5cGUgPSBmbGFncyA+PiA4OworICAgICAgICBsZW4gPSBybGVuOworCisgICAgICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAoRlRfQnl0ZSl0eXBlOworICAgICAgICBwZmJfbGVucG9zICAgICAgICAgID0gcGZiX3BvczsKKyAgICAgICAgcGZiX2RhdGFbcGZiX3BvcysrXSA9IDA7ICAgICAgICAvKiA0LWJ5dGUgbGVuZ3RoLCBmaWxsIGluIGxhdGVyICovCisgICAgICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAwOworICAgICAgICBwZmJfZGF0YVtwZmJfcG9zKytdID0gMDsKKyAgICAgICAgcGZiX2RhdGFbcGZiX3BvcysrXSA9IDA7CisgICAgICB9CisKKyAgICAgIGlmICggcGZiX3BvcyA+IHBmYl9sZW4gfHwgcGZiX3BvcyArIHJsZW4gPiBwZmJfbGVuICkKKyAgICAgICAgZ290byBFeGl0MjsKKworICAgICAgRlRfVFJBQ0UzKCggIiAgICBMb2FkIFBPU1QgZnJhZ21lbnQgIyVkICglZCBieXRlKSB0byBidWZmZXIiCisgICAgICAgICAgICAgICAgICAiIDB4JXAgKyAweCUwOHhcbiIsIGksIHJsZW4sIHBmYl9kYXRhLCBwZmJfcG9zICkpOworICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXBmYl9kYXRhICsgcGZiX3BvcywgcmxlbiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDI7CisgICAgICBwZmJfcG9zICs9IHJsZW47CisgICAgfQorCisgICAgZXJyb3IgPSBGVF9FUlIoIEFycmF5X1Rvb19MYXJnZSApOworICAgIGlmICggcGZiX3BvcyArIDIgPiBwZmJfbGVuICsgMiApCisgICAgICBnb3RvIEV4aXQyOworICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAweDgwOworICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAzOworCisgICAgaWYgKCBwZmJfbGVucG9zICsgMyA+IHBmYl9sZW4gKyAyICkKKyAgICAgIGdvdG8gRXhpdDI7CisgICAgcGZiX2RhdGFbcGZiX2xlbnBvcyAgICBdID0gKEZUX0J5dGUpKCBsZW4gKTsKKyAgICBwZmJfZGF0YVtwZmJfbGVucG9zICsgMV0gPSAoRlRfQnl0ZSkoIGxlbiA+PiA4ICk7CisgICAgcGZiX2RhdGFbcGZiX2xlbnBvcyArIDJdID0gKEZUX0J5dGUpKCBsZW4gPj4gMTYgKTsKKyAgICBwZmJfZGF0YVtwZmJfbGVucG9zICsgM10gPSAoRlRfQnl0ZSkoIGxlbiA+PiAyNCApOworCisgICAgcmV0dXJuIG9wZW5fZmFjZV9mcm9tX2J1ZmZlciggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOworCisgIEV4aXQyOgorICAgIGlmICggZXJyb3IgPT0gRlRfRVJSKCBBcnJheV9Ub29fTGFyZ2UgKSApCisgICAgICBGVF9UUkFDRTIoKCAiICBBYm9ydCBkdWUgdG8gdG9vLXNob3J0IGJ1ZmZlciB0byBzdG9yZSIKKyAgICAgICAgICAgICAgICAgICIgYWxsIFBPU1QgZnJhZ21lbnRzXG4iICkpOworICAgIGVsc2UgaWYgKCBlcnJvciA9PSBGVF9FUlIoIEludmFsaWRfT2Zmc2V0ICkgKQorICAgICAgRlRfVFJBQ0UyKCggIiAgQWJvcnQgZHVlIHRvIGludmFsaWQgb2Zmc2V0IGluIGEgUE9TVCBmcmFnbWVudFxuIiApKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGVycm9yID0gRlRfRVJSKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIEZUX0ZSRUUoIHBmYl9kYXRhICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIFRoZSByZXNvdXJjZSBoZWFkZXIgc2F5cyB3ZSd2ZSBnb3QgcmVzb3VyY2VfY250IGBzZm50JyAgICAgICovCisgIC8qIChUcnVlVHlwZS9PcGVuVHlwZSkgcmVzb3VyY2VzIGluIHRoaXMgZmlsZS4gIExvb2sgdGhyb3VnaCAgICovCisgIC8qIHRoZW0gZm9yIHRoZSBvbmUgaW5kaWNhdGVkIGJ5IGZhY2VfaW5kZXgsIGxvYWQgaXQgaW50byBtZW0sICovCisgIC8qIHBhc3MgaXQgb24gdGhlIHRoZSB0cnVldHlwZSBkcml2ZXIgYW5kIHJldHVybiBpdC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBNYWNfUmVhZF9zZm50X1Jlc291cmNlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKm9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIHJlc291cmNlX2NudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAqYWZhY2UgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisgICAgRlRfQnl0ZSogICBzZm50X2RhdGEgPSBOVUxMOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfVUxvbmcgICBmbGFnX29mZnNldDsKKyAgICBGVF9Mb25nICAgIHJsZW47CisgICAgaW50ICAgICAgICBpc19jZmY7CisgICAgRlRfTG9uZyAgICBmYWNlX2luZGV4X2luX3Jlc291cmNlID0gMDsKKworCisgICAgaWYgKCBmYWNlX2luZGV4ID09IC0xICkKKyAgICAgIGZhY2VfaW5kZXggPSAwOworICAgIGlmICggZmFjZV9pbmRleCA+PSByZXNvdXJjZV9jbnQgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworCisgICAgZmxhZ19vZmZzZXQgPSAoRlRfVUxvbmcpb2Zmc2V0c1tmYWNlX2luZGV4XTsKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIGZsYWdfb2Zmc2V0ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX1JFQURfTE9ORyggcmxlbiApICkKKyAgICAgIGdvdG8gRXhpdDsKKyAgICBpZiAoIHJsZW4gPT0gLTEgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworCisgICAgZXJyb3IgPSBvcGVuX2ZhY2VfUFNfZnJvbV9zZm50X3N0cmVhbSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogcmV3aW5kIHNmbnQgc3RyZWFtIGJlZm9yZSBvcGVuX2ZhY2VfUFNfZnJvbV9zZm50X3N0cmVhbSgpICovCisgICAgaWYgKCBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCBmbGFnX29mZnNldCArIDQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX0FMTE9DKCBzZm50X2RhdGEsIHJsZW4gKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXNmbnRfZGF0YSwgKEZUX1VMb25nKXJsZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlzX2NmZiA9IHJsZW4gPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgIk9UVE8iLCA0ICk7CisgICAgZXJyb3IgPSBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXhfaW5fcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2NmZiA/ICJjZmYiIDogInRydWV0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogQ2hlY2sgZm9yIGEgdmFsaWQgcmVzb3VyY2UgZm9yayBoZWFkZXIsIG9yIGEgdmFsaWQgZGZvbnQgICAgKi8KKyAgLyogaGVhZGVyLiAgSW4gYSByZXNvdXJjZSBmb3JrIHRoZSBmaXJzdCAxNiBieXRlcyBhcmUgcmVwZWF0ZWQgKi8KKyAgLyogYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBieXRlcyA0LTcuICBJbiBhIGRmb250IGJ5dGVzICAgKi8KKyAgLyogNC03IHBvaW50IHRvIDE2IGJ5dGVzIG9mIHplcm9lcyBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIElzTWFjUmVzb3VyY2UoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgcmVzb3VyY2Vfb2Zmc2V0LAorICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICphZmFjZSApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX0xvbmcgICAgbWFwX29mZnNldCwgcmRhcmFfcG9zOworICAgIEZUX0xvbmcgICAgKmRhdGFfb2Zmc2V0czsKKyAgICBGVF9Mb25nICAgIGNvdW50OworCisKKyAgICBlcnJvciA9IEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8oIGxpYnJhcnksIHN0cmVhbSwgcmVzb3VyY2Vfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1hcF9vZmZzZXQsICZyZGFyYV9wb3MgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIFBPU1QgcmVzb3VyY2VzIG11c3QgYmUgc29ydGVkIHRvIGNvbmNhdGVuYXRlIHByb3Blcmx5ICovCisgICAgZXJyb3IgPSBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyggbGlicmFyeSwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcF9vZmZzZXQsIHJkYXJhX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVEFHX1BPU1QsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0cywgJmNvdW50ICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gTWFjX1JlYWRfUE9TVF9SZXNvdXJjZSggbGlicmFyeSwgc3RyZWFtLCBkYXRhX29mZnNldHMsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LCBhZmFjZSApOworICAgICAgRlRfRlJFRSggZGF0YV9vZmZzZXRzICk7CisgICAgICAvKiBQT1NUIGV4aXN0cyBpbiBhbiBMV0ZOIHByb3ZpZGluZyBhIHNpbmdsZSBmYWNlICovCisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICgqYWZhY2UpLT5udW1fZmFjZXMgPSAxOworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIHNmbnQgcmVzb3VyY2VzIHNob3VsZCBub3QgYmUgc29ydGVkIHRvIHByZXNlcnZlIHRoZSBmYWNlIG9yZGVyIGJ5CisgICAgICAgUXVpY2tEcmF3IEFQSSAqLworICAgIGVycm9yID0gRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMoIGxpYnJhcnksIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfb2Zmc2V0LCByZGFyYV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRBR19zZm50LCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vZmZzZXRzLCAmY291bnQgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgRlRfTG9uZyAgZmFjZV9pbmRleF9pbnRlcm5hbCA9IGZhY2VfaW5kZXggJSBjb3VudDsKKworCisgICAgICBlcnJvciA9IE1hY19SZWFkX3NmbnRfUmVzb3VyY2UoIGxpYnJhcnksIHN0cmVhbSwgZGF0YV9vZmZzZXRzLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleF9pbnRlcm5hbCwgYWZhY2UgKTsKKyAgICAgIEZUX0ZSRUUoIGRhdGFfb2Zmc2V0cyApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICAoKmFmYWNlKS0+bnVtX2ZhY2VzID0gY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBDaGVjayBmb3IgYSB2YWxpZCBtYWNiaW5hcnkgaGVhZGVyLCBhbmQgaWYgd2UgZmluZCBvbmUgICAqLworICAvKiBjaGVjayB0aGF0IHRoZSAoZmxhdHRlbmVkKSByZXNvdXJjZSBmb3JrIGluIGl0IGlzIHZhbGlkLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgSXNNYWNCaW5hcnkoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgRlRfRmFjZSAgICAqYWZhY2UgKQorICB7CisgICAgdW5zaWduZWQgY2hhciAgaGVhZGVyWzEyOF07CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CisgICAgRlRfTG9uZyAgICAgICAgZGxlbiwgb2Zmc2V0OworCisKKyAgICBpZiAoIE5VTEwgPT0gc3RyZWFtICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUqKWhlYWRlciwgMTI4ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoICAgICAgICAgICAgaGVhZGVyWyAwXSAhPSAgMCB8fAorICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNzRdICE9ICAwIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls4Ml0gIT0gIDAgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWyAxXSA9PSAgMCB8fAorICAgICAgICAgICAgICAgICAgICBoZWFkZXJbIDFdID4gIDMzIHx8CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls2M10gIT0gIDAgfHwKKyAgICAgICAgIGhlYWRlclsyICsgaGVhZGVyWzFdXSAhPSAgMCApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIGRsZW4gPSAoIGhlYWRlclsweDUzXSA8PCAyNCApIHwKKyAgICAgICAgICAgKCBoZWFkZXJbMHg1NF0gPDwgMTYgKSB8CisgICAgICAgICAgICggaGVhZGVyWzB4NTVdIDw8ICA4ICkgfAorICAgICAgICAgICAgIGhlYWRlclsweDU2XTsKKyNpZiAwCisgICAgcmxlbiA9ICggaGVhZGVyWzB4NTddIDw8IDI0ICkgfAorICAgICAgICAgICAoIGhlYWRlclsweDU4XSA8PCAxNiApIHwKKyAgICAgICAgICAgKCBoZWFkZXJbMHg1OV0gPDwgIDggKSB8CisgICAgICAgICAgICAgaGVhZGVyWzB4NUFdOworI2VuZGlmIC8qIDAgKi8KKyAgICBvZmZzZXQgPSAxMjggKyAoICggZGxlbiArIDEyNyApICYgfjEyNyApOworCisgICAgcmV0dXJuIElzTWFjUmVzb3VyY2UoIGxpYnJhcnksIHN0cmVhbSwgb2Zmc2V0LCBmYWNlX2luZGV4LCBhZmFjZSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgbG9hZF9mYWNlX2luX2VtYmVkZGVkX3Jmb3JrKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgICAgKmFmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX09wZW5fQXJncyAgKmFyZ3MgKQorICB7CisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcmFjY2VzcworCisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FUlIoIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICBGVF9VSW50ICAgIGk7CisKKyAgICBjaGFyICogICAgIGZpbGVfbmFtZXNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKKyAgICBGVF9Mb25nICAgIG9mZnNldHNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKKyAgICBGVF9FcnJvciAgIGVycm9yc1tGVF9SQUNDRVNTX05fUlVMRVNdOworICAgIEZUX0Jvb2wgICAgaXNfZGFyd2luX3ZmcywgdmZzX3Jmb3JrX2hhc19ub19mb250ID0gRkFMU0U7IC8qIG5vdCB0ZXN0ZWQgKi8KKworICAgIEZUX09wZW5fQXJncyAgYXJnczI7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW0yID0gTlVMTDsKKworCisgICAgRlRfUmFjY2Vzc19HdWVzcyggbGlicmFyeSwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPnBhdGhuYW1lLCBmaWxlX25hbWVzLCBvZmZzZXRzLCBlcnJvcnMgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgRlRfUkFDQ0VTU19OX1JVTEVTOyBpKysgKQorICAgIHsKKyAgICAgIGlzX2Rhcndpbl92ZnMgPSBmdF9yYWNjZXNzX3J1bGVfYnlfZGFyd2luX3ZmcyggbGlicmFyeSwgaSApOworICAgICAgaWYgKCBpc19kYXJ3aW5fdmZzICYmIHZmc19yZm9ya19oYXNfbm9fZm9udCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMygoICJTa2lwIHJ1bGUgJWQ6IGRhcndpbiB2ZnMgcmVzb3VyY2UgZm9yayIKKyAgICAgICAgICAgICAgICAgICAgIiBpcyBhbHJlYWR5IGNoZWNrZWQgYW5kIgorICAgICAgICAgICAgICAgICAgICAiIG5vIGZvbnQgaXMgZm91bmRcbiIsIGkgKSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoIGVycm9yc1tpXSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMygoICJFcnJvclslZF0gaGFzIG9jY3VycmVkIGluIHJ1bGUgJWRcbiIsIGVycm9yc1tpXSwgaSApKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGFyZ3MyLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICAgIGFyZ3MyLnBhdGhuYW1lID0gZmlsZV9uYW1lc1tpXSA/IGZpbGVfbmFtZXNbaV0gOiBhcmdzLT5wYXRobmFtZTsKKworICAgICAgRlRfVFJBQ0UzKCggIlRyeSBydWxlICVkOiAlcyAob2Zmc2V0PSVkKSAuLi4iLAorICAgICAgICAgICAgICAgICAgaSwgYXJnczIucGF0aG5hbWUsIG9mZnNldHNbaV0gKSk7CisKKyAgICAgIGVycm9yID0gRlRfU3RyZWFtX05ldyggbGlicmFyeSwgJmFyZ3MyLCAmc3RyZWFtMiApOworICAgICAgaWYgKCBpc19kYXJ3aW5fdmZzICYmIEZUX0VSUl9FUSggZXJyb3IsIENhbm5vdF9PcGVuX1N0cmVhbSApICkKKyAgICAgICAgdmZzX3Jmb3JrX2hhc19ub19mb250ID0gVFJVRTsKKworICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMygoICJmYWlsZWRcbiIgKSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBlcnJvciA9IElzTWFjUmVzb3VyY2UoIGxpYnJhcnksIHN0cmVhbTIsIG9mZnNldHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsIGFmYWNlICk7CisgICAgICBGVF9TdHJlYW1fRnJlZSggc3RyZWFtMiwgMCApOworCisgICAgICBGVF9UUkFDRTMoKCAiJXNcbiIsIGVycm9yID8gImZhaWxlZCI6ICJzdWNjZXNzZnVsIiApKTsKKworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICAgIGJyZWFrOworICAgICAgZWxzZSBpZiAoIGlzX2Rhcndpbl92ZnMgKQorICAgICAgICAgIHZmc19yZm9ya19oYXNfbm9fZm9udCA9IFRSVUU7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IEZUX1JBQ0NFU1NfTl9SVUxFUzsgaSsrKQorICAgIHsKKyAgICAgIGlmICggZmlsZV9uYW1lc1tpXSApCisgICAgICAgIEZUX0ZSRUUoIGZpbGVfbmFtZXNbaV0gKTsKKyAgICB9CisKKyAgICAvKiBDYWxsZXIgKGxvYWRfbWFjX2ZhY2UpIHJlcXVpcmVzIEZUX0Vycl9Vbmtub3duX0ZpbGVfRm9ybWF0LiAqLworICAgIGlmICggZXJyb3IgKQorICAgICAgZXJyb3IgPSBGVF9FUlIoIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIHJldHVybiBlcnJvcjsKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vYmpzCisKKyAgfQorCisKKyAgLyogQ2hlY2sgZm9yIHNvbWUgbWFjaW50b3NoIGZvcm1hdHMgd2l0aG91dCBDYXJib24gZnJhbWV3b3JrLiAgICAqLworICAvKiBJcyB0aGlzIGEgbWFjYmluYXJ5IGZpbGU/ICBJZiBzbyBsb29rIGF0IHRoZSByZXNvdXJjZSBmb3JrLiAgICovCisgIC8qIElzIHRoaXMgYSBtYWMgZGZvbnQgZmlsZT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSXMgdGhpcyBhbiBvbGQgc3R5bGUgcmVzb3VyY2UgZm9yaz8gKGluIGRhdGEpICAgICAgICAgICAgICAgICAqLworICAvKiBFbHNlIGNhbGwgbG9hZF9mYWNlX2luX2VtYmVkZGVkX3Jmb3JrIHRvIHRyeSBleHRyYSBydWxlcyAgICAgICovCisgIC8qIChkZWZpbmVkIGluIGBmdHJmb3JrLmMnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgbG9hZF9tYWNfZmFjZSggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgICAgICphZmFjZSwKKyAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3Blbl9BcmdzICAqYXJncyApCisgIHsKKyAgICBGVF9FcnJvciBlcnJvcjsKKyAgICBGVF9VTlVTRUQoIGFyZ3MgKTsKKworCisgICAgZXJyb3IgPSBJc01hY0JpbmFyeSggbGlicmFyeSwgc3RyZWFtLCBmYWNlX2luZGV4LCBhZmFjZSApOworICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICkKKyAgICB7CisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcmFjY2VzcworCisgICAgICBGVF9UUkFDRTMoKCAiVHJ5IGFzIGRmb250OiAlcyAuLi4iLCBhcmdzLT5wYXRobmFtZSApKTsKKworICAgICAgZXJyb3IgPSBJc01hY1Jlc291cmNlKCBsaWJyYXJ5LCBzdHJlYW0sIDAsIGZhY2VfaW5kZXgsIGFmYWNlICk7CisKKyAgICAgIEZUX1RSQUNFMygoICIlc1xuIiwgZXJyb3IgPyAiZmFpbGVkIiA6ICJzdWNjZXNzZnVsIiApKTsKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vYmpzCisKKyAgICB9CisKKyAgICBpZiAoICggRlRfRVJSX0VRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICAgICAgfHwKKyAgICAgICAgICAgRlRfRVJSX0VRKCBlcnJvciwgSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICkgKSAmJgorICAgICAgICAgKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fUEFUSE5BTUUgKSAgICAgICAgICAgICAgICkKKyAgICAgIGVycm9yID0gbG9hZF9mYWNlX2luX2VtYmVkZGVkX3Jmb3JrKCBsaWJyYXJ5LCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwgYWZhY2UsIGFyZ3MgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKyNlbmRpZgorCisjZW5kaWYgIC8qICFGVF9NQUNJTlRPU0ggJiYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMgKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3Blbl9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgIGNvbnN0IEZUX09wZW5fQXJncyogIGFyZ3MsCisgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAgICAgICphZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgRlRfRHJpdmVyICAgIGRyaXZlciA9IE5VTEw7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSA9IE5VTEw7CisgICAgRlRfU3RyZWFtICAgIHN0cmVhbSA9IE5VTEw7CisgICAgRlRfRmFjZSAgICAgIGZhY2UgICA9IE5VTEw7CisgICAgRlRfTGlzdE5vZGUgIG5vZGUgICA9IE5VTEw7CisgICAgRlRfQm9vbCAgICAgIGV4dGVybmFsX3N0cmVhbTsKKyAgICBGVF9Nb2R1bGUqICAgY3VyOworICAgIEZUX01vZHVsZSogICBsaW1pdDsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGRlbGF5ZWQgdG8gYEZUX1N0cmVhbV9OZXcnICovCisKKyAgICBpZiAoICggIWFmYWNlICYmIGZhY2VfaW5kZXggPj0gMCApIHx8ICFhcmdzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZXh0ZXJuYWxfc3RyZWFtID0gRlRfQk9PTCggKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fU1RSRUFNICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5zdHJlYW0gICAgICAgICAgICAgICAgICAgICApOworCisgICAgLyogY3JlYXRlIGlucHV0IHN0cmVhbSAqLworICAgIGVycm9yID0gRlRfU3RyZWFtX05ldyggbGlicmFyeSwgYXJncywgJnN0cmVhbSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsMzsKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIC8qIElmIHRoZSBmb250IGRyaXZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGBhcmdzJyBzdHJ1Y3R1cmUsIHVzZSAqLworICAgIC8qIGl0LiAgT3RoZXJ3aXNlLCB3ZSBzY2FuIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZHJpdmVycy4gICAgICAqLworICAgIGlmICggKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fRFJJVkVSICkgJiYgYXJncy0+ZHJpdmVyICkKKyAgICB7CisgICAgICBkcml2ZXIgPSBGVF9EUklWRVIoIGFyZ3MtPmRyaXZlciApOworCisgICAgICAvKiBub3QgYWxsIG1vZHVsZXMgYXJlIGRyaXZlcnMsIHNvIGNoZWNrLi4uICovCisgICAgICBpZiAoIEZUX01PRFVMRV9JU19EUklWRVIoIGRyaXZlciApICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcyA9IDA7CisgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyAgICAgPSBOVUxMOworCisKKyAgICAgICAgaWYgKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fUEFSQU1TICkKKyAgICAgICAgeworICAgICAgICAgIG51bV9wYXJhbXMgPSBhcmdzLT5udW1fcGFyYW1zOworICAgICAgICAgIHBhcmFtcyAgICAgPSBhcmdzLT5wYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IG9wZW5fZmFjZSggZHJpdmVyLCAmc3RyZWFtLCBleHRlcm5hbF9zdHJlYW0sIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFyYW1zLCBwYXJhbXMsICZmYWNlICk7CisgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICBnb3RvIFN1Y2Nlc3M7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfSGFuZGxlICk7CisKKyAgICAgIEZUX1N0cmVhbV9GcmVlKCBzdHJlYW0sIGV4dGVybmFsX3N0cmVhbSApOworICAgICAgZ290byBGYWlsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIE1pc3NpbmdfTW9kdWxlICk7CisKKyAgICAgIC8qIGNoZWNrIGVhY2ggZm9udCBkcml2ZXIgZm9yIGFuIGFwcHJvcHJpYXRlIGZvcm1hdCAqLworICAgICAgY3VyICAgPSBsaWJyYXJ5LT5tb2R1bGVzOworICAgICAgbGltaXQgPSBjdXIgKyBsaWJyYXJ5LT5udW1fbW9kdWxlczsKKworICAgICAgZm9yICggOyBjdXIgPCBsaW1pdDsgY3VyKysgKQorICAgICAgeworICAgICAgICAvKiBub3QgYWxsIG1vZHVsZXMgYXJlIGZvbnQgZHJpdmVycywgc28gY2hlY2suLi4gKi8KKyAgICAgICAgaWYgKCBGVF9NT0RVTEVfSVNfRFJJVkVSKCBjdXJbMF0gKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zID0gMDsKKyAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgICAgID0gTlVMTDsKKworCisgICAgICAgICAgZHJpdmVyID0gRlRfRFJJVkVSKCBjdXJbMF0gKTsKKworICAgICAgICAgIGlmICggYXJncy0+ZmxhZ3MgJiBGVF9PUEVOX1BBUkFNUyApCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtX3BhcmFtcyA9IGFyZ3MtPm51bV9wYXJhbXM7CisgICAgICAgICAgICBwYXJhbXMgICAgID0gYXJncy0+cGFyYW1zOworICAgICAgICAgIH0KKworICAgICAgICAgIGVycm9yID0gb3Blbl9mYWNlKCBkcml2ZXIsICZzdHJlYW0sIGV4dGVybmFsX3N0cmVhbSwgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BhcmFtcywgcGFyYW1zLCAmZmFjZSApOworICAgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICAgIGdvdG8gU3VjY2VzczsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCisgICAgICAgICAgaWYgKCBmdF9zdHJjbXAoIGN1clswXS0+Y2xhenotPm1vZHVsZV9uYW1lLCAidHJ1ZXR5cGUiICkgPT0gMCAmJgorICAgICAgICAgICAgICAgRlRfRVJSX0VRKCBlcnJvciwgVGFibGVfTWlzc2luZyApICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRydWVUeXBlIGJ1dCBlc3NlbnRpYWwgdGFibGVzIGFyZSBtaXNzaW5nICovCisgICAgICAgICAgICBpZiAoIEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIDAgKSApCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBlcnJvciA9IG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOworICAgICAgICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9TdHJlYW1fRnJlZSggc3RyZWFtLCBleHRlcm5hbF9zdHJlYW0gKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgaWYgKCBGVF9FUlJfTkVRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDM7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIEZhaWwzOgorICAgICAgLyogSWYgd2UgYXJlIG9uIHRoZSBtYWMsIGFuZCB3ZSBnZXQgYW4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBGVF9FcnJfSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uIGl0IG1heSBiZSBiZWNhdXNlIHdlIGhhdmUgYW4gKi8KKyAgICAgIC8qIGVtcHR5IGRhdGEgZm9yaywgc28gd2UgbmVlZCB0byBjaGVjayB0aGUgcmVzb3VyY2UgZm9yay4gICAgICAqLworICAgICAgaWYgKCBGVF9FUlJfTkVRKCBlcnJvciwgQ2Fubm90X09wZW5fU3RyZWFtICkgICAgICAgJiYKKyAgICAgICAgICAgRlRfRVJSX05FUSggZXJyb3IsIFVua25vd25fRmlsZV9Gb3JtYXQgKSAgICAgICYmCisgICAgICAgICAgIEZUX0VSUl9ORVEoIGVycm9yLCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKSApCisgICAgICAgIGdvdG8gRmFpbDI7CisKKyNpZiAhZGVmaW5lZCggRlRfTUFDSU5UT1NIICkgJiYgZGVmaW5lZCggRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMgKQorICAgICAgZXJyb3IgPSBsb2FkX21hY19mYWNlKCBsaWJyYXJ5LCBzdHJlYW0sIGZhY2VfaW5kZXgsIGFmYWNlLCBhcmdzICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gZ28gdG8gU3VjY2VzcyBoZXJlLiAgV2UndmUgYWxyZWFkeSBkb25lIHRoYXQuICovCisgICAgICAgIC8qIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBzdWNjZWVkZWQgd2Ugc3RpbGwgbmVlZCB0byBjbG9zZSB0aGlzICovCisgICAgICAgIC8qIHN0cmVhbSAod2Ugb3BlbmVkIGEgZGlmZmVyZW50IHN0cmVhbSB3aGljaCBleHRyYWN0ZWQgdGhlICAgICAgICovCisgICAgICAgIC8qIGludGVyZXN0aW5nIGluZm9ybWF0aW9uIG91dCBvZiB0aGlzIHN0cmVhbSBoZXJlLiAgVGhhdCBzdHJlYW0gICovCisgICAgICAgIC8qIHdpbGwgc3RpbGwgYmUgb3BlbiBhbmQgdGhlIGZhY2Ugd2lsbCBwb2ludCB0byBpdCkuICAgICAgICAgICAgICovCisgICAgICAgIEZUX1N0cmVhbV9GcmVlKCBzdHJlYW0sIGV4dGVybmFsX3N0cmVhbSApOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICB9CisKKyAgICAgIGlmICggRlRfRVJSX05FUSggZXJyb3IsIFVua25vd25fRmlsZV9Gb3JtYXQgKSApCisgICAgICAgIGdvdG8gRmFpbDI7CisjZW5kaWYgIC8qICFGVF9NQUNJTlRPU0ggJiYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMgKi8KKworICAgICAgLyogbm8gZHJpdmVyIGlzIGFibGUgdG8gaGFuZGxlIHRoaXMgZm9ybWF0ICovCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgRmFpbDI6CisgICAgICBGVF9TdHJlYW1fRnJlZSggc3RyZWFtLCBleHRlcm5hbF9zdHJlYW0gKTsKKyAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgU3VjY2VzczoKKyAgICBGVF9UUkFDRTQoKCAiRlRfT3Blbl9GYWNlOiBOZXcgZmFjZSBvYmplY3QsIGFkZGluZyB0byBsaXN0XG4iICkpOworCisgICAgLyogYWRkIHRoZSBmYWNlIG9iamVjdCB0byBpdHMgZHJpdmVyJ3MgbGlzdCAqLworICAgIGlmICggRlRfTkVXKCBub2RlICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgbm9kZS0+ZGF0YSA9IGZhY2U7CisgICAgLyogZG9uJ3QgYXNzdW1lIGRyaXZlciBpcyB0aGUgc2FtZSBhcyBmYWNlLT5kcml2ZXIsIHNvIHVzZSAqLworICAgIC8qIGZhY2UtPmRyaXZlciBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9MaXN0X0FkZCggJmZhY2UtPmRyaXZlci0+ZmFjZXNfbGlzdCwgbm9kZSApOworCisgICAgLyogbm93IGFsbG9jYXRlIGEgZ2x5cGggc2xvdCBvYmplY3QgZm9yIHRoZSBmYWNlICovCisgICAgRlRfVFJBQ0U0KCggIkZUX09wZW5fRmFjZTogQ3JlYXRpbmcgZ2x5cGggc2xvdFxuIiApKTsKKworICAgIGlmICggZmFjZV9pbmRleCA+PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX05ld19HbHlwaFNsb3QoIGZhY2UsIE5VTEwgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIC8qIGZpbmFsbHksIGFsbG9jYXRlIGEgc2l6ZSBvYmplY3QgZm9yIHRoZSBmYWNlICovCisgICAgICB7CisgICAgICAgIEZUX1NpemUgIHNpemU7CisKKworICAgICAgICBGVF9UUkFDRTQoKCAiRlRfT3Blbl9GYWNlOiBDcmVhdGluZyBzaXplIG9iamVjdFxuIiApKTsKKworICAgICAgICBlcnJvciA9IEZUX05ld19TaXplKCBmYWNlLCAmc2l6ZSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZmFjZS0+c2l6ZSA9IHNpemU7CisgICAgICB9CisgICAgfQorCisgICAgLyogc29tZSBjaGVja3MgKi8KKworICAgIGlmICggRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSApCisgICAgeworICAgICAgaWYgKCBmYWNlLT5oZWlnaHQgPCAwICkKKyAgICAgICAgZmFjZS0+aGVpZ2h0ID0gKEZUX1Nob3J0KS1mYWNlLT5oZWlnaHQ7CisKKyAgICAgIGlmICggIUZUX0hBU19WRVJUSUNBTCggZmFjZSApICkKKyAgICAgICAgZmFjZS0+bWF4X2FkdmFuY2VfaGVpZ2h0ID0gKEZUX1Nob3J0KWZhY2UtPmhlaWdodDsKKyAgICB9CisKKyAgICBpZiAoIEZUX0hBU19GSVhFRF9TSVpFUyggZmFjZSApICkKKyAgICB7CisgICAgICBGVF9JbnQgIGk7CisKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlLT5udW1fZml4ZWRfc2l6ZXM7IGkrKyApCisgICAgICB7CisgICAgICAgIEZUX0JpdG1hcF9TaXplKiAgYnNpemUgPSBmYWNlLT5hdmFpbGFibGVfc2l6ZXMgKyBpOworCisKKyAgICAgICAgaWYgKCBic2l6ZS0+aGVpZ2h0IDwgMCApCisgICAgICAgICAgYnNpemUtPmhlaWdodCA9IChGVF9TaG9ydCktYnNpemUtPmhlaWdodDsKKyAgICAgICAgaWYgKCBic2l6ZS0+eF9wcGVtIDwgMCApCisgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IChGVF9TaG9ydCktYnNpemUtPnhfcHBlbTsKKyAgICAgICAgaWYgKCBic2l6ZS0+eV9wcGVtIDwgMCApCisgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IC1ic2l6ZS0+eV9wcGVtOworICAgICAgfQorICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgaW50ZXJuYWwgZmFjZSBkYXRhICovCisgICAgeworICAgICAgRlRfRmFjZV9JbnRlcm5hbCAgaW50ZXJuYWwgPSBmYWNlLT5pbnRlcm5hbDsKKworCisgICAgICBpbnRlcm5hbC0+dHJhbnNmb3JtX21hdHJpeC54eCA9IDB4MTAwMDBMOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueHkgPSAwOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueXggPSAwOworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9tYXRyaXgueXkgPSAweDEwMDAwTDsKKworICAgICAgaW50ZXJuYWwtPnRyYW5zZm9ybV9kZWx0YS54ID0gMDsKKyAgICAgIGludGVybmFsLT50cmFuc2Zvcm1fZGVsdGEueSA9IDA7CisKKyAgICAgIGludGVybmFsLT5yZWZjb3VudCA9IDE7CisgICAgfQorCisgICAgaWYgKCBhZmFjZSApCisgICAgICAqYWZhY2UgPSBmYWNlOworICAgIGVsc2UKKyAgICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOworCisgICAgZ290byBFeGl0OworCisgIEZhaWw6CisgICAgaWYgKCBub2RlICkKKyAgICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOyAgICAvKiBmYWNlIG11c3QgYmUgaW4gdGhlIGRyaXZlcidzIGxpc3QgKi8KKyAgICBlbHNlIGlmICggZmFjZSApCisgICAgICBkZXN0cm95X2ZhY2UoIG1lbW9yeSwgZmFjZSwgZHJpdmVyICk7CisKKyAgRXhpdDoKKyAgICBGVF9UUkFDRTQoKCAiRlRfT3Blbl9GYWNlOiBSZXR1cm4gJWRcbiIsIGVycm9yICkpOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0F0dGFjaF9GaWxlKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKQorICB7CisgICAgRlRfT3Blbl9BcmdzICBvcGVuOworCisKKyAgICAvKiB0ZXN0IGZvciB2YWxpZCBgZmFjZScgZGVsYXllZCB0byBgRlRfQXR0YWNoX1N0cmVhbScgKi8KKworICAgIGlmICggIWZpbGVwYXRobmFtZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIG9wZW4uc3RyZWFtICAgPSBOVUxMOworICAgIG9wZW4uZmxhZ3MgICAgPSBGVF9PUEVOX1BBVEhOQU1FOworICAgIG9wZW4ucGF0aG5hbWUgPSAoY2hhciopZmlsZXBhdGhuYW1lOworCisgICAgcmV0dXJuIEZUX0F0dGFjaF9TdHJlYW0oIGZhY2UsICZvcGVuICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfQXR0YWNoX1N0cmVhbSggRlRfRmFjZSAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfT3Blbl9BcmdzKiAgcGFyYW1ldGVycyApCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX0RyaXZlciAgZHJpdmVyOworCisgICAgRlRfRHJpdmVyX0NsYXNzICBjbGF6ejsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYHBhcmFtZXRlcnMnIGRlbGF5ZWQgdG8gYEZUX1N0cmVhbV9OZXcnICovCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgZHJpdmVyID0gZmFjZS0+ZHJpdmVyOworICAgIGlmICggIWRyaXZlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRHJpdmVyX0hhbmRsZSApOworCisgICAgZXJyb3IgPSBGVF9TdHJlYW1fTmV3KCBkcml2ZXItPnJvb3QubGlicmFyeSwgcGFyYW1ldGVycywgJnN0cmVhbSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogd2UgaW1wbGVtZW50IEZUX0F0dGFjaF9TdHJlYW0gaW4gZWFjaCBkcml2ZXIgdGhyb3VnaCB0aGUgKi8KKyAgICAvKiBgYXR0YWNoX2ZpbGUnIGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgIGNsYXp6ID0gZHJpdmVyLT5jbGF6ejsKKyAgICBpZiAoIGNsYXp6LT5hdHRhY2hfZmlsZSApCisgICAgICBlcnJvciA9IGNsYXp6LT5hdHRhY2hfZmlsZSggZmFjZSwgc3RyZWFtICk7CisKKyAgICAvKiBjbG9zZSB0aGUgYXR0YWNoZWQgc3RyZWFtICovCisgICAgRlRfU3RyZWFtX0ZyZWUoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0Jvb2wpKCBwYXJhbWV0ZXJzLT5zdHJlYW0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBhcmFtZXRlcnMtPmZsYWdzICYgRlRfT1BFTl9TVFJFQU0gKSApICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUmVmZXJlbmNlX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGZhY2UtPmludGVybmFsLT5yZWZjb3VudCsrOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Eb25lX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfRXJyb3IgICAgIGVycm9yOworICAgIEZUX0RyaXZlciAgICBkcml2ZXI7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKKyAgICBGVF9MaXN0Tm9kZSAgbm9kZTsKKworCisgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKyAgICBpZiAoIGZhY2UgJiYgZmFjZS0+ZHJpdmVyICkKKyAgICB7CisgICAgICBmYWNlLT5pbnRlcm5hbC0+cmVmY291bnQtLTsKKyAgICAgIGlmICggZmFjZS0+aW50ZXJuYWwtPnJlZmNvdW50ID4gMCApCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBkcml2ZXIgPSBmYWNlLT5kcml2ZXI7CisgICAgICAgIG1lbW9yeSA9IGRyaXZlci0+cm9vdC5tZW1vcnk7CisKKyAgICAgICAgLyogZmluZCBmYWNlIGluIGRyaXZlcidzIGxpc3QgKi8KKyAgICAgICAgbm9kZSA9IEZUX0xpc3RfRmluZCggJmRyaXZlci0+ZmFjZXNfbGlzdCwgZmFjZSApOworICAgICAgICBpZiAoIG5vZGUgKQorICAgICAgICB7CisgICAgICAgICAgLyogcmVtb3ZlIGZhY2Ugb2JqZWN0IGZyb20gdGhlIGRyaXZlcidzIGxpc3QgKi8KKyAgICAgICAgICBGVF9MaXN0X1JlbW92ZSggJmRyaXZlci0+ZmFjZXNfbGlzdCwgbm9kZSApOworICAgICAgICAgIEZUX0ZSRUUoIG5vZGUgKTsKKworICAgICAgICAgIC8qIG5vdyBkZXN0cm95IHRoZSBvYmplY3QgcHJvcGVyICovCisgICAgICAgICAgZGVzdHJveV9mYWNlKCBtZW1vcnksIGZhY2UsIGRyaXZlciApOworICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfU2l6ZSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICBGVF9TaXplICAqYXNpemUgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeTsKKyAgICBGVF9Ecml2ZXIgICAgICAgIGRyaXZlcjsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIGNsYXp6OworCisgICAgRlRfU2l6ZSAgICAgICAgICBzaXplID0gTlVMTDsKKyAgICBGVF9MaXN0Tm9kZSAgICAgIG5vZGUgPSBOVUxMOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhYXNpemUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoICFmYWNlLT5kcml2ZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0RyaXZlcl9IYW5kbGUgKTsKKworICAgICphc2l6ZSA9IE5VTEw7CisKKyAgICBkcml2ZXIgPSBmYWNlLT5kcml2ZXI7CisgICAgY2xhenogID0gZHJpdmVyLT5jbGF6ejsKKyAgICBtZW1vcnkgPSBmYWNlLT5tZW1vcnk7CisKKyAgICAvKiBBbGxvY2F0ZSBuZXcgc2l6ZSBvYmplY3QgYW5kIHBlcmZvcm0gYmFzaWMgaW5pdGlhbGlzYXRpb24gKi8KKyAgICBpZiAoIEZUX0FMTE9DKCBzaXplLCBjbGF6ei0+c2l6ZV9vYmplY3Rfc2l6ZSApIHx8IEZUX05FVyggbm9kZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHNpemUtPmZhY2UgPSBmYWNlOworCisgICAgLyogZm9yIG5vdywgZG8gbm90IHVzZSBhbnkgaW50ZXJuYWwgZmllbGRzIGluIHNpemUgb2JqZWN0cyAqLworICAgIHNpemUtPmludGVybmFsID0gTlVMTDsKKworICAgIGlmICggY2xhenotPmluaXRfc2l6ZSApCisgICAgICBlcnJvciA9IGNsYXp6LT5pbml0X3NpemUoIHNpemUgKTsKKworICAgIC8qIGluIGNhc2Ugb2Ygc3VjY2VzcywgYWRkIHRvIHRoZSBmYWNlJ3MgbGlzdCAqLworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAqYXNpemUgICAgID0gc2l6ZTsKKyAgICAgIG5vZGUtPmRhdGEgPSBzaXplOworICAgICAgRlRfTGlzdF9BZGQoICZmYWNlLT5zaXplc19saXN0LCBub2RlICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgRlRfRlJFRSggbm9kZSApOworICAgICAgRlRfRlJFRSggc2l6ZSApOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfRG9uZV9TaXplKCBGVF9TaXplICBzaXplICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVF9Ecml2ZXIgICAgZHJpdmVyOworICAgIEZUX01lbW9yeSAgICBtZW1vcnk7CisgICAgRlRfRmFjZSAgICAgIGZhY2U7CisgICAgRlRfTGlzdE5vZGUgIG5vZGU7CisKKworICAgIGlmICggIXNpemUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1NpemVfSGFuZGxlICk7CisKKyAgICBmYWNlID0gc2l6ZS0+ZmFjZTsKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgZHJpdmVyID0gZmFjZS0+ZHJpdmVyOworICAgIGlmICggIWRyaXZlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRHJpdmVyX0hhbmRsZSApOworCisgICAgbWVtb3J5ID0gZHJpdmVyLT5yb290Lm1lbW9yeTsKKworICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIG5vZGUgID0gRlRfTGlzdF9GaW5kKCAmZmFjZS0+c2l6ZXNfbGlzdCwgc2l6ZSApOworICAgIGlmICggbm9kZSApCisgICAgeworICAgICAgRlRfTGlzdF9SZW1vdmUoICZmYWNlLT5zaXplc19saXN0LCBub2RlICk7CisgICAgICBGVF9GUkVFKCBub2RlICk7CisKKyAgICAgIGlmICggZmFjZS0+c2l6ZSA9PSBzaXplICkKKyAgICAgIHsKKyAgICAgICAgZmFjZS0+c2l6ZSA9IE5VTEw7CisgICAgICAgIGlmICggZmFjZS0+c2l6ZXNfbGlzdC5oZWFkICkKKyAgICAgICAgICBmYWNlLT5zaXplID0gKEZUX1NpemUpKGZhY2UtPnNpemVzX2xpc3QuaGVhZC0+ZGF0YSk7CisgICAgICB9CisKKyAgICAgIGRlc3Ryb3lfc2l6ZSggbWVtb3J5LCBzaXplLCBkcml2ZXIgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TaXplX0hhbmRsZSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTWF0Y2hfU2l6ZSggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSwKKyAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICBpZ25vcmVfd2lkdGgsCisgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICAgc2l6ZV9pbmRleCApCisgIHsKKyAgICBGVF9JbnQgICBpOworICAgIEZUX0xvbmcgIHcsIGg7CisKKworICAgIGlmICggIUZUX0hBU19GSVhFRF9TSVpFUyggZmFjZSApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgLyogRlRfQml0bWFwX1NpemUgZG9lc24ndCBwcm92aWRlIGVub3VnaCBpbmZvLi4uICovCisgICAgaWYgKCByZXEtPnR5cGUgIT0gRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTCApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworCisgICAgdyA9IEZUX1JFUVVFU1RfV0lEVEggKCByZXEgKTsKKyAgICBoID0gRlRfUkVRVUVTVF9IRUlHSFQoIHJlcSApOworCisgICAgaWYgKCByZXEtPndpZHRoICYmICFyZXEtPmhlaWdodCApCisgICAgICBoID0gdzsKKyAgICBlbHNlIGlmICggIXJlcS0+d2lkdGggJiYgcmVxLT5oZWlnaHQgKQorICAgICAgdyA9IGg7CisKKyAgICB3ID0gRlRfUElYX1JPVU5EKCB3ICk7CisgICAgaCA9IEZUX1BJWF9ST1VORCggaCApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlLT5udW1fZml4ZWRfc2l6ZXM7IGkrKyApCisgICAgeworICAgICAgRlRfQml0bWFwX1NpemUqICBic2l6ZSA9IGZhY2UtPmF2YWlsYWJsZV9zaXplcyArIGk7CisKKworICAgICAgaWYgKCBoICE9IEZUX1BJWF9ST1VORCggYnNpemUtPnlfcHBlbSApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggdyA9PSBGVF9QSVhfUk9VTkQoIGJzaXplLT54X3BwZW0gKSB8fCBpZ25vcmVfd2lkdGggKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTMoKCAiRlRfTWF0Y2hfU2l6ZTogYml0bWFwIHN0cmlrZSAlZCBtYXRjaGVzXG4iLCBpICkpOworCisgICAgICAgIGlmICggc2l6ZV9pbmRleCApCisgICAgICAgICAgKnNpemVfaW5kZXggPSAoRlRfVUxvbmcpaTsKKworICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9QaXhlbF9TaXplICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIGZ0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcyggRlRfR2x5cGhfTWV0cmljcyogIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgICAgIGFkdmFuY2UgKQorICB7CisgICAgRlRfUG9zICBoZWlnaHQgPSBtZXRyaWNzLT5oZWlnaHQ7CisKKworICAgIC8qIGNvbXBlbnNhdGUgZm9yIGdseXBoIHdpdGggYmJveCBhYm92ZS9iZWxvdyB0aGUgYmFzZWxpbmUgKi8KKyAgICBpZiAoIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA8IDAgKQorICAgIHsKKyAgICAgIGlmICggaGVpZ2h0IDwgbWV0cmljcy0+aG9yaUJlYXJpbmdZICkKKyAgICAgICAgaGVpZ2h0ID0gbWV0cmljcy0+aG9yaUJlYXJpbmdZOworICAgIH0KKyAgICBlbHNlIGlmICggbWV0cmljcy0+aG9yaUJlYXJpbmdZID4gMCApCisgICAgICBoZWlnaHQgLT0gbWV0cmljcy0+aG9yaUJlYXJpbmdZOworCisgICAgLyogdGhlIGZhY3RvciAxLjIgaXMgYSBoZXVyaXN0aWNhbCB2YWx1ZSAqLworICAgIGlmICggIWFkdmFuY2UgKQorICAgICAgYWR2YW5jZSA9IGhlaWdodCAqIDEyIC8gMTA7CisKKyAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggPSBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggLSBtZXRyaWNzLT5ob3JpQWR2YW5jZSAvIDI7CisgICAgbWV0cmljcy0+dmVydEJlYXJpbmdZID0gKCBhZHZhbmNlIC0gaGVpZ2h0ICkgLyAyOworICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICA9IGFkdmFuY2U7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3JlY29tcHV0ZV9zY2FsZWRfbWV0cmljcyggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzICkKKyAgeworICAgIC8qIENvbXB1dGUgcm9vdCBhc2NlbmRlciwgZGVzY2VuZGVyLCB0ZXN0IGhlaWdodCwgYW5kIG1heF9hZHZhbmNlICovCisKKyNpZmRlZiBHUklEX0ZJVF9NRVRSSUNTCisgICAgbWV0cmljcy0+YXNjZW5kZXIgICAgPSBGVF9QSVhfQ0VJTCggRlRfTXVsRml4KCBmYWNlLT5hc2NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgKSApOworCisgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSBGVF9QSVhfRkxPT1IoIEZUX011bEZpeCggZmFjZS0+ZGVzY2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgKSApOworCisgICAgbWV0cmljcy0+aGVpZ2h0ICAgICAgPSBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgKSApOworCisgICAgbWV0cmljcy0+bWF4X2FkdmFuY2UgPSBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+bWF4X2FkdmFuY2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSApICk7CisjZWxzZSAvKiAhR1JJRF9GSVRfTUVUUklDUyAqLworICAgIG1ldHJpY3MtPmFzY2VuZGVyICAgID0gRlRfTXVsRml4KCBmYWNlLT5hc2NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eV9zY2FsZSApOworCisgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSBGVF9NdWxGaXgoIGZhY2UtPmRlc2NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eV9zY2FsZSApOworCisgICAgbWV0cmljcy0+aGVpZ2h0ICAgICAgPSBGVF9NdWxGaXgoIGZhY2UtPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eV9zY2FsZSApOworCisgICAgbWV0cmljcy0+bWF4X2FkdmFuY2UgPSBGVF9NdWxGaXgoIGZhY2UtPm1heF9hZHZhbmNlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlICk7CisjZW5kaWYgLyogIUdSSURfRklUX01FVFJJQ1MgKi8KKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9TZWxlY3RfTWV0cmljcyggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgc3RyaWtlX2luZGV4ICkKKyAgeworICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3M7CisgICAgRlRfQml0bWFwX1NpemUqICAgYnNpemU7CisKKworICAgIG1ldHJpY3MgPSAmZmFjZS0+c2l6ZS0+bWV0cmljczsKKyAgICBic2l6ZSAgID0gZmFjZS0+YXZhaWxhYmxlX3NpemVzICsgc3RyaWtlX2luZGV4OworCisgICAgbWV0cmljcy0+eF9wcGVtID0gKEZUX1VTaG9ydCkoICggYnNpemUtPnhfcHBlbSArIDMyICkgPj4gNiApOworICAgIG1ldHJpY3MtPnlfcHBlbSA9IChGVF9VU2hvcnQpKCAoIGJzaXplLT55X3BwZW0gKyAzMiApID4+IDYgKTsKKworICAgIGlmICggRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSApCisgICAgeworICAgICAgbWV0cmljcy0+eF9zY2FsZSA9IEZUX0RpdkZpeCggYnNpemUtPnhfcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnVuaXRzX3Blcl9FTSApOworICAgICAgbWV0cmljcy0+eV9zY2FsZSA9IEZUX0RpdkZpeCggYnNpemUtPnlfcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnVuaXRzX3Blcl9FTSApOworCisgICAgICBmdF9yZWNvbXB1dGVfc2NhbGVkX21ldHJpY3MoIGZhY2UsIG1ldHJpY3MgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG1ldHJpY3MtPnhfc2NhbGUgICAgID0gMUwgPDwgMTY7CisgICAgICBtZXRyaWNzLT55X3NjYWxlICAgICA9IDFMIDw8IDE2OworICAgICAgbWV0cmljcy0+YXNjZW5kZXIgICAgPSBic2l6ZS0+eV9wcGVtOworICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSAwOworICAgICAgbWV0cmljcy0+aGVpZ2h0ICAgICAgPSBic2l6ZS0+aGVpZ2h0IDw8IDY7CisgICAgICBtZXRyaWNzLT5tYXhfYWR2YW5jZSA9IGJzaXplLT54X3BwZW07CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIkZUX1NlbGVjdF9NZXRyaWNzOlxuIiApKTsKKyAgICBGVF9UUkFDRTUoKCAiICB4IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUsIG1ldHJpY3MtPnhfc2NhbGUgLyA2NTUzNi4wICkpOworICAgIEZUX1RSQUNFNSgoICIgIHkgc2NhbGU6ICVkICglZilcbiIsCisgICAgICAgICAgICAgICAgbWV0cmljcy0+eV9zY2FsZSwgbWV0cmljcy0+eV9zY2FsZSAvIDY1NTM2LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgYXNjZW5kZXI6ICVmXG4iLCAgICBtZXRyaWNzLT5hc2NlbmRlciAvIDY0LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgZGVzY2VuZGVyOiAlZlxuIiwgICBtZXRyaWNzLT5kZXNjZW5kZXIgLyA2NC4wICkpOworICAgIEZUX1RSQUNFNSgoICIgIGhlaWdodDogJWZcbiIsICAgICAgbWV0cmljcy0+aGVpZ2h0IC8gNjQuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICBtYXggYWR2YW5jZTogJWZcbiIsIG1ldHJpY3MtPm1heF9hZHZhbmNlIC8gNjQuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICB4IHBwZW06ICVkXG4iLCAgICAgIG1ldHJpY3MtPnhfcHBlbSApKTsKKyAgICBGVF9UUkFDRTUoKCAiICB5IHBwZW06ICVkXG4iLCAgICAgIG1ldHJpY3MtPnlfcHBlbSApKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9SZXF1ZXN0X01ldHJpY3MoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApCisgIHsKKyAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzOworCisKKyAgICBtZXRyaWNzID0gJmZhY2UtPnNpemUtPm1ldHJpY3M7CisKKyAgICBpZiAoIEZUX0lTX1NDQUxBQkxFKCBmYWNlICkgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIHcgPSAwLCBoID0gMCwgc2NhbGVkX3cgPSAwLCBzY2FsZWRfaCA9IDA7CisKKworICAgICAgc3dpdGNoICggcmVxLT50eXBlICkKKyAgICAgIHsKKyAgICAgIGNhc2UgRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTDoKKyAgICAgICAgdyA9IGggPSBmYWNlLT51bml0c19wZXJfRU07CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNOgorICAgICAgICB3ID0gaCA9IGZhY2UtPmFzY2VuZGVyIC0gZmFjZS0+ZGVzY2VuZGVyOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YOgorICAgICAgICB3ID0gZmFjZS0+YmJveC54TWF4IC0gZmFjZS0+YmJveC54TWluOworICAgICAgICBoID0gZmFjZS0+YmJveC55TWF4IC0gZmFjZS0+YmJveC55TWluOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9DRUxMOgorICAgICAgICB3ID0gZmFjZS0+bWF4X2FkdmFuY2Vfd2lkdGg7CisgICAgICAgIGggPSBmYWNlLT5hc2NlbmRlciAtIGZhY2UtPmRlc2NlbmRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTOgorICAgICAgICBtZXRyaWNzLT54X3NjYWxlID0gKEZUX0ZpeGVkKXJlcS0+d2lkdGg7CisgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgPSAoRlRfRml4ZWQpcmVxLT5oZWlnaHQ7CisgICAgICAgIGlmICggIW1ldHJpY3MtPnhfc2NhbGUgKQorICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUgPSBtZXRyaWNzLT55X3NjYWxlOworICAgICAgICBlbHNlIGlmICggIW1ldHJpY3MtPnlfc2NhbGUgKQorICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgPSBtZXRyaWNzLT54X3NjYWxlOworICAgICAgICBnb3RvIENhbGN1bGF0ZV9QcGVtOworCisgICAgICBjYXNlIEZUX1NJWkVfUkVRVUVTVF9UWVBFX01BWDoKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgKi8KKyAgICAgIGlmICggdyA8IDAgKQorICAgICAgICB3ID0gLXc7CisKKyAgICAgIGlmICggaCA8IDAgKQorICAgICAgICBoID0gLWg7CisKKyAgICAgIHNjYWxlZF93ID0gRlRfUkVRVUVTVF9XSURUSCAoIHJlcSApOworICAgICAgc2NhbGVkX2ggPSBGVF9SRVFVRVNUX0hFSUdIVCggcmVxICk7CisKKyAgICAgIC8qIGRldGVybWluZSBzY2FsZXMgKi8KKyAgICAgIGlmICggcmVxLT53aWR0aCApCisgICAgICB7CisgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUgPSBGVF9EaXZGaXgoIHNjYWxlZF93LCB3ICk7CisKKyAgICAgICAgaWYgKCByZXEtPmhlaWdodCApCisgICAgICAgIHsKKyAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlID0gRlRfRGl2Rml4KCBzY2FsZWRfaCwgaCApOworCisgICAgICAgICAgaWYgKCByZXEtPnR5cGUgPT0gRlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBtZXRyaWNzLT55X3NjYWxlID4gbWV0cmljcy0+eF9zY2FsZSApCisgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUgPSBtZXRyaWNzLT54X3NjYWxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlID0gbWV0cmljcy0+eV9zY2FsZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgbWV0cmljcy0+eV9zY2FsZSA9IG1ldHJpY3MtPnhfc2NhbGU7CisgICAgICAgICAgc2NhbGVkX2ggPSBGVF9NdWxEaXYoIHNjYWxlZF93LCBoLCB3ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbWV0cmljcy0+eF9zY2FsZSA9IG1ldHJpY3MtPnlfc2NhbGUgPSBGVF9EaXZGaXgoIHNjYWxlZF9oLCBoICk7CisgICAgICAgIHNjYWxlZF93ID0gRlRfTXVsRGl2KCBzY2FsZWRfaCwgdywgaCApOworICAgICAgfQorCisgIENhbGN1bGF0ZV9QcGVtOgorICAgICAgLyogY2FsY3VsYXRlIHRoZSBwcGVtcyAqLworICAgICAgaWYgKCByZXEtPnR5cGUgIT0gRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTCApCisgICAgICB7CisgICAgICAgIHNjYWxlZF93ID0gRlRfTXVsRml4KCBmYWNlLT51bml0c19wZXJfRU0sIG1ldHJpY3MtPnhfc2NhbGUgKTsKKyAgICAgICAgc2NhbGVkX2ggPSBGVF9NdWxGaXgoIGZhY2UtPnVuaXRzX3Blcl9FTSwgbWV0cmljcy0+eV9zY2FsZSApOworICAgICAgfQorCisgICAgICBtZXRyaWNzLT54X3BwZW0gPSAoRlRfVVNob3J0KSggKCBzY2FsZWRfdyArIDMyICkgPj4gNiApOworICAgICAgbWV0cmljcy0+eV9wcGVtID0gKEZUX1VTaG9ydCkoICggc2NhbGVkX2ggKyAzMiApID4+IDYgKTsKKworICAgICAgZnRfcmVjb21wdXRlX3NjYWxlZF9tZXRyaWNzKCBmYWNlLCBtZXRyaWNzICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9aRVJPKCBtZXRyaWNzICk7CisgICAgICBtZXRyaWNzLT54X3NjYWxlID0gMUwgPDwgMTY7CisgICAgICBtZXRyaWNzLT55X3NjYWxlID0gMUwgPDwgMTY7CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIkZUX1JlcXVlc3RfTWV0cmljczpcbiIgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKKyAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlLCBtZXRyaWNzLT54X3NjYWxlIC8gNjU1MzYuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOworICAgIEZUX1RSQUNFNSgoICIgIGFzY2VuZGVyOiAlZlxuIiwgICAgbWV0cmljcy0+YXNjZW5kZXIgLyA2NC4wICkpOworICAgIEZUX1RSQUNFNSgoICIgIGRlc2NlbmRlcjogJWZcbiIsICAgbWV0cmljcy0+ZGVzY2VuZGVyIC8gNjQuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICBoZWlnaHQ6ICVmXG4iLCAgICAgIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgbWF4IGFkdmFuY2U6ICVmXG4iLCBtZXRyaWNzLT5tYXhfYWR2YW5jZSAvIDY0LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgeCBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT54X3BwZW0gKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgeSBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT55X3BwZW0gKSk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2VsZWN0X1NpemUoIEZUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICBzdHJpa2VfaW5kZXggKQorICB7CisgICAgRlRfRHJpdmVyX0NsYXNzICBjbGF6ejsKKworCisgICAgaWYgKCAhZmFjZSB8fCAhRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBpZiAoIHN0cmlrZV9pbmRleCA8IDAgfHwgc3RyaWtlX2luZGV4ID49IGZhY2UtPm51bV9maXhlZF9zaXplcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGNsYXp6ID0gZmFjZS0+ZHJpdmVyLT5jbGF6ejsKKworICAgIGlmICggY2xhenotPnNlbGVjdF9zaXplICkKKyAgICB7CisgICAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgICAgZXJyb3IgPSBjbGF6ei0+c2VsZWN0X3NpemUoIGZhY2UtPnNpemUsIChGVF9VTG9uZylzdHJpa2VfaW5kZXggKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICB7CisgICAgICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgPSAmZmFjZS0+c2l6ZS0+bWV0cmljczsKKworCisgICAgICAgIEZUX1RSQUNFNSgoICJGVF9TZWxlY3RfU2l6ZSAoZm9udCBkcml2ZXIncyBgc2VsZWN0X3NpemUnKTpcbiIgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIHggc2NhbGU6ICVkICglZilcbiIsCisgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUsIG1ldHJpY3MtPnhfc2NhbGUgLyA2NTUzNi4wICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlLCBtZXRyaWNzLT55X3NjYWxlIC8gNjU1MzYuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgYXNjZW5kZXI6ICVmXG4iLCAgICBtZXRyaWNzLT5hc2NlbmRlciAvIDY0LjAgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIGRlc2NlbmRlcjogJWZcbiIsICAgbWV0cmljcy0+ZGVzY2VuZGVyIC8gNjQuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgaGVpZ2h0OiAlZlxuIiwgICAgICBtZXRyaWNzLT5oZWlnaHQgLyA2NC4wICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICBtYXggYWR2YW5jZTogJWZcbiIsIG1ldHJpY3MtPm1heF9hZHZhbmNlIC8gNjQuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgeCBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT54X3BwZW0gKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIHkgcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eV9wcGVtICkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBGVF9TZWxlY3RfTWV0cmljcyggZmFjZSwgKEZUX1VMb25nKXN0cmlrZV9pbmRleCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZXF1ZXN0X1NpemUoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApCisgIHsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIGNsYXp6OworICAgIEZUX1VMb25nICAgICAgICAgc3RyaWtlX2luZGV4OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhcmVxIHx8IHJlcS0+d2lkdGggPCAwIHx8IHJlcS0+aGVpZ2h0IDwgMCB8fAorICAgICAgICAgcmVxLT50eXBlID49IEZUX1NJWkVfUkVRVUVTVF9UWVBFX01BWCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGNsYXp6ID0gZmFjZS0+ZHJpdmVyLT5jbGF6ejsKKworICAgIGlmICggY2xhenotPnJlcXVlc3Rfc2l6ZSApCisgICAgeworICAgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICAgIGVycm9yID0gY2xhenotPnJlcXVlc3Rfc2l6ZSggZmFjZS0+c2l6ZSwgcmVxICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgeworICAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzID0gJmZhY2UtPnNpemUtPm1ldHJpY3M7CisKKworICAgICAgICBGVF9UUkFDRTUoKCAiRlRfUmVxdWVzdF9TaXplIChmb250IGRyaXZlcidzIGByZXF1ZXN0X3NpemUnKTpcbiIgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIHggc2NhbGU6ICVkICglZilcbiIsCisgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUsIG1ldHJpY3MtPnhfc2NhbGUgLyA2NTUzNi4wICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlZCAoJWYpXG4iLAorICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlLCBtZXRyaWNzLT55X3NjYWxlIC8gNjU1MzYuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgYXNjZW5kZXI6ICVmXG4iLCAgICBtZXRyaWNzLT5hc2NlbmRlciAvIDY0LjAgKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIGRlc2NlbmRlcjogJWZcbiIsICAgbWV0cmljcy0+ZGVzY2VuZGVyIC8gNjQuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgaGVpZ2h0OiAlZlxuIiwgICAgICBtZXRyaWNzLT5oZWlnaHQgLyA2NC4wICkpOworICAgICAgICBGVF9UUkFDRTUoKCAiICBtYXggYWR2YW5jZTogJWZcbiIsIG1ldHJpY3MtPm1heF9hZHZhbmNlIC8gNjQuMCApKTsKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgeCBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT54X3BwZW0gKSk7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIHkgcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eV9wcGVtICkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZSByZWFzb24gdGhhdCBhIGRyaXZlciBkb2Vzbid0IGhhdmUgYHJlcXVlc3Rfc2l6ZScgZGVmaW5lZCBpcworICAgICAqIGVpdGhlciB0aGF0IHRoZSBzY2FsaW5nIGhlcmUgc3VmZmljZXMgb3IgdGhhdCB0aGUgc3VwcG9ydGVkIGZvcm1hdHMKKyAgICAgKiBhcmUgYml0bWFwLW9ubHkgYW5kIHNpemUgbWF0Y2hpbmcgaXMgbm90IGltcGxlbWVudGVkLgorICAgICAqCisgICAgICogSW4gdGhlIGxhdHRlciBjYXNlLCBhIHNpbXBsZSBzaXplIG1hdGNoaW5nIGlzIGRvbmUuCisgICAgICovCisgICAgaWYgKCAhRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSAmJiBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKSApCisgICAgeworICAgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICAgIGVycm9yID0gRlRfTWF0Y2hfU2l6ZSggZmFjZSwgcmVxLCAwLCAmc3RyaWtlX2luZGV4ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICByZXR1cm4gRlRfU2VsZWN0X1NpemUoIGZhY2UsIChGVF9JbnQpc3RyaWtlX2luZGV4ICk7CisgICAgfQorCisgICAgRlRfUmVxdWVzdF9NZXRyaWNzKCBmYWNlLCByZXEgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X0NoYXJfU2l6ZSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgY2hhcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgY2hhcl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGhvcnpfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgdmVydF9yZXNvbHV0aW9uICkKKyAgeworICAgIEZUX1NpemVfUmVxdWVzdFJlYyAgcmVxOworCisKKyAgICAvKiBjaGVjayBvZiBgZmFjZScgZGVsYXllZCB0byBgRlRfUmVxdWVzdF9TaXplJyAqLworCisgICAgaWYgKCAhY2hhcl93aWR0aCApCisgICAgICBjaGFyX3dpZHRoID0gY2hhcl9oZWlnaHQ7CisgICAgZWxzZSBpZiAoICFjaGFyX2hlaWdodCApCisgICAgICBjaGFyX2hlaWdodCA9IGNoYXJfd2lkdGg7CisKKyAgICBpZiAoICFob3J6X3Jlc29sdXRpb24gKQorICAgICAgaG9yel9yZXNvbHV0aW9uID0gdmVydF9yZXNvbHV0aW9uOworICAgIGVsc2UgaWYgKCAhdmVydF9yZXNvbHV0aW9uICkKKyAgICAgIHZlcnRfcmVzb2x1dGlvbiA9IGhvcnpfcmVzb2x1dGlvbjsKKworICAgIGlmICggY2hhcl93aWR0aCAgPCAxICogNjQgKQorICAgICAgY2hhcl93aWR0aCAgPSAxICogNjQ7CisgICAgaWYgKCBjaGFyX2hlaWdodCA8IDEgKiA2NCApCisgICAgICBjaGFyX2hlaWdodCA9IDEgKiA2NDsKKworICAgIGlmICggIWhvcnpfcmVzb2x1dGlvbiApCisgICAgICBob3J6X3Jlc29sdXRpb24gPSB2ZXJ0X3Jlc29sdXRpb24gPSA3MjsKKworICAgIHJlcS50eXBlICAgICAgICAgICA9IEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUw7CisgICAgcmVxLndpZHRoICAgICAgICAgID0gY2hhcl93aWR0aDsKKyAgICByZXEuaGVpZ2h0ICAgICAgICAgPSBjaGFyX2hlaWdodDsKKyAgICByZXEuaG9yaVJlc29sdXRpb24gPSBob3J6X3Jlc29sdXRpb247CisgICAgcmVxLnZlcnRSZXNvbHV0aW9uID0gdmVydF9yZXNvbHV0aW9uOworCisgICAgcmV0dXJuIEZUX1JlcXVlc3RfU2l6ZSggZmFjZSwgJnJlcSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1NldF9QaXhlbF9TaXplcyggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF9oZWlnaHQgKQorICB7CisgICAgRlRfU2l6ZV9SZXF1ZXN0UmVjICByZXE7CisKKworICAgIC8qIGNoZWNrIG9mIGBmYWNlJyBkZWxheWVkIHRvIGBGVF9SZXF1ZXN0X1NpemUnICovCisKKyAgICBpZiAoIHBpeGVsX3dpZHRoID09IDAgKQorICAgICAgcGl4ZWxfd2lkdGggPSBwaXhlbF9oZWlnaHQ7CisgICAgZWxzZSBpZiAoIHBpeGVsX2hlaWdodCA9PSAwICkKKyAgICAgIHBpeGVsX2hlaWdodCA9IHBpeGVsX3dpZHRoOworCisgICAgaWYgKCBwaXhlbF93aWR0aCAgPCAxICkKKyAgICAgIHBpeGVsX3dpZHRoICA9IDE7CisgICAgaWYgKCBwaXhlbF9oZWlnaHQgPCAxICkKKyAgICAgIHBpeGVsX2hlaWdodCA9IDE7CisKKyAgICAvKiB1c2UgYD49JyB0byBhdm9pZCBwb3RlbnRpYWwgY29tcGlsZXIgd2FybmluZyBvbiAxNmJpdCBwbGF0Zm9ybXMgKi8KKyAgICBpZiAoIHBpeGVsX3dpZHRoID49IDB4RkZGRlUgKQorICAgICAgcGl4ZWxfd2lkdGggPSAweEZGRkZVOworICAgIGlmICggcGl4ZWxfaGVpZ2h0ID49IDB4RkZGRlUgKQorICAgICAgcGl4ZWxfaGVpZ2h0ID0gMHhGRkZGVTsKKworICAgIHJlcS50eXBlICAgICAgICAgICA9IEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUw7CisgICAgcmVxLndpZHRoICAgICAgICAgID0gKEZUX0xvbmcpKCBwaXhlbF93aWR0aCA8PCA2ICk7CisgICAgcmVxLmhlaWdodCAgICAgICAgID0gKEZUX0xvbmcpKCBwaXhlbF9oZWlnaHQgPDwgNiApOworICAgIHJlcS5ob3JpUmVzb2x1dGlvbiA9IDA7CisgICAgcmVxLnZlcnRSZXNvbHV0aW9uID0gMDsKKworICAgIHJldHVybiBGVF9SZXF1ZXN0X1NpemUoIGZhY2UsICZyZXEgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfS2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGtlcm5fbW9kZSwKKyAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciAgKmFrZXJuaW5nICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfRHJpdmVyICBkcml2ZXI7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBpZiAoICFha2VybmluZyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGRyaXZlciA9IGZhY2UtPmRyaXZlcjsKKworICAgIGFrZXJuaW5nLT54ID0gMDsKKyAgICBha2VybmluZy0+eSA9IDA7CisKKyAgICBpZiAoIGRyaXZlci0+Y2xhenotPmdldF9rZXJuaW5nICkKKyAgICB7CisgICAgICBlcnJvciA9IGRyaXZlci0+Y2xhenotPmdldF9rZXJuaW5nKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWtlcm5pbmcgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBrZXJuX21vZGUgIT0gRlRfS0VSTklOR19VTlNDQUxFRCApCisgICAgICAgIHsKKyAgICAgICAgICBha2VybmluZy0+eCA9IEZUX011bEZpeCggYWtlcm5pbmctPngsIGZhY2UtPnNpemUtPm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICAgIGFrZXJuaW5nLT55ID0gRlRfTXVsRml4KCBha2VybmluZy0+eSwgZmFjZS0+c2l6ZS0+bWV0cmljcy55X3NjYWxlICk7CisKKyAgICAgICAgICBpZiAoIGtlcm5fbW9kZSAhPSBGVF9LRVJOSU5HX1VORklUVEVEICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBzY2FsZSBkb3duIGtlcm5pbmcgdmFsdWVzIGZvciBzbWFsbCBwcGVtIHZhbHVlcyAqLworICAgICAgICAgICAgLyogdG8gYXZvaWQgdGhhdCByb3VuZGluZyBtYWtlcyB0aGVtIHRvbyBiaWcuICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIGAyNScgaGFzIGJlZW4gZGV0ZXJtaW5lZCBoZXVyaXN0aWNhbGx5LiAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtIDwgMjUgKQorICAgICAgICAgICAgICBha2VybmluZy0+eCA9IEZUX011bERpdiggYWtlcm5pbmctPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbSwgMjUgKTsKKyAgICAgICAgICAgIGlmICggZmFjZS0+c2l6ZS0+bWV0cmljcy55X3BwZW0gPCAyNSApCisgICAgICAgICAgICAgIGFrZXJuaW5nLT55ID0gRlRfTXVsRGl2KCBha2VybmluZy0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnNpemUtPm1ldHJpY3MueV9wcGVtLCAyNSApOworCisgICAgICAgICAgICBha2VybmluZy0+eCA9IEZUX1BJWF9ST1VORCggYWtlcm5pbmctPnggKTsKKyAgICAgICAgICAgIGFrZXJuaW5nLT55ID0gRlRfUElYX1JPVU5EKCBha2VybmluZy0+eSApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfVHJhY2tfS2VybmluZyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICBwb2ludF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkZWdyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGFrZXJuaW5nICkKKyAgeworICAgIEZUX1NlcnZpY2VfS2VybmluZyAgc2VydmljZTsKKyAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhYWtlcm5pbmcgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgS0VSTklORyApOworICAgIGlmICggIXNlcnZpY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICAgIGVycm9yID0gc2VydmljZS0+Z2V0X3RyYWNrKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrZXJuaW5nICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2VsZWN0X0NoYXJtYXAoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRW5jb2RpbmcgIGVuY29kaW5nICkKKyAgeworICAgIEZUX0NoYXJNYXAqICBjdXI7CisgICAgRlRfQ2hhck1hcCogIGxpbWl0OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCBlbmNvZGluZyA9PSBGVF9FTkNPRElOR19OT05FICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogRlRfRU5DT0RJTkdfVU5JQ09ERSBpcyBzcGVjaWFsLiAgV2UgdHJ5IHRvIGZpbmQgdGhlIGBiZXN0JyBVbmljb2RlICovCisgICAgLyogY2hhcm1hcCBhdmFpbGFibGUsIGkuZS4sIG9uZSB3aXRoIFVDUy00IGNoYXJhY3RlcnMsIGlmIHBvc3NpYmxlLiAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhpcyBpcyBkb25lIGJ5IGZpbmRfdW5pY29kZV9jaGFybWFwKCkgYWJvdmUsIHRvIHNoYXJlIGNvZGUuICAgICAgICovCisgICAgaWYgKCBlbmNvZGluZyA9PSBGVF9FTkNPRElOR19VTklDT0RFICkKKyAgICAgIHJldHVybiBmaW5kX3VuaWNvZGVfY2hhcm1hcCggZmFjZSApOworCisgICAgY3VyID0gZmFjZS0+Y2hhcm1hcHM7CisgICAgaWYgKCAhY3VyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DaGFyTWFwX0hhbmRsZSApOworCisgICAgbGltaXQgPSBjdXIgKyBmYWNlLT5udW1fY2hhcm1hcHM7CisKKyAgICBmb3IgKCA7IGN1ciA8IGxpbWl0OyBjdXIrKyApCisgICAgeworICAgICAgaWYgKCBjdXJbMF0tPmVuY29kaW5nID09IGVuY29kaW5nICkKKyAgICAgIHsKKyAgICAgICAgZmFjZS0+Y2hhcm1hcCA9IGN1clswXTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X0NoYXJtYXAoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9DaGFyTWFwICBjaGFybWFwICkKKyAgeworICAgIEZUX0NoYXJNYXAqICBjdXI7CisgICAgRlRfQ2hhck1hcCogIGxpbWl0OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgY3VyID0gZmFjZS0+Y2hhcm1hcHM7CisgICAgaWYgKCAhY3VyIHx8ICFjaGFybWFwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DaGFyTWFwX0hhbmRsZSApOworCisgICAgaWYgKCBGVF9HZXRfQ01hcF9Gb3JtYXQoIGNoYXJtYXAgKSA9PSAxNCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGxpbWl0ID0gY3VyICsgZmFjZS0+bnVtX2NoYXJtYXBzOworCisgICAgZm9yICggOyBjdXIgPCBsaW1pdDsgY3VyKysgKQorICAgIHsKKyAgICAgIGlmICggY3VyWzBdID09IGNoYXJtYXAgKQorICAgICAgeworICAgICAgICBmYWNlLT5jaGFybWFwID0gY3VyWzBdOworICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9JbnQgKQorICBGVF9HZXRfQ2hhcm1hcF9JbmRleCggRlRfQ2hhck1hcCAgY2hhcm1hcCApCisgIHsKKyAgICBGVF9JbnQgIGk7CisKKworICAgIGlmICggIWNoYXJtYXAgfHwgIWNoYXJtYXAtPmZhY2UgKQorICAgICAgcmV0dXJuIC0xOworCisgICAgZm9yICggaSA9IDA7IGkgPCBjaGFybWFwLT5mYWNlLT5udW1fY2hhcm1hcHM7IGkrKyApCisgICAgICBpZiAoIGNoYXJtYXAtPmZhY2UtPmNoYXJtYXBzW2ldID09IGNoYXJtYXAgKQorICAgICAgICBicmVhazsKKworICAgIEZUX0FTU0VSVCggaSA8IGNoYXJtYXAtPmZhY2UtPm51bV9jaGFybWFwcyApOworCisgICAgcmV0dXJuIGk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2NtYXBfZG9uZV9pbnRlcm5hbCggRlRfQ01hcCAgY21hcCApCisgIHsKKyAgICBGVF9DTWFwX0NsYXNzICBjbGF6eiAgPSBjbWFwLT5jbGF6ejsKKyAgICBGVF9GYWNlICAgICAgICBmYWNlICAgPSBjbWFwLT5jaGFybWFwLmZhY2U7CisgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgaWYgKCBjbGF6ei0+ZG9uZSApCisgICAgICBjbGF6ei0+ZG9uZSggY21hcCApOworCisgICAgRlRfRlJFRSggY21hcCApOworICB9CisKKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0NNYXBfRG9uZSggRlRfQ01hcCAgY21hcCApCisgIHsKKyAgICBpZiAoIGNtYXAgKQorICAgIHsKKyAgICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gY21hcC0+Y2hhcm1hcC5mYWNlOworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworICAgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICAgIEZUX0ludCAgICAgaSwgajsKKworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZhY2UtPm51bV9jaGFybWFwczsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAoRlRfQ01hcClmYWNlLT5jaGFybWFwc1tpXSA9PSBjbWFwICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0NoYXJNYXAgIGxhc3RfY2hhcm1hcCA9IGZhY2UtPmNoYXJtYXBzW2ZhY2UtPm51bV9jaGFybWFwcyAtIDFdOworCisKKyAgICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBmYWNlLT5jaGFybWFwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5udW1fY2hhcm1hcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bnVtX2NoYXJtYXBzIC0gMSApICkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIC8qIHJlbW92ZSBpdCBmcm9tIG91ciBsaXN0IG9mIGNoYXJtYXBzICovCisgICAgICAgICAgZm9yICggaiA9IGkgKyAxOyBqIDwgZmFjZS0+bnVtX2NoYXJtYXBzOyBqKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggaiA9PSBmYWNlLT5udW1fY2hhcm1hcHMgLSAxICkKKyAgICAgICAgICAgICAgZmFjZS0+Y2hhcm1hcHNbaiAtIDFdID0gbGFzdF9jaGFybWFwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWNlLT5jaGFybWFwc1tqIC0gMV0gPSBmYWNlLT5jaGFybWFwc1tqXTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmYWNlLT5udW1fY2hhcm1hcHMtLTsKKworICAgICAgICAgIGlmICggKEZUX0NNYXApZmFjZS0+Y2hhcm1hcCA9PSBjbWFwICkKKyAgICAgICAgICAgIGZhY2UtPmNoYXJtYXAgPSBOVUxMOworCisgICAgICAgICAgZnRfY21hcF9kb25lX2ludGVybmFsKCBjbWFwICk7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfQ01hcF9OZXcoIEZUX0NNYXBfQ2xhc3MgIGNsYXp6LAorICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgaW5pdF9kYXRhLAorICAgICAgICAgICAgICAgRlRfQ2hhck1hcCAgICAgY2hhcm1hcCwKKyAgICAgICAgICAgICAgIEZUX0NNYXAgICAgICAgKmFjbWFwICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfRmFjZSAgICBmYWNlOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX0NNYXAgICAgY21hcCA9IE5VTEw7CisKKworICAgIGlmICggY2xhenogPT0gTlVMTCB8fCBjaGFybWFwID09IE5VTEwgfHwgY2hhcm1hcC0+ZmFjZSA9PSBOVUxMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZmFjZSAgID0gY2hhcm1hcC0+ZmFjZTsKKyAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisgICAgaWYgKCAhRlRfQUxMT0MoIGNtYXAsIGNsYXp6LT5zaXplICkgKQorICAgIHsKKyAgICAgIGNtYXAtPmNoYXJtYXAgPSAqY2hhcm1hcDsKKyAgICAgIGNtYXAtPmNsYXp6ICAgPSBjbGF6ejsKKworICAgICAgaWYgKCBjbGF6ei0+aW5pdCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gY2xhenotPmluaXQoIGNtYXAsIGluaXRfZGF0YSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisKKyAgICAgIC8qIGFkZCBpdCB0byBvdXIgbGlzdCBvZiBjaGFybWFwcyAqLworICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggZmFjZS0+Y2hhcm1hcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5udW1fY2hhcm1hcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5udW1fY2hhcm1hcHMgKyAxICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGZhY2UtPmNoYXJtYXBzW2ZhY2UtPm51bV9jaGFybWFwcysrXSA9IChGVF9DaGFyTWFwKWNtYXA7CisgICAgfQorCisgIEV4aXQ6CisgICAgaWYgKCBhY21hcCApCisgICAgICAqYWNtYXAgPSBjbWFwOworCisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgZnRfY21hcF9kb25lX2ludGVybmFsKCBjbWFwICk7CisgICAgY21hcCA9IE5VTEw7CisgICAgZ290byBFeGl0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VSW50ICkKKyAgRlRfR2V0X0NoYXJfSW5kZXgoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGNoYXJjb2RlICkKKyAgeworICAgIEZUX1VJbnQgIHJlc3VsdCA9IDA7CisKKworICAgIGlmICggZmFjZSAmJiBmYWNlLT5jaGFybWFwICkKKyAgICB7CisgICAgICBGVF9DTWFwICBjbWFwID0gRlRfQ01BUCggZmFjZS0+Y2hhcm1hcCApOworCisKKyAgICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiRlRfR2V0X0NoYXJfSW5kZXg6IHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7CisgICAgICAgIEZUX1RSQUNFMSgoICIgMHgleCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOworICAgICAgfQorICAgICAgcmVzdWx0ID0gY21hcC0+Y2xhenotPmNoYXJfaW5kZXgoIGNtYXAsIChGVF9VSW50MzIpY2hhcmNvZGUgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUxvbmcgKQorICBGVF9HZXRfRmlyc3RfQ2hhciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAqYWdpbmRleCApCisgIHsKKyAgICBGVF9VTG9uZyAgcmVzdWx0ID0gMDsKKyAgICBGVF9VSW50ICAgZ2luZGV4ID0gMDsKKworCisgICAgLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBhIGNoYXJtYXAsIGFuZCB3ZSBoYXZlIGdseXBocyBhdCBhbGwgKi8KKyAgICBpZiAoIGZhY2UgJiYgZmFjZS0+Y2hhcm1hcCAmJiBmYWNlLT5udW1fZ2x5cGhzICkKKyAgICB7CisgICAgICBnaW5kZXggPSBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgMCApOworICAgICAgaWYgKCBnaW5kZXggPT0gMCB8fCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICAgIHJlc3VsdCA9IEZUX0dldF9OZXh0X0NoYXIoIGZhY2UsIDAsICZnaW5kZXggKTsKKyAgICB9CisKKyAgICBpZiAoIGFnaW5kZXggKQorICAgICAgKmFnaW5kZXggPSBnaW5kZXg7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VTG9uZyApCisgIEZUX0dldF9OZXh0X0NoYXIoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICphZ2luZGV4ICkKKyAgeworICAgIEZUX1VMb25nICByZXN1bHQgPSAwOworICAgIEZUX1VJbnQgICBnaW5kZXggPSAwOworCisKKyAgICBpZiAoIGZhY2UgJiYgZmFjZS0+Y2hhcm1hcCAmJiBmYWNlLT5udW1fZ2x5cGhzICkKKyAgICB7CisgICAgICBGVF9VSW50MzIgIGNvZGUgPSAoRlRfVUludDMyKWNoYXJjb2RlOworICAgICAgRlRfQ01hcCAgICBjbWFwID0gRlRfQ01BUCggZmFjZS0+Y2hhcm1hcCApOworCisKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGdpbmRleCA9IGNtYXAtPmNsYXp6LT5jaGFyX25leHQoIGNtYXAsICZjb2RlICk7CisKKyAgICAgIH0gd2hpbGUgKCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApOworCisgICAgICByZXN1bHQgPSAoIGdpbmRleCA9PSAwICkgPyAwIDogY29kZTsKKyAgICB9CisKKyAgICBpZiAoIGFnaW5kZXggKQorICAgICAgKmFnaW5kZXggPSBnaW5kZXg7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VSW50ICkKKyAgRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4KCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHZhcmlhbnRTZWxlY3RvciApCisgIHsKKyAgICBGVF9VSW50ICByZXN1bHQgPSAwOworCisKKyAgICBpZiAoIGZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZhY2UtPmNoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZhY2UtPmNoYXJtYXAtPmVuY29kaW5nID09IEZUX0VOQ09ESU5HX1VOSUNPREUgKQorICAgIHsKKyAgICAgIEZUX0NoYXJNYXAgIGNoYXJtYXAgPSBmaW5kX3ZhcmlhbnRfc2VsZWN0b3JfY2hhcm1hcCggZmFjZSApOworICAgICAgRlRfQ01hcCAgICAgdWNtYXAgPSBGVF9DTUFQKCBmYWNlLT5jaGFybWFwICk7CisKKworICAgICAgaWYgKCBjaGFybWFwICE9IE5VTEwgKQorICAgICAgeworICAgICAgICBGVF9DTWFwICB2Y21hcCA9IEZUX0NNQVAoIGNoYXJtYXAgKTsKKworCisgICAgICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICIgMHgleCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOworICAgICAgICB9CisgICAgICAgIGlmICggdmFyaWFudFNlbGVjdG9yID4gMHhGRkZGRkZGRlVMICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9HZXRfQ2hhcl9JbmRleDogdG9vIGxhcmdlIHZhcmlhbnRTZWxlY3RvciIgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgdmFyaWFudFNlbGVjdG9yICkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gdmNtYXAtPmNsYXp6LT5jaGFyX3Zhcl9pbmRleCggdmNtYXAsIHVjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKWNoYXJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKXZhcmlhbnRTZWxlY3RvciApOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ludCApCisgIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB2YXJpYW50U2VsZWN0b3IgKQorICB7CisgICAgRlRfSW50ICByZXN1bHQgPSAtMTsKKworCisgICAgaWYgKCBmYWNlICkKKyAgICB7CisgICAgICBGVF9DaGFyTWFwICBjaGFybWFwID0gZmluZF92YXJpYW50X3NlbGVjdG9yX2NoYXJtYXAoIGZhY2UgKTsKKworCisgICAgICBpZiAoIGNoYXJtYXAgIT0gTlVMTCApCisgICAgICB7CisgICAgICAgIEZUX0NNYXAgIHZjbWFwID0gRlRfQ01BUCggY2hhcm1hcCApOworCisKKyAgICAgICAgaWYgKCBjaGFyY29kZSA+IDB4RkZGRkZGRkZVTCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiRlRfR2V0X0NoYXJfSW5kZXg6IHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCB2YXJpYW50U2VsZWN0b3IgPiAweEZGRkZGRkZGVUwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgdmFyaWFudFNlbGVjdG9yIiApKTsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCB2YXJpYW50U2VsZWN0b3IgKSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSB2Y21hcC0+Y2xhenotPmNoYXJfdmFyX2RlZmF1bHQoIHZjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQzMil2YXJpYW50U2VsZWN0b3IgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VSW50MzIqICkKKyAgRlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzKCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1VJbnQzMiAgKnJlc3VsdCA9IE5VTEw7CisKKworICAgIGlmICggZmFjZSApCisgICAgeworICAgICAgRlRfQ2hhck1hcCAgY2hhcm1hcCA9IGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwKCBmYWNlICk7CisKKworICAgICAgaWYgKCBjaGFybWFwICE9IE5VTEwgKQorICAgICAgeworICAgICAgICBGVF9DTWFwICAgIHZjbWFwICA9IEZUX0NNQVAoIGNoYXJtYXAgKTsKKyAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisKKyAgICAgICAgcmVzdWx0ID0gdmNtYXAtPmNsYXp6LT52YXJpYW50X2xpc3QoIHZjbWFwLCBtZW1vcnkgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VSW50MzIqICkKKyAgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApCisgIHsKKyAgICBGVF9VSW50MzIgICpyZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoIGZhY2UgKQorICAgIHsKKyAgICAgIEZUX0NoYXJNYXAgIGNoYXJtYXAgPSBmaW5kX3ZhcmlhbnRfc2VsZWN0b3JfY2hhcm1hcCggZmFjZSApOworCisKKyAgICAgIGlmICggY2hhcm1hcCAhPSBOVUxMICkKKyAgICAgIHsKKyAgICAgICAgRlRfQ01hcCAgICB2Y21hcCAgPSBGVF9DTUFQKCBjaGFybWFwICk7CisgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICIgMHgleCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gdmNtYXAtPmNsYXp6LT5jaGFydmFyaWFudF9saXN0KCB2Y21hcCwgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpY2hhcmNvZGUgKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUludDMyKiApCisgIEZUX0ZhY2VfR2V0Q2hhcnNPZlZhcmlhbnQoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICkKKyAgeworICAgIEZUX1VJbnQzMiAgKnJlc3VsdCA9IE5VTEw7CisKKworICAgIGlmICggZmFjZSApCisgICAgeworICAgICAgRlRfQ2hhck1hcCAgY2hhcm1hcCA9IGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwKCBmYWNlICk7CisKKworICAgICAgaWYgKCBjaGFybWFwICE9IE5VTEwgKQorICAgICAgeworICAgICAgICBGVF9DTWFwICAgIHZjbWFwICA9IEZUX0NNQVAoIGNoYXJtYXAgKTsKKyAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisKKyAgICAgICAgaWYgKCB2YXJpYW50U2VsZWN0b3IgPiAweEZGRkZGRkZGVUwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgdmFyaWFudFNlbGVjdG9yIiApKTsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCB2YXJpYW50U2VsZWN0b3IgKSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSB2Y21hcC0+Y2xhenotPnZhcmlhbnRjaGFyX2xpc3QoIHZjbWFwLCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQzMil2YXJpYW50U2VsZWN0b3IgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9VSW50ICkKKyAgRlRfR2V0X05hbWVfSW5kZXgoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICBnbHlwaF9uYW1lICkKKyAgeworICAgIEZUX1VJbnQgIHJlc3VsdCA9IDA7CisKKworICAgIGlmICggZmFjZSAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIEZUX0hBU19HTFlQSF9OQU1FUyggZmFjZSApICYmCisgICAgICAgICBnbHlwaF9uYW1lICAgICAgICAgICAgICAgICApCisgICAgeworICAgICAgRlRfU2VydmljZV9HbHlwaERpY3QgIHNlcnZpY2U7CisKKworICAgICAgRlRfRkFDRV9MT09LVVBfU0VSVklDRSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTFlQSF9ESUNUICk7CisKKyAgICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5uYW1lX2luZGV4ICkKKyAgICAgICAgcmVzdWx0ID0gc2VydmljZS0+bmFtZV9pbmRleCggZmFjZSwgZ2x5cGhfbmFtZSApOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0dseXBoX05hbWUoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfR2x5cGhEaWN0ICBzZXJ2aWNlOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhYnVmZmVyIHx8IGJ1ZmZlcl9tYXggPT0gMCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIC8qIGNsZWFuIHVwIGJ1ZmZlciAqLworICAgICgoRlRfQnl0ZSopYnVmZmVyKVswXSA9ICdcMCc7CisKKyAgICBpZiAoIChGVF9Mb25nKWdseXBoX2luZGV4ID49IGZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0luZGV4ICk7CisKKyAgICBpZiAoICFGVF9IQVNfR0xZUEhfTkFNRVMoIGZhY2UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIEdMWVBIX0RJQ1QgKTsKKyAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X25hbWUgKQorICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfbmFtZSggZmFjZSwgZ2x5cGhfaW5kZXgsIGJ1ZmZlciwgYnVmZmVyX21heCApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggY29uc3QgY2hhciogKQorICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIGNvbnN0IGNoYXIqICByZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggIXJlc3VsdCApCisgICAgeworICAgICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lICBzZXJ2aWNlOworCisKKyAgICAgIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9TVFNDUklQVF9GT05UX05BTUUgKTsKKworICAgICAgaWYgKCBzZXJ2aWNlICYmIHNlcnZpY2UtPmdldF9wc19mb250X25hbWUgKQorICAgICAgICByZXN1bHQgPSBzZXJ2aWNlLT5nZXRfcHNfZm9udF9uYW1lKCBmYWNlICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0dHRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCogKQorICBGVF9HZXRfU2ZudF9UYWJsZSggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TZm50X1RhZyAgdGFnICkKKyAgeworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgdGFibGUgPSBOVUxMOworICAgIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZSAgc2VydmljZTsKKworCisgICAgaWYgKCBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgeworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFNGTlRfVEFCTEUgKTsKKyAgICAgIGlmICggc2VydmljZSAhPSBOVUxMICkKKyAgICAgICAgdGFibGUgPSBzZXJ2aWNlLT5nZXRfdGFibGUoIGZhY2UsIHRhZyApOworICAgIH0KKworICAgIHJldHVybiB0YWJsZTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0dHRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Mb2FkX1NmbnRfVGFibGUoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIGxlbmd0aCApCisgIHsKKyAgICBGVF9TZXJ2aWNlX1NGTlRfVGFibGUgIHNlcnZpY2U7CisKKworICAgIGlmICggIWZhY2UgfHwgIUZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBTRk5UX1RBQkxFICk7CisgICAgaWYgKCBzZXJ2aWNlID09IE5VTEwgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICAgIHJldHVybiBzZXJ2aWNlLT5sb2FkX3RhYmxlKCBmYWNlLCB0YWcsIG9mZnNldCwgYnVmZmVyLCBsZW5ndGggKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0dHRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZm50X1RhYmxlX0luZm8oIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHRhYmxlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqbGVuZ3RoICkKKyAgeworICAgIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZSAgc2VydmljZTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgIG9mZnNldDsKKworCisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxlbmd0aCcgZGVsYXllZCB0byBgc2VydmljZS0+dGFibGVfaW5mbycgKi8KKworICAgIGlmICggIWZhY2UgfHwgIUZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBTRk5UX1RBQkxFICk7CisgICAgaWYgKCBzZXJ2aWNlID09IE5VTEwgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICAgIHJldHVybiBzZXJ2aWNlLT50YWJsZV9pbmZvKCBmYWNlLCB0YWJsZV9pbmRleCwgdGFnLCAmb2Zmc2V0LCBsZW5ndGggKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0dHRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUxvbmcgKQorICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCggRlRfQ2hhck1hcCAgY2hhcm1hcCApCisgIHsKKyAgICBGVF9TZXJ2aWNlX1RUQ01hcHMgIHNlcnZpY2U7CisgICAgRlRfRmFjZSAgICAgICAgICAgICBmYWNlOworICAgIFRUX0NNYXBJbmZvICAgICAgICAgY21hcF9pbmZvOworCisKKyAgICBpZiAoICFjaGFybWFwIHx8ICFjaGFybWFwLT5mYWNlICkKKyAgICAgIHJldHVybiAwOworCisgICAgZmFjZSA9IGNoYXJtYXAtPmZhY2U7CisgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFRUX0NNQVAgKTsKKyAgICBpZiAoIHNlcnZpY2UgPT0gTlVMTCApCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIHNlcnZpY2UtPmdldF9jbWFwX2luZm8oIGNoYXJtYXAsICZjbWFwX2luZm8gKSkKKyAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNtYXBfaW5mby5sYW5ndWFnZTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0dHRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX0dldF9DTWFwX0Zvcm1hdCggRlRfQ2hhck1hcCAgY2hhcm1hcCApCisgIHsKKyAgICBGVF9TZXJ2aWNlX1RUQ01hcHMgIHNlcnZpY2U7CisgICAgRlRfRmFjZSAgICAgICAgICAgICBmYWNlOworICAgIFRUX0NNYXBJbmZvICAgICAgICAgY21hcF9pbmZvOworCisKKyAgICBpZiAoICFjaGFybWFwIHx8ICFjaGFybWFwLT5mYWNlICkKKyAgICAgIHJldHVybiAtMTsKKworICAgIGZhY2UgPSBjaGFybWFwLT5mYWNlOworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBUVF9DTUFQICk7CisgICAgaWYgKCBzZXJ2aWNlID09IE5VTEwgKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmICggc2VydmljZS0+Z2V0X2NtYXBfaW5mbyggY2hhcm1hcCwgJmNtYXBfaW5mbyApKQorICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGNtYXBfaW5mby5mb3JtYXQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzaXplcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9BY3RpdmF0ZV9TaXplKCBGVF9TaXplICBzaXplICkKKyAgeworICAgIEZUX0ZhY2UgIGZhY2U7CisKKworICAgIGlmICggIXNpemUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1NpemVfSGFuZGxlICk7CisKKyAgICBmYWNlID0gc2l6ZS0+ZmFjZTsKKyAgICBpZiAoICFmYWNlIHx8ICFmYWNlLT5kcml2ZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICAvKiB3ZSBkb24ndCBuZWVkIGFueXRoaW5nIG1vcmUgY29tcGxleCB0aGFuIHRoYXQ7IGFsbCBzaXplIG9iamVjdHMgKi8KKyAgICAvKiBhcmUgYWxyZWFkeSBsaXN0ZWQgYnkgdGhlIGZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBmYWNlLT5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICBSIEUgTiBEIEUgUiBFIFIgUyAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBsb29rdXAgYSByZW5kZXJlciBieSBnbHlwaCBmb3JtYXQgaW4gdGhlIGxpYnJhcnkncyBsaXN0ICovCisgIEZUX0JBU0VfREVGKCBGVF9SZW5kZXJlciApCisgIEZUX0xvb2t1cF9SZW5kZXJlciggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoX0Zvcm1hdCAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xpc3ROb2RlKiAgICAgbm9kZSApCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgY3VyOworICAgIEZUX1JlbmRlcmVyICByZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGN1ciA9IGxpYnJhcnktPnJlbmRlcmVycy5oZWFkOworCisgICAgaWYgKCBub2RlICkKKyAgICB7CisgICAgICBpZiAoICpub2RlICkKKyAgICAgICAgY3VyID0gKCpub2RlKS0+bmV4dDsKKyAgICAgICpub2RlID0gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAoIGN1ciApCisgICAgeworICAgICAgRlRfUmVuZGVyZXIgIHJlbmRlcmVyID0gRlRfUkVOREVSRVIoIGN1ci0+ZGF0YSApOworCisKKyAgICAgIGlmICggcmVuZGVyZXItPmdseXBoX2Zvcm1hdCA9PSBmb3JtYXQgKQorICAgICAgeworICAgICAgICBpZiAoIG5vZGUgKQorICAgICAgICAgICpub2RlID0gY3VyOworCisgICAgICAgIHJlc3VsdCA9IHJlbmRlcmVyOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMgRlRfUmVuZGVyZXIKKyAgZnRfbG9va3VwX2dseXBoX3JlbmRlcmVyKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgRlRfRmFjZSAgICAgIGZhY2UgICAgPSBzbG90LT5mYWNlOworICAgIEZUX0xpYnJhcnkgICBsaWJyYXJ5ID0gRlRfRkFDRV9MSUJSQVJZKCBmYWNlICk7CisgICAgRlRfUmVuZGVyZXIgIHJlc3VsdCAgPSBsaWJyYXJ5LT5jdXJfcmVuZGVyZXI7CisKKworICAgIGlmICggIXJlc3VsdCB8fCByZXN1bHQtPmdseXBoX2Zvcm1hdCAhPSBzbG90LT5mb3JtYXQgKQorICAgICAgcmVzdWx0ID0gRlRfTG9va3VwX1JlbmRlcmVyKCBsaWJyYXJ5LCBzbG90LT5mb3JtYXQsIDAgKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3NldF9jdXJyZW50X3JlbmRlcmVyKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1JlbmRlcmVyICByZW5kZXJlcjsKKworCisgICAgcmVuZGVyZXIgPSBGVF9Mb29rdXBfUmVuZGVyZXIoIGxpYnJhcnksIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLCAwICk7CisgICAgbGlicmFyeS0+Y3VyX3JlbmRlcmVyID0gcmVuZGVyZXI7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9hZGRfcmVuZGVyZXIoIEZUX01vZHVsZSAgbW9kdWxlICkKKyAgeworICAgIEZUX0xpYnJhcnkgICBsaWJyYXJ5ID0gbW9kdWxlLT5saWJyYXJ5OworICAgIEZUX01lbW9yeSAgICBtZW1vcnkgID0gbGlicmFyeS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVF9MaXN0Tm9kZSAgbm9kZSAgICA9IE5VTEw7CisKKworICAgIGlmICggRlRfTkVXKCBub2RlICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgeworICAgICAgRlRfUmVuZGVyZXIgICAgICAgICByZW5kZXIgPSBGVF9SRU5ERVJFUiggbW9kdWxlICk7CisgICAgICBGVF9SZW5kZXJlcl9DbGFzcyogIGNsYXp6ICA9IChGVF9SZW5kZXJlcl9DbGFzcyopbW9kdWxlLT5jbGF6ejsKKworCisgICAgICByZW5kZXItPmNsYXp6ICAgICAgICA9IGNsYXp6OworICAgICAgcmVuZGVyLT5nbHlwaF9mb3JtYXQgPSBjbGF6ei0+Z2x5cGhfZm9ybWF0OworCisgICAgICAvKiBhbGxvY2F0ZSByYXN0ZXIgb2JqZWN0IGlmIG5lZWRlZCAqLworICAgICAgaWYgKCBjbGF6ei0+Z2x5cGhfZm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FICYmCisgICAgICAgICAgIGNsYXp6LT5yYXN0ZXJfY2xhc3MtPnJhc3Rlcl9uZXcgICAgICAgICAgICAgICAgKQorICAgICAgeworICAgICAgICBlcnJvciA9IGNsYXp6LT5yYXN0ZXJfY2xhc3MtPnJhc3Rlcl9uZXcoIG1lbW9yeSwgJnJlbmRlci0+cmFzdGVyICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICByZW5kZXItPnJhc3Rlcl9yZW5kZXIgPSBjbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVuZGVyOworICAgICAgICByZW5kZXItPnJlbmRlciAgICAgICAgPSBjbGF6ei0+cmVuZGVyX2dseXBoOworICAgICAgfQorCisgICAgICAvKiBhZGQgdG8gbGlzdCAqLworICAgICAgbm9kZS0+ZGF0YSA9IG1vZHVsZTsKKyAgICAgIEZUX0xpc3RfQWRkKCAmbGlicmFyeS0+cmVuZGVyZXJzLCBub2RlICk7CisKKyAgICAgIGZ0X3NldF9jdXJyZW50X3JlbmRlcmVyKCBsaWJyYXJ5ICk7CisgICAgfQorCisgIEZhaWw6CisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9GUkVFKCBub2RlICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3JlbW92ZV9yZW5kZXJlciggRlRfTW9kdWxlICBtb2R1bGUgKQorICB7CisgICAgRlRfTGlicmFyeSAgIGxpYnJhcnk7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKKyAgICBGVF9MaXN0Tm9kZSAgbm9kZTsKKworCisgICAgbGlicmFyeSA9IG1vZHVsZS0+bGlicmFyeTsKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybjsKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIG5vZGUgPSBGVF9MaXN0X0ZpbmQoICZsaWJyYXJ5LT5yZW5kZXJlcnMsIG1vZHVsZSApOworICAgIGlmICggbm9kZSApCisgICAgeworICAgICAgRlRfUmVuZGVyZXIgIHJlbmRlciA9IEZUX1JFTkRFUkVSKCBtb2R1bGUgKTsKKworCisgICAgICAvKiByZWxlYXNlIHJhc3RlciBvYmplY3QsIGlmIGFueSAqLworICAgICAgaWYgKCByZW5kZXItPmNsYXp6LT5nbHlwaF9mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgJiYKKyAgICAgICAgICAgcmVuZGVyLT5yYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfZG9uZSggcmVuZGVyLT5yYXN0ZXIgKTsKKworICAgICAgLyogcmVtb3ZlIGZyb20gbGlzdCAqLworICAgICAgRlRfTGlzdF9SZW1vdmUoICZsaWJyYXJ5LT5yZW5kZXJlcnMsIG5vZGUgKTsKKyAgICAgIEZUX0ZSRUUoIG5vZGUgKTsKKworICAgICAgZnRfc2V0X2N1cnJlbnRfcmVuZGVyZXIoIGxpYnJhcnkgKTsKKyAgICB9CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRyZW5kZXIuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX1JlbmRlcmVyICkKKyAgRlRfR2V0X1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhfRm9ybWF0ICBmb3JtYXQgKQorICB7CisgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGRlbGF5ZWQgdG8gYEZUX0xvb2t1cF9SZW5kZXJlcicgKi8KKworICAgIHJldHVybiBGVF9Mb29rdXBfUmVuZGVyZXIoIGxpYnJhcnksIGZvcm1hdCwgMCApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0cmVuZGVyLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1NldF9SZW5kZXJlciggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJlciAgICByZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtZXRlcnMgKQorICB7CisgICAgRlRfTGlzdE5vZGUgIG5vZGU7CisgICAgRlRfRXJyb3IgICAgIGVycm9yID0gRlRfRXJyX09rOworCisgICAgRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMgIHNldF9tb2RlOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCAhcmVuZGVyZXIgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIG51bV9wYXJhbXMgPiAwICYmICFwYXJhbWV0ZXJzICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbm9kZSA9IEZUX0xpc3RfRmluZCggJmxpYnJhcnktPnJlbmRlcmVycywgcmVuZGVyZXIgKTsKKyAgICBpZiAoICFub2RlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfTGlzdF9VcCggJmxpYnJhcnktPnJlbmRlcmVycywgbm9kZSApOworCisgICAgaWYgKCByZW5kZXJlci0+Z2x5cGhfZm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FICkKKyAgICAgIGxpYnJhcnktPmN1cl9yZW5kZXJlciA9IHJlbmRlcmVyOworCisgICAgc2V0X21vZGUgPSByZW5kZXJlci0+Y2xhenotPnNldF9tb2RlOworCisgICAgZm9yICggOyBudW1fcGFyYW1zID4gMDsgbnVtX3BhcmFtcy0tICkKKyAgICB7CisgICAgICBlcnJvciA9IHNldF9tb2RlKCByZW5kZXJlciwgcGFyYW1ldGVycy0+dGFnLCBwYXJhbWV0ZXJzLT5kYXRhICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgYnJlYWs7CisgICAgICBwYXJhbWV0ZXJzKys7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwoIEZUX0xpYnJhcnkgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfUmVuZGVyZXIgIHJlbmRlcmVyOworCisKKyAgICAvKiBpZiBpdCBpcyBhbHJlYWR5IGEgYml0bWFwLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nICovCisgICAgc3dpdGNoICggc2xvdC0+Zm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOiAgIC8qIGFscmVhZHkgYSBiaXRtYXAsIGRvbid0IGRvIGFueXRoaW5nICovCisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICB7CisgICAgICAgIEZUX0xpc3ROb2RlICBub2RlID0gTlVMTDsKKworCisgICAgICAgIC8qIHNtYWxsIHNob3J0Y3V0IGZvciB0aGUgdmVyeSBjb21tb24gY2FzZSAqLworICAgICAgICBpZiAoIHNsb3QtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSApCisgICAgICAgIHsKKyAgICAgICAgICByZW5kZXJlciA9IGxpYnJhcnktPmN1cl9yZW5kZXJlcjsKKyAgICAgICAgICBub2RlICAgICA9IGxpYnJhcnktPnJlbmRlcmVycy5oZWFkOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZW5kZXJlciA9IEZUX0xvb2t1cF9SZW5kZXJlciggbGlicmFyeSwgc2xvdC0+Zm9ybWF0LCAmbm9kZSApOworCisgICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICAgICAgd2hpbGUgKCByZW5kZXJlciApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IHJlbmRlcmVyLT5yZW5kZXIoIHJlbmRlcmVyLCBzbG90LCByZW5kZXJfbW9kZSwgTlVMTCApOworICAgICAgICAgIGlmICggIWVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgRlRfRVJSX05FUSggZXJyb3IsIENhbm5vdF9SZW5kZXJfR2x5cGggKSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIEZUX0Vycl9DYW5ub3RfUmVuZGVyX0dseXBoIGlzIHJldHVybmVkIGlmIHRoZSByZW5kZXIgbW9kZSAgICovCisgICAgICAgICAgLyogaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIHRoaXMgZ2x5cGggaW1hZ2UgKi8KKyAgICAgICAgICAvKiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgLyogbm93LCBsb29rIGZvciBhbm90aGVyIHJlbmRlcmVyIHRoYXQgc3VwcG9ydHMgdGhlIHNhbWUgKi8KKyAgICAgICAgICAvKiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHJlbmRlcmVyID0gRlRfTG9va3VwX1JlbmRlcmVyKCBsaWJyYXJ5LCBzbG90LT5mb3JtYXQsICZub2RlICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2JpdG1hcAorCisgICAgLyogd2UgY29udmVydCB0byBhIHNpbmdsZSBiaXRtYXAgZm9ybWF0IGZvciBjb21wdXRpbmcgdGhlIGNoZWNrc3VtICovCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0JpdG1hcCAgYml0bWFwOworICAgICAgRlRfRXJyb3IgICBlcnI7CisKKworICAgICAgRlRfQml0bWFwX0luaXQoICZiaXRtYXAgKTsKKworICAgICAgLyogdGhpcyBhbHNvIGNvbnZlcnRzIHRoZSBiaXRtYXAgZmxvdyB0byBgZG93bicgKGkuZS4sIHBpdGNoID4gMCkgKi8KKyAgICAgIGVyciA9IEZUX0JpdG1hcF9Db252ZXJ0KCBsaWJyYXJ5LCAmc2xvdC0+Yml0bWFwLCAmYml0bWFwLCAxICk7CisgICAgICBpZiAoICFlcnIgKQorICAgICAgeworICAgICAgICBNRDVfQ1RYICAgICAgICBjdHg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgIG1kNVsxNl07CisgICAgICAgIGludCAgICAgICAgICAgIGk7CisgICAgICAgIHVuc2lnbmVkIGludCAgIHJvd3MgID0gYml0bWFwLnJvd3M7CisgICAgICAgIHVuc2lnbmVkIGludCAgIHBpdGNoID0gKHVuc2lnbmVkIGludCliaXRtYXAucGl0Y2g7CisKKworICAgICAgICBNRDVfSW5pdCggJmN0eCApOworICAgICAgICBNRDVfVXBkYXRlKCAmY3R4LCBiaXRtYXAuYnVmZmVyLCByb3dzICogcGl0Y2ggKTsKKyAgICAgICAgTUQ1X0ZpbmFsKCBtZDUsICZjdHggKTsKKworICAgICAgICBGVF9UUkFDRTMoKCAiTUQ1IGNoZWNrc3VtIGZvciAlZHglZCBiaXRtYXA6XG4iCisgICAgICAgICAgICAgICAgICAgICIgICIsCisgICAgICAgICAgICAgICAgICAgIHJvd3MsIHBpdGNoICkpOworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgIEZUX1RSQUNFMygoICIlMDJYIiwgbWQ1W2ldICkpOworICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICkpOworICAgICAgfQorCisgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgJmJpdG1hcCApOworICAgIH0KKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vYmpzCisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1JlbmRlcl9HbHlwaCggRlRfR2x5cGhTbG90ICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlICkKKyAgeworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisKKworICAgIGlmICggIXNsb3QgfHwgIXNsb3QtPmZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBsaWJyYXJ5ID0gRlRfRkFDRV9MSUJSQVJZKCBzbG90LT5mYWNlICk7CisKKyAgICByZXR1cm4gRlRfUmVuZGVyX0dseXBoX0ludGVybmFsKCBsaWJyYXJ5LCBzbG90LCByZW5kZXJfbW9kZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgIE0gTyBEIFUgTCBFIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZXN0cm95X01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZXN0cm95cyBhIGdpdmVuIG1vZHVsZSBvYmplY3QuICBGb3IgZHJpdmVycywgdGhpcyBhbHNvIGRlc3Ryb3lzICAgKi8KKyAgLyogICAgYWxsIGNoaWxkIGZhY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbW9kdWxlIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGRyaXZlciBfbXVzdF8gYmUgTE9DS0VEISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBEZXN0cm95X01vZHVsZSggRlRfTW9kdWxlICBtb2R1bGUgKQorICB7CisgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ICA9IG1vZHVsZS0+bWVtb3J5OworICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICAgPSBtb2R1bGUtPmNsYXp6OworICAgIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7CisKKworICAgIGlmICggbGlicmFyeSAmJiBsaWJyYXJ5LT5hdXRvX2hpbnRlciA9PSBtb2R1bGUgKQorICAgICAgbGlicmFyeS0+YXV0b19oaW50ZXIgPSBOVUxMOworCisgICAgLyogaWYgdGhlIG1vZHVsZSBpcyBhIHJlbmRlcmVyICovCisgICAgaWYgKCBGVF9NT0RVTEVfSVNfUkVOREVSRVIoIG1vZHVsZSApICkKKyAgICAgIGZ0X3JlbW92ZV9yZW5kZXJlciggbW9kdWxlICk7CisKKyAgICAvKiBpZiB0aGUgbW9kdWxlIGlzIGEgZm9udCBkcml2ZXIsIGFkZCBzb21lIHN0ZXBzICovCisgICAgaWYgKCBGVF9NT0RVTEVfSVNfRFJJVkVSKCBtb2R1bGUgKSApCisgICAgICBEZXN0cm95X0RyaXZlciggRlRfRFJJVkVSKCBtb2R1bGUgKSApOworCisgICAgLyogZmluYWxpemUgdGhlIG1vZHVsZSBvYmplY3QgKi8KKyAgICBpZiAoIGNsYXp6LT5tb2R1bGVfZG9uZSApCisgICAgICBjbGF6ei0+bW9kdWxlX2RvbmUoIG1vZHVsZSApOworCisgICAgLyogZGlzY2FyZCBpdCAqLworICAgIEZUX0ZSRUUoIG1vZHVsZSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kYXBpLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0FkZF9Nb2R1bGUoIEZUX0xpYnJhcnkgICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisgICAgRlRfTW9kdWxlICBtb2R1bGU7CisgICAgRlRfVUludCAgICBubjsKKworCisjZGVmaW5lIEZSRUVUWVBFX1ZFUl9GSVhFRCAgKCAoIChGVF9Mb25nKUZSRUVUWVBFX01BSk9SIDw8IDE2ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZSRUVUWVBFX01JTk9SICAgICAgICAgICAgICAgICAgKQorCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGlmICggIWNsYXp6ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogY2hlY2sgZnJlZXR5cGUgdmVyc2lvbiAqLworICAgIGlmICggY2xhenotPm1vZHVsZV9yZXF1aXJlcyA+IEZSRUVUWVBFX1ZFUl9GSVhFRCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVmVyc2lvbiApOworCisgICAgLyogbG9vayBmb3IgYSBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBsaWJyYXJ5J3MgdGFibGUgKi8KKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgbGlicmFyeS0+bnVtX21vZHVsZXM7IG5uKysgKQorICAgIHsKKyAgICAgIG1vZHVsZSA9IGxpYnJhcnktPm1vZHVsZXNbbm5dOworICAgICAgaWYgKCBmdF9zdHJjbXAoIG1vZHVsZS0+Y2xhenotPm1vZHVsZV9uYW1lLCBjbGF6ei0+bW9kdWxlX25hbWUgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgLyogdGhpcyBpbnN0YWxsZWQgbW9kdWxlIGhhcyB0aGUgc2FtZSBuYW1lLCBjb21wYXJlIHRoZWlyIHZlcnNpb25zICovCisgICAgICAgIGlmICggY2xhenotPm1vZHVsZV92ZXJzaW9uIDw9IG1vZHVsZS0+Y2xhenotPm1vZHVsZV92ZXJzaW9uICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIExvd2VyX01vZHVsZV9WZXJzaW9uICk7CisKKyAgICAgICAgLyogcmVtb3ZlIHRoZSBtb2R1bGUgZnJvbSBvdXIgbGlzdCwgdGhlbiBleGl0IHRoZSBsb29wIHRvIHJlcGxhY2UgKi8KKyAgICAgICAgLyogaXQgYnkgb3VyIG5ldyB2ZXJzaW9uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgRlRfUmVtb3ZlX01vZHVsZSggbGlicmFyeSwgbW9kdWxlICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKyAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIGxpYnJhcnktPm51bV9tb2R1bGVzID49IEZUX01BWF9NT0RVTEVTICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9Ecml2ZXJzICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgbW9kdWxlIG9iamVjdCAqLworICAgIGlmICggRlRfQUxMT0MoIG1vZHVsZSwgY2xhenotPm1vZHVsZV9zaXplICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogYmFzZSBpbml0aWFsaXphdGlvbiAqLworICAgIG1vZHVsZS0+bGlicmFyeSA9IGxpYnJhcnk7CisgICAgbW9kdWxlLT5tZW1vcnkgID0gbWVtb3J5OworICAgIG1vZHVsZS0+Y2xhenogICA9IChGVF9Nb2R1bGVfQ2xhc3MqKWNsYXp6OworCisgICAgLyogY2hlY2sgd2hldGhlciB0aGUgbW9kdWxlIGlzIGEgcmVuZGVyZXIgLSB0aGlzIG11c3QgYmUgcGVyZm9ybWVkICovCisgICAgLyogYmVmb3JlIHRoZSBub3JtYWwgbW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBGVF9NT0RVTEVfSVNfUkVOREVSRVIoIG1vZHVsZSApICkKKyAgICB7CisgICAgICAvKiBhZGQgdG8gdGhlIHJlbmRlcmVycyBsaXN0ICovCisgICAgICBlcnJvciA9IGZ0X2FkZF9yZW5kZXJlciggbW9kdWxlICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIC8qIGlzIHRoZSBtb2R1bGUgYSBhdXRvLWhpbnRlcj8gKi8KKyAgICBpZiAoIEZUX01PRFVMRV9JU19ISU5URVIoIG1vZHVsZSApICkKKyAgICAgIGxpYnJhcnktPmF1dG9faGludGVyID0gbW9kdWxlOworCisgICAgLyogaWYgdGhlIG1vZHVsZSBpcyBhIGZvbnQgZHJpdmVyICovCisgICAgaWYgKCBGVF9NT0RVTEVfSVNfRFJJVkVSKCBtb2R1bGUgKSApCisgICAgeworICAgICAgRlRfRHJpdmVyICBkcml2ZXIgPSBGVF9EUklWRVIoIG1vZHVsZSApOworCisKKyAgICAgIGRyaXZlci0+Y2xhenogPSAoRlRfRHJpdmVyX0NsYXNzKW1vZHVsZS0+Y2xheno7CisgICAgfQorCisgICAgaWYgKCBjbGF6ei0+bW9kdWxlX2luaXQgKQorICAgIHsKKyAgICAgIGVycm9yID0gY2xhenotPm1vZHVsZV9pbml0KCBtb2R1bGUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogYWRkIG1vZHVsZSB0byB0aGUgbGlicmFyeSdzIHRhYmxlICovCisgICAgbGlicmFyeS0+bW9kdWxlc1tsaWJyYXJ5LT5udW1fbW9kdWxlcysrXSA9IG1vZHVsZTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIGlmICggRlRfTU9EVUxFX0lTX1JFTkRFUkVSKCBtb2R1bGUgKSApCisgICAgeworICAgICAgRlRfUmVuZGVyZXIgIHJlbmRlcmVyID0gRlRfUkVOREVSRVIoIG1vZHVsZSApOworCisKKyAgICAgIGlmICggcmVuZGVyZXItPmNsYXp6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgcmVuZGVyZXItPmNsYXp6LT5nbHlwaF9mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgJiYKKyAgICAgICAgICAgcmVuZGVyZXItPnJhc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICByZW5kZXJlci0+Y2xhenotPnJhc3Rlcl9jbGFzcy0+cmFzdGVyX2RvbmUoIHJlbmRlcmVyLT5yYXN0ZXIgKTsKKyAgICB9CisKKyAgICBGVF9GUkVFKCBtb2R1bGUgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtb2RhcGkuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX01vZHVsZSApCisgIEZUX0dldF9Nb2R1bGUoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kdWxlX25hbWUgKQorICB7CisgICAgRlRfTW9kdWxlICAgcmVzdWx0ID0gTlVMTDsKKyAgICBGVF9Nb2R1bGUqICBjdXI7CisgICAgRlRfTW9kdWxlKiAgbGltaXQ7CisKKworICAgIGlmICggIWxpYnJhcnkgfHwgIW1vZHVsZV9uYW1lICkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjdXIgICA9IGxpYnJhcnktPm1vZHVsZXM7CisgICAgbGltaXQgPSBjdXIgKyBsaWJyYXJ5LT5udW1fbW9kdWxlczsKKworICAgIGZvciAoIDsgY3VyIDwgbGltaXQ7IGN1cisrICkKKyAgICAgIGlmICggZnRfc3RyY21wKCBjdXJbMF0tPmNsYXp6LT5tb2R1bGVfbmFtZSwgbW9kdWxlX25hbWUgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gY3VyWzBdOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggY29uc3Qgdm9pZCogKQorICBGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kX25hbWUgKQorICB7CisgICAgRlRfTW9kdWxlICBtb2R1bGU7CisKKworICAgIC8qIHRlc3QgZm9yIHZhbGlkIGBsaWJyYXJ5JyBkZWxheWVkIHRvIEZUX0dldF9Nb2R1bGUoKSAqLworCisgICAgbW9kdWxlID0gRlRfR2V0X01vZHVsZSggbGlicmFyeSwgbW9kX25hbWUgKTsKKworICAgIHJldHVybiBtb2R1bGUgPyBtb2R1bGUtPmNsYXp6LT5tb2R1bGVfaW50ZXJmYWNlIDogMDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1BvaW50ZXIgKQorICBmdF9tb2R1bGVfZ2V0X3NlcnZpY2UoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHNlcnZpY2VfaWQgKQorICB7CisgICAgRlRfUG9pbnRlciAgcmVzdWx0ID0gTlVMTDsKKworCisgICAgaWYgKCBtb2R1bGUgKQorICAgIHsKKyAgICAgIEZUX0FTU0VSVCggbW9kdWxlLT5jbGF6eiAmJiBtb2R1bGUtPmNsYXp6LT5nZXRfaW50ZXJmYWNlICk7CisKKyAgICAgIC8qIGZpcnN0LCBsb29rIGZvciB0aGUgc2VydmljZSBpbiB0aGUgbW9kdWxlICovCisgICAgICBpZiAoIG1vZHVsZS0+Y2xhenotPmdldF9pbnRlcmZhY2UgKQorICAgICAgICByZXN1bHQgPSBtb2R1bGUtPmNsYXp6LT5nZXRfaW50ZXJmYWNlKCBtb2R1bGUsIHNlcnZpY2VfaWQgKTsKKworICAgICAgaWYgKCByZXN1bHQgPT0gTlVMTCApCisgICAgICB7CisgICAgICAgIC8qIHdlIGRpZG4ndCBmaW5kIGl0LCBsb29rIGluIGFsbCBvdGhlciBtb2R1bGVzIHRoZW4gKi8KKyAgICAgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IG1vZHVsZS0+bGlicmFyeTsKKyAgICAgICAgRlRfTW9kdWxlKiAgY3VyICAgICA9IGxpYnJhcnktPm1vZHVsZXM7CisgICAgICAgIEZUX01vZHVsZSogIGxpbWl0ICAgPSBjdXIgKyBsaWJyYXJ5LT5udW1fbW9kdWxlczsKKworCisgICAgICAgIGZvciAoIDsgY3VyIDwgbGltaXQ7IGN1cisrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggY3VyWzBdICE9IG1vZHVsZSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfQVNTRVJUKCBjdXJbMF0tPmNsYXp6ICk7CisKKyAgICAgICAgICAgIGlmICggY3VyWzBdLT5jbGF6ei0+Z2V0X2ludGVyZmFjZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlc3VsdCA9IGN1clswXS0+Y2xhenotPmdldF9pbnRlcmZhY2UoIGN1clswXSwgc2VydmljZV9pZCApOworICAgICAgICAgICAgICBpZiAoIHJlc3VsdCAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kYXBpLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1JlbW92ZV9Nb2R1bGUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZSAgIG1vZHVsZSApCisgIHsKKyAgICAvKiB0cnkgdG8gZmluZCB0aGUgbW9kdWxlIGZyb20gdGhlIHRhYmxlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZXJlICovCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCBtb2R1bGUgKQorICAgIHsKKyAgICAgIEZUX01vZHVsZSogIGN1ciAgID0gbGlicmFyeS0+bW9kdWxlczsKKyAgICAgIEZUX01vZHVsZSogIGxpbWl0ID0gY3VyICsgbGlicmFyeS0+bnVtX21vZHVsZXM7CisKKworICAgICAgZm9yICggOyBjdXIgPCBsaW1pdDsgY3VyKysgKQorICAgICAgeworICAgICAgICBpZiAoIGN1clswXSA9PSBtb2R1bGUgKQorICAgICAgICB7CisgICAgICAgICAgLyogcmVtb3ZlIGl0IGZyb20gdGhlIHRhYmxlICovCisgICAgICAgICAgbGlicmFyeS0+bnVtX21vZHVsZXMtLTsKKyAgICAgICAgICBsaW1pdC0tOworICAgICAgICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGN1clswXSA9IGN1clsxXTsKKyAgICAgICAgICAgIGN1cisrOworICAgICAgICAgIH0KKyAgICAgICAgICBsaW1pdFswXSA9IE5VTEw7CisKKyAgICAgICAgICAvKiBkZXN0cm95IHRoZSBtb2R1bGUgKi8KKyAgICAgICAgICBEZXN0cm95X01vZHVsZSggbW9kdWxlICk7CisKKyAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Ecml2ZXJfSGFuZGxlICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9wcm9wZXJ0eV9kbyggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgc2V0ICkKKyAgeworICAgIEZUX01vZHVsZSogICAgICAgICAgIGN1cjsKKyAgICBGVF9Nb2R1bGUqICAgICAgICAgICBsaW1pdDsKKyAgICBGVF9Nb2R1bGVfSW50ZXJmYWNlICBpbnRlcmZhY2U7CisKKyAgICBGVF9TZXJ2aWNlX1Byb3BlcnRpZXMgIHNlcnZpY2U7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgorICAgIGNvbnN0IEZUX1N0cmluZyogIHNldF9uYW1lICA9ICJGVF9Qcm9wZXJ0eV9TZXQiOworICAgIGNvbnN0IEZUX1N0cmluZyogIGdldF9uYW1lICA9ICJGVF9Qcm9wZXJ0eV9HZXQiOworICAgIGNvbnN0IEZUX1N0cmluZyogIGZ1bmNfbmFtZSA9IHNldCA/IHNldF9uYW1lIDogZ2V0X25hbWU7CisjZW5kaWYKKworICAgIEZUX0Jvb2wgIG1pc3NpbmdfZnVuYzsKKworCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGlmICggIW1vZHVsZV9uYW1lIHx8ICFwcm9wZXJ0eV9uYW1lIHx8ICF2YWx1ZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGN1ciAgID0gbGlicmFyeS0+bW9kdWxlczsKKyAgICBsaW1pdCA9IGN1ciArIGxpYnJhcnktPm51bV9tb2R1bGVzOworCisgICAgLyogc2VhcmNoIG1vZHVsZSAqLworICAgIGZvciAoIDsgY3VyIDwgbGltaXQ7IGN1cisrICkKKyAgICAgIGlmICggIWZ0X3N0cmNtcCggY3VyWzBdLT5jbGF6ei0+bW9kdWxlX25hbWUsIG1vZHVsZV9uYW1lICkgKQorICAgICAgICBicmVhazsKKworICAgIGlmICggY3VyID09IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICIlczogY2FuJ3QgZmluZCBtb2R1bGUgYCVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgZnVuY19uYW1lLCBtb2R1bGVfbmFtZSApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICB9CisKKyAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBzZXJ2aWNlIGludGVyZmFjZSAqLworICAgIGlmICggIWN1clswXS0+Y2xhenotPmdldF9pbnRlcmZhY2UgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIiVzOiBtb2R1bGUgYCVzJyBkb2Vzbid0IHN1cHBvcnQgcHJvcGVydGllc1xuIiwKKyAgICAgICAgICAgICAgICAgZnVuY19uYW1lLCBtb2R1bGVfbmFtZSApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgfQorCisgICAgLyogc2VhcmNoIHByb3BlcnR5IHNlcnZpY2UgKi8KKyAgICBpbnRlcmZhY2UgPSBjdXJbMF0tPmNsYXp6LT5nZXRfaW50ZXJmYWNlKCBjdXJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTICk7CisgICAgaWYgKCAhaW50ZXJmYWNlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICIlczogbW9kdWxlIGAlcycgZG9lc24ndCBzdXBwb3J0IHByb3BlcnRpZXNcbiIsCisgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgbW9kdWxlX25hbWUgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgIH0KKworICAgIHNlcnZpY2UgPSAoRlRfU2VydmljZV9Qcm9wZXJ0aWVzKWludGVyZmFjZTsKKworICAgIGlmICggc2V0ICkKKyAgICAgIG1pc3NpbmdfZnVuYyA9IChGVF9Cb29sKSggIXNlcnZpY2UtPnNldF9wcm9wZXJ0eSApOworICAgIGVsc2UKKyAgICAgIG1pc3NpbmdfZnVuYyA9IChGVF9Cb29sKSggIXNlcnZpY2UtPmdldF9wcm9wZXJ0eSApOworCisgICAgaWYgKCBtaXNzaW5nX2Z1bmMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIiVzOiBwcm9wZXJ0eSBzZXJ2aWNlIG9mIG1vZHVsZSBgJXMnIGlzIGJyb2tlblxuIiwKKyAgICAgICAgICAgICAgICAgZnVuY19uYW1lLCBtb2R1bGVfbmFtZSApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgfQorCisgICAgcmV0dXJuIHNldCA/IHNlcnZpY2UtPnNldF9wcm9wZXJ0eSggY3VyWzBdLCBwcm9wZXJ0eV9uYW1lLCB2YWx1ZSApCisgICAgICAgICAgICAgICA6IHNlcnZpY2UtPmdldF9wcm9wZXJ0eSggY3VyWzBdLCBwcm9wZXJ0eV9uYW1lLCB2YWx1ZSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kYXBpLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1Byb3BlcnR5X1NldCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgIHZhbHVlICkKKyAgeworICAgIHJldHVybiBmdF9wcm9wZXJ0eV9kbyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZGFwaS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Qcm9wZXJ0eV9HZXQoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICB2YWx1ZSApCisgIHsKKyAgICByZXR1cm4gZnRfcHJvcGVydHlfZG8oIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgTCBJIEIgUiBBIFIgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtb2RhcGkuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUmVmZXJlbmNlX0xpYnJhcnkoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGxpYnJhcnktPnJlZmNvdW50Kys7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kYXBpLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19MaWJyYXJ5KCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICkKKyAgeworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBOVUxMOworICAgIEZUX0Vycm9yICAgIGVycm9yOworCisKKyAgICBpZiAoICFtZW1vcnkgfHwgIWFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKKyAgICAvKiBpbml0IGRlYnVnZ2luZyBzdXBwb3J0ICovCisgICAgZnRfZGVidWdfaW5pdCgpOworI2VuZGlmCisKKyAgICAvKiBmaXJzdCBvZiBhbGwsIGFsbG9jYXRlIHRoZSBsaWJyYXJ5IG9iamVjdCAqLworICAgIGlmICggRlRfTkVXKCBsaWJyYXJ5ICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgbGlicmFyeS0+bWVtb3J5ID0gbWVtb3J5OworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgICAvKiBpbml0aWFsaXplIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgY29udGFpbmVycyAqLworICAgIGVycm9yID0gZnRfcGljX2NvbnRhaW5lcl9pbml0KCBsaWJyYXJ5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CisjZW5kaWYKKworICAgIC8qIHdlIGRvbid0IHVzZSByYXN0ZXJfcG9vbCBhbnltb3JlLiAqLworICAgIGxpYnJhcnktPnJhc3Rlcl9wb29sX3NpemUgPSAwOworICAgIGxpYnJhcnktPnJhc3Rlcl9wb29sICAgICAgPSBOVUxMOworCisgICAgbGlicmFyeS0+dmVyc2lvbl9tYWpvciA9IEZSRUVUWVBFX01BSk9SOworICAgIGxpYnJhcnktPnZlcnNpb25fbWlub3IgPSBGUkVFVFlQRV9NSU5PUjsKKyAgICBsaWJyYXJ5LT52ZXJzaW9uX3BhdGNoID0gRlJFRVRZUEVfUEFUQ0g7CisKKyAgICBsaWJyYXJ5LT5yZWZjb3VudCA9IDE7CisKKyAgICAvKiBUaGF0J3Mgb2sgbm93ICovCisgICAgKmFsaWJyYXJ5ID0gbGlicmFyeTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICBGYWlsOgorICAgIGZ0X3BpY19jb250YWluZXJfZGVzdHJveSggbGlicmFyeSApOworI2VuZGlmCisgICAgRlRfRlJFRSggbGlicmFyeSApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0xpYnJhcnlfVmVyc2lvbiggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgKmFtYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICphcGF0Y2ggKQorICB7CisgICAgRlRfSW50ICBtYWpvciA9IDA7CisgICAgRlRfSW50ICBtaW5vciA9IDA7CisgICAgRlRfSW50ICBwYXRjaCA9IDA7CisKKworICAgIGlmICggbGlicmFyeSApCisgICAgeworICAgICAgbWFqb3IgPSBsaWJyYXJ5LT52ZXJzaW9uX21ham9yOworICAgICAgbWlub3IgPSBsaWJyYXJ5LT52ZXJzaW9uX21pbm9yOworICAgICAgcGF0Y2ggPSBsaWJyYXJ5LT52ZXJzaW9uX3BhdGNoOworICAgIH0KKworICAgIGlmICggYW1ham9yICkKKyAgICAgICphbWFqb3IgPSBtYWpvcjsKKworICAgIGlmICggYW1pbm9yICkKKyAgICAgICphbWlub3IgPSBtaW5vcjsKKworICAgIGlmICggYXBhdGNoICkKKyAgICAgICphcGF0Y2ggPSBwYXRjaDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZGFwaS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Eb25lX0xpYnJhcnkoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CisKKyAgICBsaWJyYXJ5LT5yZWZjb3VudC0tOworICAgIGlmICggbGlicmFyeS0+cmVmY291bnQgPiAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIC8qCisgICAgICogQ2xvc2UgYWxsIGZhY2VzIGluIHRoZSBsaWJyYXJ5LiAgSWYgd2UgZG9uJ3QgZG8gdGhpcywgd2UgY2FuIGhhdmUKKyAgICAgKiBzb21lIHN1YnRsZSBtZW1vcnkgbGVha3MuCisgICAgICoKKyAgICAgKiBFeGFtcGxlOgorICAgICAqCisgICAgICogIC0gdGhlIGNmZiBmb250IGRyaXZlciB1c2VzIHRoZSBwc2hpbnRlciBtb2R1bGUgaW4gY2ZmX3NpemVfZG9uZQorICAgICAqICAtIGlmIHRoZSBwc2hpbnRlciBtb2R1bGUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgY2ZmIGZvbnQgZHJpdmVyLAorICAgICAqICAgIG9wZW5lZCBGVF9GYWNlIG9iamVjdHMgbWFuYWdlZCBieSB0aGUgZHJpdmVyIGFyZSBub3QgcHJvcGVybHkKKyAgICAgKiAgICBkZXN0cm95ZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrCisgICAgICoKKyAgICAgKiBTb21lIGZhY2VzIGFyZSBkZXBlbmRlbnQgb24gb3RoZXIgZmFjZXMsIGxpa2UgVHlwZTQyIGZhY2VzIHRoYXQKKyAgICAgKiBkZXBlbmQgb24gVHJ1ZVR5cGUgZmFjZXMgc3ludGhlc2l6ZWQgaW50ZXJuYWxseS4KKyAgICAgKgorICAgICAqIFRoZSBvcmRlciBvZiBkcml2ZXJzIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gZHJpdmVyX25hbWVbXS4KKyAgICAgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICAgICAgbSwgbjsKKyAgICAgIGNvbnN0IGNoYXIqICBkcml2ZXJfbmFtZVtdID0geyAidHlwZTQyIiwgTlVMTCB9OworCisKKyAgICAgIGZvciAoIG0gPSAwOworICAgICAgICAgICAgbSA8IHNpemVvZiAoIGRyaXZlcl9uYW1lICkgLyBzaXplb2YgKCBkcml2ZXJfbmFtZVswXSApOworICAgICAgICAgICAgbSsrICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggbiA9IDA7IG4gPCBsaWJyYXJ5LT5udW1fbW9kdWxlczsgbisrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX01vZHVsZSAgICBtb2R1bGUgICAgICA9IGxpYnJhcnktPm1vZHVsZXNbbl07CisgICAgICAgICAgY29uc3QgY2hhciogIG1vZHVsZV9uYW1lID0gbW9kdWxlLT5jbGF6ei0+bW9kdWxlX25hbWU7CisgICAgICAgICAgRlRfTGlzdCAgICAgIGZhY2VzOworCisKKyAgICAgICAgICBpZiAoIGRyaXZlcl9uYW1lW21dICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgZnRfc3RyY21wKCBtb2R1bGVfbmFtZSwgZHJpdmVyX25hbWVbbV0gKSAhPSAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgaWYgKCAoIG1vZHVsZS0+Y2xhenotPm1vZHVsZV9mbGFncyAmIEZUX01PRFVMRV9GT05UX0RSSVZFUiApID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiRlRfRG9uZV9MaWJyYXJ5OiBjbG9zZSBmYWNlcyBmb3IgJXNcbiIsIG1vZHVsZV9uYW1lICkpOworCisgICAgICAgICAgZmFjZXMgPSAmRlRfRFJJVkVSKCBtb2R1bGUgKS0+ZmFjZXNfbGlzdDsKKyAgICAgICAgICB3aGlsZSAoIGZhY2VzLT5oZWFkICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Eb25lX0ZhY2UoIEZUX0ZBQ0UoIGZhY2VzLT5oZWFkLT5kYXRhICkgKTsKKyAgICAgICAgICAgIGlmICggZmFjZXMtPmhlYWQgKQorICAgICAgICAgICAgICBGVF9UUkFDRTAoKCAiRlRfRG9uZV9MaWJyYXJ5OiBmYWlsZWQgdG8gZnJlZSBzb21lIGZhY2VzXG4iICkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIENsb3NlIGFsbCBvdGhlciBtb2R1bGVzIGluIHRoZSBsaWJyYXJ5ICovCisjaWYgMQorICAgIC8qIFhYWCBNb2R1bGVzIGFyZSByZW1vdmVkIGluIHRoZSByZXZlcnNlZCBvcmRlciBzbyB0aGF0ICAqLworICAgIC8qIHR5cGU0MiBtb2R1bGUgaXMgcmVtb3ZlZCBiZWZvcmUgdHJ1ZXR5cGUgbW9kdWxlLiAgVGhpcyAqLworICAgIC8qIGF2b2lkcyBkb3VibGUgZnJlZSBpbiBzb21lIG9jY2FzaW9ucy4gIEl0IGlzIGEgaGFjay4gICAqLworICAgIHdoaWxlICggbGlicmFyeS0+bnVtX21vZHVsZXMgPiAwICkKKyAgICAgIEZUX1JlbW92ZV9Nb2R1bGUoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5tb2R1bGVzW2xpYnJhcnktPm51bV9tb2R1bGVzIC0gMV0gKTsKKyNlbHNlCisgICAgeworICAgICAgRlRfVUludCAgbjsKKworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IGxpYnJhcnktPm51bV9tb2R1bGVzOyBuKysgKQorICAgICAgeworICAgICAgICBGVF9Nb2R1bGUgIG1vZHVsZSA9IGxpYnJhcnktPm1vZHVsZXNbbl07CisKKworICAgICAgICBpZiAoIG1vZHVsZSApCisgICAgICAgIHsKKyAgICAgICAgICBEZXN0cm95X01vZHVsZSggbW9kdWxlICk7CisgICAgICAgICAgbGlicmFyeS0+bW9kdWxlc1tuXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgLyogRGVzdHJveSBwaWMgY29udGFpbmVyIGNvbnRlbnRzICovCisgICAgZnRfcGljX2NvbnRhaW5lcl9kZXN0cm95KCBsaWJyYXJ5ICk7CisjZW5kaWYKKworICAgIEZUX0ZSRUUoIGxpYnJhcnkgKTsKKworICBFeGl0OgorICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtb2RhcGkuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9TZXRfRGVidWdfSG9vayggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgaG9va19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0RlYnVnSG9va19GdW5jICBkZWJ1Z19ob29rICkKKyAgeworICAgIGlmICggbGlicmFyeSAmJiBkZWJ1Z19ob29rICYmCisgICAgICAgICBob29rX2luZGV4IDwKKyAgICAgICAgICAgKCBzaXplb2YgKCBsaWJyYXJ5LT5kZWJ1Z19ob29rcyApIC8gc2l6ZW9mICggdm9pZCogKSApICkKKyAgICAgIGxpYnJhcnktPmRlYnVnX2hvb2tzW2hvb2tfaW5kZXhdID0gZGVidWdfaG9vazsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZGFwaS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlICkKKyAgRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1RydWVUeXBlRW5naW5lVHlwZSAgcmVzdWx0ID0gRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfTk9ORTsKKworCisgICAgaWYgKCBsaWJyYXJ5ICkKKyAgICB7CisgICAgICBGVF9Nb2R1bGUgIG1vZHVsZSA9IEZUX0dldF9Nb2R1bGUoIGxpYnJhcnksICJ0cnVldHlwZSIgKTsKKworCisgICAgICBpZiAoIG1vZHVsZSApCisgICAgICB7CisgICAgICAgIEZUX1NlcnZpY2VfVHJ1ZVR5cGVFbmdpbmUgIHNlcnZpY2U7CisKKworICAgICAgICBzZXJ2aWNlID0gKEZUX1NlcnZpY2VfVHJ1ZVR5cGVFbmdpbmUpCisgICAgICAgICAgICAgICAgICAgIGZ0X21vZHVsZV9nZXRfc2VydmljZSggbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NFUlZJQ0VfSURfVFJVRVRZUEVfRU5HSU5FICk7CisgICAgICAgIGlmICggc2VydmljZSApCisgICAgICAgICAgcmVzdWx0ID0gc2VydmljZS0+ZW5naW5lX3R5cGU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfU3ViR2x5cGhfSW5mbyggRlRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgc3ViX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpwX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICpwX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpwX2FyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCAgICAqcF90cmFuc2Zvcm0gKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKworICAgIGlmICggZ2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBnbHlwaC0+c3ViZ2x5cGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSAmJgorICAgICAgICAgc3ViX2luZGV4IDwgZ2x5cGgtPm51bV9zdWJnbHlwaHMgICAgICAgICAgICkKKyAgICB7CisgICAgICBGVF9TdWJHbHlwaCAgc3ViZyA9IGdseXBoLT5zdWJnbHlwaHMgKyBzdWJfaW5kZXg7CisKKworICAgICAgKnBfaW5kZXggICAgID0gc3ViZy0+aW5kZXg7CisgICAgICAqcF9mbGFncyAgICAgPSBzdWJnLT5mbGFnczsKKyAgICAgICpwX2FyZzEgICAgICA9IHN1YmctPmFyZzE7CisgICAgICAqcF9hcmcyICAgICAgPSBzdWJnLT5hcmcyOworICAgICAgKnBfdHJhbnNmb3JtID0gc3ViZy0+dHJhbnNmb3JtOworCisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdG90dmFsLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRvdHZhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NjQ1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRvdHZhbC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0b3R2YWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgT3BlblR5cGUgdGFibGVzIChib2R5KS4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSAorI2luY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSAorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG90dmFsLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX09wZW5UeXBlX1ZhbGlkYXRlKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZhbGlkYXRpb25fZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkJBU0VfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdERUZfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdQT1NfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdTVUJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkpTVEZfdGFibGUgKQorICB7CisgICAgRlRfU2VydmljZV9PVHZhbGlkYXRlICBzZXJ2aWNlOworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3I7CisKKworICAgIGlmICggIWZhY2UgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoICEoIEJBU0VfdGFibGUgJiYKKyAgICAgICAgICAgIEdERUZfdGFibGUgJiYKKyAgICAgICAgICAgIEdQT1NfdGFibGUgJiYKKyAgICAgICAgICAgIEdTVUJfdGFibGUgJiYKKyAgICAgICAgICAgIEpTVEZfdGFibGUgKSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSggZmFjZSwgc2VydmljZSwgT1BFTlRZUEVfVkFMSURBVEUgKTsKKworICAgIGlmICggc2VydmljZSApCisgICAgICBlcnJvciA9IHNlcnZpY2UtPnZhbGlkYXRlKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBU0VfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREVGX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BPU190YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVUJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1RGX3RhYmxlICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9PcGVuVHlwZV9GcmVlKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgIHRhYmxlICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybjsKKworICAgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBmYWNlICk7CisKKyAgICBGVF9GUkVFKCB0YWJsZSApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRvdXRsbi5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0b3V0bG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIxYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0b3V0bG4uYwpAQCAtMCwwICsxLDEwOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0b3V0bG4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBvdXRsaW5lIG1hbmFnZW1lbnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFsbCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGluIGZyZWV0eXBlLmguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3V0bGluZQorCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX091dGxpbmUgIG51bGxfb3V0bGluZSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRGVjb21wb3NlKCBGVF9PdXRsaW5lKiAgICAgICAgICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX091dGxpbmVfRnVuY3MqICBmdW5jX2ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICB1c2VyICkKKyAgeworI3VuZGVmIFNDQUxFRAorI2RlZmluZSBTQ0FMRUQoIHggKSAgKCAoICh4KSA8PCBzaGlmdCApIC0gZGVsdGEgKQorCisgICAgRlRfVmVjdG9yICAgdl9sYXN0OworICAgIEZUX1ZlY3RvciAgIHZfY29udHJvbDsKKyAgICBGVF9WZWN0b3IgICB2X3N0YXJ0OworCisgICAgRlRfVmVjdG9yKiAgcG9pbnQ7CisgICAgRlRfVmVjdG9yKiAgbGltaXQ7CisgICAgY2hhciogICAgICAgdGFnczsKKworICAgIEZUX0Vycm9yICAgIGVycm9yOworCisgICAgRlRfSW50ICAgbjsgICAgICAgICAvKiBpbmRleCBvZiBjb250b3VyIGluIG91dGxpbmUgICAgICovCisgICAgRlRfVUludCAgZmlyc3Q7ICAgICAvKiBpbmRleCBvZiBmaXJzdCBwb2ludCBpbiBjb250b3VyICovCisgICAgRlRfSW50ICAgdGFnOyAgICAgICAvKiBjdXJyZW50IHBvaW50J3Mgc3RhdGUgICAgICAgICAgICovCisKKyAgICBGVF9JbnQgICBzaGlmdDsKKyAgICBGVF9Qb3MgICBkZWx0YTsKKworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgaWYgKCAhZnVuY19pbnRlcmZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBzaGlmdCA9IGZ1bmNfaW50ZXJmYWNlLT5zaGlmdDsKKyAgICBkZWx0YSA9IGZ1bmNfaW50ZXJmYWNlLT5kZWx0YTsKKyAgICBmaXJzdCA9IDA7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IG91dGxpbmUtPm5fY29udG91cnM7IG4rKyApCisgICAgeworICAgICAgRlRfSW50ICBsYXN0OyAgLyogaW5kZXggb2YgbGFzdCBwb2ludCBpbiBjb250b3VyICovCisKKworICAgICAgRlRfVFJBQ0U1KCggIkZUX091dGxpbmVfRGVjb21wb3NlOiBPdXRsaW5lICVkXG4iLCBuICkpOworCisgICAgICBsYXN0ID0gb3V0bGluZS0+Y29udG91cnNbbl07CisgICAgICBpZiAoIGxhc3QgPCAwICkKKyAgICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisgICAgICBsaW1pdCA9IG91dGxpbmUtPnBvaW50cyArIGxhc3Q7CisKKyAgICAgIHZfc3RhcnQgICA9IG91dGxpbmUtPnBvaW50c1tmaXJzdF07CisgICAgICB2X3N0YXJ0LnggPSBTQ0FMRUQoIHZfc3RhcnQueCApOworICAgICAgdl9zdGFydC55ID0gU0NBTEVEKCB2X3N0YXJ0LnkgKTsKKworICAgICAgdl9sYXN0ICAgPSBvdXRsaW5lLT5wb2ludHNbbGFzdF07CisgICAgICB2X2xhc3QueCA9IFNDQUxFRCggdl9sYXN0LnggKTsKKyAgICAgIHZfbGFzdC55ID0gU0NBTEVEKCB2X2xhc3QueSApOworCisgICAgICB2X2NvbnRyb2wgPSB2X3N0YXJ0OworCisgICAgICBwb2ludCA9IG91dGxpbmUtPnBvaW50cyArIGZpcnN0OworICAgICAgdGFncyAgPSBvdXRsaW5lLT50YWdzICAgKyBmaXJzdDsKKyAgICAgIHRhZyAgID0gRlRfQ1VSVkVfVEFHKCB0YWdzWzBdICk7CisKKyAgICAgIC8qIEEgY29udG91ciBjYW5ub3Qgc3RhcnQgd2l0aCBhIGN1YmljIGNvbnRyb2wgcG9pbnQhICovCisgICAgICBpZiAoIHRhZyA9PSBGVF9DVVJWRV9UQUdfQ1VCSUMgKQorICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgLyogY2hlY2sgZmlyc3QgcG9pbnQgdG8gZGV0ZXJtaW5lIG9yaWdpbiAqLworICAgICAgaWYgKCB0YWcgPT0gRlRfQ1VSVkVfVEFHX0NPTklDICkKKyAgICAgIHsKKyAgICAgICAgLyogZmlyc3QgcG9pbnQgaXMgY29uaWMgY29udHJvbC4gIFllcywgdGhpcyBoYXBwZW5zLiAqLworICAgICAgICBpZiAoIEZUX0NVUlZFX1RBRyggb3V0bGluZS0+dGFnc1tsYXN0XSApID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBzdGFydCBhdCBsYXN0IHBvaW50IGlmIGl0IGlzIG9uIHRoZSBjdXJ2ZSAqLworICAgICAgICAgIHZfc3RhcnQgPSB2X2xhc3Q7CisgICAgICAgICAgbGltaXQtLTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBpZiBib3RoIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBhcmUgY29uaWMsICAgICAgICAgKi8KKyAgICAgICAgICAvKiBzdGFydCBhdCB0aGVpciBtaWRkbGUgYW5kIHJlY29yZCBpdHMgcG9zaXRpb24gICAgKi8KKyAgICAgICAgICAvKiBmb3IgY2xvc3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICB2X3N0YXJ0LnggPSAoIHZfc3RhcnQueCArIHZfbGFzdC54ICkgLyAyOworICAgICAgICAgIHZfc3RhcnQueSA9ICggdl9zdGFydC55ICsgdl9sYXN0LnkgKSAvIDI7CisKKyAgICAgICAvKiB2X2xhc3QgPSB2X3N0YXJ0OyAqLworICAgICAgICB9CisgICAgICAgIHBvaW50LS07CisgICAgICAgIHRhZ3MtLTsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggIiAgbW92ZSB0byAoJS4yZiwgJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICB2X3N0YXJ0LnggLyA2NC4wLCB2X3N0YXJ0LnkgLyA2NC4wICkpOworICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+bW92ZV90byggJnZfc3RhcnQsIHVzZXIgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHdoaWxlICggcG9pbnQgPCBsaW1pdCApCisgICAgICB7CisgICAgICAgIHBvaW50Kys7CisgICAgICAgIHRhZ3MrKzsKKworICAgICAgICB0YWcgPSBGVF9DVVJWRV9UQUcoIHRhZ3NbMF0gKTsKKyAgICAgICAgc3dpdGNoICggdGFnICkKKyAgICAgICAgeworICAgICAgICBjYXNlIEZUX0NVUlZFX1RBR19PTjogIC8qIGVtaXQgYSBzaW5nbGUgbGluZV90byAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1ZlY3RvciAgdmVjOworCisKKyAgICAgICAgICAgIHZlYy54ID0gU0NBTEVEKCBwb2ludC0+eCApOworICAgICAgICAgICAgdmVjLnkgPSBTQ0FMRUQoIHBvaW50LT55ICk7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGxpbmUgdG8gKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdmVjLnggLyA2NC4wLCB2ZWMueSAvIDY0LjAgKSk7CisgICAgICAgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5saW5lX3RvKCAmdmVjLCB1c2VyICk7CisgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX0NPTklDOiAgLyogY29uc3VtZSBjb25pYyBhcmNzICovCisgICAgICAgICAgdl9jb250cm9sLnggPSBTQ0FMRUQoIHBvaW50LT54ICk7CisgICAgICAgICAgdl9jb250cm9sLnkgPSBTQ0FMRUQoIHBvaW50LT55ICk7CisKKyAgICAgICAgRG9fQ29uaWM6CisgICAgICAgICAgaWYgKCBwb2ludCA8IGxpbWl0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHZlYzsKKyAgICAgICAgICAgIEZUX1ZlY3RvciAgdl9taWRkbGU7CisKKworICAgICAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgICAgIHRhZ3MrKzsKKyAgICAgICAgICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworCisgICAgICAgICAgICB2ZWMueCA9IFNDQUxFRCggcG9pbnQtPnggKTsKKyAgICAgICAgICAgIHZlYy55ID0gU0NBTEVEKCBwb2ludC0+eSApOworCisgICAgICAgICAgICBpZiAoIHRhZyA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBjb25pYyB0byAoJS4yZiwgJS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCBjb250cm9sICglLjJmLCAlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjLnggLyA2NC4wLCB2ZWMueSAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZfY29udHJvbC54IC8gNjQuMCwgdl9jb250cm9sLnkgLyA2NC4wICkpOworICAgICAgICAgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5jb25pY190byggJnZfY29udHJvbCwgJnZlYywgdXNlciApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHRhZyAhPSBGVF9DVVJWRV9UQUdfQ09OSUMgKQorICAgICAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICAgICAgdl9taWRkbGUueCA9ICggdl9jb250cm9sLnggKyB2ZWMueCApIC8gMjsKKyAgICAgICAgICAgIHZfbWlkZGxlLnkgPSAoIHZfY29udHJvbC55ICsgdmVjLnkgKSAvIDI7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGNvbmljIHRvICglLjJmLCAlLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCBjb250cm9sICglLjJmLCAlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZfbWlkZGxlLnggLyA2NC4wLCB2X21pZGRsZS55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZfY29udHJvbC54IC8gNjQuMCwgdl9jb250cm9sLnkgLyA2NC4wICkpOworICAgICAgICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+Y29uaWNfdG8oICZ2X2NvbnRyb2wsICZ2X21pZGRsZSwgdXNlciApOworICAgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgICAgdl9jb250cm9sID0gdmVjOworICAgICAgICAgICAgZ290byBEb19Db25pYzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBjb25pYyB0byAoJS4yZiwgJS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGNvbnRyb2wgKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHZfc3RhcnQueCAvIDY0LjAsIHZfc3RhcnQueSAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgdl9jb250cm9sLnggLyA2NC4wLCB2X2NvbnRyb2wueSAvIDY0LjAgKSk7CisgICAgICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+Y29uaWNfdG8oICZ2X2NvbnRyb2wsICZ2X3N0YXJ0LCB1c2VyICk7CisgICAgICAgICAgZ290byBDbG9zZTsKKworICAgICAgICBkZWZhdWx0OiAgLyogRlRfQ1VSVkVfVEFHX0NVQklDICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVmVjdG9yICB2ZWMxLCB2ZWMyOworCisKKyAgICAgICAgICAgIGlmICggcG9pbnQgKyAxID4gbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBRyggdGFnc1sxXSApICE9IEZUX0NVUlZFX1RBR19DVUJJQyApCisgICAgICAgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAgICAgICBwb2ludCArPSAyOworICAgICAgICAgICAgdGFncyAgKz0gMjsKKworICAgICAgICAgICAgdmVjMS54ID0gU0NBTEVEKCBwb2ludFstMl0ueCApOworICAgICAgICAgICAgdmVjMS55ID0gU0NBTEVEKCBwb2ludFstMl0ueSApOworCisgICAgICAgICAgICB2ZWMyLnggPSBTQ0FMRUQoIHBvaW50Wy0xXS54ICk7CisgICAgICAgICAgICB2ZWMyLnkgPSBTQ0FMRUQoIHBvaW50Wy0xXS55ICk7CisKKyAgICAgICAgICAgIGlmICggcG9pbnQgPD0gbGltaXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9WZWN0b3IgIHZlYzsKKworCisgICAgICAgICAgICAgIHZlYy54ID0gU0NBTEVEKCBwb2ludC0+eCApOworICAgICAgICAgICAgICB2ZWMueSA9IFNDQUxFRCggcG9pbnQtPnkgKTsKKworICAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBjdWJpYyB0byAoJS4yZiwgJS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCBjb250cm9scyAoJS4yZiwgJS4yZikgYW5kICglLjJmLCAlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjLnggLyA2NC4wLCB2ZWMueSAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzEueCAvIDY0LjAsIHZlYzEueSAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIueCAvIDY0LjAsIHZlYzIueSAvIDY0LjAgKSk7CisgICAgICAgICAgICAgIGVycm9yID0gZnVuY19pbnRlcmZhY2UtPmN1YmljX3RvKCAmdmVjMSwgJnZlYzIsICZ2ZWMsIHVzZXIgKTsKKyAgICAgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgY3ViaWMgdG8gKCUuMmYsICUuMmYpIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGNvbnRyb2xzICglLjJmLCAlLjJmKSBhbmQgKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdl9zdGFydC54IC8gNjQuMCwgdl9zdGFydC55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlYzEueCAvIDY0LjAsIHZlYzEueSAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMyLnggLyA2NC4wLCB2ZWMyLnkgLyA2NC4wICkpOworICAgICAgICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+Y3ViaWNfdG8oICZ2ZWMxLCAmdmVjMiwgJnZfc3RhcnQsIHVzZXIgKTsKKyAgICAgICAgICAgIGdvdG8gQ2xvc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIGNsb3NlIHRoZSBjb250b3VyIHdpdGggYSBsaW5lIHNlZ21lbnQgKi8KKyAgICAgIEZUX1RSQUNFNSgoICIgIGxpbmUgdG8gKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgdl9zdGFydC54IC8gNjQuMCwgdl9zdGFydC55IC8gNjQuMCApKTsKKyAgICAgIGVycm9yID0gZnVuY19pbnRlcmZhY2UtPmxpbmVfdG8oICZ2X3N0YXJ0LCB1c2VyICk7CisKKyAgICBDbG9zZToKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZpcnN0ID0gKEZUX1VJbnQpbGFzdCArIDE7CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIkZUX091dGxpbmVfRGVjb21wb3NlOiBEb25lXG4iLCBuICkpOworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgRXhpdDoKKyAgICBGVF9UUkFDRTUoKCAiRlRfT3V0bGluZV9EZWNvbXBvc2U6IEVycm9yICVkXG4iLCBlcnJvciApKTsKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgSW52YWxpZF9PdXRsaW5lOgorICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9OZXdfSW50ZXJuYWwoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtUG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIG51bUNvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSAgKmFub3V0bGluZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGlmICggIWFub3V0bGluZSB8fCAhbWVtb3J5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgKmFub3V0bGluZSA9IG51bGxfb3V0bGluZTsKKworICAgIGlmICggbnVtQ29udG91cnMgPCAwICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIChGVF9VSW50KW51bUNvbnRvdXJzID4gbnVtUG9pbnRzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBudW1Qb2ludHMgPiBGVF9PVVRMSU5FX1BPSU5UU19NQVggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBhbm91dGxpbmUtPnBvaW50cywgICBudW1Qb2ludHMgICApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGFub3V0bGluZS0+dGFncywgICAgIG51bVBvaW50cyAgICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggYW5vdXRsaW5lLT5jb250b3VycywgbnVtQ29udG91cnMgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBhbm91dGxpbmUtPm5fcG9pbnRzICAgID0gKEZUX1Nob3J0KW51bVBvaW50czsKKyAgICBhbm91dGxpbmUtPm5fY29udG91cnMgID0gKEZUX1Nob3J0KW51bUNvbnRvdXJzOworICAgIGFub3V0bGluZS0+ZmxhZ3MgICAgICB8PSBGVF9PVVRMSU5FX09XTkVSOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBGYWlsOgorICAgIGFub3V0bGluZS0+ZmxhZ3MgfD0gRlRfT1VUTElORV9PV05FUjsKKyAgICBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoIG1lbW9yeSwgYW5vdXRsaW5lICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX05ldyggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtUG9pbnRzLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIG51bUNvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSAgKmFub3V0bGluZSApCisgIHsKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgcmV0dXJuIEZUX091dGxpbmVfTmV3X0ludGVybmFsKCBsaWJyYXJ5LT5tZW1vcnksIG51bVBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNvbnRvdXJzLCBhbm91dGxpbmUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfQ2hlY2soIEZUX091dGxpbmUqICBvdXRsaW5lICkKKyAgeworICAgIGlmICggb3V0bGluZSApCisgICAgeworICAgICAgRlRfSW50ICBuX3BvaW50cyAgID0gb3V0bGluZS0+bl9wb2ludHM7CisgICAgICBGVF9JbnQgIG5fY29udG91cnMgPSBvdXRsaW5lLT5uX2NvbnRvdXJzOworICAgICAgRlRfSW50ICBlbmQwLCBlbmQ7CisgICAgICBGVF9JbnQgIG47CisKKworICAgICAgLyogZW1wdHkgZ2x5cGg/ICovCisgICAgICBpZiAoIG5fcG9pbnRzID09IDAgJiYgbl9jb250b3VycyA9PSAwICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgLyogY2hlY2sgcG9pbnQgYW5kIGNvbnRvdXIgY291bnRzICovCisgICAgICBpZiAoIG5fcG9pbnRzIDw9IDAgfHwgbl9jb250b3VycyA8PSAwICkKKyAgICAgICAgZ290byBCYWQ7CisKKyAgICAgIGVuZDAgPSBlbmQgPSAtMTsKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbl9jb250b3VyczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgZW5kID0gb3V0bGluZS0+Y29udG91cnNbbl07CisKKyAgICAgICAgLyogbm90ZSB0aGF0IHdlIGRvbid0IGFjY2VwdCBlbXB0eSBjb250b3VycyAqLworICAgICAgICBpZiAoIGVuZCA8PSBlbmQwIHx8IGVuZCA+PSBuX3BvaW50cyApCisgICAgICAgICAgZ290byBCYWQ7CisKKyAgICAgICAgZW5kMCA9IGVuZDsKKyAgICAgIH0KKworICAgICAgaWYgKCBlbmQgIT0gbl9wb2ludHMgLSAxICkKKyAgICAgICAgZ290byBCYWQ7CisKKyAgICAgIC8qIFhYWDogY2hlY2sgdGhlIHRhZ3MgYXJyYXkgKi8KKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgIEJhZDoKKyAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfQ29weSggY29uc3QgRlRfT3V0bGluZSogIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAgICAgICAqdGFyZ2V0ICkKKyAgeworICAgIEZUX0ludCAgaXNfb3duZXI7CisKKworICAgIGlmICggIXNvdXJjZSB8fCAhdGFyZ2V0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisKKyAgICBpZiAoIHNvdXJjZS0+bl9wb2ludHMgICAhPSB0YXJnZXQtPm5fcG9pbnRzICAgfHwKKyAgICAgICAgIHNvdXJjZS0+bl9jb250b3VycyAhPSB0YXJnZXQtPm5fY29udG91cnMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIHNvdXJjZSA9PSB0YXJnZXQgKQorICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgIEZUX0FSUkFZX0NPUFkoIHRhcmdldC0+cG9pbnRzLCBzb3VyY2UtPnBvaW50cywgc291cmNlLT5uX3BvaW50cyApOworCisgICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT50YWdzLCBzb3VyY2UtPnRhZ3MsIHNvdXJjZS0+bl9wb2ludHMgKTsKKworICAgIEZUX0FSUkFZX0NPUFkoIHRhcmdldC0+Y29udG91cnMsIHNvdXJjZS0+Y29udG91cnMsIHNvdXJjZS0+bl9jb250b3VycyApOworCisgICAgLyogY29weSBhbGwgZmxhZ3MsIGV4Y2VwdCB0aGUgYEZUX09VVExJTkVfT1dORVInIG9uZSAqLworICAgIGlzX293bmVyICAgICAgPSB0YXJnZXQtPmZsYWdzICYgRlRfT1VUTElORV9PV05FUjsKKyAgICB0YXJnZXQtPmZsYWdzID0gc291cmNlLT5mbGFnczsKKworICAgIHRhcmdldC0+ZmxhZ3MgJj0gfkZUX09VVExJTkVfT1dORVI7CisgICAgdGFyZ2V0LT5mbGFncyB8PSBpc19vd25lcjsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9Eb25lX0ludGVybmFsKCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lICkKKyAgeworICAgIGlmICggIW91dGxpbmUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKworICAgIGlmICggIW1lbW9yeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggb3V0bGluZS0+ZmxhZ3MgJiBGVF9PVVRMSU5FX09XTkVSICkKKyAgICB7CisgICAgICBGVF9GUkVFKCBvdXRsaW5lLT5wb2ludHMgICApOworICAgICAgRlRfRlJFRSggb3V0bGluZS0+dGFncyAgICAgKTsKKyAgICAgIEZUX0ZSRUUoIG91dGxpbmUtPmNvbnRvdXJzICk7CisgICAgfQorICAgICpvdXRsaW5lID0gbnVsbF9vdXRsaW5lOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRG9uZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKQorICB7CisgICAgLyogY2hlY2sgZm9yIHZhbGlkIGBvdXRsaW5lJyBpbiBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoKSAqLworCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIHJldHVybiBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoIGxpYnJhcnktPm1lbW9yeSwgb3V0bGluZSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9PdXRsaW5lX0dldF9DQm94KCBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgICAgICAgICAgKmFjYm94ICkKKyAgeworICAgIEZUX1BvcyAgeE1pbiwgeU1pbiwgeE1heCwgeU1heDsKKworCisgICAgaWYgKCBvdXRsaW5lICYmIGFjYm94ICkKKyAgICB7CisgICAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID09IDAgKQorICAgICAgeworICAgICAgICB4TWluID0gMDsKKyAgICAgICAgeU1pbiA9IDA7CisgICAgICAgIHhNYXggPSAwOworICAgICAgICB5TWF4ID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7CisKKworICAgICAgICB4TWluID0geE1heCA9IHZlYy0+eDsKKyAgICAgICAgeU1pbiA9IHlNYXggPSB2ZWMtPnk7CisgICAgICAgIHZlYysrOworCisgICAgICAgIGZvciAoIDsgdmVjIDwgbGltaXQ7IHZlYysrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgeCwgeTsKKworCisgICAgICAgICAgeCA9IHZlYy0+eDsKKyAgICAgICAgICBpZiAoIHggPCB4TWluICkgeE1pbiA9IHg7CisgICAgICAgICAgaWYgKCB4ID4geE1heCApIHhNYXggPSB4OworCisgICAgICAgICAgeSA9IHZlYy0+eTsKKyAgICAgICAgICBpZiAoIHkgPCB5TWluICkgeU1pbiA9IHk7CisgICAgICAgICAgaWYgKCB5ID4geU1heCApIHlNYXggPSB5OworICAgICAgICB9CisgICAgICB9CisgICAgICBhY2JveC0+eE1pbiA9IHhNaW47CisgICAgICBhY2JveC0+eE1heCA9IHhNYXg7CisgICAgICBhY2JveC0+eU1pbiA9IHlNaW47CisgICAgICBhY2JveC0+eU1heCA9IHlNYXg7CisgICAgfQorICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgICAgeE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICAgICB5T2Zmc2V0ICkKKyAgeworICAgIEZUX1VTaG9ydCAgIG47CisgICAgRlRfVmVjdG9yKiAgdmVjOworCisKKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICAgIHJldHVybjsKKworICAgIHZlYyA9IG91dGxpbmUtPnBvaW50czsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgb3V0bGluZS0+bl9wb2ludHM7IG4rKyApCisgICAgeworICAgICAgdmVjLT54ICs9IHhPZmZzZXQ7CisgICAgICB2ZWMtPnkgKz0geU9mZnNldDsKKyAgICAgIHZlYysrOworICAgIH0KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfT3V0bGluZV9SZXZlcnNlKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApCisgIHsKKyAgICBGVF9VU2hvcnQgIG47CisgICAgRlRfSW50ICAgICBmaXJzdCwgbGFzdDsKKworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm47CisKKyAgICBmaXJzdCA9IDA7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IG91dGxpbmUtPm5fY29udG91cnM7IG4rKyApCisgICAgeworICAgICAgbGFzdCAgPSBvdXRsaW5lLT5jb250b3Vyc1tuXTsKKworICAgICAgLyogcmV2ZXJzZSBwb2ludCB0YWJsZSAqLworICAgICAgeworICAgICAgICBGVF9WZWN0b3IqICBwID0gb3V0bGluZS0+cG9pbnRzICsgZmlyc3Q7CisgICAgICAgIEZUX1ZlY3RvciogIHEgPSBvdXRsaW5lLT5wb2ludHMgKyBsYXN0OworICAgICAgICBGVF9WZWN0b3IgICBzd2FwOworCisKKyAgICAgICAgd2hpbGUgKCBwIDwgcSApCisgICAgICAgIHsKKyAgICAgICAgICBzd2FwID0gKnA7CisgICAgICAgICAgKnAgICA9ICpxOworICAgICAgICAgICpxICAgPSBzd2FwOworICAgICAgICAgIHArKzsKKyAgICAgICAgICBxLS07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogcmV2ZXJzZSB0YWdzIHRhYmxlICovCisgICAgICB7CisgICAgICAgIGNoYXIqICBwID0gb3V0bGluZS0+dGFncyArIGZpcnN0OworICAgICAgICBjaGFyKiAgcSA9IG91dGxpbmUtPnRhZ3MgKyBsYXN0OworCisKKyAgICAgICAgd2hpbGUgKCBwIDwgcSApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICBzd2FwOworCisKKyAgICAgICAgICBzd2FwID0gKnA7CisgICAgICAgICAgKnAgICA9ICpxOworICAgICAgICAgICpxICAgPSBzd2FwOworICAgICAgICAgIHArKzsKKyAgICAgICAgICBxLS07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZmlyc3QgPSBsYXN0ICsgMTsKKyAgICB9CisKKyAgICBvdXRsaW5lLT5mbGFncyBePSBGVF9PVVRMSU5FX1JFVkVSU0VfRklMTDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfUmVuZGVyKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCisgIHsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgRlRfUmVuZGVyZXIgIHJlbmRlcmVyOworICAgIEZUX0xpc3ROb2RlICBub2RlOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgaWYgKCAhcGFyYW1zICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgcmVuZGVyZXIgPSBsaWJyYXJ5LT5jdXJfcmVuZGVyZXI7CisgICAgbm9kZSAgICAgPSBsaWJyYXJ5LT5yZW5kZXJlcnMuaGVhZDsKKworICAgIHBhcmFtcy0+c291cmNlID0gKHZvaWQqKW91dGxpbmU7CisKKyAgICBlcnJvciA9IEZUX0VSUiggQ2Fubm90X1JlbmRlcl9HbHlwaCApOworICAgIHdoaWxlICggcmVuZGVyZXIgKQorICAgIHsKKyAgICAgIGVycm9yID0gcmVuZGVyZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlcmVyLT5yYXN0ZXIsIHBhcmFtcyApOworICAgICAgaWYgKCAhZXJyb3IgfHwgRlRfRVJSX05FUSggZXJyb3IsIENhbm5vdF9SZW5kZXJfR2x5cGggKSApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBGVF9FcnJfQ2Fubm90X1JlbmRlcl9HbHlwaCBpcyByZXR1cm5lZCBpZiB0aGUgcmVuZGVyIG1vZGUgICAqLworICAgICAgLyogaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIHRoaXMgZ2x5cGggaW1hZ2UgKi8KKyAgICAgIC8qIGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIC8qIG5vdywgbG9vayBmb3IgYW5vdGhlciByZW5kZXJlciB0aGF0IHN1cHBvcnRzIHRoZSBzYW1lICovCisgICAgICAvKiBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgcmVuZGVyZXIgPSBGVF9Mb29rdXBfUmVuZGVyZXIoIGxpYnJhcnksIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZub2RlICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9HZXRfQml0bWFwKCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQml0bWFwICAqYWJpdG1hcCApCisgIHsKKyAgICBGVF9SYXN0ZXJfUGFyYW1zICBwYXJhbXM7CisKKworICAgIGlmICggIWFiaXRtYXAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAvKiBvdGhlciBjaGVja3MgYXJlIGRlbGF5ZWQgdG8gYEZUX091dGxpbmVfUmVuZGVyJyAqLworCisgICAgcGFyYW1zLnRhcmdldCA9IGFiaXRtYXA7CisgICAgcGFyYW1zLmZsYWdzICA9IDA7CisKKyAgICBpZiAoIGFiaXRtYXAtPnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9HUkFZICB8fAorICAgICAgICAgYWJpdG1hcC0+cGl4ZWxfbW9kZSA9PSBGVF9QSVhFTF9NT0RFX0xDRCAgIHx8CisgICAgICAgICBhYml0bWFwLT5waXhlbF9tb2RlID09IEZUX1BJWEVMX01PREVfTENEX1YgKQorICAgICAgcGFyYW1zLmZsYWdzIHw9IEZUX1JBU1RFUl9GTEFHX0FBOworCisgICAgcmV0dXJuIEZUX091dGxpbmVfUmVuZGVyKCBsaWJyYXJ5LCBvdXRsaW5lLCAmcGFyYW1zICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9WZWN0b3JfVHJhbnNmb3JtKCBGVF9WZWN0b3IqICAgICAgICB2ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCApCisgIHsKKyAgICBGVF9Qb3MgIHh6LCB5ejsKKworCisgICAgaWYgKCAhdmVjdG9yIHx8ICFtYXRyaXggKQorICAgICAgcmV0dXJuOworCisgICAgeHogPSBGVF9NdWxGaXgoIHZlY3Rvci0+eCwgbWF0cml4LT54eCApICsKKyAgICAgICAgIEZUX011bEZpeCggdmVjdG9yLT55LCBtYXRyaXgtPnh5ICk7CisKKyAgICB5eiA9IEZUX011bEZpeCggdmVjdG9yLT54LCBtYXRyaXgtPnl4ICkgKworICAgICAgICAgRlRfTXVsRml4KCB2ZWN0b3ItPnksIG1hdHJpeC0+eXkgKTsKKworICAgIHZlY3Rvci0+eCA9IHh6OworICAgIHZlY3Rvci0+eSA9IHl6OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9NYXRyaXgqICAgbWF0cml4ICkKKyAgeworICAgIEZUX1ZlY3RvciogIHZlYzsKKyAgICBGVF9WZWN0b3IqICBsaW1pdDsKKworCisgICAgaWYgKCAhb3V0bGluZSB8fCAhbWF0cml4ICkKKyAgICAgIHJldHVybjsKKworICAgIHZlYyAgID0gb3V0bGluZS0+cG9pbnRzOworICAgIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7CisKKyAgICBmb3IgKCA7IHZlYyA8IGxpbWl0OyB2ZWMrKyApCisgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCB2ZWMsIG1hdHJpeCApOworICB9CisKKworI2lmIDAKKworI2RlZmluZSBGVF9PVVRMSU5FX0dFVF9DT05UT1VSKCBvdXRsaW5lLCBjLCBmaXJzdCwgbGFzdCApICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChmaXJzdCkgPSAoIGMgPiAwICkgPyAob3V0bGluZSktPnBvaW50cyArICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dGxpbmUpLT5jb250b3Vyc1tjIC0gMV0gKyAxIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDogKG91dGxpbmUpLT5wb2ludHM7ICAgICAgICAgICAgICAgXAorICAgIChsYXN0KSA9IChvdXRsaW5lKS0+cG9pbnRzICsgKG91dGxpbmUpLT5jb250b3Vyc1tjXTsgICBcCisgIH0gd2hpbGUgKCAwICkKKworCisgIC8qIElzIGEgcG9pbnQgaW4gc29tZSBjb250b3VyPyAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIHRyZWF0IGV2ZXJ5IHBvaW50IG9mIHRoZSBjb250b3VyIGFzIGlmIGl0ICAgICovCisgIC8qIGl0IHdlcmUgT04uICBUaGF0IGlzLCB3ZSBhbGxvdyBmYWxzZSBwb3NpdGl2ZXMsICovCisgIC8qIGJ1dCBkaXNhbGxvdyBmYWxzZSBuZWdhdGl2ZXMuICAoWFhYIHJlYWxseT8pICAgICovCisgIHN0YXRpYyBGVF9Cb29sCisgIGZ0X2NvbnRvdXJfaGFzKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgIEZUX1Nob3J0ICAgICBjLAorICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgIHBvaW50ICkKKyAgeworICAgIEZUX1ZlY3RvciogIGZpcnN0OworICAgIEZUX1ZlY3RvciogIGxhc3Q7CisgICAgRlRfVmVjdG9yKiAgYTsKKyAgICBGVF9WZWN0b3IqICBiOworICAgIEZUX1VJbnQgICAgIG4gPSAwOworCisKKyAgICBGVF9PVVRMSU5FX0dFVF9DT05UT1VSKCBvdXRsaW5lLCBjLCBmaXJzdCwgbGFzdCApOworCisgICAgZm9yICggYSA9IGZpcnN0OyBhIDw9IGxhc3Q7IGErKyApCisgICAgeworICAgICAgRlRfUG9zICB4OworICAgICAgRlRfSW50ICBpbnRlcnNlY3Q7CisKKworICAgICAgYiA9ICggYSA9PSBsYXN0ICkgPyBmaXJzdCA6IGEgKyAxOworCisgICAgICBpbnRlcnNlY3QgPSAoIGEtPnkgLSBwb2ludC0+eSApIF4gKCBiLT55IC0gcG9pbnQtPnkgKTsKKworICAgICAgLyogYSBhbmQgYiBhcmUgb24gdGhlIHNhbWUgc2lkZSAqLworICAgICAgaWYgKCBpbnRlcnNlY3QgPj0gMCApCisgICAgICB7CisgICAgICAgIGlmICggaW50ZXJzZWN0ID09IDAgJiYgYS0+eSA9PSBwb2ludC0+eSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICggYS0+eCA8PSBwb2ludC0+eCAmJiBiLT54ID49IHBvaW50LT54ICkgfHwKKyAgICAgICAgICAgICAgICggYS0+eCA+PSBwb2ludC0+eCAmJiBiLT54IDw9IHBvaW50LT54ICkgKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgeCA9IGEtPnggKyAoIGItPnggLSBhLT54ICkgKiAocG9pbnQtPnkgLSBhLT55ICkgLyAoIGItPnkgLSBhLT55ICk7CisKKyAgICAgIGlmICggeCA8IHBvaW50LT54ICkKKyAgICAgICAgbisrOworICAgICAgZWxzZSBpZiAoIHggPT0gcG9pbnQtPnggKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gbiAmIDE7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGZ0X2NvbnRvdXJfZW5jbG9zZWQoIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgYyApCisgIHsKKyAgICBGVF9WZWN0b3IqICBmaXJzdDsKKyAgICBGVF9WZWN0b3IqICBsYXN0OworICAgIEZUX1Nob3J0ICAgIGk7CisKKworICAgIEZUX09VVExJTkVfR0VUX0NPTlRPVVIoIG91dGxpbmUsIGMsIGZpcnN0LCBsYXN0ICk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG91dGxpbmUtPm5fY29udG91cnM7IGkrKyApCisgICAgeworICAgICAgaWYgKCBpICE9IGMgJiYgZnRfY29udG91cl9oYXMoIG91dGxpbmUsIGksIGZpcnN0ICkgKQorICAgICAgeworICAgICAgICBGVF9WZWN0b3IqICBwdDsKKworCisgICAgICAgIGZvciAoIHB0ID0gZmlyc3QgKyAxOyBwdCA8PSBsYXN0OyBwdCsrICkKKyAgICAgICAgICBpZiAoICFmdF9jb250b3VyX2hhcyggb3V0bGluZSwgaSwgcHQgKSApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyogVGhpcyB2ZXJzaW9uIGRpZmZlcnMgZnJvbSB0aGUgcHVibGljIG9uZSBpbiB0aGF0IGVhY2ggKi8KKyAgLyogcGFydCAoY29udG91ciBub3QgZW5jbG9zZWQgaW4gYW5vdGhlciBjb250b3VyKSBvZiB0aGUgKi8KKyAgLyogb3V0bGluZSBpcyBjaGVja2VkIGZvciBvcmllbnRhdGlvbi4gIFRoaXMgaXMgICAgICAgICAgKi8KKyAgLyogbmVjZXNzYXJ5IGZvciBzb21lIGJ1Z2d5IENKSyBmb250cy4gICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX09yaWVudGF0aW9uCisgIGZ0X291dGxpbmVfZ2V0X29yaWVudGF0aW9uKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApCisgIHsKKyAgICBGVF9TaG9ydCAgICAgICAgaTsKKyAgICBGVF9WZWN0b3IqICAgICAgZmlyc3Q7CisgICAgRlRfVmVjdG9yKiAgICAgIGxhc3Q7CisgICAgRlRfT3JpZW50YXRpb24gIG9yaWVudCA9IEZUX09SSUVOVEFUSU9OX05PTkU7CisKKworICAgIGZpcnN0ID0gb3V0bGluZS0+cG9pbnRzOworICAgIGZvciAoIGkgPSAwOyBpIDwgb3V0bGluZS0+bl9jb250b3VyczsgaSsrLCBmaXJzdCA9IGxhc3QgKyAxICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IqICBwb2ludDsKKyAgICAgIEZUX1ZlY3RvciogIHhtaW5fcG9pbnQ7CisgICAgICBGVF9Qb3MgICAgICB4bWluOworCisKKyAgICAgIGxhc3QgPSBvdXRsaW5lLT5wb2ludHMgKyBvdXRsaW5lLT5jb250b3Vyc1tpXTsKKworICAgICAgLyogc2tpcCBkZWdlbmVyYXRlIGNvbnRvdXJzICovCisgICAgICBpZiAoIGxhc3QgPCBmaXJzdCArIDIgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCBmdF9jb250b3VyX2VuY2xvc2VkKCBvdXRsaW5lLCBpICkgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgeG1pbiAgICAgICA9IGZpcnN0LT54OworICAgICAgeG1pbl9wb2ludCA9IGZpcnN0OworCisgICAgICBmb3IgKCBwb2ludCA9IGZpcnN0ICsgMTsgcG9pbnQgPD0gbGFzdDsgcG9pbnQrKyApCisgICAgICB7CisgICAgICAgIGlmICggcG9pbnQtPnggPCB4bWluICkKKyAgICAgICAgeworICAgICAgICAgIHhtaW4gICAgICAgPSBwb2ludC0+eDsKKyAgICAgICAgICB4bWluX3BvaW50ID0gcG9pbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogY2hlY2sgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBjb250b3VyICovCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciogICAgICBwcmV2OworICAgICAgICBGVF9WZWN0b3IqICAgICAgbmV4dDsKKyAgICAgICAgRlRfT3JpZW50YXRpb24gIG87CisKKworICAgICAgICBwcmV2ID0gKCB4bWluX3BvaW50ID09IGZpcnN0ICkgPyBsYXN0IDogeG1pbl9wb2ludCAtIDE7CisgICAgICAgIG5leHQgPSAoIHhtaW5fcG9pbnQgPT0gbGFzdCApID8gZmlyc3QgOiB4bWluX3BvaW50ICsgMTsKKworICAgICAgICBpZiAoIEZUX0F0YW4yKCBwcmV2LT54IC0geG1pbl9wb2ludC0+eCwgcHJldi0+eSAtIHhtaW5fcG9pbnQtPnkgKSA+CisgICAgICAgICAgICAgRlRfQXRhbjIoIG5leHQtPnggLSB4bWluX3BvaW50LT54LCBuZXh0LT55IC0geG1pbl9wb2ludC0+eSApICkKKyAgICAgICAgICBvID0gRlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG8gPSBGVF9PUklFTlRBVElPTl9UUlVFVFlQRTsKKworICAgICAgICBpZiAoIG9yaWVudCA9PSBGVF9PUklFTlRBVElPTl9OT05FICkKKyAgICAgICAgICBvcmllbnQgPSBvOworICAgICAgICBlbHNlIGlmICggb3JpZW50ICE9IG8gKQorICAgICAgICAgIHJldHVybiBGVF9PUklFTlRBVElPTl9OT05FOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvcmllbnQ7CisgIH0KKworI2VuZGlmIC8qIDAgKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0VtYm9sZGVuKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHN0cmVuZ3RoICkKKyAgeworICAgIHJldHVybiBGVF9PdXRsaW5lX0VtYm9sZGVuWFkoIG91dGxpbmUsIHN0cmVuZ3RoLCBzdHJlbmd0aCApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeHN0cmVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB5c3RyZW5ndGggKQorICB7CisgICAgRlRfVmVjdG9yKiAgcG9pbnRzOworICAgIEZUX1ZlY3RvciAgIHZfcHJldiwgdl9maXJzdCwgdl9uZXh0LCB2X2N1cjsKKyAgICBGVF9JbnQgICAgICBjLCBuLCBmaXJzdDsKKyAgICBGVF9JbnQgICAgICBvcmllbnRhdGlvbjsKKworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgeHN0cmVuZ3RoIC89IDI7CisgICAgeXN0cmVuZ3RoIC89IDI7CisgICAgaWYgKCB4c3RyZW5ndGggPT0gMCAmJiB5c3RyZW5ndGggPT0gMCApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgb3JpZW50YXRpb24gPSBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiggb3V0bGluZSApOworICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fTk9ORSApCisgICAgeworICAgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgICAgcG9pbnRzID0gb3V0bGluZS0+cG9pbnRzOworCisgICAgZmlyc3QgPSAwOworICAgIGZvciAoIGMgPSAwOyBjIDwgb3V0bGluZS0+bl9jb250b3VyczsgYysrICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IgIGluLCBvdXQsIHNoaWZ0OworICAgICAgRlRfRml4ZWQgICBsX2luLCBsX291dCwgbCwgcSwgZDsKKyAgICAgIGludCAgICAgICAgbGFzdCA9IG91dGxpbmUtPmNvbnRvdXJzW2NdOworCisKKyAgICAgIHZfZmlyc3QgPSBwb2ludHNbZmlyc3RdOworICAgICAgdl9wcmV2ICA9IHBvaW50c1tsYXN0XTsKKyAgICAgIHZfY3VyICAgPSB2X2ZpcnN0OworCisgICAgICAvKiBjb21wdXRlIGluY29taW5nIG5vcm1hbGl6ZWQgdmVjdG9yICovCisgICAgICBpbi54ID0gdl9jdXIueCAtIHZfcHJldi54OworICAgICAgaW4ueSA9IHZfY3VyLnkgLSB2X3ByZXYueTsKKyAgICAgIGxfaW4gPSBGVF9WZWN0b3JfTGVuZ3RoKCAmaW4gKTsKKyAgICAgIGlmICggbF9pbiApCisgICAgICB7CisgICAgICAgIGluLnggPSBGVF9EaXZGaXgoIGluLngsIGxfaW4gKTsKKyAgICAgICAgaW4ueSA9IEZUX0RpdkZpeCggaW4ueSwgbF9pbiApOworICAgICAgfQorCisgICAgICBmb3IgKCBuID0gZmlyc3Q7IG4gPD0gbGFzdDsgbisrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBuIDwgbGFzdCApCisgICAgICAgICAgdl9uZXh0ID0gcG9pbnRzW24gKyAxXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHZfbmV4dCA9IHZfZmlyc3Q7CisKKyAgICAgICAgLyogY29tcHV0ZSBvdXRnb2luZyBub3JtYWxpemVkIHZlY3RvciAqLworICAgICAgICBvdXQueCA9IHZfbmV4dC54IC0gdl9jdXIueDsKKyAgICAgICAgb3V0LnkgPSB2X25leHQueSAtIHZfY3VyLnk7CisgICAgICAgIGxfb3V0ID0gRlRfVmVjdG9yX0xlbmd0aCggJm91dCApOworICAgICAgICBpZiAoIGxfb3V0ICkKKyAgICAgICAgeworICAgICAgICAgIG91dC54ID0gRlRfRGl2Rml4KCBvdXQueCwgbF9vdXQgKTsKKyAgICAgICAgICBvdXQueSA9IEZUX0RpdkZpeCggb3V0LnksIGxfb3V0ICk7CisgICAgICAgIH0KKworICAgICAgICBkID0gRlRfTXVsRml4KCBpbi54LCBvdXQueCApICsgRlRfTXVsRml4KCBpbi55LCBvdXQueSApOworCisgICAgICAgIC8qIHNoaWZ0IG9ubHkgaWYgdHVybiBpcyBsZXNzIHRoYW4gfjE2MCBkZWdyZWVzICovCisgICAgICAgIGlmICggZCA+IC0weEYwMDBMICkKKyAgICAgICAgeworICAgICAgICAgIGQgPSBkICsgMHgxMDAwMEw7CisKKyAgICAgICAgICAvKiBzaGlmdCBjb21wb25lbnRzIGFyZSBhbGlnbmVkIGFsb25nIGxhdGVyYWwgYmlzZWN0b3IgKi8KKyAgICAgICAgICAvKiBhbmQgZGlyZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBvdXRsaW5lIG9yaWVudGF0aW9uLiAgKi8KKyAgICAgICAgICBzaGlmdC54ID0gaW4ueSArIG91dC55OworICAgICAgICAgIHNoaWZ0LnkgPSBpbi54ICsgb3V0Lng7CisKKyAgICAgICAgICBpZiAoIG9yaWVudGF0aW9uID09IEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFICkKKyAgICAgICAgICAgIHNoaWZ0LnggPSAtc2hpZnQueDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaGlmdC55ID0gLXNoaWZ0Lnk7CisKKyAgICAgICAgICAvKiByZXN0cmljdCBzaGlmdCBtYWduaXR1ZGUgdG8gYmV0dGVyIGhhbmRsZSBjb2xsYXBzaW5nIHNlZ21lbnRzICovCisgICAgICAgICAgcSA9IEZUX011bEZpeCggb3V0LngsIGluLnkgKSAtIEZUX011bEZpeCggb3V0LnksIGluLnggKTsKKyAgICAgICAgICBpZiAoIG9yaWVudGF0aW9uID09IEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFICkKKyAgICAgICAgICAgIHEgPSAtcTsKKworICAgICAgICAgIGwgPSBGVF9NSU4oIGxfaW4sIGxfb3V0ICk7CisKKyAgICAgICAgICAvKiBub24tc3RyaWN0IGluZXF1YWxpdGllcyBhdm9pZCBkaXZpZGUtYnktemVybyB3aGVuIHEgPT0gbCA9PSAwICovCisgICAgICAgICAgaWYgKCBGVF9NdWxGaXgoIHhzdHJlbmd0aCwgcSApIDw9IEZUX011bEZpeCggbCwgZCApICkKKyAgICAgICAgICAgIHNoaWZ0LnggPSBGVF9NdWxEaXYoIHNoaWZ0LngsIHhzdHJlbmd0aCwgZCApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNoaWZ0LnggPSBGVF9NdWxEaXYoIHNoaWZ0LngsIGwsIHEgKTsKKworCisgICAgICAgICAgaWYgKCBGVF9NdWxGaXgoIHlzdHJlbmd0aCwgcSApIDw9IEZUX011bEZpeCggbCwgZCApICkKKyAgICAgICAgICAgIHNoaWZ0LnkgPSBGVF9NdWxEaXYoIHNoaWZ0LnksIHlzdHJlbmd0aCwgZCApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNoaWZ0LnkgPSBGVF9NdWxEaXYoIHNoaWZ0LnksIGwsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgc2hpZnQueCA9IHNoaWZ0LnkgPSAwOworCisgICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS54ID0gdl9jdXIueCArIHhzdHJlbmd0aCArIHNoaWZ0Lng7CisgICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS55ID0gdl9jdXIueSArIHlzdHJlbmd0aCArIHNoaWZ0Lnk7CisKKyAgICAgICAgaW4gICAgPSBvdXQ7CisgICAgICAgIGxfaW4gID0gbF9vdXQ7CisgICAgICAgIHZfY3VyID0gdl9uZXh0OworICAgICAgfQorCisgICAgICBmaXJzdCA9IGxhc3QgKyAxOworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfT3JpZW50YXRpb24gKQorICBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiggRlRfT3V0bGluZSogIG91dGxpbmUgKQorICB7CisgICAgRlRfQkJveCAgICAgY2JveDsKKyAgICBGVF9JbnQgICAgICB4c2hpZnQsIHlzaGlmdDsKKyAgICBGVF9WZWN0b3IqICBwb2ludHM7CisgICAgRlRfVmVjdG9yICAgdl9wcmV2LCB2X2N1cjsKKyAgICBGVF9JbnQgICAgICBjLCBuLCBmaXJzdDsKKyAgICBGVF9Qb3MgICAgICBhcmVhID0gMDsKKworCisgICAgaWYgKCAhb3V0bGluZSB8fCBvdXRsaW5lLT5uX3BvaW50cyA8PSAwICkKKyAgICAgIHJldHVybiBGVF9PUklFTlRBVElPTl9UUlVFVFlQRTsKKworICAgIC8qIFdlIHVzZSB0aGUgbm9uemVybyB3aW5kaW5nIHJ1bGUgdG8gZmluZCB0aGUgb3JpZW50YXRpb24uICAgICAgICovCisgICAgLyogU2luY2UgZ2x5cGggb3V0bGluZXMgYmVoYXZlIG11Y2ggbW9yZSBgcmVndWxhcicgdGhhbiBhcmJpdHJhcnkgKi8KKyAgICAvKiBjdWJpYyBvciBxdWFkcmF0aWMgY3VydmVzLCB0aGlzIHRlc3QgZGVhbHMgd2l0aCB0aGUgcG9seWdvbiAgICAqLworICAgIC8qIG9ubHkgdGhhdCBpcyBzcGFubmVkIHVwIGJ5IHRoZSBjb250cm9sIHBvaW50cy4gICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9PdXRsaW5lX0dldF9DQm94KCBvdXRsaW5lLCAmY2JveCApOworCisgICAgLyogSGFuZGxlIGNvbGxhcHNlZCBvdXRsaW5lcyB0byBhdm9pZCB1bmRlZmluZWQgRlRfTVNCLiAqLworICAgIGlmICggY2JveC54TWluID09IGNib3gueE1heCB8fCBjYm94LnlNaW4gPT0gY2JveC55TWF4ICkKKyAgICAgIHJldHVybiBGVF9PUklFTlRBVElPTl9OT05FOworCisgICAgeHNoaWZ0ID0gRlRfTVNCKCAoRlRfVUludDMyKSggRlRfQUJTKCBjYm94LnhNYXggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBjYm94LnhNaW4gKSApICkgLSAxNDsKKyAgICB4c2hpZnQgPSBGVF9NQVgoIHhzaGlmdCwgMCApOworCisgICAgeXNoaWZ0ID0gRlRfTVNCKCAoRlRfVUludDMyKSggY2JveC55TWF4IC0gY2JveC55TWluICkgKSAtIDE0OworICAgIHlzaGlmdCA9IEZUX01BWCggeXNoaWZ0LCAwICk7CisKKyAgICBwb2ludHMgPSBvdXRsaW5lLT5wb2ludHM7CisKKyAgICBmaXJzdCA9IDA7CisgICAgZm9yICggYyA9IDA7IGMgPCBvdXRsaW5lLT5uX2NvbnRvdXJzOyBjKysgKQorICAgIHsKKyAgICAgIEZUX0ludCAgbGFzdCA9IG91dGxpbmUtPmNvbnRvdXJzW2NdOworCisKKyAgICAgIHZfcHJldiA9IHBvaW50c1tsYXN0XTsKKworICAgICAgZm9yICggbiA9IGZpcnN0OyBuIDw9IGxhc3Q7IG4rKyApCisgICAgICB7CisgICAgICAgIHZfY3VyID0gcG9pbnRzW25dOworICAgICAgICBhcmVhICs9ICggKCB2X2N1ci55IC0gdl9wcmV2LnkgKSA+PiB5c2hpZnQgKSAqCisgICAgICAgICAgICAgICAgKCAoIHZfY3VyLnggKyB2X3ByZXYueCApID4+IHhzaGlmdCApOworICAgICAgICB2X3ByZXYgPSB2X2N1cjsKKyAgICAgIH0KKworICAgICAgZmlyc3QgPSBsYXN0ICsgMTsKKyAgICB9CisKKyAgICBpZiAoIGFyZWEgPiAwICkKKyAgICAgIHJldHVybiBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUOworICAgIGVsc2UgaWYgKCBhcmVhIDwgMCApCisgICAgICByZXR1cm4gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEU7CisgICAgZWxzZQorICAgICAgcmV0dXJuIEZUX09SSUVOVEFUSU9OX05PTkU7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHBhdGVudC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0cGF0ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyYjA4NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHBhdGVudC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHBhdGVudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBjaGVja2luZyBwYXRlbnRlZCBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgICAgKi8KKy8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfU0ZOVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSAorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgX3R0X2NoZWNrX3BhdGVudHNfaW5fcmFuZ2UoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplICkKKyAgeworICAgIEZUX0Jvb2wgICByZXN1bHQgPSBGQUxTRTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRfQnl0ZXMgIHAsIGVuZDsKKworCisgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggc2l6ZSApICkKKyAgICAgIHJldHVybiAwOworCisgICAgcCAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgZW5kID0gcCArIHNpemU7CisKKyAgICB3aGlsZSAoIHAgPCBlbmQgKQorICAgIHsKKyAgICAgIHN3aXRjaCAocFswXSkKKyAgICAgIHsKKyAgICAgIGNhc2UgMHgwNjogIC8qIFNQdlRMIC8vICovCisgICAgICBjYXNlIDB4MDc6ICAvKiBTUHZUTCArICAqLworICAgICAgY2FzZSAweDA4OiAgLyogU0Z2VEwgLy8gKi8KKyAgICAgIGNhc2UgMHgwOTogIC8qIFNGdlRMICsgICovCisgICAgICBjYXNlIDB4MEE6ICAvKiBTUHZGUyAgICAqLworICAgICAgY2FzZSAweDBCOiAgLyogU0Z2RlMgICAgKi8KKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBjYXNlIDB4NDA6CisgICAgICAgIGlmICggcCArIDEgPj0gZW5kICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgcCArPSBwWzFdICsgMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMHg0MToKKyAgICAgICAgaWYgKCBwICsgMSA+PSBlbmQgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBwICs9IHBbMV0gKiAyICsgMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMHg3MTogIC8qIERFTFRBUDIgKi8KKyAgICAgIGNhc2UgMHg3MjogIC8qIERFTFRBUDMgKi8KKyAgICAgIGNhc2UgMHg3MzogIC8qIERFTFRBQzAgKi8KKyAgICAgIGNhc2UgMHg3NDogIC8qIERFTFRBQzEgKi8KKyAgICAgIGNhc2UgMHg3NTogIC8qIERFTFRBQzIgKi8KKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBjYXNlIDB4QjA6CisgICAgICBjYXNlIDB4QjE6CisgICAgICBjYXNlIDB4QjI6CisgICAgICBjYXNlIDB4QjM6CisgICAgICBjYXNlIDB4QjQ6CisgICAgICBjYXNlIDB4QjU6CisgICAgICBjYXNlIDB4QjY6CisgICAgICBjYXNlIDB4Qjc6CisgICAgICAgIHAgKz0gKCBwWzBdIC0gMHhCMCApICsgMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMHhCODoKKyAgICAgIGNhc2UgMHhCOToKKyAgICAgIGNhc2UgMHhCQToKKyAgICAgIGNhc2UgMHhCQjoKKyAgICAgIGNhc2UgMHhCQzoKKyAgICAgIGNhc2UgMHhCRDoKKyAgICAgIGNhc2UgMHhCRToKKyAgICAgIGNhc2UgMHhCRjoKKyAgICAgICAgcCArPSAoIHBbMF0gLSAweEI4ICkgKiAyICsgMzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHAgKz0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgRlRfVU5VU0VEKCBlcnJvciApOworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMgRlRfQm9vbAorICBfdHRfY2hlY2tfcGF0ZW50c19pbl90YWJsZSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdGFnICkKKyAgeworICAgIEZUX1N0cmVhbSAgICAgICAgICAgICAgc3RyZWFtID0gZmFjZS0+c3RyZWFtOworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZSAgc2VydmljZTsKKyAgICBGVF9Cb29sICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOworCisKKyAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgU0ZOVF9UQUJMRSApOworCisgICAgaWYgKCBzZXJ2aWNlICkKKyAgICB7CisgICAgICBGVF9VSW50ICAgaSA9IDA7CisgICAgICBGVF9VTG9uZyAgdGFnX2kgPSAwLCBvZmZzZXRfaSA9IDAsIGxlbmd0aF9pID0gMDsKKworCisgICAgICBmb3IgKCBpID0gMDsgIWVycm9yICYmIHRhZ19pICE9IHRhZyA7IGkrKyApCisgICAgICAgIGVycm9yID0gc2VydmljZS0+dGFibGVfaW5mbyggZmFjZSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnX2ksICZvZmZzZXRfaSwgJmxlbmd0aF9pICk7CisKKyAgICAgIGlmICggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfU1RSRUFNX1NFRUsoIG9mZnNldF9pICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHJlc3VsdCA9IF90dF9jaGVja19wYXRlbnRzX2luX3JhbmdlKCBzdHJlYW0sIGxlbmd0aF9pICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgX3R0X2ZhY2VfY2hlY2tfcGF0ZW50cyggRlRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnN0cmVhbTsKKyAgICBGVF9VSW50ICAgIGdpbmRleDsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX0Jvb2wgICAgcmVzdWx0OworCisgICAgRlRfU2VydmljZV9UVEdseWYgIHNlcnZpY2U7CisKKworICAgIHJlc3VsdCA9IF90dF9jaGVja19wYXRlbnRzX2luX3RhYmxlKCBmYWNlLCBUVEFHX2ZwZ20gKTsKKyAgICBpZiAoIHJlc3VsdCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICByZXN1bHQgPSBfdHRfY2hlY2tfcGF0ZW50c19pbl90YWJsZSggZmFjZSwgVFRBR19wcmVwICk7CisgICAgaWYgKCByZXN1bHQgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFRUX0dMWUYgKTsKKyAgICBpZiAoIHNlcnZpY2UgPT0gTlVMTCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBmb3IgKCBnaW5kZXggPSAwOyBnaW5kZXggPCAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzOyBnaW5kZXgrKyApCisgICAgeworICAgICAgRlRfVUxvbmcgIG9mZnNldCwgbnVtX2lucywgc2l6ZTsKKyAgICAgIEZUX0ludCAgICBudW1fY29udG91cnM7CisKKworICAgICAgb2Zmc2V0ID0gc2VydmljZS0+Z2V0X2xvY2F0aW9uKCBmYWNlLCBnaW5kZXgsICZzaXplICk7CisgICAgICBpZiAoIHNpemUgPT0gMCApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBvZmZzZXQgKSAgICAgIHx8CisgICAgICAgICAgIEZUX1JFQURfU0hPUlQoIG51bV9jb250b3VycyApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggbnVtX2NvbnRvdXJzID49IDAgKSAgLyogc2ltcGxlIGdseXBoICovCisgICAgICB7CisgICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDggKyBudW1fY29udG91cnMgKiAyICkgKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgZWxzZSAgLyogY29tcG91bmQgZ2x5cGggKi8KKyAgICAgIHsKKyAgICAgICAgRlRfQm9vbCAgaGFzX2luc3RyID0gMDsKKworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDggKSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogbm93IHJlYWQgZWFjaCBjb21wb25lbnQgKi8KKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGZsYWdzLCB0b3NraXA7CisKKworICAgICAgICAgIGlmKCBGVF9SRUFEX1VTSE9SVCggZmxhZ3MgKSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIHRvc2tpcCA9IDIgKyAxICsgMTsKKworICAgICAgICAgIGlmICggKCBmbGFncyAmICggMSA8PCAwICkgKSAhPSAwICkgICAgICAgLyogQVJHU19BUkVfV09SRFMgKi8KKyAgICAgICAgICAgIHRvc2tpcCArPSAyOworCisgICAgICAgICAgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDMgKSApICE9IDAgKSAgICAgICAvKiBXRV9IQVZFX0FfU0NBTEUgKi8KKyAgICAgICAgICAgIHRvc2tpcCArPSAyOworICAgICAgICAgIGVsc2UgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDYgKSApICE9IDAgKSAgLyogV0VfSEFWRV9YX1lfU0NBTEUgKi8KKyAgICAgICAgICAgIHRvc2tpcCArPSA0OworICAgICAgICAgIGVsc2UgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDcgKSApICE9IDAgKSAgLyogV0VfSEFWRV9BXzJ4MiAqLworICAgICAgICAgICAgdG9za2lwICs9IDg7CisKKyAgICAgICAgICBpZiAoICggZmxhZ3MgJiAoIDEgPDwgOCApICkgIT0gMCApICAgICAgIC8qIFdFX0hBVkVfSU5TVFJVQ1RJT05TICovCisgICAgICAgICAgICBoYXNfaW5zdHIgPSAxOworCisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggdG9za2lwICkgKQorICAgICAgICAgICAgZ290byBOZXh0R2x5cGg7CisKKyAgICAgICAgICBpZiAoICggZmxhZ3MgJiAoIDEgPDwgNSApICkgPT0gMCApICAgICAgIC8qIE1PUkVfQ09NUE9ORU5UUyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFoYXNfaW5zdHIgKQorICAgICAgICAgIGdvdG8gTmV4dEdseXBoOworICAgICAgfQorCisgICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1faW5zICkgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgcmVzdWx0ID0gX3R0X2NoZWNrX3BhdGVudHNfaW5fcmFuZ2UoIHN0cmVhbSwgbnVtX2lucyApOworICAgICAgaWYgKCByZXN1bHQgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICBOZXh0R2x5cGg6CisgICAgICA7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfQm9vbCApCisgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfQm9vbCAgcmVzdWx0ID0gRkFMU0U7CisKKworICAgIGlmICggZmFjZSAmJiBGVF9JU19TRk5UKCBmYWNlICkgKQorICAgICAgcmVzdWx0ID0gX3R0X2ZhY2VfY2hlY2tfcGF0ZW50cyggZmFjZSApOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfQm9vbCApCisgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcoIEZUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHZhbHVlICkKKyAgeworICAgIEZUX0Jvb2wgIHJlc3VsdCA9IEZBTFNFOworCisKKyNpZiBkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyApICYmIFwKKyAgICAhZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiApCisgICAgaWYgKCBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgeworICAgICAgcmVzdWx0ID0gIWZhY2UtPmludGVybmFsLT5pZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXI7CisgICAgICBmYWNlLT5pbnRlcm5hbC0+aWdub3JlX3VucGF0ZW50ZWRfaGludGVyID0gIXZhbHVlOworICAgIH0KKyNlbHNlCisgICAgRlRfVU5VU0VEKCBmYWNlICk7CisgICAgRlRfVU5VU0VEKCB2YWx1ZSApOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0cGZyLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRwZnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYwODllCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0cGZyLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0cGZyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoYm9keSkuICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUEZSX0gKKworCisgIC8qIGNoZWNrIHRoZSBmb3JtYXQgKi8KKyAgc3RhdGljIEZUX1NlcnZpY2VfUGZyTWV0cmljcworICBmdF9wZnJfY2hlY2soIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfU2VydmljZV9QZnJNZXRyaWNzICBzZXJ2aWNlID0gTlVMTDsKKworCisgICAgaWYgKCBmYWNlICkKKyAgICAgIEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFBGUl9NRVRSSUNTICk7CisKKyAgICByZXR1cm4gc2VydmljZTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHBmci5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfUEZSX01ldHJpY3MoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmFvdXRsaW5lX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICphbWV0cmljc19yZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqYW1ldHJpY3NfeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgKmFtZXRyaWNzX3lfc2NhbGUgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9TZXJ2aWNlX1Bmck1ldHJpY3MgIHNlcnZpY2U7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBzZXJ2aWNlID0gZnRfcGZyX2NoZWNrKCBmYWNlICk7CisgICAgaWYgKCBzZXJ2aWNlICkKKyAgICB7CisgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9tZXRyaWNzKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW91dGxpbmVfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtZXRyaWNzX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWV0cmljc194X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1ldHJpY3NfeV9zY2FsZSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfRml4ZWQgIHhfc2NhbGUsIHlfc2NhbGU7CisKKworICAgICAgLyogdGhpcyBpcyBub3QgYSBQRlIgZm9udCAqLworICAgICAgaWYgKCBhb3V0bGluZV9yZXNvbHV0aW9uICkKKyAgICAgICAgKmFvdXRsaW5lX3Jlc29sdXRpb24gPSBmYWNlLT51bml0c19wZXJfRU07CisKKyAgICAgIGlmICggYW1ldHJpY3NfcmVzb2x1dGlvbiApCisgICAgICAgICphbWV0cmljc19yZXNvbHV0aW9uID0gZmFjZS0+dW5pdHNfcGVyX0VNOworCisgICAgICB4X3NjYWxlID0geV9zY2FsZSA9IDB4MTAwMDBMOworICAgICAgaWYgKCBmYWNlLT5zaXplICkKKyAgICAgIHsKKyAgICAgICAgeF9zY2FsZSA9IGZhY2UtPnNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgICAgeV9zY2FsZSA9IGZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgIH0KKworICAgICAgaWYgKCBhbWV0cmljc194X3NjYWxlICkKKyAgICAgICAgKmFtZXRyaWNzX3hfc2NhbGUgPSB4X3NjYWxlOworCisgICAgICBpZiAoIGFtZXRyaWNzX3lfc2NhbGUgKQorICAgICAgICAqYW1ldHJpY3NfeV9zY2FsZSA9IHlfc2NhbGU7CisKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRwZnIuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1BGUl9LZXJuaW5nKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yICAqYXZlY3RvciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfUGZyTWV0cmljcyAgc2VydmljZTsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGlmICggIWF2ZWN0b3IgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBzZXJ2aWNlID0gZnRfcGZyX2NoZWNrKCBmYWNlICk7CisgICAgaWYgKCBzZXJ2aWNlICkKKyAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X2tlcm5pbmcoIGZhY2UsIGxlZnQsIHJpZ2h0LCBhdmVjdG9yICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9HZXRfS2VybmluZyggZmFjZSwgbGVmdCwgcmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9LRVJOSU5HX1VOU0NBTEVELCBhdmVjdG9yICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRwZnIuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1BGUl9BZHZhbmNlKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICphYWR2YW5jZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfUGZyTWV0cmljcyAgc2VydmljZTsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGlmICggIWFhZHZhbmNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgc2VydmljZSA9IGZ0X3Bmcl9jaGVjayggZmFjZSApOworICAgIGlmICggc2VydmljZSApCisgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9hZHZhbmNlKCBmYWNlLCBnaW5kZXgsIGFhZHZhbmNlICk7CisgICAgZWxzZQorICAgICAgLyogWFhYOiBUT0RPOiBQUk9WSURFIEFEVkFOQ0UtTE9BRElORyBNRVRIT0QgVE8gQUxMIEZPTlQgRFJJVkVSUyAqLworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRwaWMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGIxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRwaWMuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgKGJvZHkpLiAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSAiYmFzZXBpYy5oIgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0cGljLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBmdF9waWNfY29udGFpbmVyX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisKKworICAgIEZUX01FTV9TRVQoIHBpY19jb250YWluZXIsIDAsIHNpemVvZiAoICpwaWNfY29udGFpbmVyICkgKTsKKworICAgIGVycm9yID0gZnRfYmFzZV9waWNfaW5pdCggbGlicmFyeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogRGVzdHJveSB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRhaW5lci4gKi8KKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBmdF9waWNfY29udGFpbmVyX2Rlc3Ryb3koIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgZnRfYmFzZV9waWNfZnJlZSggbGlicmFyeSApOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0cmZvcmsuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHJmb3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkNTRmOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHJmb3JrLmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0cmZvcmsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBGVF9SYWNjZXNzX0dldF9IZWFkZXJJbmZvKCkgYW5kIHJhY2Nlc3NfZ3Vlc3NfZGFyd2luX2hmc3BsdXMoKSBhcmUgICAgICovCisvKiAgZGVyaXZlZCBmcm9tIGZ0b2Jqcy5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXZlbG9wbWVudCBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgc3VwcG9ydCBvZiAgICAgICAgICAgICAgICAgICAgICAqLworLyogSW5mb3JtYXRpb24tdGVjaG5vbG9neSBQcm9tb3Rpb24gQWdlbmN5LCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAorI2luY2x1ZGUgImJhc2VwaWMuaCIKKyNpbmNsdWRlICJmdGJhc2UuaCIKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9yYWNjZXNzCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgUmVzb3VyY2UgZm9yayBkaXJlY3RvcnkgYWNjZXNzICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICByZm9ya19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKm1hcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJkYXRhX3BvcyApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICB1bnNpZ25lZCBjaGFyICBoZWFkWzE2XSwgaGVhZDJbMTZdOworICAgIEZUX0xvbmcgICAgICAgIG1hcF9wb3MsIHJkYXRhX2xlbjsKKyAgICBpbnQgICAgICAgICAgICBhbGx6ZXJvcywgYWxsbWF0Y2gsIGk7CisgICAgRlRfTG9uZyAgICAgICAgdHlwZV9saXN0OworCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisKKworICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgKEZUX1VMb25nKXJmb3JrX29mZnNldCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKWhlYWQsIDE2ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAqcmRhdGFfcG9zID0gcmZvcmtfb2Zmc2V0ICsgKCAoIGhlYWRbMF0gPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoZWFkWzFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaGVhZFsyXSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRbM10gICAgICAgICApOworICAgIG1hcF9wb3MgICAgPSByZm9ya19vZmZzZXQgKyAoICggaGVhZFs0XSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGhlYWRbNV0gPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoZWFkWzZdIDw8ICA4ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFs3XSAgICAgICAgICk7CisgICAgcmRhdGFfbGVuID0gKCBoZWFkWyA4XSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAoIGhlYWRbIDldIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICggaGVhZFsxMF0gPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICBoZWFkWzExXTsKKworICAgIC8qIG1hcF9sZW4gPSBoZWFkWzEyXSAuLiBoZWFkWzE1XSAqLworCisgICAgaWYgKCAqcmRhdGFfcG9zICsgcmRhdGFfbGVuICE9IG1hcF9wb3MgfHwgbWFwX3BvcyA9PSByZm9ya19vZmZzZXQgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIChGVF9VTG9uZyltYXBfcG9zICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBoZWFkMlsxNV0gPSAoRlRfQnl0ZSkoIGhlYWRbMTVdICsgMSApOyAgICAgICAvKiBtYWtlIGl0IGJlIGRpZmZlcmVudCAqLworCisgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSopaGVhZDIsIDE2ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBhbGx6ZXJvcyA9IDE7CisgICAgYWxsbWF0Y2ggPSAxOworICAgIGZvciAoIGkgPSAwOyBpIDwgMTY7ICsraSApCisgICAgeworICAgICAgaWYgKCBoZWFkMltpXSAhPSAwICkKKyAgICAgICAgYWxsemVyb3MgPSAwOworICAgICAgaWYgKCBoZWFkMltpXSAhPSBoZWFkW2ldICkKKyAgICAgICAgYWxsbWF0Y2ggPSAwOworICAgIH0KKyAgICBpZiAoICFhbGx6ZXJvcyAmJiAhYWxsbWF0Y2ggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhpcyBwb2ludCB0aGVuIGl0IGlzIHByb2JhYmx5IGEgbWFjIHJlc291cmNlICovCisgICAgLyogZmlsZS4gIE5vdywgZG9lcyBpdCBjb250YWluIGFueSBpbnRlcmVzdGluZyByZXNvdXJjZXM/ICAgICAgICAgICAqLworICAgIC8qIFNraXAgaGFuZGxlIHRvIG5leHQgcmVzb3VyY2UgbWFwLCB0aGUgZmlsZSByZXNvdXJjZSBudW1iZXIsIGFuZCAgKi8KKyAgICAvKiBhdHRyaWJ1dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKHZvaWQpRlRfU1RSRUFNX1NLSVAoIDQgICAgICAgIC8qIHNraXAgaGFuZGxlIHRvIG5leHQgcmVzb3VyY2UgbWFwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgMiAgICAgIC8qIHNraXAgZmlsZSByZXNvdXJjZSBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICk7ICAgLyogc2tpcCBhdHRyaWJ1dGVzICovCisKKyAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCB0eXBlX2xpc3QgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCB0eXBlX2xpc3QgPT0gLTEgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIChGVF9VTG9uZykoIG1hcF9wb3MgKyB0eXBlX2xpc3QgKSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgKm1hcF9vZmZzZXQgPSBtYXBfcG9zICsgdHlwZV9saXN0OworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgZnRfcmFjY2Vzc19zb3J0X3JlZl9ieV9pZCggRlRfUkZvcmtfUmVmKiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkZvcmtfUmVmKiAgYiApCisgIHsKKyAgICBpZiAoIGEtPnJlc19pZCA8IGItPnJlc19pZCApCisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAoIGEtPnJlc19pZCA+IGItPnJlc19pZCApCisgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBtYXBfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgcmRhdGFfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgc29ydF9ieV9yZXNfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgKipvZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBpbnQgICAgICAgICAgIGksIGosIGNudCwgc3ViY250OworICAgIEZUX0xvbmcgICAgICAgdGFnX2ludGVybmFsLCBycG9zOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworICAgIEZUX0xvbmcgICAgICAgdGVtcDsKKyAgICBGVF9Mb25nICAgICAgICpvZmZzZXRzX2ludGVybmFsID0gTlVMTDsKKyAgICBGVF9SRm9ya19SZWYgICpyZWYgPSBOVUxMOworCisKKyAgICBGVF9UUkFDRTMoKCAiXG4iICkpOworICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgKEZUX1VMb25nKW1hcF9vZmZzZXQgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIGNudCApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBjbnQrKzsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgY250OyArK2kgKQorICAgIHsKKyAgICAgIGlmICggRlRfUkVBRF9MT05HKCB0YWdfaW50ZXJuYWwgKSB8fAorICAgICAgICAgICBGVF9SRUFEX1VTSE9SVCggc3ViY250ICkgICAgIHx8CisgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCBycG9zICkgICAgICAgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIEZUX1RSQUNFMigoICJSZXNvdXJjZSB0YWdzOiAlYyVjJWMlY1xuIiwKKyAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+IDI0ICkgKSwKKyAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+IDE2ICkgKSwKKyAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+ICA4ICkgKSwKKyAgICAgICAgICAgICAgICAgIChjaGFyKSggMHhGRiAmICggdGFnX2ludGVybmFsID4+ICAwICkgKSApKTsKKyAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgOiBzdWJjb3VudD0lZCwgc3Vib2Zmc2V0PTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgIHN1YmNudCwgcnBvcyApKTsKKworICAgICAgaWYgKCB0YWdfaW50ZXJuYWwgPT0gdGFnICkKKyAgICAgIHsKKyAgICAgICAgKmNvdW50ID0gc3ViY250ICsgMTsKKyAgICAgICAgcnBvcyAgKz0gbWFwX29mZnNldDsKKworICAgICAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIChGVF9VTG9uZylycG9zICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggcmVmLCAqY291bnQgKSApCisgICAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgKmNvdW50OyArK2ogKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9SRUFEX1VTSE9SVCggcmVmW2pdLnJlc19pZCApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCAyICkgKSAvKiByZXNvdXJjZSBuYW1lICovCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgaWYgKCBGVF9SRUFEX0xPTkcoIHRlbXAgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggNCApICkgLyogbWJ6ICovCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICByZWZbal0ub2Zmc2V0ID0gdGVtcCAmIDB4RkZGRkZGTDsKKyAgICAgICAgICBGVF9UUkFDRTMoKCAiICAgICAgICAgICAgIFslZF06IgorICAgICAgICAgICAgICAgICAgICAgICIgcmVzb3VyY2VfaWQ9MHglMDR4LCBvZmZzZXQ9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGosIHJlZltqXS5yZXNfaWQsIHJlZltqXS5vZmZzZXQgKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc29ydF9ieV9yZXNfaWQpCisgICAgICAgIHsKKyAgICAgICAgICBmdF9xc29ydCggcmVmLCAoc2l6ZV90KSpjb3VudCwgc2l6ZW9mICggRlRfUkZvcmtfUmVmICksCisgICAgICAgICAgICAgICAgICAgICggaW50KCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikgKQorICAgICAgICAgICAgICAgICAgICBmdF9yYWNjZXNzX3NvcnRfcmVmX2J5X2lkICk7CisKKyAgICAgICAgICBGVF9UUkFDRTMoKCAiICAgICAgICAgICAgIC0tIHNvcnQgcmVzb3VyY2VzIGJ5IHRoZWlyIGlkcyAtLVxuIiApKTsKKyAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8ICpjb3VudDsgKysgaiApIHsKKyAgICAgICAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgWyVkXToiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHJlc291cmNlX2lkPTB4JTA0eCwgb2Zmc2V0PTB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGosIHJlZltqXS5yZXNfaWQsIHJlZltqXS5vZmZzZXQgKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIG9mZnNldHNfaW50ZXJuYWwsICpjb3VudCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgLyogWFhYOiBkdXBsaWNhdGVkIHJlZmVyZW5jZSBJRCwKKyAgICAgICAgICogICAgICBnYXAgYmV0d2VlbiByZWZlcmVuY2UgSURzIGFyZSBhY2NlcHRhYmxlPworICAgICAgICAgKiAgICAgIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiBBcHBsZSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQuCisgICAgICAgICAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8ICpjb3VudDsgKytqICkKKyAgICAgICAgICBvZmZzZXRzX2ludGVybmFsW2pdID0gcmRhdGFfcG9zICsgcmVmW2pdLm9mZnNldDsKKworICAgICAgICAqb2Zmc2V0cyA9IG9mZnNldHNfaW50ZXJuYWw7CisgICAgICAgIGVycm9yICAgID0gRlRfRXJyX09rOworCisgICAgICBFeGl0OgorICAgICAgICBGVF9GUkVFKCByZWYgKTsKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKKyAgfQorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgIEd1ZXNzaW5nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgV2hlbiB5b3UgYWRkIGEgbmV3IGd1ZXNzaW5nIGZ1bmN0aW9uLCAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgdXBkYXRlIEZUX1JBQ0NFU1NfTl9SVUxFUyBpbiBmdHJmb3JrLmguICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJhY2Nlc3NfZ3Vlc3NfYXBwbGVfZG91YmxlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2FwcGxlX3NpbmdsZSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKTsKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19kYXJ3aW5fdWZzX2V4cG9ydCggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2Rhcndpbl9uZXd2ZnMoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAqKnJlc3VsdF9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICk7CisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJhY2Nlc3NfZ3Vlc3NfdmZhdCggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICk7CisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJhY2Nlc3NfZ3Vlc3NfbGludXhfY2FwKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2xpbnV4X2RvdWJsZSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKTsKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19saW51eF9uZXRhdGFsayggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisKKyAgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9CRUdJTihmdF9yYWNjZXNzX2d1ZXNzX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0X3JhY2Nlc3NfZ3Vlc3NfcmVjKQorICBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VOVFJZKGFwcGxlX2RvdWJsZSwgICAgICBhcHBsZV9kb3VibGUpCisgIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoYXBwbGVfc2luZ2xlLCAgICAgIGFwcGxlX3NpbmdsZSkKKyAgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9FTlRSWShkYXJ3aW5fdWZzX2V4cG9ydCwgZGFyd2luX3Vmc19leHBvcnQpCisgIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoZGFyd2luX25ld3ZmcywgICAgIGRhcndpbl9uZXd2ZnMpCisgIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoZGFyd2luX2hmc3BsdXMsICAgIGRhcndpbl9oZnNwbHVzKQorICBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VOVFJZKHZmYXQsICAgICAgICAgICAgICB2ZmF0KQorICBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VOVFJZKGxpbnV4X2NhcCwgICAgICAgICBsaW51eF9jYXApCisgIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkobGludXhfZG91YmxlLCAgICAgIGxpbnV4X2RvdWJsZSkKKyAgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9FTlRSWShsaW51eF9uZXRhdGFsaywgICAgbGludXhfbmV0YXRhbGspCisgIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5ECisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJhY2Nlc3NfZ3Vlc3NfYXBwbGVfZ2VuZXJpYyggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgbWFnaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2xpbnV4X2RvdWJsZV9mcm9tX2ZpbGVfbmFtZSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiAgICAgIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKTsKKworICBzdGF0aWMgY2hhciAqCisgIHJhY2Nlc3NfbWFrZV9maWxlX25hbWUoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICpvcmlnaW5hbF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqaW5zZXJ0aW9uICk7CisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9SYWNjZXNzX0d1ZXNzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgIGJhc2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqbmV3X25hbWVzLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpvZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciAgICplcnJvcnMgKQorICB7CisgICAgRlRfSW50ICBpOworCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEZUX1JBQ0NFU1NfTl9SVUxFUzsgaSsrICkKKyAgICB7CisgICAgICBuZXdfbmFtZXNbaV0gPSBOVUxMOworICAgICAgaWYgKCBOVUxMICE9IHN0cmVhbSApCisgICAgICAgIGVycm9yc1tpXSA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIDAgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJyb3JzW2ldID0gRlRfRXJyX09rOworCisgICAgICBpZiAoIGVycm9yc1tpXSApCisgICAgICAgIGNvbnRpbnVlIDsKKworICAgICAgZXJyb3JzW2ldID0gKEZUX1JBQ0NFU1NfR1VFU1NfVEFCTEVfR0VUW2ldLmZ1bmMpKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgYmFzZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYobmV3X25hbWVzW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKG9mZnNldHNbaV0pICk7CisgICAgfQorCisgICAgcmV0dXJuOworICB9CisKKworI2lmbmRlZiBGVF9NQUNJTlRPU0gKKyAgc3RhdGljIEZUX1JGb3JrX1J1bGUKKyAgcmFjY2Vzc19nZXRfcnVsZV90eXBlX2Zyb21fcnVsZV9pbmRleCggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcnVsZV9pbmRleCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKworICAgIGlmICggcnVsZV9pbmRleCA+PSBGVF9SQUNDRVNTX05fUlVMRVMgKQorICAgICAgcmV0dXJuIEZUX1JGb3JrX1J1bGVfaW52YWxpZDsKKworICAgIHJldHVybiBGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVFtydWxlX2luZGV4XS50eXBlOworICB9CisKKworICAvKgorICAgKiBGb3IgdGhpcyBmdW5jdGlvbiwgcmVmZXIgZnRiYXNlLmguCisgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Jvb2wgKQorICBmdF9yYWNjZXNzX3J1bGVfYnlfZGFyd2luX3ZmcyggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHJ1bGVfaW5kZXggKQorICB7CisgICAgc3dpdGNoKCByYWNjZXNzX2dldF9ydWxlX3R5cGVfZnJvbV9ydWxlX2luZGV4KCBsaWJyYXJ5LCBydWxlX2luZGV4ICkgKQorICAgIHsKKyAgICAgIGNhc2UgRlRfUkZvcmtfUnVsZV9kYXJ3aW5fbmV3dmZzOgorICAgICAgY2FzZSBGVF9SRm9ya19SdWxlX2Rhcndpbl9oZnNwbHVzOgorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgfQorI2VuZGlmCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19hcHBsZV9kb3VibGUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAqKnJlc3VsdF9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIEZUX0ludDMyICBtYWdpYyA9ICggMHgwMCA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAoIDB4MDUgPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCAweDE2IDw8ICA4ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzsKKworCisgICAgKnJlc3VsdF9maWxlX25hbWUgPSBOVUxMOworICAgIGlmICggTlVMTCA9PSBzdHJlYW0gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9TdHJlYW0gKTsKKworICAgIHJldHVybiByYWNjZXNzX2d1ZXNzX2FwcGxlX2dlbmVyaWMoIGxpYnJhcnksIHN0cmVhbSwgYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWMsIHJlc3VsdF9vZmZzZXQgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJhY2Nlc3NfZ3Vlc3NfYXBwbGVfc2luZ2xlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApCisgIHsKKyAgICBGVF9JbnQzMiAgbWFnaWMgPSAoIDB4MDAgPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCAweDA1IDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAgICAgICggMHgxNiA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA7CisKKworICAgICpyZXN1bHRfZmlsZV9uYW1lID0gTlVMTDsKKyAgICBpZiAoIE5VTEwgPT0gc3RyZWFtICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fU3RyZWFtICk7CisKKyAgICByZXR1cm4gcmFjY2Vzc19ndWVzc19hcHBsZV9nZW5lcmljKCBsaWJyYXJ5LCBzdHJlYW0sIGJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljLCByZXN1bHRfb2Zmc2V0ICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2Rhcndpbl91ZnNfZXhwb3J0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIGNoYXIqICAgICAgbmV3cGF0aDsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKworCisgICAgbWVtb3J5ICA9IGxpYnJhcnktPm1lbW9yeTsKKyAgICBuZXdwYXRoID0gcmFjY2Vzc19tYWtlX2ZpbGVfbmFtZSggbWVtb3J5LCBiYXNlX2ZpbGVfbmFtZSwgIi5fIiApOworICAgIGlmICggIW5ld3BhdGggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBPdXRfT2ZfTWVtb3J5ICk7CisKKyAgICBlcnJvciA9IHJhY2Nlc3NfZ3Vlc3NfbGludXhfZG91YmxlX2Zyb21fZmlsZV9uYW1lKCBsaWJyYXJ5LCBuZXdwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9vZmZzZXQgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICAqcmVzdWx0X2ZpbGVfbmFtZSA9IG5ld3BhdGg7CisgICAgZWxzZQorICAgICAgRlRfRlJFRSggbmV3cGF0aCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19kYXJ3aW5faGZzcGx1cyggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApCisgIHsKKyAgICAvKgorICAgICAgT25seSBtZWFuaW5nZnVsIG9uIHN5c3RlbXMgd2l0aCBoZnMrIGRyaXZlcnMgKG9yIE1hY3MpLgorICAgICAqLworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgY2hhciogICAgICBuZXdwYXRoID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKyAgICBGVF9Mb25nICAgIGJhc2VfZmlsZV9sZW4gPSAoRlRfTG9uZylmdF9zdHJsZW4oIGJhc2VfZmlsZV9uYW1lICk7CisKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworCisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBpZiAoIGJhc2VfZmlsZV9sZW4gKyA2ID4gRlRfSU5UX01BWCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEFycmF5X1Rvb19MYXJnZSApOworCisgICAgaWYgKCBGVF9BTExPQyggbmV3cGF0aCwgYmFzZV9maWxlX2xlbiArIDYgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBGVF9NRU1fQ09QWSggbmV3cGF0aCwgYmFzZV9maWxlX25hbWUsIGJhc2VfZmlsZV9sZW4gKTsKKyAgICBGVF9NRU1fQ09QWSggbmV3cGF0aCArIGJhc2VfZmlsZV9sZW4sICIvcnNyYyIsIDYgKTsKKworICAgICpyZXN1bHRfZmlsZV9uYW1lID0gbmV3cGF0aDsKKyAgICAqcmVzdWx0X29mZnNldCAgICA9IDA7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19kYXJ3aW5fbmV3dmZzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKQorICB7CisgICAgLyoKKyAgICAgIE9ubHkgbWVhbmluZ2Z1bCBvbiBzeXN0ZW1zIHdpdGggTWFjIE9TIFggKD4gMTAuMSkuCisgICAgICovCisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBjaGFyKiAgICAgIG5ld3BhdGggPSBOVUxMOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX0xvbmcgICAgYmFzZV9maWxlX2xlbiA9IChGVF9Mb25nKWZ0X3N0cmxlbiggYmFzZV9maWxlX25hbWUgKTsKKworICAgIEZUX1VOVVNFRCggc3RyZWFtICk7CisKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIGlmICggYmFzZV9maWxlX2xlbiArIDE4ID4gRlRfSU5UX01BWCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEFycmF5X1Rvb19MYXJnZSApOworCisgICAgaWYgKCBGVF9BTExPQyggbmV3cGF0aCwgYmFzZV9maWxlX2xlbiArIDE4ICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgRlRfTUVNX0NPUFkoIG5ld3BhdGgsIGJhc2VfZmlsZV9uYW1lLCBiYXNlX2ZpbGVfbGVuICk7CisgICAgRlRfTUVNX0NPUFkoIG5ld3BhdGggKyBiYXNlX2ZpbGVfbGVuLCAiLy4ubmFtZWRmb3JrL3JzcmMiLCAxOCApOworCisgICAgKnJlc3VsdF9maWxlX25hbWUgPSBuZXdwYXRoOworICAgICpyZXN1bHRfb2Zmc2V0ICAgID0gMDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX3ZmYXQoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAqKnJlc3VsdF9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApCisgIHsKKyAgICBjaGFyKiAgICAgIG5ld3BhdGg7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworCisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBuZXdwYXRoID0gcmFjY2Vzc19tYWtlX2ZpbGVfbmFtZSggbWVtb3J5LCBiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc291cmNlLmZyay8iICk7CisgICAgaWYgKCAhbmV3cGF0aCApCisgICAgICByZXR1cm4gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKworICAgICpyZXN1bHRfZmlsZV9uYW1lID0gbmV3cGF0aDsKKyAgICAqcmVzdWx0X29mZnNldCAgICA9IDA7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19saW51eF9jYXAoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAqKnJlc3VsdF9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIGNoYXIqICAgICAgbmV3cGF0aDsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworICAgIEZUX1VOVVNFRCggc3RyZWFtICk7CisKKworICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIG5ld3BhdGggPSByYWNjZXNzX21ha2VfZmlsZV9uYW1lKCBtZW1vcnksIGJhc2VfZmlsZV9uYW1lLCAiLnJlc291cmNlLyIgKTsKKyAgICBpZiAoICFuZXdwYXRoICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworCisgICAgKnJlc3VsdF9maWxlX25hbWUgPSBuZXdwYXRoOworICAgICpyZXN1bHRfb2Zmc2V0ICAgID0gMDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2xpbnV4X2RvdWJsZSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqcmVzdWx0X2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKnJlc3VsdF9vZmZzZXQgKQorICB7CisgICAgY2hhciogICAgICBuZXdwYXRoOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworCisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBuZXdwYXRoID0gcmFjY2Vzc19tYWtlX2ZpbGVfbmFtZSggbWVtb3J5LCBiYXNlX2ZpbGVfbmFtZSwgIiUiICk7CisgICAgaWYgKCAhbmV3cGF0aCApCisgICAgICByZXR1cm4gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKworICAgIGVycm9yID0gcmFjY2Vzc19ndWVzc19saW51eF9kb3VibGVfZnJvbV9maWxlX25hbWUoIGxpYnJhcnksIG5ld3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X29mZnNldCApOworICAgIGlmICggIWVycm9yICkKKyAgICAgICpyZXN1bHRfZmlsZV9uYW1lID0gbmV3cGF0aDsKKyAgICBlbHNlCisgICAgICBGVF9GUkVFKCBuZXdwYXRoICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICByYWNjZXNzX2d1ZXNzX2xpbnV4X25ldGF0YWxrKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgKmJhc2VfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipyZXN1bHRfZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIGNoYXIqICAgICAgbmV3cGF0aDsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKworCisgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisgICAgbmV3cGF0aCA9IHJhY2Nlc3NfbWFrZV9maWxlX25hbWUoIG1lbW9yeSwgYmFzZV9maWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuQXBwbGVEb3VibGUvIiApOworICAgIGlmICggIW5ld3BhdGggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBPdXRfT2ZfTWVtb3J5ICk7CisKKyAgICBlcnJvciA9IHJhY2Nlc3NfZ3Vlc3NfbGludXhfZG91YmxlX2Zyb21fZmlsZV9uYW1lKCBsaWJyYXJ5LCBuZXdwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9vZmZzZXQgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICAqcmVzdWx0X2ZpbGVfbmFtZSA9IG5ld3BhdGg7CisgICAgZWxzZQorICAgICAgRlRfRlJFRSggbmV3cGF0aCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19hcHBsZV9nZW5lcmljKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpiYXNlX2ZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICBtYWdpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIEZUX0ludDMyICAgbWFnaWNfZnJvbV9zdHJlYW07CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9JbnQzMiAgIHZlcnNpb25fbnVtYmVyID0gMDsKKyAgICBGVF9VU2hvcnQgIG5fb2ZfZW50cmllczsKKworICAgIGludCAgICAgICAgaTsKKyAgICBGVF9JbnQzMiAgIGVudHJ5X2lkLCBlbnRyeV9vZmZzZXQsIGVudHJ5X2xlbmd0aCA9IDA7CisKKyAgICBjb25zdCBGVF9JbnQzMiAgcmVzb3VyY2VfZm9ya19lbnRyeV9pZCA9IDB4MjsKKworICAgIEZUX1VOVVNFRCggbGlicmFyeSApOworICAgIEZUX1VOVVNFRCggYmFzZV9maWxlX25hbWUgKTsKKyAgICBGVF9VTlVTRUQoIHZlcnNpb25fbnVtYmVyICk7CisgICAgRlRfVU5VU0VEKCBlbnRyeV9sZW5ndGggICApOworCisKKyAgICBpZiAoIEZUX1JFQURfTE9ORyggbWFnaWNfZnJvbV9zdHJlYW0gKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCBtYWdpY19mcm9tX3N0cmVhbSAhPSBtYWdpYyApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKworICAgIGlmICggRlRfUkVBRF9MT05HKCB2ZXJzaW9uX251bWJlciApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGZpbGxlciAqLworICAgIGVycm9yID0gRlRfU3RyZWFtX1NraXAoIHN0cmVhbSwgMTYgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIG5fb2ZfZW50cmllcyApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIG5fb2ZfZW50cmllcyA9PSAwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuX29mX2VudHJpZXM7IGkrKyApCisgICAgeworICAgICAgaWYgKCBGVF9SRUFEX0xPTkcoIGVudHJ5X2lkICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICBpZiAoIGVudHJ5X2lkID09IHJlc291cmNlX2ZvcmtfZW50cnlfaWQgKQorICAgICAgeworICAgICAgICBpZiAoIEZUX1JFQURfTE9ORyggZW50cnlfb2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICBGVF9SRUFEX0xPTkcoIGVudHJ5X2xlbmd0aCApICkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgKnJlc3VsdF9vZmZzZXQgPSBlbnRyeV9vZmZzZXQ7CisKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2tpcCggc3RyZWFtLCA0ICsgNCApOyAgICAvKiBvZmZzZXQgKyBsZW5ndGggKi8KKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmFjY2Vzc19ndWVzc19saW51eF9kb3VibGVfZnJvbV9maWxlX25hbWUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICpmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICpyZXN1bHRfb2Zmc2V0ICkKKyAgeworICAgIEZUX09wZW5fQXJncyAgYXJnczI7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW0yOworICAgIGNoYXIgKiAgICAgICAgbm91c2UgPSBOVUxMOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisKKworICAgIGFyZ3MyLmZsYWdzICAgID0gRlRfT1BFTl9QQVRITkFNRTsKKyAgICBhcmdzMi5wYXRobmFtZSA9IGZpbGVfbmFtZTsKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9OZXcoIGxpYnJhcnksICZhcmdzMiwgJnN0cmVhbTIgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGVycm9yID0gcmFjY2Vzc19ndWVzc19hcHBsZV9kb3VibGUoIGxpYnJhcnksIHN0cmVhbTIsIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm91c2UsIHJlc3VsdF9vZmZzZXQgKTsKKworICAgIEZUX1N0cmVhbV9GcmVlKCBzdHJlYW0yLCAwICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBjaGFyKgorICByYWNjZXNzX21ha2VfZmlsZV9uYW1lKCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqb3JpZ2luYWxfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKmluc2VydGlvbiApCisgIHsKKyAgICBjaGFyKiAgICAgICAgbmV3X25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqICB0bXA7CisgICAgY29uc3QgY2hhciogIHNsYXNoOworICAgIHNpemVfdCAgICAgICBuZXdfbGVuZ3RoOworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKKworCisgICAgbmV3X2xlbmd0aCA9IGZ0X3N0cmxlbiggb3JpZ2luYWxfbmFtZSApICsgZnRfc3RybGVuKCBpbnNlcnRpb24gKTsKKyAgICBpZiAoIEZUX0FMTE9DKCBuZXdfbmFtZSwgbmV3X2xlbmd0aCArIDEgKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcCA9IGZ0X3N0cnJjaHIoIG9yaWdpbmFsX25hbWUsICcvJyApOworICAgIGlmICggdG1wICkKKyAgICB7CisgICAgICBmdF9zdHJuY3B5KCBuZXdfbmFtZSwKKyAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX25hbWUsCisgICAgICAgICAgICAgICAgICAoc2l6ZV90KSggdG1wIC0gb3JpZ2luYWxfbmFtZSArIDEgKSApOworICAgICAgbmV3X25hbWVbdG1wIC0gb3JpZ2luYWxfbmFtZSArIDFdID0gJ1wwJzsKKyAgICAgIHNsYXNoID0gdG1wICsgMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNsYXNoICAgICAgID0gb3JpZ2luYWxfbmFtZTsKKyAgICAgIG5ld19uYW1lWzBdID0gJ1wwJzsKKyAgICB9CisKKyAgICBmdF9zdHJjYXQoIG5ld19uYW1lLCBpbnNlcnRpb24gKTsKKyAgICBmdF9zdHJjYXQoIG5ld19uYW1lLCBzbGFzaCApOworCisgICAgcmV0dXJuIG5ld19uYW1lOworICB9CisKKworI2Vsc2UgICAvKiAhRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgRHVtbXkgZnVuY3Rpb247IGp1c3Qgc2V0cyBlcnJvcnMgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX1JhY2Nlc3NfR3Vlc3MoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAqYmFzZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgKipuZXdfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgKm9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAgKmVycm9ycyApCisgIHsKKyAgICBGVF9JbnQgIGk7CisKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworICAgIEZUX1VOVVNFRCggYmFzZV9uYW1lICk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgRlRfUkFDQ0VTU19OX1JVTEVTOyBpKysgKQorICAgIHsKKyAgICAgIG5ld19uYW1lc1tpXSA9IE5VTEw7CisgICAgICBvZmZzZXRzW2ldICAgPSAwOworICAgICAgZXJyb3JzW2ldICAgID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICB9CisgIH0KKworCisjZW5kaWYgIC8qICFGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRzbmFtZXMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHNuYW1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzA0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRzbmFtZXMuYwpAQCAtMCwwICsxLDk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHNuYW1lcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU2ltcGxlIGludGVyZmFjZSB0byBhY2Nlc3MgU0ZOVCBuYW1lIHRhYmxlcyAod2hpY2ggYXJlIHVzZWQgICAgICAgICAgKi8KKy8qICAgIHRvIGhvbGQgZm9udCBuYW1lcywgY29weXJpZ2h0IGluZm8sIG5vdGljZXMsIGV0Yy4pIChib2R5KS4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfU0ZOVF9OQU1FU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzbmFtZXMuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX1VJbnQgKQorICBGVF9HZXRfU2ZudF9OYW1lX0NvdW50KCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIHJldHVybiAoIGZhY2UgJiYgRlRfSVNfU0ZOVCggZmFjZSApICkgPyAoKFRUX0ZhY2UpZmFjZSktPm51bV9uYW1lcyA6IDA7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzbmFtZXMuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1NmbnRfTmFtZSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2ZudE5hbWUgICphbmFtZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKworCisgICAgaWYgKCBhbmFtZSAmJiBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgeworICAgICAgVFRfRmFjZSAgdHRmYWNlID0gKFRUX0ZhY2UpZmFjZTsKKworCisgICAgICBpZiAoIGlkeCA8IChGVF9VSW50KXR0ZmFjZS0+bnVtX25hbWVzICkKKyAgICAgIHsKKyAgICAgICAgVFRfTmFtZUVudHJ5UmVjKiAgZW50cnkgPSB0dGZhY2UtPm5hbWVfdGFibGUubmFtZXMgKyBpZHg7CisKKworICAgICAgICAvKiBsb2FkIG5hbWUgb24gZGVtYW5kICovCisgICAgICAgIGlmICggZW50cnktPnN0cmluZ0xlbmd0aCA+IDAgJiYgZW50cnktPnN0cmluZyA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+bWVtb3J5OworICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gZmFjZS0+c3RyZWFtOworCisKKyAgICAgICAgICBpZiAoIEZUX05FV19BUlJBWSAgKCBlbnRyeS0+c3RyaW5nLCBlbnRyeS0+c3RyaW5nTGVuZ3RoICkgfHwKKyAgICAgICAgICAgICAgIEZUX1NUUkVBTV9TRUVLKCBlbnRyeS0+c3RyaW5nT2Zmc2V0ICkgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEKCBlbnRyeS0+c3RyaW5nLCBlbnRyeS0+c3RyaW5nTGVuZ3RoICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZSRUUoIGVudHJ5LT5zdHJpbmcgKTsKKyAgICAgICAgICAgIGVudHJ5LT5zdHJpbmdMZW5ndGggPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFuYW1lLT5wbGF0Zm9ybV9pZCA9IGVudHJ5LT5wbGF0Zm9ybUlEOworICAgICAgICBhbmFtZS0+ZW5jb2RpbmdfaWQgPSBlbnRyeS0+ZW5jb2RpbmdJRDsKKyAgICAgICAgYW5hbWUtPmxhbmd1YWdlX2lkID0gZW50cnktPmxhbmd1YWdlSUQ7CisgICAgICAgIGFuYW1lLT5uYW1lX2lkICAgICA9IGVudHJ5LT5uYW1lSUQ7CisgICAgICAgIGFuYW1lLT5zdHJpbmcgICAgICA9IChGVF9CeXRlKillbnRyeS0+c3RyaW5nOworICAgICAgICBhbmFtZS0+c3RyaW5nX2xlbiAgPSBlbnRyeS0+c3RyaW5nTGVuZ3RoOworCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHN0cmVhbS5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4ZjNmOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHN0cmVhbS5jCkBAIC0wLDAgKzEsODYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSS9PIHN0cmVhbSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3N0cmVhbQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9TdHJlYW1fT3Blbk1lbW9yeSggRlRfU3RyZWFtICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIHNpemUgKQorICB7CisgICAgc3RyZWFtLT5iYXNlICAgPSAoRlRfQnl0ZSopIGJhc2U7CisgICAgc3RyZWFtLT5zaXplICAgPSBzaXplOworICAgIHN0cmVhbS0+cG9zICAgID0gMDsKKyAgICBzdHJlYW0tPmN1cnNvciA9IE5VTEw7CisgICAgc3RyZWFtLT5yZWFkICAgPSBOVUxMOworICAgIHN0cmVhbS0+Y2xvc2UgID0gTlVMTDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9TdHJlYW1fQ2xvc2UoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIGlmICggc3RyZWFtICYmIHN0cmVhbS0+Y2xvc2UgKQorICAgICAgc3RyZWFtLT5jbG9zZSggc3RyZWFtICk7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9TZWVrKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgIHsKKyAgICAgIGlmICggc3RyZWFtLT5yZWFkKCBzdHJlYW0sIHBvcywgMCwgMCApICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX1NlZWs6IgorICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBpL287IHBvcyA9IDB4JWx4LCBzaXplID0gMHglbHhcbiIsCisgICAgICAgICAgICAgICAgICAgcG9zLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICB9CisgICAgfQorICAgIC8qIG5vdGUgdGhhdCBzZWVraW5nIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBhZnRlciB0aGUgZmlsZSBpcyB2YWxpZCAqLworICAgIGVsc2UgaWYgKCBwb3MgPiBzdHJlYW0tPnNpemUgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9TZWVrOiIKKyAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGkvbzsgcG9zID0gMHglbHgsIHNpemUgPSAweCVseFxuIiwKKyAgICAgICAgICAgICAgICAgcG9zLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgIH0KKworICAgIGlmICggIWVycm9yICkKKyAgICAgIHN0cmVhbS0+cG9zID0gcG9zOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fU2tpcCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGRpc3RhbmNlICkKKyAgeworICAgIGlmICggZGlzdGFuY2UgPCAwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisKKyAgICByZXR1cm4gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgc3RyZWFtLT5wb3MgKyAoRlRfVUxvbmcpZGlzdGFuY2UgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1VMb25nICkKKyAgRlRfU3RyZWFtX1BvcyggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgcmV0dXJuIHN0cmVhbS0+cG9zOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fUmVhZCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICB7CisgICAgcmV0dXJuIEZUX1N0cmVhbV9SZWFkQXQoIHN0cmVhbSwgc3RyZWFtLT5wb3MsIGJ1ZmZlciwgY291bnQgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX1JlYWRBdCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zLAorICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfVUxvbmcgIHJlYWRfYnl0ZXM7CisKKworICAgIGlmICggcG9zID49IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX1JlYWRBdDoiCisgICAgICAgICAgICAgICAgICIgaW52YWxpZCBpL287IHBvcyA9IDB4JWx4LCBzaXplID0gMHglbHhcbiIsCisgICAgICAgICAgICAgICAgIHBvcywgc3RyZWFtLT5zaXplICkpOworCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgIH0KKworICAgIGlmICggc3RyZWFtLT5yZWFkICkKKyAgICAgIHJlYWRfYnl0ZXMgPSBzdHJlYW0tPnJlYWQoIHN0cmVhbSwgcG9zLCBidWZmZXIsIGNvdW50ICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJlYWRfYnl0ZXMgPSBzdHJlYW0tPnNpemUgLSBwb3M7CisgICAgICBpZiAoIHJlYWRfYnl0ZXMgPiBjb3VudCApCisgICAgICAgIHJlYWRfYnl0ZXMgPSBjb3VudDsKKworICAgICAgRlRfTUVNX0NPUFkoIGJ1ZmZlciwgc3RyZWFtLT5iYXNlICsgcG9zLCByZWFkX2J5dGVzICk7CisgICAgfQorCisgICAgc3RyZWFtLT5wb3MgPSBwb3MgKyByZWFkX2J5dGVzOworCisgICAgaWYgKCByZWFkX2J5dGVzIDwgY291bnQgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9SZWFkQXQ6IgorICAgICAgICAgICAgICAgICAiIGludmFsaWQgcmVhZDsgZXhwZWN0ZWQgJWx1IGJ5dGVzLCBnb3QgJWx1XG4iLAorICAgICAgICAgICAgICAgICBjb3VudCwgcmVhZF9ieXRlcyApKTsKKworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fVHJ5UmVhZCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICB7CisgICAgRlRfVUxvbmcgIHJlYWRfYnl0ZXMgPSAwOworCisKKyAgICBpZiAoIHN0cmVhbS0+cG9zID49IHN0cmVhbS0+c2l6ZSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIHN0cmVhbS0+cmVhZCApCisgICAgICByZWFkX2J5dGVzID0gc3RyZWFtLT5yZWFkKCBzdHJlYW0sIHN0cmVhbS0+cG9zLCBidWZmZXIsIGNvdW50ICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJlYWRfYnl0ZXMgPSBzdHJlYW0tPnNpemUgLSBzdHJlYW0tPnBvczsKKyAgICAgIGlmICggcmVhZF9ieXRlcyA+IGNvdW50ICkKKyAgICAgICAgcmVhZF9ieXRlcyA9IGNvdW50OworCisgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyLCBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvcywgcmVhZF9ieXRlcyApOworICAgIH0KKworICAgIHN0cmVhbS0+cG9zICs9IHJlYWRfYnl0ZXM7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gcmVhZF9ieXRlczsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX0V4dHJhY3RGcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBGVF9TdHJlYW1fRW50ZXJGcmFtZSggc3RyZWFtLCBjb3VudCApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAqcGJ5dGVzID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOworCisgICAgICAvKiBlcXVpdmFsZW50IHRvIEZUX1N0cmVhbV9FeGl0RnJhbWUoKSwgd2l0aCBubyBtZW1vcnkgYmxvY2sgcmVsZWFzZSAqLworICAgICAgc3RyZWFtLT5jdXJzb3IgPSBOVUxMOworICAgICAgc3RyZWFtLT5saW1pdCAgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9TdHJlYW1fUmVsZWFzZUZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKQorICB7CisgICAgaWYgKCBzdHJlYW0gJiYgc3RyZWFtLT5yZWFkICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisjaWZkZWYgRlRfREVCVUdfTUVNT1JZCisgICAgICBmdF9tZW1fZnJlZSggbWVtb3J5LCAqcGJ5dGVzICk7CisgICAgICAqcGJ5dGVzID0gTlVMTDsKKyNlbHNlCisgICAgICBGVF9GUkVFKCAqcGJ5dGVzICk7CisjZW5kaWYKKyAgICB9CisgICAgKnBieXRlcyA9IE5VTEw7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1N0cmVhbV9FbnRlckZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VMb25nICByZWFkX2J5dGVzOworCisKKyAgICAvKiBjaGVjayBmb3IgbmVzdGVkIGZyYW1lIGFjY2VzcyAqLworICAgIEZUX0FTU0VSVCggc3RyZWFtICYmIHN0cmVhbS0+Y3Vyc29yID09IDAgKTsKKworICAgIGlmICggc3RyZWFtLT5yZWFkICkKKyAgICB7CisgICAgICAvKiBhbGxvY2F0ZSB0aGUgZnJhbWUgaW4gbWVtb3J5ICovCisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisKKyAgICAgIC8qIHNpbXBsZSBzYW5pdHkgY2hlY2sgKi8KKyAgICAgIGlmICggY291bnQgPiBzdHJlYW0tPnNpemUgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fRW50ZXJGcmFtZToiCisgICAgICAgICAgICAgICAgICAgIiBmcmFtZSBzaXplICglbHUpIGxhcmdlciB0aGFuIHN0cmVhbSBzaXplICglbHUpXG4iLAorICAgICAgICAgICAgICAgICAgIGNvdW50LCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX01FTU9SWQorICAgICAgLyogYXNzdW1lIF9mdF9kZWJ1Z19maWxlIGFuZCBfZnRfZGVidWdfbGluZW5vIGFyZSBhbHJlYWR5IHNldCAqLworICAgICAgc3RyZWFtLT5iYXNlID0gKHVuc2lnbmVkIGNoYXIqKWZ0X21lbV9xYWxsb2MoIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZyljb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisjZWxzZQorICAgICAgaWYgKCBGVF9RQUxMT0MoIHN0cmVhbS0+YmFzZSwgY291bnQgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyNlbmRpZgorICAgICAgLyogcmVhZCBpdCAqLworICAgICAgcmVhZF9ieXRlcyA9IHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+YmFzZSwgY291bnQgKTsKKyAgICAgIGlmICggcmVhZF9ieXRlcyA8IGNvdW50ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX0VudGVyRnJhbWU6IgorICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCByZWFkOyBleHBlY3RlZCAlbHUgYnl0ZXMsIGdvdCAlbHVcbiIsCisgICAgICAgICAgICAgICAgICAgY291bnQsIHJlYWRfYnl0ZXMgKSk7CisKKyAgICAgICAgRlRfRlJFRSggc3RyZWFtLT5iYXNlICk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgfQorICAgICAgc3RyZWFtLT5jdXJzb3IgPSBzdHJlYW0tPmJhc2U7CisgICAgICBzdHJlYW0tPmxpbWl0ICA9IHN0cmVhbS0+Y3Vyc29yICsgY291bnQ7CisgICAgICBzdHJlYW0tPnBvcyAgICs9IHJlYWRfYnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBjaGVjayBjdXJyZW50IGFuZCBuZXcgcG9zaXRpb24gKi8KKyAgICAgIGlmICggc3RyZWFtLT5wb3MgPj0gc3RyZWFtLT5zaXplICAgICAgICB8fAorICAgICAgICAgICBzdHJlYW0tPnNpemUgLSBzdHJlYW0tPnBvcyA8IGNvdW50ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX0VudGVyRnJhbWU6IgorICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBpL287IHBvcyA9IDB4JWx4LCBjb3VudCA9ICVsdSwgc2l6ZSA9IDB4JWx4XG4iLAorICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cG9zLCBjb3VudCwgc3RyZWFtLT5zaXplICkpOworCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIHNldCBjdXJzb3IgKi8KKyAgICAgIHN0cmVhbS0+Y3Vyc29yID0gc3RyZWFtLT5iYXNlICsgc3RyZWFtLT5wb3M7CisgICAgICBzdHJlYW0tPmxpbWl0ICA9IHN0cmVhbS0+Y3Vyc29yICsgY291bnQ7CisgICAgICBzdHJlYW0tPnBvcyAgICs9IGNvdW50OworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICAvKiBJTVBPUlRBTlQ6IFRoZSBhc3NlcnRpb24gc3RyZWFtLT5jdXJzb3IgIT0gMCB3YXMgcmVtb3ZlZCwgZ2l2ZW4gICAgKi8KKyAgICAvKiAgICAgICAgICAgIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIGEgZnJhbWUgb2YgbGVuZ3RoIDAgaW4gICAgKi8KKyAgICAvKiAgICAgICAgICAgIHNvbWUgd2VpcmQgZm9udHMgKHVzdWFsbHksIHdoZW4gYWNjZXNzaW5nIGFuIGFycmF5IG9mICAgKi8KKyAgICAvKiAgICAgICAgICAgIDAgcmVjb3JkcywgbGlrZSBpbiBzb21lIHN0cmFuZ2Uga2VybiB0YWJsZXMpLiAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgSW4gdGhpcyBjYXNlLCB0aGUgbG9hZGVyIGNvZGUgaGFuZGxlcyB0aGUgMC1sZW5ndGggdGFibGUgICAgICAgICAgKi8KKyAgICAvKiAgZ3JhY2VmdWxseTsgaG93ZXZlciwgc3RyZWFtLmN1cnNvciBpcyByZWFsbHkgc2V0IHRvIDAgYnkgdGhlICAgICAgKi8KKyAgICAvKiAgRlRfU3RyZWFtX0VudGVyRnJhbWUoKSBjYWxsLCBhbmQgdGhpcyBpcyBub3QgYW4gZXJyb3IuICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9BU1NFUlQoIHN0cmVhbSApOworCisgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKyAgICAgIGZ0X21lbV9mcmVlKCBtZW1vcnksIHN0cmVhbS0+YmFzZSApOworICAgICAgc3RyZWFtLT5iYXNlID0gTlVMTDsKKyNlbHNlCisgICAgICBGVF9GUkVFKCBzdHJlYW0tPmJhc2UgKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHJlYW0tPmN1cnNvciA9IE5VTEw7CisgICAgc3RyZWFtLT5saW1pdCAgPSBOVUxMOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfQ2hhciApCisgIEZUX1N0cmVhbV9HZXRDaGFyKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9DaGFyICByZXN1bHQ7CisKKworICAgIEZUX0FTU0VSVCggc3RyZWFtICYmIHN0cmVhbS0+Y3Vyc29yICk7CisKKyAgICByZXN1bHQgPSAwOworICAgIGlmICggc3RyZWFtLT5jdXJzb3IgPCBzdHJlYW0tPmxpbWl0ICkKKyAgICAgIHJlc3VsdCA9IChGVF9DaGFyKSpzdHJlYW0tPmN1cnNvcisrOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1VTaG9ydCApCisgIEZUX1N0cmVhbV9HZXRVU2hvcnQoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIEZUX0J5dGUqICAgcDsKKyAgICBGVF9VU2hvcnQgIHJlc3VsdDsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gJiYgc3RyZWFtLT5jdXJzb3IgKTsKKworICAgIHJlc3VsdCAgICAgICAgID0gMDsKKyAgICBwICAgICAgICAgICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgIGlmICggcCArIDEgPCBzdHJlYW0tPmxpbWl0ICkKKyAgICAgIHJlc3VsdCAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgc3RyZWFtLT5jdXJzb3IgPSBwOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1VTaG9ydCApCisgIEZUX1N0cmVhbV9HZXRVU2hvcnRMRSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfQnl0ZSogICBwOworICAgIEZUX1VTaG9ydCAgcmVzdWx0OworCisKKyAgICBGVF9BU1NFUlQoIHN0cmVhbSAmJiBzdHJlYW0tPmN1cnNvciApOworCisgICAgcmVzdWx0ICAgICAgICAgPSAwOworICAgIHAgICAgICAgICAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgaWYgKCBwICsgMSA8IHN0cmVhbS0+bGltaXQgKQorICAgICAgcmVzdWx0ICAgICAgID0gRlRfTkVYVF9VU0hPUlRfTEUoIHAgKTsKKyAgICBzdHJlYW0tPmN1cnNvciA9IHA7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fR2V0VU9mZnNldCggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfVUxvbmcgIHJlc3VsdDsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gJiYgc3RyZWFtLT5jdXJzb3IgKTsKKworICAgIHJlc3VsdCAgICAgICAgID0gMDsKKyAgICBwICAgICAgICAgICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgIGlmICggcCArIDIgPCBzdHJlYW0tPmxpbWl0ICkKKyAgICAgIHJlc3VsdCAgICAgICA9IEZUX05FWFRfVU9GRjMoIHAgKTsKKyAgICBzdHJlYW0tPmN1cnNvciA9IHA7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1VMb25nICkKKyAgRlRfU3RyZWFtX0dldFVMb25nKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9CeXRlKiAgcDsKKyAgICBGVF9VTG9uZyAgcmVzdWx0OworCisKKyAgICBGVF9BU1NFUlQoIHN0cmVhbSAmJiBzdHJlYW0tPmN1cnNvciApOworCisgICAgcmVzdWx0ICAgICAgICAgPSAwOworICAgIHAgICAgICAgICAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgaWYgKCBwICsgMyA8IHN0cmVhbS0+bGltaXQgKQorICAgICAgcmVzdWx0ICAgICAgID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIHN0cmVhbS0+Y3Vyc29yID0gcDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fR2V0VUxvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfVUxvbmcgIHJlc3VsdDsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gJiYgc3RyZWFtLT5jdXJzb3IgKTsKKworICAgIHJlc3VsdCAgICAgICAgID0gMDsKKyAgICBwICAgICAgICAgICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgIGlmICggcCArIDMgPCBzdHJlYW0tPmxpbWl0ICkKKyAgICAgIHJlc3VsdCAgICAgICA9IEZUX05FWFRfVUxPTkdfTEUoIHAgKTsKKyAgICBzdHJlYW0tPmN1cnNvciA9IHA7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0NoYXIgKQorICBGVF9TdHJlYW1fUmVhZENoYXIoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICB7CisgICAgRlRfQnl0ZSAgcmVzdWx0ID0gMDsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gKTsKKworICAgICplcnJvciA9IEZUX0Vycl9PazsKKworICAgIGlmICggc3RyZWFtLT5yZWFkICkKKyAgICB7CisgICAgICBpZiAoIHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywgJnJlc3VsdCwgMUwgKSAhPSAxTCApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggc3RyZWFtLT5wb3MgPCBzdHJlYW0tPnNpemUgKQorICAgICAgICByZXN1bHQgPSBzdHJlYW0tPmJhc2Vbc3RyZWFtLT5wb3NdOworICAgICAgZWxzZQorICAgICAgICBnb3RvIEZhaWw7CisgICAgfQorICAgIHN0cmVhbS0+cG9zKys7CisKKyAgICByZXR1cm4gKEZUX0NoYXIpcmVzdWx0OworCisgIEZhaWw6CisgICAgKmVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9SZWFkQ2hhcjoiCisgICAgICAgICAgICAgICAiIGludmFsaWQgaS9vOyBwb3MgPSAweCVseCwgc2l6ZSA9IDB4JWx4XG4iLAorICAgICAgICAgICAgICAgc3RyZWFtLT5wb3MsIHN0cmVhbS0+c2l6ZSApKTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfVVNob3J0ICkKKyAgRlRfU3RyZWFtX1JlYWRVU2hvcnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgIHsKKyAgICBGVF9CeXRlICAgIHJlYWRzWzJdOworICAgIEZUX0J5dGUqICAgcCAgICAgID0gMDsKKyAgICBGVF9VU2hvcnQgIHJlc3VsdCA9IDA7CisKKworICAgIEZUX0FTU0VSVCggc3RyZWFtICk7CisKKyAgICAqZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIHN0cmVhbS0+cG9zICsgMSA8IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgICAgeworICAgICAgICBpZiAoIHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywgcmVhZHMsIDJMICkgIT0gMkwgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBwID0gcmVhZHM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHAgPSBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvczsKKworICAgICAgaWYgKCBwICkKKyAgICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgZ290byBGYWlsOworCisgICAgc3RyZWFtLT5wb3MgKz0gMjsKKworICAgIHJldHVybiByZXN1bHQ7CisKKyAgRmFpbDoKKyAgICAqZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgRlRfRVJST1IoKCAiRlRfU3RyZWFtX1JlYWRVU2hvcnQ6IgorICAgICAgICAgICAgICAgIiBpbnZhbGlkIGkvbzsgcG9zID0gMHglbHgsIHNpemUgPSAweCVseFxuIiwKKyAgICAgICAgICAgICAgIHN0cmVhbS0+cG9zLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1VTaG9ydCApCisgIEZUX1N0cmVhbV9SZWFkVVNob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKKyAgeworICAgIEZUX0J5dGUgICAgcmVhZHNbMl07CisgICAgRlRfQnl0ZSogICBwICAgICAgPSAwOworICAgIEZUX1VTaG9ydCAgcmVzdWx0ID0gMDsKKworCisgICAgRlRfQVNTRVJUKCBzdHJlYW0gKTsKKworICAgICplcnJvciA9IEZUX0Vycl9PazsKKworICAgIGlmICggc3RyZWFtLT5wb3MgKyAxIDwgc3RyZWFtLT5zaXplICkKKyAgICB7CisgICAgICBpZiAoIHN0cmVhbS0+cmVhZCApCisgICAgICB7CisgICAgICAgIGlmICggc3RyZWFtLT5yZWFkKCBzdHJlYW0sIHN0cmVhbS0+cG9zLCByZWFkcywgMkwgKSAhPSAyTCApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHAgPSByZWFkczsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcCA9IHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zOworCisgICAgICBpZiAoIHAgKQorICAgICAgICByZXN1bHQgPSBGVF9ORVhUX1VTSE9SVF9MRSggcCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBzdHJlYW0tPnBvcyArPSAyOworCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBGYWlsOgorICAgICplcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fUmVhZFVTaG9ydExFOiIKKyAgICAgICAgICAgICAgICIgaW52YWxpZCBpL287IHBvcyA9IDB4JWx4LCBzaXplID0gMHglbHhcbiIsCisgICAgICAgICAgICAgICBzdHJlYW0tPnBvcywgc3RyZWFtLT5zaXplICkpOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9VTG9uZyApCisgIEZUX1N0cmVhbV9SZWFkVU9mZnNldCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgIHsKKyAgICBGVF9CeXRlICAgcmVhZHNbM107CisgICAgRlRfQnl0ZSogIHAgICAgICA9IDA7CisgICAgRlRfVUxvbmcgIHJlc3VsdCA9IDA7CisKKworICAgIEZUX0FTU0VSVCggc3RyZWFtICk7CisKKyAgICAqZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIHN0cmVhbS0+cG9zICsgMiA8IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgICAgeworICAgICAgICBpZiAoc3RyZWFtLT5yZWFkKCBzdHJlYW0sIHN0cmVhbS0+cG9zLCByZWFkcywgM0wgKSAhPSAzTCApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHAgPSByZWFkczsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcCA9IHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zOworCisgICAgICBpZiAoIHAgKQorICAgICAgICByZXN1bHQgPSBGVF9ORVhUX1VPRkYzKCBwICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIHN0cmVhbS0+cG9zICs9IDM7CisKKyAgICByZXR1cm4gcmVzdWx0OworCisgIEZhaWw6CisgICAgKmVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9SZWFkVU9mZnNldDoiCisgICAgICAgICAgICAgICAiIGludmFsaWQgaS9vOyBwb3MgPSAweCVseCwgc2l6ZSA9IDB4JWx4XG4iLAorICAgICAgICAgICAgICAgc3RyZWFtLT5wb3MsIHN0cmVhbS0+c2l6ZSApKTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQorICBGVF9TdHJlYW1fUmVhZFVMb25nKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgIHsKKyAgICBGVF9CeXRlICAgcmVhZHNbNF07CisgICAgRlRfQnl0ZSogIHAgICAgICA9IDA7CisgICAgRlRfVUxvbmcgIHJlc3VsdCA9IDA7CisKKworICAgIEZUX0FTU0VSVCggc3RyZWFtICk7CisKKyAgICAqZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIHN0cmVhbS0+cG9zICsgMyA8IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgICAgeworICAgICAgICBpZiAoIHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywgcmVhZHMsIDRMICkgIT0gNEwgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBwID0gcmVhZHM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHAgPSBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvczsKKworICAgICAgaWYgKCBwICkKKyAgICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBzdHJlYW0tPnBvcyArPSA0OworCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBGYWlsOgorICAgICplcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fUmVhZFVMb25nOiIKKyAgICAgICAgICAgICAgICIgaW52YWxpZCBpL287IHBvcyA9IDB4JWx4LCBzaXplID0gMHglbHhcbiIsCisgICAgICAgICAgICAgICBzdHJlYW0tPnBvcywgc3RyZWFtLT5zaXplICkpOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9VTG9uZyApCisgIEZUX1N0cmVhbV9SZWFkVUxvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgIHsKKyAgICBGVF9CeXRlICAgcmVhZHNbNF07CisgICAgRlRfQnl0ZSogIHAgICAgICA9IDA7CisgICAgRlRfVUxvbmcgIHJlc3VsdCA9IDA7CisKKworICAgIEZUX0FTU0VSVCggc3RyZWFtICk7CisKKyAgICAqZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBpZiAoIHN0cmVhbS0+cG9zICsgMyA8IHN0cmVhbS0+c2l6ZSApCisgICAgeworICAgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgICAgeworICAgICAgICBpZiAoIHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywgcmVhZHMsIDRMICkgIT0gNEwgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBwID0gcmVhZHM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHAgPSBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvczsKKworICAgICAgaWYgKCBwICkKKyAgICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VTE9OR19MRSggcCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBzdHJlYW0tPnBvcyArPSA0OworCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBGYWlsOgorICAgICplcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fUmVhZFVMb25nTEU6IgorICAgICAgICAgICAgICAgIiBpbnZhbGlkIGkvbzsgcG9zID0gMHglbHgsIHNpemUgPSAweCVseFxuIiwKKyAgICAgICAgICAgICAgIHN0cmVhbS0+cG9zLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX1JlYWRGaWVsZHMoIEZUX1N0cmVhbSAgICAgICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfRnJhbWVfRmllbGQqICBmaWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRfQm9vbCAgIGZyYW1lX2FjY2Vzc2VkID0gMDsKKyAgICBGVF9CeXRlKiAgY3Vyc29yOworCisKKyAgICBpZiAoICFmaWVsZHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoICFzdHJlYW0gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9IYW5kbGUgKTsKKworICAgIGN1cnNvciA9IHN0cmVhbS0+Y3Vyc29yOworCisgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgZG8KKyAgICB7CisgICAgICBGVF9VTG9uZyAgdmFsdWU7CisgICAgICBGVF9JbnQgICAgc2lnbl9zaGlmdDsKKyAgICAgIEZUX0J5dGUqICBwOworCisKKyAgICAgIHN3aXRjaCAoIGZpZWxkcy0+dmFsdWUgKQorICAgICAgeworICAgICAgY2FzZSBmdF9mcmFtZV9zdGFydDogIC8qIGFjY2VzcyBhIG5ldyBmcmFtZSAqLworICAgICAgICBlcnJvciA9IEZUX1N0cmVhbV9FbnRlckZyYW1lKCBzdHJlYW0sIGZpZWxkcy0+b2Zmc2V0ICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBmcmFtZV9hY2Nlc3NlZCA9IDE7CisgICAgICAgIGN1cnNvciAgICAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgICAgIGZpZWxkcysrOworICAgICAgICBjb250aW51ZTsgIC8qIGxvb3AhICovCisKKyAgICAgIGNhc2UgZnRfZnJhbWVfYnl0ZXM6ICAvKiByZWFkIGEgYnl0ZSBzZXF1ZW5jZSAqLworICAgICAgY2FzZSBmdF9mcmFtZV9za2lwOiAgIC8qIHNraXAgc29tZSBieXRlcyAgICAgICovCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBsZW4gPSBmaWVsZHMtPnNpemU7CisKKworICAgICAgICAgIGlmICggY3Vyc29yICsgbGVuID4gc3RyZWFtLT5saW1pdCApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBmaWVsZHMtPnZhbHVlID09IGZ0X2ZyYW1lX2J5dGVzICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwID0gKEZUX0J5dGUqKXN0cnVjdHVyZSArIGZpZWxkcy0+b2Zmc2V0OworICAgICAgICAgICAgRlRfTUVNX0NPUFkoIHAsIGN1cnNvciwgbGVuICk7CisgICAgICAgICAgfQorICAgICAgICAgIGN1cnNvciArPSBsZW47CisgICAgICAgICAgZmllbGRzKys7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgY2FzZSBmdF9mcmFtZV9ieXRlOgorICAgICAgY2FzZSBmdF9mcmFtZV9zY2hhcjogIC8qIHJlYWQgYSBzaW5nbGUgYnl0ZSAqLworICAgICAgICB2YWx1ZSA9IEZUX05FWFRfQllURSggY3Vyc29yICk7CisgICAgICAgIHNpZ25fc2hpZnQgPSAyNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgZnRfZnJhbWVfc2hvcnRfYmU6CisgICAgICBjYXNlIGZ0X2ZyYW1lX3VzaG9ydF9iZTogIC8qIHJlYWQgYSAyLWJ5dGUgYmlnLWVuZGlhbiBzaG9ydCAqLworICAgICAgICB2YWx1ZSA9IEZUX05FWFRfVVNIT1JUKCBjdXJzb3IpIDsKKyAgICAgICAgc2lnbl9zaGlmdCA9IDE2OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBmdF9mcmFtZV9zaG9ydF9sZToKKyAgICAgIGNhc2UgZnRfZnJhbWVfdXNob3J0X2xlOiAgLyogcmVhZCBhIDItYnl0ZSBsaXR0bGUtZW5kaWFuIHNob3J0ICovCisgICAgICAgIHZhbHVlID0gRlRfTkVYVF9VU0hPUlRfTEUoIGN1cnNvciApOworICAgICAgICBzaWduX3NoaWZ0ID0gMTY7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGZ0X2ZyYW1lX2xvbmdfYmU6CisgICAgICBjYXNlIGZ0X2ZyYW1lX3Vsb25nX2JlOiAgLyogcmVhZCBhIDQtYnl0ZSBiaWctZW5kaWFuIGxvbmcgKi8KKyAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VMT05HKCBjdXJzb3IgKTsKKyAgICAgICAgc2lnbl9zaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGZ0X2ZyYW1lX2xvbmdfbGU6CisgICAgICBjYXNlIGZ0X2ZyYW1lX3Vsb25nX2xlOiAgLyogcmVhZCBhIDQtYnl0ZSBsaXR0bGUtZW5kaWFuIGxvbmcgKi8KKyAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VMT05HX0xFKCBjdXJzb3IgKTsKKyAgICAgICAgc2lnbl9zaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGZ0X2ZyYW1lX29mZjNfYmU6CisgICAgICBjYXNlIGZ0X2ZyYW1lX3VvZmYzX2JlOiAgLyogcmVhZCBhIDMtYnl0ZSBiaWctZW5kaWFuIGxvbmcgKi8KKyAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VPRkYzKCBjdXJzb3IgKTsKKyAgICAgICAgc2lnbl9zaGlmdCA9IDg7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGZ0X2ZyYW1lX29mZjNfbGU6CisgICAgICBjYXNlIGZ0X2ZyYW1lX3VvZmYzX2xlOiAgLyogcmVhZCBhIDMtYnl0ZSBsaXR0bGUtZW5kaWFuIGxvbmcgKi8KKyAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VPRkYzX0xFKCBjdXJzb3IgKTsKKyAgICAgICAgc2lnbl9zaGlmdCA9IDg7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBvdGhlcndpc2UsIGV4aXQgdGhlIGxvb3AgKi8KKyAgICAgICAgc3RyZWFtLT5jdXJzb3IgPSBjdXJzb3I7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogbm93LCBjb21wdXRlIHRoZSBzaWduZWQgdmFsdWUgaXMgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoIGZpZWxkcy0+dmFsdWUgJiBGVF9GUkFNRV9PUF9TSUdORUQgKQorICAgICAgICB2YWx1ZSA9IChGVF9VTG9uZykoIChGVF9JbnQzMikoIHZhbHVlIDw8IHNpZ25fc2hpZnQgKSA+PiBzaWduX3NoaWZ0ICk7CisKKyAgICAgIC8qIGZpbmFsbHksIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGUgb2JqZWN0ICovCisKKyAgICAgIHAgPSAoRlRfQnl0ZSopc3RydWN0dXJlICsgZmllbGRzLT5vZmZzZXQ7CisgICAgICBzd2l0Y2ggKCBmaWVsZHMtPnNpemUgKQorICAgICAgeworICAgICAgY2FzZSAoIDggLyBGVF9DSEFSX0JJVCApOgorICAgICAgICAqKEZUX0J5dGUqKXAgPSAoRlRfQnl0ZSl2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgKCAxNiAvIEZUX0NIQVJfQklUICk6CisgICAgICAgICooRlRfVVNob3J0KilwID0gKEZUX1VTaG9ydCl2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgKCAzMiAvIEZUX0NIQVJfQklUICk6CisgICAgICAgICooRlRfVUludDMyKilwID0gKEZUX1VJbnQzMil2YWx1ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6ICAvKiBmb3IgNjQtYml0IHN5c3RlbXMgKi8KKyAgICAgICAgKihGVF9VTG9uZyopcCA9IChGVF9VTG9uZyl2YWx1ZTsKKyAgICAgIH0KKworICAgICAgLyogZ28gdG8gbmV4dCBmaWVsZCAqLworICAgICAgZmllbGRzKys7CisgICAgfQorICAgIHdoaWxlICggMSApOworCisgIEV4aXQ6CisgICAgLyogY2xvc2UgdGhlIGZyYW1lIGlmIGl0IHdhcyBvcGVuZWQgYnkgdGhpcyByZWFkICovCisgICAgaWYgKCBmcmFtZV9hY2Nlc3NlZCApCisgICAgICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBzdHJlYW0gKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3Ryb2tlLmMgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRzdHJva2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJlZTMwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3Ryb2tlLmMKQEAgLTAsMCArMSwyNDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHN0cm9rZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgcGF0aCBzdHJva2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfU1RST0tFUl9ICisjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3Ryb2tlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9TdHJva2VyQm9yZGVyICkKKyAgRlRfT3V0bGluZV9HZXRJbnNpZGVCb3JkZXIoIEZUX091dGxpbmUqICBvdXRsaW5lICkKKyAgeworICAgIEZUX09yaWVudGF0aW9uICBvID0gRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24oIG91dGxpbmUgKTsKKworCisgICAgcmV0dXJuIG8gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgPyBGVF9TVFJPS0VSX0JPUkRFUl9SSUdIVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRlRfU1RST0tFUl9CT1JERVJfTEVGVDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfU3Ryb2tlckJvcmRlciApCisgIEZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlciggRlRfT3V0bGluZSogIG91dGxpbmUgKQorICB7CisgICAgRlRfT3JpZW50YXRpb24gIG8gPSBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiggb3V0bGluZSApOworCisKKyAgICByZXR1cm4gbyA9PSBGVF9PUklFTlRBVElPTl9UUlVFVFlQRSA/IEZUX1NUUk9LRVJfQk9SREVSX0xFRlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZUX1NUUk9LRVJfQk9SREVSX1JJR0hUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgQkVaSUVSIENPTVBVVEFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGVF9TTUFMTF9DT05JQ19USFJFU0hPTEQgICggRlRfQU5HTEVfUEkgLyA2ICkKKyNkZWZpbmUgRlRfU01BTExfQ1VCSUNfVEhSRVNIT0xEICAoIEZUX0FOR0xFX1BJIC8gOCApCisKKyNkZWZpbmUgRlRfRVBTSUxPTiAgMgorCisjZGVmaW5lIEZUX0lTX1NNQUxMKCB4ICkgICggKHgpID4gLUZUX0VQU0lMT04gJiYgKHgpIDwgRlRfRVBTSUxPTiApCisKKworICBzdGF0aWMgRlRfUG9zCisgIGZ0X3Bvc19hYnMoIEZUX1BvcyAgeCApCisgIHsKKyAgICByZXR1cm4geCA+PSAwID8geCA6IC14OworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9jb25pY19zcGxpdCggRlRfVmVjdG9yKiAgYmFzZSApCisgIHsKKyAgICBGVF9Qb3MgIGEsIGI7CisKKworICAgIGJhc2VbNF0ueCA9IGJhc2VbMl0ueDsKKyAgICBiID0gYmFzZVsxXS54OworICAgIGEgPSBiYXNlWzNdLnggPSAoIGJhc2VbMl0ueCArIGIgKSAvIDI7CisgICAgYiA9IGJhc2VbMV0ueCA9ICggYmFzZVswXS54ICsgYiApIC8gMjsKKyAgICBiYXNlWzJdLnggPSAoIGEgKyBiICkgLyAyOworCisgICAgYmFzZVs0XS55ID0gYmFzZVsyXS55OworICAgIGIgPSBiYXNlWzFdLnk7CisgICAgYSA9IGJhc2VbM10ueSA9ICggYmFzZVsyXS55ICsgYiApIC8gMjsKKyAgICBiID0gYmFzZVsxXS55ID0gKCBiYXNlWzBdLnkgKyBiICkgLyAyOworICAgIGJhc2VbMl0ueSA9ICggYSArIGIgKSAvIDI7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGZ0X2NvbmljX2lzX3NtYWxsX2Vub3VnaCggRlRfVmVjdG9yKiAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZV9vdXQgKQorICB7CisgICAgRlRfVmVjdG9yICBkMSwgZDI7CisgICAgRlRfQW5nbGUgICB0aGV0YTsKKyAgICBGVF9JbnQgICAgIGNsb3NlMSwgY2xvc2UyOworCisKKyAgICBkMS54ID0gYmFzZVsxXS54IC0gYmFzZVsyXS54OworICAgIGQxLnkgPSBiYXNlWzFdLnkgLSBiYXNlWzJdLnk7CisgICAgZDIueCA9IGJhc2VbMF0ueCAtIGJhc2VbMV0ueDsKKyAgICBkMi55ID0gYmFzZVswXS55IC0gYmFzZVsxXS55OworCisgICAgY2xvc2UxID0gRlRfSVNfU01BTEwoIGQxLnggKSAmJiBGVF9JU19TTUFMTCggZDEueSApOworICAgIGNsb3NlMiA9IEZUX0lTX1NNQUxMKCBkMi54ICkgJiYgRlRfSVNfU01BTEwoIGQyLnkgKTsKKworICAgIGlmICggY2xvc2UxICkKKyAgICB7CisgICAgICBpZiAoIGNsb3NlMiApCisgICAgICB7CisgICAgICAgIC8qIGJhc2ljYWxseSBhIHBvaW50OyAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBkbyBub3RoaW5nIHRvIHJldGFpbiBvcmlnaW5hbCBkaXJlY3Rpb24gKi8KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgKmFuZ2xlX2luICA9CisgICAgICAgICphbmdsZV9vdXQgPSBGVF9BdGFuMiggZDIueCwgZDIueSApOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qICFjbG9zZTEgKi8KKyAgICB7CisgICAgICBpZiAoIGNsb3NlMiApCisgICAgICB7CisgICAgICAgICphbmdsZV9pbiAgPQorICAgICAgICAqYW5nbGVfb3V0ID0gRlRfQXRhbjIoIGQxLngsIGQxLnkgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgKmFuZ2xlX2luICA9IEZUX0F0YW4yKCBkMS54LCBkMS55ICk7CisgICAgICAgICphbmdsZV9vdXQgPSBGVF9BdGFuMiggZDIueCwgZDIueSApOworICAgICAgfQorICAgIH0KKworICAgIHRoZXRhID0gZnRfcG9zX2FicyggRlRfQW5nbGVfRGlmZiggKmFuZ2xlX2luLCAqYW5nbGVfb3V0ICkgKTsKKworICAgIHJldHVybiBGVF9CT09MKCB0aGV0YSA8IEZUX1NNQUxMX0NPTklDX1RIUkVTSE9MRCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9jdWJpY19zcGxpdCggRlRfVmVjdG9yKiAgYmFzZSApCisgIHsKKyAgICBGVF9Qb3MgIGEsIGIsIGMsIGQ7CisKKworICAgIGJhc2VbNl0ueCA9IGJhc2VbM10ueDsKKyAgICBjID0gYmFzZVsxXS54OworICAgIGQgPSBiYXNlWzJdLng7CisgICAgYmFzZVsxXS54ID0gYSA9ICggYmFzZVswXS54ICsgYyApIC8gMjsKKyAgICBiYXNlWzVdLnggPSBiID0gKCBiYXNlWzNdLnggKyBkICkgLyAyOworICAgIGMgPSAoIGMgKyBkICkgLyAyOworICAgIGJhc2VbMl0ueCA9IGEgPSAoIGEgKyBjICkgLyAyOworICAgIGJhc2VbNF0ueCA9IGIgPSAoIGIgKyBjICkgLyAyOworICAgIGJhc2VbM10ueCA9ICggYSArIGIgKSAvIDI7CisKKyAgICBiYXNlWzZdLnkgPSBiYXNlWzNdLnk7CisgICAgYyA9IGJhc2VbMV0ueTsKKyAgICBkID0gYmFzZVsyXS55OworICAgIGJhc2VbMV0ueSA9IGEgPSAoIGJhc2VbMF0ueSArIGMgKSAvIDI7CisgICAgYmFzZVs1XS55ID0gYiA9ICggYmFzZVszXS55ICsgZCApIC8gMjsKKyAgICBjID0gKCBjICsgZCApIC8gMjsKKyAgICBiYXNlWzJdLnkgPSBhID0gKCBhICsgYyApIC8gMjsKKyAgICBiYXNlWzRdLnkgPSBiID0gKCBiICsgYyApIC8gMjsKKyAgICBiYXNlWzNdLnkgPSAoIGEgKyBiICkgLyAyOworICB9CisKKworICAvKiBSZXR1cm4gdGhlIGF2ZXJhZ2Ugb2YgYGFuZ2xlMScgYW5kIGBhbmdsZTInLiAgICAgICAgICAgICovCisgIC8qIFRoaXMgZ2l2ZXMgY29ycmVjdCByZXN1bHQgZXZlbiBpZiBgYW5nbGUxJyBhbmQgYGFuZ2xlMicgKi8KKyAgLyogaGF2ZSBvcHBvc2l0ZSBzaWducy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfQW5nbGUKKyAgZnRfYW5nbGVfbWVhbiggRlRfQW5nbGUgIGFuZ2xlMSwKKyAgICAgICAgICAgICAgICAgRlRfQW5nbGUgIGFuZ2xlMiApCisgIHsKKyAgICByZXR1cm4gYW5nbGUxICsgRlRfQW5nbGVfRGlmZiggYW5nbGUxLCBhbmdsZTIgKSAvIDI7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGZ0X2N1YmljX2lzX3NtYWxsX2Vub3VnaCggRlRfVmVjdG9yKiAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZV9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZV9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAqYW5nbGVfb3V0ICkKKyAgeworICAgIEZUX1ZlY3RvciAgZDEsIGQyLCBkMzsKKyAgICBGVF9BbmdsZSAgIHRoZXRhMSwgdGhldGEyOworICAgIEZUX0ludCAgICAgY2xvc2UxLCBjbG9zZTIsIGNsb3NlMzsKKworCisgICAgZDEueCA9IGJhc2VbMl0ueCAtIGJhc2VbM10ueDsKKyAgICBkMS55ID0gYmFzZVsyXS55IC0gYmFzZVszXS55OworICAgIGQyLnggPSBiYXNlWzFdLnggLSBiYXNlWzJdLng7CisgICAgZDIueSA9IGJhc2VbMV0ueSAtIGJhc2VbMl0ueTsKKyAgICBkMy54ID0gYmFzZVswXS54IC0gYmFzZVsxXS54OworICAgIGQzLnkgPSBiYXNlWzBdLnkgLSBiYXNlWzFdLnk7CisKKyAgICBjbG9zZTEgPSBGVF9JU19TTUFMTCggZDEueCApICYmIEZUX0lTX1NNQUxMKCBkMS55ICk7CisgICAgY2xvc2UyID0gRlRfSVNfU01BTEwoIGQyLnggKSAmJiBGVF9JU19TTUFMTCggZDIueSApOworICAgIGNsb3NlMyA9IEZUX0lTX1NNQUxMKCBkMy54ICkgJiYgRlRfSVNfU01BTEwoIGQzLnkgKTsKKworICAgIGlmICggY2xvc2UxICkKKyAgICB7CisgICAgICBpZiAoIGNsb3NlMiApCisgICAgICB7CisgICAgICAgIGlmICggY2xvc2UzICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGJhc2ljYWxseSBhIHBvaW50OyAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIGRvIG5vdGhpbmcgdG8gcmV0YWluIG9yaWdpbmFsIGRpcmVjdGlvbiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogIWNsb3NlMyAqLworICAgICAgICB7CisgICAgICAgICAgKmFuZ2xlX2luICA9CisgICAgICAgICAgKmFuZ2xlX21pZCA9CisgICAgICAgICAgKmFuZ2xlX291dCA9IEZUX0F0YW4yKCBkMy54LCBkMy55ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgLyogIWNsb3NlMiAqLworICAgICAgeworICAgICAgICBpZiAoIGNsb3NlMyApCisgICAgICAgIHsKKyAgICAgICAgICAqYW5nbGVfaW4gID0KKyAgICAgICAgICAqYW5nbGVfbWlkID0KKyAgICAgICAgICAqYW5nbGVfb3V0ID0gRlRfQXRhbjIoIGQyLngsIGQyLnkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qICFjbG9zZTMgKi8KKyAgICAgICAgeworICAgICAgICAgICphbmdsZV9pbiAgPQorICAgICAgICAgICphbmdsZV9taWQgPSBGVF9BdGFuMiggZDIueCwgZDIueSApOworICAgICAgICAgICphbmdsZV9vdXQgPSBGVF9BdGFuMiggZDMueCwgZDMueSApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogIWNsb3NlMSAqLworICAgIHsKKyAgICAgIGlmICggY2xvc2UyICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBjbG9zZTMgKQorICAgICAgICB7CisgICAgICAgICAgKmFuZ2xlX2luICA9CisgICAgICAgICAgKmFuZ2xlX21pZCA9CisgICAgICAgICAgKmFuZ2xlX291dCA9IEZUX0F0YW4yKCBkMS54LCBkMS55ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiAhY2xvc2UzICovCisgICAgICAgIHsKKyAgICAgICAgICAqYW5nbGVfaW4gID0gRlRfQXRhbjIoIGQxLngsIGQxLnkgKTsKKyAgICAgICAgICAqYW5nbGVfb3V0ID0gRlRfQXRhbjIoIGQzLngsIGQzLnkgKTsKKyAgICAgICAgICAqYW5nbGVfbWlkID0gZnRfYW5nbGVfbWVhbiggKmFuZ2xlX2luLCAqYW5nbGVfb3V0ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgLyogIWNsb3NlMiAqLworICAgICAgeworICAgICAgICBpZiAoIGNsb3NlMyApCisgICAgICAgIHsKKyAgICAgICAgICAqYW5nbGVfaW4gID0gRlRfQXRhbjIoIGQxLngsIGQxLnkgKTsKKyAgICAgICAgICAqYW5nbGVfbWlkID0KKyAgICAgICAgICAqYW5nbGVfb3V0ID0gRlRfQXRhbjIoIGQyLngsIGQyLnkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qICFjbG9zZTMgKi8KKyAgICAgICAgeworICAgICAgICAgICphbmdsZV9pbiAgPSBGVF9BdGFuMiggZDEueCwgZDEueSApOworICAgICAgICAgICphbmdsZV9taWQgPSBGVF9BdGFuMiggZDIueCwgZDIueSApOworICAgICAgICAgICphbmdsZV9vdXQgPSBGVF9BdGFuMiggZDMueCwgZDMueSApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgdGhldGExID0gZnRfcG9zX2FicyggRlRfQW5nbGVfRGlmZiggKmFuZ2xlX2luLCAgKmFuZ2xlX21pZCApICk7CisgICAgdGhldGEyID0gZnRfcG9zX2FicyggRlRfQW5nbGVfRGlmZiggKmFuZ2xlX21pZCwgKmFuZ2xlX291dCApICk7CisKKyAgICByZXR1cm4gRlRfQk9PTCggdGhldGExIDwgRlRfU01BTExfQ1VCSUNfVEhSRVNIT0xEICYmCisgICAgICAgICAgICAgICAgICAgIHRoZXRhMiA8IEZUX1NNQUxMX0NVQklDX1RIUkVTSE9MRCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIFNUUk9LRSBCT1JERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICB0eXBlZGVmIGVudW0gIEZUX1N0cm9rZVRhZ3NfCisgIHsKKyAgICBGVF9TVFJPS0VfVEFHX09OICAgID0gMSwgICAvKiBvbi1jdXJ2ZSBwb2ludCAgKi8KKyAgICBGVF9TVFJPS0VfVEFHX0NVQklDID0gMiwgICAvKiBjdWJpYyBvZmYtcG9pbnQgKi8KKyAgICBGVF9TVFJPS0VfVEFHX0JFR0lOID0gNCwgICAvKiBzdWItcGF0aCBzdGFydCAgKi8KKyAgICBGVF9TVFJPS0VfVEFHX0VORCAgID0gOCAgICAvKiBzdWItcGF0aCBlbmQgICAgKi8KKworICB9IEZUX1N0cm9rZVRhZ3M7CisKKyNkZWZpbmUgIEZUX1NUUk9LRV9UQUdfQkVHSU5fRU5EICAoIEZUX1NUUk9LRV9UQUdfQkVHSU4gfCBGVF9TVFJPS0VfVEFHX0VORCApCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1N0cm9rZUJvcmRlclJlY18KKyAgeworICAgIEZUX1VJbnQgICAgIG51bV9wb2ludHM7CisgICAgRlRfVUludCAgICAgbWF4X3BvaW50czsKKyAgICBGVF9WZWN0b3IqICBwb2ludHM7CisgICAgRlRfQnl0ZSogICAgdGFnczsKKyAgICBGVF9Cb29sICAgICBtb3ZhYmxlOyAgLyogVFJVRSBmb3IgZW5kcyBvZiBsaW5ldG8gYm9yZGVycyAqLworICAgIEZUX0ludCAgICAgIHN0YXJ0OyAgICAvKiBpbmRleCBvZiBjdXJyZW50IHN1Yi1wYXRoIHN0YXJ0IHBvaW50ICovCisgICAgRlRfTWVtb3J5ICAgbWVtb3J5OworICAgIEZUX0Jvb2wgICAgIHZhbGlkOworCisgIH0gRlRfU3Ryb2tlQm9yZGVyUmVjLCAqRlRfU3Ryb2tlQm9yZGVyOworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3N0cm9rZV9ib3JkZXJfZ3JvdyggRlRfU3Ryb2tlQm9yZGVyICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuZXdfcG9pbnRzICkKKyAgeworICAgIEZUX1VJbnQgICBvbGRfbWF4ID0gYm9yZGVyLT5tYXhfcG9pbnRzOworICAgIEZUX1VJbnQgICBuZXdfbWF4ID0gYm9yZGVyLT5udW1fcG9pbnRzICsgbmV3X3BvaW50czsKKyAgICBGVF9FcnJvciAgZXJyb3IgICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBuZXdfbWF4ID4gb2xkX21heCApCisgICAgeworICAgICAgRlRfVUludCAgICBjdXJfbWF4ID0gb2xkX21heDsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICA9IGJvcmRlci0+bWVtb3J5OworCisKKyAgICAgIHdoaWxlICggY3VyX21heCA8IG5ld19tYXggKQorICAgICAgICBjdXJfbWF4ICs9ICggY3VyX21heCA+PiAxICkgKyAxNjsKKworICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggYm9yZGVyLT5wb2ludHMsIG9sZF9tYXgsIGN1cl9tYXggKSB8fAorICAgICAgICAgICBGVF9SRU5FV19BUlJBWSggYm9yZGVyLT50YWdzLCAgIG9sZF9tYXgsIGN1cl9tYXggKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgYm9yZGVyLT5tYXhfcG9pbnRzID0gY3VyX21heDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3N0cm9rZV9ib3JkZXJfY2xvc2UoIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgIHJldmVyc2UgKQorICB7CisgICAgRlRfVUludCAgc3RhcnQgPSAoRlRfVUludClib3JkZXItPnN0YXJ0OworICAgIEZUX1VJbnQgIGNvdW50ID0gYm9yZGVyLT5udW1fcG9pbnRzOworCisKKyAgICBGVF9BU1NFUlQoIGJvcmRlci0+c3RhcnQgPj0gMCApOworCisgICAgLyogZG9uJ3QgcmVjb3JkIGVtcHR5IHBhdGhzISAqLworICAgIGlmICggY291bnQgPD0gc3RhcnQgKyAxVSApCisgICAgICBib3JkZXItPm51bV9wb2ludHMgPSBzdGFydDsKKyAgICBlbHNlCisgICAgeworICAgICAgLyogY29weSB0aGUgbGFzdCBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhpcyBzdWItcGF0aCwgc2luY2UgKi8KKyAgICAgIC8qIGl0IGNvbnRhaW5zIHRoZSBgYWRqdXN0ZWQnIHN0YXJ0aW5nIGNvb3JkaW5hdGVzICAgICAgICAgICovCisgICAgICBib3JkZXItPm51bV9wb2ludHMgICAgPSAtLWNvdW50OworICAgICAgYm9yZGVyLT5wb2ludHNbc3RhcnRdID0gYm9yZGVyLT5wb2ludHNbY291bnRdOworCisgICAgICBpZiAoIHJldmVyc2UgKQorICAgICAgeworICAgICAgICAvKiByZXZlcnNlIHRoZSBwb2ludHMgKi8KKyAgICAgICAgeworICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzEgPSBib3JkZXItPnBvaW50cyArIHN0YXJ0ICsgMTsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMyID0gYm9yZGVyLT5wb2ludHMgKyBjb3VudCAtIDE7CisKKworICAgICAgICAgIGZvciAoIDsgdmVjMSA8IHZlYzI7IHZlYzErKywgdmVjMi0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHRtcDsKKworCisgICAgICAgICAgICB0bXAgICA9ICp2ZWMxOworICAgICAgICAgICAgKnZlYzEgPSAqdmVjMjsKKyAgICAgICAgICAgICp2ZWMyID0gdG1wOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIHRoZW4gdGhlIHRhZ3MgKi8KKyAgICAgICAgeworICAgICAgICAgIEZUX0J5dGUqICB0YWcxID0gYm9yZGVyLT50YWdzICsgc3RhcnQgKyAxOworICAgICAgICAgIEZUX0J5dGUqICB0YWcyID0gYm9yZGVyLT50YWdzICsgY291bnQgLSAxOworCisKKyAgICAgICAgICBmb3IgKCA7IHRhZzEgPCB0YWcyOyB0YWcxKyssIHRhZzItLSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfQnl0ZSAgdG1wOworCisKKyAgICAgICAgICAgIHRtcCAgID0gKnRhZzE7CisgICAgICAgICAgICAqdGFnMSA9ICp0YWcyOworICAgICAgICAgICAgKnRhZzIgPSB0bXA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGJvcmRlci0+dGFnc1tzdGFydCAgICBdIHw9IEZUX1NUUk9LRV9UQUdfQkVHSU47CisgICAgICBib3JkZXItPnRhZ3NbY291bnQgLSAxXSB8PSBGVF9TVFJPS0VfVEFHX0VORDsKKyAgICB9CisKKyAgICBib3JkZXItPnN0YXJ0ICAgPSAtMTsKKyAgICBib3JkZXItPm1vdmFibGUgPSBGQUxTRTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICAgICAgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgIG1vdmFibGUgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBGVF9BU1NFUlQoIGJvcmRlci0+c3RhcnQgPj0gMCApOworCisgICAgaWYgKCBib3JkZXItPm1vdmFibGUgKQorICAgIHsKKyAgICAgIC8qIG1vdmUgbGFzdCBwb2ludCAqLworICAgICAgYm9yZGVyLT5wb2ludHNbYm9yZGVyLT5udW1fcG9pbnRzIC0gMV0gPSAqdG87CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBkb24ndCBhZGQgemVyby1sZW5ndGggbGluZXRvICovCisgICAgICBpZiAoIGJvcmRlci0+bnVtX3BvaW50cyA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBGVF9JU19TTUFMTCggYm9yZGVyLT5wb2ludHNbYm9yZGVyLT5udW1fcG9pbnRzIC0gMV0ueCAtIHRvLT54ICkgJiYKKyAgICAgICAgICAgRlRfSVNfU01BTEwoIGJvcmRlci0+cG9pbnRzW2JvcmRlci0+bnVtX3BvaW50cyAtIDFdLnkgLSB0by0+eSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAvKiBhZGQgb25lIHBvaW50ICovCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfZ3JvdyggYm9yZGVyLCAxICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciogIHZlYyA9IGJvcmRlci0+cG9pbnRzICsgYm9yZGVyLT5udW1fcG9pbnRzOworICAgICAgICBGVF9CeXRlKiAgICB0YWcgPSBib3JkZXItPnRhZ3MgICArIGJvcmRlci0+bnVtX3BvaW50czsKKworCisgICAgICAgIHZlY1swXSA9ICp0bzsKKyAgICAgICAgdGFnWzBdID0gRlRfU1RST0tFX1RBR19PTjsKKworICAgICAgICBib3JkZXItPm51bV9wb2ludHMgKz0gMTsKKyAgICAgIH0KKyAgICB9CisgICAgYm9yZGVyLT5tb3ZhYmxlID0gbW92YWJsZTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zdHJva2VfYm9yZGVyX2NvbmljdG8oIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICAgICAgY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgICAgIHRvICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgRlRfQVNTRVJUKCBib3JkZXItPnN0YXJ0ID49IDAgKTsKKworICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9ncm93KCBib3JkZXIsIDIgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgdmVjID0gYm9yZGVyLT5wb2ludHMgKyBib3JkZXItPm51bV9wb2ludHM7CisgICAgICBGVF9CeXRlKiAgICB0YWcgPSBib3JkZXItPnRhZ3MgICArIGJvcmRlci0+bnVtX3BvaW50czsKKworCisgICAgICB2ZWNbMF0gPSAqY29udHJvbDsKKyAgICAgIHZlY1sxXSA9ICp0bzsKKworICAgICAgdGFnWzBdID0gMDsKKyAgICAgIHRhZ1sxXSA9IEZUX1NUUk9LRV9UQUdfT047CisKKyAgICAgIGJvcmRlci0+bnVtX3BvaW50cyArPSAyOworICAgIH0KKworICAgIGJvcmRlci0+bW92YWJsZSA9IEZBTFNFOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc3Ryb2tlX2JvcmRlcl9jdWJpY3RvKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgICAgIGNvbnRyb2wxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICAgICAgY29udHJvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICAgICB0byApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIEZUX0FTU0VSVCggYm9yZGVyLT5zdGFydCA+PSAwICk7CisKKyAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfZ3JvdyggYm9yZGVyLCAzICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHZlYyA9IGJvcmRlci0+cG9pbnRzICsgYm9yZGVyLT5udW1fcG9pbnRzOworICAgICAgRlRfQnl0ZSogICAgdGFnID0gYm9yZGVyLT50YWdzICAgKyBib3JkZXItPm51bV9wb2ludHM7CisKKworICAgICAgdmVjWzBdID0gKmNvbnRyb2wxOworICAgICAgdmVjWzFdID0gKmNvbnRyb2wyOworICAgICAgdmVjWzJdID0gKnRvOworCisgICAgICB0YWdbMF0gPSBGVF9TVFJPS0VfVEFHX0NVQklDOworICAgICAgdGFnWzFdID0gRlRfU1RST0tFX1RBR19DVUJJQzsKKyAgICAgIHRhZ1syXSA9IEZUX1NUUk9LRV9UQUdfT047CisKKyAgICAgIGJvcmRlci0+bnVtX3BvaW50cyArPSAzOworICAgIH0KKworICAgIGJvcmRlci0+bW92YWJsZSA9IEZBTFNFOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI2RlZmluZSBGVF9BUkNfQ1VCSUNfQU5HTEUgICggRlRfQU5HTEVfUEkgLyAyICkKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zdHJva2VfYm9yZGVyX2FyY3RvKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICAgICBjZW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICAgICAgcmFkaXVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICAgICAgIGFuZ2xlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICAgICAgIGFuZ2xlX2RpZmYgKQorICB7CisgICAgRlRfQW5nbGUgICB0b3RhbCwgYW5nbGUsIHN0ZXAsIHJvdGF0ZSwgbmV4dCwgdGhldGE7CisgICAgRlRfVmVjdG9yICBhLCBiLCBhMiwgYjI7CisgICAgRlRfRml4ZWQgICBsZW5ndGg7CisgICAgRlRfRXJyb3IgICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgLyogY29tcHV0ZSBzdGFydCBwb2ludCAqLworICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmYSwgcmFkaXVzLCBhbmdsZV9zdGFydCApOworICAgIGEueCArPSBjZW50ZXItPng7CisgICAgYS55ICs9IGNlbnRlci0+eTsKKworICAgIHRvdGFsICA9IGFuZ2xlX2RpZmY7CisgICAgYW5nbGUgID0gYW5nbGVfc3RhcnQ7CisgICAgcm90YXRlID0gKCBhbmdsZV9kaWZmID49IDAgKSA/IEZUX0FOR0xFX1BJMiA6IC1GVF9BTkdMRV9QSTI7CisKKyAgICB3aGlsZSAoIHRvdGFsICE9IDAgKQorICAgIHsKKyAgICAgIHN0ZXAgPSB0b3RhbDsKKyAgICAgIGlmICggc3RlcCA+IEZUX0FSQ19DVUJJQ19BTkdMRSApCisgICAgICAgIHN0ZXAgPSBGVF9BUkNfQ1VCSUNfQU5HTEU7CisKKyAgICAgIGVsc2UgaWYgKCBzdGVwIDwgLUZUX0FSQ19DVUJJQ19BTkdMRSApCisgICAgICAgIHN0ZXAgPSAtRlRfQVJDX0NVQklDX0FOR0xFOworCisgICAgICBuZXh0ICA9IGFuZ2xlICsgc3RlcDsKKyAgICAgIHRoZXRhID0gc3RlcDsKKyAgICAgIGlmICggdGhldGEgPCAwICkKKyAgICAgICAgdGhldGEgPSAtdGhldGE7CisKKyAgICAgIHRoZXRhID4+PSAxOworCisgICAgICAvKiBjb21wdXRlIGVuZCBwb2ludCAqLworICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZiLCByYWRpdXMsIG5leHQgKTsKKyAgICAgIGIueCArPSBjZW50ZXItPng7CisgICAgICBiLnkgKz0gY2VudGVyLT55OworCisgICAgICAvKiBjb21wdXRlIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbCBwb2ludHMgKi8KKyAgICAgIGxlbmd0aCA9IEZUX011bERpdiggcmFkaXVzLCBGVF9TaW4oIHRoZXRhICkgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MTAwMDBMICsgRlRfQ29zKCB0aGV0YSApICkgKiAzICk7CisKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmYTIsIGxlbmd0aCwgYW5nbGUgKyByb3RhdGUgKTsKKyAgICAgIGEyLnggKz0gYS54OworICAgICAgYTIueSArPSBhLnk7CisKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmYjIsIGxlbmd0aCwgbmV4dCAtIHJvdGF0ZSApOworICAgICAgYjIueCArPSBiLng7CisgICAgICBiMi55ICs9IGIueTsKKworICAgICAgLyogYWRkIGN1YmljIGFyYyAqLworICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2N1YmljdG8oIGJvcmRlciwgJmEyLCAmYjIsICZiICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHByb2Nlc3MgdGhlIHJlc3Qgb2YgdGhlIGFyYyA/PyAqLworICAgICAgYSAgICAgID0gYjsKKyAgICAgIHRvdGFsIC09IHN0ZXA7CisgICAgICBhbmdsZSAgPSBuZXh0OworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3N0cm9rZV9ib3JkZXJfbW92ZXRvKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICAgICAgdG8gKQorICB7CisgICAgLyogY2xvc2UgY3VycmVudCBvcGVuIHBhdGggaWYgYW55ID8gKi8KKyAgICBpZiAoIGJvcmRlci0+c3RhcnQgPj0gMCApCisgICAgICBmdF9zdHJva2VfYm9yZGVyX2Nsb3NlKCBib3JkZXIsIEZBTFNFICk7CisKKyAgICBib3JkZXItPnN0YXJ0ID0gKEZUX0ludClib3JkZXItPm51bV9wb2ludHM7CisgICAgYm9yZGVyLT5tb3ZhYmxlID0gRkFMU0U7CisKKyAgICByZXR1cm4gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgdG8sIEZBTFNFICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3N0cm9rZV9ib3JkZXJfaW5pdCggRlRfU3Ryb2tlQm9yZGVyICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgKQorICB7CisgICAgYm9yZGVyLT5tZW1vcnkgPSBtZW1vcnk7CisgICAgYm9yZGVyLT5wb2ludHMgPSBOVUxMOworICAgIGJvcmRlci0+dGFncyAgID0gTlVMTDsKKworICAgIGJvcmRlci0+bnVtX3BvaW50cyA9IDA7CisgICAgYm9yZGVyLT5tYXhfcG9pbnRzID0gMDsKKyAgICBib3JkZXItPnN0YXJ0ICAgICAgPSAtMTsKKyAgICBib3JkZXItPnZhbGlkICAgICAgPSBGQUxTRTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfc3Ryb2tlX2JvcmRlcl9yZXNldCggRlRfU3Ryb2tlQm9yZGVyICBib3JkZXIgKQorICB7CisgICAgYm9yZGVyLT5udW1fcG9pbnRzID0gMDsKKyAgICBib3JkZXItPnN0YXJ0ICAgICAgPSAtMTsKKyAgICBib3JkZXItPnZhbGlkICAgICAgPSBGQUxTRTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfc3Ryb2tlX2JvcmRlcl9kb25lKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGJvcmRlci0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCBib3JkZXItPnBvaW50cyApOworICAgIEZUX0ZSRUUoIGJvcmRlci0+dGFncyApOworCisgICAgYm9yZGVyLT5udW1fcG9pbnRzID0gMDsKKyAgICBib3JkZXItPm1heF9wb2ludHMgPSAwOworICAgIGJvcmRlci0+c3RhcnQgICAgICA9IC0xOworICAgIGJvcmRlci0+dmFsaWQgICAgICA9IEZBTFNFOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc3Ryb2tlX2JvcmRlcl9nZXRfY291bnRzKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgKmFudW1fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAqYW51bV9jb250b3VycyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgICAgICAgID0gRlRfRXJyX09rOworICAgIEZUX1VJbnQgICBudW1fcG9pbnRzICAgPSAwOworICAgIEZUX1VJbnQgICBudW1fY29udG91cnMgPSAwOworCisgICAgRlRfVUludCAgICAgY291bnQgICAgICA9IGJvcmRlci0+bnVtX3BvaW50czsKKyAgICBGVF9WZWN0b3IqICBwb2ludCAgICAgID0gYm9yZGVyLT5wb2ludHM7CisgICAgRlRfQnl0ZSogICAgdGFncyAgICAgICA9IGJvcmRlci0+dGFnczsKKyAgICBGVF9JbnQgICAgICBpbl9jb250b3VyID0gMDsKKworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIG51bV9wb2ludHMrKywgcG9pbnQrKywgdGFncysrICkKKyAgICB7CisgICAgICBpZiAoIHRhZ3NbMF0gJiBGVF9TVFJPS0VfVEFHX0JFR0lOICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBpbl9jb250b3VyICE9IDAgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBpbl9jb250b3VyID0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBpbl9jb250b3VyID09IDAgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGlmICggdGFnc1swXSAmIEZUX1NUUk9LRV9UQUdfRU5EICkKKyAgICAgIHsKKyAgICAgICAgaW5fY29udG91ciA9IDA7CisgICAgICAgIG51bV9jb250b3VycysrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggaW5fY29udG91ciAhPSAwICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGJvcmRlci0+dmFsaWQgPSBUUlVFOworCisgIEV4aXQ6CisgICAgKmFudW1fcG9pbnRzICAgPSBudW1fcG9pbnRzOworICAgICphbnVtX2NvbnRvdXJzID0gbnVtX2NvbnRvdXJzOworICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIG51bV9wb2ludHMgICA9IDA7CisgICAgbnVtX2NvbnRvdXJzID0gMDsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X3N0cm9rZV9ib3JkZXJfZXhwb3J0KCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgb3V0bGluZSApCisgIHsKKyAgICAvKiBjb3B5IHBvaW50IGxvY2F0aW9ucyAqLworICAgIEZUX0FSUkFZX0NPUFkoIG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgIGJvcmRlci0+cG9pbnRzLAorICAgICAgICAgICAgICAgICAgIGJvcmRlci0+bnVtX3BvaW50cyApOworCisgICAgLyogY29weSB0YWdzICovCisgICAgeworICAgICAgRlRfVUludCAgIGNvdW50ID0gYm9yZGVyLT5udW1fcG9pbnRzOworICAgICAgRlRfQnl0ZSogIHJlYWQgID0gYm9yZGVyLT50YWdzOworICAgICAgRlRfQnl0ZSogIHdyaXRlID0gKEZUX0J5dGUqKW91dGxpbmUtPnRhZ3MgKyBvdXRsaW5lLT5uX3BvaW50czsKKworCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcmVhZCsrLCB3cml0ZSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAqcmVhZCAmIEZUX1NUUk9LRV9UQUdfT04gKQorICAgICAgICAgICp3cml0ZSA9IEZUX0NVUlZFX1RBR19PTjsKKyAgICAgICAgZWxzZSBpZiAoICpyZWFkICYgRlRfU1RST0tFX1RBR19DVUJJQyApCisgICAgICAgICAgKndyaXRlID0gRlRfQ1VSVkVfVEFHX0NVQklDOworICAgICAgICBlbHNlCisgICAgICAgICAgKndyaXRlID0gRlRfQ1VSVkVfVEFHX0NPTklDOworICAgICAgfQorICAgIH0KKworICAgIC8qIGNvcHkgY29udG91cnMgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICAgIGNvdW50ID0gYm9yZGVyLT5udW1fcG9pbnRzOworICAgICAgRlRfQnl0ZSogICB0YWdzICA9IGJvcmRlci0+dGFnczsKKyAgICAgIEZUX1Nob3J0KiAgd3JpdGUgPSBvdXRsaW5lLT5jb250b3VycyArIG91dGxpbmUtPm5fY29udG91cnM7CisgICAgICBGVF9TaG9ydCAgIGlkeCAgID0gKEZUX1Nob3J0KW91dGxpbmUtPm5fcG9pbnRzOworCisKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCB0YWdzKyssIGlkeCsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAqdGFncyAmIEZUX1NUUk9LRV9UQUdfRU5EICkKKyAgICAgICAgeworICAgICAgICAgICp3cml0ZSsrID0gaWR4OworICAgICAgICAgIG91dGxpbmUtPm5fY29udG91cnMrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIG91dGxpbmUtPm5fcG9pbnRzICs9IChzaG9ydClib3JkZXItPm51bV9wb2ludHM7CisKKyAgICBGVF9BU1NFUlQoIEZUX091dGxpbmVfQ2hlY2soIG91dGxpbmUgKSA9PSAwICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUk9LRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZUX1NJREVfVE9fUk9UQVRFKCBzICkgICAoIEZUX0FOR0xFX1BJMiAtIChzKSAqIEZUX0FOR0xFX1BJICkKKworICB0eXBlZGVmIHN0cnVjdCAgRlRfU3Ryb2tlclJlY18KKyAgeworICAgIEZUX0FuZ2xlICAgICAgICAgICAgIGFuZ2xlX2luOyAgICAgICAgICAgICAvKiBkaXJlY3Rpb24gaW50byBjdXJyIGpvaW4gKi8KKyAgICBGVF9BbmdsZSAgICAgICAgICAgICBhbmdsZV9vdXQ7ICAgICAgICAgICAgLyogZGlyZWN0aW9uIG91dCBvZiBqb2luICAqLworICAgIEZUX1ZlY3RvciAgICAgICAgICAgIGNlbnRlcjsgICAgICAgICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uICovCisgICAgRlRfRml4ZWQgICAgICAgICAgICAgbGluZV9sZW5ndGg7ICAgICAgICAgIC8qIGxlbmd0aCBvZiBsYXN0IGxpbmV0byAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICAgIGZpcnN0X3BvaW50OyAgICAgICAgICAvKiBpcyB0aGlzIHRoZSBzdGFydD8gKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgICBzdWJwYXRoX29wZW47ICAgICAgICAgLyogaXMgdGhlIHN1YnBhdGggb3Blbj8gKi8KKyAgICBGVF9BbmdsZSAgICAgICAgICAgICBzdWJwYXRoX2FuZ2xlOyAgICAgICAgLyogc3VicGF0aCBzdGFydCBkaXJlY3Rpb24gKi8KKyAgICBGVF9WZWN0b3IgICAgICAgICAgICBzdWJwYXRoX3N0YXJ0OyAgICAgICAgLyogc3VicGF0aCBzdGFydCBwb3NpdGlvbiAqLworICAgIEZUX0ZpeGVkICAgICAgICAgICAgIHN1YnBhdGhfbGluZV9sZW5ndGg7ICAvKiBzdWJwYXRoIHN0YXJ0IGxpbmV0byBsZW4gKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgICBoYW5kbGVfd2lkZV9zdHJva2VzOyAgLyogdXNlIHdpZGUgc3Ryb2tlcyBsb2dpYz8gKi8KKworICAgIEZUX1N0cm9rZXJfTGluZUNhcCAgIGxpbmVfY2FwOworICAgIEZUX1N0cm9rZXJfTGluZUpvaW4gIGxpbmVfam9pbjsKKyAgICBGVF9TdHJva2VyX0xpbmVKb2luICBsaW5lX2pvaW5fc2F2ZWQ7CisgICAgRlRfRml4ZWQgICAgICAgICAgICAgbWl0ZXJfbGltaXQ7CisgICAgRlRfRml4ZWQgICAgICAgICAgICAgcmFkaXVzOworCisgICAgRlRfU3Ryb2tlQm9yZGVyUmVjICAgYm9yZGVyc1syXTsKKyAgICBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5OworCisgIH0gRlRfU3Ryb2tlclJlYzsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9OZXcoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgRlRfU3Ryb2tlciAgKmFzdHJva2VyICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yOyAgICAgICAgICAgLyogYXNzaWduZWQgaW4gRlRfTkVXICovCisgICAgRlRfTWVtb3J5ICAgbWVtb3J5OworICAgIEZUX1N0cm9rZXIgIHN0cm9rZXIgPSBOVUxMOworCisKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9MaWJyYXJ5X0hhbmRsZSApOworCisgICAgaWYgKCAhYXN0cm9rZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBpZiAoICFGVF9ORVcoIHN0cm9rZXIgKSApCisgICAgeworICAgICAgc3Ryb2tlci0+bGlicmFyeSA9IGxpYnJhcnk7CisKKyAgICAgIGZ0X3N0cm9rZV9ib3JkZXJfaW5pdCggJnN0cm9rZXItPmJvcmRlcnNbMF0sIG1lbW9yeSApOworICAgICAgZnRfc3Ryb2tlX2JvcmRlcl9pbml0KCAmc3Ryb2tlci0+Ym9yZGVyc1sxXSwgbWVtb3J5ICk7CisgICAgfQorCisgICAgKmFzdHJva2VyID0gc3Ryb2tlcjsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1N0cm9rZXJfU2V0KCBGVF9TdHJva2VyICAgICAgICAgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICAgICAgICAgcmFkaXVzLAorICAgICAgICAgICAgICAgICAgRlRfU3Ryb2tlcl9MaW5lQ2FwICAgbGluZV9jYXAsCisgICAgICAgICAgICAgICAgICBGVF9TdHJva2VyX0xpbmVKb2luICBsaW5lX2pvaW4sCisgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgICAgICAgICBtaXRlcl9saW1pdCApCisgIHsKKyAgICBpZiAoICFzdHJva2VyICkKKyAgICAgIHJldHVybjsKKworICAgIHN0cm9rZXItPnJhZGl1cyAgICAgID0gcmFkaXVzOworICAgIHN0cm9rZXItPmxpbmVfY2FwICAgID0gbGluZV9jYXA7CisgICAgc3Ryb2tlci0+bGluZV9qb2luICAgPSBsaW5lX2pvaW47CisgICAgc3Ryb2tlci0+bWl0ZXJfbGltaXQgPSBtaXRlcl9saW1pdDsKKworICAgIC8qIGVuc3VyZSBtaXRlciBsaW1pdCBoYXMgc2Vuc2libGUgdmFsdWUgKi8KKyAgICBpZiAoIHN0cm9rZXItPm1pdGVyX2xpbWl0IDwgMHgxMDAwMEwgKQorICAgICAgc3Ryb2tlci0+bWl0ZXJfbGltaXQgPSAweDEwMDAwTDsKKworICAgIC8qIHNhdmUgbGluZSBqb2luIHN0eWxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGxpbmUgam9pbiBzdHlsZSBjYW4gYmUgdGVtcG9yYXJpbHkgY2hhbmdlZCB3aGVuIHN0cm9raW5nIGN1cnZlcyAqLworICAgIHN0cm9rZXItPmxpbmVfam9pbl9zYXZlZCA9IGxpbmVfam9pbjsKKworICAgIEZUX1N0cm9rZXJfUmV3aW5kKCBzdHJva2VyICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9TdHJva2VyX1Jld2luZCggRlRfU3Ryb2tlciAgc3Ryb2tlciApCisgIHsKKyAgICBpZiAoIHN0cm9rZXIgKQorICAgIHsKKyAgICAgIGZ0X3N0cm9rZV9ib3JkZXJfcmVzZXQoICZzdHJva2VyLT5ib3JkZXJzWzBdICk7CisgICAgICBmdF9zdHJva2VfYm9yZGVyX3Jlc2V0KCAmc3Ryb2tlci0+Ym9yZGVyc1sxXSApOworICAgIH0KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1N0cm9rZXJfRG9uZSggRlRfU3Ryb2tlciAgc3Ryb2tlciApCisgIHsKKyAgICBpZiAoIHN0cm9rZXIgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3Ryb2tlci0+bGlicmFyeS0+bWVtb3J5OworCisKKyAgICAgIGZ0X3N0cm9rZV9ib3JkZXJfZG9uZSggJnN0cm9rZXItPmJvcmRlcnNbMF0gKTsKKyAgICAgIGZ0X3N0cm9rZV9ib3JkZXJfZG9uZSggJnN0cm9rZXItPmJvcmRlcnNbMV0gKTsKKworICAgICAgc3Ryb2tlci0+bGlicmFyeSA9IE5VTEw7CisgICAgICBGVF9GUkVFKCBzdHJva2VyICk7CisgICAgfQorICB9CisKKworICAvKiBjcmVhdGUgYSBjaXJjdWxhciBhcmMgYXQgYSBjb3JuZXIgb3IgY2FwICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zdHJva2VyX2FyY3RvKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBzaWRlICkKKyAgeworICAgIEZUX0FuZ2xlICAgICAgICAgdG90YWwsIHJvdGF0ZTsKKyAgICBGVF9GaXhlZCAgICAgICAgIHJhZGl1cyA9IHN0cm9rZXItPnJhZGl1czsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciA9IHN0cm9rZXItPmJvcmRlcnMgKyBzaWRlOworCisKKyAgICByb3RhdGUgPSBGVF9TSURFX1RPX1JPVEFURSggc2lkZSApOworCisgICAgdG90YWwgPSBGVF9BbmdsZV9EaWZmKCBzdHJva2VyLT5hbmdsZV9pbiwgc3Ryb2tlci0+YW5nbGVfb3V0ICk7CisgICAgaWYgKCB0b3RhbCA9PSBGVF9BTkdMRV9QSSApCisgICAgICB0b3RhbCA9IC1yb3RhdGUgKiAyOworCisgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2FyY3RvKCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Ryb2tlci0+Y2VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlci0+YW5nbGVfaW4gKyByb3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCApOworICAgIGJvcmRlci0+bW92YWJsZSA9IEZBTFNFOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogYWRkIGEgY2FwIGF0IHRoZSBlbmQgb2YgYW4gb3BlbmVkIHBhdGggKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3N0cm9rZXJfY2FwKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAgYW5nbGUsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBzaWRlICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBzdHJva2VyLT5saW5lX2NhcCA9PSBGVF9TVFJPS0VSX0xJTkVDQVBfUk9VTkQgKQorICAgIHsKKyAgICAgIC8qIGFkZCBhIHJvdW5kIGNhcCAqLworICAgICAgc3Ryb2tlci0+YW5nbGVfaW4gID0gYW5nbGU7CisgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBhbmdsZSArIEZUX0FOR0xFX1BJOworCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfYXJjdG8oIHN0cm9rZXIsIHNpZGUgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHN0cm9rZXItPmxpbmVfY2FwID09IEZUX1NUUk9LRVJfTElORUNBUF9TUVVBUkUgKQorICAgIHsKKyAgICAgIC8qIGFkZCBhIHNxdWFyZSBjYXAgKi8KKyAgICAgIEZUX1ZlY3RvciAgICAgICAgZGVsdGEsIGRlbHRhMjsKKyAgICAgIEZUX0FuZ2xlICAgICAgICAgcm90YXRlID0gRlRfU0lERV9UT19ST1RBVEUoIHNpZGUgKTsKKyAgICAgIEZUX0ZpeGVkICAgICAgICAgcmFkaXVzID0gc3Ryb2tlci0+cmFkaXVzOworICAgICAgRlRfU3Ryb2tlQm9yZGVyICBib3JkZXIgPSBzdHJva2VyLT5ib3JkZXJzICsgc2lkZTsKKworCisgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhMiwgcmFkaXVzLCBhbmdsZSArIHJvdGF0ZSApOworICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgIHJhZGl1cywgYW5nbGUgKTsKKworICAgICAgZGVsdGEueCArPSBzdHJva2VyLT5jZW50ZXIueCArIGRlbHRhMi54OworICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueSArIGRlbHRhMi55OworCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBib3JkZXIsICZkZWx0YSwgRkFMU0UgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEyLCByYWRpdXMsIGFuZ2xlIC0gcm90YXRlICk7CisgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCAgcmFkaXVzLCBhbmdsZSApOworCisgICAgICBkZWx0YS54ICs9IGRlbHRhMi54ICsgc3Ryb2tlci0+Y2VudGVyLng7CisgICAgICBkZWx0YS55ICs9IGRlbHRhMi55ICsgc3Ryb2tlci0+Y2VudGVyLnk7CisKKyAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOworICAgIH0KKyAgICBlbHNlIGlmICggc3Ryb2tlci0+bGluZV9jYXAgPT0gRlRfU1RST0tFUl9MSU5FQ0FQX0JVVFQgKQorICAgIHsKKyAgICAgIC8qIGFkZCBhIGJ1dHQgZW5kaW5nICovCisgICAgICBGVF9WZWN0b3IgICAgICAgIGRlbHRhOworICAgICAgRlRfQW5nbGUgICAgICAgICByb3RhdGUgPSBGVF9TSURFX1RPX1JPVEFURSggc2lkZSApOworICAgICAgRlRfRml4ZWQgICAgICAgICByYWRpdXMgPSBzdHJva2VyLT5yYWRpdXM7CisgICAgICBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciA9IHN0cm9rZXItPmJvcmRlcnMgKyBzaWRlOworCisKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIHJhZGl1cywgYW5nbGUgKyByb3RhdGUgKTsKKworICAgICAgZGVsdGEueCArPSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICAgIGRlbHRhLnkgKz0gc3Ryb2tlci0+Y2VudGVyLnk7CisKKyAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgcmFkaXVzLCBhbmdsZSAtIHJvdGF0ZSApOworCisgICAgICBkZWx0YS54ICs9IHN0cm9rZXItPmNlbnRlci54OworICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueTsKKworICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBwcm9jZXNzIGFuIGluc2lkZSBjb3JuZXIsIGkuZS4gY29tcHV0ZSBpbnRlcnNlY3Rpb24gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3N0cm9rZXJfaW5zaWRlKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgIGxpbmVfbGVuZ3RoICkKKyAgeworICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyID0gc3Ryb2tlci0+Ym9yZGVycyArIHNpZGU7CisgICAgRlRfQW5nbGUgICAgICAgICBwaGksIHRoZXRhLCByb3RhdGU7CisgICAgRlRfRml4ZWQgICAgICAgICBsZW5ndGgsIHRoY29zOworICAgIEZUX1ZlY3RvciAgICAgICAgZGVsdGE7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9Cb29sICAgICAgICAgIGludGVyc2VjdDsgICAgICAgICAgLyogdXNlIGludGVyc2VjdGlvbiBvZiBsaW5lcz8gKi8KKworCisgICAgcm90YXRlID0gRlRfU0lERV9UT19ST1RBVEUoIHNpZGUgKTsKKworICAgIHRoZXRhID0gRlRfQW5nbGVfRGlmZiggc3Ryb2tlci0+YW5nbGVfaW4sIHN0cm9rZXItPmFuZ2xlX291dCApIC8gMjsKKworICAgIC8qIE9ubHkgaW50ZXJzZWN0IGJvcmRlcnMgaWYgYmV0d2VlbiB0d28gbGluZXRvJ3MgYW5kIGJvdGggKi8KKyAgICAvKiBsaW5lcyBhcmUgbG9uZyBlbm91Z2ggKGxpbmVfbGVuZ3RoIGlzIHplcm8gZm9yIGN1cnZlcykuICovCisgICAgLyogQWxzbyBhdm9pZCBVLXR1cm5zIG9mIG5lYXJseSAxODAgZGVncmVlLiAgICAgICAgICAgICAgICAqLworICAgIGlmICggIWJvcmRlci0+bW92YWJsZSB8fCBsaW5lX2xlbmd0aCA9PSAwICB8fAorICAgICAgICAgdGhldGEgPiAweDU5QzAwMCB8fCB0aGV0YSA8IC0weDU5QzAwMCApCisgICAgICBpbnRlcnNlY3QgPSBGQUxTRTsKKyAgICBlbHNlCisgICAgeworICAgICAgLyogY29tcHV0ZSBtaW5pbXVtIHJlcXVpcmVkIGxlbmd0aCBvZiBsaW5lcyAqLworICAgICAgRlRfRml4ZWQgIG1pbl9sZW5ndGggPSBmdF9wb3NfYWJzKCBGVF9NdWxGaXgoIHN0cm9rZXItPnJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9UYW4oIHRoZXRhICkgKSApOworCisKKyAgICAgIGludGVyc2VjdCA9IEZUX0JPT0woIG1pbl9sZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZXItPmxpbmVfbGVuZ3RoID49IG1pbl9sZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuZ3RoICAgICAgICAgID49IG1pbl9sZW5ndGggKTsKKyAgICB9CisKKyAgICBpZiAoICFpbnRlcnNlY3QgKQorICAgIHsKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIHN0cm9rZXItPnJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgKyByb3RhdGUgKTsKKyAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7CisgICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55OworCisgICAgICBib3JkZXItPm1vdmFibGUgPSBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGNvbXB1dGUgbWVkaWFuIGFuZ2xlICovCisgICAgICBwaGkgPSBzdHJva2VyLT5hbmdsZV9pbiArIHRoZXRhOworCisgICAgICB0aGNvcyA9IEZUX0NvcyggdGhldGEgKTsKKworICAgICAgbGVuZ3RoID0gRlRfRGl2Rml4KCBzdHJva2VyLT5yYWRpdXMsIHRoY29zICk7CisKKyAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIGxlbmd0aCwgcGhpICsgcm90YXRlICk7CisgICAgICBkZWx0YS54ICs9IHN0cm9rZXItPmNlbnRlci54OworICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueTsKKyAgICB9CisKKyAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBib3JkZXIsICZkZWx0YSwgRkFMU0UgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogcHJvY2VzcyBhbiBvdXRzaWRlIGNvcm5lciwgaS5lLiBjb21wdXRlIGJldmVsL21pdGVyL3JvdW5kICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zdHJva2VyX291dHNpZGUoIEZUX1N0cm9rZXIgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICBsaW5lX2xlbmd0aCApCisgIHsKKyAgICBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciA9IHN0cm9rZXItPmJvcmRlcnMgKyBzaWRlOworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisgICAgRlRfQW5nbGUgICAgICAgICByb3RhdGU7CisKKworICAgIGlmICggc3Ryb2tlci0+bGluZV9qb2luID09IEZUX1NUUk9LRVJfTElORUpPSU5fUk9VTkQgKQorICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX2FyY3RvKCBzdHJva2VyLCBzaWRlICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIHRoaXMgaXMgYSBtaXRlcmVkIChwb2ludGVkKSBvciBiZXZlbGVkICh0cnVuY2F0ZWQpIGNvcm5lciAqLworICAgICAgRlRfRml4ZWQgIHNpZ21hID0gMCwgcmFkaXVzID0gc3Ryb2tlci0+cmFkaXVzOworICAgICAgRlRfQW5nbGUgIHRoZXRhID0gMCwgcGhpID0gMDsKKyAgICAgIEZUX0ZpeGVkICB0aGNvcyA9IDA7CisgICAgICBGVF9Cb29sICAgYmV2ZWwsIGZpeGVkX2JldmVsOworCisKKyAgICAgIHJvdGF0ZSA9IEZUX1NJREVfVE9fUk9UQVRFKCBzaWRlICk7CisKKyAgICAgIGJldmVsID0KKyAgICAgICAgRlRfQk9PTCggc3Ryb2tlci0+bGluZV9qb2luID09IEZUX1NUUk9LRVJfTElORUpPSU5fQkVWRUwgKTsKKworICAgICAgZml4ZWRfYmV2ZWwgPQorICAgICAgICBGVF9CT09MKCBzdHJva2VyLT5saW5lX2pvaW4gIT0gRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUl9WQVJJQUJMRSApOworCisgICAgICBpZiAoICFiZXZlbCApCisgICAgICB7CisgICAgICAgIHRoZXRhID0gRlRfQW5nbGVfRGlmZiggc3Ryb2tlci0+YW5nbGVfaW4sIHN0cm9rZXItPmFuZ2xlX291dCApOworCisgICAgICAgIGlmICggdGhldGEgPT0gRlRfQU5HTEVfUEkgKQorICAgICAgICB7CisgICAgICAgICAgdGhldGEgPSByb3RhdGU7CisgICAgICAgICAgcGhpICAgPSBzdHJva2VyLT5hbmdsZV9pbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB0aGV0YSAvPSAyOworICAgICAgICAgIHBoaSAgICA9IHN0cm9rZXItPmFuZ2xlX2luICsgdGhldGEgKyByb3RhdGU7CisgICAgICAgIH0KKworICAgICAgICB0aGNvcyA9IEZUX0NvcyggdGhldGEgKTsKKyAgICAgICAgc2lnbWEgPSBGVF9NdWxGaXgoIHN0cm9rZXItPm1pdGVyX2xpbWl0LCB0aGNvcyApOworCisgICAgICAgIC8qIGlzIG1pdGVyIGxpbWl0IGV4Y2VlZGVkPyAqLworICAgICAgICBpZiAoIHNpZ21hIDwgMHgxMDAwMEwgKQorICAgICAgICB7CisgICAgICAgICAgLyogZG9uJ3QgY3JlYXRlIHZhcmlhYmxlIGJldmVscyBmb3IgdmVyeSBzbWFsbCBkZXZpYXRpb25zOyAqLworICAgICAgICAgIC8qIEZUX1Npbih4KSA9IDAgZm9yIHggPD0gNTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGZpeGVkX2JldmVsIHx8IGZ0X3Bvc19hYnMoIHRoZXRhICkgPiA1NyApCisgICAgICAgICAgICBiZXZlbCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBiZXZlbCApICAvKiB0aGlzIGlzIGEgYmV2ZWwgKGJyb2tlbiBhbmdsZSkgKi8KKyAgICAgIHsKKyAgICAgICAgaWYgKCBmaXhlZF9iZXZlbCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiB0aGUgb3V0ZXIgY29ybmVycyBhcmUgc2ltcGx5IGpvaW5lZCB0b2dldGhlciAqLworICAgICAgICAgIEZUX1ZlY3RvciAgZGVsdGE7CisKKworICAgICAgICAgIC8qIGFkZCBiZXZlbCAqLworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlci0+YW5nbGVfb3V0ICsgcm90YXRlICk7CisgICAgICAgICAgZGVsdGEueCArPSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICAgICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55OworCisgICAgICAgICAgYm9yZGVyLT5tb3ZhYmxlID0gRkFMU0U7CisgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiB2YXJpYWJsZSBiZXZlbCAqLworICAgICAgICB7CisgICAgICAgICAgLyogdGhlIG1pdGVyIGlzIHRydW5jYXRlZCAqLworICAgICAgICAgIEZUX1ZlY3RvciAgbWlkZGxlLCBkZWx0YTsKKyAgICAgICAgICBGVF9GaXhlZCAgIGxlbmd0aDsKKworCisgICAgICAgICAgLyogY29tcHV0ZSBtaWRkbGUgcG9pbnQgKi8KKyAgICAgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJm1pZGRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCByYWRpdXMsIHN0cm9rZXItPm1pdGVyX2xpbWl0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoaSApOworICAgICAgICAgIG1pZGRsZS54ICs9IHN0cm9rZXItPmNlbnRlci54OworICAgICAgICAgIG1pZGRsZS55ICs9IHN0cm9rZXItPmNlbnRlci55OworCisgICAgICAgICAgLyogY29tcHV0ZSBmaXJzdCBhbmdsZSBwb2ludCAqLworICAgICAgICAgIGxlbmd0aCA9IEZUX011bERpdiggcmFkaXVzLCAweDEwMDAwTCAtIHNpZ21hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRfcG9zX2FicyggRlRfU2luKCB0aGV0YSApICkgKTsKKworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIGxlbmd0aCwgcGhpICsgcm90YXRlICk7CisgICAgICAgICAgZGVsdGEueCArPSBtaWRkbGUueDsKKyAgICAgICAgICBkZWx0YS55ICs9IG1pZGRsZS55OworCisgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiBjb21wdXRlIHNlY29uZCBhbmdsZSBwb2ludCAqLworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIGxlbmd0aCwgcGhpIC0gcm90YXRlICk7CisgICAgICAgICAgZGVsdGEueCArPSBtaWRkbGUueDsKKyAgICAgICAgICBkZWx0YS55ICs9IG1pZGRsZS55OworCisgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiBmaW5hbGx5LCBhZGQgYW4gZW5kIHBvaW50OyBvbmx5IG5lZWRlZCBpZiBub3QgbGluZXRvICovCisgICAgICAgICAgLyogKGxpbmVfbGVuZ3RoIGlzIHplcm8gZm9yIGN1cnZlcykgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggbGluZV9sZW5ndGggPT0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlci0+YW5nbGVfb3V0ICsgcm90YXRlICk7CisKKyAgICAgICAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7CisgICAgICAgICAgICBkZWx0YS55ICs9IHN0cm9rZXItPmNlbnRlci55OworCisgICAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBib3JkZXIsICZkZWx0YSwgRkFMU0UgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgLyogdGhpcyBpcyBhIG1pdGVyIChpbnRlcnNlY3Rpb24pICovCisgICAgICB7CisgICAgICAgIEZUX0ZpeGVkICAgbGVuZ3RoOworICAgICAgICBGVF9WZWN0b3IgIGRlbHRhOworCisKKyAgICAgICAgbGVuZ3RoID0gRlRfRGl2Rml4KCBzdHJva2VyLT5yYWRpdXMsIHRoY29zICk7CisKKyAgICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgbGVuZ3RoLCBwaGkgKTsKKyAgICAgICAgZGVsdGEueCArPSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueTsKKworICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBib3JkZXIsICZkZWx0YSwgRkFMU0UgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIC8qIG5vdyBhZGQgYW4gZW5kIHBvaW50OyBvbmx5IG5lZWRlZCBpZiBub3QgbGluZXRvICovCisgICAgICAgIC8qIChsaW5lX2xlbmd0aCBpcyB6ZXJvIGZvciBjdXJ2ZXMpICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbGluZV9sZW5ndGggPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VyLT5yYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZXItPmFuZ2xlX291dCArIHJvdGF0ZSApOworICAgICAgICAgIGRlbHRhLnggKz0gc3Ryb2tlci0+Y2VudGVyLng7CisgICAgICAgICAgZGVsdGEueSArPSBzdHJva2VyLT5jZW50ZXIueTsKKworICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc3Ryb2tlcl9wcm9jZXNzX2Nvcm5lciggRlRfU3Ryb2tlciAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgbGluZV9sZW5ndGggKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX0FuZ2xlICB0dXJuOworICAgIEZUX0ludCAgICBpbnNpZGVfc2lkZTsKKworCisgICAgdHVybiA9IEZUX0FuZ2xlX0RpZmYoIHN0cm9rZXItPmFuZ2xlX2luLCBzdHJva2VyLT5hbmdsZV9vdXQgKTsKKworICAgIC8qIG5vIHNwZWNpZmljIGNvcm5lciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIGlmIHRoZSB0dXJuIGlzIDAgKi8KKyAgICBpZiAoIHR1cm4gPT0gMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiB3aGVuIHdlIHR1cm4gdG8gdGhlIHJpZ2h0LCB0aGUgaW5zaWRlIHNpZGUgaXMgMCAqLworICAgIC8qIG90aGVyd2lzZSwgdGhlIGluc2lkZSBzaWRlIGlzIDEgKi8KKyAgICBpbnNpZGVfc2lkZSA9ICggdHVybiA8IDAgKTsKKworICAgIC8qIHByb2Nlc3MgdGhlIGluc2lkZSBzaWRlICovCisgICAgZXJyb3IgPSBmdF9zdHJva2VyX2luc2lkZSggc3Ryb2tlciwgaW5zaWRlX3NpZGUsIGxpbmVfbGVuZ3RoICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBwcm9jZXNzIHRoZSBvdXRzaWRlIHNpZGUgKi8KKyAgICBlcnJvciA9IGZ0X3N0cm9rZXJfb3V0c2lkZSggc3Ryb2tlciwgIWluc2lkZV9zaWRlLCBsaW5lX2xlbmd0aCApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBhZGQgdHdvIHBvaW50cyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgYm9yZGVycyBjb3JyZXNwb25kaW5nIHRvIHRoZSAqLworICAvKiBzdGFydCBvZiB0aGUgc3VicGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc3Ryb2tlcl9zdWJwYXRoX3N0YXJ0KCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIHN0YXJ0X2FuZ2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgIGxpbmVfbGVuZ3RoICkKKyAgeworICAgIEZUX1ZlY3RvciAgICAgICAgZGVsdGE7CisgICAgRlRfVmVjdG9yICAgICAgICBwb2ludDsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyOworCisKKyAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCBzdHJva2VyLT5yYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2FuZ2xlICsgRlRfQU5HTEVfUEkyICk7CisKKyAgICBwb2ludC54ID0gc3Ryb2tlci0+Y2VudGVyLnggKyBkZWx0YS54OworICAgIHBvaW50LnkgPSBzdHJva2VyLT5jZW50ZXIueSArIGRlbHRhLnk7CisKKyAgICBib3JkZXIgPSBzdHJva2VyLT5ib3JkZXJzOworICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9tb3ZldG8oIGJvcmRlciwgJnBvaW50ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBwb2ludC54ID0gc3Ryb2tlci0+Y2VudGVyLnggLSBkZWx0YS54OworICAgIHBvaW50LnkgPSBzdHJva2VyLT5jZW50ZXIueSAtIGRlbHRhLnk7CisKKyAgICBib3JkZXIrKzsKKyAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbW92ZXRvKCBib3JkZXIsICZwb2ludCApOworCisgICAgLyogc2F2ZSBhbmdsZSwgcG9zaXRpb24sIGFuZCBsaW5lIGxlbmd0aCBmb3IgbGFzdCBqb2luICovCisgICAgLyogKGxpbmVfbGVuZ3RoIGlzIHplcm8gZm9yIGN1cnZlcykgICAgICAgICAgICAgICAgICAgICovCisgICAgc3Ryb2tlci0+c3VicGF0aF9hbmdsZSAgICAgICA9IHN0YXJ0X2FuZ2xlOworICAgIHN0cm9rZXItPmZpcnN0X3BvaW50ICAgICAgICAgPSBGQUxTRTsKKyAgICBzdHJva2VyLT5zdWJwYXRoX2xpbmVfbGVuZ3RoID0gbGluZV9sZW5ndGg7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9MaW5lVG8oIEZUX1N0cm9rZXIgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0byApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyOworICAgIEZUX1ZlY3RvciAgICAgICAgZGVsdGE7CisgICAgRlRfQW5nbGUgICAgICAgICBhbmdsZTsKKyAgICBGVF9JbnQgICAgICAgICAgIHNpZGU7CisgICAgRlRfRml4ZWQgICAgICAgICBsaW5lX2xlbmd0aDsKKworCisgICAgaWYgKCAhc3Ryb2tlciB8fCAhdG8gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBkZWx0YS54ID0gdG8tPnggLSBzdHJva2VyLT5jZW50ZXIueDsKKyAgICBkZWx0YS55ID0gdG8tPnkgLSBzdHJva2VyLT5jZW50ZXIueTsKKworICAgIC8qIGEgemVyby1sZW5ndGggbGluZXRvIGlzIGEgbm8tb3A7IGF2b2lkIGNyZWF0aW5nIGEgc3B1cmlvdXMgY29ybmVyICovCisgICAgaWYgKCBkZWx0YS54ID09IDAgJiYgZGVsdGEueSA9PSAwICkKKyAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBjb21wdXRlIGxlbmd0aCBvZiBsaW5lICovCisgICAgbGluZV9sZW5ndGggPSBGVF9WZWN0b3JfTGVuZ3RoKCAmZGVsdGEgKTsKKworICAgIGFuZ2xlID0gRlRfQXRhbjIoIGRlbHRhLngsIGRlbHRhLnkgKTsKKyAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmRlbHRhLCBzdHJva2VyLT5yYWRpdXMsIGFuZ2xlICsgRlRfQU5HTEVfUEkyICk7CisKKyAgICAvKiBwcm9jZXNzIGNvcm5lciBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAoIHN0cm9rZXItPmZpcnN0X3BvaW50ICkKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIHRoZSBmaXJzdCBzZWdtZW50IG9mIGEgc3VicGF0aC4gIFdlIG5lZWQgdG8gICAgICovCisgICAgICAvKiBhZGQgYSBwb2ludCB0byBlYWNoIGJvcmRlciBhdCB0aGVpciByZXNwZWN0aXZlIHN0YXJ0aW5nICovCisgICAgICAvKiBwb2ludCBsb2NhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfc3VicGF0aF9zdGFydCggc3Ryb2tlciwgYW5nbGUsIGxpbmVfbGVuZ3RoICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogcHJvY2VzcyB0aGUgY3VycmVudCBjb3JuZXIgKi8KKyAgICAgIHN0cm9rZXItPmFuZ2xlX291dCA9IGFuZ2xlOworICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX3Byb2Nlc3NfY29ybmVyKCBzdHJva2VyLCBsaW5lX2xlbmd0aCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBub3cgYWRkIGEgbGluZSBzZWdtZW50IHRvIGJvdGggdGhlIGBpbnNpZGUnIGFuZCBgb3V0c2lkZScgcGF0aHMgKi8KKyAgICBmb3IgKCBib3JkZXIgPSBzdHJva2VyLT5ib3JkZXJzLCBzaWRlID0gMTsgc2lkZSA+PSAwOyBzaWRlLS0sIGJvcmRlcisrICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IgIHBvaW50OworCisKKyAgICAgIHBvaW50LnggPSB0by0+eCArIGRlbHRhLng7CisgICAgICBwb2ludC55ID0gdG8tPnkgKyBkZWx0YS55OworCisgICAgICAvKiB0aGUgZW5kcyBvZiBsaW5ldG8gYm9yZGVycyBhcmUgbW92YWJsZSAqLworICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmcG9pbnQsIFRSVUUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGRlbHRhLnggPSAtZGVsdGEueDsKKyAgICAgIGRlbHRhLnkgPSAtZGVsdGEueTsKKyAgICB9CisKKyAgICBzdHJva2VyLT5hbmdsZV9pbiAgICA9IGFuZ2xlOworICAgIHN0cm9rZXItPmNlbnRlciAgICAgID0gKnRvOworICAgIHN0cm9rZXItPmxpbmVfbGVuZ3RoID0gbGluZV9sZW5ndGg7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9Db25pY1RvKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8gKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfVmVjdG9yICAgYmV6X3N0YWNrWzM0XTsKKyAgICBGVF9WZWN0b3IqICBhcmM7CisgICAgRlRfVmVjdG9yKiAgbGltaXQgPSBiZXpfc3RhY2sgKyAzMDsKKyAgICBGVF9Cb29sICAgICBmaXJzdF9hcmMgPSBUUlVFOworCisKKyAgICBpZiAoICFzdHJva2VyIHx8ICFjb250cm9sIHx8ICF0byApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGlmIGFsbCBjb250cm9sIHBvaW50cyBhcmUgY29pbmNpZGVudCwgdGhpcyBpcyBhIG5vLW9wOyAqLworICAgIC8qIGF2b2lkIGNyZWF0aW5nIGEgc3B1cmlvdXMgY29ybmVyICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggRlRfSVNfU01BTEwoIHN0cm9rZXItPmNlbnRlci54IC0gY29udHJvbC0+eCApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggc3Ryb2tlci0+Y2VudGVyLnkgLSBjb250cm9sLT55ICkgJiYKKyAgICAgICAgIEZUX0lTX1NNQUxMKCBjb250cm9sLT54ICAgICAgICAtIHRvLT54ICAgICAgKSAmJgorICAgICAgICAgRlRfSVNfU01BTEwoIGNvbnRyb2wtPnkgICAgICAgIC0gdG8tPnkgICAgICApICkKKyAgICB7CisgICAgICAgc3Ryb2tlci0+Y2VudGVyID0gKnRvOworICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBhcmMgICAgPSBiZXpfc3RhY2s7CisgICAgYXJjWzBdID0gKnRvOworICAgIGFyY1sxXSA9ICpjb250cm9sOworICAgIGFyY1syXSA9IHN0cm9rZXItPmNlbnRlcjsKKworICAgIHdoaWxlICggYXJjID49IGJlel9zdGFjayApCisgICAgeworICAgICAgRlRfQW5nbGUgIGFuZ2xlX2luLCBhbmdsZV9vdXQ7CisKKworICAgICAgLyogaW5pdGlhbGl6ZSB3aXRoIGN1cnJlbnQgZGlyZWN0aW9uICovCisgICAgICBhbmdsZV9pbiA9IGFuZ2xlX291dCA9IHN0cm9rZXItPmFuZ2xlX2luOworCisgICAgICBpZiAoIGFyYyA8IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgIWZ0X2NvbmljX2lzX3NtYWxsX2Vub3VnaCggYXJjLCAmYW5nbGVfaW4sICZhbmdsZV9vdXQgKSApCisgICAgICB7CisgICAgICAgIGlmICggc3Ryb2tlci0+Zmlyc3RfcG9pbnQgKQorICAgICAgICAgIHN0cm9rZXItPmFuZ2xlX2luID0gYW5nbGVfaW47CisKKyAgICAgICAgZnRfY29uaWNfc3BsaXQoIGFyYyApOworICAgICAgICBhcmMgKz0gMjsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggZmlyc3RfYXJjICkKKyAgICAgIHsKKyAgICAgICAgZmlyc3RfYXJjID0gRkFMU0U7CisKKyAgICAgICAgLyogcHJvY2VzcyBjb3JuZXIgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgIGlmICggc3Ryb2tlci0+Zmlyc3RfcG9pbnQgKQorICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlcl9zdWJwYXRoX3N0YXJ0KCBzdHJva2VyLCBhbmdsZV9pbiwgMCApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBhbmdsZV9pbjsKKyAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfcHJvY2Vzc19jb3JuZXIoIHN0cm9rZXIsIDAgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIGZ0X3Bvc19hYnMoIEZUX0FuZ2xlX0RpZmYoIHN0cm9rZXItPmFuZ2xlX2luLCBhbmdsZV9pbiApICkgPgorICAgICAgICAgICAgICAgICAgRlRfU01BTExfQ09OSUNfVEhSRVNIT0xEIC8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgeworICAgICAgICAvKiBpZiB0aGUgZGV2aWF0aW9uIGZyb20gb25lIGFyYyB0byB0aGUgbmV4dCBpcyB0b28gZ3JlYXQsICovCisgICAgICAgIC8qIGFkZCBhIHJvdW5kIGNvcm5lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgc3Ryb2tlci0+Y2VudGVyICAgID0gYXJjWzJdOworICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBhbmdsZV9pbjsKKyAgICAgICAgc3Ryb2tlci0+bGluZV9qb2luID0gRlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORDsKKworICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfcHJvY2Vzc19jb3JuZXIoIHN0cm9rZXIsIDAgKTsKKworICAgICAgICAvKiByZWluc3RhdGUgbGluZSBqb2luIHN0eWxlICovCisgICAgICAgIHN0cm9rZXItPmxpbmVfam9pbiA9IHN0cm9rZXItPmxpbmVfam9pbl9zYXZlZDsKKyAgICAgIH0KKworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogdGhlIGFyYydzIGFuZ2xlIGlzIHNtYWxsIGVub3VnaDsgd2UgY2FuIGFkZCBpdCBkaXJlY3RseSB0byBlYWNoICovCisgICAgICAvKiBib3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVmVjdG9yICAgICAgICBjdHJsLCBlbmQ7CisgICAgICAgIEZUX0FuZ2xlICAgICAgICAgdGhldGEsIHBoaSwgcm90YXRlLCBhbHBoYTAgPSAwOworICAgICAgICBGVF9GaXhlZCAgICAgICAgIGxlbmd0aDsKKyAgICAgICAgRlRfU3Ryb2tlQm9yZGVyICBib3JkZXI7CisgICAgICAgIEZUX0ludCAgICAgICAgICAgc2lkZTsKKworCisgICAgICAgIHRoZXRhICA9IEZUX0FuZ2xlX0RpZmYoIGFuZ2xlX2luLCBhbmdsZV9vdXQgKSAvIDI7CisgICAgICAgIHBoaSAgICA9IGFuZ2xlX2luICsgdGhldGE7CisgICAgICAgIGxlbmd0aCA9IEZUX0RpdkZpeCggc3Ryb2tlci0+cmFkaXVzLCBGVF9Db3MoIHRoZXRhICkgKTsKKworICAgICAgICAvKiBjb21wdXRlIGRpcmVjdGlvbiBvZiBvcmlnaW5hbCBhcmMgKi8KKyAgICAgICAgaWYgKCBzdHJva2VyLT5oYW5kbGVfd2lkZV9zdHJva2VzICkKKyAgICAgICAgICBhbHBoYTAgPSBGVF9BdGFuMiggYXJjWzBdLnggLSBhcmNbMl0ueCwgYXJjWzBdLnkgLSBhcmNbMl0ueSApOworCisgICAgICAgIGZvciAoIGJvcmRlciA9IHN0cm9rZXItPmJvcmRlcnMsIHNpZGUgPSAwOworICAgICAgICAgICAgICBzaWRlIDw9IDE7CisgICAgICAgICAgICAgIHNpZGUrKywgYm9yZGVyKysgKQorICAgICAgICB7CisgICAgICAgICAgcm90YXRlID0gRlRfU0lERV9UT19ST1RBVEUoIHNpZGUgKTsKKworICAgICAgICAgIC8qIGNvbXB1dGUgY29udHJvbCBwb2ludCAqLworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmY3RybCwgbGVuZ3RoLCBwaGkgKyByb3RhdGUgKTsKKyAgICAgICAgICBjdHJsLnggKz0gYXJjWzFdLng7CisgICAgICAgICAgY3RybC55ICs9IGFyY1sxXS55OworCisgICAgICAgICAgLyogY29tcHV0ZSBlbmQgcG9pbnQgKi8KKyAgICAgICAgICBGVF9WZWN0b3JfRnJvbV9Qb2xhciggJmVuZCwgc3Ryb2tlci0+cmFkaXVzLCBhbmdsZV9vdXQgKyByb3RhdGUgKTsKKyAgICAgICAgICBlbmQueCArPSBhcmNbMF0ueDsKKyAgICAgICAgICBlbmQueSArPSBhcmNbMF0ueTsKKworICAgICAgICAgIGlmICggc3Ryb2tlci0+aGFuZGxlX3dpZGVfc3Ryb2tlcyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVmVjdG9yICBzdGFydDsKKyAgICAgICAgICAgIEZUX0FuZ2xlICAgYWxwaGExOworCisKKyAgICAgICAgICAgIC8qIGRldGVybWluZSB3aGV0aGVyIHRoZSBib3JkZXIgcmFkaXVzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgKi8KKyAgICAgICAgICAgIC8qIHJhZGl1cyBvZiBjdXJ2YXR1cmUgb2YgdGhlIG9yaWdpbmFsIGFyYyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXJ0ID0gYm9yZGVyLT5wb2ludHNbYm9yZGVyLT5udW1fcG9pbnRzIC0gMV07CisKKyAgICAgICAgICAgIGFscGhhMSA9IEZUX0F0YW4yKCBlbmQueCAtIHN0YXJ0LngsIGVuZC55IC0gc3RhcnQueSApOworCisgICAgICAgICAgICAvKiBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBib3JkZXIgYXJjIG9wcG9zaXRlIHRvICovCisgICAgICAgICAgICAvKiB0aGF0IG9mIHRoZSBvcmlnaW5hbCBhcmM/ICovCisgICAgICAgICAgICBpZiAoIGZ0X3Bvc19hYnMoIEZUX0FuZ2xlX0RpZmYoIGFscGhhMCwgYWxwaGExICkgKSA+CisgICAgICAgICAgICAgICAgICAgRlRfQU5HTEVfUEkgLyAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0FuZ2xlICAgYmV0YSwgZ2FtbWE7CisgICAgICAgICAgICAgIEZUX1ZlY3RvciAgYnZlYywgZGVsdGE7CisgICAgICAgICAgICAgIEZUX0ZpeGVkICAgYmxlbiwgc2luQSwgc2luQiwgYWxlbjsKKworCisgICAgICAgICAgICAgIC8qIHVzZSB0aGUgc2luZSBydWxlIHRvIGZpbmQgdGhlIGludGVyc2VjdGlvbiBwb2ludCAqLworICAgICAgICAgICAgICBiZXRhICA9IEZUX0F0YW4yKCBhcmNbMl0ueCAtIHN0YXJ0LngsIGFyY1syXS55IC0gc3RhcnQueSApOworICAgICAgICAgICAgICBnYW1tYSA9IEZUX0F0YW4yKCBhcmNbMF0ueCAtIGVuZC54LCAgIGFyY1swXS55IC0gZW5kLnkgKTsKKworICAgICAgICAgICAgICBidmVjLnggPSBlbmQueCAtIHN0YXJ0Lng7CisgICAgICAgICAgICAgIGJ2ZWMueSA9IGVuZC55IC0gc3RhcnQueTsKKworICAgICAgICAgICAgICBibGVuID0gRlRfVmVjdG9yX0xlbmd0aCggJmJ2ZWMgKTsKKworICAgICAgICAgICAgICBzaW5BID0gZnRfcG9zX2FicyggRlRfU2luKCBhbHBoYTEgLSBnYW1tYSApICk7CisgICAgICAgICAgICAgIHNpbkIgPSBmdF9wb3NfYWJzKCBGVF9TaW4oIGJldGEgLSBnYW1tYSApICk7CisKKyAgICAgICAgICAgICAgYWxlbiA9IEZUX011bERpdiggYmxlbiwgc2luQSwgc2luQiApOworCisgICAgICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZGVsdGEsIGFsZW4sIGJldGEgKTsKKyAgICAgICAgICAgICAgZGVsdGEueCArPSBzdGFydC54OworICAgICAgICAgICAgICBkZWx0YS55ICs9IHN0YXJ0Lnk7CisKKyAgICAgICAgICAgICAgLyogY2lyY3VtbmF2aWdhdGUgdGhlIG5lZ2F0aXZlIHNlY3RvciBiYWNrd2FyZHMgKi8KKyAgICAgICAgICAgICAgYm9yZGVyLT5tb3ZhYmxlID0gRkFMU0U7CisgICAgICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmRlbHRhLCBGQUxTRSApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgJmVuZCwgRkFMU0UgKTsKKyAgICAgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfY29uaWN0byggYm9yZGVyLCAmY3RybCwgJnN0YXJ0ICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgICAgLyogYW5kIHRoZW4gbW92ZSB0byB0aGUgZW5kcG9pbnQgKi8KKyAgICAgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZW5kLCBGQUxTRSApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgfQorCisgICAgICAgICAgLyogc2ltcGx5IGFkZCBhbiBhcmMgKi8KKyAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfY29uaWN0byggYm9yZGVyLCAmY3RybCwgJmVuZCApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFyYyAtPSAyOworCisgICAgICBzdHJva2VyLT5hbmdsZV9pbiA9IGFuZ2xlX291dDsKKyAgICB9CisKKyAgICBzdHJva2VyLT5jZW50ZXIgPSAqdG87CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9DdWJpY1RvKCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wxLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIHRvICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1ZlY3RvciAgIGJlel9zdGFja1szN107CisgICAgRlRfVmVjdG9yKiAgYXJjOworICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gYmV6X3N0YWNrICsgMzI7CisgICAgRlRfQm9vbCAgICAgZmlyc3RfYXJjID0gVFJVRTsKKworCisgICAgaWYgKCAhc3Ryb2tlciB8fCAhY29udHJvbDEgfHwgIWNvbnRyb2wyIHx8ICF0byApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGlmIGFsbCBjb250cm9sIHBvaW50cyBhcmUgY29pbmNpZGVudCwgdGhpcyBpcyBhIG5vLW9wOyAqLworICAgIC8qIGF2b2lkIGNyZWF0aW5nIGEgc3B1cmlvdXMgY29ybmVyICovCisgICAgaWYgKCBGVF9JU19TTUFMTCggc3Ryb2tlci0+Y2VudGVyLnggLSBjb250cm9sMS0+eCApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggc3Ryb2tlci0+Y2VudGVyLnkgLSBjb250cm9sMS0+eSApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggY29udHJvbDEtPnggICAgICAgLSBjb250cm9sMi0+eCApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggY29udHJvbDEtPnkgICAgICAgLSBjb250cm9sMi0+eSApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggY29udHJvbDItPnggICAgICAgLSB0by0+eCAgICAgICApICYmCisgICAgICAgICBGVF9JU19TTUFMTCggY29udHJvbDItPnkgICAgICAgLSB0by0+eSAgICAgICApICkKKyAgICB7CisgICAgICAgc3Ryb2tlci0+Y2VudGVyID0gKnRvOworICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBhcmMgICAgPSBiZXpfc3RhY2s7CisgICAgYXJjWzBdID0gKnRvOworICAgIGFyY1sxXSA9ICpjb250cm9sMjsKKyAgICBhcmNbMl0gPSAqY29udHJvbDE7CisgICAgYXJjWzNdID0gc3Ryb2tlci0+Y2VudGVyOworCisgICAgd2hpbGUgKCBhcmMgPj0gYmV6X3N0YWNrICkKKyAgICB7CisgICAgICBGVF9BbmdsZSAgYW5nbGVfaW4sIGFuZ2xlX21pZCwgYW5nbGVfb3V0OworCisKKyAgICAgIC8qIGluaXRpYWxpemUgd2l0aCBjdXJyZW50IGRpcmVjdGlvbiAqLworICAgICAgYW5nbGVfaW4gPSBhbmdsZV9vdXQgPSBhbmdsZV9taWQgPSBzdHJva2VyLT5hbmdsZV9pbjsKKworICAgICAgaWYgKCBhcmMgPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgIWZ0X2N1YmljX2lzX3NtYWxsX2Vub3VnaCggYXJjLCAmYW5nbGVfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbmdsZV9taWQsICZhbmdsZV9vdXQgKSApCisgICAgICB7CisgICAgICAgIGlmICggc3Ryb2tlci0+Zmlyc3RfcG9pbnQgKQorICAgICAgICAgIHN0cm9rZXItPmFuZ2xlX2luID0gYW5nbGVfaW47CisKKyAgICAgICAgZnRfY3ViaWNfc3BsaXQoIGFyYyApOworICAgICAgICBhcmMgKz0gMzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggZmlyc3RfYXJjICkKKyAgICAgIHsKKyAgICAgICAgZmlyc3RfYXJjID0gRkFMU0U7CisKKyAgICAgICAgLyogcHJvY2VzcyBjb3JuZXIgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgIGlmICggc3Ryb2tlci0+Zmlyc3RfcG9pbnQgKQorICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlcl9zdWJwYXRoX3N0YXJ0KCBzdHJva2VyLCBhbmdsZV9pbiwgMCApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBhbmdsZV9pbjsKKyAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfcHJvY2Vzc19jb3JuZXIoIHN0cm9rZXIsIDAgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIGZ0X3Bvc19hYnMoIEZUX0FuZ2xlX0RpZmYoIHN0cm9rZXItPmFuZ2xlX2luLCBhbmdsZV9pbiApICkgPgorICAgICAgICAgICAgICAgICAgRlRfU01BTExfQ1VCSUNfVEhSRVNIT0xEIC8gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgeworICAgICAgICAvKiBpZiB0aGUgZGV2aWF0aW9uIGZyb20gb25lIGFyYyB0byB0aGUgbmV4dCBpcyB0b28gZ3JlYXQsICovCisgICAgICAgIC8qIGFkZCBhIHJvdW5kIGNvcm5lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgc3Ryb2tlci0+Y2VudGVyICAgID0gYXJjWzNdOworICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBhbmdsZV9pbjsKKyAgICAgICAgc3Ryb2tlci0+bGluZV9qb2luID0gRlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORDsKKworICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfcHJvY2Vzc19jb3JuZXIoIHN0cm9rZXIsIDAgKTsKKworICAgICAgICAvKiByZWluc3RhdGUgbGluZSBqb2luIHN0eWxlICovCisgICAgICAgIHN0cm9rZXItPmxpbmVfam9pbiA9IHN0cm9rZXItPmxpbmVfam9pbl9zYXZlZDsKKyAgICAgIH0KKworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogdGhlIGFyYydzIGFuZ2xlIGlzIHNtYWxsIGVub3VnaDsgd2UgY2FuIGFkZCBpdCBkaXJlY3RseSB0byBlYWNoICovCisgICAgICAvKiBib3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVmVjdG9yICAgICAgICBjdHJsMSwgY3RybDIsIGVuZDsKKyAgICAgICAgRlRfQW5nbGUgICAgICAgICB0aGV0YTEsIHBoaTEsIHRoZXRhMiwgcGhpMiwgcm90YXRlLCBhbHBoYTAgPSAwOworICAgICAgICBGVF9GaXhlZCAgICAgICAgIGxlbmd0aDEsIGxlbmd0aDI7CisgICAgICAgIEZUX1N0cm9rZUJvcmRlciAgYm9yZGVyOworICAgICAgICBGVF9JbnQgICAgICAgICAgIHNpZGU7CisKKworICAgICAgICB0aGV0YTEgID0gRlRfQW5nbGVfRGlmZiggYW5nbGVfaW4sICBhbmdsZV9taWQgKSAvIDI7CisgICAgICAgIHRoZXRhMiAgPSBGVF9BbmdsZV9EaWZmKCBhbmdsZV9taWQsIGFuZ2xlX291dCApIC8gMjsKKyAgICAgICAgcGhpMSAgICA9IGZ0X2FuZ2xlX21lYW4oIGFuZ2xlX2luLCAgYW5nbGVfbWlkICk7CisgICAgICAgIHBoaTIgICAgPSBmdF9hbmdsZV9tZWFuKCBhbmdsZV9taWQsIGFuZ2xlX291dCApOworICAgICAgICBsZW5ndGgxID0gRlRfRGl2Rml4KCBzdHJva2VyLT5yYWRpdXMsIEZUX0NvcyggdGhldGExICkgKTsKKyAgICAgICAgbGVuZ3RoMiA9IEZUX0RpdkZpeCggc3Ryb2tlci0+cmFkaXVzLCBGVF9Db3MoIHRoZXRhMiApICk7CisKKyAgICAgICAgLyogY29tcHV0ZSBkaXJlY3Rpb24gb2Ygb3JpZ2luYWwgYXJjICovCisgICAgICAgIGlmICggc3Ryb2tlci0+aGFuZGxlX3dpZGVfc3Ryb2tlcyApCisgICAgICAgICAgYWxwaGEwID0gRlRfQXRhbjIoIGFyY1swXS54IC0gYXJjWzNdLngsIGFyY1swXS55IC0gYXJjWzNdLnkgKTsKKworICAgICAgICBmb3IgKCBib3JkZXIgPSBzdHJva2VyLT5ib3JkZXJzLCBzaWRlID0gMDsKKyAgICAgICAgICAgICAgc2lkZSA8PSAxOworICAgICAgICAgICAgICBzaWRlKyssIGJvcmRlcisrICkKKyAgICAgICAgeworICAgICAgICAgIHJvdGF0ZSA9IEZUX1NJREVfVE9fUk9UQVRFKCBzaWRlICk7CisKKyAgICAgICAgICAvKiBjb21wdXRlIGNvbnRyb2wgcG9pbnRzICovCisgICAgICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZjdHJsMSwgbGVuZ3RoMSwgcGhpMSArIHJvdGF0ZSApOworICAgICAgICAgIGN0cmwxLnggKz0gYXJjWzJdLng7CisgICAgICAgICAgY3RybDEueSArPSBhcmNbMl0ueTsKKworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmY3RybDIsIGxlbmd0aDIsIHBoaTIgKyByb3RhdGUgKTsKKyAgICAgICAgICBjdHJsMi54ICs9IGFyY1sxXS54OworICAgICAgICAgIGN0cmwyLnkgKz0gYXJjWzFdLnk7CisKKyAgICAgICAgICAvKiBjb21wdXRlIGVuZCBwb2ludCAqLworICAgICAgICAgIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyKCAmZW5kLCBzdHJva2VyLT5yYWRpdXMsIGFuZ2xlX291dCArIHJvdGF0ZSApOworICAgICAgICAgIGVuZC54ICs9IGFyY1swXS54OworICAgICAgICAgIGVuZC55ICs9IGFyY1swXS55OworCisgICAgICAgICAgaWYgKCBzdHJva2VyLT5oYW5kbGVfd2lkZV9zdHJva2VzICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHN0YXJ0OworICAgICAgICAgICAgRlRfQW5nbGUgICBhbHBoYTE7CisKKworICAgICAgICAgICAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGJvcmRlciByYWRpdXMgaXMgZ3JlYXRlciB0aGFuIHRoZSAqLworICAgICAgICAgICAgLyogcmFkaXVzIG9mIGN1cnZhdHVyZSBvZiB0aGUgb3JpZ2luYWwgYXJjICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhcnQgPSBib3JkZXItPnBvaW50c1tib3JkZXItPm51bV9wb2ludHMgLSAxXTsKKworICAgICAgICAgICAgYWxwaGExID0gRlRfQXRhbjIoIGVuZC54IC0gc3RhcnQueCwgZW5kLnkgLSBzdGFydC55ICk7CisKKyAgICAgICAgICAgIC8qIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGJvcmRlciBhcmMgb3Bwb3NpdGUgdG8gKi8KKyAgICAgICAgICAgIC8qIHRoYXQgb2YgdGhlIG9yaWdpbmFsIGFyYz8gKi8KKyAgICAgICAgICAgIGlmICggZnRfcG9zX2FicyggRlRfQW5nbGVfRGlmZiggYWxwaGEwLCBhbHBoYTEgKSApID4KKyAgICAgICAgICAgICAgICAgICBGVF9BTkdMRV9QSSAvIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfQW5nbGUgICBiZXRhLCBnYW1tYTsKKyAgICAgICAgICAgICAgRlRfVmVjdG9yICBidmVjLCBkZWx0YTsKKyAgICAgICAgICAgICAgRlRfRml4ZWQgICBibGVuLCBzaW5BLCBzaW5CLCBhbGVuOworCisKKyAgICAgICAgICAgICAgLyogdXNlIHRoZSBzaW5lIHJ1bGUgdG8gZmluZCB0aGUgaW50ZXJzZWN0aW9uIHBvaW50ICovCisgICAgICAgICAgICAgIGJldGEgID0gRlRfQXRhbjIoIGFyY1szXS54IC0gc3RhcnQueCwgYXJjWzNdLnkgLSBzdGFydC55ICk7CisgICAgICAgICAgICAgIGdhbW1hID0gRlRfQXRhbjIoIGFyY1swXS54IC0gZW5kLngsICAgYXJjWzBdLnkgLSBlbmQueSApOworCisgICAgICAgICAgICAgIGJ2ZWMueCA9IGVuZC54IC0gc3RhcnQueDsKKyAgICAgICAgICAgICAgYnZlYy55ID0gZW5kLnkgLSBzdGFydC55OworCisgICAgICAgICAgICAgIGJsZW4gPSBGVF9WZWN0b3JfTGVuZ3RoKCAmYnZlYyApOworCisgICAgICAgICAgICAgIHNpbkEgPSBmdF9wb3NfYWJzKCBGVF9TaW4oIGFscGhhMSAtIGdhbW1hICkgKTsKKyAgICAgICAgICAgICAgc2luQiA9IGZ0X3Bvc19hYnMoIEZUX1NpbiggYmV0YSAtIGdhbW1hICkgKTsKKworICAgICAgICAgICAgICBhbGVuID0gRlRfTXVsRGl2KCBibGVuLCBzaW5BLCBzaW5CICk7CisKKyAgICAgICAgICAgICAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoICZkZWx0YSwgYWxlbiwgYmV0YSApOworICAgICAgICAgICAgICBkZWx0YS54ICs9IHN0YXJ0Lng7CisgICAgICAgICAgICAgIGRlbHRhLnkgKz0gc3RhcnQueTsKKworICAgICAgICAgICAgICAvKiBjaXJjdW1uYXZpZ2F0ZSB0aGUgbmVnYXRpdmUgc2VjdG9yIGJhY2t3YXJkcyAqLworICAgICAgICAgICAgICBib3JkZXItPm1vdmFibGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZGVsdGEsIEZBTFNFICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2xpbmV0byggYm9yZGVyLCAmZW5kLCBGQUxTRSApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9jdWJpY3RvKCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RybDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RybDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQgKTsKKyAgICAgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgICAvKiBhbmQgdGhlbiBtb3ZlIHRvIHRoZSBlbmRwb2ludCAqLworICAgICAgICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfbGluZXRvKCBib3JkZXIsICZlbmQsIEZBTFNFICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogZWxzZSBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBzaW1wbHkgYWRkIGFuIGFyYyAqLworICAgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9jdWJpY3RvKCBib3JkZXIsICZjdHJsMSwgJmN0cmwyLCAmZW5kICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYXJjIC09IDM7CisKKyAgICAgIHN0cm9rZXItPmFuZ2xlX2luID0gYW5nbGVfb3V0OworICAgIH0KKworICAgIHN0cm9rZXItPmNlbnRlciA9ICp0bzsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCggRlRfU3Ryb2tlciAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgb3BlbiApCisgIHsKKyAgICBpZiAoICFzdHJva2VyIHx8ICF0byApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIC8qIFdlIGNhbm5vdCBwcm9jZXNzIHRoZSBmaXJzdCBwb2ludCwgYmVjYXVzZSB0aGVyZSBpcyBub3QgZW5vdWdoICAgICAgKi8KKyAgICAvKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgaXRzIGNvcm5lci9jYXAuICBUaGUgbGF0dGVyIHdpbGwgYmUgcHJvY2Vzc2VkICovCisgICAgLyogaW4gdGhlIGBGVF9TdHJva2VyX0VuZFN1YlBhdGgnIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzdHJva2VyLT5maXJzdF9wb2ludCAgPSBUUlVFOworICAgIHN0cm9rZXItPmNlbnRlciAgICAgICA9ICp0bzsKKyAgICBzdHJva2VyLT5zdWJwYXRoX29wZW4gPSBvcGVuOworCisgICAgLyogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgYm9yZGVyIHJhZGl1cyBpcyBncmVhdGVyICovCisgICAgLyogdGhhbiB0aGUgcmFkaXVzIG9mIGN1cnZhdHVyZSBvZiBhIGN1cnZlLCB0byBoYW5kbGUgdGhpcyBjYXNlICAgICAgICovCisgICAgLyogc3BlY2lhbGx5LiAgVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGlmIGJldmVsIGpvaW5zIG9yIGJ1dHQgY2FwcyBtYXkgICovCisgICAgLyogYmUgY3JlYXRlZCwgYmVjYXVzZSByb3VuZCAmIG1pdGVyIGpvaW5zIGFuZCByb3VuZCAmIHNxdWFyZSBjYXBzICAgICovCisgICAgLyogY292ZXIgdGhlIG5lZ2F0aXZlIHNlY3RvciBjcmVhdGVkIHdpdGggd2lkZSBzdHJva2VzLiAgICAgICAgICAgICAgICovCisgICAgc3Ryb2tlci0+aGFuZGxlX3dpZGVfc3Ryb2tlcyA9CisgICAgICBGVF9CT09MKCBzdHJva2VyLT5saW5lX2pvaW4gIT0gRlRfU1RST0tFUl9MSU5FSk9JTl9ST1VORCAgfHwKKyAgICAgICAgICAgICAgICggc3Ryb2tlci0+c3VicGF0aF9vcGVuICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgc3Ryb2tlci0+bGluZV9jYXAgPT0gRlRfU1RST0tFUl9MSU5FQ0FQX0JVVFQgKSApOworCisgICAgLyogcmVjb3JkIHRoZSBzdWJwYXRoIHN0YXJ0IHBvaW50IGZvciBlYWNoIGJvcmRlciAqLworICAgIHN0cm9rZXItPnN1YnBhdGhfc3RhcnQgPSAqdG87CisKKyAgICBzdHJva2VyLT5hbmdsZV9pbiA9IDA7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc3Ryb2tlcl9hZGRfcmV2ZXJzZV9sZWZ0KCBGVF9TdHJva2VyICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIG9wZW4gKQorICB7CisgICAgRlRfU3Ryb2tlQm9yZGVyICByaWdodCA9IHN0cm9rZXItPmJvcmRlcnMgKyAwOworICAgIEZUX1N0cm9rZUJvcmRlciAgbGVmdCAgPSBzdHJva2VyLT5ib3JkZXJzICsgMTsKKyAgICBGVF9JbnQgICAgICAgICAgIG5ld19wb2ludHM7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgRlRfQVNTRVJUKCBsZWZ0LT5zdGFydCA+PSAwICk7CisKKyAgICBuZXdfcG9pbnRzID0gKEZUX0ludClsZWZ0LT5udW1fcG9pbnRzIC0gbGVmdC0+c3RhcnQ7CisgICAgaWYgKCBuZXdfcG9pbnRzID4gMCApCisgICAgeworICAgICAgZXJyb3IgPSBmdF9zdHJva2VfYm9yZGVyX2dyb3coIHJpZ2h0LCAoRlRfVUludCluZXdfcG9pbnRzICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciogIGRzdF9wb2ludCA9IHJpZ2h0LT5wb2ludHMgKyByaWdodC0+bnVtX3BvaW50czsKKyAgICAgICAgRlRfQnl0ZSogICAgZHN0X3RhZyAgID0gcmlnaHQtPnRhZ3MgICArIHJpZ2h0LT5udW1fcG9pbnRzOworICAgICAgICBGVF9WZWN0b3IqICBzcmNfcG9pbnQgPSBsZWZ0LT5wb2ludHMgICsgbGVmdC0+bnVtX3BvaW50cyAtIDE7CisgICAgICAgIEZUX0J5dGUqICAgIHNyY190YWcgICA9IGxlZnQtPnRhZ3MgICAgKyBsZWZ0LT5udW1fcG9pbnRzIC0gMTsKKworCisgICAgICAgIHdoaWxlICggc3JjX3BvaW50ID49IGxlZnQtPnBvaW50cyArIGxlZnQtPnN0YXJ0ICkKKyAgICAgICAgeworICAgICAgICAgICpkc3RfcG9pbnQgPSAqc3JjX3BvaW50OworICAgICAgICAgICpkc3RfdGFnICAgPSAqc3JjX3RhZzsKKworICAgICAgICAgIGlmICggb3BlbiApCisgICAgICAgICAgICBkc3RfdGFnWzBdICY9IH5GVF9TVFJPS0VfVEFHX0JFR0lOX0VORDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfQnl0ZSAgdHRhZyA9CisgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKSggZHN0X3RhZ1swXSAmIEZUX1NUUk9LRV9UQUdfQkVHSU5fRU5EICk7CisKKworICAgICAgICAgICAgLyogc3dpdGNoIGJlZ2luL2VuZCB0YWdzIGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgICAgaWYgKCB0dGFnID09IEZUX1NUUk9LRV9UQUdfQkVHSU4gfHwKKyAgICAgICAgICAgICAgICAgdHRhZyA9PSBGVF9TVFJPS0VfVEFHX0VORCAgICkKKyAgICAgICAgICAgICAgZHN0X3RhZ1swXSBePSBGVF9TVFJPS0VfVEFHX0JFR0lOX0VORDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzcmNfcG9pbnQtLTsKKyAgICAgICAgICBzcmNfdGFnLS07CisgICAgICAgICAgZHN0X3BvaW50Kys7CisgICAgICAgICAgZHN0X3RhZysrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGxlZnQtPm51bV9wb2ludHMgICA9IChGVF9VSW50KWxlZnQtPnN0YXJ0OworICAgICAgcmlnaHQtPm51bV9wb2ludHMgKz0gKEZUX1VJbnQpbmV3X3BvaW50czsKKworICAgICAgcmlnaHQtPm1vdmFibGUgPSBGQUxTRTsKKyAgICAgIGxlZnQtPm1vdmFibGUgID0gRkFMU0U7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3Ryb2tlLmggKi8KKworICAvKiB0aGVyZSdzIGEgbG90IG9mIG1hZ2ljIGluIHRoaXMgZnVuY3Rpb24hICovCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9FbmRTdWJQYXRoKCBGVF9TdHJva2VyICBzdHJva2VyICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCAhc3Ryb2tlciApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggc3Ryb2tlci0+c3VicGF0aF9vcGVuICkKKyAgICB7CisgICAgICBGVF9TdHJva2VCb3JkZXIgIHJpZ2h0ID0gc3Ryb2tlci0+Ym9yZGVyczsKKworCisgICAgICAvKiBBbGwgcmlnaHQsIHRoaXMgaXMgYW4gb3BlbmVkIHBhdGgsIHdlIG5lZWQgdG8gYWRkIGEgY2FwIGJldHdlZW4gKi8KKyAgICAgIC8qIHJpZ2h0ICYgbGVmdCwgYWRkIHRoZSByZXZlcnNlIG9mIGxlZnQsIHRoZW4gYWRkIGEgZmluYWwgY2FwICAgICAqLworICAgICAgLyogYmV0d2VlbiBsZWZ0ICYgcmlnaHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfY2FwKCBzdHJva2VyLCBzdHJva2VyLT5hbmdsZV9pbiwgMCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogYWRkIHJldmVyc2VkIHBvaW50cyBmcm9tIGBsZWZ0JyB0byBgcmlnaHQnICovCisgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfYWRkX3JldmVyc2VfbGVmdCggc3Ryb2tlciwgVFJVRSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogbm93IGFkZCB0aGUgZmluYWwgY2FwICovCisgICAgICBzdHJva2VyLT5jZW50ZXIgPSBzdHJva2VyLT5zdWJwYXRoX3N0YXJ0OworICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX2NhcCggc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZXItPnN1YnBhdGhfYW5nbGUgKyBGVF9BTkdMRV9QSSwgMCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogTm93IGVuZCB0aGUgcmlnaHQgc3VicGF0aCBhY2NvcmRpbmdseS4gIFRoZSBsZWZ0IG9uZSBpcyAqLworICAgICAgLyogcmV3aW5kIGFuZCBkb2Vzbid0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nLiAgICAgICAgICAgICAqLworICAgICAgZnRfc3Ryb2tlX2JvcmRlcl9jbG9zZSggcmlnaHQsIEZBTFNFICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9BbmdsZSAgdHVybjsKKyAgICAgIEZUX0ludCAgICBpbnNpZGVfc2lkZTsKKworCisgICAgICAvKiBjbG9zZSB0aGUgcGF0aCBpZiBuZWVkZWQgKi8KKyAgICAgIGlmICggc3Ryb2tlci0+Y2VudGVyLnggIT0gc3Ryb2tlci0+c3VicGF0aF9zdGFydC54IHx8CisgICAgICAgICAgIHN0cm9rZXItPmNlbnRlci55ICE9IHN0cm9rZXItPnN1YnBhdGhfc3RhcnQueSApCisgICAgICB7CisgICAgICAgICBlcnJvciA9IEZUX1N0cm9rZXJfTGluZVRvKCBzdHJva2VyLCAmc3Ryb2tlci0+c3VicGF0aF9zdGFydCApOworICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogcHJvY2VzcyB0aGUgY29ybmVyICovCisgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgPSBzdHJva2VyLT5zdWJwYXRoX2FuZ2xlOworICAgICAgdHVybiAgICAgICAgICAgICAgID0gRlRfQW5nbGVfRGlmZiggc3Ryb2tlci0+YW5nbGVfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VyLT5hbmdsZV9vdXQgKTsKKworICAgICAgLyogbm8gc3BlY2lmaWMgY29ybmVyIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgaWYgdGhlIHR1cm4gaXMgMCAqLworICAgICAgaWYgKCB0dXJuICE9IDAgKQorICAgICAgeworICAgICAgICAvKiB3aGVuIHdlIHR1cm4gdG8gdGhlIHJpZ2h0LCB0aGUgaW5zaWRlIHNpZGUgaXMgMCAqLworICAgICAgICAvKiBvdGhlcndpc2UsIHRoZSBpbnNpZGUgc2lkZSBpcyAxICovCisgICAgICAgIGluc2lkZV9zaWRlID0gKCB0dXJuIDwgMCApOworCisgICAgICAgIGVycm9yID0gZnRfc3Ryb2tlcl9pbnNpZGUoIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZV9zaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VyLT5zdWJwYXRoX2xpbmVfbGVuZ3RoICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBwcm9jZXNzIHRoZSBvdXRzaWRlIHNpZGUgKi8KKyAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX291dHNpZGUoIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaW5zaWRlX3NpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VyLT5zdWJwYXRoX2xpbmVfbGVuZ3RoICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogdGhlbiBlbmQgb3VyIHR3byBzdWJwYXRocyAqLworICAgICAgZnRfc3Ryb2tlX2JvcmRlcl9jbG9zZSggc3Ryb2tlci0+Ym9yZGVycyArIDAsIEZBTFNFICk7CisgICAgICBmdF9zdHJva2VfYm9yZGVyX2Nsb3NlKCBzdHJva2VyLT5ib3JkZXJzICsgMSwgVFJVRSApOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJva2VyX0dldEJvcmRlckNvdW50cyggRlRfU3Ryb2tlciAgICAgICAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cm9rZXJCb3JkZXIgIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgKmFudW1fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAqYW51bV9jb250b3VycyApCisgIHsKKyAgICBGVF9VSW50ICAgbnVtX3BvaW50cyA9IDAsIG51bV9jb250b3VycyA9IDA7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICBpZiAoICFzdHJva2VyIHx8IGJvcmRlciA+IDEgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfZ2V0X2NvdW50cyggc3Ryb2tlci0+Ym9yZGVycyArIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bV9wb2ludHMsICZudW1fY29udG91cnMgKTsKKyAgRXhpdDoKKyAgICBpZiAoIGFudW1fcG9pbnRzICkKKyAgICAgICphbnVtX3BvaW50cyA9IG51bV9wb2ludHM7CisKKyAgICBpZiAoIGFudW1fY29udG91cnMgKQorICAgICAgKmFudW1fY29udG91cnMgPSBudW1fY29udG91cnM7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3Ryb2tlcl9HZXRDb3VudHMoIEZUX1N0cm9rZXIgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICphbnVtX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgKmFudW1fY29udG91cnMgKQorICB7CisgICAgRlRfVUludCAgIGNvdW50MSwgY291bnQyLCBudW1fcG9pbnRzICAgPSAwOworICAgIEZUX1VJbnQgICBjb3VudDMsIGNvdW50NCwgbnVtX2NvbnRvdXJzID0gMDsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGlmICggIXN0cm9rZXIgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlcnJvciA9IGZ0X3N0cm9rZV9ib3JkZXJfZ2V0X2NvdW50cyggc3Ryb2tlci0+Ym9yZGVycyArIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudDEsICZjb3VudDIgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9nZXRfY291bnRzKCBzdHJva2VyLT5ib3JkZXJzICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50MywgJmNvdW50NCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgbnVtX3BvaW50cyAgID0gY291bnQxICsgY291bnQzOworICAgIG51bV9jb250b3VycyA9IGNvdW50MiArIGNvdW50NDsKKworICBFeGl0OgorICAgIGlmICggYW51bV9wb2ludHMgKQorICAgICAgKmFudW1fcG9pbnRzICAgPSBudW1fcG9pbnRzOworCisgICAgaWYgKCBhbnVtX2NvbnRvdXJzICkKKyAgICAgICphbnVtX2NvbnRvdXJzID0gbnVtX2NvbnRvdXJzOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3Ryb2tlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIoIEZUX1N0cm9rZXIgICAgICAgIHN0cm9rZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJva2VyQm9yZGVyICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgICBvdXRsaW5lICkKKyAgeworICAgIGlmICggIXN0cm9rZXIgfHwgIW91dGxpbmUgKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKCBib3JkZXIgPT0gRlRfU1RST0tFUl9CT1JERVJfTEVGVCAgfHwKKyAgICAgICAgIGJvcmRlciA9PSBGVF9TVFJPS0VSX0JPUkRFUl9SSUdIVCApCisgICAgeworICAgICAgRlRfU3Ryb2tlQm9yZGVyICBzYm9yZGVyID0gJiBzdHJva2VyLT5ib3JkZXJzW2JvcmRlcl07CisKKworICAgICAgaWYgKCBzYm9yZGVyLT52YWxpZCApCisgICAgICAgIGZ0X3N0cm9rZV9ib3JkZXJfZXhwb3J0KCBzYm9yZGVyLCBvdXRsaW5lICk7CisgICAgfQorICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3Ryb2tlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfU3Ryb2tlcl9FeHBvcnQoIEZUX1N0cm9rZXIgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKQorICB7CisgICAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIoIHN0cm9rZXIsIEZUX1NUUk9LRVJfQk9SREVSX0xFRlQsIG91dGxpbmUgKTsKKyAgICBGVF9TdHJva2VyX0V4cG9ydEJvcmRlciggc3Ryb2tlciwgRlRfU1RST0tFUl9CT1JERVJfUklHSFQsIG91dGxpbmUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCisKKyAgLyoKKyAgICogIFRoZSBmb2xsb3dpbmcgaXMgdmVyeSBzaW1pbGFyIHRvIEZUX091dGxpbmVfRGVjb21wb3NlLCBleGNlcHQKKyAgICogIHRoYXQgd2UgZG8gc3VwcG9ydCBvcGVuZWQgcGF0aHMsIGFuZCBkbyBub3Qgc2NhbGUgdGhlIG91dGxpbmUuCisgICAqLworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lKCBGVF9TdHJva2VyICAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIG9wZW5lZCApCisgIHsKKyAgICBGVF9WZWN0b3IgICB2X2xhc3Q7CisgICAgRlRfVmVjdG9yICAgdl9jb250cm9sOworICAgIEZUX1ZlY3RvciAgIHZfc3RhcnQ7CisKKyAgICBGVF9WZWN0b3IqICBwb2ludDsKKyAgICBGVF9WZWN0b3IqICBsaW1pdDsKKyAgICBjaGFyKiAgICAgICB0YWdzOworCisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKyAgICBGVF9JbnQgICAgICBuOyAgICAgICAgIC8qIGluZGV4IG9mIGNvbnRvdXIgaW4gb3V0bGluZSAgICAgKi8KKyAgICBGVF9VSW50ICAgICBmaXJzdDsgICAgIC8qIGluZGV4IG9mIGZpcnN0IHBvaW50IGluIGNvbnRvdXIgKi8KKyAgICBGVF9JbnQgICAgICB0YWc7ICAgICAgIC8qIGN1cnJlbnQgcG9pbnQncyBzdGF0ZSAgICAgICAgICAgKi8KKworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgaWYgKCAhc3Ryb2tlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIEZUX1N0cm9rZXJfUmV3aW5kKCBzdHJva2VyICk7CisKKyAgICBmaXJzdCA9IDA7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IG91dGxpbmUtPm5fY29udG91cnM7IG4rKyApCisgICAgeworICAgICAgRlRfVUludCAgbGFzdDsgIC8qIGluZGV4IG9mIGxhc3QgcG9pbnQgaW4gY29udG91ciAqLworCisKKyAgICAgIGxhc3QgID0gKEZUX1VJbnQpb3V0bGluZS0+Y29udG91cnNbbl07CisgICAgICBsaW1pdCA9IG91dGxpbmUtPnBvaW50cyArIGxhc3Q7CisKKyAgICAgIC8qIHNraXAgZW1wdHkgcG9pbnRzOyB3ZSBkb24ndCBzdHJva2UgdGhlc2UgKi8KKyAgICAgIGlmICggbGFzdCA8PSBmaXJzdCApCisgICAgICB7CisgICAgICAgIGZpcnN0ID0gbGFzdCArIDE7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICB2X3N0YXJ0ID0gb3V0bGluZS0+cG9pbnRzW2ZpcnN0XTsKKyAgICAgIHZfbGFzdCAgPSBvdXRsaW5lLT5wb2ludHNbbGFzdF07CisKKyAgICAgIHZfY29udHJvbCA9IHZfc3RhcnQ7CisKKyAgICAgIHBvaW50ID0gb3V0bGluZS0+cG9pbnRzICsgZmlyc3Q7CisgICAgICB0YWdzICA9IG91dGxpbmUtPnRhZ3MgICArIGZpcnN0OworICAgICAgdGFnICAgPSBGVF9DVVJWRV9UQUcoIHRhZ3NbMF0gKTsKKworICAgICAgLyogQSBjb250b3VyIGNhbm5vdCBzdGFydCB3aXRoIGEgY3ViaWMgY29udHJvbCBwb2ludCEgKi8KKyAgICAgIGlmICggdGFnID09IEZUX0NVUlZFX1RBR19DVUJJQyApCisgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAvKiBjaGVjayBmaXJzdCBwb2ludCB0byBkZXRlcm1pbmUgb3JpZ2luICovCisgICAgICBpZiAoIHRhZyA9PSBGVF9DVVJWRV9UQUdfQ09OSUMgKQorICAgICAgeworICAgICAgICAvKiBGaXJzdCBwb2ludCBpcyBjb25pYyBjb250cm9sLiAgWWVzLCB0aGlzIGhhcHBlbnMuICovCisgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLT50YWdzW2xhc3RdICkgPT0gRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHN0YXJ0IGF0IGxhc3QgcG9pbnQgaWYgaXQgaXMgb24gdGhlIGN1cnZlICovCisgICAgICAgICAgdl9zdGFydCA9IHZfbGFzdDsKKyAgICAgICAgICBsaW1pdC0tOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIGlmIGJvdGggZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBjb25pYywgKi8KKyAgICAgICAgICAvKiBzdGFydCBhdCB0aGVpciBtaWRkbGUgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgdl9zdGFydC54ID0gKCB2X3N0YXJ0LnggKyB2X2xhc3QueCApIC8gMjsKKyAgICAgICAgICB2X3N0YXJ0LnkgPSAoIHZfc3RhcnQueSArIHZfbGFzdC55ICkgLyAyOworICAgICAgICB9CisgICAgICAgIHBvaW50LS07CisgICAgICAgIHRhZ3MtLTsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aCggc3Ryb2tlciwgJnZfc3RhcnQsIG9wZW5lZCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgd2hpbGUgKCBwb2ludCA8IGxpbWl0ICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgdGFncysrOworCisgICAgICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworICAgICAgICBzd2l0Y2ggKCB0YWcgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX09OOiAgLyogZW1pdCBhIHNpbmdsZSBsaW5lX3RvICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CisKKworICAgICAgICAgICAgdmVjLnggPSBwb2ludC0+eDsKKyAgICAgICAgICAgIHZlYy55ID0gcG9pbnQtPnk7CisKKyAgICAgICAgICAgIGVycm9yID0gRlRfU3Ryb2tlcl9MaW5lVG8oIHN0cm9rZXIsICZ2ZWMgKTsKKyAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBGVF9DVVJWRV9UQUdfQ09OSUM6ICAvKiBjb25zdW1lIGNvbmljIGFyY3MgKi8KKyAgICAgICAgICB2X2NvbnRyb2wueCA9IHBvaW50LT54OworICAgICAgICAgIHZfY29udHJvbC55ID0gcG9pbnQtPnk7CisKKyAgICAgICAgRG9fQ29uaWM6CisgICAgICAgICAgaWYgKCBwb2ludCA8IGxpbWl0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHZlYzsKKyAgICAgICAgICAgIEZUX1ZlY3RvciAgdl9taWRkbGU7CisKKworICAgICAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgICAgIHRhZ3MrKzsKKyAgICAgICAgICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworCisgICAgICAgICAgICB2ZWMgPSBwb2ludFswXTsKKworICAgICAgICAgICAgaWYgKCB0YWcgPT0gRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyb3IgPSBGVF9TdHJva2VyX0NvbmljVG8oIHN0cm9rZXIsICZ2X2NvbnRyb2wsICZ2ZWMgKTsKKyAgICAgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB0YWcgIT0gRlRfQ1VSVkVfVEFHX0NPTklDICkKKyAgICAgICAgICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICAgICAgICAgIHZfbWlkZGxlLnggPSAoIHZfY29udHJvbC54ICsgdmVjLnggKSAvIDI7CisgICAgICAgICAgICB2X21pZGRsZS55ID0gKCB2X2NvbnRyb2wueSArIHZlYy55ICkgLyAyOworCisgICAgICAgICAgICBlcnJvciA9IEZUX1N0cm9rZXJfQ29uaWNUbyggc3Ryb2tlciwgJnZfY29udHJvbCwgJnZfbWlkZGxlICk7CisgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICB2X2NvbnRyb2wgPSB2ZWM7CisgICAgICAgICAgICBnb3RvIERvX0NvbmljOworICAgICAgICAgIH0KKworICAgICAgICAgIGVycm9yID0gRlRfU3Ryb2tlcl9Db25pY1RvKCBzdHJva2VyLCAmdl9jb250cm9sLCAmdl9zdGFydCApOworICAgICAgICAgIGdvdG8gQ2xvc2U7CisKKyAgICAgICAgZGVmYXVsdDogIC8qIEZUX0NVUlZFX1RBR19DVUJJQyAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1ZlY3RvciAgdmVjMSwgdmVjMjsKKworCisgICAgICAgICAgICBpZiAoIHBvaW50ICsgMSA+IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICBGVF9DVVJWRV9UQUcoIHRhZ3NbMV0gKSAhPSBGVF9DVVJWRV9UQUdfQ1VCSUMgKQorICAgICAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICAgICAgcG9pbnQgKz0gMjsKKyAgICAgICAgICAgIHRhZ3MgICs9IDI7CisKKyAgICAgICAgICAgIHZlYzEgPSBwb2ludFstMl07CisgICAgICAgICAgICB2ZWMyID0gcG9pbnRbLTFdOworCisgICAgICAgICAgICBpZiAoIHBvaW50IDw9IGxpbWl0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CisKKworICAgICAgICAgICAgICB2ZWMgPSBwb2ludFswXTsKKworICAgICAgICAgICAgICBlcnJvciA9IEZUX1N0cm9rZXJfQ3ViaWNUbyggc3Ryb2tlciwgJnZlYzEsICZ2ZWMyLCAmdmVjICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVycm9yID0gRlRfU3Ryb2tlcl9DdWJpY1RvKCBzdHJva2VyLCAmdmVjMSwgJnZlYzIsICZ2X3N0YXJ0ICk7CisgICAgICAgICAgICBnb3RvIENsb3NlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgQ2xvc2U6CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBkb24ndCB0cnkgdG8gZW5kIHRoZSBwYXRoIGlmIG5vIHNlZ21lbnRzIGhhdmUgYmVlbiBnZW5lcmF0ZWQgKi8KKyAgICAgIGlmICggIXN0cm9rZXItPmZpcnN0X3BvaW50ICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9TdHJva2VyX0VuZFN1YlBhdGgoIHN0cm9rZXIgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBmaXJzdCA9IGxhc3QgKyAxOworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgSW52YWxpZF9PdXRsaW5lOgorICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisgIH0KKworCisgIC8qIGRlY2xhcmUgYW4gZXh0ZXJuIHRvIGFjY2VzcyBgZnRfb3V0bGluZV9nbHlwaF9jbGFzcycgZ2xvYmFsbHkgICAgICovCisgIC8qIGFsbG9jYXRlZCAgaW4gYGZ0Z2x5cGguYycsIGFuZCB1c2UgdGhlIEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICovCisgIC8qIG1hY3JvIHRvIGFjY2VzcyBpdCB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgICAgICAgICAgICovCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgIGV4dGVybiBjb25zdCBGVF9HbHlwaF9DbGFzcyAgZnRfb3V0bGluZV9nbHlwaF9jbGFzczsKKyNlbmRpZgorI2luY2x1ZGUgImJhc2VwaWMuaCIKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfU3Ryb2tlKCBGVF9HbHlwaCAgICAqcGdseXBoLAorICAgICAgICAgICAgICAgICAgIEZUX1N0cm9rZXIgICBzdHJva2VyLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBkZXN0cm95ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOworICAgIEZUX0dseXBoICBnbHlwaCA9IE5VTEw7CisKKyAgICAvKiBmb3IgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKGluIFBJQyBtb2RlKSAqLworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBzdHJva2VyLT5saWJyYXJ5OworCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisKKworICAgIGlmICggIXBnbHlwaCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBnbHlwaCA9ICpwZ2x5cGg7CisgICAgaWYgKCAhZ2x5cGggfHwgZ2x5cGgtPmNsYXp6ICE9IEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHsKKyAgICAgIEZUX0dseXBoICBjb3B5OworCisKKyAgICAgIGVycm9yID0gRlRfR2x5cGhfQ29weSggZ2x5cGgsICZjb3B5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBnbHlwaCA9IGNvcHk7CisgICAgfQorCisgICAgeworICAgICAgRlRfT3V0bGluZUdseXBoICBvZ2x5cGggID0gKEZUX091dGxpbmVHbHlwaClnbHlwaDsKKyAgICAgIEZUX091dGxpbmUqICAgICAgb3V0bGluZSA9ICZvZ2x5cGgtPm91dGxpbmU7CisgICAgICBGVF9VSW50ICAgICAgICAgIG51bV9wb2ludHMsIG51bV9jb250b3VyczsKKworCisgICAgICBlcnJvciA9IEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lKCBzdHJva2VyLCBvdXRsaW5lLCBGQUxTRSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgRlRfU3Ryb2tlcl9HZXRDb3VudHMoIHN0cm9rZXIsICZudW1fcG9pbnRzLCAmbnVtX2NvbnRvdXJzICk7CisKKyAgICAgIEZUX091dGxpbmVfRG9uZSggZ2x5cGgtPmxpYnJhcnksIG91dGxpbmUgKTsKKworICAgICAgZXJyb3IgPSBGVF9PdXRsaW5lX05ldyggZ2x5cGgtPmxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludCludW1fY29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBvdXRsaW5lLT5uX3BvaW50cyAgID0gMDsKKyAgICAgIG91dGxpbmUtPm5fY29udG91cnMgPSAwOworCisgICAgICBGVF9TdHJva2VyX0V4cG9ydCggc3Ryb2tlciwgb3V0bGluZSApOworICAgIH0KKworICAgIGlmICggZGVzdHJveSApCisgICAgICBGVF9Eb25lX0dseXBoKCAqcGdseXBoICk7CisKKyAgICAqcGdseXBoID0gZ2x5cGg7CisgICAgZ290byBFeGl0OworCisgIEZhaWw6CisgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGggKTsKKyAgICBnbHlwaCA9IE5VTEw7CisKKyAgICBpZiAoICFkZXN0cm95ICkKKyAgICAgICpwZ2x5cGggPSBOVUxMOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3Ryb2tlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoX1N0cm9rZUJvcmRlciggRlRfR2x5cGggICAgKnBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJva2VyICAgc3Ryb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgaW5zaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBkZXN0cm95ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOworICAgIEZUX0dseXBoICBnbHlwaCA9IE5VTEw7CisKKyAgICAvKiBmb3IgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKGluIFBJQyBtb2RlKSAqLworICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBzdHJva2VyLT5saWJyYXJ5OworCisgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CisKKworICAgIGlmICggIXBnbHlwaCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBnbHlwaCA9ICpwZ2x5cGg7CisgICAgaWYgKCAhZ2x5cGggfHwgZ2x5cGgtPmNsYXp6ICE9IEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHsKKyAgICAgIEZUX0dseXBoICBjb3B5OworCisKKyAgICAgIGVycm9yID0gRlRfR2x5cGhfQ29weSggZ2x5cGgsICZjb3B5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBnbHlwaCA9IGNvcHk7CisgICAgfQorCisgICAgeworICAgICAgRlRfT3V0bGluZUdseXBoICAgb2dseXBoICA9IChGVF9PdXRsaW5lR2x5cGgpZ2x5cGg7CisgICAgICBGVF9TdHJva2VyQm9yZGVyICBib3JkZXI7CisgICAgICBGVF9PdXRsaW5lKiAgICAgICBvdXRsaW5lID0gJm9nbHlwaC0+b3V0bGluZTsKKyAgICAgIEZUX1VJbnQgICAgICAgICAgIG51bV9wb2ludHMsIG51bV9jb250b3VyczsKKworCisgICAgICBib3JkZXIgPSBGVF9PdXRsaW5lX0dldE91dHNpZGVCb3JkZXIoIG91dGxpbmUgKTsKKyAgICAgIGlmICggaW5zaWRlICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBib3JkZXIgPT0gRlRfU1RST0tFUl9CT1JERVJfTEVGVCApCisgICAgICAgICAgYm9yZGVyID0gRlRfU1RST0tFUl9CT1JERVJfUklHSFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBib3JkZXIgPSBGVF9TVFJPS0VSX0JPUkRFUl9MRUZUOworICAgICAgfQorCisgICAgICBlcnJvciA9IEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lKCBzdHJva2VyLCBvdXRsaW5lLCBGQUxTRSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgRlRfU3Ryb2tlcl9HZXRCb3JkZXJDb3VudHMoIHN0cm9rZXIsIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtX3BvaW50cywgJm51bV9jb250b3VycyApOworCisgICAgICBGVF9PdXRsaW5lX0RvbmUoIGdseXBoLT5saWJyYXJ5LCBvdXRsaW5lICk7CisKKyAgICAgIGVycm9yID0gRlRfT3V0bGluZV9OZXcoIGdseXBoLT5saWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpbnVtX2NvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgb3V0bGluZS0+bl9wb2ludHMgICA9IDA7CisgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzID0gMDsKKworICAgICAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIoIHN0cm9rZXIsIGJvcmRlciwgb3V0bGluZSApOworICAgIH0KKworICAgIGlmICggZGVzdHJveSApCisgICAgICBGVF9Eb25lX0dseXBoKCAqcGdseXBoICk7CisKKyAgICAqcGdseXBoID0gZ2x5cGg7CisgICAgZ290byBFeGl0OworCisgIEZhaWw6CisgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGggKTsKKyAgICBnbHlwaCA9IE5VTEw7CisKKyAgICBpZiAoICFkZXN0cm95ICkKKyAgICAgICpwZ2x5cGggPSBOVUxMOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnRzeW50aC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3ludGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY4NTMzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3ludGguYwpAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRzeW50aC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgKGJvZHkpLiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX1NZTlRIRVNJU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX09VVExJTkVfSAorI2luY2x1ZGUgRlRfQklUTUFQX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3N5bnRoCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgIEVYUEVSSU1FTlRBTCBPQkxJUVVJTkcgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0c3ludGguaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9HbHlwaFNsb3RfT2JsaXF1ZSggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgeworICAgIEZUX01hdHJpeCAgICB0cmFuc2Zvcm07CisgICAgRlRfT3V0bGluZSogIG91dGxpbmU7CisKKworICAgIGlmICggIXNsb3QgKQorICAgICAgcmV0dXJuOworCisgICAgb3V0bGluZSA9ICZzbG90LT5vdXRsaW5lOworCisgICAgLyogb25seSBvYmxpcXVlIG91dGxpbmUgZ2x5cGhzICovCisgICAgaWYgKCBzbG90LT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgcmV0dXJuOworCisgICAgLyogd2UgZG9uJ3QgdG91Y2ggdGhlIGFkdmFuY2Ugd2lkdGggKi8KKworICAgIC8qIEZvciBpdGFsaWMsIHNpbXBseSBhcHBseSBhIHNoZWFyIHRyYW5zZm9ybSwgd2l0aCBhbiBhbmdsZSAqLworICAgIC8qIG9mIGFib3V0IDEyIGRlZ3JlZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgdHJhbnNmb3JtLnh4ID0gMHgxMDAwMEw7CisgICAgdHJhbnNmb3JtLnl4ID0gMHgwMDAwMEw7CisKKyAgICB0cmFuc2Zvcm0ueHkgPSAweDAzNjZBTDsKKyAgICB0cmFuc2Zvcm0ueXkgPSAweDEwMDAwTDsKKworICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCBvdXRsaW5lLCAmdHJhbnNmb3JtICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgRVhQRVJJTUVOVEFMIEVNQk9MREVOSU5HIFNVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN5bnRoLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfR2x5cGhTbG90X0VtYm9sZGVuKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICBGVF9GYWNlICAgICBmYWNlOworICAgIEZUX0Vycm9yICAgIGVycm9yOworICAgIEZUX1BvcyAgICAgIHhzdHIsIHlzdHI7CisKKworICAgIGlmICggIXNsb3QgKQorICAgICAgcmV0dXJuOworCisgICAgbGlicmFyeSA9IHNsb3QtPmxpYnJhcnk7CisgICAgZmFjZSAgICA9IHNsb3QtPmZhY2U7CisKKyAgICBpZiAoIHNsb3QtPmZvcm1hdCAhPSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSAmJgorICAgICAgICAgc2xvdC0+Zm9ybWF0ICE9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgICkKKyAgICAgIHJldHVybjsKKworICAgIC8qIHNvbWUgcmVhc29uYWJsZSBzdHJlbmd0aCAqLworICAgIHhzdHIgPSBGVF9NdWxGaXgoIGZhY2UtPnVuaXRzX3Blcl9FTSwKKyAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnlfc2NhbGUgKSAvIDI0OworICAgIHlzdHIgPSB4c3RyOworCisgICAgaWYgKCBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCAmc2xvdC0+b3V0bGluZSwgeHN0ciwgeXN0ciApOworCisgICAgZWxzZSAvKiBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCAqLworICAgIHsKKyAgICAgIC8qIHJvdW5kIHRvIGZ1bGwgcGl4ZWxzICovCisgICAgICB4c3RyICY9IH42MzsKKyAgICAgIGlmICggeHN0ciA9PSAwICkKKyAgICAgICAgeHN0ciA9IDEgPDwgNjsKKyAgICAgIHlzdHIgJj0gfjYzOworCisgICAgICAvKgorICAgICAgICogWFhYOiBvdmVyZmxvdyBjaGVjayBmb3IgMTYtYml0IHN5c3RlbSwgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAqICAgICAgd2l0aCBGVF9HbHlwaFNsb3RfRW1ib2xkZW4oKSBzaW5jZSBmcmVldHlwZS0yLjEuMTAuCisgICAgICAgKiAgICAgIHVuZm9ydHVuYXRlbHksIHRoaXMgZnVuY3Rpb24gcmV0dXJuIG5vIGluZm9ybWF0aW9ucworICAgICAgICogICAgICBhYm91dCB0aGUgY2F1c2Ugb2YgZXJyb3IuCisgICAgICAgKi8KKyAgICAgIGlmICggKCB5c3RyID4+IDYgKSA+IEZUX0lOVF9NQVggfHwgKCB5c3RyID4+IDYgKSA8IEZUX0lOVF9NSU4gKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiRlRfR2x5cGhTbG90X0VtYm9sZGVuOiIgKSk7CisgICAgICAgIEZUX1RSQUNFMSgoICJ0b28gc3Ryb25nIGVtYm9sZGluZyBwYXJhbWV0ZXIgeXN0cj0lZFxuIiwgeXN0ciApKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZXJyb3IgPSBGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCggc2xvdCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHJldHVybjsKKworICAgICAgZXJyb3IgPSBGVF9CaXRtYXBfRW1ib2xkZW4oIGxpYnJhcnksICZzbG90LT5iaXRtYXAsIHhzdHIsIHlzdHIgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBzbG90LT5hZHZhbmNlLnggKQorICAgICAgc2xvdC0+YWR2YW5jZS54ICs9IHhzdHI7CisKKyAgICBpZiAoIHNsb3QtPmFkdmFuY2UueSApCisgICAgICBzbG90LT5hZHZhbmNlLnkgKz0geXN0cjsKKworICAgIHNsb3QtPm1ldHJpY3Mud2lkdGggICAgICAgICs9IHhzdHI7CisgICAgc2xvdC0+bWV0cmljcy5oZWlnaHQgICAgICAgKz0geXN0cjsKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlICArPSB4c3RyOworICAgIHNsb3QtPm1ldHJpY3MudmVydEFkdmFuY2UgICs9IHlzdHI7CisgICAgc2xvdC0+bWV0cmljcy5ob3JpQmVhcmluZ1kgKz0geXN0cjsKKworICAgIC8qIFhYWDogMTYtYml0IG92ZXJmbG93IGNhc2UgbXVzdCBiZSBleGNsdWRlZCBiZWZvcmUgaGVyZSAqLworICAgIGlmICggc2xvdC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgKQorICAgICAgc2xvdC0+Yml0bWFwX3RvcCArPSAoRlRfSW50KSggeXN0ciA+PiA2ICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0c3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzOGZkOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHN5c3RlbS5jCkBAIC0wLDAgKzEsMzIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHN5c3RlbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQU5TSS1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IGludGVyZmFjZSB1c2VkIGJ5IEZyZWVUeXBlIHRvIGFjY2VzcyAgICovCisgIC8qIGxvdy1sZXZlbCwgaS5lLiBtZW1vcnkgbWFuYWdlbWVudCwgaS9vIGFjY2VzcyBhcyB3ZWxsIGFzIHRocmVhZCAgICAgICAqLworICAvKiBzeW5jaHJvbmlzYXRpb24uICBJdCBjYW4gYmUgcmVwbGFjZWQgYnkgdXNlci1zcGVjaWZpYyByb3V0aW5lcyBpZiAgICAgKi8KKyAgLyogbmVjZXNzYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSBGVF9FUlJPUlNfSAorI2luY2x1ZGUgRlRfVFlQRVNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkbyBhbnkgZXJyb3IgY2hlY2tpbmcgZm9yIHRoZSAgICAgICAgICAgICAgICAgICovCisgIC8qIGFsbG9jYXRpb24tcmVsYXRlZCBmdW5jdGlvbnMuICBUaGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgaGlnaGVyIGxldmVsICAqLworICAvKiByb3V0aW5lcyBsaWtlIGZ0X21lbV9hbGxvYygpIG9yIGZ0X21lbV9yZWFsbG9jKCkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgOjogVGhlIHJlcXVlc3RlZCBzaXplIGluIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYWRkcmVzcyBvZiBuZXdseSBhbGxvY2F0ZWQgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQorICBmdF9hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKQorICB7CisgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKworICAgIHJldHVybiBmdF9zbWFsbG9jKCAoc2l6ZV90KXNpemUgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfcmVhbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1lbW9yeSByZWFsbG9jYXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgOjogQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdXJfc2l6ZSA6OiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5ld19zaXplIDo6IFRoZSBuZXdseSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxvY2sgICAgOjogVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgYmxvY2sgaW4gbWVtb3J5LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlYWxsb2NhdGVkIG1lbW9yeSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQqICkKKyAgZnRfcmVhbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgIGxvbmcgICAgICAgY3VyX3NpemUsCisgICAgICAgICAgICAgIGxvbmcgICAgICAgbmV3X3NpemUsCisgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKQorICB7CisgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKyAgICBGVF9VTlVTRUQoIGN1cl9zaXplICk7CisKKyAgICByZXR1cm4gZnRfc3JlYWxsb2MoIGJsb2NrLCAoc2l6ZV90KW5ld19zaXplICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBtZW1vcnkgcmVsZWFzZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSAgOjogQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxvY2sgICA6OiBUaGUgYWRkcmVzcyBvZiBibG9jayBpbiBtZW1vcnkgdG8gYmUgZnJlZWQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9mcmVlKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgdm9pZCogICAgICBibG9jayApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1lbW9yeSApOworCisgICAgZnRfc2ZyZWUoIGJsb2NrICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRSBNQU5BR0VNRU5UIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX0RJU0FCTEVfU1RSRUFNX1NVUFBPUlQKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9pbworCisgIC8qIFdlIHVzZSB0aGUgbWFjcm8gU1RSRUFNX0ZJTEUgZm9yIGNvbnZlbmllbmNlIHRvIGV4dHJhY3QgdGhlICAgICAgICovCisgIC8qIHN5c3RlbS1zcGVjaWZpYyBzdHJlYW0gaGFuZGxlIGZyb20gYSBnaXZlbiBGcmVlVHlwZSBzdHJlYW0gb2JqZWN0ICovCisjZGVmaW5lIFNUUkVBTV9GSUxFKCBzdHJlYW0gKSAgKCAoRlRfRklMRSopc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfYW5zaV9zdHJlYW1fY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZ1bmN0aW9uIHRvIGNsb3NlIGEgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtIDo6IEEgcG9pbnRlciB0byB0aGUgc3RyZWFtIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdF9hbnNpX3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgZnRfZmNsb3NlKCBTVFJFQU1fRklMRSggc3RyZWFtICkgKTsKKworICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gTlVMTDsKKyAgICBzdHJlYW0tPnNpemUgICAgICAgICAgICAgICA9IDA7CisgICAgc3RyZWFtLT5iYXNlICAgICAgICAgICAgICAgPSBOVUxMOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9hbnNpX3N0cmVhbV9pbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZnVuY3Rpb24gdG8gb3BlbiBhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9mZnNldCA6OiBUaGUgcG9zaXRpb24gaW4gdGhlIGRhdGEgc3RyZWFtIHRvIHN0YXJ0IHJlYWRpbmcuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVmZmVyIDo6IFRoZSBhZGRyZXNzIG9mIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb3VudCAgOjogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlIHN0cmVhbS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQuICBJZiBgY291bnQnIGlzIHplcm8gKHRoaXMgaXMsICAgKi8KKyAgLyogICAgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHNlZWtpbmcpLCBhIG5vbi16ZXJvIHJldHVybiB2YWx1ZSAgICAgICAgICovCisgIC8qICAgIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB1bnNpZ25lZCBsb25nICkKKyAgZnRfYW5zaV9zdHJlYW1faW8oIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBjb3VudCApCisgIHsKKyAgICBGVF9GSUxFKiAgZmlsZTsKKworCisgICAgaWYgKCAhY291bnQgJiYgb2Zmc2V0ID4gc3RyZWFtLT5zaXplICkKKyAgICAgIHJldHVybiAxOworCisgICAgZmlsZSA9IFNUUkVBTV9GSUxFKCBzdHJlYW0gKTsKKworICAgIGlmICggc3RyZWFtLT5wb3MgIT0gb2Zmc2V0ICkKKyAgICAgIGZ0X2ZzZWVrKCBmaWxlLCAobG9uZylvZmZzZXQsIFNFRUtfU0VUICk7CisKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnRfZnJlYWQoIGJ1ZmZlciwgMSwgY291bnQsIGZpbGUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cmVhbS5oICovCisKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX09wZW4oIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lICkKKyAgeworICAgIEZUX0ZJTEUqICBmaWxlOworCisKKyAgICBpZiAoICFzdHJlYW0gKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9IYW5kbGUgKTsKKworICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gTlVMTDsKKyAgICBzdHJlYW0tPnBhdGhuYW1lLnBvaW50ZXIgICA9IChjaGFyKilmaWxlcGF0aG5hbWU7CisgICAgc3RyZWFtLT5iYXNlICAgICAgICAgICAgICAgPSBOVUxMOworICAgIHN0cmVhbS0+cG9zICAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPnJlYWQgICAgICAgICAgICAgICA9IE5VTEw7CisgICAgc3RyZWFtLT5jbG9zZSAgICAgICAgICAgICAgPSBOVUxMOworCisgICAgZmlsZSA9IGZ0X2ZvcGVuKCBmaWxlcGF0aG5hbWUsICJyYiIgKTsKKyAgICBpZiAoICFmaWxlICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiCisgICAgICAgICAgICAgICAgICIgY291bGQgbm90IG9wZW4gYCVzJ1xuIiwgZmlsZXBhdGhuYW1lICkpOworCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisgICAgfQorCisgICAgZnRfZnNlZWsoIGZpbGUsIDAsIFNFRUtfRU5EICk7CisgICAgc3RyZWFtLT5zaXplID0gKHVuc2lnbmVkIGxvbmcpZnRfZnRlbGwoIGZpbGUgKTsKKyAgICBpZiAoICFzdHJlYW0tPnNpemUgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX1N0cmVhbV9PcGVuOiIgKSk7CisgICAgICBGVF9FUlJPUigoICIgb3BlbmVkIGAlcycgYnV0IHplcm8tc2l6ZWRcbiIsIGZpbGVwYXRobmFtZSApKTsKKyAgICAgIGZ0X2ZjbG9zZSggZmlsZSApOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9TdHJlYW0gKTsKKyAgICB9CisgICAgZnRfZnNlZWsoIGZpbGUsIDAsIFNFRUtfU0VUICk7CisKKyAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IGZpbGU7CisgICAgc3RyZWFtLT5yZWFkICA9IGZ0X2Fuc2lfc3RyZWFtX2lvOworICAgIHN0cmVhbS0+Y2xvc2UgPSBmdF9hbnNpX3N0cmVhbV9jbG9zZTsKKworICAgIEZUX1RSQUNFMSgoICJGVF9TdHJlYW1fT3BlbjoiICkpOworICAgIEZUX1RSQUNFMSgoICIgb3BlbmVkIGAlcycgKCVkIGJ5dGVzKSBzdWNjZXNzZnVsbHlcbiIsCisgICAgICAgICAgICAgICAgZmlsZXBhdGhuYW1lLCBzdHJlYW0tPnNpemUgKSk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9ESVNBQkxFX1NUUkVBTV9TVVBQT1JUICovCisKKyNpZmRlZiBGVF9ERUJVR19NRU1PUlkKKworICBleHRlcm4gRlRfSW50CisgIGZ0X21lbV9kZWJ1Z19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIGV4dGVybiB2b2lkCisgIGZ0X21lbV9kZWJ1Z19kb25lKCBGVF9NZW1vcnkgIG1lbW9yeSApOworCisjZW5kaWYKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KKworICBGVF9CQVNFX0RFRiggRlRfTWVtb3J5ICkKKyAgRlRfTmV3X01lbW9yeSggdm9pZCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKworCisgICAgbWVtb3J5ID0gKEZUX01lbW9yeSlmdF9zbWFsbG9jKCBzaXplb2YgKCAqbWVtb3J5ICkgKTsKKyAgICBpZiAoIG1lbW9yeSApCisgICAgeworICAgICAgbWVtb3J5LT51c2VyICAgID0gTlVMTDsKKyAgICAgIG1lbW9yeS0+YWxsb2MgICA9IGZ0X2FsbG9jOworICAgICAgbWVtb3J5LT5yZWFsbG9jID0gZnRfcmVhbGxvYzsKKyAgICAgIG1lbW9yeS0+ZnJlZSAgICA9IGZ0X2ZyZWU7CisjaWZkZWYgRlRfREVCVUdfTUVNT1JZCisgICAgICBmdF9tZW1fZGVidWdfaW5pdCggbWVtb3J5ICk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gbWVtb3J5OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9Eb25lX01lbW9yeSggRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisjaWZkZWYgRlRfREVCVUdfTUVNT1JZCisgICAgZnRfbWVtX2RlYnVnX2RvbmUoIG1lbW9yeSApOworI2VuZGlmCisgICAgZnRfc2ZyZWUoIG1lbW9yeSApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnR0cmlnb24uYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHRyaWdvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnR0cmlnb24uYwpAQCAtMCwwICsxLDUyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnR0cmlnb24uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaXMgYSBmaXhlZC1wb2ludCBDT1JESUMgaW1wbGVtZW50YXRpb24gb2YgdHJpZ29ub21ldHJpYyAgICAgICAgICAqLworICAvKiBmdW5jdGlvbnMgYXMgd2VsbCBhcyB0cmFuc2Zvcm1hdGlvbnMgYmV0d2VlbiBDYXJ0ZXNpYW4gYW5kIHBvbGFyICAgICAgKi8KKyAgLyogY29vcmRpbmF0ZXMuICBUaGUgYW5nbGVzIGFyZSByZXByZXNlbnRlZCBhcyAxNi4xNiBmaXhlZC1wb2ludCB2YWx1ZXMgICovCisgIC8qIGluIGRlZ3JlZXMsIGkuZS4sIHRoZSBhbmd1bGFyIHJlc29sdXRpb24gaXMgMl4tMTYgZGVncmVlcy4gIE5vdGUgdGhhdCAqLworICAvKiBvbmx5IHZlY3RvcnMgbG9uZ2VyIHRoYW4gMl4xNioxODAvcGkgKG9yIGF0IGxlYXN0IDIyIGJpdHMpIG9uIGEgICAgICAgKi8KKyAgLyogZGlzY3JldGUgQ2FydGVzaWFuIGdyaWQgY2FuIGhhdmUgdGhlIHNhbWUgb3IgYmV0dGVyIGFuZ3VsYXIgICAgICAgICAgICovCisgIC8qIHJlc29sdXRpb24uICBUaGVyZWZvcmUsIHRvIG1haW50YWluIHRoaXMgcHJlY2lzaW9uLCBzb21lIGZ1bmN0aW9ucyAgICAqLworICAvKiByZXF1aXJlIGFuIGludGVyaW0gdXBzY2FsaW5nIG9mIHRoZSB2ZWN0b3JzLCB3aGVyZWFzIG90aGVycyBvcGVyYXRlICAgKi8KKyAgLyogd2l0aCAyNC1iaXQgbG9uZyB2ZWN0b3JzIGRpcmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfVFJJR09OT01FVFJZX0gKKworCisgIC8qIHRoZSBDb3JkaWMgc2hyaW5rIGZhY3RvciAwLjg1ODc4NTMzNjQ4MDQzNiAqIDJeMzIgKi8KKyNkZWZpbmUgRlRfVFJJR19TQ0FMRSAgICAgIDB4REJEOTVCMTZVTAorCisgIC8qIHRoZSBoaWdoZXN0IGJpdCBpbiBvdmVyZmxvdy1zYWZlIHZlY3RvciBjb21wb25lbnRzLCAqLworICAvKiBNU0Igb2YgMC44NTg3ODUzMzY0ODA0MzYgKiBzcXJ0KDAuNSkgKiAyXjMwICAgICAgICAgKi8KKyNkZWZpbmUgRlRfVFJJR19TQUZFX01TQiAgIDI5CisKKyAgLyogdGhpcyB0YWJsZSB3YXMgZ2VuZXJhdGVkIGZvciBGVF9QSSA9IDE4MEwgPDwgMTYsIGkuZS4gZGVncmVlcyAqLworI2RlZmluZSBGVF9UUklHX01BWF9JVEVSUyAgMjMKKworICBzdGF0aWMgY29uc3QgRlRfQW5nbGUKKyAgZnRfdHJpZ19hcmN0YW5fdGFibGVbXSA9CisgIHsKKyAgICAxNzQwOTY3TCwgOTE5ODc5TCwgNDY2OTQ1TCwgMjM0Mzc5TCwgMTE3MzA0TCwgNTg2NjZMLCAyOTMzNUwsCisgICAgMTQ2NjhMLCA3MzM0TCwgMzY2N0wsIDE4MzNMLCA5MTdMLCA0NThMLCAyMjlMLCAxMTVMLAorICAgIDU3TCwgMjlMLCAxNEwsIDdMLCA0TCwgMkwsIDFMCisgIH07CisKKworI2lmZGVmIEZUX0xPTkc2NAorCisgIC8qIG11bHRpcGx5IGEgZ2l2ZW4gdmFsdWUgYnkgdGhlIENPUkRJQyBzaHJpbmsgZmFjdG9yICovCisgIHN0YXRpYyBGVF9GaXhlZAorICBmdF90cmlnX2Rvd25zY2FsZSggRlRfRml4ZWQgIHZhbCApCisgIHsKKyAgICBGVF9JbnQgIHMgPSAxOworCisKKyAgICBpZiAoIHZhbCA8IDAgKQorICAgIHsKKyAgICAgICB2YWwgPSAtdmFsOworICAgICAgIHMgPSAtMTsKKyAgICB9CisKKyAgICAvKiAweDQwMDAwMDAwIGNvbWVzIGZyb20gcmVncmVzc2lvbiBhbmFseXNpcyBiZXR3ZWVuIHRydWUgKi8KKyAgICAvKiBhbmQgQ09SRElDIGh5cG90ZW51c2UsIHNvIGl0IG1pbmltaXplcyB0aGUgZXJyb3IgICAgICAgKi8KKyAgICB2YWwgPSAoRlRfRml4ZWQpKCAoIChGVF9JbnQ2NCl2YWwgKiBGVF9UUklHX1NDQUxFICsgMHg0MDAwMDAwMFVMICkgPj4gMzIgKTsKKworICAgIHJldHVybiBzIDwgMCA/IC12YWwgOiB2YWw7CisgIH0KKworI2Vsc2UgLyogIUZUX0xPTkc2NCAqLworCisgIC8qIG11bHRpcGx5IGEgZ2l2ZW4gdmFsdWUgYnkgdGhlIENPUkRJQyBzaHJpbmsgZmFjdG9yICovCisgIHN0YXRpYyBGVF9GaXhlZAorICBmdF90cmlnX2Rvd25zY2FsZSggRlRfRml4ZWQgIHZhbCApCisgIHsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQzMiAgbG8xLCBoaTEsIGxvMiwgaGkyLCBsbywgaGksIGkxLCBpMjsKKworCisgICAgaWYgKCB2YWwgPCAwICkKKyAgICB7CisgICAgICAgdmFsID0gLXZhbDsKKyAgICAgICBzID0gLTE7CisgICAgfQorCisgICAgbG8xID0gKEZUX1VJbnQzMil2YWwgJiAweDAwMDBGRkZGVTsKKyAgICBoaTEgPSAoRlRfVUludDMyKXZhbCA+PiAxNjsKKyAgICBsbzIgPSBGVF9UUklHX1NDQUxFICYgMHgwMDAwRkZGRlU7CisgICAgaGkyID0gRlRfVFJJR19TQ0FMRSA+PiAxNjsKKworICAgIGxvID0gbG8xICogbG8yOworICAgIGkxID0gbG8xICogaGkyOworICAgIGkyID0gbG8yICogaGkxOworICAgIGhpID0gaGkxICogaGkyOworCisgICAgLyogQ2hlY2sgY2Fycnkgb3ZlcmZsb3cgb2YgaTEgKyBpMiAqLworICAgIGkxICs9IGkyOworICAgIGhpICs9IChGVF9VSW50MzIpKCBpMSA8IGkyICkgPDwgMTY7CisKKyAgICBoaSArPSBpMSA+PiAxNjsKKyAgICBpMSAgPSBpMSA8PCAxNjsKKworICAgIC8qIENoZWNrIGNhcnJ5IG92ZXJmbG93IG9mIGkxICsgbG8gKi8KKyAgICBsbyArPSBpMTsKKyAgICBoaSArPSAoIGxvIDwgaTEgKTsKKworICAgIC8qIDB4NDAwMDAwMDAgY29tZXMgZnJvbSByZWdyZXNzaW9uIGFuYWx5c2lzIGJldHdlZW4gdHJ1ZSAqLworICAgIC8qIGFuZCBDT1JESUMgaHlwb3RlbnVzZSwgc28gaXQgbWluaW1pemVzIHRoZSBlcnJvciAgICAgICAqLworCisgICAgLyogQ2hlY2sgY2Fycnkgb3ZlcmZsb3cgb2YgbG8gKyAweDQwMDAwMDAwICovCisgICAgbG8gKz0gMHg0MDAwMDAwMFVMOworICAgIGhpICs9ICggbG8gPCAweDQwMDAwMDAwVUwgKTsKKworICAgIHZhbCA9IChGVF9GaXhlZCloaTsKKworICAgIHJldHVybiBzIDwgMCA/IC12YWwgOiB2YWw7CisgIH0KKworI2VuZGlmIC8qICFGVF9MT05HNjQgKi8KKworCisgIC8qIHVuZGVmaW5lZCBhbmQgbmV2ZXIgY2FsbGVkIGZvciB6ZXJvIHZlY3RvciAqLworICBzdGF0aWMgRlRfSW50CisgIGZ0X3RyaWdfcHJlbm9ybSggRlRfVmVjdG9yKiAgdmVjICkKKyAgeworICAgIEZUX1BvcyAgeCwgeTsKKyAgICBGVF9JbnQgIHNoaWZ0OworCisKKyAgICB4ID0gdmVjLT54OworICAgIHkgPSB2ZWMtPnk7CisKKyAgICBzaGlmdCA9IEZUX01TQiggKEZUX1VJbnQzMikoIEZUX0FCUyggeCApIHwgRlRfQUJTKCB5ICkgKSApOworCisgICAgaWYgKCBzaGlmdCA8PSBGVF9UUklHX1NBRkVfTVNCICkKKyAgICB7CisgICAgICBzaGlmdCAgPSBGVF9UUklHX1NBRkVfTVNCIC0gc2hpZnQ7CisgICAgICB2ZWMtPnggPSAoRlRfUG9zKSggKEZUX1VMb25nKXggPDwgc2hpZnQgKTsKKyAgICAgIHZlYy0+eSA9IChGVF9Qb3MpKCAoRlRfVUxvbmcpeSA8PCBzaGlmdCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2hpZnQgLT0gRlRfVFJJR19TQUZFX01TQjsKKyAgICAgIHZlYy0+eCA9IHggPj4gc2hpZnQ7CisgICAgICB2ZWMtPnkgPSB5ID4+IHNoaWZ0OworICAgICAgc2hpZnQgID0gLXNoaWZ0OworICAgIH0KKworICAgIHJldHVybiBzaGlmdDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfdHJpZ19wc2V1ZG9fcm90YXRlKCBGVF9WZWN0b3IqICB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAgdGhldGEgKQorICB7CisgICAgRlRfSW50ICAgICAgICAgICBpOworICAgIEZUX0ZpeGVkICAgICAgICAgeCwgeSwgeHRlbXAsIGI7CisgICAgY29uc3QgRlRfQW5nbGUgICphcmN0YW5wdHI7CisKKworICAgIHggPSB2ZWMtPng7CisgICAgeSA9IHZlYy0+eTsKKworICAgIC8qIFJvdGF0ZSBpbnNpZGUgWy1QSS80LFBJLzRdIHNlY3RvciAqLworICAgIHdoaWxlICggdGhldGEgPCAtRlRfQU5HTEVfUEk0ICkKKyAgICB7CisgICAgICB4dGVtcCAgPSAgeTsKKyAgICAgIHkgICAgICA9IC14OworICAgICAgeCAgICAgID0gIHh0ZW1wOworICAgICAgdGhldGEgKz0gIEZUX0FOR0xFX1BJMjsKKyAgICB9CisKKyAgICB3aGlsZSAoIHRoZXRhID4gRlRfQU5HTEVfUEk0ICkKKyAgICB7CisgICAgICB4dGVtcCAgPSAteTsKKyAgICAgIHkgICAgICA9ICB4OworICAgICAgeCAgICAgID0gIHh0ZW1wOworICAgICAgdGhldGEgLT0gIEZUX0FOR0xFX1BJMjsKKyAgICB9CisKKyAgICBhcmN0YW5wdHIgPSBmdF90cmlnX2FyY3Rhbl90YWJsZTsKKworICAgIC8qIFBzZXVkb3JvdGF0aW9ucywgd2l0aCByaWdodCBzaGlmdHMgKi8KKyAgICBmb3IgKCBpID0gMSwgYiA9IDE7IGkgPCBGVF9UUklHX01BWF9JVEVSUzsgYiA8PD0gMSwgaSsrICkKKyAgICB7CisgICAgICBpZiAoIHRoZXRhIDwgMCApCisgICAgICB7CisgICAgICAgIHh0ZW1wICA9IHggKyAoICggeSArIGIgKSA+PiBpICk7CisgICAgICAgIHkgICAgICA9IHkgLSAoICggeCArIGIgKSA+PiBpICk7CisgICAgICAgIHggICAgICA9IHh0ZW1wOworICAgICAgICB0aGV0YSArPSAqYXJjdGFucHRyKys7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHh0ZW1wICA9IHggLSAoICggeSArIGIgKSA+PiBpICk7CisgICAgICAgIHkgICAgICA9IHkgKyAoICggeCArIGIgKSA+PiBpICk7CisgICAgICAgIHggICAgICA9IHh0ZW1wOworICAgICAgICB0aGV0YSAtPSAqYXJjdGFucHRyKys7CisgICAgICB9CisgICAgfQorCisgICAgdmVjLT54ID0geDsKKyAgICB2ZWMtPnkgPSB5OworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF90cmlnX3BzZXVkb19wb2xhcml6ZSggRlRfVmVjdG9yKiAgdmVjICkKKyAgeworICAgIEZUX0FuZ2xlICAgICAgICAgdGhldGE7CisgICAgRlRfSW50ICAgICAgICAgICBpOworICAgIEZUX0ZpeGVkICAgICAgICAgeCwgeSwgeHRlbXAsIGI7CisgICAgY29uc3QgRlRfQW5nbGUgICphcmN0YW5wdHI7CisKKworICAgIHggPSB2ZWMtPng7CisgICAgeSA9IHZlYy0+eTsKKworICAgIC8qIEdldCB0aGUgdmVjdG9yIGludG8gWy1QSS80LFBJLzRdIHNlY3RvciAqLworICAgIGlmICggeSA+IHggKQorICAgIHsKKyAgICAgIGlmICggeSA+IC14ICkKKyAgICAgIHsKKyAgICAgICAgdGhldGEgPSAgRlRfQU5HTEVfUEkyOworICAgICAgICB4dGVtcCA9ICB5OworICAgICAgICB5ICAgICA9IC14OworICAgICAgICB4ICAgICA9ICB4dGVtcDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhldGEgPSAgeSA+IDAgPyBGVF9BTkdMRV9QSSA6IC1GVF9BTkdMRV9QSTsKKyAgICAgICAgeCAgICAgPSAteDsKKyAgICAgICAgeSAgICAgPSAteTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggeSA8IC14ICkKKyAgICAgIHsKKyAgICAgICAgdGhldGEgPSAtRlRfQU5HTEVfUEkyOworICAgICAgICB4dGVtcCA9IC15OworICAgICAgICB5ICAgICA9ICB4OworICAgICAgICB4ICAgICA9ICB4dGVtcDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhldGEgPSAwOworICAgICAgfQorICAgIH0KKworICAgIGFyY3RhbnB0ciA9IGZ0X3RyaWdfYXJjdGFuX3RhYmxlOworCisgICAgLyogUHNldWRvcm90YXRpb25zLCB3aXRoIHJpZ2h0IHNoaWZ0cyAqLworICAgIGZvciAoIGkgPSAxLCBiID0gMTsgaSA8IEZUX1RSSUdfTUFYX0lURVJTOyBiIDw8PSAxLCBpKysgKQorICAgIHsKKyAgICAgIGlmICggeSA+IDAgKQorICAgICAgeworICAgICAgICB4dGVtcCAgPSB4ICsgKCAoIHkgKyBiICkgPj4gaSApOworICAgICAgICB5ICAgICAgPSB5IC0gKCAoIHggKyBiICkgPj4gaSApOworICAgICAgICB4ICAgICAgPSB4dGVtcDsKKyAgICAgICAgdGhldGEgKz0gKmFyY3RhbnB0cisrOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB4dGVtcCAgPSB4IC0gKCAoIHkgKyBiICkgPj4gaSApOworICAgICAgICB5ICAgICAgPSB5ICsgKCAoIHggKyBiICkgPj4gaSApOworICAgICAgICB4ICAgICAgPSB4dGVtcDsKKyAgICAgICAgdGhldGEgLT0gKmFyY3RhbnB0cisrOworICAgICAgfQorICAgIH0KKworICAgIC8qIHJvdW5kIHRoZXRhIHRvIGFja25vd2xlZGdlIGl0cyBlcnJvciB0aGF0IG1vc3RseSBjb21lcyAqLworICAgIC8qIGZyb20gYWNjdW11bGF0ZWQgcm91bmRpbmcgZXJyb3JzIGluIHRoZSBhcmN0YW4gdGFibGUgICAqLworICAgIGlmICggdGhldGEgPj0gMCApCisgICAgICB0aGV0YSA9IEZUX1BBRF9ST1VORCggdGhldGEsIDE2ICk7CisgICAgZWxzZQorICAgICAgdGhldGEgPSAtRlRfUEFEX1JPVU5EKCAtdGhldGEsIDE2ICk7CisKKyAgICB2ZWMtPnggPSB4OworICAgIHZlYy0+eSA9IHRoZXRhOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApCisgIEZUX0NvcyggRlRfQW5nbGUgIGFuZ2xlICkKKyAgeworICAgIEZUX1ZlY3RvciAgdjsKKworCisgICAgRlRfVmVjdG9yX1VuaXQoICZ2LCBhbmdsZSApOworCisgICAgcmV0dXJuIHYueDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9TaW4oIEZUX0FuZ2xlICBhbmdsZSApCisgIHsKKyAgICBGVF9WZWN0b3IgIHY7CisKKworICAgIEZUX1ZlY3Rvcl9Vbml0KCAmdiwgYW5nbGUgKTsKKworICAgIHJldHVybiB2Lnk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnR0cmlnb24uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKKyAgRlRfVGFuKCBGVF9BbmdsZSAgYW5nbGUgKQorICB7CisgICAgRlRfVmVjdG9yICB2OworCisKKyAgICBGVF9WZWN0b3JfVW5pdCggJnYsIGFuZ2xlICk7CisKKyAgICByZXR1cm4gRlRfRGl2Rml4KCB2LnksIHYueCApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9BbmdsZSApCisgIEZUX0F0YW4yKCBGVF9GaXhlZCAgZHgsCisgICAgICAgICAgICBGVF9GaXhlZCAgZHkgKQorICB7CisgICAgRlRfVmVjdG9yICB2OworCisKKyAgICBpZiAoIGR4ID09IDAgJiYgZHkgPT0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIHYueCA9IGR4OworICAgIHYueSA9IGR5OworICAgIGZ0X3RyaWdfcHJlbm9ybSggJnYgKTsKKyAgICBmdF90cmlnX3BzZXVkb19wb2xhcml6ZSggJnYgKTsKKworICAgIHJldHVybiB2Lnk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnR0cmlnb24uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9WZWN0b3JfVW5pdCggRlRfVmVjdG9yKiAgdmVjLAorICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAgYW5nbGUgKQorICB7CisgICAgaWYgKCAhdmVjICkKKyAgICAgIHJldHVybjsKKworICAgIHZlYy0+eCA9IEZUX1RSSUdfU0NBTEUgPj4gODsKKyAgICB2ZWMtPnkgPSAwOworICAgIGZ0X3RyaWdfcHNldWRvX3JvdGF0ZSggdmVjLCBhbmdsZSApOworICAgIHZlYy0+eCA9ICggdmVjLT54ICsgMHg4MEwgKSA+PiA4OworICAgIHZlYy0+eSA9ICggdmVjLT55ICsgMHg4MEwgKSA+PiA4OworICB9CisKKworICAvKiB0aGVzZSBtYWNyb3MgcmV0dXJuIDAgZm9yIHBvc2l0aXZlIG51bWJlcnMsCisgICAgIGFuZCAtMSBmb3IgbmVnYXRpdmUgb25lcyAqLworI2RlZmluZSBGVF9TSUdOX0xPTkcoIHggKSAgICggKHgpID4+ICggRlRfU0laRU9GX0xPTkcgKiA4IC0gMSApICkKKyNkZWZpbmUgRlRfU0lHTl9JTlQoIHggKSAgICAoICh4KSA+PiAoIEZUX1NJWkVPRl9JTlQgKiA4IC0gMSApICkKKyNkZWZpbmUgRlRfU0lHTl9JTlQzMiggeCApICAoICh4KSA+PiAzMSApCisjZGVmaW5lIEZUX1NJR05fSU5UMTYoIHggKSAgKCAoeCkgPj4gMTUgKQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1ZlY3Rvcl9Sb3RhdGUoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAgYW5nbGUgKQorICB7CisgICAgRlRfSW50ICAgICBzaGlmdDsKKyAgICBGVF9WZWN0b3IgIHY7CisKKworICAgIGlmICggIXZlYyB8fCAhYW5nbGUgKQorICAgICAgcmV0dXJuOworCisgICAgdiA9ICp2ZWM7CisKKyAgICBpZiAoIHYueCA9PSAwICYmIHYueSA9PSAwICkKKyAgICAgIHJldHVybjsKKworICAgIHNoaWZ0ID0gZnRfdHJpZ19wcmVub3JtKCAmdiApOworICAgIGZ0X3RyaWdfcHNldWRvX3JvdGF0ZSggJnYsIGFuZ2xlICk7CisgICAgdi54ID0gZnRfdHJpZ19kb3duc2NhbGUoIHYueCApOworICAgIHYueSA9IGZ0X3RyaWdfZG93bnNjYWxlKCB2LnkgKTsKKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICB7CisgICAgICBGVF9JbnQzMiAgaGFsZiA9IChGVF9JbnQzMikxTCA8PCAoIHNoaWZ0IC0gMSApOworCisKKyAgICAgIHZlYy0+eCA9ICggdi54ICsgaGFsZiArIEZUX1NJR05fTE9ORyggdi54ICkgKSA+PiBzaGlmdDsKKyAgICAgIHZlYy0+eSA9ICggdi55ICsgaGFsZiArIEZUX1NJR05fTE9ORyggdi55ICkgKSA+PiBzaGlmdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNoaWZ0ICA9IC1zaGlmdDsKKyAgICAgIHZlYy0+eCA9IChGVF9Qb3MpKCAoRlRfVUxvbmcpdi54IDw8IHNoaWZ0ICk7CisgICAgICB2ZWMtPnkgPSAoRlRfUG9zKSggKEZUX1VMb25nKXYueSA8PCBzaGlmdCApOworICAgIH0KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9WZWN0b3JfTGVuZ3RoKCBGVF9WZWN0b3IqICB2ZWMgKQorICB7CisgICAgRlRfSW50ICAgICBzaGlmdDsKKyAgICBGVF9WZWN0b3IgIHY7CisKKworICAgIGlmICggIXZlYyApCisgICAgICByZXR1cm4gMDsKKworICAgIHYgPSAqdmVjOworCisgICAgLyogaGFuZGxlIHRyaXZpYWwgY2FzZXMgKi8KKyAgICBpZiAoIHYueCA9PSAwICkKKyAgICB7CisgICAgICByZXR1cm4gRlRfQUJTKCB2LnkgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHYueSA9PSAwICkKKyAgICB7CisgICAgICByZXR1cm4gRlRfQUJTKCB2LnggKTsKKyAgICB9CisKKyAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICBzaGlmdCA9IGZ0X3RyaWdfcHJlbm9ybSggJnYgKTsKKyAgICBmdF90cmlnX3BzZXVkb19wb2xhcml6ZSggJnYgKTsKKworICAgIHYueCA9IGZ0X3RyaWdfZG93bnNjYWxlKCB2LnggKTsKKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICAgIHJldHVybiAoIHYueCArICggMUwgPDwgKCBzaGlmdCAtIDEgKSApICkgPj4gc2hpZnQ7CisKKyAgICByZXR1cm4gKEZUX0ZpeGVkKSggKEZUX1VJbnQzMil2LnggPDwgLXNoaWZ0ICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnR0cmlnb24uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9WZWN0b3JfUG9sYXJpemUoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAqYW5nbGUgKQorICB7CisgICAgRlRfSW50ICAgICBzaGlmdDsKKyAgICBGVF9WZWN0b3IgIHY7CisKKworICAgIGlmICggIXZlYyB8fCAhbGVuZ3RoIHx8ICFhbmdsZSApCisgICAgICByZXR1cm47CisKKyAgICB2ID0gKnZlYzsKKworICAgIGlmICggdi54ID09IDAgJiYgdi55ID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgc2hpZnQgPSBmdF90cmlnX3ByZW5vcm0oICZ2ICk7CisgICAgZnRfdHJpZ19wc2V1ZG9fcG9sYXJpemUoICZ2ICk7CisKKyAgICB2LnggPSBmdF90cmlnX2Rvd25zY2FsZSggdi54ICk7CisKKyAgICAqbGVuZ3RoID0gc2hpZnQgPj0gMCA/ICAgICAgICAgICAgICAgICAgICAgICggdi54ID4+ICBzaGlmdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAoRlRfRml4ZWQpKCAoRlRfVUludDMyKXYueCA8PCAtc2hpZnQgKTsKKyAgICAqYW5nbGUgID0gdi55OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfVmVjdG9yX0Zyb21fUG9sYXIoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIGFuZ2xlICkKKyAgeworICAgIGlmICggIXZlYyApCisgICAgICByZXR1cm47CisKKyAgICB2ZWMtPnggPSBsZW5ndGg7CisgICAgdmVjLT55ID0gMDsKKworICAgIEZUX1ZlY3Rvcl9Sb3RhdGUoIHZlYywgYW5nbGUgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfQW5nbGUgKQorICBGVF9BbmdsZV9EaWZmKCBGVF9BbmdsZSAgYW5nbGUxLAorICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgYW5nbGUyICkKKyAgeworICAgIEZUX0FuZ2xlICBkZWx0YSA9IGFuZ2xlMiAtIGFuZ2xlMTsKKworCisgICAgd2hpbGUgKCBkZWx0YSA8PSAtRlRfQU5HTEVfUEkgKQorICAgICAgZGVsdGEgKz0gRlRfQU5HTEVfMlBJOworCisgICAgd2hpbGUgKCBkZWx0YSA+IEZUX0FOR0xFX1BJICkKKyAgICAgIGRlbHRhIC09IEZUX0FOR0xFXzJQSTsKKworICAgIHJldHVybiBkZWx0YTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0dHlwZTEuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHR5cGUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0OTM4MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHR5cGUxLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dHlwZTEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIFBTIG5hbWVzIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0MXRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfUFNfRm9udF9JbmZvKCBGVF9GYWNlICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIFBTX0ZvbnRJbmZvUmVjKiAgYWZvbnRfaW5mbyApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisgICAgRlRfU2VydmljZV9Qc0luZm8gIHNlcnZpY2U7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisKKyAgICBpZiAoICFhZm9udF9pbmZvICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFBPU1RTQ1JJUFRfSU5GTyApOworCisgICAgaWYgKCBzZXJ2aWNlICYmIHNlcnZpY2UtPnBzX2dldF9mb250X2luZm8gKQorICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5wc19nZXRfZm9udF9pbmZvKCBmYWNlLCBhZm9udF9pbmZvICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIHQxdGFibGVzLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9JbnQgKQorICBGVF9IYXNfUFNfR2x5cGhfTmFtZXMoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfSW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgRlRfU2VydmljZV9Qc0luZm8gIHNlcnZpY2U7CisKKworICAgIGlmICggZmFjZSApCisgICAgeworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFBPU1RTQ1JJUFRfSU5GTyApOworCisgICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+cHNfaGFzX2dseXBoX25hbWVzICkKKyAgICAgICAgcmVzdWx0ID0gc2VydmljZS0+cHNfaGFzX2dseXBoX25hbWVzKCBmYWNlICk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0MXRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfUFNfRm9udF9Qcml2YXRlKCBGVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZVJlYyogIGFmb250X3ByaXZhdGUgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOworICAgIEZUX1NlcnZpY2VfUHNJbmZvICBzZXJ2aWNlOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhYWZvbnRfcHJpdmF0ZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBQT1NUU0NSSVBUX0lORk8gKTsKKworICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5wc19nZXRfZm9udF9wcml2YXRlICkKKyAgICAgIGVycm9yID0gc2VydmljZS0+cHNfZ2V0X2ZvbnRfcHJpdmF0ZSggZmFjZSwgYWZvbnRfcHJpdmF0ZSApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiB0MXRhYmxlcy5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX0dldF9QU19Gb250X1ZhbHVlKCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBQU19EaWN0X0tleXMgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgdmFsdWVfbGVuICkKKyAgeworICAgIEZUX0ludCAgICAgICAgICAgICByZXN1bHQgID0gMDsKKyAgICBGVF9TZXJ2aWNlX1BzSW5mbyAgc2VydmljZSA9IE5VTEw7CisKKworICAgIGlmICggZmFjZSApCisgICAgeworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFBPU1RTQ1JJUFRfSU5GTyApOworCisgICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+cHNfZ2V0X2ZvbnRfdmFsdWUgKQorICAgICAgICByZXN1bHQgPSBzZXJ2aWNlLT5wc19nZXRfZm9udF92YWx1ZSggZmFjZSwga2V5LCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdmFsdWVfbGVuICk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0dXRpbC5jIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL2Z0dXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjcyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnR1dGlsLmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dXRpbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIG1lbW9yeSBhbmQgbGlzdCBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9MSVNUX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX21lbW9yeQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICBNIEUgTSBPIFIgWSAgIE0gQSBOIEEgRyBFIE0gRSBOIFQgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgRlRfQkFTRV9ERUYoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICBGVF9FcnJvciAgKnBfZXJyb3IgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfUG9pbnRlciAgYmxvY2sgPSBmdF9tZW1fcWFsbG9jKCBtZW1vcnksIHNpemUsICZlcnJvciApOworCisgICAgaWYgKCAhZXJyb3IgJiYgc2l6ZSA+IDAgKQorICAgICAgRlRfTUVNX1pFUk8oIGJsb2NrLCBzaXplICk7CisKKyAgICAqcF9lcnJvciA9IGVycm9yOworICAgIHJldHVybiBibG9jazsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fcWFsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBzaXplLAorICAgICAgICAgICAgICAgICBGVF9FcnJvciAgKnBfZXJyb3IgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfUG9pbnRlciAgYmxvY2sgPSBOVUxMOworCisKKyAgICBpZiAoIHNpemUgPiAwICkKKyAgICB7CisgICAgICBibG9jayA9IG1lbW9yeS0+YWxsb2MoIG1lbW9yeSwgc2l6ZSApOworICAgICAgaWYgKCBibG9jayA9PSBOVUxMICkKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgIH0KKyAgICBlbHNlIGlmICggc2l6ZSA8IDAgKQorICAgIHsKKyAgICAgIC8qIG1heSBoZWxwIGNhdGNoL3ByZXZlbnQgc2VjdXJpdHkgaXNzdWVzICovCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgfQorCisgICAgKnBfZXJyb3IgPSBlcnJvcjsKKyAgICByZXR1cm4gYmxvY2s7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCBGVF9Qb2ludGVyICkKKyAgZnRfbWVtX3JlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBpdGVtX3NpemUsCisgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGN1cl9jb3VudCwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgbmV3X2NvdW50LAorICAgICAgICAgICAgICAgICAgdm9pZCogICAgICBibG9jaywKKyAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAqcF9lcnJvciApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGJsb2NrID0gZnRfbWVtX3FyZWFsbG9jKCBtZW1vcnksIGl0ZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2NvdW50LCBuZXdfY291bnQsIGJsb2NrLCAmZXJyb3IgKTsKKyAgICBpZiAoICFlcnJvciAmJiBuZXdfY291bnQgPiBjdXJfY291bnQgKQorICAgICAgRlRfTUVNX1pFUk8oIChjaGFyKilibG9jayArIGN1cl9jb3VudCAqIGl0ZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAoIG5ld19jb3VudCAtIGN1cl9jb3VudCApICogaXRlbV9zaXplICk7CisKKyAgICAqcF9lcnJvciA9IGVycm9yOworICAgIHJldHVybiBibG9jazsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX1BvaW50ZXIgKQorICBmdF9tZW1fcXJlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgaXRlbV9zaXplLAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgY3VyX2NvdW50LAorICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgbmV3X2NvdW50LAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IgICpwX2Vycm9yICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgLyogTm90ZSB0aGF0IHdlIG5vdyBhY2NlcHQgYGl0ZW1fc2l6ZSA9PSAwJyBhcyBhIHZhbGlkIHBhcmFtZXRlciwgaW4KKyAgICAgKiBvcmRlciB0byBjb3ZlciB2ZXJ5IHdlaXJkIGNhc2VzIHdoZXJlIGFuIEFMTE9DX01VTFQgbWFjcm8gd291bGQgYmUKKyAgICAgKiBjYWxsZWQuCisgICAgICovCisgICAgaWYgKCBjdXJfY291bnQgPCAwIHx8IG5ld19jb3VudCA8IDAgfHwgaXRlbV9zaXplIDwgMCApCisgICAgeworICAgICAgLyogbWF5IGhlbHAgY2F0Y2gvcHJldmVudCBuYXN0eSBzZWN1cml0eSBpc3N1ZXMgKi8KKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIG5ld19jb3VudCA9PSAwIHx8IGl0ZW1fc2l6ZSA9PSAwICkKKyAgICB7CisgICAgICBmdF9tZW1fZnJlZSggbWVtb3J5LCBibG9jayApOworICAgICAgYmxvY2sgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICggbmV3X2NvdW50ID4gRlRfSU5UX01BWC9pdGVtX3NpemUgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEFycmF5X1Rvb19MYXJnZSApOworICAgIH0KKyAgICBlbHNlIGlmICggY3VyX2NvdW50ID09IDAgKQorICAgIHsKKyAgICAgIEZUX0FTU0VSVCggYmxvY2sgPT0gTlVMTCApOworCisgICAgICBibG9jayA9IGZ0X21lbV9hbGxvYyggbWVtb3J5LCBuZXdfY291bnQqaXRlbV9zaXplLCAmZXJyb3IgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1BvaW50ZXIgIGJsb2NrMjsKKyAgICAgIEZUX0xvbmcgICAgIGN1cl9zaXplID0gY3VyX2NvdW50Kml0ZW1fc2l6ZTsKKyAgICAgIEZUX0xvbmcgICAgIG5ld19zaXplID0gbmV3X2NvdW50Kml0ZW1fc2l6ZTsKKworCisgICAgICBibG9jazIgPSBtZW1vcnktPnJlYWxsb2MoIG1lbW9yeSwgY3VyX3NpemUsIG5ld19zaXplLCBibG9jayApOworICAgICAgaWYgKCBibG9jazIgPT0gTlVMTCApCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgYmxvY2sgPSBibG9jazI7CisgICAgfQorCisgICAgKnBfZXJyb3IgPSBlcnJvcjsKKyAgICByZXR1cm4gYmxvY2s7CisgIH0KKworCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgZnRfbWVtX2ZyZWUoIEZUX01lbW9yeSAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKlAgKQorICB7CisgICAgaWYgKCBQICkKKyAgICAgIG1lbW9yeS0+ZnJlZSggbWVtb3J5LCAodm9pZCopUCApOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfUG9pbnRlciApCisgIGZ0X21lbV9kdXAoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBhZGRyZXNzLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgRlRfRXJyb3IgICAgKnBfZXJyb3IgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfUG9pbnRlciAgcCA9IGZ0X21lbV9xYWxsb2MoIG1lbW9yeSwgKEZUX0xvbmcpc2l6ZSwgJmVycm9yICk7CisKKworICAgIGlmICggIWVycm9yICYmIGFkZHJlc3MgKQorICAgICAgZnRfbWVtY3B5KCBwLCBhZGRyZXNzLCBzaXplICk7CisKKyAgICAqcF9lcnJvciA9IGVycm9yOworICAgIHJldHVybiBwOworICB9CisKKworICBGVF9CQVNFX0RFRiggRlRfUG9pbnRlciApCisgIGZ0X21lbV9zdHJkdXAoIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzdHIsCisgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAgICpwX2Vycm9yICkKKyAgeworICAgIEZUX1VMb25nICBsZW4gPSBzdHIgPyAoRlRfVUxvbmcpZnRfc3RybGVuKCBzdHIgKSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKworCisgICAgcmV0dXJuIGZ0X21lbV9kdXAoIG1lbW9yeSwgc3RyLCBsZW4sIHBfZXJyb3IgKTsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIEZUX0ludCApCisgIGZ0X21lbV9zdHJjcHluKCBjaGFyKiAgICAgICAgZHN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHNyYywKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBzaXplICkKKyAgeworICAgIHdoaWxlICggc2l6ZSA+IDEgJiYgKnNyYyAhPSAwICkKKyAgICB7CisgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICBzaXplLS07CisgICAgfQorCisgICAgKmRzdCA9IDA7ICAvKiBhbHdheXMgemVyby10ZXJtaW5hdGUgKi8KKworICAgIHJldHVybiAqc3JjICE9IDA7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgRCBPIFUgQiBMIFkgICBMIEkgTiBLIEUgRCAgIEwgSSBTIFQgUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9saXN0CisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0xpc3ROb2RlICkKKyAgRlRfTGlzdF9GaW5kKCBGVF9MaXN0ICBsaXN0LAorICAgICAgICAgICAgICAgIHZvaWQqICAgIGRhdGEgKQorICB7CisgICAgRlRfTGlzdE5vZGUgIGN1cjsKKworCisgICAgaWYgKCAhbGlzdCApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGN1ciA9IGxpc3QtPmhlYWQ7CisgICAgd2hpbGUgKCBjdXIgKQorICAgIHsKKyAgICAgIGlmICggY3VyLT5kYXRhID09IGRhdGEgKQorICAgICAgICByZXR1cm4gY3VyOworCisgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRsaXN0LmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTGlzdF9BZGQoIEZUX0xpc3QgICAgICBsaXN0LAorICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKQorICB7CisgICAgRlRfTGlzdE5vZGUgIGJlZm9yZTsKKworCisgICAgaWYgKCAhbGlzdCB8fCAhbm9kZSApCisgICAgICByZXR1cm47CisKKyAgICBiZWZvcmUgPSBsaXN0LT50YWlsOworCisgICAgbm9kZS0+bmV4dCA9IE5VTEw7CisgICAgbm9kZS0+cHJldiA9IGJlZm9yZTsKKworICAgIGlmICggYmVmb3JlICkKKyAgICAgIGJlZm9yZS0+bmV4dCA9IG5vZGU7CisgICAgZWxzZQorICAgICAgbGlzdC0+aGVhZCA9IG5vZGU7CisKKyAgICBsaXN0LT50YWlsID0gbm9kZTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9MaXN0X0luc2VydCggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgYWZ0ZXI7CisKKworICAgIGlmICggIWxpc3QgfHwgIW5vZGUgKQorICAgICAgcmV0dXJuOworCisgICAgYWZ0ZXIgPSBsaXN0LT5oZWFkOworCisgICAgbm9kZS0+bmV4dCA9IGFmdGVyOworICAgIG5vZGUtPnByZXYgPSBOVUxMOworCisgICAgaWYgKCAhYWZ0ZXIgKQorICAgICAgbGlzdC0+dGFpbCA9IG5vZGU7CisgICAgZWxzZQorICAgICAgYWZ0ZXItPnByZXYgPSBub2RlOworCisgICAgbGlzdC0+aGVhZCA9IG5vZGU7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRsaXN0LmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTGlzdF9SZW1vdmUoIEZUX0xpc3QgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKQorICB7CisgICAgRlRfTGlzdE5vZGUgIGJlZm9yZSwgYWZ0ZXI7CisKKworICAgIGlmICggIWxpc3QgfHwgIW5vZGUgKQorICAgICAgcmV0dXJuOworCisgICAgYmVmb3JlID0gbm9kZS0+cHJldjsKKyAgICBhZnRlciAgPSBub2RlLT5uZXh0OworCisgICAgaWYgKCBiZWZvcmUgKQorICAgICAgYmVmb3JlLT5uZXh0ID0gYWZ0ZXI7CisgICAgZWxzZQorICAgICAgbGlzdC0+aGVhZCA9IGFmdGVyOworCisgICAgaWYgKCBhZnRlciApCisgICAgICBhZnRlci0+cHJldiA9IGJlZm9yZTsKKyAgICBlbHNlCisgICAgICBsaXN0LT50YWlsID0gYmVmb3JlOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bGlzdC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0xpc3RfVXAoIEZUX0xpc3QgICAgICBsaXN0LAorICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgYmVmb3JlLCBhZnRlcjsKKworCisgICAgaWYgKCAhbGlzdCB8fCAhbm9kZSApCisgICAgICByZXR1cm47CisKKyAgICBiZWZvcmUgPSBub2RlLT5wcmV2OworICAgIGFmdGVyICA9IG5vZGUtPm5leHQ7CisKKyAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGFyZSBhbHJlYWR5IG9uIHRvcCBvZiB0aGUgbGlzdCAqLworICAgIGlmICggIWJlZm9yZSApCisgICAgICByZXR1cm47CisKKyAgICBiZWZvcmUtPm5leHQgPSBhZnRlcjsKKworICAgIGlmICggYWZ0ZXIgKQorICAgICAgYWZ0ZXItPnByZXYgPSBiZWZvcmU7CisgICAgZWxzZQorICAgICAgbGlzdC0+dGFpbCA9IGJlZm9yZTsKKworICAgIG5vZGUtPnByZXYgICAgICAgPSBOVUxMOworICAgIG5vZGUtPm5leHQgICAgICAgPSBsaXN0LT5oZWFkOworICAgIGxpc3QtPmhlYWQtPnByZXYgPSBub2RlOworICAgIGxpc3QtPmhlYWQgICAgICAgPSBub2RlOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bGlzdC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9MaXN0X0l0ZXJhdGUoIEZUX0xpc3QgICAgICAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgRlRfTGlzdF9JdGVyYXRvciAgaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdXNlciApCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgY3VyOworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCAhbGlzdCB8fCAhaXRlcmF0b3IgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBjdXIgPSBsaXN0LT5oZWFkOworCisgICAgd2hpbGUgKCBjdXIgKQorICAgIHsKKyAgICAgIEZUX0xpc3ROb2RlICBuZXh0ID0gY3VyLT5uZXh0OworCisKKyAgICAgIGVycm9yID0gaXRlcmF0b3IoIGN1ciwgdXNlciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGJyZWFrOworCisgICAgICBjdXIgPSBuZXh0OworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9MaXN0X0ZpbmFsaXplKCBGVF9MaXN0ICAgICAgICAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgIEZUX0xpc3RfRGVzdHJ1Y3RvciAgZGVzdHJveSwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgdXNlciApCisgIHsKKyAgICBGVF9MaXN0Tm9kZSAgY3VyOworCisKKyAgICBpZiAoICFsaXN0IHx8ICFtZW1vcnkgKQorICAgICAgcmV0dXJuOworCisgICAgY3VyID0gbGlzdC0+aGVhZDsKKyAgICB3aGlsZSAoIGN1ciApCisgICAgeworICAgICAgRlRfTGlzdE5vZGUgIG5leHQgPSBjdXItPm5leHQ7CisgICAgICB2b2lkKiAgICAgICAgZGF0YSA9IGN1ci0+ZGF0YTsKKworCisgICAgICBpZiAoIGRlc3Ryb3kgKQorICAgICAgICBkZXN0cm95KCBtZW1vcnksIGRhdGEsIHVzZXIgKTsKKworICAgICAgRlRfRlJFRSggY3VyICk7CisgICAgICBjdXIgPSBuZXh0OworICAgIH0KKworICAgIGxpc3QtPmhlYWQgPSBOVUxMOworICAgIGxpc3QtPnRhaWwgPSBOVUxMOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnR3aW5mbnQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9mdHdpbmZudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTE5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvZnR3aW5mbnQuYwpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHdpbmZudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBGTlQgc3BlY2lmaWMgaW5mbyAoYm9keSkuICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfV0lORk9OVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1dJTkZOVF9ICisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0d2luZm50LmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9XaW5GTlRfSGVhZGVyKCBGVF9GYWNlICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1dpbkZOVF9IZWFkZXJSZWMgICpoZWFkZXIgKQorICB7CisgICAgRlRfU2VydmljZV9XaW5GbnQgIHNlcnZpY2U7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhaGVhZGVyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgRlRfRkFDRV9MT09LVVBfU0VSVklDRSggZmFjZSwgc2VydmljZSwgV0lORk5UICk7CisKKyAgICBpZiAoIHNlcnZpY2UgKQorICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfaGVhZGVyKCBmYWNlLCBoZWFkZXIgKTsKKyAgICBlbHNlCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9tZDUuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9tZDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQ5NmFjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iYXNlL21kNS5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogVGhpcyBpcyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIChSRkMgMTMyMSkuCisgKgorICogSG9tZXBhZ2U6CisgKiBodHRwOi8vb3BlbndhbGwuaW5mby93aWtpL3Blb3BsZS9zb2xhci9zb2Z0d2FyZS9wdWJsaWMtZG9tYWluLXNvdXJjZS1jb2RlL21kNQorICoKKyAqIEF1dGhvcjoKKyAqIEFsZXhhbmRlciBQZXNseWFrLCBiZXR0ZXIga25vd24gYXMgU29sYXIgRGVzaWduZXIgPHNvbGFyIGF0IG9wZW53YWxsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyB3cml0dGVuIGJ5IEFsZXhhbmRlciBQZXNseWFrIGluIDIwMDEuICBObyBjb3B5cmlnaHQgaXMKKyAqIGNsYWltZWQsIGFuZCB0aGUgc29mdHdhcmUgaXMgaGVyZWJ5IHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqIEluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIGRpc2NsYWltIGNvcHlyaWdodCBhbmQgcGxhY2UgdGhlIHNvZnR3YXJlIGluIHRoZQorICogcHVibGljIGRvbWFpbiBpcyBkZWVtZWQgbnVsbCBhbmQgdm9pZCwgdGhlbiB0aGUgc29mdHdhcmUgaXMKKyAqIENvcHlyaWdodCAoYykgMjAwMSBBbGV4YW5kZXIgUGVzbHlhayBhbmQgaXQgaXMgaGVyZWJ5IHJlbGVhc2VkIHRvIHRoZQorICogZ2VuZXJhbCBwdWJsaWMgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZC4KKyAqCisgKiBUaGVyZSdzIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiAoVGhpcyBpcyBhIGhlYXZpbHkgY3V0LWRvd24gIkJTRCBsaWNlbnNlIi4pCisgKgorICogVGhpcyBkaWZmZXJzIGZyb20gQ29saW4gUGx1bWIncyBvbGRlciBwdWJsaWMgZG9tYWluIGltcGxlbWVudGF0aW9uIGluIHRoYXQKKyAqIG5vIGV4YWN0bHkgMzItYml0IGludGVnZXIgZGF0YSB0eXBlIGlzIHJlcXVpcmVkIChhbnkgMzItYml0IG9yIHdpZGVyCisgKiB1bnNpZ25lZCBpbnRlZ2VyIGRhdGEgdHlwZSB3aWxsIGRvKSwgdGhlcmUncyBubyBjb21waWxlLXRpbWUgZW5kaWFubmVzcworICogY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIG1hdGNoIE9wZW5TU0wncy4gIE5vIGNvZGUgZnJvbQorICogQ29saW4gUGx1bWIncyBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiByZXVzZWQ7IHRoaXMgY29tbWVudCBtZXJlbHkgY29tcGFyZXMKKyAqIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0d28gaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIFRoZSBwcmltYXJ5IGdvYWxzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlIHBvcnRhYmlsaXR5IGFuZCBlYXNlIG9mIHVzZS4KKyAqIEl0IGlzIG1lYW50IHRvIGJlIGZhc3QsIGJ1dCBub3QgYXMgZmFzdCBhcyBwb3NzaWJsZS4gIFNvbWUga25vd24KKyAqIG9wdGltaXphdGlvbnMgYXJlIG5vdCBpbmNsdWRlZCB0byByZWR1Y2Ugc291cmNlIGNvZGUgc2l6ZSBhbmQgYXZvaWQKKyAqIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uLgorICovCisKKyNpZm5kZWYgSEFWRV9PUEVOU1NMCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1kNS5oIgorCisvKgorICogVGhlIGJhc2ljIE1ENSBmdW5jdGlvbnMuCisgKgorICogRiBhbmQgRyBhcmUgb3B0aW1pemVkIGNvbXBhcmVkIHRvIHRoZWlyIFJGQyAxMzIxIGRlZmluaXRpb25zIGZvcgorICogYXJjaGl0ZWN0dXJlcyB0aGF0IGxhY2sgYW4gQU5ELU5PVCBpbnN0cnVjdGlvbiwganVzdCBsaWtlIGluIENvbGluIFBsdW1iJ3MKKyAqIGltcGxlbWVudGF0aW9uLgorICovCisjZGVmaW5lIEYoeCwgeSwgeikJCQkoKHopIF4gKCh4KSAmICgoeSkgXiAoeikpKSkKKyNkZWZpbmUgRyh4LCB5LCB6KQkJCSgoeSkgXiAoKHopICYgKCh4KSBeICh5KSkpKQorI2RlZmluZSBIKHgsIHksIHopCQkJKCgoeCkgXiAoeSkpIF4gKHopKQorI2RlZmluZSBIMih4LCB5LCB6KQkJCSgoeCkgXiAoKHkpIF4gKHopKSkKKyNkZWZpbmUgSSh4LCB5LCB6KQkJCSgoeSkgXiAoKHgpIHwgfih6KSkpCisKKy8qCisgKiBUaGUgTUQ1IHRyYW5zZm9ybWF0aW9uIGZvciBhbGwgZm91ciByb3VuZHMuCisgKi8KKyNkZWZpbmUgU1RFUChmLCBhLCBiLCBjLCBkLCB4LCB0LCBzKSBcCisJKGEpICs9IGYoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAodCk7IFwKKwkoYSkgPSAoKChhKSA8PCAocykpIHwgKCgoYSkgJiAweGZmZmZmZmZmKSA+PiAoMzIgLSAocykpKSk7IFwKKwkoYSkgKz0gKGIpOworCisvKgorICogU0VUIHJlYWRzIDQgaW5wdXQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyIGFuZCBzdG9yZXMgdGhlbQorICogaW4gYSBwcm9wZXJseSBhbGlnbmVkIHdvcmQgaW4gaG9zdCBieXRlIG9yZGVyLgorICoKKyAqIFRoZSBjaGVjayBmb3IgbGl0dGxlLWVuZGlhbiBhcmNoaXRlY3R1cmVzIHRoYXQgdG9sZXJhdGUgdW5hbGlnbmVkCisgKiBtZW1vcnkgYWNjZXNzZXMgaXMganVzdCBhbiBvcHRpbWl6YXRpb24uICBOb3RoaW5nIHdpbGwgYnJlYWsgaWYgaXQKKyAqIGRvZXNuJ3Qgd29yay4KKyAqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3ZheF9fKQorI2RlZmluZSBTRVQobikgXAorCSgqKE1ENV91MzJwbHVzICopJnB0clsobikgKiA0XSkKKyNkZWZpbmUgR0VUKG4pIFwKKwlTRVQobikKKyNlbHNlCisjZGVmaW5lIFNFVChuKSBcCisJKGN0eC0+YmxvY2tbKG4pXSA9IFwKKwkoTUQ1X3UzMnBsdXMpcHRyWyhuKSAqIDRdIHwgXAorCSgoTUQ1X3UzMnBsdXMpcHRyWyhuKSAqIDQgKyAxXSA8PCA4KSB8IFwKKwkoKE1ENV91MzJwbHVzKXB0clsobikgKiA0ICsgMl0gPDwgMTYpIHwgXAorCSgoTUQ1X3UzMnBsdXMpcHRyWyhuKSAqIDQgKyAzXSA8PCAyNCkpCisjZGVmaW5lIEdFVChuKSBcCisJKGN0eC0+YmxvY2tbKG4pXSkKKyNlbmRpZgorCisvKgorICogVGhpcyBwcm9jZXNzZXMgb25lIG9yIG1vcmUgNjQtYnl0ZSBkYXRhIGJsb2NrcywgYnV0IGRvZXMgTk9UIHVwZGF0ZQorICogdGhlIGJpdCBjb3VudGVycy4gIFRoZXJlIGFyZSBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgorICovCitzdGF0aWMgY29uc3Qgdm9pZCAqYm9keShNRDVfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7CisJTUQ1X3UzMnBsdXMgYSwgYiwgYywgZDsKKwlNRDVfdTMycGx1cyBzYXZlZF9hLCBzYXZlZF9iLCBzYXZlZF9jLCBzYXZlZF9kOworCisJcHRyID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhOworCisJYSA9IGN0eC0+YTsKKwliID0gY3R4LT5iOworCWMgPSBjdHgtPmM7CisJZCA9IGN0eC0+ZDsKKworCWRvIHsKKwkJc2F2ZWRfYSA9IGE7CisJCXNhdmVkX2IgPSBiOworCQlzYXZlZF9jID0gYzsKKwkJc2F2ZWRfZCA9IGQ7CisKKy8qIFJvdW5kIDEgKi8KKwkJU1RFUChGLCBhLCBiLCBjLCBkLCBTRVQoMCksIDB4ZDc2YWE0NzgsIDcpCisJCVNURVAoRiwgZCwgYSwgYiwgYywgU0VUKDEpLCAweGU4YzdiNzU2LCAxMikKKwkJU1RFUChGLCBjLCBkLCBhLCBiLCBTRVQoMiksIDB4MjQyMDcwZGIsIDE3KQorCQlTVEVQKEYsIGIsIGMsIGQsIGEsIFNFVCgzKSwgMHhjMWJkY2VlZSwgMjIpCisJCVNURVAoRiwgYSwgYiwgYywgZCwgU0VUKDQpLCAweGY1N2MwZmFmLCA3KQorCQlTVEVQKEYsIGQsIGEsIGIsIGMsIFNFVCg1KSwgMHg0Nzg3YzYyYSwgMTIpCisJCVNURVAoRiwgYywgZCwgYSwgYiwgU0VUKDYpLCAweGE4MzA0NjEzLCAxNykKKwkJU1RFUChGLCBiLCBjLCBkLCBhLCBTRVQoNyksIDB4ZmQ0Njk1MDEsIDIyKQorCQlTVEVQKEYsIGEsIGIsIGMsIGQsIFNFVCg4KSwgMHg2OTgwOThkOCwgNykKKwkJU1RFUChGLCBkLCBhLCBiLCBjLCBTRVQoOSksIDB4OGI0NGY3YWYsIDEyKQorCQlTVEVQKEYsIGMsIGQsIGEsIGIsIFNFVCgxMCksIDB4ZmZmZjViYjEsIDE3KQorCQlTVEVQKEYsIGIsIGMsIGQsIGEsIFNFVCgxMSksIDB4ODk1Y2Q3YmUsIDIyKQorCQlTVEVQKEYsIGEsIGIsIGMsIGQsIFNFVCgxMiksIDB4NmI5MDExMjIsIDcpCisJCVNURVAoRiwgZCwgYSwgYiwgYywgU0VUKDEzKSwgMHhmZDk4NzE5MywgMTIpCisJCVNURVAoRiwgYywgZCwgYSwgYiwgU0VUKDE0KSwgMHhhNjc5NDM4ZSwgMTcpCisJCVNURVAoRiwgYiwgYywgZCwgYSwgU0VUKDE1KSwgMHg0OWI0MDgyMSwgMjIpCisKKy8qIFJvdW5kIDIgKi8KKwkJU1RFUChHLCBhLCBiLCBjLCBkLCBHRVQoMSksIDB4ZjYxZTI1NjIsIDUpCisJCVNURVAoRywgZCwgYSwgYiwgYywgR0VUKDYpLCAweGMwNDBiMzQwLCA5KQorCQlTVEVQKEcsIGMsIGQsIGEsIGIsIEdFVCgxMSksIDB4MjY1ZTVhNTEsIDE0KQorCQlTVEVQKEcsIGIsIGMsIGQsIGEsIEdFVCgwKSwgMHhlOWI2YzdhYSwgMjApCisJCVNURVAoRywgYSwgYiwgYywgZCwgR0VUKDUpLCAweGQ2MmYxMDVkLCA1KQorCQlTVEVQKEcsIGQsIGEsIGIsIGMsIEdFVCgxMCksIDB4MDI0NDE0NTMsIDkpCisJCVNURVAoRywgYywgZCwgYSwgYiwgR0VUKDE1KSwgMHhkOGExZTY4MSwgMTQpCisJCVNURVAoRywgYiwgYywgZCwgYSwgR0VUKDQpLCAweGU3ZDNmYmM4LCAyMCkKKwkJU1RFUChHLCBhLCBiLCBjLCBkLCBHRVQoOSksIDB4MjFlMWNkZTYsIDUpCisJCVNURVAoRywgZCwgYSwgYiwgYywgR0VUKDE0KSwgMHhjMzM3MDdkNiwgOSkKKwkJU1RFUChHLCBjLCBkLCBhLCBiLCBHRVQoMyksIDB4ZjRkNTBkODcsIDE0KQorCQlTVEVQKEcsIGIsIGMsIGQsIGEsIEdFVCg4KSwgMHg0NTVhMTRlZCwgMjApCisJCVNURVAoRywgYSwgYiwgYywgZCwgR0VUKDEzKSwgMHhhOWUzZTkwNSwgNSkKKwkJU1RFUChHLCBkLCBhLCBiLCBjLCBHRVQoMiksIDB4ZmNlZmEzZjgsIDkpCisJCVNURVAoRywgYywgZCwgYSwgYiwgR0VUKDcpLCAweDY3NmYwMmQ5LCAxNCkKKwkJU1RFUChHLCBiLCBjLCBkLCBhLCBHRVQoMTIpLCAweDhkMmE0YzhhLCAyMCkKKworLyogUm91bmQgMyAqLworCQlTVEVQKEgsIGEsIGIsIGMsIGQsIEdFVCg1KSwgMHhmZmZhMzk0MiwgNCkKKwkJU1RFUChIMiwgZCwgYSwgYiwgYywgR0VUKDgpLCAweDg3NzFmNjgxLCAxMSkKKwkJU1RFUChILCBjLCBkLCBhLCBiLCBHRVQoMTEpLCAweDZkOWQ2MTIyLCAxNikKKwkJU1RFUChIMiwgYiwgYywgZCwgYSwgR0VUKDE0KSwgMHhmZGU1MzgwYywgMjMpCisJCVNURVAoSCwgYSwgYiwgYywgZCwgR0VUKDEpLCAweGE0YmVlYTQ0LCA0KQorCQlTVEVQKEgyLCBkLCBhLCBiLCBjLCBHRVQoNCksIDB4NGJkZWNmYTksIDExKQorCQlTVEVQKEgsIGMsIGQsIGEsIGIsIEdFVCg3KSwgMHhmNmJiNGI2MCwgMTYpCisJCVNURVAoSDIsIGIsIGMsIGQsIGEsIEdFVCgxMCksIDB4YmViZmJjNzAsIDIzKQorCQlTVEVQKEgsIGEsIGIsIGMsIGQsIEdFVCgxMyksIDB4Mjg5YjdlYzYsIDQpCisJCVNURVAoSDIsIGQsIGEsIGIsIGMsIEdFVCgwKSwgMHhlYWExMjdmYSwgMTEpCisJCVNURVAoSCwgYywgZCwgYSwgYiwgR0VUKDMpLCAweGQ0ZWYzMDg1LCAxNikKKwkJU1RFUChIMiwgYiwgYywgZCwgYSwgR0VUKDYpLCAweDA0ODgxZDA1LCAyMykKKwkJU1RFUChILCBhLCBiLCBjLCBkLCBHRVQoOSksIDB4ZDlkNGQwMzksIDQpCisJCVNURVAoSDIsIGQsIGEsIGIsIGMsIEdFVCgxMiksIDB4ZTZkYjk5ZTUsIDExKQorCQlTVEVQKEgsIGMsIGQsIGEsIGIsIEdFVCgxNSksIDB4MWZhMjdjZjgsIDE2KQorCQlTVEVQKEgyLCBiLCBjLCBkLCBhLCBHRVQoMiksIDB4YzRhYzU2NjUsIDIzKQorCisvKiBSb3VuZCA0ICovCisJCVNURVAoSSwgYSwgYiwgYywgZCwgR0VUKDApLCAweGY0MjkyMjQ0LCA2KQorCQlTVEVQKEksIGQsIGEsIGIsIGMsIEdFVCg3KSwgMHg0MzJhZmY5NywgMTApCisJCVNURVAoSSwgYywgZCwgYSwgYiwgR0VUKDE0KSwgMHhhYjk0MjNhNywgMTUpCisJCVNURVAoSSwgYiwgYywgZCwgYSwgR0VUKDUpLCAweGZjOTNhMDM5LCAyMSkKKwkJU1RFUChJLCBhLCBiLCBjLCBkLCBHRVQoMTIpLCAweDY1NWI1OWMzLCA2KQorCQlTVEVQKEksIGQsIGEsIGIsIGMsIEdFVCgzKSwgMHg4ZjBjY2M5MiwgMTApCisJCVNURVAoSSwgYywgZCwgYSwgYiwgR0VUKDEwKSwgMHhmZmVmZjQ3ZCwgMTUpCisJCVNURVAoSSwgYiwgYywgZCwgYSwgR0VUKDEpLCAweDg1ODQ1ZGQxLCAyMSkKKwkJU1RFUChJLCBhLCBiLCBjLCBkLCBHRVQoOCksIDB4NmZhODdlNGYsIDYpCisJCVNURVAoSSwgZCwgYSwgYiwgYywgR0VUKDE1KSwgMHhmZTJjZTZlMCwgMTApCisJCVNURVAoSSwgYywgZCwgYSwgYiwgR0VUKDYpLCAweGEzMDE0MzE0LCAxNSkKKwkJU1RFUChJLCBiLCBjLCBkLCBhLCBHRVQoMTMpLCAweDRlMDgxMWExLCAyMSkKKwkJU1RFUChJLCBhLCBiLCBjLCBkLCBHRVQoNCksIDB4Zjc1MzdlODIsIDYpCisJCVNURVAoSSwgZCwgYSwgYiwgYywgR0VUKDExKSwgMHhiZDNhZjIzNSwgMTApCisJCVNURVAoSSwgYywgZCwgYSwgYiwgR0VUKDIpLCAweDJhZDdkMmJiLCAxNSkKKwkJU1RFUChJLCBiLCBjLCBkLCBhLCBHRVQoOSksIDB4ZWI4NmQzOTEsIDIxKQorCisJCWEgKz0gc2F2ZWRfYTsKKwkJYiArPSBzYXZlZF9iOworCQljICs9IHNhdmVkX2M7CisJCWQgKz0gc2F2ZWRfZDsKKworCQlwdHIgKz0gNjQ7CisJfSB3aGlsZSAoc2l6ZSAtPSA2NCk7CisKKwljdHgtPmEgPSBhOworCWN0eC0+YiA9IGI7CisJY3R4LT5jID0gYzsKKwljdHgtPmQgPSBkOworCisJcmV0dXJuIHB0cjsKK30KKwordm9pZCBNRDVfSW5pdChNRDVfQ1RYICpjdHgpCit7CisJY3R4LT5hID0gMHg2NzQ1MjMwMTsKKwljdHgtPmIgPSAweGVmY2RhYjg5OworCWN0eC0+YyA9IDB4OThiYWRjZmU7CisJY3R4LT5kID0gMHgxMDMyNTQ3NjsKKworCWN0eC0+bG8gPSAwOworCWN0eC0+aGkgPSAwOworfQorCit2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJTUQ1X3UzMnBsdXMgc2F2ZWRfbG87CisJdW5zaWduZWQgbG9uZyB1c2VkLCBhdmFpbGFibGU7CisKKwlzYXZlZF9sbyA9IGN0eC0+bG87CisJaWYgKChjdHgtPmxvID0gKHNhdmVkX2xvICsgc2l6ZSkgJiAweDFmZmZmZmZmKSA8IHNhdmVkX2xvKQorCQljdHgtPmhpKys7CisJY3R4LT5oaSArPSBzaXplID4+IDI5OworCisJdXNlZCA9IHNhdmVkX2xvICYgMHgzZjsKKworCWlmICh1c2VkKSB7CisJCWF2YWlsYWJsZSA9IDY0IC0gdXNlZDsKKworCQlpZiAoc2l6ZSA8IGF2YWlsYWJsZSkgeworCQkJbWVtY3B5KCZjdHgtPmJ1ZmZlclt1c2VkXSwgZGF0YSwgc2l6ZSk7CisJCQlyZXR1cm47CisJCX0KKworCQltZW1jcHkoJmN0eC0+YnVmZmVyW3VzZWRdLCBkYXRhLCBhdmFpbGFibGUpOworCQlkYXRhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhICsgYXZhaWxhYmxlOworCQlzaXplIC09IGF2YWlsYWJsZTsKKwkJYm9keShjdHgsIGN0eC0+YnVmZmVyLCA2NCk7CisJfQorCisJaWYgKHNpemUgPj0gNjQpIHsKKwkJZGF0YSA9IGJvZHkoY3R4LCBkYXRhLCBzaXplICYgfih1bnNpZ25lZCBsb25nKTB4M2YpOworCQlzaXplICY9IDB4M2Y7CisJfQorCisJbWVtY3B5KGN0eC0+YnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKwordm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDVfQ1RYICpjdHgpCit7CisJdW5zaWduZWQgbG9uZyB1c2VkLCBhdmFpbGFibGU7CisKKwl1c2VkID0gY3R4LT5sbyAmIDB4M2Y7CisKKwljdHgtPmJ1ZmZlclt1c2VkKytdID0gMHg4MDsKKworCWF2YWlsYWJsZSA9IDY0IC0gdXNlZDsKKworCWlmIChhdmFpbGFibGUgPCA4KSB7CisJCW1lbXNldCgmY3R4LT5idWZmZXJbdXNlZF0sIDAsIGF2YWlsYWJsZSk7CisJCWJvZHkoY3R4LCBjdHgtPmJ1ZmZlciwgNjQpOworCQl1c2VkID0gMDsKKwkJYXZhaWxhYmxlID0gNjQ7CisJfQorCisJbWVtc2V0KCZjdHgtPmJ1ZmZlclt1c2VkXSwgMCwgYXZhaWxhYmxlIC0gOCk7CisKKwljdHgtPmxvIDw8PSAzOworCWN0eC0+YnVmZmVyWzU2XSA9IGN0eC0+bG87CisJY3R4LT5idWZmZXJbNTddID0gY3R4LT5sbyA+PiA4OworCWN0eC0+YnVmZmVyWzU4XSA9IGN0eC0+bG8gPj4gMTY7CisJY3R4LT5idWZmZXJbNTldID0gY3R4LT5sbyA+PiAyNDsKKwljdHgtPmJ1ZmZlcls2MF0gPSBjdHgtPmhpOworCWN0eC0+YnVmZmVyWzYxXSA9IGN0eC0+aGkgPj4gODsKKwljdHgtPmJ1ZmZlcls2Ml0gPSBjdHgtPmhpID4+IDE2OworCWN0eC0+YnVmZmVyWzYzXSA9IGN0eC0+aGkgPj4gMjQ7CisKKwlib2R5KGN0eCwgY3R4LT5idWZmZXIsIDY0KTsKKworCXJlc3VsdFswXSA9IGN0eC0+YTsKKwlyZXN1bHRbMV0gPSBjdHgtPmEgPj4gODsKKwlyZXN1bHRbMl0gPSBjdHgtPmEgPj4gMTY7CisJcmVzdWx0WzNdID0gY3R4LT5hID4+IDI0OworCXJlc3VsdFs0XSA9IGN0eC0+YjsKKwlyZXN1bHRbNV0gPSBjdHgtPmIgPj4gODsKKwlyZXN1bHRbNl0gPSBjdHgtPmIgPj4gMTY7CisJcmVzdWx0WzddID0gY3R4LT5iID4+IDI0OworCXJlc3VsdFs4XSA9IGN0eC0+YzsKKwlyZXN1bHRbOV0gPSBjdHgtPmMgPj4gODsKKwlyZXN1bHRbMTBdID0gY3R4LT5jID4+IDE2OworCXJlc3VsdFsxMV0gPSBjdHgtPmMgPj4gMjQ7CisJcmVzdWx0WzEyXSA9IGN0eC0+ZDsKKwlyZXN1bHRbMTNdID0gY3R4LT5kID4+IDg7CisJcmVzdWx0WzE0XSA9IGN0eC0+ZCA+PiAxNjsKKwlyZXN1bHRbMTVdID0gY3R4LT5kID4+IDI0OworCisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvbWQ1LmggYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhNDRiZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9tZDUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogVGhpcyBpcyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIChSRkMgMTMyMSkuCisgKgorICogSG9tZXBhZ2U6CisgKiBodHRwOi8vb3BlbndhbGwuaW5mby93aWtpL3Blb3BsZS9zb2xhci9zb2Z0d2FyZS9wdWJsaWMtZG9tYWluLXNvdXJjZS1jb2RlL21kNQorICoKKyAqIEF1dGhvcjoKKyAqIEFsZXhhbmRlciBQZXNseWFrLCBiZXR0ZXIga25vd24gYXMgU29sYXIgRGVzaWduZXIgPHNvbGFyIGF0IG9wZW53YWxsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyB3cml0dGVuIGJ5IEFsZXhhbmRlciBQZXNseWFrIGluIDIwMDEuICBObyBjb3B5cmlnaHQgaXMKKyAqIGNsYWltZWQsIGFuZCB0aGUgc29mdHdhcmUgaXMgaGVyZWJ5IHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqIEluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIGRpc2NsYWltIGNvcHlyaWdodCBhbmQgcGxhY2UgdGhlIHNvZnR3YXJlIGluIHRoZQorICogcHVibGljIGRvbWFpbiBpcyBkZWVtZWQgbnVsbCBhbmQgdm9pZCwgdGhlbiB0aGUgc29mdHdhcmUgaXMKKyAqIENvcHlyaWdodCAoYykgMjAwMSBBbGV4YW5kZXIgUGVzbHlhayBhbmQgaXQgaXMgaGVyZWJ5IHJlbGVhc2VkIHRvIHRoZQorICogZ2VuZXJhbCBwdWJsaWMgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZC4KKyAqCisgKiBUaGVyZSdzIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgbWQ1LmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKworI2lmZGVmIEhBVkVfT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CisjZWxpZiAhZGVmaW5lZChfTUQ1X0gpCisjZGVmaW5lIF9NRDVfSAorCisvKiBBbnkgMzItYml0IG9yIHdpZGVyIHVuc2lnbmVkIGludGVnZXIgZGF0YSB0eXBlIHdpbGwgZG8gKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IE1ENV91MzJwbHVzOworCit0eXBlZGVmIHN0cnVjdCB7CisJTUQ1X3UzMnBsdXMgbG8sIGhpOworCU1ENV91MzJwbHVzIGEsIGIsIGMsIGQ7CisJdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOworCU1ENV91MzJwbHVzIGJsb2NrWzE2XTsKK30gTUQ1X0NUWDsKKworZXh0ZXJuIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqY3R4KTsKK2V4dGVybiB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgTUQ1X0NUWCAqY3R4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL2Jhc2UvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1MmUwOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmFzZS9ydWxlcy5tawpAQCAtMCwwICsxLDEwNSBAQAorIworIyBGcmVlVHlwZSAyIGJhc2UgbGF5ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBJdCBzZXRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYXN0ZXIgTWFrZWZpbGUKKyMgYWZ0ZXIgdGhlIGNhbGw6CisjCisjICAgQkFTRV9PQkpfUzogICBUaGUgc2luZ2xlLW9iamVjdCBiYXNlIGxheWVyLgorIyAgIEJBU0VfT0JKX006ICAgQSBsaXN0IG9mIGFsbCBvYmplY3RzIGZvciBhIG11bHRpcGxlLW9iamVjdHMgYnVpbGQuCisjICAgQkFTRV9FWFRfT0JKOiBBIGxpc3Qgb2YgYmFzZSBsYXllciBleHRlbnNpb25zLCBpLmUuLCBjb21wb25lbnRzIGZvdW5kCisjICAgICAgICAgICAgICAgICBpbiBgc3JjL2Jhc2UnIHdoaWNoIGFyZSBub3QgY29tcGlsZWQgd2l0aGluIHRoZSBiYXNlCisjICAgICAgICAgICAgICAgICBsYXllciBwcm9wZXIuCisKKworQkFTRV9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICRJJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkKEJBU0VfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgQmFzZSBsYXllciBzb3VyY2VzCisjCisjICAgZnRzeXN0ZW0sIGZ0aW5pdCwgYW5kIGZ0ZGVidWcgYXJlIGhhbmRsZWQgYnkgZnJlZXR5cGUubWsKKyMKKyMgQWxsIGZpbGVzIGxpc3RlZCBoZXJlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBgZnRiYXNlLmMnIChmb3IgYSBgc2luZ2xlJworIyBidWlsZCkuCisjCitCQVNFX1NSQyA6PSAkKEJBU0VfRElSKS9iYXNlcGljLmMgIFwKKyAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0YWR2YW5jLmMgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnRjYWxjLmMgICBcCisgICAgICAgICAgICAkKEJBU0VfRElSKS9mdGRiZ21lbS5jIFwKKyAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0Z2xvYWRyLmMgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnRvYmpzLmMgICBcCisgICAgICAgICAgICAkKEJBU0VfRElSKS9mdG91dGxuLmMgIFwKKyAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0cGljLmMgICAgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnRyZm9yay5jICBcCisgICAgICAgICAgICAkKEJBU0VfRElSKS9mdHNuYW1lcy5jIFwKKyAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0c3RyZWFtLmMgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnR0cmlnb24uYyBcCisgICAgICAgICAgICAkKEJBU0VfRElSKS9mdHV0aWwuYworCisKK2lmbmVxICgkKGZ0bWFjX2MpLCkKKyAgQkFTRV9TUkMgKz0gJChCQVNFX0RJUikvJChmdG1hY19jKQorZW5kaWYKKworIyBmb3Igc2ltcGxpY2l0eSwgd2UgYWxzbyBoYW5kbGUgYG1kNS5jJyAod2hpY2ggZ2V0cyBpbmNsdWRlZCBieSBgZnRvYmpzLmgnKQorQkFTRV9IIDo9ICQoQkFTRV9ESVIpL2Jhc2VwaWMuaCBcCisgICAgICAgICAgJChCQVNFX0RJUikvZnRiYXNlLmggIFwKKyAgICAgICAgICAkKEJBU0VfRElSKS9tZDUuYyAgICAgXAorICAgICAgICAgICQoQkFTRV9ESVIpL21kNS5oCisKKyMgQmFzZSBsYXllciBgZXh0ZW5zaW9ucycgc291cmNlcworIworIyBBbiBleHRlbnNpb24gaXMgYWRkZWQgdG8gdGhlIGxpYnJhcnkgZmlsZSBhcyBhIHNlcGFyYXRlIG9iamVjdC4gIEl0IGlzCisjIHRoZW4gbGlua2VkIHRvIHRoZSBmaW5hbCBleGVjdXRhYmxlIG9ubHkgaWYgb25lIG9mIGl0cyBzeW1ib2xzIGlzIHVzZWQgYnkKKyMgdGhlIGFwcGxpY2F0aW9uLgorIworQkFTRV9FWFRfU1JDIDo9ICQocGF0c3Vic3QgJSwkKEJBU0VfRElSKS8lLCQoQkFTRV9FWFRFTlNJT05TKSkKKworIyBEZWZhdWx0IGV4dGVuc2lvbnMgb2JqZWN0cworIworQkFTRV9FWFRfT0JKIDo9ICQoQkFTRV9FWFRfU1JDOiQoQkFTRV9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCisKKworIyBCYXNlIGxheWVyIG9iamVjdChzKQorIworIyAgIEJBU0VfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMgKGVhY2ggYmFzZSBzb3VyY2UgZmlsZSBjb21waWxlcworIyAgIHRvIGEgc2luZ2xlIG9iamVjdCBmaWxlKS4KKyMKKyMgICBCQVNFX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcyAodGhlIHdob2xlIGJhc2UgbGF5ZXIgaXMKKyMgICBjb21waWxlZCBhcyBhIHNpbmdsZSBvYmplY3QgZmlsZSB1c2luZyBmdGJhc2UuYykuCisjCitCQVNFX09CSl9NIDo9ICQoQkFTRV9TUkM6JChCQVNFX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK0JBU0VfT0JKX1MgOj0gJChPQkpfRElSKS9mdGJhc2UuJE8KKworIyBCYXNlIGxheWVyIHJvb3Qgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworQkFTRV9TUkNfUyA6PSAkKEJBU0VfRElSKS9mdGJhc2UuYworCisKKyMgQmFzZSBsYXllciAtIHNpbmdsZSBvYmplY3QgYnVpbGQKKyMKKyQoQkFTRV9PQkpfUyk6ICQoQkFTRV9TUkNfUykgJChCQVNFX1NSQykgJChGUkVFVFlQRV9IKSAkKEJBU0VfSCkKKwkkKEJBU0VfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoQkFTRV9TUkNfUykpCisKKworIyBNdWx0aXBsZSBvYmplY3RzIGJ1aWxkICsgZXh0ZW5zaW9ucworIworJChPQkpfRElSKS8lLiRPOiAkKEJBU0VfRElSKS8lLmMgJChGUkVFVFlQRV9IKSAkKEJBU0VfSCkKKwkkKEJBU0VfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2JkZi9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDY4NDNjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL2JkZiBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAyLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgYmRmIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBiZGZkcml2ciBiZGZsaWIgOworICB9CisgIGVsc2UKKyAgeworICAgIF9zb3VyY2VzID0gYmRmIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL2JkZiBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2JkZi9SRUFETUUgYi9mcmVldHlwZS0yLjYvc3JjL2JkZi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2MWFiYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL1JFQURNRQpAQCAtMCwwICsxLDE0OCBAQAorICAgICAgICAgICAgICAgICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIEJERiBmb250cworCisgICAgICAgICAgICAgICAgICAgICAgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorICAgICAgICAgICAgICAgICAgPGZyYW5jZXNjby56YXBwYS5uYXJkZWxsaUBlbnMuZnI+CisKKworSW50cm9kdWN0aW9uCisqKioqKioqKioqKioKKworQkRGIChCaXRtYXAgRGlzdHJpYnV0aW9uIEZvcm1hdCkgaXMgYSBiaXRtYXAgZm9udCBmb3JtYXQgZGVmaW5lZCBieSBBZG9iZSwKK3doaWNoIGlzIGludGVuZGVkIHRvIGJlIGVhc2lseSB1bmRlcnN0b29kIGJ5IGJvdGggaHVtYW5zIGFuZCBjb21wdXRlcnMuCitUaGlzIGNvZGUgaW1wbGVtZW50cyBhIEJERiBkcml2ZXIgZm9yIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LCBmb2xsb3dpbmcgdGhlCitBZG9iZSBTcGVjaWZpY2F0aW9uIFYgMi4yLiAgVGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIEJERiBmb250IGZvcm1hdCBpcworYXZhaWxhYmxlIGZyb20gQWRvYmUncyB3ZWIgc2l0ZToKKworICBodHRwOi8vcGFydG5lcnMuYWRvYmUuY29tL3B1YmxpYy9kZXZlbG9wZXIvZW4vZm9udC81MDA1LkJERl9TcGVjLnBkZgorCitNYW55IGdvb2QgYml0bWFwIGZvbnRzIGluIGJkZiBmb3JtYXQgY29tZSB3aXRoIFhGcmVlODYgKHd3dy5YRnJlZTg2Lm9yZykuCitUaGV5IGRvIG5vdCBkZWZpbmUgdmVydGljYWwgbWV0cmljcywgYmVjYXVzZSB0aGUgWCBDb25zb3J0aXVtIEJERgorc3BlY2lmaWNhdGlvbiBoYXMgcmVtb3ZlZCB0aGVtLgorCisKK0VuY29kaW5ncworKioqKioqKioqCisKK1RoZSB2YXJpZXR5IG9mIGVuY29kaW5ncyB0aGF0IGFjY29tcGFuaWVzIGJkZiBmb250cyBhcHBlYXJzIHRvIGVuY29tcGFzcyB0aGUKK3NtYWxsIHNldCBkZWZpbmVkIGluIGZyZWV0eXBlLmguICBPbiB0aGUgb3RoZXIgaGFuZCwgdHdvIHByb3BlcnRpZXMgdGhhdAorc3BlY2lmeSBlbmNvZGluZyBhbmQgcmVnaXN0cnkgYXJlIHVzdWFsbHkgZGVmaW5lZCBpbiBiZGYgZm9udHMuCisKK0kgZGVjaWRlZCB0byBtYWtlIHRoZXNlIHR3byBwcm9wZXJ0aWVzIGRpcmVjdGx5IGFjY2Vzc2libGUsIGxlYXZpbmcgdG8gdGhlCitjbGllbnQgYXBwbGljYXRpb24gdGhlIHdvcmsgb2YgaW50ZXJwcmV0aW5nIHRoZW0uICBGb3IgaW5zdGFuY2U6CisKKworICAjaW5jbHVkZSBGVF9JTlRFUk5BTF9CREZfVFlQRVNfSAorCisgIEZUX0ZhY2UgICAgICAgICAgZmFjZTsKKyAgQkRGX1B1YmxpY19GYWNlICBiZGZmYWNlOworCisKKyAgRlRfTmV3X0ZhY2UoIGxpYnJhcnksIC4uLiwgJmZhY2UgKTsKKworICBiZGZmYWNlID0gKEJERl9QdWJsaWNfRmFjZSlmYWNlOworCisgIGlmICggKCBiZGZmYWNlLT5jaGFyc2V0X3JlZ2lzdHJ5ID09ICJJU08xMDY0NiIgKSAmJgorICAgICAgICggYmRmZmFjZS0+Y2hhcnNldF9lbmNvZGluZyA9PSAiMSIgKSAgICAgICAgKQorICAgIFsuLl0KKworCitUaHVzIHRoZSBkcml2ZXIgYWx3YXlzIGV4cG9ydHMgYGZ0X2VuY29kaW5nX25vbmUnIGFzIGZhY2UtPmNoYXJtYXAuZW5jb2RpbmcuCitGVF9HZXRfQ2hhcl9JbmRleCdzIGJlaGF2aW9yIGlzIHVubW9kaWZpZWQsIHRoYXQgaXMsIGl0IGNvbnZlcnRzIHRoZSBVTG9uZwordmFsdWUgZ2l2ZW4gYXMgYXJndW1lbnQgaW50byB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBudW1iZXIuCisKK0lmIHRoZSB0d28gcHJvcGVydGllcyBhcmUgbm90IGF2YWlsYWJsZSwgQWRvYmUgU3RhbmRhcmQgRW5jb2Rpbmcgc2hvdWxkIGJlCithc3N1bWVkLgorCisKK0FudGktQWxpYXNlZCBCaXRtYXBzCisqKioqKioqKioqKioqKioqKioqKgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGFuIGV4dGVuc2lvbiB0byB0aGUgQkRGIGZvcm1hdCBhcyB1c2VkIGluIE1hcmsgTGVpc2hlcidzCit4bWJkZmVkIGJpdG1hcCBmb250IGVkaXRvci4gIE1pY3Jvc29mdCdzIFNCSVQgdG9vbCBleHBlY3RzIGJpdG1hcCBmb250cyBpbgordGhhdCBmb3JtYXQgZm9yIGFkZGluZyBhbnRpLWFsaWFzZWQgdGhlbSB0byBUcnVlVHlwZSBmb250cy4gIEl0IGludHJvZHVjZXMgYQorZm91cnRoIGZpZWxkIHRvIHRoZSBgU0laRScga2V5d29yZCB3aGljaCBnaXZlcyB0aGUgYnBwIHZhbHVlIChiaXRzIHBlcgorcGl4ZWwpIG9mIHRoZSBnbHlwaCBkYXRhIGluIHRoZSBmb250LiAgUG9zc2libGUgdmFsdWVzIGFyZSAxICh0aGUgZGVmYXVsdCksCisyIChmb3VyIGdyYXkgbGV2ZWxzKSwgNCAoMTYgZ3JheSBsZXZlbHMpLCBhbmQgOCAoMjU2IGdyYXkgbGV2ZWxzKS4gIFRoZQorZHJpdmVyIHJldHVybnMgZWl0aGVyIGEgYml0bWFwIHdpdGggMSBiaXQgcGVyIHBpeGVsIG9yIGEgcGl4bWFwIHdpdGggOGJpdHMKK3BlciBwaXhlbCAodXNpbmcgNCwgMTYsIGFuZCAyNTYgZ3JheSBsZXZlbHMsIHJlc3BlY3RpdmVseSkuCisKKworS25vd24gcHJvYmxlbXMKKyoqKioqKioqKioqKioqCisKKy0gQSBmb250IGlzIGVudGlyZWx5IGxvYWRlZCBpbnRvIG1lbW9yeS4gIE9idmlvdXNseSwgdGhpcyBpcyBub3QgdGhlIFJpZ2h0CisgIFRoaW5nKFRNKS4gIElmIHlvdSBoYXZlIGJpZyBmb250cyBJIHN1Z2dlc3QgeW91IGNvbnZlcnQgdGhlbSBpbnRvIFBDRgorICBmb3JtYXQgKHVzaW5nIHRoZSBiZGZ0b3BjZiB1dGlsaXR5KTogdGhlIFBDRiBmb250IGRyaXZlIG9mIEZyZWVUeXBlIGNhbgorICBwZXJmb3JtIGluY3JlbWVudGFsIGdseXBoIGxvYWRpbmcuCisKK1doZW4gSSBoYXZlIHNvbWUgdGltZSwgSSB3aWxsIGltcGxlbWVudCBvbi1kZW1hbmQgZ2x5cGggcGFyc2luZy4KKworLSBFeGNlcHQgZm9yIGVuY29kaW5ncyBwcm9wZXJ0aWVzLCBjbGllbnQgYXBwbGljYXRpb25zIGhhdmUgbm8gdmlzaWJpbGl0eSBvZgorICB0aGUgUENGX0ZhY2Ugb2JqZWN0LiAgVGhpcyBtZWFucyB0aGF0IGFwcGxpY2F0aW9ucyBjYW5ub3QgZGlyZWN0bHkgYWNjZXNzCisgIGZvbnQgdGFibGVzIGFuZCBtdXN0IHRydXN0IEZyZWVUeXBlLgorCistIEN1cnJlbnRseSwgZ2x5cGggbmFtZXMgYXJlIGlnbm9yZWQuCisKKyAgSSBwbGFuIHRvIGdpdmUgZnVsbCB2aXNpYmlsaXR5IG9mIHRoZSBCREZfRmFjZSBvYmplY3QgaW4gYW4gdXBjb21pbmcKKyAgcmV2aXNpb24gb2YgdGhlIGRyaXZlciwgdGh1cyBpbXBsZW1lbnRpbmcgYWxzbyBnbHlwaCBuYW1lcy4KKworLSBBcyBJIGhhdmUgbmV2ZXIgc2VlbiBhIEJERiBmb250IHRoYXQgZGVmaW5lcyB2ZXJ0aWNhbCBtZXRyaWNzLCB2ZXJ0aWNhbAorICBtZXRyaWNzIGFyZSAocGFyc2VkIGFuZCkgZGlzY2FyZGVkLiAgSWYgeW91IG93biBhIEJERiBmb250IHRoYXQgZGVmaW5lcworICB2ZXJ0aWNhbCBtZXRyaWNzLCBwbGVhc2UgbGV0IG1lIGtub3cgKEkgd2lsbCBpbXBsZW1lbnQgdGhlbSBpbiA1LTEwCisgIG1pbnV0ZXMpLgorCisKK0xpY2Vuc2UKKyoqKioqKioKKworQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgYnkgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworKioqIFBvcnRpb25zIG9mIHRoZSBkcml2ZXIgKHRoYXQgaXMsIGJkZmxpYi5jIGFuZCBiZGYuaCk6CisKK0NvcHlyaWdodCAyMDAwIENvbXB1dGluZyBSZXNlYXJjaCBMYWJzLCBOZXcgTWV4aWNvIFN0YXRlIFVuaXZlcnNpdHkKK0NvcHlyaWdodCAyMDAxLTIwMDIsIDIwMTEgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAordG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgordGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCithbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgQ09NUFVUSU5HIFJFU0VBUkNIIExBQiBPUiBORVcgTUVYSUNPIFNUQVRFIFVOSVZFUlNJVFkgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQKK09SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKworQ3JlZGl0cworKioqKioqKgorCitUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBleGNlbGxlbnQgTWFyayBMZWlzaGVyJ3MgYmRmIGxpYnJhcnkuICBJZiB5b3UKK2ZpbmQgc29tZXRoaW5nIGdvb2QgaW4gdGhpcyBkcml2ZXIgeW91IHNob3VsZCBwcm9iYWJseSB0aGFuayBoaW0sIG5vdAorbWUuCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2JkZi9iZGYuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NWZiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2JkZi9iZGYuYwpAQCAtMCwwICsxLDM0IEBACisvKiAgYmRmLmMKKworICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBiZGYgZmlsZXMKKworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBieQorICAgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisqLworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiYmRmbGliLmMiCisjaW5jbHVkZSAiYmRmZHJpdnIuYyIKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZi5oIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1YTJlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZi5oCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29tcHV0aW5nIFJlc2VhcmNoIExhYnMsIE5ldyBNZXhpY28gU3RhdGUgVW5pdmVyc2l0eQorICogQ29weXJpZ2h0IDIwMDEtMjAwNCwgMjAxMSBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT01QVVRJTkcgUkVTRUFSQ0ggTEFCIE9SIE5FVyBNRVhJQ08gU1RBVEUgVU5JVkVSU0lUWSBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVAorICogT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisKKyNpZm5kZWYgX19CREZfSF9fCisjZGVmaW5lIF9fQkRGX0hfXworCisKKy8qCisgKiBCYXNlZCBvbiBiZGYuaCx2IDEuMTYgMjAwMC8wMy8xNiAyMDowODo1MSBtbGVpc2hlcgorICovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKy8qIEltcG9ydGVkIGZyb20gYmRmUC5oICovCisKKyNkZWZpbmUgX2JkZl9nbHlwaF9tb2RpZmllZCggbWFwLCBlICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChtYXApWyhlKSA+PiA1XSAmICggMSA8PCAoIChlKSAmIDMxICkgKSApCisjZGVmaW5lIF9iZGZfc2V0X2dseXBoX21vZGlmaWVkKCBtYXAsIGUgKSAgICAgICAgICAgICAgXAorICAgICAgICAgICggKG1hcClbKGUpID4+IDVdIHw9ICggMSA8PCAoIChlKSAmIDMxICkgKSApCisjZGVmaW5lIF9iZGZfY2xlYXJfZ2x5cGhfbW9kaWZpZWQoIG1hcCwgZSApICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChtYXApWyhlKSA+PiA1XSAmPSB+KCAxIDw8ICggKGUpICYgMzEgKSApICkKKworLyogZW5kIG9mIGJkZlAuaCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCREYgZm9udCBvcHRpb25zIG1hY3JvcyBhbmQgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgQkRGX0NPUlJFQ1RfTUVUUklDUyAgMHgwMSAvKiBDb3JyZWN0IGludmFsaWQgbWV0cmljcyB3aGVuIGxvYWRpbmcuICovCisjZGVmaW5lIEJERl9LRUVQX0NPTU1FTlRTICAgIDB4MDIgLyogUHJlc2VydmUgdGhlIGZvbnQgY29tbWVudHMuICAgICAgICAgICAqLworI2RlZmluZSBCREZfS0VFUF9VTkVOQ09ERUQgICAweDA0IC8qIEtlZXAgdGhlIHVuZW5jb2RlZCBnbHlwaHMuICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkRGX1BST1BPUlRJT05BTCAgICAgMHgwOCAvKiBGb250IGhhcyBwcm9wb3J0aW9uYWwgc3BhY2luZy4gICAgICAgICovCisjZGVmaW5lIEJERl9NT05PV0lEVEggICAgICAgIDB4MTAgLyogRm9udCBoYXMgbW9ubyB3aWR0aC4gICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCREZfQ0hBUkNFTEwgICAgICAgICAweDIwIC8qIEZvbnQgaGFzIGNoYXJjZWxsIHNwYWNpbmcuICAgICAgICAgICAgKi8KKworI2RlZmluZSBCREZfQUxMX1NQQUNJTkcgICggQkRGX1BST1BPUlRJT05BTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJERl9NT05PV0lEVEggICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCREZfQ0hBUkNFTEwgICAgICkKKworI2RlZmluZSBCREZfREVGQVVMVF9MT0FEX09QVElPTlMgICggQkRGX0NPUlJFQ1RfTUVUUklDUyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJERl9LRUVQX0NPTU1FTlRTICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCREZfS0VFUF9VTkVOQ09ERUQgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRGX1BST1BPUlRJT05BTCAgICApCisKKworICB0eXBlZGVmIHN0cnVjdCAgYmRmX29wdGlvbnNfdF8KKyAgeworICAgIGludCAgICAgICAgICAgIGNvcnJlY3RfbWV0cmljczsKKyAgICBpbnQgICAgICAgICAgICBrZWVwX3VuZW5jb2RlZDsKKyAgICBpbnQgICAgICAgICAgICBrZWVwX2NvbW1lbnRzOworICAgIGludCAgICAgICAgICAgIGZvbnRfc3BhY2luZzsKKworICB9IGJkZl9vcHRpb25zX3Q7CisKKworICAvKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlIGZvciB1bmtub3duIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gKi8KKyAgdHlwZWRlZiBpbnQKKyAgKCpiZGZfb3B0aW9uc19jYWxsYmFja190KSggYmRmX29wdGlvbnNfdCogIG9wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqKiAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBucGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgY2xpZW50X2RhdGEgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQkRGIGZvbnQgcHJvcGVydHkgbWFjcm9zIGFuZCB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEJERl9BVE9NICAgICAgMQorI2RlZmluZSBCREZfSU5URUdFUiAgIDIKKyNkZWZpbmUgQkRGX0NBUkRJTkFMICAzCisKKworICAvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgcGFydGljdWxhciBwcm9wZXJ0eSBvZiBhIGZvbnQuICovCisgIC8qIFRoZXJlIGFyZSBhIHNldCBvZiBkZWZhdWx0cyBhbmQgZWFjaCBmb250IGhhcyB0aGVpciBvd24uICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIGJkZl9wcm9wZXJ0eV90XworICB7CisgICAgY2hhciogIG5hbWU7ICAgICAgICAgLyogTmFtZSBvZiB0aGUgcHJvcGVydHkuICAgKi8KKyAgICBpbnQgICAgZm9ybWF0OyAgICAgICAvKiBGb3JtYXQgb2YgdGhlIHByb3BlcnR5LiAqLworICAgIGludCAgICBidWlsdGluOyAgICAgIC8qIEEgYnVpbHRpbiBwcm9wZXJ0eS4gICAgICovCisgICAgdW5pb24KKyAgICB7CisgICAgICBjaGFyKiAgICAgICAgICBhdG9tOworICAgICAgbG9uZyAgICAgICAgICAgbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgIHVsOworCisgICAgfSB2YWx1ZTsgICAgICAgICAgICAgLyogVmFsdWUgb2YgdGhlIHByb3BlcnR5LiAgKi8KKworICB9IGJkZl9wcm9wZXJ0eV90OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCREYgZm9udCBtZXRyaWMgYW5kIGdseXBoIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIGJkZl9iYnhfdF8KKyAgeworICAgIHVuc2lnbmVkIHNob3J0ICB3aWR0aDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgaGVpZ2h0OworCisgICAgc2hvcnQgICAgICAgICAgIHhfb2Zmc2V0OworICAgIHNob3J0ICAgICAgICAgICB5X29mZnNldDsKKworICAgIHNob3J0ICAgICAgICAgICBhc2NlbnQ7CisgICAgc2hvcnQgICAgICAgICAgIGRlc2NlbnQ7CisKKyAgfSBiZGZfYmJ4X3Q7CisKKworICB0eXBlZGVmIHN0cnVjdCAgYmRmX2dseXBoX3RfCisgIHsKKyAgICBjaGFyKiAgICAgICAgICAgbmFtZTsgICAgICAgIC8qIEdseXBoIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGxvbmcgICAgICAgICAgICBlbmNvZGluZzsgICAgLyogR2x5cGggZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgc2hvcnQgIHN3aWR0aDsgICAgICAvKiBTY2FsYWJsZSB3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgZHdpZHRoOyAgICAgIC8qIERldmljZSB3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGJkZl9iYnhfdCAgICAgICBiYng7ICAgICAgICAgLyogR2x5cGggYm91bmRpbmcgYm94LiAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciogIGJpdG1hcDsgICAgICAvKiBHbHlwaCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgYnByOyAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB1c2VkIHBlciByb3cuICAgICAgICAqLworICAgIHVuc2lnbmVkIHNob3J0ICBieXRlczsgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHVzZWQgZm9yIHRoZSBiaXRtYXAuICovCisKKyAgfSBiZGZfZ2x5cGhfdDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBfaGFzaG5vZGVfCisgIHsKKyAgICBjb25zdCBjaGFyKiAga2V5OworICAgIHNpemVfdCAgICAgICBkYXRhOworCisgIH0gX2hhc2hub2RlLCAqaGFzaG5vZGU7CisKKworICB0eXBlZGVmIHN0cnVjdCAgaGFzaHRhYmxlXworICB7CisgICAgdW5zaWduZWQgaW50ICBsaW1pdDsKKyAgICB1bnNpZ25lZCBpbnQgIHNpemU7CisgICAgdW5zaWduZWQgaW50ICB1c2VkOworICAgIGhhc2hub2RlKiAgICAgdGFibGU7CisKKyAgfSBoYXNodGFibGU7CisKKworICB0eXBlZGVmIHN0cnVjdCAgYmRmX2dseXBobGlzdF90XworICB7CisgICAgdW5zaWduZWQgc2hvcnQgIHBhZDsgICAgICAgICAgLyogUGFkIHRvIDQtYnl0ZSBib3VuZGFyeS4gICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgc2hvcnQgIGJwcDsgICAgICAgICAgLyogQml0cyBwZXIgcGl4ZWwuICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbG9uZyAgICAgICAgICAgIHN0YXJ0OyAgICAgICAgLyogQmVnaW5uaW5nIGVuY29kaW5nIHZhbHVlIG9mIGdseXBocy4gICovCisgICAgbG9uZyAgICAgICAgICAgIGVuZDsgICAgICAgICAgLyogRW5kaW5nIGVuY29kaW5nIHZhbHVlIG9mIGdseXBocy4gICAgICovCisgICAgYmRmX2dseXBoX3QqICAgIGdseXBoczsgICAgICAgLyogR2x5cGhzIHRoZW1zZWx2ZXMuICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgIGdseXBoc19zaXplOyAgLyogR2x5cGggc3RydWN0dXJlcyBhbGxvY2F0ZWQuICAgICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgIGdseXBoc191c2VkOyAgLyogR2x5cGggc3RydWN0dXJlcyB1c2VkLiAgICAgICAgICAgICAgICovCisgICAgYmRmX2JieF90ICAgICAgIGJieDsgICAgICAgICAgLyogT3ZlcmFsbCBib3VuZGluZyBib3ggb2YgZ2x5cGhzLiAgICAgICovCisKKyAgfSBiZGZfZ2x5cGhsaXN0X3Q7CisKKworICB0eXBlZGVmIHN0cnVjdCAgYmRmX2ZvbnRfdF8KKyAgeworICAgIGNoYXIqICAgICAgICAgICAgbmFtZTsgICAgICAgICAgIC8qIE5hbWUgb2YgdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICovCisgICAgYmRmX2JieF90ICAgICAgICBiYng7ICAgICAgICAgICAgLyogRm9udCBib3VuZGluZyBib3guICAgICAgICAgICAgICAgICAgKi8KKworICAgIHVuc2lnbmVkIGxvbmcgICAgcG9pbnRfc2l6ZTsgICAgIC8qIFBvaW50IHNpemUgb2YgdGhlIGZvbnQuICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgICByZXNvbHV0aW9uX3g7ICAgLyogRm9udCBob3Jpem9udGFsIHJlc29sdXRpb24uICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIHJlc29sdXRpb25feTsgICAvKiBGb250IHZlcnRpY2FsIHJlc29sdXRpb24uICAgICAgICAgICAqLworCisgICAgaW50ICAgICAgICAgICAgICBzcGFjaW5nOyAgICAgICAgLyogRm9udCBzcGFjaW5nIHZhbHVlLiAgICAgICAgICAgICAgICAgKi8KKworICAgIHVuc2lnbmVkIHNob3J0ICAgbW9ub3dpZHRoOyAgICAgIC8qIExvZ2ljYWwgd2lkdGggZm9yIG1vbm93aWR0aCBmb250LiAgICovCisKKyAgICBsb25nICAgICAgICAgICAgIGRlZmF1bHRfY2hhcjsgICAvKiBFbmNvZGluZyBvZiB0aGUgZGVmYXVsdCBnbHlwaC4gICAgICAqLworCisgICAgbG9uZyAgICAgICAgICAgICBmb250X2FzY2VudDsgICAgLyogRm9udCBhc2NlbnQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBsb25nICAgICAgICAgICAgIGZvbnRfZGVzY2VudDsgICAvKiBGb250IGRlc2NlbnQuICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgdW5zaWduZWQgbG9uZyAgICBnbHlwaHNfc2l6ZTsgICAgLyogR2x5cGggc3RydWN0dXJlcyBhbGxvY2F0ZWQuICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIGdseXBoc191c2VkOyAgICAvKiBHbHlwaCBzdHJ1Y3R1cmVzIHVzZWQuICAgICAgICAgICAgICAqLworICAgIGJkZl9nbHlwaF90KiAgICAgZ2x5cGhzOyAgICAgICAgIC8qIEdseXBocyB0aGVtc2VsdmVzLiAgICAgICAgICAgICAgICAgICovCisKKyAgICB1bnNpZ25lZCBsb25nICAgIHVuZW5jb2RlZF9zaXplOyAvKiBVbmVuY29kZWQgZ2x5cGggc3RydWN0LiBhbGxvY2F0ZWQuICAqLworICAgIHVuc2lnbmVkIGxvbmcgICAgdW5lbmNvZGVkX3VzZWQ7IC8qIFVuZW5jb2RlZCBnbHlwaCBzdHJ1Y3QuIHVzZWQuICAgICAgICovCisgICAgYmRmX2dseXBoX3QqICAgICB1bmVuY29kZWQ7ICAgICAgLyogVW5lbmNvZGVkIGdseXBocyB0aGVtc2VsdmVzLiAgICAgICAgKi8KKworICAgIHVuc2lnbmVkIGxvbmcgICAgcHJvcHNfc2l6ZTsgICAgIC8qIEZvbnQgcHJvcGVydGllcyBhbGxvY2F0ZWQuICAgICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgICBwcm9wc191c2VkOyAgICAgLyogRm9udCBwcm9wZXJ0aWVzIHVzZWQuICAgICAgICAgICAgICAgKi8KKyAgICBiZGZfcHJvcGVydHlfdCogIHByb3BzOyAgICAgICAgICAvKiBGb250IHByb3BlcnRpZXMgdGhlbXNlbHZlcy4gICAgICAgICAqLworCisgICAgY2hhciogICAgICAgICAgICBjb21tZW50czsgICAgICAgLyogRm9udCBjb21tZW50cy4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIGNvbW1lbnRzX2xlbjsgICAvKiBMZW5ndGggb2YgY29tbWVudCBzdHJpbmcuICAgICAgICAgICAqLworCisgICAgYmRmX2dseXBobGlzdF90ICBvdmVyZmxvdzsgICAgICAgLyogU3RvcmFnZSB1c2VkIGZvciBnbHlwaCBpbnNlcnRpb24uICAgKi8KKworICAgIHZvaWQqICAgICAgICAgICAgaW50ZXJuYWw7ICAgICAgIC8qIEludGVybmFsIGRhdGEgZm9yIHRoZSBmb250LiAgICAgICAgICovCisKKyAgICAvKiBUaGUgc2l6ZSBvZiB0aGUgbmV4dCB0d28gYXJyYXlzIG11c3QgYmUgaW4gc3luYyB3aXRoIHRoZSAqLworICAgIC8qIHNpemUgb2YgdGhlIGBoYXZlJyBhcnJheSBpbiB0aGUgYGJkZl9wYXJzZV90JyBzdHJ1Y3R1cmUuICovCisgICAgdW5zaWduZWQgbG9uZyAgICBubW9kWzM0ODE2XTsgICAgLyogQml0bWFwIGluZGljYXRpbmcgbW9kaWZpZWQgZ2x5cGhzLiAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIHVtb2RbMzQ4MTZdOyAgICAvKiBCaXRtYXAgaW5kaWNhdGluZyBtb2RpZmllZCAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVuZW5jb2RlZCBnbHlwaHMuICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgc2hvcnQgICBtb2RpZmllZDsgICAgICAgLyogQm9vbGVhbiBpbmRpY2F0aW5nIGZvbnQgbW9kaWZpZWQuICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgIGJwcDsgICAgICAgICAgICAvKiBCaXRzIHBlciBwaXhlbC4gICAgICAgICAgICAgICAgICAgICAqLworCisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnk7CisKKyAgICBiZGZfcHJvcGVydHlfdCogIHVzZXJfcHJvcHM7CisgICAgdW5zaWduZWQgbG9uZyAgICBudXNlcl9wcm9wczsKKyAgICBoYXNodGFibGUgICAgICAgIHByb3B0Ymw7CisKKyAgfSBiZGZfZm9udF90OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUeXBlcyBmb3IgbG9hZC9zYXZlIGNhbGxiYWNrcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogRXJyb3IgY29kZXMuICovCisjZGVmaW5lIEJERl9NSVNTSU5HX1NUQVJUICAgICAgIC0xCisjZGVmaW5lIEJERl9NSVNTSU5HX0ZPTlROQU1FICAgIC0yCisjZGVmaW5lIEJERl9NSVNTSU5HX1NJWkUgICAgICAgIC0zCisjZGVmaW5lIEJERl9NSVNTSU5HX0NIQVJTICAgICAgIC00CisjZGVmaW5lIEJERl9NSVNTSU5HX1NUQVJUQ0hBUiAgIC01CisjZGVmaW5lIEJERl9NSVNTSU5HX0VOQ09ESU5HICAgIC02CisjZGVmaW5lIEJERl9NSVNTSU5HX0JCWCAgICAgICAgIC03CisKKyNkZWZpbmUgQkRGX09VVF9PRl9NRU1PUlkgICAgICAtMjAKKworI2RlZmluZSBCREZfSU5WQUxJRF9MSU5FICAgICAgLTEwMAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCREYgZm9udCBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGJkZl9sb2FkX2ZvbnQoIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgIGJkZl9vcHRpb25zX3QqICBvcHRzLAorICAgICAgICAgICAgICAgICBiZGZfZm9udF90KiAgICAqZm9udCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYmRmX2ZyZWVfZm9udCggYmRmX2ZvbnRfdCogIGZvbnQgKTsKKworICBGVF9MT0NBTCggYmRmX3Byb3BlcnR5X3QgKiApCisgIGJkZl9nZXRfcHJvcGVydHkoIGNoYXIqICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICBiZGZfZm9udF90KiAgZm9udCApOworCisgIEZUX0xPQ0FMKCBiZGZfcHJvcGVydHlfdCAqICkKKyAgYmRmX2dldF9mb250X3Byb3BlcnR5KCBiZGZfZm9udF90KiAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbmFtZSApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19CREZfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2JkZi9iZGZkcml2ci5jIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmZHJpdnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjNmYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmZHJpdnIuYwpAQCAtMCwwICsxLDg5NyBAQAorLyogIGJkZmRyaXZyLmMKKworICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBiZGYgZmlsZXMKKworICAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA4LCAyMDExLCAyMDEzLCAyMDE0IGJ5CisgICAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9CREZfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKKworI2luY2x1ZGUgRlRfU0VSVklDRV9CREZfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICisKKyNpbmNsdWRlICJiZGYuaCIKKyNpbmNsdWRlICJiZGZkcml2ci5oIgorCisjaW5jbHVkZSAiYmRmZXJyb3IuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2JkZmRyaXZlcgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEJERl9DTWFwUmVjXworICB7CisgICAgRlRfQ01hcFJlYyAgICAgICAgY21hcDsKKyAgICBGVF9VTG9uZyAgICAgICAgICBudW1fZW5jb2RpbmdzOyAvKiBmdG9ianMuaDogRlRfQ01hcC0+Y2xhenotPnNpemUgKi8KKyAgICBCREZfZW5jb2RpbmdfZWwqICBlbmNvZGluZ3M7CisKKyAgfSBCREZfQ01hcFJlYywgKkJERl9DTWFwOworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGJkZl9jbWFwX2luaXQoIEZUX0NNYXAgICAgIGJkZmNtYXAsCisgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGluaXRfZGF0YSApCisgIHsKKyAgICBCREZfQ01hcCAgY21hcCA9IChCREZfQ01hcCliZGZjbWFwOworICAgIEJERl9GYWNlICBmYWNlID0gKEJERl9GYWNlKUZUX0NNQVBfRkFDRSggY21hcCApOworICAgIEZUX1VOVVNFRCggaW5pdF9kYXRhICk7CisKKworICAgIGNtYXAtPm51bV9lbmNvZGluZ3MgPSBmYWNlLT5iZGZmb250LT5nbHlwaHNfdXNlZDsKKyAgICBjbWFwLT5lbmNvZGluZ3MgICAgID0gZmFjZS0+ZW5fdGFibGU7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBiZGZfY21hcF9kb25lKCBGVF9DTWFwICBiZGZjbWFwICkKKyAgeworICAgIEJERl9DTWFwICBjbWFwID0gKEJERl9DTWFwKWJkZmNtYXA7CisKKworICAgIGNtYXAtPmVuY29kaW5ncyAgICAgPSBOVUxMOworICAgIGNtYXAtPm51bV9lbmNvZGluZ3MgPSAwOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICBiZGZfY21hcF9jaGFyX2luZGV4KCBGVF9DTWFwICAgIGJkZmNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgY2hhcmNvZGUgKQorICB7CisgICAgQkRGX0NNYXAgICAgICAgICAgY21hcCAgICAgID0gKEJERl9DTWFwKWJkZmNtYXA7CisgICAgQkRGX2VuY29kaW5nX2VsKiAgZW5jb2RpbmdzID0gY21hcC0+ZW5jb2RpbmdzOworICAgIEZUX1VMb25nICAgICAgICAgIG1pbiwgbWF4LCBtaWQ7IC8qIG51bV9lbmNvZGluZ3MgKi8KKyAgICBGVF9VU2hvcnQgICAgICAgICByZXN1bHQgICAgPSAwOyAvKiBlbmNvZGluZ3MtPmdseXBoICovCisKKworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gY21hcC0+bnVtX2VuY29kaW5nczsKKworICAgIHdoaWxlICggbWluIDwgbWF4ICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgY29kZTsKKworCisgICAgICBtaWQgID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgY29kZSA9IChGVF9VTG9uZyllbmNvZGluZ3NbbWlkXS5lbmM7CisKKyAgICAgIGlmICggY2hhcmNvZGUgPT0gY29kZSApCisgICAgICB7CisgICAgICAgIC8qIGluY3JlYXNlIGdseXBoIGluZGV4IGJ5IDEgLS0gICAgICAgICAgICAgICovCisgICAgICAgIC8qIHdlIHJlc2VydmUgc2xvdCAwIGZvciB0aGUgdW5kZWZpbmVkIGdseXBoICovCisgICAgICAgIHJlc3VsdCA9IGVuY29kaW5nc1ttaWRdLmdseXBoICsgMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmICggY2hhcmNvZGUgPCBjb2RlICkKKyAgICAgICAgbWF4ID0gbWlkOworICAgICAgZWxzZQorICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIGJkZl9jbWFwX2NoYXJfbmV4dCggRlRfQ01hcCAgICAgYmRmY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICphY2hhcmNvZGUgKQorICB7CisgICAgQkRGX0NNYXAgICAgICAgICAgY21hcCAgICAgID0gKEJERl9DTWFwKWJkZmNtYXA7CisgICAgQkRGX2VuY29kaW5nX2VsKiAgZW5jb2RpbmdzID0gY21hcC0+ZW5jb2RpbmdzOworICAgIEZUX1VMb25nICAgICAgICAgIG1pbiwgbWF4LCBtaWQ7IC8qIG51bV9lbmNvZGluZ3MgKi8KKyAgICBGVF9VU2hvcnQgICAgICAgICByZXN1bHQgICA9IDA7ICAvKiBlbmNvZGluZ3MtPmdseXBoICovCisgICAgRlRfVUxvbmcgICAgICAgICAgY2hhcmNvZGUgPSAqYWNoYXJjb2RlICsgMTsKKworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBjbWFwLT5udW1fZW5jb2RpbmdzOworCisgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgIHsKKyAgICAgIEZUX1VMb25nICBjb2RlOyAvKiBzYW1lIGFzIEJERl9lbmNvZGluZ19lbC5lbmMgKi8KKworCisgICAgICBtaWQgID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgY29kZSA9IChGVF9VTG9uZyllbmNvZGluZ3NbbWlkXS5lbmM7CisKKyAgICAgIGlmICggY2hhcmNvZGUgPT0gY29kZSApCisgICAgICB7CisgICAgICAgIC8qIGluY3JlYXNlIGdseXBoIGluZGV4IGJ5IDEgLS0gICAgICAgICAgICAgICovCisgICAgICAgIC8qIHdlIHJlc2VydmUgc2xvdCAwIGZvciB0aGUgdW5kZWZpbmVkIGdseXBoICovCisgICAgICAgIHJlc3VsdCA9IGVuY29kaW5nc1ttaWRdLmdseXBoICsgMTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIGNoYXJjb2RlIDwgY29kZSApCisgICAgICAgIG1heCA9IG1pZDsKKyAgICAgIGVsc2UKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICB9CisKKyAgICBjaGFyY29kZSA9IDA7CisgICAgaWYgKCBtaW4gPCBjbWFwLT5udW1fZW5jb2RpbmdzICkKKyAgICB7CisgICAgICBjaGFyY29kZSA9IChGVF9VTG9uZyllbmNvZGluZ3NbbWluXS5lbmM7CisgICAgICByZXN1bHQgICA9IGVuY29kaW5nc1ttaW5dLmdseXBoICsgMTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBpZiAoIGNoYXJjb2RlID4gMHhGRkZGRkZGRlVMICkKKyAgICB7CisgICAgICBGVF9UUkFDRTEoKCAiYmRmX2NtYXBfY2hhcl9uZXh0OiBjaGFyY29kZSAweCV4ID4gMzJiaXQgQVBJIiApKTsKKyAgICAgICphY2hhcmNvZGUgPSAwOworICAgICAgLyogWFhYOiByZXN1bHQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gaW5kaWNhdGUgYW4gb3ZlcmZsb3cgZXJyb3IgKi8KKyAgICB9CisgICAgZWxzZQorICAgICAgKmFjaGFyY29kZSA9IChGVF9VSW50MzIpY2hhcmNvZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0NNYXBfQ2xhc3NSZWMgIGJkZl9jbWFwX2NsYXNzID0KKyAgeworICAgIHNpemVvZiAoIEJERl9DTWFwUmVjICksCisgICAgYmRmX2NtYXBfaW5pdCwKKyAgICBiZGZfY21hcF9kb25lLAorICAgIGJkZl9jbWFwX2NoYXJfaW5kZXgsCisgICAgYmRmX2NtYXBfY2hhcl9uZXh0LAorCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICB9OworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGJkZl9pbnRlcnByZXRfc3R5bGUoIEJERl9GYWNlICBiZGYgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICAgPSBGVF9GQUNFKCBiZGYgKTsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IGZhY2UtPm1lbW9yeTsKKyAgICBiZGZfZm9udF90KiAgICAgIGZvbnQgICA9IGJkZi0+YmRmZm9udDsKKyAgICBiZGZfcHJvcGVydHlfdCogIHByb3A7CisKKyAgICBjaGFyKiAgIHN0cmluZ3NbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgICBzaXplX3QgIG5uLCBsZW4sIGxlbmd0aHNbNF07CisKKworICAgIGZhY2UtPnN0eWxlX2ZsYWdzID0gMDsKKworICAgIHByb3AgPSBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIGZvbnQsIChjaGFyICopIlNMQU5UIiApOworICAgIGlmICggcHJvcCAmJiBwcm9wLT5mb3JtYXQgPT0gQkRGX0FUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBwcm9wLT52YWx1ZS5hdG9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnTycgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnbycgfHwKKyAgICAgICAgICAgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnSScgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnaScgKSApCisgICAgeworICAgICAgZmFjZS0+c3R5bGVfZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CisgICAgICBzdHJpbmdzWzJdID0gKCAqKHByb3AtPnZhbHVlLmF0b20pID09ICdPJyB8fCAqKHByb3AtPnZhbHVlLmF0b20pID09ICdvJyApCisgICAgICAgICAgICAgICAgICAgPyAoY2hhciAqKSJPYmxpcXVlIgorICAgICAgICAgICAgICAgICAgIDogKGNoYXIgKikiSXRhbGljIjsKKyAgICB9CisKKyAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAoY2hhciAqKSJXRUlHSFRfTkFNRSIgKTsKKyAgICBpZiAoIHByb3AgJiYgcHJvcC0+Zm9ybWF0ID09IEJERl9BVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgcHJvcC0+dmFsdWUuYXRvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ0InIHx8ICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ2InICkgKQorICAgIHsKKyAgICAgIGZhY2UtPnN0eWxlX2ZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfQk9MRDsKKyAgICAgIHN0cmluZ3NbMV0gPSAoY2hhciAqKSJCb2xkIjsKKyAgICB9CisKKyAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAoY2hhciAqKSJTRVRXSURUSF9OQU1FIiApOworICAgIGlmICggcHJvcCAmJiBwcm9wLT5mb3JtYXQgPT0gQkRGX0FUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgcHJvcC0+dmFsdWUuYXRvbSAmJiAqKHByb3AtPnZhbHVlLmF0b20pICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnTicgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnbicgKSApCisgICAgICBzdHJpbmdzWzNdID0gKGNoYXIgKikocHJvcC0+dmFsdWUuYXRvbSk7CisKKyAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAoY2hhciAqKSJBRERfU1RZTEVfTkFNRSIgKTsKKyAgICBpZiAoIHByb3AgJiYgcHJvcC0+Zm9ybWF0ID09IEJERl9BVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHByb3AtPnZhbHVlLmF0b20gJiYgKihwcm9wLT52YWx1ZS5hdG9tKSAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICEoICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ04nIHx8ICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ24nICkgKQorICAgICAgc3RyaW5nc1swXSA9IChjaGFyICopKHByb3AtPnZhbHVlLmF0b20pOworCisgICAgZm9yICggbGVuID0gMCwgbm4gPSAwOyBubiA8IDQ7IG5uKysgKQorICAgIHsKKyAgICAgIGxlbmd0aHNbbm5dID0gMDsKKyAgICAgIGlmICggc3RyaW5nc1tubl0gKQorICAgICAgeworICAgICAgICBsZW5ndGhzW25uXSA9IGZ0X3N0cmxlbiggc3RyaW5nc1tubl0gKTsKKyAgICAgICAgbGVuICAgICAgICArPSBsZW5ndGhzW25uXSArIDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBsZW4gPT0gMCApCisgICAgeworICAgICAgc3RyaW5nc1swXSA9IChjaGFyICopIlJlZ3VsYXIiOworICAgICAgbGVuZ3Roc1swXSA9IGZ0X3N0cmxlbiggc3RyaW5nc1swXSApOworICAgICAgbGVuICAgICAgICA9IGxlbmd0aHNbMF0gKyAxOworICAgIH0KKworICAgIHsKKyAgICAgIGNoYXIqICBzOworCisKKyAgICAgIGlmICggRlRfQUxMT0MoIGZhY2UtPnN0eWxlX25hbWUsIGxlbiApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBzID0gZmFjZS0+c3R5bGVfbmFtZTsKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IDQ7IG5uKysgKQorICAgICAgeworICAgICAgICBjaGFyKiAgc3JjID0gc3RyaW5nc1tubl07CisKKworICAgICAgICBsZW4gPSBsZW5ndGhzW25uXTsKKworICAgICAgICBpZiAoIHNyYyA9PSBOVUxMICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBzZXBhcmF0ZSBlbGVtZW50cyB3aXRoIGEgc3BhY2UgKi8KKyAgICAgICAgaWYgKCBzICE9IGZhY2UtPnN0eWxlX25hbWUgKQorICAgICAgICAgICpzKysgPSAnICc7CisKKyAgICAgICAgZnRfbWVtY3B5KCBzLCBzcmMsIGxlbiApOworCisgICAgICAgIC8qIG5lZWQgdG8gY29udmVydCBzcGFjZXMgdG8gZGFzaGVzIGZvciAqLworICAgICAgICAvKiBhZGRfc3R5bGVfbmFtZSBhbmQgc2V0d2lkdGhfbmFtZSAgICAgKi8KKyAgICAgICAgaWYgKCBubiA9PSAwIHx8IG5uID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90ICBtbTsKKworCisgICAgICAgICAgZm9yICggbW0gPSAwOyBtbSA8IGxlbjsgbW0rKyApCisgICAgICAgICAgICBpZiAoIHNbbW1dID09ICcgJyApCisgICAgICAgICAgICAgIHNbbW1dID0gJy0nOworICAgICAgICB9CisKKyAgICAgICAgcyArPSBsZW47CisgICAgICB9CisgICAgICAqcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBCREZfRmFjZV9Eb25lKCBGVF9GYWNlICBiZGZmYWNlICkgICAgICAgICAvKiBCREZfRmFjZSAqLworICB7CisgICAgQkRGX0ZhY2UgICBmYWNlID0gKEJERl9GYWNlKWJkZmZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworICAgIGJkZl9mcmVlX2ZvbnQoIGZhY2UtPmJkZmZvbnQgKTsKKworICAgIEZUX0ZSRUUoIGZhY2UtPmVuX3RhYmxlICk7CisKKyAgICBGVF9GUkVFKCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nICk7CisgICAgRlRfRlJFRSggZmFjZS0+Y2hhcnNldF9yZWdpc3RyeSApOworICAgIEZUX0ZSRUUoIGJkZmZhY2UtPmZhbWlseV9uYW1lICk7CisgICAgRlRfRlJFRSggYmRmZmFjZS0+c3R5bGVfbmFtZSApOworCisgICAgRlRfRlJFRSggYmRmZmFjZS0+YXZhaWxhYmxlX3NpemVzICk7CisKKyAgICBGVF9GUkVFKCBmYWNlLT5iZGZmb250ICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBCREZfRmFjZV9Jbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGJkZmZhY2UsICAgICAgICAvKiBCREZfRmFjZSAqLworICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEJERl9GYWNlICAgICAgIGZhY2UgICA9IChCREZfRmFjZSliZGZmYWNlOworICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBmYWNlICk7CisKKyAgICBiZGZfZm9udF90KiAgICBmb250ID0gTlVMTDsKKyAgICBiZGZfb3B0aW9uc190ICBvcHRpb25zOworCisgICAgRlRfVU5VU0VEKCBudW1fcGFyYW1zICk7CisgICAgRlRfVU5VU0VEKCBwYXJhbXMgKTsKKworCisgICAgRlRfVFJBQ0UyKCggIkJERiBkcml2ZXJcbiIgKSk7CisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCAwICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgb3B0aW9ucy5jb3JyZWN0X21ldHJpY3MgPSAxOyAgIC8qIEZaIFhYWDogb3B0aW9ucyBzZW1hbnRpY3MgKi8KKyAgICBvcHRpb25zLmtlZXBfdW5lbmNvZGVkICA9IDE7CisgICAgb3B0aW9ucy5rZWVwX2NvbW1lbnRzICAgPSAwOworICAgIG9wdGlvbnMuZm9udF9zcGFjaW5nICAgID0gQkRGX1BST1BPUlRJT05BTDsKKworICAgIGVycm9yID0gYmRmX2xvYWRfZm9udCggc3RyZWFtLCBtZW1vcnksICZvcHRpb25zLCAmZm9udCApOworICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgTWlzc2luZ19TdGFydGZvbnRfRmllbGQgKSApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgQkRGIGZpbGVcbiIgKSk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorICAgIGVsc2UgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiB3ZSBoYXZlIGEgYmRmIGZvbnQ6IGxldCdzIGNvbnN0cnVjdCB0aGUgZmFjZSBvYmplY3QgKi8KKyAgICBmYWNlLT5iZGZmb250ID0gZm9udDsKKworICAgIC8qIEJERiBjb3VsZCBub3QgaGF2ZSBtdWx0aXBsZSBmYWNlIGluIHNpbmdsZSBmb250IGZpbGUuCisgICAgICogWFhYOiBub24temVybyBmYWNlX2luZGV4IGlzIGFscmVhZHkgaW52YWxpZCBhcmd1bWVudCwgYnV0CisgICAgICogICAgICBUeXBlMSwgVHlwZTQyIGRyaXZlciBoYXMgYSBjb252ZW50aW9uIHRvIHJldHVybgorICAgICAqICAgICAgYW4gaW52YWxpZCBhcmd1bWVudCBlcnJvciB3aGVuIHRoZSBmb250IGNvdWxkIGJlCisgICAgICogICAgICBvcGVuZWQgYnkgdGhlIHNwZWNpZmllZCBkcml2ZXIuCisgICAgICovCisgICAgaWYgKCBmYWNlX2luZGV4ID4gMCApIHsKKyAgICAgIEZUX0VSUk9SKCggIkJERl9GYWNlX0luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKKyAgICAgIEJERl9GYWNlX0RvbmUoIGJkZmZhY2UgKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKworICAgIHsKKyAgICAgIGJkZl9wcm9wZXJ0eV90KiAgcHJvcCA9IE5VTEw7CisKKworICAgICAgRlRfVFJBQ0U0KCggIiAgbnVtYmVyIG9mIGdseXBoczogYWxsb2NhdGVkICVkICh1c2VkICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIGZvbnQtPmdseXBoc19zaXplLAorICAgICAgICAgICAgICAgICAgZm9udC0+Z2x5cGhzX3VzZWQgKSk7CisgICAgICBGVF9UUkFDRTQoKCAiICBudW1iZXIgb2YgdW5lbmNvZGVkIGdseXBoczogYWxsb2NhdGVkICVkICh1c2VkICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIGZvbnQtPnVuZW5jb2RlZF9zaXplLAorICAgICAgICAgICAgICAgICAgZm9udC0+dW5lbmNvZGVkX3VzZWQgKSk7CisKKyAgICAgIGJkZmZhY2UtPm51bV9mYWNlcyAgPSAxOworICAgICAgYmRmZmFjZS0+ZmFjZV9pbmRleCA9IDA7CisKKyAgICAgIGJkZmZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTOworCisgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiU1BBQ0lORyIgKTsKKyAgICAgIGlmICggcHJvcCAmJiBwcm9wLT5mb3JtYXQgPT0gQkRGX0FUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIHByb3AtPnZhbHVlLmF0b20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ00nIHx8ICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ20nIHx8CisgICAgICAgICAgICAgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnQycgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnYycgKSApCisgICAgICAgIGJkZmZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIOworCisgICAgICAvKiBGWiBYWFg6IFRPIERPOiBGVF9GQUNFX0ZMQUdTX1ZFUlRJQ0FMICAgKi8KKyAgICAgIC8qIEZaIFhYWDogSSBuZWVkIGEgZm9udCB0byBpbXBsZW1lbnQgdGhpcyAqLworCisgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiRkFNSUxZX05BTUUiICk7CisgICAgICBpZiAoIHByb3AgJiYgcHJvcC0+dmFsdWUuYXRvbSApCisgICAgICB7CisgICAgICAgIGlmICggRlRfU1RSRFVQKCBiZGZmYWNlLT5mYW1pbHlfbmFtZSwgcHJvcC0+dmFsdWUuYXRvbSApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJkZmZhY2UtPmZhbWlseV9uYW1lID0gTlVMTDsKKworICAgICAgaWYgKCAoIGVycm9yID0gYmRmX2ludGVycHJldF9zdHlsZSggZmFjZSApICkgIT0gMCApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogdGhlIG51bWJlciBvZiBnbHlwaHMgKHdpdGggb25lIHNsb3QgZm9yIHRoZSB1bmRlZmluZWQgZ2x5cGggKi8KKyAgICAgIC8qIGF0IHBvc2l0aW9uIDAgYW5kIGFsbCB1bmVuY29kZWQgZ2x5cGhzKSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBiZGZmYWNlLT5udW1fZ2x5cGhzID0gKEZUX0xvbmcpKCBmb250LT5nbHlwaHNfc2l6ZSArIDEgKTsKKworICAgICAgYmRmZmFjZS0+bnVtX2ZpeGVkX3NpemVzID0gMTsKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBiZGZmYWNlLT5hdmFpbGFibGVfc2l6ZXMsIDEgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgeworICAgICAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplID0gYmRmZmFjZS0+YXZhaWxhYmxlX3NpemVzOworICAgICAgICBGVF9TaG9ydCAgICAgICAgIHJlc29sdXRpb25feCA9IDAsIHJlc29sdXRpb25feSA9IDA7CisKKworICAgICAgICBGVF9NRU1fWkVSTyggYnNpemUsIHNpemVvZiAoIEZUX0JpdG1hcF9TaXplICkgKTsKKworICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggZm9udC0+Zm9udF9hc2NlbnQgKyBmb250LT5mb250X2Rlc2NlbnQgKTsKKworICAgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiQVZFUkFHRV9XSURUSCIgKTsKKyAgICAgICAgaWYgKCBwcm9wICkKKyAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpKCAoIHByb3AtPnZhbHVlLmwgKyA1ICkgLyAxMCApOworICAgICAgICBlbHNlCisgICAgICAgICAgYnNpemUtPndpZHRoID0gKEZUX1Nob3J0KSggYnNpemUtPmhlaWdodCAqIDIvMyApOworCisgICAgICAgIHByb3AgPSBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIGZvbnQsICJQT0lOVF9TSVpFIiApOworICAgICAgICBpZiAoIHByb3AgKQorICAgICAgICAgIC8qIGNvbnZlcnQgZnJvbSA3MjIuNyBkZWNpcG9pbnRzIHRvIDcyIHBvaW50cyBwZXIgaW5jaCAqLworICAgICAgICAgIGJzaXplLT5zaXplID0KKyAgICAgICAgICAgIChGVF9Qb3MpKCAoIHByb3AtPnZhbHVlLmwgKiA2NCAqIDcyMDAgKyAzNjEzNUwgKSAvIDcyMjcwTCApOworICAgICAgICBlbHNlCisgICAgICAgICAgYnNpemUtPnNpemUgPSBic2l6ZS0+d2lkdGggPDwgNjsKKworICAgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiUElYRUxfU0laRSIgKTsKKyAgICAgICAgaWYgKCBwcm9wICkKKyAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgPDwgNjsKKworICAgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiUkVTT0xVVElPTl9YIiApOworICAgICAgICBpZiAoIHByb3AgKQorICAgICAgICAgIHJlc29sdXRpb25feCA9IChGVF9TaG9ydClwcm9wLT52YWx1ZS5sOworCisgICAgICAgIHByb3AgPSBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIGZvbnQsICJSRVNPTFVUSU9OX1kiICk7CisgICAgICAgIGlmICggcHJvcCApCisgICAgICAgICAgcmVzb2x1dGlvbl95ID0gKEZUX1Nob3J0KXByb3AtPnZhbHVlLmw7CisKKyAgICAgICAgaWYgKCBic2l6ZS0+eV9wcGVtID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IGJzaXplLT5zaXplOworICAgICAgICAgIGlmICggcmVzb2x1dGlvbl95ICkKKyAgICAgICAgICAgIGJzaXplLT55X3BwZW0gPSBic2l6ZS0+eV9wcGVtICogcmVzb2x1dGlvbl95IC8gNzI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCByZXNvbHV0aW9uX3ggJiYgcmVzb2x1dGlvbl95ICkKKyAgICAgICAgICBic2l6ZS0+eF9wcGVtID0gYnNpemUtPnlfcHBlbSAqIHJlc29sdXRpb25feCAvIHJlc29sdXRpb25feTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGJzaXplLT54X3BwZW0gPSBic2l6ZS0+eV9wcGVtOworICAgICAgfQorCisgICAgICAvKiBlbmNvZGluZyB0YWJsZSAqLworICAgICAgeworICAgICAgICBiZGZfZ2x5cGhfdCogICBjdXIgPSBmb250LT5nbHlwaHM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgIG47CisKKworICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggZmFjZS0+ZW5fdGFibGUsIGZvbnQtPmdseXBoc19zaXplICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBmYWNlLT5kZWZhdWx0X2dseXBoID0gMDsKKyAgICAgICAgZm9yICggbiA9IDA7IG4gPCBmb250LT5nbHlwaHNfc2l6ZTsgbisrICkKKyAgICAgICAgeworICAgICAgICAgIChmYWNlLT5lbl90YWJsZVtuXSkuZW5jID0gY3VyW25dLmVuY29kaW5nOworICAgICAgICAgIEZUX1RSQUNFNCgoICIgIGlkeCAlZCwgdmFsIDB4JWxYXG4iLCBuLCBjdXJbbl0uZW5jb2RpbmcgKSk7CisgICAgICAgICAgKGZhY2UtPmVuX3RhYmxlW25dKS5nbHlwaCA9IChGVF9VU2hvcnQpbjsKKworICAgICAgICAgIGlmICggY3VyW25dLmVuY29kaW5nID09IGZvbnQtPmRlZmF1bHRfY2hhciApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBuIDwgRlRfVUlOVF9NQVggKQorICAgICAgICAgICAgICBmYWNlLT5kZWZhdWx0X2dseXBoID0gKEZUX1VJbnQpbjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgRlRfVFJBQ0UxKCggIkJERl9GYWNlX0luaXQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlkeCAlZCBpcyB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtXG4iLCBuICkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBjaGFybWFwcyAqLworICAgICAgeworICAgICAgICBiZGZfcHJvcGVydHlfdCAgKmNoYXJzZXRfcmVnaXN0cnksICpjaGFyc2V0X2VuY29kaW5nOworICAgICAgICBGVF9Cb29sICAgICAgICAgIHVuaWNvZGVfY2hhcm1hcCAgPSAwOworCisKKyAgICAgICAgY2hhcnNldF9yZWdpc3RyeSA9CisgICAgICAgICAgYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiQ0hBUlNFVF9SRUdJU1RSWSIgKTsKKyAgICAgICAgY2hhcnNldF9lbmNvZGluZyA9CisgICAgICAgICAgYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiQ0hBUlNFVF9FTkNPRElORyIgKTsKKyAgICAgICAgaWYgKCBjaGFyc2V0X3JlZ2lzdHJ5ICYmIGNoYXJzZXRfZW5jb2RpbmcgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBjaGFyc2V0X3JlZ2lzdHJ5LT5mb3JtYXQgPT0gQkRGX0FUT00gJiYKKyAgICAgICAgICAgICAgIGNoYXJzZXRfZW5jb2RpbmctPmZvcm1hdCA9PSBCREZfQVRPTSAmJgorICAgICAgICAgICAgICAgY2hhcnNldF9yZWdpc3RyeS0+dmFsdWUuYXRvbSAgICAgICAgICYmCisgICAgICAgICAgICAgICBjaGFyc2V0X2VuY29kaW5nLT52YWx1ZS5hdG9tICAgICAgICAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzOworCisKKyAgICAgICAgICAgIGlmICggRlRfU1RSRFVQKCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRfZW5jb2RpbmctPnZhbHVlLmF0b20gKSB8fAorICAgICAgICAgICAgICAgICBGVF9TVFJEVVAoIGZhY2UtPmNoYXJzZXRfcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldF9yZWdpc3RyeS0+dmFsdWUuYXRvbSApICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICAvKiBVaCwgb2gsIGNvbXBhcmUgZmlyc3QgbGV0dGVycyBtYW51YWxseSB0byBhdm9pZCBkZXBlbmRlbmN5ICovCisgICAgICAgICAgICAvKiBvbiBsb2NhbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBzID0gZmFjZS0+Y2hhcnNldF9yZWdpc3RyeTsKKyAgICAgICAgICAgIGlmICggKCBzWzBdID09ICdpJyB8fCBzWzBdID09ICdJJyApICYmCisgICAgICAgICAgICAgICAgICggc1sxXSA9PSAncycgfHwgc1sxXSA9PSAnUycgKSAmJgorICAgICAgICAgICAgICAgICAoIHNbMl0gPT0gJ28nIHx8IHNbMl0gPT0gJ08nICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzICs9IDM7CisgICAgICAgICAgICAgIGlmICggIWZ0X3N0cmNtcCggcywgIjEwNjQ2IiApICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgKCAhZnRfc3RyY21wKCBzLCAiODg1OSIgKSAmJgorICAgICAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggZmFjZS0+Y2hhcnNldF9lbmNvZGluZywgIjEiICkgKSApCisgICAgICAgICAgICAgIHVuaWNvZGVfY2hhcm1hcCA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfQ2hhck1hcFJlYyAgY2hhcm1hcDsKKworCisgICAgICAgICAgICAgIGNoYXJtYXAuZmFjZSAgICAgICAgPSBGVF9GQUNFKCBmYWNlICk7CisgICAgICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19OT05FOworICAgICAgICAgICAgICAvKiBpbml0aWFsIHBsYXRmb3JtL2VuY29kaW5nIHNob3VsZCBpbmRpY2F0ZSB1bnNldCBzdGF0dXM/ICovCisgICAgICAgICAgICAgIGNoYXJtYXAucGxhdGZvcm1faWQgPSBUVF9QTEFURk9STV9BUFBMRV9VTklDT0RFOworICAgICAgICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfQVBQTEVfSURfREVGQVVMVDsKKworICAgICAgICAgICAgICBpZiAoIHVuaWNvZGVfY2hhcm1hcCApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfVU5JQ09ERTsKKyAgICAgICAgICAgICAgICBjaGFybWFwLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fTUlDUk9TT0ZUOworICAgICAgICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9NU19JRF9VTklDT0RFX0NTOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggJmJkZl9jbWFwX2NsYXNzLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOworCisjaWYgMAorICAgICAgICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCisgICAgICAgICAgICAgIGlmICggYmRmZmFjZS0+bnVtX2NoYXJtYXBzICkKKyAgICAgICAgICAgICAgICBiZGZmYWNlLT5jaGFybWFwID0gYmRmZmFjZS0+Y2hhcm1hcHNbMF07CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIG90aGVyd2lzZSBhc3N1bWUgQWRvYmUgc3RhbmRhcmQgZW5jb2RpbmcgKi8KKworICAgICAgICB7CisgICAgICAgICAgRlRfQ2hhck1hcFJlYyAgY2hhcm1hcDsKKworCisgICAgICAgICAgY2hhcm1hcC5mYWNlICAgICAgICA9IEZUX0ZBQ0UoIGZhY2UgKTsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQ7CisgICAgICAgICAgY2hhcm1hcC5wbGF0Zm9ybV9pZCA9IFRUX1BMQVRGT1JNX0FET0JFOworICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9TVEFOREFSRDsKKworICAgICAgICAgIGVycm9yID0gRlRfQ01hcF9OZXcoICZiZGZfY21hcF9jbGFzcywgTlVMTCwgJmNoYXJtYXAsIE5VTEwgKTsKKworICAgICAgICAgIC8qIFNlbGVjdCBkZWZhdWx0IGNoYXJtYXAgKi8KKyAgICAgICAgICBpZiAoIGJkZmZhY2UtPm51bV9jaGFybWFwcyApCisgICAgICAgICAgICBiZGZmYWNlLT5jaGFybWFwID0gYmRmZmFjZS0+Y2hhcm1hcHNbMF07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgRmFpbDoKKyAgICBCREZfRmFjZV9Eb25lKCBiZGZmYWNlICk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBCREZfU2l6ZV9TZWxlY3QoIEZUX1NpemUgICBzaXplLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBzdHJpa2VfaW5kZXggKQorICB7CisgICAgYmRmX2ZvbnRfdCogIGJkZmZvbnQgPSAoIChCREZfRmFjZSlzaXplLT5mYWNlICktPmJkZmZvbnQ7CisKKworICAgIEZUX1NlbGVjdF9NZXRyaWNzKCBzaXplLT5mYWNlLCBzdHJpa2VfaW5kZXggKTsKKworICAgIHNpemUtPm1ldHJpY3MuYXNjZW5kZXIgICAgPSBiZGZmb250LT5mb250X2FzY2VudCA8PCA2OworICAgIHNpemUtPm1ldHJpY3MuZGVzY2VuZGVyICAgPSAtYmRmZm9udC0+Zm9udF9kZXNjZW50IDw8IDY7CisgICAgc2l6ZS0+bWV0cmljcy5tYXhfYWR2YW5jZSA9IGJkZmZvbnQtPmJieC53aWR0aCA8PCA2OworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIEJERl9TaXplX1JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgRlRfRmFjZSAgICAgICAgICBmYWNlICAgID0gc2l6ZS0+ZmFjZTsKKyAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplICAgPSBmYWNlLT5hdmFpbGFibGVfc2l6ZXM7CisgICAgYmRmX2ZvbnRfdCogICAgICBiZGZmb250ID0gKCAoQkRGX0ZhY2UpZmFjZSApLT5iZGZmb250OworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3IgICA9IEZUX0VSUiggSW52YWxpZF9QaXhlbF9TaXplICk7CisgICAgRlRfTG9uZyAgICAgICAgICBoZWlnaHQ7CisKKworICAgIGhlaWdodCA9IEZUX1JFUVVFU1RfSEVJR0hUKCByZXEgKTsKKyAgICBoZWlnaHQgPSAoIGhlaWdodCArIDMyICkgPj4gNjsKKworICAgIHN3aXRjaCAoIHJlcS0+dHlwZSApCisgICAgeworICAgIGNhc2UgRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTDoKKyAgICAgIGlmICggaGVpZ2h0ID09ICggKCBic2l6ZS0+eV9wcGVtICsgMzIgKSA+PiA2ICkgKQorICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTToKKyAgICAgIGlmICggaGVpZ2h0ID09ICggYmRmZm9udC0+Zm9udF9hc2NlbnQgKworICAgICAgICAgICAgICAgICAgICAgICBiZGZmb250LT5mb250X2Rlc2NlbnQgKSApCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gQkRGX1NpemVfU2VsZWN0KCBzaXplLCAwICk7CisgIH0KKworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIEJERl9HbHlwaF9Mb2FkKCBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICBsb2FkX2ZsYWdzICkKKyAgeworICAgIEJERl9GYWNlICAgICBiZGYgICAgPSAoQkRGX0ZhY2UpRlRfU0laRV9GQUNFKCBzaXplICk7CisgICAgRlRfRmFjZSAgICAgIGZhY2UgICA9IEZUX0ZBQ0UoIGJkZiApOworICAgIEZUX0Vycm9yICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfQml0bWFwKiAgIGJpdG1hcCA9ICZzbG90LT5iaXRtYXA7CisgICAgYmRmX2dseXBoX3QgIGdseXBoOworICAgIGludCAgICAgICAgICBicHAgICAgPSBiZGYtPmJkZmZvbnQtPmJwcDsKKworICAgIEZUX1VOVVNFRCggbG9hZF9mbGFncyApOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBnbHlwaF9pbmRleCA+PSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfVFJBQ0UxKCggIkJERl9HbHlwaF9Mb2FkOiBnbHlwaCBpbmRleCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICAvKiBpbmRleCAwIGlzIHRoZSB1bmRlZmluZWQgZ2x5cGggKi8KKyAgICBpZiAoIGdseXBoX2luZGV4ID09IDAgKQorICAgICAgZ2x5cGhfaW5kZXggPSBiZGYtPmRlZmF1bHRfZ2x5cGg7CisgICAgZWxzZQorICAgICAgZ2x5cGhfaW5kZXgtLTsKKworICAgIC8qIHNsb3QsIGJpdG1hcCA9PiBmcmVldHlwZSwgZ2x5cGggPT4gYmRmbGliICovCisgICAgZ2x5cGggPSBiZGYtPmJkZmZvbnQtPmdseXBoc1tnbHlwaF9pbmRleF07CisKKyAgICBiaXRtYXAtPnJvd3MgID0gZ2x5cGguYmJ4LmhlaWdodDsKKyAgICBiaXRtYXAtPndpZHRoID0gZ2x5cGguYmJ4LndpZHRoOworICAgIGlmICggZ2x5cGguYnByID4gSU5UX01BWCApCisgICAgICBGVF9UUkFDRTEoKCAiQkRGX0dseXBoX0xvYWQ6IHRvbyBsYXJnZSBwaXRjaCAlZCBpcyB0cnVuY2F0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgZ2x5cGguYnByICkpOworICAgIGJpdG1hcC0+cGl0Y2ggPSAoaW50KWdseXBoLmJwcjsgLyogc2FtZSBhcyBGVF9CaXRtYXAucGl0Y2ggKi8KKworICAgIC8qIG5vdGU6IHdlIGRvbid0IGFsbG9jYXRlIGEgbmV3IGFycmF5IHRvIGhvbGQgdGhlIGJpdG1hcDsgKi8KKyAgICAvKiAgICAgICB3ZSBjYW4gc2ltcGx5IHBvaW50IHRvIGl0ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAoIHNsb3QsIGdseXBoLmJpdG1hcCApOworCisgICAgc3dpdGNoICggYnBwICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9HUkFZMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgIGJpdG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIDg6CisgICAgICBiaXRtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVk7CisgICAgICBiaXRtYXAtPm51bV9ncmF5cyAgPSAyNTY7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzbG90LT5mb3JtYXQgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA7CisgICAgc2xvdC0+Yml0bWFwX2xlZnQgPSBnbHlwaC5iYngueF9vZmZzZXQ7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgPSBnbHlwaC5iYnguYXNjZW50OworCisgICAgc2xvdC0+bWV0cmljcy5ob3JpQWR2YW5jZSAgPSAoRlRfUG9zKSggZ2x5cGguZHdpZHRoIDw8IDYgKTsKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3MpKCBnbHlwaC5iYngueF9vZmZzZXQgPDwgNiApOworICAgIHNsb3QtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcykoIGdseXBoLmJieC5hc2NlbnQgPDwgNiApOworICAgIHNsb3QtPm1ldHJpY3Mud2lkdGggICAgICAgID0gKEZUX1BvcykoIGJpdG1hcC0+d2lkdGggPDwgNiApOworICAgIHNsb3QtPm1ldHJpY3MuaGVpZ2h0ICAgICAgID0gKEZUX1BvcykoIGJpdG1hcC0+cm93cyA8PCA2ICk7CisKKyAgICAvKgorICAgICAqIFhYWCBEV0lEVEgxIGFuZCBWVkVDVE9SIHNob3VsZCBiZSBwYXJzZWQgYW5kCisgICAgICogdXNlZCBoZXJlLCBwcm92aWRlZCBzdWNoIGZvbnRzIGRvIGV4aXN0LgorICAgICAqLworICAgIGZ0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcyggJnNsb3QtPm1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGYtPmJkZmZvbnQtPmJieC5oZWlnaHQgPDwgNiApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworIC8qCisgICoKKyAgKiAgQkRGIFNFUlZJQ0UKKyAgKgorICAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBiZGZfZ2V0X2JkZl9wcm9wZXJ0eSggQkRGX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICAgIHByb3BfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJERl9Qcm9wZXJ0eVJlYyAgKmFwcm9wZXJ0eSApCisgIHsKKyAgICBiZGZfcHJvcGVydHlfdCogIHByb3A7CisKKworICAgIEZUX0FTU0VSVCggZmFjZSAmJiBmYWNlLT5iZGZmb250ICk7CisKKyAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmYWNlLT5iZGZmb250LCBwcm9wX25hbWUgKTsKKyAgICBpZiAoIHByb3AgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoIHByb3AtPmZvcm1hdCApCisgICAgICB7CisgICAgICBjYXNlIEJERl9BVE9NOgorICAgICAgICBhcHJvcGVydHktPnR5cGUgICA9IEJERl9QUk9QRVJUWV9UWVBFX0FUT007CisgICAgICAgIGFwcm9wZXJ0eS0+dS5hdG9tID0gcHJvcC0+dmFsdWUuYXRvbTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQkRGX0lOVEVHRVI6CisgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA+IDB4N0ZGRkZGRkZMIHx8IHByb3AtPnZhbHVlLmwgPCAoIC0xIC0gMHg3RkZGRkZGRkwgKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiYmRmX2dldF9iZGZfcHJvcGVydHk6IgorICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGludGVnZXIgMHgleCBpcyB0cnVuY2F0ZWRcbiIgKSk7CisgICAgICAgIH0KKyAgICAgICAgYXByb3BlcnR5LT50eXBlICAgICAgPSBCREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSOworICAgICAgICBhcHJvcGVydHktPnUuaW50ZWdlciA9IChGVF9JbnQzMilwcm9wLT52YWx1ZS5sOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCREZfQ0FSRElOQUw6CisgICAgICAgIGlmICggcHJvcC0+dmFsdWUudWwgPiAweEZGRkZGRkZGVUwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggImJkZl9nZXRfYmRmX3Byb3BlcnR5OiIKKyAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBjYXJkaW5hbCAweCV4IGlzIHRydW5jYXRlZFxuIiApKTsKKyAgICAgICAgfQorICAgICAgICBhcHJvcGVydHktPnR5cGUgICAgICAgPSBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTDsKKyAgICAgICAgYXByb3BlcnR5LT51LmNhcmRpbmFsID0gKEZUX1VJbnQzMilwcm9wLT52YWx1ZS51bDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBGYWlsOgorICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYmRmX2dldF9jaGFyc2V0X2lkKCBCREZfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKmFjaGFyc2V0X3JlZ2lzdHJ5ICkKKyAgeworICAgICphY2hhcnNldF9lbmNvZGluZyA9IGZhY2UtPmNoYXJzZXRfZW5jb2Rpbmc7CisgICAgKmFjaGFyc2V0X3JlZ2lzdHJ5ID0gZmFjZS0+Y2hhcnNldF9yZWdpc3RyeTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9CREZSZWMgIGJkZl9zZXJ2aWNlX2JkZiA9CisgIHsKKyAgICAoRlRfQkRGX0dldENoYXJzZXRJZEZ1bmMpYmRmX2dldF9jaGFyc2V0X2lkLAorICAgIChGVF9CREZfR2V0UHJvcGVydHlGdW5jKSBiZGZfZ2V0X2JkZl9wcm9wZXJ0eQorICB9OworCisKKyAvKgorICAqCisgICogIFNFUlZJQ0VTIExJU1QKKyAgKgorICAqLworCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgYmRmX3NlcnZpY2VzW10gPQorICB7CisgICAgeyBGVF9TRVJWSUNFX0lEX0JERiwgICAgICAgICAmYmRmX3NlcnZpY2VfYmRmIH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFULCBGVF9GT05UX0ZPUk1BVF9CREYgfSwKKyAgICB7IE5VTEwsIE5VTEwgfQorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Nb2R1bGVfSW50ZXJmYWNlICkKKyAgYmRmX2RyaXZlcl9yZXF1ZXN0ZXIoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbmFtZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIGJkZl9zZXJ2aWNlcywgbmFtZSApOworICB9CisKKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIGJkZl9kcml2ZXJfY2xhc3MgPQorICB7CisgICAgeworICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgICAgfAorICAgICAgRlRfTU9EVUxFX0RSSVZFUl9OT19PVVRMSU5FUywKKyAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorCisgICAgICAiYmRmIiwKKyAgICAgIDB4MTAwMDBMLAorICAgICAgMHgyMDAwMEwsCisKKyAgICAgIDAsCisKKyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfTW9kdWxlX0NvbnN0cnVjdG9yICovCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX01vZHVsZV9EZXN0cnVjdG9yICAqLworICAgICAgYmRmX2RyaXZlcl9yZXF1ZXN0ZXIKKyAgICB9LAorCisgICAgc2l6ZW9mICggQkRGX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBGVF9TaXplUmVjICksCisgICAgc2l6ZW9mICggRlRfR2x5cGhTbG90UmVjICksCisKKyAgICBCREZfRmFjZV9Jbml0LAorICAgIEJERl9GYWNlX0RvbmUsCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX1NpemVfSW5pdEZ1bmMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfU2l6ZV9Eb25lRnVuYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9TbG90X0luaXRGdW5jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX1Nsb3RfRG9uZUZ1bmMgKi8KKworICAgIEJERl9HbHlwaF9Mb2FkLAorCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0S2VybmluZ0Z1bmMgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICovCisKKyAgICBCREZfU2l6ZV9SZXF1ZXN0LAorICAgIEJERl9TaXplX1NlbGVjdAorICB9OworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmZHJpdnIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZmRyaXZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2MWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZmRyaXZyLmgKQEAgLTAsMCArMSw4MCBAQAorLyogIGJkZmRyaXZyLmgKKworICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBiZGYgZm9udHMKKworICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgYnkKKyAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyovCisKKworI2lmbmRlZiBfX0JERkRSSVZSX0hfXworI2RlZmluZSBfX0JERkRSSVZSX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisKKyNpbmNsdWRlICJiZGYuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEJERl9lbmNvZGluZ19lbF8KKyAgeworICAgIEZUX0xvbmcgICAgZW5jOworICAgIEZUX1VTaG9ydCAgZ2x5cGg7CisKKyAgfSBCREZfZW5jb2RpbmdfZWw7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQkRGX0ZhY2VSZWNfCisgIHsKKyAgICBGVF9GYWNlUmVjICAgICAgICByb290OworCisgICAgY2hhciogICAgICAgICAgICAgY2hhcnNldF9lbmNvZGluZzsKKyAgICBjaGFyKiAgICAgICAgICAgICBjaGFyc2V0X3JlZ2lzdHJ5OworCisgICAgYmRmX2ZvbnRfdCogICAgICAgYmRmZm9udDsKKworICAgIEJERl9lbmNvZGluZ19lbCogIGVuX3RhYmxlOworCisgICAgRlRfQ2hhck1hcCAgICAgICAgY2hhcm1hcF9oYW5kbGU7CisgICAgRlRfQ2hhck1hcFJlYyAgICAgY2hhcm1hcDsgIC8qIGEgc2luZ2xlIGNoYXJtYXAgcGVyIGZhY2UgKi8KKworICAgIEZUX1VJbnQgICAgICAgICAgIGRlZmF1bHRfZ2x5cGg7CisKKyAgfSBCREZfRmFjZVJlYywgKkJERl9GYWNlOworCisKKyAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICkgIGJkZl9kcml2ZXJfY2xhc3M7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0JERkRSSVZSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmZXJyb3IuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZmVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1NDVhYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL2JkZmVycm9yLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDEyIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPTVBVVElORyBSRVNFQVJDSCBMQUIgT1IgTkVXIE1FWElDTyBTVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUCisgKiBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIEJERiBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQkRGRVJST1JfSF9fCisjZGVmaW5lIF9fQkRGRVJST1JfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEJERl9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQkRGCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX0JERkVSUk9SX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmbGliLmMgYi9mcmVldHlwZS0yLjYvc3JjL2JkZi9iZGZsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU1ZDBlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvYmRmbGliLmMKQEAgLTAsMCArMSwyNjkyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29tcHV0aW5nIFJlc2VhcmNoIExhYnMsIE5ldyBNZXhpY28gU3RhdGUgVW5pdmVyc2l0eQorICogQ29weXJpZ2h0IDIwMDEtMjAxNAorICogICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT01QVVRJTkcgUkVTRUFSQ0ggTEFCIE9SIE5FVyBNRVhJQ08gU1RBVEUgVU5JVkVSU0lUWSBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVAorICogT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBiZGYuYyx2IDEuMjIgMjAwMC8wMy8xNiAyMDowODo1MCAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgdGFrZW4gZnJvbSBNYXJrIExlaXNoZXIncyB4bWJkZmVkIHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKyNpbmNsdWRlICJiZGYuaCIKKyNpbmNsdWRlICJiZGZlcnJvci5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYmRmbGliCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERlZmF1bHQgQkRGIGZvbnQgb3B0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMgY29uc3QgYmRmX29wdGlvbnNfdCAgX2JkZl9vcHRzID0KKyAgeworICAgIDEsICAgICAgICAgICAgICAgIC8qIENvcnJlY3QgbWV0cmljcy4gICAgICAgICAgICAgICAqLworICAgIDEsICAgICAgICAgICAgICAgIC8qIFByZXNlcnZlIHVuZW5jb2RlZCBnbHlwaHMuICAgICAqLworICAgIDAsICAgICAgICAgICAgICAgIC8qIFByZXNlcnZlIGNvbW1lbnRzLiAgICAgICAgICAgICAqLworICAgIEJERl9QUk9QT1JUSU9OQUwgIC8qIERlZmF1bHQgc3BhY2luZy4gICAgICAgICAgICAgICAqLworICB9OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCdWlsdGluIEJERiBmb250IHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIExpc3Qgb2YgbW9zdCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYXBwZWFyIGluIGEgZm9udC4gIERvZXNuJ3QgaW5jbHVkZSAqLworICAvKiB0aGUgUkFXXyogYW5kIEFYSVNfKiBwcm9wZXJ0aWVzIGluIFgxMVI2IHBvbHltb3JwaGljIGZvbnRzLiAgICAgICAgICAgKi8KKworICBzdGF0aWMgY29uc3QgYmRmX3Byb3BlcnR5X3QgIF9iZGZfcHJvcGVydGllc1tdID0KKyAgeworICAgIHsgKGNoYXIgKikiQUREX1NUWUxFX05BTUUiLCAgICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJBVkVSQUdFX1dJRFRIIiwgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkFWR19DQVBJVEFMX1dJRFRIIiwgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiQVZHX0xPV0VSQ0FTRV9XSURUSCIsICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJDQVBfSEVJR0hUIiwgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkNIQVJTRVRfQ09MTEVDVElPTlMiLCAgICAgQkRGX0FUT00sICAgICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiQ0hBUlNFVF9FTkNPRElORyIsICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJDSEFSU0VUX1JFR0lTVFJZIiwgICAgICAgIEJERl9BVE9NLCAgICAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkNPTU1FTlQiLCAgICAgICAgICAgICAgICAgQkRGX0FUT00sICAgICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiQ09QWVJJR0hUIiwgICAgICAgICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJERUZBVUxUX0NIQVIiLCAgICAgICAgICAgIEJERl9DQVJESU5BTCwgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkRFU1RJTkFUSU9OIiwgICAgICAgICAgICAgQkRGX0NBUkRJTkFMLCAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiREVWSUNFX0ZPTlRfTkFNRSIsICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJFTkRfU1BBQ0UiLCAgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkZBQ0VfTkFNRSIsICAgICAgICAgICAgICAgQkRGX0FUT00sICAgICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiRkFNSUxZX05BTUUiLCAgICAgICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJGSUdVUkVfV0lEVEgiLCAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkZPTlQiLCAgICAgICAgICAgICAgICAgICAgQkRGX0FUT00sICAgICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiRk9OVE5BTUVfUkVHSVNUUlkiLCAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJGT05UX0FTQ0VOVCIsICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIkZPTlRfREVTQ0VOVCIsICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiRk9VTkRSWSIsICAgICAgICAgICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJGVUxMX05BTUUiLCAgICAgICAgICAgICAgIEJERl9BVE9NLCAgICAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIklUQUxJQ19BTkdMRSIsICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiTUFYX1NQQUNFIiwgICAgICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJNSU5fU1BBQ0UiLCAgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIk5PUk1fU1BBQ0UiLCAgICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiTk9USUNFIiwgICAgICAgICAgICAgICAgICBCREZfQVRPTSwgICAgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJQSVhFTF9TSVpFIiwgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlBPSU5UX1NJWkUiLCAgICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUVVBRF9XSURUSCIsICAgICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfQVNDRU5UIiwgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19BVkVSQUdFX1dJRFRIIiwgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX0FWR19DQVBJVEFMX1dJRFRIIiwgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfQVZHX0xPV0VSQ0FTRV9XSURUSCIsIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19DQVBfSEVJR0hUIiwgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX0RFU0NFTlQiLCAgICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfRU5EX1NQQUNFIiwgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19GSUdVUkVfV0lEVEgiLCAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX01BWF9TUEFDRSIsICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfTUlOX1NQQUNFIiwgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19OT1JNX1NQQUNFIiwgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1BJWEVMX1NJWkUiLCAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfUE9JTlRfU0laRSIsICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19QSVhFTFNJWkUiLCAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1BPSU5UU0laRSIsICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfUVVBRF9XSURUSCIsICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19TTUFMTF9DQVBfU0laRSIsICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1NUUklLRU9VVF9BU0NFTlQiLCAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfU1RSSUtFT1VUX0RFU0NFTlQiLCAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19TVUJTQ1JJUFRfU0laRSIsICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1NVQlNDUklQVF9YIiwgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfU1VCU0NSSVBUX1kiLCAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19TVVBFUlNDUklQVF9TSVpFIiwgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1NVUEVSU0NSSVBUX1giLCAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfU1VQRVJTQ1JJUFRfWSIsICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJBV19VTkRFUkxJTkVfUE9TSVRJT04iLCAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkFXX1VOREVSTElORV9USElDS05FU1MiLCBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSQVdfWF9IRUlHSFQiLCAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJFTEFUSVZFX1NFVFdJRFRIIiwgICAgICAgQkRGX0NBUkRJTkFMLCAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkVMQVRJVkVfV0VJR0hUIiwgICAgICAgICBCREZfQ0FSRElOQUwsIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJSRVNPTFVUSU9OIiwgICAgICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlJFU09MVVRJT05fWCIsICAgICAgICAgICAgQkRGX0NBUkRJTkFMLCAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiUkVTT0xVVElPTl9ZIiwgICAgICAgICAgICBCREZfQ0FSRElOQUwsIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJTRVRXSURUSF9OQU1FIiwgICAgICAgICAgIEJERl9BVE9NLCAgICAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlNMQU5UIiwgICAgICAgICAgICAgICAgICAgQkRGX0FUT00sICAgICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiU01BTExfQ0FQX1NJWkUiLCAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJTUEFDSU5HIiwgICAgICAgICAgICAgICAgIEJERl9BVE9NLCAgICAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlNUUklLRU9VVF9BU0NFTlQiLCAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiU1RSSUtFT1VUX0RFU0NFTlQiLCAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJTVUJTQ1JJUFRfU0laRSIsICAgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlNVQlNDUklQVF9YIiwgICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiU1VCU0NSSVBUX1kiLCAgICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJTVVBFUlNDUklQVF9TSVpFIiwgICAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlNVUEVSU0NSSVBUX1giLCAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiU1VQRVJTQ1JJUFRfWSIsICAgICAgICAgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJVTkRFUkxJTkVfUE9TSVRJT04iLCAgICAgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlVOREVSTElORV9USElDS05FU1MiLCAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiV0VJR0hUIiwgICAgICAgICAgICAgICAgICBCREZfQ0FSRElOQUwsIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJXRUlHSFRfTkFNRSIsICAgICAgICAgICAgIEJERl9BVE9NLCAgICAgMSwgeyAwIH0gfSwKKyAgICB7IChjaGFyICopIlhfSEVJR0hUIiwgICAgICAgICAgICAgICAgQkRGX0lOVEVHRVIsICAxLCB7IDAgfSB9LAorICAgIHsgKGNoYXIgKikiX01VTEVfQkFTRUxJTkVfT0ZGU0VUIiwgICBCREZfSU5URUdFUiwgIDEsIHsgMCB9IH0sCisgICAgeyAoY2hhciAqKSJfTVVMRV9SRUxBVElWRV9DT01QT1NFIiwgIEJERl9JTlRFR0VSLCAgMSwgeyAwIH0gfSwKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZworICBfbnVtX2JkZl9wcm9wZXJ0aWVzID0gc2l6ZW9mICggX2JkZl9wcm9wZXJ0aWVzICkgLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggX2JkZl9wcm9wZXJ0aWVzWzBdICk7CisKKworICAvKiBBbiBhdXhpbGlhcnkgbWFjcm8gdG8gcGFyc2UgcHJvcGVydGllcywgdG8gYmUgdXNlZCBpbiBjb25kaXRpb25hbHMuICovCisgIC8qIEl0IGJlaGF2ZXMgbGlrZSBgc3RybmNtcCcgYnV0IGFsc28gdGVzdHMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgICAgKi8KKyAgLyogd2hldGhlciBpdCBpcyBhIHdoaXRlc3BhY2Ugb3IgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgcHJvcGVydHknIGlzIGEgY29uc3RhbnQgc3RyaW5nIG9mIGxlbmd0aCBgbicgdG8gY29tcGFyZSB3aXRoLiAgICAgICovCisjZGVmaW5lIF9iZGZfc3RybmNtcCggbmFtZSwgcHJvcGVydHksIG4gKSAgICAgIFwKKyAgICAgICAgICAoIGZ0X3N0cm5jbXAoIG5hbWUsIHByb3BlcnR5LCBuICkgfHwgXAorICAgICAgICAgICAgISggbmFtZVtuXSA9PSAnICcgIHx8ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBuYW1lW25dID09ICdcMCcgfHwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIG5hbWVbbl0gPT0gJ1xuJyB8fCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgbmFtZVtuXSA9PSAnXHInIHx8ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBuYW1lW25dID09ICdcdCcgKSAgICAgICAgICAgICkKKworICAvKiBBdXRvIGNvcnJlY3Rpb24gbWVzc2FnZXMuICovCisjZGVmaW5lIEFDTVNHMSAgICJGT05UX0FTQ0VOVCBwcm9wZXJ0eSBtaXNzaW5nLiAgIiBcCisgICAgICAgICAgICAgICAgICJBZGRlZCBgRk9OVF9BU0NFTlQgJWhkJy5cbiIKKyNkZWZpbmUgQUNNU0cyICAgIkZPTlRfREVTQ0VOVCBwcm9wZXJ0eSBtaXNzaW5nLiAgIiBcCisgICAgICAgICAgICAgICAgICJBZGRlZCBgRk9OVF9ERVNDRU5UICVoZCcuXG4iCisjZGVmaW5lIEFDTVNHMyAgICJGb250IHdpZHRoICE9IGFjdHVhbCB3aWR0aC4gIE9sZDogJWhkIE5ldzogJWhkLlxuIgorI2RlZmluZSBBQ01TRzQgICAiRm9udCBsZWZ0IGJlYXJpbmcgIT0gYWN0dWFsIGxlZnQgYmVhcmluZy4gICIgXAorICAgICAgICAgICAgICAgICAiT2xkOiAlaGQgTmV3OiAlaGQuXG4iCisjZGVmaW5lIEFDTVNHNSAgICJGb250IGFzY2VudCAhPSBhY3R1YWwgYXNjZW50LiAgT2xkOiAlaGQgTmV3OiAlaGQuXG4iCisjZGVmaW5lIEFDTVNHNiAgICJGb250IGRlc2NlbnQgIT0gYWN0dWFsIGRlc2NlbnQuICBPbGQ6ICVoZCBOZXc6ICVoZC5cbiIKKyNkZWZpbmUgQUNNU0c3ICAgIkZvbnQgaGVpZ2h0ICE9IGFjdHVhbCBoZWlnaHQuIE9sZDogJWhkIE5ldzogJWhkLlxuIgorI2RlZmluZSBBQ01TRzggICAiR2x5cGggc2NhbGFibGUgd2lkdGggKFNXSURUSCkgYWRqdXN0bWVudHMgbWFkZS5cbiIKKyNkZWZpbmUgQUNNU0c5ICAgIlNXSURUSCBmaWVsZCBtaXNzaW5nIGF0IGxpbmUgJWxkLiAgU2V0IGF1dG9tYXRpY2FsbHkuXG4iCisjZGVmaW5lIEFDTVNHMTAgICJEV0lEVEggZmllbGQgbWlzc2luZyBhdCBsaW5lICVsZC4gIFNldCB0byBnbHlwaCB3aWR0aC5cbiIKKyNkZWZpbmUgQUNNU0cxMSAgIlNJWkUgYml0cyBwZXIgcGl4ZWwgZmllbGQgYWRqdXN0ZWQgdG8gJWhkLlxuIgorI2RlZmluZSBBQ01TRzEyICAiRHVwbGljYXRlIGVuY29kaW5nICVsZCAoJXMpIGNoYW5nZWQgdG8gdW5lbmNvZGVkLlxuIgorI2RlZmluZSBBQ01TRzEzICAiR2x5cGggJWxkIGV4dHJhIHJvd3MgcmVtb3ZlZC5cbiIKKyNkZWZpbmUgQUNNU0cxNCAgIkdseXBoICVsZCBleHRyYSBjb2x1bW5zIHJlbW92ZWQuXG4iCisjZGVmaW5lIEFDTVNHMTUgICJJbmNvcnJlY3QgZ2x5cGggY291bnQ6ICVsZCBpbmRpY2F0ZWQgYnV0ICVsZCBmb3VuZC5cbiIKKyNkZWZpbmUgQUNNU0cxNiAgIkdseXBoICVsZCBtaXNzaW5nIGNvbHVtbnMgcGFkZGVkIHdpdGggemVybyBiaXRzLlxuIgorCisgIC8qIEVycm9yIG1lc3NhZ2VzLiAqLworI2RlZmluZSBFUlJNU0cxICAiW2xpbmUgJWxkXSBNaXNzaW5nIGAlcycgbGluZS5cbiIKKyNkZWZpbmUgRVJSTVNHMiAgIltsaW5lICVsZF0gRm9udCBoZWFkZXIgY29ycnVwdGVkIG9yIG1pc3NpbmcgZmllbGRzLlxuIgorI2RlZmluZSBFUlJNU0czICAiW2xpbmUgJWxkXSBGb250IGdseXBocyBjb3JydXB0ZWQgb3IgbWlzc2luZyBmaWVsZHMuXG4iCisjZGVmaW5lIEVSUk1TRzQgICJbbGluZSAlbGRdIEJCWCB0b28gYmlnLlxuIgorI2RlZmluZSBFUlJNU0c1ICAiW2xpbmUgJWxkXSBgJXMnIHZhbHVlIHRvbyBiaWcuXG4iCisjZGVmaW5lIEVSUk1TRzYgICJbbGluZSAlbGRdIElucHV0IGxpbmUgdG9vIGxvbmcuXG4iCisjZGVmaW5lIEVSUk1TRzcgICJbbGluZSAlbGRdIEZvbnQgbmFtZSB0b28gbG9uZy5cbiIKKyNkZWZpbmUgRVJSTVNHOCAgIltsaW5lICVsZF0gSW52YWxpZCBgJXMnIHZhbHVlLlxuIgorI2RlZmluZSBFUlJNU0c5ICAiW2xpbmUgJWxkXSBJbnZhbGlkIGtleXdvcmQuXG4iCisKKyAgLyogRGVidWcgbWVzc2FnZXMuICovCisjZGVmaW5lIERCR01TRzEgICIgIFslNmxkXSAlcyIgLyogbm8gXG4gKi8KKyNkZWZpbmUgREJHTVNHMiAgIiAoMHglbFgpXG4iCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEhhc2ggdGFibGUgdXRpbGl0aWVzIGZvciB0aGUgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogWFhYOiBSZXBsYWNlIHRoaXMgd2l0aCBGcmVlVHlwZSdzIGhhc2ggZnVuY3Rpb25zICovCisKKworI2RlZmluZSBJTklUSUFMX0hUX1NJWkUgIDI0MQorCisgIHR5cGVkZWYgdm9pZAorICAoKmhhc2hfZnJlZV9mdW5jKSggaGFzaG5vZGUgIG5vZGUgKTsKKworICBzdGF0aWMgaGFzaG5vZGUqCisgIGhhc2hfYnVja2V0KCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgaGFzaHRhYmxlKiAgIGh0ICkKKyAgeworICAgIGNvbnN0IGNoYXIqICAgIGtwICA9IGtleTsKKyAgICB1bnNpZ25lZCBsb25nICByZXMgPSAwOworICAgIGhhc2hub2RlKiAgICAgIGJwICA9IGh0LT50YWJsZSwgKm5kcDsKKworCisgICAgLyogTW9ja2xpc3AgaGFzaCBmdW5jdGlvbi4gKi8KKyAgICB3aGlsZSAoICprcCApCisgICAgICByZXMgPSAoIHJlcyA8PCA1ICkgLSByZXMgKyAodW5zaWduZWQgbG9uZykqa3ArKzsKKworICAgIG5kcCA9IGJwICsgKCByZXMgJSBodC0+c2l6ZSApOworICAgIHdoaWxlICggKm5kcCApCisgICAgeworICAgICAga3AgPSAoKm5kcCktPmtleTsKKyAgICAgIGlmICgga3BbMF0gPT0ga2V5WzBdICYmIGZ0X3N0cmNtcCgga3AsIGtleSApID09IDAgKQorICAgICAgICBicmVhazsKKyAgICAgIG5kcC0tOworICAgICAgaWYgKCBuZHAgPCBicCApCisgICAgICAgIG5kcCA9IGJwICsgKCBodC0+c2l6ZSAtIDEgKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmRwOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgaGFzaF9yZWhhc2goIGhhc2h0YWJsZSogIGh0LAorICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgbWVtb3J5ICkKKyAgeworICAgIGhhc2hub2RlKiAgICAgb2JwID0gaHQtPnRhYmxlLCAqYnAsICpuYnA7CisgICAgdW5zaWduZWQgaW50ICBpLCBzeiA9IGh0LT5zaXplOworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGh0LT5zaXplIDw8PSAxOworICAgIGh0LT5saW1pdCAgPSBodC0+c2l6ZSAvIDM7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggaHQtPnRhYmxlLCBodC0+c2l6ZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIGkgPSAwLCBicCA9IG9icDsgaSA8IHN6OyBpKyssIGJwKysgKQorICAgIHsKKyAgICAgIGlmICggKmJwICkKKyAgICAgIHsKKyAgICAgICAgbmJwID0gaGFzaF9idWNrZXQoICgqYnApLT5rZXksIGh0ICk7CisgICAgICAgICpuYnAgPSAqYnA7CisgICAgICB9CisgICAgfQorICAgIEZUX0ZSRUUoIG9icCApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgaGFzaF9pbml0KCBoYXNodGFibGUqICBodCwKKyAgICAgICAgICAgICBGVF9NZW1vcnkgICBtZW1vcnkgKQorICB7CisgICAgdW5zaWduZWQgaW50ICBzeiAgICA9IElOSVRJQUxfSFRfU0laRTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBodC0+c2l6ZSAgPSBzejsKKyAgICBodC0+bGltaXQgPSBzeiAvIDM7CisgICAgaHQtPnVzZWQgID0gMDsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBodC0+dGFibGUsIHN6ICkgKQorICAgICAgZ290byBFeGl0OworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBoYXNoX2ZyZWUoIGhhc2h0YWJsZSogIGh0LAorICAgICAgICAgICAgIEZUX01lbW9yeSAgIG1lbW9yeSApCisgIHsKKyAgICBpZiAoIGh0ICE9IDAgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCAgaSwgc3ogPSBodC0+c2l6ZTsKKyAgICAgIGhhc2hub2RlKiAgICAgYnAgPSBodC0+dGFibGU7CisKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBzejsgaSsrLCBicCsrICkKKyAgICAgICAgRlRfRlJFRSggKmJwICk7CisKKyAgICAgIEZUX0ZSRUUoIGh0LT50YWJsZSApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGhhc2hfaW5zZXJ0KCBjaGFyKiAgICAgICBrZXksCisgICAgICAgICAgICAgICBzaXplX3QgICAgICBkYXRhLAorICAgICAgICAgICAgICAgaGFzaHRhYmxlKiAgaHQsCisgICAgICAgICAgICAgICBGVF9NZW1vcnkgICBtZW1vcnkgKQorICB7CisgICAgaGFzaG5vZGUgICBubjsKKyAgICBoYXNobm9kZSogIGJwICAgICAgPSBoYXNoX2J1Y2tldCgga2V5LCBodCApOworICAgIEZUX0Vycm9yICAgZXJyb3IgICA9IEZUX0Vycl9PazsKKworCisgICAgbm4gPSAqYnA7CisgICAgaWYgKCAhbm4gKQorICAgIHsKKyAgICAgIGlmICggRlRfTkVXKCBubiApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgKmJwID0gbm47CisKKyAgICAgIG5uLT5rZXkgID0ga2V5OworICAgICAgbm4tPmRhdGEgPSBkYXRhOworCisgICAgICBpZiAoIGh0LT51c2VkID49IGh0LT5saW1pdCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gaGFzaF9yZWhhc2goIGh0LCBtZW1vcnkgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgaHQtPnVzZWQrKzsKKyAgICB9CisgICAgZWxzZQorICAgICAgbm4tPmRhdGEgPSBkYXRhOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgaGFzaG5vZGUKKyAgaGFzaF9sb29rdXAoIGNvbnN0IGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgIGhhc2h0YWJsZSogIGh0ICkKKyAgeworICAgIGhhc2hub2RlICpucCA9IGhhc2hfYnVja2V0KCBrZXksIGh0ICk7CisKKworICAgIHJldHVybiAqbnA7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIEZ1bmN0aW9uIHR5cGUgZm9yIHBhcnNpbmcgbGluZXMgb2YgYSBCREYgZm9udC4gKi8KKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqX2JkZl9saW5lX2Z1bmNfdCkoIGNoYXIqICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxpbmVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgY2FsbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICBjbGllbnRfZGF0YSApOworCisKKyAgLyogTGlzdCBzdHJ1Y3R1cmUgZm9yIHNwbGl0dGluZyBsaW5lcyBpbnRvIGZpZWxkcy4gKi8KKworICB0eXBlZGVmIHN0cnVjdCAgX2JkZl9saXN0X3RfCisgIHsKKyAgICBjaGFyKiogICAgICAgICBmaWVsZDsKKyAgICB1bnNpZ25lZCBsb25nICBzaXplOworICAgIHVuc2lnbmVkIGxvbmcgIHVzZWQ7CisgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5OworCisgIH0gX2JkZl9saXN0X3Q7CisKKworICAvKiBTdHJ1Y3R1cmUgdXNlZCB3aGlsZSBsb2FkaW5nIEJERiBmb250cy4gKi8KKworICB0eXBlZGVmIHN0cnVjdCAgX2JkZl9wYXJzZV90XworICB7CisgICAgdW5zaWduZWQgbG9uZyAgIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgICBjbnQ7CisgICAgdW5zaWduZWQgbG9uZyAgIHJvdzsKKworICAgIHNob3J0ICAgICAgICAgICBtaW5sYjsKKyAgICBzaG9ydCAgICAgICAgICAgbWF4bGI7CisgICAgc2hvcnQgICAgICAgICAgIG1heHJiOworICAgIHNob3J0ICAgICAgICAgICBtYXhhczsKKyAgICBzaG9ydCAgICAgICAgICAgbWF4ZHM7CisKKyAgICBzaG9ydCAgICAgICAgICAgcmJlYXJpbmc7CisKKyAgICBjaGFyKiAgICAgICAgICAgZ2x5cGhfbmFtZTsKKyAgICBsb25nICAgICAgICAgICAgZ2x5cGhfZW5jOworCisgICAgYmRmX2ZvbnRfdCogICAgIGZvbnQ7CisgICAgYmRmX29wdGlvbnNfdCogIG9wdHM7CisKKyAgICB1bnNpZ25lZCBsb25nICAgaGF2ZVszNDgxNl07IC8qIG11c3QgYmUgaW4gc3luYyB3aXRoIGBubW9kJyBhbmQgYHVtb2QnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheXMgZnJvbSBgYmRmX2ZvbnRfdCcgc3RydWN0dXJlICAgICAqLworICAgIF9iZGZfbGlzdF90ICAgICBsaXN0OworCisgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeTsKKworICB9IF9iZGZfcGFyc2VfdDsKKworCisjZGVmaW5lIHNldHNiaXQoIG0sIGNjICkgXAorICAgICAgICAgICggbVsoRlRfQnl0ZSkoY2MpID4+IDNdIHw9IChGVF9CeXRlKSggMSA8PCAoIChjYykgJiA3ICkgKSApCisjZGVmaW5lIHNiaXRzZXQoIG0sIGNjICkgXAorICAgICAgICAgICggbVsoRlRfQnl0ZSkoY2MpID4+IDNdICAmICggMSA8PCAoIChjYykgJiA3ICkgKSApCisKKworICBzdGF0aWMgdm9pZAorICBfYmRmX2xpc3RfaW5pdCggX2JkZl9saXN0X3QqICBsaXN0LAorICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfWkVSTyggbGlzdCApOworICAgIGxpc3QtPm1lbW9yeSA9IG1lbW9yeTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgX2JkZl9saXN0X2RvbmUoIF9iZGZfbGlzdF90KiAgbGlzdCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpc3QtPm1lbW9yeTsKKworCisgICAgaWYgKCBtZW1vcnkgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGxpc3QtPmZpZWxkICk7CisgICAgICBGVF9aRVJPKCBsaXN0ICk7CisgICAgfQorICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgX2JkZl9saXN0X2Vuc3VyZSggX2JkZl9saXN0X3QqICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2l0ZW1zICkgLyogc2FtZSBhcyBfYmRmX2xpc3RfdC51c2VkICovCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggbnVtX2l0ZW1zID4gbGlzdC0+c2l6ZSApCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyAgb2xkc2l6ZSA9IGxpc3QtPnNpemU7IC8qIHNhbWUgYXMgX2JkZl9saXN0X3Quc2l6ZSAqLworICAgICAgdW5zaWduZWQgbG9uZyAgbmV3c2l6ZSA9IG9sZHNpemUgKyAoIG9sZHNpemUgPj4gMSApICsgNTsKKyAgICAgIHVuc2lnbmVkIGxvbmcgIGJpZ3NpemUgPSAodW5zaWduZWQgbG9uZykoIEZUX0lOVF9NQVggLyBzaXplb2YgKCBjaGFyKiApICk7CisgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgID0gbGlzdC0+bWVtb3J5OworCisKKyAgICAgIGlmICggb2xkc2l6ZSA9PSBiaWdzaXplICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlIGlmICggbmV3c2l6ZSA8IG9sZHNpemUgfHwgbmV3c2l6ZSA+IGJpZ3NpemUgKQorICAgICAgICBuZXdzaXplID0gYmlnc2l6ZTsKKworICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggbGlzdC0+ZmllbGQsIG9sZHNpemUsIG5ld3NpemUgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgbGlzdC0+c2l6ZSA9IG5ld3NpemU7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBfYmRmX2xpc3Rfc2hpZnQoIF9iZGZfbGlzdF90KiAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbiApCisgIHsKKyAgICB1bnNpZ25lZCBsb25nICBpLCB1OworCisKKyAgICBpZiAoIGxpc3QgPT0gMCB8fCBsaXN0LT51c2VkID09IDAgfHwgbiA9PSAwICkKKyAgICAgIHJldHVybjsKKworICAgIGlmICggbiA+PSBsaXN0LT51c2VkICkKKyAgICB7CisgICAgICBsaXN0LT51c2VkID0gMDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCB1ID0gbiwgaSA9IDA7IHUgPCBsaXN0LT51c2VkOyBpKyssIHUrKyApCisgICAgICBsaXN0LT5maWVsZFtpXSA9IGxpc3QtPmZpZWxkW3VdOworICAgIGxpc3QtPnVzZWQgLT0gbjsKKyAgfQorCisKKyAgLyogQW4gZW1wdHkgc3RyaW5nIGZvciBlbXB0eSBmaWVsZHMuICovCisKKyAgc3RhdGljIGNvbnN0IGNoYXIgIGVtcHR5WzFdID0geyAwIH07ICAgICAgLyogWFhYIGVsaW1pbmF0ZSB0aGlzICovCisKKworICBzdGF0aWMgY2hhciAqCisgIF9iZGZfbGlzdF9qb2luKCBfYmRmX2xpc3RfdCogICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBjLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgKmFsZW4gKQorICB7CisgICAgdW5zaWduZWQgbG9uZyAgaSwgajsKKyAgICBjaGFyKiAgICAgICAgICBkcDsKKworCisgICAgKmFsZW4gPSAwOworCisgICAgaWYgKCBsaXN0ID09IDAgfHwgbGlzdC0+dXNlZCA9PSAwICkKKyAgICAgIHJldHVybiAwOworCisgICAgZHAgPSBsaXN0LT5maWVsZFswXTsKKyAgICBmb3IgKCBpID0gaiA9IDA7IGkgPCBsaXN0LT51c2VkOyBpKysgKQorICAgIHsKKyAgICAgIGNoYXIqICBmcCA9IGxpc3QtPmZpZWxkW2ldOworCisKKyAgICAgIHdoaWxlICggKmZwICkKKyAgICAgICAgZHBbaisrXSA9ICpmcCsrOworCisgICAgICBpZiAoIGkgKyAxIDwgbGlzdC0+dXNlZCApCisgICAgICAgIGRwW2orK10gPSAoY2hhciljOworICAgIH0KKyAgICBpZiAoIGRwICE9IGVtcHR5ICkKKyAgICAgIGRwW2pdID0gMDsKKworICAgICphbGVuID0gajsKKyAgICByZXR1cm4gZHA7CisgIH0KKworCisgIC8qIFRoZSBjb2RlIGJlbG93IGVuc3VyZXMgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IDQgKyAxIGBmaWVsZCcgKi8KKyAgLyogZWxlbWVudHMgaW4gYGxpc3QnICh3aGljaCBhcmUgcG9zc2libHkgTlVMTCkgc28gdGhhdCB3ZSAgICAqLworICAvKiBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIG1vc3QgY2FzZXMuICAgICovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIF9iZGZfbGlzdF9zcGxpdCggX2JkZl9saXN0X3QqICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgICBzZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGluZWxlbiApCisgIHsKKyAgICB1bnNpZ25lZCBsb25nICBmaW5hbF9lbXB0eTsKKyAgICBpbnQgICAgICAgICAgICBtdWx0OworICAgIGNoYXIgICAgICAgICAgICpzcCwgKmVwLCAqZW5kOworICAgIGNoYXIgICAgICAgICAgIHNlcHNbMzJdOworICAgIEZUX0Vycm9yICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBsaXN0LiAqLworICAgIGxpc3QtPnVzZWQgPSAwOworICAgIGlmICggbGlzdC0+c2l6ZSApCisgICAgeworICAgICAgbGlzdC0+ZmllbGRbMF0gPSAoY2hhciopZW1wdHk7CisgICAgICBsaXN0LT5maWVsZFsxXSA9IChjaGFyKillbXB0eTsKKyAgICAgIGxpc3QtPmZpZWxkWzJdID0gKGNoYXIqKWVtcHR5OworICAgICAgbGlzdC0+ZmllbGRbM10gPSAoY2hhciopZW1wdHk7CisgICAgICBsaXN0LT5maWVsZFs0XSA9IChjaGFyKillbXB0eTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgbGluZSBpcyBlbXB0eSwgdGhlbiBzaW1wbHkgcmV0dXJuLiAqLworICAgIGlmICggbGluZWxlbiA9PSAwIHx8IGxpbmVbMF0gPT0gMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBJbiB0aGUgb3JpZ2luYWwgY29kZSwgaWYgdGhlIGBzZXBhcmF0b3JzJyBwYXJhbWV0ZXIgaXMgTlVMTCBvciAqLworICAgIC8qIGVtcHR5LCB0aGUgbGlzdCBpcyBzcGxpdCBpbnRvIGluZGl2aWR1YWwgYnl0ZXMuICBXZSBkb24ndCBuZWVkICovCisgICAgLyogdGhpcywgc28gYW4gZXJyb3IgaXMgc2lnbmFsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHNlcGFyYXRvcnMgPT0gMCB8fCAqc2VwYXJhdG9ycyA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogUHJlcGFyZSB0aGUgc2VwYXJhdG9yIGJpdG1hcC4gKi8KKyAgICBGVF9NRU1fWkVSTyggc2VwcywgMzIgKTsKKworICAgIC8qIElmIHRoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzZXBhcmF0b3Igc3RyaW5nIGlzIGEgcGx1cywgdGhlbiAqLworICAgIC8qIHNldCB0aGUgYG11bHQnIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBtdWx0aXBsZSBzZXBhcmF0b3JzIHNob3VsZCBiZSAqLworICAgIC8qIGNvbGxhcHNlZCBpbnRvIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIG11bHQgPSAwLCBzcCA9IHNlcGFyYXRvcnM7IHNwICYmICpzcDsgc3ArKyApCisgICAgeworICAgICAgaWYgKCAqc3AgPT0gJysnICYmICooIHNwICsgMSApID09IDAgKQorICAgICAgICBtdWx0ID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2V0c2JpdCggc2VwcywgKnNwICk7CisgICAgfQorCisgICAgLyogQnJlYWsgdGhlIGxpbmUgdXAgaW50byBmaWVsZHMuICovCisgICAgZm9yICggZmluYWxfZW1wdHkgPSAwLCBzcCA9IGVwID0gbGluZSwgZW5kID0gc3AgKyBsaW5lbGVuOworICAgICAgICAgIHNwIDwgZW5kICYmICpzcDsgKQorICAgIHsKKyAgICAgIC8qIENvbGxlY3QgZXZlcnl0aGluZyB0aGF0IGlzIG5vdCBhIHNlcGFyYXRvci4gKi8KKyAgICAgIGZvciAoIDsgKmVwICYmICFzYml0c2V0KCBzZXBzLCAqZXAgKTsgZXArKyApCisgICAgICAgIDsKKworICAgICAgLyogUmVzaXplIHRoZSBsaXN0IGlmIG5lY2Vzc2FyeS4gKi8KKyAgICAgIGlmICggbGlzdC0+dXNlZCA9PSBsaXN0LT5zaXplICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBfYmRmX2xpc3RfZW5zdXJlKCBsaXN0LCBsaXN0LT51c2VkICsgMSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIEFzc2lnbiB0aGUgZmllbGQgYXBwcm9wcmlhdGVseS4gKi8KKyAgICAgIGxpc3QtPmZpZWxkW2xpc3QtPnVzZWQrK10gPSAoIGVwID4gc3AgKSA/IHNwIDogKGNoYXIqKWVtcHR5OworCisgICAgICBzcCA9IGVwOworCisgICAgICBpZiAoIG11bHQgKQorICAgICAgeworICAgICAgICAvKiBJZiBtdWx0aXBsZSBzZXBhcmF0b3JzIHNob3VsZCBiZSBjb2xsYXBzZWQsIGRvIGl0IG5vdyBieSAqLworICAgICAgICAvKiBzZXR0aW5nIGFsbCB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlcnMgdG8gMC4gICAgICAgICAgICAgICAqLworICAgICAgICBmb3IgKCA7ICplcCAmJiBzYml0c2V0KCBzZXBzLCAqZXAgKTsgZXArKyApCisgICAgICAgICAgKmVwID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCAqZXAgIT0gMCApCisgICAgICAgIC8qIERvbid0IGNvbGxhcHNlIG11bHRpcGxlIHNlcGFyYXRvcnMgYnkgbWFraW5nIHRoZW0gMCwgc28ganVzdCAqLworICAgICAgICAvKiBtYWtlIHRoZSBvbmUgZW5jb3VudGVyZWQgMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgKmVwKysgPSAwOworCisgICAgICBmaW5hbF9lbXB0eSA9ICggZXAgPiBzcCAmJiAqZXAgPT0gMCApOworICAgICAgc3AgPSBlcDsKKyAgICB9CisKKyAgICAvKiBGaW5hbGx5LCBOVUxMLXRlcm1pbmF0ZSB0aGUgbGlzdC4gKi8KKyAgICBpZiAoIGxpc3QtPnVzZWQgKyBmaW5hbF9lbXB0eSA+PSBsaXN0LT5zaXplICkKKyAgICB7CisgICAgICBlcnJvciA9IF9iZGZfbGlzdF9lbnN1cmUoIGxpc3QsIGxpc3QtPnVzZWQgKyBmaW5hbF9lbXB0eSArIDEgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBmaW5hbF9lbXB0eSApCisgICAgICBsaXN0LT5maWVsZFtsaXN0LT51c2VkKytdID0gKGNoYXIqKWVtcHR5OworCisgICAgbGlzdC0+ZmllbGRbbGlzdC0+dXNlZF0gPSAwOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI2RlZmluZSBOT19TS0lQICAyNTYgIC8qIHRoaXMgdmFsdWUgY2Fubm90IGJlIHN0b3JlZCBpbiBhICdjaGFyJyAqLworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIF9iZGZfcmVhZHN0cmVhbSggRlRfU3RyZWFtICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIF9iZGZfbGluZV9mdW5jX3QgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgIGNsaWVudF9kYXRhLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgKmxubyApCisgIHsKKyAgICBfYmRmX2xpbmVfZnVuY190ICBjYjsKKyAgICB1bnNpZ25lZCBsb25nICAgICBsaW5lbm8sIGJ1Zl9zaXplOworICAgIGludCAgICAgICAgICAgICAgIHJlZmlsbCwgaG9sZCwgdG9fc2tpcDsKKyAgICBwdHJkaWZmX3QgICAgICAgICBieXRlcywgc3RhcnQsIGVuZCwgY3Vyc29yLCBhdmFpbDsKKyAgICBjaGFyKiAgICAgICAgICAgICBidWYgICAgPSBOVUxMOworICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBjYWxsYmFjayA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogaW5pdGlhbCBzaXplIGFuZCBhbGxvY2F0aW9uIG9mIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICBidWZfc2l6ZSA9IDEwMjQ7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggYnVmLCBidWZfc2l6ZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGNiICAgICAgPSBjYWxsYmFjazsKKyAgICBsaW5lbm8gID0gMTsKKyAgICBidWZbMF0gID0gMDsKKyAgICBzdGFydCAgID0gMDsKKyAgICBhdmFpbCAgID0gMDsKKyAgICBjdXJzb3IgID0gMDsKKyAgICByZWZpbGwgID0gMTsKKyAgICB0b19za2lwID0gTk9fU0tJUDsKKyAgICBieXRlcyAgID0gMDsgICAgICAgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKworICAgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKCByZWZpbGwgKQorICAgICAgeworICAgICAgICBieXRlcyAgPSAocHRyZGlmZl90KUZUX1N0cmVhbV9UcnlSZWFkKAorICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgKEZUX0J5dGUqKWJ1ZiArIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgICBidWZfc2l6ZSAtICh1bnNpZ25lZCBsb25nKWN1cnNvciApOworICAgICAgICBhdmFpbCAgPSBjdXJzb3IgKyBieXRlczsKKyAgICAgICAgY3Vyc29yID0gMDsKKyAgICAgICAgcmVmaWxsID0gMDsKKyAgICAgIH0KKworICAgICAgZW5kID0gc3RhcnQ7CisKKyAgICAgIC8qIHNob3VsZCB3ZSBza2lwIGFuIG9wdGlvbmFsIGNoYXJhY3RlciBsaWtlIFxuIG9yIFxyPyAqLworICAgICAgaWYgKCBzdGFydCA8IGF2YWlsICYmIGJ1ZltzdGFydF0gPT0gdG9fc2tpcCApCisgICAgICB7CisgICAgICAgIHN0YXJ0ICArPSAxOworICAgICAgICB0b19za2lwID0gTk9fU0tJUDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIHRyeSB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKyAgICAgIHdoaWxlICggZW5kIDwgYXZhaWwgJiYgYnVmW2VuZF0gIT0gJ1xuJyAmJiBidWZbZW5kXSAhPSAnXHInICkKKyAgICAgICAgZW5kKys7CisKKyAgICAgIC8qIGlmIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRyeSBzaGlmdGluZyBpdHMgY29udGVudCAqLworICAgICAgLyogb3IgZXZlbiByZXNpemluZyBpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGVuZCA+PSBhdmFpbCApCisgICAgICB7CisgICAgICAgIGlmICggYnl0ZXMgPT0gMCApICAvKiBsYXN0IGxpbmUgaW4gZmlsZSBkb2Vzbid0IGVuZCBpbiBcciBvciBcbiAqLworICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgLyogaWdub3JlIGl0IHRoZW4gZXhpdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBpZiAoIHN0YXJ0ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBsaW5lIGlzIGRlZmluaXRlbHkgdG9vIGxvbmc7IHRyeSByZXNpemluZyB0aGUgaW5wdXQgKi8KKyAgICAgICAgICAvKiBidWZmZXIgYSBiaXQgdG8gaGFuZGxlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIEZUX1VMb25nICBuZXdfc2l6ZTsKKworCisgICAgICAgICAgaWYgKCBidWZfc2l6ZSA+PSA2NTUzNlVMICkgIC8qIGxpbWl0IG91cnNlbHZlcyB0byA2NEtCeXRlICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9yZWFkc3RyZWFtOiAiIEVSUk1TRzYsIGxpbmVubyApKTsKKyAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBuZXdfc2l6ZSA9IGJ1Zl9zaXplICogMjsKKyAgICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBidWYsIGJ1Zl9zaXplLCBuZXdfc2l6ZSApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgIGN1cnNvciAgID0gKHB0cmRpZmZfdClidWZfc2l6ZTsKKyAgICAgICAgICBidWZfc2l6ZSA9IG5ld19zaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGJ5dGVzID0gYXZhaWwgLSBzdGFydDsKKworICAgICAgICAgIEZUX01FTV9NT1ZFKCBidWYsIGJ1ZiArIHN0YXJ0LCBieXRlcyApOworCisgICAgICAgICAgY3Vyc29yID0gYnl0ZXM7CisgICAgICAgICAgYXZhaWwgLT0gYnl0ZXM7CisgICAgICAgICAgc3RhcnQgID0gMDsKKyAgICAgICAgfQorICAgICAgICByZWZpbGwgPSAxOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogVGVtcG9yYXJpbHkgTlVMLXRlcm1pbmF0ZSB0aGUgbGluZS4gKi8KKyAgICAgIGhvbGQgICAgID0gYnVmW2VuZF07CisgICAgICBidWZbZW5kXSA9IDA7CisKKyAgICAgIC8qIFhYWDogVXNlIGVuY29kaW5nIGluZGVwZW5kZW50IHZhbHVlIGZvciAweDFBICovCisgICAgICBpZiAoIGJ1ZltzdGFydF0gIT0gJyMnICYmIGJ1ZltzdGFydF0gIT0gMHgxQSAmJiBlbmQgPiBzdGFydCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gKCpjYikoIGJ1ZiArIHN0YXJ0LCAodW5zaWduZWQgbG9uZykoIGVuZCAtIHN0YXJ0ICksIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSZjYiwgY2xpZW50X2RhdGEgKTsKKyAgICAgICAgLyogUmVkbyBpZiB3ZSBoYXZlIGVuY291bnRlcmVkIENIQVJTIHdpdGhvdXQgcHJvcGVydGllcy4gKi8KKyAgICAgICAgaWYgKCBlcnJvciA9PSAtMSApCisgICAgICAgICAgZXJyb3IgPSAoKmNiKSggYnVmICsgc3RhcnQsICh1bnNpZ25lZCBsb25nKSggZW5kIC0gc3RhcnQgKSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikmY2IsIGNsaWVudF9kYXRhICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBsaW5lbm8gICs9IDE7CisgICAgICBidWZbZW5kXSA9IChjaGFyKWhvbGQ7CisgICAgICBzdGFydCAgICA9IGVuZCArIDE7CisKKyAgICAgIGlmICggaG9sZCA9PSAnXG4nICkKKyAgICAgICAgdG9fc2tpcCA9ICdccic7CisgICAgICBlbHNlIGlmICggaG9sZCA9PSAnXHInICkKKyAgICAgICAgdG9fc2tpcCA9ICdcbic7CisgICAgICBlbHNlCisgICAgICAgIHRvX3NraXAgPSBOT19TS0lQOworICAgIH0KKworICAgICpsbm8gPSBsaW5lbm87CisKKyAgRXhpdDoKKyAgICBGVF9GUkVFKCBidWYgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIFhYWDogbWFrZSB0aGlzIHdvcmsgd2l0aCBFQkNESUMgYWxzbyAqLworCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICBhMmlbMTI4XSA9CisgIHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgb2RpZ2l0c1szMl0gPQorICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgZGRpZ2l0c1szMl0gPQorICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHgwMywKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgfTsKKworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgaGRpZ2l0c1szMl0gPQorICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHgwMywKKyAgICAweDdFLCAweDAwLCAweDAwLCAweDAwLCAweDdFLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgfTsKKworCisgIC8qIFJvdXRpbmUgdG8gY29udmVydCBhbiBBU0NJSSBzdHJpbmcgaW50byBhbiB1bnNpZ25lZCBsb25nIGludGVnZXIuICovCisgIHN0YXRpYyB1bnNpZ25lZCBsb25nCisgIF9iZGZfYXRvdWwoIGNoYXIqICAgICAgICAgcywKKyAgICAgICAgICAgICAgY2hhcioqICAgICAgICBlbmQsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgYmFzZSApCisgIHsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgICAgdjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZG1hcDsKKworCisgICAgaWYgKCBzID09IDAgfHwgKnMgPT0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgcmFkaXggaXMgc29tZXRoaW5nIHJlY29nbml6YWJsZS4gIERlZmF1bHQgdG8gMTAuICovCisgICAgc3dpdGNoICggYmFzZSApCisgICAgeworICAgIGNhc2UgODoKKyAgICAgIGRtYXAgPSBvZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxNjoKKyAgICAgIGRtYXAgPSBoZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJhc2UgPSAxMDsKKyAgICAgIGRtYXAgPSBkZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHRoZSBzcGVjaWFsIGhleCBwcmVmaXguICovCisgICAgaWYgKCAqcyA9PSAnMCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggKiggcyArIDEgKSA9PSAneCcgfHwgKiggcyArIDEgKSA9PSAnWCcgKSApCisgICAgeworICAgICAgYmFzZSA9IDE2OworICAgICAgZG1hcCA9IGhkaWdpdHM7CisgICAgICBzICAgKz0gMjsKKyAgICB9CisKKyAgICBmb3IgKCB2ID0gMDsgc2JpdHNldCggZG1hcCwgKnMgKTsgcysrICkKKyAgICAgIHYgPSB2ICogYmFzZSArIGEyaVsoaW50KSpzXTsKKworICAgIGlmICggZW5kICE9IDAgKQorICAgICAgKmVuZCA9IHM7CisKKyAgICByZXR1cm4gdjsKKyAgfQorCisKKyAgLyogUm91dGluZSB0byBjb252ZXJ0IGFuIEFTQ0lJIHN0cmluZyBpbnRvIGEgc2lnbmVkIGxvbmcgaW50ZWdlci4gKi8KKyAgc3RhdGljIGxvbmcKKyAgX2JkZl9hdG9sKCBjaGFyKiAgIHMsCisgICAgICAgICAgICAgY2hhcioqICBlbmQsCisgICAgICAgICAgICAgaW50ICAgICBiYXNlICkKKyAgeworICAgIGxvbmcgICAgICAgICAgICAgICAgICB2LCBuZWc7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIGRtYXA7CisKKworICAgIGlmICggcyA9PSAwIHx8ICpzID09IDAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIHJhZGl4IGlzIHNvbWV0aGluZyByZWNvZ25pemFibGUuICBEZWZhdWx0IHRvIDEwLiAqLworICAgIHN3aXRjaCAoIGJhc2UgKQorICAgIHsKKyAgICBjYXNlIDg6CisgICAgICBkbWFwID0gb2RpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTY6CisgICAgICBkbWFwID0gaGRpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBiYXNlID0gMTA7CisgICAgICBkbWFwID0gZGRpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIENoZWNrIGZvciBhIG1pbnVzIHNpZ24uICovCisgICAgbmVnID0gMDsKKyAgICBpZiAoICpzID09ICctJyApCisgICAgeworICAgICAgcysrOworICAgICAgbmVnID0gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwgaGV4IHByZWZpeC4gKi8KKyAgICBpZiAoICpzID09ICcwJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCAqKCBzICsgMSApID09ICd4JyB8fCAqKCBzICsgMSApID09ICdYJyApICkKKyAgICB7CisgICAgICBiYXNlID0gMTY7CisgICAgICBkbWFwID0gaGRpZ2l0czsKKyAgICAgIHMgICArPSAyOworICAgIH0KKworICAgIGZvciAoIHYgPSAwOyBzYml0c2V0KCBkbWFwLCAqcyApOyBzKysgKQorICAgICAgdiA9IHYgKiBiYXNlICsgYTJpWyhpbnQpKnNdOworCisgICAgaWYgKCBlbmQgIT0gMCApCisgICAgICAqZW5kID0gczsKKworICAgIHJldHVybiAoICFuZWcgKSA/IHYgOiAtdjsKKyAgfQorCisKKyAgLyogUm91dGluZSB0byBjb252ZXJ0IGFuIEFTQ0lJIHN0cmluZyBpbnRvIGFuIHVuc2lnbmVkIHNob3J0IGludGVnZXIuICovCisgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydAorICBfYmRmX2F0b3VzKCBjaGFyKiAgICAgICAgIHMsCisgICAgICAgICAgICAgIGNoYXIqKiAgICAgICAgZW5kLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIGJhc2UgKQorICB7CisgICAgdW5zaWduZWQgc2hvcnQgICAgICAgIHY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIGRtYXA7CisKKworICAgIGlmICggcyA9PSAwIHx8ICpzID09IDAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIHJhZGl4IGlzIHNvbWV0aGluZyByZWNvZ25pemFibGUuICBEZWZhdWx0IHRvIDEwLiAqLworICAgIHN3aXRjaCAoIGJhc2UgKQorICAgIHsKKyAgICBjYXNlIDg6CisgICAgICBkbWFwID0gb2RpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTY6CisgICAgICBkbWFwID0gaGRpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBiYXNlID0gMTA7CisgICAgICBkbWFwID0gZGRpZ2l0czsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIENoZWNrIGZvciB0aGUgc3BlY2lhbCBoZXggcHJlZml4LiAqLworICAgIGlmICggKnMgPT0gJzAnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoICooIHMgKyAxICkgPT0gJ3gnIHx8ICooIHMgKyAxICkgPT0gJ1gnICkgKQorICAgIHsKKyAgICAgIGJhc2UgPSAxNjsKKyAgICAgIGRtYXAgPSBoZGlnaXRzOworICAgICAgcyAgICs9IDI7CisgICAgfQorCisgICAgZm9yICggdiA9IDA7IHNiaXRzZXQoIGRtYXAsICpzICk7IHMrKyApCisgICAgICB2ID0gKHVuc2lnbmVkIHNob3J0KSggdiAqIGJhc2UgKyBhMmlbKGludCkqc10gKTsKKworICAgIGlmICggZW5kICE9IDAgKQorICAgICAgKmVuZCA9IHM7CisKKyAgICByZXR1cm4gdjsKKyAgfQorCisKKyAgLyogUm91dGluZSB0byBjb252ZXJ0IGFuIEFTQ0lJIHN0cmluZyBpbnRvIGEgc2lnbmVkIHNob3J0IGludGVnZXIuICovCisgIHN0YXRpYyBzaG9ydAorICBfYmRmX2F0b3MoIGNoYXIqICAgcywKKyAgICAgICAgICAgICBjaGFyKiogIGVuZCwKKyAgICAgICAgICAgICBpbnQgICAgIGJhc2UgKQorICB7CisgICAgc2hvcnQgICAgICAgICAgICAgICAgIHYsIG5lZzsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZG1hcDsKKworCisgICAgaWYgKCBzID09IDAgfHwgKnMgPT0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgcmFkaXggaXMgc29tZXRoaW5nIHJlY29nbml6YWJsZS4gIERlZmF1bHQgdG8gMTAuICovCisgICAgc3dpdGNoICggYmFzZSApCisgICAgeworICAgIGNhc2UgODoKKyAgICAgIGRtYXAgPSBvZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxNjoKKyAgICAgIGRtYXAgPSBoZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJhc2UgPSAxMDsKKyAgICAgIGRtYXAgPSBkZGlnaXRzOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGEgbWludXMuICovCisgICAgbmVnID0gMDsKKyAgICBpZiAoICpzID09ICctJyApCisgICAgeworICAgICAgcysrOworICAgICAgbmVnID0gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwgaGV4IHByZWZpeC4gKi8KKyAgICBpZiAoICpzID09ICcwJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCAqKCBzICsgMSApID09ICd4JyB8fCAqKCBzICsgMSApID09ICdYJyApICkKKyAgICB7CisgICAgICBiYXNlID0gMTY7CisgICAgICBkbWFwID0gaGRpZ2l0czsKKyAgICAgIHMgICArPSAyOworICAgIH0KKworICAgIGZvciAoIHYgPSAwOyBzYml0c2V0KCBkbWFwLCAqcyApOyBzKysgKQorICAgICAgdiA9IChzaG9ydCkoIHYgKiBiYXNlICsgYTJpWyhpbnQpKnNdICk7CisKKyAgICBpZiAoIGVuZCAhPSAwICkKKyAgICAgICplbmQgPSBzOworCisgICAgcmV0dXJuIChzaG9ydCkoICggIW5lZyApID8gdiA6IC12ICk7CisgIH0KKworCisgIC8qIFJvdXRpbmUgdG8gY29tcGFyZSB0d28gZ2x5cGhzIGJ5IGVuY29kaW5nIHNvIHRoZXkgY2FuIGJlIHNvcnRlZC4gKi8KKyAgc3RhdGljIGludAorICBieV9lbmNvZGluZyggY29uc3Qgdm9pZCogIGEsCisgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgYiApCisgIHsKKyAgICBiZGZfZ2x5cGhfdCAgKmMxLCAqYzI7CisKKworICAgIGMxID0gKGJkZl9nbHlwaF90ICopYTsKKyAgICBjMiA9IChiZGZfZ2x5cGhfdCAqKWI7CisKKyAgICBpZiAoIGMxLT5lbmNvZGluZyA8IGMyLT5lbmNvZGluZyApCisgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIGMxLT5lbmNvZGluZyA+IGMyLT5lbmNvZGluZyApCisgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYmRmX2NyZWF0ZV9wcm9wZXJ0eSggY2hhciogICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgIGJkZl9mb250X3QqICBmb250ICkKKyAgeworICAgIHNpemVfdCAgICAgICAgICAgbjsKKyAgICBiZGZfcHJvcGVydHlfdCogIHA7CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgPSBmb250LT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisKKworICAgIC8qIEZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyAgICAgICAgKi8KKyAgICAvKiBhbHJlYWR5IGJlZW4gYWRkZWQgb3Igbm90LiAgSWYgaXQgaGFzLCB0aGVuICovCisgICAgLyogc2ltcGx5IGlnbm9yZSBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggaGFzaF9sb29rdXAoIG5hbWUsICYoZm9udC0+cHJvcHRibCkgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBmb250LT51c2VyX3Byb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPm51c2VyX3Byb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPm51c2VyX3Byb3BzICsgMSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHAgPSBmb250LT51c2VyX3Byb3BzICsgZm9udC0+bnVzZXJfcHJvcHM7CisgICAgRlRfWkVSTyggcCApOworCisgICAgbiA9IGZ0X3N0cmxlbiggbmFtZSApICsgMTsKKyAgICBpZiAoIG4gPiBGVF9VTE9OR19NQVggKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggcC0+bmFtZSwgbiApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX01FTV9DT1BZKCAoY2hhciAqKXAtPm5hbWUsIG5hbWUsIG4gKTsKKworICAgIHAtPmZvcm1hdCAgPSBmb3JtYXQ7CisgICAgcC0+YnVpbHRpbiA9IDA7CisKKyAgICBuID0gX251bV9iZGZfcHJvcGVydGllcyArIGZvbnQtPm51c2VyX3Byb3BzOworCisgICAgZXJyb3IgPSBoYXNoX2luc2VydCggcC0+bmFtZSwgbiwgJihmb250LT5wcm9wdGJsKSwgbWVtb3J5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBmb250LT5udXNlcl9wcm9wcysrOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIGJkZl9wcm9wZXJ0eV90ICogKQorICBiZGZfZ2V0X3Byb3BlcnR5KCBjaGFyKiAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYmRmX2ZvbnRfdCogIGZvbnQgKQorICB7CisgICAgaGFzaG5vZGUgIGhuOworICAgIHNpemVfdCAgICBwcm9waWQ7CisKKworICAgIGlmICggbmFtZSA9PSAwIHx8ICpuYW1lID09IDAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICggaG4gPSBoYXNoX2xvb2t1cCggbmFtZSwgJihmb250LT5wcm9wdGJsKSApICkgPT0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIHByb3BpZCA9IGhuLT5kYXRhOworICAgIGlmICggcHJvcGlkID49IF9udW1fYmRmX3Byb3BlcnRpZXMgKQorICAgICAgcmV0dXJuIGZvbnQtPnVzZXJfcHJvcHMgKyAoIHByb3BpZCAtIF9udW1fYmRmX3Byb3BlcnRpZXMgKTsKKworICAgIHJldHVybiAoYmRmX3Byb3BlcnR5X3QqKV9iZGZfcHJvcGVydGllcyArIHByb3BpZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCREYgZm9udCBmaWxlIHBhcnNpbmcgZmxhZ3MgYW5kIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogUGFyc2UgZmxhZ3MuICovCisKKyNkZWZpbmUgX0JERl9TVEFSVCAgICAgIDB4MDAwMVUKKyNkZWZpbmUgX0JERl9GT05UX05BTUUgIDB4MDAwMlUKKyNkZWZpbmUgX0JERl9TSVpFICAgICAgIDB4MDAwNFUKKyNkZWZpbmUgX0JERl9GT05UX0JCWCAgIDB4MDAwOFUKKyNkZWZpbmUgX0JERl9QUk9QUyAgICAgIDB4MDAxMFUKKyNkZWZpbmUgX0JERl9HTFlQSFMgICAgIDB4MDAyMFUKKyNkZWZpbmUgX0JERl9HTFlQSCAgICAgIDB4MDA0MFUKKyNkZWZpbmUgX0JERl9FTkNPRElORyAgIDB4MDA4MFUKKyNkZWZpbmUgX0JERl9TV0lEVEggICAgIDB4MDEwMFUKKyNkZWZpbmUgX0JERl9EV0lEVEggICAgIDB4MDIwMFUKKyNkZWZpbmUgX0JERl9CQlggICAgICAgIDB4MDQwMFUKKyNkZWZpbmUgX0JERl9CSVRNQVAgICAgIDB4MDgwMFUKKworI2RlZmluZSBfQkRGX1NXSURUSF9BREogIDB4MTAwMFUKKworI2RlZmluZSBfQkRGX0dMWVBIX0JJVFMgKCBfQkRGX0dMWVBIICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkRGX0VOQ09ESU5HIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkRGX1NXSURUSCAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkRGX0RXSURUSCAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkRGX0JCWCAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkRGX0JJVE1BUCAgICkKKworI2RlZmluZSBfQkRGX0dMWVBIX1dJRFRIX0NIRUNLICAgMHg0MDAwMDAwMFVMCisjZGVmaW5lIF9CREZfR0xZUEhfSEVJR0hUX0NIRUNLICAweDgwMDAwMDAwVUwKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBfYmRmX2FkZF9jb21tZW50KCBiZGZfZm9udF90KiAgICBmb250LAorICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgICBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4gKQorICB7CisgICAgY2hhciogICAgICBjcDsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZvbnQtPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggZm9udC0+Y29tbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+Y29tbWVudHNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmNvbW1lbnRzX2xlbiArIGxlbiArIDEgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBjcCA9IGZvbnQtPmNvbW1lbnRzICsgZm9udC0+Y29tbWVudHNfbGVuOworCisgICAgRlRfTUVNX0NPUFkoIGNwLCBjb21tZW50LCBsZW4gKTsKKyAgICBjcFtsZW5dID0gJ1xuJzsKKworICAgIGZvbnQtPmNvbW1lbnRzX2xlbiArPSBsZW4gKyAxOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBTZXQgdGhlIHNwYWNpbmcgZnJvbSB0aGUgZm9udCBuYW1lIGlmIGl0IGV4aXN0cywgb3Igc2V0IGl0IHRvIHRoZSAqLworICAvKiBkZWZhdWx0IHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgX2JkZl9zZXRfZGVmYXVsdF9zcGFjaW5nKCBiZGZfZm9udF90KiAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGZfb3B0aW9uc190KiAgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgbGluZW5vICkKKyAgeworICAgIHNpemVfdCAgICAgICBsZW47CisgICAgY2hhciAgICAgICAgIG5hbWVbMjU2XTsKKyAgICBfYmRmX2xpc3RfdCAgbGlzdDsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5OworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIEZUX1VOVVNFRCggbGluZW5vICk7ICAgICAgICAvKiBvbmx5IHVzZWQgaW4gZGVidWcgbW9kZSAqLworCisKKyAgICBpZiAoIGZvbnQgPT0gMCB8fCBmb250LT5uYW1lID09IDAgfHwgZm9udC0+bmFtZVswXSA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbWVtb3J5ID0gZm9udC0+bWVtb3J5OworCisgICAgX2JkZl9saXN0X2luaXQoICZsaXN0LCBtZW1vcnkgKTsKKworICAgIGZvbnQtPnNwYWNpbmcgPSBvcHRzLT5mb250X3NwYWNpbmc7CisKKyAgICBsZW4gPSBmdF9zdHJsZW4oIGZvbnQtPm5hbWUgKSArIDE7CisgICAgLyogTGltaXQgb3Vyc2VsdmVzIHRvIDI1NiBjaGFyYWN0ZXJzIGluIHRoZSBmb250IG5hbWUuICovCisgICAgaWYgKCBsZW4gPj0gMjU2ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJfYmRmX3NldF9kZWZhdWx0X3NwYWNpbmc6ICIgRVJSTVNHNywgbGluZW5vICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIEZUX01FTV9DT1BZKCBuYW1lLCBmb250LT5uYW1lLCBsZW4gKTsKKworICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmbGlzdCwgKGNoYXIgKikiLSIsIG5hbWUsICh1bnNpZ25lZCBsb25nKWxlbiApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgaWYgKCBsaXN0LnVzZWQgPT0gMTUgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoIGxpc3QuZmllbGRbMTFdWzBdICkKKyAgICAgIHsKKyAgICAgIGNhc2UgJ0MnOgorICAgICAgY2FzZSAnYyc6CisgICAgICAgIGZvbnQtPnNwYWNpbmcgPSBCREZfQ0hBUkNFTEw7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnTSc6CisgICAgICBjYXNlICdtJzoKKyAgICAgICAgZm9udC0+c3BhY2luZyA9IEJERl9NT05PV0lEVEg7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnUCc6CisgICAgICBjYXNlICdwJzoKKyAgICAgICAgZm9udC0+c3BhY2luZyA9IEJERl9QUk9QT1JUSU9OQUw7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICBGYWlsOgorICAgIF9iZGZfbGlzdF9kb25lKCAmbGlzdCApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYW4gYXRvbSBvciBub3QuICBJZiBpdCBpcywgdGhlbiAqLworICAvKiBjbGVhbiBpdCB1cCBzbyB0aGUgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBpZiB0aGV5IGV4aXN0LiAgICAgICAqLworICBzdGF0aWMgaW50CisgIF9iZGZfaXNfYXRvbSggY2hhciogICAgICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsaW5lbGVuLAorICAgICAgICAgICAgICAgIGNoYXIqKiAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgY2hhcioqICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgYmRmX2ZvbnRfdCogICAgZm9udCApCisgIHsKKyAgICBpbnQgICAgICAgICAgICAgIGhvbGQ7CisgICAgY2hhciAgICAgICAgICAgICAqc3AsICplcDsKKyAgICBiZGZfcHJvcGVydHlfdCogIHA7CisKKworICAgICpuYW1lID0gc3AgPSBlcCA9IGxpbmU7CisKKyAgICB3aGlsZSAoICplcCAmJiAqZXAgIT0gJyAnICYmICplcCAhPSAnXHQnICkKKyAgICAgIGVwKys7CisKKyAgICBob2xkID0gLTE7CisgICAgaWYgKCAqZXAgKQorICAgIHsKKyAgICAgIGhvbGQgPSAqZXA7CisgICAgICAqZXAgID0gMDsKKyAgICB9CisKKyAgICBwID0gYmRmX2dldF9wcm9wZXJ0eSggc3AsIGZvbnQgKTsKKworICAgIC8qIFJlc3RvcmUgdGhlIGNoYXJhY3RlciB0aGF0IHdhcyBzYXZlZCBiZWZvcmUgYW55IHJldHVybiBjYW4gaGFwcGVuLiAqLworICAgIGlmICggaG9sZCAhPSAtMSApCisgICAgICAqZXAgPSAoY2hhcilob2xkOworCisgICAgLyogSWYgdGhlIHByb3BlcnR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGF0b20sIGp1c3QgcmV0dXJuIGhlcmUuICovCisgICAgaWYgKCBwICYmIHAtPmZvcm1hdCAhPSBCREZfQVRPTSApCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIFRoZSBwcm9wZXJ0eSBpcyBhbiBhdG9tLiAgVHJpbSBhbGwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworICAgIC8qIGFuZCBkb3VibGUgcXVvdGVzIGZvciB0aGUgYXRvbSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNwID0gZXA7CisgICAgZXAgPSBsaW5lICsgbGluZWxlbjsKKworICAgIC8qIFRyaW0gdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSBpZiBpdCBleGlzdHMuICovCisgICAgaWYgKCAqc3AgKQorICAgICAgKnNwKysgPSAwOworICAgIHdoaWxlICggKnNwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICggKnNwID09ICcgJyB8fCAqc3AgPT0gJ1x0JyApICkKKyAgICAgIHNwKys7CisKKyAgICAvKiBUcmltIHRoZSBsZWFkaW5nIGRvdWJsZSBxdW90ZSBpZiBpdCBleGlzdHMuICovCisgICAgaWYgKCAqc3AgPT0gJyInICkKKyAgICAgIHNwKys7CisgICAgKnZhbHVlID0gc3A7CisKKyAgICAvKiBUcmltIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGlmIGl0IGV4aXN0cy4gKi8KKyAgICB3aGlsZSAoIGVwID4gc3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgKCAqKCBlcCAtIDEgKSA9PSAnICcgfHwgKiggZXAgLSAxICkgPT0gJ1x0JyApICkKKyAgICAgICotLWVwID0gMDsKKworICAgIC8qIFRyaW0gdGhlIHRyYWlsaW5nIGRvdWJsZSBxdW90ZSBpZiBpdCBleGlzdHMuICovCisgICAgaWYgKCBlcCA+IHNwICYmICooIGVwIC0gMSApID09ICciJyApCisgICAgICAqLS1lcCA9IDA7CisKKyAgICByZXR1cm4gMTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIF9iZGZfYWRkX3Byb3BlcnR5KCBiZGZfZm9udF90KiAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGluZW5vICkKKyAgeworICAgIHNpemVfdCAgICAgICAgICBwcm9waWQ7CisgICAgaGFzaG5vZGUgICAgICAgIGhuOworICAgIGJkZl9wcm9wZXJ0eV90ICAqcHJvcCwgKmZwOworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBmb250LT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKworICAgIEZUX1VOVVNFRCggbGluZW5vICk7ICAgICAgICAvKiBvbmx5IHVzZWQgaW4gZGVidWcgbW9kZSAqLworCisKKyAgICAvKiBGaXJzdCwgY2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGZvbnQuICovCisgICAgaWYgKCAoIGhuID0gaGFzaF9sb29rdXAoIG5hbWUsIChoYXNodGFibGUgKilmb250LT5pbnRlcm5hbCApICkgIT0gMCApCisgICAgeworICAgICAgLyogVGhlIHByb3BlcnR5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBmb250LCBzbyBzaW1wbHkgcmVwbGFjZSAqLworICAgICAgLyogdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlLiAgICAgICAgICAqLworICAgICAgZnAgPSBmb250LT5wcm9wcyArIGhuLT5kYXRhOworCisgICAgICBzd2l0Y2ggKCBmcC0+Zm9ybWF0ICkKKyAgICAgIHsKKyAgICAgIGNhc2UgQkRGX0FUT006CisgICAgICAgIC8qIERlbGV0ZSB0aGUgY3VycmVudCBhdG9tIGlmIGl0IGV4aXN0cy4gKi8KKyAgICAgICAgRlRfRlJFRSggZnAtPnZhbHVlLmF0b20gKTsKKworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlWzBdICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9TVFJEVVAoIGZwLT52YWx1ZS5hdG9tLCB2YWx1ZSApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCREZfSU5URUdFUjoKKyAgICAgICAgZnAtPnZhbHVlLmwgPSBfYmRmX2F0b2woIHZhbHVlLCAwLCAxMCApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCREZfQ0FSRElOQUw6CisgICAgICAgIGZwLT52YWx1ZS51bCA9IF9iZGZfYXRvdWwoIHZhbHVlLCAwLCAxMCApOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgOworICAgICAgfQorCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogU2VlIHdoZXRoZXIgdGhpcyBwcm9wZXJ0eSB0eXBlIGV4aXN0cyB5ZXQgb3Igbm90LiAqLworICAgIC8qIElmIG5vdCwgY3JlYXRlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBobiA9IGhhc2hfbG9va3VwKCBuYW1lLCAmKGZvbnQtPnByb3B0YmwpICk7CisgICAgaWYgKCBobiA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IGJkZl9jcmVhdGVfcHJvcGVydHkoIG5hbWUsIEJERl9BVE9NLCBmb250ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgaG4gPSBoYXNoX2xvb2t1cCggbmFtZSwgJihmb250LT5wcm9wdGJsKSApOworICAgIH0KKworICAgIC8qIEFsbG9jYXRlIGFub3RoZXIgcHJvcGVydHkgaWYgdGhpcyBpcyBvdmVyZmxvdy4gKi8KKyAgICBpZiAoIGZvbnQtPnByb3BzX3VzZWQgPT0gZm9udC0+cHJvcHNfc2l6ZSApCisgICAgeworICAgICAgaWYgKCBmb250LT5wcm9wc19zaXplID09IDAgKQorICAgICAgeworICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggZm9udC0+cHJvcHMsIDEgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBmb250LT5wcm9wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+cHJvcHNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+cHJvcHNfc2l6ZSArIDEgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBmcCA9IGZvbnQtPnByb3BzICsgZm9udC0+cHJvcHNfc2l6ZTsKKyAgICAgIEZUX01FTV9aRVJPKCBmcCwgc2l6ZW9mICggYmRmX3Byb3BlcnR5X3QgKSApOworICAgICAgZm9udC0+cHJvcHNfc2l6ZSsrOworICAgIH0KKworICAgIHByb3BpZCA9IGhuLT5kYXRhOworICAgIGlmICggcHJvcGlkID49IF9udW1fYmRmX3Byb3BlcnRpZXMgKQorICAgICAgcHJvcCA9IGZvbnQtPnVzZXJfcHJvcHMgKyAoIHByb3BpZCAtIF9udW1fYmRmX3Byb3BlcnRpZXMgKTsKKyAgICBlbHNlCisgICAgICBwcm9wID0gKGJkZl9wcm9wZXJ0eV90KilfYmRmX3Byb3BlcnRpZXMgKyBwcm9waWQ7CisKKyAgICBmcCA9IGZvbnQtPnByb3BzICsgZm9udC0+cHJvcHNfdXNlZDsKKworICAgIGZwLT5uYW1lICAgID0gcHJvcC0+bmFtZTsKKyAgICBmcC0+Zm9ybWF0ICA9IHByb3AtPmZvcm1hdDsKKyAgICBmcC0+YnVpbHRpbiA9IHByb3AtPmJ1aWx0aW47CisKKyAgICBzd2l0Y2ggKCBwcm9wLT5mb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIEJERl9BVE9NOgorICAgICAgZnAtPnZhbHVlLmF0b20gPSAwOworICAgICAgaWYgKCB2YWx1ZSAhPSAwICYmIHZhbHVlWzBdICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9TVFJEVVAoIGZwLT52YWx1ZS5hdG9tLCB2YWx1ZSApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQkRGX0lOVEVHRVI6CisgICAgICBmcC0+dmFsdWUubCA9IF9iZGZfYXRvbCggdmFsdWUsIDAsIDEwICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQkRGX0NBUkRJTkFMOgorICAgICAgZnAtPnZhbHVlLnVsID0gX2JkZl9hdG91bCggdmFsdWUsIDAsIDEwICk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgcHJvcGVydHkgaGFwcGVucyB0byBiZSBhIGNvbW1lbnQsIHRoZW4gaXQgZG9lc24ndCBuZWVkICovCisgICAgLyogdG8gYmUgYWRkZWQgdG8gdGhlIGludGVybmFsIGhhc2ggdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBuYW1lLCAiQ09NTUVOVCIsIDcgKSAhPSAwICkKKyAgICB7CisgICAgICAvKiBBZGQgdGhlIHByb3BlcnR5IHRvIHRoZSBmb250IHByb3BlcnR5IHRhYmxlLiAqLworICAgICAgZXJyb3IgPSBoYXNoX2luc2VydCggZnAtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5wcm9wc191c2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhc2h0YWJsZSAqKWZvbnQtPmludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGZvbnQtPnByb3BzX3VzZWQrKzsKKworICAgIC8qIFNvbWUgc3BlY2lhbCBjYXNlcyBuZWVkIHRvIGJlIGhhbmRsZWQgaGVyZS4gIFRoZSBERUZBVUxUX0NIQVIgICAgICAgKi8KKyAgICAvKiBwcm9wZXJ0eSBuZWVkcyB0byBiZSBsb2NhdGVkIGlmIGl0IGV4aXN0cyBpbiB0aGUgcHJvcGVydHkgbGlzdCwgdGhlICovCisgICAgLyogRk9OVF9BU0NFTlQgYW5kIEZPTlRfREVTQ0VOVCBuZWVkIHRvIGJlIGFzc2lnbmVkIGlmIHRoZXkgYXJlICAgICAgICAqLworICAgIC8qIHByZXNlbnQsIGFuZCB0aGUgU1BBQ0lORyBwcm9wZXJ0eSBzaG91bGQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgICAgICAgKi8KKyAgICAvKiBzcGFjaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIG5hbWUsICJERUZBVUxUX0NIQVIiLCAxMiApID09IDAgKQorICAgICAgZm9udC0+ZGVmYXVsdF9jaGFyID0gZnAtPnZhbHVlLmw7CisgICAgZWxzZSBpZiAoIF9iZGZfc3RybmNtcCggbmFtZSwgIkZPTlRfQVNDRU5UIiwgMTEgKSA9PSAwICkKKyAgICAgIGZvbnQtPmZvbnRfYXNjZW50ID0gZnAtPnZhbHVlLmw7CisgICAgZWxzZSBpZiAoIF9iZGZfc3RybmNtcCggbmFtZSwgIkZPTlRfREVTQ0VOVCIsIDEyICkgPT0gMCApCisgICAgICBmb250LT5mb250X2Rlc2NlbnQgPSBmcC0+dmFsdWUubDsKKyAgICBlbHNlIGlmICggX2JkZl9zdHJuY21wKCBuYW1lLCAiU1BBQ0lORyIsIDcgKSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoICFmcC0+dmFsdWUuYXRvbSApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIl9iZGZfYWRkX3Byb3BlcnR5OiAiIEVSUk1TRzgsIGxpbmVubywgIlNQQUNJTkciICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgaWYgKCBmcC0+dmFsdWUuYXRvbVswXSA9PSAncCcgfHwgZnAtPnZhbHVlLmF0b21bMF0gPT0gJ1AnICkKKyAgICAgICAgZm9udC0+c3BhY2luZyA9IEJERl9QUk9QT1JUSU9OQUw7CisgICAgICBlbHNlIGlmICggZnAtPnZhbHVlLmF0b21bMF0gPT0gJ20nIHx8IGZwLT52YWx1ZS5hdG9tWzBdID09ICdNJyApCisgICAgICAgIGZvbnQtPnNwYWNpbmcgPSBCREZfTU9OT1dJRFRIOworICAgICAgZWxzZSBpZiAoIGZwLT52YWx1ZS5hdG9tWzBdID09ICdjJyB8fCBmcC0+dmFsdWUuYXRvbVswXSA9PSAnQycgKQorICAgICAgICBmb250LT5zcGFjaW5nID0gQkRGX0NIQVJDRUxMOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmliYmxlX21hc2tbOF0gPQorICB7CisgICAgMHhGRiwgMHg4MCwgMHhDMCwgMHhFMCwgMHhGMCwgMHhGOCwgMHhGQywgMHhGRQorICB9OworCisKKyAgLyogQWN0dWFsbHkgcGFyc2UgdGhlIGdseXBoIGluZm8gYW5kIGJpdG1hcHMuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBfYmRmX3BhcnNlX2dseXBocyggY2hhciogICAgICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxpbmVsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICBjYWxsX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICBjbGllbnRfZGF0YSApCisgIHsKKyAgICBpbnQgICAgICAgICAgICAgICAgYywgbWFza19pbmRleDsKKyAgICBjaGFyKiAgICAgICAgICAgICAgczsKKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgYnA7CisgICAgdW5zaWduZWQgbG9uZyAgICAgIGksIHNsZW4sIG5pYmJsZXM7CisKKyAgICBfYmRmX3BhcnNlX3QqICAgICAgcDsKKyAgICBiZGZfZ2x5cGhfdCogICAgICAgZ2x5cGg7CisgICAgYmRmX2ZvbnRfdCogICAgICAgIGZvbnQ7CisKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIEZUX1VOVVNFRCggY2FsbF9kYXRhICk7CisgICAgRlRfVU5VU0VEKCBsaW5lbm8gKTsgICAgICAgIC8qIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlICovCisKKworICAgIHAgPSAoX2JkZl9wYXJzZV90ICopY2xpZW50X2RhdGE7CisKKyAgICBmb250ICAgPSBwLT5mb250OworICAgIG1lbW9yeSA9IGZvbnQtPm1lbW9yeTsKKworICAgIC8qIENoZWNrIGZvciBhIGNvbW1lbnQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJDT01NRU5UIiwgNyApID09IDAgKQorICAgIHsKKyAgICAgIGxpbmVsZW4gLT0gNzsKKworICAgICAgcyA9IGxpbmUgKyA3OworICAgICAgaWYgKCAqcyAhPSAwICkKKyAgICAgIHsKKyAgICAgICAgcysrOworICAgICAgICBsaW5lbGVuLS07CisgICAgICB9CisgICAgICBlcnJvciA9IF9iZGZfYWRkX2NvbW1lbnQoIHAtPmZvbnQsIHMsIGxpbmVsZW4gKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBUaGUgdmVyeSBmaXJzdCB0aGluZyBleHBlY3RlZCBpcyB0aGUgbnVtYmVyIG9mIGdseXBocy4gKi8KKyAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9HTFlQSFMgKSApCisgICAgeworICAgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJDSEFSUyIsIDUgKSAhPSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9nbHlwaHM6ICIgRVJSTVNHMSwgbGluZW5vLCAiQ0hBUlMiICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX0NoYXJzX0ZpZWxkICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBwLT5jbnQgPSBmb250LT5nbHlwaHNfc2l6ZSA9IF9iZGZfYXRvdWwoIHAtPmxpc3QuZmllbGRbMV0sIDAsIDEwICk7CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgbnVtYmVyIG9mIGdseXBocyBpcyBub24temVyby4gKi8KKyAgICAgIGlmICggcC0+Y250ID09IDAgKQorICAgICAgICBmb250LT5nbHlwaHNfc2l6ZSA9IDY0OworCisgICAgICAvKiBMaW1pdCBvdXJzZWx2ZXMgdG8gMSwxMTQsMTEyIGdseXBocyBpbiB0aGUgZm9udCAodGhpcyBpcyB0aGUgKi8KKyAgICAgIC8qIG51bWJlciBvZiBjb2RlIHBvaW50cyBhdmFpbGFibGUgaW4gVW5pY29kZSkuICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBwLT5jbnQgPj0gMHgxMTAwMDBVTCApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEVSUk1TRzUsIGxpbmVubywgIkNIQVJTIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBmb250LT5nbHlwaHMsIGZvbnQtPmdseXBoc19zaXplICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAtPmZsYWdzIHw9IF9CREZfR0xZUEhTOworCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHRoZSBFTkRGT05UIGZpZWxkLiAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiRU5ERk9OVCIsIDcgKSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoIHAtPmZsYWdzICYgX0JERl9HTFlQSF9CSVRTICkKKyAgICAgIHsKKyAgICAgICAgLyogTWlzc2luZyBFTkRDSEFSIGZpZWxkLiAqLworICAgICAgICBGVF9FUlJPUigoICJfYmRmX3BhcnNlX2dseXBoczogIiBFUlJNU0cxLCBsaW5lbm8sICJFTkRDSEFSIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggQ29ycnVwdGVkX0ZvbnRfR2x5cGhzICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogU29ydCB0aGUgZ2x5cGhzIGJ5IGVuY29kaW5nLiAqLworICAgICAgZnRfcXNvcnQoIChjaGFyICopZm9udC0+Z2x5cGhzLAorICAgICAgICAgICAgICAgIGZvbnQtPmdseXBoc191c2VkLAorICAgICAgICAgICAgICAgIHNpemVvZiAoIGJkZl9nbHlwaF90ICksCisgICAgICAgICAgICAgICAgYnlfZW5jb2RpbmcgKTsKKworICAgICAgcC0+ZmxhZ3MgJj0gfl9CREZfU1RBUlQ7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgdGhlIEVORENIQVIgZmllbGQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJFTkRDSEFSIiwgNyApID09IDAgKQorICAgIHsKKyAgICAgIHAtPmdseXBoX2VuYyA9IDA7CisgICAgICBwLT5mbGFncyAgICAmPSB+X0JERl9HTFlQSF9CSVRTOworCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgd2hldGhlciBhIGdseXBoIGlzIGJlaW5nIHNjYW5uZWQgYnV0IHNob3VsZCBiZSAqLworICAgIC8qIGlnbm9yZWQgYmVjYXVzZSBpdCBpcyBhbiB1bmVuY29kZWQgZ2x5cGguICAgICAgICAgICAgKi8KKyAgICBpZiAoICggcC0+ZmxhZ3MgJiBfQkRGX0dMWVBIICkgICAgICYmCisgICAgICAgICBwLT5nbHlwaF9lbmMgICAgICAgICAgICA9PSAtMSAmJgorICAgICAgICAgcC0+b3B0cy0+a2VlcF91bmVuY29kZWQgPT0gMCAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogQ2hlY2sgZm9yIHRoZSBTVEFSVENIQVIgZmllbGQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJTVEFSVENIQVIiLCA5ICkgPT0gMCApCisgICAgeworICAgICAgLyogU2V0IHRoZSBjaGFyYWN0ZXIgbmFtZSBpbiB0aGUgcGFyc2UgaW5mbyBmaXJzdCB1bnRpbCB0aGUgKi8KKyAgICAgIC8qIGVuY29kaW5nIGNhbiBiZSBjaGVja2VkIGZvciBhbiB1bmVuY29kZWQgY2hhcmFjdGVyLiAgICAgICovCisgICAgICBGVF9GUkVFKCBwLT5nbHlwaF9uYW1lICk7CisKKyAgICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmcC0+bGlzdCwgKGNoYXIgKikiICsiLCBsaW5lLCBsaW5lbGVuICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBfYmRmX2xpc3Rfc2hpZnQoICZwLT5saXN0LCAxICk7CisKKyAgICAgIHMgPSBfYmRmX2xpc3Rfam9pbiggJnAtPmxpc3QsICcgJywgJnNsZW4gKTsKKworICAgICAgaWYgKCAhcyApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEVSUk1TRzgsIGxpbmVubywgIlNUQVJUQ0hBUiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggcC0+Z2x5cGhfbmFtZSwgc2xlbiArIDEgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfTUVNX0NPUFkoIHAtPmdseXBoX25hbWUsIHMsIHNsZW4gKyAxICk7CisKKyAgICAgIHAtPmZsYWdzIHw9IF9CREZfR0xZUEg7CisKKyAgICAgIEZUX1RSQUNFNCgoIERCR01TRzEsIGxpbmVubywgcyApKTsKKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIENoZWNrIGZvciB0aGUgRU5DT0RJTkcgZmllbGQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJFTkNPRElORyIsIDggKSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9HTFlQSCApICkKKyAgICAgIHsKKyAgICAgICAgLyogTWlzc2luZyBTVEFSVENIQVIgZmllbGQuICovCisgICAgICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEVSUk1TRzEsIGxpbmVubywgIlNUQVJUQ0hBUiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE1pc3NpbmdfU3RhcnRjaGFyX0ZpZWxkICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAtPmdseXBoX2VuYyA9IF9iZGZfYXRvbCggcC0+bGlzdC5maWVsZFsxXSwgMCwgMTAgKTsKKworICAgICAgLyogTm9ybWFsaXplIG5lZ2F0aXZlIGVuY29kaW5nIHZhbHVlcy4gIFRoZSBzcGVjaWZpY2F0aW9uIG9ubHkgKi8KKyAgICAgIC8qIGFsbG93cyAtMSwgYnV0IHdlIGNhbiBiZSBtb3JlIGdlbmVyb3VzIGhlcmUuICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHAtPmdseXBoX2VuYyA8IC0xICkKKyAgICAgICAgcC0+Z2x5cGhfZW5jID0gLTE7CisKKyAgICAgIC8qIENoZWNrIGZvciBhbHRlcm5hdGl2ZSBlbmNvZGluZyBmb3JtYXQuICovCisgICAgICBpZiAoIHAtPmdseXBoX2VuYyA9PSAtMSAmJiBwLT5saXN0LnVzZWQgPiAyICkKKyAgICAgICAgcC0+Z2x5cGhfZW5jID0gX2JkZl9hdG9sKCBwLT5saXN0LmZpZWxkWzJdLCAwLCAxMCApOworCisgICAgICBpZiAoIHAtPmdseXBoX2VuYyA8IC0xICkKKyAgICAgICAgcC0+Z2x5cGhfZW5jID0gLTE7CisKKyAgICAgIEZUX1RSQUNFNCgoIERCR01TRzIsIHAtPmdseXBoX2VuYyApKTsKKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZW5jb2RpbmcgaXMgaW4gdGhlIFVuaWNvZGUgcmFuZ2UgYmVjYXVzZSAgKi8KKyAgICAgIC8qIG90aGVyd2lzZSBwLT5oYXZlIChhIGJpdG1hcCB3aXRoIHN0YXRpYyBzaXplKSBvdmVyZmxvd3MuICovCisgICAgICBpZiAoIHAtPmdseXBoX2VuYyA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIChzaXplX3QpcC0+Z2x5cGhfZW5jID49IHNpemVvZiAoIHAtPmhhdmUgKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHVuc2lnbmVkIGxvbmcgKSAqIDMyICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9nbHlwaHM6ICIgRVJSTVNHNSwgbGluZW5vLCAiRU5DT0RJTkciICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGVuY29kaW5nIGhhcyBhbHJlYWR5IGJlZW4gZW5jb3VudGVyZWQuICovCisgICAgICAvKiBJZiBpdCBoYXMgdGhlbiBjaGFuZ2UgaXQgdG8gdW5lbmNvZGVkIHNvIGl0IGdldHMgYWRkZWQgaWYgKi8KKyAgICAgIC8qIGluZGljYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBwLT5nbHlwaF9lbmMgPj0gMCApCisgICAgICB7CisgICAgICAgIGlmICggX2JkZl9nbHlwaF9tb2RpZmllZCggcC0+aGF2ZSwgcC0+Z2x5cGhfZW5jICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogRW1pdCBhIG1lc3NhZ2Ugc2F5aW5nIGEgZ2x5cGggaGFzIGJlZW4gbW92ZWQgdG8gdGhlICovCisgICAgICAgICAgLyogdW5lbmNvZGVkIGFyZWEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgRlRfVFJBQ0UyKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEFDTVNHMTIsCisgICAgICAgICAgICAgICAgICAgICAgcC0+Z2x5cGhfZW5jLCBwLT5nbHlwaF9uYW1lICkpOworICAgICAgICAgIHAtPmdseXBoX2VuYyA9IC0xOworICAgICAgICAgIGZvbnQtPm1vZGlmaWVkID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgX2JkZl9zZXRfZ2x5cGhfbW9kaWZpZWQoIHAtPmhhdmUsIHAtPmdseXBoX2VuYyApOworICAgICAgfQorCisgICAgICBpZiAoIHAtPmdseXBoX2VuYyA+PSAwICkKKyAgICAgIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBlbm91Z2ggZ2x5cGhzIGFsbG9jYXRlZCBpbiBjYXNlIHRoZSAqLworICAgICAgICAvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBoYXBwZW4gdG8gYmUgd3JvbmcuICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggZm9udC0+Z2x5cGhzX3VzZWQgPT0gZm9udC0+Z2x5cGhzX3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggZm9udC0+Z2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmdseXBoc19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmdseXBoc19zaXplICsgNjQgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBmb250LT5nbHlwaHNfc2l6ZSArPSA2NDsKKyAgICAgICAgfQorCisgICAgICAgIGdseXBoICAgICAgICAgICA9IGZvbnQtPmdseXBocyArIGZvbnQtPmdseXBoc191c2VkKys7CisgICAgICAgIGdseXBoLT5uYW1lICAgICA9IHAtPmdseXBoX25hbWU7CisgICAgICAgIGdseXBoLT5lbmNvZGluZyA9IHAtPmdseXBoX2VuYzsKKworICAgICAgICAvKiBSZXNldCB0aGUgaW5pdGlhbCBnbHlwaCBpbmZvLiAqLworICAgICAgICBwLT5nbHlwaF9uYW1lID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogVW5lbmNvZGVkIGdseXBoLiAgQ2hlY2sgd2hldGhlciBpdCBzaG91bGQgKi8KKyAgICAgICAgLyogYmUgYWRkZWQgb3Igbm90LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBwLT5vcHRzLT5rZWVwX3VuZW5jb2RlZCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEFsbG9jYXRlIHRoZSBuZXh0IHVuZW5jb2RlZCBnbHlwaC4gKi8KKyAgICAgICAgICBpZiAoIGZvbnQtPnVuZW5jb2RlZF91c2VkID09IGZvbnQtPnVuZW5jb2RlZF9zaXplICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBmb250LT51bmVuY29kZWQgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+dW5lbmNvZGVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT51bmVuY29kZWRfc2l6ZSArIDQgKSApCisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgICAgZm9udC0+dW5lbmNvZGVkX3NpemUgKz0gNDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBnbHlwaCAgICAgICAgICAgPSBmb250LT51bmVuY29kZWQgKyBmb250LT51bmVuY29kZWRfdXNlZDsKKyAgICAgICAgICBnbHlwaC0+bmFtZSAgICAgPSBwLT5nbHlwaF9uYW1lOworICAgICAgICAgIGdseXBoLT5lbmNvZGluZyA9IChsb25nKWZvbnQtPnVuZW5jb2RlZF91c2VkKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIC8qIEZyZWUgdXAgdGhlIGdseXBoIG5hbWUgaWYgdGhlIHVuZW5jb2RlZCBzaG91bGRuJ3QgYmUgKi8KKyAgICAgICAgICAvKiBrZXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgRlRfRlJFRSggcC0+Z2x5cGhfbmFtZSApOworCisgICAgICAgIHAtPmdseXBoX25hbWUgPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiBDbGVhciB0aGUgZmxhZ3MgdGhhdCBtaWdodCBiZSBhZGRlZCB3aGVuIHdpZHRoIGFuZCBoZWlnaHQgYXJlICovCisgICAgICAvKiBjaGVja2VkIGZvciBjb25zaXN0ZW5jeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBwLT5mbGFncyAmPSB+KCBfQkRGX0dMWVBIX1dJRFRIX0NIRUNLIHwgX0JERl9HTFlQSF9IRUlHSFRfQ0hFQ0sgKTsKKworICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9FTkNPRElORzsKKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFBvaW50IGF0IHRoZSBnbHlwaCBiZWluZyBjb25zdHJ1Y3RlZC4gKi8KKyAgICBpZiAoIHAtPmdseXBoX2VuYyA9PSAtMSApCisgICAgICBnbHlwaCA9IGZvbnQtPnVuZW5jb2RlZCArICggZm9udC0+dW5lbmNvZGVkX3VzZWQgLSAxICk7CisgICAgZWxzZQorICAgICAgZ2x5cGggPSBmb250LT5nbHlwaHMgKyAoIGZvbnQtPmdseXBoc191c2VkIC0gMSApOworCisgICAgLyogQ2hlY2sgd2hldGhlciBhIGJpdG1hcCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gKi8KKyAgICBpZiAoIHAtPmZsYWdzICYgX0JERl9CSVRNQVAgKQorICAgIHsKKyAgICAgIC8qIElmIHRoZXJlIGFyZSBtb3JlIHJvd3MgdGhhbiBhcmUgc3BlY2lmaWVkIGluIHRoZSBnbHlwaCBtZXRyaWNzLCAqLworICAgICAgLyogaWdub3JlIHRoZSByZW1haW5pbmcgbGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHAtPnJvdyA+PSAodW5zaWduZWQgbG9uZylnbHlwaC0+YmJ4LmhlaWdodCApCisgICAgICB7CisgICAgICAgIGlmICggISggcC0+ZmxhZ3MgJiBfQkRGX0dMWVBIX0hFSUdIVF9DSEVDSyApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFMigoICJfYmRmX3BhcnNlX2dseXBoczogIiBBQ01TRzEzLCBnbHlwaC0+ZW5jb2RpbmcgKSk7CisgICAgICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9HTFlQSF9IRUlHSFRfQ0hFQ0s7CisgICAgICAgICAgZm9udC0+bW9kaWZpZWQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICAvKiBPbmx5IGNvbGxlY3QgdGhlIG51bWJlciBvZiBuaWJibGVzIGluZGljYXRlZCBieSB0aGUgZ2x5cGggICAgICovCisgICAgICAvKiBtZXRyaWNzLiAgSWYgdGhlcmUgYXJlIG1vcmUgY29sdW1ucywgdGhleSBhcmUgc2ltcGx5IGlnbm9yZWQuICovCisgICAgICBuaWJibGVzID0gZ2x5cGgtPmJwciA8PCAxOworICAgICAgYnAgICAgICA9IGdseXBoLT5iaXRtYXAgKyBwLT5yb3cgKiBnbHlwaC0+YnByOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IG5pYmJsZXM7IGkrKyApCisgICAgICB7CisgICAgICAgIGMgPSBsaW5lW2ldOworICAgICAgICBpZiAoICFzYml0c2V0KCBoZGlnaXRzLCBjICkgKQorICAgICAgICAgIGJyZWFrOworICAgICAgICAqYnAgPSAoRlRfQnl0ZSkoICggKmJwIDw8IDQgKSArIGEyaVtjXSApOworICAgICAgICBpZiAoIGkgKyAxIDwgbmliYmxlcyAmJiAoIGkgJiAxICkgKQorICAgICAgICAgICorK2JwID0gMDsKKyAgICAgIH0KKworICAgICAgLyogSWYgYW55IGxpbmUgaGFzIG5vdCBlbm91Z2ggY29sdW1ucywgICAgICAgICAgICAqLworICAgICAgLyogaW5kaWNhdGUgdGhleSBoYXZlIGJlZW4gcGFkZGVkIHdpdGggemVybyBiaXRzLiAqLworICAgICAgaWYgKCBpIDwgbmliYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAhKCBwLT5mbGFncyAmIF9CREZfR0xZUEhfV0lEVEhfQ0hFQ0sgKSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJfYmRmX3BhcnNlX2dseXBoczogIiBBQ01TRzE2LCBnbHlwaC0+ZW5jb2RpbmcgKSk7CisgICAgICAgIHAtPmZsYWdzICAgICAgIHw9IF9CREZfR0xZUEhfV0lEVEhfQ0hFQ0s7CisgICAgICAgIGZvbnQtPm1vZGlmaWVkICA9IDE7CisgICAgICB9CisKKyAgICAgIC8qIFJlbW92ZSBwb3NzaWJsZSBnYXJiYWdlIGF0IHRoZSByaWdodC4gKi8KKyAgICAgIG1hc2tfaW5kZXggPSAoIGdseXBoLT5iYngud2lkdGggKiBwLT5mb250LT5icHAgKSAmIDc7CisgICAgICBpZiAoIGdseXBoLT5iYngud2lkdGggKQorICAgICAgICAqYnAgJj0gbmliYmxlX21hc2tbbWFza19pbmRleF07CisKKyAgICAgIC8qIElmIGFueSBsaW5lIGhhcyBleHRyYSBjb2x1bW5zLCBpbmRpY2F0ZSB0aGV5IGhhdmUgYmVlbiByZW1vdmVkLiAqLworICAgICAgaWYgKCBpID09IG5pYmJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBzYml0c2V0KCBoZGlnaXRzLCBsaW5lW25pYmJsZXNdICkgICAgICAmJgorICAgICAgICAgICAhKCBwLT5mbGFncyAmIF9CREZfR0xZUEhfV0lEVEhfQ0hFQ0sgKSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJfYmRmX3BhcnNlX2dseXBoczogIiBBQ01TRzE0LCBnbHlwaC0+ZW5jb2RpbmcgKSk7CisgICAgICAgIHAtPmZsYWdzICAgICAgIHw9IF9CREZfR0xZUEhfV0lEVEhfQ0hFQ0s7CisgICAgICAgIGZvbnQtPm1vZGlmaWVkICA9IDE7CisgICAgICB9CisKKyAgICAgIHAtPnJvdysrOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIEV4cGVjdCB0aGUgU1dJRFRIIChzY2FsYWJsZSB3aWR0aCkgZmllbGQgbmV4dC4gKi8KKyAgICBpZiAoIF9iZGZfc3RybmNtcCggbGluZSwgIlNXSURUSCIsIDYgKSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9FTkNPRElORyApICkKKyAgICAgICAgZ290byBNaXNzaW5nX0VuY29kaW5nOworCisgICAgICBlcnJvciA9IF9iZGZfbGlzdF9zcGxpdCggJnAtPmxpc3QsIChjaGFyICopIiArIiwgbGluZSwgbGluZWxlbiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZ2x5cGgtPnN3aWR0aCA9ICh1bnNpZ25lZCBzaG9ydClfYmRmX2F0b3VsKCBwLT5saXN0LmZpZWxkWzFdLCAwLCAxMCApOworICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9TV0lEVEg7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBFeHBlY3QgdGhlIERXSURUSCAoc2NhbGFibGUgd2lkdGgpIGZpZWxkIG5leHQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJEV0lEVEgiLCA2ICkgPT0gMCApCisgICAgeworICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIF9CREZfRU5DT0RJTkcgKSApCisgICAgICAgIGdvdG8gTWlzc2luZ19FbmNvZGluZzsKKworICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGdseXBoLT5kd2lkdGggPSAodW5zaWduZWQgc2hvcnQpX2JkZl9hdG91bCggcC0+bGlzdC5maWVsZFsxXSwgMCwgMTAgKTsKKworICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIF9CREZfU1dJRFRIICkgKQorICAgICAgeworICAgICAgICAvKiBNaXNzaW5nIFNXSURUSCBmaWVsZC4gIEVtaXQgYW4gYXV0byBjb3JyZWN0aW9uIG1lc3NhZ2UgYW5kIHNldCAqLworICAgICAgICAvKiB0aGUgc2NhbGFibGUgd2lkdGggZnJvbSB0aGUgZGV2aWNlIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBGVF9UUkFDRTIoKCAiX2JkZl9wYXJzZV9nbHlwaHM6ICIgQUNNU0c5LCBsaW5lbm8gKSk7CisKKyAgICAgICAgZ2x5cGgtPnN3aWR0aCA9ICh1bnNpZ25lZCBzaG9ydClGVF9NdWxEaXYoCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5kd2lkdGgsIDcyMDAwTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKCBmb250LT5wb2ludF9zaXplICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5yZXNvbHV0aW9uX3ggKSApOworICAgICAgfQorCisgICAgICBwLT5mbGFncyB8PSBfQkRGX0RXSURUSDsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBFeHBlY3QgdGhlIEJCWCBmaWVsZCBuZXh0LiAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiQkJYIiwgMyApID09IDAgKQorICAgIHsKKyAgICAgIGlmICggISggcC0+ZmxhZ3MgJiBfQkRGX0VOQ09ESU5HICkgKQorICAgICAgICBnb3RvIE1pc3NpbmdfRW5jb2Rpbmc7CisKKyAgICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmcC0+bGlzdCwgKGNoYXIgKikiICsiLCBsaW5lLCBsaW5lbGVuICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBnbHlwaC0+YmJ4LndpZHRoICAgID0gX2JkZl9hdG91cyggcC0+bGlzdC5maWVsZFsxXSwgMCwgMTAgKTsKKyAgICAgIGdseXBoLT5iYnguaGVpZ2h0ICAgPSBfYmRmX2F0b3VzKCBwLT5saXN0LmZpZWxkWzJdLCAwLCAxMCApOworICAgICAgZ2x5cGgtPmJieC54X29mZnNldCA9IF9iZGZfYXRvcyggcC0+bGlzdC5maWVsZFszXSwgMCwgMTAgKTsKKyAgICAgIGdseXBoLT5iYngueV9vZmZzZXQgPSBfYmRmX2F0b3MoIHAtPmxpc3QuZmllbGRbNF0sIDAsIDEwICk7CisKKyAgICAgIC8qIEdlbmVyYXRlIHRoZSBhc2NlbnQgYW5kIGRlc2NlbnQgb2YgdGhlIGNoYXJhY3Rlci4gKi8KKyAgICAgIGdseXBoLT5iYnguYXNjZW50ICA9IChzaG9ydCkoIGdseXBoLT5iYnguaGVpZ2h0ICsgZ2x5cGgtPmJieC55X29mZnNldCApOworICAgICAgZ2x5cGgtPmJieC5kZXNjZW50ID0gKHNob3J0KSggLWdseXBoLT5iYngueV9vZmZzZXQgKTsKKworICAgICAgLyogRGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGZvbnQgYm91bmRpbmcgYm94IGFzIHRoZSBjaGFyYWN0ZXJzIGFyZSAqLworICAgICAgLyogbG9hZGVkIHNvIGNvcnJlY3Rpb25zIGNhbiBiZSBkb25lIGxhdGVyIGlmIGluZGljYXRlZC4gICAgICAgICAqLworICAgICAgcC0+bWF4YXMgICAgPSAoc2hvcnQpRlRfTUFYKCBnbHlwaC0+YmJ4LmFzY2VudCwgcC0+bWF4YXMgKTsKKyAgICAgIHAtPm1heGRzICAgID0gKHNob3J0KUZUX01BWCggZ2x5cGgtPmJieC5kZXNjZW50LCBwLT5tYXhkcyApOworCisgICAgICBwLT5yYmVhcmluZyA9IChzaG9ydCkoIGdseXBoLT5iYngud2lkdGggKyBnbHlwaC0+YmJ4Lnhfb2Zmc2V0ICk7CisKKyAgICAgIHAtPm1heHJiICAgID0gKHNob3J0KUZUX01BWCggcC0+cmJlYXJpbmcsIHAtPm1heHJiICk7CisgICAgICBwLT5taW5sYiAgICA9IChzaG9ydClGVF9NSU4oIGdseXBoLT5iYngueF9vZmZzZXQsIHAtPm1pbmxiICk7CisgICAgICBwLT5tYXhsYiAgICA9IChzaG9ydClGVF9NQVgoIGdseXBoLT5iYngueF9vZmZzZXQsIHAtPm1heGxiICk7CisKKyAgICAgIGlmICggISggcC0+ZmxhZ3MgJiBfQkRGX0RXSURUSCApICkKKyAgICAgIHsKKyAgICAgICAgLyogTWlzc2luZyBEV0lEVEggZmllbGQuICBFbWl0IGFuIGF1dG8gY29ycmVjdGlvbiBtZXNzYWdlIGFuZCBzZXQgKi8KKyAgICAgICAgLyogdGhlIGRldmljZSB3aWR0aCB0byB0aGUgZ2x5cGggd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgRlRfVFJBQ0UyKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEFDTVNHMTAsIGxpbmVubyApKTsKKyAgICAgICAgZ2x5cGgtPmR3aWR0aCA9IGdseXBoLT5iYngud2lkdGg7CisgICAgICB9CisKKyAgICAgIC8qIElmIHRoZSBCREZfQ09SUkVDVF9NRVRSSUNTIGZsYWcgaXMgc2V0LCB0aGVuIGFkanVzdCB0aGUgU1dJRFRIICovCisgICAgICAvKiB2YWx1ZSBpZiBuZWNlc3NhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBwLT5vcHRzLT5jb3JyZWN0X21ldHJpY3MgIT0gMCApCisgICAgICB7CisgICAgICAgIC8qIERldGVybWluZSB0aGUgcG9pbnQgc2l6ZSBvZiB0aGUgZ2x5cGguICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICBzdyA9ICh1bnNpZ25lZCBzaG9ydClGVF9NdWxEaXYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPmR3aWR0aCwgNzIwMDBMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKSggZm9udC0+cG9pbnRfc2l6ZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5yZXNvbHV0aW9uX3ggKSApOworCisKKyAgICAgICAgaWYgKCBzdyAhPSBnbHlwaC0+c3dpZHRoICkKKyAgICAgICAgeworICAgICAgICAgIGdseXBoLT5zd2lkdGggPSBzdzsKKworICAgICAgICAgIGlmICggcC0+Z2x5cGhfZW5jID09IC0xICkKKyAgICAgICAgICAgIF9iZGZfc2V0X2dseXBoX21vZGlmaWVkKCBmb250LT51bW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnVuZW5jb2RlZF91c2VkIC0gMSApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9iZGZfc2V0X2dseXBoX21vZGlmaWVkKCBmb250LT5ubW9kLCBnbHlwaC0+ZW5jb2RpbmcgKTsKKworICAgICAgICAgIHAtPmZsYWdzICAgICAgIHw9IF9CREZfU1dJRFRIX0FESjsKKyAgICAgICAgICBmb250LT5tb2RpZmllZCAgPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHAtPmZsYWdzIHw9IF9CREZfQkJYOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIEFuZCBmaW5hbGx5LCBnYXRoZXIgdXAgdGhlIGJpdG1hcC4gKi8KKyAgICBpZiAoIF9iZGZfc3RybmNtcCggbGluZSwgIkJJVE1BUCIsIDYgKSA9PSAwICkKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nICBiaXRtYXBfc2l6ZTsKKworCisgICAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9CQlggKSApCisgICAgICB7CisgICAgICAgIC8qIE1pc3NpbmcgQkJYIGZpZWxkLiAqLworICAgICAgICBGVF9FUlJPUigoICJfYmRmX3BhcnNlX2dseXBoczogIiBFUlJNU0cxLCBsaW5lbm8sICJCQlgiICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX0JieF9GaWVsZCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGJpdG1hcC4gKi8KKyAgICAgIGdseXBoLT5icHIgPSAoIGdseXBoLT5iYngud2lkdGggKiBwLT5mb250LT5icHAgKyA3ICkgPj4gMzsKKworICAgICAgYml0bWFwX3NpemUgPSBnbHlwaC0+YnByICogZ2x5cGgtPmJieC5oZWlnaHQ7CisgICAgICBpZiAoIGdseXBoLT5icHIgPiAweEZGRkZVIHx8IGJpdG1hcF9zaXplID4gMHhGRkZGVSApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEVSUk1TRzQsIGxpbmVubyApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggQmJ4X1Rvb19CaWcgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBnbHlwaC0+Ynl0ZXMgPSAodW5zaWduZWQgc2hvcnQpYml0bWFwX3NpemU7CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBnbHlwaC0+Yml0bWFwLCBnbHlwaC0+Ynl0ZXMgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcC0+cm93ICAgID0gMDsKKyAgICAgIHAtPmZsYWdzIHw9IF9CREZfQklUTUFQOworCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9nbHlwaHM6ICIgRVJSTVNHOSwgbGluZW5vICkpOworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICBnb3RvIEV4aXQ7CisKKyAgTWlzc2luZ19FbmNvZGluZzoKKyAgICAvKiBNaXNzaW5nIEVOQ09ESU5HIGZpZWxkLiAqLworICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2VfZ2x5cGhzOiAiIEVSUk1TRzEsIGxpbmVubywgIkVOQ09ESU5HIiApKTsKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX0VuY29kaW5nX0ZpZWxkICk7CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICYmICggcC0+ZmxhZ3MgJiBfQkRGX0dMWVBIICkgKQorICAgICAgRlRfRlJFRSggcC0+Z2x5cGhfbmFtZSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBMb2FkIHRoZSBmb250IHByb3BlcnRpZXMuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBfYmRmX3BhcnNlX3Byb3BlcnRpZXMoIGNoYXIqICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGluZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgY2FsbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgIGNsaWVudF9kYXRhICkKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgICAgICB2bGVuOworICAgIF9iZGZfbGluZV9mdW5jX3QqICBuZXh0OworICAgIF9iZGZfcGFyc2VfdCogICAgICBwOworICAgIGNoYXIqICAgICAgICAgICAgICBuYW1lOworICAgIGNoYXIqICAgICAgICAgICAgICB2YWx1ZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgbmJ1ZlsxMjhdOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIEZUX1VOVVNFRCggbGluZW5vICk7CisKKworICAgIG5leHQgPSAoX2JkZl9saW5lX2Z1bmNfdCAqKWNhbGxfZGF0YTsKKyAgICBwICAgID0gKF9iZGZfcGFyc2VfdCAqKSAgICBjbGllbnRfZGF0YTsKKworICAgIC8qIENoZWNrIGZvciB0aGUgZW5kIG9mIHRoZSBwcm9wZXJ0aWVzLiAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiRU5EUFJPUEVSVElFUyIsIDEzICkgPT0gMCApCisgICAgeworICAgICAgLyogSWYgdGhlIEZPTlRfQVNDRU5UIG9yIEZPTlRfREVTQ0VOVCBwcm9wZXJ0aWVzIGhhdmUgbm90IGJlZW4gICAgICAqLworICAgICAgLyogZW5jb3VudGVyZWQgeWV0LCB0aGVuIG1ha2Ugc3VyZSB0aGV5IGFyZSBhZGRlZCBhcyBwcm9wZXJ0aWVzIGFuZCAqLworICAgICAgLyogbWFrZSBzdXJlIHRoZXkgYXJlIHNldCBmcm9tIHRoZSBmb250IGJvdW5kaW5nIGJveCBpbmZvLiAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogVGhpcyBpcyAqYWx3YXlzKiBkb25lIHJlZ2FyZGxlc3Mgb2YgdGhlIG9wdGlvbnMsIGJlY2F1c2UgWDExICAgICAqLworICAgICAgLyogcmVxdWlyZXMgdGhlc2UgdHdvIGZpZWxkcyB0byBjb21waWxlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIHAtPmZvbnQsICJGT05UX0FTQ0VOVCIgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgcC0+Zm9udC0+Zm9udF9hc2NlbnQgPSBwLT5mb250LT5iYnguYXNjZW50OworICAgICAgICBmdF9zcHJpbnRmKCBuYnVmLCAiJWhkIiwgcC0+Zm9udC0+YmJ4LmFzY2VudCApOworICAgICAgICBlcnJvciA9IF9iZGZfYWRkX3Byb3BlcnR5KCBwLT5mb250LCAoY2hhciAqKSJGT05UX0FTQ0VOVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5idWYsIGxpbmVubyApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgRlRfVFJBQ0UyKCggIl9iZGZfcGFyc2VfcHJvcGVydGllczogIiBBQ01TRzEsIHAtPmZvbnQtPmJieC5hc2NlbnQgKSk7CisgICAgICAgIHAtPmZvbnQtPm1vZGlmaWVkID0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKCBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIHAtPmZvbnQsICJGT05UX0RFU0NFTlQiICkgPT0gMCApCisgICAgICB7CisgICAgICAgIHAtPmZvbnQtPmZvbnRfZGVzY2VudCA9IHAtPmZvbnQtPmJieC5kZXNjZW50OworICAgICAgICBmdF9zcHJpbnRmKCBuYnVmLCAiJWhkIiwgcC0+Zm9udC0+YmJ4LmRlc2NlbnQgKTsKKyAgICAgICAgZXJyb3IgPSBfYmRmX2FkZF9wcm9wZXJ0eSggcC0+Zm9udCwgKGNoYXIgKikiRk9OVF9ERVNDRU5UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ1ZiwgbGluZW5vICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBGVF9UUkFDRTIoKCAiX2JkZl9wYXJzZV9wcm9wZXJ0aWVzOiAiIEFDTVNHMiwgcC0+Zm9udC0+YmJ4LmRlc2NlbnQgKSk7CisgICAgICAgIHAtPmZvbnQtPm1vZGlmaWVkID0gMTsKKyAgICAgIH0KKworICAgICAgcC0+ZmxhZ3MgJj0gfl9CREZfUFJPUFM7CisgICAgICAqbmV4dCAgICAgPSBfYmRmX3BhcnNlX2dseXBoczsKKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIElnbm9yZSB0aGUgX1hGUkVFODZfR0xZUEhfUkFOR0VTIHByb3BlcnRpZXMuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJfWEZSRUU4Nl9HTFlQSF9SQU5HRVMiLCAyMSApID09IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogSGFuZGxlIENPTU1FTlQgZmllbGRzIGFuZCBwcm9wZXJ0aWVzIGluIGEgc3BlY2lhbCB3YXkgdG8gcHJlc2VydmUgKi8KKyAgICAvKiB0aGUgc3BhY2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiQ09NTUVOVCIsIDcgKSA9PSAwICkKKyAgICB7CisgICAgICBuYW1lID0gdmFsdWUgPSBsaW5lOworICAgICAgdmFsdWUgKz0gNzsKKyAgICAgIGlmICggKnZhbHVlICkKKyAgICAgICAgKnZhbHVlKysgPSAwOworICAgICAgZXJyb3IgPSBfYmRmX2FkZF9wcm9wZXJ0eSggcC0+Zm9udCwgbmFtZSwgdmFsdWUsIGxpbmVubyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoIF9iZGZfaXNfYXRvbSggbGluZSwgbGluZWxlbiwgJm5hbWUsICZ2YWx1ZSwgcC0+Zm9udCApICkKKyAgICB7CisgICAgICBlcnJvciA9IF9iZGZfYWRkX3Byb3BlcnR5KCBwLT5mb250LCBuYW1lLCB2YWx1ZSwgbGluZW5vICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBuYW1lID0gcC0+bGlzdC5maWVsZFswXTsKKworICAgICAgX2JkZl9saXN0X3NoaWZ0KCAmcC0+bGlzdCwgMSApOworICAgICAgdmFsdWUgPSBfYmRmX2xpc3Rfam9pbiggJnAtPmxpc3QsICcgJywgJnZsZW4gKTsKKworICAgICAgZXJyb3IgPSBfYmRmX2FkZF9wcm9wZXJ0eSggcC0+Zm9udCwgbmFtZSwgdmFsdWUsIGxpbmVubyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIExvYWQgdGhlIGZvbnQgaGVhZGVyLiAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgX2JkZl9wYXJzZV9zdGFydCggY2hhciogICAgICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGluZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICBjYWxsX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgIGNsaWVudF9kYXRhICkKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgICAgICBzbGVuOworICAgIF9iZGZfbGluZV9mdW5jX3QqICBuZXh0OworICAgIF9iZGZfcGFyc2VfdCogICAgICBwOworICAgIGJkZl9mb250X3QqICAgICAgICBmb250OworICAgIGNoYXIgICAgICAgICAgICAgICAqczsKKworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgPSBOVUxMOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisKKyAgICBGVF9VTlVTRUQoIGxpbmVubyApOyAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlICovCisKKworICAgIG5leHQgPSAoX2JkZl9saW5lX2Z1bmNfdCAqKWNhbGxfZGF0YTsKKyAgICBwICAgID0gKF9iZGZfcGFyc2VfdCAqKSAgICBjbGllbnRfZGF0YTsKKworICAgIGlmICggcC0+Zm9udCApCisgICAgICBtZW1vcnkgPSBwLT5mb250LT5tZW1vcnk7CisKKyAgICAvKiBDaGVjayBmb3IgYSBjb21tZW50LiAgVGhpcyBpcyBkb25lIHRvIGhhbmRsZSB0aG9zZSBmb250cyB0aGF0IGhhdmUgKi8KKyAgICAvKiBjb21tZW50cyBiZWZvcmUgdGhlIFNUQVJURk9OVCBsaW5lIGZvciBzb21lIHJlYXNvbi4gICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIF9iZGZfc3RybmNtcCggbGluZSwgIkNPTU1FTlQiLCA3ICkgPT0gMCApCisgICAgeworICAgICAgaWYgKCBwLT5vcHRzLT5rZWVwX2NvbW1lbnRzICE9IDAgJiYgcC0+Zm9udCAhPSAwICkKKyAgICAgIHsKKyAgICAgICAgbGluZWxlbiAtPSA3OworCisgICAgICAgIHMgPSBsaW5lICsgNzsKKyAgICAgICAgaWYgKCAqcyAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIHMrKzsKKyAgICAgICAgICBsaW5lbGVuLS07CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IF9iZGZfYWRkX2NvbW1lbnQoIHAtPmZvbnQsIHMsIGxpbmVsZW4gKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAvKiBoZXJlIGZvbnQgaXMgbm90IGRlZmluZWQhICovCisgICAgICB9CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9TVEFSVCApICkKKyAgICB7CisgICAgICBtZW1vcnkgPSBwLT5tZW1vcnk7CisKKyAgICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiU1RBUlRGT05UIiwgOSApICE9IDAgKQorICAgICAgeworICAgICAgICAvKiB3ZSBkb24ndCBlbWl0IGFuIGVycm9yIG1lc3NhZ2Ugc2luY2UgdGhpcyBjb2RlIGdldHMgKi8KKyAgICAgICAgLyogZXhwbGljaXRseSBjYXVnaHQgb25lIGxldmVsIGhpZ2hlciAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE1pc3NpbmdfU3RhcnRmb250X0ZpZWxkICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgcC0+ZmxhZ3MgPSBfQkRGX1NUQVJUOworICAgICAgZm9udCA9IHAtPmZvbnQgPSAwOworCisgICAgICBpZiAoIEZUX05FVyggZm9udCApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgcC0+Zm9udCA9IGZvbnQ7CisKKyAgICAgIGZvbnQtPm1lbW9yeSA9IHAtPm1lbW9yeTsKKyAgICAgIHAtPm1lbW9yeSAgICA9IDA7CisKKyAgICAgIHsgLyogc2V0dXAgKi8KKyAgICAgICAgc2l6ZV90ICAgICAgICAgICBpOworICAgICAgICBiZGZfcHJvcGVydHlfdCogIHByb3A7CisKKworICAgICAgICBlcnJvciA9IGhhc2hfaW5pdCggJihmb250LT5wcm9wdGJsKSwgbWVtb3J5ICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgZm9yICggaSA9IDAsIHByb3AgPSAoYmRmX3Byb3BlcnR5X3QqKV9iZGZfcHJvcGVydGllczsKKyAgICAgICAgICAgICAgaSA8IF9udW1fYmRmX3Byb3BlcnRpZXM7IGkrKywgcHJvcCsrICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gaGFzaF9pbnNlcnQoIHByb3AtPm5hbWUsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihmb250LT5wcm9wdGJsKSwgbWVtb3J5ICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBGVF9BTExPQyggcC0+Zm9udC0+aW50ZXJuYWwsIHNpemVvZiAoIGhhc2h0YWJsZSApICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBlcnJvciA9IGhhc2hfaW5pdCggKGhhc2h0YWJsZSAqKXAtPmZvbnQtPmludGVybmFsLG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIHAtPmZvbnQtPnNwYWNpbmcgICAgICA9IHAtPm9wdHMtPmZvbnRfc3BhY2luZzsKKyAgICAgIHAtPmZvbnQtPmRlZmF1bHRfY2hhciA9IC0xOworCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHRoZSBzdGFydCBvZiB0aGUgcHJvcGVydGllcy4gKi8KKyAgICBpZiAoIF9iZGZfc3RybmNtcCggbGluZSwgIlNUQVJUUFJPUEVSVElFUyIsIDE1ICkgPT0gMCApCisgICAgeworICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIF9CREZfRk9OVF9CQlggKSApCisgICAgICB7CisgICAgICAgIC8qIE1pc3NpbmcgdGhlIEZPTlRCT1VORElOR0JPWCBmaWVsZC4gKi8KKyAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9zdGFydDogIiBFUlJNU0cxLCBsaW5lbm8sICJGT05UQk9VTkRJTkdCT1giICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX0ZvbnRib3VuZGluZ2JveF9GaWVsZCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmcC0+bGlzdCwgKGNoYXIgKikiICsiLCBsaW5lLCBsaW5lbGVuICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgLyogYXQgdGhpcyBwb2ludCwgYHAtPmZvbnQnIGNhbid0IGJlIE5VTEwgKi8KKyAgICAgIHAtPmNudCA9IHAtPmZvbnQtPnByb3BzX3NpemUgPSBfYmRmX2F0b3VsKCBwLT5saXN0LmZpZWxkWzFdLCAwLCAxMCApOworCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggcC0+Zm9udC0+cHJvcHMsIHAtPmNudCApICkKKyAgICAgIHsKKyAgICAgICAgcC0+Zm9udC0+cHJvcHNfc2l6ZSA9IDA7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9QUk9QUzsKKyAgICAgICpuZXh0ICAgICA9IF9iZGZfcGFyc2VfcHJvcGVydGllczsKKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIENoZWNrIGZvciB0aGUgRk9OVEJPVU5ESU5HQk9YIGZpZWxkLiAqLworICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiRk9OVEJPVU5ESU5HQk9YIiwgMTUgKSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoICEoIHAtPmZsYWdzICYgX0JERl9TSVpFICkgKQorICAgICAgeworICAgICAgICAvKiBNaXNzaW5nIHRoZSBTSVpFIGZpZWxkLiAqLworICAgICAgICBGVF9FUlJPUigoICJfYmRmX3BhcnNlX3N0YXJ0OiAiIEVSUk1TRzEsIGxpbmVubywgIlNJWkUiICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX1NpemVfRmllbGQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBlcnJvciA9IF9iZGZfbGlzdF9zcGxpdCggJnAtPmxpc3QsIChjaGFyICopIiArIiwgbGluZSwgbGluZWxlbiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcC0+Zm9udC0+YmJ4LndpZHRoICA9IF9iZGZfYXRvdXMoIHAtPmxpc3QuZmllbGRbMV0sIDAsIDEwICk7CisgICAgICBwLT5mb250LT5iYnguaGVpZ2h0ID0gX2JkZl9hdG91cyggcC0+bGlzdC5maWVsZFsyXSwgMCwgMTAgKTsKKworICAgICAgcC0+Zm9udC0+YmJ4Lnhfb2Zmc2V0ID0gX2JkZl9hdG9zKCBwLT5saXN0LmZpZWxkWzNdLCAwLCAxMCApOworICAgICAgcC0+Zm9udC0+YmJ4Lnlfb2Zmc2V0ID0gX2JkZl9hdG9zKCBwLT5saXN0LmZpZWxkWzRdLCAwLCAxMCApOworCisgICAgICBwLT5mb250LT5iYnguYXNjZW50ICA9IChzaG9ydCkoIHAtPmZvbnQtPmJieC5oZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mb250LT5iYngueV9vZmZzZXQgKTsKKworICAgICAgcC0+Zm9udC0+YmJ4LmRlc2NlbnQgPSAoc2hvcnQpKCAtcC0+Zm9udC0+YmJ4Lnlfb2Zmc2V0ICk7CisKKyAgICAgIHAtPmZsYWdzIHw9IF9CREZfRk9OVF9CQlg7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBUaGUgbmV4dCB0aGluZyB0byBjaGVjayBmb3IgaXMgdGhlIEZPTlQgZmllbGQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJGT05UIiwgNCApID09IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmcC0+bGlzdCwgKGNoYXIgKikiICsiLCBsaW5lLCBsaW5lbGVuICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgX2JkZl9saXN0X3NoaWZ0KCAmcC0+bGlzdCwgMSApOworCisgICAgICBzID0gX2JkZl9saXN0X2pvaW4oICZwLT5saXN0LCAnICcsICZzbGVuICk7CisKKyAgICAgIGlmICggIXMgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJfYmRmX3BhcnNlX3N0YXJ0OiAiIEVSUk1TRzgsIGxpbmVubywgIkZPTlQiICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogQWxsb3dpbmcgbXVsdGlwbGUgYEZPTlQnIGxpbmVzICh3aGljaCBpcyBpbnZhbGlkKSBkb2Vzbid0IGh1cnQuLi4gKi8KKyAgICAgIEZUX0ZSRUUoIHAtPmZvbnQtPm5hbWUgKTsKKworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHAtPmZvbnQtPm5hbWUsIHNsZW4gKyAxICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9NRU1fQ09QWSggcC0+Zm9udC0+bmFtZSwgcywgc2xlbiArIDEgKTsKKworICAgICAgLyogSWYgdGhlIGZvbnQgbmFtZSBpcyBhbiBYTEZEIG5hbWUsIHNldCB0aGUgc3BhY2luZyB0byB0aGUgb25lIGluICAqLworICAgICAgLyogdGhlIGZvbnQgbmFtZS4gIElmIHRoZXJlIGlzIG5vIHNwYWNpbmcgZmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0LiAqLworICAgICAgZXJyb3IgPSBfYmRmX3NldF9kZWZhdWx0X3NwYWNpbmcoIHAtPmZvbnQsIHAtPm9wdHMsIGxpbmVubyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9GT05UX05BTUU7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgdGhlIFNJWkUgZmllbGQuICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJTSVpFIiwgNCApID09IDAgKQorICAgIHsKKyAgICAgIGlmICggISggcC0+ZmxhZ3MgJiBfQkRGX0ZPTlRfTkFNRSApICkKKyAgICAgIHsKKyAgICAgICAgLyogTWlzc2luZyB0aGUgRk9OVCBmaWVsZC4gKi8KKyAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9zdGFydDogIiBFUlJNU0cxLCBsaW5lbm8sICJGT05UIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWlzc2luZ19Gb250X0ZpZWxkICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAtPmZvbnQtPnBvaW50X3NpemUgICA9IF9iZGZfYXRvdWwoIHAtPmxpc3QuZmllbGRbMV0sIDAsIDEwICk7CisgICAgICBwLT5mb250LT5yZXNvbHV0aW9uX3ggPSBfYmRmX2F0b3VsKCBwLT5saXN0LmZpZWxkWzJdLCAwLCAxMCApOworICAgICAgcC0+Zm9udC0+cmVzb2x1dGlvbl95ID0gX2JkZl9hdG91bCggcC0+bGlzdC5maWVsZFszXSwgMCwgMTAgKTsKKworICAgICAgLyogQ2hlY2sgZm9yIHRoZSBiaXRzIHBlciBwaXhlbCBmaWVsZC4gKi8KKyAgICAgIGlmICggcC0+bGlzdC51c2VkID09IDUgKQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBiaXRjb3VudCwgaSwgc2hpZnQ7CisKKworICAgICAgICBwLT5mb250LT5icHAgPSAodW5zaWduZWQgc2hvcnQpX2JkZl9hdG9zKCBwLT5saXN0LmZpZWxkWzRdLCAwLCAxMCApOworCisgICAgICAgIC8qIE9ubHkgdmFsdWVzIDEsIDIsIDQsIDggYXJlIGFsbG93ZWQuICovCisgICAgICAgIHNoaWZ0ID0gcC0+Zm9udC0+YnBwOworICAgICAgICBiaXRjb3VudCA9IDA7CisgICAgICAgIGZvciAoIGkgPSAwOyBzaGlmdCA+IDA7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHNoaWZ0ICYgMSApCisgICAgICAgICAgICBiaXRjb3VudCA9IGk7CisgICAgICAgICAgc2hpZnQgPj49IDE7CisgICAgICAgIH0KKworICAgICAgICBzaGlmdCA9ICh1bnNpZ25lZCBzaG9ydCkoICggYml0Y291bnQgPiAzICkgPyA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggMVUgPDwgYml0Y291bnQgKSApOworCisgICAgICAgIGlmICggcC0+Zm9udC0+YnBwID4gc2hpZnQgfHwgcC0+Zm9udC0+YnBwICE9IHNoaWZ0ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHNlbGVjdCBuZXh0IGhpZ2hlciB2YWx1ZSAqLworICAgICAgICAgIHAtPmZvbnQtPmJwcCA9ICh1bnNpZ25lZCBzaG9ydCkoIHNoaWZ0IDw8IDEgKTsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiX2JkZl9wYXJzZV9zdGFydDogIiBBQ01TRzExLCBwLT5mb250LT5icHAgKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcC0+Zm9udC0+YnBwID0gMTsKKworICAgICAgcC0+ZmxhZ3MgfD0gX0JERl9TSVpFOworCisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHRoZSBDSEFSUyBmaWVsZCAtLSBmb250IHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsICovCisgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJDSEFSUyIsIDUgKSA9PSAwICkKKyAgICB7CisgICAgICBjaGFyICBuYnVmWzEyOF07CisKKworICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIF9CREZfRk9OVF9CQlggKSApCisgICAgICB7CisgICAgICAgIC8qIE1pc3NpbmcgdGhlIEZPTlRCT1VORElOR0JPWCBmaWVsZC4gKi8KKyAgICAgICAgRlRfRVJST1IoKCAiX2JkZl9wYXJzZV9zdGFydDogIiBFUlJNU0cxLCBsaW5lbm8sICJGT05UQk9VTkRJTkdCT1giICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX0ZvbnRib3VuZGluZ2JveF9GaWVsZCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIEFkZCB0aGUgdHdvIHN0YW5kYXJkIFgxMSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSByZXF1aXJlZCAqLworICAgICAgLyogZm9yIGNvbXBpbGluZyBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBwLT5mb250LT5mb250X2FzY2VudCA9IHAtPmZvbnQtPmJieC5hc2NlbnQ7CisgICAgICBmdF9zcHJpbnRmKCBuYnVmLCAiJWhkIiwgcC0+Zm9udC0+YmJ4LmFzY2VudCApOworICAgICAgZXJyb3IgPSBfYmRmX2FkZF9wcm9wZXJ0eSggcC0+Zm9udCwgKGNoYXIgKikiRk9OVF9BU0NFTlQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ1ZiwgbGluZW5vICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgRlRfVFJBQ0UyKCggIl9iZGZfcGFyc2VfcHJvcGVydGllczogIiBBQ01TRzEsIHAtPmZvbnQtPmJieC5hc2NlbnQgKSk7CisKKyAgICAgIHAtPmZvbnQtPmZvbnRfZGVzY2VudCA9IHAtPmZvbnQtPmJieC5kZXNjZW50OworICAgICAgZnRfc3ByaW50ZiggbmJ1ZiwgIiVoZCIsIHAtPmZvbnQtPmJieC5kZXNjZW50ICk7CisgICAgICBlcnJvciA9IF9iZGZfYWRkX3Byb3BlcnR5KCBwLT5mb250LCAoY2hhciAqKSJGT05UX0RFU0NFTlQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ1ZiwgbGluZW5vICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgRlRfVFJBQ0UyKCggIl9iZGZfcGFyc2VfcHJvcGVydGllczogIiBBQ01TRzIsIHAtPmZvbnQtPmJieC5kZXNjZW50ICkpOworCisgICAgICBwLT5mb250LT5tb2RpZmllZCA9IDE7CisKKyAgICAgICpuZXh0ID0gX2JkZl9wYXJzZV9nbHlwaHM7CisKKyAgICAgIC8qIEEgc3BlY2lhbCByZXR1cm4gdmFsdWUuICovCisgICAgICBlcnJvciA9IC0xOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIEZUX0VSUk9SKCggIl9iZGZfcGFyc2Vfc3RhcnQ6ICIgRVJSTVNHOSwgbGluZW5vICkpOworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGJkZl9sb2FkX2ZvbnQoIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgICBleHRtZW1vcnksCisgICAgICAgICAgICAgICAgIGJkZl9vcHRpb25zX3QqICBvcHRzLAorICAgICAgICAgICAgICAgICBiZGZfZm9udF90KiAgICAqZm9udCApCisgIHsKKyAgICB1bnNpZ25lZCBsb25nICBsaW5lbm8gPSAwOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgX2JkZl9wYXJzZV90ICAgKnAgICAgID0gTlVMTDsKKworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZXh0bWVtb3J5OyAvKiBuZWVkZWQgZm9yIEZUX05FVyAqLworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoIEZUX05FVyggcCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIG1lbW9yeSAgICA9IE5VTEw7CisgICAgcC0+b3B0cyAgID0gKGJkZl9vcHRpb25zX3QqKSggKCBvcHRzICE9IDAgKSA/IG9wdHMgOiAmX2JkZl9vcHRzICk7CisgICAgcC0+bWlubGIgID0gMzI3Njc7CisgICAgcC0+bWVtb3J5ID0gZXh0bWVtb3J5OyAgLyogb25seSBkdXJpbmcgZm9udCBjcmVhdGlvbiAqLworCisgICAgX2JkZl9saXN0X2luaXQoICZwLT5saXN0LCBleHRtZW1vcnkgKTsKKworICAgIGVycm9yID0gX2JkZl9yZWFkc3RyZWFtKCBzdHJlYW0sIF9iZGZfcGFyc2Vfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopcCwgJmxpbmVubyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgaWYgKCBwLT5mb250ICE9IDAgKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSBmb250IGlzIG5vdCBwcm9wb3J0aW9uYWwsIHNldCB0aGUgZm9udCdzIG1vbm93aWR0aCAqLworICAgICAgLyogZmllbGQgdG8gdGhlIHdpZHRoIG9mIHRoZSBmb250IGJvdW5kaW5nIGJveC4gICAgICAgICAgICAgICovCisKKyAgICAgIGlmICggcC0+Zm9udC0+c3BhY2luZyAhPSBCREZfUFJPUE9SVElPTkFMICkKKyAgICAgICAgcC0+Zm9udC0+bW9ub3dpZHRoID0gcC0+Zm9udC0+YmJ4LndpZHRoOworCisgICAgICAvKiBJZiB0aGUgbnVtYmVyIG9mIGdseXBocyBsb2FkZWQgaXMgbm90IHRoYXQgb2YgdGhlIG9yaWdpbmFsIGNvdW50LCAqLworICAgICAgLyogaW5kaWNhdGUgdGhlIGRpZmZlcmVuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggcC0+Y250ICE9IHAtPmZvbnQtPmdseXBoc191c2VkICsgcC0+Zm9udC0+dW5lbmNvZGVkX3VzZWQgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTIoKCAiYmRmX2xvYWRfZm9udDogIiBBQ01TRzE1LCBwLT5jbnQsCisgICAgICAgICAgICAgICAgICAgIHAtPmZvbnQtPmdseXBoc191c2VkICsgcC0+Zm9udC0+dW5lbmNvZGVkX3VzZWQgKSk7CisgICAgICAgIHAtPmZvbnQtPm1vZGlmaWVkID0gMTsKKyAgICAgIH0KKworICAgICAgLyogT25jZSB0aGUgZm9udCBoYXMgYmVlbiBsb2FkZWQsIGFkanVzdCB0aGUgb3ZlcmFsbCBmb250IG1ldHJpY3MgaWYgKi8KKyAgICAgIC8qIG5lY2Vzc2FyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHAtPm9wdHMtPmNvcnJlY3RfbWV0cmljcyAhPSAwICYmCisgICAgICAgICAgICggcC0+Zm9udC0+Z2x5cGhzX3VzZWQgPiAwIHx8IHAtPmZvbnQtPnVuZW5jb2RlZF91c2VkID4gMCApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBwLT5tYXhyYiAtIHAtPm1pbmxiICE9IHAtPmZvbnQtPmJieC53aWR0aCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYmRmX2xvYWRfZm9udDogIiBBQ01TRzMsCisgICAgICAgICAgICAgICAgICAgICAgcC0+Zm9udC0+YmJ4LndpZHRoLCBwLT5tYXhyYiAtIHAtPm1pbmxiICkpOworICAgICAgICAgIHAtPmZvbnQtPmJieC53aWR0aCA9ICh1bnNpZ25lZCBzaG9ydCkoIHAtPm1heHJiIC0gcC0+bWlubGIgKTsKKyAgICAgICAgICBwLT5mb250LT5tb2RpZmllZCAgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwLT5mb250LT5iYngueF9vZmZzZXQgIT0gcC0+bWlubGIgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggImJkZl9sb2FkX2ZvbnQ6ICIgQUNNU0c0LAorICAgICAgICAgICAgICAgICAgICAgIHAtPmZvbnQtPmJieC54X29mZnNldCwgcC0+bWlubGIgKSk7CisgICAgICAgICAgcC0+Zm9udC0+YmJ4Lnhfb2Zmc2V0ID0gcC0+bWlubGI7CisgICAgICAgICAgcC0+Zm9udC0+bW9kaWZpZWQgICAgID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcC0+Zm9udC0+YmJ4LmFzY2VudCAhPSBwLT5tYXhhcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYmRmX2xvYWRfZm9udDogIiBBQ01TRzUsCisgICAgICAgICAgICAgICAgICAgICAgcC0+Zm9udC0+YmJ4LmFzY2VudCwgcC0+bWF4YXMgKSk7CisgICAgICAgICAgcC0+Zm9udC0+YmJ4LmFzY2VudCA9IHAtPm1heGFzOworICAgICAgICAgIHAtPmZvbnQtPm1vZGlmaWVkICAgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwLT5mb250LT5iYnguZGVzY2VudCAhPSBwLT5tYXhkcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYmRmX2xvYWRfZm9udDogIiBBQ01TRzYsCisgICAgICAgICAgICAgICAgICAgICAgcC0+Zm9udC0+YmJ4LmRlc2NlbnQsIHAtPm1heGRzICkpOworICAgICAgICAgIHAtPmZvbnQtPmJieC5kZXNjZW50ICA9IHAtPm1heGRzOworICAgICAgICAgIHAtPmZvbnQtPmJieC55X29mZnNldCA9IChzaG9ydCkoIC1wLT5tYXhkcyApOworICAgICAgICAgIHAtPmZvbnQtPm1vZGlmaWVkICAgICA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHAtPm1heGFzICsgcC0+bWF4ZHMgIT0gcC0+Zm9udC0+YmJ4LmhlaWdodCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYmRmX2xvYWRfZm9udDogIiBBQ01TRzcsCisgICAgICAgICAgICAgICAgICAgICAgcC0+Zm9udC0+YmJ4LmhlaWdodCwgcC0+bWF4YXMgKyBwLT5tYXhkcyApKTsKKyAgICAgICAgICBwLT5mb250LT5iYnguaGVpZ2h0ID0gKHVuc2lnbmVkIHNob3J0KSggcC0+bWF4YXMgKyBwLT5tYXhkcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwLT5mbGFncyAmIF9CREZfU1dJRFRIX0FESiApCisgICAgICAgICAgRlRfVFJBQ0UyKCggImJkZl9sb2FkX2ZvbnQ6ICIgQUNNU0c4ICkpOworICAgICAgfQorICAgIH0KKworICAgIGlmICggcC0+ZmxhZ3MgJiBfQkRGX1NUQVJUICkKKyAgICB7CisgICAgICAvKiBUaGUgRU5ERk9OVCBmaWVsZCB3YXMgbmV2ZXIgcmVhY2hlZCBvciBkaWQgbm90IGV4aXN0LiAqLworICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIF9CREZfR0xZUEhTICkgKQorICAgICAgeworICAgICAgICAvKiBFcnJvciBoYXBwZW5lZCB3aGlsZSBwYXJzaW5nIGhlYWRlci4gKi8KKyAgICAgICAgRlRfRVJST1IoKCAiYmRmX2xvYWRfZm9udDogIiBFUlJNU0cyLCBsaW5lbm8gKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIENvcnJ1cHRlZF9Gb250X0hlYWRlciApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEVycm9yIGhhcHBlbmVkIHdoZW4gcGFyc2luZyBnbHlwaHMuICovCisgICAgICAgIEZUX0VSUk9SKCggImJkZl9sb2FkX2ZvbnQ6ICIgRVJSTVNHMywgbGluZW5vICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBDb3JydXB0ZWRfRm9udF9HbHlwaHMgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICAgIGlmICggcC0+Zm9udCAhPSAwICkKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgdGhlIGNvbW1lbnRzIGFyZSBOVUxMIHRlcm1pbmF0ZWQgaWYgdGhleSBleGlzdC4gKi8KKyAgICAgIG1lbW9yeSA9IHAtPmZvbnQtPm1lbW9yeTsKKworICAgICAgaWYgKCBwLT5mb250LT5jb21tZW50c19sZW4gPiAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggcC0+Zm9udC0+Y29tbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZvbnQtPmNvbW1lbnRzX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+Zm9udC0+Y29tbWVudHNfbGVuICsgMSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgcC0+Zm9udC0+Y29tbWVudHNbcC0+Zm9udC0+Y29tbWVudHNfbGVuXSA9IDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCBlcnJvciA9PSBGVF9FcnJfT2sgKQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgKmZvbnQgPSBwLT5mb250OworCisgIEV4aXQ6CisgICAgaWYgKCBwICkKKyAgICB7CisgICAgICBfYmRmX2xpc3RfZG9uZSggJnAtPmxpc3QgKTsKKworICAgICAgbWVtb3J5ID0gZXh0bWVtb3J5OworCisgICAgICBGVF9GUkVFKCBwICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgYmRmX2ZyZWVfZm9udCggcC0+Zm9udCApOworCisgICAgbWVtb3J5ID0gZXh0bWVtb3J5OworCisgICAgRlRfRlJFRSggcC0+Zm9udCApOworCisgICAgZ290byBFeGl0OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBiZGZfZnJlZV9mb250KCBiZGZfZm9udF90KiAgZm9udCApCisgIHsKKyAgICBiZGZfcHJvcGVydHlfdCogIHByb3A7CisgICAgdW5zaWduZWQgbG9uZyAgICBpOworICAgIGJkZl9nbHlwaF90KiAgICAgZ2x5cGhzOworICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5OworCisKKyAgICBpZiAoIGZvbnQgPT0gMCApCisgICAgICByZXR1cm47CisKKyAgICBtZW1vcnkgPSBmb250LT5tZW1vcnk7CisKKyAgICBGVF9GUkVFKCBmb250LT5uYW1lICk7CisKKyAgICAvKiBGcmVlIHVwIHRoZSBpbnRlcm5hbCBoYXNoIHRhYmxlIG9mIHByb3BlcnR5IG5hbWVzLiAqLworICAgIGlmICggZm9udC0+aW50ZXJuYWwgKQorICAgIHsKKyAgICAgIGhhc2hfZnJlZSggKGhhc2h0YWJsZSAqKWZvbnQtPmludGVybmFsLCBtZW1vcnkgKTsKKyAgICAgIEZUX0ZSRUUoIGZvbnQtPmludGVybmFsICk7CisgICAgfQorCisgICAgLyogRnJlZSB1cCB0aGUgY29tbWVudCBpbmZvLiAqLworICAgIEZUX0ZSRUUoIGZvbnQtPmNvbW1lbnRzICk7CisKKyAgICAvKiBGcmVlIHVwIHRoZSBwcm9wZXJ0aWVzLiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgZm9udC0+cHJvcHNfc2l6ZTsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIGZvbnQtPnByb3BzW2ldLmZvcm1hdCA9PSBCREZfQVRPTSApCisgICAgICAgIEZUX0ZSRUUoIGZvbnQtPnByb3BzW2ldLnZhbHVlLmF0b20gKTsKKyAgICB9CisKKyAgICBGVF9GUkVFKCBmb250LT5wcm9wcyApOworCisgICAgLyogRnJlZSB1cCB0aGUgY2hhcmFjdGVyIGluZm8uICovCisgICAgZm9yICggaSA9IDAsIGdseXBocyA9IGZvbnQtPmdseXBoczsKKyAgICAgICAgICBpIDwgZm9udC0+Z2x5cGhzX3VzZWQ7IGkrKywgZ2x5cGhzKysgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGdseXBocy0+bmFtZSApOworICAgICAgRlRfRlJFRSggZ2x5cGhzLT5iaXRtYXAgKTsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMCwgZ2x5cGhzID0gZm9udC0+dW5lbmNvZGVkOyBpIDwgZm9udC0+dW5lbmNvZGVkX3VzZWQ7CisgICAgICAgICAgaSsrLCBnbHlwaHMrKyApCisgICAgeworICAgICAgRlRfRlJFRSggZ2x5cGhzLT5uYW1lICk7CisgICAgICBGVF9GUkVFKCBnbHlwaHMtPmJpdG1hcCApOworICAgIH0KKworICAgIEZUX0ZSRUUoIGZvbnQtPmdseXBocyApOworICAgIEZUX0ZSRUUoIGZvbnQtPnVuZW5jb2RlZCApOworCisgICAgLyogRnJlZSB1cCB0aGUgb3ZlcmZsb3cgc3RvcmFnZSBpZiBpdCB3YXMgdXNlZC4gKi8KKyAgICBmb3IgKCBpID0gMCwgZ2x5cGhzID0gZm9udC0+b3ZlcmZsb3cuZ2x5cGhzOworICAgICAgICAgIGkgPCBmb250LT5vdmVyZmxvdy5nbHlwaHNfdXNlZDsgaSsrLCBnbHlwaHMrKyApCisgICAgeworICAgICAgRlRfRlJFRSggZ2x5cGhzLT5uYW1lICk7CisgICAgICBGVF9GUkVFKCBnbHlwaHMtPmJpdG1hcCApOworICAgIH0KKworICAgIEZUX0ZSRUUoIGZvbnQtPm92ZXJmbG93LmdseXBocyApOworCisgICAgLyogYmRmX2NsZWFudXAgKi8KKyAgICBoYXNoX2ZyZWUoICYoZm9udC0+cHJvcHRibCksIG1lbW9yeSApOworCisgICAgLyogRnJlZSB1cCB0aGUgdXNlciBkZWZpbmVkIHByb3BlcnRpZXMuICovCisgICAgZm9yICggcHJvcCA9IGZvbnQtPnVzZXJfcHJvcHMsIGkgPSAwOworICAgICAgICAgIGkgPCBmb250LT5udXNlcl9wcm9wczsgaSsrLCBwcm9wKysgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIHByb3AtPm5hbWUgKTsKKyAgICAgIGlmICggcHJvcC0+Zm9ybWF0ID09IEJERl9BVE9NICkKKyAgICAgICAgRlRfRlJFRSggcHJvcC0+dmFsdWUuYXRvbSApOworICAgIH0KKworICAgIEZUX0ZSRUUoIGZvbnQtPnVzZXJfcHJvcHMgKTsKKworICAgIC8qIEZSRUUoIGZvbnQgKTsgKi8gLyogWFhYIEZpeG1lICovCisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggYmRmX3Byb3BlcnR5X3QgKiApCisgIGJkZl9nZXRfZm9udF9wcm9wZXJ0eSggYmRmX2ZvbnRfdCogIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG5hbWUgKQorICB7CisgICAgaGFzaG5vZGUgIGhuOworCisKKyAgICBpZiAoIGZvbnQgPT0gMCB8fCBmb250LT5wcm9wc19zaXplID09IDAgfHwgbmFtZSA9PSAwIHx8ICpuYW1lID09IDAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBobiA9IGhhc2hfbG9va3VwKCBuYW1lLCAoaGFzaHRhYmxlICopZm9udC0+aW50ZXJuYWwgKTsKKworICAgIHJldHVybiBobiA/ICggZm9udC0+cHJvcHMgKyBobi0+ZGF0YSApIDogMDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9iZGYvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9iZGYvbW9kdWxlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDZhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2JkZi9tb2R1bGUubWsKQEAgLTAsMCArMSwzNCBAQAorIworIyBGcmVlVHlwZSAyIEJERiBtb2R1bGUgZGVmaW5pdGlvbgorIworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDA2IGJ5CisjIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBCREZfRFJJVkVSCisKK2RlZmluZSBCREZfRFJJVkVSCiskKE9QRU5fRFJJVkVSKSBGVF9Ecml2ZXJfQ2xhc3NSZWMsIGJkZl9kcml2ZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKWJkZiAgICAgICAkKEVDSE9fRFJJVkVSX0RFU0MpYmRmIGJpdG1hcCBmb250cyQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2JkZi9ydWxlcy5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvYmRmL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZGQ3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2JkZi9ydWxlcy5tawpAQCAtMCwwICsxLDg0IEBACisjCisjIEZyZWVUeXBlIDIgYmRmIGRyaXZlciBjb25maWd1cmF0aW9uIHJ1bGVzCisjCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDggYnkKKyMgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKworCisKKworIyBiZGYgZHJpdmVyIGRpcmVjdG9yeQorIworQkRGX0RJUiA6PSAkKFNSQ19ESVIpL2JkZgorCisKK0JERl9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChCREZfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgYmRmIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworQkRGX0RSVl9TUkMgOj0gJChCREZfRElSKS9iZGZsaWIuYyBcCisgICAgICAgICAgICAgICAkKEJERl9ESVIpL2JkZmRyaXZyLmMKKworCisjIGJkZiBkcml2ZXIgaGVhZGVycworIworQkRGX0RSVl9IIDo9ICQoQkRGX0RJUikvYmRmLmggXAorICAgICAgICAgICAgICQoQkRGX0RJUikvYmRmZHJpdnIuaCBcCisgICAgICAgICAgICAgJChCREZfRElSKS9iZGZlcnJvci5oCisKKyMgYmRmIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBCREZfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzCisjICAgQkRGX0RSVl9PQkpfUyBpcyB1c2VkIGR1cmluZyBgc2luZ2xlJyBidWlsZHMKKyMKK0JERl9EUlZfT0JKX00gOj0gJChCREZfRFJWX1NSQzokKEJERl9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitCREZfRFJWX09CSl9TIDo9ICQoT0JKX0RJUikvYmRmLiRPCisKKyMgYmRmIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitCREZfRFJWX1NSQ19TIDo9ICQoQkRGX0RJUikvYmRmLmMKKworCisjIGJkZiBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKEJERl9EUlZfT0JKX1MpOiAkKEJERl9EUlZfU1JDX1MpICQoQkRGX0RSVl9TUkMpICQoRlJFRVRZUEVfSCkgJChCREZfRFJWX0gpCisJJChCREZfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoQkRGX0RSVl9TUkNfUykpCisKKworIyBiZGYgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKEJERl9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoQkRGX0RSVl9IKQorCSQoQkRGX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChCREZfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKEJERl9EUlZfT0JKX00pCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvYnppcDIvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvYnppcDIvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y4NTBlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iemlwMi9KYW1maWxlCkBAIC0wLDAgKzEsMTggQEAKKyMgRnJlZVR5cGUgMiBzcmMvYnppcDIgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAxMC0yMDE1IGJ5CisjIEpvZWwgS2xpbmdoZWQKKyMKKyMgYmFzZWQgb24gYHNyYy9sencvSmFtZmlsZScKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGJ6aXAyIDsKKworTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0YnppcDIuYyA7CisKKyMgZW5kIG9mIHNyYy9iemlwMiBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2J6aXAyL2Z0YnppcDIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvYnppcDIvZnRiemlwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZmM5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2J6aXAyL2Z0YnppcDIuYwpAQCAtMCwwICsxLDUxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRiemlwMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5iejIgY29tcHJlc3NlZCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgb3B0aW9uYWwgY29tcG9uZW50IHJlbGllcyBvbiBsaWJiejIuICBJdCBzaG91bGQgbWFpbmx5IGJlIHVzZWQgdG8gKi8KKy8qICBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAgICAgICAgICAgICovCisvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgSm9lbCBLbGluZ2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBiYXNlZCBvbiBgc3JjL2d6aXAvZnRnemlwLmMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfQlpJUDJfSAorI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAorCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEJ6aXAyX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9CemlwMgorCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyNlcnJvciAiYnppcDIgY29kZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCisjZW5kaWYKKworI2RlZmluZSBCWl9OT19TVERJTyAvKiBEbyBub3QgbmVlZCBGSUxFICovCisjaW5jbHVkZSA8YnpsaWIuaD4KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgIEIgWiBJIFAgMiAgIE0gRSBNIE8gUiBZICAgTSBBIE4gQSBHIEUgTSBFIE4gVCAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIGl0IGlzIGJldHRlciB0byB1c2UgRnJlZVR5cGUgbWVtb3J5IHJvdXRpbmVzIGluc3RlYWQgb2YgcmF3CisgICAgICdtYWxsb2MvZnJlZScgKi8KKworICB0eXBlZGVmIHZvaWQgKigqIGFsbG9jX2Z1bmMpKHZvaWQqLCBpbnQsIGludCk7CisgIHR5cGVkZWYgdm9pZCAoKiBmcmVlX2Z1bmMpKHZvaWQqLCB2b2lkKik7CisKKyAgc3RhdGljIHZvaWQqCisgIGZ0X2J6aXAyX2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAgaXRlbXMsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgIHNpemUgKQorICB7CisgICAgRlRfVUxvbmcgICAgc3ogPSAoRlRfVUxvbmcpc2l6ZSAqIChGVF9VTG9uZylpdGVtczsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9Qb2ludGVyICBwICA9IE5VTEw7CisKKworICAgICh2b2lkKUZUX0FMTE9DKCBwLCBzeiApOworICAgIHJldHVybiBwOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9iemlwMl9mcmVlKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgdm9pZCogICAgICBhZGRyZXNzICkKKyAgeworICAgIEZUX01FTV9GUkVFKCBhZGRyZXNzICk7CisgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgIEIgWiBJIFAgMiAgIEYgSSBMIEUgICBEIEUgUyBDIFIgSSBQIFQgTyBSICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZUX0JaSVAyX0JVRkZFUl9TSVpFICA0MDk2CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0JaaXAyRmlsZVJlY18KKyAgeworICAgIEZUX1N0cmVhbSAgc291cmNlOyAgICAgICAgIC8qIHBhcmVudC9zb3VyY2Ugc3RyZWFtICAgICAgICAqLworICAgIEZUX1N0cmVhbSAgc3RyZWFtOyAgICAgICAgIC8qIGVtYmVkZGluZyBzdHJlYW0gICAgICAgICAgICAqLworICAgIEZUX01lbW9yeSAgbWVtb3J5OyAgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgICAgICAqLworICAgIGJ6X3N0cmVhbSAgYnpzdHJlYW07ICAgICAgIC8qIGJ6bGliIGlucHV0IHN0cmVhbSAgICAgICAgICAqLworCisgICAgRlRfQnl0ZSAgICBpbnB1dFtGVF9CWklQMl9CVUZGRVJfU0laRV07ICAvKiBpbnB1dCByZWFkIGJ1ZmZlciAgKi8KKworICAgIEZUX0J5dGUgICAgYnVmZmVyW0ZUX0JaSVAyX0JVRkZFUl9TSVpFXTsgLyogb3V0cHV0IGJ1ZmZlciAgICAgICovCisgICAgRlRfVUxvbmcgICBwb3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3NpdGlvbiBpbiBvdXRwdXQgKi8KKyAgICBGVF9CeXRlKiAgIGN1cnNvcjsKKyAgICBGVF9CeXRlKiAgIGxpbWl0OworCisgIH0gRlRfQlppcDJGaWxlUmVjLCAqRlRfQlppcDJGaWxlOworCisKKyAgLyogY2hlY2sgYW5kIHNraXAgLmJ6MiBoZWFkZXIgLSB3ZSBkb24ndCBzdXBwb3J0IGB0cmFuc3BhcmVudCcgY29tcHJlc3Npb24gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2J6aXAyX2NoZWNrX2hlYWRlciggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX0J5dGUgICBoZWFkWzRdOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCAwICkgICAgICAgfHwKKyAgICAgICAgIEZUX1NUUkVBTV9SRUFEKCBoZWFkLCA0ICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogaGVhZFswXSAmJiBoZWFkWzFdIGFyZSB0aGUgbWFnaWMgbnVtYmVyczsgICAgKi8KKyAgICAvKiBoZWFkWzJdIGlzIHRoZSB2ZXJzaW9uLCBhbmQgaGVhZFszXSB0aGUgYmxvY2tzaXplICovCisgICAgaWYgKCBoZWFkWzBdICE9IDB4NDIgIHx8CisgICAgICAgICBoZWFkWzFdICE9IDB4NUEgIHx8CisgICAgICAgICBoZWFkWzJdICE9IDB4NjggICkgIC8qIG9ubHkgc3VwcG9ydCBiemlwMiAoaHVmZm1hbikgKi8KKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfYnppcDJfZmlsZV9pbml0KCBGVF9CWmlwMkZpbGUgIHppcCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgIHNvdXJjZSApCisgIHsKKyAgICBiel9zdHJlYW0qICBienN0cmVhbSA9ICZ6aXAtPmJ6c3RyZWFtOworICAgIEZUX0Vycm9yICAgIGVycm9yICAgID0gRlRfRXJyX09rOworCisKKyAgICB6aXAtPnN0cmVhbSA9IHN0cmVhbTsKKyAgICB6aXAtPnNvdXJjZSA9IHNvdXJjZTsKKyAgICB6aXAtPm1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisgICAgemlwLT5saW1pdCAgPSB6aXAtPmJ1ZmZlciArIEZUX0JaSVAyX0JVRkZFUl9TSVpFOworICAgIHppcC0+Y3Vyc29yID0gemlwLT5saW1pdDsKKyAgICB6aXAtPnBvcyAgICA9IDA7CisKKyAgICAvKiBjaGVjayAuYnoyIGhlYWRlciAqLworICAgIHsKKyAgICAgIHN0cmVhbSA9IHNvdXJjZTsKKworICAgICAgZXJyb3IgPSBmdF9iemlwMl9jaGVja19oZWFkZXIoIHN0cmVhbSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggMCApICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgYnpsaWIgKi8KKyAgICBienN0cmVhbS0+YnphbGxvYyA9IChhbGxvY19mdW5jKWZ0X2J6aXAyX2FsbG9jOworICAgIGJ6c3RyZWFtLT5iemZyZWUgID0gKGZyZWVfZnVuYykgZnRfYnppcDJfZnJlZTsKKyAgICBienN0cmVhbS0+b3BhcXVlICA9IHppcC0+bWVtb3J5OworCisgICAgYnpzdHJlYW0tPmF2YWlsX2luID0gMDsKKyAgICBienN0cmVhbS0+bmV4dF9pbiAgPSAoY2hhciopemlwLT5idWZmZXI7CisKKyAgICBpZiAoIEJaMl9iekRlY29tcHJlc3NJbml0KCBienN0cmVhbSwgMCwgMCApICE9IEJaX09LIHx8CisgICAgICAgICBienN0cmVhbS0+bmV4dF9pbiA9PSBOVUxMICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2J6aXAyX2ZpbGVfZG9uZSggRlRfQlppcDJGaWxlICB6aXAgKQorICB7CisgICAgYnpfc3RyZWFtKiAgYnpzdHJlYW0gPSAmemlwLT5ienN0cmVhbTsKKworCisgICAgQloyX2J6RGVjb21wcmVzc0VuZCggYnpzdHJlYW0gKTsKKworICAgIC8qIGNsZWFyIHRoZSByZXN0ICovCisgICAgYnpzdHJlYW0tPmJ6YWxsb2MgICA9IE5VTEw7CisgICAgYnpzdHJlYW0tPmJ6ZnJlZSAgICA9IE5VTEw7CisgICAgYnpzdHJlYW0tPm9wYXF1ZSAgICA9IE5VTEw7CisgICAgYnpzdHJlYW0tPm5leHRfaW4gICA9IE5VTEw7CisgICAgYnpzdHJlYW0tPm5leHRfb3V0ICA9IE5VTEw7CisgICAgYnpzdHJlYW0tPmF2YWlsX2luICA9IDA7CisgICAgYnpzdHJlYW0tPmF2YWlsX291dCA9IDA7CisKKyAgICB6aXAtPm1lbW9yeSA9IE5VTEw7CisgICAgemlwLT5zb3VyY2UgPSBOVUxMOworICAgIHppcC0+c3RyZWFtID0gTlVMTDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2J6aXAyX2ZpbGVfcmVzZXQoIEZUX0JaaXAyRmlsZSAgemlwICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gemlwLT5zb3VyY2U7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKworCisgICAgaWYgKCAhRlRfU1RSRUFNX1NFRUsoIDAgKSApCisgICAgeworICAgICAgYnpfc3RyZWFtKiAgYnpzdHJlYW0gPSAmemlwLT5ienN0cmVhbTsKKworCisgICAgICBCWjJfYnpEZWNvbXByZXNzRW5kKCBienN0cmVhbSApOworCisgICAgICBienN0cmVhbS0+YXZhaWxfaW4gID0gMDsKKyAgICAgIGJ6c3RyZWFtLT5uZXh0X2luICAgPSAoY2hhciopemlwLT5pbnB1dDsKKyAgICAgIGJ6c3RyZWFtLT5hdmFpbF9vdXQgPSAwOworICAgICAgYnpzdHJlYW0tPm5leHRfb3V0ICA9IChjaGFyKil6aXAtPmJ1ZmZlcjsKKworICAgICAgemlwLT5saW1pdCAgPSB6aXAtPmJ1ZmZlciArIEZUX0JaSVAyX0JVRkZFUl9TSVpFOworICAgICAgemlwLT5jdXJzb3IgPSB6aXAtPmxpbWl0OworICAgICAgemlwLT5wb3MgICAgPSAwOworCisgICAgICBCWjJfYnpEZWNvbXByZXNzSW5pdCggYnpzdHJlYW0sIDAsIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9iemlwMl9maWxlX2ZpbGxfaW5wdXQoIEZUX0JaaXAyRmlsZSAgemlwICkKKyAgeworICAgIGJ6X3N0cmVhbSogIGJ6c3RyZWFtID0gJnppcC0+YnpzdHJlYW07CisgICAgRlRfU3RyZWFtICAgc3RyZWFtICAgID0gemlwLT5zb3VyY2U7CisgICAgRlRfVUxvbmcgICAgc2l6ZTsKKworCisgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQorICAgIHsKKyAgICAgIHNpemUgPSBzdHJlYW0tPnJlYWQoIHN0cmVhbSwgc3RyZWFtLT5wb3MsIHppcC0+aW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWklQMl9CVUZGRVJfU0laRSApOworICAgICAgaWYgKCBzaXplID09IDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2l6ZSA9IHN0cmVhbS0+c2l6ZSAtIHN0cmVhbS0+cG9zOworICAgICAgaWYgKCBzaXplID4gRlRfQlpJUDJfQlVGRkVSX1NJWkUgKQorICAgICAgICBzaXplID0gRlRfQlpJUDJfQlVGRkVSX1NJWkU7CisKKyAgICAgIGlmICggc2l6ZSA9PSAwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKworICAgICAgRlRfTUVNX0NPUFkoIHppcC0+aW5wdXQsIHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zLCBzaXplICk7CisgICAgfQorICAgIHN0cmVhbS0+cG9zICs9IHNpemU7CisKKyAgICBienN0cmVhbS0+bmV4dF9pbiAgPSAoY2hhciopemlwLT5pbnB1dDsKKyAgICBienN0cmVhbS0+YXZhaWxfaW4gPSBzaXplOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2J6aXAyX2ZpbGVfZmlsbF9vdXRwdXQoIEZUX0JaaXAyRmlsZSAgemlwICkKKyAgeworICAgIGJ6X3N0cmVhbSogIGJ6c3RyZWFtID0gJnppcC0+YnpzdHJlYW07CisgICAgRlRfRXJyb3IgICAgZXJyb3IgICAgPSBGVF9FcnJfT2s7CisKKworICAgIHppcC0+Y3Vyc29yICAgICAgICAgPSB6aXAtPmJ1ZmZlcjsKKyAgICBienN0cmVhbS0+bmV4dF9vdXQgID0gKGNoYXIqKXppcC0+Y3Vyc29yOworICAgIGJ6c3RyZWFtLT5hdmFpbF9vdXQgPSBGVF9CWklQMl9CVUZGRVJfU0laRTsKKworICAgIHdoaWxlICggYnpzdHJlYW0tPmF2YWlsX291dCA+IDAgKQorICAgIHsKKyAgICAgIGludCAgZXJyOworCisKKyAgICAgIGlmICggYnpzdHJlYW0tPmF2YWlsX2luID09IDAgKQorICAgICAgeworICAgICAgICBlcnJvciA9IGZ0X2J6aXAyX2ZpbGVfZmlsbF9pbnB1dCggemlwICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBlcnIgPSBCWjJfYnpEZWNvbXByZXNzKCBienN0cmVhbSApOworCisgICAgICBpZiAoIGVyciA9PSBCWl9TVFJFQU1fRU5EICkKKyAgICAgIHsKKyAgICAgICAgemlwLT5saW1pdCA9IChGVF9CeXRlKilienN0cmVhbS0+bmV4dF9vdXQ7CisgICAgICAgIGlmICggemlwLT5saW1pdCA9PSB6aXAtPmN1cnNvciApCisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGVyciAhPSBCWl9PSyApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZlcjsgYGNvdW50JyBtdXN0IGJlIDw9IEZUX0JaSVAyX0JVRkZFUl9TSVpFICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9iemlwMl9maWxlX3NraXBfb3V0cHV0KCBGVF9CWmlwMkZpbGUgIHppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjb3VudCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfVUxvbmcgIGRlbHRhOworCisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGRlbHRhID0gKEZUX1VMb25nKSggemlwLT5saW1pdCAtIHppcC0+Y3Vyc29yICk7CisgICAgICBpZiAoIGRlbHRhID49IGNvdW50ICkKKyAgICAgICAgZGVsdGEgPSBjb3VudDsKKworICAgICAgemlwLT5jdXJzb3IgKz0gZGVsdGE7CisgICAgICB6aXAtPnBvcyAgICArPSBkZWx0YTsKKworICAgICAgY291bnQgLT0gZGVsdGE7CisgICAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgICBicmVhazsKKworICAgICAgZXJyb3IgPSBmdF9iemlwMl9maWxlX2ZpbGxfb3V0cHV0KCB6aXAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9VTG9uZworICBmdF9iemlwMl9maWxlX2lvKCBGVF9CWmlwMkZpbGUgIHppcCwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBwb3MsCisgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIGNvdW50ICkKKyAgeworICAgIEZUX1VMb25nICByZXN1bHQgPSAwOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgLyogUmVzZXQgaW5mbGF0ZSBzdHJlYW0gaWYgd2UncmUgc2Vla2luZyBiYWNrd2FyZHMuICAgICAgICAqLworICAgIC8qIFllcywgdGhhdCBpcyBub3QgdG9vIGVmZmljaWVudCwgYnV0IGl0IHNhdmVzIG1lbW9yeSA6LSkgKi8KKyAgICBpZiAoIHBvcyA8IHppcC0+cG9zICkKKyAgICB7CisgICAgICBlcnJvciA9IGZ0X2J6aXAyX2ZpbGVfcmVzZXQoIHppcCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBza2lwIHVud2FudGVkIGJ5dGVzICovCisgICAgaWYgKCBwb3MgPiB6aXAtPnBvcyApCisgICAgeworICAgICAgZXJyb3IgPSBmdF9iemlwMl9maWxlX3NraXBfb3V0cHV0KCB6aXAsIChGVF9VTG9uZykoIHBvcyAtIHppcC0+cG9zICkgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBjb3VudCA9PSAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIG5vdyByZWFkIHRoZSBkYXRhICovCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBGVF9VTG9uZyAgZGVsdGE7CisKKworICAgICAgZGVsdGEgPSAoRlRfVUxvbmcpKCB6aXAtPmxpbWl0IC0gemlwLT5jdXJzb3IgKTsKKyAgICAgIGlmICggZGVsdGEgPj0gY291bnQgKQorICAgICAgICBkZWx0YSA9IGNvdW50OworCisgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyLCB6aXAtPmN1cnNvciwgZGVsdGEgKTsKKyAgICAgIGJ1ZmZlciAgICAgICs9IGRlbHRhOworICAgICAgcmVzdWx0ICAgICAgKz0gZGVsdGE7CisgICAgICB6aXAtPmN1cnNvciArPSBkZWx0YTsKKyAgICAgIHppcC0+cG9zICAgICs9IGRlbHRhOworCisgICAgICBjb3VudCAtPSBkZWx0YTsKKyAgICAgIGlmICggY291bnQgPT0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgICBlcnJvciA9IGZ0X2J6aXAyX2ZpbGVfZmlsbF9vdXRwdXQoIHppcCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICBCIFogICBFIE0gQiBFIEQgRCBJIE4gRyAgIFMgVCBSIEUgQSBNICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2J6aXAyX3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfQlppcDJGaWxlICB6aXAgICAgPSAoRlRfQlppcDJGaWxlKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKworICAgIGlmICggemlwICkKKyAgICB7CisgICAgICAvKiBmaW5hbGl6ZSBiemlwIGZpbGUgZGVzY3JpcHRvciAqLworICAgICAgZnRfYnppcDJfZmlsZV9kb25lKCB6aXAgKTsKKworICAgICAgRlRfRlJFRSggemlwICk7CisKKyAgICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gTlVMTDsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBGVF9VTG9uZworICBmdF9iemlwMl9zdHJlYW1faW8oIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICB7CisgICAgRlRfQlppcDJGaWxlICB6aXAgPSAoRlRfQlppcDJGaWxlKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyOworCisKKyAgICByZXR1cm4gZnRfYnppcDJfZmlsZV9pbyggemlwLCBwb3MsIGJ1ZmZlciwgY291bnQgKTsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbkJ6aXAyKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKQorICB7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeTsKKyAgICBGVF9CWmlwMkZpbGUgIHppcCA9IE5VTEw7CisKKworICAgIGlmICggIXN0cmVhbSB8fCAhc291cmNlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9IYW5kbGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBtZW1vcnkgPSBzb3VyY2UtPm1lbW9yeTsKKworICAgIC8qCisgICAgICogIGNoZWNrIHRoZSBoZWFkZXIgcmlnaHQgbm93OyB0aGlzIHByZXZlbnRzIGFsbG9jYXRpbmcgdW5uZWNlc3NhcnkKKyAgICAgKiAgb2JqZWN0cyB3aGVuIHdlIGRvbid0IG5lZWQgdGhlbQorICAgICAqLworICAgIGVycm9yID0gZnRfYnppcDJfY2hlY2tfaGVhZGVyKCBzb3VyY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX1pFUk8oIHN0cmVhbSApOworICAgIHN0cmVhbS0+bWVtb3J5ID0gbWVtb3J5OworCisgICAgaWYgKCAhRlRfUU5FVyggemlwICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gZnRfYnppcDJfZmlsZV9pbml0KCB6aXAsIHN0cmVhbSwgc291cmNlICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfRlJFRSggemlwICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSB6aXA7CisgICAgfQorCisgICAgc3RyZWFtLT5zaXplICA9IDB4N0ZGRkZGRkZMOyAgLyogZG9uJ3Qga25vdyB0aGUgcmVhbCBzaXplISAqLworICAgIHN0cmVhbS0+cG9zICAgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgPSAwOworICAgIHN0cmVhbS0+cmVhZCAgPSBmdF9iemlwMl9zdHJlYW1faW87CisgICAgc3RyZWFtLT5jbG9zZSA9IGZ0X2J6aXAyX3N0cmVhbV9jbG9zZTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZWxzZSAgLyogIUZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbkJ6aXAyKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKQorICB7CisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKyAgICBGVF9VTlVTRUQoIHNvdXJjZSApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCisjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2J6aXAyL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9iemlwMi9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQwNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9iemlwMi9ydWxlcy5tawpAQCAtMCwwICsxLDY0IEBACisjCisjIEZyZWVUeXBlIDIgQlpJUDIgc3VwcG9ydCBjb25maWd1cmF0aW9uIHJ1bGVzCisjCisKKyMgQ29weXJpZ2h0IDIwMTAtMjAxNSBieQorIyBKb2VsIEtsaW5naGVkLgorIworIyBiYXNlZCBvbiBgc3JjL2x6dy9ydWxlcy5taycKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIEJaSVAyIGRyaXZlciBkaXJlY3RvcnkKKyMKK0JaSVAyX0RJUiA6PSAkKFNSQ19ESVIpL2J6aXAyCisKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworQlpJUDJfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSBcCisgICAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgQlpJUDIgc3VwcG9ydCBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworQlpJUDJfRFJWX1NSQyA6PSAkKEJaSVAyX0RJUikvZnRiemlwMi5jCisKKyMgQlpJUDIgZHJpdmVyIG9iamVjdChzKQorIworIyAgIEJaSVAyX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcworIyAgIEJaSVAyX0RSVl9PQkpfUyBpcyB1c2VkIGR1cmluZyBgc2luZ2xlJyBidWlsZHMKKyMKK0JaSVAyX0RSVl9PQkpfTSA6PSAkKE9CSl9ESVIpL2Z0YnppcDIuJE8KK0JaSVAyX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL2Z0YnppcDIuJE8KKworIyBCWklQMiBzdXBwb3J0IHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK0JaSVAyX0RSVl9TUkNfUyA6PSAkKEJaSVAyX0RJUikvZnRiemlwMi5jCisKKworIyBCWklQMiBzdXBwb3J0IC0gc2luZ2xlIG9iamVjdAorIworJChCWklQMl9EUlZfT0JKX1MpOiAkKEJaSVAyX0RSVl9TUkNfUykgJChCWklQMl9EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoQlpJUDJfRFJWX0gpCisJJChCWklQMl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChCWklQMl9EUlZfU1JDX1MpKQorCisKKyMgQlpJUDIgc3VwcG9ydCAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChCWklQMl9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoQlpJUDJfRFJWX0gpCisJJChCWklQMl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoQlpJUDJfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKEJaSVAyX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDg5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL0phbWZpbGUKQEAgLTAsMCArMSw0MyBAQAorIyBGcmVlVHlwZSAyIHNyYy9jYWNoZSBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgY2FjaGUgOworCisjIFRoZSBmaWxlIDxmdGNhY2hlLmg+IGNvbnRhaW5zIHNvbWUgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBhcmUKKyMgbGF0ZXIgdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIGNhY2hlIHN1Yi1zeXN0ZW0uICBJdAorIyBuZWVkcyB0byBiZSBwYXJzZWQgdGhyb3VnaCBhIEhEUk1BQ1JPIHJ1bGUgZm9yIG1hY3JvIGRlZmluaXRpb25zLgorIworSERSTUFDUk8gIFsgRlQyX1N1YkRpciAgaW5jbHVkZSBmdGNhY2hlLmggXSA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gZnRjbXJ1CisgICAgICAgICAgICAgICBmdGNtYW5hZworICAgICAgICAgICAgICAgZnRjY2FjaGUKKyAgICAgICAgICAgICAgIGZ0Y2dseXBoCisgICAgICAgICAgICAgICBmdGNzYml0cworICAgICAgICAgICAgICAgZnRjaW1hZ2UKKyAgICAgICAgICAgICAgIGZ0Y2Jhc2ljCisgICAgICAgICAgICAgICBmdGNjbWFwCisgICAgICAgICAgICAgICA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSBmdGNhY2hlIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL2NhY2hlIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjYWNoZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlNTI3YQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjYWNoZS5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2FjaGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgQ2FjaGluZyBzdWItc3lzdGVtIChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgImZ0Y21ydS5jIgorI2luY2x1ZGUgImZ0Y21hbmFnLmMiCisjaW5jbHVkZSAiZnRjY2FjaGUuYyIKKyNpbmNsdWRlICJmdGNjbWFwLmMiCisjaW5jbHVkZSAiZnRjZ2x5cGguYyIKKyNpbmNsdWRlICJmdGNpbWFnZS5jIgorI2luY2x1ZGUgImZ0Y3NiaXRzLmMiCisjaW5jbHVkZSAiZnRjYmFzaWMuYyIKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjYmFzaWMuYwpAQCAtMCwwICsxLDU5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjYmFzaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBiYXNpYyBjYWNoZSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfQ0FDSEVfSAorI2luY2x1ZGUgImZ0Y2dseXBoLmgiCisjaW5jbHVkZSAiZnRjaW1hZ2UuaCIKKyNpbmNsdWRlICJmdGNzYml0cy5oIgorCisjaW5jbHVkZSAiZnRjY2JhY2suaCIKKyNpbmNsdWRlICJmdGNlcnJvci5oIgorCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2FjaGUKKworCisgIC8qCisgICAqICBCYXNpYyBGYW1pbGllcworICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19CYXNpY0F0dHJSZWNfCisgIHsKKyAgICBGVENfU2NhbGVyUmVjICBzY2FsZXI7CisgICAgRlRfVUludCAgICAgICAgbG9hZF9mbGFnczsKKworICB9IEZUQ19CYXNpY0F0dHJSZWMsICpGVENfQmFzaWNBdHRyczsKKworI2RlZmluZSBGVENfQkFTSUNfQVRUUl9DT01QQVJFKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQk9PTCggRlRDX1NDQUxFUl9DT01QQVJFKCAmKGEpLT5zY2FsZXIsICYoYiktPnNjYWxlciApICYmIFwKKyAgICAgICAgICAgICAgICAgICAoYSktPmxvYWRfZmxhZ3MgPT0gKGIpLT5sb2FkX2ZsYWdzICAgICAgICAgICAgICAgKQorCisjZGVmaW5lIEZUQ19CQVNJQ19BVFRSX0hBU0goIGEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBGVENfU0NBTEVSX0hBU0goICYoYSktPnNjYWxlciApICsgMzEgKiAoYSktPmxvYWRfZmxhZ3MgKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19CYXNpY1F1ZXJ5UmVjXworICB7CisgICAgRlRDX0dRdWVyeVJlYyAgICAgZ3F1ZXJ5OworICAgIEZUQ19CYXNpY0F0dHJSZWMgIGF0dHJzOworCisgIH0gRlRDX0Jhc2ljUXVlcnlSZWMsICpGVENfQmFzaWNRdWVyeTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVENfQmFzaWNGYW1pbHlSZWNfCisgIHsKKyAgICBGVENfRmFtaWx5UmVjICAgICBmYW1pbHk7CisgICAgRlRDX0Jhc2ljQXR0clJlYyAgYXR0cnM7CisKKyAgfSBGVENfQmFzaWNGYW1pbHlSZWMsICpGVENfQmFzaWNGYW1pbHk7CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Jvb2wgKQorICBmdGNfYmFzaWNfZmFtaWx5X2NvbXBhcmUoIEZUQ19NcnVOb2RlICBmdGNmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y3F1ZXJ5ICkKKyAgeworICAgIEZUQ19CYXNpY0ZhbWlseSAgZmFtaWx5ID0gKEZUQ19CYXNpY0ZhbWlseSlmdGNmYW1pbHk7CisgICAgRlRDX0Jhc2ljUXVlcnkgICBxdWVyeSAgPSAoRlRDX0Jhc2ljUXVlcnkpZnRjcXVlcnk7CisKKworICAgIHJldHVybiBGVENfQkFTSUNfQVRUUl9DT01QQVJFKCAmZmFtaWx5LT5hdHRycywgJnF1ZXJ5LT5hdHRycyApOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2Jhc2ljX2ZhbWlseV9pbml0KCBGVENfTXJ1Tm9kZSAgZnRjZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjY2FjaGUgKQorICB7CisgICAgRlRDX0Jhc2ljRmFtaWx5ICBmYW1pbHkgPSAoRlRDX0Jhc2ljRmFtaWx5KWZ0Y2ZhbWlseTsKKyAgICBGVENfQmFzaWNRdWVyeSAgIHF1ZXJ5ICA9IChGVENfQmFzaWNRdWVyeSlmdGNxdWVyeTsKKyAgICBGVENfQ2FjaGUgICAgICAgIGNhY2hlICA9IChGVENfQ2FjaGUpZnRjY2FjaGU7CisKKworICAgIEZUQ19GYW1pbHlfSW5pdCggRlRDX0ZBTUlMWSggZmFtaWx5ICksIGNhY2hlICk7CisgICAgZmFtaWx5LT5hdHRycyA9IHF1ZXJ5LT5hdHRyczsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50ICkKKyAgZnRjX2Jhc2ljX2ZhbWlseV9nZXRfY291bnQoIEZUQ19GYW1pbHkgICBmdGNmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciApCisgIHsKKyAgICBGVENfQmFzaWNGYW1pbHkgIGZhbWlseSA9IChGVENfQmFzaWNGYW1pbHkpZnRjZmFtaWx5OworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisgICAgRlRfRmFjZSAgICAgICAgICBmYWNlOworICAgIEZUX1VJbnQgICAgICAgICAgcmVzdWx0ID0gMDsKKworCisgICAgZXJyb3IgPSBGVENfTWFuYWdlcl9Mb29rdXBGYWNlKCBtYW5hZ2VyLCBmYW1pbHktPmF0dHJzLnNjYWxlci5mYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2UgKTsKKworICAgIGlmICggZXJyb3IgfHwgIWZhY2UgKQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICggKEZUX1VMb25nKWZhY2UtPm51bV9nbHlwaHMgPiBGVF9VSU5UX01BWCB8fCAwID4gZmFjZS0+bnVtX2dseXBocyApCisgICAgICBGVF9UUkFDRTEoKCAiZnRjX2Jhc2ljX2ZhbWlseV9nZXRfY291bnQ6IgorICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2UgbnVtYmVyIG9mIGdseXBocyBpbiB0aGlzIGZhY2UsIHRydW5jYXRlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9nbHlwaHMgKSk7CisKKyAgICBpZiAoICFlcnJvciApCisgICAgICByZXN1bHQgPSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGZ0Y19iYXNpY19mYW1pbHlfbG9hZF9iaXRtYXAoIEZUQ19GYW1pbHkgICBmdGNmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQorICB7CisgICAgRlRDX0Jhc2ljRmFtaWx5ICBmYW1pbHkgPSAoRlRDX0Jhc2ljRmFtaWx5KWZ0Y2ZhbWlseTsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIEZUX1NpemUgICAgICAgICAgc2l6ZTsKKworCisgICAgZXJyb3IgPSBGVENfTWFuYWdlcl9Mb29rdXBTaXplKCBtYW5hZ2VyLCAmZmFtaWx5LT5hdHRycy5zY2FsZXIsICZzaXplICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0ZhY2UgIGZhY2UgPSBzaXplLT5mYWNlOworCisKKyAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCgKKyAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAoRlRfSW50KWZhbWlseS0+YXR0cnMubG9hZF9mbGFncyB8IEZUX0xPQURfUkVOREVSICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICphZmFjZSA9IGZhY2U7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2Jhc2ljX2ZhbWlseV9sb2FkX2dseXBoKCBGVENfRmFtaWx5ICBmdGNmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgKmFnbHlwaCApCisgIHsKKyAgICBGVENfQmFzaWNGYW1pbHkgIGZhbWlseSA9IChGVENfQmFzaWNGYW1pbHkpZnRjZmFtaWx5OworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisgICAgRlRDX1NjYWxlciAgICAgICBzY2FsZXIgPSAmZmFtaWx5LT5hdHRycy5zY2FsZXI7CisgICAgRlRfRmFjZSAgICAgICAgICBmYWNlOworICAgIEZUX1NpemUgICAgICAgICAgc2l6ZTsKKworCisgICAgLyogd2Ugd2lsbCBub3cgbG9hZCB0aGUgZ2x5cGggaW1hZ2UgKi8KKyAgICBlcnJvciA9IEZUQ19NYW5hZ2VyX0xvb2t1cFNpemUoIGNhY2hlLT5tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgZmFjZSA9IHNpemUtPmZhY2U7CisKKyAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWZhbWlseS0+YXR0cnMubG9hZF9mbGFncyApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBpZiAoIGZhY2UtPmdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCAgfHwKKyAgICAgICAgICAgICBmYWNlLT5nbHlwaC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FICkKKyAgICAgICAgeworICAgICAgICAgIC8qIG9rLCBjb3B5IGl0ICovCisgICAgICAgICAgRlRfR2x5cGggIGdseXBoOworCisKKyAgICAgICAgICBlcnJvciA9IEZUX0dldF9HbHlwaCggZmFjZS0+Z2x5cGgsICZnbHlwaCApOworICAgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAqYWdseXBoID0gZ2x5cGg7CisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Jvb2wgKQorICBmdGNfYmFzaWNfZ25vZGVfY29tcGFyZV9mYWNlaWQoIEZUQ19Ob2RlICAgIGZ0Y2dub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y2ZhY2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgbGlzdF9jaGFuZ2VkICkKKyAgeworICAgIEZUQ19HTm9kZSAgICAgICAgZ25vZGUgICA9IChGVENfR05vZGUpZnRjZ25vZGU7CisgICAgRlRDX0ZhY2VJRCAgICAgICBmYWNlX2lkID0gKEZUQ19GYWNlSUQpZnRjZmFjZV9pZDsKKyAgICBGVENfQmFzaWNGYW1pbHkgIGZhbWlseSAgPSAoRlRDX0Jhc2ljRmFtaWx5KWdub2RlLT5mYW1pbHk7CisgICAgRlRfQm9vbCAgICAgICAgICByZXN1bHQ7CisKKworICAgIGlmICggbGlzdF9jaGFuZ2VkICkKKyAgICAgICpsaXN0X2NoYW5nZWQgPSBGQUxTRTsKKyAgICByZXN1bHQgPSBGVF9CT09MKCBmYW1pbHktPmF0dHJzLnNjYWxlci5mYWNlX2lkID09IGZhY2VfaWQgKTsKKyAgICBpZiAoIHJlc3VsdCApCisgICAgeworICAgICAgLyogd2UgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhpcyBub2RlIGZyb20gYXBwZWFyaW5nCisgICAgICAgKiBpbiBsYXRlciBsb29rdXBzIHdpdGggdGhlIHNhbWUgZmFjZV9pZCEKKyAgICAgICAqLworICAgICAgRlRDX0dOb2RlX1Vuc2VsZWN0RmFtaWx5KCBnbm9kZSwgY2FjaGUgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAvKgorICAqCisgICogYmFzaWMgaW1hZ2UgY2FjaGUKKyAgKgorICAqLworCisgIHN0YXRpYworICBjb25zdCBGVENfSUZhbWlseUNsYXNzUmVjICBmdGNfYmFzaWNfaW1hZ2VfZmFtaWx5X2NsYXNzID0KKyAgeworICAgIHsKKyAgICAgIHNpemVvZiAoIEZUQ19CYXNpY0ZhbWlseVJlYyApLAorICAgICAgZnRjX2Jhc2ljX2ZhbWlseV9jb21wYXJlLAorICAgICAgZnRjX2Jhc2ljX2ZhbWlseV9pbml0LAorICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVENfTXJ1Tm9kZV9SZXNldEZ1bmMgKi8KKyAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRDX01ydU5vZGVfRG9uZUZ1bmMgICovCisgICAgfSwKKyAgICBmdGNfYmFzaWNfZmFtaWx5X2xvYWRfZ2x5cGgKKyAgfTsKKworCisgIHN0YXRpYworICBjb25zdCBGVENfR0NhY2hlQ2xhc3NSZWMgIGZ0Y19iYXNpY19pbWFnZV9jYWNoZV9jbGFzcyA9CisgIHsKKyAgICB7CisgICAgICBmdGNfaW5vZGVfbmV3LAorICAgICAgZnRjX2lub2RlX3dlaWdodCwKKyAgICAgIGZ0Y19nbm9kZV9jb21wYXJlLAorICAgICAgZnRjX2Jhc2ljX2dub2RlX2NvbXBhcmVfZmFjZWlkLAorICAgICAgZnRjX2lub2RlX2ZyZWUsCisKKyAgICAgIHNpemVvZiAoIEZUQ19HQ2FjaGVSZWMgKSwKKyAgICAgIGZ0Y19nY2FjaGVfaW5pdCwKKyAgICAgIGZ0Y19nY2FjaGVfZG9uZQorICAgIH0sCisgICAgKEZUQ19NcnVMaXN0Q2xhc3MpJmZ0Y19iYXNpY19pbWFnZV9mYW1pbHlfY2xhc3MKKyAgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfSW1hZ2VDYWNoZV9OZXcoIEZUQ19NYW5hZ2VyICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VDYWNoZSAgKmFjYWNoZSApCisgIHsKKyAgICByZXR1cm4gRlRDX0dDYWNoZV9OZXcoIG1hbmFnZXIsICZmdGNfYmFzaWNfaW1hZ2VfY2FjaGVfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRDX0dDYWNoZSopYWNhY2hlICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfSW1hZ2VDYWNoZV9Mb29rdXAoIEZUQ19JbWFnZUNhY2hlICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICphZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX05vZGUgICAgICAgKmFub2RlICkKKyAgeworICAgIEZUQ19CYXNpY1F1ZXJ5UmVjICBxdWVyeTsKKyAgICBGVENfTm9kZSAgICAgICAgICAgbm9kZSA9IDA7IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisgICAgRlRfT2Zmc2V0ICAgICAgICAgIGhhc2g7CisKKworICAgIC8qIHNvbWUgYXJndW1lbnQgY2hlY2tzIGFyZSBkZWxheWVkIHRvIGBGVENfQ2FjaGVfTG9va3VwJyAqLworICAgIGlmICggIWFnbHlwaCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgICphZ2x5cGggPSBOVUxMOworICAgIGlmICggYW5vZGUgKQorICAgICAgKmFub2RlICA9IE5VTEw7CisKKyAgICBpZiAoIChGVF9VTG9uZykoIHR5cGUtPmZsYWdzIC0gRlRfSU5UX01JTiApID4gRlRfVUlOVF9NQVggKQorICAgICAgRlRfVFJBQ0UxKCggIkZUQ19JbWFnZUNhY2hlX0xvb2t1cDoiCisgICAgICAgICAgICAgICAgICAiIGhpZ2hlciBiaXRzIGluIGxvYWRfZmxhZ3MgMHgleCBhcmUgZHJvcHBlZFxuIiwKKyAgICAgICAgICAgICAgICAgIChGVF9VTG9uZyl0eXBlLT5mbGFncyAmIH4oKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApKTsKKworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlci5mYWNlX2lkID0gdHlwZS0+ZmFjZV9pZDsKKyAgICBxdWVyeS5hdHRycy5zY2FsZXIud2lkdGggICA9IHR5cGUtPndpZHRoOworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlci5oZWlnaHQgID0gdHlwZS0+aGVpZ2h0OworICAgIHF1ZXJ5LmF0dHJzLmxvYWRfZmxhZ3MgICAgID0gKEZUX1VJbnQpdHlwZS0+ZmxhZ3M7CisKKyAgICBxdWVyeS5hdHRycy5zY2FsZXIucGl4ZWwgPSAxOworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlci54X3JlcyA9IDA7ICAvKiBtYWtlIGNvbXBpbGVycyBoYXBweSAqLworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlci55X3JlcyA9IDA7CisKKyAgICBoYXNoID0gRlRDX0JBU0lDX0FUVFJfSEFTSCggJnF1ZXJ5LmF0dHJzICkgKyBnaW5kZXg7CisKKyNpZiAxICAvKiBpbmxpbmluZyBpcyBhYm91dCA1MCUgZmFzdGVyISAqLworICAgIEZUQ19HQ0FDSEVfTE9PS1VQX0NNUCggY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGNfYmFzaWNfZmFtaWx5X2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR05vZGVfQ29tcGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciApOworI2Vsc2UKKyAgICBlcnJvciA9IEZUQ19HQ2FjaGVfTG9va3VwKCBGVENfR0NBQ0hFKCBjYWNoZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR1FVRVJZKCAmcXVlcnkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9kZSApOworI2VuZGlmCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgICphZ2x5cGggPSBGVENfSU5PREUoIG5vZGUgKS0+Z2x5cGg7CisKKyAgICAgIGlmICggYW5vZGUgKQorICAgICAgeworICAgICAgICAqYW5vZGUgPSBub2RlOworICAgICAgICBub2RlLT5yZWZfY291bnQrKzsKKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXIoIEZUQ19JbWFnZUNhY2hlICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU2NhbGVyICAgICAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBsb2FkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggICAgICAgKmFnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICAgICAqYW5vZGUgKQorICB7CisgICAgRlRDX0Jhc2ljUXVlcnlSZWMgIHF1ZXJ5OworICAgIEZUQ19Ob2RlICAgICAgICAgICBub2RlID0gMDsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKKyAgICBGVF9PZmZzZXQgICAgICAgICAgaGFzaDsKKworCisgICAgLyogc29tZSBhcmd1bWVudCBjaGVja3MgYXJlIGRlbGF5ZWQgdG8gYEZUQ19DYWNoZV9Mb29rdXAnICovCisgICAgaWYgKCAhYWdseXBoIHx8ICFzY2FsZXIgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAqYWdseXBoID0gTlVMTDsKKyAgICBpZiAoIGFub2RlICkKKyAgICAgICphbm9kZSAgPSBOVUxMOworCisgICAgLyogYEZUX0xvYWRfR2x5cGgnIGFuZCBgRlRfTG9hZF9DaGFyJyB0YWtlIEZUX1VJbnQgZmxhZ3MgKi8KKyAgICBpZiAoIGxvYWRfZmxhZ3MgPiBGVF9VSU5UX01BWCApCisgICAgICBGVF9UUkFDRTEoKCAiRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyOiIKKyAgICAgICAgICAgICAgICAgICIgaGlnaGVyIGJpdHMgaW4gbG9hZF9mbGFncyAweCV4IGFyZSBkcm9wcGVkXG4iLAorICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyAmIH4oKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApKTsKKworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlciAgICAgPSBzY2FsZXJbMF07CisgICAgcXVlcnkuYXR0cnMubG9hZF9mbGFncyA9IChGVF9VSW50KWxvYWRfZmxhZ3M7CisKKyAgICBoYXNoID0gRlRDX0JBU0lDX0FUVFJfSEFTSCggJnF1ZXJ5LmF0dHJzICkgKyBnaW5kZXg7CisKKyAgICBGVENfR0NBQ0hFX0xPT0tVUF9DTVAoIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRjX2Jhc2ljX2ZhbWlseV9jb21wYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0dOb2RlX0NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgKmFnbHlwaCA9IEZUQ19JTk9ERSggbm9kZSApLT5nbHlwaDsKKworICAgICAgaWYgKCBhbm9kZSApCisgICAgICB7CisgICAgICAgICphbm9kZSA9IG5vZGU7CisgICAgICAgIG5vZGUtPnJlZl9jb3VudCsrOworICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoKKyAgICoKKyAgICogYmFzaWMgc21hbGwgYml0bWFwIGNhY2hlCisgICAqCisgICAqLworCisgIHN0YXRpYworICBjb25zdCBGVENfU0ZhbWlseUNsYXNzUmVjICBmdGNfYmFzaWNfc2JpdF9mYW1pbHlfY2xhc3MgPQorICB7CisgICAgeworICAgICAgc2l6ZW9mICggRlRDX0Jhc2ljRmFtaWx5UmVjICksCisgICAgICBmdGNfYmFzaWNfZmFtaWx5X2NvbXBhcmUsCisgICAgICBmdGNfYmFzaWNfZmFtaWx5X2luaXQsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVENfTXJ1Tm9kZV9SZXNldEZ1bmMgKi8KKyAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUQ19NcnVOb2RlX0RvbmVGdW5jICAqLworICAgIH0sCisgICAgZnRjX2Jhc2ljX2ZhbWlseV9nZXRfY291bnQsCisgICAgZnRjX2Jhc2ljX2ZhbWlseV9sb2FkX2JpdG1hcAorICB9OworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUQ19HQ2FjaGVDbGFzc1JlYyAgZnRjX2Jhc2ljX3NiaXRfY2FjaGVfY2xhc3MgPQorICB7CisgICAgeworICAgICAgZnRjX3Nub2RlX25ldywKKyAgICAgIGZ0Y19zbm9kZV93ZWlnaHQsCisgICAgICBmdGNfc25vZGVfY29tcGFyZSwKKyAgICAgIGZ0Y19iYXNpY19nbm9kZV9jb21wYXJlX2ZhY2VpZCwKKyAgICAgIGZ0Y19zbm9kZV9mcmVlLAorCisgICAgICBzaXplb2YgKCBGVENfR0NhY2hlUmVjICksCisgICAgICBmdGNfZ2NhY2hlX2luaXQsCisgICAgICBmdGNfZ2NhY2hlX2RvbmUKKyAgICB9LAorICAgIChGVENfTXJ1TGlzdENsYXNzKSZmdGNfYmFzaWNfc2JpdF9mYW1pbHlfY2xhc3MKKyAgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfU0JpdENhY2hlX05ldyggRlRDX01hbmFnZXIgICAgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICBGVENfU0JpdENhY2hlICAqYWNhY2hlICkKKyAgeworICAgIHJldHVybiBGVENfR0NhY2hlX05ldyggbWFuYWdlciwgJmZ0Y19iYXNpY19zYml0X2NhY2hlX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19HQ2FjaGUqKWFjYWNoZSApOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX1NCaXRDYWNoZV9Mb29rdXAoIEZUQ19TQml0Q2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlVHlwZSAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19TQml0ICAgICAgKmFuc2JpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgICAgKmFub2RlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKKyAgICBGVENfQmFzaWNRdWVyeVJlYyAgcXVlcnk7CisgICAgRlRDX05vZGUgICAgICAgICAgIG5vZGUgPSAwOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgRlRfT2Zmc2V0ICAgICAgICAgIGhhc2g7CisKKworICAgIGlmICggYW5vZGUgKQorICAgICAgKmFub2RlID0gTlVMTDsKKworICAgIC8qIG90aGVyIGFyZ3VtZW50IGNoZWNrcyBkZWxheWVkIHRvIGBGVENfQ2FjaGVfTG9va3VwJyAqLworICAgIGlmICggIWFuc2JpdCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICphbnNiaXQgPSBOVUxMOworCisgICAgaWYgKCAoRlRfVUxvbmcpKCB0eXBlLT5mbGFncyAtIEZUX0lOVF9NSU4gKSA+IEZUX1VJTlRfTUFYICkKKyAgICAgIEZUX1RSQUNFMSgoICJGVENfSW1hZ2VDYWNoZV9Mb29rdXA6IgorICAgICAgICAgICAgICAgICAgIiBoaWdoZXIgYml0cyBpbiBsb2FkX2ZsYWdzIDB4JXggYXJlIGRyb3BwZWRcbiIsCisgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpdHlwZS0+ZmxhZ3MgJiB+KChGVF9VTG9uZylGVF9VSU5UX01BWCkgKSk7CisKKyAgICBxdWVyeS5hdHRycy5zY2FsZXIuZmFjZV9pZCA9IHR5cGUtPmZhY2VfaWQ7CisgICAgcXVlcnkuYXR0cnMuc2NhbGVyLndpZHRoICAgPSB0eXBlLT53aWR0aDsKKyAgICBxdWVyeS5hdHRycy5zY2FsZXIuaGVpZ2h0ICA9IHR5cGUtPmhlaWdodDsKKyAgICBxdWVyeS5hdHRycy5sb2FkX2ZsYWdzICAgICA9IChGVF9VSW50KXR5cGUtPmZsYWdzOworCisgICAgcXVlcnkuYXR0cnMuc2NhbGVyLnBpeGVsID0gMTsKKyAgICBxdWVyeS5hdHRycy5zY2FsZXIueF9yZXMgPSAwOyAgLyogbWFrZSBjb21waWxlcnMgaGFwcHkgKi8KKyAgICBxdWVyeS5hdHRycy5zY2FsZXIueV9yZXMgPSAwOworCisgICAgLyogYmV3YXJlLCB0aGUgaGFzaCBtdXN0IGJlIHRoZSBzYW1lIGZvciBhbGwgZ2x5cGggcmFuZ2VzISAqLworICAgIGhhc2ggPSBGVENfQkFTSUNfQVRUUl9IQVNIKCAmcXVlcnkuYXR0cnMgKSArCisgICAgICAgICAgIGdpbmRleCAvIEZUQ19TQklUX0lURU1TX1BFUl9OT0RFOworCisjaWYgMSAgLyogaW5saW5pbmcgaXMgYWJvdXQgNTAlIGZhc3RlciEgKi8KKyAgICBGVENfR0NBQ0hFX0xPT0tVUF9DTVAoIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRjX2Jhc2ljX2ZhbWlseV9jb21wYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NOb2RlX0NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgKTsKKyNlbHNlCisgICAgZXJyb3IgPSBGVENfR0NhY2hlX0xvb2t1cCggRlRDX0dDQUNIRSggY2FjaGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR1FVRVJZKCAmcXVlcnkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9kZSApOworI2VuZGlmCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAqYW5zYml0ID0gRlRDX1NOT0RFKCBub2RlICktPnNiaXRzICsKKyAgICAgICAgICAgICAgKCBnaW5kZXggLSBGVENfR05PREUoIG5vZGUgKS0+Z2luZGV4ICk7CisKKyAgICBpZiAoIGFub2RlICkKKyAgICB7CisgICAgICAqYW5vZGUgPSBub2RlOworICAgICAgbm9kZS0+cmVmX2NvdW50Kys7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIoIEZUQ19TQml0Q2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgICAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19TQml0ICAgICAgKmFuc2JpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgICAgKmFub2RlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKKyAgICBGVENfQmFzaWNRdWVyeVJlYyAgcXVlcnk7CisgICAgRlRDX05vZGUgICAgICAgICAgIG5vZGUgPSAwOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgRlRfT2Zmc2V0ICAgICAgICAgIGhhc2g7CisKKworICAgIGlmICggYW5vZGUgKQorICAgICAgICAqYW5vZGUgPSBOVUxMOworCisgICAgLyogb3RoZXIgYXJndW1lbnQgY2hlY2tzIGRlbGF5ZWQgdG8gYEZUQ19DYWNoZV9Mb29rdXAnICovCisgICAgaWYgKCAhYW5zYml0IHx8ICFzY2FsZXIgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICphbnNiaXQgPSBOVUxMOworCisgICAgLyogYEZUX0xvYWRfR2x5cGgnIGFuZCBgRlRfTG9hZF9DaGFyJyB0YWtlIEZUX1VJbnQgZmxhZ3MgKi8KKyAgICBpZiAoIGxvYWRfZmxhZ3MgPiBGVF9VSU5UX01BWCApCisgICAgICBGVF9UUkFDRTEoKCAiRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyOiIKKyAgICAgICAgICAgICAgICAgICIgaGlnaGVyIGJpdHMgaW4gbG9hZF9mbGFncyAweCV4IGFyZSBkcm9wcGVkXG4iLAorICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyAmIH4oKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApKTsKKworICAgIHF1ZXJ5LmF0dHJzLnNjYWxlciAgICAgPSBzY2FsZXJbMF07CisgICAgcXVlcnkuYXR0cnMubG9hZF9mbGFncyA9IChGVF9VSW50KWxvYWRfZmxhZ3M7CisKKyAgICAvKiBiZXdhcmUsIHRoZSBoYXNoIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBnbHlwaCByYW5nZXMhICovCisgICAgaGFzaCA9IEZUQ19CQVNJQ19BVFRSX0hBU0goICZxdWVyeS5hdHRycyApICsKKyAgICAgICAgICAgICBnaW5kZXggLyBGVENfU0JJVF9JVEVNU19QRVJfTk9ERTsKKworICAgIEZUQ19HQ0FDSEVfTE9PS1VQX0NNUCggY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGNfYmFzaWNfZmFtaWx5X2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU05vZGVfQ29tcGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgKmFuc2JpdCA9IEZUQ19TTk9ERSggbm9kZSApLT5zYml0cyArCisgICAgICAgICAgICAgICggZ2luZGV4IC0gRlRDX0dOT0RFKCBub2RlICktPmdpbmRleCApOworCisgICAgaWYgKCBhbm9kZSApCisgICAgeworICAgICAgKmFub2RlID0gbm9kZTsKKyAgICAgIG5vZGUtPnJlZl9jb3VudCsrOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNjYWNoZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzViOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKQEAgLTAsMCArMSw2MjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2NhY2hlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgaW50ZXJuYWwgY2FjaGUgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiZnRjbWFuYWcuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiZnRjY2JhY2suaCIKKyNpbmNsdWRlICJmdGNlcnJvci5oIgorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NhY2hlCisKKworI2RlZmluZSBGVENfSEFTSF9NQVhfTE9BRCAgMgorI2RlZmluZSBGVENfSEFTSF9NSU5fTE9BRCAgMQorI2RlZmluZSBGVENfSEFTSF9TVUJfTE9BRCAgKCBGVENfSEFTSF9NQVhfTE9BRCAtIEZUQ19IQVNIX01JTl9MT0FEICkKKworICAvKiB0aGlzIG9uZSBfbXVzdF8gYmUgYSBwb3dlciBvZiAyISAqLworI2RlZmluZSBGVENfSEFTSF9JTklUSUFMX1NJWkUgIDgKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICBDQUNIRSBOT0RFIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIGFkZCBhIG5ldyBub2RlIHRvIHRoZSBoZWFkIG9mIHRoZSBtYW5hZ2VyJ3MgY2lyY3VsYXIgTVJVIGxpc3QgKi8KKyAgc3RhdGljIHZvaWQKKyAgZnRjX25vZGVfbXJ1X2xpbmsoIEZUQ19Ob2RlICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgIG1hbmFnZXIgKQorICB7CisgICAgdm9pZCAgKm5sID0gJm1hbmFnZXItPm5vZGVzX2xpc3Q7CisKKworICAgIEZUQ19NcnVOb2RlX1ByZXBlbmQoIChGVENfTXJ1Tm9kZSopbmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19NcnVOb2RlKW5vZGUgKTsKKyAgICBtYW5hZ2VyLT5udW1fbm9kZXMrKzsKKyAgfQorCisKKyAgLyogcmVtb3ZlIGEgbm9kZSBmcm9tIHRoZSBtYW5hZ2VyJ3MgTVJVIGxpc3QgKi8KKyAgc3RhdGljIHZvaWQKKyAgZnRjX25vZGVfbXJ1X3VubGluayggRlRDX05vZGUgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgeworICAgIHZvaWQgICpubCA9ICZtYW5hZ2VyLT5ub2Rlc19saXN0OworCisKKyAgICBGVENfTXJ1Tm9kZV9SZW1vdmUoIChGVENfTXJ1Tm9kZSopbmwsCisgICAgICAgICAgICAgICAgICAgICAgICAoRlRDX01ydU5vZGUpbm9kZSApOworICAgIG1hbmFnZXItPm51bV9ub2Rlcy0tOworICB9CisKKworI2lmbmRlZiBGVENfSU5MSU5FCisKKyAgLyogbW92ZSBhIG5vZGUgdG8gdGhlIGhlYWQgb2YgdGhlIG1hbmFnZXIncyBNUlUgbGlzdCAqLworICBzdGF0aWMgdm9pZAorICBmdGNfbm9kZV9tcnVfdXAoIEZUQ19Ob2RlICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgeworICAgIEZUQ19NcnVOb2RlX1VwKCAoRlRDX01ydU5vZGUqKSZtYW5hZ2VyLT5ub2Rlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAoRlRDX01ydU5vZGUpbm9kZSApOworICB9CisKKworICAvKiBnZXQgYSB0b3AgYnVja2V0IGZvciBzcGVjaWZpZWQgaGFzaCBmcm9tIGNhY2hlLAorICAgKiBib2R5IGZvciBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIKCBjYWNoZSwgaGFzaCApCisgICAqLworICBGVF9MT0NBTF9ERUYoIEZUQ19Ob2RlKiApCisgIGZ0Y19nZXRfdG9wX25vZGVfZm9yX2hhc2goIEZUQ19DYWNoZSAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgaGFzaCApCisgIHsKKyAgICBGVENfTm9kZSogIHBub2RlOworICAgIEZUX09mZnNldCAgaWR4OworCisKKyAgICBpZHggPSBoYXNoICYgY2FjaGUtPm1hc2s7CisgICAgaWYgKCBpZHggPCBjYWNoZS0+cCApCisgICAgICBpZHggPSBoYXNoICYgKCAyICogY2FjaGUtPm1hc2sgKyAxICk7CisgICAgcG5vZGUgPSBjYWNoZS0+YnVja2V0cyArIGlkeDsKKyAgICByZXR1cm4gcG5vZGU7CisgIH0KKworI2VuZGlmIC8qICFGVENfSU5MSU5FICovCisKKworICAvKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW5ub3QgZmFpbC4gIElmIHdlIGNhbm5vdCByZS1zaXplIHRoZQorICAgKiBidWNrZXRzIGFycmF5IGFwcHJvcHJpYXRlbHksIHdlIHNpbXBseSBkZWdyYWRlIHRoZSBoYXNoIHRhYmxlJ3MKKyAgICogcGVyZm9ybWFuY2UhCisgICAqLworICBzdGF0aWMgdm9pZAorICBmdGNfY2FjaGVfcmVzaXplKCBGVENfQ2FjaGUgIGNhY2hlICkKKyAgeworICAgIGZvciAoOzspCisgICAgeworICAgICAgRlRDX05vZGUgIG5vZGUsICpwbm9kZTsKKyAgICAgIEZUX1VGYXN0ICBwICAgICA9IGNhY2hlLT5wOworICAgICAgRlRfVUZhc3QgIG1hc2sgID0gY2FjaGUtPm1hc2s7CisgICAgICBGVF9VRmFzdCAgY291bnQgPSBtYXNrICsgcCArIDE7ICAgIC8qIG51bWJlciBvZiBidWNrZXRzICovCisKKworICAgICAgLyogZG8gd2UgbmVlZCB0byBzaHJpbmsgdGhlIGJ1Y2tldHMgYXJyYXk/ICovCisgICAgICBpZiAoIGNhY2hlLT5zbGFjayA8IDAgKQorICAgICAgeworICAgICAgICBGVENfTm9kZSAgbmV3X2xpc3QgPSBOVUxMOworCisKKyAgICAgICAgLyogdHJ5IHRvIGV4cGFuZCB0aGUgYnVja2V0cyBhcnJheSBfYmVmb3JlXyBzcGxpdHRpbmcKKyAgICAgICAgICogdGhlIGJ1Y2tldCBsaXN0cworICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBwID49IG1hc2sgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBjYWNoZS0+bWVtb3J5OworICAgICAgICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgICAgICAgIC8qIGlmIHdlIGNhbid0IGV4cGFuZCB0aGUgYXJyYXksIGxlYXZlIGltbWVkaWF0ZWx5ICovCisgICAgICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggY2FjaGUtPmJ1Y2tldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtYXNrICsgMSApICogMiwgKCBtYXNrICsgMSApICogNCApICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogc3BsaXQgYSBzaW5nbGUgYnVja2V0ICovCisgICAgICAgIHBub2RlID0gY2FjaGUtPmJ1Y2tldHMgKyBwOworCisgICAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICBub2RlID0gKnBub2RlOworICAgICAgICAgIGlmICggbm9kZSA9PSBOVUxMICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKCBub2RlLT5oYXNoICYgKCBtYXNrICsgMSApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAqcG5vZGUgICAgID0gbm9kZS0+bGluazsKKyAgICAgICAgICAgIG5vZGUtPmxpbmsgPSBuZXdfbGlzdDsKKyAgICAgICAgICAgIG5ld19saXN0ICAgPSBub2RlOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwbm9kZSA9ICZub2RlLT5saW5rOworICAgICAgICB9CisKKyAgICAgICAgY2FjaGUtPmJ1Y2tldHNbcCArIG1hc2sgKyAxXSA9IG5ld19saXN0OworCisgICAgICAgIGNhY2hlLT5zbGFjayArPSBGVENfSEFTSF9NQVhfTE9BRDsKKworICAgICAgICBpZiAoIHAgPj0gbWFzayApCisgICAgICAgIHsKKyAgICAgICAgICBjYWNoZS0+bWFzayA9IDIgKiBtYXNrICsgMTsKKyAgICAgICAgICBjYWNoZS0+cCAgICA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhY2hlLT5wID0gcCArIDE7CisgICAgICB9CisKKyAgICAgIC8qIGRvIHdlIG5lZWQgdG8gZXhwYW5kIHRoZSBidWNrZXRzIGFycmF5PyAqLworICAgICAgZWxzZSBpZiAoIGNhY2hlLT5zbGFjayA+IChGVF9Mb25nKWNvdW50ICogRlRDX0hBU0hfU1VCX0xPQUQgKQorICAgICAgeworICAgICAgICBGVF9VRmFzdCAgIG9sZF9pbmRleCA9IHAgKyBtYXNrOworICAgICAgICBGVENfTm9kZSogIHBvbGQ7CisKKworICAgICAgICBpZiAoIG9sZF9pbmRleCArIDEgPD0gRlRDX0hBU0hfSU5JVElBTF9TSVpFICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIHAgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5tZW1vcnk7CisgICAgICAgICAgRlRfRXJyb3IgICBlcnJvcjsKKworCisgICAgICAgICAgLyogaWYgd2UgY2FuJ3Qgc2hyaW5rIHRoZSBhcnJheSwgbGVhdmUgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBjYWNoZS0+YnVja2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1hc2sgKyAxICkgKiAyLCBtYXNrICsgMSApICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FjaGUtPm1hc2sgPj49IDE7CisgICAgICAgICAgcCAgICAgICAgICAgICA9IGNhY2hlLT5tYXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwLS07CisKKyAgICAgICAgcG5vZGUgPSBjYWNoZS0+YnVja2V0cyArIHA7CisgICAgICAgIHdoaWxlICggKnBub2RlICkKKyAgICAgICAgICBwbm9kZSA9ICYoKnBub2RlKS0+bGluazsKKworICAgICAgICBwb2xkICAgPSBjYWNoZS0+YnVja2V0cyArIG9sZF9pbmRleDsKKyAgICAgICAgKnBub2RlID0gKnBvbGQ7CisgICAgICAgICpwb2xkICA9IE5VTEw7CisKKyAgICAgICAgY2FjaGUtPnNsYWNrIC09IEZUQ19IQVNIX01BWF9MT0FEOworICAgICAgICBjYWNoZS0+cCAgICAgID0gcDsKKyAgICAgIH0KKworICAgICAgLyogb3RoZXJ3aXNlLCB0aGUgaGFzaCB0YWJsZSBpcyBiYWxhbmNlZCAqLworICAgICAgZWxzZQorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworCisgIC8qIHJlbW92ZSBhIG5vZGUgZnJvbSBpdHMgY2FjaGUncyBoYXNoIHRhYmxlICovCisgIHN0YXRpYyB2b2lkCisgIGZ0Y19ub2RlX2hhc2hfdW5saW5rKCBGVENfTm9kZSAgIG5vZGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICBjYWNoZSApCisgIHsKKyAgICBGVENfTm9kZSAgKnBub2RlID0gRlRDX05PREVfX1RPUF9GT1JfSEFTSCggY2FjaGUsIG5vZGUwLT5oYXNoICk7CisKKworICAgIGZvciAoOzspCisgICAgeworICAgICAgRlRDX05vZGUgIG5vZGUgPSAqcG5vZGU7CisKKworICAgICAgaWYgKCBub2RlID09IE5VTEwgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTAoKCAiZnRjX25vZGVfaGFzaF91bmxpbms6IHVua25vd24gbm9kZVxuIiApKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBpZiAoIG5vZGUgPT0gbm9kZTAgKQorICAgICAgICBicmVhazsKKworICAgICAgcG5vZGUgPSAmKCpwbm9kZSktPmxpbms7CisgICAgfQorCisgICAgKnBub2RlICAgICAgPSBub2RlMC0+bGluazsKKyAgICBub2RlMC0+bGluayA9IE5VTEw7CisKKyAgICBjYWNoZS0+c2xhY2srKzsKKyAgICBmdGNfY2FjaGVfcmVzaXplKCBjYWNoZSApOworICB9CisKKworICAvKiBhZGQgYSBub2RlIHRvIHRoZSBgdG9wJyBvZiBpdHMgY2FjaGUncyBoYXNoIHRhYmxlICovCisgIHN0YXRpYyB2b2lkCisgIGZ0Y19ub2RlX2hhc2hfbGluayggRlRDX05vZGUgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRDX05vZGUgICpwbm9kZSA9IEZUQ19OT0RFX19UT1BfRk9SX0hBU0goIGNhY2hlLCBub2RlLT5oYXNoICk7CisKKworICAgIG5vZGUtPmxpbmsgPSAqcG5vZGU7CisgICAgKnBub2RlICAgICA9IG5vZGU7CisKKyAgICBjYWNoZS0+c2xhY2stLTsKKyAgICBmdGNfY2FjaGVfcmVzaXplKCBjYWNoZSApOworICB9CisKKworICAvKiByZW1vdmUgYSBub2RlIGZyb20gdGhlIGNhY2hlIG1hbmFnZXIgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZnRjX25vZGVfZGVzdHJveSggRlRDX05vZGUgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgeworICAgIEZUQ19DYWNoZSAgY2FjaGU7CisKKworI2lmZGVmIEZUX0RFQlVHX0VSUk9SCisgICAgLyogZmluZCBub2RlJ3MgY2FjaGUgKi8KKyAgICBpZiAoIG5vZGUtPmNhY2hlX2luZGV4ID49IG1hbmFnZXItPm51bV9jYWNoZXMgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMCgoICJmdGNfbm9kZV9kZXN0cm95OiBpbnZhbGlkIG5vZGUgaGFuZGxlXG4iICkpOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgY2FjaGUgPSBtYW5hZ2VyLT5jYWNoZXNbbm9kZS0+Y2FjaGVfaW5kZXhdOworCisjaWZkZWYgRlRfREVCVUdfRVJST1IKKyAgICBpZiAoIGNhY2hlID09IE5VTEwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMCgoICJmdGNfbm9kZV9kZXN0cm95OiBpbnZhbGlkIG5vZGUgaGFuZGxlXG4iICkpOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgbWFuYWdlci0+Y3VyX3dlaWdodCAtPSBjYWNoZS0+Y2xhenoubm9kZV93ZWlnaHQoIG5vZGUsIGNhY2hlICk7CisKKyAgICAvKiByZW1vdmUgbm9kZSBmcm9tIG1ydSBsaXN0ICovCisgICAgZnRjX25vZGVfbXJ1X3VubGluayggbm9kZSwgbWFuYWdlciApOworCisgICAgLyogcmVtb3ZlIG5vZGUgZnJvbSBjYWNoZSdzIGhhc2ggdGFibGUgKi8KKyAgICBmdGNfbm9kZV9oYXNoX3VubGluayggbm9kZSwgY2FjaGUgKTsKKworICAgIC8qIG5vdyBmaW5hbGl6ZSBpdCAqLworICAgIGNhY2hlLT5jbGF6ei5ub2RlX2ZyZWUoIG5vZGUsIGNhY2hlICk7CisKKyNpZiAwCisgICAgLyogY2hlY2ssIGp1c3QgaW4gY2FzZSBvZiBnZW5lcmFsIGNvcnJ1cHRpb24gOi0pICovCisgICAgaWYgKCBtYW5hZ2VyLT5udW1fbm9kZXMgPT0gMCApCisgICAgICBGVF9UUkFDRTAoKCAiZnRjX25vZGVfZGVzdHJveTogaW52YWxpZCBjYWNoZSBub2RlIGNvdW50ICglZClcbiIsCisgICAgICAgICAgICAgICAgICBtYW5hZ2VyLT5udW1fbm9kZXMgKSk7CisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBDQUNIRSBDTEFTUyAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX0NhY2hlX0luaXQoIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgcmV0dXJuIGZ0Y19jYWNoZV9pbml0KCBjYWNoZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2NhY2hlX2luaXQoIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBjYWNoZS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgIGNhY2hlLT5wICAgICA9IDA7CisgICAgY2FjaGUtPm1hc2sgID0gRlRDX0hBU0hfSU5JVElBTF9TSVpFIC0gMTsKKyAgICBjYWNoZS0+c2xhY2sgPSBGVENfSEFTSF9JTklUSUFMX1NJWkUgKiBGVENfSEFTSF9NQVhfTE9BRDsKKworICAgICh2b2lkKUZUX05FV19BUlJBWSggY2FjaGUtPmJ1Y2tldHMsIEZUQ19IQVNIX0lOSVRJQUxfU0laRSAqIDIgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIEZUQ19DYWNoZV9DbGVhciggRlRDX0NhY2hlICBjYWNoZSApCisgIHsKKyAgICBpZiAoIGNhY2hlICYmIGNhY2hlLT5idWNrZXRzICkKKyAgICB7CisgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciA9IGNhY2hlLT5tYW5hZ2VyOworICAgICAgRlRfVUZhc3QgICAgIGk7CisgICAgICBGVF9VRmFzdCAgICAgY291bnQ7CisKKworICAgICAgY291bnQgPSBjYWNoZS0+cCArIGNhY2hlLT5tYXNrICsgMTsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRDX05vZGUgICpwbm9kZSA9IGNhY2hlLT5idWNrZXRzICsgaSwgbmV4dCwgbm9kZSA9ICpwbm9kZTsKKworCisgICAgICAgIHdoaWxlICggbm9kZSApCisgICAgICAgIHsKKyAgICAgICAgICBuZXh0ICAgICAgICA9IG5vZGUtPmxpbms7CisgICAgICAgICAgbm9kZS0+bGluayAgPSBOVUxMOworCisgICAgICAgICAgLyogcmVtb3ZlIG5vZGUgZnJvbSBtcnUgbGlzdCAqLworICAgICAgICAgIGZ0Y19ub2RlX21ydV91bmxpbmsoIG5vZGUsIG1hbmFnZXIgKTsKKworICAgICAgICAgIC8qIG5vdyBmaW5hbGl6ZSBpdCAqLworICAgICAgICAgIG1hbmFnZXItPmN1cl93ZWlnaHQgLT0gY2FjaGUtPmNsYXp6Lm5vZGVfd2VpZ2h0KCBub2RlLCBjYWNoZSApOworCisgICAgICAgICAgY2FjaGUtPmNsYXp6Lm5vZGVfZnJlZSggbm9kZSwgY2FjaGUgKTsKKyAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBjYWNoZS0+YnVja2V0c1tpXSA9IE5VTEw7CisgICAgICB9CisgICAgICBmdGNfY2FjaGVfcmVzaXplKCBjYWNoZSApOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZnRjX2NhY2hlX2RvbmUoIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgaWYgKCBjYWNoZS0+bWVtb3J5ICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5tZW1vcnk7CisKKworICAgICAgRlRDX0NhY2hlX0NsZWFyKCBjYWNoZSApOworCisgICAgICBGVF9GUkVFKCBjYWNoZS0+YnVja2V0cyApOworICAgICAgY2FjaGUtPm1hc2sgID0gMDsKKyAgICAgIGNhY2hlLT5wICAgICA9IDA7CisgICAgICBjYWNoZS0+c2xhY2sgPSAwOworCisgICAgICBjYWNoZS0+bWVtb3J5ID0gTlVMTDsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19DYWNoZV9Eb25lKCBGVENfQ2FjaGUgIGNhY2hlICkKKyAgeworICAgIGZ0Y19jYWNoZV9kb25lKCBjYWNoZSApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdGNfY2FjaGVfYWRkKCBGVENfQ2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgIGhhc2gsCisgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgbm9kZSApCisgIHsKKyAgICBub2RlLT5oYXNoICAgICAgICA9IGhhc2g7CisgICAgbm9kZS0+Y2FjaGVfaW5kZXggPSAoRlRfVUludDE2KWNhY2hlLT5pbmRleDsKKyAgICBub2RlLT5yZWZfY291bnQgICA9IDA7CisKKyAgICBmdGNfbm9kZV9oYXNoX2xpbmsoIG5vZGUsIGNhY2hlICk7CisgICAgZnRjX25vZGVfbXJ1X2xpbmsoIG5vZGUsIGNhY2hlLT5tYW5hZ2VyICk7CisKKyAgICB7CisgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciA9IGNhY2hlLT5tYW5hZ2VyOworCisKKyAgICAgIG1hbmFnZXItPmN1cl93ZWlnaHQgKz0gY2FjaGUtPmNsYXp6Lm5vZGVfd2VpZ2h0KCBub2RlLCBjYWNoZSApOworCisgICAgICBpZiAoIG1hbmFnZXItPmN1cl93ZWlnaHQgPj0gbWFuYWdlci0+bWF4X3dlaWdodCApCisgICAgICB7CisgICAgICAgIG5vZGUtPnJlZl9jb3VudCsrOworICAgICAgICBGVENfTWFuYWdlcl9Db21wcmVzcyggbWFuYWdlciApOworICAgICAgICBub2RlLT5yZWZfY291bnQtLTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBGVENfQ2FjaGVfTmV3Tm9kZSggRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICphbm9kZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRDX05vZGUgIG5vZGU7CisKKworICAgIC8qCisgICAgICogV2UgdXNlIHRoZSBGVENfQ0FDSEVfVFJZTE9PUCBtYWNyb3MgdG8gc3VwcG9ydCBvdXQtb2YtbWVtb3J5CisgICAgICogZXJyb3JzIChPT00pIGNvcnJlY3RseSwgaS5lLiwgYnkgZmx1c2hpbmcgdGhlIGNhY2hlIHByb2dyZXNzaXZlbHkKKyAgICAgKiBpbiBvcmRlciB0byBtYWtlIG1vcmUgcm9vbS4KKyAgICAgKi8KKworICAgIEZUQ19DQUNIRV9UUllMT09QKCBjYWNoZSApCisgICAgeworICAgICAgZXJyb3IgPSBjYWNoZS0+Y2xhenoubm9kZV9uZXcoICZub2RlLCBxdWVyeSwgY2FjaGUgKTsKKyAgICB9CisgICAgRlRDX0NBQ0hFX1RSWUxPT1BfRU5EKCBOVUxMICk7CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIG5vZGUgPSBOVUxMOworICAgIGVsc2UKKyAgICB7CisgICAgIC8qIGRvbid0IGFzc3VtZSB0aGF0IHRoZSBjYWNoZSBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1Y2tldHMsIHNpbmNlCisgICAgICAqIG91ciBhbGxvY2F0aW9uIHJlcXVlc3QgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgZ2xvYmFsIGNhY2hlIGZsdXNoaW5nCisgICAgICAqLworICAgICAgZnRjX2NhY2hlX2FkZCggY2FjaGUsIGhhc2gsIG5vZGUgKTsKKyAgICB9CisKKyAgICAqYW5vZGUgPSBub2RlOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNpZm5kZWYgRlRDX0lOTElORQorCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBGVENfQ2FjaGVfTG9va3VwKCBGVENfQ2FjaGUgICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgKmFub2RlICkKKyAgeworICAgIEZUQ19Ob2RlKiAgYnVja2V0OworICAgIEZUQ19Ob2RlKiAgcG5vZGU7CisgICAgRlRDX05vZGUgICBub2RlOworICAgIEZUX0Vycm9yICAgZXJyb3IgICAgICAgID0gRlRfRXJyX09rOworICAgIEZUX0Jvb2wgICAgbGlzdF9jaGFuZ2VkID0gRkFMU0U7CisKKyAgICBGVENfTm9kZV9Db21wYXJlRnVuYyAgY29tcGFyZSA9IGNhY2hlLT5jbGF6ei5ub2RlX2NvbXBhcmU7CisKKworICAgIGlmICggY2FjaGUgPT0gTlVMTCB8fCBhbm9kZSA9PSBOVUxMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogR28gdG8gdGhlIGB0b3AnIG5vZGUgb2YgdGhlIGxpc3Qgc2hhcmluZyBzYW1lIG1hc2tlZCBoYXNoICovCisgICAgYnVja2V0ID0gcG5vZGUgPSBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIKCBjYWNoZSwgaGFzaCApOworCisgICAgLyogTG9va3VwIGEgbm9kZSB3aXRoIGV4YWN0bHkgc2FtZSBoYXNoIGFuZCBxdWVyaWVkIHByb3BlcnRpZXMuICAqLworICAgIC8qIE5PVEU6IF9ub2Rjb21wKCkgbWF5IGNoYW5nZSB0aGUgbGlua2VkIGxpc3QgdG8gcmVkdWNlIG1lbW9yeS4gKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIG5vZGUgPSAqcG5vZGU7CisgICAgICBpZiAoIG5vZGUgPT0gTlVMTCApCisgICAgICAgIGdvdG8gTmV3Tm9kZTsKKworICAgICAgaWYgKCBub2RlLT5oYXNoID09IGhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBjb21wYXJlKCBub2RlLCBxdWVyeSwgY2FjaGUsICZsaXN0X2NoYW5nZWQgKSApCisgICAgICAgIGJyZWFrOworCisgICAgICBwbm9kZSA9ICZub2RlLT5saW5rOworICAgIH0KKworICAgIGlmICggbGlzdF9jaGFuZ2VkICkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgYnVja2V0IGJ5IG1vZGlmaWVkIGxpbmtlZCBsaXN0ICovCisgICAgICBidWNrZXQgPSBwbm9kZSA9IEZUQ19OT0RFX19UT1BfRk9SX0hBU0goIGNhY2hlLCBoYXNoICk7CisKKyAgICAgIC8qIFVwZGF0ZSBwbm9kZSBieSBtb2RpZmllZCBsaW5rZWQgbGlzdCAqLworICAgICAgd2hpbGUgKCAqcG5vZGUgIT0gbm9kZSApCisgICAgICB7CisgICAgICAgIGlmICggKnBub2RlID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAiRlRDX0NhY2hlX0xvb2t1cDogb29wcyEhISAgbm9kZSBtaXNzaW5nXG4iICkpOworICAgICAgICAgIGdvdG8gTmV3Tm9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcG5vZGUgPSAmKCgqcG5vZGUpLT5saW5rKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBSZW9yZGVyIHRoZSBsaXN0IHRvIG1vdmUgdGhlIGZvdW5kIG5vZGUgdG8gdGhlIGB0b3AnICovCisgICAgaWYgKCBub2RlICE9ICpidWNrZXQgKQorICAgIHsKKyAgICAgICpwbm9kZSAgICAgPSBub2RlLT5saW5rOworICAgICAgbm9kZS0+bGluayA9ICpidWNrZXQ7CisgICAgICAqYnVja2V0ICAgID0gbm9kZTsKKyAgICB9CisKKyAgICAvKiBtb3ZlIHRvIGhlYWQgb2YgTVJVIGxpc3QgKi8KKyAgICB7CisgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciA9IGNhY2hlLT5tYW5hZ2VyOworCisKKyAgICAgIGlmICggbm9kZSAhPSBtYW5hZ2VyLT5ub2Rlc19saXN0ICkKKyAgICAgICAgZnRjX25vZGVfbXJ1X3VwKCBub2RlLCBtYW5hZ2VyICk7CisgICAgfQorICAgICphbm9kZSA9IG5vZGU7CisKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgTmV3Tm9kZToKKyAgICByZXR1cm4gRlRDX0NhY2hlX05ld05vZGUoIGNhY2hlLCBoYXNoLCBxdWVyeSwgYW5vZGUgKTsKKyAgfQorCisjZW5kaWYgLyogIUZUQ19JTkxJTkUgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19DYWNoZV9SZW1vdmVGYWNlSUQoIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRmFjZUlEICBmYWNlX2lkICkKKyAgeworICAgIEZUX1VGYXN0ICAgICBpLCBjb3VudDsKKyAgICBGVENfTWFuYWdlciAgbWFuYWdlciA9IGNhY2hlLT5tYW5hZ2VyOworICAgIEZUQ19Ob2RlICAgICBmcmVlcyAgID0gTlVMTDsKKworCisgICAgY291bnQgPSBjYWNoZS0+cCArIGNhY2hlLT5tYXNrICsgMTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgIEZUQ19Ob2RlKiAgYnVja2V0ID0gY2FjaGUtPmJ1Y2tldHMgKyBpOworICAgICAgRlRDX05vZGUqICBwbm9kZSAgPSBidWNrZXQ7CisKKworICAgICAgZm9yICggOzsgKQorICAgICAgeworICAgICAgICBGVENfTm9kZSAgbm9kZSA9ICpwbm9kZTsKKyAgICAgICAgRlRfQm9vbCAgIGxpc3RfY2hhbmdlZCA9IEZBTFNFOworCisKKyAgICAgICAgaWYgKCBub2RlID09IE5VTEwgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggY2FjaGUtPmNsYXp6Lm5vZGVfcmVtb3ZlX2ZhY2VpZCggbm9kZSwgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSwgJmxpc3RfY2hhbmdlZCApICkKKyAgICAgICAgeworICAgICAgICAgICpwbm9kZSAgICAgPSBub2RlLT5saW5rOworICAgICAgICAgIG5vZGUtPmxpbmsgPSBmcmVlczsKKyAgICAgICAgICBmcmVlcyAgICAgID0gbm9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcG5vZGUgPSAmbm9kZS0+bGluazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZW1vdmUgYWxsIG5vZGVzIGluIHRoZSBmcmVlIGxpc3QgKi8KKyAgICB3aGlsZSAoIGZyZWVzICkKKyAgICB7CisgICAgICBGVENfTm9kZSAgbm9kZTsKKworCisgICAgICBub2RlICA9IGZyZWVzOworICAgICAgZnJlZXMgPSBub2RlLT5saW5rOworCisgICAgICBtYW5hZ2VyLT5jdXJfd2VpZ2h0IC09IGNhY2hlLT5jbGF6ei5ub2RlX3dlaWdodCggbm9kZSwgY2FjaGUgKTsKKyAgICAgIGZ0Y19ub2RlX21ydV91bmxpbmsoIG5vZGUsIG1hbmFnZXIgKTsKKworICAgICAgY2FjaGUtPmNsYXp6Lm5vZGVfZnJlZSggbm9kZSwgY2FjaGUgKTsKKworICAgICAgY2FjaGUtPnNsYWNrKys7CisgICAgfQorCisgICAgZnRjX2NhY2hlX3Jlc2l6ZSggY2FjaGUgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNjYWNoZS5oIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTdjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKQEAgLTAsMCArMSwzNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2NhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBpbnRlcm5hbCBjYWNoZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQ0NBQ0hFX0hfXworI2RlZmluZSBfX0ZUQ0NBQ0hFX0hfXworCisKKyNpbmNsdWRlICJmdGNtcnUuaCIKKworRlRfQkVHSU5fSEVBREVSCisKKyNkZWZpbmUgX0ZUQ19GQUNFX0lEX0hBU0goIGkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoIChGVF9PZmZzZXQpKGkpID4+IDMgKSBeICggKEZUX09mZnNldCkoaSkgPDwgNyApICkKKworICAvKiBoYW5kbGUgdG8gY2FjaGUgb2JqZWN0ICovCisgIHR5cGVkZWYgc3RydWN0IEZUQ19DYWNoZVJlY18qICBGVENfQ2FjaGU7CisKKyAgLyogaGFuZGxlIHRvIGNhY2hlIGNsYXNzICovCisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IEZUQ19DYWNoZUNsYXNzUmVjXyogIEZUQ19DYWNoZUNsYXNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgIENBQ0hFIE5PREUgREVGSU5JVElPTlMgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFYWNoIGNhY2hlIGNvbnRyb2xzIG9uZSBvciBtb3JlIGNhY2hlIG5vZGVzLiAgRWFjaCBub2RlIGlzIHBhcnQgb2YgICAgKi8KKyAgLyogdGhlIGdsb2JhbF9scnUgbGlzdCBvZiB0aGUgbWFuYWdlci4gIEl0cyBgZGF0YScgZmllbGQgaG93ZXZlciBpcyB1c2VkICovCisgIC8qIGFzIGEgcmVmZXJlbmNlIGNvdW50IGZvciBub3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSBub2RlIGNhbiBiZSBhbnl0aGluZywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGhlbGQgYnkgICovCisgIC8qIHRoZSBjYWNoZS4gIEl0IGNhbiBiZSBhbiBpbmRpdmlkdWFsIGdseXBoIGltYWdlLCBhIHNldCBvZiBiaXRtYXBzICAgICAqLworICAvKiBnbHlwaHMgZm9yIGEgZ2l2ZW4gc2l6ZSwgc29tZSBtZXRyaWNzLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHN0cnVjdHVyZSBzaXplIHNob3VsZCBiZSAyMCBieXRlcyBvbiAzMi1iaXRzIG1hY2hpbmVzICovCisgIHR5cGVkZWYgc3RydWN0ICBGVENfTm9kZVJlY18KKyAgeworICAgIEZUQ19NcnVOb2RlUmVjICBtcnU7ICAgICAgICAgIC8qIGNpcmN1bGFyIG1ydSBsaXN0IHBvaW50ZXIgICAgICAgICAgICovCisgICAgRlRDX05vZGUgICAgICAgIGxpbms7ICAgICAgICAgLyogdXNlZCBmb3IgaGFzaGluZyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9PZmZzZXQgICAgICAgaGFzaDsgICAgICAgICAvKiB1c2VkIGZvciBoYXNoaW5nIHRvbyAgICAgICAgICAgICAgICAqLworICAgIEZUX1VTaG9ydCAgICAgICBjYWNoZV9pbmRleDsgIC8qIGluZGV4IG9mIGNhY2hlIHRoZSBub2RlIGJlbG9uZ3MgdG8gICovCisgICAgRlRfU2hvcnQgICAgICAgIHJlZl9jb3VudDsgICAgLyogcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIG5vZGUgICAgICAgKi8KKworICB9IEZUQ19Ob2RlUmVjOworCisKKyNkZWZpbmUgRlRDX05PREUoIHggKSAgICAoIChGVENfTm9kZSkoeCkgKQorI2RlZmluZSBGVENfTk9ERV9QKCB4ICkgICggKEZUQ19Ob2RlKikoeCkgKQorCisjZGVmaW5lIEZUQ19OT0RFX19ORVhUKCB4ICkgIEZUQ19OT0RFKCAoeCktPm1ydS5uZXh0ICkKKyNkZWZpbmUgRlRDX05PREVfX1BSRVYoIHggKSAgRlRDX05PREUoICh4KS0+bXJ1LnByZXYgKQorCisjaWZkZWYgRlRDX0lOTElORQorI2RlZmluZSBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIKCBjYWNoZSwgaGFzaCApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoICggY2FjaGUgKS0+YnVja2V0cyArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKCAoICggKCBoYXNoICkgJiAgICggY2FjaGUgKS0+bWFzayApIDwgKCBjYWNoZSApLT5wICkgXAorICAgICAgICAgICAgICA/ICggKCBoYXNoICkgJiAoICggY2FjaGUgKS0+bWFzayAqIDIgKyAxICkgKSAgICAgICAgXAorICAgICAgICAgICAgICA6ICggKCBoYXNoICkgJiAgICggY2FjaGUgKS0+bWFzayApICkgKQorI2Vsc2UKKyAgRlRfTE9DQUwoIEZUQ19Ob2RlKiApCisgIGZ0Y19nZXRfdG9wX25vZGVfZm9yX2hhc2goIEZUQ19DYWNoZSAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgaGFzaCApOworI2RlZmluZSBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIKCBjYWNoZSwgaGFzaCApICAgICAgICAgICAgXAorICAgICAgICBmdGNfZ2V0X3RvcF9ub2RlX2Zvcl9oYXNoKCAoIGNhY2hlICksICggaGFzaCApICkKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBDQUNIRSBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogaW5pdGlhbGl6ZSBhIG5ldyBjYWNoZSBub2RlICovCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVENfTm9kZV9OZXdGdW5jKSggRlRDX05vZGUgICAgKnBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgICBjYWNoZSApOworCisgIHR5cGVkZWYgRlRfT2Zmc2V0CisgICgqRlRDX05vZGVfV2VpZ2h0RnVuYykoIEZUQ19Ob2RlICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICBjYWNoZSApOworCisgIC8qIGNvbXBhcmUgYSBub2RlIHRvIGEgZ2l2ZW4ga2V5IHBhaXIgKi8KKyAgdHlwZWRlZiBGVF9Cb29sCisgICgqRlRDX05vZGVfQ29tcGFyZUZ1bmMpKCBGVENfTm9kZSAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICBsaXN0X2NoYW5nZWQgKTsKKworCisgIHR5cGVkZWYgdm9pZAorICAoKkZUQ19Ob2RlX0ZyZWVGdW5jKSggRlRDX05vZGUgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICBjYWNoZSApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVENfQ2FjaGVfSW5pdEZ1bmMpKCBGVENfQ2FjaGUgIGNhY2hlICk7CisKKyAgdHlwZWRlZiB2b2lkCisgICgqRlRDX0NhY2hlX0RvbmVGdW5jKSggRlRDX0NhY2hlICBjYWNoZSApOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19DYWNoZUNsYXNzUmVjXworICB7CisgICAgRlRDX05vZGVfTmV3RnVuYyAgICAgIG5vZGVfbmV3OworICAgIEZUQ19Ob2RlX1dlaWdodEZ1bmMgICBub2RlX3dlaWdodDsKKyAgICBGVENfTm9kZV9Db21wYXJlRnVuYyAgbm9kZV9jb21wYXJlOworICAgIEZUQ19Ob2RlX0NvbXBhcmVGdW5jICBub2RlX3JlbW92ZV9mYWNlaWQ7CisgICAgRlRDX05vZGVfRnJlZUZ1bmMgICAgIG5vZGVfZnJlZTsKKworICAgIEZUX09mZnNldCAgICAgICAgICAgICBjYWNoZV9zaXplOworICAgIEZUQ19DYWNoZV9Jbml0RnVuYyAgICBjYWNoZV9pbml0OworICAgIEZUQ19DYWNoZV9Eb25lRnVuYyAgICBjYWNoZV9kb25lOworCisgIH0gRlRDX0NhY2hlQ2xhc3NSZWM7CisKKworICAvKiBlYWNoIGNhY2hlIHJlYWxseSBpbXBsZW1lbnRzIGEgZHluYW1pYyBoYXNoIHRhYmxlIHRvIG1hbmFnZSBpdHMgbm9kZXMgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19DYWNoZVJlY18KKyAgeworICAgIEZUX1VGYXN0ICAgICAgICAgICBwOworICAgIEZUX1VGYXN0ICAgICAgICAgICBtYXNrOworICAgIEZUX0xvbmcgICAgICAgICAgICBzbGFjazsKKyAgICBGVENfTm9kZSogICAgICAgICAgYnVja2V0czsKKworICAgIEZUQ19DYWNoZUNsYXNzUmVjICBjbGF6ejsgICAgICAgLyogbG9jYWwgY29weSwgZm9yIHNwZWVkICAqLworCisgICAgRlRDX01hbmFnZXIgICAgICAgIG1hbmFnZXI7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsKKyAgICBGVF9VSW50ICAgICAgICAgICAgaW5kZXg7ICAgICAgIC8qIGluIG1hbmFnZXIncyB0YWJsZSAgICAgKi8KKworICAgIEZUQ19DYWNoZUNsYXNzICAgICBvcmdfY2xhc3M7ICAgLyogb3JpZ2luYWwgY2xhc3MgcG9pbnRlciAqLworCisgIH0gRlRDX0NhY2hlUmVjOworCisKKyNkZWZpbmUgRlRDX0NBQ0hFKCB4ICkgICAgKCAoRlRDX0NhY2hlKSh4KSApCisjZGVmaW5lIEZUQ19DQUNIRV9QKCB4ICkgICggKEZUQ19DYWNoZSopKHgpICkKKworCisgIC8qIGRlZmF1bHQgY2FjaGUgaW5pdGlhbGl6ZSAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBGVENfQ2FjaGVfSW5pdCggRlRDX0NhY2hlICBjYWNoZSApOworCisgIC8qIGRlZmF1bHQgY2FjaGUgZmluYWxpemVyICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX0NhY2hlX0RvbmUoIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICAvKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gbG9vayB1cCB0aGUgY2FjaGUuICBJZiBubyBjb3JyZXNwb25kaW5nCisgICAqIG5vZGUgaXMgZm91bmQsIGEgbmV3IG9uZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuICBUaGlzIGZ1bmN0aW9uCisgICAqIGlzIGNhcGFibGUgb2YgZmx1c2hpbmcgdGhlIGNhY2hlIGFkZXF1YXRlbHkgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICogbmV3IGNhY2hlIG9iamVjdC4KKyAgICovCisKKyNpZm5kZWYgRlRDX0lOTElORQorICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBGVENfQ2FjaGVfTG9va3VwKCBGVENfQ2FjaGUgICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgKmFub2RlICk7CisjZW5kaWYKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBGVENfQ2FjaGVfTmV3Tm9kZSggRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICphbm9kZSApOworCisgIC8qIFJlbW92ZSBhbGwgbm9kZXMgdGhhdCByZWxhdGUgdG8gYSBnaXZlbiBmYWNlX2lkLiAgVGhpcyBpcyB1c2VmdWwKKyAgICogd2hlbiB1bi1pbnN0YWxsaW5nIGZvbnRzLiAgTm90ZSB0aGF0IGlmIGEgY2FjaGUgbm9kZSByZWxhdGVzIHRvCisgICAqIHRoZSBmYWNlX2lkIGJ1dCBpcyBsb2NrZWQgKGkuZS4sIGhhcyBgcmVmX2NvdW50ID4gMCcpLCB0aGUgbm9kZQorICAgKiB3aWxsIF9ub3RfIGJlIGRlc3Ryb3llZCwgYnV0IGl0cyBpbnRlcm5hbCBmYWNlX2lkIHJlZmVyZW5jZSB3aWxsCisgICAqIGJlIG1vZGlmaWVkLgorICAgKgorICAgKiBUaGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgdGhhdCB0aGUgbm9kZSB3aWxsIG5ldmVyIGNvbWUgYmFjaworICAgKiBpbiBmdXJ0aGVyIGxvb2t1cCByZXF1ZXN0cywgYW5kIHdpbGwgYmUgZmx1c2hlZCBvbiBkZW1hbmQgZnJvbQorICAgKiB0aGUgY2FjaGUgbm9ybWFsbHkgd2hlbiBpdHMgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMC4KKyAgICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX0NhY2hlX1JlbW92ZUZhY2VJRCggRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19GYWNlSUQgIGZhY2VfaWQgKTsKKworCisjaWZkZWYgRlRDX0lOTElORQorCisjZGVmaW5lIEZUQ19DQUNIRV9MT09LVVBfQ01QKCBjYWNoZSwgbm9kZWNtcCwgaGFzaCwgcXVlcnksIG5vZGUsIGVycm9yICkgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVENfTm9kZSAgICAgICAgICAgICAqX2J1Y2tldCwgKl9wbm9kZSwgX25vZGU7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRDX0NhY2hlICAgICAgICAgICAgIF9jYWNoZSAgID0gRlRDX0NBQ0hFKGNhY2hlKTsgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX09mZnNldCAgICAgICAgICAgICBfaGFzaCAgICA9IChGVF9PZmZzZXQpKGhhc2gpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBGVENfTm9kZV9Db21wYXJlRnVuYyAgX25vZGNvbXAgPSAoRlRDX05vZGVfQ29tcGFyZUZ1bmMpKG5vZGVjbXApOyAgICBcCisgICAgRlRfQm9vbCAgICAgICAgICAgICAgIF9saXN0X2NoYW5nZWQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXJyb3IgPSBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5vZGUgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogR28gdG8gdGhlIGB0b3AnIG5vZGUgb2YgdGhlIGxpc3Qgc2hhcmluZyBzYW1lIG1hc2tlZCBoYXNoICovICAgICAgXAorICAgIF9idWNrZXQgPSBfcG5vZGUgPSBGVENfTk9ERV9fVE9QX0ZPUl9IQVNIKCBfY2FjaGUsIF9oYXNoICk7ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogTG9vayB1cCBhIG5vZGUgd2l0aCBpZGVudGljYWwgaGFzaCBhbmQgcXVlcmllZCBwcm9wZXJ0aWVzLiAgICAqLyAgXAorICAgIC8qIE5PVEU6IF9ub2Rjb21wKCkgbWF5IGNoYW5nZSB0aGUgbGlua2VkIGxpc3QgdG8gcmVkdWNlIG1lbW9yeS4gKi8gIFwKKyAgICBmb3IgKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX25vZGUgPSAqX3Bub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICggX25vZGUgPT0gTlVMTCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gX05ld05vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICggX25vZGUtPmhhc2ggPT0gX2hhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgICAgICAgICBcCisgICAgICAgICAgIF9ub2Rjb21wKCBfbm9kZSwgcXVlcnksIF9jYWNoZSwgJl9saXN0X2NoYW5nZWQgKSApICAgICAgICAgICAgXAorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfcG5vZGUgPSAmX25vZGUtPmxpbms7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBfbGlzdF9jaGFuZ2VkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC8qIFVwZGF0ZSBfYnVja2V0IGJ5IHBvc3NpYmx5IG1vZGlmaWVkIGxpbmtlZCBsaXN0ICovICAgICAgICAgICAgICBcCisgICAgICBfYnVja2V0ID0gX3Bub2RlID0gRlRDX05PREVfX1RPUF9GT1JfSEFTSCggX2NhY2hlLCBfaGFzaCApOyAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC8qIFVwZGF0ZSBfcG5vZGUgYnkgcG9zc2libHkgbW9kaWZpZWQgbGlua2VkIGxpc3QgKi8gICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAoICpfcG5vZGUgIT0gX25vZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCAqX3Bub2RlID09IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VSUk9SKCggIkZUQ19DQUNIRV9MT09LVVBfQ01QOiBvb3BzISEhIG5vZGUgbWlzc2luZ1xuIiApKTsgIFwKKyAgICAgICAgICBnb3RvIF9OZXdOb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBfcG5vZGUgPSAmKCgqX3Bub2RlKS0+bGluayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogUmVvcmRlciB0aGUgbGlzdCB0byBtb3ZlIHRoZSBmb3VuZCBub2RlIHRvIHRoZSBgdG9wJyAqLyAgICAgICAgICAgXAorICAgIGlmICggX25vZGUgIT0gKl9idWNrZXQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAqX3Bub2RlICAgICA9IF9ub2RlLT5saW5rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX25vZGUtPmxpbmsgPSAqX2J1Y2tldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICpfYnVja2V0ICAgID0gX25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBVcGRhdGUgTVJVIGxpc3QgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRDX01hbmFnZXIgIF9tYW5hZ2VyID0gX2NhY2hlLT5tYW5hZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHZvaWQqICAgICAgICBfbmwgICAgICA9ICZfbWFuYWdlci0+bm9kZXNfbGlzdDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICggX25vZGUgIT0gX21hbmFnZXItPm5vZGVzX2xpc3QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZUQ19NcnVOb2RlX1VwKCAoRlRDX01ydU5vZGUqKV9ubCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19NcnVOb2RlKV9ub2RlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX05ld05vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXJyb3IgPSBGVENfQ2FjaGVfTmV3Tm9kZSggX2NhY2hlLCBfaGFzaCwgcXVlcnksICZfbm9kZSApOyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX09rOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbm9kZSA9IF9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9FTkRfU1RNTlQKKworI2Vsc2UgLyogIUZUQ19JTkxJTkUgKi8KKworI2RlZmluZSBGVENfQ0FDSEVfTE9PS1VQX0NNUCggY2FjaGUsIG5vZGVjbXAsIGhhc2gsIHF1ZXJ5LCBub2RlLCBlcnJvciApIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXJyb3IgPSBGVENfQ2FjaGVfTG9va3VwKCBGVENfQ0FDSEUoIGNhY2hlICksIGhhc2gsIHF1ZXJ5LCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19Ob2RlKikmKG5vZGUpICk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNlbmRpZiAvKiAhRlRDX0lOTElORSAqLworCisKKyAgLyoKKyAgICogVGhpcyBtYWNybywgdG9nZXRoZXIgd2l0aCBGVENfQ0FDSEVfVFJZTE9PUF9FTkQsIGRlZmluZXMgYSByZXRyeQorICAgKiBsb29wIHRvIGZsdXNoIHRoZSBjYWNoZSByZXBlYXRlZGx5IGluIGNhc2Ugb2YgbWVtb3J5IG92ZXJmbG93cy4KKyAgICoKKyAgICogSXQgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGNhY2hlIG5vZGUsIG9yIHdpdGhpbiBhIGxvb2t1cAorICAgKiB0aGF0IG5lZWRzIHRvIGFsbG9jYXRlIGRhdGEgKGUuZy4gdGhlIHNiaXQgY2FjaGUgbG9va3VwKS4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogICB7CisgICAqICAgICBGVENfQ0FDSEVfVFJZTE9PUCggY2FjaGUgKQorICAgKiAgICAgICBlcnJvciA9IGxvYWRfZGF0YSggLi4uICk7CisgICAqICAgICBGVENfQ0FDSEVfVFJZTE9PUF9FTkQoKQorICAgKiAgIH0KKyAgICoKKyAgICovCisjZGVmaW5lIEZUQ19DQUNIRV9UUllMT09QKCBjYWNoZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVENfTWFuYWdlciAgX3RyeV9tYW5hZ2VyID0gRlRDX0NBQ0hFKCBjYWNoZSApLT5tYW5hZ2VyOyBcCisgICAgRlRfVUludCAgICAgIF90cnlfY291bnQgICA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yICg7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX1VJbnQgIF90cnlfZG9uZTsKKworCisjZGVmaW5lIEZUQ19DQUNIRV9UUllMT09QX0VORCggbGlzdF9jaGFuZ2VkICkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoICFlcnJvciB8fCBGVF9FUlJfTkVRKCBlcnJvciwgT3V0X09mX01lbW9yeSApICkgICAgICAgICBcCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfdHJ5X2RvbmUgPSBGVENfTWFuYWdlcl9GbHVzaE4oIF90cnlfbWFuYWdlciwgX3RyeV9jb3VudCApOyBcCisgICAgICBpZiAoIF90cnlfZG9uZSA+IDAgJiYgKCBsaXN0X2NoYW5nZWQgKSApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICooRlRfQm9vbCopKCBsaXN0X2NoYW5nZWQgKSA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoIF90cnlfZG9uZSA9PSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoIF90cnlfZG9uZSA9PSBfdHJ5X2NvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF90cnlfY291bnQgKj0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICggX3RyeV9jb3VudCA8IF90cnlfZG9uZSAgICAgICAgICAgICAgfHwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfdHJ5X2NvdW50ID4gX3RyeV9tYW5hZ2VyLT5udW1fbm9kZXMgKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX3RyeV9jb3VudCA9IF90cnlfbWFuYWdlci0+bnVtX25vZGVzOyAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19GVENDQUNIRV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjY2JhY2suaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjY2JhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzIzN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNjYmFjay5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2NiYWNrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDYWxsYmFjayBmdW5jdGlvbnMgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVENDQkFDS19IX18KKyNkZWZpbmUgX19GVENDQkFDS19IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSAiZnRjbXJ1LmgiCisjaW5jbHVkZSAiZnRjaW1hZ2UuaCIKKyNpbmNsdWRlICJmdGNtYW5hZy5oIgorI2luY2x1ZGUgImZ0Y2dseXBoLmgiCisjaW5jbHVkZSAiZnRjc2JpdHMuaCIKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZnRjX2lub2RlX2ZyZWUoIEZUQ19Ob2RlICAgaW5vZGUsCisgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgZnRjX2lub2RlX25ldyggRlRDX05vZGUgICAqcGlub2RlLAorICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBncXVlcnksCisgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIEZUX09mZnNldCApCisgIGZ0Y19pbm9kZV93ZWlnaHQoIEZUQ19Ob2RlICAgaW5vZGUsCisgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZnRjX3Nub2RlX2ZyZWUoIEZUQ19Ob2RlICAgc25vZGUsCisgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgZnRjX3Nub2RlX25ldyggRlRDX05vZGUgICAqcHNub2RlLAorICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBncXVlcnksCisgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIEZUX09mZnNldCApCisgIGZ0Y19zbm9kZV93ZWlnaHQoIEZUQ19Ob2RlICAgc25vZGUsCisgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICBGVF9MT0NBTCggRlRfQm9vbCApCisgIGZ0Y19zbm9kZV9jb21wYXJlKCBGVENfTm9kZSAgICBzbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGdxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgbGlzdF9jaGFuZ2VkICk7CisKKworICBGVF9MT0NBTCggRlRfQm9vbCApCisgIGZ0Y19nbm9kZV9jb21wYXJlKCBGVENfTm9kZSAgICBnbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGdxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgbGlzdF9jaGFuZ2VkICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBmdGNfZ2NhY2hlX2luaXQoIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGZ0Y19nY2FjaGVfZG9uZSggRlRDX0NhY2hlICBjYWNoZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgZnRjX2NhY2hlX2luaXQoIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGZ0Y19jYWNoZV9kb25lKCBGVENfQ2FjaGUgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBmdGNfbm9kZV9kZXN0cm95KCBGVENfTm9kZSAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgIG1hbmFnZXIgKTsKKworCisjZW5kaWYgLyogX19GVENDQkFDS19IX18gKi8KKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2NtYXAuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjY21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjYyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2NtYXAuYwpAQCAtMCwwICsxLDMzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjY21hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIENoYXJNYXAgY2FjaGUgKGJvZHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNtYW5hZy5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiZnRjY2JhY2suaCIKKyNpbmNsdWRlICJmdGNlcnJvci5oIgorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NhY2hlCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVhY2ggRlRDX0NNYXBOb2RlIGNvbnRhaW5zIGEgc2ltcGxlIGFycmF5IHRvIG1hcCBhIHJhbmdlIG9mIGNoYXJhY3RlciAqLworICAvKiBjb2RlcyB0byBlcXVpdmFsZW50IGdseXBoIGluZGljZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZvciBub3csIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljOiBFYWNoIG5vZGUgbWFwcyBhIHJhbmdlIG9mICAqLworICAvKiAxMjggY29uc2VjdXRpdmUgY2hhcmFjdGVyIGNvZGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kaWNlcy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdlIGNvdWxkIGRvIG1vcmUgY29tcGxleCB0aGluZ3MsIGJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIHJlYWxseSB2ZXJ5ICAqLworICAvKiB1c2VmdWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogbnVtYmVyIG9mIGdseXBoIGluZGljZXMgLyBjaGFyYWN0ZXIgY29kZSBwZXIgbm9kZSAqLworI2RlZmluZSBGVENfQ01BUF9JTkRJQ0VTX01BWCAgMTI4CisKKyAgLyogY29tcHV0ZSBhIHF1ZXJ5L25vZGUgaGFzaCAqLworI2RlZmluZSBGVENfQ01BUF9IQVNIKCBmYWNlaWQsIGluZGV4LCBjaGFyY29kZSApICAgICAgICAgXAorICAgICAgICAgICggX0ZUQ19GQUNFX0lEX0hBU0goIGZhY2VpZCApICsgMjExICogKGluZGV4KSArIFwKKyAgICAgICAgICAgICggKGNoYXJjb2RlKSAvIEZUQ19DTUFQX0lORElDRVNfTUFYICkgICAgICApCisKKyAgLyogdGhlIGNoYXJtYXAgcXVlcnkgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19DTWFwUXVlcnlSZWNfCisgIHsKKyAgICBGVENfRmFjZUlEICBmYWNlX2lkOworICAgIEZUX1VJbnQgICAgIGNtYXBfaW5kZXg7CisgICAgRlRfVUludDMyICAgY2hhcl9jb2RlOworCisgIH0gRlRDX0NNYXBRdWVyeVJlYywgKkZUQ19DTWFwUXVlcnk7CisKKyNkZWZpbmUgRlRDX0NNQVBfUVVFUlkoIHggKSAgKChGVENfQ01hcFF1ZXJ5KSh4KSkKKworICAvKiB0aGUgY21hcCBjYWNoZSBub2RlICovCisgIHR5cGVkZWYgc3RydWN0ICBGVENfQ01hcE5vZGVSZWNfCisgIHsKKyAgICBGVENfTm9kZVJlYyAgbm9kZTsKKyAgICBGVENfRmFjZUlEICAgZmFjZV9pZDsKKyAgICBGVF9VSW50ICAgICAgY21hcF9pbmRleDsKKyAgICBGVF9VSW50MzIgICAgZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGNoYXJhY3RlciBpbiBub2RlICovCisgICAgRlRfVUludDE2ICAgIGluZGljZXNbRlRDX0NNQVBfSU5ESUNFU19NQVhdOyAvKiBhcnJheSBvZiBnbHlwaCBpbmRpY2VzICAqLworCisgIH0gRlRDX0NNYXBOb2RlUmVjLCAqRlRDX0NNYXBOb2RlOworCisjZGVmaW5lIEZUQ19DTUFQX05PREUoIHggKSAoIChGVENfQ01hcE5vZGUpKCB4ICkgKQorCisgIC8qIGlmIChpbmRpY2VzW25dID09IEZUQ19DTUFQX1VOS05PV04pLCB3ZSBhc3N1bWUgdGhhdCB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBnbHlwaCBpbmRpY2VzIGhhdmVuJ3QgYmVlbiBxdWVyaWVkIHRocm91Z2ggRlRfR2V0X0dseXBoX0luZGV4KCkgeWV0ICAgKi8KKyNkZWZpbmUgRlRDX0NNQVBfVU5LTk9XTiAgKEZUX1VJbnQxNil+MAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUk1BUCBOT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBmdGNfY21hcF9ub2RlX2ZyZWUoIEZUQ19Ob2RlICAgZnRjbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGNhY2hlICkKKyAgeworICAgIEZUQ19DTWFwTm9kZSAgbm9kZSAgID0gKEZUQ19DTWFwTm9kZSlmdGNub2RlOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gY2FjaGUtPm1lbW9yeTsKKworCisgICAgRlRfRlJFRSggbm9kZSApOworICB9CisKKworICAvKiBpbml0aWFsaXplIGEgbmV3IGNtYXAgbm9kZSAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2NtYXBfbm9kZV9uZXcoIEZUQ19Ob2RlICAgKmZ0Y2Fub2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgZnRjcXVlcnksCisgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICBjYWNoZSApCisgIHsKKyAgICBGVENfQ01hcE5vZGUgICphbm9kZSAgPSAoRlRDX0NNYXBOb2RlKilmdGNhbm9kZTsKKyAgICBGVENfQ01hcFF1ZXJ5ICBxdWVyeSAgPSAoRlRDX0NNYXBRdWVyeSlmdGNxdWVyeTsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgPSBjYWNoZS0+bWVtb3J5OworICAgIEZUQ19DTWFwTm9kZSAgIG5vZGUgICA9IE5VTEw7CisgICAgRlRfVUludCAgICAgICAgbm47CisKKworICAgIGlmICggIUZUX05FVyggbm9kZSApICkKKyAgICB7CisgICAgICBub2RlLT5mYWNlX2lkICAgID0gcXVlcnktPmZhY2VfaWQ7CisgICAgICBub2RlLT5jbWFwX2luZGV4ID0gcXVlcnktPmNtYXBfaW5kZXg7CisgICAgICBub2RlLT5maXJzdCAgICAgID0gKHF1ZXJ5LT5jaGFyX2NvZGUgLyBGVENfQ01BUF9JTkRJQ0VTX01BWCkgKgorICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DTUFQX0lORElDRVNfTUFYOworCisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgRlRDX0NNQVBfSU5ESUNFU19NQVg7IG5uKysgKQorICAgICAgICBub2RlLT5pbmRpY2VzW25uXSA9IEZUQ19DTUFQX1VOS05PV047CisgICAgfQorCisgICAgKmFub2RlID0gbm9kZTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGNvbXB1dGUgdGhlIHdlaWdodCBvZiBhIGdpdmVuIGNtYXAgbm9kZSAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX09mZnNldCApCisgIGZ0Y19jbWFwX25vZGVfd2VpZ2h0KCBGVENfTm9kZSAgIGNub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICBjYWNoZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGNub2RlICk7CisgICAgRlRfVU5VU0VEKCBjYWNoZSApOworCisgICAgcmV0dXJuIHNpemVvZiAoICpjbm9kZSApOworICB9CisKKworICAvKiBjb21wYXJlIGEgY21hcCBub2RlIHRvIGEgZ2l2ZW4gcXVlcnkgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Cb29sICkKKyAgZnRjX2NtYXBfbm9kZV9jb21wYXJlKCBGVENfTm9kZSAgICBmdGNub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgIGxpc3RfY2hhbmdlZCApCisgIHsKKyAgICBGVENfQ01hcE5vZGUgICBub2RlICA9IChGVENfQ01hcE5vZGUpZnRjbm9kZTsKKyAgICBGVENfQ01hcFF1ZXJ5ICBxdWVyeSA9IChGVENfQ01hcFF1ZXJ5KWZ0Y3F1ZXJ5OworICAgIEZUX1VOVVNFRCggY2FjaGUgKTsKKworCisgICAgaWYgKCBsaXN0X2NoYW5nZWQgKQorICAgICAgKmxpc3RfY2hhbmdlZCA9IEZBTFNFOworICAgIGlmICggbm9kZS0+ZmFjZV9pZCAgICA9PSBxdWVyeS0+ZmFjZV9pZCAgICAmJgorICAgICAgICAgbm9kZS0+Y21hcF9pbmRleCA9PSBxdWVyeS0+Y21hcF9pbmRleCApCisgICAgeworICAgICAgRlRfVUludDMyICBvZmZzZXQgPSAoRlRfVUludDMyKSggcXVlcnktPmNoYXJfY29kZSAtIG5vZGUtPmZpcnN0ICk7CisKKworICAgICAgcmV0dXJuIEZUX0JPT0woIG9mZnNldCA8IEZUQ19DTUFQX0lORElDRVNfTUFYICk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCisgIGZ0Y19jbWFwX25vZGVfcmVtb3ZlX2ZhY2VpZCggRlRDX05vZGUgICAgZnRjbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBmdGNmYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgIGxpc3RfY2hhbmdlZCApCisgIHsKKyAgICBGVENfQ01hcE5vZGUgIG5vZGUgICAgPSAoRlRDX0NNYXBOb2RlKWZ0Y25vZGU7CisgICAgRlRDX0ZhY2VJRCAgICBmYWNlX2lkID0gKEZUQ19GYWNlSUQpZnRjZmFjZV9pZDsKKyAgICBGVF9VTlVTRUQoIGNhY2hlICk7CisKKworICAgIGlmICggbGlzdF9jaGFuZ2VkICkKKyAgICAgICpsaXN0X2NoYW5nZWQgPSBGQUxTRTsKKyAgICByZXR1cm4gRlRfQk9PTCggbm9kZS0+ZmFjZV9pZCA9PSBmYWNlX2lkICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgR0xZUEggSU1BR0UgQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUQ19DYWNoZUNsYXNzUmVjICBmdGNfY21hcF9jYWNoZV9jbGFzcyA9CisgIHsKKyAgICBmdGNfY21hcF9ub2RlX25ldywKKyAgICBmdGNfY21hcF9ub2RlX3dlaWdodCwKKyAgICBmdGNfY21hcF9ub2RlX2NvbXBhcmUsCisgICAgZnRjX2NtYXBfbm9kZV9yZW1vdmVfZmFjZWlkLAorICAgIGZ0Y19jbWFwX25vZGVfZnJlZSwKKworICAgIHNpemVvZiAoIEZUQ19DYWNoZVJlYyApLAorICAgIGZ0Y19jYWNoZV9pbml0LAorICAgIGZ0Y19jYWNoZV9kb25lLAorICB9OworCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhY2hlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19DTWFwQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DTWFwQ2FjaGUgICphY2FjaGUgKQorICB7CisgICAgcmV0dXJuIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGUoIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdGNfY21hcF9jYWNoZV9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NBQ0hFX1AoIGFjYWNoZSApICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUludCApCisgIEZUQ19DTWFwQ2FjaGVfTG9va3VwKCBGVENfQ01hcENhY2hlICBjbWFwX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgICAgZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGNtYXBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRDX0NhY2hlICAgICAgICAgY2FjaGUgPSBGVENfQ0FDSEUoIGNtYXBfY2FjaGUgKTsKKyAgICBGVENfQ01hcFF1ZXJ5UmVjICBxdWVyeTsKKyAgICBGVENfTm9kZSAgICAgICAgICBub2RlOworICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOworICAgIEZUX1VJbnQgICAgICAgICAgIGdpbmRleCA9IDA7CisgICAgRlRfT2Zmc2V0ICAgICAgICAgaGFzaDsKKyAgICBGVF9JbnQgICAgICAgICAgICBub19jbWFwX2NoYW5nZSA9IDA7CisKKworICAgIGlmICggY21hcF9pbmRleCA8IDAgKQorICAgIHsKKyAgICAgIC8qIFRyZWF0IGEgbmVnYXRpdmUgY21hcCBpbmRleCBhcyBhIHNwZWNpYWwgdmFsdWUsIG1lYW5pbmcgdGhhdCB5b3UgKi8KKyAgICAgIC8qIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBGVF9GYWNlJ3MgY2hhcmFjdGVyIG1hcCB0aHJvdWdoIHRoaXMgICAgKi8KKyAgICAgIC8qIGNhbGwuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGZhY2UgcmVxdWVzdGVyIGNhbGxiYWNrIGFscmVhZHkgKi8KKyAgICAgIC8qIHNldHMgdGhlIGZhY2UncyBjaGFybWFwIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZS4gICAgICAgICAgICAgICAgKi8KKworICAgICAgbm9fY21hcF9jaGFuZ2UgPSAxOworICAgICAgY21hcF9pbmRleCAgICAgPSAwOworICAgIH0KKworICAgIGlmICggIWNhY2hlICkKKyAgICB7CisgICAgICBGVF9UUkFDRTAoKCAiRlRDX0NNYXBDYWNoZV9Mb29rdXA6IGJhZCBhcmd1bWVudHMsIHJldHVybmluZyAwXG4iICkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCAhZmFjZV9pZCApCisgICAgICByZXR1cm4gMDsKKworICAgIHF1ZXJ5LmZhY2VfaWQgICAgPSBmYWNlX2lkOworICAgIHF1ZXJ5LmNtYXBfaW5kZXggPSAoRlRfVUludCljbWFwX2luZGV4OworICAgIHF1ZXJ5LmNoYXJfY29kZSAgPSBjaGFyX2NvZGU7CisKKyAgICBoYXNoID0gRlRDX0NNQVBfSEFTSCggZmFjZV9pZCwgKEZUX1VJbnQpY21hcF9pbmRleCwgY2hhcl9jb2RlICk7CisKKyNpZiAxCisgICAgRlRDX0NBQ0hFX0xPT0tVUF9DTVAoIGNhY2hlLCBmdGNfY21hcF9ub2RlX2NvbXBhcmUsIGhhc2gsICZxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgZXJyb3IgKTsKKyNlbHNlCisgICAgZXJyb3IgPSBGVENfQ2FjaGVfTG9va3VwKCBjYWNoZSwgaGFzaCwgJnF1ZXJ5LCAmbm9kZSApOworI2VuZGlmCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9BU1NFUlQoIChGVF9VSW50KSggY2hhcl9jb2RlIC0gRlRDX0NNQVBfTk9ERSggbm9kZSApLT5maXJzdCApIDwKKyAgICAgICAgICAgICAgICBGVENfQ01BUF9JTkRJQ0VTX01BWCApOworCisgICAgLyogc29tZXRoaW5nIHJvdHRlbiBjYW4gaGFwcGVuIHdpdGggcm9ndWUgY2xpZW50cyAqLworICAgIGlmICggKEZUX1VJbnQpKCBjaGFyX2NvZGUgLSBGVENfQ01BUF9OT0RFKCBub2RlICktPmZpcnN0ID49CisgICAgICAgICAgICAgICAgICAgIEZUQ19DTUFQX0lORElDRVNfTUFYICkgKQorICAgICAgcmV0dXJuIDA7IC8qIFhYWDogc2hvdWxkIHJldHVybiBhcHByb3ByaWF0ZSBlcnJvciAqLworCisgICAgZ2luZGV4ID0gRlRDX0NNQVBfTk9ERSggbm9kZSApLT5pbmRpY2VzW2NoYXJfY29kZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DTUFQX05PREUoIG5vZGUgKS0+Zmlyc3RdOworICAgIGlmICggZ2luZGV4ID09IEZUQ19DTUFQX1VOS05PV04gKQorICAgIHsKKyAgICAgIEZUX0ZhY2UgIGZhY2U7CisKKworICAgICAgZ2luZGV4ID0gMDsKKworICAgICAgZXJyb3IgPSBGVENfTWFuYWdlcl9Mb29rdXBGYWNlKCBjYWNoZS0+bWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NNQVBfTk9ERSggbm9kZSApLT5mYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCAoRlRfVUludCljbWFwX2luZGV4IDwgKEZUX1VJbnQpZmFjZS0+bnVtX2NoYXJtYXBzICkKKyAgICAgIHsKKyAgICAgICAgRlRfQ2hhck1hcCAgb2xkLCBjbWFwICA9IE5VTEw7CisKKworICAgICAgICBvbGQgID0gZmFjZS0+Y2hhcm1hcDsKKyAgICAgICAgY21hcCA9IGZhY2UtPmNoYXJtYXBzW2NtYXBfaW5kZXhdOworCisgICAgICAgIGlmICggb2xkICE9IGNtYXAgJiYgIW5vX2NtYXBfY2hhbmdlICkKKyAgICAgICAgICBGVF9TZXRfQ2hhcm1hcCggZmFjZSwgY21hcCApOworCisgICAgICAgIGdpbmRleCA9IEZUX0dldF9DaGFyX0luZGV4KCBmYWNlLCBjaGFyX2NvZGUgKTsKKworICAgICAgICBpZiAoIG9sZCAhPSBjbWFwICYmICFub19jbWFwX2NoYW5nZSApCisgICAgICAgICAgRlRfU2V0X0NoYXJtYXAoIGZhY2UsIG9sZCApOworICAgICAgfQorCisgICAgICBGVENfQ01BUF9OT0RFKCBub2RlICktPmluZGljZXNbY2hhcl9jb2RlIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ01BUF9OT0RFKCBub2RlICktPmZpcnN0XQorICAgICAgICA9IChGVF9VU2hvcnQpZ2luZGV4OworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjZXJyb3IuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWFkZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNlcnJvci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2Vycm9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDYWNoaW5nIHN1Yi1zeXN0ZW0gZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgY2FjaGluZyBzdWItc3lzdGVtIGVycm9yIGVudW1lcmF0aW9uICAqLworICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRDRVJST1JfSF9fCisjZGVmaW5lIF9fRlRDRVJST1JfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEZUQ19FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfQ2FjaGUKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fRlRDRVJST1JfSF9fICovCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNnbHlwaC5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNnbHlwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0M2I4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2dseXBoLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2dseXBoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBHbHlwaCBJbWFnZSAoRlRfR2x5cGgpIGNhY2hlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNnbHlwaC5oIgorI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCisjaW5jbHVkZSAiZnRjZXJyb3IuaCIKKworCisgIC8qIGNyZWF0ZSBhIG5ldyBjaHVuayBub2RlLCBzZXR0aW5nIGl0cyBjYWNoZSBpbmRleCBhbmQgcmVmIGNvdW50ICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19HTm9kZV9Jbml0KCBGVENfR05vZGUgICBnbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUQ19GYW1pbHkgIGZhbWlseSApCisgIHsKKyAgICBnbm9kZS0+ZmFtaWx5ID0gZmFtaWx5OworICAgIGdub2RlLT5naW5kZXggPSBnaW5kZXg7CisgICAgZmFtaWx5LT5udW1fbm9kZXMrKzsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgRlRDX0dOb2RlX1Vuc2VsZWN0RmFtaWx5KCBGVENfR05vZGUgIGdub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRDX0ZhbWlseSAgZmFtaWx5ID0gZ25vZGUtPmZhbWlseTsKKworCisgICAgZ25vZGUtPmZhbWlseSA9IE5VTEw7CisgICAgaWYgKCBmYW1pbHkgJiYgLS1mYW1pbHktPm51bV9ub2RlcyA9PSAwICkKKyAgICAgIEZUQ19GQU1JTFlfRlJFRSggZmFtaWx5LCBjYWNoZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfR05vZGVfRG9uZSggRlRDX0dOb2RlICBnbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgLyogZmluYWxpemUgdGhlIG5vZGUgKi8KKyAgICBnbm9kZS0+Z2luZGV4ID0gMDsKKworICAgIEZUQ19HTm9kZV9VbnNlbGVjdEZhbWlseSggZ25vZGUsIGNhY2hlICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGZ0Y19nbm9kZV9jb21wYXJlKCBGVENfTm9kZSAgICBmdGNnbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y2dxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgbGlzdF9jaGFuZ2VkICkKKyAgeworICAgIEZUQ19HTm9kZSAgIGdub2RlICA9IChGVENfR05vZGUpZnRjZ25vZGU7CisgICAgRlRDX0dRdWVyeSAgZ3F1ZXJ5ID0gKEZUQ19HUXVlcnkpZnRjZ3F1ZXJ5OworICAgIEZUX1VOVVNFRCggY2FjaGUgKTsKKworCisgICAgaWYgKCBsaXN0X2NoYW5nZWQgKQorICAgICAgKmxpc3RfY2hhbmdlZCA9IEZBTFNFOworICAgIHJldHVybiBGVF9CT09MKCBnbm9kZS0+ZmFtaWx5ID09IGdxdWVyeS0+ZmFtaWx5ICYmCisgICAgICAgICAgICAgICAgICAgIGdub2RlLT5naW5kZXggPT0gZ3F1ZXJ5LT5naW5kZXggKTsKKyAgfQorCisKKyNpZmRlZiBGVENfSU5MSU5FCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgRlRDX0dOb2RlX0NvbXBhcmUoIEZUQ19HTm9kZSAgIGdub2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRDX0dRdWVyeSAgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICBsaXN0X2NoYW5nZWQgKQorICB7CisgICAgcmV0dXJuIGZ0Y19nbm9kZV9jb21wYXJlKCBGVENfTk9ERSggZ25vZGUgKSwgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUsIGxpc3RfY2hhbmdlZCApOworICB9CisKKyNlbmRpZgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBDSFVOSyBTRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19GYW1pbHlfSW5pdCggRlRDX0ZhbWlseSAgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlICkKKyAgeworICAgIEZUQ19HQ2FjaGVDbGFzcyAgY2xhenogPSBGVENfQ0FDSEVfX0dDQUNIRV9DTEFTUyggY2FjaGUgKTsKKworCisgICAgZmFtaWx5LT5jbGF6eiAgICAgPSBjbGF6ei0+ZmFtaWx5X2NsYXNzOworICAgIGZhbWlseS0+bnVtX25vZGVzID0gMDsKKyAgICBmYW1pbHktPmNhY2hlICAgICA9IGNhY2hlOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2djYWNoZV9pbml0KCBGVENfQ2FjaGUgIGZ0Y2NhY2hlICkKKyAgeworICAgIEZUQ19HQ2FjaGUgIGNhY2hlID0gKEZUQ19HQ2FjaGUpZnRjY2FjaGU7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKworICAgIGVycm9yID0gRlRDX0NhY2hlX0luaXQoIEZUQ19DQUNIRSggY2FjaGUgKSApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBGVENfR0NhY2hlQ2xhc3MgICBjbGF6eiA9IChGVENfR0NhY2hlQ2xhc3MpRlRDX0NBQ0hFKCBjYWNoZSApLT5vcmdfY2xhc3M7CisKKyAgICAgIEZUQ19NcnVMaXN0X0luaXQoICZjYWNoZS0+ZmFtaWxpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGF6ei0+ZmFtaWx5X2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIC8qIG5vIG1heGltdW0gaGVyZSEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NBQ0hFKCBjYWNoZSApLT5tZW1vcnkgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisjaWYgMAorCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBGVENfR0NhY2hlX0luaXQoIEZUQ19HQ2FjaGUgIGNhY2hlICkKKyAgeworICAgIHJldHVybiBmdGNfZ2NhY2hlX2luaXQoIEZUQ19DQUNIRSggY2FjaGUgKSApOworICB9CisKKyNlbmRpZiAvKiAwICovCisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBmdGNfZ2NhY2hlX2RvbmUoIEZUQ19DYWNoZSAgZnRjY2FjaGUgKQorICB7CisgICAgRlRDX0dDYWNoZSAgY2FjaGUgPSAoRlRDX0dDYWNoZSlmdGNjYWNoZTsKKworCisgICAgRlRDX0NhY2hlX0RvbmUoIChGVENfQ2FjaGUpY2FjaGUgKTsKKyAgICBGVENfTXJ1TGlzdF9Eb25lKCAmY2FjaGUtPmZhbWlsaWVzICk7CisgIH0KKworCisjaWYgMAorCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19HQ2FjaGVfRG9uZSggRlRDX0dDYWNoZSAgY2FjaGUgKQorICB7CisgICAgZnRjX2djYWNoZV9kb25lKCBGVENfQ0FDSEUoIGNhY2hlICkgKTsKKyAgfQorCisjZW5kaWYgLyogMCAqLworCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIEZUQ19HQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgRlRDX0dDYWNoZUNsYXNzICAgY2xhenosCisgICAgICAgICAgICAgICAgICBGVENfR0NhY2hlICAgICAgICphY2FjaGUgKQorICB7CisgICAgcmV0dXJuIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGUoIG1hbmFnZXIsIChGVENfQ2FjaGVDbGFzcyljbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19DYWNoZSopYWNhY2hlICk7CisgIH0KKworCisjaWZuZGVmIEZUQ19JTkxJTkUKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX0dDYWNoZV9Mb29rdXAoIEZUQ19HQ2FjaGUgICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19HUXVlcnkgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgICphbm9kZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIHF1ZXJ5LT5naW5kZXggPSBnaW5kZXg7CisKKyAgICBGVENfTVJVTElTVF9MT09LVVAoICZjYWNoZS0+ZmFtaWxpZXMsIHF1ZXJ5LCBxdWVyeS0+ZmFtaWx5LCBlcnJvciApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBGVENfRmFtaWx5ICBmYW1pbHkgPSBxdWVyeS0+ZmFtaWx5OworCisKKyAgICAgIC8qIHByZXZlbnQgdGhlIGZhbWlseSBmcm9tIGJlaW5nIGRlc3Ryb3llZCB0b28gZWFybHkgd2hlbiBhbiAgICAgICAgKi8KKyAgICAgIC8qIG91dC1vZi1tZW1vcnkgY29uZGl0aW9uIG9jY3VycyBkdXJpbmcgZ2x5cGggbm9kZSBpbml0aWFsaXphdGlvbi4gKi8KKyAgICAgIGZhbWlseS0+bnVtX25vZGVzKys7CisKKyAgICAgIGVycm9yID0gRlRDX0NhY2hlX0xvb2t1cCggRlRDX0NBQ0hFKCBjYWNoZSApLCBoYXNoLCBxdWVyeSwgYW5vZGUgKTsKKworICAgICAgaWYgKCAtLWZhbWlseS0+bnVtX25vZGVzID09IDAgKQorICAgICAgICBGVENfRkFNSUxZX0ZSRUUoIGZhbWlseSwgY2FjaGUgKTsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAvKiAhRlRDX0lOTElORSAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNnbHlwaC5oIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNnbHlwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWRiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2dseXBoLmgKQEAgLTAsMCArMSwzMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2dseXBoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBhYnN0cmFjdCBnbHlwaCBjYWNoZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKgorICAgKgorICAgKiAgRlRDX0dDYWNoZSBpcyBhbiBfYWJzdHJhY3RfIGNhY2hlIG9iamVjdCBvcHRpbWl6ZWQgdG8gc3RvcmUgZ2x5cGgKKyAgICogIGRhdGEuICBJdCB3b3JrcyBhcyBmb2xsb3dzOgorICAgKgorICAgKiAgIC0gSXQgbWFuYWdlcyBGVENfR05vZGUgb2JqZWN0cy4gRWFjaCBvbmUgb2YgdGhlbSBjYW4gaG9sZCBvbmUgb3IgbW9yZQorICAgKiAgICAgZ2x5cGggYGl0ZW1zJy4gIEl0ZW0gdHlwZXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIEZUQ19HQ2FjaGUgYnV0CisgICAqICAgICBpbiBjbGFzc2VzIHRoYXQgZXh0ZW5kIGl0LgorICAgKgorICAgKiAgIC0gR2x5cGggYXR0cmlidXRlcywgbGlrZSBmYWNlIElELCBjaGFyYWN0ZXIgc2l6ZSwgcmVuZGVyIG1vZGUsIGV0Yy4sCisgICAqICAgICBjYW4gYmUgZ3JvdXBlZCBpbnRvIGFic3RyYWN0IGBnbHlwaCBmYW1pbGllcycuICBUaGlzIGF2b2lkcyBzdG9yaW5nCisgICAqICAgICB0aGUgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEZUQ19HQ2FjaGUsIHNpbmNlIGl0IGlzIGxpa2VseSB0aGF0IG1hbnkKKyAgICogICAgIEZUQ19HTm9kZXMgd2lsbCBiZWxvbmcgdG8gdGhlIHNhbWUgZmFtaWx5IGluIHR5cGljYWwgdXNlcy4KKyAgICoKKyAgICogICAtIEVhY2ggRlRDX0dOb2RlIGlzIHRodXMgYW4gRlRDX05vZGUgd2l0aCB0d28gYWRkaXRpb25hbCBmaWVsZHM6CisgICAqCisgICAqICAgICAgICogZ2luZGV4OiBBIGdseXBoIGluZGV4LCBvciB0aGUgZmlyc3QgaW5kZXggaW4gYSBnbHlwaCByYW5nZS4KKyAgICogICAgICAgKiBmYW1pbHk6IEEgcG9pbnRlciB0byBhIGdseXBoIGBmYW1pbHknLgorICAgKgorICAgKiAgIC0gRmFtaWx5IHR5cGVzIGFyZSBub3QgZnVsbHkgc3BlY2lmaWMgaW4gdGhlIEZUQ19GYW1pbHkgdHlwZSwgYnV0CisgICAqICAgICBieSBjbGFzc2VzIHRoYXQgZXh0ZW5kIGl0LgorICAgKgorICAgKiAgTm90ZSB0aGF0IGJvdGggRlRDX0ltYWdlQ2FjaGUgYW5kIEZUQ19TQml0Q2FjaGUgZXh0ZW5kIEZUQ19HQ2FjaGUuCisgICAqICBUaGV5IHNoYXJlIGFuIEZUQ19GYW1pbHkgc3ViLWNsYXNzIGNhbGxlZCBGVENfQmFzaWNGYW1pbHkgd2hpY2ggaXMKKyAgICogIHVzZWQgdG8gc3RvcmUgdGhlIGZvbGxvd2luZyBkYXRhOiBmYWNlIElELCBwaXhlbC9wb2ludCBzaXplcywgbG9hZAorICAgKiAgZmxhZ3MuICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBgc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMnLgorICAgKgorICAgKiAgQ2xpZW50IGFwcGxpY2F0aW9ucyBjYW4gZXh0ZW5kIEZUQ19HTm9kZSB3aXRoIHRoZWlyIG93biBGVENfR05vZGUKKyAgICogIGFuZCBGVENfRmFtaWx5IHN1Yi1jbGFzc2VzIHRvIGltcGxlbWVudCBtb3JlIGNvbXBsZXggY2FjaGVzIChlLmcuLAorICAgKiAgaGFuZGxpbmcgYXV0b21hdGljIHN5bnRoZXNpcywgbGlrZSBvYmxpcXVpbmcgJiBlbWJvbGRlbmluZywgY29sb3JlZAorICAgKiAgZ2x5cGhzLCBldGMuKS4KKyAgICoKKyAgICogIFNlZSBhbHNvIHRoZSBGVENfSUNhY2hlICYgRlRDX1NDYWNoZSBjbGFzc2VzIGluIGBmdGNpbWFnZS5oJyBhbmQKKyAgICogIGBmdGNzYml0cy5oJywgd2hpY2ggYm90aCBleHRlbmQgRlRDX0dDYWNoZSB3aXRoIGFkZGl0aW9uYWwKKyAgICogIG9wdGltaXphdGlvbnMuCisgICAqCisgICAqICBBIHR5cGljYWwgRlRDX0dDYWNoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUgYXQgbGVhc3QgdGhlCisgICAqICBmb2xsb3dpbmc6CisgICAqCisgICAqICAtIEZUQ19HTm9kZSBzdWItY2xhc3MsIGUuZy4gTXlOb2RlLCB3aXRoIHJlbGV2YW50IG1ldGhvZHM6CisgICAqICAgICAgICBteV9ub2RlX25ldyAgICAgICAgICAgIChtdXN0IGNhbGwgRlRDX0dOb2RlX0luaXQpCisgICAqICAgICAgICBteV9ub2RlX2ZyZWUgICAgICAgICAgIChtdXN0IGNhbGwgRlRDX0dOb2RlX0RvbmUpCisgICAqICAgICAgICBteV9ub2RlX2NvbXBhcmUgICAgICAgIChtdXN0IGNhbGwgRlRDX0dOb2RlX0NvbXBhcmUpCisgICAqICAgICAgICBteV9ub2RlX3JlbW92ZV9mYWNlaWQgIChtdXN0IGNhbGwgZnRjX2dub2RlX3Vuc2VsZWN0IGluIGNhc2UKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1hdGNoKQorICAgKgorICAgKiAgLSBGVENfRmFtaWx5IHN1Yi1jbGFzcywgZS5nLiBNeUZhbWlseSwgd2l0aCByZWxldmFudCBtZXRob2RzOgorICAgKiAgICAgICAgbXlfZmFtaWx5X2NvbXBhcmUKKyAgICogICAgICAgIG15X2ZhbWlseV9pbml0CisgICAqICAgICAgICBteV9mYW1pbHlfcmVzZXQgKG9wdGlvbmFsKQorICAgKiAgICAgICAgbXlfZmFtaWx5X2RvbmUKKyAgICoKKyAgICogIC0gRlRDX0dRdWVyeSBzdWItY2xhc3MsIGUuZy4gTXlRdWVyeSwgdG8gaG9sZCBjYWNoZS1zcGVjaWZpYyBxdWVyeQorICAgKiAgICBkYXRhLgorICAgKgorICAgKiAgLSBDb25zdGFudCBzdHJ1Y3R1cmVzIGZvciBhIEZUQ19HTm9kZUNsYXNzLgorICAgKgorICAgKiAgLSBNeUNhY2hlTmV3KCkgY2FuIGJlIGltcGxlbWVudGVkIGVhc2lseSBhcyBhIGNhbGwgdG8gdGhlIGNvbnZlbmllbmNlCisgICAqICAgIGZ1bmN0aW9uIEZUQ19HQ2FjaGVfTmV3LgorICAgKgorICAgKiAgLSBNeUNhY2hlTG9va3VwIHdpdGggYSBjYWxsIHRvIEZUQ19HQ2FjaGVfTG9va3VwLiAgVGhpcyBmdW5jdGlvbiB3aWxsCisgICAqICAgIGF1dG9tYXRpY2FsbHk6CisgICAqCisgICAqICAgIC0gU2VhcmNoIGZvciB0aGUgY29ycmVzcG9uZGluZyBmYW1pbHkgaW4gdGhlIGNhY2hlLCBvciBjcmVhdGUKKyAgICogICAgICBhIG5ldyBvbmUgaWYgbmVjZXNzYXJ5LiAgUHV0IGl0IGluIEZUQ19HUVVFUlkobXlxdWVyeSkuZmFtaWx5CisgICAqCisgICAqICAgIC0gQ2FsbCBGVENfQ2FjaGVfTG9va3VwLgorICAgKgorICAgKiAgICBJZiBpdCByZXR1cm5zIE5VTEwsIHlvdSBzaG91bGQgY3JlYXRlIGEgbmV3IG5vZGUsIHRoZW4gY2FsbAorICAgKiAgICBmdGNfY2FjaGVfYWRkIGFzIHVzdWFsLgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW1wb3J0YW50OiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBvbmx5IHVzZWQgdG8gICAgICAgICovCisgIC8qICAgICAgICAgICAgaW1wbGVtZW50IGFuIGFic3RyYWN0IGdseXBoIGNhY2hlIGNsYXNzLiAgWW91IG5lZWQgdG8gICAgICAqLworICAvKiAgICAgICAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCBsb2dpYyB0byBpbXBsZW1lbnQgYSBjb21wbGV0ZSBjYWNoZS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiAgICAgICAgICAgICBXQVJOSU5HLCBUSElTIElTIEJFVEEgQ09ERS4gICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQ0dMWVBIX0hfXworI2RlZmluZSBfX0ZUQ0dMWVBIX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgImZ0Y21hbmFnLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworIC8qCisgICogIFdlIGNhbiBncm91cCBnbHlwaHMgaW50byBgZmFtaWxpZXMnLiAgRWFjaCBmYW1pbHkgY29ycmVzcG9uZCB0byBhCisgICogIGdpdmVuIGZhY2UgSUQsIGNoYXJhY3RlciBzaXplLCB0cmFuc2Zvcm0sIGV0Yy4KKyAgKgorICAqICBGYW1pbGllcyBhcmUgaW1wbGVtZW50ZWQgYXMgTVJVIGxpc3Qgbm9kZXMuICBUaGV5IGFyZQorICAqICByZWZlcmVuY2UtY291bnRlZC4KKyAgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgRlRDX0ZhbWlseVJlY18KKyAgeworICAgIEZUQ19NcnVOb2RlUmVjICAgIG1ydW5vZGU7CisgICAgRlRfVUludCAgICAgICAgICAgbnVtX25vZGVzOyAvKiBjdXJyZW50IG51bWJlciBvZiBub2RlcyBpbiB0aGlzIGZhbWlseSAqLworICAgIEZUQ19DYWNoZSAgICAgICAgIGNhY2hlOworICAgIEZUQ19NcnVMaXN0Q2xhc3MgIGNsYXp6OworCisgIH0gRlRDX0ZhbWlseVJlYywgKkZUQ19GYW1pbHk7CisKKyNkZWZpbmUgIEZUQ19GQU1JTFkoeCkgICAgKCAoRlRDX0ZhbWlseSkoeCkgKQorI2RlZmluZSAgRlRDX0ZBTUlMWV9QKHgpICAoIChGVENfRmFtaWx5KikoeCkgKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19HTm9kZVJlY18KKyAgeworICAgIEZUQ19Ob2RlUmVjICAgICAgbm9kZTsKKyAgICBGVENfRmFtaWx5ICAgICAgIGZhbWlseTsKKyAgICBGVF9VSW50ICAgICAgICAgIGdpbmRleDsKKworICB9IEZUQ19HTm9kZVJlYywgKkZUQ19HTm9kZTsKKworI2RlZmluZSBGVENfR05PREUoIHggKSAgICAoIChGVENfR05vZGUpKHgpICkKKyNkZWZpbmUgRlRDX0dOT0RFX1AoIHggKSAgKCAoRlRDX0dOb2RlKikoeCkgKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19HUXVlcnlSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgICAgZ2luZGV4OworICAgIEZUQ19GYW1pbHkgICBmYW1pbHk7CisKKyAgfSBGVENfR1F1ZXJ5UmVjLCAqRlRDX0dRdWVyeTsKKworI2RlZmluZSBGVENfR1FVRVJZKCB4ICkgICggKEZUQ19HUXVlcnkpKHgpICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tICAgICAgICAgICovCisgIC8qIHVzZXItcHJvdmlkZWQgY2FjaGUgY2xhc3Nlczsgb3RoZXJ3aXNlLCB0aGV5IGFyZSByZWFsbHkgcGFydCBvZiB0aGUgICAqLworICAvKiBjYWNoZSBzdWItc3lzdGVtIGludGVybmFscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogbXVzdCBiZSBjYWxsZWQgYnkgZGVyaXZlZCBGVENfTm9kZV9Jbml0RnVuYyByb3V0aW5lcyAqLworICBGVF9MT0NBTCggdm9pZCApCisgIEZUQ19HTm9kZV9Jbml0KCBGVENfR05vZGUgICBub2RlLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2luZGV4LCAgLyogZ2x5cGggaW5kZXggZm9yIG5vZGUgKi8KKyAgICAgICAgICAgICAgICAgIEZUQ19GYW1pbHkgIGZhbWlseSApOworCisjaWZkZWYgRlRDX0lOTElORQorCisgIC8qIHJldHVybnMgVFJVRSBpZmYgdGhlIHF1ZXJ5J3MgZ2x5cGggaW5kZXggY29ycmVzcG9uZCB0byB0aGUgbm9kZTsgICovCisgIC8qIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBgZmFtaWx5JyBhbmQgYGhhc2gnIGZpZWxkcyBvZiB0aGUgcXVlcnkgYXJlICovCisgIC8qIGFscmVhZHkgY29ycmVjdGx5IHNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgRlRDX0dOb2RlX0NvbXBhcmUoIEZUQ19HTm9kZSAgIGdub2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRDX0dRdWVyeSAgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICBsaXN0X2NoYW5nZWQgKTsKKworI2VuZGlmCisKKyAgLyogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIGEgbm9kZSdzIGZhbWlseSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSAqLworICAvKiB0byBpbXBsZW1lbnQgdGhlIGBub2RlX3JlbW92ZV9mYWNlaWQnIGNhY2hlIG1ldGhvZCBjb3JyZWN0bHkgICAgICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX0dOb2RlX1Vuc2VsZWN0RmFtaWx5KCBGVENfR05vZGUgIGdub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICAvKiBtdXN0IGJlIGNhbGxlZCBieSBkZXJpdmVkIEZUQ19Ob2RlX0RvbmVGdW5jIHJvdXRpbmVzICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX0dOb2RlX0RvbmUoIEZUQ19HTm9kZSAgbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX0ZhbWlseV9Jbml0KCBGVENfRmFtaWx5ICBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUgKTsKKworICB0eXBlZGVmIHN0cnVjdCBGVENfR0NhY2hlUmVjXworICB7CisgICAgRlRDX0NhY2hlUmVjICAgIGNhY2hlOworICAgIEZUQ19NcnVMaXN0UmVjICBmYW1pbGllczsKKworICB9IEZUQ19HQ2FjaGVSZWMsICpGVENfR0NhY2hlOworCisjZGVmaW5lIEZUQ19HQ0FDSEUoIHggKSAgKChGVENfR0NhY2hlKSh4KSkKKworCisjaWYgMAorICAvKiBjYW4gYmUgdXNlZCBhcyBARlRDX0NhY2hlX0luaXRGdW5jICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIEZUQ19HQ2FjaGVfSW5pdCggRlRDX0dDYWNoZSAgY2FjaGUgKTsKKyNlbmRpZgorCisKKyNpZiAwCisgIC8qIGNhbiBiZSB1c2VkIGFzIEBGVENfQ2FjaGVfRG9uZUZ1bmMgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBGVENfR0NhY2hlX0RvbmUoIEZUQ19HQ2FjaGUgIGNhY2hlICk7CisjZW5kaWYKKworCisgIC8qIHRoZSBnbHlwaCBjYWNoZSBjbGFzcyBhZGRzIGZpZWxkcyBmb3IgdGhlIGZhbWlseSBpbXBsZW1lbnRhdGlvbiAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRDX0dDYWNoZUNsYXNzUmVjXworICB7CisgICAgRlRDX0NhY2hlQ2xhc3NSZWMgIGNsYXp6OworICAgIEZUQ19NcnVMaXN0Q2xhc3MgICBmYW1pbHlfY2xhc3M7CisKKyAgfSBGVENfR0NhY2hlQ2xhc3NSZWM7CisKKyAgdHlwZWRlZiBjb25zdCBGVENfR0NhY2hlQ2xhc3NSZWMqICAgRlRDX0dDYWNoZUNsYXNzOworCisjZGVmaW5lIEZUQ19HQ0FDSEVfQ0xBU1MoIHggKSAgKChGVENfR0NhY2hlQ2xhc3MpKHgpKQorCisjZGVmaW5lIEZUQ19DQUNIRV9fR0NBQ0hFX0NMQVNTKCB4ICkgXAorICAgICAgICAgIEZUQ19HQ0FDSEVfQ0xBU1MoIEZUQ19DQUNIRSh4KS0+b3JnX2NsYXNzICkKKyNkZWZpbmUgRlRDX0NBQ0hFX19GQU1JTFlfQ0xBU1MoIHggKSBcCisgICAgICAgICAgKCAoRlRDX01ydUxpc3RDbGFzcylGVENfQ0FDSEVfX0dDQUNIRV9DTEFTUyggeCApLT5mYW1pbHlfY2xhc3MgKQorCisKKyAgLyogY29udmVuaWVuY2UgZnVuY3Rpb247IHVzZSBpdCBpbnN0ZWFkIG9mIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyX0NhY2hlICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIEZUQ19HQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgRlRDX0dDYWNoZUNsYXNzICAgY2xhenosCisgICAgICAgICAgICAgICAgICBGVENfR0NhY2hlICAgICAgICphY2FjaGUgKTsKKworI2lmbmRlZiBGVENfSU5MSU5FCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIEZUQ19HQ2FjaGVfTG9va3VwKCBGVENfR0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICAqYW5vZGUgKTsKKyNlbmRpZgorCisKKyAgLyogKi8KKworCisjZGVmaW5lIEZUQ19GQU1JTFlfRlJFRSggZmFtaWx5LCBjYWNoZSApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVENfTXJ1TGlzdF9SZW1vdmUoICZGVENfR0NBQ0hFKChjYWNoZSkpLT5mYW1pbGllcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUQ19NcnVOb2RlKShmYW1pbHkpICkKKworCisjaWZkZWYgRlRDX0lOTElORQorCisjZGVmaW5lIEZUQ19HQ0FDSEVfTE9PS1VQX0NNUCggY2FjaGUsIGZhbWNtcCwgbm9kZWNtcCwgaGFzaCwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbmRleCwgcXVlcnksIG5vZGUsIGVycm9yICkgICAgICAgICAgICAgICAgIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRDX0dDYWNoZSAgICAgICAgICAgICAgIF9nY2FjaGUgICA9IEZUQ19HQ0FDSEUoIGNhY2hlICk7ICAgICAgICAgICAgICAgXAorICAgIEZUQ19HUXVlcnkgICAgICAgICAgICAgICBfZ3F1ZXJ5ICAgPSAoRlRDX0dRdWVyeSkoIHF1ZXJ5ICk7ICAgICAgICAgICAgIFwKKyAgICBGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyAgX2Zjb21wYXJlID0gKEZUQ19NcnVOb2RlX0NvbXBhcmVGdW5jKShmYW1jbXApOyBcCisgICAgRlRDX01ydU5vZGUgICAgICAgICAgICAgIF9tcnVub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX2dxdWVyeS0+Z2luZGV4ID0gKGdpbmRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVENfTVJVTElTVF9MT09LVVBfQ01QKCAmX2djYWNoZS0+ZmFtaWxpZXMsIF9ncXVlcnksIF9mY29tcGFyZSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21ydW5vZGUsIGVycm9yICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9ncXVlcnktPmZhbWlseSA9IEZUQ19GQU1JTFkoIF9tcnVub2RlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoICFlcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgRlRDX0ZhbWlseSAgX2dxZmFtaWx5ID0gX2dxdWVyeS0+ZmFtaWx5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX2dxZmFtaWx5LT5udW1fbm9kZXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGVENfQ0FDSEVfTE9PS1VQX0NNUCggY2FjaGUsIG5vZGVjbXAsIGhhc2gsIHF1ZXJ5LCBub2RlLCBlcnJvciApOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICggLS1fZ3FmYW1pbHktPm51bV9ub2RlcyA9PSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZUQ19GQU1JTFlfRlJFRSggX2dxZmFtaWx5LCBfZ2NhY2hlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisgIC8qICovCisKKyNlbHNlIC8qICFGVENfSU5MSU5FICovCisKKyNkZWZpbmUgRlRDX0dDQUNIRV9MT09LVVBfQ01QKCBjYWNoZSwgZmFtY21wLCBub2RlY21wLCBoYXNoLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2luZGV4LCBxdWVyeSwgbm9kZSwgZXJyb3IgKSAgICAgICAgICAgXAorICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIGVycm9yID0gRlRDX0dDYWNoZV9Mb29rdXAoIEZUQ19HQ0FDSEUoIGNhY2hlICksIGhhc2gsIGdpbmRleCwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR1FVRVJZKCBxdWVyeSApLCAmbm9kZSApOyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBGVF9FTkRfU1RNTlQKKworI2VuZGlmIC8qICFGVENfSU5MSU5FICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUQ0dMWVBIX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNpbWFnZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNpbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MTlhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2ltYWdlLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2ltYWdlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBJbWFnZSBjYWNoZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSAiZnRjaW1hZ2UuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCisjaW5jbHVkZSAiZnRjZXJyb3IuaCIKKworCisgIC8qIGZpbmFsaXplIGEgZ2l2ZW4gZ2x5cGggaW1hZ2Ugbm9kZSAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBmdGNfaW5vZGVfZnJlZSggRlRDX05vZGUgICBmdGNpbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRDX0lOb2RlICBpbm9kZSA9IChGVENfSU5vZGUpZnRjaW5vZGU7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBjYWNoZS0+bWVtb3J5OworCisKKyAgICBpZiAoIGlub2RlLT5nbHlwaCApCisgICAgeworICAgICAgRlRfRG9uZV9HbHlwaCggaW5vZGUtPmdseXBoICk7CisgICAgICBpbm9kZS0+Z2x5cGggPSBOVUxMOworICAgIH0KKworICAgIEZUQ19HTm9kZV9Eb25lKCBGVENfR05PREUoIGlub2RlICksIGNhY2hlICk7CisgICAgRlRfRlJFRSggaW5vZGUgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgRlRDX0lOb2RlX0ZyZWUoIEZUQ19JTm9kZSAgaW5vZGUsCisgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGNhY2hlICkKKyAgeworICAgIGZ0Y19pbm9kZV9mcmVlKCBGVENfTk9ERSggaW5vZGUgKSwgY2FjaGUgKTsKKyAgfQorCisKKyAgLyogaW5pdGlhbGl6ZSBhIG5ldyBnbHlwaCBpbWFnZSBub2RlICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBGVENfSU5vZGVfTmV3KCBGVENfSU5vZGUgICAqcGlub2RlLAorICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICAgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICAgY2FjaGUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBjYWNoZS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRDX0lOb2RlICBpbm9kZSAgPSBOVUxMOworCisKKyAgICBpZiAoICFGVF9ORVcoIGlub2RlICkgKQorICAgIHsKKyAgICAgIEZUQ19HTm9kZSAgICAgICAgIGdub2RlICA9IEZUQ19HTk9ERSggaW5vZGUgKTsKKyAgICAgIEZUQ19GYW1pbHkgICAgICAgIGZhbWlseSA9IGdxdWVyeS0+ZmFtaWx5OworICAgICAgRlRfVUludCAgICAgICAgICAgZ2luZGV4ID0gZ3F1ZXJ5LT5naW5kZXg7CisgICAgICBGVENfSUZhbWlseUNsYXNzICBjbGF6eiAgPSBGVENfQ0FDSEVfX0lGQU1JTFlfQ0xBU1MoIGNhY2hlICk7CisKKworICAgICAgLyogaW5pdGlhbGl6ZSBpdHMgaW5uZXIgZmllbGRzICovCisgICAgICBGVENfR05vZGVfSW5pdCggZ25vZGUsIGdpbmRleCwgZmFtaWx5ICk7CisKKyAgICAgIC8qIHdlIHdpbGwgbm93IGxvYWQgdGhlIGdseXBoIGltYWdlICovCisgICAgICBlcnJvciA9IGNsYXp6LT5mYW1pbHlfbG9hZF9nbHlwaCggZmFtaWx5LCBnaW5kZXgsIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbm9kZS0+Z2x5cGggKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgeworICAgICAgICBGVENfSU5vZGVfRnJlZSggaW5vZGUsIGNhY2hlICk7CisgICAgICAgIGlub2RlID0gTlVMTDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAqcGlub2RlID0gaW5vZGU7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2lub2RlX25ldyggRlRDX05vZGUgICAqZnRjcGlub2RlLAorICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBmdGNncXVlcnksCisgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlICkKKyAgeworICAgIEZUQ19JTm9kZSAgKnBpbm9kZSA9IChGVENfSU5vZGUqKWZ0Y3Bpbm9kZTsKKyAgICBGVENfR1F1ZXJ5ICBncXVlcnkgPSAoRlRDX0dRdWVyeSlmdGNncXVlcnk7CisKKworICAgIHJldHVybiBGVENfSU5vZGVfTmV3KCBwaW5vZGUsIGdxdWVyeSwgY2FjaGUgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9PZmZzZXQgKQorICBmdGNfaW5vZGVfd2VpZ2h0KCBGVENfTm9kZSAgIGZ0Y2lub2RlLAorICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGZ0Y2NhY2hlICkKKyAgeworICAgIEZUQ19JTm9kZSAgaW5vZGUgPSAoRlRDX0lOb2RlKWZ0Y2lub2RlOworICAgIEZUX09mZnNldCAgc2l6ZSAgPSAwOworICAgIEZUX0dseXBoICAgZ2x5cGggPSBpbm9kZS0+Z2x5cGg7CisKKyAgICBGVF9VTlVTRUQoIGZ0Y2NhY2hlICk7CisKKworICAgIHN3aXRjaCAoIGdseXBoLT5mb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA6CisgICAgICB7CisgICAgICAgIEZUX0JpdG1hcEdseXBoICBiaXRnOworCisKKyAgICAgICAgYml0ZyA9IChGVF9CaXRtYXBHbHlwaClnbHlwaDsKKyAgICAgICAgc2l6ZSA9IGJpdGctPmJpdG1hcC5yb3dzICogKEZUX09mZnNldClGVF9BQlMoIGJpdGctPmJpdG1hcC5waXRjaCApICsKKyAgICAgICAgICAgICAgIHNpemVvZiAoICpiaXRnICk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfR0xZUEhfRk9STUFUX09VVExJTkU6CisgICAgICB7CisgICAgICAgIEZUX091dGxpbmVHbHlwaCAgb3V0ZzsKKworCisgICAgICAgIG91dGcgPSAoRlRfT3V0bGluZUdseXBoKWdseXBoOworICAgICAgICBzaXplID0gKEZUX09mZnNldClvdXRnLT5vdXRsaW5lLm5fcG9pbnRzICoKKyAgICAgICAgICAgICAgICAgKCBzaXplb2YgKCBGVF9WZWN0b3IgKSArIHNpemVvZiAoIEZUX0J5dGUgKSApICsKKyAgICAgICAgICAgICAgIChGVF9PZmZzZXQpb3V0Zy0+b3V0bGluZS5uX2NvbnRvdXJzICogc2l6ZW9mICggRlRfU2hvcnQgKSArCisgICAgICAgICAgICAgICBzaXplb2YgKCAqb3V0ZyApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgOworICAgIH0KKworICAgIHNpemUgKz0gc2l6ZW9mICggKmlub2RlICk7CisgICAgcmV0dXJuIHNpemU7CisgIH0KKworCisjaWYgMAorCisgIEZUX0xPQ0FMX0RFRiggRlRfT2Zmc2V0ICkKKyAgRlRDX0lOb2RlX1dlaWdodCggRlRDX0lOb2RlICBpbm9kZSApCisgIHsKKyAgICByZXR1cm4gZnRjX2lub2RlX3dlaWdodCggRlRDX05PREUoIGlub2RlICksIE5VTEwgKTsKKyAgfQorCisjZW5kaWYgLyogMCAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNpbWFnZS5oIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNpbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTJlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y2ltYWdlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBHZW5lcmljIEltYWdlIGNhY2hlIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIC8qCisgICogIEZUQ19JQ2FjaGUgaXMgYW4gX2Fic3RyYWN0XyBjYWNoZSB1c2VkIHRvIHN0b3JlIGEgc2luZ2xlIEZUX0dseXBoCisgICogIGltYWdlIHBlciBjYWNoZSBub2RlLgorICAqCisgICogIEZUQ19JQ2FjaGUgZXh0ZW5kcyBGVENfR0NhY2hlLiAgRm9yIGFuIGltcGxlbWVudGF0aW9uIGV4YW1wbGUsCisgICogIHNlZSBGVENfSW1hZ2VDYWNoZSBpbiBgc3JjL2NhY2hlL2Z0YmFzaWMuYycuCisgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVhY2ggaW1hZ2UgY2FjaGUgcmVhbGx5IG1hbmFnZXMgRlRfR2x5cGggb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQ0lNQUdFX0hfXworI2RlZmluZSBfX0ZUQ0lNQUdFX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ0FDSEVfSAorI2luY2x1ZGUgImZ0Y2dseXBoLmgiCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyogdGhlIEZUX0dseXBoIGltYWdlIG5vZGUgdHlwZSAtIHdlIHN0b3JlIG9ubHkgMSBnbHlwaCBwZXIgbm9kZSAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRDX0lOb2RlUmVjXworICB7CisgICAgRlRDX0dOb2RlUmVjICBnbm9kZTsKKyAgICBGVF9HbHlwaCAgICAgIGdseXBoOworCisgIH0gRlRDX0lOb2RlUmVjLCAqRlRDX0lOb2RlOworCisjZGVmaW5lIEZUQ19JTk9ERSggeCApICAgICAgICAgKCAoRlRDX0lOb2RlKSggeCApICkKKyNkZWZpbmUgRlRDX0lOT0RFX0dJTkRFWCggeCApICBGVENfR05PREUoeCktPmdpbmRleAorI2RlZmluZSBGVENfSU5PREVfRkFNSUxZKCB4ICkgIEZUQ19HTk9ERSh4KS0+ZmFtaWx5CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUQ19JRmFtaWx5X0xvYWRHbHlwaEZ1bmMpKCBGVENfRmFtaWx5ICBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgKmFnbHlwaCApOworCisgIHR5cGVkZWYgc3RydWN0ICBGVENfSUZhbWlseUNsYXNzUmVjXworICB7CisgICAgRlRDX01ydUxpc3RDbGFzc1JlYyAgICAgICAgY2xheno7CisgICAgRlRDX0lGYW1pbHlfTG9hZEdseXBoRnVuYyAgZmFtaWx5X2xvYWRfZ2x5cGg7CisKKyAgfSBGVENfSUZhbWlseUNsYXNzUmVjOworCisgIHR5cGVkZWYgY29uc3QgRlRDX0lGYW1pbHlDbGFzc1JlYyogIEZUQ19JRmFtaWx5Q2xhc3M7CisKKyNkZWZpbmUgRlRDX0lGQU1JTFlfQ0xBU1MoIHggKSAgKChGVENfSUZhbWlseUNsYXNzKSh4KSkKKworI2RlZmluZSBGVENfQ0FDSEVfX0lGQU1JTFlfQ0xBU1MoIHggKSBcCisgICAgICAgICAgRlRDX0lGQU1JTFlfQ0xBU1MoIEZUQ19DQUNIRV9fR0NBQ0hFX0NMQVNTKHgpLT5mYW1pbHlfY2xhc3MgKQorCisKKyAgLyogY2FuIGJlIHVzZWQgYXMgYSBARlRDX05vZGVfRnJlZUZ1bmMgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBGVENfSU5vZGVfRnJlZSggRlRDX0lOb2RlICBpbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKKworICAvKiBDYW4gYmUgdXNlZCBhcyBARlRDX05vZGVfTmV3RnVuYy4gIGBncXVlcnkuaW5kZXgnIGFuZCBgZ3F1ZXJ5LmZhbWlseScKKyAgICogbXVzdCBiZSBzZXQgY29ycmVjdGx5LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGBmYW1pbHlfbG9hZF9nbHlwaCcKKyAgICogbWV0aG9kIHRvIGxvYWQgdGhlIEZUX0dseXBoIGludG8gdGhlIGNhY2hlIG5vZGUuCisgICAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBGVENfSU5vZGVfTmV3KCBGVENfSU5vZGUgICAqcGlub2RlLAorICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICAgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICAgY2FjaGUgKTsKKworI2lmIDAKKyAgLyogY2FuIGJlIHVzZWQgYXMgQEZUQ19Ob2RlX1dlaWdodEZ1bmMgKi8KKyAgRlRfTE9DQUwoIEZUX1VMb25nICkKKyAgRlRDX0lOb2RlX1dlaWdodCggRlRDX0lOb2RlICBpbm9kZSApOworI2VuZGlmCisKKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRDSU1BR0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21hbmFnLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21hbmFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4NjE0YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjbWFuYWcuYwpAQCAtMCwwICsxLDcwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjbWFuYWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIENhY2hlIE1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNtYW5hZy5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9TSVpFU19ICisKKyNpbmNsdWRlICJmdGNjYmFjay5oIgorI2luY2x1ZGUgImZ0Y2Vycm9yLmgiCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworI2Vycm9yICJjYWNoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgorI2VuZGlmCisKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jYWNoZQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0Y19zY2FsZXJfbG9va3VwX3NpemUoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU2NhbGVyICAgc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAqYXNpemUgKQorICB7CisgICAgRlRfRmFjZSAgIGZhY2U7CisgICAgRlRfU2l6ZSAgIHNpemUgPSBOVUxMOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBGVENfTWFuYWdlcl9Mb29rdXBGYWNlKCBtYW5hZ2VyLCBzY2FsZXItPmZhY2VfaWQsICZmYWNlICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IEZUX05ld19TaXplKCBmYWNlLCAmc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfQWN0aXZhdGVfU2l6ZSggc2l6ZSApOworCisgICAgaWYgKCBzY2FsZXItPnBpeGVsICkKKyAgICAgIGVycm9yID0gRlRfU2V0X1BpeGVsX1NpemVzKCBmYWNlLCBzY2FsZXItPndpZHRoLCBzY2FsZXItPmhlaWdodCApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfU2V0X0NoYXJfU2l6ZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0YyNkRvdDYpc2NhbGVyLT53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0YyNkRvdDYpc2NhbGVyLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlci0+eF9yZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlci0+eV9yZXMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBGVF9Eb25lX1NpemUoIHNpemUgKTsKKyAgICAgIHNpemUgPSBOVUxMOworICAgIH0KKworICBFeGl0OgorICAgICphc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICB0eXBlZGVmIHN0cnVjdCAgRlRDX1NpemVOb2RlUmVjXworICB7CisgICAgRlRDX01ydU5vZGVSZWMgIG5vZGU7CisgICAgRlRfU2l6ZSAgICAgICAgIHNpemU7CisgICAgRlRDX1NjYWxlclJlYyAgIHNjYWxlcjsKKworICB9IEZUQ19TaXplTm9kZVJlYywgKkZUQ19TaXplTm9kZTsKKworI2RlZmluZSBGVENfU0laRV9OT0RFKCB4ICkgKCAoRlRDX1NpemVOb2RlKSggeCApICkKKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0Y19zaXplX25vZGVfZG9uZSggRlRDX01ydU5vZGUgIGZ0Y25vZGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGRhdGEgKQorICB7CisgICAgRlRDX1NpemVOb2RlICBub2RlID0gKEZUQ19TaXplTm9kZSlmdGNub2RlOworICAgIEZUX1NpemUgICAgICAgc2l6ZSA9IG5vZGUtPnNpemU7CisgICAgRlRfVU5VU0VEKCBkYXRhICk7CisKKworICAgIGlmICggc2l6ZSApCisgICAgICBGVF9Eb25lX1NpemUoIHNpemUgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Cb29sICkKKyAgZnRjX3NpemVfbm9kZV9jb21wYXJlKCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjc2NhbGVyICkKKyAgeworICAgIEZUQ19TaXplTm9kZSAgbm9kZSAgICA9IChGVENfU2l6ZU5vZGUpZnRjbm9kZTsKKyAgICBGVENfU2NhbGVyICAgIHNjYWxlciAgPSAoRlRDX1NjYWxlcilmdGNzY2FsZXI7CisgICAgRlRDX1NjYWxlciAgICBzY2FsZXIwID0gJm5vZGUtPnNjYWxlcjsKKworCisgICAgaWYgKCBGVENfU0NBTEVSX0NPTVBBUkUoIHNjYWxlcjAsIHNjYWxlciApICkKKyAgICB7CisgICAgICBGVF9BY3RpdmF0ZV9TaXplKCBub2RlLT5zaXplICk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBmdGNfc2l6ZV9ub2RlX2luaXQoIEZUQ19NcnVOb2RlICBmdGNub2RlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNzY2FsZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y21hbmFnZXIgKQorICB7CisgICAgRlRDX1NpemVOb2RlICBub2RlICAgID0gKEZUQ19TaXplTm9kZSlmdGNub2RlOworICAgIEZUQ19TY2FsZXIgICAgc2NhbGVyICA9IChGVENfU2NhbGVyKWZ0Y3NjYWxlcjsKKyAgICBGVENfTWFuYWdlciAgIG1hbmFnZXIgPSAoRlRDX01hbmFnZXIpZnRjbWFuYWdlcjsKKworCisgICAgbm9kZS0+c2NhbGVyID0gc2NhbGVyWzBdOworCisgICAgcmV0dXJuIGZ0Y19zY2FsZXJfbG9va3VwX3NpemUoIG1hbmFnZXIsIHNjYWxlciwgJm5vZGUtPnNpemUgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGZ0Y19zaXplX25vZGVfcmVzZXQoIEZUQ19NcnVOb2RlICBmdGNub2RlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjc2NhbGVyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjbWFuYWdlciApCisgIHsKKyAgICBGVENfU2l6ZU5vZGUgIG5vZGUgICAgPSAoRlRDX1NpemVOb2RlKWZ0Y25vZGU7CisgICAgRlRDX1NjYWxlciAgICBzY2FsZXIgID0gKEZUQ19TY2FsZXIpZnRjc2NhbGVyOworICAgIEZUQ19NYW5hZ2VyICAgbWFuYWdlciA9IChGVENfTWFuYWdlcilmdGNtYW5hZ2VyOworCisKKyAgICBGVF9Eb25lX1NpemUoIG5vZGUtPnNpemUgKTsKKworICAgIG5vZGUtPnNjYWxlciA9IHNjYWxlclswXTsKKworICAgIHJldHVybiBmdGNfc2NhbGVyX2xvb2t1cF9zaXplKCBtYW5hZ2VyLCBzY2FsZXIsICZub2RlLT5zaXplICk7CisgIH0KKworCisgIHN0YXRpYworICBjb25zdCBGVENfTXJ1TGlzdENsYXNzUmVjICBmdGNfc2l6ZV9saXN0X2NsYXNzID0KKyAgeworICAgIHNpemVvZiAoIEZUQ19TaXplTm9kZVJlYyApLAorICAgIGZ0Y19zaXplX25vZGVfY29tcGFyZSwKKyAgICBmdGNfc2l6ZV9ub2RlX2luaXQsCisgICAgZnRjX3NpemVfbm9kZV9yZXNldCwKKyAgICBmdGNfc2l6ZV9ub2RlX2RvbmUKKyAgfTsKKworCisgIC8qIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZ0Y19mYWNlX25vZGVfZG9uZSAqLworICBzdGF0aWMgRlRfQm9vbAorICBmdGNfc2l6ZV9ub2RlX2NvbXBhcmVfZmFjZWlkKCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y2ZhY2VfaWQgKQorICB7CisgICAgRlRDX1NpemVOb2RlICBub2RlICAgID0gKEZUQ19TaXplTm9kZSlmdGNub2RlOworICAgIEZUQ19GYWNlSUQgICAgZmFjZV9pZCA9IChGVENfRmFjZUlEKWZ0Y2ZhY2VfaWQ7CisKKworICAgIHJldHVybiBGVF9CT09MKCBub2RlLT5zY2FsZXIuZmFjZV9pZCA9PSBmYWNlX2lkICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfTWFuYWdlcl9Mb29rdXBTaXplKCBGVENfTWFuYWdlciAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgIHNjYWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgKmFzaXplICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVENfTXJ1Tm9kZSAgbXJ1bm9kZTsKKworCisgICAgaWYgKCAhYXNpemUgfHwgIXNjYWxlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICphc2l6ZSA9IE5VTEw7CisKKyAgICBpZiAoICFtYW5hZ2VyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DYWNoZV9IYW5kbGUgKTsKKworI2lmZGVmIEZUQ19JTkxJTkUKKworICAgIEZUQ19NUlVMSVNUX0xPT0tVUF9DTVAoICZtYW5hZ2VyLT5zaXplcywgc2NhbGVyLCBmdGNfc2l6ZV9ub2RlX2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJ1bm9kZSwgZXJyb3IgKTsKKworI2Vsc2UKKyAgICBlcnJvciA9IEZUQ19NcnVMaXN0X0xvb2t1cCggJm1hbmFnZXItPnNpemVzLCBzY2FsZXIsICZtcnVub2RlICk7CisjZW5kaWYKKworICAgIGlmICggIWVycm9yICkKKyAgICAgICphc2l6ZSA9IEZUQ19TSVpFX05PREUoIG1ydW5vZGUgKS0+c2l6ZTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBGQUNFIE1SVSBJTVBMRU1FTlRBVElPTiAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19GYWNlTm9kZVJlY18KKyAgeworICAgIEZUQ19NcnVOb2RlUmVjICBub2RlOworICAgIEZUQ19GYWNlSUQgICAgICBmYWNlX2lkOworICAgIEZUX0ZhY2UgICAgICAgICBmYWNlOworCisgIH0gRlRDX0ZhY2VOb2RlUmVjLCAqRlRDX0ZhY2VOb2RlOworCisjZGVmaW5lIEZUQ19GQUNFX05PREUoIHggKSAoICggRlRDX0ZhY2VOb2RlICkoIHggKSApCisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgZnRjX2ZhY2Vfbm9kZV9pbml0KCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjZmFjZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjbWFuYWdlciApCisgIHsKKyAgICBGVENfRmFjZU5vZGUgIG5vZGUgICAgPSAoRlRDX0ZhY2VOb2RlKWZ0Y25vZGU7CisgICAgRlRDX0ZhY2VJRCAgICBmYWNlX2lkID0gKEZUQ19GYWNlSUQpZnRjZmFjZV9pZDsKKyAgICBGVENfTWFuYWdlciAgIG1hbmFnZXIgPSAoRlRDX01hbmFnZXIpZnRjbWFuYWdlcjsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworCisKKyAgICBub2RlLT5mYWNlX2lkID0gZmFjZV9pZDsKKworICAgIGVycm9yID0gbWFuYWdlci0+cmVxdWVzdF9mYWNlKCBmYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLT5saWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLT5yZXF1ZXN0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZub2RlLT5mYWNlICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIC8qIGRlc3Ryb3kgaW5pdGlhbCBzaXplIG9iamVjdDsgaXQgd2lsbCBiZSByZS1jcmVhdGVkIGxhdGVyICovCisgICAgICBpZiAoIG5vZGUtPmZhY2UtPnNpemUgKQorICAgICAgICBGVF9Eb25lX1NpemUoIG5vZGUtPmZhY2UtPnNpemUgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGZ0Y19mYWNlX25vZGVfZG9uZSggRlRDX01ydU5vZGUgIGZ0Y25vZGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y21hbmFnZXIgKQorICB7CisgICAgRlRDX0ZhY2VOb2RlICBub2RlICAgID0gKEZUQ19GYWNlTm9kZSlmdGNub2RlOworICAgIEZUQ19NYW5hZ2VyICAgbWFuYWdlciA9IChGVENfTWFuYWdlcilmdGNtYW5hZ2VyOworCisKKyAgICAvKiB3ZSBtdXN0IGJlZ2luIGJ5IHJlbW92aW5nIGFsbCBzY2FsZXJzIGZvciB0aGUgdGFyZ2V0IGZhY2UgKi8KKyAgICAvKiBmcm9tIHRoZSBtYW5hZ2VyJ3MgbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVENfTXJ1TGlzdF9SZW1vdmVTZWxlY3Rpb24oICZtYW5hZ2VyLT5zaXplcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0Y19zaXplX25vZGVfY29tcGFyZV9mYWNlaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5mYWNlX2lkICk7CisKKyAgICAvKiBhbGwgcmlnaHQsIHdlIGNhbiBkaXNjYXJkIHRoZSBmYWNlIG5vdyAqLworICAgIEZUX0RvbmVfRmFjZSggbm9kZS0+ZmFjZSApOworICAgIG5vZGUtPmZhY2UgICAgPSBOVUxMOworICAgIG5vZGUtPmZhY2VfaWQgPSBOVUxMOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Jvb2wgKQorICBmdGNfZmFjZV9ub2RlX2NvbXBhcmUoIEZUQ19NcnVOb2RlICBmdGNub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNmYWNlX2lkICkKKyAgeworICAgIEZUQ19GYWNlTm9kZSAgbm9kZSAgICA9IChGVENfRmFjZU5vZGUpZnRjbm9kZTsKKyAgICBGVENfRmFjZUlEICAgIGZhY2VfaWQgPSAoRlRDX0ZhY2VJRClmdGNmYWNlX2lkOworCisKKyAgICByZXR1cm4gRlRfQk9PTCggbm9kZS0+ZmFjZV9pZCA9PSBmYWNlX2lkICk7CisgIH0KKworCisgIHN0YXRpYworICBjb25zdCBGVENfTXJ1TGlzdENsYXNzUmVjICBmdGNfZmFjZV9saXN0X2NsYXNzID0KKyAgeworICAgIHNpemVvZiAoIEZUQ19GYWNlTm9kZVJlYyksCisKKyAgICBmdGNfZmFjZV9ub2RlX2NvbXBhcmUsCisgICAgZnRjX2ZhY2Vfbm9kZV9pbml0LAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVENfTXJ1Tm9kZV9SZXNldEZ1bmMgKi8KKyAgICBmdGNfZmFjZV9ub2RlX2RvbmUKKyAgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfTWFuYWdlcl9Mb29rdXBGYWNlKCBGVENfTWFuYWdlciAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgIGZhY2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgRlRDX01ydU5vZGUgIG1ydW5vZGU7CisKKworICAgIGlmICggIWFmYWNlIHx8ICFmYWNlX2lkICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgKmFmYWNlID0gTlVMTDsKKworICAgIGlmICggIW1hbmFnZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0NhY2hlX0hhbmRsZSApOworCisgICAgLyogd2UgYnJlYWsgZW5jYXBzdWxhdGlvbiBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQgKi8KKyNpZmRlZiBGVENfSU5MSU5FCisKKyAgICBGVENfTVJVTElTVF9MT09LVVBfQ01QKCAmbWFuYWdlci0+ZmFjZXMsIGZhY2VfaWQsIGZ0Y19mYWNlX25vZGVfY29tcGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcnVub2RlLCBlcnJvciApOworCisjZWxzZQorICAgIGVycm9yID0gRlRDX01ydUxpc3RfTG9va3VwKCAmbWFuYWdlci0+ZmFjZXMsIGZhY2VfaWQsICZtcnVub2RlICk7CisjZW5kaWYKKworICAgIGlmICggIWVycm9yICkKKyAgICAgICphZmFjZSA9IEZUQ19GQUNFX05PREUoIG1ydW5vZGUgKS0+ZmFjZTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBDQUNIRSBNQU5BR0VSIFJPVVRJTkVTICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX01hbmFnZXJfTmV3KCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICBtYXhfZmFjZXMsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICBtYXhfc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgICBtYXhfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VfUmVxdWVzdGVyICByZXF1ZXN0ZXIsCisgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICAgICByZXFfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgICAgICAgKmFtYW5hZ2VyICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5OworICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyID0gMDsKKworCisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGlmICggIWFtYW5hZ2VyIHx8ICFyZXF1ZXN0ZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBpZiAoIEZUX05FVyggbWFuYWdlciApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggbWF4X2ZhY2VzID09IDAgKQorICAgICAgbWF4X2ZhY2VzID0gRlRDX01BWF9GQUNFU19ERUZBVUxUOworCisgICAgaWYgKCBtYXhfc2l6ZXMgPT0gMCApCisgICAgICBtYXhfc2l6ZXMgPSBGVENfTUFYX1NJWkVTX0RFRkFVTFQ7CisKKyAgICBpZiAoIG1heF9ieXRlcyA9PSAwICkKKyAgICAgIG1heF9ieXRlcyA9IEZUQ19NQVhfQllURVNfREVGQVVMVDsKKworICAgIG1hbmFnZXItPmxpYnJhcnkgICAgICA9IGxpYnJhcnk7CisgICAgbWFuYWdlci0+bWVtb3J5ICAgICAgID0gbWVtb3J5OworICAgIG1hbmFnZXItPm1heF93ZWlnaHQgICA9IG1heF9ieXRlczsKKworICAgIG1hbmFnZXItPnJlcXVlc3RfZmFjZSA9IHJlcXVlc3RlcjsKKyAgICBtYW5hZ2VyLT5yZXF1ZXN0X2RhdGEgPSByZXFfZGF0YTsKKworICAgIEZUQ19NcnVMaXN0X0luaXQoICZtYW5hZ2VyLT5mYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAmZnRjX2ZhY2VfbGlzdF9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICBtYXhfZmFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKTsKKworICAgIEZUQ19NcnVMaXN0X0luaXQoICZtYW5hZ2VyLT5zaXplcywKKyAgICAgICAgICAgICAgICAgICAgICAmZnRjX3NpemVfbGlzdF9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKTsKKworICAgICphbWFuYWdlciA9IG1hbmFnZXI7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19NYW5hZ2VyX0RvbmUoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX1VJbnQgICAgaWR4OworCisKKyAgICBpZiAoICFtYW5hZ2VyIHx8ICFtYW5hZ2VyLT5saWJyYXJ5ICkKKyAgICAgIHJldHVybjsKKworICAgIG1lbW9yeSA9IG1hbmFnZXItPm1lbW9yeTsKKworICAgIC8qIG5vdyBkaXNjYXJkIGFsbCBjYWNoZXMgKi8KKyAgICBmb3IgKGlkeCA9IG1hbmFnZXItPm51bV9jYWNoZXM7IGlkeC0tID4gMDsgKQorICAgIHsKKyAgICAgIEZUQ19DYWNoZSAgY2FjaGUgPSBtYW5hZ2VyLT5jYWNoZXNbaWR4XTsKKworCisgICAgICBpZiAoIGNhY2hlICkKKyAgICAgIHsKKyAgICAgICAgY2FjaGUtPmNsYXp6LmNhY2hlX2RvbmUoIGNhY2hlICk7CisgICAgICAgIEZUX0ZSRUUoIGNhY2hlICk7CisgICAgICAgIG1hbmFnZXItPmNhY2hlc1tpZHhdID0gTlVMTDsKKyAgICAgIH0KKyAgICB9CisgICAgbWFuYWdlci0+bnVtX2NhY2hlcyA9IDA7CisKKyAgICAvKiBkaXNjYXJkIGZhY2VzIGFuZCBzaXplcyAqLworICAgIEZUQ19NcnVMaXN0X0RvbmUoICZtYW5hZ2VyLT5zaXplcyApOworICAgIEZUQ19NcnVMaXN0X0RvbmUoICZtYW5hZ2VyLT5mYWNlcyApOworCisgICAgbWFuYWdlci0+bGlicmFyeSA9IE5VTEw7CisgICAgbWFuYWdlci0+bWVtb3J5ICA9IE5VTEw7CisKKyAgICBGVF9GUkVFKCBtYW5hZ2VyICk7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19NYW5hZ2VyX1Jlc2V0KCBGVENfTWFuYWdlciAgbWFuYWdlciApCisgIHsKKyAgICBpZiAoICFtYW5hZ2VyICkKKyAgICAgIHJldHVybjsKKworICAgIEZUQ19NcnVMaXN0X1Jlc2V0KCAmbWFuYWdlci0+c2l6ZXMgKTsKKyAgICBGVENfTXJ1TGlzdF9SZXNldCggJm1hbmFnZXItPmZhY2VzICk7CisKKyAgICBGVENfTWFuYWdlcl9GbHVzaE4oIG1hbmFnZXIsIG1hbmFnZXItPm51bV9ub2RlcyApOworICB9CisKKworI2lmZGVmIEZUX0RFQlVHX0VSUk9SCisKKyAgc3RhdGljIHZvaWQKKyAgRlRDX01hbmFnZXJfQ2hlY2soIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgeworICAgIEZUQ19Ob2RlICBub2RlLCBmaXJzdDsKKworCisgICAgZmlyc3QgPSBtYW5hZ2VyLT5ub2Rlc19saXN0OworCisgICAgLyogY2hlY2sgbm9kZSB3ZWlnaHRzICovCisgICAgaWYgKCBmaXJzdCApCisgICAgeworICAgICAgRlRfT2Zmc2V0ICB3ZWlnaHQgPSAwOworCisKKyAgICAgIG5vZGUgPSBmaXJzdDsKKworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgRlRDX0NhY2hlICBjYWNoZSA9IG1hbmFnZXItPmNhY2hlc1tub2RlLT5jYWNoZV9pbmRleF07CisKKworICAgICAgICBpZiAoIChGVF9VSW50KW5vZGUtPmNhY2hlX2luZGV4ID49IG1hbmFnZXItPm51bV9jYWNoZXMgKQorICAgICAgICAgIEZUX1RSQUNFMCgoICJGVENfTWFuYWdlcl9DaGVjazogaW52YWxpZCBub2RlIChjYWNoZSBpbmRleCA9ICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jYWNoZV9pbmRleCApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdlaWdodCArPSBjYWNoZS0+Y2xhenoubm9kZV93ZWlnaHQoIG5vZGUsIGNhY2hlICk7CisKKyAgICAgICAgbm9kZSA9IEZUQ19OT0RFX19ORVhUKCBub2RlICk7CisKKyAgICAgIH0gd2hpbGUgKCBub2RlICE9IGZpcnN0ICk7CisKKyAgICAgIGlmICggd2VpZ2h0ICE9IG1hbmFnZXItPmN1cl93ZWlnaHQgKQorICAgICAgICBGVF9UUkFDRTAoKCAiRlRDX01hbmFnZXJfQ2hlY2s6IGludmFsaWQgd2VpZ2h0ICVsZCBpbnN0ZWFkIG9mICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlci0+Y3VyX3dlaWdodCwgd2VpZ2h0ICkpOworICAgIH0KKworICAgIC8qIGNoZWNrIGNpcmN1bGFyIGxpc3QgKi8KKyAgICBpZiAoIGZpcnN0ICkKKyAgICB7CisgICAgICBGVF9VRmFzdCAgY291bnQgPSAwOworCisKKyAgICAgIG5vZGUgPSBmaXJzdDsKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIG5vZGUgPSBGVENfTk9ERV9fTkVYVCggbm9kZSApOworCisgICAgICB9IHdoaWxlICggbm9kZSAhPSBmaXJzdCApOworCisgICAgICBpZiAoIGNvdW50ICE9IG1hbmFnZXItPm51bV9ub2RlcyApCisgICAgICAgIEZUX1RSQUNFMCgoICJGVENfTWFuYWdlcl9DaGVjazoiCisgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBjYWNoZSBub2RlIGNvdW50ICVkIGluc3RlYWQgb2YgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZXItPm51bV9ub2RlcywgY291bnQgKSk7CisgICAgfQorICB9CisKKyNlbmRpZiAvKiBGVF9ERUJVR19FUlJPUiAqLworCisKKyAgLyogYENvbXByZXNzJyB0aGUgbWFuYWdlcidzIGRhdGEsIGkuZS4sIGdldCByaWQgb2Ygb2xkIGNhY2hlIG5vZGVzICovCisgIC8qIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGFueW1vcmUgaW4gb3JkZXIgdG8gbGltaXQgdGhlIHRvdGFsICAgICAqLworICAvKiBtZW1vcnkgdXNlZCBieSB0aGUgY2FjaGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y21hbmFnLmggKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfTWFuYWdlcl9Db21wcmVzcyggRlRDX01hbmFnZXIgIG1hbmFnZXIgKQorICB7CisgICAgRlRDX05vZGUgICBub2RlLCBmaXJzdDsKKworCisgICAgaWYgKCAhbWFuYWdlciApCisgICAgICByZXR1cm47CisKKyAgICBmaXJzdCA9IG1hbmFnZXItPm5vZGVzX2xpc3Q7CisKKyNpZmRlZiBGVF9ERUJVR19FUlJPUgorICAgIEZUQ19NYW5hZ2VyX0NoZWNrKCBtYW5hZ2VyICk7CisKKyAgICBGVF9UUkFDRTAoKCAiY29tcHJlc3NpbmcsIHdlaWdodCA9ICVsZCwgbWF4ID0gJWxkLCBub2RlcyA9ICVkXG4iLAorICAgICAgICAgICAgICAgIG1hbmFnZXItPmN1cl93ZWlnaHQsIG1hbmFnZXItPm1heF93ZWlnaHQsCisgICAgICAgICAgICAgICAgbWFuYWdlci0+bnVtX25vZGVzICkpOworI2VuZGlmCisKKyAgICBpZiAoIG1hbmFnZXItPmN1cl93ZWlnaHQgPCBtYW5hZ2VyLT5tYXhfd2VpZ2h0IHx8IGZpcnN0ID09IE5VTEwgKQorICAgICAgcmV0dXJuOworCisgICAgLyogZ28gdG8gbGFzdCBub2RlIC0tIGl0J3MgYSBjaXJjdWxhciBsaXN0ICovCisgICAgbm9kZSA9IEZUQ19OT0RFX19QUkVWKCBmaXJzdCApOworICAgIGRvCisgICAgeworICAgICAgRlRDX05vZGUgIHByZXY7CisKKworICAgICAgcHJldiA9ICggbm9kZSA9PSBmaXJzdCApID8gTlVMTCA6IEZUQ19OT0RFX19QUkVWKCBub2RlICk7CisKKyAgICAgIGlmICggbm9kZS0+cmVmX2NvdW50IDw9IDAgKQorICAgICAgICBmdGNfbm9kZV9kZXN0cm95KCBub2RlLCBtYW5hZ2VyICk7CisKKyAgICAgIG5vZGUgPSBwcmV2OworCisgICAgfSB3aGlsZSAoIG5vZGUgJiYgbWFuYWdlci0+Y3VyX3dlaWdodCA+IG1hbmFnZXItPm1heF93ZWlnaHQgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNtYW5hZy5oICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGUoIEZUQ19NYW5hZ2VyICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlQ2xhc3MgICBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgICAgICphY2FjaGUgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOworICAgIEZUQ19DYWNoZSAgY2FjaGUgPSBOVUxMOworCisKKyAgICBpZiAoIG1hbmFnZXIgJiYgY2xhenogJiYgYWNhY2hlICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IG1hbmFnZXItPm1lbW9yeTsKKworCisgICAgICBpZiAoIG1hbmFnZXItPm51bV9jYWNoZXMgPj0gRlRDX01BWF9DQUNIRVMgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9DYWNoZXMgKTsKKyAgICAgICAgRlRfRVJST1IoKCAiRlRDX01hbmFnZXJfUmVnaXN0ZXJDYWNoZToiCisgICAgICAgICAgICAgICAgICAgIiB0b28gbWFueSByZWdpc3RlcmVkIGNhY2hlc1xuIiApKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoICFGVF9BTExPQyggY2FjaGUsIGNsYXp6LT5jYWNoZV9zaXplICkgKQorICAgICAgeworICAgICAgICBjYWNoZS0+bWFuYWdlciAgID0gbWFuYWdlcjsKKyAgICAgICAgY2FjaGUtPm1lbW9yeSAgICA9IG1lbW9yeTsKKyAgICAgICAgY2FjaGUtPmNsYXp6ICAgICA9IGNsYXp6WzBdOworICAgICAgICBjYWNoZS0+b3JnX2NsYXNzID0gY2xheno7CisKKyAgICAgICAgLyogVEhJUyBJUyBWRVJZIElNUE9SVEFOVCEgIElUIFdJTEwgV1JFVENIIFRIRSBNQU5BR0VSICovCisgICAgICAgIC8qIElGIElUIElTIE5PVCBTRVQgQ09SUkVDVExZICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBjYWNoZS0+aW5kZXggPSBtYW5hZ2VyLT5udW1fY2FjaGVzOworCisgICAgICAgIGVycm9yID0gY2xhenotPmNhY2hlX2luaXQoIGNhY2hlICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICB7CisgICAgICAgICAgY2xhenotPmNhY2hlX2RvbmUoIGNhY2hlICk7CisgICAgICAgICAgRlRfRlJFRSggY2FjaGUgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYW5hZ2VyLT5jYWNoZXNbbWFuYWdlci0+bnVtX2NhY2hlcysrXSA9IGNhY2hlOworICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIGlmICggYWNhY2hlICkKKyAgICAgICphY2FjaGUgPSBjYWNoZTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfVUludCApCisgIEZUQ19NYW5hZ2VyX0ZsdXNoTiggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGNvdW50ICkKKyAgeworICAgIEZUQ19Ob2RlICBmaXJzdCA9IG1hbmFnZXItPm5vZGVzX2xpc3Q7CisgICAgRlRDX05vZGUgIG5vZGU7CisgICAgRlRfVUludCAgIHJlc3VsdDsKKworCisgICAgLyogdHJ5IHRvIHJlbW92ZSBgY291bnQnIG5vZGVzIGZyb20gdGhlIGxpc3QgKi8KKyAgICBpZiAoIGZpcnN0ID09IE5VTEwgKSAgLyogZW1wdHkgbGlzdCEgKi8KKyAgICAgIHJldHVybiAwOworCisgICAgLyogZ28gdG8gbGFzdCBub2RlIC0gaXQncyBhIGNpcmN1bGFyIGxpc3QgKi8KKyAgICBub2RlID0gRlRDX05PREVfX1BSRVYoZmlyc3QpOworICAgIGZvciAoIHJlc3VsdCA9IDA7IHJlc3VsdCA8IGNvdW50OyApCisgICAgeworICAgICAgRlRDX05vZGUgIHByZXYgPSBGVENfTk9ERV9fUFJFViggbm9kZSApOworCisKKyAgICAgIC8qIGRvbid0IHRvdWNoIGxvY2tlZCBub2RlcyAqLworICAgICAgaWYgKCBub2RlLT5yZWZfY291bnQgPD0gMCApCisgICAgICB7CisgICAgICAgIGZ0Y19ub2RlX2Rlc3Ryb3koIG5vZGUsIG1hbmFnZXIgKTsKKyAgICAgICAgcmVzdWx0Kys7CisgICAgICB9CisKKyAgICAgIGlmICggbm9kZSA9PSBmaXJzdCApCisgICAgICAgIGJyZWFrOworCisgICAgICBub2RlID0gcHJldjsKKyAgICB9CisgICAgcmV0dXJuICByZXN1bHQ7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19NYW5hZ2VyX1JlbW92ZUZhY2VJRCggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgIGZhY2VfaWQgKQorICB7CisgICAgRlRfVUludCAgbm47CisKKworICAgIGlmICggIW1hbmFnZXIgfHwgIWZhY2VfaWQgKQorICAgICAgcmV0dXJuOworCisgICAgLyogdGhpcyB3aWxsIHJlbW92ZSBhbGwgRlRDX1NpemVOb2RlIHRoYXQgY29ycmVzcG9uZCB0bworICAgICAqIHRoZSBmYWNlX2lkIGFzIHdlbGwKKyAgICAgKi8KKyAgICBGVENfTXJ1TGlzdF9SZW1vdmVTZWxlY3Rpb24oICZtYW5hZ2VyLT5mYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0Y19mYWNlX25vZGVfY29tcGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaWQgKTsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBtYW5hZ2VyLT5udW1fY2FjaGVzOyBubisrICkKKyAgICAgIEZUQ19DYWNoZV9SZW1vdmVGYWNlSUQoIG1hbmFnZXItPmNhY2hlc1tubl0sIGZhY2VfaWQgKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhY2hlLmggKi8KKworICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRDX05vZGVfVW5yZWYoIEZUQ19Ob2RlICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgIG1hbmFnZXIgKQorICB7CisgICAgaWYgKCBub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIG1hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKEZUX1VJbnQpbm9kZS0+Y2FjaGVfaW5kZXggPCBtYW5hZ2VyLT5udW1fY2FjaGVzICkKKyAgICAgIG5vZGUtPnJlZl9jb3VudC0tOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21hbmFnLmggYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21hbmFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3ODdiNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjbWFuYWcuaApAQCAtMCwwICsxLDE3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjbWFuYWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIENhY2hlIE1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSBjYWNoZSBtYW5hZ2VyIGlzIGluIGNoYXJnZSBvZiB0aGUgZm9sbG93aW5nOiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBNYWludGFpbiBhIG1hcHBpbmcgYmV0d2VlbiBnZW5lcmljIEZUQ19GYWNlSURzIGFuZCBsaXZlIEZUX0ZhY2UgICAgKi8KKyAgLyogICAgb2JqZWN0cy4gIFRoZSBtYXBwaW5nIGl0c2VsZiBpcyBwZXJmb3JtZWQgdGhyb3VnaCBhIHVzZXItcHJvdmlkZWQgICovCisgIC8qICAgIGNhbGxiYWNrLiAgSG93ZXZlciwgdGhlIG1hbmFnZXIgbWFpbnRhaW5zIGEgc21hbGwgY2FjaGUgb2YgRlRfRmFjZSAqLworICAvKiAgICBhbmQgRlRfU2l6ZSBvYmplY3RzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoaW5ncyBjb25zaWRlcmFibHkuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAtIE1hbmFnZSBvbmUgb3IgbW9yZSBjYWNoZSBvYmplY3RzLiAgRWFjaCBjYWNoZSBpcyBpbiBjaGFyZ2Ugb2YgICAgICAqLworICAvKiAgICBob2xkaW5nIGEgdmFyeWluZyBudW1iZXIgb2YgYGNhY2hlIG5vZGVzJy4gIEVhY2ggY2FjaGUgbm9kZSAgICAgICAgKi8KKyAgLyogICAgcmVwcmVzZW50cyBhIG1pbmltYWwgYW1vdW50IG9mIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGNhY2hlZCAgICAgICovCisgIC8qICAgIGRhdGEuICBGb3IgZXhhbXBsZSwgYSBjYWNoZSBub2RlIGNhbiBiZSBhbiBGVF9HbHlwaCBpbWFnZSAgICAgICAgICAqLworICAvKiAgICBjb250YWluaW5nIGEgdmVjdG9yIG91dGxpbmUsIG9yIHNvbWUgZ2x5cGggbWV0cmljcywgb3IgYW55dGhpbmcgICAgKi8KKyAgLyogICAgZWxzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIGNhY2hlIG5vZGUgaGFzIGEgY2VydGFpbiBzaXplIGluIGJ5dGVzIHRoYXQgaXMgYWRkZWQgdG8gdGhlICAgKi8KKyAgLyogICAgdG90YWwgYW1vdW50IG9mIGBjYWNoZSBtZW1vcnknIHdpdGhpbiB0aGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbGwgY2FjaGUgbm9kZXMgYXJlIGxvY2F0ZWQgaW4gYSBnbG9iYWwgTFJVIGxpc3QsIHdoZXJlIHRoZSBvbGRlc3QgKi8KKyAgLyogICAgbm9kZSBpcyBhdCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIG5vZGUgYmVsb25ncyB0byBhIHNpbmdsZSBjYWNoZSwgYW5kIGluY2x1ZGVzIGEgcmVmZXJlbmNlICAgICAgKi8KKyAgLyogICAgY291bnQgdG8gYXZvaWQgZGVzdHJveWluZyBpdCAoZHVlIHRvIGNhY2hpbmcpLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKiogICAgICAgICAgICAgV0FSTklORywgVEhJUyBJUyBCRVRBIENPREUuICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVENNQU5BR19IX18KKyNkZWZpbmUgX19GVENNQU5BR19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNtcnUuaCIKKyNpbmNsdWRlICJmdGNjYWNoZS5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2FjaGVfc3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUQ19NQVhfRkFDRVNfREVGQVVMVCAgMgorI2RlZmluZSBGVENfTUFYX1NJWkVTX0RFRkFVTFQgIDQKKyNkZWZpbmUgRlRDX01BWF9CWVRFU19ERUZBVUxUICAyMDAwMDBMICAvKiB+MjAwa0J5dGUgYnkgZGVmYXVsdCAqLworCisgIC8qIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlcyByZWdpc3RlcmVkIGluIGEgc2luZ2xlIG1hbmFnZXIgKi8KKyNkZWZpbmUgRlRDX01BWF9DQUNIRVMgICAgICAgICAxNgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19NYW5hZ2VyUmVjXworICB7CisgICAgRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5OworICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5OworCisgICAgRlRDX05vZGUgICAgICAgICAgICBub2Rlc19saXN0OworICAgIEZUX09mZnNldCAgICAgICAgICAgbWF4X3dlaWdodDsKKyAgICBGVF9PZmZzZXQgICAgICAgICAgIGN1cl93ZWlnaHQ7CisgICAgRlRfVUludCAgICAgICAgICAgICBudW1fbm9kZXM7CisKKyAgICBGVENfQ2FjaGUgICAgICAgICAgIGNhY2hlc1tGVENfTUFYX0NBQ0hFU107CisgICAgRlRfVUludCAgICAgICAgICAgICBudW1fY2FjaGVzOworCisgICAgRlRDX01ydUxpc3RSZWMgICAgICBmYWNlczsKKyAgICBGVENfTXJ1TGlzdFJlYyAgICAgIHNpemVzOworCisgICAgRlRfUG9pbnRlciAgICAgICAgICByZXF1ZXN0X2RhdGE7CisgICAgRlRDX0ZhY2VfUmVxdWVzdGVyICByZXF1ZXN0X2ZhY2U7CisKKyAgfSBGVENfTWFuYWdlclJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUQ19NYW5hZ2VyX0NvbXByZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIGNhY2hlIG1hbmFnZXIgaWYgICAqLworICAvKiAgICBpdHMgYG51bV9ieXRlcycgZmllbGQgaXMgZ3JlYXRlciB0aGFuIGl0cyBgbWF4X2J5dGVzJyBmaWVsZC4gIEl0ICAgKi8KKyAgLyogICAgd2lsbCBmbHVzaCBhcyBtYW55IG9sZCBjYWNoZSBub2RlcyBhcyBwb3NzaWJsZSAoaWdub3JpbmcgY2FjaGUgICAgICovCisgIC8qICAgIG5vZGVzIHdpdGggYSBub24temVybyByZWZlcmVuY2UgY291bnQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hbmFnZXIgOjogQSBoYW5kbGUgdG8gdGhlIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuICBJdCBpcyAqLworICAvKiAgICBub3JtYWxseSBpbnZva2VkIGJ5IHNwZWNpZmljIGNhY2hlIGltcGxlbWVudGF0aW9ucy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZWFzb24gdGhpcyBmdW5jdGlvbiBpcyBleHBvcnRlZCBpcyB0byBhbGxvdyBjbGllbnQtc3BlY2lmaWMgICAqLworICAvKiAgICBjYWNoZSBjbGFzc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX01hbmFnZXJfQ29tcHJlc3MoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CisKKworICAvKiB0cnkgdG8gZmx1c2ggYGNvdW50JyBvbGQgbm9kZXMgZnJvbSB0aGUgY2FjaGU7IHJldHVybiB0aGUgbnVtYmVyCisgICAqIG9mIHJlYWxseSBmbHVzaGVkIG5vZGVzCisgICAqLworICBGVF9MT0NBTCggRlRfVUludCApCisgIEZUQ19NYW5hZ2VyX0ZsdXNoTiggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGNvdW50ICk7CisKKworICAvKiB0aGlzIG11c3QgYmUgdXNlZCBpbnRlcm5hbGx5IGZvciB0aGUgbW9tZW50ICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGUoIEZUQ19NYW5hZ2VyICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlQ2xhc3MgICBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgICAgICphY2FjaGUgKTsKKworIC8qICovCisKKyNkZWZpbmUgRlRDX1NDQUxFUl9DT01QQVJFKCBhLCBiICkgICAgICAgICAgICAgICAgXAorICAgICggKGEpLT5mYWNlX2lkICAgICAgPT0gKGIpLT5mYWNlX2lkICAgICAgJiYgICBcCisgICAgICAoYSktPndpZHRoICAgICAgICA9PSAoYiktPndpZHRoICAgICAgICAmJiAgIFwKKyAgICAgIChhKS0+aGVpZ2h0ICAgICAgID09IChiKS0+aGVpZ2h0ICAgICAgICYmICAgXAorICAgICAgKChhKS0+cGl4ZWwgIT0gMCkgPT0gKChiKS0+cGl4ZWwgIT0gMCkgJiYgICBcCisgICAgICAoIChhKS0+cGl4ZWwgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoYSktPnhfcmVzID09IChiKS0+eF9yZXMgJiYgICAgICAgICAgICAgXAorICAgICAgICAgIChhKS0+eV9yZXMgPT0gKGIpLT55X3JlcyApICkgKQorCisjZGVmaW5lIEZUQ19TQ0FMRVJfSEFTSCggcSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggX0ZUQ19GQUNFX0lEX0hBU0goIChxKS0+ZmFjZV9pZCApICsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocSktPndpZHRoICsgKHEpLT5oZWlnaHQqNyArICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKCAocSktPnBpeGVsID8gMCA6ICggKHEpLT54X3JlcyozMyBeIChxKS0+eV9yZXMqNjEgKSApICkKKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRDTUFOQUdfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21ydS5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNtcnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNlNGYzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNtcnUuYwpAQCAtMCwwICsxLDM1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRjbXJ1LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIE1SVSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNtcnUuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiZnRjZXJyb3IuaCIKKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19NcnVOb2RlX1ByZXBlbmQoIEZUQ19NcnVOb2RlICAqcGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlICAgbm9kZSApCisgIHsKKyAgICBGVENfTXJ1Tm9kZSAgZmlyc3QgPSAqcGxpc3Q7CisKKworICAgIGlmICggZmlyc3QgKQorICAgIHsKKyAgICAgIEZUQ19NcnVOb2RlICBsYXN0ID0gZmlyc3QtPnByZXY7CisKKworI2lmZGVmIEZUX0RFQlVHX0VSUk9SCisgICAgICB7CisgICAgICAgIEZUQ19NcnVOb2RlICBjbm9kZSA9IGZpcnN0OworCisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGlmICggY25vZGUgPT0gbm9kZSApCisgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRlRDX01ydU5vZGVfUHJlcGVuZDogaW52YWxpZCBhY3Rpb25cbiIgKTsKKyAgICAgICAgICAgIGV4aXQoIDIgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY25vZGUgPSBjbm9kZS0+bmV4dDsKKworICAgICAgICB9IHdoaWxlICggY25vZGUgIT0gZmlyc3QgKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBmaXJzdC0+cHJldiA9IG5vZGU7CisgICAgICBsYXN0LT5uZXh0ICA9IG5vZGU7CisgICAgICBub2RlLT5uZXh0ICA9IGZpcnN0OworICAgICAgbm9kZS0+cHJldiAgPSBsYXN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbm9kZS0+bmV4dCA9IG5vZGU7CisgICAgICBub2RlLT5wcmV2ID0gbm9kZTsKKyAgICB9CisgICAgKnBsaXN0ID0gbm9kZTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgRlRDX01ydU5vZGVfVXAoIEZUQ19NcnVOb2RlICAqcGxpc3QsCisgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKQorICB7CisgICAgRlRDX01ydU5vZGUgIGZpcnN0ID0gKnBsaXN0OworCisKKyAgICBGVF9BU1NFUlQoIGZpcnN0ICE9IE5VTEwgKTsKKworICAgIGlmICggZmlyc3QgIT0gbm9kZSApCisgICAgeworICAgICAgRlRDX01ydU5vZGUgIHByZXYsIG5leHQsIGxhc3Q7CisKKworI2lmZGVmIEZUX0RFQlVHX0VSUk9SCisgICAgICB7CisgICAgICAgIEZUQ19NcnVOb2RlICBjbm9kZSA9IGZpcnN0OworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgaWYgKCBjbm9kZSA9PSBub2RlICkKKyAgICAgICAgICAgIGdvdG8gT2s7CisgICAgICAgICAgY25vZGUgPSBjbm9kZS0+bmV4dDsKKworICAgICAgICB9IHdoaWxlICggY25vZGUgIT0gZmlyc3QgKTsKKworICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJGVENfTXJ1Tm9kZV9VcDogaW52YWxpZCBhY3Rpb25cbiIgKTsKKyAgICAgICAgZXhpdCggMiApOworICAgICAgT2s6CisgICAgICB9CisjZW5kaWYKKyAgICAgIHByZXYgPSBub2RlLT5wcmV2OworICAgICAgbmV4dCA9IG5vZGUtPm5leHQ7CisKKyAgICAgIHByZXYtPm5leHQgPSBuZXh0OworICAgICAgbmV4dC0+cHJldiA9IHByZXY7CisKKyAgICAgIGxhc3QgPSBmaXJzdC0+cHJldjsKKworICAgICAgbGFzdC0+bmV4dCAgPSBub2RlOworICAgICAgZmlyc3QtPnByZXYgPSBub2RlOworCisgICAgICBub2RlLT5uZXh0ID0gZmlyc3Q7CisgICAgICBub2RlLT5wcmV2ID0gbGFzdDsKKworICAgICAgKnBsaXN0ID0gbm9kZTsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19NcnVOb2RlX1JlbW92ZSggRlRDX01ydU5vZGUgICpwbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKQorICB7CisgICAgRlRDX01ydU5vZGUgIGZpcnN0ID0gKnBsaXN0OworICAgIEZUQ19NcnVOb2RlICBwcmV2LCBuZXh0OworCisKKyAgICBGVF9BU1NFUlQoIGZpcnN0ICE9IE5VTEwgKTsKKworI2lmZGVmIEZUX0RFQlVHX0VSUk9SCisgICAgICB7CisgICAgICAgIEZUQ19NcnVOb2RlICBjbm9kZSA9IGZpcnN0OworCisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGlmICggY25vZGUgPT0gbm9kZSApCisgICAgICAgICAgICBnb3RvIE9rOworICAgICAgICAgIGNub2RlID0gY25vZGUtPm5leHQ7CisKKyAgICAgICAgfSB3aGlsZSAoIGNub2RlICE9IGZpcnN0ICk7CisKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRlRDX01ydU5vZGVfUmVtb3ZlOiBpbnZhbGlkIGFjdGlvblxuIiApOworICAgICAgICBleGl0KCAyICk7CisgICAgICBPazoKKyAgICAgIH0KKyNlbmRpZgorCisgICAgcHJldiA9IG5vZGUtPnByZXY7CisgICAgbmV4dCA9IG5vZGUtPm5leHQ7CisKKyAgICBwcmV2LT5uZXh0ID0gbmV4dDsKKyAgICBuZXh0LT5wcmV2ID0gcHJldjsKKworICAgIGlmICggbm9kZSA9PSBuZXh0ICkKKyAgICB7CisgICAgICBGVF9BU1NFUlQoIGZpcnN0ID09IG5vZGUgKTsKKyAgICAgIEZUX0FTU0VSVCggcHJldiAgPT0gbm9kZSApOworCisgICAgICAqcGxpc3QgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICggbm9kZSA9PSBmaXJzdCApCisgICAgICAqcGxpc3QgPSBuZXh0OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfTXJ1TGlzdF9Jbml0KCBGVENfTXJ1TGlzdCAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgICBGVENfTXJ1TGlzdENsYXNzICBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgbWF4X25vZGVzLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnkgKQorICB7CisgICAgbGlzdC0+bnVtX25vZGVzID0gMDsKKyAgICBsaXN0LT5tYXhfbm9kZXMgPSBtYXhfbm9kZXM7CisgICAgbGlzdC0+bm9kZXMgICAgID0gTlVMTDsKKyAgICBsaXN0LT5jbGF6eiAgICAgPSAqY2xheno7CisgICAgbGlzdC0+ZGF0YSAgICAgID0gZGF0YTsKKyAgICBsaXN0LT5tZW1vcnkgICAgPSBtZW1vcnk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIEZUQ19NcnVMaXN0X1Jlc2V0KCBGVENfTXJ1TGlzdCAgbGlzdCApCisgIHsKKyAgICB3aGlsZSAoIGxpc3QtPm5vZGVzICkKKyAgICAgIEZUQ19NcnVMaXN0X1JlbW92ZSggbGlzdCwgbGlzdC0+bm9kZXMgKTsKKworICAgIEZUX0FTU0VSVCggbGlzdC0+bnVtX25vZGVzID09IDAgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgRlRDX01ydUxpc3RfRG9uZSggRlRDX01ydUxpc3QgIGxpc3QgKQorICB7CisgICAgRlRDX01ydUxpc3RfUmVzZXQoIGxpc3QgKTsKKyAgfQorCisKKyNpZm5kZWYgRlRDX0lOTElORQorICBGVF9MT0NBTF9ERUYoIEZUQ19NcnVOb2RlICkKKyAgRlRDX01ydUxpc3RfRmluZCggRlRDX01ydUxpc3QgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBrZXkgKQorICB7CisgICAgRlRDX01ydU5vZGVfQ29tcGFyZUZ1bmMgIGNvbXBhcmUgPSBsaXN0LT5jbGF6ei5ub2RlX2NvbXBhcmU7CisgICAgRlRDX01ydU5vZGUgICAgICAgICAgICAgIGZpcnN0LCBub2RlOworCisKKyAgICBmaXJzdCA9IGxpc3QtPm5vZGVzOworICAgIG5vZGUgID0gTlVMTDsKKworICAgIGlmICggZmlyc3QgKQorICAgIHsKKyAgICAgIG5vZGUgPSBmaXJzdDsKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGlmICggY29tcGFyZSggbm9kZSwga2V5ICkgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBub2RlICE9IGZpcnN0ICkKKyAgICAgICAgICAgIEZUQ19NcnVOb2RlX1VwKCAmbGlzdC0+bm9kZXMsIG5vZGUgKTsKKworICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisKKyAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CisKKyAgICAgIH0gd2hpbGUgKCBub2RlICE9IGZpcnN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorI2VuZGlmCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIEZUQ19NcnVMaXN0X05ldyggRlRDX01ydUxpc3QgICBsaXN0LAorICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAga2V5LAorICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlICAqYW5vZGUgKQorICB7CisgICAgRlRfRXJyb3IgICAgIGVycm9yOworICAgIEZUQ19NcnVOb2RlICBub2RlID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5ID0gbGlzdC0+bWVtb3J5OworCisKKyAgICBpZiAoIGxpc3QtPm51bV9ub2RlcyA+PSBsaXN0LT5tYXhfbm9kZXMgJiYgbGlzdC0+bWF4X25vZGVzID4gMCApCisgICAgeworICAgICAgbm9kZSA9IGxpc3QtPm5vZGVzLT5wcmV2OworCisgICAgICBGVF9BU1NFUlQoIG5vZGUgKTsKKworICAgICAgaWYgKCBsaXN0LT5jbGF6ei5ub2RlX3Jlc2V0ICkKKyAgICAgIHsKKyAgICAgICAgRlRDX01ydU5vZGVfVXAoICZsaXN0LT5ub2Rlcywgbm9kZSApOworCisgICAgICAgIGVycm9yID0gbGlzdC0+Y2xhenoubm9kZV9yZXNldCggbm9kZSwga2V5LCBsaXN0LT5kYXRhICk7CisgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIEZUQ19NcnVOb2RlX1JlbW92ZSggJmxpc3QtPm5vZGVzLCBub2RlICk7CisgICAgICBsaXN0LT5udW1fbm9kZXMtLTsKKworICAgICAgaWYgKCBsaXN0LT5jbGF6ei5ub2RlX2RvbmUgKQorICAgICAgICBsaXN0LT5jbGF6ei5ub2RlX2RvbmUoIG5vZGUsIGxpc3QtPmRhdGEgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIEZUX0FMTE9DKCBub2RlLCBsaXN0LT5jbGF6ei5ub2RlX3NpemUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IGxpc3QtPmNsYXp6Lm5vZGVfaW5pdCggbm9kZSwga2V5LCBsaXN0LT5kYXRhICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBGVENfTXJ1Tm9kZV9QcmVwZW5kKCAmbGlzdC0+bm9kZXMsIG5vZGUgKTsKKyAgICBsaXN0LT5udW1fbm9kZXMrKzsKKworICBFeGl0OgorICAgICphbm9kZSA9IG5vZGU7CisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgaWYgKCBsaXN0LT5jbGF6ei5ub2RlX2RvbmUgKQorICAgICAgbGlzdC0+Y2xhenoubm9kZV9kb25lKCBub2RlLCBsaXN0LT5kYXRhICk7CisKKyAgICBGVF9GUkVFKCBub2RlICk7CisgICAgZ290byBFeGl0OworICB9CisKKworI2lmbmRlZiBGVENfSU5MSU5FCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBGVENfTXJ1TGlzdF9Mb29rdXAoIEZUQ19NcnVMaXN0ICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgKmFub2RlICkKKyAgeworICAgIEZUQ19NcnVOb2RlICBub2RlOworCisKKyAgICBub2RlID0gRlRDX01ydUxpc3RfRmluZCggbGlzdCwga2V5ICk7CisgICAgaWYgKCBub2RlID09IE5VTEwgKQorICAgICAgcmV0dXJuIEZUQ19NcnVMaXN0X05ldyggbGlzdCwga2V5LCBhbm9kZSApOworCisgICAgKmFub2RlID0gbm9kZTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIEZUQ19JTkxJTkUgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfTXJ1TGlzdF9SZW1vdmUoIEZUQ19NcnVMaXN0ICBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlICBub2RlICkKKyAgeworICAgIEZUQ19NcnVOb2RlX1JlbW92ZSggJmxpc3QtPm5vZGVzLCBub2RlICk7CisgICAgbGlzdC0+bnVtX25vZGVzLS07CisKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpc3QtPm1lbW9yeTsKKworCisgICAgICBpZiAoIGxpc3QtPmNsYXp6Lm5vZGVfZG9uZSApCisgICAgICAgIGxpc3QtPmNsYXp6Lm5vZGVfZG9uZSggbm9kZSwgbGlzdC0+ZGF0YSApOworCisgICAgICBGVF9GUkVFKCBub2RlICk7CisgICAgfQorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfTXJ1TGlzdF9SZW1vdmVTZWxlY3Rpb24oIEZUQ19NcnVMaXN0ICAgICAgICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlX0NvbXBhcmVGdW5jICBzZWxlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICAgICAgICAgIGtleSApCisgIHsKKyAgICBGVENfTXJ1Tm9kZSAgZmlyc3QsIG5vZGUsIG5leHQ7CisKKworICAgIGZpcnN0ID0gbGlzdC0+bm9kZXM7CisgICAgd2hpbGUgKCBmaXJzdCAmJiAoIHNlbGVjdGlvbiA9PSBOVUxMIHx8IHNlbGVjdGlvbiggZmlyc3QsIGtleSApICkgKQorICAgIHsKKyAgICAgIEZUQ19NcnVMaXN0X1JlbW92ZSggbGlzdCwgZmlyc3QgKTsKKyAgICAgIGZpcnN0ID0gbGlzdC0+bm9kZXM7CisgICAgfQorCisgICAgaWYgKCBmaXJzdCApCisgICAgeworICAgICAgbm9kZSA9IGZpcnN0LT5uZXh0OworICAgICAgd2hpbGUgKCBub2RlICE9IGZpcnN0ICkKKyAgICAgIHsKKyAgICAgICAgbmV4dCA9IG5vZGUtPm5leHQ7CisKKyAgICAgICAgaWYgKCBzZWxlY3Rpb24oIG5vZGUsIGtleSApICkKKyAgICAgICAgICBGVENfTXJ1TGlzdF9SZW1vdmUoIGxpc3QsIG5vZGUgKTsKKworICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjbXJ1LmggYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21ydS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzM1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y21ydS5oCkBAIC0wLDAgKzEsMjQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGNtcnUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU2ltcGxlIE1SVSBsaXN0LWNhY2hlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBbiBNUlUgaXMgYSBsaXN0IHRoYXQgY2Fubm90IGhvbGQgbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YgICAgICAgKi8KKyAgLyogZWxlbWVudHMgKGBtYXhfZWxlbWVudHMnKS4gIEFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluICAgICovCisgIC8qIGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGkuZS4sIHRoZSBgb2xkZXN0JyBlbGVtZW50IGlzIGF0IHRoZSB0YWlsICAqLworICAvKiBvZiB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdoZW4gZG9pbmcgYSBsb29rdXAgKGVpdGhlciB0aHJvdWdoIGBMb29rdXAoKScgb3IgYExvb2t1cF9Ob2RlKCknKSwgICAqLworICAvKiB0aGUgbGlzdCBpcyBzZWFyY2hlZCBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gIElmICAgKi8KKyAgLyogaXQgaXMgZm91bmQsIHRoZSBlbGVtZW50IGlzIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCBpcyAgICAgICovCisgIC8qIHJldHVybmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgbm8gY29ycmVzcG9uZGluZyBlbGVtZW50IGlzIGZvdW5kLCB0aGUgbG9va3VwIHJvdXRpbmUgd2lsbCB0cnkgdG8gICovCisgIC8qIG9idGFpbiBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHJlbGV2YW50IGtleS4gIElmIHRoZSBsaXN0IGlzIGFscmVhZHkgICAqLworICAvKiBmdWxsLCB0aGUgb2xkZXN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBpcyBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIGJ5IGEgKi8KKyAgLyogbmV3IG9uZTsgYSBuZXcgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgbGlzdCBvdGhlcndpc2UuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gcHJlLWFsbG9jYXRlIHRoZSBlbGVtZW50IGxpc3Qgbm9kZXMuICAgICAgKi8KKyAgLyogVGhpcyBpcyBoYW5keSBpZiBgbWF4X2VsZW1lbnRzJyBpcyBzdWZmaWNpZW50bHkgc21hbGwsIGFzIGl0IHNhdmVzICAgICovCisgIC8qIGFsbG9jYXRpb25zL3JlbGVhc2VzIGR1cmluZyB0aGUgbG9va3VwIHByb2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUQ01SVV9IX18KKyNkZWZpbmUgX19GVENNUlVfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKyNpZmRlZiBGUkVFVFlQRV9ICisjZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgorI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCisjZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKKyNlbmRpZgorCisjZGVmaW5lICB4eEZUX0RFQlVHX0VSUk9SCisjZGVmaW5lICBGVENfSU5MSU5FCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVOb2RlUmVjXyogIEZUQ19NcnVOb2RlOworCisgIHR5cGVkZWYgc3RydWN0ICBGVENfTXJ1Tm9kZVJlY18KKyAgeworICAgIEZUQ19NcnVOb2RlICBuZXh0OworICAgIEZUQ19NcnVOb2RlICBwcmV2OworCisgIH0gRlRDX01ydU5vZGVSZWM7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIEZUQ19NcnVOb2RlX1ByZXBlbmQoIEZUQ19NcnVOb2RlICAqcGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlICAgbm9kZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX01ydU5vZGVfVXAoIEZUQ19NcnVOb2RlICAqcGxpc3QsCisgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIEZUQ19NcnVOb2RlX1JlbW92ZSggRlRDX01ydU5vZGUgICpwbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKTsKKworCisgIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVMaXN0UmVjXyogICAgICAgICAgICAgIEZUQ19NcnVMaXN0OworCisgIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVMaXN0Q2xhc3NSZWNfIGNvbnN0ICogIEZUQ19NcnVMaXN0Q2xhc3M7CisKKworICB0eXBlZGVmIEZUX0Jvb2wKKyAgKCpGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGtleSApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVENfTXJ1Tm9kZV9Jbml0RnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBkYXRhICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUQ19NcnVOb2RlX1Jlc2V0RnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGRhdGEgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpGVENfTXJ1Tm9kZV9Eb25lRnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGRhdGEgKTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGVENfTXJ1TGlzdENsYXNzUmVjXworICB7CisgICAgRlRfT2Zmc2V0ICAgICAgICAgICAgICAgIG5vZGVfc2l6ZTsKKyAgICBGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyAgbm9kZV9jb21wYXJlOworICAgIEZUQ19NcnVOb2RlX0luaXRGdW5jICAgICBub2RlX2luaXQ7CisgICAgRlRDX01ydU5vZGVfUmVzZXRGdW5jICAgIG5vZGVfcmVzZXQ7CisgICAgRlRDX01ydU5vZGVfRG9uZUZ1bmMgICAgIG5vZGVfZG9uZTsKKworICB9IEZUQ19NcnVMaXN0Q2xhc3NSZWM7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19NcnVMaXN0UmVjXworICB7CisgICAgRlRfVUludCAgICAgICAgICAgICAgbnVtX25vZGVzOworICAgIEZUX1VJbnQgICAgICAgICAgICAgIG1heF9ub2RlczsKKyAgICBGVENfTXJ1Tm9kZSAgICAgICAgICBub2RlczsKKyAgICBGVF9Qb2ludGVyICAgICAgICAgICBkYXRhOworICAgIEZUQ19NcnVMaXN0Q2xhc3NSZWMgIGNsYXp6OworICAgIEZUX01lbW9yeSAgICAgICAgICAgIG1lbW9yeTsKKworICB9IEZUQ19NcnVMaXN0UmVjOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBGVENfTXJ1TGlzdF9Jbml0KCBGVENfTXJ1TGlzdCAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgICBGVENfTXJ1TGlzdENsYXNzICBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgbWF4X25vZGVzLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnkgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIEZUQ19NcnVMaXN0X1Jlc2V0KCBGVENfTXJ1TGlzdCAgbGlzdCApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBGVENfTXJ1TGlzdF9Eb25lKCBGVENfTXJ1TGlzdCAgbGlzdCApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgRlRDX01ydUxpc3RfTmV3KCBGVENfTXJ1TGlzdCAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICBrZXksCisgICAgICAgICAgICAgICAgICAgRlRDX01ydU5vZGUgICphbm9kZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX01ydUxpc3RfUmVtb3ZlKCBGVENfTXJ1TGlzdCAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgbm9kZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKCBGVENfTXJ1TGlzdCAgICAgICAgICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyAgc2VsZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgICAgICBrZXkgKTsKKworCisjaWZkZWYgRlRDX0lOTElORQorCisjZGVmaW5lIEZUQ19NUlVMSVNUX0xPT0tVUF9DTVAoIGxpc3QsIGtleSwgY29tcGFyZSwgbm9kZSwgZXJyb3IgKSAgICAgICAgICAgXAorICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVENfTXJ1Tm9kZSogICAgICAgICAgICAgX3BmaXJzdCAgPSAmKGxpc3QpLT5ub2RlczsgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRDX01ydU5vZGVfQ29tcGFyZUZ1bmMgIF9jb21wYXJlID0gKEZUQ19NcnVOb2RlX0NvbXBhcmVGdW5jKShjb21wYXJlKTsgXAorICAgIEZUQ19NcnVOb2RlICAgICAgICAgICAgICBfZmlyc3QsIF9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVycm9yICA9IEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfZmlyc3QgPSAqKF9wZmlyc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX25vZGUgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIF9maXJzdCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX25vZGUgPSBfZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIF9jb21wYXJlKCBfbm9kZSwgKGtleSkgKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYgKCBfbm9kZSAhPSBfZmlyc3QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRDX01ydU5vZGVfVXAoIF9wZmlyc3QsIF9ub2RlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgbm9kZSA9IF9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdvdG8gX01ydU9rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9ub2RlID0gX25vZGUtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gd2hpbGUgKCBfbm9kZSAhPSBfZmlyc3QpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlcnJvciA9IEZUQ19NcnVMaXN0X05ldyggKGxpc3QpLCAoa2V5KSwgKEZUQ19NcnVOb2RlKikodm9pZCopJihub2RlKSApOyBcCisgIF9NcnVPazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNkZWZpbmUgRlRDX01SVUxJU1RfTE9PS1VQKCBsaXN0LCBrZXksIG5vZGUsIGVycm9yICkgXAorICBGVENfTVJVTElTVF9MT09LVVBfQ01QKCBsaXN0LCBrZXksIChsaXN0KS0+Y2xhenoubm9kZV9jb21wYXJlLCBub2RlLCBlcnJvciApCisKKyNlbHNlICAvKiAhRlRDX0lOTElORSAqLworCisgIEZUX0xPQ0FMKCBGVENfTXJ1Tm9kZSApCisgIEZUQ19NcnVMaXN0X0ZpbmQoIEZUQ19NcnVMaXN0ICBsaXN0LAorICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAga2V5ICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgRlRDX01ydUxpc3RfTG9va3VwKCBGVENfTXJ1TGlzdCAgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgRlRDX01ydU5vZGUgICpwbm9kZSApOworCisjZGVmaW5lIEZUQ19NUlVMSVNUX0xPT0tVUCggbGlzdCwga2V5LCBub2RlLCBlcnJvciApIFwKKyAgZXJyb3IgPSBGVENfTXJ1TGlzdF9Mb29rdXAoIChsaXN0KSwgKGtleSksIChGVENfTXJ1Tm9kZSopJihub2RlKSApCisKKyNlbmRpZiAvKiAhRlRDX0lOTElORSAqLworCisKKyNkZWZpbmUgRlRDX01SVUxJU1RfTE9PUCggbGlzdCwgbm9kZSApICAgICAgICBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUQ19NcnVOb2RlICBfZmlyc3QgPSAobGlzdCktPm5vZGVzOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggX2ZpcnN0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBGVENfTXJ1Tm9kZSAgX25vZGUgPSBfZmlyc3Q7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKihGVENfTXJ1Tm9kZSopJihub2RlKSA9IF9ub2RlOworCisKKyNkZWZpbmUgRlRDX01SVUxJU1RfTE9PUF9FTkQoKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgX25vZGUgPSBfbm9kZS0+bmV4dDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gd2hpbGUgKCBfbm9kZSAhPSBfZmlyc3QgKTsgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fRlRDTVJVX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNzYml0cy5jIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNzYml0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL2Z0Y3NiaXRzLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Y3NiaXRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBzYml0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSAiZnRjc2JpdHMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCisjaW5jbHVkZSAiZnRjZXJyb3IuaCIKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jYWNoZQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgU0JJVCBDQUNIRSBOT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRjX3NiaXRfY29weV9iaXRtYXAoIEZUQ19TQml0ICAgIHNiaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICBtZW1vcnkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX0ludCAgICBwaXRjaCA9IGJpdG1hcC0+cGl0Y2g7CisgICAgRlRfVUxvbmcgIHNpemU7CisKKworICAgIGlmICggcGl0Y2ggPCAwICkKKyAgICAgIHBpdGNoID0gLXBpdGNoOworCisgICAgc2l6ZSA9IChGVF9VTG9uZylwaXRjaCAqIGJpdG1hcC0+cm93czsKKworICAgIGlmICggIUZUX0FMTE9DKCBzYml0LT5idWZmZXIsIHNpemUgKSApCisgICAgICBGVF9NRU1fQ09QWSggc2JpdC0+YnVmZmVyLCBiaXRtYXAtPmJ1ZmZlciwgc2l6ZSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBmdGNfc25vZGVfZnJlZSggRlRDX05vZGUgICBmdGNzbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRDX1NOb2RlICBzbm9kZSAgPSAoRlRDX1NOb2RlKWZ0Y3Nub2RlOworICAgIEZUQ19TQml0ICAgc2JpdCAgID0gc25vZGUtPnNiaXRzOworICAgIEZUX1VJbnQgICAgY291bnQgID0gc25vZGUtPmNvdW50OworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gY2FjaGUtPm1lbW9yeTsKKworCisgICAgZm9yICggOyBjb3VudCA+IDA7IHNiaXQrKywgY291bnQtLSApCisgICAgICBGVF9GUkVFKCBzYml0LT5idWZmZXIgKTsKKworICAgIEZUQ19HTm9kZV9Eb25lKCBGVENfR05PREUoIHNub2RlICksIGNhY2hlICk7CisKKyAgICBGVF9GUkVFKCBzbm9kZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGVENfU05vZGVfRnJlZSggRlRDX1NOb2RlICBzbm9kZSwKKyAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgZnRjX3Nub2RlX2ZyZWUoIEZUQ19OT0RFKCBzbm9kZSApLCBjYWNoZSApOworICB9CisKKworICAvKgorICAgKiAgVGhpcyBmdW5jdGlvbiB0cmllcyB0byBsb2FkIGEgc21hbGwgYml0bWFwIHdpdGhpbiBhIGdpdmVuIEZUQ19TTm9kZS4KKyAgICogIE5vdGUgdGhhdCBpdCByZXR1cm5zIGEgbm9uLXplcm8gZXJyb3IgY29kZSBfb25seV8gaW4gdGhlIGNhc2Ugb2YKKyAgICogIG91dC1vZi1tZW1vcnkgY29uZGl0aW9uLiAgRm9yIGFsbCBvdGhlciBlcnJvcnMgKGUuZy4sIGNvcnJlc3BvbmRpbmcKKyAgICogIHRvIGEgYmFkIGZvbnQgZmlsZSksIHRoaXMgZnVuY3Rpb24gd2lsbCBtYXJrIHRoZSBzYml0IGFzIGB1bmF2YWlsYWJsZScKKyAgICogIGFuZCByZXR1cm4gYSB2YWx1ZSBvZiAwLgorICAgKgorICAgKiAgWW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIGNvbW1lbnQgd2l0aGluIHRoZSBAZnRjX3Nub2RlX2NvbXBhcmUKKyAgICogIGZ1bmN0aW9uIGJlbG93IHRvIHNlZSBob3cgb3V0LW9mLW1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyBhIGxvb2t1cC4KKyAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdGNfc25vZGVfbG9hZCggRlRDX1NOb2RlICAgIHNub2RlLAorICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgKmFzaXplICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOworICAgIEZUQ19HTm9kZSAgICAgICAgIGdub2RlICA9IEZUQ19HTk9ERSggc25vZGUgKTsKKyAgICBGVENfRmFtaWx5ICAgICAgICBmYW1pbHkgPSBnbm9kZS0+ZmFtaWx5OworICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSA9IG1hbmFnZXItPm1lbW9yeTsKKyAgICBGVF9GYWNlICAgICAgICAgICBmYWNlOworICAgIEZUQ19TQml0ICAgICAgICAgIHNiaXQ7CisgICAgRlRDX1NGYW1pbHlDbGFzcyAgY2xheno7CisKKworICAgIGlmICggKEZUX1VJbnQpKGdpbmRleCAtIGdub2RlLT5naW5kZXgpID49IHNub2RlLT5jb3VudCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiZnRjX3Nub2RlX2xvYWQ6IGludmFsaWQgZ2x5cGggaW5kZXgiICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgfQorCisgICAgc2JpdCAgPSBzbm9kZS0+c2JpdHMgKyAoIGdpbmRleCAtIGdub2RlLT5naW5kZXggKTsKKyAgICBjbGF6eiA9IChGVENfU0ZhbWlseUNsYXNzKWZhbWlseS0+Y2xheno7CisKKyAgICBzYml0LT5idWZmZXIgPSAwOworCisgICAgZXJyb3IgPSBjbGF6ei0+ZmFtaWx5X2xvYWRfZ2x5cGgoIGZhbWlseSwgZ2luZGV4LCBtYW5hZ2VyLCAmZmFjZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBCYWRHbHlwaDsKKworICAgIHsKKyAgICAgIEZUX0ludCAgICAgICAgdGVtcDsKKyAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCAgID0gZmFjZS0+Z2x5cGg7CisgICAgICBGVF9CaXRtYXAqICAgIGJpdG1hcCA9ICZzbG90LT5iaXRtYXA7CisgICAgICBGVF9Qb3MgICAgICAgIHhhZHZhbmNlLCB5YWR2YW5jZTsgLyogRlRfR2x5cGhTbG90LT5hZHZhbmNlLnt4fHl9ICovCisKKworICAgICAgaWYgKCBzbG90LT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJmdGNfc25vZGVfbG9hZDoiCisgICAgICAgICAgICAgICAgICAgICIgZ2x5cGggbG9hZGVkIGRpZG4ndCByZXR1cm4gYSBiaXRtYXBcbiIgKSk7CisgICAgICAgIGdvdG8gQmFkR2x5cGg7CisgICAgICB9CisKKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgb3VyIHZhbHVlcyBmaXQgaW50byA4LWJpdCBjb250YWluZXJzISAgICAqLworICAgICAgLyogSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIG91ciBiaXRtYXAgaXMgdG9vIGxhcmdlICAgICAgICovCisgICAgICAvKiBhbmQgd2Ugd2lsbCBsZWF2ZSBpdCBhcyBgbWlzc2luZycgd2l0aCBzYml0LmJ1ZmZlciA9IDAgKi8KKworI2RlZmluZSBDSEVDS19DSEFSKCBkICkgICggdGVtcCA9IChGVF9DaGFyKWQsIChGVF9JbnQpIHRlbXAgPT0gKEZUX0ludCkgZCApCisjZGVmaW5lIENIRUNLX0JZVEUoIGQgKSAgKCB0ZW1wID0gKEZUX0J5dGUpZCwgKEZUX1VJbnQpdGVtcCA9PSAoRlRfVUludClkICkKKworICAgICAgLyogaG9yaXpvbnRhbCBhZHZhbmNlIGluIHBpeGVscyAqLworICAgICAgeGFkdmFuY2UgPSAoIHNsb3QtPmFkdmFuY2UueCArIDMyICkgPj4gNjsKKyAgICAgIHlhZHZhbmNlID0gKCBzbG90LT5hZHZhbmNlLnkgKyAzMiApID4+IDY7CisKKyAgICAgIGlmICggIUNIRUNLX0JZVEUoIGJpdG1hcC0+cm93cyAgKSAgICAgfHwKKyAgICAgICAgICAgIUNIRUNLX0JZVEUoIGJpdG1hcC0+d2lkdGggKSAgICAgfHwKKyAgICAgICAgICAgIUNIRUNLX0NIQVIoIGJpdG1hcC0+cGl0Y2ggKSAgICAgfHwKKyAgICAgICAgICAgIUNIRUNLX0NIQVIoIHNsb3QtPmJpdG1hcF9sZWZ0ICkgfHwKKyAgICAgICAgICAgIUNIRUNLX0NIQVIoIHNsb3QtPmJpdG1hcF90b3AgICkgfHwKKyAgICAgICAgICAgIUNIRUNLX0NIQVIoIHhhZHZhbmNlICkgICAgICAgICAgfHwKKyAgICAgICAgICAgIUNIRUNLX0NIQVIoIHlhZHZhbmNlICkgICAgICAgICAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTIoKCAiZnRjX3Nub2RlX2xvYWQ6IgorICAgICAgICAgICAgICAgICAgICAiIGdseXBoIHRvbyBsYXJnZSBmb3Igc21hbGwgYml0bWFwIGNhY2hlXG4iKSk7CisgICAgICAgIGdvdG8gQmFkR2x5cGg7CisgICAgICB9CisKKyAgICAgIHNiaXQtPndpZHRoICAgICA9IChGVF9CeXRlKWJpdG1hcC0+d2lkdGg7CisgICAgICBzYml0LT5oZWlnaHQgICAgPSAoRlRfQnl0ZSliaXRtYXAtPnJvd3M7CisgICAgICBzYml0LT5waXRjaCAgICAgPSAoRlRfQ2hhciliaXRtYXAtPnBpdGNoOworICAgICAgc2JpdC0+bGVmdCAgICAgID0gKEZUX0NoYXIpc2xvdC0+Yml0bWFwX2xlZnQ7CisgICAgICBzYml0LT50b3AgICAgICAgPSAoRlRfQ2hhcilzbG90LT5iaXRtYXBfdG9wOworICAgICAgc2JpdC0+eGFkdmFuY2UgID0gKEZUX0NoYXIpeGFkdmFuY2U7CisgICAgICBzYml0LT55YWR2YW5jZSAgPSAoRlRfQ2hhcil5YWR2YW5jZTsKKyAgICAgIHNiaXQtPmZvcm1hdCAgICA9IChGVF9CeXRlKWJpdG1hcC0+cGl4ZWxfbW9kZTsKKyAgICAgIHNiaXQtPm1heF9ncmF5cyA9IChGVF9CeXRlKShiaXRtYXAtPm51bV9ncmF5cyAtIDEpOworCisgICAgICAvKiBjb3B5IHRoZSBiaXRtYXAgaW50byBhIG5ldyBidWZmZXIgLS0gaWdub3JlIGVycm9yICovCisgICAgICBlcnJvciA9IGZ0Y19zYml0X2NvcHlfYml0bWFwKCBzYml0LCBiaXRtYXAsIG1lbW9yeSApOworCisgICAgICAvKiBub3csIGNvbXB1dGUgc2l6ZSAqLworICAgICAgaWYgKCBhc2l6ZSApCisgICAgICAgICphc2l6ZSA9IChGVF9VTG9uZylGVF9BQlMoIHNiaXQtPnBpdGNoICkgKiBzYml0LT5oZWlnaHQ7CisKKyAgICB9IC8qIGdseXBoIGxvYWRpbmcgc3VjY2Vzc2Z1bCAqLworCisgICAgLyogaWdub3JlIHRoZSBlcnJvcnMgdGhhdCBtaWdodCBoYXZlIG9jY3VycmVkIC0tICAgKi8KKyAgICAvKiB3ZSBtYXJrIHVubG9hZGVkIGdseXBocyB3aXRoIGBzYml0LmJ1ZmZlciA9PSAwJyAqLworICAgIC8qIGFuZCBgd2lkdGggPT0gMjU1JywgYGhlaWdodCA9PSAwJyAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGVycm9yICYmIEZUX0VSUl9ORVEoIGVycm9yLCBPdXRfT2ZfTWVtb3J5ICkgKQorICAgIHsKKyAgICBCYWRHbHlwaDoKKyAgICAgIHNiaXQtPndpZHRoICA9IDI1NTsKKyAgICAgIHNiaXQtPmhlaWdodCA9IDA7CisgICAgICBzYml0LT5idWZmZXIgPSBOVUxMOworICAgICAgZXJyb3IgICAgICAgID0gRlRfRXJyX09rOworICAgICAgaWYgKCBhc2l6ZSApCisgICAgICAgICphc2l6ZSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX1NOb2RlX05ldyggRlRDX1NOb2RlICAqcHNub2RlLAorICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICBncXVlcnksCisgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlICkKKyAgeworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IGNhY2hlLT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRDX1NOb2RlICAgc25vZGUgID0gTlVMTDsKKyAgICBGVF9VSW50ICAgICBnaW5kZXggPSBncXVlcnktPmdpbmRleDsKKyAgICBGVENfRmFtaWx5ICBmYW1pbHkgPSBncXVlcnktPmZhbWlseTsKKworICAgIEZUQ19TRmFtaWx5Q2xhc3MgIGNsYXp6ID0gRlRDX0NBQ0hFX19TRkFNSUxZX0NMQVNTKCBjYWNoZSApOworICAgIEZUX1VJbnQgICAgICAgICAgIHRvdGFsOworICAgIEZUX1VJbnQgICAgICAgICAgIG5vZGVfY291bnQ7CisKKworICAgIHRvdGFsID0gY2xhenotPmZhbWlseV9nZXRfY291bnQoIGZhbWlseSwgY2FjaGUtPm1hbmFnZXIgKTsKKyAgICBpZiAoIHRvdGFsID09IDAgfHwgZ2luZGV4ID49IHRvdGFsICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCAhRlRfTkVXKCBzbm9kZSApICkKKyAgICB7CisgICAgICBGVF9VSW50ICBjb3VudCwgc3RhcnQ7CisKKworICAgICAgc3RhcnQgPSBnaW5kZXggLSAoIGdpbmRleCAlIEZUQ19TQklUX0lURU1TX1BFUl9OT0RFICk7CisgICAgICBjb3VudCA9IHRvdGFsIC0gc3RhcnQ7CisgICAgICBpZiAoIGNvdW50ID4gRlRDX1NCSVRfSVRFTVNfUEVSX05PREUgKQorICAgICAgICBjb3VudCA9IEZUQ19TQklUX0lURU1TX1BFUl9OT0RFOworCisgICAgICBGVENfR05vZGVfSW5pdCggRlRDX0dOT0RFKCBzbm9kZSApLCBzdGFydCwgZmFtaWx5ICk7CisKKyAgICAgIHNub2RlLT5jb3VudCA9IGNvdW50OworICAgICAgZm9yICggbm9kZV9jb3VudCA9IDA7IG5vZGVfY291bnQgPCBjb3VudDsgbm9kZV9jb3VudCsrICkKKyAgICAgIHsKKyAgICAgICAgc25vZGUtPnNiaXRzW25vZGVfY291bnRdLndpZHRoID0gMjU1OworICAgICAgfQorCisgICAgICBlcnJvciA9IGZ0Y19zbm9kZV9sb2FkKCBzbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIEZUQ19TTm9kZV9GcmVlKCBzbm9kZSwgY2FjaGUgKTsKKyAgICAgICAgc25vZGUgPSBOVUxMOworICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgICpwc25vZGUgPSBzbm9kZTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBmdGNfc25vZGVfbmV3KCBGVENfTm9kZSAgICpmdGNwc25vZGUsCisgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y2dxdWVyeSwKKyAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUgKQorICB7CisgICAgRlRDX1NOb2RlICAqcHNub2RlID0gKEZUQ19TTm9kZSopZnRjcHNub2RlOworICAgIEZUQ19HUXVlcnkgIGdxdWVyeSA9IChGVENfR1F1ZXJ5KWZ0Y2dxdWVyeTsKKworCisgICAgcmV0dXJuIEZUQ19TTm9kZV9OZXcoIHBzbm9kZSwgZ3F1ZXJ5LCBjYWNoZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX09mZnNldCApCisgIGZ0Y19zbm9kZV93ZWlnaHQoIEZUQ19Ob2RlICAgZnRjc25vZGUsCisgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQorICB7CisgICAgRlRDX1NOb2RlICBzbm9kZSA9IChGVENfU05vZGUpZnRjc25vZGU7CisgICAgRlRfVUludCAgICBjb3VudCA9IHNub2RlLT5jb3VudDsKKyAgICBGVENfU0JpdCAgIHNiaXQgID0gc25vZGUtPnNiaXRzOworICAgIEZUX0ludCAgICAgcGl0Y2g7CisgICAgRlRfT2Zmc2V0ICBzaXplOworCisgICAgRlRfVU5VU0VEKCBjYWNoZSApOworCisKKyAgICBGVF9BU1NFUlQoIHNub2RlLT5jb3VudCA8PSBGVENfU0JJVF9JVEVNU19QRVJfTk9ERSApOworCisgICAgLyogdGhlIG5vZGUgaXRzZWxmICovCisgICAgc2l6ZSA9IHNpemVvZiAoICpzbm9kZSApOworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHNiaXQrKyApCisgICAgeworICAgICAgaWYgKCBzYml0LT5idWZmZXIgKQorICAgICAgeworICAgICAgICBwaXRjaCA9IHNiaXQtPnBpdGNoOworICAgICAgICBpZiAoIHBpdGNoIDwgMCApCisgICAgICAgICAgcGl0Y2ggPSAtcGl0Y2g7CisKKyAgICAgICAgLyogYWRkIHRoZSBzaXplIG9mIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgKi8KKyAgICAgICAgc2l6ZSArPSAoRlRfT2Zmc2V0KXBpdGNoICogc2JpdC0+aGVpZ2h0OworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzaXplOworICB9CisKKworI2lmIDAKKworICBGVF9MT0NBTF9ERUYoIEZUX09mZnNldCApCisgIEZUQ19TTm9kZV9XZWlnaHQoIEZUQ19TTm9kZSAgc25vZGUgKQorICB7CisgICAgcmV0dXJuIGZ0Y19zbm9kZV93ZWlnaHQoIEZUQ19OT0RFKCBzbm9kZSApLCBOVUxMICk7CisgIH0KKworI2VuZGlmIC8qIDAgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGZ0Y19zbm9kZV9jb21wYXJlKCBGVENfTm9kZSAgICBmdGNzbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y2dxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgbGlzdF9jaGFuZ2VkICkKKyAgeworICAgIEZUQ19TTm9kZSAgIHNub2RlICA9IChGVENfU05vZGUpZnRjc25vZGU7CisgICAgRlRDX0dRdWVyeSAgZ3F1ZXJ5ID0gKEZUQ19HUXVlcnkpZnRjZ3F1ZXJ5OworICAgIEZUQ19HTm9kZSAgIGdub2RlICA9IEZUQ19HTk9ERSggc25vZGUgKTsKKyAgICBGVF9VSW50ICAgICBnaW5kZXggPSBncXVlcnktPmdpbmRleDsKKyAgICBGVF9Cb29sICAgICByZXN1bHQ7CisKKworICAgIGlmIChsaXN0X2NoYW5nZWQpCisgICAgICAqbGlzdF9jaGFuZ2VkID0gRkFMU0U7CisgICAgcmVzdWx0ID0gRlRfQk9PTCggZ25vZGUtPmZhbWlseSA9PSBncXVlcnktPmZhbWlseSAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCkoIGdpbmRleCAtIGdub2RlLT5naW5kZXggKSA8IHNub2RlLT5jb3VudCApOworICAgIGlmICggcmVzdWx0ICkKKyAgICB7CisgICAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGxvYWQgdGhlIGdseXBoIGJpdG1hcCBub3cgKi8KKyAgICAgIEZUQ19TQml0ICBzYml0ID0gc25vZGUtPnNiaXRzICsgKCBnaW5kZXggLSBnbm9kZS0+Z2luZGV4ICk7CisKKworICAgICAgLyoKKyAgICAgICAqICBUaGUgZm9sbG93aW5nIGNvZGUgaWxsdXN0cmF0ZXMgd2hhdCB0byBkbyB3aGVuIHlvdSB3YW50IHRvCisgICAgICAgKiAgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgbWF5IGZhaWwgd2l0aGluIGEgbG9va3VwIGZ1bmN0aW9uLgorICAgICAgICoKKyAgICAgICAqICBIZXJlLCB3ZSB3YW50IHRvIGxvYWQgYSBzbWFsbCBiaXRtYXAgb24tZGVtYW5kOyB3ZSB0aHVzCisgICAgICAgKiAgbmVlZCB0byBjYWxsIHRoZSBgZnRjX3Nub2RlX2xvYWQnIGZ1bmN0aW9uIHdoaWNoIG1heSByZXR1cm4KKyAgICAgICAqICBhIG5vbi16ZXJvIGVycm9yIGNvZGUgb25seSB3aGVuIHdlIGFyZSBvdXQgb2YgbWVtb3J5IChPT00pLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29ycmVjdCB0aGluZyB0byBkbyBpcyB0byB1c2UgQEZUQ19DQUNIRV9UUllMT09QIGFuZAorICAgICAgICogIEBGVENfQ0FDSEVfVFJZTE9PUF9FTkQgaW4gb3JkZXIgdG8gaW1wbGVtZW50IGEgcmV0cnkgbG9vcAorICAgICAgICogIHRoYXQgaXMgY2FwYWJsZSBvZiBmbHVzaGluZyB0aGUgY2FjaGUgaW5jcmVtZW50YWxseSB3aGVuCisgICAgICAgKiAgYW4gT09NIGVycm9ycyBvY2N1ci4KKyAgICAgICAqCisgICAgICAgKiAgSG93ZXZlciwgd2UgbmVlZCB0byBgbG9jaycgdGhlIG5vZGUgYmVmb3JlIHRoaXMgb3BlcmF0aW9uIHRvCisgICAgICAgKiAgcHJldmVudCBpdCBmcm9tIGJlaW5nIGZsdXNoZWQgd2l0aGluIHRoZSBsb29wLgorICAgICAgICoKKyAgICAgICAqICBXaGVuIHdlIGV4aXQgdGhlIGxvb3AsIHdlIHVubG9jayB0aGUgbm9kZSwgdGhlbiBjaGVjayB0aGUgYGVycm9yJworICAgICAgICogIHZhcmlhYmxlLiAgSWYgaXQgaXMgbm9uLXplcm8sIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2FjaGUgd2FzCisgICAgICAgKiAgY29tcGxldGVseSBmbHVzaGVkIGFuZCB0aGF0IG5vIHVzYWJsZSBtZW1vcnkgd2FzIGZvdW5kIHRvIGxvYWQKKyAgICAgICAqICB0aGUgYml0bWFwLgorICAgICAgICoKKyAgICAgICAqICBXZSB0aGVuIHByZWZlciB0byByZXR1cm4gYSB2YWx1ZSBvZiAwIChpLmUuLCBOTyBNQVRDSCkuICBUaGlzCisgICAgICAgKiAgZW5zdXJlcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB0cnkgdG8gYWxsb2NhdGUgYSBuZXcgbm9kZS4KKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBjb25zZXF1ZW50bHkgX2ZhaWxfIGFuZCB0aGUgbG9va3VwIGZ1bmN0aW9uCisgICAgICAgKiAgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgT09NIGVycm9yIGNvZGUuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBgYnVmZmVyID09IE5VTEwgJiYgd2lkdGggPT0gMjU1JyBpcyBhIGhhY2sgdXNlZCB0bworICAgICAgICogIHRhZyBgdW5hdmFpbGFibGUnIGJpdG1hcHMgaW4gdGhlIGFycmF5LiAgV2Ugc2hvdWxkIG5ldmVyIHRyeQorICAgICAgICogIHRvIGxvYWQgdGhlc2UuCisgICAgICAgKgorICAgICAgICovCisKKyAgICAgIGlmICggc2JpdC0+YnVmZmVyID09IE5VTEwgJiYgc2JpdC0+d2lkdGggPT0gMjU1ICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgIHNpemU7CisgICAgICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgICAgIGZ0Y3Nub2RlLT5yZWZfY291bnQrKzsgIC8qIGxvY2sgbm9kZSB0byBwcmV2ZW50IGZsdXNoaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIHJldHJ5IGxvb3AgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgRlRDX0NBQ0hFX1RSWUxPT1AoIGNhY2hlICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gZnRjX3Nub2RlX2xvYWQoIHNub2RlLCBjYWNoZS0+bWFuYWdlciwgZ2luZGV4LCAmc2l6ZSApOworICAgICAgICB9CisgICAgICAgIEZUQ19DQUNIRV9UUllMT09QX0VORCggbGlzdF9jaGFuZ2VkICk7CisKKyAgICAgICAgZnRjc25vZGUtPnJlZl9jb3VudC0tOyAgLyogdW5sb2NrIHRoZSBub2RlICovCisKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhY2hlLT5tYW5hZ2VyLT5jdXJfd2VpZ2h0ICs9IHNpemU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyNpZmRlZiBGVENfSU5MSU5FCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgRlRDX1NOb2RlX0NvbXBhcmUoIEZUQ19TTm9kZSAgIHNub2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRDX0dRdWVyeSAgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICBsaXN0X2NoYW5nZWQgKQorICB7CisgICAgcmV0dXJuIGZ0Y19zbm9kZV9jb21wYXJlKCBGVENfTk9ERSggc25vZGUgKSwgZ3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUsIGxpc3RfY2hhbmdlZCApOworICB9CisKKyNlbmRpZgorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjc2JpdHMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2FjaGUvZnRjc2JpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJmYTFhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9mdGNzYml0cy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGNzYml0cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQSBzbWFsbC1iaXRtYXAgY2FjaGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVENTQklUU19IX18KKyNkZWZpbmUgX19GVENTQklUU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NBQ0hFX0gKKyNpbmNsdWRlICJmdGNnbHlwaC5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisjZGVmaW5lIEZUQ19TQklUX0lURU1TX1BFUl9OT0RFICAxNgorCisgIHR5cGVkZWYgc3RydWN0ICBGVENfU05vZGVSZWNfCisgIHsKKyAgICBGVENfR05vZGVSZWMgIGdub2RlOworICAgIEZUX1VJbnQgICAgICAgY291bnQ7CisgICAgRlRDX1NCaXRSZWMgICBzYml0c1tGVENfU0JJVF9JVEVNU19QRVJfTk9ERV07CisKKyAgfSBGVENfU05vZGVSZWMsICpGVENfU05vZGU7CisKKworI2RlZmluZSBGVENfU05PREUoIHggKSAgICAgICAgICggKEZUQ19TTm9kZSkoIHggKSApCisjZGVmaW5lIEZUQ19TTk9ERV9HSU5ERVgoIHggKSAgRlRDX0dOT0RFKCB4ICktPmdpbmRleAorI2RlZmluZSBGVENfU05PREVfRkFNSUxZKCB4ICkgIEZUQ19HTk9ERSggeCApLT5mYW1pbHkKKworICB0eXBlZGVmIEZUX1VJbnQKKyAgKCpGVENfU0ZhbWlseV9HZXRDb3VudEZ1bmMpKCBGVENfRmFtaWx5ICAgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkZUQ19TRmFtaWx5X0xvYWRHbHlwaEZ1bmMpKCBGVENfRmFtaWx5ICAgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19TRmFtaWx5Q2xhc3NSZWNfCisgIHsKKyAgICBGVENfTXJ1TGlzdENsYXNzUmVjICAgICAgICBjbGF6ejsKKyAgICBGVENfU0ZhbWlseV9HZXRDb3VudEZ1bmMgICBmYW1pbHlfZ2V0X2NvdW50OworICAgIEZUQ19TRmFtaWx5X0xvYWRHbHlwaEZ1bmMgIGZhbWlseV9sb2FkX2dseXBoOworCisgIH0gRlRDX1NGYW1pbHlDbGFzc1JlYzsKKworICB0eXBlZGVmIGNvbnN0IEZUQ19TRmFtaWx5Q2xhc3NSZWMqICBGVENfU0ZhbWlseUNsYXNzOworCisjZGVmaW5lIEZUQ19TRkFNSUxZX0NMQVNTKCB4ICkgICgoRlRDX1NGYW1pbHlDbGFzcykoeCkpCisKKyNkZWZpbmUgRlRDX0NBQ0hFX19TRkFNSUxZX0NMQVNTKCB4ICkgIFwKKyAgICAgICAgICBGVENfU0ZBTUlMWV9DTEFTUyggRlRDX0NBQ0hFX19HQ0FDSEVfQ0xBU1MoIHggKS0+ZmFtaWx5X2NsYXNzICkKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRlRDX1NOb2RlX0ZyZWUoIEZUQ19TTm9kZSAgc25vZGUsCisgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgIGNhY2hlICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgRlRDX1NOb2RlX05ldyggRlRDX1NOb2RlICAgKnBzbm9kZSwKKyAgICAgICAgICAgICAgICAgRlRDX0dRdWVyeSAgIGdxdWVyeSwKKyAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgIGNhY2hlICk7CisKKyNpZiAwCisgIEZUX0xPQ0FMKCBGVF9VTG9uZyApCisgIEZUQ19TTm9kZV9XZWlnaHQoIEZUQ19TTm9kZSAgaW5vZGUgKTsKKyNlbmRpZgorCisKKyNpZmRlZiBGVENfSU5MSU5FCisKKyAgRlRfTE9DQUwoIEZUX0Jvb2wgKQorICBGVENfU05vZGVfQ29tcGFyZSggRlRDX1NOb2RlICAgc25vZGUsCisgICAgICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICBncXVlcnksCisgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgIGxpc3RfY2hhbmdlZCk7CisKKyNlbmRpZgorCisgIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRDU0JJVFNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NhY2hlL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDVjZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jYWNoZS9ydWxlcy5tawpAQCAtMCwwICsxLDg1IEBACisjCisjIEZyZWVUeXBlIDIgQ2FjaGUgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDIwMDAtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBDYWNoZSBkcml2ZXIgZGlyZWN0b3J5CisjCitDQUNIRV9ESVIgICA6PSAkKFNSQ19ESVIpL2NhY2hlCisKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworQ0FDSEVfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICRJJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkKENBQ0hFX0RJUikpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAkKEZUX0NGTEFHUykKKworCisjIENhY2hlIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworQ0FDSEVfRFJWX1NSQyA6PSAkKENBQ0hFX0RJUikvZnRjYmFzaWMuYyBcCisgICAgICAgICAgICAgICAgICQoQ0FDSEVfRElSKS9mdGNjYWNoZS5jIFwKKyAgICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y2NtYXAuYyAgXAorICAgICAgICAgICAgICAgICAkKENBQ0hFX0RJUikvZnRjZ2x5cGguYyBcCisgICAgICAgICAgICAgICAgICQoQ0FDSEVfRElSKS9mdGNpbWFnZS5jIFwKKyAgICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y21hbmFnLmMgXAorICAgICAgICAgICAgICAgICAkKENBQ0hFX0RJUikvZnRjbXJ1LmMgICBcCisgICAgICAgICAgICAgICAgICQoQ0FDSEVfRElSKS9mdGNzYml0cy5jCisKKworIyBDYWNoZSBkcml2ZXIgaGVhZGVycworIworQ0FDSEVfRFJWX0ggOj0gJChDQUNIRV9ESVIpL2Z0Y2NhY2hlLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y2NiYWNrLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y2Vycm9yLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y2dseXBoLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y2ltYWdlLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y21hbmFnLmggXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y21ydS5oICAgXAorICAgICAgICAgICAgICAgJChDQUNIRV9ESVIpL2Z0Y3NiaXRzLmgKKworCisjIENhY2hlIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBDQUNIRV9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMuCisjICAgQ0FDSEVfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcy4KKyMKK0NBQ0hFX0RSVl9PQkpfTSA6PSAkKENBQ0hFX0RSVl9TUkM6JChDQUNIRV9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitDQUNIRV9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9mdGNhY2hlLiRPCisKKyMgQ2FjaGUgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK0NBQ0hFX0RSVl9TUkNfUyA6PSAkKENBQ0hFX0RJUikvZnRjYWNoZS5jCisKKworIyBDYWNoZSBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKENBQ0hFX0RSVl9PQkpfUyk6ICQoQ0FDSEVfRFJWX1NSQ19TKSAkKENBQ0hFX0RSVl9TUkMpIFwKKyAgICAgICAgICAgICAgICAgICAkKEZSRUVUWVBFX0gpICQoQ0FDSEVfRFJWX0gpCisJJChDQUNIRV9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChDQUNIRV9EUlZfU1JDX1MpKQorCisKKyMgQ2FjaGUgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKENBQ0hFX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChDQUNIRV9EUlZfSCkKKwkkKENBQ0hFX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChDQUNIRV9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoQ0FDSEVfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZiNzljCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL2NmZiBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgY2ZmIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBjZmZkcml2ciBjZmZnbG9hZCBjZmZsb2FkIGNmZm9ianMgY2ZmcGFyc2UgY2ZmY21hcCBjZmZwaWMgOworICB9CisgIGVsc2UKKyAgeworICAgIF9zb3VyY2VzID0gY2ZmIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL2NmZiBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJhcnJzdC5jIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyYXJyc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhiMWZhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyYXJyc3QuYwpAQCAtMCwwICsxLDI0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyYXJyc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgQXJyYXkgU3RhY2tzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiY2YyZ2x1ZS5oIgorI2luY2x1ZGUgImNmMmFycnN0LmgiCisKKyNpbmNsdWRlICJjZjJlcnJvci5oIgorCisKKyAgLyoKKyAgICogQ0YyX0FyclN0YWNrIHVzZXMgYW4gZXJyb3IgcG9pbnRlciwgdG8gZW5hYmxlIHNoYXJlZCBlcnJvcnMuCisgICAqIFNoYXJlZCBlcnJvcnMgYXJlIG5lY2Vzc2FyeSB3aGVuIG11bHRpcGxlIG9iamVjdHMgYWxsb3cgdGhlIHByb2dyYW0KKyAgICogdG8gY29udGludWUgYWZ0ZXIgZGV0ZWN0aW5nIGVycm9ycy4gIE9ubHkgdGhlIGZpcnN0IGVycm9yIHNob3VsZCBiZQorICAgKiByZWNvcmRlZC4KKyAgICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2FycnN0YWNrX2luaXQoIENGMl9BcnJTdGFjayAgYXJyc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgICAgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIHNpemVJdGVtICkKKyAgeworICAgIEZUX0FTU0VSVCggYXJyc3RhY2sgIT0gTlVMTCApOworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlICovCisgICAgYXJyc3RhY2stPm1lbW9yeSAgICA9IG1lbW9yeTsKKyAgICBhcnJzdGFjay0+ZXJyb3IgICAgID0gZXJyb3I7CisgICAgYXJyc3RhY2stPnNpemVJdGVtICA9IHNpemVJdGVtOworICAgIGFycnN0YWNrLT5hbGxvY2F0ZWQgPSAwOworICAgIGFycnN0YWNrLT5jaHVuayAgICAgPSAxMDsgICAgLyogY2h1bmtzIG9mIDEwIGl0ZW1zICovCisgICAgYXJyc3RhY2stPmNvdW50ICAgICA9IDA7CisgICAgYXJyc3RhY2stPnRvdGFsU2l6ZSA9IDA7CisgICAgYXJyc3RhY2stPnB0ciAgICAgICA9IE5VTEw7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9hcnJzdGFja19maW5hbGl6ZSggQ0YyX0FyclN0YWNrICBhcnJzdGFjayApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGFycnN0YWNrLT5tZW1vcnk7ICAgICAvKiBmb3IgRlRfRlJFRSAqLworCisKKyAgICBGVF9BU1NFUlQoIGFycnN0YWNrICE9IE5VTEwgKTsKKworICAgIGFycnN0YWNrLT5hbGxvY2F0ZWQgPSAwOworICAgIGFycnN0YWNrLT5jb3VudCAgICAgPSAwOworICAgIGFycnN0YWNrLT50b3RhbFNpemUgPSAwOworCisgICAgLyogZnJlZSB0aGUgZGF0YSBidWZmZXIgKi8KKyAgICBGVF9GUkVFKCBhcnJzdGFjay0+cHRyICk7CisgIH0KKworCisgIC8qIGFsbG9jYXRlIG9yIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciBzaXplOyAqLworICAvKiByZXR1cm4gZmFsc2Ugb24gbWVtb3J5IGVycm9yICovCisgIHN0YXRpYyBGVF9Cb29sCisgIGNmMl9hcnJzdGFja19zZXROdW1FbGVtZW50cyggQ0YyX0FyclN0YWNrICBhcnJzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIG51bUVsZW1lbnRzICkKKyAgeworICAgIEZUX0FTU0VSVCggYXJyc3RhY2sgIT0gTlVMTCApOworCisgICAgeworICAgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7ICAgICAgICAvKiBmb3IgRlRfUkVBTExPQyAqLworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBhcnJzdGFjay0+bWVtb3J5OyAvKiBmb3IgRlRfUkVBTExPQyAqLworCisgICAgICBzaXplX3QgIG5ld1NpemUgPSBudW1FbGVtZW50cyAqIGFycnN0YWNrLT5zaXplSXRlbTsKKworCisgICAgICBpZiAoIG51bUVsZW1lbnRzID4gTE9OR19NQVggLyBhcnJzdGFjay0+c2l6ZUl0ZW0gKQorICAgICAgICBnb3RvIGV4aXQ7CisKKworICAgICAgRlRfQVNTRVJUKCBuZXdTaXplID4gMCApOyAgIC8qIGF2b2lkIHJlYWxsb2Mgd2l0aCB6ZXJvIHNpemUgKi8KKworICAgICAgaWYgKCAhRlRfUkVBTExPQyggYXJyc3RhY2stPnB0ciwgYXJyc3RhY2stPnRvdGFsU2l6ZSwgbmV3U2l6ZSApICkKKyAgICAgIHsKKyAgICAgICAgYXJyc3RhY2stPmFsbG9jYXRlZCA9IG51bUVsZW1lbnRzOworICAgICAgICBhcnJzdGFjay0+dG90YWxTaXplID0gbmV3U2l6ZTsKKworICAgICAgICBpZiAoIGFycnN0YWNrLT5jb3VudCA+IG51bUVsZW1lbnRzICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHdlIHRydW5jYXRlZCB0aGUgbGlzdCEgKi8KKyAgICAgICAgICBDRjJfU0VUX0VSUk9SKCBhcnJzdGFjay0+ZXJyb3IsIFN0YWNrX092ZXJmbG93ICk7CisgICAgICAgICAgYXJyc3RhY2stPmNvdW50ID0gbnVtRWxlbWVudHM7CisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7ICAgICAvKiBzdWNjZXNzICovCisgICAgICB9CisgICAgfQorCisgIGV4aXQ6CisgICAgLyogaWYgdGhlcmUncyBub3QgYWxyZWFkeSBhbiBlcnJvciwgc3RvcmUgdGhpcyBvbmUgKi8KKyAgICBDRjJfU0VUX0VSUk9SKCBhcnJzdGFjay0+ZXJyb3IsIE91dF9PZl9NZW1vcnkgKTsKKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisKKyAgLyogc2V0IHRoZSBjb3VudCwgZW5zdXJpbmcgYWxsb2NhdGlvbiBpcyBzdWZmaWNpZW50ICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9hcnJzdGFja19zZXRDb3VudCggQ0YyX0FyclN0YWNrICBhcnJzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIG51bUVsZW1lbnRzICkKKyAgeworICAgIEZUX0FTU0VSVCggYXJyc3RhY2sgIT0gTlVMTCApOworCisgICAgaWYgKCBudW1FbGVtZW50cyA+IGFycnN0YWNrLT5hbGxvY2F0ZWQgKQorICAgIHsKKyAgICAgIC8qIGV4cGFuZCB0aGUgYWxsb2NhdGlvbiBmaXJzdCAqLworICAgICAgaWYgKCAhY2YyX2FycnN0YWNrX3NldE51bUVsZW1lbnRzKCBhcnJzdGFjaywgbnVtRWxlbWVudHMgKSApCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcnJzdGFjay0+Y291bnQgPSBudW1FbGVtZW50czsKKyAgfQorCisKKyAgLyogY2xlYXIgdGhlIGNvdW50ICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9hcnJzdGFja19jbGVhciggQ0YyX0FyclN0YWNrICBhcnJzdGFjayApCisgIHsKKyAgICBGVF9BU1NFUlQoIGFycnN0YWNrICE9IE5VTEwgKTsKKworICAgIGFycnN0YWNrLT5jb3VudCA9IDA7CisgIH0KKworCisgIC8qIGN1cnJlbnQgbnVtYmVyIG9mIGl0ZW1zICovCisgIEZUX0xPQ0FMX0RFRiggc2l6ZV90ICkKKyAgY2YyX2FycnN0YWNrX3NpemUoIGNvbnN0IENGMl9BcnJTdGFjayAgYXJyc3RhY2sgKQorICB7CisgICAgRlRfQVNTRVJUKCBhcnJzdGFjayAhPSBOVUxMICk7CisKKyAgICByZXR1cm4gYXJyc3RhY2stPmNvdW50OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQqICkKKyAgY2YyX2FycnN0YWNrX2dldEJ1ZmZlciggY29uc3QgQ0YyX0FyclN0YWNrICBhcnJzdGFjayApCisgIHsKKyAgICBGVF9BU1NFUlQoIGFycnN0YWNrICE9IE5VTEwgKTsKKworICAgIHJldHVybiBhcnJzdGFjay0+cHRyOworICB9CisKKworICAvKiByZXR1cm4gcG9pbnRlciB0byB0aGUgZ2l2ZW4gZWxlbWVudCAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQqICkKKyAgY2YyX2FycnN0YWNrX2dldFBvaW50ZXIoIGNvbnN0IENGMl9BcnJTdGFjayAgYXJyc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgICAgIGlkeCApCisgIHsKKyAgICB2b2lkKiAgbmV3UHRyOworCisKKyAgICBGVF9BU1NFUlQoIGFycnN0YWNrICE9IE5VTEwgKTsKKworICAgIGlmICggaWR4ID49IGFycnN0YWNrLT5jb3VudCApCisgICAgeworICAgICAgLyogb3ZlcmZsb3cgKi8KKyAgICAgIENGMl9TRVRfRVJST1IoIGFycnN0YWNrLT5lcnJvciwgU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIGlkeCA9IDA7ICAgIC8qIGNob29zZSBzYWZlIGRlZmF1bHQgKi8KKyAgICB9CisKKyAgICBuZXdQdHIgPSAoRlRfQnl0ZSopYXJyc3RhY2stPnB0ciArIGlkeCAqIGFycnN0YWNrLT5zaXplSXRlbTsKKworICAgIHJldHVybiBuZXdQdHI7CisgIH0KKworCisgIC8qIHB1c2ggKGFwcGVuZCkgYW4gZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0OyAgICAgICAgICovCisgIC8qIHJldHVybiBmYWxzZSBvbiBtZW1vcnkgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRPRE86IHNob3VsZCB0aGVyZSBiZSBhIGxlbmd0aCBwYXJhbSBmb3IgZXh0cmEgY2hlY2tpbmc/ICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9hcnJzdGFja19wdXNoKCBDRjJfQXJyU3RhY2sgIGFycnN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICBwdHIgKQorICB7CisgICAgRlRfQVNTRVJUKCBhcnJzdGFjayAhPSBOVUxMICk7CisKKyAgICBpZiAoIGFycnN0YWNrLT5jb3VudCA9PSBhcnJzdGFjay0+YWxsb2NhdGVkICkKKyAgICB7CisgICAgICAvKiBncm93IHRoZSBidWZmZXIgYnkgb25lIGNodW5rICovCisgICAgICBpZiAoICFjZjJfYXJyc3RhY2tfc2V0TnVtRWxlbWVudHMoCisgICAgICAgICAgICAgYXJyc3RhY2ssIGFycnN0YWNrLT5hbGxvY2F0ZWQgKyBhcnJzdGFjay0+Y2h1bmsgKSApCisgICAgICB7CisgICAgICAgIC8qIG9uIGVycm9yLCBpZ25vcmUgdGhlIHB1c2ggKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIEZUX0FTU0VSVCggcHRyICE9IE5VTEwgKTsKKworICAgIHsKKyAgICAgIHNpemVfdCAgb2Zmc2V0ID0gYXJyc3RhY2stPmNvdW50ICogYXJyc3RhY2stPnNpemVJdGVtOworICAgICAgdm9pZCogICBuZXdQdHIgPSAoRlRfQnl0ZSopYXJyc3RhY2stPnB0ciArIG9mZnNldDsKKworCisgICAgICBGVF9NRU1fQ09QWSggbmV3UHRyLCBwdHIsIGFycnN0YWNrLT5zaXplSXRlbSApOworICAgICAgYXJyc3RhY2stPmNvdW50ICs9IDE7CisgICAgfQorICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJhcnJzdC5oIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyYXJyc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVhZDhiCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyYXJyc3QuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyYXJyc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgQXJyYXkgU3RhY2tzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRjJBUlJTVF9IX18KKyNkZWZpbmUgX19DRjJBUlJTVF9IX18KKworCisjaW5jbHVkZSAiY2YyZXJyb3IuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIG5lZWQgdG8gZGVmaW5lIHRoZSBzdHJ1Y3QgaGVyZSAobm90IG9wYXF1ZSkgc28gaXQgY2FuIGJlIGFsbG9jYXRlZCBieSAqLworICAvKiBjbGllbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGMl9BcnJTdGFja1JlY18KKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX0Vycm9yKiAgZXJyb3I7CisKKyAgICBzaXplX3QgIHNpemVJdGVtOyAgICAgICAvKiBieXRlcyBwZXIgZWxlbWVudCAgICAgICAgICAgICAqLworICAgIHNpemVfdCAgYWxsb2NhdGVkOyAgICAgIC8qIGl0ZW1zIGFsbG9jYXRlZCAgICAgICAgICAgICAgICovCisgICAgc2l6ZV90ICBjaHVuazsgICAgICAgICAgLyogYWxsb2NhdGlvbiBpbmNyZW1lbnQgaW4gaXRlbXMgKi8KKyAgICBzaXplX3QgIGNvdW50OyAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgYWxsb2NhdGVkICAqLworICAgIHNpemVfdCAgdG90YWxTaXplOyAgICAgIC8qIHRvdGFsIGJ5dGVzIGFsbG9jYXRlZCAgICAgICAgICovCisKKyAgICB2b2lkKiAgcHRyOyAgICAgICAgICAgICAvKiBwdHIgdG8gZGF0YSAgICAgICAgICAgICAgICAgICAqLworCisgIH0gQ0YyX0FyclN0YWNrUmVjLCAqQ0YyX0FyclN0YWNrOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfYXJyc3RhY2tfaW5pdCggQ0YyX0FyclN0YWNrICBhcnJzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICAgICBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgc2l6ZUl0ZW0gKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfYXJyc3RhY2tfZmluYWxpemUoIENGMl9BcnJTdGFjayAgYXJyc3RhY2sgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9hcnJzdGFja19zZXRDb3VudCggQ0YyX0FyclN0YWNrICBhcnJzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIG51bUVsZW1lbnRzICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2FycnN0YWNrX2NsZWFyKCBDRjJfQXJyU3RhY2sgIGFycnN0YWNrICk7CisgIEZUX0xPQ0FMKCBzaXplX3QgKQorICBjZjJfYXJyc3RhY2tfc2l6ZSggY29uc3QgQ0YyX0FyclN0YWNrICBhcnJzdGFjayApOworCisgIEZUX0xPQ0FMKCB2b2lkKiApCisgIGNmMl9hcnJzdGFja19nZXRCdWZmZXIoIGNvbnN0IENGMl9BcnJTdGFjayAgYXJyc3RhY2sgKTsKKyAgRlRfTE9DQUwoIHZvaWQqICkKKyAgY2YyX2FycnN0YWNrX2dldFBvaW50ZXIoIGNvbnN0IENGMl9BcnJTdGFjayAgYXJyc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgICAgIGlkeCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2FycnN0YWNrX3B1c2goIENGMl9BcnJTdGFjayAgYXJyc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgIHB0ciApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRjJBUlJTVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmJsdWVzLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJibHVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MGY4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJibHVlcy5jCkBAIC0wLDAgKzEsNTc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZjJibHVlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQWRvYmUncyBjb2RlIGZvciBoYW5kbGluZyBCbHVlIFpvbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCisvKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLworLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KKy8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCisvKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KKy8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCisvKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLworLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KKy8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCisvKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLworLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KKy8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCisvKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLworLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KKy8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCisvKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLworLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KKy8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCisvKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLworLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLworLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCisvKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImNmMmZ0LmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlICJjZjJibHVlcy5oIgorI2luY2x1ZGUgImNmMmhpbnRzLmgiCisjaW5jbHVkZSAiY2YyZm9udC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2YyYmx1ZXMKKworCisgIC8qCisgICAqIEZvciBibHVlIHZhbHVlcywgdGhlIEZyZWVUeXBlIHBhcnNlciBwcm9kdWNlcyBhbiBhcnJheSBvZiBpbnRlZ2VycywKKyAgICogd2hpbGUgdGhlIEFkb2JlIENGRiBlbmdpbmUgcHJvZHVjZXMgYW4gYXJyYXkgb2YgZml4ZWQuCisgICAqIERlZmluZSBhIG1hY3JvIHRvIGNvbnZlcnQgRnJlZVR5cGUgdG8gZml4ZWQuCisgICAqLworI2RlZmluZSBjZjJfYmx1ZVRvRml4ZWQoIHggKSAgY2YyX2ludFRvRml4ZWQoIHggKQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2JsdWVzX2luaXQoIENGMl9CbHVlcyAgYmx1ZXMsCisgICAgICAgICAgICAgICAgICBDRjJfRm9udCAgIGZvbnQgKQorICB7CisgICAgLyogcG9pbnRlciB0byBwYXJzZWQgZm9udCBvYmplY3QgKi8KKyAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBmb250LT5kZWNvZGVyOworCisgICAgQ0YyX0ZpeGVkICB6b25lSGVpZ2h0OworICAgIENGMl9GaXhlZCAgbWF4Wm9uZUhlaWdodCA9IDA7CisgICAgQ0YyX0ZpeGVkICBjc1VuaXRzUGVyUGl4ZWw7CisKKyAgICBzaXplX3QgIG51bUJsdWVWYWx1ZXM7CisgICAgc2l6ZV90ICBudW1PdGhlckJsdWVzOworICAgIHNpemVfdCAgbnVtRmFtaWx5Qmx1ZXM7CisgICAgc2l6ZV90ICBudW1GYW1pbHlPdGhlckJsdWVzOworCisgICAgRlRfUG9zKiAgYmx1ZVZhbHVlczsKKyAgICBGVF9Qb3MqICBvdGhlckJsdWVzOworICAgIEZUX1BvcyogIGZhbWlseUJsdWVzOworICAgIEZUX1BvcyogIGZhbWlseU90aGVyQmx1ZXM7CisKKyAgICBzaXplX3QgICAgIGk7CisgICAgQ0YyX0ZpeGVkICBlbUJveEJvdHRvbSwgZW1Cb3hUb3A7CisKKyNpZiAwCisgICAgQ0YyX0ludCAgdW5pdHNQZXJFbSA9IGZvbnQtPnVuaXRzUGVyRW07CisKKworICAgIGlmICggdW5pdHNQZXJFbSA9PSAwICkKKyAgICAgIHVuaXRzUGVyRW0gPSAxMDAwOworI2VuZGlmCisKKyAgICBGVF9aRVJPKCBibHVlcyApOworICAgIGJsdWVzLT5zY2FsZSA9IGZvbnQtPmlubmVyVHJhbnNmb3JtLmQ7CisKKyAgICBjZjJfZ2V0Qmx1ZU1ldHJpY3MoIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAmYmx1ZXMtPmJsdWVTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZibHVlcy0+Ymx1ZVNoaWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgJmJsdWVzLT5ibHVlRnV6eiApOworCisgICAgY2YyX2dldEJsdWVWYWx1ZXMoIGRlY29kZXIsICZudW1CbHVlVmFsdWVzLCAmYmx1ZVZhbHVlcyApOworICAgIGNmMl9nZXRPdGhlckJsdWVzKCBkZWNvZGVyLCAmbnVtT3RoZXJCbHVlcywgJm90aGVyQmx1ZXMgKTsKKyAgICBjZjJfZ2V0RmFtaWx5Qmx1ZXMoIGRlY29kZXIsICZudW1GYW1pbHlCbHVlcywgJmZhbWlseUJsdWVzICk7CisgICAgY2YyX2dldEZhbWlseU90aGVyQmx1ZXMoIGRlY29kZXIsICZudW1GYW1pbHlPdGhlckJsdWVzLCAmZmFtaWx5T3RoZXJCbHVlcyApOworCisgICAgLyoKKyAgICAgKiBzeW50aGV0aWMgZW0gYm94IGhpbnQgaGV1cmlzdGljCisgICAgICoKKyAgICAgKiBBcHBseSB0aGlzIHdoZW4gaWRlb2dyYXBoaWMgZGljdGlvbmFyeSAoTGFuZ3VhZ2VHcm91cCAxKSBoYXMgbm8KKyAgICAgKiByZWFsIGFsaWdubWVudCB6b25lcy4gIEFkb2JlIHRvb2xzIGdlbmVyYXRlIGR1bW15IHpvbmVzIGF0IC0yNTAgYW5kCisgICAgICogMTEwMCBmb3IgYSAxMDAwIHVuaXQgZW0uICBGb250cyB3aXRoIElDRi1iYXNlZCBhbGlnbm1lbnQgem9uZXMKKyAgICAgKiBzaG91bGQgbm90IGVuYWJsZSB0aGUgaGV1cmlzdGljLiAgV2hlbiB0aGUgaGV1cmlzdGljIGlzIGVuYWJsZWQsCisgICAgICogdGhlIGZvbnQncyBibHVlIHpvbmVzIGFyZSBpZ25vcmVkLgorICAgICAqCisgICAgICovCisKKyAgICAvKiBnZXQgZW0gYm94IGZyb20gT1MvMiB0eXBvQXNjZW5kZXIvRGVzY2VuZGVyICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVE9ETzogRnJlZVR5cGUgZG9lcyBub3QgcGFyc2UgdGhlc2UgbWV0cmljcy4gIFNraXAgdGhlbSBmb3Igbm93LiAqLworI2lmIDAKKyAgICBGQ01fZ2V0SG9yaXpvbnRhbExpbmVNZXRyaWNzKCAmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVzY2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lZ2FwICk7CisgICAgaWYgKCBhc2NlbmRlciAtIGRlc2NlbmRlciA9PSB1bml0c1BlckVtICkKKyAgICB7CisgICAgICBlbUJveEJvdHRvbSA9IGNmMl9pbnRUb0ZpeGVkKCBkZXNjZW5kZXIgKTsKKyAgICAgIGVtQm94VG9wICAgID0gY2YyX2ludFRvRml4ZWQoIGFzY2VuZGVyICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGVtQm94Qm90dG9tID0gQ0YyX0lDRl9Cb3R0b207CisgICAgICBlbUJveFRvcCAgICA9IENGMl9JQ0ZfVG9wOworICAgIH0KKworICAgIGlmICggY2YyX2dldExhbmd1YWdlR3JvdXAoIGRlY29kZXIgKSA9PSAxICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIG51bUJsdWVWYWx1ZXMgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICggbnVtQmx1ZVZhbHVlcyA9PSA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIGNmMl9ibHVlVG9GaXhlZCggYmx1ZVZhbHVlc1swXSApIDwgZW1Cb3hCb3R0b20gJiYKKyAgICAgICAgICAgICBjZjJfYmx1ZVRvRml4ZWQoIGJsdWVWYWx1ZXNbMV0gKSA8IGVtQm94Qm90dG9tICYmCisgICAgICAgICAgICAgY2YyX2JsdWVUb0ZpeGVkKCBibHVlVmFsdWVzWzJdICkgPiBlbUJveFRvcCAgICAmJgorICAgICAgICAgICAgIGNmMl9ibHVlVG9GaXhlZCggYmx1ZVZhbHVlc1szXSApID4gZW1Cb3hUb3AgICAgKSApICkKKyAgICB7CisgICAgICAvKgorICAgICAgICogQ29uc3RydWN0IGhpbnQgZWRnZXMgc3VpdGFibGUgZm9yIHN5bnRoZXRpYyBnaG9zdCBoaW50cyBhdCB0b3AKKyAgICAgICAqIGFuZCBib3R0b20gb2YgZW0gYm94LiAgKy1DRjJfTUlOX0NPVU5URVIgYWxsb3dzIGZvciB1bmhpbnRlZAorICAgICAgICogZmVhdHVyZXMgYWJvdmUgb3IgYmVsb3cgdGhlIGxhc3QgaGludGVkIGVkZ2UuICBUaGlzIGFsc28gZ2l2ZXMgYQorICAgICAgICogbmV0IDEgcGl4ZWwgYm9vc3QgdG8gdGhlIGhlaWdodCBvZiBpZGVvZ3JhcGhpYyBnbHlwaHMuCisgICAgICAgKgorICAgICAgICogTm90ZTogQWRqdXN0IHN5bnRoZXRpYyBoaW50cyBvdXR3YXJkIGJ5IGVwc2lsb24gKDB4LjAwMDEpIHRvCisgICAgICAgKiAgICAgICBhdm9pZCBpbnRlcmZlcmVuY2UuICBFLmcuLCBzb21lIGZvbnRzIGhhdmUgcmVhbCBoaW50cyBhdAorICAgICAgICogICAgICAgODgwIGFuZCAtMTIwLgorICAgICAgICovCisKKyAgICAgIGJsdWVzLT5lbUJveEJvdHRvbUVkZ2UuY3NDb29yZCA9IGVtQm94Qm90dG9tIC0gQ0YyX0ZJWEVEX0VQU0lMT047CisgICAgICBibHVlcy0+ZW1Cb3hCb3R0b21FZGdlLmRzQ29vcmQgPSBjZjJfZml4ZWRSb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT5lbUJveEJvdHRvbUVkZ2UuY3NDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+c2NhbGUgKSApIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9NSU5fQ09VTlRFUjsKKyAgICAgIGJsdWVzLT5lbUJveEJvdHRvbUVkZ2Uuc2NhbGUgICA9IGJsdWVzLT5zY2FsZTsKKyAgICAgIGJsdWVzLT5lbUJveEJvdHRvbUVkZ2UuZmxhZ3MgICA9IENGMl9HaG9zdEJvdHRvbSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfTG9ja2VkIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9TeW50aGV0aWM7CisKKyAgICAgIGJsdWVzLT5lbUJveFRvcEVkZ2UuY3NDb29yZCA9IGVtQm94VG9wICsgQ0YyX0ZJWEVEX0VQU0lMT04gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIGZvbnQtPmRhcmtlblk7CisgICAgICBibHVlcy0+ZW1Cb3hUb3BFZGdlLmRzQ29vcmQgPSBjZjJfZml4ZWRSb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT5lbUJveFRvcEVkZ2UuY3NDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+c2NhbGUgKSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9NSU5fQ09VTlRFUjsKKyAgICAgIGJsdWVzLT5lbUJveFRvcEVkZ2Uuc2NhbGUgICA9IGJsdWVzLT5zY2FsZTsKKyAgICAgIGJsdWVzLT5lbUJveFRvcEVkZ2UuZmxhZ3MgICA9IENGMl9HaG9zdFRvcCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfTG9ja2VkIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9TeW50aGV0aWM7CisKKyAgICAgIGJsdWVzLT5kb0VtQm94SGludHMgPSBUUlVFOyAgICAvKiBlbmFibGUgdGhlIGhldXJpc3RpYyAqLworCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogY29weSBgQmx1ZVZhbHVlcycgYW5kIGBPdGhlckJsdWVzJyB0byBhIGNvbWJpbmVkIGFycmF5IG9mIHRvcCBhbmQgKi8KKyAgICAvKiBib3R0b20gem9uZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtQmx1ZVZhbHVlczsgaSArPSAyICkKKyAgICB7CisgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzQm90dG9tRWRnZSA9CisgICAgICAgIGNmMl9ibHVlVG9GaXhlZCggYmx1ZVZhbHVlc1tpXSApOworICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2UgPQorICAgICAgICBjZjJfYmx1ZVRvRml4ZWQoIGJsdWVWYWx1ZXNbaSArIDFdICk7CisKKyAgICAgIHpvbmVIZWlnaHQgPSBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZSAtCisgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc0JvdHRvbUVkZ2U7CisKKyAgICAgIGlmICggem9uZUhlaWdodCA8IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTQoKCAiY2YyX2JsdWVzX2luaXQ6IGlnbm9yaW5nIG5lZ2F0aXZlIHpvbmUgaGVpZ2h0XG4iICkpOworICAgICAgICBjb250aW51ZTsgICAvKiByZWplY3QgdGhpcyB6b25lICovCisgICAgICB9CisKKyAgICAgIGlmICggem9uZUhlaWdodCA+IG1heFpvbmVIZWlnaHQgKQorICAgICAgeworICAgICAgICAvKiB0YWtlIG1heGltdW0gYmVmb3JlIGRhcmtlbmluZyBhZGp1c3RtZW50ICAgICAgKi8KKyAgICAgICAgLyogc28gb3ZlcnNob290IHN1cHByZXNzaW9uIHBvaW50IGRvZXNuJ3QgY2hhbmdlICovCisgICAgICAgIG1heFpvbmVIZWlnaHQgPSB6b25lSGVpZ2h0OworICAgICAgfQorCisgICAgICAvKiBhZGp1c3QgYm90aCBlZGdlcyBvZiB0b3Agem9uZSB1cHdhcmQgYnkgdHdpY2UgZGFya2VuaW5nIGFtb3VudCAqLworICAgICAgaWYgKCBpICE9IDAgKQorICAgICAgeworICAgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZSAgICArPSAyICogZm9udC0+ZGFya2VuWTsKKyAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc0JvdHRvbUVkZ2UgKz0gMiAqIGZvbnQtPmRhcmtlblk7CisgICAgICB9CisKKyAgICAgIC8qIGZpcnN0IGBCbHVlVmFsdWUnIGlzIGJvdHRvbSB6b25lOyBvdGhlcnMgYXJlIHRvcCAqLworICAgICAgaWYgKCBpID09IDAgKQorICAgICAgeworICAgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmJvdHRvbVpvbmUgPQorICAgICAgICAgIFRSVUU7CisgICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uY3NGbGF0RWRnZSA9CisgICAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2U7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uYm90dG9tWm9uZSA9CisgICAgICAgICAgRkFMU0U7CisgICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uY3NGbGF0RWRnZSA9CisgICAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc0JvdHRvbUVkZ2U7CisgICAgICB9CisKKyAgICAgIGJsdWVzLT5jb3VudCArPSAxOworICAgIH0KKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtT3RoZXJCbHVlczsgaSArPSAyICkKKyAgICB7CisgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzQm90dG9tRWRnZSA9CisgICAgICAgIGNmMl9ibHVlVG9GaXhlZCggb3RoZXJCbHVlc1tpXSApOworICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2UgPQorICAgICAgICBjZjJfYmx1ZVRvRml4ZWQoIG90aGVyQmx1ZXNbaSArIDFdICk7CisKKyAgICAgIHpvbmVIZWlnaHQgPSBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZSAtCisgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc0JvdHRvbUVkZ2U7CisKKyAgICAgIGlmICggem9uZUhlaWdodCA8IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTQoKCAiY2YyX2JsdWVzX2luaXQ6IGlnbm9yaW5nIG5lZ2F0aXZlIHpvbmUgaGVpZ2h0XG4iICkpOworICAgICAgICBjb250aW51ZTsgICAvKiByZWplY3QgdGhpcyB6b25lICovCisgICAgICB9CisKKyAgICAgIGlmICggem9uZUhlaWdodCA+IG1heFpvbmVIZWlnaHQgKQorICAgICAgeworICAgICAgICAvKiB0YWtlIG1heGltdW0gYmVmb3JlIGRhcmtlbmluZyBhZGp1c3RtZW50ICAgICAgKi8KKyAgICAgICAgLyogc28gb3ZlcnNob290IHN1cHByZXNzaW9uIHBvaW50IGRvZXNuJ3QgY2hhbmdlICovCisgICAgICAgIG1heFpvbmVIZWlnaHQgPSB6b25lSGVpZ2h0OworICAgICAgfQorCisgICAgICAvKiBOb3RlOiBib3R0b20gem9uZXMgYXJlIG5vdCBhZGp1c3RlZCBmb3IgZGFya2VuaW5nIGFtb3VudCAqLworCisgICAgICAvKiBhbGwgT3RoZXJCbHVlcyBhcmUgYm90dG9tIHpvbmUgKi8KKyAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uYm90dG9tWm9uZSA9CisgICAgICAgIFRSVUU7CisgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzRmxhdEVkZ2UgPQorICAgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZTsKKworICAgICAgYmx1ZXMtPmNvdW50ICs9IDE7CisgICAgfQorCisgICAgLyogQWRqdXN0IGZvciBGYW1pbHlCbHVlcyAqLworCisgICAgLyogU2VhcmNoIGZvciB0aGUgbmVhcmVzdCBmbGF0IGVkZ2UgaW4gYEZhbWlseUJsdWVzJyBvciAgICAgICAgICAgICAgICAqLworICAgIC8qIGBGYW1pbHlPdGhlckJsdWVzJy4gIEFjY29yZGluZyB0byB0aGUgQmxhY2sgQm9vaywgYW55IG1hdGNoaW5nIGVkZ2UgKi8KKyAgICAvKiBtdXN0IGJlIHdpdGhpbiBvbmUgZGV2aWNlIHBpeGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBjc1VuaXRzUGVyUGl4ZWwgPSBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCAxICksIGJsdWVzLT5zY2FsZSApOworCisgICAgLyogbG9vcCBvbiBhbGwgem9uZXMgaW4gdGhpcyBmb250ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBibHVlcy0+Y291bnQ7IGkrKyApCisgICAgeworICAgICAgc2l6ZV90ICAgICBqOworICAgICAgQ0YyX0ZpeGVkICBtaW5EaWZmOworICAgICAgQ0YyX0ZpeGVkICBmbGF0RmFtaWx5RWRnZSwgZGlmZjsKKyAgICAgIC8qIHZhbHVlIGZvciB0aGlzIGZvbnQgKi8KKyAgICAgIENGMl9GaXhlZCAgZmxhdEVkZ2UgPSBibHVlcy0+em9uZVtpXS5jc0ZsYXRFZGdlOworCisKKyAgICAgIGlmICggYmx1ZXMtPnpvbmVbaV0uYm90dG9tWm9uZSApCisgICAgICB7CisgICAgICAgIC8qIEluIGEgYm90dG9tIHpvbmUsIHRoZSB0b3AgZWRnZSBpcyB0aGUgZmxhdCBlZGdlLiAgICAgICAgICAgICAqLworICAgICAgICAvKiBTZWFyY2ggYEZhbWlseU90aGVyQmx1ZXMnIGZvciBib3R0b20gem9uZXM7IGxvb2sgZm9yIGNsb3Nlc3QgKi8KKyAgICAgICAgLyogRmFtaWx5IGVkZ2UgdGhhdCBpcyB3aXRoaW4gdGhlIG9uZSBwaXhlbCB0aHJlc2hvbGQuICAgICAgICAgICovCisKKyAgICAgICAgbWluRGlmZiA9IENGMl9GSVhFRF9NQVg7CisKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBudW1GYW1pbHlPdGhlckJsdWVzOyBqICs9IDIgKQorICAgICAgICB7CisgICAgICAgICAgLyogdG9wIGVkZ2UgKi8KKyAgICAgICAgICBmbGF0RmFtaWx5RWRnZSA9IGNmMl9ibHVlVG9GaXhlZCggZmFtaWx5T3RoZXJCbHVlc1tqICsgMV0gKTsKKworICAgICAgICAgIGRpZmYgPSBjZjJfZml4ZWRBYnMoIGZsYXRFZGdlIC0gZmxhdEZhbWlseUVkZ2UgKTsKKworICAgICAgICAgIGlmICggZGlmZiA8IG1pbkRpZmYgJiYgZGlmZiA8IGNzVW5pdHNQZXJQaXhlbCApCisgICAgICAgICAgeworICAgICAgICAgICAgYmx1ZXMtPnpvbmVbaV0uY3NGbGF0RWRnZSA9IGZsYXRGYW1pbHlFZGdlOworICAgICAgICAgICAgbWluRGlmZiAgICAgICAgICAgICAgICAgICA9IGRpZmY7CisKKyAgICAgICAgICAgIGlmICggZGlmZiA9PSAwICkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGZpcnN0IG1lbWJlciBvZiBGYW1pbHlCbHVlcywgd2hpY2ggaXMgYSBib3R0b20gem9uZSAqLworICAgICAgICBpZiAoIG51bUZhbWlseUJsdWVzID49IDIgKQorICAgICAgICB7CisgICAgICAgICAgLyogdG9wIGVkZ2UgKi8KKyAgICAgICAgICBmbGF0RmFtaWx5RWRnZSA9IGNmMl9ibHVlVG9GaXhlZCggZmFtaWx5Qmx1ZXNbMV0gKTsKKworICAgICAgICAgIGRpZmYgPSBjZjJfZml4ZWRBYnMoIGZsYXRFZGdlIC0gZmxhdEZhbWlseUVkZ2UgKTsKKworICAgICAgICAgIGlmICggZGlmZiA8IG1pbkRpZmYgJiYgZGlmZiA8IGNzVW5pdHNQZXJQaXhlbCApCisgICAgICAgICAgICBibHVlcy0+em9uZVtpXS5jc0ZsYXRFZGdlID0gZmxhdEZhbWlseUVkZ2U7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogSW4gYSB0b3Agem9uZSwgdGhlIGJvdHRvbSBlZGdlIGlzIHRoZSBmbGF0IGVkZ2UuICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFNlYXJjaCBgRmFtaWx5Qmx1ZXMnIGZvciB0b3Agem9uZXM7IHNraXAgZmlyc3Qgem9uZSwgd2hpY2ggaXMgYSAqLworICAgICAgICAvKiBib3R0b20gem9uZTsgbG9vayBmb3IgY2xvc2VzdCBGYW1pbHkgZWRnZSB0aGF0IGlzIHdpdGhpbiB0aGUgICAgKi8KKyAgICAgICAgLyogb25lIHBpeGVsIHRocmVzaG9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgbWluRGlmZiA9IENGMl9GSVhFRF9NQVg7CisKKyAgICAgICAgZm9yICggaiA9IDI7IGogPCBudW1GYW1pbHlCbHVlczsgaiArPSAyICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGJvdHRvbSBlZGdlICovCisgICAgICAgICAgZmxhdEZhbWlseUVkZ2UgPSBjZjJfYmx1ZVRvRml4ZWQoIGZhbWlseUJsdWVzW2pdICk7CisKKyAgICAgICAgICAvKiBhZGp1c3QgZWRnZXMgb2YgdG9wIHpvbmUgdXB3YXJkIGJ5IHR3aWNlIGRhcmtlbmluZyBhbW91bnQgKi8KKyAgICAgICAgICBmbGF0RmFtaWx5RWRnZSArPSAyICogZm9udC0+ZGFya2VuWTsgICAgICAvKiBib3R0b20gZWRnZSAqLworCisgICAgICAgICAgZGlmZiA9IGNmMl9maXhlZEFicyggZmxhdEVkZ2UgLSBmbGF0RmFtaWx5RWRnZSApOworCisgICAgICAgICAgaWYgKCBkaWZmIDwgbWluRGlmZiAmJiBkaWZmIDwgY3NVbml0c1BlclBpeGVsICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBibHVlcy0+em9uZVtpXS5jc0ZsYXRFZGdlID0gZmxhdEZhbWlseUVkZ2U7CisgICAgICAgICAgICBtaW5EaWZmICAgICAgICAgICAgICAgICAgID0gZGlmZjsKKworICAgICAgICAgICAgaWYgKCBkaWZmID09IDAgKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUT0RPOiBlbmZvcmNlIHNlcGFyYXRpb24gb2Ygem9uZXMsIGluY2x1ZGluZyBCbHVlRnV6eiAqLworCisgICAgLyogQWRqdXN0IEJsdWVTY2FsZTsgc2ltaWxhciB0byBBZGp1c3RCbHVlU2NhbGUoKSBpbiBjb3JldHlwZSAqLworICAgIC8qIGBiY3NldHVwLmMnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggbWF4Wm9uZUhlaWdodCA+IDAgKQorICAgIHsKKyAgICAgIGlmICggYmx1ZXMtPmJsdWVTY2FsZSA+IEZUX0RpdkZpeCggY2YyX2ludFRvRml4ZWQoIDEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Wm9uZUhlaWdodCApICkKKyAgICAgIHsKKyAgICAgICAgLyogY2xhbXAgYXQgbWF4aW11bSBzY2FsZSAqLworICAgICAgICBibHVlcy0+Ymx1ZVNjYWxlID0gRlRfRGl2Rml4KCBjZjJfaW50VG9GaXhlZCggMSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhab25lSGVpZ2h0ICk7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBUT0RPOiBSZXZpc2l0IHRoZSBidWcgZml4IGZvciA2MTM0NDguICBUaGUgbWluaW11bSBzY2FsZQorICAgICAgICogICAgICAgcmVxdWlyZW1lbnQgY2F0Y2hlcyBhIG51bWJlciBvZiBsaWJyYXJ5IGZvbnRzLiAgRm9yCisgICAgICAgKiAgICAgICBleGFtcGxlLCB3aXRoIGRlZmF1bHQgQmx1ZVNjYWxlICguMDM5NjI1KSBhbmQgMC40IG1pbmltdW0sCisgICAgICAgKiAgICAgICB0aGUgdGVzdCBiZWxvdyBjYXRjaGVzIGFueSBmb250IHdpdGggbWF4Wm9uZUhlaWdodCA8IDEwLjEuCisgICAgICAgKiAgICAgICBUaGVyZSBhcmUgbGlicmFyeSBmb250cyByYW5naW5nIGZyb20gMiB0byAxMCB0aGF0IGdldAorICAgICAgICogICAgICAgY2F1Z2h0LCBpbmNsdWRpbmcgZS5nLiwgRXVyb3N0aWxlIExUIFN0ZCBNZWRpdW0gd2l0aAorICAgICAgICogICAgICAgbWF4Wm9uZUhlaWdodCBvZiA2LgorICAgICAgICoKKyAgICAgICAqLworI2lmIDAKKyAgICAgIGlmICggYmx1ZVNjYWxlIDwgLjQgLyBtYXhab25lSGVpZ2h0ICkKKyAgICAgIHsKKyAgICAgICAgdGV0cmFwaGlsaWFfYXNzZXJ0KCAwICk7CisgICAgICAgIC8qIGNsYW1wIGF0IG1pbmltdW0gc2NhbGUsIHBlciBidWcgMDYxMzQ0OCBmaXggKi8KKyAgICAgICAgYmx1ZVNjYWxlID0gLjQgLyBtYXhab25lSGVpZ2h0OworICAgICAgfQorI2VuZGlmCisKKyAgICB9CisKKyAgICAvKgorICAgICAqIFN1cHByZXNzIG92ZXJzaG9vdCBhbmQgYm9vc3QgYmx1ZSB6b25lcyBhdCBzbWFsbCBzaXplcy4gIEJvb3N0CisgICAgICogYW1vdW50IHZhcmllcyBsaW5lYXJseSBmcm9tIDAuNSBwaXhlbCBuZWFyIDAgdG8gMCBwaXhlbCBhdAorICAgICAqIGJsdWVTY2FsZSBjdXRvZmYuCisgICAgICogTm90ZTogVGhpcyBib29zdCBhbW91bnQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvcmV0eXBlIGhldXJpc3RpYy4KKyAgICAgKgorICAgICAqLworCisgICAgaWYgKCBibHVlcy0+c2NhbGUgPCBibHVlcy0+Ymx1ZVNjYWxlICkKKyAgICB7CisgICAgICBibHVlcy0+c3VwcHJlc3NPdmVyc2hvb3QgPSBUUlVFOworCisgICAgICAvKiBDaGFuZ2Ugcm91bmRpbmcgdGhyZXNob2xkIGZvciBgZHNGbGF0RWRnZScuICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogTm90ZTogY29uc3RhbnQgY2hhbmdlZCBmcm9tIDAuNSB0byAwLjYgdG8gYXZvaWQgYSBwcm9ibGVtIHdpdGggKi8KKyAgICAgIC8qICAgICAgIDEwcHBlbSBBcmlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGJsdWVzLT5ib29zdCA9IGNmMl9mbG9hdFRvRml4ZWQoIC42ICkgLQorICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGNmMl9mbG9hdFRvRml4ZWQgKCAuNiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT5zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+Ymx1ZVNjYWxlICk7CisgICAgICBpZiAoIGJsdWVzLT5ib29zdCA+IDB4N0ZGRiApCisgICAgICB7CisgICAgICAgIC8qIGJvb3N0IG11c3QgcmVtYWluIGxlc3MgdGhhbiAwLjUsIG9yIGJhc2VsaW5lIGNvdWxkIGdvIG5lZ2F0aXZlICovCisgICAgICAgIGJsdWVzLT5ib29zdCA9IDB4N0ZGRjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBib29zdCBhbmQgZGFya2VuaW5nIGhhdmUgc2ltaWxhciBlZmZlY3RzOyBkb24ndCBkbyBib3RoICovCisgICAgaWYgKCBmb250LT5zdGVtRGFya2VuZWQgKQorICAgICAgYmx1ZXMtPmJvb3N0ID0gMDsKKworICAgIC8qIHNldCBkZXZpY2Ugc3BhY2UgYWxpZ25tZW50IGZvciBlYWNoIHpvbmU7ICAgICovCisgICAgLyogYXBwbHkgYm9vc3QgYW1vdW50IGJlZm9yZSByb3VuZGluZyBmbGF0IGVkZ2UgKi8KKworICAgIGZvciAoIGkgPSAwOyBpIDwgYmx1ZXMtPmNvdW50OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggYmx1ZXMtPnpvbmVbaV0uYm90dG9tWm9uZSApCisgICAgICAgIGJsdWVzLT56b25lW2ldLmRzRmxhdEVkZ2UgPSBjZjJfZml4ZWRSb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT56b25lW2ldLmNzRmxhdEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnNjYWxlICkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+Ym9vc3QgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgYmx1ZXMtPnpvbmVbaV0uZHNGbGF0RWRnZSA9IGNmMl9maXhlZFJvdW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbaV0uY3NGbGF0RWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+c2NhbGUgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT5ib29zdCApOworICAgIH0KKyAgfQorCisKKyAgLyoKKyAgICogQ2hlY2sgd2hldGhlciBgc3RlbUhpbnQnIGlzIGNhcHR1cmVkIGJ5IG9uZSBvZiB0aGUgYmx1ZSB6b25lcy4KKyAgICoKKyAgICogWmVybywgb25lIG9yIGJvdGggZWRnZXMgbWF5IGJlIHZhbGlkOyBvbmx5IHZhbGlkIGVkZ2VzIGNhbiBiZQorICAgKiBjYXB0dXJlZC4gIEZvciBjb21wYXRpYmlsaXR5IHdpdGggQ29vbFR5cGUsIHNlYXJjaCB0b3AgYW5kIGJvdHRvbQorICAgKiB6b25lcyBpbiB0aGUgc2FtZSBwYXNzIChzZWUgYEJsdWVMb2NrJykuICBJZiBhIGhpbnQgaXMgY2FwdHVyZWQsCisgICAqIHJldHVybiB0cnVlIGFuZCBwb3NpdGlvbiB0aGUgZWRnZShzKSBpbiBvbmUgb2YgMyB3YXlzOgorICAgKgorICAgKiAgMSkgSWYgYEJsdWVTY2FsZScgc3VwcHJlc3NlcyBvdmVyc2hvb3QsIHBvc2l0aW9uIHRoZSBjYXB0dXJlZCBlZGdlCisgICAqICAgICBhdCB0aGUgZmxhdCBlZGdlIG9mIHRoZSB6b25lLgorICAgKiAgMikgSWYgb3ZlcnNob290IGlzIG5vdCBzdXBwcmVzc2VkIGFuZCBgQmx1ZVNoaWZ0JyByZXF1aXJlcworICAgKiAgICAgb3ZlcnNob290LCBwb3NpdGlvbiB0aGUgY2FwdHVyZWQgZWRnZSBhIG1pbmltdW0gb2YgMSBkZXZpY2UgcGl4ZWwKKyAgICogICAgIGZyb20gdGhlIGZsYXQgZWRnZS4KKyAgICogIDMpIElmIG92ZXJzaG9vdCBpcyBub3Qgc3VwcHJlc3NlZCBvciByZXF1aXJlZCwgcG9zaXRpb24gdGhlIGNhcHR1cmVkCisgICAqICAgICBlZGdlIGF0IHRoZSBuZWFyZXN0IGRldmljZSBwaXhlbC4KKyAgICoKKyAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGNmMl9ibHVlc19jYXB0dXJlKCBjb25zdCBDRjJfQmx1ZXMgIGJsdWVzLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0hpbnQgICAgICAgICBib3R0b21IaW50RWRnZSwKKyAgICAgICAgICAgICAgICAgICAgIENGMl9IaW50ICAgICAgICAgdG9wSGludEVkZ2UgKQorICB7CisgICAgLyogVE9ETzogdmFsaWRhdGU/ICovCisgICAgQ0YyX0ZpeGVkICBjc0Z1enogPSBibHVlcy0+Ymx1ZUZ1eno7CisKKyAgICAvKiBuZXcgcG9zaXRpb24gb2YgY2FwdHVyZWQgZWRnZSAqLworICAgIENGMl9GaXhlZCAgZHNOZXc7CisKKyAgICAvKiBhbW91bnQgdGhhdCBoaW50IGlzIG1vdmVkIHdoZW4gcG9zaXRpb25lZCAqLworICAgIENGMl9GaXhlZCAgZHNNb3ZlID0gMDsKKworICAgIEZUX0Jvb2wgICBjYXB0dXJlZCA9IEZBTFNFOworICAgIENGMl9VSW50ICBpOworCisKKyAgICAvKiBhc3NlcnQgZWRnZSBmbGFncyBhcmUgY29uc2lzdGVudCAqLworICAgIEZUX0FTU0VSVCggIWNmMl9oaW50X2lzVG9wKCBib3R0b21IaW50RWRnZSApICYmCisgICAgICAgICAgICAgICAhY2YyX2hpbnRfaXNCb3R0b20oIHRvcEhpbnRFZGdlICkgKTsKKworICAgIC8qIFRPRE86IHNlYXJjaCBvbmNlIHdpdGhvdXQgYmx1ZSBmdXp6IGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29yZXR5cGU/ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBibHVlcy0+Y291bnQ7IGkrKyApCisgICAgeworICAgICAgaWYgKCBibHVlcy0+em9uZVtpXS5ib3R0b21ab25lICAgICAgICAgICAmJgorICAgICAgICAgICBjZjJfaGludF9pc0JvdHRvbSggYm90dG9tSGludEVkZ2UgKSApCisgICAgICB7CisgICAgICAgIGlmICggKCBibHVlcy0+em9uZVtpXS5jc0JvdHRvbUVkZ2UgLSBjc0Z1enogKSA8PQorICAgICAgICAgICAgICAgYm90dG9tSGludEVkZ2UtPmNzQ29vcmQgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBib3R0b21IaW50RWRnZS0+Y3NDb29yZCA8PQorICAgICAgICAgICAgICAgKCBibHVlcy0+em9uZVtpXS5jc1RvcEVkZ2UgKyBjc0Z1enogKSAgICAgKQorICAgICAgICB7CisgICAgICAgICAgLyogYm90dG9tIGVkZ2UgY2FwdHVyZWQgYnkgYm90dG9tIHpvbmUgKi8KKworICAgICAgICAgIGlmICggYmx1ZXMtPnN1cHByZXNzT3ZlcnNob290ICkKKyAgICAgICAgICAgIGRzTmV3ID0gYmx1ZXMtPnpvbmVbaV0uZHNGbGF0RWRnZTsKKworICAgICAgICAgIGVsc2UgaWYgKCAoIGJsdWVzLT56b25lW2ldLmNzVG9wRWRnZSAtIGJvdHRvbUhpbnRFZGdlLT5jc0Nvb3JkICkgPj0KKyAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+Ymx1ZVNoaWZ0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBndWFyYW50ZWUgbWluaW11bSBvZiAxIHBpeGVsIG92ZXJzaG9vdCAqLworICAgICAgICAgICAgZHNOZXcgPSBGVF9NSU4oCisgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkUm91bmQoIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkICksCisgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbaV0uZHNGbGF0RWRnZSAtIGNmMl9pbnRUb0ZpeGVkKCAxICkgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogc2ltcGx5IHJvdW5kIGNhcHR1cmVkIGVkZ2UgKi8KKyAgICAgICAgICAgIGRzTmV3ID0gY2YyX2ZpeGVkUm91bmQoIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZHNNb3ZlICAgPSBkc05ldyAtIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkOworICAgICAgICAgIGNhcHR1cmVkID0gVFJVRTsKKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggIWJsdWVzLT56b25lW2ldLmJvdHRvbVpvbmUgJiYgY2YyX2hpbnRfaXNUb3AoIHRvcEhpbnRFZGdlICkgKQorICAgICAgeworICAgICAgICBpZiAoICggYmx1ZXMtPnpvbmVbaV0uY3NCb3R0b21FZGdlIC0gY3NGdXp6ICkgPD0KKyAgICAgICAgICAgICAgIHRvcEhpbnRFZGdlLT5jc0Nvb3JkICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgdG9wSGludEVkZ2UtPmNzQ29vcmQgPD0KKyAgICAgICAgICAgICAgICggYmx1ZXMtPnpvbmVbaV0uY3NUb3BFZGdlICsgY3NGdXp6ICkgICAgICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHRvcCBlZGdlIGNhcHR1cmVkIGJ5IHRvcCB6b25lICovCisKKyAgICAgICAgICBpZiAoIGJsdWVzLT5zdXBwcmVzc092ZXJzaG9vdCApCisgICAgICAgICAgICBkc05ldyA9IGJsdWVzLT56b25lW2ldLmRzRmxhdEVkZ2U7CisKKyAgICAgICAgICBlbHNlIGlmICggKCB0b3BIaW50RWRnZS0+Y3NDb29yZCAtIGJsdWVzLT56b25lW2ldLmNzQm90dG9tRWRnZSApID49CisgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPmJsdWVTaGlmdCApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogZ3VhcmFudGVlIG1pbmltdW0gb2YgMSBwaXhlbCBvdmVyc2hvb3QgKi8KKyAgICAgICAgICAgIGRzTmV3ID0gRlRfTUFYKAorICAgICAgICAgICAgICAgICAgICAgIGNmMl9maXhlZFJvdW5kKCB0b3BIaW50RWRnZS0+ZHNDb29yZCApLAorICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT56b25lW2ldLmRzRmxhdEVkZ2UgKyBjZjJfaW50VG9GaXhlZCggMSApICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNpbXBseSByb3VuZCBjYXB0dXJlZCBlZGdlICovCisgICAgICAgICAgICBkc05ldyA9IGNmMl9maXhlZFJvdW5kKCB0b3BIaW50RWRnZS0+ZHNDb29yZCApOworICAgICAgICAgIH0KKworICAgICAgICAgIGRzTW92ZSAgID0gZHNOZXcgLSB0b3BIaW50RWRnZS0+ZHNDb29yZDsKKyAgICAgICAgICBjYXB0dXJlZCA9IFRSVUU7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmICggY2FwdHVyZWQgKQorICAgIHsKKyAgICAgIC8qIG1vdmUgYm90aCBlZGdlcyBhbmQgZmxhZyB0aGVtIGBsb2NrZWQnICovCisgICAgICBpZiAoIGNmMl9oaW50X2lzVmFsaWQoIGJvdHRvbUhpbnRFZGdlICkgKQorICAgICAgeworICAgICAgICBib3R0b21IaW50RWRnZS0+ZHNDb29yZCArPSBkc01vdmU7CisgICAgICAgIGNmMl9oaW50X2xvY2soIGJvdHRvbUhpbnRFZGdlICk7CisgICAgICB9CisKKyAgICAgIGlmICggY2YyX2hpbnRfaXNWYWxpZCggdG9wSGludEVkZ2UgKSApCisgICAgICB7CisgICAgICAgIHRvcEhpbnRFZGdlLT5kc0Nvb3JkICs9IGRzTW92ZTsKKyAgICAgICAgY2YyX2hpbnRfbG9jayggdG9wSGludEVkZ2UgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2FwdHVyZWQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmJsdWVzLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJibHVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzhmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJibHVlcy5oCkBAIC0wLDAgKzEsMTg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZjJibHVlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQWRvYmUncyBjb2RlIGZvciBoYW5kbGluZyBCbHVlIFpvbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCisvKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLworLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KKy8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCisvKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KKy8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCisvKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLworLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KKy8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCisvKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLworLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KKy8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCisvKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLworLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KKy8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCisvKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLworLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KKy8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCisvKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLworLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLworLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCisvKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKgorICAgKiBBIGBDRjJfQmx1ZXMnIG9iamVjdCBzdG9yZXMgdGhlIGJsdWUgem9uZXMgKGhvcml6b250YWwgYWxpZ25tZW50CisgICAqIHpvbmVzKSBvZiBhIGZvbnQuICBUaGVzZSBhcmUgc3BlY2lmaWVkIGluIHRoZSBDRkYgcHJpdmF0ZSBkaWN0aW9uYXJ5CisgICAqIGJ5IGBCbHVlVmFsdWVzJywgYE90aGVyQmx1ZXMnLCBgRmFtaWx5Qmx1ZXMnLCBhbmQgYEZhbWlseU90aGVyQmx1ZXMnLgorICAgKiBFYWNoIHpvbmUgaXMgZGVmaW5lZCBieSBhIHRvcCBhbmQgYm90dG9tIGVkZ2UgaW4gY2hhcmFjdGVyIHNwYWNlLgorICAgKiBGdXJ0aGVyLCBlYWNoIHpvbmUgaXMgZWl0aGVyIGEgdG9wIHpvbmUgb3IgYSBib3R0b20gem9uZSwgYXMgcmVjb3JkZWQKKyAgICogYnkgYGJvdHRvbVpvbmUnLgorICAgKgorICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYEJsdWVWYWx1ZXMnIGFuZCBgRmFtaWx5Qmx1ZXMnIGlzIDcgZWFjaC4KKyAgICogSG93ZXZlciwgdGhlc2UgYXJlIGNvbWJpbmVkIHRvIHByb2R1Y2UgYSB0b3RhbCBvZiA3IHpvbmVzLgorICAgKiBTaW1pbGFybHksIHRoZSBtYXhpbXVtIG51bWJlciBvZiBgT3RoZXJCbHVlcycgYW5kIGBGYW1pbHlPdGhlckJsdWVzJworICAgKiBpcyA1IGFuZCB0aGVzZSBhcmUgY29tYmluZWQgdG8gcHJvZHVjZSBhbiBhZGRpdGlvbmFsIDUgem9uZXMuCisgICAqCisgICAqIEJsdWUgem9uZXMgYXJlIHVzZWQgdG8gYGNhcHR1cmUnIGhpbnRzIGFuZCBmb3JjZSB0aGVtIHRvIGEgY29tbW9uCisgICAqIGFsaWdubWVudCBwb2ludC4gIFRoaXMgYWxpZ25tZW50IGlzIHJlY29yZGVkIGluIGRldmljZSBzcGFjZSBpbgorICAgKiBgZHNGbGF0RWRnZScuICBFeGNlcHQgZm9yIHRoaXMgdmFsdWUsIGEgYENGMl9CbHVlcycgb2JqZWN0IGNvdWxkIGJlCisgICAqIGNvbnN0cnVjdGVkIGluZGVwZW5kZW50bHkgb2Ygc2NhbGluZy4gIENvbnN0cnVjdGlvbiBtYXkgb2NjdXIgb25jZQorICAgKiB0aGUgbWF0cml4IGlzIGtub3duLiAgT3RoZXIgZmVhdHVyZXMgaW1wbGVtZW50ZWQgaW4gdGhlIENhcHR1cmUKKyAgICogbWV0aG9kIGFyZSBvdmVyc2hvb3Qgc3VwcHJlc3Npb24sIG92ZXJzaG9vdCBlbmZvcmNlbWVudCwgYW5kIEJsdWUKKyAgICogQm9vc3QuCisgICAqCisgICAqIENhcHR1cmUgaXMgZGV0ZXJtaW5lZCBieSBgQmx1ZVZhbHVlcycgYW5kIGBPdGhlckJsdWVzJywgYnV0IHRoZQorICAgKiBhbGlnbm1lbnQgcG9pbnQgbWF5IGJlIGFkanVzdGVkIHRvIHRoZSBzY2FsZWQgZmxhdCBlZGdlIG9mCisgICAqIGBGYW1pbHlCbHVlcycgb3IgYEZhbWlseU90aGVyQmx1ZXMnLiAgTm8gYWxpZ25tZW50IGlzIGRvbmUgdG8gdGhlCisgICAqIGN1cnZlZCBlZGdlIG9mIGEgem9uZS4KKyAgICoKKyAgICovCisKKworI2lmbmRlZiBfX0NGMkJMVUVTX0hfXworI2RlZmluZSBfX0NGMkJMVUVTX0hfXworCisKKyNpbmNsdWRlICJjZjJnbHVlLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKgorICAgKiBgQ0YyX0hpbnQnIGlzIHNoYXJlZCBieSBgY2YyaGludHMuaCcgYW5kCisgICAqIGBjZjJibHVlcy5oJywgYnV0IGBjZjJibHVlcy5oJyBkZXBlbmRzIG9uCisgICAqIGBjZjJoaW50cy5oJywgc28gZGVmaW5lIGl0IGhlcmUuICBOb3RlOiBUaGUgdHlwZWRlZiBpcyBpbgorICAgKiBgY2YyZ2x1ZS5oJy4KKyAgICoKKyAgICovCisgIGVudW0KKyAgeworICAgIENGMl9HaG9zdEJvdHRvbSA9IDB4MSwgIC8qIGEgc2luZ2xlIGJvdHRvbSBlZGdlICAgICAgICAgICAqLworICAgIENGMl9HaG9zdFRvcCAgICA9IDB4MiwgIC8qIGEgc2luZ2xlIHRvcCBlZGdlICAgICAgICAgICAgICAqLworICAgIENGMl9QYWlyQm90dG9tICA9IDB4NCwgIC8qIHRoZSBib3R0b20gZWRnZSBvZiBhIHN0ZW0gaGludCAqLworICAgIENGMl9QYWlyVG9wICAgICA9IDB4OCwgIC8qIHRoZSB0b3AgZWRnZSBvZiBhIHN0ZW0gaGludCAgICAqLworICAgIENGMl9Mb2NrZWQgICAgICA9IDB4MTAsIC8qIHRoaXMgZWRnZSBoYXMgYmVlbiBhbGlnbmVkICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ5IGEgYmx1ZSB6b25lICAgICAgICAgICAgICAgICAqLworICAgIENGMl9TeW50aGV0aWMgICA9IDB4MjAgIC8qIHRoaXMgZWRnZSB3YXMgc3ludGhlc2l6ZWQgICAgICAqLworICB9OworCisKKyAgLyoKKyAgICogRGVmYXVsdCB2YWx1ZSBmb3IgT1MvMiB0eXBvQXNjZW5kZXIvRGVzY2VuZGVyIHdoZW4gdGhlaXIgZGlmZmVyZW5jZQorICAgKiBpcyBub3QgZXF1YWwgdG8gYHVuaXRzUGVyRW0nLiAgVGhlIGRlZmF1bHQgaXMgYmFzZWQgb24gLTI1MCBhbmQgMTEwMAorICAgKiBpbiBgQ0YyX0JsdWVzJywgYXNzdW1pbmcgMTAwMCB1bml0cyBwZXIgZW0gaGVyZS4KKyAgICoKKyAgICovCisgIGVudW0KKyAgeworICAgIENGMl9JQ0ZfVG9wICAgID0gY2YyX2ludFRvRml4ZWQoICA4ODAgKSwKKyAgICBDRjJfSUNGX0JvdHRvbSA9IGNmMl9pbnRUb0ZpeGVkKCAtMTIwICkKKyAgfTsKKworCisgIC8qCisgICAqIENvbnN0YW50IHVzZWQgZm9yIGhpbnQgYWRqdXN0bWVudCBhbmQgZm9yIHN5bnRoZXRpYyBlbSBib3ggaGludAorICAgKiBwbGFjZW1lbnQuCisgICAqLworI2RlZmluZSBDRjJfTUlOX0NPVU5URVIgIGNmMl9mbG9hdFRvRml4ZWQoIDAuNSApCisKKworICAvKiBzaGFyZWQgdHlwZWRlZiBpcyBpbiBjZjJnbHVlLmggKi8KKyAgc3RydWN0ICBDRjJfSGludFJlY18KKyAgeworICAgIENGMl9VSW50ICBmbGFnczsgIC8qIGF0dHJpYnV0ZXMgb2YgdGhlIGVkZ2UgICAgICAgICAgICAqLworICAgIHNpemVfdCAgICBpbmRleDsgIC8qIGluZGV4IGluIG9yaWdpbmFsIHN0ZW0gaGludCBhcnJheSAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIChpZiBub3Qgc3ludGhldGljKSAgICAgICAgICAgICAgICAqLworICAgIENGMl9GaXhlZCAgY3NDb29yZDsKKyAgICBDRjJfRml4ZWQgIGRzQ29vcmQ7CisgICAgQ0YyX0ZpeGVkICBzY2FsZTsKKyAgfTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfQmx1ZVJlY18KKyAgeworICAgIENGMl9GaXhlZCAgY3NCb3R0b21FZGdlOworICAgIENGMl9GaXhlZCAgY3NUb3BFZGdlOworICAgIENGMl9GaXhlZCAgY3NGbGF0RWRnZTsgLyogbWF5IGJlIGZyb20gZWl0aGVyIGxvY2FsIG9yIEZhbWlseSB6b25lcyAqLworICAgIENGMl9GaXhlZCAgZHNGbGF0RWRnZTsgLyogdG9wIGVkZ2Ugb2YgYm90dG9tIHpvbmUgb3IgYm90dG9tIGVkZ2UgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2YgdG9wIHpvbmUgKHJvdW5kZWQpICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgIGJvdHRvbVpvbmU7CisKKyAgfSBDRjJfQmx1ZVJlYzsKKworCisgIC8qIG1heCB0b3RhbCBibHVlIHpvbmVzIGlzIDEyICovCisgIGVudW0KKyAgeworICAgIENGMl9NQVhfQkxVRVMgICAgICA9IDcsCisgICAgQ0YyX01BWF9PVEhFUkJMVUVTID0gNQorICB9OworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGMl9CbHVlc1JlY18KKyAgeworICAgIENGMl9GaXhlZCAgc2NhbGU7CisgICAgQ0YyX1VJbnQgICBjb3VudDsKKyAgICBGVF9Cb29sICAgIHN1cHByZXNzT3ZlcnNob290OworICAgIEZUX0Jvb2wgICAgZG9FbUJveEhpbnRzOworCisgICAgQ0YyX0ZpeGVkICBibHVlU2NhbGU7CisgICAgQ0YyX0ZpeGVkICBibHVlU2hpZnQ7CisgICAgQ0YyX0ZpeGVkICBibHVlRnV6ejsKKworICAgIENGMl9GaXhlZCAgYm9vc3Q7CisKKyAgICBDRjJfSGludFJlYyAgZW1Cb3hUb3BFZGdlOworICAgIENGMl9IaW50UmVjICBlbUJveEJvdHRvbUVkZ2U7CisKKyAgICBDRjJfQmx1ZVJlYyAgem9uZVtDRjJfTUFYX0JMVUVTICsgQ0YyX01BWF9PVEhFUkJMVUVTXTsKKworICB9IENGMl9CbHVlc1JlYywgKkNGMl9CbHVlczsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2JsdWVzX2luaXQoIENGMl9CbHVlcyAgYmx1ZXMsCisgICAgICAgICAgICAgICAgICBDRjJfRm9udCAgIGZvbnQgKTsKKyAgRlRfTE9DQUwoIEZUX0Jvb2wgKQorICBjZjJfYmx1ZXNfY2FwdHVyZSggY29uc3QgQ0YyX0JsdWVzICBibHVlcywKKyAgICAgICAgICAgICAgICAgICAgIENGMl9IaW50ICAgICAgICAgYm90dG9tSGludEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICBDRjJfSGludCAgICAgICAgIHRvcEhpbnRFZGdlICk7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0NGMkJMVUVTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyZXJyb3IuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1OTVhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmVycm9yLmMKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyZXJyb3IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgImNmMmVycm9yLmgiCisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfc2V0RXJyb3IoIEZUX0Vycm9yKiAgZXJyb3IsCisgICAgICAgICAgICAgICAgRlRfRXJyb3IgICB2YWx1ZSApCisgIHsKKyAgICBpZiAoIGVycm9yICYmICplcnJvciA9PSAwICkKKyAgICAgICplcnJvciA9IHZhbHVlOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJlcnJvci5oIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDUzZWJjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyZXJyb3IuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRjJFUlJPUl9IX18KKyNkZWZpbmUgX19DRjJFUlJPUl9IX18KKworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBDRjJfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NGMgorCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSAiY2YyZnQuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qCisgICAqIEEgcG9vci1tYW4gZXJyb3IgZmFjaWxpdHkuCisgICAqCisgICAqIFRoaXMgY29kZSBiZWluZyB3cml0dGVuIGluIHZhbmlsbGEgQywgZG9lc24ndCBoYXZlIHRoZSBsdXh1cnkgb2YgYQorICAgKiBsYW5ndWFnZS1zdXBwb3J0ZWQgZXhjZXB0aW9uIG1lY2hhbmlzbSBzdWNoIGFzIHRoZSBvbmUgYXZhaWxhYmxlIGluCisgICAqIEphdmEuICBJbnN0ZWFkLCB3ZSBhcmUgc3R1Y2sgd2l0aCB1c2luZyBlcnJvciBjb2RlcyB0aGF0IG11c3QgYmUKKyAgICogY2FyZWZ1bGx5IG1hbmFnZWQgYW5kIHByZXNlcnZlZC4gIEhvd2V2ZXIsIGl0IGlzIGNvbnZlbmllbnQgZm9yIHVzIHRvCisgICAqIG1vZGVsIG91ciBlcnJvciBtZWNoYW5pc20gb24gYSBKYXZhLWxpa2UgZXhjZXB0aW9uIG1lY2hhbmlzbS4KKyAgICogV2hlbiB3ZSBhc3NpZ24gYW4gZXJyb3IgY29kZSB3ZSBhcmUgdGh1cyBgdGhyb3dpbmcnIGFuIGVycm9yLgorICAgKgorICAgKiBUaGUgcGVyc2VydmF0aW9uIG9mIGFuIGVycm9yIGNvZGUgaXMgZG9uZSBieSBjb2RpbmcgY29udmVudGlvbi4KKyAgICogVXBvbiBhIGZ1bmN0aW9uIGNhbGwgaWYgdGhlIGVycm9yIGNvZGUgaXMgYW55dGhpbmcgb3RoZXIgdGhhbgorICAgKiBgRlRfRXJyX09rJywgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLCB3ZQorICAgKiB3aWxsIHJldHVybiB3aXRob3V0IGFsdGVyaW5nIHRoYXQgZXJyb3IuICBUaGlzIHdpbGwgYWxsb3cgdGhlCisgICAqIGVycm9yIHRvIHByb3BvZ2F0ZSBhbmQgYmUgaGFuZGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gaW4KKyAgICogdGhlIGNvZGUuCisgICAqCisgICAqIFRoaXMgYWxsb3dzIGEgc3R5bGUgb2YgY29kZSB3aGVyZSB0aGUgZXJyb3IgY29kZSBpcyBpbml0aWFsaXplZAorICAgKiB1cCBmcm9udCBhbmQgYSBibG9jayBvZiBjYWxscyBhcmUgbWFkZSB3aXRoIHRoZSBlcnJvciBjb2RlIG9ubHkKKyAgICogYmVpbmcgY2hlY2tlZCBhZnRlciB0aGUgYmxvY2suICBJZiBhIG5ldyBlcnJvciBvY2N1cnMsIHRoZSBvcmlnaW5hbAorICAgKiBlcnJvciB3aWxsIGJlIHByZXNlcnZlZCBhbmQgYSBmdW5jdGlvbmFsIG5vLW9wIHNob3VsZCByZXN1bHQgaW4gYW55CisgICAqIHN1YnNlcXVlbnQgZnVuY3Rpb24gdGhhdCBoYXMgYW4gaW5pdGlhbCBlcnJvciBjb2RlIG5vdCBlcXVhbCB0bworICAgKiBgRlRfRXJyX09rJy4KKyAgICoKKyAgICogRXJyb3JzIGFyZSBlbmNvZGVkIGJ5IGNhbGxpbmcgdGhlIGBGVF9USFJPVycgbWFjcm8uICBGb3IgZXhhbXBsZSwKKyAgICoKKyAgICogeworICAgKiAgIEZUX0Vycm9yICBlOworICAgKgorICAgKgorICAgKiAgIC4uLgorICAgKiAgIGUgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgKiB9CisgICAqCisgICAqLworCisKKyAgLyogU2V0IGVycm9yIGNvZGUgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlLiAqLworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zZXRFcnJvciggRlRfRXJyb3IqICBlcnJvciwKKyAgICAgICAgICAgICAgICBGVF9FcnJvciAgIHZhbHVlICk7CisKKworICAvKgorICAgKiBBIG1hY3JvIHRoYXQgY29uZGl0aW9uYWxseSBzZXRzIGFuIGVycm9yIGNvZGUuCisgICAqCisgICAqIFRoaXMgbWFjcm8gd2lsbCBmaXJzdCBjaGVjayB3aGV0aGVyIGBlcnJvcicgaXMgc2V0OworICAgKiBpZiBub3QsIGl0IHdpbGwgc2V0IGl0IHRvIGBlJy4KKyAgICoKKyAgKi8KKyNkZWZpbmUgQ0YyX1NFVF9FUlJPUiggZXJyb3IsIGUgKSAgICAgICAgICAgICAgXAorICAgICAgICAgIGNmMl9zZXRFcnJvciggZXJyb3IsIEZUX1RIUk9XKCBlICkgKQorCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRjJFUlJPUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZpeGVkLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmaXhlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDlmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmaXhlZC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMmZpeGVkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBZG9iZSdzIGNvZGUgZm9yIEZpeGVkIFBvaW50IE1hdGhlbWF0aWNzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0YyRklYRURfSF9fCisjZGVmaW5lIF9fQ0YyRklYRURfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKiByYXN0ZXJpemVyIGludGVnZXIgYW5kIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgbXVzdCBiZSAzMi1iaXQgKi8KKworI2RlZmluZSAgIENGMl9GaXhlZCAgQ0YyX0YxNkRvdDE2CisgIHR5cGVkZWYgRlRfSW50MzIgICBDRjJfRnJhYzsgICAvKiAyLjMwIGZpeGVkIHBvaW50ICovCisKKworI2RlZmluZSBDRjJfRklYRURfTUFYICAgICAgKCAoQ0YyX0ZpeGVkKTB4N0ZGRkZGRkZMICkKKyNkZWZpbmUgQ0YyX0ZJWEVEX01JTiAgICAgICggKENGMl9GaXhlZCkweDgwMDAwMDAwTCApCisjZGVmaW5lIENGMl9GSVhFRF9PTkUgICAgICAweDEwMDAwTAorI2RlZmluZSBDRjJfRklYRURfRVBTSUxPTiAgMHgwMDAxCisKKyAgLyogaW4gQyA4OSwgbGVmdCBhbmQgcmlnaHQgc2hpZnQgb2YgbmVnYXRpdmUgbnVtYmVycyBpcyAgKi8KKyAgLyogaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgYmVoYXZpb3VyIGluIHRoZSBnZW5lcmFsIGNhc2UgKi8KKworI2RlZmluZSBjZjJfaW50VG9GaXhlZCggaSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoRlRfVUludDMyKShpKSA8PCAxNiApICkKKyNkZWZpbmUgY2YyX2ZpeGVkVG9JbnQoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoRlRfU2hvcnQpKCAoIChGVF9VSW50MzIpKHgpICsgMHg4MDAwVSApID4+IDE2ICkgKQorI2RlZmluZSBjZjJfZml4ZWRSb3VuZCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoIChGVF9VSW50MzIpKHgpICsgMHg4MDAwVSApICYgMHhGRkZGMDAwMFVMICkgKQorI2RlZmluZSBjZjJfZmxvYXRUb0ZpeGVkKCBmICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoZikgKiA2NTUzNi4wICsgMC41ICkgKQorI2RlZmluZSBjZjJfZml4ZWRBYnMoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoICh4KSA8IDAgPyAtKHgpIDogKHgpICkKKyNkZWZpbmUgY2YyX2ZpeGVkRmxvb3IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoQ0YyX0ZpeGVkKSggKEZUX1VJbnQzMikoeCkgJiAweEZGRkYwMDAwVUwgKSApCisjZGVmaW5lIGNmMl9maXhlZEZyYWN0aW9uKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKHgpIC0gY2YyX2ZpeGVkRmxvb3IoIHggKSApCisjZGVmaW5lIGNmMl9mcmFjVG9GaXhlZCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKHgpIDwgMCA/IC0oICggLSh4KSArIDB4MjAwMCApID4+IDE0ICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgOiAgKCAoICAoeCkgKyAweDIwMDAgKSA+PiAxNCApICkKKworCisgIC8qIHNpZ25lZCBudW1lcmljIHR5cGVzICovCisgIHR5cGVkZWYgZW51bSAgQ0YyX051bWJlclR5cGVfCisgIHsKKyAgICBDRjJfTnVtYmVyRml4ZWQsICAgIC8qIDE2LjE2ICovCisgICAgQ0YyX051bWJlckZyYWMsICAgICAvKiAgMi4zMCAqLworICAgIENGMl9OdW1iZXJJbnQgICAgICAgLyogMzIuMCAgKi8KKworICB9IENGMl9OdW1iZXJUeXBlOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogIF9fQ0YyRklYRURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmb250LmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmb250LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZDM0OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZvbnQuYwpAQCAtMCwwICsxLDUxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyZm9udC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZm9udCBpbnN0YW5jZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisKKyNpbmNsdWRlICJjZjJmdC5oIgorCisjaW5jbHVkZSAiY2YyZ2x1ZS5oIgorI2luY2x1ZGUgImNmMmZvbnQuaCIKKyNpbmNsdWRlICJjZjJlcnJvci5oIgorI2luY2x1ZGUgImNmMmludHJwLmgiCisKKworICAvKiBDb21wdXRlIGEgc3RlbSBkYXJrZW5pbmcgYW1vdW50IGluIGNoYXJhY3RlciBzcGFjZS4gKi8KKyAgc3RhdGljIHZvaWQKKyAgY2YyX2NvbXB1dGVEYXJrZW5pbmcoIENGMl9GaXhlZCAgIGVtUmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICBwcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgc3RlbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgZGFya2VuQW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgYm9sZGVuQW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgc3RlbURhcmtlbmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgICAgZGFya2VuUGFyYW1zICkKKyAgeworICAgIC8qCisgICAgICogVG90YWwgZGFya2VuaW5nIGFtb3VudCBpcyBjb21wdXRlZCBpbiAxMDAwIHVuaXQgY2hhcmFjdGVyIHNwYWNlCisgICAgICogdXNpbmcgdGhlIG1vZGlmaWVkIDUgcGFydCBjdXJ2ZSBhcyBBZG9iZSdzIEF2YWxvbiByYXN0ZXJpemVyLgorICAgICAqIFRoZSBkYXJrZW5pbmcgYW1vdW50IGlzIHNtYWxsZXIgZm9yIHRoaWNrZXIgc3RlbXMuCisgICAgICogSXQgYmVjb21lcyB6ZXJvIHdoZW4gdGhlIHN0ZW0gaXMgdGhpY2tlciB0aGFuIDIuMzMzIHBpeGVscy4KKyAgICAgKgorICAgICAqIEJ5IGRlZmF1bHQsIHdlIHVzZQorICAgICAqCisgICAgICogICBkYXJrZW5BbW91bnQgPSAwLjQgcGl4ZWxzICAgaWYgc2NhbGVkU3RlbSA8PSAwLjUgcGl4ZWxzLAorICAgICAqICAgZGFya2VuQW1vdW50ID0gMC4yNzUgcGl4ZWxzIGlmIDEgPD0gc2NhbGVkU3RlbSA8PSAxLjY2NyBwaXhlbHMsCisgICAgICogICBkYXJrZW5BbW91bnQgPSAwIHBpeGVsICAgICAgaWYgc2NhbGVkU3RlbSA+PSAyLjMzMyBwaXhlbHMsCisgICAgICoKKyAgICAgKiBhbmQgcGllY2V3aXNlIGxpbmVhciBpbi1iZXR3ZWVuOgorICAgICAqCisgICAgICoKKyAgICAgKiAgIGRhcmtlbmluZworICAgICAqICAgICAgIF4KKyAgICAgKiAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICh4MSx5MSkKKyAgICAgKiAgICAgICB8LS0tLS0tLS0rCisgICAgICogICAgICAgfCAgICAgICAgIFwKKyAgICAgKiAgICAgICB8ICAgICAgICAgIFwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICBcICAgICAgICAgICh4Myx5MykKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgKy0tLS0tLS0tLS0rCisgICAgICogICAgICAgfCAgICAgICAgKHgyLHkyKSAgICAgICAgIFwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLQorICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKHg0LHk0KQorICAgICAqICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ICAgc3RlbQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcworICAgICAqCisgICAgICoKKyAgICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGZvciB0aGUKKyAgICAgKiBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5OgorICAgICAqCisgICAgICogICAoeDEsIHkxKSA9ICg1MDAsIDQwMCkKKyAgICAgKiAgICh4MiwgeTIpID0gKDEwMDAsIDI3NSkKKyAgICAgKiAgICh4MywgeTMpID0gKDE2NjcsIDI3NSkKKyAgICAgKiAgICh4NCwgeTQpID0gKDIzMzMsIDApCisgICAgICoKKyAgICAgKi8KKworICAgIC8qIEludGVybmFsIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSBpbiB1bml0cyBwZXIgdGhvdXNhbmQgZm9yICovCisgICAgLyogY29udmVuaWVuY2UuIFRoZSB4IGF4aXMgaXMgc2NhbGVkIHN0ZW0gd2lkdGggaW4gICAgICAgICAgKi8KKyAgICAvKiB0aG91c2FuZHRocyBvZiBhIHBpeGVsLiBUaGF0IGlzLCAxMDAwIGlzIDEgcGl4ZWwuICAgICAgICAqLworICAgIC8qIFRoZSB5IGF4aXMgaXMgZGFya2VuaW5nIGFtb3VudCBpbiB0aG91c2FuZHRocyBvZiBhIHBpeGVsLiovCisgICAgLyogSW4gdGhlIGNvZGUsIGJlbG93LCBkaXZpZGluZyBieSBwcGVtIGFuZCAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBhZGp1c3RpbmcgZm9yIGVtUmF0aW8gY29udmVydHMgZGFya2VuQW1vdW50IHRvIGNoYXJhY3RlciAqLworICAgIC8qIHNwYWNlIChmb250IHVuaXRzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ0YyX0ZpeGVkICBzdGVtV2lkdGhQZXIxMDAwLCBzY2FsZWRTdGVtOworICAgIEZUX0ludCAgICAgbG9nQmFzZTI7CisKKworICAgICpkYXJrZW5BbW91bnQgPSAwOworCisgICAgaWYgKCBib2xkZW5BbW91bnQgPT0gMCAmJiAhc3RlbURhcmtlbmVkICkKKyAgICAgIHJldHVybjsKKworICAgIC8qIHByb3RlY3QgYWdhaW5zdCByYW5nZSBwcm9ibGVtcyBhbmQgZGl2aWRlIGJ5IHplcm8gKi8KKyAgICBpZiAoIGVtUmF0aW8gPCBjZjJfZmxvYXRUb0ZpeGVkKCAuMDEgKSApCisgICAgICByZXR1cm47CisKKyAgICBpZiAoIHN0ZW1EYXJrZW5lZCApCisgICAgeworICAgICAgRlRfSW50ICB4MSA9IGRhcmtlblBhcmFtc1swXTsKKyAgICAgIEZUX0ludCAgeTEgPSBkYXJrZW5QYXJhbXNbMV07CisgICAgICBGVF9JbnQgIHgyID0gZGFya2VuUGFyYW1zWzJdOworICAgICAgRlRfSW50ICB5MiA9IGRhcmtlblBhcmFtc1szXTsKKyAgICAgIEZUX0ludCAgeDMgPSBkYXJrZW5QYXJhbXNbNF07CisgICAgICBGVF9JbnQgIHkzID0gZGFya2VuUGFyYW1zWzVdOworICAgICAgRlRfSW50ICB4NCA9IGRhcmtlblBhcmFtc1s2XTsKKyAgICAgIEZUX0ludCAgeTQgPSBkYXJrZW5QYXJhbXNbN107CisKKworICAgICAgLyogY29udmVydCBmcm9tIHRydWUgY2hhcmFjdGVyIHNwYWNlIHRvIDEwMDAgdW5pdCBjaGFyYWN0ZXIgc3BhY2U7ICovCisgICAgICAvKiBhZGQgc3ludGhldGljIGVtYm9sZGVuaW5nIGVmZmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogYHN0ZW1XaWR0aFBlcjEwMDAnIHdpbGwgbm90IG92ZXJmbG93IGZvciBhIGxlZ2l0aW1hdGUgZm9udCAgICAgICovCisKKyAgICAgIHN0ZW1XaWR0aFBlcjEwMDAgPSBGVF9NdWxGaXgoIHN0ZW1XaWR0aCArIGJvbGRlbkFtb3VudCwgZW1SYXRpbyApOworCisgICAgICAvKiBgc2NhbGVkU3RlbScgY2FuIGVhc2lseSBvdmVyZmxvdywgc28gd2UgbXVzdCBjbGFtcCBpdHMgbWF4aW11bSAgKi8KKyAgICAgIC8qIHZhbHVlOyB0aGUgdGVzdCBkb2Vzbid0IG5lZWQgdG8gYmUgcHJlY2lzZSwgYnV0IG11c3QgYmUgICAgICAgICAqLworICAgICAgLyogY29uc2VydmF0aXZlLiAgVGhlIGNsYW1wIHZhbHVlIChkZWZhdWx0IDIzMzMpIHdoZXJlICAgICAgICAgICAgICovCisgICAgICAvKiBgZGFya2VuQW1vdW50JyBpcyB6ZXJvIGlzIHdlbGwgYmVsb3cgdGhlIG92ZXJmbG93IHZhbHVlIG9mICAgICAgKi8KKyAgICAgIC8qIDMyNzY3LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBGVF9NU0IgY29tcHV0ZXMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgYmFzZSAyIGxvZ2FyaXRobS4gIFRoZSAgKi8KKyAgICAgIC8qIG51bWJlciBvZiBiaXRzIGZvciB0aGUgcHJvZHVjdCBpcyAxIG9yIDIgbW9yZSB0aGFuIHRoZSBzdW0gb2YgICAqLworICAgICAgLyogbG9nYXJpdGhtczsgcmVtZW1iZXJpbmcgdGhhdCB0aGUgMTYgbG93ZXN0IGJpdHMgb2YgdGhlIGZyYWN0aW9uICovCisgICAgICAvKiBhcmUgZHJvcHBlZCB0aGlzIGlzIGNvcnJlY3QgdG8gd2l0aGluIGEgZmFjdG9yIG9mIGFsbW9zdCA0LiAgICAgKi8KKyAgICAgIC8qIEZvciBleGFtcGxlLCAweDgwLjAwMDAgKiAweDgwLjAwMDAgPSAweDQwMDAuMDAwMCBpcyAyMysyMyBhbmQgICAqLworICAgICAgLyogaXMgZmxhZ2dlZCBhcyBwb3NzaWJsZSBvdmVyZmxvdyBiZWNhdXNlIDB4RkYuRkZGRiAqIDB4RkYuRkZGRiA9ICovCisgICAgICAvKiAweEZGRkYuRkUwMCBpcyBhbHNvIDIzKzIzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgbG9nQmFzZTIgPSBGVF9NU0IoIChGVF9VSW50MzIpc3RlbVdpZHRoUGVyMTAwMCApICsKKyAgICAgICAgICAgICAgICAgICBGVF9NU0IoIChGVF9VSW50MzIpcHBlbSApOworCisgICAgICBpZiAoIGxvZ0Jhc2UyID49IDQ2ICkKKyAgICAgICAgLyogcG9zc2libGUgb3ZlcmZsb3cgKi8KKyAgICAgICAgc2NhbGVkU3RlbSA9IGNmMl9pbnRUb0ZpeGVkKCB4NCApOworICAgICAgZWxzZQorICAgICAgICBzY2FsZWRTdGVtID0gRlRfTXVsRml4KCBzdGVtV2lkdGhQZXIxMDAwLCBwcGVtICk7CisKKyAgICAgIC8qIG5vdyBhcHBseSB0aGUgZGFya2VuaW5nIHBhcmFtZXRlcnMgKi8KKworICAgICAgaWYgKCBzY2FsZWRTdGVtIDwgY2YyX2ludFRvRml4ZWQoIHgxICkgKQorICAgICAgICAqZGFya2VuQW1vdW50ID0gRlRfRGl2Rml4KCBjZjJfaW50VG9GaXhlZCggeTEgKSwgcHBlbSApOworCisgICAgICBlbHNlIGlmICggc2NhbGVkU3RlbSA8IGNmMl9pbnRUb0ZpeGVkKCB4MiApICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICB4ZGVsdGEgPSB4MiAtIHgxOworICAgICAgICBGVF9JbnQgIHlkZWx0YSA9IHkyIC0geTE7CisgICAgICAgIEZUX0ludCAgeCAgICAgID0gc3RlbVdpZHRoUGVyMTAwMCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCB4MSApLCBwcGVtICk7CisKKworICAgICAgICBpZiAoICF4ZGVsdGEgKQorICAgICAgICAgIGdvdG8gVHJ5X3gzOworCisgICAgICAgICpkYXJrZW5BbW91bnQgPSBGVF9NdWxEaXYoIHgsIHlkZWx0YSwgeGRlbHRhICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCB5MSApLCBwcGVtICk7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCBzY2FsZWRTdGVtIDwgY2YyX2ludFRvRml4ZWQoIHgzICkgKQorICAgICAgeworICAgICAgVHJ5X3gzOgorICAgICAgICB7CisgICAgICAgICAgRlRfSW50ICB4ZGVsdGEgPSB4MyAtIHgyOworICAgICAgICAgIEZUX0ludCAgeWRlbHRhID0geTMgLSB5MjsKKyAgICAgICAgICBGVF9JbnQgIHggICAgICA9IHN0ZW1XaWR0aFBlcjEwMDAgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCB4MiApLCBwcGVtICk7CisKKworICAgICAgICAgIGlmICggIXhkZWx0YSApCisgICAgICAgICAgICBnb3RvIFRyeV94NDsKKworICAgICAgICAgICpkYXJrZW5BbW91bnQgPSBGVF9NdWxEaXYoIHgsIHlkZWx0YSwgeGRlbHRhICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RpdkZpeCggY2YyX2ludFRvRml4ZWQoIHkyICksIHBwZW0gKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBlbHNlIGlmICggc2NhbGVkU3RlbSA8IGNmMl9pbnRUb0ZpeGVkKCB4NCApICkKKyAgICAgIHsKKyAgICAgIFRyeV94NDoKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgeGRlbHRhID0geDQgLSB4MzsKKyAgICAgICAgICBGVF9JbnQgIHlkZWx0YSA9IHk0IC0geTM7CisgICAgICAgICAgRlRfSW50ICB4ICAgICAgPSBzdGVtV2lkdGhQZXIxMDAwIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRGl2Rml4KCBjZjJfaW50VG9GaXhlZCggeDMgKSwgcHBlbSApOworCisKKyAgICAgICAgICBpZiAoICF4ZGVsdGEgKQorICAgICAgICAgICAgZ290byBVc2VfeTQ7CisKKyAgICAgICAgICAqZGFya2VuQW1vdW50ID0gRlRfTXVsRGl2KCB4LCB5ZGVsdGEsIHhkZWx0YSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCB5MyApLCBwcGVtICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZWxzZQorICAgICAgeworICAgICAgVXNlX3k0OgorICAgICAgICAqZGFya2VuQW1vdW50ID0gRlRfRGl2Rml4KCBjZjJfaW50VG9GaXhlZCggeTQgKSwgcHBlbSApOworICAgICAgfQorCisgICAgICAvKiB1c2UgaGFsZiB0aGUgYW1vdW50IG9uIGVhY2ggc2lkZSBhbmQgY29udmVydCBiYWNrIHRvIHRydWUgKi8KKyAgICAgIC8qIGNoYXJhY3RlciBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgKmRhcmtlbkFtb3VudCA9IEZUX0RpdkZpeCggKmRhcmtlbkFtb3VudCwgMiAqIGVtUmF0aW8gKTsKKyAgICB9CisKKyAgICAvKiBhZGQgc3ludGhldGljIGVtYm9sZGVuaW5nIGVmZmVjdCBpbiBjaGFyYWN0ZXIgc3BhY2UgKi8KKyAgICAqZGFya2VuQW1vdW50ICs9IGJvbGRlbkFtb3VudCAvIDI7CisgIH0KKworCisgIC8qIHNldCB1cCB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IEZvbnREaWN0IGFuZCBtYXRyaXggKi8KKworICAvKiBjYWxsZXIncyB0cmFuc2Zvcm0gaXMgYWRqdXN0ZWQgZm9yIHN1YnBpeGVsIHBvc2l0aW9uaW5nICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9mb250X3NldHVwKCBDRjJfRm9udCAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IENGMl9NYXRyaXgqICB0cmFuc2Zvcm0gKQorICB7CisgICAgLyogcG9pbnRlciB0byBwYXJzZWQgZm9udCBvYmplY3QgKi8KKyAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBmb250LT5kZWNvZGVyOworCisgICAgRlRfQm9vbCAgbmVlZEV4dHJhU2V0dXAgPSBGQUxTRTsKKworICAgIC8qIGNoYXJhY3RlciBzcGFjZSB1bml0cyAqLworICAgIENGMl9GaXhlZCAgYm9sZGVuWCA9IGZvbnQtPnN5bnRoZXRpY0VtYm9sZGVuaW5nQW1vdW50WDsKKyAgICBDRjJfRml4ZWQgIGJvbGRlblkgPSBmb250LT5zeW50aGV0aWNFbWJvbGRlbmluZ0Ftb3VudFk7CisKKyAgICBDRkZfU3ViRm9udCAgc3ViRm9udDsKKyAgICBDRjJfRml4ZWQgICAgcHBlbTsKKworCisgICAgLyogY2xlYXIgcHJldmlvdXMgZXJyb3IgKi8KKyAgICBmb250LT5lcnJvciA9IEZUX0Vycl9PazsKKworICAgIC8qIGlmIGEgQ0lEIGZvbnREaWN0IGhhcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlY29tcHV0ZSBzb21lIGNhY2hlZCAqLworICAgIC8qIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHN1YkZvbnQgPSBjZjJfZ2V0U3ViZm9udCggZGVjb2RlciApOworICAgIGlmICggZm9udC0+bGFzdFN1YmZvbnQgIT0gc3ViRm9udCApCisgICAgeworICAgICAgZm9udC0+bGFzdFN1YmZvbnQgPSBzdWJGb250OworICAgICAgbmVlZEV4dHJhU2V0dXAgICAgPSBUUlVFOworICAgIH0KKworICAgIC8qIGlmIHBwZW0gaGFzIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVjb21wdXRlIHNvbWUgY2FjaGVkIGRhdGEgICAgICAgICAqLworICAgIC8qIG5vdGU6IGJlY2F1c2Ugb2YgQ0lEIGZvbnQgbWF0cml4IGNvbmNhdGVuYXRpb24sIHBwZW0gYW5kIHRyYW5zZm9ybSAqLworICAgIC8qICAgICAgIGRvIG5vdCBuZWNlc3NhcmlseSB0cmFjay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHBwZW0gPSBjZjJfZ2V0UHBlbVkoIGRlY29kZXIgKTsKKyAgICBpZiAoIGZvbnQtPnBwZW0gIT0gcHBlbSApCisgICAgeworICAgICAgZm9udC0+cHBlbSAgICAgPSBwcGVtOworICAgICAgbmVlZEV4dHJhU2V0dXAgPSBUUlVFOworICAgIH0KKworICAgIC8qIGNvcHkgaGludGVkIGZsYWcgb24gZWFjaCBjYWxsICovCisgICAgZm9udC0+aGludGVkID0gKEZUX0Jvb2wpKCBmb250LT5yZW5kZXJpbmdGbGFncyAmIENGMl9GbGFnc0hpbnRlZCApOworCisgICAgLyogZGV0ZXJtaW5lIGlmIHRyYW5zZm9ybSBoYXMgY2hhbmdlZDsgICAgICAgKi8KKyAgICAvKiBpbmNsdWRlIEZvbnRtYXRyaXggYnV0IGlnbm9yZSB0cmFuc2xhdGlvbiAqLworICAgIGlmICggZnRfbWVtY21wKCB0cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICZmb250LT5jdXJyZW50VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICA0ICogc2l6ZW9mICggQ0YyX0ZpeGVkICkgKSAhPSAwICkKKyAgICB7CisgICAgICAvKiBzYXZlIGBrZXknIGluZm9ybWF0aW9uIGZvciBgY2FjaGUgb2Ygb25lJyBtYXRyaXggZGF0YTsgKi8KKyAgICAgIC8qIHNhdmUgY2xpZW50IHRyYW5zZm9ybSwgd2l0aG91dCB0aGUgdHJhbnNsYXRpb24gICAgICAgICAqLworICAgICAgZm9udC0+Y3VycmVudFRyYW5zZm9ybSAgICA9ICp0cmFuc2Zvcm07CisgICAgICBmb250LT5jdXJyZW50VHJhbnNmb3JtLnR4ID0KKyAgICAgIGZvbnQtPmN1cnJlbnRUcmFuc2Zvcm0udHkgPSBjZjJfaW50VG9GaXhlZCggMCApOworCisgICAgICAvKiBUT0RPOiBGcmVlVHlwZSB0cmFuc2Zvcm0gaXMgc2ltcGxlIHNjYWxhcjsgZm9yIG5vdywgdXNlIGlkZW50aXR5ICovCisgICAgICAvKiAgICAgICBmb3Igb3V0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBmb250LT5pbm5lclRyYW5zZm9ybSAgID0gKnRyYW5zZm9ybTsKKyAgICAgIGZvbnQtPm91dGVyVHJhbnNmb3JtLmEgPQorICAgICAgZm9udC0+b3V0ZXJUcmFuc2Zvcm0uZCA9IGNmMl9pbnRUb0ZpeGVkKCAxICk7CisgICAgICBmb250LT5vdXRlclRyYW5zZm9ybS5iID0KKyAgICAgIGZvbnQtPm91dGVyVHJhbnNmb3JtLmMgPSBjZjJfaW50VG9GaXhlZCggMCApOworCisgICAgICBuZWVkRXh0cmFTZXR1cCA9IFRSVUU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBmb250LT5kYXJrZW5lZCBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIHN0ZW0gZGFya2VuaW5nIHJlcXVlc3Qgb3IKKyAgICAgKiB0aGUgZm9udCBpcyBzeW50aGV0aWMgZW1ib2xkZW5lZC4KKyAgICAgKiBmb250LT5kYXJrZW5lZCBjb250cm9scyB3aGV0aGVyIHRvIGFkanVzdCBibHVlIHpvbmVzLCB3aW5kaW5nIG9yZGVyLAorICAgICAqIGFuZCBoaW50aW5nLgorICAgICAqCisgICAgICovCisgICAgaWYgKCBmb250LT5zdGVtRGFya2VuZWQgIT0gKCBmb250LT5yZW5kZXJpbmdGbGFncyAmIENGMl9GbGFnc0RhcmtlbmVkICkgKQorICAgIHsKKyAgICAgIGZvbnQtPnN0ZW1EYXJrZW5lZCA9CisgICAgICAgIChGVF9Cb29sKSggZm9udC0+cmVuZGVyaW5nRmxhZ3MgJiBDRjJfRmxhZ3NEYXJrZW5lZCApOworCisgICAgICAvKiBibHVlIHpvbmVzIGRlcGVuZCBvbiBkYXJrZW5lZCBmbGFnICovCisgICAgICBuZWVkRXh0cmFTZXR1cCA9IFRSVUU7CisgICAgfQorCisgICAgLyogcmVjb21wdXRlIHZhcmlhYmxlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdHJhbnNmb3JtIG9yIEZvbnREaWN0IG9yICovCisgICAgLyogZGFya2VuIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBuZWVkRXh0cmFTZXR1cCApCisgICAgeworICAgICAgLyogU3RkVlcgaXMgZm91bmQgaW4gdGhlIHByaXZhdGUgZGljdGlvbmFyeTsgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiByZWNvbXB1dGUgZGFya2VuaW5nIGFtb3VudHMgd2hlbmV2ZXIgcHJpdmF0ZSBkaWN0aW9uYXJ5IG9yICAgICAgKi8KKyAgICAgIC8qIHRyYW5zZm9ybSBjaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogTm90ZTogYSByZW5kZXJpbmcgZmxhZyB0dXJucyBkYXJrZW5pbmcgb24gb3Igb2ZmLCBzbyB3ZSB3YW50IHRvICovCisgICAgICAvKiAgICAgICBzdG9yZSB0aGUgYG9uJyBhbW91bnRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgIGRhcmtlbmluZyBhbW91bnQgaXMgY29tcHV0ZWQgaW4gY2hhcmFjdGVyIHNwYWNlICAgICAgICAgICAqLworICAgICAgLyogVE9ETzogdGVzdGluZyBzaXplLWRlcGVuZGVudCBkYXJrZW5pbmcgaGVyZTsgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICB3aGF0IHRvIGRvIGZvciByb3RhdGlvbnM/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgQ0YyX0ZpeGVkICBlbVJhdGlvOworICAgICAgQ0YyX0ZpeGVkICBzdGRIVzsKKyAgICAgIENGMl9JbnQgICAgdW5pdHNQZXJFbSA9IGZvbnQtPnVuaXRzUGVyRW07CisKKworICAgICAgaWYgKCB1bml0c1BlckVtID09IDAgKQorICAgICAgICB1bml0c1BlckVtID0gMTAwMDsKKworICAgICAgcHBlbSA9IEZUX01BWCggY2YyX2ludFRvRml4ZWQoIDQgKSwKKyAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnBwZW0gKTsgLyogdXNlIG1pbmltdW0gcHBlbSBvZiA0ICovCisKKyNpZiAwCisgICAgICAvKiBzaW5jZSB2c3RlbSBpcyBtZWFzdXJlZCBpbiB0aGUgeC1kaXJlY3Rpb24sIHdlIHVzZSB0aGUgYGEnIG1lbWJlciAqLworICAgICAgLyogb2YgdGhlIGZvbnRNYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGVtUmF0aW8gPSBjZjJfZml4ZWRGcmFjTXVsKCBjZjJfaW50VG9GaXhlZCggMTAwMCApLCBmb250TWF0cml4LT5hICk7CisjZW5kaWYKKworICAgICAgLyogRnJlZXR5cGUgZG9lcyBub3QgcHJlc2VydmUgdGhlIGZvbnRNYXRyaXggd2hlbiBwYXJzaW5nOyB1c2UgKi8KKyAgICAgIC8qIHVuaXRzUGVyRW0gaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBUT0RPOiBjaGVjayBwcmVjaXNpb24gb2YgdGhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgZW1SYXRpbyAgICAgPSBjZjJfaW50VG9GaXhlZCggMTAwMCApIC8gdW5pdHNQZXJFbTsKKyAgICAgIGZvbnQtPnN0ZFZXID0gY2YyX2dldFN0ZFZXKCBkZWNvZGVyICk7CisKKyAgICAgIGlmICggZm9udC0+c3RkVlcgPD0gMCApCisgICAgICAgIGZvbnQtPnN0ZFZXID0gRlRfRGl2Rml4KCBjZjJfaW50VG9GaXhlZCggNzUgKSwgZW1SYXRpbyApOworCisgICAgICBpZiAoIGJvbGRlblggPiAwICkKKyAgICAgIHsKKyAgICAgICAgLyogRW5zdXJlIHRoYXQgYm9sZGVuWCBpcyBhdCBsZWFzdCAxIHBpeGVsIGZvciBzeW50aGV0aWMgYm9sZCBmb250ICovCisgICAgICAgIC8qIChzaW1pbGFyIHRvIHdoYXQgQXZhbG9uIGRvZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBib2xkZW5YID0gRlRfTUFYKCBib2xkZW5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCB1bml0c1BlckVtICksIHBwZW0gKSApOworCisgICAgICAgIC8qIFN5bnRoZXRpYyBlbWJvbGRlbmluZyBhZGRzIGF0IGxlYXN0IDEgcGl4ZWwgdG8gZGFya2VuWCwgd2hpbGUgKi8KKyAgICAgICAgLyogc3RlbSBkYXJrZW5pbmcgYWRkcyBhdCBtb3N0IGhhbGYgcGl4ZWwuICBTaW5jZSB0aGUgcHVycG9zZSBvZiAqLworICAgICAgICAvKiBzdGVtIGRhcmtlbmluZyAocmVhZGFiaWxpdHkgYXQgc21hbGwgc2l6ZXMpIGlzIG1ldCB3aXRoICAgICAgICovCisgICAgICAgIC8qIHN5bnRoZXRpYyBlbWJvbGRlbmluZywgbm8gbmVlZCB0byBhZGQgc3RlbSBkYXJrZW5pbmcgZm9yIGEgICAgKi8KKyAgICAgICAgLyogc3ludGhldGljIGJvbGQgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBjZjJfY29tcHV0ZURhcmtlbmluZyggZW1SYXRpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5zdGRWVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5kYXJrZW5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9sZGVuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+ZGFya2VuUGFyYW1zICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGNmMl9jb21wdXRlRGFya2VuaW5nKCBlbVJhdGlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnN0ZFZXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmRhcmtlblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+c3RlbURhcmtlbmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+ZGFya2VuUGFyYW1zICk7CisKKyNpZiAwCisgICAgICAvKiBzaW5jZSBoc3RlbSBpcyBtZWFzdXJlZCBpbiB0aGUgeS1kaXJlY3Rpb24sIHdlIHVzZSB0aGUgYGQnIG1lbWJlciAqLworICAgICAgLyogb2YgdGhlIGZvbnRNYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIFRPRE86IHVzZSB0aGUgc2FtZSB1bml0cyBwZXIgZW0gYXMgYWJvdmU7IGNoZWNrIHRoaXMgICAgICAgICAgICAgICovCisgICAgICBlbVJhdGlvID0gY2YyX2ZpeGVkRnJhY011bCggY2YyX2ludFRvRml4ZWQoIDEwMDAgKSwgZm9udE1hdHJpeC0+ZCApOworI2VuZGlmCisKKyAgICAgIC8qIHNldCB0aGUgZGVmYXVsdCBzdGVtIHdpZHRoLCBiZWNhdXNlIGl0IG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCAqLworICAgICAgLyogZmFtaWx5IG1lbWJlcnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBjaG9vc2UgYSBjb25zdGFudCBmb3IgU3RkSFcgdGhhdCBkZXBlbmRzIG9uIGZvbnQgY29udHJhc3QgICAgICAgKi8KKyAgICAgIHN0ZEhXID0gY2YyX2dldFN0ZEhXKCBkZWNvZGVyICk7CisKKyAgICAgIGlmICggc3RkSFcgPiAwICYmIGZvbnQtPnN0ZFZXID4gMiAqIHN0ZEhXICkKKyAgICAgICAgZm9udC0+c3RkSFcgPSBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCA3NSApLCBlbVJhdGlvICk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGxvdyBjb250cmFzdCBmb250IGdldHMgbGVzcyBoc3RlbSBkYXJrZW5pbmcgKi8KKyAgICAgICAgZm9udC0+c3RkSFcgPSBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCAxMTAgKSwgZW1SYXRpbyApOworICAgICAgfQorCisgICAgICBjZjJfY29tcHV0ZURhcmtlbmluZyggZW1SYXRpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnN0ZEhXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5kYXJrZW5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGRlblksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+c3RlbURhcmtlbmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmRhcmtlblBhcmFtcyApOworCisgICAgICBpZiAoIGZvbnQtPmRhcmtlblggIT0gMCB8fCBmb250LT5kYXJrZW5ZICE9IDAgKQorICAgICAgICBmb250LT5kYXJrZW5lZCA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICAgIGZvbnQtPmRhcmtlbmVkID0gRkFMU0U7CisKKyAgICAgIGZvbnQtPnJldmVyc2VXaW5kaW5nID0gRkFMU0U7IC8qIGluaXRpYWwgZXhwZWN0YXRpb24gaXMgQ0NXICovCisKKyAgICAgIC8qIGNvbXB1dGUgYmx1ZSB6b25lcyBmb3IgdGhpcyBpbnN0YW5jZSAqLworICAgICAgY2YyX2JsdWVzX2luaXQoICZmb250LT5ibHVlcywgZm9udCApOworICAgIH0KKyAgfQorCisKKyAgLyogZXF1aXZhbGVudCB0byBBZG9iZUdldE91dGxpbmUgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmMl9nZXRHbHlwaE91dGxpbmUoIENGMl9Gb250ICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0YyX01hdHJpeCogIHRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2KiAgICAgIGdseXBoV2lkdGggKQorICB7CisgICAgRlRfRXJyb3IgIGxhc3RFcnJvciA9IEZUX0Vycl9PazsKKworICAgIEZUX1ZlY3RvciAgdHJhbnNsYXRpb247CisKKyNpZiAwCisgICAgRlRfVmVjdG9yICBhZHZhbmNlUG9pbnQ7CisjZW5kaWYKKworICAgIENGMl9GaXhlZCAgYWR2V2lkdGggPSAwOworICAgIEZUX0Jvb2wgICAgbmVlZFdpbmRpbmc7CisKKworICAgIC8qIE5vdGU6IHVzZSBib3RoIGludGVnZXIgYW5kIGZyYWN0aW9uIGZvciBvdXRsaW5lcy4gIFRoaXMgYWxsb3dzIGJib3ggKi8KKyAgICAvKiAgICAgICB0byBjb21lIG91dCBkaXJlY3RseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICB0cmFuc2xhdGlvbi54ID0gdHJhbnNmb3JtLT50eDsKKyAgICB0cmFuc2xhdGlvbi55ID0gdHJhbnNmb3JtLT50eTsKKworICAgIC8qIHNldCB1cCB2YWx1ZXMgYmFzZWQgb24gdHJhbnNmb3JtICovCisgICAgY2YyX2ZvbnRfc2V0dXAoIGZvbnQsIHRyYW5zZm9ybSApOworICAgIGlmICggZm9udC0+ZXJyb3IgKQorICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cCBlbmNvdW50ZXJlZCBhbiBlcnJvciAqLworCisgICAgLyogcmVzZXQgZGFya2VuIGRpcmVjdGlvbiAqLworICAgIGZvbnQtPnJldmVyc2VXaW5kaW5nID0gRkFMU0U7CisKKyAgICAvKiB3aW5kaW5nIG9yZGVyIG9ubHkgYWZmZWN0cyBkYXJrZW5pbmcgKi8KKyAgICBuZWVkV2luZGluZyA9IGZvbnQtPmRhcmtlbmVkOworCisgICAgd2hpbGUgKCAxICkKKyAgICB7CisgICAgICAvKiByZXNldCBvdXRwdXQgYnVmZmVyICovCisgICAgICBjZjJfb3V0bGluZV9yZXNldCggJmZvbnQtPm91dGxpbmUgKTsKKworICAgICAgLyogYnVpbGQgdGhlIG91dGxpbmUsIHBhc3NpbmcgdGhlIGZ1bGwgdHJhbnNsYXRpb24gKi8KKyAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9PdXRsaW5lQ2FsbGJhY2tzKSZmb250LT5vdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZHZXaWR0aCApOworCisgICAgICBpZiAoIGZvbnQtPmVycm9yICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgICBpZiAoICFuZWVkV2luZGluZyApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBjaGVjayB3aW5kaW5nIG9yZGVyICovCisgICAgICBpZiAoIGZvbnQtPm91dGxpbmUucm9vdC53aW5kaW5nTW9tZW50dW0gPj0gMCApIC8qIENGRiBpcyBDQ1cgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGludmVydCBkYXJrZW5pbmcgYW5kIHJlbmRlciBhZ2FpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogVE9ETzogdGhpcyBzaG91bGQgYmUgYSBwYXJhbWV0ZXIgdG8gZ2V0T3V0bGluZS1jb21wdXRlT2Zmc2V0ICovCisgICAgICBmb250LT5yZXZlcnNlV2luZGluZyA9IFRSVUU7CisKKyAgICAgIG5lZWRXaW5kaW5nID0gRkFMU0U7ICAgIC8qIGV4aXQgYWZ0ZXIgbmV4dCBpdGVyYXRpb24gKi8KKyAgICB9CisKKyAgICAvKiBmaW5pc2ggc3RvcmluZyBjbGllbnQgb3V0bGluZSAqLworICAgIGNmMl9vdXRsaW5lX2Nsb3NlKCAmZm9udC0+b3V0bGluZSApOworCisgIGV4aXQ6CisgICAgLyogRnJlZVR5cGUganVzdCB3YW50cyB0aGUgYWR2YW5jZSB3aWR0aDsgdGhlcmUgaXMgbm8gdHJhbnNsYXRpb24gKi8KKyAgICAqZ2x5cGhXaWR0aCA9IGFkdldpZHRoOworCisgICAgLyogZnJlZSByZXNvdXJjZXMgYW5kIGNvbGxlY3QgZXJyb3JzIGZyb20gb2JqZWN0cyB3ZSd2ZSB1c2VkICovCisgICAgY2YyX3NldEVycm9yKCAmZm9udC0+ZXJyb3IsIGxhc3RFcnJvciApOworCisgICAgcmV0dXJuIGZvbnQtPmVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmb250LmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJmb250LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjZjAyZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZvbnQuaApAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyZm9udC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZm9udCBpbnN0YW5jZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRjJGT05UX0hfXworI2RlZmluZSBfX0NGMkZPTlRfSF9fCisKKworI2luY2x1ZGUgImNmMmZ0LmgiCisjaW5jbHVkZSAiY2YyYmx1ZXMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIENGMl9PUEVSQU5EX1NUQUNLX1NJWkUgIDQ4CisjZGVmaW5lIENGMl9NQVhfU1VCUiAgICAgICAgICAgIDE2IC8qIG1heGltdW0gc3Vicm91dGluZSBuZXN0aW5nOyAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgMTAgYXJlIGFsbG93ZWQgYnV0IHRoZXJlIGV4aXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvbnRzIGxpa2UgYEhpcmFLYWt1UHJvTi1XMy50dGYnICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIFczOyAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDguMmQ2ZTE7IDIwMTQtMTItMTkpIHRoYXQgZXhjZWVkICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworICAvKiB0eXBlZGVmIGlzIGluIGBjZjJnbHVlLmgnICovCisgIHN0cnVjdCAgQ0YyX0ZvbnRSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yOyAgICAgLyogc2hhcmVkIGVycm9yIGZvciB0aGlzIGluc3RhbmNlICovCisKKyAgICBDRjJfUmVuZGVyaW5nRmxhZ3MgIHJlbmRlcmluZ0ZsYWdzOworCisgICAgLyogdmFyaWFibGVzIHRoYXQgZGVwZW5kIG9uIFRyYW5zZm9ybTogICovCisgICAgLyogdGhlIGZvbGxvd2luZyBoYXZlIHplcm8gdHJhbnNsYXRpb247ICovCisgICAgLyogaW5uZXIgKiBvdXRlciA9IGZvbnQgKiBvcmlnaW5hbCAgICAgICovCisKKyAgICBDRjJfTWF0cml4ICBjdXJyZW50VHJhbnNmb3JtOyAgLyogb3JpZ2luYWwgY2xpZW50IG1hdHJpeCAgICAgICAgICAgKi8KKyAgICBDRjJfTWF0cml4ICBpbm5lclRyYW5zZm9ybTsgICAgLyogZm9yIGhpbnRpbmc7IGVyZWN0LCBzY2FsZWQgICAgICAgKi8KKyAgICBDRjJfTWF0cml4ICBvdXRlclRyYW5zZm9ybTsgICAgLyogcG9zdCBoaW50aW5nOyBpbmNsdWRlcyByb3RhdGlvbnMgKi8KKyAgICBDRjJfRml4ZWQgICBwcGVtOyAgICAgICAgICAgICAgLyogdHJhbnNmb3JtLWRlcGVuZGVudCAgICAgICAgICAgICAgKi8KKworICAgIENGMl9JbnQgIHVuaXRzUGVyRW07CisKKyAgICBDRjJfRml4ZWQgIHN5bnRoZXRpY0VtYm9sZGVuaW5nQW1vdW50WDsgICAvKiBjaGFyYWN0ZXIgc3BhY2UgdW5pdHMgKi8KKyAgICBDRjJfRml4ZWQgIHN5bnRoZXRpY0VtYm9sZGVuaW5nQW1vdW50WTsgICAvKiBjaGFyYWN0ZXIgc3BhY2UgdW5pdHMgKi8KKworICAgIC8qIEZyZWVUeXBlIHJlbGF0ZWQgbWVtYmVycyAqLworICAgIENGMl9PdXRsaW5lUmVjICBvdXRsaW5lOyAgICAgICAvKiBmcmVldHlwZSBnbHlwaCBvdXRsaW5lIGZ1bmN0aW9ucyAqLworICAgIENGRl9EZWNvZGVyKiAgICBkZWNvZGVyOworICAgIENGRl9TdWJGb250ICAgICBsYXN0U3ViZm9udDsgICAgICAgICAgICAgIC8qIEZyZWVUeXBlIHBhcnNlZCBkYXRhOyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvcCBmb250IG9yIHN1YmZvbnQgICAqLworCisgICAgLyogdGhlc2UgZmxhZ3MgY2FuIHZhcnkgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dCAqLworICAgIEZUX0Jvb2wgIGhpbnRlZDsKKyAgICBGVF9Cb29sICBkYXJrZW5lZDsgICAgICAgLyogdHJ1ZSBpZiBzdGVtRGFya2VuZWQgb3Igc3ludGhldGljIGJvbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaS5lLiBkYXJrZW5YICE9IDAgfHwgZGFya2VuWSAhPSAwICAgICAgKi8KKyAgICBGVF9Cb29sICBzdGVtRGFya2VuZWQ7CisKKyAgICBGVF9JbnQgIGRhcmtlblBhcmFtc1s4XTsgICAgICAgICAgICAgIC8qIDEwMDAgdW5pdCBjaGFyYWN0ZXIgc3BhY2UgKi8KKworICAgIC8qIHZhcmlhYmxlcyB0aGF0IGRlcGVuZCBvbiBib3RoIEZvbnREaWN0IGFuZCBUcmFuc2Zvcm0gKi8KKyAgICBDRjJfRml4ZWQgIHN0ZFZXOyAgICAgLyogaW4gY2hhcmFjdGVyIHNwYWNlOyBkZXBlbmRzIG9uIGRpY3QgZW50cnkgKi8KKyAgICBDRjJfRml4ZWQgIHN0ZEhXOyAgICAgLyogaW4gY2hhcmFjdGVyIHNwYWNlOyBkZXBlbmRzIG9uIGRpY3QgZW50cnkgKi8KKyAgICBDRjJfRml4ZWQgIGRhcmtlblg7ICAgICAgICAgICAgICAgICAgICAvKiBjaGFyYWN0ZXIgc3BhY2UgdW5pdHMgICAgKi8KKyAgICBDRjJfRml4ZWQgIGRhcmtlblk7ICAgICAgICAgICAgICAgICAgICAvKiBkZXBlbmRzIG9uIHRyYW5zZm9ybSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcHJpdmF0ZSBkaWN0IChTdGRWVykgKi8KKyAgICBGVF9Cb29sICByZXZlcnNlV2luZGluZzsgICAgICAgICAgICAgICAvKiBkYXJrZW4gYXNzdW1pbmcgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudGVyY2xvY2t3aXNlIHdpbmRpbmcgKi8KKworICAgIENGMl9CbHVlc1JlYyAgYmx1ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXB1dGVkIHpvbmUgZGF0YSAqLworICB9OworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2YyX2dldEdseXBoT3V0bGluZSggQ0YyX0ZvbnQgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRjJfTWF0cml4KiAgdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYqICAgICAgZ2x5cGhXaWR0aCApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRjJGT05UX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyZnQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1NDRhMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZ0LmMKQEAgLTAsMCArMSw3MDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMmZ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBHbHVlIENvbXBvbmVudCB0byBBZG9iZSdzIEludGVycHJldGVyIChib2R5KS4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworI2luY2x1ZGUgImNmMmZvbnQuaCIKKyNpbmNsdWRlICJjZjJlcnJvci5oIgorCisKKyNkZWZpbmUgQ0YyX01BWF9TSVpFICBjZjJfaW50VG9GaXhlZCggMjAwMCApICAgIC8qIG1heCBwcGVtICovCisKKworICAvKgorICAgKiBUaGlzIGNoZWNrIHNob3VsZCBhdm9pZCBtb3N0IGludGVybmFsIG92ZXJmbG93IGNhc2VzLiAgQ2xpZW50cyBzaG91bGQKKyAgICogZ2VuZXJhbGx5IHJlc3BvbmQgdG8gYEdseXBoX1Rvb19CaWcnIGJ5IGdldHRpbmcgYSBnbHlwaCBvdXRsaW5lCisgICAqIGF0IEVNIHNpemUsIHNjYWxpbmcgaXQgYW5kIGZpbGxpbmcgaXQgYXMgYSBncmFwaGljcyBvcGVyYXRpb24uCisgICAqCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2YyX2NoZWNrVHJhbnNmb3JtKCBjb25zdCBDRjJfTWF0cml4KiAgdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgICAgICAgICB1bml0c1BlckVtICkKKyAgeworICAgIENGMl9GaXhlZCAgbWF4U2NhbGU7CisKKworICAgIEZUX0FTU0VSVCggdW5pdHNQZXJFbSA+IDAgKTsKKworICAgIGlmICggdHJhbnNmb3JtLT5hIDw9IDAgfHwgdHJhbnNmb3JtLT5kIDw9IDAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1NpemVfSGFuZGxlICk7CisKKyAgICBGVF9BU1NFUlQoIHRyYW5zZm9ybS0+YiA9PSAwICYmIHRyYW5zZm9ybS0+YyA9PSAwICk7CisgICAgRlRfQVNTRVJUKCB0cmFuc2Zvcm0tPnR4ID09IDAgJiYgdHJhbnNmb3JtLT50eSA9PSAwICk7CisKKyAgICBpZiAoIHVuaXRzUGVyRW0gPiAweDdGRkYgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBHbHlwaF9Ub29fQmlnICk7CisKKyAgICBtYXhTY2FsZSA9IEZUX0RpdkZpeCggQ0YyX01BWF9TSVpFLCBjZjJfaW50VG9GaXhlZCggdW5pdHNQZXJFbSApICk7CisKKyAgICBpZiAoIHRyYW5zZm9ybS0+YSA+IG1heFNjYWxlIHx8IHRyYW5zZm9ybS0+ZCA+IG1heFNjYWxlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggR2x5cGhfVG9vX0JpZyApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2YyX3NldEdseXBoV2lkdGgoIENGMl9PdXRsaW5lICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgIHdpZHRoICkKKyAgeworICAgIENGRl9EZWNvZGVyKiAgZGVjb2RlciA9IG91dGxpbmUtPmRlY29kZXI7CisKKworICAgIEZUX0FTU0VSVCggZGVjb2RlciApOworCisgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBjZjJfZml4ZWRUb0ludCggd2lkdGggKTsKKyAgfQorCisKKyAgLyogQ2xlYW4gdXAgZm9udCBpbnN0YW5jZS4gKi8KKyAgc3RhdGljIHZvaWQKKyAgY2YyX2ZyZWVfaW5zdGFuY2UoIHZvaWQqICBwdHIgKQorICB7CisgICAgQ0YyX0ZvbnQgIGZvbnQgPSAoQ0YyX0ZvbnQpcHRyOworCisKKyAgICBpZiAoIGZvbnQgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZm9udC0+bWVtb3J5OworCisKKyAgICAgICh2b2lkKW1lbW9yeTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNsaWVudCBvdXRsaW5lOyAgICovCisgIC8qIEZyZWVUeXBlIHVzZXMgY29vcmRpbmF0ZXMgaW4gMjYuNiBmb3JtYXQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgY2YyX2J1aWxkZXJfbW92ZVRvKCBDRjJfT3V0bGluZUNhbGxiYWNrcyAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRjJfQ2FsbGJhY2tQYXJhbXMgIHBhcmFtcyApCisgIHsKKyAgICAvKiBkb3duY2FzdCB0aGUgb2JqZWN0IHBvaW50ZXIgKi8KKyAgICBDRjJfT3V0bGluZSAgIG91dGxpbmUgPSAoQ0YyX091dGxpbmUpY2FsbGJhY2tzOworICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlcjsKKworICAgICh2b2lkKXBhcmFtczsgICAgICAgIC8qIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlICovCisKKworICAgIEZUX0FTU0VSVCggb3V0bGluZSAmJiBvdXRsaW5lLT5kZWNvZGVyICk7CisgICAgRlRfQVNTRVJUKCBwYXJhbXMtPm9wID09IENGMl9QYXRoT3BNb3ZlVG8gKTsKKworICAgIGJ1aWxkZXIgPSAmb3V0bGluZS0+ZGVjb2Rlci0+YnVpbGRlcjsKKworICAgIC8qIG5vdGU6IHR3byBzdWNjZXNzaXZlIG1vdmVzIHNpbXBseSBjbG9zZSB0aGUgY29udG91ciB0d2ljZSAqLworICAgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2YyX2J1aWxkZXJfbGluZVRvKCBDRjJfT3V0bGluZUNhbGxiYWNrcyAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRjJfQ2FsbGJhY2tQYXJhbXMgIHBhcmFtcyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKyAgICAvKiBkb3duY2FzdCB0aGUgb2JqZWN0IHBvaW50ZXIgKi8KKyAgICBDRjJfT3V0bGluZSAgIG91dGxpbmUgPSAoQ0YyX091dGxpbmUpY2FsbGJhY2tzOworICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlcjsKKworCisgICAgRlRfQVNTRVJUKCBvdXRsaW5lICYmIG91dGxpbmUtPmRlY29kZXIgKTsKKyAgICBGVF9BU1NFUlQoIHBhcmFtcy0+b3AgPT0gQ0YyX1BhdGhPcExpbmVUbyApOworCisgICAgYnVpbGRlciA9ICZvdXRsaW5lLT5kZWNvZGVyLT5idWlsZGVyOworCisgICAgaWYgKCAhYnVpbGRlci0+cGF0aF9iZWd1biApCisgICAgeworICAgICAgLyogcmVjb3JkIHRoZSBtb3ZlIGJlZm9yZSB0aGUgbGluZTsgYWxzbyBjaGVjayBwb2ludHMgYW5kIHNldCAqLworICAgICAgLyogYHBhdGhfYmVndW4nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgZXJyb3IgPSBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQwLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0MC55ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhKmNhbGxiYWNrcy0+ZXJyb3IgKQorICAgICAgICAgICpjYWxsYmFja3MtPmVycm9yID0gIGVycm9yOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLyogYGNmZl9idWlsZGVyX2FkZF9wb2ludDEnIGluY2x1ZGVzIGEgY2hlY2tfcG9pbnRzIGNhbGwgZm9yIG9uZSBwb2ludCAqLworICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0MS55ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgaWYgKCAhKmNhbGxiYWNrcy0+ZXJyb3IgKQorICAgICAgICAqY2FsbGJhY2tzLT5lcnJvciA9ICBlcnJvcjsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGNmMl9idWlsZGVyX2N1YmVUbyggQ0YyX091dGxpbmVDYWxsYmFja3MgICAgICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0YyX0NhbGxiYWNrUGFyYW1zICBwYXJhbXMgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisgICAgLyogZG93bmNhc3QgdGhlIG9iamVjdCBwb2ludGVyICovCisgICAgQ0YyX091dGxpbmUgICBvdXRsaW5lID0gKENGMl9PdXRsaW5lKWNhbGxiYWNrczsKKyAgICBDRkZfQnVpbGRlciogIGJ1aWxkZXI7CisKKworICAgIEZUX0FTU0VSVCggb3V0bGluZSAmJiBvdXRsaW5lLT5kZWNvZGVyICk7CisgICAgRlRfQVNTRVJUKCBwYXJhbXMtPm9wID09IENGMl9QYXRoT3BDdWJlVG8gKTsKKworICAgIGJ1aWxkZXIgPSAmb3V0bGluZS0+ZGVjb2Rlci0+YnVpbGRlcjsKKworICAgIGlmICggIWJ1aWxkZXItPnBhdGhfYmVndW4gKQorICAgIHsKKyAgICAgIC8qIHJlY29yZCB0aGUgbW92ZSBiZWZvcmUgdGhlIGxpbmU7IGFsc28gY2hlY2sgcG9pbnRzIGFuZCBzZXQgKi8KKyAgICAgIC8qIGBwYXRoX2JlZ3VuJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0MC54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIGlmICggISpjYWxsYmFja3MtPmVycm9yICkKKyAgICAgICAgICAqY2FsbGJhY2tzLT5lcnJvciA9ICBlcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIC8qIHByZXBhcmUgcm9vbSBmb3IgMyBwb2ludHM6IDIgb2ZmLWN1cnZlLCAxIG9uLWN1cnZlICovCisgICAgZXJyb3IgPSBjZmZfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCAzICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgaWYgKCAhKmNhbGxiYWNrcy0+ZXJyb3IgKQorICAgICAgICAqY2FsbGJhY2tzLT5lcnJvciA9ICBlcnJvcjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0MS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDEueSwgMCApOworICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQyLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0Mi55LCAwICk7CisgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDMueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQzLnksIDEgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2YyX291dGxpbmVfaW5pdCggQ0YyX091dGxpbmUgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgICBlcnJvciApCisgIHsKKyAgICBGVF9NRU1fWkVSTyggb3V0bGluZSwgc2l6ZW9mICggQ0YyX091dGxpbmVSZWMgKSApOworCisgICAgb3V0bGluZS0+cm9vdC5tZW1vcnkgPSBtZW1vcnk7CisgICAgb3V0bGluZS0+cm9vdC5lcnJvciAgPSBlcnJvcjsKKworICAgIG91dGxpbmUtPnJvb3QubW92ZVRvID0gY2YyX2J1aWxkZXJfbW92ZVRvOworICAgIG91dGxpbmUtPnJvb3QubGluZVRvID0gY2YyX2J1aWxkZXJfbGluZVRvOworICAgIG91dGxpbmUtPnJvb3QuY3ViZVRvID0gY2YyX2J1aWxkZXJfY3ViZVRvOworICB9CisKKworICAvKiBnZXQgc2NhbGluZyBhbmQgaGludCBmbGFnIGZyb20gR2x5cGhTbG90ICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9nZXRTY2FsZUFuZEhpbnRGbGFnKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIHhfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIHlfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICAgIGhpbnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICAgc2NhbGVkICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5idWlsZGVyLmdseXBoICk7CisKKyAgICAvKiBub3RlOiBGcmVlVHlwZSBzY2FsZSBpbmNsdWRlcyBhIGZhY3RvciBvZiA2NCAqLworICAgICpoaW50ZWQgPSBkZWNvZGVyLT5idWlsZGVyLmdseXBoLT5oaW50OworICAgICpzY2FsZWQgPSBkZWNvZGVyLT5idWlsZGVyLmdseXBoLT5zY2FsZWQ7CisKKyAgICBpZiAoICpoaW50ZWQgKQorICAgIHsKKyAgICAgICp4X3NjYWxlID0gKCBkZWNvZGVyLT5idWlsZGVyLmdseXBoLT54X3NjYWxlICsgMzIgKSAvIDY0OworICAgICAgKnlfc2NhbGUgPSAoIGRlY29kZXItPmJ1aWxkZXIuZ2x5cGgtPnlfc2NhbGUgKyAzMiApIC8gNjQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBmb3IgdW5oaW50ZWQgb3V0bGluZXMsIGBjZmZfc2xvdF9sb2FkJyBkb2VzIHRoZSBzY2FsaW5nLCAqLworICAgICAgLyogdGh1cyByZW5kZXIgYXQgYHVuaXR5JyBzY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgKnhfc2NhbGUgPSAweDA0MDA7ICAgLyogMS82NCBhcyAxNi4xNiAqLworICAgICAgKnlfc2NhbGUgPSAweDA0MDA7CisgICAgfQorICB9CisKKworICAvKiBnZXQgdW5pdHMgcGVyIGVtIGZyb20gYEZUX0ZhY2UnICovCisgIC8qIFRPRE86IHNob3VsZCBoYW5kbGUgZm9udCBtYXRyaXggY29uY2F0ZW5hdGlvbj8gKi8KKyAgc3RhdGljIEZUX1VTaG9ydAorICBjZjJfZ2V0VW5pdHNQZXJFbSggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5idWlsZGVyLmZhY2UgKTsKKyAgICBGVF9BU1NFUlQoIGRlY29kZXItPmJ1aWxkZXIuZmFjZS0+cm9vdC51bml0c19wZXJfRU0gKTsKKworICAgIHJldHVybiBkZWNvZGVyLT5idWlsZGVyLmZhY2UtPnJvb3QudW5pdHNfcGVyX0VNOworICB9CisKKworICAvKiBNYWluIGVudHJ5IHBvaW50OiBSZW5kZXIgb25lIGdseXBoLiAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOworICAgIENGMl9Gb250ICAgZm9udDsKKworCisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmNmZiApOworCisgICAgbWVtb3J5ID0gZGVjb2Rlci0+YnVpbGRlci5tZW1vcnk7CisKKyAgICAvKiBDRjIgZGF0YSBpcyBzYXZlZCBoZXJlIGFjcm9zcyBnbHlwaHMgKi8KKyAgICBmb250ID0gKENGMl9Gb250KWRlY29kZXItPmNmZi0+Y2YyX2luc3RhbmNlLmRhdGE7CisKKyAgICAvKiBvbiBmaXJzdCBnbHlwaCwgYWxsb2NhdGUgaW5zdGFuY2Ugc3RydWN0dXJlICovCisgICAgaWYgKCBkZWNvZGVyLT5jZmYtPmNmMl9pbnN0YW5jZS5kYXRhID09IE5VTEwgKQorICAgIHsKKyAgICAgIGRlY29kZXItPmNmZi0+Y2YyX2luc3RhbmNlLmZpbmFsaXplciA9CisgICAgICAgIChGVF9HZW5lcmljX0ZpbmFsaXplciljZjJfZnJlZV9pbnN0YW5jZTsKKworICAgICAgaWYgKCBGVF9BTExPQyggZGVjb2Rlci0+Y2ZmLT5jZjJfaW5zdGFuY2UuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9Gb250UmVjICkgKSApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworCisgICAgICBmb250ID0gKENGMl9Gb250KWRlY29kZXItPmNmZi0+Y2YyX2luc3RhbmNlLmRhdGE7CisKKyAgICAgIGZvbnQtPm1lbW9yeSA9IG1lbW9yeTsKKworICAgICAgLyogaW5pdGlhbGl6ZSBhIGNsaWVudCBvdXRsaW5lLCB0byBiZSBzaGFyZWQgYnkgZWFjaCBnbHlwaCByZW5kZXJlZCAqLworICAgICAgY2YyX291dGxpbmVfaW5pdCggJmZvbnQtPm91dGxpbmUsIGZvbnQtPm1lbW9yeSwgJmZvbnQtPmVycm9yICk7CisgICAgfQorCisgICAgLyogc2F2ZSBkZWNvZGVyOyBpdCBpcyBhIHN0YWNrIHZhcmlhYmxlIGFuZCB3aWxsIGJlIGRpZmZlcmVudCBvbiBlYWNoICovCisgICAgLyogY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9udC0+ZGVjb2RlciAgICAgICAgID0gZGVjb2RlcjsKKyAgICBmb250LT5vdXRsaW5lLmRlY29kZXIgPSBkZWNvZGVyOworCisgICAgeworICAgICAgLyogYnVpbGQgcGFyYW1ldGVycyBmb3IgQWRvYmUgZW5naW5lICovCisKKyAgICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOworICAgICAgQ0ZGX0RyaXZlciAgICBkcml2ZXIgID0gKENGRl9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGJ1aWxkZXItPmZhY2UgKTsKKworICAgICAgLyogbG9jYWwgZXJyb3IgKi8KKyAgICAgIEZUX0Vycm9yICAgICAgIGVycm9yMiA9IEZUX0Vycl9PazsKKyAgICAgIENGMl9CdWZmZXJSZWMgIGJ1ZjsKKyAgICAgIENGMl9NYXRyaXggICAgIHRyYW5zZm9ybTsKKyAgICAgIENGMl9GMTZEb3QxNiAgIGdseXBoV2lkdGg7CisKKyAgICAgIEZUX0Jvb2wgIGhpbnRlZDsKKyAgICAgIEZUX0Jvb2wgIHNjYWxlZDsKKworCisgICAgICAvKiBGcmVlVHlwZSBoYXMgYWxyZWFkeSBsb29rZWQgdXAgdGhlIEdJRDsgY29udmVydCB0byAgICAgICAgICovCisgICAgICAvKiBgUmVnaW9uQnVmZmVyJywgYXNzdW1pbmcgdGhhdCB0aGUgaW5wdXQgaGFzIGJlZW4gdmFsaWRhdGVkICovCisgICAgICBGVF9BU1NFUlQoIGNoYXJzdHJpbmdfYmFzZSArIGNoYXJzdHJpbmdfbGVuID49IGNoYXJzdHJpbmdfYmFzZSApOworCisgICAgICBGVF9aRVJPKCAmYnVmICk7CisgICAgICBidWYuc3RhcnQgPQorICAgICAgYnVmLnB0ciAgID0gY2hhcnN0cmluZ19iYXNlOworICAgICAgYnVmLmVuZCAgID0gY2hhcnN0cmluZ19iYXNlICsgY2hhcnN0cmluZ19sZW47CisKKyAgICAgIEZUX1pFUk8oICZ0cmFuc2Zvcm0gKTsKKworICAgICAgY2YyX2dldFNjYWxlQW5kSGludEZsYWcoIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zZm9ybS5hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2Zvcm0uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGludGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FsZWQgKTsKKworICAgICAgZm9udC0+cmVuZGVyaW5nRmxhZ3MgPSAwOworICAgICAgaWYgKCBoaW50ZWQgKQorICAgICAgICBmb250LT5yZW5kZXJpbmdGbGFncyB8PSBDRjJfRmxhZ3NIaW50ZWQ7CisgICAgICBpZiAoIHNjYWxlZCAmJiAhZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZyApCisgICAgICAgIGZvbnQtPnJlbmRlcmluZ0ZsYWdzIHw9IENGMl9GbGFnc0RhcmtlbmVkOworCisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbMF0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMF07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbMV0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMV07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbMl0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMl07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbM10gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbM107CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbNF0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNF07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbNV0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNV07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbNl0gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNl07CisgICAgICBmb250LT5kYXJrZW5QYXJhbXNbN10gPSBkcml2ZXItPmRhcmtlbl9wYXJhbXNbN107CisKKyAgICAgIC8qIG5vdyBnZXQgYW4gb3V0bGluZSBmb3IgdGhpcyBnbHlwaDsgICAgICAqLworICAgICAgLyogYWxzbyBnZXQgdW5pdHMgcGVyIGVtIHRvIHZhbGlkYXRlIHNjYWxlICovCisgICAgICBmb250LT51bml0c1BlckVtID0gKENGMl9JbnQpY2YyX2dldFVuaXRzUGVyRW0oIGRlY29kZXIgKTsKKworICAgICAgaWYgKCBzY2FsZWQgKQorICAgICAgeworICAgICAgICBlcnJvcjIgPSBjZjJfY2hlY2tUcmFuc2Zvcm0oICZ0cmFuc2Zvcm0sIGZvbnQtPnVuaXRzUGVyRW0gKTsKKyAgICAgICAgaWYgKCBlcnJvcjIgKQorICAgICAgICAgIHJldHVybiBlcnJvcjI7CisgICAgICB9CisKKyAgICAgIGVycm9yMiA9IGNmMl9nZXRHbHlwaE91dGxpbmUoIGZvbnQsICZidWYsICZ0cmFuc2Zvcm0sICZnbHlwaFdpZHRoICk7CisgICAgICBpZiAoIGVycm9yMiApCisgICAgICAgIHJldHVybiBGVF9FUlIoIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICAgICAgY2YyX3NldEdseXBoV2lkdGgoICZmb250LT5vdXRsaW5lLCBnbHlwaFdpZHRoICk7CisKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorICB9CisKKworICAvKiBnZXQgcG9pbnRlciB0byBjdXJyZW50IEZyZWVUeXBlIHN1YmZvbnQgKGJhc2VkIG9uIGN1cnJlbnQgZ2x5cGhJRCkgKi8KKyAgRlRfTE9DQUxfREVGKCBDRkZfU3ViRm9udCApCisgIGNmMl9nZXRTdWJmb250KCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgcmV0dXJuIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udDsKKyAgfQorCisKKyAgLyogZ2V0IGB5X3BwZW0nIGZyb20gYENGRl9TaXplJyAqLworICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCisgIGNmMl9nZXRQcGVtWSggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIuZmFjZSAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmZhY2UtPnJvb3Quc2l6ZSApOworCisgICAgLyoKKyAgICAgKiBOb3RlIHRoYXQgYHlfcHBlbScgY2FuIGJlIHplcm8gaWYgdGhlcmUgd2Fzbid0IGEgY2FsbCB0bworICAgICAqIGBGVF9TZXRfQ2hhcl9TaXplJyBvciBzb21ldGhpbmcgc2ltaWxhci4gIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgYQorICAgICAqIHByb2JsZW0gc2luY2Ugd2UgY29tZSB0byB0aGlzIHBsYWNlIGluIHRoZSBjb2RlIG9ubHkgaWYKKyAgICAgKiBGVF9MT0FEX05PX1NDQUxFIGlzIHNldCAodGhlIG90aGVyIGNhc2UgZ2V0cyBjYXVnaHQgYnkKKyAgICAgKiBgY2YyX2NoZWNrVHJhbnNmb3JtJykuICBUaGUgcHBlbSB2YWx1ZSBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgc3RlbQorICAgICAqIGRhcmtlbmluZywgd2hpY2ggaXMgZGlzYWJsZWQgZm9yIGdldHRpbmcgdGhlIHVuc2NhbGVkIG91dGxpbmUuCisgICAgICoKKyAgICAgKi8KKyAgICByZXR1cm4gY2YyX2ludFRvRml4ZWQoCisgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5mYWNlLT5yb290LnNpemUtPm1ldHJpY3MueV9wcGVtICk7CisgIH0KKworCisgIC8qIGdldCBzdGFuZGFyZCBzdGVtIHdpZHRocyBmb3IgdGhlIGN1cnJlbnQgc3ViZm9udDsgKi8KKyAgLyogRnJlZVR5cGUgc3RvcmVzIHRoZXNlIGFzIGludGVnZXIgZm9udCB1bml0cyAgICAgICAqLworICAvKiAobm90ZTogdmFyaWFibGUgbmFtZXMgc2VlbSBzd2FwcGVkKSAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggQ0YyX0ZpeGVkICkKKyAgY2YyX2dldFN0ZFZXKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgcmV0dXJuIGNmMl9pbnRUb0ZpeGVkKAorICAgICAgICAgICAgIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0LnN0YW5kYXJkX2hlaWdodCApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCisgIGNmMl9nZXRTdGRIVyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgKTsKKworICAgIHJldHVybiBjZjJfaW50VG9GaXhlZCgKKyAgICAgICAgICAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnByaXZhdGVfZGljdC5zdGFuZGFyZF93aWR0aCApOworICB9CisKKworICAvKiBub3RlOiBGcmVlVHlwZSBzdG9yZXMgMTAwMCB0aW1lcyB0aGUgYWN0dWFsIHZhbHVlIGZvciBgQmx1ZVNjYWxlJyAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfZ2V0Qmx1ZU1ldHJpY3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVGdXp6ICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgKTsKKworICAgICpibHVlU2NhbGUgPSBGVF9EaXZGaXgoCisgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5wcml2YXRlX2RpY3QuYmx1ZV9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICBjZjJfaW50VG9GaXhlZCggMTAwMCApICk7CisgICAgKmJsdWVTaGlmdCA9IGNmMl9pbnRUb0ZpeGVkKAorICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0LmJsdWVfc2hpZnQgKTsKKyAgICAqYmx1ZUZ1enogID0gY2YyX2ludFRvRml4ZWQoCisgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6ICk7CisgIH0KKworCisgIC8qIGdldCBibHVlIHZhbHVlcyBjb3VudHMgYW5kIGFycmF5czsgdGhlIEZyZWVUeXBlIHBhcnNlciBoYXMgdmFsaWRhdGVkICovCisgIC8qIHRoZSBjb3VudHMgYW5kIHZlcmlmaWVkIHRoYXQgZWFjaCBpcyBhbiBldmVuIG51bWJlciAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9nZXRCbHVlVmFsdWVzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICpkYXRhICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgKTsKKworICAgICpjb3VudCA9IGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0Lm51bV9ibHVlX3ZhbHVlczsKKyAgICAqZGF0YSAgPSAoRlRfUG9zKikKKyAgICAgICAgICAgICAgICZkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnByaXZhdGVfZGljdC5ibHVlX3ZhbHVlczsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2dldE90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgKmNvdW50ID0gZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5wcml2YXRlX2RpY3QubnVtX290aGVyX2JsdWVzOworICAgICpkYXRhICA9IChGVF9Qb3MqKQorICAgICAgICAgICAgICAgJmRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0Lm90aGVyX2JsdWVzOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfZ2V0RmFtaWx5Qmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAqZGF0YSApCisgIHsKKyAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CisKKyAgICAqY291bnQgPSBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnByaXZhdGVfZGljdC5udW1fZmFtaWx5X2JsdWVzOworICAgICpkYXRhICA9IChGVF9Qb3MqKQorICAgICAgICAgICAgICAgJmRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0LmZhbWlseV9ibHVlczsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2dldEZhbWlseU90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgKmNvdW50ID0gZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5wcml2YXRlX2RpY3QubnVtX2ZhbWlseV9vdGhlcl9ibHVlczsKKyAgICAqZGF0YSAgPSAoRlRfUG9zKikKKyAgICAgICAgICAgICAgICZkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnByaXZhdGVfZGljdC5mYW1pbHlfb3RoZXJfYmx1ZXM7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggQ0YyX0ludCApCisgIGNmMl9nZXRMYW5ndWFnZUdyb3VwKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgcmV0dXJuIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0Lmxhbmd1YWdlX2dyb3VwOworICB9CisKKworICAvKiBjb252ZXJ0IHVuYmlhc2VkIHN1YnJvdXRpbmUgaW5kZXggdG8gYENGMl9CdWZmZXInIGFuZCAqLworICAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIENGMl9JbnQgKQorICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApCisgIHsKKyAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKKworICAgIEZUX1pFUk8oIGJ1ZiApOworCisgICAgaWR4ICs9IChDRjJfVUludClkZWNvZGVyLT5nbG9iYWxzX2JpYXM7CisgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2dsb2JhbHMgKQorICAgICAgcmV0dXJuIFRSVUU7ICAgICAvKiBlcnJvciAqLworCisgICAgRlRfQVNTRVJUKCBkZWNvZGVyLT5nbG9iYWxzICk7CisKKyAgICBidWYtPnN0YXJ0ID0KKyAgICBidWYtPnB0ciAgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHhdOworICAgIGJ1Zi0+ZW5kICAgPSBkZWNvZGVyLT5nbG9iYWxzW2lkeCArIDFdOworCisgICAgcmV0dXJuIEZBTFNFOyAgICAgIC8qIHN1Y2Nlc3MgKi8KKyAgfQorCisKKyAgLyogY29udmVydCBBZG9iZVN0YW5kYXJkRW5jb2RpbmcgY29kZSB0byBDRjJfQnVmZmVyOyAqLworICAvKiB1c2VkIGZvciBzZWFjIGNvbXBvbmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZjJfZ2V0U2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKQorICB7CisgICAgQ0YyX0ludCAgIGdpZDsKKyAgICBGVF9CeXRlKiAgY2hhcnN0cmluZzsKKyAgICBGVF9VTG9uZyAgbGVuOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICk7CisKKyAgICBGVF9aRVJPKCBidWYgKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHZhbGlkIGNoYXJzZXRzLiAgICAgICAgKi8KKyAgICAvKiBUaGV5IHVzZSB0aGUgY2hhcmFjdGVyIGNvZGUsIG5vdCB0aGUgZ2x5cGggaW5kZXgsIGluIHRoaXMgY2FzZS4gKi8KKyAgICBpZiAoIGRlY29kZXItPmJ1aWxkZXIuZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICAgIGdpZCA9IGNvZGU7CisgICAgZWxzZQorI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKyAgICB7CisgICAgICBnaWQgPSBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBkZWNvZGVyLT5jZmYsIGNvZGUgKTsKKyAgICAgIGlmICggZ2lkIDwgMCApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICBlcnJvciA9IGNmZl9nZXRfZ2x5cGhfZGF0YSggZGVjb2Rlci0+YnVpbGRlci5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0YyX1VJbnQpZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbiApOworICAgIC8qIFRPRE86IGZvciBub3csIGp1c3QgcGFzcyB0aGUgRnJlZVR5cGUgZXJyb3IgdGhyb3VnaCAqLworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgLyogYXNzdW1lIGlucHV0IGhhcyBiZWVuIHZhbGlkYXRlZCAqLworICAgIEZUX0FTU0VSVCggY2hhcnN0cmluZyArIGxlbiA+PSBjaGFyc3RyaW5nICk7CisKKyAgICBidWYtPnN0YXJ0ID0gY2hhcnN0cmluZzsKKyAgICBidWYtPmVuZCAgID0gY2hhcnN0cmluZyArIGxlbjsKKyAgICBidWYtPnB0ciAgID0gYnVmLT5zdGFydDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9mcmVlU2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciApOworCisgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZGVjb2Rlci0+YnVpbGRlci5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiopJmJ1Zi0+c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKSggYnVmLT5lbmQgLSBidWYtPnN0YXJ0ICkgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBDRjJfSW50ICkKKyAgY2YyX2luaXRMb2NhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfVUludCAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICk7CisKKyAgICBGVF9aRVJPKCBidWYgKTsKKworICAgIGlkeCArPSAoQ0YyX1VJbnQpZGVjb2Rlci0+bG9jYWxzX2JpYXM7CisgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2xvY2FscyApCisgICAgICByZXR1cm4gVFJVRTsgICAgIC8qIGVycm9yICovCisKKyAgICBGVF9BU1NFUlQoIGRlY29kZXItPmxvY2FscyApOworCisgICAgYnVmLT5zdGFydCA9CisgICAgYnVmLT5wdHIgICA9IGRlY29kZXItPmxvY2Fsc1tpZHhdOworICAgIGJ1Zi0+ZW5kICAgPSBkZWNvZGVyLT5sb2NhbHNbaWR4ICsgMV07CisKKyAgICByZXR1cm4gRkFMU0U7ICAgICAgLyogc3VjY2VzcyAqLworICB9CisKKworICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCisgIGNmMl9nZXREZWZhdWx0V2lkdGhYKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICB7CisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOworCisgICAgcmV0dXJuIGNmMl9pbnRUb0ZpeGVkKAorICAgICAgICAgICAgIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cHJpdmF0ZV9kaWN0LmRlZmF1bHRfd2lkdGggKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQorICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgeworICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgKTsKKworICAgIHJldHVybiBjZjJfaW50VG9GaXhlZCgKKyAgICAgICAgICAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnByaXZhdGVfZGljdC5ub21pbmFsX3dpZHRoICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9vdXRsaW5lX3Jlc2V0KCBDRjJfT3V0bGluZSAgb3V0bGluZSApCisgIHsKKyAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBvdXRsaW5lLT5kZWNvZGVyOworCisKKyAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKKworICAgIG91dGxpbmUtPnJvb3Qud2luZGluZ01vbWVudHVtID0gMDsKKworICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggZGVjb2Rlci0+YnVpbGRlci5sb2FkZXIgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX291dGxpbmVfY2xvc2UoIENGMl9PdXRsaW5lICBvdXRsaW5lICkKKyAgeworICAgIENGRl9EZWNvZGVyKiAgZGVjb2RlciA9IG91dGxpbmUtPmRlY29kZXI7CisKKworICAgIEZUX0FTU0VSVCggZGVjb2RlciApOworCisgICAgY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciggJmRlY29kZXItPmJ1aWxkZXIgKTsKKworICAgIEZUX0dseXBoTG9hZGVyX0FkZCggZGVjb2Rlci0+YnVpbGRlci5sb2FkZXIgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyZnQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3M2RmMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmZ0LmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMmZ0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBHbHVlIENvbXBvbmVudCB0byBBZG9iZSdzIEludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0YyRlRfSF9fCisjZGVmaW5lIF9fQ0YyRlRfSF9fCisKKworI2luY2x1ZGUgImNmMnR5cGVzLmgiCisKKworICAvKiBUT0RPOiBkaXNhYmxlIGFzc2VydHMgZm9yIG5vdyAqLworI2RlZmluZSBDRjJfTkRFQlVHCisKKworI2luY2x1ZGUgRlRfU1lTVEVNX0gKKworI2luY2x1ZGUgImNmMmdsdWUuaCIKKyNpbmNsdWRlICJjZmZnbG9hZC5oIiAgICAvKiBmb3IgQ0ZGX0RlY29kZXIgKi8KKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKworICBGVF9MT0NBTCggQ0ZGX1N1YkZvbnQgKQorICBjZjJfZ2V0U3ViZm9udCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7CisKKworICBGVF9MT0NBTCggQ0YyX0ZpeGVkICkKKyAgY2YyX2dldFBwZW1ZKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKKyAgRlRfTE9DQUwoIENGMl9GaXhlZCApCisgIGNmMl9nZXRTdGRWVyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7CisgIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQorICBjZjJfZ2V0U3RkSFcoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2dldEJsdWVNZXRyaWNzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICBibHVlU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICBibHVlU2hpZnQsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICBibHVlRnV6eiApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nZXRCbHVlVmFsdWVzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICpkYXRhICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2dldE90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2V0RmFtaWx5Qmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAqZGF0YSApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nZXRGYW1pbHlPdGhlckJsdWVzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICpkYXRhICk7CisKKyAgRlRfTE9DQUwoIENGMl9JbnQgKQorICBjZjJfZ2V0TGFuZ3VhZ2VHcm91cCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7CisKKyAgRlRfTE9DQUwoIENGMl9JbnQgKQorICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZjJfZ2V0U2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOworICBGVF9MT0NBTCggQ0YyX0ludCApCisgIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICk7CisKKyAgRlRfTE9DQUwoIENGMl9GaXhlZCApCisgIGNmMl9nZXREZWZhdWx0V2lkdGhYKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKKyAgRlRfTE9DQUwoIENGMl9GaXhlZCApCisgIGNmMl9nZXROb21pbmFsV2lkdGhYKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKKworCisgIC8qCisgICAqIEZyZWVUeXBlIGNsaWVudCBvdXRsaW5lCisgICAqCisgICAqIHByb2Nlc3Mgb3V0cHV0IGZyb20gdGhlIGNoYXJzdHJpbmcgaW50ZXJwcmV0ZXIKKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfT3V0bGluZVJlY18KKyAgeworICAgIENGMl9PdXRsaW5lQ2FsbGJhY2tzUmVjICByb290OyAgICAgICAgLyogYmFzZSBjbGFzcyBtdXN0IGJlIGZpcnN0ICovCisgICAgQ0ZGX0RlY29kZXIqICAgICAgICAgICAgIGRlY29kZXI7CisKKyAgfSBDRjJfT3V0bGluZVJlYywgKkNGMl9PdXRsaW5lOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfb3V0bGluZV9yZXNldCggQ0YyX091dGxpbmUgIG91dGxpbmUgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfb3V0bGluZV9jbG9zZSggQ0YyX091dGxpbmUgIG91dGxpbmUgKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fQ0YyRlRfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJnbHVlLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJnbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0ZGEzOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmdsdWUuaApAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YyZ2x1ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3Igc2hhcmVkIHN0dWZmIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRjJHTFVFX0hfXworI2RlZmluZSBfX0NGMkdMVUVfSF9fCisKKworLyogY29tbW9uIGluY2x1ZGVzIGZvciBvdGhlciBtb2R1bGVzICovCisjaW5jbHVkZSAiY2YyZXJyb3IuaCIKKyNpbmNsdWRlICJjZjJmaXhlZC5oIgorI2luY2x1ZGUgImNmMmFycnN0LmgiCisjaW5jbHVkZSAiY2YycmVhZC5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyogcmVuZGVyaW5nIHBhcmFtZXRlcnMgKi8KKworICAvKiBhcHBseSBoaW50cyB0byByZW5kZXJlZCBnbHlwaHMgKi8KKyNkZWZpbmUgQ0YyX0ZsYWdzSGludGVkICAgIDEKKyAgLyogZm9yIHRlc3RpbmcgKi8KKyNkZWZpbmUgQ0YyX0ZsYWdzRGFya2VuZWQgIDIKKworICAvKiB0eXBlIGZvciBob2xkaW5nIHRoZSBmbGFncyAqLworICB0eXBlZGVmIENGMl9JbnQgIENGMl9SZW5kZXJpbmdGbGFnczsKKworCisgIC8qIGVsZW1lbnRzIG9mIGEgZ2x5cGggb3V0bGluZSAqLworICB0eXBlZGVmIGVudW0gIENGMl9QYXRoT3BfCisgIHsKKyAgICBDRjJfUGF0aE9wTW92ZVRvID0gMSwgICAgIC8qIGNoYW5nZSB0aGUgY3VycmVudCBwb2ludCAqLworICAgIENGMl9QYXRoT3BMaW5lVG8gPSAyLCAgICAgLyogbGluZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ0YyX1BhdGhPcFF1YWRUbyA9IDMsICAgICAvKiBxdWFkcmF0aWMgY3VydmUgICAgICAgICAgKi8KKyAgICBDRjJfUGF0aE9wQ3ViZVRvID0gNCAgICAgIC8qIGN1YmljIGN1cnZlICAgICAgICAgICAgICAqLworCisgIH0gQ0YyX1BhdGhPcDsKKworCisgIC8qIGEgbWF0cml4IG9mIGZpeGVkIHBvaW50IHZhbHVlcyAqLworICB0eXBlZGVmIHN0cnVjdCAgQ0YyX01hdHJpeF8KKyAgeworICAgIENGMl9GMTZEb3QxNiAgYTsKKyAgICBDRjJfRjE2RG90MTYgIGI7CisgICAgQ0YyX0YxNkRvdDE2ICBjOworICAgIENGMl9GMTZEb3QxNiAgZDsKKyAgICBDRjJfRjE2RG90MTYgIHR4OworICAgIENGMl9GMTZEb3QxNiAgdHk7CisKKyAgfSBDRjJfTWF0cml4OworCisKKyAgLyogdGhlc2UgdHlwZWRlZnMgYXJlIG5lZWRlZCBieSBtb3JlIHRoYW4gb25lIGhlYWRlciBmaWxlICovCisgIC8qIGFuZCBnY2MgY29tcGlsZXIgZG9lc24ndCBhbGxvdyByZWRlZmluaXRpb24gICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBDRjJfRm9udFJlY18gIENGMl9Gb250UmVjLCAqQ0YyX0ZvbnQ7CisgIHR5cGVkZWYgc3RydWN0IENGMl9IaW50UmVjXyAgQ0YyX0hpbnRSZWMsICpDRjJfSGludDsKKworCisgIC8qIEEgY29tbW9uIHN0cnVjdHVyZSBmb3IgYWxsIGNhbGxiYWNrIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU29tZSBtZW1iZXJzIG1heSBiZSB1bnVzZWQuICBGb3IgZXhhbXBsZSwgYHB0MCcgaXMgbm90IHVzZWQgZm9yICAgICAgICovCisgIC8qIGBtb3ZlVG8nIGFuZCBgcHQzJyBpcyBub3QgdXNlZCBmb3IgYHF1YWRUbycuICBUaGUgaW5pdGlhbCBwb2ludCBgcHQwJyAqLworICAvKiBpcyBpbmNsdWRlZCBmb3IgZWFjaCBwYXRoIGVsZW1lbnQgZm9yIGdlbmVyYWxpdHk7IGN1cnZlIGNvbnZlcnNpb25zICAgKi8KKyAgLyogbmVlZCBpdC4gIFRoZSBgb3AnIHBhcmFtZXRlciBhbGxvd3Mgb25lIGZ1bmN0aW9uIHRvIGhhbmRsZSBtdWx0aXBsZSAgICovCisgIC8qIGVsZW1lbnQgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfQ2FsbGJhY2tQYXJhbXNSZWNfCisgIHsKKyAgICBGVF9WZWN0b3IgIHB0MDsKKyAgICBGVF9WZWN0b3IgIHB0MTsKKyAgICBGVF9WZWN0b3IgIHB0MjsKKyAgICBGVF9WZWN0b3IgIHB0MzsKKworICAgIENGMl9JbnQgIG9wOworCisgIH0gQ0YyX0NhbGxiYWNrUGFyYW1zUmVjLCAqQ0YyX0NhbGxiYWNrUGFyYW1zOworCisKKyAgLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgQ0YyX091dGxpbmVDYWxsYmFja3NSZWNfICBDRjJfT3V0bGluZUNhbGxiYWNrc1JlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ0YyX091dGxpbmVDYWxsYmFja3M7CisKKyAgLyogY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqQ0YyX0NhbGxiYWNrX1R5cGUpKCBDRjJfT3V0bGluZUNhbGxiYWNrcyAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGMl9DYWxsYmFja1BhcmFtcyAgcGFyYW1zICk7CisKKworICBzdHJ1Y3QgIENGMl9PdXRsaW5lQ2FsbGJhY2tzUmVjXworICB7CisgICAgQ0YyX0NhbGxiYWNrX1R5cGUgIG1vdmVUbzsKKyAgICBDRjJfQ2FsbGJhY2tfVHlwZSAgbGluZVRvOworICAgIENGMl9DYWxsYmFja19UeXBlICBxdWFkVG87CisgICAgQ0YyX0NhbGxiYWNrX1R5cGUgIGN1YmVUbzsKKworICAgIENGMl9JbnQgIHdpbmRpbmdNb21lbnR1bTsgICAgLyogZm9yIHdpbmRpbmcgb3JkZXIgZGV0ZWN0aW9uICovCisKKyAgICBGVF9NZW1vcnkgIG1lbW9yeTsKKyAgICBGVF9FcnJvciogIGVycm9yOworICB9OworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRjJHTFVFX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaGludHMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmhpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNzAwMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmhpbnRzLmMKQEAgLTAsMCArMSwxODQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZjJoaW50cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQWRvYmUncyBjb2RlIGZvciBoYW5kbGluZyBDRkYgaGludHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCisvKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLworLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KKy8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCisvKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KKy8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCisvKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLworLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KKy8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCisvKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLworLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KKy8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCisvKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLworLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KKy8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCisvKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLworLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KKy8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCisvKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLworLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLworLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCisvKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImNmMmZ0LmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlICJjZjJnbHVlLmgiCisjaW5jbHVkZSAiY2YyZm9udC5oIgorI2luY2x1ZGUgImNmMmhpbnRzLmgiCisjaW5jbHVkZSAiY2YyaW50cnAuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmMmhpbnRzCisKKworICB0eXBlZGVmIHN0cnVjdCAgQ0YyX0hpbnRNb3ZlUmVjXworICB7CisgICAgc2l6ZV90ICAgICBqOyAgICAgICAgICAvKiBpbmRleCBvZiB1cHBlciBoaW50IG1hcCBlZGdlICAgKi8KKyAgICBDRjJfRml4ZWQgIG1vdmVVcDsgICAgIC8qIGFkanVzdG1lbnQgdG8gb3B0aW11bSBwb3NpdGlvbiAqLworCisgIH0gQ0YyX0hpbnRNb3ZlUmVjLCAqQ0YyX0hpbnRNb3ZlOworCisKKyAgLyogQ29tcHV0ZSBhbmd1bGFyIG1vbWVudHVtIGZvciB3aW5kaW5nIG9yZGVyIGRldGVjdGlvbi4gIEl0IGlzIGNhbGxlZCAqLworICAvKiBmb3IgYWxsIGxpbmVzIGFuZCBjdXJ2ZXMsIGJ1dCBub3QgbmVjZXNzYXJpbHkgaW4gZWxlbWVudCBvcmRlci4gICAgICovCisgIHN0YXRpYyBDRjJfSW50CisgIGNmMl9nZXRXaW5kaW5nTW9tZW50dW0oIENGMl9GaXhlZCAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgeTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgeTIgKQorICB7CisgICAgLyogY3Jvc3MgcHJvZHVjdCBvZiBwdDEgcG9zaXRpb24gZnJvbSBvcmlnaW4gd2l0aCBwdDIgcG9zaXRpb24gZnJvbSAgKi8KKyAgICAvKiBwdDE7IHdlIHJlZHVjZSB0aGUgcHJlY2lzaW9uIHNvIHRoYXQgdGhlIHJlc3VsdCBmaXRzIGludG8gMzIgYml0cyAqLworCisgICAgcmV0dXJuICggeDEgPj4gMTYgKSAqICggKCB5MiAtIHkxICkgPj4gMTYgKSAtCisgICAgICAgICAgICggeTEgPj4gMTYgKSAqICggKCB4MiAtIHgxICkgPj4gMTYgKTsKKyAgfQorCisKKyAgLyoKKyAgICogQ29uc3RydWN0IGZyb20gYSBTdGVtSGludDsgdGhpcyBpcyB1c2VkIGFzIGEgcGFyYW1ldGVyIHRvCisgICAqIGBjZjJfYmx1ZXNfY2FwdHVyZScuCisgICAqIGBoaW50T3JpZ2luJyBpcyB0aGUgY2hhcmFjdGVyIHNwYWNlIGRpc3BsYWNlbWVudCBvZiBhIHNlYWMgYWNjZW50LgorICAgKiBBZGp1c3Qgc3RlbSBoaW50IGZvciBkYXJrZW5pbmcgaGVyZS4KKyAgICoKKyAgICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9oaW50X2luaXQoIENGMl9IaW50ICAgICAgICAgICAgaGludCwKKyAgICAgICAgICAgICAgICAgY29uc3QgQ0YyX0FyclN0YWNrICBzdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgICAgIGluZGV4U3RlbUhpbnQsCisgICAgICAgICAgICAgICAgIGNvbnN0IENGMl9Gb250ICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICBoaW50T3JpZ2luLAorICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICAgICAgIHNjYWxlLAorICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICAgIGJvdHRvbSApCisgIHsKKyAgICBDRjJfRml4ZWQgICAgICAgICAgICAgICB3aWR0aDsKKyAgICBjb25zdCBDRjJfU3RlbUhpbnRSZWMqICBzdGVtSGludDsKKworCisgICAgRlRfWkVSTyggaGludCApOworCisgICAgc3RlbUhpbnQgPSAoY29uc3QgQ0YyX1N0ZW1IaW50UmVjKiljZjJfYXJyc3RhY2tfZ2V0UG9pbnRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGVtSGludCApOworCisgICAgd2lkdGggPSBzdGVtSGludC0+bWF4IC0gc3RlbUhpbnQtPm1pbjsKKworICAgIGlmICggd2lkdGggPT0gY2YyX2ludFRvRml4ZWQoIC0yMSApICkKKyAgICB7CisgICAgICAvKiBnaG9zdCBib3R0b20gKi8KKworICAgICAgaWYgKCBib3R0b20gKQorICAgICAgeworICAgICAgICBoaW50LT5jc0Nvb3JkID0gc3RlbUhpbnQtPm1heDsKKyAgICAgICAgaGludC0+ZmxhZ3MgICA9IENGMl9HaG9zdEJvdHRvbTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaGludC0+ZmxhZ3MgPSAwOworICAgIH0KKworICAgIGVsc2UgaWYgKCB3aWR0aCA9PSBjZjJfaW50VG9GaXhlZCggLTIwICkgKQorICAgIHsKKyAgICAgIC8qIGdob3N0IHRvcCAqLworCisgICAgICBpZiAoIGJvdHRvbSApCisgICAgICAgIGhpbnQtPmZsYWdzID0gMDsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaGludC0+Y3NDb29yZCA9IHN0ZW1IaW50LT5taW47CisgICAgICAgIGhpbnQtPmZsYWdzICAgPSBDRjJfR2hvc3RUb3A7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSBpZiAoIHdpZHRoIDwgMCApCisgICAgeworICAgICAgLyogaW52ZXJ0ZWQgcGFpciAqLworCisgICAgICAvKgorICAgICAgICogSGludHMgd2l0aCBuZWdhdGl2ZSB3aWR0aHMgd2VyZSBwcm9kdWNlZCBieSBhbiBlYXJseSB2ZXJzaW9uIG9mIGEKKyAgICAgICAqIG5vbi1BZG9iZSBmb250IHRvb2wuICBUaGUgVHlwZSAyIHNwZWMgYWxsb3dzIGVkZ2UgKGdob3N0KSBoaW50cworICAgICAgICogd2l0aCBuZWdhdGl2ZSB3aWR0aHMsIGJ1dCBzYXlzCisgICAgICAgKgorICAgICAgICogICBBbGwgb3RoZXIgbmVnYXRpdmUgd2lkdGhzIGhhdmUgdW5kZWZpbmVkIG1lYW5pbmcuCisgICAgICAgKgorICAgICAgICogQ29vbFR5cGUgaGFzIGEgc2lsZW50IHdvcmthcm91bmQgdGhhdCBuZWdhdGVzIHRoZSBoaW50IHdpZHRoOyBmb3IKKyAgICAgICAqIHBlcm1pc3NpdmUgbW9kZSwgd2UgZG8gdGhlIHNhbWUgaGVyZS4KKyAgICAgICAqCisgICAgICAgKiBOb3RlOiBTdWNoIGZvbnRzIGNhbm5vdCB1c2UgZ2hvc3QgaGludHMsIGJ1dCBzaG91bGQgb3RoZXJ3aXNlIHdvcmsuCisgICAgICAgKiBOb3RlOiBTb21lIHBvb3IgaGludHMgaW4gb3VyIGZhdXggZm9udHMgY2FuIHByb2R1Y2UgbmVnYXRpdmUKKyAgICAgICAqICAgICAgIHdpZHRocyBhdCBzb21lIGJsZW5kcy4gIEZvciBleGFtcGxlLCBzZWUgYSBsaWdodCB3ZWlnaHQgb2YKKyAgICAgICAqICAgICAgIGB1JyBpbiBBU2VyaWZNTS4KKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIGlmICggYm90dG9tICkKKyAgICAgIHsKKyAgICAgICAgaGludC0+Y3NDb29yZCA9IHN0ZW1IaW50LT5tYXg7CisgICAgICAgIGhpbnQtPmZsYWdzICAgPSBDRjJfUGFpckJvdHRvbTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaGludC0+Y3NDb29yZCA9IHN0ZW1IaW50LT5taW47CisgICAgICAgIGhpbnQtPmZsYWdzICAgPSBDRjJfUGFpclRvcDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlCisgICAgeworICAgICAgLyogbm9ybWFsIHBhaXIgKi8KKworICAgICAgaWYgKCBib3R0b20gKQorICAgICAgeworICAgICAgICBoaW50LT5jc0Nvb3JkID0gc3RlbUhpbnQtPm1pbjsKKyAgICAgICAgaGludC0+ZmxhZ3MgICA9IENGMl9QYWlyQm90dG9tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBoaW50LT5jc0Nvb3JkID0gc3RlbUhpbnQtPm1heDsKKyAgICAgICAgaGludC0+ZmxhZ3MgICA9IENGMl9QYWlyVG9wOworICAgICAgfQorICAgIH0KKworICAgIC8qIE5vdyB0aGF0IGdob3N0IGhpbnRzIGhhdmUgYmVlbiBkZXRlY3RlZCwgYWRqdXN0IHRoaXMgZWRnZSBmb3IgICAgICAqLworICAgIC8qIGRhcmtlbmluZy4gIEJvdHRvbXMgYXJlIG5vdCBjaGFuZ2VkOyB0b3BzIGFyZSBpbmNyZW1lbnRlZCBieSB0d2ljZSAqLworICAgIC8qIGBkYXJrZW5ZJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggY2YyX2hpbnRfaXNUb3AoIGhpbnQgKSApCisgICAgICBoaW50LT5jc0Nvb3JkICs9IDIgKiBmb250LT5kYXJrZW5ZOworCisgICAgaGludC0+Y3NDb29yZCArPSBoaW50T3JpZ2luOworICAgIGhpbnQtPnNjYWxlICAgID0gc2NhbGU7CisgICAgaGludC0+aW5kZXggICAgPSBpbmRleFN0ZW1IaW50OyAgIC8qIGluZGV4IGluIG9yaWdpbmFsIHN0ZW0gaGludCBhcnJheSAqLworCisgICAgLyogaWYgb3JpZ2luYWwgc3RlbSBoaW50IGhhcyBiZWVuIHVzZWQsIHVzZSB0aGUgc2FtZSBwb3NpdGlvbiAqLworICAgIGlmICggaGludC0+ZmxhZ3MgIT0gMCAmJiBzdGVtSGludC0+dXNlZCApCisgICAgeworICAgICAgaWYgKCBjZjJfaGludF9pc1RvcCggaGludCApICkKKyAgICAgICAgaGludC0+ZHNDb29yZCA9IHN0ZW1IaW50LT5tYXhEUzsKKyAgICAgIGVsc2UKKyAgICAgICAgaGludC0+ZHNDb29yZCA9IHN0ZW1IaW50LT5taW5EUzsKKworICAgICAgY2YyX2hpbnRfbG9jayggaGludCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBoaW50LT5kc0Nvb3JkID0gRlRfTXVsRml4KCBoaW50LT5jc0Nvb3JkLCBzY2FsZSApOworICB9CisKKworICAvKiBpbml0aWFsaXplIGFuIGludmFsaWQgaGludCBtYXAgZWxlbWVudCAqLworICBzdGF0aWMgdm9pZAorICBjZjJfaGludF9pbml0WmVybyggQ0YyX0hpbnQgIGhpbnQgKQorICB7CisgICAgRlRfWkVSTyggaGludCApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Jvb2wgKQorICBjZjJfaGludF9pc1ZhbGlkKCBjb25zdCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCBoaW50LT5mbGFncyAhPSAwICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGNmMl9oaW50X2lzUGFpciggY29uc3QgQ0YyX0hpbnQgIGhpbnQgKQorICB7CisgICAgcmV0dXJuIChGVF9Cb29sKSggKCBoaW50LT5mbGFncyAgICAgICAgICAgICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAoIENGMl9QYWlyQm90dG9tIHwgQ0YyX1BhaXJUb3AgKSApICE9IDAgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgY2YyX2hpbnRfaXNQYWlyVG9wKCBjb25zdCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCAoIGhpbnQtPmZsYWdzICYgQ0YyX1BhaXJUb3AgKSAhPSAwICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGNmMl9oaW50X2lzVG9wKCBjb25zdCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCAoIGhpbnQtPmZsYWdzICAgICAgICAgICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAoIENGMl9QYWlyVG9wIHwgQ0YyX0dob3N0VG9wICkgKSAhPSAwICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGNmMl9oaW50X2lzQm90dG9tKCBjb25zdCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCAoIGhpbnQtPmZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAoIENGMl9QYWlyQm90dG9tIHwgQ0YyX0dob3N0Qm90dG9tICkgKSAhPSAwICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGNmMl9oaW50X2lzTG9ja2VkKCBjb25zdCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCAoIGhpbnQtPmZsYWdzICYgQ0YyX0xvY2tlZCApICE9IDAgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgY2YyX2hpbnRfaXNTeW50aGV0aWMoIGNvbnN0IENGMl9IaW50ICBoaW50ICkKKyAgeworICAgIHJldHVybiAoRlRfQm9vbCkoICggaGludC0+ZmxhZ3MgJiBDRjJfU3ludGhldGljICkgIT0gMCApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfaGludF9sb2NrKCBDRjJfSGludCAgaGludCApCisgIHsKKyAgICBoaW50LT5mbGFncyB8PSBDRjJfTG9ja2VkOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfaGludG1hcF9pbml0KCBDRjJfSGludE1hcCAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgIENGMl9Gb250ICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0hpbnRNYXAgICBpbml0aWFsTWFwLAorICAgICAgICAgICAgICAgICAgICBDRjJfQXJyU3RhY2sgIGhpbnRNb3ZlcywKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICBzY2FsZSApCisgIHsKKyAgICBGVF9aRVJPKCBoaW50bWFwICk7CisKKyAgICAvKiBjb3B5IHBhcmFtZXRlcnMgZnJvbSBmb250IGluc3RhbmNlICovCisgICAgaGludG1hcC0+aGludGVkICAgICAgICAgPSBmb250LT5oaW50ZWQ7CisgICAgaGludG1hcC0+c2NhbGUgICAgICAgICAgPSBzY2FsZTsKKyAgICBoaW50bWFwLT5mb250ICAgICAgICAgICA9IGZvbnQ7CisgICAgaGludG1hcC0+aW5pdGlhbEhpbnRNYXAgPSBpbml0aWFsTWFwOworICAgIC8qIHdpbGwgY2xlYXIgaW4gYGNmMl9oaW50bWFwX2FkanVzdEhpbnRzJyAqLworICAgIGhpbnRtYXAtPmhpbnRNb3ZlcyAgICAgID0gaGludE1vdmVzOworICB9CisKKworICBzdGF0aWMgRlRfQm9vbAorICBjZjJfaGludG1hcF9pc1ZhbGlkKCBjb25zdCBDRjJfSGludE1hcCAgaGludG1hcCApCisgIHsKKyAgICByZXR1cm4gaGludG1hcC0+aXNWYWxpZDsKKyAgfQorCisKKyAgLyogdHJhbnNmb3JtIGNoYXJhY3RlciBzcGFjZSBjb29yZGluYXRlIHRvIGRldmljZSBzcGFjZSB1c2luZyBoaW50IG1hcCAqLworICBzdGF0aWMgQ0YyX0ZpeGVkCisgIGNmMl9oaW50bWFwX21hcCggQ0YyX0hpbnRNYXAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgIGNzQ29vcmQgKQorICB7CisgICAgaWYgKCBoaW50bWFwLT5jb3VudCA9PSAwIHx8ICEgaGludG1hcC0+aGludGVkICkKKyAgICB7CisgICAgICAvKiB0aGVyZSBhcmUgbm8gaGludHM7IHVzZSB1bmlmb3JtIHNjYWxlIGFuZCB6ZXJvIG9mZnNldCAqLworICAgICAgcmV0dXJuIEZUX011bEZpeCggY3NDb29yZCwgaGludG1hcC0+c2NhbGUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIHN0YXJ0IGxpbmVhciBzZWFyY2ggZnJvbSBsYXN0IGhpdCAqLworICAgICAgQ0YyX1VJbnQgIGkgPSBoaW50bWFwLT5sYXN0SW5kZXg7CisKKyAgICAgIEZUX0FTU0VSVCggaGludG1hcC0+bGFzdEluZGV4IDwgQ0YyX01BWF9ISU5UX0VER0VTICk7CisKKyAgICAgIC8qIHNlYXJjaCB1cCAqLworICAgICAgd2hpbGUgKCBpIDwgaGludG1hcC0+Y291bnQgLSAxICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgY3NDb29yZCA+PSBoaW50bWFwLT5lZGdlW2kgKyAxXS5jc0Nvb3JkICkKKyAgICAgICAgaSArPSAxOworCisgICAgICAvKiBzZWFyY2ggZG93biAqLworICAgICAgd2hpbGUgKCBpID4gMCAmJiBjc0Nvb3JkIDwgaGludG1hcC0+ZWRnZVtpXS5jc0Nvb3JkICkKKyAgICAgICAgaSAtPSAxOworCisgICAgICBoaW50bWFwLT5sYXN0SW5kZXggPSBpOworCisgICAgICBpZiAoIGkgPT0gMCAmJiBjc0Nvb3JkIDwgaGludG1hcC0+ZWRnZVswXS5jc0Nvb3JkICkKKyAgICAgIHsKKyAgICAgICAgLyogc3BlY2lhbCBjYXNlIGZvciBwb2ludHMgYmVsb3cgZmlyc3QgZWRnZTogdXNlIHVuaWZvcm0gc2NhbGUgKi8KKyAgICAgICAgcmV0dXJuIEZUX011bEZpeCggY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbMF0uY3NDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUgKSArCisgICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbMF0uZHNDb29yZDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTm90ZTogZW50cmllcyB3aXRoIGR1cGxpY2F0ZSBjc0Nvb3JkIGFyZSBhbGxvd2VkLgorICAgICAgICAgKiBVc2UgZWRnZVtpXSwgdGhlIGhpZ2hlc3QgZW50cnkgd2hlcmUgY3NDb29yZCA+PSBlbnRyeVtpXS5jc0Nvb3JkCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gRlRfTXVsRml4KCBjc0Nvb3JkIC0gaGludG1hcC0+ZWRnZVtpXS5jc0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ldLnNjYWxlICkgKworICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQ7CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKgorICAgKiBUaGlzIGhpbnRpbmcgcG9saWN5IG1vdmVzIGEgaGludCBwYWlyIGluIGRldmljZSBzcGFjZSBzbyB0aGF0IG9uZSBvZgorICAgKiBpdHMgdHdvIGVkZ2VzIGlzIG9uIGEgZGV2aWNlIHBpeGVsIGJvdW5kYXJ5IChpdHMgZnJhY3Rpb25hbCBwYXJ0IGlzCisgICAqIHplcm8pLiAgYGNmMl9oaW50bWFwX2luc2VydEhpbnQnIGd1YXJhbnRlZXMgbm8gb3ZlcmxhcCBpbiBDUworICAgKiBzcGFjZS4gIEVuc3VyZSBoZXJlIHRoYXQgdGhlcmUgaXMgbm8gb3ZlcmxhcCBpbiBEUy4KKyAgICoKKyAgICogSW4gdGhlIGZpcnN0IHBhc3MsIGVkZ2VzIGFyZSBhZGp1c3RlZCByZWxhdGl2ZSB0byBhZGphY2VudCBoaW50cy4KKyAgICogVGhvc2UgdGhhdCBhcmUgYmVsb3cgaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQuICBUaG9zZSB0aGF0IGFyZQorICAgKiBhYm92ZSBoYXZlIG5vdCB5ZXQgYmVlbiBhZGp1c3RlZC4gIElmIGEgaGludCBhYm92ZSBibG9ja3MgYW4KKyAgICogYWRqdXN0bWVudCB0byBhbiBvcHRpbWFsIHBvc2l0aW9uLCB3ZSB3aWxsIHRyeSBhZ2FpbiBpbiBhIHNlY29uZAorICAgKiBwYXNzLiAgVGhlIHNlY29uZCBwYXNzIGlzIHRvcC1kb3duLgorICAgKgorICAgKi8KKworICBzdGF0aWMgdm9pZAorICBjZjJfaGludG1hcF9hZGp1c3RIaW50cyggQ0YyX0hpbnRNYXAgIGhpbnRtYXAgKQorICB7CisgICAgc2l6ZV90ICBpLCBqOworCisKKyAgICBjZjJfYXJyc3RhY2tfY2xlYXIoIGhpbnRtYXAtPmhpbnRNb3ZlcyApOyAgICAgIC8qIHdvcmtpbmcgc3RvcmFnZSAqLworCisgICAgLyoKKyAgICAgKiBGaXJzdCBwYXNzIGlzIGJvdHRvbS11cCAoZm9udCBoaW50IG9yZGVyKSB3aXRob3V0IGxvb2stYWhlYWQuCisgICAgICogTG9ja2VkIGVkZ2VzIGFyZSBhbHJlYWR5IGFkanVzdGVkLgorICAgICAqIFVubG9ja2VkIGVkZ2VzIGJlZ2luIHdpdGggZHNDb29yZCBmcm9tIGBpbml0aWFsSGludE1hcCcuCisgICAgICogU2F2ZSBlZGdlcyB0aGF0IGFyZSBub3Qgb3B0aW1hbGx5IGFkanVzdGVkIGluIGBoaW50TW92ZXMnIGFycmF5LAorICAgICAqIGFuZCBwcm9jZXNzIHRoZW0gaW4gc2Vjb25kIHBhc3MuCisgICAgICovCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGhpbnRtYXAtPmNvdW50OyBpKysgKQorICAgIHsKKyAgICAgIEZUX0Jvb2wgIGlzUGFpciA9IGNmMl9oaW50X2lzUGFpciggJmhpbnRtYXAtPmVkZ2VbaV0gKTsKKworCisgICAgICAvKiBpbmRleCBvZiB1cHBlciBlZGdlIChzYW1lIHZhbHVlIGZvciBnaG9zdCBoaW50KSAqLworICAgICAgaiA9IGlzUGFpciA/IGkgKyAxIDogaTsKKworICAgICAgRlRfQVNTRVJUKCBqIDwgaGludG1hcC0+Y291bnQgKTsKKyAgICAgIEZUX0FTU0VSVCggY2YyX2hpbnRfaXNWYWxpZCggJmhpbnRtYXAtPmVkZ2VbaV0gKSApOworICAgICAgRlRfQVNTRVJUKCBjZjJfaGludF9pc1ZhbGlkKCAmaGludG1hcC0+ZWRnZVtqXSApICk7CisgICAgICBGVF9BU1NFUlQoIGNmMl9oaW50X2lzTG9ja2VkKCAmaGludG1hcC0+ZWRnZVtpXSApID09CisgICAgICAgICAgICAgICAgICAgY2YyX2hpbnRfaXNMb2NrZWQoICZoaW50bWFwLT5lZGdlW2pdICkgKTsKKworICAgICAgaWYgKCAhY2YyX2hpbnRfaXNMb2NrZWQoICZoaW50bWFwLT5lZGdlW2ldICkgKQorICAgICAgeworICAgICAgICAvKiBoaW50IGVkZ2UgaXMgbm90IGxvY2tlZCwgd2UgY2FuIGFkanVzdCBpdCAqLworICAgICAgICBDRjJfRml4ZWQgIGZyYWNEb3duID0gY2YyX2ZpeGVkRnJhY3Rpb24oIGhpbnRtYXAtPmVkZ2VbaV0uZHNDb29yZCApOworICAgICAgICBDRjJfRml4ZWQgIGZyYWNVcCAgID0gY2YyX2ZpeGVkRnJhY3Rpb24oIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCApOworCisgICAgICAgIC8qIGNhbGN1bGF0ZSBhbGwgZm91ciBwb3NzaWJpbGl0aWVzOyBtb3ZlcyBkb3duIGFyZSBuZWdhdGl2ZSAqLworICAgICAgICBDRjJfRml4ZWQgIGRvd25Nb3ZlRG93biA9IDAgLSBmcmFjRG93bjsKKyAgICAgICAgQ0YyX0ZpeGVkICB1cE1vdmVEb3duICAgPSAwIC0gZnJhY1VwOworICAgICAgICBDRjJfRml4ZWQgIGRvd25Nb3ZlVXAgICA9IGZyYWNEb3duID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjZjJfaW50VG9GaXhlZCggMSApIC0gZnJhY0Rvd247CisgICAgICAgIENGMl9GaXhlZCAgdXBNb3ZlVXAgICAgID0gZnJhY1VwID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjZjJfaW50VG9GaXhlZCggMSApIC0gZnJhY1VwOworCisgICAgICAgIC8qIHNtYWxsZXN0IG1vdmUgdXAgKi8KKyAgICAgICAgQ0YyX0ZpeGVkICBtb3ZlVXAgICA9IEZUX01JTiggZG93bk1vdmVVcCwgdXBNb3ZlVXAgKTsKKyAgICAgICAgLyogc21hbGxlc3QgbW92ZSBkb3duICovCisgICAgICAgIENGMl9GaXhlZCAgbW92ZURvd24gPSBGVF9NQVgoIGRvd25Nb3ZlRG93biwgdXBNb3ZlRG93biApOworCisgICAgICAgIC8qIGZpbmFsIGFtb3VudCB0byBtb3ZlIGVkZ2Ugb3IgZWRnZSBwYWlyICovCisgICAgICAgIENGMl9GaXhlZCAgbW92ZTsKKworICAgICAgICBDRjJfRml4ZWQgIGRvd25NaW5Db3VudGVyID0gQ0YyX01JTl9DT1VOVEVSOworICAgICAgICBDRjJfRml4ZWQgIHVwTWluQ291bnRlciAgID0gQ0YyX01JTl9DT1VOVEVSOworICAgICAgICBGVF9Cb29sICAgIHNhdmVFZGdlICAgICAgID0gRkFMU0U7CisKKworICAgICAgICAvKiBtaW5pbXVtIGNvdW50ZXIgY29uc3RyYWludCBkb2Vzbid0IGFwcGx5IHdoZW4gYWRqYWNlbnQgZWRnZXMgKi8KKyAgICAgICAgLyogYXJlIHN5bnRoZXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFRPRE86IGRvZXNuJ3Qgc2VlbSBhIGJpZyBlZmZlY3Q7IGZvciBub3csIHJlZHVjZSB0aGUgY29kZSAgICAqLworI2lmIDAKKyAgICAgICAgaWYgKCBpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICBjZjJfaGludF9pc1N5bnRoZXRpYyggJmhpbnRtYXAtPmVkZ2VbaSAtIDFdICkgKQorICAgICAgICAgIGRvd25NaW5Db3VudGVyID0gMDsKKworICAgICAgICBpZiAoIGogPj0gaGludG1hcC0+Y291bnQgLSAxICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgIGNmMl9oaW50X2lzU3ludGhldGljKCAmaGludG1hcC0+ZWRnZVtqICsgMV0gKSApCisgICAgICAgICAgdXBNaW5Db3VudGVyID0gMDsKKyNlbmRpZgorCisgICAgICAgIC8qIGlzIHRoZXJlIHJvb20gdG8gbW92ZSB1cD8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiB0aGVyZSBpcyBpZiB3ZSBhcmUgYXQgdG9wIG9mIGFycmF5IG9yIHRoZSBuZXh0IGVkZ2UgaXMgYXQgb3IgKi8KKyAgICAgICAgLyogYmV5b25kIHByb3Bvc2VkIG1vdmUgdXA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggaiA+PSBoaW50bWFwLT5jb3VudCAtIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogKyAxXS5kc0Nvb3JkID49CisgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQgKyBtb3ZlVXAgKyB1cE1pbkNvdW50ZXIgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhlcmUgaXMgcm9vbSB0byBtb3ZlIHVwOyBpcyB0aGVyZSBhbHNvIHJvb20gdG8gbW92ZSBkb3duPyAqLworICAgICAgICAgIGlmICggaSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2kgLSAxXS5kc0Nvb3JkIDw9CisgICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uZHNDb29yZCArIG1vdmVEb3duIC0gZG93bk1pbkNvdW50ZXIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG1vdmUgc21hbGxlciBhYnNvbHV0ZSBhbW91bnQgKi8KKyAgICAgICAgICAgIG1vdmUgPSAoIC1tb3ZlRG93biA8IG1vdmVVcCApID8gbW92ZURvd24gOiBtb3ZlVXA7ICAvKiBvcHRpbXVtICovCisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmUgPSBtb3ZlVXA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogaXMgdGhlcmUgcm9vbSB0byBtb3ZlIGRvd24/ICovCisgICAgICAgICAgaWYgKCBpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQgPD0KKyAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkICsgbW92ZURvd24gLSBkb3duTWluQ291bnRlciApCisgICAgICAgICAgeworICAgICAgICAgICAgbW92ZSAgICAgPSBtb3ZlRG93bjsKKyAgICAgICAgICAgIC8qIHRydWUgaWYgbm9uLW9wdGltdW0gbW92ZSAqLworICAgICAgICAgICAgc2F2ZUVkZ2UgPSAoRlRfQm9vbCkoIG1vdmVVcCA8IC1tb3ZlRG93biApOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogbm8gcm9vbSB0byBtb3ZlIGVpdGhlciB3YXkgd2l0aG91dCBvdmVybGFwcGluZyBvciByZWR1Y2luZyAqLworICAgICAgICAgICAgLyogdGhlIGNvdW50ZXIgdG9vIG11Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZSAgICAgPSAwOworICAgICAgICAgICAgc2F2ZUVkZ2UgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIElkZW50aWZ5IG5vbi1tb3ZlcyBhbmQgbW92ZXMgZG93biB0aGF0IGFyZW4ndCBvcHRpbWFsLCBhbmQgc2F2ZSAqLworICAgICAgICAvKiB0aGVtIGZvciBzZWNvbmQgcGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogRG8gdGhpcyBvbmx5IGlmIHRoZXJlIGlzIGFuIHVubG9ja2VkIGVkZ2UgYWJvdmUgKHdoaWNoIGNvdWxkICAgICovCisgICAgICAgIC8qIHBvc3NpYmx5IG1vdmUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIHNhdmVFZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBqIDwgaGludG1hcC0+Y291bnQgLSAxICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgIWNmMl9oaW50X2lzTG9ja2VkKCAmaGludG1hcC0+ZWRnZVtqICsgMV0gKSApCisgICAgICAgIHsKKyAgICAgICAgICBDRjJfSGludE1vdmVSZWMgIHNhdmVkTW92ZTsKKworCisgICAgICAgICAgc2F2ZWRNb3ZlLmogICAgICA9IGo7CisgICAgICAgICAgLyogZGVzaXJlZCBhZGp1c3RtZW50IGluIHNlY29uZCBwYXNzICovCisgICAgICAgICAgc2F2ZWRNb3ZlLm1vdmVVcCA9IG1vdmVVcCAtIG1vdmU7CisKKyAgICAgICAgICBjZjJfYXJyc3RhY2tfcHVzaCggaGludG1hcC0+aGludE1vdmVzLCAmc2F2ZWRNb3ZlICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBtb3ZlIHRoZSBlZGdlKHMpICovCisgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uZHNDb29yZCArPSBtb3ZlOworICAgICAgICBpZiAoIGlzUGFpciApCisgICAgICAgICAgaGludG1hcC0+ZWRnZVtqXS5kc0Nvb3JkICs9IG1vdmU7CisgICAgICB9CisKKyAgICAgIC8qIGFzc2VydCB0aGVyZSBhcmUgbm8gb3ZlcmxhcHMgaW4gZGV2aWNlIHNwYWNlICovCisgICAgICBGVF9BU1NFUlQoIGkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQgPD0gaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkICk7CisgICAgICBGVF9BU1NFUlQoIGkgPCBqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkIDw9IGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCApOworCisgICAgICAvKiBhZGp1c3QgdGhlIHNjYWxlcywgYXZvaWRpbmcgZGl2aWRlIGJ5IHplcm8gKi8KKyAgICAgIGlmICggaSA+IDAgKQorICAgICAgeworICAgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2VbaV0uY3NDb29yZCAhPSBoaW50bWFwLT5lZGdlW2kgLSAxXS5jc0Nvb3JkICkKKyAgICAgICAgICBoaW50bWFwLT5lZGdlW2kgLSAxXS5zY2FsZSA9CisgICAgICAgICAgICBGVF9EaXZGaXgoCisgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uZHNDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQsCisgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmNzQ29vcmQgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBpc1BhaXIgKQorICAgICAgeworICAgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2Vbal0uY3NDb29yZCAhPSBoaW50bWFwLT5lZGdlW2ogLSAxXS5jc0Nvb3JkICkKKyAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogLSAxXS5zY2FsZSA9CisgICAgICAgICAgICBGVF9EaXZGaXgoCisgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaiAtIDFdLmRzQ29vcmQsCisgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaiAtIDFdLmNzQ29vcmQgKTsKKworICAgICAgICBpICs9IDE7ICAgICAvKiBza2lwIHVwcGVyIGVkZ2Ugb24gbmV4dCBsb29wICovCisgICAgICB9CisgICAgfQorCisgICAgLyogc2Vjb25kIHBhc3MgdHJpZXMgdG8gbW92ZSBub24tb3B0aW1hbCBoaW50cyB1cCwgaW4gY2FzZSB0aGVyZSBpcyAqLworICAgIC8qIHJvb20gbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBmb3IgKCBpID0gY2YyX2FycnN0YWNrX3NpemUoIGhpbnRtYXAtPmhpbnRNb3ZlcyApOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICBDRjJfSGludE1vdmUgIGhpbnRNb3ZlID0gKENGMl9IaW50TW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlciggaGludG1hcC0+aGludE1vdmVzLCBpIC0gMSApOworCisKKyAgICAgIGogPSBoaW50TW92ZS0+ajsKKworICAgICAgLyogdGhpcyB3YXMgdGVzdGVkIGJlZm9yZSB0aGUgcHVzaCwgYWJvdmUgKi8KKyAgICAgIEZUX0FTU0VSVCggaiA8IGhpbnRtYXAtPmNvdW50IC0gMSApOworCisgICAgICAvKiBpcyB0aGVyZSByb29tIHRvIG1vdmUgdXA/ICovCisgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2VbaiArIDFdLmRzQ29vcmQgPj0KKyAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQgKyBoaW50TW92ZS0+bW92ZVVwICsgQ0YyX01JTl9DT1VOVEVSICkKKyAgICAgIHsKKyAgICAgICAgLyogdGhlcmUgaXMgbW9yZSByb29tIG5vdywgbW92ZSBlZGdlIHVwICovCisgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCArPSBoaW50TW92ZS0+bW92ZVVwOworCisgICAgICAgIGlmICggY2YyX2hpbnRfaXNQYWlyKCAmaGludG1hcC0+ZWRnZVtqXSApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0FTU0VSVCggaiA+IDAgKTsKKyAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogLSAxXS5kc0Nvb3JkICs9IGhpbnRNb3ZlLT5tb3ZlVXA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qIGluc2VydCBoaW50IGVkZ2VzIGludG8gbWFwLCBzb3J0ZWQgYnkgY3NDb29yZCAqLworICBzdGF0aWMgdm9pZAorICBjZjJfaGludG1hcF9pbnNlcnRIaW50KCBDRjJfSGludE1hcCAgaGludG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0hpbnQgICAgIGJvdHRvbUhpbnRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSGludCAgICAgdG9wSGludEVkZ2UgKQorICB7CisgICAgQ0YyX1VJbnQgIGluZGV4SW5zZXJ0OworCisgICAgLyogc2V0IGRlZmF1bHQgdmFsdWVzLCB0aGVuIGNoZWNrIGZvciBlZGdlIGhpbnRzICovCisgICAgRlRfQm9vbCAgIGlzUGFpciAgICAgICAgID0gVFJVRTsKKyAgICBDRjJfSGludCAgZmlyc3RIaW50RWRnZSAgPSBib3R0b21IaW50RWRnZTsKKyAgICBDRjJfSGludCAgc2Vjb25kSGludEVkZ2UgPSB0b3BIaW50RWRnZTsKKworCisgICAgLyogb25lIG9yIG5vbmUgb2YgdGhlIGlucHV0IHBhcmFtcyBtYXkgYmUgaW52YWxpZCB3aGVuIGRlYWxpbmcgd2l0aCAqLworICAgIC8qIGVkZ2UgaGludHM7IGF0IGxlYXN0IG9uZSBlZGdlIG11c3QgYmUgdmFsaWQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9BU1NFUlQoIGNmMl9oaW50X2lzVmFsaWQoIGJvdHRvbUhpbnRFZGdlICkgfHwKKyAgICAgICAgICAgICAgIGNmMl9oaW50X2lzVmFsaWQoIHRvcEhpbnRFZGdlICkgICAgKTsKKworICAgIC8qIGRldGVybWluZSBob3cgbWFueSBhbmQgd2hpY2ggZWRnZXMgdG8gaW5zZXJ0ICovCisgICAgaWYgKCAhY2YyX2hpbnRfaXNWYWxpZCggYm90dG9tSGludEVkZ2UgKSApCisgICAgeworICAgICAgLyogaW5zZXJ0IG9ubHkgdGhlIHRvcCBlZGdlICovCisgICAgICBmaXJzdEhpbnRFZGdlID0gdG9wSGludEVkZ2U7CisgICAgICBpc1BhaXIgICAgICAgID0gRkFMU0U7CisgICAgfQorICAgIGVsc2UgaWYgKCAhY2YyX2hpbnRfaXNWYWxpZCggdG9wSGludEVkZ2UgKSApCisgICAgeworICAgICAgLyogaW5zZXJ0IG9ubHkgdGhlIGJvdHRvbSBlZGdlICovCisgICAgICBpc1BhaXIgPSBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBwYWlyZWQgZWRnZXMgbXVzdCBiZSBpbiBwcm9wZXIgb3JkZXIgKi8KKyAgICBGVF9BU1NFUlQoICFpc1BhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICB0b3BIaW50RWRnZS0+Y3NDb29yZCA+PSBib3R0b21IaW50RWRnZS0+Y3NDb29yZCApOworCisgICAgLyogbGluZWFyIHNlYXJjaCB0byBmaW5kIGluZGV4IHZhbHVlIG9mIGluc2VydGlvbiBwb2ludCAqLworICAgIGluZGV4SW5zZXJ0ID0gMDsKKyAgICBmb3IgKCA7IGluZGV4SW5zZXJ0IDwgaGludG1hcC0+Y291bnQ7IGluZGV4SW5zZXJ0KysgKQorICAgIHsKKyAgICAgIGlmICggaGludG1hcC0+ZWRnZVtpbmRleEluc2VydF0uY3NDb29yZCA+PSBmaXJzdEhpbnRFZGdlLT5jc0Nvb3JkICkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEaXNjYXJkIGFueSBoaW50cyB0aGF0IG92ZXJsYXAgaW4gY2hhcmFjdGVyIHNwYWNlLiAgTW9zdCBvZnRlbiwgdGhpcworICAgICAqIGlzIHdoaWxlIGJ1aWxkaW5nIHRoZSBpbml0aWFsIG1hcCwgd2hlcmUgY2FwdHVyZWQgaGludHMgZnJvbSBhbGwKKyAgICAgKiB6b25lcyBhcmUgY29tYmluZWQuICBEZWZpbmUgb3ZlcmxhcCB0byBpbmNsdWRlIGhpbnRzIHRoYXQgYHRvdWNoJworICAgICAqIChvdmVybGFwIHplcm8pLiAgSGlyYWdpbm8gU2Fucy9Hb3RoaWMgZm9udHMgaGF2ZSBudW1lcm91cyBoaW50cyB0aGF0CisgICAgICogdG91Y2guICBTb21lIGZvbnRzIGhhdmUgbm9uLWlkZW9ncmFwaGljIGdseXBocyB0aGF0IG92ZXJsYXAgb3VyCisgICAgICogc3ludGhldGljIGhpbnRzLgorICAgICAqCisgICAgICogT3ZlcmxhcCBhbHNvIG9jY3VycyB3aGVuIGRhcmtlbmluZyBzdGVtIGhpbnRzIHRoYXQgYXJlIGNsb3NlLgorICAgICAqCisgICAgICovCisgICAgaWYgKCBpbmRleEluc2VydCA8IGhpbnRtYXAtPmNvdW50ICkKKyAgICB7CisgICAgICAvKiB3ZSBhcmUgaW5zZXJ0aW5nIGJlZm9yZSBhbiBleGlzdGluZyBlZGdlOiAgICAqLworICAgICAgLyogdmVyaWZ5IHRoYXQgYW4gZXhpc3RpbmcgZWRnZSBpcyBub3QgdGhlIHNhbWUgKi8KKyAgICAgIGlmICggaGludG1hcC0+ZWRnZVtpbmRleEluc2VydF0uY3NDb29yZCA9PSBmaXJzdEhpbnRFZGdlLT5jc0Nvb3JkICkKKyAgICAgICAgcmV0dXJuOyAvKiBpZ25vcmUgb3ZlcmxhcHBpbmcgc3RlbSBoaW50ICovCisKKyAgICAgIC8qIHZlcmlmeSB0aGF0IGEgbmV3IHBhaXIgZG9lcyBub3Qgc3RyYWRkbGUgdGhlIG5leHQgZWRnZSAqLworICAgICAgaWYgKCBpc1BhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaW5kZXhJbnNlcnRdLmNzQ29vcmQgPD0gc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQgKQorICAgICAgICByZXR1cm47IC8qIGlnbm9yZSBvdmVybGFwcGluZyBzdGVtIGhpbnQgKi8KKworICAgICAgLyogdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCBpbnNlcnRpbmcgYmV0d2VlbiBwYWlyZWQgZWRnZXMgKi8KKyAgICAgIGlmICggY2YyX2hpbnRfaXNQYWlyVG9wKCAmaGludG1hcC0+ZWRnZVtpbmRleEluc2VydF0gKSApCisgICAgICAgIHJldHVybjsgLyogaWdub3JlIG92ZXJsYXBwaW5nIHN0ZW0gaGludCAqLworICAgIH0KKworICAgIC8qIHJlY29tcHV0ZSBkZXZpY2Ugc3BhY2UgbG9jYXRpb25zIHVzaW5nIGluaXRpYWwgaGludCBtYXAgKi8KKyAgICBpZiAoIGNmMl9oaW50bWFwX2lzVmFsaWQoIGhpbnRtYXAtPmluaXRpYWxIaW50TWFwICkgJiYKKyAgICAgICAgICFjZjJfaGludF9pc0xvY2tlZCggZmlyc3RIaW50RWRnZSApICAgICAgICAgICAgKQorICAgIHsKKyAgICAgIGlmICggaXNQYWlyICkKKyAgICAgIHsKKyAgICAgICAgLyogVXNlIGhpbnQgbWFwIHRvIHBvc2l0aW9uIHRoZSBjZW50ZXIgb2Ygc3RlbSwgYW5kIG5vbWluYWwgc2NhbGUgKi8KKyAgICAgICAgLyogdG8gcG9zaXRpb24gdGhlIHR3byBlZGdlcy4gIFRoaXMgcHJlc2VydmVzIHRoZSBzdGVtIHdpZHRoLiAgICAgKi8KKyAgICAgICAgQ0YyX0ZpeGVkICBtaWRwb2ludCAgPSBjZjJfaGludG1hcF9tYXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5pbml0aWFsSGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEhpbnRFZGdlLT5jc0Nvb3JkICkgLyAyICk7CisgICAgICAgIENGMl9GaXhlZCAgaGFsZldpZHRoID0gRlRfTXVsRml4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzZWNvbmRIaW50RWRnZS0+Y3NDb29yZCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0SGludEVkZ2UtPmNzQ29vcmQgKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5zY2FsZSApOworCisKKyAgICAgICAgZmlyc3RIaW50RWRnZS0+ZHNDb29yZCAgPSBtaWRwb2ludCAtIGhhbGZXaWR0aDsKKyAgICAgICAgc2Vjb25kSGludEVkZ2UtPmRzQ29vcmQgPSBtaWRwb2ludCArIGhhbGZXaWR0aDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZmlyc3RIaW50RWRnZS0+ZHNDb29yZCA9IGNmMl9oaW50bWFwX21hcCggaGludG1hcC0+aW5pdGlhbEhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0SGludEVkZ2UtPmNzQ29vcmQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERpc2NhcmQgYW55IGhpbnRzIHRoYXQgb3ZlcmxhcCBpbiBkZXZpY2Ugc3BhY2U7IHRoaXMgY2FuIG9jY3VyCisgICAgICogYmVjYXVzZSBsb2NrZWQgaGludHMgaGF2ZSBiZWVuIG1vdmVkIHRvIGFsaWduIHdpdGggYmx1ZSB6b25lcy4KKyAgICAgKgorICAgICAqIFRPRE86IEFsdGhvdWdoIHdlIG1pZ2h0IGNvcnJlY3QgdGhpcyBsYXRlciBkdXJpbmcgYWRqdXN0bWVudCwgd2UKKyAgICAgKiBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBkZWxldGUgYSBjb25mbGljdGluZyBoaW50IG9uY2UgaXQgaGFzCisgICAgICogYmVlbiBpbnNlcnRlZC4gIFNlZSB2Mi4wMzAgTWluaW9uUHJvLVJlZ3VsYXIsIDEyIHBwZW0gZGFya2VuZWQsCisgICAgICogaW5pdGlhbCBoaW50IG1hcCBmb3Igc2Vjb25kIHBhdGgsIGdseXBoIDk0NSAodGhlIHBlcmlzcG9tZW5pICh0aWxkZSkKKyAgICAgKiBpbiBVKzFGNkUsIEdyZWVrIG9tZWdhIHdpdGggcHNpbGkgYW5kIHBlcmlzcG9tZW5pKS4gIERhcmtlbmluZyBpcworICAgICAqIDI1LiAgUGFpciA2NjcsNzQ3IGluaXRpYWxseSBjb25mbGljdHMgaW4gZGVzaWduIHNwYWNlIHdpdGggdG9wIGVkZ2UKKyAgICAgKiA2NjAuICBUaGlzIGlzIGJlY2F1c2UgNjY3IG1hcHMgdG8gNy44NywgYW5kIHRoZSB0b3AgZWRnZSB3YXMKKyAgICAgKiBjYXB0dXJlZCBieSBhIHpvbmUgYXQgOC4wLiAgVGhlIHBhaXIgaXMgbGF0ZXIgc3VjY2Vzc2Z1bGx5IGluc2VydGVkCisgICAgICogaW4gYSB6b25lIHdpdGhvdXQgdGhlIHRvcCBlZGdlLiAgSW4gdGhpcyB6b25lIGl0IGlzIGFkanVzdGVkIHRvIDguMCwKKyAgICAgKiBhbmQgbm8gbG9uZ2VyIGNvbmZsaWN0cyB3aXRoIHRoZSB0b3AgZWRnZSBpbiBkZXNpZ24gc3BhY2UuICBUaGlzCisgICAgICogbWVhbnMgaXQgY2FuIGJlIGluY2x1ZGVkIGluIHlldCBhIGxhdGVyIHpvbmUgd2hpY2ggZG9lcyBoYXZlIHRoZSB0b3AKKyAgICAgKiBlZGdlIGhpbnQuICBUaGlzIHByb2R1Y2VzIGEgc21hbGwgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZmlyc3QgYW5kCisgICAgICogbGFzdCBwb2ludHMgb2YgdGhpcyBwYXRoLCBldmVuIHRob3VnaCB0aGUgaGludCBtYXNrcyBhcmUgdGhlIHNhbWUuCisgICAgICogVGhlIGRlbnNpdHkgbWFwIGRpZmZlcmVuY2UgaXMgdGlueSAoMS8yNTYpLgorICAgICAqCisgICAgICovCisKKyAgICBpZiAoIGluZGV4SW5zZXJ0ID4gMCApCisgICAgeworICAgICAgLyogd2UgYXJlIGluc2VydGluZyBhZnRlciBhbiBleGlzdGluZyBlZGdlICovCisgICAgICBpZiAoIGZpcnN0SGludEVkZ2UtPmRzQ29vcmQgPCBoaW50bWFwLT5lZGdlW2luZGV4SW5zZXJ0IC0gMV0uZHNDb29yZCApCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIGluZGV4SW5zZXJ0IDwgaGludG1hcC0+Y291bnQgKQorICAgIHsKKyAgICAgIC8qIHdlIGFyZSBpbnNlcnRpbmcgYmVmb3JlIGFuIGV4aXN0aW5nIGVkZ2UgKi8KKyAgICAgIGlmICggaXNQYWlyICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzZWNvbmRIaW50RWRnZS0+ZHNDb29yZCA+IGhpbnRtYXAtPmVkZ2VbaW5kZXhJbnNlcnRdLmRzQ29vcmQgKQorICAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCBmaXJzdEhpbnRFZGdlLT5kc0Nvb3JkID4gaGludG1hcC0+ZWRnZVtpbmRleEluc2VydF0uZHNDb29yZCApCisgICAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIC8qIG1ha2Ugcm9vbSB0byBpbnNlcnQgKi8KKyAgICB7CisgICAgICBDRjJfVUludCAgaVNyYyA9IGhpbnRtYXAtPmNvdW50IC0gMTsKKyAgICAgIENGMl9VSW50ICBpRHN0ID0gaXNQYWlyID8gaGludG1hcC0+Y291bnQgKyAxIDogaGludG1hcC0+Y291bnQ7CisKKyAgICAgIENGMl9VSW50ICBjb3VudCA9IGhpbnRtYXAtPmNvdW50IC0gaW5kZXhJbnNlcnQ7CisKKworICAgICAgaWYgKCBpRHN0ID49IENGMl9NQVhfSElOVF9FREdFUyApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNCgoICJjZjJfaGludG1hcF9pbnNlcnRIaW50OiB0b28gbWFueSBoaW50bWFwc1xuIiApKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB3aGlsZSAoIGNvdW50LS0gKQorICAgICAgICBoaW50bWFwLT5lZGdlW2lEc3QtLV0gPSBoaW50bWFwLT5lZGdlW2lTcmMtLV07CisKKyAgICAgIC8qIGluc2VydCBmaXJzdCBlZGdlICovCisgICAgICBoaW50bWFwLT5lZGdlW2luZGV4SW5zZXJ0XSA9ICpmaXJzdEhpbnRFZGdlOyAgICAgICAgIC8qIGNvcHkgc3RydWN0ICovCisgICAgICBoaW50bWFwLT5jb3VudCArPSAxOworCisgICAgICBpZiAoIGlzUGFpciApCisgICAgICB7CisgICAgICAgIC8qIGluc2VydCBzZWNvbmQgZWRnZSAqLworICAgICAgICBoaW50bWFwLT5lZGdlW2luZGV4SW5zZXJ0ICsgMV0gPSAqc2Vjb25kSGludEVkZ2U7ICAvKiBjb3B5IHN0cnVjdCAqLworICAgICAgICBoaW50bWFwLT5jb3VudCAgICAgICAgICAgICAgICArPSAxOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybjsKKyAgfQorCisKKyAgLyoKKyAgICogQnVpbGQgYSBtYXAgZnJvbSBoaW50cyBhbmQgbWFzay4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBtYXkgcmVjdXIgb25lIGxldmVsIGlmIGBoaW50bWFwLT5pbml0aWFsSGludE1hcCcgaXMgbm90IHlldAorICAgKiB2YWxpZC4KKyAgICogSWYgYGluaXRpYWxNYXAnIGlzIHRydWUsIHNpbXBseSBidWlsZCBpbml0aWFsIG1hcC4KKyAgICoKKyAgICogU3ludGhldGljIGhpbnRzIGFyZSB1c2VkIGluIHR3byB3YXlzLiAgQSBoaW50IGF0IHplcm8gaXMgaW5zZXJ0ZWQsIGlmCisgICAqIG5lZWRlZCwgaW4gdGhlIGluaXRpYWwgaGludCBtYXAsIHRvIHByZXZlbnQgdHJhbnNsYXRpb25zIGZyb20KKyAgICogcHJvcGFnYXRpbmcgYWNyb3NzIHRoZSBvcmlnaW4uICBJZiBzeW50aGV0aWMgZW0gYm94IGhpbnRzIGFyZSBlbmFibGVkCisgICAqIGZvciBpZGVvZ3JhcGhpYyBkaWN0aW9uYXJpZXMsIHRoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gYWxsIGhpbnQKKyAgICogbWFwcywgaW5jbHVkaW5nIHRoZSBpbml0aWFsIG9uZS4KKyAgICoKKyAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9oaW50bWFwX2J1aWxkKCBDRjJfSGludE1hcCAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgICBDRjJfQXJyU3RhY2sgIGhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0FyclN0YWNrICB2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIENGMl9IaW50TWFzayAgaGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgIGhpbnRPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGluaXRpYWxNYXAgKQorICB7CisgICAgRlRfQnl0ZSogIG1hc2tQdHI7CisKKyAgICBDRjJfRm9udCAgICAgICAgIGZvbnQgPSBoaW50bWFwLT5mb250OworICAgIENGMl9IaW50TWFza1JlYyAgdGVtcEhpbnRNYXNrOworCisgICAgc2l6ZV90ICAgYml0Q291bnQsIGk7CisgICAgRlRfQnl0ZSAgbWFza0J5dGU7CisKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgaW5pdGlhbCBtYXAgaXMgY29uc3RydWN0ZWQgKi8KKyAgICBpZiAoICFpbml0aWFsTWFwICYmICFjZjJfaGludG1hcF9pc1ZhbGlkKCBoaW50bWFwLT5pbml0aWFsSGludE1hcCApICkKKyAgICB7CisgICAgICAvKiBtYWtlIHJlY3Vyc2l2ZSBjYWxsIHdpdGggaW5pdGlhbEhpbnRNYXAgYW5kIHRlbXBvcmFyeSBtYXNrOyAqLworICAgICAgLyogdGVtcG9yYXJ5IG1hc2sgd2lsbCBnZXQgYWxsIGJpdHMgc2V0LCBiZWxvdyAqLworICAgICAgY2YyX2hpbnRtYXNrX2luaXQoICZ0ZW1wSGludE1hc2ssIGhpbnRNYXNrLT5lcnJvciApOworICAgICAgY2YyX2hpbnRtYXBfYnVpbGQoIGhpbnRtYXAtPmluaXRpYWxIaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHZTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wSGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgaGludE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFICk7CisgICAgfQorCisgICAgaWYgKCAhY2YyX2hpbnRtYXNrX2lzVmFsaWQoIGhpbnRNYXNrICkgKQorICAgIHsKKyAgICAgIC8qIHdpdGhvdXQgYSBoaW50IG1hc2ssIGFzc3VtZSBhbGwgaGludHMgYXJlIGFjdGl2ZSAqLworICAgICAgY2YyX2hpbnRtYXNrX3NldEFsbCggaGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggaFN0ZW1IaW50QXJyYXkgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19zaXplKCB2U3RlbUhpbnRBcnJheSApICk7CisgICAgICBpZiAoICFjZjJfaGludG1hc2tfaXNWYWxpZCggaGludE1hc2sgKSApCisgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiB0b28gbWFueSBzdGVtIGhpbnRzICovCisgICAgfQorCisgICAgLyogYmVnaW4gYnkgY2xlYXJpbmcgdGhlIG1hcCAqLworICAgIGhpbnRtYXAtPmNvdW50ICAgICA9IDA7CisgICAgaGludG1hcC0+bGFzdEluZGV4ID0gMDsKKworICAgIC8qIG1ha2UgYSBjb3B5IG9mIHRoZSBoaW50IG1hc2sgc28gd2UgY2FuIG1vZGlmeSBpdCAqLworICAgIHRlbXBIaW50TWFzayA9ICpoaW50TWFzazsKKyAgICBtYXNrUHRyICAgICAgPSBjZjJfaGludG1hc2tfZ2V0TWFza1B0ciggJnRlbXBIaW50TWFzayApOworCisgICAgLyogdXNlIHRoZSBoU3RlbSBoaW50cyBvbmx5LCB3aGljaCBhcmUgZmlyc3QgaW4gdGhlIG1hc2sgKi8KKyAgICBiaXRDb3VudCA9IGNmMl9hcnJzdGFja19zaXplKCBoU3RlbUhpbnRBcnJheSApOworCisgICAgLyogRGVmZW5zZS1pbi1kZXB0aC4gIFNob3VsZCBuZXZlciByZXR1cm4gaGVyZS4gKi8KKyAgICBpZiAoIGJpdENvdW50ID4gaGludE1hc2stPmJpdENvdW50ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3ludGhldGljIGVtYm94IGhpbnRzIGdldCBoaWdoZXN0IHByaW9yaXR5ICovCisgICAgaWYgKCBmb250LT5ibHVlcy5kb0VtQm94SGludHMgKQorICAgIHsKKyAgICAgIENGMl9IaW50UmVjICBkdW1teTsKKworCisgICAgICBjZjJfaGludF9pbml0WmVybyggJmR1bW15ICk7ICAgLyogaW52YWxpZCBoaW50IG1hcCBlbGVtZW50ICovCisKKyAgICAgIC8qIGdob3N0IGJvdHRvbSAqLworICAgICAgY2YyX2hpbnRtYXBfaW5zZXJ0SGludCggaGludG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5ibHVlcy5lbUJveEJvdHRvbUVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXkgKTsKKyAgICAgIC8qIGdob3N0IHRvcCAqLworICAgICAgY2YyX2hpbnRtYXBfaW5zZXJ0SGludCggaGludG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5ibHVlcy5lbUJveFRvcEVkZ2UgKTsKKyAgICB9CisKKyAgICAvKiBpbnNlcnQgaGludHMgY2FwdHVyZWQgYnkgYSBibHVlIHpvbmUgb3IgYWxyZWFkeSBsb2NrZWQgKGhpZ2hlciAqLworICAgIC8qIHByaW9yaXR5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICggaSA9IDAsIG1hc2tCeXRlID0gMHg4MDsgaSA8IGJpdENvdW50OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggbWFza0J5dGUgJiAqbWFza1B0ciApCisgICAgICB7CisgICAgICAgIC8qIGV4cGFuZCBTdGVtSGludCBpbnRvIHR3byBgQ0YyX0hpbnQnIGVsZW1lbnRzICovCisgICAgICAgIENGMl9IaW50UmVjICBib3R0b21IaW50RWRnZSwgdG9wSGludEVkZ2U7CisKKworICAgICAgICBjZjJfaGludF9pbml0KCAmYm90dG9tSGludEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIGhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICBoaW50T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAvKiBib3R0b20gKi8gKTsKKyAgICAgICAgY2YyX2hpbnRfaW5pdCggJnRvcEhpbnRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICBoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGludE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIC8qIHRvcCAqLyApOworCisgICAgICAgIGlmICggY2YyX2hpbnRfaXNMb2NrZWQoICZib3R0b21IaW50RWRnZSApIHx8CisgICAgICAgICAgICAgY2YyX2hpbnRfaXNMb2NrZWQoICZ0b3BIaW50RWRnZSApICAgIHx8CisgICAgICAgICAgICAgY2YyX2JsdWVzX2NhcHR1cmUoICZmb250LT5ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvdHRvbUhpbnRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9wSGludEVkZ2UgKSAgICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGluc2VydCBjYXB0dXJlZCBoaW50IGludG8gbWFwICovCisgICAgICAgICAgY2YyX2hpbnRtYXBfaW5zZXJ0SGludCggaGludG1hcCwgJmJvdHRvbUhpbnRFZGdlLCAmdG9wSGludEVkZ2UgKTsKKworICAgICAgICAgICptYXNrUHRyICY9IH5tYXNrQnl0ZTsgICAgICAvKiB0dXJuIG9mZiB0aGUgYml0IGZvciB0aGlzIGhpbnQgKi8KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICggaSAmIDcgKSA9PSA3ICkKKyAgICAgIHsKKyAgICAgICAgLyogbW92ZSB0byBuZXh0IG1hc2sgYnl0ZSAqLworICAgICAgICBtYXNrUHRyKys7CisgICAgICAgIG1hc2tCeXRlID0gMHg4MDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgbWFza0J5dGUgPj49IDE7CisgICAgfQorCisgICAgLyogaW5pdGlhbCBoaW50IG1hcCBpbmNsdWRlcyBvbmx5IGNhcHR1cmVkIGhpbnRzIHBsdXMgbWF5YmUgb25lIGF0IDAgKi8KKworICAgIC8qCisgICAgICogVE9ETzogVGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUgYmVjYXVzZSB3ZSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEKKyAgICAgKiAgICAgICBzaW5nbGUgaGludCBtYXAgY29udGFpbmluZyBhbGwgY2FwdHVyZWQgaGludHMuICBJdCBpcworICAgICAqICAgICAgIHBvc3NpYmxlIGZvciB0aGVyZSB0byBiZSBjb25mbGljdHMgYmV0d2VlbiBjYXB0dXJlZCBoaW50cywKKyAgICAgKiAgICAgICBlaXRoZXIgYmVjYXVzZSBvZiBkYXJrZW5pbmcgb3IgYmVjYXVzZSB0aGUgaGludHMgYXJlIGluCisgICAgICogICAgICAgc2VwYXJhdGUgaGludCB6b25lcyAod2UgYXJlIGlnbm9yaW5nIGhpbnQgem9uZXMgZm9yIHRoZQorICAgICAqICAgICAgIGluaXRpYWwgbWFwKS4gIEFuIGV4YW1wbGUgb2YgdGhlIGxhdHRlciBpcyBNaW5pb25Qcm8tUmVndWxhcgorICAgICAqICAgICAgIHYyLjAzMCBnbHlwaCA4ODMgKEdyZWVrIENhcGl0YWwgQWxwaGEgd2l0aCBQc2lsaSkgYXQgMTVwcGVtLgorICAgICAqICAgICAgIEEgc3RlbSBoaW50IGZvciB0aGUgcHNpbGkgY29uZmxpY3RzIHdpdGggdGhlIHRvcCBlZGdlIGhpbnQKKyAgICAgKiAgICAgICBmb3IgdGhlIGJhc2UgY2hhcmFjdGVyLiAgVGhlIHN0ZW0gaGludCBnZXRzIHByaW9yaXR5IGJlY2F1c2UKKyAgICAgKiAgICAgICBvZiBpdHMgc29ydCBvcmRlci4gIEluIGdseXBoIDg4NCAoR3JlZWsgQ2FwaXRhbCBBbHBoYSB3aXRoCisgICAgICogICAgICAgUHNpbGkgYW5kIE94aWEpLCB0aGUgdG9wIG9mIHRoZSBiYXNlIGNoYXJhY3RlciBnZXRzIGEgc3RlbQorICAgICAqICAgICAgIGhpbnQsIGFuZCB0aGUgcHNpbGkgZG9lcyBub3QuICBUaGlzIGNyZWF0ZXMgZGlmZmVyZW50IGluaXRpYWwKKyAgICAgKiAgICAgICBtYXBzIGZvciB0aGUgdHdvIGdseXBocyByZXN1bHRpbmcgaW4gZGlmZmVyZW50IHJlbmRlcmluZ3Mgb2YKKyAgICAgKiAgICAgICB0aGUgYmFzZSBjaGFyYWN0ZXIuICBXaWxsIHByb2JhYmx5IGRlZmVyIHRoaXMgZWl0aGVyIGFzIG5vdAorICAgICAqICAgICAgIHdvcnRoIHRoZSBjb3N0IG9yIGFzIGEgZm9udCBidWcuICBJIGRvbid0IHRoaW5rIHRoZXJlIGlzIGFueQorICAgICAqICAgICAgIGdvb2QgcmVhc29uIGZvciBhbiBhY2NlbnQgdG8gYmUgY2FwdHVyZWQgYnkgYW4gYWxpZ25tZW50CisgICAgICogICAgICAgem9uZS4gIC1kYXJub2xkIDIvMTIvMTAKKyAgICAgKi8KKworICAgIGlmICggaW5pdGlhbE1hcCApCisgICAgeworICAgICAgLyogQXBwbHkgYSBoZXVyaXN0aWMgdGhhdCBpbnNlcnRzIGEgcG9pbnQgZm9yICgwLDApLCB1bmxlc3MgaXQncyAgICAgKi8KKyAgICAgIC8qIGFscmVhZHkgY292ZXJlZCBieSBhIG1hcHBpbmcuICBUaGlzIGxvY2tzIHRoZSBiYXNlbGluZSBmb3IgZ2x5cGhzICovCisgICAgICAvKiB0aGF0IGhhdmUgbm8gYmFzZWxpbmUgaGludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBpZiAoIGhpbnRtYXAtPmNvdW50ID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBoaW50bWFwLT5lZGdlWzBdLmNzQ29vcmQgPiAwICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgaGludG1hcC0+ZWRnZVtoaW50bWFwLT5jb3VudCAtIDFdLmNzQ29vcmQgPCAwICkKKyAgICAgIHsKKyAgICAgICAgLyogYWxsIGVkZ2VzIGFyZSBhYm92ZSAwIG9yIGFsbCBlZGdlcyBhcmUgYmVsb3cgMDsgKi8KKyAgICAgICAgLyogY29uc3RydWN0IGEgbG9ja2VkIGVkZ2UgaGludCBhdCAwICAgICAgICAgICAgICAgKi8KKworICAgICAgICBDRjJfSGludFJlYyAgZWRnZSwgaW52YWxpZDsKKworCisgICAgICAgIGNmMl9oaW50X2luaXRaZXJvKCAmZWRnZSApOworCisgICAgICAgIGVkZ2UuZmxhZ3MgPSBDRjJfR2hvc3RCb3R0b20gfAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0xvY2tlZCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIENGMl9TeW50aGV0aWM7CisgICAgICAgIGVkZ2Uuc2NhbGUgPSBoaW50bWFwLT5zY2FsZTsKKworICAgICAgICBjZjJfaGludF9pbml0WmVybyggJmludmFsaWQgKTsKKyAgICAgICAgY2YyX2hpbnRtYXBfaW5zZXJ0SGludCggaGludG1hcCwgJmVkZ2UsICZpbnZhbGlkICk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBpbnNlcnQgcmVtYWluaW5nIGhpbnRzICovCisKKyAgICAgIG1hc2tQdHIgPSBjZjJfaGludG1hc2tfZ2V0TWFza1B0ciggJnRlbXBIaW50TWFzayApOworCisgICAgICBmb3IgKCBpID0gMCwgbWFza0J5dGUgPSAweDgwOyBpIDwgYml0Q291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggbWFza0J5dGUgJiAqbWFza1B0ciApCisgICAgICAgIHsKKyAgICAgICAgICBDRjJfSGludFJlYyAgYm90dG9tSGludEVkZ2UsIHRvcEhpbnRFZGdlOworCisKKyAgICAgICAgICBjZjJfaGludF9pbml0KCAmYm90dG9tSGludEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAvKiBib3R0b20gKi8gKTsKKyAgICAgICAgICBjZjJfaGludF9pbml0KCAmdG9wSGludEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogdG9wICovICk7CisKKyAgICAgICAgICBjZjJfaGludG1hcF9pbnNlcnRIaW50KCBoaW50bWFwLCAmYm90dG9tSGludEVkZ2UsICZ0b3BIaW50RWRnZSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAoIGkgJiA3ICkgPT0gNyApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBtb3ZlIHRvIG5leHQgbWFzayBieXRlICovCisgICAgICAgICAgbWFza1B0cisrOworICAgICAgICAgIG1hc2tCeXRlID0gMHg4MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgbWFza0J5dGUgPj49IDE7CisgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3RlOiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgYSBjb252ZW5pZW50IHBsYWNlIHRvIGJyZWFrIHdoZW4KKyAgICAgKiAgICAgICBkZWJ1Z2dpbmcgaGludGluZy4gIEV4YW1pbmUgYGhpbnRtYXAtPmVkZ2UnIGZvciB0aGUgbGlzdCBvZgorICAgICAqICAgICAgIGVuYWJsZWQgaGludHMsIHRoZW4gc3RlcCBvdmVyIHRoZSBjYWxsIHRvIHNlZSB0aGUgZWZmZWN0IG9mCisgICAgICogICAgICAgYWRqdXN0bWVudC4gIFdlIHN0b3AgaGVyZSBmaXJzdCBvbiB0aGUgcmVjdXJzaXZlIGNhbGwgdGhhdAorICAgICAqICAgICAgIGNyZWF0ZXMgdGhlIGluaXRpYWwgbWFwLCBhbmQgdGhlbiBvbiBlYWNoIGNvdW50ZXIgZ3JvdXAgYW5kCisgICAgICogICAgICAgaGludCB6b25lLgorICAgICAqLworCisgICAgLyogYWRqdXN0IHBvc2l0aW9ucyBvZiBoaW50IGVkZ2VzIHRoYXQgYXJlIG5vdCBsb2NrZWQgdG8gYmx1ZSB6b25lcyAqLworICAgIGNmMl9oaW50bWFwX2FkanVzdEhpbnRzKCBoaW50bWFwICk7CisKKyAgICAvKiBzYXZlIHRoZSBwb3NpdGlvbiBvZiBhbGwgaGludHMgdGhhdCB3ZXJlIHVzZWQgaW4gdGhpcyBoaW50IG1hcDsgKi8KKyAgICAvKiBpZiB3ZSB1c2UgdGhlbSBhZ2Fpbiwgd2UnbGwgbG9jYXRlIHRoZW0gaW4gdGhlIHNhbWUgcG9zaXRpb24gICAgKi8KKyAgICBpZiAoICFpbml0aWFsTWFwICkKKyAgICB7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IGhpbnRtYXAtPmNvdW50OyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoICFjZjJfaGludF9pc1N5bnRoZXRpYyggJmhpbnRtYXAtPmVkZ2VbaV0gKSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBOb3RlOiBpbmNsdWRlIGJvdGggdmFsaWQgYW5kIGludmFsaWQgZWRnZXMgICAgICAgICAgICAqLworICAgICAgICAgIC8qIE5vdGU6IHRvcCBhbmQgYm90dG9tIGVkZ2VzIGFyZSBjb3BpZWQgYmFjayBzZXBhcmF0ZWx5ICovCisgICAgICAgICAgQ0YyX1N0ZW1IaW50ICBzdGVtaGludCA9IChDRjJfU3RlbUhpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19nZXRQb2ludGVyKCBoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uaW5kZXggKTsKKworCisgICAgICAgICAgaWYgKCBjZjJfaGludF9pc1RvcCggJmhpbnRtYXAtPmVkZ2VbaV0gKSApCisgICAgICAgICAgICBzdGVtaGludC0+bWF4RFMgPSBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RlbWhpbnQtPm1pbkRTID0gaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkOworCisgICAgICAgICAgc3RlbWhpbnQtPnVzZWQgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogaGludCBtYXAgaXMgcmVhZHkgdG8gdXNlICovCisgICAgaGludG1hcC0+aXNWYWxpZCA9IFRSVUU7CisKKyAgICAvKiByZW1lbWJlciB0aGlzIG1hc2sgaGFzIGJlZW4gdXNlZCAqLworICAgIGNmMl9oaW50bWFza19zZXROZXcoIGhpbnRNYXNrLCBGQUxTRSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfZ2x5cGhwYXRoX2luaXQoIENGMl9HbHlwaFBhdGggICAgICAgICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZvbnQgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX091dGxpbmVDYWxsYmFja3MgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICAgICAgICAgc2NhbGVZLAorICAgICAgICAgICAgICAgICAgICAgIC8qIENGMl9GaXhlZCAgaFNoaWZ0LCAqLworICAgICAgICAgICAgICAgICAgICAgIENGMl9BcnJTdGFjayAgICAgICAgICBoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfQXJyU3RhY2sgICAgICAgICAgdlN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0hpbnRNYXNrICAgICAgICAgIGhpbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgICAgICAgICBoaW50T3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRjJfQmx1ZXMgICAgICAgYmx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgICAgIGZyYWN0aW9uYWxUcmFuc2xhdGlvbiApCisgIHsKKyAgICBGVF9aRVJPKCBnbHlwaHBhdGggKTsKKworICAgIGdseXBocGF0aC0+Zm9udCAgICAgID0gZm9udDsKKyAgICBnbHlwaHBhdGgtPmNhbGxiYWNrcyA9IGNhbGxiYWNrczsKKworICAgIGNmMl9hcnJzdGFja19pbml0KCAmZ2x5cGhwYXRoLT5oaW50TW92ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPm1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBDRjJfSGludE1vdmVSZWMgKSApOworCisgICAgY2YyX2hpbnRtYXBfaW5pdCggJmdseXBocGF0aC0+aW5pdGlhbEhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhwYXRoLT5pbml0aWFsSGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhwYXRoLT5oaW50TW92ZXMsCisgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZICk7CisgICAgY2YyX2hpbnRtYXBfaW5pdCggJmdseXBocGF0aC0+Zmlyc3RIaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgJmdseXBocGF0aC0+aW5pdGlhbEhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgJmdseXBocGF0aC0+aGludE1vdmVzLAorICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSApOworICAgIGNmMl9oaW50bWFwX2luaXQoICZnbHlwaHBhdGgtPmhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhwYXRoLT5pbml0aWFsSGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhwYXRoLT5oaW50TW92ZXMsCisgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZICk7CisKKyAgICBnbHlwaHBhdGgtPnNjYWxlWCA9IGZvbnQtPmlubmVyVHJhbnNmb3JtLmE7CisgICAgZ2x5cGhwYXRoLT5zY2FsZUMgPSBmb250LT5pbm5lclRyYW5zZm9ybS5jOworICAgIGdseXBocGF0aC0+c2NhbGVZID0gZm9udC0+aW5uZXJUcmFuc2Zvcm0uZDsKKworICAgIGdseXBocGF0aC0+ZnJhY3Rpb25hbFRyYW5zbGF0aW9uID0gKmZyYWN0aW9uYWxUcmFuc2xhdGlvbjsKKworI2lmIDAKKyAgICBnbHlwaHBhdGgtPmhTaGlmdCA9IGhTaGlmdDsgICAgICAgLyogZm9yIGZhdXhpbmcgKi8KKyNlbmRpZgorCisgICAgZ2x5cGhwYXRoLT5oU3RlbUhpbnRBcnJheSA9IGhTdGVtSGludEFycmF5OworICAgIGdseXBocGF0aC0+dlN0ZW1IaW50QXJyYXkgPSB2U3RlbUhpbnRBcnJheTsKKyAgICBnbHlwaHBhdGgtPmhpbnRNYXNrICAgICAgID0gaGludE1hc2s7ICAgICAgLyogcHRyIHRvIGN1cnJlbnQgbWFzayAqLworICAgIGdseXBocGF0aC0+aGludE9yaWdpblkgICAgPSBoaW50T3JpZ2luWTsKKyAgICBnbHlwaHBhdGgtPmJsdWVzICAgICAgICAgID0gYmx1ZXM7CisgICAgZ2x5cGhwYXRoLT5kYXJrZW4gICAgICAgICA9IGZvbnQtPmRhcmtlbmVkOyAvKiBUT0RPOiBzaG91bGQgd2UgbWFrZSBjb3BpZXM/ICovCisgICAgZ2x5cGhwYXRoLT54T2Zmc2V0ICAgICAgICA9IGZvbnQtPmRhcmtlblg7CisgICAgZ2x5cGhwYXRoLT55T2Zmc2V0ICAgICAgICA9IGZvbnQtPmRhcmtlblk7CisgICAgZ2x5cGhwYXRoLT5taXRlckxpbWl0ICAgICA9IDIgKiBGVF9NQVgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkQWJzKCBnbHlwaHBhdGgtPnhPZmZzZXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfZml4ZWRBYnMoIGdseXBocGF0aC0+eU9mZnNldCApICk7CisKKyAgICAvKiAuMSBjaGFyYWN0ZXIgc3BhY2UgdW5pdCAqLworICAgIGdseXBocGF0aC0+c25hcFRocmVzaG9sZCA9IGNmMl9mbG9hdFRvRml4ZWQoIDAuMWYgKTsKKworICAgIGdseXBocGF0aC0+bW92ZUlzUGVuZGluZyA9IFRSVUU7CisgICAgZ2x5cGhwYXRoLT5wYXRoSXNPcGVuICAgID0gRkFMU0U7CisgICAgZ2x5cGhwYXRoLT5wYXRoSXNDbG9zaW5nID0gRkFMU0U7CisgICAgZ2x5cGhwYXRoLT5lbGVtSXNRdWV1ZWQgID0gRkFMU0U7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfZmluYWxpemUoIENGMl9HbHlwaFBhdGggIGdseXBocGF0aCApCisgIHsKKyAgICBjZjJfYXJyc3RhY2tfZmluYWxpemUoICZnbHlwaHBhdGgtPmhpbnRNb3ZlcyApOworICB9CisKKworICAvKgorICAgKiBIaW50IHBvaW50IGluIHktZGlyZWN0aW9uIGFuZCBhcHBseSBvdXRlclRyYW5zZm9ybS4KKyAgICogSW5wdXQgYGN1cnJlbnQnIGhpbnQgbWFwICh3aGljaCBpcyBhY3R1YWxseSBkZWxheWVkIGJ5IG9uZSBlbGVtZW50KS4KKyAgICogSW5wdXQgeCx5IHBvaW50IGluIENoYXJhY3RlciBTcGFjZS4KKyAgICogT3V0cHV0IHgseSBwb2ludCBpbiBEZXZpY2UgU3BhY2UsIGluY2x1ZGluZyB0cmFuc2xhdGlvbi4KKyAgICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9nbHlwaHBhdGhfaGludFBvaW50KCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSGludE1hcCAgICBoaW50bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICAgcHB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkgKQorICB7CisgICAgRlRfVmVjdG9yICBwdDsgICAvKiBoaW50ZWQgcG9pbnQgaW4gdXByaWdodCBEUyAqLworCisKKyAgICBwdC54ID0gRlRfTXVsRml4KCBnbHlwaHBhdGgtPnNjYWxlWCwgeCApICsKKyAgICAgICAgICAgICBGVF9NdWxGaXgoIGdseXBocGF0aC0+c2NhbGVDLCB5ICk7CisgICAgcHQueSA9IGNmMl9oaW50bWFwX21hcCggaGludG1hcCwgeSApOworCisgICAgcHB0LT54ID0gRlRfTXVsRml4KCBnbHlwaHBhdGgtPmZvbnQtPm91dGVyVHJhbnNmb3JtLmEsIHB0LnggKSAgICsKKyAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5jLCBwdC55ICkgKworICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5mcmFjdGlvbmFsVHJhbnNsYXRpb24ueDsKKyAgICBwcHQtPnkgPSBGVF9NdWxGaXgoIGdseXBocGF0aC0+Zm9udC0+b3V0ZXJUcmFuc2Zvcm0uYiwgcHQueCApICAgKworICAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaHBhdGgtPmZvbnQtPm91dGVyVHJhbnNmb3JtLmQsIHB0LnkgKSArCisgICAgICAgICAgICAgICBnbHlwaHBhdGgtPmZyYWN0aW9uYWxUcmFuc2xhdGlvbi55OworICB9CisKKworICAvKgorICAgKiBGcm9tIHR3byBsaW5lIHNlZ21lbnRzLCAodTEsdTIpIGFuZCAodjEsdjIpLCBjb21wdXRlIGEgcG9pbnQgb2YKKyAgICogaW50ZXJzZWN0aW9uIG9uIHRoZSBjb3JyZXNwb25kaW5nIGxpbmVzLgorICAgKiBSZXR1cm4gZmFsc2UgaWYgbm8gaW50ZXJzZWN0aW9uIGlzIGZvdW5kLCBvciBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzCisgICAqIHRvbyBmYXIgYXdheSBmcm9tIHRoZSBlbmRzIG9mIHRoZSBsaW5lIHNlZ21lbnRzLCB1MiBhbmQgdjEuCisgICAqCisgICAqLworICBzdGF0aWMgRlRfQm9vbAorICBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVJbnRlcnNlY3Rpb24oIENGMl9HbHlwaFBhdGggICAgIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB1MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB1MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgICAgICBpbnRlcnNlY3Rpb24gKQorICB7CisgICAgLyoKKyAgICAgKiBMZXQgYHUnIGJlIGEgemVyby1iYXNlZCB2ZWN0b3IgZnJvbSB0aGUgZmlyc3Qgc2VnbWVudCwgYHYnIGZyb20gdGhlCisgICAgICogc2Vjb25kIHNlZ21lbnQuCisgICAgICogTGV0IGB3ICdiZSB0aGUgemVyby1iYXNlZCB2ZWN0b3IgZnJvbSBgdTEnIHRvIGB2MScuCisgICAgICogYHBlcnAnIGlzIHRoZSBgcGVycGVuZGljdWxhciBkb3QgcHJvZHVjdCc7IHNlZQorICAgICAqIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vUGVycERvdFByb2R1Y3QuaHRtbC4KKyAgICAgKiBgcycgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlIHBhcmFtZXRyaWMgbGluZSBmb3IgdGhlIGZpcnN0IHNlZ21lbnQKKyAgICAgKiAoYHUnKS4KKyAgICAgKgorICAgICAqIFNlZSBub3RhdGlvbiBpbgorICAgICAqIGh0dHA6Ly9zb2Z0c3VyZmVyLmNvbS9BcmNoaXZlL2FsZ29yaXRobV8wMTA0L2FsZ29yaXRobV8wMTA0Qi5odG0uCisgICAgICogQ2FsY3VsYXRpb25zIGFyZSBkb25lIGluIDE2LjE2LCBidXQgbXVzdCBoYW5kbGUgdGhlIHNxdWFyaW5nIG9mCisgICAgICogbGluZSBsZW5ndGhzIGluIGNoYXJhY3RlciBzcGFjZS4gIFdlIHNjYWxlIGFsbCB2ZWN0b3JzIGJ5IDEvMzIgdG8KKyAgICAgKiBhdm9pZCBvdmVyZmxvdy4gIFRoaXMgYWxsb3dzIHZhbHVlcyB1cCB0byA0MDk1IHRvIGJlIHNxdWFyZWQuICBUaGUKKyAgICAgKiBzY2FsZSBmYWN0b3IgY2FuY2VscyBpbiB0aGUgZGl2aWRlLgorICAgICAqCisgICAgICogVE9ETzogdGhlIHNjYWxlIGZhY3RvciBjb3VsZCBiZSBjb21wdXRlZCBmcm9tIFVuaXRzUGVyRW0uCisgICAgICoKKyAgICAgKi8KKworI2RlZmluZSBjZjJfcGVycCggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggRlRfTXVsRml4KCBhLngsIGIueSApIC0gRlRfTXVsRml4KCBhLnksIGIueCApICkKKworICAvKiByb3VuZCBhbmQgZGl2aWRlIGJ5IDMyICovCisjZGVmaW5lIENGMl9DU19TQ0FMRSggeCApICAgICAgICAgXAorICAgICAgICAgICggKCAoeCkgKyAweDEwICkgPj4gNSApCisKKyAgICBGVF9WZWN0b3IgIHUsIHYsIHc7ICAgICAgLyogc2NhbGVkIHZlY3RvcnMgKi8KKyAgICBDRjJfRml4ZWQgIGRlbm9taW5hdG9yLCBzOworCisKKyAgICB1LnggPSBDRjJfQ1NfU0NBTEUoIHUyLT54IC0gdTEtPnggKTsKKyAgICB1LnkgPSBDRjJfQ1NfU0NBTEUoIHUyLT55IC0gdTEtPnkgKTsKKyAgICB2LnggPSBDRjJfQ1NfU0NBTEUoIHYyLT54IC0gdjEtPnggKTsKKyAgICB2LnkgPSBDRjJfQ1NfU0NBTEUoIHYyLT55IC0gdjEtPnkgKTsKKyAgICB3LnggPSBDRjJfQ1NfU0NBTEUoIHYxLT54IC0gdTEtPnggKTsKKyAgICB3LnkgPSBDRjJfQ1NfU0NBTEUoIHYxLT55IC0gdTEtPnkgKTsKKworICAgIGRlbm9taW5hdG9yID0gY2YyX3BlcnAoIHUsIHYgKTsKKworICAgIGlmICggZGVub21pbmF0b3IgPT0gMCApCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAvKiBwYXJhbGxlbCBvciBjb2luY2lkZW50IGxpbmVzICovCisKKyAgICBzID0gRlRfRGl2Rml4KCBjZjJfcGVycCggdywgdiApLCBkZW5vbWluYXRvciApOworCisgICAgaW50ZXJzZWN0aW9uLT54ID0gdTEtPnggKyBGVF9NdWxGaXgoIHMsIHUyLT54IC0gdTEtPnggKTsKKyAgICBpbnRlcnNlY3Rpb24tPnkgPSB1MS0+eSArIEZUX011bEZpeCggcywgdTItPnkgLSB1MS0+eSApOworCisgICAgLyoKKyAgICAgKiBTcGVjaWFsIGNhc2Ugc25hcHBpbmcgZm9yIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGxpbmVzLgorICAgICAqIFRoaXMgY2xlYW5zIHVwIGludGVyc2VjdGlvbnMgYW5kIHJlZHVjZXMgcHJvYmxlbXMgd2l0aCB3aW5kaW5nCisgICAgICogb3JkZXIgZGV0ZWN0aW9uLgorICAgICAqIFNhbXBsZSBjYXNlIGlzIHNiYyBjZCBLb3pHb1ByNk4tTWVkaXVtLm90ZiAyMCAxNjY4NS4KKyAgICAgKiBOb3RlOiB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGluIGNoYXJhY3RlciBzcGFjZS4KKyAgICAgKgorICAgICAqLworCisgICAgaWYgKCB1MS0+eCA9PSB1Mi0+eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT54IC0gdTEtPnggKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCisgICAgICBpbnRlcnNlY3Rpb24tPnggPSB1MS0+eDsKKyAgICBpZiAoIHUxLT55ID09IHUyLT55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgY2YyX2ZpeGVkQWJzKCBpbnRlcnNlY3Rpb24tPnkgLSB1MS0+eSApIDwgZ2x5cGhwYXRoLT5zbmFwVGhyZXNob2xkICkKKyAgICAgIGludGVyc2VjdGlvbi0+eSA9IHUxLT55OworCisgICAgaWYgKCB2MS0+eCA9PSB2Mi0+eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT54IC0gdjEtPnggKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCisgICAgICBpbnRlcnNlY3Rpb24tPnggPSB2MS0+eDsKKyAgICBpZiAoIHYxLT55ID09IHYyLT55ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgY2YyX2ZpeGVkQWJzKCBpbnRlcnNlY3Rpb24tPnkgLSB2MS0+eSApIDwgZ2x5cGhwYXRoLT5zbmFwVGhyZXNob2xkICkKKyAgICAgIGludGVyc2VjdGlvbi0+eSA9IHYxLT55OworCisgICAgLyogbGltaXQgdGhlIGludGVyc2VjdGlvbiBkaXN0YW5jZSBmcm9tIG1pZHBvaW50IG9mIHUyIGFuZCB2MSAqLworICAgIGlmICggY2YyX2ZpeGVkQWJzKCBpbnRlcnNlY3Rpb24tPnggLSAoIHUyLT54ICsgdjEtPnggKSAvIDIgKSA+CisgICAgICAgICAgIGdseXBocGF0aC0+bWl0ZXJMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT55IC0gKCB1Mi0+eSArIHYxLT55ICkgLyAyICkgPgorICAgICAgICAgICBnbHlwaHBhdGgtPm1pdGVyTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVFOworICB9CisKKworICAvKgorICAgKiBQdXNoIHRoZSBjYWNoZWQgZWxlbWVudCAoZ2x5cGhwYXRoLT5wcmV2RWxlbSopIHRvIHRoZSBvdXRsaW5lCisgICAqIGNvbnN1bWVyLiAgV2hlbiBhIGRhcmtlbmluZyBvZmZzZXQgaXMgdXNlZCwgdGhlIGVuZCBwb2ludCBvZiB0aGUKKyAgICogY2FjaGVkIGVsZW1lbnQgbWF5IGJlIGFkanVzdGVkIHRvIGFuIGludGVyc2VjdGlvbiBwb2ludCBvciB3ZSBtYXkKKyAgICogc3ludGhlc2l6ZSBhIGNvbm5lY3RpbmcgbGluZSB0byB0aGUgY3VycmVudCBlbGVtZW50LiAgSWYgd2UgYXJlCisgICAqIGNsb3NpbmcgYSBzdWJwYXRoLCB3ZSBtYXkgYWxzbyBnZW5lcmF0ZSBhIGNvbm5lY3RpbmcgbGluZSB0byB0aGUgc3RhcnQKKyAgICogcG9pbnQuCisgICAqCisgICAqIFRoaXMgaXMgd2hlcmUgQ2hhcmFjdGVyIFNwYWNlIChDUykgaXMgY29udmVydGVkIHRvIERldmljZSBTcGFjZSAoRFMpCisgICAqIHVzaW5nIGEgaGludCBtYXAuICBUaGlzIGNhbGN1bGF0aW9uIG11c3QgdXNlIGEgSGludE1hcCB0aGF0IHdhcyB2YWxpZAorICAgKiBhdCB0aGUgdGltZSB0aGUgZWxlbWVudCB3YXMgc2F2ZWQuICBGb3IgdGhlIGZpcnN0IHBvaW50IGluIGEgc3VicGF0aCwKKyAgICogdGhhdCBpcyBhIHNhdmVkIEhpbnRNYXAuICBGb3IgbW9zdCBlbGVtZW50cywgaXQganVzdCBtZWFucyB0aGUgY2FsbGVyCisgICAqIGhhcyBkZWxheWVkIGJ1aWxkaW5nIGEgSGludE1hcCBmcm9tIHRoZSBjdXJyZW50IEhpbnRNYXNrLgorICAgKgorICAgKiBUcmFuc2Zvcm0gZWFjaCBwb2ludCB3aXRoIG91dGVyVHJhbnNmb3JtIGFuZCBjYWxsIHRoZSBvdXRsaW5lCisgICAqIGNhbGxiYWNrcy4gIFRoaXMgaXMgYSBnZW5lcmFsIDN4MyB0cmFuc2Zvcm06CisgICAqCisgICAqICAgeCcgPSBhKnggKyBjKnkgKyB0eCwgeScgPSBiKnggKyBkKnkgKyB0eQorICAgKgorICAgKiBidXQgaXQgdXNlcyA0IGVsZW1lbnRzIGZyb20gQ0YyX0ZvbnQgYW5kIHRoZSB0cmFuc2xhdGlvbiBwYXJ0CisgICAqIGZyb20gQ0YyX0dseXBoUGF0aC4KKyAgICoKKyAgICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9nbHlwaHBhdGhfcHVzaFByZXZFbGVtKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSGludE1hcCAgICBoaW50bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICAgbmV4dFAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yICAgICAgbmV4dFAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgY2xvc2UgKQorICB7CisgICAgQ0YyX0NhbGxiYWNrUGFyYW1zUmVjICBwYXJhbXM7CisKKyAgICBGVF9WZWN0b3IqICBwcmV2UDA7CisgICAgRlRfVmVjdG9yKiAgcHJldlAxOworCisgICAgRlRfVmVjdG9yICBpbnRlcnNlY3Rpb24gICAgPSB7IDAsIDAgfTsKKyAgICBGVF9Cb29sICAgIHVzZUludGVyc2VjdGlvbiA9IEZBTFNFOworCisKKyAgICBGVF9BU1NFUlQoIGdseXBocGF0aC0+cHJldkVsZW1PcCA9PSBDRjJfUGF0aE9wTGluZVRvIHx8CisgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnByZXZFbGVtT3AgPT0gQ0YyX1BhdGhPcEN1YmVUbyApOworCisgICAgaWYgKCBnbHlwaHBhdGgtPnByZXZFbGVtT3AgPT0gQ0YyX1BhdGhPcExpbmVUbyApCisgICAgeworICAgICAgcHJldlAwID0gJmdseXBocGF0aC0+cHJldkVsZW1QMDsKKyAgICAgIHByZXZQMSA9ICZnbHlwaHBhdGgtPnByZXZFbGVtUDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwcmV2UDAgPSAmZ2x5cGhwYXRoLT5wcmV2RWxlbVAyOworICAgICAgcHJldlAxID0gJmdseXBocGF0aC0+cHJldkVsZW1QMzsKKyAgICB9CisKKyAgICAvKiBvcHRpbWl6YXRpb246IGlmIHByZXZpb3VzIGFuZCBuZXh0IGVsZW1lbnRzIGFyZSBvZmZzZXQgYnkgdGhlIHNhbWUgKi8KKyAgICAvKiBhbW91bnQsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBnYXAsIGFuZCBubyBuZWVkIHRvIGNvbXB1dGUgYW4gICAgICAgKi8KKyAgICAvKiBpbnRlcnNlY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHByZXZQMS0+eCAhPSBuZXh0UDAtPnggfHwgcHJldlAxLT55ICE9IG5leHRQMC0+eSApCisgICAgeworICAgICAgLyogcHJldmlvdXMgZWxlbWVudCBkb2VzIG5vdCBqb2luIG5leHQgZWxlbWVudDogICAgICAgICAgICAgKi8KKyAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgb2YgcHJldmlvdXMgZWxlbWVudCB0byB0aGUgaW50ZXJzZWN0aW9uICovCisgICAgICB1c2VJbnRlcnNlY3Rpb24gPSBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVJbnRlcnNlY3Rpb24oIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5leHRQMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludGVyc2VjdGlvbiApOworICAgICAgaWYgKCB1c2VJbnRlcnNlY3Rpb24gKQorICAgICAgeworICAgICAgICAvKiBtb2RpZnkgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIGNhY2hlZCBlbGVtZW50IChlaXRoZXIgbGluZSBvciAqLworICAgICAgICAvKiBjdXJ2ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAqcHJldlAxID0gaW50ZXJzZWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIHBhcmFtcy5wdDAgPSBnbHlwaHBhdGgtPmN1cnJlbnREUzsKKworICAgIHN3aXRjaCggZ2x5cGhwYXRoLT5wcmV2RWxlbU9wICkKKyAgICB7CisgICAgY2FzZSBDRjJfUGF0aE9wTGluZVRvOgorICAgICAgcGFyYW1zLm9wID0gQ0YyX1BhdGhPcExpbmVUbzsKKworICAgICAgLyogbm90ZTogcHQyIGFuZCBwdDMgYXJlIHVudXNlZCAqLworCisgICAgICBpZiAoIGNsb3NlICkKKyAgICAgIHsKKyAgICAgICAgLyogdXNlIGZpcnN0IGhpbnQgbWFwIGlmIGNsb3NpbmcgKi8KKyAgICAgICAgY2YyX2dseXBocGF0aF9oaW50UG9pbnQoIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHBhdGgtPmZpcnN0SGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMucHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAxLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDEueSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBjZjJfZ2x5cGhwYXRoX2hpbnRQb2ludCggZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMucHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAxLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDEueSApOworICAgICAgfQorCisgICAgICAvKiBvdXRwdXQgb25seSBub24temVybyBsZW5ndGggbGluZXMgKi8KKyAgICAgIGlmICggcGFyYW1zLnB0MC54ICE9IHBhcmFtcy5wdDEueCB8fCBwYXJhbXMucHQwLnkgIT0gcGFyYW1zLnB0MS55ICkKKyAgICAgIHsKKyAgICAgICAgZ2x5cGhwYXRoLT5jYWxsYmFja3MtPmxpbmVUbyggZ2x5cGhwYXRoLT5jYWxsYmFja3MsICZwYXJhbXMgKTsKKworICAgICAgICBnbHlwaHBhdGgtPmN1cnJlbnREUyA9IHBhcmFtcy5wdDE7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0YyX1BhdGhPcEN1YmVUbzoKKyAgICAgIHBhcmFtcy5vcCA9IENGMl9QYXRoT3BDdWJlVG87CisKKyAgICAgIC8qIFRPRE86IHNob3VsZCB3ZSBpbnRlcnNlY3QgdGhlIGludGVyaW9yIGpvaW5zIChwMS1wMiBhbmQgcDItcDMpPyAqLworICAgICAgY2YyX2dseXBocGF0aF9oaW50UG9pbnQoIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMucHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+cHJldkVsZW1QMS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+cHJldkVsZW1QMS55ICk7CisgICAgICBjZjJfZ2x5cGhwYXRoX2hpbnRQb2ludCggZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtcy5wdDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAyLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAyLnkgKTsKKyAgICAgIGNmMl9nbHlwaHBhdGhfaGludFBvaW50KCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyYW1zLnB0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDMueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDMueSApOworCisgICAgICBnbHlwaHBhdGgtPmNhbGxiYWNrcy0+Y3ViZVRvKCBnbHlwaHBhdGgtPmNhbGxiYWNrcywgJnBhcmFtcyApOworCisgICAgICBnbHlwaHBhdGgtPmN1cnJlbnREUyA9IHBhcmFtcy5wdDM7CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICggIXVzZUludGVyc2VjdGlvbiB8fCBjbG9zZSApCisgICAgeworICAgICAgLyogaW5zZXJ0IGNvbm5lY3RpbmcgbGluZSBiZXR3ZWVuIGVuZCBvZiBwcmV2aW91cyBlbGVtZW50IGFuZCBzdGFydCAqLworICAgICAgLyogb2YgY3VycmVudCBvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogbm90ZTogYXQgdGhlIGVuZCBvZiBhIHN1YnBhdGgsIHdlIG1pZ2h0IGRvIGJvdGgsIHNvIHVzZSBgbmV4dFAwJyAqLworICAgICAgLyogYmVmb3JlIHdlIGNoYW5nZSBpdCwgYmVsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBpZiAoIGNsb3NlICkKKyAgICAgIHsKKyAgICAgICAgLyogaWYgd2UgYXJlIGNsb3NpbmcgdGhlIHN1YnBhdGgsIHRoZW4gbmV4dFAwIGlzIGluIHRoZSBmaXJzdCAgICAgKi8KKyAgICAgICAgLyogaGludCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgY2YyX2dseXBocGF0aF9oaW50UG9pbnQoIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHBhdGgtPmZpcnN0SGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMucHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFAwLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFAwLT55ICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGNmMl9nbHlwaHBhdGhfaGludFBvaW50KCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtcy5wdDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UDAtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UDAtPnkgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBwYXJhbXMucHQxLnggIT0gZ2x5cGhwYXRoLT5jdXJyZW50RFMueCB8fAorICAgICAgICAgICBwYXJhbXMucHQxLnkgIT0gZ2x5cGhwYXRoLT5jdXJyZW50RFMueSApCisgICAgICB7CisgICAgICAgIC8qIGxlbmd0aCBpcyBub256ZXJvICovCisgICAgICAgIHBhcmFtcy5vcCAgPSBDRjJfUGF0aE9wTGluZVRvOworICAgICAgICBwYXJhbXMucHQwID0gZ2x5cGhwYXRoLT5jdXJyZW50RFM7CisKKyAgICAgICAgLyogbm90ZTogcHQyIGFuZCBwdDMgYXJlIHVudXNlZCAqLworICAgICAgICBnbHlwaHBhdGgtPmNhbGxiYWNrcy0+bGluZVRvKCBnbHlwaHBhdGgtPmNhbGxiYWNrcywgJnBhcmFtcyApOworCisgICAgICAgIGdseXBocGF0aC0+Y3VycmVudERTID0gcGFyYW1zLnB0MTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZUludGVyc2VjdGlvbiApCisgICAgeworICAgICAgLyogcmV0dXJuIGludGVyc2VjdGlvbiBwb2ludCB0byBjYWxsZXIgKi8KKyAgICAgICpuZXh0UDAgPSBpbnRlcnNlY3Rpb247CisgICAgfQorICB9CisKKworICAvKiBwdXNoIGEgTW92ZVRvIGVsZW1lbnQgYmFzZWQgb24gY3VycmVudCBwb2ludCBhbmQgb2Zmc2V0IG9mIGN1cnJlbnQgKi8KKyAgLyogZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9nbHlwaHBhdGhfcHVzaE1vdmUoIENGMl9HbHlwaFBhdGggIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yICAgICAgc3RhcnQgKQorICB7CisgICAgQ0YyX0NhbGxiYWNrUGFyYW1zUmVjICBwYXJhbXM7CisKKworICAgIHBhcmFtcy5vcCAgPSBDRjJfUGF0aE9wTW92ZVRvOworICAgIHBhcmFtcy5wdDAgPSBnbHlwaHBhdGgtPmN1cnJlbnREUzsKKworICAgIC8qIFRlc3QgaWYgbW92ZSBoYXMgcmVhbGx5IGhhcHBlbmVkIHlldDsgaXQgd291bGQgaGF2ZSBjYWxsZWQgKi8KKyAgICAvKiBgY2YyX2hpbnRtYXBfYnVpbGQnIHRvIHNldCBgaXNWYWxpZCcuICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCAhY2YyX2hpbnRtYXBfaXNWYWxpZCggJmdseXBocGF0aC0+aGludE1hcCApICkKKyAgICB7CisgICAgICAvKiB3ZSBhcmUgaGVyZSBpZmYgZmlyc3Qgc3VicGF0aCBpcyBtaXNzaW5nIGEgbW92ZXRvIG9wZXJhdG9yOiAqLworICAgICAgLyogc3ludGhlc2l6ZSBmaXJzdCBtb3ZlVG8gdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIGhpbnRNYXAgKi8KKyAgICAgIGNmMl9nbHlwaHBhdGhfbW92ZVRvKCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5zdGFydC54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+c3RhcnQueSApOworICAgIH0KKworICAgIGNmMl9nbHlwaHBhdGhfaGludFBvaW50KCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHBhdGgtPmhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXMucHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC55ICk7CisKKyAgICAvKiBub3RlOiBwdDIgYW5kIHB0MyBhcmUgdW51c2VkICovCisgICAgZ2x5cGhwYXRoLT5jYWxsYmFja3MtPm1vdmVUbyggZ2x5cGhwYXRoLT5jYWxsYmFja3MsICZwYXJhbXMgKTsKKworICAgIGdseXBocGF0aC0+Y3VycmVudERTICAgID0gcGFyYW1zLnB0MTsKKyAgICBnbHlwaHBhdGgtPm9mZnNldFN0YXJ0MCA9IHN0YXJ0OworICB9CisKKworICAvKgorICAgKiBBbGwgY29vcmRpbmF0ZXMgYXJlIGluIGNoYXJhY3RlciBzcGFjZS4KKyAgICogT24gaW5wdXQsICh4MSwgeTEpIGFuZCAoeDIsIHkyKSBnaXZlIGxpbmUgc2VnbWVudC4KKyAgICogT24gb3V0cHV0LCAoeCwgeSkgZ2l2ZSBvZmZzZXQgdmVjdG9yLgorICAgKiBXZSB1c2UgYSBwaWVjZXdpc2UgYXBwcm94aW1hdGlvbiB0byB0cmlnIGZ1bmN0aW9ucy4KKyAgICoKKyAgICogVE9ETzogT2Zmc2V0IHRydWUgcGVycGVuZGljdWxhciBhbmQgcHJvcGVyIGxlbmd0aAorICAgKiAgICAgICBzdXBwbHkgdGhlIHktdHJhbnNsYXRpb24gZm9yIGhpbnRpbmcgaGVyZSwgdG9vLAorICAgKiAgICAgICB0aGF0IGFkZHMgeU9mZnNldCB1bmNvbmRpdGlvbmFsbHkgdG8gKnkuCisgICAqLworICBzdGF0aWMgdm9pZAorICBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQoIENGMl9HbHlwaFBhdGggIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgIHkgKQorICB7CisgICAgQ0YyX0ZpeGVkICBkeCA9IHgyIC0geDE7CisgICAgQ0YyX0ZpeGVkICBkeSA9IHkyIC0geTE7CisKKworICAgIC8qIG5vdGU6IG5lZ2F0aXZlIG9mZnNldHMgZG9uJ3Qgd29yayBoZXJlOyBuZWdhdGUgZGVsdGFzIHRvIGNoYW5nZSAqLworICAgIC8qIHF1YWRyYW50cywgYmVsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZ2x5cGhwYXRoLT5mb250LT5yZXZlcnNlV2luZGluZyApCisgICAgeworICAgICAgZHggPSAtZHg7CisgICAgICBkeSA9IC1keTsKKyAgICB9CisKKyAgICAqeCA9ICp5ID0gMDsKKworICAgIGlmICggIWdseXBocGF0aC0+ZGFya2VuICkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogYWRkIG1vbWVudHVtIGZvciB0aGlzIHBhdGggZWxlbWVudCAqLworICAgIGdseXBocGF0aC0+Y2FsbGJhY2tzLT53aW5kaW5nTW9tZW50dW0gKz0KKyAgICAgIGNmMl9nZXRXaW5kaW5nTW9tZW50dW0oIHgxLCB5MSwgeDIsIHkyICk7CisKKyAgICAvKiBub3RlOiBhbGxvdyBtaXhlZCBpbnRlZ2VyIGFuZCBmaXhlZCBtdWx0aXBsaWNhdGlvbiBoZXJlICovCisgICAgaWYgKCBkeCA+PSAwICkKKyAgICB7CisgICAgICBpZiAoIGR5ID49IDAgKQorICAgICAgeworICAgICAgICAvKiBmaXJzdCBxdWFkcmFudCwgK3ggK3kgKi8KKworICAgICAgICBpZiAoIGR4ID4gMiAqIGR5ICkKKyAgICAgICAgeworICAgICAgICAgIC8qICt4ICovCisgICAgICAgICAgKnggPSAwOworICAgICAgICAgICp5ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZHkgPiAyICogZHggKQorICAgICAgICB7CisgICAgICAgICAgLyogK3kgKi8KKyAgICAgICAgICAqeCA9IGdseXBocGF0aC0+eE9mZnNldDsKKyAgICAgICAgICAqeSA9IGdseXBocGF0aC0+eU9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiAreCAreSAqLworICAgICAgICAgICp4ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAwLjcgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT54T2Zmc2V0ICk7CisgICAgICAgICAgKnkgPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDEuMCAtIDAuNyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBmb3VydGggcXVhZHJhbnQsICt4IC15ICovCisKKyAgICAgICAgaWYgKCBkeCA+IC0yICogZHkgKQorICAgICAgICB7CisgICAgICAgICAgLyogK3ggKi8KKyAgICAgICAgICAqeCA9IDA7CisgICAgICAgICAgKnkgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAtZHkgPiAyICogZHggKQorICAgICAgICB7CisgICAgICAgICAgLyogLXkgKi8KKyAgICAgICAgICAqeCA9IC1nbHlwaHBhdGgtPnhPZmZzZXQ7CisgICAgICAgICAgKnkgPSBnbHlwaHBhdGgtPnlPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogK3ggLXkgKi8KKyAgICAgICAgICAqeCA9IEZUX011bEZpeCggY2YyX2Zsb2F0VG9GaXhlZCggLTAuNyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnhPZmZzZXQgKTsKKyAgICAgICAgICAqeSA9IEZUX011bEZpeCggY2YyX2Zsb2F0VG9GaXhlZCggMS4wIC0gMC43ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+eU9mZnNldCApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIGR5ID49IDAgKQorICAgICAgeworICAgICAgICAvKiBzZWNvbmQgcXVhZHJhbnQsIC14ICt5ICovCisKKyAgICAgICAgaWYgKCAtZHggPiAyICogZHkgKQorICAgICAgICB7CisgICAgICAgICAgLyogLXggKi8KKyAgICAgICAgICAqeCA9IDA7CisgICAgICAgICAgKnkgPSAyICogZ2x5cGhwYXRoLT55T2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBkeSA+IC0yICogZHggKQorICAgICAgICB7CisgICAgICAgICAgLyogK3kgKi8KKyAgICAgICAgICAqeCA9IGdseXBocGF0aC0+eE9mZnNldDsKKyAgICAgICAgICAqeSA9IGdseXBocGF0aC0+eU9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiAteCAreSAqLworICAgICAgICAgICp4ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAwLjcgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT54T2Zmc2V0ICk7CisgICAgICAgICAgKnkgPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDEuMCArIDAuNyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiB0aGlyZCBxdWFkcmFudCwgLXggLXkgKi8KKworICAgICAgICBpZiAoIC1keCA+IC0yICogZHkgKQorICAgICAgICB7CisgICAgICAgICAgLyogLXggKi8KKyAgICAgICAgICAqeCA9IDA7CisgICAgICAgICAgKnkgPSAyICogZ2x5cGhwYXRoLT55T2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAtZHkgPiAtMiAqIGR4ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIC15ICovCisgICAgICAgICAgKnggPSAtZ2x5cGhwYXRoLT54T2Zmc2V0OworICAgICAgICAgICp5ID0gZ2x5cGhwYXRoLT55T2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIC14IC15ICovCisgICAgICAgICAgKnggPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIC0wLjcgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT54T2Zmc2V0ICk7CisgICAgICAgICAgKnkgPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDEuMCArIDAuNyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyoKKyAgICogVGhlIGZ1bmN0aW9ucyBjZjJfZ2x5cGhwYXRoX3ttb3ZlVG8sbGluZVRvLGN1cnZlVG8sY2xvc2VPcGVuUGF0aH0gYXJlCisgICAqIGNhbGxlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBDaGFyYWN0ZXIgU3BhY2UgKENTKSBjb29yZGluYXRlcy4gIEVhY2gKKyAgICogcGF0aCBlbGVtZW50IGlzIHBsYWNlZCBpbnRvIGEgcXVldWUgb2YgbGVuZ3RoIG9uZSB0byBhd2FpdCB0aGUKKyAgICogY2FsY3VsYXRpb24gb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50LiAgQXQgdGhhdCB0aW1lLCB0aGUgZGFya2VuaW5nCisgICAqIG9mZnNldCBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnQgaXMga25vd24gYW5kIGpvaW5zIGNhbiBiZSBjb21wdXRlZCwKKyAgICogaW5jbHVkaW5nIHBvc3NpYmxlIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGVsZW1lbnQsIGJlZm9yZSBtYXBwaW5nIHRvCisgICAqIERldmljZSBTcGFjZSAoRFMpIGFuZCBwYXNzaW5nIGl0IG9uIHRvIHRoZSBvdXRsaW5lIGNvbnN1bWVyLgorICAgKgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2dseXBocGF0aF9tb3ZlVG8oIENGMl9HbHlwaFBhdGggIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB5ICkKKyAgeworICAgIGNmMl9nbHlwaHBhdGhfY2xvc2VPcGVuUGF0aCggZ2x5cGhwYXRoICk7CisKKyAgICAvKiBzYXZlIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBtb3ZlIGZvciBsYXRlciwgd2hlbiB3ZSdsbCBrbm93IGhvdyB0byAqLworICAgIC8qIG9mZnNldCBpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogYWxzbyBzYXZlIGxhc3QgbW92ZSBwb2ludCAqLworICAgIGdseXBocGF0aC0+Y3VycmVudENTLnggPSBnbHlwaHBhdGgtPnN0YXJ0LnggPSB4OworICAgIGdseXBocGF0aC0+Y3VycmVudENTLnkgPSBnbHlwaHBhdGgtPnN0YXJ0LnkgPSB5OworCisgICAgZ2x5cGhwYXRoLT5tb3ZlSXNQZW5kaW5nID0gVFJVRTsKKworICAgIC8qIGVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgbWFwIHdpdGggY3VycmVudCBtYXNrICovCisgICAgaWYgKCAhY2YyX2hpbnRtYXBfaXNWYWxpZCggJmdseXBocGF0aC0+aGludE1hcCApIHx8CisgICAgICAgICBjZjJfaGludG1hc2tfaXNOZXcoIGdseXBocGF0aC0+aGludE1hc2sgKSAgICkKKyAgICAgIGNmMl9oaW50bWFwX2J1aWxkKCAmZ2x5cGhwYXRoLT5oaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+aFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT52U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPmhpbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+aGludE9yaWdpblksCisgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKKworICAgIC8qIHNhdmUgYSBjb3B5IG9mIGN1cnJlbnQgSGludE1hcCB0byB1c2Ugd2hlbiBkcmF3aW5nIGluaXRpYWwgcG9pbnQgKi8KKyAgICBnbHlwaHBhdGgtPmZpcnN0SGludE1hcCA9IGdseXBocGF0aC0+aGludE1hcDsgICAgIC8qIHN0cnVjdHVyZSBjb3B5ICovCisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgeSApCisgIHsKKyAgICBDRjJfRml4ZWQgIHhPZmZzZXQsIHlPZmZzZXQ7CisgICAgRlRfVmVjdG9yICBQMCwgUDE7CisgICAgRlRfQm9vbCAgICBuZXdIaW50TWFwOworCisgICAgLyoKKyAgICAgKiBOZXcgaGludHMgd2lsbCBiZSBhcHBsaWVkIGFmdGVyIGNmMl9nbHlwaHBhdGhfcHVzaFByZXZFbGVtIGhhcyBydW4uCisgICAgICogSW4gY2FzZSB0aGlzIGlzIGEgc3ludGhlc2l6ZWQgY2xvc2luZyBsaW5lLCBhbnkgbmV3IGhpbnRzIHNob3VsZCBiZQorICAgICAqIGRlbGF5ZWQgdW50aWwgdGhpcyBwYXRoIGlzIGNsb3NlZCAoYGNmMl9oaW50bWFza19pc05ldycgd2lsbCBiZQorICAgICAqIGNhbGxlZCBhZ2FpbiBiZWZvcmUgdGhlIG5leHQgbGluZSBvciBjdXJ2ZSkuCisgICAgICovCisKKyAgICAvKiB0cnVlIGlmIG5ldyBoaW50IG1hcCBub3Qgb24gY2xvc2UgKi8KKyAgICBuZXdIaW50TWFwID0gY2YyX2hpbnRtYXNrX2lzTmV3KCBnbHlwaHBhdGgtPmhpbnRNYXNrICkgJiYKKyAgICAgICAgICAgICAgICAgIWdseXBocGF0aC0+cGF0aElzQ2xvc2luZzsKKworICAgIC8qCisgICAgICogWmVyby1sZW5ndGggbGluZXMgbWF5IG9jY3VyIGluIHRoZSBjaGFyc3RyaW5nLiAgQmVjYXVzZSB3ZSBjYW5ub3QKKyAgICAgKiBjb21wdXRlIGRhcmtlbmluZyBvZmZzZXRzIG9yIGludGVyc2VjdGlvbnMgZnJvbSB6ZXJvLWxlbmd0aCBsaW5lcywKKyAgICAgKiBpdCBpcyBiZXN0IHRvIHJlbW92ZSB0aGVtIGFuZCBhdm9pZCBhcnRpZmFjdHMuICBIb3dldmVyLCB6ZXJvLWxlbmd0aAorICAgICAqIGxpbmVzIGluIENTIGF0IHRoZSBzdGFydCBvZiBhIG5ldyBoaW50IG1hcCBjYW4gZ2VuZXJhdGUgbm9uLXplcm8KKyAgICAgKiBsaW5lcyBpbiBEUyBkdWUgdG8gaGludCBzdWJzdGl0dXRpb24uICBXZSBkZXRlY3QgYSBjaGFuZ2UgaW4gaGludAorICAgICAqIG1hcCBoZXJlIGFuZCBwYXNzIHRob3NlIHplcm8tbGVuZ3RoIGxpbmVzIGFsb25nLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBOb3RlOiBGaW5kIGV4cGxpY2l0bHkgY2xvc2VkIHBhdGhzIGhlcmUgd2l0aCBhIGNvbmRpdGlvbmFsCisgICAgICogICAgICAgYnJlYWtwb2ludCB1c2luZworICAgICAqCisgICAgICogICAgICAgICAhZ3AtPnBhdGhJc0Nsb3NpbmcgJiYgZ3AtPnN0YXJ0LnggPT0geCAmJiBncC0+c3RhcnQueSA9PSB5CisgICAgICoKKyAgICAgKi8KKworICAgIGlmICggZ2x5cGhwYXRoLT5jdXJyZW50Q1MueCA9PSB4ICYmCisgICAgICAgICBnbHlwaHBhdGgtPmN1cnJlbnRDUy55ID09IHkgJiYKKyAgICAgICAgICFuZXdIaW50TWFwICAgICAgICAgICAgICAgICApCisgICAgICAvKgorICAgICAgICogSWdub3JlIHplcm8tbGVuZ3RoIGxpbmVzIGluIENTIHdoZXJlIHRoZSBoaW50IG1hcCBpcyB0aGUgc2FtZQorICAgICAgICogYmVjYXVzZSB0aGUgbGluZSBpbiBEUyB3aWxsIGFsc28gYmUgemVybyBsZW5ndGguCisgICAgICAgKgorICAgICAgICogSWdub3JlIHplcm8tbGVuZ3RoIGxpbmVzIHdoZW4gd2Ugc3ludGhlc2l6ZSBhIGNsb3NpbmcgbGluZSBiZWNhdXNlCisgICAgICAgKiB0aGUgY2xvc2Ugd2lsbCBiZSBoYW5kbGVkIGluIGNmMl9nbHlwaFBhdGhfcHVzaFByZXZFbGVtLgorICAgICAgICovCisgICAgICByZXR1cm47CisKKyAgICBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQoIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+Y3VycmVudENTLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPmN1cnJlbnRDUy55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5T2Zmc2V0ICk7CisKKyAgICAvKiBjb25zdHJ1Y3Qgb2Zmc2V0IHBvaW50cyAqLworICAgIFAwLnggPSBnbHlwaHBhdGgtPmN1cnJlbnRDUy54ICsgeE9mZnNldDsKKyAgICBQMC55ID0gZ2x5cGhwYXRoLT5jdXJyZW50Q1MueSArIHlPZmZzZXQ7CisgICAgUDEueCA9IHggKyB4T2Zmc2V0OworICAgIFAxLnkgPSB5ICsgeU9mZnNldDsKKworICAgIGlmICggZ2x5cGhwYXRoLT5tb3ZlSXNQZW5kaW5nICkKKyAgICB7CisgICAgICAvKiBlbWl0IG9mZnNldCAxc3QgcG9pbnQgYXMgTW92ZVRvICovCisgICAgICBjZjJfZ2x5cGhwYXRoX3B1c2hNb3ZlKCBnbHlwaHBhdGgsIFAwICk7CisKKyAgICAgIGdseXBocGF0aC0+bW92ZUlzUGVuZGluZyA9IEZBTFNFOyAgLyogYWRqdXN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgICAgIGdseXBocGF0aC0+cGF0aElzT3BlbiAgICA9IFRSVUU7CisKKyAgICAgIGdseXBocGF0aC0+b2Zmc2V0U3RhcnQxID0gUDE7ICAgICAgICAgICAgICAvKiByZWNvcmQgc2Vjb25kIHBvaW50ICovCisgICAgfQorCisgICAgaWYgKCBnbHlwaHBhdGgtPmVsZW1Jc1F1ZXVlZCApCisgICAgeworICAgICAgRlRfQVNTRVJUKCBjZjJfaGludG1hcF9pc1ZhbGlkKCAmZ2x5cGhwYXRoLT5oaW50TWFwICkgfHwKKyAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5oaW50TWFwLmNvdW50ID09IDAgICAgICAgICAgICAgICk7CisKKyAgICAgIGNmMl9nbHlwaHBhdGhfcHVzaFByZXZFbGVtKCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBocGF0aC0+aGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKKyAgICB9CisKKyAgICAvKiBxdWV1ZSB0aGUgY3VycmVudCBlbGVtZW50IHdpdGggb2Zmc2V0IHBvaW50cyAqLworICAgIGdseXBocGF0aC0+ZWxlbUlzUXVldWVkID0gVFJVRTsKKyAgICBnbHlwaHBhdGgtPnByZXZFbGVtT3AgICA9IENGMl9QYXRoT3BMaW5lVG87CisgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAwICAgPSBQMDsKKyAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDEgICA9IFAxOworCisgICAgLyogdXBkYXRlIGN1cnJlbnQgbWFwICovCisgICAgaWYgKCBuZXdIaW50TWFwICkKKyAgICAgIGNmMl9oaW50bWFwX2J1aWxkKCAmZ2x5cGhwYXRoLT5oaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+aFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT52U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPmhpbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+aGludE9yaWdpblksCisgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKKworICAgIGdseXBocGF0aC0+Y3VycmVudENTLnggPSB4OyAgICAgLyogcHJlLW9mZnNldCBjdXJyZW50IHBvaW50ICovCisgICAgZ2x5cGhwYXRoLT5jdXJyZW50Q1MueSA9IHk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfY3VydmVUbyggQ0YyX0dseXBoUGF0aCAgZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgxLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkxLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgzLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkzICkKKyAgeworICAgIENGMl9GaXhlZCAgeE9mZnNldDEsIHlPZmZzZXQxLCB4T2Zmc2V0MywgeU9mZnNldDM7CisgICAgRlRfVmVjdG9yICBQMCwgUDEsIFAyLCBQMzsKKworCisgICAgLyogVE9ETzogaWdub3JlIHplcm8gbGVuZ3RoIHBvcnRpb25zIG9mIGN1cnZlPz8gKi8KKyAgICBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQoIGdseXBocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+Y3VycmVudENTLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPmN1cnJlbnRDUy55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4T2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5T2Zmc2V0MSApOworICAgIGNmMl9nbHlwaHBhdGhfY29tcHV0ZU9mZnNldCggZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeE9mZnNldDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeU9mZnNldDMgKTsKKworICAgIC8qIGFkZCBtb21lbnR1bSBmcm9tIHRoZSBtaWRkbGUgc2VnbWVudCAqLworICAgIGdseXBocGF0aC0+Y2FsbGJhY2tzLT53aW5kaW5nTW9tZW50dW0gKz0KKyAgICAgIGNmMl9nZXRXaW5kaW5nTW9tZW50dW0oIHgxLCB5MSwgeDIsIHkyICk7CisKKyAgICAvKiBjb25zdHJ1Y3Qgb2Zmc2V0IHBvaW50cyAqLworICAgIFAwLnggPSBnbHlwaHBhdGgtPmN1cnJlbnRDUy54ICsgeE9mZnNldDE7CisgICAgUDAueSA9IGdseXBocGF0aC0+Y3VycmVudENTLnkgKyB5T2Zmc2V0MTsKKyAgICBQMS54ID0geDEgKyB4T2Zmc2V0MTsKKyAgICBQMS55ID0geTEgKyB5T2Zmc2V0MTsKKyAgICAvKiBub3RlOiBwcmVzZXJ2ZSBhbmdsZSBvZiBmaW5hbCBzZWdtZW50IGJ5IHVzaW5nIG9mZnNldDMgYXQgYm90aCBlbmRzICovCisgICAgUDIueCA9IHgyICsgeE9mZnNldDM7CisgICAgUDIueSA9IHkyICsgeU9mZnNldDM7CisgICAgUDMueCA9IHgzICsgeE9mZnNldDM7CisgICAgUDMueSA9IHkzICsgeU9mZnNldDM7CisKKyAgICBpZiAoIGdseXBocGF0aC0+bW92ZUlzUGVuZGluZyApCisgICAgeworICAgICAgLyogZW1pdCBvZmZzZXQgMXN0IHBvaW50IGFzIE1vdmVUbyAqLworICAgICAgY2YyX2dseXBocGF0aF9wdXNoTW92ZSggZ2x5cGhwYXRoLCBQMCApOworCisgICAgICBnbHlwaHBhdGgtPm1vdmVJc1BlbmRpbmcgPSBGQUxTRTsKKyAgICAgIGdseXBocGF0aC0+cGF0aElzT3BlbiAgICA9IFRSVUU7CisKKyAgICAgIGdseXBocGF0aC0+b2Zmc2V0U3RhcnQxID0gUDE7ICAgICAgICAgICAgICAvKiByZWNvcmQgc2Vjb25kIHBvaW50ICovCisgICAgfQorCisgICAgaWYgKCBnbHlwaHBhdGgtPmVsZW1Jc1F1ZXVlZCApCisgICAgeworICAgICAgRlRfQVNTRVJUKCBjZjJfaGludG1hcF9pc1ZhbGlkKCAmZ2x5cGhwYXRoLT5oaW50TWFwICkgfHwKKyAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5oaW50TWFwLmNvdW50ID09IDAgICAgICAgICAgICAgICk7CisKKyAgICAgIGNmMl9nbHlwaHBhdGhfcHVzaFByZXZFbGVtKCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBocGF0aC0+aGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKKyAgICB9CisKKyAgICAvKiBxdWV1ZSB0aGUgY3VycmVudCBlbGVtZW50IHdpdGggb2Zmc2V0IHBvaW50cyAqLworICAgIGdseXBocGF0aC0+ZWxlbUlzUXVldWVkID0gVFJVRTsKKyAgICBnbHlwaHBhdGgtPnByZXZFbGVtT3AgICA9IENGMl9QYXRoT3BDdWJlVG87CisgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAwICAgPSBQMDsKKyAgICBnbHlwaHBhdGgtPnByZXZFbGVtUDEgICA9IFAxOworICAgIGdseXBocGF0aC0+cHJldkVsZW1QMiAgID0gUDI7CisgICAgZ2x5cGhwYXRoLT5wcmV2RWxlbVAzICAgPSBQMzsKKworICAgIC8qIHVwZGF0ZSBjdXJyZW50IG1hcCAqLworICAgIGlmICggY2YyX2hpbnRtYXNrX2lzTmV3KCBnbHlwaHBhdGgtPmhpbnRNYXNrICkgKQorICAgICAgY2YyX2hpbnRtYXBfYnVpbGQoICZnbHlwaHBhdGgtPmhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5oU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnZTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+aGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5oaW50T3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOworCisgICAgZ2x5cGhwYXRoLT5jdXJyZW50Q1MueCA9IHgzOyAgICAgICAvKiBwcmUtb2Zmc2V0IGN1cnJlbnQgcG9pbnQgKi8KKyAgICBnbHlwaHBhdGgtPmN1cnJlbnRDUy55ID0geTM7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfY2xvc2VPcGVuUGF0aCggQ0YyX0dseXBoUGF0aCAgZ2x5cGhwYXRoICkKKyAgeworICAgIGlmICggZ2x5cGhwYXRoLT5wYXRoSXNPcGVuICkKKyAgICB7CisgICAgICAvKgorICAgICAgICogQSBjbG9zaW5nIGxpbmUgaW4gQ2hhcmFjdGVyIFNwYWNlIGxpbmUgaXMgYWx3YXlzIGdlbmVyYXRlZCBiZWxvdworICAgICAgICogd2l0aCBgY2YyX2dseXBoUGF0aF9saW5lVG8nLiAgSXQgbWF5IGJlIGlnbm9yZWQgbGF0ZXIgaWYgaXQgdHVybnMKKyAgICAgICAqIG91dCB0byBiZSB6ZXJvIGxlbmd0aCBpbiBEZXZpY2UgU3BhY2UuCisgICAgICAgKi8KKyAgICAgIGdseXBocGF0aC0+cGF0aElzQ2xvc2luZyA9IFRSVUU7CisKKyAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5zdGFydC54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+c3RhcnQueSApOworCisgICAgICAvKiBlbXB0eSB0aGUgZmluYWwgZWxlbWVudCBmcm9tIHRoZSBxdWV1ZSBhbmQgY2xvc2UgdGhlIHBhdGggKi8KKyAgICAgIGlmICggZ2x5cGhwYXRoLT5lbGVtSXNRdWV1ZWQgKQorICAgICAgICBjZjJfZ2x5cGhwYXRoX3B1c2hQcmV2RWxlbSggZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBocGF0aC0+aGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHBhdGgtPm9mZnNldFN0YXJ0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+b2Zmc2V0U3RhcnQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSApOworCisgICAgICAvKiByZXNldCBzdGF0ZSBtYWNoaW5lICovCisgICAgICBnbHlwaHBhdGgtPm1vdmVJc1BlbmRpbmcgPSBUUlVFOworICAgICAgZ2x5cGhwYXRoLT5wYXRoSXNPcGVuICAgID0gRkFMU0U7CisgICAgICBnbHlwaHBhdGgtPnBhdGhJc0Nsb3NpbmcgPSBGQUxTRTsKKyAgICAgIGdseXBocGF0aC0+ZWxlbUlzUXVldWVkICA9IEZBTFNFOworICAgIH0KKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaGludHMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmhpbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZDkxYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMmhpbnRzLmgKQEAgLTAsMCArMSwyODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMmhpbnRzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIENGRiBoaW50cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0YySElOVFNfSF9fCisjZGVmaW5lIF9fQ0YySElOVFNfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBlbnVtCisgIHsKKyAgICBDRjJfTUFYX0hJTlRTID0gOTYgICAgLyogbWF4aW11bSAjIG9mIGhpbnRzICovCisgIH07CisKKworICAvKgorICAgKiBBIEhpbnRNYXNrIG9iamVjdCBzdG9yZXMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBoaW50cyBpbiB0aGUKKyAgICogY2hhcnN0cmluZyBhcmUgYWN0aXZlIGF0IGEgZ2l2ZW4gdGltZS4gIEhpbnRzIGluIENGRiBtdXN0IGJlIGRlY2xhcmVkCisgICAqIGF0IHRoZSBzdGFydCwgYmVmb3JlIGFueSBkcmF3aW5nIG9wZXJhdG9ycywgd2l0aCBob3Jpem9udGFsIGhpbnRzCisgICAqIHByZWNlZGluZyB2ZXJ0aWNhbCBoaW50cy4gIFRoZSBIaW50TWFzayBpcyBvcmRlcmVkIHRoZSBzYW1lIHdheSwgd2l0aAorICAgKiBob3Jpem9udGFsIGhpbnRzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHZlcnRpY2FsIGhpbnRzLiAgQ2xpZW50cyBhcmUKKyAgICogcmVzcG9uc2libGUgZm9yIGtub3dpbmcgaG93IG1hbnkgb2YgZWFjaCB0eXBlIGFyZSBwcmVzZW50LgorICAgKgorICAgKiBUaGUgbWF4aW11bSB0b3RhbCBudW1iZXIgb2YgaGludHMgaXMgOTYsIGFzIHNwZWNpZmllZCBieSB0aGUgQ0ZGCisgICAqIHNwZWNpZmljYXRpb24uCisgICAqCisgICAqIEEgSGludE1hc2sgaXMgYnVpbHQgMCBvciBtb3JlIHRpbWVzIHdoaWxlIGludGVycHJldGluZyBhIGNoYXJzdHJpbmcsIGJ5CisgICAqIHRoZSBIaW50TWFzayBvcGVyYXRvci4gIFRoZXJlIGlzIG9ubHkgb25lIEhpbnRNYXNrLCBidXQgaXQgaXMgYnVpbHQgb3IKKyAgICogcmVidWlsdCBlYWNoIHRpbWUgdGhlcmUgaXMgYSBoaW50IHN1YnN0aXR1dGlvbiAoSGludE1hc2sgb3BlcmF0b3IpIGluCisgICAqIHRoZSBjaGFyc3RyaW5nLiAgQSBkZWZhdWx0IEhpbnRNYXNrIHdpdGggYWxsIGJpdHMgc2V0IGlzIGJ1aWx0IGlmIHRoZXJlCisgICAqIGhhcyBiZWVuIG5vIEhpbnRNYXNrIG9wZXJhdG9yIHByaW9yIHRvIHRoZSBmaXJzdCBkcmF3aW5nIG9wZXJhdG9yLgorICAgKgorICAgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgQ0YyX0hpbnRNYXNrUmVjXworICB7CisgICAgRlRfRXJyb3IqICBlcnJvcjsKKworICAgIEZUX0Jvb2wgIGlzVmFsaWQ7CisgICAgRlRfQm9vbCAgaXNOZXc7CisKKyAgICBzaXplX3QgIGJpdENvdW50OworICAgIHNpemVfdCAgYnl0ZUNvdW50OworCisgICAgRlRfQnl0ZSAgbWFza1soIENGMl9NQVhfSElOVFMgKyA3ICkgLyA4XTsKKworICB9IENGMl9IaW50TWFza1JlYywgKkNGMl9IaW50TWFzazsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfU3RlbUhpbnRSZWNfCisgIHsKKyAgICBGVF9Cb29sICB1c2VkOyAgICAgLyogRFMgcG9zaXRpb25zIGFyZSB2YWxpZCAgICAgICAgICovCisKKyAgICBDRjJfRml4ZWQgIG1pbjsgICAgLyogb3JpZ2luYWwgY2hhcmFjdGVyIHNwYWNlIHZhbHVlICovCisgICAgQ0YyX0ZpeGVkICBtYXg7CisKKyAgICBDRjJfRml4ZWQgIG1pbkRTOyAgLyogRFMgcG9zaXRpb24gYWZ0ZXIgZmlyc3QgdXNlICAgICovCisgICAgQ0YyX0ZpeGVkICBtYXhEUzsKKworICB9IENGMl9TdGVtSGludFJlYywgKkNGMl9TdGVtSGludDsKKworCisgIC8qCisgICAqIEEgSGludE1hcCBvYmplY3Qgc3RvcmVzIGEgcGllY2V3aXNlIGxpbmVhciBmdW5jdGlvbiBmb3IgbWFwcGluZworICAgKiB5LWNvb3JkaW5hdGVzIGZyb20gY2hhcmFjdGVyIHNwYWNlIHRvIGRldmljZSBzcGFjZSwgcHJvdmlkaW5nCisgICAqIGFwcHJvcHJpYXRlIHBpeGVsIGFsaWdubWVudCB0byBzdGVtIGVkZ2VzLgorICAgKgorICAgKiBUaGUgbWFwIGlzIGltcGxlbWVudGVkIGFzIGFuIGFycmF5IG9mIGBDRjJfSGludCcgZWxlbWVudHMsIGVhY2gKKyAgICogcmVwcmVzZW50aW5nIGFuIGVkZ2UuICBXaGVuIGVkZ2VzIGFyZSBwYWlyZWQsIGFzIGZyb20gc3RlbSBoaW50cywgdGhlCisgICAqIGJvdHRvbSBlZGdlIG11c3QgaW1tZWRpYXRlbHkgcHJlY2VkZSB0aGUgdG9wIGVkZ2UgaW4gdGhlIGFycmF5LgorICAgKiBFbGVtZW50IGNoYXJhY3RlciBzcGFjZSBBTkQgZGV2aWNlIHNwYWNlIHBvc2l0aW9ucyBtdXN0IGJvdGggaW5jcmVhc2UKKyAgICogbW9ub3RvbmljYWxseSBpbiB0aGUgYXJyYXkuICBgQ0YyX0hpbnQnIGVsZW1lbnRzIGFyZSBhbHNvIHVzZWQgYXMKKyAgICogcGFyYW1ldGVycyB0byBgY2YyX2JsdWVzX2NhcHR1cmUnLgorICAgKgorICAgKiBUaGUgYGNmMl9oaW50bWFwX2J1aWxkJyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBkcmF3aW5nCisgICAqIG9wZXJhdGlvbiAoYmVnaW5uaW5nIHdpdGggYSBNb3ZlIG9wZXJhdG9yKSBhbmQgYXQgZWFjaCBoaW50CisgICAqIHN1YnN0aXR1dGlvbiAoSGludE1hc2sgb3BlcmF0b3IpLgorICAgKgorICAgKiBUaGUgYGNmMl9oaW50bWFwX21hcCcgbWV0aG9kIGlzIGNhbGxlZCB0byB0cmFuc2Zvcm0geS1jb29yZGluYXRlcyBhdAorICAgKiBlYWNoIGRyYXdpbmcgb3BlcmF0aW9uIChtb3ZlLCBsaW5lLCBjdXJ2ZSkuCisgICAqCisgICAqLworCisgIC8qIFRPRE86IG1ha2UgdGhpcyBhIENGMl9BcnJTdGFjayBhbmQgYWRkIGEgZGVlcCBjb3B5IG1ldGhvZCAqLworICBlbnVtCisgIHsKKyAgICBDRjJfTUFYX0hJTlRfRURHRVMgPSBDRjJfTUFYX0hJTlRTICogMgorICB9OworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGMl9IaW50TWFwUmVjXworICB7CisgICAgQ0YyX0ZvbnQgIGZvbnQ7CisKKyAgICAvKiBpbml0aWFsIG1hcCBiYXNlZCBvbiBibHVlIHpvbmVzICovCisgICAgc3RydWN0IENGMl9IaW50TWFwUmVjXyogIGluaXRpYWxIaW50TWFwOworCisgICAgLyogd29ya2luZyBzdG9yYWdlIGZvciAybmQgcGFzcyBhZGp1c3RIaW50cyAqLworICAgIENGMl9BcnJTdGFjayAgaGludE1vdmVzOworCisgICAgRlRfQm9vbCAgaXNWYWxpZDsKKyAgICBGVF9Cb29sICBoaW50ZWQ7CisKKyAgICBDRjJfRml4ZWQgIHNjYWxlOworICAgIENGMl9VSW50ICAgY291bnQ7CisKKyAgICAvKiBzdGFydCBzZWFyY2ggZnJvbSB0aGlzIGluZGV4ICovCisgICAgQ0YyX1VJbnQgIGxhc3RJbmRleDsKKworICAgIENGMl9IaW50UmVjICBlZGdlW0NGMl9NQVhfSElOVF9FREdFU107IC8qIDE5MiAqLworCisgIH0gQ0YyX0hpbnRNYXBSZWMsICpDRjJfSGludE1hcDsKKworCisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgY2YyX2hpbnRfaXNWYWxpZCggY29uc3QgQ0YyX0hpbnQgIGhpbnQgKTsKKyAgRlRfTE9DQUwoIEZUX0Jvb2wgKQorICBjZjJfaGludF9pc1RvcCggY29uc3QgQ0YyX0hpbnQgIGhpbnQgKTsKKyAgRlRfTE9DQUwoIEZUX0Jvb2wgKQorICBjZjJfaGludF9pc0JvdHRvbSggY29uc3QgQ0YyX0hpbnQgIGhpbnQgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfaGludF9sb2NrKCBDRjJfSGludCAgaGludCApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfaGludG1hcF9pbml0KCBDRjJfSGludE1hcCAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgIENGMl9Gb250ICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0hpbnRNYXAgICBpbml0aWFsTWFwLAorICAgICAgICAgICAgICAgICAgICBDRjJfQXJyU3RhY2sgIGhpbnRNb3ZlcywKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICBzY2FsZSApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9oaW50bWFwX2J1aWxkKCBDRjJfSGludE1hcCAgIGhpbnRtYXAsCisgICAgICAgICAgICAgICAgICAgICBDRjJfQXJyU3RhY2sgIGhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0FyclN0YWNrICB2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIENGMl9IaW50TWFzayAgaGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgIGhpbnRPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGluaXRpYWxNYXAgKTsKKworCisgIC8qCisgICAqIEdseXBoUGF0aCBpcyBhIHdyYXBwZXIgZm9yIGRyYXdpbmcgb3BlcmF0aW9ucyB0aGF0IHNjYWxlcyB0aGUKKyAgICogY29vcmRpbmF0ZXMgYWNjb3JkaW5nIHRvIHRoZSByZW5kZXIgbWF0cml4IGFuZCBIaW50TWFwLiAgSXQgYWxzbyB0cmFja3MKKyAgICogb3BlbiBwYXRocyB0byBjb250cm9sIENsb3NlUGF0aCBhbmQgdG8gaW5zZXJ0IE1vdmVUbyBmb3IgYnJva2VuIGZvbnRzLgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGMl9HbHlwaFBhdGhSZWNfCisgIHsKKyAgICAvKiBUT0RPOiBnYXRoZXIgc29tZSBvZiB0aGVzZSBpbnRvIGEgaGludGluZyBjb250ZXh0ICovCisKKyAgICBDRjJfRm9udCAgICAgICAgICAgICAgZm9udDsgICAgICAgICAgIC8qIGZvbnQgaW5zdGFuY2UgICAgKi8KKyAgICBDRjJfT3V0bGluZUNhbGxiYWNrcyAgY2FsbGJhY2tzOyAgICAgIC8qIG91dGxpbmUgY29uc3VtZXIgKi8KKworCisgICAgQ0YyX0hpbnRNYXBSZWMgIGhpbnRNYXA7ICAgICAgICAvKiBjdXJyZW50IGhpbnQgbWFwICAgICAgICAgICAgKi8KKyAgICBDRjJfSGludE1hcFJlYyAgZmlyc3RIaW50TWFwOyAgIC8qIHNhdmVkIGNvcHkgICAgICAgICAgICAgICAgICAqLworICAgIENGMl9IaW50TWFwUmVjICBpbml0aWFsSGludE1hcDsgLyogYmFzZWQgb24gYWxsIGNhcHR1cmVkIGhpbnRzICovCisKKyAgICBDRjJfQXJyU3RhY2tSZWMgIGhpbnRNb3ZlczsgIC8qIGxpc3Qgb2YgaGludCBtb3ZlcyBmb3IgMm5kIHBhc3MgKi8KKworICAgIENGMl9GaXhlZCAgc2NhbGVYOyAgICAgICAgIC8qIG1hdHJpeCBhICovCisgICAgQ0YyX0ZpeGVkICBzY2FsZUM7ICAgICAgICAgLyogbWF0cml4IGMgKi8KKyAgICBDRjJfRml4ZWQgIHNjYWxlWTsgICAgICAgICAvKiBtYXRyaXggZCAqLworCisgICAgRlRfVmVjdG9yICBmcmFjdGlvbmFsVHJhbnNsYXRpb247ICAvKiBpbmNsdWRpbmcgZGV2aWNlWFNjYWxlICovCisjaWYgMAorICAgIENGMl9GaXhlZCAgaFNoaWZ0OyAgICAvKiBjaGFyYWN0ZXIgc3BhY2UgaG9yaXpvbnRhbCBzaGlmdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoZm9yIGZhdXhpbmcpICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyAgICBGVF9Cb29sICBwYXRoSXNPcGVuOyAgICAgLyogdHJ1ZSBhZnRlciBNb3ZlVG8gICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgIHBhdGhJc0Nsb3Npbmc7ICAvKiB0cnVlIHdoZW4gc3ludGhlc2l6aW5nIGNsb3NlcGF0aCBsaW5lICovCisgICAgRlRfQm9vbCAgZGFya2VuOyAgICAgICAgIC8qIHRydWUgaWYgc3RlbSBkYXJrZW5pbmcgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICBtb3ZlSXNQZW5kaW5nOyAgLyogdHJ1ZSBiZXR3ZWVuIE1vdmVUbyBhbmQgb2Zmc2V0IE1vdmVUbyAqLworCisgICAgLyogcmVmZXJlbmNlcyB1c2VkIHRvIGNhbGwgYGNmMl9oaW50bWFwX2J1aWxkJywgaWYgbmVjZXNzYXJ5ICovCisgICAgQ0YyX0FyclN0YWNrICAgICAgICAgaFN0ZW1IaW50QXJyYXk7CisgICAgQ0YyX0FyclN0YWNrICAgICAgICAgdlN0ZW1IaW50QXJyYXk7CisgICAgQ0YyX0hpbnRNYXNrICAgICAgICAgaGludE1hc2s7ICAgICAvKiBwdHIgdG8gdGhlIGN1cnJlbnQgbWFzayAqLworICAgIENGMl9GaXhlZCAgICAgICAgICAgIGhpbnRPcmlnaW5ZOyAgLyogY29weSBvZiBjdXJyZW50IG9yaWdpbiAgKi8KKyAgICBjb25zdCBDRjJfQmx1ZXNSZWMqICBibHVlczsKKworICAgIENGMl9GaXhlZCAgeE9mZnNldDsgICAgICAgIC8qIGNoYXJhY3RlciBzcGFjZSBvZmZzZXRzICovCisgICAgQ0YyX0ZpeGVkICB5T2Zmc2V0OworCisgICAgLyogY2hhcmFjdGVyIHNwYWNlIG1pdGVyIGxpbWl0IHRocmVzaG9sZCAqLworICAgIENGMl9GaXhlZCAgbWl0ZXJMaW1pdDsKKyAgICAvKiB2ZXJ0aWNhbC9ob3J6aXpvbnRhbCBzbmFwIGRpc3RhbmNlIGluIGNoYXJhY3RlciBzcGFjZSAqLworICAgIENGMl9GaXhlZCAgc25hcFRocmVzaG9sZDsKKworICAgIEZUX1ZlY3RvciAgb2Zmc2V0U3RhcnQwOyAgLyogZmlyc3QgYW5kIHNlY29uZCBwb2ludHMgb2YgZmlyc3QgKi8KKyAgICBGVF9WZWN0b3IgIG9mZnNldFN0YXJ0MTsgIC8qIGVsZW1lbnQgd2l0aCBvZmZzZXQgYXBwbGllZCAgICAgICovCisKKyAgICAvKiBjdXJyZW50IHBvaW50LCBjaGFyYWN0ZXIgc3BhY2UsIGJlZm9yZSBvZmZzZXQgKi8KKyAgICBGVF9WZWN0b3IgIGN1cnJlbnRDUzsKKyAgICAvKiBjdXJyZW50IHBvaW50LCBkZXZpY2Ugc3BhY2UgKi8KKyAgICBGVF9WZWN0b3IgIGN1cnJlbnREUzsKKyAgICAvKiBzdGFydCBwb2ludCBvZiBzdWJwYXRoLCBjaGFyYWN0ZXIgc3BhY2UgKi8KKyAgICBGVF9WZWN0b3IgIHN0YXJ0OworCisgICAgLyogdGhlIGZvbGxvd2luZyBtZW1iZXJzIGNvbnN0aXR1dGUgdGhlIGBxdWV1ZScgb2Ygb25lIGVsZW1lbnQgKi8KKyAgICBGVF9Cb29sICBlbGVtSXNRdWV1ZWQ7CisgICAgQ0YyX0ludCAgcHJldkVsZW1PcDsKKworICAgIEZUX1ZlY3RvciAgcHJldkVsZW1QMDsKKyAgICBGVF9WZWN0b3IgIHByZXZFbGVtUDE7CisgICAgRlRfVmVjdG9yICBwcmV2RWxlbVAyOworICAgIEZUX1ZlY3RvciAgcHJldkVsZW1QMzsKKworICB9IENGMl9HbHlwaFBhdGhSZWMsICpDRjJfR2x5cGhQYXRoOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2x5cGhwYXRoX2luaXQoIENGMl9HbHlwaFBhdGggICAgICAgICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZvbnQgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX091dGxpbmVDYWxsYmFja3MgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICAgICAgICAgc2NhbGVZLAorICAgICAgICAgICAgICAgICAgICAgIC8qIENGMl9GaXhlZCBoU2hpZnQsICovCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0FyclN0YWNrICAgICAgICAgIGhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgIENGMl9BcnJTdGFjayAgICAgICAgICB2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfSGludE1hc2sgICAgICAgICAgaGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICAgIGhpbnRPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0YyX0JsdWVzICAgICAgIGJsdWVzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogICAgICBmcmFjdGlvbmFsVHJhbnNsYXRpb24gKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2x5cGhwYXRoX2ZpbmFsaXplKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfbW92ZVRvKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgeSApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgeSApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nbHlwaHBhdGhfY3VydmVUbyggQ0YyX0dseXBoUGF0aCAgZ2x5cGhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgxLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkxLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHgzLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIHkzICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2dseXBocGF0aF9jbG9zZU9wZW5QYXRoKCBDRjJfR2x5cGhQYXRoICBnbHlwaHBhdGggKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fQ0YySElOVFNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJpbnRycC5jIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaW50cnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdlMDYwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaW50cnAuYwpAQCAtMCwwICsxLDE1NzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMmludHJwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBZG9iZSdzIENGRiBJbnRlcnByZXRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworI2luY2x1ZGUgImNmMmdsdWUuaCIKKyNpbmNsdWRlICJjZjJmb250LmgiCisjaW5jbHVkZSAiY2Yyc3RhY2suaCIKKyNpbmNsdWRlICJjZjJoaW50cy5oIgorI2luY2x1ZGUgImNmMmludHJwLmgiCisKKyNpbmNsdWRlICJjZjJlcnJvci5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2YyaW50ZXJwCisKKworICAvKiBzb21lIG9wZXJhdG9ycyBhcmUgbm90IGltcGxlbWVudGVkIHlldCAqLworI2RlZmluZSBDRjJfRklYTUUgIEZUX1RSQUNFNCgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiIgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRvciBub3QgaW1wbGVtZW50ZWQgeWV0XG4iICkpCisKKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9oaW50bWFza19pbml0KCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICAgICBlcnJvciApCisgIHsKKyAgICBGVF9aRVJPKCBoaW50bWFzayApOworCisgICAgaGludG1hc2stPmVycm9yID0gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGNmMl9oaW50bWFza19pc1ZhbGlkKCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICkKKyAgeworICAgIHJldHVybiBoaW50bWFzay0+aXNWYWxpZDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgY2YyX2hpbnRtYXNrX2lzTmV3KCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICkKKyAgeworICAgIHJldHVybiBoaW50bWFzay0+aXNOZXc7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9oaW50bWFza19zZXROZXcoIENGMl9IaW50TWFzayAgaGludG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgdmFsICkKKyAgeworICAgIGhpbnRtYXNrLT5pc05ldyA9IHZhbDsKKyAgfQorCisKKyAgLyogY2xpZW50cyBjYWxsIGBnZXRNYXNrUHRyJyBpbiBvcmRlciB0byBpdGVyYXRlICovCisgIC8qIHRocm91Z2ggaGludCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfQnl0ZSogKQorICBjZjJfaGludG1hc2tfZ2V0TWFza1B0ciggQ0YyX0hpbnRNYXNrICBoaW50bWFzayApCisgIHsKKyAgICByZXR1cm4gaGludG1hc2stPm1hc2s7CisgIH0KKworCisgIHN0YXRpYyBzaXplX3QKKyAgY2YyX2hpbnRtYXNrX3NldENvdW50cyggQ0YyX0hpbnRNYXNrICBoaW50bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICBiaXRDb3VudCApCisgIHsKKyAgICBpZiAoIGJpdENvdW50ID4gQ0YyX01BWF9ISU5UUyApCisgICAgeworICAgICAgLyogdG90YWwgb2YgaCBhbmQgdiBzdGVtcyBtdXN0IGJlIDw9IDk2ICovCisgICAgICBDRjJfU0VUX0VSUk9SKCBoaW50bWFzay0+ZXJyb3IsIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBoaW50bWFzay0+Yml0Q291bnQgID0gYml0Q291bnQ7CisgICAgaGludG1hc2stPmJ5dGVDb3VudCA9ICggaGludG1hc2stPmJpdENvdW50ICsgNyApIC8gODsKKworICAgIGhpbnRtYXNrLT5pc1ZhbGlkID0gVFJVRTsKKyAgICBoaW50bWFzay0+aXNOZXcgICA9IFRSVUU7CisKKyAgICByZXR1cm4gYml0Q291bnQ7CisgIH0KKworCisgIC8qIGNvbnN1bWUgdGhlIGhpbnRtYXNrIGJ5dGVzIGZyb20gdGhlIGNoYXJzdHJpbmcsIGFkdmFuY2luZyB0aGUgc3JjICovCisgIC8qIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9oaW50bWFza19yZWFkKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICBiaXRDb3VudCApCisgIHsKKyAgICBzaXplX3QgIGk7CisKKyNpZm5kZWYgQ0YyX05ERUJVRworICAgIC8qIHRoZXNlIGFyZSB0aGUgYml0cyBpbiB0aGUgZmluYWwgbWFzayBieXRlIHRoYXQgc2hvdWxkIGJlIHplcm8gICovCisgICAgLyogTm90ZTogdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgaW4gYW4gYXNzZXJ0IGV4cHJlc3Npb24gYmVsb3cgKi8KKyAgICAvKiBhbmQgdGhlbiBvbmx5IGlmIENGMl9OREVCVUcgaXMgbm90IGRlZmluZWQgICAgICAgICAgICAgICAgICAgICAqLworICAgIENGMl9VSW50ICBtYXNrID0gKCAxIDw8ICggLShDRjJfSW50KWJpdENvdW50ICYgNyApICkgLSAxOworI2VuZGlmCisKKworICAgIC8qIGluaXRpYWxpemUgY291bnRzIGFuZCBpc1ZhbGlkICovCisgICAgaWYgKCBjZjJfaGludG1hc2tfc2V0Q291bnRzKCBoaW50bWFzaywgYml0Q291bnQgKSA9PSAwICkKKyAgICAgIHJldHVybjsKKworICAgIEZUX0FTU0VSVCggaGludG1hc2stPmJ5dGVDb3VudCA+IDAgKTsKKworICAgIEZUX1RSQUNFNCgoICIgKG1hc2tieXRlczoiICkpOworCisgICAgLyogc2V0IG1hc2sgYW5kIGFkdmFuY2UgaW50ZXJwcmV0ZXIncyBjaGFyc3RyaW5nIHBvaW50ZXIgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGhpbnRtYXNrLT5ieXRlQ291bnQ7IGkrKyApCisgICAgeworICAgICAgaGludG1hc2stPm1hc2tbaV0gPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisgICAgICBGVF9UUkFDRTQoKCAiIDB4JTAyWCIsIGhpbnRtYXNrLT5tYXNrW2ldICkpOworICAgIH0KKworICAgIEZUX1RSQUNFNCgoICIpXG4iICkpOworCisgICAgLyogYXNzZXJ0IGFueSB1bnVzZWQgYml0cyBpbiBsYXN0IGJ5dGUgYXJlIHplcm8gdW5sZXNzIHRoZXJlJ3MgYSBwcmlvciAqLworICAgIC8qIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBiaXRDb3VudCAtPiBtYXNrLCAwIC0+IDAsIDEgLT4gN2YsIDIgLT4gM2YsIC4uLiA2IC0+IDMsIDcgLT4gMSAgICAgICovCisjaWZuZGVmIENGMl9OREVCVUcKKyAgICBGVF9BU1NFUlQoICggaGludG1hc2stPm1hc2tbaGludG1hc2stPmJ5dGVDb3VudCAtIDFdICYgbWFzayApID09IDAgfHwKKyAgICAgICAgICAgICAgICpoaW50bWFzay0+ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZgorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfaGludG1hc2tfc2V0QWxsKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIGJpdENvdW50ICkKKyAgeworICAgIHNpemVfdCAgICBpOworICAgIENGMl9VSW50ICBtYXNrID0gKCAxIDw8ICggLShDRjJfSW50KWJpdENvdW50ICYgNyApICkgLSAxOworCisKKyAgICAvKiBpbml0aWFsaXplIGNvdW50cyBhbmQgaXNWYWxpZCAqLworICAgIGlmICggY2YyX2hpbnRtYXNrX3NldENvdW50cyggaGludG1hc2ssIGJpdENvdW50ICkgPT0gMCApCisgICAgICByZXR1cm47CisKKyAgICBGVF9BU1NFUlQoIGhpbnRtYXNrLT5ieXRlQ291bnQgPiAwICk7CisgICAgRlRfQVNTRVJUKCBoaW50bWFzay0+Ynl0ZUNvdW50IDwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mICggaGludG1hc2stPm1hc2sgKSAvIHNpemVvZiAoIGhpbnRtYXNrLT5tYXNrWzBdICkgKTsKKworICAgIC8qIHNldCBtYXNrIHRvIGFsbCBvbmVzICovCisgICAgZm9yICggaSA9IDA7IGkgPCBoaW50bWFzay0+Ynl0ZUNvdW50OyBpKysgKQorICAgICAgaGludG1hc2stPm1hc2tbaV0gPSAweEZGOworCisgICAgLyogY2xlYXIgdW51c2VkIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBiaXRDb3VudCAtPiBtYXNrLCAwIC0+IDAsIDEgLT4gN2YsIDIgLT4gM2YsIC4uLiA2IC0+IDMsIDcgLT4gMSAqLworICAgIGhpbnRtYXNrLT5tYXNrW2hpbnRtYXNrLT5ieXRlQ291bnQgLSAxXSAmPSB+bWFzazsKKyAgfQorCisKKyAgLyogVHlwZTIgY2hhcnN0cmluZyBvcGNvZGVzICovCisgIGVudW0KKyAgeworICAgIGNmMl9jbWRSRVNFUlZFRF8wLCAgIC8qIDAgKi8KKyAgICBjZjJfY21kSFNURU0sICAgICAgICAvKiAxICovCisgICAgY2YyX2NtZFJFU0VSVkVEXzIsICAgLyogMiAqLworICAgIGNmMl9jbWRWU1RFTSwgICAgICAgIC8qIDMgKi8KKyAgICBjZjJfY21kVk1PVkVUTywgICAgICAvKiA0ICovCisgICAgY2YyX2NtZFJMSU5FVE8sICAgICAgLyogNSAqLworICAgIGNmMl9jbWRITElORVRPLCAgICAgIC8qIDYgKi8KKyAgICBjZjJfY21kVkxJTkVUTywgICAgICAvKiA3ICovCisgICAgY2YyX2NtZFJSQ1VSVkVUTywgICAgLyogOCAqLworICAgIGNmMl9jbWRSRVNFUlZFRF85LCAgIC8qIDkgKi8KKyAgICBjZjJfY21kQ0FMTFNVQlIsICAgICAvKiAxMCAqLworICAgIGNmMl9jbWRSRVRVUk4sICAgICAgIC8qIDExICovCisgICAgY2YyX2NtZEVTQywgICAgICAgICAgLyogMTIgKi8KKyAgICBjZjJfY21kUkVTRVJWRURfMTMsICAvKiAxMyAqLworICAgIGNmMl9jbWRFTkRDSEFSLCAgICAgIC8qIDE0ICovCisgICAgY2YyX2NtZFJFU0VSVkVEXzE1LCAgLyogMTUgKi8KKyAgICBjZjJfY21kUkVTRVJWRURfMTYsICAvKiAxNiAqLworICAgIGNmMl9jbWRSRVNFUlZFRF8xNywgIC8qIDE3ICovCisgICAgY2YyX2NtZEhTVEVNSE0sICAgICAgLyogMTggKi8KKyAgICBjZjJfY21kSElOVE1BU0ssICAgICAvKiAxOSAqLworICAgIGNmMl9jbWRDTlRSTUFTSywgICAgIC8qIDIwICovCisgICAgY2YyX2NtZFJNT1ZFVE8sICAgICAgLyogMjEgKi8KKyAgICBjZjJfY21kSE1PVkVUTywgICAgICAvKiAyMiAqLworICAgIGNmMl9jbWRWU1RFTUhNLCAgICAgIC8qIDIzICovCisgICAgY2YyX2NtZFJDVVJWRUxJTkUsICAgLyogMjQgKi8KKyAgICBjZjJfY21kUkxJTkVDVVJWRSwgICAvKiAyNSAqLworICAgIGNmMl9jbWRWVkNVUlZFVE8sICAgIC8qIDI2ICovCisgICAgY2YyX2NtZEhIQ1VSVkVUTywgICAgLyogMjcgKi8KKyAgICBjZjJfY21kRVhURU5ERUROTUJSLCAvKiAyOCAqLworICAgIGNmMl9jbWRDQUxMR1NVQlIsICAgIC8qIDI5ICovCisgICAgY2YyX2NtZFZIQ1VSVkVUTywgICAgLyogMzAgKi8KKyAgICBjZjJfY21kSFZDVVJWRVRPICAgICAvKiAzMSAqLworICB9OworCisgIGVudW0KKyAgeworICAgIGNmMl9lc2NET1RTRUNUSU9OLCAgIC8qIDAgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMSwgICAvKiAxICovCisgICAgY2YyX2VzY1JFU0VSVkVEXzIsICAgLyogMiAqLworICAgIGNmMl9lc2NBTkQsICAgICAgICAgIC8qIDMgKi8KKyAgICBjZjJfZXNjT1IsICAgICAgICAgICAvKiA0ICovCisgICAgY2YyX2VzY05PVCwgICAgICAgICAgLyogNSAqLworICAgIGNmMl9lc2NSRVNFUlZFRF82LCAgIC8qIDYgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfNywgICAvKiA3ICovCisgICAgY2YyX2VzY1JFU0VSVkVEXzgsICAgLyogOCAqLworICAgIGNmMl9lc2NBQlMsICAgICAgICAgIC8qIDkgKi8KKyAgICBjZjJfZXNjQURELCAgICAgICAgICAvKiAxMCAgICAgbGlrZSBvdGhlckFERCAqLworICAgIGNmMl9lc2NTVUIsICAgICAgICAgIC8qIDExICAgICBsaWtlIG90aGVyU1VCICovCisgICAgY2YyX2VzY0RJViwgICAgICAgICAgLyogMTIgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMTMsICAvKiAxMyAqLworICAgIGNmMl9lc2NORUcsICAgICAgICAgIC8qIDE0ICovCisgICAgY2YyX2VzY0VRLCAgICAgICAgICAgLyogMTUgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMTYsICAvKiAxNiAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8xNywgIC8qIDE3ICovCisgICAgY2YyX2VzY0RST1AsICAgICAgICAgLyogMTggKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMTksICAvKiAxOSAqLworICAgIGNmMl9lc2NQVVQsICAgICAgICAgIC8qIDIwICAgICBsaWtlIG90aGVyUFVUICAgICovCisgICAgY2YyX2VzY0dFVCwgICAgICAgICAgLyogMjEgICAgIGxpa2Ugb3RoZXJHRVQgICAgKi8KKyAgICBjZjJfZXNjSUZFTFNFLCAgICAgICAvKiAyMiAgICAgbGlrZSBvdGhlcklGRUxTRSAqLworICAgIGNmMl9lc2NSQU5ET00sICAgICAgIC8qIDIzICAgICBsaWtlIG90aGVyUkFORE9NICovCisgICAgY2YyX2VzY01VTCwgICAgICAgICAgLyogMjQgICAgIGxpa2Ugb3RoZXJNVUwgICAgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMjUsICAvKiAyNSAqLworICAgIGNmMl9lc2NTUVJULCAgICAgICAgIC8qIDI2ICovCisgICAgY2YyX2VzY0RVUCwgICAgICAgICAgLyogMjcgICAgIGxpa2Ugb3RoZXJEVVAgICAgKi8KKyAgICBjZjJfZXNjRVhDSCwgICAgICAgICAvKiAyOCAgICAgbGlrZSBvdGhlckVYQ0ggICAqLworICAgIGNmMl9lc2NJTkRFWCwgICAgICAgIC8qIDI5ICovCisgICAgY2YyX2VzY1JPTEwsICAgICAgICAgLyogMzAgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfMzEsICAvKiAzMSAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8zMiwgIC8qIDMyICovCisgICAgY2YyX2VzY1JFU0VSVkVEXzMzLCAgLyogMzMgKi8KKyAgICBjZjJfZXNjSEZMRVgsICAgICAgICAvKiAzNCAqLworICAgIGNmMl9lc2NGTEVYLCAgICAgICAgIC8qIDM1ICovCisgICAgY2YyX2VzY0hGTEVYMSwgICAgICAgLyogMzYgKi8KKyAgICBjZjJfZXNjRkxFWDEgICAgICAgICAvKiAzNyAqLworICB9OworCisKKyAgLyogYHN0ZW1IaW50QXJyYXknIGRvZXMgbm90IGNoYW5nZSBvbmNlIHdlIHN0YXJ0IGRyYXdpbmcgdGhlIG91dGxpbmUuICovCisgIHN0YXRpYyB2b2lkCisgIGNmMl9kb1N0ZW1zKCBjb25zdCBDRjJfRm9udCAgZm9udCwKKyAgICAgICAgICAgICAgIENGMl9TdGFjayAgICAgICBvcFN0YWNrLAorICAgICAgICAgICAgICAgQ0YyX0FyclN0YWNrICAgIHN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICBGVF9Cb29sKiAgICAgICAgaGF2ZVdpZHRoLAorICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgIGhpbnRPZmZzZXQgKQorICB7CisgICAgQ0YyX1VJbnQgIGk7CisgICAgQ0YyX1VJbnQgIGNvdW50ICAgICAgID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgRlRfQm9vbCAgIGhhc1dpZHRoQXJnID0gKEZUX0Jvb2wpKCBjb3VudCAmIDEgKTsKKworICAgIC8qIHZhcmlhYmxlIGFjY3VtdWxhdGVzIGRlbHRhIHZhbHVlcyBmcm9tIG9wZXJhbmQgc3RhY2sgKi8KKyAgICBDRjJfRml4ZWQgIHBvc2l0aW9uID0gaGludE9mZnNldDsKKworICAgIGlmICggaGFzV2lkdGhBcmcgJiYgISAqaGF2ZVdpZHRoICkKKyAgICAgICp3aWR0aCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICkgKworICAgICAgICAgICAgICAgICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggZm9udC0+ZGVjb2RlciApOworCisgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgIGdvdG8gZXhpdDsKKworICAgIGZvciAoIGkgPSBoYXNXaWR0aEFyZyA/IDEgOiAwOyBpIDwgY291bnQ7IGkgKz0gMiApCisgICAgeworICAgICAgLyogY29uc3RydWN0IGEgQ0YyX1N0ZW1IaW50IGFuZCBwdXNoIGl0IG9udG8gdGhlIGxpc3QgKi8KKyAgICAgIENGMl9TdGVtSGludFJlYyAgc3RlbWhpbnQ7CisKKworICAgICAgc3RlbWhpbnQubWluICA9CisgICAgICAgIHBvc2l0aW9uICAgKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGkgKTsKKyAgICAgIHN0ZW1oaW50Lm1heCAgPQorICAgICAgICBwb3NpdGlvbiAgICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpICsgMSApOworCisgICAgICBzdGVtaGludC51c2VkICA9IEZBTFNFOworICAgICAgc3RlbWhpbnQubWF4RFMgPQorICAgICAgc3RlbWhpbnQubWluRFMgPSAwOworCisgICAgICBjZjJfYXJyc3RhY2tfcHVzaCggc3RlbUhpbnRBcnJheSwgJnN0ZW1oaW50ICk7IC8qIGRlZmVyIGVycm9yIGNoZWNrICovCisgICAgfQorCisgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CisKKyAgZXhpdDoKKyAgICAvKiBjZjJfZG9TdGVtcyBtdXN0IGRlZmluZSBhIHdpZHRoIChtYXkgYmUgZGVmYXVsdCkgKi8KKyAgICAqaGF2ZVdpZHRoID0gVFJVRTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2YyX2RvRmxleCggQ0YyX1N0YWNrICAgICAgIG9wU3RhY2ssCisgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgICBjdXJYLAorICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgY3VyWSwKKyAgICAgICAgICAgICAgQ0YyX0dseXBoUGF0aCAgIGdseXBoUGF0aCwKKyAgICAgICAgICAgICAgY29uc3QgRlRfQm9vbCogIHJlYWRGcm9tU3RhY2ssCisgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBkb0NvbmRpdGlvbmFsTGFzdFJlYWQgKQorICB7CisgICAgQ0YyX0ZpeGVkICB2YWxzWzE0XTsKKyAgICBDRjJfVUludCAgIGluZGV4OworICAgIEZUX0Jvb2wgICAgaXNIRmxleDsKKyAgICBDRjJfSW50ICAgIHRvcCwgaSwgajsKKworCisgICAgdmFsc1swXSA9ICpjdXJYOworICAgIHZhbHNbMV0gPSAqY3VyWTsKKyAgICBpbmRleCAgID0gMDsKKyAgICBpc0hGbGV4ID0gcmVhZEZyb21TdGFja1s5XSA9PSBGQUxTRTsKKyAgICB0b3AgICAgID0gaXNIRmxleCA/IDkgOiAxMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgdG9wOyBpKysgKQorICAgIHsKKyAgICAgIHZhbHNbaSArIDJdID0gdmFsc1tpXTsKKyAgICAgIGlmICggcmVhZEZyb21TdGFja1tpXSApCisgICAgICAgIHZhbHNbaSArIDJdICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCsrICk7CisgICAgfQorCisgICAgaWYgKCBpc0hGbGV4ICkKKyAgICAgIHZhbHNbOSArIDJdID0gKmN1clk7CisKKyAgICBpZiAoIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCApCisgICAgeworICAgICAgRlRfQm9vbCAgICBsYXN0SXNYID0gKEZUX0Jvb2wpKCBjZjJfZml4ZWRBYnMoIHZhbHNbMTBdIC0gKmN1clggKSA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkQWJzKCB2YWxzWzExXSAtICpjdXJZICkgKTsKKyAgICAgIENGMl9GaXhlZCAgbGFzdFZhbCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCApOworCisKKyAgICAgIGlmICggbGFzdElzWCApCisgICAgICB7CisgICAgICAgIHZhbHNbMTJdID0gdmFsc1sxMF0gKyBsYXN0VmFsOworICAgICAgICB2YWxzWzEzXSA9ICpjdXJZOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB2YWxzWzEyXSA9ICpjdXJYOworICAgICAgICB2YWxzWzEzXSA9IHZhbHNbMTFdICsgbGFzdFZhbDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggcmVhZEZyb21TdGFja1sxMF0gKQorICAgICAgICB2YWxzWzEyXSA9IHZhbHNbMTBdICsgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4KysgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdmFsc1sxMl0gPSAqY3VyWDsKKworICAgICAgaWYgKCByZWFkRnJvbVN0YWNrWzExXSApCisgICAgICAgIHZhbHNbMTNdID0gdmFsc1sxMV0gKyBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdmFsc1sxM10gPSAqY3VyWTsKKyAgICB9CisKKyAgICBmb3IgKCBqID0gMDsgaiA8IDI7IGorKyApCisgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oIGdseXBoUGF0aCwgdmFsc1tqICogNiArIDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaiAqIDYgKyAzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsc1tqICogNiArIDVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaiAqIDYgKyA2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgN10gKTsKKworICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworCisgICAgKmN1clggPSB2YWxzWzEyXTsKKyAgICAqY3VyWSA9IHZhbHNbMTNdOworICB9CisKKworICAvKgorICAgKiBgZXJyb3InIGlzIGEgc2hhcmVkIGVycm9yIGNvZGUgdXNlZCBieSBtYW55IG9iamVjdHMgaW4gdGhpcworICAgKiByb3V0aW5lLiAgQmVmb3JlIHRoZSBjb2RlIGNvbnRpbnVlcyBmcm9tIGFuIGVycm9yLCBpdCBtdXN0IGNoZWNrIGFuZAorICAgKiByZWNvcmQgdGhlIGVycm9yIGluIGAqZXJyb3InLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIHNoYXJlZAorICAgKiBlcnJvciBjb2RlIHdpbGwgcmVjb3JkIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZC4gIElmIHRlc3RpbmcKKyAgICogZm9yIGFuIGVycm9yIGFueXdheSwgdGhlIGNvc3Qgb2YgYGdvdG8gZXhpdCcgaXMgc21hbGwsIHNvIHdlIGRvIGl0LAorICAgKiBldmVuIGlmIGNvbnRpbnVpbmcgd291bGQgYmUgc2FmZS4gIEluIHRoaXMgY2FzZSwgYGxhc3RFcnJvcicgaXMKKyAgICogc2V0LCBzbyB0aGUgdGVzdGluZyBhbmQgc3RvcmluZyBjYW4gYmUgZG9uZSBpbiBvbmUgcGxhY2UsIGF0IGBleGl0Jy4KKyAgICoKKyAgICogQ29udGludWluZyBhZnRlciBhbiBlcnJvciBpcyBpbnRlbmRlZCBmb3Igb2JqZWN0cyB3aGljaCBkbyB0aGVpciBvd24KKyAgICogdGVzdGluZyBvZiBgKmVycm9yJywgZS5nLiwgYXJyYXkgc3RhY2sgZnVuY3Rpb25zLiAgVGhpcyBhbGxvd3MgdXMgdG8KKyAgICogYXZvaWQgYW4gZXh0cmEgdGVzdCBhZnRlciB0aGUgY2FsbC4KKyAgICoKKyAgICogVW5pbXBsZW1lbnRlZCBvcGNvZGVzIGFyZSBpZ25vcmVkLgorICAgKgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2ludGVycFQyQ2hhclN0cmluZyggQ0YyX0ZvbnQgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgICAgICAgICBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9PdXRsaW5lQ2FsbGJhY2tzICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogICAgICB0cmFuc2xhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgIGRvaW5nU2VhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICAgIGN1clgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgICAgICAgICBjdXJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgICAgICAgd2lkdGggKQorICB7CisgICAgLyogbGFzdEVycm9yIGlzIHVzZWQgZm9yIGVycm9ycyB0aGF0IGFyZSBpbW1lZGlhdGVseSB0ZXN0ZWQgKi8KKyAgICBGVF9FcnJvciAgbGFzdEVycm9yID0gRlRfRXJyX09rOworCisgICAgLyogcG9pbnRlciB0byBwYXJzZWQgZm9udCBvYmplY3QgKi8KKyAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBmb250LT5kZWNvZGVyOworCisgICAgRlRfRXJyb3IqICBlcnJvciAgPSAmZm9udC0+ZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmb250LT5tZW1vcnk7CisKKyAgICBDRjJfRml4ZWQgIHNjYWxlWSAgICAgICAgPSBmb250LT5pbm5lclRyYW5zZm9ybS5kOworICAgIENGMl9GaXhlZCAgbm9taW5hbFdpZHRoWCA9IGNmMl9nZXROb21pbmFsV2lkdGhYKCBkZWNvZGVyICk7CisKKyAgICAvKiBzYXZlIHRoaXMgZm9yIGhpbnRpbmcgc2VhYyBhY2NlbnRzICovCisgICAgQ0YyX0ZpeGVkICBoaW50T3JpZ2luWSA9IGN1clk7CisKKyAgICBDRjJfU3RhY2sgIG9wU3RhY2sgPSBOVUxMOworICAgIEZUX0J5dGUgICAgb3AxOyAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgb3Bjb2RlIGJ5dGUgKi8KKworICAgIC8qIGluc3RydWN0aW9uIGxpbWl0OyAyMCwwMDAsMDAwIG1hdGNoZXMgQXZhbG9uICovCisgICAgRlRfVUludDMyICBpbnN0cnVjdGlvbkxpbWl0ID0gMjAwMDAwMDBVTDsKKworICAgIENGMl9BcnJTdGFja1JlYyAgc3ViclN0YWNrOworCisgICAgRlRfQm9vbCAgICAgaGF2ZVdpZHRoOworICAgIENGMl9CdWZmZXIgIGNoYXJzdHJpbmcgPSBOVUxMOworCisgICAgQ0YyX0ludCAgY2hhcnN0cmluZ0luZGV4ID0gLTE7ICAgICAgIC8qIGluaXRpYWxpemUgdG8gZW1wdHkgKi8KKworICAgIC8qIFRPRE86IHBsYWNlaG9sZGVycyBmb3IgaGludCBzdHJ1Y3R1cmVzICovCisKKyAgICAvKiBvYmplY3RzIHVzZWQgZm9yIGhpbnRpbmcgKi8KKyAgICBDRjJfQXJyU3RhY2tSZWMgIGhTdGVtSGludEFycmF5OworICAgIENGMl9BcnJTdGFja1JlYyAgdlN0ZW1IaW50QXJyYXk7CisKKyAgICBDRjJfSGludE1hc2tSZWMgICBoaW50TWFzazsKKyAgICBDRjJfR2x5cGhQYXRoUmVjICBnbHlwaFBhdGg7CisKKworICAgIC8qIGluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBvYmplY3RzICovCisgICAgY2YyX2FycnN0YWNrX2luaXQoICZzdWJyU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9CdWZmZXJSZWMgKSApOworICAgIGNmMl9hcnJzdGFja19pbml0KCAmaFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9TdGVtSGludFJlYyApICk7CisgICAgY2YyX2FycnN0YWNrX2luaXQoICZ2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggQ0YyX1N0ZW1IaW50UmVjICkgKTsKKworICAgIC8qIGluaXRpYWxpemUgQ0YyX1N0ZW1IaW50IGFycmF5cyAqLworICAgIGNmMl9oaW50bWFza19pbml0KCAmaGludE1hc2ssIGVycm9yICk7CisKKyAgICAvKiBpbml0aWFsaXplIHBhdGggbWFwIHRvIG1hbmFnZSBkcmF3aW5nIG9wZXJhdGlvbnMgKi8KKworICAgIC8qIE5vdGU6IGxhc3QgNCBwYXJhbXMgYXJlIHVzZWQgdG8gaGFuZGxlIGBNb3ZlVG9QZXJtaXNzaXZlJywgd2hpY2ggKi8KKyAgICAvKiAgICAgICBtYXkgbmVlZCB0byBjYWxsIGBoaW50TWFwLkJ1aWxkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVE9ETzogTW92ZVRvUGVybWlzc2l2ZSBpcyBnb25lOyBhcmUgdGhlc2Ugc3RpbGwgbmVlZGVkPyAgICAgICAgICAqLworICAgIGNmMl9nbHlwaHBhdGhfaW5pdCggJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVksCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBoU2hpZnQsICovCisgICAgICAgICAgICAgICAgICAgICAgICAmaFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAmdlN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAmaGludE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBoaW50T3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uICk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgc3RhdGUgZm9yIHdpZHRoIHBhcnNpbmcuICBGcm9tIHRoZSBDRkYgU3BlYzoKKyAgICAgKgorICAgICAqICAgVGhlIGZpcnN0IHN0YWNrLWNsZWFyaW5nIG9wZXJhdG9yLCB3aGljaCBtdXN0IGJlIG9uZSBvZiBoc3RlbSwKKyAgICAgKiAgIGhzdGVtaG0sIHZzdGVtLCB2c3RlbWhtLCBjbnRybWFzaywgaGludG1hc2ssIGhtb3ZldG8sIHZtb3ZldG8sCisgICAgICogICBybW92ZXRvLCBvciBlbmRjaGFyLCB0YWtlcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IC0gdGhlIHdpZHRoIChhcworICAgICAqICAgZGVzY3JpYmVkIGVhcmxpZXIpLCB3aGljaCBtYXkgYmUgZXhwcmVzc2VkIGFzIHplcm8gb3Igb25lIG51bWVyaWMKKyAgICAgKiAgIGFyZ3VtZW50LgorICAgICAqCisgICAgICogV2hhdCB3ZSBpbXBsZW1lbnQgaGVyZSB1c2VzIHRoZSBmaXJzdCB2YWxpZGx5IHNwZWNpZmllZCB3aWR0aCwgYnV0CisgICAgICogZG9lcyBub3QgZGV0ZWN0IGVycm9ycyBmb3Igc3BlY2lmeWluZyBtb3JlIHRoYW4gb25lIHdpZHRoLgorICAgICAqCisgICAgICogSWYgb25lIG9mIHRoZSBhYm92ZSBvcGVyYXRvcnMgb2NjdXJzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nCisgICAgICogYSB3aWR0aCwgd2UgYXNzdW1lIHRoZSBkZWZhdWx0IHdpZHRoLgorICAgICAqCisgICAgICovCisgICAgaGF2ZVdpZHRoID0gRkFMU0U7CisgICAgKndpZHRoICAgID0gY2YyX2dldERlZmF1bHRXaWR0aFgoIGRlY29kZXIgKTsKKworICAgIC8qCisgICAgICogTm90ZTogYXQgdGhpcyBwb2ludCwgYWxsIHBvaW50ZXJzIHRvIHJlc291cmNlcyBtdXN0IGJlIE5VTEwKKyAgICAgKiBhbmQgYWxsIGxvY2FsIG9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZC4KKyAgICAgKiBUaGVyZSBtdXN0IGJlIG5vIGJyYW5jaGVzIHRvIGV4aXQ6IGFib3ZlIHRoaXMgcG9pbnQuCisgICAgICoKKyAgICAgKi8KKworICAgIC8qIGFsbG9jYXRlIGFuIG9wZXJhbmQgc3RhY2sgKi8KKyAgICBvcFN0YWNrID0gY2YyX3N0YWNrX2luaXQoIG1lbW9yeSwgZXJyb3IgKTsKKyAgICBpZiAoICFvcFN0YWNrICkKKyAgICB7CisgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgc3Vicm91dGluZSBzdGFjayBieSBwbGFjaW5nIHRvcCBsZXZlbCBjaGFyc3RyaW5nIGFzICovCisgICAgLyogZmlyc3QgZWxlbWVudCAobWF4IGRlcHRoIHBsdXMgb25lIGZvciB0aGUgY2hhcnN0cmluZykgICAgICAgICAgKi8KKyAgICAvKiBOb3RlOiBDYWxsZXIgb3ducyBhbmQgbXVzdCBmaW5hbGl6ZSB0aGUgZmlyc3QgY2hhcnN0cmluZy4gICAgICAqLworICAgIC8qICAgICAgIE91ciBjb3B5IG9mIGl0IGRvZXMgbm90IGNoYW5nZSB0aGF0IHJlcXVpcmVtZW50LiAgICAgICAgICovCisgICAgY2YyX2FycnN0YWNrX3NldENvdW50KCAmc3ViclN0YWNrLCBDRjJfTUFYX1NVQlIgKyAxICk7CisKKyAgICBjaGFyc3RyaW5nICA9IChDRjJfQnVmZmVyKWNmMl9hcnJzdGFja19nZXRCdWZmZXIoICZzdWJyU3RhY2sgKTsKKyAgICAqY2hhcnN0cmluZyA9ICpidWY7ICAgIC8qIHN0cnVjdHVyZSBjb3B5ICovCisKKyAgICBjaGFyc3RyaW5nSW5kZXggPSAwOyAgICAgICAvKiBlbnRyeSBpcyB2YWxpZCBub3cgKi8KKworICAgIC8qIGNhdGNoIGVycm9ycyBzbyBmYXIgKi8KKyAgICBpZiAoICplcnJvciApCisgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKiBtYWluIGludGVycHJldGVyIGxvb3AgKi8KKyAgICB3aGlsZSAoIDEgKQorICAgIHsKKyAgICAgIGlmICggY2YyX2J1Zl9pc0VuZCggY2hhcnN0cmluZyApICkKKyAgICAgIHsKKyAgICAgICAgLyogSWYgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjaGFyc3RyaW5nLCBzaW11bGF0ZSBhICovCisgICAgICAgIC8qIGNmMl9jbWRSRVRVUk4gb3IgY2YyX2NtZEVORENIQVIuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCApCisgICAgICAgICAgb3AxID0gY2YyX2NtZFJFVFVSTjsgIC8qIGVuZCBvZiBidWZmZXIgZm9yIHN1YnJvdXRpbmUgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIG9wMSA9IGNmMl9jbWRFTkRDSEFSOyAvKiBlbmQgb2YgYnVmZmVyIGZvciB0b3AgbGV2ZWwgY2hhcnN0cmluZyAqLworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBvcDEgPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisKKyAgICAgIC8qIGNoZWNrIGZvciBlcnJvcnMgb25jZSBwZXIgbG9vcCAqLworICAgICAgaWYgKCAqZXJyb3IgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgIGluc3RydWN0aW9uTGltaXQtLTsKKyAgICAgIGlmICggaW5zdHJ1Y3Rpb25MaW1pdCA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgIH0KKworICAgICAgc3dpdGNoKCBvcDEgKQorICAgICAgeworICAgICAgY2FzZSBjZjJfY21kUkVTRVJWRURfMDoKKyAgICAgIGNhc2UgY2YyX2NtZFJFU0VSVkVEXzI6CisgICAgICBjYXNlIGNmMl9jbWRSRVNFUlZFRF85OgorICAgICAgY2FzZSBjZjJfY21kUkVTRVJWRURfMTM6CisgICAgICBjYXNlIGNmMl9jbWRSRVNFUlZFRF8xNToKKyAgICAgIGNhc2UgY2YyX2NtZFJFU0VSVkVEXzE2OgorICAgICAgY2FzZSBjZjJfY21kUkVTRVJWRURfMTc6CisgICAgICAgIC8qIHdlIG1heSBnZXQgaGVyZSBpZiB3ZSBoYXZlIGEgcHJpb3IgZXJyb3IgKi8KKyAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIG9wMSApKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZEhTVEVNSE06CisgICAgICBjYXNlIGNmMl9jbWRIU1RFTToKKyAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRIU1RFTUhNID8gIiBoc3RlbWhtXG4iIDogIiBoc3RlbVxuIiApKTsKKworICAgICAgICAvKiBuZXZlciBhZGQgaGludHMgYWZ0ZXIgdGhlIG1hc2sgaXMgY29tcHV0ZWQgKi8KKyAgICAgICAgaWYgKCBjZjJfaGludG1hc2tfaXNWYWxpZCggJmhpbnRNYXNrICkgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U0KCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmc6IgorICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBob3Jpem9udGFsIGhpbnQgbWFza1xuIiApKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAorICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICZoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIDAgKTsKKworICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRWU1RFTUhNOgorICAgICAgY2FzZSBjZjJfY21kVlNURU06CisgICAgICAgIEZUX1RSQUNFNCgoIG9wMSA9PSBjZjJfY21kVlNURU1ITSA/ICIgdnN0ZW1obVxuIiA6ICIgdnN0ZW1cbiIgKSk7CisKKyAgICAgICAgLyogbmV2ZXIgYWRkIGhpbnRzIGFmdGVyIHRoZSBtYXNrIGlzIGNvbXB1dGVkICovCisgICAgICAgIGlmICggY2YyX2hpbnRtYXNrX2lzVmFsaWQoICZoaW50TWFzayApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNCgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiIKKyAgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgdmVydGljYWwgaGludCBtYXNrXG4iICkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2YyX2RvU3RlbXMoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgJnZTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAmaGF2ZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgMCApOworCisgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZFZNT1ZFVE86CisgICAgICAgIEZUX1RSQUNFNCgoICIgdm1vdmV0b1xuIiApKTsKKworICAgICAgICBpZiAoIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID4gMSAmJiAhaGF2ZVdpZHRoICkKKyAgICAgICAgICAqd2lkdGggPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApICsgbm9taW5hbFdpZHRoWDsKKworICAgICAgICAvKiB3aWR0aCBpcyBkZWZpbmVkIG9yIGRlZmF1bHQgYWZ0ZXIgdGhpcyAqLworICAgICAgICBoYXZlV2lkdGggPSBUUlVFOworCisgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICBjZjJfZ2x5cGhwYXRoX21vdmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRSTElORVRPOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIGluZGV4OworICAgICAgICAgIENGMl9VSW50ICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJsaW5ldG9cbiIgKSk7CisKKyAgICAgICAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4ICs9IDIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGN1clggKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMCApOworICAgICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICk7CisKKyAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KKworICAgICAgY2FzZSBjZjJfY21kSExJTkVUTzoKKyAgICAgIGNhc2UgY2YyX2NtZFZMSU5FVE86CisgICAgICAgIHsKKyAgICAgICAgICBDRjJfVUludCAgaW5kZXg7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICBGVF9Cb29sICBpc1ggPSBvcDEgPT0gY2YyX2NtZEhMSU5FVE87CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoIGlzWCA/ICIgaGxpbmV0b1xuIiA6ICIgdmxpbmV0b1xuIiApKTsKKworICAgICAgICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ZpeGVkICB2ID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICk7CisKKworICAgICAgICAgICAgaWYgKCBpc1ggKQorICAgICAgICAgICAgICBjdXJYICs9IHY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGN1clkgKz0gdjsKKworICAgICAgICAgICAgaXNYID0gIWlzWDsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9saW5lVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBjZjJfY21kUkNVUlZFTElORToKKyAgICAgIGNhc2UgY2YyX2NtZFJSQ1VSVkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgICAgICAgIENGMl9VSW50ICBpbmRleCA9IDA7CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoIG9wMSA9PSBjZjJfY21kUkNVUlZFTElORSA/ICIgcmN1cnZlbGluZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgcnJjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgd2hpbGUgKCBpbmRleCArIDYgPD0gY291bnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9GaXhlZCAgeDEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAwICkgKyBjdXJYOworICAgICAgICAgICAgQ0YyX0ZpeGVkICB5MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDEgKSArIGN1clk7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMiApICsgeDE7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHkyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMyApICsgeTE7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgNCApICsgeDI7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHkzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgNSApICsgeTI7CisKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7CisKKyAgICAgICAgICAgIGN1clggICA9IHgzOworICAgICAgICAgICAgY3VyWSAgID0geTM7CisgICAgICAgICAgICBpbmRleCArPSA2OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggb3AxID09IGNmMl9jbWRSQ1VSVkVMSU5FICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjdXJYICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKTsKKyAgICAgICAgICAgIGN1clkgKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMSApOworCisgICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2xpbmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworICAgICAgICAgIH0KKworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAvKiBubyBuZWVkIHRvIGNsZWFyIHN0YWNrIGFnYWluICovCisKKyAgICAgIGNhc2UgY2YyX2NtZENBTExHU1VCUjoKKyAgICAgIGNhc2UgY2YyX2NtZENBTExTVUJSOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIHN1YnJJbmRleDsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRDQUxMR1NVQlIgPyAiIGNhbGxnc3ViciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgY2FsbHN1YnIiICkpOworCisgICAgICAgICAgaWYgKCBjaGFyc3RyaW5nSW5kZXggPiBDRjJfTUFYX1NVQlIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG1heCBzdWJyIHBsdXMgb25lIGZvciBjaGFyc3RyaW5nICovCisgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgLyogb3ZlcmZsb3cgb2Ygc3RhY2sgKi8KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBwdXNoIG91ciBjdXJyZW50IENGRiBjaGFyc3RyaW5nIHJlZ2lvbiBvbiBzdWJyU3RhY2sgKi8KKyAgICAgICAgICBjaGFyc3RyaW5nID0gKENGMl9CdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX2dldFBvaW50ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViclN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCljaGFyc3RyaW5nSW5kZXggKyAxICk7CisKKyAgICAgICAgICAvKiBzZXQgdXAgdGhlIG5ldyBDRkYgcmVnaW9uIGFuZCBwb2ludGVyICovCisgICAgICAgICAgc3VickluZGV4ID0gKENGMl9VSW50KWNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKworICAgICAgICAgIHN3aXRjaCAoIG9wMSApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgY2YyX2NtZENBTExHU1VCUjoKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VickluZGV4ICsgKENGMl9VSW50KWRlY29kZXItPmdsb2JhbHNfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdJbmRleCArIDEgKSk7CisKKyAgICAgICAgICAgIGlmICggY2YyX2luaXRHbG9iYWxSZWdpb25CdWZmZXIoIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgZ290byBleGl0OyAgLyogc3Vicm91dGluZSBsb29rdXAgb3Igc3RyZWFtIGVycm9yICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBjZjJfY21kQ0FMTFNVQlIgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VickluZGV4ICsgKENGMl9VSW50KWRlY29kZXItPmxvY2Fsc19iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKKworICAgICAgICAgICAgaWYgKCBjZjJfaW5pdExvY2FsUmVnaW9uQnVmZmVyKCBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICBnb3RvIGV4aXQ7ICAvKiBzdWJyb3V0aW5lIGxvb2t1cCBvciBzdHJlYW0gZXJyb3IgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBjaGFyc3RyaW5nSW5kZXggKz0gMTsgICAgICAgLyogZW50cnkgaXMgdmFsaWQgbm93ICovCisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgY2FzZSBjZjJfY21kUkVUVVJOOgorICAgICAgICBGVF9UUkFDRTQoKCAiIHJldHVybiAobGVhdmluZyBsZXZlbCAlZClcbiIsIGNoYXJzdHJpbmdJbmRleCApKTsKKworICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCA8IDEgKQorICAgICAgICB7CisgICAgICAgICAgLyogTm90ZTogY2Fubm90IHJldHVybiBmcm9tIHRvcCBjaGFyc3RyaW5nICovCisgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAvKiB1bmRlcmZsb3cgb2Ygc3RhY2sgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlc3RvcmUgcG9zaXRpb24gaW4gcHJldmlvdXMgY2hhcnN0cmluZyAqLworICAgICAgICBjaGFyc3RyaW5nID0gKENGMl9CdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19nZXRQb2ludGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJyU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9VSW50KS0tY2hhcnN0cmluZ0luZGV4ICk7CisgICAgICAgIGNvbnRpbnVlOyAgICAgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICBjYXNlIGNmMl9jbWRFU0M6CisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlICBvcDIgPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisKKworICAgICAgICAgIHN3aXRjaCAoIG9wMiApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgY2YyX2VzY0RPVFNFQ1RJT046CisgICAgICAgICAgICAvKiBzb21ldGhpbmcgYWJvdXQgYGZsaXAgdHlwZSBvZiBsb2NraW5nJyAtLSBpZ25vcmUgaXQgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZG90c2VjdGlvblxuIiApKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBUT0RPOiBzaG91bGQgdGhlc2Ugb3BlcmF0b3JzIGJlIHN1cHBvcnRlZD8gKi8KKyAgICAgICAgICBjYXNlIGNmMl9lc2NBTkQ6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYW5kXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY09SOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG9yXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY05PVDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBub3RcbiIgKSk7CisKKyAgICAgICAgICAgIENGMl9GSVhNRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjQUJTOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFic1xuIiApKTsKKworICAgICAgICAgICAgQ0YyX0ZJWE1FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NBREQ6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYWRkXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY1NVQjogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdWJcbiIgKSk7CisKKyAgICAgICAgICAgIENGMl9GSVhNRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRElWOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRpdlxuIiApKTsKKworICAgICAgICAgICAgQ0YyX0ZJWE1FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NORUc6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbmVnXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0VROiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGVxXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0RST1A6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHJvcFxuIiApKTsKKworICAgICAgICAgICAgQ0YyX0ZJWE1FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NQVVQ6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0dFVDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBnZXRcbiIgKSk7CisKKyAgICAgICAgICAgIENGMl9GSVhNRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjSUZFTFNFOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGlmZWxzZVxuIiApKTsKKworICAgICAgICAgICAgQ0YyX0ZJWE1FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSQU5ET006IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmFuZG9tXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY01VTDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBtdWxcbiIgKSk7CisKKyAgICAgICAgICAgIENGMl9GSVhNRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjU1FSVDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzcXJ0XG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0RVUDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7CisKKyAgICAgICAgICAgIENGMl9GSVhNRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjRVhDSDogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0lOREVYOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGluZGV4XG4iICkpOworCisgICAgICAgICAgICBDRjJfRklYTUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY1JPTEw6IC8qIGluIHNwZWMgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKKworICAgICAgICAgICAgQ0YyX0ZJWE1FOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NIRkxFWDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBGQUxTRSAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIEZBTFNFIC8qIGR5NSAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4XG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0ZMRVg6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBGVF9Cb29sICByZWFkRnJvbVN0YWNrWzEyXSA9CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MSAqLywgVFJVRSAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgLyogZHkyICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHgzICovLCBUUlVFIC8qIGR5MyAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NCAqLywgVFJVRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgLyogZHk1ICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg2ICovLCBUUlVFIC8qIGR5NiAqLworICAgICAgICAgICAgICB9OworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBmbGV4XG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsgICAgICAvKiBUT0RPOiB3aHkgaXMgdGhpcyBub3QgYSBjb250aW51ZT8gKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY0hGTEVYMToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBUUlVFICAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgIC8qIGR5NSAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4MVxuIiApKTsKKworICAgICAgICAgICAgICBjZjJfZG9GbGV4KCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1clksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRGcm9tU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIC8qIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCAqLyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NGTEVYMToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MSAqLywgVFJVRSAgLyogZHkxICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MiAqLywgVFJVRSAgLyogZHkyICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MyAqLywgVFJVRSAgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NCAqLywgVFJVRSAgLyogZHk0ICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NSAqLywgVFJVRSAgLyogZHk1ICovLAorICAgICAgICAgICAgICAgIEZBTFNFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGZsZXgxXG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAvKiBkb0NvbmRpdGlvbmFsTGFzdFJlYWQgKi8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgY2FzZSBjZjJfZXNjUkVTRVJWRURfMToKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8yOgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzY6CisgICAgICAgICAgY2FzZSBjZjJfZXNjUkVTRVJWRURfNzoKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF84OgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzEzOgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE2OgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE3OgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE5OgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzI1OgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMxOgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMyOgorICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMzOgorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIG9wMiApKTsKKworICAgICAgICAgIH07IC8qIGVuZCBvZiBzd2l0Y2ggc3RhdGVtZW50IGNoZWNraW5nIGBvcDInICovCisKKyAgICAgICAgfSAvKiBjYXNlIGNmMl9jbWRFU0MgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZEVORENIQVI6CisgICAgICAgIEZUX1RSQUNFNCgoICIgZW5kY2hhclxuIiApKTsKKworICAgICAgICBpZiAoIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID09IDEgfHwKKyAgICAgICAgICAgICBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA9PSA1ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggIWhhdmVXaWR0aCApCisgICAgICAgICAgICAqd2lkdGggPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApICsgbm9taW5hbFdpZHRoWDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCisgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICAvKiBjbG9zZSBwYXRoIGlmIHN0aWxsIG9wZW4gKi8KKyAgICAgICAgY2YyX2dseXBocGF0aF9jbG9zZU9wZW5QYXRoKCAmZ2x5cGhQYXRoICk7CisKKyAgICAgICAgaWYgKCBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgLyogbXVzdCBiZSBlaXRoZXIgNCBvciA1IC0tICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIHRoaXMgaXMgYSAoZGVwcmVjYXRlZCkgaW1wbGllZCBgc2VhYycgb3BlcmF0b3IgKi8KKworICAgICAgICAgIENGMl9JbnQgICAgICAgIGFjaGFyOworICAgICAgICAgIENGMl9JbnQgICAgICAgIGJjaGFyOworICAgICAgICAgIENGMl9CdWZmZXJSZWMgIGNvbXBvbmVudDsKKyAgICAgICAgICBDRjJfRml4ZWQgICAgICBkdW1teVdpZHRoOyAgIC8qIGlnbm9yZSBjb21wb25lbnQgd2lkdGggKi8KKyAgICAgICAgICBGVF9FcnJvciAgICAgICBlcnJvcjI7CisKKworICAgICAgICAgIGlmICggZG9pbmdTZWFjICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAvKiBuZXN0ZWQgc2VhYyAqLworICAgICAgICAgIH0KKworICAgICAgICAgIGFjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgIGJjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgY3VyWSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgIGN1clggPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCBhY2hhciwgJmNvbXBvbmVudCApOworICAgICAgICAgIGlmICggZXJyb3IyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IyOyAgICAgIC8qIHBhc3MgRnJlZVR5cGUgZXJyb3IgdGhyb3VnaCAqLworICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICB9CisgICAgICAgICAgY2YyX2ludGVycFQyQ2hhclN0cmluZyggZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlXaWR0aCApOworICAgICAgICAgIGNmMl9mcmVlU2VhY0NvbXBvbmVudCggZGVjb2RlciwgJmNvbXBvbmVudCApOworCisgICAgICAgICAgZXJyb3IyID0gY2YyX2dldFNlYWNDb21wb25lbnQoIGRlY29kZXIsIGJjaGFyLCAmY29tcG9uZW50ICk7CisgICAgICAgICAgaWYgKCBlcnJvcjIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yMjsgICAgICAvKiBwYXNzIEZyZWVUeXBlIGVycm9yIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICB9CisgICAgICAgICAgY2YyX2ludGVycFQyQ2hhclN0cmluZyggZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlXaWR0aCApOworICAgICAgICAgIGNmMl9mcmVlU2VhY0NvbXBvbmVudCggZGVjb2RlciwgJmNvbXBvbmVudCApOworICAgICAgICB9CisgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgY2FzZSBjZjJfY21kQ05UUk1BU0s6CisgICAgICBjYXNlIGNmMl9jbWRISU5UTUFTSzoKKyAgICAgICAgLyogdGhlIGZpbmFsIFxuIGluIHRoZSB0cmFjaW5nIG1lc3NhZ2UgZ2V0cyBhZGRlZCBpbiAgICAgICovCisgICAgICAgIC8qIGBjZjJfaGludG1hc2tfcmVhZCcgKHdoaWNoIGFsc28gdHJhY2VzIHRoZSBtYXNrIGJ5dGVzKSAqLworICAgICAgICBGVF9UUkFDRTQoKCBvcDEgPT0gY2YyX2NtZENOVFJNQVNLID8gIiBjbnRybWFzayIgOiAiIGhpbnRtYXNrIiApKTsKKworICAgICAgICAvKiBuZXZlciBhZGQgaGludHMgYWZ0ZXIgdGhlIG1hc2sgaXMgY29tcHV0ZWQgKi8KKyAgICAgICAgaWYgKCBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDEgICAgJiYKKyAgICAgICAgICAgICBjZjJfaGludG1hc2tfaXNWYWxpZCggJmhpbnRNYXNrICkgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U0KCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmc6IGludmFsaWQgaGludCBtYXNrXG4iICkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogaWYgdGhlcmUgYXJlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2ssIHRoZXJlIHRoaXMgaXMgYW4gKi8KKyAgICAgICAgLyogaW1wbGllZCBjZjJfY21kVlNURU1ITSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgY2YyX2RvU3RlbXMoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgJnZTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAmaGF2ZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgMCApOworCisgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCBvcDEgPT0gY2YyX2NtZEhJTlRNQVNLICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGNvbnN1bWUgdGhlIGhpbnQgbWFzayBieXRlcyB3aGljaCBmb2xsb3cgdGhlIG9wZXJhdG9yICovCisgICAgICAgICAgY2YyX2hpbnRtYXNrX3JlYWQoICZoaW50TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX3NpemUoICZoU3RlbUhpbnRBcnJheSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggJnZTdGVtSGludEFycmF5ICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIENvbnN1bWUgdGhlIGNvdW50ZXIgbWFzayBieXRlcyB3aGljaCBmb2xsb3cgdGhlIG9wZXJhdG9yOgorICAgICAgICAgICAqIEJ1aWxkIGEgdGVtcG9yYXJ5IGhpbnQgbWFwLCBqdXN0IHRvIHBsYWNlIGFuZCBsb2NrIHRob3NlCisgICAgICAgICAgICogc3RlbXMgcGFydGljaXBhdGluZyBpbiB0aGUgY291bnRlciBtYXNrLiAgVGhlc2UgYXJlIG1vc3QKKyAgICAgICAgICAgKiBsaWtlbHkgdGhlIGRvbWluYW50IGhzdGVtcywgYW5kIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIGEKKyAgICAgICAgICAgKiBmZXcgY291bnRlciBncm91cHMsIG5vdCBuZWNlc3NhcmlseSBpbiBjb3JyZXNwb25kZW5jZQorICAgICAgICAgICAqIHdpdGggdGhlIGhpbnQgZ3JvdXBzLiAgVGhpcyByZWR1Y2VzIHRoZSBjaGFuY2VzIG9mCisgICAgICAgICAgICogY29uZmxpY3RzIGJldHdlZW4gaHN0ZW1zIHRoYXQgYXJlIGluaXRpYWxseSBwbGFjZWQgaW4KKyAgICAgICAgICAgKiBzZXBhcmF0ZSBoaW50IGdyb3VwcyBhbmQgdGhlbiBicm91Z2h0IHRvZ2V0aGVyLiAgVGhlCisgICAgICAgICAgICogcG9zaXRpb25zIGFyZSBjb3BpZWQgYmFjayB0byBgaFN0ZW1IaW50QXJyYXknLCBzbyB3ZSBjYW4KKyAgICAgICAgICAgKiBkaXNjYXJkIGBjb3VudGVyTWFzaycgYW5kIGBjb3VudGVySGludE1hcCcuCisgICAgICAgICAgICoKKyAgICAgICAgICAgKi8KKyAgICAgICAgICBDRjJfSGludE1hcFJlYyAgIGNvdW50ZXJIaW50TWFwOworICAgICAgICAgIENGMl9IaW50TWFza1JlYyAgY291bnRlck1hc2s7CisKKworICAgICAgICAgIGNmMl9oaW50bWFwX2luaXQoICZjb3VudGVySGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaFBhdGguaW5pdGlhbEhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aC5oaW50TW92ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZICk7CisgICAgICAgICAgY2YyX2hpbnRtYXNrX2luaXQoICZjb3VudGVyTWFzaywgZXJyb3IgKTsKKworICAgICAgICAgIGNmMl9oaW50bWFza19yZWFkKCAmY291bnRlck1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19zaXplKCAmaFN0ZW1IaW50QXJyYXkgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX3NpemUoICZ2U3RlbUhpbnRBcnJheSApICk7CisgICAgICAgICAgY2YyX2hpbnRtYXBfYnVpbGQoICZjb3VudGVySGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdlN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudGVyTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kUk1PVkVUTzoKKyAgICAgICAgRlRfVFJBQ0U0KCggIiBybW92ZXRvXG4iICkpOworCisgICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPiAyICYmICFoYXZlV2lkdGggKQorICAgICAgICAgICp3aWR0aCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICkgKyBub21pbmFsV2lkdGhYOworCisgICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCisgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBjdXJZICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICBjdXJYICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgIGNmMl9nbHlwaHBhdGhfbW92ZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZEhNT1ZFVE86CisgICAgICAgIEZUX1RSQUNFNCgoICIgaG1vdmV0b1xuIiApKTsKKworICAgICAgICBpZiAoIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID4gMSAmJiAhaGF2ZVdpZHRoICkKKyAgICAgICAgICAqd2lkdGggPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApICsgbm9taW5hbFdpZHRoWDsKKworICAgICAgICAvKiB3aWR0aCBpcyBkZWZpbmVkIG9yIGRlZmF1bHQgYWZ0ZXIgdGhpcyAqLworICAgICAgICBoYXZlV2lkdGggPSBUUlVFOworCisgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgY3VyWCArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICBjZjJfZ2x5cGhwYXRoX21vdmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRSTElORUNVUlZFOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgICAgICAgQ0YyX1VJbnQgIGluZGV4ID0gMDsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBybGluZWN1cnZlXG4iICkpOworCisgICAgICAgICAgd2hpbGUgKCBpbmRleCArIDYgPCBjb3VudCApCisgICAgICAgICAgeworICAgICAgICAgICAgY3VyWCArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAwICk7CisgICAgICAgICAgICBjdXJZICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDEgKTsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9saW5lVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2hpbGUgKCBpbmRleCA8IGNvdW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgxID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMCApICsgY3VyWDsKKyAgICAgICAgICAgIENGMl9GaXhlZCAgeTEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICkgKyBjdXJZOworICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDIgKSArIHgxOworICAgICAgICAgICAgQ0YyX0ZpeGVkICB5MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDMgKSArIHkxOworICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MyA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDQgKSArIHgyOworICAgICAgICAgICAgQ0YyX0ZpeGVkICB5MyA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDUgKSArIHkyOworCisKKyAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfY3VydmVUbyggJmdseXBoUGF0aCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MyApOworCisgICAgICAgICAgICBjdXJYICAgPSB4MzsKKyAgICAgICAgICAgIGN1clkgICA9IHkzOworICAgICAgICAgICAgaW5kZXggKz0gNjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsgLyogbm8gbmVlZCB0byBjbGVhciBzdGFjayBhZ2FpbiAqLworCisgICAgICBjYXNlIGNmMl9jbWRWVkNVUlZFVE86CisgICAgICAgIHsKKyAgICAgICAgICBDRjJfVUludCAgY291bnQsIGNvdW50MSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgICAgICAgIENGMl9VSW50ICBpbmRleCA9IDA7CisKKworICAgICAgICAgIC8qIGlmIGBjZjJfc3RhY2tfY291bnQnIGlzbid0IG9mIHRoZSBmb3JtIDRuIG9yIDRuKzEsICovCisgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoYW5kIHNvcnRpbmcgdGhlIHN0YWNrIGluZGV4aW5nIHRvIHN1aXQpICAgICAgICAgICAqLworICAgICAgICAgIGNvdW50ICA9IGNvdW50MSAmIH4yOworICAgICAgICAgIGluZGV4ICs9IGNvdW50MSAtIGNvdW50OworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB2dmN1cnZldG9cbiIgKSk7CisKKyAgICAgICAgICB3aGlsZSAoIGluZGV4IDwgY291bnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9GaXhlZCAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MzsKKworCisgICAgICAgICAgICBpZiAoICggY291bnQgLSBpbmRleCApICYgMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHgxID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICkgKyBjdXJYOworCisgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHgxID0gY3VyWDsKKworICAgICAgICAgICAgeTEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAwICkgKyBjdXJZOworICAgICAgICAgICAgeDIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICkgKyB4MTsKKyAgICAgICAgICAgIHkyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMiApICsgeTE7CisgICAgICAgICAgICB4MyA9IHgyOworICAgICAgICAgICAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAzICkgKyB5MjsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7CisKKyAgICAgICAgICAgIGN1clggICA9IHgzOworICAgICAgICAgICAgY3VyWSAgID0geTM7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgIH0KKworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAvKiBubyBuZWVkIHRvIGNsZWFyIHN0YWNrIGFnYWluICovCisKKyAgICAgIGNhc2UgY2YyX2NtZEhIQ1VSVkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBjb3VudCwgY291bnQxID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgICAgICAgQ0YyX1VJbnQgIGluZGV4ID0gMDsKKworCisgICAgICAgICAgLyogaWYgYGNmMl9zdGFja19jb3VudCcgaXNuJ3Qgb2YgdGhlIGZvcm0gNG4gb3IgNG4rMSwgKi8KKyAgICAgICAgICAvKiB3ZSBlbmZvcmNlIGl0IGJ5IGNsZWFyaW5nIHRoZSBzZWNvbmQgYml0ICAgICAgICAgICAqLworICAgICAgICAgIC8qIChhbmQgc29ydGluZyB0aGUgc3RhY2sgaW5kZXhpbmcgdG8gc3VpdCkgICAgICAgICAgICovCisgICAgICAgICAgY291bnQgID0gY291bnQxICYgfjI7CisgICAgICAgICAgaW5kZXggKz0gY291bnQxIC0gY291bnQ7CisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhoY3VydmV0b1xuIiApKTsKKworICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzOworCisKKyAgICAgICAgICAgIGlmICggKCBjb3VudCAtIGluZGV4ICkgJiAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeTEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKSArIGN1clk7CisKKyAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeTEgPSBjdXJZOworCisgICAgICAgICAgICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7CisgICAgICAgICAgICB4MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDEgKSArIHgxOworICAgICAgICAgICAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB5MTsKKyAgICAgICAgICAgIHgzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMyApICsgeDI7CisgICAgICAgICAgICB5MyA9IHkyOworCisgICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKKworICAgICAgICAgICAgY3VyWCAgID0geDM7CisgICAgICAgICAgICBjdXJZICAgPSB5MzsKKyAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KKworICAgICAgY2FzZSBjZjJfY21kVkhDVVJWRVRPOgorICAgICAgY2FzZSBjZjJfY21kSFZDVVJWRVRPOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICBDRjJfVUludCAgaW5kZXggPSAwOworCisgICAgICAgICAgRlRfQm9vbCAgYWx0ZXJuYXRlID0gb3AxID09IGNmMl9jbWRIVkNVUlZFVE87CisKKworICAgICAgICAgIC8qIGlmIGBjZjJfc3RhY2tfY291bnQnIGlzbid0IG9mIHRoZSBmb3JtIDhuLCA4bisxLCAqLworICAgICAgICAgIC8qIDhuKzQsIG9yIDhuKzUsIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlICAgICAqLworICAgICAgICAgIC8qIHNlY29uZCBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIChhbmQgc29ydGluZyB0aGUgc3RhY2sgaW5kZXhpbmcgdG8gc3VpdCkgICAgICAgICAqLworICAgICAgICAgIGNvdW50ICA9IGNvdW50MSAmIH4yOworICAgICAgICAgIGluZGV4ICs9IGNvdW50MSAtIGNvdW50OworCisgICAgICAgICAgRlRfVFJBQ0U0KCggYWx0ZXJuYXRlID8gIiBodmN1cnZldG9cbiIgOiAiIHZoY3VydmV0b1xuIiApKTsKKworICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ZpeGVkIHgxLCB4MiwgeDMsIHkxLCB5MiwgeTM7CisKKworICAgICAgICAgICAgaWYgKCBhbHRlcm5hdGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7CisgICAgICAgICAgICAgIHkxID0gY3VyWTsKKyAgICAgICAgICAgICAgeDIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICkgKyB4MTsKKyAgICAgICAgICAgICAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB5MTsKKyAgICAgICAgICAgICAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAzICkgKyB5MjsKKworICAgICAgICAgICAgICBpZiAoIGNvdW50IC0gaW5kZXggPT0gNSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4MyA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDQgKSArIHgyOworCisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeDMgPSB4MjsKKworICAgICAgICAgICAgICBhbHRlcm5hdGUgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeDEgPSBjdXJYOworICAgICAgICAgICAgICB5MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clk7CisgICAgICAgICAgICAgIHgyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMSApICsgeDE7CisgICAgICAgICAgICAgIHkyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMiApICsgeTE7CisgICAgICAgICAgICAgIHgzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMyApICsgeDI7CisKKyAgICAgICAgICAgICAgaWYgKCBjb3VudCAtIGluZGV4ID09IDUgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA0ICkgKyB5MjsKKworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHkzID0geTI7CisKKyAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gVFJVRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7CisKKyAgICAgICAgICAgIGN1clggICA9IHgzOworICAgICAgICAgICAgY3VyWSAgID0geTM7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAgICAgIH0KKworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAgICAgLyogbm8gbmVlZCB0byBjbGVhciBzdGFjayBhZ2FpbiAqLworCisgICAgICBjYXNlIGNmMl9jbWRFWFRFTkRFRE5NQlI6CisgICAgICAgIHsKKyAgICAgICAgICBDRjJfSW50ICB2OworCisKKyAgICAgICAgICB2ID0gKEZUX1Nob3J0KSggKCBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgPDwgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgICAgICAgICk7CisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKKworICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCB2ICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIG51bWJlcnMgKi8KKyAgICAgICAgeworICAgICAgICAgIGlmICggLyogb3AxID49IDMyICYmICovIG9wMSA8PSAyNDYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9JbnQgIHY7CisKKworICAgICAgICAgICAgdiA9IG9wMSAtIDEzOTsKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHYgKSk7CisKKyAgICAgICAgICAgIC8qIC0xMDcgLi4gMTA3ICovCisgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgdiApOworICAgICAgICAgIH0KKworICAgICAgICAgIGVsc2UgaWYgKCAvKiBvcDEgPj0gMjQ3ICYmICovIG9wMSA8PSAyNTAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9JbnQgIHY7CisKKworICAgICAgICAgICAgdiAgPSBvcDE7CisgICAgICAgICAgICB2IC09IDI0NzsKKyAgICAgICAgICAgIHYgKj0gMjU2OworICAgICAgICAgICAgdiArPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisgICAgICAgICAgICB2ICs9IDEwODsKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHYgKSk7CisKKyAgICAgICAgICAgIC8qIDEwOCAuLiAxMTMxICovCisgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgdiApOworICAgICAgICAgIH0KKworICAgICAgICAgIGVsc2UgaWYgKCAvKiBvcDEgPj0gMjUxICYmICovIG9wMSA8PSAyNTQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9JbnQgIHY7CisKKworICAgICAgICAgICAgdiAgPSBvcDE7CisgICAgICAgICAgICB2IC09IDI1MTsKKyAgICAgICAgICAgIHYgKj0gMjU2OworICAgICAgICAgICAgdiArPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisgICAgICAgICAgICB2ICA9IC12IC0gMTA4OworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKKworICAgICAgICAgICAgLyogLTExMzEgLi4gLTEwOCAqLworICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIHYgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlbHNlIC8qIG9wMSA9PSAyNTUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHY7CisKKworICAgICAgICAgICAgdiA9IChDRjJfRml4ZWQpCisgICAgICAgICAgICAgICAgICAoICggKEZUX1VJbnQzMiljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMiljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMiljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQzMiljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICkgICAgICAgICApOworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICUuMmYiLCB2IC8gNjU1MzYuMCApKTsKKworICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgdiApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsgICAvKiBkb24ndCBjbGVhciBzdGFjayAqLworCisgICAgICB9IC8qIGVuZCBvZiBzd2l0Y2ggc3RhdGVtZW50IGNoZWNraW5nIGBvcDEnICovCisKKyAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworCisgICAgfSAvKiBlbmQgb2YgbWFpbiBpbnRlcnByZXRlciBsb29wICovCisKKyAgICAvKiB3ZSBnZXQgaGVyZSBpZiB0aGUgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgY2YyX2NtZEVORENIQVIgKi8KKyAgICBGVF9UUkFDRTQoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCisgICAgICAgICAgICAgICAgIiAgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgRU5EQ0hBUlxuIiApKTsKKworICBleGl0OgorICAgIC8qIGNoZWNrIHdoZXRoZXIgbGFzdCBlcnJvciBzZWVuIGlzIGFsc28gdGhlIGZpcnN0IG9uZSAqLworICAgIGNmMl9zZXRFcnJvciggZXJyb3IsIGxhc3RFcnJvciApOworCisgICAgLyogZnJlZSByZXNvdXJjZXMgZnJvbSBvYmplY3RzIHdlJ3ZlIHVzZWQgKi8KKyAgICBjZjJfZ2x5cGhwYXRoX2ZpbmFsaXplKCAmZ2x5cGhQYXRoICk7CisgICAgY2YyX2FycnN0YWNrX2ZpbmFsaXplKCAmdlN0ZW1IaW50QXJyYXkgKTsKKyAgICBjZjJfYXJyc3RhY2tfZmluYWxpemUoICZoU3RlbUhpbnRBcnJheSApOworICAgIGNmMl9hcnJzdGFja19maW5hbGl6ZSggJnN1YnJTdGFjayApOworICAgIGNmMl9zdGFja19mcmVlKCBvcFN0YWNrICk7CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworCisgICAgcmV0dXJuOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJpbnRycC5oIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaW50cnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ4OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2YyaW50cnAuaApAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZjJmb250LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQWRvYmUncyBDRkYgSW50ZXJwcmV0ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCisvKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLworLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KKy8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCisvKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KKy8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCisvKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLworLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KKy8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCisvKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLworLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KKy8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCisvKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLworLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KKy8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCisvKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLworLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KKy8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCisvKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLworLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLworLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCisvKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGMklOVFJQX0hfXworI2RlZmluZSBfX0NGMklOVFJQX0hfXworCisKKyNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgImNmMmhpbnRzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9oaW50bWFza19pbml0KCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICAgICBlcnJvciApOworICBGVF9MT0NBTCggRlRfQm9vbCApCisgIGNmMl9oaW50bWFza19pc1ZhbGlkKCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICk7CisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgY2YyX2hpbnRtYXNrX2lzTmV3KCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2hpbnRtYXNrX3NldE5ldyggQ0YyX0hpbnRNYXNrICBoaW50bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICB2YWwgKTsKKyAgRlRfTE9DQUwoIEZUX0J5dGUqICkKKyAgY2YyX2hpbnRtYXNrX2dldE1hc2tQdHIoIENGMl9IaW50TWFzayAgaGludG1hc2sgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfaGludG1hc2tfc2V0QWxsKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIGJpdENvdW50ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKCBDRjJfRm9udCAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICAgICAgICAgIGNoYXJzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9PdXRsaW5lQ2FsbGJhY2tzICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogICAgICB0cmFuc2xhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgIGRvaW5nU2VhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICAgIGN1clgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgICAgICAgICBjdXJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgICAgICAgd2lkdGggKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fQ0YySU5UUlBfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJyZWFkLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MjllMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMnJlYWQuYwpAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2YycmVhZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3Igc3RyZWFtIGhhbmRsaW5nIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiY2YyZ2x1ZS5oIgorCisjaW5jbHVkZSAiY2YyZXJyb3IuaCIKKworCisgIC8qIERlZmluZSBDRjJfSU9fRkFJTCBhcyAxIHRvIGVuYWJsZSByYW5kb20gZXJyb3JzIGFuZCByYW5kb20gKi8KKyAgLyogdmFsdWUgZXJyb3JzIGluIEkvTy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRjJfSU9fRkFJTCAgMAorCisKKyNpZiBDRjJfSU9fRkFJTAorCisgIC8qIHNldCB0aGUgLjAwIHZhbHVlIHRvIGEgbm9uemVybyBwcm9iYWJpbGl0eSAqLworICBzdGF0aWMgaW50CisgIHJhbmRvbUVycm9yMiggdm9pZCApCisgIHsKKyAgICAvKiBmb3IgcmVnaW9uIGJ1ZmZlciBSZWFkQnl0ZSAoaW50ZXJwKSBmdW5jdGlvbiAqLworICAgIHJldHVybiAoZG91YmxlKXJhbmQoKSAvIFJBTkRfTUFYIDwgLjAwOworICB9CisKKyAgLyogc2V0IHRoZSAuMDAgdmFsdWUgdG8gYSBub256ZXJvIHByb2JhYmlsaXR5ICovCisgIHN0YXRpYyBDRjJfSW50CisgIHJhbmRvbVZhbHVlKCkKKyAgeworICAgIHJldHVybiAoZG91YmxlKXJhbmQoKSAvIFJBTkRfTUFYIDwgLjAwID8gcmFuZCgpIDogMDsKKyAgfQorCisjZW5kaWYgLyogQ0YyX0lPX0ZBSUwgKi8KKworCisgIC8qIFJlZ2lvbiBCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGEgY29waWVkIGJ1ZmZlciBtYW5hZ2VkIGJ5ICovCisgIC8qIGBGQ01fZ2V0RGF0YWJsb2NrJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJlYWRzIGJ5dGVzIHdpdGggY2hlY2sgZm9yIGVuZCBvZiBidWZmZXIuICAgICAgICAgICovCisKKyAgLyogcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBzZXRzIGVycm9yIGFuZCByZXR1cm5zIHplcm8gKi8KKyAgRlRfTE9DQUxfREVGKCBDRjJfSW50ICkKKyAgY2YyX2J1Zl9yZWFkQnl0ZSggQ0YyX0J1ZmZlciAgYnVmICkKKyAgeworICAgIGlmICggYnVmLT5wdHIgPCBidWYtPmVuZCApCisgICAgeworI2lmIENGMl9JT19GQUlMCisgICAgICBpZiAoIHJhbmRvbUVycm9yMigpICkKKyAgICAgIHsKKyAgICAgICAgQ0YyX1NFVF9FUlJPUiggYnVmLT5lcnJvciwgSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICByZXR1cm4gKihidWYtPnB0cikrKyArIHJhbmRvbVZhbHVlKCk7CisjZWxzZQorICAgICAgcmV0dXJuICooYnVmLT5wdHIpKys7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIENGMl9TRVRfRVJST1IoIGJ1Zi0+ZXJyb3IsIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKworICAvKiBub3RlOiBlbmQgY29uZGl0aW9uIGNhbiBvY2N1ciB3aXRob3V0IGVycm9yICovCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIGNmMl9idWZfaXNFbmQoIENGMl9CdWZmZXIgIGJ1ZiApCisgIHsKKyAgICByZXR1cm4gKEZUX0Jvb2wpKCBidWYtPnB0ciA+PSBidWYtPmVuZCApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJyZWFkLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmN2M4YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMnJlYWQuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZjJyZWFkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQWRvYmUncyBjb2RlIGZvciBzdHJlYW0gaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCisvKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLworLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KKy8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCisvKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KKy8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCisvKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLworLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KKy8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCisvKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLworLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KKy8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCisvKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLworLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KKy8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCisvKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLworLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KKy8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCisvKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLworLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLworLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCisvKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGMlJFQURfSF9fCisjZGVmaW5lIF9fQ0YyUkVBRF9IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfQnVmZmVyUmVjXworICB7CisgICAgRlRfRXJyb3IqICAgICAgIGVycm9yOworICAgIGNvbnN0IEZUX0J5dGUqICBzdGFydDsKKyAgICBjb25zdCBGVF9CeXRlKiAgZW5kOworICAgIGNvbnN0IEZUX0J5dGUqICBwdHI7CisKKyAgfSBDRjJfQnVmZmVyUmVjLCAqQ0YyX0J1ZmZlcjsKKworCisgIEZUX0xPQ0FMKCBDRjJfSW50ICkKKyAgY2YyX2J1Zl9yZWFkQnl0ZSggQ0YyX0J1ZmZlciAgYnVmICk7CisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgY2YyX2J1Zl9pc0VuZCggQ0YyX0J1ZmZlciAgYnVmICk7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0NGMlJFQURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJzdGFjay5jIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Yyc3RhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMyYjVkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Yyc3RhY2suYwpAQCAtMCwwICsxLDIwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2Yyc3RhY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZW11bGF0aW5nIGEgQ0ZGIHN0YWNrIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAiY2YyZ2x1ZS5oIgorI2luY2x1ZGUgImNmMmZvbnQuaCIKKyNpbmNsdWRlICJjZjJzdGFjay5oIgorCisjaW5jbHVkZSAiY2YyZXJyb3IuaCIKKworCisgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIENGMl9TdGFjay4gICAgICAgKi8KKyAgLyogTm90ZTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24gZXJyb3IgKGRvZXMgbm90IHNldCAqLworICAvKiBgZXJyb3InKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggQ0YyX1N0YWNrICkKKyAgY2YyX3N0YWNrX2luaXQoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsgICAgIC8qIGZvciBGVF9RTkVXICovCisKKyAgICBDRjJfU3RhY2sgIHN0YWNrID0gTlVMTDsKKworCisgICAgaWYgKCAhRlRfUU5FVyggc3RhY2sgKSApCisgICAgeworICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlOyBGVF9RTkVXIHplcm9lcyBpdCAqLworICAgICAgc3RhY2stPm1lbW9yeSA9IG1lbW9yeTsKKyAgICAgIHN0YWNrLT5lcnJvciAgPSBlOworICAgICAgc3RhY2stPnRvcCAgICA9ICZzdGFjay0+YnVmZmVyWzBdOyAvKiBlbXB0eSBzdGFjayAqLworICAgIH0KKworICAgIHJldHVybiBzdGFjazsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX3N0YWNrX2ZyZWUoIENGMl9TdGFjayAgc3RhY2sgKQorICB7CisgICAgaWYgKCBzdGFjayApCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdGFjay0+bWVtb3J5OworCisKKyAgICAgIC8qIGZyZWUgdGhlIG1haW4gc3RydWN0dXJlICovCisgICAgICBGVF9GUkVFKCBzdGFjayApOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBDRjJfVUludCApCisgIGNmMl9zdGFja19jb3VudCggQ0YyX1N0YWNrICBzdGFjayApCisgIHsKKyAgICByZXR1cm4gKENGMl9VSW50KSggc3RhY2stPnRvcCAtICZzdGFjay0+YnVmZmVyWzBdICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9zdGFja19wdXNoSW50KCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICB2YWwgKQorICB7CisgICAgaWYgKCBzdGFjay0+dG9wID09ICZzdGFjay0+YnVmZmVyW0NGMl9PUEVSQU5EX1NUQUNLX1NJWkVdICkKKyAgICB7CisgICAgICBDRjJfU0VUX0VSUk9SKCBzdGFjay0+ZXJyb3IsIFN0YWNrX092ZXJmbG93ICk7CisgICAgICByZXR1cm47ICAgICAvKiBzdGFjayBvdmVyZmxvdyAqLworICAgIH0KKworICAgIHN0YWNrLT50b3AtPnUuaSAgPSB2YWw7CisgICAgc3RhY2stPnRvcC0+dHlwZSA9IENGMl9OdW1iZXJJbnQ7CisgICAgKytzdGFjay0+dG9wOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgIHZhbCApCisgIHsKKyAgICBpZiAoIHN0YWNrLT50b3AgPT0gJnN0YWNrLT5idWZmZXJbQ0YyX09QRVJBTkRfU1RBQ0tfU0laRV0gKQorICAgIHsKKyAgICAgIENGMl9TRVRfRVJST1IoIHN0YWNrLT5lcnJvciwgU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybjsgICAgIC8qIHN0YWNrIG92ZXJmbG93ICovCisgICAgfQorCisgICAgc3RhY2stPnRvcC0+dS5yICA9IHZhbDsKKyAgICBzdGFjay0+dG9wLT50eXBlID0gQ0YyX051bWJlckZpeGVkOworICAgICsrc3RhY2stPnRvcDsKKyAgfQorCisKKyAgLyogdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGFsbG93ZWQgdG8gcG9wIGFuIGludGVnZXIgdHlwZSAqLworICBGVF9MT0NBTF9ERUYoIENGMl9JbnQgKQorICBjZjJfc3RhY2tfcG9wSW50KCBDRjJfU3RhY2sgIHN0YWNrICkKKyAgeworICAgIGlmICggc3RhY2stPnRvcCA9PSAmc3RhY2stPmJ1ZmZlclswXSApCisgICAgeworICAgICAgQ0YyX1NFVF9FUlJPUiggc3RhY2stPmVycm9yLCBTdGFja19VbmRlcmZsb3cgKTsKKyAgICAgIHJldHVybiAwOyAgIC8qIHVuZGVyZmxvdyAqLworICAgIH0KKyAgICBpZiAoIHN0YWNrLT50b3BbLTFdLnR5cGUgIT0gQ0YyX051bWJlckludCApCisgICAgeworICAgICAgQ0YyX1NFVF9FUlJPUiggc3RhY2stPmVycm9yLCBTeW50YXhfRXJyb3IgKTsKKyAgICAgIHJldHVybiAwOyAgIC8qIHR5cGUgbWlzbWF0Y2ggKi8KKyAgICB9CisKKyAgICAtLXN0YWNrLT50b3A7CisKKyAgICByZXR1cm4gc3RhY2stPnRvcC0+dS5pOworICB9CisKKworICAvKiBOb3RlOiB0eXBlIG1pc21hdGNoIGlzIHNpbGVudGx5IGNhc3QgKi8KKyAgLyogVE9ETzogY2hlY2sgdGhpcyAqLworICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCisgIGNmMl9zdGFja19wb3BGaXhlZCggQ0YyX1N0YWNrICBzdGFjayApCisgIHsKKyAgICBpZiAoIHN0YWNrLT50b3AgPT0gJnN0YWNrLT5idWZmZXJbMF0gKQorICAgIHsKKyAgICAgIENGMl9TRVRfRVJST1IoIHN0YWNrLT5lcnJvciwgU3RhY2tfVW5kZXJmbG93ICk7CisgICAgICByZXR1cm4gY2YyX2ludFRvRml4ZWQoIDAgKTsgICAgLyogdW5kZXJmbG93ICovCisgICAgfQorCisgICAgLS1zdGFjay0+dG9wOworCisgICAgc3dpdGNoICggc3RhY2stPnRvcC0+dHlwZSApCisgICAgeworICAgIGNhc2UgQ0YyX051bWJlckludDoKKyAgICAgIHJldHVybiBjZjJfaW50VG9GaXhlZCggc3RhY2stPnRvcC0+dS5pICk7CisgICAgY2FzZSBDRjJfTnVtYmVyRnJhYzoKKyAgICAgIHJldHVybiBjZjJfZnJhY1RvRml4ZWQoIHN0YWNrLT50b3AtPnUuZiApOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gc3RhY2stPnRvcC0+dS5yOworICAgIH0KKyAgfQorCisKKyAgLyogTm90ZTogdHlwZSBtaXNtYXRjaCBpcyBzaWxlbnRseSBjYXN0ICovCisgIC8qIFRPRE86IGNoZWNrIHRoaXMgKi8KKyAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQorICBjZjJfc3RhY2tfZ2V0UmVhbCggQ0YyX1N0YWNrICBzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICAgaWR4ICkKKyAgeworICAgIEZUX0FTU0VSVCggY2YyX3N0YWNrX2NvdW50KCBzdGFjayApIDw9IENGMl9PUEVSQU5EX1NUQUNLX1NJWkUgKTsKKworICAgIGlmICggaWR4ID49IGNmMl9zdGFja19jb3VudCggc3RhY2sgKSApCisgICAgeworICAgICAgQ0YyX1NFVF9FUlJPUiggc3RhY2stPmVycm9yLCBTdGFja19PdmVyZmxvdyApOworICAgICAgcmV0dXJuIGNmMl9pbnRUb0ZpeGVkKCAwICk7ICAgIC8qIGJvdW5kcyBlcnJvciAqLworICAgIH0KKworICAgIHN3aXRjaCAoIHN0YWNrLT5idWZmZXJbaWR4XS50eXBlICkKKyAgICB7CisgICAgY2FzZSBDRjJfTnVtYmVySW50OgorICAgICAgcmV0dXJuIGNmMl9pbnRUb0ZpeGVkKCBzdGFjay0+YnVmZmVyW2lkeF0udS5pICk7CisgICAgY2FzZSBDRjJfTnVtYmVyRnJhYzoKKyAgICAgIHJldHVybiBjZjJfZnJhY1RvRml4ZWQoIHN0YWNrLT5idWZmZXJbaWR4XS51LmYgKTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIHN0YWNrLT5idWZmZXJbaWR4XS51LnI7CisgICAgfQorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfc3RhY2tfY2xlYXIoIENGMl9TdGFjayAgc3RhY2sgKQorICB7CisgICAgc3RhY2stPnRvcCA9ICZzdGFjay0+YnVmZmVyWzBdOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJzdGFjay5oIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Yyc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Yyc3RhY2suaApAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2Yyc3RhY2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZW11bGF0aW5nIGEgQ0ZGIHN0YWNrIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLworLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KKy8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCisvKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLworLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KKy8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCisvKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLworLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KKy8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCisvKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLworLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KKy8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCisvKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLworLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KKy8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCisvKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLworLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KKy8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCisvKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLworLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KKy8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KKy8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLworLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRjJTVEFDS19IX18KKyNkZWZpbmUgX19DRjJTVEFDS19IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIENGRiBvcGVyYW5kIHN0YWNrOyBzcGVjaWZpZWQgbWF4aW11bSBvZiA0OCBvciAxOTIgdmFsdWVzICovCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfU3RhY2tOdW1iZXJfCisgIHsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgIENGMl9GaXhlZCAgcjsgICAgICAvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworICAgICAgQ0YyX0ZyYWMgICBmOyAgICAgIC8qIDIuMzAgZml4ZWQgcG9pbnQgKGZvciBmb250IG1hdHJpeCkgKi8KKyAgICAgIENGMl9JbnQgICAgaTsKKyAgICB9IHU7CisKKyAgICBDRjJfTnVtYmVyVHlwZSAgdHlwZTsKKworICB9IENGMl9TdGFja051bWJlcjsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfU3RhY2tSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CisgICAgRlRfRXJyb3IqICAgICAgICAgZXJyb3I7CisgICAgQ0YyX1N0YWNrTnVtYmVyICAgYnVmZmVyW0NGMl9PUEVSQU5EX1NUQUNLX1NJWkVdOworICAgIENGMl9TdGFja051bWJlciogIHRvcDsKKworICB9IENGMl9TdGFja1JlYywgKkNGMl9TdGFjazsKKworCisgIEZUX0xPQ0FMKCBDRjJfU3RhY2sgKQorICBjZjJfc3RhY2tfaW5pdCggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX3N0YWNrX2ZyZWUoIENGMl9TdGFjayAgc3RhY2sgKTsKKworICBGVF9MT0NBTCggQ0YyX1VJbnQgKQorICBjZjJfc3RhY2tfY291bnQoIENGMl9TdGFjayAgc3RhY2sgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19wdXNoSW50KCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICB2YWwgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgIHZhbCApOworCisgIEZUX0xPQ0FMKCBDRjJfSW50ICkKKyAgY2YyX3N0YWNrX3BvcEludCggQ0YyX1N0YWNrICBzdGFjayApOworICBGVF9MT0NBTCggQ0YyX0ZpeGVkICkKKyAgY2YyX3N0YWNrX3BvcEZpeGVkKCBDRjJfU3RhY2sgIHN0YWNrICk7CisKKyAgRlRfTE9DQUwoIENGMl9GaXhlZCApCisgIGNmMl9zdGFja19nZXRSZWFsKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICBpZHggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19jbGVhciggQ0YyX1N0YWNrICBzdGFjayApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRjJTVEFDS19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmMnR5cGVzLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJ0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNmEwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZjJ0eXBlcy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmMnR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGRlZmluaW5nIGRhdGEgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMS0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0YyVFlQRVNfSF9fCisjZGVmaW5lIF9fQ0YyVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoKKyAgICogVGhlIGRhdGEgbW9kZWxzIHRoYXQgd2UgZXhwZWN0IHRvIHN1cHBvcnQgYXJlIGFzIGZvbGxvd3M6CisgICAqCisgICAqICAgbmFtZSAgY2hhciBzaG9ydCBpbnQgbG9uZyBsb25nLWxvbmcgcG9pbnRlciBleGFtcGxlCisgICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgIElMUDMyICA4ICAgIDE2ICAgIDMyICAzMiAgICAgNjQqICAgICAgMzIgICAgMzItYml0IE1hY09TLCB4ODYKKyAgICogICBMTFA2NCAgOCAgICAxNiAgICAzMiAgMzIgICAgIDY0ICAgICAgIDY0ICAgIHg2NAorICAgKiAgIExQNjQgICA4ICAgIDE2ICAgIDMyICA2NCAgICAgNjQgICAgICAgNjQgICAgNjQtYml0IE1hY09TCisgICAqCisgICAqICAgICopIHR5cGUgbWF5IGJlIHN1cHBvcnRlZCBieSBlbXVsYXRpb24gb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlCisgICAqCisgICAqLworCisKKyAgLyogaW50ZWdlcnMgYXQgbGVhc3QgMzIgYml0cyB3aWRlICovCisjZGVmaW5lIENGMl9VSW50ICBGVF9VRmFzdAorI2RlZmluZSBDRjJfSW50ICAgRlRfRmFzdAorCisKKyAgLyogZml4ZWQtZmxvYXQgbnVtYmVycyAqLworICB0eXBlZGVmIEZUX0ludDMyICBDRjJfRjE2RG90MTY7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0NGMlRZUEVTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJjZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlICJjZmZwaWMuYyIKKyNpbmNsdWRlICJjZmZkcml2ci5jIgorI2luY2x1ZGUgImNmZnBhcnNlLmMiCisjaW5jbHVkZSAiY2ZmbG9hZC5jIgorI2luY2x1ZGUgImNmZm9ianMuYyIKKyNpbmNsdWRlICJjZmZnbG9hZC5jIgorI2luY2x1ZGUgImNmZmNtYXAuYyIKKworI2luY2x1ZGUgImNmMmFycnN0LmMiCisjaW5jbHVkZSAiY2YyYmx1ZXMuYyIKKyNpbmNsdWRlICJjZjJlcnJvci5jIgorI2luY2x1ZGUgImNmMmZvbnQuYyIKKyNpbmNsdWRlICJjZjJmdC5jIgorI2luY2x1ZGUgImNmMmhpbnRzLmMiCisjaW5jbHVkZSAiY2YyaW50cnAuYyIKKyNpbmNsdWRlICJjZjJyZWFkLmMiCisjaW5jbHVkZSAiY2Yyc3RhY2suYyIKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZjbWFwLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZjbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1MzhlOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmNtYXAuYwpAQCAtMCwwICsxLDIxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmY21hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENGRiBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlICJjZmZjbWFwLmgiCisjaW5jbHVkZSAiY2ZmbG9hZC5oIgorCisjaW5jbHVkZSAiY2ZmZXJycy5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICBDRkYgU1RBTkRBUkQgKEFORCBFWFBFUlQpIEVOQ09ESU5HIENNQVBTICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGNmZl9jbWFwX2VuY29kaW5nX2luaXQoIENGRl9DTWFwU3RkICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgcG9pbnRlciApCisgIHsKKyAgICBUVF9GYWNlICAgICAgIGZhY2UgICAgID0gKFRUX0ZhY2UpRlRfQ01BUF9GQUNFKCBjbWFwICk7CisgICAgQ0ZGX0ZvbnQgICAgICBjZmYgICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworICAgIENGRl9FbmNvZGluZyAgZW5jb2RpbmcgPSAmY2ZmLT5lbmNvZGluZzsKKworICAgIEZUX1VOVVNFRCggcG9pbnRlciApOworCisKKyAgICBjbWFwLT5naWRzICA9IGVuY29kaW5nLT5jb2RlczsKKworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBjZmZfY21hcF9lbmNvZGluZ19kb25lKCBDRkZfQ01hcFN0ZCAgY21hcCApCisgIHsKKyAgICBjbWFwLT5naWRzICA9IE5VTEw7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIGNmZl9jbWFwX2VuY29kaW5nX2NoYXJfaW5kZXgoIENGRl9DTWFwU3RkICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VJbnQgIHJlc3VsdCA9IDA7CisKKworICAgIGlmICggY2hhcl9jb2RlIDwgMjU2ICkKKyAgICAgIHJlc3VsdCA9IGNtYXAtPmdpZHNbY2hhcl9jb2RlXTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludDMyICkKKyAgY2ZmX2NtYXBfZW5jb2RpbmdfY2hhcl9uZXh0KCBDRkZfQ01hcFN0ZCAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgICpwY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VJbnQgICAgcmVzdWx0ICAgID0gMDsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlOworCisKKyAgICAqcGNoYXJfY29kZSA9IDA7CisKKyAgICBpZiAoIGNoYXJfY29kZSA8IDI1NSApCisgICAgeworICAgICAgRlRfVUludCAgY29kZSA9IChGVF9VSW50KShjaGFyX2NvZGUgKyAxKTsKKworCisgICAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgICBpZiAoIGNvZGUgPj0gMjU2ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICByZXN1bHQgPSBjbWFwLT5naWRzW2NvZGVdOworICAgICAgICBpZiAoIHJlc3VsdCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICpwY2hhcl9jb2RlID0gY29kZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUrKzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfREVGSU5FX0NNQVBfQ0xBU1MoY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjLAorICAgIHNpemVvZiAoIENGRl9DTWFwU3RkUmVjICksCisKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIGNmZl9jbWFwX2VuY29kaW5nX2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICBjZmZfY21hcF9lbmNvZGluZ19kb25lLAorICAgIChGVF9DTWFwX0NoYXJJbmRleEZ1bmMpY2ZmX2NtYXBfZW5jb2RpbmdfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIGNmZl9jbWFwX2VuY29kaW5nX2NoYXJfbmV4dCwKKworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICBDRkYgU1lOVEhFVElDIFVOSUNPREUgRU5DT0RJTkcgQ01BUCAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBjb25zdCBjaGFyKiApCisgIGNmZl9zaWRfdG9fZ2x5cGhfbmFtZSggVFRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBpZHggKQorICB7CisgICAgQ0ZGX0ZvbnQgICAgIGNmZiAgICAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBDRkZfQ2hhcnNldCAgY2hhcnNldCA9ICZjZmYtPmNoYXJzZXQ7CisgICAgRlRfVUludCAgICAgIHNpZCAgICAgPSBjaGFyc2V0LT5zaWRzW2lkeF07CisKKworICAgIHJldHVybiBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwgc2lkICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBjZmZfY21hcF91bmljb2RlX2luaXQoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgcG9pbnRlciApCisgIHsKKyAgICBUVF9GYWNlICAgICAgICAgICAgIGZhY2UgICAgPSAoVFRfRmFjZSlGVF9DTUFQX0ZBQ0UoIHVuaWNvZGVzICk7CisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKyAgICBDRkZfRm9udCAgICAgICAgICAgIGNmZiAgICAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBDRkZfQ2hhcnNldCAgICAgICAgIGNoYXJzZXQgPSAmY2ZmLT5jaGFyc2V0OworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpY2ZmLT5wc25hbWVzOworCisgICAgRlRfVU5VU0VEKCBwb2ludGVyICk7CisKKworICAgIC8qIGNhbid0IGJ1aWxkIFVuaWNvZGUgbWFwIGZvciBDSUQta2V5ZWQgZm9udCAqLworICAgIC8qIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBnbHlwaCBuYW1lcy4gICAgICAgICAqLworICAgIGlmICggIWNoYXJzZXQtPnNpZHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBOb19Vbmljb2RlX0dseXBoX05hbWUgKTsKKworICAgIHJldHVybiBwc25hbWVzLT51bmljb2Rlc19pbml0KCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYtPm51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU19HZXRHbHlwaE5hbWVGdW5jKSZjZmZfc2lkX3RvX2dseXBoX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU19GcmVlR2x5cGhOYW1lRnVuYylOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfUG9pbnRlcilmYWNlICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIGNmZl9jbWFwX3VuaWNvZGVfZG9uZSggUFNfVW5pY29kZXMgIHVuaWNvZGVzICkKKyAgeworICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gRlRfQ01BUF9GQUNFKCB1bmljb2RlcyApOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgRlRfRlJFRSggdW5pY29kZXMtPm1hcHMgKTsKKyAgICB1bmljb2Rlcy0+bnVtX21hcHMgPSAwOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICBjZmZfY21hcF91bmljb2RlX2NoYXJfaW5kZXgoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgY2hhcl9jb2RlICkKKyAgeworICAgIFRUX0ZhY2UgICAgICAgICAgICAgZmFjZSAgICA9IChUVF9GYWNlKUZUX0NNQVBfRkFDRSggdW5pY29kZXMgKTsKKyAgICBDRkZfRm9udCAgICAgICAgICAgIGNmZiAgICAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXMgPSAoRlRfU2VydmljZV9Qc0NNYXBzKWNmZi0+cHNuYW1lczsKKworCisgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2NoYXJfaW5kZXgoIHVuaWNvZGVzLCBjaGFyX2NvZGUgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICBjZmZfY21hcF91bmljb2RlX2NoYXJfbmV4dCggUFNfVW5pY29kZXMgIHVuaWNvZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgVFRfRmFjZSAgICAgICAgICAgICBmYWNlICAgID0gKFRUX0ZhY2UpRlRfQ01BUF9GQUNFKCB1bmljb2RlcyApOworICAgIENGRl9Gb250ICAgICAgICAgICAgY2ZmICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpY2ZmLT5wc25hbWVzOworCisKKyAgICByZXR1cm4gcHNuYW1lcy0+dW5pY29kZXNfY2hhcl9uZXh0KCB1bmljb2RlcywgcGNoYXJfY29kZSApOworICB9CisKKworICBGVF9ERUZJTkVfQ01BUF9DTEFTUyhjZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYywKKyAgICBzaXplb2YgKCBQU19Vbmljb2Rlc1JlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICBjZmZfY21hcF91bmljb2RlX2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICBjZmZfY21hcF91bmljb2RlX2RvbmUsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyljZmZfY21hcF91bmljb2RlX2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSBjZmZfY21hcF91bmljb2RlX2NoYXJfbmV4dCwKKworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgKQorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmNtYXAuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmNtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWFlZDYzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmY21hcC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmZmNtYXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGRkNNQVBfSF9fCisjZGVmaW5lIF9fQ0ZGQ01BUF9IX18KKworI2luY2x1ZGUgImNmZm9ianMuaCIKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgVFlQRTEgU1RBTkRBUkQgKEFORCBFWFBFUlQpIEVOQ09ESU5HIENNQVBTICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBzdGFuZGFyZCAoYW5kIGV4cGVydCkgZW5jb2RpbmcgY21hcHMgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgQ0ZGX0NNYXBTdGRSZWNfKiAgQ0ZGX0NNYXBTdGQ7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9DTWFwU3RkUmVjXworICB7CisgICAgRlRfQ01hcFJlYyAgY21hcDsKKyAgICBGVF9VU2hvcnQqICBnaWRzOyAgIC8qIHVwIHRvIDI1NiBlbGVtZW50cyAqLworCisgIH0gQ0ZGX0NNYXBTdGRSZWM7CisKKworICBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgQ0ZGIFNZTlRIRVRJQyBVTklDT0RFIEVOQ09ESU5HIENNQVAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogdW5pY29kZSAoc3ludGhldGljKSBjbWFwcyAqLworCisgIEZUX0RFQ0xBUkVfQ01BUF9DTEFTUyhjZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYykKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0NGRkNNQVBfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZkcml2ci5jIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmZHJpdnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE4YjdhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmZHJpdnIuYwpAQCAtMCwwICsxLDkwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmZHJpdnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0lEX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfVFRfQ01BUF9ICisKKyNpbmNsdWRlICJjZmZkcml2ci5oIgorI2luY2x1ZGUgImNmZmdsb2FkLmgiCisjaW5jbHVkZSAiY2ZmbG9hZC5oIgorI2luY2x1ZGUgImNmZmNtYXAuaCIKKyNpbmNsdWRlICJjZmZwYXJzZS5oIgorCisjaW5jbHVkZSAiY2ZmZXJycy5oIgorI2luY2x1ZGUgImNmZnBpYy5oIgorCisjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAorI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jZmZkcml2ZXIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEYgQSBDIEUgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNmZl9nZXRfa2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIHJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gICAgICAqLworICAvKiAgICBnbHlwaHMgb2YgdGhlIHNhbWUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAga2VybmluZyAgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBpbiBmb250IHVuaXRzIGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNjYWxhYmxlIGZvcm1hdHMsIGFuZCBpbiBwaXhlbHMgZm9yIGZpeGVkLXNpemVzICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZSAgICAgICAgKi8KKyAgLyogICAgc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICovCisgIC8qICAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHNjb3BlIG9mIHRoaXMgbWV0aG9kICh0aGUgYmFzaWMgZHJpdmVyICAgICAgICAqLworICAvKiAgICBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gYmUgc2ltcGxlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGNmZl9nZXRfa2VybmluZyggRlRfRmFjZSAgICAgdHRmYWNlLCAgICAgICAgICAvKiBUVF9GYWNlICovCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVmdF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBrZXJuaW5nICkKKyAgeworICAgIFRUX0ZhY2UgICAgICAgZmFjZSA9IChUVF9GYWNlKXR0ZmFjZTsKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CisKKworICAgIGtlcm5pbmctPnggPSAwOworICAgIGtlcm5pbmctPnkgPSAwOworCisgICAgaWYgKCBzZm50ICkKKyAgICAgIGtlcm5pbmctPnggPSBzZm50LT5nZXRfa2VybmluZyggZmFjZSwgbGVmdF9nbHlwaCwgcmlnaHRfZ2x5cGggKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNmZl9nbHlwaF9sb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIGxvYWQgYSBnbHlwaCB3aXRoaW4gYSBnaXZlbiBnbHlwaCBzbG90LiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNsb3QgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc2xvdCBvYmplY3Qgd2hlcmUgdGhlIGdseXBoICAqLworICAvKiAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGxvYWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBzaXplIGF0IHdoaWNoIHRoZSBnbHlwaCAqLworICAvKiAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNjYWxlZCwgbG9hZGVkLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbG9hZF9mbGFncyAgOjogQSBmbGFnIGluZGljYXRpbmcgd2hhdCB0byBsb2FkIGZvciB0aGlzIGdseXBoLiAgVGhlICovCisgIC8qICAgICAgICAgICAgICAgICAgIEZUX0xPQURfPz8/IGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBnbHlwaCBsb2FkaW5nIHByb2Nlc3MgKGUuZy4sIHdoZXRoZXIgdGhlIG91dGxpbmUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNjYWxlZCwgd2hldGhlciB0byBsb2FkIGJpdG1hcHMgb3Igbm90LCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgdG8gaGludCB0aGUgb3V0bGluZSwgZXRjKS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIGNmZl9nbHlwaF9sb2FkKCBGVF9HbHlwaFNsb3QgIGNmZnNsb3QsICAgICAgLyogQ0ZGX0dseXBoU2xvdCAqLworICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBjZmZzaXplLCAgICAgIC8qIENGRl9TaXplICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CisgICAgQ0ZGX0dseXBoU2xvdCAgc2xvdCA9IChDRkZfR2x5cGhTbG90KWNmZnNsb3Q7CisgICAgQ0ZGX1NpemUgICAgICAgc2l6ZSA9IChDRkZfU2l6ZSljZmZzaXplOworCisKKyAgICBpZiAoICFzbG90ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TbG90X0hhbmRsZSApOworCisgICAgRlRfVFJBQ0UxKCggImNmZl9nbHlwaF9sb2FkOiBnbHlwaCBpbmRleCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICAvKiBjaGVjayB3aGV0aGVyIHdlIHdhbnQgYSBzY2FsZWQgb3V0bGluZSBvciBiaXRtYXAgKi8KKyAgICBpZiAoICFzaXplICkKKyAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORzsKKworICAgIC8qIHJlc2V0IHRoZSBzaXplIG9iamVjdCBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkKKyAgICAgIHNpemUgPSBOVUxMOworCisgICAgaWYgKCBzaXplICkKKyAgICB7CisgICAgICAvKiB0aGVzZSB0d28gb2JqZWN0cyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyZW50ICovCisgICAgICBpZiAoIGNmZnNpemUtPmZhY2UgIT0gY2Zmc2xvdC0+ZmFjZSApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworICAgIH0KKworICAgIC8qIG5vdyBsb2FkIHRoZSBnbHlwaCBvdXRsaW5lIGlmIG5lY2Vzc2FyeSAqLworICAgIGVycm9yID0gY2ZmX3Nsb3RfbG9hZCggc2xvdCwgc2l6ZSwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKworICAgIC8qIGZvcmNlIGRyb3Atb3V0IG1vZGUgdG8gMiAtIGlycmVsZXZhbnQgbm93ICovCisgICAgLyogc2xvdC0+b3V0bGluZS5kcm9wb3V0X21vZGUgPSAyOyAqLworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX2dldF9hZHZhbmNlcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGFkdmFuY2VzICkKKyAgeworICAgIEZUX1VJbnQgICAgICAgbm47CisgICAgRlRfRXJyb3IgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9HbHlwaFNsb3QgIHNsb3QgID0gZmFjZS0+Z2x5cGg7CisKKworICAgIGlmICggRlRfSVNfU0ZOVCggZmFjZSApICkKKyAgICB7CisgICAgICAvKiBPcGVuVHlwZSAxLjcgbWFuZGF0ZXMgdGhhdCB0aGUgZGF0YSBmcm9tIGBobXR4JyB0YWJsZSBiZSB1c2VkOyAqLworICAgICAgLyogaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0aGF0IHRob3NlIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHRvICAgKi8KKyAgICAgIC8qIHRoZSB2YWx1ZXMgaW4gdGhlIGBDRkYnIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIFRUX0ZhY2UgICB0dGZhY2UgPSAoVFRfRmFjZSlmYWNlOworICAgICAgRlRfU2hvcnQgIGR1bW15OworCisKKyAgICAgIGlmICggZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICB7CisgICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkYXRhIGZyb20gdGhlIGB2bXR4JyB0YWJsZSBhdCBhbGw7ICovCisgICAgICAgIC8qIG90aGVyd2lzZSB3ZSBleHRyYWN0IHRoZSBpbmZvIGZyb20gdGhlIENGRiBnbHlwaHN0cmluZ3MgICovCisgICAgICAgIC8qIChpbnN0ZWFkIG9mIHN5bnRoZXNpemluZyBhIGdsb2JhbCB2YWx1ZSB1c2luZyB0aGUgYE9TLzInICovCisgICAgICAgIC8qIHRhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggIXR0ZmFjZS0+dmVydGljYWxfaW5mbyApCisgICAgICAgICAgZ290byBNaXNzaW5nX1RhYmxlOworCisgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VU2hvcnQgIGFoOworCisKKyAgICAgICAgICAoIChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50ICktPmdldF9tZXRyaWNzKCB0dGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWggKTsKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGlkeCAlZDogYWR2YW5jZSBoZWlnaHQgJWQgZm9udCB1bml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLCBhaCApKTsKKyAgICAgICAgICBhZHZhbmNlc1tubl0gPSBhaDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgZGF0YSBmcm9tIHRoZSBgaG10eCcgdGFibGUgYXQgYWxsICovCisgICAgICAgIGlmICggIXR0ZmFjZS0+aG9yaXpvbnRhbC5udW1iZXJfT2ZfSE1ldHJpY3MgKQorICAgICAgICAgIGdvdG8gTWlzc2luZ19UYWJsZTsKKworICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgY291bnQ7IG5uKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVVNob3J0ICBhdzsKKworCisgICAgICAgICAgKCAoU0ZOVF9TZXJ2aWNlKXR0ZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggdHRmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF3ICk7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2Ugd2lkdGggJWQgZm9udCB1bml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLCBhdyApKTsKKyAgICAgICAgICBhZHZhbmNlc1tubl0gPSBhdzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgIE1pc3NpbmdfVGFibGU6CisgICAgZmxhZ3MgfD0gKEZUX1VJbnQzMilGVF9MT0FEX0FEVkFOQ0VfT05MWTsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisgICAgeworICAgICAgZXJyb3IgPSBjZmZfZ2x5cGhfbG9hZCggc2xvdCwgZmFjZS0+c2l6ZSwgc3RhcnQgKyBubiwgZmxhZ3MgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKworICAgICAgYWR2YW5jZXNbbm5dID0gKCBmbGFncyAmIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICkKKyAgICAgICAgICAgICAgICAgICAgID8gc2xvdC0+bGluZWFyVmVydEFkdmFuY2UKKyAgICAgICAgICAgICAgICAgICAgIDogc2xvdC0+bGluZWFySG9yaUFkdmFuY2U7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKgorICAgKiAgR0xZUEggRElDVCBTRVJWSUNFCisgICAqCisgICAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfZ2V0X2dseXBoX25hbWUoIENGRl9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICB7CisgICAgQ0ZGX0ZvbnQgICAgZm9udCAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisgICAgRlRfU3RyaW5nKiAgZ25hbWU7CisgICAgRlRfVVNob3J0ICAgc2lkOworICAgIEZUX0Vycm9yICAgIGVycm9yOworCisKKyAgICBpZiAoICFmb250LT5wc25hbWVzICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJjZmZfZ2V0X2dseXBoX25hbWU6IgorICAgICAgICAgICAgICAgICAiIGNhbm5vdCBnZXQgZ2x5cGggbmFtZSBmcm9tIENGRiAmIENFRiBmb250c1xuIgorICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgIiB3aXRob3V0IHRoZSBgUFNOYW1lcycgbW9kdWxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBmaXJzdCwgbG9jYXRlIHRoZSBzaWQgaW4gdGhlIGNoYXJzZXQgdGFibGUgKi8KKyAgICBzaWQgPSBmb250LT5jaGFyc2V0LnNpZHNbZ2x5cGhfaW5kZXhdOworCisgICAgLyogbm93LCBsb29rdXAgdGhlIG5hbWUgaXRzZWxmICovCisgICAgZ25hbWUgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGZvbnQsIHNpZCApOworCisgICAgaWYgKCBnbmFtZSApCisgICAgICBGVF9TVFJDUFlOKCBidWZmZXIsIGduYW1lLCBidWZmZXJfbWF4ICk7CisKKyAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQKKyAgY2ZmX2dldF9uYW1lX2luZGV4KCBDRkZfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyogIGdseXBoX25hbWUgKQorICB7CisgICAgQ0ZGX0ZvbnQgICAgICAgICAgICBjZmY7CisgICAgQ0ZGX0NoYXJzZXQgICAgICAgICBjaGFyc2V0OworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lczsKKyAgICBGVF9TdHJpbmcqICAgICAgICAgIG5hbWU7CisgICAgRlRfVVNob3J0ICAgICAgICAgICBzaWQ7CisgICAgRlRfVUludCAgICAgICAgICAgICBpOworCisKKyAgICBjZmYgICAgID0gKENGRl9Gb250UmVjICopZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBjaGFyc2V0ID0gJmNmZi0+Y2hhcnNldDsKKworICAgIEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSggZmFjZSwgcHNuYW1lcywgUE9TVFNDUklQVF9DTUFQUyApOworICAgIGlmICggIXBzbmFtZXMgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNmZi0+bnVtX2dseXBoczsgaSsrICkKKyAgICB7CisgICAgICBzaWQgPSBjaGFyc2V0LT5zaWRzW2ldOworCisgICAgICBpZiAoIHNpZCA+IDM5MCApCisgICAgICAgIG5hbWUgPSBjZmZfaW5kZXhfZ2V0X3N0cmluZyggY2ZmLCBzaWQgLSAzOTEgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbmFtZSA9IChGVF9TdHJpbmcgKilwc25hbWVzLT5hZG9iZV9zdGRfc3RyaW5ncyggc2lkICk7CisKKyAgICAgIGlmICggIW5hbWUgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCAhZnRfc3RyY21wKCBnbHlwaF9uYW1lLCBuYW1lICkgKQorICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfR0xZUEhESUNUUkVDKAorICAgIGNmZl9zZXJ2aWNlX2dseXBoX2RpY3QsCisgICAgKEZUX0dseXBoRGljdF9HZXROYW1lRnVuYykgIGNmZl9nZXRfZ2x5cGhfbmFtZSwKKyAgICAoRlRfR2x5cGhEaWN0X05hbWVJbmRleEZ1bmMpY2ZmX2dldF9uYW1lX2luZGV4CisgICkKKworCisgIC8qCisgICAqICBQT1NUU0NSSVBUIElORk8gU0VSVklDRQorICAgKgorICAgKi8KKworICBzdGF0aWMgRlRfSW50CisgIGNmZl9wc19oYXNfZ2x5cGhfbmFtZXMoIEZUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgcmV0dXJuICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyApID4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9wc19nZXRfZm9udF9pbmZvKCBDRkZfRmFjZSAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBQU19Gb250SW5mb1JlYyogIGFmb250X2luZm8gKQorICB7CisgICAgQ0ZGX0ZvbnQgIGNmZiAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoIGNmZiAmJiBjZmYtPmZvbnRfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3QgICA9ICZjZmYtPnRvcF9mb250LmZvbnRfZGljdDsKKyAgICAgIFBTX0ZvbnRJbmZvUmVjICAqZm9udF9pbmZvID0gTlVMTDsKKyAgICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKworICAgICAgaWYgKCBGVF9BTExPQyggZm9udF9pbmZvLCBzaXplb2YgKCAqZm9udF9pbmZvICkgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZm9udF9pbmZvLT52ZXJzaW9uICAgICA9IGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggY2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+dmVyc2lvbiApOworICAgICAgZm9udF9pbmZvLT5ub3RpY2UgICAgICA9IGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggY2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+bm90aWNlICk7CisgICAgICBmb250X2luZm8tPmZ1bGxfbmFtZSAgID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT5mdWxsX25hbWUgKTsKKyAgICAgIGZvbnRfaW5mby0+ZmFtaWx5X25hbWUgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmZhbWlseV9uYW1lICk7CisgICAgICBmb250X2luZm8tPndlaWdodCAgICAgID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT53ZWlnaHQgKTsKKyAgICAgIGZvbnRfaW5mby0+aXRhbGljX2FuZ2xlICAgICAgICA9IGRpY3QtPml0YWxpY19hbmdsZTsKKyAgICAgIGZvbnRfaW5mby0+aXNfZml4ZWRfcGl0Y2ggICAgICA9IGRpY3QtPmlzX2ZpeGVkX3BpdGNoOworICAgICAgZm9udF9pbmZvLT51bmRlcmxpbmVfcG9zaXRpb24gID0gKEZUX1Nob3J0KWRpY3QtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgIGZvbnRfaW5mby0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IChGVF9VU2hvcnQpZGljdC0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKworICAgICAgY2ZmLT5mb250X2luZm8gPSBmb250X2luZm87CisgICAgfQorCisgICAgaWYgKCBjZmYgKQorICAgICAgKmFmb250X2luZm8gPSAqY2ZmLT5mb250X2luZm87CisKKyAgRmFpbDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX1BTSU5GT1JFQygKKyAgICBjZmZfc2VydmljZV9wc19pbmZvLAorICAgIChQU19HZXRGb250SW5mb0Z1bmMpICAgY2ZmX3BzX2dldF9mb250X2luZm8sCisgICAgKFBTX0dldEZvbnRFeHRyYUZ1bmMpICBOVUxMLAorICAgIChQU19IYXNHbHlwaE5hbWVzRnVuYykgY2ZmX3BzX2hhc19nbHlwaF9uYW1lcywKKyAgICAoUFNfR2V0Rm9udFByaXZhdGVGdW5jKU5VTEwsICAgICAgICAvKiB1bnN1cHBvcnRlZCB3aXRoIENGRiBmb250cyAqLworICAgIChQU19HZXRGb250VmFsdWVGdW5jKSAgTlVMTCAgICAgICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAgICAgICAgICAgICovCisgICkKKworCisgIC8qCisgICAqICBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQorICAgKgorICAgKi8KKworICBzdGF0aWMgY29uc3QgY2hhcioKKyAgY2ZmX2dldF9wc19uYW1lKCBDRkZfRmFjZSAgZmFjZSApCisgIHsKKyAgICBDRkZfRm9udCAgICAgIGNmZiAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CisKKworICAgIC8qIGZvbGxvd2luZyB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiAxLjcsIHdlIHJldHVybiB0aGUgbmFtZSBzdG9yZWQgKi8KKyAgICAvKiBpbiB0aGUgYG5hbWUnIHRhYmxlIGZvciBhIENGRiB3cmFwcGVkIGludG8gYW4gU0ZOVCBjb250YWluZXIgICAgICAgICovCisKKyAgICBpZiAoIHNmbnQgKQorICAgIHsKKyAgICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgbGlicmFyeSAgICAgPSBGVF9GQUNFX0xJQlJBUlkoIGZhY2UgKTsKKyAgICAgIEZUX01vZHVsZSAgICAgICAgICAgICAgc2ZudF9tb2R1bGUgPSBGVF9HZXRfTW9kdWxlKCBsaWJyYXJ5LCAic2ZudCIgKTsKKyAgICAgIEZUX1NlcnZpY2VfUHNGb250TmFtZSAgc2VydmljZSAgICAgPQorICAgICAgICAoRlRfU2VydmljZV9Qc0ZvbnROYW1lKWZ0X21vZHVsZV9nZXRfc2VydmljZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSApOworCisKKyAgICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfcHNfZm9udF9uYW1lICkKKyAgICAgICAgcmV0dXJuIHNlcnZpY2UtPmdldF9wc19mb250X25hbWUoIEZUX0ZBQ0UoIGZhY2UgKSApOworICAgIH0KKworICAgIHJldHVybiAoY29uc3QgY2hhciopY2ZmLT5mb250X25hbWU7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX1BTRk9OVE5BTUVSRUMoCisgICAgY2ZmX3NlcnZpY2VfcHNfbmFtZSwKKyAgICAoRlRfUHNOYW1lX0dldEZ1bmMpY2ZmX2dldF9wc19uYW1lCisgICkKKworCisgIC8qCisgICAqIFRUIENNQVAgSU5GTworICAgKgorICAgKiBJZiB0aGUgY2hhcm1hcCBpcyBhIHN5bnRoZXRpYyBVbmljb2RlIGVuY29kaW5nIGNtYXAgb3IKKyAgICogYSBUeXBlIDEgc3RhbmRhcmQgKG9yIGV4cGVydCkgZW5jb2RpbmcgY21hcCwgaGlkZSBUVCBDTUFQIElORk8KKyAgICogc2VydmljZSBkZWZpbmVkIGluIFNGTlQgbW9kdWxlLgorICAgKgorICAgKiBPdGhlcndpc2UgY2FsbCB0aGUgc2VydmljZSBmdW5jdGlvbiBpbiB0aGUgc2ZudCBtb2R1bGUuCisgICAqCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2dldF9jbWFwX2luZm8oIEZUX0NoYXJNYXAgICAgY2hhcm1hcCwKKyAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBJbmZvICAqY21hcF9pbmZvICkKKyAgeworICAgIEZUX0NNYXAgICBjbWFwICA9IEZUX0NNQVAoIGNoYXJtYXAgKTsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBGVF9GYWNlICAgICBmYWNlICAgID0gRlRfQ01BUF9GQUNFKCBjbWFwICk7CisgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApOworCisKKyAgICBjbWFwX2luZm8tPmxhbmd1YWdlID0gMDsKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gMDsKKworICAgIGlmICggY21hcC0+Y2xhenogIT0gJkNGRl9DTUFQX0VOQ09ESU5HX0NMQVNTX1JFQ19HRVQgJiYKKyAgICAgICAgIGNtYXAtPmNsYXp6ICE9ICZDRkZfQ01BUF9VTklDT0RFX0NMQVNTX1JFQ19HRVQgICkKKyAgICB7CisgICAgICBGVF9Nb2R1bGUgICAgICAgICAgIHNmbnQgICAgPSBGVF9HZXRfTW9kdWxlKCBsaWJyYXJ5LCAic2ZudCIgKTsKKyAgICAgIEZUX1NlcnZpY2VfVFRDTWFwcyAgc2VydmljZSA9CisgICAgICAgIChGVF9TZXJ2aWNlX1RUQ01hcHMpZnRfbW9kdWxlX2dldF9zZXJ2aWNlKCBzZm50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQICk7CisKKworICAgICAgaWYgKCBzZXJ2aWNlICYmIHNlcnZpY2UtPmdldF9jbWFwX2luZm8gKQorICAgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9jbWFwX2luZm8oIGNoYXJtYXAsIGNtYXBfaW5mbyApOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfVFRDTUFQU1JFQygKKyAgICBjZmZfc2VydmljZV9nZXRfY21hcF9pbmZvLAorICAgIChUVF9DTWFwX0luZm9fR2V0RnVuYyljZmZfZ2V0X2NtYXBfaW5mbworICApCisKKworICAvKgorICAgKiAgQ0lEIElORk8gU0VSVklDRQorICAgKgorICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9nZXRfcm9zKCBDRkZfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpvcmRlcmluZywKKyAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAqc3VwcGxlbWVudCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgQ0ZGX0ZvbnQgIGNmZiAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisKKworICAgIGlmICggY2ZmICkKKyAgICB7CisgICAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3QgPSAmY2ZmLT50b3BfZm9udC5mb250X2RpY3Q7CisKKworICAgICAgaWYgKCBkaWN0LT5jaWRfcmVnaXN0cnkgPT0gMHhGRkZGVSApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorCisgICAgICBpZiAoIHJlZ2lzdHJ5ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBjZmYtPnJlZ2lzdHJ5ID09IE5VTEwgKQorICAgICAgICAgIGNmZi0+cmVnaXN0cnkgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfcmVnaXN0cnkgKTsKKyAgICAgICAgKnJlZ2lzdHJ5ID0gY2ZmLT5yZWdpc3RyeTsKKyAgICAgIH0KKworICAgICAgaWYgKCBvcmRlcmluZyApCisgICAgICB7CisgICAgICAgIGlmICggY2ZmLT5vcmRlcmluZyA9PSBOVUxMICkKKyAgICAgICAgICBjZmYtPm9yZGVyaW5nID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+Y2lkX29yZGVyaW5nICk7CisgICAgICAgICpvcmRlcmluZyA9IGNmZi0+b3JkZXJpbmc7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBYWFg6IEFjY29yZGluZyB0byBBZG9iZSBUZWNoTm90ZSAjNTE3NiwgdGhlIHN1cHBsZW1lbnQgaW4gQ0ZGCisgICAgICAgKiAgICAgIGNhbiBiZSBhIHJlYWwgbnVtYmVyLiBXZSB0cnVuY2F0ZSBpdCB0byBmaXQgcHVibGljIEFQSQorICAgICAgICogICAgICBzaW5jZSBmcmVldHlwZS0yLjMuNi4KKyAgICAgICAqLworICAgICAgaWYgKCBzdXBwbGVtZW50ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkaWN0LT5jaWRfc3VwcGxlbWVudCA8IEZUX0lOVF9NSU4gfHwKKyAgICAgICAgICAgICBkaWN0LT5jaWRfc3VwcGxlbWVudCA+IEZUX0lOVF9NQVggKQorICAgICAgICAgIEZUX1RSQUNFMSgoICJjZmZfZ2V0X3JvczogdG9vIGxhcmdlIHN1cHBsZW1lbnQgJWQgaXMgdHJ1bmNhdGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmNpZF9zdXBwbGVtZW50ICkpOworICAgICAgICAqc3VwcGxlbWVudCA9IChGVF9JbnQpZGljdC0+Y2lkX3N1cHBsZW1lbnQ7CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2dldF9pc19jaWQoIENGRl9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgKmlzX2NpZCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgQ0ZGX0ZvbnQgIGNmZiAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisKKworICAgICppc19jaWQgPSAwOworCisgICAgaWYgKCBjZmYgKQorICAgIHsKKyAgICAgIENGRl9Gb250UmVjRGljdCAgZGljdCA9ICZjZmYtPnRvcF9mb250LmZvbnRfZGljdDsKKworCisgICAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSAhPSAweEZGRkZVICkKKyAgICAgICAgKmlzX2NpZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2dldF9jaWRfZnJvbV9nbHlwaF9pbmRleCggQ0ZGX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmNpZCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgQ0ZGX0ZvbnQgIGNmZjsKKworCisgICAgY2ZmID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisKKyAgICBpZiAoIGNmZiApCisgICAgeworICAgICAgRlRfVUludCAgICAgICAgICBjOworICAgICAgQ0ZGX0ZvbnRSZWNEaWN0ICBkaWN0ID0gJmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0OworCisKKyAgICAgIGlmICggZGljdC0+Y2lkX3JlZ2lzdHJ5ID09IDB4RkZGRlUgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgaWYgKCBnbHlwaF9pbmRleCA+IGNmZi0+bnVtX2dseXBocyApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorCisgICAgICBjID0gY2ZmLT5jaGFyc2V0LnNpZHNbZ2x5cGhfaW5kZXhdOworCisgICAgICBpZiAoIGNpZCApCisgICAgICAgICpjaWQgPSBjOworICAgIH0KKworICBGYWlsOgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfQ0lEUkVDKAorICAgIGNmZl9zZXJ2aWNlX2NpZF9pbmZvLAorICAgIChGVF9DSURfR2V0UmVnaXN0cnlPcmRlcmluZ1N1cHBsZW1lbnRGdW5jKWNmZl9nZXRfcm9zLAorICAgIChGVF9DSURfR2V0SXNJbnRlcm5hbGx5Q0lES2V5ZWRGdW5jKSAgICAgIGNmZl9nZXRfaXNfY2lkLAorICAgIChGVF9DSURfR2V0Q0lERnJvbUdseXBoSW5kZXhGdW5jKSAgICAgICAgIGNmZl9nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgKKyAgKQorCisKKyAgLyoKKyAgICogIFBST1BFUlRZIFNFUlZJQ0UKKyAgICoKKyAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgQ0ZGX0RyaXZlciAgZHJpdmVyID0gKENGRl9Ecml2ZXIpbW9kdWxlOworCisKKyAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJkYXJrZW5pbmctcGFyYW1ldGVycyIgKSApCisgICAgeworICAgICAgRlRfSW50KiAgZGFya2VuX3BhcmFtcyA9IChGVF9JbnQqKXZhbHVlOworCisgICAgICBGVF9JbnQgIHgxID0gZGFya2VuX3BhcmFtc1swXTsKKyAgICAgIEZUX0ludCAgeTEgPSBkYXJrZW5fcGFyYW1zWzFdOworICAgICAgRlRfSW50ICB4MiA9IGRhcmtlbl9wYXJhbXNbMl07CisgICAgICBGVF9JbnQgIHkyID0gZGFya2VuX3BhcmFtc1szXTsKKyAgICAgIEZUX0ludCAgeDMgPSBkYXJrZW5fcGFyYW1zWzRdOworICAgICAgRlRfSW50ICB5MyA9IGRhcmtlbl9wYXJhbXNbNV07CisgICAgICBGVF9JbnQgIHg0ID0gZGFya2VuX3BhcmFtc1s2XTsKKyAgICAgIEZUX0ludCAgeTQgPSBkYXJrZW5fcGFyYW1zWzddOworCisKKyAgICAgIGlmICggeDEgPCAwICAgfHwgeDIgPCAwICAgfHwgeDMgPCAwICAgfHwgeDQgPCAwICAgfHwKKyAgICAgICAgICAgeTEgPCAwICAgfHwgeTIgPCAwICAgfHwgeTMgPCAwICAgfHwgeTQgPCAwICAgfHwKKyAgICAgICAgICAgeDEgPiB4MiAgfHwgeDIgPiB4MyAgfHwgeDMgPiB4NCAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgeTEgPiA1MDAgfHwgeTIgPiA1MDAgfHwgeTMgPiA1MDAgfHwgeTQgPiA1MDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzBdID0geDE7CisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMV0gPSB5MTsKKyAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1syXSA9IHgyOworICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzNdID0geTI7CisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNF0gPSB4MzsKKyAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s1XSA9IHkzOworICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzZdID0geDQ7CisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbN10gPSB5NDsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImhpbnRpbmctZW5naW5lIiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgaGludGluZ19lbmdpbmUgPSAoRlRfVUludCopdmFsdWU7CisKKworI2lmbmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICBpZiAoICpoaW50aW5nX2VuZ2luZSAhPSBGVF9DRkZfSElOVElOR19BRE9CRSApCisgICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gKmhpbnRpbmdfZW5naW5lOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAibm8tc3RlbS1kYXJrZW5pbmciICkgKQorICAgIHsKKyAgICAgIEZUX0Jvb2wqICBub19zdGVtX2RhcmtlbmluZyA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgRlRfVFJBQ0UwKCggImNmZl9wcm9wZXJ0eV9zZXQ6IG1pc3NpbmcgcHJvcGVydHkgYCVzJ1xuIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lICkpOworICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Qcm9wZXJ0eSApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX3Byb3BlcnR5X2dldCggRlRfTW9kdWxlICAgIG1vZHVsZSwgICAgICAgICAvKiBDRkZfRHJpdmVyICovCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIENGRl9Ecml2ZXIgIGRyaXZlciA9IChDRkZfRHJpdmVyKW1vZHVsZTsKKworCisgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGFya2VuaW5nLXBhcmFtZXRlcnMiICkgKQorICAgIHsKKyAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXMgPSBkcml2ZXItPmRhcmtlbl9wYXJhbXM7CisgICAgICBGVF9JbnQqICB2YWwgICAgICAgICAgID0gKEZUX0ludCopdmFsdWU7CisKKworICAgICAgdmFsWzBdID0gZGFya2VuX3BhcmFtc1swXTsKKyAgICAgIHZhbFsxXSA9IGRhcmtlbl9wYXJhbXNbMV07CisgICAgICB2YWxbMl0gPSBkYXJrZW5fcGFyYW1zWzJdOworICAgICAgdmFsWzNdID0gZGFya2VuX3BhcmFtc1szXTsKKyAgICAgIHZhbFs0XSA9IGRhcmtlbl9wYXJhbXNbNF07CisgICAgICB2YWxbNV0gPSBkYXJrZW5fcGFyYW1zWzVdOworICAgICAgdmFsWzZdID0gZGFya2VuX3BhcmFtc1s2XTsKKyAgICAgIHZhbFs3XSA9IGRhcmtlbl9wYXJhbXNbN107CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJoaW50aW5nLWVuZ2luZSIgKSApCisgICAgeworICAgICAgRlRfVUludCAgIGhpbnRpbmdfZW5naW5lICAgID0gZHJpdmVyLT5oaW50aW5nX2VuZ2luZTsKKyAgICAgIEZUX1VJbnQqICB2YWwgICAgICAgICAgICAgICA9IChGVF9VSW50Kil2YWx1ZTsKKworCisgICAgICAqdmFsID0gaGludGluZ19lbmdpbmU7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCisgICAgeworICAgICAgRlRfQm9vbCAgIG5vX3N0ZW1fZGFya2VuaW5nID0gZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZzsKKyAgICAgIEZUX0Jvb2wqICB2YWwgICAgICAgICAgICAgICA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICAqdmFsID0gbm9fc3RlbV9kYXJrZW5pbmc7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBGVF9UUkFDRTAoKCAiY2ZmX3Byb3BlcnR5X2dldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAorICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX1Byb3BlcnR5ICk7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX1BST1BFUlRJRVNSRUMoCisgICAgY2ZmX3NlcnZpY2VfcHJvcGVydGllcywKKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKWNmZl9wcm9wZXJ0eV9zZXQsCisgICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYyljZmZfcHJvcGVydHlfZ2V0ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgRCBSIEkgViBFIFIgIEkgTiBUIEUgUiBGIEEgQyBFICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTCisgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzcoCisgICAgY2ZmX3NlcnZpY2VzLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NGRiwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQsCisgICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQKKyAgKQorI2Vsc2UKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNigKKyAgICBjZmZfc2VydmljZXMsCisgICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VULAorICAgIEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DSURfSU5GT19HRVQsCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUCisgICkKKyNlbmRpZgorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Nb2R1bGVfSW50ZXJmYWNlICkKKyAgY2ZmX2dldF9pbnRlcmZhY2UoIEZUX01vZHVsZSAgICBkcml2ZXIsICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2R1bGVfaW50ZXJmYWNlICkKKyAgeworICAgIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnk7CisgICAgRlRfTW9kdWxlICAgICAgICAgICAgc2ZudDsKKyAgICBGVF9Nb2R1bGVfSW50ZXJmYWNlICByZXN1bHQ7CisKKworICAgIC8qIENGRl9TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgaWYgKCAhZHJpdmVyICkKKyAgICAgIHJldHVybiBOVUxMOworICAgIGxpYnJhcnkgPSBkcml2ZXItPmxpYnJhcnk7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCisgICAgcmVzdWx0ID0gZnRfc2VydmljZV9saXN0X2xvb2t1cCggQ0ZGX1NFUlZJQ0VTX0dFVCwgbW9kdWxlX2ludGVyZmFjZSApOworICAgIGlmICggcmVzdWx0ICE9IE5VTEwgKQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8qIGBkcml2ZXInIGlzIG5vdCB5ZXQgZXZhbHVhdGVkIGluIG5vbi1QSUMgbW9kZSAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAgIGlmICggIWRyaXZlciApCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBsaWJyYXJ5ID0gZHJpdmVyLT5saWJyYXJ5OworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKKworICAgIC8qIHdlIHBhc3Mgb3VyIHJlcXVlc3QgdG8gdGhlIGBzZm50JyBtb2R1bGUgKi8KKyAgICBzZm50ID0gRlRfR2V0X01vZHVsZSggbGlicmFyeSwgInNmbnQiICk7CisKKyAgICByZXR1cm4gc2ZudCA/IHNmbnQtPmNsYXp6LT5nZXRfaW50ZXJmYWNlKCBzZm50LCBtb2R1bGVfaW50ZXJmYWNlICkgOiAwOworICB9CisKKworICAvKiBUaGUgRlRfRHJpdmVySW50ZXJmYWNlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIGZ0ZHJpdmVyLmguICovCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKyNkZWZpbmUgQ0ZGX1NJWkVfU0VMRUNUIGNmZl9zaXplX3NlbGVjdAorI2Vsc2UKKyNkZWZpbmUgQ0ZGX1NJWkVfU0VMRUNUIDAKKyNlbmRpZgorCisgIEZUX0RFRklORV9EUklWRVIoCisgICAgY2ZmX2RyaXZlcl9jbGFzcywKKworICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgICB8CisgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIsCisKKyAgICAgIHNpemVvZiAoIENGRl9Ecml2ZXJSZWMgKSwKKyAgICAgICJjZmYiLAorICAgICAgMHgxMDAwMEwsCisgICAgICAweDIwMDAwTCwKKworICAgICAgMCwgICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAgIGNmZl9kcml2ZXJfaW5pdCwKKyAgICAgIGNmZl9kcml2ZXJfZG9uZSwKKyAgICAgIGNmZl9nZXRfaW50ZXJmYWNlLAorCisgICAgLyogbm93IHRoZSBzcGVjaWZpYyBkcml2ZXIgZmllbGRzICovCisgICAgc2l6ZW9mICggVFRfRmFjZVJlYyApLAorICAgIHNpemVvZiAoIENGRl9TaXplUmVjICksCisgICAgc2l6ZW9mICggQ0ZGX0dseXBoU2xvdFJlYyApLAorCisgICAgY2ZmX2ZhY2VfaW5pdCwKKyAgICBjZmZfZmFjZV9kb25lLAorICAgIGNmZl9zaXplX2luaXQsCisgICAgY2ZmX3NpemVfZG9uZSwKKyAgICBjZmZfc2xvdF9pbml0LAorICAgIGNmZl9zbG90X2RvbmUsCisKKyAgICBjZmZfZ2x5cGhfbG9hZCwKKworICAgIGNmZl9nZXRfa2VybmluZywKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfRmFjZV9BdHRhY2hGdW5jICovCisgICAgY2ZmX2dldF9hZHZhbmNlcywKKworICAgIGNmZl9zaXplX3JlcXVlc3QsCisKKyAgICBDRkZfU0laRV9TRUxFQ1QKKyAgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmZHJpdnIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmRyaXZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyN2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmRyaXZyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmZHJpdnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhpZ2gtbGV2ZWwgT3BlblR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0ZGRFJJVkVSX0hfXworI2RlZmluZSBfX0NGRkRSSVZFUl9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9ERUNMQVJFX0RSSVZFUiggY2ZmX2RyaXZlcl9jbGFzcyApCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19DRkZEUklWRVJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZlcnJzLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZlcnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzYmRiMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmVycnMuaApAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZmZlcnJzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ0ZGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIENGRiBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ0ZGRVJSU19IX18KKyNkZWZpbmUgX19DRkZFUlJTX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBDRkZfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NGRgorCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX0NGRkVSUlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZnbG9hZC5jIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmZ2xvYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA1NGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmZ2xvYWQuYwpAQCAtMCwwICsxLDMwODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmZmdsb2FkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0NGRl9EUklWRVJfSAorCisjaW5jbHVkZSAiY2Zmb2Jqcy5oIgorI2luY2x1ZGUgImNmZmxvYWQuaCIKKyNpbmNsdWRlICJjZmZnbG9hZC5oIgorI2luY2x1ZGUgImNmMmZ0LmgiICAgICAgLyogZm9yIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzICovCisKKyNpbmNsdWRlICJjZmZlcnJzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jZmZnbG9hZAorCisKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisKKyAgdHlwZWRlZiBlbnVtICBDRkZfT3BlcmF0b3JfCisgIHsKKyAgICBjZmZfb3BfdW5rbm93biA9IDAsCisKKyAgICBjZmZfb3Bfcm1vdmV0bywKKyAgICBjZmZfb3BfaG1vdmV0bywKKyAgICBjZmZfb3Bfdm1vdmV0bywKKworICAgIGNmZl9vcF9ybGluZXRvLAorICAgIGNmZl9vcF9obGluZXRvLAorICAgIGNmZl9vcF92bGluZXRvLAorCisgICAgY2ZmX29wX3JyY3VydmV0bywKKyAgICBjZmZfb3BfaGhjdXJ2ZXRvLAorICAgIGNmZl9vcF9odmN1cnZldG8sCisgICAgY2ZmX29wX3JjdXJ2ZWxpbmUsCisgICAgY2ZmX29wX3JsaW5lY3VydmUsCisgICAgY2ZmX29wX3ZoY3VydmV0bywKKyAgICBjZmZfb3BfdnZjdXJ2ZXRvLAorCisgICAgY2ZmX29wX2ZsZXgsCisgICAgY2ZmX29wX2hmbGV4LAorICAgIGNmZl9vcF9oZmxleDEsCisgICAgY2ZmX29wX2ZsZXgxLAorCisgICAgY2ZmX29wX2VuZGNoYXIsCisKKyAgICBjZmZfb3BfaHN0ZW0sCisgICAgY2ZmX29wX3ZzdGVtLAorICAgIGNmZl9vcF9oc3RlbWhtLAorICAgIGNmZl9vcF92c3RlbWhtLAorCisgICAgY2ZmX29wX2hpbnRtYXNrLAorICAgIGNmZl9vcF9jbnRybWFzaywKKyAgICBjZmZfb3BfZG90c2VjdGlvbiwgIC8qIGRlcHJlY2F0ZWQsIGFjdHMgYXMgbm8tb3AgKi8KKworICAgIGNmZl9vcF9hYnMsCisgICAgY2ZmX29wX2FkZCwKKyAgICBjZmZfb3Bfc3ViLAorICAgIGNmZl9vcF9kaXYsCisgICAgY2ZmX29wX25lZywKKyAgICBjZmZfb3BfcmFuZG9tLAorICAgIGNmZl9vcF9tdWwsCisgICAgY2ZmX29wX3NxcnQsCisKKyAgICBjZmZfb3BfYmxlbmQsCisKKyAgICBjZmZfb3BfZHJvcCwKKyAgICBjZmZfb3BfZXhjaCwKKyAgICBjZmZfb3BfaW5kZXgsCisgICAgY2ZmX29wX3JvbGwsCisgICAgY2ZmX29wX2R1cCwKKworICAgIGNmZl9vcF9wdXQsCisgICAgY2ZmX29wX2dldCwKKyAgICBjZmZfb3Bfc3RvcmUsCisgICAgY2ZmX29wX2xvYWQsCisKKyAgICBjZmZfb3BfYW5kLAorICAgIGNmZl9vcF9vciwKKyAgICBjZmZfb3Bfbm90LAorICAgIGNmZl9vcF9lcSwKKyAgICBjZmZfb3BfaWZlbHNlLAorCisgICAgY2ZmX29wX2NhbGxzdWJyLAorICAgIGNmZl9vcF9jYWxsZ3N1YnIsCisgICAgY2ZmX29wX3JldHVybiwKKworICAgIC8qIFR5cGUgMSBvcGNvZGVzOiBpbnZhbGlkIGJ1dCBzZWVuIGluIHJlYWwgbGlmZSAqLworICAgIGNmZl9vcF9oc2J3LAorICAgIGNmZl9vcF9jbG9zZXBhdGgsCisgICAgY2ZmX29wX2NhbGxvdGhlcnN1YnIsCisgICAgY2ZmX29wX3BvcCwKKyAgICBjZmZfb3Bfc2VhYywKKyAgICBjZmZfb3Bfc2J3LAorICAgIGNmZl9vcF9zZXRjdXJyZW50cG9pbnQsCisKKyAgICAvKiBkbyBub3QgcmVtb3ZlICovCisgICAgY2ZmX29wX21heAorCisgIH0gQ0ZGX09wZXJhdG9yOworCisKKyNkZWZpbmUgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRIICAweDgwCisjZGVmaW5lIENGRl9DT1VOVF9FWEFDVCAgICAgICAgMHg0MAorI2RlZmluZSBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0sgIDB4MjAKKworICAvKiBjb3VudCB2YWx1ZXMgd2hpY2ggaGF2ZSB0aGUgYENGRl9DT1VOVF9DSEVDS19XSURUSCcgZmxhZyBzZXQgYXJlICAqLworICAvKiB1c2VkIGZvciBjaGVja2luZyB0aGUgd2lkdGggYW5kIHJlcXVlc3RlZCBudW1iZXJzIG9mIGFyZ3VtZW50cyAgICAqLworICAvKiBvbmx5OyB0aGV5IGFyZSBzZXQgdG8gemVybyBhZnRlcndhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIHRoZSBvdGhlciB0d28gZmxhZ3MgYXJlIGluZm9ybWF0aXZlIG9ubHkgYW5kIHVudXNlZCBjdXJyZW50bHkgICAgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX0J5dGUgIGNmZl9hcmd1bWVudF9jb3VudHNbXSA9CisgIHsKKyAgICAwLCAgLyogdW5rbm93biAqLworCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCB8IENGRl9DT1VOVF9FWEFDVCwgLyogcm1vdmV0byAqLworICAgIDEgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggfCBDRkZfQ09VTlRfRVhBQ1QsCisgICAgMSB8IENGRl9DT1VOVF9DSEVDS19XSURUSCB8IENGRl9DT1VOVF9FWEFDVCwKKworICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssIC8qIHJsaW5ldG8gKi8KKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisKKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLCAvKiBycmN1cnZldG8gKi8KKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisgICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisgICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKKworICAgIDEzLCAvKiBmbGV4ICovCisgICAgNywKKyAgICA5LAorICAgIDExLAorCisgICAgMCB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogZW5kY2hhciAqLworCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogaHN0ZW0gKi8KKyAgICAyIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILAorICAgIDIgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEgsCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwKKworICAgIDAgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEgsIC8qIGhpbnRtYXNrICovCisgICAgMCB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogY250cm1hc2sgKi8KKyAgICAwLCAvKiBkb3RzZWN0aW9uICovCisKKyAgICAxLCAvKiBhYnMgKi8KKyAgICAyLAorICAgIDIsCisgICAgMiwKKyAgICAxLAorICAgIDAsCisgICAgMiwKKyAgICAxLAorCisgICAgMSwgLyogYmxlbmQgKi8KKworICAgIDEsIC8qIGRyb3AgKi8KKyAgICAyLAorICAgIDEsCisgICAgMiwKKyAgICAxLAorCisgICAgMiwgLyogcHV0ICovCisgICAgMSwKKyAgICA0LAorICAgIDMsCisKKyAgICAyLCAvKiBhbmQgKi8KKyAgICAyLAorICAgIDEsCisgICAgMiwKKyAgICA0LAorCisgICAgMSwgLyogY2FsbHN1YnIgKi8KKyAgICAxLAorICAgIDAsCisKKyAgICAyLCAvKiBoc2J3ICovCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgNSwgLyogc2VhYyAqLworICAgIDQsIC8qIHNidyAqLworICAgIDIgIC8qIHNldGN1cnJlbnRwb2ludCAqLworICB9OworCisjZW5kaWYgLyogQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICBHRU5FUklDIENIQVJTVFJJTkcgUEFSU0lORyAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2ZmX2J1aWxkZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgaXMgYWN0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBjZmZfYnVpbGRlcl9pbml0KCBDRkZfQnVpbGRlciogICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBDRkZfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgaGludGluZyApCisgIHsKKyAgICBidWlsZGVyLT5wYXRoX2JlZ3VuICA9IDA7CisgICAgYnVpbGRlci0+bG9hZF9wb2ludHMgPSAxOworCisgICAgYnVpbGRlci0+ZmFjZSAgID0gZmFjZTsKKyAgICBidWlsZGVyLT5nbHlwaCAgPSBnbHlwaDsKKyAgICBidWlsZGVyLT5tZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIGlmICggZ2x5cGggKQorICAgIHsKKyAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgPSBnbHlwaC0+cm9vdC5pbnRlcm5hbC0+bG9hZGVyOworCisKKyAgICAgIGJ1aWxkZXItPmxvYWRlciAgPSBsb2FkZXI7CisgICAgICBidWlsZGVyLT5iYXNlICAgID0gJmxvYWRlci0+YmFzZS5vdXRsaW5lOworICAgICAgYnVpbGRlci0+Y3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKKyAgICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CisKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBOVUxMOworICAgICAgYnVpbGRlci0+aGludHNfZnVuY3MgICA9IE5VTEw7CisKKyAgICAgIGlmICggaGludGluZyAmJiBzaXplICkKKyAgICAgIHsKKyAgICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpc2l6ZS0+cm9vdC5pbnRlcm5hbDsKKworCisgICAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSAodm9pZCAqKWludGVybmFsLT50b3Bmb250OworICAgICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gZ2x5cGgtPnJvb3QuaW50ZXJuYWwtPmdseXBoX2hpbnRzOworICAgICAgfQorICAgIH0KKworICAgIGJ1aWxkZXItPnBvc194ID0gMDsKKyAgICBidWlsZGVyLT5wb3NfeSA9IDA7CisKKyAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueCA9IDA7CisgICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nLnkgPSAwOworICAgIGJ1aWxkZXItPmFkdmFuY2UueCAgICAgID0gMDsKKyAgICBidWlsZGVyLT5hZHZhbmNlLnkgICAgICA9IDA7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNmZl9idWlsZGVyX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIGdseXBoIGJ1aWxkZXIuICBJdHMgY29udGVudHMgY2FuIHN0aWxsIGJlIHVzZWQgICAqLworICAvKiAgICBhZnRlciB0aGUgY2FsbCwgYnV0IHRoZSBmdW5jdGlvbiBzYXZlcyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gICAgICAgKi8KKyAgLyogICAgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gZmluYWxpemUuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBjZmZfYnVpbGRlcl9kb25lKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIgKQorICB7CisgICAgQ0ZGX0dseXBoU2xvdCAgZ2x5cGggPSBidWlsZGVyLT5nbHlwaDsKKworCisgICAgaWYgKCBnbHlwaCApCisgICAgICBnbHlwaC0+cm9vdC5vdXRsaW5lID0gKmJ1aWxkZXItPmJhc2U7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNmZl9jb21wdXRlX2JpYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGVzIHRoZSBiaWFzIHZhbHVlIGluIGRlcGVuZGVuY2Ugb2YgdGhlIG51bWJlciBvZiBnbHlwaCAgICAgICAqLworICAvKiAgICBzdWJyb3V0aW5lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbl9jaGFyc3RyaW5nX3R5cGUgOjogVGhlIGBDaGFyc3RyaW5nVHlwZScgdmFsdWUgb2YgdGhlIHRvcCBESUNUICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fc3VicnMgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBnbHlwaCBzdWJyb3V0aW5lcy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYmlhcyB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0ludAorICBjZmZfY29tcHV0ZV9iaWFzKCBGVF9JbnQgICBpbl9jaGFyc3RyaW5nX3R5cGUsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIG51bV9zdWJycyApCisgIHsKKyAgICBGVF9JbnQgIHJlc3VsdDsKKworCisgICAgaWYgKCBpbl9jaGFyc3RyaW5nX3R5cGUgPT0gMSApCisgICAgICByZXN1bHQgPSAwOworICAgIGVsc2UgaWYgKCBudW1fc3VicnMgPCAxMjQwICkKKyAgICAgIHJlc3VsdCA9IDEwNzsKKyAgICBlbHNlIGlmICggbnVtX3N1YnJzIDwgMzM5MDBVICkKKyAgICAgIHJlc3VsdCA9IDExMzE7CisgICAgZWxzZQorICAgICAgcmVzdWx0ID0gMzI3NjhVOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2ZmX2RlY29kZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVjb2RlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgOjogVGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNsb3QgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGludGluZyAgIDo6IFdoZXRoZXIgaGludGluZyBpcyBhY3RpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50X21vZGUgOjogVGhlIGhpbnRpbmcgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmZl9kZWNvZGVyX2luaXQoIENGRl9EZWNvZGVyKiAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX1NpemUgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIENGRl9HbHlwaFNsb3QgICBzbG90LAorICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIGhpbnRfbW9kZSApCisgIHsKKyAgICBDRkZfRm9udCAgY2ZmID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisKKworICAgIC8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyAgICBGVF9NRU1fWkVSTyggZGVjb2Rlciwgc2l6ZW9mICggKmRlY29kZXIgKSApOworCisgICAgLyogaW5pdGlhbGl6ZSBidWlsZGVyICovCisgICAgY2ZmX2J1aWxkZXJfaW5pdCggJmRlY29kZXItPmJ1aWxkZXIsIGZhY2UsIHNpemUsIHNsb3QsIGhpbnRpbmcgKTsKKworICAgIC8qIGluaXRpYWxpemUgVHlwZTIgZGVjb2RlciAqLworICAgIGRlY29kZXItPmNmZiAgICAgICAgICA9IGNmZjsKKyAgICBkZWNvZGVyLT5udW1fZ2xvYmFscyAgPSBjZmYtPmdsb2JhbF9zdWJyc19pbmRleC5jb3VudDsKKyAgICBkZWNvZGVyLT5nbG9iYWxzICAgICAgPSBjZmYtPmdsb2JhbF9zdWJyczsKKyAgICBkZWNvZGVyLT5nbG9iYWxzX2JpYXMgPSBjZmZfY29tcHV0ZV9iaWFzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2dsb2JhbHMgKTsKKworICAgIGRlY29kZXItPmhpbnRfbW9kZSAgICA9IGhpbnRfbW9kZTsKKyAgfQorCisKKyAgLyogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc3ViZm9udCAqLworICAvKiBhbmQgdGhlIGxvY2FscyBzdWJycyBhcnJheSAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfZGVjb2Rlcl9wcmVwYXJlKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCApCisgIHsKKyAgICBDRkZfQnVpbGRlciAgKmJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKKyAgICBDRkZfRm9udCAgICAgIGNmZiAgICAgPSAoQ0ZGX0ZvbnQpYnVpbGRlci0+ZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBDRkZfU3ViRm9udCAgIHN1YiAgICAgPSAmY2ZmLT50b3BfZm9udDsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CisKKworICAgIC8qIG1hbmFnZSBDSUQgZm9udHMgKi8KKyAgICBpZiAoIGNmZi0+bnVtX3N1YmZvbnRzICkKKyAgICB7CisgICAgICBGVF9CeXRlICBmZF9pbmRleCA9IGNmZl9mZF9zZWxlY3RfZ2V0KCAmY2ZmLT5mZF9zZWxlY3QsIGdseXBoX2luZGV4ICk7CisKKworICAgICAgaWYgKCBmZF9pbmRleCA+PSBjZmYtPm51bV9zdWJmb250cyApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wcmVwYXJlOiBpbnZhbGlkIENJRCBzdWJmb250IGluZGV4XG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0UzKCggIiAgaW4gc3ViZm9udCAlZDpcbiIsIGZkX2luZGV4ICkpOworCisgICAgICBzdWIgPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XTsKKworICAgICAgaWYgKCBidWlsZGVyLT5oaW50c19mdW5jcyAmJiBzaXplICkKKyAgICAgIHsKKyAgICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpc2l6ZS0+cm9vdC5pbnRlcm5hbDsKKworCisgICAgICAgIC8qIGZvciBDRkZzIHdpdGhvdXQgc3ViZm9udHMsIHRoaXMgdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBzZXQgKi8KKyAgICAgICAgYnVpbGRlci0+aGludHNfZ2xvYmFscyA9ICh2b2lkICopaW50ZXJuYWwtPnN1YmZvbnRzW2ZkX2luZGV4XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkZWNvZGVyLT5udW1fbG9jYWxzICAgID0gc3ViLT5sb2NhbF9zdWJyc19pbmRleC5jb3VudDsKKyAgICBkZWNvZGVyLT5sb2NhbHMgICAgICAgID0gc3ViLT5sb2NhbF9zdWJyczsKKyAgICBkZWNvZGVyLT5sb2NhbHNfYmlhcyAgID0gY2ZmX2NvbXB1dGVfYmlhcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5jZmYtPnRvcF9mb250LmZvbnRfZGljdC5jaGFyc3RyaW5nX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2xvY2FscyApOworCisgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggICA9IHN1Yi0+cHJpdmF0ZV9kaWN0LmRlZmF1bHRfd2lkdGg7CisgICAgZGVjb2Rlci0+bm9taW5hbF93aWR0aCA9IHN1Yi0+cHJpdmF0ZV9kaWN0Lm5vbWluYWxfd2lkdGg7CisKKyAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgPSBzdWI7ICAgICAvKiBmb3IgQWRvYmUncyBDRkYgaGFuZGxlciAqLworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgYGNvdW50JyBtb3JlIHBvaW50cyAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX2NoZWNrX3BvaW50cyggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGNvdW50ICkKKyAgeworICAgIHJldHVybiBGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMoIGJ1aWxkZXItPmxvYWRlciwgY291bnQsIDAgKTsKKyAgfQorCisKKyAgLyogYWRkIGEgbmV3IHBvaW50LCBkbyBub3QgY2hlY2sgc3BhY2UgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgIGZsYWcgKQorICB7CisgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSBidWlsZGVyLT5jdXJyZW50OworCisKKyAgICBpZiAoIGJ1aWxkZXItPmxvYWRfcG9pbnRzICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IqICBwb2ludCAgID0gb3V0bGluZS0+cG9pbnRzICsgb3V0bGluZS0+bl9wb2ludHM7CisgICAgICBGVF9CeXRlKiAgICBjb250cm9sID0gKEZUX0J5dGUqKW91dGxpbmUtPnRhZ3MgKyBvdXRsaW5lLT5uX3BvaW50czsKKworI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgIENGRl9Ecml2ZXIgIGRyaXZlciAgPSAoQ0ZGX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggYnVpbGRlci0+ZmFjZSApOworCisKKyAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSApCisgICAgICB7CisgICAgICAgIHBvaW50LT54ID0geCA+PiAxNjsKKyAgICAgICAgcG9pbnQtPnkgPSB5ID4+IDE2OworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisgICAgICAgIC8qIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzIHVzZXMgMTYuMTYgY29vcmRpbmF0ZXMgKi8KKyAgICAgICAgcG9pbnQtPnggPSB4ID4+IDEwOworICAgICAgICBwb2ludC0+eSA9IHkgPj4gMTA7CisgICAgICB9CisgICAgICAqY29udHJvbCA9IChGVF9CeXRlKSggZmxhZyA/IEZUX0NVUlZFX1RBR19PTiA6IEZUX0NVUlZFX1RBR19DVUJJQyApOworICAgIH0KKworICAgIG91dGxpbmUtPm5fcG9pbnRzKys7CisgIH0KKworCisgIC8qIGNoZWNrIHNwYWNlIGZvciBhIG5ldyBvbi1jdXJ2ZSBwb2ludCwgdGhlbiBhZGQgaXQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9idWlsZGVyX2FkZF9wb2ludDEoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICBlcnJvciA9IGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogY2hlY2sgc3BhY2UgZm9yIGEgbmV3IGNvbnRvdXIsIHRoZW4gYWRkIGl0ICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfYnVpbGRlcl9hZGRfY29udG91ciggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICkKKyAgeworICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gYnVpbGRlci0+Y3VycmVudDsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisKKworICAgIGlmICggIWJ1aWxkZXItPmxvYWRfcG9pbnRzICkKKyAgICB7CisgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzKys7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBidWlsZGVyLT5sb2FkZXIsIDAsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSA9CisgICAgICAgICAgKHNob3J0KSggb3V0bGluZS0+bl9wb2ludHMgLSAxICk7CisKKyAgICAgIG91dGxpbmUtPm5fY29udG91cnMrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGlmIGEgcGF0aCB3YXMgYmVndW4sIGFkZCBpdHMgZmlyc3Qgb24tY3VydmUgcG9pbnQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiB0ZXN0IHdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIGEgbmV3IGNvbnRvdXIgKi8KKyAgICBpZiAoICFidWlsZGVyLT5wYXRoX2JlZ3VuICkKKyAgICB7CisgICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMTsKKyAgICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfYWRkX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZXJyb3IgPSBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjbG9zZSB0aGUgY3VycmVudCBjb250b3VyICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIENGRl9CdWlsZGVyKiAgYnVpbGRlciApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisgICAgRlRfSW50ICAgICAgIGZpcnN0OworCisKKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICAgIHJldHVybjsKKworICAgIGZpcnN0ID0gb3V0bGluZS0+bl9jb250b3VycyA8PSAxCisgICAgICAgICAgICA/IDAgOiBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMl0gKyAxOworCisgICAgLyogV2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgbGFzdCBwb2ludCBpbiB0aGUgcGF0aCBpZiBpdCAqLworICAgIC8qIGlzIGxvY2F0ZWQgb24gdGhlIGZpcnN0IHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID4gMSApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgcDEgICAgICA9IG91dGxpbmUtPnBvaW50cyArIGZpcnN0OworICAgICAgRlRfVmVjdG9yKiAgcDIgICAgICA9IG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKyAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKworCisgICAgICAvKiBgZGVsZXRlJyBsYXN0IHBvaW50IG9ubHkgaWYgaXQgY29pbmNpZGVzIHdpdGggdGhlIGZpcnN0ICAgICovCisgICAgICAvKiBwb2ludCBhbmQgaWYgaXQgaXMgbm90IGEgY29udHJvbCBwb2ludCAod2hpY2ggY2FuIGhhcHBlbikuICovCisgICAgICBpZiAoIHAxLT54ID09IHAyLT54ICYmIHAxLT55ID09IHAyLT55ICkKKyAgICAgICAgaWYgKCAqY29udHJvbCA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzLS07CisgICAgfQorCisgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgeworICAgICAgLyogRG9uJ3QgYWRkIGNvbnRvdXJzIG9ubHkgY29uc2lzdGluZyBvZiBvbmUgcG9pbnQsIGkuZS4sICovCisgICAgICAvKiBjaGVjayB3aGV0aGVyIGJlZ2luIHBvaW50IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZS4gKi8KKyAgICAgIGlmICggZmlyc3QgPT0gb3V0bGluZS0+bl9wb2ludHMgLSAxICkKKyAgICAgIHsKKyAgICAgICAgb3V0bGluZS0+bl9jb250b3Vycy0tOworICAgICAgICBvdXRsaW5lLT5uX3BvaW50cy0tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV0gPQorICAgICAgICAgIChzaG9ydCkoIG91dGxpbmUtPm5fcG9pbnRzIC0gMSApOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9JbnQgKQorICBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBDRkZfRm9udCAgY2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgY2hhcmNvZGUgKQorICB7CisgICAgRlRfVUludCAgICBuOworICAgIEZUX1VTaG9ydCAgZ2x5cGhfc2lkOworCisKKyAgICAvKiBDSUQta2V5ZWQgZm9udHMgZG9uJ3QgaGF2ZSBnbHlwaCBuYW1lcyAqLworICAgIGlmICggIWNmZi0+Y2hhcnNldC5zaWRzICkKKyAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIHJhbmdlIG9mIHN0YW5kYXJkIGNoYXIgY29kZSAqLworICAgIGlmICggY2hhcmNvZGUgPCAwIHx8IGNoYXJjb2RlID4gMjU1ICkKKyAgICAgIHJldHVybiAtMTsKKworICAgIC8qIEdldCBjb2RlIHRvIFNJRCBtYXBwaW5nIGZyb20gYGNmZl9zdGFuZGFyZF9lbmNvZGluZycuICovCisgICAgZ2x5cGhfc2lkID0gY2ZmX2dldF9zdGFuZGFyZF9lbmNvZGluZyggKEZUX1VJbnQpY2hhcmNvZGUgKTsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgY2ZmLT5udW1fZ2x5cGhzOyBuKysgKQorICAgIHsKKyAgICAgIGlmICggY2ZmLT5jaGFyc2V0LnNpZHNbbl0gPT0gZ2x5cGhfc2lkICkKKyAgICAgICAgcmV0dXJuIChGVF9JbnQpbjsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfZ2V0X2dseXBoX2RhdGEoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIGxlbmd0aCApCisgIHsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgLyogRm9yIGluY3JlbWVudGFsIGZvbnRzIGdldCB0aGUgY2hhcmFjdGVyIGRhdGEgdXNpbmcgdGhlICovCisgICAgLyogY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQorICAgIHsKKyAgICAgIEZUX0RhdGEgICBkYXRhOworICAgICAgRlRfRXJyb3IgIGVycm9yID0KKyAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmdldF9nbHlwaF9kYXRhKAorICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsICZkYXRhICk7CisKKworICAgICAgKnBvaW50ZXIgPSAoRlRfQnl0ZSopZGF0YS5wb2ludGVyOworICAgICAgKmxlbmd0aCAgPSAoRlRfVUxvbmcpZGF0YS5sZW5ndGg7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgIHsKKyAgICAgIENGRl9Gb250ICBjZmYgID0gKENGRl9Gb250KShmYWNlLT5leHRyYS5kYXRhKTsKKworCisgICAgICByZXR1cm4gY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50KCAmY2ZmLT5jaGFyc3RyaW5nc19pbmRleCwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLCBsZW5ndGggKTsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmZl9mcmVlX2dseXBoX2RhdGEoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGxlbmd0aCApCisgIHsKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIEZUX1VOVVNFRCggbGVuZ3RoICk7CisjZW5kaWYKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAvKiBGb3IgaW5jcmVtZW50YWwgZm9udHMgZ2V0IHRoZSBjaGFyYWN0ZXIgZGF0YSB1c2luZyB0aGUgKi8KKyAgICAvKiBjYWxsYmFjayBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgeworICAgICAgRlRfRGF0YSAgZGF0YTsKKworCisgICAgICBkYXRhLnBvaW50ZXIgPSAqcG9pbnRlcjsKKyAgICAgIGRhdGEubGVuZ3RoICA9IChGVF9JbnQpbGVuZ3RoOworCisgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT5mcmVlX2dseXBoX2RhdGEoCisgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LCAmZGF0YSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworCisgICAgeworICAgICAgQ0ZGX0ZvbnQgIGNmZiA9IChDRkZfRm9udCkoZmFjZS0+ZXh0cmEuZGF0YSk7CisKKworICAgICAgY2ZmX2luZGV4X2ZvcmdldF9lbGVtZW50KCAmY2ZmLT5jaGFyc3RyaW5nc19pbmRleCwgcG9pbnRlciApOworICAgIH0KKyAgfQorCisKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9vcGVyYXRvcl9zZWFjKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIGFzYiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgYWR4LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICBhZHksCisgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGJjaGFyLAorICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBhY2hhciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOworICAgIEZUX0ludCAgICAgICAgYmNoYXJfaW5kZXgsIGFjaGFyX2luZGV4OworICAgIFRUX0ZhY2UgICAgICAgZmFjZSA9IGRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKyAgICBGVF9WZWN0b3IgICAgIGxlZnRfYmVhcmluZywgYWR2YW5jZTsKKyAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmc7CisgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbjsKKyAgICBGVF9Qb3MgICAgICAgIGdseXBoX3dpZHRoOworCisKKyAgICBpZiAoIGRlY29kZXItPnNlYWMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggImNmZl9vcGVyYXRvcl9zZWFjOiBpbnZhbGlkIG5lc3RlZCBzZWFjXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICB9CisKKyAgICBhZHggKz0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueDsKKyAgICBhZHkgKz0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHZhbGlkIGNoYXJzZXRzLiAgICAgICAgKi8KKyAgICAvKiBUaGV5IHVzZSB0aGUgY2hhcmFjdGVyIGNvZGUsIG5vdCB0aGUgZ2x5cGggaW5kZXgsIGluIHRoaXMgY2FzZS4gKi8KKyAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgeworICAgICAgYmNoYXJfaW5kZXggPSBiY2hhcjsKKyAgICAgIGFjaGFyX2luZGV4ID0gYWNoYXI7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgeworICAgICAgQ0ZGX0ZvbnQgY2ZmID0gKENGRl9Gb250KShmYWNlLT5leHRyYS5kYXRhKTsKKworCisgICAgICBiY2hhcl9pbmRleCA9IGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIGNmZiwgYmNoYXIgKTsKKyAgICAgIGFjaGFyX2luZGV4ID0gY2ZmX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSggY2ZmLCBhY2hhciApOworICAgIH0KKworICAgIGlmICggYmNoYXJfaW5kZXggPCAwIHx8IGFjaGFyX2luZGV4IDwgMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiY2ZmX29wZXJhdG9yX3NlYWM6IgorICAgICAgICAgICAgICAgICAiIGludmFsaWQgc2VhYyBjaGFyYWN0ZXIgY29kZSBhcmd1bWVudHNcbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICAgIH0KKworICAgIC8qIElmIHdlIGFyZSB0cnlpbmcgdG8gbG9hZCBhIGNvbXBvc2l0ZSBnbHlwaCwgZG8gbm90IGxvYWQgdGhlICovCisgICAgLyogYWNjZW50IGNoYXJhY3RlciBhbmQgcmV0dXJuIHRoZSBhcnJheSBvZiBzdWJnbHlwaHMuICAgICAgICAgKi8KKyAgICBpZiAoIGJ1aWxkZXItPm5vX3JlY3Vyc2UgKQorICAgIHsKKyAgICAgIEZUX0dseXBoU2xvdCAgICBnbHlwaCAgPSAoRlRfR2x5cGhTbG90KWJ1aWxkZXItPmdseXBoOworICAgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IGdseXBoLT5pbnRlcm5hbC0+bG9hZGVyOworICAgICAgRlRfU3ViR2x5cGggICAgIHN1Ymc7CisKKworICAgICAgLyogcmVhbGxvY2F0ZSBzdWJnbHlwaCBhcnJheSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMoIGxvYWRlciwgMiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgc3ViZyA9IGxvYWRlci0+Y3VycmVudC5zdWJnbHlwaHM7CisKKyAgICAgIC8qIHN1YmdseXBoIDAgPSBiYXNlIGNoYXJhY3RlciAqLworICAgICAgc3ViZy0+aW5kZXggPSBiY2hhcl9pbmRleDsKKyAgICAgIHN1YmctPmZsYWdzID0gRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMgfAorICAgICAgICAgICAgICAgICAgICBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTOworICAgICAgc3ViZy0+YXJnMSAgPSAwOworICAgICAgc3ViZy0+YXJnMiAgPSAwOworICAgICAgc3ViZysrOworCisgICAgICAvKiBzdWJnbHlwaCAxID0gYWNjZW50IGNoYXJhY3RlciAqLworICAgICAgc3ViZy0+aW5kZXggPSBhY2hhcl9pbmRleDsKKyAgICAgIHN1YmctPmZsYWdzID0gRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVM7CisgICAgICBzdWJnLT5hcmcxICA9IChGVF9JbnQpKCBhZHggPj4gMTYgKTsKKyAgICAgIHN1YmctPmFyZzIgID0gKEZUX0ludCkoIGFkeSA+PiAxNiApOworCisgICAgICAvKiBzZXQgdXAgcmVtYWluaW5nIGdseXBoIGZpZWxkcyAqLworICAgICAgZ2x5cGgtPm51bV9zdWJnbHlwaHMgPSAyOworICAgICAgZ2x5cGgtPnN1YmdseXBocyAgICAgPSBsb2FkZXItPmJhc2Uuc3ViZ2x5cGhzOworICAgICAgZ2x5cGgtPmZvcm1hdCAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFOworCisgICAgICBsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBocyA9IDI7CisgICAgfQorCisgICAgRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSggYnVpbGRlci0+bG9hZGVyICk7CisKKyAgICAvKiBGaXJzdCBsb2FkIGBiY2hhcicgaW4gYnVpbGRlciAqLworICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCAoRlRfVUludCliY2hhcl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAvKiB0aGUgc2VhYyBvcGVyYXRvciBtdXN0IG5vdCBiZSBuZXN0ZWQgKi8KKyAgICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOworICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggZGVjb2RlciwgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuICk7CisgICAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CisKKyAgICAgIGNmZl9mcmVlX2dseXBoX2RhdGEoIGZhY2UsICZjaGFyc3RyaW5nLCBjaGFyc3RyaW5nX2xlbiApOworCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFNhdmUgdGhlIGxlZnQgYmVhcmluZywgYWR2YW5jZSBhbmQgZ2x5cGggd2lkdGggb2YgdGhlIGJhc2UgKi8KKyAgICAvKiBjaGFyYWN0ZXIgYXMgdGhleSB3aWxsIGJlIGVyYXNlZCBieSB0aGUgbmV4dCBsb2FkLiAgICAgICAgICovCisKKyAgICBsZWZ0X2JlYXJpbmcgPSBidWlsZGVyLT5sZWZ0X2JlYXJpbmc7CisgICAgYWR2YW5jZSAgICAgID0gYnVpbGRlci0+YWR2YW5jZTsKKyAgICBnbHlwaF93aWR0aCAgPSBkZWNvZGVyLT5nbHlwaF93aWR0aDsKKworICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gMDsKKyAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IDA7CisKKyAgICBidWlsZGVyLT5wb3NfeCA9IGFkeCAtIGFzYjsKKyAgICBidWlsZGVyLT5wb3NfeSA9IGFkeTsKKworICAgIC8qIE5vdyBsb2FkIGBhY2hhcicgb24gdG9wIG9mIHRoZSBiYXNlIG91dGxpbmUuICovCisgICAgZXJyb3IgPSBjZmZfZ2V0X2dseXBoX2RhdGEoIGZhY2UsIChGVF9VSW50KWFjaGFyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywgJmNoYXJzdHJpbmdfbGVuICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLworICAgICAgZGVjb2Rlci0+c2VhYyA9IFRSVUU7CisgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBkZWNvZGVyLCBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKyAgICAgIGRlY29kZXItPnNlYWMgPSBGQUxTRTsKKworICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsIGNoYXJzdHJpbmdfbGVuICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgbGVmdCBzaWRlIGJlYXJpbmcsIGFkdmFuY2UgYW5kIGdseXBoIHdpZHRoICovCisgICAgLyogb2YgdGhlIGJhc2UgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nID0gbGVmdF9iZWFyaW5nOworICAgIGJ1aWxkZXItPmFkdmFuY2UgICAgICA9IGFkdmFuY2U7CisgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggID0gZ2x5cGhfd2lkdGg7CisKKyAgICBidWlsZGVyLT5wb3NfeCA9IDA7CisgICAgYnVpbGRlci0+cG9zX3kgPSAwOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQYXJzZXMgYSBnaXZlbiBUeXBlIDIgY2hhcnN0cmluZ3MgcHJvZ3JhbS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWNvZGVyICAgICAgICAgOjogVGhlIGN1cnJlbnQgVHlwZSAxIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyc3RyaW5nX2Jhc2UgOjogVGhlIGJhc2Ugb2YgdGhlIGNoYXJzdHJpbmcgc3RyZWFtLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4gKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOworICAgIENGRl9EZWNvZGVyX1pvbmUqICB6b25lOworICAgIEZUX0J5dGUqICAgICAgICAgICBpcDsKKyAgICBGVF9CeXRlKiAgICAgICAgICAgbGltaXQ7CisgICAgQ0ZGX0J1aWxkZXIqICAgICAgIGJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKKyAgICBGVF9Qb3MgICAgICAgICAgICAgeCwgeTsKKyAgICBGVF9GaXhlZCAgICAgICAgICAgc2VlZDsKKyAgICBGVF9GaXhlZCogICAgICAgICAgc3RhY2s7CisgICAgRlRfSW50ICAgICAgICAgICAgIGNoYXJzdHJpbmdfdHlwZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlOworCisgICAgVDJfSGludHNfRnVuY3MgICAgIGhpbnRlcjsKKworCisgICAgLyogc2V0IGRlZmF1bHQgd2lkdGggKi8KKyAgICBkZWNvZGVyLT5udW1faGludHMgID0gMDsKKyAgICBkZWNvZGVyLT5yZWFkX3dpZHRoID0gMTsKKworICAgIC8qIGNvbXB1dGUgcmFuZG9tIHNlZWQgZnJvbSBzdGFjayBhZGRyZXNzIG9mIHBhcmFtZXRlciAqLworICAgIHNlZWQgPSAoRlRfRml4ZWQpKCAoIChGVF9PZmZzZXQpKGNoYXIqKSZzZWVkICAgICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNoYXIqKSZkZWNvZGVyICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNoYXIqKSZjaGFyc3RyaW5nX2Jhc2UgKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxPTkdfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgc2VlZCA9ICggc2VlZCBeICggc2VlZCA+PiAxMCApIF4gKCBzZWVkID4+IDIwICkgKSAmIDB4RkZGRkw7CisgICAgaWYgKCBzZWVkID09IDAgKQorICAgICAgc2VlZCA9IDB4NzM4NDsKKworICAgIC8qIGluaXRpYWxpemUgdGhlIGRlY29kZXIgKi8KKyAgICBkZWNvZGVyLT50b3AgID0gZGVjb2Rlci0+c3RhY2s7CisgICAgZGVjb2Rlci0+em9uZSA9IGRlY29kZXItPnpvbmVzOworICAgIHpvbmUgICAgICAgICAgPSBkZWNvZGVyLT56b25lczsKKyAgICBzdGFjayAgICAgICAgID0gZGVjb2Rlci0+dG9wOworCisgICAgaGludGVyID0gKFQyX0hpbnRzX0Z1bmNzKWJ1aWxkZXItPmhpbnRzX2Z1bmNzOworCisgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7CisKKyAgICB6b25lLT5iYXNlICAgICAgICAgICA9IGNoYXJzdHJpbmdfYmFzZTsKKyAgICBsaW1pdCA9IHpvbmUtPmxpbWl0ICA9IGNoYXJzdHJpbmdfYmFzZSArIGNoYXJzdHJpbmdfbGVuOworICAgIGlwICAgID0gem9uZS0+Y3Vyc29yID0gem9uZS0+YmFzZTsKKworICAgIGVycm9yID0gRlRfRXJyX09rOworCisgICAgeCA9IGJ1aWxkZXItPnBvc194OworICAgIHkgPSBidWlsZGVyLT5wb3NfeTsKKworICAgIC8qIGJlZ2luIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uLCBpZiBhbnkgKi8KKyAgICBpZiAoIGhpbnRlciApCisgICAgICBoaW50ZXItPm9wZW4oIGhpbnRlci0+aGludHMgKTsKKworICAgIC8qIG5vdyBleGVjdXRlIGxvb3AgKi8KKyAgICB3aGlsZSAoIGlwIDwgbGltaXQgKQorICAgIHsKKyAgICAgIENGRl9PcGVyYXRvciAgb3A7CisgICAgICBGVF9CeXRlICAgICAgIHY7CisKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogRGVjb2RlIG9wZXJhdG9yIG9yIG9wZXJhbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgdiA9ICppcCsrOworICAgICAgaWYgKCB2ID49IDMyIHx8IHYgPT0gMjggKQorICAgICAgeworICAgICAgICBGVF9JbnQgICAgc2hpZnQgPSAxNjsKKyAgICAgICAgRlRfSW50MzIgIHZhbDsKKworCisgICAgICAgIC8qIHRoaXMgaXMgYW4gb3BlcmFuZCwgcHVzaCBpdCBvbiB0aGUgc3RhY2sgKi8KKworICAgICAgICAvKiBpZiB3ZSB1c2Ugc2hpZnRzLCBhbGwgY29tcHV0YXRpb25zIGFyZSBkb25lIHdpdGggdW5zaWduZWQgKi8KKyAgICAgICAgLyogdmFsdWVzOyB0aGUgY29udmVyc2lvbiB0byBhIHNpZ25lZCB2YWx1ZSBpcyB0aGUgbGFzdCBzdGVwICovCisgICAgICAgIGlmICggdiA9PSAyOCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGlwICsgMSA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB2YWwgPSAoRlRfU2hvcnQpKCAoIChGVF9VU2hvcnQpaXBbMF0gPDwgOCApIHwgaXBbMV0gKTsKKyAgICAgICAgICBpcCArPSAyOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCB2IDwgMjQ3ICkKKyAgICAgICAgICB2YWwgPSAoRlRfSW50MzIpdiAtIDEzOTsKKyAgICAgICAgZWxzZSBpZiAoIHYgPCAyNTEgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBpcCA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB2YWwgPSAoIChGVF9JbnQzMil2IC0gMjQ3ICkgKiAyNTYgKyAqaXArKyArIDEwODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggdiA8IDI1NSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGlwID49IGxpbWl0ICkKKyAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgIHZhbCA9IC0oIChGVF9JbnQzMil2IC0gMjUxICkgKiAyNTYgLSAqaXArKyAtIDEwODsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGlwICsgMyA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB2YWwgPSAoRlRfSW50MzIpKCAoIChGVF9VSW50MzIpaXBbMF0gPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWlwWzFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMilpcFsyXSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpaXBbM10gICAgICAgICApOworICAgICAgICAgIGlwICAgICs9IDQ7CisgICAgICAgICAgaWYgKCBjaGFyc3RyaW5nX3R5cGUgPT0gMiApCisgICAgICAgICAgICBzaGlmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWNvZGVyLT50b3AgLSBzdGFjayA+PSBDRkZfTUFYX09QRVJBTkRTICkKKyAgICAgICAgICBnb3RvIFN0YWNrX092ZXJmbG93OworCisgICAgICAgIHZhbCAgICAgICAgICAgICA9IChGVF9JbnQzMikoIChGVF9VSW50MzIpdmFsIDw8IHNoaWZ0ICk7CisgICAgICAgICpkZWNvZGVyLT50b3ArKyA9IHZhbDsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGlmICggISggdmFsICYgMHhGRkZGTCApICkKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVoZCIsIChGVF9TaG9ydCkoIChGVF9VSW50MzIpdmFsID4+IDE2ICkgKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICUuMmYiLCB2YWwgLyA2NTUzNi4wICkpOworI2VuZGlmCisKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IG5vcm1hbGx5IGFyZ3VtZW50cyBhcmUgdG8gYmUgdGFrZW4gKi8KKyAgICAgICAgLyogZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gIEhvd2V2ZXIsIHRoaXMgc2VlbXMgbm90IHRvIGJlICAgKi8KKyAgICAgICAgLyogY29ycmVjdCwgYXQgbGVhc3QgZm9yIEFjcm9yZWFkIDcuMC44IG9uIEdOVS9MaW51eDogSXQgcG9wcyB0aGUgKi8KKyAgICAgICAgLyogYXJndW1lbnRzIHNpbWlsYXIgdG8gYSBQUyBpbnRlcnByZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBGVF9GaXhlZCogIGFyZ3MgICAgID0gZGVjb2Rlci0+dG9wOworICAgICAgICBGVF9JbnQgICAgIG51bV9hcmdzID0gKEZUX0ludCkoIGFyZ3MgLSBkZWNvZGVyLT5zdGFjayApOworICAgICAgICBGVF9JbnQgICAgIHJlcV9hcmdzOworCisKKyAgICAgICAgLyogZmluZCBvcGVyYXRvciAqLworICAgICAgICBvcCA9IGNmZl9vcF91bmtub3duOworCisgICAgICAgIHN3aXRjaCAoIHYgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9oc3RlbTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgIG9wID0gY2ZmX29wX3ZzdGVtOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgb3AgPSBjZmZfb3Bfdm1vdmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgIG9wID0gY2ZmX29wX3JsaW5ldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9obGluZXRvOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgb3AgPSBjZmZfb3BfdmxpbmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgIG9wID0gY2ZmX29wX3JyY3VydmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA5OgorICAgICAgICAgIG9wID0gY2ZmX29wX2Nsb3NlcGF0aDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9jYWxsc3VicjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9yZXR1cm47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBpcCA+PSBsaW1pdCApCisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgdiA9ICppcCsrOworCisgICAgICAgICAgICBzd2l0Y2ggKCB2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZG90c2VjdGlvbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6IC8qIHRoaXMgaXMgYWN0dWFsbHkgdGhlIFR5cGUxIHZzdGVtMyBvcGVyYXRvciAqLworICAgICAgICAgICAgICBvcCA9IGNmZl9vcF92c3RlbTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IC8qIHRoaXMgaXMgYWN0dWFsbHkgdGhlIFR5cGUxIGhzdGVtMyBvcGVyYXRvciAqLworICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9oc3RlbTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2FuZDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX29yOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfbm90OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc2VhYzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX3NidzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX3N0b3JlOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfYWJzOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2FkZDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9zdWI7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZGl2OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2xvYWQ7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfbmVnOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2VxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2NhbGxvdGhlcnN1YnI7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfcG9wOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2Ryb3A7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfcHV0OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjE6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2dldDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9pZmVsc2U7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfcmFuZG9tOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX211bDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9zcXJ0OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2R1cDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI4OgorICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9leGNoOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2luZGV4OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzA6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX3JvbGw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzMzoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc2V0Y3VycmVudHBvaW50OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzQ6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2hmbGV4OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzU6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2ZsZXg7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzNjoKKyAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfaGZsZXgxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzc6CisgICAgICAgICAgICAgIG9wID0gY2ZmX29wX2ZsZXgxOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoMTIsICVkKVxuIiwgdiApKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEzOgorICAgICAgICAgIG9wID0gY2ZmX29wX2hzYnc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgb3AgPSBjZmZfb3BfZW5kY2hhcjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9ibGVuZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9oc3RlbWhtOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE5OgorICAgICAgICAgIG9wID0gY2ZmX29wX2hpbnRtYXNrOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgIG9wID0gY2ZmX29wX2NudHJtYXNrOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIxOgorICAgICAgICAgIG9wID0gY2ZmX29wX3Jtb3ZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaG1vdmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICBvcCA9IGNmZl9vcF92c3RlbWhtOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI0OgorICAgICAgICAgIG9wID0gY2ZmX29wX3JjdXJ2ZWxpbmU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgb3AgPSBjZmZfb3BfcmxpbmVjdXJ2ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNjoKKyAgICAgICAgICBvcCA9IGNmZl9vcF92dmN1cnZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaGhjdXJ2ZXRvOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI5OgorICAgICAgICAgIG9wID0gY2ZmX29wX2NhbGxnc3VicjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzMDoKKyAgICAgICAgICBvcCA9IGNmZl9vcF92aGN1cnZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaHZjdXJ2ZXRvOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoJWQpXG4iLCB2ICkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfdW5rbm93biApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogY2hlY2sgYXJndW1lbnRzICovCisgICAgICAgIHJlcV9hcmdzID0gY2ZmX2FyZ3VtZW50X2NvdW50c1tvcF07CisgICAgICAgIGlmICggcmVxX2FyZ3MgJiBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBudW1fYXJncyA+IDAgJiYgZGVjb2Rlci0+cmVhZF93aWR0aCApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSWYgYG5vbWluYWxfd2lkdGgnIGlzIG5vbi16ZXJvLCB0aGUgbnVtYmVyIGlzIHJlYWxseSBhICAgICAgKi8KKyAgICAgICAgICAgIC8qIGRpZmZlcmVuY2UgYWdhaW5zdCBgbm9taW5hbF93aWR0aCcuICBFbHNlLCB0aGUgbnVtYmVyIGhlcmUgICovCisgICAgICAgICAgICAvKiBpcyB0cnVseSBhIHdpZHRoLCBub3QgYSBkaWZmZXJlbmNlIGFnYWluc3QgYG5vbWluYWxfd2lkdGgnLiAqLworICAgICAgICAgICAgLyogSWYgdGhlIGZvbnQgZG9lcyBub3Qgc2V0IGBub21pbmFsX3dpZHRoJywgdGhlbiAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIGBub21pbmFsX3dpZHRoJyBkZWZhdWx0cyB0byB6ZXJvLCBhbmQgc28gd2UgY2FuIHNldCAgICAgICAgICovCisgICAgICAgICAgICAvKiBgZ2x5cGhfd2lkdGgnIHRvIGBub21pbmFsX3dpZHRoJyBwbHVzIG51bWJlciBvbiB0aGUgc3RhY2sgICAqLworICAgICAgICAgICAgLyogLS0gZm9yIGVpdGhlciBjYXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgRlRfSW50ICBzZXRfd2lkdGhfb2s7CisKKworICAgICAgICAgICAgc3dpdGNoICggb3AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBjZmZfb3BfaG1vdmV0bzoKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX3Ztb3ZldG86CisgICAgICAgICAgICAgIHNldF93aWR0aF9vayA9IG51bV9hcmdzICYgMjsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtOgorICAgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06CisgICAgICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbWhtOgorICAgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW1obToKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX3Jtb3ZldG86CisgICAgICAgICAgICBjYXNlIGNmZl9vcF9oaW50bWFzazoKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgorICAgICAgICAgICAgICBzZXRfd2lkdGhfb2sgPSBudW1fYXJncyAmIDE7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIGNmZl9vcF9lbmRjaGFyOgorICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHdpZHRoIHNwZWNpZmllZCBmb3IgZW5kY2hhciwgd2UgZWl0aGVyIGhhdmUgKi8KKyAgICAgICAgICAgICAgLyogMSBhcmd1bWVudCBvciA1IGFyZ3VtZW50cy4gIFdlIGxpa2UgdG8gYXJndWUuICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIHNldF93aWR0aF9vayA9ICggbnVtX2FyZ3MgPT0gNSApIHx8ICggbnVtX2FyZ3MgPT0gMSApOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc2V0X3dpZHRoX29rICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBkZWNvZGVyLT5ub21pbmFsX3dpZHRoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhY2tbMF0gPj4gMTYgKTsKKworICAgICAgICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRoZSBhZHZhbmNlIHdpZHRoOyBzdG9wIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8qIENvbnN1bWVkIGFuIGFyZ3VtZW50LiAqLworICAgICAgICAgICAgICBudW1fYXJncy0tOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGRlY29kZXItPnJlYWRfd2lkdGggPSAwOworICAgICAgICAgIHJlcV9hcmdzICAgICAgICAgICAgPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmVxX2FyZ3MgJj0gMHgwMDBGOworICAgICAgICBpZiAoIG51bV9hcmdzIDwgcmVxX2FyZ3MgKQorICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworICAgICAgICBhcmdzICAgICAtPSByZXFfYXJnczsKKyAgICAgICAgbnVtX2FyZ3MgLT0gcmVxX2FyZ3M7CisKKyAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgYGFyZ3MnIHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlICAqLworICAgICAgICAvKiBvcGVyYW5kIGluIGNhc2UgYHJlcV9hcmdzJyBpc24ndCB6ZXJvLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlICovCisgICAgICAgIC8qIHRvIGFkanVzdCBgYXJncycgbWFudWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAvKiBOb3RlIHRoYXQgd2Ugb25seSBwb3AgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIHdoaWNoIHdlICAgICovCisgICAgICAgIC8qIHJlYWxseSBuZWVkIGFuZCBjYW4gZGlnZXN0IHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGluIGNhc2UgKi8KKyAgICAgICAgLyogb2Ygc3VwZXJmbHVvdXMgc3RhY2sgZWxlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbToKKyAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06CisgICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtaG06CisgICAgICAgIGNhc2UgY2ZmX29wX3ZzdGVtaG06CisgICAgICAgICAgLyogdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgYWx3YXlzIGV2ZW4gaGVyZSAqLworICAgICAgICAgIEZUX1RSQUNFNCgoCisgICAgICAgICAgICAgIG9wID09IGNmZl9vcF9oc3RlbSAgID8gIiBoc3RlbVxuIiAgIDoKKyAgICAgICAgICAgICggb3AgPT0gY2ZmX29wX3ZzdGVtICAgPyAiIHZzdGVtXG4iICAgOgorICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW1obSA/ICIgaHN0ZW1obVxuIiA6ICIgdnN0ZW1obVxuIiApICkgKSk7CisKKyAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICBoaW50ZXItPnN0ZW1zKCBoaW50ZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW0gfHwgb3AgPT0gY2ZmX29wX2hzdGVtaG0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgLSAoIG51bV9hcmdzICYgfjEgKSApOworCisgICAgICAgICAgZGVjb2Rlci0+bnVtX2hpbnRzICs9IG51bV9hcmdzIC8gMjsKKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfaGludG1hc2s6CisgICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgorICAgICAgICAgIEZUX1RSQUNFNCgoIG9wID09IGNmZl9vcF9oaW50bWFzayA/ICIgaGludG1hc2siIDogIiBjbnRybWFzayIgKSk7CisKKyAgICAgICAgICAvKiBpbXBsZW1lbnQgdnN0ZW0gd2hlbiBuZWVkZWQgLS0gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIHRoZSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3Qgc2F5IGl0LCBidXQgdGhpcyBhbHNvIHdvcmtzICovCisgICAgICAgICAgLyogd2l0aCB0aGUgJ2NudHJtYXNrJyBvcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggbnVtX2FyZ3MgPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICAgIGhpbnRlci0+c3RlbXMoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyAtICggbnVtX2FyZ3MgJiB+MSApICk7CisKKyAgICAgICAgICAgIGRlY29kZXItPm51bV9oaW50cyArPSBudW1fYXJncyAvIDI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogSW4gYSB2YWxpZCBjaGFyc3RyaW5nIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGJ5dGUgKi8KKyAgICAgICAgICAvKiBhZnRlciBgaGludG1hc2snIG9yIGBjbnRybWFzaycgKGUuZy4sIGZvciBhIGByZXR1cm4nICAqLworICAgICAgICAgIC8qIGluc3RydWN0aW9uKS4gIEFkZGl0aW9uYWxseSwgdGhlcmUgbXVzdCBiZSBzcGFjZSBmb3IgICovCisgICAgICAgICAgLyogYG51bV9oaW50cycgYml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgIGlmICggKCBpcCArICggKCBkZWNvZGVyLT5udW1faGludHMgKyA3ICkgPj4gMyApICkgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisKKyAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfaGludG1hc2sgKQorICAgICAgICAgICAgICBoaW50ZXItPmhpbnRtYXNrKCBoaW50ZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBoaW50ZXItPmNvdW50ZXIoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwICk7CisgICAgICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50IG1hc2tieXRlOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKG1hc2tieXRlczoiICkpOworCisgICAgICAgICAgICBmb3IgKCBtYXNrYnl0ZSA9IDA7CisgICAgICAgICAgICAgICAgICBtYXNrYnl0ZSA8IChGVF9VSW50KSggKCBkZWNvZGVyLT5udW1faGludHMgKyA3ICkgPj4gMyApOworICAgICAgICAgICAgICAgICAgbWFza2J5dGUrKywgaXArKyApCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgMHglMDJYIiwgKmlwICkpOworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiKVxuIiApKTsKKyAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgIGlwICs9ICggZGVjb2Rlci0+bnVtX2hpbnRzICsgNyApID4+IDM7CisjZW5kaWYKKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfcm1vdmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJtb3ZldG9cbiIgKSk7CisKKyAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisgICAgICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7CisgICAgICAgICAgeCAgICs9IGFyZ3NbLTJdOworICAgICAgICAgIHkgICArPSBhcmdzWy0xXTsKKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZtb3ZldG9cbiIgKSk7CisKKyAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisgICAgICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7CisgICAgICAgICAgeSAgICs9IGFyZ3NbLTFdOworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9obW92ZXRvOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgaG1vdmV0b1xuIiApKTsKKworICAgICAgICAgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICAgICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKKyAgICAgICAgICB4ICAgKz0gYXJnc1stMV07CisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3JsaW5ldG86CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBybGluZXRvXG4iICkpOworCisgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICB8fAorICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2FyZ3MgLyAyICkgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDIgKQorICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICBhcmdzIC09IG51bV9hcmdzICYgfjE7CisgICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICB5ICs9IGFyZ3NbMV07CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICAgIGFyZ3MgKz0gMjsKKyAgICAgICAgICB9CisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2hsaW5ldG86CisgICAgICAgIGNhc2UgY2ZmX29wX3ZsaW5ldG86CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBwaGFzZSA9ICggb3AgPT0gY2ZmX29wX2hsaW5ldG8gKTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCBvcCA9PSBjZmZfb3BfaGxpbmV0byA/ICIgaGxpbmV0b1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIHZsaW5ldG9cbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCAwICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIC8qIHRoZXJlIGV4aXN0IHN1YnNldHRlZCBmb250cyAoZm91bmQgaW4gUERGcykgKi8KKyAgICAgICAgICAgIC8qIHdoaWNoIGNhbGwgYGhsaW5ldG8nIHdpdGhvdXQgYXJndW1lbnRzICAgICAgKi8KKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPT0gMCApCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2FyZ3MgKSAgICApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBwaGFzZSApCisgICAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOworCisgICAgICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgICAgYXJncysrOworICAgICAgICAgICAgICBwaGFzZSBePSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9ycmN1cnZldG86CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJyY3VydmV0b1xuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDYgKQorICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAtIG51bV9hcmdzICUgNjsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG5hcmdzIC8gMiApICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisgICAgICAgICAgICB3aGlsZSAoIGFyZ3MgPCBkZWNvZGVyLT50b3AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisgICAgICAgICAgICAgIHggKz0gYXJnc1syXTsKKyAgICAgICAgICAgICAgeSArPSBhcmdzWzNdOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzRdOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbNV07CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworICAgICAgICAgICAgICBhcmdzICs9IDY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3Z2Y3VydmV0bzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIG5hcmdzOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdnZjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLworICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgKi8KKworICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAmIH4yOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisKKyAgICAgICAgICAgIGlmICggbmFyZ3MgJiAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgICAgIG5hcmdzLS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgMyAqICggbmFyZ3MgLyA0ICkgKSApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbMl07CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbM107CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworICAgICAgICAgICAgICBhcmdzICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2hoY3VydmV0bzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIG5hcmdzOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaGhjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLworICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgKi8KKworICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAmIH4yOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisgICAgICAgICAgICBpZiAoIG5hcmdzICYgMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHkgKz0gYXJnc1swXTsKKyAgICAgICAgICAgICAgYXJncysrOworICAgICAgICAgICAgICBuYXJncy0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKiAoIG5hcmdzIC8gNCApICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIHdoaWxlICggYXJncyA8IGRlY29kZXItPnRvcCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHggKz0gYXJnc1swXTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisgICAgICAgICAgICAgIHggKz0gYXJnc1sxXTsKKyAgICAgICAgICAgICAgeSArPSBhcmdzWzJdOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzNdOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICAgICAgYXJncyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF92aGN1cnZldG86CisgICAgICAgIGNhc2UgY2ZmX29wX2h2Y3VydmV0bzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHBoYXNlOworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCBvcCA9PSBjZmZfb3BfdmhjdXJ2ZXRvID8gIiB2aGN1cnZldG9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIGh2Y3VydmV0b1xuIiApKTsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA4biwgOG4rMSwgOG4rNCwgb3IgOG4rNSwgKi8KKyAgICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICBuYXJncyA9IG51bV9hcmdzICYgfjI7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisgICAgICAgICAgICBpZiAoIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsICggbmFyZ3MgLyA0ICkgKiAzICkgKQorICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAgICAgcGhhc2UgPSAoIG9wID09IGNmZl9vcF9odmN1cnZldG8gKTsKKworICAgICAgICAgICAgd2hpbGUgKCBuYXJncyA+PSA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbmFyZ3MgLT0gNDsKKyAgICAgICAgICAgICAgaWYgKCBwaGFzZSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisgICAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOworICAgICAgICAgICAgICAgIHkgKz0gYXJnc1syXTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgICB5ICs9IGFyZ3NbM107CisgICAgICAgICAgICAgICAgaWYgKCBuYXJncyA9PSAxICkKKyAgICAgICAgICAgICAgICAgIHggKz0gYXJnc1s0XTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5ICs9IGFyZ3NbMF07CisgICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisgICAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOworICAgICAgICAgICAgICAgIHkgKz0gYXJnc1syXTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgICB4ICs9IGFyZ3NbM107CisgICAgICAgICAgICAgICAgaWYgKCBuYXJncyA9PSAxICkKKyAgICAgICAgICAgICAgICAgIHkgKz0gYXJnc1s0XTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBhcmdzICArPSA0OworICAgICAgICAgICAgICBwaGFzZSBePSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9ybGluZWN1cnZlOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgbnVtX2xpbmVzOworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJsaW5lY3VydmVcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIG5hcmdzICAgICA9IG51bV9hcmdzICYgfjE7CisgICAgICAgICAgICBudW1fbGluZXMgPSAoIG5hcmdzIC0gNiApIC8gMjsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICAgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2xpbmVzICsgMyApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzIC09IG5hcmdzOworCisgICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBsaW5lIHNlZ21lbnRzICovCisgICAgICAgICAgICB3aGlsZSAoIG51bV9saW5lcyA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgICAgIGFyZ3MgKz0gMjsKKyAgICAgICAgICAgICAgbnVtX2xpbmVzLS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHRoZW4gdGhlIGN1cnZlICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICB5ICs9IGFyZ3NbMV07CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgIHggKz0gYXJnc1syXTsKKyAgICAgICAgICAgIHkgKz0gYXJnc1szXTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworICAgICAgICAgICAgeCArPSBhcmdzWzRdOworICAgICAgICAgICAgeSArPSBhcmdzWzVdOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3JjdXJ2ZWxpbmU6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBudW1fY3VydmVzOworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJjdXJ2ZWxpbmVcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIG5hcmdzICAgICAgPSBudW1fYXJncyAtIDI7CisgICAgICAgICAgICBuYXJncyAgICAgID0gbmFyZ3MgLSBuYXJncyAlIDYgKyAyOworICAgICAgICAgICAgbnVtX2N1cnZlcyA9ICggbmFyZ3MgLSAyICkgLyA2OworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG51bV9jdXJ2ZXMgKiAzICsgMiApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzIC09IG5hcmdzOworCisgICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBjdXJ2ZXMgKi8KKyAgICAgICAgICAgIHdoaWxlICggbnVtX2N1cnZlcyA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisgICAgICAgICAgICAgIHggKz0gYXJnc1syXTsKKyAgICAgICAgICAgICAgeSArPSBhcmdzWzNdOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzRdOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbNV07CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworICAgICAgICAgICAgICBhcmdzICs9IDY7CisgICAgICAgICAgICAgIG51bV9jdXJ2ZXMtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogdGhlbiB0aGUgZmluYWwgbGluZSAqLworICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgeSArPSBhcmdzWzFdOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4MToKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3Mgc3RhcnRfeTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4MVxuIiApKTsKKworICAgICAgICAgICAgLyogYWRkaW5nIGZpdmUgbW9yZSBwb2ludHM6IDQgY29udHJvbCBwb2ludHMsIDEgb24tY3VydmUgcG9pbnQgKi8KKyAgICAgICAgICAgIC8qIC0tIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHN0YXJ0IHBvaW50IGlmIGl0ICovCisgICAgICAgICAgICAvKiBuZWVkcyB0byBiZSBhZGRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIC8qIHJlY29yZCB0aGUgc3RhcnRpbmcgcG9pbnQncyB5IHBvc2l0aW9uIGZvciBsYXRlciB1c2UgKi8KKyAgICAgICAgICAgIHN0YXJ0X3kgPSB5OworCisgICAgICAgICAgICAvKiBmaXJzdCBjb250cm9sIHBvaW50ICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbMF07CisgICAgICAgICAgICB5ICs9IGFyZ3NbMV07CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogc2Vjb25kIGNvbnRyb2wgcG9pbnQgKi8KKyAgICAgICAgICAgIHggKz0gYXJnc1syXTsKKyAgICAgICAgICAgIHkgKz0gYXJnc1szXTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBqb2luIHBvaW50OyBvbiBjdXJ2ZSwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBsYXN0ICovCisgICAgICAgICAgICAvKiBjb250cm9sIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbNF07CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgLyogdGhpcmQgY29udHJvbCBwb2ludCwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBqb2luICovCisgICAgICAgICAgICAvKiBwb2ludCdzIHktdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHggKz0gYXJnc1s1XTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBmb3VydGggY29udHJvbCBwb2ludCAqLworICAgICAgICAgICAgeCArPSBhcmdzWzZdOworICAgICAgICAgICAgeSArPSBhcmdzWzddOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgIC8qIGVuZGluZyBwb2ludCwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBzdGFydCAgICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbOF07CisgICAgICAgICAgICB5ICA9IHN0YXJ0X3k7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyBzdGFydF95OworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaGZsZXhcbiIgKSk7CisKKyAgICAgICAgICAgIC8qIGFkZGluZyBzaXggbW9yZSBwb2ludHM7IDQgY29udHJvbCBwb2ludHMsIDIgb24tY3VydmUgcG9pbnRzICovCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgNiApICAgICAgICAgICApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgICAgLyogcmVjb3JkIHRoZSBzdGFydGluZyBwb2ludCdzIHktcG9zaXRpb24gZm9yIGxhdGVyIHVzZSAqLworICAgICAgICAgICAgc3RhcnRfeSA9IHk7CisKKyAgICAgICAgICAgIC8qIGZpcnN0IGNvbnRyb2wgcG9pbnQgKi8KKyAgICAgICAgICAgIHggKz0gYXJnc1swXTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBzZWNvbmQgY29udHJvbCBwb2ludCAqLworICAgICAgICAgICAgeCArPSBhcmdzWzFdOworICAgICAgICAgICAgeSArPSBhcmdzWzJdOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgIC8qIGpvaW4gcG9pbnQ7IG9uIGN1cnZlLCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgKi8KKyAgICAgICAgICAgIC8qIGNvbnRyb2wgcG9pbnQncyB5LXZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHggKz0gYXJnc1szXTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICAvKiB0aGlyZCBjb250cm9sIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGpvaW4gKi8KKyAgICAgICAgICAgIC8qIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgeCArPSBhcmdzWzRdOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgIC8qIGZvdXJ0aCBjb250cm9sIHBvaW50ICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbNV07CisgICAgICAgICAgICB5ICA9IHN0YXJ0X3k7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogZW5kaW5nIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHBvaW50J3MgKi8KKyAgICAgICAgICAgIC8qIHktdmFsdWUgLS0gd2UgZG9uJ3QgYWRkIHRoaXMgcG9pbnQsIHRob3VnaCAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB4ICs9IGFyZ3NbNl07CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXgxOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyAgICAgc3RhcnRfeCwgc3RhcnRfeTsgLyogcmVjb3JkIHN0YXJ0IHgsIHkgdmFsdWVzIGZvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbHRlciB1c2UgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBGVF9GaXhlZCAgIGR4ID0gMCwgZHkgPSAwOyAgIC8qIHVzZWQgaW4gaG9yaXpvbnRhbC92ZXJ0aWNhbCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxnb3JpdGhtIGJlbG93ICAgICAgICAgICAgICAqLworICAgICAgICAgICAgRlRfSW50ICAgICBob3Jpem9udGFsLCBjb3VudDsKKyAgICAgICAgICAgIEZUX0ZpeGVkKiAgdGVtcDsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGZsZXgxXG4iICkpOworCisgICAgICAgICAgICAvKiBhZGRpbmcgc2l4IG1vcmUgcG9pbnRzOyA0IGNvbnRyb2wgcG9pbnRzLCAyIG9uLWN1cnZlIHBvaW50cyAqLworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIC8qIHJlY29yZCB0aGUgc3RhcnRpbmcgcG9pbnQncyB4LCB5IHBvc2l0aW9uIGZvciBsYXRlciB1c2UgKi8KKyAgICAgICAgICAgIHN0YXJ0X3ggPSB4OworICAgICAgICAgICAgc3RhcnRfeSA9IHk7CisKKyAgICAgICAgICAgIC8qIFhYWDogZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgYSBob3Jpem9udGFsICovCisgICAgICAgICAgICAvKiAgICAgIG9yIHZlcnRpY2FsIGZsZXg7IHRoZSBUeXBlIDIgc3BlY2lmaWNhdGlvbiBpcyB2YWd1ZS4uLiAqLworCisgICAgICAgICAgICB0ZW1wID0gYXJnczsKKworICAgICAgICAgICAgLyogZ3JhYiB1cCB0byB0aGUgbGFzdCBhcmd1bWVudCAqLworICAgICAgICAgICAgZm9yICggY291bnQgPSA1OyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkeCArPSB0ZW1wWzBdOworICAgICAgICAgICAgICBkeSArPSB0ZW1wWzFdOworICAgICAgICAgICAgICB0ZW1wICs9IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZHggPCAwICkKKyAgICAgICAgICAgICAgZHggPSAtZHg7CisgICAgICAgICAgICBpZiAoIGR5IDwgMCApCisgICAgICAgICAgICAgIGR5ID0gLWR5OworCisgICAgICAgICAgICAvKiBzdHJhbmdlIHRlc3QsIGJ1dCBoZXJlIGl0IGlzLi4uICovCisgICAgICAgICAgICBob3Jpem9udGFsID0gKCBkeCA+IGR5ICk7CisKKyAgICAgICAgICAgIGZvciAoIGNvdW50ID0gNTsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbMV07CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDMgKSApOworICAgICAgICAgICAgICBhcmdzICs9IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGlzIGxhc3Qgb3BlcmFuZCBhbiB4LSBvciB5LWRlbHRhPyAqLworICAgICAgICAgICAgaWYgKCBob3Jpem9udGFsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgICB5ICA9IHN0YXJ0X3k7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHggID0gc3RhcnRfeDsKKyAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIGNmZl9vcF9mbGV4OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1VJbnQgIGNvdW50OworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZmxleFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGZvciAoIGNvdW50ID0gNjsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOworICAgICAgICAgICAgICB5ICs9IGFyZ3NbMV07CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDQgfHwgY291bnQgPT0gMSApICk7CisgICAgICAgICAgICAgIGFyZ3MgKz0gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zZWFjOgorICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzZWFjXG4iICkpOworCisgICAgICAgICAgICBlcnJvciA9IGNmZl9vcGVyYXRvcl9zZWFjKCBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWzNdID4+IDE2ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KSggYXJnc1s0XSA+PiAxNiApICk7CisKKyAgICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KKyAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggYnVpbGRlci0+bG9hZGVyICk7CisKKyAgICAgICAgICAgIC8qIHJldHVybiBub3chICovCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOworCisgICAgICAgICAgLyogV2UgYXJlIGdvaW5nIHRvIGVtdWxhdGUgdGhlIHNlYWMgb3BlcmF0b3IuICovCisgICAgICAgICAgaWYgKCBudW1fYXJncyA+PSA0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTYXZlIGdseXBoIHdpZHRoIHNvIHRoYXQgdGhlIHN1YmdseXBocyBkb24ndCBvdmVyd3JpdGUgaXQuICovCisgICAgICAgICAgICBGVF9Qb3MgIGdseXBoX3dpZHRoID0gZGVjb2Rlci0+Z2x5cGhfd2lkdGg7CisKKworICAgICAgICAgICAgZXJyb3IgPSBjZmZfb3BlcmF0b3Jfc2VhYyggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBMLCBhcmdzWy00XSwgYXJnc1stM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KSggYXJnc1stMl0gPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWy0xXSA+PiAxNiApICk7CisKKyAgICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZ2x5cGhfd2lkdGg7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisKKyAgICAgICAgICAgIC8qIGNsb3NlIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uICovCisgICAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggaGludGVyLT5jbG9zZSggaGludGVyLT5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cyApICkKKyAgICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgICAvKiBhcHBseSBoaW50cyB0byB0aGUgbG9hZGVkIGdseXBoIG91dGxpbmUgbm93ICovCisgICAgICAgICAgICAgIGVycm9yID0gaGludGVyLT5hcHBseSggaGludGVyLT5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5jdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU0hfR2xvYmFscylidWlsZGVyLT5oaW50c19nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmhpbnRfbW9kZSApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KKyAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggYnVpbGRlci0+bG9hZGVyICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcmV0dXJuIG5vdyEgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBjYXNlIGNmZl9vcF9hYnM6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhYnNcbiIgKSk7CisKKyAgICAgICAgICBpZiAoIGFyZ3NbMF0gPCAwICkKKyAgICAgICAgICAgIGFyZ3NbMF0gPSAtYXJnc1swXTsKKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYWRkOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgYWRkXG4iICkpOworCisgICAgICAgICAgYXJnc1swXSArPSBhcmdzWzFdOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zdWI6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdWJcbiIgKSk7CisKKyAgICAgICAgICBhcmdzWzBdIC09IGFyZ3NbMV07CisgICAgICAgICAgYXJncysrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2RpdjoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRpdlxuIiApKTsKKworICAgICAgICAgIGFyZ3NbMF0gPSBGVF9EaXZGaXgoIGFyZ3NbMF0sIGFyZ3NbMV0gKTsKKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfbmVnOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgbmVnXG4iICkpOworCisgICAgICAgICAgYXJnc1swXSA9IC1hcmdzWzBdOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9yYW5kb206CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRml4ZWQgIFJhbmQ7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiByYW5kXG4iICkpOworCisgICAgICAgICAgICBSYW5kID0gc2VlZDsKKyAgICAgICAgICAgIGlmICggUmFuZCA+PSAweDgwMDBMICkKKyAgICAgICAgICAgICAgUmFuZCsrOworCisgICAgICAgICAgICBhcmdzWzBdID0gUmFuZDsKKyAgICAgICAgICAgIHNlZWQgICAgPSBGVF9NdWxGaXgoIHNlZWQsIDB4MTAwMDBMIC0gc2VlZCApOworICAgICAgICAgICAgaWYgKCBzZWVkID09IDAgKQorICAgICAgICAgICAgICBzZWVkICs9IDB4Mjg3MzsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfbXVsOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgbXVsXG4iICkpOworCisgICAgICAgICAgYXJnc1swXSA9IEZUX011bEZpeCggYXJnc1swXSwgYXJnc1sxXSApOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zcXJ0OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3FydFxuIiApKTsKKworICAgICAgICAgIGlmICggYXJnc1swXSA+IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgICBjb3VudCA9IDk7CisgICAgICAgICAgICBGVF9GaXhlZCAgcm9vdCAgPSBhcmdzWzBdOworICAgICAgICAgICAgRlRfRml4ZWQgIG5ld19yb290OworCisKKyAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG5ld19yb290ID0gKCByb290ICsgRlRfRGl2Rml4KCBhcmdzWzBdLCByb290ICkgKyAxICkgPj4gMTsKKyAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290IHx8IGNvdW50IDw9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICByb290ID0gbmV3X3Jvb3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzWzBdID0gbmV3X3Jvb3Q7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3NbMF0gPSAwOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9kcm9wOgorICAgICAgICAgIC8qIG5vdGhpbmcgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRyb3BcbiIgKSk7CisKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9leGNoOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICB0bXA7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOworCisgICAgICAgICAgICB0bXAgICAgID0gYXJnc1swXTsKKyAgICAgICAgICAgIGFyZ3NbMF0gPSBhcmdzWzFdOworICAgICAgICAgICAgYXJnc1sxXSA9IHRtcDsKKyAgICAgICAgICAgIGFyZ3MgICArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9pbmRleDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIGlkeCA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpbmRleFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPCAwICkKKyAgICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBpZHggPiBudW1fYXJncyAtIDIgKQorICAgICAgICAgICAgICBpZHggPSBudW1fYXJncyAtIDI7CisgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1stKCBpZHggKyAxICldOworICAgICAgICAgICAgYXJncysrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9yb2xsOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgY291bnQgPSAoRlRfSW50KSggYXJnc1swXSA+PiAxNiApOworICAgICAgICAgICAgRlRfSW50ICBpZHggICA9IChGVF9JbnQpKCBhcmdzWzFdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiByb2xsXG4iICkpOworCisgICAgICAgICAgICBpZiAoIGNvdW50IDw9IDAgKQorICAgICAgICAgICAgICBjb3VudCA9IDE7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gY291bnQ7CisgICAgICAgICAgICBpZiAoIGFyZ3MgPCBzdGFjayApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgd2hpbGUgKCBpZHggPiAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUX0ZpeGVkICB0bXAgPSBhcmdzW2NvdW50IC0gMV07CisgICAgICAgICAgICAgICAgRlRfSW50ICAgIGk7CisKKworICAgICAgICAgICAgICAgIGZvciAoIGkgPSBjb3VudCAtIDI7IGkgPj0gMDsgaS0tICkKKyAgICAgICAgICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJnc1tpXTsKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gdG1wOworICAgICAgICAgICAgICAgIGlkeC0tOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlICggaWR4IDwgMCApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVF9GaXhlZCAgdG1wID0gYXJnc1swXTsKKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgaTsKKworCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudCAtIDE7IGkrKyApCisgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gYXJnc1tpICsgMV07CisgICAgICAgICAgICAgICAgYXJnc1tjb3VudCAtIDFdID0gdG1wOworICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzICs9IGNvdW50OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9kdXA6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7CisKKyAgICAgICAgICBhcmdzWzFdID0gYXJnc1swXTsKKyAgICAgICAgICBhcmdzICs9IDI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfcHV0OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICB2YWwgPSBhcmdzWzBdOworICAgICAgICAgICAgRlRfSW50ICAgIGlkeCA9IChGVF9JbnQpKCBhcmdzWzFdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBwdXRcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyApCisgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkY2hhcltpZHhdID0gdmFsOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9nZXQ6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICAgIGlkeCA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisgICAgICAgICAgICBGVF9GaXhlZCAgdmFsID0gMDsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGdldFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPj0gMCAmJiBpZHggPCBDRkZfTUFYX1RSQU5TX0VMRU1FTlRTICkKKyAgICAgICAgICAgICAgdmFsID0gZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF07CisKKyAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWw7CisgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3N0b3JlOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3RvcmVcbiIpKTsKKworICAgICAgICAgIGdvdG8gVW5pbXBsZW1lbnRlZDsKKworICAgICAgICBjYXNlIGNmZl9vcF9sb2FkOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKworICAgICAgICAgIGdvdG8gVW5pbXBsZW1lbnRlZDsKKworICAgICAgICBjYXNlIGNmZl9vcF9kb3RzZWN0aW9uOgorICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3IgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCBieSB0aGUgcGFyc2VyICovCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkb3RzZWN0aW9uXG4iICkpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2Nsb3NlcGF0aDoKKyAgICAgICAgICAvKiB0aGlzIGlzIGFuIGludmFsaWQgVHlwZSAyIG9wZXJhdG9yOyBob3dldmVyLCB0aGVyZSAgICAgICAgKi8KKyAgICAgICAgICAvKiBleGlzdCBmb250cyB3aGljaCBhcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIGZyb20gcHJvYmFibHkgKi8KKyAgICAgICAgICAvKiBUeXBlIDEgdG8gQ0ZGLCBhbmQgc29tZSBwYXJzZXJzIHNlZW0gdG8gYWNjZXB0IGl0ICAgICAgICAgKi8KKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2xvc2VwYXRoIChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9oc2J3OgorICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLworICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLworICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoc2J3IChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZGVjb2Rlci0+bm9taW5hbF93aWR0aCArICggYXJnc1sxXSA+PiAxNiApOworCisgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueCA9IGFyZ3NbMF07CisgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueSA9IDA7CisKKyAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07CisgICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3k7CisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3NidzoKKyAgICAgICAgICAvKiB0aGlzIGlzIGFuIGludmFsaWQgVHlwZSAyIG9wZXJhdG9yOyBob3dldmVyLCB0aGVyZSAgICAgICAgKi8KKyAgICAgICAgICAvKiBleGlzdCBmb250cyB3aGljaCBhcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIGZyb20gcHJvYmFibHkgKi8KKyAgICAgICAgICAvKiBUeXBlIDEgdG8gQ0ZGLCBhbmQgc29tZSBwYXJzZXJzIHNlZW0gdG8gYWNjZXB0IGl0ICAgICAgICAgKi8KKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2J3IChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZGVjb2Rlci0+bm9taW5hbF93aWR0aCArICggYXJnc1syXSA+PiAxNiApOworCisgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueCA9IGFyZ3NbMF07CisgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueSA9IGFyZ3NbMV07CisKKyAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07CisgICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3kgKyBhcmdzWzFdOworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zZXRjdXJyZW50cG9pbnQ6CisgICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCisgICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCisgICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNldGN1cnJlbnRwb2ludCAoaW52YWxpZCBvcClcbiIgKSk7CisKKyAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07CisgICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3kgKyBhcmdzWzFdOworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9jYWxsb3RoZXJzdWJyOgorICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLworICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLworICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsb3RoZXJzdWJyIChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIC8qIHN1YnNlcXVlbnQgYHBvcCcgb3BlcmFuZHMgc2hvdWxkIGFkZCB0aGUgYXJndW1lbnRzLCAgICAgICAqLworICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlZCBmb3IgYHVua25vd24nIG90aGVyICAqLworICAgICAgICAgIC8qIHN1YnJvdXRpbmVzIGluIHRoZSBUeXBlMSBzcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFhYWCBGaXggcmV0dXJuIGFyZ3VtZW50cyAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLiAgICAgICAgICAqLworICAgICAgICAgIGFyZ3MgLT0gMiArICggYXJnc1stMl0gPj4gMTYgKTsKKyAgICAgICAgICBpZiAoIGFyZ3MgPCBzdGFjayApCisgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9wb3A6CisgICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCisgICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCisgICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHBvcCAoaW52YWxpZCBvcClcbiIgKSk7CisKKyAgICAgICAgICAvKiBYWFggSW5jcmVhc2luZyBgYXJncycgaXMgd3Jvbmc6IEFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgKi8KKyAgICAgICAgICAvKiBgcG9wJ3Mgd2UgZ2V0IGEgc3RhY2sgb3ZlcmZsb3cuICBSZWFzb24gZm9yIGRvaW5nIGl0IGlzICAgKi8KKyAgICAgICAgICAvKiBjb2RlIGxpa2UgdGhpcyAoYWN0dWFsbHkgZm91bmQgaW4gYSBDRkYgZm9udCk6ICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIDE3IDEgMyBjYWxsb3RoZXJzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIHBvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIGNhbGxzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBTaW5jZSB3ZSBoYW5kbGUgYGNhbGxvdGhlcnN1YnInIGFzIGEgbm8tb3AsIGFuZCAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBgY2FsbHN1YnInIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgYHBvcCcgY2FuJ3QgYmUgYSAgKi8KKyAgICAgICAgICAvKiBuby1vcCB0b28gYXMgaXQgYmFzaWNhbGx5IHNob3VsZCBiZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBUaGUgcmlnaHQgc29sdXRpb24gd291bGQgYmUgdG8gcHJvdmlkZSByZWFsIHN1cHBvcnQgZm9yICAgKi8KKyAgICAgICAgICAvKiBgY2FsbG90aGVyc3VicicgYXMgZG9uZSBpbiBgdDFkZWNvZGUuYycsIGhvd2V2ZXIsIGdpdmVuICAgKi8KKyAgICAgICAgICAvKiB0aGUgZmFjdCB0aGF0IENGRiBmb250cyB3aXRoIGBwb3AnIGFyZSBpbnZhbGlkLCBpdCBpcyAgICAgKi8KKyAgICAgICAgICAvKiBxdWVzdGlvbmFibGUgd2hldGhlciBpdCBpcyB3b3J0aCB0aGUgdGltZS4gICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYW5kOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gYXJnc1swXSAmJiBhcmdzWzFdOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYW5kXG4iICkpOworCisgICAgICAgICAgICBhcmdzWzBdID0gY29uZCA/IDB4MTAwMDBMIDogMDsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfb3I6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRml4ZWQgIGNvbmQgPSBhcmdzWzBdIHx8IGFyZ3NbMV07CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBvclxuIiApKTsKKworICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CisgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2VxOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gIWFyZ3NbMF07CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKKworICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CisgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2lmZWxzZToKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICggYXJnc1syXSA8PSBhcmdzWzNdICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpZmVsc2VcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggIWNvbmQgKQorICAgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfY2FsbHN1YnI6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgaWR4ID0gKEZUX1VJbnQpKCAoIGFyZ3NbMF0gPj4gMTYgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmxvY2Fsc19iaWFzICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsc3ViciAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICB6b25lIC0gZGVjb2Rlci0+em9uZXMgKyAxICkpOworCisgICAgICAgICAgICBpZiAoIGlkeCA+PSBkZWNvZGVyLT5udW1fbG9jYWxzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBsb2NhbCBzdWJyIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKworICAgICAgICAgICAgem9uZSsrOworICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+bG9jYWxzW2lkeF07CisgICAgICAgICAgICB6b25lLT5saW1pdCAgPSBkZWNvZGVyLT5sb2NhbHNbaWR4ICsgMV07CisgICAgICAgICAgICB6b25lLT5jdXJzb3IgPSB6b25lLT5iYXNlOworCisgICAgICAgICAgICBpZiAoICF6b25lLT5iYXNlIHx8IHpvbmUtPmxpbWl0ID09IHpvbmUtPmJhc2UgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2luZyBlbXB0eSBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlY29kZXItPnpvbmUgPSB6b25lOworICAgICAgICAgICAgaXAgICAgICAgICAgICA9IHpvbmUtPmJhc2U7CisgICAgICAgICAgICBsaW1pdCAgICAgICAgID0gem9uZS0+bGltaXQ7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxnc3VicjoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBpZHggPSAoRlRfVUludCkoICggYXJnc1swXSA+PiAxNiApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Z2xvYmFsc19iaWFzICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsZ3N1YnIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgem9uZSAtIGRlY29kZXItPnpvbmVzICsgMSApKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2dsb2JhbHMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGdsb2JhbCBzdWJyIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKworICAgICAgICAgICAgem9uZSsrOworICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHhdOworICAgICAgICAgICAgem9uZS0+bGltaXQgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHggKyAxXTsKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICAgICAgICAgIGlmICggIXpvbmUtPmJhc2UgfHwgem9uZS0+bGltaXQgPT0gem9uZS0+YmFzZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGludm9raW5nIGVtcHR5IHN1YnJzXG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVjb2Rlci0+em9uZSA9IHpvbmU7CisgICAgICAgICAgICBpcCAgICAgICAgICAgID0gem9uZS0+YmFzZTsKKyAgICAgICAgICAgIGxpbWl0ICAgICAgICAgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfcmV0dXJuOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuIChsZWF2aW5nIGxldmVsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT56b25lIC0gZGVjb2Rlci0+em9uZXMgKSk7CisKKyAgICAgICAgICBpZiAoIGRlY29kZXItPnpvbmUgPD0gZGVjb2Rlci0+em9uZXMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIHJldHVyblxuIiApKTsKKyAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgIH0KKworICAgICAgICAgIGRlY29kZXItPnpvbmUtLTsKKyAgICAgICAgICB6b25lICA9IGRlY29kZXItPnpvbmU7CisgICAgICAgICAgaXAgICAgPSB6b25lLT5jdXJzb3I7CisgICAgICAgICAgbGltaXQgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICBVbmltcGxlbWVudGVkOgorICAgICAgICAgIEZUX0VSUk9SKCggIlVuaW1wbGVtZW50ZWQgb3Bjb2RlOiAlZCIsIGlwWy0xXSApKTsKKworICAgICAgICAgIGlmICggaXBbLTFdID09IDEyICkKKyAgICAgICAgICAgIEZUX0VSUk9SKCggIiAlZCIsIGlwWzBdICkpOworICAgICAgICAgIEZUX0VSUk9SKCggIlxuIiApKTsKKworICAgICAgICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICAgIH0KKworICAgICAgICBkZWNvZGVyLT50b3AgPSBhcmdzOworCisgICAgICAgIGlmICggZGVjb2Rlci0+dG9wIC0gc3RhY2sgPj0gQ0ZGX01BWF9PUEVSQU5EUyApCisgICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKKworICAgICAgfSAvKiBnZW5lcmFsIG9wZXJhdG9yIHByb2Nlc3NpbmcgKi8KKworICAgIH0gLyogd2hpbGUgaXAgPCBsaW1pdCAqLworCisgICAgRlRfVFJBQ0U0KCggIi4uZW5kLi5cblxuIiApKTsKKworICBGYWlsOgorICAgIHJldHVybiBlcnJvcjsKKworICBTeW50YXhfRXJyb3I6CisgICAgRlRfVFJBQ0U0KCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiBzeW50YXggZXJyb3JcbiIgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgU3RhY2tfVW5kZXJmbG93OgorICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3RhY2sgdW5kZXJmbG93XG4iICkpOworICAgIHJldHVybiBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKKworICBTdGFja19PdmVyZmxvdzoKKyAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IHN0YWNrIG92ZXJmbG93XG4iICkpOworICAgIHJldHVybiBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgfQorCisjZW5kaWYgLyogQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgIENPTVBVVEUgVEhFIE1BWElNVU0gQURWQU5DRSBXSURUSCAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBpbiBjaGFyZ2Ugb2YgY29tcHV0aW5nICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICB0aGUgbWF4aW11bSBhZHZhbmNlIHdpZHRoIG9mIHRoZSBmb250LiAgSXQgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgcXVpY2tseSBwcm9jZXNzZXMgZWFjaCBnbHlwaCBjaGFyc3RyaW5nIHRvICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gZWl0aGVyIGEgYHNidycgb3IgYHNlYWMnICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICBvcGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmIDAgLyogdW51c2VkIHVudGlsIHdlIHN1cHBvcnQgcHVyZSBDRkYgZm9udHMgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfY29tcHV0ZV9tYXhfYWR2YW5jZSggVFRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCogIG1heF9hZHZhbmNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBDRkZfRGVjb2RlciAgZGVjb2RlcjsKKyAgICBGVF9JbnQgICAgICAgZ2x5cGhfaW5kZXg7CisgICAgQ0ZGX0ZvbnQgICAgIGNmZiA9IChDRkZfRm9udClmYWNlLT5vdGhlcjsKKworCisgICAgKm1heF9hZHZhbmNlID0gMDsKKworICAgIC8qIEluaXRpYWxpemUgbG9hZCBkZWNvZGVyICovCisgICAgY2ZmX2RlY29kZXJfaW5pdCggJmRlY29kZXIsIGZhY2UsIDAsIDAsIDAsIDAgKTsKKworICAgIGRlY29kZXIuYnVpbGRlci5tZXRyaWNzX29ubHkgPSAxOworICAgIGRlY29kZXIuYnVpbGRlci5sb2FkX3BvaW50cyAgPSAwOworCisgICAgLyogRm9yIGVhY2ggZ2x5cGgsIHBhcnNlIHRoZSBnbHlwaCBjaGFyc3RyaW5nIGFuZCBleHRyYWN0ICovCisgICAgLyogdGhlIGFkdmFuY2Ugd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICggZ2x5cGhfaW5kZXggPSAwOyBnbHlwaF9pbmRleCA8IGZhY2UtPnJvb3QubnVtX2dseXBoczsKKyAgICAgICAgICBnbHlwaF9pbmRleCsrICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgY2hhcnN0cmluZzsKKyAgICAgIEZUX1VMb25nICBjaGFyc3RyaW5nX2xlbjsKKworCisgICAgICAvKiBub3cgZ2V0IGxvYWQgdGhlIHVuc2NhbGVkIG91dGxpbmUgKi8KKyAgICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywgJmNoYXJzdHJpbmdfbGVuICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcHJlcGFyZSggJmRlY29kZXIsIHNpemUsIGdseXBoX2luZGV4ICk7CisgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCAmZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuICk7CisKKyAgICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOworICAgICAgfQorCisgICAgICAvKiBpZ25vcmUgdGhlIGVycm9yIGlmIG9uZSBoYXMgb2NjdXJyZWQgLS0gc2tpcCB0byBuZXh0IGdseXBoICovCisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICB9CisKKyAgICAqbWF4X2FkdmFuY2UgPSBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54OworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyNlbmRpZiAvKiAwICovCisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX3Nsb3RfbG9hZCggQ0ZGX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgICBsb2FkX2ZsYWdzICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBDRkZfRGVjb2RlciAgZGVjb2RlcjsKKyAgICBUVF9GYWNlICAgICAgZmFjZSA9IChUVF9GYWNlKWdseXBoLT5yb290LmZhY2U7CisgICAgRlRfQm9vbCAgICAgIGhpbnRpbmcsIHNjYWxlZCwgZm9yY2Vfc2NhbGluZzsKKyAgICBDRkZfRm9udCAgICAgY2ZmICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworCisgICAgRlRfTWF0cml4ICAgIGZvbnRfbWF0cml4OworICAgIEZUX1ZlY3RvciAgICBmb250X29mZnNldDsKKworCisgICAgZm9yY2Vfc2NhbGluZyA9IEZBTFNFOworCisgICAgLyogaW4gYSBDSUQta2V5ZWQgZm9udCwgY29uc2lkZXIgYGdseXBoX2luZGV4JyBhcyBhIENJRCBhbmQgbWFwICovCisgICAgLyogaXQgaW1tZWRpYXRlbHkgdG8gdGhlIHJlYWwgZ2x5cGhfaW5kZXggLS0gaWYgaXQgaXNuJ3QgYSAgICAgICovCisgICAgLyogc3Vic2V0dGVkIGZvbnQsIGdseXBoX2luZGljZXMgYW5kIENJRHMgYXJlIGlkZW50aWNhbCwgdGhvdWdoICovCisgICAgaWYgKCBjZmYtPnRvcF9mb250LmZvbnRfZGljdC5jaWRfcmVnaXN0cnkgIT0gMHhGRkZGVSAmJgorICAgICAgICAgY2ZmLT5jaGFyc2V0LmNpZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIHsKKyAgICAgIC8qIGRvbid0IGhhbmRsZSBDSUQgMCAoLm5vdGRlZikgd2hpY2ggaXMgZGlyZWN0bHkgbWFwcGVkIHRvIEdJRCAwICovCisgICAgICBpZiAoIGdseXBoX2luZGV4ICE9IDAgKQorICAgICAgeworICAgICAgICBnbHlwaF9pbmRleCA9IGNmZl9jaGFyc2V0X2NpZF90b19naW5kZXgoICZjZmYtPmNoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXggKTsKKyAgICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIGdseXBoX2luZGV4ID49IGNmZi0+bnVtX2dseXBocyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fUkVDVVJTRSApCisgICAgICBsb2FkX2ZsYWdzIHw9IEZUX0xPQURfTk9fU0NBTEUgfCBGVF9MT0FEX05PX0hJTlRJTkc7CisKKyAgICBnbHlwaC0+eF9zY2FsZSA9IDB4MTAwMDBMOworICAgIGdseXBoLT55X3NjYWxlID0gMHgxMDAwMEw7CisgICAgaWYgKCBzaXplICkKKyAgICB7CisgICAgICBnbHlwaC0+eF9zY2FsZSA9IHNpemUtPnJvb3QubWV0cmljcy54X3NjYWxlOworICAgICAgZ2x5cGgtPnlfc2NhbGUgPSBzaXplLT5yb290Lm1ldHJpY3MueV9zY2FsZTsKKyAgICB9CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKworICAgIC8qIHRyeSB0byBsb2FkIGVtYmVkZGVkIGJpdG1hcCBpZiBhbnkgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBYWFg6IFRoZSBjb252ZW50aW9uIHNob3VsZCBiZSBlbXBoYXNpemVkIGluICAgICAqLworICAgIC8qICAgICAgdGhlIGRvY3VtZW50cyBiZWNhdXNlIGl0IGNhbiBiZSBjb25mdXNpbmcuICovCisgICAgaWYgKCBzaXplICkKKyAgICB7CisgICAgICBDRkZfRmFjZSAgICAgIGNmZl9mYWNlID0gKENGRl9GYWNlKXNpemUtPnJvb3QuZmFjZTsKKyAgICAgIFNGTlRfU2VydmljZSAgc2ZudCAgICAgPSAoU0ZOVF9TZXJ2aWNlKWNmZl9mYWNlLT5zZm50OworICAgICAgRlRfU3RyZWFtICAgICBzdHJlYW0gICA9IGNmZl9mYWNlLT5yb290LnN0cmVhbTsKKworCisgICAgICBpZiAoIHNpemUtPnN0cmlrZV9pbmRleCAhPSAweEZGRkZGRkZGVUwgICAgICAmJgorICAgICAgICAgICBzZm50LT5sb2FkX2VibGMgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19CSVRNQVAgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgVFRfU0JpdF9NZXRyaWNzUmVjICBtZXRyaWNzOworCisKKyAgICAgICAgZXJyb3IgPSBzZm50LT5sb2FkX3NiaXRfaW1hZ2UoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5zdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGgtPnJvb3QuYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldHJpY3MgKTsKKworICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Cb29sICAgIGhhc192ZXJ0aWNhbF9pbmZvOworICAgICAgICAgIEZUX1VTaG9ydCAgYWR2YW5jZTsKKyAgICAgICAgICBGVF9TaG9ydCAgIGR1bW15OworCisKKyAgICAgICAgICBnbHlwaC0+cm9vdC5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOworICAgICAgICAgIGdseXBoLT5yb290Lm91dGxpbmUubl9jb250b3VycyA9IDA7CisKKyAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgPDwgNjsKKyAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgPDwgNjsKKworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCA8PCA2OworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSA8PCA2OworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICA8PCA2OworCisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYIDw8IDY7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZIDw8IDY7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgIDw8IDY7CisKKyAgICAgICAgICBnbHlwaC0+cm9vdC5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworCisgICAgICAgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdseXBoLT5yb290LmJpdG1hcF9sZWZ0ID0gbWV0cmljcy52ZXJ0QmVhcmluZ1g7CisgICAgICAgICAgICBnbHlwaC0+cm9vdC5iaXRtYXBfdG9wICA9IG1ldHJpY3MudmVydEJlYXJpbmdZOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgZ2x5cGgtPnJvb3QuYml0bWFwX2xlZnQgPSBtZXRyaWNzLmhvcmlCZWFyaW5nWDsKKyAgICAgICAgICAgIGdseXBoLT5yb290LmJpdG1hcF90b3AgID0gbWV0cmljcy5ob3JpQmVhcmluZ1k7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogY29tcHV0ZSBsaW5lYXIgYWR2YW5jZSB3aWR0aHMgKi8KKworICAgICAgICAgICh2b2lkKSggKFNGTlRfU2VydmljZSlmYWNlLT5zZm50ICktPmdldF9tZXRyaWNzKCBmYWNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZSApOworICAgICAgICAgIGdseXBoLT5yb290LmxpbmVhckhvcmlBZHZhbmNlID0gYWR2YW5jZTsKKworICAgICAgICAgIGhhc192ZXJ0aWNhbF9pbmZvID0gRlRfQk9PTCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+dmVydGljYWxfaW5mbyAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT52ZXJ0aWNhbC5udW1iZXJfT2ZfVk1ldHJpY3MgPiAwICk7CisKKyAgICAgICAgICAvKiBnZXQgdGhlIHZlcnRpY2FsIG1ldHJpY3MgZnJvbSB0aGUgdm10eCB0YWJsZSBpZiB3ZSBoYXZlIG9uZSAqLworICAgICAgICAgIGlmICggaGFzX3ZlcnRpY2FsX2luZm8gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICh2b2lkKSggKFNGTlRfU2VydmljZSlmYWNlLT5zZm50ICktPmdldF9tZXRyaWNzKCBmYWNlLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZSApOworICAgICAgICAgICAgZ2x5cGgtPnJvb3QubGluZWFyVmVydEFkdmFuY2UgPSBhZHZhbmNlOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogbWFrZSB1cCB2ZXJ0aWNhbCBvbmVzICovCisgICAgICAgICAgICBpZiAoIGZhY2UtPm9zMi52ZXJzaW9uICE9IDB4RkZGRlUgKQorICAgICAgICAgICAgICBnbHlwaC0+cm9vdC5saW5lYXJWZXJ0QWR2YW5jZSA9IChGVF9Qb3MpCisgICAgICAgICAgICAgICAgKCBmYWNlLT5vczIuc1R5cG9Bc2NlbmRlciAtIGZhY2UtPm9zMi5zVHlwb0Rlc2NlbmRlciApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnbHlwaC0+cm9vdC5saW5lYXJWZXJ0QWR2YW5jZSA9IChGVF9Qb3MpCisgICAgICAgICAgICAgICAgKCBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyIC0gZmFjZS0+aG9yaXpvbnRhbC5EZXNjZW5kZXIgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgKi8KKworICAgIC8qIHJldHVybiBpbW1lZGlhdGVseSBpZiB3ZSBvbmx5IHdhbnQgdGhlIGVtYmVkZGVkIGJpdG1hcHMgKi8KKyAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1NCSVRTX09OTFkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAvKiBpZiB3ZSBoYXZlIGEgQ0lEIHN1YmZvbnQsIHVzZSBpdHMgbWF0cml4ICh3aGljaCBoYXMgYWxyZWFkeSAqLworICAgIC8qIGJlZW4gbXVsdGlwbGllZCB3aXRoIHRoZSByb290IG1hdHJpeCkgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiB0aGlzIHNjYWxpbmcgaXMgb25seSByZWxldmFudCBpZiB0aGUgUFMgaGludGVyIGlzbid0IGFjdGl2ZSAqLworICAgIGlmICggY2ZmLT5udW1fc3ViZm9udHMgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIHRvcF91cG0sIHN1Yl91cG07CisgICAgICBGVF9CeXRlICBmZF9pbmRleCA9IGNmZl9mZF9zZWxlY3RfZ2V0KCAmY2ZmLT5mZF9zZWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCApOworCisKKyAgICAgIGlmICggZmRfaW5kZXggPj0gY2ZmLT5udW1fc3ViZm9udHMgKQorICAgICAgICBmZF9pbmRleCA9IChGVF9CeXRlKSggY2ZmLT5udW1fc3ViZm9udHMgLSAxICk7CisKKyAgICAgIHRvcF91cG0gPSAoRlRfTG9uZyljZmYtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICBzdWJfdXBtID0gKEZUX0xvbmcpY2ZmLT5zdWJmb250c1tmZF9pbmRleF0tPmZvbnRfZGljdC51bml0c19wZXJfZW07CisKKworICAgICAgZm9udF9tYXRyaXggPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LmZvbnRfbWF0cml4OworICAgICAgZm9udF9vZmZzZXQgPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LmZvbnRfb2Zmc2V0OworCisgICAgICBpZiAoIHRvcF91cG0gIT0gc3ViX3VwbSApCisgICAgICB7CisgICAgICAgIGdseXBoLT54X3NjYWxlID0gRlRfTXVsRGl2KCBnbHlwaC0+eF9zY2FsZSwgdG9wX3VwbSwgc3ViX3VwbSApOworICAgICAgICBnbHlwaC0+eV9zY2FsZSA9IEZUX011bERpdiggZ2x5cGgtPnlfc2NhbGUsIHRvcF91cG0sIHN1Yl91cG0gKTsKKworICAgICAgICBmb3JjZV9zY2FsaW5nID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGZvbnRfbWF0cml4ID0gY2ZmLT50b3BfZm9udC5mb250X2RpY3QuZm9udF9tYXRyaXg7CisgICAgICBmb250X29mZnNldCA9IGNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmZvbnRfb2Zmc2V0OworICAgIH0KKworICAgIGdseXBoLT5yb290Lm91dGxpbmUubl9wb2ludHMgICA9IDA7CisgICAgZ2x5cGgtPnJvb3Qub3V0bGluZS5uX2NvbnRvdXJzID0gMDsKKworICAgIC8qIHRvcC1sZXZlbCBjb2RlIGVuc3VyZXMgdGhhdCBGVF9MT0FEX05PX0hJTlRJTkcgaXMgc2V0ICovCisgICAgLyogaWYgRlRfTE9BRF9OT19TQ0FMRSBpcyBhY3RpdmUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBoaW50aW5nID0gRlRfQk9PTCggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19ISU5USU5HICkgPT0gMCApOworICAgIHNjYWxlZCAgPSBGVF9CT09MKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICAgKSA9PSAwICk7CisKKyAgICBnbHlwaC0+aGludCAgICAgICAgPSBoaW50aW5nOworICAgIGdseXBoLT5zY2FsZWQgICAgICA9IHNjYWxlZDsKKyAgICBnbHlwaC0+cm9vdC5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORTsgIC8qIGJ5IGRlZmF1bHQgKi8KKworICAgIHsKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICBDRkZfRHJpdmVyICBkcml2ZXIgPSAoQ0ZGX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOworI2VuZGlmCisKKworICAgICAgRlRfQnl0ZSogIGNoYXJzdHJpbmc7CisgICAgICBGVF9VTG9uZyAgY2hhcnN0cmluZ19sZW47CisKKworICAgICAgY2ZmX2RlY29kZXJfaW5pdCggJmRlY29kZXIsIGZhY2UsIHNpemUsIGdseXBoLCBoaW50aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICk7CisKKyAgICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfQURWQU5DRV9PTkxZICkKKyAgICAgICAgZGVjb2Rlci53aWR0aF9vbmx5ID0gVFJVRTsKKworICAgICAgZGVjb2Rlci5idWlsZGVyLm5vX3JlY3Vyc2UgPQorICAgICAgICAoRlRfQm9vbCkoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKTsKKworICAgICAgLyogbm93IGxvYWQgdGhlIHVuc2NhbGVkIG91dGxpbmUgKi8KKyAgICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywgJmNoYXJzdHJpbmdfbGVuICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBHbHlwaF9CdWlsZF9GaW5pc2hlZDsKKworICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wcmVwYXJlKCAmZGVjb2Rlciwgc2l6ZSwgZ2x5cGhfaW5kZXggKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEdseXBoX0J1aWxkX0ZpbmlzaGVkOworCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgLyogY2hvb3NlIHdoaWNoIENGRiByZW5kZXJlciB0byB1c2UgKi8KKyAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSApCisgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisgICAgICAgIGVycm9yID0gY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworCisgICAgICAgIC8qIEFkb2JlJ3MgZW5naW5lIHVzZXMgMTYuMTYgbnVtYmVycyBldmVyeXdoZXJlOyAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogYXMgYSBjb25zZXF1ZW5jZSwgZ2x5cGhzIGxhcmdlciB0aGFuIDIwMDBwcGVtIGdldCByZWplY3RlZCAqLworICAgICAgICBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIEdseXBoX1Rvb19CaWcgKSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiB0aGlzIHRpbWUsIHdlIHJldHJ5IHVuaGludGVkIGFuZCBzY2FsZSB1cCB0aGUgZ2x5cGggbGF0ZXIgb24gKi8KKyAgICAgICAgICAvKiAodGhlIGVuZ2luZSB1c2VzIGFuZCBzZXRzIHRoZSBoYXJkY29kZWQgdmFsdWUgMHgxMDAwMCAvIDY0ID0gKi8KKyAgICAgICAgICAvKiAweDQwMCBmb3IgYm90aCBgeF9zY2FsZScgYW5kIGB5X3NjYWxlJyBpbiB0aGlzIGNhc2UpICAgICAgICAgKi8KKyAgICAgICAgICBoaW50aW5nICAgICAgID0gRkFMU0U7CisgICAgICAgICAgZm9yY2Vfc2NhbGluZyA9IFRSVUU7CisgICAgICAgICAgZ2x5cGgtPmhpbnQgICA9IGhpbnRpbmc7CisKKyAgICAgICAgICBlcnJvciA9IGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCAmZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsIGNoYXJzdHJpbmdfbGVuICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEdseXBoX0J1aWxkX0ZpbmlzaGVkOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgICAgLyogQ29udHJvbCBkYXRhIGFuZCBsZW5ndGggbWF5IG5vdCBiZSBhdmFpbGFibGUgZm9yIGluY3JlbWVudGFsICovCisgICAgICAvKiBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICAgIHsKKyAgICAgICAgZ2x5cGgtPnJvb3QuY29udHJvbF9kYXRhID0gTlVMTDsKKyAgICAgICAgZ2x5cGgtPnJvb3QuY29udHJvbF9sZW4gPSAwOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgICAgLyogV2Ugc2V0IGNvbnRyb2xfZGF0YSBhbmQgY29udHJvbF9sZW4gaWYgY2hhcnN0cmluZ3MgaXMgbG9hZGVkLiAqLworICAgICAgLyogU2VlIGhvdyBjaGFyc3RyaW5nIGxvYWRzIGF0IGNmZl9pbmRleF9hY2Nlc3NfZWxlbWVudCgpIGluICAgICAqLworICAgICAgLyogY2ZmbG9hZC5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgeworICAgICAgICBDRkZfSW5kZXggIGNzaW5kZXggPSAmY2ZmLT5jaGFyc3RyaW5nc19pbmRleDsKKworCisgICAgICAgIGlmICggY3NpbmRleC0+b2Zmc2V0cyApCisgICAgICAgIHsKKyAgICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2RhdGEgPSBjc2luZGV4LT5ieXRlcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NpbmRleC0+b2Zmc2V0c1tnbHlwaF9pbmRleF0gLSAxOworICAgICAgICAgIGdseXBoLT5yb290LmNvbnRyb2xfbGVuICA9IChGVF9Mb25nKWNoYXJzdHJpbmdfbGVuOworICAgICAgICB9CisgICAgICB9CisKKyAgR2x5cGhfQnVpbGRfRmluaXNoZWQ6CisgICAgICAvKiBzYXZlIG5ldyBnbHlwaCB0YWJsZXMsIGlmIG5vIGVycm9yICovCisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIGNmZl9idWlsZGVyX2RvbmUoICZkZWNvZGVyLmJ1aWxkZXIgKTsKKyAgICAgIC8qIFhYWDogYW55dGhpbmcgdG8gZG8gZm9yIGJyb2tlbiBnbHlwaCBlbnRyeT8gKi8KKyAgICB9CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBjYW4gb3B0aW9uYWxseSBvdmVycmlkZSB0aGUgbWV0cmljcy4gKi8KKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MgKQorICAgIHsKKyAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgIG1ldHJpY3M7CisKKworICAgICAgbWV0cmljcy5iZWFyaW5nX3ggPSBkZWNvZGVyLmJ1aWxkZXIubGVmdF9iZWFyaW5nLng7CisgICAgICBtZXRyaWNzLmJlYXJpbmdfeSA9IDA7CisgICAgICBtZXRyaWNzLmFkdmFuY2UgICA9IGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLng7CisgICAgICBtZXRyaWNzLmFkdmFuY2VfdiA9IGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnk7CisKKyAgICAgIGVycm9yID0gZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MoCisgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5vYmplY3QsCisgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIEZBTFNFLCAmbWV0cmljcyApOworCisgICAgICBkZWNvZGVyLmJ1aWxkZXIubGVmdF9iZWFyaW5nLnggPSBtZXRyaWNzLmJlYXJpbmdfeDsKKyAgICAgIGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggICAgICA9IG1ldHJpY3MuYWR2YW5jZTsKKyAgICAgIGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnkgICAgICA9IG1ldHJpY3MuYWR2YW5jZV92OworICAgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAvKiBOb3csIHNldCB0aGUgbWV0cmljcyAtLSB0aGlzIGlzIHJhdGhlciBzaW1wbGUsIGFzICAgKi8KKyAgICAgIC8qIHRoZSBsZWZ0IHNpZGUgYmVhcmluZyBpcyB0aGUgeE1pbiwgYW5kIHRoZSB0b3Agc2lkZSAqLworICAgICAgLyogYmVhcmluZyB0aGUgeU1heC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIC8qIEZvciBjb21wb3NpdGUgZ2x5cGhzLCByZXR1cm4gb25seSBsZWZ0IHNpZGUgYmVhcmluZyBhbmQgKi8KKyAgICAgIC8qIGFkdmFuY2Ugd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fUkVDVVJTRSApCisgICAgICB7CisgICAgICAgIEZUX1Nsb3RfSW50ZXJuYWwgIGludGVybmFsID0gZ2x5cGgtPnJvb3QuaW50ZXJuYWw7CisKKworICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IGRlY29kZXIuYnVpbGRlci5sZWZ0X2JlYXJpbmcueDsKKyAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy5ob3JpQWR2YW5jZSAgPSBkZWNvZGVyLmdseXBoX3dpZHRoOworICAgICAgICBpbnRlcm5hbC0+Z2x5cGhfbWF0cml4ICAgICAgICAgICA9IGZvbnRfbWF0cml4OworICAgICAgICBpbnRlcm5hbC0+Z2x5cGhfZGVsdGEgICAgICAgICAgICA9IGZvbnRfb2Zmc2V0OworICAgICAgICBpbnRlcm5hbC0+Z2x5cGhfdHJhbnNmb3JtZWQgICAgICA9IDE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX0JCb3ggICAgICAgICAgICBjYm94OworICAgICAgICBGVF9HbHlwaF9NZXRyaWNzKiAgbWV0cmljcyA9ICZnbHlwaC0+cm9vdC5tZXRyaWNzOworICAgICAgICBGVF9WZWN0b3IgICAgICAgICAgYWR2YW5jZTsKKyAgICAgICAgRlRfQm9vbCAgICAgICAgICAgIGhhc192ZXJ0aWNhbF9pbmZvOworCisKKyAgICAgICAgaWYgKCBmYWNlLT5ob3Jpem9udGFsLm51bWJlcl9PZl9ITWV0cmljcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9TaG9ydCAgIGhvcmlCZWFyaW5nWCA9IDA7CisgICAgICAgICAgRlRfVVNob3J0ICBob3JpQWR2YW5jZSAgPSAwOworCisKKyAgICAgICAgICAoIChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggZmFjZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3JpQmVhcmluZ1gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3JpQWR2YW5jZSApOworICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlICAgICAgICAgID0gaG9yaUFkdmFuY2U7CisgICAgICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYICAgICAgICAgPSBob3JpQmVhcmluZ1g7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubGluZWFySG9yaUFkdmFuY2UgPSBob3JpQWR2YW5jZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBjb3B5IHRoZSBfdW5zY2FsZWRfIGFkdmFuY2Ugd2lkdGggKi8KKyAgICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSAgICAgICAgICA9IGRlY29kZXIuZ2x5cGhfd2lkdGg7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubGluZWFySG9yaUFkdmFuY2UgPSBkZWNvZGVyLmdseXBoX3dpZHRoOworICAgICAgICB9CisKKyAgICAgICAgZ2x5cGgtPnJvb3QuaW50ZXJuYWwtPmdseXBoX3RyYW5zZm9ybWVkID0gMDsKKworICAgICAgICBoYXNfdmVydGljYWxfaW5mbyA9IEZUX0JPT0woIGZhY2UtPnZlcnRpY2FsX2luZm8gICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT52ZXJ0aWNhbC5udW1iZXJfT2ZfVk1ldHJpY3MgPiAwICk7CisKKyAgICAgICAgLyogZ2V0IHRoZSB2ZXJ0aWNhbCBtZXRyaWNzIGZyb20gdGhlIHZtdHggdGFibGUgaWYgd2UgaGF2ZSBvbmUgKi8KKyAgICAgICAgaWYgKCBoYXNfdmVydGljYWxfaW5mbyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9TaG9ydCAgIHZlcnRCZWFyaW5nWSA9IDA7CisgICAgICAgICAgRlRfVVNob3J0ICB2ZXJ0QWR2YW5jZSAgPSAwOworCisKKyAgICAgICAgICAoIChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggZmFjZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJ0QmVhcmluZ1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJ0QWR2YW5jZSApOworICAgICAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IHZlcnRCZWFyaW5nWTsKKyAgICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSAgPSB2ZXJ0QWR2YW5jZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBtYWtlIHVwIHZlcnRpY2FsIG9uZXMgKi8KKyAgICAgICAgICBpZiAoIGZhY2UtPm9zMi52ZXJzaW9uICE9IDB4RkZGRlUgKQorICAgICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSAoRlRfUG9zKSggZmFjZS0+b3MyLnNUeXBvQXNjZW5kZXIgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+b3MyLnNUeXBvRGVzY2VuZGVyICk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSAoRlRfUG9zKSggZmFjZS0+aG9yaXpvbnRhbC5Bc2NlbmRlciAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5ob3Jpem9udGFsLkRlc2NlbmRlciApOworICAgICAgICB9CisKKyAgICAgICAgZ2x5cGgtPnJvb3QubGluZWFyVmVydEFkdmFuY2UgPSBtZXRyaWNzLT52ZXJ0QWR2YW5jZTsKKworICAgICAgICBnbHlwaC0+cm9vdC5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORTsKKworICAgICAgICBnbHlwaC0+cm9vdC5vdXRsaW5lLmZsYWdzID0gMDsKKyAgICAgICAgaWYgKCBzaXplICYmIHNpemUtPnJvb3QubWV0cmljcy55X3BwZW0gPCAyNCApCisgICAgICAgICAgZ2x5cGgtPnJvb3Qub3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OOworCisgICAgICAgIGdseXBoLT5yb290Lm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9SRVZFUlNFX0ZJTEw7CisKKyAgICAgICAgaWYgKCAhKCBmb250X21hdHJpeC54eCA9PSAweDEwMDAwTCAmJgorICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnl5ID09IDB4MTAwMDBMICYmCisgICAgICAgICAgICAgICAgZm9udF9tYXRyaXgueHkgPT0gMCAgICAgICAgJiYKKyAgICAgICAgICAgICAgICBmb250X21hdHJpeC55eCA9PSAwICAgICAgICApICkKKyAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggJmdseXBoLT5yb290Lm91dGxpbmUsICZmb250X21hdHJpeCApOworCisgICAgICAgIGlmICggISggZm9udF9vZmZzZXQueCA9PSAwICYmCisgICAgICAgICAgICAgICAgZm9udF9vZmZzZXQueSA9PSAwICkgKQorICAgICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCAmZ2x5cGgtPnJvb3Qub3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9vZmZzZXQueCwgZm9udF9vZmZzZXQueSApOworCisgICAgICAgIGFkdmFuY2UueCA9IG1ldHJpY3MtPmhvcmlBZHZhbmNlOworICAgICAgICBhZHZhbmNlLnkgPSAwOworICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCAmYWR2YW5jZSwgJmZvbnRfbWF0cml4ICk7CisgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gYWR2YW5jZS54ICsgZm9udF9vZmZzZXQueDsKKworICAgICAgICBhZHZhbmNlLnggPSAwOworICAgICAgICBhZHZhbmNlLnkgPSBtZXRyaWNzLT52ZXJ0QWR2YW5jZTsKKyAgICAgICAgRlRfVmVjdG9yX1RyYW5zZm9ybSggJmFkdmFuY2UsICZmb250X21hdHJpeCApOworICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSA9IGFkdmFuY2UueSArIGZvbnRfb2Zmc2V0Lnk7CisKKyAgICAgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCB8fCBmb3JjZV9zY2FsaW5nICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHNjYWxlIHRoZSBvdXRsaW5lIGFuZCB0aGUgbWV0cmljcyAqLworICAgICAgICAgIEZUX0ludCAgICAgICBuOworICAgICAgICAgIEZUX091dGxpbmUqICBjdXIgICAgID0gJmdseXBoLT5yb290Lm91dGxpbmU7CisgICAgICAgICAgRlRfVmVjdG9yKiAgIHZlYyAgICAgPSBjdXItPnBvaW50czsKKyAgICAgICAgICBGVF9GaXhlZCAgICAgeF9zY2FsZSA9IGdseXBoLT54X3NjYWxlOworICAgICAgICAgIEZUX0ZpeGVkICAgICB5X3NjYWxlID0gZ2x5cGgtPnlfc2NhbGU7CisKKworICAgICAgICAgIC8qIEZpcnN0IG9mIGFsbCwgc2NhbGUgdGhlIHBvaW50cyAqLworICAgICAgICAgIGlmICggIWhpbnRpbmcgfHwgIWRlY29kZXIuYnVpbGRlci5oaW50c19mdW5jcyApCisgICAgICAgICAgICBmb3IgKCBuID0gY3VyLT5uX3BvaW50czsgbiA+IDA7IG4tLSwgdmVjKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2ZWMtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApOworICAgICAgICAgICAgICB2ZWMtPnkgPSBGVF9NdWxGaXgoIHZlYy0+eSwgeV9zY2FsZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogVGhlbiBzY2FsZSB0aGUgbWV0cmljcyAqLworICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT5ob3JpQWR2YW5jZSwgeF9zY2FsZSApOworICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT52ZXJ0QWR2YW5jZSwgeV9zY2FsZSApOworICAgICAgICB9CisKKyAgICAgICAgLyogY29tcHV0ZSB0aGUgb3RoZXIgbWV0cmljcyAqLworICAgICAgICBGVF9PdXRsaW5lX0dldF9DQm94KCAmZ2x5cGgtPnJvb3Qub3V0bGluZSwgJmNib3ggKTsKKworICAgICAgICBtZXRyaWNzLT53aWR0aCAgPSBjYm94LnhNYXggLSBjYm94LnhNaW47CisgICAgICAgIG1ldHJpY3MtPmhlaWdodCA9IGNib3gueU1heCAtIGNib3gueU1pbjsKKworICAgICAgICBpZiAoICFmYWNlLT5ob3Jpem9udGFsLm51bWJlcl9PZl9ITWV0cmljcyApCisgICAgICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYID0gY2JveC54TWluOworCisgICAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA9IGNib3gueU1heDsKKworICAgICAgICBpZiAoIGhhc192ZXJ0aWNhbF9pbmZvICkKKyAgICAgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggPSBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgLyAyOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICAgICAgICBmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MoIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmdsb2FkLmggYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZnbG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjY1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZnbG9hZC5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZmZnbG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRkZHTE9BRF9IX18KKyNkZWZpbmUgX19DRkZHTE9BRF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlICJjZmZvYmpzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2RlZmluZSBDRkZfTUFYX09QRVJBTkRTICAgICAgICA0OAorI2RlZmluZSBDRkZfTUFYX1NVQlJTX0NBTExTICAgICAxNiAgLyogbWF4aW11bSBzdWJyb3V0aW5lIG5lc3Rpbmc7ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgMTAgYXJlIGFsbG93ZWQgYnV0IHRoZXJlIGV4aXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb250cyBsaWtlIGBIaXJhS2FrdVByb04tVzMudHRmJyAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKEhpcmFnaW5vIEtha3UgR290aGljIFByb04gVzM7ICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDguMmQ2ZTE7IDIwMTQtMTItMTkpIHRoYXQgZXhjZWVkICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkZfTUFYX1RSQU5TX0VMRU1FTlRTICAzMgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0dXJlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0ZGX0J1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEEgc3RydWN0dXJlIHVzZWQgZHVyaW5nIGdseXBoIGxvYWRpbmcgdG8gc3RvcmUgaXRzIG91dGxpbmUuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgICAgICA6OiBUaGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoICAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbG9hZGVyICAgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBsb2FkZXIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlICAgICAgICAgIDo6IFRoZSBiYXNlIGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGN1cnJlbnQgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zX3ggICAgICAgICA6OiBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb3NfeSAgICAgICAgIDo6IFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfYmVhcmluZyAgOjogVGhlIGxlZnQgc2lkZSBiZWFyaW5nIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWR2YW5jZSAgICAgICA6OiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYm94ICAgICAgICAgIDo6IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhdGhfYmVndW4gICAgOjogQSBmbGFnIHdoaWNoIGluZGljYXRlcyB0aGF0IGEgbmV3IHBhdGggaGFzIGJlZ3VuLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbG9hZF9wb2ludHMgICA6OiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBub19yZWN1cnNlICAgIDo6IFNldCBidXQgbm90IHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1ldHJpY3Nfb25seSAgOjogQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50c19mdW5jcyAgIDo6IEF1eGlsaWFyeSBwb2ludGVyIGZvciBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhpbnRzX2dsb2JhbHMgOjogQXV4aWxpYXJ5IHBvaW50ZXIgZm9yIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9CdWlsZGVyXworICB7CisgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeTsKKyAgICBUVF9GYWNlICAgICAgICAgZmFjZTsKKyAgICBDRkZfR2x5cGhTbG90ICAgZ2x5cGg7CisgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlcjsKKyAgICBGVF9PdXRsaW5lKiAgICAgYmFzZTsKKyAgICBGVF9PdXRsaW5lKiAgICAgY3VycmVudDsKKworICAgIEZUX1BvcyAgICAgICAgICBwb3NfeDsKKyAgICBGVF9Qb3MgICAgICAgICAgcG9zX3k7CisKKyAgICBGVF9WZWN0b3IgICAgICAgbGVmdF9iZWFyaW5nOworICAgIEZUX1ZlY3RvciAgICAgICBhZHZhbmNlOworCisgICAgRlRfQkJveCAgICAgICAgIGJib3g7ICAgICAgICAgIC8qIGJvdW5kaW5nIGJveCAqLworICAgIEZUX0Jvb2wgICAgICAgICBwYXRoX2JlZ3VuOworICAgIEZUX0Jvb2wgICAgICAgICBsb2FkX3BvaW50czsKKyAgICBGVF9Cb29sICAgICAgICAgbm9fcmVjdXJzZTsKKworICAgIEZUX0Jvb2wgICAgICAgICBtZXRyaWNzX29ubHk7CisKKyAgICB2b2lkKiAgICAgICAgICAgaGludHNfZnVuY3M7ICAgIC8qIGhpbnRlci1zcGVjaWZpYyAqLworICAgIHZvaWQqICAgICAgICAgICBoaW50c19nbG9iYWxzOyAgLyogaGludGVyLXNwZWNpZmljICovCisKKyAgfSBDRkZfQnVpbGRlcjsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9jaGVja19wb2ludHMoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBjb3VudCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgIGZsYWcgKTsKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeSApOworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5ICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICk7CisKKworICBGVF9MT0NBTCggRlRfSW50ICkKKyAgY2ZmX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSggQ0ZGX0ZvbnQgIGNmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgIGNoYXJjb2RlICk7CisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9nZXRfZ2x5cGhfZGF0YSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIHBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgbGVuZ3RoICk7CisKKworICAvKiBleGVjdXRpb24gY29udGV4dCBjaGFyc3RyaW5nIHpvbmUgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0RlY29kZXJfWm9uZV8KKyAgeworICAgIEZUX0J5dGUqICBiYXNlOworICAgIEZUX0J5dGUqICBsaW1pdDsKKyAgICBGVF9CeXRlKiAgY3Vyc29yOworCisgIH0gQ0ZGX0RlY29kZXJfWm9uZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRGVjb2Rlcl8KKyAgeworICAgIENGRl9CdWlsZGVyICAgICAgICBidWlsZGVyOworICAgIENGRl9Gb250ICAgICAgICAgICBjZmY7CisKKyAgICBGVF9GaXhlZCAgICAgICAgICAgc3RhY2tbQ0ZGX01BWF9PUEVSQU5EUyArIDFdOworICAgIEZUX0ZpeGVkKiAgICAgICAgICB0b3A7CisKKyAgICBDRkZfRGVjb2Rlcl9ab25lICAgem9uZXNbQ0ZGX01BWF9TVUJSU19DQUxMUyArIDFdOworICAgIENGRl9EZWNvZGVyX1pvbmUqICB6b25lOworCisgICAgRlRfSW50ICAgICAgICAgICAgIGZsZXhfc3RhdGU7CisgICAgRlRfSW50ICAgICAgICAgICAgIG51bV9mbGV4X3ZlY3RvcnM7CisgICAgRlRfVmVjdG9yICAgICAgICAgIGZsZXhfdmVjdG9yc1s3XTsKKworICAgIEZUX1BvcyAgICAgICAgICAgICBnbHlwaF93aWR0aDsKKyAgICBGVF9Qb3MgICAgICAgICAgICAgbm9taW5hbF93aWR0aDsKKworICAgIEZUX0Jvb2wgICAgICAgICAgICByZWFkX3dpZHRoOworICAgIEZUX0Jvb2wgICAgICAgICAgICB3aWR0aF9vbmx5OworICAgIEZUX0ludCAgICAgICAgICAgICBudW1faGludHM7CisgICAgRlRfRml4ZWQgICAgICAgICAgIGJ1aWxkY2hhcltDRkZfTUFYX1RSQU5TX0VMRU1FTlRTXTsKKworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1fbG9jYWxzOworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1fZ2xvYmFsczsKKworICAgIEZUX0ludCAgICAgICAgICAgICBsb2NhbHNfYmlhczsKKyAgICBGVF9JbnQgICAgICAgICAgICAgZ2xvYmFsc19iaWFzOworCisgICAgRlRfQnl0ZSoqICAgICAgICAgIGxvY2FsczsKKyAgICBGVF9CeXRlKiogICAgICAgICAgZ2xvYmFsczsKKworICAgIEZUX0J5dGUqKiAgICAgICAgICBnbHlwaF9uYW1lczsgICAvKiBmb3IgcHVyZSBDRkYgZm9udHMgb25seSAgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX2dseXBoczsgICAgLyogbnVtYmVyIG9mIGdseXBocyBpbiBmb250ICovCisKKyAgICBGVF9SZW5kZXJfTW9kZSAgICAgaGludF9tb2RlOworCisgICAgRlRfQm9vbCAgICAgICAgICAgIHNlYWM7CisKKyAgICBDRkZfU3ViRm9udCAgICAgICAgY3VycmVudF9zdWJmb250OyAvKiBmb3IgY3VycmVudCBnbHlwaF9pbmRleCAqLworCisgIH0gQ0ZGX0RlY29kZXI7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmZl9kZWNvZGVyX2luaXQoIENGRl9EZWNvZGVyKiAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX1NpemUgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIENGRl9HbHlwaFNsb3QgICBzbG90LAorICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIGhpbnRfbW9kZSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9kZWNvZGVyX3ByZXBhcmUoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgQ0ZGX1NpemUgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4ICk7CisKKyNpZiAwICAvKiB1bnVzZWQgdW50aWwgd2Ugc3VwcG9ydCBwdXJlIENGRiBmb250cyAqLworCisgIC8qIENvbXB1dGUgdGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCBvZiBhIGZvbnQgdGhyb3VnaCBxdWljayBwYXJzaW5nICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9jb21wdXRlX21heF9hZHZhbmNlKCBUVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgbWF4X2FkdmFuY2UgKTsKKworI2VuZGlmIC8qIDAgKi8KKworI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiApOworI2VuZGlmCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX3Nsb3RfbG9hZCggQ0ZGX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgICBsb2FkX2ZsYWdzICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19DRkZHTE9BRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmxvYWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmxvYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2I3MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmbG9hZC5jCkBAIC0wLDAgKzEsMTcwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIGFuZCBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKKworI2luY2x1ZGUgImNmZmxvYWQuaCIKKyNpbmNsdWRlICJjZmZwYXJzZS5oIgorCisjaW5jbHVkZSAiY2ZmZXJycy5oIgorCisKKyNpZiAxCisKKyAgc3RhdGljIGNvbnN0IEZUX1VTaG9ydCAgY2ZmX2lzb2Fkb2JlX2NoYXJzZXRbMjI5XSA9CisgIHsKKyAgICAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywKKyAgICAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAgICAgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywKKyAgICAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAgICAgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwKKyAgICAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyAgICAgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwKKyAgICAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyAgICAgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwKKyAgICAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyAgICAgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywKKyAgICAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyAgICAgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywKKyAgICAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKyAgICAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwKKyAgICAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKyAgICAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwKKyAgICAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKyAgICAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwKKyAgICAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAgICAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywKKyAgICAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwKKyAgICAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywKKyAgICAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKKyAgICAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwKKyAgICAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKKyAgICAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwKKyAgICAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywKKyAgICAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOAorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9VU2hvcnQgIGNmZl9leHBlcnRfY2hhcnNldFsxNjZdID0KKyAgeworICAgICAgMCwgICAxLCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LAorICAgIDIzNSwgMjM2LCAyMzcsIDIzOCwgIDEzLCAgMTQsICAxNSwgIDk5LAorICAgIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LAorICAgIDI0NywgMjQ4LCAgMjcsICAyOCwgMjQ5LCAyNTAsIDI1MSwgMjUyLAorICAgIDI1MywgMjU0LCAyNTUsIDI1NiwgMjU3LCAyNTgsIDI1OSwgMjYwLAorICAgIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDEwOSwgMTEwLAorICAgIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LAorICAgIDI3NSwgMjc2LCAyNzcsIDI3OCwgMjc5LCAyODAsIDI4MSwgMjgyLAorICAgIDI4MywgMjg0LCAyODUsIDI4NiwgMjg3LCAyODgsIDI4OSwgMjkwLAorICAgIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LAorICAgIDI5OSwgMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDQsIDMwNSwgMzA2LAorICAgIDMwNywgMzA4LCAzMDksIDMxMCwgMzExLCAzMTIsIDMxMywgMzE0LAorICAgIDMxNSwgMzE2LCAzMTcsIDMxOCwgMTU4LCAxNTUsIDE2MywgMzE5LAorICAgIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsIDMyNiwgMTUwLAorICAgIDE2NCwgMTY5LCAzMjcsIDMyOCwgMzI5LCAzMzAsIDMzMSwgMzMyLAorICAgIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLAorICAgIDM0MSwgMzQyLCAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LAorICAgIDM0OSwgMzUwLCAzNTEsIDM1MiwgMzUzLCAzNTQsIDM1NSwgMzU2LAorICAgIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LAorICAgIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLAorICAgIDM3MywgMzc0LCAzNzUsIDM3NiwgMzc3LCAzNzgKKyAgfTsKKworICBzdGF0aWMgY29uc3QgRlRfVVNob3J0ICBjZmZfZXhwZXJ0c3Vic2V0X2NoYXJzZXRbODddID0KKyAgeworICAgICAgMCwgICAxLCAyMzEsIDIzMiwgMjM1LCAyMzYsIDIzNywgMjM4LAorICAgICAxMywgIDE0LCAgMTUsICA5OSwgMjM5LCAyNDAsIDI0MSwgMjQyLAorICAgIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsICAyNywgIDI4LAorICAgIDI0OSwgMjUwLCAyNTEsIDI1MywgMjU0LCAyNTUsIDI1NiwgMjU3LAorICAgIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LAorICAgIDI2NiwgMTA5LCAxMTAsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcyLAorICAgIDMwMCwgMzAxLCAzMDIsIDMwNSwgMzE0LCAzMTUsIDE1OCwgMTU1LAorICAgIDE2MywgMzIwLCAzMjEsIDMyMiwgMzIzLCAzMjQsIDMyNSwgMzI2LAorICAgIDE1MCwgMTY0LCAxNjksIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLAorICAgIDMzMiwgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LAorICAgIDM0MCwgMzQxLCAzNDIsIDM0MywgMzQ0LCAzNDUsIDM0NgorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9VU2hvcnQgIGNmZl9zdGFuZGFyZF9lbmNvZGluZ1syNTZdID0KKyAgeworICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LAorICAgICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwgIDE2LAorICAgICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LAorICAgICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwgIDMyLAorICAgICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLAorICAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywgIDQ4LAorICAgICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LAorICAgICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywgIDY0LAorICAgICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLAorICAgICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwgIDgwLAorICAgICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LAorICAgICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLAorICAgIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLAorICAgICAgMCwgMTExLCAxMTIsIDExMywgMTE0LCAgIDAsIDExNSwgMTE2LAorICAgIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsICAgMCwgMTIzLAorICAgICAgMCwgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLAorICAgIDEzMSwgICAwLCAxMzIsIDEzMywgICAwLCAxMzQsIDEzNSwgMTM2LAorICAgIDEzNywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgMTM4LCAgIDAsIDEzOSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE0MCwgMTQxLCAxNDIsIDE0MywgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgMTQ0LCAgIDAsICAgMCwgICAwLCAxNDUsICAgMCwgICAwLAorICAgIDE0NiwgMTQ3LCAxNDgsIDE0OSwgICAwLCAgIDAsICAgMCwgICAwCisgIH07CisKKyAgc3RhdGljIGNvbnN0IEZUX1VTaG9ydCAgY2ZmX2V4cGVydF9lbmNvZGluZ1syNTZdID0KKyAgeworICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMSwgMjI5LCAyMzAsICAgMCwgMjMxLCAyMzIsIDIzMywgMjM0LAorICAgIDIzNSwgMjM2LCAyMzcsIDIzOCwgIDEzLCAgMTQsICAxNSwgIDk5LAorICAgIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LAorICAgIDI0NywgMjQ4LCAgMjcsICAyOCwgMjQ5LCAyNTAsIDI1MSwgMjUyLAorICAgICAgMCwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsICAgMCwgICAwLAorICAgICAgMCwgMjU4LCAgIDAsICAgMCwgMjU5LCAyNjAsIDI2MSwgMjYyLAorICAgICAgMCwgICAwLCAyNjMsIDI2NCwgMjY1LCAgIDAsIDI2NiwgMTA5LAorICAgIDExMCwgMjY3LCAyNjgsIDI2OSwgICAwLCAyNzAsIDI3MSwgMjcyLAorICAgIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLAorICAgIDI4MSwgMjgyLCAyODMsIDI4NCwgMjg1LCAyODYsIDI4NywgMjg4LAorICAgIDI4OSwgMjkwLCAyOTEsIDI5MiwgMjkzLCAyOTQsIDI5NSwgMjk2LAorICAgIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgMCwgMzA0LCAzMDUsIDMwNiwgICAwLCAgIDAsIDMwNywgMzA4LAorICAgIDMwOSwgMzEwLCAzMTEsICAgMCwgMzEyLCAgIDAsICAgMCwgMzEyLAorICAgICAgMCwgICAwLCAzMTQsIDMxNSwgICAwLCAgIDAsIDMxNiwgMzE3LAorICAgIDMxOCwgICAwLCAgIDAsICAgMCwgMTU4LCAxNTUsIDE2MywgMzE5LAorICAgIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsICAgMCwgICAwLAorICAgIDMyNiwgMTUwLCAxNjQsIDE2OSwgMzI3LCAzMjgsIDMyOSwgMzMwLAorICAgIDMzMSwgMzMyLCAzMzMsIDMzNCwgMzM1LCAzMzYsIDMzNywgMzM4LAorICAgIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LAorICAgIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsIDM1MywgMzU0LAorICAgIDM1NSwgMzU2LCAzNTcsIDM1OCwgMzU5LCAzNjAsIDM2MSwgMzYyLAorICAgIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLAorICAgIDM3MSwgMzcyLCAzNzMsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4CisgIH07CisKKyNlbmRpZiAvKiAxICovCisKKworICBGVF9MT0NBTF9ERUYoIEZUX1VTaG9ydCApCisgIGNmZl9nZXRfc3RhbmRhcmRfZW5jb2RpbmcoIEZUX1VJbnQgIGNoYXJjb2RlICkKKyAgeworICAgIHJldHVybiAoRlRfVVNob3J0KSggY2hhcmNvZGUgPCAyNTYgPyBjZmZfc3RhbmRhcmRfZW5jb2RpbmdbY2hhcmNvZGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2ZmbG9hZAorCisKKyAgLyogcmVhZCBhbiBvZmZzZXQgZnJvbSB0aGUgaW5kZXgncyBzdHJlYW0gY3VycmVudCBwb3NpdGlvbiAqLworICBzdGF0aWMgRlRfVUxvbmcKKyAgY2ZmX2luZGV4X3JlYWRfb2Zmc2V0KCBDRkZfSW5kZXggIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciAgKmVycm9ycCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gaWR4LT5zdHJlYW07CisgICAgRlRfQnl0ZSAgICB0bXBbNF07CisgICAgRlRfVUxvbmcgICByZXN1bHQgPSAwOworCisKKyAgICBpZiAoICFGVF9TVFJFQU1fUkVBRCggdG1wLCBpZHgtPm9mZl9zaXplICkgKQorICAgIHsKKyAgICAgIEZUX0ludCAgbm47CisKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IGlkeC0+b2ZmX3NpemU7IG5uKysgKQorICAgICAgICByZXN1bHQgPSAoIHJlc3VsdCA8PCA4ICkgfCB0bXBbbm5dOworICAgIH0KKworICAgICplcnJvcnAgPSBlcnJvcjsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2luZGV4X2luaXQoIENGRl9JbmRleCAgaWR4LAorICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIGxvYWQgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX1VTaG9ydCAgY291bnQ7CisKKworICAgIEZUX01FTV9aRVJPKCBpZHgsIHNpemVvZiAoICppZHggKSApOworCisgICAgaWR4LT5zdHJlYW0gPSBzdHJlYW07CisgICAgaWR4LT5zdGFydCAgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgaWYgKCAhRlRfUkVBRF9VU0hPUlQoIGNvdW50ICkgJiYKKyAgICAgICAgIGNvdW50ID4gMCAgICAgICAgICAgICAgICApCisgICAgeworICAgICAgRlRfQnl0ZSAgIG9mZnNpemU7CisgICAgICBGVF9VTG9uZyAgc2l6ZTsKKworCisgICAgICAvKiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZWxlbWVudDsgcmVhZCB0aGUgb2Zmc2V0IHNpemUsICAgICAgICAgICAqLworICAgICAgLyogdGhlbiBhY2Nlc3MgdGhlIG9mZnNldCB0YWJsZSB0byBjb21wdXRlIHRoZSBpbmRleCdzIHRvdGFsIHNpemUgKi8KKyAgICAgIGlmICggRlRfUkVBRF9CWVRFKCBvZmZzaXplICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGlmICggb2Zmc2l6ZSA8IDEgfHwgb2Zmc2l6ZSA+IDQgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgaWR4LT5jb3VudCAgICA9IGNvdW50OworICAgICAgaWR4LT5vZmZfc2l6ZSA9IG9mZnNpemU7CisgICAgICBzaXplICAgICAgICAgID0gKEZUX1VMb25nKSggY291bnQgKyAxICkgKiBvZmZzaXplOworCisgICAgICBpZHgtPmRhdGFfb2Zmc2V0ID0gaWR4LT5zdGFydCArIDMgKyBzaXplOworCisgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCBzaXplIC0gb2Zmc2l6ZSApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBzaXplID0gY2ZmX2luZGV4X3JlYWRfb2Zmc2V0KCBpZHgsICZlcnJvciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBzaXplID09IDAgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgaWR4LT5kYXRhX3NpemUgPSAtLXNpemU7CisKKyAgICAgIGlmICggbG9hZCApCisgICAgICB7CisgICAgICAgIC8qIGxvYWQgdGhlIGRhdGEgKi8KKyAgICAgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCBzaXplLCBpZHgtPmJ5dGVzICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogc2tpcCB0aGUgZGF0YSAqLworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCBzaXplICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIEZUX0ZSRUUoIGlkeC0+b2Zmc2V0cyApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBjZmZfaW5kZXhfZG9uZSggQ0ZGX0luZGV4ICBpZHggKQorICB7CisgICAgaWYgKCBpZHgtPnN0cmVhbSApCisgICAgeworICAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBpZHgtPnN0cmVhbTsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKworICAgICAgaWYgKCBpZHgtPmJ5dGVzICkKKyAgICAgICAgRlRfRlJBTUVfUkVMRUFTRSggaWR4LT5ieXRlcyApOworCisgICAgICBGVF9GUkVFKCBpZHgtPm9mZnNldHMgKTsKKyAgICAgIEZUX01FTV9aRVJPKCBpZHgsIHNpemVvZiAoICppZHggKSApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9pbmRleF9sb2FkX29mZnNldHMoIENGRl9JbmRleCAgaWR4ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gaWR4LT5zdHJlYW07CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKworCisgICAgaWYgKCBpZHgtPmNvdW50ID4gMCAmJiBpZHgtPm9mZnNldHMgPT0gTlVMTCApCisgICAgeworICAgICAgRlRfQnl0ZSAgICBvZmZzaXplID0gaWR4LT5vZmZfc2l6ZTsKKyAgICAgIEZUX1VMb25nICAgZGF0YV9zaXplOworICAgICAgRlRfQnl0ZSogICBwOworICAgICAgRlRfQnl0ZSogICBwX2VuZDsKKyAgICAgIEZUX1VMb25nKiAgcG9mZjsKKworCisgICAgICBkYXRhX3NpemUgPSAoRlRfVUxvbmcpKCBpZHgtPmNvdW50ICsgMSApICogb2Zmc2l6ZTsKKworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGlkeC0+b2Zmc2V0cywgaWR4LT5jb3VudCArIDEgKSB8fAorICAgICAgICAgICBGVF9TVFJFQU1fU0VFSyggaWR4LT5zdGFydCArIDMgKSAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggZGF0YV9zaXplICkgICAgICAgICAgICAgICAgICApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcG9mZiAgID0gaWR4LT5vZmZzZXRzOworICAgICAgcCAgICAgID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOworICAgICAgcF9lbmQgID0gcCArIGRhdGFfc2l6ZTsKKworICAgICAgc3dpdGNoICggb2Zmc2l6ZSApCisgICAgICB7CisgICAgICBjYXNlIDE6CisgICAgICAgIGZvciAoIDsgcCA8IHBfZW5kOyBwKyssIHBvZmYrKyApCisgICAgICAgICAgcG9mZlswXSA9IHBbMF07CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIGZvciAoIDsgcCA8IHBfZW5kOyBwICs9IDIsIHBvZmYrKyApCisgICAgICAgICAgcG9mZlswXSA9IEZUX1BFRUtfVVNIT1JUKCBwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDM6CisgICAgICAgIGZvciAoIDsgcCA8IHBfZW5kOyBwICs9IDMsIHBvZmYrKyApCisgICAgICAgICAgcG9mZlswXSA9IEZUX1BFRUtfVU9GRjMoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGZvciAoIDsgcCA8IHBfZW5kOyBwICs9IDQsIHBvZmYrKyApCisgICAgICAgICAgcG9mZlswXSA9IEZUX1BFRUtfVUxPTkcoIHAgKTsKKyAgICAgIH0KKworICAgICAgRlRfRlJBTUVfRVhJVCgpOworICAgIH0KKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgICAgRlRfRlJFRSggaWR4LT5vZmZzZXRzICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIEFsbG9jYXRlIGEgdGFibGUgY29udGFpbmluZyBwb2ludGVycyB0byBhbiBpbmRleCdzIGVsZW1lbnRzLiAqLworICAvKiBUaGUgYHBvb2wnIGFyZ3VtZW50IG1ha2VzIHRoaXMgZnVuY3Rpb24gY29udmVydCB0aGUgaW5kZXggICAgKi8KKyAgLyogZW50cmllcyB0byBDLXN0eWxlIHN0cmluZ3MgKHRoaXMgaXMsIE5VTEwtdGVybWluYXRlZCkuICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKCBDRkZfSW5kZXggICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiogIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogICBwb29sICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgICAgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ICAgID0gaWR4LT5zdHJlYW0tPm1lbW9yeTsKKworICAgIEZUX0J5dGUqKiAgdCAgICAgICAgID0gTlVMTDsKKyAgICBGVF9CeXRlKiAgIG5ld19ieXRlcyA9IE5VTEw7CisKKworICAgICp0YWJsZSA9IE5VTEw7CisKKyAgICBpZiAoIGlkeC0+b2Zmc2V0cyA9PSBOVUxMICkKKyAgICB7CisgICAgICBlcnJvciA9IGNmZl9pbmRleF9sb2FkX29mZnNldHMoIGlkeCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGlkeC0+Y291bnQgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhRlRfTkVXX0FSUkFZKCB0LCBpZHgtPmNvdW50ICsgMSApICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCAhcG9vbCB8fCAhRlRfQUxMT0MoIG5ld19ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgtPmRhdGFfc2l6ZSArIGlkeC0+Y291bnQgKSApICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgbiwgY3VyX29mZnNldDsKKyAgICAgIEZUX1VMb25nICBleHRyYSA9IDA7CisgICAgICBGVF9CeXRlKiAgb3JnX2J5dGVzID0gaWR4LT5ieXRlczsKKworCisgICAgICAvKiBhdCB0aGlzIHBvaW50LCBgaWR4LT5vZmZzZXRzJyBjYW4ndCBiZSBOVUxMICovCisgICAgICBjdXJfb2Zmc2V0ID0gaWR4LT5vZmZzZXRzWzBdIC0gMTsKKworICAgICAgLyogc2FuaXR5IGNoZWNrICovCisgICAgICBpZiAoIGN1cl9vZmZzZXQgIT0gMCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzOiIKKyAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGZpcnN0IG9mZnNldCB2YWx1ZSAlZCBzZXQgdG8gemVyb1xuIiwKKyAgICAgICAgICAgICAgICAgICAgY3VyX29mZnNldCApKTsKKyAgICAgICAgY3VyX29mZnNldCA9IDA7CisgICAgICB9CisKKyAgICAgIGlmICggIXBvb2wgKQorICAgICAgICB0WzBdID0gb3JnX2J5dGVzICsgY3VyX29mZnNldDsKKyAgICAgIGVsc2UKKyAgICAgICAgdFswXSA9IG5ld19ieXRlcyArIGN1cl9vZmZzZXQ7CisKKyAgICAgIGZvciAoIG4gPSAxOyBuIDw9IGlkeC0+Y291bnQ7IG4rKyApCisgICAgICB7CisgICAgICAgIEZUX1VMb25nICBuZXh0X29mZnNldCA9IGlkeC0+b2Zmc2V0c1tuXSAtIDE7CisKKworICAgICAgICAvKiB0d28gc2FuaXR5IGNoZWNrcyBmb3IgaW52YWxpZCBvZmZzZXQgdGFibGVzICovCisgICAgICAgIGlmICggbmV4dF9vZmZzZXQgPCBjdXJfb2Zmc2V0ICkKKyAgICAgICAgICBuZXh0X29mZnNldCA9IGN1cl9vZmZzZXQ7CisgICAgICAgIGVsc2UgaWYgKCBuZXh0X29mZnNldCA+IGlkeC0+ZGF0YV9zaXplICkKKyAgICAgICAgICBuZXh0X29mZnNldCA9IGlkeC0+ZGF0YV9zaXplOworCisgICAgICAgIGlmICggIXBvb2wgKQorICAgICAgICAgIHRbbl0gPSBvcmdfYnl0ZXMgKyBuZXh0X29mZnNldDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdFtuXSA9IG5ld19ieXRlcyArIG5leHRfb2Zmc2V0ICsgZXh0cmE7CisKKyAgICAgICAgICBpZiAoIG5leHRfb2Zmc2V0ICE9IGN1cl9vZmZzZXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX01FTV9DT1BZKCB0W24gLSAxXSwgb3JnX2J5dGVzICsgY3VyX29mZnNldCwgdFtuXSAtIHRbbiAtIDFdICk7CisgICAgICAgICAgICB0W25dWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIHRbbl0gICArPSAxOworICAgICAgICAgICAgZXh0cmErKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXJfb2Zmc2V0ID0gbmV4dF9vZmZzZXQ7CisgICAgICB9CisgICAgICAqdGFibGUgPSB0OworCisgICAgICBpZiAoIHBvb2wgKQorICAgICAgICAqcG9vbCA9IG5ld19ieXRlczsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfaW5kZXhfYWNjZXNzX2VsZW1lbnQoIENGRl9JbmRleCAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIHBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHBieXRlX2xlbiApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggaWR4ICYmIGlkeC0+Y291bnQgPiBlbGVtZW50ICkKKyAgICB7CisgICAgICAvKiBjb21wdXRlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyAqLworICAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBpZHgtPnN0cmVhbTsKKyAgICAgIEZUX1VMb25nICAgb2ZmMSwgb2ZmMiA9IDA7CisKKworICAgICAgLyogbG9hZCBvZmZzZXRzIGZyb20gZmlsZSBvciB0aGUgb2Zmc2V0IHRhYmxlICovCisgICAgICBpZiAoICFpZHgtPm9mZnNldHMgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgcG9zID0gZWxlbWVudCAqIGlkeC0+b2ZmX3NpemU7CisKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBpZHgtPnN0YXJ0ICsgMyArIHBvcyApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgb2ZmMSA9IGNmZl9pbmRleF9yZWFkX29mZnNldCggaWR4LCAmZXJyb3IgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGlmICggb2ZmMSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudCsrOworICAgICAgICAgICAgb2ZmMiA9IGNmZl9pbmRleF9yZWFkX29mZnNldCggaWR4LCAmZXJyb3IgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUgKCBvZmYyID09IDAgJiYgZWxlbWVudCA8IGlkeC0+Y291bnQgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSAgIC8qIHVzZSBvZmZzZXRzIHRhYmxlICovCisgICAgICB7CisgICAgICAgIG9mZjEgPSBpZHgtPm9mZnNldHNbZWxlbWVudF07CisgICAgICAgIGlmICggb2ZmMSApCisgICAgICAgIHsKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQrKzsKKyAgICAgICAgICAgIG9mZjIgPSBpZHgtPm9mZnNldHNbZWxlbWVudF07CisKKyAgICAgICAgICB9IHdoaWxlICggb2ZmMiA9PSAwICYmIGVsZW1lbnQgPCBpZHgtPmNvdW50ICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogWFhYOiBzaG91bGQgY2hlY2sgb2ZmMiBkb2VzIG5vdCBleGNlZWQgdGhlIGVuZCBvZiB0aGlzIGVudHJ5OyAqLworICAgICAgLyogICAgICBhdCBwcmVzZW50LCBvbmx5IHRydW5jYXRlIG9mZjIgYXQgdGhlIGVuZCBvZiB0aGlzIHN0cmVhbSAqLworICAgICAgaWYgKCBvZmYyID4gc3RyZWFtLT5zaXplICsgMSAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgaWR4LT5kYXRhX29mZnNldCA+IHN0cmVhbS0+c2l6ZSAtIG9mZjIgKyAxICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50OiIKKyAgICAgICAgICAgICAgICAgICAiIG9mZnNldCB0byBuZXh0IGVudHJ5ICglZCkiCisgICAgICAgICAgICAgICAgICAgIiBleGNlZWRzIHRoZSBlbmQgb2Ygc3RyZWFtICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgb2ZmMiwgc3RyZWFtLT5zaXplIC0gaWR4LT5kYXRhX29mZnNldCArIDEgKSk7CisgICAgICAgIG9mZjIgPSBzdHJlYW0tPnNpemUgLSBpZHgtPmRhdGFfb2Zmc2V0ICsgMTsKKyAgICAgIH0KKworICAgICAgLyogYWNjZXNzIGVsZW1lbnQgKi8KKyAgICAgIGlmICggb2ZmMSAmJiBvZmYyID4gb2ZmMSApCisgICAgICB7CisgICAgICAgICpwYnl0ZV9sZW4gPSBvZmYyIC0gb2ZmMTsKKworICAgICAgICBpZiAoIGlkeC0+Ynl0ZXMgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBpbmRleCB3YXMgY29tcGxldGVseSBsb2FkZWQgaW4gbWVtb3J5LCB0aGF0J3MgZWFzeSAqLworICAgICAgICAgICpwYnl0ZXMgPSBpZHgtPmJ5dGVzICsgb2ZmMSAtIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBpbmRleCBpcyBzdGlsbCBvbiBkaXNrL2ZpbGUsIGFjY2VzcyBpdCB0aHJvdWdoIGEgZnJhbWUgKi8KKyAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBpZHgtPmRhdGFfb2Zmc2V0ICsgb2ZmMSAtIDEgKSB8fAorICAgICAgICAgICAgICAgRlRfRlJBTUVfRVhUUkFDVCggb2ZmMiAtIG9mZjEsICpwYnl0ZXMgKSAgICAgICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBlbXB0eSBpbmRleCBlbGVtZW50ICovCisgICAgICAgICpwYnl0ZXMgICAgPSAwOworICAgICAgICAqcGJ5dGVfbGVuID0gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfaW5kZXhfZm9yZ2V0X2VsZW1lbnQoIENGRl9JbmRleCAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICkKKyAgeworICAgIGlmICggaWR4LT5ieXRlcyA9PSAwICkKKyAgICB7CisgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGlkeC0+c3RyZWFtOworCisKKyAgICAgIEZUX0ZSQU1FX1JFTEVBU0UoICpwYnl0ZXMgKTsKKyAgICB9CisgIH0KKworCisgIC8qIGdldCBhbiBlbnRyeSBmcm9tIE5hbWUgSU5ERVggKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9TdHJpbmcqICkKKyAgY2ZmX2luZGV4X2dldF9uYW1lKCBDRkZfRm9udCAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZWxlbWVudCApCisgIHsKKyAgICBDRkZfSW5kZXggICBpZHggPSAmZm9udC0+bmFtZV9pbmRleDsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBpZHgtPnN0cmVhbS0+bWVtb3J5OworICAgIEZUX0J5dGUqICAgIGJ5dGVzOworICAgIEZUX1VMb25nICAgIGJ5dGVfbGVuOworICAgIEZUX0Vycm9yICAgIGVycm9yOworICAgIEZUX1N0cmluZyogIG5hbWUgPSAwOworCisKKyAgICBlcnJvciA9IGNmZl9pbmRleF9hY2Nlc3NfZWxlbWVudCggaWR4LCBlbGVtZW50LCAmYnl0ZXMsICZieXRlX2xlbiApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCAhRlRfQUxMT0MoIG5hbWUsIGJ5dGVfbGVuICsgMSApICkKKyAgICB7CisgICAgICBGVF9NRU1fQ09QWSggbmFtZSwgYnl0ZXMsIGJ5dGVfbGVuICk7CisgICAgICBuYW1lW2J5dGVfbGVuXSA9IDA7CisgICAgfQorICAgIGNmZl9pbmRleF9mb3JnZXRfZWxlbWVudCggaWR4LCAmYnl0ZXMgKTsKKworICBFeGl0OgorICAgIHJldHVybiBuYW1lOworICB9CisKKworICAvKiBnZXQgYW4gZW50cnkgZnJvbSBTdHJpbmcgSU5ERVggKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9TdHJpbmcqICkKKyAgY2ZmX2luZGV4X2dldF9zdHJpbmcoIENGRl9Gb250ICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGVsZW1lbnQgKQorICB7CisgICAgcmV0dXJuICggZWxlbWVudCA8IGZvbnQtPm51bV9zdHJpbmdzICkKKyAgICAgICAgICAgICA/IChGVF9TdHJpbmcqKWZvbnQtPnN0cmluZ3NbZWxlbWVudF0KKyAgICAgICAgICAgICA6IE5VTEw7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfU3RyaW5nKiApCisgIGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggQ0ZGX0ZvbnQgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIHNpZCApCisgIHsKKyAgICAvKiB2YWx1ZSAweEZGRkZVIGluZGljYXRlcyBhIG1pc3NpbmcgZGljdGlvbmFyeSBlbnRyeSAqLworICAgIGlmICggc2lkID09IDB4RkZGRlUgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBpZiBpdCBpcyBub3QgYSBzdGFuZGFyZCBzdHJpbmcsIHJldHVybiBpdCAqLworICAgIGlmICggc2lkID4gMzkwICkKKyAgICAgIHJldHVybiBjZmZfaW5kZXhfZ2V0X3N0cmluZyggZm9udCwgc2lkIC0gMzkxICk7CisKKyAgICAvKiBDSUQta2V5ZWQgQ0ZGIGZvbnRzIGRvbid0IGhhdmUgZ2x5cGggbmFtZXMgKi8KKyAgICBpZiAoICFmb250LT5wc25hbWVzICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogdGhpcyBpcyBhIHN0YW5kYXJkIHN0cmluZyAqLworICAgIHJldHVybiAoRlRfU3RyaW5nICopZm9udC0+cHNuYW1lcy0+YWRvYmVfc3RkX3N0cmluZ3MoIHNpZCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgRkQgU2VsZWN0IHRhYmxlIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHN0YXRpYyB2b2lkCisgIENGRl9Eb25lX0ZEX1NlbGVjdCggQ0ZGX0ZEU2VsZWN0ICBmZHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgIHN0cmVhbSApCisgIHsKKyAgICBpZiAoIGZkc2VsZWN0LT5kYXRhICkKKyAgICAgIEZUX0ZSQU1FX1JFTEVBU0UoIGZkc2VsZWN0LT5kYXRhICk7CisKKyAgICBmZHNlbGVjdC0+ZGF0YV9zaXplICAgPSAwOworICAgIGZkc2VsZWN0LT5mb3JtYXQgICAgICA9IDA7CisgICAgZmRzZWxlY3QtPnJhbmdlX2NvdW50ID0gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIENGRl9Mb2FkX0ZEX1NlbGVjdCggQ0ZGX0ZEU2VsZWN0ICBmZHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIG51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBvZmZzZXQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX0J5dGUgICBmb3JtYXQ7CisgICAgRlRfVUludCAgIG51bV9yYW5nZXM7CisKKworICAgIC8qIHJlYWQgZm9ybWF0ICovCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgfHwgRlRfUkVBRF9CWVRFKCBmb3JtYXQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBmZHNlbGVjdC0+Zm9ybWF0ICAgICAgPSBmb3JtYXQ7CisgICAgZmRzZWxlY3QtPmNhY2hlX2NvdW50ID0gMDsgICAvKiBjbGVhciBjYWNoZSAqLworCisgICAgc3dpdGNoICggZm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAwOiAgICAgLyogZm9ybWF0IDAsIHRoYXQncyBzaW1wbGUgKi8KKyAgICAgIGZkc2VsZWN0LT5kYXRhX3NpemUgPSBudW1fZ2x5cGhzOworICAgICAgZ290byBMb2FkX0RhdGE7CisKKyAgICBjYXNlIDM6ICAgICAvKiBmb3JtYXQgMywgYSB0YWQgbW9yZSBjb21wbGV4ICovCisgICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1fcmFuZ2VzICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGlmICggIW51bV9yYW5nZXMgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTAoKCAiQ0ZGX0xvYWRfRkRfU2VsZWN0OiBlbXB0eSBGRFNlbGVjdCBhcnJheVxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGZkc2VsZWN0LT5kYXRhX3NpemUgPSBudW1fcmFuZ2VzICogMyArIDI7CisKKyAgICBMb2FkX0RhdGE6CisgICAgICBpZiAoIEZUX0ZSQU1FX0VYVFJBQ1QoIGZkc2VsZWN0LT5kYXRhX3NpemUsIGZkc2VsZWN0LT5kYXRhICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6ICAgIC8qIGhtbS4uLiB0aGF0J3Mgd3JvbmcgKi8KKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQnl0ZSApCisgIGNmZl9mZF9zZWxlY3RfZ2V0KCBDRkZfRkRTZWxlY3QgIGZkc2VsZWN0LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCApCisgIHsKKyAgICBGVF9CeXRlICBmZCA9IDA7CisKKworICAgIHN3aXRjaCAoIGZkc2VsZWN0LT5mb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBmZCA9IGZkc2VsZWN0LT5kYXRhW2dseXBoX2luZGV4XTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgLyogZmlyc3QsIGNvbXBhcmUgdG8gdGhlIGNhY2hlICovCisgICAgICBpZiAoIChGVF9VSW50KSggZ2x5cGhfaW5kZXggLSBmZHNlbGVjdC0+Y2FjaGVfZmlyc3QgKSA8CisgICAgICAgICAgICAgICAgICAgICAgICBmZHNlbGVjdC0+Y2FjaGVfY291bnQgKQorICAgICAgeworICAgICAgICBmZCA9IGZkc2VsZWN0LT5jYWNoZV9mZDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qIHRoZW4sIGxvb2sgdXAgdGhlIHJhbmdlcyBhcnJheSAqLworICAgICAgeworICAgICAgICBGVF9CeXRlKiAgcCAgICAgICA9IGZkc2VsZWN0LT5kYXRhOworICAgICAgICBGVF9CeXRlKiAgcF9saW1pdCA9IHAgKyBmZHNlbGVjdC0+ZGF0YV9zaXplOworICAgICAgICBGVF9CeXRlICAgZmQyOworICAgICAgICBGVF9VSW50ICAgZmlyc3QsIGxpbWl0OworCisKKyAgICAgICAgZmlyc3QgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgaWYgKCBnbHlwaF9pbmRleCA8IGZpcnN0ICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZmQyICAgPSAqcCsrOworICAgICAgICAgIGxpbWl0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICAgIGlmICggZ2x5cGhfaW5kZXggPCBsaW1pdCApCisgICAgICAgICAgeworICAgICAgICAgICAgZmQgPSBmZDI7CisKKyAgICAgICAgICAgIC8qIHVwZGF0ZSBjYWNoZSAqLworICAgICAgICAgICAgZmRzZWxlY3QtPmNhY2hlX2ZpcnN0ID0gZmlyc3Q7CisgICAgICAgICAgICBmZHNlbGVjdC0+Y2FjaGVfY291bnQgPSBsaW1pdCAtIGZpcnN0OworICAgICAgICAgICAgZmRzZWxlY3QtPmNhY2hlX2ZkICAgID0gZmQyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGZpcnN0ID0gbGltaXQ7CisKKyAgICAgICAgfSB3aGlsZSAoIHAgPCBwX2xpbWl0ICk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICA7CisgICAgfQorCisgICAgcmV0dXJuIGZkOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqLworICAvKioqICAgQ0ZGIGZvbnQgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKi8KKyAgLyoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzKCBDRkZfQ2hhcnNldCAgY2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgICA9IEZUX0Vycl9PazsKKyAgICBGVF9VSW50ICAgIGk7CisgICAgRlRfTG9uZyAgICBqOworICAgIEZUX1VTaG9ydCAgbWF4X2NpZCA9IDA7CisKKworICAgIGlmICggY2hhcnNldC0+bWF4X2NpZCA+IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggY2hhcnNldC0+c2lkc1tpXSA+IG1heF9jaWQgKQorICAgICAgICBtYXhfY2lkID0gY2hhcnNldC0+c2lkc1tpXTsKKyAgICB9CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggY2hhcnNldC0+Y2lkcywgKEZUX1VMb25nKW1heF9jaWQgKyAxICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogV2hlbiBtdWx0aXBsZSBHSURzIG1hcCB0byB0aGUgc2FtZSBDSUQsIHdlIGNob29zZSB0aGUgbG93ZXN0ICovCisgICAgLyogR0lELiAgVGhpcyBpcyBub3QgZGVzY3JpYmVkIGluIGFueSBzcGVjLCBidXQgaXQgbWF0Y2hlcyB0aGUgICovCisgICAgLyogYmVoYXZpb3VyIG9mIHJlY2VudCBBY3JvcmVhZCB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICggaiA9IChGVF9Mb25nKW51bV9nbHlwaHMgLSAxOyBqID49IDAgOyBqLS0gKQorICAgICAgY2hhcnNldC0+Y2lkc1tjaGFyc2V0LT5zaWRzW2pdXSA9IChGVF9VU2hvcnQpajsKKworICAgIGNoYXJzZXQtPm1heF9jaWQgICAgPSBtYXhfY2lkOworICAgIGNoYXJzZXQtPm51bV9nbHlwaHMgPSBudW1fZ2x5cGhzOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX1VJbnQgKQorICBjZmZfY2hhcnNldF9jaWRfdG9fZ2luZGV4KCBDRkZfQ2hhcnNldCAgY2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGNpZCApCisgIHsKKyAgICBGVF9VSW50ICByZXN1bHQgPSAwOworCisKKyAgICBpZiAoIGNpZCA8PSBjaGFyc2V0LT5tYXhfY2lkICkKKyAgICAgIHJlc3VsdCA9IGNoYXJzZXQtPmNpZHNbY2lkXTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGNmZl9jaGFyc2V0X2ZyZWVfY2lkcyggQ0ZGX0NoYXJzZXQgIGNoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9GUkVFKCBjaGFyc2V0LT5jaWRzICk7CisgICAgY2hhcnNldC0+bWF4X2NpZCA9IDA7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGNmZl9jaGFyc2V0X2RvbmUoIENGRl9DaGFyc2V0ICBjaGFyc2V0LAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKworICAgIGNmZl9jaGFyc2V0X2ZyZWVfY2lkcyggY2hhcnNldCwgbWVtb3J5ICk7CisKKyAgICBGVF9GUkVFKCBjaGFyc2V0LT5zaWRzICk7CisgICAgY2hhcnNldC0+Zm9ybWF0ID0gMDsKKyAgICBjaGFyc2V0LT5vZmZzZXQgPSAwOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2NoYXJzZXRfbG9hZCggQ0ZGX0NoYXJzZXQgIGNoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBudW1fZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgYmFzZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBpbnZlcnQgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9VU2hvcnQgIGdseXBoX3NpZDsKKworCisgICAgLyogSWYgdGhlIHRoZSBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIDIsIHdlIGhhdmUgdG8gcGFyc2UgdGhlICovCisgICAgLyogY2hhcnNldCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBvZmZzZXQgPiAyICkKKyAgICB7CisgICAgICBGVF9VSW50ICBqOworCisKKyAgICAgIGNoYXJzZXQtPm9mZnNldCA9IGJhc2Vfb2Zmc2V0ICsgb2Zmc2V0OworCisgICAgICAvKiBHZXQgdGhlIGZvcm1hdCBvZiB0aGUgdGFibGUuICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBjaGFyc2V0LT5vZmZzZXQgKSB8fAorICAgICAgICAgICBGVF9SRUFEX0JZVEUoIGNoYXJzZXQtPmZvcm1hdCApICAgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc2lkcy4gKi8KKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBjaGFyc2V0LT5zaWRzLCBudW1fZ2x5cGhzICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIC8qIGFzc2lnbiB0aGUgLm5vdGRlZiBnbHlwaCAqLworICAgICAgY2hhcnNldC0+c2lkc1swXSA9IDA7CisKKyAgICAgIHN3aXRjaCAoIGNoYXJzZXQtPmZvcm1hdCApCisgICAgICB7CisgICAgICBjYXNlIDA6CisgICAgICAgIGlmICggbnVtX2dseXBocyA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggKCBudW1fZ2x5cGhzIC0gMSApICogMiApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgIGZvciAoIGogPSAxOyBqIDwgbnVtX2dseXBoczsgaisrICkKKyAgICAgICAgICAgIGNoYXJzZXQtPnNpZHNbal0gPSBGVF9HRVRfVVNIT1JUKCk7CisKKyAgICAgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMToKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIG5sZWZ0OworICAgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICAgIGogPSAxOworCisgICAgICAgICAgd2hpbGUgKCBqIDwgbnVtX2dseXBocyApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogUmVhZCB0aGUgZmlyc3QgZ2x5cGggc2lkIG9mIHRoZSByYW5nZS4gKi8KKyAgICAgICAgICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIGdseXBoX3NpZCApICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICAvKiBSZWFkIHRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSByYW5nZS4gICovCisgICAgICAgICAgICBpZiAoIGNoYXJzZXQtPmZvcm1hdCA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBGVF9SRUFEX1VTSE9SVCggbmxlZnQgKSApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIEZUX1JFQURfQllURSggbmxlZnQgKSApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB0cnkgdG8gcmVzY3VlIHNvbWUgb2YgdGhlIFNJRHMgaWYgYG5sZWZ0JyBpcyB0b28gbGFyZ2UgKi8KKyAgICAgICAgICAgIGlmICggZ2x5cGhfc2lkID4gMHhGRkZGTCAtIG5sZWZ0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2NoYXJzZXRfbG9hZDogaW52YWxpZCBTSUQgcmFuZ2UgdHJpbW1lZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG5sZWZ0PSVkIC0+ICVkXG4iLCBubGVmdCwgMHhGRkZGTCAtIGdseXBoX3NpZCApKTsKKyAgICAgICAgICAgICAgbmxlZnQgPSAoIEZUX1VJbnQgKSggMHhGRkZGTCAtIGdseXBoX3NpZCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSByYW5nZSBvZiBzaWRzIC0tIGBubGVmdCArIDEnIGdseXBocy4gKi8KKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBqIDwgbnVtX2dseXBocyAmJiBpIDw9IG5sZWZ0OyBpKyssIGorKywgZ2x5cGhfc2lkKysgKQorICAgICAgICAgICAgICBjaGFyc2V0LT5zaWRzW2pdID0gZ2x5cGhfc2lkOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2NoYXJzZXRfbG9hZDogaW52YWxpZCB0YWJsZSBmb3JtYXRcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUGFyc2UgZGVmYXVsdCB0YWJsZXMgY29ycmVzcG9uZGluZyB0byBvZmZzZXQgPT0gMCwgMSwgb3IgMi4gICovCisgICAgICAvKiBDRkYgc3BlY2lmaWNhdGlvbiBpbnRpbWF0ZXMgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogSW4gb3JkZXIgdG8gdXNlIGEgcHJlZGVmaW5lZCBjaGFyc2V0LCB0aGUgZm9sbG93aW5nIG11c3QgYmUgICovCisgICAgICAvKiB0cnVlOiBUaGUgY2hhcnNldCBjb25zdHJ1Y3RlZCBmb3IgdGhlIGdseXBocyBpbiB0aGUgZm9udCdzICAgKi8KKyAgICAgIC8qIGNoYXJzdHJpbmdzIGRpY3Rpb25hcnkgbXVzdCBtYXRjaCB0aGUgcHJlZGVmaW5lZCBjaGFyc2V0IGluICAqLworICAgICAgLyogdGhlIGZpcnN0IG51bV9nbHlwaHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGNoYXJzZXQtPm9mZnNldCA9IG9mZnNldDsgIC8qIHJlY29yZCBjaGFyc2V0IHR5cGUgKi8KKworICAgICAgc3dpdGNoICggKEZUX1VJbnQpb2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCBudW1fZ2x5cGhzID4gMjI5ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9jaGFyc2V0X2xvYWQ6IGltcGxpY2l0IGNoYXJzZXQgbGFyZ2VyIHRoYW5cbiIKKyAgICAgICAgICAgICAgICAgICAgICJwcmVkZWZpbmVkIGNoYXJzZXQgKEFkb2JlIElTTy1MYXRpbilcbiIgKSk7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc2lkcy4gKi8KKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGNoYXJzZXQtPnNpZHMsIG51bV9nbHlwaHMgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIC8qIENvcHkgdGhlIHByZWRlZmluZWQgY2hhcnNldCBpbnRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAqLworICAgICAgICBGVF9BUlJBWV9DT1BZKCBjaGFyc2V0LT5zaWRzLCBjZmZfaXNvYWRvYmVfY2hhcnNldCwgbnVtX2dseXBocyApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDE6CisgICAgICAgIGlmICggbnVtX2dseXBocyA+IDE2NiApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJjZmZfY2hhcnNldF9sb2FkOiBpbXBsaWNpdCBjaGFyc2V0IGxhcmdlciB0aGFuXG4iCisgICAgICAgICAgICAgICAgICAgICAicHJlZGVmaW5lZCBjaGFyc2V0IChBZG9iZSBFeHBlcnQpXG4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNpZHMuICovCisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBjaGFyc2V0LT5zaWRzLCBudW1fZ2x5cGhzICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBDb3B5IHRoZSBwcmVkZWZpbmVkIGNoYXJzZXQgaW50byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gICAgICovCisgICAgICAgIEZUX0FSUkFZX0NPUFkoIGNoYXJzZXQtPnNpZHMsIGNmZl9leHBlcnRfY2hhcnNldCwgbnVtX2dseXBocyApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIGlmICggbnVtX2dseXBocyA+IDg3ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9jaGFyc2V0X2xvYWQ6IGltcGxpY2l0IGNoYXJzZXQgbGFyZ2VyIHRoYW5cbiIKKyAgICAgICAgICAgICAgICAgICAgICJwcmVkZWZpbmVkIGNoYXJzZXQgKEFkb2JlIEV4cGVydCBTdWJzZXQpXG4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNpZHMuICovCisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBjaGFyc2V0LT5zaWRzLCBudW1fZ2x5cGhzICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBDb3B5IHRoZSBwcmVkZWZpbmVkIGNoYXJzZXQgaW50byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gICAgICovCisgICAgICAgIEZUX0FSUkFZX0NPUFkoIGNoYXJzZXQtPnNpZHMsIGNmZl9leHBlcnRzdWJzZXRfY2hhcnNldCwgbnVtX2dseXBocyApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB3ZSBoYXZlIHRvIGludmVydCB0aGUgYHNpZHMnIGFycmF5IGZvciBzdWJzZXR0ZWQgQ0lELWtleWVkIGZvbnRzICovCisgICAgaWYgKCBpbnZlcnQgKQorICAgICAgZXJyb3IgPSBjZmZfY2hhcnNldF9jb21wdXRlX2NpZHMoIGNoYXJzZXQsIG51bV9nbHlwaHMsIG1lbW9yeSApOworCisgIEV4aXQ6CisgICAgLyogQ2xlYW4gdXAgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAqLworICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGNoYXJzZXQtPnNpZHMgKTsKKyAgICAgIEZUX0ZSRUUoIGNoYXJzZXQtPmNpZHMgKTsKKyAgICAgIGNoYXJzZXQtPmZvcm1hdCA9IDA7CisgICAgICBjaGFyc2V0LT5vZmZzZXQgPSAwOworICAgICAgY2hhcnNldC0+c2lkcyAgID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGNmZl9lbmNvZGluZ19kb25lKCBDRkZfRW5jb2RpbmcgIGVuY29kaW5nICkKKyAgeworICAgIGVuY29kaW5nLT5mb3JtYXQgPSAwOworICAgIGVuY29kaW5nLT5vZmZzZXQgPSAwOworICAgIGVuY29kaW5nLT5jb3VudCAgPSAwOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX2VuY29kaW5nX2xvYWQoIENGRl9FbmNvZGluZyAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBDRkZfQ2hhcnNldCAgIGNoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIG51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgYmFzZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIG9mZnNldCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VJbnQgICAgY291bnQ7CisgICAgRlRfVUludCAgICBqOworICAgIEZUX1VTaG9ydCAgZ2x5cGhfc2lkOworICAgIEZUX1VJbnQgICAgZ2x5cGhfY29kZTsKKworCisgICAgLyogQ2hlY2sgZm9yIGNoYXJzZXQtPnNpZHMuICBJZiB3ZSBkbyBub3QgaGF2ZSB0aGlzLCB3ZSBmYWlsLiAqLworICAgIGlmICggIWNoYXJzZXQtPnNpZHMgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBaZXJvIG91dCB0aGUgY29kZSB0byBnaWQvc2lkIG1hcHBpbmdzLiAqLworICAgIGZvciAoIGogPSAwOyBqIDwgMjU2OyBqKysgKQorICAgIHsKKyAgICAgIGVuY29kaW5nLT5zaWRzIFtqXSA9IDA7CisgICAgICBlbmNvZGluZy0+Y29kZXNbal0gPSAwOworICAgIH0KKworICAgIC8qIE5vdGU6IFRoZSBlbmNvZGluZyB0YWJsZSBpbiBhIENGRiBmb250IGlzIGluZGV4ZWQgYnkgZ2x5cGggaW5kZXg7ICAqLworICAgIC8qIHRoZSBmaXJzdCBlbmNvZGVkIGdseXBoIGluZGV4IGlzIDEuICBIZW5jZSwgd2UgcmVhZCB0aGUgY2hhcmFjdGVyICAqLworICAgIC8qIGNvZGUgKGBnbHlwaF9jb2RlJykgYXQgaW5kZXggaiBhbmQgbWFrZSB0aGUgYXNzaWdubWVudDogICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgIGVuY29kaW5nLT5jb2Rlc1tnbHlwaF9jb2RlXSA9IGogKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFdlIGFsc28gbWFrZSB0aGUgYXNzaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgIGVuY29kaW5nLT5zaWRzW2dseXBoX2NvZGVdID0gY2hhcnNldC0+c2lkc1tqICsgMV0gICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFRoaXMgZ2l2ZXMgdXMgYm90aCBhIGNvZGUgdG8gR0lEIGFuZCBhIGNvZGUgdG8gU0lEIG1hcHBpbmcuICAgICAgICAqLworCisgICAgaWYgKCBvZmZzZXQgPiAxICkKKyAgICB7CisgICAgICBlbmNvZGluZy0+b2Zmc2V0ID0gYmFzZV9vZmZzZXQgKyBvZmZzZXQ7CisKKyAgICAgIC8qIHdlIG5lZWQgdG8gcGFyc2UgdGhlIHRhYmxlIHRvIGRldGVybWluZSBpdHMgc2l6ZSAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZW5jb2RpbmctPm9mZnNldCApIHx8CisgICAgICAgICAgIEZUX1JFQURfQllURSggZW5jb2RpbmctPmZvcm1hdCApICAgfHwKKyAgICAgICAgICAgRlRfUkVBRF9CWVRFKCBjb3VudCApICAgICAgICAgICAgICApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgc3dpdGNoICggZW5jb2RpbmctPmZvcm1hdCAmIDB4N0YgKQorICAgICAgeworICAgICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogIHA7CisKKworICAgICAgICAgIC8qIEJ5IGNvbnZlbnRpb24sIEdJRCAwIGlzIGFsd2F5cyAiLm5vdGRlZiIgYW5kIGlzIG5ldmVyICovCisgICAgICAgICAgLyogY29kZWQgaW4gdGhlIGZvbnQuICBIZW5jZSwgdGhlIG51bWJlciBvZiBjb2RlcyBmb3VuZCAgKi8KKyAgICAgICAgICAvKiBpbiB0aGUgdGFibGUgaXMgYGNvdW50KzEnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgZW5jb2RpbmctPmNvdW50ID0gY291bnQgKyAxOworCisgICAgICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggY291bnQgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBwID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOworCisgICAgICAgICAgZm9yICggaiA9IDE7IGogPD0gY291bnQ7IGorKyApCisgICAgICAgICAgeworICAgICAgICAgICAgZ2x5cGhfY29kZSA9ICpwKys7CisKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBqIGlzIG5vdCB0b28gYmlnLiAqLworICAgICAgICAgICAgaWYgKCBqIDwgbnVtX2dseXBocyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEFzc2lnbiBjb2RlIHRvIEdJRCBtYXBwaW5nLiAqLworICAgICAgICAgICAgICBlbmNvZGluZy0+Y29kZXNbZ2x5cGhfY29kZV0gPSAoRlRfVVNob3J0KWo7CisKKyAgICAgICAgICAgICAgLyogQXNzaWduIGNvZGUgdG8gU0lEIG1hcHBpbmcuICovCisgICAgICAgICAgICAgIGVuY29kaW5nLT5zaWRzW2dseXBoX2NvZGVdID0gY2hhcnNldC0+c2lkc1tqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIG5sZWZ0OworICAgICAgICAgIEZUX1VJbnQgIGkgPSAxOworICAgICAgICAgIEZUX1VJbnQgIGs7CisKKworICAgICAgICAgIGVuY29kaW5nLT5jb3VudCA9IDA7CisKKyAgICAgICAgICAvKiBQYXJzZSB0aGUgRm9ybWF0MSByYW5nZXMuICovCisgICAgICAgICAgZm9yICggaiA9IDA7ICBqIDwgY291bnQ7IGorKywgaSArPSBubGVmdCApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogUmVhZCB0aGUgZmlyc3QgZ2x5cGggY29kZSBvZiB0aGUgcmFuZ2UuICovCisgICAgICAgICAgICBpZiAoIEZUX1JFQURfQllURSggZ2x5cGhfY29kZSApICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICAvKiBSZWFkIHRoZSBudW1iZXIgb2YgY29kZXMgaW4gdGhlIHJhbmdlLiAqLworICAgICAgICAgICAgaWYgKCBGVF9SRUFEX0JZVEUoIG5sZWZ0ICkgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIC8qIEluY3JlbWVudCBubGVmdCwgc28gd2UgcmVhZCBgbmxlZnQgKyAxJyBjb2Rlcy9zaWRzLiAqLworICAgICAgICAgICAgbmxlZnQrKzsKKworICAgICAgICAgICAgLyogY29tcHV0ZSBtYXggbnVtYmVyIG9mIGNoYXJhY3RlciBjb2RlcyAqLworICAgICAgICAgICAgaWYgKCAoRlRfVUludClubGVmdCA+IGVuY29kaW5nLT5jb3VudCApCisgICAgICAgICAgICAgIGVuY29kaW5nLT5jb3VudCA9IG5sZWZ0OworCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSByYW5nZSBvZiBjb2Rlcy9zaWRzLiAqLworICAgICAgICAgICAgZm9yICggayA9IGk7IGsgPCBubGVmdCArIGk7IGsrKywgZ2x5cGhfY29kZSsrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGsgaXMgbm90IHRvbyBiaWcuICovCisgICAgICAgICAgICAgIGlmICggayA8IG51bV9nbHlwaHMgJiYgZ2x5cGhfY29kZSA8IDI1NiApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBBc3NpZ24gY29kZSB0byBHSUQgbWFwcGluZy4gKi8KKyAgICAgICAgICAgICAgICBlbmNvZGluZy0+Y29kZXNbZ2x5cGhfY29kZV0gPSAoRlRfVVNob3J0KWs7CisKKyAgICAgICAgICAgICAgICAvKiBBc3NpZ24gY29kZSB0byBTSUQgbWFwcGluZy4gKi8KKyAgICAgICAgICAgICAgICBlbmNvZGluZy0+c2lkc1tnbHlwaF9jb2RlXSA9IGNoYXJzZXQtPnNpZHNba107CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBzaW1wbGUgY2hlY2s7IG9uZSBuZXZlciBrbm93cyB3aGF0IGNhbiBiZSBmb3VuZCBpbiBhIGZvbnQgKi8KKyAgICAgICAgICBpZiAoIGVuY29kaW5nLT5jb3VudCA+IDI1NiApCisgICAgICAgICAgICBlbmNvZGluZy0+Y291bnQgPSAyNTY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEZUX0VSUk9SKCggImNmZl9lbmNvZGluZ19sb2FkOiBpbnZhbGlkIHRhYmxlIGZvcm1hdFxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIFBhcnNlIHN1cHBsZW1lbnRhbCBlbmNvZGluZ3MsIGlmIGFueS4gKi8KKyAgICAgIGlmICggZW5jb2RpbmctPmZvcm1hdCAmIDB4ODAgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICBnaW5kZXg7CisKKworICAgICAgICAvKiBjb3VudCBzdXBwbGVtZW50cyAqLworICAgICAgICBpZiAoIEZUX1JFQURfQllURSggY291bnQgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgY291bnQ7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSZWFkIHN1cHBsZW1lbnRhbCBnbHlwaCBjb2RlLiAqLworICAgICAgICAgIGlmICggRlRfUkVBRF9CWVRFKCBnbHlwaF9jb2RlICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgLyogUmVhZCB0aGUgU0lEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdseXBoIGNvZGUuICovCisgICAgICAgICAgaWYgKCBGVF9SRUFEX1VTSE9SVCggZ2x5cGhfc2lkICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgLyogQXNzaWduIGNvZGUgdG8gU0lEIG1hcHBpbmcuICovCisgICAgICAgICAgZW5jb2RpbmctPnNpZHNbZ2x5cGhfY29kZV0gPSBnbHlwaF9zaWQ7CisKKyAgICAgICAgICAvKiBGaXJzdCwgbG9vayB1cCBHSUQgd2hpY2ggaGFzIGJlZW4gYXNzaWduZWQgdG8gKi8KKyAgICAgICAgICAvKiBTSUQgZ2x5cGhfc2lkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBmb3IgKCBnaW5kZXggPSAwOyBnaW5kZXggPCBudW1fZ2x5cGhzOyBnaW5kZXgrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBjaGFyc2V0LT5zaWRzW2dpbmRleF0gPT0gZ2x5cGhfc2lkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW5jb2RpbmctPmNvZGVzW2dseXBoX2NvZGVdID0gKEZUX1VTaG9ydClnaW5kZXg7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogV2UgdGFrZSBpbnRvIGFjY291bnQgdGhlIGZhY3QgYSBDRkYgZm9udCBjYW4gdXNlIGEgcHJlZGVmaW5lZCAqLworICAgICAgLyogZW5jb2Rpbmcgd2l0aG91dCBjb250YWluaW5nIGFsbCBvZiB0aGUgZ2x5cGhzIGVuY29kZWQgYnkgdGhpcyAqLworICAgICAgLyogZW5jb2RpbmcgKHNlZSB0aGUgbm90ZSBhdCB0aGUgZW5kIG9mIHNlY3Rpb24gMTIgaW4gdGhlIENGRiAgICAqLworICAgICAgLyogc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBzd2l0Y2ggKCAoRlRfVUludClvZmZzZXQgKQorICAgICAgeworICAgICAgY2FzZSAwOgorICAgICAgICAvKiBGaXJzdCwgY29weSB0aGUgY29kZSB0byBTSUQgbWFwcGluZy4gKi8KKyAgICAgICAgRlRfQVJSQVlfQ09QWSggZW5jb2RpbmctPnNpZHMsIGNmZl9zdGFuZGFyZF9lbmNvZGluZywgMjU2ICk7CisgICAgICAgIGdvdG8gUG9wdWxhdGU7CisKKyAgICAgIGNhc2UgMToKKyAgICAgICAgLyogRmlyc3QsIGNvcHkgdGhlIGNvZGUgdG8gU0lEIG1hcHBpbmcuICovCisgICAgICAgIEZUX0FSUkFZX0NPUFkoIGVuY29kaW5nLT5zaWRzLCBjZmZfZXhwZXJ0X2VuY29kaW5nLCAyNTYgKTsKKworICAgICAgUG9wdWxhdGU6CisgICAgICAgIC8qIENvbnN0cnVjdCBjb2RlIHRvIEdJRCBtYXBwaW5nIGZyb20gY29kZSB0byBTSUQgbWFwcGluZyAqLworICAgICAgICAvKiBhbmQgY2hhcnNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBlbmNvZGluZy0+Y291bnQgPSAwOworCisgICAgICAgIGVycm9yID0gY2ZmX2NoYXJzZXRfY29tcHV0ZV9jaWRzKCBjaGFyc2V0LCBudW1fZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5tZW1vcnkgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgMjU2OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVUludCAgc2lkID0gZW5jb2RpbmctPnNpZHNbal07CisgICAgICAgICAgRlRfVUludCAgZ2lkID0gMDsKKworCisgICAgICAgICAgaWYgKCBzaWQgKQorICAgICAgICAgICAgZ2lkID0gY2ZmX2NoYXJzZXRfY2lkX3RvX2dpbmRleCggY2hhcnNldCwgc2lkICk7CisKKyAgICAgICAgICBpZiAoIGdpZCAhPSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGluZy0+Y29kZXNbal0gPSAoRlRfVVNob3J0KWdpZDsKKyAgICAgICAgICAgIGVuY29kaW5nLT5jb3VudCAgICA9IGogKyAxOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgZW5jb2RpbmctPmNvZGVzW2pdID0gMDsKKyAgICAgICAgICAgIGVuY29kaW5nLT5zaWRzIFtqXSA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBGVF9FUlJPUigoICJjZmZfZW5jb2RpbmdfbG9hZDogaW52YWxpZCB0YWJsZSBmb3JtYXRcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICBFeGl0OgorCisgICAgLyogQ2xlYW4gdXAgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAqLworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9zdWJmb250X2xvYWQoIENGRl9TdWJGb250ICBmb250LAorICAgICAgICAgICAgICAgICAgICBDRkZfSW5kZXggICAgaWR4LAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZm9udF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgIGJhc2Vfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAgbGlicmFyeSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIENGRl9QYXJzZXJSZWMgICAgcGFyc2VyOworICAgIEZUX0J5dGUqICAgICAgICAgZGljdCA9IE5VTEw7CisgICAgRlRfVUxvbmcgICAgICAgICBkaWN0X2xlbjsKKyAgICBDRkZfRm9udFJlY0RpY3QgIHRvcCAgPSAmZm9udC0+Zm9udF9kaWN0OworICAgIENGRl9Qcml2YXRlICAgICAgcHJpdiA9ICZmb250LT5wcml2YXRlX2RpY3Q7CisKKworICAgIGNmZl9wYXJzZXJfaW5pdCggJnBhcnNlciwgQ0ZGX0NPREVfVE9QRElDVCwgJmZvbnQtPmZvbnRfZGljdCwgbGlicmFyeSApOworCisgICAgLyogc2V0IGRlZmF1bHRzICovCisgICAgRlRfTUVNX1pFUk8oIHRvcCwgc2l6ZW9mICggKnRvcCApICk7CisKKyAgICB0b3AtPnVuZGVybGluZV9wb3NpdGlvbiAgPSAtKCAxMDBMIDw8IDE2ICk7CisgICAgdG9wLT51bmRlcmxpbmVfdGhpY2tuZXNzID0gNTBMIDw8IDE2OworICAgIHRvcC0+Y2hhcnN0cmluZ190eXBlICAgICA9IDI7CisgICAgdG9wLT5mb250X21hdHJpeC54eCAgICAgID0gMHgxMDAwMEw7CisgICAgdG9wLT5mb250X21hdHJpeC55eSAgICAgID0gMHgxMDAwMEw7CisgICAgdG9wLT5jaWRfY291bnQgICAgICAgICAgID0gODcyMDsKKworICAgIC8qIHdlIHVzZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgU0lEIHZhbHVlIDB4RkZGRiB0byBpbmRpY2F0ZSAqLworICAgIC8qIG1pc3NpbmcgZW50cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHRvcC0+dmVyc2lvbiAgICAgICAgICAgICA9IDB4RkZGRlU7CisgICAgdG9wLT5ub3RpY2UgICAgICAgICAgICAgID0gMHhGRkZGVTsKKyAgICB0b3AtPmNvcHlyaWdodCAgICAgICAgICAgPSAweEZGRkZVOworICAgIHRvcC0+ZnVsbF9uYW1lICAgICAgICAgICA9IDB4RkZGRlU7CisgICAgdG9wLT5mYW1pbHlfbmFtZSAgICAgICAgID0gMHhGRkZGVTsKKyAgICB0b3AtPndlaWdodCAgICAgICAgICAgICAgPSAweEZGRkZVOworICAgIHRvcC0+ZW1iZWRkZWRfcG9zdHNjcmlwdCA9IDB4RkZGRlU7CisKKyAgICB0b3AtPmNpZF9yZWdpc3RyeSAgICAgICAgPSAweEZGRkZVOworICAgIHRvcC0+Y2lkX29yZGVyaW5nICAgICAgICA9IDB4RkZGRlU7CisgICAgdG9wLT5jaWRfZm9udF9uYW1lICAgICAgID0gMHhGRkZGVTsKKworICAgIGVycm9yID0gY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50KCBpZHgsIGZvbnRfaW5kZXgsICZkaWN0LCAmZGljdF9sZW4gKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgRlRfVFJBQ0U0KCggIiB0b3AgZGljdGlvbmFyeTpcbiIgKSk7CisgICAgICBlcnJvciA9IGNmZl9wYXJzZXJfcnVuKCAmcGFyc2VyLCBkaWN0LCBkaWN0ICsgZGljdF9sZW4gKTsKKyAgICB9CisKKyAgICBjZmZfaW5kZXhfZm9yZ2V0X2VsZW1lbnQoIGlkeCwgJmRpY3QgKTsKKworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogaWYgaXQgaXMgYSBDSUQgZm9udCwgd2Ugc3RvcCB0aGVyZSAqLworICAgIGlmICggdG9wLT5jaWRfcmVnaXN0cnkgIT0gMHhGRkZGVSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBwYXJzZSB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LCBpZiBhbnkgKi8KKyAgICBpZiAoIHRvcC0+cHJpdmF0ZV9vZmZzZXQgJiYgdG9wLT5wcml2YXRlX3NpemUgKQorICAgIHsKKyAgICAgIC8qIHNldCBkZWZhdWx0cyAqLworICAgICAgRlRfTUVNX1pFUk8oIHByaXYsIHNpemVvZiAoICpwcml2ICkgKTsKKworICAgICAgcHJpdi0+Ymx1ZV9zaGlmdCAgICAgICA9IDc7CisgICAgICBwcml2LT5ibHVlX2Z1enogICAgICAgID0gMTsKKyAgICAgIHByaXYtPmxlbklWICAgICAgICAgICAgPSAtMTsKKyAgICAgIHByaXYtPmV4cGFuc2lvbl9mYWN0b3IgPSAoRlRfRml4ZWQpKCAwLjA2ICogMHgxMDAwMEwgKTsKKyAgICAgIHByaXYtPmJsdWVfc2NhbGUgICAgICAgPSAoRlRfRml4ZWQpKCAwLjAzOTYyNSAqIDB4MTAwMDBMICogMTAwMCApOworCisgICAgICBjZmZfcGFyc2VyX2luaXQoICZwYXJzZXIsIENGRl9DT0RFX1BSSVZBVEUsIHByaXYsIGxpYnJhcnkgKTsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggYmFzZV9vZmZzZXQgKyBmb250LT5mb250X2RpY3QucHJpdmF0ZV9vZmZzZXQgKSB8fAorICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggZm9udC0+Zm9udF9kaWN0LnByaXZhdGVfc2l6ZSApICAgICAgICAgICAgICAgICApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfVFJBQ0U0KCggIiBwcml2YXRlIGRpY3Rpb25hcnk6XG4iICkpOworICAgICAgZXJyb3IgPSBjZmZfcGFyc2VyX3J1biggJnBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKilzdHJlYW0tPmN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKilzdHJlYW0tPmxpbWl0ICk7CisgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBlbnN1cmUgdGhhdCBgbnVtX2JsdWVfdmFsdWVzJyBpcyBldmVuICovCisgICAgICBwcml2LT5udW1fYmx1ZV92YWx1ZXMgJj0gfjE7CisgICAgfQorCisgICAgLyogcmVhZCB0aGUgbG9jYWwgc3VicnMsIGlmIGFueSAqLworICAgIGlmICggcHJpdi0+bG9jYWxfc3VicnNfb2Zmc2V0ICkKKyAgICB7CisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBiYXNlX29mZnNldCArIHRvcC0+cHJpdmF0ZV9vZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bG9jYWxfc3VicnNfb2Zmc2V0ICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGVycm9yID0gY2ZmX2luZGV4X2luaXQoICZmb250LT5sb2NhbF9zdWJyc19pbmRleCwgc3RyZWFtLCAxICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBlcnJvciA9IGNmZl9pbmRleF9nZXRfcG9pbnRlcnMoICZmb250LT5sb2NhbF9zdWJyc19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmxvY2FsX3N1YnJzLCBOVUxMICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2ZmX3N1YmZvbnRfZG9uZSggRlRfTWVtb3J5ICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX1N1YkZvbnQgIHN1YmZvbnQgKQorICB7CisgICAgaWYgKCBzdWJmb250ICkKKyAgICB7CisgICAgICBjZmZfaW5kZXhfZG9uZSggJnN1YmZvbnQtPmxvY2FsX3N1YnJzX2luZGV4ICk7CisgICAgICBGVF9GUkVFKCBzdWJmb250LT5sb2NhbF9zdWJycyApOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9mb250X2xvYWQoIEZUX0xpYnJhcnkgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgQ0ZGX0ZvbnQgICBmb250LAorICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIHB1cmVfY2ZmICkKKyAgeworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgY2ZmX2hlYWRlcl9maWVsZHNbXSA9CisgICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBDRkZfRm9udFJlYworCisgICAgICBGVF9GUkFNRV9TVEFSVCggNCApLAorICAgICAgICBGVF9GUkFNRV9CWVRFKCB2ZXJzaW9uX21ham9yICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUoIHZlcnNpb25fbWlub3IgKSwKKyAgICAgICAgRlRfRlJBTUVfQllURSggaGVhZGVyX3NpemUgKSwKKyAgICAgICAgRlRfRlJBTUVfQllURSggYWJzb2x1dGVfb2Zmc2l6ZSApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBGVF9VTG9uZyAgICAgICAgIGJhc2Vfb2Zmc2V0OworICAgIENGRl9Gb250UmVjRGljdCAgZGljdDsKKyAgICBDRkZfSW5kZXhSZWMgICAgIHN0cmluZ19pbmRleDsKKyAgICBGVF9VSW50ICAgICAgICAgIHN1YmZvbnRfaW5kZXg7CisKKworICAgIEZUX1pFUk8oIGZvbnQgKTsKKyAgICBGVF9aRVJPKCAmc3RyaW5nX2luZGV4ICk7CisKKyAgICBmb250LT5zdHJlYW0gPSBzdHJlYW07CisgICAgZm9udC0+bWVtb3J5ID0gbWVtb3J5OworICAgIGRpY3QgICAgICAgICA9ICZmb250LT50b3BfZm9udC5mb250X2RpY3Q7CisgICAgYmFzZV9vZmZzZXQgID0gRlRfU1RSRUFNX1BPUygpOworCisgICAgLyogcmVhZCBDRkYgZm9udCBoZWFkZXIgKi8KKyAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggY2ZmX2hlYWRlcl9maWVsZHMsIGZvbnQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBjaGVjayBmb3JtYXQgKi8KKyAgICBpZiAoIGZvbnQtPnZlcnNpb25fbWFqb3IgICAhPSAxIHx8CisgICAgICAgICBmb250LT5oZWFkZXJfc2l6ZSAgICAgIDwgNCB8fAorICAgICAgICAgZm9udC0+YWJzb2x1dGVfb2Zmc2l6ZSA+IDQgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICIgIG5vdCBhIENGRiBmb250IGhlYWRlclxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBza2lwIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgKi8KKyAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCBmb250LT5oZWFkZXJfc2l6ZSAtIDQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiByZWFkIHRoZSBuYW1lLCB0b3AgZGljdCwgc3RyaW5nIGFuZCBnbG9iYWwgc3VicnMgaW5kZXggKi8KKyAgICBpZiAoIEZUX1NFVF9FUlJPUiggY2ZmX2luZGV4X2luaXQoICZmb250LT5uYW1lX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAwICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9pbml0KCAmZm9udC0+Zm9udF9kaWN0X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAwICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9pbml0KCAmc3RyaW5nX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAxICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9pbml0KCAmZm9udC0+Z2xvYmFsX3N1YnJzX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAxICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9nZXRfcG9pbnRlcnMoICZzdHJpbmdfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5zdHJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+c3RyaW5nX3Bvb2wgKSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvbnQtPm51bV9zdHJpbmdzID0gc3RyaW5nX2luZGV4LmNvdW50OworCisgICAgaWYgKCBwdXJlX2NmZiApCisgICAgeworICAgICAgLyogd2VsbCwgd2UgZG9uJ3QgcmVhbGx5IGZvcmdldCB0aGUgYGRpc2FibGVkJyBmb250cy4uLiAqLworICAgICAgc3ViZm9udF9pbmRleCA9IChGVF9VSW50KWZhY2VfaW5kZXg7CisKKyAgICAgIGlmICggc3ViZm9udF9pbmRleCA+PSBmb250LT5uYW1lX2luZGV4LmNvdW50ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZvbnRfbG9hZDoiCisgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHN1YmZvbnQgaW5kZXggZm9yIHB1cmUgQ0ZGIGZvbnQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBzdWJmb250X2luZGV4ICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgZm9udC0+bnVtX2ZhY2VzID0gZm9udC0+bmFtZV9pbmRleC5jb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHN1YmZvbnRfaW5kZXggPSAwOworCisgICAgICBpZiAoIGZvbnQtPm5hbWVfaW5kZXguY291bnQgPiAxICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZvbnRfbG9hZDoiCisgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIENGRiBmb250IHdpdGggbXVsdGlwbGUgc3ViZm9udHNcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIiBpbiBTRk5UIHdyYXBwZXJcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICAgIC8qIGluIGNhc2Ugb2YgYSBmb250IGZvcm1hdCBjaGVjaywgc2ltcGx5IGV4aXQgbm93ICovCisgICAgaWYgKCBmYWNlX2luZGV4IDwgMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBub3csIHBhcnNlIHRoZSB0b3AtbGV2ZWwgZm9udCBkaWN0aW9uYXJ5ICovCisgICAgRlRfVFJBQ0U0KCggInBhcnNpbmcgdG9wLWxldmVsXG4iICkpOworICAgIGVycm9yID0gY2ZmX3N1YmZvbnRfbG9hZCggJmZvbnQtPnRvcF9mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmZvbnRfZGljdF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmZvbnRfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGJhc2Vfb2Zmc2V0ICsgZGljdC0+Y2hhcnN0cmluZ3Nfb2Zmc2V0ICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSBjZmZfaW5kZXhfaW5pdCggJmZvbnQtPmNoYXJzdHJpbmdzX2luZGV4LCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIG5vdywgY2hlY2sgZm9yIGEgQ0lEIGZvbnQgKi8KKyAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSAhPSAweEZGRkZVICkKKyAgICB7CisgICAgICBDRkZfSW5kZXhSZWMgIGZkX2luZGV4OworICAgICAgQ0ZGX1N1YkZvbnQgICBzdWIgPSBOVUxMOworICAgICAgRlRfVUludCAgICAgICBpZHg7CisKKworICAgICAgLyogdGhpcyBpcyBhIENJRC1rZXllZCBmb250LCB3ZSBtdXN0IG5vdyBhbGxvY2F0ZSBhIHRhYmxlIG9mICovCisgICAgICAvKiBzdWItZm9udHMsIHRoZW4gbG9hZCBlYWNoIG9mIHRoZW0gc2VwYXJhdGVseSAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGJhc2Vfb2Zmc2V0ICsgZGljdC0+Y2lkX2ZkX2FycmF5X29mZnNldCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBlcnJvciA9IGNmZl9pbmRleF9pbml0KCAmZmRfaW5kZXgsIHN0cmVhbSwgMCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBmZF9pbmRleC5jb3VudCA+IENGRl9NQVhfQ0lEX0ZPTlRTICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UwKCggImNmZl9mb250X2xvYWQ6IEZEIGFycmF5IHRvbyBsYXJnZSBpbiBDSUQgZm9udFxuIiApKTsKKyAgICAgICAgZ290byBGYWlsX0NJRDsKKyAgICAgIH0KKworICAgICAgLyogYWxsb2NhdGUgJiByZWFkIGVhY2ggZm9udCBkaWN0IGluZGVwZW5kZW50bHkgKi8KKyAgICAgIGZvbnQtPm51bV9zdWJmb250cyA9IGZkX2luZGV4LmNvdW50OworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHN1YiwgZmRfaW5kZXguY291bnQgKSApCisgICAgICAgIGdvdG8gRmFpbF9DSUQ7CisKKyAgICAgIC8qIHNldCB1cCBwb2ludGVyIHRhYmxlICovCisgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPCBmZF9pbmRleC5jb3VudDsgaWR4KysgKQorICAgICAgICBmb250LT5zdWJmb250c1tpZHhdID0gc3ViICsgaWR4OworCisgICAgICAvKiBub3cgbG9hZCBlYWNoIHN1YmZvbnQgaW5kZXBlbmRlbnRseSAqLworICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgZmRfaW5kZXguY291bnQ7IGlkeCsrICkKKyAgICAgIHsKKyAgICAgICAgc3ViID0gZm9udC0+c3ViZm9udHNbaWR4XTsKKyAgICAgICAgRlRfVFJBQ0U0KCggInBhcnNpbmcgc3ViZm9udCAldVxuIiwgaWR4ICkpOworICAgICAgICBlcnJvciA9IGNmZl9zdWJmb250X2xvYWQoIHN1YiwgJmZkX2luZGV4LCBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBiYXNlX29mZnNldCwgbGlicmFyeSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWxfQ0lEOworICAgICAgfQorCisgICAgICAvKiBub3cgbG9hZCB0aGUgRkQgU2VsZWN0IGFycmF5ICovCisgICAgICBlcnJvciA9IENGRl9Mb2FkX0ZEX1NlbGVjdCggJmZvbnQtPmZkX3NlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5jaGFyc3RyaW5nc19pbmRleC5jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9vZmZzZXQgKyBkaWN0LT5jaWRfZmRfc2VsZWN0X29mZnNldCApOworCisgICAgRmFpbF9DSUQ6CisgICAgICBjZmZfaW5kZXhfZG9uZSggJmZkX2luZGV4ICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZvbnQtPm51bV9zdWJmb250cyA9IDA7CisKKyAgICAvKiByZWFkIHRoZSBjaGFyc3RyaW5ncyBpbmRleCBub3cgKi8KKyAgICBpZiAoIGRpY3QtPmNoYXJzdHJpbmdzX29mZnNldCA9PSAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJjZmZfZm9udF9sb2FkOiBubyBjaGFyc3RyaW5ncyBvZmZzZXRcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZm9udC0+bnVtX2dseXBocyA9IGZvbnQtPmNoYXJzdHJpbmdzX2luZGV4LmNvdW50OworCisgICAgZXJyb3IgPSBjZmZfaW5kZXhfZ2V0X3BvaW50ZXJzKCAmZm9udC0+Z2xvYmFsX3N1YnJzX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmdsb2JhbF9zdWJycywgTlVMTCApOworCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiByZWFkIHRoZSBDaGFyc2V0IGFuZCBFbmNvZGluZyB0YWJsZXMgaWYgYXZhaWxhYmxlICovCisgICAgaWYgKCBmb250LT5udW1fZ2x5cGhzID4gMCApCisgICAgeworICAgICAgRlRfQm9vbCAgaW52ZXJ0ID0gRlRfQk9PTCggZGljdC0+Y2lkX3JlZ2lzdHJ5ICE9IDB4RkZGRlUgJiYgcHVyZV9jZmYgKTsKKworCisgICAgICBlcnJvciA9IGNmZl9jaGFyc2V0X2xvYWQoICZmb250LT5jaGFyc2V0LCBmb250LT5udW1fZ2x5cGhzLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfb2Zmc2V0LCBkaWN0LT5jaGFyc2V0X29mZnNldCwgaW52ZXJ0ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBDSUQta2V5ZWQgQ0ZGcyBkb24ndCBoYXZlIGFuIGVuY29kaW5nICovCisgICAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSA9PSAweEZGRkZVICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBjZmZfZW5jb2RpbmdfbG9hZCggJmZvbnQtPmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+Y2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+bnVtX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+ZW5jb2Rpbmdfb2Zmc2V0ICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIGZvbnQgbmFtZSAoL0NJREZvbnROYW1lIGZvciBDSUQta2V5ZWQgZm9udHMsICovCisgICAgLyogL0ZvbnROYW1lIG90aGVyd2lzZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvbnQtPmZvbnRfbmFtZSA9IGNmZl9pbmRleF9nZXRfbmFtZSggZm9udCwgc3ViZm9udF9pbmRleCApOworCisgIEV4aXQ6CisgICAgY2ZmX2luZGV4X2RvbmUoICZzdHJpbmdfaW5kZXggKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2ZmX2ZvbnRfZG9uZSggQ0ZGX0ZvbnQgIGZvbnQgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmb250LT5tZW1vcnk7CisgICAgRlRfVUludCAgICBpZHg7CisKKworICAgIGNmZl9pbmRleF9kb25lKCAmZm9udC0+Z2xvYmFsX3N1YnJzX2luZGV4ICk7CisgICAgY2ZmX2luZGV4X2RvbmUoICZmb250LT5mb250X2RpY3RfaW5kZXggKTsKKyAgICBjZmZfaW5kZXhfZG9uZSggJmZvbnQtPm5hbWVfaW5kZXggKTsKKyAgICBjZmZfaW5kZXhfZG9uZSggJmZvbnQtPmNoYXJzdHJpbmdzX2luZGV4ICk7CisKKyAgICAvKiByZWxlYXNlIGZvbnQgZGljdGlvbmFyaWVzLCBidXQgb25seSBpZiB3b3JraW5nIHdpdGggKi8KKyAgICAvKiBhIENJRCBrZXllZCBDRkYgZm9udCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGZvbnQtPm51bV9zdWJmb250cyA+IDAgKQorICAgIHsKKyAgICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IGZvbnQtPm51bV9zdWJmb250czsgaWR4KysgKQorICAgICAgICBjZmZfc3ViZm9udF9kb25lKCBtZW1vcnksIGZvbnQtPnN1YmZvbnRzW2lkeF0gKTsKKworICAgICAgLyogdGhlIHN1YmZvbnRzIGFycmF5IGhhcyBiZWVuIGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBibG9jayAqLworICAgICAgRlRfRlJFRSggZm9udC0+c3ViZm9udHNbMF0gKTsKKyAgICB9CisKKyAgICBjZmZfZW5jb2RpbmdfZG9uZSggJmZvbnQtPmVuY29kaW5nICk7CisgICAgY2ZmX2NoYXJzZXRfZG9uZSggJmZvbnQtPmNoYXJzZXQsIGZvbnQtPnN0cmVhbSApOworCisgICAgY2ZmX3N1YmZvbnRfZG9uZSggbWVtb3J5LCAmZm9udC0+dG9wX2ZvbnQgKTsKKworICAgIENGRl9Eb25lX0ZEX1NlbGVjdCggJmZvbnQtPmZkX3NlbGVjdCwgZm9udC0+c3RyZWFtICk7CisKKyAgICBGVF9GUkVFKCBmb250LT5mb250X2luZm8gKTsKKworICAgIEZUX0ZSRUUoIGZvbnQtPmZvbnRfbmFtZSApOworICAgIEZUX0ZSRUUoIGZvbnQtPmdsb2JhbF9zdWJycyApOworICAgIEZUX0ZSRUUoIGZvbnQtPnN0cmluZ3MgKTsKKyAgICBGVF9GUkVFKCBmb250LT5zdHJpbmdfcG9vbCApOworCisgICAgaWYgKCBmb250LT5jZjJfaW5zdGFuY2UuZmluYWxpemVyICkKKyAgICB7CisgICAgICBmb250LT5jZjJfaW5zdGFuY2UuZmluYWxpemVyKCBmb250LT5jZjJfaW5zdGFuY2UuZGF0YSApOworICAgICAgRlRfRlJFRSggZm9udC0+Y2YyX2luc3RhbmNlLmRhdGEgKTsKKyAgICB9CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmxvYWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTllN2IwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmbG9hZC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmZmxvYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSAmIENGRiBkYXRhL3Byb2dyYW0gdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGRkxPQURfSF9fCisjZGVmaW5lIF9fQ0ZGTE9BRF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJjZmZ0eXBlcy5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisgIEZUX0xPQ0FMKCBGVF9VU2hvcnQgKQorICBjZmZfZ2V0X3N0YW5kYXJkX2VuY29kaW5nKCBGVF9VSW50ICBjaGFyY29kZSApOworCisKKyAgRlRfTE9DQUwoIEZUX1N0cmluZyogKQorICBjZmZfaW5kZXhfZ2V0X3N0cmluZyggQ0ZGX0ZvbnQgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZWxlbWVudCApOworCisgIEZUX0xPQ0FMKCBGVF9TdHJpbmcqICkKKyAgY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBDRkZfRm9udCAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgc2lkICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfaW5kZXhfYWNjZXNzX2VsZW1lbnQoIENGRl9JbmRleCAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIHBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHBieXRlX2xlbiApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX2luZGV4X2ZvcmdldF9lbGVtZW50KCBDRkZfSW5kZXggIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIHBieXRlcyApOworCisgIEZUX0xPQ0FMKCBGVF9TdHJpbmcqICkKKyAgY2ZmX2luZGV4X2dldF9uYW1lKCBDRkZfRm9udCAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZWxlbWVudCApOworCisKKyAgRlRfTE9DQUwoIEZUX1VJbnQgKQorICBjZmZfY2hhcnNldF9jaWRfdG9fZ2luZGV4KCBDRkZfQ2hhcnNldCAgY2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGNpZCApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX2ZvbnRfbG9hZCggRlRfTGlicmFyeSBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBDRkZfRm9udCAgIGZvbnQsCisgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgcHVyZV9jZmYgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmZl9mb250X2RvbmUoIENGRl9Gb250ICBmb250ICk7CisKKworICBGVF9MT0NBTCggRlRfQnl0ZSApCisgIGNmZl9mZF9zZWxlY3RfZ2V0KCBDRkZfRkRTZWxlY3QgIGZkc2VsZWN0LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCApOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0ZGTE9BRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZm9ianMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZm9ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTFlZjExCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Zmb2Jqcy5jCkBAIC0wLDAgKzEsMTA3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2Zmb2Jqcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIG9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKworI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfRVJST1JTX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICisKKyNpbmNsdWRlICJjZmZvYmpzLmgiCisjaW5jbHVkZSAiY2ZmbG9hZC5oIgorI2luY2x1ZGUgImNmZmNtYXAuaCIKKyNpbmNsdWRlICJjZmZwaWMuaCIKKworI2luY2x1ZGUgImNmZmVycnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZm9ianMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgTm90ZSB0aGF0IHdlIHN0b3JlIHRoZSBnbG9iYWwgaGludHMgaW4gdGhlIHNpemUncyBgaW50ZXJuYWwnIHJvb3QgICAgKi8KKyAgLyogIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHN0YXRpYyBQU0hfR2xvYmFsc19GdW5jcworICBjZmZfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggQ0ZGX1NpemUgIHNpemUgKQorICB7CisgICAgQ0ZGX0ZhY2UgICAgICAgICAgZmFjZSAgICAgPSAoQ0ZGX0ZhY2Upc2l6ZS0+cm9vdC5mYWNlOworICAgIENGRl9Gb250ICAgICAgICAgIGZvbnQgICAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisgICAgUFNIaW50ZXJfU2VydmljZSAgcHNoaW50ZXIgPSBmb250LT5wc2hpbnRlcjsKKyAgICBGVF9Nb2R1bGUgICAgICAgICBtb2R1bGU7CisKKworICAgIG1vZHVsZSA9IEZUX0dldF9Nb2R1bGUoIHNpemUtPnJvb3QuZmFjZS0+ZHJpdmVyLT5yb290LmxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzaGludGVyIiApOworICAgIHJldHVybiAoIG1vZHVsZSAmJiBwc2hpbnRlciAmJiBwc2hpbnRlci0+Z2V0X2dsb2JhbHNfZnVuY3MgKQorICAgICAgICAgICA/IHBzaGludGVyLT5nZXRfZ2xvYmFsc19mdW5jcyggbW9kdWxlICkKKyAgICAgICAgICAgOiAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfc2l6ZV9kb25lKCBGVF9TaXplICBjZmZzaXplICkgICAgICAgIC8qIENGRl9TaXplICovCisgIHsKKyAgICBDRkZfU2l6ZSAgICAgIHNpemUgICAgID0gKENGRl9TaXplKWNmZnNpemU7CisgICAgQ0ZGX0ZhY2UgICAgICBmYWNlICAgICA9IChDRkZfRmFjZSlzaXplLT5yb290LmZhY2U7CisgICAgQ0ZGX0ZvbnQgICAgICBmb250ICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKWNmZnNpemUtPmludGVybmFsOworCisKKyAgICBpZiAoIGludGVybmFsICkKKyAgICB7CisgICAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3M7CisKKworICAgICAgZnVuY3MgPSBjZmZfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggc2l6ZSApOworICAgICAgaWYgKCBmdW5jcyApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICBmdW5jcy0+ZGVzdHJveSggaW50ZXJuYWwtPnRvcGZvbnQgKTsKKworICAgICAgICBmb3IgKCBpID0gZm9udC0+bnVtX3N1YmZvbnRzOyBpID4gMDsgaS0tICkKKyAgICAgICAgICBmdW5jcy0+ZGVzdHJveSggaW50ZXJuYWwtPnN1YmZvbnRzW2kgLSAxXSApOworICAgICAgfQorCisgICAgICAvKiBgaW50ZXJuYWwnIGlzIGZyZWVkIGJ5IGRlc3Ryb3lfc2l6ZSAoaW4gZnRvYmpzLmMpICovCisgICAgfQorICB9CisKKworICAvKiBDRkYgYW5kIFR5cGUgMSBwcml2YXRlIGRpY3Rpb25hcmllcyBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCAgICAgICovCisgIC8qIHN0cnVjdHVyZXM7IHdlIG5lZWQgdG8gc3ludGhlc2l6ZSBhIFR5cGUgMSBkaWN0aW9uYXJ5IG9uIHRoZSBmbHkgKi8KKworICBzdGF0aWMgdm9pZAorICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoIENGRl9TdWJGb250ICBzdWJmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTX1ByaXZhdGUgICBwcml2ICkKKyAgeworICAgIENGRl9Qcml2YXRlICBjcHJpdiA9ICZzdWJmb250LT5wcml2YXRlX2RpY3Q7CisgICAgRlRfVUludCAgICAgIG4sIGNvdW50OworCisKKyAgICBGVF9NRU1fWkVSTyggcHJpdiwgc2l6ZW9mICggKnByaXYgKSApOworCisgICAgY291bnQgPSBwcml2LT5udW1fYmx1ZV92YWx1ZXMgPSBjcHJpdi0+bnVtX2JsdWVfdmFsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBwcml2LT5ibHVlX3ZhbHVlc1tuXSA9IChGVF9TaG9ydCljcHJpdi0+Ymx1ZV92YWx1ZXNbbl07CisKKyAgICBjb3VudCA9IHByaXYtPm51bV9vdGhlcl9ibHVlcyA9IGNwcml2LT5udW1fb3RoZXJfYmx1ZXM7CisgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIHByaXYtPm90aGVyX2JsdWVzW25dID0gKEZUX1Nob3J0KWNwcml2LT5vdGhlcl9ibHVlc1tuXTsKKworICAgIGNvdW50ID0gcHJpdi0+bnVtX2ZhbWlseV9ibHVlcyA9IGNwcml2LT5udW1fZmFtaWx5X2JsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBwcml2LT5mYW1pbHlfYmx1ZXNbbl0gPSAoRlRfU2hvcnQpY3ByaXYtPmZhbWlseV9ibHVlc1tuXTsKKworICAgIGNvdW50ID0gcHJpdi0+bnVtX2ZhbWlseV9vdGhlcl9ibHVlcyA9IGNwcml2LT5udW1fZmFtaWx5X290aGVyX2JsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBwcml2LT5mYW1pbHlfb3RoZXJfYmx1ZXNbbl0gPSAoRlRfU2hvcnQpY3ByaXYtPmZhbWlseV9vdGhlcl9ibHVlc1tuXTsKKworICAgIHByaXYtPmJsdWVfc2NhbGUgPSBjcHJpdi0+Ymx1ZV9zY2FsZTsKKyAgICBwcml2LT5ibHVlX3NoaWZ0ID0gKEZUX0ludCljcHJpdi0+Ymx1ZV9zaGlmdDsKKyAgICBwcml2LT5ibHVlX2Z1enogID0gKEZUX0ludCljcHJpdi0+Ymx1ZV9mdXp6OworCisgICAgcHJpdi0+c3RhbmRhcmRfd2lkdGhbMF0gID0gKEZUX1VTaG9ydCljcHJpdi0+c3RhbmRhcmRfd2lkdGg7CisgICAgcHJpdi0+c3RhbmRhcmRfaGVpZ2h0WzBdID0gKEZUX1VTaG9ydCljcHJpdi0+c3RhbmRhcmRfaGVpZ2h0OworCisgICAgY291bnQgPSBwcml2LT5udW1fc25hcF93aWR0aHMgPSBjcHJpdi0+bnVtX3NuYXBfd2lkdGhzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBwcml2LT5zbmFwX3dpZHRoc1tuXSA9IChGVF9TaG9ydCljcHJpdi0+c25hcF93aWR0aHNbbl07CisKKyAgICBjb3VudCA9IHByaXYtPm51bV9zbmFwX2hlaWdodHMgPSBjcHJpdi0+bnVtX3NuYXBfaGVpZ2h0czsKKyAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKysgKQorICAgICAgcHJpdi0+c25hcF9oZWlnaHRzW25dID0gKEZUX1Nob3J0KWNwcml2LT5zbmFwX2hlaWdodHNbbl07CisKKyAgICBwcml2LT5mb3JjZV9ib2xkICAgICA9IGNwcml2LT5mb3JjZV9ib2xkOworICAgIHByaXYtPmxhbmd1YWdlX2dyb3VwID0gY3ByaXYtPmxhbmd1YWdlX2dyb3VwOworICAgIHByaXYtPmxlbklWICAgICAgICAgID0gY3ByaXYtPmxlbklWOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX3NpemVfaW5pdCggRlRfU2l6ZSAgY2Zmc2l6ZSApICAgICAgICAgLyogQ0ZGX1NpemUgKi8KKyAgeworICAgIENGRl9TaXplICAgICAgICAgICBzaXplICA9IChDRkZfU2l6ZSljZmZzaXplOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3MgPSBjZmZfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggc2l6ZSApOworCisKKyAgICBpZiAoIGZ1bmNzICkKKyAgICB7CisgICAgICBDRkZfRmFjZSAgICAgIGZhY2UgICAgID0gKENGRl9GYWNlKWNmZnNpemUtPmZhY2U7CisgICAgICBDRkZfRm9udCAgICAgIGZvbnQgICAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisgICAgICBDRkZfSW50ZXJuYWwgIGludGVybmFsID0gTlVMTDsKKworICAgICAgUFNfUHJpdmF0ZVJlYyAgcHJpdjsKKyAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSA9IGNmZnNpemUtPmZhY2UtPm1lbW9yeTsKKworICAgICAgRlRfVUludCAgaTsKKworCisgICAgICBpZiAoIEZUX05FVyggaW50ZXJuYWwgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgY2ZmX21ha2VfcHJpdmF0ZV9kaWN0KCAmZm9udC0+dG9wX2ZvbnQsICZwcml2ICk7CisgICAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIGNmZnNpemUtPmZhY2UtPm1lbW9yeSwgJnByaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbC0+dG9wZm9udCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZm9yICggaSA9IGZvbnQtPm51bV9zdWJmb250czsgaSA+IDA7IGktLSApCisgICAgICB7CisgICAgICAgIENGRl9TdWJGb250ICBzdWIgPSBmb250LT5zdWJmb250c1tpIC0gMV07CisKKworICAgICAgICBjZmZfbWFrZV9wcml2YXRlX2RpY3QoIHN1YiwgJnByaXYgKTsKKyAgICAgICAgZXJyb3IgPSBmdW5jcy0+Y3JlYXRlKCBjZmZzaXplLT5mYWNlLT5tZW1vcnksICZwcml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbC0+c3ViZm9udHNbaSAtIDFdICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgY2Zmc2l6ZS0+aW50ZXJuYWwgPSAoRlRfU2l6ZV9JbnRlcm5hbCkodm9pZCopaW50ZXJuYWw7CisgICAgfQorCisgICAgc2l6ZS0+c3RyaWtlX2luZGV4ID0gMHhGRkZGRkZGRlVMOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfc2l6ZV9zZWxlY3QoIEZUX1NpemUgICBzaXplLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBzdHJpa2VfaW5kZXggKQorICB7CisgICAgQ0ZGX1NpemUgICAgICAgICAgIGNmZnNpemUgPSAoQ0ZGX1NpemUpc2l6ZTsKKyAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3M7CisKKworICAgIGNmZnNpemUtPnN0cmlrZV9pbmRleCA9IHN0cmlrZV9pbmRleDsKKworICAgIEZUX1NlbGVjdF9NZXRyaWNzKCBzaXplLT5mYWNlLCBzdHJpa2VfaW5kZXggKTsKKworICAgIGZ1bmNzID0gY2ZmX3NpemVfZ2V0X2dsb2JhbHNfZnVuY3MoIGNmZnNpemUgKTsKKworICAgIGlmICggZnVuY3MgKQorICAgIHsKKyAgICAgIENGRl9GYWNlICAgICAgZmFjZSAgICAgPSAoQ0ZGX0ZhY2Upc2l6ZS0+ZmFjZTsKKyAgICAgIENGRl9Gb250ICAgICAgZm9udCAgICAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKXNpemUtPmludGVybmFsOworCisgICAgICBGVF9Mb25nICB0b3BfdXBtICA9IChGVF9Mb25nKWZvbnQtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICBGVF9VSW50ICBpOworCisKKyAgICAgIGZ1bmNzLT5zZXRfc2NhbGUoIGludGVybmFsLT50b3Bmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy54X3NjYWxlLCBzaXplLT5tZXRyaWNzLnlfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAwICk7CisKKyAgICAgIGZvciAoIGkgPSBmb250LT5udW1fc3ViZm9udHM7IGkgPiAwOyBpLS0gKQorICAgICAgeworICAgICAgICBDRkZfU3ViRm9udCAgc3ViICAgICA9IGZvbnQtPnN1YmZvbnRzW2kgLSAxXTsKKyAgICAgICAgRlRfTG9uZyAgICAgIHN1Yl91cG0gPSAoRlRfTG9uZylzdWItPmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICAgIEZUX1BvcyAgICAgICB4X3NjYWxlLCB5X3NjYWxlOworCisKKyAgICAgICAgaWYgKCB0b3BfdXBtICE9IHN1Yl91cG0gKQorICAgICAgICB7CisgICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggc2l6ZS0+bWV0cmljcy54X3NjYWxlLCB0b3BfdXBtLCBzdWJfdXBtICk7CisgICAgICAgICAgeV9zY2FsZSA9IEZUX011bERpdiggc2l6ZS0+bWV0cmljcy55X3NjYWxlLCB0b3BfdXBtLCBzdWJfdXBtICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeF9zY2FsZSA9IHNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgICAgICB5X3NjYWxlID0gc2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3MtPnNldF9zY2FsZSggaW50ZXJuYWwtPnN1YmZvbnRzW2kgLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeF9zY2FsZSwgeV9zY2FsZSwgMCwgMCApOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyAqLworCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9zaXplX3JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgQ0ZGX1NpemUgICAgICAgICAgIGNmZnNpemUgPSAoQ0ZGX1NpemUpc2l6ZTsKKyAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3M7CisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworCisgICAgaWYgKCBGVF9IQVNfRklYRURfU0laRVMoIHNpemUtPmZhY2UgKSApCisgICAgeworICAgICAgQ0ZGX0ZhY2UgICAgICBjZmZmYWNlID0gKENGRl9GYWNlKXNpemUtPmZhY2U7CisgICAgICBTRk5UX1NlcnZpY2UgIHNmbnQgICAgPSAoU0ZOVF9TZXJ2aWNlKWNmZmZhY2UtPnNmbnQ7CisgICAgICBGVF9VTG9uZyAgICAgIHN0cmlrZV9pbmRleDsKKworCisgICAgICBpZiAoIHNmbnQtPnNldF9zYml0X3N0cmlrZSggY2ZmZmFjZSwgcmVxLCAmc3RyaWtlX2luZGV4ICkgKQorICAgICAgICBjZmZzaXplLT5zdHJpa2VfaW5kZXggPSAweEZGRkZGRkZGVUw7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBjZmZfc2l6ZV9zZWxlY3QoIHNpemUsIHN0cmlrZV9pbmRleCApOworICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyAqLworCisgICAgRlRfUmVxdWVzdF9NZXRyaWNzKCBzaXplLT5mYWNlLCByZXEgKTsKKworICAgIGZ1bmNzID0gY2ZmX3NpemVfZ2V0X2dsb2JhbHNfZnVuY3MoIGNmZnNpemUgKTsKKworICAgIGlmICggZnVuY3MgKQorICAgIHsKKyAgICAgIENGRl9GYWNlICAgICAgY2ZmZmFjZSAgPSAoQ0ZGX0ZhY2Upc2l6ZS0+ZmFjZTsKKyAgICAgIENGRl9Gb250ICAgICAgZm9udCAgICAgPSAoQ0ZGX0ZvbnQpY2ZmZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKXNpemUtPmludGVybmFsOworCisgICAgICBGVF9Mb25nICB0b3BfdXBtICA9IChGVF9Mb25nKWZvbnQtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICBGVF9VSW50ICBpOworCisKKyAgICAgIGZ1bmNzLT5zZXRfc2NhbGUoIGludGVybmFsLT50b3Bmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy54X3NjYWxlLCBzaXplLT5tZXRyaWNzLnlfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAwICk7CisKKyAgICAgIGZvciAoIGkgPSBmb250LT5udW1fc3ViZm9udHM7IGkgPiAwOyBpLS0gKQorICAgICAgeworICAgICAgICBDRkZfU3ViRm9udCAgc3ViICAgICA9IGZvbnQtPnN1YmZvbnRzW2kgLSAxXTsKKyAgICAgICAgRlRfTG9uZyAgICAgIHN1Yl91cG0gPSAoRlRfTG9uZylzdWItPmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICAgIEZUX1BvcyAgICAgICB4X3NjYWxlLCB5X3NjYWxlOworCisKKyAgICAgICAgaWYgKCB0b3BfdXBtICE9IHN1Yl91cG0gKQorICAgICAgICB7CisgICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggc2l6ZS0+bWV0cmljcy54X3NjYWxlLCB0b3BfdXBtLCBzdWJfdXBtICk7CisgICAgICAgICAgeV9zY2FsZSA9IEZUX011bERpdiggc2l6ZS0+bWV0cmljcy55X3NjYWxlLCB0b3BfdXBtLCBzdWJfdXBtICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeF9zY2FsZSA9IHNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgICAgICB5X3NjYWxlID0gc2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3MtPnNldF9zY2FsZSggaW50ZXJuYWwtPnN1YmZvbnRzW2kgLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeF9zY2FsZSwgeV9zY2FsZSwgMCwgMCApOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gTlVMTDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBDRkZfRmFjZSAgICAgICAgICBmYWNlICAgICA9IChDRkZfRmFjZSlzbG90LT5mYWNlOworICAgIENGRl9Gb250ICAgICAgICAgIGZvbnQgICAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CisgICAgUFNIaW50ZXJfU2VydmljZSAgcHNoaW50ZXIgPSBmb250LT5wc2hpbnRlcjsKKworCisgICAgaWYgKCBwc2hpbnRlciApCisgICAgeworICAgICAgRlRfTW9kdWxlICBtb2R1bGU7CisKKworICAgICAgbW9kdWxlID0gRlRfR2V0X01vZHVsZSggc2xvdC0+ZmFjZS0+ZHJpdmVyLT5yb290LmxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHNoaW50ZXIiICk7CisgICAgICBpZiAoIG1vZHVsZSApCisgICAgICB7CisgICAgICAgIFQyX0hpbnRzX0Z1bmNzICBmdW5jczsKKworCisgICAgICAgIGZ1bmNzID0gcHNoaW50ZXItPmdldF90Ml9mdW5jcyggbW9kdWxlICk7CisgICAgICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9ICh2b2lkKilmdW5jczsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDRSAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIEZUX1N0cmluZyoKKyAgY2ZmX3N0cmNweSggRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBzb3VyY2UgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfU3RyaW5nKiAgcmVzdWx0OworCisKKyAgICAodm9pZClGVF9TVFJEVVAoIHJlc3VsdCwgc291cmNlICk7CisKKyAgICBGVF9VTlVTRUQoIGVycm9yICk7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBTdHJpcCBhbGwgc3Vic2V0IHByZWZpeGVzIG9mIHRoZSBmb3JtIGBBQkNERUYrJy4gIFVzdWFsbHksIHRoZXJlICovCisgIC8qIGlzIG9ubHkgb25lLCBidXQgZm9udCBuYW1lcyBsaWtlIGBBUENPT0crSkZBQlREK0Z1dHVyYUJRLUJvbGQnICAgKi8KKyAgLyogaGF2ZSBiZWVuIHNlZW4gaW4gdGhlIHdpbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0YXRpYyB2b2lkCisgIHJlbW92ZV9zdWJzZXRfcHJlZml4KCBGVF9TdHJpbmcqICBuYW1lICkKKyAgeworICAgIEZUX0ludDMyICBpZHggICAgICAgICAgICAgPSAwOworICAgIEZUX0ludDMyICBsZW5ndGggICAgICAgICAgPSAoRlRfSW50MzIpc3RybGVuKCBuYW1lICkgKyAxOworICAgIEZUX0Jvb2wgICBjb250aW51ZV9zZWFyY2ggPSAxOworCisKKyAgICB3aGlsZSAoIGNvbnRpbnVlX3NlYXJjaCApCisgICAgeworICAgICAgaWYgKCBsZW5ndGggPj0gNyAmJiBuYW1lWzZdID09ICcrJyApCisgICAgICB7CisgICAgICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrICkKKyAgICAgICAgeworICAgICAgICAgIC8qIEFTQ0lJIHVwcGVyY2FzZSBsZXR0ZXJzICovCisgICAgICAgICAgaWYgKCAhKCAnQScgPD0gbmFtZVtpZHhdICYmIG5hbWVbaWR4XSA8PSAnWicgKSApCisgICAgICAgICAgICBjb250aW51ZV9zZWFyY2ggPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBjb250aW51ZV9zZWFyY2ggKQorICAgICAgICB7CisgICAgICAgICAgZm9yICggaWR4ID0gNzsgaWR4IDwgbGVuZ3RoOyBpZHgrKyApCisgICAgICAgICAgICBuYW1lW2lkeCAtIDddID0gbmFtZVtpZHhdOworICAgICAgICAgIGxlbmd0aCAtPSA3OworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGNvbnRpbnVlX3NlYXJjaCA9IDA7CisgICAgfQorICB9CisKKworICAvKiBSZW1vdmUgdGhlIHN0eWxlIHBhcnQgZnJvbSB0aGUgZmFtaWx5IG5hbWUgKGlmIHByZXNlbnQpLiAqLworCisgIHN0YXRpYyB2b2lkCisgIHJlbW92ZV9zdHlsZSggRlRfU3RyaW5nKiAgICAgICAgZmFtaWx5X25hbWUsCisgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgc3R5bGVfbmFtZSApCisgIHsKKyAgICBGVF9JbnQzMiAgZmFtaWx5X25hbWVfbGVuZ3RoLCBzdHlsZV9uYW1lX2xlbmd0aDsKKworCisgICAgZmFtaWx5X25hbWVfbGVuZ3RoID0gKEZUX0ludDMyKXN0cmxlbiggZmFtaWx5X25hbWUgKTsKKyAgICBzdHlsZV9uYW1lX2xlbmd0aCAgPSAoRlRfSW50MzIpc3RybGVuKCBzdHlsZV9uYW1lICk7CisKKyAgICBpZiAoIGZhbWlseV9uYW1lX2xlbmd0aCA+IHN0eWxlX25hbWVfbGVuZ3RoICkKKyAgICB7CisgICAgICBGVF9JbnQgIGlkeDsKKworCisgICAgICBmb3IgKCBpZHggPSAxOyBpZHggPD0gc3R5bGVfbmFtZV9sZW5ndGg7ICsraWR4ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBmYW1pbHlfbmFtZVtmYW1pbHlfbmFtZV9sZW5ndGggLSBpZHhdICE9CisgICAgICAgICAgICAgc3R5bGVfbmFtZVtzdHlsZV9uYW1lX2xlbmd0aCAtIGlkeF0gKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAoIGlkeCA+IHN0eWxlX25hbWVfbGVuZ3RoICkKKyAgICAgIHsKKyAgICAgICAgLyogZmFtaWx5X25hbWUgZW5kcyB3aXRoIHN0eWxlX25hbWU7IHJlbW92ZSBpdCAqLworICAgICAgICBpZHggPSBmYW1pbHlfbmFtZV9sZW5ndGggLSBzdHlsZV9uYW1lX2xlbmd0aCAtIDE7CisKKyAgICAgICAgLyogYWxzbyByZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXJzICAgICAqLworICAgICAgICAvKiBiZXR3ZWVuIHJlYWwgZmFtaWx5IG5hbWUgYW5kIHN0eWxlICovCisgICAgICAgIHdoaWxlICggaWR4ID4gMCAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgKCBmYW1pbHlfbmFtZVtpZHhdID09ICctJyB8fAorICAgICAgICAgICAgICAgICAgZmFtaWx5X25hbWVbaWR4XSA9PSAnICcgfHwKKyAgICAgICAgICAgICAgICAgIGZhbWlseV9uYW1lW2lkeF0gPT0gJ18nIHx8CisgICAgICAgICAgICAgICAgICBmYW1pbHlfbmFtZVtpZHhdID09ICcrJyApICkKKyAgICAgICAgICAtLWlkeDsKKworICAgICAgICBpZiAoIGlkeCA+IDAgKQorICAgICAgICAgIGZhbWlseV9uYW1lW2lkeCArIDFdID0gJ1wwJzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfZmFjZV9pbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGNmZmZhY2UsICAgICAgICAvKiBDRkZfRmFjZSAqLworICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKQorICB7CisgICAgQ0ZGX0ZhY2UgICAgICAgICAgICBmYWNlICAgICAgICA9IChDRkZfRmFjZSljZmZmYWNlOworICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7CisgICAgU0ZOVF9TZXJ2aWNlICAgICAgICBzZm50OworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lczsKKyAgICBQU0hpbnRlcl9TZXJ2aWNlICAgIHBzaGludGVyOworICAgIEZUX0Jvb2wgICAgICAgICAgICAgcHVyZV9jZmYgICAgPSAxOworICAgIEZUX0Jvb2wgICAgICAgICAgICAgc2ZudF9mb3JtYXQgPSAwOworICAgIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSAgICAgPSBjZmZmYWNlLT5kcml2ZXItPnJvb3QubGlicmFyeTsKKworCisgICAgc2ZudCA9IChTRk5UX1NlcnZpY2UpRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoCisgICAgICAgICAgICAgbGlicmFyeSwgInNmbnQiICk7CisgICAgaWYgKCAhc2ZudCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZhY2VfaW5pdDogY2Fubm90IGFjY2VzcyBgc2ZudCcgbW9kdWxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHBzbmFtZXMsIFBPU1RTQ1JJUFRfQ01BUFMgKTsKKworICAgIHBzaGludGVyID0gKFBTSGludGVyX1NlcnZpY2UpRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgIGxpYnJhcnksICJwc2hpbnRlciIgKTsKKworICAgIEZUX1RSQUNFMigoICJDRkYgZHJpdmVyXG4iICkpOworCisgICAgLyogY3JlYXRlIGlucHV0IHN0cmVhbSBmcm9tIHJlc291cmNlICovCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggMCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIHZhbGlkIE9wZW5UeXBlIGZpbGUgKi8KKyAgICBlcnJvciA9IHNmbnQtPmluaXRfZmFjZSggc3RyZWFtLCBmYWNlLCBmYWNlX2luZGV4LCBudW1fcGFyYW1zLCBwYXJhbXMgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgaWYgKCBmYWNlLT5mb3JtYXRfdGFnICE9IFRUQUdfT1RUTyApICAvKiBgT1RUTyc7IE9wZW5UeXBlL0NGRiBmb250ICovCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICIgIG5vdCBhbiBPcGVuVHlwZS9DRkYgZm9udFxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIGlmIHdlIGFyZSBwZXJmb3JtaW5nIGEgc2ltcGxlIGZvbnQgZm9ybWF0IGNoZWNrLCBleGl0IGltbWVkaWF0ZWx5ICovCisgICAgICBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgc2ZudF9mb3JtYXQgPSAxOworCisgICAgICAvKiBub3csIHRoZSBmb250IGNhbiBiZSBlaXRoZXIgYW4gT3BlblR5cGUvQ0ZGIGZvbnQsIG9yIGFuIFNWRyBDRUYgKi8KKyAgICAgIC8qIGZvbnQ7IGluIHRoZSBsYXR0ZXIgY2FzZSBpdCBkb2Vzbid0IGhhdmUgYSBgaGVhZCcgdGFibGUgICAgICAgICAqLworICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2hlYWQsIHN0cmVhbSwgMCApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBwdXJlX2NmZiA9IDA7CisKKyAgICAgICAgLyogbG9hZCBmb250IGRpcmVjdG9yeSAqLworICAgICAgICBlcnJvciA9IHNmbnQtPmxvYWRfZmFjZSggc3RyZWFtLCBmYWNlLCBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BhcmFtcywgcGFyYW1zICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogbG9hZCB0aGUgYGNtYXAnIHRhYmxlIGV4cGxpY2l0bHkgKi8KKyAgICAgICAgZXJyb3IgPSBzZm50LT5sb2FkX2NtYXAoIGZhY2UsIHN0cmVhbSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBsb2FkIHRoZSBDRkYgcGFydCBvZiB0aGUgZmlsZSAqLworICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX0NGRiwgc3RyZWFtLCAwICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogcmV3aW5kIHRvIHN0YXJ0IG9mIGZpbGU7IHdlIGFyZSBnb2luZyB0byBsb2FkIGEgcHVyZS1DRkYgZm9udCAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggMCApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgfQorCisgICAgLyogbm93IGxvYWQgYW5kIHBhcnNlIHRoZSBDRkYgdGFibGUgaW4gdGhlIGZpbGUgKi8KKyAgICB7CisgICAgICBDRkZfRm9udCAgICAgICAgIGNmZiA9IE5VTEw7CisgICAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3Q7CisgICAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IGNmZmZhY2UtPm1lbW9yeTsKKyAgICAgIEZUX0ludDMyICAgICAgICAgZmxhZ3M7CisgICAgICBGVF9VSW50ICAgICAgICAgIGk7CisKKworICAgICAgaWYgKCBGVF9ORVcoIGNmZiApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBmYWNlLT5leHRyYS5kYXRhID0gY2ZmOworICAgICAgZXJyb3IgPSBjZmZfZm9udF9sb2FkKCBsaWJyYXJ5LCBzdHJlYW0sIGZhY2VfaW5kZXgsIGNmZiwgcHVyZV9jZmYgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGNmZi0+cHNoaW50ZXIgPSBwc2hpbnRlcjsKKyAgICAgIGNmZi0+cHNuYW1lcyAgPSBwc25hbWVzOworCisgICAgICBjZmZmYWNlLT5mYWNlX2luZGV4ID0gZmFjZV9pbmRleDsKKworICAgICAgLyogQ29tcGxlbWVudCB0aGUgcm9vdCBmbGFncyB3aXRoIHNvbWUgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uICovCisgICAgICAvKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgcHVyZSBDRkYgYW5kIENFRiBmb250czsgKi8KKyAgICAgIC8qIFNGTlQgYmFzZWQgZm9udHMgdXNlIHRoZSBgbmFtZScgdGFibGUgaW5zdGVhZC4gICAgICAgICAgICAgICAqLworCisgICAgICBjZmZmYWNlLT5udW1fZ2x5cGhzID0gKEZUX0xvbmcpY2ZmLT5udW1fZ2x5cGhzOworCisgICAgICBkaWN0ID0gJmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0OworCisgICAgICAvKiB3ZSBuZWVkIHRoZSBgUFNOYW1lcycgbW9kdWxlIGZvciBDRkYgYW5kIENFRiBmb3JtYXRzICovCisgICAgICAvKiB3aGljaCBhcmVuJ3QgQ0lELWtleWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSA9PSAweEZGRkZVICYmICFwc25hbWVzICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZhY2VfaW5pdDoiCisgICAgICAgICAgICAgICAgICAgIiBjYW5ub3Qgb3BlbiBDRkYgJiBDRUYgZm9udHNcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIiB3aXRob3V0IHRoZSBgUFNOYW1lcycgbW9kdWxlXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX01vZHVsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgeworICAgICAgICBGVF9VSW50ICAgICBpZHg7CisgICAgICAgIEZUX1N0cmluZyogIHM7CisKKworICAgICAgICBGVF9UUkFDRTQoKCAiU0lEc1xuIiApKTsKKworICAgICAgICAvKiBkdW1wIHN0cmluZyBpbmRleCwgaW5jbHVkaW5nIGRlZmF1bHQgc3RyaW5ncyBmb3IgY29udmVuaWVuY2UgKi8KKyAgICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgY2ZmLT5udW1fc3RyaW5ncyArIDM5MDsgaWR4KysgKQorICAgICAgICB7CisgICAgICAgICAgcyA9IGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggY2ZmLCBpZHggKTsKKyAgICAgICAgICBpZiAoIHMgKQorICAgICAgICAgICAgRlRfVFJBQ0U0KCgiICAlNWQgJXNcbiIsIGlkeCwgcyApKTsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgIGlmICggIWRpY3QtPmhhc19mb250X21hdHJpeCApCisgICAgICAgIGRpY3QtPnVuaXRzX3Blcl9lbSA9IHB1cmVfY2ZmID8gMTAwMCA6IGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNOworCisgICAgICAvKiBOb3JtYWxpemUgdGhlIGZvbnQgbWF0cml4IHNvIHRoYXQgYG1hdHJpeC0+eHgnIGlzIDE7IHRoZSAqLworICAgICAgLyogc2NhbGluZyBpcyBkb25lIHdpdGggYHVuaXRzX3Blcl9lbScgdGhlbiAoYXQgdGhpcyBwb2ludCwgKi8KKyAgICAgIC8qIGl0IGFscmVhZHkgY29udGFpbnMgdGhlIHNjYWxpbmcgZmFjdG9yLCBidXQgd2l0aG91dCAgICAgICovCisgICAgICAvKiBub3JtYWxpemF0aW9uIG9mIHRoZSBtYXRyaXgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIE5vdGUgdGhhdCB0aGUgb2Zmc2V0cyBtdXN0IGJlIGV4cHJlc3NlZCBpbiBpbnRlZ2VyIGZvbnQgICovCisgICAgICAvKiB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICB7CisgICAgICAgIEZUX01hdHJpeCogIG1hdHJpeCA9ICZkaWN0LT5mb250X21hdHJpeDsKKyAgICAgICAgRlRfVmVjdG9yKiAgb2Zmc2V0ID0gJmRpY3QtPmZvbnRfb2Zmc2V0OworICAgICAgICBGVF9VTG9uZyogICB1cG0gICAgPSAmZGljdC0+dW5pdHNfcGVyX2VtOworICAgICAgICBGVF9GaXhlZCAgICB0ZW1wICAgPSBGVF9BQlMoIG1hdHJpeC0+eXkgKTsKKworCisgICAgICAgIGlmICggdGVtcCAhPSAweDEwMDAwTCApCisgICAgICAgIHsKKyAgICAgICAgICAqdXBtID0gKEZUX1VMb25nKUZUX0RpdkZpeCggKEZUX0xvbmcpKnVwbSwgdGVtcCApOworCisgICAgICAgICAgbWF0cml4LT54eCA9IEZUX0RpdkZpeCggbWF0cml4LT54eCwgdGVtcCApOworICAgICAgICAgIG1hdHJpeC0+eXggPSBGVF9EaXZGaXgoIG1hdHJpeC0+eXgsIHRlbXAgKTsKKyAgICAgICAgICBtYXRyaXgtPnh5ID0gRlRfRGl2Rml4KCBtYXRyaXgtPnh5LCB0ZW1wICk7CisgICAgICAgICAgbWF0cml4LT55eSA9IEZUX0RpdkZpeCggbWF0cml4LT55eSwgdGVtcCApOworICAgICAgICAgIG9mZnNldC0+eCAgPSBGVF9EaXZGaXgoIG9mZnNldC0+eCwgIHRlbXAgKTsKKyAgICAgICAgICBvZmZzZXQtPnkgID0gRlRfRGl2Rml4KCBvZmZzZXQtPnksICB0ZW1wICk7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQtPnggPj49IDE2OworICAgICAgICBvZmZzZXQtPnkgPj49IDE2OworICAgICAgfQorCisgICAgICBmb3IgKCBpID0gY2ZmLT5udW1fc3ViZm9udHM7IGkgPiAwOyBpLS0gKQorICAgICAgeworICAgICAgICBDRkZfRm9udFJlY0RpY3QgIHN1YiA9ICZjZmYtPnN1YmZvbnRzW2kgLSAxXS0+Zm9udF9kaWN0OworICAgICAgICBDRkZfRm9udFJlY0RpY3QgIHRvcCA9ICZjZmYtPnRvcF9mb250LmZvbnRfZGljdDsKKworICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXg7CisgICAgICAgIEZUX1ZlY3RvciogIG9mZnNldDsKKyAgICAgICAgRlRfVUxvbmcqICAgdXBtOworICAgICAgICBGVF9GaXhlZCAgICB0ZW1wOworCisKKyAgICAgICAgaWYgKCBzdWItPmhhc19mb250X21hdHJpeCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Mb25nICBzY2FsaW5nOworCisKKyAgICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgdG9wLWxldmVsIG1hdHJpeCwgKi8KKyAgICAgICAgICAvKiBjb25jYXRlbmF0ZSB0aGUgc3ViZm9udCBtYXRyaXggKi8KKworICAgICAgICAgIGlmICggdG9wLT5oYXNfZm9udF9tYXRyaXggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggdG9wLT51bml0c19wZXJfZW0gPiAxICYmIHN1Yi0+dW5pdHNfcGVyX2VtID4gMSApCisgICAgICAgICAgICAgIHNjYWxpbmcgPSAoRlRfTG9uZylGVF9NSU4oIHRvcC0+dW5pdHNfcGVyX2VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWItPnVuaXRzX3Blcl9lbSApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzY2FsaW5nID0gMTsKKworICAgICAgICAgICAgRlRfTWF0cml4X011bHRpcGx5X1NjYWxlZCggJnRvcC0+Zm9udF9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViLT5mb250X21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgKTsKKyAgICAgICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkKCAmc3ViLT5mb250X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9wLT5mb250X21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsaW5nICk7CisKKyAgICAgICAgICAgIHN1Yi0+dW5pdHNfcGVyX2VtID0gKEZUX1VMb25nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggKEZUX0xvbmcpc3ViLT51bml0c19wZXJfZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZyl0b3AtPnVuaXRzX3Blcl9lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3ViLT5mb250X21hdHJpeCA9IHRvcC0+Zm9udF9tYXRyaXg7CisgICAgICAgICAgc3ViLT5mb250X29mZnNldCA9IHRvcC0+Zm9udF9vZmZzZXQ7CisKKyAgICAgICAgICBzdWItPnVuaXRzX3Blcl9lbSA9IHRvcC0+dW5pdHNfcGVyX2VtOworICAgICAgICB9CisKKyAgICAgICAgbWF0cml4ID0gJnN1Yi0+Zm9udF9tYXRyaXg7CisgICAgICAgIG9mZnNldCA9ICZzdWItPmZvbnRfb2Zmc2V0OworICAgICAgICB1cG0gICAgPSAmc3ViLT51bml0c19wZXJfZW07CisgICAgICAgIHRlbXAgICA9IEZUX0FCUyggbWF0cml4LT55eSApOworCisgICAgICAgIGlmICggdGVtcCAhPSAweDEwMDAwTCApCisgICAgICAgIHsKKyAgICAgICAgICAqdXBtID0gKEZUX1VMb25nKUZUX0RpdkZpeCggKEZUX0xvbmcpKnVwbSwgdGVtcCApOworCisgICAgICAgICAgbWF0cml4LT54eCA9IEZUX0RpdkZpeCggbWF0cml4LT54eCwgdGVtcCApOworICAgICAgICAgIG1hdHJpeC0+eXggPSBGVF9EaXZGaXgoIG1hdHJpeC0+eXgsIHRlbXAgKTsKKyAgICAgICAgICBtYXRyaXgtPnh5ID0gRlRfRGl2Rml4KCBtYXRyaXgtPnh5LCB0ZW1wICk7CisgICAgICAgICAgbWF0cml4LT55eSA9IEZUX0RpdkZpeCggbWF0cml4LT55eSwgdGVtcCApOworICAgICAgICAgIG9mZnNldC0+eCAgPSBGVF9EaXZGaXgoIG9mZnNldC0+eCwgIHRlbXAgKTsKKyAgICAgICAgICBvZmZzZXQtPnkgID0gRlRfRGl2Rml4KCBvZmZzZXQtPnksICB0ZW1wICk7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQtPnggPj49IDE2OworICAgICAgICBvZmZzZXQtPnkgPj49IDE2OworICAgICAgfQorCisgICAgICBpZiAoIHB1cmVfY2ZmICkKKyAgICAgIHsKKyAgICAgICAgY2hhciogIHN0eWxlX25hbWUgPSBOVUxMOworCisKKyAgICAgICAgLyogc2V0IHVwIG51bV9mYWNlcyAqLworICAgICAgICBjZmZmYWNlLT5udW1fZmFjZXMgPSAoRlRfTG9uZyljZmYtPm51bV9mYWNlczsKKworICAgICAgICAvKiBjb21wdXRlIG51bWJlciBvZiBnbHlwaHMgKi8KKyAgICAgICAgaWYgKCBkaWN0LT5jaWRfcmVnaXN0cnkgIT0gMHhGRkZGVSApCisgICAgICAgICAgY2ZmZmFjZS0+bnVtX2dseXBocyA9IChGVF9Mb25nKSggY2ZmLT5jaGFyc2V0Lm1heF9jaWQgKyAxICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjZmZmYWNlLT5udW1fZ2x5cGhzID0gKEZUX0xvbmcpY2ZmLT5jaGFyc3RyaW5nc19pbmRleC5jb3VudDsKKworICAgICAgICAvKiBzZXQgZ2xvYmFsIGJib3gsIGFzIHdlbGwgYXMgRU0gc2l6ZSAqLworICAgICAgICBjZmZmYWNlLT5iYm94LnhNaW4gPSAgIGRpY3QtPmZvbnRfYmJveC54TWluICAgICAgICAgICAgPj4gMTY7CisgICAgICAgIGNmZmZhY2UtPmJib3gueU1pbiA9ICAgZGljdC0+Zm9udF9iYm94LnlNaW4gICAgICAgICAgICA+PiAxNjsKKyAgICAgICAgLyogbm8gYFUnIHN1ZmZpeCBoZXJlIHRvIDB4RkZGRiEgKi8KKyAgICAgICAgY2ZmZmFjZS0+YmJveC54TWF4ID0gKCBkaWN0LT5mb250X2Jib3gueE1heCArIDB4RkZGRiApID4+IDE2OworICAgICAgICBjZmZmYWNlLT5iYm94LnlNYXggPSAoIGRpY3QtPmZvbnRfYmJveC55TWF4ICsgMHhGRkZGICkgPj4gMTY7CisKKyAgICAgICAgY2ZmZmFjZS0+dW5pdHNfcGVyX0VNID0gKEZUX1VTaG9ydCkoIGRpY3QtPnVuaXRzX3Blcl9lbSApOworCisgICAgICAgIGNmZmZhY2UtPmFzY2VuZGVyICA9IChGVF9TaG9ydCkoIGNmZmZhY2UtPmJib3gueU1heCApOworICAgICAgICBjZmZmYWNlLT5kZXNjZW5kZXIgPSAoRlRfU2hvcnQpKCBjZmZmYWNlLT5iYm94LnlNaW4gKTsKKworICAgICAgICBjZmZmYWNlLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCAoIGNmZmZhY2UtPnVuaXRzX3Blcl9FTSAqIDEyICkgLyAxMCApOworICAgICAgICBpZiAoIGNmZmZhY2UtPmhlaWdodCA8IGNmZmZhY2UtPmFzY2VuZGVyIC0gY2ZmZmFjZS0+ZGVzY2VuZGVyICkKKyAgICAgICAgICBjZmZmYWNlLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBjZmZmYWNlLT5hc2NlbmRlciAtIGNmZmZhY2UtPmRlc2NlbmRlciApOworCisgICAgICAgIGNmZmZhY2UtPnVuZGVybGluZV9wb3NpdGlvbiAgPQorICAgICAgICAgIChGVF9TaG9ydCkoIGRpY3QtPnVuZGVybGluZV9wb3NpdGlvbiA+PiAxNiApOworICAgICAgICBjZmZmYWNlLT51bmRlcmxpbmVfdGhpY2tuZXNzID0KKyAgICAgICAgICAoRlRfU2hvcnQpKCBkaWN0LT51bmRlcmxpbmVfdGhpY2tuZXNzID4+IDE2ICk7CisKKyAgICAgICAgLyogcmV0cmlldmUgZm9udCBmYW1pbHkgJiBzdHlsZSBuYW1lICovCisgICAgICAgIGNmZmZhY2UtPmZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9uYW1lKCBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClmYWNlX2luZGV4ICk7CisgICAgICAgIGlmICggY2ZmZmFjZS0+ZmFtaWx5X25hbWUgKQorICAgICAgICB7CisgICAgICAgICAgY2hhciogIGZ1bGwgICA9IGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggY2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmZ1bGxfbmFtZSApOworICAgICAgICAgIGNoYXIqICBmdWxscCAgPSBmdWxsOworICAgICAgICAgIGNoYXIqICBmYW1pbHkgPSBjZmZmYWNlLT5mYW1pbHlfbmFtZTsKKyAgICAgICAgICBjaGFyKiAgZmFtaWx5X25hbWUgPSBOVUxMOworCisKKyAgICAgICAgICByZW1vdmVfc3Vic2V0X3ByZWZpeCggY2ZmZmFjZS0+ZmFtaWx5X25hbWUgKTsKKworICAgICAgICAgIGlmICggZGljdC0+ZmFtaWx5X25hbWUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+ZmFtaWx5X25hbWUgKTsKKyAgICAgICAgICAgIGlmICggZmFtaWx5X25hbWUgKQorICAgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlfbmFtZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBXZSB0cnkgdG8gZXh0cmFjdCB0aGUgc3R5bGUgbmFtZSBmcm9tIHRoZSBmdWxsIG5hbWUuICAgKi8KKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGRhc2hlcyBkdXJpbmcgdGhlIHNlYXJjaC4gKi8KKyAgICAgICAgICBpZiAoIGZ1bGwgJiYgZmFtaWx5ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoICpmdWxscCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIHNraXAgY29tbW9uIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0IG9mIGJvdGggc3RyaW5ncyAqLworICAgICAgICAgICAgICBpZiAoICpmdWxscCA9PSAqZmFtaWx5ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZhbWlseSsrOworICAgICAgICAgICAgICAgIGZ1bGxwKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAvKiBpZ25vcmUgc3BhY2VzIGFuZCBkYXNoZXMgaW4gZnVsbCBuYW1lIGR1cmluZyBjb21wYXJpc29uICovCisgICAgICAgICAgICAgIGlmICggKmZ1bGxwID09ICcgJyB8fCAqZnVsbHAgPT0gJy0nICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZ1bGxwKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAvKiBpZ25vcmUgc3BhY2VzIGFuZCBkYXNoZXMgaW4gZmFtaWx5IG5hbWUgZHVyaW5nIGNvbXBhcmlzb24gKi8KKyAgICAgICAgICAgICAgaWYgKCAqZmFtaWx5ID09ICcgJyB8fCAqZmFtaWx5ID09ICctJyApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICggISpmYW1pbHkgJiYgKmZ1bGxwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFRoZSBmdWxsIG5hbWUgYmVnaW5zIHdpdGggdGhlIHNhbWUgY2hhcmFjdGVycyBhcyB0aGUgICovCisgICAgICAgICAgICAgICAgLyogZmFtaWx5IG5hbWUsIHdpdGggc3BhY2VzIGFuZCBkYXNoZXMgcmVtb3ZlZC4gIEluIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAvKiBjYXNlLCB0aGUgcmVtYWluaW5nIHN0cmluZyBpbiBgZnVsbHAnIHdpbGwgYmUgdXNlZCBhcyAqLworICAgICAgICAgICAgICAgIC8qIHRoZSBzdHlsZSBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3R5bGVfbmFtZSA9IGNmZl9zdHJjcHkoIG1lbW9yeSwgZnVsbHAgKTsKKworICAgICAgICAgICAgICAgIC8qIHJlbW92ZSB0aGUgc3R5bGUgcGFydCBmcm9tIHRoZSBmYW1pbHkgbmFtZSAoaWYgcHJlc2VudCkgKi8KKyAgICAgICAgICAgICAgICByZW1vdmVfc3R5bGUoIGNmZmZhY2UtPmZhbWlseV9uYW1lLCBzdHlsZV9uYW1lICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgICpjaWRfZm9udF9uYW1lID0KKyAgICAgICAgICAgICAgICAgICBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmNpZF9mb250X25hbWUgKTsKKworCisgICAgICAgICAgLyogZG8gd2UgaGF2ZSBhIGAvRm9udE5hbWUnIGZvciBhIENJRC1rZXllZCBmb250PyAqLworICAgICAgICAgIGlmICggY2lkX2ZvbnRfbmFtZSApCisgICAgICAgICAgICBjZmZmYWNlLT5mYW1pbHlfbmFtZSA9IGNmZl9zdHJjcHkoIG1lbW9yeSwgY2lkX2ZvbnRfbmFtZSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzdHlsZV9uYW1lICkKKyAgICAgICAgICBjZmZmYWNlLT5zdHlsZV9uYW1lID0gc3R5bGVfbmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIC8qIGFzc3VtZSAiUmVndWxhciIgc3R5bGUgaWYgd2UgZG9uJ3Qga25vdyBiZXR0ZXIgKi8KKyAgICAgICAgICBjZmZmYWNlLT5zdHlsZV9uYW1lID0gY2ZmX3N0cmNweSggbWVtb3J5LCAoY2hhciAqKSJSZWd1bGFyIiApOworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogQ29tcHV0ZSBmYWNlIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBmbGFncyA9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgIHwgLyogc2NhbGFibGUgb3V0bGluZXMgKi8KKyAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCB8IC8qIGhvcml6b250YWwgZGF0YSAgICovCisgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hJTlRFUjsgICAgICAvKiBoYXMgbmF0aXZlIGhpbnRlciAqLworCisgICAgICAgIGlmICggc2ZudF9mb3JtYXQgKQorICAgICAgICAgIGZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TRk5UOworCisgICAgICAgIC8qIGZpeGVkIHdpZHRoIGZvbnQ/ICovCisgICAgICAgIGlmICggZGljdC0+aXNfZml4ZWRfcGl0Y2ggKQorICAgICAgICAgIGZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKKworICAvKiBYWFg6IFdFIERPIE5PVCBTVVBQT1JUIEtFUk5JTkcgTUVUUklDUyBJTiBUSEUgR1BPUyBUQUJMRSBGT1IgTk9XICovCisjaWYgMAorICAgICAgICAvKiBrZXJuaW5nIGF2YWlsYWJsZT8gKi8KKyAgICAgICAgaWYgKCBmYWNlLT5rZXJuX3BhaXJzICkKKyAgICAgICAgICBmbGFncyB8PSBGVF9GQUNFX0ZMQUdfS0VSTklORzsKKyNlbmRpZgorCisgICAgICAgIGNmZmZhY2UtPmZhY2VfZmxhZ3MgfD0gZmxhZ3M7CisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBDb21wdXRlIHN0eWxlIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGZsYWdzID0gMDsKKworICAgICAgICBpZiAoIGRpY3QtPml0YWxpY19hbmdsZSApCisgICAgICAgICAgZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CisKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgICp3ZWlnaHQgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT53ZWlnaHQgKTsKKworCisgICAgICAgICAgaWYgKCB3ZWlnaHQgKQorICAgICAgICAgICAgaWYgKCAhZnRfc3RyY21wKCB3ZWlnaHQsICJCb2xkIiAgKSB8fAorICAgICAgICAgICAgICAgICAhZnRfc3RyY21wKCB3ZWlnaHQsICJCbGFjayIgKSApCisgICAgICAgICAgICAgIGZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfQk9MRDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRvdWJsZSBjaGVjayAqLworICAgICAgICBpZiAoICEoZmxhZ3MgJiBGVF9TVFlMRV9GTEFHX0JPTEQpICYmIGNmZmZhY2UtPnN0eWxlX25hbWUgKQorICAgICAgICAgIGlmICggIWZ0X3N0cm5jbXAoIGNmZmZhY2UtPnN0eWxlX25hbWUsICJCb2xkIiwgNCApICB8fAorICAgICAgICAgICAgICAgIWZ0X3N0cm5jbXAoIGNmZmZhY2UtPnN0eWxlX25hbWUsICJCbGFjayIsIDUgKSApCisgICAgICAgICAgICBmbGFncyB8PSBGVF9TVFlMRV9GTEFHX0JPTEQ7CisKKyAgICAgICAgY2ZmZmFjZS0+c3R5bGVfZmxhZ3MgPSBmbGFnczsKKyAgICAgIH0KKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMKKyAgICAgIC8qIENJRC1rZXllZCBDRkYgZm9udHMgZG9uJ3QgaGF2ZSBnbHlwaCBuYW1lcyAtLSB0aGUgU0ZOVCBsb2FkZXIgKi8KKyAgICAgIC8qIGhhcyB1bnNldCB0aGlzIGZsYWcgYmVjYXVzZSBvZiB0aGUgMy4wIGBwb3N0JyB0YWJsZS4gICAgICAgICAgKi8KKyAgICAgIGlmICggZGljdC0+Y2lkX3JlZ2lzdHJ5ID09IDB4RkZGRlUgKQorICAgICAgICBjZmZmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUzsKKyNlbmRpZgorCisgICAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSAhPSAweEZGRkZVICYmIHB1cmVfY2ZmICkKKyAgICAgICAgY2ZmZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEOworCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBDb21wdXRlIGNoYXIgbWFwcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAvKiBUcnkgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCBpZiB0aGVyZSBpcyBub25lIGF2YWlsYWJsZSAqLworICAgICAgLyogYWxyZWFkeS4gIElmIGFuIE9wZW5UeXBlIGZvbnQgY29udGFpbnMgYSBVbmljb2RlICJjbWFwIiwgd2UgICAgKi8KKyAgICAgIC8qIHdpbGwgdXNlIGl0LCB3aGF0ZXZlciBiZSBpbiB0aGUgQ0ZGIHBhcnQgb2YgdGhlIGZpbGUuICAgICAgICAgICovCisgICAgICB7CisgICAgICAgIEZUX0NoYXJNYXBSZWMgIGNtYXByZWM7CisgICAgICAgIEZUX0NoYXJNYXAgICAgIGNtYXA7CisgICAgICAgIEZUX1VJbnQgICAgICAgIG5uOworICAgICAgICBDRkZfRW5jb2RpbmcgICBlbmNvZGluZyA9ICZjZmYtPmVuY29kaW5nOworCisKKyAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IChGVF9VSW50KWNmZmZhY2UtPm51bV9jaGFybWFwczsgbm4rKyApCisgICAgICAgIHsKKyAgICAgICAgICBjbWFwID0gY2ZmZmFjZS0+Y2hhcm1hcHNbbm5dOworCisgICAgICAgICAgLyogV2luZG93cyBVbmljb2RlPyAqLworICAgICAgICAgIGlmICggY21hcC0+cGxhdGZvcm1faWQgPT0gVFRfUExBVEZPUk1fTUlDUk9TT0ZUICYmCisgICAgICAgICAgICAgICBjbWFwLT5lbmNvZGluZ19pZCA9PSBUVF9NU19JRF9VTklDT0RFX0NTICAgKQorICAgICAgICAgICAgZ290byBTa2lwX1VuaWNvZGU7CisKKyAgICAgICAgICAvKiBBcHBsZSBVbmljb2RlIHBsYXRmb3JtIGlkPyAqLworICAgICAgICAgIGlmICggY21hcC0+cGxhdGZvcm1faWQgPT0gVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERSApCisgICAgICAgICAgICBnb3RvIFNraXBfVW5pY29kZTsgLyogQXBwbGUgVW5pY29kZSAqLworICAgICAgICB9CisKKyAgICAgICAgLyogc2luY2UgQ0lELWtleWVkIGZvbnRzIGRvbid0IGNvbnRhaW4gZ2x5cGggbmFtZXMsIHdlIGNhbid0ICovCisgICAgICAgIC8qIGNvbnN0cnVjdCBhIGNtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIHB1cmVfY2ZmICYmIGNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmNpZF9yZWdpc3RyeSAhPSAweEZGRkZVICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgLyogd2UgZGlkbid0IGZpbmQgYSBVbmljb2RlIGNoYXJtYXAgLS0gc3ludGhlc2l6ZSBvbmUgKi8KKyAgICAgICAgY21hcHJlYy5mYWNlICAgICAgICA9IGNmZmZhY2U7CisgICAgICAgIGNtYXByZWMucGxhdGZvcm1faWQgPSBUVF9QTEFURk9STV9NSUNST1NPRlQ7CisgICAgICAgIGNtYXByZWMuZW5jb2RpbmdfaWQgPSBUVF9NU19JRF9VTklDT0RFX0NTOworICAgICAgICBjbWFwcmVjLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfVU5JQ09ERTsKKworICAgICAgICBubiA9IChGVF9VSW50KWNmZmZhY2UtPm51bV9jaGFybWFwczsKKworICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAmQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VULCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21hcHJlYywgTlVMTCApOworICAgICAgICBpZiAoIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIEZUX0VSUl9ORVEoIGVycm9yLCBOb19Vbmljb2RlX0dseXBoX05hbWUgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgICAgICAvKiBpZiBubyBVbmljb2RlIGNoYXJtYXAgd2FzIHByZXZpb3VzbHkgc2VsZWN0ZWQsIHNlbGVjdCB0aGlzIG9uZSAqLworICAgICAgICBpZiAoIGNmZmZhY2UtPmNoYXJtYXAgPT0gTlVMTCAmJiBubiAhPSAoRlRfVUludCljZmZmYWNlLT5udW1fY2hhcm1hcHMgKQorICAgICAgICAgIGNmZmZhY2UtPmNoYXJtYXAgPSBjZmZmYWNlLT5jaGFybWFwc1tubl07CisKKyAgICAgIFNraXBfVW5pY29kZToKKyAgICAgICAgaWYgKCBlbmNvZGluZy0+Y291bnQgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0NNYXBfQ2xhc3MgIGNsYXp6OworCisKKyAgICAgICAgICBjbWFwcmVjLmZhY2UgICAgICAgID0gY2ZmZmFjZTsKKyAgICAgICAgICBjbWFwcmVjLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fQURPQkU7ICAvKiBBZG9iZSBwbGF0Zm9ybSBpZCAqLworCisgICAgICAgICAgaWYgKCBlbmNvZGluZy0+b2Zmc2V0ID09IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9TVEFOREFSRDsKKyAgICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRDsKKyAgICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSAmQ0ZGX0NNQVBfRU5DT0RJTkdfQ0xBU1NfUkVDX0dFVDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIGVuY29kaW5nLT5vZmZzZXQgPT0gMSApCisgICAgICAgICAgeworICAgICAgICAgICAgY21hcHJlYy5lbmNvZGluZ19pZCA9IFRUX0FET0JFX0lEX0VYUEVSVDsKKyAgICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQ7CisgICAgICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gJkNGRl9DTUFQX0VOQ09ESU5HX0NMQVNTX1JFQ19HRVQ7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBjbWFwcmVjLmVuY29kaW5nX2lkID0gVFRfQURPQkVfSURfQ1VTVE9NOworICAgICAgICAgICAgY21hcHJlYy5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTTsKKyAgICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSAmQ0ZGX0NNQVBfRU5DT0RJTkdfQ0xBU1NfUkVDX0dFVDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCBjbGF6eiwgTlVMTCwgJmNtYXByZWMsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2ZmX2ZhY2VfZG9uZSggRlRfRmFjZSAgY2ZmZmFjZSApICAgICAgICAgLyogQ0ZGX0ZhY2UgKi8KKyAgeworICAgIENGRl9GYWNlICAgICAgZmFjZSA9IChDRkZfRmFjZSljZmZmYWNlOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5OworICAgIFNGTlRfU2VydmljZSAgc2ZudDsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm47CisKKyAgICBtZW1vcnkgPSBjZmZmYWNlLT5tZW1vcnk7CisgICAgc2ZudCAgID0gKFNGTlRfU2VydmljZSlmYWNlLT5zZm50OworCisgICAgaWYgKCBzZm50ICkKKyAgICAgIHNmbnQtPmRvbmVfZmFjZSggZmFjZSApOworCisgICAgeworICAgICAgQ0ZGX0ZvbnQgIGNmZiA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworCisKKyAgICAgIGlmICggY2ZmICkKKyAgICAgIHsKKyAgICAgICAgY2ZmX2ZvbnRfZG9uZSggY2ZmICk7CisgICAgICAgIEZUX0ZSRUUoIGZhY2UtPmV4dHJhLmRhdGEgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfZHJpdmVyX2luaXQoIEZUX01vZHVsZSAgbW9kdWxlICkgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgeworICAgIENGRl9Ecml2ZXIgIGRyaXZlciA9IChDRkZfRHJpdmVyKW1vZHVsZTsKKworCisgICAgLyogc2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzLCBjZi4gYGZ0Y2ZmZHJ2LmgnICovCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9DRkZfSElOVElOR19GUkVFVFlQRTsKKyNlbHNlCisgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0NGRl9ISU5USU5HX0FET0JFOworI2VuZGlmCisKKyAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gRkFMU0U7CisKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMF0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1sxXSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTE7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzJdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMjsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbM10gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s0XSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDM7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzVdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZMzsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNl0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0OworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s3XSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTQ7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfZHJpdmVyX2RvbmUoIEZUX01vZHVsZSAgbW9kdWxlICkgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgeworICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZm9ianMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZm9ianMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M5NTMxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2Zmb2Jqcy5oCkBAIC0wLDAgKzEsMTg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZmZvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DRkZPQkpTX0hfXworI2RlZmluZSBfX0NGRk9CSlNfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlICJjZmZ0eXBlcy5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0ZGX0RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBDRkZfRHJpdmVyUmVjXyogIENGRl9Ecml2ZXI7CisKKyAgdHlwZWRlZiBUVF9GYWNlICBDRkZfRmFjZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENGRl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGFuIE9wZW5UeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9TaXplUmVjXworICB7CisgICAgRlRfU2l6ZVJlYyAgcm9vdDsKKyAgICBGVF9VTG9uZyAgICBzdHJpa2VfaW5kZXg7ICAgIC8qIDB4RkZGRkZGRkYgdG8gaW5kaWNhdGUgaW52YWxpZCAqLworCisgIH0gQ0ZGX1NpemVSZWMsICpDRkZfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENGRl9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGFuIE9wZW5UeXBlIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9HbHlwaFNsb3RSZWNfCisgIHsKKyAgICBGVF9HbHlwaFNsb3RSZWMgIHJvb3Q7CisKKyAgICBGVF9Cb29sICAgICAgICAgIGhpbnQ7CisgICAgRlRfQm9vbCAgICAgICAgICBzY2FsZWQ7CisKKyAgICBGVF9GaXhlZCAgICAgICAgIHhfc2NhbGU7CisgICAgRlRfRml4ZWQgICAgICAgICB5X3NjYWxlOworCisgIH0gQ0ZGX0dseXBoU2xvdFJlYywgKkNGRl9HbHlwaFNsb3Q7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDRkZfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgaW50ZXJmYWNlIHRvIHRoZSBgaW50ZXJuYWwnIGZpZWxkIG9mIGBGVF9TaXplJy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfSW50ZXJuYWxSZWNfCisgIHsKKyAgICBQU0hfR2xvYmFscyAgdG9wZm9udDsKKyAgICBQU0hfR2xvYmFscyAgc3ViZm9udHNbQ0ZGX01BWF9DSURfRk9OVFNdOworCisgIH0gQ0ZGX0ludGVybmFsUmVjLCAqQ0ZGX0ludGVybmFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdWJnbHlwaCB0cmFuc2Zvcm1hdGlvbiByZWNvcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfVHJhbnNmb3JtXworICB7CisgICAgRlRfRml4ZWQgICAgeHgsIHh5OyAgICAgLyogdHJhbnNmb3JtYXRpb24gbWF0cml4IGNvZWZmaWNpZW50cyAqLworICAgIEZUX0ZpeGVkICAgIHl4LCB5eTsKKyAgICBGVF9GMjZEb3Q2ICBveCwgb3k7ICAgICAvKiBvZmZzZXRzICAgICAgICAqLworCisgIH0gQ0ZGX1RyYW5zZm9ybTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBDRkYgZHJpdmVyIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9Ecml2ZXJSZWNfCisgIHsKKyAgICBGVF9Ecml2ZXJSZWMgIHJvb3Q7CisKKyAgICBGVF9VSW50ICBoaW50aW5nX2VuZ2luZTsKKyAgICBGVF9Cb29sICBub19zdGVtX2RhcmtlbmluZzsKKworICAgIEZUX0ludCAgZGFya2VuX3BhcmFtc1s4XTsKKworICB9IENGRl9Ecml2ZXJSZWM7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfc2l6ZV9pbml0KCBGVF9TaXplICBzaXplICk7ICAgICAgICAgICAvKiBDRkZfU2l6ZSAqLworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX3NpemVfZG9uZSggRlRfU2l6ZSAgc2l6ZSApOyAgICAgICAgICAgLyogQ0ZGX1NpemUgKi8KKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfc2l6ZV9yZXF1ZXN0KCBGVF9TaXplICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfc2l6ZV9zZWxlY3QoIEZUX1NpemUgICBzaXplLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBzdHJpa2VfaW5kZXggKTsKKworI2VuZGlmCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZmZfc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfc2xvdF9pbml0KCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRmFjZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfZmFjZV9pbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UsICAgICAgICAgICAvKiBDRkZfRmFjZSAqLworICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmZl9mYWNlX2RvbmUoIEZUX0ZhY2UgIGZhY2UgKTsgICAgICAgICAgICAgICAvKiBDRkZfRmFjZSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEcml2ZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9kcml2ZXJfaW5pdCggRlRfTW9kdWxlICBtb2R1bGUgKTsgICAgICAgICAvKiBDRkZfRHJpdmVyICovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZmZfZHJpdmVyX2RvbmUoIEZUX01vZHVsZSAgbW9kdWxlICk7ICAgICAgICAgLyogQ0ZGX0RyaXZlciAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0ZGT0JKU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnBhcnNlLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2IzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwYXJzZS5jCkBAIC0wLDAgKzEsMTE5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmcGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJjZmZwYXJzZS5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworI2luY2x1ZGUgImNmZmVycnMuaCIKKyNpbmNsdWRlICJjZmZwaWMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZnBhcnNlCisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfcGFyc2VyX2luaXQoIENGRl9QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5KQorICB7CisgICAgRlRfTUVNX1pFUk8oIHBhcnNlciwgc2l6ZW9mICggKnBhcnNlciApICk7CisKKyAgICBwYXJzZXItPnRvcCAgICAgICAgID0gcGFyc2VyLT5zdGFjazsKKyAgICBwYXJzZXItPm9iamVjdF9jb2RlID0gY29kZTsKKyAgICBwYXJzZXItPm9iamVjdCAgICAgID0gb2JqZWN0OworICAgIHBhcnNlci0+bGlicmFyeSAgICAgPSBsaWJyYXJ5OworICB9CisKKworICAvKiByZWFkIGFuIGludGVnZXIgKi8KKyAgc3RhdGljIEZUX0xvbmcKKyAgY2ZmX3BhcnNlX2ludGVnZXIoIEZUX0J5dGUqICBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICBsaW1pdCApCisgIHsKKyAgICBGVF9CeXRlKiAgcCAgID0gc3RhcnQ7CisgICAgRlRfSW50ICAgIHYgICA9ICpwKys7CisgICAgRlRfTG9uZyAgIHZhbCA9IDA7CisKKworICAgIGlmICggdiA9PSAyOCApCisgICAgeworICAgICAgaWYgKCBwICsgMiA+IGxpbWl0ICkKKyAgICAgICAgZ290byBCYWQ7CisKKyAgICAgIHZhbCA9IChGVF9TaG9ydCkoICggKEZUX1VTaG9ydClwWzBdIDw8IDggKSB8IHBbMV0gKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHYgPT0gMjkgKQorICAgIHsKKyAgICAgIGlmICggcCArIDQgPiBsaW1pdCApCisgICAgICAgIGdvdG8gQmFkOworCisgICAgICB2YWwgPSAoRlRfTG9uZykoICggKEZUX1VMb25nKXBbMF0gPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VMb25nKXBbMV0gPDwgMTYgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VMb25nKXBbMl0gPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKXBbM10gICAgICAgICApOworICAgIH0KKyAgICBlbHNlIGlmICggdiA8IDI0NyApCisgICAgeworICAgICAgdmFsID0gdiAtIDEzOTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHYgPCAyNTEgKQorICAgIHsKKyAgICAgIGlmICggcCArIDEgPiBsaW1pdCApCisgICAgICAgIGdvdG8gQmFkOworCisgICAgICB2YWwgPSAoIHYgLSAyNDcgKSAqIDI1NiArIHBbMF0gKyAxMDg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHAgKyAxID4gbGltaXQgKQorICAgICAgICBnb3RvIEJhZDsKKworICAgICAgdmFsID0gLSggdiAtIDI1MSApICogMjU2IC0gcFswXSAtIDEwODsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gdmFsOworCisgIEJhZDoKKyAgICB2YWwgPSAwOworICAgIEZUX1RSQUNFNCgoICIhISFFTkQgT0YgREFUQTohISEiICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX0xvbmcgcG93ZXJfdGVuc1tdID0KKyAgeworICAgIDFMLAorICAgIDEwTCwKKyAgICAxMDBMLAorICAgIDEwMDBMLAorICAgIDEwMDAwTCwKKyAgICAxMDAwMDBMLAorICAgIDEwMDAwMDBMLAorICAgIDEwMDAwMDAwTCwKKyAgICAxMDAwMDAwMDBMLAorICAgIDEwMDAwMDAwMDBMCisgIH07CisKKworICAvKiByZWFkIGEgcmVhbCAqLworICBzdGF0aWMgRlRfRml4ZWQKKyAgY2ZmX3BhcnNlX3JlYWwoIEZUX0J5dGUqICBzdGFydCwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICBwb3dlcl90ZW4sCisgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgc2NhbGluZyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IHN0YXJ0OworICAgIEZUX0ludCAgICBuaWI7CisgICAgRlRfVUludCAgIHBoYXNlOworCisgICAgRlRfTG9uZyAgIHJlc3VsdCwgbnVtYmVyLCBleHBvbmVudDsKKyAgICBGVF9JbnQgICAgc2lnbiA9IDAsIGV4cG9uZW50X3NpZ24gPSAwLCBoYXZlX292ZXJmbG93ID0gMDsKKyAgICBGVF9Mb25nICAgZXhwb25lbnRfYWRkLCBpbnRlZ2VyX2xlbmd0aCwgZnJhY3Rpb25fbGVuZ3RoOworCisKKyAgICBpZiAoIHNjYWxpbmcgKQorICAgICAgKnNjYWxpbmcgPSAwOworCisgICAgcmVzdWx0ID0gMDsKKworICAgIG51bWJlciAgID0gMDsKKyAgICBleHBvbmVudCA9IDA7CisKKyAgICBleHBvbmVudF9hZGQgICAgPSAwOworICAgIGludGVnZXJfbGVuZ3RoICA9IDA7CisgICAgZnJhY3Rpb25fbGVuZ3RoID0gMDsKKworICAgIC8qIEZpcnN0IG9mIGFsbCwgcmVhZCB0aGUgaW50ZWdlciBwYXJ0LiAqLworICAgIHBoYXNlID0gNDsKKworICAgIGZvciAoOzspCisgICAgeworICAgICAgLyogSWYgd2UgZW50ZXJlZCB0aGlzIGl0ZXJhdGlvbiB3aXRoIHBoYXNlID09IDQsIHdlIG5lZWQgdG8gKi8KKyAgICAgIC8qIHJlYWQgYSBuZXcgYnl0ZS4gIFRoaXMgYWxzbyBza2lwcyBwYXN0IHRoZSBpbml0aWFsIDB4MUUuICovCisgICAgICBpZiAoIHBoYXNlICkKKyAgICAgIHsKKyAgICAgICAgcCsrOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIHBhc3QgdGhlIGVuZC4gKi8KKyAgICAgICAgaWYgKCBwID49IGxpbWl0ICkKKyAgICAgICAgICBnb3RvIEJhZDsKKyAgICAgIH0KKworICAgICAgLyogR2V0IHRoZSBuaWJibGUuICovCisgICAgICBuaWIgICA9IChGVF9JbnQpKCBwWzBdID4+IHBoYXNlICkgJiAweEY7CisgICAgICBwaGFzZSA9IDQgLSBwaGFzZTsKKworICAgICAgaWYgKCBuaWIgPT0gMHhFICkKKyAgICAgICAgc2lnbiA9IDE7CisgICAgICBlbHNlIGlmICggbmliID4gOSApCisgICAgICAgIGJyZWFrOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBJbmNyZWFzZSBleHBvbmVudCBpZiB3ZSBjYW4ndCBhZGQgdGhlIGRpZ2l0LiAqLworICAgICAgICBpZiAoIG51bWJlciA+PSAweENDQ0NDQ0NMICkKKyAgICAgICAgICBleHBvbmVudF9hZGQrKzsKKyAgICAgICAgLyogU2tpcCBsZWFkaW5nIHplcm9zLiAqLworICAgICAgICBlbHNlIGlmICggbmliIHx8IG51bWJlciApCisgICAgICAgIHsKKyAgICAgICAgICBpbnRlZ2VyX2xlbmd0aCsrOworICAgICAgICAgIG51bWJlciA9IG51bWJlciAqIDEwICsgbmliOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogUmVhZCBmcmFjdGlvbiBwYXJ0LCBpZiBhbnkuICovCisgICAgaWYgKCBuaWIgPT0gMHhBICkKKyAgICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIC8qIElmIHdlIGVudGVyZWQgdGhpcyBpdGVyYXRpb24gd2l0aCBwaGFzZSA9PSA0LCB3ZSBuZWVkICovCisgICAgICAgIC8qIHRvIHJlYWQgYSBuZXcgYnl0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggcGhhc2UgKQorICAgICAgICB7CisgICAgICAgICAgcCsrOworCisgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kLiAqLworICAgICAgICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIEJhZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCB0aGUgbmliYmxlLiAqLworICAgICAgICBuaWIgICA9ICggcFswXSA+PiBwaGFzZSApICYgMHhGOworICAgICAgICBwaGFzZSA9IDQgLSBwaGFzZTsKKyAgICAgICAgaWYgKCBuaWIgPj0gMTAgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFNraXAgbGVhZGluZyB6ZXJvcyBpZiBwb3NzaWJsZS4gKi8KKyAgICAgICAgaWYgKCAhbmliICYmICFudW1iZXIgKQorICAgICAgICAgIGV4cG9uZW50X2FkZC0tOworICAgICAgICAvKiBPbmx5IGFkZCBkaWdpdCBpZiB3ZSBkb24ndCBvdmVyZmxvdy4gKi8KKyAgICAgICAgZWxzZSBpZiAoIG51bWJlciA8IDB4Q0NDQ0NDQ0wgJiYgZnJhY3Rpb25fbGVuZ3RoIDwgOSApCisgICAgICAgIHsKKyAgICAgICAgICBmcmFjdGlvbl9sZW5ndGgrKzsKKyAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiAxMCArIG5pYjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogUmVhZCBleHBvbmVudCwgaWYgYW55LiAqLworICAgIGlmICggbmliID09IDEyICkKKyAgICB7CisgICAgICBleHBvbmVudF9zaWduID0gMTsKKyAgICAgIG5pYiAgICAgICAgICAgPSAxMTsKKyAgICB9CisKKyAgICBpZiAoIG5pYiA9PSAxMSApCisgICAgeworICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgLyogSWYgd2UgZW50ZXJlZCB0aGlzIGl0ZXJhdGlvbiB3aXRoIHBoYXNlID09IDQsICovCisgICAgICAgIC8qIHdlIG5lZWQgdG8gcmVhZCBhIG5ldyBieXRlLiAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIHBoYXNlICkKKyAgICAgICAgeworICAgICAgICAgIHArKzsKKworICAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIHBhc3QgdGhlIGVuZC4gKi8KKyAgICAgICAgICBpZiAoIHAgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBCYWQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBHZXQgdGhlIG5pYmJsZS4gKi8KKyAgICAgICAgbmliICAgPSAoIHBbMF0gPj4gcGhhc2UgKSAmIDB4RjsKKyAgICAgICAgcGhhc2UgPSA0IC0gcGhhc2U7CisgICAgICAgIGlmICggbmliID49IDEwICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBBcmJpdHJhcmlseSBsaW1pdCBleHBvbmVudC4gKi8KKyAgICAgICAgaWYgKCBleHBvbmVudCA+IDEwMDAgKQorICAgICAgICAgIGhhdmVfb3ZlcmZsb3cgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgZXhwb25lbnQgPSBleHBvbmVudCAqIDEwICsgbmliOworICAgICAgfQorCisgICAgICBpZiAoIGV4cG9uZW50X3NpZ24gKQorICAgICAgICBleHBvbmVudCA9IC1leHBvbmVudDsKKyAgICB9CisKKyAgICBpZiAoICFudW1iZXIgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBoYXZlX292ZXJmbG93ICkKKyAgICB7CisgICAgICBpZiAoIGV4cG9uZW50X3NpZ24gKQorICAgICAgICBnb3RvIFVuZGVyZmxvdzsKKyAgICAgIGVsc2UKKyAgICAgICAgZ290byBPdmVyZmxvdzsKKyAgICB9CisKKyAgICAvKiBXZSBkb24ndCBjaGVjayBgcG93ZXJfdGVuJyBhbmQgYGV4cG9uZW50X2FkZCcuICovCisgICAgZXhwb25lbnQgKz0gcG93ZXJfdGVuICsgZXhwb25lbnRfYWRkOworCisgICAgaWYgKCBzY2FsaW5nICkKKyAgICB7CisgICAgICAvKiBPbmx5IHVzZSBgZnJhY3Rpb25fbGVuZ3RoJy4gKi8KKyAgICAgIGZyYWN0aW9uX2xlbmd0aCArPSBpbnRlZ2VyX2xlbmd0aDsKKyAgICAgIGV4cG9uZW50ICAgICAgICArPSBpbnRlZ2VyX2xlbmd0aDsKKworICAgICAgaWYgKCBmcmFjdGlvbl9sZW5ndGggPD0gNSApCisgICAgICB7CisgICAgICAgIGlmICggbnVtYmVyID4gMHg3RkZGTCApCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgICA9IEZUX0RpdkZpeCggbnVtYmVyLCAxMCApOworICAgICAgICAgICpzY2FsaW5nID0gZXhwb25lbnQgLSBmcmFjdGlvbl9sZW5ndGggKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICggZXhwb25lbnQgPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Mb25nICBuZXdfZnJhY3Rpb25fbGVuZ3RoLCBzaGlmdDsKKworCisgICAgICAgICAgICAvKiBNYWtlIGBzY2FsaW5nJyBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gKi8KKyAgICAgICAgICAgIG5ld19mcmFjdGlvbl9sZW5ndGggPSBGVF9NSU4oIGV4cG9uZW50LCA1ICk7CisgICAgICAgICAgICBzaGlmdCAgICAgICAgICAgICAgID0gbmV3X2ZyYWN0aW9uX2xlbmd0aCAtIGZyYWN0aW9uX2xlbmd0aDsKKworICAgICAgICAgICAgaWYgKCBzaGlmdCA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBleHBvbmVudCAtPSBuZXdfZnJhY3Rpb25fbGVuZ3RoOworICAgICAgICAgICAgICBudW1iZXIgICAqPSBwb3dlcl90ZW5zW3NoaWZ0XTsKKyAgICAgICAgICAgICAgaWYgKCBudW1iZXIgPiAweDdGRkZMICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG51bWJlciAgIC89IDEwOworICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZXhwb25lbnQgLT0gZnJhY3Rpb25fbGVuZ3RoOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBvbmVudCAtPSBmcmFjdGlvbl9sZW5ndGg7CisKKyAgICAgICAgICByZXN1bHQgICA9IChGVF9Mb25nKSggKEZUX1VMb25nKW51bWJlciA8PCAxNiApOworICAgICAgICAgICpzY2FsaW5nID0gZXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCAoIG51bWJlciAvIHBvd2VyX3RlbnNbZnJhY3Rpb25fbGVuZ3RoIC0gNV0gKSA+IDB4N0ZGRkwgKQorICAgICAgICB7CisgICAgICAgICAgcmVzdWx0ICAgPSBGVF9EaXZGaXgoIG51bWJlciwgcG93ZXJfdGVuc1tmcmFjdGlvbl9sZW5ndGggLSA0XSApOworICAgICAgICAgICpzY2FsaW5nID0gZXhwb25lbnQgLSA0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCAgID0gRlRfRGl2Rml4KCBudW1iZXIsIHBvd2VyX3RlbnNbZnJhY3Rpb25fbGVuZ3RoIC0gNV0gKTsKKyAgICAgICAgICAqc2NhbGluZyA9IGV4cG9uZW50IC0gNTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaW50ZWdlcl9sZW5ndGggICs9IGV4cG9uZW50OworICAgICAgZnJhY3Rpb25fbGVuZ3RoIC09IGV4cG9uZW50OworCisgICAgICBpZiAoIGludGVnZXJfbGVuZ3RoID4gNSApCisgICAgICAgIGdvdG8gT3ZlcmZsb3c7CisgICAgICBpZiAoIGludGVnZXJfbGVuZ3RoIDwgLTUgKQorICAgICAgICBnb3RvIFVuZGVyZmxvdzsKKworICAgICAgLyogUmVtb3ZlIG5vbi1zaWduaWZpY2FudCBkaWdpdHMuICovCisgICAgICBpZiAoIGludGVnZXJfbGVuZ3RoIDwgMCApCisgICAgICB7CisgICAgICAgIG51bWJlciAgICAgICAgICAvPSBwb3dlcl90ZW5zWy1pbnRlZ2VyX2xlbmd0aF07CisgICAgICAgIGZyYWN0aW9uX2xlbmd0aCArPSBpbnRlZ2VyX2xlbmd0aDsKKyAgICAgIH0KKworICAgICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgZXhwb25lbnQgd2FzIG5vbi16ZXJvICovCisgICAgICBpZiAoIGZyYWN0aW9uX2xlbmd0aCA9PSAxMCApCisgICAgICB7CisgICAgICAgIG51bWJlciAgICAgICAgICAvPSAxMDsKKyAgICAgICAgZnJhY3Rpb25fbGVuZ3RoIC09IDE7CisgICAgICB9CisKKyAgICAgIC8qIENvbnZlcnQgaW50byAxNi4xNiBmb3JtYXQuICovCisgICAgICBpZiAoIGZyYWN0aW9uX2xlbmd0aCA+IDAgKQorICAgICAgeworICAgICAgICBpZiAoICggbnVtYmVyIC8gcG93ZXJfdGVuc1tmcmFjdGlvbl9sZW5ndGhdICkgPiAweDdGRkZMICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgcmVzdWx0ID0gRlRfRGl2Rml4KCBudW1iZXIsIHBvd2VyX3RlbnNbZnJhY3Rpb25fbGVuZ3RoXSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBudW1iZXIgKj0gcG93ZXJfdGVuc1stZnJhY3Rpb25fbGVuZ3RoXTsKKworICAgICAgICBpZiAoIG51bWJlciA+IDB4N0ZGRkwgKQorICAgICAgICAgIGdvdG8gT3ZlcmZsb3c7CisKKyAgICAgICAgcmVzdWx0ID0gKEZUX0xvbmcpKCAoRlRfVUxvbmcpbnVtYmVyIDw8IDE2ICk7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgaWYgKCBzaWduICkKKyAgICAgIHJlc3VsdCA9IC1yZXN1bHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworCisgIE92ZXJmbG93OgorICAgIHJlc3VsdCA9IDB4N0ZGRkZGRkZMOworICAgIEZUX1RSQUNFNCgoICIhISFPVkVSRkxPVzohISEiICkpOworICAgIGdvdG8gRXhpdDsKKworICBVbmRlcmZsb3c6CisgICAgcmVzdWx0ID0gMDsKKyAgICBGVF9UUkFDRTQoKCAiISEhVU5ERVJGTE9XOiEhISIgKSk7CisgICAgZ290byBFeGl0OworCisgIEJhZDoKKyAgICByZXN1bHQgPSAwOworICAgIEZUX1RSQUNFNCgoICIhISFFTkQgT0YgREFUQTohISEiICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgLyogcmVhZCBhIG51bWJlciwgZWl0aGVyIGludGVnZXIgb3IgcmVhbCAqLworICBzdGF0aWMgRlRfTG9uZworICBjZmZfcGFyc2VfbnVtKCBGVF9CeXRlKiogIGQgKQorICB7CisgICAgcmV0dXJuICoqZCA9PSAzMCA/ICggY2ZmX3BhcnNlX3JlYWwoIGRbMF0sIGRbMV0sIDAsIE5VTEwgKSA+PiAxNiApCisgICAgICAgICAgICAgICAgICAgICA6ICAgY2ZmX3BhcnNlX2ludGVnZXIoIGRbMF0sIGRbMV0gKTsKKyAgfQorCisKKyAgLyogcmVhZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgZWl0aGVyIGludGVnZXIgb3IgcmVhbCAqLworICBzdGF0aWMgRlRfRml4ZWQKKyAgZG9fZml4ZWQoIEZUX0J5dGUqKiAgZCwKKyAgICAgICAgICAgIEZUX0xvbmcgICAgc2NhbGluZyApCisgIHsKKyAgICBpZiAoICoqZCA9PSAzMCApCisgICAgICByZXR1cm4gY2ZmX3BhcnNlX3JlYWwoIGRbMF0sIGRbMV0sIHNjYWxpbmcsIE5VTEwgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgRlRfTG9uZyAgdmFsID0gY2ZmX3BhcnNlX2ludGVnZXIoIGRbMF0sIGRbMV0gKTsKKworCisgICAgICBpZiAoIHNjYWxpbmcgKQorICAgICAgICB2YWwgKj0gcG93ZXJfdGVuc1tzY2FsaW5nXTsKKworICAgICAgaWYgKCB2YWwgPiAweDdGRkYgKQorICAgICAgeworICAgICAgICB2YWwgPSAweDdGRkZGRkZGTDsKKyAgICAgICAgZ290byBPdmVyZmxvdzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCB2YWwgPCAtMHg3RkZGICkKKyAgICAgIHsKKyAgICAgICAgdmFsID0gLTB4N0ZGRkZGRkZMOworICAgICAgICBnb3RvIE92ZXJmbG93OworICAgICAgfQorCisgICAgICByZXR1cm4gKEZUX0xvbmcpKCAoRlRfVUxvbmcpdmFsIDw8IDE2ICk7CisKKyAgICBPdmVyZmxvdzoKKyAgICAgIEZUX1RSQUNFNCgoICIhISFPVkVSRkxPVzohISEiICkpOworICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgIH0KKworCisgIC8qIHJlYWQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGVpdGhlciBpbnRlZ2VyIG9yIHJlYWwgKi8KKyAgc3RhdGljIEZUX0ZpeGVkCisgIGNmZl9wYXJzZV9maXhlZCggRlRfQnl0ZSoqICBkICkKKyAgeworICAgIHJldHVybiBkb19maXhlZCggZCwgMCApOworICB9CisKKworICAvKiByZWFkIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBlaXRoZXIgaW50ZWdlciBvciByZWFsLCAqLworICAvKiBidXQgcmV0dXJuIGAxMF5zY2FsaW5nJyB0aW1lcyB0aGUgbnVtYmVyIHJlYWQgaW4gICAgICAqLworICBzdGF0aWMgRlRfRml4ZWQKKyAgY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggRlRfQnl0ZSoqICBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHNjYWxpbmcgKQorICB7CisgICAgcmV0dXJuIGRvX2ZpeGVkKCBkLCBzY2FsaW5nICk7CisgIH0KKworCisgIC8qIHJlYWQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGVpdGhlciBpbnRlZ2VyIG9yIHJlYWwsICAgICAqLworICAvKiBhbmQgcmV0dXJuIGl0IGFzIHByZWNpc2UgYXMgcG9zc2libGUgLS0gYHNjYWxpbmcnIHJldHVybnMgKi8KKyAgLyogdGhlIHNjYWxpbmcgZmFjdG9yIChhcyBhIHBvd2VyIG9mIDEwKSAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GaXhlZAorICBjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyggRlRfQnl0ZSoqICBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICBzY2FsaW5nICkKKyAgeworICAgIEZUX0FTU0VSVCggc2NhbGluZyApOworCisgICAgaWYgKCAqKmQgPT0gMzAgKQorICAgICAgcmV0dXJuIGNmZl9wYXJzZV9yZWFsKCBkWzBdLCBkWzFdLCAwLCBzY2FsaW5nICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX0xvbmcgIG51bWJlcjsKKyAgICAgIEZUX0ludCAgIGludGVnZXJfbGVuZ3RoOworCisKKyAgICAgIG51bWJlciA9IGNmZl9wYXJzZV9pbnRlZ2VyKCBkWzBdLCBkWzFdICk7CisKKyAgICAgIGlmICggbnVtYmVyID4gMHg3RkZGTCApCisgICAgICB7CisgICAgICAgIGZvciAoIGludGVnZXJfbGVuZ3RoID0gNTsgaW50ZWdlcl9sZW5ndGggPCAxMDsgaW50ZWdlcl9sZW5ndGgrKyApCisgICAgICAgICAgaWYgKCBudW1iZXIgPCBwb3dlcl90ZW5zW2ludGVnZXJfbGVuZ3RoXSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoICggbnVtYmVyIC8gcG93ZXJfdGVuc1tpbnRlZ2VyX2xlbmd0aCAtIDVdICkgPiAweDdGRkZMICkKKyAgICAgICAgeworICAgICAgICAgICpzY2FsaW5nID0gaW50ZWdlcl9sZW5ndGggLSA0OworICAgICAgICAgIHJldHVybiBGVF9EaXZGaXgoIG51bWJlciwgcG93ZXJfdGVuc1tpbnRlZ2VyX2xlbmd0aCAtIDRdICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgKnNjYWxpbmcgPSBpbnRlZ2VyX2xlbmd0aCAtIDU7CisgICAgICAgICAgcmV0dXJuIEZUX0RpdkZpeCggbnVtYmVyLCBwb3dlcl90ZW5zW2ludGVnZXJfbGVuZ3RoIC0gNV0gKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAqc2NhbGluZyA9IDA7CisgICAgICAgIHJldHVybiAoRlRfTG9uZykoIChGVF9VTG9uZyludW1iZXIgPDwgMTYgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfcGFyc2VfZm9udF9tYXRyaXgoIENGRl9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3QgICA9IChDRkZfRm9udFJlY0RpY3QpcGFyc2VyLT5vYmplY3Q7CisgICAgRlRfTWF0cml4KiAgICAgICBtYXRyaXggPSAmZGljdC0+Zm9udF9tYXRyaXg7CisgICAgRlRfVmVjdG9yKiAgICAgICBvZmZzZXQgPSAmZGljdC0+Zm9udF9vZmZzZXQ7CisgICAgRlRfVUxvbmcqICAgICAgICB1cG0gICAgPSAmZGljdC0+dW5pdHNfcGVyX2VtOworICAgIEZUX0J5dGUqKiAgICAgICAgZGF0YSAgID0gcGFyc2VyLT5zdGFjazsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yICA9IEZUX0VSUiggU3RhY2tfVW5kZXJmbG93ICk7CisKKworICAgIGlmICggcGFyc2VyLT50b3AgPj0gcGFyc2VyLT5zdGFjayArIDYgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIHNjYWxpbmc7CisKKworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICAgIGRpY3QtPmhhc19mb250X21hdHJpeCA9IFRSVUU7CisKKyAgICAgIC8qIFdlIGV4cGVjdCBhIHdlbGwtZm9ybWVkIGZvbnQgbWF0cml4LCB0aGlzIGlzLCB0aGUgbWF0cml4IGVsZW1lbnRzICovCisgICAgICAvKiBgeHgnIGFuZCBgeXknIGFyZSBvZiBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIG1hZ25pdHVkZS4gIFRvIGF2b2lkICAqLworICAgICAgLyogbG9zcyBvZiBwcmVjaXNpb24sIHdlIHVzZSB0aGUgbWFnbml0dWRlIG9mIGVsZW1lbnQgYHh4JyB0byBzY2FsZSAgKi8KKyAgICAgIC8qIGFsbCBvdGhlciBlbGVtZW50cy4gIFRoZSBzY2FsaW5nIGZhY3RvciBpcyB0aGVuIGNvbnRhaW5lZCBpbiB0aGUgICovCisgICAgICAvKiBgdW5pdHNfcGVyX2VtJyB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBtYXRyaXgtPnh4ID0gY2ZmX3BhcnNlX2ZpeGVkX2R5bmFtaWMoIGRhdGErKywgJnNjYWxpbmcgKTsKKworICAgICAgc2NhbGluZyA9IC1zY2FsaW5nOworCisgICAgICBpZiAoIHNjYWxpbmcgPCAwIHx8IHNjYWxpbmcgPiA5ICkKKyAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGRlZmF1bHQgbWF0cml4IGluIGNhc2Ugb2YgdW5saWtlbHkgdmFsdWVzLiAqLworCisgICAgICAgIEZUX1RSQUNFMSgoICJjZmZfcGFyc2VfZm9udF9tYXRyaXg6IgorICAgICAgICAgICAgICAgICAgICAiIHN0cmFuZ2Ugc2NhbGluZyB2YWx1ZSBmb3IgeHggZWxlbWVudCAoJWQpLFxuIgorICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgIiB1c2luZyBkZWZhdWx0IG1hdHJpeFxuIiwgc2NhbGluZyApKTsKKworICAgICAgICBtYXRyaXgtPnh4ID0gMHgxMDAwMEw7CisgICAgICAgIG1hdHJpeC0+eXggPSAwOworICAgICAgICBtYXRyaXgtPnh5ID0gMDsKKyAgICAgICAgbWF0cml4LT55eSA9IDB4MTAwMDBMOworICAgICAgICBvZmZzZXQtPnggID0gMDsKKyAgICAgICAgb2Zmc2V0LT55ICA9IDA7CisgICAgICAgICp1cG0gICAgICAgPSAxOworCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgbWF0cml4LT55eCA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOworICAgICAgbWF0cml4LT54eSA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOworICAgICAgbWF0cml4LT55eSA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOworICAgICAgb2Zmc2V0LT54ICA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOworICAgICAgb2Zmc2V0LT55ICA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGEsICAgc2NhbGluZyApOworCisgICAgICAqdXBtID0gKEZUX1VMb25nKXBvd2VyX3RlbnNbc2NhbGluZ107CisKKyAgICAgIEZUX1RSQUNFNCgoICIgWyVmICVmICVmICVmICVmICVmXVxuIiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpbWF0cml4LT54eCAvICp1cG0gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpbWF0cml4LT54eSAvICp1cG0gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpbWF0cml4LT55eCAvICp1cG0gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpbWF0cml4LT55eSAvICp1cG0gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpb2Zmc2V0LT54ICAvICp1cG0gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpb2Zmc2V0LT55ICAvICp1cG0gLyA2NTUzNiApKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfcGFyc2VfZm9udF9iYm94KCBDRkZfUGFyc2VyICBwYXJzZXIgKQorICB7CisgICAgQ0ZGX0ZvbnRSZWNEaWN0ICBkaWN0ID0gKENGRl9Gb250UmVjRGljdClwYXJzZXItPm9iamVjdDsKKyAgICBGVF9CQm94KiAgICAgICAgIGJib3ggPSAmZGljdC0+Zm9udF9iYm94OworICAgIEZUX0J5dGUqKiAgICAgICAgZGF0YSA9IHBhcnNlci0+c3RhY2s7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBGVF9FUlIoIFN0YWNrX1VuZGVyZmxvdyApOworCisgICAgaWYgKCBwYXJzZXItPnRvcCA+PSBwYXJzZXItPnN0YWNrICsgNCApCisgICAgeworICAgICAgYmJveC0+eE1pbiA9IEZUX1JvdW5kRml4KCBjZmZfcGFyc2VfZml4ZWQoIGRhdGErKyApICk7CisgICAgICBiYm94LT55TWluID0gRlRfUm91bmRGaXgoIGNmZl9wYXJzZV9maXhlZCggZGF0YSsrICkgKTsKKyAgICAgIGJib3gtPnhNYXggPSBGVF9Sb3VuZEZpeCggY2ZmX3BhcnNlX2ZpeGVkKCBkYXRhKysgKSApOworICAgICAgYmJveC0+eU1heCA9IEZUX1JvdW5kRml4KCBjZmZfcGFyc2VfZml4ZWQoIGRhdGEgICApICk7CisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgICAgRlRfVFJBQ0U0KCggIiBbJWQgJWQgJWQgJWRdXG4iLAorICAgICAgICAgICAgICAgICAgYmJveC0+eE1pbiAvIDY1NTM2LAorICAgICAgICAgICAgICAgICAgYmJveC0+eU1pbiAvIDY1NTM2LAorICAgICAgICAgICAgICAgICAgYmJveC0+eE1heCAvIDY1NTM2LAorICAgICAgICAgICAgICAgICAgYmJveC0+eU1heCAvIDY1NTM2ICkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9wYXJzZV9wcml2YXRlX2RpY3QoIENGRl9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBDRkZfRm9udFJlY0RpY3QgIGRpY3QgPSAoQ0ZGX0ZvbnRSZWNEaWN0KXBhcnNlci0+b2JqZWN0OworICAgIEZUX0J5dGUqKiAgICAgICAgZGF0YSA9IHBhcnNlci0+c3RhY2s7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKworCisgICAgZXJyb3IgPSBGVF9FUlIoIFN0YWNrX1VuZGVyZmxvdyApOworCisgICAgaWYgKCBwYXJzZXItPnRvcCA+PSBwYXJzZXItPnN0YWNrICsgMiApCisgICAgeworICAgICAgRlRfTG9uZyAgdG1wOworCisKKyAgICAgIHRtcCA9IGNmZl9wYXJzZV9udW0oIGRhdGErKyApOworICAgICAgaWYgKCB0bXAgPCAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX3BhcnNlX3ByaXZhdGVfZGljdDogSW52YWxpZCBkaWN0aW9uYXJ5IHNpemVcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorICAgICAgZGljdC0+cHJpdmF0ZV9zaXplID0gKEZUX1VMb25nKXRtcDsKKworICAgICAgdG1wID0gY2ZmX3BhcnNlX251bSggZGF0YSApOworICAgICAgaWYgKCB0bXAgPCAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2ZmX3BhcnNlX3ByaXZhdGVfZGljdDogSW52YWxpZCBkaWN0aW9uYXJ5IG9mZnNldFxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBkaWN0LT5wcml2YXRlX29mZnNldCA9IChGVF9VTG9uZyl0bXA7CisKKyAgICAgIEZUX1RSQUNFNCgoICIgJWx1ICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgIGRpY3QtPnByaXZhdGVfc2l6ZSwgZGljdC0+cHJpdmF0ZV9vZmZzZXQgKSk7CisKKyAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIH0KKworICBGYWlsOgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9wYXJzZV9jaWRfcm9zKCBDRkZfUGFyc2VyICBwYXJzZXIgKQorICB7CisgICAgQ0ZGX0ZvbnRSZWNEaWN0ICBkaWN0ID0gKENGRl9Gb250UmVjRGljdClwYXJzZXItPm9iamVjdDsKKyAgICBGVF9CeXRlKiogICAgICAgIGRhdGEgPSBwYXJzZXItPnN0YWNrOworICAgIEZUX0Vycm9yICAgICAgICAgZXJyb3I7CisKKworICAgIGVycm9yID0gRlRfRVJSKCBTdGFja19VbmRlcmZsb3cgKTsKKworICAgIGlmICggcGFyc2VyLT50b3AgPj0gcGFyc2VyLT5zdGFjayArIDMgKQorICAgIHsKKyAgICAgIGRpY3QtPmNpZF9yZWdpc3RyeSA9IChGVF9VSW50KWNmZl9wYXJzZV9udW0oIGRhdGErKyApOworICAgICAgZGljdC0+Y2lkX29yZGVyaW5nID0gKEZUX1VJbnQpY2ZmX3BhcnNlX251bSggZGF0YSsrICk7CisgICAgICBpZiAoICoqZGF0YSA9PSAzMCApCisgICAgICAgIEZUX1RSQUNFMSgoICJjZmZfcGFyc2VfY2lkX3JvczogcmVhbCBzdXBwbGVtZW50IGlzIHJvdW5kZWRcbiIgKSk7CisgICAgICBkaWN0LT5jaWRfc3VwcGxlbWVudCA9IGNmZl9wYXJzZV9udW0oIGRhdGEgKTsKKyAgICAgIGlmICggZGljdC0+Y2lkX3N1cHBsZW1lbnQgPCAwICkKKyAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9jaWRfcm9zOiBuZWdhdGl2ZSBzdXBwbGVtZW50ICVkIGlzIGZvdW5kXG4iLAorICAgICAgICAgICAgICAgICAgIGRpY3QtPmNpZF9zdXBwbGVtZW50ICkpOworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICAgIEZUX1RSQUNFNCgoICIgJWQgJWQgJWRcbiIsCisgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfb3JkZXJpbmcsCisgICAgICAgICAgICAgICAgICBkaWN0LT5jaWRfc3VwcGxlbWVudCApKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisjZGVmaW5lIENGRl9GSUVMRF9OVU0oIGNvZGUsIG5hbWUsIGlkICkgICAgICAgICAgICAgXAorICAgICAgICAgIENGRl9GSUVMRCggY29kZSwgbmFtZSwgaWQsIGNmZl9raW5kX251bSApCisjZGVmaW5lIENGRl9GSUVMRF9GSVhFRCggY29kZSwgbmFtZSwgaWQgKSAgICAgICAgICAgICBcCisgICAgICAgICAgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwgY2ZmX2tpbmRfZml4ZWQgKQorI2RlZmluZSBDRkZfRklFTERfRklYRURfMTAwMCggY29kZSwgbmFtZSwgaWQgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIENGRl9GSUVMRCggY29kZSwgbmFtZSwgaWQsIGNmZl9raW5kX2ZpeGVkX3Rob3VzYW5kICkKKyNkZWZpbmUgQ0ZGX0ZJRUxEX1NUUklORyggY29kZSwgbmFtZSwgaWQgKSAgICAgICAgICAgICBcCisgICAgICAgICAgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwgY2ZmX2tpbmRfc3RyaW5nICkKKyNkZWZpbmUgQ0ZGX0ZJRUxEX0JPT0woIGNvZGUsIG5hbWUsIGlkICkgICAgICAgICAgICAgXAorICAgICAgICAgIENGRl9GSUVMRCggY29kZSwgbmFtZSwgaWQsIGNmZl9raW5kX2Jvb2wgKQorCisjZGVmaW5lIENGRkNPREVfVE9QRElDVCAgMHgxMDAwCisjZGVmaW5lIENGRkNPREVfUFJJVkFURSAgMHgyMDAwCisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisKKyN1bmRlZiAgQ0ZGX0ZJRUxECisjdW5kZWYgIENGRl9GSUVMRF9ERUxUQQorCisKKyNpZm5kZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworCisjZGVmaW5lIENGRl9GSUVMRF9DQUxMQkFDSyggY29kZSwgbmFtZSwgaWQgKSBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjZmZfa2luZF9jYWxsYmFjaywgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjb2RlIHwgQ0ZGQ09ERSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjZmZfcGFyc2VfICMjIG5hbWUsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAwLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSwKKworI2RlZmluZSBDRkZfRklFTEQoIGNvZGUsIG5hbWUsIGlkLCBraW5kICkgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAga2luZCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY29kZSB8IENGRkNPREUsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfRklFTERfT0ZGU0VUKCBuYW1lICksICAgICAgXAorICAgICAgICAgICAgRlRfRklFTERfU0laRSggbmFtZSApLCAgICAgICAgXAorICAgICAgICAgICAgMCwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0sCisKKyNkZWZpbmUgQ0ZGX0ZJRUxEX0RFTFRBKCBjb2RlLCBuYW1lLCBtYXgsIGlkICkgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjZmZfa2luZF9kZWx0YSwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNvZGUgfCBDRkZDT0RFLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfRklFTERfT0ZGU0VUKCBuYW1lICksICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9TSVpFX0RFTFRBKCBuYW1lICksICAgICAgIFwKKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbWF4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9GSUVMRF9PRkZTRVQoIG51bV8gIyMgbmFtZSApICAgIFwKKyAgICAgICAgICB9LAorCisgIHN0YXRpYyBjb25zdCBDRkZfRmllbGRfSGFuZGxlciAgY2ZmX2ZpZWxkX2hhbmRsZXJzW10gPQorICB7CisKKyNpbmNsdWRlICJjZmZ0b2tlbi5oIgorCisgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgfTsKKworCisjZWxzZSAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisKKworI2RlZmluZSBDRkZfRklFTERfQ0FMTEJBQ0soIGNvZGUsIG5hbWUsIGlkICkgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2ZmX2tpbmRfY2FsbGJhY2ssICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY29kZSB8IENGRkNPREUsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2ZmX3BhcnNlXyAjIyBuYW1lLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIH0sCisKKyNkZWZpbmUgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwga2luZCApIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGtpbmQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNvZGUgfCBDRkZDT0RFLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX09GRlNFVCggbmFtZSApLCAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX1NJWkUoIG5hbWUgKSwgICAgICAgIFwKKyAgICAgICAgICAgIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9LAorCisjZGVmaW5lIENGRl9GSUVMRF9ERUxUQSggY29kZSwgbmFtZSwgbWF4LCBpZCApIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2ZmX2tpbmRfZGVsdGEsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjb2RlIHwgQ0ZGQ09ERSwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0ZJRUxEX09GRlNFVCggbmFtZSApLCAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfRklFTERfU0laRV9ERUxUQSggbmFtZSApLCAgICAgICBcCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1heCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfRklFTERfT0ZGU0VUKCBudW1fICMjIG5hbWUgKSwgICBcCisgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9LAorCisgIHN0YXRpYyBjb25zdCBDRkZfRmllbGRfSGFuZGxlciAgY2ZmX2ZpZWxkX2hhbmRsZXJzW10gPQorICB7CisKKyNpbmNsdWRlICJjZmZ0b2tlbi5oIgorCisgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgfTsKKworCisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKyAgdm9pZAorICBGVF9EZXN0cm95X0NsYXNzX2NmZl9maWVsZF9oYW5kbGVycyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqICBjbGF6eiApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgaWYgKCBjbGF6eiApCisgICAgICBGVF9GUkVFKCBjbGF6eiApOworICB9CisKKworICBGVF9FcnJvcgorICBGVF9DcmVhdGVfQ2xhc3NfY2ZmX2ZpZWxkX2hhbmRsZXJzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkZfRmllbGRfSGFuZGxlcioqICBvdXRwdXRfY2xhc3MgKQorICB7CisgICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqICBjbGF6eiAgPSBOVUxMOworICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBpbnQgIGkgPSAwOworCisKKyN1bmRlZiBDRkZfRklFTEQKKyNkZWZpbmUgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwga2luZCApIGkrKzsKKyN1bmRlZiBDRkZfRklFTERfREVMVEEKKyNkZWZpbmUgQ0ZGX0ZJRUxEX0RFTFRBKCBjb2RlLCBuYW1lLCBtYXgsIGlkICkgaSsrOworI3VuZGVmIENGRl9GSUVMRF9DQUxMQkFDSworI2RlZmluZSBDRkZfRklFTERfQ0FMTEJBQ0soIGNvZGUsIG5hbWUsIGlkICkgaSsrOworCisjaW5jbHVkZSAiY2ZmdG9rZW4uaCIKKworICAgIGkrKzsgLyogeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0gKi8KKworICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCBDRkZfRmllbGRfSGFuZGxlciApICogaSApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGkgPSAwOworCisKKyNpZm5kZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworCisjdW5kZWYgQ0ZGX0ZJRUxEX0NBTExCQUNLCisjZGVmaW5lIENGRl9GSUVMRF9DQUxMQkFDSyggY29kZV8sIG5hbWVfLCBpZF8gKSAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLmtpbmQgICAgICAgICA9IGNmZl9raW5kX2NhbGxiYWNrOyAgIFwKKyAgICAgICAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSBjb2RlXyB8IENGRkNPREU7ICAgICBcCisgICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLnNpemUgICAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSBjZmZfcGFyc2VfICMjIG5hbWVfOyBcCisgICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLmNvdW50X29mZnNldCA9IDA7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpKys7CisKKyN1bmRlZiAgQ0ZGX0ZJRUxECisjZGVmaW5lIENGRl9GSUVMRCggY29kZV8sIG5hbWVfLCBpZF8sIGtpbmRfICkgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0ua2luZCAgICAgICAgID0ga2luZF87ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uY29kZSAgICAgICAgID0gY29kZV8gfCBDRkZDT0RFOyAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyBcCisgICAgICAgICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gRlRfRklFTERfU0laRSggbmFtZV8gKTsgICBcCisgICAgICAgICAgY2xhenpbaV0ucmVhZGVyICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyN1bmRlZiAgQ0ZGX0ZJRUxEX0RFTFRBCisjZGVmaW5lIENGRl9GSUVMRF9ERUxUQSggY29kZV8sIG5hbWVfLCBtYXhfLCBpZF8gKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBjZmZfa2luZF9kZWx0YTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IGNvZGVfIHwgQ0ZGQ09ERTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSBGVF9GSUVMRF9TSVpFX0RFTFRBKCBuYW1lXyApOyAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gbWF4XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSBGVF9GSUVMRF9PRkZTRVQoIG51bV8gIyMgbmFtZV8gKTsgXAorICAgICAgICAgIGkrKzsKKworI2luY2x1ZGUgImNmZnRva2VuLmgiCisKKyAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSAwOworICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IDA7CisgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gMDsKKyAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSAwOworICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IDA7CisgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsKKyAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSAwOworCisKKyNlbHNlIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworI3VuZGVmIENGRl9GSUVMRF9DQUxMQkFDSworI2RlZmluZSBDRkZfRklFTERfQ0FMTEJBQ0soIGNvZGVfLCBuYW1lXywgaWRfICkgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBjZmZfa2luZF9jYWxsYmFjazsgICBcCisgICAgICAgICAgY2xhenpbaV0uY29kZSAgICAgICAgID0gY29kZV8gfCBDRkZDT0RFOyAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLm9mZnNldCAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0ucmVhZGVyICAgICAgID0gY2ZmX3BhcnNlXyAjIyBuYW1lXzsgXAorICAgICAgICAgIGNsYXp6W2ldLmFycmF5X21heCAgICA9IDA7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSAwOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uaWQgICAgICAgICAgID0gaWRfOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGkrKzsKKworI3VuZGVmICBDRkZfRklFTEQKKyNkZWZpbmUgQ0ZGX0ZJRUxEKCBjb2RlXywgbmFtZV8sIGlkXywga2luZF8gKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBraW5kXzsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSBjb2RlXyB8IENGRkNPREU7ICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5vZmZzZXQgICAgICAgPSBGVF9GSUVMRF9PRkZTRVQoIG5hbWVfICk7IFwKKyAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSBGVF9GSUVMRF9TSVpFKCBuYW1lXyApOyAgIFwKKyAgICAgICAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5hcnJheV9tYXggICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5pZCAgICAgICAgICAgPSBpZF87ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKworI3VuZGVmICBDRkZfRklFTERfREVMVEEKKyNkZWZpbmUgQ0ZGX0ZJRUxEX0RFTFRBKCBjb2RlXywgbmFtZV8sIG1heF8sIGlkXyApICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLmtpbmQgICAgICAgICA9IGNmZl9raW5kX2RlbHRhOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY2xhenpbaV0uY29kZSAgICAgICAgID0gY29kZV8gfCBDRkZDT0RFOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5vZmZzZXQgICAgICAgPSBGVF9GSUVMRF9PRkZTRVQoIG5hbWVfICk7ICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLnNpemUgICAgICAgICA9IEZUX0ZJRUxEX1NJWkVfREVMVEEoIG5hbWVfICk7ICAgICBcCisgICAgICAgICAgY2xhenpbaV0ucmVhZGVyICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBjbGF6eltpXS5hcnJheV9tYXggICAgPSBtYXhfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGNsYXp6W2ldLmNvdW50X29mZnNldCA9IEZUX0ZJRUxEX09GRlNFVCggbnVtXyAjIyBuYW1lXyApOyBcCisgICAgICAgICAgY2xhenpbaV0uaWQgICAgICAgICAgID0gaWRfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBpKys7CisKKyNpbmNsdWRlICJjZmZ0b2tlbi5oIgorCisgICAgY2xhenpbaV0ua2luZCAgICAgICAgID0gMDsKKyAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSAwOworICAgIGNsYXp6W2ldLm9mZnNldCAgICAgICA9IDA7CisgICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gMDsKKyAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSAwOworICAgIGNsYXp6W2ldLmFycmF5X21heCAgICA9IDA7CisgICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsKKyAgICBjbGF6eltpXS5pZCAgICAgICAgICAgPSAwOworCisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisKKyAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX3BhcnNlcl9ydW4oIENGRl9QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgbGltaXQgKQorICB7CisgICAgRlRfQnl0ZSogICAgcCAgICAgICA9IHN0YXJ0OworICAgIEZUX0Vycm9yICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CisgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IHBhcnNlci0+bGlicmFyeTsKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKworCisgICAgcGFyc2VyLT50b3AgICAgPSBwYXJzZXItPnN0YWNrOworICAgIHBhcnNlci0+c3RhcnQgID0gc3RhcnQ7CisgICAgcGFyc2VyLT5saW1pdCAgPSBsaW1pdDsKKyAgICBwYXJzZXItPmN1cnNvciA9IHN0YXJ0OworCisgICAgd2hpbGUgKCBwIDwgbGltaXQgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIHYgPSAqcDsKKworCisgICAgICBpZiAoIHYgPj0gMjcgJiYgdiAhPSAzMSApCisgICAgICB7CisgICAgICAgIC8qIGl0J3MgYSBudW1iZXI7IHdlIHdpbGwgcHVzaCBpdHMgcG9zaXRpb24gb24gdGhlIHN0YWNrICovCisgICAgICAgIGlmICggcGFyc2VyLT50b3AgLSBwYXJzZXItPnN0YWNrID49IENGRl9NQVhfU1RBQ0tfREVQVEggKQorICAgICAgICAgIGdvdG8gU3RhY2tfT3ZlcmZsb3c7CisKKyAgICAgICAgKnBhcnNlci0+dG9wICsrID0gcDsKKworICAgICAgICAvKiBub3csIHNraXAgaXQgKi8KKyAgICAgICAgaWYgKCB2ID09IDMwICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHNraXAgcmVhbCBudW1iZXIgKi8KKyAgICAgICAgICBwKys7CisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBBbiB1bnRlcm1pbmF0ZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGF0IHRoZSAqLworICAgICAgICAgICAgLyogZW5kIG9mIGEgZGljdGlvbmFyeSBpcyBpbnZhbGlkIGJ1dCBoYXJtbGVzcy4gKi8KKyAgICAgICAgICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIHYgPSBwWzBdID4+IDQ7CisgICAgICAgICAgICBpZiAoIHYgPT0gMTUgKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHYgPSBwWzBdICYgMHhGOworICAgICAgICAgICAgaWYgKCB2ID09IDE1ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwKys7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCB2ID09IDI4ICkKKyAgICAgICAgICBwICs9IDI7CisgICAgICAgIGVsc2UgaWYgKCB2ID09IDI5ICkKKyAgICAgICAgICBwICs9IDQ7CisgICAgICAgIGVsc2UgaWYgKCB2ID4gMjQ2ICkKKyAgICAgICAgICBwICs9IDE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFRoaXMgaXMgbm90IGEgbnVtYmVyLCBoZW5jZSBpdCdzIGFuIG9wZXJhdG9yLiAgQ29tcHV0ZSBpdHMgY29kZSAqLworICAgICAgICAvKiBhbmQgbG9vayBmb3IgaXQgaW4gb3VyIGN1cnJlbnQgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgIGNvZGU7CisgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgICAgICAgbnVtX2FyZ3MgPSAoRlRfVUludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFyc2VyLT50b3AgLSBwYXJzZXItPnN0YWNrICk7CisgICAgICAgIGNvbnN0IENGRl9GaWVsZF9IYW5kbGVyKiAgZmllbGQ7CisKKworICAgICAgICAqcGFyc2VyLT50b3AgPSBwOworICAgICAgICBjb2RlID0gdjsKKyAgICAgICAgaWYgKCB2ID09IDEyICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHR3byBieXRlIG9wZXJhdG9yICovCisgICAgICAgICAgcCsrOworICAgICAgICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgIGNvZGUgPSAweDEwMCB8IHBbMF07CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGNvZGUgfCBwYXJzZXItPm9iamVjdF9jb2RlOworCisgICAgICAgIGZvciAoIGZpZWxkID0gQ0ZGX0ZJRUxEX0hBTkRMRVJTX0dFVDsgZmllbGQtPmtpbmQ7IGZpZWxkKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBmaWVsZC0+Y29kZSA9PSAoRlRfSW50KWNvZGUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGZvdW5kIG91ciBmaWVsZCdzIGhhbmRsZXI7IHJlYWQgaXQgKi8KKyAgICAgICAgICAgIEZUX0xvbmcgICB2YWw7CisgICAgICAgICAgICBGVF9CeXRlKiAgcSA9IChGVF9CeXRlKilwYXJzZXItPm9iamVjdCArIGZpZWxkLT5vZmZzZXQ7CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICAlcyIsIGZpZWxkLT5pZCApKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgZW5vdWdoIGFyZ3VtZW50cyAtLSBleGNlcHQgZm9yICovCisgICAgICAgICAgICAvKiBkZWx0YSBlbmNvZGVkIGFycmF5cywgd2hpY2ggY2FuIGJlIGVtcHR5ICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIGZpZWxkLT5raW5kICE9IGNmZl9raW5kX2RlbHRhICYmIG51bV9hcmdzIDwgMSApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICBzd2l0Y2ggKCBmaWVsZC0+a2luZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGNmZl9raW5kX2Jvb2w6CisgICAgICAgICAgICBjYXNlIGNmZl9raW5kX3N0cmluZzoKKyAgICAgICAgICAgIGNhc2UgY2ZmX2tpbmRfbnVtOgorICAgICAgICAgICAgICB2YWwgPSBjZmZfcGFyc2VfbnVtKCBwYXJzZXItPnN0YWNrICk7CisgICAgICAgICAgICAgIGdvdG8gU3RvcmVfTnVtYmVyOworCisgICAgICAgICAgICBjYXNlIGNmZl9raW5kX2ZpeGVkOgorICAgICAgICAgICAgICB2YWwgPSBjZmZfcGFyc2VfZml4ZWQoIHBhcnNlci0+c3RhY2sgKTsKKyAgICAgICAgICAgICAgZ290byBTdG9yZV9OdW1iZXI7CisKKyAgICAgICAgICAgIGNhc2UgY2ZmX2tpbmRfZml4ZWRfdGhvdXNhbmQ6CisgICAgICAgICAgICAgIHZhbCA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIHBhcnNlci0+c3RhY2ssIDMgKTsKKworICAgICAgICAgICAgU3RvcmVfTnVtYmVyOgorICAgICAgICAgICAgICBzd2l0Y2ggKCBmaWVsZC0+c2l6ZSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAoOCAvIEZUX0NIQVJfQklUKToKKyAgICAgICAgICAgICAgICAqKEZUX0J5dGUqKXEgPSAoRlRfQnl0ZSl2YWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSAoMTYgLyBGVF9DSEFSX0JJVCk6CisgICAgICAgICAgICAgICAgKihGVF9TaG9ydCopcSA9IChGVF9TaG9ydCl2YWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSAoMzIgLyBGVF9DSEFSX0JJVCk6CisgICAgICAgICAgICAgICAgKihGVF9JbnQzMiopcSA9IChGVF9JbnQpdmFsOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6ICAvKiBmb3IgNjQtYml0IHN5c3RlbXMgKi8KKyAgICAgICAgICAgICAgICAqKEZUX0xvbmcqKXEgPSB2YWw7CisgICAgICAgICAgICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgICAgIHN3aXRjaCAoIGZpZWxkLT5raW5kICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIGNmZl9raW5kX2Jvb2w6CisgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlc1xuIiwgdmFsID8gInRydWUiIDogImZhbHNlIiApKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIGNmZl9raW5kX3N0cmluZzoKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVsZCAoU0lEKVxuIiwgdmFsICkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgY2ZmX2tpbmRfbnVtOgorICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWxkXG4iLCB2YWwgKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBjZmZfa2luZF9maXhlZDoKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVmXG4iLCAoZG91YmxlKXZhbCAvIDY1NTM2ICkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgY2ZmX2tpbmRfZml4ZWRfdGhvdXNhbmQ6CisgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZlxuIiwgKGRvdWJsZSl2YWwgLyA2NTUzNiAvIDEwMDAgKSk7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICA7IC8qIG5ldmVyIHJlYWNoZWQgKi8KKyAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgY2ZmX2tpbmRfZGVsdGE6CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIHFjb3VudCA9IChGVF9CeXRlKilwYXJzZXItPm9iamVjdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLT5jb3VudF9vZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiogIGRhdGEgPSBwYXJzZXItPnN0YWNrOworCisKKyAgICAgICAgICAgICAgICBpZiAoIG51bV9hcmdzID4gZmllbGQtPmFycmF5X21heCApCisgICAgICAgICAgICAgICAgICBudW1fYXJncyA9IGZpZWxkLT5hcnJheV9tYXg7CisKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIFsiICkpOworCisgICAgICAgICAgICAgICAgLyogc3RvcmUgY291bnQgKi8KKyAgICAgICAgICAgICAgICAqcWNvdW50ID0gKEZUX0J5dGUpbnVtX2FyZ3M7CisKKyAgICAgICAgICAgICAgICB2YWwgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICggbnVtX2FyZ3MgPiAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB2YWwgKz0gY2ZmX3BhcnNlX251bSggZGF0YSsrICk7CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBmaWVsZC0+c2l6ZSApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlICg4IC8gRlRfQ0hBUl9CSVQpOgorICAgICAgICAgICAgICAgICAgICAqKEZUX0J5dGUqKXEgPSAoRlRfQnl0ZSl2YWw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlICgxNiAvIEZUX0NIQVJfQklUKToKKyAgICAgICAgICAgICAgICAgICAgKihGVF9TaG9ydCopcSA9IChGVF9TaG9ydCl2YWw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlICgzMiAvIEZUX0NIQVJfQklUKToKKyAgICAgICAgICAgICAgICAgICAgKihGVF9JbnQzMiopcSA9IChGVF9JbnQpdmFsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIC8qIGZvciA2NC1iaXQgc3lzdGVtcyAqLworICAgICAgICAgICAgICAgICAgICAqKEZUX0xvbmcqKXEgPSB2YWw7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWxkIiwgdmFsICkpOworCisgICAgICAgICAgICAgICAgICBxICs9IGZpZWxkLT5zaXplOworICAgICAgICAgICAgICAgICAgbnVtX2FyZ3MtLTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiXVxuIiApKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDogIC8qIGNhbGxiYWNrICovCisgICAgICAgICAgICAgIGVycm9yID0gZmllbGQtPnJlYWRlciggcGFyc2VyICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gRm91bmQ7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdGhpcyBpcyBhbiB1bmtub3duIG9wZXJhdG9yLCBvciBpdCBpcyB1bnN1cHBvcnRlZDsgKi8KKyAgICAgICAgLyogd2Ugd2lsbCBpZ25vcmUgaXQgZm9yIG5vdy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgRm91bmQ6CisgICAgICAgIC8qIGNsZWFyIHN0YWNrICovCisgICAgICAgIHBhcnNlci0+dG9wID0gcGFyc2VyLT5zdGFjazsKKyAgICAgIH0KKyAgICAgIHArKzsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgU3RhY2tfT3ZlcmZsb3c6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGdvdG8gRXhpdDsKKworICBTdGFja19VbmRlcmZsb3c6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGdvdG8gRXhpdDsKKworICBTeW50YXhfRXJyb3I6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmcGFyc2UuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkMDJlYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnBhcnNlLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNmZnBhcnNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDRkYgdG9rZW4gc3RyZWFtIHBhcnNlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGRl9QQVJTRV9IX18KKyNkZWZpbmUgX19DRkZfUEFSU0VfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiY2ZmdHlwZXMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyNkZWZpbmUgQ0ZGX01BWF9TVEFDS19ERVBUSCAgOTYKKworI2RlZmluZSBDRkZfQ09ERV9UT1BESUNUICAweDEwMDAKKyNkZWZpbmUgQ0ZGX0NPREVfUFJJVkFURSAgMHgyMDAwCisKKworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX1BhcnNlclJlY18KKyAgeworICAgIEZUX0xpYnJhcnkgbGlicmFyeTsKKyAgICBGVF9CeXRlKiAgIHN0YXJ0OworICAgIEZUX0J5dGUqICAgbGltaXQ7CisgICAgRlRfQnl0ZSogICBjdXJzb3I7CisKKyAgICBGVF9CeXRlKiAgIHN0YWNrW0NGRl9NQVhfU1RBQ0tfREVQVEggKyAxXTsKKyAgICBGVF9CeXRlKiogIHRvcDsKKworICAgIEZUX1VJbnQgICAgb2JqZWN0X2NvZGU7CisgICAgdm9pZCogICAgICBvYmplY3Q7CisKKyAgfSBDRkZfUGFyc2VyUmVjLCAqQ0ZGX1BhcnNlcjsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX3BhcnNlcl9pbml0KCBDRkZfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgbGlicmFyeSk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX3BhcnNlcl9ydW4oIENGRl9QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgbGltaXQgKTsKKworCisgIGVudW0KKyAgeworICAgIGNmZl9raW5kX25vbmUgPSAwLAorICAgIGNmZl9raW5kX251bSwKKyAgICBjZmZfa2luZF9maXhlZCwKKyAgICBjZmZfa2luZF9maXhlZF90aG91c2FuZCwKKyAgICBjZmZfa2luZF9zdHJpbmcsCisgICAgY2ZmX2tpbmRfYm9vbCwKKyAgICBjZmZfa2luZF9kZWx0YSwKKyAgICBjZmZfa2luZF9jYWxsYmFjaywKKworICAgIGNmZl9raW5kX21heCAgLyogZG8gbm90IHJlbW92ZSAqLworICB9OworCisKKyAgLyogbm93IGdlbmVyYXRlIGhhbmRsZXJzIGZvciB0aGUgbW9zdCBzaW1wbGUgZmllbGRzICovCisgIHR5cGVkZWYgRlRfRXJyb3IgICgqQ0ZGX0ZpZWxkX1JlYWRlcikoIENGRl9QYXJzZXIgIHBhcnNlciApOworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRmllbGRfSGFuZGxlcl8KKyAgeworICAgIGludCAgICAgICAgICAgICAgIGtpbmQ7CisgICAgaW50ICAgICAgICAgICAgICAgY29kZTsKKyAgICBGVF9VSW50ICAgICAgICAgICBvZmZzZXQ7CisgICAgRlRfQnl0ZSAgICAgICAgICAgc2l6ZTsKKyAgICBDRkZfRmllbGRfUmVhZGVyICByZWFkZXI7CisgICAgRlRfVUludCAgICAgICAgICAgYXJyYXlfbWF4OworICAgIEZUX1VJbnQgICAgICAgICAgIGNvdW50X29mZnNldDsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgY29uc3QgY2hhciogICAgICAgaWQ7CisjZW5kaWYKKworICB9IENGRl9GaWVsZF9IYW5kbGVyOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19DRkZfUEFSU0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwaWMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGRlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwaWMuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmcGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBjZmYgbW9kdWxlLiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgImNmZmNtYXAuaCIKKyNpbmNsdWRlICJjZmZwaWMuaCIKKyNpbmNsdWRlICJjZmZlcnJzLmgiCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBjZmZkcml2ci5jICovCisgIEZUX0Vycm9yCisgIEZUX0NyZWF0ZV9DbGFzc19jZmZfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOworICB2b2lkCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfY2ZmX3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICk7CisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9wc19pbmZvKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0luZm9SZWMqICBjbGF6eiApOworICB2b2lkCisgIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCggRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfR2x5cGhEaWN0UmVjKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX3BzX25hbWUoIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8oIEZUX0xpYnJhcnkgICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9UVENNYXBzUmVjKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX2NpZF9pbmZvKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfQ0lEUmVjKiAgY2xhenogKTsKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIGNmZnBhcnNlLmMgKi8KKyAgRlRfRXJyb3IKKyAgRlRfQ3JlYXRlX0NsYXNzX2NmZl9maWVsZF9oYW5kbGVycyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqKiAgb3V0cHV0X2NsYXNzICk7CisgIHZvaWQKKyAgRlRfRGVzdHJveV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGRl9GaWVsZF9IYW5kbGVyKiAgY2xhenogKTsKKworCisgIHZvaWQKKyAgY2ZmX2RyaXZlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBpZiAoIHBpY19jb250YWluZXItPmNmZiApCisgICAgeworICAgICAgQ2ZmTW9kdWxlUElDKiAgY29udGFpbmVyID0gKENmZk1vZHVsZVBJQyopcGljX2NvbnRhaW5lci0+Y2ZmOworCisKKyAgICAgIGlmICggY29udGFpbmVyLT5jZmZfc2VydmljZXMgKQorICAgICAgICBGVF9EZXN0cm95X0NsYXNzX2NmZl9zZXJ2aWNlcyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VzICk7CisgICAgICBjb250YWluZXItPmNmZl9zZXJ2aWNlcyA9IE5VTEw7CisgICAgICBpZiAoIGNvbnRhaW5lci0+Y2ZmX2ZpZWxkX2hhbmRsZXJzICkKKyAgICAgICAgRlRfRGVzdHJveV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoCisgICAgICAgICAgbGlicmFyeSwgY29udGFpbmVyLT5jZmZfZmllbGRfaGFuZGxlcnMgKTsKKyAgICAgIGNvbnRhaW5lci0+Y2ZmX2ZpZWxkX2hhbmRsZXJzID0gTlVMTDsKKyAgICAgIEZUX0ZSRUUoIGNvbnRhaW5lciApOworICAgICAgcGljX2NvbnRhaW5lci0+Y2ZmID0gTlVMTDsKKyAgICB9CisgIH0KKworCisgIEZUX0Vycm9yCisgIGNmZl9kcml2ZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICBDZmZNb2R1bGVQSUMqICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCisgICAgaWYgKCBGVF9BTExPQyAoIGNvbnRhaW5lciwgc2l6ZW9mICggKmNvbnRhaW5lciApICkgKQorICAgICAgcmV0dXJuIGVycm9yOworICAgIEZUX01FTV9TRVQoIGNvbnRhaW5lciwgMCwgc2l6ZW9mICggKmNvbnRhaW5lciApICk7CisgICAgcGljX2NvbnRhaW5lci0+Y2ZmID0gY29udGFpbmVyOworCisgICAgLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIC0gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogdGhpcyBpcyBob3cgdGhlIG1vZHVsZSB1c3VhbGx5IGV4cGVjdHMgdGhpcyBkYXRhICovCisgICAgZXJyb3IgPSBGVF9DcmVhdGVfQ2xhc3NfY2ZmX3NlcnZpY2VzKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VzICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoCisgICAgICAgICAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9maWVsZF9oYW5kbGVycyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9wc19pbmZvKAorICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VfcHNfaW5mbyApOworICAgIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCgKKyAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9zZXJ2aWNlX2dseXBoX2RpY3QgKTsKKyAgICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX3BzX25hbWUoCisgICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5jZmZfc2VydmljZV9wc19uYW1lICk7CisgICAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9nZXRfY21hcF9pbmZvKAorICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApOworICAgIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfY2lkX2luZm8oCisgICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5jZmZfc2VydmljZV9jaWRfaW5mbyApOworICAgIEZUX0luaXRfQ2xhc3NfY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjKAorICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjICk7CisgICAgRlRfSW5pdF9DbGFzc19jZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYygKKyAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjICk7CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGNmZl9kcml2ZXJfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwaWMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTYyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZwaWMuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmcGljLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBjZmYgbW9kdWxlLiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fQ0ZGUElDX0hfXworI2RlZmluZSBfX0NGRlBJQ19IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQgICAgICAgICAgY2ZmX3NlcnZpY2VfcHNfaW5mbworI2RlZmluZSBDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCAgICAgICBjZmZfc2VydmljZV9nbHlwaF9kaWN0CisjZGVmaW5lIENGRl9TRVJWSUNFX1BTX05BTUVfR0VUICAgICAgICAgIGNmZl9zZXJ2aWNlX3BzX25hbWUKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQgICAgY2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbworI2RlZmluZSBDRkZfU0VSVklDRV9DSURfSU5GT19HRVQgICAgICAgICBjZmZfc2VydmljZV9jaWRfaW5mbworI2RlZmluZSBDRkZfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCAgICAgICBjZmZfc2VydmljZV9wcm9wZXJ0aWVzCisjZGVmaW5lIENGRl9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgIGNmZl9zZXJ2aWNlcworI2RlZmluZSBDRkZfQ01BUF9FTkNPRElOR19DTEFTU19SRUNfR0VUICBjZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMKKyNkZWZpbmUgQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VUICAgY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMKKyNkZWZpbmUgQ0ZGX0ZJRUxEX0hBTkRMRVJTX0dFVCAgICAgICAgICAgY2ZmX2ZpZWxkX2hhbmRsZXJzCisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSAiY2ZmcGFyc2UuaCIKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfVFRfQ01BUF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENmZk1vZHVsZVBJQ18KKyAgeworICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgY2ZmX3NlcnZpY2VzOworICAgIENGRl9GaWVsZF9IYW5kbGVyKiAgICAgICAgY2ZmX2ZpZWxkX2hhbmRsZXJzOworICAgIEZUX1NlcnZpY2VfUHNJbmZvUmVjICAgICAgY2ZmX3NlcnZpY2VfcHNfaW5mbzsKKyAgICBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyAgIGNmZl9zZXJ2aWNlX2dseXBoX2RpY3Q7CisgICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjICBjZmZfc2VydmljZV9wc19uYW1lOworICAgIEZUX1NlcnZpY2VfVFRDTWFwc1JlYyAgICAgY2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbzsKKyAgICBGVF9TZXJ2aWNlX0NJRFJlYyAgICAgICAgIGNmZl9zZXJ2aWNlX2NpZF9pbmZvOworICAgIEZUX1NlcnZpY2VfUHJvcGVydGllc1JlYyAgY2ZmX3NlcnZpY2VfcHJvcGVydGllczsKKyAgICBGVF9DTWFwX0NsYXNzUmVjICAgICAgICAgIGNmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYzsKKyAgICBGVF9DTWFwX0NsYXNzUmVjICAgICAgICAgIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjOworCisgIH0gQ2ZmTW9kdWxlUElDOworCisKKyNkZWZpbmUgR0VUX1BJQyggbGliICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoQ2ZmTW9kdWxlUElDKikoIChsaWIpLT5waWNfY29udGFpbmVyLmNmZiApICkKKworI2RlZmluZSBDRkZfU0VSVklDRV9QU19JTkZPX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfc2VydmljZV9wc19pbmZvICkKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCApCisjZGVmaW5lIENGRl9TRVJWSUNFX1BTX05BTUVfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX3BzX25hbWUgKQorI2RlZmluZSBDRkZfU0VSVklDRV9HRVRfQ01BUF9JTkZPX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfc2VydmljZV9nZXRfY21hcF9pbmZvICkKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfQ0lEX0lORk9fR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX2NpZF9pbmZvICkKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfcHJvcGVydGllcyApCisjZGVmaW5lIENGRl9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VzICkKKyNkZWZpbmUgQ0ZGX0NNQVBfRU5DT0RJTkdfQ0xBU1NfUkVDX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMgKQorI2RlZmluZSBDRkZfQ01BUF9VTklDT0RFX0NMQVNTX1JFQ19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMgKQorI2RlZmluZSBDRkZfRklFTERfSEFORExFUlNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9maWVsZF9oYW5kbGVycyApCisKKyAgLyogc2VlIGNmZnBpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KKyAgdm9pZAorICBjZmZfZHJpdmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyAgRlRfRXJyb3IKKyAgY2ZmX2RyaXZlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0ZGUElDX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmdG9rZW4uaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnRva2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMjA3NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL2NmZnRva2VuLmgKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmdG9rZW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENGRiB0b2tlbiBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIENGRl9Gb250UmVjRGljdFJlYworCisjdW5kZWYgIENGRkNPREUKKyNkZWZpbmUgQ0ZGQ09ERSAgICAgICBDRkZDT0RFX1RPUERJQ1QKKworICBDRkZfRklFTERfU1RSSU5HICAoIDAsICAgICB2ZXJzaW9uLCAgICAgICAgICAgICAiVmVyc2lvbiIgKQorICBDRkZfRklFTERfU1RSSU5HICAoIDEsICAgICBub3RpY2UsICAgICAgICAgICAgICAiTm90aWNlIiApCisgIENGRl9GSUVMRF9TVFJJTkcgICggMHgxMDAsIGNvcHlyaWdodCwgICAgICAgICAgICJDb3B5cmlnaHQiICkKKyAgQ0ZGX0ZJRUxEX1NUUklORyAgKCAyLCAgICAgZnVsbF9uYW1lLCAgICAgICAgICAgIkZ1bGxOYW1lIiApCisgIENGRl9GSUVMRF9TVFJJTkcgICggMywgICAgIGZhbWlseV9uYW1lLCAgICAgICAgICJGYW1pbHlOYW1lIiApCisgIENGRl9GSUVMRF9TVFJJTkcgICggNCwgICAgIHdlaWdodCwgICAgICAgICAgICAgICJXZWlnaHQiICkKKyAgQ0ZGX0ZJRUxEX0JPT0wgICAgKCAweDEwMSwgaXNfZml4ZWRfcGl0Y2gsICAgICAgImlzRml4ZWRQaXRjaCIgKQorICBDRkZfRklFTERfRklYRUQgICAoIDB4MTAyLCBpdGFsaWNfYW5nbGUsICAgICAgICAiSXRhbGljQW5nbGUiICkKKyAgQ0ZGX0ZJRUxEX0ZJWEVEICAgKCAweDEwMywgdW5kZXJsaW5lX3Bvc2l0aW9uLCAgIlVuZGVybGluZVBvc2l0aW9uIiApCisgIENGRl9GSUVMRF9GSVhFRCAgICggMHgxMDQsIHVuZGVybGluZV90aGlja25lc3MsICJVbmRlcmxpbmVUaGlja25lc3MiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAweDEwNSwgcGFpbnRfdHlwZSwgICAgICAgICAgIlBhaW50VHlwZSIgKQorICBDRkZfRklFTERfTlVNICAgICAoIDB4MTA2LCBjaGFyc3RyaW5nX3R5cGUsICAgICAiQ2hhcnN0cmluZ1R5cGUiICkKKyAgQ0ZGX0ZJRUxEX0NBTExCQUNLKCAweDEwNywgZm9udF9tYXRyaXgsICAgICAgICAgIkZvbnRNYXRyaXgiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAxMywgICAgdW5pcXVlX2lkLCAgICAgICAgICAgIlVuaXF1ZUlEIiApCisgIENGRl9GSUVMRF9DQUxMQkFDSyggNSwgICAgIGZvbnRfYmJveCwgICAgICAgICAgICJGb250QkJveCIgKQorICBDRkZfRklFTERfTlVNICAgICAoIDB4MTA4LCBzdHJva2Vfd2lkdGgsICAgICAgICAiU3Ryb2tlV2lkdGgiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAxNSwgICAgY2hhcnNldF9vZmZzZXQsICAgICAgImNoYXJzZXQiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAxNiwgICAgZW5jb2Rpbmdfb2Zmc2V0LCAgICAgIkVuY29kaW5nIiApCisgIENGRl9GSUVMRF9OVU0gICAgICggMTcsICAgIGNoYXJzdHJpbmdzX29mZnNldCwgICJDaGFyU3RyaW5ncyIgKQorICBDRkZfRklFTERfQ0FMTEJBQ0soIDE4LCAgICBwcml2YXRlX2RpY3QsICAgICAgICAiUHJpdmF0ZSIgKQorICBDRkZfRklFTERfTlVNICAgICAoIDB4MTE0LCBzeW50aGV0aWNfYmFzZSwgICAgICAiU3ludGhldGljQmFzZSIgKQorICBDRkZfRklFTERfU1RSSU5HICAoIDB4MTE1LCBlbWJlZGRlZF9wb3N0c2NyaXB0LCAiUG9zdFNjcmlwdCIgKQorCisjaWYgMAorICBDRkZfRklFTERfU1RSSU5HICAoIDB4MTE2LCBiYXNlX2ZvbnRfbmFtZSwgICAgICAiQmFzZUZvbnROYW1lIiApCisgIENGRl9GSUVMRF9ERUxUQSAgICggMHgxMTcsIGJhc2VfZm9udF9ibGVuZCwgMTYsICJCYXNlRm9udEJsZW5kIiApCisgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMTgsIG11bHRpcGxlX21hc3RlciwgICAgICJNdWx0aXBsZU1hc3RlciIgKQorICBDRkZfRklFTERfQ0FMTEJBQ0soIDB4MTE5LCBibGVuZF9heGlzX3R5cGVzLCAgICAiQmxlbmRBeGlzVHlwZXMiICkKKyNlbmRpZgorCisgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMUUsIGNpZF9yb3MsICAgICAgICAgICAgICAiUk9TIiApCisgIENGRl9GSUVMRF9OVU0gICAgICggMHgxMUYsIGNpZF9mb250X3ZlcnNpb24sICAgICAiQ0lERm9udFZlcnNpb24iICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAweDEyMCwgY2lkX2ZvbnRfcmV2aXNpb24sICAgICJDSURGb250UmV2aXNpb24iICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAweDEyMSwgY2lkX2ZvbnRfdHlwZSwgICAgICAgICJDSURGb250VHlwZSIgKQorICBDRkZfRklFTERfTlVNICAgICAoIDB4MTIyLCBjaWRfY291bnQsICAgICAgICAgICAgIkNJRENvdW50IiApCisgIENGRl9GSUVMRF9OVU0gICAgICggMHgxMjMsIGNpZF91aWRfYmFzZSwgICAgICAgICAiVUlEQmFzZSIgKQorICBDRkZfRklFTERfTlVNICAgICAoIDB4MTI0LCBjaWRfZmRfYXJyYXlfb2Zmc2V0LCAgIkZEQXJyYXkiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAweDEyNSwgY2lkX2ZkX3NlbGVjdF9vZmZzZXQsICJGRFNlbGVjdCIgKQorICBDRkZfRklFTERfU1RSSU5HICAoIDB4MTI2LCBjaWRfZm9udF9uYW1lLCAgICAgICAgIkZvbnROYW1lIiApCisKKyNpZiAwCisgIENGRl9GSUVMRF9OVU0gICAgICggMHgxMjcsIGNoYW1lbGVvbiwgIkNoYW1lbGVvbiIgKQorI2VuZGlmCisKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBDRkZfUHJpdmF0ZVJlYworI3VuZGVmICBDRkZDT0RFCisjZGVmaW5lIENGRkNPREUgICAgICAgQ0ZGQ09ERV9QUklWQVRFCisKKyAgQ0ZGX0ZJRUxEX0RFTFRBICAgICAoIDYsICAgICBibHVlX3ZhbHVlcywgMTQsICAgICAgICAiQmx1ZVZhbHVlcyIgKQorICBDRkZfRklFTERfREVMVEEgICAgICggNywgICAgIG90aGVyX2JsdWVzLCAxMCwgICAgICAgICJPdGhlckJsdWVzIiApCisgIENGRl9GSUVMRF9ERUxUQSAgICAgKCA4LCAgICAgZmFtaWx5X2JsdWVzLCAxNCwgICAgICAgIkZhbWlseUJsdWVzIiApCisgIENGRl9GSUVMRF9ERUxUQSAgICAgKCA5LCAgICAgZmFtaWx5X290aGVyX2JsdWVzLCAxMCwgIkZhbWlseU90aGVyQmx1ZXMiICkKKyAgQ0ZGX0ZJRUxEX0ZJWEVEXzEwMDAoIDB4MTA5LCBibHVlX3NjYWxlLCAgICAgICAgICAgICAiQmx1ZVNjYWxlIiApCisgIENGRl9GSUVMRF9OVU0gICAgICAgKCAweDEwQSwgYmx1ZV9zaGlmdCwgICAgICAgICAgICAgIkJsdWVTaGlmdCIgKQorICBDRkZfRklFTERfTlVNICAgICAgICggMHgxMEIsIGJsdWVfZnV6eiwgICAgICAgICAgICAgICJCbHVlRnV6eiIgKQorICBDRkZfRklFTERfTlVNICAgICAgICggMTAsICAgIHN0YW5kYXJkX3dpZHRoLCAgICAgICAgICJTdGRIVyIgKQorICBDRkZfRklFTERfTlVNICAgICAgICggMTEsICAgIHN0YW5kYXJkX2hlaWdodCwgICAgICAgICJTdGRWVyIgKQorICBDRkZfRklFTERfREVMVEEgICAgICggMHgxMEMsIHNuYXBfd2lkdGhzLCAxMywgICAgICAgICJTdGVtU25hcEgiICkKKyAgQ0ZGX0ZJRUxEX0RFTFRBICAgICAoIDB4MTBELCBzbmFwX2hlaWdodHMsIDEzLCAgICAgICAiU3RlbVNuYXBWIiApCisgIENGRl9GSUVMRF9CT09MICAgICAgKCAweDEwRSwgZm9yY2VfYm9sZCwgICAgICAgICAgICAgIkZvcmNlQm9sZCIgKQorICBDRkZfRklFTERfRklYRUQgICAgICggMHgxMEYsIGZvcmNlX2JvbGRfdGhyZXNob2xkLCAgICJGb3JjZUJvbGRUaHJlc2hvbGQiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgICAoIDB4MTEwLCBsZW5JViwgICAgICAgICAgICAgICAgICAibGVuSVYiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgICAoIDB4MTExLCBsYW5ndWFnZV9ncm91cCwgICAgICAgICAiTGFuZ3VhZ2VHcm91cCIgKQorICBDRkZfRklFTERfRklYRUQgICAgICggMHgxMTIsIGV4cGFuc2lvbl9mYWN0b3IsICAgICAgICJFeHBhbnNpb25GYWN0b3IiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgICAoIDB4MTEzLCBpbml0aWFsX3JhbmRvbV9zZWVkLCAgICAiaW5pdGlhbFJhbmRvbVNlZWQiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgICAoIDE5LCAgICBsb2NhbF9zdWJyc19vZmZzZXQsICAgICAiU3VicnMiICkKKyAgQ0ZGX0ZJRUxEX05VTSAgICAgICAoIDIwLCAgICBkZWZhdWx0X3dpZHRoLCAgICAgICAgICAiZGVmYXVsdFdpZHRoWCIgKQorICBDRkZfRklFTERfTlVNICAgICAgICggMjEsICAgIG5vbWluYWxfd2lkdGgsICAgICAgICAgICJub21pbmFsV2lkdGhYIiApCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9jZmZ0eXBlcy5oIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZThhNWVlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jZmYvY2ZmdHlwZXMuaApAQCAtMCwwICsxLDI4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEJhc2ljIE9wZW5UeXBlL0NGRiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgICovCisvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NGRlRZUEVTX0hfXworI2RlZmluZSBfX0NGRlRZUEVTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0ZGX0luZGV4UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIENGRiBJbmRleCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICAgOjogVGhlIHNvdXJjZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdGFydCAgICAgICA6OiBUaGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGluZGV4IGJ5dGUgaW4gdGhlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb3VudCAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpbmRleC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9mZl9zaXplICAgIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIG9iamVjdCBvZmZzZXRzIGluIGluZGV4LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGF0YV9vZmZzZXQgOjogVGhlIHBvc2l0aW9uIG9mIGZpcnN0IGRhdGEgYnl0ZSBpbiB0aGUgaW5kZXgncyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGF0YV9zaXplICAgOjogVGhlIHNpemUgb2YgdGhlIGRhdGEgdGFibGUgaW4gdGhpcyBpbmRleC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvZmZzZXRzICAgICA6OiBBIHRhYmxlIG9mIGVsZW1lbnQgb2Zmc2V0cyBpbiB0aGUgaW5kZXguICBNdXN0IGJlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgbG9hZGVkIGV4cGxpY2l0bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBieXRlcyAgICAgICA6OiBJZiB0aGUgaW5kZXggaXMgbG9hZGVkIGluIG1lbW9yeSwgaXRzIGJ5dGVzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfSW5kZXhSZWNfCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbTsKKyAgICBGVF9VTG9uZyAgIHN0YXJ0OworICAgIEZUX1VJbnQgICAgY291bnQ7CisgICAgRlRfQnl0ZSAgICBvZmZfc2l6ZTsKKyAgICBGVF9VTG9uZyAgIGRhdGFfb2Zmc2V0OworICAgIEZUX1VMb25nICAgZGF0YV9zaXplOworCisgICAgRlRfVUxvbmcqICBvZmZzZXRzOworICAgIEZUX0J5dGUqICAgYnl0ZXM7CisKKyAgfSBDRkZfSW5kZXhSZWMsICpDRkZfSW5kZXg7CisKKworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0VuY29kaW5nUmVjXworICB7CisgICAgRlRfVUludCAgICAgZm9ybWF0OworICAgIEZUX1VMb25nICAgIG9mZnNldDsKKworICAgIEZUX1VJbnQgICAgIGNvdW50OworICAgIEZUX1VTaG9ydCAgIHNpZHMgWzI1Nl07ICAvKiBhdm9pZCBkeW5hbWljIGFsbG9jYXRpb25zICovCisgICAgRlRfVVNob3J0ICAgY29kZXNbMjU2XTsKKworICB9IENGRl9FbmNvZGluZ1JlYywgKkNGRl9FbmNvZGluZzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfQ2hhcnNldFJlY18KKyAgeworCisgICAgRlRfVUludCAgICAgZm9ybWF0OworICAgIEZUX1VMb25nICAgIG9mZnNldDsKKworICAgIEZUX1VTaG9ydCogIHNpZHM7CisgICAgRlRfVVNob3J0KiAgY2lkczsgICAgICAgLyogdGhlIGludmVyc2UgbWFwcGluZyBvZiBgc2lkcyc7IG9ubHkgbmVlZGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIENJRC1rZXllZCBmb250cyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfVUludCAgICAgbWF4X2NpZDsKKyAgICBGVF9VSW50ICAgICBudW1fZ2x5cGhzOworCisgIH0gQ0ZGX0NoYXJzZXRSZWMsICpDRkZfQ2hhcnNldDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRm9udFJlY0RpY3RSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgIHZlcnNpb247CisgICAgRlRfVUludCAgICBub3RpY2U7CisgICAgRlRfVUludCAgICBjb3B5cmlnaHQ7CisgICAgRlRfVUludCAgICBmdWxsX25hbWU7CisgICAgRlRfVUludCAgICBmYW1pbHlfbmFtZTsKKyAgICBGVF9VSW50ICAgIHdlaWdodDsKKyAgICBGVF9Cb29sICAgIGlzX2ZpeGVkX3BpdGNoOworICAgIEZUX0ZpeGVkICAgaXRhbGljX2FuZ2xlOworICAgIEZUX0ZpeGVkICAgdW5kZXJsaW5lX3Bvc2l0aW9uOworICAgIEZUX0ZpeGVkICAgdW5kZXJsaW5lX3RoaWNrbmVzczsKKyAgICBGVF9JbnQgICAgIHBhaW50X3R5cGU7CisgICAgRlRfSW50ICAgICBjaGFyc3RyaW5nX3R5cGU7CisgICAgRlRfTWF0cml4ICBmb250X21hdHJpeDsKKyAgICBGVF9Cb29sICAgIGhhc19mb250X21hdHJpeDsKKyAgICBGVF9VTG9uZyAgIHVuaXRzX3Blcl9lbTsgIC8qIHRlbXBvcmFyaWx5IHVzZWQgYXMgc2NhbGluZyB2YWx1ZSBhbHNvICovCisgICAgRlRfVmVjdG9yICBmb250X29mZnNldDsKKyAgICBGVF9VTG9uZyAgIHVuaXF1ZV9pZDsKKyAgICBGVF9CQm94ICAgIGZvbnRfYmJveDsKKyAgICBGVF9Qb3MgICAgIHN0cm9rZV93aWR0aDsKKyAgICBGVF9VTG9uZyAgIGNoYXJzZXRfb2Zmc2V0OworICAgIEZUX1VMb25nICAgZW5jb2Rpbmdfb2Zmc2V0OworICAgIEZUX1VMb25nICAgY2hhcnN0cmluZ3Nfb2Zmc2V0OworICAgIEZUX1VMb25nICAgcHJpdmF0ZV9vZmZzZXQ7CisgICAgRlRfVUxvbmcgICBwcml2YXRlX3NpemU7CisgICAgRlRfTG9uZyAgICBzeW50aGV0aWNfYmFzZTsKKyAgICBGVF9VSW50ICAgIGVtYmVkZGVkX3Bvc3RzY3JpcHQ7CisKKyAgICAvKiB0aGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0aGUgdG9wLWxldmVsIGZvbnQgZGljdGlvbmFyeSAqLworICAgIEZUX1VJbnQgICAgY2lkX3JlZ2lzdHJ5OworICAgIEZUX1VJbnQgICAgY2lkX29yZGVyaW5nOworICAgIEZUX0xvbmcgICAgY2lkX3N1cHBsZW1lbnQ7CisKKyAgICBGVF9Mb25nICAgIGNpZF9mb250X3ZlcnNpb247CisgICAgRlRfTG9uZyAgICBjaWRfZm9udF9yZXZpc2lvbjsKKyAgICBGVF9Mb25nICAgIGNpZF9mb250X3R5cGU7CisgICAgRlRfVUxvbmcgICBjaWRfY291bnQ7CisgICAgRlRfVUxvbmcgICBjaWRfdWlkX2Jhc2U7CisgICAgRlRfVUxvbmcgICBjaWRfZmRfYXJyYXlfb2Zmc2V0OworICAgIEZUX1VMb25nICAgY2lkX2ZkX3NlbGVjdF9vZmZzZXQ7CisgICAgRlRfVUludCAgICBjaWRfZm9udF9uYW1lOworCisgIH0gQ0ZGX0ZvbnRSZWNEaWN0UmVjLCAqQ0ZGX0ZvbnRSZWNEaWN0OworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9Qcml2YXRlUmVjXworICB7CisgICAgRlRfQnl0ZSAgIG51bV9ibHVlX3ZhbHVlczsKKyAgICBGVF9CeXRlICAgbnVtX290aGVyX2JsdWVzOworICAgIEZUX0J5dGUgICBudW1fZmFtaWx5X2JsdWVzOworICAgIEZUX0J5dGUgICBudW1fZmFtaWx5X290aGVyX2JsdWVzOworCisgICAgRlRfUG9zICAgIGJsdWVfdmFsdWVzWzE0XTsKKyAgICBGVF9Qb3MgICAgb3RoZXJfYmx1ZXNbMTBdOworICAgIEZUX1BvcyAgICBmYW1pbHlfYmx1ZXNbMTRdOworICAgIEZUX1BvcyAgICBmYW1pbHlfb3RoZXJfYmx1ZXNbMTBdOworCisgICAgRlRfRml4ZWQgIGJsdWVfc2NhbGU7CisgICAgRlRfUG9zICAgIGJsdWVfc2hpZnQ7CisgICAgRlRfUG9zICAgIGJsdWVfZnV6ejsKKyAgICBGVF9Qb3MgICAgc3RhbmRhcmRfd2lkdGg7CisgICAgRlRfUG9zICAgIHN0YW5kYXJkX2hlaWdodDsKKworICAgIEZUX0J5dGUgICBudW1fc25hcF93aWR0aHM7CisgICAgRlRfQnl0ZSAgIG51bV9zbmFwX2hlaWdodHM7CisgICAgRlRfUG9zICAgIHNuYXBfd2lkdGhzWzEzXTsKKyAgICBGVF9Qb3MgICAgc25hcF9oZWlnaHRzWzEzXTsKKyAgICBGVF9Cb29sICAgZm9yY2VfYm9sZDsKKyAgICBGVF9GaXhlZCAgZm9yY2VfYm9sZF90aHJlc2hvbGQ7CisgICAgRlRfSW50ICAgIGxlbklWOworICAgIEZUX0ludCAgICBsYW5ndWFnZV9ncm91cDsKKyAgICBGVF9GaXhlZCAgZXhwYW5zaW9uX2ZhY3RvcjsKKyAgICBGVF9Mb25nICAgaW5pdGlhbF9yYW5kb21fc2VlZDsKKyAgICBGVF9VTG9uZyAgbG9jYWxfc3VicnNfb2Zmc2V0OworICAgIEZUX1BvcyAgICBkZWZhdWx0X3dpZHRoOworICAgIEZUX1BvcyAgICBub21pbmFsX3dpZHRoOworCisgIH0gQ0ZGX1ByaXZhdGVSZWMsICpDRkZfUHJpdmF0ZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRkRTZWxlY3RSZWNfCisgIHsKKyAgICBGVF9CeXRlICAgZm9ybWF0OworICAgIEZUX1VJbnQgICByYW5nZV9jb3VudDsKKworICAgIC8qIHRoYXQncyB0aGUgdGFibGUsIHRha2VuIGZyb20gdGhlIGZpbGUgYGFzIGlzJyAqLworICAgIEZUX0J5dGUqICBkYXRhOworICAgIEZUX1VJbnQgICBkYXRhX3NpemU7CisKKyAgICAvKiBzbWFsbCBjYWNoZSBmb3IgZm9ybWF0IDMgb25seSAqLworICAgIEZUX1VJbnQgICBjYWNoZV9maXJzdDsKKyAgICBGVF9VSW50ICAgY2FjaGVfY291bnQ7CisgICAgRlRfQnl0ZSAgIGNhY2hlX2ZkOworCisgIH0gQ0ZGX0ZEU2VsZWN0UmVjLCAqQ0ZGX0ZEU2VsZWN0OworCisKKyAgLyogQSBTdWJGb250IHBhY2tzIGEgZm9udCBkaWN0IGFuZCBhIHByaXZhdGUgZGljdCB0b2dldGhlci4gIFRoZXkgYXJlICovCisgIC8qIG5lZWRlZCB0byBzdXBwb3J0IENJRC1rZXllZCBDRkYgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX1N1YkZvbnRSZWNfCisgIHsKKyAgICBDRkZfRm9udFJlY0RpY3RSZWMgIGZvbnRfZGljdDsKKyAgICBDRkZfUHJpdmF0ZVJlYyAgICAgIHByaXZhdGVfZGljdDsKKworICAgIENGRl9JbmRleFJlYyAgICAgICAgbG9jYWxfc3VicnNfaW5kZXg7CisgICAgRlRfQnl0ZSoqICAgICAgICAgICBsb2NhbF9zdWJyczsgLyogYXJyYXkgb2YgcG9pbnRlcnMgaW50byBMb2NhbCBTdWJycyBJTkRFWCBkYXRhICovCisKKyAgfSBDRkZfU3ViRm9udFJlYywgKkNGRl9TdWJGb250OworCisKKyNkZWZpbmUgQ0ZGX01BWF9DSURfRk9OVFMgIDI1NgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9Gb250UmVjXworICB7CisgICAgRlRfU3RyZWFtICAgICAgICBzdHJlYW07CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnk7CisgICAgRlRfVUludCAgICAgICAgICBudW1fZmFjZXM7CisgICAgRlRfVUludCAgICAgICAgICBudW1fZ2x5cGhzOworCisgICAgRlRfQnl0ZSAgICAgICAgICB2ZXJzaW9uX21ham9yOworICAgIEZUX0J5dGUgICAgICAgICAgdmVyc2lvbl9taW5vcjsKKyAgICBGVF9CeXRlICAgICAgICAgIGhlYWRlcl9zaXplOworICAgIEZUX0J5dGUgICAgICAgICAgYWJzb2x1dGVfb2Zmc2l6ZTsKKworCisgICAgQ0ZGX0luZGV4UmVjICAgICBuYW1lX2luZGV4OworICAgIENGRl9JbmRleFJlYyAgICAgdG9wX2RpY3RfaW5kZXg7CisgICAgQ0ZGX0luZGV4UmVjICAgICBnbG9iYWxfc3VicnNfaW5kZXg7CisKKyAgICBDRkZfRW5jb2RpbmdSZWMgIGVuY29kaW5nOworICAgIENGRl9DaGFyc2V0UmVjICAgY2hhcnNldDsKKworICAgIENGRl9JbmRleFJlYyAgICAgY2hhcnN0cmluZ3NfaW5kZXg7CisgICAgQ0ZGX0luZGV4UmVjICAgICBmb250X2RpY3RfaW5kZXg7CisgICAgQ0ZGX0luZGV4UmVjICAgICBwcml2YXRlX2luZGV4OworICAgIENGRl9JbmRleFJlYyAgICAgbG9jYWxfc3VicnNfaW5kZXg7CisKKyAgICBGVF9TdHJpbmcqICAgICAgIGZvbnRfbmFtZTsKKworICAgIC8qIGFycmF5IG9mIHBvaW50ZXJzIGludG8gR2xvYmFsIFN1YnJzIElOREVYIGRhdGEgKi8KKyAgICBGVF9CeXRlKiogICAgICAgIGdsb2JhbF9zdWJyczsKKworICAgIC8qIGFycmF5IG9mIHBvaW50ZXJzIGludG8gU3RyaW5nIElOREVYIGRhdGEgc3RvcmVkIGF0IHN0cmluZ19wb29sICovCisgICAgRlRfVUludCAgICAgICAgICBudW1fc3RyaW5nczsKKyAgICBGVF9CeXRlKiogICAgICAgIHN0cmluZ3M7CisgICAgRlRfQnl0ZSogICAgICAgICBzdHJpbmdfcG9vbDsKKworICAgIENGRl9TdWJGb250UmVjICAgdG9wX2ZvbnQ7CisgICAgRlRfVUludCAgICAgICAgICBudW1fc3ViZm9udHM7CisgICAgQ0ZGX1N1YkZvbnQgICAgICBzdWJmb250c1tDRkZfTUFYX0NJRF9GT05UU107CisKKyAgICBDRkZfRkRTZWxlY3RSZWMgIGZkX3NlbGVjdDsKKworICAgIC8qIGludGVyZmFjZSB0byBQb3N0U2NyaXB0IGhpbnRlciAqLworICAgIFBTSGludGVyX1NlcnZpY2UgIHBzaGludGVyOworCisgICAgLyogaW50ZXJmYWNlIHRvIFBvc3RzY3JpcHQgTmFtZXMgc2VydmljZSAqLworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lczsKKworICAgIC8qIHNpbmNlIHZlcnNpb24gMi4zLjAgKi8KKyAgICBQU19Gb250SW5mb1JlYyogIGZvbnRfaW5mbzsgICAvKiBmb250IGluZm8gZGljdGlvbmFyeSAqLworCisgICAgLyogc2luY2UgdmVyc2lvbiAyLjMuNiAqLworICAgIEZUX1N0cmluZyogICAgICAgcmVnaXN0cnk7CisgICAgRlRfU3RyaW5nKiAgICAgICBvcmRlcmluZzsKKworICAgIC8qIHNpbmNlIHZlcnNpb24gMi40LjEyICovCisgICAgRlRfR2VuZXJpYyAgICAgICBjZjJfaW5zdGFuY2U7CisKKyAgfSBDRkZfRm9udFJlYywgKkNGRl9Gb250OworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0ZGVFlQRVNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9tb2R1bGUubWsgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwOGViYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgQ0ZGIG1vZHVsZSBkZWZpbml0aW9uCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitGVE1PRFVMRV9IX0NPTU1BTkRTICs9IENGRl9EUklWRVIKKworZGVmaW5lIENGRl9EUklWRVIKKyQoT1BFTl9EUklWRVIpIEZUX0RyaXZlcl9DbGFzc1JlYywgY2ZmX2RyaXZlcl9jbGFzcyAkKENMT1NFX0RSSVZFUikKKyQoRUNIT19EUklWRVIpY2ZmICAgICAgICQoRUNIT19EUklWRVJfREVTQylPcGVuVHlwZSBmb250cyB3aXRoIGV4dGVuc2lvbiAqLm90ZiQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NmZi9ydWxlcy5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvY2ZmL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNmU4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NmZi9ydWxlcy5tawpAQCAtMCwwICsxLDg5IEBACisjCisjIEZyZWVUeXBlIDIgT3BlblR5cGUvQ0ZGIGRyaXZlciBjb25maWd1cmF0aW9uIHJ1bGVzCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIE9wZW5UeXBlIGRyaXZlciBkaXJlY3RvcnkKKyMKK0NGRl9ESVIgOj0gJChTUkNfRElSKS9jZmYKKworCitDRkZfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoQ0ZGX0RJUikpIFwKKyAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkKEZUX0NGTEFHUykKKworCisjIENGRiBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK0NGRl9EUlZfU1JDIDo9ICQoQ0ZGX0RJUikvY2ZmY21hcC5jICBcCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZmRyaXZyLmMgXAorICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZnbG9hZC5jIFwKKyAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmbG9hZC5jICBcCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZm9ianMuYyAgXAorICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZwYXJzZS5jIFwKKyAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmcGljLmMgICBcCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmFycnN0LmMgXAorICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJibHVlcy5jIFwKKyAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2YyZXJyb3IuYyBcCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmZvbnQuYyAgXAorICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJmdC5jICAgIFwKKyAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2YyaGludHMuYyBcCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmludHJwLmMgXAorICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJyZWFkLmMgIFwKKyAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2Yyc3RhY2suYworCisKKyMgQ0ZGIGRyaXZlciBoZWFkZXJzCisjCitDRkZfRFJWX0ggOj0gJChDRkZfRFJWX1NSQzolLmM9JS5oKSBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZlcnJzLmggICBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZ0b2tlbi5oICBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZ0eXBlcy5oICBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJmaXhlZC5oICBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJnbHVlLmggICBcCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJ0eXBlcy5oCisKKworIyBDRkYgZHJpdmVyIG9iamVjdChzKQorIworIyAgIENGRl9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMKKyMgICBDRkZfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcworIworQ0ZGX0RSVl9PQkpfTSA6PSAkKENGRl9EUlZfU1JDOiQoQ0ZGX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK0NGRl9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9jZmYuJE8KKworIyBDRkYgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK0NGRl9EUlZfU1JDX1MgOj0gJChDRkZfRElSKS9jZmYuYworCisKKyMgQ0ZGIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoQ0ZGX0RSVl9PQkpfUyk6ICQoQ0ZGX0RSVl9TUkNfUykgJChDRkZfRFJWX1NSQykgJChGUkVFVFlQRV9IKSAkKENGRl9EUlZfSCkKKwkkKENGRl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChDRkZfRFJWX1NSQ19TKSkKKworCisjIENGRiBkcml2ZXIgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoQ0ZGX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChDRkZfRFJWX0gpCisJJChDRkZfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKENGRl9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoQ0ZGX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jaWQvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMDE4MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL0phbWZpbGUKQEAgLTAsMCArMSwyOSBAQAorIyBGcmVlVHlwZSAyIHNyYy9jaWQgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGNpZCA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gY2lkb2JqcyBjaWRsb2FkIGNpZGdsb2FkIGNpZHJpdmVyIGNpZHBhcnNlIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHR5cGUxY2lkIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL2NpZCBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRlcnJzLmggYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRlcnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwZTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZGVycnMuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjaWRlcnJzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ0lEIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIENJRCBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ0lERVJSU19IX18KKyNkZWZpbmUgX19DSURFUlJTX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBDSURfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NJRAorCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisjZW5kaWYgLyogX19DSURFUlJTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkZ2xvYWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZGdsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2MjkzYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZGdsb2FkLmMKQEAgLTAsMCArMSw0NDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNpZGdsb2FkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDSUQta2V5ZWQgVHlwZTEgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiY2lkbG9hZC5oIgorI2luY2x1ZGUgImNpZGdsb2FkLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKworI2luY2x1ZGUgImNpZGVycnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NpZGdsb2FkCisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgY2lkX2xvYWRfZ2x5cGgoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCApCisgIHsKKyAgICBDSURfRmFjZSAgICAgICBmYWNlID0gKENJRF9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKyAgICBDSURfRmFjZUluZm8gICBjaWQgID0gJmZhY2UtPmNpZDsKKyAgICBGVF9CeXRlKiAgICAgICBwOworICAgIEZUX1VMb25nICAgICAgIGZkX3NlbGVjdDsKKyAgICBGVF9TdHJlYW0gICAgICBzdHJlYW0gICAgICAgPSBmYWNlLT5jaWRfc3RyZWFtOworICAgIEZUX0Vycm9yICAgICAgIGVycm9yICAgICAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgICAgICBjaGFyc3RyaW5nICAgPSBOVUxMOworICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSAgICAgICA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX1VMb25nICAgICAgIGdseXBoX2xlbmd0aCA9IDA7CisgICAgUFNBdXhfU2VydmljZSAgcHNhdXggICAgICAgID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjICppbmMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZTsKKyNlbmRpZgorCisKKyAgICBGVF9UUkFDRTEoKCAiY2lkX2xvYWRfZ2x5cGg6IGdseXBoIGluZGV4ICVkXG4iLCBnbHlwaF9pbmRleCApKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKworICAgIC8qIEZvciBpbmNyZW1lbnRhbCBmb250cyBnZXQgdGhlIGNoYXJhY3RlciBkYXRhIHVzaW5nICovCisgICAgLyogdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGluYyApCisgICAgeworICAgICAgRlRfRGF0YSAgZ2x5cGhfZGF0YTsKKworCisgICAgICBlcnJvciA9IGluYy0+ZnVuY3MtPmdldF9nbHlwaF9kYXRhKCBpbmMtPm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCAmZ2x5cGhfZGF0YSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcCAgICAgICAgID0gKEZUX0J5dGUqKWdseXBoX2RhdGEucG9pbnRlcjsKKyAgICAgIGZkX3NlbGVjdCA9IGNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5mZF9ieXRlcyApOworCisgICAgICBpZiAoIGdseXBoX2RhdGEubGVuZ3RoICE9IDAgKQorICAgICAgeworICAgICAgICBnbHlwaF9sZW5ndGggPSAoRlRfVUxvbmcpKCBnbHlwaF9kYXRhLmxlbmd0aCAtIGNpZC0+ZmRfYnl0ZXMgKTsKKyAgICAgICAgKHZvaWQpRlRfQUxMT0MoIGNoYXJzdHJpbmcsIGdseXBoX2xlbmd0aCApOworICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICAgZnRfbWVtY3B5KCBjaGFyc3RyaW5nLCBnbHlwaF9kYXRhLnBvaW50ZXIgKyBjaWQtPmZkX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfbGVuZ3RoICk7CisgICAgICB9CisKKyAgICAgIGluYy0+ZnVuY3MtPmZyZWVfZ2x5cGhfZGF0YSggaW5jLT5vYmplY3QsICZnbHlwaF9kYXRhICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZWxzZQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworCisgICAgLyogRm9yIG9yZGluYXJ5IGZvbnRzIHJlYWQgdGhlIENJRCBmb250IGRpY3Rpb25hcnkgaW5kZXggKi8KKyAgICAvKiBhbmQgY2hhcnN0cmluZyBvZmZzZXQgZnJvbSB0aGUgQ0lETWFwLiAgICAgICAgICAgICAgICAqLworICAgIHsKKyAgICAgIEZUX1VJbnQgICBlbnRyeV9sZW4gPSAoRlRfVUludCkoIGNpZC0+ZmRfYnl0ZXMgKyBjaWQtPmdkX2J5dGVzICk7CisgICAgICBGVF9VTG9uZyAgb2ZmMTsKKworCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBjaWQtPmRhdGFfb2Zmc2V0ICsgY2lkLT5jaWRtYXBfb2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4ICogZW50cnlfbGVuICkgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggMiAqIGVudHJ5X2xlbiApICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBwICAgICAgICAgICAgPSAoRlRfQnl0ZSopc3RyZWFtLT5jdXJzb3I7CisgICAgICBmZF9zZWxlY3QgICAgPSBjaWRfZ2V0X29mZnNldCggJnAsIChGVF9CeXRlKWNpZC0+ZmRfYnl0ZXMgKTsKKyAgICAgIG9mZjEgICAgICAgICA9IGNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5nZF9ieXRlcyApOworICAgICAgcCAgICAgICAgICAgKz0gY2lkLT5mZF9ieXRlczsKKyAgICAgIGdseXBoX2xlbmd0aCA9IGNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5nZF9ieXRlcyApIC0gb2ZmMTsKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgaWYgKCBmZF9zZWxlY3QgPj0gKEZUX1VMb25nKWNpZC0+bnVtX2RpY3RzICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PZmZzZXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgaWYgKCBnbHlwaF9sZW5ndGggPT0gMCApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIGlmICggRlRfQUxMT0MoIGNoYXJzdHJpbmcsIGdseXBoX2xlbmd0aCApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9BVCggY2lkLT5kYXRhX29mZnNldCArIG9mZjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLCBnbHlwaF9sZW5ndGggKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBOb3cgc2V0IHVwIHRoZSBzdWJycyBhcnJheSBhbmQgcGFyc2UgdGhlIGNoYXJzdHJpbmdzLiAqLworICAgIHsKKyAgICAgIENJRF9GYWNlRGljdCAgZGljdDsKKyAgICAgIENJRF9TdWJycyAgICAgY2lkX3N1YnJzID0gZmFjZS0+c3VicnMgKyBmZF9zZWxlY3Q7CisgICAgICBGVF9VSW50ICAgICAgIGNzX29mZnNldDsKKworCisgICAgICAvKiBTZXQgdXAgc3VicnMgKi8KKyAgICAgIGRlY29kZXItPm51bV9zdWJycyA9IGNpZF9zdWJycy0+bnVtX3N1YnJzOworICAgICAgZGVjb2Rlci0+c3VicnMgICAgID0gY2lkX3N1YnJzLT5jb2RlOworICAgICAgZGVjb2Rlci0+c3VicnNfbGVuID0gMDsKKworICAgICAgLyogU2V0IHVwIGZvbnQgbWF0cml4ICovCisgICAgICBkaWN0ICAgICAgICAgICAgICAgICA9IGNpZC0+Zm9udF9kaWN0cyArIGZkX3NlbGVjdDsKKworICAgICAgZGVjb2Rlci0+Zm9udF9tYXRyaXggPSBkaWN0LT5mb250X21hdHJpeDsKKyAgICAgIGRlY29kZXItPmZvbnRfb2Zmc2V0ID0gZGljdC0+Zm9udF9vZmZzZXQ7CisgICAgICBkZWNvZGVyLT5sZW5JViAgICAgICA9IGRpY3QtPnByaXZhdGVfZGljdC5sZW5JVjsKKworICAgICAgLyogRGVjb2RlIHRoZSBjaGFyc3RyaW5nLiAqLworCisgICAgICAvKiBBZGp1c3RtZW50IGZvciBzZWVkIGJ5dGVzLiAqLworICAgICAgY3Nfb2Zmc2V0ID0gZGVjb2Rlci0+bGVuSVYgPj0gMCA/IChGVF9VSW50KWRlY29kZXItPmxlbklWIDogMDsKKworICAgICAgLyogRGVjcnlwdCBvbmx5IGlmIGxlbklWID49IDAuICovCisgICAgICBpZiAoIGRlY29kZXItPmxlbklWID49IDAgKQorICAgICAgICBwc2F1eC0+dDFfZGVjcnlwdCggY2hhcnN0cmluZywgZ2x5cGhfbGVuZ3RoLCA0MzMwICk7CisKKyAgICAgIGVycm9yID0gZGVjb2Rlci0+ZnVuY3MucGFyc2VfY2hhcnN0cmluZ3MoCisgICAgICAgICAgICAgICAgZGVjb2RlciwgY2hhcnN0cmluZyArIGNzX29mZnNldCwKKyAgICAgICAgICAgICAgICBnbHlwaF9sZW5ndGggLSBjc19vZmZzZXQgKTsKKyAgICB9CisKKyAgICBGVF9GUkVFKCBjaGFyc3RyaW5nICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBjYW4gb3B0aW9uYWxseSBvdmVycmlkZSB0aGUgbWV0cmljcy4gKi8KKyAgICBpZiAoICFlcnJvciAmJiBpbmMgJiYgaW5jLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MgKQorICAgIHsKKyAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgIG1ldHJpY3M7CisKKworICAgICAgbWV0cmljcy5iZWFyaW5nX3ggPSBGSVhFRF9UT19JTlQoIGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLnggKTsKKyAgICAgIG1ldHJpY3MuYmVhcmluZ195ID0gMDsKKyAgICAgIG1ldHJpY3MuYWR2YW5jZSAgID0gRklYRURfVE9fSU5UKCBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UueCApOworICAgICAgbWV0cmljcy5hZHZhbmNlX3YgPSBGSVhFRF9UT19JTlQoIGRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZS55ICk7CisKKyAgICAgIGVycm9yID0gaW5jLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MoIGluYy0+b2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIEZBTFNFLCAmbWV0cmljcyApOworCisgICAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy54ID0gSU5UX1RPX0ZJWEVEKCBtZXRyaWNzLmJlYXJpbmdfeCApOworICAgICAgZGVjb2Rlci0+YnVpbGRlci5hZHZhbmNlLnggICAgICA9IElOVF9UT19GSVhFRCggbWV0cmljcy5hZHZhbmNlICk7CisgICAgICBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UueSAgICAgID0gSU5UX1RPX0ZJWEVEKCBtZXRyaWNzLmFkdmFuY2VfdiApOworICAgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNpZiAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgQ09NUFVURSBUSEUgTUFYSU1VTSBBRFZBTkNFIFdJRFRIICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGluIGNoYXJnZSBvZiBjb21wdXRpbmcgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIHRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggb2YgdGhlIGZvbnQuICBJdCAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICBxdWlja2x5IHByb2Nlc3NlcyBlYWNoIGdseXBoIGNoYXJzdHJpbmcgdG8gICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgZXh0cmFjdCB0aGUgdmFsdWUgZnJvbSBlaXRoZXIgYSBgc2J3JyBvciBgc2VhYycgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIG9wZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjaWRfZmFjZV9jb21wdXRlX21heF9hZHZhbmNlKCBDSURfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgIG1heF9hZHZhbmNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgIGVycm9yOworICAgIFQxX0RlY29kZXJSZWMgIGRlY29kZXI7CisgICAgRlRfSW50ICAgICAgICAgZ2x5cGhfaW5kZXg7CisKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworCisKKyAgICAqbWF4X2FkdmFuY2UgPSAwOworCisgICAgLyogSW5pdGlhbGl6ZSBsb2FkIGRlY29kZXIgKi8KKyAgICBlcnJvciA9IHBzYXV4LT50MV9kZWNvZGVyX2Z1bmNzLT5pbml0KCAmZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfRmFjZSlmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHNpemUgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBnbHlwaCBzbG90ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogZ2x5cGggbmFtZXMhIFhYWCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIGJsZW5kID09IDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBoaW50aW5nID09IDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWRfbG9hZF9nbHlwaCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgLyogVE9ETzogaW5pdGlhbGl6ZSBkZWNvZGVyLmxlbl9idWlsZGNoYXIgYW5kIGRlY29kZXIuYnVpbGRjaGFyICovCisgICAgLyogICAgICAgaWYgd2UgZXZlciBzdXBwb3J0IENJRC1rZXllZCBtdWx0aXBsZSBtYXN0ZXIgZm9udHMgICAgICovCisKKyAgICBkZWNvZGVyLmJ1aWxkZXIubWV0cmljc19vbmx5ID0gMTsKKyAgICBkZWNvZGVyLmJ1aWxkZXIubG9hZF9wb2ludHMgID0gMDsKKworICAgIC8qIGZvciBlYWNoIGdseXBoLCBwYXJzZSB0aGUgZ2x5cGggY2hhcnN0cmluZyBhbmQgZXh0cmFjdCAqLworICAgIC8qIHRoZSBhZHZhbmNlIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIGdseXBoX2luZGV4ID0gMDsgZ2x5cGhfaW5kZXggPCBmYWNlLT5yb290Lm51bV9nbHlwaHM7CisgICAgICAgICAgZ2x5cGhfaW5kZXgrKyApCisgICAgeworICAgICAgLyogbm93IGdldCBsb2FkIHRoZSB1bnNjYWxlZCBvdXRsaW5lICovCisgICAgICBlcnJvciA9IGNpZF9sb2FkX2dseXBoKCAmZGVjb2RlciwgZ2x5cGhfaW5kZXggKTsKKyAgICAgIC8qIGlnbm9yZSB0aGUgZXJyb3IgaWYgb25lIG9jY3VycmVkIC0gc2tpcCB0byBuZXh0IGdseXBoICovCisgICAgfQorCisgICAgKm1heF9hZHZhbmNlID0gRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54ICk7CisKKyAgICBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+ZG9uZSggJmRlY29kZXIgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisjZW5kaWYgLyogMCAqLworCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNpZF9zbG90X2xvYWRfZ2x5cGgoIEZUX0dseXBoU2xvdCAgY2lkZ2x5cGgsICAgICAgLyogQ0lEX0dseXBoU2xvdCAqLworICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIGNpZHNpemUsICAgICAgIC8qIENJRF9TaXplICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICBsb2FkX2ZsYWdzICkKKyAgeworICAgIENJRF9HbHlwaFNsb3QgIGdseXBoID0gKENJRF9HbHlwaFNsb3QpY2lkZ2x5cGg7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CisgICAgVDFfRGVjb2RlclJlYyAgZGVjb2RlcjsKKyAgICBDSURfRmFjZSAgICAgICBmYWNlID0gKENJRF9GYWNlKWNpZGdseXBoLT5mYWNlOworICAgIEZUX0Jvb2wgICAgICAgIGhpbnRpbmc7CisKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIEZUX01hdHJpeCAgICAgIGZvbnRfbWF0cml4OworICAgIEZUX1ZlY3RvciAgICAgIGZvbnRfb2Zmc2V0OworCisKKyAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fUkVDVVJTRSApCisgICAgICBsb2FkX2ZsYWdzIHw9IEZUX0xPQURfTk9fU0NBTEUgfCBGVF9MT0FEX05PX0hJTlRJTkc7CisKKyAgICBnbHlwaC0+eF9zY2FsZSA9IGNpZHNpemUtPm1ldHJpY3MueF9zY2FsZTsKKyAgICBnbHlwaC0+eV9zY2FsZSA9IGNpZHNpemUtPm1ldHJpY3MueV9zY2FsZTsKKworICAgIGNpZGdseXBoLT5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOworICAgIGNpZGdseXBoLT5vdXRsaW5lLm5fY29udG91cnMgPSAwOworCisgICAgaGludGluZyA9IEZUX0JPT0woICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgICApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19ISU5USU5HICkgPT0gMCApOworCisgICAgY2lkZ2x5cGgtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOworCisgICAgZXJyb3IgPSBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+aW5pdCggJmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkZ2x5cGgtPmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWRnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBnbHlwaCBuYW1lcyAtLSBYWFggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBibGVuZCA9PSAwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkX2xvYWRfZ2x5cGggKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIFRPRE86IGluaXRpYWxpemUgZGVjb2Rlci5sZW5fYnVpbGRjaGFyIGFuZCBkZWNvZGVyLmJ1aWxkY2hhciAqLworICAgIC8qICAgICAgIGlmIHdlIGV2ZXIgc3VwcG9ydCBDSUQta2V5ZWQgbXVsdGlwbGUgbWFzdGVyIGZvbnRzICAgICAqLworCisgICAgLyogc2V0IHVwIHRoZSBkZWNvZGVyICovCisgICAgZGVjb2Rlci5idWlsZGVyLm5vX3JlY3Vyc2UgPSBGVF9CT09MKAorICAgICAgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKSAhPSAwICkgKTsKKworICAgIGVycm9yID0gY2lkX2xvYWRfZ2x5cGgoICZkZWNvZGVyLCBnbHlwaF9pbmRleCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgZm9udF9tYXRyaXggPSBkZWNvZGVyLmZvbnRfbWF0cml4OworICAgIGZvbnRfb2Zmc2V0ID0gZGVjb2Rlci5mb250X29mZnNldDsKKworICAgIC8qIHNhdmUgbmV3IGdseXBoIHRhYmxlcyAqLworICAgIHBzYXV4LT50MV9kZWNvZGVyX2Z1bmNzLT5kb25lKCAmZGVjb2RlciApOworCisgICAgLyogbm93IHNldCB0aGUgbWV0cmljcyAtLSB0aGlzIGlzIHJhdGhlciBzaW1wbGUsIGFzICAgICovCisgICAgLyogdGhlIGxlZnQgc2lkZSBiZWFyaW5nIGlzIHRoZSB4TWluLCBhbmQgdGhlIHRvcCBzaWRlICovCisgICAgLyogYmVhcmluZyB0aGUgeU1heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgY2lkZ2x5cGgtPm91dGxpbmUuZmxhZ3MgJj0gRlRfT1VUTElORV9PV05FUjsKKyAgICBjaWRnbHlwaC0+b3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX1JFVkVSU0VfRklMTDsKKworICAgIC8qIGZvciBjb21wb3NpdGUgZ2x5cGhzLCByZXR1cm4gb25seSBsZWZ0IHNpZGUgYmVhcmluZyBhbmQgKi8KKyAgICAvKiBhZHZhbmNlIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19SRUNVUlNFICkKKyAgICB7CisgICAgICBGVF9TbG90X0ludGVybmFsICBpbnRlcm5hbCA9IGNpZGdseXBoLT5pbnRlcm5hbDsKKworCisgICAgICBjaWRnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1ggPQorICAgICAgICBGSVhFRF9UT19JTlQoIGRlY29kZXIuYnVpbGRlci5sZWZ0X2JlYXJpbmcueCApOworICAgICAgY2lkZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPQorICAgICAgICBGSVhFRF9UT19JTlQoIGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggKTsKKworICAgICAgaW50ZXJuYWwtPmdseXBoX21hdHJpeCAgICAgID0gZm9udF9tYXRyaXg7CisgICAgICBpbnRlcm5hbC0+Z2x5cGhfZGVsdGEgICAgICAgPSBmb250X29mZnNldDsKKyAgICAgIGludGVybmFsLT5nbHlwaF90cmFuc2Zvcm1lZCA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9CQm94ICAgICAgICAgICAgY2JveDsKKyAgICAgIEZUX0dseXBoX01ldHJpY3MqICBtZXRyaWNzID0gJmNpZGdseXBoLT5tZXRyaWNzOworICAgICAgRlRfVmVjdG9yICAgICAgICAgIGFkdmFuY2U7CisKKworICAgICAgLyogY29weSB0aGUgX3Vuc2NhbGVkXyBhZHZhbmNlIHdpZHRoICovCisgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9CisgICAgICAgIEZJWEVEX1RPX0lOVCggZGVjb2Rlci5idWlsZGVyLmFkdmFuY2UueCApOworICAgICAgY2lkZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlID0KKyAgICAgICAgRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54ICk7CisgICAgICBjaWRnbHlwaC0+aW50ZXJuYWwtPmdseXBoX3RyYW5zZm9ybWVkID0gMDsKKworICAgICAgLyogbWFrZSB1cCB2ZXJ0aWNhbCBvbmVzICovCisgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSAgICAgICAgPSAoIGZhY2UtPmNpZC5mb250X2Jib3gueU1heCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmNpZC5mb250X2Jib3gueU1pbiApID4+IDE2OworICAgICAgY2lkZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlID0gbWV0cmljcy0+dmVydEFkdmFuY2U7CisKKyAgICAgIGNpZGdseXBoLT5mb3JtYXQgICAgICAgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOworCisgICAgICBpZiAoIGNpZHNpemUtPm1ldHJpY3MueV9wcGVtIDwgMjQgKQorICAgICAgICBjaWRnbHlwaC0+b3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OOworCisgICAgICAvKiBhcHBseSB0aGUgZm9udCBtYXRyaXggKi8KKyAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmY2lkZ2x5cGgtPm91dGxpbmUsICZmb250X21hdHJpeCApOworCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJmNpZGdseXBoLT5vdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9vZmZzZXQueSApOworCisgICAgICBhZHZhbmNlLnggPSBtZXRyaWNzLT5ob3JpQWR2YW5jZTsKKyAgICAgIGFkdmFuY2UueSA9IDA7CisgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCAmYWR2YW5jZSwgJmZvbnRfbWF0cml4ICk7CisgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IGFkdmFuY2UueCArIGZvbnRfb2Zmc2V0Lng7CisKKyAgICAgIGFkdmFuY2UueCA9IDA7CisgICAgICBhZHZhbmNlLnkgPSBtZXRyaWNzLT52ZXJ0QWR2YW5jZTsKKyAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZhZHZhbmNlLCAmZm9udF9tYXRyaXggKTsKKyAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZS55ICsgZm9udF9vZmZzZXQueTsKKworICAgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCApCisgICAgICB7CisgICAgICAgIC8qIHNjYWxlIHRoZSBvdXRsaW5lIGFuZCB0aGUgbWV0cmljcyAqLworICAgICAgICBGVF9JbnQgICAgICAgbjsKKyAgICAgICAgRlRfT3V0bGluZSogIGN1ciA9IGRlY29kZXIuYnVpbGRlci5iYXNlOworICAgICAgICBGVF9WZWN0b3IqICAgdmVjID0gY3VyLT5wb2ludHM7CisgICAgICAgIEZUX0ZpeGVkICAgICB4X3NjYWxlID0gZ2x5cGgtPnhfc2NhbGU7CisgICAgICAgIEZUX0ZpeGVkICAgICB5X3NjYWxlID0gZ2x5cGgtPnlfc2NhbGU7CisKKworICAgICAgICAvKiBGaXJzdCBvZiBhbGwsIHNjYWxlIHRoZSBwb2ludHMgKi8KKyAgICAgICAgaWYgKCAhaGludGluZyB8fCAhZGVjb2Rlci5idWlsZGVyLmhpbnRzX2Z1bmNzICkKKyAgICAgICAgICBmb3IgKCBuID0gY3VyLT5uX3BvaW50czsgbiA+IDA7IG4tLSwgdmVjKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZlYy0+eCA9IEZUX011bEZpeCggdmVjLT54LCB4X3NjYWxlICk7CisgICAgICAgICAgICB2ZWMtPnkgPSBGVF9NdWxGaXgoIHZlYy0+eSwgeV9zY2FsZSApOworICAgICAgICAgIH0KKworICAgICAgICAvKiBUaGVuIHNjYWxlIHRoZSBtZXRyaWNzICovCisgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT5ob3JpQWR2YW5jZSwgeF9zY2FsZSApOworICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSA9IEZUX011bEZpeCggbWV0cmljcy0+dmVydEFkdmFuY2UsIHlfc2NhbGUgKTsKKyAgICAgIH0KKworICAgICAgLyogY29tcHV0ZSB0aGUgb3RoZXIgbWV0cmljcyAqLworICAgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggJmNpZGdseXBoLT5vdXRsaW5lLCAmY2JveCApOworCisgICAgICBtZXRyaWNzLT53aWR0aCAgPSBjYm94LnhNYXggLSBjYm94LnhNaW47CisgICAgICBtZXRyaWNzLT5oZWlnaHQgPSBjYm94LnlNYXggLSBjYm94LnlNaW47CisKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IGNib3gueE1pbjsKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA9IGNib3gueU1heDsKKworICAgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQorICAgICAgeworICAgICAgICAvKiBtYWtlIHVwIHZlcnRpY2FsIG9uZXMgKi8KKyAgICAgICAgZnRfc3ludGhlc2l6ZV92ZXJ0aWNhbF9tZXRyaWNzKCBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICk7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRnbG9hZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkZ2xvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkZ2xvYWQuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjaWRnbG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DSURHTE9BRF9IX18KKyNkZWZpbmUgX19DSURHTE9BRF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJjaWRvYmpzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworI2lmIDAKKworICAvKiBDb21wdXRlIHRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggb2YgYSBmb250IHRocm91Z2ggcXVpY2sgcGFyc2luZyAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjaWRfZmFjZV9jb21wdXRlX21heF9hZHZhbmNlKCBDSURfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgIG1heF9hZHZhbmNlICk7CisKKyNlbmRpZiAvKiAwICovCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2lkX3Nsb3RfbG9hZF9nbHlwaCggRlRfR2x5cGhTbG90ICBnbHlwaCwgICAgICAgICAvKiBDSURfR2x5cGhfU2xvdCAqLworICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsICAgICAgICAgIC8qIENJRF9TaXplICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0lER0xPQURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRsb2FkLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzNTg2MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZGxvYWQuYwpAQCAtMCwwICsxLDcwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2lkbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENJRC1rZXllZCBUeXBlMSBmb250IGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisKKyNpbmNsdWRlICJjaWRsb2FkLmgiCisKKyNpbmNsdWRlICJjaWRlcnJzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jaWRsb2FkCisKKworICAvKiByZWFkIGEgc2luZ2xlIG9mZnNldCAqLworICBGVF9MT0NBTF9ERUYoIEZUX1VMb25nICkKKyAgY2lkX2dldF9vZmZzZXQoIEZUX0J5dGUqICAqc3RhcnQsCisgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgIG9mZnNpemUgKQorICB7CisgICAgRlRfVUxvbmcgIHJlc3VsdDsKKyAgICBGVF9CeXRlKiAgcCA9ICpzdGFydDsKKworCisgICAgZm9yICggcmVzdWx0ID0gMDsgb2Zmc2l6ZSA+IDA7IG9mZnNpemUtLSApCisgICAgeworICAgICAgcmVzdWx0IDw8PSA4OworICAgICAgcmVzdWx0ICB8PSAqcCsrOworICAgIH0KKworICAgICpzdGFydCA9IHA7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBUWVBFIDEgU1lNQk9MIFBBUlNJTkcgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX2xvYWRfa2V5d29yZCggQ0lEX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIENJRF9Mb2FkZXIqICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxX0ZpZWxkICBrZXl3b3JkICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgQ0lEX1BhcnNlciogICBwYXJzZXIgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgRlRfQnl0ZSogICAgICBvYmplY3Q7CisgICAgdm9pZCogICAgICAgICBkdW1teV9vYmplY3Q7CisgICAgQ0lEX0ZhY2VJbmZvICBjaWQgPSAmZmFjZS0+Y2lkOworCisKKyAgICAvKiBpZiB0aGUga2V5d29yZCBoYXMgYSBkZWRpY2F0ZWQgY2FsbGJhY2ssIGNhbGwgaXQgKi8KKyAgICBpZiAoIGtleXdvcmQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9DQUxMQkFDSyApCisgICAgeworICAgICAga2V5d29yZC0+cmVhZGVyKCAoRlRfRmFjZSlmYWNlLCBwYXJzZXIgKTsKKyAgICAgIGVycm9yID0gcGFyc2VyLT5yb290LmVycm9yOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHdlIG11c3Qgbm93IGNvbXB1dGUgdGhlIGFkZHJlc3Mgb2Ygb3VyIHRhcmdldCBvYmplY3QgKi8KKyAgICBzd2l0Y2ggKCBrZXl3b3JkLT5sb2NhdGlvbiApCisgICAgeworICAgIGNhc2UgVDFfRklFTERfTE9DQVRJT05fQ0lEX0lORk86CisgICAgICBvYmplY3QgPSAoRlRfQnl0ZSopY2lkOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfSU5GTzoKKyAgICAgIG9iamVjdCA9IChGVF9CeXRlKikmY2lkLT5mb250X2luZm87CisgICAgICBicmVhazsKKworICAgIGNhc2UgVDFfRklFTERfTE9DQVRJT05fRk9OVF9FWFRSQToKKyAgICAgIG9iamVjdCA9IChGVF9CeXRlKikmZmFjZS0+Zm9udF9leHRyYTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUMV9GSUVMRF9MT0NBVElPTl9CQk9YOgorICAgICAgb2JqZWN0ID0gKEZUX0J5dGUqKSZjaWQtPmZvbnRfYmJveDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHsKKyAgICAgICAgQ0lEX0ZhY2VEaWN0ICBkaWN0OworCisKKyAgICAgICAgaWYgKCBwYXJzZXItPm51bV9kaWN0IDwgMCB8fCBwYXJzZXItPm51bV9kaWN0ID49IGNpZC0+bnVtX2RpY3RzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggImNpZF9sb2FkX2tleXdvcmQ6IGludmFsaWQgdXNlIG9mIGAlcydcbiIsCisgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLT5pZGVudCApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBkaWN0ID0gY2lkLT5mb250X2RpY3RzICsgcGFyc2VyLT5udW1fZGljdDsKKyAgICAgICAgc3dpdGNoICgga2V5d29yZC0+bG9jYXRpb24gKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVDFfRklFTERfTE9DQVRJT05fUFJJVkFURToKKyAgICAgICAgICBvYmplY3QgPSAoRlRfQnl0ZSopJmRpY3QtPnByaXZhdGVfZGljdDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIG9iamVjdCA9IChGVF9CeXRlKilkaWN0OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZHVtbXlfb2JqZWN0ID0gb2JqZWN0OworCisgICAgLyogbm93LCBsb2FkIHRoZSBrZXl3b3JkIGRhdGEgaW4gdGhlIG9iamVjdCdzIGZpZWxkKHMpICovCisgICAgaWYgKCBrZXl3b3JkLT50eXBlID09IFQxX0ZJRUxEX1RZUEVfSU5URUdFUl9BUlJBWSB8fAorICAgICAgICAga2V5d29yZC0+dHlwZSA9PSBUMV9GSUVMRF9UWVBFX0ZJWEVEX0FSUkFZICAgKQorICAgICAgZXJyb3IgPSBjaWRfcGFyc2VyX2xvYWRfZmllbGRfdGFibGUoICZsb2FkZXItPnBhcnNlciwga2V5d29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlfb2JqZWN0ICk7CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBjaWRfcGFyc2VyX2xvYWRfZmllbGQoICZsb2FkZXItPnBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLCAmZHVtbXlfb2JqZWN0ICk7CisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgY2lkX3BhcnNlX2ZvbnRfbWF0cml4KCBDSURfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDSURfUGFyc2VyKiAgcGFyc2VyICkKKyAgeworICAgIENJRF9GYWNlRGljdCAgZGljdDsKKyAgICBGVF9GYWNlICAgICAgIHJvb3QgPSAoRlRfRmFjZSkmZmFjZS0+cm9vdDsKKyAgICBGVF9GaXhlZCAgICAgIHRlbXBbNl07CisgICAgRlRfRml4ZWQgICAgICB0ZW1wX3NjYWxlOworCisKKyAgICBpZiAoIHBhcnNlci0+bnVtX2RpY3QgPj0gMCAmJiBwYXJzZXItPm51bV9kaWN0IDwgZmFjZS0+Y2lkLm51bV9kaWN0cyApCisgICAgeworICAgICAgRlRfTWF0cml4KiAgbWF0cml4OworICAgICAgRlRfVmVjdG9yKiAgb2Zmc2V0OworICAgICAgRlRfSW50ICAgICAgcmVzdWx0OworCisKKyAgICAgIGRpY3QgICA9IGZhY2UtPmNpZC5mb250X2RpY3RzICsgcGFyc2VyLT5udW1fZGljdDsKKyAgICAgIG1hdHJpeCA9ICZkaWN0LT5mb250X21hdHJpeDsKKyAgICAgIG9mZnNldCA9ICZkaWN0LT5mb250X29mZnNldDsKKworICAgICAgcmVzdWx0ID0gY2lkX3BhcnNlcl90b19maXhlZF9hcnJheSggcGFyc2VyLCA2LCB0ZW1wLCAzICk7CisKKyAgICAgIGlmICggcmVzdWx0IDwgNiApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgICB0ZW1wX3NjYWxlID0gRlRfQUJTKCB0ZW1wWzNdICk7CisKKyAgICAgIGlmICggdGVtcF9zY2FsZSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2lkX3BhcnNlX2ZvbnRfbWF0cml4OiBpbnZhbGlkIGZvbnQgbWF0cml4XG4iICkpOworICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIH0KKworICAgICAgLyogU2V0IFVuaXRzIHBlciBFTSBiYXNlZCBvbiBGb250TWF0cml4IHZhbHVlcy4gIFdlIHNldCB0aGUgdmFsdWUgdG8gKi8KKyAgICAgIC8qIDEwMDAgLyB0ZW1wX3NjYWxlLCBiZWNhdXNlIHRlbXBfc2NhbGUgd2FzIGFscmVhZHkgbXVsdGlwbGllZCBieSAgICovCisgICAgICAvKiAxMDAwIChpbiB0MV90b2ZpeGVkLCBmcm9tIHBzb2Jqcy5jKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICByb290LT51bml0c19wZXJfRU0gPSAoRlRfVVNob3J0KUZUX0RpdkZpeCggMTAwMCwgdGVtcF9zY2FsZSApOworCisgICAgICAvKiB3ZSBuZWVkIHRvIHNjYWxlIHRoZSB2YWx1ZXMgYnkgMS4wL3RlbXBbM10gKi8KKyAgICAgIGlmICggdGVtcF9zY2FsZSAhPSAweDEwMDAwTCApCisgICAgICB7CisgICAgICAgIHRlbXBbMF0gPSBGVF9EaXZGaXgoIHRlbXBbMF0sIHRlbXBfc2NhbGUgKTsKKyAgICAgICAgdGVtcFsxXSA9IEZUX0RpdkZpeCggdGVtcFsxXSwgdGVtcF9zY2FsZSApOworICAgICAgICB0ZW1wWzJdID0gRlRfRGl2Rml4KCB0ZW1wWzJdLCB0ZW1wX3NjYWxlICk7CisgICAgICAgIHRlbXBbNF0gPSBGVF9EaXZGaXgoIHRlbXBbNF0sIHRlbXBfc2NhbGUgKTsKKyAgICAgICAgdGVtcFs1XSA9IEZUX0RpdkZpeCggdGVtcFs1XSwgdGVtcF9zY2FsZSApOworICAgICAgICB0ZW1wWzNdID0gdGVtcFszXSA8IDAgPyAtMHgxMDAwMEwgOiAweDEwMDAwTDsKKyAgICAgIH0KKworICAgICAgbWF0cml4LT54eCA9IHRlbXBbMF07CisgICAgICBtYXRyaXgtPnl4ID0gdGVtcFsxXTsKKyAgICAgIG1hdHJpeC0+eHkgPSB0ZW1wWzJdOworICAgICAgbWF0cml4LT55eSA9IHRlbXBbM107CisKKyAgICAgIC8qIG5vdGUgdGhhdCB0aGUgZm9udCBvZmZzZXRzIGFyZSBleHByZXNzZWQgaW4gaW50ZWdlciBmb250IHVuaXRzICovCisgICAgICBvZmZzZXQtPnggID0gdGVtcFs0XSA+PiAxNjsKKyAgICAgIG9mZnNldC0+eSAgPSB0ZW1wWzVdID4+IDE2OworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBwYXJzZV9mZF9hcnJheSggQ0lEX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBDSURfUGFyc2VyKiAgcGFyc2VyICkKKyAgeworICAgIENJRF9GYWNlSW5mbyAgY2lkICAgID0gJmZhY2UtPmNpZDsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX0xvbmcgICAgICAgbnVtX2RpY3RzOworCisKKyAgICBudW1fZGljdHMgPSBjaWRfcGFyc2VyX3RvX2ludCggcGFyc2VyICk7CisgICAgaWYgKCBudW1fZGljdHMgPCAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJwYXJzZV9mZF9hcnJheTogaW52YWxpZCBudW1iZXIgb2YgZGljdGlvbmFyaWVzXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggIWNpZC0+Zm9udF9kaWN0cyApCisgICAgeworICAgICAgRlRfSW50ICBuOworCisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBjaWQtPmZvbnRfZGljdHMsIG51bV9kaWN0cyApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBjaWQtPm51bV9kaWN0cyA9IG51bV9kaWN0czsKKworICAgICAgLyogZG9uJ3QgZm9yZ2V0IHRvIHNldCBhIGZldyBkZWZhdWx0cyAqLworICAgICAgZm9yICggbiA9IDA7IG4gPCBjaWQtPm51bV9kaWN0czsgbisrICkKKyAgICAgIHsKKyAgICAgICAgQ0lEX0ZhY2VEaWN0ICBkaWN0ID0gY2lkLT5mb250X2RpY3RzICsgbjsKKworCisgICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgZm9yIGxlbklWICovCisgICAgICAgIGRpY3QtPnByaXZhdGVfZGljdC5sZW5JViA9IDQ7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBieSBtaXN0YWtlLCBgZXhwYW5zaW9uX2ZhY3RvcicgYXBwZWFycyBib3RoIGluIFBTX1ByaXZhdGVSZWMgKi8KKyAgLyogYW5kIENJRF9GYWNlRGljdFJlYyAoYm90aCBhcmUgcHVibGljIGhlYWRlciBmaWxlcyBhbmQgY2FuJ3QgICovCisgIC8qIGNoYW5nZWQpOyB3ZSBzaW1wbHkgY29weSB0aGUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBwYXJzZV9leHBhbnNpb25fZmFjdG9yKCBDSURfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0lEX1BhcnNlciogIHBhcnNlciApCisgIHsKKyAgICBDSURfRmFjZURpY3QgIGRpY3Q7CisKKworICAgIGlmICggcGFyc2VyLT5udW1fZGljdCA+PSAwICYmIHBhcnNlci0+bnVtX2RpY3QgPCBmYWNlLT5jaWQubnVtX2RpY3RzICkKKyAgICB7CisgICAgICBkaWN0ID0gZmFjZS0+Y2lkLmZvbnRfZGljdHMgKyBwYXJzZXItPm51bV9kaWN0OworCisgICAgICBkaWN0LT5leHBhbnNpb25fZmFjdG9yICAgICAgICAgICAgICA9IGNpZF9wYXJzZXJfdG9fZml4ZWQoIHBhcnNlciwgMCApOworICAgICAgZGljdC0+cHJpdmF0ZV9kaWN0LmV4cGFuc2lvbl9mYWN0b3IgPSBkaWN0LT5leHBhbnNpb25fZmFjdG9yOworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYworICBjb25zdCBUMV9GaWVsZFJlYyAgY2lkX2ZpZWxkX3JlY29yZHNbXSA9CisgIHsKKworI2luY2x1ZGUgImNpZHRva2VuLmgiCisKKyAgICBUMV9GSUVMRF9DQUxMQkFDSyggIkZEQXJyYXkiLCAgICAgICAgIHBhcnNlX2ZkX2FycmF5LCAwICkKKyAgICBUMV9GSUVMRF9DQUxMQkFDSyggIkZvbnRNYXRyaXgiLCAgICAgIGNpZF9wYXJzZV9mb250X21hdHJpeCwgMCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJFeHBhbnNpb25GYWN0b3IiLCBwYXJzZV9leHBhbnNpb25fZmFjdG9yLCAwICkKKworICAgIHsgMCwgVDFfRklFTERfTE9DQVRJT05fQ0lEX0lORk8sIFQxX0ZJRUxEX1RZUEVfTk9ORSwgMCwgMCwgMCwgMCwgMCwgMCB9CisgIH07CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX3BhcnNlX2RpY3QoIENJRF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgQ0lEX0xvYWRlciogIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgIHNpemUgKQorICB7CisgICAgQ0lEX1BhcnNlciogIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKworCisgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGJhc2U7CisgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IGJhc2UgKyBzaXplOworICAgIHBhcnNlci0+cm9vdC5lcnJvciAgPSBGVF9FcnJfT2s7CisKKyAgICB7CisgICAgICBGVF9CeXRlKiAgY3VyICAgPSBiYXNlOworICAgICAgRlRfQnl0ZSogIGxpbWl0ID0gY3VyICsgc2l6ZTsKKworCisgICAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgbmV3bGltaXQ7CisKKworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gY3VyOworICAgICAgICBjaWRfcGFyc2VyX3NraXBfc3BhY2VzKCBwYXJzZXIgKTsKKworICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPj0gbGltaXQgKQorICAgICAgICAgIG5ld2xpbWl0ID0gbGltaXQgLSAxIC0gMTc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBuZXdsaW1pdCA9IHBhcnNlci0+cm9vdC5jdXJzb3IgLSAxNzsKKworICAgICAgICAvKiBsb29rIGZvciBgJUFET0JlZ2luRm9udERpY3QnICovCisgICAgICAgIGZvciAoIDsgY3VyIDwgbmV3bGltaXQ7IGN1cisrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggKmN1ciA9PSAnJScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBmdF9zdHJuY21wKCAoY2hhciopY3VyLCAiJUFET0JlZ2luRm9udERpY3QiLCAxNyApID09IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGlmIC9GREFycmF5IHdhcyBmb3VuZCwgdGhlbiBjaWQtPm51bV9kaWN0cyBpcyA+IDAsIGFuZCAqLworICAgICAgICAgICAgLyogd2UgY2FuIHN0YXJ0IGluY3JlYXNpbmcgcGFyc2VyLT5udW1fZGljdCAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIGZhY2UtPmNpZC5udW1fZGljdHMgPiAwICkKKyAgICAgICAgICAgICAgcGFyc2VyLT5udW1fZGljdCsrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisgICAgICAgIC8qIG5vIGVycm9yIGNhbiBvY2N1ciBpbiBjaWRfcGFyc2VyX3NraXBfc3BhY2VzICovCisgICAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjaWRfcGFyc2VyX3NraXBfUFNfdG9rZW4oIHBhcnNlciApOworICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPj0gbGltaXQgfHwgcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBsb29rIGZvciBpbW1lZGlhdGVzICovCisgICAgICAgIGlmICggKmN1ciA9PSAnLycgJiYgY3VyICsgMiA8IGxpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGxlbjsKKworCisgICAgICAgICAgY3VyKys7CisgICAgICAgICAgbGVuID0gKEZUX1VJbnQpKCBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyICk7CisKKyAgICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwgMjIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG5vdyBjb21wYXJlIHRoZSBpbW1lZGlhdGUgbmFtZSB0byB0aGUga2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAgVDFfRmllbGQgIGtleXdvcmQgPSAoVDFfRmllbGQpY2lkX2ZpZWxkX3JlY29yZHM7CisKKworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfQnl0ZSogIG5hbWU7CisKKworICAgICAgICAgICAgICBuYW1lID0gKEZUX0J5dGUqKWtleXdvcmQtPmlkZW50OworICAgICAgICAgICAgICBpZiAoICFuYW1lICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBpZiAoIGN1clswXSA9PSBuYW1lWzBdICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICBsZW4gPT0gZnRfc3RybGVuKCAoY29uc3QgY2hhciopbmFtZSApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUX1VJbnQgIG47CisKKworICAgICAgICAgICAgICAgIGZvciAoIG4gPSAxOyBuIDwgbGVuOyBuKysgKQorICAgICAgICAgICAgICAgICAgaWYgKCBjdXJbbl0gIT0gbmFtZVtuXSApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKCBuID49IGxlbiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogd2UgZm91bmQgaXQgLSBydW4gdGhlIHBhcnNpbmcgY2FsbGJhY2sgKi8KKyAgICAgICAgICAgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IGNpZF9sb2FkX2tleXdvcmQoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkICk7CisgICAgICAgICAgICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnJvb3QuZXJyb3I7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAga2V5d29yZCsrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXJzZXItPnJvb3QuZXJyb3I7CisgIH0KKworCisgIC8qIHJlYWQgdGhlIHN1YnJtYXAgYW5kIHRoZSBzdWJycyBvZiBlYWNoIGZvbnQgZGljdCAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX3JlYWRfc3VicnMoIENJRF9GYWNlICBmYWNlICkKKyAgeworICAgIENJRF9GYWNlSW5mbyAgIGNpZCAgICA9ICZmYWNlLT5jaWQ7CisgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgRlRfU3RyZWFtICAgICAgc3RyZWFtID0gZmFjZS0+Y2lkX3N0cmVhbTsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICBGVF9JbnQgICAgICAgICBuOworICAgIENJRF9TdWJycyAgICAgIHN1YnI7CisgICAgRlRfVUludCAgICAgICAgbWF4X29mZnNldHMgPSAwOworICAgIEZUX1VMb25nKiAgICAgIG9mZnNldHMgPSBOVUxMOworICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBmYWNlLT5zdWJycywgY2lkLT5udW1fZGljdHMgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBzdWJyID0gZmFjZS0+c3VicnM7CisgICAgZm9yICggbiA9IDA7IG4gPCBjaWQtPm51bV9kaWN0czsgbisrLCBzdWJyKysgKQorICAgIHsKKyAgICAgIENJRF9GYWNlRGljdCAgZGljdCAgPSBjaWQtPmZvbnRfZGljdHMgKyBuOworICAgICAgRlRfSW50ICAgICAgICBsZW5JViA9IGRpY3QtPnByaXZhdGVfZGljdC5sZW5JVjsKKyAgICAgIEZUX1VJbnQgICAgICAgY291bnQsIG51bV9zdWJycyA9IGRpY3QtPm51bV9zdWJyczsKKyAgICAgIEZUX1VMb25nICAgICAgZGF0YV9sZW47CisgICAgICBGVF9CeXRlKiAgICAgIHA7CisKKworICAgICAgLyogQ2hlY2sgZm9yIHBvc3NpYmxlIG92ZXJmbG93LiAqLworICAgICAgaWYgKCBudW1fc3VicnMgPT0gRlRfVUlOVF9NQVggKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorCisgICAgICAvKiByZWFsbG9jYXRlIG9mZnNldHMgYXJyYXkgaWYgbmVlZGVkICovCisgICAgICBpZiAoIG51bV9zdWJycyArIDEgPiBtYXhfb2Zmc2V0cyApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIG5ld19tYXggPSBGVF9QQURfQ0VJTCggbnVtX3N1YnJzICsgMSwgNCApOworCisKKyAgICAgICAgaWYgKCBuZXdfbWF4IDw9IG1heF9vZmZzZXRzICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIG9mZnNldHMsIG1heF9vZmZzZXRzLCBuZXdfbWF4ICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBtYXhfb2Zmc2V0cyA9IG5ld19tYXg7CisgICAgICB9CisKKyAgICAgIC8qIHJlYWQgdGhlIHN1YnJtYXAncyBvZmZzZXRzICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBjaWQtPmRhdGFfb2Zmc2V0ICsgZGljdC0+c3Vicm1hcF9vZmZzZXQgKSAgICAgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoICggbnVtX3N1YnJzICsgMSApICogKEZUX1VJbnQpZGljdC0+c2RfYnl0ZXMgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgcCA9IChGVF9CeXRlKilzdHJlYW0tPmN1cnNvcjsKKyAgICAgIGZvciAoIGNvdW50ID0gMDsgY291bnQgPD0gbnVtX3N1YnJzOyBjb3VudCsrICkKKyAgICAgICAgb2Zmc2V0c1tjb3VudF0gPSBjaWRfZ2V0X29mZnNldCggJnAsIChGVF9CeXRlKWRpY3QtPnNkX2J5dGVzICk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgLyogb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgKi8KKyAgICAgIGZvciAoIGNvdW50ID0gMTsgY291bnQgPD0gbnVtX3N1YnJzOyBjb3VudCsrICkKKyAgICAgICAgaWYgKCBvZmZzZXRzW2NvdW50IC0gMV0gPiBvZmZzZXRzW2NvdW50XSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBub3csIGNvbXB1dGUgdGhlIHNpemUgb2Ygc3VicnMgY2hhcnN0cmluZ3MsICovCisgICAgICAvKiBhbGxvY2F0ZSwgYW5kIHJlYWQgdGhlbSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBkYXRhX2xlbiA9IG9mZnNldHNbbnVtX3N1YnJzXSAtIG9mZnNldHNbMF07CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBzdWJyLT5jb2RlLCBudW1fc3VicnMgKyAxICkgfHwKKyAgICAgICAgICAgICAgIEZUX0FMTE9DKCBzdWJyLT5jb2RlWzBdLCBkYXRhX2xlbiApICAgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGNpZC0+ZGF0YV9vZmZzZXQgKyBvZmZzZXRzWzBdICkgfHwKKyAgICAgICAgICAgRlRfU1RSRUFNX1JFQUQoIHN1YnItPmNvZGVbMF0sIGRhdGFfbGVuICkgICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBzZXQgdXAgcG9pbnRlcnMgKi8KKyAgICAgIGZvciAoIGNvdW50ID0gMTsgY291bnQgPD0gbnVtX3N1YnJzOyBjb3VudCsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgIGxlbjsKKworCisgICAgICAgIGxlbiAgICAgICAgICAgICAgID0gb2Zmc2V0c1tjb3VudF0gLSBvZmZzZXRzW2NvdW50IC0gMV07CisgICAgICAgIHN1YnItPmNvZGVbY291bnRdID0gc3Vici0+Y29kZVtjb3VudCAtIDFdICsgbGVuOworICAgICAgfQorCisgICAgICAvKiBkZWNyeXB0IHN1YnJvdXRpbmVzLCBidXQgb25seSBpZiBsZW5JViA+PSAwICovCisgICAgICBpZiAoIGxlbklWID49IDAgKQorICAgICAgeworICAgICAgICBmb3IgKCBjb3VudCA9IDA7IGNvdW50IDwgbnVtX3N1YnJzOyBjb3VudCsrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VMb25nICBsZW47CisKKworICAgICAgICAgIGxlbiA9IG9mZnNldHNbY291bnQgKyAxXSAtIG9mZnNldHNbY291bnRdOworICAgICAgICAgIHBzYXV4LT50MV9kZWNyeXB0KCBzdWJyLT5jb2RlW2NvdW50XSwgbGVuLCA0MzMwICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc3Vici0+bnVtX3N1YnJzID0gKEZUX0ludCludW1fc3VicnM7CisgICAgfQorCisgIEV4aXQ6CisgICAgRlRfRlJFRSggb2Zmc2V0cyApOworICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIGlmICggZmFjZS0+c3VicnMgKQorICAgIHsKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgY2lkLT5udW1fZGljdHM7IG4rKyApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZS0+c3VicnNbbl0uY29kZSApCisgICAgICAgICAgRlRfRlJFRSggZmFjZS0+c3VicnNbbl0uY29kZVswXSApOworCisgICAgICAgIEZUX0ZSRUUoIGZhY2UtPnN1YnJzW25dLmNvZGUgKTsKKyAgICAgIH0KKyAgICAgIEZUX0ZSRUUoIGZhY2UtPnN1YnJzICk7CisgICAgfQorICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgY2lkX2luaXRfbG9hZGVyKCBDSURfTG9hZGVyKiAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgIENJRF9GYWNlICAgICBmYWNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisgICAgRlRfTUVNX1pFUk8oIGxvYWRlciwgc2l6ZW9mICggKmxvYWRlciApICk7CisgIH0KKworCisgIHN0YXRpYyAgdm9pZAorICBjaWRfZG9uZV9sb2FkZXIoIENJRF9Mb2FkZXIqICBsb2FkZXIgKQorICB7CisgICAgQ0lEX1BhcnNlciogIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKworCisgICAgLyogZmluYWxpemUgcGFyc2VyICovCisgICAgY2lkX3BhcnNlcl9kb25lKCBwYXJzZXIgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNpZF9oZXhfdG9fYmluYXJ5KCBGVF9CeXRlKiAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBDSURfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKyAgICBGVF9CeXRlICAgIGJ1ZmZlclsyNTZdOworICAgIEZUX0J5dGUgICAqcCwgKnBsaW1pdDsKKyAgICBGVF9CeXRlICAgKmQsICpkbGltaXQ7CisgICAgRlRfQnl0ZSAgICB2YWw7CisKKyAgICBGVF9Cb29sICAgIHVwcGVyX25pYmJsZSwgZG9uZTsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZCAgICAgID0gZGF0YTsKKyAgICBkbGltaXQgPSBkICsgZGF0YV9sZW47CisgICAgcCAgICAgID0gYnVmZmVyOworICAgIHBsaW1pdCA9IHA7CisKKyAgICB1cHBlcl9uaWJibGUgPSAxOworICAgIGRvbmUgICAgICAgICA9IDA7CisKKyAgICB3aGlsZSAoIGQgPCBkbGltaXQgKQorICAgIHsKKyAgICAgIGlmICggcCA+PSBwbGltaXQgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgb2xkcG9zID0gRlRfU1RSRUFNX1BPUygpOworICAgICAgICBGVF9VTG9uZyAgc2l6ZSAgID0gc3RyZWFtLT5zaXplIC0gb2xkcG9zOworCisKKyAgICAgICAgaWYgKCBzaXplID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggU3ludGF4X0Vycm9yICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRCggYnVmZmVyLCAyNTYgPiBzaXplID8gc2l6ZSA6IDI1NiApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIHAgICAgICA9IGJ1ZmZlcjsKKyAgICAgICAgcGxpbWl0ID0gcCArIEZUX1NUUkVBTV9QT1MoKSAtIG9sZHBvczsKKyAgICAgIH0KKworICAgICAgaWYgKCBmdF9pc2RpZ2l0KCAqcCApICkKKyAgICAgICAgdmFsID0gKEZUX0J5dGUpKCAqcCAtICcwJyApOworICAgICAgZWxzZSBpZiAoICpwID49ICdhJyAmJiAqcCA8PSAnZicgKQorICAgICAgICB2YWwgPSAoRlRfQnl0ZSkoICpwIC0gJ2EnICk7CisgICAgICBlbHNlIGlmICggKnAgPj0gJ0EnICYmICpwIDw9ICdGJyApCisgICAgICAgIHZhbCA9IChGVF9CeXRlKSggKnAgLSAnQScgKyAxMCApOworICAgICAgZWxzZSBpZiAoICpwID09ICcgJyAgfHwKKyAgICAgICAgICAgICAgICAqcCA9PSAnXHQnIHx8CisgICAgICAgICAgICAgICAgKnAgPT0gJ1xyJyB8fAorICAgICAgICAgICAgICAgICpwID09ICdcbicgfHwKKyAgICAgICAgICAgICAgICAqcCA9PSAnXGYnIHx8CisgICAgICAgICAgICAgICAgKnAgPT0gJ1wwJyApCisgICAgICB7CisgICAgICAgIHArKzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBlbHNlIGlmICggKnAgPT0gJz4nICkKKyAgICAgIHsKKyAgICAgICAgdmFsICA9IDA7CisgICAgICAgIGRvbmUgPSAxOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIHVwcGVyX25pYmJsZSApCisgICAgICAgICpkID0gKEZUX0J5dGUpKCB2YWwgPDwgNCApOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICAqZCA9IChGVF9CeXRlKSggKmQgKyB2YWwgKTsKKyAgICAgICAgZCsrOworICAgICAgfQorCisgICAgICB1cHBlcl9uaWJibGUgPSAoRlRfQnl0ZSkoIDEgLSB1cHBlcl9uaWJibGUgKTsKKworICAgICAgaWYgKCBkb25lICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHArKzsKKyAgICB9CisKKyAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNpZF9mYWNlX29wZW4oIENJRF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBDSURfTG9hZGVyICAgbG9hZGVyOworICAgIENJRF9QYXJzZXIqICBwYXJzZXI7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKworCisgICAgY2lkX2luaXRfbG9hZGVyKCAmbG9hZGVyLCBmYWNlICk7CisKKyAgICBwYXJzZXIgPSAmbG9hZGVyLnBhcnNlcjsKKyAgICBlcnJvciA9IGNpZF9wYXJzZXJfbmV3KCBwYXJzZXIsIGZhY2UtPnJvb3Quc3RyZWFtLCBmYWNlLT5yb290Lm1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSBjaWRfcGFyc2VfZGljdCggZmFjZSwgJmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnBvc3RzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5wb3N0c2NyaXB0X2xlbiApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBmYWNlX2luZGV4IDwgMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX05FVyggZmFjZS0+Y2lkX3N0cmVhbSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggcGFyc2VyLT5iaW5hcnlfbGVuZ3RoICkKKyAgICB7CisgICAgICAvKiB3ZSBtdXN0IGNvbnZlcnQgdGhlIGRhdGEgc2VjdGlvbiBmcm9tIGhleGFkZWNpbWFsIHRvIGJpbmFyeSAqLworICAgICAgaWYgKCBGVF9BTExPQyggZmFjZS0+YmluYXJ5X2RhdGEsIHBhcnNlci0+YmluYXJ5X2xlbmd0aCApICAgICAgICAgfHwKKyAgICAgICAgICAgY2lkX2hleF90b19iaW5hcnkoIGZhY2UtPmJpbmFyeV9kYXRhLCBwYXJzZXItPmJpbmFyeV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPmRhdGFfb2Zmc2V0LCBmYWNlICkgICAgICAgICAgICAgICApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoIGZhY2UtPmNpZF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+YmluYXJ5X2RhdGEsIHBhcnNlci0+YmluYXJ5X2xlbmd0aCApOworICAgICAgZmFjZS0+Y2lkLmRhdGFfb2Zmc2V0ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICpmYWNlLT5jaWRfc3RyZWFtICAgICA9ICpmYWNlLT5yb290LnN0cmVhbTsKKyAgICAgIGZhY2UtPmNpZC5kYXRhX29mZnNldCA9IGxvYWRlci5wYXJzZXIuZGF0YV9vZmZzZXQ7CisgICAgfQorCisgICAgZXJyb3IgPSBjaWRfcmVhZF9zdWJycyggZmFjZSApOworCisgIEV4aXQ6CisgICAgY2lkX2RvbmVfbG9hZGVyKCAmbG9hZGVyICk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRsb2FkLmggYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3NzZkMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZGxvYWQuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjaWRsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ0lELWtleWVkIFR5cGUxIGZvbnQgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DSURMT0FEX0hfXworI2RlZmluZSBfX0NJRExPQURfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgImNpZHBhcnNlLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICB0eXBlZGVmIHN0cnVjdCAgQ0lEX0xvYWRlcl8KKyAgeworICAgIENJRF9QYXJzZXIgIHBhcnNlcjsgICAgICAgICAgLyogcGFyc2VyIHVzZWQgdG8gcmVhZCB0aGUgc3RyZWFtICovCisgICAgRlRfSW50ICAgICAgbnVtX2NoYXJzOyAgICAgICAvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBlbmNvZGluZyAqLworCisgIH0gQ0lEX0xvYWRlcjsKKworCisgIEZUX0xPQ0FMKCBGVF9VTG9uZyApCisgIGNpZF9nZXRfb2Zmc2V0KCBGVF9CeXRlKiogIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICBvZmZzaXplICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2lkX2ZhY2Vfb3BlbiggQ0lEX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICBmYWNlX2luZGV4ICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19DSURMT0FEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkb2Jqcy5jIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkb2Jqcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDY4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRvYmpzLmMKQEAgLTAsMCArMSw0OTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNpZG9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDSUQgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisjaW5jbHVkZSAiY2lkZ2xvYWQuaCIKKyNpbmNsdWRlICJjaWRsb2FkLmgiCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKworI2luY2x1ZGUgImNpZGVycnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NpZG9ianMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjaWRfc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gTlVMTDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNpZF9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHsKKyAgICBDSURfRmFjZSAgICAgICAgICBmYWNlOworICAgIFBTSGludGVyX1NlcnZpY2UgIHBzaGludGVyOworCisKKyAgICBmYWNlICAgICA9IChDSURfRmFjZSlzbG90LT5mYWNlOworICAgIHBzaGludGVyID0gKFBTSGludGVyX1NlcnZpY2UpZmFjZS0+cHNoaW50ZXI7CisKKyAgICBpZiAoIHBzaGludGVyICkKKyAgICB7CisgICAgICBGVF9Nb2R1bGUgIG1vZHVsZTsKKworCisgICAgICBtb2R1bGUgPSBGVF9HZXRfTW9kdWxlKCBzbG90LT5mYWNlLT5kcml2ZXItPnJvb3QubGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2hpbnRlciIgKTsKKyAgICAgIGlmICggbW9kdWxlICkKKyAgICAgIHsKKyAgICAgICAgVDFfSGludHNfRnVuY3MgIGZ1bmNzOworCisKKyAgICAgICAgZnVuY3MgPSBwc2hpbnRlci0+Z2V0X3QxX2Z1bmNzKCBtb2R1bGUgKTsKKyAgICAgICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gKHZvaWQqKWZ1bmNzOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMgUFNIX0dsb2JhbHNfRnVuY3MKKyAgY2lkX3NpemVfZ2V0X2dsb2JhbHNfZnVuY3MoIENJRF9TaXplICBzaXplICkKKyAgeworICAgIENJRF9GYWNlICAgICAgICAgIGZhY2UgICAgID0gKENJRF9GYWNlKXNpemUtPnJvb3QuZmFjZTsKKyAgICBQU0hpbnRlcl9TZXJ2aWNlICBwc2hpbnRlciA9IChQU0hpbnRlcl9TZXJ2aWNlKWZhY2UtPnBzaGludGVyOworICAgIEZUX01vZHVsZSAgICAgICAgIG1vZHVsZTsKKworCisgICAgbW9kdWxlID0gRlRfR2V0X01vZHVsZSggc2l6ZS0+cm9vdC5mYWNlLT5kcml2ZXItPnJvb3QubGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHNoaW50ZXIiICk7CisgICAgcmV0dXJuICggbW9kdWxlICYmIHBzaGludGVyICYmIHBzaGludGVyLT5nZXRfZ2xvYmFsc19mdW5jcyApCisgICAgICAgICAgID8gcHNoaW50ZXItPmdldF9nbG9iYWxzX2Z1bmNzKCBtb2R1bGUgKQorICAgICAgICAgICA6IDA7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNpZF9zaXplX2RvbmUoIEZUX1NpemUgIGNpZHNpemUgKSAgICAgICAgIC8qIENJRF9TaXplICovCisgIHsKKyAgICBDSURfU2l6ZSAgc2l6ZSA9IChDSURfU2l6ZSljaWRzaXplOworCisKKyAgICBpZiAoIGNpZHNpemUtPmludGVybmFsICkKKyAgICB7CisgICAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3M7CisKKworICAgICAgZnVuY3MgPSBjaWRfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggc2l6ZSApOworICAgICAgaWYgKCBmdW5jcyApCisgICAgICAgIGZ1bmNzLT5kZXN0cm95KCAoUFNIX0dsb2JhbHMpY2lkc2l6ZS0+aW50ZXJuYWwgKTsKKworICAgICAgY2lkc2l6ZS0+aW50ZXJuYWwgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNpZF9zaXplX2luaXQoIEZUX1NpemUgIGNpZHNpemUgKSAgICAgLyogQ0lEX1NpemUgKi8KKyAgeworICAgIENJRF9TaXplICAgICAgICAgICBzaXplICA9IChDSURfU2l6ZSljaWRzaXplOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3MgPSBjaWRfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggc2l6ZSApOworCisKKyAgICBpZiAoIGZ1bmNzICkKKyAgICB7CisgICAgICBQU0hfR2xvYmFscyAgIGdsb2JhbHM7CisgICAgICBDSURfRmFjZSAgICAgIGZhY2UgPSAoQ0lEX0ZhY2UpY2lkc2l6ZS0+ZmFjZTsKKyAgICAgIENJRF9GYWNlRGljdCAgZGljdCA9IGZhY2UtPmNpZC5mb250X2RpY3RzICsgZmFjZS0+cm9vdC5mYWNlX2luZGV4OworICAgICAgUFNfUHJpdmF0ZSAgICBwcml2ID0gJmRpY3QtPnByaXZhdGVfZGljdDsKKworCisgICAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIGNpZHNpemUtPmZhY2UtPm1lbW9yeSwgcHJpdiwgJmdsb2JhbHMgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgY2lkc2l6ZS0+aW50ZXJuYWwgPSAoRlRfU2l6ZV9JbnRlcm5hbCkodm9pZCopZ2xvYmFsczsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNpZF9zaXplX3JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgUFNIX0dsb2JhbHNfRnVuY3MgIGZ1bmNzOworCisKKyAgICBGVF9SZXF1ZXN0X01ldHJpY3MoIHNpemUtPmZhY2UsIHJlcSApOworCisgICAgZnVuY3MgPSBjaWRfc2l6ZV9nZXRfZ2xvYmFsc19mdW5jcyggKENJRF9TaXplKXNpemUgKTsKKworICAgIGlmICggZnVuY3MgKQorICAgICAgZnVuY3MtPnNldF9zY2FsZSggKFBTSF9HbG9iYWxzKXNpemUtPmludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy54X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy55X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBQ0UgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNpZF9mYWNlX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBwb2ludGVyIHRvIHRoZSBmYWNlIG9iamVjdCB0byBkZXN0cm95LiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2lkX2ZhY2VfZG9uZSggRlRfRmFjZSAgY2lkZmFjZSApICAgICAgICAgLyogQ0lEX0ZhY2UgKi8KKyAgeworICAgIENJRF9GYWNlICAgICAgZmFjZSA9IChDSURfRmFjZSljaWRmYWNlOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5OworICAgIENJRF9GYWNlSW5mbyAgY2lkOworICAgIFBTX0ZvbnRJbmZvICAgaW5mbzsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm47CisKKyAgICBjaWQgICAgPSAmZmFjZS0+Y2lkOworICAgIGluZm8gICA9ICZjaWQtPmZvbnRfaW5mbzsKKyAgICBtZW1vcnkgPSBjaWRmYWNlLT5tZW1vcnk7CisKKyAgICAvKiByZWxlYXNlIHN1YnJzICovCisgICAgaWYgKCBmYWNlLT5zdWJycyApCisgICAgeworICAgICAgRlRfSW50ICBuOworCisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgY2lkLT5udW1fZGljdHM7IG4rKyApCisgICAgICB7CisgICAgICAgIENJRF9TdWJycyAgc3ViciA9IGZhY2UtPnN1YnJzICsgbjsKKworCisgICAgICAgIGlmICggc3Vici0+Y29kZSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9GUkVFKCBzdWJyLT5jb2RlWzBdICk7CisgICAgICAgICAgRlRfRlJFRSggc3Vici0+Y29kZSApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEZUX0ZSRUUoIGZhY2UtPnN1YnJzICk7CisgICAgfQorCisgICAgLyogcmVsZWFzZSBGb250SW5mbyBzdHJpbmdzICovCisgICAgRlRfRlJFRSggaW5mby0+dmVyc2lvbiApOworICAgIEZUX0ZSRUUoIGluZm8tPm5vdGljZSApOworICAgIEZUX0ZSRUUoIGluZm8tPmZ1bGxfbmFtZSApOworICAgIEZUX0ZSRUUoIGluZm8tPmZhbWlseV9uYW1lICk7CisgICAgRlRfRlJFRSggaW5mby0+d2VpZ2h0ICk7CisKKyAgICAvKiByZWxlYXNlIGZvbnQgZGljdGlvbmFyaWVzICovCisgICAgRlRfRlJFRSggY2lkLT5mb250X2RpY3RzICk7CisgICAgY2lkLT5udW1fZGljdHMgPSAwOworCisgICAgLyogcmVsZWFzZSBvdGhlciBzdHJpbmdzICovCisgICAgRlRfRlJFRSggY2lkLT5jaWRfZm9udF9uYW1lICk7CisgICAgRlRfRlJFRSggY2lkLT5yZWdpc3RyeSApOworICAgIEZUX0ZSRUUoIGNpZC0+b3JkZXJpbmcgKTsKKworICAgIGNpZGZhY2UtPmZhbWlseV9uYW1lID0gTlVMTDsKKyAgICBjaWRmYWNlLT5zdHlsZV9uYW1lICA9IE5VTEw7CisKKyAgICBGVF9GUkVFKCBmYWNlLT5iaW5hcnlfZGF0YSApOworICAgIEZUX0ZSRUUoIGZhY2UtPmNpZF9zdHJlYW0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2lkX2ZhY2VfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBDSUQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgc291cmNlIGZvbnQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIHRoZSByZXNvdXJjZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFyYW1zICAgICA6OiBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgbmV3bHkgYnVpbHQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2lkX2ZhY2VfaW5pdCggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBjaWRmYWNlLCAgICAgICAgLyogQ0lEX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIENJRF9GYWNlICAgICAgICAgIGZhY2UgPSAoQ0lEX0ZhY2UpY2lkZmFjZTsKKyAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsKKyAgICBQU0F1eF9TZXJ2aWNlICAgICBwc2F1eDsKKyAgICBQU0hpbnRlcl9TZXJ2aWNlICBwc2hpbnRlcjsKKworICAgIEZUX1VOVVNFRCggbnVtX3BhcmFtcyApOworICAgIEZUX1VOVVNFRCggcGFyYW1zICk7CisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKworCisgICAgY2lkZmFjZS0+bnVtX2ZhY2VzID0gMTsKKworICAgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisgICAgaWYgKCAhcHNhdXggKQorICAgIHsKKyAgICAgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgRlRfRkFDRV9MSUJSQVJZKCBmYWNlICksICJwc2F1eCIgKTsKKworICAgICAgaWYgKCAhcHNhdXggKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJjaWRfZmFjZV9pbml0OiBjYW5ub3QgYWNjZXNzIGBwc2F1eCcgbW9kdWxlXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX01vZHVsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGZhY2UtPnBzYXV4ID0gcHNhdXg7CisgICAgfQorCisgICAgcHNoaW50ZXIgPSAoUFNIaW50ZXJfU2VydmljZSlmYWNlLT5wc2hpbnRlcjsKKyAgICBpZiAoICFwc2hpbnRlciApCisgICAgeworICAgICAgcHNoaW50ZXIgPSAoUFNIaW50ZXJfU2VydmljZSlGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSgKKyAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0xJQlJBUlkoIGZhY2UgKSwgInBzaGludGVyIiApOworCisgICAgICBmYWNlLT5wc2hpbnRlciA9IHBzaGludGVyOworICAgIH0KKworICAgIEZUX1RSQUNFMigoICJDSUQgZHJpdmVyXG4iICkpOworCisgICAgLyogb3BlbiB0aGUgdG9rZW5pemVyOyB0aGlzIHdpbGwgYWxzbyBjaGVjayB0aGUgZm9udCBmb3JtYXQgKi8KKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCAwICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSBjaWRfZmFjZV9vcGVuKCBmYWNlLCBmYWNlX2luZGV4ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBpZiB3ZSBqdXN0IHdhbnRlZCB0byBjaGVjayB0aGUgZm9ybWF0LCBsZWF2ZSBzdWNjZXNzZnVsbHkgbm93ICovCisgICAgaWYgKCBmYWNlX2luZGV4IDwgMCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBjaGVjayB0aGUgZmFjZSBpbmRleCAqLworICAgIC8qIFhYWDogaGFuZGxlIENJRCBmb250cyB3aXRoIG1vcmUgdGhhbiBhIHNpbmdsZSBmYWNlICovCisgICAgaWYgKCBmYWNlX2luZGV4ICE9IDAgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggImNpZF9mYWNlX2luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBub3cgbG9hZCB0aGUgZm9udCBwcm9ncmFtIGludG8gdGhlIGZhY2Ugb2JqZWN0ICovCisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBmYWNlIG9iamVjdCBmaWVsZHMgKi8KKworICAgIC8qIHNldCB1cCByb290IGZhY2UgZmllbGRzICovCisgICAgeworICAgICAgQ0lEX0ZhY2VJbmZvICBjaWQgID0gJmZhY2UtPmNpZDsKKyAgICAgIFBTX0ZvbnRJbmZvICAgaW5mbyA9ICZjaWQtPmZvbnRfaW5mbzsKKworCisgICAgICBjaWRmYWNlLT5udW1fZ2x5cGhzICAgPSAoRlRfTG9uZyljaWQtPmNpZF9jb3VudDsKKyAgICAgIGNpZGZhY2UtPm51bV9jaGFybWFwcyA9IDA7CisKKyAgICAgIGNpZGZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworCisgICAgICBjaWRmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgIHwgLyogc2NhbGFibGUgb3V0bGluZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgfCAvKiBob3Jpem9udGFsIGRhdGEgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSElOVEVSOyAgICAgIC8qIGhhcyBuYXRpdmUgaGludGVyICovCisKKyAgICAgIGlmICggaW5mby0+aXNfZml4ZWRfcGl0Y2ggKQorICAgICAgICBjaWRmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKKworICAgICAgLyogWFhYOiBUT0RPOiBhZGQga2VybmluZyB3aXRoIC5hZm0gc3VwcG9ydCAqLworCisgICAgICAvKiBnZXQgc3R5bGUgbmFtZSAtLSBiZSBjYXJlZnVsLCBzb21lIGJyb2tlbiBmb250cyBvbmx5ICovCisgICAgICAvKiBoYXZlIGEgL0ZvbnROYW1lIGRpY3Rpb25hcnkgZW50cnkhICAgICAgICAgICAgICAgICAgICovCisgICAgICBjaWRmYWNlLT5mYW1pbHlfbmFtZSA9IGluZm8tPmZhbWlseV9uYW1lOworICAgICAgLyogYXNzdW1lICJSZWd1bGFyIiBzdHlsZSBpZiB3ZSBkb24ndCBrbm93IGJldHRlciAqLworICAgICAgY2lkZmFjZS0+c3R5bGVfbmFtZSA9IChjaGFyICopIlJlZ3VsYXIiOworICAgICAgaWYgKCBjaWRmYWNlLT5mYW1pbHlfbmFtZSApCisgICAgICB7CisgICAgICAgIGNoYXIqICBmdWxsICAgPSBpbmZvLT5mdWxsX25hbWU7CisgICAgICAgIGNoYXIqICBmYW1pbHkgPSBjaWRmYWNlLT5mYW1pbHlfbmFtZTsKKworCisgICAgICAgIGlmICggZnVsbCApCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoICpmdWxsICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICpmdWxsID09ICpmYW1pbHkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgICAgZnVsbCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoICpmdWxsID09ICcgJyB8fCAqZnVsbCA9PSAnLScgKQorICAgICAgICAgICAgICAgIGZ1bGwrKzsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoICpmYW1pbHkgPT0gJyAnIHx8ICpmYW1pbHkgPT0gJy0nICkKKyAgICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCAhKmZhbWlseSApCisgICAgICAgICAgICAgICAgICBjaWRmYWNlLT5zdHlsZV9uYW1lID0gZnVsbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBkbyB3ZSBoYXZlIGEgYC9Gb250TmFtZSc/ICovCisgICAgICAgIGlmICggY2lkLT5jaWRfZm9udF9uYW1lICkKKyAgICAgICAgICBjaWRmYWNlLT5mYW1pbHlfbmFtZSA9IGNpZC0+Y2lkX2ZvbnRfbmFtZTsKKyAgICAgIH0KKworICAgICAgLyogY29tcHV0ZSBzdHlsZSBmbGFncyAqLworICAgICAgY2lkZmFjZS0+c3R5bGVfZmxhZ3MgPSAwOworICAgICAgaWYgKCBpbmZvLT5pdGFsaWNfYW5nbGUgKQorICAgICAgICBjaWRmYWNlLT5zdHlsZV9mbGFncyB8PSBGVF9TVFlMRV9GTEFHX0lUQUxJQzsKKyAgICAgIGlmICggaW5mby0+d2VpZ2h0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhZnRfc3RyY21wKCBpbmZvLT53ZWlnaHQsICJCb2xkIiAgKSB8fAorICAgICAgICAgICAgICFmdF9zdHJjbXAoIGluZm8tPndlaWdodCwgIkJsYWNrIiApICkKKyAgICAgICAgICBjaWRmYWNlLT5zdHlsZV9mbGFncyB8PSBGVF9TVFlMRV9GTEFHX0JPTEQ7CisgICAgICB9CisKKyAgICAgIC8qIG5vIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0ICovCisgICAgICBjaWRmYWNlLT5udW1fZml4ZWRfc2l6ZXMgPSAwOworICAgICAgY2lkZmFjZS0+YXZhaWxhYmxlX3NpemVzID0gTlVMTDsKKworICAgICAgY2lkZmFjZS0+YmJveC54TWluID0gICBjaWQtPmZvbnRfYmJveC54TWluICAgICAgICAgICAgPj4gMTY7CisgICAgICBjaWRmYWNlLT5iYm94LnlNaW4gPSAgIGNpZC0+Zm9udF9iYm94LnlNaW4gICAgICAgICAgICA+PiAxNjsKKyAgICAgIC8qIG5vIGBVJyBzdWZmaXggaGVyZSB0byAweEZGRkYhICovCisgICAgICBjaWRmYWNlLT5iYm94LnhNYXggPSAoIGNpZC0+Zm9udF9iYm94LnhNYXggKyAweEZGRkYgKSA+PiAxNjsKKyAgICAgIGNpZGZhY2UtPmJib3gueU1heCA9ICggY2lkLT5mb250X2Jib3gueU1heCArIDB4RkZGRiApID4+IDE2OworCisgICAgICBpZiAoICFjaWRmYWNlLT51bml0c19wZXJfRU0gKQorICAgICAgICBjaWRmYWNlLT51bml0c19wZXJfRU0gPSAxMDAwOworCisgICAgICBjaWRmYWNlLT5hc2NlbmRlciAgPSAoRlRfU2hvcnQpKCBjaWRmYWNlLT5iYm94LnlNYXggKTsKKyAgICAgIGNpZGZhY2UtPmRlc2NlbmRlciA9IChGVF9TaG9ydCkoIGNpZGZhY2UtPmJib3gueU1pbiApOworCisgICAgICBjaWRmYWNlLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCAoIGNpZGZhY2UtPnVuaXRzX3Blcl9FTSAqIDEyICkgLyAxMCApOworICAgICAgaWYgKCBjaWRmYWNlLT5oZWlnaHQgPCBjaWRmYWNlLT5hc2NlbmRlciAtIGNpZGZhY2UtPmRlc2NlbmRlciApCisgICAgICAgIGNpZGZhY2UtPmhlaWdodCA9IChGVF9TaG9ydCkoIGNpZGZhY2UtPmFzY2VuZGVyIC0gY2lkZmFjZS0+ZGVzY2VuZGVyICk7CisKKyAgICAgIGNpZGZhY2UtPnVuZGVybGluZV9wb3NpdGlvbiAgPSAoRlRfU2hvcnQpaW5mby0+dW5kZXJsaW5lX3Bvc2l0aW9uOworICAgICAgY2lkZmFjZS0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IChGVF9TaG9ydClpbmZvLT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2lkX2RyaXZlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBDSUQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZHJpdmVyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2lkX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIGRyaXZlciApCisgIHsKKyAgICBGVF9VTlVTRUQoIGRyaXZlciApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2lkX2RyaXZlcl9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluYWxpemVzIGEgZ2l2ZW4gQ0lEIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZHJpdmVyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgQ0lEIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjaWRfZHJpdmVyX2RvbmUoIEZUX01vZHVsZSAgZHJpdmVyICkKKyAgeworICAgIEZUX1VOVVNFRCggZHJpdmVyICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZG9ianMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZG9ianMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA5NWNhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkb2Jqcy5oCkBAIC0wLDAgKzEsMTU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjaWRvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19DSURPQkpTX0hfXworI2RlZmluZSBfX0NJRE9CSlNfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIG11c3QgYmUgZGVmaW5lZCBieSB0aGUgaGludGVyICovCisgIHR5cGVkZWYgc3RydWN0IENJRF9TaXplX0hpbnRzXyAgIENJRF9TaXplX0hpbnRzOworICB0eXBlZGVmIHN0cnVjdCBDSURfR2x5cGhfSGludHNfICBDSURfR2x5cGhfSGludHM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDSURfRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IENJRF9Ecml2ZXJSZWNfKiAgQ0lEX0RyaXZlcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX1NpemVSZWNfKiAgQ0lEX1NpemU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDSURfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBnbHlwaCBzbG90IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IENJRF9HbHlwaFNsb3RSZWNfKiAgQ0lEX0dseXBoU2xvdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9DaGFyTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGNoYXJhY3RlciBtYXBwaW5nIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBUeXBlIDEgZm9ybWF0IGRvZXNuJ3QgdXNlIGEgY2hhcm1hcCBidXQgYW4gZW5jb2RpbmcgdGFibGUuICAgICAqLworICAvKiAgICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdXAgY2hhcm1hcCBvYmplY3RzICAgICAgICAgICAgKi8KKyAgLyogICAgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBDSURfQ2hhck1hcFJlY18qICBDSURfQ2hhck1hcDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSEVSRSBCRUdJTlMgVEhFIFRZUEUgMSBTUEVDSUZJQyBTVFVGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHR5cGVkZWYgc3RydWN0ICBDSURfU2l6ZVJlY18KKyAgeworICAgIEZUX1NpemVSZWMgIHJvb3Q7CisgICAgRlRfQm9vbCAgICAgdmFsaWQ7CisKKyAgfSBDSURfU2l6ZVJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBDSURfR2x5cGhTbG90UmVjXworICB7CisgICAgRlRfR2x5cGhTbG90UmVjICByb290OworCisgICAgRlRfQm9vbCAgICAgICAgICBoaW50OworICAgIEZUX0Jvb2wgICAgICAgICAgc2NhbGVkOworCisgICAgRlRfRml4ZWQgICAgICAgICB4X3NjYWxlOworICAgIEZUX0ZpeGVkICAgICAgICAgeV9zY2FsZTsKKworICB9IENJRF9HbHlwaFNsb3RSZWM7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNpZF9zbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNpZF9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjaWRfc2l6ZV9kb25lKCBGVF9TaXplICBzaXplICk7ICAgICAgIC8qIENJRF9TaXplICovCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2lkX3NpemVfaW5pdCggRlRfU2l6ZSAgc2l6ZSApOyAgICAgICAvKiBDSURfU2l6ZSAqLworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNpZF9zaXplX3JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwgICAgICAvKiBDSURfU2l6ZSAqLworICAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNpZF9mYWNlX2luaXQoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSwgICAgICAgICAgIC8qIENJRF9GYWNlICovCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2lkX2ZhY2VfZG9uZSggRlRfRmFjZSAgZmFjZSApOyAgICAgICAgICAgICAgIC8qIENJRF9GYWNlICovCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjaWRfZHJpdmVyX2luaXQoIEZUX01vZHVsZSAgZHJpdmVyICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjaWRfZHJpdmVyX2RvbmUoIEZUX01vZHVsZSAgZHJpdmVyICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19DSURPQkpTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkcGFyc2UuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3Njk0OQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHBhcnNlLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNpZHBhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDSUQta2V5ZWQgVHlwZTEgcGFyc2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisKKyNpbmNsdWRlICJjaWRwYXJzZS5oIgorCisjaW5jbHVkZSAiY2lkZXJycy5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2lkcGFyc2UKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIElOUFVUIFNUUkVBTSBQQVJTRVIgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2lkX3BhcnNlcl9uZXcoIENJRF9QYXJzZXIqICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBGVF9VTG9uZyAgYmFzZV9vZmZzZXQsIG9mZnNldCwgcHNfbGVuOworICAgIEZUX0J5dGUgICAqY3VyLCAqbGltaXQ7CisgICAgRlRfQnl0ZSAgICphcmcxLCAqYXJnMjsKKworCisgICAgRlRfTUVNX1pFUk8oIHBhcnNlciwgc2l6ZW9mICggKnBhcnNlciApICk7CisgICAgcHNhdXgtPnBzX3BhcnNlcl9mdW5jcy0+aW5pdCggJnBhcnNlci0+cm9vdCwgMCwgMCwgbWVtb3J5ICk7CisKKyAgICBwYXJzZXItPnN0cmVhbSA9IHN0cmVhbTsKKworICAgIGJhc2Vfb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpOworCisgICAgLyogZmlyc3Qgb2YgYWxsLCBjaGVjayB0aGUgZm9udCBmb3JtYXQgaW4gdGhlIGhlYWRlciAqLworICAgIGlmICggRlRfRlJBTUVfRU5URVIoIDMxICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBmdF9zdHJuY21wKCAoY2hhciAqKXN0cmVhbS0+Y3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgIiUhUFMtQWRvYmUtMy4wIFJlc291cmNlLUNJREZvbnQiLCAzMSApICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiICBub3QgYSBDSUQta2V5ZWQgZm9udFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgQWdhaW46CisgICAgLyogbm93LCByZWFkIHRoZSByZXN0IG9mIHRoZSBmaWxlIHVudGlsIHdlIGZpbmQgKi8KKyAgICAvKiBgU3RhcnREYXRhJyBvciBgL3NmbnRzJyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHsKKyAgICAgIEZUX0J5dGUgICBidWZmZXJbMjU2ICsgMTBdOworICAgICAgRlRfVUxvbmcgIHJlYWRfbGVuID0gMjU2ICsgMTA7CisgICAgICBGVF9CeXRlKiAgcCAgICAgICAgPSBidWZmZXI7CisKKworICAgICAgZm9yICggb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpOyA7IG9mZnNldCArPSAyNTYgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgc3RyZWFtX2xlbjsKKworCisgICAgICAgIHN0cmVhbV9sZW4gPSBzdHJlYW0tPnNpemUgLSBGVF9TVFJFQU1fUE9TKCk7CisgICAgICAgIGlmICggc3RyZWFtX2xlbiA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFMigoICJjaWRfcGFyc2VyX25ldzogbm8gYFN0YXJ0RGF0YScga2V5d29yZCBmb3VuZFxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgcmVhZF9sZW4gPSBGVF9NSU4oIHJlYWRfbGVuLCBzdHJlYW1fbGVuICk7CisgICAgICAgIGlmICggRlRfU1RSRUFNX1JFQUQoIHAsIHJlYWRfbGVuICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBpZiAoIHJlYWRfbGVuIDwgMjU2ICkKKyAgICAgICAgICBwW3JlYWRfbGVuXSAgPSAnXDAnOworCisgICAgICAgIGxpbWl0ID0gcCArIHJlYWRfbGVuIC0gMTA7CisKKyAgICAgICAgZm9yICggcCA9IGJ1ZmZlcjsgcCA8IGxpbWl0OyBwKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBwWzBdID09ICdTJyAmJiBmdF9zdHJuY21wKCAoY2hhciopcCwgIlN0YXJ0RGF0YSIsIDkgKSA9PSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBzYXZlIG9mZnNldCBvZiBiaW5hcnkgZGF0YSBhZnRlciBgU3RhcnREYXRhJyAqLworICAgICAgICAgICAgb2Zmc2V0ICs9IChGVF9VTG9uZykoIHAgLSBidWZmZXIgKyAxMCApOworICAgICAgICAgICAgZ290byBGb3VuZDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIHBbMV0gPT0gJ3MnICYmIGZ0X3N0cm5jbXAoIChjaGFyKilwLCAiL3NmbnRzIiwgNiApID09IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCArPSAoRlRfVUxvbmcpKCBwIC0gYnVmZmVyICsgNyApOworICAgICAgICAgICAgZ290byBGb3VuZDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGVF9NRU1fTU9WRSggYnVmZmVyLCBwLCAxMCApOworICAgICAgICByZWFkX2xlbiA9IDI1NjsKKyAgICAgICAgcCA9IGJ1ZmZlciArIDEwOworICAgICAgfQorICAgIH0KKworICBGb3VuZDoKKyAgICAvKiBXZSBoYXZlIGZvdW5kIHRoZSBzdGFydCBvZiB0aGUgYmluYXJ5IGRhdGEgb3IgdGhlIGAvc2ZudHMnIHRva2VuLiAqLworICAgIC8qIE5vdyByZXdpbmQgYW5kIGV4dHJhY3QgdGhlIGZyYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQb3N0U2NyaXB0ICovCisgICAgLyogc2VjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHBzX2xlbiA9IG9mZnNldCAtIGJhc2Vfb2Zmc2V0OworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGJhc2Vfb2Zmc2V0ICkgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgRlRfRlJBTUVfRVhUUkFDVCggcHNfbGVuLCBwYXJzZXItPnBvc3RzY3JpcHQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBwYXJzZXItPmRhdGFfb2Zmc2V0ICAgID0gb2Zmc2V0OworICAgIHBhcnNlci0+cG9zdHNjcmlwdF9sZW4gPSBwc19sZW47CisgICAgcGFyc2VyLT5yb290LmJhc2UgICAgICA9IHBhcnNlci0+cG9zdHNjcmlwdDsKKyAgICBwYXJzZXItPnJvb3QuY3Vyc29yICAgID0gcGFyc2VyLT5wb3N0c2NyaXB0OworICAgIHBhcnNlci0+cm9vdC5saW1pdCAgICAgPSBwYXJzZXItPnJvb3QuY3Vyc29yICsgcHNfbGVuOworICAgIHBhcnNlci0+bnVtX2RpY3QgICAgICAgPSAtMTsKKworICAgIC8qIEZpbmFsbHksIHdlIGNoZWNrIHdoZXRoZXIgYFN0YXJ0RGF0YScgb3IgYC9zZm50cycgd2FzIHJlYWwgLS0gICovCisgICAgLyogaXQgY291bGQgYmUgaW4gYSBjb21tZW50IG9yIHN0cmluZy4gIFdlIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMgKi8KKyAgICAvKiBvZiBgU3RhcnREYXRhJyB0byBmaW5kIG91dCB3aGV0aGVyIHRoZSBkYXRhIGlzIHJlcHJlc2VudGVkIGluICAqLworICAgIC8qIGJpbmFyeSBvciBoZXggZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBhcmcxID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICBjaWRfcGFyc2VyX3NraXBfUFNfdG9rZW4oIHBhcnNlciApOworICAgIGNpZF9wYXJzZXJfc2tpcF9zcGFjZXMgICggcGFyc2VyICk7CisgICAgYXJnMiA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisgICAgY2lkX3BhcnNlcl9za2lwX1BTX3Rva2VuKCBwYXJzZXIgKTsKKyAgICBjaWRfcGFyc2VyX3NraXBfc3BhY2VzICAoIHBhcnNlciApOworCisgICAgbGltaXQgPSBwYXJzZXItPnJvb3QubGltaXQ7CisgICAgY3VyICAgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworCisgICAgd2hpbGUgKCBjdXIgPCBsaW1pdCApCisgICAgeworICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgeworICAgICAgICBlcnJvciA9IHBhcnNlci0+cm9vdC5lcnJvcjsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIGN1clswXSA9PSAnUycgJiYgZnRfc3RybmNtcCggKGNoYXIqKWN1ciwgIlN0YXJ0RGF0YSIsIDkgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBmdF9zdHJuY21wKCAoY2hhciopYXJnMSwgIihIZXgpIiwgNSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTG9uZyAgdG1wID0gZnRfYXRvbCggKGNvbnN0IGNoYXIgKilhcmcyICk7CisKKworICAgICAgICAgIGlmICggdG1wIDwgMCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAiY2lkX3BhcnNlcl9uZXc6IGludmFsaWQgbGVuZ3RoIG9mIGhleCBkYXRhXG4iICkpOworICAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJzZXItPmJpbmFyeV9sZW5ndGggPSAoRlRfVUxvbmcpdG1wOworICAgICAgICB9CisKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGN1clsxXSA9PSAncycgJiYgZnRfc3RybmNtcCggKGNoYXIqKWN1ciwgIi9zZm50cyIsIDYgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggImNpZF9wYXJzZXJfbmV3OiBjYW5ub3QgaGFuZGxlIFR5cGUgMTEgZm9udHNcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBjaWRfcGFyc2VyX3NraXBfUFNfdG9rZW4oIHBhcnNlciApOworICAgICAgY2lkX3BhcnNlcl9za2lwX3NwYWNlcyAgKCBwYXJzZXIgKTsKKyAgICAgIGFyZzEgPSBhcmcyOworICAgICAgYXJnMiA9IGN1cjsKKyAgICAgIGN1ciAgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgIH0KKworICAgIC8qIHdlIGhhdmVuJ3QgZm91bmQgdGhlIGNvcnJlY3QgYFN0YXJ0RGF0YSc7IGdvIGJhY2sgYW5kIGNvbnRpbnVlICovCisgICAgLyogc2VhcmNoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBwYXJzZXItPnBvc3RzY3JpcHQgKTsKKyAgICBpZiAoICFGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgKQorICAgICAgZ290byBBZ2FpbjsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2lkX3BhcnNlcl9kb25lKCBDSURfUGFyc2VyKiAgcGFyc2VyICkKKyAgeworICAgIC8qIGFsd2F5cyBmcmVlIHRoZSBwcml2YXRlIGRpY3Rpb25hcnkgKi8KKyAgICBpZiAoIHBhcnNlci0+cG9zdHNjcmlwdCApCisgICAgeworICAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBwYXJzZXItPnN0cmVhbTsKKworCisgICAgICBGVF9GUkFNRV9SRUxFQVNFKCBwYXJzZXItPnBvc3RzY3JpcHQgKTsKKyAgICB9CisgICAgcGFyc2VyLT5yb290LmZ1bmNzLmRvbmUoICZwYXJzZXItPnJvb3QgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkcGFyc2UuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4MWJiNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHBhcnNlLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNpZHBhcnNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBDSUQta2V5ZWQgVHlwZTEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NJRFBBUlNFX0hfXworI2RlZmluZSBfX0NJRFBBUlNFX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENJRF9QYXJzZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgQ0lEX1BhcnNlciBpcyBhbiBvYmplY3QgdXNlZCB0byBwYXJzZSBhIFR5cGUgMSBmb250cyB2ZXJ5ICAgICAgICAqLworICAvKiAgICBxdWlja2x5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICByb290ICAgICAgICAgICA6OiBUaGUgcm9vdCBQU19QYXJzZXJSZWMgZmllbGRzLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgICAgICAgIDo6IFRoZSBjdXJyZW50IGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zdHNjcmlwdCAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb3N0c2NyaXB0X2xlbiA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRhdGFfb2Zmc2V0ICAgIDo6IFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgYmluYXJ5IGRhdGEgKGkuZS4sIHRoZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgcGFyc2VkLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpbmFyeV9sZW5ndGggIDo6IFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWZ0ZXIgdGhlIGBTdGFydERhdGEnICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGlmIHRoZSBkYXRhIGZvcm1hdCBpcyBoZXhhZGVjaW1hbC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNpZCAgICAgICAgICAgIDo6IEEgc3RydWN0dXJlIHdoaWNoIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9kaWN0ICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZm9udCBkaWN0aW9uYXJpZXMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENJRF9QYXJzZXJfCisgIHsKKyAgICBQU19QYXJzZXJSZWMgIHJvb3Q7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW07CisKKyAgICBGVF9CeXRlKiAgICAgIHBvc3RzY3JpcHQ7CisgICAgRlRfVUxvbmcgICAgICBwb3N0c2NyaXB0X2xlbjsKKworICAgIEZUX1VMb25nICAgICAgZGF0YV9vZmZzZXQ7CisKKyAgICBGVF9VTG9uZyAgICAgIGJpbmFyeV9sZW5ndGg7CisKKyAgICBDSURfRmFjZUluZm8gIGNpZDsKKyAgICBGVF9JbnQgICAgICAgIG51bV9kaWN0OworCisgIH0gQ0lEX1BhcnNlcjsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNpZF9wYXJzZXJfbmV3KCBDSURfUGFyc2VyKiAgICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2lkX3BhcnNlcl9kb25lKCBDSURfUGFyc2VyKiAgcGFyc2VyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBUlNJTkcgUk9VVElORVMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgY2lkX3BhcnNlcl9za2lwX3NwYWNlcyggcCApICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnNraXBfc3BhY2VzKCAmKHApLT5yb290ICkKKyNkZWZpbmUgY2lkX3BhcnNlcl9za2lwX1BTX3Rva2VuKCBwICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3Muc2tpcF9QU190b2tlbiggJihwKS0+cm9vdCApCisKKyNkZWZpbmUgY2lkX3BhcnNlcl90b19pbnQoIHAgKSAgICAgICAocCktPnJvb3QuZnVuY3MudG9faW50KCAmKHApLT5yb290ICkKKyNkZWZpbmUgY2lkX3BhcnNlcl90b19maXhlZCggcCwgdCApICAocCktPnJvb3QuZnVuY3MudG9fZml4ZWQoICYocCktPnJvb3QsIHQgKQorCisjZGVmaW5lIGNpZF9wYXJzZXJfdG9fY29vcmRfYXJyYXkoIHAsIG0sIGMgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy50b19jb29yZF9hcnJheSggJihwKS0+cm9vdCwgbSwgYyApCisjZGVmaW5lIGNpZF9wYXJzZXJfdG9fZml4ZWRfYXJyYXkoIHAsIG0sIGYsIHQgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy50b19maXhlZF9hcnJheSggJihwKS0+cm9vdCwgbSwgZiwgdCApCisjZGVmaW5lIGNpZF9wYXJzZXJfdG9fdG9rZW4oIHAsIHQgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy50b190b2tlbiggJihwKS0+cm9vdCwgdCApCisjZGVmaW5lIGNpZF9wYXJzZXJfdG9fdG9rZW5fYXJyYXkoIHAsIHQsIG0sIGMgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy50b190b2tlbl9hcnJheSggJihwKS0+cm9vdCwgdCwgbSwgYyApCisKKyNkZWZpbmUgY2lkX3BhcnNlcl9sb2FkX2ZpZWxkKCBwLCBmLCBvICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3MubG9hZF9maWVsZCggJihwKS0+cm9vdCwgZiwgbywgMCwgMCApCisjZGVmaW5lIGNpZF9wYXJzZXJfbG9hZF9maWVsZF90YWJsZSggcCwgZiwgbyApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLmxvYWRfZmllbGRfdGFibGUoICYocCktPnJvb3QsIGYsIG8sIDAsIDAgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fQ0lEUEFSU0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRyaXZlci5jIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M0Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvY2lkcml2ZXIuYwpAQCAtMCwwICsxLDIzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2lkcml2ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIENJRCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJjaWRyaXZlci5oIgorI2luY2x1ZGUgImNpZGdsb2FkLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlICJjaWRlcnJzLmgiCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAorI2luY2x1ZGUgRlRfU0VSVklDRV9DSURfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2lkZHJpdmVyCisKKworICAvKgorICAgKiAgUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IGNoYXIqCisgIGNpZF9nZXRfcG9zdHNjcmlwdF9uYW1lKCBDSURfRmFjZSAgZmFjZSApCisgIHsKKyAgICBjb25zdCBjaGFyKiAgcmVzdWx0ID0gZmFjZS0+Y2lkLmNpZF9mb250X25hbWU7CisKKworICAgIGlmICggcmVzdWx0ICYmIHJlc3VsdFswXSA9PSAnLycgKQorICAgICAgcmVzdWx0Kys7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjICBjaWRfc2VydmljZV9wc19uYW1lID0KKyAgeworICAgIChGVF9Qc05hbWVfR2V0RnVuYykgY2lkX2dldF9wb3N0c2NyaXB0X25hbWUKKyAgfTsKKworCisgIC8qCisgICAqICBQT1NUU0NSSVBUIElORk8gU0VSVklDRQorICAgKgorICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX3BzX2dldF9mb250X2luZm8oIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTX0ZvbnRJbmZvUmVjKiAgYWZvbnRfaW5mbyApCisgIHsKKyAgICAqYWZvbnRfaW5mbyA9ICgoQ0lEX0ZhY2UpZmFjZSktPmNpZC5mb250X2luZm87CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNpZF9wc19nZXRfZm9udF9leHRyYSggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNfRm9udEV4dHJhUmVjKiAgYWZvbnRfZXh0cmEgKQorICB7CisgICAgKmFmb250X2V4dHJhID0gKChDSURfRmFjZSlmYWNlKS0+Zm9udF9leHRyYTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9Qc0luZm9SZWMgIGNpZF9zZXJ2aWNlX3BzX2luZm8gPQorICB7CisgICAgKFBTX0dldEZvbnRJbmZvRnVuYykgICBjaWRfcHNfZ2V0X2ZvbnRfaW5mbywKKyAgICAoUFNfR2V0Rm9udEV4dHJhRnVuYykgIGNpZF9wc19nZXRfZm9udF9leHRyYSwKKyAgICAoUFNfSGFzR2x5cGhOYW1lc0Z1bmMpIE5VTEwsICAgICAgICAvKiB1bnN1cHBvcnRlZCB3aXRoIENJRCBmb250cyAqLworICAgIChQU19HZXRGb250UHJpdmF0ZUZ1bmMpTlVMTCwgICAgICAgIC8qIHVuc3VwcG9ydGVkICAgICAgICAgICAgICAgICovCisgICAgKFBTX0dldEZvbnRWYWx1ZUZ1bmMpICBOVUxMICAgICAgICAgLyogbm90IGltcGxlbWVudGVkICAgICAgICAgICAgKi8KKyAgfTsKKworCisgIC8qCisgICAqICBDSUQgSU5GTyBTRVJWSUNFCisgICAqCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX2dldF9yb3MoIENJRF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqcmVnaXN0cnksCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKm9yZGVyaW5nLAorICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpzdXBwbGVtZW50ICkKKyAgeworICAgIENJRF9GYWNlSW5mbyAgY2lkID0gJmZhY2UtPmNpZDsKKworCisgICAgaWYgKCByZWdpc3RyeSApCisgICAgICAqcmVnaXN0cnkgPSBjaWQtPnJlZ2lzdHJ5OworCisgICAgaWYgKCBvcmRlcmluZyApCisgICAgICAqb3JkZXJpbmcgPSBjaWQtPm9yZGVyaW5nOworCisgICAgaWYgKCBzdXBwbGVtZW50ICkKKyAgICAgICpzdXBwbGVtZW50ID0gY2lkLT5zdXBwbGVtZW50OworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNpZF9nZXRfaXNfY2lkKCBDSURfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICppc19jaWQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisKKyAgICBpZiAoIGlzX2NpZCApCisgICAgICAqaXNfY2lkID0gMTsgLyogY2lkIGRyaXZlciBpcyBvbmx5IHVzZWQgZm9yIENJRCBrZXllZCBmb250cyAqLworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY2lkX2dldF9jaWRfZnJvbV9nbHlwaF9pbmRleCggQ0lEX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmNpZCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfVU5VU0VEKCBmYWNlICk7CisKKworICAgIGlmICggY2lkICkKKyAgICAgICpjaWQgPSBnbHlwaF9pbmRleDsgLyogaWRlbnRpdHkgbWFwcGluZyAqLworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9DSURSZWMgIGNpZF9zZXJ2aWNlX2NpZF9pbmZvID0KKyAgeworICAgICAoRlRfQ0lEX0dldFJlZ2lzdHJ5T3JkZXJpbmdTdXBwbGVtZW50RnVuYyljaWRfZ2V0X3JvcywKKyAgICAgKEZUX0NJRF9HZXRJc0ludGVybmFsbHlDSURLZXllZEZ1bmMpICAgICAgY2lkX2dldF9pc19jaWQsCisgICAgIChGVF9DSURfR2V0Q0lERnJvbUdseXBoSW5kZXhGdW5jKSAgICAgICAgIGNpZF9nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgKKyAgfTsKKworCisgIC8qCisgICAqICBTRVJWSUNFIExJU1QKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICBjaWRfc2VydmljZXNbXSA9CisgIHsKKyAgICB7IEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NJRCB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJmNpZF9zZXJ2aWNlX3BzX25hbWUgfSwKKyAgICB7IEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZjaWRfc2VydmljZV9wc19pbmZvIH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmY2lkX3NlcnZpY2VfY2lkX2luZm8gfSwKKyAgICB7IE5VTEwsIE5VTEwgfQorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Nb2R1bGVfSW50ZXJmYWNlICkKKyAgY2lkX2dldF9pbnRlcmZhY2UoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgY2lkX2ludGVyZmFjZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIGNpZF9zZXJ2aWNlcywgY2lkX2ludGVyZmFjZSApOworICB9CisKKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIHQxY2lkX2RyaXZlcl9jbGFzcyA9CisgIHsKKyAgICAvKiBmaXJzdCBvZiBhbGwsIHRoZSBGVF9Nb2R1bGVfQ2xhc3MgZmllbGRzICovCisgICAgeworICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgICB8CisgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIsCisKKyAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorICAgICAgInQxY2lkIiwgICAvKiBtb2R1bGUgbmFtZSAgICAgICAgICAgKi8KKyAgICAgIDB4MTAwMDBMLCAgLyogdmVyc2lvbiAxLjAgb2YgZHJpdmVyICovCisgICAgICAweDIwMDAwTCwgIC8qIHJlcXVpcmVzIEZyZWVUeXBlIDIuMCAqLworCisgICAgICAwLAorCisgICAgICBjaWRfZHJpdmVyX2luaXQsCisgICAgICBjaWRfZHJpdmVyX2RvbmUsCisgICAgICBjaWRfZ2V0X2ludGVyZmFjZQorICAgIH0sCisKKyAgICAvKiB0aGVuIHRoZSBvdGhlciBmb250IGRyaXZlcnMgZmllbGRzICovCisgICAgc2l6ZW9mICggQ0lEX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBDSURfU2l6ZVJlYyApLAorICAgIHNpemVvZiAoIENJRF9HbHlwaFNsb3RSZWMgKSwKKworICAgIGNpZF9mYWNlX2luaXQsCisgICAgY2lkX2ZhY2VfZG9uZSwKKworICAgIGNpZF9zaXplX2luaXQsCisgICAgY2lkX3NpemVfZG9uZSwKKyAgICBjaWRfc2xvdF9pbml0LAorICAgIGNpZF9zbG90X2RvbmUsCisKKyAgICBjaWRfc2xvdF9sb2FkX2dseXBoLAorCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogRlRfRmFjZV9HZXRLZXJuaW5nRnVuYyAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0F0dGFjaEZ1bmMgICAgICAqLworCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogRlRfRmFjZV9HZXRBZHZhbmNlc0Z1bmMgKi8KKworICAgIGNpZF9zaXplX3JlcXVlc3QsCisgICAgMCAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfU2l6ZV9TZWxlY3RGdW5jICAgICAgKi8KKyAgfTsKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHJpdmVyLmggYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Yjg2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWRyaXZlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGNpZHJpdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIaWdoLWxldmVsIENJRCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0NJRFJJVkVSX0hfXworI2RlZmluZSBfX0NJRFJJVkVSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUKKyAgY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICB0MWNpZF9kcml2ZXJfY2xhc3M7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19DSURSSVZFUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL2NpZHRva2VuLmggYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWR0b2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZWFlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9jaWR0b2tlbi5oCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjaWR0b2tlbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ0lEIHRva2VuIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgQ0lEX0ZhY2VJbmZvUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0NJRF9JTkZPCisKKyAgVDFfRklFTERfS0VZICAgKCAiQ0lERm9udE5hbWUiLCAgICBjaWRfZm9udF9uYW1lLCAwICkKKyAgVDFfRklFTERfRklYRUQgKCAiQ0lERm9udFZlcnNpb24iLCBjaWRfdmVyc2lvbiwgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiQ0lERm9udFR5cGUiLCAgICBjaWRfZm9udF90eXBlLCAwICkKKyAgVDFfRklFTERfU1RSSU5HKCAiUmVnaXN0cnkiLCAgICAgICByZWdpc3RyeSwgICAgICAwICkKKyAgVDFfRklFTERfU1RSSU5HKCAiT3JkZXJpbmciLCAgICAgICBvcmRlcmluZywgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiU3VwcGxlbWVudCIsICAgICBzdXBwbGVtZW50LCAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiVUlEQmFzZSIsICAgICAgICB1aWRfYmFzZSwgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiQ0lETWFwT2Zmc2V0IiwgICBjaWRtYXBfb2Zmc2V0LCAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiRkRCeXRlcyIsICAgICAgICBmZF9ieXRlcywgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiR0RCeXRlcyIsICAgICAgICBnZF9ieXRlcywgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiQ0lEQ291bnQiLCAgICAgICBjaWRfY291bnQsICAgICAwICkKKworCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBTX0ZvbnRJbmZvUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfSU5GTworCisgIFQxX0ZJRUxEX1NUUklORyggInZlcnNpb24iLCAgICAgICAgICAgIHZlcnNpb24sICAgICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9TVFJJTkcoICJOb3RpY2UiLCAgICAgICAgICAgICBub3RpY2UsICAgICAgICAgICAgICAwICkKKyAgVDFfRklFTERfU1RSSU5HKCAiRnVsbE5hbWUiLCAgICAgICAgICAgZnVsbF9uYW1lLCAgICAgICAgICAgMCApCisgIFQxX0ZJRUxEX1NUUklORyggIkZhbWlseU5hbWUiLCAgICAgICAgIGZhbWlseV9uYW1lLCAgICAgICAgIDAgKQorICBUMV9GSUVMRF9TVFJJTkcoICJXZWlnaHQiLCAgICAgICAgICAgICB3ZWlnaHQsICAgICAgICAgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiSXRhbGljQW5nbGUiLCAgICAgICAgaXRhbGljX2FuZ2xlLCAgICAgICAgMCApCisgIFQxX0ZJRUxEX0JPT0wgICggImlzRml4ZWRQaXRjaCIsICAgICAgIGlzX2ZpeGVkX3BpdGNoLCAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICAoICJVbmRlcmxpbmVQb3NpdGlvbiIsICB1bmRlcmxpbmVfcG9zaXRpb24sICAwICkKKyAgVDFfRklFTERfTlVNICAgKCAiVW5kZXJsaW5lVGhpY2tuZXNzIiwgdW5kZXJsaW5lX3RoaWNrbmVzcywgMCApCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgUFNfRm9udEV4dHJhUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkEKKworICBUMV9GSUVMRF9OVU0gICAoICJGU1R5cGUiLCAgICAgICAgICAgICBmc190eXBlLCAgICAgICAgICAgICAwICkKKworCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIENJRF9GYWNlRGljdFJlYworI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0RJQ1QKKworICBUMV9GSUVMRF9OVU0gICggIlBhaW50VHlwZSIsICAgICAgICAgIHBhaW50X3R5cGUsICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICggIkZvbnRUeXBlIiwgICAgICAgICAgIGZvbnRfdHlwZSwgICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICggIlN1YnJNYXBPZmZzZXQiLCAgICAgIHN1YnJtYXBfb2Zmc2V0LCAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICggIlNEQnl0ZXMiLCAgICAgICAgICAgIHNkX2J5dGVzLCAgICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICggIlN1YnJDb3VudCIsICAgICAgICAgIG51bV9zdWJycywgICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICggImxlbkJ1aWxkQ2hhckFycmF5IiwgIGxlbl9idWlsZGNoYXIsICAgICAgIDAgKQorICBUMV9GSUVMRF9GSVhFRCggIkZvcmNlQm9sZFRocmVzaG9sZCIsIGZvcmNlYm9sZF90aHJlc2hvbGQsIDAgKQorICBUMV9GSUVMRF9GSVhFRCggIlN0cm9rZVdpZHRoIiwgICAgICAgIHN0cm9rZV93aWR0aCwgICAgICAgIDAgKQorCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgUFNfUHJpdmF0ZVJlYworI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9QUklWQVRFCisKKyAgVDFfRklFTERfTlVNICAgICAgICggIlVuaXF1ZUlEIiwgICAgICAgICB1bmlxdWVfaWQsICAgICAgMCApCisgIFQxX0ZJRUxEX05VTSAgICAgICAoICJsZW5JViIsICAgICAgICAgICAgbGVuSVYsICAgICAgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICAgICAgKCAiTGFuZ3VhZ2VHcm91cCIsICAgIGxhbmd1YWdlX2dyb3VwLCAwICkKKyAgVDFfRklFTERfTlVNICAgICAgICggInBhc3N3b3JkIiwgICAgICAgICBwYXNzd29yZCwgICAgICAgMCApCisKKyAgVDFfRklFTERfRklYRURfMTAwMCggIkJsdWVTY2FsZSIsICAgICAgICBibHVlX3NjYWxlLCAgICAgMCApCisgIFQxX0ZJRUxEX05VTSAgICAgICAoICJCbHVlU2hpZnQiLCAgICAgICAgYmx1ZV9zaGlmdCwgICAgIDAgKQorICBUMV9GSUVMRF9OVU0gICAgICAgKCAiQmx1ZUZ1enoiLCAgICAgICAgIGJsdWVfZnV6eiwgICAgICAwICkKKworICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiQmx1ZVZhbHVlcyIsICAgICAgIGJsdWVfdmFsdWVzLCAgICAgICAgMTQsIDAgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiT3RoZXJCbHVlcyIsICAgICAgIG90aGVyX2JsdWVzLCAgICAgICAgMTAsIDAgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiRmFtaWx5Qmx1ZXMiLCAgICAgIGZhbWlseV9ibHVlcywgICAgICAgMTQsIDAgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiRmFtaWx5T3RoZXJCbHVlcyIsIGZhbWlseV9vdGhlcl9ibHVlcywgMTAsIDAgKQorCisgIFQxX0ZJRUxEX05VTV9UQUJMRTIoICJTdGRIVyIsICAgICAgICAgICAgc3RhbmRhcmRfd2lkdGgsICAgICAgMSwgMCApCisgIFQxX0ZJRUxEX05VTV9UQUJMRTIoICJTdGRWVyIsICAgICAgICAgICAgc3RhbmRhcmRfaGVpZ2h0LCAgICAgMSwgMCApCisgIFQxX0ZJRUxEX05VTV9UQUJMRTIoICJNaW5GZWF0dXJlIiwgICAgICAgbWluX2ZlYXR1cmUsICAgICAgICAgMiwgMCApCisKKyAgVDFfRklFTERfTlVNX1RBQkxFICggIlN0ZW1TbmFwSCIsICAgICAgICBzbmFwX3dpZHRocywgICAgICAgIDEyLCAwICkKKyAgVDFfRklFTERfTlVNX1RBQkxFICggIlN0ZW1TbmFwViIsICAgICAgICBzbmFwX2hlaWdodHMsICAgICAgIDEyLCAwICkKKworICBUMV9GSUVMRF9CT09MICAgICAgKCAiRm9yY2VCb2xkIiwgICAgICAgIGZvcmNlX2JvbGQsICAgICAgICAgIDAgKQorCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgRlRfQkJveAorI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9CQk9YCisKKyAgVDFfRklFTERfQkJPWCggIkZvbnRCQm94IiwgeE1pbiwgMCApCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2NpZC9tb2R1bGUubWsgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxMmEzYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgQ0lEIG1vZHVsZSBkZWZpbml0aW9uCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitGVE1PRFVMRV9IX0NPTU1BTkRTICs9IFRZUEUxQ0lEX0RSSVZFUgorCitkZWZpbmUgVFlQRTFDSURfRFJJVkVSCiskKE9QRU5fRFJJVkVSKSBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHQxY2lkX2RyaXZlcl9jbGFzcyAkKENMT1NFX0RSSVZFUikKKyQoRUNIT19EUklWRVIpY2lkICAgICAgICQoRUNIT19EUklWRVJfREVTQylQb3N0c2NyaXB0IENJRC1rZXllZCBmb250cywgbm8ga25vd24gZXh0ZW5zaW9uJChFQ0hPX0RSSVZFUl9ET05FKQorZW5kZWYKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9jaWQvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL3J1bGVzLm1rCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgRnJlZVR5cGUgMiBDSUQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgQ0lEIGRyaXZlciBkaXJlY3RvcnkKKyMKK0NJRF9ESVIgOj0gJChTUkNfRElSKS9jaWQKKworCitDSURfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoQ0lEX0RJUikpIFwKKyAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkKEZUX0NGTEFHUykKKworCisjIENJRCBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK0NJRF9EUlZfU1JDIDo9ICQoQ0lEX0RJUikvY2lkcGFyc2UuYyBcCisgICAgICAgICAgICAgICAkKENJRF9ESVIpL2NpZGxvYWQuYyAgXAorICAgICAgICAgICAgICAgJChDSURfRElSKS9jaWRyaXZlci5jIFwKKyAgICAgICAgICAgICAgICQoQ0lEX0RJUikvY2lkZ2xvYWQuYyBcCisgICAgICAgICAgICAgICAkKENJRF9ESVIpL2NpZG9ianMuYworCisjIENJRCBkcml2ZXIgaGVhZGVycworIworQ0lEX0RSVl9IIDo9ICQoQ0lEX0RSVl9TUkM6JS5jPSUuaCkgXAorICAgICAgICAgICAgICQoQ0lEX0RJUikvY2lkdG9rZW4uaCAgXAorICAgICAgICAgICAgICQoQ0lEX0RJUikvY2lkZXJycy5oCisKKworIyBDSUQgZHJpdmVyIG9iamVjdChzKQorIworIyAgIENJRF9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMKKyMgICBDSURfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcworIworQ0lEX0RSVl9PQkpfTSA6PSAkKENJRF9EUlZfU1JDOiQoQ0lEX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK0NJRF9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS90eXBlMWNpZC4kTworCisjIENJRCBkcml2ZXIgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworQ0lEX0RSVl9TUkNfUyA6PSAkKENJRF9ESVIpL3R5cGUxY2lkLmMKKworCisjIENJRCBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKENJRF9EUlZfT0JKX1MpOiAkKENJRF9EUlZfU1JDX1MpICQoQ0lEX0RSVl9TUkMpICQoRlJFRVRZUEVfSCkgJChDSURfRFJWX0gpCisJJChDSURfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoQ0lEX0RSVl9TUkNfUykpCisKKworIyBDSUQgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKENJRF9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoQ0lEX0RSVl9IKQorCSQoQ0lEX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChDSURfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKENJRF9EUlZfT0JKX00pCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvY2lkL3R5cGUxY2lkLmMgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC90eXBlMWNpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTRjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2NpZC90eXBlMWNpZC5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR5cGUxY2lkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBPcGVuVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgImNpZHBhcnNlLmMiCisjaW5jbHVkZSAiY2lkbG9hZC5jIgorI2luY2x1ZGUgImNpZG9ianMuYyIKKyNpbmNsdWRlICJjaWRyaXZlci5jIgorI2luY2x1ZGUgImNpZGdsb2FkLmMiCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTkwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvSmFtZmlsZQpAQCAtMCwwICsxLDMzIEBACisjIEZyZWVUeXBlIDIgc3JjL2d4dmFsaWQgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5CisjIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZCBIYXQgSy5LLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgZ3h2YWxpZCA7CisKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBneHZjb21tbiBneHZmZWF0ICBneHZic2xuICBneHZ0cmFrICBneHZvcGJkICBneHZwcm9wCisgICAgICAgICAgICAgICBneHZtb3J0ICBneHZtb3J0MCBneHZtb3J0MSBneHZtb3J0MiBneHZtb3J0NCBneHZtb3J0NQorICAgICAgICAgICAgICAgZ3h2bW9yeCAgZ3h2bW9yeDAgZ3h2bW9yeDEgZ3h2bW9yeDIgZ3h2bW9yeDQgZ3h2bW9yeDUKKyAgICAgICAgICAgICAgIGd4dmxjYXIgIGd4dmtlcm4gIGd4dm1vZCAgIGd4dmp1c3QgIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IGd4dmFsaWQgOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIGVuZCBvZiBzcmMvZ3h2YWxpZCBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvUkVBRE1FIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGYyZmMxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL1JFQURNRQpAQCAtMCwwICsxLDUzMiBAQAorZ3h2YWxpZDogVHJ1ZVR5cGUgR1ggdmFsaWRhdG9yCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisxLiBXaGF0IGlzIHRoaXMKKy0tLS0tLS0tLS0tLS0tLQorCisgIGBneHZhbGlkJyBpcyBhIG1vZHVsZSB0byAgdmFsaWRhdGUgVHJ1ZVR5cGUgR1ggdGFibGVzOiBhIGNvbGxlY3Rpb24gb2YKKyAgYWRkaXRpb25hbCB0YWJsZXMgIGluIFRydWVUeXBlICBmb250IHdoaWNoIGFyZSAgdXNlZCBieSAgYFF1aWNrRHJhdyBHWAorICBUZXh0JywgIEFwcGxlIEFkdmFuY2VkICBUeXBvZ3JhcGh5ICAoQUFUKS4gIEluICBhZGRpdGlvbiwgZ3h2YWxpZCAgY2FuCisgIHZhbGlkYXRlcyBga2VybicgIHRhYmxlcyB3aGljaCBoYXZlICBiZWVuIGV4dGVuZGVkIGZvciBBQVQuICAgTGlrZSB0aGUKKyAgb3R2YWxpZCAgbW9kdWxlLCAgIGd4dmFsaWQgIHVzZXMgIEZyZWV0eXBlICAgMidzICB2YWxpZGF0b3IgIGZyYW1ld29yaworICAoZnR2YWxpZCkuCisKKyAgWW91IGNhbiBsaW5rIGd4dmFsaWQgd2l0aCB5b3VyIHByb2dyYW07IGJlZm9yZSBydW5uaW5nIHlvdXIgb3duIGxheW91dAorICBlbmdpbmUsIGd4dmFsaWQgdmFsaWRhdGVzIGEgZm9udCAgZmlsZS4gIEFzIHRoZSByZXN1bHQsIHlvdSBjYW4gcmVtb3ZlCisgIGVycm9yLWNoZWNraW5nIGNvZGUgIGZyb20gdGhlIGxheW91dCAgZW5naW5lLiAgSXQgaXMgYWxzbyAgcG9zc2libGUgdG8KKyAgdXNlICBneHZhbGlkICBhcyBhICBzdGFuZC1hbG9uZSAgZm9udCAgdmFsaWRhdG9yOyAgdGhlIGBmdHZhbGlkJyAgdGVzdAorICBwcm9ncmFtICBpbmNsdWRlZCAgaW4gdGhlICBmdDJkZW1vICBidW5kbGUgIGNhbGxzIGd4dmFsaWQgIGludGVybmFsbHkuCisgIEEgc3RhbmQtYWxvbmUgZm9udCB2YWxpZGF0b3IgbWF5IGJlIHVzZWZ1bCBmb3IgZm9udCBkZXZlbG9wZXJzLgorCisgIFRoaXMgZG9jdW1lbnRzIGRvY3VtZW50cyB0aGUgZm9sbG93aW5nIGlzc3Vlcy4KKworICAtIHN1cHBvcnRlZCBUcnVlVHlwZSBHWCB0YWJsZXMKKyAgLSBmdW5kYW1lbnRhbCB2YWxpZGF0aW9uIGxpbWl0YXRpb25zCisgIC0gcGVybWlzc2l2ZSBlcnJvciBoYW5kbGluZyBvZiBicm9rZW4gR1ggdGFibGVzCisgIC0gYGtlcm4nIHRhYmxlIGlzc3VlLgorCisKKzIuIFN1cHBvcnRlZCB0YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZm9sbG93aW5nIEdYIHRhYmxlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4KKworICAgIGJzbG4KKyAgICBmZWF0CisgICAganVzdAorICAgIGtlcm4oKikKKyAgICBsY2FyCisgICAgbW9ydAorICAgIG1vcngKKyAgICBvcGJkCisgICAgcHJvcAorICAgIHRyYWsKKworICBUaGUgZm9sbG93aW5nIEdYIHRhYmxlcyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLgorCisgICAgY3ZhcgorICAgIGZkc2MKKyAgICBmbXR4CisgICAgZnZhcgorICAgIGd2YXIKKyAgICBaYXBmCisKKyAgVGhlIGZvbGxvd2luZyBHWCB0YWJsZXMgd29uJ3QgYmUgc3VwcG9ydGVkLgorCisgICAgYWNudCgqKikKKyAgICBoc3R5KCoqKikKKworICBUaGUgZm9sbG93aW5nIHVuZG9jdW1lbnRlZCB0YWJsZXMgaW4gVHJ1ZVR5cGUgZm9udHMgZGVzaWduZWQgZm9yIEFwcGxlCisgIHBsYXRmb3JtIGFyZW4ndCBoYW5kbGVkIGVpdGhlci4KKworICAgIGFkZGcKKyAgICBDVlRNCisgICAgVFBOTQorICAgIHVtaWYKKworCisgICopICAgVGhlIGBrZXJuJyAgdmFsaWRhdG9yIGhhbmRsZXMgYm90aCAgdGhlIGNsYXNzaWMgYW5kIHRoZSAgbmV3IGtlcm4KKyAgICAgICBmb3JtYXRzOyAgdGhlIGZvcm1lciAgaXMgc3VwcG9ydGVkICBvbiBib3RoICBNaWNyb3NvZnQgIGFuZCBBcHBsZQorICAgICAgIHBsYXRmb3Jtcywgd2hpbGUgdGhlIGxhdHRlciBpcyBzdXBwb3J0ZWQgb24gQXBwbGUgcGxhdGZvcm1zLgorCisgICoqKSAgYGFjbnQnIHRhYmxlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBjdXJyZW50bHkgYXZhaWxhYmxlIEFwcGxlIGZvbnQKKyAgICAgICB0b29scy4KKworICAqKiopIFRoZXJlICBpcyAgb25lIG1vcmUgIEFwcGxlICBleHRlbnNpb24sICBgaHN0eScsICBidXQgIGl0ICBpcyAgZm9yCisgICAgICAgTmV3dG9uLU9TLCBub3QgR1ggIChOZXd0b24tT1MgaXMgYSBwbGF0Zm9ybSBieSAgQXBwbGUsIGJ1dCBpdCBjYW4KKyAgICAgICB1c2UgIHNmbnQtIGhvdXNlZCBiaXRtYXAgIGZvbnRzIG9ubHkpLiAgIFRoZXJlZm9yZSwgaXQgIHNob3VsZCBiZQorICAgICAgIGV4Y2x1ZGVkICBmcm9tICBgQXBwbGUgIHBsYXRmb3JtJyAgaW4gdGhlICBjb250ZXh0ICBvZiAgVHJ1ZVR5cGUuCisgICAgICAgZ3h2YWxpZCBpZ25vcmVzIGl0IGFzIEFwcGxlIGZvbnQgdG9vbHMgZG8gc28uCisKKworICBXZSBoYXZlICBjaGVja2VkIDE4MyAgZm9udHMgYnVuZGxlZCB3aXRoICBNYWNPUyA5LjEsIE1hY09TICA5LjIsIE1hY09TCisgIDEwLjAsIE1hY09TIFggMTAuMSwgTVNJRSAgZm9yIE1hY09TLCBhbmQgQXBwbGVXb3JrcyA2LjAuICBJbiBhZGRpdGlvbiwKKyAgd2UgaGF2ZSAgY2hlY2tlZCA2NyBEeW5hbGFiIGZvbnRzICAoZGVzaWduZWQgZm9yIE1hY09TKSAgYW5kIDE4OSBSaWNvaAorICBmb250cyAoZGVzaWduZWQgZm9yIFdpbmRvd3MgYW5kICBNYWNPUyBkdWFsIHBsYXRmb3JtcykuICBUaGUgbnVtYmVyIG9mCisgIGZvbnRzIGluY2x1ZGluZyBUcnVlVHlwZSBHWCB0YWJsZXMgYXJlIGFzIGZvbGxvd3MuCisKKyAgICBic2xuOiAgNzYKKyAgICBmZWF0OiAxOTEKKyAgICBqdXN0OiAgODQKKyAgICBrZXJuOiAgNTkKKyAgICBsY2FyOiAgIDQKKyAgICBtb3J0OiAzMjYKKyAgICBtb3J4OiAgMTkKKyAgICBvcGJkOiAgIDQKKyAgICBwcm9wOiAxMTQKKyAgICB0cmFrOiAgMTYKKworICBEeW5hbGFiICBhbmQgUmljb2ggZm9udHMgIGRvbid0IGhhdmUgIEdYIHRhYmxlcyAgZXhjZXB0IG9mICBgZmVhdCcgYW5kCisgIGBtb3J0Jy4KKworCiszLiBGdW5kYW1lbnRhbCB2YWxpZGF0aW9uIGxpbWl0YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVHJ1ZVR5cGUgIEdYICBwcm92aWRlcyAgbGF5b3V0ICAgaW5mb3JtYXRpb24gIHRvICBsaWJyYXJpZXMgIGZvciAgZm9udAorICByYXN0ZXJpemVycyAgYW5kIHRleHQgbGF5b3V0LiAgIGd4dmFsaWQgY2FuICBjaGVjayB3aGV0aGVyICB0aGUgbGF5b3V0CisgIGRhdGEgaW4gIGEgZm9udCBpcyBjb25mb3JtYW50ICB0byB0aGUgVHJ1ZVR5cGUgR1ggIGZvcm1hdCBzcGVjaWZpZWQgYnkKKyAgQXBwbGUuICBCdXQgZ3h2YWxpZCBjYW5ub3QgY2hlY2sgIGEgaG93IFF1aWNrRHJhdyBHWC9BQVQgcmVuZGVyZXIgdXNlcworICB0aGUgc3RvcmVkIGluZm9ybWF0aW9uLgorCisgIDMtMS4gVmFsaWRhdGlvbiBvZiBTdGF0ZSBNYWNoaW5lIGFjdGl2aXR5CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBRdWlja0RyYXcgR1gvQUFUIHVzZXMgYSBgU3RhdGUgTWFjaGluZScgdG8gcHJvdmlkZSBgc3RhdGVmdWwnIGxheW91dAorICAgIGZlYXR1cmVzLCAgYW5kIFRydWVUeXBlIEdYICBzdG9yZXMgdGhlICBzdGF0ZSB0cmFuc2l0aW9uICBkaWFncmFtIG9mCisgICAgdGhpcyBgU3RhdGUgIE1hY2hpbmUnIGluIGEgIGBTdGF0ZVRhYmxlJyBkYXRhIHN0cnVjdHVyZS4gICBXaGlsZSB0aGUKKyAgICBTdGF0ZSAgTWFjaGluZSByZWNlaXZlcyAgYSBzZXJpZXMgIG9mIGdseXBoICBJRHMsIHRoZSAgU3RhdGUgTWFjaGluZQorICAgIHN0YXJ0cyB3aXRoIGBzdGFydCAgb2YgdGV4dCcgc3RhdGUsIHdhbGtzIGFyb3VuZCAgdmFyaW91cyBzdGF0ZXMgYW5kCisgICAgZ2VuZXJhdGVzIHZhcmlvdXMgIGxheW91dCBpbmZvcm1hdGlvbiAgdG8gdGhlICByZW5kZXJlciwgYW5kIGZpbmFsbHkKKyAgICByZWFjaGVzIHRoZSBgZW5kIG9mIHRleHQnIHN0YXRlLgorCisgICAgZ3h2YWxpZCBjYW4gY2hlY2sgZXNzZW50aWFsIGVycm9ycyBsaWtlOgorCisgICAgICAtIHBvc3NpYmlsaXR5IG9mIHN0YXRlIHRyYW5zaXRpb25zIHRvIHVuZGVmaW5lZCBzdGF0ZXMKKyAgICAgIC0gZXhpc3RlbmNlIG9mIGdseXBoICBJRHMgdGhhdCB0aGUgU3RhdGUgTWFjaGluZSAgZG9lc24ndCBrbm93IGhvdworICAgICAgICB0byBoYW5kbGUKKyAgICAgIC0gdGhlICBTdGF0ZSBNYWNoaW5lICBjYW5ub3QgY29tcHV0ZSAgdGhlIGxheW91dCAgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICBnaXZlbiBkaWFncmFtCisKKyAgICBUaGVzZSBlcnJvcnMgIGNhbiBiZSAgY2hlY2tlZCB3aXRoaW4gZmluaXRlICBzdGVwcywgYW5kICB3aXRob3V0IHRoZQorICAgIFN0YXRlIE1hY2hpbmUgaXRzZWxmLCBiZWNhdXNlIHRoZXNlIGFyZSBgZXhwcmVzc2lvbicgZXJyb3JzIG9mIHN0YXRlCisgICAgdHJhbnNpdGlvbiBkaWFncmFtLgorCisgICAgVGhlcmUgIGlzIG5vICBsaW1pdGF0aW9uICBhYm91dCAgaG93IGxvbmcgIHRoZSAgU3RhdGUgTWFjaGluZSAgd2Fsa3MKKyAgICBhcm91bmQsICBzbyB2YWxpZGF0aW9uICBvZiAgdGhlIGFsZ29yaXRobSAgaW4gIHRoZSBzdGF0ZSAgdHJhbnNpdGlvbgorICAgIGRpYWdyYW0gcmVxdWlyZXMgaW5maW5pdGUgIHN0ZXBzLCBldmVuIGlmIHdlIGhhZCAgYSBTdGF0ZSBNYWNoaW5lIGluCisgICAgZ3h2YWxpZC4gICBUaGVyZWZvcmUsIHRoZSAgZm9sbG93aW5nIGVycm9ycyAgYW5kIHByb2JsZW1zICBjYW5ub3QgYmUKKyAgICBjaGVja2VkLgorCisgICAgICAtIGV4aXN0ZW5jZSBvZiBzdGF0ZXMgd2hpY2ggdGhlIFN0YXRlIE1hY2hpbmUgbmV2ZXIgdHJhbnNpdHMgdG8KKyAgICAgIC0gdGhlICBwb3NzaWJpbGl0eSB0aGF0IHRoZSAgU3RhdGUgTWFjaGluZSAgbmV2ZXIgcmVhY2hlcyAgYGVuZCBvZgorICAgICAgICB0ZXh0JworICAgICAgLSB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgdW5kZXJmbG93L292ZXJmbG93IGluIHRoZSBTdGF0ZSBNYWNoaW5lCisgICAgICAgIChpbiAgbGlnYXR1cmUgIGFuZCAgY29udGV4dHVhbCAgZ2x5cGggc3Vic3RpdHV0aW9ucywgIHRoZSAgU3RhdGUKKyAgICAgICAgTWFjaGluZSBjYW4gc3RvcmUgMTYgZ2x5cGhzIG9udG8gaXRzIHN0YWNrKQorCisgICAgSW4gYWRkaXRpb24sIGd4dmFsaWQgZG9lc24ndCBjaGVjayBgdGVtcG9yYXJ5IGdseXBoIElEcycgdXNlZCBpbiB0aGUKKyAgICBjaGFpbmVkIFN0YXRlIE1hY2hpbmVzICAoaW4gYG1vcnQnIGFuZCBgbW9yeCcgdGFibGVzKS4gICBJZiBhIGxheW91dAorICAgIGZlYXR1cmUgIGlzICBpbXBsZW1lbnRlZCBieSAgYSAgc2luZ2xlICBTdGF0ZSAgTWFjaGluZSwgYSAgZ2x5cGggIElECisgICAgY29udmVydGVkIGJ5IHRoZSBTdGF0ZSBNYWNoaW5lIGlzIHBhc3NlZCB0byB0aGUgZ2x5cGggcmVuZGVyZXIsIHRodXMKKyAgICBpdCAgc2hvdWxkIG5vdCAgcG9pbnQgdG8gIGFuIHVuZGVmaW5lZCAgZ2x5cGggSUQuICAgQnV0IGlmICBhIGxheW91dAorICAgIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYnkgIGNoYWluZWQgU3RhdGUgTWFjaGluZXMsIGEgY29tcG9uZW50IFN0YXRlCisgICAgTWFjaGluZSAgKGlmIGl0ICBpcyAgbm90IHRoZSAgZmluYWwgIG9uZSkgaXMgIHBlcm1pdHRlZCB0byAgZ2VuZXJhdGUKKyAgICB1bmRlZmluZWQgZ2x5cGggSURzIGZvciB0ZW1wb3JhcnkgdXNlLCBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgYnkgbmV4dAorICAgIGNvbXBvbmVudCBTdGF0ZSBNYWNoaW5lIGFuZCBub3QgIGJ5IHRoZSBnbHlwaCByZW5kZXJlci4gIFRvIHZhbGlkYXRlCisgICAgc3VjaCB0ZW1wb3JhcnkgZ2x5cGggSURzLCBneHZhbGlkIG11c3Qgc3RhY2sgYWxsIHVuZGVmaW5lZCBnbHlwaCBJRHMKKyAgICB3aGljaCAgY2FuIG9jY3VyIGluICB0aGUgb3V0cHV0ICBvZiB0aGUgIHByZXZpb3VzIFN0YXRlICBNYWNoaW5lIGFuZAorICAgIHNlYXJjaCAgdGhlbSBpbiAgdGhlICBgQ2xhc3NUYWJsZScgc3RydWN0dXJlICBvZiAgdGhlIGN1cnJlbnQgIFN0YXRlCisgICAgTWFjaGluZS4gIEl0IGlzIHRvbyBjb21wbGV4IHRvICBsaXN0IGFsbCBwb3NzaWJsZSBnbHlwaCBJRHMgZnJvbSB0aGUKKyAgICBTdGF0ZVRhYmxlLCBlc3BlY2lhbGx5IGZyb20gYSBsaWdhdHVyZSBzdWJzdGl0dXRpb24gdGFibGUuCisKKyAgMy0yLiBWYWxpZGF0aW9uIG9mIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG11bHRpcGxlIGxheW91dCBmZWF0dXJlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBneHZhbGlkIGRvZXMgIG5vdCB2YWxpZGF0ZSB0aGUgcmVsYXRpb25zaGlwICBiZXR3ZWVuIG11bHRpcGxlIGxheW91dAorICAgIGZlYXR1cmVzIGF0IGFsbC4KKworICAgIElmICBtdWx0aXBsZSBsYXlvdXQgIGZlYXR1cmVzICBhcmUgZGVmaW5lZCAgaW4gIFRydWVUeXBlIEdYICB0YWJsZXMsCisgICAgcG9zc2libGUgIGludGVyYWN0aW9ucywgIG92ZXJyaWRlcywgIGFuZCAgY29uZmxpY3RzICBiZXR3ZWVuICBsYXlvdXQKKyAgICBmZWF0dXJlcyBhcmUgaW1wbGljaXRseSAgZ2l2ZW4gaW4gdGhlIGZvbnQgdG9vLiAgIEZvciBleGFtcGxlLCB0aGVyZQorICAgIGFyZSBzZXZlcmFsIHByZWRlZmluZWQgc3BhY2luZyBjb250cm9sIGZlYXR1cmVzOgorCisgICAgICAtIFRleHQgU3BhY2luZyAgICAgICAgICAoUHJvcG9ydGlvbmFsL01vbm9zcGFjZS9IYWxmLXdpZHRoL05vcm1hbCkKKyAgICAgIC0gTnVtYmVyIFNwYWNpbmcgICAgICAgIChNb25vc3BhY2VkLW51bWJlcnMvUHJvcG9ydGlvbmFsLW51bWJlcnMpCisgICAgICAtIEthbmEgU3BhY2luZyAgICAgICAgICAoRnVsbC13aWR0aC9Qcm9wb3J0aW9uYWwpCisgICAgICAtIElkZW9ncmFwaGljIFNwYWNpbmcgICAoRnVsbC13aWR0aC9Qcm9wb3J0aW9uYWwpCisgICAgICAtIENKSyBSb21hbiBTcGFjaW5nICAgICAoSGFsZi13aWR0aC9Qcm9wb3J0aW9uYWwvRGVmYXVsdC1yb21hbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9GdWxsLXdpZHRoLXJvbWFuL1Byb3BvcnRpb25hbCkKKworICAgIElmIGFsbCAgbGF5b3V0IGZlYXR1cmVzIGFyZSAgaW5kZXBlbmRlbnRseSBtYW5hZ2VkLCB3ZSAgY2FuIGFjdGl2YXRlCisgICAgaW5jb25zaXN0ZW50ICB0eXBvZ3JhcGhpYyBydWxlcyAgbGlrZSAgYFRleHQgU3BhY2luZz1Nb25vc3BhY2UnICBhbmQKKyAgICBgSWRlb2dyYXBoaWMgU3BhY2luZz1Qcm9wb3J0aW9uYWwnIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICBUaGUgY29tYmluYXRpb25zICBvZiBsYXlvdXQgZmVhdHVyZXMgIGlzIG1hbmFnZWQgYnkgYSAgMzJiaXQgaW50ZWdlcgorICAgIChvbmUgYml0IGVhY2ggZm9yIHNlbGVjdG9yICBzZXR0aW5nKSwgc28gd2UgY2FuIGRlZmluZSByZWxhdGlvbnNoaXBzCisgICAgYmV0d2VlbiAgdXAgIHRvIDMyICBmZWF0dXJlcywgIHRoZW9yZXRpY2FsbHkuICAgQnV0ICBpZiBvbmUgIGZlYXR1cmUKKyAgICBzZXR0aW5nICBhZmZlY3RzICBhbm90aGVyICAgZmVhdHVyZSAgc2V0dGluZywgIHdlICBuZWVkICB0eXBvZ3JhcGhpYworICAgIHByaW9yaXR5ICBydWxlcyB0byAgdmFsaWRhdGUgdGhlICByZWxhdGlvbnNoaXAuICAgVW5mb3J0dW5hdGVseSwgdGhlCisgICAgVHJ1ZVR5cGUgR1ggZm9ybWF0IHNwZWNpZmljYXRpb24gZG9lcyBub3QgZ2l2ZSBzdWNoIGluZm9ybWF0aW9uIGV2ZW4KKyAgICBmb3IgcHJlZGVmaW5lZCBmZWF0dXJlcy4KKworCis0LiBQZXJtaXNzaXZlIGVycm9yIGhhbmRsaW5nIG9mIGJyb2tlbiBHWCB0YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdoZW4gIEFwcGxlJ3MgZm9udCAgcmVuZGVyaW5nIHN5c3RlbSAgZmluZHMgYW4gIGluY29uc2lzdGVuY3ksICBsaWtlIGEKKyAgc3BlY2lmaWNhdGlvbiAgdmlvbGF0aW9uIG9yICBhbiAgdW5zcGVjaWZpZWQgdmFsdWUgIGluICBhIFRydWVUeXBlICBHWAorICB0YWJsZSwgaXQgZG9lcyBub3QgYWx3YXlzICByZXR1cm4gZXJyb3IuICBJbiBtb3N0IGNhc2VzLCB0aGUgcmVuZGVyaW5nCisgIGVuZ2luZSBzaWxlbnRseSAgaWdub3JlcyBzdWNoIHdyb25nICB2YWx1ZXMgb3IgZXZlbiB3aG9sZSAgdGFibGVzLiAgSW4KKyAgZmFjdCwgTWFjT1MgaXMgc2hpcHBlZCB3aXRoICBmb250cyBpbmNsdWRpbmcgYnJva2VuIEdYL0FBVCB0YWJsZXMsIGJ1dAorICBubyBoYXJtZnVsICBlZmZlY3RzIGR1ZSB0byAgYG9mZmljaWFsbHkgYnJva2VuJyBmb250cyBhcmUgIG9ic2VydmVkIGJ5CisgIGVuZC11c2Vycy4KKworICBneHZhbGlkICBpcyBkZXNpZ25lZCAgdG8gY29udGludWUgIHRoZSB2YWxpZGF0aW9uICBwcm9jZXNzIGFzICBsb25nIGFzCisgIHBvc3NpYmxlLiAgV2hlbiBneHZhbGlkIGZpbmQgd3JvbmcgIHZhbHVlcywgZ3h2YWxpZCB3YXJucyBpdCBhdCBsZWFzdCwKKyAgYW5kIHRha2VzICBhIGZhbGxiYWNrIHByb2NlZHVyZSAgaWYgcG9zc2libGUuICBUaGUgIGZhbGxiYWNrIHByb2NlZHVyZQorICBkZXBlbmRzIG9uIHRoZSBkZWJ1ZyBsZXZlbC4KKworICBXZSB1c2VkIHRoZSBmb2xsb3dpbmcgdGhyZWUgdG9vbHMgdG8gaW52ZXN0aWdhdGUgQXBwbGUncyBlcnJvciBoYW5kbGluZy4KKworICAgIC0gRm9udFZhbGlkYXRvciAgKGZvciBNYWNPUyA4LjUgLSA5LjIpICByZXNvdXJjZSBmb3JrIGZvbnQKKyAgICAtIGZ0eHZhbGlkYXRvciAgIChmb3IgTWFjT1MgWCAxMC4xIC0pICAgZGZvbnQgb3IgbmFrZWQtc2ZudAorICAgIC0gZnR4ZHVtcGVyZnVzZXIgKGZvciBNYWNPUyBYIDEwLjEgLSkgICBkZm9udCBvciBuYWtlZC1zZm50CisKKyAgSG93ZXZlciwgYWxsIHRlc3RzIHdlcmUgZG9uZSBvbiBhIFBvd2VyUEMgYmFzZWQgTWFjaW50b3NoOyBhdCBwcmVzZW50LAorICB3ZSBoYXZlIG5vdCBjaGVja2VkIHRob3NlIHRvb2xzIG9uIGEgbTY4ay1iYXNlZCBNYWNpbnRvc2guCisKKyAgSW4gdG90YWwsIHdlIGNoZWNrZWQgMTgzIGZvbnRzICBidW5kbGVkIHRvIE1hY09TIDkuMSwgTWFjT1MgOS4yLCBNYWNPUworICAxMC4wLCBNYWNPUyBYICAxMC4xLCBNU0lFIGZvciBNYWNPUywgYW5kICBBcHBsZVdvcmtzIDYuMC4gIFRoZXNlIGZvbnRzCisgIGFyZSBkaXN0cmlidXRlZCAgb2ZmaWNpYWxseSwgYnV0IG1hbnkgYnJva2VuIEdYL0FBVCAgdGFibGVzIHdlcmUgZm91bmQKKyAgYnkgQXBwbGUncyBmb250IHRvb2xzLiAgSW4gdGhlIGZvbGxvd2luZywgd2UgbGlzdCB0eXBpY2FsIHZpb2xhdGlvbiBvZgorICB0aGUgR1ggc3BlY2lmaWNhdGlvbiwgaW4gZm9udHMgb2ZmaWNpYWxseSBkaXN0cmlidXRlZCB3aXRoIHRob3NlIEFwcGxlCisgIHN5c3RlbXMuCisKKyAgNC0xLiBicm9rZW4gQmluU3JjaEhlYWRlciAoMTkvMTgzKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBgQmluU3JjaEhlYWRlcicgaXMgIGEgaGVhZGVyIG9mIGEgIGRhdGEgYXJyYXkgZm9yICBtNjhrIHBsYXRmb3JtcyB0bworICAgIGFjY2VzcyBtZW1vcnkgZWZmaWNpZW50bHkuICBBbHRob3VnaCAgdGhlcmUgYXJlIG9ubHkgdHdvIGluZGVwZW5kZW50CisgICAgcGFyYW1ldGVycyAgZm9yIHJlYWwgIChgdW5pdFNpemUnIGFuZCAgYG5Vbml0cycpLCAgQmluU3JjaEhlYWRlciBoYXMKKyAgICB0aHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gYHVuaXRTaXplJworICAgIGFuZCAgYG5Vbml0cycsICBmb3IgIGZhc3QgIHNldHVwLiAgIEFwcGxlICBmb250ICB0b29scyAgaWdub3JlICB0aGVtCisgICAgc2lsZW50bHksIHNvIGd4dmFsaWQgd2FybnMgaWYgaXQgZmluZHMgYW5kIGluY29uc2lzdGVuY3ksIGFuZCBhbHdheXMKKyAgICBjb250aW51ZXMgIHZhbGlkYXRpb24uICAgIFRoZSAgYWRkaXRpb25hbCAgcGFyYW1ldGVycyAgIGFyZSAgaWdub3JlZAorICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnNpc3RlbmN5LgorCisgICAgICAxOSAgZm9udHMgaW5jbHVkZSAgc3VjaCAgaW5jb25zaXN0ZW5jaWVzOyBhbGwgIGJyZWFrcyAgYXJlIGluICB0aGUKKyAgICAgIEJpblNyY2hIZWFkZXIgc3RydWN0dXJlIG9mIHRoZSBga2VybicgdGFibGUuCisKKyAgNC0yLiB0b28tc2hvcnQgTG9va3VwVGFibGUgKDUvMTgzKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBMb29rdXBUYWJsZSBmb3JtYXQgMCAgaXMgYSBzaW1wbGUgYXJyYXkgdG8gZ2V0IGEgIHZhbHVlIGZyb20gYSBnaXZlbgorICAgIEdJRCAoZ2x5cGggIElEKTsgdGhlIGluZGV4IG9mICB0aGlzIGFycmF5IGlzIGEgIEdJRCB0b28uICBUaGVyZWZvcmUsCisgICAgdGhlIGxlbmd0aCAgb2YgdGhlIGFycmF5IGlzIGV4cGVjdGVkICB0byBiZSBzYW1lIGFzICB0aGUgbWF4aW11bSBHSUQKKyAgICB2YWx1ZSBkZWZpbmVkICBpbiB0aGUgYG1heHAnIHRhYmxlLCAgYnV0IHRoZXJlIGFyZSAgc29tZSBmb250cyB3aG9zZQorICAgIExvb2t1cFRhYmxlIGZvcm1hdCAwIGlzIHRvbyAgc2hvcnQgdG8gY292ZXIgYWxsIEdJRHMuICBGb250VmFsaWRhdG9yCisgICAgaWdub3JlcyAgdGhpcyBlcnJvciBzaWxlbnRseSwgIGZ0eHZhbGlkYXRvciBhbmQgIGZ0eGR1bXBlcmZ1c2VyIGJvdGgKKyAgICB3YXJuIGFuZCBjb250aW51ZS4gIFNpbWlsYXIgcHJvYmxlbXMgYXJlIGZvdW5kIGluIGZvcm1hdCAzIHN1YnRhYmxlcworICAgIG9mIGBrZXJuJy4gIGd4dmFsaWQgIHdhcm5zIGFsd2F5cyBhbmQgYWJvcnQgaWYgIHRoZSB2YWxpZGF0aW9uIGxldmVsCisgICAgaXMgc2V0IHRvIEZUX1ZBTElEQVRFX1BBUkFOT0lELgorCisgICAgICA1IGZvbnRzIGluY2x1ZGUgdG9vLXNob3J0IGtlcm4gZm9ybWF0IDAgc3VidGFibGVzLgorICAgICAgMSBmb250IGluY2x1ZGVzIHRvby1zaG9ydCBrZXJuIGZvcm1hdCAzIHN1YnRhYmxlLgorCisgIDQtMy4gYnJva2VuIExvb2t1cFRhYmxlIGZvcm1hdCAyICgxLzE4MykKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTG9va3VwVGFibGUgIGZvcm1hdCAgMiwgIHN1YmZvcm1hdCAgNCAgY292ZXJzIHRoZSAgR0lEICBzcGFjZSAgYnkgIGEKKyAgICBjb2xsZWN0aW9uICBvZiAgc2VnbWVudHMgd2hpY2ggIGFyZSAgc3BlY2lmaWVkICBieSBgZmlyc3RHbHlwaCcgIGFuZAorICAgIGBsYXN0R2x5cGgnLiAgIFNvbWUgIGZvbnRzICBzdG9yZSAgYGZpcnN0R2x5cGgnIGFuZCAgYGxhc3RHbHlwaCcgIGluCisgICAgcmV2ZXJzZSBvcmRlciwgIHNvIHRoZSBzZWdtZW50IHNwZWNpZmljYXRpb24gaXMgIGJyb2tlbi4gIEFwcGxlIGZvbnQKKyAgICB0b29scyBpZ25vcmUgdGhpcyBlcnJvciBzaWxlbnRseTsgIGEgYnJva2VuIHNlZ21lbnQgaXMgaWdub3JlZCBhcyBpZgorICAgIGl0ICBkaWQgbm90ICBleGlzdC4gICBneHZhbGlkICB3YXJucyBhbmQgIG5vcm1hbGl6ZSAgdGhlIHNlZ21lbnQgIGF0CisgICAgRlRfVkFMSURBVEVfREVGQVVMVCwgb3IgaWdub3JlICB0aGUgc2VnbWVudCBhdCBGVF9WQUxJREFURV9USUdIVCwgb3IKKyAgICBhYm9ydCBhdCBGVF9WQUxJREFURV9QQVJBTk9JRC4KKworICAgICAgMSBmb250IGluY2x1ZGVzIGJyb2tlbiBMb29rdXBUYWJsZSBmb3JtYXQgMiwgaW4gdGhlIGBqdXN0JyB0YWJsZS4KKworICAgICopIEl0IHNlZW1zICB0aGF0IGFsbCBmb250cyBtYW51ZmFjdHVyZWQgYnkgIElUQyBmb3IgQXBwbGVXb3JrcyBoYXZlCisgICAgICAgdGhpcyBlcnJvci4KKworICA0LTQuIGJhZCBicmFja2V0aW5nIGluIGdseXBoIHByb3BlcnR5ICgxNC8xODMpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEdYL0FBVCBkZWZpbmVzIGEgIGBicmFja2V0aW5nJyBwcm9wZXJ0eSBvZiB0aGUgZ2x5cGhzICBpbiB0aGUgYHByb3AnCisgICAgdGFibGUsICB0byBjb250cm9sIGxheW91dCAgZmVhdHVyZXMgb2YgIHN0cmluZ3MgZW5jbG9zZWQgIGluc2lkZSBhbmQKKyAgICBvdXRzaWRlICBvZiAgIGJyYWNrZXRzLiAgIFNvbWUgIGZvbnRzICAgZ2l2ZSAgaW5hcHByb3ByaWF0ZSAgYnJhY2tldAorICAgIHByb3BlcnRpZXMgIHRvIGdseXBocy4gICBBcHBsZSAgZm9udCB0b29scyAgd2FybiAgYWJvdXQgdGhpcyAgZXJyb3I7CisgICAgZ3h2YWxpZCB3YXJucyB0b28gYW5kIGFib3J0cyBhdCBGVF9WQUxJREFURV9QQVJBTk9JRC4KKworICAgICAgMTQgZm9udHMgaW5jbHVkZSB3cm9uZyBicmFja2V0IHByb3BlcnRpZXMuCisKKworICA0LTUuIGludmFsaWQgZmVhdHVyZSBudW1iZXIgKDExNy8xODMpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBHWC9BQVQgZXh0ZW5zaW9uIGNhbiAgaW5jbHVkZSAyNTUgZGlmZmVyZW50IGxheW91dCBmZWF0dXJlcywgYnV0CisgICAgcG9wdWxhciAgICAgIGxheW91dCAgICAgIGZlYXR1cmVzICAgICAgYXJlICAgICAgcHJlZGVmaW5lZCAgICAgIChzZWUKKyAgICBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9SZWdpc3RyeS9pbmRleC5odG1sKS4gICBTb21lICBmb250cworICAgIGluY2x1ZGUgZmVhdHVyZSAgbnVtYmVycyB3aGljaCBhcmUgaW5jb21wYXRpYmxlICB3aXRoIHRoZSBwcmVkZWZpbmVkCisgICAgZmVhdHVyZSByZWdpc3RyeS4KKworICAgIEluIG91ciBzdXJ2ZXksIHRoZXJlIGFyZSAxNDAgZm9udHMgaW5jbHVkaW5nIGBmZWF0JyB0YWJsZS4KKworICAgIGEpIDY3IGZvbnRzIHVzZSBhIGZlYXR1cmUgbnVtYmVyIHdoaWNoIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgICBiKSAxMTcgZm9udHMgc2V0IHRoZSB3cm9uZyBmZWF0dXJlIHJhbmdlIChuU2V0dGluZykuICBUaGlzIGlzIG1vc3RseQorICAgICAgIGZvdW5kIGluIHRoZSBgbW9ydCcgYW5kIGBtb3J4JyB0YWJsZXMuCisKKyAgICBBcHBsZSAgZm9udCB0b29scyBnaXZlICBubyB3YXJuaW5nLCAgYWx0aG91Z2ggdGhleSAgY2Fubm90IHJlY29nbml6ZQorICAgIHdoYXQgIHRoZSBmZWF0dXJlICBpcy4gICBBdCBGVF9WQUxJREFURV9ERUZBVUxULCAgZ3h2YWxpZCB3YXJucyAgYnV0CisgICAgY29udGludWVzIGluIGJvdGggY2FzZXMgKGEsIGIpLiAgQXQgRlRfVkFMSURBVEVfVElHSFQsIGd4dmFsaWQgd2FybnMKKyAgICBhbmQgYWJvcnRzIGZvciAoYSksIGJ1dCBjb250aW51ZXMgZm9yIChiKS4gIEF0IEZUX1ZBTElEQVRFX1BBUkFOT0lELAorICAgIGd4dmFsaWQgd2FybnMgYW5kIGFib3J0cyBpbiBib3RoIGNhc2VzIChhLCBiKS4KKworICA0LTYuIGludmFsaWQgcHJvcCB2ZXJzaW9uICgxMC8xODMpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEFzIG1vc3QgVHJ1ZVR5cGUgR1ggdGFibGVzLCB0aGUgYHByb3AnIHRhYmxlIG11c3Qgc3RhcnQgd2l0aCBhIDMyYml0CisgICAgdmVyc2lvbiBpZGVudGlmaWVyOiAweDAwMDEwMDAwLCAgMHgwMDAyMDAwMCBvciAweDAwMDMwMDAwLiAgQnV0IHNvbWUKKyAgICBmb250cyAgc3RvcmUgbm9uc2Vuc2UgYmluYXJ5ICBkYXRhIGluc3RlYWQuICAgV2hlbiBBcHBsZSAgZm9udCB0b29scworICAgIGZpbmQgdGhlbSwgdGhleSBhYm9ydCB0aGUgcHJvY2Vzc2luZyBpbW1lZGlhdGVseSwgYW5kIHRoZSBkYXRhIHdoaWNoCisgICAgZm9sbG93cyBpcyB1bmhhbmRsZWQuICBneHZhbGlkIGRvZXMgdGhlIHNhbWUuCisKKyAgICAgIDEwIGZvbnRzIGluY2x1ZGUgYnJva2VuIGBwcm9wJyB2ZXJzaW9uLgorCisgICAgQWxsICBvZiB0aGVzZSAgZm9udHMgYXJlICBjbGFzc2ljICBUcnVlVHlwZSBmb250cyAgZm9yIHRoZSAgSmFwYW5lc2UKKyAgICBzY3JpcHQsIG1hbnVmYWN0dXJlZCBieSBBcHBsZS4KKworICA0LTcuIHVua25vd24gcmVzb3VyY2UgbmFtZSAoMi8xODMpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTk9URTogVEhJUyBJUyBOT1QgQSBUUlVFVFlQRSBHWCBFUlJPUi4KKworICAgIElmICBhIFRydWVUeXBlICBmb250IGlzICBzdG9yZWQgIGluIHRoZSAgcmVzb3VyY2UgZm9yayAgb3IgaW4gIGRmb250CisgICAgZm9ybWF0LCB0aGUgZGF0YSBtdXN0IGJlIHRhZ2dlZCBhcyBgc2ZudCcgaW4gdGhlIHJlc291cmNlIGZvcmsgaW5kZXgKKyAgICB0byBpbnZva2UgVHJ1ZVR5cGUgZm9udCBoYW5kbGVyIGZvciB0aGUgZGF0YS4gIEJ1dCB0aGUgVHJ1ZVR5cGUgZm9udAorICAgIGRhdGEgIGluICAgYEtleWJvYXJkLmRmb250JyAgaXMgIHRhZ2dlZCAgIGFzICBga2JkJywgIGFuZCAgIHRoYXQgIGluCisgICAgYExhc3RSZXNvcnQuZGZvbnQnIGlzIHRhZ2dlZCBhcyAgYGxzdCcuICBBcHBsZSBmb250IHRvb2xzIGNhbiBkZXRlY3QKKyAgICB0aGF0IHRoZSBkYXRhIGlzIGluICBUcnVlVHlwZSBmb3JtYXQgYW5kIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZSB0aGVtLgorICAgIE1heWJlICB0aGlzIGlzIHBvc3NpYmxlICBiZWNhdXNlIHRoZXkgIGFyZSBrbm93biAgdG8gYmUgIGRmb250LiAgVGhlCisgICAgY3VycmVudCAgaW1wbGVtZW50YXRpb24gIG9mIHRoZSAgcmVzb3VyY2UgIGZvcmsgIGRyaXZlciBvZiAgRnJlZVR5cGUKKyAgICBjYW5ub3QgZG8gdGhhdCwgdGh1cyBneHZhbGlkIGNhbm5vdCB2YWxpZGF0ZSB0aGVtLgorCisgICAgICAyIGZvbnRzIHVzZSBhbiB1bmtub3duIHRhZyBmb3IgdGhlIFRydWVUeXBlIGZvbnQgcmVzb3VyY2UuCisKKzUuIGBrZXJuJyB0YWJsZSBpc3N1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJbiBjb21tb24gdGVybWlub2xvZ3kgb2YgVHJ1ZVR5cGUsIGBrZXJuJyBpcyBjbGFzc2lmaWVkIGFzIGEgYmFzaWMgYW5kCisgIHBsYXRmb3JtLWluZGVwZW5kZW50IHRhYmxlLiAgQnV0IHRoZXJlIGFyZSBBcHBsZSBleHRlbnNpb25zIG9mIGBrZXJuJywKKyAgYW5kICB0aGVyZSBpcyAgYW4gIGV4dGVuc2lvbiB3aGljaCAgcmVxdWlyZXMgIGEgR1ggIHN0YXRlIG1hY2hpbmUgIGZvcgorICBjb250ZXh0dWFsIGtlcm5pbmcuICAgVGhlcmVmb3JlLCBneHZhbGlkIGluY2x1ZGVzICBhIHNwZWNpYWwgdmFsaWRhdG9yCisgIGZvciAgYGtlcm4nIHRhYmxlcy4gICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSAgaXMgbm8gIGV4YWN0ICBhbGdvcml0aG0gdG8KKyAgY2hlY2sgQXBwbGUncyBleHRlbnNpb24sIHNvICBneHZhbGlkIGluY2x1ZGVzIGEgaGV1cmlzdGljIGFsZ29yaXRobSB0bworICBmaW5kICB0aGUgcHJvcGVyIHZhbGlkYXRpb24gIHJvdXRpbmVzIGZvciAgYWxsIHBvc3NpYmxlICBkYXRhIGZvcm1hdHMsCisgIGluY2x1ZGluZyAgICB0aGUgICBkYXRhICAgIGZvcm1hdCAgIGZvciAgICBNaWNyb3NvZnQuICAgICBCeSAgIGNhbGxpbmcKKyAgY2xhc3NpY19rZXJuX3ZhbGlkYXRlKCkgaW5zdGVhZCBvZiBneHZfdmFsaWRhdGUoKSwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICBga2VybicgZm9ybWF0ICBleHBsaWNpdGx5LiAgSG93ZXZlciwgY3VycmVudCAgRnJlZVR5cGUyIHVzZXMgTWljcm9zb2Z0CisgIGBrZXJuJyBmb3JtYXQgIG9ubHksIG90aGVycyAgYXJlIGlnbm9yZWQgKGFuZCAgc2hvdWxkIGJlIGhhbmRsZWQgIGluIGEKKyAgbGlicmFyeSBvbmUgbGV2ZWwgaGlnaGVyIHRoYW4gRnJlZVR5cGUpLgorCisgIDUtMS4gSGlzdG9yeQorICAtLS0tLS0tLS0tLS0KKworICAgIFRoZSBvcmlnaW5hbCAgMTZiaXQgdmVyc2lvbiBvZiBga2VybicgIHdhcyBkZXNpZ25lZCBieSAgQXBwbGUgaW4gdGhlCisgICAgcHJlLUdYICBlcmEsIGFuZCAgaXQgd2FzICBhbHNvIGFwcHJvdmVkICBieSAgTWljcm9zb2Z0LiAgQWZ0ZXJ3YXJkcywKKyAgICBBcHBsZSBkZXNpZ25lZCBhICBuZXcgMzJiaXQgdmVyc2lvbiBvZiB0aGUgIGBrZXJuJyB0YWJsZS4gIEFjY29yZGluZworICAgIHRvICB0aGUgZG9jdW1lbnRhdGlvbiwgdGhlICBkaWZmZXJlbmNlIGJldHdlZW4gIHRoZSAxNmJpdCAgYW5kIDMyYml0CisgICAgdmVyc2lvbiBpcyBvbmx5IHRoZSBzaXplIG9mICB2YXJpYWJsZXMgaW4gdGhlIGBrZXJuJyBoZWFkZXIuICBJbiB0aGUKKyAgICBmb2xsb3dpbmcsICB3ZSBjYWxsICB0aGUgb3JpZ2luYWwgIDE2Yml0IHZlcnNpb24gIGFzICBgY2xhc3NpYycsIGFuZAorICAgIDMyYml0IHZlcnNpb24gYXMgYG5ldycuCisKKyAgNS0yLiBWZXJzaW9ucyBhbmQgZGlhbGVjdHMgd2hpY2ggc2hvdWxkIGJlIGRpZmZlcmVudGlhdGVkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIGBrZXJuJyB0YWJsZSAgY29uc2lzdHMgb2YgYSB0YWJsZSBoZWFkZXIgIGFuZCBzZXZlcmFsIHN1YnRhYmxlcy4KKyAgICBUaGUgdmVyc2lvbiBudW1iZXIgIHdoaWNoIGlkZW50aWZpZXMgYSBgY2xhc3NpYycgb3IgIGEgYG5ldycgdmVyc2lvbgorICAgIGlzICBleHBsaWNpdGx5ICAgd3JpdHRlbiAgaW4gIHRoZSAgIHRhYmxlICBoZWFkZXIsICBidXQgICB0aGVyZSAgYXJlCisgICAgdW5kb2N1bWVudGVkICBkaWZmZXJlbmNlcyBiZXR3ZWVuICBNaWNyb3NvZnQncyBhbmQgIEFwcGxlJ3MgZm9ybWF0cy4KKyAgICBJdCBpcyAgY2FsbGVkIGEgYGRpYWxlY3QnIGluICB0aGUgZm9sbG93aW5nLiAgVGhlcmUgIGFyZSB0aHJlZSBjYXNlcworICAgIHdoaWNoICBzaG91bGQgIGJlICBoYW5kbGVkOiAgIHRoZSAgbmV3ICBBcHBsZS1kaWFsZWN0LCAgdGhlICBjbGFzc2ljCisgICAgQXBwbGUtZGlhbGVjdCwgIGFuZCB0aGUgY2xhc3NpYyAgTWljcm9zb2Z0LWRpYWxlY3QuICBBbiAgYW5hbHlzaXMgb2YKKyAgICB0aGUgZm9ybWF0cyBhbmQgdGhlIGF1dG8gZGV0ZWN0aW9uIGFsZ29yaXRobSBvZiBneHZhbGlkIGlzIGRlc2NyaWJlZAorICAgIGluIHRoZSBmb2xsb3dpbmcuCisKKyAgICA1LTItMS4gVmVyc2lvbiBkZXRlY3Rpb246IGNsYXNzaWMgYW5kIG5ldyBrZXJuCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBBY2NvcmRpbmcgIHRvIEFwcGxlICBUcnVlVHlwZSAgc3BlY2lmaWNhdGlvbiwgdGhlcmUgIGFyZSBvbmx5ICB0d28KKyAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNsYXNzaWMgYW5kIHRoZSBuZXc6CisKKyAgICAgICAgLSBUaGUgYGtlcm4nIHRhYmxlIGhlYWRlciBzdGFydHMgd2l0aCB0aGUgdmVyc2lvbiBudW1iZXIuCisgICAgICAgICAgVGhlIGNsYXNzaWMgdmVyc2lvbiBzdGFydHMgd2l0aCAweDAwMDAgKDE2Yml0KSwKKyAgICAgICAgICB0aGUgbmV3IHZlcnNpb24gc3RhcnRzIHdpdGggMHgwMDAxMDAwMCAoMzJiaXQpLgorCisgICAgICAgIC0gSW4gdGhlICBga2VybicgdGFibGUgaGVhZGVyLCAgdGhlIG51bWJlciBvZiAgc3VidGFibGVzIGZvbGxvd3MKKyAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXIuCisgICAgICAgICAgSW4gdGhlIGNsYXNzaWMgdmVyc2lvbiwgaXQgaXMgc3RvcmVkIGFzIGEgMTZiaXQgdmFsdWUuCisgICAgICAgICAgSW4gdGhlIG5ldyB2ZXJzaW9uLCBpdCBpcyBzdG9yZWQgYXMgYSAzMmJpdCB2YWx1ZS4KKworICAgICAgRnJvbSBBcHBsZSBmb250IHRvb2wncyBvdXRwdXQgKER1bXBLRVJOIGlzIGFsc28gdGVzdGVkIGluIGFkZGl0aW9uCisgICAgICB0byAgdGhlICB0aHJlZSAgQXBwbGUgIGZvbnQgIHRvb2xzIGluICBhYm92ZSksICB0aGVyZSAgaXMgIGFub3RoZXIKKyAgICAgIHVuZG9jdW1lbnRlZCBkaWZmZXJlbmNlLiAgSW4gdGhlICBuZXcgdmVyc2lvbiwgdGhlIHN1YnRhYmxlIGhlYWRlcgorICAgICAgaW5jbHVkZXMgYSAxNmJpdCB2YXJpYWJsZSAgbmFtZWQgYHR1cGxlSW5kZXgnIHdoaWNoIGRvZXMgbm90IGV4aXN0CisgICAgICBpbiB0aGUgY2xhc3NpYyB2ZXJzaW9uLgorCisgICAgICBUaGUgbmV3IHZlcnNpb24gIGNhbiBzdG9yZSBhbGwgc3VidGFibGUgZm9ybWF0cyAoMCwgIDEsIDIsIGFuZCAzKSwKKyAgICAgIGJ1dCB0aGUgQXBwbGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBtZW50aW9uIHRoZSBzdWJ0YWJsZQorICAgICAgZm9ybWF0cyBhdmFpbGFibGUgaW4gdGhlIGNsYXNzaWMgdmVyc2lvbi4KKworICAgIDUtMi0yLiBBdmFpbGFibGUgc3VidGFibGUgZm9ybWF0cyBpbiBjbGFzc2ljIHZlcnNpb24KKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEFsdGhvdWdoIHRoZSAgQXBwbGUgVHJ1ZVR5cGUgIHNwZWNpZmljYXRpb24gcmVjb21tZW5kcyB0byAgdXNlIHRoZQorICAgICAgY2xhc3NpYyB2ZXJzaW9uIGluICB0aGUgY2FzZSBpZiB0aGUgZm9udCBpcyAgZGVzaWduZWQgZm9yIGJvdGggdGhlCisgICAgICBBcHBsZSBhbmQgTWljcm9zb2Z0IHBsYXRmb3JtcywgIGl0IGRvZXMgbm90IGRvY3VtZW50IHRoZSBhdmFpbGFibGUKKyAgICAgIHN1YnRhYmxlIGZvcm1hdHMgaW4gdGhlIGNsYXNzaWMgdmVyc2lvbi4KKworICAgICAgQWNjb3JkaW5nICB0byB0aGUgTWljcm9zb2Z0ICBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLCAgdGhlIHN1YnRhYmxlCisgICAgICBmb3JtYXQgIGFzc3VyZWQgZm9yICBXaW5kb3dzICBhbmQgT1MvMiAgc3VwcG9ydCAgaXMgb25seSAgc3VidGFibGUKKyAgICAgIGZvcm1hdCAgMC4gIFRoZSAgTWljcm9zb2Z0IFRydWVUeXBlICBzcGVjaWZpY2F0aW9uICBhbHNvIGRlc2NyaWJlcworICAgICAgc3VidGFibGUgZm9ybWF0ICAyLCBidXQgZG9lcyAgbm90IG1lbnRpb24gd2hpY2ggIHBsYXRmb3JtcyBzdXBwb3J0CisgICAgICBpdC4gIEF1YnRhYmxlIGZvcm1hdHMgMSwgMywgIGFuZCBoaWdoZXIgYXJlIGRvY3VtZW50ZWQgYXMgcmVzZXJ2ZWQKKyAgICAgIGZvciBmdXR1cmUgdXNlLiAgVGhlcmVmb3JlLCB0aGUgY2xhc3NpYyB2ZXJzaW9uIGNhbiBzdG9yZSBzdWJ0YWJsZQorICAgICAgZm9ybWF0cyAwIGFuZCAyLCBhdCBsZWFzdC4gIGB0dGZkdW1wLmV4ZScsIGEgZm9udCB0b29sIHByb3ZpZGVkIGJ5CisgICAgICBNaWNyb3NvZnQsICBpZ25vcmVzIHRoZSAgc3VidGFibGUgZm9ybWF0ICB3cml0dGVuIGluICB0aGUgc3VidGFibGUKKyAgICAgIGhlYWRlciwgYW5kIHBhcnNlcyB0aGUgdGFibGUgYXMgaWYgYWxsIHN1YnRhYmxlcyBhcmUgaW4gZm9ybWF0IDAuCisKKyAgICAgIGBrZXJuJyAgc3VidGFibGUgZm9ybWF0ICAxICB1c2VzICBhIFN0YXRlVGFibGUsICBzbyAgaXQgY2Fubm90ICBiZQorICAgICAgdXRpbGl6ZWQgd2l0aG91dCBhIEdYICBTdGF0ZSBNYWNoaW5lLiAgVGhlcmVmb3JlLCBpdCBpcyByZWFzb25hYmxlCisgICAgICB0byBhc3N1bWUgIHRoYXQgZm9ybWF0IDEgKGFuZCAgMykgd2VyZSBpbnRyb2R1Y2VkICBhZnRlciBBcHBsZSBoYWQKKyAgICAgIGludHJvZHVjZWQgR1ggYW5kIG1vdmVkIHRvIHRoZSBuZXcgMzJiaXQgdmVyc2lvbi4KKworICAgIDUtMi0zLiBBcHBsZSBhbmQgTWljcm9zb2Z0IGRpYWxlY3RzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgVGhlICBga2Vybicgc3VidGFibGUgIGhhcyAgYSAxNmJpdCAgYGNvdmVyYWdlJyAgZmllbGQgdG8gIGRlc2NyaWJlCisgICAgICBrZXJuaW5nIGF0dHJpYnV0ZXMsIGJ1dCBiaXQgaW50ZXJwcmV0YXRpb25zIGJ5IEFwcGxlIGFuZCBNaWNyb3NvZnQKKyAgICAgIGFyZSBkaWZmZXJlbnQ6ICBGb3IgZXhhbXBsZSwgQXBwbGUgIHVzZXMgYml0cyAwLTcgdG8gIGlkZW50aWZ5IHRoZQorICAgICAgc3VidGFibGUsIHdoaWxlIE1pY3Jvc29mdCB1c2VzIGJpdHMgOC0xNS4KKworICAgICAgSW4gIGFkZGl0aW9uLCBkdWUgIHRvIHRoZSAgb3V0cHV0IG9mICBEdW1wS0VSTiAgYW5kIEZvbnRWYWxpZGF0b3IsCisgICAgICBBcHBsZSdzIGJpdCBpbnRlcnByZXRhdGlvbnMgb2YgY292ZXJhZ2UgaW4gY2xhc3NpYyBhbmQgbmV3IHZlcnNpb24KKyAgICAgIGFyZSAgaW5jb21wYXRpYmxlIGFsc28uICAgSW4gIHN1bW1hcnksIHRoZXJlICBhcmUgdGhyZWUgIGRpYWxlY3RzOgorICAgICAgY2xhc3NpYyBBcHBsZSAgZGlhbGVjdCwgY2xhc3NpYyAgTWljcm9zb2Z0IGRpYWxlY3QsIGFuZCAgbmV3IEFwcGxlCisgICAgICBkaWFsZWN0LiAgVGhlIGNsYXNzaWMgTWljcm9zb2Z0ICBkaWFsZWN0IGFuZCB0aGUgbmV3IEFwcGxlIGRpYWxlY3QKKyAgICAgIGFyZSBkb2N1bWVudGVkICBieSBlYWNoIHZlbmRvcnMnIFRydWVUeXBlICBmb250IHNwZWNpZmljYXRpb24sIGJ1dAorICAgICAgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNsYXNzaWMgQXBwbGUgZGlhbGVjdCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgICBGb3IgZXhhbXBsZSwgIGluIHRoZSAgbmV3IEFwcGxlIGRpYWxlY3QsICBiaXQgMTUgaXMgIGRvY3VtZW50ZWQgYXMKKyAgICAgIGBzZXQgdG8gIDEgaWYgIHRoZSBrZXJuaW5nICBpcyB2ZXJ0aWNhbCcuICBPbiAgdGhlIG90aGVyICBoYW5kLCBpbgorICAgICAgY2xhc3NpYyBNaWNyb3NvZnQgZGlhbGVjdCwgYml0IDEgaXMgZG9jdW1lbnRlZCBhcyBgc2V0IHRvIDEgaWYgdGhlCisgICAgICBrZXJuaW5nICBpcyAgaG9yaXpvbnRhbCcuICAgRnJvbSAgIHRoZSAgb3V0cHV0cyAgb2YgIER1bXBLRVJOICBhbmQKKyAgICAgIEZvbnRWYWxpZGF0b3IsIGNsYXNzaWMgIEFwcGxlIGRpYWxlY3QgcmVjb2duaXplcyAgMTUgYXMgYHNldCAgdG8gMQorICAgICAgd2hlbiAgdGhlIGtlcm5pbmcgIGlzIGhvcml6b250YWwnLiAgIEZyb20gdGhlICByZXN1bHRzICBvZiBzaW1pbGFyCisgICAgICBleHBlcmltZW50cywgY2xhc3NpYyBBcHBsZSBkaWFsZWN0ICBzZWVtcyB0byBiZSB0aGUgRW5kaWFuIHJldmVyc2UKKyAgICAgIG9mIHRoZSBjbGFzc2ljIE1pY3Jvc29mdCBkaWFsZWN0LgorCisgICAgICBBcyBhICBjb25jbHVzaW9uIGl0IG11c3QgYmUgIG5vdGVkIHRoYXQgbm8gZm9udCAgdG9vbCBjYW4gaWRlbnRpZnkKKyAgICAgIGNsYXNzaWMgQXBwbGUgZGlhbGVjdCBvciBjbGFzc2ljIE1pY3Jvc29mdCBkaWFsZWN0IGF1dG9tYXRpY2FsbHkuCisKKyAgICA1LTItNC4gZ3h2YWxpZCBhdXRvIGRpYWxlY3QgZGV0ZWN0aW9uIGFsZ29yaXRobQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIFRoZSBmaXJzdCAxNiAgYml0cyBvZiB0aGUgYGtlcm4nIHRhYmxlIGFyZSAgZW5vdWdoIHRvIGlkZW50aWZ5IHRoZQorICAgICAgdmVyc2lvbjoKKworICAgICAgICAtIGlmICB0aGUgZmlyc3QgIDE2ICBiaXRzIGFyZSAgMHgwMDAwLCAgdGhlIGBrZXJuJyAgdGFibGUgaXMgIGluCisgICAgICAgICAgY2xhc3NpYyBBcHBsZSBkaWFsZWN0IG9yIGNsYXNzaWMgTWljcm9zb2Z0IGRpYWxlY3QKKyAgICAgICAgLSBpZiB0aGUgZmlyc3QgMTYgYml0cyBhcmUgIDB4MDAwMSwgYW5kIG5leHQgMTYgYml0cyBhcmUgMHgwMDAwLAorICAgICAgICAgIHRoZSBrZXJuIHRhYmxlIGlzIGluIG5ldyBBcHBsZSBkaWFsZWN0LgorCisgICAgICBJZiB0aGUgYGtlcm4nICB0YWJsZSBpcyBhIGNsYXNzaWMgb25lLCAgdGhlIDE2Yml0IGBjb3ZlcmFnZScgZmllbGQKKyAgICAgIGlzIGNoZWNrZWQgbmV4dC4gICBGaXJzdGx5LCB0aGUgY292ZXJhZ2UgYml0cyBhcmUgIGRlY29kZWQgZm9yIHRoZQorICAgICAgY2xhc3NpYyBBcHBsZSBkaWFsZWN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYml0IG1hc2tzICh0aGlzIGlzIGJhc2VkCisgICAgICBvbiBEdW1wS0VSTiBvdXRwdXQpOgorCisgICAgICAgIDB4ODAwMDogMT1ob3Jpem9udGFsLCAwPXZlcnRpY2FsCisgICAgICAgIDB4NDAwMDogbm90IHVzZWQKKyAgICAgICAgMHgyMDAwOiAxPWNyb3NzLXN0cmVhbSwgMD1ub3JtYWwKKyAgICAgICAgMHgxRkYwOiByZXNlcnZlZAorICAgICAgICAweDAwMEY6IHN1YnRhYmxlIGZvcm1hdAorCisgICAgICBJZiAgYW55ICBvZiAgcmVzZXJ2ZWQgIGJpdHMgIGFyZSAgc2V0ICBvciAgdGhlICBzdWJ0YWJsZSAgYml0cyAgaXMKKyAgICAgIGludGVycHJldGVkIGFzIGZvcm1hdCAxIG9yIDMsIHdlIHRha2UgaXQgYXMgYGltcG9zc2libGUgaW4gY2xhc3NpYworICAgICAgQXBwbGUgZGlhbGVjdCcgYW5kIHJldHJ5LCB1c2luZyB0aGUgY2xhc3NpYyBNaWNyb3NvZnQgZGlhbGVjdC4KKworICAgICAgICBUaGUgbW9zdCBwb3B1bGFyIGNvdmVyYWdlIGluIG5ldyBBcHBsZS1kaWFsZWN0OiAgICAgICAgIDB4ODAwMCwKKyAgICAgICAgVGhlIG1vc3QgcG9wdWxhciBjb3ZlcmFnZSBpbiBjbGFzc2ljIEFwcGxlLWRpYWxlY3Q6ICAgICAweDAwMDAsCisgICAgICAgIFRoZSBtb3N0IHBvcHVsYXIgY292ZXJhZ2UgaW4gY2xhc3NpYyBNaWNyb3NvZnQgZGlhbGVjdDogMHgwMDAxLgorCisgIDUtMy4gVGVzdGVkIGZvbnRzCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBXZSBjaGVja2VkICA1OSBmb250cyAgYnVuZGxlZCB3aXRoIE1hY09TICBhbmQgMzggZm9udHMgIGJ1bmRsZWQgd2l0aAorICAgIFdpbmRvd3MsIHdoZXJlIGFsbCBmb250IGluY2x1ZGUgYSBga2VybicgdGFibGUuCisKKyAgICAgIC0gZm9udHMgYnVuZGxlZCB3aXRoIE1hY09TCisgICAgICAgICogbmV3IEFwcGxlIGRpYWxlY3QKKyAgICAgICAgICBmb3JtYXQgMDogMTgKKyAgICAgICAgICBmb3JtYXQgMjogIDEKKyAgICAgICAgICBmb3JtYXQgMzogIDEKKyAgICAgICAgKiBjbGFzc2ljIEFwcGxlIGRpYWxlY3QKKyAgICAgICAgICBmb3JtYXQgMDogMTQKKyAgICAgICAgKiBjbGFzc2ljIE1pY3Jvc29mdCBkaWFsZWN0CisgICAgICAgICAgZm9ybWF0IDA6IDE1CisKKyAgICAgIC0gZm9udHMgYnVuZGxlZCB3aXRoIFdpbmRvd3MKKyAgICAgICAgKiBjbGFzc2ljIE1pY3Jvc29mdCBkaWFsZWN0CisgICAgICAgICAgZm9ybWF0IDA6IDM4CisKKyAgICBJdCBsb29rcyBzdHJhbmdlIHRoYXQgY2xhc3NpYyBNaWNyb3NvZnQtZGlhbGVjdCBmb250cyBhcmUgYnVuZGxlZCB0bworICAgIE1hY09TOiB0aGV5IGNvbWUgZnJvbSBNU0lFIGZvciBNYWNPUywgZXhjZXB0IG9mIE1hcmtlckZlbHQuZGZvbnQuCisKKworICBBQ0tOT1dMRURHRU1FTlQKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgU29tZSBwYXJ0cyBvZiBneHZhbGlkIGFyZSAgZGVyaXZlZCBmcm9tIGJvdGggdGhlIGBneGxheW91dCcgbW9kdWxlIGFuZAorICB0aGUgYG90dmFsaWQnICBtb2R1bGUuICBEZXZlbG9wbWVudCBvZiAgZ3hsYXlvdXQgd2FzIHN1cHBvcnRlZCAgYnkgdGhlCisgIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKworICBUaGUgZGV0YWlsZWQgYW5hbHlzaXMgb2YgdW5kZWZpbmVkICBnbHlwaCBJRCB1dGlsaXphdGlvbiBpbiBgbW9ydCcgYW5kCisgIGBtb3J4JyB0YWJsZXMgaXMgcHJvdmlkZWQgYnkgR2VvcmdlIFdpbGxpYW1zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDQtMjAxNSBieQorc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIGhhdCBLLksuLAorRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorCitUaGlzICBmaWxlIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSAgb25seSBiZSAgdXNlZCwKK21vZGlmaWVkLCAgYW5kICBkaXN0cmlidXRlZCB1bmRlciAgdGhlICB0ZXJtcyAgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdAorbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nICB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzCitmaWxlICB5b3UgaW5kaWNhdGUgdGhhdCAgeW91IGhhdmUgIHJlYWQgdGhlICBsaWNlbnNlIGFuZCAgdW5kZXJzdGFuZCBhbmQKK2FjY2VwdCBpdCBmdWxseS4KKworCistLS0gZW5kIG9mIFJFQURNRSAtLS0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZhbGlkLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dmFsaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB2YWxpZGF0b3IgZm9yIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoYm9keSBvbmx5KS4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlICJneHZmZWF0LmMiCisjaW5jbHVkZSAiZ3h2Y29tbW4uYyIKKyNpbmNsdWRlICJneHZic2xuLmMiCisjaW5jbHVkZSAiZ3h2dHJhay5jIgorI2luY2x1ZGUgImd4dmp1c3QuYyIKKyNpbmNsdWRlICJneHZtb3J0LmMiCisjaW5jbHVkZSAiZ3h2bW9ydDAuYyIKKyNpbmNsdWRlICJneHZtb3J0MS5jIgorI2luY2x1ZGUgImd4dm1vcnQyLmMiCisjaW5jbHVkZSAiZ3h2bW9ydDQuYyIKKyNpbmNsdWRlICJneHZtb3J0NS5jIgorI2luY2x1ZGUgImd4dm1vcnguYyIKKyNpbmNsdWRlICJneHZtb3J4MC5jIgorI2luY2x1ZGUgImd4dm1vcngxLmMiCisjaW5jbHVkZSAiZ3h2bW9yeDIuYyIKKyNpbmNsdWRlICJneHZtb3J4NC5jIgorI2luY2x1ZGUgImd4dm1vcng1LmMiCisjaW5jbHVkZSAiZ3h2a2Vybi5jIgorI2luY2x1ZGUgImd4dm9wYmQuYyIKKyNpbmNsdWRlICJneHZwcm9wLmMiCisjaW5jbHVkZSAiZ3h2bGNhci5jIgorI2luY2x1ZGUgImd4dm1vZC5jIgorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmFsaWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZhbGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyMjdkMAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZhbGlkLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dmFsaWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHllZUdYL0FBVCB0YWJsZSB2YWxpZGF0aW9uIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19HWFZBTElEX0hfXworI2RlZmluZSBfX0dYVkFMSURfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaW5jbHVkZSAiZ3h2ZXJyb3IuaCIgICAgICAgICAgLyogbXVzdCBjb21lIGJlZm9yZSBGVF9JTlRFUk5BTF9WQUxJREFURV9IICovCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9mZWF0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfYnNsbl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X3RyYWtfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfanVzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X21vcnhfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfa2Vybl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9rZXJuX3ZhbGlkYXRlX2NsYXNzaWMoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBkaWFsZWN0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfb3BiZF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9wcm9wX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X2xjYXJfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0dYVkFMSURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmJzbG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE3YTVkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmJzbG4uYwpAQCAtMCwwICsxLDMzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2YnNsbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIGJzbG4gdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmFsaWQuaCIKKyNpbmNsdWRlICJneHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2YnNsbgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERhdGEgYW5kIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR1hWX0JTTE5fVkFMVUVfQ09VTlQgIDMyCisjZGVmaW5lIEdYVl9CU0xOX1ZBTFVFX0VNUFRZICAweEZGRkZVCisKKworICB0eXBlZGVmIHN0cnVjdCAgR1hWX2JzbG5fRGF0YVJlY18KKyAgeworICAgIEZUX0J5dGVzICAgY3RsUG9pbnRzX3A7CisgICAgRlRfVVNob3J0ICBkZWZhdWx0QmFzZWxpbmU7CisKKyAgfSBHWFZfYnNsbl9EYXRhUmVjLCAqR1hWX2JzbG5fRGF0YTsKKworCisjZGVmaW5lIEdYVl9CU0xOX0RBVEEoIGZpZWxkICkgIEdYVl9UQUJMRV9EQVRBKCBic2xuLCBmaWVsZCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBneHZfYnNsbl9Mb29rdXBWYWx1ZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgICAgICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICB2YWx1ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9VU2hvcnQgICAgIHYgPSB2YWx1ZV9wLT51OworICAgIEZUX1VTaG9ydCogICAgY3RsUG9pbnRzOworCisgICAgRlRfVU5VU0VEKCBnbHlwaCApOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImxvb2t1cCB2YWx1ZSIgKTsKKworICAgIGlmICggdiA+PSBHWFZfQlNMTl9WQUxVRV9DT1VOVCApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBjdGxQb2ludHMgPSAoRlRfVVNob3J0KilHWFZfQlNMTl9EQVRBKCBjdGxQb2ludHNfcCApOworICAgIGlmICggY3RsUG9pbnRzICYmIGN0bFBvaW50c1t2XSA9PSBHWFZfQlNMTl9WQUxVRV9FTVBUWSApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoKKyAgICArPT09PT09PT09PT09PT09KyAtLS0tLS0tLSsKKyAgICB8IGxvb2t1cCBoZWFkZXIgfCAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICB8IEJpblNyY2hIZWFkZXIgfCAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICB8IGxhc3RHbHlwaFswXSAgfCAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8IGZpcnN0R2x5cGhbMF0gfCAgICAgICAgIHwgICAgaGVhZCBvZiBsb29rdXAgdGFibGUKKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwgICAgICAgICAgICAgKworICAgIHwgb2Zmc2V0WzBdICAgICB8ICAgIC0+ICAgfCAgICAgICAgICBvZmZzZXQgICAgICAgICAgICBbYnl0ZV0KKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwgICAgICAgICAgICAgKworICAgIHwgbGFzdEdseXBoWzFdICB8ICAgICAgICAgfCAoZ2x5cGhJRCAtIGZpcnN0R2x5cGgpICogMiBbYnl0ZV0KKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8IGZpcnN0R2x5cGhbMV0gfCAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8IG9mZnNldFsxXSAgICAgfCAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAxNmJpdCB2YWx1ZSBhcnJheSAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICB8ICAgICB2YWx1ZSAgICAgfCA8LS0tLS0tLSsKKyAgICAuLi4KKyAgKi8KKworICBzdGF0aWMgR1hWX0xvb2t1cFZhbHVlRGVzYworICBneHZfYnNsbl9Mb29rdXBGbXQ0X3RyYW5zaXQoIEZUX1VTaG9ydCAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICBiYXNlX3ZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgICAgICAgbG9va3VwdGJsX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgcDsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBsaW1pdDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBvZmZzZXQ7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKyAgICAvKiBYWFg6IGNoZWNrIHJhbmdlID8gKi8KKyAgICBvZmZzZXQgPSAoRlRfVVNob3J0KSggYmFzZV92YWx1ZV9wLT51ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCByZWxhdGl2ZV9naW5kZXggKiBzaXplb2YgKCBGVF9VU2hvcnQgKSApICk7CisKKyAgICBwICAgICA9IGd4dmFsaWQtPmxvb2t1cHRibF9oZWFkICsgb2Zmc2V0OworICAgIGxpbWl0ID0gbG9va3VwdGJsX2xpbWl0OworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworCisgICAgdmFsdWUudSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICByZXR1cm4gdmFsdWU7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9ic2xuX3BhcnRzX2ZtdDBfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZXM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAicGFydHMgZm9ybWF0IDAiICk7CisKKyAgICAvKiBkZWx0YXMgKi8KKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKiBHWFZfQlNMTl9WQUxVRV9DT1VOVCApOworCisgICAgZ3h2YWxpZC0+dGFibGVfZGF0YSA9IE5VTEw7ICAgICAgLyogTm8gY3RsUG9pbnRzIGhlcmUuICovCisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2JzbG5fcGFydHNfZm10MV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlczsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJwYXJ0cyBmb3JtYXQgMSIgKTsKKworICAgIC8qIGRlbHRhcyAqLworICAgIGd4dl9ic2xuX3BhcnRzX2ZtdDBfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICAvKiBtYXBwaW5nRGF0YSAqLworICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9zaWduICAgPSBHWFZfTE9PS1VQVkFMVUVfVU5TSUdORUQ7CisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX2Z1bmMgICA9IGd4dl9ic2xuX0xvb2t1cFZhbHVlX3ZhbGlkYXRlOworICAgIGd4dmFsaWQtPmxvb2t1cGZtdDRfdHJhbnMgPSBneHZfYnNsbl9Mb29rdXBGbXQ0X3RyYW5zaXQ7CisgICAgZ3h2X0xvb2t1cFRhYmxlX3ZhbGlkYXRlKCBwICsgMiAqIEdYVl9CU0xOX1ZBTFVFX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2JzbG5fcGFydHNfZm10Ml92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZXM7CisKKyAgICBGVF9VU2hvcnQgIHN0ZEdseXBoOworICAgIEZUX1VTaG9ydCAgY3RsUG9pbnQ7CisgICAgRlRfSW50ICAgICBpOworCisgICAgRlRfVVNob3J0ICBkZWZhdWx0QmFzZWxpbmUgPSBHWFZfQlNMTl9EQVRBKCBkZWZhdWx0QmFzZWxpbmUgKTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJwYXJ0cyBmb3JtYXQgMiIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArICggMiAqIEdYVl9CU0xOX1ZBTFVFX0NPVU5UICkgKTsKKworICAgIC8qIHN0ZEdseXBoICovCisgICAgc3RkR2x5cGggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEdYVl9UUkFDRSgoICIgKHN0ZEdseXBoID0gJXUpXG4iLCBzdGRHbHlwaCApKTsKKworICAgIGd4dl9nbHlwaGlkX3ZhbGlkYXRlKCBzdGRHbHlwaCwgZ3h2YWxpZCApOworCisgICAgLyogUmVjb3JkIHRoZSBwb3NpdGlvbiBvZiBjdGxQb2ludHMgKi8KKyAgICBHWFZfQlNMTl9EQVRBKCBjdGxQb2ludHNfcCApID0gcDsKKworICAgIC8qIGN0bFBvaW50cyAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgR1hWX0JTTE5fVkFMVUVfQ09VTlQ7IGkrKyApCisgICAgeworICAgICAgY3RsUG9pbnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgaWYgKCBjdGxQb2ludCA9PSBHWFZfQlNMTl9WQUxVRV9FTVBUWSApCisgICAgICB7CisgICAgICAgIGlmICggaSA9PSBkZWZhdWx0QmFzZWxpbmUgKQorICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZ3h2X2N0bFBvaW50X3ZhbGlkYXRlKCBzdGRHbHlwaCwgY3RsUG9pbnQsIGd4dmFsaWQgKTsKKyAgICB9CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2JzbG5fcGFydHNfZm10M192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGVzOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggInBhcnRzIGZvcm1hdCAzIiApOworCisgICAgLyogc3RkR2x5cGggKyBjdGxQb2ludHMgKi8KKyAgICBneHZfYnNsbl9wYXJ0c19mbXQyX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgLyogbWFwcGluZ0RhdGEgKi8KKyAgICBneHZhbGlkLT5sb29rdXB2YWxfc2lnbiAgID0gR1hWX0xPT0tVUFZBTFVFX1VOU0lHTkVEOworICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9mdW5jICAgPSBneHZfYnNsbl9Mb29rdXBWYWx1ZV92YWxpZGF0ZTsKKyAgICBneHZhbGlkLT5sb29rdXBmbXQ0X3RyYW5zID0gZ3h2X2JzbG5fTG9va3VwRm10NF90cmFuc2l0OworICAgIGd4dl9Mb29rdXBUYWJsZV92YWxpZGF0ZSggcCArICggMiArIDIgKiBHWFZfQlNMTl9WQUxVRV9DT1VOVCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIGJzbG4gVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X2JzbG5fdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIGZ0dmFsaWQgKQorICB7CisgICAgR1hWX1ZhbGlkYXRvclJlYyAgZ3h2YWxpZHJlYzsKKyAgICBHWFZfVmFsaWRhdG9yICAgICBneHZhbGlkID0gJmd4dmFsaWRyZWM7CisKKyAgICBHWFZfYnNsbl9EYXRhUmVjICBic2xucmVjOworICAgIEdYVl9ic2xuX0RhdGEgICAgIGJzbG4gPSAmYnNsbnJlYzsKKworICAgIEZUX0J5dGVzICBwICAgICA9IHRhYmxlOworICAgIEZUX0J5dGVzICBsaW1pdCA9IDA7CisKKyAgICBGVF9VTG9uZyAgIHZlcnNpb247CisgICAgRlRfVVNob3J0ICBmb3JtYXQ7CisgICAgRlRfVVNob3J0ICBkZWZhdWx0QmFzZWxpbmU7CisKKyAgICBHWFZfVmFsaWRhdGVfRnVuYyAgZm10X2Z1bmNzX3RhYmxlIFtdID0KKyAgICB7CisgICAgICBneHZfYnNsbl9wYXJ0c19mbXQwX3ZhbGlkYXRlLAorICAgICAgZ3h2X2JzbG5fcGFydHNfZm10MV92YWxpZGF0ZSwKKyAgICAgIGd4dl9ic2xuX3BhcnRzX2ZtdDJfdmFsaWRhdGUsCisgICAgICBneHZfYnNsbl9wYXJ0c19mbXQzX3ZhbGlkYXRlLAorICAgIH07CisKKworICAgIGd4dmFsaWQtPnJvb3QgICAgICAgPSBmdHZhbGlkOworICAgIGd4dmFsaWQtPnRhYmxlX2RhdGEgPSBic2xuOworICAgIGd4dmFsaWQtPmZhY2UgICAgICAgPSBmYWNlOworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgYGJzbG4nIHRhYmxlXG4iICkpOworICAgIEdYVl9JTklUOworCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDQgKyAyICsgMiApOworICAgIHZlcnNpb24gICAgICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBmb3JtYXQgICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGRlZmF1bHRCYXNlbGluZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAvKiBvbmx5IHZlcnNpb24gMS4wIGlzIGRlZmluZWQgKDE5OTYpICovCisgICAgaWYgKCB2ZXJzaW9uICE9IDB4MDAwMTAwMDBVTCApCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIC8qIG9ubHkgZm9ybWF0IDEsIDIsIDMgYXJlIGRlZmluZWQgKDE5OTYpICovCisgICAgR1hWX1RSQUNFKCggIiAoZm9ybWF0ID0gJWQpXG4iLCBmb3JtYXQgKSk7CisgICAgaWYgKCBmb3JtYXQgPiAzICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgaWYgKCBkZWZhdWx0QmFzZWxpbmUgPiAzMSApCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIGJzbG4tPmRlZmF1bHRCYXNlbGluZSA9IGRlZmF1bHRCYXNlbGluZTsKKworICAgIGZtdF9mdW5jc190YWJsZVtmb3JtYXRdKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKyAgfQorCisKKy8qIGFyY2gtdGFnOiBlYmU4MTE0My1mZGFhLTRjNjgtYTRkMS1iNTcyMjdkYWEzYmMKKyAgIChkbyBub3QgY2hhbmdlIHRoaXMgY29tbWVudCkgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZjb21tbi5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmNvbW1uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmNmZmYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZjb21tbi5jCkBAIC0wLDAgKzEsMTc1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2Y29tbW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmNvbW1uLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZjb21tb24KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgMTZiaXQgb2Zmc2V0IHNvcnRlciAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyBpbnQKKyAgZ3h2X2NvbXBhcmVfdXNob3J0X29mZnNldCggRlRfVVNob3J0KiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgYiApCisgIHsKKyAgICBpZiAoICphIDwgKmIgKQorICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKCAqYSA+ICpiICkKKyAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfc2V0X2xlbmd0aF9ieV91c2hvcnRfb2Zmc2V0KCBGVF9VU2hvcnQqICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCoqICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX1VJbnQgIGk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbm1lbWI7IGkrKyApCisgICAgICAqKGxlbmd0aFtpXSkgPSAwOworCisgICAgZm9yICggaSA9IDA7IGkgPCBubWVtYjsgaSsrICkKKyAgICAgIGJ1ZmZbaV0gPSBvZmZzZXRbaV07CisgICAgYnVmZltubWVtYl0gPSBsaW1pdDsKKworICAgIGZ0X3Fzb3J0KCBidWZmLCAoIG5tZW1iICsgMSApLCBzaXplb2YgKCBGVF9VU2hvcnQgKSwKKyAgICAgICAgICAgICAgKCBpbnQoKikoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKSApZ3h2X2NvbXBhcmVfdXNob3J0X29mZnNldCApOworCisgICAgaWYgKCBidWZmW25tZW1iXSA+IGxpbWl0ICkKKyAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgZm9yICggaSA9IDA7IGkgPCBubWVtYjsgaSsrICkKKyAgICB7CisgICAgICBGVF9VSW50ICBqOworCisKKyAgICAgIGZvciAoIGogPSAwOyBqIDwgbm1lbWI7IGorKyApCisgICAgICAgIGlmICggYnVmZltqXSA9PSBvZmZzZXRbaV0gKQorICAgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIGogPT0gbm1lbWIgKQorICAgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKworICAgICAgKihsZW5ndGhbaV0pID0gKEZUX1VTaG9ydCkoIGJ1ZmZbaiArIDFdIC0gYnVmZltqXSApOworCisgICAgICBpZiAoIDAgIT0gb2Zmc2V0W2ldICYmIDAgPT0gKihsZW5ndGhbaV0pICkKKyAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIDMyYml0IG9mZnNldCBzb3J0ZXIgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgaW50CisgIGd4dl9jb21wYXJlX3Vsb25nX29mZnNldCggRlRfVUxvbmcqICBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgYiApCisgIHsKKyAgICBpZiAoICphIDwgKmIgKQorICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKCAqYSA+ICpiICkKKyAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfc2V0X2xlbmd0aF9ieV91bG9uZ19vZmZzZXQoIEZUX1VMb25nKiAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyoqICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBubWVtYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkKQorICB7CisgICAgRlRfVUludCAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBubWVtYjsgaSsrICkKKyAgICAgICoobGVuZ3RoW2ldKSA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5tZW1iOyBpKysgKQorICAgICAgYnVmZltpXSA9IG9mZnNldFtpXTsKKyAgICBidWZmW25tZW1iXSA9IGxpbWl0OworCisgICAgZnRfcXNvcnQoIGJ1ZmYsICggbm1lbWIgKyAxICksIHNpemVvZiAoIEZUX1VMb25nICksCisgICAgICAgICAgICAgICggaW50KCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikgKWd4dl9jb21wYXJlX3Vsb25nX29mZnNldCApOworCisgICAgaWYgKCBidWZmW25tZW1iXSA+IGxpbWl0ICkKKyAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgZm9yICggaSA9IDA7IGkgPCBubWVtYjsgaSsrICkKKyAgICB7CisgICAgICBGVF9VSW50ICBqOworCisKKyAgICAgIGZvciAoIGogPSAwOyBqIDwgbm1lbWI7IGorKyApCisgICAgICAgIGlmICggYnVmZltqXSA9PSBvZmZzZXRbaV0gKQorICAgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIGogPT0gbm1lbWIgKQorICAgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKworICAgICAgKihsZW5ndGhbaV0pID0gYnVmZltqICsgMV0gLSBidWZmW2pdOworCisgICAgICBpZiAoIDAgIT0gb2Zmc2V0W2ldICYmIDAgPT0gKihsZW5ndGhbaV0pICkKKyAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICBzY2FuIHZhbHVlIGFycmF5IGFuZCBnZXQgbWluICYgbWF4ICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9hcnJheV9nZXRsaW1pdHNfYnl0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgbWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgIG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKworICAgICptaW4gPSAweEZGOworICAgICptYXggPSAweDAwOworCisgICAgd2hpbGUgKCBwIDwgbGltaXQgKQorICAgIHsKKyAgICAgIEZUX0J5dGUgIHZhbDsKKworCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDEgKTsKKyAgICAgIHZhbCA9IEZUX05FWFRfQllURSggcCApOworCisgICAgICAqbWluID0gKEZUX0J5dGUpRlRfTUlOKCAqbWluLCB2YWwgKTsKKyAgICAgICptYXggPSAoRlRfQnl0ZSlGVF9NQVgoICptYXgsIHZhbCApOworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfYXJyYXlfZ2V0bGltaXRzX3VzaG9ydCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworCisgICAgKm1pbiA9IDB4RkZGRlU7CisgICAgKm1heCA9IDB4MDAwMDsKKworICAgIHdoaWxlICggcCA8IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9VU2hvcnQgIHZhbDsKKworCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgIHZhbCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICptaW4gPSAoRlRfQnl0ZSlGVF9NSU4oICptaW4sIHZhbCApOworICAgICAgKm1heCA9IChGVF9CeXRlKUZUX01BWCggKm1heCwgdmFsICk7CisgICAgfQorCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgQklOU0VBUkNISEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfQmluU3JjaEhlYWRlcl8KKyAgeworICAgIEZUX1VTaG9ydCAgdW5pdFNpemU7CisgICAgRlRfVVNob3J0ICBuVW5pdHM7CisgICAgRlRfVVNob3J0ICBzZWFyY2hSYW5nZTsKKyAgICBGVF9VU2hvcnQgIGVudHJ5U2VsZWN0b3I7CisgICAgRlRfVVNob3J0ICByYW5nZVNoaWZ0OworCisgIH0gR1hWX0JpblNyY2hIZWFkZXI7CisKKworICBzdGF0aWMgdm9pZAorICBneHZfQmluU3JjaEhlYWRlcl9jaGVja19jb25zaXN0ZW5jeSggR1hWX0JpblNyY2hIZWFkZXIqICBiaW5TcmNoSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICBneHZhbGlkICkKKyAgeworICAgIEZUX1VTaG9ydCAgc2VhcmNoUmFuZ2U7CisgICAgRlRfVVNob3J0ICBlbnRyeVNlbGVjdG9yOworICAgIEZUX1VTaG9ydCAgcmFuZ2VTaGlmdDsKKworCisgICAgaWYgKCBiaW5TcmNoSGVhZGVyLT51bml0U2l6ZSA9PSAwICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIGlmICggYmluU3JjaEhlYWRlci0+blVuaXRzID09IDAgKQorICAgIHsKKyAgICAgIGlmICggYmluU3JjaEhlYWRlci0+c2VhcmNoUmFuZ2UgICA9PSAwICYmCisgICAgICAgICAgIGJpblNyY2hIZWFkZXItPmVudHJ5U2VsZWN0b3IgPT0gMCAmJgorICAgICAgICAgICBiaW5TcmNoSGVhZGVyLT5yYW5nZVNoaWZ0ICAgID09IDAgKQorICAgICAgICByZXR1cm47CisgICAgICBlbHNlCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICB9CisKKyAgICBmb3IgKCBzZWFyY2hSYW5nZSA9IDEsIGVudHJ5U2VsZWN0b3IgPSAxOworICAgICAgICAgICggc2VhcmNoUmFuZ2UgKiAyICkgPD0gYmluU3JjaEhlYWRlci0+blVuaXRzICYmCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA8IDB4ODAwMFU7CisgICAgICAgICAgc2VhcmNoUmFuZ2UgKj0gMiwgZW50cnlTZWxlY3RvcisrICkKKyAgICAgIDsKKworICAgIGVudHJ5U2VsZWN0b3ItLTsKKyAgICBzZWFyY2hSYW5nZSA9IChGVF9VU2hvcnQpKCBzZWFyY2hSYW5nZSAqIGJpblNyY2hIZWFkZXItPnVuaXRTaXplICk7CisgICAgcmFuZ2VTaGlmdCAgPSAoRlRfVVNob3J0KSggYmluU3JjaEhlYWRlci0+blVuaXRzICogYmluU3JjaEhlYWRlci0+dW5pdFNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlYXJjaFJhbmdlICk7CisKKyAgICBpZiAoIHNlYXJjaFJhbmdlICAgIT0gYmluU3JjaEhlYWRlci0+c2VhcmNoUmFuZ2UgICB8fAorICAgICAgICAgZW50cnlTZWxlY3RvciAhPSBiaW5TcmNoSGVhZGVyLT5lbnRyeVNlbGVjdG9yIHx8CisgICAgICAgICByYW5nZVNoaWZ0ICAgICE9IGJpblNyY2hIZWFkZXItPnJhbmdlU2hpZnQgICAgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICJJbmNvbnNpc3RlbmN5IGZvdW5kIGluIEJpblNyY2hIZWFkZXJcbiIgKSk7CisgICAgICBHWFZfVFJBQ0UoKCAib3JpZ2luYWxseTogdW5pdFNpemU9JWQsIG5Vbml0cz0lZCwgIgorICAgICAgICAgICAgICAgICAgInNlYXJjaFJhbmdlPSVkLCBlbnRyeVNlbGVjdG9yPSVkLCAiCisgICAgICAgICAgICAgICAgICAicmFuZ2VTaGlmdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgIGJpblNyY2hIZWFkZXItPnVuaXRTaXplLCBiaW5TcmNoSGVhZGVyLT5uVW5pdHMsCisgICAgICAgICAgICAgICAgICBiaW5TcmNoSGVhZGVyLT5zZWFyY2hSYW5nZSwgYmluU3JjaEhlYWRlci0+ZW50cnlTZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgIGJpblNyY2hIZWFkZXItPnJhbmdlU2hpZnQgKSk7CisgICAgICBHWFZfVFJBQ0UoKCAiY2FsY3VsYXRlZDogdW5pdFNpemU9JWQsIG5Vbml0cz0lZCwgIgorICAgICAgICAgICAgICAgICAgInNlYXJjaFJhbmdlPSVkLCBlbnRyeVNlbGVjdG9yPSVkLCAiCisgICAgICAgICAgICAgICAgICAicmFuZ2VTaGlmdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgIGJpblNyY2hIZWFkZXItPnVuaXRTaXplLCBiaW5TcmNoSGVhZGVyLT5uVW5pdHMsCisgICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZSwgZW50cnlTZWxlY3RvciwgcmFuZ2VTaGlmdCApKTsKKworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfREFUQSApOworICAgIH0KKyAgfQorCisKKyAgLyoKKyAgICogcGFyc2VyICYgdmFsaWRhdG9yIG9mIEJpblNyY2hIZWFkZXIKKyAgICogd2hpY2ggaXMgdXNlZCBpbiBMb29rdXBUYWJsZSBmb3JtYXQgMiwgNCwgNi4KKyAgICoKKyAgICogRXNzZW50aWFsIHBhcmFtZXRlcnMgKHVuaXRTaXplLCBuVW5pdHMpIGFyZSByZXR1cm5lZCBieQorICAgKiBnaXZlbiBwb2ludGVyLCBvdGhlcnMgKHNlYXJjaFJhbmdlLCBlbnRyeVNlbGVjdG9yLCByYW5nZVNoaWZ0KQorICAgKiBjYW4gYmUgY2FsY3VsYXRlZCBieSBlc3NlbnRpYWwgcGFyYW1ldGVycywgc28gdGhleSBhcmUganVzdAorICAgKiB2YWxpZGF0ZWQgYW5kIGRpc2NhcmRlZC4KKyAgICoKKyAgICogSG93ZXZlciwgd3JvbmcgdmFsdWVzIGluIHNlYXJjaFJhbmdlLCBlbnRyeVNlbGVjdG9yLCByYW5nZVNoaWZ0CisgICAqIHdvbid0IGNhdXNlIGZhdGFsIGVycm9ycywgYmVjYXVzZSB0aGVzZSBwYXJhbWV0ZXJzIG1pZ2h0IGJlCisgICAqIG9ubHkgdXNlZCBpbiBvbGQgbTY4ayBmb250IGRyaXZlciBpbiBNYWNPUy4KKyAgICogICAtLSBzdXp1a2kgdG9zaGl5YSA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9CaW5TcmNoSGVhZGVyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgdW5pdFNpemVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG5Vbml0c19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgcCA9IHRhYmxlOworICAgIEdYVl9CaW5TcmNoSGVhZGVyICBiaW5TcmNoSGVhZGVyOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIkJpblNyY2hIZWFkZXIgdmFsaWRhdGUiICk7CisKKyAgICBpZiAoICp1bml0U2l6ZV9wID09IDAgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgYmluU3JjaEhlYWRlci51bml0U2l6ZSA9ICBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIH0KKyAgICBlbHNlCisgICAgICBiaW5TcmNoSGVhZGVyLnVuaXRTaXplID0gKnVuaXRTaXplX3A7CisKKyAgICBpZiAoICpuVW5pdHNfcCA9PSAwICkKKyAgICB7CisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgIGJpblNyY2hIZWFkZXIublVuaXRzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgYmluU3JjaEhlYWRlci5uVW5pdHMgPSAqblVuaXRzX3A7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgMiApOworICAgIGJpblNyY2hIZWFkZXIuc2VhcmNoUmFuZ2UgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgYmluU3JjaEhlYWRlci5lbnRyeVNlbGVjdG9yID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBiaW5TcmNoSGVhZGVyLnJhbmdlU2hpZnQgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEdYVl9UUkFDRSgoICJuVW5pdHMgJWRcbiIsIGJpblNyY2hIZWFkZXIublVuaXRzICkpOworCisgICAgZ3h2X0JpblNyY2hIZWFkZXJfY2hlY2tfY29uc2lzdGVuY3koICZiaW5TcmNoSGVhZGVyLCBneHZhbGlkICk7CisKKyAgICBpZiAoICp1bml0U2l6ZV9wID09IDAgKQorICAgICAgKnVuaXRTaXplX3AgPSBiaW5TcmNoSGVhZGVyLnVuaXRTaXplOworCisgICAgaWYgKCAqblVuaXRzX3AgPT0gMCApCisgICAgICAqblVuaXRzX3AgPSBiaW5TcmNoSGVhZGVyLm5Vbml0czsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICAgIEdYVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBHWFZfTE9PS1VQX1ZBTFVFX0xPQUQoIFAsIFNJR05TUEVDICkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggUCArPSAyLCBneHZfbG9va3VwX3ZhbHVlX2xvYWQoIFAgLSAyLCBTSUdOU1BFQyApICkKKworICBzdGF0aWMgR1hWX0xvb2t1cFZhbHVlRGVzYworICBneHZfbG9va3VwX3ZhbHVlX2xvYWQoIEZUX0J5dGVzICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBzaWduc3BlYyApCisgIHsKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2OworCisKKyAgICBpZiAoIHNpZ25zcGVjID09IEdYVl9MT09LVVBWQUxVRV9VTlNJR05FRCApCisgICAgICB2LnUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGVsc2UKKyAgICAgIHYucyA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKworICAgIHJldHVybiB2OworICB9CisKKworI2RlZmluZSBHWFZfVU5JVFNJWkVfVkFMSURBVEUoIEZPUk1BVCwgVU5JVFNJWkUsIE5VTklUUywgQ09SUkVDVFNJWkUgKSBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggVU5JVFNJWkUgIT0gQ09SUkVDVFNJWkUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZUX0VSUk9SKCggInVuaXRTaXplPSVkIGRpZmZlcnMgZnJvbSIgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGV4cGVjdGVkIHVuaXRTaXplPSVkIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gTG9va3VwVGFibGUgJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRTSVpFLCBDT1JSRUNUU0laRSwgRk9STUFUICkpOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCBVTklUU0laRSAhPSAwICYmIE5VTklUUyAhPSAwICkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiIGNhbm5vdCB2YWxpZGF0ZSBhbnltb3JlXG4iICkpOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9FUlJPUigoICIgZm9yY2libHkgY29udGludWVzXG4iICkpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKKworICAvKiA9PT09PT09PT09PT09PT09PSBTaW1wbGUgQXJyYXkgRm9ybWF0IDAgTG9va3VwIFRhYmxlID09PT09PT09PT09PT09PT0gKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDBfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworICAgIEZUX1VTaG9ydCAgaTsKKworICAgIEdYVl9Mb29rdXBWYWx1ZURlc2MgIHZhbHVlOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIkxvb2t1cFRhYmxlIGZvcm1hdCAwIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICogZ3h2YWxpZC0+ZmFjZS0+bnVtX2dseXBocyApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzOyBpKysgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgaWYgKCBwICsgMiA+PSBsaW1pdCApICAgICAvKiBzb21lIGZvbnRzIGhhdmUgdG9vLXNob3J0IGZtdDAgYXJyYXkgKi8KKyAgICAgIHsKKyAgICAgICAgR1hWX1RSQUNFKCggInRvbyBzaG9ydCwgZ2x5cGhzICVkIC0gJWQgYXJlIG1pc3NpbmdcbiIsCisgICAgICAgICAgICAgICAgICAgIGksIGd4dmFsaWQtPmZhY2UtPm51bV9nbHlwaHMgKSk7CisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0dMWVBIX0lEICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICB2YWx1ZSA9IEdYVl9MT09LVVBfVkFMVUVfTE9BRCggcCwgZ3h2YWxpZC0+bG9va3VwdmFsX3NpZ24gKTsKKyAgICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9mdW5jKCBpLCAmdmFsdWUsIGd4dmFsaWQgKTsKKyAgICB9CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyogPT09PT09PT09PT09PT09PT0gU2VnbWVudCBTaW5nbGUgRm9ybWF0IDIgTG9vbHVwIFRhYmxlID09PT09PT09PT09PT09ICovCisgIC8qCisgICAqIEFwcGxlIHNwZWMgc2F5czoKKyAgICoKKyAgICogICBUbyBndWFyYW50ZWUgdGhhdCBhIGJpbmFyeSBzZWFyY2ggdGVybWluYXRlcywgeW91IG11c3QgaW5jbHVkZSBvbmUgb3IKKyAgICogICBtb3JlIHNwZWNpYWwgYGVuZCBvZiBzZWFyY2ggdGFibGUnIHZhbHVlcyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIHRvCisgICAqICAgYmUgc2VhcmNoZWQuICBUaGUgbnVtYmVyIG9mIHRlcm1pbmF0aW9uIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUKKyAgICogICBpbmNsdWRlZCBpcyB0YWJsZS1zcGVjaWZpYy4gIFRoZSB2YWx1ZSB0aGF0IGluZGljYXRlcyBiaW5hcnkgc2VhcmNoCisgICAqICAgdGVybWluYXRpb24gaXMgMHhGRkZGLgorICAgKgorICAgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IG5Vbml0cyBkb2VzIG5vdCBpbmNsdWRlIHRoaXMgZW5kLW1hcmtlci4gIEl0J3MKKyAgICogcXVpdGUgZGlmZmljdWx0IHRvIGRpc2NyaW1pbmF0ZSB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgMHhGRkZGIGNvbWVzIGZyb20KKyAgICogdGhlIGVuZC1tYXJrZXIgb3Igc29tZSBuZXh0IGRhdGEuCisgICAqCisgICAqICAgLS0gc3V6dWtpIHRvc2hpeWEgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfc2tpcF9lbmRtYXJrZXJzKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICB1bml0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKworICAgIHdoaWxlICggKCBwICsgNCApIDwgZ3h2YWxpZC0+cm9vdC0+bGltaXQgKQorICAgIHsKKyAgICAgIGlmICggcFswXSAhPSAweEZGIHx8IHBbMV0gIT0gMHhGRiB8fCAvKiBsYXN0R2x5cGggKi8KKyAgICAgICAgICAgcFsyXSAhPSAweEZGIHx8IHBbM10gIT0gMHhGRiApICAvKiBmaXJzdEdseXBoICovCisgICAgICAgIGJyZWFrOworICAgICAgcCArPSB1bml0U2l6ZTsKKyAgICB9CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBnaWQ7CisKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICB1bml0U2l6ZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBuVW5pdHM7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgdW5pdDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBsYXN0R2x5cGg7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgZmlyc3RHbHlwaDsKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2YWx1ZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJMb29rdXBUYWJsZSBmb3JtYXQgMiIgKTsKKworICAgIHVuaXRTaXplID0gblVuaXRzID0gMDsKKyAgICBneHZfQmluU3JjaEhlYWRlcl92YWxpZGF0ZSggcCwgbGltaXQsICZ1bml0U2l6ZSwgJm5Vbml0cywgZ3h2YWxpZCApOworICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworCisgICAgR1hWX1VOSVRTSVpFX1ZBTElEQVRFKCAiZm9ybWF0MiIsIHVuaXRTaXplLCBuVW5pdHMsIDYgKTsKKworICAgIGZvciAoIHVuaXQgPSAwLCBnaWQgPSAwOyB1bml0IDwgblVuaXRzOyB1bml0KysgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKyAyICk7CisgICAgICBsYXN0R2x5cGggID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGZpcnN0R2x5cGggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgdmFsdWUgICAgICA9IEdYVl9MT09LVVBfVkFMVUVfTE9BRCggcCwgZ3h2YWxpZC0+bG9va3VwdmFsX3NpZ24gKTsKKworICAgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGZpcnN0R2x5cGgsIGd4dmFsaWQgKTsKKyAgICAgIGd4dl9nbHlwaGlkX3ZhbGlkYXRlKCBsYXN0R2x5cGgsIGd4dmFsaWQgKTsKKworICAgICAgaWYgKCBsYXN0R2x5cGggPCBnaWQgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAicmV2ZXJzZSBvcmRlcmVkIHNlZ21lbnQgc3BlY2lmaWNhdGlvbjoiCisgICAgICAgICAgICAgICAgICAgICIgbGFzdEdseXBoWyVkXT0lZCA8IGxhc3RHbHlwaFslZF09JWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHVuaXQsIGxhc3RHbHlwaCwgdW5pdCAtIDEgLCBnaWQgKSk7CisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0dMWVBIX0lEICk7CisgICAgICB9CisKKyAgICAgIGlmICggbGFzdEdseXBoIDwgZmlyc3RHbHlwaCApCisgICAgICB7CisgICAgICAgIEdYVl9UUkFDRSgoICJyZXZlcnNlIG9yZGVyZWQgcmFuZ2Ugc3BlY2lmaWNhdGlvbiBhdCB1bml0ICVkOiIsCisgICAgICAgICAgICAgICAgICAgICIgbGFzdEdseXBoICVkIDwgZmlyc3RHbHlwaCAlZCAiLAorICAgICAgICAgICAgICAgICAgICB1bml0LCBsYXN0R2x5cGgsIGZpcnN0R2x5cGggKSk7CisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0dMWVBIX0lEICk7CisKKyAgICAgICAgaWYgKCBneHZhbGlkLT5yb290LT5sZXZlbCA9PSBGVF9WQUxJREFURV9USUdIVCApCisgICAgICAgICAgY29udGludWU7ICAgICAvKiBmdHh2YWxpZGF0b3Igc2lsZW50bHkgc2tpcHMgc3VjaCBhbiBlbnRyeSAqLworCisgICAgICAgIEZUX1RSQUNFNCgoICJjb250aW51aW5nIHdpdGggZXhjaGFuZ2VkIHZhbHVlc1xuIiApKTsKKyAgICAgICAgZ2lkICAgICAgICA9IGZpcnN0R2x5cGg7CisgICAgICAgIGZpcnN0R2x5cGggPSBsYXN0R2x5cGg7CisgICAgICAgIGxhc3RHbHlwaCAgPSBnaWQ7CisgICAgICB9CisKKyAgICAgIGZvciAoIGdpZCA9IGZpcnN0R2x5cGg7IGdpZCA8PSBsYXN0R2x5cGg7IGdpZCsrICkKKyAgICAgICAgZ3h2YWxpZC0+bG9va3VwdmFsX2Z1bmMoIGdpZCwgJnZhbHVlLCBneHZhbGlkICk7CisgICAgfQorCisgICAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfc2tpcF9lbmRtYXJrZXJzKCBwLCB1bml0U2l6ZSwgZ3h2YWxpZCApOworICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qID09PT09PT09PT09PT09PT09IFNlZ21lbnQgQXJyYXkgRm9ybWF0IDQgTG9va3VwIFRhYmxlID09PT09PT09PT09PT09PSAqLworICBzdGF0aWMgdm9pZAorICBneHZfTG9va3VwVGFibGVfZm10NF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgcCA9IHRhYmxlOworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIHVuaXQ7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgZ2lkOworCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgdW5pdFNpemU7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgblVuaXRzOworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIGxhc3RHbHlwaDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBmaXJzdEdseXBoOworICAgIEdYVl9Mb29rdXBWYWx1ZURlc2MgIGJhc2VfdmFsdWU7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiTG9va3VwVGFibGUgZm9ybWF0IDQiICk7CisKKyAgICB1bml0U2l6ZSA9IG5Vbml0cyA9IDA7CisgICAgZ3h2X0JpblNyY2hIZWFkZXJfdmFsaWRhdGUoIHAsIGxpbWl0LCAmdW5pdFNpemUsICZuVW5pdHMsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIEdYVl9VTklUU0laRV9WQUxJREFURSggImZvcm1hdDQiLCB1bml0U2l6ZSwgblVuaXRzLCA2ICk7CisKKyAgICBmb3IgKCB1bml0ID0gMCwgZ2lkID0gMDsgdW5pdCA8IG5Vbml0czsgdW5pdCsrICkKKyAgICB7CisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICk7CisgICAgICBsYXN0R2x5cGggID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGZpcnN0R2x5cGggPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBneHZfZ2x5cGhpZF92YWxpZGF0ZSggZmlyc3RHbHlwaCwgZ3h2YWxpZCApOworICAgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGxhc3RHbHlwaCwgZ3h2YWxpZCApOworCisgICAgICBpZiAoIGxhc3RHbHlwaCA8IGdpZCApCisgICAgICB7CisgICAgICAgIEdYVl9UUkFDRSgoICJyZXZlcnNlIG9yZGVyZWQgc2VnbWVudCBzcGVjaWZpY2F0aW9uOiIKKyAgICAgICAgICAgICAgICAgICAgIiBsYXN0R2x5cGhbJWRdPSVkIDwgbGFzdEdseXBoWyVkXT0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdW5pdCwgbGFzdEdseXBoLCB1bml0IC0gMSAsIGdpZCApKTsKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBsYXN0R2x5cGggPCBmaXJzdEdseXBoICkKKyAgICAgIHsKKyAgICAgICAgR1hWX1RSQUNFKCggInJldmVyc2Ugb3JkZXJlZCByYW5nZSBzcGVjaWZpY2F0aW9uIGF0IHVuaXQgJWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgIiBsYXN0R2x5cGggJWQgPCBmaXJzdEdseXBoICVkICIsCisgICAgICAgICAgICAgICAgICAgIHVuaXQsIGxhc3RHbHlwaCwgZmlyc3RHbHlwaCApKTsKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKworICAgICAgICBpZiAoIGd4dmFsaWQtPnJvb3QtPmxldmVsID09IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgICBjb250aW51ZTsgLyogZnR4dmFsaWRhdG9yIHNpbGVudGx5IHNraXBzIHN1Y2ggYW4gZW50cnkgKi8KKworICAgICAgICBGVF9UUkFDRTQoKCAiY29udGludWluZyB3aXRoIGV4Y2hhbmdlZCB2YWx1ZXNcbiIgKSk7CisgICAgICAgIGdpZCAgICAgICAgPSBmaXJzdEdseXBoOworICAgICAgICBmaXJzdEdseXBoID0gbGFzdEdseXBoOworICAgICAgICBsYXN0R2x5cGggID0gZ2lkOworICAgICAgfQorCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgIGJhc2VfdmFsdWUgPSBHWFZfTE9PS1VQX1ZBTFVFX0xPQUQoIHAsIEdYVl9MT09LVVBWQUxVRV9VTlNJR05FRCApOworCisgICAgICBmb3IgKCBnaWQgPSBmaXJzdEdseXBoOyBnaWQgPD0gbGFzdEdseXBoOyBnaWQrKyApCisgICAgICB7CisgICAgICAgIHZhbHVlID0gZ3h2YWxpZC0+bG9va3VwZm10NF90cmFucyggKEZUX1VTaG9ydCkoIGdpZCAtIGZpcnN0R2x5cGggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhc2VfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICAgICAgZ3h2YWxpZC0+bG9va3VwdmFsX2Z1bmMoIGdpZCwgJnZhbHVlLCBneHZhbGlkICk7CisgICAgICB9CisgICAgfQorCisgICAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfc2tpcF9lbmRtYXJrZXJzKCBwLCB1bml0U2l6ZSwgZ3h2YWxpZCApOworICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qID09PT09PT09PT09PT09PT09IFNlZ21lbnQgVGFibGUgRm9ybWF0IDYgTG9va3VwIFRhYmxlID09PT09PT09PT09PT09PSAqLworICBzdGF0aWMgdm9pZAorICBneHZfTG9va3VwVGFibGVfZm10Nl9za2lwX2VuZG1hcmtlcnMoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIHVuaXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworCisgICAgd2hpbGUgKCBwIDwgZ3h2YWxpZC0+cm9vdC0+bGltaXQgKQorICAgIHsKKyAgICAgIGlmICggcFswXSAhPSAweEZGIHx8IHBbMV0gIT0gMHhGRiApCisgICAgICAgIGJyZWFrOworICAgICAgcCArPSB1bml0U2l6ZTsKKyAgICB9CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDZfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICB1bml0OworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIHByZXZfZ2x5cGg7CisKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICB1bml0U2l6ZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBuVW5pdHM7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgZ2x5cGg7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiTG9va3VwVGFibGUgZm9ybWF0IDYiICk7CisKKyAgICB1bml0U2l6ZSA9IG5Vbml0cyA9IDA7CisgICAgZ3h2X0JpblNyY2hIZWFkZXJfdmFsaWRhdGUoIHAsIGxpbWl0LCAmdW5pdFNpemUsICZuVW5pdHMsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIEdYVl9VTklUU0laRV9WQUxJREFURSggImZvcm1hdDYiLCB1bml0U2l6ZSwgblVuaXRzLCA0ICk7CisKKyAgICBmb3IgKCB1bml0ID0gMCwgcHJldl9nbHlwaCA9IDA7IHVuaXQgPCBuVW5pdHM7IHVuaXQrKyApCisgICAgeworICAgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMiApOworICAgICAgZ2x5cGggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgdmFsdWUgPSBHWFZfTE9PS1VQX1ZBTFVFX0xPQUQoIHAsIGd4dmFsaWQtPmxvb2t1cHZhbF9zaWduICk7CisKKyAgICAgIGlmICggZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGdseXBoLCBneHZhbGlkICkgKQorICAgICAgICBHWFZfVFJBQ0UoKCAiIGVuZG1hcmtlciBmb3VuZCB3aXRoaW4gZGVmaW5lZCByYW5nZSIKKyAgICAgICAgICAgICAgICAgICAgIiAoZW50cnkgJWQgPCBuVW5pdHM9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICB1bml0LCBuVW5pdHMgKSk7CisKKyAgICAgIGlmICggcHJldl9nbHlwaCA+IGdseXBoICkKKyAgICAgIHsKKyAgICAgICAgR1hWX1RSQUNFKCggImN1cnJlbnQgZ2lkIDB4JTA0eCA8IHByZXZpb3VzIGdpZCAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgIGdseXBoLCBwcmV2X2dseXBoICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9HTFlQSF9JRCApOworICAgICAgfQorICAgICAgcHJldl9nbHlwaCA9IGdseXBoOworCisgICAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyggZ2x5cGgsICZ2YWx1ZSwgZ3h2YWxpZCApOworICAgIH0KKworICAgIGd4dl9Mb29rdXBUYWJsZV9mbXQ2X3NraXBfZW5kbWFya2VycyggcCwgdW5pdFNpemUsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICAgIEdYVl9FWElUOworICB9CisKKworICAvKiA9PT09PT09PT09PT09PT09PSBUcmltbWVkIEFycmF5IEZvcm1hdCA4IExvb2t1cCBUYWJsZSA9PT09PT09PT09PT09PT0gKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDhfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgIGk7CisKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICAgdmFsdWU7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgIGZpcnN0R2x5cGg7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgIGdseXBoQ291bnQ7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiTG9va3VwVGFibGUgZm9ybWF0IDgiICk7CisKKyAgICAvKiBmaXJzdEdseXBoICsgZ2x5cGhDb3VudCAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKTsKKyAgICBmaXJzdEdseXBoID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBnbHlwaENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGd4dl9nbHlwaGlkX3ZhbGlkYXRlKCBmaXJzdEdseXBoLCBneHZhbGlkICk7CisgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIChGVF9VU2hvcnQpKCBmaXJzdEdseXBoICsgZ2x5cGhDb3VudCApLCBneHZhbGlkICk7CisKKyAgICAvKiB2YWx1ZUFycmF5ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBnbHlwaENvdW50OyBpKysgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgdmFsdWUgPSBHWFZfTE9PS1VQX1ZBTFVFX0xPQUQoIHAsIGd4dmFsaWQtPmxvb2t1cHZhbF9zaWduICk7CisgICAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyggKEZUX1VTaG9ydCkoIGZpcnN0R2x5cGggKyBpICksICZ2YWx1ZSwgZ3h2YWxpZCApOworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICAgIEdYVl9FWElUOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisgICAgRlRfVVNob3J0ICBmb3JtYXQ7CisKKyAgICBHWFZfVmFsaWRhdGVfRnVuYyAgZm10X2Z1bmNzX3RhYmxlW10gPQorICAgIHsKKyAgICAgIGd4dl9Mb29rdXBUYWJsZV9mbXQwX3ZhbGlkYXRlLCAvKiAwICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSAqLworICAgICAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDJfdmFsaWRhdGUsIC8qIDIgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCisgICAgICBneHZfTG9va3VwVGFibGVfZm10NF92YWxpZGF0ZSwgLyogNCAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUgKi8KKyAgICAgIGd4dl9Mb29rdXBUYWJsZV9mbXQ2X3ZhbGlkYXRlLCAvKiA2ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNyAqLworICAgICAgZ3h2X0xvb2t1cFRhYmxlX2ZtdDhfdmFsaWRhdGUsIC8qIDggKi8KKyAgICB9OworCisgICAgR1hWX1ZhbGlkYXRlX0Z1bmMgIGZ1bmM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiTG9va3VwVGFibGUiICk7CisKKyAgICAvKiBsb29rdXB0YmxfaGVhZCBtYXkgYmUgdXNlZCBpbiBmbXQ0IHRyYW5zaXQgZnVuY3Rpb24uICovCisgICAgZ3h2YWxpZC0+bG9va3VwdGJsX2hlYWQgPSB0YWJsZTsKKworICAgIC8qIGZvcm1hdCAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIGZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgR1hWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgZm9ybWF0ICkpOworCisgICAgaWYgKCBmb3JtYXQgPiA4ICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgZnVuYyA9IGZtdF9mdW5jc190YWJsZVtmb3JtYXRdOworICAgIGlmICggZnVuYyA9PSBOVUxMICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgZnVuYyggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGggSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKKyAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfRmFjZSAgZmFjZTsKKworCisgICAgaWYgKCBnaWQgPT0gMHhGRkZGVSApCisgICAgeworICAgICAgR1hWX0VYSVQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBmYWNlID0gZ3h2YWxpZC0+ZmFjZTsKKyAgICBpZiAoIGZhY2UtPm51bV9nbHlwaHMgPCBnaWQgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICIgZ3h2X2dseXBoaWRfY2hlY2soKSBnaWQgb3ZlcmZsb3c6IG51bV9nbHlwaHMgJWQgPCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9nbHlwaHMsIGdpZCApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0dMWVBIX0lEICk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgIENPTlRST0wgUE9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9jdGxQb2ludF92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIGN0bF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0ZhY2UgICAgICAgZmFjZTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworCisgICAgRlRfR2x5cGhTbG90ICBnbHlwaDsKKyAgICBGVF9PdXRsaW5lICAgIG91dGxpbmU7CisgICAgRlRfVVNob3J0ICAgICBuX3BvaW50czsKKworCisgICAgZmFjZSA9IGd4dmFsaWQtPmZhY2U7CisKKyAgICBlcnJvciA9IEZUX0xvYWRfR2x5cGgoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX05PX0JJVE1BUCB8IEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgRlRfSU5WQUxJRF9HTFlQSF9JRDsKKworICAgIGdseXBoICAgID0gZmFjZS0+Z2x5cGg7CisgICAgb3V0bGluZSAgPSBnbHlwaC0+b3V0bGluZTsKKyAgICBuX3BvaW50cyA9IChGVF9VU2hvcnQpb3V0bGluZS5uX3BvaW50czsKKworICAgIGlmICggISggY3RsX3BvaW50IDwgbl9wb2ludHMgKSApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgU0ZOVCBOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9zZm50TmFtZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgbmFtZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBtaW5faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgbWF4X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfU2ZudE5hbWUgIG5hbWU7CisgICAgRlRfVUludCAgICAgIGk7CisgICAgRlRfVUludCAgICAgIG5uYW1lczsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJzZm50TmFtZSIgKTsKKworICAgIGlmICggbmFtZV9pbmRleCA8IG1pbl9pbmRleCB8fCBtYXhfaW5kZXggPCBuYW1lX2luZGV4ICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgbm5hbWVzID0gRlRfR2V0X1NmbnRfTmFtZV9Db3VudCggZ3h2YWxpZC0+ZmFjZSApOworICAgIGZvciAoIGkgPSAwOyBpIDwgbm5hbWVzOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggRlRfR2V0X1NmbnRfTmFtZSggZ3h2YWxpZC0+ZmFjZSwgaSwgJm5hbWUgKSAhPSBGVF9FcnJfT2sgKQorICAgICAgICBjb250aW51ZSA7CisKKyAgICAgIGlmICggbmFtZS5uYW1lX2lkID09IG5hbWVfaW5kZXggKQorICAgICAgICBnb3RvIE91dDsKKyAgICB9CisKKyAgICBHWFZfVFJBQ0UoKCAiICBuYW1lSW5kZXggPSAlZCAoVU5USVRMRUQpXG4iLCBuYW1lX2luZGV4ICkpOworICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICBnb3RvIEV4aXQ7ICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisKKyAgT3V0OgorICAgIEZUX1RSQUNFMSgoICIgIG5hbWVJbmRleCA9ICVkICgiLCBuYW1lX2luZGV4ICkpOworICAgIEdYVl9UUkFDRV9IRVhEVU1QX1NGTlROQU1FKCBuYW1lICk7CisgICAgRlRfVFJBQ0UxKCggIilcbiIgKSk7CisKKyAgRXhpdDoKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFURSBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhc3MgVGFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgLyoKKyAgICogaGlnaGVzdENsYXNzIHNwZWNpZmllcyBob3cgbWFueSBjbGFzc2VzIGFyZSBkZWZpbmVkIGluIHRoaXMKKyAgICogQ2xhc3MgU3VidGFibGUuICBBcHBsZSBzcGVjIGRvZXMgbm90IG1lbnRpb24gd2hldGhlciB1bmRlZmluZWQKKyAgICogaG9sZXMgaW4gdGhlIGNsYXNzIChlLmcuOiAwLTMgYXJlIHByZWRlZmluZWQsIDQgaXMgdW51c2VkLCA1IGlzIHVzZWQpCisgICAqIGFyZSBwZXJtaXR0ZWQuICBBdCBwcmVzZW50LCBob2xlcyBpbiBhIGRlZmluZWQgY2xhc3MgYXJlIG5vdCBjaGVja2VkLgorICAgKiAgIC0tIHN1enVraSB0b3NoaXlhIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKyAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X0NsYXNzVGFibGVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBzdGF0ZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICBtYXhDbGFzc0lEX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCAgICAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgIGxpbWl0ID0gdGFibGUgKyAqbGVuZ3RoX3A7CisgICAgRlRfVVNob3J0ICBmaXJzdEdseXBoOworICAgIEZUX1VTaG9ydCAgbkdseXBoczsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJDbGFzc1RhYmxlIiApOworCisgICAgKm1heENsYXNzSURfcCA9IDM7ICAvKiBDbGFzc2VzIDAsIDIsIGFuZCAzIGFyZSBwcmVkZWZpbmVkICovCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICk7CisgICAgZmlyc3RHbHlwaCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgbkdseXBocyAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiIChmaXJzdEdseXBoID0gJWQsIG5HbHlwaHMgPSAlZClcbiIsIGZpcnN0R2x5cGgsIG5HbHlwaHMgKSk7CisKKyAgICBpZiAoICFuR2x5cGhzICkKKyAgICAgIGdvdG8gT3V0OworCisgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIChGVF9VU2hvcnQpKCBmaXJzdEdseXBoICsgbkdseXBocyApLCBneHZhbGlkICk7CisKKyAgICB7CisgICAgICBGVF9CeXRlICAgIG5HbHlwaEluQ2xhc3NbMjU2XTsKKyAgICAgIEZUX0J5dGUgICAgY2xhc3NJRDsKKyAgICAgIEZUX1VTaG9ydCAgaTsKKworCisgICAgICBmdF9tZW1zZXQoIG5HbHlwaEluQ2xhc3MsIDAsIDI1NiApOworCisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbkdseXBoczsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgR1hWX0xJTUlUX0NIRUNLKCAxICk7CisgICAgICAgIGNsYXNzSUQgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgc3dpdGNoICggY2xhc3NJRCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBmb2xsb3dpbmcgY2xhc3NlcyBzaG91bGQgbm90IGFwcGVhciBpbiBjbGFzcyBhcnJheSAqLworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgIC8qIGVuZCBvZiB0ZXh0ICovCisgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgLyogb3V0IG9mIGJvdW5kcyAqLworICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgIC8qIGVuZCBvZiBsaW5lICovCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgLyogb3V0IG9mIGJvdW5kcyAqLworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgIC8qIHVzZXItZGVmaW5lZDogNCAtICggc3RhdGVTaXplIC0gMSApICovCisgICAgICAgICAgaWYgKCBjbGFzc0lEID49IHN0YXRlU2l6ZSApCisgICAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7ICAgLyogYXNzaWduIGdseXBoIHRvIHVuZGVmaW5lZCBzdGF0ZSAqLworCisgICAgICAgICAgbkdseXBoSW5DbGFzc1tjbGFzc0lEXSsrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICAqbGVuZ3RoX3AgPSAoRlRfVVNob3J0KSggcCAtIHRhYmxlICk7CisKKyAgICAgIC8qIHNjYW4gbWF4IENsYXNzSUQgaW4gdXNlICovCisgICAgICBmb3IgKCBpID0gMDsgaSA8IHN0YXRlU2l6ZTsgaSsrICkKKyAgICAgICAgaWYgKCAoIDMgPCBpICkgJiYgKCBuR2x5cGhJbkNsYXNzW2ldID4gMCApICkKKyAgICAgICAgICAqbWF4Q2xhc3NJRF9wID0gKEZUX0J5dGUpaTsgIC8qIFhYWDogQ2hlY2sgUmFuZ2U/ICovCisgICAgfQorCisgIE91dDoKKyAgICBHWFZfVFJBQ0UoKCAiRGVjbGFyZWQgc3RhdGVTaXplPTB4JTAyeCwgVXNlZCBtYXhDbGFzc0lEPTB4JTAyeFxuIiwKKyAgICAgICAgICAgICAgICBzdGF0ZVNpemUsICptYXhDbGFzc0lEX3AgKSk7CisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0ZSBBcnJheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9TdGF0ZUFycmF5X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIGxlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICAgICAgbWF4Q2xhc3NJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIHN0YXRlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgIG1heFN0YXRlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICBtYXhFbnRyeV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCAgICAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgbGltaXQgPSB0YWJsZSArICpsZW5ndGhfcDsKKyAgICBGVF9CeXRlICAgY2xheno7CisgICAgRlRfQnl0ZSAgIGVudHJ5OworCisgICAgRlRfVU5VU0VEKCBzdGF0ZVNpemUgKTsgLyogZm9yIHRoZSBub24tZGVidWdnaW5nIGNhc2UgKi8KKworCisgICAgR1hWX05BTUVfRU5URVIoICJTdGF0ZUFycmF5IiApOworCisgICAgR1hWX1RSQUNFKCggInBhcnNlICVkIGJ5dGVzIGJ5IHN0YXRlU2l6ZT0lZCBtYXhDbGFzc0lEPSVkXG4iLAorICAgICAgICAgICAgICAgIChpbnQpKCpsZW5ndGhfcCksIHN0YXRlU2l6ZSwgKGludCkobWF4Q2xhc3NJRCkgKSk7CisKKyAgICAvKgorICAgICAqIDIgc3RhdGVzIGFyZSBwcmVkZWZpbmVkIGFuZCBtdXN0IGJlIGRlc2NyaWJlZCBpbiBTdGF0ZUFycmF5OgorICAgICAqIHN0YXRlIDAgKHN0YXJ0IG9mIHRleHQpLCAxIChzdGFydCBvZiBsaW5lKQorICAgICAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggKCAxICsgbWF4Q2xhc3NJRCApICogMiApOworCisgICAgKm1heFN0YXRlX3AgPSAwOworICAgICptYXhFbnRyeV9wID0gMDsKKworICAgIC8qIHJlYWQgaWYgZW5vdWdoIHRvIHJlYWQgYW5vdGhlciBzdGF0ZSAqLworICAgIHdoaWxlICggcCArICggMSArIG1heENsYXNzSUQgKSA8PSBsaW1pdCApCisgICAgeworICAgICAgKCptYXhTdGF0ZV9wKSsrOworICAgICAgZm9yICggY2xhenogPSAwOyBjbGF6eiA8PSBtYXhDbGFzc0lEOyBjbGF6eisrICkKKyAgICAgIHsKKyAgICAgICAgZW50cnkgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgKm1heEVudHJ5X3AgPSAoRlRfQnl0ZSlGVF9NQVgoICptYXhFbnRyeV9wLCBlbnRyeSApOworICAgICAgfQorICAgIH0KKyAgICBHWFZfVFJBQ0UoKCAicGFyc2VkOiBtYXhTdGF0ZT0lZCwgbWF4RW50cnk9JWRcbiIsCisgICAgICAgICAgICAgICAgKm1heFN0YXRlX3AsICptYXhFbnRyeV9wICkpOworCisgICAgKmxlbmd0aF9wID0gKEZUX1VTaG9ydCkoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbnRyeSBUYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9FbnRyeVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIGxlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICAgICAgbWF4RW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgc3RhdGVBcnJheV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgICBtYXhDbGFzc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgc3RhdGV0YWJsZV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIHN0YXRldGFibGVfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwICAgICA9IHRhYmxlOworICAgIEZUX0J5dGVzICBsaW1pdCA9IHRhYmxlICsgKmxlbmd0aF9wOworICAgIEZUX0J5dGUgICBlbnRyeTsKKyAgICBGVF9CeXRlICAgc3RhdGU7CisgICAgRlRfSW50ICAgIGVudHJ5U2l6ZSA9IDIgKyAyICsgR1hWX0dMWVBIT0ZGU0VUX1NJWkUoIHN0YXRldGFibGUgKTsKKworICAgIEdYVl9YU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MgIGdseXBoT2Zmc2V0OworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIkVudHJ5VGFibGUiICk7CisKKyAgICBHWFZfVFJBQ0UoKCAibWF4RW50cnk9JWQgZW50cnlTaXplPSVkXG4iLCBtYXhFbnRyeSwgZW50cnlTaXplICkpOworCisgICAgaWYgKCAoIG1heEVudHJ5ICsgMSApICogZW50cnlTaXplID4gKmxlbmd0aF9wICkKKyAgICB7CisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9UT09fU0hPUlQgKTsKKworICAgICAgLyogZnR4dmFsaWRhdG9yIGFuZCBGb250VmFsaWRhdG9yIGJvdGggd2FybiBhbmQgY29udGludWUgKi8KKyAgICAgIG1heEVudHJ5ID0gKEZUX0J5dGUpKCAqbGVuZ3RoX3AgLyBlbnRyeVNpemUgLSAxICk7CisgICAgICBHWFZfVFJBQ0UoKCAidG9vIGxhcmdlIG1heEVudHJ5LCBzaHJpbmtpbmcgdG8gJWQgZml0IEVudHJ5VGFibGUgbGVuZ3RoXG4iLAorICAgICAgICAgICAgICAgICAgbWF4RW50cnkgKSk7CisgICAgfQorCisgICAgZm9yICggZW50cnkgPSAwOyBlbnRyeSA8PSBtYXhFbnRyeTsgZW50cnkrKyApCisgICAgeworICAgICAgRlRfVVNob3J0ICBuZXdTdGF0ZTsKKyAgICAgIEZUX1VTaG9ydCAgZmxhZ3M7CisKKworICAgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMiApOworICAgICAgbmV3U3RhdGUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgZmxhZ3MgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAgIGlmICggbmV3U3RhdGUgPCBzdGF0ZUFycmF5ICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgc3RhdGVBcnJheSArIHN0YXRlQXJyYXlfbGVuZ3RoIDwgbmV3U3RhdGUgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAiIG5ld1N0YXRlIG9mZnNldCAweCUwNHggaXMgb3V0IG9mIHN0YXRlQXJyYXlcbiIsCisgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9PRkZTRVQgKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggMCAhPSAoICggbmV3U3RhdGUgLSBzdGF0ZUFycmF5ICkgJSAoIDEgKyBtYXhDbGFzc0lEICkgKSApCisgICAgICB7CisgICAgICAgIEdYVl9UUkFDRSgoICIgbmV3U3RhdGUgb2Zmc2V0IDB4JTA0eCBpcyBub3QgYWxpZ25lZCB0byAlZC1jbGFzc2VzXG4iLAorICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSwgIDEgKyBtYXhDbGFzc0lEICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9PRkZTRVQgKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHN0YXRlID0gKEZUX0J5dGUpKCAoIG5ld1N0YXRlIC0gc3RhdGVBcnJheSApIC8gKCAxICsgbWF4Q2xhc3NJRCApICk7CisKKyAgICAgIHN3aXRjaCAoIEdYVl9HTFlQSE9GRlNFVF9GTVQoIHN0YXRldGFibGUgKSApCisgICAgICB7CisgICAgICBjYXNlIEdYVl9HTFlQSE9GRlNFVF9OT05FOgorICAgICAgICBnbHlwaE9mZnNldC51YyA9IDA7ICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdYVl9HTFlQSE9GRlNFVF9VQ0hBUjoKKyAgICAgICAgZ2x5cGhPZmZzZXQudWMgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX0NIQVI6CisgICAgICAgIGdseXBoT2Zmc2V0LmMgPSBGVF9ORVhUX0NIQVIoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX1VTSE9SVDoKKyAgICAgICAgZ2x5cGhPZmZzZXQudSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdYVl9HTFlQSE9GRlNFVF9TSE9SVDoKKyAgICAgICAgZ2x5cGhPZmZzZXQucyA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX1VMT05HOgorICAgICAgICBnbHlwaE9mZnNldC51bCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX0xPTkc6CisgICAgICAgIGdseXBoT2Zmc2V0LmwgPSBGVF9ORVhUX0xPTkcoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0ZPUk1BVCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggTlVMTCAhPSBneHZhbGlkLT5zdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMgKQorICAgICAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMoIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXRhYmxlX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRldGFibGVfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworICAgIH0KKworICBFeGl0OgorICAgICpsZW5ndGhfcCA9IChGVF9VU2hvcnQpKCBwIC0gdGFibGUgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhdGUgVGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfU3RhdGVUYWJsZV9zdWJ0YWJsZV9zZXR1cCggRlRfVVNob3J0ICAgICAgdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIGNsYXNzVGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgZW50cnlUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVVNob3J0ICAgb1szXTsKKyAgICBGVF9VU2hvcnQqICBsWzNdOworICAgIEZUX1VTaG9ydCAgIGJ1ZmZbNF07CisKKworICAgIG9bMF0gPSBjbGFzc1RhYmxlOworICAgIG9bMV0gPSBzdGF0ZUFycmF5OworICAgIG9bMl0gPSBlbnRyeVRhYmxlOworICAgIGxbMF0gPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIGxbMV0gPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIGxbMl0gPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworCisgICAgZ3h2X3NldF9sZW5ndGhfYnlfdXNob3J0X29mZnNldCggbywgbCwgYnVmZiwgMywgdGFibGVfc2l6ZSwgZ3h2YWxpZCApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfU3RhdGVUYWJsZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVVNob3J0ICAgc3RhdGVTaXplOworICAgIEZUX1VTaG9ydCAgIGNsYXNzVGFibGU7ICAgICAvKiBvZmZzZXQgdG8gQ2xhc3MoU3ViKVRhYmxlICovCisgICAgRlRfVVNob3J0ICAgc3RhdGVBcnJheTsgICAgIC8qIG9mZnNldCB0byBTdGF0ZUFycmF5ICovCisgICAgRlRfVVNob3J0ICAgZW50cnlUYWJsZTsgICAgIC8qIG9mZnNldCB0byBFbnRyeVRhYmxlICovCisKKyAgICBGVF9VU2hvcnQgICBjbGFzc1RhYmxlX2xlbmd0aDsKKyAgICBGVF9VU2hvcnQgICBzdGF0ZUFycmF5X2xlbmd0aDsKKyAgICBGVF9VU2hvcnQgICBlbnRyeVRhYmxlX2xlbmd0aDsKKyAgICBGVF9CeXRlICAgICBtYXhDbGFzc0lEOworICAgIEZUX0J5dGUgICAgIG1heFN0YXRlOworICAgIEZUX0J5dGUgICAgIG1heEVudHJ5OworCisgICAgR1hWX1N0YXRlVGFibGVfU3VidGFibGVfU2V0dXBfRnVuYyAgc2V0dXBfZnVuYzsKKworICAgIEZUX0J5dGVzICAgIHAgPSB0YWJsZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJTdGF0ZVRhYmxlIiApOworCisgICAgR1hWX1RSQUNFKCggIlN0YXRlVGFibGUgaGVhZGVyXG4iICkpOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMiArIDIgKyAyICk7CisgICAgc3RhdGVTaXplICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgY2xhc3NUYWJsZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgc3RhdGVBcnJheSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgZW50cnlUYWJsZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBHWFZfVFJBQ0UoKCAic3RhdGVTaXplPTB4JTA0eFxuIiwgc3RhdGVTaXplICkpOworICAgIEdYVl9UUkFDRSgoICJvZmZzZXQgdG8gY2xhc3NUYWJsZT0weCUwNHhcbiIsIGNsYXNzVGFibGUgKSk7CisgICAgR1hWX1RSQUNFKCggIm9mZnNldCB0byBzdGF0ZUFycmF5PTB4JTA0eFxuIiwgc3RhdGVBcnJheSApKTsKKyAgICBHWFZfVFJBQ0UoKCAib2Zmc2V0IHRvIGVudHJ5VGFibGU9MHglMDR4XG4iLCBlbnRyeVRhYmxlICkpOworCisgICAgaWYgKCBzdGF0ZVNpemUgPiAweEZGICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIGlmICggZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhX2xvYWRfZnVuYyAhPSBOVUxMICkKKyAgICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBpZiAoIGd4dmFsaWQtPnN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYyAhPSBOVUxMKQorICAgICAgc2V0dXBfZnVuYyA9IGd4dmFsaWQtPnN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYzsKKyAgICBlbHNlCisgICAgICBzZXR1cF9mdW5jID0gZ3h2X1N0YXRlVGFibGVfc3VidGFibGVfc2V0dXA7CisKKyAgICBzZXR1cF9mdW5jKCAoRlRfVVNob3J0KSggbGltaXQgLSB0YWJsZSApLAorICAgICAgICAgICAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICZjbGFzc1RhYmxlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAmc3RhdGVBcnJheV9sZW5ndGgsCisgICAgICAgICAgICAgICAgJmVudHJ5VGFibGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKworICAgIEdYVl9UUkFDRSgoICJTdGF0ZVRhYmxlIFN1YnRhYmxlc1xuIiApKTsKKworICAgIGlmICggY2xhc3NUYWJsZSAhPSAwICkKKyAgICAgIGd4dl9DbGFzc1RhYmxlX3ZhbGlkYXRlKCB0YWJsZSArIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsYXNzVGFibGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4Q2xhc3NJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisgICAgZWxzZQorICAgICAgbWF4Q2xhc3NJRCA9IChGVF9CeXRlKSggc3RhdGVTaXplIC0gMSApOworCisgICAgaWYgKCBzdGF0ZUFycmF5ICE9IDAgKQorICAgICAgZ3h2X1N0YXRlQXJyYXlfdmFsaWRhdGUoIHRhYmxlICsgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdGVBcnJheV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q2xhc3NJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhFbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisgICAgZWxzZQorICAgIHsKKyNpZiAwCisgICAgICBtYXhTdGF0ZSA9IDE7ICAgICAvKiAwOnN0YXJ0IG9mIHRleHQsIDE6c3RhcnQgb2YgbGluZSBhcmUgcHJlZGVmaW5lZCAqLworI2VuZGlmCisgICAgICBtYXhFbnRyeSA9IDA7CisgICAgfQorCisgICAgaWYgKCBtYXhFbnRyeSA+IDAgJiYgZW50cnlUYWJsZSA9PSAwICkKKyAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgaWYgKCBlbnRyeVRhYmxlICE9IDAgKQorICAgICAgZ3h2X0VudHJ5VGFibGVfdmFsaWRhdGUoIHRhYmxlICsgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnlUYWJsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUFycmF5X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDbGFzc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICAvKiA9PT09PT09PT09PT09PT09PSBlWHRlbmRlZCBTdGF0ZSBUYWJsZSAoZm9yIG1vcngpID09PT09PT09PT09PT09PT09PT0gKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfWFN0YXRlVGFibGVfc3VidGFibGVfc2V0dXAoIEZUX1VMb25nICAgICAgIHRhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgY2xhc3NUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGVudHJ5VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgY2xhc3NUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGVudHJ5VGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9VTG9uZyAgIG9bM107CisgICAgRlRfVUxvbmcqICBsWzNdOworICAgIEZUX1VMb25nICAgYnVmZls0XTsKKworCisgICAgb1swXSA9IGNsYXNzVGFibGU7CisgICAgb1sxXSA9IHN0YXRlQXJyYXk7CisgICAgb1syXSA9IGVudHJ5VGFibGU7CisgICAgbFswXSA9IGNsYXNzVGFibGVfbGVuZ3RoX3A7CisgICAgbFsxXSA9IHN0YXRlQXJyYXlfbGVuZ3RoX3A7CisgICAgbFsyXSA9IGVudHJ5VGFibGVfbGVuZ3RoX3A7CisKKyAgICBneHZfc2V0X2xlbmd0aF9ieV91bG9uZ19vZmZzZXQoIG8sIGwsIGJ1ZmYsIDMsIHRhYmxlX3NpemUsIGd4dmFsaWQgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X1hDbGFzc1RhYmxlX2xvb2t1cHZhbF92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgICAgICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIHZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVU5VU0VEKCBnbHlwaCApOworCisgICAgaWYgKCB2YWx1ZV9wLT51ID49IGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm5DbGFzc2VzICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICBpZiAoIHZhbHVlX3AtPnUgPiBneHZhbGlkLT54c3RhdGV0YWJsZS5tYXhDbGFzc0lEICkKKyAgICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm1heENsYXNzSUQgPSB2YWx1ZV9wLT51OworICB9CisKKworICAvKgorICAgICs9PT09PT09PT09PT09PT0rIC0tLS0tLS0tKworICAgIHwgbG9va3VwIGhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgQmluU3JjaEhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgbGFzdEdseXBoWzBdICB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFswXSB8ICAgICAgICAgfCAgICBoZWFkIG9mIGxvb2t1cCB0YWJsZQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBvZmZzZXRbMF0gICAgIHwgICAgLT4gICB8ICAgICAgICAgIG9mZnNldCAgICAgICAgICAgIFtieXRlXQorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBsYXN0R2x5cGhbMV0gIHwgICAgICAgICB8IChnbHlwaElEIC0gZmlyc3RHbHlwaCkgKiAyIFtieXRlXQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFsxXSB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgb2Zmc2V0WzFdICAgICB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIDE2Yml0IHZhbHVlIGFycmF5ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgICAgIHZhbHVlICAgICB8IDwtLS0tLS0tKworICAgICAuLi4uCisgICovCisgIHN0YXRpYyBHWFZfTG9va3VwVmFsdWVEZXNjCisgIGd4dl9YQ2xhc3NUYWJsZV9sb29rdXBmbXQ0X3RyYW5zaXQoIEZUX1VTaG9ydCAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0xvb2t1cFZhbHVlQ1B0ciAgYmFzZV92YWx1ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICAgICAgICBsb29rdXB0YmxfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgcDsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBsaW1pdDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBvZmZzZXQ7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKyAgICAvKiBYWFg6IGNoZWNrIHJhbmdlPyAqLworICAgIG9mZnNldCA9IChGVF9VU2hvcnQpKCBiYXNlX3ZhbHVlX3AtPnUgKworICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZV9naW5kZXggKiBzaXplb2YgKCBGVF9VU2hvcnQgKSApOworCisgICAgcCAgICAgPSBneHZhbGlkLT5sb29rdXB0YmxfaGVhZCArIG9mZnNldDsKKyAgICBsaW1pdCA9IGxvb2t1cHRibF9saW1pdDsKKworICAgIEdYVl9MSU1JVF9DSEVDSyAoIDIgKTsKKyAgICB2YWx1ZS51ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X1hTdGF0ZUFycmF5X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBsZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBtYXhDbGFzc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIHN0YXRlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBtYXhTdGF0ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG1heEVudHJ5X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgIGxpbWl0ID0gdGFibGUgKyAqbGVuZ3RoX3A7CisgICAgRlRfVVNob3J0ICBjbGF6ejsKKyAgICBGVF9VU2hvcnQgIGVudHJ5OworCisgICAgRlRfVU5VU0VEKCBzdGF0ZVNpemUgKTsgLyogZm9yIHRoZSBub24tZGVidWdnaW5nIGNhc2UgKi8KKworCisgICAgR1hWX05BTUVfRU5URVIoICJYU3RhdGVBcnJheSIgKTsKKworICAgIEdYVl9UUkFDRSgoICJwYXJzZSAlIDNkIGJ5dGVzIGJ5IHN0YXRlU2l6ZT0lIDNkIG1heENsYXNzSUQ9JSAzZFxuIiwKKyAgICAgICAgICAgICAgICAoaW50KSgqbGVuZ3RoX3ApLCBzdGF0ZVNpemUsIChpbnQpKG1heENsYXNzSUQpICkpOworCisgICAgLyoKKyAgICAgKiAyIHN0YXRlcyBhcmUgcHJlZGVmaW5lZCBhbmQgbXVzdCBiZSBkZXNjcmliZWQ6CisgICAgICogc3RhdGUgMCAoc3RhcnQgb2YgdGV4dCksIDEgKHN0YXJ0IG9mIGxpbmUpCisgICAgICovCisgICAgR1hWX0xJTUlUX0NIRUNLKCAoIDEgKyBtYXhDbGFzc0lEICkgKiAyICogMiApOworCisgICAgKm1heFN0YXRlX3AgPSAwOworICAgICptYXhFbnRyeV9wID0gMDsKKworICAgIC8qIHJlYWQgaWYgZW5vdWdoIHRvIHJlYWQgYW5vdGhlciBzdGF0ZSAqLworICAgIHdoaWxlICggcCArICggKCAxICsgbWF4Q2xhc3NJRCApICogMiApIDw9IGxpbWl0ICkKKyAgICB7CisgICAgICAoKm1heFN0YXRlX3ApKys7CisgICAgICBmb3IgKCBjbGF6eiA9IDA7IGNsYXp6IDw9IG1heENsYXNzSUQ7IGNsYXp6KysgKQorICAgICAgeworICAgICAgICBlbnRyeSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgICptYXhFbnRyeV9wID0gKEZUX1VTaG9ydClGVF9NQVgoICptYXhFbnRyeV9wLCBlbnRyeSApOworICAgICAgfQorICAgIH0KKyAgICBHWFZfVFJBQ0UoKCAicGFyc2VkOiBtYXhTdGF0ZT0lZCwgbWF4RW50cnk9JWRcbiIsCisgICAgICAgICAgICAgICAgKm1heFN0YXRlX3AsICptYXhFbnRyeV9wICkpOworCisgICAgKmxlbmd0aF9wID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X1hFbnRyeVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBsZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBtYXhFbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBzdGF0ZUFycmF5X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBtYXhDbGFzc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIHhzdGF0ZXRhYmxlX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIHhzdGF0ZXRhYmxlX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICBsaW1pdCA9IHRhYmxlICsgKmxlbmd0aF9wOworICAgIEZUX1VTaG9ydCAgZW50cnk7CisgICAgRlRfVVNob3J0ICBzdGF0ZTsKKyAgICBGVF9JbnQgICAgIGVudHJ5U2l6ZSA9IDIgKyAyICsgR1hWX0dMWVBIT0ZGU0VUX1NJWkUoIHhzdGF0ZXRhYmxlICk7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiWEVudHJ5VGFibGUiICk7CisgICAgR1hWX1RSQUNFKCggIm1heEVudHJ5PSVkIGVudHJ5U2l6ZT0lZFxuIiwgbWF4RW50cnksIGVudHJ5U2l6ZSApKTsKKworICAgIGlmICggKCBwICsgKCBtYXhFbnRyeSArIDEgKSAqIGVudHJ5U2l6ZSApID4gbGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBmb3IgKGVudHJ5ID0gMDsgZW50cnkgPD0gbWF4RW50cnkgOyBlbnRyeSsrICkKKyAgICB7CisgICAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZV9pZHg7CisgICAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICAgIEdYVl9YU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MgIGdseXBoT2Zmc2V0OworCisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKTsKKyAgICAgIG5ld1N0YXRlX2lkeCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBmbGFncyAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBpZiAoIHN0YXRlQXJyYXlfbGVuZ3RoIDwgKEZUX1VMb25nKSggbmV3U3RhdGVfaWR4ICogMiApICkKKyAgICAgIHsKKyAgICAgICAgR1hWX1RSQUNFKCggIiAgbmV3U3RhdGUgaW5kZXggMHglMDR4IHBvaW50cyBvdXQgb2Ygc3RhdGVBcnJheVxuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGVfaWR4ICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9PRkZTRVQgKTsKKyAgICAgIH0KKworICAgICAgc3RhdGUgPSAoRlRfVVNob3J0KSggbmV3U3RhdGVfaWR4IC8gKCAxICsgbWF4Q2xhc3NJRCApICk7CisgICAgICBpZiAoIDAgIT0gKCBuZXdTdGF0ZV9pZHggJSAoIDEgKyBtYXhDbGFzc0lEICkgKSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNCgoICItPiBuZXcgc3RhdGUgPSAlZCAoc3VwcG9zZWQpXG4iCisgICAgICAgICAgICAgICAgICAgICJidXQgbmV3U3RhdGUgaW5kZXggMHglMDR4IGlzIG5vdCBhbGlnbmVkIHRvICVkLWNsYXNzZXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLCBuZXdTdGF0ZV9pZHgsICAxICsgbWF4Q2xhc3NJRCApKTsKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfT0ZGU0VUICk7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAoIEdYVl9HTFlQSE9GRlNFVF9GTVQoIHhzdGF0ZXRhYmxlICkgKQorICAgICAgeworICAgICAgY2FzZSBHWFZfR0xZUEhPRkZTRVRfTk9ORToKKyAgICAgICAgZ2x5cGhPZmZzZXQudWMgPSAwOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdYVl9HTFlQSE9GRlNFVF9VQ0hBUjoKKyAgICAgICAgZ2x5cGhPZmZzZXQudWMgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX0NIQVI6CisgICAgICAgIGdseXBoT2Zmc2V0LmMgPSBGVF9ORVhUX0NIQVIoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX1VTSE9SVDoKKyAgICAgICAgZ2x5cGhPZmZzZXQudSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdYVl9HTFlQSE9GRlNFVF9TSE9SVDoKKyAgICAgICAgZ2x5cGhPZmZzZXQucyA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX1VMT05HOgorICAgICAgICBnbHlwaE9mZnNldC51bCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR1hWX0dMWVBIT0ZGU0VUX0xPTkc6CisgICAgICAgIGdseXBoT2Zmc2V0LmwgPSBGVF9ORVhUX0xPTkcoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0ZPUk1BVCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggTlVMTCAhPSBneHZhbGlkLT54c3RhdGV0YWJsZS5lbnRyeV92YWxpZGF0ZV9mdW5jICkKKyAgICAgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUuZW50cnlfdmFsaWRhdGVfZnVuYyggc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzdGF0ZXRhYmxlX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3RhdGV0YWJsZV9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworICAgIH0KKworICBFeGl0OgorICAgICpsZW5ndGhfcCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9YU3RhdGVUYWJsZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICAvKiBTdGF0ZUhlYWRlciBtZW1iZXJzICovCisgICAgRlRfVUxvbmcgICBjbGFzc1RhYmxlOyAgICAgIC8qIG9mZnNldCB0byBDbGFzcyhTdWIpVGFibGUgKi8KKyAgICBGVF9VTG9uZyAgIHN0YXRlQXJyYXk7ICAgICAgLyogb2Zmc2V0IHRvIFN0YXRlQXJyYXkgKi8KKyAgICBGVF9VTG9uZyAgIGVudHJ5VGFibGU7ICAgICAgLyogb2Zmc2V0IHRvIEVudHJ5VGFibGUgKi8KKworICAgIEZUX1VMb25nICAgY2xhc3NUYWJsZV9sZW5ndGg7CisgICAgRlRfVUxvbmcgICBzdGF0ZUFycmF5X2xlbmd0aDsKKyAgICBGVF9VTG9uZyAgIGVudHJ5VGFibGVfbGVuZ3RoOworICAgIEZUX1VTaG9ydCAgbWF4U3RhdGU7CisgICAgRlRfVVNob3J0ICBtYXhFbnRyeTsKKworICAgIEdYVl9YU3RhdGVUYWJsZV9TdWJ0YWJsZV9TZXR1cF9GdW5jICBzZXR1cF9mdW5jOworCisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiWFN0YXRlVGFibGUiICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiWFN0YXRlVGFibGUgaGVhZGVyXG4iICkpOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDQgKyA0ICk7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUubkNsYXNzZXMgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgY2xhc3NUYWJsZSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBzdGF0ZUFycmF5ID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIGVudHJ5VGFibGUgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBHWFZfVFJBQ0UoKCAibkNsYXNzZXMgPTB4JTA4eFxuIiwgZ3h2YWxpZC0+eHN0YXRldGFibGUubkNsYXNzZXMgKSk7CisgICAgR1hWX1RSQUNFKCggIm9mZnNldCB0byBjbGFzc1RhYmxlPTB4JTA4eFxuIiwgY2xhc3NUYWJsZSApKTsKKyAgICBHWFZfVFJBQ0UoKCAib2Zmc2V0IHRvIHN0YXRlQXJyYXk9MHglMDh4XG4iLCBzdGF0ZUFycmF5ICkpOworICAgIEdYVl9UUkFDRSgoICJvZmZzZXQgdG8gZW50cnlUYWJsZT0weCUwOHhcbiIsIGVudHJ5VGFibGUgKSk7CisKKyAgICBpZiAoIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm5DbGFzc2VzID4gMHhGRkZGVSApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBHWFZfVFJBQ0UoKCAiU3RhdGVUYWJsZSBTdWJ0YWJsZXNcbiIgKSk7CisKKyAgICBpZiAoIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm9wdGRhdGFfbG9hZF9mdW5jICE9IE5VTEwgKQorICAgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBpZiAoIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLnN1YnRhYmxlX3NldHVwX2Z1bmMgIT0gTlVMTCApCisgICAgICBzZXR1cF9mdW5jID0gZ3h2YWxpZC0+eHN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYzsKKyAgICBlbHNlCisgICAgICBzZXR1cF9mdW5jID0gZ3h2X1hTdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwOworCisgICAgc2V0dXBfZnVuYyggKEZUX1VMb25nKSggbGltaXQgLSB0YWJsZSApLAorICAgICAgICAgICAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICZjbGFzc1RhYmxlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAmc3RhdGVBcnJheV9sZW5ndGgsCisgICAgICAgICAgICAgICAgJmVudHJ5VGFibGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKworICAgIGlmICggY2xhc3NUYWJsZSAhPSAwICkKKyAgICB7CisgICAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5tYXhDbGFzc0lEID0gMDsKKyAgICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9zaWduICAgICAgICAgPSBHWFZfTE9PS1VQVkFMVUVfVU5TSUdORUQ7CisgICAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyAgICAgICAgID0gZ3h2X1hDbGFzc1RhYmxlX2xvb2t1cHZhbF92YWxpZGF0ZTsKKyAgICAgIGd4dmFsaWQtPmxvb2t1cGZtdDRfdHJhbnMgICAgICAgPSBneHZfWENsYXNzVGFibGVfbG9va3VwZm10NF90cmFuc2l0OworICAgICAgZ3h2X0xvb2t1cFRhYmxlX3ZhbGlkYXRlKCB0YWJsZSArIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlICsgY2xhc3NUYWJsZSArIGNsYXNzVGFibGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisjaWYgMAorICAgICAgaWYgKCBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPCBjbGFzc1RhYmxlX2xlbmd0aCApCisgICAgICAgIGNsYXNzVGFibGVfbGVuZ3RoID0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBYWFg6IGNoZWNrIHJhbmdlPyAqLworICAgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUubWF4Q2xhc3NJRCA9CisgICAgICAgIChGVF9VU2hvcnQpKCBneHZhbGlkLT54c3RhdGV0YWJsZS5uQ2xhc3NlcyAtIDEgKTsKKyAgICB9CisKKyAgICBpZiAoIHN0YXRlQXJyYXkgIT0gMCApCisgICAgICBneHZfWFN0YXRlQXJyYXlfdmFsaWRhdGUoIHRhYmxlICsgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXRlQXJyYXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5tYXhDbGFzc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5uQ2xhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4RW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKyAgICBlbHNlCisgICAgeworI2lmIDAKKyAgICAgIG1heFN0YXRlID0gMTsgLyogMDpzdGFydCBvZiB0ZXh0LCAxOnN0YXJ0IG9mIGxpbmUgYXJlIHByZWRlZmluZWQgKi8KKyNlbmRpZgorICAgICAgbWF4RW50cnkgPSAwOworICAgIH0KKworICAgIGlmICggbWF4RW50cnkgPiAwICYmIGVudHJ5VGFibGUgPT0gMCApCisgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKworICAgIGlmICggZW50cnlUYWJsZSAhPSAwICkKKyAgICAgIGd4dl9YRW50cnlUYWJsZV92YWxpZGF0ZSggdGFibGUgKyBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnlUYWJsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUFycmF5X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUubWF4Q2xhc3NJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgb3ZlcmxhcHBpbmcgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIGludAorICBneHZfY29tcGFyZV9yYW5nZXMoIEZUX0J5dGVzICB0YWJsZTFfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHRhYmxlMV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgIHRhYmxlMl9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdGFibGUyX2xlbmd0aCApCisgIHsKKyAgICBpZiAoIHRhYmxlMV9zdGFydCA9PSB0YWJsZTJfc3RhcnQgKQorICAgIHsKKyAgICAgIGlmICggKCB0YWJsZTFfbGVuZ3RoID09IDAgfHwgdGFibGUyX2xlbmd0aCA9PSAwICkgKQorICAgICAgICBnb3RvIE91dDsKKyAgICB9CisgICAgZWxzZSBpZiAoIHRhYmxlMV9zdGFydCA8IHRhYmxlMl9zdGFydCApCisgICAgeworICAgICAgaWYgKCAoIHRhYmxlMV9zdGFydCArIHRhYmxlMV9sZW5ndGggKSA8PSB0YWJsZTJfc3RhcnQgKQorICAgICAgICBnb3RvIE91dDsKKyAgICB9CisgICAgZWxzZSBpZiAoIHRhYmxlMV9zdGFydCA+IHRhYmxlMl9zdGFydCApCisgICAgeworICAgICAgaWYgKCAoIHRhYmxlMV9zdGFydCA+PSB0YWJsZTJfc3RhcnQgKyB0YWJsZTJfbGVuZ3RoICkgKQorICAgICAgICBnb3RvIE91dDsKKyAgICB9CisgICAgcmV0dXJuIDE7CisKKyAgT3V0OgorICAgIHJldHVybiAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggRlRfQnl0ZXMgICAgICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgR1hWX29kdGVjdF9SYW5nZSAgb2R0ZWN0ICkKKyAgeworICAgIG9kdGVjdC0+cmFuZ2Vbb2R0ZWN0LT5uUmFuZ2VzXS5zdGFydCAgPSBzdGFydDsKKyAgICBvZHRlY3QtPnJhbmdlW29kdGVjdC0+blJhbmdlc10ubGVuZ3RoID0gbGVuZ3RoOworICAgIG9kdGVjdC0+cmFuZ2Vbb2R0ZWN0LT5uUmFuZ2VzXS5uYW1lICAgPSAoRlRfU3RyaW5nKiluYW1lOworICAgIG9kdGVjdC0+blJhbmdlcysrOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfb2R0ZWN0X3ZhbGlkYXRlKCBHWFZfb2R0ZWN0X1JhbmdlICBvZHRlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVUludCAgaSwgajsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJjaGVjayBvdmVybGFwIGFtb25nIG11bHRpIHJhbmdlcyIgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgb2R0ZWN0LT5uUmFuZ2VzOyBpKysgKQorICAgICAgZm9yICggaiA9IDA7IGogPCBpOyBqKysgKQorICAgICAgICBpZiAoIDAgIT0gZ3h2X2NvbXBhcmVfcmFuZ2VzKCBvZHRlY3QtPnJhbmdlW2ldLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZHRlY3QtPnJhbmdlW2ldLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2R0ZWN0LT5yYW5nZVtqXS5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2R0ZWN0LT5yYW5nZVtqXS5sZW5ndGggKSApCisgICAgICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggb2R0ZWN0LT5yYW5nZVtpXS5uYW1lIHx8IG9kdGVjdC0+cmFuZ2Vbal0ubmFtZSApCisgICAgICAgICAgICBHWFZfVFJBQ0UoKCAiZm91bmQgb3ZlcmxhcCBiZXR3ZWVuIHJhbmdlICVkIGFuZCByYW5nZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGksIGogKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgR1hWX1RSQUNFKCggImZvdW5kIG92ZXJsYXAgYmV0d2VlbiBgJXMnIGFuZCBgJXNcJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9kdGVjdC0+cmFuZ2VbaV0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9kdGVjdC0+cmFuZ2Vbal0ubmFtZSApKTsKKyNlbmRpZgorICAgICAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworICAgICAgICB9CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmNvbW1uLmggYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQ2MDhjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmNvbW1uLmgKQEAgLTAsMCArMSw1ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dmNvbW1uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoKKyAgICoga2V5d29yZHMgaW4gdmFyaWFibGUgbmFtaW5nCisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgdGFibGU6IE9mIHR5cGUgRlRfQnl0ZXMsIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGlzIHRhYmxlL3N1YnRhYmxlLgorICAgKiAgbGltaXQ6IE9mIHR5cGUgRlRfQnl0ZXMsIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZS9zdWJ0YWJsZSwKKyAgICogICAgICAgICBpbmNsdWRpbmcgcGFkZGluZyBmb3IgYWxpZ25tZW50LgorICAgKiAgb2Zmc2V0OiBPZiB0eXBlIEZUX1VJbnQsIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGZyb20gdGhlIHN0YXJ0IHRvIHRhcmdldC4KKyAgICogIGxlbmd0aDogT2YgdHlwZSBGVF9VSW50LCB0aGUgbnVtYmVyIG9mIG9jdGV0cyBmcm9tIHRoZSBzdGFydCB0byB0aGUKKyAgICogICAgICAgICAgZW5kIGluIHRoaXMgdGFibGUvc3VidGFibGUsIGluY2x1ZGluZyBwYWRkaW5nIGZvciBhbGlnbm1lbnQuCisgICAqCisgICAqICBfTUlOLCBfTUFYOiBTaG91bGQgYmUgYWRkZWQgdG8gdGhlIHRhaWwgb2YgbWFjcm9zLCBhcyBJTlRfTUlOLCBldGMuCisgICAqLworCisKKyNpZm5kZWYgX19HWFZDT01NTl9IX18KKyNkZWZpbmUgX19HWFZDT01NTl9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIHNvbWUgdmFyaWFibGVzIGFyZSBub3QgZXZhbHVhdGVkIG9yIG9ubHkgdXNlZCBpbiB0cmFjZSAqLworCisjaWZkZWYgIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisjZGVmaW5lIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyNlbHNlCisjdW5kZWYgIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyNlbmRpZgorCisjdW5kZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMgLyogZGVidWcgcHVycG9zZSAqLworCisjZGVmaW5lIElTX1BBUkFOT0lEX1ZBTElEQVRJT04gICAgICAgICAgKCBneHZhbGlkLT5yb290LT5sZXZlbCA+PSBGVF9WQUxJREFURV9QQVJBTk9JRCApCisjZGVmaW5lIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBlcnIgKSAgeyBpZiAoIElTX1BBUkFOT0lEX1ZBTElEQVRJT04gKSAoIGVyciApOyB9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgR1hWX1ZhbGlkYXRvclJlY18qICBHWFZfVmFsaWRhdG9yOworCisKKyNkZWZpbmUgRFVNTVlfTElNSVQgMAorCisgIHR5cGVkZWYgdm9pZAorICAoKkdYVl9WYWxpZGF0ZV9GdW5jKSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworCisgIC8qID09PT09PT09PT09PT09PT09PT09PT0gTG9va3VwVGFibGUgVmFsaWRhdG9yID09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHR5cGVkZWYgdW5pb24gIEdYVl9Mb29rdXBWYWx1ZURlc2NfCisgIHsKKyAgICBGVF9VU2hvcnQgdTsKKyAgICBGVF9TaG9ydCAgczsKKworICB9IEdYVl9Mb29rdXBWYWx1ZURlc2M7CisKKyAgdHlwZWRlZiBjb25zdCBHWFZfTG9va3VwVmFsdWVEZXNjKiBHWFZfTG9va3VwVmFsdWVDUHRyOworCisgIHR5cGVkZWYgZW51bSAgR1hWX0xvb2t1cFZhbHVlX1NpZ25TcGVjXworICB7CisgICAgR1hWX0xPT0tVUFZBTFVFX1VOU0lHTkVEID0gMCwKKyAgICBHWFZfTE9PS1VQVkFMVUVfU0lHTkVECisKKyAgfSBHWFZfTG9va3VwVmFsdWVfU2lnblNwZWM7CisKKworICB0eXBlZGVmIHZvaWQKKyAgKCpHWFZfTG9va3VwX1ZhbHVlX1ZhbGlkYXRlX0Z1bmMpKCBGVF9VU2hvcnQgICAgICAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICB2YWx1ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKTsKKworICB0eXBlZGVmIEdYVl9Mb29rdXBWYWx1ZURlc2MKKyAgKCpHWFZfTG9va3VwX0ZtdDRfVHJhbnNpdF9GdW5jKSggRlRfVVNob3J0ICAgICAgICAgICAgcmVsYXRpdmVfZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICBiYXNlX3ZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICAgIGxvb2t1cHRibF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApOworCisKKyAgLyogPT09PT09PT09PT09PT09PT09PT09PSBTdGF0ZVRhYmxlIFZhbGlkYXRvciA9PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdHlwZWRlZiBlbnVtICBHWFZfR2x5cGhPZmZzZXRfRm9ybWF0XworICB7CisgICAgR1hWX0dMWVBIT0ZGU0VUX05PTkUgICA9IC0xLAorICAgIEdYVl9HTFlQSE9GRlNFVF9VQ0hBUiAgPSAyLAorICAgIEdYVl9HTFlQSE9GRlNFVF9DSEFSLAorICAgIEdYVl9HTFlQSE9GRlNFVF9VU0hPUlQgPSA0LAorICAgIEdYVl9HTFlQSE9GRlNFVF9TSE9SVCwKKyAgICBHWFZfR0xZUEhPRkZTRVRfVUxPTkcgID0gOCwKKyAgICBHWFZfR0xZUEhPRkZTRVRfTE9ORworCisgIH0gR1hWX0dseXBoT2Zmc2V0X0Zvcm1hdDsKKworCisjZGVmaW5lIEdYVl9HTFlQSE9GRlNFVF9GTVQoIHRhYmxlICkgICAgICAgICAgIFwKKyAgICAgICAgKCBneHZhbGlkLT50YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgKQorCisjZGVmaW5lIEdYVl9HTFlQSE9GRlNFVF9TSVpFKCB0YWJsZSApICAgICAgICAgICAgICBcCisgICAgICAgICggZ3h2YWxpZC0+dGFibGUuZW50cnlfZ2x5cGhvZmZzZXRfZm10IC8gMiApCisKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAxNmJpdCBTdGF0ZVRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICB0eXBlZGVmIHVuaW9uICBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2NfCisgIHsKKyAgICBGVF9CeXRlICAgIHVjOworICAgIEZUX1VTaG9ydCAgdTsgICAgICAgLyogc2FtZSBhcyBHWFZfTG9va3VwVmFsdWVEZXNjICovCisgICAgRlRfVUxvbmcgICB1bDsKKyAgICBGVF9DaGFyICAgIGM7CisgICAgRlRfU2hvcnQgICBzOyAgICAgICAvKiBzYW1lIGFzIEdYVl9Mb29rdXBWYWx1ZURlc2MgKi8KKyAgICBGVF9Mb25nICAgIGw7CisKKyAgfSBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2M7CisKKyAgdHlwZWRlZiBjb25zdCBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldERlc2MqIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0cjsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpHWFZfU3RhdGVUYWJsZV9TdWJ0YWJsZV9TZXR1cF9GdW5jKSggRlRfVVNob3J0ICAgICAgdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgY2xhc3NUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgY2xhc3NUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgc3RhdGVBcnJheV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgZW50cnlUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkdYVl9TdGF0ZVRhYmxlX0VudHJ5X1ZhbGlkYXRlX0Z1bmMpKAorICAgICBGVF9CeXRlICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIgIGdseXBoT2Zmc2V0X3AsCisgICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGV0YWJsZV90YWJsZSwKKyAgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXRhYmxlX2xpbWl0LAorICAgICBHWFZfVmFsaWRhdG9yICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpHWFZfU3RhdGVUYWJsZV9PcHREYXRhX0xvYWRfRnVuYykoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9TdGF0ZVRhYmxlX1ZhbGlkYXRvclJlY18KKyAgeworICAgIEdYVl9HbHlwaE9mZnNldF9Gb3JtYXQgICAgICAgICAgICAgIGVudHJ5X2dseXBob2Zmc2V0X2ZtdDsKKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRkYXRhOworCisgICAgR1hWX1N0YXRlVGFibGVfU3VidGFibGVfU2V0dXBfRnVuYyAgc3VidGFibGVfc2V0dXBfZnVuYzsKKyAgICBHWFZfU3RhdGVUYWJsZV9FbnRyeV9WYWxpZGF0ZV9GdW5jICBlbnRyeV92YWxpZGF0ZV9mdW5jOworICAgIEdYVl9TdGF0ZVRhYmxlX09wdERhdGFfTG9hZF9GdW5jICAgIG9wdGRhdGFfbG9hZF9mdW5jOworCisgIH0gR1hWX1N0YXRlVGFibGVfVmFsaWRhdG9yUmVjLCAqR1hWX1N0YXRlVGFibGVfVmFsaWRhdG9yUmVjRGF0YTsKKworCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMzJiaXQgWFN0YXRlVGFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgIHR5cGVkZWYgR1hWX1N0YXRlVGFibGVfR2x5cGhPZmZzZXREZXNjICBHWFZfWFN0YXRlVGFibGVfR2x5cGhPZmZzZXREZXNjOworCisgIHR5cGVkZWYgY29uc3QgR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0RGVzYyogR1hWX1hTdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0cjsKKworICB0eXBlZGVmIHZvaWQKKyAgKCpHWFZfWFN0YXRlVGFibGVfU3VidGFibGVfU2V0dXBfRnVuYykoIEZUX1VMb25nICAgICAgIHRhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBjbGFzc1RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGVudHJ5VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBjbGFzc1RhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgc3RhdGVBcnJheV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGVudHJ5VGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgdHlwZWRlZiB2b2lkCisgICgqR1hWX1hTdGF0ZVRhYmxlX0VudHJ5X1ZhbGlkYXRlX0Z1bmMpKAorICAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIgIGdseXBoT2Zmc2V0X3AsCisgICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXRldGFibGVfdGFibGUsCisgICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgeHN0YXRldGFibGVfbGltaXQsCisgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworCisKKyAgdHlwZWRlZiBHWFZfU3RhdGVUYWJsZV9PcHREYXRhX0xvYWRfRnVuYyAgR1hWX1hTdGF0ZVRhYmxlX09wdERhdGFfTG9hZF9GdW5jOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9YU3RhdGVUYWJsZV9WYWxpZGF0b3JSZWNfCisgIHsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZ2x5cGhvZmZzZXRfZm10OworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRkYXRhOworCisgICAgR1hWX1hTdGF0ZVRhYmxlX1N1YnRhYmxlX1NldHVwX0Z1bmMgIHN1YnRhYmxlX3NldHVwX2Z1bmM7CisgICAgR1hWX1hTdGF0ZVRhYmxlX0VudHJ5X1ZhbGlkYXRlX0Z1bmMgIGVudHJ5X3ZhbGlkYXRlX2Z1bmM7CisgICAgR1hWX1hTdGF0ZVRhYmxlX09wdERhdGFfTG9hZF9GdW5jICAgIG9wdGRhdGFfbG9hZF9mdW5jOworCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5DbGFzc2VzOworICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDbGFzc0lEOworCisgIH0gR1hWX1hTdGF0ZVRhYmxlX1ZhbGlkYXRvclJlYywgKkdYVl9YU3RhdGVUYWJsZV9WYWxpZGF0b3JSZWNEYXRhOworCisKKyAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9WYWxpZGF0b3JSZWNfCisgIHsKKyAgICBGVF9WYWxpZGF0b3IgIHJvb3Q7CisKKyAgICBGVF9GYWNlICAgICAgIGZhY2U7CisgICAgdm9pZCogICAgICAgICB0YWJsZV9kYXRhOworCisgICAgRlRfVUxvbmcgICAgICBzdWJ0YWJsZV9sZW5ndGg7CisKKyAgICBHWFZfTG9va3VwVmFsdWVfU2lnblNwZWMgICAgICAgIGxvb2t1cHZhbF9zaWduOworICAgIEdYVl9Mb29rdXBfVmFsdWVfVmFsaWRhdGVfRnVuYyAgbG9va3VwdmFsX2Z1bmM7CisgICAgR1hWX0xvb2t1cF9GbXQ0X1RyYW5zaXRfRnVuYyAgICBsb29rdXBmbXQ0X3RyYW5zOworICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwdGJsX2hlYWQ7CisKKyAgICBGVF9VU2hvcnQgIG1pbl9naWQ7CisgICAgRlRfVVNob3J0ICBtYXhfZ2lkOworCisgICAgR1hWX1N0YXRlVGFibGVfVmFsaWRhdG9yUmVjICAgICBzdGF0ZXRhYmxlOworICAgIEdYVl9YU3RhdGVUYWJsZV9WYWxpZGF0b3JSZWMgICAgeHN0YXRldGFibGU7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIEZUX1VJbnQgICAgICAgICAgICAgZGVidWdfaW5kZW50OworICAgIGNvbnN0IEZUX1N0cmluZyogICAgZGVidWdfZnVuY3Rpb25fbmFtZVszXTsKKyNlbmRpZgorCisgIH0gR1hWX1ZhbGlkYXRvclJlYzsKKworCisjZGVmaW5lIEdYVl9UQUJMRV9EQVRBKCB0YWcsIGZpZWxkICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICggKCAoR1hWXyAjIyB0YWcgIyMgX0RhdGEpZ3h2YWxpZC0+dGFibGVfZGF0YSApLT5maWVsZCApCisKKyN1bmRlZiAgRlRfSU5WQUxJRF8KKyNkZWZpbmUgRlRfSU5WQUxJRF8oIF9lcnJvciApIFwKKyAgICAgICAgICBmdF92YWxpZGF0b3JfZXJyb3IoIGd4dmFsaWQtPnJvb3QsIEZUX1RIUk9XKCBfZXJyb3IgKSApCisKKyNkZWZpbmUgR1hWX0xJTUlUX0NIRUNLKCBfY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCBwICsgX2NvdW50ID4gKCBsaW1pdD8gbGltaXQgOiBneHZhbGlkLT5yb290LT5saW1pdCApICkgXAorICAgICAgICAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworI2RlZmluZSBHWFZfSU5JVCAgZ3h2YWxpZC0+ZGVidWdfaW5kZW50ID0gMAorCisjZGVmaW5lIEdYVl9OQU1FX0VOVEVSKCBuYW1lICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ3h2YWxpZC0+ZGVidWdfaW5kZW50ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlKi5zIiwgZ3h2YWxpZC0+ZGVidWdfaW5kZW50LCAwICkpOyBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJXMgdGFibGVcbiIsIG5hbWUgKSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBHWFZfRVhJVCAgZ3h2YWxpZC0+ZGVidWdfaW5kZW50IC09IDIKKworI2RlZmluZSBHWFZfVFJBQ0UoIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlKi5zIiwgZ3h2YWxpZC0+ZGVidWdfaW5kZW50LCAwICkpOyBcCisgICAgICAgICAgICBGVF9UUkFDRTQoIHMgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2Vsc2UgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyNkZWZpbmUgR1hWX0lOSVQgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICggMCApCisjZGVmaW5lIEdYVl9OQU1FX0VOVEVSKCBuYW1lICkgIGRvIHsgfSB3aGlsZSAoIDAgKQorI2RlZmluZSBHWFZfRVhJVCAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBHWFZfVFJBQ0UoIHMgKSAgICAgICAgICBkbyB7IH0gd2hpbGUgKCAwICkKKworI2VuZGlmICAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgMzJiaXQgYWxpZ25tZW50IGNoZWNraW5nICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEdYVl8zMkJJVF9BTElHTk1FTlRfVkFMSURBVEUoIGEgKSBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlmICggKGEpICYgMyApICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7ICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIER1bXBpbmcgQmluYXJ5IERhdGEgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBHWFZfVFJBQ0VfSEVYRFVNUCggcCwgbGVuICkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBGVF9CeXRlcyAgYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBmb3IgKCBiID0gcDsgYiA8IChGVF9CeXRlcylwICsgbGVuOyBiKysgKSBcCisgICAgICAgICAgICAgICAgRlRfVFJBQ0UxKCgiXFx4JTAyeCIsICpiKSkgOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIEdYVl9UUkFDRV9IRVhEVU1QX0MoIHAsIGxlbiApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZUX0J5dGVzICBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGZvciAoIGIgPSBwOyBiIDwgKEZUX0J5dGVzKXAgKyBsZW47IGIrKyApIFwKKyAgICAgICAgICAgICAgICBpZiAoIDB4NDAgPCAqYiAmJiAqYiA8IDB4N0UgKSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgRlRfVFJBQ0UxKCgiJWMiLCAqYikpIDsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIEZUX1RSQUNFMSgoIlxceCUwMngiLCAqYikpIDsgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKKyNkZWZpbmUgR1hWX1RSQUNFX0hFWERVTVBfU0ZOVE5BTUUoIG4gKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBHWFZfVFJBQ0VfSEVYRFVNUCggbi5zdHJpbmcsIG4uc3RyaW5nX2xlbiApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9CaW5TcmNoSGVhZGVyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICB1bml0U2l6ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgblVuaXRzX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGggSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMKCBGVF9JbnQgKQorICBneHZfZ2x5cGhpZF92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgQ09OVFJPTCBQT0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfY3RsUG9pbnRfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBjdGxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBTRk5UIE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfc2ZudE5hbWVfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIG5hbWVfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgbWluX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIG1heF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRFIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9TdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwKCBGVF9VU2hvcnQgICAgICB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgY2xhc3NUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIHN0YXRlQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgY2xhc3NUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIHN0YXRlQXJyYXlfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X1hTdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwKCBGVF9VTG9uZyAgICAgICB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGNsYXNzVGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgc3RhdGVBcnJheV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9TdGF0ZVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X1hTdGF0ZVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgIFVUSUxJVFkgTUFDUk9TIEFORCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9hcnJheV9nZXRsaW1pdHNfYnl0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgbWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgIG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfYXJyYXlfZ2V0bGltaXRzX3VzaG9ydCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9zZXRfbGVuZ3RoX2J5X3VzaG9ydF9vZmZzZXQoIEZUX1VTaG9ydCogICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiogICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBubWVtYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9zZXRfbGVuZ3RoX2J5X3Vsb25nX29mZnNldCggRlRfVUxvbmcqICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiogICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIG5tZW1iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQpOworCisKKyNkZWZpbmUgR1hWX1NVQlRBQkxFX09GRlNFVF9DSEVDSyggX29mZnNldCApICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggKF9vZmZzZXQpID4gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoICkgXAorICAgICAgICAgICAgICBGVF9JTlZBTElEX09GRlNFVDsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIEdYVl9TVUJUQUJMRV9MSU1JVF9DSEVDSyggX2NvdW50ICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoICggcCArIChfY291bnQpIC0gZ3h2YWxpZC0+c3VidGFibGVfc3RhcnQgKSA+IFwKKyAgICAgICAgICAgICAgICAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIEdYVl9VU0hPUlRfVE9fU0hPUlQoIF91cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKCAweDgwMDBVIDwgKCBfdXMgKSApID8gKCAoIF91cyApIC0gMHg4MDAwVSApIDogKCBfdXMgKSApCisKKyNkZWZpbmUgR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUgICggMiArIDIgKyAyICsgMiApCisjZGVmaW5lIEdYVl9TVEFURUhFQURFUl9TSVpFICAgICAgICBHWFZfU1RBVEVUQUJMRV9IRUFERVJfU0laRQorCisjZGVmaW5lIEdYVl9YU1RBVEVUQUJMRV9IRUFERVJfU0laRSAgKCA0ICsgNCArIDQgKyA0ICkKKyNkZWZpbmUgR1hWX1hTVEFURUhFQURFUl9TSVpFICAgICAgICBHWFZfWFNUQVRFVEFCTEVfSEVBREVSX1NJWkUKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIG92ZXJsYXBwaW5nICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfb2R0ZWN0X0RhdGFSZWNfCisgIHsKKyAgICBGVF9CeXRlcyAgICBzdGFydDsKKyAgICBGVF9VTG9uZyAgICBsZW5ndGg7CisgICAgRlRfU3RyaW5nKiAgbmFtZTsKKworICB9IEdYVl9vZHRlY3RfRGF0YVJlYywgICpHWFZfb2R0ZWN0X0RhdGE7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9vZHRlY3RfUmFuZ2VSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgIG5SYW5nZXM7CisgICAgR1hWX29kdGVjdF9EYXRhICByYW5nZTsKKworICB9IEdYVl9vZHRlY3RfUmFuZ2VSZWMsICpHWFZfb2R0ZWN0X1JhbmdlOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggRlRfQnl0ZXMgICAgICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgR1hWX29kdGVjdF9SYW5nZSAgb2R0ZWN0ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfb2R0ZWN0X3ZhbGlkYXRlKCBHWFZfb2R0ZWN0X1JhbmdlICBvZHRlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgKTsKKworCisjZGVmaW5lIEdYVl9PRFRFQ1QoIG4sIG9kdGVjdCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEdYVl9vZHRlY3RfRGF0YVJlYyAgIG9kdGVjdCAjIyBfcmFuZ2Vbbl07ICAgICAgICAgIFwKKyAgICAgICAgICBHWFZfb2R0ZWN0X1JhbmdlUmVjICBvZHRlY3QgIyMgX3JlYyA9IHsgMCwgTlVMTCB9OyBcCisgICAgICAgICAgR1hWX29kdGVjdF9SYW5nZSAgICAgb2R0ZWN0ID0gTlVMTAorCisjZGVmaW5lIEdYVl9PRFRFQ1RfSU5JVCggb2R0ZWN0ICkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG9kdGVjdCAjIyBfcmVjLm5SYW5nZXMgPSAwOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvZHRlY3QgIyMgX3JlYy5yYW5nZSAgID0gb2R0ZWN0ICMjIF9yYW5nZTsgXAorICAgICAgICAgICAgb2R0ZWN0ICAgICAgICAgICAgICAgICA9ICYgb2R0ZWN0ICMjIF9yZWM7IFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworCisgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19HWFZDT01NTl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZlcnJvci5oIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiYzIzYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZlcnJvci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dmVycm9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGVycm9yICAgICAgKi8KKyAgLyogZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0dYVkVSUk9SX0hfXworI2RlZmluZSBfX0dYVkVSUk9SX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBHWFZfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0dYdmFsaWQKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fR1hWRVJST1JfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZlYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE5Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZlYXQuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2ZmVhdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmFsaWQuaCIKKyNpbmNsdWRlICJneHZjb21tbi5oIgorI2luY2x1ZGUgImd4dmZlYXQuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmZlYXQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIGFuZCBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfZmVhdF9EYXRhUmVjXworICB7CisgICAgRlRfVUludCAgICByZXNlcnZlZF9zaXplOworICAgIEZUX1VTaG9ydCAgZmVhdHVyZTsKKyAgICBGVF9VU2hvcnQgIHNldHRpbmc7CisKKyAgfSBHWFZfZmVhdF9EYXRhUmVjLCAqR1hWX2ZlYXRfRGF0YTsKKworCisjZGVmaW5lIEdYVl9GRUFUX0RBVEEoIGZpZWxkICkgIEdYVl9UQUJMRV9EQVRBKCBmZWF0LCBmaWVsZCApCisKKworICB0eXBlZGVmIGVudW0gIEdYVl9GZWF0dXJlRmxhZ3NNYXNrXworICB7CisgICAgR1hWX0ZFQVRfTUFTS19FWENMVVNJVkVfU0VUVElOR1MgPSAweDgwMDBVLAorICAgIEdYVl9GRUFUX01BU0tfRFlOQU1JQ19ERUZBVUxUICAgID0gMHg0MDAwLAorICAgIEdYVl9GRUFUX01BU0tfVU5VU0VEICAgICAgICAgICAgID0gMHgzRjAwLAorICAgIEdYVl9GRUFUX01BU0tfREVGQVVMVF9TRVRUSU5HICAgID0gMHgwMEZGCisKKyAgfSBHWFZfRmVhdHVyZUZsYWdzTWFzazsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBVVElMSVRZIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9mZWF0X3JlZ2lzdHJ5X3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgblNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgZXhjbHVzaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfTkFNRV9FTlRFUiggImZlYXR1cmUgaW4gcmVnaXN0cnkiICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiIChmZWF0dXJlID0gJXUpXG4iLCBmZWF0dXJlICkpOworCisgICAgaWYgKCBmZWF0dXJlID49IGd4dl9mZWF0X3JlZ2lzdHJ5X2xlbmd0aCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggImZlYXR1cmUgbnVtYmVyICVkIGlzIG91dCBvZiByYW5nZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZlYXR1cmUsIGd4dl9mZWF0X3JlZ2lzdHJ5X2xlbmd0aCApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0RBVEEgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGd4dl9mZWF0X3JlZ2lzdHJ5W2ZlYXR1cmVdLmV4aXN0ZW5jZSA9PSAwICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAiZmVhdHVyZSBudW1iZXIgJWQgaXMgaW4gZGVmaW5lZCByYW5nZSBidXQgZG9lc24ndCBleGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgIGZlYXR1cmUgKSk7CisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBneHZfZmVhdF9yZWdpc3RyeVtmZWF0dXJlXS5hcHBsZV9yZXNlcnZlZCApCisgICAgeworICAgICAgLyogRG9uJ3QgdXNlIGhlcmUuIEFwcGxlIGlzIHJlc2VydmVkLiAqLworICAgICAgR1hWX1RSQUNFKCggImZlYXR1cmUgbnVtYmVyICVkIGlzIHJlc2VydmVkIGJ5IEFwcGxlXG4iLCBmZWF0dXJlICkpOworICAgICAgaWYgKCBneHZhbGlkLT5yb290LT5sZXZlbCA+PSBGVF9WQUxJREFURV9USUdIVCApCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICB9CisKKyAgICBpZiAoIG5TZXR0aW5ncyAhPSBneHZfZmVhdF9yZWdpc3RyeVtmZWF0dXJlXS5uU2V0dGluZ3MgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICJmZWF0dXJlICVkOiBuU2V0dGluZ3MgJWQgIT0gZGVmaW5lZCBuU2V0dGluZ3MgJWRcbiIsCisgICAgICAgICAgICAgICAgICBmZWF0dXJlLCBuU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICBneHZfZmVhdF9yZWdpc3RyeVtmZWF0dXJlXS5uU2V0dGluZ3MgKSk7CisgICAgICBpZiAoIGd4dmFsaWQtPnJvb3QtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIGlmICggZXhjbHVzaXZlICE9IGd4dl9mZWF0X3JlZ2lzdHJ5W2ZlYXR1cmVdLmV4Y2x1c2l2ZSApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggImV4Y2x1c2l2ZSBmbGFnICVkIGRpZmZlcnMgZnJvbSBwcmVkZWZpbmVkIHZhbHVlXG4iLAorICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlICkpOworICAgICAgaWYgKCBneHZhbGlkLT5yb290LT5sZXZlbCA+PSBGVF9WQUxJREFURV9USUdIVCApCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2ZlYXRfbmFtZV9pbmRleF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKyAgICBGVF9TaG9ydCAgbmFtZUluZGV4OworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIm5hbWVJbmRleCIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIG5hbWVJbmRleCA9IEZUX05FWFRfU0hPUlQgKCBwICk7CisgICAgR1hWX1RSQUNFKCggIiAobmFtZUluZGV4ID0gJWQpXG4iLCBuYW1lSW5kZXggKSk7CisKKyAgICBneHZfc2ZudE5hbWVfdmFsaWRhdGUoIChGVF9VU2hvcnQpbmFtZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI3NjhVLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9mZWF0X3NldHRpbmdfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgZXhjbHVzaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworICAgIEZUX1VTaG9ydCAgc2V0dGluZzsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJzZXR0aW5nIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICk7CisKKyAgICBzZXR0aW5nID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIC8qIElmIHdlIGhhdmUgZXhjbHVzaXZlIHNldHRpbmcsIHRoZSBzZXR0aW5nIHNob3VsZCBiZSBvZGQuICovCisgICAgaWYgKCBleGNsdXNpdmUgJiYgKCBzZXR0aW5nICYgMSApID09IDAgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgZ3h2X2ZlYXRfbmFtZV9pbmRleF92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEdYVl9GRUFUX0RBVEEoIHNldHRpbmcgKSA9IHNldHRpbmc7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2ZlYXRfbmFtZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCAgICAgICAgICAgICA9IHRhYmxlOworICAgIEZUX1VJbnQgICAgcmVzZXJ2ZWRfc2l6ZSA9IEdYVl9GRUFUX0RBVEEoIHJlc2VydmVkX3NpemUgKTsKKworICAgIEZUX1VTaG9ydCAgZmVhdHVyZTsKKyAgICBGVF9VU2hvcnQgIG5TZXR0aW5nczsKKyAgICBGVF9VTG9uZyAgIHNldHRpbmdUYWJsZTsKKyAgICBGVF9VU2hvcnQgIGZlYXR1cmVGbGFnczsKKworICAgIEZUX0Jvb2wgICAgZXhjbHVzaXZlOworICAgIEZUX0ludCAgICAgbGFzdF9zZXR0aW5nOworICAgIEZUX1VJbnQgICAgaTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJuYW1lIiApOworCisgICAgLyogZmVhdHVyZSArIG5TZXR0aW5ncyArIHNldHRpbmdUYWJsZSArIGZlYXR1cmVGbGFncyAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKyA0ICsgMiApOworCisgICAgZmVhdHVyZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgR1hWX0ZFQVRfREFUQSggZmVhdHVyZSApID0gZmVhdHVyZTsKKworICAgIG5TZXR0aW5ncyAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgc2V0dGluZ1RhYmxlID0gRlRfTkVYVF9VTE9ORyAoIHAgKTsKKyAgICBmZWF0dXJlRmxhZ3MgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgaWYgKCBzZXR0aW5nVGFibGUgPCByZXNlcnZlZF9zaXplICkKKyAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgaWYgKCAoIGZlYXR1cmVGbGFncyAmIEdYVl9GRUFUX01BU0tfVU5VU0VEICkgPT0gMCApCisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisKKyAgICBleGNsdXNpdmUgPSBGVF9CT09MKCBmZWF0dXJlRmxhZ3MgJiBHWFZfRkVBVF9NQVNLX0VYQ0xVU0lWRV9TRVRUSU5HUyApOworICAgIGlmICggZXhjbHVzaXZlICkKKyAgICB7CisgICAgICBGVF9CeXRlICBkeW5hbWljX2RlZmF1bHQ7CisKKworICAgICAgaWYgKCBmZWF0dXJlRmxhZ3MgJiBHWFZfRkVBVF9NQVNLX0RZTkFNSUNfREVGQVVMVCApCisgICAgICAgIGR5bmFtaWNfZGVmYXVsdCA9IChGVF9CeXRlKSggZmVhdHVyZUZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfRkVBVF9NQVNLX0RFRkFVTFRfU0VUVElORyApOworICAgICAgZWxzZQorICAgICAgICBkeW5hbWljX2RlZmF1bHQgPSAwOworCisgICAgICAvKiBJZiBleGNsdXNpdmUsIGNoZWNrIHdoZXRoZXIgZGVmYXVsdCBzZXR0aW5nIGlzIGluIHRoZSByYW5nZS4gKi8KKyAgICAgIGlmICggISggZHluYW1pY19kZWZhdWx0IDwgblNldHRpbmdzICkgKQorICAgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKKyAgICBneHZfZmVhdF9yZWdpc3RyeV92YWxpZGF0ZSggZmVhdHVyZSwgblNldHRpbmdzLCBleGNsdXNpdmUsIGd4dmFsaWQgKTsKKworICAgIGd4dl9mZWF0X25hbWVfaW5kZXhfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBwID0gZ3h2YWxpZC0+cm9vdC0+YmFzZSArIHNldHRpbmdUYWJsZTsKKyAgICBmb3IgKCBsYXN0X3NldHRpbmcgPSAtMSwgaSA9IDA7IGkgPCBuU2V0dGluZ3M7IGkrKyApCisgICAgeworICAgICAgZ3h2X2ZlYXRfc2V0dGluZ192YWxpZGF0ZSggcCwgbGltaXQsIGV4Y2x1c2l2ZSwgZ3h2YWxpZCApOworCisgICAgICBpZiAoIChGVF9JbnQpR1hWX0ZFQVRfREFUQSggc2V0dGluZyApIDw9IGxhc3Rfc2V0dGluZyApCisgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0ZPUk1BVCApOworCisgICAgICBsYXN0X3NldHRpbmcgPSAoRlRfSW50KUdYVl9GRUFUX0RBVEEoIHNldHRpbmcgKTsKKyAgICAgIC8qIHNldHRpbmcgKyBuYW1lSW5kZXggKi8KKyAgICAgIHAgKz0gKCAyICsgMiApOworICAgIH0KKworICAgIEdYVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgZmVhdCBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfZmVhdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBHWFZfVmFsaWRhdG9yUmVjICBneHZhbGlkcmVjOworICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgPSAmZ3h2YWxpZHJlYzsKKworICAgIEdYVl9mZWF0X0RhdGFSZWMgIGZlYXRyZWM7CisgICAgR1hWX2ZlYXRfRGF0YSAgICAgZmVhdCA9ICZmZWF0cmVjOworCisgICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgICAgICAgICBsaW1pdCA9IDA7CisKKyAgICBGVF9VSW50ICAgICAgICAgICBmZWF0dXJlTmFtZUNvdW50OworCisgICAgRlRfVUludCAgICAgICAgICAgaTsKKyAgICBGVF9JbnQgICAgICAgICAgICBsYXN0X2ZlYXR1cmU7CisKKworICAgIGd4dmFsaWQtPnJvb3QgICAgICAgPSBmdHZhbGlkOworICAgIGd4dmFsaWQtPnRhYmxlX2RhdGEgPSBmZWF0OworICAgIGd4dmFsaWQtPmZhY2UgICAgICAgPSBmYWNlOworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgYGZlYXQnIHRhYmxlXG4iICkpOworICAgIEdYVl9JTklUOworCisgICAgZmVhdC0+cmVzZXJ2ZWRfc2l6ZSA9IDA7CisKKyAgICAvKiB2ZXJzaW9uICsgZmVhdHVyZU5hbWVDb3VudCArIG5vbmVfMCArIG5vbmVfMSAgKi8KKyAgICBHWFZfTElNSVRfQ0hFQ0soIDQgKyAyICsgMiArIDQgKTsKKyAgICBmZWF0LT5yZXNlcnZlZF9zaXplICs9IDQgKyAyICsgMiArIDQ7CisKKyAgICBpZiAoIEZUX05FWFRfVUxPTkcoIHAgKSAhPSAweDAwMDEwMDAwVUwgKSAvKiBWZXJzaW9uICovCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIGZlYXR1cmVOYW1lQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEdYVl9UUkFDRSgoICIgKGZlYXR1cmVOYW1lQ291bnQgPSAlZClcbiIsIGZlYXR1cmVOYW1lQ291bnQgKSk7CisKKyAgICBpZiAoICEoIElTX1BBUkFOT0lEX1ZBTElEQVRJT04gKSApCisgICAgICBwICs9IDY7IC8qIHNraXAgKG5vbmUpIGFuZCAobm9uZSkgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApICE9IDAgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIGlmICggRlRfTkVYVF9VTE9ORyggcCApICAhPSAwICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIGZlYXQtPnJlc2VydmVkX3NpemUgKz0gZmVhdHVyZU5hbWVDb3VudCAqICggMiArIDIgKyA0ICsgMiArIDIgKTsKKworICAgIGZvciAoIGxhc3RfZmVhdHVyZSA9IC0xLCBpID0gMDsgaSA8IGZlYXR1cmVOYW1lQ291bnQ7IGkrKyApCisgICAgeworICAgICAgZ3h2X2ZlYXRfbmFtZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgICAgaWYgKCAoRlRfSW50KUdYVl9GRUFUX0RBVEEoIGZlYXR1cmUgKSA8PSBsYXN0X2ZlYXR1cmUgKQorICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9GT1JNQVQgKTsKKworICAgICAgbGFzdF9mZWF0dXJlID0gR1hWX0ZFQVRfREFUQSggZmVhdHVyZSApOworICAgICAgcCArPSAyICsgMiArIDQgKyAyICsgMjsKKyAgICB9CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZlYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZlYXQuaApAQCAtMCwwICsxLDE3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2ZmVhdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0dYVkZFQVRfSF9fCisjZGVmaW5lIF9fR1hWRkVBVF9IX18KKworCisjaW5jbHVkZSAiZ3h2YWxpZC5oIgorI2luY2x1ZGUgImd4dmNvbW1uLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgUmVnaXN0cnkgcHJlZGVmaW5lZCBieSBBcHBsZSAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBUT0RPOiBNb3JlIGNvbXBhY3QgZm9ybWF0ICovCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfRmVhdHVyZV9SZWdpc3RyeVJlY18KKyAgeworICAgIEZUX0Jvb2wgIGV4aXN0ZW5jZTsKKyAgICBGVF9Cb29sICBhcHBsZV9yZXNlcnZlZDsKKyAgICBGVF9Cb29sICBleGNsdXNpdmU7CisgICAgRlRfQnl0ZSAgblNldHRpbmdzOworCisgIH0gR1hfRmVhdHVyZV9SZWdpc3RyeVJlYzsKKworCisjZGVmaW5lIGd4dl9mZWF0X3JlZ2lzdHJ5X2xlbmd0aCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIHNpemVvZiAoIGd4dl9mZWF0X3JlZ2lzdHJ5ICkgLyAgICAgICAgXAorICAgICAgICAgICAgICBzaXplb2YgKCBHWF9GZWF0dXJlX1JlZ2lzdHJ5UmVjICkgKQorCisKKyAgc3RhdGljIEdYX0ZlYXR1cmVfUmVnaXN0cnlSZWMgIGd4dl9mZWF0X3JlZ2lzdHJ5W10gPQorICB7CisgICAgLyogR2VuZXJhdGVkIGZyb20gZ3h2Zmdlbi5jICovCisgICAgezEsIDAsIDAsICAxfSwgICAvKiBBbGwgVHlwb2dyYXBoaWMgRmVhdHVyZXMgKi8KKyAgICB7MSwgMCwgMCwgIDh9LCAgIC8qIExpZ2F0dXJlcyAqLworICAgIHsxLCAwLCAxLCAgM30sICAgLyogQ3Vyc2l2ZSBDb25uZWN0aW9uICovCisgICAgezEsIDAsIDEsICA2fSwgICAvKiBMZXR0ZXIgQ2FzZSAqLworICAgIHsxLCAwLCAwLCAgMX0sICAgLyogVmVydGljYWwgU3Vic3RpdHV0aW9uICovCisgICAgezEsIDAsIDAsICAxfSwgICAvKiBMaW5ndWlzdGljIFJlYXJyYW5nZW1lbnQgKi8KKyAgICB7MSwgMCwgMSwgIDJ9LCAgIC8qIE51bWJlciBTcGFjaW5nICovCisgICAgezEsIDEsIDAsICAwfSwgICAvKiBBcHBsZSBSZXNlcnZlZCAxICovCisgICAgezEsIDAsIDAsICA1fSwgICAvKiBTbWFydCBTd2FzaGVzICovCisgICAgezEsIDAsIDEsICAzfSwgICAvKiBEaWFjcml0aWNzICovCisgICAgezEsIDAsIDEsICA0fSwgICAvKiBWZXJ0aWNhbCBQb3NpdGlvbiAqLworICAgIHsxLCAwLCAxLCAgM30sICAgLyogRnJhY3Rpb25zICovCisgICAgezEsIDEsIDAsICAwfSwgICAvKiBBcHBsZSBSZXNlcnZlZCAyICovCisgICAgezEsIDAsIDAsICAxfSwgICAvKiBPdmVybGFwcGluZyBDaGFyYWN0ZXJzICovCisgICAgezEsIDAsIDAsICA2fSwgICAvKiBUeXBvZ3JhcGhpYyBFeHRyYXMgKi8KKyAgICB7MSwgMCwgMCwgIDV9LCAgIC8qIE1hdGhlbWF0aWNhbCBFeHRyYXMgKi8KKyAgICB7MSwgMCwgMSwgIDd9LCAgIC8qIE9ybmFtZW50IFNldHMgKi8KKyAgICB7MSwgMCwgMSwgIDF9LCAgIC8qIENoYXJhY3RlciBBbHRlcm5hdGl2ZXMgKi8KKyAgICB7MSwgMCwgMSwgIDV9LCAgIC8qIERlc2lnbiBDb21wbGV4aXR5ICovCisgICAgezEsIDAsIDEsICA2fSwgICAvKiBTdHlsZSBPcHRpb25zICovCisgICAgezEsIDAsIDEsIDExfSwgICAvKiBDaGFyYWN0ZXIgU2hhcGUgKi8KKyAgICB7MSwgMCwgMSwgIDJ9LCAgIC8qIE51bWJlciBDYXNlICovCisgICAgezEsIDAsIDEsICA0fSwgICAvKiBUZXh0IFNwYWNpbmcgKi8KKyAgICB7MSwgMCwgMSwgMTB9LCAgIC8qIFRyYW5zbGl0ZXJhdGlvbiAqLworICAgIHsxLCAwLCAxLCAgOX0sICAgLyogQW5ub3RhdGlvbiAqLworICAgIHsxLCAwLCAxLCAgMn0sICAgLyogS2FuYSBTcGFjaW5nICovCisgICAgezEsIDAsIDEsICAyfSwgICAvKiBJZGVvZ3JhcGhpYyBTcGFjaW5nICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MCwgMCwgMCwgIDB9LCAgIC8qIF9fRU1QVFlfXyAqLworICAgIHswLCAwLCAwLCAgMH0sICAgLyogX19FTVBUWV9fICovCisgICAgezAsIDAsIDAsICAwfSwgICAvKiBfX0VNUFRZX18gKi8KKyAgICB7MSwgMCwgMSwgIDR9LCAgIC8qIFRleHQgU3BhY2luZyAqLworICAgIHsxLCAwLCAxLCAgMn0sICAgLyogS2FuYSBTcGFjaW5nICovCisgICAgezEsIDAsIDEsICAyfSwgICAvKiBJZGVvZ3JhcGhpYyBTcGFjaW5nICovCisgICAgezEsIDAsIDEsICA0fSwgICAvKiBDSksgUm9tYW4gU3BhY2luZyAqLworICB9OworCisKKyNlbmRpZiAvKiBfX0dYVkZFQVRfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2Zmdlbi5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZnZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWM1ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmZnZW4uYwpAQCAtMCwwICsxLDQ4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3hmZ2VuLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEdlbmVyYXRlIGZlYXR1cmUgcmVnaXN0cnkgZGF0YSBmb3IgZ3h2IGBmZWF0JyB2YWxpZGF0b3IuICAgICAgICAgICAgICovCisvKiAgICBUaGlzIHByb2dyYW0gaXMgZGVyaXZlZCBmcm9tIGd4ZmVhdHJlZy5jIGluIGd4bGF5b3V0LiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4ZmVhdHJlZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBEYXRhYmFzZSBvZiBmb250IGZlYXR1cmVzIHByZS1kZWZpbmVkIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuICAgICAgICAqLworLyogICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvUmVnaXN0cnkvICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBtYXkgb25seSBiZSB1c2VkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGZlYXRyZWcuYyBpcyBzdXBwb3J0ZWQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSW5mb3JtYXRpb24tdGVjaG5vbG9neSBQcm9tb3Rpb24gQWdlbmN5LCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVGhpcyBmaWxlIGlzIGNvbXBpbGVkIGFzIGEgc3RhbmQtYWxvbmUgZXhlY3V0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoaXMgZmlsZSBpcyBuZXZlciBjb21waWxlZCBpbnRvIGBsaWJmcmVldHlwZTInLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGUgb3V0cHV0IG9mIHRoaXMgZmlsZSBpcyB1c2VkIGluIGBneHZmZWF0LmMnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENvbXBpbGU6IGdjYyBgcGtnLWNvbmZpZyAtLWNmbGFncyBmcmVldHlwZTJgIGd4dmZnZW4uYyAtbyBneHZmZ2VuICAgICAgICovCisvKiBSdW46IC4vZ3h2ZmdlbiA+IHRtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKgorICAgKiBJZiB5b3UgYWRkIGEgbmV3IHNldHRpbmcgdG8gYSBmZWF0dXJlLCBjaGVjayB0aGUgbnVtYmVyIG9mIHNldHRpbmdzCisgICAqIGluIHRoZSBmZWF0dXJlLiAgSWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIGRlZmluZWQgYXMKKyAgICogRkVBVFJFR19NQVhfU0VUVElORywgdXBkYXRlIHRoZSB2YWx1ZS4KKyAgICovCisjZGVmaW5lIEZFQVRSRUdfTUFYX1NFVFRJTkcgIDEyCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIGFuZCBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFQUExFX1JFU0VSVkVEICAgICAgICAgIkFwcGxlIFJlc2VydmVkIgorI2RlZmluZSBBUFBMRV9SRVNFUlZFRF9MRU5HVEggIDE0CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0ZlYXR1cmVfUmVnaXN0cnlSZWNfCisgIHsKKyAgICBjb25zdCBjaGFyKiAgZmVhdF9uYW1lOworICAgIGNoYXIgICAgICAgICBleGNsdXNpdmU7CisgICAgY2hhciogICAgICAgIHNldHRpbmdfbmFtZVtGRUFUUkVHX01BWF9TRVRUSU5HXTsKKworICB9IEdYX0ZlYXR1cmVfUmVnaXN0cnlSZWM7CisKKworI2RlZmluZSBFTVBUWUZFQVQgezAsIDAsIHtOVUxMfX0KKworCisgIHN0YXRpYyBHWF9GZWF0dXJlX1JlZ2lzdHJ5UmVjIGZlYXRyZWdfdGFibGVbXSA9IHsKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAqLworICAgICAgIkFsbCBUeXBvZ3JhcGhpYyBGZWF0dXJlcyIsCisgICAgICAwLAorICAgICAgeworICAgICAgICAiQWxsIFR5cGUgRmVhdHVyZXMiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgKi8KKyAgICAgICJMaWdhdHVyZXMiLAorICAgICAgMCwKKyAgICAgIHsKKyAgICAgICAgIlJlcXVpcmVkIExpZ2F0dXJlcyIsCisgICAgICAgICJDb21tb24gTGlnYXR1cmVzIiwKKyAgICAgICAgIlJhcmUgTGlnYXR1cmVzIiwKKyAgICAgICAgIkxvZ29zIiwKKyAgICAgICAgIlJlYnVzIFBpY3R1cmVzIiwKKyAgICAgICAgIkRpcGh0aG9uZyBMaWdhdHVyZXMiLAorICAgICAgICAiU3F1YXJlZCBMaWdhdHVyZXMiLAorICAgICAgICAiU3F1YXJlZCBMaWdhdHVyZXMsIEFiYnJldmlhdGVkIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgICAiQ3Vyc2l2ZSBDb25uZWN0aW9uIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJVbmNvbm5lY3RlZCIsCisgICAgICAgICJQYXJ0aWFsbHkgQ29ubmVjdGVkIiwKKyAgICAgICAgIkN1cnNpdmUiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAgICJMZXR0ZXIgQ2FzZSIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiVXBwZXIgJiBMb3dlciBDYXNlIiwKKyAgICAgICAgIkFsbCBDYXBzIiwKKyAgICAgICAgIkFsbCBMb3dlciBDYXNlIiwKKyAgICAgICAgIlNtYWxsIENhcHMiLAorICAgICAgICAiSW5pdGlhbCBDYXBzIiwKKyAgICAgICAgIkluaXRpYWwgQ2FwcyAmIFNtYWxsIENhcHMiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQgKi8KKyAgICAgICJWZXJ0aWNhbCBTdWJzdGl0dXRpb24iLAorICAgICAgMCwKKyAgICAgIHsKKyAgICAgICAgLyogIlN1YnN0aXR1dGUgVmVydGljYWwgRm9ybXMiLCAqLworICAgICAgICAiVHVybnMgb24gdGhlIGZlYXR1cmUiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUgKi8KKyAgICAgICJMaW5ndWlzdGljIFJlYXJyYW5nZW1lbnQiLAorICAgICAgMCwKKyAgICAgIHsKKyAgICAgICAgLyogIkxpbmd1aXN0aWMgUmVhcnJhbmdlbWVudCIsICovCisgICAgICAgICJUdXJucyBvbiB0aGUgZmVhdHVyZSIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNiAqLworICAgICAgIk51bWJlciBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJNb25vc3BhY2VkIE51bWJlcnMiLAorICAgICAgICAiUHJvcG9ydGlvbmFsIE51bWJlcnMiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcgKi8KKyAgICAgIEFQUExFX1JFU0VSVkVEICIgMSIsCisgICAgICAwLAorICAgICAge05VTEx9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDggKi8KKyAgICAgICJTbWFydCBTd2FzaGVzIiwKKyAgICAgIDAsCisgICAgICB7CisgICAgICAgICJXb3JkIEluaXRpYWwgU3dhc2hlcyIsCisgICAgICAgICJXb3JkIEZpbmFsIFN3YXNoZXMiLAorICAgICAgICAiTGluZSBJbml0aWFsIFN3YXNoZXMiLAorICAgICAgICAiTGluZSBGaW5hbCBTd2FzaGVzIiwKKyAgICAgICAgIk5vbi1GaW5hbCBTd2FzaGVzIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5ICovCisgICAgICAiRGlhY3JpdGljcyIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiU2hvdyBEaWFjcml0aWNzIiwKKyAgICAgICAgIkhpZGUgRGlhY3JpdGljcyIsCisgICAgICAgICJEZWNvbXBvc2UgRGlhY3JpdGljcyIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgKi8KKyAgICAgICJWZXJ0aWNhbCBQb3NpdGlvbiIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAvKiAiTm9ybWFsIFBvc2l0aW9uIiwgKi8KKyAgICAgICAgIk5vIFZlcnRpY2FsIFBvc2l0aW9uIiwKKyAgICAgICAgIlN1cGVyaW9ycyIsCisgICAgICAgICJJbmZlcmlvcnMiLAorICAgICAgICAiT3JkaW5hbHMiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExICovCisgICAgICAiRnJhY3Rpb25zIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJObyBGcmFjdGlvbnMiLAorICAgICAgICAiVmVydGljYWwgRnJhY3Rpb25zIiwKKyAgICAgICAgIkRpYWdvbmFsIEZyYWN0aW9ucyIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTIgKi8KKyAgICAgIEFQUExFX1JFU0VSVkVEICIgMiIsCisgICAgICAwLAorICAgICAge05VTEx9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzICovCisgICAgICAiT3ZlcmxhcHBpbmcgQ2hhcmFjdGVycyIsCisgICAgICAwLAorICAgICAgeworICAgICAgICAvKiAiUHJldmVudCBPdmVybGFwIiwgKi8KKyAgICAgICAgIlR1cm5zIG9uIHRoZSBmZWF0dXJlIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCAqLworICAgICAgIlR5cG9ncmFwaGljIEV4dHJhcyIsCisgICAgICAwLAorICAgICAgeworICAgICAgICAiSHlwaGVucyB0byBFbSBEYXNoIiwKKyAgICAgICAgIkh5cGhlbnMgdG8gRW4gRGFzaCIsCisgICAgICAgICJVbnNsYXNoZWQgWmVybyIsCisgICAgICAgICJGb3JtIEludGVycm9iYW5nIiwKKyAgICAgICAgIlNtYXJ0IFF1b3RlcyIsCisgICAgICAgICJQZXJpb2RzIHRvIEVsbGlwc2lzIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNSAqLworICAgICAgIk1hdGhlbWF0aWNhbCBFeHRyYXMiLAorICAgICAgMCwKKyAgICAgIHsKKyAgICAgICAgIkh5cGhlbnMgdG8gTWludXMiLAorICAgICAgICAiQXN0ZXJpc2sgdG8gTXVsdGlwbHkiLAorICAgICAgICAiU2xhc2ggdG8gRGl2aWRlIiwKKyAgICAgICAgIkluZXF1YWxpdHkgTGlnYXR1cmVzIiwKKyAgICAgICAgIkV4cG9uZW50cyIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYgKi8KKyAgICAgICJPcm5hbWVudCBTZXRzIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJObyBPcm5hbWVudHMiLAorICAgICAgICAiRGluZ2JhdHMiLAorICAgICAgICAiUGkgQ2hhcmFjdGVycyIsCisgICAgICAgICJGbGV1cm9ucyIsCisgICAgICAgICJEZWNvcmF0aXZlIEJvcmRlcnMiLAorICAgICAgICAiSW50ZXJuYXRpb25hbCBTeW1ib2xzIiwKKyAgICAgICAgIk1hdGggU3ltYm9scyIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTcgKi8KKyAgICAgICJDaGFyYWN0ZXIgQWx0ZXJuYXRpdmVzIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJObyBBbHRlcm5hdGVzIiwKKyAgICAgICAgLyogVE9ETyAqLworICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE4ICovCisgICAgICAiRGVzaWduIENvbXBsZXhpdHkiLAorICAgICAgMSwKKyAgICAgIHsKKyAgICAgICAgIkRlc2lnbiBMZXZlbCAxIiwKKyAgICAgICAgIkRlc2lnbiBMZXZlbCAyIiwKKyAgICAgICAgIkRlc2lnbiBMZXZlbCAzIiwKKyAgICAgICAgIkRlc2lnbiBMZXZlbCA0IiwKKyAgICAgICAgIkRlc2lnbiBMZXZlbCA1IiwKKyAgICAgICAgLyogVE9ETyAqLworICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE5ICovCisgICAgICAiU3R5bGUgT3B0aW9ucyIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiTm8gU3R5bGUgT3B0aW9ucyIsCisgICAgICAgICJEaXNwbGF5IFRleHQiLAorICAgICAgICAiRW5ncmF2ZWQgVGV4dCIsCisgICAgICAgICJJbGx1bWluYXRlZCBDYXBzIiwKKyAgICAgICAgIlRpbGxpbmcgQ2FwcyIsCisgICAgICAgICJUYWxsIENhcHMiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIwICovCisgICAgICAiQ2hhcmFjdGVyIFNoYXBlIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzIiwKKyAgICAgICAgIlNpbXBsaWZpZWQgQ2hhcmFjdGVycyIsCisgICAgICAgICJKSVMgMTk3OCBDaGFyYWN0ZXJzIiwKKyAgICAgICAgIkpJUyAxOTgzIENoYXJhY3RlcnMiLAorICAgICAgICAiSklTIDE5OTAgQ2hhcmFjdGVycyIsCisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzLCBBbHRlcm5hdGl2ZSBTZXQgMSIsCisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzLCBBbHRlcm5hdGl2ZSBTZXQgMiIsCisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzLCBBbHRlcm5hdGl2ZSBTZXQgMyIsCisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzLCBBbHRlcm5hdGl2ZSBTZXQgNCIsCisgICAgICAgICJUcmFkaXRpb25hbCBDaGFyYWN0ZXJzLCBBbHRlcm5hdGl2ZSBTZXQgNSIsCisgICAgICAgICJFeHBlcnQgQ2hhcmFjdGVycyIsCisgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCA9PiAxMiAqLworICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSAqLworICAgICAgIk51bWJlciBDYXNlIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJMb3dlciBDYXNlIE51bWJlcnMiLAorICAgICAgICAiVXBwZXIgQ2FzZSBOdW1iZXJzIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiAqLworICAgICAgIlRleHQgU3BhY2luZyIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiUHJvcG9ydGlvbmFsIiwKKyAgICAgICAgIk1vbm9zcGFjZWQiLAorICAgICAgICAiSGFsZi13aWR0aCIsCisgICAgICAgICJOb3JtYWwiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgLyogSGVyZSBhZnRlciBOZXdlciAqLyAgeyAvKiAyMyAqLworICAgICAgIlRyYW5zbGl0ZXJhdGlvbiIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiTm8gVHJhbnNsaXRlcmF0aW9uIiwKKyAgICAgICAgIkhhbmphIFRvIEhhbmd1bCIsCisgICAgICAgICJIaXJhZ2FuYSB0byBLYXRha2FuYSIsCisgICAgICAgICJLYXRha2FuYSB0byBIaXJhZ2FuYSIsCisgICAgICAgICJLYW5hIHRvIFJvbWFuaXphdGlvbiIsCisgICAgICAgICJSb21hbml6YXRpb24gdG8gSGlyYWdhbmEiLAorICAgICAgICAiUm9tYW5pemF0aW9uIHRvIEthdGFrYW5hIiwKKyAgICAgICAgIkhhbmphIHRvIEhhbmd1bCwgQWx0ZXJuYXRpdmUgU2V0IDEiLAorICAgICAgICAiSGFuamEgdG8gSGFuZ3VsLCBBbHRlcm5hdGl2ZSBTZXQgMiIsCisgICAgICAgICJIYW5qYSB0byBIYW5ndWwsIEFsdGVybmF0aXZlIFNldCAzIiwKKyAgICAgICAgTlVMTAorICAgICAgfQorICAgIH0sIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCAqLworICAgICAgIkFubm90YXRpb24iLAorICAgICAgMSwKKyAgICAgIHsKKyAgICAgICAgIk5vIEFubm90YXRpb24iLAorICAgICAgICAiQm94IEFubm90YXRpb24iLAorICAgICAgICAiUm91bmRlZCBCb3ggQW5ub3RhdGlvbiIsCisgICAgICAgICJDaXJjbGUgQW5ub3RhdGlvbiIsCisgICAgICAgICJJbnZlcnRlZCBDaXJjbGUgQW5ub3RhdGlvbiIsCisgICAgICAgICJQYXJlbnRoZXNpcyBBbm5vdGF0aW9uIiwKKyAgICAgICAgIlBlcmlvZCBBbm5vdGF0aW9uIiwKKyAgICAgICAgIlJvbWFuIE51bWVyYWwgQW5ub3RhdGlvbiIsCisgICAgICAgICJEaWFtb25kIEFubm90YXRpb24iLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1ICovCisgICAgICAiS2FuYSBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJGdWxsIFdpZHRoIiwKKyAgICAgICAgIlByb3BvcnRpb25hbCIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjYgKi8KKyAgICAgICJJZGVvZ3JhcGhpYyBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJGdWxsIFdpZHRoIiwKKyAgICAgICAgIlByb3BvcnRpb25hbCIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsICAgICAgICAgLyogMjctMzAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogMzEtMzUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogMzYtNDAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNDAtNDUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNDYtNTAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNTEtNTUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNTYtNjAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNjEtNjUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNjYtNzAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNzEtNzUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogNzYtODAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogODEtODUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogODYtOTAgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgLyogOTEtOTUgKi8KKyAgICBFTVBUWUZFQVQsIEVNUFRZRkVBVCwgRU1QVFlGRUFULCAgICAgICAgICAgICAgICAgICAgICAgLyogOTYtOTggKi8KKyAgICBFTVBUWUZFQVQsIC8qIDk5ICovIHsgICAgICAgICAgICAgICAgICAgLyogMTAwID0+IDIyICovCisgICAgICAiVGV4dCBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJQcm9wb3J0aW9uYWwiLAorICAgICAgICAiTW9ub3NwYWNlZCIsCisgICAgICAgICJIYWxmLXdpZHRoIiwKKyAgICAgICAgIk5vcm1hbCIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAxID0+IDI1ICovCisgICAgICAiS2FuYSBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJGdWxsIFdpZHRoIiwKKyAgICAgICAgIlByb3BvcnRpb25hbCIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAyID0+IDI2ICovCisgICAgICAiSWRlb2dyYXBoaWMgU3BhY2luZyIsCisgICAgICAxLAorICAgICAgeworICAgICAgICAiRnVsbCBXaWR0aCIsCisgICAgICAgICJQcm9wb3J0aW9uYWwiLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMyAqLworICAgICAgIkNKSyBSb21hbiBTcGFjaW5nIiwKKyAgICAgIDEsCisgICAgICB7CisgICAgICAgICJIYWxmLXdpZHRoIiwKKyAgICAgICAgIlByb3BvcnRpb25hbCIsCisgICAgICAgICJEZWZhdWx0IFJvbWFuIiwKKyAgICAgICAgIkZ1bGwtd2lkdGggUm9tYW4iLAorICAgICAgICBOVUxMCisgICAgICB9CisgICAgfSwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNCA9PiAxICovCisgICAgICAiQWxsIFR5cG9ncmFwaGljIEZlYXR1cmVzIiwKKyAgICAgIDAsCisgICAgICB7CisgICAgICAgICJBbGwgVHlwZSBGZWF0dXJlcyIsCisgICAgICAgIE5VTEwKKyAgICAgIH0KKyAgICB9CisgIH07CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBpbnQKKyAgbWFpbiggdm9pZCApCisgIHsKKyAgICBpbnQgIGk7CisKKworICAgIHByaW50ZiggIiAge1xuIiApOworICAgIHByaW50ZiggIiAgIC8qIEdlbmVyYXRlZCBmcm9tICVzICovXG4iLCBfX0ZJTEVfXyApOworCisgICAgZm9yICggaSA9IDA7CisgICAgICAgICAgaSA8IHNpemVvZiAoIGZlYXRyZWdfdGFibGUgKSAvIHNpemVvZiAoIEdYX0ZlYXR1cmVfUmVnaXN0cnlSZWMgKTsKKyAgICAgICAgICBpKysgKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIqICBmZWF0X25hbWU7CisgICAgICBpbnQgICAgICAgICAgblNldHRpbmdzOworCisKKyAgICAgIGZlYXRfbmFtZSA9IGZlYXRyZWdfdGFibGVbaV0uZmVhdF9uYW1lOworICAgICAgZm9yICggblNldHRpbmdzID0gMDsKKyAgICAgICAgICAgIGZlYXRyZWdfdGFibGVbaV0uc2V0dGluZ19uYW1lW25TZXR0aW5nc107CisgICAgICAgICAgICBuU2V0dGluZ3MrKykKKyAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLworCisgICAgICBwcmludGYoICIgICAgeyUxZCwgJTFkLCAlMWQsICUyZH0sICAgLyogJXMgKi9cbiIsCisgICAgICAgICAgICAgIGZlYXRfbmFtZSA/IDEgOiAwLAorICAgICAgICAgICAgICAoIGZlYXRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAoIGZ0X3N0cm5jbXAoIGZlYXRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUExFX1JFU0VSVkVELCBBUFBMRV9SRVNFUlZFRF9MRU5HVEggKSA9PSAwICkKKyAgICAgICAgICAgICAgKSA/IDEgOiAwLAorICAgICAgICAgICAgICBmZWF0cmVnX3RhYmxlW2ldLmV4Y2x1c2l2ZSA/IDEgOiAwLAorICAgICAgICAgICAgICBuU2V0dGluZ3MsCisgICAgICAgICAgICAgIGZlYXRfbmFtZSA/IGZlYXRfbmFtZSA6ICJfX0VNUFRZX18iICk7CisgICAgfQorCisgICAgcHJpbnRmKCAiICB9O1xuIiApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZqdXN0LmMgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2anVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjQ0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2anVzdC5jCkBAIC0wLDAgKzEsNzE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZqdXN0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQganVzdCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiZ3h2YWxpZC5oIgorI2luY2x1ZGUgImd4dmNvbW1uLmgiCisKKyNpbmNsdWRlIEZUX1NGTlRfTkFNRVNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2anVzdAorCisgIC8qCisgICAqIHJlZmVycmVkIGBqdXN0JyB0YWJsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbjoKKyAgICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmp1c3QuaHRtbAorICAgKiBsYXN0IHVwZGF0ZWQgMjAwMC4KKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiBbSlVTVCBIRUFERVJdOiBHWFZfSlVTVF9IRUFERVJfU0laRQorICAgKiB2ZXJzaW9uICAgICAoZml4ZWQ6ICAzMmJpdCkgPSAweDAwMDEwMDAwCisgICAqIGZvcm1hdCAgICAgICh1aW50MTY6IDE2Yml0KSA9IDAgaXMgb25seSBkZWZpbmVkICgyMDAwKQorICAgKiBob3Jpek9mZnNldCAodWludDE2OiAxNmJpdCkKKyAgICogdmVydE9mZnNldCAgKHVpbnQxNjogMTZiaXQpCisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9qdXN0X0RhdGFSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIHdkY19vZmZzZXRfbWF4OworICAgIEZUX1VTaG9ydCAgd2RjX29mZnNldF9taW47CisgICAgRlRfVVNob3J0ICBwY19vZmZzZXRfbWF4OworICAgIEZUX1VTaG9ydCAgcGNfb2Zmc2V0X21pbjsKKworICB9IEdYVl9qdXN0X0RhdGFSZWMsICpHWFZfanVzdF9EYXRhOworCisKKyNkZWZpbmUgIEdYVl9KVVNUX0RBVEEoIGEgKSAgR1hWX1RBQkxFX0RBVEEoIGp1c3QsIGEgKQorCisKKyAgLyogR1gganVzdCB0YWJsZSBkb2VzIG5vdCBkZWZpbmUgdGhlaXIgc3Vic2V0IG9mIEdJRCAqLworICBzdGF0aWMgdm9pZAorICBneHZfanVzdF9jaGVja19tYXhfZ2lkKCBGVF9VU2hvcnQgICAgICAgICBnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIG1zZ190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgKQorICB7CisgICAgaWYgKCBnaWQgPCBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzICkKKyAgICAgIHJldHVybjsKKworICAgIEdYVl9UUkFDRSgoICJqdXN0IHRhYmxlIGluY2x1ZGVzIHRvbyBsYXJnZSAlcyIKKyAgICAgICAgICAgICAgICAiIEdJRD0lZCA+ICVkIChpbiBtYXhwKVxuIiwKKyAgICAgICAgICAgICAgICBtc2dfdGFnLCBnaWQsIGd4dmFsaWQtPmZhY2UtPm51bV9nbHlwaHMgKSk7CisgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2p1c3Rfd2RwX2VudHJ5X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworICAgIEZUX1VMb25nICAganVzdENsYXNzOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfRml4ZWQgICBiZWZvcmVHcm93TGltaXQ7CisgICAgRlRfRml4ZWQgICBiZWZvcmVTaHJpbmtHcm93TGltaXQ7CisgICAgRlRfRml4ZWQgICBhZnRlckdyb3dMaW1pdDsKKyAgICBGVF9GaXhlZCAgIGFmdGVyU2hyaW5rR3Jvd0xpbWl0OworICAgIEZUX1VTaG9ydCAgZ3Jvd0ZsYWdzOworICAgIEZUX1VTaG9ydCAgc2hyaW5rRmxhZ3M7CisjZW5kaWYKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDQgKyA0ICsgNCArIDIgKyAyICk7CisgICAganVzdENsYXNzICAgICAgICAgICAgID0gRlRfTkVYVF9VTE9ORyggcCApOworI2lmbmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHAgKz0gNCArIDQgKyA0ICsgNCArIDIgKyAyOworI2Vsc2UKKyAgICBiZWZvcmVHcm93TGltaXQgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgYmVmb3JlU2hyaW5rR3Jvd0xpbWl0ID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIGFmdGVyR3Jvd0xpbWl0ICAgICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBhZnRlclNocmlua0dyb3dMaW1pdCAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgZ3Jvd0ZsYWdzICAgICAgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBzaHJpbmtGbGFncyAgICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworI2VuZGlmCisKKyAgICAvKiBBY2NvcmRpbmcgdG8gQXBwbGUgc3BlYywgb25seSA3Yml0cyBpbiBqdXN0Q2xhc3MgaXMgdXNlZCAqLworICAgIGlmICggKCBqdXN0Q2xhc3MgJiAweEZGRkZGRjgwVUwgKSAhPSAwICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAianVzdCB0YWJsZSBpbmNsdWRlcyBub24temVybyB2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICIgaW4gdW51c2VkIGp1c3RDbGFzcyBoaWdoZXIgYml0cyIKKyAgICAgICAgICAgICAgICAgICIgb2YgV2lkdGhEZWx0YVBhaXIiICkpOworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfREFUQSApOworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfanVzdF93ZGNfZW50cnlfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VTG9uZyAgY291bnQsIGk7CisKKworICAgIEdYVl9MSU1JVF9DSEVDSyggNCApOworICAgIGNvdW50ID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggInZhbGlkYXRpbmcgd2RjIHBhaXIgJWQvJWRcbiIsIGkgKyAxLCBjb3VudCApKTsKKyAgICAgIGd4dl9qdXN0X3dkcF9lbnRyeV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfanVzdF93aWR0aERlbHRhQ2x1c3RlcnNfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgICAgICAgICA9IHRhYmxlIDsKKyAgICBGVF9CeXRlcyAgd2RjX2VuZCAgID0gdGFibGUgKyBHWFZfSlVTVF9EQVRBKCB3ZGNfb2Zmc2V0X21heCApOworICAgIEZUX1VJbnQgICBpOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImp1c3QganVzdERlbHRhQ2x1c3RlcnMiICk7CisKKyAgICBpZiAoIGxpbWl0IDw9IHdkY19lbmQgKQorICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7CisKKyAgICBmb3IgKCBpID0gMDsgcCA8PSB3ZGNfZW5kOyBpKysgKQorICAgIHsKKyAgICAgIGd4dl9qdXN0X3dkY19lbnRyeV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2FjdFN1YnJlY29yZF90eXBlMF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKworICAgIEZUX0ZpeGVkICAgbG93ZXJMaW1pdDsKKyAgICBGVF9GaXhlZCAgIHVwcGVyTGltaXQ7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBGVF9VU2hvcnQgIG9yZGVyOworI2VuZGlmCisgICAgRlRfVVNob3J0ICBkZWNvbXBvc2VkQ291bnQ7CisKKyAgICBGVF9VSW50ICAgIGk7CisKKworICAgIEdYVl9MSU1JVF9DSEVDSyggNCArIDQgKyAyICsgMiApOworICAgIGxvd2VyTGltaXQgICAgICA9IEZUX05FWFRfTE9ORyggcCApOworICAgIHVwcGVyTGltaXQgICAgICA9IEZUX05FWFRfTE9ORyggcCApOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgb3JkZXIgICAgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyNlbHNlCisgICAgcCArPSAyOworI2VuZGlmCisgICAgZGVjb21wb3NlZENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGlmICggbG93ZXJMaW1pdCA+PSB1cHBlckxpbWl0ICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAianVzdCB0YWJsZSBpbmNsdWRlcyBpbnZhbGlkIHJhbmdlIHNwZWM6IgorICAgICAgICAgICAgICAgICAgIiBsb3dlckxpbWl0KCVkKSA+IHVwcGVyTGltaXQoJWQpXG4iICAgICApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0RBVEEgKTsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGRlY29tcG9zZWRDb3VudDsgaSsrICkKKyAgICB7CisgICAgICBGVF9VU2hvcnQgZ2x5cGhzOworCisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgZ2x5cGhzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGd4dl9qdXN0X2NoZWNrX21heF9naWQoIGdseXBocywgInR5cGUwOmdseXBocyIsIGd4dmFsaWQgKTsKKyAgICB9CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2p1c3RfYWN0U3VicmVjb3JkX3R5cGUxX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworICAgIEZUX1VTaG9ydCAgYWRkR2x5cGg7CisKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIGFkZEdseXBoID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGd4dl9qdXN0X2NoZWNrX21heF9naWQoIGFkZEdseXBoLCAidHlwZTE6YWRkR2x5cGgiLCBneHZhbGlkICk7CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2p1c3RfYWN0U3VicmVjb3JkX3R5cGUyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfRml4ZWQgICAgICBzdWJzdFRocmVzaGhvbGQ7IC8qIEFwcGxlIG1pc3NwZWxsZWQgIlRocmVzaGhvbGQiICovCisjZW5kaWYKKyAgICBGVF9VU2hvcnQgIGFkZEdseXBoOworICAgIEZUX1VTaG9ydCAgc3Vic3RHbHlwaDsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgMiArIDIgKTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHN1YnN0VGhyZXNoaG9sZCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyNlbHNlCisgICAgcCArPSA0OworI2VuZGlmCisgICAgYWRkR2x5cGggICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBzdWJzdEdseXBoICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgaWYgKCBhZGRHbHlwaCAhPSAweEZGRkYgKQorICAgICAgZ3h2X2p1c3RfY2hlY2tfbWF4X2dpZCggYWRkR2x5cGgsICJ0eXBlMjphZGRHbHlwaCIsIGd4dmFsaWQgKTsKKworICAgIGd4dl9qdXN0X2NoZWNrX21heF9naWQoIHN1YnN0R2x5cGgsICJ0eXBlMjpzdWJzdEdseXBoIiwgZ3h2YWxpZCApOworCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2FjdFN1YnJlY29yZF90eXBlNF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VMb25nICB2YXJpYW50c0F4aXM7CisgICAgRlRfRml4ZWQgIG1pbmltdW1MaW1pdDsKKyAgICBGVF9GaXhlZCAgbm9TdHJldGNoVmFsdWU7CisgICAgRlRfRml4ZWQgIG1heGltdW1MaW1pdDsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDQgKyA0ICk7CisgICAgdmFyaWFudHNBeGlzICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgbWluaW11bUxpbWl0ICAgPSBGVF9ORVhUX0xPTkcoIHAgKTsKKyAgICBub1N0cmV0Y2hWYWx1ZSA9IEZUX05FWFRfTE9ORyggcCApOworICAgIG1heGltdW1MaW1pdCAgID0gRlRfTkVYVF9MT05HKCBwICk7CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKworICAgIGlmICggdmFyaWFudHNBeGlzICE9IDB4NjQ3NTYzNzRMICkgLyogJ2R1Y3QnICovCisgICAgICBHWFZfVFJBQ0UoKCAidmFyaWFudHNBeGlzIDB4JTA4eCBpcyBub24gZGVmYXVsdCB2YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgdmFyaWFudHNBeGlzICkpOworCisgICAgaWYgKCBtaW5pbXVtTGltaXQgPiBub1N0cmV0Y2hWYWx1ZSApCisgICAgICBHWFZfVFJBQ0UoKCAidHlwZTQ6bWluaW11bUxpbWl0IDB4JTA4eCA+IG5vU3RyZXRjaFZhbHVlIDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgIG1pbmltdW1MaW1pdCwgbm9TdHJldGNoVmFsdWUgKSk7CisgICAgZWxzZSBpZiAoIG5vU3RyZXRjaFZhbHVlID4gbWF4aW11bUxpbWl0ICkKKyAgICAgIEdYVl9UUkFDRSgoICJ0eXBlNDpub1N0cmV0Y2hWYWx1ZSAweCUwOHggPiBtYXhpbXVtTGltaXQgMHglMDh4XG4iLAorICAgICAgICAgICAgICAgICAgbm9TdHJldGNoVmFsdWUsIG1heGltdW1MaW1pdCApKTsKKyAgICBlbHNlIGlmICggIUlTX1BBUkFOT0lEX1ZBTElEQVRJT04gKQorICAgICAgcmV0dXJuOworCisgICAgRlRfSU5WQUxJRF9EQVRBOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisgICAgRlRfVVNob3J0ICBmbGFnczsKKyAgICBGVF9VU2hvcnQgIGdseXBoOworCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICk7CisgICAgZmxhZ3MgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGdseXBoID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGlmICggZmxhZ3MgKQorICAgICAgR1hWX1RSQUNFKCggInR5cGU1OiBub256ZXJvIHZhbHVlIDB4JTA0eCBpbiB1bnVzZWQgZmxhZ3NcbiIsCisgICAgICAgICAgICAgICAgICAgZmxhZ3MgKSk7CisgICAgZ3h2X2p1c3RfY2hlY2tfbWF4X2dpZCggZ2x5cGgsICJ0eXBlNTpnbHlwaCIsIGd4dmFsaWQgKTsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworICB9CisKKworICAvKiBwYXJzZSBzaW5nbGUgYWN0U3VicmVjb3JkICovCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2FjdFN1YnJlY29yZF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgIGFjdGlvbkNsYXNzOworICAgIEZUX1VTaG9ydCAgYWN0aW9uVHlwZTsKKyAgICBGVF9VTG9uZyAgIGFjdGlvbkxlbmd0aDsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJqdXN0IGFjdFN1YnJlY29yZCIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKyA0ICk7CisgICAgYWN0aW9uQ2xhc3MgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBhY3Rpb25UeXBlICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGFjdGlvbkxlbmd0aCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIC8qIGFjdGlvbkNsYXNzIGlzIHJlbGF0ZWQgd2l0aCBqdXN0Q2xhc3MgdXNpbmcgN2JpdCBvbmx5ICovCisgICAgaWYgKCAoIGFjdGlvbkNsYXNzICYgMHhGRjgwICkgIT0gMCApCisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisKKyAgICBpZiAoIGFjdGlvblR5cGUgPT0gMCApCisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTBfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgZWxzZSBpZiAoIGFjdGlvblR5cGUgPT0gMSApCisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTFfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgZWxzZSBpZiAoIGFjdGlvblR5cGUgPT0gMiApCisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTJfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgZWxzZSBpZiAoIGFjdGlvblR5cGUgPT0gMyApCisgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmV0Y2ggZ2x5cGggYWN0aW9uOiBubyBhY3Rpb25EYXRhICovCisgICAgZWxzZSBpZiAoIGFjdGlvblR5cGUgPT0gNCApCisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTRfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgZWxzZSBpZiAoIGFjdGlvblR5cGUgPT0gNSApCisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdHlwZTVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgZWxzZQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gYWN0aW9uTGVuZ3RoOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X3BjQWN0aW9uUmVjb3JkX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VMb25nICBhY3Rpb25Db3VudDsKKyAgICBGVF9VTG9uZyAgaTsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgYWN0aW9uQ291bnQgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgR1hWX1RSQUNFKCggImFjdGlvbkNvdW50ID0gJWRcbiIsIGFjdGlvbkNvdW50ICkpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBhY3Rpb25Db3VudDsgaSsrICkKKyAgICB7CisgICAgICBneHZfanVzdF9hY3RTdWJyZWNvcmRfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKyAgICB9CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfanVzdF9wY1RhYmxlX0xvb2t1cFZhbHVlX2VudHJ5X3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0xvb2t1cFZhbHVlQ1B0ciAgdmFsdWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGdseXBoICk7CisKKyAgICBpZiAoIHZhbHVlX3AtPnUgPiBHWFZfSlVTVF9EQVRBKCBwY19vZmZzZXRfbWF4ICkgKQorICAgICAgR1hWX0pVU1RfREFUQSggcGNfb2Zmc2V0X21heCApID0gdmFsdWVfcC0+dTsKKyAgICBpZiAoIHZhbHVlX3AtPnUgPCBHWFZfSlVTVF9EQVRBKCBwY19vZmZzZXRfbWF4ICkgKQorICAgICAgR1hWX0pVU1RfREFUQSggcGNfb2Zmc2V0X21pbiApID0gdmFsdWVfcC0+dTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2p1c3RfcGNMb29rdXBUYWJsZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAianVzdCBwY0xvb2t1cFRhYmxlIiApOworICAgIEdYVl9KVVNUX0RBVEEoIHBjX29mZnNldF9tYXggKSA9IDB4MDAwMDsKKyAgICBHWFZfSlVTVF9EQVRBKCBwY19vZmZzZXRfbWluICkgPSAweEZGRkZVOworCisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX3NpZ24gPSBHWFZfTE9PS1VQVkFMVUVfVU5TSUdORUQ7CisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX2Z1bmMgPSBneHZfanVzdF9wY1RhYmxlX0xvb2t1cFZhbHVlX2VudHJ5X3ZhbGlkYXRlOworCisgICAgZ3h2X0xvb2t1cFRhYmxlX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgLyogc3VidGFibGVfbGVuZ3RoIGlzIHNldCBieSBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoKSAqLworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X3Bvc3Rjb21wVGFibGVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImp1c3QgcG9zdGNvbXBUYWJsZSIgKTsKKworICAgIGd4dl9qdXN0X3BjTG9va3VwVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgcCArPSBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGg7CisKKyAgICBneHZfanVzdF9wY0FjdGlvblJlY29yZF92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2NsYXNzVGFibGVfZW50cnlfdmFsaWRhdGUoCisgICAgRlRfQnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ciAgZ2x5cGhPZmZzZXRfcCwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgICAgICAgICAgICBneHZhbGlkICkKKyAgeworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgLyogVE9ETzogdmFsaWRhdGUgbWFya0NsYXNzICYgY3VycmVudENsYXNzICovCisgICAgRlRfVVNob3J0ICBzZXRNYXJrOworICAgIEZUX1VTaG9ydCAgZG9udEFkdmFuY2U7CisgICAgRlRfVVNob3J0ICBtYXJrQ2xhc3M7CisgICAgRlRfVVNob3J0ICBjdXJyZW50Q2xhc3M7CisjZW5kaWYKKworICAgIEZUX1VOVVNFRCggc3RhdGUgKTsKKyAgICBGVF9VTlVTRUQoIGdseXBoT2Zmc2V0X3AgKTsKKyAgICBGVF9VTlVTRUQoIHRhYmxlICk7CisgICAgRlRfVU5VU0VEKCBsaW1pdCApOworICAgIEZUX1VOVVNFRCggZ3h2YWxpZCApOworCisjaWZuZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfVU5VU0VEKCBmbGFncyApOworI2Vsc2UKKyAgICBzZXRNYXJrICAgICAgPSAoRlRfVVNob3J0KSggKCBmbGFncyA+PiAxNSApICYgMSAgICApOworICAgIGRvbnRBZHZhbmNlICA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE0ICkgJiAxICAgICk7CisgICAgbWFya0NsYXNzICAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gNyAgKSAmIDB4N0YgKTsKKyAgICBjdXJyZW50Q2xhc3MgPSAoRlRfVVNob3J0KSggICBmbGFncyAgICAgICAgICYgMHg3RiApOworI2VuZGlmCisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2p1c3RDbGFzc1RhYmxlX3ZhbGlkYXRlICggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgIGxlbmd0aDsKKyAgICBGVF9VU2hvcnQgIGNvdmVyYWdlOworICAgIEZUX1VMb25nICAgc3ViRmVhdHVyZUZsYWdzOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImp1c3QganVzdENsYXNzVGFibGUiICk7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgNCApOworICAgIGxlbmd0aCAgICAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgY292ZXJhZ2UgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBzdWJGZWF0dXJlRmxhZ3MgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiICBqdXN0Q2xhc3NUYWJsZTogY292ZXJhZ2UgPSAweCUwNHggKCVzKSAiLCBjb3ZlcmFnZSApKTsKKyAgICBpZiAoICggY292ZXJhZ2UgJiAweDQwMDAgKSA9PSAwICApCisgICAgICBHWFZfVFJBQ0UoKCAiYXNjZW5kaW5nXG4iICkpOworICAgIGVsc2UKKyAgICAgIEdYVl9UUkFDRSgoICJkZXNjZW5kaW5nXG4iICkpOworCisgICAgaWYgKCBzdWJGZWF0dXJlRmxhZ3MgKQorICAgICAgR1hWX1RSQUNFKCggIiAganVzdENsYXNzVGFibGU6IG5vbnplcm8gdmFsdWUgKDB4JTA4eCkiCisgICAgICAgICAgICAgICAgICAiIGluIHVudXNlZCBzdWJGZWF0dXJlRmxhZ3NcbiIsIHN1YkZlYXR1cmVGbGFncyApKTsKKworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YSAgICAgICAgICAgICAgID0gTlVMTDsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGFfbG9hZF9mdW5jICAgICA9IE5VTEw7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5zdWJ0YWJsZV9zZXR1cF9mdW5jICAgPSBOVUxMOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUuZW50cnlfZ2x5cGhvZmZzZXRfZm10ID0gR1hWX0dMWVBIT0ZGU0VUX05PTkU7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV92YWxpZGF0ZV9mdW5jICAgPQorICAgICAgZ3h2X2p1c3RfY2xhc3NUYWJsZV9lbnRyeV92YWxpZGF0ZTsKKworICAgIGd4dl9TdGF0ZVRhYmxlX3ZhbGlkYXRlKCBwLCB0YWJsZSArIGxlbmd0aCwgZ3h2YWxpZCApOworCisgICAgLyogc3VidGFibGVfbGVuZ3RoIGlzIHNldCBieSBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoKSAqLworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X3dkY1RhYmxlX0xvb2t1cFZhbHVlX3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIHZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICAgICAgICBneHZhbGlkICkKKyAgeworICAgIEZUX1VOVVNFRCggZ2x5cGggKTsKKworICAgIGlmICggdmFsdWVfcC0+dSA+IEdYVl9KVVNUX0RBVEEoIHdkY19vZmZzZXRfbWF4ICkgKQorICAgICAgR1hWX0pVU1RfREFUQSggd2RjX29mZnNldF9tYXggKSA9IHZhbHVlX3AtPnU7CisgICAgaWYgKCB2YWx1ZV9wLT51IDwgR1hWX0pVU1RfREFUQSggd2RjX29mZnNldF9taW4gKSApCisgICAgICBHWFZfSlVTVF9EQVRBKCB3ZGNfb2Zmc2V0X21pbiApID0gdmFsdWVfcC0+dTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2p1c3RfanVzdERhdGFfbG9va3VwdGFibGVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKworICAgIEdYVl9KVVNUX0RBVEEoIHdkY19vZmZzZXRfbWF4ICkgPSAweDAwMDA7CisgICAgR1hWX0pVU1RfREFUQSggd2RjX29mZnNldF9taW4gKSA9IDB4RkZGRlU7CisKKyAgICBneHZhbGlkLT5sb29rdXB2YWxfc2lnbiA9IEdYVl9MT09LVVBWQUxVRV9VTlNJR05FRDsKKyAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyA9IGd4dl9qdXN0X3dkY1RhYmxlX0xvb2t1cFZhbHVlX3ZhbGlkYXRlOworCisgICAgZ3h2X0xvb2t1cFRhYmxlX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgLyogc3VidGFibGVfbGVuZ3RoIGlzIHNldCBieSBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoKSAqLworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qCisgICAqIGd4dl9qdXN0X2p1c3REYXRhX3ZhbGlkYXRlKCkgcGFyc2VzIGFuZCB2YWxpZGF0ZXMgaG9yaXpEYXRhLCB2ZXJ0RGF0YS4KKyAgICovCisgIHN0YXRpYyB2b2lkCisgIGd4dl9qdXN0X2p1c3REYXRhX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICAvKgorICAgICAqIGZvbGxvd2luZyAzIG9mZnNldHMgYXJlIG1lYXN1cmVkIGZyb20gdGhlIHN0YXJ0IG9mIGBqdXN0JworICAgICAqICh3aGljaCB0YWJsZSBwb2ludHMgdG8pLCBub3QganVzdERhdGEKKyAgICAgKi8KKyAgICBGVF9VU2hvcnQgIGp1c3RDbGFzc1RhYmxlT2Zmc2V0OworICAgIEZUX1VTaG9ydCAgd2RjVGFibGVPZmZzZXQ7CisgICAgRlRfVVNob3J0ICBwY1RhYmxlT2Zmc2V0OworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlOworCisgICAgR1hWX09EVEVDVCggNCwgb2R0ZWN0ICk7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAianVzdCBqdXN0RGF0YSIgKTsKKworICAgIEdYVl9PRFRFQ1RfSU5JVCggb2R0ZWN0ICk7CisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMiArIDIgKTsKKyAgICBqdXN0Q2xhc3NUYWJsZU9mZnNldCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgd2RjVGFibGVPZmZzZXQgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIHBjVGFibGVPZmZzZXQgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIEdYVl9UUkFDRSgoICIgKGp1c3RDbGFzc1RhYmxlT2Zmc2V0ID0gMHglMDR4KVxuIiwganVzdENsYXNzVGFibGVPZmZzZXQgKSk7CisgICAgR1hWX1RSQUNFKCggIiAod2RjVGFibGVPZmZzZXQgPSAweCUwNHgpXG4iLCB3ZGNUYWJsZU9mZnNldCApKTsKKyAgICBHWFZfVFJBQ0UoKCAiIChwY1RhYmxlT2Zmc2V0ID0gMHglMDR4KVxuIiwgcGNUYWJsZU9mZnNldCApKTsKKworICAgIGd4dl9qdXN0X2p1c3REYXRhX2xvb2t1cHRhYmxlX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworICAgIGd4dl9vZHRlY3RfYWRkX3JhbmdlKCBwLCBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJqdXN0X0xvb2t1cFRhYmxlIiwgb2R0ZWN0ICk7CisKKyAgICBpZiAoIHdkY1RhYmxlT2Zmc2V0ICkKKyAgICB7CisgICAgICBneHZfanVzdF93aWR0aERlbHRhQ2x1c3RlcnNfdmFsaWRhdGUoCisgICAgICAgIGd4dmFsaWQtPnJvb3QtPmJhc2UgKyB3ZGNUYWJsZU9mZnNldCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIGd4dl9vZHRlY3RfYWRkX3JhbmdlKCBneHZhbGlkLT5yb290LT5iYXNlICsgd2RjVGFibGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoLCAianVzdF93ZGNUYWJsZSIsIG9kdGVjdCApOworICAgIH0KKworICAgIGlmICggcGNUYWJsZU9mZnNldCApCisgICAgeworICAgICAgZ3h2X2p1c3RfcG9zdGNvbXBUYWJsZV92YWxpZGF0ZSggZ3h2YWxpZC0+cm9vdC0+YmFzZSArIHBjVGFibGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwgZ3h2YWxpZCApOworICAgICAgZ3h2X29kdGVjdF9hZGRfcmFuZ2UoIGd4dmFsaWQtPnJvb3QtPmJhc2UgKyBwY1RhYmxlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCwgImp1c3RfcGNUYWJsZSIsIG9kdGVjdCApOworICAgIH0KKworICAgIGlmICgganVzdENsYXNzVGFibGVPZmZzZXQgKQorICAgIHsKKyAgICAgIGd4dl9qdXN0X2p1c3RDbGFzc1RhYmxlX3ZhbGlkYXRlKAorICAgICAgICBneHZhbGlkLT5yb290LT5iYXNlICsganVzdENsYXNzVGFibGVPZmZzZXQsIGxpbWl0LCBneHZhbGlkICk7CisgICAgICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggZ3h2YWxpZC0+cm9vdC0+YmFzZSArIGp1c3RDbGFzc1RhYmxlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCwgImp1c3RfanVzdENsYXNzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kdGVjdCApOworICAgIH0KKworICAgIGd4dl9vZHRlY3RfdmFsaWRhdGUoIG9kdGVjdCwgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9qdXN0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICBwICAgICA9IHRhYmxlOworICAgIEZUX0J5dGVzICAgICAgICAgICBsaW1pdCA9IDA7CisKKyAgICBHWFZfVmFsaWRhdG9yUmVjICAgZ3h2YWxpZHJlYzsKKyAgICBHWFZfVmFsaWRhdG9yICAgICAgZ3h2YWxpZCA9ICZneHZhbGlkcmVjOworICAgIEdYVl9qdXN0X0RhdGFSZWMgICBqdXN0cmVjOworICAgIEdYVl9qdXN0X0RhdGEgICAgICBqdXN0ID0gJmp1c3RyZWM7CisKKyAgICBGVF9VTG9uZyAgICAgICAgICAgdmVyc2lvbjsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgZm9ybWF0OworICAgIEZUX1VTaG9ydCAgICAgICAgICBob3Jpek9mZnNldDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgdmVydE9mZnNldDsKKworICAgIEdYVl9PRFRFQ1QoIDMsIG9kdGVjdCApOworCisKKyAgICBHWFZfT0RURUNUX0lOSVQoIG9kdGVjdCApOworCisgICAgZ3h2YWxpZC0+cm9vdCAgICAgICA9IGZ0dmFsaWQ7CisgICAgZ3h2YWxpZC0+dGFibGVfZGF0YSA9IGp1c3Q7CisgICAgZ3h2YWxpZC0+ZmFjZSAgICAgICA9IGZhY2U7CisKKyAgICBGVF9UUkFDRTMoKCAidmFsaWRhdGluZyBganVzdCcgdGFibGVcbiIgKSk7CisgICAgR1hWX0lOSVQ7CisKKyAgICBsaW1pdCAgICAgID0gZ3h2YWxpZC0+cm9vdC0+bGltaXQ7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDQgKyAyICsgMiArIDIgKTsKKyAgICB2ZXJzaW9uICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBmb3JtYXQgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgaG9yaXpPZmZzZXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIHZlcnRPZmZzZXQgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggdGFibGUsIChGVF9VTG9uZykoIHAgLSB0YWJsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAianVzdCBoZWFkZXIiLCBvZHRlY3QgKTsKKworCisgICAgLyogVmVyc2lvbiAxLjAgKGFsd2F5czoyMDAwKSAqLworICAgIEdYVl9UUkFDRSgoICIgKHZlcnNpb24gPSAweCUwOHgpXG4iLCB2ZXJzaW9uICkpOworICAgIGlmICggdmVyc2lvbiAhPSAweDAwMDEwMDAwVUwgKQorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICAvKiBmb3JtYXQgMCAoYWx3YXlzOjIwMDApICovCisgICAgR1hWX1RSQUNFKCggIiAoZm9ybWF0ID0gMHglMDR4KVxuIiwgZm9ybWF0ICkpOworICAgIGlmICggZm9ybWF0ICE9IDB4MDAwMCApCisgICAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgR1hWX1RSQUNFKCggIiAoaG9yaXpPZmZzZXQgPSAlZClcbiIsIGhvcml6T2Zmc2V0ICApKTsKKyAgICBHWFZfVFJBQ0UoKCAiICh2ZXJ0T2Zmc2V0ID0gJWQpXG4iLCB2ZXJ0T2Zmc2V0ICApKTsKKworCisgICAgLyogdmFsaWRhdGUganVzdERhdGEgKi8KKyAgICBpZiAoIDAgPCBob3Jpek9mZnNldCApCisgICAgeworICAgICAgZ3h2X2p1c3RfanVzdERhdGFfdmFsaWRhdGUoIHRhYmxlICsgaG9yaXpPZmZzZXQsIGxpbWl0LCBneHZhbGlkICk7CisgICAgICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggdGFibGUgKyBob3Jpek9mZnNldCwgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3Jpekp1c3REYXRhIiwgb2R0ZWN0ICk7CisgICAgfQorCisgICAgaWYgKCAwIDwgdmVydE9mZnNldCApCisgICAgeworICAgICAgZ3h2X2p1c3RfanVzdERhdGFfdmFsaWRhdGUoIHRhYmxlICsgdmVydE9mZnNldCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIGd4dl9vZHRlY3RfYWRkX3JhbmdlKCB0YWJsZSArIHZlcnRPZmZzZXQsIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVydEp1c3REYXRhIiwgb2R0ZWN0ICk7CisgICAgfQorCisgICAgZ3h2X29kdGVjdF92YWxpZGF0ZSggb2R0ZWN0LCBneHZhbGlkICk7CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2a2Vybi5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmtlcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjU3YzAzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmtlcm4uYwpAQCAtMCwwICsxLDkyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2a2Vybi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIGtlcm4gdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmFsaWQuaCIKKyNpbmNsdWRlICJneHZjb21tbi5oIgorCisjaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2a2VybgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERhdGEgYW5kIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBlbnVtICBHWFZfa2Vybl9WZXJzaW9uXworICB7CisgICAgS0VSTl9WRVJTSU9OX0NMQVNTSUMgPSAweDAwMDAsCisgICAgS0VSTl9WRVJTSU9OX05FVyAgICAgPSAweDAwMDEKKworICB9IEdYVl9rZXJuX1ZlcnNpb247CisKKworICB0eXBlZGVmIGVudW0gR1hWX2tlcm5fRGlhbGVjdF8KKyAgeworICAgIEtFUk5fRElBTEVDVF9VTktOT1dOID0gMCwKKyAgICBLRVJOX0RJQUxFQ1RfTVMgICAgICA9IEZUX1ZBTElEQVRFX01TLAorICAgIEtFUk5fRElBTEVDVF9BUFBMRSAgID0gRlRfVkFMSURBVEVfQVBQTEUsCisgICAgS0VSTl9ESUFMRUNUX0FOWSAgICAgPSBGVF9WQUxJREFURV9DS0VSTgorCisgIH0gR1hWX2tlcm5fRGlhbGVjdDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfa2Vybl9EYXRhUmVjXworICB7CisgICAgR1hWX2tlcm5fVmVyc2lvbiAgdmVyc2lvbjsKKyAgICB2b2lkICAgICAgICAgICAgICpzdWJ0YWJsZV9kYXRhOworICAgIEdYVl9rZXJuX0RpYWxlY3QgIGRpYWxlY3RfcmVxdWVzdDsKKworICB9IEdYVl9rZXJuX0RhdGFSZWMsICpHWFZfa2Vybl9EYXRhOworCisKKyNkZWZpbmUgR1hWX0tFUk5fREFUQSggZmllbGQgKSAgR1hWX1RBQkxFX0RBVEEoIGtlcm4sIGZpZWxkICkKKworI2RlZmluZSBLRVJOX0lTX0NMQVNTSUMoIGd4dmFsaWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBLRVJOX1ZFUlNJT05fQ0xBU1NJQyA9PSBHWFZfS0VSTl9EQVRBKCB2ZXJzaW9uICkgKQorI2RlZmluZSBLRVJOX0lTX05FVyggZ3h2YWxpZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBLRVJOX1ZFUlNJT05fTkVXICAgICA9PSBHWFZfS0VSTl9EQVRBKCB2ZXJzaW9uICkgKQorCisjZGVmaW5lIEtFUk5fRElBTEVDVCggZ3h2YWxpZCApICAgICAgICAgICAgICBcCisgICAgICAgICAgR1hWX0tFUk5fREFUQSggZGlhbGVjdF9yZXF1ZXN0ICkKKyNkZWZpbmUgS0VSTl9BTExPV1NfTVMoIGd4dmFsaWQgKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggS0VSTl9ESUFMRUNUKCBneHZhbGlkICkgJiBLRVJOX0RJQUxFQ1RfTVMgKQorI2RlZmluZSBLRVJOX0FMTE9XU19BUFBMRSggZ3h2YWxpZCApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBLRVJOX0RJQUxFQ1QoIGd4dmFsaWQgKSAmIEtFUk5fRElBTEVDVF9BUFBMRSApCisKKyNkZWZpbmUgR1hWX0tFUk5fSEVBREVSX1NJWkUgICAgICAgICAgICggS0VSTl9JU19ORVcoIGd4dmFsaWQgKSA/IDggOiA0ICkKKyNkZWZpbmUgR1hWX0tFUk5fU1VCVEFCTEVfSEVBREVSX1NJWkUgICggS0VSTl9JU19ORVcoIGd4dmFsaWQgKSA/IDggOiA2ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBTVUJUQUJMRSBWQUxJREFUT1JTICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gZm9ybWF0IDAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2tlcm5fc3VidGFibGVfZm10MF9wYWlyc192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBuUGFpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisgICAgRlRfVVNob3J0ICBpOworCisgICAgRlRfVVNob3J0ICBsYXN0X2dpZF9sZWZ0ICA9IDA7CisgICAgRlRfVVNob3J0ICBsYXN0X2dpZF9yaWdodCA9IDA7CisKKyAgICBGVF9VTlVTRUQoIGxpbWl0ICk7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAia2VybiBmb3JtYXQgMCBwYWlycyIgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgblBhaXJzOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1VTaG9ydCAgZ2lkX2xlZnQ7CisgICAgICBGVF9VU2hvcnQgIGdpZF9yaWdodDsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAgRlRfU2hvcnQgICBrZXJuVmFsdWU7CisjZW5kaWYKKworCisgICAgICAvKiBsZWZ0ICovCisgICAgICBnaWRfbGVmdCAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGdpZF9sZWZ0LCBneHZhbGlkICk7CisKKyAgICAgIC8qIHJpZ2h0ICovCisgICAgICBnaWRfcmlnaHQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGdpZF9yaWdodCwgZ3h2YWxpZCApOworCisgICAgICAvKiBQYWlycyBvZiBsZWZ0IGFuZCByaWdodCBHSURzIG11c3QgYmUgdW5pcXVlIGFuZCBzb3J0ZWQuICovCisgICAgICBHWFZfVFJBQ0UoKCAibGVmdCBnaWQgPSAldSwgcmlnaHQgZ2lkID0gJXVcbiIsIGdpZF9sZWZ0LCBnaWRfcmlnaHQgKSk7CisgICAgICBpZiAoIGdpZF9sZWZ0ID09IGxhc3RfZ2lkX2xlZnQgKQorICAgICAgeworICAgICAgICBpZiAoIGxhc3RfZ2lkX3JpZ2h0IDwgZ2lkX3JpZ2h0ICkKKyAgICAgICAgICBsYXN0X2dpZF9yaWdodCA9IGdpZF9yaWdodDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBsYXN0X2dpZF9sZWZ0IDwgZ2lkX2xlZnQgKQorICAgICAgeworICAgICAgICBsYXN0X2dpZF9sZWZ0ICA9IGdpZF9sZWZ0OworICAgICAgICBsYXN0X2dpZF9yaWdodCA9IGdpZF9yaWdodDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAvKiBza2lwIHRoZSBrZXJuIHZhbHVlICovCisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICAgIGtlcm5WYWx1ZSA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyNlbHNlCisgICAgICBwICs9IDI7CisjZW5kaWYKKyAgICB9CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisgIHN0YXRpYyB2b2lkCisgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDBfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZSArIEdYVl9LRVJOX1NVQlRBQkxFX0hFQURFUl9TSVpFOworCisgICAgRlRfVVNob3J0ICBuUGFpcnM7CisgICAgRlRfVVNob3J0ICB1bml0U2l6ZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJrZXJuIHN1YnRhYmxlIGZvcm1hdCAwIiApOworCisgICAgdW5pdFNpemUgPSAyICsgMiArIDI7CisgICAgblBhaXJzICAgPSAwOworCisgICAgLyogblBhaXJzLCBzZWFyY2hSYW5nZSwgZW50cnlTZWxlY3RvciwgcmFuZ2VTaGlmdCAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKyAyICsgMiApOworICAgIGd4dl9CaW5TcmNoSGVhZGVyX3ZhbGlkYXRlKCBwLCBsaW1pdCwgJnVuaXRTaXplLCAmblBhaXJzLCBneHZhbGlkICk7CisgICAgcCArPSAyICsgMiArIDIgKyAyOworCisgICAgZ3h2X2tlcm5fc3VidGFibGVfZm10MF9wYWlyc192YWxpZGF0ZSggcCwgbGltaXQsIG5QYWlycywgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGZvcm1hdCAxID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9rZXJuX2ZtdDFfU3RhdGVPcHRSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIHZhbHVlVGFibGU7CisgICAgRlRfVVNob3J0ICB2YWx1ZVRhYmxlX2xlbmd0aDsKKworICB9IEdYVl9rZXJuX2ZtdDFfU3RhdGVPcHRSZWMsICpHWFZfa2Vybl9mbXQxX1N0YXRlT3B0UmVjRGF0YTsKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfdmFsdWVUYWJsZV9sb2FkKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgcCA9IHRhYmxlOworICAgIEdYVl9rZXJuX2ZtdDFfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfa2Vybl9mbXQxX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGE7CisKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIG9wdGRhdGEtPnZhbHVlVGFibGUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICB9CisKKworICAvKgorICAgKiBwYXNzZWQgdGFibGVzX3NpemUgY292ZXJzIHdob2xlIFN0YXRlVGFibGUsIGluY2x1ZGluZyBrZXJuIGZtdDEgaGVhZGVyCisgICAqLworICBzdGF0aWMgdm9pZAorICBneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX3N1YnRhYmxlX3NldHVwKCBGVF9VU2hvcnQgICAgICB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBjbGFzc1RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBjbGFzc1RhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX1VTaG9ydCAgb1s0XTsKKyAgICBGVF9VU2hvcnQgICpsWzRdOworICAgIEZUX1VTaG9ydCAgYnVmZls1XTsKKworICAgIEdYVl9rZXJuX2ZtdDFfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfa2Vybl9mbXQxX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGE7CisKKworICAgIG9bMF0gPSBjbGFzc1RhYmxlOworICAgIG9bMV0gPSBzdGF0ZUFycmF5OworICAgIG9bMl0gPSBlbnRyeVRhYmxlOworICAgIG9bM10gPSBvcHRkYXRhLT52YWx1ZVRhYmxlOworICAgIGxbMF0gPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIGxbMV0gPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIGxbMl0gPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworICAgIGxbM10gPSAmKG9wdGRhdGEtPnZhbHVlVGFibGVfbGVuZ3RoKTsKKworICAgIGd4dl9zZXRfbGVuZ3RoX2J5X3VzaG9ydF9vZmZzZXQoIG8sIGwsIGJ1ZmYsIDQsIHRhYmxlX3NpemUsIGd4dmFsaWQgKTsKKyAgfQorCisKKyAgLyoKKyAgICogcGFzc2VkIHRhYmxlICYgbGltaXQgYXJlIG9mIHdob2xlIFN0YXRlVGFibGUsIG5vdCBpbmNsdWRpbmcgc3VidGFibGVzCisgICAqLworICBzdGF0aWMgdm9pZAorICBneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX2VudHJ5X3ZhbGlkYXRlKAorICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICBHWFZfU3RhdGVUYWJsZV9HbHlwaE9mZnNldENQdHIgIGdseXBoT2Zmc2V0X3AsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgIEdYVl9WYWxpZGF0b3IgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApCisgIHsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIEZUX1VTaG9ydCAgcHVzaDsKKyAgICBGVF9VU2hvcnQgIGRvbnRBZHZhbmNlOworI2VuZGlmCisgICAgRlRfVVNob3J0ICB2YWx1ZU9mZnNldDsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIEZUX1VTaG9ydCAga2VybkFjdGlvbjsKKyAgICBGVF9VU2hvcnQgIGtlcm5WYWx1ZTsKKyNlbmRpZgorCisgICAgRlRfVU5VU0VEKCBzdGF0ZSApOworICAgIEZUX1VOVVNFRCggZ2x5cGhPZmZzZXRfcCApOworCisKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHB1c2ggICAgICAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTUgKSAmIDEgICAgICApOworICAgIGRvbnRBZHZhbmNlID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTQgKSAmIDEgICAgICApOworI2VuZGlmCisgICAgdmFsdWVPZmZzZXQgPSAoRlRfVVNob3J0KSggICBmbGFncyAgICAgICAgICYgMHgzRkZGICk7CisKKyAgICB7CisgICAgICBHWFZfa2Vybl9mbXQxX1N0YXRlT3B0UmVjRGF0YSAgdnRfcmVjID0KKyAgICAgICAgKEdYVl9rZXJuX2ZtdDFfU3RhdGVPcHRSZWNEYXRhKWd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YTsKKyAgICAgIEZUX0J5dGVzICBwOworCisKKyAgICAgIGlmICggdmFsdWVPZmZzZXQgPCB2dF9yZWMtPnZhbHVlVGFibGUgKQorICAgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKworICAgICAgcCAgICAgPSB0YWJsZSArIHZhbHVlT2Zmc2V0OworICAgICAgbGltaXQgPSB0YWJsZSArIHZ0X3JlYy0+dmFsdWVUYWJsZSArIHZ0X3JlYy0+dmFsdWVUYWJsZV9sZW5ndGg7CisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAga2VybkFjdGlvbiA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBrZXJuVmFsdWUgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyNlbmRpZgorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2tlcm5fc3VidGFibGVfZm10MV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgIHAgPSB0YWJsZTsKKyAgICBHWFZfa2Vybl9mbXQxX1N0YXRlT3B0UmVjICB2dF9yZWM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAia2VybiBzdWJ0YWJsZSBmb3JtYXQgMSIgKTsKKworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YSA9CisgICAgICAmdnRfcmVjOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMgPQorICAgICAgZ3h2X2tlcm5fc3VidGFibGVfZm10MV92YWx1ZVRhYmxlX2xvYWQ7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5zdWJ0YWJsZV9zZXR1cF9mdW5jID0KKyAgICAgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfc3VidGFibGVfc2V0dXA7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgPQorICAgICAgR1hWX0dMWVBIT0ZGU0VUX05PTkU7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV92YWxpZGF0ZV9mdW5jID0KKyAgICAgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDFfZW50cnlfdmFsaWRhdGU7CisKKyAgICBneHZfU3RhdGVUYWJsZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICAvKiA9PT09PT09PT09PT09PT09IERhdGEgZm9yIENsYXNzLUJhc2VkIFN1YnRhYmxlcyAyLCAzID09PT09PT09PT09PT09PT0gKi8KKworICB0eXBlZGVmIGVudW0gIEdYVl9rZXJuX0NsYXNzU3BlY18KKyAgeworICAgIEdYVl9LRVJOX0NMU19MID0gMCwKKyAgICBHWFZfS0VSTl9DTFNfUgorCisgIH0gR1hWX2tlcm5fQ2xhc3NTcGVjOworCisKKyAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gZm9ybWF0IDIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmb3JtYXQgMiBzcGVjaWZpYyBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9rZXJuX3N1YnRhYmxlX2ZtdDJfRGF0YVJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgICAgICAgIHJvd1dpZHRoOworICAgIEZUX1VTaG9ydCAgICAgICAgIGFycmF5OworICAgIEZUX1VTaG9ydCAgICAgICAgIG9mZnNldF9taW5bMl07CisgICAgRlRfVVNob3J0ICAgICAgICAgb2Zmc2V0X21heFsyXTsKKyAgICBjb25zdCBGVF9TdHJpbmcqICBjbGFzc190YWdbMl07CisgICAgR1hWX29kdGVjdF9SYW5nZSAgb2R0ZWN0OworCisgIH0gR1hWX2tlcm5fc3VidGFibGVfZm10Ml9EYXRhUmVjLCAqR1hWX2tlcm5fc3VidGFibGVfZm10Ml9EYXRhOworCisKKyNkZWZpbmUgR1hWX0tFUk5fRk1UMl9EQVRBKCBmaWVsZCApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoIChHWFZfa2Vybl9zdWJ0YWJsZV9mbXQyX0RhdGFSZWMgKikgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKCBHWFZfS0VSTl9EQVRBKCBzdWJ0YWJsZV9kYXRhICkgKSApLT5maWVsZCApCisKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1dGlsaXR5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDJfY2xzdGJsX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9rZXJuX0NsYXNzU3BlYyAgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBjb25zdCBGVF9TdHJpbmcqICB0YWcgICAgPSBHWFZfS0VSTl9GTVQyX0RBVEEoIGNsYXNzX3RhZ1tzcGVjXSApOworICAgIEdYVl9vZHRlY3RfUmFuZ2UgIG9kdGVjdCA9IEdYVl9LRVJOX0ZNVDJfREFUQSggb2R0ZWN0ICk7CisKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgIGZpcnN0R2x5cGg7CisgICAgRlRfVVNob3J0ICBuR2x5cGhzOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImtlcm4gZm9ybWF0IDIgY2xhc3NUYWJsZSIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKTsKKyAgICBmaXJzdEdseXBoID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBuR2x5cGhzICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBHWFZfVFJBQ0UoKCAiICVzIGZpcnN0R2x5cGg9JWQsIG5HbHlwaHM9JWRcbiIsCisgICAgICAgICAgICAgICAgdGFnLCBmaXJzdEdseXBoLCBuR2x5cGhzICkpOworCisgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIGZpcnN0R2x5cGgsIGd4dmFsaWQgKTsKKyAgICBneHZfZ2x5cGhpZF92YWxpZGF0ZSggKEZUX1VTaG9ydCkoIGZpcnN0R2x5cGggKyBuR2x5cGhzIC0gMSApLCBneHZhbGlkICk7CisKKyAgICBneHZfYXJyYXlfZ2V0bGltaXRzX3VzaG9ydCggcCwgcCArICggMiAqIG5HbHlwaHMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiggR1hWX0tFUk5fRk1UMl9EQVRBKCBvZmZzZXRfbWluW3NwZWNdICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiggR1hWX0tFUk5fRk1UMl9EQVRBKCBvZmZzZXRfbWF4W3NwZWNdICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworCisgICAgZ3h2X29kdGVjdF9hZGRfcmFuZ2UoIHRhYmxlLCAyICogbkdseXBocywgdGFnLCBvZHRlY3QgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfa2Vybl9zdWJ0YWJsZV9mbXQyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgR1hWX09EVEVDVCggMywgb2R0ZWN0ICk7CisgICAgR1hWX2tlcm5fc3VidGFibGVfZm10Ml9EYXRhUmVjICBmbXQyX3JlYyA9CisgICAgICB7IDAsIDAsIHsgMCwgMCB9LCB7IDAsIDAgfSwgeyAibGVmdENsYXNzIiwgInJpZ2h0Q2xhc3MiIH0sIE5VTEwgfTsKKworICAgIEZUX0J5dGVzICAgcCA9IHRhYmxlICsgR1hWX0tFUk5fU1VCVEFCTEVfSEVBREVSX1NJWkU7CisgICAgRlRfVVNob3J0ICBsZWZ0T2Zmc2V0VGFibGU7CisgICAgRlRfVVNob3J0ICByaWdodE9mZnNldFRhYmxlOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImtlcm4gc3VidGFibGUgZm9ybWF0IDIiICk7CisKKyAgICBHWFZfT0RURUNUX0lOSVQoIG9kdGVjdCApOworICAgIGZtdDJfcmVjLm9kdGVjdCA9IG9kdGVjdDsKKyAgICBHWFZfS0VSTl9EQVRBKCBzdWJ0YWJsZV9kYXRhICkgPSAmZm10Ml9yZWM7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgMiArIDIgKTsKKyAgICBHWFZfS0VSTl9GTVQyX0RBVEEoIHJvd1dpZHRoICkgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGxlZnRPZmZzZXRUYWJsZSAgICAgICAgICAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgcmlnaHRPZmZzZXRUYWJsZSAgICAgICAgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBHWFZfS0VSTl9GTVQyX0RBVEEoIGFycmF5ICkgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgR1hWX1RSQUNFKCggInJvd1dpZHRoID0gJWRcbiIsIEdYVl9LRVJOX0ZNVDJfREFUQSggcm93V2lkdGggKSApKTsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBsZWZ0T2Zmc2V0VGFibGUgKTsKKyAgICBHWFZfTElNSVRfQ0hFQ0soIHJpZ2h0T2Zmc2V0VGFibGUgKTsKKyAgICBHWFZfTElNSVRfQ0hFQ0soIEdYVl9LRVJOX0ZNVDJfREFUQSggYXJyYXkgKSApOworCisgICAgZ3h2X2tlcm5fc3VidGFibGVfZm10Ml9jbHN0YmxfdmFsaWRhdGUoIHRhYmxlICsgbGVmdE9mZnNldFRhYmxlLCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0tFUk5fQ0xTX0wsIGd4dmFsaWQgKTsKKworICAgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDJfY2xzdGJsX3ZhbGlkYXRlKCB0YWJsZSArIHJpZ2h0T2Zmc2V0VGFibGUsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfS0VSTl9DTFNfUiwgZ3h2YWxpZCApOworCisgICAgaWYgKCBHWFZfS0VSTl9GTVQyX0RBVEEoIG9mZnNldF9taW5bR1hWX0tFUk5fQ0xTX0xdICkgKworICAgICAgICAgICBHWFZfS0VSTl9GTVQyX0RBVEEoIG9mZnNldF9taW5bR1hWX0tFUk5fQ0xTX1JdICkKKyAgICAgICAgIDwgR1hWX0tFUk5fRk1UMl9EQVRBKCBhcnJheSApICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgZ3h2X29kdGVjdF9hZGRfcmFuZ2UoIHRhYmxlICsgR1hWX0tFUk5fRk1UMl9EQVRBKCBhcnJheSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfS0VSTl9GTVQyX0RBVEEoIG9mZnNldF9tYXhbR1hWX0tFUk5fQ0xTX0xdICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEdYVl9LRVJOX0ZNVDJfREFUQSggb2Zmc2V0X21heFtHWFZfS0VSTl9DTFNfUl0gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gR1hWX0tFUk5fRk1UMl9EQVRBKCBhcnJheSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyYXkiLCBvZHRlY3QgKTsKKworICAgIGd4dl9vZHRlY3RfdmFsaWRhdGUoIG9kdGVjdCwgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IGZvcm1hdCAzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDNfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZSArIEdYVl9LRVJOX1NVQlRBQkxFX0hFQURFUl9TSVpFOworICAgIEZUX1VTaG9ydCAgZ2x5cGhDb3VudDsKKyAgICBGVF9CeXRlICAgIGtlcm5WYWx1ZUNvdW50OworICAgIEZUX0J5dGUgICAgbGVmdENsYXNzQ291bnQ7CisgICAgRlRfQnl0ZSAgICByaWdodENsYXNzQ291bnQ7CisgICAgRlRfQnl0ZSAgICBmbGFnczsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJrZXJuIHN1YnRhYmxlIGZvcm1hdCAzIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMSArIDEgKyAxICsgMSApOworICAgIGdseXBoQ291bnQgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAga2VyblZhbHVlQ291bnQgID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgbGVmdENsYXNzQ291bnQgID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgcmlnaHRDbGFzc0NvdW50ID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgZmxhZ3MgICAgICAgICAgID0gRlRfTkVYVF9CWVRFKCBwICk7CisKKyAgICBpZiAoIGd4dmFsaWQtPmZhY2UtPm51bV9nbHlwaHMgIT0gZ2x5cGhDb3VudCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggIm1heEdJRD0lZCwgYnV0IGdseXBoQ291bnQ9JWRcbiIsCisgICAgICAgICAgICAgICAgICBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzLCBnbHlwaENvdW50ICkpOworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKyAgICB9CisKKyAgICBpZiAoIGZsYWdzICE9IDAgKQorICAgICAgR1hWX1RSQUNFKCggImtlcm4gc3VidGFibGUgZm10MyBoYXMgbm9uemVybyB2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICIgKCVkKSBpbiB1bnVzZWQgZmxhZ1xuIiwgZmxhZ3MgKSk7CisgICAgLyoKKyAgICAgKiBqdXN0IHNraXAga2VyblZhbHVlW2tlcm5WYWx1ZUNvdW50XQorICAgICAqLworICAgIEdYVl9MSU1JVF9DSEVDSyggMiAqIGtlcm5WYWx1ZUNvdW50ICk7CisgICAgcCArPSAyICoga2VyblZhbHVlQ291bnQ7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGxlZnRDbGFzc1tnaWRdIDwgbGVmdENsYXNzQ291bnQKKyAgICAgKi8KKyAgICB7CisgICAgICBGVF9CeXRlICBtaW4sIG1heDsKKworCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIGdseXBoQ291bnQgKTsKKyAgICAgIGd4dl9hcnJheV9nZXRsaW1pdHNfYnl0ZSggcCwgcCArIGdseXBoQ291bnQsICZtaW4sICZtYXgsIGd4dmFsaWQgKTsKKyAgICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworCisgICAgICBpZiAoIGxlZnRDbGFzc0NvdW50IDwgbWF4ICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIC8qCisgICAgICogY2hlY2sgcmlnaHRDbGFzc1tnaWRdIDwgcmlnaHRDbGFzc0NvdW50CisgICAgICovCisgICAgeworICAgICAgRlRfQnl0ZSAgbWluLCBtYXg7CisKKworICAgICAgR1hWX0xJTUlUX0NIRUNLKCBnbHlwaENvdW50ICk7CisgICAgICBneHZfYXJyYXlfZ2V0bGltaXRzX2J5dGUoIHAsIHAgKyBnbHlwaENvdW50LCAmbWluLCAmbWF4LCBneHZhbGlkICk7CisgICAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgICAgaWYgKCByaWdodENsYXNzQ291bnQgPCBtYXggKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjaGVjayBrZXJuSW5kZXhbaSwgal0gPCBrZXJuVmFsdWVDb3VudAorICAgICAqLworICAgIHsKKyAgICAgIEZUX1VTaG9ydCAgaSwgajsKKworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlZnRDbGFzc0NvdW50OyBpKysgKQorICAgICAgeworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHJpZ2h0Q2xhc3NDb3VudDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgIEdYVl9MSU1JVF9DSEVDSyggMSApOworICAgICAgICAgIGlmICgga2VyblZhbHVlQ291bnQgPCBGVF9ORVhUX0JZVEUoIHAgKSApCisgICAgICAgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGd4dl9rZXJuX2NvdmVyYWdlX25ld19hcHBsZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgY292ZXJhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgLyogbmV3IEFwcGxlLWRpYWxlY3QgKi8KKyNpZmRlZiBHWFZfTE9BRF9UUkFDRV9WQVJTCisgICAgRlRfQm9vbCAga2VyblZlcnRpY2FsOworICAgIEZUX0Jvb2wgIGtlcm5Dcm9zc1N0cmVhbTsKKyAgICBGVF9Cb29sICBrZXJuVmFyaWF0aW9uOworI2VuZGlmCisKKyAgICBGVF9VTlVTRUQoIGd4dmFsaWQgKTsKKworCisgICAgLyogcmVzZXJ2ZWQgYml0cyA9IDAgKi8KKyAgICBpZiAoIGNvdmVyYWdlICYgMHgxRkZDICkKKyAgICAgIHJldHVybiBGQUxTRTsKKworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBrZXJuVmVydGljYWwgICAgPSBGVF9CT09MKCAoIGNvdmVyYWdlID4+IDE1ICkgJiAxICk7CisgICAga2VybkNyb3NzU3RyZWFtID0gRlRfQk9PTCggKCBjb3ZlcmFnZSA+PiAxNCApICYgMSApOworICAgIGtlcm5WYXJpYXRpb24gICA9IEZUX0JPT0woICggY292ZXJhZ2UgPj4gMTMgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgKmZvcm1hdCA9IChGVF9VU2hvcnQpKCBjb3ZlcmFnZSAmIDB4MDAwMyApOworCisgICAgR1hWX1RSQUNFKCggIm5ldyBBcHBsZS1kaWFsZWN0OiAiCisgICAgICAgICAgICAgICAgImhvcml6b250YWw9JWQsIGNyb3NzLXN0cmVhbT0lZCwgdmFyaWF0aW9uPSVkLCBmb3JtYXQ9JWRcbiIsCisgICAgICAgICAgICAgICAgICFrZXJuVmVydGljYWwsIGtlcm5Dcm9zc1N0cmVhbSwga2VyblZhcmlhdGlvbiwgKmZvcm1hdCApKTsKKworICAgIEdYVl9UUkFDRSgoICJrZXJuaW5nIHZhbHVlcyBpbiBBcHBsZSBmb3JtYXQgc3VidGFibGUgYXJlIGlnbm9yZWRcbiIgKSk7CisKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgZ3h2X2tlcm5fY292ZXJhZ2VfY2xhc3NpY19hcHBsZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgY292ZXJhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICAvKiBjbGFzc2ljIEFwcGxlLWRpYWxlY3QgKi8KKyNpZmRlZiBHWFZfTE9BRF9UUkFDRV9WQVJTCisgICAgRlRfQm9vbCAgaG9yaXpvbnRhbDsKKyAgICBGVF9Cb29sICBjcm9zc19zdHJlYW07CisjZW5kaWYKKworCisgICAgLyogY2hlY2sgZXhwZWN0ZWQgZmxhZ3MsIGJ1dCBkb24ndCBjaGVjayBpZiBNUy1kaWFsZWN0IGlzIGltcG9zc2libGUgKi8KKyAgICBpZiAoICEoIGNvdmVyYWdlICYgMHhGRDAwICkgJiYgS0VSTl9BTExPV1NfTVMoIGd4dmFsaWQgKSApCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvKiByZXNlcnZlZCBiaXRzID0gMCAqLworICAgIGlmICggY292ZXJhZ2UgJiAweDAyRkMgKQorICAgICAgcmV0dXJuIEZBTFNFOworCisjaWZkZWYgR1hWX0xPQURfVFJBQ0VfVkFSUworICAgIGhvcml6b250YWwgICA9IEZUX0JPT0woICggY292ZXJhZ2UgPj4gMTUgKSAmIDEgKTsKKyAgICBjcm9zc19zdHJlYW0gPSBGVF9CT09MKCAoIGNvdmVyYWdlID4+IDEzICkgJiAxICk7CisjZW5kaWYKKworICAgICpmb3JtYXQgPSAoRlRfVVNob3J0KSggY292ZXJhZ2UgJiAweDAwMDMgKTsKKworICAgIEdYVl9UUkFDRSgoICJjbGFzc2ljIEFwcGxlLWRpYWxlY3Q6ICIKKyAgICAgICAgICAgICAgICAiaG9yaXpvbnRhbD0lZCwgY3Jvc3Mtc3RyZWFtPSVkLCBmb3JtYXQ9JWRcbiIsCisgICAgICAgICAgICAgICAgIGhvcml6b250YWwsIGNyb3NzX3N0cmVhbSwgKmZvcm1hdCApKTsKKworICAgIC8qIGZvcm1hdCAxIHJlcXVpcmVzIEdYIFN0YXRlIE1hY2hpbmUsIHRvbyBuZXcgZm9yIGNsYXNzaWMgKi8KKyAgICBpZiAoICpmb3JtYXQgPT0gMSApCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHWFZfVFJBQ0UoKCAia2VybmluZyB2YWx1ZXMgaW4gQXBwbGUgZm9ybWF0IHN1YnRhYmxlIGFyZSBpZ25vcmVkXG4iICkpOworCisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGd4dl9rZXJuX2NvdmVyYWdlX2NsYXNzaWNfbWljcm9zb2Z0X3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICBjb3ZlcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgLyogY2xhc3NpYyBNaWNyb3NvZnQtZGlhbGVjdCAqLworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBGVF9Cb29sICBob3Jpem9udGFsOworICAgIEZUX0Jvb2wgIG1pbmltdW07CisgICAgRlRfQm9vbCAgY3Jvc3Nfc3RyZWFtOworICAgIEZUX0Jvb2wgIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBGVF9VTlVTRUQoIGd4dmFsaWQgKTsKKworCisgICAgLyogcmVzZXJ2ZWQgYml0cyA9IDAgKi8KKyAgICBpZiAoIGNvdmVyYWdlICYgMHhGREYwICkKKyAgICAgIHJldHVybiBGQUxTRTsKKworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBob3Jpem9udGFsICAgPSBGVF9CT09MKCAgIGNvdmVyYWdlICAgICAgICAmIDEgKTsKKyAgICBtaW5pbXVtICAgICAgPSBGVF9CT09MKCAoIGNvdmVyYWdlID4+IDEgKSAmIDEgKTsKKyAgICBjcm9zc19zdHJlYW0gPSBGVF9CT09MKCAoIGNvdmVyYWdlID4+IDIgKSAmIDEgKTsKKyAgICBvdmVycmlkZSAgICAgPSBGVF9CT09MKCAoIGNvdmVyYWdlID4+IDMgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgKmZvcm1hdCA9IChGVF9VU2hvcnQpKCAoIGNvdmVyYWdlID4+IDggKSAmIDB4MDAwMyApOworCisgICAgR1hWX1RSQUNFKCggImNsYXNzaWMgTWljcm9zb2Z0LWRpYWxlY3Q6ICIKKyAgICAgICAgICAgICAgICAiaG9yaXpvbnRhbD0lZCwgbWluaW11bT0lZCwgY3Jvc3Mtc3RyZWFtPSVkLCAiCisgICAgICAgICAgICAgICAgIm92ZXJyaWRlPSVkLCBmb3JtYXQ9JWRcbiIsCisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbCwgbWluaW11bSwgY3Jvc3Nfc3RyZWFtLCBvdmVycmlkZSwgKmZvcm1hdCApKTsKKworICAgIGlmICggKmZvcm1hdCA9PSAyICkKKyAgICAgIEdYVl9UUkFDRSgoCisgICAgICAgICJrZXJuaW5nIHZhbHVlcyBpbiBNaWNyb3NvZnQgZm9ybWF0IDIgc3VidGFibGUgYXJlIGlnbm9yZWRcbiIgKSk7CisKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIEdYVl9rZXJuX0RpYWxlY3QKKyAgZ3h2X2tlcm5fY292ZXJhZ2VfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIGNvdmVyYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfa2Vybl9EaWFsZWN0ICByZXN1bHQgPSBLRVJOX0RJQUxFQ1RfVU5LTk9XTjsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJ2YWxpZGF0aW5nIGNvdmVyYWdlIiApOworCisgICAgR1hWX1RSQUNFKCggImludGVycHJldGUgY292ZXJhZ2UgMHglMDR4IGJ5IEFwcGxlIHN0eWxlXG4iLCBjb3ZlcmFnZSApKTsKKworICAgIGlmICggS0VSTl9JU19ORVcoIGd4dmFsaWQgKSApCisgICAgeworICAgICAgaWYgKCBneHZfa2Vybl9jb3ZlcmFnZV9uZXdfYXBwbGVfdmFsaWRhdGUoIGNvdmVyYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICkgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBLRVJOX0RJQUxFQ1RfQVBQTEU7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIEtFUk5fSVNfQ0xBU1NJQyggZ3h2YWxpZCApICYmIEtFUk5fQUxMT1dTX0FQUExFKCBneHZhbGlkICkgKQorICAgIHsKKyAgICAgIGlmICggZ3h2X2tlcm5fY292ZXJhZ2VfY2xhc3NpY19hcHBsZV92YWxpZGF0ZSggY292ZXJhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gS0VSTl9ESUFMRUNUX0FQUExFOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBLRVJOX0lTX0NMQVNTSUMoIGd4dmFsaWQgKSAmJiBLRVJOX0FMTE9XU19NUyggZ3h2YWxpZCApICkKKyAgICB7CisgICAgICBpZiAoIGd4dl9rZXJuX2NvdmVyYWdlX2NsYXNzaWNfbWljcm9zb2Z0X3ZhbGlkYXRlKCBjb3ZlcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKSApCisgICAgICB7CisgICAgICAgIHJlc3VsdCA9IEtFUk5fRElBTEVDVF9NUzsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICAgIEdYVl9UUkFDRSgoICJjYW5ub3QgaW50ZXJwcmV0ZSBjb3ZlcmFnZSwgYnJva2VuIGtlcm4gc3VidGFibGVcbiIgKSk7CisKKyAgRXhpdDoKKyAgICBHWFZfRVhJVDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfa2Vybl9zdWJ0YWJsZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisjaWZkZWYgR1hWX0xPQURfVFJBQ0VfVkFSUworICAgIEZUX1VTaG9ydCAgdmVyc2lvbiA9IDA7ICAgIC8qIE1TIG9ubHk6IHN1YnRhYmxlIHZlcnNpb24sIHVudXNlZCAqLworI2VuZGlmCisgICAgRlRfVUxvbmcgICBsZW5ndGg7ICAgICAgICAgLyogTVM6IDE2Yml0LCBBcHBsZTogMzJiaXQqLworICAgIEZUX1VTaG9ydCAgY292ZXJhZ2U7CisjaWZkZWYgR1hWX0xPQURfVFJBQ0VfVkFSUworICAgIEZUX1VTaG9ydCAgdHVwbGVJbmRleCA9IDA7IC8qIEFwcGxlIG9ubHkgKi8KKyNlbmRpZgorICAgIEZUX1VTaG9ydCAgdTE2WzJdOworICAgIEZUX1VTaG9ydCAgZm9ybWF0ID0gMjU1OyAgIC8qIHN1YnRhYmxlIGZvcm1hdCAqLworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggImtlcm4gc3VidGFibGUiICk7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgMiApOworICAgIHUxNlswXSAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgLyogQXBwbGU6IGxlbmd0aF9oaSBNUzogdmVyc2lvbiAqLworICAgIHUxNlsxXSAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgLyogQXBwbGU6IGxlbmd0aF9sbyBNUzogbGVuZ3RoICovCisgICAgY292ZXJhZ2UgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgc3dpdGNoICggZ3h2X2tlcm5fY292ZXJhZ2VfdmFsaWRhdGUoIGNvdmVyYWdlLCAmZm9ybWF0LCBneHZhbGlkICkgKQorICAgIHsKKyAgICBjYXNlIEtFUk5fRElBTEVDVF9NUzoKKyNpZmRlZiBHWFZfTE9BRF9UUkFDRV9WQVJTCisgICAgICB2ZXJzaW9uICAgID0gdTE2WzBdOworI2VuZGlmCisgICAgICBsZW5ndGggICAgID0gdTE2WzFdOworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICAgIHR1cGxlSW5kZXggPSAwOworI2VuZGlmCisgICAgICBHWFZfVFJBQ0UoKCAiU3VidGFibGUgdmVyc2lvbiA9ICVkXG4iLCB2ZXJzaW9uICkpOworICAgICAgR1hWX1RSQUNFKCggIlN1YnRhYmxlIGxlbmd0aCA9ICVkXG4iLCBsZW5ndGggKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgS0VSTl9ESUFMRUNUX0FQUExFOgorI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICAgIHZlcnNpb24gICAgPSAwOworI2VuZGlmCisgICAgICBsZW5ndGggICAgID0gKCAoRlRfVUxvbmcpdTE2WzBdIDw8IDE2ICkgKyB1MTZbMV07CisjaWZkZWYgR1hWX0xPQURfVFJBQ0VfVkFSUworICAgICAgdHVwbGVJbmRleCA9IDA7CisjZW5kaWYKKyAgICAgIEdYVl9UUkFDRSgoICJTdWJ0YWJsZSBsZW5ndGggPSAlZFxuIiwgbGVuZ3RoICkpOworCisgICAgICBpZiAoIEtFUk5fSVNfTkVXKCBneHZhbGlkICkgKQorICAgICAgeworICAgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyNpZmRlZiBHWFZfTE9BRF9UUkFDRV9WQVJTCisgICAgICAgIHR1cGxlSW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOworI2Vsc2UKKyAgICAgICAgcCArPSAyOworI2VuZGlmCisgICAgICAgIEdYVl9UUkFDRSgoICJTdWJ0YWJsZSB0dXBsZUluZGV4ID0gJWRcbiIsIHR1cGxlSW5kZXggKSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBsZW5ndGggPSB1MTZbMV07CisgICAgICBHWFZfVFJBQ0UoKCAiY2Fubm90IGRldGVjdCBzdWJ0YWJsZSBkaWFsZWN0LCAiCisgICAgICAgICAgICAgICAgICAianVzdCBza2lwICVkIGJ5dGVcbiIsIGxlbmd0aCApKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBmb3JtYXRzIDEsIDIsIDMgcmVxdWlyZSB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoaXMgc3VidGFibGUgKi8KKyAgICBpZiAoIGZvcm1hdCA9PSAwICkKKyAgICAgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDBfdmFsaWRhdGUoIHRhYmxlLCB0YWJsZSArIGxlbmd0aCwgZ3h2YWxpZCApOworICAgIGVsc2UgaWYgKCBmb3JtYXQgPT0gMSApCisgICAgICBneHZfa2Vybl9zdWJ0YWJsZV9mbXQxX3ZhbGlkYXRlKCB0YWJsZSwgdGFibGUgKyBsZW5ndGgsIGd4dmFsaWQgKTsKKyAgICBlbHNlIGlmICggZm9ybWF0ID09IDIgKQorICAgICAgZ3h2X2tlcm5fc3VidGFibGVfZm10Ml92YWxpZGF0ZSggdGFibGUsIHRhYmxlICsgbGVuZ3RoLCBneHZhbGlkICk7CisgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAzICkKKyAgICAgIGd4dl9rZXJuX3N1YnRhYmxlX2ZtdDNfdmFsaWRhdGUoIHRhYmxlLCB0YWJsZSArIGxlbmd0aCwgZ3h2YWxpZCApOworICAgIGVsc2UKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICBFeGl0OgorICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm4gVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2tlcm5fdmFsaWRhdGVfZ2VuZXJpYyggRlRfQnl0ZXMgICAgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgIGNsYXNzaWNfb25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX2tlcm5fRGlhbGVjdCAgZGlhbGVjdF9yZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgICAgICBmdHZhbGlkICkKKyAgeworICAgIEdYVl9WYWxpZGF0b3JSZWMgICBneHZhbGlkcmVjOworICAgIEdYVl9WYWxpZGF0b3IgICAgICBneHZhbGlkID0gJmd4dmFsaWRyZWM7CisKKyAgICBHWFZfa2Vybl9EYXRhUmVjICAga2VybnJlYzsKKyAgICBHWFZfa2Vybl9EYXRhICAgICAga2VybiA9ICZrZXJucmVjOworCisgICAgRlRfQnl0ZXMgICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgIGxpbWl0ID0gMDsKKworICAgIEZUX1VMb25nICAgICAgICAgICBuVGFibGVzID0gMDsKKyAgICBGVF9VSW50ICAgICAgICAgICAgaTsKKworCisgICAgZ3h2YWxpZC0+cm9vdCAgICAgICA9IGZ0dmFsaWQ7CisgICAgZ3h2YWxpZC0+dGFibGVfZGF0YSA9IGtlcm47CisgICAgZ3h2YWxpZC0+ZmFjZSAgICAgICA9IGZhY2U7CisKKyAgICBGVF9UUkFDRTMoKCAidmFsaWRhdGluZyBga2VybicgdGFibGVcbiIgKSk7CisgICAgR1hWX0lOSVQ7CisgICAgS0VSTl9ESUFMRUNUKCBneHZhbGlkICkgPSBkaWFsZWN0X3JlcXVlc3Q7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBHWFZfS0VSTl9EQVRBKCB2ZXJzaW9uICkgPSAoR1hWX2tlcm5fVmVyc2lvbilGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEdYVl9UUkFDRSgoICJ2ZXJzaW9uIDB4JTA0eCAoaGlnaGVyIDE2Yml0KVxuIiwKKyAgICAgICAgICAgICAgICBHWFZfS0VSTl9EQVRBKCB2ZXJzaW9uICkgKSk7CisKKyAgICBpZiAoIDB4MDAwMSA8IEdYVl9LRVJOX0RBVEEoIHZlcnNpb24gKSApCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICBlbHNlIGlmICggS0VSTl9JU19DTEFTU0lDKCBneHZhbGlkICkgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgblRhYmxlcyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgfQorICAgIGVsc2UgaWYgKCBLRVJOX0lTX05FVyggZ3h2YWxpZCApICkKKyAgICB7CisgICAgICBpZiAoIGNsYXNzaWNfb25seSApCisgICAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgICBpZiAoIDB4MDAwMCAhPSBGVF9ORVhUX1VTSE9SVCggcCApICkKKyAgICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggNCApOworICAgICAgblRhYmxlcyA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5UYWJsZXM7IGkrKyApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggInZhbGlkYXRpbmcgc3VidGFibGUgJWQvJWRcbiIsIGksIG5UYWJsZXMgKSk7CisgICAgICAvKiBwIHNob3VsZCBiZSAzMmJpdC1hbGlnbmVkPyAqLworICAgICAgZ3h2X2tlcm5fc3VidGFibGVfdmFsaWRhdGUoIHAsIDAsIGd4dmFsaWQgKTsKKyAgICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworICAgIH0KKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9rZXJuX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIGd4dl9rZXJuX3ZhbGlkYXRlX2dlbmVyaWMoIHRhYmxlLCBmYWNlLCAwLCBLRVJOX0RJQUxFQ1RfQU5ZLCBmdHZhbGlkICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9rZXJuX3ZhbGlkYXRlX2NsYXNzaWMoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBkaWFsZWN0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIGZ0dmFsaWQgKQorICB7CisgICAgR1hWX2tlcm5fRGlhbGVjdCAgZGlhbGVjdF9yZXF1ZXN0OworCisKKyAgICBkaWFsZWN0X3JlcXVlc3QgPSAoR1hWX2tlcm5fRGlhbGVjdClkaWFsZWN0X2ZsYWdzOworICAgIGd4dl9rZXJuX3ZhbGlkYXRlX2dlbmVyaWMoIHRhYmxlLCBmYWNlLCAxLCBkaWFsZWN0X3JlcXVlc3QsIGZ0dmFsaWQgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dmxjYXIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZsY2FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ODlmZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZsY2FyLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dmxjYXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBsY2FyIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmxjYXIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIGFuZCBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfbGNhcl9EYXRhUmVjXworICB7CisgICAgRlRfVVNob3J0ICBmb3JtYXQ7CisKKyAgfSBHWFZfbGNhcl9EYXRhUmVjLCAqR1hWX2xjYXJfRGF0YTsKKworCisjZGVmaW5lIEdYVl9MQ0FSX0RBVEEoIEZJRUxEICkgIEdYVl9UQUJMRV9EQVRBKCBsY2FyLCBGSUVMRCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBneHZfbGNhcl9wYXJ0aWFsX3ZhbGlkYXRlKCBGVF9TaG9ydCAgICAgICBwYXJ0aWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfTkFNRV9FTlRFUiggInBhcnRpYWwiICk7CisKKyAgICBpZiAoIEdYVl9MQ0FSX0RBVEEoIGZvcm1hdCApICE9IDEgKQorICAgICAgZ290byBFeGl0OworCisgICAgZ3h2X2N0bFBvaW50X3ZhbGlkYXRlKCBnbHlwaCwgKEZUX1VTaG9ydClwYXJ0aWFsLCBneHZhbGlkICk7CisKKyAgRXhpdDoKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X2xjYXJfTG9va3VwVmFsdWVfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgICAgICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0xvb2t1cFZhbHVlQ1B0ciAgdmFsdWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwICAgICA9IGd4dmFsaWQtPnJvb3QtPmJhc2UgKyB2YWx1ZV9wLT51OworICAgIEZUX0J5dGVzICAgbGltaXQgPSBneHZhbGlkLT5yb290LT5saW1pdDsKKyAgICBGVF9VU2hvcnQgIGNvdW50OworICAgIEZUX1Nob3J0ICAgcGFydGlhbDsKKyAgICBGVF9VU2hvcnQgIGk7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAiZWxlbWVudCBpbiBsb29rdXBUYWJsZSIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIGNvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiAqIGNvdW50ICk7CisgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICB7CisgICAgICBwYXJ0aWFsID0gRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgZ3h2X2xjYXJfcGFydGlhbF92YWxpZGF0ZSggcGFydGlhbCwgZ2x5cGgsIGd4dmFsaWQgKTsKKyAgICB9CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoKKyAgICArLS0tLS0tIGxjYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICB8ICAgICAgfCBsb291cCBoZWFkZXIgIHwgICAgICAgICB8CisgICAgfCAgICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgICAgICB8IEJpblNyY2hIZWFkZXIgfCAgICAgICAgIHwKKyAgICB8ICAgICAgKz09PT09PT09PT09PT09PSsgICAgICAgICB8CisgICAgfCAgICAgIHwgbGFzdEdseXBoWzBdICB8ICAgICAgICAgfAorICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8ICAgICAgfCBmaXJzdEdseXBoWzBdIHwgICAgICAgICB8ICBoZWFkIG9mIGxjYXIgc2ZudCB0YWJsZQorICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwgICAgICAgICAgICAgKworICAgIHwgICAgICB8IG9mZnNldFswXSAgICAgfCAgICAtPiAgIHwgICAgICAgICAgb2Zmc2V0ICAgICAgICAgICAgW2J5dGVdCisgICAgfCAgICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCAgICAgIHwgbGFzdEdseXBoWzFdICB8ICAgICAgICAgfCAoZ2x5cGhJRCAtIGZpcnN0R2x5cGgpICogMiBbYnl0ZV0KKyAgICB8ICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICB8CisgICAgfCAgICAgIHwgZmlyc3RHbHlwaFsxXSB8ICAgICAgICAgfAorICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8ICAgICAgfCBvZmZzZXRbMV0gICAgIHwgICAgICAgICB8CisgICAgfCAgICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAxNmJpdCB2YWx1ZSBhcnJheSAgICAgICAgIHwKKyAgICB8ICAgICAgKz09PT09PT09PT09PT09PSsgICAgICAgICB8CisgICAgKy0tLS0tLXwgICAgIHZhbHVlICAgICB8IDwtLS0tLS0tKworICAgIHwgICAgICAgLi4uLgorICAgIHwKKyAgICB8CisgICAgfAorICAgIHwKKyAgICB8CisgICAgKy0tLS0+ICBsY2FyIHZhbHVlcy4uLmhhbmRsZWQgYnkgbGNhciBjYWxsYmFjayBmdW5jdGlvbgorICAqLworCisgIHN0YXRpYyBHWFZfTG9va3VwVmFsdWVEZXNjCisgIGd4dl9sY2FyX0xvb2t1cEZtdDRfdHJhbnNpdCggRlRfVVNob3J0ICAgICAgICAgICAgcmVsYXRpdmVfZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIGJhc2VfdmFsdWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICAgICAgICBsb29rdXB0YmxfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBwOworICAgIEZUX0J5dGVzICAgICAgICAgICAgIGxpbWl0OworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIG9mZnNldDsKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2YWx1ZTsKKworICAgIEZUX1VOVVNFRCggbG9va3VwdGJsX2xpbWl0ICk7CisKKyAgICAvKiBYWFg6IGNoZWNrIHJhbmdlPyAqLworICAgIG9mZnNldCA9IChGVF9VU2hvcnQpKCBiYXNlX3ZhbHVlX3AtPnUgKworICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZV9naW5kZXggKiBzaXplb2YgKCBGVF9VU2hvcnQgKSApOworICAgIHAgICAgICA9IGd4dmFsaWQtPnJvb3QtPmJhc2UgKyBvZmZzZXQ7CisgICAgbGltaXQgID0gZ3h2YWxpZC0+cm9vdC0+bGltaXQ7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0sgKCAyICk7CisgICAgdmFsdWUudSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICByZXR1cm4gdmFsdWU7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGNhciBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9sY2FyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgbGltaXQgPSAwOworICAgIEdYVl9WYWxpZGF0b3JSZWMgIGd4dmFsaWRyZWM7CisgICAgR1hWX1ZhbGlkYXRvciAgICAgZ3h2YWxpZCA9ICZneHZhbGlkcmVjOworCisgICAgR1hWX2xjYXJfRGF0YVJlYyAgbGNhcnJlYzsKKyAgICBHWFZfbGNhcl9EYXRhICAgICBsY2FyID0gJmxjYXJyZWM7CisKKyAgICBGVF9GaXhlZCAgICAgICAgICB2ZXJzaW9uOworCisKKyAgICBneHZhbGlkLT5yb290ICAgICAgID0gZnR2YWxpZDsKKyAgICBneHZhbGlkLT50YWJsZV9kYXRhID0gbGNhcjsKKyAgICBneHZhbGlkLT5mYWNlICAgICAgID0gZmFjZTsKKworICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIGBsY2FyJyB0YWJsZVxuIiApKTsKKyAgICBHWFZfSU5JVDsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggNCArIDIgKTsKKyAgICB2ZXJzaW9uID0gRlRfTkVYVF9MT05HKCBwICk7CisgICAgR1hWX0xDQVJfREFUQSggZm9ybWF0ICkgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgaWYgKCB2ZXJzaW9uICE9IDB4MDAwMTAwMDBVTCkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgaWYgKCBHWFZfTENBUl9EQVRBKCBmb3JtYXQgKSA+IDEgKQorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICBneHZhbGlkLT5sb29rdXB2YWxfc2lnbiAgID0gR1hWX0xPT0tVUFZBTFVFX1VOU0lHTkVEOworICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9mdW5jICAgPSBneHZfbGNhcl9Mb29rdXBWYWx1ZV92YWxpZGF0ZTsKKyAgICBneHZhbGlkLT5sb29rdXBmbXQ0X3RyYW5zID0gZ3h2X2xjYXJfTG9va3VwRm10NF90cmFuc2l0OworICAgIGd4dl9Mb29rdXBUYWJsZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb2QuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2EwMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vZC5jCkBAIC0wLDAgKzEsMjg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb2QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUncyBUcnVlVHlwZUdYL0FBVCB2YWxpZGF0aW9uIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlIEZUX0dYX1ZBTElEQVRFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9HWF9WQUxJREFURV9ICisKKyNpbmNsdWRlICJneHZtb2QuaCIKKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vZHVsZQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGd4dl9sb2FkX3RhYmxlKCBGVF9GYWNlICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9UYWcgICAgICAgICAgICAgIHRhZywKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqIHZvbGF0aWxlKiAgdGFibGUsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICAgICAgIHRhYmxlX2xlbiApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoIGZhY2UsIHRhZywgMCwgTlVMTCwgdGFibGVfbGVuICk7CisgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBUYWJsZV9NaXNzaW5nICkgKQorICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfQUxMT0MoICp0YWJsZSwgKnRhYmxlX2xlbiApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKCBmYWNlLCB0YWcsIDAsICp0YWJsZSwgdGFibGVfbGVuICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisjZGVmaW5lIEdYVl9UQUJMRV9ERUNMKCBfc2ZudCApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0J5dGUqIHZvbGF0aWxlICBfc2ZudCAgICAgICAgICA9IE5VTEw7IFwKKyAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgIGxlbl8gIyMgX3NmbnQgPSAwCisKKyNkZWZpbmUgR1hWX1RBQkxFX0xPQUQoIF9zZm50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmICggKCBGVF9WQUxJREFURV8gIyMgX3NmbnQgIyMgX0lOREVYIDwgdGFibGVfY291bnQgKSAmJiBcCisgICAgICAgICAgICAgICAoIGd4X2ZsYWdzICYgRlRfVkFMSURBVEVfICMjIF9zZm50ICkgICAgICAgICAgICApICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZXJyb3IgPSBneHZfbG9hZF90YWJsZSggZmFjZSwgVFRBR18gIyMgX3NmbnQsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX3NmbnQsICZsZW5fICMjIF9zZm50ICk7ICAgICAgIFwKKyAgICAgICAgICAgIGlmICggZXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBnb3RvIEV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfQorCisjZGVmaW5lIEdYVl9UQUJMRV9WQUxJREFURSggX3NmbnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYgKCBfc2ZudCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmdF92YWxpZGF0b3JfaW5pdCggJnZhbGlkLCBfc2ZudCwgX3NmbnQgKyBsZW5fICMjIF9zZm50LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfREVGQVVMVCApOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIGZ0X3NldGptcCggdmFsaWQuanVtcF9idWZmZXIgKSA9PSAwICkgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGd4dl8gIyMgX3NmbnQgIyMgX3ZhbGlkYXRlKCBfc2ZudCwgZmFjZSwgJnZhbGlkICk7ICAgICBcCisgICAgICAgICAgICBlcnJvciA9IHZhbGlkLmVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIGVycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGdvdG8gRXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfQorCisjZGVmaW5lIEdYVl9UQUJMRV9TRVQoIF9zZm50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmICggRlRfVkFMSURBVEVfICMjIF9zZm50ICMjIF9JTkRFWCA8IHRhYmxlX2NvdW50ICkgICAgICAgIFwKKyAgICAgICAgICAgIHRhYmxlc1tGVF9WQUxJREFURV8gIyMgX3NmbnQgIyMgX0lOREVYXSA9IChGVF9CeXRlcylfc2ZudAorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGd4dl92YWxpZGF0ZSggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgRlRfVUludCAgIGd4X2ZsYWdzLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICB0YWJsZXNbRlRfVkFMSURBVEVfR1hfTEVOR1RIXSwKKyAgICAgICAgICAgICAgICBGVF9VSW50ICAgdGFibGVfY291bnQgKQorICB7CisgICAgRlRfTWVtb3J5IHZvbGF0aWxlICAgICAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9WYWxpZGF0b3JSZWMgdm9sYXRpbGUgIHZhbGlkOworCisgICAgRlRfVUludCAgaTsKKworCisgICAgR1hWX1RBQkxFX0RFQ0woIGZlYXQgKTsKKyAgICBHWFZfVEFCTEVfREVDTCggYnNsbiApOworICAgIEdYVl9UQUJMRV9ERUNMKCB0cmFrICk7CisgICAgR1hWX1RBQkxFX0RFQ0woIGp1c3QgKTsKKyAgICBHWFZfVEFCTEVfREVDTCggbW9ydCApOworICAgIEdYVl9UQUJMRV9ERUNMKCBtb3J4ICk7CisgICAgR1hWX1RBQkxFX0RFQ0woIGtlcm4gKTsKKyAgICBHWFZfVEFCTEVfREVDTCggb3BiZCApOworICAgIEdYVl9UQUJMRV9ERUNMKCBwcm9wICk7CisgICAgR1hWX1RBQkxFX0RFQ0woIGxjYXIgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgdGFibGVfY291bnQ7IGkrKyApCisgICAgICB0YWJsZXNbaV0gPSAwOworCisgICAgLyogbG9hZCB0YWJsZXMgKi8KKyAgICBHWFZfVEFCTEVfTE9BRCggZmVhdCApOworICAgIEdYVl9UQUJMRV9MT0FEKCBic2xuICk7CisgICAgR1hWX1RBQkxFX0xPQUQoIHRyYWsgKTsKKyAgICBHWFZfVEFCTEVfTE9BRCgganVzdCApOworICAgIEdYVl9UQUJMRV9MT0FEKCBtb3J0ICk7CisgICAgR1hWX1RBQkxFX0xPQUQoIG1vcnggKTsKKyAgICBHWFZfVEFCTEVfTE9BRCgga2VybiApOworICAgIEdYVl9UQUJMRV9MT0FEKCBvcGJkICk7CisgICAgR1hWX1RBQkxFX0xPQUQoIHByb3AgKTsKKyAgICBHWFZfVEFCTEVfTE9BRCggbGNhciApOworCisgICAgLyogdmFsaWRhdGUgdGFibGVzICovCisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBmZWF0ICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBic2xuICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCB0cmFrICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBqdXN0ICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBtb3J0ICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBtb3J4ICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBrZXJuICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBvcGJkICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBwcm9wICk7CisgICAgR1hWX1RBQkxFX1ZBTElEQVRFKCBsY2FyICk7CisKKyAgICAvKiBTZXQgcmVzdWx0cyAqLworICAgIEdYVl9UQUJMRV9TRVQoIGZlYXQgKTsKKyAgICBHWFZfVEFCTEVfU0VUKCBtb3J0ICk7CisgICAgR1hWX1RBQkxFX1NFVCggbW9yeCApOworICAgIEdYVl9UQUJMRV9TRVQoIGJzbG4gKTsKKyAgICBHWFZfVEFCTEVfU0VUKCBqdXN0ICk7CisgICAgR1hWX1RBQkxFX1NFVCgga2VybiApOworICAgIEdYVl9UQUJMRV9TRVQoIG9wYmQgKTsKKyAgICBHWFZfVEFCTEVfU0VUKCB0cmFrICk7CisgICAgR1hWX1RBQkxFX1NFVCggcHJvcCApOworICAgIEdYVl9UQUJMRV9TRVQoIGxjYXIgKTsKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGZlYXQgKTsKKyAgICAgIEZUX0ZSRUUoIGJzbG4gKTsKKyAgICAgIEZUX0ZSRUUoIHRyYWsgKTsKKyAgICAgIEZUX0ZSRUUoIGp1c3QgKTsKKyAgICAgIEZUX0ZSRUUoIG1vcnQgKTsKKyAgICAgIEZUX0ZSRUUoIG1vcnggKTsKKyAgICAgIEZUX0ZSRUUoIGtlcm4gKTsKKyAgICAgIEZUX0ZSRUUoIG9wYmQgKTsKKyAgICAgIEZUX0ZSRUUoIHByb3AgKTsKKyAgICAgIEZUX0ZSRUUoIGxjYXIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjbGFzc2ljX2tlcm5fdmFsaWRhdGUoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNrZXJuX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzKiAgY2tlcm5fdGFibGUgKQorICB7CisgICAgRlRfTWVtb3J5IHZvbGF0aWxlICAgICAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisgICAgRlRfQnl0ZSogdm9sYXRpbGUgICAgICAgICBja2VybiAgICAgPSBOVUxMOworICAgIEZUX1VMb25nICAgICAgICAgICAgICAgICAgbGVuX2NrZXJuID0gMDsKKworICAgIC8qIHdpdGhvdXQgdm9sYXRpbGUgb24gYGVycm9yJyBHQ0MgNC4xLjEuIGVtaXRzOiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICB3YXJuaW5nOiB2YXJpYWJsZSAnZXJyb3InIG1pZ2h0IGJlIGNsb2JiZXJlZCBieSAnbG9uZ2ptcCcgb3IgJ3Zmb3JrJyAqLworICAgIC8qIHRoaXMgd2FybmluZyBzZWVtcyBzcHVyaW91cyBidXQgLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0Vycm9yIHZvbGF0aWxlICAgICAgICAgZXJyb3I7CisgICAgRlRfVmFsaWRhdG9yUmVjIHZvbGF0aWxlICB2YWxpZDsKKworCisgICAgKmNrZXJuX3RhYmxlID0gTlVMTDsKKworICAgIGVycm9yID0gZ3h2X2xvYWRfdGFibGUoIGZhY2UsIFRUQUdfa2VybiwgJmNrZXJuLCAmbGVuX2NrZXJuICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGNrZXJuICkKKyAgICB7CisgICAgICBmdF92YWxpZGF0b3JfaW5pdCggJnZhbGlkLCBja2VybiwgY2tlcm4gKyBsZW5fY2tlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfREVGQVVMVCApOworICAgICAgaWYgKCBmdF9zZXRqbXAoIHZhbGlkLmp1bXBfYnVmZmVyICkgPT0gMCApCisgICAgICAgIGd4dl9rZXJuX3ZhbGlkYXRlX2NsYXNzaWMoIGNrZXJuLCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2Vybl9mbGFncyAmIEZUX1ZBTElEQVRFX0NLRVJOLCAmdmFsaWQgKTsKKyAgICAgIGVycm9yID0gdmFsaWQuZXJyb3I7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgICpja2Vybl90YWJsZSA9IGNrZXJuOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9GUkVFKCBja2VybiApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfU2VydmljZV9HWHZhbGlkYXRlUmVjICBneHZhbGlkX2ludGVyZmFjZSA9CisgIHsKKyAgICBneHZfdmFsaWRhdGUKKyAgfTsKKworCisgIHN0YXRpYworICBjb25zdCBGVF9TZXJ2aWNlX0NLRVJOdmFsaWRhdGVSZWMgIGNrZXJudmFsaWRfaW50ZXJmYWNlID0KKyAgeworICAgIGNsYXNzaWNfa2Vybl92YWxpZGF0ZQorICB9OworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICBneHZhbGlkX3NlcnZpY2VzW10gPQorICB7CisgICAgeyBGVF9TRVJWSUNFX0lEX0dYX1ZBTElEQVRFLCAgICAgICAgICAmZ3h2YWxpZF9pbnRlcmZhY2UgfSwKKyAgICB7IEZUX1NFUlZJQ0VfSURfQ0xBU1NJQ0tFUk5fVkFMSURBVEUsICZja2VybnZhbGlkX2ludGVyZmFjZSB9LAorICAgIHsgTlVMTCwgTlVMTCB9CisgIH07CisKKworICBzdGF0aWMgRlRfUG9pbnRlcgorICBneHZhbGlkX2dldF9zZXJ2aWNlKCBGVF9Nb2R1bGUgICAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgc2VydmljZV9pZCApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIGd4dmFsaWRfc2VydmljZXMsIHNlcnZpY2VfaWQgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IEZUX01vZHVsZV9DbGFzcyAgZ3h2X21vZHVsZV9jbGFzcyA9CisgIHsKKyAgICAwLAorICAgIHNpemVvZiAoIEZUX01vZHVsZVJlYyApLAorICAgICJneHZhbGlkIiwKKyAgICAweDEwMDAwTCwKKyAgICAweDIwMDAwTCwKKworICAgIDAsICAgICAgICAgICAgICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKTAsCisgICAgKEZUX01vZHVsZV9EZXN0cnVjdG9yKSAwLAorICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgZ3h2YWxpZF9nZXRfc2VydmljZQorICB9OworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjJjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2bW9kLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlJ3MgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gICAgICAgICAgICovCisvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19HWFZNT0RfSF9fCisjZGVmaW5lIF9fR1hWTU9EX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX01PRFVMRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworI2Vycm9yICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCisjZW5kaWYKKworCisgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX01vZHVsZV9DbGFzcyApICBneHZfbW9kdWxlX2NsYXNzOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fR1hWTU9EX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllN2E1OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0LmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm1vcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZtb3J0LmgiCisjaW5jbHVkZSAiZ3h2ZmVhdC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnRfZmVhdHVyZV92YWxpZGF0ZSggR1hWX21vcnRfZmVhdHVyZSAgZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBpZiAoIGYtPmZlYXR1cmVUeXBlID49IGd4dl9mZWF0X3JlZ2lzdHJ5X2xlbmd0aCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggImZlYXR1cmVUeXBlICVkIGlzIG91dCBvZiByZWdpc3RlcmVkIHJhbmdlLCAiCisgICAgICAgICAgICAgICAgICAic2V0dGluZyAlZCBpcyB1bmNoZWNrZWRcbiIsCisgICAgICAgICAgICAgICAgICBmLT5mZWF0dXJlVHlwZSwgZi0+ZmVhdHVyZVNldHRpbmcgKSk7CisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisgICAgfQorICAgIGVsc2UgaWYgKCAhZ3h2X2ZlYXRfcmVnaXN0cnlbZi0+ZmVhdHVyZVR5cGVdLmV4aXN0ZW5jZSApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggImZlYXR1cmVUeXBlICVkIGlzIHdpdGhpbiByZWdpc3RlcmVkIGFyZWEgIgorICAgICAgICAgICAgICAgICAgImJ1dCB1bmRlZmluZWQsIHNldHRpbmcgJWQgaXMgdW5jaGVja2VkXG4iLAorICAgICAgICAgICAgICAgICAgZi0+ZmVhdHVyZVR5cGUsIGYtPmZlYXR1cmVTZXR0aW5nICkpOworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfREFUQSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfQnl0ZSAgblNldHRpbmdzX21heDsKKworCisgICAgICAvKiBuU2V0dGluZ3MgaW4gZ3h2ZmVhdC5jIGlzIGhhbHZlZCBmb3IgZXhjbHVzaXZlIG9uL29mZiBzZXR0aW5ncyAqLworICAgICAgblNldHRpbmdzX21heCA9IGd4dl9mZWF0X3JlZ2lzdHJ5W2YtPmZlYXR1cmVUeXBlXS5uU2V0dGluZ3M7CisgICAgICBpZiAoIGd4dl9mZWF0X3JlZ2lzdHJ5W2YtPmZlYXR1cmVUeXBlXS5leGNsdXNpdmUgKQorICAgICAgICBuU2V0dGluZ3NfbWF4ID0gKEZUX0J5dGUpKCAyICogblNldHRpbmdzX21heCApOworCisgICAgICBHWFZfVFJBQ0UoKCAiZmVhdHVyZVR5cGUgJWQgaXMgcmVnaXN0ZXJlZCIsIGYtPmZlYXR1cmVUeXBlICkpOworICAgICAgR1hWX1RSQUNFKCggInNldHRpbmcgJWQiLCBmLT5mZWF0dXJlU2V0dGluZyApKTsKKworICAgICAgaWYgKCBmLT5mZWF0dXJlU2V0dGluZyA+IG5TZXR0aW5nc19tYXggKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAib3V0IG9mIGRlZmluZWQgcmFuZ2UgJWQiLCBuU2V0dGluZ3NfbWF4ICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisgICAgICB9CisgICAgICBHWFZfVFJBQ0UoKCAiXG4iICkpOworICAgIH0KKworICAgIC8qIFRPRE86IGVuYWJsZUZsYWdzIG11c3QgYmUgdW5pcXVlIHZhbHVlIGluIHNwZWNpZmllZCBjaGFpbj8gICovCisgIH0KKworCisgIC8qCisgICAqIG5GZWF0dXJlRmxhZ3MgaXMgdHlwZWQgdG8gRlRfVUxvbmcgdG8gYWNjZXB0IHRoYXQgaW4KKyAgICogbW9ydCAodHlwZWQgRlRfVVNob3J0KSBhbmQgbW9yeCAodHlwZWQgRlRfVUxvbmcpLgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBuRmVhdHVyZUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VTG9uZyAgaTsKKworICAgIEdYVl9tb3J0X2ZlYXR1cmVSZWMgIGYgPSBHWFZfTU9SVF9GRUFUVVJFX09GRjsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJtb3J0IGZlYXR1cmUgbGlzdCIgKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5GZWF0dXJlRmxhZ3M7IGkrKyApCisgICAgeworICAgICAgR1hWX0xJTUlUX0NIRUNLKCAyICsgMiArIDQgKyA0ICk7CisgICAgICBmLmZlYXR1cmVUeXBlICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGYuZmVhdHVyZVNldHRpbmcgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgZi5lbmFibGVGbGFncyAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIGYuZGlzYWJsZUZsYWdzICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgIGd4dl9tb3J0X2ZlYXR1cmVfdmFsaWRhdGUoICZmLCBneHZhbGlkICk7CisgICAgfQorCisgICAgaWYgKCAhSVNfR1hWX01PUlRfRkVBVFVSRV9PRkYoIGYgKSApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGggPSAoRlRfVUxvbmcpKCBwIC0gdGFibGUgKTsKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnRfY292ZXJhZ2VfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIGNvdmVyYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGd4dmFsaWQgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCBjb3ZlcmFnZSAmIDB4ODAwMFUgKQorICAgICAgR1hWX1RSQUNFKCggIiB0aGlzIHN1YnRhYmxlIGlzIGZvciB2ZXJ0aWNhbCB0ZXh0IG9ubHlcbiIgKSk7CisgICAgZWxzZQorICAgICAgR1hWX1RSQUNFKCggIiB0aGlzIHN1YnRhYmxlIGlzIGZvciBob3Jpem9udGFsIHRleHQgb25seVxuIiApKTsKKworICAgIGlmICggY292ZXJhZ2UgJiAweDQwMDAgKQorICAgICAgR1hWX1RSQUNFKCggIiB0aGlzIHN1YnRhYmxlIGlzIGFwcGxpZWQgdG8gZ2x5cGggYXJyYXkgIgorICAgICAgICAgICAgICAgICAgImluIGRlc2NlbmRpbmcgb3JkZXJcbiIgKSk7CisgICAgZWxzZQorICAgICAgR1hWX1RSQUNFKCggIiB0aGlzIHN1YnRhYmxlIGlzIGFwcGxpZWQgdG8gZ2x5cGggYXJyYXkgIgorICAgICAgICAgICAgICAgICAgImluIGFzY2VuZGluZyBvcmRlclxuIiApKTsKKworICAgIGlmICggY292ZXJhZ2UgJiAweDIwMDAgKQorICAgICAgR1hWX1RSQUNFKCggIiB0aGlzIHN1YnRhYmxlIGlzIGZvcmNpYmx5IGFwcGxpZWQgdG8gIgorICAgICAgICAgICAgICAgICAgInZlcnRpY2FsL2hvcml6b250YWwgdGV4dFxuIiApKTsKKworICAgIGlmICggY292ZXJhZ2UgJiAweDFGRjggKQorICAgICAgR1hWX1RSQUNFKCggIiBjb3ZlcmFnZSBoYXMgbm9uLXplcm8gYml0cyBpbiByZXNlcnZlZCBhcmVhXG4iICkpOworI2VuZGlmCisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X3N1YnRhYmxlc192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgblN1YnRhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKyAgICBHWFZfVmFsaWRhdGVfRnVuYyBmbXRfZnVuY3NfdGFibGVbXSA9CisgICAgeworICAgICAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTBfdmFsaWRhdGUsIC8qIDAgKi8KKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3ZhbGlkYXRlLCAvKiAxICovCisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl92YWxpZGF0ZSwgLyogMiAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU0X3ZhbGlkYXRlLCAvKiA0ICovCisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV92YWxpZGF0ZSwgLyogNSAqLworCisgICAgfTsKKworICAgIEZUX1VTaG9ydCAgaTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJzdWJ0YWJsZXMgaW4gYSBjaGFpbiIgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgblN1YnRhYmxlczsgaSsrICkKKyAgICB7CisgICAgICBHWFZfVmFsaWRhdGVfRnVuYyAgZnVuYzsKKworICAgICAgRlRfVVNob3J0ICBsZW5ndGg7CisgICAgICBGVF9VU2hvcnQgIGNvdmVyYWdlOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgICBGVF9VTG9uZyAgIHN1YkZlYXR1cmVGbGFnczsKKyNlbmRpZgorICAgICAgRlRfVUludCAgICB0eXBlOworICAgICAgRlRfVUludCAgICByZXN0OworCisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiArIDIgKyA0ICk7CisgICAgICBsZW5ndGggICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgY292ZXJhZ2UgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAgc3ViRmVhdHVyZUZsYWdzID0gRlRfTkVYVF9VTE9ORyggcCApOworI2Vsc2UKKyAgICAgIHAgKz0gNDsKKyNlbmRpZgorCisgICAgICBHWFZfVFJBQ0UoKCAidmFsaWRhdGluZyBjaGFpbiBzdWJ0YWJsZSAlZC8lZCAoJWQgYnl0ZXMpXG4iLAorICAgICAgICAgICAgICAgICAgaSArIDEsIG5TdWJ0YWJsZXMsIGxlbmd0aCApKTsKKyAgICAgIHR5cGUgPSBjb3ZlcmFnZSAmIDB4MDAwNzsKKyAgICAgIHJlc3QgPSBsZW5ndGggLSAoIDIgKyAyICsgNCApOworCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIHJlc3QgKTsKKyAgICAgIGd4dl9tb3J0X2NvdmVyYWdlX3ZhbGlkYXRlKCBjb3ZlcmFnZSwgZ3h2YWxpZCApOworCisgICAgICBpZiAoIHR5cGUgPiA1ICkKKyAgICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICAgIGZ1bmMgPSBmbXRfZnVuY3NfdGFibGVbdHlwZV07CisgICAgICBpZiAoIGZ1bmMgPT0gTlVMTCApCisgICAgICAgIEdYVl9UUkFDRSgoICJtb3J4IHR5cGUgJWQgaXMgcmVzZXJ2ZWRcbiIsIHR5cGUgKSk7CisKKyAgICAgIGZ1bmMoIHAsIHAgKyByZXN0LCBneHZhbGlkICk7CisKKyAgICAgIHAgKz0gcmVzdDsKKyAgICAgIC8qIFRPRE86IHZhbGlkYXRlIHN1YkZlYXR1cmVGbGFncyAqLworICAgIH0KKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X2NoYWluX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIEZUX1VMb25nICAgZGVmYXVsdEZsYWdzOworI2VuZGlmCisgICAgRlRfVUxvbmcgICBjaGFpbkxlbmd0aDsKKyAgICBGVF9VU2hvcnQgIG5GZWF0dXJlRmxhZ3M7CisgICAgRlRfVVNob3J0ICBuU3VidGFibGVzOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIm1vcnQgY2hhaW4gaGVhZGVyIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDIgKyAyICk7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBkZWZhdWx0RmxhZ3MgID0gRlRfTkVYVF9VTE9ORyggcCApOworI2Vsc2UKKyAgICBwICs9IDQ7CisjZW5kaWYKKyAgICBjaGFpbkxlbmd0aCAgID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIG5GZWF0dXJlRmxhZ3MgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIG5TdWJ0YWJsZXMgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlKCBwLCB0YWJsZSArIGNoYWluTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbkZlYXR1cmVGbGFncywgZ3h2YWxpZCApOworICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworICAgIGd4dl9tb3J0X3N1YnRhYmxlc192YWxpZGF0ZSggcCwgdGFibGUgKyBjaGFpbkxlbmd0aCwgblN1YnRhYmxlcywgZ3h2YWxpZCApOworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IGNoYWluTGVuZ3RoOworCisgICAgLyogVE9ETzogdmFsaWRhdGUgZGVmYXVsdEZsYWdzICovCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIEdYVl9WYWxpZGF0b3JSZWMgIGd4dmFsaWRyZWM7CisgICAgR1hWX1ZhbGlkYXRvciAgICAgZ3h2YWxpZCA9ICZneHZhbGlkcmVjOworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgbGltaXQgPSAwOworICAgIEZUX1VMb25nICAgICAgICAgIHZlcnNpb247CisgICAgRlRfVUxvbmcgICAgICAgICAgbkNoYWluczsKKyAgICBGVF9VTG9uZyAgICAgICAgICBpOworCisKKyAgICBneHZhbGlkLT5yb290ID0gZnR2YWxpZDsKKyAgICBneHZhbGlkLT5mYWNlID0gZmFjZTsKKyAgICBsaW1pdCAgICAgICAgID0gZ3h2YWxpZC0+cm9vdC0+bGltaXQ7CisKKyAgICBGVF9UUkFDRTMoKCAidmFsaWRhdGluZyBgbW9ydCcgdGFibGVcbiIgKSk7CisgICAgR1hWX0lOSVQ7CisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDQgKyA0ICk7CisgICAgdmVyc2lvbiA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBuQ2hhaW5zID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgaWYgKHZlcnNpb24gIT0gMHgwMDAxMDAwMFVMKQorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5DaGFpbnM7IGkrKyApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggInZhbGlkYXRpbmcgY2hhaW4gJWQvJWRcbiIsIGkgKyAxLCBuQ2hhaW5zICkpOworICAgICAgR1hWXzMyQklUX0FMSUdOTUVOVF9WQUxJREFURSggcCAtIHRhYmxlICk7CisgICAgICBneHZfbW9ydF9jaGFpbl92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworICAgIH0KKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0LmggYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm1vcnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gZGVmaW5pdGlvbiBmb3IgbW9ydCB0YWJsZSAoc3BlY2lmaWNhdGlvbikuICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19HWFZNT1JUX0hfXworI2RlZmluZSBfX0dYVk1PUlRfSF9fCisKKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKKworI2luY2x1ZGUgRlRfU0ZOVF9OQU1FU19ICisKKworICB0eXBlZGVmIHN0cnVjdCAgR1hWX21vcnRfZmVhdHVyZVJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgZmVhdHVyZVR5cGU7CisgICAgRlRfVVNob3J0ICBmZWF0dXJlU2V0dGluZzsKKyAgICBGVF9VTG9uZyAgIGVuYWJsZUZsYWdzOworICAgIEZUX1VMb25nICAgZGlzYWJsZUZsYWdzOworCisgIH0gR1hWX21vcnRfZmVhdHVyZVJlYywgKkdYVl9tb3J0X2ZlYXR1cmU7CisKKyNkZWZpbmUgR1hWX01PUlRfRkVBVFVSRV9PRkYgIHswLCAxLCAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTH0KKworI2RlZmluZSBJU19HWFZfTU9SVF9GRUFUVVJFX09GRiggZiApICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoZikuZmVhdHVyZVR5cGUgICAgPT0gMCAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgIChmKS5mZWF0dXJlU2V0dGluZyA9PSAxICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgKGYpLmVuYWJsZUZsYWdzICAgID09IDB4MDAwMDAwMDBVTCB8fCBcCisgICAgICAgICAgICAoZikuZGlzYWJsZUZsYWdzICAgPT0gMHgwMDAwMDAwMFVMICkKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBuRmVhdHVyZUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J0X2NvdmVyYWdlX3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICBjb3ZlcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUwX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKworI2VuZGlmIC8qIF9fR1hWTU9SVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0MC5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhY2UzNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0MC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb3J0MC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGJvZHkgZm9yIHR5cGUwIChJbmRpYyBTY3JpcHQgUmVhcnJhbmdlbWVudCkgc3VidGFibGUuICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dm1vcnQuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vcnQKKworCisgIHN0YXRpYyBjb25zdCBjaGFyKiBHWFZfTW9ydF9JbmRpY1NjcmlwdF9Nc2dbXSA9CisgIHsKKyAgICAibm8gY2hhbmdlIiwKKyAgICAiQXggPT4geEEiLAorICAgICJ4RCA9PiBEeCIsCisgICAgIkF4RCA9PiBEeEEiLAorICAgICJBQnggPT4geEFCIiwKKyAgICAiQUJ4ID0+IHhCQSIsCisgICAgInhDRCA9PiBDRHgiLAorICAgICJ4Q0QgPT4gREN4IiwKKyAgICAiQXhDRCA9PiBDRHhBIiwKKyAgICAiQXhDRCA9PiBEQ3hBIiwKKyAgICAiQUJ4RCA9PiBEeEFCIiwKKyAgICAiQUJ4RCA9PiBEeEJBIiwKKyAgICAiQUJ4Q0QgPT4gQ0R4QUIiLAorICAgICJBQnhDRCA9PiBDRHhCQSIsCisgICAgIkFCeENEID0+IERDeEFCIiwKKyAgICAiQUJ4Q0QgPT4gREN4QkEiLAorCisgIH07CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMF9lbnRyeV92YWxpZGF0ZSgKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgR1hWX1N0YXRlVGFibGVfR2x5cGhPZmZzZXRDUHRyICBnbHlwaE9mZnNldF9wLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKKyAgICBHWFZfVmFsaWRhdG9yICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVVNob3J0ICBtYXJrRmlyc3Q7CisgICAgRlRfVVNob3J0ICBkb250QWR2YW5jZTsKKyAgICBGVF9VU2hvcnQgIG1hcmtMYXN0OworICAgIEZUX1VTaG9ydCAgcmVzZXJ2ZWQ7CisgICAgRlRfVVNob3J0ICB2ZXJiID0gMDsKKworICAgIEZUX1VOVVNFRCggc3RhdGUgKTsKKyAgICBGVF9VTlVTRUQoIHRhYmxlICk7CisgICAgRlRfVU5VU0VEKCBsaW1pdCApOworCisgICAgRlRfVU5VU0VEKCBHWFZfTW9ydF9JbmRpY1NjcmlwdF9Nc2dbdmVyYl0gKTsgLyogZm9yIHRoZSBub24tZGVidWdnaW5nICovCisgICAgRlRfVU5VU0VEKCBnbHlwaE9mZnNldF9wICk7ICAgICAgICAgICAgICAgICAgLyogY2FzZSAgICAgICAgICAgICAgICAgICovCisKKworICAgIG1hcmtGaXJzdCAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTUgKSAmIDEgKTsKKyAgICBkb250QWR2YW5jZSA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE0ICkgJiAxICk7CisgICAgbWFya0xhc3QgICAgPSAoRlRfVVNob3J0KSggKCBmbGFncyA+PiAxMyApICYgMSApOworCisgICAgcmVzZXJ2ZWQgPSAoRlRfVVNob3J0KSggZmxhZ3MgJiAweDFGRjAgKTsKKyAgICB2ZXJiICAgICA9IChGVF9VU2hvcnQpKCBmbGFncyAmIDB4MDAwRiApOworCisgICAgR1hWX1RSQUNFKCggIiAgSW5kaWNTY3JpcHQgTW9ycGhSdWxlIGZvciBnbHlwaE9mZnNldCAweCUwNHgiLAorICAgICAgICAgICAgICAgIGdseXBoT2Zmc2V0X3AtPnUgKSk7CisgICAgR1hWX1RSQUNFKCggIiBtYXJrRmlyc3Q9JTAxZCIsIG1hcmtGaXJzdCApKTsKKyAgICBHWFZfVFJBQ0UoKCAiIGRvbnRBZHZhbmNlPSUwMWQiLCBkb250QWR2YW5jZSApKTsKKyAgICBHWFZfVFJBQ0UoKCAiIG1hcmtMYXN0PSUwMWQiLCBtYXJrTGFzdCApKTsKKyAgICBHWFZfVFJBQ0UoKCAiICUwMmQiLCB2ZXJiICkpOworICAgIEdYVl9UUkFDRSgoICIgJXNcbiIsIEdYVl9Nb3J0X0luZGljU2NyaXB0X01zZ1t2ZXJiXSApKTsKKworICAgIGlmICggbWFya0ZpcnN0ID4gMCAmJiBtYXJrTGFzdCA+IDAgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICIgIFtvZGRdIGEgZ2x5cGggaXMgbWFya2VkIGFzIHRoZSBmaXJzdCBhbmQgbGFzdCIKKyAgICAgICAgICAgICAgICAgICIgIGluIEluZGljIHJlYXJyYW5nZW1lbnRcbiIgKSk7CisgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9EQVRBICk7CisgICAgfQorCisgICAgaWYgKCBtYXJrRmlyc3QgPiAwICYmIGRvbnRBZHZhbmNlID4gMCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggIiAgW29kZF0gdGhlIGZpcnN0IGdseXBoIGlzIG1hcmtlZCBhcyBkb250QWR2YW5jZSIKKyAgICAgICAgICAgICAgICAgICIgaW4gSW5kaWMgcmVhcnJhbmdlbWVudFxuIiApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0RBVEEgKTsKKyAgICB9CisKKyAgICBpZiAoIDAgPCByZXNlcnZlZCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggIiBub24temVybyBiaXRzIGZvdW5kIGluIHJlc2VydmVkIHJhbmdlXG4iICkpOworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfREFUQSApOworICAgIH0KKyAgICBlbHNlCisgICAgICBHWFZfVFJBQ0UoKCAiXG4iICkpOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoCisgICAgICAibW9ydCBjaGFpbiBzdWJ0YWJsZSB0eXBlMCAoSW5kaWMtU2NyaXB0IFJlYXJyYW5nZW1lbnQpIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBHWFZfU1RBVEVUQUJMRV9IRUFERVJfU0laRSApOworCisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhICAgICAgICAgICAgICAgPSBOVUxMOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMgICAgID0gTlVMTDsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLnN1YnRhYmxlX3NldHVwX2Z1bmMgICA9IE5VTEw7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgPSBHWFZfR0xZUEhPRkZTRVRfTk9ORTsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMgPQorICAgICAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTBfZW50cnlfdmFsaWRhdGU7CisKKyAgICBneHZfU3RhdGVUYWJsZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDJkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2bW9ydDEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBib2R5IGZvciB0eXBlMSAoQ29udGV4dHVhbCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZtb3J0LmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J0CisKKworICB0eXBlZGVmIHN0cnVjdCAgR1hWX21vcnRfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIHN1YnN0aXR1dGlvblRhYmxlOworICAgIEZUX1VTaG9ydCAgc3Vic3RpdHV0aW9uVGFibGVfbGVuZ3RoOworCisgIH0gIEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjLAorICAgICpHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGE7CisKKyNkZWZpbmUgR1hWX01PUlRfU1VCVEFCTEVfVFlQRTFfSEVBREVSX1NJWkUgXAorICAgICAgICAgICggR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUgKyAyICkKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnN0aXR1dGlvblRhYmxlX2xvYWQoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnRfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhOworCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBvcHRkYXRhLT5zdWJzdGl0dXRpb25UYWJsZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX3N1YnRhYmxlX3NldHVwKCBGVF9VU2hvcnQgICAgICB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgY2xhc3NUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIHN0YXRlQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgY2xhc3NUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIHN0YXRlQXJyYXlfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9VU2hvcnQgIG9bNF07CisgICAgRlRfVVNob3J0ICAqbFs0XTsKKyAgICBGVF9VU2hvcnQgIGJ1ZmZbNV07CisKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGE7CisKKworICAgIG9bMF0gPSBjbGFzc1RhYmxlOworICAgIG9bMV0gPSBzdGF0ZUFycmF5OworICAgIG9bMl0gPSBlbnRyeVRhYmxlOworICAgIG9bM10gPSBvcHRkYXRhLT5zdWJzdGl0dXRpb25UYWJsZTsKKyAgICBsWzBdID0gY2xhc3NUYWJsZV9sZW5ndGhfcDsKKyAgICBsWzFdID0gc3RhdGVBcnJheV9sZW5ndGhfcDsKKyAgICBsWzJdID0gZW50cnlUYWJsZV9sZW5ndGhfcDsKKyAgICBsWzNdID0gJiggb3B0ZGF0YS0+c3Vic3RpdHV0aW9uVGFibGVfbGVuZ3RoICk7CisKKyAgICBneHZfc2V0X2xlbmd0aF9ieV91c2hvcnRfb2Zmc2V0KCBvLCBsLCBidWZmLCA0LCB0YWJsZV9zaXplLCBneHZhbGlkICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX29mZnNldF90b19zdWJzdF92YWxpZGF0ZSgKKyAgICBGVF9TaG9ydCAgICAgICAgICB3b3JkT2Zmc2V0LAorICAgIGNvbnN0IEZUX1N0cmluZyogIHRhZywKKyAgICBGVF9CeXRlICAgICAgICAgICBzdGF0ZSwKKyAgICBHWFZfVmFsaWRhdG9yICAgICBneHZhbGlkICkKKyAgeworICAgIEZUX1VTaG9ydCAgc3Vic3RUYWJsZTsKKyAgICBGVF9VU2hvcnQgIHN1YnN0VGFibGVfbGltaXQ7CisKKyAgICBGVF9VTlVTRUQoIHRhZyApOworICAgIEZUX1VOVVNFRCggc3RhdGUgKTsKKworCisgICAgc3Vic3RUYWJsZSA9CisgICAgICAoKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjICopCisgICAgICAgKGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YSkpLT5zdWJzdGl0dXRpb25UYWJsZTsKKyAgICBzdWJzdFRhYmxlX2xpbWl0ID0KKyAgICAgIChGVF9VU2hvcnQpKCBzdWJzdFRhYmxlICsKKyAgICAgICAgICAgICAgICAgICAoKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjICopCisgICAgICAgICAgICAgICAgICAgIChneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGEpKS0+c3Vic3RpdHV0aW9uVGFibGVfbGVuZ3RoICk7CisKKyAgICBneHZhbGlkLT5taW5fZ2lkID0gKEZUX1VTaG9ydCkoICggc3Vic3RUYWJsZSAgICAgICAtIHdvcmRPZmZzZXQgKiAyICkgLyAyICk7CisgICAgZ3h2YWxpZC0+bWF4X2dpZCA9IChGVF9VU2hvcnQpKCAoIHN1YnN0VGFibGVfbGltaXQgLSB3b3JkT2Zmc2V0ICogMiApIC8gMiApOworICAgIGd4dmFsaWQtPm1heF9naWQgPSAoRlRfVVNob3J0KSggRlRfTUFYKCBneHZhbGlkLT5tYXhfZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzICkgKTsKKworICAgIC8qIFhYWDogY2hlY2sgcmFuZ2U/ICovCisKKyAgICAvKiBUT0RPOiBtaW5fZ2lkICYgbWF4X2dpZCBjb21wYXJpc29uIHdpdGggQ2xhc3NUYWJsZSBjb250ZW50cyAqLworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9lbnRyeV92YWxpZGF0ZSgKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgR1hWX1N0YXRlVGFibGVfR2x5cGhPZmZzZXRDUHRyICBnbHlwaE9mZnNldF9wLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKKyAgICBHWFZfVmFsaWRhdG9yICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKQorICB7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBGVF9VU2hvcnQgIHNldE1hcms7CisgICAgRlRfVVNob3J0ICBkb250QWR2YW5jZTsKKyNlbmRpZgorICAgIEZUX1VTaG9ydCAgcmVzZXJ2ZWQ7CisgICAgRlRfU2hvcnQgICBtYXJrT2Zmc2V0OworICAgIEZUX1Nob3J0ICAgY3VycmVudE9mZnNldDsKKworICAgIEZUX1VOVVNFRCggdGFibGUgKTsKKyAgICBGVF9VTlVTRUQoIGxpbWl0ICk7CisKKworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgc2V0TWFyayAgICAgICA9IChGVF9VU2hvcnQpKCAgIGZsYWdzID4+IDE1ICAgICAgICAgICAgKTsKKyAgICBkb250QWR2YW5jZSAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTQgKSAmIDEgICAgICApOworI2VuZGlmCisgICAgcmVzZXJ2ZWQgICAgICA9IChGVF9VU2hvcnQpKCAgICBmbGFncyAgICAgICAgJiAweDNGRkYgKTsKKworICAgIG1hcmtPZmZzZXQgICAgPSAoRlRfU2hvcnQpKCBnbHlwaE9mZnNldF9wLT51bCA+PiAxNiApOworICAgIGN1cnJlbnRPZmZzZXQgPSAoRlRfU2hvcnQpKCBnbHlwaE9mZnNldF9wLT51bCAgICAgICApOworCisgICAgaWYgKCAwIDwgcmVzZXJ2ZWQgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICIgbm9uLXplcm8gYml0cyBmb3VuZCBpbiByZXNlcnZlZCByYW5nZVxuIiApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0RBVEEgKTsKKyAgICB9CisKKyAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9vZmZzZXRfdG9fc3Vic3RfdmFsaWRhdGUoIG1hcmtPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFya09mZnNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKworICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUxX29mZnNldF90b19zdWJzdF92YWxpZGF0ZSggY3VycmVudE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50T2Zmc2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJzdFRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICBwID0gdGFibGU7CisgICAgRlRfVVNob3J0ICBudW1fZ2lkcyA9IChGVF9VU2hvcnQpKAorICAgICAgICAgICAgICAgICAoKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjICopCisgICAgICAgICAgICAgICAgICAoZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhKSktPnN1YnN0aXR1dGlvblRhYmxlX2xlbmd0aCAvIDIgKTsKKyAgICBGVF9VU2hvcnQgIGk7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAidmFsaWRhdGluZyBjb250ZW50cyBvZiBzdWJzdGl0dXRpb25UYWJsZSIgKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9naWRzIDsgaSArKyApCisgICAgeworICAgICAgRlRfVVNob3J0ICBkc3RfZ2lkOworCisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgZHN0X2dpZCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgIGlmICggZHN0X2dpZCA+PSAweEZGRkZVICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggZHN0X2dpZCA8IGd4dmFsaWQtPm1pbl9naWQgfHwgZ3h2YWxpZC0+bWF4X2dpZCA8IGRzdF9naWQgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAic3Vic3RUYWJsZSBpbmNsdWRlIGEgc3RyYW5nZSBnaWRbJWRdPSVkID4iCisgICAgICAgICAgICAgICAgICAgICIgb3V0IG9mIGRlZmluZSByYW5nZSAoJWQuLiVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgZHN0X2dpZCwgZ3h2YWxpZC0+bWluX2dpZCwgZ3h2YWxpZC0+bWF4X2dpZCApKTsKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgLyoKKyAgICogc3VidGFibGUgZm9yIENvbnRleHR1YWwgZ2x5cGggc3Vic3RpdHV0aW9uIGlzIGEgbW9kaWZpZWQgU3RhdGVUYWJsZS4KKyAgICogSW4gYWRkaXRpb24gdG8gY2xhc3NUYWJsZSwgc3RhdGVBcnJheSwgYW5kIGVudHJ5VGFibGUsIHRoZSBmaWVsZAorICAgKiBgc3Vic3RpdHV0aW9uVGFibGUnIGlzIGFkZGVkLgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlYyAgc3RfcmVjOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIm1vcnQgY2hhaW4gc3VidGFibGUgdHlwZTEgKENvbnRleHR1YWwgR2x5cGggU3Vic3QpIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBHWFZfTU9SVF9TVUJUQUJMRV9UWVBFMV9IRUFERVJfU0laRSApOworCisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhID0KKyAgICAgICZzdF9yZWM7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhX2xvYWRfZnVuYyA9CisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJzdGl0dXRpb25UYWJsZV9sb2FkOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYyA9CisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJ0YWJsZV9zZXR1cDsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLmVudHJ5X2dseXBob2Zmc2V0X2ZtdCA9CisgICAgICBHWFZfR0xZUEhPRkZTRVRfVUxPTkc7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV92YWxpZGF0ZV9mdW5jID0KKworICAgICAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTFfZW50cnlfdmFsaWRhdGU7CisgICAgZ3h2X1N0YXRlVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMV9zdWJzdFRhYmxlX3ZhbGlkYXRlKAorICAgICAgdGFibGUgKyBzdF9yZWMuc3Vic3RpdHV0aW9uVGFibGUsCisgICAgICB0YWJsZSArIHN0X3JlYy5zdWJzdGl0dXRpb25UYWJsZSArIHN0X3JlYy5zdWJzdGl0dXRpb25UYWJsZV9sZW5ndGgsCisgICAgICBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQyLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjU2Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQyLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm1vcnQyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgYm9keSBmb3IgdHlwZTIgKExpZ2F0dXJlIFN1YnN0aXR1dGlvbikgc3VidGFibGUuICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiZ3h2bW9ydC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjXworICB7CisgICAgRlRfVVNob3J0ICBsaWdBY3Rpb25UYWJsZTsKKyAgICBGVF9VU2hvcnQgIGNvbXBvbmVudFRhYmxlOworICAgIEZUX1VTaG9ydCAgbGlnYXR1cmVUYWJsZTsKKyAgICBGVF9VU2hvcnQgIGxpZ0FjdGlvblRhYmxlX2xlbmd0aDsKKyAgICBGVF9VU2hvcnQgIGNvbXBvbmVudFRhYmxlX2xlbmd0aDsKKyAgICBGVF9VU2hvcnQgIGxpZ2F0dXJlVGFibGVfbGVuZ3RoOworCisgIH0gIEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjLAorICAgICpHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGE7CisKKyNkZWZpbmUgR1hWX01PUlRfU1VCVEFCTEVfVFlQRTJfSEVBREVSX1NJWkUgXAorICAgICAgICAgICggR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUgKyAyICsgMiArIDIgKQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTJfb3B0dGFibGVfbG9hZCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgR1hWX21vcnRfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhOworCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgMiApOworICAgIG9wdGRhdGEtPmxpZ0FjdGlvblRhYmxlID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBvcHRkYXRhLT5jb21wb25lbnRUYWJsZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZSAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgR1hWX1RSQUNFKCggIm9mZnNldCB0byBsaWdBY3Rpb25UYWJsZT0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+bGlnQWN0aW9uVGFibGUgKSk7CisgICAgR1hWX1RSQUNFKCggIm9mZnNldCB0byBjb21wb25lbnRUYWJsZT0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+Y29tcG9uZW50VGFibGUgKSk7CisgICAgR1hWX1RSQUNFKCggIm9mZnNldCB0byBsaWdhdHVyZVRhYmxlPTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICBvcHRkYXRhLT5saWdhdHVyZVRhYmxlICkpOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9zdWJ0YWJsZV9zZXR1cCggRlRfVVNob3J0ICAgICAgdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICpjbGFzc1RhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgKnN0YXRlQXJyYXlfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAqZW50cnlUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVVNob3J0ICBvWzZdOworICAgIEZUX1VTaG9ydCAgKmxbNl07CisgICAgRlRfVVNob3J0ICBidWZmWzddOworCisgICAgR1hWX21vcnRfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggInN1YnRhYmxlIGJvdW5kYXJpZXMgc2V0dXAiICk7CisKKyAgICBvWzBdID0gY2xhc3NUYWJsZTsKKyAgICBvWzFdID0gc3RhdGVBcnJheTsKKyAgICBvWzJdID0gZW50cnlUYWJsZTsKKyAgICBvWzNdID0gb3B0ZGF0YS0+bGlnQWN0aW9uVGFibGU7CisgICAgb1s0XSA9IG9wdGRhdGEtPmNvbXBvbmVudFRhYmxlOworICAgIG9bNV0gPSBvcHRkYXRhLT5saWdhdHVyZVRhYmxlOworICAgIGxbMF0gPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIGxbMV0gPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIGxbMl0gPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworICAgIGxbM10gPSAmKG9wdGRhdGEtPmxpZ0FjdGlvblRhYmxlX2xlbmd0aCk7CisgICAgbFs0XSA9ICYob3B0ZGF0YS0+Y29tcG9uZW50VGFibGVfbGVuZ3RoKTsKKyAgICBsWzVdID0gJihvcHRkYXRhLT5saWdhdHVyZVRhYmxlX2xlbmd0aCk7CisKKyAgICBneHZfc2V0X2xlbmd0aF9ieV91c2hvcnRfb2Zmc2V0KCBvLCBsLCBidWZmLCA2LCB0YWJsZV9zaXplLCBneHZhbGlkICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiY2xhc3NUYWJsZTogb2Zmc2V0PTB4JTA0eCBsZW5ndGg9MHglMDR4XG4iLAorICAgICAgICAgICAgICAgIGNsYXNzVGFibGUsICpjbGFzc1RhYmxlX2xlbmd0aF9wICkpOworICAgIEdYVl9UUkFDRSgoICJzdGF0ZUFycmF5OiBvZmZzZXQ9MHglMDR4IGxlbmd0aD0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgc3RhdGVBcnJheSwgKnN0YXRlQXJyYXlfbGVuZ3RoX3AgKSk7CisgICAgR1hWX1RSQUNFKCggImVudHJ5VGFibGU6IG9mZnNldD0weCUwNHggbGVuZ3RoPTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeVRhYmxlLCAqZW50cnlUYWJsZV9sZW5ndGhfcCApKTsKKyAgICBHWFZfVFJBQ0UoKCAibGlnQWN0aW9uVGFibGU6IG9mZnNldD0weCUwNHggbGVuZ3RoPTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZSwKKyAgICAgICAgICAgICAgICBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZV9sZW5ndGggKSk7CisgICAgR1hWX1RSQUNFKCggImNvbXBvbmVudFRhYmxlOiBvZmZzZXQ9MHglMDR4IGxlbmd0aD0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+Y29tcG9uZW50VGFibGUsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+Y29tcG9uZW50VGFibGVfbGVuZ3RoICkpOworICAgIEdYVl9UUkFDRSgoICJsaWdhdHVyZVRhYmxlOiAgb2Zmc2V0PTB4JTA0eCBsZW5ndGg9MHglMDR4XG4iLAorICAgICAgICAgICAgICAgIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZV9sZW5ndGggKSk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTJfbGlnQWN0aW9uT2Zmc2V0X3ZhbGlkYXRlKAorICAgIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgIEZUX1VTaG9ydCAgICAgIGxpZ0FjdGlvbk9mZnNldCwKKyAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIC8qIGFjY2VzcyBsaWdBY3Rpb25UYWJsZSAqLworICAgIEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjRGF0YSAgb3B0ZGF0YSA9CisgICAgICAoR1hWX21vcnRfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhKWd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YTsKKworICAgIEZUX0J5dGVzIGxhdF9iYXNlICA9IHRhYmxlICsgb3B0ZGF0YS0+bGlnQWN0aW9uVGFibGU7CisgICAgRlRfQnl0ZXMgcCAgICAgICAgID0gdGFibGUgKyBsaWdBY3Rpb25PZmZzZXQ7CisgICAgRlRfQnl0ZXMgbGF0X2xpbWl0ID0gbGF0X2Jhc2UgKyBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZTsKKworCisgICAgR1hWXzMyQklUX0FMSUdOTUVOVF9WQUxJREFURSggbGlnQWN0aW9uT2Zmc2V0ICk7CisgICAgaWYgKCBwIDwgbGF0X2Jhc2UgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICJ0b28gc2hvcnQgb2Zmc2V0IDB4JTA0eDogcCA8IGxhdF9iYXNlICglZCBieXRlIHJld2luZClcbiIsCisgICAgICAgICAgICAgICAgICBsaWdBY3Rpb25PZmZzZXQsIGxhdF9iYXNlIC0gcCApKTsKKworICAgICAgLyogRm9udFZhbGlkYXRvciwgZnR4dmFsaWRhdG9yLCBmdHhkdW1wZXJmdXNlciB3YXJuIGJ1dCBjb250aW51ZSAqLworICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfT0ZGU0VUICk7CisgICAgfQorICAgIGVsc2UgaWYgKCBsYXRfbGltaXQgPCBwICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAidG9vIGxhcmdlIG9mZnNldCAweCUwNHg6IGxhdF9saW1pdCA8IHAgKCVkIGJ5dGUgb3ZlcnJ1bilcbiIsCisgICAgICAgICAgICAgICAgICBsaWdBY3Rpb25PZmZzZXQsIHAgLSBsYXRfbGltaXQgKSk7CisKKyAgICAgIC8qIEZvbnRWYWxpZGF0b3IsIGZ0eHZhbGlkYXRvciwgZnR4ZHVtcGVyZnVzZXIgd2FybiBidXQgY29udGludWUgKi8KKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX09GRlNFVCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogdmFsaWRhdGUgZW50cnkgaW4gbGlnQWN0aW9uVGFibGUgKi8KKyAgICAgIEZUX1VMb25nICAgbGlnX2FjdGlvbjsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAgRlRfVVNob3J0ICBsYXN0OworICAgICAgRlRfVVNob3J0ICBzdG9yZTsKKyNlbmRpZgorICAgICAgRlRfVUxvbmcgICBvZmZzZXQ7CisKKworICAgICAgbGlnX2FjdGlvbiA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAgbGFzdCAgID0gKEZUX1VTaG9ydCkoICggbGlnX2FjdGlvbiA+PiAzMSApICYgMSApOworICAgICAgc3RvcmUgID0gKEZUX1VTaG9ydCkoICggbGlnX2FjdGlvbiA+PiAzMCApICYgMSApOworI2VuZGlmCisKKyAgICAgIC8qIEFwcGxlIHNwZWMgZGVmaW5lcyB0aGlzIG9mZnNldCBhcyBhIHdvcmQgb2Zmc2V0ICovCisgICAgICBvZmZzZXQgPSBsaWdfYWN0aW9uICYgMHgzRkZGRkZGRlVMOworICAgICAgaWYgKCBvZmZzZXQgKiAyIDwgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZSApCisgICAgICB7CisgICAgICAgIEdYVl9UUkFDRSgoICJ0b28gc2hvcnQgb2Zmc2V0IDB4JTA4eDoiCisgICAgICAgICAgICAgICAgICAgICIgMiB4IG9mZnNldCA8IGxpZ2F0dXJlVGFibGUgKCVkIGJ5dGUgcmV3aW5kKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZSAtIG9mZnNldCAqIDIgKSk7CisKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfT0ZGU0VUICk7CisgICAgICB9IGVsc2UgaWYgKCBvZmZzZXQgKiAyID4KKyAgICAgICAgICAgICAgICAgIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUgKyBvcHRkYXRhLT5saWdhdHVyZVRhYmxlX2xlbmd0aCApCisgICAgICB7CisgICAgICAgIEdYVl9UUkFDRSgoICJ0b28gbG9uZyBvZmZzZXQgMHglMDh4OiIKKyAgICAgICAgICAgICAgICAgICAgIiAyIHggb2Zmc2V0ID4gbGlnYXR1cmVUYWJsZSArIGxpZ2F0dXJlVGFibGVfbGVuZ3RoIgorICAgICAgICAgICAgICAgICAgICAiICglZCBieXRlIG92ZXJydW4pXG4iLAorICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZSArIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGVfbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAtIG9mZnNldCAqIDIgKSk7CisKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfT0ZGU0VUICk7CisgICAgICB9CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9lbnRyeV92YWxpZGF0ZSgKKyAgICBGVF9CeXRlICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLAorICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgR1hWX1N0YXRlVGFibGVfR2x5cGhPZmZzZXRDUHRyICBnbHlwaE9mZnNldF9wLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKKyAgICBHWFZfVmFsaWRhdG9yICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKQorICB7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBGVF9VU2hvcnQgc2V0Q29tcG9uZW50OworICAgIEZUX1VTaG9ydCBkb250QWR2YW5jZTsKKyNlbmRpZgorICAgIEZUX1VTaG9ydCBvZmZzZXQ7CisKKyAgICBGVF9VTlVTRUQoIHN0YXRlICk7CisgICAgRlRfVU5VU0VEKCBnbHlwaE9mZnNldF9wICk7CisgICAgRlRfVU5VU0VEKCBsaW1pdCApOworCisKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHNldENvbXBvbmVudCA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE1ICkgJiAxICk7CisgICAgZG9udEFkdmFuY2UgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTQgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgb2Zmc2V0ID0gKEZUX1VTaG9ydCkoIGZsYWdzICYgMHgzRkZGVSApOworCisgICAgaWYgKCAwIDwgb2Zmc2V0ICkKKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX2xpZ0FjdGlvbk9mZnNldF92YWxpZGF0ZSggdGFibGUsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9saWdhdHVyZVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGE7CisKKyAgICBGVF9CeXRlcyBwICAgICA9IHRhYmxlICsgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZTsKKyAgICBGVF9CeXRlcyBsaW1pdCA9IHRhYmxlICsgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBvcHRkYXRhLT5saWdhdHVyZVRhYmxlX2xlbmd0aDsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJtb3J0IGNoYWluIHN1YnRhYmxlIHR5cGUyIC0gc3Vic3RpdHV0aW9uVGFibGUiICk7CisgICAgaWYgKCAwICE9IG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUgKQorICAgIHsKKyAgICAgIC8qIEFwcGxlIGRvZXMgbm90IGdpdmUgc3BlY2lmaWNhdGlvbiBvZiBsaWdhdHVyZVRhYmxlIGZvcm1hdCAqLworICAgICAgd2hpbGUgKCBwIDwgbGltaXQgKQorICAgICAgeworICAgICAgICBGVF9VU2hvcnQgIGxpZ19naWQ7CisKKworICAgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgICAgbGlnX2dpZCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgaWYgKCBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzIDwgbGlnX2dpZCApCisgICAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfR0xZUEhfSUQgKTsKKyAgICAgIH0KKyAgICB9CisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnRfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWMgIGxpZ19yZWM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAibW9ydCBjaGFpbiBzdWJ0YWJsZSB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggR1hWX01PUlRfU1VCVEFCTEVfVFlQRTJfSEVBREVSX1NJWkUgKTsKKworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YSA9CisgICAgICAmbGlnX3JlYzsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGFfbG9hZF9mdW5jID0KKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX29wdHRhYmxlX2xvYWQ7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5zdWJ0YWJsZV9zZXR1cF9mdW5jID0KKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGUyX3N1YnRhYmxlX3NldHVwOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUuZW50cnlfZ2x5cGhvZmZzZXRfZm10ID0KKyAgICAgIEdYVl9HTFlQSE9GRlNFVF9OT05FOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUuZW50cnlfdmFsaWRhdGVfZnVuYyA9CisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlMl9lbnRyeV92YWxpZGF0ZTsKKworICAgIGd4dl9TdGF0ZVRhYmxlX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgcCArPSBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGg7CisgICAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTJfbGlnYXR1cmVUYWJsZV92YWxpZGF0ZSggdGFibGUsIGd4dmFsaWQgKTsKKworICAgIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCA9IChGVF9VTG9uZykoIHAgLSB0YWJsZSApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1ZjM3NwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb3J0NC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGJvZHkgZm9yIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dm1vcnQuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vcnQKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU0X2xvb2t1cHZhbF92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgICAgICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0xvb2t1cFZhbHVlQ1B0ciAgdmFsdWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICAgICAgICBneHZhbGlkICkKKyAgeworICAgIEZUX1VOVVNFRCggZ2x5cGggKTsKKworICAgIGd4dl9nbHlwaGlkX3ZhbGlkYXRlKCB2YWx1ZV9wLT51LCBneHZhbGlkICk7CisgIH0KKworICAvKgorICAgICs9PT09PT09PT09PT09PT0rIC0tLS0tLS0tKworICAgIHwgbG9va3VwIGhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgQmluU3JjaEhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgbGFzdEdseXBoWzBdICB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFswXSB8ICAgICAgICAgfCAgICBoZWFkIG9mIGxvb2t1cCB0YWJsZQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBvZmZzZXRbMF0gICAgIHwgICAgLT4gICB8ICAgICAgICAgIG9mZnNldCAgICAgICAgICAgIFtieXRlXQorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBsYXN0R2x5cGhbMV0gIHwgICAgICAgICB8IChnbHlwaElEIC0gZmlyc3RHbHlwaCkgKiAyIFtieXRlXQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFsxXSB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgb2Zmc2V0WzFdICAgICB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIDE2Yml0IHZhbHVlIGFycmF5ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgICAgIHZhbHVlICAgICB8IDwtLS0tLS0tKworICAgICAuLi4uCisgICovCisKKyAgc3RhdGljIEdYVl9Mb29rdXBWYWx1ZURlc2MKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTRfbG9va3VwZm10NF90cmFuc2l0KAorICAgIEZUX1VTaG9ydCAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCwKKyAgICBHWFZfTG9va3VwVmFsdWVDUHRyICBiYXNlX3ZhbHVlX3AsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgbG9va3VwdGJsX2xpbWl0LAorICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgcDsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBsaW1pdDsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICBvZmZzZXQ7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKyAgICAvKiBYWFg6IGNoZWNrIHJhbmdlPyAqLworICAgIG9mZnNldCA9IChGVF9VU2hvcnQpKCBiYXNlX3ZhbHVlX3AtPnUgKworICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZV9naW5kZXggKiBzaXplb2YgKCBGVF9VU2hvcnQgKSApOworCisgICAgcCAgICAgPSBneHZhbGlkLT5sb29rdXB0YmxfaGVhZCArIG9mZnNldDsKKyAgICBsaW1pdCA9IGxvb2t1cHRibF9saW1pdDsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgIHZhbHVlLnUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgcmV0dXJuIHZhbHVlOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJtb3J0IGNoYWluIHN1YnRhYmxlIHR5cGU0ICIKKyAgICAgICAgICAgICAgICAgICAgIihOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIiApOworCisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX3NpZ24gICA9IEdYVl9MT09LVVBWQUxVRV9VTlNJR05FRDsKKyAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyAgID0gZ3h2X21vcnRfc3VidGFibGVfdHlwZTRfbG9va3VwdmFsX3ZhbGlkYXRlOworICAgIGd4dmFsaWQtPmxvb2t1cGZtdDRfdHJhbnMgPSBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNF9sb29rdXBmbXQ0X3RyYW5zaXQ7CisKKyAgICBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQ1LmMgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJmOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnQ1LmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm1vcnQ1LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgYm9keSBmb3IgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiZ3h2bW9ydC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAorCisKKyAgLyoKKyAgICogbW9ydCBzdWJ0YWJsZSB0eXBlNSAoQ29udGV4dHVhbCBHbHlwaCBJbnNlcnRpb24pCisgICAqIGhhcyB0aGUgZm9ybWF0IG9mIFN0YXRlVGFibGUgd2l0aCBpbnNlcnRpb24tZ2x5cGgtbGlzdCwKKyAgICogYnV0IHdpdGhvdXQgbmFtZS4gIFRoZSBvZmZzZXQgaXMgZ2l2ZW4gYnkgZ2x5cGhPZmZzZXQgaW4KKyAgICogZW50cnlUYWJsZS4gIFRoZXJlIGlzIG5vIHRhYmxlIGxvY2F0aW9uIGRlY2xhcmF0aW9uCisgICAqIGxpa2UgeHh4VGFibGUuCisgICAqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgIGNsYXNzVGFibGU7CisgICAgRlRfVVNob3J0ICAgc3RhdGVBcnJheTsKKyAgICBGVF9VU2hvcnQgICBlbnRyeVRhYmxlOworCisjZGVmaW5lIEdYVl9NT1JUX1NVQlRBQkxFX1RZUEU1X0hFQURFUl9TSVpFICBHWFZfU1RBVEVUQUJMRV9IRUFERVJfU0laRQorCisgICAgRlRfVVNob3J0KiAgY2xhc3NUYWJsZV9sZW5ndGhfcDsKKyAgICBGVF9VU2hvcnQqICBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIEZUX1VTaG9ydCogIGVudHJ5VGFibGVfbGVuZ3RoX3A7CisKKyAgfSAgR1hWX21vcnRfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWMsCisgICAgKkdYVl9tb3J0X3N1YnRhYmxlX3R5cGU1X1N0YXRlT3B0UmVjRGF0YTsKKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU1X3N1YnRhYmxlX3NldHVwKCBGVF9VU2hvcnQgICAgICB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgY2xhc3NUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIHN0YXRlQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgICAgY2xhc3NUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgIHN0YXRlQXJyYXlfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J0X3N1YnRhYmxlX3R5cGU1X1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT5zdGF0ZXRhYmxlLm9wdGRhdGE7CisKKworICAgIGd4dl9TdGF0ZVRhYmxlX3N1YnRhYmxlX3NldHVwKCB0YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1RhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVRhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICBvcHRkYXRhLT5jbGFzc1RhYmxlID0gY2xhc3NUYWJsZTsKKyAgICBvcHRkYXRhLT5zdGF0ZUFycmF5ID0gc3RhdGVBcnJheTsKKyAgICBvcHRkYXRhLT5lbnRyeVRhYmxlID0gZW50cnlUYWJsZTsKKworICAgIG9wdGRhdGEtPmNsYXNzVGFibGVfbGVuZ3RoX3AgPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIG9wdGRhdGEtPnN0YXRlQXJyYXlfbGVuZ3RoX3AgPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIG9wdGRhdGEtPmVudHJ5VGFibGVfbGVuZ3RoX3AgPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV9JbnNlcnRMaXN0X3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgLyoKKyAgICAgKiBXZSBkb24ndCBrbm93IHRoZSByYW5nZSBvZiBpbnNlcnRpb24tZ2x5cGgtbGlzdC4KKyAgICAgKiBTZXQgcmFuZ2UgYnkgd2hvbGUgb2Ygc3RhdGUgdGFibGUuCisgICAgICovCisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZSArIG9mZnNldDsKKworICAgIEdYVl9tb3J0X3N1YnRhYmxlX3R5cGU1X1N0YXRlT3B0UmVjRGF0YSAgb3B0ZGF0YSA9CisgICAgICAoR1hWX21vcnRfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWNEYXRhKWd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YTsKKworICAgIGlmICggb3B0ZGF0YS0+Y2xhc3NUYWJsZSA8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIG9mZnNldCA8IG9wdGRhdGEtPmNsYXNzVGFibGUgKyAqKG9wdGRhdGEtPmNsYXNzVGFibGVfbGVuZ3RoX3ApICkKKyAgICAgIEdYVl9UUkFDRSgoICIgb2Zmc2V0IHJ1bnMgaW50byBDbGFzc1RhYmxlIiApKTsKKyAgICBpZiAoIG9wdGRhdGEtPnN0YXRlQXJyYXkgPCBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBvZmZzZXQgPCBvcHRkYXRhLT5zdGF0ZUFycmF5ICsgKihvcHRkYXRhLT5zdGF0ZUFycmF5X2xlbmd0aF9wKSApCisgICAgICBHWFZfVFJBQ0UoKCAiIG9mZnNldCBydW5zIGludG8gU3RhdGVBcnJheSIgKSk7CisgICAgaWYgKCBvcHRkYXRhLT5lbnRyeVRhYmxlIDwgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgb2Zmc2V0IDwgb3B0ZGF0YS0+ZW50cnlUYWJsZSArICoob3B0ZGF0YS0+ZW50cnlUYWJsZV9sZW5ndGhfcCkgKQorICAgICAgR1hWX1RSQUNFKCggIiBvZmZzZXQgcnVucyBpbnRvIEVudHJ5VGFibGUiICkpOworCisjaWZuZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBHWFZfTElNSVRfQ0hFQ0soIGNvdW50ICogMiApOworI2Vsc2UKKyAgICB3aGlsZSAoIHAgPCB0YWJsZSArIG9mZnNldCArICggY291bnQgKiAyICkgKQorICAgIHsKKyAgICAgIEZUX1VTaG9ydCBpbnNlcnRfZ2x5cGhJRDsKKworCisgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgIGluc2VydF9nbHlwaElEID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIEdYVl9UUkFDRSgoICIgMHglMDR4IiwgaW5zZXJ0X2dseXBoSUQgKSk7CisgICAgfQorICAgIEdYVl9UUkFDRSgoICJcbiIgKSk7CisjZW5kaWYKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfZW50cnlfdmFsaWRhdGUoCisgICAgRlRfQnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ciAgZ2x5cGhPZmZzZXQsCisgICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgIEdYVl9WYWxpZGF0b3IgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApCisgIHsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIEZUX0Jvb2wgICAgc2V0TWFyazsKKyAgICBGVF9Cb29sICAgIGRvbnRBZHZhbmNlOworICAgIEZUX0Jvb2wgICAgY3VycmVudElzS2FzaGlkYUxpa2U7CisgICAgRlRfQm9vbCAgICBtYXJrZWRJc0thc2hpZGFMaWtlOworICAgIEZUX0Jvb2wgICAgY3VycmVudEluc2VydEJlZm9yZTsKKyAgICBGVF9Cb29sICAgIG1hcmtlZEluc2VydEJlZm9yZTsKKyNlbmRpZgorICAgIEZUX0J5dGUgICAgY3VycmVudEluc2VydENvdW50OworICAgIEZUX0J5dGUgICAgbWFya2VkSW5zZXJ0Q291bnQ7CisgICAgRlRfVVNob3J0ICBjdXJyZW50SW5zZXJ0TGlzdDsKKyAgICBGVF9VU2hvcnQgIG1hcmtlZEluc2VydExpc3Q7CisKKyAgICBGVF9VTlVTRUQoIHN0YXRlICk7CisKKworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgc2V0TWFyayAgICAgICAgICAgICAgPSBGVF9CT09MKCAoIGZsYWdzID4+IDE1ICkgJiAxICk7CisgICAgZG9udEFkdmFuY2UgICAgICAgICAgPSBGVF9CT09MKCAoIGZsYWdzID4+IDE0ICkgJiAxICk7CisgICAgY3VycmVudElzS2FzaGlkYUxpa2UgPSBGVF9CT09MKCAoIGZsYWdzID4+IDEzICkgJiAxICk7CisgICAgbWFya2VkSXNLYXNoaWRhTGlrZSAgPSBGVF9CT09MKCAoIGZsYWdzID4+IDEyICkgJiAxICk7CisgICAgY3VycmVudEluc2VydEJlZm9yZSAgPSBGVF9CT09MKCAoIGZsYWdzID4+IDExICkgJiAxICk7CisgICAgbWFya2VkSW5zZXJ0QmVmb3JlICAgPSBGVF9CT09MKCAoIGZsYWdzID4+IDEwICkgJiAxICk7CisjZW5kaWYKKworICAgIGN1cnJlbnRJbnNlcnRDb3VudCAgID0gKEZUX0J5dGUpKCAoIGZsYWdzID4+IDUgKSAmIDB4MUYgICApOworICAgIG1hcmtlZEluc2VydENvdW50ICAgID0gKEZUX0J5dGUpKCAgIGZsYWdzICAgICAgICAmIDB4MDAxRiApOworCisgICAgY3VycmVudEluc2VydExpc3QgICAgPSAoRlRfVVNob3J0KSggZ2x5cGhPZmZzZXQtPnVsID4+IDE2ICk7CisgICAgbWFya2VkSW5zZXJ0TGlzdCAgICAgPSAoRlRfVVNob3J0KSggZ2x5cGhPZmZzZXQtPnVsICAgICAgICk7CisKKyAgICBpZiAoIDAgIT0gY3VycmVudEluc2VydExpc3QgJiYgMCAhPSBjdXJyZW50SW5zZXJ0Q291bnQgKQorICAgIHsKKyAgICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU1X0luc2VydExpc3RfdmFsaWRhdGUoIGN1cnJlbnRJbnNlcnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluc2VydENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKTsKKyAgICB9CisKKyAgICBpZiAoIDAgIT0gbWFya2VkSW5zZXJ0TGlzdCAmJiAwICE9IG1hcmtlZEluc2VydENvdW50ICkKKyAgICB7CisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV9JbnNlcnRMaXN0X3ZhbGlkYXRlKCBtYXJrZWRJbnNlcnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VkSW5zZXJ0Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3h2YWxpZCApOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlYyAgICAgIGV0X3JlYzsKKyAgICBHWFZfbW9ydF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlY0RhdGEgIGV0ID0gJmV0X3JlYzsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJtb3J0IGNoYWluIHN1YnRhYmxlIHR5cGU1IChHbHlwaCBJbnNlcnRpb24pIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBHWFZfTU9SVF9TVUJUQUJMRV9UWVBFNV9IRUFERVJfU0laRSApOworCisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5vcHRkYXRhID0KKyAgICAgIGV0OworICAgIGd4dmFsaWQtPnN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMgPQorICAgICAgTlVMTDsKKyAgICBneHZhbGlkLT5zdGF0ZXRhYmxlLnN1YnRhYmxlX3NldHVwX2Z1bmMgPQorICAgICAgZ3h2X21vcnRfc3VidGFibGVfdHlwZTVfc3VidGFibGVfc2V0dXA7CisgICAgZ3h2YWxpZC0+c3RhdGV0YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgPQorICAgICAgR1hWX0dMWVBIT0ZGU0VUX1VMT05HOworICAgIGd4dmFsaWQtPnN0YXRldGFibGUuZW50cnlfdmFsaWRhdGVfZnVuYyA9CisgICAgICBneHZfbW9ydF9zdWJ0YWJsZV90eXBlNV9lbnRyeV92YWxpZGF0ZTsKKworICAgIGd4dl9TdGF0ZVRhYmxlX3ZhbGlkYXRlKCBwLCBsaW1pdCwgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4LmMgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmIzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeC5jCkBAIC0wLDAgKzEsMTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb3J4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiZ3h2bW9yeC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9yeAorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfc3VidGFibGVzX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBuU3VidGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworICAgIEdYVl9WYWxpZGF0ZV9GdW5jIGZtdF9mdW5jc190YWJsZVtdID0KKyAgICB7CisgICAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSwgLyogMCAqLworICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUsIC8qIDEgKi8KKyAgICAgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX3ZhbGlkYXRlLCAvKiAyICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMyAqLworICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTRfdmFsaWRhdGUsIC8qIDQgKi8KKyAgICAgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X3ZhbGlkYXRlLCAvKiA1ICovCisKKyAgICB9OworCisgICAgRlRfVVNob3J0ICBpOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggInN1YnRhYmxlcyBpbiBhIGNoYWluIiApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuU3VidGFibGVzOyBpKysgKQorICAgIHsKKyAgICAgIEdYVl9WYWxpZGF0ZV9GdW5jICBmdW5jOworCisgICAgICBGVF9VTG9uZyAgbGVuZ3RoOworICAgICAgRlRfVUxvbmcgIGNvdmVyYWdlOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgICBGVF9VTG9uZyAgc3ViRmVhdHVyZUZsYWdzOworI2VuZGlmCisgICAgICBGVF9VTG9uZyAgdHlwZTsKKyAgICAgIEZUX1VMb25nICByZXN0OworCisKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggNCArIDQgKyA0ICk7CisgICAgICBsZW5ndGggICAgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBjb3ZlcmFnZSAgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICAgIHN1YkZlYXR1cmVGbGFncyA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyNlbHNlCisgICAgICBwICs9IDQ7CisjZW5kaWYKKworICAgICAgR1hWX1RSQUNFKCggInZhbGlkYXRpbmcgY2hhaW4gc3VidGFibGUgJWQvJWQgKCVkIGJ5dGVzKVxuIiwKKyAgICAgICAgICAgICAgICAgIGkgKyAxLCBuU3VidGFibGVzLCBsZW5ndGggKSk7CisKKyAgICAgIHR5cGUgPSBjb3ZlcmFnZSAmIDB4MDAwNzsKKyAgICAgIHJlc3QgPSBsZW5ndGggLSAoIDQgKyA0ICsgNCApOworICAgICAgR1hWX0xJTUlUX0NIRUNLKCByZXN0ICk7CisKKyAgICAgIC8qIG1vcnggY292ZXJhZ2UgY29uc2lzdHMgb2YgbW9ydF9jb3ZlcmFnZSAmIDE2Yml0IHBhZGRpbmcgKi8KKyAgICAgIGd4dl9tb3J0X2NvdmVyYWdlX3ZhbGlkYXRlKCAoRlRfVVNob3J0KSggKCBjb3ZlcmFnZSA+PiAxNiApIHwgY292ZXJhZ2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisgICAgICBpZiAoIHR5cGUgPiA1ICkKKyAgICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICAgIGZ1bmMgPSBmbXRfZnVuY3NfdGFibGVbdHlwZV07CisgICAgICBpZiAoIGZ1bmMgPT0gTlVMTCApCisgICAgICAgIEdYVl9UUkFDRSgoICJtb3J4IHR5cGUgJWQgaXMgcmVzZXJ2ZWRcbiIsIHR5cGUgKSk7CisKKyAgICAgIGZ1bmMoIHAsIHAgKyByZXN0LCBneHZhbGlkICk7CisKKyAgICAgIC8qIFRPRE86IHN1YkZlYXR1cmVGbGFncyBzaG91bGQgYmUgdW5pcXVlIGluIGEgdGFibGU/ICovCisgICAgICBwICs9IHJlc3Q7CisgICAgfQorCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfY2hhaW5fdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBGVF9VTG9uZyAgZGVmYXVsdEZsYWdzOworI2VuZGlmCisgICAgRlRfVUxvbmcgIGNoYWluTGVuZ3RoOworICAgIEZUX1VMb25nICBuRmVhdHVyZUZsYWdzOworICAgIEZUX1VMb25nICBuU3VidGFibGVzOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIm1vcnggY2hhaW4gaGVhZGVyIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDQgKyA0ICk7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBkZWZhdWx0RmxhZ3MgID0gRlRfTkVYVF9VTE9ORyggcCApOworI2Vsc2UKKyAgICBwICs9IDQ7CisjZW5kaWYKKyAgICBjaGFpbkxlbmd0aCAgID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIG5GZWF0dXJlRmxhZ3MgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgblN1YnRhYmxlcyAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIC8qIGZlYXR1cmUtYXJyYXkgb2YgbW9yeCBpcyBzYW1lIHdpdGggdGhhdCBvZiBtb3J0ICovCisgICAgZ3h2X21vcnRfZmVhdHVyZWFycmF5X3ZhbGlkYXRlKCBwLCBsaW1pdCwgbkZlYXR1cmVGbGFncywgZ3h2YWxpZCApOworICAgIHAgKz0gZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoOworCisgICAgaWYgKCBuU3VidGFibGVzID49IDB4MTAwMDBMICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIGd4dl9tb3J4X3N1YnRhYmxlc192YWxpZGF0ZSggcCwgdGFibGUgKyBjaGFpbkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpblN1YnRhYmxlcywgZ3h2YWxpZCApOworCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gY2hhaW5MZW5ndGg7CisKKyAgICAvKiBUT0RPOiBkZWZhdWx0RmxhZ3Mgc2hvdWxkIGJlIGNvbXBhcmVkIHdpdGggdGhlIGZsYWdzIGluIHRhYmxlcyAqLworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J4X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIEdYVl9WYWxpZGF0b3JSZWMgIGd4dmFsaWRyZWM7CisgICAgR1hWX1ZhbGlkYXRvciAgICAgZ3h2YWxpZCA9ICZneHZhbGlkcmVjOworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgbGltaXQgPSAwOworICAgIEZUX1VMb25nICAgICAgICAgIHZlcnNpb247CisgICAgRlRfVUxvbmcgICAgICAgICAgbkNoYWluczsKKyAgICBGVF9VTG9uZyAgICAgICAgICBpOworCisKKyAgICBneHZhbGlkLT5yb290ID0gZnR2YWxpZDsKKyAgICBneHZhbGlkLT5mYWNlID0gZmFjZTsKKworICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIGBtb3J4JyB0YWJsZVxuIiApKTsKKyAgICBHWFZfSU5JVDsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggNCArIDQgKTsKKyAgICB2ZXJzaW9uID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIG5DaGFpbnMgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIHZlcnNpb24gIT0gMHgwMDAyMDAwMFVMICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuQ2hhaW5zOyBpKysgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICJ2YWxpZGF0aW5nIGNoYWluICVkLyVkXG4iLCBpICsgMSwgbkNoYWlucyApKTsKKyAgICAgIEdYVl8zMkJJVF9BTElHTk1FTlRfVkFMSURBVEUoIHAgLSB0YWJsZSApOworICAgICAgZ3h2X21vcnhfY2hhaW5fdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisgICAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeC5oIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGVmZGZkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcnguaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb3J4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQgY29tbW9uIGRlZmluaXRpb24gZm9yIG1vcnggdGFibGUgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fR1hWTU9SWF9IX18KKyNkZWZpbmUgX19HWFZNT1JYX0hfXworCisKKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKKyNpbmNsdWRlICJneHZtb3J0LmgiCisKKyNpbmNsdWRlIEZUX1NGTlRfTkFNRVNfSAorCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlNF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApOworCisKKyNlbmRpZiAvKiBfX0dYVk1PUlhfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDBiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYwpAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2bW9yeDAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBib2R5IGZvciB0eXBlMCAoSW5kaWMgU2NyaXB0IFJlYXJyYW5nZW1lbnQpIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZtb3J4LmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF9lbnRyeV92YWxpZGF0ZSgKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICBHWFZfWFN0YXRlVGFibGVfR2x5cGhPZmZzZXRDUHRyICBnbHlwaE9mZnNldF9wLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0LAorICAgIEdYVl9WYWxpZGF0b3IgICAgICAgICAgICAgICAgICAgIGd4dmFsaWQgKQorICB7CisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBGVF9VU2hvcnQgIG1hcmtGaXJzdDsKKyAgICBGVF9VU2hvcnQgIGRvbnRBZHZhbmNlOworICAgIEZUX1VTaG9ydCAgbWFya0xhc3Q7CisjZW5kaWYKKyAgICBGVF9VU2hvcnQgIHJlc2VydmVkOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfVVNob3J0ICB2ZXJiOworI2VuZGlmCisKKyAgICBGVF9VTlVTRUQoIHN0YXRlICk7CisgICAgRlRfVU5VU0VEKCBnbHlwaE9mZnNldF9wICk7CisgICAgRlRfVU5VU0VEKCB0YWJsZSApOworICAgIEZUX1VOVVNFRCggbGltaXQgKTsKKworCisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBtYXJrRmlyc3QgICA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE1ICkgJiAxICk7CisgICAgZG9udEFkdmFuY2UgPSAoRlRfVVNob3J0KSggKCBmbGFncyA+PiAxNCApICYgMSApOworICAgIG1hcmtMYXN0ICAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTMgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgcmVzZXJ2ZWQgPSAoRlRfVVNob3J0KSggZmxhZ3MgJiAweDFGRjAgKTsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHZlcmIgICAgID0gKEZUX1VTaG9ydCkoIGZsYWdzICYgMHgwMDBGICk7CisjZW5kaWYKKworICAgIGlmICggMCA8IHJlc2VydmVkICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAiIG5vbi16ZXJvIGJpdHMgZm91bmQgaW4gcmVzZXJ2ZWQgcmFuZ2VcbiIgKSk7CisgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworCisgICAgR1hWX05BTUVfRU5URVIoCisgICAgICAibW9yeCBjaGFpbiBzdWJ0YWJsZSB0eXBlMCAoSW5kaWMtU2NyaXB0IFJlYXJyYW5nZW1lbnQpIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBHWFZfU1RBVEVUQUJMRV9IRUFERVJfU0laRSApOworCisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YSAgICAgICAgICAgICAgID0gTlVMTDsKKyAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhX2xvYWRfZnVuYyAgICAgPSBOVUxMOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLnN1YnRhYmxlX3NldHVwX2Z1bmMgICA9IE5VTEw7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUuZW50cnlfZ2x5cGhvZmZzZXRfZm10ID0gR1hWX0dMWVBIT0ZGU0VUX05PTkU7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUuZW50cnlfdmFsaWRhdGVfZnVuYyA9CisgICAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMF9lbnRyeV92YWxpZGF0ZTsKKworICAgIGd4dl9YU3RhdGVUYWJsZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTI5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2bW9yeDEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBib2R5IGZvciB0eXBlMSAoQ29udGV4dHVhbCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZtb3J4LmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CisKKworICB0eXBlZGVmIHN0cnVjdCAgR1hWX21vcnhfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgIHN1YnN0aXR1dGlvblRhYmxlOworICAgIEZUX1VMb25nICAgc3Vic3RpdHV0aW9uVGFibGVfbGVuZ3RoOworICAgIEZUX1VTaG9ydCAgc3Vic3RpdHV0aW9uVGFibGVfbnVtX2xvb2t1cFRhYmxlczsKKworICB9ICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlYywKKyAgICAqR1hWX21vcnhfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNEYXRhOworCisKKyNkZWZpbmUgR1hWX01PUlhfU1VCVEFCTEVfVFlQRTFfSEVBREVSX1NJWkUgXAorICAgICAgICAgICggR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUgKyAyICkKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3N1YnN0aXR1dGlvblRhYmxlX2xvYWQoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YTsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgb3B0ZGF0YS0+c3Vic3RpdHV0aW9uVGFibGUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9zdWJ0YWJsZV9zZXR1cCggRlRfVUxvbmcgICAgICAgdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGNsYXNzVGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgZW50cnlUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVUxvbmcgIG9bNF07CisgICAgRlRfVUxvbmcgICpsWzRdOworICAgIEZUX1VMb25nICBidWZmWzVdOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTFfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YTsKKworCisgICAgb1swXSA9IGNsYXNzVGFibGU7CisgICAgb1sxXSA9IHN0YXRlQXJyYXk7CisgICAgb1syXSA9IGVudHJ5VGFibGU7CisgICAgb1szXSA9IG9wdGRhdGEtPnN1YnN0aXR1dGlvblRhYmxlOworICAgIGxbMF0gPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIGxbMV0gPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIGxbMl0gPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworICAgIGxbM10gPSAmKG9wdGRhdGEtPnN1YnN0aXR1dGlvblRhYmxlX2xlbmd0aCk7CisKKyAgICBneHZfc2V0X2xlbmd0aF9ieV91bG9uZ19vZmZzZXQoIG8sIGwsIGJ1ZmYsIDQsIHRhYmxlX3NpemUsIGd4dmFsaWQgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfZW50cnlfdmFsaWRhdGUoCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ciAgZ2x5cGhPZmZzZXRfcCwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgICAgICAgICAgICBneHZhbGlkICkKKyAgeworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBGVF9VU2hvcnQgIHNldE1hcms7CisgICAgRlRfVVNob3J0ICBkb250QWR2YW5jZTsKKyNlbmRpZgorICAgIEZUX1VTaG9ydCAgcmVzZXJ2ZWQ7CisgICAgRlRfU2hvcnQgICBtYXJrSW5kZXg7CisgICAgRlRfU2hvcnQgICBjdXJyZW50SW5kZXg7CisKKyAgICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J4X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhOworCisgICAgRlRfVU5VU0VEKCBzdGF0ZSApOworICAgIEZUX1VOVVNFRCggdGFibGUgKTsKKyAgICBGVF9VTlVTRUQoIGxpbWl0ICk7CisKKworI2lmZGVmIEdYVl9MT0FEX1RSQUNFX1ZBUlMKKyAgICBzZXRNYXJrICAgICAgPSAoRlRfVVNob3J0KSggKCBmbGFncyA+PiAxNSApICYgMSApOworICAgIGRvbnRBZHZhbmNlICA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE0ICkgJiAxICk7CisjZW5kaWYKKworICAgIHJlc2VydmVkID0gKEZUX1VTaG9ydCkoIGZsYWdzICYgMHgzRkZGICk7CisKKyAgICBtYXJrSW5kZXggICAgPSAoRlRfU2hvcnQpKCBnbHlwaE9mZnNldF9wLT51bCA+PiAxNiApOworICAgIGN1cnJlbnRJbmRleCA9IChGVF9TaG9ydCkoIGdseXBoT2Zmc2V0X3AtPnVsICAgICAgICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiIHNldE1hcms9JTAxZCBkb250QWR2YW5jZT0lMDFkXG4iLAorICAgICAgICAgICAgICAgIHNldE1hcmssIGRvbnRBZHZhbmNlICkpOworCisgICAgaWYgKCAwIDwgcmVzZXJ2ZWQgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICIgbm9uLXplcm8gYml0cyBmb3VuZCBpbiByZXNlcnZlZCByYW5nZVxuIiApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0RBVEEgKTsKKyAgICB9CisKKyAgICBHWFZfVFJBQ0UoKCAibWFya0luZGV4ID0gJWQsIGN1cnJlbnRJbmRleCA9ICVkXG4iLAorICAgICAgICAgICAgICAgIG1hcmtJbmRleCwgY3VycmVudEluZGV4ICkpOworCisgICAgaWYgKCBvcHRkYXRhLT5zdWJzdGl0dXRpb25UYWJsZV9udW1fbG9va3VwVGFibGVzIDwgbWFya0luZGV4ICsgMSApCisgICAgICBvcHRkYXRhLT5zdWJzdGl0dXRpb25UYWJsZV9udW1fbG9va3VwVGFibGVzID0KKyAgICAgICAgKEZUX1VTaG9ydCkoIG1hcmtJbmRleCArIDEgKTsKKworICAgIGlmICggb3B0ZGF0YS0+c3Vic3RpdHV0aW9uVGFibGVfbnVtX2xvb2t1cFRhYmxlcyA8IGN1cnJlbnRJbmRleCArIDEgKQorICAgICAgb3B0ZGF0YS0+c3Vic3RpdHV0aW9uVGFibGVfbnVtX2xvb2t1cFRhYmxlcyA9CisgICAgICAgIChGVF9VU2hvcnQpKCBjdXJyZW50SW5kZXggKyAxICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX0xvb2t1cFZhbHVlX3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIHZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICAgICAgICBneHZhbGlkICkKKyAgeworICAgIEZUX1VOVVNFRCggZ2x5cGggKTsgLyogZm9yIHRoZSBub24tZGVidWdnaW5nIGNhc2UgKi8KKworICAgIEdYVl9UUkFDRSgoICJtb3J4IHN1YnRhYmxlIHR5cGUxIHN1YnN0LjogJWQgLT4gJWRcbiIsIGdseXBoLCB2YWx1ZV9wLT51ICkpOworCisgICAgaWYgKCB2YWx1ZV9wLT51ID4gZ3h2YWxpZC0+ZmFjZS0+bnVtX2dseXBocyApCisgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworICB9CisKKworICBzdGF0aWMgR1hWX0xvb2t1cFZhbHVlRGVzYworICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9Mb29rdXBGbXQ0X3RyYW5zaXQoCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgcmVsYXRpdmVfZ2luZGV4LAorICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIGJhc2VfdmFsdWVfcCwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBsb29rdXB0YmxfbGltaXQsCisgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBwOworICAgIEZUX0J5dGVzICAgICAgICAgICAgIGxpbWl0OworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIG9mZnNldDsKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2YWx1ZTsKKworICAgIC8qIFhYWDogY2hlY2sgcmFuZ2U/ICovCisgICAgb2Zmc2V0ID0gKEZUX1VTaG9ydCkoIGJhc2VfdmFsdWVfcC0+dSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCAqIHNpemVvZiAoIEZUX1VTaG9ydCApICk7CisKKyAgICBwICAgICA9IGd4dmFsaWQtPmxvb2t1cHRibF9oZWFkICsgb2Zmc2V0OworICAgIGxpbWl0ID0gbG9va3VwdGJsX2xpbWl0OworCisgICAgR1hWX0xJTUlUX0NIRUNLICggMiApOworICAgIHZhbHVlLnUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgcmV0dXJuIHZhbHVlOworICB9CisKKworICAvKgorICAgKiBUT0RPOiBsZW5ndGggc2hvdWxkIGJlIGxpbWl0PworICAgKiovCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3N1YnN0aXR1dGlvblRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgIGk7CisKKyAgICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J4X3N1YnRhYmxlX3R5cGUxX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhOworCisKKyAgICAvKiBUT0RPOiBjYWxjdWxhdGUgb2Zmc2V0L2xlbmd0aCBmb3IgZWFjaCBsb29rdXBUYWJsZXMgKi8KKyAgICBneHZhbGlkLT5sb29rdXB2YWxfc2lnbiAgID0gR1hWX0xPT0tVUFZBTFVFX1VOU0lHTkVEOworICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9mdW5jICAgPSBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9Mb29rdXBWYWx1ZV92YWxpZGF0ZTsKKyAgICBneHZhbGlkLT5sb29rdXBmbXQ0X3RyYW5zID0gZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfTG9va3VwRm10NF90cmFuc2l0OworCisgICAgZm9yICggaSA9IDA7IGkgPCBvcHRkYXRhLT5zdWJzdGl0dXRpb25UYWJsZV9udW1fbG9va3VwVGFibGVzOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1VMb25nICBvZmZzZXQ7CisKKworICAgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgICBvZmZzZXQgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgIGd4dl9Mb29rdXBUYWJsZV92YWxpZGF0ZSggdGFibGUgKyBvZmZzZXQsIGxpbWl0LCBneHZhbGlkICk7CisgICAgfQorCisgICAgLyogVE9ETzogb3ZlcmxhcHBpbmcgb2YgbG9va3VwVGFibGVzIGluIHN1YnN0aXR1dGlvblRhYmxlICovCisgIH0KKworCisgIC8qCisgICAqIHN1YnRhYmxlIGZvciBDb250ZXh0dWFsIGdseXBoIHN1YnN0aXR1dGlvbiBpcyBhIG1vZGlmaWVkIFN0YXRlVGFibGUuCisgICAqIEluIGFkZGl0aW9uIHRvIGNsYXNzVGFibGUsIHN0YXRlQXJyYXksIGVudHJ5VGFibGUsIHRoZSBmaWVsZAorICAgKiBgc3Vic3RpdHV0aW9uVGFibGUnIGlzIGFkZGVkLgorICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKyAgICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMV9TdGF0ZU9wdFJlYyAgc3RfcmVjOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggIm1vcnggY2hhaW4gc3VidGFibGUgdHlwZTEgKENvbnRleHR1YWwgR2x5cGggU3Vic3QpIiApOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBHWFZfTU9SWF9TVUJUQUJMRV9UWVBFMV9IRUFERVJfU0laRSApOworCisgICAgc3RfcmVjLnN1YnN0aXR1dGlvblRhYmxlX251bV9sb29rdXBUYWJsZXMgPSAwOworCisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YSA9CisgICAgICAmc3RfcmVjOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm9wdGRhdGFfbG9hZF9mdW5jID0KKyAgICAgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUxX3N1YnN0aXR1dGlvblRhYmxlX2xvYWQ7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYyA9CisgICAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9zdWJ0YWJsZV9zZXR1cDsKKyAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgPQorICAgICAgR1hWX0dMWVBIT0ZGU0VUX1VMT05HOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMgPQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTFfZW50cnlfdmFsaWRhdGU7CisKKyAgICBneHZfWFN0YXRlVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMV9zdWJzdGl0dXRpb25UYWJsZV92YWxpZGF0ZSgKKyAgICAgIHRhYmxlICsgc3RfcmVjLnN1YnN0aXR1dGlvblRhYmxlLAorICAgICAgdGFibGUgKyBzdF9yZWMuc3Vic3RpdHV0aW9uVGFibGUgKyBzdF9yZWMuc3Vic3RpdHV0aW9uVGFibGVfbGVuZ3RoLAorICAgICAgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4Mi5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcngyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlMzA1NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4Mi5jCkBAIC0wLDAgKzEsMzMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBneHZtb3J4Mi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGJvZHkgZm9yIHR5cGUyIChMaWdhdHVyZSBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dm1vcnguaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vcngKKworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY18KKyAgeworICAgIEZUX1VMb25nICBsaWdBY3Rpb25UYWJsZTsKKyAgICBGVF9VTG9uZyAgY29tcG9uZW50VGFibGU7CisgICAgRlRfVUxvbmcgIGxpZ2F0dXJlVGFibGU7CisgICAgRlRfVUxvbmcgIGxpZ0FjdGlvblRhYmxlX2xlbmd0aDsKKyAgICBGVF9VTG9uZyAgY29tcG9uZW50VGFibGVfbGVuZ3RoOworICAgIEZUX1VMb25nICBsaWdhdHVyZVRhYmxlX2xlbmd0aDsKKworICB9ICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlYywKKyAgICAqR1hWX21vcnhfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhOworCisKKyNkZWZpbmUgR1hWX01PUlhfU1VCVEFCTEVfVFlQRTJfSEVBREVSX1NJWkUgXAorICAgICAgICAgICggR1hWX1hTVEFURVRBQkxFX0hFQURFUl9TSVpFICsgNCArIDQgKyA0ICkKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX29wdHRhYmxlX2xvYWQoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YTsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgNCArIDQgKTsKKyAgICBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBvcHRkYXRhLT5jb21wb25lbnRUYWJsZSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBvcHRkYXRhLT5saWdhdHVyZVRhYmxlICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIEdYVl9UUkFDRSgoICJvZmZzZXQgdG8gbGlnQWN0aW9uVGFibGU9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgIG9wdGRhdGEtPmxpZ0FjdGlvblRhYmxlICkpOworICAgIEdYVl9UUkFDRSgoICJvZmZzZXQgdG8gY29tcG9uZW50VGFibGU9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgIG9wdGRhdGEtPmNvbXBvbmVudFRhYmxlICkpOworICAgIEdYVl9UUkFDRSgoICJvZmZzZXQgdG8gbGlnYXR1cmVUYWJsZT0weCUwOHhcbiIsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZSApKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfc3VidGFibGVfc2V0dXAoIEZUX1VMb25nICAgICAgIHRhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBjbGFzc1RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgc3RhdGVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGVudHJ5VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBjbGFzc1RhYmxlX2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgc3RhdGVBcnJheV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGVudHJ5VGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX1VMb25nICAgb1s2XTsKKyAgICBGVF9VTG9uZyogIGxbNl07CisgICAgRlRfVUxvbmcgICBidWZmWzddOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YTsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJzdWJ0YWJsZSBib3VuZGFyaWVzIHNldHVwIiApOworCisgICAgb1swXSA9IGNsYXNzVGFibGU7CisgICAgb1sxXSA9IHN0YXRlQXJyYXk7CisgICAgb1syXSA9IGVudHJ5VGFibGU7CisgICAgb1szXSA9IG9wdGRhdGEtPmxpZ0FjdGlvblRhYmxlOworICAgIG9bNF0gPSBvcHRkYXRhLT5jb21wb25lbnRUYWJsZTsKKyAgICBvWzVdID0gb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZTsKKyAgICBsWzBdID0gY2xhc3NUYWJsZV9sZW5ndGhfcDsKKyAgICBsWzFdID0gc3RhdGVBcnJheV9sZW5ndGhfcDsKKyAgICBsWzJdID0gZW50cnlUYWJsZV9sZW5ndGhfcDsKKyAgICBsWzNdID0gJihvcHRkYXRhLT5saWdBY3Rpb25UYWJsZV9sZW5ndGgpOworICAgIGxbNF0gPSAmKG9wdGRhdGEtPmNvbXBvbmVudFRhYmxlX2xlbmd0aCk7CisgICAgbFs1XSA9ICYob3B0ZGF0YS0+bGlnYXR1cmVUYWJsZV9sZW5ndGgpOworCisgICAgZ3h2X3NldF9sZW5ndGhfYnlfdWxvbmdfb2Zmc2V0KCBvLCBsLCBidWZmLCA2LCB0YWJsZV9zaXplLCBneHZhbGlkICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiY2xhc3NUYWJsZTogb2Zmc2V0PTB4JTA4eCBsZW5ndGg9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgIGNsYXNzVGFibGUsICpjbGFzc1RhYmxlX2xlbmd0aF9wICkpOworICAgIEdYVl9UUkFDRSgoICJzdGF0ZUFycmF5OiBvZmZzZXQ9MHglMDh4IGxlbmd0aD0weCUwOHhcbiIsCisgICAgICAgICAgICAgICAgc3RhdGVBcnJheSwgKnN0YXRlQXJyYXlfbGVuZ3RoX3AgKSk7CisgICAgR1hWX1RSQUNFKCggImVudHJ5VGFibGU6IG9mZnNldD0weCUwOHggbGVuZ3RoPTB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeVRhYmxlLCAqZW50cnlUYWJsZV9sZW5ndGhfcCApKTsKKyAgICBHWFZfVFJBQ0UoKCAibGlnQWN0aW9uVGFibGU6IG9mZnNldD0weCUwOHggbGVuZ3RoPTB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZSwKKyAgICAgICAgICAgICAgICBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZV9sZW5ndGggKSk7CisgICAgR1hWX1RSQUNFKCggImNvbXBvbmVudFRhYmxlOiBvZmZzZXQ9MHglMDh4IGxlbmd0aD0weCUwOHhcbiIsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+Y29tcG9uZW50VGFibGUsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+Y29tcG9uZW50VGFibGVfbGVuZ3RoICkpOworICAgIEdYVl9UUkFDRSgoICJsaWdhdHVyZVRhYmxlOiAgb2Zmc2V0PTB4JTA4eCBsZW5ndGg9MHglMDh4XG4iLAorICAgICAgICAgICAgICAgIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUsCisgICAgICAgICAgICAgICAgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZV9sZW5ndGggKSk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKyNkZWZpbmUgR1hWX01PUlhfTElHQUNUSU9OX0VOVFJZX1NJWkUgIDQKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX2xpZ0FjdGlvbkluZGV4X3ZhbGlkYXRlKAorICAgIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgIEZUX1VTaG9ydCAgICAgIGxpZ0FjdGlvbkluZGV4LAorICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgLyogYWNjZXNzIGxpZ0FjdGlvblRhYmxlICovCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWNEYXRhIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J4X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhOworCisgICAgRlRfQnl0ZXMgbGF0X2Jhc2UgID0gdGFibGUgKyBvcHRkYXRhLT5saWdBY3Rpb25UYWJsZTsKKyAgICBGVF9CeXRlcyBwICAgICAgICAgPSBsYXRfYmFzZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlnQWN0aW9uSW5kZXggKiBHWFZfTU9SWF9MSUdBQ1RJT05fRU5UUllfU0laRTsKKyAgICBGVF9CeXRlcyBsYXRfbGltaXQgPSBsYXRfYmFzZSArIG9wdGRhdGEtPmxpZ0FjdGlvblRhYmxlOworCisKKyAgICBpZiAoIHAgPCBsYXRfYmFzZSApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggInAgPCBsYXRfYmFzZSAoJWQgYnl0ZSByZXdpbmQpXG4iLCBsYXRfYmFzZSAtIHAgKSk7CisgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKyAgICB9CisgICAgZWxzZSBpZiAoIGxhdF9saW1pdCA8IHAgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoICJsYXRfbGltaXQgPCBwICglZCBieXRlIG92ZXJydW4pXG4iLCBwIC0gbGF0X2xpbWl0ICkpOworICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7CisgICAgfQorCisgICAgeworICAgICAgLyogdmFsaWRhdGUgZW50cnkgaW4gbGlnQWN0aW9uVGFibGUgKi8KKyAgICAgIEZUX1VMb25nICAgbGlnX2FjdGlvbjsKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgICAgRlRfVVNob3J0ICBsYXN0OworICAgICAgRlRfVVNob3J0ICBzdG9yZTsKKyNlbmRpZgorICAgICAgRlRfVUxvbmcgICBvZmZzZXQ7CisgICAgICBGVF9Mb25nICAgIGdpZF9saW1pdDsKKworCisgICAgICBsaWdfYWN0aW9uID0gRlRfTkVYVF9VTE9ORyggcCApOworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgICBsYXN0ICAgICAgID0gKEZUX1VTaG9ydCkoICggbGlnX2FjdGlvbiA+PiAzMSApICYgMSApOworICAgICAgc3RvcmUgICAgICA9IChGVF9VU2hvcnQpKCAoIGxpZ19hY3Rpb24gPj4gMzAgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgICBvZmZzZXQgPSBsaWdfYWN0aW9uICYgMHgzRkZGRkZGRlVMOworCisgICAgICAvKiB0aGlzIG9mZnNldCBpcyAzMC1iaXQgc2lnbmVkIHZhbHVlIHRvIGFkZCB0byBHSUQgKi8KKyAgICAgIC8qIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsb2NhdGlvbiBvZmZzZXQgaW4gbW9ydCAqLworICAgICAgaWYgKCAoIG9mZnNldCAmIDB4M0ZGRjAwMDBVTCApID09IDB4M0ZGRjAwMDBVTCApCisgICAgICB7IC8qIG5lZ2F0aXZlIG9mZnNldCAqLworICAgICAgICBnaWRfbGltaXQgPSBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzIC0KKyAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKCBvZmZzZXQgJiAweDAwMDBGRkZGVUwgKTsKKyAgICAgICAgaWYgKCBnaWRfbGltaXQgPiAwICkKKyAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1hWX1RSQUNFKCggImxpZ2F0dXJlIGFjdGlvbiB0YWJsZSBpbmNsdWRlcyIKKyAgICAgICAgICAgICAgICAgICAgIiB0b28gbmVnYXRpdmUgb2Zmc2V0IG1vdmluZyBhbGwgR0lEIgorICAgICAgICAgICAgICAgICAgICAiIGJlbG93IGRlZmluZWQgcmFuZ2U6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICYgMHhGRkZGVSApKTsKKyAgICAgICAgR1hWX1NFVF9FUlJfSUZfUEFSQU5PSUQoIEZUX0lOVkFMSURfT0ZGU0VUICk7CisgICAgICB9CisgICAgICBlbHNlIGlmICggKCBvZmZzZXQgJiAweDNGRkYwMDAwVUwgKSA9PSAweDAwMDAwMDAwVUwgKQorICAgICAgeyAvKiBwb3NpdGl2ZSBvZmZzZXQgKi8KKyAgICAgICAgaWYgKCAoRlRfTG9uZylvZmZzZXQgPCBneHZhbGlkLT5mYWNlLT5udW1fZ2x5cGhzICkKKyAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1hWX1RSQUNFKCggImxpZ2F0dXJlIGFjdGlvbiB0YWJsZSBpbmNsdWRlcyIKKyAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2Ugb2Zmc2V0IG1vdmluZyBhbGwgR0lEIgorICAgICAgICAgICAgICAgICAgICAiIG92ZXIgZGVmaW5lZCByYW5nZTogMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgJiAweEZGRkZVICkpOworICAgICAgICBHWFZfU0VUX0VSUl9JRl9QQVJBTk9JRCggRlRfSU5WQUxJRF9PRkZTRVQgKTsKKyAgICAgIH0KKworICAgICAgR1hWX1RSQUNFKCggImxpZ2F0dXJlIGFjdGlvbiB0YWJsZSBpbmNsdWRlcyIKKyAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBvZmZzZXQgdG8gYWRkIHRvIDE2LWJpdCBHSUQ6IgorICAgICAgICAgICAgICAgICAgIiAweCUwOHhcbiIsIG9mZnNldCApKTsKKyAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX09GRlNFVCApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfZW50cnlfdmFsaWRhdGUoCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ciAgZ2x5cGhPZmZzZXRfcCwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgICAgICAgICAgICBneHZhbGlkICkKKyAgeworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfVVNob3J0ICBzZXRDb21wb25lbnQ7CisgICAgRlRfVVNob3J0ICBkb250QWR2YW5jZTsKKyAgICBGVF9VU2hvcnQgIHBlcmZvcm1BY3Rpb247CisjZW5kaWYKKyAgICBGVF9VU2hvcnQgIHJlc2VydmVkOworICAgIEZUX1VTaG9ydCAgbGlnQWN0aW9uSW5kZXg7CisKKyAgICBGVF9VTlVTRUQoIHN0YXRlICk7CisgICAgRlRfVU5VU0VEKCBsaW1pdCApOworCisKKyNpZmRlZiBHWFZfTE9BRF9VTlVTRURfVkFSUworICAgIHNldENvbXBvbmVudCAgID0gKEZUX1VTaG9ydCkoICggZmxhZ3MgPj4gMTUgKSAmIDEgKTsKKyAgICBkb250QWR2YW5jZSAgICA9IChGVF9VU2hvcnQpKCAoIGZsYWdzID4+IDE0ICkgJiAxICk7CisgICAgcGVyZm9ybUFjdGlvbiAgPSAoRlRfVVNob3J0KSggKCBmbGFncyA+PiAxMyApICYgMSApOworI2VuZGlmCisKKyAgICByZXNlcnZlZCAgICAgICA9IChGVF9VU2hvcnQpKCBmbGFncyAmIDB4MUZGRiApOworICAgIGxpZ0FjdGlvbkluZGV4ID0gZ2x5cGhPZmZzZXRfcC0+dTsKKworICAgIGlmICggcmVzZXJ2ZWQgPiAwICkKKyAgICAgIEdYVl9UUkFDRSgoICIgIHJlc2VydmVkIDE0Yml0IGlzIG5vbi16ZXJvXG4iICkpOworCisgICAgaWYgKCAwIDwgbGlnQWN0aW9uSW5kZXggKQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfbGlnQWN0aW9uSW5kZXhfdmFsaWRhdGUoCisgICAgICAgIHRhYmxlLCBsaWdBY3Rpb25JbmRleCwgZ3h2YWxpZCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl9saWdhdHVyZVRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlMl9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J4X3N1YnRhYmxlX3R5cGUyX1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhOworCisgICAgRlRfQnl0ZXMgcCAgICAgPSB0YWJsZSArIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGU7CisgICAgRlRfQnl0ZXMgbGltaXQgPSB0YWJsZSArIG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3B0ZGF0YS0+bGlnYXR1cmVUYWJsZV9sZW5ndGg7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAibW9yeCBjaGFpbiBzdWJ0YWJsZSB0eXBlMiAtIHN1YnN0aXR1dGlvblRhYmxlIiApOworCisgICAgaWYgKCAwICE9IG9wdGRhdGEtPmxpZ2F0dXJlVGFibGUgKQorICAgIHsKKyAgICAgIC8qIEFwcGxlIGRvZXMgbm90IGdpdmUgc3BlY2lmaWNhdGlvbiBvZiBsaWdhdHVyZVRhYmxlIGZvcm1hdCAqLworICAgICAgd2hpbGUgKCBwIDwgbGltaXQgKQorICAgICAgeworICAgICAgICBGVF9VU2hvcnQgIGxpZ19naWQ7CisKKworICAgICAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgICAgbGlnX2dpZCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIGlmICggbGlnX2dpZCA8IGd4dmFsaWQtPmZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICAgIEdYVl9TRVRfRVJSX0lGX1BBUkFOT0lEKCBGVF9JTlZBTElEX0dMWVBIX0lEICk7CisgICAgICB9CisgICAgfQorCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTJfU3RhdGVPcHRSZWMgIGxpZ19yZWM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAibW9yeCBjaGFpbiBzdWJ0YWJsZSB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggR1hWX01PUlhfU1VCVEFCTEVfVFlQRTJfSEVBREVSX1NJWkUgKTsKKworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm9wdGRhdGEgPQorICAgICAgJmxpZ19yZWM7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMgPQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfb3B0dGFibGVfbG9hZDsKKyAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5zdWJ0YWJsZV9zZXR1cF9mdW5jID0KKyAgICAgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGUyX3N1YnRhYmxlX3NldHVwOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLmVudHJ5X2dseXBob2Zmc2V0X2ZtdCA9CisgICAgICBHWFZfR0xZUEhPRkZTRVRfVVNIT1JUOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMgPQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTJfZW50cnlfdmFsaWRhdGU7CisKKyAgICBneHZfWFN0YXRlVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyNpZiAwCisgICAgcCArPSBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGg7CisjZW5kaWYKKyAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlMl9saWdhdHVyZVRhYmxlX3ZhbGlkYXRlKCB0YWJsZSwgZ3h2YWxpZCApOworCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4NC5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm1vcng0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNjc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4NC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm1vcng0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgYm9keSBmb3IgIm1vcngiIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLworLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KKy8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAiZ3h2bW9yeC5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9yeAorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTRfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEdYVl9OQU1FX0VOVEVSKCAibW9yeCBjaGFpbiBzdWJ0YWJsZSB0eXBlNCAiCisgICAgICAgICAgICAgICAgICAgICIoTm9uLUNvbnRleHR1YWwgR2x5cGggU3Vic3RpdHV0aW9uKSIgKTsKKworICAgIGd4dl9tb3J0X3N1YnRhYmxlX3R5cGU0X3ZhbGlkYXRlKCB0YWJsZSwgbGltaXQsIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzg3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYwpAQCAtMCwwICsxLDIyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2bW9yeDUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBib2R5IGZvciB0eXBlNSAoQ29udGV4dHVhbCBHbHlwaCBJbnNlcnRpb24pIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZtb3J4LmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CisKKworICAvKgorICAgKiBgbW9yeCcgc3VidGFibGUgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKQorICAgKiBoYXMgZm9ybWF0IG9mIGEgU3RhdGVUYWJsZSB3aXRoIGluc2VydGlvbi1nbHlwaC1saXN0CisgICAqIHdpdGhvdXQgbmFtZS4gIEhvd2V2ZXIsIHRoZSAzMmJpdCBvZmZzZXQgZnJvbSB0aGUgaGVhZAorICAgKiBvZiBzdWJ0YWJsZSB0byB0aGUgaS1nLWwgaXMgZ2l2ZW4gYWZ0ZXIgYGVudHJ5VGFibGUnLAorICAgKiB3aXRob3V0IHZhcmlhYmxlIG5hbWUgc3BlY2lmaWNhdGlvbiAodGhlIGV4aXN0ZW5jZSBvZgorICAgKiB0aGlzIG9mZnNldCB0byB0aGUgdGFibGUgaXMgZGlmZmVyZW50IGZyb20gbW9ydCB0eXBlNSkuCisgICAqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9tb3J4X3N1YnRhYmxlX3R5cGU1X1N0YXRlT3B0UmVjXworICB7CisgICAgRlRfVUxvbmcgIGluc2VydGlvbkdseXBoTGlzdDsKKyAgICBGVF9VTG9uZyAgaW5zZXJ0aW9uR2x5cGhMaXN0X2xlbmd0aDsKKworICB9ICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlYywKKyAgICAqR1hWX21vcnhfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWNEYXRhOworCisKKyNkZWZpbmUgR1hWX01PUlhfU1VCVEFCTEVfVFlQRTVfSEVBREVSX1NJWkUgXAorICAgICAgICAgICggR1hWX1NUQVRFVEFCTEVfSEVBREVSX1NJWkUgKyA0ICkKKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X2luc2VydGlvbkdseXBoTGlzdF9sb2FkKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWNEYXRhICBvcHRkYXRhID0KKyAgICAgIChHWFZfbW9yeF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlY0RhdGEpZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YTsKKworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgb3B0ZGF0YS0+aW5zZXJ0aW9uR2x5cGhMaXN0ID0gRlRfTkVYVF9VTE9ORyggcCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9zdWJ0YWJsZV9zZXR1cCggRlRfVUxvbmcgICAgICAgdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgIGNsYXNzVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICBzdGF0ZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgZW50cnlUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIGNsYXNzVGFibGVfbGVuZ3RoX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICBzdGF0ZUFycmF5X2xlbmd0aF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgZW50cnlUYWJsZV9sZW5ndGhfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfVUxvbmcgICBvWzRdOworICAgIEZUX1VMb25nKiAgbFs0XTsKKyAgICBGVF9VTG9uZyAgIGJ1ZmZbNV07CisKKyAgICBHWFZfbW9yeF9zdWJ0YWJsZV90eXBlNV9TdGF0ZU9wdFJlY0RhdGEgIG9wdGRhdGEgPQorICAgICAgKEdYVl9tb3J4X3N1YnRhYmxlX3R5cGU1X1N0YXRlT3B0UmVjRGF0YSlneHZhbGlkLT54c3RhdGV0YWJsZS5vcHRkYXRhOworCisKKyAgICBvWzBdID0gY2xhc3NUYWJsZTsKKyAgICBvWzFdID0gc3RhdGVBcnJheTsKKyAgICBvWzJdID0gZW50cnlUYWJsZTsKKyAgICBvWzNdID0gb3B0ZGF0YS0+aW5zZXJ0aW9uR2x5cGhMaXN0OworICAgIGxbMF0gPSBjbGFzc1RhYmxlX2xlbmd0aF9wOworICAgIGxbMV0gPSBzdGF0ZUFycmF5X2xlbmd0aF9wOworICAgIGxbMl0gPSBlbnRyeVRhYmxlX2xlbmd0aF9wOworICAgIGxbM10gPSAmKG9wdGRhdGEtPmluc2VydGlvbkdseXBoTGlzdF9sZW5ndGgpOworCisgICAgZ3h2X3NldF9sZW5ndGhfYnlfdWxvbmdfb2Zmc2V0KCBvLCBsLCBidWZmLCA0LCB0YWJsZV9zaXplLCBneHZhbGlkICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X0luc2VydExpc3RfdmFsaWRhdGUoIEZUX1VTaG9ydCAgICAgIHRhYmxlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICBneHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGUgKyB0YWJsZV9pbmRleCAqIDI7CisKKworI2lmbmRlZiBHWFZfTE9BRF9UUkFDRV9WQVJTCisgICAgR1hWX0xJTUlUX0NIRUNLKCBjb3VudCAqIDIgKTsKKyNlbHNlCisgICAgd2hpbGUgKCBwIDwgdGFibGUgKyBjb3VudCAqIDIgKyB0YWJsZV9pbmRleCAqIDIgKQorICAgIHsKKyAgICAgIEZUX1VTaG9ydCAgaW5zZXJ0X2dseXBoSUQ7CisKKworICAgICAgR1hWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgICBpbnNlcnRfZ2x5cGhJRCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBHWFZfVFJBQ0UoKCAiIDB4JTA0eCIsIGluc2VydF9nbHlwaElEICkpOworICAgIH0KKworICAgIEdYVl9UUkFDRSgoICJcbiIgKSk7CisjZW5kaWYKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfZW50cnlfdmFsaWRhdGUoCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwKKyAgICBGVF9VU2hvcnQgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIEdYVl9TdGF0ZVRhYmxlX0dseXBoT2Zmc2V0Q1B0ciAgZ2x5cGhPZmZzZXRfcCwKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgIEZUX0J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsCisgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgICAgICAgICAgICBneHZhbGlkICkKKyAgeworI2lmZGVmIEdYVl9MT0FEX1VOVVNFRF9WQVJTCisgICAgRlRfQm9vbCAgICBzZXRNYXJrOworICAgIEZUX0Jvb2wgICAgZG9udEFkdmFuY2U7CisgICAgRlRfQm9vbCAgICBjdXJyZW50SXNLYXNoaWRhTGlrZTsKKyAgICBGVF9Cb29sICAgIG1hcmtlZElzS2FzaGlkYUxpa2U7CisgICAgRlRfQm9vbCAgICBjdXJyZW50SW5zZXJ0QmVmb3JlOworICAgIEZUX0Jvb2wgICAgbWFya2VkSW5zZXJ0QmVmb3JlOworI2VuZGlmCisgICAgRlRfQnl0ZSAgICBjdXJyZW50SW5zZXJ0Q291bnQ7CisgICAgRlRfQnl0ZSAgICBtYXJrZWRJbnNlcnRDb3VudDsKKyAgICBGVF9CeXRlICAgIGN1cnJlbnRJbnNlcnRMaXN0OworICAgIEZUX1VTaG9ydCAgbWFya2VkSW5zZXJ0TGlzdDsKKworICAgIEZUX1VOVVNFRCggc3RhdGUgKTsKKworCisjaWZkZWYgR1hWX0xPQURfVU5VU0VEX1ZBUlMKKyAgICBzZXRNYXJrICAgICAgICAgICAgICA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTUgKSAmIDEgKTsKKyAgICBkb250QWR2YW5jZSAgICAgICAgICA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTQgKSAmIDEgKTsKKyAgICBjdXJyZW50SXNLYXNoaWRhTGlrZSA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTMgKSAmIDEgKTsKKyAgICBtYXJrZWRJc0thc2hpZGFMaWtlICA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTIgKSAmIDEgKTsKKyAgICBjdXJyZW50SW5zZXJ0QmVmb3JlICA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTEgKSAmIDEgKTsKKyAgICBtYXJrZWRJbnNlcnRCZWZvcmUgICA9IEZUX0JPT0woICggZmxhZ3MgPj4gMTAgKSAmIDEgKTsKKyNlbmRpZgorCisgICAgY3VycmVudEluc2VydENvdW50ID0gKEZUX0J5dGUpKCAoIGZsYWdzID4+IDUgKSAmIDB4MUYgICApOworICAgIG1hcmtlZEluc2VydENvdW50ICA9IChGVF9CeXRlKSggICBmbGFncyAgICAgICAgJiAweDAwMUYgKTsKKworICAgIGN1cnJlbnRJbnNlcnRMaXN0ID0gKEZUX0J5dGUpICAoIGdseXBoT2Zmc2V0X3AtPnVsID4+IDE2ICk7CisgICAgbWFya2VkSW5zZXJ0TGlzdCAgPSAoRlRfVVNob3J0KSggZ2x5cGhPZmZzZXRfcC0+dWwgICAgICAgKTsKKworICAgIGlmICggY3VycmVudEluc2VydExpc3QgJiYgMCAhPSBjdXJyZW50SW5zZXJ0Q291bnQgKQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfSW5zZXJ0TGlzdF92YWxpZGF0ZSggY3VycmVudEluc2VydExpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5zZXJ0Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisKKyAgICBpZiAoIG1hcmtlZEluc2VydExpc3QgJiYgMCAhPSBtYXJrZWRJbnNlcnRDb3VudCApCisgICAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9JbnNlcnRMaXN0X3ZhbGlkYXRlKCBtYXJrZWRJbnNlcnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VkSW5zZXJ0Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneHZhbGlkICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGd4dl9tb3J4X3N1YnRhYmxlX3R5cGU1X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWMgICAgICBldF9yZWM7CisgICAgR1hWX21vcnhfc3VidGFibGVfdHlwZTVfU3RhdGVPcHRSZWNEYXRhICBldCA9ICZldF9yZWM7CisKKworICAgIEdYVl9OQU1FX0VOVEVSKCAibW9yeCBjaGFpbiBzdWJ0YWJsZSB0eXBlNSAoR2x5cGggSW5zZXJ0aW9uKSIgKTsKKworICAgIEdYVl9MSU1JVF9DSEVDSyggR1hWX01PUlhfU1VCVEFCTEVfVFlQRTVfSEVBREVSX1NJWkUgKTsKKworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLm9wdGRhdGEgPQorICAgICAgZXQ7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUub3B0ZGF0YV9sb2FkX2Z1bmMgPQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfaW5zZXJ0aW9uR2x5cGhMaXN0X2xvYWQ7CisgICAgZ3h2YWxpZC0+eHN0YXRldGFibGUuc3VidGFibGVfc2V0dXBfZnVuYyA9CisgICAgICBneHZfbW9yeF9zdWJ0YWJsZV90eXBlNV9zdWJ0YWJsZV9zZXR1cDsKKyAgICBneHZhbGlkLT54c3RhdGV0YWJsZS5lbnRyeV9nbHlwaG9mZnNldF9mbXQgPQorICAgICAgR1hWX0dMWVBIT0ZGU0VUX1VMT05HOworICAgIGd4dmFsaWQtPnhzdGF0ZXRhYmxlLmVudHJ5X3ZhbGlkYXRlX2Z1bmMgPQorICAgICAgZ3h2X21vcnhfc3VidGFibGVfdHlwZTVfZW50cnlfdmFsaWRhdGU7CisKKyAgICBneHZfWFN0YXRlVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgICBHWFZfRVhJVDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dm9wYmQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZvcGJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkNTE2MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9neHZvcGJkLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGd4dm9wYmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZUdYL0FBVCBvcGJkIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCisvKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLworLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJneHZhbGlkLmgiCisjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm9wYmQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBEYXRhIGFuZCBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBHWFZfb3BiZF9EYXRhUmVjXworICB7CisgICAgRlRfVVNob3J0ICBmb3JtYXQ7CisgICAgRlRfVVNob3J0ICB2YWx1ZU9mZnNldF9taW47CisKKyAgfSBHWFZfb3BiZF9EYXRhUmVjLCAqR1hWX29wYmRfRGF0YTsKKworCisjZGVmaW5lIEdYVl9PUEJEX0RBVEEoIEZJRUxEICkgIEdYVl9UQUJMRV9EQVRBKCBvcGJkLCBGSUVMRCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBneHZfb3BiZF9Mb29rdXBWYWx1ZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgICAgICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICB2YWx1ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICAvKiBvZmZzZXQgaW4gTG9va3VwVGFibGUgaXMgbWVhc3VyZWQgZnJvbSB0aGUgaGVhZCBvZiBvcGJkIHRhYmxlICovCisgICAgRlRfQnl0ZXMgICBwICAgICA9IGd4dmFsaWQtPnJvb3QtPmJhc2UgKyB2YWx1ZV9wLT51OworICAgIEZUX0J5dGVzICAgbGltaXQgPSBneHZhbGlkLT5yb290LT5saW1pdDsKKyAgICBGVF9TaG9ydCAgIGRlbHRhX3ZhbHVlOworICAgIGludCAgICAgICAgaTsKKworCisgICAgaWYgKCB2YWx1ZV9wLT51IDwgR1hWX09QQkRfREFUQSggdmFsdWVPZmZzZXRfbWluICkgKQorICAgICAgR1hWX09QQkRfREFUQSggdmFsdWVPZmZzZXRfbWluICkgPSB2YWx1ZV9wLT51OworCisgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgIHsKKyAgICAgIEdYVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgZGVsdGFfdmFsdWUgPSBGVF9ORVhUX1NIT1JUKCBwICk7CisKKyAgICAgIGlmICggR1hWX09QQkRfREFUQSggZm9ybWF0ICkgKSAgICAvKiBmb3JtYXQgMSwgdmFsdWUgaXMgY3RybCBwdC4gKi8KKyAgICAgIHsKKyAgICAgICAgaWYgKCBkZWx0YV92YWx1ZSA9PSAtMSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZ3h2X2N0bFBvaW50X3ZhbGlkYXRlKCBnbHlwaCwgKEZUX1VTaG9ydClkZWx0YV92YWx1ZSwgZ3h2YWxpZCApOworICAgICAgfQorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcm1hdCAwLCB2YWx1ZSBpcyBkaXN0YW5jZSAqLworICAgICAgICBjb250aW51ZTsKKyAgICB9CisgIH0KKworCisgIC8qCisgICAgb3BiZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKz09PT09PT09PT09PT09PSsgICAgICAgICB8CisgICAgfCBsb29rdXAgaGVhZGVyIHwgICAgICAgICB8CisgICAgKz09PT09PT09PT09PT09PSsgICAgICAgICB8CisgICAgfCBCaW5TcmNoSGVhZGVyIHwgICAgICAgICB8CisgICAgKz09PT09PT09PT09PT09PSsgICAgICAgICB8CisgICAgfCBsYXN0R2x5cGhbMF0gIHwgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICB8CisgICAgfCBmaXJzdEdseXBoWzBdIHwgICAgICAgICB8ICBoZWFkIG9mIG9wYmQgc2ZudCB0YWJsZQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBvZmZzZXRbMF0gICAgIHwgICAgLT4gICB8ICAgICAgICAgIG9mZnNldCAgICAgICAgICAgIFtieXRlXQorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBsYXN0R2x5cGhbMV0gIHwgICAgICAgICB8IChnbHlwaElEIC0gZmlyc3RHbHlwaCkgKiA0ICogc2l6ZW9mKEZUX1Nob3J0KSBbYnl0ZV0KKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8IGZpcnN0R2x5cGhbMV0gfCAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgIHwKKyAgICB8IG9mZnNldFsxXSAgICAgfCAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICA0OGJpdCB2YWx1ZSBhcnJheSAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09KyAgICAgICAgIHwKKyAgICB8ICAgICB2YWx1ZSAgICAgfCA8LS0tLS0tLSsKKyAgICB8ICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKworICAgIC4uLi4gKi8KKworICBzdGF0aWMgR1hWX0xvb2t1cFZhbHVlRGVzYworICBneHZfb3BiZF9Mb29rdXBGbXQ0X3RyYW5zaXQoIEZUX1VTaG9ydCAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfTG9va3VwVmFsdWVDUHRyICBiYXNlX3ZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgICAgICAgbG9va3VwdGJsX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgICAgICAgIGd4dmFsaWQgKQorICB7CisgICAgR1hWX0xvb2t1cFZhbHVlRGVzYyAgdmFsdWU7CisKKyAgICBGVF9VTlVTRUQoIGxvb2t1cHRibF9saW1pdCApOworICAgIEZUX1VOVVNFRCggZ3h2YWxpZCApOworCisgICAgLyogWFhYOiBjaGVjayByYW5nZT8gKi8KKyAgICB2YWx1ZS51ID0gKEZUX1VTaG9ydCkoIGJhc2VfdmFsdWVfcC0+dSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZV9naW5kZXggKiA0ICogc2l6ZW9mICggRlRfU2hvcnQgKSApOworCisgICAgcmV0dXJuIHZhbHVlOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgb3BiZCBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfb3BiZF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBHWFZfVmFsaWRhdG9yUmVjICBneHZhbGlkcmVjOworICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgPSAmZ3h2YWxpZHJlYzsKKyAgICBHWFZfb3BiZF9EYXRhUmVjICBvcGJkcmVjOworICAgIEdYVl9vcGJkX0RhdGEgICAgIG9wYmQgID0gJm9wYmRyZWM7CisgICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgICAgICAgICBsaW1pdCA9IDA7CisKKyAgICBGVF9VTG9uZyAgdmVyc2lvbjsKKworCisgICAgZ3h2YWxpZC0+cm9vdCAgICAgICA9IGZ0dmFsaWQ7CisgICAgZ3h2YWxpZC0+dGFibGVfZGF0YSA9IG9wYmQ7CisgICAgZ3h2YWxpZC0+ZmFjZSAgICAgICA9IGZhY2U7CisKKyAgICBGVF9UUkFDRTMoKCAidmFsaWRhdGluZyBgb3BiZCcgdGFibGVcbiIgKSk7CisgICAgR1hWX0lOSVQ7CisgICAgR1hWX09QQkRfREFUQSggdmFsdWVPZmZzZXRfbWluICkgPSAweEZGRkZVOworCisKKyAgICBHWFZfTElNSVRfQ0hFQ0soIDQgKyAyICk7CisgICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgR1hWX09QQkRfREFUQSggZm9ybWF0ICkgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAvKiBvbmx5IDB4MDAwMTAwMDAgaXMgZGVmaW5lZCAoMTk5NikgKi8KKyAgICBHWFZfVFJBQ0UoKCAiKHZlcnNpb249MHglMDh4KVxuIiwgdmVyc2lvbiApKTsKKyAgICBpZiAoIDB4MDAwMTAwMDBVTCAhPSB2ZXJzaW9uICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgLyogb25seSB2YWx1ZXMgMCBhbmQgMSBhcmUgZGVmaW5lZCAoMTk5NikgKi8KKyAgICBHWFZfVFJBQ0UoKCAiKGZvcm1hdD0weCUwNHgpXG4iLCBHWFZfT1BCRF9EQVRBKCBmb3JtYXQgKSApKTsKKyAgICBpZiAoIDB4MDAwMSA8IEdYVl9PUEJEX0RBVEEoIGZvcm1hdCApICkKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX3NpZ24gICA9IEdYVl9MT09LVVBWQUxVRV9VTlNJR05FRDsKKyAgICBneHZhbGlkLT5sb29rdXB2YWxfZnVuYyAgID0gZ3h2X29wYmRfTG9va3VwVmFsdWVfdmFsaWRhdGU7CisgICAgZ3h2YWxpZC0+bG9va3VwZm10NF90cmFucyA9IGd4dl9vcGJkX0xvb2t1cEZtdDRfdHJhbnNpdDsKKworICAgIGd4dl9Mb29rdXBUYWJsZV92YWxpZGF0ZSggcCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICBwICs9IGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aDsKKworICAgIGlmICggcCA+IHRhYmxlICsgR1hWX09QQkRfREFUQSggdmFsdWVPZmZzZXRfbWluICkgKQorICAgIHsKKyAgICAgIEdYVl9UUkFDRSgoCisgICAgICAgICJmb3VuZCBvdmVybGFwIGJldHdlZW4gTG9va3VwVGFibGUgYW5kIG9wYmRfdmFsdWUgYXJyYXlcbiIgKSk7CisgICAgICBGVF9JTlZBTElEX09GRlNFVDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2cHJvcC5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dnByb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2MzYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dnByb3AuYwpAQCAtMCwwICsxLDMzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2cHJvcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIHByb3AgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmFsaWQuaCIKKyNpbmNsdWRlICJneHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2cHJvcAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERhdGEgYW5kIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR1hWX1BST1BfSEVBREVSX1NJWkUgICggNCArIDIgKyAyICkKKyNkZWZpbmUgR1hWX1BST1BfU0laRV9NSU4gICAgIEdYVl9QUk9QX0hFQURFUl9TSVpFCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl9wcm9wX0RhdGFSZWNfCisgIHsKKyAgICBGVF9GaXhlZCAgdmVyc2lvbjsKKworICB9IEdYVl9wcm9wX0RhdGFSZWMsICpHWFZfcHJvcF9EYXRhOworCisjZGVmaW5lIEdYVl9QUk9QX0RBVEEoIGZpZWxkICkgIEdYVl9UQUJMRV9EQVRBKCBwcm9wLCBmaWVsZCApCisKKyNkZWZpbmUgR1hWX1BST1BfRkxPQVRFUiAgICAgICAgICAgICAgICAgICAgICAweDgwMDBVCisjZGVmaW5lIEdYVl9QUk9QX1VTRV9DT01QTEVNRU5UQVJZX0JSQUNLRVQgICAgMHgxMDAwVQorI2RlZmluZSBHWFZfUFJPUF9DT01QTEVNRU5UQVJZX0JSQUNLRVRfT0ZGU0VUIDB4MEYwMFUKKyNkZWZpbmUgR1hWX1BST1BfQVRUQUNISU5HX1RPX1JJR0hUICAgICAgICAgICAweDAwODBVCisjZGVmaW5lIEdYVl9QUk9QX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgMHgwMDYwVQorI2RlZmluZSBHWFZfUFJPUF9ESVJFQ1RJT05BTElUWV9DTEFTUyAgICAgICAgIDB4MDAxRlUKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBVVElMSVRZIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9wcm9wX3plcm9fYWR2YW5jZV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfRmFjZSAgICAgICBmYWNlOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfR2x5cGhTbG90ICBnbHlwaDsKKworCisgICAgR1hWX05BTUVfRU5URVIoICJ6ZXJvIGFkdmFuY2UiICk7CisKKyAgICBmYWNlID0gZ3h2YWxpZC0+ZmFjZTsKKworICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgRlRfSU5WQUxJRF9HTFlQSF9JRDsKKworICAgIGdseXBoID0gZmFjZS0+Z2x5cGg7CisKKyAgICBpZiAoIGdseXBoLT5hZHZhbmNlLnggIT0gKEZUX1BvcykwIHx8CisgICAgICAgICBnbHlwaC0+YWR2YW5jZS55ICE9IChGVF9Qb3MpMCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggIiAgZm91bmQgbm9uLXplcm8gYWR2YW5jZSBpbiB6ZXJvLWFkdmFuY2UgZ2x5cGhcbiIgKSk7CisgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIC8qIFBhc3MgMCBhcyBHTFlQSCB0byBjaGVjayB0aGUgZGVmYXVsdCBwcm9wZXJ0eSAqLworICBzdGF0aWMgdm9pZAorICBneHZfcHJvcF9wcm9wZXJ0eV92YWxpZGF0ZSggRlRfVVNob3J0ICAgICAgcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgaWYgKCBnbHlwaCAhPSAwICYmICggcHJvcGVydHkgJiBHWFZfUFJPUF9GTE9BVEVSICkgKQorICAgICAgZ3h2X3Byb3BfemVyb19hZHZhbmNlX3ZhbGlkYXRlKCBnbHlwaCwgZ3h2YWxpZCApOworCisgICAgaWYgKCBwcm9wZXJ0eSAmIEdYVl9QUk9QX1VTRV9DT01QTEVNRU5UQVJZX0JSQUNLRVQgKQorICAgIHsKKyAgICAgIEZUX1VTaG9ydCAgb2Zmc2V0OworICAgICAgY2hhciAgICAgICBjb21wbGVtZW50OworCisKKyAgICAgIG9mZnNldCA9IChGVF9VU2hvcnQpKCBwcm9wZXJ0eSAmIEdYVl9QUk9QX0NPTVBMRU1FTlRBUllfQlJBQ0tFVF9PRkZTRVQgKTsKKyAgICAgIGlmICggb2Zmc2V0ID09IDAgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAiICBmb3VuZCB6ZXJvIG9mZnNldCB0byBwcm9wZXJ0eVxuIiApKTsKKyAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7CisgICAgICB9CisKKyAgICAgIGNvbXBsZW1lbnQgPSAoY2hhcikoIG9mZnNldCA+PiA4ICk7CisgICAgICBpZiAoIGNvbXBsZW1lbnQgJiAweDA4ICkKKyAgICAgIHsKKyAgICAgICAgLyogVG9wIGJpdCBpcyBzZXQ6IG5lZ2F0aXZlICovCisKKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBvZmZzZXQgKi8KKyAgICAgICAgY29tcGxlbWVudCA9IChjaGFyKSggKCBjb21wbGVtZW50ICYgMHgwNyApICsgMSApOworCisgICAgICAgIC8qIFRoZSBnaWQgZm9yIGNvbXBsZW1lbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCAqLworICAgICAgICBpZiAoIGdseXBoIDw9IGNvbXBsZW1lbnQgKQorICAgICAgICB7CisgICAgICAgICAgR1hWX1RSQUNFKCggIiAgZm91bmQgbm9uLXBvc2l0aXZlIGdseXBoIGNvbXBsZW1lbnRcbiIgKSk7CisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFRoZSBnaWQgZm9yIGNvbXBsZW1lbnQgbXVzdCBiZSB0aGUgZmFjZS4gKi8KKyAgICAgICAgZ3h2X2dseXBoaWRfdmFsaWRhdGUoIChGVF9VU2hvcnQpKCBnbHlwaCArIGNvbXBsZW1lbnQgKSwgZ3h2YWxpZCApOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBwcm9wZXJ0eSAmIEdYVl9QUk9QX0NPTVBMRU1FTlRBUllfQlJBQ0tFVF9PRkZTRVQgKQorICAgICAgICBHWFZfVFJBQ0UoKCAiZ2x5cGggJWQgY2Fubm90IGhhdmUgY29tcGxlbWVudGFyeSBicmFja2V0aW5nXG4iLAorICAgICAgICAgICAgICAgICAgICBnbHlwaCApKTsKKyAgICB9CisKKyAgICAvKiB0aGlzIGlzIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjAgKi8KKyAgICBpZiAoIHByb3BlcnR5ICYgR1hWX1BST1BfQVRUQUNISU5HX1RPX1JJR0hUICkKKyAgICB7CisgICAgICBpZiAoIEdYVl9QUk9QX0RBVEEoIHZlcnNpb24gKSA9PSAweDAwMDEwMDAwVUwgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAiICBmb3VuZCBvbGRlciB2ZXJzaW9uICgxLjApIGluIG5ldyB2ZXJzaW9uIHRhYmxlXG4iICkpOworICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBwcm9wZXJ0eSAmIEdYVl9QUk9QX1JFU0VSVkVEICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAiICBmb3VuZCBub24temVybyBiaXRzIGluIHJlc2VydmVkIGJpdHNcbiIgKSk7CisgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgaWYgKCAoIHByb3BlcnR5ICYgR1hWX1BST1BfRElSRUNUSU9OQUxJVFlfQ0xBU1MgKSA+IDExICkKKyAgICB7CisgICAgICAvKiBUT0RPOiBUb28gcmVzdHJpY3RlZC4gVXNlIHRoZSB2YWxpZGF0aW9uIGxldmVsLiAqLworICAgICAgaWYgKCBHWFZfUFJPUF9EQVRBKCB2ZXJzaW9uICkgPT0gMHgwMDAxMDAwMFVMIHx8CisgICAgICAgICAgIEdYVl9QUk9QX0RBVEEoIHZlcnNpb24gKSA9PSAweDAwMDIwMDAwVUwgKQorICAgICAgeworICAgICAgICBHWFZfVFJBQ0UoKCAiICBmb3VuZCB0b28gb2xkIHZlcnNpb24gaW4gZGlyZWN0aW9uYWxpdHkgY2xhc3NcbiIgKSk7CisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl9wcm9wX0xvb2t1cFZhbHVlX3ZhbGlkYXRlKCBGVF9VU2hvcnQgICAgICAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIHZhbHVlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHWFZfVmFsaWRhdG9yICAgICAgICBneHZhbGlkICkKKyAgeworICAgIGd4dl9wcm9wX3Byb3BlcnR5X3ZhbGlkYXRlKCB2YWx1ZV9wLT51LCBnbHlwaCwgZ3h2YWxpZCApOworICB9CisKKworICAvKgorICAgICs9PT09PT09PT09PT09PT0rIC0tLS0tLS0tKworICAgIHwgbG9va3VwIGhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgQmluU3JjaEhlYWRlciB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgbGFzdEdseXBoWzBdICB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFswXSB8ICAgICAgICAgfCAgICBoZWFkIG9mIGxvb2t1cCB0YWJsZQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBvZmZzZXRbMF0gICAgIHwgICAgLT4gICB8ICAgICAgICAgIG9mZnNldCAgICAgICAgICAgIFtieXRlXQorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfCAgICAgICAgICAgICArCisgICAgfCBsYXN0R2x5cGhbMV0gIHwgICAgICAgICB8IChnbHlwaElEIC0gZmlyc3RHbHlwaCkgKiAyIFtieXRlXQorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgZmlyc3RHbHlwaFsxXSB8ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgfAorICAgIHwgb2Zmc2V0WzFdICAgICB8ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIDE2Yml0IHZhbHVlIGFycmF5ICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT0rICAgICAgICAgfAorICAgIHwgICAgIHZhbHVlICAgICB8IDwtLS0tLS0tKworICAgIC4uLgorICAqLworCisgIHN0YXRpYyBHWFZfTG9va3VwVmFsdWVEZXNjCisgIGd4dl9wcm9wX0xvb2t1cEZtdDRfdHJhbnNpdCggRlRfVVNob3J0ICAgICAgICAgICAgcmVsYXRpdmVfZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9Mb29rdXBWYWx1ZUNQdHIgIGJhc2VfdmFsdWVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICAgICAgICBsb29rdXB0YmxfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgICAgICAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgICBwOworICAgIEZUX0J5dGVzICAgICAgICAgICAgIGxpbWl0OworICAgIEZUX1VTaG9ydCAgICAgICAgICAgIG9mZnNldDsKKyAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2YWx1ZTsKKworICAgIC8qIFhYWDogY2hlY2sgcmFuZ2U/ICovCisgICAgb2Zmc2V0ID0gKEZUX1VTaG9ydCkoIGJhc2VfdmFsdWVfcC0+dSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlX2dpbmRleCAqIHNpemVvZiAoIEZUX1VTaG9ydCApICk7CisgICAgcCAgICAgID0gZ3h2YWxpZC0+bG9va3VwdGJsX2hlYWQgKyBvZmZzZXQ7CisgICAgbGltaXQgID0gbG9va3VwdGJsX2xpbWl0OworCisgICAgR1hWX0xJTUlUX0NIRUNLICggMiApOworICAgIHZhbHVlLnUgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgcmV0dXJuIHZhbHVlOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfcHJvcF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICBwICAgICA9IHRhYmxlOworICAgIEZUX0J5dGVzICAgICAgICAgIGxpbWl0ID0gMDsKKyAgICBHWFZfVmFsaWRhdG9yUmVjICBneHZhbGlkcmVjOworICAgIEdYVl9WYWxpZGF0b3IgICAgIGd4dmFsaWQgPSAmZ3h2YWxpZHJlYzsKKworICAgIEdYVl9wcm9wX0RhdGFSZWMgIHByb3ByZWM7CisgICAgR1hWX3Byb3BfRGF0YSAgICAgcHJvcCA9ICZwcm9wcmVjOworCisgICAgRlRfRml4ZWQgICAgICAgICAgdmVyc2lvbjsKKyAgICBGVF9VU2hvcnQgICAgICAgICBmb3JtYXQ7CisgICAgRlRfVVNob3J0ICAgICAgICAgZGVmYXVsdFByb3A7CisKKworICAgIGd4dmFsaWQtPnJvb3QgICAgICAgPSBmdHZhbGlkOworICAgIGd4dmFsaWQtPnRhYmxlX2RhdGEgPSBwcm9wOworICAgIGd4dmFsaWQtPmZhY2UgICAgICAgPSBmYWNlOworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgYHByb3AnIHRhYmxlXG4iICkpOworICAgIEdYVl9JTklUOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgMiArIDIgKTsKKyAgICB2ZXJzaW9uICAgICA9IEZUX05FWFRfTE9ORyggcCApOworICAgIGZvcm1hdCAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBkZWZhdWx0UHJvcCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBHWFZfVFJBQ0UoKCAiICB2ZXJzaW9uIDB4JTA4eFxuIiwgdmVyc2lvbiApKTsKKyAgICBHWFZfVFJBQ0UoKCAiICBmb3JtYXQgIDB4JTA0eFxuIiwgZm9ybWF0ICkpOworICAgIEdYVl9UUkFDRSgoICIgIGRlZmF1bHRQcm9wICAweCUwNHhcbiIsIGRlZmF1bHRQcm9wICkpOworCisgICAgLyogb25seSB2ZXJzaW9ucyAxLjAsIDIuMCwgMy4wIGFyZSBkZWZpbmVkICgxOTk2KSAqLworICAgIGlmICggdmVyc2lvbiAhPSAweDAwMDEwMDAwVUwgJiYKKyAgICAgICAgIHZlcnNpb24gIT0gMHgwMDAyMDAwMFVMICYmCisgICAgICAgICB2ZXJzaW9uICE9IDB4MDAwMzAwMDBVTCApCisgICAgeworICAgICAgR1hWX1RSQUNFKCggIiAgZm91bmQgdW5rbm93biB2ZXJzaW9uXG4iICkpOworICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisKKyAgICAvKiBvbmx5IGZvcm1hdHMgMHgwMDAwLCAweDAwMDEgYXJlIGRlZmluZWQgKDE5OTYpICovCisgICAgaWYgKCBmb3JtYXQgPiAxICkKKyAgICB7CisgICAgICBHWFZfVFJBQ0UoKCAiICBmb3VuZCB1bmtub3duIGZvcm1hdFxuIiApKTsKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIGd4dl9wcm9wX3Byb3BlcnR5X3ZhbGlkYXRlKCBkZWZhdWx0UHJvcCwgMCwgZ3h2YWxpZCApOworCisgICAgaWYgKCBmb3JtYXQgPT0gMCApCisgICAgeworICAgICAgRlRfVFJBQ0UzKCggIihmb3JtYXQgMCwgbm8gcGVyLWdseXBoIHByb3BlcnRpZXMsICIKKyAgICAgICAgICAgICAgICAgICJyZW1haW5pbmcgJWQgYnl0ZXMgYXJlIHNraXBwZWQpIiwgbGltaXQgLSBwICkpOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGZvcm1hdCA9PSAxICovCisgICAgR1hWX1BST1BfREFUQSggdmVyc2lvbiApID0gdmVyc2lvbjsKKworICAgIGd4dmFsaWQtPmxvb2t1cHZhbF9zaWduICAgPSBHWFZfTE9PS1VQVkFMVUVfVU5TSUdORUQ7CisgICAgZ3h2YWxpZC0+bG9va3VwdmFsX2Z1bmMgICA9IGd4dl9wcm9wX0xvb2t1cFZhbHVlX3ZhbGlkYXRlOworICAgIGd4dmFsaWQtPmxvb2t1cGZtdDRfdHJhbnMgPSBneHZfcHJvcF9Mb29rdXBGbXQ0X3RyYW5zaXQ7CisKKyAgICBneHZfTG9va3VwVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBneHZhbGlkICk7CisKKyAgRXhpdDoKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvZ3h2dHJhay5jIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dnRyYWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQyOWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL2d4dnRyYWsuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZ3h2dHJhay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlR1gvQUFUIHRyYWsgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KKy8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCisvKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgImd4dmFsaWQuaCIKKyNpbmNsdWRlICJneHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2dHJhaworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERhdGEgYW5kIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAvKgorICAgICAqIHJlZmVycmVkIHRyYWNrIHRhYmxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uOgorICAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZ0cmFrLmh0bWwKKyAgICAgKiBsYXN0IHVwZGF0ZSB3YXMgMTk5Ni4KKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogW01JTklNVU0gSEVBREVSXTogR1hWX1RSQUtfU0laRV9NSU4KKyAgICAgKiB2ZXJzaW9uICAgICAgICAgIChmaXhlZDogIDMyYml0KSA9IDB4MDAwMTAwMDAKKyAgICAgKiBmb3JtYXQgICAgICAgICAgICh1aW50MTY6IDE2Yml0KSA9IDAgaXMgb25seSBkZWZpbmVkICgxOTk2KQorICAgICAqIGhvcml6T2Zmc2V0ICAgICAgKHVpbnQxNjogMTZiaXQpCisgICAgICogdmVydE9mZnNldCAgICAgICAodWludDE2OiAxNmJpdCkKKyAgICAgKiByZXNlcnZlZCAgICAgICAgICh1aW50MTY6IDE2Yml0KSA9IDAKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogW1ZBUklBQkxFIEJPRFldOgorICAgICAqIGhvcml6RGF0YQorICAgICAqICAgaGVhZGVyICAgICAgICAgKCAyICsgMiArIDQKKyAgICAgKiAgIHRyYWNrVGFibGUgICAgICAgKyBuVHJhY2tzICogKCA0ICsgMiArIDIgKQorICAgICAqICAgc2l6ZVRhYmxlICAgICAgICArIG5TaXplcyAqIDQgKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB2ZXJ0RGF0YQorICAgICAqICAgaGVhZGVyICAgICAgICAgKCAyICsgMiArIDQKKyAgICAgKiAgIHRyYWNrVGFibGUgICAgICAgKyBuVHJhY2tzICogKCA0ICsgMiArIDIgKQorICAgICAqICAgc2l6ZVRhYmxlICAgICAgICArIG5TaXplcyAqIDQgKQorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYVl90cmFrX0RhdGFSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIHRyYWNrVmFsdWVPZmZzZXRfbWluOworICAgIEZUX1VTaG9ydCAgdHJhY2tWYWx1ZU9mZnNldF9tYXg7CisKKyAgfSBHWFZfdHJha19EYXRhUmVjLCAqR1hWX3RyYWtfRGF0YTsKKworCisjZGVmaW5lIEdYVl9UUkFLX0RBVEEoIEZJRUxEICkgIEdYVl9UQUJMRV9EQVRBKCB0cmFrLCBGSUVMRCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBneHZfdHJha190cmFja1RhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgIG5UcmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9WYWxpZGF0b3IgIGd4dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKworICAgIEZUX0ZpeGVkICAgdHJhY2ssIHQ7CisgICAgRlRfVVNob3J0ICBuYW1lSW5kZXg7CisgICAgRlRfVVNob3J0ICBvZmZzZXQ7CisgICAgRlRfVVNob3J0ICBpLCBqOworCisKKyAgICBHWFZfTkFNRV9FTlRFUiggInRyYWNrVGFibGUiICk7CisKKyAgICBHWFZfVFJBS19EQVRBKCB0cmFja1ZhbHVlT2Zmc2V0X21pbiApID0gMHhGRkZGVTsKKyAgICBHWFZfVFJBS19EQVRBKCB0cmFja1ZhbHVlT2Zmc2V0X21heCApID0gMHgwMDAwOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCBuVHJhY2tzICogKCA0ICsgMiArIDIgKSApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuVHJhY2tzOyBpICsrICkKKyAgICB7CisgICAgICBwID0gdGFibGUgKyBpICogKCA0ICsgMiArIDIgKTsKKyAgICAgIHRyYWNrICAgICA9IEZUX05FWFRfTE9ORyggcCApOworICAgICAgbmFtZUluZGV4ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIG9mZnNldCAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgIGlmICggb2Zmc2V0IDwgR1hWX1RSQUtfREFUQSggdHJhY2tWYWx1ZU9mZnNldF9taW4gKSApCisgICAgICAgIEdYVl9UUkFLX0RBVEEoIHRyYWNrVmFsdWVPZmZzZXRfbWluICkgPSBvZmZzZXQ7CisgICAgICBpZiAoIG9mZnNldCA+IEdYVl9UUkFLX0RBVEEoIHRyYWNrVmFsdWVPZmZzZXRfbWF4ICkgKQorICAgICAgICBHWFZfVFJBS19EQVRBKCB0cmFja1ZhbHVlT2Zmc2V0X21heCApID0gb2Zmc2V0OworCisgICAgICBneHZfc2ZudE5hbWVfdmFsaWRhdGUoIG5hbWVJbmRleCwgMjU2LCAzMjc2NywgZ3h2YWxpZCApOworCisgICAgICBmb3IgKCBqID0gaTsgaiA8IG5UcmFja3M7IGogKysgKQorICAgICAgeworICAgICAgICAgcCA9IHRhYmxlICsgaiAqICggNCArIDIgKyAyICk7CisgICAgICAgICB0ID0gRlRfTkVYVF9MT05HKCBwICk7CisgICAgICAgICBpZiAoIHQgPT0gdHJhY2sgKQorICAgICAgICAgICBHWFZfVFJBQ0UoKCAiZHVwbGljYXRlZCBlbnRyaWVzIGZvdW5kIGZvciB0cmFjayB2YWx1ZSAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgKSk7CisgICAgICB9CisgICAgfQorCisgICAgZ3h2YWxpZC0+c3VidGFibGVfbGVuZ3RoID0gKEZUX1VMb25nKSggcCAtIHRhYmxlICk7CisgICAgR1hWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGd4dl90cmFrX3RyYWNrRGF0YV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX1ZhbGlkYXRvciAgZ3h2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgIHAgPSB0YWJsZTsKKyAgICBGVF9VU2hvcnQgIG5UcmFja3M7CisgICAgRlRfVVNob3J0ICBuU2l6ZXM7CisgICAgRlRfVUxvbmcgICBzaXplVGFibGVPZmZzZXQ7CisKKyAgICBHWFZfT0RURUNUKCA0LCBvZHRlY3QgKTsKKworCisgICAgR1hWX09EVEVDVF9JTklUKCBvZHRlY3QgKTsKKyAgICBHWFZfTkFNRV9FTlRFUiggInRyYWNrRGF0YSIgKTsKKworICAgIC8qIHJlYWQgdGhlIGhlYWRlciBvZiB0cmFja0RhdGEgKi8KKyAgICBHWFZfTElNSVRfQ0hFQ0soIDIgKyAyICsgNCApOworICAgIG5UcmFja3MgICAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgblNpemVzICAgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBzaXplVGFibGVPZmZzZXQgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggdGFibGUsIChGVF9VTG9uZykoIHAgLSB0YWJsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhY2tEYXRhIGhlYWRlciIsIG9kdGVjdCApOworCisgICAgLyogdmFsaWRhdGUgdHJhY2tUYWJsZSAqLworICAgIGd4dl90cmFrX3RyYWNrVGFibGVfdmFsaWRhdGUoIHAsIGxpbWl0LCBuVHJhY2tzLCBneHZhbGlkICk7CisgICAgZ3h2X29kdGVjdF9hZGRfcmFuZ2UoIHAsIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYWNrVGFibGUiLCBvZHRlY3QgKTsKKworICAgIC8qIHNpemVUYWJsZSBpcyBhcnJheSBvZiBGVF9GaXhlZCwgZG9uJ3QgY2hlY2sgY29udGVudHMgKi8KKyAgICBwID0gZ3h2YWxpZC0+cm9vdC0+YmFzZSArIHNpemVUYWJsZU9mZnNldDsKKyAgICBHWFZfTElNSVRfQ0hFQ0soIG5TaXplcyAqIDQgKTsKKyAgICBneHZfb2R0ZWN0X2FkZF9yYW5nZSggcCwgblNpemVzICogNCwgInNpemVUYWJsZSIsIG9kdGVjdCApOworCisgICAgLyogdmFsaWRhdGUgdHJhY2tWYWx1ZU9mZmV0ICovCisgICAgcCA9IGd4dmFsaWQtPnJvb3QtPmJhc2UgKyBHWFZfVFJBS19EQVRBKCB0cmFja1ZhbHVlT2Zmc2V0X21pbiApOworICAgIGlmICggbGltaXQgLSBwIDwgblRyYWNrcyAqIG5TaXplcyAqIDIgKQorICAgICAgR1hWX1RSQUNFKCggInRvbyBzaG9ydCB0cmFja1ZhbHVlIGFycmF5XG4iICkpOworCisgICAgcCA9IGd4dmFsaWQtPnJvb3QtPmJhc2UgKyBHWFZfVFJBS19EQVRBKCB0cmFja1ZhbHVlT2Zmc2V0X21heCApOworICAgIEdYVl9MSU1JVF9DSEVDSyggblNpemVzICogMiApOworCisgICAgZ3h2X29kdGVjdF9hZGRfcmFuZ2UoIGd4dmFsaWQtPnJvb3QtPmJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEdYVl9UUkFLX0RBVEEoIHRyYWNrVmFsdWVPZmZzZXRfbWluICksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdYVl9UUkFLX0RBVEEoIHRyYWNrVmFsdWVPZmZzZXRfbWF4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEdYVl9UUkFLX0RBVEEoIHRyYWNrVmFsdWVPZmZzZXRfbWluICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG5TaXplcyAqIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFja1ZhbHVlIGFycmF5Iiwgb2R0ZWN0ICk7CisKKyAgICBneHZfb2R0ZWN0X3ZhbGlkYXRlKCBvZHRlY3QsIGd4dmFsaWQgKTsKKworICAgIEdYVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWsgVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBneHZfdHJha192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgbGltaXQgPSAwOworCisgICAgR1hWX1ZhbGlkYXRvclJlYyAgZ3h2YWxpZHJlYzsKKyAgICBHWFZfVmFsaWRhdG9yICAgICBneHZhbGlkID0gJmd4dmFsaWRyZWM7CisgICAgR1hWX3RyYWtfRGF0YVJlYyAgdHJha3JlYzsKKyAgICBHWFZfdHJha19EYXRhICAgICB0cmFrID0gJnRyYWtyZWM7CisKKyAgICBGVF9VTG9uZyAgIHZlcnNpb247CisgICAgRlRfVVNob3J0ICBmb3JtYXQ7CisgICAgRlRfVVNob3J0ICBob3Jpek9mZnNldDsKKyAgICBGVF9VU2hvcnQgIHZlcnRPZmZzZXQ7CisgICAgRlRfVVNob3J0ICByZXNlcnZlZDsKKworCisgICAgR1hWX09EVEVDVCggMywgb2R0ZWN0ICk7CisKKyAgICBHWFZfT0RURUNUX0lOSVQoIG9kdGVjdCApOworICAgIGd4dmFsaWQtPnJvb3QgICAgICAgPSBmdHZhbGlkOworICAgIGd4dmFsaWQtPnRhYmxlX2RhdGEgPSB0cmFrOworICAgIGd4dmFsaWQtPmZhY2UgICAgICAgPSBmYWNlOworCisgICAgbGltaXQgICAgICA9IGd4dmFsaWQtPnJvb3QtPmxpbWl0OworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgYHRyYWsnIHRhYmxlXG4iICkpOworICAgIEdYVl9JTklUOworCisgICAgR1hWX0xJTUlUX0NIRUNLKCA0ICsgMiArIDIgKyAyICsgMiApOworICAgIHZlcnNpb24gICAgID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgIGZvcm1hdCAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBob3Jpek9mZnNldCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgdmVydE9mZnNldCAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIHJlc2VydmVkICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIEdYVl9UUkFDRSgoICIgKHZlcnNpb24gPSAweCUwOHgpXG4iLCB2ZXJzaW9uICkpOworICAgIEdYVl9UUkFDRSgoICIgKGZvcm1hdCA9IDB4JTA0eClcbiIsIGZvcm1hdCApKTsKKyAgICBHWFZfVFJBQ0UoKCAiIChob3Jpek9mZnNldCA9IDB4JTA0eClcbiIsIGhvcml6T2Zmc2V0ICkpOworICAgIEdYVl9UUkFDRSgoICIgKHZlcnRPZmZzZXQgPSAweCUwNHgpXG4iLCB2ZXJ0T2Zmc2V0ICkpOworICAgIEdYVl9UUkFDRSgoICIgKHJlc2VydmVkID0gMHglMDR4KVxuIiwgcmVzZXJ2ZWQgKSk7CisKKyAgICAvKiBWZXJzaW9uIDEuMCAoYWx3YXlzOjE5OTYpICovCisgICAgaWYgKCB2ZXJzaW9uICE9IDB4MDAwMTAwMDBVTCApCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIC8qIGZvcm1hdCAwIChhbHdheXM6MTk5NikgKi8KKyAgICBpZiAoIGZvcm1hdCAhPSAweDAwMDAgKQorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICBHWFZfMzJCSVRfQUxJR05NRU5UX1ZBTElEQVRFKCBob3Jpek9mZnNldCApOworICAgIEdYVl8zMkJJVF9BTElHTk1FTlRfVkFMSURBVEUoIHZlcnRPZmZzZXQgKTsKKworICAgIC8qIFJlc2VydmVkIEZpeGVkIFZhbHVlIChhbHdheXMpICovCisgICAgaWYgKCByZXNlcnZlZCAhPSAweDAwMDAgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgLyogdmFsaWRhdGUgdHJhY2tEYXRhICovCisgICAgaWYgKCAwIDwgaG9yaXpPZmZzZXQgKQorICAgIHsKKyAgICAgIGd4dl90cmFrX3RyYWNrRGF0YV92YWxpZGF0ZSggdGFibGUgKyBob3Jpek9mZnNldCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIGd4dl9vZHRlY3RfYWRkX3JhbmdlKCB0YWJsZSArIGhvcml6T2Zmc2V0LCBneHZhbGlkLT5zdWJ0YWJsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvcml6SnVzdERhdGEiLCBvZHRlY3QgKTsKKyAgICB9CisKKyAgICBpZiAoIDAgPCB2ZXJ0T2Zmc2V0ICkKKyAgICB7CisgICAgICBneHZfdHJha190cmFja0RhdGFfdmFsaWRhdGUoIHRhYmxlICsgdmVydE9mZnNldCwgbGltaXQsIGd4dmFsaWQgKTsKKyAgICAgIGd4dl9vZHRlY3RfYWRkX3JhbmdlKCB0YWJsZSArIHZlcnRPZmZzZXQsIGd4dmFsaWQtPnN1YnRhYmxlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVydEp1c3REYXRhIiwgb2R0ZWN0ICk7CisgICAgfQorCisgICAgZ3h2X29kdGVjdF92YWxpZGF0ZSggb2R0ZWN0LCBneHZhbGlkICk7CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL21vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDc2NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9neHZhbGlkL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgZ3h2YWxpZCBtb2R1bGUgZGVmaW5pdGlvbgorIworCisjIENvcHlyaWdodCAyMDA0LTIwMTUgYnkKKyMgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBHWFZBTElEX01PRFVMRQorCitkZWZpbmUgR1hWQUxJRF9NT0RVTEUKKyQoT1BFTl9EUklWRVIpIEZUX01vZHVsZV9DbGFzcywgZ3h2X21vZHVsZV9jbGFzcyAkKENMT1NFX0RSSVZFUikKKyQoRUNIT19EUklWRVIpZ3h2YWxpZCAgICQoRUNIT19EUklWRVJfREVTQylUcnVlVHlwZUdYL0FBVCB2YWxpZGF0aW9uIG1vZHVsZSQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL2d4dmFsaWQvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhMmQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3h2YWxpZC9ydWxlcy5tawpAQCAtMCwwICsxLDk4IEBACisjCisjIEZyZWVUeXBlIDIgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBkcml2ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDIwMDQtMjAxNSBieQorIyBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIEdYViBkcml2ZXIgZGlyZWN0b3J5CisjCitHWFZfRElSIDo9ICQoU1JDX0RJUikvZ3h2YWxpZAorCisKKyMgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZSBkcml2ZXIKKyMKK0dYVl9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChHWFZfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgR1hWIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworR1hWX0RSVl9TUkMgOj0gJChHWFZfRElSKS9neHZjb21tbi5jIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2ZmVhdC5jICBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dmJzbG4uYyAgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZ0cmFrLmMgIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2b3BiZC5jICBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dnByb3AuYyAgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZqdXN0LmMgIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bW9ydC5jICBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dm1vcnQwLmMgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb3J0MS5jIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bW9ydDIuYyBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dm1vcnQ0LmMgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb3J0NS5jIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bW9yeC5jICBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dm1vcngwLmMgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb3J4MS5jIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bW9yeDIuYyBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dm1vcng0LmMgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb3J4NS5jIFwKKyAgICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bGNhci5jICBcCisgICAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dmtlcm4uYyAgXAorICAgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb2QuYworCisjIEdYViBkcml2ZXIgaGVhZGVycworIworR1hWX0RSVl9IIDo9ICQoR1hWX0RJUikvZ3h2YWxpZC5oICBcCisgICAgICAgICAgICAgJChHWFZfRElSKS9neHZlcnJvci5oIFwKKyAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dmNvbW1uLmggXAorICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2ZmVhdC5oICBcCisgICAgICAgICAgICAgJChHWFZfRElSKS9neHZtb2QuaCAgIFwKKyAgICAgICAgICAgICAkKEdYVl9ESVIpL2d4dm1vcnQuaCAgXAorICAgICAgICAgICAgICQoR1hWX0RJUikvZ3h2bW9yeC5oCisKKworIyBHWFYgZHJpdmVyIG9iamVjdChzKQorIworIyAgIEdYVl9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMuCisjICAgR1hWX0RSVl9PQkpfUyBpcyB1c2VkIGR1cmluZyBgc2luZ2xlJyBidWlsZHMuCisjCitHWFZfRFJWX09CSl9NIDo9ICQoR1hWX0RSVl9TUkM6JChHWFZfRElSKS8lLmM9JChPQkpfRElSKS8lLiRPKQorR1hWX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL2d4dmFsaWQuJE8KKworIyBHWFYgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK0dYVl9EUlZfU1JDX1MgOj0gJChHWFZfRElSKS9neHZhbGlkLmMKKworCisjIEdYViBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKEdYVl9EUlZfT0JKX1MpOiAkKEdYVl9EUlZfU1JDX1MpICQoR1hWX0RSVl9TUkMpIFwKKyAgICAgICAgICAgICAgICAgICAkKEZSRUVUWVBFX0gpICQoR1hWX0RSVl9IKQorCSQoR1hWX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKEdYVl9EUlZfU1JDX1MpKQorCisKKyMgR1hWIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChHWFZfRElSKS8lLmMgJChGUkVFVFlQRV9IKSAkKEdYVl9EUlZfSCkKKwkkKEdYVl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoR1hWX0RSVl9PQkpfUykKK0RSVl9PQkpTX00gKz0gJChHWFZfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDRhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvSmFtZmlsZQpAQCAtMCwwICsxLDE2IEBACisjIEZyZWVUeXBlIDIgc3JjL2d6aXAgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIGd6aXAgOworCitMaWJyYXJ5ICAkKEZUMl9MSUIpIDogZnRnemlwLmMgOworCisjIGVuZCBvZiBzcmMvcGNmIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9hZGxlcjMyLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvYWRsZXIzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2Y5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvYWRsZXIzMi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIGFkbGVyMzIuYyAtLSBjb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGRhdGEgc3RyZWFtCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpbmNsdWRlICJ6bGliLmgiCisKKyNkZWZpbmUgQkFTRSA2NTUyMUwgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKyNkZWZpbmUgTk1BWCA1NTUyCisvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KKworI2RlZmluZSBETzEoYnVmLGkpICB7czEgKz0gYnVmW2ldOyBzMiArPSBzMTt9CisjZGVmaW5lIERPMihidWYsaSkgIERPMShidWYsaSk7IERPMShidWYsaSsxKTsKKyNkZWZpbmUgRE80KGJ1ZixpKSAgRE8yKGJ1ZixpKTsgRE8yKGJ1ZixpKzIpOworI2RlZmluZSBETzgoYnVmLGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7CisjZGVmaW5lIERPMTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK1pFWFBPUlQodUxvbmcpIGFkbGVyMzIoIC8qIGFkbGVyLCBidWYsIGxlbikgKi8KKyAgICB1TG9uZyBhZGxlciwKKyAgICBjb25zdCBCeXRlZiAqYnVmLAorICAgIHVJbnQgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZmZmY7CisgICAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisgICAgaW50IGs7CisKKyAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDFMOworCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgayA9IGxlbiA8IE5NQVggPyBsZW4gOiBOTUFYOworICAgICAgICBsZW4gLT0gazsKKyAgICAgICAgd2hpbGUgKGsgPj0gMTYpIHsKKyAgICAgICAgICAgIERPMTYoYnVmKTsKKyAgICAgICAgICAgIGJ1ZiArPSAxNjsKKyAgICAgICAgICAgIGsgLT0gMTY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGsgIT0gMCkgZG8geworICAgICAgICAgICAgczEgKz0gKmJ1ZisrOworICAgICAgICAgICAgczIgKz0gczE7CisgICAgICAgIH0gd2hpbGUgKC0tayk7CisgICAgICAgIHMxICU9IEJBU0U7CisgICAgICAgIHMyICU9IEJBU0U7CisgICAgfQorICAgIHJldHVybiAoczIgPDwgMTYpIHwgczE7Cit9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvZnRnemlwLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvZnRnemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5ZWI4OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9mdGd6aXAuYwpAQCAtMCwwICsxLDc5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRnemlwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5neiBjb21wcmVzc2VkIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgb3B0aW9uYWwgY29tcG9uZW50IHJlbGllcyBvbiB6bGliLiAgSXQgc2hvdWxkIG1haW5seSBiZSB1c2VkIHRvICAgKi8KKy8qICBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAgICAgICAgICAgICovCisvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0daSVBfSAorI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAorCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEd6aXBfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0d6aXAKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyNlcnJvciAiZ3ppcCBjb2RlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQgorCisjaW5jbHVkZSA8emxpYi5oPgorCisjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiAqLworCisgLyogSW4gdGhpcyBjYXNlLCB3ZSBpbmNsdWRlIG91ciBvd24gbW9kaWZpZWQgc291cmNlcyBvZiB0aGUgWkxpYiAgICAqLworIC8qIHdpdGhpbiB0aGUgImZ0Z3ppcCIgY29tcG9uZW50LiAgVGhlIG1vZGlmaWNhdGlvbnMgd2VyZSBuZWNlc3NhcnkgKi8KKyAvKiB0byAjaW5jbHVkZSBhbGwgZmlsZXMgd2l0aG91dCBjb25mbGljdHMsIGFzIHdlbGwgYXMgcHJldmVudGluZyAgICovCisgLyogdGhlIGRlZmluaXRpb24gb2YgImV4dGVybiIgZnVuY3Rpb25zIHRoYXQgbWF5IGNhdXNlIGxpbmtpbmcgICAgICAqLworIC8qIGNvbmZsaWN0cyB3aGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBib3RoIEZyZWVUeXBlIGFuZCB0aGUgICAgKi8KKyAvKiBvcmlnaW5hbCBaTGliLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZm5kZWYgVVNFX1pMSUJfWkNBTExPQworI2RlZmluZSBNWV9aQ0FMTE9DIC8qIHByZXZlbnQgYWxsIHpjYWxsb2MoKSAmIHpmcmVlKCkgaW4genV0aWxzLmMgKi8KKyNlbmRpZgorCisjaW5jbHVkZSAiemxpYi5oIgorCisjdW5kZWYgIFNMT1cKKyNkZWZpbmUgU0xPVyAgMSAgLyogd2UgY2FuJ3QgdXNlIGFzbS1vcHRpbWl6ZWQgc291cmNlcyBoZXJlISAqLworCisjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAgICAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICAgKi8KKyAgLyogV2UgZGlzYWJsZSB0aGUgd2FybmluZyBgY29udmVyc2lvbiBmcm9tIFhYWCB0byBZWVksICAgICAqLworICAvKiBwb3NzaWJsZSBsb3NzIG9mIGRhdGEnIGluIG9yZGVyIHRvIGNvbXBpbGUgY2xlYW5seSB3aXRoICovCisgIC8qIHRoZSBtYXhpbXVtIGxldmVsIG9mIHdhcm5pbmdzOiB6bGliIGlzIG5vbi1GcmVlVHlwZSAgICAgKi8KKyAgLyogY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3ByYWdtYSB3YXJuaW5nKCBwdXNoICkKKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQyNDQgKQorI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKyAgLyogVXJnaC4gIGBpbmZsYXRlX21hc2snIG11c3Qgbm90IGJlIGRlY2xhcmVkIHR3aWNlIC0tIEMrKyBkb2Vzbid0IGxpa2UKKyAgICAgdGhpcy4gIFdlIHRlbXBvcmFyaWx5IGRpc2FibGUgaXQgYW5kIGxvYWQgYWxsIG5lY2Vzc2FyeSBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIE5PX0lORkxBVEVfTUFTSworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZibG9jay5oIgorI2luY2x1ZGUgImluZmNvZGVzLmgiCisjaW5jbHVkZSAiaW5mdXRpbC5oIgorI3VuZGVmICBOT19JTkZMQVRFX01BU0sKKworICAvKiBpbmZ1dGlsLmMgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgaW5mY29kZXMuYyAqLworI2luY2x1ZGUgInp1dGlsLmMiCisjaW5jbHVkZSAiaW5mdHJlZXMuYyIKKyNpbmNsdWRlICJpbmZ1dGlsLmMiCisjaW5jbHVkZSAiaW5mY29kZXMuYyIKKyNpbmNsdWRlICJpbmZibG9jay5jIgorI2luY2x1ZGUgImluZmxhdGUuYyIKKyNpbmNsdWRlICJhZGxlcjMyLmMiCisKKyNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApCisjcHJhZ21hIHdhcm5pbmcoIHBvcCApCisjZW5kaWYKKworI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgWiBMIEkgQiAgIE0gRSBNIE8gUiBZICAgTSBBIE4gQSBHIEUgTSBFIE4gVCAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBpdCBpcyBiZXR0ZXIgdG8gdXNlIEZyZWVUeXBlIG1lbW9yeSByb3V0aW5lcyBpbnN0ZWFkIG9mIHJhdworICAgICAnbWFsbG9jL2ZyZWUnICovCisKKyAgc3RhdGljIHZvaWRwZgorICBmdF9nemlwX2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgdUludCAgICAgICBpdGVtcywKKyAgICAgICAgICAgICAgICAgdUludCAgICAgICBzaXplICkKKyAgeworICAgIEZUX1VMb25nICAgIHN6ID0gKEZUX1VMb25nKXNpemUgKiBpdGVtczsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9Qb2ludGVyICBwICA9IE5VTEw7CisKKworICAgICh2b2lkKUZUX0FMTE9DKCBwLCBzeiApOworICAgIHJldHVybiBwOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9nemlwX2ZyZWUoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgIHZvaWRwZiAgICAgYWRkcmVzcyApCisgIHsKKyAgICBGVF9NRU1fRlJFRSggYWRkcmVzcyApOworICB9CisKKworI2lmICFkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCICkgJiYgIWRlZmluZWQoIFVTRV9aTElCX1pDQUxMT0MgKQorCisgIGxvY2FsIHZvaWRwZgorICB6Y2FsbG9jICggdm9pZHBmICAgIG9wYXF1ZSwKKyAgICAgICAgICAgIHVuc2lnbmVkICBpdGVtcywKKyAgICAgICAgICAgIHVuc2lnbmVkICBzaXplICkKKyAgeworICAgIHJldHVybiBmdF9nemlwX2FsbG9jKCAoRlRfTWVtb3J5KW9wYXF1ZSwgaXRlbXMsIHNpemUgKTsKKyAgfQorCisgIGxvY2FsIHZvaWQKKyAgemNmcmVlKCB2b2lkcGYgIG9wYXF1ZSwKKyAgICAgICAgICB2b2lkcGYgIHB0ciApCisgIHsKKyAgICBmdF9nemlwX2ZyZWUoIChGVF9NZW1vcnkpb3BhcXVlLCBwdHIgKTsKKyAgfQorCisjZW5kaWYgLyogIVNZU1RFTV9aTElCICYmICFVU0VfWkxJQl9aQ0FMTE9DICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgWiBMIEkgQiAgIEYgSSBMIEUgICBEIEUgUyBDIFIgSSBQIFQgTyBSICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGVF9HWklQX0JVRkZFUl9TSVpFICA0MDk2CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0daaXBGaWxlUmVjXworICB7CisgICAgRlRfU3RyZWFtICBzb3VyY2U7ICAgICAgICAgLyogcGFyZW50L3NvdXJjZSBzdHJlYW0gICAgICAgICovCisgICAgRlRfU3RyZWFtICBzdHJlYW07ICAgICAgICAgLyogZW1iZWRkaW5nIHN0cmVhbSAgICAgICAgICAgICovCisgICAgRlRfTWVtb3J5ICBtZW1vcnk7ICAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAgICovCisgICAgel9zdHJlYW0gICB6c3RyZWFtOyAgICAgICAgLyogemxpYiBpbnB1dCBzdHJlYW0gICAgICAgICAgICovCisKKyAgICBGVF9VTG9uZyAgIHN0YXJ0OyAgICAgICAgICAvKiBzdGFydGluZyBwb3NpdGlvbiwgYWZ0ZXIgLmd6IGhlYWRlciAqLworICAgIEZUX0J5dGUgICAgaW5wdXRbRlRfR1pJUF9CVUZGRVJfU0laRV07ICAgLyogaW5wdXQgcmVhZCBidWZmZXIgICovCisKKyAgICBGVF9CeXRlICAgIGJ1ZmZlcltGVF9HWklQX0JVRkZFUl9TSVpFXTsgIC8qIG91dHB1dCBidWZmZXIgICAgICAqLworICAgIEZUX1VMb25nICAgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zaXRpb24gaW4gb3V0cHV0ICovCisgICAgRlRfQnl0ZSogICBjdXJzb3I7CisgICAgRlRfQnl0ZSogICBsaW1pdDsKKworICB9IEZUX0daaXBGaWxlUmVjLCAqRlRfR1ppcEZpbGU7CisKKworICAvKiBnemlwIGZsYWcgYnl0ZSAqLworI2RlZmluZSBGVF9HWklQX0FTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBhc2NpaSB0ZXh0ICovCisjZGVmaW5lIEZUX0daSVBfSEVBRF9DUkMgICAgIDB4MDIgLyogYml0IDEgc2V0OiBoZWFkZXIgQ1JDIHByZXNlbnQgKi8KKyNkZWZpbmUgRlRfR1pJUF9FWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KKyNkZWZpbmUgRlRfR1pJUF9PUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCisjZGVmaW5lIEZUX0daSVBfQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLworI2RlZmluZSBGVF9HWklQX1JFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KKworCisgIC8qIGNoZWNrIGFuZCBza2lwIC5neiBoZWFkZXIgLSB3ZSBkb24ndCBzdXBwb3J0IGB0cmFuc3BhcmVudCcgY29tcHJlc3Npb24gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2d6aXBfY2hlY2tfaGVhZGVyKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRfQnl0ZSAgIGhlYWRbNF07CisKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDAgKSAgICAgICB8fAorICAgICAgICAgRlRfU1RSRUFNX1JFQUQoIGhlYWQsIDQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBoZWFkWzBdICYmIGhlYWRbMV0gYXJlIHRoZSBtYWdpYyBudW1iZXJzOyAgICAqLworICAgIC8qIGhlYWRbMl0gaXMgdGhlIG1ldGhvZCwgYW5kIGhlYWRbM10gdGhlIGZsYWdzICovCisgICAgaWYgKCBoZWFkWzBdICE9IDB4MUYgICAgICAgICAgICAgIHx8CisgICAgICAgICBoZWFkWzFdICE9IDB4OEIgICAgICAgICAgICAgIHx8CisgICAgICAgICBoZWFkWzJdICE9IFpfREVGTEFURUQgICAgICAgIHx8CisgICAgICAgIChoZWFkWzNdICYgRlRfR1pJUF9SRVNFUlZFRCkgICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogc2tpcCB0aW1lLCB4ZmxhZ3MgYW5kIG9zIGNvZGUgKi8KKyAgICAodm9pZClGVF9TVFJFQU1fU0tJUCggNiApOworCisgICAgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KKyAgICBpZiAoIGhlYWRbM10gJiBGVF9HWklQX0VYVFJBX0ZJRUxEICkKKyAgICB7CisgICAgICBGVF9VSW50ICBsZW47CisKKworICAgICAgaWYgKCBGVF9SRUFEX1VTSE9SVF9MRSggbGVuICkgfHwKKyAgICAgICAgICAgRlRfU1RSRUFNX1NLSVAoIGxlbiApICAgICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHNraXAgb3JpZ2luYWwgZmlsZSBuYW1lICovCisgICAgaWYgKCBoZWFkWzNdICYgRlRfR1pJUF9PUklHX05BTUUgKQorICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgYzsKKworCisgICAgICAgIGlmICggRlRfUkVBRF9CWVRFKCBjICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBpZiAoIGMgPT0gMCApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBza2lwIC5neiBjb21tZW50ICovCisgICAgaWYgKCBoZWFkWzNdICYgRlRfR1pJUF9DT01NRU5UICkKKyAgICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGM7CisKKworICAgICAgICBpZiAoIEZUX1JFQURfQllURSggYyApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCBjID09IDAgKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgLyogc2tpcCBDUkMgKi8KKyAgICBpZiAoIGhlYWRbM10gJiBGVF9HWklQX0hFQURfQ1JDICkKKyAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDIgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2d6aXBfZmlsZV9pbml0KCBGVF9HWmlwRmlsZSAgemlwLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzb3VyY2UgKQorICB7CisgICAgel9zdHJlYW0qICB6c3RyZWFtID0gJnppcC0+enN0cmVhbTsKKyAgICBGVF9FcnJvciAgIGVycm9yICAgPSBGVF9FcnJfT2s7CisKKworICAgIHppcC0+c3RyZWFtID0gc3RyZWFtOworICAgIHppcC0+c291cmNlID0gc291cmNlOworICAgIHppcC0+bWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKyAgICB6aXAtPmxpbWl0ICA9IHppcC0+YnVmZmVyICsgRlRfR1pJUF9CVUZGRVJfU0laRTsKKyAgICB6aXAtPmN1cnNvciA9IHppcC0+bGltaXQ7CisgICAgemlwLT5wb3MgICAgPSAwOworCisgICAgLyogY2hlY2sgYW5kIHNraXAgLmd6IGhlYWRlciAqLworICAgIHsKKyAgICAgIHN0cmVhbSA9IHNvdXJjZTsKKworICAgICAgZXJyb3IgPSBmdF9nemlwX2NoZWNrX2hlYWRlciggc3RyZWFtICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICB6aXAtPnN0YXJ0ID0gRlRfU1RSRUFNX1BPUygpOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgemxpYiAtLSB0aGVyZSBpcyBubyB6bGliIGhlYWRlciBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0gKi8KKyAgICB6c3RyZWFtLT56YWxsb2MgPSAoYWxsb2NfZnVuYylmdF9nemlwX2FsbG9jOworICAgIHpzdHJlYW0tPnpmcmVlICA9IChmcmVlX2Z1bmMpIGZ0X2d6aXBfZnJlZTsKKyAgICB6c3RyZWFtLT5vcGFxdWUgPSBzdHJlYW0tPm1lbW9yeTsKKworICAgIHpzdHJlYW0tPmF2YWlsX2luID0gMDsKKyAgICB6c3RyZWFtLT5uZXh0X2luICA9IHppcC0+YnVmZmVyOworCisgICAgaWYgKCBpbmZsYXRlSW5pdDIoIHpzdHJlYW0sIC1NQVhfV0JJVFMgKSAhPSBaX09LIHx8CisgICAgICAgICB6c3RyZWFtLT5uZXh0X2luID09IE5VTEwgICAgICAgICAgICAgICAgICAgICApCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2d6aXBfZmlsZV9kb25lKCBGVF9HWmlwRmlsZSAgemlwICkKKyAgeworICAgIHpfc3RyZWFtKiAgenN0cmVhbSA9ICZ6aXAtPnpzdHJlYW07CisKKworICAgIGluZmxhdGVFbmQoIHpzdHJlYW0gKTsKKworICAgIC8qIGNsZWFyIHRoZSByZXN0ICovCisgICAgenN0cmVhbS0+emFsbG9jICAgID0gTlVMTDsKKyAgICB6c3RyZWFtLT56ZnJlZSAgICAgPSBOVUxMOworICAgIHpzdHJlYW0tPm9wYXF1ZSAgICA9IE5VTEw7CisgICAgenN0cmVhbS0+bmV4dF9pbiAgID0gTlVMTDsKKyAgICB6c3RyZWFtLT5uZXh0X291dCAgPSBOVUxMOworICAgIHpzdHJlYW0tPmF2YWlsX2luICA9IDA7CisgICAgenN0cmVhbS0+YXZhaWxfb3V0ID0gMDsKKworICAgIHppcC0+bWVtb3J5ID0gTlVMTDsKKyAgICB6aXAtPnNvdXJjZSA9IE5VTEw7CisgICAgemlwLT5zdHJlYW0gPSBOVUxMOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfZ3ppcF9maWxlX3Jlc2V0KCBGVF9HWmlwRmlsZSAgemlwICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gemlwLT5zb3VyY2U7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKworCisgICAgaWYgKCAhRlRfU1RSRUFNX1NFRUsoIHppcC0+c3RhcnQgKSApCisgICAgeworICAgICAgel9zdHJlYW0qICB6c3RyZWFtID0gJnppcC0+enN0cmVhbTsKKworCisgICAgICBpbmZsYXRlUmVzZXQoIHpzdHJlYW0gKTsKKworICAgICAgenN0cmVhbS0+YXZhaWxfaW4gID0gMDsKKyAgICAgIHpzdHJlYW0tPm5leHRfaW4gICA9IHppcC0+aW5wdXQ7CisgICAgICB6c3RyZWFtLT5hdmFpbF9vdXQgPSAwOworICAgICAgenN0cmVhbS0+bmV4dF9vdXQgID0gemlwLT5idWZmZXI7CisKKyAgICAgIHppcC0+bGltaXQgID0gemlwLT5idWZmZXIgKyBGVF9HWklQX0JVRkZFUl9TSVpFOworICAgICAgemlwLT5jdXJzb3IgPSB6aXAtPmxpbWl0OworICAgICAgemlwLT5wb3MgICAgPSAwOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2d6aXBfZmlsZV9maWxsX2lucHV0KCBGVF9HWmlwRmlsZSAgemlwICkKKyAgeworICAgIHpfc3RyZWFtKiAgenN0cmVhbSA9ICZ6aXAtPnpzdHJlYW07CisgICAgRlRfU3RyZWFtICBzdHJlYW0gID0gemlwLT5zb3VyY2U7CisgICAgRlRfVUxvbmcgICBzaXplOworCisKKyAgICBpZiAoIHN0cmVhbS0+cmVhZCApCisgICAgeworICAgICAgc2l6ZSA9IHN0cmVhbS0+cmVhZCggc3RyZWFtLCBzdHJlYW0tPnBvcywgemlwLT5pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0daSVBfQlVGRkVSX1NJWkUgKTsKKyAgICAgIGlmICggc2l6ZSA9PSAwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHNpemUgPSBzdHJlYW0tPnNpemUgLSBzdHJlYW0tPnBvczsKKyAgICAgIGlmICggc2l6ZSA+IEZUX0daSVBfQlVGRkVSX1NJWkUgKQorICAgICAgICBzaXplID0gRlRfR1pJUF9CVUZGRVJfU0laRTsKKworICAgICAgaWYgKCBzaXplID09IDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworCisgICAgICBGVF9NRU1fQ09QWSggemlwLT5pbnB1dCwgc3RyZWFtLT5iYXNlICsgc3RyZWFtLT5wb3MsIHNpemUgKTsKKyAgICB9CisgICAgc3RyZWFtLT5wb3MgKz0gc2l6ZTsKKworICAgIHpzdHJlYW0tPm5leHRfaW4gID0gemlwLT5pbnB1dDsKKyAgICB6c3RyZWFtLT5hdmFpbF9pbiA9IHNpemU7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfZ3ppcF9maWxlX2ZpbGxfb3V0cHV0KCBGVF9HWmlwRmlsZSAgemlwICkKKyAgeworICAgIHpfc3RyZWFtKiAgenN0cmVhbSA9ICZ6aXAtPnpzdHJlYW07CisgICAgRlRfRXJyb3IgICBlcnJvciAgID0gRlRfRXJyX09rOworCisKKyAgICB6aXAtPmN1cnNvciAgICAgICAgPSB6aXAtPmJ1ZmZlcjsKKyAgICB6c3RyZWFtLT5uZXh0X291dCAgPSB6aXAtPmN1cnNvcjsKKyAgICB6c3RyZWFtLT5hdmFpbF9vdXQgPSBGVF9HWklQX0JVRkZFUl9TSVpFOworCisgICAgd2hpbGUgKCB6c3RyZWFtLT5hdmFpbF9vdXQgPiAwICkKKyAgICB7CisgICAgICBpbnQgIGVycjsKKworCisgICAgICBpZiAoIHpzdHJlYW0tPmF2YWlsX2luID09IDAgKQorICAgICAgeworICAgICAgICBlcnJvciA9IGZ0X2d6aXBfZmlsZV9maWxsX2lucHV0KCB6aXAgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGVyciA9IGluZmxhdGUoIHpzdHJlYW0sIFpfTk9fRkxVU0ggKTsKKworICAgICAgaWYgKCBlcnIgPT0gWl9TVFJFQU1fRU5EICkKKyAgICAgIHsKKyAgICAgICAgemlwLT5saW1pdCA9IHpzdHJlYW0tPm5leHRfb3V0OworICAgICAgICBpZiAoIHppcC0+bGltaXQgPT0gemlwLT5jdXJzb3IgKQorICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBlcnIgIT0gWl9PSyApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX09wZXJhdGlvbiApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZlcjsgYGNvdW50JyBtdXN0IGJlIDw9IEZUX0daSVBfQlVGRkVSX1NJWkUgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2d6aXBfZmlsZV9za2lwX291dHB1dCggRlRfR1ppcEZpbGUgIHppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VMb25nICBkZWx0YTsKKworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBkZWx0YSA9IChGVF9VTG9uZykoIHppcC0+bGltaXQgLSB6aXAtPmN1cnNvciApOworICAgICAgaWYgKCBkZWx0YSA+PSBjb3VudCApCisgICAgICAgIGRlbHRhID0gY291bnQ7CisKKyAgICAgIHppcC0+Y3Vyc29yICs9IGRlbHRhOworICAgICAgemlwLT5wb3MgICAgKz0gZGVsdGE7CisKKyAgICAgIGNvdW50IC09IGRlbHRhOworICAgICAgaWYgKCBjb3VudCA9PSAwICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGVycm9yID0gZnRfZ3ppcF9maWxlX2ZpbGxfb3V0cHV0KCB6aXAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9VTG9uZworICBmdF9nemlwX2ZpbGVfaW8oIEZUX0daaXBGaWxlICB6aXAsCisgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgIHBvcywKKyAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBjb3VudCApCisgIHsKKyAgICBGVF9VTG9uZyAgcmVzdWx0ID0gMDsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIC8qIFJlc2V0IGluZmxhdGUgc3RyZWFtIGlmIHdlJ3JlIHNlZWtpbmcgYmFja3dhcmRzLiAgICAgICAgKi8KKyAgICAvKiBZZXMsIHRoYXQgaXMgbm90IHRvbyBlZmZpY2llbnQsIGJ1dCBpdCBzYXZlcyBtZW1vcnkgOi0pICovCisgICAgaWYgKCBwb3MgPCB6aXAtPnBvcyApCisgICAgeworICAgICAgZXJyb3IgPSBmdF9nemlwX2ZpbGVfcmVzZXQoIHppcCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBza2lwIHVud2FudGVkIGJ5dGVzICovCisgICAgaWYgKCBwb3MgPiB6aXAtPnBvcyApCisgICAgeworICAgICAgZXJyb3IgPSBmdF9nemlwX2ZpbGVfc2tpcF9vdXRwdXQoIHppcCwgKEZUX1VMb25nKSggcG9zIC0gemlwLT5wb3MgKSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogbm93IHJlYWQgdGhlIGRhdGEgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIEZUX1VMb25nICBkZWx0YTsKKworCisgICAgICBkZWx0YSA9IChGVF9VTG9uZykoIHppcC0+bGltaXQgLSB6aXAtPmN1cnNvciApOworICAgICAgaWYgKCBkZWx0YSA+PSBjb3VudCApCisgICAgICAgIGRlbHRhID0gY291bnQ7CisKKyAgICAgIEZUX01FTV9DT1BZKCBidWZmZXIsIHppcC0+Y3Vyc29yLCBkZWx0YSApOworICAgICAgYnVmZmVyICAgICAgKz0gZGVsdGE7CisgICAgICByZXN1bHQgICAgICArPSBkZWx0YTsKKyAgICAgIHppcC0+Y3Vyc29yICs9IGRlbHRhOworICAgICAgemlwLT5wb3MgICAgKz0gZGVsdGE7CisKKyAgICAgIGNvdW50IC09IGRlbHRhOworICAgICAgaWYgKCBjb3VudCA9PSAwICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGVycm9yID0gZnRfZ3ppcF9maWxlX2ZpbGxfb3V0cHV0KCB6aXAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgRyBaICAgRSBNIEIgRSBEIEQgSSBOIEcgICBTIFQgUiBFIEEgTSAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBmdF9nemlwX3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfR1ppcEZpbGUgIHppcCAgICA9IChGVF9HWmlwRmlsZSlzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlcjsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKworICAgIGlmICggemlwICkKKyAgICB7CisgICAgICAvKiBmaW5hbGl6ZSBnemlwIGZpbGUgZGVzY3JpcHRvciAqLworICAgICAgZnRfZ3ppcF9maWxlX2RvbmUoIHppcCApOworCisgICAgICBGVF9GUkVFKCB6aXAgKTsKKworICAgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX1VMb25nCisgIGZ0X2d6aXBfc3RyZWFtX2lvKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zLAorICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50ICkKKyAgeworICAgIEZUX0daaXBGaWxlICB6aXAgPSAoRlRfR1ppcEZpbGUpc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXI7CisKKworICAgIHJldHVybiBmdF9nemlwX2ZpbGVfaW8oIHppcCwgcG9zLCBidWZmZXIsIGNvdW50ICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9VTG9uZworICBmdF9nemlwX2dldF91bmNvbXByZXNzZWRfc2l6ZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX1VMb25nICBvbGRfcG9zOworICAgIEZUX1VMb25nICByZXN1bHQgPSAwOworCisKKyAgICBvbGRfcG9zID0gc3RyZWFtLT5wb3M7CisgICAgaWYgKCAhRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgc3RyZWFtLT5zaXplIC0gNCApICkKKyAgICB7CisgICAgICByZXN1bHQgPSBGVF9TdHJlYW1fUmVhZFVMb25nKCBzdHJlYW0sICZlcnJvciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHJlc3VsdCA9IDA7CisKKyAgICAgICh2b2lkKUZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIG9sZF9wb3MgKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z3ppcC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3Blbkd6aXAoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc291cmNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5OworICAgIEZUX0daaXBGaWxlICB6aXAgPSBOVUxMOworCisKKyAgICBpZiAoICFzdHJlYW0gfHwgIXNvdXJjZSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fSGFuZGxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbWVtb3J5ID0gc291cmNlLT5tZW1vcnk7CisKKyAgICAvKgorICAgICAqICBjaGVjayB0aGUgaGVhZGVyIHJpZ2h0IG5vdzsgdGhpcyBwcmV2ZW50cyBhbGxvY2F0aW5nIHVuLW5lY2Vzc2FyeQorICAgICAqICBvYmplY3RzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtCisgICAgICovCisgICAgZXJyb3IgPSBmdF9nemlwX2NoZWNrX2hlYWRlciggc291cmNlICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9aRVJPKCBzdHJlYW0gKTsKKyAgICBzdHJlYW0tPm1lbW9yeSA9IG1lbW9yeTsKKworICAgIGlmICggIUZUX1FORVcoIHppcCApICkKKyAgICB7CisgICAgICBlcnJvciA9IGZ0X2d6aXBfZmlsZV9pbml0KCB6aXAsIHN0cmVhbSwgc291cmNlICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfRlJFRSggemlwICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSB6aXA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgV2UgdXNlIHRoZSBmb2xsb3dpbmcgdHJpY2sgdG8gdHJ5IHRvIGRyYW1hdGljYWxseSBpbXByb3ZlIHRoZQorICAgICAqICBwZXJmb3JtYW5jZSB3aGlsZSBkZWFsaW5nIHdpdGggc21hbGwgZmlsZXMuICBJZiB0aGUgb3JpZ2luYWwgc3RyZWFtCisgICAgICogIHNpemUgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiB0aHJlc2hvbGQsIHdlIHRyeSB0byBsb2FkIHRoZSB3aG9sZSBmb250CisgICAgICogIGZpbGUgaW50byBtZW1vcnkuICBUaGlzIHNhdmVzIHVzIGZyb20gdXNpbmcgdGhlIDMyS0IgYnVmZmVyIG5lZWRlZAorICAgICAqICB0byBpbmZsYXRlIHRoZSBmaWxlLCBwbHVzIHRoZSB0d28gNEtCIGludGVybWVkaWF0ZSBpbnB1dC9vdXRwdXQKKyAgICAgKiAgYnVmZmVycyB1c2VkIGluIHRoZSBgRlRfR1ppcEZpbGUnIHN0cnVjdHVyZS4KKyAgICAgKi8KKyAgICB7CisgICAgICBGVF9VTG9uZyAgemlwX3NpemUgPSBmdF9nemlwX2dldF91bmNvbXByZXNzZWRfc2l6ZSggc291cmNlICk7CisKKworICAgICAgaWYgKCB6aXBfc2l6ZSAhPSAwICYmIHppcF9zaXplIDwgNDAgKiAxMDI0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIHppcF9idWZmID0gTlVMTDsKKworCisgICAgICAgIGlmICggIUZUX0FMTE9DKCB6aXBfYnVmZiwgemlwX3NpemUgKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VTG9uZyAgY291bnQ7CisKKworICAgICAgICAgIGNvdW50ID0gZnRfZ3ppcF9maWxlX2lvKCB6aXAsIDAsIHppcF9idWZmLCB6aXBfc2l6ZSApOworICAgICAgICAgIGlmICggY291bnQgPT0gemlwX3NpemUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZ0X2d6aXBfZmlsZV9kb25lKCB6aXAgKTsKKyAgICAgICAgICAgIEZUX0ZSRUUoIHppcCApOworCisgICAgICAgICAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHN0cmVhbS0+c2l6ZSAgPSB6aXBfc2l6ZTsKKyAgICAgICAgICAgIHN0cmVhbS0+cG9zICAgPSAwOworICAgICAgICAgICAgc3RyZWFtLT5iYXNlICA9IHppcF9idWZmOworICAgICAgICAgICAgc3RyZWFtLT5yZWFkICA9IE5VTEw7CisgICAgICAgICAgICBzdHJlYW0tPmNsb3NlID0gZnRfZ3ppcF9zdHJlYW1fY2xvc2U7CisKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBmdF9nemlwX2ZpbGVfaW8oIHppcCwgMCwgTlVMTCwgMCApOworICAgICAgICAgIEZUX0ZSRUUoIHppcF9idWZmICk7CisgICAgICAgIH0KKyAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgICB9CisgICAgfQorCisgICAgc3RyZWFtLT5zaXplICA9IDB4N0ZGRkZGRkZMOyAgLyogZG9uJ3Qga25vdyB0aGUgcmVhbCBzaXplISAqLworICAgIHN0cmVhbS0+cG9zICAgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgPSAwOworICAgIHN0cmVhbS0+cmVhZCAgPSBmdF9nemlwX3N0cmVhbV9pbzsKKyAgICBzdHJlYW0tPmNsb3NlID0gZnRfZ3ppcF9zdHJlYW1fY2xvc2U7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnemlwLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0d6aXBfVW5jb21wcmVzcyggRlRfTWVtb3J5ICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBvdXRwdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaW5wdXRfbGVuICkKKyAgeworICAgIHpfc3RyZWFtICBzdHJlYW07CisgICAgaW50ICAgICAgIGVycjsKKworCisgICAgLyogY2hlY2sgZm9yIGBpbnB1dCcgZGVsYXllZCB0byBgaW5mbGF0ZScgKi8KKworICAgIGlmICggIW1lbW9yeSB8fCAhIG91dHB1dF9sZW4gfHwgIW91dHB1dCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIC8qIHRoaXMgZnVuY3Rpb24gaXMgbW9kZWxlZCBhZnRlciB6bGliJ3MgYHVuY29tcHJlc3MnIGZ1bmN0aW9uICovCisKKyAgICBzdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWlucHV0OworICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWlucHV0X2xlbjsKKworICAgIHN0cmVhbS5uZXh0X291dCAgPSBvdXRwdXQ7CisgICAgc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpvdXRwdXRfbGVuOworCisgICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKWZ0X2d6aXBfYWxsb2M7CisgICAgc3RyZWFtLnpmcmVlICA9IChmcmVlX2Z1bmMpIGZ0X2d6aXBfZnJlZTsKKyAgICBzdHJlYW0ub3BhcXVlID0gbWVtb3J5OworCisgICAgZXJyID0gaW5mbGF0ZUluaXQyKCAmc3RyZWFtLCBNQVhfV0JJVFMgKTsKKyAgICBpZiAoIGVyciAhPSBaX09LICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZXJyID0gaW5mbGF0ZSggJnN0cmVhbSwgWl9GSU5JU0ggKTsKKyAgICBpZiAoIGVyciAhPSBaX1NUUkVBTV9FTkQgKQorICAgIHsKKyAgICAgIGluZmxhdGVFbmQoICZzdHJlYW0gKTsKKyAgICAgIGlmICggZXJyID09IFpfT0sgKQorICAgICAgICBlcnIgPSBaX0JVRl9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICpvdXRwdXRfbGVuID0gc3RyZWFtLnRvdGFsX291dDsKKworICAgICAgZXJyID0gaW5mbGF0ZUVuZCggJnN0cmVhbSApOworICAgIH0KKworICAgIGlmICggZXJyID09IFpfTUVNX0VSUk9SICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworCisgICAgaWYgKCBlcnIgPT0gWl9CVUZfRVJST1IgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKworICAgIGlmICggZXJyID09IFpfREFUQV9FUlJPUiApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX09wZW5HemlwKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHNvdXJjZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworICAgIEZUX1VOVVNFRCggc291cmNlICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0d6aXBfVW5jb21wcmVzcyggRlRfTWVtb3J5ICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBvdXRwdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaW5wdXRfbGVuICkKKyAgeworICAgIEZUX1VOVVNFRCggbWVtb3J5ICk7CisgICAgRlRfVU5VU0VEKCBvdXRwdXQgKTsKKyAgICBGVF9VTlVTRUQoIG91dHB1dF9sZW4gKTsKKyAgICBGVF9VTlVTRUQoIGlucHV0ICk7CisgICAgRlRfVU5VU0VEKCBpbnB1dF9sZW4gKTsKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgIH0KKworI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mYmxvY2suYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZTJkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mYmxvY2suYwpAQCAtMCwwICsxLDM4NyBAQAorLyogaW5mYmxvY2suYyAtLSBpbnRlcnByZXQgYW5kIHByb2Nlc3MgYmxvY2sgdHlwZXMgdG8gbGFzdCBibG9jaworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorI2luY2x1ZGUgImluZmJsb2NrLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZjb2Rlcy5oIgorI2luY2x1ZGUgImluZnV0aWwuaCIKKworCisvKiBzaW1wbGlmeSB0aGUgdXNlIG9mIHRoZSBpbmZsYXRlX2h1ZnQgdHlwZSB3aXRoIHNvbWUgZGVmaW5lcyAqLworI2RlZmluZSBleG9wIHdvcmQud2hhdC5FeG9wCisjZGVmaW5lIGJpdHMgd29yZC53aGF0LkJpdHMKKworLyogVGFibGUgZm9yIGRlZmxhdGUgZnJvbSBQS1pJUCdzIGFwcG5vdGUudHh0LiAqLworbG9jYWwgY29uc3QgdUludCBib3JkZXJbXSA9IHsgLyogT3JkZXIgb2YgdGhlIGJpdCBsZW5ndGggY29kZSBsZW5ndGhzICovCisgICAgICAgIDE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OworCisvKgorICAgTm90ZXMgYmV5b25kIHRoZSAxLjkzYSBhcHBub3RlLnR4dDoKKworICAgMS4gRGlzdGFuY2UgcG9pbnRlcnMgbmV2ZXIgcG9pbnQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dAorICAgICAgc3RyZWFtLgorICAgMi4gRGlzdGFuY2UgcG9pbnRlcnMgY2FuIHBvaW50IGJhY2sgYWNyb3NzIGJsb2NrcywgdXAgdG8gMzJrIGF3YXkuCisgICAzLiBUaGVyZSBpcyBhbiBpbXBsaWVkIG1heGltdW0gb2YgNyBiaXRzIGZvciB0aGUgYml0IGxlbmd0aCB0YWJsZSBhbmQKKyAgICAgIDE1IGJpdHMgZm9yIHRoZSBhY3R1YWwgZGF0YS4KKyAgIDQuIElmIG9ubHkgb25lIGNvZGUgZXhpc3RzLCB0aGVuIGl0IGlzIGVuY29kZWQgdXNpbmcgb25lIGJpdC4gIChaZXJvCisgICAgICB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgYnV0IHBlcmhhcHMgYSBsaXR0bGUgY29uZnVzaW5nLikgIElmIHR3bworICAgICAgY29kZXMgZXhpc3QsIHRoZXkgYXJlIGNvZGVkIHVzaW5nIG9uZSBiaXQgZWFjaCAoMCBhbmQgMSkuCisgICA1LiBUaGVyZSBpcyBubyB3YXkgb2Ygc2VuZGluZyB6ZXJvIGRpc3RhbmNlIGNvZGVzLS1hIGR1bW15IG11c3QgYmUKKyAgICAgIHNlbnQgaWYgdGhlcmUgYXJlIG5vbmUuICAoSGlzdG9yeTogYSBwcmUgMi4wIHZlcnNpb24gb2YgUEtaSVAgd291bGQKKyAgICAgIHN0b3JlIGJsb2NrcyB3aXRoIG5vIGRpc3RhbmNlIGNvZGVzLCBidXQgdGhpcyB3YXMgZGlzY292ZXJlZCB0byBiZQorICAgICAgdG9vIGhhcnNoIGEgY3JpdGVyaW9uLikgIFZhbGlkIG9ubHkgZm9yIDEuOTNhLiAgMi4wNGMgZG9lcyBhbGxvdworICAgICAgemVybyBkaXN0YW5jZSBjb2Rlcywgd2hpY2ggaXMgc2VudCBhcyBvbmUgY29kZSBvZiB6ZXJvIGJpdHMgaW4KKyAgICAgIGxlbmd0aC4KKyAgIDYuIFRoZXJlIGFyZSB1cCB0byAyODYgbGl0ZXJhbC9sZW5ndGggY29kZXMuICBDb2RlIDI1NiByZXByZXNlbnRzIHRoZQorICAgICAgZW5kLW9mLWJsb2NrLiAgTm90ZSBob3dldmVyIHRoYXQgdGhlIHN0YXRpYyBsZW5ndGggdHJlZSBkZWZpbmVzCisgICAgICAyODggY29kZXMganVzdCB0byBmaWxsIG91dCB0aGUgSHVmZm1hbiBjb2Rlcy4gIENvZGVzIDI4NiBhbmQgMjg3CisgICAgICBjYW5ub3QgYmUgdXNlZCB0aG91Z2gsIHNpbmNlIHRoZXJlIGlzIG5vIGxlbmd0aCBiYXNlIG9yIGV4dHJhIGJpdHMKKyAgICAgIGRlZmluZWQgZm9yIHRoZW0uICBTaW1pbGFyaWx5LCB0aGVyZSBhcmUgdXAgdG8gMzAgZGlzdGFuY2UgY29kZXMuCisgICAgICBIb3dldmVyLCBzdGF0aWMgdHJlZXMgZGVmaW5lIDMyIGNvZGVzIChhbGwgNSBiaXRzKSB0byBmaWxsIG91dCB0aGUKKyAgICAgIEh1ZmZtYW4gY29kZXMsIGJ1dCB0aGUgbGFzdCB0d28gaGFkIGJldHRlciBub3Qgc2hvdyB1cCBpbiB0aGUgZGF0YS4KKyAgIDcuIFVuemlwIGNhbiBjaGVjayBkeW5hbWljIEh1ZmZtYW4gYmxvY2tzIGZvciBjb21wbGV0ZSBjb2RlIHNldHMuCisgICAgICBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgYSBzaW5nbGUgY29kZSB3b3VsZCBub3QgYmUgY29tcGxldGUgKHNlZSAjNCkuCisgICA4LiBUaGUgZml2ZSBiaXRzIGZvbGxvd2luZyB0aGUgYmxvY2sgdHlwZSBpcyByZWFsbHkgdGhlIG51bWJlciBvZgorICAgICAgbGl0ZXJhbCBjb2RlcyBzZW50IG1pbnVzIDI1Ny4KKyAgIDkuIExlbmd0aCBjb2RlcyA4LDE2LDE2IGFyZSBpbnRlcnByZXRlZCBhcyAxMyBsZW5ndGggY29kZXMgb2YgOCBiaXRzCisgICAgICAoMSs2KzYpLiAgVGhlcmVmb3JlLCB0byBvdXRwdXQgdGhyZWUgdGltZXMgdGhlIGxlbmd0aCwgeW91IG91dHB1dAorICAgICAgdGhyZWUgY29kZXMgKDErMSsxKSwgd2hlcmVhcyB0byBvdXRwdXQgZm91ciB0aW1lcyB0aGUgc2FtZSBsZW5ndGgsCisgICAgICB5b3Ugb25seSBuZWVkIHR3byBjb2RlcyAoMSszKS4gIEhtbS4KKyAgMTAuIEluIHRoZSB0cmVlIHJlY29uc3RydWN0aW9uIGFsZ29yaXRobSwgQ29kZSA9IENvZGUgKyBJbmNyZW1lbnQKKyAgICAgIG9ubHkgaWYgQml0TGVuZ3RoKGkpIGlzIG5vdCB6ZXJvLiAgKFByZXR0eSBvYnZpb3VzLikKKyAgMTEuIENvcnJlY3Rpb246IDQgQml0czogIyBvZiBCaXQgTGVuZ3RoIGNvZGVzIC0gNCAgICAgKDQgLSAxOSkKKyAgMTIuIE5vdGU6IGxlbmd0aCBjb2RlIDI4NCBjYW4gcmVwcmVzZW50IDIyNy0yNTgsIGJ1dCBsZW5ndGggY29kZSAyODUKKyAgICAgIHJlYWxseSBpcyAyNTguICBUaGUgbGFzdCBsZW5ndGggZGVzZXJ2ZXMgaXRzIG93biwgc2hvcnQgY29kZQorICAgICAgc2luY2UgaXQgZ2V0cyB1c2VkIGEgbG90IGluIHZlcnkgcmVkdW5kYW50IGZpbGVzLiAgVGhlIGxlbmd0aAorICAgICAgMjU4IGlzIHNwZWNpYWwgc2luY2UgMjU4IC0gMyAodGhlIG1pbiBtYXRjaCBsZW5ndGgpIGlzIDI1NS4KKyAgMTMuIFRoZSBsaXRlcmFsL2xlbmd0aCBhbmQgZGlzdGFuY2UgY29kZSBiaXQgbGVuZ3RocyBhcmUgcmVhZCBhcyBhCisgICAgICBzaW5nbGUgc3RyZWFtIG9mIGxlbmd0aHMuICBJdCBpcyBwb3NzaWJsZSAoYW5kIGFkdmFudGFnZW91cykgZm9yCisgICAgICBhIHJlcGVhdCBjb2RlICgxNiwgMTcsIG9yIDE4KSB0byBnbyBhY3Jvc3MgdGhlIGJvdW5kYXJ5IGJldHdlZW4KKyAgICAgIHRoZSB0d28gc2V0cyBvZiBsZW5ndGhzLgorICovCisKKworbG9jYWwgdm9pZCBpbmZsYXRlX2Jsb2Nrc19yZXNldCggLyogcywgeiwgYykgKi8KK2luZmxhdGVfYmxvY2tzX3N0YXRlZiAqcywKK3pfc3RyZWFtcCB6LAordUxvbmdmICpjICkKK3sKKyAgaWYgKGMgIT0gWl9OVUxMKQorICAgICpjID0gcy0+Y2hlY2s7CisgIGlmIChzLT5tb2RlID09IEJUUkVFIHx8IHMtPm1vZGUgPT0gRFRSRUUpCisgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKKyAgaWYgKHMtPm1vZGUgPT0gQ09ERVMpCisgICAgaW5mbGF0ZV9jb2Rlc19mcmVlKHMtPnN1Yi5kZWNvZGUuY29kZXMsIHopOworICBzLT5tb2RlID0gVFlQRTsKKyAgcy0+Yml0ayA9IDA7CisgIHMtPmJpdGIgPSAwOworICBzLT5yZWFkID0gcy0+d3JpdGUgPSBzLT53aW5kb3c7CisgIGlmIChzLT5jaGVja2ZuICE9IFpfTlVMTCkKKyAgICB6LT5hZGxlciA9IHMtPmNoZWNrID0gKCpzLT5jaGVja2ZuKSgwTCwgKGNvbnN0IEJ5dGVmICopWl9OVUxMLCAwKTsKKyAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGJsb2NrcyByZXNldFxuIikpOworfQorCisKK2xvY2FsIGluZmxhdGVfYmxvY2tzX3N0YXRlZiAqaW5mbGF0ZV9ibG9ja3NfbmV3KCAvKiB6LCBjLCB3KSAqLworel9zdHJlYW1wIHosCitjaGVja19mdW5jIGMsCit1SW50IHcgKQoreworICBpbmZsYXRlX2Jsb2Nrc19zdGF0ZWYgKnM7CisKKyAgaWYgKChzID0gKGluZmxhdGVfYmxvY2tzX3N0YXRlZiAqKVpBTExPQworICAgICAgICh6LDEsc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX2Jsb2Nrc19zdGF0ZSkpKSA9PSBaX05VTEwpCisgICAgcmV0dXJuIHM7CisgIGlmICgocy0+aHVmdHMgPQorICAgICAgIChpbmZsYXRlX2h1ZnQgKilaQUxMT0Moeiwgc2l6ZW9mKGluZmxhdGVfaHVmdCksIE1BTlkpKSA9PSBaX05VTEwpCisgIHsKKyAgICBaRlJFRSh6LCBzKTsKKyAgICByZXR1cm4gWl9OVUxMOworICB9CisgIGlmICgocy0+d2luZG93ID0gKEJ5dGVmICopWkFMTE9DKHosIDEsIHcpKSA9PSBaX05VTEwpCisgIHsKKyAgICBaRlJFRSh6LCBzLT5odWZ0cyk7CisgICAgWkZSRUUoeiwgcyk7CisgICAgcmV0dXJuIFpfTlVMTDsKKyAgfQorICBzLT5lbmQgPSBzLT53aW5kb3cgKyB3OworICBzLT5jaGVja2ZuID0gYzsKKyAgcy0+bW9kZSA9IFRZUEU7CisgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBibG9ja3MgYWxsb2NhdGVkXG4iKSk7CisgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHMsIHosIFpfTlVMTCk7CisgIHJldHVybiBzOworfQorCisKK2xvY2FsIGludCBpbmZsYXRlX2Jsb2NrcyggLyogcywgeiwgcikgKi8KK2luZmxhdGVfYmxvY2tzX3N0YXRlZiAqcywKK3pfc3RyZWFtcCB6LAoraW50IHIgKQoreworICB1SW50IHQ7ICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgKi8KKyAgdUxvbmcgYjsgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KKyAgdUludCBrOyAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLworICBCeXRlZiAqcDsgICAgICAgICAgICAgLyogaW5wdXQgZGF0YSBwb2ludGVyICovCisgIHVJbnQgbjsgICAgICAgICAgICAgICAvKiBieXRlcyBhdmFpbGFibGUgdGhlcmUgKi8KKyAgQnl0ZWYgKnE7ICAgICAgICAgICAgIC8qIG91dHB1dCB3aW5kb3cgd3JpdGUgcG9pbnRlciAqLworICB1SW50IG07ICAgICAgICAgICAgICAgLyogYnl0ZXMgdG8gZW5kIG9mIHdpbmRvdyBvciByZWFkIHBvaW50ZXIgKi8KKworICAvKiBjb3B5IGlucHV0L291dHB1dCBpbmZvcm1hdGlvbiB0byBsb2NhbHMgKFVQREFURSBtYWNybyByZXN0b3JlcykgKi8KKyAgTE9BRAorCisgIC8qIHByb2Nlc3MgaW5wdXQgYmFzZWQgb24gY3VycmVudCBzdGF0ZSAqLworICB3aGlsZSAoMSkgc3dpdGNoIChzLT5tb2RlKQorICB7CisgICAgY2FzZSBUWVBFOgorICAgICAgTkVFREJJVFMoMykKKyAgICAgIHQgPSAodUludCliICYgNzsKKyAgICAgIHMtPmxhc3QgPSB0ICYgMTsKKyAgICAgIHN3aXRjaCAodCA+PiAxKQorICAgICAgeworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCAqLworICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXG4iLAorICAgICAgICAgICAgICAgICBzLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICBEVU1QQklUUygzKQorICAgICAgICAgIHQgPSBrICYgNzsgICAgICAgICAgICAgICAgICAgIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi8KKyAgICAgICAgICBEVU1QQklUUyh0KQorICAgICAgICAgIHMtPm1vZGUgPSBMRU5TOyAgICAgICAgICAgICAgIC8qIGdldCBsZW5ndGggb2Ygc3RvcmVkIGJsb2NrICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgKi8KKyAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXG4iLAorICAgICAgICAgICAgICAgICBzLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICB7CisgICAgICAgICAgICB1SW50IGJsLCBiZDsKKyAgICAgICAgICAgIGluZmxhdGVfaHVmdCAqdGwsICp0ZDsKKworICAgICAgICAgICAgaW5mbGF0ZV90cmVlc19maXhlZCgmYmwsICZiZCwgKGNvbnN0IGluZmxhdGVfaHVmdCoqKSZ0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBpbmZsYXRlX2h1ZnQqKikmdGQsIHopOworICAgICAgICAgICAgcy0+c3ViLmRlY29kZS5jb2RlcyA9IGluZmxhdGVfY29kZXNfbmV3KGJsLCBiZCwgdGwsIHRkLCB6KTsKKyAgICAgICAgICAgIGlmIChzLT5zdWIuZGVjb2RlLmNvZGVzID09IFpfTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgciA9IFpfTUVNX0VSUk9SOworICAgICAgICAgICAgICBMRUFWRQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBEVU1QQklUUygzKQorICAgICAgICAgIHMtPm1vZGUgPSBDT0RFUzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljICovCisgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgZHluYW1pYyBjb2RlcyBibG9jayVzXG4iLAorICAgICAgICAgICAgICAgICBzLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKKyAgICAgICAgICBEVU1QQklUUygzKQorICAgICAgICAgIHMtPm1vZGUgPSBUQUJMRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbGxlZ2FsICovCisgICAgICAgICAgRFVNUEJJVFMoMykKKyAgICAgICAgICBzLT5tb2RlID0gQkFEOworICAgICAgICAgIHotPm1zZyA9IChjaGFyKikiaW52YWxpZCBibG9jayB0eXBlIjsKKyAgICAgICAgICByID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgIExFQVZFCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExFTlM6CisgICAgICBORUVEQklUUygzMikKKyAgICAgIGlmICgoKCh+YikgPj4gMTYpICYgMHhmZmZmKSAhPSAoYiAmIDB4ZmZmZikpCisgICAgICB7CisgICAgICAgIHMtPm1vZGUgPSBCQUQ7CisgICAgICAgIHotPm1zZyA9IChjaGFyKikiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyI7CisgICAgICAgIHIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgIExFQVZFCisgICAgICB9CisgICAgICBzLT5zdWIubGVmdCA9ICh1SW50KWIgJiAweGZmZmY7CisgICAgICBiID0gayA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIGR1bXAgYml0cyAqLworICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICV1XG4iLCBzLT5zdWIubGVmdCkpOworICAgICAgcy0+bW9kZSA9IHMtPnN1Yi5sZWZ0ID8gU1RPUkVEIDogKHMtPmxhc3QgPyBEUlkgOiBUWVBFKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1RPUkVEOgorICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgTEVBVkUKKyAgICAgIE5FRURPVVQKKyAgICAgIHQgPSBzLT5zdWIubGVmdDsKKyAgICAgIGlmICh0ID4gbikgdCA9IG47CisgICAgICBpZiAodCA+IG0pIHQgPSBtOworICAgICAgem1lbWNweShxLCBwLCB0KTsKKyAgICAgIHAgKz0gdDsgIG4gLT0gdDsKKyAgICAgIHEgKz0gdDsgIG0gLT0gdDsKKyAgICAgIGlmICgocy0+c3ViLmxlZnQgLT0gdCkgIT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHN0b3JlZCBlbmQsICVsdSB0b3RhbCBvdXRcbiIsCisgICAgICAgICAgICAgIHotPnRvdGFsX291dCArIChxID49IHMtPnJlYWQgPyBxIC0gcy0+cmVhZCA6CisgICAgICAgICAgICAgIChzLT5lbmQgLSBzLT5yZWFkKSArIChxIC0gcy0+d2luZG93KSkpKTsKKyAgICAgIHMtPm1vZGUgPSBzLT5sYXN0ID8gRFJZIDogVFlQRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVEFCTEU6CisgICAgICBORUVEQklUUygxNCkKKyAgICAgIHMtPnN1Yi50cmVlcy50YWJsZSA9IHQgPSAodUludCliICYgMHgzZmZmOworI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORAorICAgICAgaWYgKCh0ICYgMHgxZikgPiAyOSB8fCAoKHQgPj4gNSkgJiAweDFmKSA+IDI5KQorICAgICAgeworICAgICAgICBzLT5tb2RlID0gQkFEOworICAgICAgICB6LT5tc2cgPSAoY2hhciopInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKKyAgICAgICAgciA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgTEVBVkUKKyAgICAgIH0KKyNlbmRpZgorICAgICAgdCA9IDI1OCArICh0ICYgMHgxZikgKyAoKHQgPj4gNSkgJiAweDFmKTsKKyAgICAgIGlmICgocy0+c3ViLnRyZWVzLmJsZW5zID0gKHVJbnRmKilaQUxMT0MoeiwgdCwgc2l6ZW9mKHVJbnQpKSkgPT0gWl9OVUxMKQorICAgICAgeworICAgICAgICByID0gWl9NRU1fRVJST1I7CisgICAgICAgIExFQVZFCisgICAgICB9CisgICAgICBEVU1QQklUUygxNCkKKyAgICAgIHMtPnN1Yi50cmVlcy5pbmRleCA9IDA7CisgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHRhYmxlIHNpemVzIG9rXG4iKSk7CisgICAgICBzLT5tb2RlID0gQlRSRUU7CisgICAgY2FzZSBCVFJFRToKKyAgICAgIHdoaWxlIChzLT5zdWIudHJlZXMuaW5kZXggPCA0ICsgKHMtPnN1Yi50cmVlcy50YWJsZSA+PiAxMCkpCisgICAgICB7CisgICAgICAgIE5FRURCSVRTKDMpCisgICAgICAgIHMtPnN1Yi50cmVlcy5ibGVuc1tib3JkZXJbcy0+c3ViLnRyZWVzLmluZGV4KytdXSA9ICh1SW50KWIgJiA3OworICAgICAgICBEVU1QQklUUygzKQorICAgICAgfQorICAgICAgd2hpbGUgKHMtPnN1Yi50cmVlcy5pbmRleCA8IDE5KQorICAgICAgICBzLT5zdWIudHJlZXMuYmxlbnNbYm9yZGVyW3MtPnN1Yi50cmVlcy5pbmRleCsrXV0gPSAwOworICAgICAgcy0+c3ViLnRyZWVzLmJiID0gNzsKKyAgICAgIHQgPSBpbmZsYXRlX3RyZWVzX2JpdHMocy0+c3ViLnRyZWVzLmJsZW5zLCAmcy0+c3ViLnRyZWVzLmJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3ViLnRyZWVzLnRiLCBzLT5odWZ0cywgeik7CisgICAgICBpZiAodCAhPSBaX09LKQorICAgICAgeworICAgICAgICByID0gdDsKKyAgICAgICAgaWYgKHIgPT0gWl9EQVRBX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKKyAgICAgICAgICBzLT5tb2RlID0gQkFEOworICAgICAgICB9CisgICAgICAgIExFQVZFCisgICAgICB9CisgICAgICBzLT5zdWIudHJlZXMuaW5kZXggPSAwOworICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBiaXRzIHRyZWUgb2tcbiIpKTsKKyAgICAgIHMtPm1vZGUgPSBEVFJFRTsKKyAgICBjYXNlIERUUkVFOgorICAgICAgd2hpbGUgKHQgPSBzLT5zdWIudHJlZXMudGFibGUsCisgICAgICAgICAgICAgcy0+c3ViLnRyZWVzLmluZGV4IDwgMjU4ICsgKHQgJiAweDFmKSArICgodCA+PiA1KSAmIDB4MWYpKQorICAgICAgeworICAgICAgICBpbmZsYXRlX2h1ZnQgKmg7CisgICAgICAgIHVJbnQgaSwgaiwgYzsKKworICAgICAgICB0ID0gcy0+c3ViLnRyZWVzLmJiOworICAgICAgICBORUVEQklUUyh0KQorICAgICAgICBoID0gcy0+c3ViLnRyZWVzLnRiICsgKCh1SW50KWIgJiBpbmZsYXRlX21hc2tbdF0pOworICAgICAgICB0ID0gaC0+Yml0czsKKyAgICAgICAgYyA9IGgtPmJhc2U7CisgICAgICAgIGlmIChjIDwgMTYpCisgICAgICAgIHsKKyAgICAgICAgICBEVU1QQklUUyh0KQorICAgICAgICAgIHMtPnN1Yi50cmVlcy5ibGVuc1tzLT5zdWIudHJlZXMuaW5kZXgrK10gPSBjOworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogYyA9PSAxNi4uMTggKi8KKyAgICAgICAgeworICAgICAgICAgIGkgPSBjID09IDE4ID8gNyA6IGMgLSAxNDsKKyAgICAgICAgICBqID0gYyA9PSAxOCA/IDExIDogMzsKKyAgICAgICAgICBORUVEQklUUyh0ICsgaSkKKyAgICAgICAgICBEVU1QQklUUyh0KQorICAgICAgICAgIGogKz0gKHVJbnQpYiAmIGluZmxhdGVfbWFza1tpXTsKKyAgICAgICAgICBEVU1QQklUUyhpKQorICAgICAgICAgIGkgPSBzLT5zdWIudHJlZXMuaW5kZXg7CisgICAgICAgICAgdCA9IHMtPnN1Yi50cmVlcy50YWJsZTsKKyAgICAgICAgICBpZiAoaSArIGogPiAyNTggKyAodCAmIDB4MWYpICsgKCh0ID4+IDUpICYgMHgxZikgfHwKKyAgICAgICAgICAgICAgKGMgPT0gMTYgJiYgaSA8IDEpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFpGUkVFKHosIHMtPnN1Yi50cmVlcy5ibGVucyk7CisgICAgICAgICAgICBzLT5tb2RlID0gQkFEOworICAgICAgICAgICAgei0+bXNnID0gKGNoYXIqKSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKKyAgICAgICAgICAgIHIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBMRUFWRQorICAgICAgICAgIH0KKyAgICAgICAgICBjID0gYyA9PSAxNiA/IHMtPnN1Yi50cmVlcy5ibGVuc1tpIC0gMV0gOiAwOworICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHMtPnN1Yi50cmVlcy5ibGVuc1tpKytdID0gYzsKKyAgICAgICAgICB9IHdoaWxlICgtLWopOworICAgICAgICAgIHMtPnN1Yi50cmVlcy5pbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHMtPnN1Yi50cmVlcy50YiA9IFpfTlVMTDsKKyAgICAgIHsKKyAgICAgICAgdUludCBibCwgYmQ7CisgICAgICAgIGluZmxhdGVfaHVmdCAqdGwsICp0ZDsKKyAgICAgICAgaW5mbGF0ZV9jb2Rlc19zdGF0ZWYgKmM7CisKKyAgICAgICAgYmwgPSA5OyAgICAgICAgIC8qIG11c3QgYmUgPD0gOSBmb3IgbG9va2FoZWFkIGFzc3VtcHRpb25zICovCisgICAgICAgIGJkID0gNjsgICAgICAgICAvKiBtdXN0IGJlIDw9IDkgZm9yIGxvb2thaGVhZCBhc3N1bXB0aW9ucyAqLworICAgICAgICB0ID0gcy0+c3ViLnRyZWVzLnRhYmxlOworICAgICAgICB0ID0gaW5mbGF0ZV90cmVlc19keW5hbWljKDI1NyArICh0ICYgMHgxZiksIDEgKyAoKHQgPj4gNSkgJiAweDFmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdWIudHJlZXMuYmxlbnMsICZibCwgJmJkLCAmdGwsICZ0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5odWZ0cywgeik7CisgICAgICAgIGlmICh0ICE9IFpfT0spCisgICAgICAgIHsKKyAgICAgICAgICBpZiAodCA9PSAodUludClaX0RBVEFfRVJST1IpCisgICAgICAgICAgeworICAgICAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKKyAgICAgICAgICAgIHMtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgfQorICAgICAgICAgIHIgPSB0OworICAgICAgICAgIExFQVZFCisgICAgICAgIH0KKyAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICB0cmVlcyBva1xuIikpOworICAgICAgICBpZiAoKGMgPSBpbmZsYXRlX2NvZGVzX25ldyhibCwgYmQsIHRsLCB0ZCwgeikpID09IFpfTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHIgPSBaX01FTV9FUlJPUjsKKyAgICAgICAgICBMRUFWRQorICAgICAgICB9CisgICAgICAgIHMtPnN1Yi5kZWNvZGUuY29kZXMgPSBjOworICAgICAgfQorICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKKyAgICAgIHMtPm1vZGUgPSBDT0RFUzsKKyAgICBjYXNlIENPREVTOgorICAgICAgVVBEQVRFCisgICAgICBpZiAoKHIgPSBpbmZsYXRlX2NvZGVzKHMsIHosIHIpKSAhPSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHJldHVybiBpbmZsYXRlX2ZsdXNoKHMsIHosIHIpOworICAgICAgciA9IFpfT0s7CisgICAgICBpbmZsYXRlX2NvZGVzX2ZyZWUocy0+c3ViLmRlY29kZS5jb2Rlcywgeik7CisgICAgICBMT0FECisgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIGNvZGVzIGVuZCwgJWx1IHRvdGFsIG91dFxuIiwKKyAgICAgICAgICAgICAgei0+dG90YWxfb3V0ICsgKHEgPj0gcy0+cmVhZCA/IHEgLSBzLT5yZWFkIDoKKyAgICAgICAgICAgICAgKHMtPmVuZCAtIHMtPnJlYWQpICsgKHEgLSBzLT53aW5kb3cpKSkpOworICAgICAgaWYgKCFzLT5sYXN0KQorICAgICAgeworICAgICAgICBzLT5tb2RlID0gVFlQRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzLT5tb2RlID0gRFJZOworICAgIGNhc2UgRFJZOgorICAgICAgRkxVU0gKKyAgICAgIGlmIChzLT5yZWFkICE9IHMtPndyaXRlKQorICAgICAgICBMRUFWRQorICAgICAgcy0+bW9kZSA9IERPTkU7CisgICAgY2FzZSBET05FOgorICAgICAgciA9IFpfU1RSRUFNX0VORDsKKyAgICAgIExFQVZFCisgICAgY2FzZSBCQUQ6CisgICAgICByID0gWl9EQVRBX0VSUk9SOworICAgICAgTEVBVkUKKyAgICBkZWZhdWx0OgorICAgICAgciA9IFpfU1RSRUFNX0VSUk9SOworICAgICAgTEVBVkUKKyAgfQorI2lmZGVmIE5FRURfRFVNTVlfUkVUVVJOCisgIHJldHVybiAwOworI2VuZGlmCit9CisKKworbG9jYWwgaW50IGluZmxhdGVfYmxvY2tzX2ZyZWUoIC8qIHMsIHopICovCitpbmZsYXRlX2Jsb2Nrc19zdGF0ZWYgKnMsCit6X3N0cmVhbXAgeiApCit7CisgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHMsIHosIFpfTlVMTCk7CisgIFpGUkVFKHosIHMtPndpbmRvdyk7CisgIFpGUkVFKHosIHMtPmh1ZnRzKTsKKyAgWkZSRUUoeiwgcyk7CisgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBibG9ja3MgZnJlZWRcbiIpKTsKKyAgcmV0dXJuIFpfT0s7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZmJsb2NrLmggYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjUzNWExCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZmJsb2NrLmgKQEAgLTAsMCArMSwzNiBAQAorLyogaW5mYmxvY2suaCAtLSBoZWFkZXIgdG8gdXNlIGluZmJsb2NrLmMKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCisgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgKi8KKworI2lmbmRlZiBfSU5GQkxPQ0tfSAorI2RlZmluZSBfSU5GQkxPQ0tfSAorCitzdHJ1Y3QgaW5mbGF0ZV9ibG9ja3Nfc3RhdGU7Cit0eXBlZGVmIHN0cnVjdCBpbmZsYXRlX2Jsb2Nrc19zdGF0ZSBGQVIgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmOworCitsb2NhbCAgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICogaW5mbGF0ZV9ibG9ja3NfbmV3IE9GKCgKKyAgICB6X3N0cmVhbXAgeiwKKyAgICBjaGVja19mdW5jIGMsICAgICAgICAgICAgICAgLyogY2hlY2sgZnVuY3Rpb24gKi8KKyAgICB1SW50IHcpKTsgICAgICAgICAgICAgICAgICAgLyogd2luZG93IHNpemUgKi8KKworbG9jYWwgIGludCBpbmZsYXRlX2Jsb2NrcyBPRigoCisgICAgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICosCisgICAgel9zdHJlYW1wICwKKyAgICBpbnQpKTsgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbCByZXR1cm4gY29kZSAqLworCitsb2NhbCAgdm9pZCBpbmZsYXRlX2Jsb2Nrc19yZXNldCBPRigoCisgICAgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICosCisgICAgel9zdHJlYW1wICwKKyAgICB1TG9uZ2YgKikpOyAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIHZhbHVlIG9uIG91dHB1dCAqLworCitsb2NhbCAgaW50IGluZmxhdGVfYmxvY2tzX2ZyZWUgT0YoKAorICAgIGluZmxhdGVfYmxvY2tzX3N0YXRlZiAqLAorICAgIHpfc3RyZWFtcCkpOworCisjZW5kaWYgLyogX0lORkJMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZjb2Rlcy5jIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZmNvZGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiZmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZjb2Rlcy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKiBpbmZjb2Rlcy5jIC0tIHByb2Nlc3MgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZSBwYWlycworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorI2luY2x1ZGUgImluZnRyZWVzLmgiCisjaW5jbHVkZSAiaW5mYmxvY2suaCIKKyNpbmNsdWRlICJpbmZjb2Rlcy5oIgorI2luY2x1ZGUgImluZnV0aWwuaCIKKworLyogc2ltcGxpZnkgdGhlIHVzZSBvZiB0aGUgaW5mbGF0ZV9odWZ0IHR5cGUgd2l0aCBzb21lIGRlZmluZXMgKi8KKyNkZWZpbmUgZXhvcCB3b3JkLndoYXQuRXhvcAorI2RlZmluZSBiaXRzIHdvcmQud2hhdC5CaXRzCisKK3R5cGVkZWYgZW51bSB7ICAgICAgICAvKiB3YWl0aW5nIGZvciAiaToiPWlucHV0LCAibzoiPW91dHB1dCwgIng6Ij1ub3RoaW5nICovCisgICAgICBTVEFSVCwgICAgLyogeDogc2V0IHVwIGZvciBMRU4gKi8KKyAgICAgIExFTiwgICAgICAvKiBpOiBnZXQgbGVuZ3RoL2xpdGVyYWwvZW9iIG5leHQgKi8KKyAgICAgIExFTkVYVCwgICAvKiBpOiBnZXR0aW5nIGxlbmd0aCBleHRyYSAoaGF2ZSBiYXNlKSAqLworICAgICAgRElTVCwgICAgIC8qIGk6IGdldCBkaXN0YW5jZSBuZXh0ICovCisgICAgICBESVNURVhULCAgLyogaTogZ2V0dGluZyBkaXN0YW5jZSBleHRyYSAqLworICAgICAgQ09QWSwgICAgIC8qIG86IGNvcHlpbmcgYnl0ZXMgaW4gd2luZG93LCB3YWl0aW5nIGZvciBzcGFjZSAqLworICAgICAgTElULCAgICAgIC8qIG86IGdvdCBsaXRlcmFsLCB3YWl0aW5nIGZvciBvdXRwdXQgc3BhY2UgKi8KKyAgICAgIFdBU0gsICAgICAvKiBvOiBnb3QgZW9iLCBwb3NzaWJseSBzdGlsbCBvdXRwdXQgd2FpdGluZyAqLworICAgICAgRU5ELCAgICAgIC8qIHg6IGdvdCBlb2IgYW5kIGFsbCBkYXRhIGZsdXNoZWQgKi8KKyAgICAgIEJBRENPREV9ICAvKiB4OiBnb3QgZXJyb3IgKi8KK2luZmxhdGVfY29kZXNfbW9kZTsKKworLyogaW5mbGF0ZSBjb2RlcyBwcml2YXRlIHN0YXRlICovCitzdHJ1Y3QgaW5mbGF0ZV9jb2Rlc19zdGF0ZSB7CisKKyAgLyogbW9kZSAqLworICBpbmZsYXRlX2NvZGVzX21vZGUgbW9kZTsgICAgICAvKiBjdXJyZW50IGluZmxhdGVfY29kZXMgbW9kZSAqLworCisgIC8qIG1vZGUgZGVwZW5kZW50IGluZm9ybWF0aW9uICovCisgIHVJbnQgbGVuOworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIGluZmxhdGVfaHVmdCAqdHJlZTsgICAgICAgLyogcG9pbnRlciBpbnRvIHRyZWUgKi8KKyAgICAgIHVJbnQgbmVlZDsgICAgICAgICAgICAgICAgLyogYml0cyBuZWVkZWQgKi8KKyAgICB9IGNvZGU7ICAgICAgICAgICAgIC8qIGlmIExFTiBvciBESVNULCB3aGVyZSBpbiB0cmVlICovCisgICAgdUludCBsaXQ7ICAgICAgICAgICAvKiBpZiBMSVQsIGxpdGVyYWwgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdUludCBnZXQ7ICAgICAgICAgICAgICAgICAvKiBiaXRzIHRvIGdldCBmb3IgZXh0cmEgKi8KKyAgICAgIHVJbnQgZGlzdDsgICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayB0byBjb3B5IGZyb20gKi8KKyAgICB9IGNvcHk7ICAgICAgICAgICAgIC8qIGlmIEVYVCBvciBDT1BZLCB3aGVyZSBhbmQgaG93IG11Y2ggKi8KKyAgfSBzdWI7ICAgICAgICAgICAgICAgIC8qIHN1Ym1vZGUgKi8KKworICAvKiBtb2RlIGluZGVwZW5kZW50IGluZm9ybWF0aW9uICovCisgIEJ5dGUgbGJpdHM7ICAgICAgICAgICAvKiBsdHJlZSBiaXRzIGRlY29kZWQgcGVyIGJyYW5jaCAqLworICBCeXRlIGRiaXRzOyAgICAgICAgICAgLyogZHRyZWUgYml0cyBkZWNvZGVyIHBlciBicmFuY2ggKi8KKyAgaW5mbGF0ZV9odWZ0ICpsdHJlZTsgICAgICAgICAgLyogbGl0ZXJhbC9sZW5ndGgvZW9iIHRyZWUgKi8KKyAgaW5mbGF0ZV9odWZ0ICpkdHJlZTsgICAgICAgICAgLyogZGlzdGFuY2UgdHJlZSAqLworCit9OworCisKK2xvY2FsIGluZmxhdGVfY29kZXNfc3RhdGVmICppbmZsYXRlX2NvZGVzX25ldyggLyogYmwsIGJkLCB0bCwgdGQsIHopICovCit1SW50IGJsLCB1SW50IGJkLAoraW5mbGF0ZV9odWZ0ICp0bCwKK2luZmxhdGVfaHVmdCAqdGQsIC8qIG5lZWQgc2VwYXJhdGUgZGVjbGFyYXRpb24gZm9yIEJvcmxhbmQgQysrICovCit6X3N0cmVhbXAgeiApCit7CisgIGluZmxhdGVfY29kZXNfc3RhdGVmICpjOworCisgIGlmICgoYyA9IChpbmZsYXRlX2NvZGVzX3N0YXRlZiAqKQorICAgICAgIFpBTExPQyh6LDEsc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX2NvZGVzX3N0YXRlKSkpICE9IFpfTlVMTCkKKyAgeworICAgIGMtPm1vZGUgPSBTVEFSVDsKKyAgICBjLT5sYml0cyA9IChCeXRlKWJsOworICAgIGMtPmRiaXRzID0gKEJ5dGUpYmQ7CisgICAgYy0+bHRyZWUgPSB0bDsKKyAgICBjLT5kdHJlZSA9IHRkOworICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgY29kZXMgbmV3XG4iKSk7CisgIH0KKyAgcmV0dXJuIGM7Cit9CisKKworbG9jYWwgaW50IGluZmxhdGVfY29kZXMoIC8qIHMsIHosIHIpICovCitpbmZsYXRlX2Jsb2Nrc19zdGF0ZWYgKnMsCit6X3N0cmVhbXAgeiwKK2ludCByICkKK3sKKyAgdUludCBqOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBzdG9yYWdlICovCisgIGluZmxhdGVfaHVmdCAqdDsgICAgICAvKiB0ZW1wb3JhcnkgcG9pbnRlciAqLworICB1SW50IGU7ICAgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBvciBvcGVyYXRpb24gKi8KKyAgdUxvbmcgYjsgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KKyAgdUludCBrOyAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLworICBCeXRlZiAqcDsgICAgICAgICAgICAgLyogaW5wdXQgZGF0YSBwb2ludGVyICovCisgIHVJbnQgbjsgICAgICAgICAgICAgICAvKiBieXRlcyBhdmFpbGFibGUgdGhlcmUgKi8KKyAgQnl0ZWYgKnE7ICAgICAgICAgICAgIC8qIG91dHB1dCB3aW5kb3cgd3JpdGUgcG9pbnRlciAqLworICB1SW50IG07ICAgICAgICAgICAgICAgLyogYnl0ZXMgdG8gZW5kIG9mIHdpbmRvdyBvciByZWFkIHBvaW50ZXIgKi8KKyAgQnl0ZWYgKmY7ICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gY29weSBzdHJpbmdzIGZyb20gKi8KKyAgaW5mbGF0ZV9jb2Rlc19zdGF0ZWYgKmMgPSBzLT5zdWIuZGVjb2RlLmNvZGVzOyAgLyogY29kZXMgc3RhdGUgKi8KKworICAvKiBjb3B5IGlucHV0L291dHB1dCBpbmZvcm1hdGlvbiB0byBsb2NhbHMgKFVQREFURSBtYWNybyByZXN0b3JlcykgKi8KKyAgTE9BRAorCisgIC8qIHByb2Nlc3MgaW5wdXQgYW5kIG91dHB1dCBiYXNlZCBvbiBjdXJyZW50IHN0YXRlICovCisgIHdoaWxlICgxKSBzd2l0Y2ggKGMtPm1vZGUpCisgIHsgICAgICAgICAgICAgLyogd2FpdGluZyBmb3IgImk6Ij1pbnB1dCwgIm86Ij1vdXRwdXQsICJ4OiI9bm90aGluZyAqLworICAgIGNhc2UgU1RBUlQ6ICAgICAgICAgLyogeDogc2V0IHVwIGZvciBMRU4gKi8KKyNpZm5kZWYgU0xPVworICAgICAgaWYgKG0gPj0gMjU4ICYmIG4gPj0gMTApCisgICAgICB7CisgICAgICAgIFVQREFURQorICAgICAgICByID0gaW5mbGF0ZV9mYXN0KGMtPmxiaXRzLCBjLT5kYml0cywgYy0+bHRyZWUsIGMtPmR0cmVlLCBzLCB6KTsKKyAgICAgICAgTE9BRAorICAgICAgICBpZiAociAhPSBaX09LKQorICAgICAgICB7CisgICAgICAgICAgYy0+bW9kZSA9IHIgPT0gWl9TVFJFQU1fRU5EID8gV0FTSCA6IEJBRENPREU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyNlbmRpZiAvKiAhU0xPVyAqLworICAgICAgYy0+c3ViLmNvZGUubmVlZCA9IGMtPmxiaXRzOworICAgICAgYy0+c3ViLmNvZGUudHJlZSA9IGMtPmx0cmVlOworICAgICAgYy0+bW9kZSA9IExFTjsKKyAgICBjYXNlIExFTjogICAgICAgICAgIC8qIGk6IGdldCBsZW5ndGgvbGl0ZXJhbC9lb2IgbmV4dCAqLworICAgICAgaiA9IGMtPnN1Yi5jb2RlLm5lZWQ7CisgICAgICBORUVEQklUUyhqKQorICAgICAgdCA9IGMtPnN1Yi5jb2RlLnRyZWUgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1tqXSk7CisgICAgICBEVU1QQklUUyh0LT5iaXRzKQorICAgICAgZSA9ICh1SW50KSh0LT5leG9wKTsKKyAgICAgIGlmIChlID09IDApICAgICAgICAgICAgICAgLyogbGl0ZXJhbCAqLworICAgICAgeworICAgICAgICBjLT5zdWIubGl0ID0gdC0+YmFzZTsKKyAgICAgICAgVHJhY2V2digoc3RkZXJyLCB0LT5iYXNlID49IDB4MjAgJiYgdC0+YmFzZSA8IDB4N2YgPworICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgorICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdC0+YmFzZSkpOworICAgICAgICBjLT5tb2RlID0gTElUOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChlICYgMTYpICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCisgICAgICB7CisgICAgICAgIGMtPnN1Yi5jb3B5LmdldCA9IGUgJiAxNTsKKyAgICAgICAgYy0+bGVuID0gdC0+YmFzZTsKKyAgICAgICAgYy0+bW9kZSA9IExFTkVYVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKGUgJiA2NCkgPT0gMCkgICAgICAgIC8qIG5leHQgdGFibGUgKi8KKyAgICAgIHsKKyAgICAgICAgYy0+c3ViLmNvZGUubmVlZCA9IGU7CisgICAgICAgIGMtPnN1Yi5jb2RlLnRyZWUgPSB0ICsgdC0+YmFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoZSAmIDMyKSAgICAgICAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqLworICAgICAgeworICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOworICAgICAgICBjLT5tb2RlID0gV0FTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjLT5tb2RlID0gQkFEQ09ERTsgICAgICAgIC8qIGludmFsaWQgY29kZSAqLworICAgICAgei0+bXNnID0gKGNoYXIqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiOworICAgICAgciA9IFpfREFUQV9FUlJPUjsKKyAgICAgIExFQVZFCisgICAgY2FzZSBMRU5FWFQ6ICAgICAgICAvKiBpOiBnZXR0aW5nIGxlbmd0aCBleHRyYSAoaGF2ZSBiYXNlKSAqLworICAgICAgaiA9IGMtPnN1Yi5jb3B5LmdldDsKKyAgICAgIE5FRURCSVRTKGopCisgICAgICBjLT5sZW4gKz0gKHVJbnQpYiAmIGluZmxhdGVfbWFza1tqXTsKKyAgICAgIERVTVBCSVRTKGopCisgICAgICBjLT5zdWIuY29kZS5uZWVkID0gYy0+ZGJpdHM7CisgICAgICBjLT5zdWIuY29kZS50cmVlID0gYy0+ZHRyZWU7CisgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxuIiwgYy0+bGVuKSk7CisgICAgICBjLT5tb2RlID0gRElTVDsKKyAgICBjYXNlIERJU1Q6ICAgICAgICAgIC8qIGk6IGdldCBkaXN0YW5jZSBuZXh0ICovCisgICAgICBqID0gYy0+c3ViLmNvZGUubmVlZDsKKyAgICAgIE5FRURCSVRTKGopCisgICAgICB0ID0gYy0+c3ViLmNvZGUudHJlZSArICgodUludCliICYgaW5mbGF0ZV9tYXNrW2pdKTsKKyAgICAgIERVTVBCSVRTKHQtPmJpdHMpCisgICAgICBlID0gKHVJbnQpKHQtPmV4b3ApOworICAgICAgaWYgKGUgJiAxNikgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSAqLworICAgICAgeworICAgICAgICBjLT5zdWIuY29weS5nZXQgPSBlICYgMTU7CisgICAgICAgIGMtPnN1Yi5jb3B5LmRpc3QgPSB0LT5iYXNlOworICAgICAgICBjLT5tb2RlID0gRElTVEVYVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKGUgJiA2NCkgPT0gMCkgICAgICAgIC8qIG5leHQgdGFibGUgKi8KKyAgICAgIHsKKyAgICAgICAgYy0+c3ViLmNvZGUubmVlZCA9IGU7CisgICAgICAgIGMtPnN1Yi5jb2RlLnRyZWUgPSB0ICsgdC0+YmFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjLT5tb2RlID0gQkFEQ09ERTsgICAgICAgIC8qIGludmFsaWQgY29kZSAqLworICAgICAgei0+bXNnID0gKGNoYXIqKSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOworICAgICAgciA9IFpfREFUQV9FUlJPUjsKKyAgICAgIExFQVZFCisgICAgY2FzZSBESVNURVhUOiAgICAgICAvKiBpOiBnZXR0aW5nIGRpc3RhbmNlIGV4dHJhICovCisgICAgICBqID0gYy0+c3ViLmNvcHkuZ2V0OworICAgICAgTkVFREJJVFMoaikKKyAgICAgIGMtPnN1Yi5jb3B5LmRpc3QgKz0gKHVJbnQpYiAmIGluZmxhdGVfbWFza1tqXTsKKyAgICAgIERVTVBCSVRTKGopCisgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XG4iLCBjLT5zdWIuY29weS5kaXN0KSk7CisgICAgICBjLT5tb2RlID0gQ09QWTsKKyAgICBjYXNlIENPUFk6ICAgICAgICAgIC8qIG86IGNvcHlpbmcgYnl0ZXMgaW4gd2luZG93LCB3YWl0aW5nIGZvciBzcGFjZSAqLworICAgICAgZiA9IHEgLSBjLT5zdWIuY29weS5kaXN0OworICAgICAgd2hpbGUgKGYgPCBzLT53aW5kb3cpICAgICAgICAgICAgIC8qIG1vZHVsbyB3aW5kb3cgc2l6ZS0id2hpbGUiIGluc3RlYWQgKi8KKyAgICAgICAgZiArPSBzLT5lbmQgLSBzLT53aW5kb3c7ICAgICAgICAvKiBvZiAiaWYiIGhhbmRsZXMgaW52YWxpZCBkaXN0YW5jZXMgKi8KKyAgICAgIHdoaWxlIChjLT5sZW4pCisgICAgICB7CisgICAgICAgIE5FRURPVVQKKyAgICAgICAgT1VUQllURSgqZisrKQorICAgICAgICBpZiAoZiA9PSBzLT5lbmQpCisgICAgICAgICAgZiA9IHMtPndpbmRvdzsKKyAgICAgICAgYy0+bGVuLS07CisgICAgICB9CisgICAgICBjLT5tb2RlID0gU1RBUlQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIExJVDogICAgICAgICAgIC8qIG86IGdvdCBsaXRlcmFsLCB3YWl0aW5nIGZvciBvdXRwdXQgc3BhY2UgKi8KKyAgICAgIE5FRURPVVQKKyAgICAgIE9VVEJZVEUoYy0+c3ViLmxpdCkKKyAgICAgIGMtPm1vZGUgPSBTVEFSVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgV0FTSDogICAgICAgICAgLyogbzogZ290IGVvYiwgcG9zc2libHkgbW9yZSBvdXRwdXQgKi8KKyAgICAgIGlmIChrID4gNykgICAgICAgIC8qIHJldHVybiB1bnVzZWQgYnl0ZSwgaWYgYW55ICovCisgICAgICB7CisgICAgICAgIEFzc2VydChrIDwgMTYsICJpbmZsYXRlX2NvZGVzIGdyYWJiZWQgdG9vIG1hbnkgYnl0ZXMiKQorICAgICAgICBrIC09IDg7CisgICAgICAgIG4rKzsKKyAgICAgICAgcC0tOyAgICAgICAgICAgIC8qIGNhbiBhbHdheXMgcmV0dXJuIG9uZSAqLworICAgICAgfQorICAgICAgRkxVU0gKKyAgICAgIGlmIChzLT5yZWFkICE9IHMtPndyaXRlKQorICAgICAgICBMRUFWRQorICAgICAgYy0+bW9kZSA9IEVORDsKKyAgICBjYXNlIEVORDoKKyAgICAgIHIgPSBaX1NUUkVBTV9FTkQ7CisgICAgICBMRUFWRQorICAgIGNhc2UgQkFEQ09ERTogICAgICAgLyogeDogZ290IGVycm9yICovCisgICAgICByID0gWl9EQVRBX0VSUk9SOworICAgICAgTEVBVkUKKyAgICBkZWZhdWx0OgorICAgICAgciA9IFpfU1RSRUFNX0VSUk9SOworICAgICAgTEVBVkUKKyAgfQorI2lmZGVmIE5FRURfRFVNTVlfUkVUVVJOCisgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsgIC8qIFNvbWUgZHVtYiBjb21waWxlcnMgY29tcGxhaW4gd2l0aG91dCB0aGlzICovCisjZW5kaWYKK30KKworCitsb2NhbCB2b2lkIGluZmxhdGVfY29kZXNfZnJlZSggLyogYywgeikgKi8KK2luZmxhdGVfY29kZXNfc3RhdGVmICpjLAorel9zdHJlYW1wIHogKQoreworICBaRlJFRSh6LCBjKTsKKyAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBmcmVlXG4iKSk7Cit9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mY29kZXMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZjb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NGQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mY29kZXMuaApAQCAtMCwwICsxLDMxIEBACisvKiBpbmZjb2Rlcy5oIC0tIGhlYWRlciB0byB1c2UgaW5mY29kZXMuYworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisjaWZuZGVmIF9JTkZDT0RFU19ICisjZGVmaW5lIF9JTkZDT0RFU19ICisKK3N0cnVjdCBpbmZsYXRlX2NvZGVzX3N0YXRlOwordHlwZWRlZiBzdHJ1Y3QgaW5mbGF0ZV9jb2Rlc19zdGF0ZSBGQVIgaW5mbGF0ZV9jb2Rlc19zdGF0ZWY7CisKK2xvY2FsIGluZmxhdGVfY29kZXNfc3RhdGVmICppbmZsYXRlX2NvZGVzX25ldyBPRigoCisgICAgdUludCwgdUludCwKKyAgICBpbmZsYXRlX2h1ZnQgKiwgaW5mbGF0ZV9odWZ0ICosCisgICAgel9zdHJlYW1wICkpOworCitsb2NhbCBpbnQgaW5mbGF0ZV9jb2RlcyBPRigoCisgICAgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICosCisgICAgel9zdHJlYW1wICwKKyAgICBpbnQpKTsKKworbG9jYWwgdm9pZCBpbmZsYXRlX2NvZGVzX2ZyZWUgT0YoKAorICAgIGluZmxhdGVfY29kZXNfc3RhdGVmICosCisgICAgel9zdHJlYW1wICkpOworCisjZW5kaWYgLyogX0lORkNPREVTX0ggKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZmaXhlZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZmZpeGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0NzYwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZmaXhlZC5oCkBAIC0wLDAgKzEsMTUxIEBACisvKiBpbmZmaXhlZC5oIC0tIHRhYmxlIGZvciBkZWNvZGluZyBmaXhlZCBjb2RlcworICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1ha2V0cmVlLmMgcHJvZ3JhbQorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCitsb2NhbCBjb25zdCB1SW50IGZpeGVkX2JsID0gOTsKK2xvY2FsIGNvbnN0IHVJbnQgZml4ZWRfYmQgPSA1OworbG9jYWwgY29uc3QgaW5mbGF0ZV9odWZ0IGZpeGVkX3RsW10gPSB7CisgICAge3t7OTYsN319LDI1Nn0sIHt7ezAsOH19LDgwfSwge3t7MCw4fX0sMTZ9LCB7e3s4NCw4fX0sMTE1fSwKKyAgICB7e3s4Miw3fX0sMzF9LCB7e3swLDh9fSwxMTJ9LCB7e3swLDh9fSw0OH0sIHt7ezAsOX19LDE5Mn0sCisgICAge3t7ODAsN319LDEwfSwge3t7MCw4fX0sOTZ9LCB7e3swLDh9fSwzMn0sIHt7ezAsOX19LDE2MH0sCisgICAge3t7MCw4fX0sMH0sIHt7ezAsOH19LDEyOH0sIHt7ezAsOH19LDY0fSwge3t7MCw5fX0sMjI0fSwKKyAgICB7e3s4MCw3fX0sNn0sIHt7ezAsOH19LDg4fSwge3t7MCw4fX0sMjR9LCB7e3swLDl9fSwxNDR9LAorICAgIHt7ezgzLDd9fSw1OX0sIHt7ezAsOH19LDEyMH0sIHt7ezAsOH19LDU2fSwge3t7MCw5fX0sMjA4fSwKKyAgICB7e3s4MSw3fX0sMTd9LCB7e3swLDh9fSwxMDR9LCB7e3swLDh9fSw0MH0sIHt7ezAsOX19LDE3Nn0sCisgICAge3t7MCw4fX0sOH0sIHt7ezAsOH19LDEzNn0sIHt7ezAsOH19LDcyfSwge3t7MCw5fX0sMjQwfSwKKyAgICB7e3s4MCw3fX0sNH0sIHt7ezAsOH19LDg0fSwge3t7MCw4fX0sMjB9LCB7e3s4NSw4fX0sMjI3fSwKKyAgICB7e3s4Myw3fX0sNDN9LCB7e3swLDh9fSwxMTZ9LCB7e3swLDh9fSw1Mn0sIHt7ezAsOX19LDIwMH0sCisgICAge3t7ODEsN319LDEzfSwge3t7MCw4fX0sMTAwfSwge3t7MCw4fX0sMzZ9LCB7e3swLDl9fSwxNjh9LAorICAgIHt7ezAsOH19LDR9LCB7e3swLDh9fSwxMzJ9LCB7e3swLDh9fSw2OH0sIHt7ezAsOX19LDIzMn0sCisgICAge3t7ODAsN319LDh9LCB7e3swLDh9fSw5Mn0sIHt7ezAsOH19LDI4fSwge3t7MCw5fX0sMTUyfSwKKyAgICB7e3s4NCw3fX0sODN9LCB7e3swLDh9fSwxMjR9LCB7e3swLDh9fSw2MH0sIHt7ezAsOX19LDIxNn0sCisgICAge3t7ODIsN319LDIzfSwge3t7MCw4fX0sMTA4fSwge3t7MCw4fX0sNDR9LCB7e3swLDl9fSwxODR9LAorICAgIHt7ezAsOH19LDEyfSwge3t7MCw4fX0sMTQwfSwge3t7MCw4fX0sNzZ9LCB7e3swLDl9fSwyNDh9LAorICAgIHt7ezgwLDd9fSwzfSwge3t7MCw4fX0sODJ9LCB7e3swLDh9fSwxOH0sIHt7ezg1LDh9fSwxNjN9LAorICAgIHt7ezgzLDd9fSwzNX0sIHt7ezAsOH19LDExNH0sIHt7ezAsOH19LDUwfSwge3t7MCw5fX0sMTk2fSwKKyAgICB7e3s4MSw3fX0sMTF9LCB7e3swLDh9fSw5OH0sIHt7ezAsOH19LDM0fSwge3t7MCw5fX0sMTY0fSwKKyAgICB7e3swLDh9fSwyfSwge3t7MCw4fX0sMTMwfSwge3t7MCw4fX0sNjZ9LCB7e3swLDl9fSwyMjh9LAorICAgIHt7ezgwLDd9fSw3fSwge3t7MCw4fX0sOTB9LCB7e3swLDh9fSwyNn0sIHt7ezAsOX19LDE0OH0sCisgICAge3t7ODQsN319LDY3fSwge3t7MCw4fX0sMTIyfSwge3t7MCw4fX0sNTh9LCB7e3swLDl9fSwyMTJ9LAorICAgIHt7ezgyLDd9fSwxOX0sIHt7ezAsOH19LDEwNn0sIHt7ezAsOH19LDQyfSwge3t7MCw5fX0sMTgwfSwKKyAgICB7e3swLDh9fSwxMH0sIHt7ezAsOH19LDEzOH0sIHt7ezAsOH19LDc0fSwge3t7MCw5fX0sMjQ0fSwKKyAgICB7e3s4MCw3fX0sNX0sIHt7ezAsOH19LDg2fSwge3t7MCw4fX0sMjJ9LCB7e3sxOTIsOH19LDB9LAorICAgIHt7ezgzLDd9fSw1MX0sIHt7ezAsOH19LDExOH0sIHt7ezAsOH19LDU0fSwge3t7MCw5fX0sMjA0fSwKKyAgICB7e3s4MSw3fX0sMTV9LCB7e3swLDh9fSwxMDJ9LCB7e3swLDh9fSwzOH0sIHt7ezAsOX19LDE3Mn0sCisgICAge3t7MCw4fX0sNn0sIHt7ezAsOH19LDEzNH0sIHt7ezAsOH19LDcwfSwge3t7MCw5fX0sMjM2fSwKKyAgICB7e3s4MCw3fX0sOX0sIHt7ezAsOH19LDk0fSwge3t7MCw4fX0sMzB9LCB7e3swLDl9fSwxNTZ9LAorICAgIHt7ezg0LDd9fSw5OX0sIHt7ezAsOH19LDEyNn0sIHt7ezAsOH19LDYyfSwge3t7MCw5fX0sMjIwfSwKKyAgICB7e3s4Miw3fX0sMjd9LCB7e3swLDh9fSwxMTB9LCB7e3swLDh9fSw0Nn0sIHt7ezAsOX19LDE4OH0sCisgICAge3t7MCw4fX0sMTR9LCB7e3swLDh9fSwxNDJ9LCB7e3swLDh9fSw3OH0sIHt7ezAsOX19LDI1Mn0sCisgICAge3t7OTYsN319LDI1Nn0sIHt7ezAsOH19LDgxfSwge3t7MCw4fX0sMTd9LCB7e3s4NSw4fX0sMTMxfSwKKyAgICB7e3s4Miw3fX0sMzF9LCB7e3swLDh9fSwxMTN9LCB7e3swLDh9fSw0OX0sIHt7ezAsOX19LDE5NH0sCisgICAge3t7ODAsN319LDEwfSwge3t7MCw4fX0sOTd9LCB7e3swLDh9fSwzM30sIHt7ezAsOX19LDE2Mn0sCisgICAge3t7MCw4fX0sMX0sIHt7ezAsOH19LDEyOX0sIHt7ezAsOH19LDY1fSwge3t7MCw5fX0sMjI2fSwKKyAgICB7e3s4MCw3fX0sNn0sIHt7ezAsOH19LDg5fSwge3t7MCw4fX0sMjV9LCB7e3swLDl9fSwxNDZ9LAorICAgIHt7ezgzLDd9fSw1OX0sIHt7ezAsOH19LDEyMX0sIHt7ezAsOH19LDU3fSwge3t7MCw5fX0sMjEwfSwKKyAgICB7e3s4MSw3fX0sMTd9LCB7e3swLDh9fSwxMDV9LCB7e3swLDh9fSw0MX0sIHt7ezAsOX19LDE3OH0sCisgICAge3t7MCw4fX0sOX0sIHt7ezAsOH19LDEzN30sIHt7ezAsOH19LDczfSwge3t7MCw5fX0sMjQyfSwKKyAgICB7e3s4MCw3fX0sNH0sIHt7ezAsOH19LDg1fSwge3t7MCw4fX0sMjF9LCB7e3s4MCw4fX0sMjU4fSwKKyAgICB7e3s4Myw3fX0sNDN9LCB7e3swLDh9fSwxMTd9LCB7e3swLDh9fSw1M30sIHt7ezAsOX19LDIwMn0sCisgICAge3t7ODEsN319LDEzfSwge3t7MCw4fX0sMTAxfSwge3t7MCw4fX0sMzd9LCB7e3swLDl9fSwxNzB9LAorICAgIHt7ezAsOH19LDV9LCB7e3swLDh9fSwxMzN9LCB7e3swLDh9fSw2OX0sIHt7ezAsOX19LDIzNH0sCisgICAge3t7ODAsN319LDh9LCB7e3swLDh9fSw5M30sIHt7ezAsOH19LDI5fSwge3t7MCw5fX0sMTU0fSwKKyAgICB7e3s4NCw3fX0sODN9LCB7e3swLDh9fSwxMjV9LCB7e3swLDh9fSw2MX0sIHt7ezAsOX19LDIxOH0sCisgICAge3t7ODIsN319LDIzfSwge3t7MCw4fX0sMTA5fSwge3t7MCw4fX0sNDV9LCB7e3swLDl9fSwxODZ9LAorICAgIHt7ezAsOH19LDEzfSwge3t7MCw4fX0sMTQxfSwge3t7MCw4fX0sNzd9LCB7e3swLDl9fSwyNTB9LAorICAgIHt7ezgwLDd9fSwzfSwge3t7MCw4fX0sODN9LCB7e3swLDh9fSwxOX0sIHt7ezg1LDh9fSwxOTV9LAorICAgIHt7ezgzLDd9fSwzNX0sIHt7ezAsOH19LDExNX0sIHt7ezAsOH19LDUxfSwge3t7MCw5fX0sMTk4fSwKKyAgICB7e3s4MSw3fX0sMTF9LCB7e3swLDh9fSw5OX0sIHt7ezAsOH19LDM1fSwge3t7MCw5fX0sMTY2fSwKKyAgICB7e3swLDh9fSwzfSwge3t7MCw4fX0sMTMxfSwge3t7MCw4fX0sNjd9LCB7e3swLDl9fSwyMzB9LAorICAgIHt7ezgwLDd9fSw3fSwge3t7MCw4fX0sOTF9LCB7e3swLDh9fSwyN30sIHt7ezAsOX19LDE1MH0sCisgICAge3t7ODQsN319LDY3fSwge3t7MCw4fX0sMTIzfSwge3t7MCw4fX0sNTl9LCB7e3swLDl9fSwyMTR9LAorICAgIHt7ezgyLDd9fSwxOX0sIHt7ezAsOH19LDEwN30sIHt7ezAsOH19LDQzfSwge3t7MCw5fX0sMTgyfSwKKyAgICB7e3swLDh9fSwxMX0sIHt7ezAsOH19LDEzOX0sIHt7ezAsOH19LDc1fSwge3t7MCw5fX0sMjQ2fSwKKyAgICB7e3s4MCw3fX0sNX0sIHt7ezAsOH19LDg3fSwge3t7MCw4fX0sMjN9LCB7e3sxOTIsOH19LDB9LAorICAgIHt7ezgzLDd9fSw1MX0sIHt7ezAsOH19LDExOX0sIHt7ezAsOH19LDU1fSwge3t7MCw5fX0sMjA2fSwKKyAgICB7e3s4MSw3fX0sMTV9LCB7e3swLDh9fSwxMDN9LCB7e3swLDh9fSwzOX0sIHt7ezAsOX19LDE3NH0sCisgICAge3t7MCw4fX0sN30sIHt7ezAsOH19LDEzNX0sIHt7ezAsOH19LDcxfSwge3t7MCw5fX0sMjM4fSwKKyAgICB7e3s4MCw3fX0sOX0sIHt7ezAsOH19LDk1fSwge3t7MCw4fX0sMzF9LCB7e3swLDl9fSwxNTh9LAorICAgIHt7ezg0LDd9fSw5OX0sIHt7ezAsOH19LDEyN30sIHt7ezAsOH19LDYzfSwge3t7MCw5fX0sMjIyfSwKKyAgICB7e3s4Miw3fX0sMjd9LCB7e3swLDh9fSwxMTF9LCB7e3swLDh9fSw0N30sIHt7ezAsOX19LDE5MH0sCisgICAge3t7MCw4fX0sMTV9LCB7e3swLDh9fSwxNDN9LCB7e3swLDh9fSw3OX0sIHt7ezAsOX19LDI1NH0sCisgICAge3t7OTYsN319LDI1Nn0sIHt7ezAsOH19LDgwfSwge3t7MCw4fX0sMTZ9LCB7e3s4NCw4fX0sMTE1fSwKKyAgICB7e3s4Miw3fX0sMzF9LCB7e3swLDh9fSwxMTJ9LCB7e3swLDh9fSw0OH0sIHt7ezAsOX19LDE5M30sCisgICAge3t7ODAsN319LDEwfSwge3t7MCw4fX0sOTZ9LCB7e3swLDh9fSwzMn0sIHt7ezAsOX19LDE2MX0sCisgICAge3t7MCw4fX0sMH0sIHt7ezAsOH19LDEyOH0sIHt7ezAsOH19LDY0fSwge3t7MCw5fX0sMjI1fSwKKyAgICB7e3s4MCw3fX0sNn0sIHt7ezAsOH19LDg4fSwge3t7MCw4fX0sMjR9LCB7e3swLDl9fSwxNDV9LAorICAgIHt7ezgzLDd9fSw1OX0sIHt7ezAsOH19LDEyMH0sIHt7ezAsOH19LDU2fSwge3t7MCw5fX0sMjA5fSwKKyAgICB7e3s4MSw3fX0sMTd9LCB7e3swLDh9fSwxMDR9LCB7e3swLDh9fSw0MH0sIHt7ezAsOX19LDE3N30sCisgICAge3t7MCw4fX0sOH0sIHt7ezAsOH19LDEzNn0sIHt7ezAsOH19LDcyfSwge3t7MCw5fX0sMjQxfSwKKyAgICB7e3s4MCw3fX0sNH0sIHt7ezAsOH19LDg0fSwge3t7MCw4fX0sMjB9LCB7e3s4NSw4fX0sMjI3fSwKKyAgICB7e3s4Myw3fX0sNDN9LCB7e3swLDh9fSwxMTZ9LCB7e3swLDh9fSw1Mn0sIHt7ezAsOX19LDIwMX0sCisgICAge3t7ODEsN319LDEzfSwge3t7MCw4fX0sMTAwfSwge3t7MCw4fX0sMzZ9LCB7e3swLDl9fSwxNjl9LAorICAgIHt7ezAsOH19LDR9LCB7e3swLDh9fSwxMzJ9LCB7e3swLDh9fSw2OH0sIHt7ezAsOX19LDIzM30sCisgICAge3t7ODAsN319LDh9LCB7e3swLDh9fSw5Mn0sIHt7ezAsOH19LDI4fSwge3t7MCw5fX0sMTUzfSwKKyAgICB7e3s4NCw3fX0sODN9LCB7e3swLDh9fSwxMjR9LCB7e3swLDh9fSw2MH0sIHt7ezAsOX19LDIxN30sCisgICAge3t7ODIsN319LDIzfSwge3t7MCw4fX0sMTA4fSwge3t7MCw4fX0sNDR9LCB7e3swLDl9fSwxODV9LAorICAgIHt7ezAsOH19LDEyfSwge3t7MCw4fX0sMTQwfSwge3t7MCw4fX0sNzZ9LCB7e3swLDl9fSwyNDl9LAorICAgIHt7ezgwLDd9fSwzfSwge3t7MCw4fX0sODJ9LCB7e3swLDh9fSwxOH0sIHt7ezg1LDh9fSwxNjN9LAorICAgIHt7ezgzLDd9fSwzNX0sIHt7ezAsOH19LDExNH0sIHt7ezAsOH19LDUwfSwge3t7MCw5fX0sMTk3fSwKKyAgICB7e3s4MSw3fX0sMTF9LCB7e3swLDh9fSw5OH0sIHt7ezAsOH19LDM0fSwge3t7MCw5fX0sMTY1fSwKKyAgICB7e3swLDh9fSwyfSwge3t7MCw4fX0sMTMwfSwge3t7MCw4fX0sNjZ9LCB7e3swLDl9fSwyMjl9LAorICAgIHt7ezgwLDd9fSw3fSwge3t7MCw4fX0sOTB9LCB7e3swLDh9fSwyNn0sIHt7ezAsOX19LDE0OX0sCisgICAge3t7ODQsN319LDY3fSwge3t7MCw4fX0sMTIyfSwge3t7MCw4fX0sNTh9LCB7e3swLDl9fSwyMTN9LAorICAgIHt7ezgyLDd9fSwxOX0sIHt7ezAsOH19LDEwNn0sIHt7ezAsOH19LDQyfSwge3t7MCw5fX0sMTgxfSwKKyAgICB7e3swLDh9fSwxMH0sIHt7ezAsOH19LDEzOH0sIHt7ezAsOH19LDc0fSwge3t7MCw5fX0sMjQ1fSwKKyAgICB7e3s4MCw3fX0sNX0sIHt7ezAsOH19LDg2fSwge3t7MCw4fX0sMjJ9LCB7e3sxOTIsOH19LDB9LAorICAgIHt7ezgzLDd9fSw1MX0sIHt7ezAsOH19LDExOH0sIHt7ezAsOH19LDU0fSwge3t7MCw5fX0sMjA1fSwKKyAgICB7e3s4MSw3fX0sMTV9LCB7e3swLDh9fSwxMDJ9LCB7e3swLDh9fSwzOH0sIHt7ezAsOX19LDE3M30sCisgICAge3t7MCw4fX0sNn0sIHt7ezAsOH19LDEzNH0sIHt7ezAsOH19LDcwfSwge3t7MCw5fX0sMjM3fSwKKyAgICB7e3s4MCw3fX0sOX0sIHt7ezAsOH19LDk0fSwge3t7MCw4fX0sMzB9LCB7e3swLDl9fSwxNTd9LAorICAgIHt7ezg0LDd9fSw5OX0sIHt7ezAsOH19LDEyNn0sIHt7ezAsOH19LDYyfSwge3t7MCw5fX0sMjIxfSwKKyAgICB7e3s4Miw3fX0sMjd9LCB7e3swLDh9fSwxMTB9LCB7e3swLDh9fSw0Nn0sIHt7ezAsOX19LDE4OX0sCisgICAge3t7MCw4fX0sMTR9LCB7e3swLDh9fSwxNDJ9LCB7e3swLDh9fSw3OH0sIHt7ezAsOX19LDI1M30sCisgICAge3t7OTYsN319LDI1Nn0sIHt7ezAsOH19LDgxfSwge3t7MCw4fX0sMTd9LCB7e3s4NSw4fX0sMTMxfSwKKyAgICB7e3s4Miw3fX0sMzF9LCB7e3swLDh9fSwxMTN9LCB7e3swLDh9fSw0OX0sIHt7ezAsOX19LDE5NX0sCisgICAge3t7ODAsN319LDEwfSwge3t7MCw4fX0sOTd9LCB7e3swLDh9fSwzM30sIHt7ezAsOX19LDE2M30sCisgICAge3t7MCw4fX0sMX0sIHt7ezAsOH19LDEyOX0sIHt7ezAsOH19LDY1fSwge3t7MCw5fX0sMjI3fSwKKyAgICB7e3s4MCw3fX0sNn0sIHt7ezAsOH19LDg5fSwge3t7MCw4fX0sMjV9LCB7e3swLDl9fSwxNDd9LAorICAgIHt7ezgzLDd9fSw1OX0sIHt7ezAsOH19LDEyMX0sIHt7ezAsOH19LDU3fSwge3t7MCw5fX0sMjExfSwKKyAgICB7e3s4MSw3fX0sMTd9LCB7e3swLDh9fSwxMDV9LCB7e3swLDh9fSw0MX0sIHt7ezAsOX19LDE3OX0sCisgICAge3t7MCw4fX0sOX0sIHt7ezAsOH19LDEzN30sIHt7ezAsOH19LDczfSwge3t7MCw5fX0sMjQzfSwKKyAgICB7e3s4MCw3fX0sNH0sIHt7ezAsOH19LDg1fSwge3t7MCw4fX0sMjF9LCB7e3s4MCw4fX0sMjU4fSwKKyAgICB7e3s4Myw3fX0sNDN9LCB7e3swLDh9fSwxMTd9LCB7e3swLDh9fSw1M30sIHt7ezAsOX19LDIwM30sCisgICAge3t7ODEsN319LDEzfSwge3t7MCw4fX0sMTAxfSwge3t7MCw4fX0sMzd9LCB7e3swLDl9fSwxNzF9LAorICAgIHt7ezAsOH19LDV9LCB7e3swLDh9fSwxMzN9LCB7e3swLDh9fSw2OX0sIHt7ezAsOX19LDIzNX0sCisgICAge3t7ODAsN319LDh9LCB7e3swLDh9fSw5M30sIHt7ezAsOH19LDI5fSwge3t7MCw5fX0sMTU1fSwKKyAgICB7e3s4NCw3fX0sODN9LCB7e3swLDh9fSwxMjV9LCB7e3swLDh9fSw2MX0sIHt7ezAsOX19LDIxOX0sCisgICAge3t7ODIsN319LDIzfSwge3t7MCw4fX0sMTA5fSwge3t7MCw4fX0sNDV9LCB7e3swLDl9fSwxODd9LAorICAgIHt7ezAsOH19LDEzfSwge3t7MCw4fX0sMTQxfSwge3t7MCw4fX0sNzd9LCB7e3swLDl9fSwyNTF9LAorICAgIHt7ezgwLDd9fSwzfSwge3t7MCw4fX0sODN9LCB7e3swLDh9fSwxOX0sIHt7ezg1LDh9fSwxOTV9LAorICAgIHt7ezgzLDd9fSwzNX0sIHt7ezAsOH19LDExNX0sIHt7ezAsOH19LDUxfSwge3t7MCw5fX0sMTk5fSwKKyAgICB7e3s4MSw3fX0sMTF9LCB7e3swLDh9fSw5OX0sIHt7ezAsOH19LDM1fSwge3t7MCw5fX0sMTY3fSwKKyAgICB7e3swLDh9fSwzfSwge3t7MCw4fX0sMTMxfSwge3t7MCw4fX0sNjd9LCB7e3swLDl9fSwyMzF9LAorICAgIHt7ezgwLDd9fSw3fSwge3t7MCw4fX0sOTF9LCB7e3swLDh9fSwyN30sIHt7ezAsOX19LDE1MX0sCisgICAge3t7ODQsN319LDY3fSwge3t7MCw4fX0sMTIzfSwge3t7MCw4fX0sNTl9LCB7e3swLDl9fSwyMTV9LAorICAgIHt7ezgyLDd9fSwxOX0sIHt7ezAsOH19LDEwN30sIHt7ezAsOH19LDQzfSwge3t7MCw5fX0sMTgzfSwKKyAgICB7e3swLDh9fSwxMX0sIHt7ezAsOH19LDEzOX0sIHt7ezAsOH19LDc1fSwge3t7MCw5fX0sMjQ3fSwKKyAgICB7e3s4MCw3fX0sNX0sIHt7ezAsOH19LDg3fSwge3t7MCw4fX0sMjN9LCB7e3sxOTIsOH19LDB9LAorICAgIHt7ezgzLDd9fSw1MX0sIHt7ezAsOH19LDExOX0sIHt7ezAsOH19LDU1fSwge3t7MCw5fX0sMjA3fSwKKyAgICB7e3s4MSw3fX0sMTV9LCB7e3swLDh9fSwxMDN9LCB7e3swLDh9fSwzOX0sIHt7ezAsOX19LDE3NX0sCisgICAge3t7MCw4fX0sN30sIHt7ezAsOH19LDEzNX0sIHt7ezAsOH19LDcxfSwge3t7MCw5fX0sMjM5fSwKKyAgICB7e3s4MCw3fX0sOX0sIHt7ezAsOH19LDk1fSwge3t7MCw4fX0sMzF9LCB7e3swLDl9fSwxNTl9LAorICAgIHt7ezg0LDd9fSw5OX0sIHt7ezAsOH19LDEyN30sIHt7ezAsOH19LDYzfSwge3t7MCw5fX0sMjIzfSwKKyAgICB7e3s4Miw3fX0sMjd9LCB7e3swLDh9fSwxMTF9LCB7e3swLDh9fSw0N30sIHt7ezAsOX19LDE5MX0sCisgICAge3t7MCw4fX0sMTV9LCB7e3swLDh9fSwxNDN9LCB7e3swLDh9fSw3OX0sIHt7ezAsOX19LDI1NX0KKyAgfTsKK2xvY2FsIGNvbnN0IGluZmxhdGVfaHVmdCBmaXhlZF90ZFtdID0geworICAgIHt7ezgwLDV9fSwxfSwge3t7ODcsNX19LDI1N30sIHt7ezgzLDV9fSwxN30sIHt7ezkxLDV9fSw0MDk3fSwKKyAgICB7e3s4MSw1fX0sNX0sIHt7ezg5LDV9fSwxMDI1fSwge3t7ODUsNX19LDY1fSwge3t7OTMsNX19LDE2Mzg1fSwKKyAgICB7e3s4MCw1fX0sM30sIHt7ezg4LDV9fSw1MTN9LCB7e3s4NCw1fX0sMzN9LCB7e3s5Miw1fX0sODE5M30sCisgICAge3t7ODIsNX19LDl9LCB7e3s5MCw1fX0sMjA0OX0sIHt7ezg2LDV9fSwxMjl9LCB7e3sxOTIsNX19LDI0NTc3fSwKKyAgICB7e3s4MCw1fX0sMn0sIHt7ezg3LDV9fSwzODV9LCB7e3s4Myw1fX0sMjV9LCB7e3s5MSw1fX0sNjE0NX0sCisgICAge3t7ODEsNX19LDd9LCB7e3s4OSw1fX0sMTUzN30sIHt7ezg1LDV9fSw5N30sIHt7ezkzLDV9fSwyNDU3N30sCisgICAge3t7ODAsNX19LDR9LCB7e3s4OCw1fX0sNzY5fSwge3t7ODQsNX19LDQ5fSwge3t7OTIsNX19LDEyMjg5fSwKKyAgICB7e3s4Miw1fX0sMTN9LCB7e3s5MCw1fX0sMzA3M30sIHt7ezg2LDV9fSwxOTN9LCB7e3sxOTIsNX19LDI0NTc3fQorICB9OwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZmxhdGUuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3N2ZhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZsYXRlLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qIGluZmxhdGUuYyAtLSB6bGliIGludGVyZmFjZSB0byBpbmZsYXRlIG1vZHVsZXMKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAienV0aWwuaCIKKyNpbmNsdWRlICJpbmZibG9jay5oIgorCisjZGVmaW5lICBET05FICBJTkZMQVRFX0RPTkUKKyNkZWZpbmUgIEJBRCAgIElORkxBVEVfQkFECisKK3R5cGVkZWYgZW51bSB7CisgICAgICBNRVRIT0QsICAgLyogd2FpdGluZyBmb3IgbWV0aG9kIGJ5dGUgKi8KKyAgICAgIEZMQUcsICAgICAvKiB3YWl0aW5nIGZvciBmbGFnIGJ5dGUgKi8KKyAgICAgIERJQ1Q0LCAgICAvKiBmb3VyIGRpY3Rpb25hcnkgY2hlY2sgYnl0ZXMgdG8gZ28gKi8KKyAgICAgIERJQ1QzLCAgICAvKiB0aHJlZSBkaWN0aW9uYXJ5IGNoZWNrIGJ5dGVzIHRvIGdvICovCisgICAgICBESUNUMiwgICAgLyogdHdvIGRpY3Rpb25hcnkgY2hlY2sgYnl0ZXMgdG8gZ28gKi8KKyAgICAgIERJQ1QxLCAgICAvKiBvbmUgZGljdGlvbmFyeSBjaGVjayBieXRlIHRvIGdvICovCisgICAgICBESUNUMCwgICAgLyogd2FpdGluZyBmb3IgaW5mbGF0ZVNldERpY3Rpb25hcnkgKi8KKyAgICAgIEJMT0NLUywgICAvKiBkZWNvbXByZXNzaW5nIGJsb2NrcyAqLworICAgICAgQ0hFQ0s0LCAgIC8qIGZvdXIgY2hlY2sgYnl0ZXMgdG8gZ28gKi8KKyAgICAgIENIRUNLMywgICAvKiB0aHJlZSBjaGVjayBieXRlcyB0byBnbyAqLworICAgICAgQ0hFQ0syLCAgIC8qIHR3byBjaGVjayBieXRlcyB0byBnbyAqLworICAgICAgQ0hFQ0sxLCAgIC8qIG9uZSBjaGVjayBieXRlIHRvIGdvICovCisgICAgICBET05FLCAgICAgLyogZmluaXNoZWQgY2hlY2ssIGRvbmUgKi8KKyAgICAgIEJBRH0gICAgICAvKiBnb3QgYW4gZXJyb3ItLXN0YXkgaGVyZSAqLworaW5mbGF0ZV9tb2RlOworCisvKiBpbmZsYXRlIHByaXZhdGUgc3RhdGUgKi8KK3N0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7CisKKyAgLyogbW9kZSAqLworICBpbmZsYXRlX21vZGUgIG1vZGU7ICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi8KKworICAvKiBtb2RlIGRlcGVuZGVudCBpbmZvcm1hdGlvbiAqLworICB1bmlvbiB7CisgICAgdUludCBtZXRob2Q7ICAgICAgICAvKiBpZiBGTEFHUywgbWV0aG9kIGJ5dGUgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdUxvbmcgd2FzOyAgICAgICAgICAgICAgICAvKiBjb21wdXRlZCBjaGVjayB2YWx1ZSAqLworICAgICAgdUxvbmcgbmVlZDsgICAgICAgICAgICAgICAvKiBzdHJlYW0gY2hlY2sgdmFsdWUgKi8KKyAgICB9IGNoZWNrOyAgICAgICAgICAgIC8qIGlmIENIRUNLLCBjaGVjayB2YWx1ZXMgdG8gY29tcGFyZSAqLworICAgIHVJbnQgbWFya2VyOyAgICAgICAgLyogaWYgQkFELCBpbmZsYXRlU3luYydzIG1hcmtlciBieXRlcyBjb3VudCAqLworICB9IHN1YjsgICAgICAgIC8qIHN1Ym1vZGUgKi8KKworICAvKiBtb2RlIGluZGVwZW5kZW50IGluZm9ybWF0aW9uICovCisgIGludCAgbm93cmFwOyAgICAgICAgICAvKiBmbGFnIGZvciBubyB3cmFwcGVyICovCisgIHVJbnQgd2JpdHM7ICAgICAgICAgICAvKiBsb2cyKHdpbmRvdyBzaXplKSAgKDguLjE1LCBkZWZhdWx0cyB0byAxNSkgKi8KKyAgaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmCisgICAgKmJsb2NrczsgICAgICAgICAgICAvKiBjdXJyZW50IGluZmxhdGVfYmxvY2tzIHN0YXRlICovCisKK307CisKKworWkVYUE9SVChpbnQpIGluZmxhdGVSZXNldCggLyogeikgKi8KK3pfc3RyZWFtcCB6ICkKK3sKKyAgaWYgKHogPT0gWl9OVUxMIHx8IHotPnN0YXRlID09IFpfTlVMTCkKKyAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgIHotPnRvdGFsX2luID0gei0+dG90YWxfb3V0ID0gMDsKKyAgei0+bXNnID0gWl9OVUxMOworICB6LT5zdGF0ZS0+bW9kZSA9IHotPnN0YXRlLT5ub3dyYXAgPyBCTE9DS1MgOiBNRVRIT0Q7CisgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHotPnN0YXRlLT5ibG9ja3MsIHosIFpfTlVMTCk7CisgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogcmVzZXRcbiIpKTsKKyAgcmV0dXJuIFpfT0s7Cit9CisKKworWkVYUE9SVChpbnQpIGluZmxhdGVFbmQoIC8qIHopICovCit6X3N0cmVhbXAgeiApCit7CisgIGlmICh6ID09IFpfTlVMTCB8fCB6LT5zdGF0ZSA9PSBaX05VTEwgfHwgei0+emZyZWUgPT0gWl9OVUxMKQorICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgaWYgKHotPnN0YXRlLT5ibG9ja3MgIT0gWl9OVUxMKQorICAgIGluZmxhdGVfYmxvY2tzX2ZyZWUoei0+c3RhdGUtPmJsb2Nrcywgeik7CisgIFpGUkVFKHosIHotPnN0YXRlKTsKKyAgei0+c3RhdGUgPSBaX05VTEw7CisgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogZW5kXG4iKSk7CisgIHJldHVybiBaX09LOworfQorCisKK1pFWFBPUlQoaW50KSBpbmZsYXRlSW5pdDJfKCAvKiB6LCB3LCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkgKi8KK3pfc3RyZWFtcCB6LAoraW50IHcsCitjb25zdCBjaGFyICp2ZXJzaW9uLAoraW50IHN0cmVhbV9zaXplICkKK3sKKyAgaWYgKHZlcnNpb24gPT0gWl9OVUxMIHx8IHZlcnNpb25bMF0gIT0gWkxJQl9WRVJTSU9OWzBdIHx8CisgICAgICBzdHJlYW1fc2l6ZSAhPSBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgcmV0dXJuIFpfVkVSU0lPTl9FUlJPUjsKKworICAvKiBpbml0aWFsaXplIHN0YXRlICovCisgIGlmICh6ID09IFpfTlVMTCkKKyAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgIHotPm1zZyA9IFpfTlVMTDsKKyAgaWYgKHotPnphbGxvYyA9PSBaX05VTEwpCisgIHsKKyAgICB6LT56YWxsb2MgPSB6Y2FsbG9jOworICAgIHotPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyAgfQorICBpZiAoei0+emZyZWUgPT0gWl9OVUxMKSB6LT56ZnJlZSA9IHpjZnJlZTsKKyAgaWYgKCh6LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopCisgICAgICAgWkFMTE9DKHosMSxzaXplb2Yoc3RydWN0IGludGVybmFsX3N0YXRlKSkpID09IFpfTlVMTCkKKyAgICByZXR1cm4gWl9NRU1fRVJST1I7CisgIHotPnN0YXRlLT5ibG9ja3MgPSBaX05VTEw7CisKKyAgLyogaGFuZGxlIHVuZG9jdW1lbnRlZCBub3dyYXAgb3B0aW9uIChubyB6bGliIGhlYWRlciBvciBjaGVjaykgKi8KKyAgei0+c3RhdGUtPm5vd3JhcCA9IDA7CisgIGlmICh3IDwgMCkKKyAgeworICAgIHcgPSAtIHc7CisgICAgei0+c3RhdGUtPm5vd3JhcCA9IDE7CisgIH0KKworICAvKiBzZXQgd2luZG93IHNpemUgKi8KKyAgaWYgKHcgPCA4IHx8IHcgPiAxNSkKKyAgeworICAgIGluZmxhdGVFbmQoeik7CisgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICB9CisgIHotPnN0YXRlLT53Yml0cyA9ICh1SW50KXc7CisKKyAgLyogY3JlYXRlIGluZmxhdGVfYmxvY2tzIHN0YXRlICovCisgIGlmICgoei0+c3RhdGUtPmJsb2NrcyA9CisgICAgICBpbmZsYXRlX2Jsb2Nrc19uZXcoeiwgei0+c3RhdGUtPm5vd3JhcCA/IFpfTlVMTCA6IGFkbGVyMzIsICh1SW50KTEgPDwgdykpCisgICAgICA9PSBaX05VTEwpCisgIHsKKyAgICBpbmZsYXRlRW5kKHopOworICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgfQorICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGFsbG9jYXRlZFxuIikpOworCisgIC8qIHJlc2V0IHN0YXRlICovCisgIGluZmxhdGVSZXNldCh6KTsKKyAgcmV0dXJuIFpfT0s7Cit9CisKKworCisjdW5kZWYgIE5FRURCWVRFCisjZGVmaW5lIE5FRURCWVRFIHtpZih6LT5hdmFpbF9pbj09MClyZXR1cm4gcjtyPWY7fQorCisjdW5kZWYgIE5FWFRCWVRFCisjZGVmaW5lIE5FWFRCWVRFICh6LT5hdmFpbF9pbi0tLHotPnRvdGFsX2luKyssKnotPm5leHRfaW4rKykKKworCitaRVhQT1JUKGludCkgaW5mbGF0ZSggLyogeiwgZikgKi8KK3pfc3RyZWFtcCB6LAoraW50IGYgKQoreworICBpbnQgcjsKKyAgdUludCBiOworCisgIGlmICh6ID09IFpfTlVMTCB8fCB6LT5zdGF0ZSA9PSBaX05VTEwgfHwgei0+bmV4dF9pbiA9PSBaX05VTEwpCisgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICBmID0gZiA9PSBaX0ZJTklTSCA/IFpfQlVGX0VSUk9SIDogWl9PSzsKKyAgciA9IFpfQlVGX0VSUk9SOworICB3aGlsZSAoMSkgc3dpdGNoICh6LT5zdGF0ZS0+bW9kZSkKKyAgeworICAgIGNhc2UgTUVUSE9EOgorICAgICAgTkVFREJZVEUKKyAgICAgIGlmICgoKHotPnN0YXRlLT5zdWIubWV0aG9kID0gTkVYVEJZVEUpICYgMHhmKSAhPSBaX0RFRkxBVEVEKQorICAgICAgeworICAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgei0+bXNnID0gKGNoYXIqKSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CisgICAgICAgIHotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKCh6LT5zdGF0ZS0+c3ViLm1ldGhvZCA+PiA0KSArIDggPiB6LT5zdGF0ZS0+d2JpdHMpCisgICAgICB7CisgICAgICAgIHotPnN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICB6LT5tc2cgPSAoY2hhciopImludmFsaWQgd2luZG93IHNpemUiOworICAgICAgICB6LT5zdGF0ZS0+c3ViLm1hcmtlciA9IDU7ICAgICAgIC8qIGNhbid0IHRyeSBpbmZsYXRlU3luYyAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHotPnN0YXRlLT5tb2RlID0gRkxBRzsKKyAgICBjYXNlIEZMQUc6CisgICAgICBORUVEQllURQorICAgICAgYiA9IE5FWFRCWVRFOworICAgICAgaWYgKCgoei0+c3RhdGUtPnN1Yi5tZXRob2QgPDwgOCkgKyBiKSAlIDMxKQorICAgICAgeworICAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgei0+bXNnID0gKGNoYXIqKSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKKyAgICAgICAgei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSA1OyAgICAgICAvKiBjYW4ndCB0cnkgaW5mbGF0ZVN5bmMgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IHpsaWIgaGVhZGVyIG9rXG4iKSk7CisgICAgICBpZiAoIShiICYgUFJFU0VUX0RJQ1QpKQorICAgICAgeworICAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IEJMT0NLUzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB6LT5zdGF0ZS0+bW9kZSA9IERJQ1Q0OworICAgIGNhc2UgRElDVDQ6CisgICAgICBORUVEQllURQorICAgICAgei0+c3RhdGUtPnN1Yi5jaGVjay5uZWVkID0gKHVMb25nKU5FWFRCWVRFIDw8IDI0OworICAgICAgei0+c3RhdGUtPm1vZGUgPSBESUNUMzsKKyAgICBjYXNlIERJQ1QzOgorICAgICAgTkVFREJZVEUKKyAgICAgIHotPnN0YXRlLT5zdWIuY2hlY2submVlZCArPSAodUxvbmcpTkVYVEJZVEUgPDwgMTY7CisgICAgICB6LT5zdGF0ZS0+bW9kZSA9IERJQ1QyOworICAgIGNhc2UgRElDVDI6CisgICAgICBORUVEQllURQorICAgICAgei0+c3RhdGUtPnN1Yi5jaGVjay5uZWVkICs9ICh1TG9uZylORVhUQllURSA8PCA4OworICAgICAgei0+c3RhdGUtPm1vZGUgPSBESUNUMTsKKyAgICBjYXNlIERJQ1QxOgorICAgICAgTkVFREJZVEUKKyAgICAgIHotPnN0YXRlLT5zdWIuY2hlY2submVlZCArPSAodUxvbmcpTkVYVEJZVEU7CisgICAgICB6LT5hZGxlciA9IHotPnN0YXRlLT5zdWIuY2hlY2submVlZDsKKyAgICAgIHotPnN0YXRlLT5tb2RlID0gRElDVDA7CisgICAgICByZXR1cm4gWl9ORUVEX0RJQ1Q7CisgICAgY2FzZSBESUNUMDoKKyAgICAgIHotPnN0YXRlLT5tb2RlID0gQkFEOworICAgICAgei0+bXNnID0gKGNoYXIqKSJuZWVkIGRpY3Rpb25hcnkiOworICAgICAgei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSAwOyAgICAgICAvKiBjYW4gdHJ5IGluZmxhdGVTeW5jICovCisgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgY2FzZSBCTE9DS1M6CisgICAgICByID0gaW5mbGF0ZV9ibG9ja3Moei0+c3RhdGUtPmJsb2Nrcywgeiwgcik7CisgICAgICBpZiAociA9PSBaX0RBVEFfRVJST1IpCisgICAgICB7CisgICAgICAgIHotPnN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICB6LT5zdGF0ZS0+c3ViLm1hcmtlciA9IDA7ICAgICAgIC8qIGNhbiB0cnkgaW5mbGF0ZVN5bmMgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAociA9PSBaX09LKQorICAgICAgICByID0gZjsKKyAgICAgIGlmIChyICE9IFpfU1RSRUFNX0VORCkKKyAgICAgICAgcmV0dXJuIHI7CisgICAgICByID0gZjsKKyAgICAgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHotPnN0YXRlLT5ibG9ja3MsIHosICZ6LT5zdGF0ZS0+c3ViLmNoZWNrLndhcyk7CisgICAgICBpZiAoei0+c3RhdGUtPm5vd3JhcCkKKyAgICAgIHsKKyAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBET05FOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHotPnN0YXRlLT5tb2RlID0gQ0hFQ0s0OworICAgIGNhc2UgQ0hFQ0s0OgorICAgICAgTkVFREJZVEUKKyAgICAgIHotPnN0YXRlLT5zdWIuY2hlY2submVlZCA9ICh1TG9uZylORVhUQllURSA8PCAyNDsKKyAgICAgIHotPnN0YXRlLT5tb2RlID0gQ0hFQ0szOworICAgIGNhc2UgQ0hFQ0szOgorICAgICAgTkVFREJZVEUKKyAgICAgIHotPnN0YXRlLT5zdWIuY2hlY2submVlZCArPSAodUxvbmcpTkVYVEJZVEUgPDwgMTY7CisgICAgICB6LT5zdGF0ZS0+bW9kZSA9IENIRUNLMjsKKyAgICBjYXNlIENIRUNLMjoKKyAgICAgIE5FRURCWVRFCisgICAgICB6LT5zdGF0ZS0+c3ViLmNoZWNrLm5lZWQgKz0gKHVMb25nKU5FWFRCWVRFIDw8IDg7CisgICAgICB6LT5zdGF0ZS0+bW9kZSA9IENIRUNLMTsKKyAgICBjYXNlIENIRUNLMToKKyAgICAgIE5FRURCWVRFCisgICAgICB6LT5zdGF0ZS0+c3ViLmNoZWNrLm5lZWQgKz0gKHVMb25nKU5FWFRCWVRFOworCisgICAgICBpZiAoei0+c3RhdGUtPnN1Yi5jaGVjay53YXMgIT0gei0+c3RhdGUtPnN1Yi5jaGVjay5uZWVkKQorICAgICAgeworICAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgei0+bXNnID0gKGNoYXIqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CisgICAgICAgIHotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiB6bGliIGNoZWNrIG9rXG4iKSk7CisgICAgICB6LT5zdGF0ZS0+bW9kZSA9IERPTkU7CisgICAgY2FzZSBET05FOgorICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKKyAgICBjYXNlIEJBRDoKKyAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgfQorI2lmZGVmIE5FRURfRFVNTVlfUkVUVVJOCisgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsgIC8qIFNvbWUgZHVtYiBjb21waWxlcnMgY29tcGxhaW4gd2l0aG91dCB0aGlzICovCisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnRyZWVzLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mdHJlZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY1MmIxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnRyZWVzLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qIGluZnRyZWVzLmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgInp1dGlsLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKworI2lmICFkZWZpbmVkKEJVSUxERklYRUQpICYmICFkZWZpbmVkKFNUREMpCisjICBkZWZpbmUgQlVJTERGSVhFRCAgIC8qIG5vbiBBTlNJIGNvbXBpbGVycyBtYXkgbm90IGFjY2VwdCBpbmZmaXhlZC5oICovCisjZW5kaWYKKworCisjaWYgMAorbG9jYWwgY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KKyAgICIgaW5mbGF0ZSAxLjEuNCBDb3B5cmlnaHQgMTk5NS0yMDAyIE1hcmsgQWRsZXIgIjsKKyNlbmRpZgorLyoKKyAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQorICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CisgIGluY2x1ZGUgc3VjaCBhbiBhY2tub3dsZWRnbWVudCwgSSB3b3VsZCBhcHByZWNpYXRlIHRoYXQgeW91IGtlZXAgdGhpcworICBjb3B5cmlnaHQgc3RyaW5nIGluIHRoZSBleGVjdXRhYmxlIG9mIHlvdXIgcHJvZHVjdC4KKyAqLworCisvKiBzaW1wbGlmeSB0aGUgdXNlIG9mIHRoZSBpbmZsYXRlX2h1ZnQgdHlwZSB3aXRoIHNvbWUgZGVmaW5lcyAqLworI2RlZmluZSBleG9wIHdvcmQud2hhdC5FeG9wCisjZGVmaW5lIGJpdHMgd29yZC53aGF0LkJpdHMKKworCitsb2NhbCBpbnQgaHVmdF9idWlsZCBPRigoCisgICAgdUludGYgKiwgICAgICAgICAgICAvKiBjb2RlIGxlbmd0aHMgaW4gYml0cyAqLworICAgIHVJbnQsICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzICovCisgICAgdUludCwgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgInNpbXBsZSIgY29kZXMgKi8KKyAgICBjb25zdCB1SW50ZiAqLCAgICAgIC8qIGxpc3Qgb2YgYmFzZSB2YWx1ZXMgZm9yIG5vbi1zaW1wbGUgY29kZXMgKi8KKyAgICBjb25zdCB1SW50ZiAqLCAgICAgIC8qIGxpc3Qgb2YgZXh0cmEgYml0cyBmb3Igbm9uLXNpbXBsZSBjb2RlcyAqLworICAgIGluZmxhdGVfaHVmdCAqIEZBUiosLyogcmVzdWx0OiBzdGFydGluZyB0YWJsZSAqLworICAgIHVJbnRmICosICAgICAgICAgICAgLyogbWF4aW11bSBsb29rdXAgYml0cyAocmV0dXJucyBhY3R1YWwpICovCisgICAgaW5mbGF0ZV9odWZ0ICosICAgICAvKiBzcGFjZSBmb3IgdHJlZXMgKi8KKyAgICB1SW50ICosICAgICAgICAgICAgIC8qIGh1ZnRzIHVzZWQgaW4gc3BhY2UgKi8KKyAgICB1SW50ZiAqICkpOyAgICAgICAgIC8qIHNwYWNlIGZvciB2YWx1ZXMgKi8KKworLyogVGFibGVzIGZvciBkZWZsYXRlIGZyb20gUEtaSVAncyBhcHBub3RlLnR4dC4gKi8KK2xvY2FsIGNvbnN0IHVJbnQgY3BsZW5zWzMxXSA9IHsgLyogQ29weSBsZW5ndGhzIGZvciBsaXRlcmFsIGNvZGVzIDI1Ny4uMjg1ICovCisgICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsCisgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKKyAgICAgICAgLyogc2VlIG5vdGUgIzEzIGFib3ZlIGFib3V0IDI1OCAqLworbG9jYWwgY29uc3QgdUludCBjcGxleHRbMzFdID0geyAvKiBFeHRyYSBiaXRzIGZvciBsaXRlcmFsIGNvZGVzIDI1Ny4uMjg1ICovCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsCisgICAgICAgIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDAsIDExMiwgMTEyfTsgLyogMTEyPT1pbnZhbGlkICovCitsb2NhbCBjb25zdCB1SW50IGNwZGlzdFszMF0gPSB7IC8qIENvcHkgb2Zmc2V0cyBmb3IgZGlzdGFuY2UgY29kZXMgMC4uMjkgKi8KKyAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLAorICAgICAgICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCisgICAgICAgIDgxOTMsIDEyMjg5LCAxNjM4NSwgMjQ1Nzd9OworbG9jYWwgY29uc3QgdUludCBjcGRleHRbMzBdID0geyAvKiBFeHRyYSBiaXRzIGZvciBkaXN0YW5jZSBjb2RlcyAqLworICAgICAgICAwLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LAorICAgICAgICA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMSwKKyAgICAgICAgMTIsIDEyLCAxMywgMTN9OworCisvKgorICAgSHVmZm1hbiBjb2RlIGRlY29kaW5nIGlzIHBlcmZvcm1lZCB1c2luZyBhIG11bHRpLWxldmVsIHRhYmxlIGxvb2t1cC4KKyAgIFRoZSBmYXN0ZXN0IHdheSB0byBkZWNvZGUgaXMgdG8gc2ltcGx5IGJ1aWxkIGEgbG9va3VwIHRhYmxlIHdob3NlCisgICBzaXplIGlzIGRldGVybWluZWQgYnkgdGhlIGxvbmdlc3QgY29kZS4gIEhvd2V2ZXIsIHRoZSB0aW1lIGl0IHRha2VzCisgICB0byBidWlsZCB0aGlzIHRhYmxlIGNhbiBhbHNvIGJlIGEgZmFjdG9yIGlmIHRoZSBkYXRhIGJlaW5nIGRlY29kZWQKKyAgIGlzIG5vdCB2ZXJ5IGxvbmcuICBUaGUgbW9zdCBjb21tb24gY29kZXMgYXJlIG5lY2Vzc2FyaWx5IHRoZQorICAgc2hvcnRlc3QgY29kZXMsIHNvIHRob3NlIGNvZGVzIGRvbWluYXRlIHRoZSBkZWNvZGluZyB0aW1lLCBhbmQgaGVuY2UKKyAgIHRoZSBzcGVlZC4gIFRoZSBpZGVhIGlzIHlvdSBjYW4gaGF2ZSBhIHNob3J0ZXIgdGFibGUgdGhhdCBkZWNvZGVzIHRoZQorICAgc2hvcnRlciwgbW9yZSBwcm9iYWJsZSBjb2RlcywgYW5kIHRoZW4gcG9pbnQgdG8gc3Vic2lkaWFyeSB0YWJsZXMgZm9yCisgICB0aGUgbG9uZ2VyIGNvZGVzLiAgVGhlIHRpbWUgaXQgY29zdHMgdG8gZGVjb2RlIHRoZSBsb25nZXIgY29kZXMgaXMKKyAgIHRoZW4gdHJhZGVkIGFnYWluc3QgdGhlIHRpbWUgaXQgdGFrZXMgdG8gbWFrZSBsb25nZXIgdGFibGVzLgorCisgICBUaGlzIHJlc3VsdHMgb2YgdGhpcyB0cmFkZSBhcmUgaW4gdGhlIHZhcmlhYmxlcyBsYml0cyBhbmQgZGJpdHMKKyAgIGJlbG93LiAgbGJpdHMgaXMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSBmaXJzdCBsZXZlbCB0YWJsZSBmb3IgbGl0ZXJhbC8KKyAgIGxlbmd0aCBjb2RlcyBjYW4gZGVjb2RlIGluIG9uZSBzdGVwLCBhbmQgZGJpdHMgaXMgdGhlIHNhbWUgdGhpbmcgZm9yCisgICB0aGUgZGlzdGFuY2UgY29kZXMuICBTdWJzZXF1ZW50IHRhYmxlcyBhcmUgYWxzbyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgIHRob3NlIHNpemVzLiAgVGhlc2UgdmFsdWVzIG1heSBiZSBhZGp1c3RlZCBlaXRoZXIgd2hlbiBhbGwgb2YgdGhlCisgICBjb2RlcyBhcmUgc2hvcnRlciB0aGFuIHRoYXQsIGluIHdoaWNoIGNhc2UgdGhlIGxvbmdlc3QgY29kZSBsZW5ndGggaW4KKyAgIGJpdHMgaXMgdXNlZCwgb3Igd2hlbiB0aGUgc2hvcnRlc3QgY29kZSBpcyAqbG9uZ2VyKiB0aGFuIHRoZSByZXF1ZXN0ZWQKKyAgIHRhYmxlIHNpemUsIGluIHdoaWNoIGNhc2UgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgY29kZSBpbiBiaXRzIGlzCisgICB1c2VkLgorCisgICBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHRoZSB0d28gdGFibGVzLCBzaW5jZSB0aGV5IGNvZGUgYQorICAgZGlmZmVyZW50IG51bWJlciBvZiBwb3NzaWJpbGl0aWVzIGVhY2guICBUaGUgbGl0ZXJhbC9sZW5ndGggdGFibGUKKyAgIGNvZGVzIDI4NiBwb3NzaWJsZSB2YWx1ZXMsIG9yIGluIGEgZmxhdCBjb2RlLCBhIGxpdHRsZSBvdmVyIGVpZ2h0CisgICBiaXRzLiAgVGhlIGRpc3RhbmNlIHRhYmxlIGNvZGVzIDMwIHBvc3NpYmxlIHZhbHVlcywgb3IgYSBsaXR0bGUgbGVzcworICAgdGhhbiBmaXZlIGJpdHMsIGZsYXQuICBUaGUgb3B0aW11bSB2YWx1ZXMgZm9yIHNwZWVkIGVuZCB1cCBiZWluZworICAgYWJvdXQgb25lIGJpdCBtb3JlIHRoYW4gdGhvc2UsIHNvIGxiaXRzIGlzIDgrMSBhbmQgZGJpdHMgaXMgNSsxLgorICAgVGhlIG9wdGltdW0gdmFsdWVzIG1heSBkaWZmZXIgdGhvdWdoIGZyb20gbWFjaGluZSB0byBtYWNoaW5lLCBhbmQKKyAgIHBvc3NpYmx5IGV2ZW4gYmV0d2VlbiBjb21waWxlcnMuICBZb3VyIG1pbGVhZ2UgbWF5IHZhcnkuCisgKi8KKworCisvKiBJZiBCTUFYIG5lZWRzIHRvIGJlIGxhcmdlciB0aGFuIDE2LCB0aGVuIGggYW5kIHhbXSBzaG91bGQgYmUgdUxvbmcuICovCisjZGVmaW5lIEJNQVggMTUgICAgICAgICAvKiBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYW55IGNvZGUgKi8KKworbG9jYWwgaW50IGh1ZnRfYnVpbGQoIC8qIGIsIG4sIHMsIGQsIGUsIHQsIG0sIGhwLCBobiwgdikgKi8KK3VJbnRmICpiLCAgICAgICAgICAgICAgIC8qIGNvZGUgbGVuZ3RocyBpbiBiaXRzIChhbGwgYXNzdW1lZCA8PSBCTUFYKSAqLwordUludCBuLCAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIChhc3N1bWVkIDw9IDI4OCkgKi8KK3VJbnQgcywgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzaW1wbGUtdmFsdWVkIGNvZGVzICgwLi5zLTEpICovCitjb25zdCB1SW50ZiAqZCwgICAgICAgICAvKiBsaXN0IG9mIGJhc2UgdmFsdWVzIGZvciBub24tc2ltcGxlIGNvZGVzICovCitjb25zdCB1SW50ZiAqZSwgICAgICAgICAvKiBsaXN0IG9mIGV4dHJhIGJpdHMgZm9yIG5vbi1zaW1wbGUgY29kZXMgKi8KK2luZmxhdGVfaHVmdCAqIEZBUiAqdCwgIC8qIHJlc3VsdDogc3RhcnRpbmcgdGFibGUgKi8KK3VJbnRmICptLCAgICAgICAgICAgICAgIC8qIG1heGltdW0gbG9va3VwIGJpdHMsIHJldHVybnMgYWN0dWFsICovCitpbmZsYXRlX2h1ZnQgKmhwLCAgICAgICAvKiBzcGFjZSBmb3IgdHJlZXMgKi8KK3VJbnQgKmhuLCAgICAgICAgICAgICAgIC8qIGh1ZnRzIHVzZWQgaW4gc3BhY2UgKi8KK3VJbnRmICp2ICAgICAgICAgICAgICAgIC8qIHdvcmtpbmcgYXJlYTogdmFsdWVzIGluIG9yZGVyIG9mIGJpdCBsZW5ndGggKi8KKy8qIEdpdmVuIGEgbGlzdCBvZiBjb2RlIGxlbmd0aHMgYW5kIGEgbWF4aW11bSB0YWJsZSBzaXplLCBtYWtlIGEgc2V0IG9mCisgICB0YWJsZXMgdG8gZGVjb2RlIHRoYXQgc2V0IG9mIGNvZGVzLiAgUmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9CVUZfRVJST1IKKyAgIGlmIHRoZSBnaXZlbiBjb2RlIHNldCBpcyBpbmNvbXBsZXRlICh0aGUgdGFibGVzIGFyZSBzdGlsbCBidWlsdCBpbiB0aGlzCisgICBjYXNlKSwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLiAqLworKQoreworCisgIHVJbnQgYTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50ZXIgZm9yIGNvZGVzIG9mIGxlbmd0aCBrICovCisgIHVJbnQgY1tCTUFYKzFdOyAgICAgICAgICAgICAgIC8qIGJpdCBsZW5ndGggY291bnQgdGFibGUgKi8KKyAgdUludCBmOyAgICAgICAgICAgICAgICAgICAgICAgLyogaSByZXBlYXRzIGluIHRhYmxlIGV2ZXJ5IGYgZW50cmllcyAqLworICBpbnQgZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGNvZGUgbGVuZ3RoICovCisgIGludCBoOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhYmxlIGxldmVsICovCisgIHVJbnQgaTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50ZXIsIGN1cnJlbnQgY29kZSAqLworICB1SW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudGVyICovCisgIGludCBrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIGN1cnJlbnQgY29kZSAqLworICBpbnQgbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXRzIHBlciB0YWJsZSAocmV0dXJuZWQgaW4gbSkgKi8KKyAgdUludCBtYXNrOyAgICAgICAgICAgICAgICAgICAgLyogKDEgPDwgdykgLSAxLCB0byBhdm9pZCBjYyAtTyBidWcgb24gSFAgKi8KKyAgdUludGYgKnA7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciBpbnRvIGNbXSwgYltdLCBvciB2W10gKi8KKyAgaW5mbGF0ZV9odWZ0ICpxOyAgICAgICAgICAgICAgLyogcG9pbnRzIHRvIGN1cnJlbnQgdGFibGUgKi8KKyAgc3RydWN0IGluZmxhdGVfaHVmdF9zIHI7ICAgICAgLyogdGFibGUgZW50cnkgZm9yIHN0cnVjdHVyZSBhc3NpZ25tZW50ICovCisgIGluZmxhdGVfaHVmdCAqdVtCTUFYXTsgICAgICAgIC8qIHRhYmxlIHN0YWNrICovCisgIGludCB3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgYmVmb3JlIHRoaXMgdGFibGUgPT0gKGwgKiBoKSAqLworICB1SW50IHhbQk1BWCsxXTsgICAgICAgICAgICAgICAvKiBiaXQgb2Zmc2V0cywgdGhlbiBjb2RlIHN0YWNrICovCisgIHVJbnRmICp4cDsgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgaW50byB4ICovCisgIGludCB5OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkdW1teSBjb2RlcyBhZGRlZCAqLworICB1SW50IHo7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBjdXJyZW50IHRhYmxlICovCisKKworICAvKiBNYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgIHIuYmFzZSA9IDA7CisKKyAgLyogR2VuZXJhdGUgY291bnRzIGZvciBlYWNoIGJpdCBsZW5ndGggKi8KKyAgcCA9IGM7CisjZGVmaW5lIEMwICpwKysgPSAwOworI2RlZmluZSBDMiBDMCBDMCBDMCBDMAorI2RlZmluZSBDNCBDMiBDMiBDMiBDMgorICBDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciBjW10tLWFzc3VtZSBCTUFYKzEgaXMgMTYgKi8KKyAgcCA9IGI7ICBpID0gbjsKKyAgZG8geworICAgIGNbKnArK10rKzsgICAgICAgICAgICAgICAgICAvKiBhc3N1bWUgYWxsIGVudHJpZXMgPD0gQk1BWCAqLworICB9IHdoaWxlICgtLWkpOworICBpZiAoY1swXSA9PSBuKSAgICAgICAgICAgICAgICAvKiBudWxsIGlucHV0LS1hbGwgemVybyBsZW5ndGggY29kZXMgKi8KKyAgeworICAgICp0ID0gKGluZmxhdGVfaHVmdCAqKVpfTlVMTDsKKyAgICAqbSA9IDA7CisgICAgcmV0dXJuIFpfT0s7CisgIH0KKworCisgIC8qIEZpbmQgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGgsIGJvdW5kICptIGJ5IHRob3NlICovCisgIGwgPSAqbTsKKyAgZm9yIChqID0gMTsgaiA8PSBCTUFYOyBqKyspCisgICAgaWYgKGNbal0pCisgICAgICBicmVhazsKKyAgayA9IGo7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWluaW11bSBjb2RlIGxlbmd0aCAqLworICBpZiAoKHVJbnQpbCA8IGopCisgICAgbCA9IGo7CisgIGZvciAoaSA9IEJNQVg7IGk7IGktLSkKKyAgICBpZiAoY1tpXSkKKyAgICAgIGJyZWFrOworICBnID0gaTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGNvZGUgbGVuZ3RoICovCisgIGlmICgodUludClsID4gaSkKKyAgICBsID0gaTsKKyAgKm0gPSBsOworCisKKyAgLyogQWRqdXN0IGxhc3QgbGVuZ3RoIGNvdW50IHRvIGZpbGwgb3V0IGNvZGVzLCBpZiBuZWVkZWQgKi8KKyAgZm9yICh5ID0gMSA8PCBqOyBqIDwgaTsgaisrLCB5IDw8PSAxKQorICAgIGlmICgoeSAtPSBjW2pdKSA8IDApCisgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOworICBpZiAoKHkgLT0gY1tpXSkgPCAwKQorICAgIHJldHVybiBaX0RBVEFfRVJST1I7CisgIGNbaV0gKz0geTsKKworCisgIC8qIEdlbmVyYXRlIHN0YXJ0aW5nIG9mZnNldHMgaW50byB0aGUgdmFsdWUgdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCisgIHhbMV0gPSBqID0gMDsKKyAgcCA9IGMgKyAxOyAgeHAgPSB4ICsgMjsKKyAgd2hpbGUgKC0taSkgeyAgICAgICAgICAgICAgICAgLyogbm90ZSB0aGF0IGkgPT0gZyBmcm9tIGFib3ZlICovCisgICAgKnhwKysgPSAoaiArPSAqcCsrKTsKKyAgfQorCisKKyAgLyogTWFrZSBhIHRhYmxlIG9mIHZhbHVlcyBpbiBvcmRlciBvZiBiaXQgbGVuZ3RocyAqLworICBwID0gYjsgIGkgPSAwOworICBkbyB7CisgICAgaWYgKChqID0gKnArKykgIT0gMCkKKyAgICAgIHZbeFtqXSsrXSA9IGk7CisgIH0gd2hpbGUgKCsraSA8IG4pOworICBuID0geFtnXTsgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgbiB0byBsZW5ndGggb2YgdiAqLworCisKKyAgLyogR2VuZXJhdGUgdGhlIEh1ZmZtYW4gY29kZXMgYW5kIGZvciBlYWNoLCBtYWtlIHRoZSB0YWJsZSBlbnRyaWVzICovCisgIHhbMF0gPSBpID0gMDsgICAgICAgICAgICAgICAgIC8qIGZpcnN0IEh1ZmZtYW4gY29kZSBpcyB6ZXJvICovCisgIHAgPSB2OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdyYWIgdmFsdWVzIGluIGJpdCBvcmRlciAqLworICBoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBubyB0YWJsZXMgeWV0LS1sZXZlbCAtMSAqLworICB3ID0gLWw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGRlY29kZWQgPT0gKGwgKiBoKSAqLworICB1WzBdID0gKGluZmxhdGVfaHVmdCAqKVpfTlVMTDsgICAgICAgIC8qIGp1c3QgdG8ga2VlcCBjb21waWxlcnMgaGFwcHkgKi8KKyAgcSA9IChpbmZsYXRlX2h1ZnQgKilaX05VTEw7ICAgLyogZGl0dG8gKi8KKyAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGl0dG8gKi8KKworICAvKiBnbyB0aHJvdWdoIHRoZSBiaXQgbGVuZ3RocyAoayBhbHJlYWR5IGlzIGJpdHMgaW4gc2hvcnRlc3QgY29kZSkgKi8KKyAgZm9yICg7IGsgPD0gZzsgaysrKQorICB7CisgICAgYSA9IGNba107CisgICAgd2hpbGUgKGEtLSkKKyAgICB7CisgICAgICAvKiBoZXJlIGkgaXMgdGhlIEh1ZmZtYW4gY29kZSBvZiBsZW5ndGggayBiaXRzIGZvciB2YWx1ZSAqcCAqLworICAgICAgLyogbWFrZSB0YWJsZXMgdXAgdG8gcmVxdWlyZWQgbGV2ZWwgKi8KKyAgICAgIHdoaWxlIChrID4gdyArIGwpCisgICAgICB7CisgICAgICAgIGgrKzsKKyAgICAgICAgdyArPSBsOyAgICAgICAgICAgICAgICAgLyogcHJldmlvdXMgdGFibGUgYWx3YXlzIGwgYml0cyAqLworCisgICAgICAgIC8qIGNvbXB1dGUgbWluaW11bSBzaXplIHRhYmxlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsIGJpdHMgKi8KKyAgICAgICAgeiA9IGcgLSB3OworICAgICAgICB6ID0geiA+ICh1SW50KWwgPyAodUludClsIDogejsgICAgICAgIC8qIHRhYmxlIHNpemUgdXBwZXIgbGltaXQgKi8KKyAgICAgICAgaWYgKChmID0gMSA8PCAoaiA9IGsgLSB3KSkgPiBhICsgMSkgICAgIC8qIHRyeSBhIGstdyBiaXQgdGFibGUgKi8KKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgLyogdG9vIGZldyBjb2RlcyBmb3Igay13IGJpdCB0YWJsZSAqLworICAgICAgICAgIGYgLT0gYSArIDE7ICAgICAgICAgICAvKiBkZWR1Y3QgY29kZXMgZnJvbSBwYXR0ZXJucyBsZWZ0ICovCisgICAgICAgICAgeHAgPSBjICsgazsKKyAgICAgICAgICBpZiAoaiA8IHopCisgICAgICAgICAgICB3aGlsZSAoKytqIDwgeikgICAgIC8qIHRyeSBzbWFsbGVyIHRhYmxlcyB1cCB0byB6IGJpdHMgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKChmIDw8PSAxKSA8PSAqKyt4cCkKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogZW5vdWdoIGNvZGVzIHRvIHVzZSB1cCBqIGJpdHMgKi8KKyAgICAgICAgICAgICAgZiAtPSAqeHA7ICAgICAgICAgLyogZWxzZSBkZWR1Y3QgY29kZXMgZnJvbSBwYXR0ZXJucyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHogPSAxIDw8IGo7ICAgICAgICAgICAgIC8qIHRhYmxlIGVudHJpZXMgZm9yIGotYml0IHRhYmxlICovCisKKyAgICAgICAgLyogYWxsb2NhdGUgbmV3IHRhYmxlICovCisgICAgICAgIGlmICgqaG4gKyB6ID4gTUFOWSkgICAgIC8qIChub3RlOiBkb2Vzbid0IG1hdHRlciBmb3IgZml4ZWQpICovCisgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsgIC8qIG92ZXJmbG93IG9mIE1BTlkgKi8KKyAgICAgICAgdVtoXSA9IHEgPSBocCArICpobjsKKyAgICAgICAgKmhuICs9IHo7CisKKyAgICAgICAgLyogY29ubmVjdCB0byBsYXN0IHRhYmxlLCBpZiB0aGVyZSBpcyBvbmUgKi8KKyAgICAgICAgaWYgKGgpCisgICAgICAgIHsKKyAgICAgICAgICB4W2hdID0gaTsgICAgICAgICAgICAgLyogc2F2ZSBwYXR0ZXJuIGZvciBiYWNraW5nIHVwICovCisgICAgICAgICAgci5iaXRzID0gKEJ5dGUpbDsgICAgIC8qIGJpdHMgdG8gZHVtcCBiZWZvcmUgdGhpcyB0YWJsZSAqLworICAgICAgICAgIHIuZXhvcCA9IChCeXRlKWo7ICAgICAvKiBiaXRzIGluIHRoaXMgdGFibGUgKi8KKyAgICAgICAgICBqID0gaSA+PiAodyAtIGwpOworICAgICAgICAgIHIuYmFzZSA9ICh1SW50KShxIC0gdVtoLTFdIC0gaik7ICAgLyogb2Zmc2V0IHRvIHRoaXMgdGFibGUgKi8KKyAgICAgICAgICB1W2gtMV1bal0gPSByOyAgICAgICAgLyogY29ubmVjdCB0byBsYXN0IHRhYmxlICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICp0ID0gcTsgICAgICAgICAgICAgICAvKiBmaXJzdCB0YWJsZSBpcyByZXR1cm5lZCByZXN1bHQgKi8KKyAgICAgIH0KKworICAgICAgLyogc2V0IHVwIHRhYmxlIGVudHJ5IGluIHIgKi8KKyAgICAgIHIuYml0cyA9IChCeXRlKShrIC0gdyk7CisgICAgICBpZiAocCA+PSB2ICsgbikKKyAgICAgICAgci5leG9wID0gMTI4ICsgNjQ7ICAgICAgLyogb3V0IG9mIHZhbHVlcy0taW52YWxpZCBjb2RlICovCisgICAgICBlbHNlIGlmICgqcCA8IHMpCisgICAgICB7CisgICAgICAgIHIuZXhvcCA9IChCeXRlKSgqcCA8IDI1NiA/IDAgOiAzMiArIDY0KTsgICAgIC8qIDI1NiBpcyBlbmQtb2YtYmxvY2sgKi8KKyAgICAgICAgci5iYXNlID0gKnArKzsgICAgICAgICAgLyogc2ltcGxlIGNvZGUgaXMganVzdCB0aGUgdmFsdWUgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgci5leG9wID0gKEJ5dGUpKGVbKnAgLSBzXSArIDE2ICsgNjQpOy8qIG5vbi1zaW1wbGUtLWxvb2sgdXAgaW4gbGlzdHMgKi8KKyAgICAgICAgci5iYXNlID0gZFsqcCsrIC0gc107CisgICAgICB9CisKKyAgICAgIC8qIGZpbGwgY29kZS1saWtlIGVudHJpZXMgd2l0aCByICovCisgICAgICBmID0gMSA8PCAoayAtIHcpOworICAgICAgZm9yIChqID0gaSA+PiB3OyBqIDwgejsgaiArPSBmKQorICAgICAgICBxW2pdID0gcjsKKworICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgay1iaXQgY29kZSBpICovCisgICAgICBmb3IgKGogPSAxIDw8IChrIC0gMSk7IGkgJiBqOyBqID4+PSAxKQorICAgICAgICBpIF49IGo7CisgICAgICBpIF49IGo7CisKKyAgICAgIC8qIGJhY2t1cCBvdmVyIGZpbmlzaGVkIHRhYmxlcyAqLworICAgICAgbWFzayA9ICgxIDw8IHcpIC0gMTsgICAgICAvKiBuZWVkZWQgb24gSFAsIGNjIC1PIGJ1ZyAqLworICAgICAgd2hpbGUgKChpICYgbWFzaykgIT0geFtoXSkKKyAgICAgIHsKKyAgICAgICAgaC0tOyAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgbmVlZCB0byB1cGRhdGUgcSAqLworICAgICAgICB3IC09IGw7CisgICAgICAgIG1hc2sgPSAoMSA8PCB3KSAtIDE7CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKiBSZXR1cm4gWl9CVUZfRVJST1IgaWYgd2Ugd2VyZSBnaXZlbiBhbiBpbmNvbXBsZXRlIHRhYmxlICovCisgIHJldHVybiB5ICE9IDAgJiYgZyAhPSAxID8gWl9CVUZfRVJST1IgOiBaX09LOworfQorCisKK2xvY2FsIGludCBpbmZsYXRlX3RyZWVzX2JpdHMoIC8qIGMsIGJiLCB0YiwgaHAsIHopICovCit1SW50ZiAqYywgICAgICAgICAgICAgICAvKiAxOSBjb2RlIGxlbmd0aHMgKi8KK3VJbnRmICpiYiwgICAgICAgICAgICAgIC8qIGJpdHMgdHJlZSBkZXNpcmVkL2FjdHVhbCBkZXB0aCAqLworaW5mbGF0ZV9odWZ0ICogRkFSICp0YiwgLyogYml0cyB0cmVlIHJlc3VsdCAqLworaW5mbGF0ZV9odWZ0ICpocCwgICAgICAgLyogc3BhY2UgZm9yIHRyZWVzICovCit6X3N0cmVhbXAgeiAgICAgICAgICAgICAvKiBmb3IgbWVzc2FnZXMgKi8KKykKK3sKKyAgaW50IHI7CisgIHVJbnQgaG4gPSAwOyAgICAgICAgICAvKiBodWZ0cyB1c2VkIGluIHNwYWNlICovCisgIHVJbnRmICp2OyAgICAgICAgICAgICAvKiB3b3JrIGFyZWEgZm9yIGh1ZnRfYnVpbGQgKi8KKworICBpZiAoKHYgPSAodUludGYqKVpBTExPQyh6LCAxOSwgc2l6ZW9mKHVJbnQpKSkgPT0gWl9OVUxMKQorICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgciA9IGh1ZnRfYnVpbGQoYywgMTksIDE5LCAodUludGYqKVpfTlVMTCwgKHVJbnRmKilaX05VTEwsCisgICAgICAgICAgICAgICAgIHRiLCBiYiwgaHAsICZobiwgdik7CisgIGlmIChyID09IFpfREFUQV9FUlJPUikKKyAgICB6LT5tc2cgPSAoY2hhciopIm92ZXJzdWJzY3JpYmVkIGR5bmFtaWMgYml0IGxlbmd0aHMgdHJlZSI7CisgIGVsc2UgaWYgKHIgPT0gWl9CVUZfRVJST1IgfHwgKmJiID09IDApCisgIHsKKyAgICB6LT5tc2cgPSAoY2hhciopImluY29tcGxldGUgZHluYW1pYyBiaXQgbGVuZ3RocyB0cmVlIjsKKyAgICByID0gWl9EQVRBX0VSUk9SOworICB9CisgIFpGUkVFKHosIHYpOworICByZXR1cm4gcjsKK30KKworCitsb2NhbCBpbnQgaW5mbGF0ZV90cmVlc19keW5hbWljKCAvKiBubCwgbmQsIGMsIGJsLCBiZCwgdGwsIHRkLCBocCwgeikgKi8KK3VJbnQgbmwsICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsaXRlcmFsL2xlbmd0aCBjb2RlcyAqLwordUludCBuZCwgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCit1SW50ZiAqYywgICAgICAgICAgICAgICAvKiB0aGF0IG1hbnkgKHRvdGFsKSBjb2RlIGxlbmd0aHMgKi8KK3VJbnRmICpibCwgICAgICAgICAgICAgIC8qIGxpdGVyYWwgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCit1SW50ZiAqYmQsICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBkZXNpcmVkL2FjdHVhbCBiaXQgZGVwdGggKi8KK2luZmxhdGVfaHVmdCAqIEZBUiAqdGwsIC8qIGxpdGVyYWwvbGVuZ3RoIHRyZWUgcmVzdWx0ICovCitpbmZsYXRlX2h1ZnQgKiBGQVIgKnRkLCAvKiBkaXN0YW5jZSB0cmVlIHJlc3VsdCAqLworaW5mbGF0ZV9odWZ0ICpocCwgICAgICAgLyogc3BhY2UgZm9yIHRyZWVzICovCit6X3N0cmVhbXAgeiAgICAgICAgICAgICAvKiBmb3IgbWVzc2FnZXMgKi8KKykKK3sKKyAgaW50IHI7CisgIHVJbnQgaG4gPSAwOyAgICAgICAgICAvKiBodWZ0cyB1c2VkIGluIHNwYWNlICovCisgIHVJbnRmICp2OyAgICAgICAgICAgICAvKiB3b3JrIGFyZWEgZm9yIGh1ZnRfYnVpbGQgKi8KKworICAvKiBhbGxvY2F0ZSB3b3JrIGFyZWEgKi8KKyAgaWYgKCh2ID0gKHVJbnRmKilaQUxMT0MoeiwgMjg4LCBzaXplb2YodUludCkpKSA9PSBaX05VTEwpCisgICAgcmV0dXJuIFpfTUVNX0VSUk9SOworCisgIC8qIGJ1aWxkIGxpdGVyYWwvbGVuZ3RoIHRyZWUgKi8KKyAgciA9IGh1ZnRfYnVpbGQoYywgbmwsIDI1NywgY3BsZW5zLCBjcGxleHQsIHRsLCBibCwgaHAsICZobiwgdik7CisgIGlmIChyICE9IFpfT0sgfHwgKmJsID09IDApCisgIHsKKyAgICBpZiAociA9PSBaX0RBVEFfRVJST1IpCisgICAgICB6LT5tc2cgPSAoY2hhciopIm92ZXJzdWJzY3JpYmVkIGxpdGVyYWwvbGVuZ3RoIHRyZWUiOworICAgIGVsc2UgaWYgKHIgIT0gWl9NRU1fRVJST1IpCisgICAgeworICAgICAgei0+bXNnID0gKGNoYXIqKSJpbmNvbXBsZXRlIGxpdGVyYWwvbGVuZ3RoIHRyZWUiOworICAgICAgciA9IFpfREFUQV9FUlJPUjsKKyAgICB9CisgICAgWkZSRUUoeiwgdik7CisgICAgcmV0dXJuIHI7CisgIH0KKworICAvKiBidWlsZCBkaXN0YW5jZSB0cmVlICovCisgIHIgPSBodWZ0X2J1aWxkKGMgKyBubCwgbmQsIDAsIGNwZGlzdCwgY3BkZXh0LCB0ZCwgYmQsIGhwLCAmaG4sIHYpOworICBpZiAociAhPSBaX09LIHx8ICgqYmQgPT0gMCAmJiBubCA+IDI1NykpCisgIHsKKyAgICBpZiAociA9PSBaX0RBVEFfRVJST1IpCisgICAgICB6LT5tc2cgPSAoY2hhciopIm92ZXJzdWJzY3JpYmVkIGRpc3RhbmNlIHRyZWUiOworICAgIGVsc2UgaWYgKHIgPT0gWl9CVUZfRVJST1IpIHsKKyNpZiAwCisgICAgeworI2VuZGlmCisjaWZkZWYgUEtaSVBfQlVHX1dPUktBUk9VTkQKKyAgICAgIHIgPSBaX09LOworICAgIH0KKyNlbHNlCisgICAgICB6LT5tc2cgPSAoY2hhciopImluY29tcGxldGUgZGlzdGFuY2UgdHJlZSI7CisgICAgICByID0gWl9EQVRBX0VSUk9SOworICAgIH0KKyAgICBlbHNlIGlmIChyICE9IFpfTUVNX0VSUk9SKQorICAgIHsKKyAgICAgIHotPm1zZyA9IChjaGFyKikiZW1wdHkgZGlzdGFuY2UgdHJlZSB3aXRoIGxlbmd0aHMiOworICAgICAgciA9IFpfREFUQV9FUlJPUjsKKyAgICB9CisgICAgWkZSRUUoeiwgdik7CisgICAgcmV0dXJuIHI7CisjZW5kaWYKKyAgfQorCisgIC8qIGRvbmUgKi8KKyAgWkZSRUUoeiwgdik7CisgIHJldHVybiBaX09LOworfQorCisKKy8qIGJ1aWxkIGZpeGVkIHRhYmxlcyBvbmx5IG9uY2UtLWtlZXAgdGhlbSBoZXJlICovCisjaWZkZWYgQlVJTERGSVhFRAorbG9jYWwgaW50IGZpeGVkX2J1aWx0ID0gMDsKKyNkZWZpbmUgRklYRURIIDU0NCAgICAgIC8qIG51bWJlciBvZiBodWZ0cyB1c2VkIGJ5IGZpeGVkIHRhYmxlcyAqLworbG9jYWwgaW5mbGF0ZV9odWZ0IGZpeGVkX21lbVtGSVhFREhdOworbG9jYWwgdUludCBmaXhlZF9ibDsKK2xvY2FsIHVJbnQgZml4ZWRfYmQ7Citsb2NhbCBpbmZsYXRlX2h1ZnQgKmZpeGVkX3RsOworbG9jYWwgaW5mbGF0ZV9odWZ0ICpmaXhlZF90ZDsKKyNlbHNlCisjaW5jbHVkZSAiaW5mZml4ZWQuaCIKKyNlbmRpZgorCisKK2xvY2FsIGludCBpbmZsYXRlX3RyZWVzX2ZpeGVkKCAvKiBibCwgYmQsIHRsLCB0ZCwgeikgKi8KK3VJbnRmICpibCwgICAgICAgICAgICAgICAgICAgICAgLyogbGl0ZXJhbCBkZXNpcmVkL2FjdHVhbCBiaXQgZGVwdGggKi8KK3VJbnRmICpiZCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCitjb25zdCBpbmZsYXRlX2h1ZnQgKiBGQVIgKnRsLCAgIC8qIGxpdGVyYWwvbGVuZ3RoIHRyZWUgcmVzdWx0ICovCitjb25zdCBpbmZsYXRlX2h1ZnQgKiBGQVIgKnRkLCAgIC8qIGRpc3RhbmNlIHRyZWUgcmVzdWx0ICovCit6X3N0cmVhbXAgeiAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBtZW1vcnkgYWxsb2NhdGlvbiAqLworKQoreworI2lmZGVmIEJVSUxERklYRUQKKyAgLyogYnVpbGQgZml4ZWQgdGFibGVzIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmICghZml4ZWRfYnVpbHQpCisgIHsKKyAgICBpbnQgazsgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAqLworICAgIHVJbnQgZiA9IDA7ICAgICAgICAgLyogbnVtYmVyIG9mIGh1ZnRzIHVzZWQgaW4gZml4ZWRfbWVtICovCisgICAgdUludGYgKmM7ICAgICAgICAgICAvKiBsZW5ndGggbGlzdCBmb3IgaHVmdF9idWlsZCAqLworICAgIHVJbnRmICp2OyAgICAgICAgICAgLyogd29yayBhcmVhIGZvciBodWZ0X2J1aWxkICovCisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICBpZiAoKGMgPSAodUludGYqKVpBTExPQyh6LCAyODgsIHNpemVvZih1SW50KSkpID09IFpfTlVMTCkKKyAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICBpZiAoKHYgPSAodUludGYqKVpBTExPQyh6LCAyODgsIHNpemVvZih1SW50KSkpID09IFpfTlVMTCkKKyAgICB7CisgICAgICBaRlJFRSh6LCBjKTsKKyAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBsaXRlcmFsIHRhYmxlICovCisgICAgZm9yIChrID0gMDsgayA8IDE0NDsgaysrKQorICAgICAgY1trXSA9IDg7CisgICAgZm9yICg7IGsgPCAyNTY7IGsrKykKKyAgICAgIGNba10gPSA5OworICAgIGZvciAoOyBrIDwgMjgwOyBrKyspCisgICAgICBjW2tdID0gNzsKKyAgICBmb3IgKDsgayA8IDI4ODsgaysrKQorICAgICAgY1trXSA9IDg7CisgICAgZml4ZWRfYmwgPSA5OworICAgIGh1ZnRfYnVpbGQoYywgMjg4LCAyNTcsIGNwbGVucywgY3BsZXh0LCAmZml4ZWRfdGwsICZmaXhlZF9ibCwKKyAgICAgICAgICAgICAgIGZpeGVkX21lbSwgJmYsIHYpOworCisgICAgLyogZGlzdGFuY2UgdGFibGUgKi8KKyAgICBmb3IgKGsgPSAwOyBrIDwgMzA7IGsrKykKKyAgICAgIGNba10gPSA1OworICAgIGZpeGVkX2JkID0gNTsKKyAgICBodWZ0X2J1aWxkKGMsIDMwLCAwLCBjcGRpc3QsIGNwZGV4dCwgJmZpeGVkX3RkLCAmZml4ZWRfYmQsCisgICAgICAgICAgICAgICBmaXhlZF9tZW0sICZmLCB2KTsKKworICAgIC8qIGRvbmUgKi8KKyAgICBaRlJFRSh6LCB2KTsKKyAgICBaRlJFRSh6LCBjKTsKKyAgICBmaXhlZF9idWlsdCA9IDE7CisgIH0KKyNlbHNlCisgIEZUX1VOVVNFRCh6KTsKKyNlbmRpZgorICAqYmwgPSBmaXhlZF9ibDsKKyAgKmJkID0gZml4ZWRfYmQ7CisgICp0bCA9IGZpeGVkX3RsOworICAqdGQgPSBmaXhlZF90ZDsKKyAgcmV0dXJuIFpfT0s7Cit9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mdHJlZXMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC9pbmZ0cmVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mdHJlZXMuaApAQCAtMCwwICsxLDYzIEBACisvKiBpbmZ0cmVlcy5oIC0tIGhlYWRlciB0byB1c2UgaW5mdHJlZXMuYworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisvKiBIdWZmbWFuIGNvZGUgbG9va3VwIHRhYmxlIGVudHJ5LS10aGlzIGVudHJ5IGlzIGZvdXIgYnl0ZXMgZm9yIG1hY2hpbmVzCisgICB0aGF0IGhhdmUgMTYtYml0IHBvaW50ZXJzIChlLmcuIFBDJ3MgaW4gdGhlIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCkuICovCisKKyNpZm5kZWYgX0lORlRSRUVTX0gKKyNkZWZpbmUgX0lORlRSRUVTX0gKKwordHlwZWRlZiBzdHJ1Y3QgaW5mbGF0ZV9odWZ0X3MgRkFSIGluZmxhdGVfaHVmdDsKKworc3RydWN0IGluZmxhdGVfaHVmdF9zIHsKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisgICAgICBCeXRlIEV4b3A7ICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyBvciBvcGVyYXRpb24gKi8KKyAgICAgIEJ5dGUgQml0czsgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIHRoaXMgY29kZSBvciBzdWJjb2RlICovCisgICAgfSB3aGF0OworICAgIHVJbnQgcGFkOyAgICAgICAgICAgLyogcGFkIHN0cnVjdHVyZSB0byBhIHBvd2VyIG9mIDIgKDQgYnl0ZXMgZm9yICovCisgIH0gd29yZDsgICAgICAgICAgICAgICAvKiAgMTYtYml0LCA4IGJ5dGVzIGZvciAzMi1iaXQgaW50J3MpICovCisgIHVJbnQgYmFzZTsgICAgICAgICAgICAvKiBsaXRlcmFsLCBsZW5ndGggYmFzZSwgZGlzdGFuY2UgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRhYmxlIG9mZnNldCAqLworfTsKKworLyogTWF4aW11bSBzaXplIG9mIGR5bmFtaWMgdHJlZS4gIFRoZSBtYXhpbXVtIGZvdW5kIGluIGEgbG9uZyBidXQgbm9uLQorICAgZXhoYXVzdGl2ZSBzZWFyY2ggd2FzIDEwMDQgaHVmdCBzdHJ1Y3R1cmVzICg4NTAgZm9yIGxlbmd0aC9saXRlcmFscworICAgYW5kIDE1NCBmb3IgZGlzdGFuY2VzLCB0aGUgbGF0dGVyIGFjdHVhbGx5IHRoZSByZXN1bHQgb2YgYW4KKyAgIGV4aGF1c3RpdmUgc2VhcmNoKS4gIFRoZSBhY3R1YWwgbWF4aW11bSBpcyBub3Qga25vd24sIGJ1dCB0aGUKKyAgIHZhbHVlIGJlbG93IGlzIG1vcmUgdGhhbiBzYWZlLiAqLworI2RlZmluZSBNQU5ZIDE0NDAKKworbG9jYWwgIGludCBpbmZsYXRlX3RyZWVzX2JpdHMgT0YoKAorICAgIHVJbnRmICosICAgICAgICAgICAgICAgICAgICAvKiAxOSBjb2RlIGxlbmd0aHMgKi8KKyAgICB1SW50ZiAqLCAgICAgICAgICAgICAgICAgICAgLyogYml0cyB0cmVlIGRlc2lyZWQvYWN0dWFsIGRlcHRoICovCisgICAgaW5mbGF0ZV9odWZ0ICogRkFSICosICAgICAgIC8qIGJpdHMgdHJlZSByZXN1bHQgKi8KKyAgICBpbmZsYXRlX2h1ZnQgKiwgICAgICAgICAgICAgLyogc3BhY2UgZm9yIHRyZWVzICovCisgICAgel9zdHJlYW1wKSk7ICAgICAgICAgICAgICAgIC8qIGZvciBtZXNzYWdlcyAqLworCitsb2NhbCAgaW50IGluZmxhdGVfdHJlZXNfZHluYW1pYyBPRigoCisgICAgdUludCwgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsaXRlcmFsL2xlbmd0aCBjb2RlcyAqLworICAgIHVJbnQsICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi8KKyAgICB1SW50ZiAqLCAgICAgICAgICAgICAgICAgICAgLyogdGhhdCBtYW55ICh0b3RhbCkgY29kZSBsZW5ndGhzICovCisgICAgdUludGYgKiwgICAgICAgICAgICAgICAgICAgIC8qIGxpdGVyYWwgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCisgICAgdUludGYgKiwgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGRlc2lyZWQvYWN0dWFsIGJpdCBkZXB0aCAqLworICAgIGluZmxhdGVfaHVmdCAqIEZBUiAqLCAgICAgICAvKiBsaXRlcmFsL2xlbmd0aCB0cmVlIHJlc3VsdCAqLworICAgIGluZmxhdGVfaHVmdCAqIEZBUiAqLCAgICAgICAvKiBkaXN0YW5jZSB0cmVlIHJlc3VsdCAqLworICAgIGluZmxhdGVfaHVmdCAqLCAgICAgICAgICAgICAvKiBzcGFjZSBmb3IgdHJlZXMgKi8KKyAgICB6X3N0cmVhbXApKTsgICAgICAgICAgICAgICAgLyogZm9yIG1lc3NhZ2VzICovCisKK2xvY2FsICBpbnQgaW5mbGF0ZV90cmVlc19maXhlZCBPRigoCisgICAgdUludGYgKiwgICAgICAgICAgICAgICAgICAgIC8qIGxpdGVyYWwgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCisgICAgdUludGYgKiwgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGRlc2lyZWQvYWN0dWFsIGJpdCBkZXB0aCAqLworICAgIGNvbnN0IGluZmxhdGVfaHVmdCAqIEZBUiAqLCAvKiBsaXRlcmFsL2xlbmd0aCB0cmVlIHJlc3VsdCAqLworICAgIGNvbnN0IGluZmxhdGVfaHVmdCAqIEZBUiAqLCAvKiBkaXN0YW5jZSB0cmVlIHJlc3VsdCAqLworICAgIHpfc3RyZWFtcCkpOyAgICAgICAgICAgICAgICAvKiBmb3IgbWVtb3J5IGFsbG9jYXRpb24gKi8KKworI2VuZGlmIC8qIF9JTkZUUkVFU19IICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mdXRpbC5jIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDg3YjQwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnV0aWwuYwpAQCAtMCwwICsxLDg2IEBACisvKiBpbmZsYXRlX3V0aWwuYyAtLSBkYXRhIGFuZCByb3V0aW5lcyBjb21tb24gdG8gYmxvY2tzIGFuZCBjb2RlcworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorI2luY2x1ZGUgImluZmJsb2NrLmgiCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNpbmNsdWRlICJpbmZjb2Rlcy5oIgorI2luY2x1ZGUgImluZnV0aWwuaCIKKworCisvKiBBbmQnaW5nIHdpdGggbWFza1tuXSBtYXNrcyB0aGUgbG93ZXIgbiBiaXRzICovCitsb2NhbCBjb25zdCB1SW50IGluZmxhdGVfbWFza1sxN10gPSB7CisgICAgMHgwMDAwLAorICAgIDB4MDAwMSwgMHgwMDAzLCAweDAwMDcsIDB4MDAwZiwgMHgwMDFmLCAweDAwM2YsIDB4MDA3ZiwgMHgwMGZmLAorICAgIDB4MDFmZiwgMHgwM2ZmLCAweDA3ZmYsIDB4MGZmZiwgMHgxZmZmLCAweDNmZmYsIDB4N2ZmZiwgMHhmZmZmCit9OworCisKKy8qIGNvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBzbGlkaW5nIHdpbmRvdyB0byB0aGUgb3V0cHV0IGFyZWEgKi8KK2xvY2FsIGludCBpbmZsYXRlX2ZsdXNoKCAvKiBzLCB6LCByKSAqLworaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICpzLAorel9zdHJlYW1wIHosCitpbnQgciApCit7CisgIHVJbnQgbjsKKyAgQnl0ZWYgKnA7CisgIEJ5dGVmICpxOworCisgIC8qIGxvY2FsIGNvcGllcyBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzICovCisgIHAgPSB6LT5uZXh0X291dDsKKyAgcSA9IHMtPnJlYWQ7CisKKyAgLyogY29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBhcyBmYXIgYXMgZW5kIG9mIHdpbmRvdyAqLworICBuID0gKHVJbnQpKChxIDw9IHMtPndyaXRlID8gcy0+d3JpdGUgOiBzLT5lbmQpIC0gcSk7CisgIGlmIChuID4gei0+YXZhaWxfb3V0KSBuID0gei0+YXZhaWxfb3V0OworICBpZiAobiAmJiByID09IFpfQlVGX0VSUk9SKSByID0gWl9PSzsKKworICAvKiB1cGRhdGUgY291bnRlcnMgKi8KKyAgei0+YXZhaWxfb3V0IC09IG47CisgIHotPnRvdGFsX291dCArPSBuOworCisgIC8qIHVwZGF0ZSBjaGVjayBpbmZvcm1hdGlvbiAqLworICBpZiAocy0+Y2hlY2tmbiAhPSBaX05VTEwpCisgICAgei0+YWRsZXIgPSBzLT5jaGVjayA9ICgqcy0+Y2hlY2tmbikocy0+Y2hlY2ssIHEsIG4pOworCisgIC8qIGNvcHkgYXMgZmFyIGFzIGVuZCBvZiB3aW5kb3cgKi8KKyAgem1lbWNweShwLCBxLCBuKTsKKyAgcCArPSBuOworICBxICs9IG47CisKKyAgLyogc2VlIGlmIG1vcmUgdG8gY29weSBhdCBiZWdpbm5pbmcgb2Ygd2luZG93ICovCisgIGlmIChxID09IHMtPmVuZCkKKyAgeworICAgIC8qIHdyYXAgcG9pbnRlcnMgKi8KKyAgICBxID0gcy0+d2luZG93OworICAgIGlmIChzLT53cml0ZSA9PSBzLT5lbmQpCisgICAgICBzLT53cml0ZSA9IHMtPndpbmRvdzsKKworICAgIC8qIGNvbXB1dGUgYnl0ZXMgdG8gY29weSAqLworICAgIG4gPSAodUludCkocy0+d3JpdGUgLSBxKTsKKyAgICBpZiAobiA+IHotPmF2YWlsX291dCkgbiA9IHotPmF2YWlsX291dDsKKyAgICBpZiAobiAmJiByID09IFpfQlVGX0VSUk9SKSByID0gWl9PSzsKKworICAgIC8qIHVwZGF0ZSBjb3VudGVycyAqLworICAgIHotPmF2YWlsX291dCAtPSBuOworICAgIHotPnRvdGFsX291dCArPSBuOworCisgICAgLyogdXBkYXRlIGNoZWNrIGluZm9ybWF0aW9uICovCisgICAgaWYgKHMtPmNoZWNrZm4gIT0gWl9OVUxMKQorICAgICAgei0+YWRsZXIgPSBzLT5jaGVjayA9ICgqcy0+Y2hlY2tmbikocy0+Y2hlY2ssIHEsIG4pOworCisgICAgLyogY29weSAqLworICAgIHptZW1jcHkocCwgcSwgbik7CisgICAgcCArPSBuOworICAgIHEgKz0gbjsKKyAgfQorCisgIC8qIHVwZGF0ZSBwb2ludGVycyAqLworICB6LT5uZXh0X291dCA9IHA7CisgIHMtPnJlYWQgPSBxOworCisgIC8qIGRvbmUgKi8KKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2d6aXAvaW5mdXRpbC5oIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTc0YjZkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL2luZnV0aWwuaApAQCAtMCwwICsxLDk4IEBACisvKiBpbmZ1dGlsLmggLS0gdHlwZXMgYW5kIG1hY3JvcyBjb21tb24gdG8gYmxvY2tzIGFuZCBjb2RlcworICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXMKKyAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAqLworCisjaWZuZGVmIF9JTkZVVElMX0gKKyNkZWZpbmUgX0lORlVUSUxfSAorCit0eXBlZGVmIGVudW0geworICAgICAgVFlQRSwgICAgIC8qIGdldCB0eXBlIGJpdHMgKDMsIGluY2x1ZGluZyBlbmQgYml0KSAqLworICAgICAgTEVOUywgICAgIC8qIGdldCBsZW5ndGhzIGZvciBzdG9yZWQgKi8KKyAgICAgIFNUT1JFRCwgICAvKiBwcm9jZXNzaW5nIHN0b3JlZCBibG9jayAqLworICAgICAgVEFCTEUsICAgIC8qIGdldCB0YWJsZSBsZW5ndGhzICovCisgICAgICBCVFJFRSwgICAgLyogZ2V0IGJpdCBsZW5ndGhzIHRyZWUgZm9yIGEgZHluYW1pYyBibG9jayAqLworICAgICAgRFRSRUUsICAgIC8qIGdldCBsZW5ndGgsIGRpc3RhbmNlIHRyZWVzIGZvciBhIGR5bmFtaWMgYmxvY2sgKi8KKyAgICAgIENPREVTLCAgICAvKiBwcm9jZXNzaW5nIGZpeGVkIG9yIGR5bmFtaWMgYmxvY2sgKi8KKyAgICAgIERSWSwgICAgICAvKiBvdXRwdXQgcmVtYWluaW5nIHdpbmRvdyBieXRlcyAqLworICAgICAgRE9ORSwgICAgIC8qIGZpbmlzaGVkIGxhc3QgYmxvY2ssIGRvbmUgKi8KKyAgICAgIEJBRH0gICAgICAvKiBnb3QgYSBkYXRhIGVycm9yLS1zdHVjayBoZXJlICovCitpbmZsYXRlX2Jsb2NrX21vZGU7CisKKy8qIGluZmxhdGUgYmxvY2tzIHNlbWktcHJpdmF0ZSBzdGF0ZSAqLworc3RydWN0IGluZmxhdGVfYmxvY2tzX3N0YXRlIHsKKworICAvKiBtb2RlICovCisgIGluZmxhdGVfYmxvY2tfbW9kZSAgbW9kZTsgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZV9ibG9jayBtb2RlICovCisKKyAgLyogbW9kZSBkZXBlbmRlbnQgaW5mb3JtYXRpb24gKi8KKyAgdW5pb24geworICAgIHVJbnQgbGVmdDsgICAgICAgICAgLyogaWYgU1RPUkVELCBieXRlcyBsZWZ0IHRvIGNvcHkgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdUludCB0YWJsZTsgICAgICAgICAgICAgICAvKiB0YWJsZSBsZW5ndGhzICgxNCBiaXRzKSAqLworICAgICAgdUludCBpbmRleDsgICAgICAgICAgICAgICAvKiBpbmRleCBpbnRvIGJsZW5zIChvciBib3JkZXIpICovCisgICAgICB1SW50ZiAqYmxlbnM7ICAgICAgICAgICAgIC8qIGJpdCBsZW5ndGhzIG9mIGNvZGVzICovCisgICAgICB1SW50IGJiOyAgICAgICAgICAgICAgICAgIC8qIGJpdCBsZW5ndGggdHJlZSBkZXB0aCAqLworICAgICAgaW5mbGF0ZV9odWZ0ICp0YjsgICAgICAgICAvKiBiaXQgbGVuZ3RoIGRlY29kaW5nIHRyZWUgKi8KKyAgICB9IHRyZWVzOyAgICAgICAgICAgIC8qIGlmIERUUkVFLCBkZWNvZGluZyBpbmZvIGZvciB0cmVlcyAqLworICAgIHN0cnVjdCB7CisgICAgICBpbmZsYXRlX2NvZGVzX3N0YXRlZgorICAgICAgICAgKmNvZGVzOworICAgIH0gZGVjb2RlOyAgICAgICAgICAgLyogaWYgQ09ERVMsIGN1cnJlbnQgc3RhdGUgKi8KKyAgfSBzdWI7ICAgICAgICAgICAgICAgIC8qIHN1Ym1vZGUgKi8KKyAgdUludCBsYXN0OyAgICAgICAgICAgIC8qIHRydWUgaWYgdGhpcyBibG9jayBpcyB0aGUgbGFzdCBibG9jayAqLworCisgIC8qIG1vZGUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24gKi8KKyAgdUludCBiaXRrOyAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLworICB1TG9uZyBiaXRiOyAgICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICBpbmZsYXRlX2h1ZnQgKmh1ZnRzOyAgLyogc2luZ2xlIG1hbGxvYyBmb3IgdHJlZSBzcGFjZSAqLworICBCeXRlZiAqd2luZG93OyAgICAgICAgLyogc2xpZGluZyB3aW5kb3cgKi8KKyAgQnl0ZWYgKmVuZDsgICAgICAgICAgIC8qIG9uZSBieXRlIGFmdGVyIHNsaWRpbmcgd2luZG93ICovCisgIEJ5dGVmICpyZWFkOyAgICAgICAgICAvKiB3aW5kb3cgcmVhZCBwb2ludGVyICovCisgIEJ5dGVmICp3cml0ZTsgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgcG9pbnRlciAqLworICBjaGVja19mdW5jIGNoZWNrZm47ICAgLyogY2hlY2sgZnVuY3Rpb24gKi8KKyAgdUxvbmcgY2hlY2s7ICAgICAgICAgIC8qIGNoZWNrIG9uIG91dHB1dCAqLworCit9OworCisKKy8qIGRlZmluZXMgZm9yIGluZmxhdGUgaW5wdXQvb3V0cHV0ICovCisvKiAgIHVwZGF0ZSBwb2ludGVycyBhbmQgcmV0dXJuICovCisjZGVmaW5lIFVQREJJVFMge3MtPmJpdGI9YjtzLT5iaXRrPWs7fQorI2RlZmluZSBVUERJTiB7ei0+YXZhaWxfaW49bjt6LT50b3RhbF9pbis9cC16LT5uZXh0X2luO3otPm5leHRfaW49cDt9CisjZGVmaW5lIFVQRE9VVCB7cy0+d3JpdGU9cTt9CisjZGVmaW5lIFVQREFURSB7VVBEQklUUyBVUERJTiBVUERPVVR9CisjZGVmaW5lIExFQVZFIHtVUERBVEUgcmV0dXJuIGluZmxhdGVfZmx1c2gocyx6LHIpO30KKy8qICAgZ2V0IGJ5dGVzIGFuZCBiaXRzICovCisjZGVmaW5lIExPQURJTiB7cD16LT5uZXh0X2luO249ei0+YXZhaWxfaW47Yj1zLT5iaXRiO2s9cy0+Yml0azt9CisjZGVmaW5lIE5FRURCWVRFIHtpZihuKXI9Wl9PSztlbHNlIExFQVZFfQorI2RlZmluZSBORVhUQllURSAobi0tLCpwKyspCisjZGVmaW5lIE5FRURCSVRTKGopIHt3aGlsZShrPChqKSl7TkVFREJZVEU7Ynw9KCh1TG9uZylORVhUQllURSk8PGs7ays9ODt9fQorI2RlZmluZSBEVU1QQklUUyhqKSB7Yj4+PShqKTtrLT0oaik7fQorLyogICBvdXRwdXQgYnl0ZXMgKi8KKyNkZWZpbmUgV0FWQUlMICh1SW50KShxPHMtPnJlYWQ/cy0+cmVhZC1xLTE6cy0+ZW5kLXEpCisjZGVmaW5lIExPQURPVVQge3E9cy0+d3JpdGU7bT0odUludClXQVZBSUw7fQorI2RlZmluZSBXUkFQIHtpZihxPT1zLT5lbmQmJnMtPnJlYWQhPXMtPndpbmRvdyl7cT1zLT53aW5kb3c7bT0odUludClXQVZBSUw7fX0KKyNkZWZpbmUgRkxVU0gge1VQRE9VVCByPWluZmxhdGVfZmx1c2gocyx6LHIpOyBMT0FET1VUfQorI2RlZmluZSBORUVET1VUIHtpZihtPT0wKXtXUkFQIGlmKG09PTApe0ZMVVNIIFdSQVAgaWYobT09MCkgTEVBVkV9fXI9Wl9PSzt9CisjZGVmaW5lIE9VVEJZVEUoYSkgeypxKys9KEJ5dGUpKGEpO20tLTt9CisvKiAgIGxvYWQgbG9jYWwgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTE9BRCB7TE9BRElOIExPQURPVVR9CisKKy8qIG1hc2tzIGZvciBsb3dlciBiaXRzIChzaXplIGdpdmVuIHRvIGF2b2lkIHNpbGx5IHdhcm5pbmdzIHdpdGggVmlzdWFsIEMrKykgKi8KKyNpZm5kZWYgTk9fSU5GTEFURV9NQVNLCitsb2NhbCB1SW50IGluZmxhdGVfbWFza1sxN107CisjZW5kaWYKKworLyogY29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIHNsaWRpbmcgd2luZG93IHRvIHRoZSBvdXRwdXQgYXJlYSAqLworbG9jYWwgaW50IGluZmxhdGVfZmx1c2ggT0YoKAorICAgIGluZmxhdGVfYmxvY2tzX3N0YXRlZiAqLAorICAgIHpfc3RyZWFtcCAsCisgICAgaW50KSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9nemlwL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Zjc0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvcnVsZXMubWsKQEAgLTAsMCArMSw4MyBAQAorIworIyBGcmVlVHlwZSAyIEdaaXAgc3VwcG9ydCBjb25maWd1cmF0aW9uIHJ1bGVzCisjCisKKworIyBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIGd6aXAgZHJpdmVyIGRpcmVjdG9yeQorIworR1pJUF9ESVIgOj0gJChTUkNfRElSKS9nemlwCisKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworaWZlcSAoJChTWVNURU1fWkxJQiksKQorICBHWklQX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChHWklQX0RJUikpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCitlbHNlCisgIEdaSVBfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgXAorICAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCitlbmRpZgorCisKKyMgZ3ppcCBzdXBwb3J0IHNvdXJjZXMKKyMKKyMgQWxsIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzIGdldCBsb2FkZWQgYnkgYGZ0Z3ppcC5jJyBvbmx5IGlmIFNZVEVNX1pMSUIgaXMKKyMgbm90IGRlZmluZWQgKHJlZ2FyZGxlc3Mgd2hldGhlciB3ZSBoYXZlIGEgYHNpbmdsZScgb3IgYSBgbXVsdGknIGJ1aWxkKS4KKyMgSG93ZXZlciwgaXQgZG9lc24ndCBoYXJtIGlmIHdlIGFkZCBldmVyeXRoaW5nIGFzIGEgZGVwZW5kZW5jeQorIyB1bmNvbmRpdGlvbmFsbHkuCisjCitHWklQX0RSVl9TUkNTIDo9ICQoR1pJUF9ESVIpL2FkbGVyMzIuYyAgXAorICAgICAgICAgICAgICAgICAkKEdaSVBfRElSKS9pbmZibG9jay5jIFwKKyAgICAgICAgICAgICAgICAgJChHWklQX0RJUikvaW5mYmxvY2suaCBcCisgICAgICAgICAgICAgICAgICQoR1pJUF9ESVIpL2luZmNvZGVzLmMgXAorICAgICAgICAgICAgICAgICAkKEdaSVBfRElSKS9pbmZjb2Rlcy5oIFwKKyAgICAgICAgICAgICAgICAgJChHWklQX0RJUikvaW5mZml4ZWQuaCBcCisgICAgICAgICAgICAgICAgICQoR1pJUF9ESVIpL2luZmxhdGUuYyAgXAorICAgICAgICAgICAgICAgICAkKEdaSVBfRElSKS9pbmZ0cmVlcy5jIFwKKyAgICAgICAgICAgICAgICAgJChHWklQX0RJUikvaW5mdHJlZXMuaCBcCisgICAgICAgICAgICAgICAgICQoR1pJUF9ESVIpL2luZnV0aWwuYyAgXAorICAgICAgICAgICAgICAgICAkKEdaSVBfRElSKS9pbmZ1dGlsLmggIFwKKyAgICAgICAgICAgICAgICAgJChHWklQX0RJUikvemNvbmYuaCAgICBcCisgICAgICAgICAgICAgICAgICQoR1pJUF9ESVIpL3psaWIuaCAgICAgXAorICAgICAgICAgICAgICAgICAkKEdaSVBfRElSKS96dXRpbC5jICAgIFwKKyAgICAgICAgICAgICAgICAgJChHWklQX0RJUikvenV0aWwuaAorCisKKyMgZ3ppcCBkcml2ZXIgb2JqZWN0KHMpCisjCisjICAgR1pJUF9EUlZfT0JKIGlzIHVzZWQgZHVyaW5nIGJvdGggYHNpbmdsZScgYW5kIGBtdWx0aScgYnVpbGRzCisjCitHWklQX0RSVl9PQkogOj0gJChPQkpfRElSKS9mdGd6aXAuJE8KKworCisjIGd6aXAgbWFpbiBzb3VyY2UgZmlsZQorIworR1pJUF9EUlZfU1JDIDo9ICQoR1pJUF9ESVIpL2Z0Z3ppcC5jCisKKworIyBnemlwIHN1cHBvcnQgLSBvYmplY3QKKyMKKyQoR1pJUF9EUlZfT0JKKTogJChHWklQX0RSVl9TUkMpICQoR1pJUF9EUlZfU1JDUykgJChGUkVFVFlQRV9IKQorCSQoR1pJUF9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChHWklQX0RSVl9TUkMpKQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKEdaSVBfRFJWX09CSikKK0RSVl9PQkpTX00gKz0gJChHWklQX0RSVl9PQkopCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC96Y29uZi5oIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL3pjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiZjBiYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC96Y29uZi5oCkBAIC0wLDAgKzEsMjg0IEBACisvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2lmbmRlZiBfWkNPTkZfSAorI2RlZmluZSBfWkNPTkZfSAorCisvKgorICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAorICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKi8KKyNpZmRlZiBaX1BSRUZJWAorIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgIHpfZGVmbGF0ZUluaXRfCisjICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgel9kZWZsYXRlCisjICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgel9pbmZsYXRlSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICB6X2luZmxhdGUKKyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICB6X2luZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICB6X2RlZmxhdGVJbml0Ml8KKyMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgel9kZWZsYXRlQ29weQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgel9pbmZsYXRlSW5pdDJfCisjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKKyMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICB6X2luZmxhdGVTeW5jUG9pbnQKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICB6X2luZmxhdGVSZXNldAorIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgIHpfYWRsZXIzMgorIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgIHpfY3JjMzIKKyMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICB6X2dldF9jcmNfdGFibGUKKworIyAgZGVmaW5lIEJ5dGUgICB6X0J5dGUKKyMgIGRlZmluZSB1SW50ICAgel91SW50CisjICBkZWZpbmUgdUxvbmcgIHpfdUxvbmcKKyMgIGRlZmluZSBCeXRlZiAgel9CeXRlZgorIyAgZGVmaW5lIGNoYXJmICB6X2NoYXJmCisjICBkZWZpbmUgaW50ZiAgIHpfaW50ZgorIyAgZGVmaW5lIHVJbnRmICB6X3VJbnRmCisjICBkZWZpbmUgdUxvbmdmIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHBmIHpfdm9pZHBmCisjICBkZWZpbmUgdm9pZHAgIHpfdm9pZHAKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmICFkZWZpbmVkKFdJTjMyKQorIyAgZGVmaW5lIFdJTjMyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fMzg2X18pIHx8IGRlZmluZWQoaTM4NikKKyMgIGlmbmRlZiBfXzMyQklUX18KKyMgICAgZGVmaW5lIF9fMzJCSVRfXworIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19NU0RPU19fKSAmJiAhZGVmaW5lZChNU0RPUykKKyMgIGRlZmluZSBNU0RPUworI2VuZGlmCisKKy8qIFdpbkNFIGRvZXNuJ3QgaGF2ZSBlcnJuby5oICovCisjaWZkZWYgX1dJTjMyX1dDRQorIyAgZGVmaW5lIE5PX0VSUk5PX0gKKyNlbmRpZgorCisKKy8qCisgKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQorICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgorICovCisjaWYgZGVmaW5lZChNU0RPUykgJiYgIWRlZmluZWQoX18zMkJJVF9fKQorIyAgZGVmaW5lIE1BWFNFR182NEsKKyNlbmRpZgorI2lmZGVmIE1TRE9TCisjICBkZWZpbmUgVU5BTElHTkVEX09LCisjZW5kaWYKKworI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKF9XSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkgICYmICFkZWZpbmVkKFNUREMpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX09TMl9fKQorIyAgaWZuZGVmIFNUREMKKyMgICAgZGVmaW5lIFNUREMKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTVERDCisjICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCisjICAgIGRlZmluZSBjb25zdAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLworI2lmIGRlZmluZWQoX19NV0VSS1NfXykgfHwgZGVmaW5lZChhcHBsZWMpIHx8ZGVmaW5lZChUSElOS19DKSB8fGRlZmluZWQoX19TQ19fKQorIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKKyNlbmRpZgorCisvKiBPbGQgQm9ybGFuZCBDIGFuZCBMQ0MgaW5jb3JyZWN0bHkgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcmV0dXJuczogKi8KKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKF9fQk9STEFORENfXyA8IDB4NTAwKQorIyAgZGVmaW5lIE5FRURfRFVNTVlfUkVUVVJOCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19MQ0NfXykKKyMgIGRlZmluZSAgTkVFRF9EVU1NWV9SRVRVUk4KKyNlbmRpZgorCisvKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KKyNpZm5kZWYgTUFYX01FTV9MRVZFTAorIyAgaWZkZWYgTUFYU0VHXzY0SworIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4CisjICBlbHNlCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KKyAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKKyAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQorICogZ3ppcC4pCisgKi8KKyNpZm5kZWYgTUFYX1dCSVRTCisjICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCisjZW5kaWYKKworLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CisgICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQorIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQorIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCisgdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCisgICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKKyBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgorCisgICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKKyB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCisgZm9yIHNtYWxsIG9iamVjdHMuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLworCisjaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyMgIGlmZGVmIFNUREMKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBPRihhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKKyAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCisgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKKyAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKKyAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KKyAqLworI2lmIChkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkpICYmICFkZWZpbmVkKF9fMzJCSVRfXykKKyAgIC8qIE1TQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KKyMgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgIGlmZGVmIF9NU0NfVkVSCisjICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgZWxzZQorIyAgICBkZWZpbmUgRkFSIGZhcgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCisjICBpZm5kZWYgX18zMkJJVF9fCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgICAgZGVmaW5lIEZBUiBfZmFyCisjICBlbmRpZgorI2VuZGlmCisKKy8qIENvbXBpbGUgd2l0aCAtRFpMSUJfRExMIGZvciBXaW5kb3dzIERMTCBzdXBwb3J0ICovCisjaWYgZGVmaW5lZChaTElCX0RMTCkKKyMgIGlmIGRlZmluZWQoX1dJTkRPV1MpIHx8IGRlZmluZWQoV0lORE9XUykKKyMgICAgaWZkZWYgRkFSCisjICAgICAgdW5kZWYgRkFSCisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgICAgZGVmaW5lIFpFWFBPUlQoeCkgIHggV0lOQVBJCisjICAgIGlmZGVmIFdJTjMyCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSh4KSAgeCBXSU5BUElWCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBKHgpICB4IEZBUiBfY2RlY2wgX2V4cG9ydAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQgKF9fQk9STEFORENfXykKKyMgICAgaWYgKF9fQk9STEFORENfXyA+PSAweDA1MDApICYmIGRlZmluZWQgKFdJTjMyKQorIyAgICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgICAgICBkZWZpbmUgWkVYUE9SVCh4KSB4IF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBXSU5BUEkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFJWQSh4KSAgeCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgV0lOQVBJVgorIyAgICBlbHNlCisjICAgICAgaWYgZGVmaW5lZCAoX1dpbmRvd3MpICYmIGRlZmluZWQgKF9fRExMX18pCisjICAgICAgICBkZWZpbmUgWkVYUE9SVCh4KSB4IF9leHBvcnQKKyMgICAgICAgIGRlZmluZSBaRVhQT1JUVkEoeCkgeCBfZXhwb3J0CisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIFpFWFBPUlQKKyMgIGRlZmluZSBaRVhQT1JUKHgpICAgc3RhdGljIHgKKyNlbmRpZgorI2lmbmRlZiBaRVhQT1JUVkEKKyMgIGRlZmluZSBaRVhQT1JUVkEoeCkgICBzdGF0aWMgeAorI2VuZGlmCisjaWZuZGVmIFpFWFRFUk4KKyMgIGRlZmluZSBaRVhURVJOKHgpIHN0YXRpYyB4CisjZW5kaWYKKyNpZm5kZWYgWkVYVEVSTkRFRgorIyAgZGVmaW5lIFpFWFRFUk5ERUYoeCkgIHN0YXRpYyB4CisjZW5kaWYKKworI2lmbmRlZiBGQVIKKyMgICBkZWZpbmUgRkFSCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1BQ09TKSAmJiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCisKKyNpZmRlZiBTTUFMTF9NRURJVU0KKyAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCisjICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKKyNlbmRpZgordHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Cit0eXBlZGVmIGludCAgIEZBUiBpbnRmOwordHlwZWRlZiB1SW50ICBGQVIgdUludGY7Cit0eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7CisKKyNpZmRlZiBTVERDCisgICB0eXBlZGVmIHZvaWQgRkFSICp2b2lkcGY7CisgICB0eXBlZGVmIHZvaWQgICAgICp2b2lkcDsKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgRkFSICp2b2lkcGY7CisgICB0eXBlZGVmIEJ5dGUgICAgICp2b2lkcDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZfdCAqLworIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCisjICBkZWZpbmUgel9vZmZfdCAgb2ZmX3QKKyNlbmRpZgorI2lmbmRlZiBTRUVLX1NFVAorIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KKyNlbmRpZgorI2lmbmRlZiB6X29mZl90CisjICBkZWZpbmUgIHpfb2ZmX3QgbG9uZworI2VuZGlmCisKKy8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCisjaWYgZGVmaW5lZChfX01WU19fKQorIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXRfLCJERUlOIikKKyMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKKyMgICBwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfYmxvY2tzLCJJTkJMIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfYmxvY2tzX25ldywiSU5CTE5FIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfYmxvY2tzX2ZyZWUsIklOQkxGUiIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlX2Jsb2Nrc19yZXNldCwiSU5CTFJFIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29kZXNfZnJlZSwiSU5DT0ZSIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29kZXMsIklOQ08iKQorIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfZmx1c2gsIklORkxVIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfbWFzaywiSU5NQSIpCisjICAgcHJhZ21hIG1hcChpbmZsYXRlX3NldF9kaWN0aW9uYXJ5LCJJTlNFREkyIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQorIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90cmVlc19iaXRzLCJJTlRSQkkiKQorIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90cmVlc19keW5hbWljLCJJTlRSRFkiKQorIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90cmVlc19maXhlZCwiSU5UUkZJIikKKyMgICBwcmFnbWEgbWFwKGluZmxhdGVfdHJlZXNfZnJlZSwiSU5UUkZSIikKKyNlbmRpZgorCisjZW5kaWYgLyogX1pDT05GX0ggKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC96bGliLmggYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvemxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDBkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvemxpYi5oCkBAIC0wLDAgKzEsODMwIEBACisvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgdmVyc2lvbiAxLjEuNCwgTWFyY2ggMTF0aCwgMjAwMgorCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgorICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisKKworICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzIChSZXF1ZXN0IGZvcgorICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBmdHA6Ly9kcy5pbnRlcm5pYy5uZXQvcmZjL3JmYzE5NTAudHh0CisgICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisqLworCisjaWZuZGVmIF9aTElCX0gKKyNkZWZpbmUgX1pMSUJfSAorCisjaW5jbHVkZSAiemNvbmYuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4xLjQiCisKKy8qCisgICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCisgIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkCisgIGRhdGEuICBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kCisgIChkZWZsYXRpb24pIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZQorICBzdHJlYW0gaW50ZXJmYWNlLgorCisgICAgIENvbXByZXNzaW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdlCisgIGVub3VnaCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwgb3IgY2FuIGJlIGRvbmUgYnkKKyAgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKKyAgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAorICAocHJvdmlkaW5nIG1vcmUgb3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLgorCisgICAgIFRoZSBsaWJyYXJ5IGFsc28gc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdAorICB3aXRoIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8uCisKKyAgICAgVGhlIGxpYnJhcnkgZG9lcyBub3QgaW5zdGFsbCBhbnkgc2lnbmFsIGhhbmRsZXIuIFRoZSBkZWNvZGVyIGNoZWNrcworICB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwgc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyCisgIGNyYXNoIGV2ZW4gaW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCisqLworCit0eXBlZGVmIHZvaWRwZiAoKmFsbG9jX2Z1bmMpIE9GKCh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpKTsKK3R5cGVkZWYgdm9pZCAgICgqZnJlZV9mdW5jKSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBhZGRyZXNzKSk7CisKK3N0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7CisgICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICB1SW50ICAgICBhdmFpbF9pbjsgIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLworICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbmIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KKworICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCisgICAgdUludCAgICAgYXZhaWxfb3V0OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dCAqLworICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworCisgICAgY2hhciAgICAgKm1zZzsgICAgICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCisKKyAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgZnJlZV9mdW5jICB6ZnJlZTsgICAvKiB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgdm9pZHBmICAgICBvcGFxdWU7ICAvKiBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlICovCisKKyAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYXNjaWkgb3IgYmluYXJ5ICovCisgICAgdUxvbmcgICBhZGxlcjsgICAgICAvKiBhZGxlcjMyIHZhbHVlIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSAqLworICAgIHVMb25nICAgcmVzZXJ2ZWQ7ICAgLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK30gel9zdHJlYW07CisKK3R5cGVkZWYgel9zdHJlYW0gRkFSICp6X3N0cmVhbXA7CisKKy8qCisgICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4gd2hlbiBhdmFpbF9pbiBoYXMKKyAgIGRyb3BwZWQgdG8gemVyby4gSXQgbXVzdCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dCB3aGVuIGF2YWlsX291dAorICAgaGFzIGRyb3BwZWQgdG8gemVyby4gVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSB6YWxsb2MsIHpmcmVlIGFuZAorICAgb3BhcXVlIGJlZm9yZSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLiBBbGwgb3RoZXIgZmllbGRzIGFyZSBzZXQgYnkgdGhlCisgICBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZCBtdXN0IG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKworICAgVGhlIG9wYXF1ZSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0CisgICBwYXJhbWV0ZXIgZm9yIGNhbGxzIG9mIHphbGxvYyBhbmQgemZyZWUuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3VzdG9tCisgICBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXR0YWNoZXMgbm8gbWVhbmluZyB0byB0aGUKKyAgIG9wYXF1ZSB2YWx1ZS4KKworICAgemFsbG9jIG11c3QgcmV0dXJuIFpfTlVMTCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG9iamVjdC4KKyAgIElmIHpsaWIgaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLCB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUKKyAgIHRocmVhZCBzYWZlLgorCisgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzCisgICBpZiB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiBXQVJOSU5HOiBPbiBNU0RPUywKKyAgIHBvaW50ZXJzIHJldHVybmVkIGJ5IHphbGxvYyBmb3Igb2JqZWN0cyBvZiBleGFjdGx5IDY1NTM2IGJ5dGVzICptdXN0KgorICAgaGF2ZSB0aGVpciBvZmZzZXQgbm9ybWFsaXplZCB0byB6ZXJvLiBUaGUgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9uCisgICBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkgZW5zdXJlcyB0aGlzIChzZWUgenV0aWwuYykuIFRvIHJlZHVjZSBtZW1vcnkKKyAgIHJlcXVpcmVtZW50cyBhbmQgYXZvaWQgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMsIGF0IHRoZSBleHBlbnNlIG9mCisgICBjb21wcmVzc2lvbiByYXRpbywgY29tcGlsZSB0aGUgbGlicmFyeSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCisKKyAgIFRoZSBmaWVsZHMgdG90YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvcgorICAgcHJvZ3Jlc3MgcmVwb3J0cy4gQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3RhbCBzaXplIG9mCisgICB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGluIHRoZSBkZWNvbXByZXNzb3IKKyAgIChwYXJ0aWN1bGFybHkgaWYgdGhlIGRlY29tcHJlc3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4KKyAgIGEgc2luZ2xlIHN0ZXApLgorKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc3RhbnRzICovCisKKyNkZWZpbmUgWl9OT19GTFVTSCAgICAgIDAKKyNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDEgLyogd2lsbCBiZSByZW1vdmVkLCB1c2UgWl9TWU5DX0ZMVVNIIGluc3RlYWQgKi8KKyNkZWZpbmUgWl9TWU5DX0ZMVVNIICAgIDIKKyNkZWZpbmUgWl9GVUxMX0ZMVVNIICAgIDMKKyNkZWZpbmUgWl9GSU5JU0ggICAgICAgIDQKKy8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovCisKKyNkZWZpbmUgWl9PSyAgICAgICAgICAgIDAKKyNkZWZpbmUgWl9TVFJFQU1fRU5EICAgIDEKKyNkZWZpbmUgWl9ORUVEX0RJQ1QgICAgIDIKKyNkZWZpbmUgWl9FUlJOTyAgICAgICAgKC0xKQorI2RlZmluZSBaX1NUUkVBTV9FUlJPUiAoLTIpCisjZGVmaW5lIFpfREFUQV9FUlJPUiAgICgtMykKKyNkZWZpbmUgWl9NRU1fRVJST1IgICAgKC00KQorI2RlZmluZSBaX0JVRl9FUlJPUiAgICAoLTUpCisjZGVmaW5lIFpfVkVSU0lPTl9FUlJPUiAoLTYpCisvKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUKKyAqIHZhbHVlcyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCisgKi8KKworI2RlZmluZSBaX05PX0NPTVBSRVNTSU9OICAgICAgICAgMAorI2RlZmluZSBaX0JFU1RfU1BFRUQgICAgICAgICAgICAgMQorI2RlZmluZSBaX0JFU1RfQ09NUFJFU1NJT04gICAgICAgOQorI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gICgtMSkKKy8qIGNvbXByZXNzaW9uIGxldmVscyAqLworCisjZGVmaW5lIFpfRklMVEVSRUQgICAgICAgICAgICAxCisjZGVmaW5lIFpfSFVGRk1BTl9PTkxZICAgICAgICAyCisjZGVmaW5lIFpfREVGQVVMVF9TVFJBVEVHWSAgICAwCisvKiBjb21wcmVzc2lvbiBzdHJhdGVneTsgc2VlIGRlZmxhdGVJbml0MigpIGJlbG93IGZvciBkZXRhaWxzICovCisKKyNkZWZpbmUgWl9CSU5BUlkgICAwCisjZGVmaW5lIFpfQVNDSUkgICAgMQorI2RlZmluZSBaX1VOS05PV04gIDIKKy8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICovCisKKyNkZWZpbmUgWl9ERUZMQVRFRCAgIDgKKy8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAodGhlIG9ubHkgb25lIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24pICovCisKKyNkZWZpbmUgWl9OVUxMICAwICAvKiBmb3IgaW5pdGlhbGl6aW5nIHphbGxvYywgemZyZWUsIG9wYXF1ZSAqLworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2ljIGZ1bmN0aW9ucyAqLworCisvKiBUaGUgYXBwbGljYXRpb24gY2FuIGNvbXBhcmUgemxpYlZlcnNpb24gYW5kIFpMSUJfVkVSU0lPTiBmb3IgY29uc2lzdGVuY3kuCisgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRpZmZlcnMsIHRoZSBsaWJyYXJ5IGNvZGUgYWN0dWFsbHkgdXNlZCBpcworICAgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgemxpYi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhpcyBjaGVjayBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgorICovCisKKy8qCitaRVhURVJOKGludCkgIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7CisKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKKyAgIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLgorICAgSWYgemFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpfTlVMTCwgZGVmbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvCisgICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKworICAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgbXVzdCBiZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIG9yIGJldHdlZW4gMCBhbmQgOToKKyAgIDEgZ2l2ZXMgYmVzdCBzcGVlZCwgOSBnaXZlcyBiZXN0IGNvbXByZXNzaW9uLCAwIGdpdmVzIG5vIGNvbXByZXNzaW9uIGF0CisgICBhbGwgKHRoZSBpbnB1dCBkYXRhIGlzIHNpbXBseSBjb3BpZWQgYSBibG9jayBhdCBhIHRpbWUpLgorICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIHJlcXVlc3RzIGEgZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kCisgICBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCisKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIGxldmVsLAorICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLgorICAgbXNnIGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisKKworLyoKKyAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKKyAgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KKyAgZm9yY2VkIHRvIGZsdXNoLgorCisgICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gZGVmbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKKyAgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgLSBDb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbgorICAgIGFjY29yZGluZ2x5LiBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBkYXRlZCBhbmQKKyAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorCisgIC0gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQKKyAgICBhY2NvcmRpbmdseS4gVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgbm9uIHplcm8uCisgICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVzIHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKKyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCisgICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4KKworICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZworICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIGF2YWlsX2luIG9yIGF2YWlsX291dCBhY2NvcmRpbmdseTsgYXZhaWxfb3V0CisgIHNob3VsZCBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUgY2FsbC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZQorICBjb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwKKyAgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mIGRlZmxhdGUoKS4gSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sKKyAgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZQorICBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfU1lOQ19GTFVTSCwgYWxsIHBlbmRpbmcgb3V0cHV0IGlzCisgIGZsdXNoZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYW5kIHRoZSBvdXRwdXQgaXMgYWxpZ25lZCBvbiBhIGJ5dGUgYm91bmRhcnksIHNvCisgIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFsbCBpbnB1dCBkYXRhIGF2YWlsYWJsZSBzbyBmYXIuIChJbiBwYXJ0aWN1bGFyCisgIGF2YWlsX2luIGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBoYXMgYmVlbiBwcm92aWRlZAorICBiZWZvcmUgdGhlIGNhbGwuKSAgRmx1c2hpbmcgbWF5IGRlZ3JhZGUgY29tcHJlc3Npb24gZm9yIHNvbWUgY29tcHJlc3Npb24KKyAgYWxnb3JpdGhtcyBhbmQgc28gaXQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byBaX0ZVTExfRkxVU0gsIGFsbCBvdXRwdXQgaXMgZmx1c2hlZCBhcyB3aXRoCisgIFpfU1lOQ19GTFVTSCwgYW5kIHRoZSBjb21wcmVzc2lvbiBzdGF0ZSBpcyByZXNldCBzbyB0aGF0IGRlY29tcHJlc3Npb24gY2FuCisgIHJlc3RhcnQgZnJvbSB0aGlzIHBvaW50IGlmIHByZXZpb3VzIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiBkYW1hZ2VkIG9yIGlmCisgIHJhbmRvbSBhY2Nlc3MgaXMgZGVzaXJlZC4gVXNpbmcgWl9GVUxMX0ZMVVNIIHRvbyBvZnRlbiBjYW4gc2VyaW91c2x5IGRlZ3JhZGUKKyAgdGhlIGNvbXByZXNzaW9uLgorCisgICAgSWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggYXZhaWxfb3V0ID09IDAsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4KKyAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICBhdmFpbF9vdXQpLCB1bnRpbCB0aGUgZmx1c2ggaXMgY29tcGxldGUgKGRlZmxhdGUgcmV0dXJucyB3aXRoIG5vbi16ZXJvCisgIGF2YWlsX291dCkuCisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX0ZJTklTSCwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQsCisgIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZQorICB3YXMgZW5vdWdoIG91dHB1dCBzcGFjZTsgaWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9PSywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlCisgIGNhbGxlZCBhZ2FpbiB3aXRoIFpfRklOSVNIIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZCBhdmFpbF9vdXQpIGJ1dCBubworICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IuIEFmdGVyCisgIGRlZmxhdGUgaGFzIHJldHVybmVkIFpfU1RSRUFNX0VORCwgdGhlIG9ubHkgcG9zc2libGUgb3BlcmF0aW9ucyBvbiB0aGUKKyAgc3RyZWFtIGFyZSBkZWZsYXRlUmVzZXQgb3IgZGVmbGF0ZUVuZC4KKworICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KKyAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiBJbiB0aGlzIGNhc2UsIGF2YWlsX291dCBtdXN0IGJlIGF0IGxlYXN0CisgIDAuMSUgbGFyZ2VyIHRoYW4gYXZhaWxfaW4gcGx1cyAxMiBieXRlcy4gIElmIGRlZmxhdGUgZG9lcyBub3QgcmV0dXJuCisgIFpfU1RSRUFNX0VORCwgdGhlbiBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAorICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KKworICAgIGRlZmxhdGUoKSBtYXkgdXBkYXRlIGRhdGFfdHlwZSBpZiBpdCBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYWJvdXQKKyAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9BU0NJSSBvciBaX0JJTkFSWSkuIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCisgIGJpbmFyeS4gVGhpcyBmaWVsZCBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QgYWZmZWN0CisgIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KKworICAgIGRlZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0CisgIHByb2Nlc3NlZCBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gcHJvZHVjZWQgKG9ubHkgd2hlbiBmbHVzaCBpcyBzZXQgdG8KKyAgWl9GSU5JU0gpLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCisgIGlmIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIE5VTEwpLCBaX0JVRl9FUlJPUiBpZiBubyBwcm9ncmVzcyBpcyBwb3NzaWJsZQorICAoZm9yIGV4YW1wbGUgYXZhaWxfaW4gb3IgYXZhaWxfb3V0IHdhcyB6ZXJvKS4KKyovCisKKworLyoKKyAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKKyAgIHBlbmRpbmcgb3V0cHV0LgorCisgICAgIGRlZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBmcmVlZAorICAgcHJlbWF0dXJlbHkgKHNvbWUgaW5wdXQgb3Igb3V0cHV0IHdhcyBkaXNjYXJkZWQpLiBJbiB0aGUgZXJyb3IgY2FzZSwKKyAgIG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlCisgICBkZWFsbG9jYXRlZCkuCisqLworCisKKy8qCitaRVhURVJOKGludCkgIGluZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworCisgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKKyAgIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkKKyAgIHRoZSBjYWxsZXIuIElmIG5leHRfaW4gaXMgbm90IFpfTlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUgZXhhY3QKKyAgIHZhbHVlIGRlcGVuZHMgb24gdGhlIGNvbXByZXNzaW9uIG1ldGhvZCksIGluZmxhdGVJbml0IGRldGVybWluZXMgdGhlCisgICBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSB0aGUgemxpYiBoZWFkZXIgYW5kIGFsbG9jYXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzCisgICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKKyAgIGluZmxhdGUuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8KKyAgIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICAgIGluZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIuICBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IKKyAgIG1lc3NhZ2UuIGluZmxhdGVJbml0IGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24gYXBhcnQgZnJvbSByZWFkaW5nCisgICB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kCisgICBhdmFpbF9pbiBtYXkgYmUgbW9kaWZpZWQsIGJ1dCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorKi8KKworCitaRVhURVJOKGludCkgaW5mbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOworLyoKKyAgICBpbmZsYXRlIGRlY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBzb21lCisgIGludHJvZHVjZSBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpCisgIGV4Y2VwdCB3aGVuIGZvcmNlZCB0byBmbHVzaC4KKworICBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBhcyBmb2xsb3dzLiBpbmZsYXRlIHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICAtIERlY29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4KKyAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBpcyB1cGRhdGVkIGFuZCBwcm9jZXNzaW5nCisgICAgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBpbmZsYXRlKCkuCisKKyAgLSBQcm92aWRlIG1vcmUgb3V0cHV0IHN0YXJ0aW5nIGF0IG5leHRfb3V0IGFuZCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dAorICAgIGFjY29yZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCB1bnRpbCB0aGVyZQorICAgIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBvciBubyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyIChzZWUgYmVsb3cKKyAgICBhYm91dCB0aGUgZmx1c2ggcGFyYW1ldGVyKS4KKworICBCZWZvcmUgdGhlIGNhbGwgb2YgaW5mbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZworICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIHRoZSBuZXh0XyogYW5kIGF2YWlsXyogdmFsdWVzIGFjY29yZGluZ2x5LgorICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIHVuY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yCisgIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVhY2gKKyAgY2FsbCBvZiBpbmZsYXRlKCkuIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdAorICBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlCisgIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisKKyAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX1NZTkNfRkxVU0gsIGluZmxhdGUgZmx1c2hlcyBhcyBtdWNoCisgIG91dHB1dCBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIGZsdXNoaW5nIGJlaGF2aW9yIG9mIGluZmxhdGUgaXMKKyAgbm90IHNwZWNpZmllZCBmb3IgdmFsdWVzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgb3RoZXIgdGhhbiBaX1NZTkNfRkxVU0gKKyAgYW5kIFpfRklOSVNILCBidXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgZmx1c2hlcyBhcyBtdWNoIG91dHB1dAorICBhcyBwb3NzaWJsZSBhbnl3YXkuCisKKyAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbgorICBlcnJvci4gSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcAorICAoYSBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvCisgIFpfRklOSVNILiBJbiB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZworICBvdXRwdXQgaXMgZmx1c2hlZDsgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZQorICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkCisgIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdAorICBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuIFRoZSB1c2Ugb2YgWl9GSU5JU0gKKyAgaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIHJvdXRpbmUKKyAgbWF5IGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpIGNhbGwuCisKKyAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tYWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlCisgIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UKKyAgaXQgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkCisgIHNvIGZhciAodGhhdCBpcywgdG90YWxfb3V0IGJ5dGVzKSBhbmQgcmV0dXJucyBaX09LLCBaX1NUUkVBTV9FTkQgb3IKKyAgYW4gZXJyb3IgY29kZSBhcyBkZXNjcmliZWQgYmVsb3cuIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpCisgIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlCisgIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5EIG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCisKKyAgICBpbmZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dCBwcm9jZXNzZWQKKyAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcworICBiZWVuIHJlYWNoZWQgYW5kIGFsbCB1bmNvbXByZXNzZWQgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkLCBaX05FRURfRElDVCBpZiBhCisgIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHBvaW50LCBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzCisgIGNvcnJ1cHRlZCAoaW5wdXQgc3RyZWFtIG5vdCBjb25mb3JtaW5nIHRvIHRoZSB6bGliIGZvcm1hdCBvciBpbmNvcnJlY3QKKyAgYWRsZXIzMiBjaGVja3N1bSksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQKKyAgKGZvciBleGFtcGxlIGlmIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIE5VTEwpLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlIG9yIGlmIHRoZXJlIHdhcyBub3QKKyAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLiBJbiB0aGUgWl9EQVRBX0VSUk9SCisgIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgdGhlbiBjYWxsIGluZmxhdGVTeW5jIHRvIGxvb2sgZm9yIGEgZ29vZAorICBjb21wcmVzc2lvbiBibG9jay4KKyovCisKKworWkVYVEVSTihpbnQpICBpbmZsYXRlRW5kIE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKKyAgIHBlbmRpbmcgb3V0cHV0LgorCisgICAgIGluZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUKKyAgIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBlcnJvciBjYXNlLCBtc2cgbWF5IGJlIHNldCBidXQgdGhlbiBwb2ludHMgdG8gYQorICAgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLgorKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZWQgZnVuY3Rpb25zICovCisKKy8qCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5lZWRlZCBvbmx5IGluIHNvbWUgc3BlY2lhbCBhcHBsaWNhdGlvbnMuCisqLworCisvKgorWkVYVEVSTihpbnQpICBkZWZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3aW5kb3dCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbWVtTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzdHJhdGVneSkpOworCisgICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGRlZmxhdGVJbml0IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiBUaGUKKyAgIGZpZWxkcyBuZXh0X2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkKKyAgIHRoZSBjYWxsZXIuCisKKyAgICAgVGhlIG1ldGhvZCBwYXJhbWV0ZXIgaXMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4gSXQgbXVzdCBiZSBaX0RFRkxBVEVEIGluCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplCisgICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMKKyAgIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIExhcmdlciB2YWx1ZXMgb2YgdGhpcyBwYXJhbWV0ZXIgcmVzdWx0IGluIGJldHRlcgorICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZgorICAgZGVmbGF0ZUluaXQgaXMgdXNlZCBpbnN0ZWFkLgorCisgICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCisgICBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0CisgICBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOyBtZW1MZXZlbD05IHVzZXMgbWF4aW11bSBtZW1vcnkKKyAgIGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LiBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5CisgICB1c2FnZSBhcyBhIGZ1bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgorCisgICAgIFRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0aGUKKyAgIHZhbHVlIFpfREVGQVVMVF9TVFJBVEVHWSBmb3Igbm9ybWFsIGRhdGEsIFpfRklMVEVSRUQgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYQorICAgZmlsdGVyIChvciBwcmVkaWN0b3IpLCBvciBaX0hVRkZNQU5fT05MWSB0byBmb3JjZSBIdWZmbWFuIGVuY29kaW5nIG9ubHkgKG5vCisgICBzdHJpbmcgbWF0Y2gpLiAgRmlsdGVyZWQgZGF0YSBjb25zaXN0cyBtb3N0bHkgb2Ygc21hbGwgdmFsdWVzIHdpdGggYQorICAgc29tZXdoYXQgcmFuZG9tIGRpc3RyaWJ1dGlvbi4gSW4gdGhpcyBjYXNlLCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzCisgICB0dW5lZCB0byBjb21wcmVzcyB0aGVtIGJldHRlci4gVGhlIGVmZmVjdCBvZiBaX0ZJTFRFUkVEIGlzIHRvIGZvcmNlIG1vcmUKKyAgIEh1ZmZtYW4gY29kaW5nIGFuZCBsZXNzIHN0cmluZyBtYXRjaGluZzsgaXQgaXMgc29tZXdoYXQgaW50ZXJtZWRpYXRlCisgICBiZXR3ZWVuIFpfREVGQVVMVCBhbmQgWl9IVUZGTUFOX09OTFkuIFRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgb25seSBhZmZlY3RzCisgICB0aGUgY29tcHJlc3Npb24gcmF0aW8gYnV0IG5vdCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGNvbXByZXNzZWQgb3V0cHV0IGV2ZW4KKyAgIGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4KKworICAgICAgZGVmbGF0ZUluaXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGFuIGludmFsaWQKKyAgIG1ldGhvZCkuIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQyIGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorKi8KKworLyoKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCisgICBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yIGRlZmxhdGVSZXNldCwgYmVmb3JlIGFueQorICAgY2FsbCBvZiBkZWZsYXRlLiBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKKyAgIGRpY3Rpb25hcnkgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCisKKyAgICAgVGhlIGRpY3Rpb25hcnkgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseQorICAgdG8gYmUgZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seQorICAgdXNlZCBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQorICAgZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbiBiZQorICAgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIgdGhhbgorICAgd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgorCisgICAgIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3Npb24gZGF0YSBzdHJ1Y3R1cmVzIHNlbGVjdGVkIGJ5CisgICBkZWZsYXRlSW5pdCBvciBkZWZsYXRlSW5pdDIsIGEgcGFydCBvZiB0aGUgZGljdGlvbmFyeSBtYXkgaW4gZWZmZWN0IGJlCisgICBkaXNjYXJkZWQsIGZvciBleGFtcGxlIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbgorICAgZGVmbGF0ZSBvciBkZWZsYXRlMi4gVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZSB1c2VmdWwgc2hvdWxkIGJlCisgICBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeSwgbm90IGF0IHRoZSBmcm9udC4KKworICAgICBVcG9uIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLCBzdHJtLT5hZGxlciBpcyBzZXQgdG8gdGhlIEFkbGVyMzIgdmFsdWUKKyAgIG9mIHRoZSBkaWN0aW9uYXJ5OyB0aGUgZGVjb21wcmVzc29yIG1heSBsYXRlciB1c2UgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUKKyAgIHdoaWNoIGRpY3Rpb25hcnkgaGFzIGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gKFRoZSBBZGxlcjMyIHZhbHVlCisgICBhcHBsaWVzIHRvIHRoZSB3aG9sZSBkaWN0aW9uYXJ5IGV2ZW4gaWYgb25seSBhIHN1YnNldCBvZiB0aGUgZGljdGlvbmFyeSBpcworICAgYWN0dWFsbHkgdXNlZCBieSB0aGUgY29tcHJlc3Nvci4pCisKKyAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlvbmFyeSkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcworICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQorICAgb3IgaWYgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90CisgICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorKi8KKworLyoKKyAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS4KKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXByZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQorICAgdHJpZWQsIGZvciBleGFtcGxlIHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBwcmUtcHJvY2Vzc2luZyB0aGUgaW5wdXQKKyAgIGRhdGEgd2l0aCBhIGZpbHRlci4gVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZAorICAgYnkgY2FsbGluZyBkZWZsYXRlRW5kLiAgTm90ZSB0aGF0IGRlZmxhdGVDb3B5IGR1cGxpY2F0ZXMgdGhlIGludGVybmFsCisgICBjb21wcmVzc2lvbiBzdGF0ZSB3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3RyYXRlZ3kgaXMgc2xvdyBhbmQKKyAgIGNhbiBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LgorCisgICAgIGRlZmxhdGVDb3B5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50CisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgTlVMTCkuIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIGRlc3RpbmF0aW9uLgorKi8KKworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgorICAgVGhlIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzCisgICB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGRlZmxhdGVJbml0Mi4KKworICAgICAgZGVmbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCisqLworCisvKgorICAgICBEeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBjb21wcmVzc2lvbiBzdHJhdGVneS4gIFRoZQorICAgaW50ZXJwcmV0YXRpb24gb2YgbGV2ZWwgYW5kIHN0cmF0ZWd5IGlzIGFzIGluIGRlZmxhdGVJbml0Mi4gIFRoaXMgY2FuIGJlCisgICB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbXByZXNzaW9uIGFuZCBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dCBkYXRhLCBvcgorICAgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgaW5wdXQgZGF0YSByZXF1aXJpbmcgYSBkaWZmZXJlbnQKKyAgIHN0cmF0ZWd5LiBJZiB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgY2hhbmdlZCwgdGhlIGlucHV0IGF2YWlsYWJsZSBzbyBmYXIKKyAgIGlzIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkIGxldmVsIChhbmQgbWF5IGJlIGZsdXNoZWQpOyB0aGUgbmV3IGxldmVsIHdpbGwKKyAgIHRha2UgZWZmZWN0IG9ubHkgYXQgdGhlIG5leHQgY2FsbCBvZiBkZWZsYXRlKCkuCisKKyAgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGVQYXJhbXMsIHRoZSBzdHJlYW0gc3RhdGUgbXVzdCBiZSBzZXQgYXMgZm9yCisgICBhIGNhbGwgb2YgZGVmbGF0ZSgpLCBzaW5jZSB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBpbnB1dCBtYXkgaGF2ZSB0bworICAgYmUgY29tcHJlc3NlZCBhbmQgZmx1c2hlZC4gSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3QgYmUgbm9uLXplcm8uCisKKyAgICAgZGVmbGF0ZVBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIFpfQlVGX0VSUk9SCisgICBpZiBzdHJtLT5hdmFpbF9vdXQgd2FzIHplcm8uCisqLworCisvKgorWkVYVEVSTihpbnQpICBpbmZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykpOworCisgICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGluZmxhdGVJbml0IHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyLiBUaGUKKyAgIGZpZWxkcyBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQKKyAgIGJlZm9yZSBieSB0aGUgY2FsbGVyLgorCisgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdworICAgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKKyAgIGluc3RlYWQuIElmIGEgY29tcHJlc3NlZCBzdHJlYW0gd2l0aCBhIGxhcmdlciB3aW5kb3cgc2l6ZSBpcyBnaXZlbiBhcworICAgaW5wdXQsIGluZmxhdGUoKSB3aWxsIHJldHVybiB3aXRoIHRoZSBlcnJvciBjb2RlIFpfREFUQV9FUlJPUiBpbnN0ZWFkIG9mCisgICB0cnlpbmcgdG8gYWxsb2NhdGUgYSBsYXJnZXIgd2luZG93LgorCisgICAgICBpbmZsYXRlSW5pdDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGEgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgYSBuZWdhdGl2ZQorICAgbWVtTGV2ZWwpLiBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0MgorICAgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbiBhcGFydCBmcm9tIHJlYWRpbmcgdGhlIHpsaWIgaGVhZGVyIGlmCisgICBwcmVzZW50OiB0aGlzIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuIChTbyBuZXh0X2luIGFuZCBhdmFpbF9pbiBtYXkgYmUKKyAgIG1vZGlmaWVkLCBidXQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW5jaGFuZ2VkLikKKyovCisKKy8qCisgICAgIEluaXRpYWxpemVzIHRoZSBkZWNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gdW5jb21wcmVzc2VkIGJ5dGUKKyAgIHNlcXVlbmNlLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlCisgICBpZiB0aGlzIGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgorICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgQWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGNhbGwgb2YKKyAgIGluZmxhdGUuIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQorICAgZGljdGlvbmFyeSAoc2VlIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4KKworICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQorICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCisgICBpbmNvbnNpc3RlbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgZ2l2ZW4gZGljdGlvbmFyeSBkb2Vzbid0IG1hdGNoIHRoZQorICAgZXhwZWN0ZWQgb25lIChpbmNvcnJlY3QgQWRsZXIzMiB2YWx1ZSkuIGluZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90CisgICBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBzdWJzZXF1ZW50IGNhbGxzIG9mCisgICBpbmZsYXRlKCkuCisqLworCisvKgorICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQorICBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAorICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgorCisgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwgWl9CVUZfRVJST1IKKyAgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gSW4gdGhlIHN1Y2Nlc3MKKyAgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4gd2hpY2gKKyAgaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuIEluIHRoZSBlcnJvciBjYXNlLCB0aGUKKyAgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaCB0aW1lLAorICB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KKyovCisKK1pFWFRFUk4oaW50KSAgaW5mbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGluZmxhdGVFbmQgZm9sbG93ZWQgYnkgaW5mbGF0ZUluaXQsCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGRlY29tcHJlc3Npb24gc3RhdGUuCisgICBUaGUgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLgorCisgICAgICBpbmZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBOVUxMKS4KKyovCisKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyoKKyAgICAgVGhlIGZvbGxvd2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZQorICAgYmFzaWMgc3RyZWFtLW9yaWVudGVkIGZ1bmN0aW9ucy4gVG8gc2ltcGxpZnkgdGhlIGludGVyZmFjZSwgc29tZQorICAgZGVmYXVsdCBvcHRpb25zIGFyZSBhc3N1bWVkIChjb21wcmVzc2lvbiBsZXZlbCBhbmQgbWVtb3J5IHVzYWdlLAorICAgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zKS4gVGhlIHNvdXJjZSBjb2RlIG9mIHRoZXNlCisgICB1dGlsaXR5IGZ1bmN0aW9ucyBjYW4gZWFzaWx5IGJlIG1vZGlmaWVkIGlmIHlvdSBuZWVkIHNwZWNpYWwgb3B0aW9ucy4KKyovCisKKy8qCisgICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgc291cmNlTGVuIGlzCisgICB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsCisgICBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMC4xJSBsYXJnZXIgdGhhbgorICAgc291cmNlTGVuIHBsdXMgMTIgYnl0ZXMuIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCisgICBjb21wcmVzc2VkIGJ1ZmZlci4KKyAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb21wcmVzcyBhIHdob2xlIGZpbGUgYXQgb25jZSBpZiB0aGUKKyAgIGlucHV0IGZpbGUgaXMgbW1hcCdlZC4KKyAgICAgY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAorICAgYnVmZmVyLgorKi8KKworLyoKKyAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuIFRoZSBsZXZlbAorICAgcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGRlZmxhdGVJbml0LiAgc291cmNlTGVuIGlzIHRoZSBieXRlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMC4xJSBsYXJnZXIgdGhhbiBzb3VyY2VMZW4gcGx1cworICAgMTIgYnl0ZXMuIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgorCisgICAgIGNvbXByZXNzMiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwKKyAgIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBsZXZlbCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyovCisKKy8qCisgICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKKyAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKKyAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKKyAgIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUKKyAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgorICAgYnkgc29tZSBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKKyAgIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgorICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgYSB3aG9sZSBmaWxlIGF0IG9uY2UgaWYgdGhlCisgICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCisKKyAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAorICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0CisgICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkLgorKi8KKworCisvKgorICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKKyAgIGlzIGFzIGluIGZvcGVuICgicmIiIG9yICJ3YiIpIGJ1dCBjYW4gYWxzbyBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwKKyAgICgid2I5Iikgb3IgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvcgorICAgSHVmZm1hbiBvbmx5IGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIi4gKFNlZSB0aGUgZGVzY3JpcHRpb24KKyAgIG9mIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikKKworICAgICBnem9wZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlzCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uCisKKyAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJlIHdhcworICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlOyBlcnJubworICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjYXNlcyAoaWYgZXJybm8gaXMgemVybywgdGhlCisgICB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4gICovCisKKy8qCisgICAgIGd6ZG9wZW4oKSBhc3NvY2lhdGVzIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gIEZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSBvYnRhaW5lZCBmcm9tIGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBvcgorICAgZmlsZW5vIChpbiB0aGUgZmlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIGZvcGVuKS4KKyAgIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcyBpbiBnem9wZW4uCisgICAgIFRoZSBuZXh0IGNhbGwgb2YgZ3pjbG9zZSBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQpLCBtb2RlKSBjbG9zZXMgdGhlIGZpbGUKKyAgIGRlc2NyaXB0b3IgZmQuIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGd6ZG9wZW4oZHVwKGZkKSwgbW9kZSkuCisgICAgIGd6ZG9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlCisgICB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgorKi8KKworLyoKKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gU2VlIHRoZSBkZXNjcmlwdGlvbgorICAgb2YgZGVmbGF0ZUluaXQyIGZvciB0aGUgbWVhbmluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzLgorICAgICBnenNldHBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGZpbGUgd2FzIG5vdAorICAgb3BlbmVkIGZvciB3cml0aW5nLgorKi8KKworLyoKKyAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgSWYgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyCisgICBvZiBieXRlcyBpbnRvIHRoZSBidWZmZXIuCisgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yCisgICBlbmQgb2YgZmlsZSwgLTEgZm9yIGVycm9yKS4gKi8KKworLyoKKyAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KKyAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuCisgICAoMCBpbiBjYXNlIG9mIGVycm9yKS4KKyovCisKKy8qCisgICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgorICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCisqLworCisvKgorICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZworICAgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgorICAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCisvKgorICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9yCisgICBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4gZW5kLW9mLWZpbGUKKyAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkIHdpdGggYSBudWxsCisgICBjaGFyYWN0ZXIuCisgICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorKi8KKworLyoKKyAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCisvKgorICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUKKyAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCisqLworCisvKgorICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKKyAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKKyAgIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIGd6ZXJyb3IgYmVsb3cpLiBnemZsdXNoIHJldHVybnMgWl9PSyBpZgorICAgdGhlIGZsdXNoIHBhcmFtZXRlciBpcyBaX0ZJTklTSCBhbmQgYWxsIG91dHB1dCBjb3VsZCBiZSBmbHVzaGVkLgorICAgICBnemZsdXNoIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIHN0cmljdGx5IG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGNhbgorICAgZGVncmFkZSBjb21wcmVzc2lvbi4KKyovCisKKy8qCisgICAgICBTZXRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCisgICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4gVGhlIHdoZW5jZSBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBhcyBpbiBsc2VlaygyKTsKKyAgIHRoZSB2YWx1ZSBTRUVLX0VORCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcsIHRoaXMgZnVuY3Rpb24gaXMgZW11bGF0ZWQgYnV0IGNhbiBiZQorICAgZXh0cmVtZWx5IHNsb3cuIElmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZywgb25seSBmb3J3YXJkIHNlZWtzIGFyZQorICAgc3VwcG9ydGVkOyBnenNlZWsgdGhlbiBjb21wcmVzc2VzIGEgc2VxdWVuY2Ugb2YgemVyb2VzIHVwIHRvIHRoZSBuZXcKKyAgIHN0YXJ0aW5nIHBvc2l0aW9uLgorCisgICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCisgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCBpbgorICAgcGFydGljdWxhciBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgYW5kIHRoZSBuZXcgc3RhcnRpbmcgcG9zaXRpb24KKyAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyovCisKKy8qCisgICAgIFJld2luZHMgdGhlIGdpdmVuIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHJlYWRpbmcuCisKKyAgIGd6cmV3aW5kKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gKGludClnenNlZWsoZmlsZSwgMEwsIFNFRUtfU0VUKQorKi8KKworLyoKKyAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQorICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCisKKyAgIGd6dGVsbChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpCisqLworCisvKgorICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgorICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KKyovCisKKy8qCisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKKyAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYgorICAgZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gZ3plcnJvciBiZWxvdykuCisqLworCisvKgorICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgbGFzdCBlcnJvciB3aGljaCBvY2N1cnJlZCBvbiB0aGUKKyAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYgYW4KKyAgIGVycm9yIG9jY3VycmVkIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LAorICAgZXJybnVtIGlzIHNldCB0byBaX0VSUk5PIGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KKyAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKyovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLworCisvKgorICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCByZWxhdGVkIHRvIGNvbXByZXNzaW9uIGJ1dCBhcmUgZXhwb3J0ZWQKKyAgIGFueXdheSBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUKKyAgIGNvbXByZXNzaW9uIGxpYnJhcnkuCisqLworCitaRVhURVJOKHVMb25nKSAgYWRsZXIzMiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CisKKy8qCisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQKKyAgIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgdGhlIHJlcXVpcmVkIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjaGVja3N1bS4KKyAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgIG11Y2ggZmFzdGVyLiBVc2FnZSBleGFtcGxlOgorCisgICAgIHVMb25nIGFkbGVyID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGFkbGVyID0gYWRsZXIzMihhZGxlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKKyovCisKKy8qCisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgY3JjIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUgdXBkYXRlZAorICAgY3JjLiBJZiBidWYgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZCBpbml0aWFsIHZhbHVlCisgICBmb3IgdGhlIGNyYy4gUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZAorICAgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVXNhZ2UgZXhhbXBsZToKKworICAgICB1TG9uZyBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKworICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgeworICAgICAgIGNyYyA9IGNyYzMyKGNyYywgYnVmZmVyLCBsZW5ndGgpOworICAgICB9CisgICAgIGlmIChjcmMgIT0gb3JpZ2luYWxfY3JjKSBlcnJvcigpOworKi8KKworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJpb3VzIGhhY2tzLCBkb24ndCBsb29rIDopICovCisKKy8qIGRlZmxhdGVJbml0IGFuZCBpbmZsYXRlSW5pdCBhcmUgbWFjcm9zIHRvIGFsbG93IGNoZWNraW5nIHRoZSB6bGliIHZlcnNpb24KKyAqIGFuZCB0aGUgY29tcGlsZXIncyB2aWV3IG9mIHpfc3RyZWFtOgorICovCitaRVhURVJOKGludCkgIGluZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworI2RlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAorICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisjZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKKyAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCisgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAorICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisjZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCisgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1pMSUJfSCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9nemlwL3p1dGlsLmMgYi9mcmVldHlwZS0yLjYvc3JjL2d6aXAvenV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQwYzFmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL3p1dGlsLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qIHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpbmNsdWRlICJ6dXRpbC5oIgorCisjaWZuZGVmIFNUREMKK2V4dGVybiB2b2lkIGV4aXQgT0YoKGludCkpOworI2VuZGlmCisKKworI2lmbmRlZiBIQVZFX01FTUNQWQorCit2b2lkIHptZW1jcHkoZGVzdCwgc291cmNlLCBsZW4pCisgICAgQnl0ZWYqIGRlc3Q7CisgICAgY29uc3QgQnl0ZWYqIHNvdXJjZTsKKyAgICB1SW50ICBsZW47Cit7CisgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CisgICAgZG8geworICAgICAgICAqZGVzdCsrID0gKnNvdXJjZSsrOyAvKiA/Pz8gdG8gYmUgdW5yb2xsZWQgKi8KKyAgICB9IHdoaWxlICgtLWxlbiAhPSAwKTsKK30KKworaW50IHptZW1jbXAoczEsIHMyLCBsZW4pCisgICAgY29uc3QgQnl0ZWYqIHMxOworICAgIGNvbnN0IEJ5dGVmKiBzMjsKKyAgICB1SW50ICBsZW47Cit7CisgICAgdUludCBqOworCisgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgIGlmIChzMVtqXSAhPSBzMltqXSkgcmV0dXJuIDIqKHMxW2pdID4gczJbal0pLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIHptZW16ZXJvKGRlc3QsIGxlbikKKyAgICBCeXRlZiogZGVzdDsKKyAgICB1SW50ICBsZW47Cit7CisgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CisgICAgZG8geworICAgICAgICAqZGVzdCsrID0gMDsgIC8qID8/PyB0byBiZSB1bnJvbGxlZCAqLworICAgIH0gd2hpbGUgKC0tbGVuICE9IDApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBNU0RPUyApICYmIGRlZmluZWQoIF9fVFVSQk9DX18gKSAmJiAhZGVmaW5lZCggTVlfWkNBTExPQyApCisjaWYgKGRlZmluZWQoIF9fQk9STEFORENfXykgfHwgIWRlZmluZWQoU01BTExfTUVESVVNKSkgJiYgIWRlZmluZWQoX18zMkJJVF9fKQorLyogU21hbGwgYW5kIG1lZGl1bSBtb2RlbCBpbiBUdXJibyBDIGFyZSBmb3Igbm93IGxpbWl0ZWQgdG8gbmVhciBhbGxvY2F0aW9uCisgKiB3aXRoIHJlZHVjZWQgTUFYX1dCSVRTIGFuZCBNQVhfTUVNX0xFVkVMCisgKi8KKyMgIGRlZmluZSBNWV9aQ0FMTE9DCisKKy8qIFR1cmJvIEMgbWFsbG9jKCkgZG9lcyBub3QgYWxsb3cgZHluYW1pYyBhbGxvY2F0aW9uIG9mIDY0SyBieXRlcworICogYW5kIGZhcm1hbGxvYyg2NEspIHJldHVybnMgYSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IG9mIDgsIHNvIHdlCisgKiBtdXN0IGZpeCB0aGUgcG9pbnRlci4gV2FybmluZzogdGhlIHBvaW50ZXIgbXVzdCBiZSBwdXQgYmFjayB0byBpdHMKKyAqIG9yaWdpbmFsIGZvcm0gaW4gb3JkZXIgdG8gZnJlZSBpdCwgdXNlIHpjZnJlZSgpLgorICovCisKKyNkZWZpbmUgTUFYX1BUUiAxMAorLyogMTAqNjRLID0gNjQwSyAqLworCitsb2NhbCBpbnQgbmV4dF9wdHIgPSAwOworCit0eXBlZGVmIHN0cnVjdCBwdHJfdGFibGVfcyB7CisgICAgdm9pZHBmIG9yZ19wdHI7CisgICAgdm9pZHBmIG5ld19wdHI7Cit9IHB0cl90YWJsZTsKKworbG9jYWwgcHRyX3RhYmxlIHRhYmxlW01BWF9QVFJdOworLyogVGhpcyB0YWJsZSBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBmb3JtIG9mIHBvaW50ZXJzCisgKiB0byBsYXJnZSBidWZmZXJzICg2NEspLiBTdWNoIHBvaW50ZXJzIGFyZSBub3JtYWxpemVkIHdpdGggYSB6ZXJvIG9mZnNldC4KKyAqIFNpbmNlIE1TRE9TIGlzIG5vdCBhIHByZWVtcHRpdmUgbXVsdGl0YXNraW5nIE9TLCB0aGlzIHRhYmxlIGlzIG5vdAorICogcHJvdGVjdGVkIGZyb20gY29uY3VycmVudCBhY2Nlc3MuIFRoaXMgaGFjayBkb2Vzbid0IHdvcmsgYW55d2F5IG9uCisgKiBhIHByb3RlY3RlZCBzeXN0ZW0gbGlrZSBPUy8yLiBVc2UgTWljcm9zb2Z0IEMgaW5zdGVhZC4KKyAqLworCit2b2lkcGYgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit7CisgICAgdm9pZHBmIGJ1ZiA9IG9wYXF1ZTsgLyoganVzdCB0byBtYWtlIHNvbWUgY29tcGlsZXJzIGhhcHB5ICovCisgICAgdWxnIGJzaXplID0gKHVsZylpdGVtcypzaXplOworCisgICAgLyogSWYgd2UgYWxsb2NhdGUgbGVzcyB0aGFuIDY1NTIwIGJ5dGVzLCB3ZSBhc3N1bWUgdGhhdCBmYXJtYWxsb2MKKyAgICAgKiB3aWxsIHJldHVybiBhIHVzYWJsZSBwb2ludGVyIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0byBiZSBub3JtYWxpemVkLgorICAgICAqLworICAgIGlmIChic2l6ZSA8IDY1NTIwTCkgeworICAgICAgICBidWYgPSBmYXJtYWxsb2MoYnNpemUpOworICAgICAgICBpZiAoKih1c2gqKSZidWYgIT0gMCkgcmV0dXJuIGJ1ZjsKKyAgICB9IGVsc2UgeworICAgICAgICBidWYgPSBmYXJtYWxsb2MoYnNpemUgKyAxNkwpOworICAgIH0KKyAgICBpZiAoYnVmID09IE5VTEwgfHwgbmV4dF9wdHIgPj0gTUFYX1BUUikgcmV0dXJuIE5VTEw7CisgICAgdGFibGVbbmV4dF9wdHJdLm9yZ19wdHIgPSBidWY7CisKKyAgICAvKiBOb3JtYWxpemUgdGhlIHBvaW50ZXIgdG8gc2VnOjAgKi8KKyAgICAqKCh1c2gqKSZidWYrMSkgKz0gKCh1c2gpKCh1Y2gqKWJ1Zi0wKSArIDE1KSA+PiA0OworICAgICoodXNoKikmYnVmID0gMDsKKyAgICB0YWJsZVtuZXh0X3B0cisrXS5uZXdfcHRyID0gYnVmOworICAgIHJldHVybiBidWY7Cit9CisKK3ZvaWQgIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3sKKyAgICBpbnQgbjsKKyAgICBpZiAoKih1c2gqKSZwdHIgIT0gMCkgeyAvKiBvYmplY3QgPCA2NEsgKi8KKyAgICAgICAgZmFyZnJlZShwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIEZpbmQgdGhlIG9yaWdpbmFsIHBvaW50ZXIgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgbmV4dF9wdHI7IG4rKykgeworICAgICAgICBpZiAocHRyICE9IHRhYmxlW25dLm5ld19wdHIpIGNvbnRpbnVlOworCisgICAgICAgIGZhcmZyZWUodGFibGVbbl0ub3JnX3B0cik7CisgICAgICAgIHdoaWxlICgrK24gPCBuZXh0X3B0cikgeworICAgICAgICAgICAgdGFibGVbbi0xXSA9IHRhYmxlW25dOworICAgICAgICB9CisgICAgICAgIG5leHRfcHRyLS07CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHRyID0gb3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29tZSBjb21waWxlcnMgaGFwcHkgKi8KKyAgICBBc3NlcnQoMCwgInpjZnJlZTogcHRyIG5vdCBmb3VuZCIpOworfQorI2VuZGlmCisjZW5kaWYgLyogTVNET1MgJiYgX19UVVJCT0NfXyAqLworCisKKyNpZiBkZWZpbmVkKE1fSTg2KSAmJiAhZGVmaW5lZChfXzMyQklUX18pICYmICFkZWZpbmVkKCBNWV9aQ0FMTE9DICkKKy8qIE1pY3Jvc29mdCBDIGluIDE2LWJpdCBtb2RlICovCisKKyMgIGRlZmluZSBNWV9aQ0FMTE9DCisKKyNpZiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IChfTVNDX1ZFUiA8PSA2MDApKQorIyAgZGVmaW5lIF9oYWxsb2MgIGhhbGxvYworIyAgZGVmaW5lIF9oZnJlZSAgIGhmcmVlCisjZW5kaWYKKwordm9pZHBmIHpjYWxsb2MgKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25lZCBzaXplKQoreworICAgIGlmIChvcGFxdWUpIG9wYXF1ZSA9IDA7IC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICByZXR1cm4gX2hhbGxvYygobG9uZylpdGVtcywgc2l6ZSk7Cit9CisKK3ZvaWQgIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3sKKyAgICBpZiAob3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgX2hmcmVlKHB0cik7Cit9CisKKyNlbmRpZiAvKiBNU0MgKi8KKworCisjaWZuZGVmIE1ZX1pDQUxMT0MgLyogQW55IHN5c3RlbSB3aXRob3V0IGEgc3BlY2lhbCBhbGxvYyBmdW5jdGlvbiAqLworCisjaWZuZGVmIFNUREMKK2V4dGVybiB2b2lkcCAgZnRfc2NhbGxvYyBPRigodUludCBpdGVtcywgdUludCBzaXplKSk7CitleHRlcm4gdm9pZCAgIGZ0X3NmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKKyNlbmRpZgorCit2b2lkcGYgemNhbGxvYyAob3BhcXVlLCBpdGVtcywgc2l6ZSkKKyAgICB2b2lkcGYgb3BhcXVlOworICAgIHVuc2lnbmVkIGl0ZW1zOworICAgIHVuc2lnbmVkIHNpemU7Cit7CisgICAgaWYgKG9wYXF1ZSkgaXRlbXMgKz0gc2l6ZSAtIHNpemU7IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICByZXR1cm4gKHZvaWRwZilmdF9zY2FsbG9jKGl0ZW1zLCBzaXplKTsKK30KKwordm9pZCAgemNmcmVlIChvcGFxdWUsIHB0cikKKyAgICB2b2lkcGYgb3BhcXVlOworICAgIHZvaWRwZiBwdHI7Cit7CisgICAgZnRfc2ZyZWUocHRyKTsKKyAgICBpZiAob3BhcXVlKSByZXR1cm47IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KK30KKworI2VuZGlmIC8qIE1ZX1pDQUxMT0MgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC96dXRpbC5oIGIvZnJlZXR5cGUtMi42L3NyYy9nemlwL3p1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2ODhjZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvZ3ppcC96dXRpbC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFjZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGlzCisgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpZm5kZWYgX1pfVVRJTF9ICisjZGVmaW5lIF9aX1VUSUxfSAorCisjaW5jbHVkZSAiemxpYi5oIgorCisjaWZkZWYgU1REQworIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgTk9fRVJSTk9fSAorICAgIGV4dGVybiBpbnQgZXJybm87CisjZWxzZQorIyAgIGluY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2lmbmRlZiBsb2NhbAorIyAgZGVmaW5lIGxvY2FsIHN0YXRpYworI2VuZGlmCisvKiBjb21waWxlIHdpdGggLURsb2NhbCBpZiB5b3VyIGRlYnVnZ2VyIGNhbid0IGZpbmQgc3RhdGljIHN5bWJvbHMgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Cit0eXBlZGVmIHVjaCBGQVIgdWNoZjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwordHlwZWRlZiB1c2ggRkFSIHVzaGY7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKKworCisjZGVmaW5lIEVSUl9SRVRVUk4oc3RybSxlcnIpIFwKKyAgcmV0dXJuIChzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhlcnIpLCAoZXJyKSkKKy8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLworCisgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KKworI2lmbmRlZiBERUZfV0JJVFMKKyMgIGRlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCisjZW5kaWYKKy8qIGRlZmF1bHQgd2luZG93Qml0cyBmb3IgZGVjb21wcmVzc2lvbi4gTUFYX1dCSVRTIGlzIGZvciBjb21wcmVzc2lvbiBvbmx5ICovCisKKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisKKyNkZWZpbmUgU1RPUkVEX0JMT0NLIDAKKyNkZWZpbmUgU1RBVElDX1RSRUVTIDEKKyNkZWZpbmUgRFlOX1RSRUVTICAgIDIKKy8qIFRoZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovCisKKyNkZWZpbmUgTUlOX01BVENIICAzCisjZGVmaW5lIE1BWF9NQVRDSCAgMjU4CisvKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBtYXRjaCBsZW5ndGhzICovCisKKyNkZWZpbmUgUFJFU0VUX0RJQ1QgMHgyMCAvKiBwcmVzZXQgZGljdGlvbmFyeSBmbGFnIGluIHpsaWIgaGVhZGVyICovCisKKyAgICAgICAgLyogdGFyZ2V0IGRlcGVuZGVuY2llcyAqLworCisjaWZkZWYgTVNET1MKKyMgIGRlZmluZSBPU19DT0RFICAweDAwCisjICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgICBpZihfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQorICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KKyAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOworICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CisjICAgIGVsc2UKKyMgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICAgIGVuZGlmCisjICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgT1MyCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwNgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMiAvKiBXaW5kb3cgOTUgJiBXaW5kb3dzIE5UICovCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwYgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZBWEMpIHx8IGRlZmluZWQoVk1TKQorIyAgZGVmaW5lIE9TX0NPREUgIDB4MDIKKyMgIGRlZmluZSBGX09QRU4obmFtZSwgbW9kZSkgXAorICAgICBmdF9mb3BlbigobmFtZSksIChtb2RlKSwgIm1iYz02MCIsICJjdHg9c3RtIiwgInJmbT1maXgiLCAibXJzPTUxMiIpCisjZW5kaWYKKworI2lmZGVmIEFNSUdBCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFUQVJJKSB8fCBkZWZpbmVkKGF0YXJpc3QpCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwNQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1BQ09TKSB8fCBkZWZpbmVkKFRBUkdFVF9PU19NQUMpCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwNworIyAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcworIyAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KKyMgIGVsc2UKKyMgICAgaWZuZGVmIGZkb3BlbgorIyAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX181MFNFUklFUyAvKiBQcmltZS9QUklNT1MgKi8KKyMgIGRlZmluZSBPU19DT0RFICAweDBGCisjZW5kaWYKKworI2lmZGVmIFRPUFMyMAorIyAgZGVmaW5lIE9TX0NPREUgIDB4MGEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfQkVPU18pIHx8IGRlZmluZWQoUklTQ09TKQorIyAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjZW5kaWYKKworI2lmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPiA2MDApKQorIyAgZGVmaW5lIGZkb3BlbihmZCx0eXBlKSAgX2Zkb3BlbihmZCx0eXBlKQorI2VuZGlmCisKKworICAgICAgICAvKiBDb21tb24gZGVmYXVsdHMgKi8KKworI2lmbmRlZiBPU19DT0RFCisjICBkZWZpbmUgT1NfQ09ERSAgMHgwMyAgLyogYXNzdW1lIFVuaXggKi8KKyNlbmRpZgorCisjaWZuZGVmIEZfT1BFTgorIyAgZGVmaW5lIEZfT1BFTihuYW1lLCBtb2RlKSBmdF9mb3BlbigobmFtZSksIChtb2RlKSkKKyNlbmRpZgorCisgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KKworI2lmZGVmIEhBVkVfU1RSRVJST1IKKyAgIGV4dGVybiBjaGFyICpzdHJlcnJvciBPRigoaW50KSk7CisjICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgc3RyZXJyb3IoZXJybnVtKQorI2Vsc2UKKyMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKHB5cikKKyMgIGRlZmluZSBOT19NRU1DUFkKKyNlbmRpZgorI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQorIC8qIFVzZSBvdXIgb3duIGZ1bmN0aW9ucyBmb3Igc21hbGwgYW5kIG1lZGl1bSBtb2RlbCB3aXRoIE1TQyA8PSA1LjAuCisgICogWW91IG1heSBoYXZlIHRvIHVzZSB0aGUgc2FtZSBzdHJhdGVneSBmb3IgQm9ybGFuZCBDICh1bnRlc3RlZCkuCisgICogVGhlIF9fU0NfXyBjaGVjayBpcyBmb3IgU3ltYW50ZWMuCisgICovCisjICBkZWZpbmUgTk9fTUVNQ1BZCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKEhBVkVfTUVNQ1BZKSAmJiAhZGVmaW5lZChOT19NRU1DUFkpCisjICBkZWZpbmUgSEFWRV9NRU1DUFkKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUVNQ1BZCisjICBpZmRlZiBTTUFMTF9NRURJVU0gLyogTVNET1Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSB6bWVtY3B5IF9mbWVtY3B5CisjICAgIGRlZmluZSB6bWVtY21wIF9mbWVtY21wCisjICAgIGRlZmluZSB6bWVtemVybyhkZXN0LCBsZW4pIF9mbWVtc2V0KGRlc3QsIDAsIGxlbikKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHptZW1jcHkgZnRfbWVtY3B5CisjICAgIGRlZmluZSB6bWVtY21wIGZ0X21lbWNtcAorIyAgICBkZWZpbmUgem1lbXplcm8oZGVzdCwgbGVuKSBmdF9tZW1zZXQoZGVzdCwgMCwgbGVuKQorIyAgZW5kaWYKKyNlbHNlCisgICBleHRlcm4gdm9pZCB6bWVtY3B5ICBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7CisgICBleHRlcm4gaW50ICB6bWVtY21wICBPRigoY29uc3QgQnl0ZWYqIHMxLCBjb25zdCBCeXRlZiogczIsIHVJbnQgbGVuKSk7CisgICBleHRlcm4gdm9pZCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CisjZW5kaWYKKworLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KKyNpZmRlZiBERUJVRworIyAgaW5jbHVkZSA8c3RkaW8uaD4KKyAgIGV4dGVybiBpbnQgel92ZXJib3NlOworICAgZXh0ZXJuIHZvaWQgel9lcnJvciAgICBPRigoY2hhciAqbSkpOworIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIHpfZXJyb3IobXNnKTt9CisjICBkZWZpbmUgVHJhY2UoeCkge2lmICh6X3ZlcmJvc2U+PTApIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHpfdmVyYm9zZT4wKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZXZ2KHgpIHtpZiAoel92ZXJib3NlPjEpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlYyhjLHgpIHtpZiAoel92ZXJib3NlPjAgJiYgKGMpKSBmcHJpbnRmIHggO30KKyMgIGRlZmluZSBUcmFjZWN2KGMseCkge2lmICh6X3ZlcmJvc2U+MSAmJiAoYykpIGZwcmludGYgeCA7fQorI2Vsc2UKKyMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpCisjICBkZWZpbmUgVHJhY2UoeCkKKyMgIGRlZmluZSBUcmFjZXYoeCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpCisjICBkZWZpbmUgVHJhY2VjKGMseCkKKyMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyNlbmRpZgorCisKK3R5cGVkZWYgdUxvbmcgKCpjaGVja19mdW5jKSBPRigodUxvbmcgY2hlY2ssIGNvbnN0IEJ5dGVmICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgbGVuKSk7Citsb2NhbCB2b2lkcGYgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpKTsKK2xvY2FsIHZvaWQgICB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisKKyNkZWZpbmUgWkFMTE9DKHN0cm0sIGl0ZW1zLCBzaXplKSBcCisgICAgICAgICAgICgqKChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKKyNkZWZpbmUgWkZSRUUoc3RybSwgYWRkcikgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwgKHZvaWRwZikoYWRkcikpCisjZGVmaW5lIFRSWV9GUkVFKHMsIHApIHtpZiAocCkgWkZSRUUocywgcCk7fQorCisjZW5kaWYgLyogX1pfVVRJTF9IICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2x6dy9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9sencvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWVmZmUyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9sencvSmFtZmlsZQpAQCAtMCwwICsxLDE2IEBACisjIEZyZWVUeXBlIDIgc3JjL2x6dyBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDA0LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgbHp3IDsKKworTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0bHp3LmMgOworCisjIGVuZCBvZiBzcmMvbHp3IEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvbHp3L2Z0bHp3LmMgYi9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdGx6dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjRmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdGx6dy5jCkBAIC0wLDAgKzEsNDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGx6dy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgc3VwcG9ydCBmb3IgLlogY29tcHJlc3NlZCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIE5ldEJTRCdzIHpvcGVuKCkuICBJdCBzaG91bGQgbWFpbmx5ICAqLworLyogIGJlIHVzZWQgdG8gcGFyc2UgY29tcHJlc3NlZCBQQ0YgZm9udHMsIGFzIGZvdW5kIHdpdGggbWFueSBYMTEgc2VydmVyICAgKi8KKy8qICBkaXN0cmlidXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBbGJlcnQgQ2hpbi1BLVlvdW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGJhc2VkIG9uIGNvZGUgaW4gYHNyYy9nemlwL2Z0Z3ppcC5jJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfTFpXX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKKworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBMWldfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0xaVworCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgImx6dyBjb2RlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZnR6b3Blbi5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgIE0gRSBNIE8gUiBZICAgTSBBIE4gQSBHIEUgTSBFIE4gVCAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICBGIEkgTCBFICAgRCBFIFMgQyBSIEkgUCBUIE8gUiAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRlRfTFpXX0JVRkZFUl9TSVpFICA0MDk2CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0xaV0ZpbGVSZWNfCisgIHsKKyAgICBGVF9TdHJlYW0gICAgICAgc291cmNlOyAgICAgICAgIC8qIHBhcmVudC9zb3VyY2Ugc3RyZWFtICAgICAgICAqLworICAgIEZUX1N0cmVhbSAgICAgICBzdHJlYW07ICAgICAgICAgLyogZW1iZWRkaW5nIHN0cmVhbSAgICAgICAgICAgICovCisgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeTsgICAgICAgICAvKiBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgKi8KKyAgICBGVF9MendTdGF0ZVJlYyAgbHp3OyAgICAgICAgICAgIC8qIGx6dyBkZWNvbXByZXNzb3Igc3RhdGUgICAgICAqLworCisgICAgRlRfQnl0ZSAgICAgICAgIGJ1ZmZlcltGVF9MWldfQlVGRkVSX1NJWkVdOyAvKiBvdXRwdXQgYnVmZmVyICAgICAgKi8KKyAgICBGVF9VTG9uZyAgICAgICAgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc2l0aW9uIGluIG91dHB1dCAqLworICAgIEZUX0J5dGUqICAgICAgICBjdXJzb3I7CisgICAgRlRfQnl0ZSogICAgICAgIGxpbWl0OworCisgIH0gRlRfTFpXRmlsZVJlYywgKkZUX0xaV0ZpbGU7CisKKworICAvKiBjaGVjayBhbmQgc2tpcCAuWiBoZWFkZXIgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2x6d19jaGVja19oZWFkZXIoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBGVF9CeXRlICAgaGVhZFsyXTsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggMCApICAgICAgIHx8CisgICAgICAgICBGVF9TVFJFQU1fUkVBRCggaGVhZCwgMiApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGhlYWRbMF0gJiYgaGVhZFsxXSBhcmUgdGhlIG1hZ2ljIG51bWJlcnMgKi8KKyAgICBpZiAoIGhlYWRbMF0gIT0gMHgxRiB8fAorICAgICAgICAgaGVhZFsxXSAhPSAweDlEICkKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2x6d19maWxlX2luaXQoIEZUX0xaV0ZpbGUgIHppcCwKKyAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzb3VyY2UgKQorICB7CisgICAgRlRfTHp3U3RhdGUgIGx6dyAgID0gJnppcC0+bHp3OworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKworCisgICAgemlwLT5zdHJlYW0gPSBzdHJlYW07CisgICAgemlwLT5zb3VyY2UgPSBzb3VyY2U7CisgICAgemlwLT5tZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKworICAgIHppcC0+bGltaXQgID0gemlwLT5idWZmZXIgKyBGVF9MWldfQlVGRkVSX1NJWkU7CisgICAgemlwLT5jdXJzb3IgPSB6aXAtPmxpbWl0OworICAgIHppcC0+cG9zICAgID0gMDsKKworICAgIC8qIGNoZWNrIGFuZCBza2lwIC5aIGhlYWRlciAqLworICAgIGVycm9yID0gZnRfbHp3X2NoZWNrX2hlYWRlciggc291cmNlICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBpbml0aWFsaXplIGludGVybmFsIGx6dyB2YXJpYWJsZSAqLworICAgIGZ0X2x6d3N0YXRlX2luaXQoIGx6dywgc291cmNlICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGZ0X2x6d19maWxlX2RvbmUoIEZUX0xaV0ZpbGUgIHppcCApCisgIHsKKyAgICAvKiBjbGVhciB0aGUgcmVzdCAqLworICAgIGZ0X2x6d3N0YXRlX2RvbmUoICZ6aXAtPmx6dyApOworCisgICAgemlwLT5tZW1vcnkgPSBOVUxMOworICAgIHppcC0+c291cmNlID0gTlVMTDsKKyAgICB6aXAtPnN0cmVhbSA9IE5VTEw7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9sendfZmlsZV9yZXNldCggRlRfTFpXRmlsZSAgemlwICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gemlwLT5zb3VyY2U7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKworCisgICAgaWYgKCAhRlRfU1RSRUFNX1NFRUsoIDAgKSApCisgICAgeworICAgICAgZnRfbHp3c3RhdGVfcmVzZXQoICZ6aXAtPmx6dyApOworCisgICAgICB6aXAtPmxpbWl0ICA9IHppcC0+YnVmZmVyICsgRlRfTFpXX0JVRkZFUl9TSVpFOworICAgICAgemlwLT5jdXJzb3IgPSB6aXAtPmxpbWl0OworICAgICAgemlwLT5wb3MgICAgPSAwOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2x6d19maWxlX2ZpbGxfb3V0cHV0KCBGVF9MWldGaWxlICB6aXAgKQorICB7CisgICAgRlRfTHp3U3RhdGUgIGx6dyA9ICZ6aXAtPmx6dzsKKyAgICBGVF9VTG9uZyAgICAgY291bnQ7CisgICAgRlRfRXJyb3IgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICB6aXAtPmN1cnNvciA9IHppcC0+YnVmZmVyOworCisgICAgY291bnQgPSBmdF9sendzdGF0ZV9pbyggbHp3LCB6aXAtPmJ1ZmZlciwgRlRfTFpXX0JVRkZFUl9TSVpFICk7CisKKyAgICB6aXAtPmxpbWl0ID0gemlwLT5jdXJzb3IgKyBjb3VudDsKKworICAgIGlmICggY291bnQgPT0gMCApCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZmlsbCBvdXRwdXQgYnVmZmVyOyBgY291bnQnIG11c3QgYmUgPD0gRlRfTFpXX0JVRkZFUl9TSVpFICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9sendfZmlsZV9za2lwX291dHB1dCggRlRfTFpXRmlsZSAgemlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiBmaXJzdCwgd2Ugc2tpcCB3aGF0IHdlIGNhbiBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgeworICAgICAgRlRfVUxvbmcgIGRlbHRhID0gKEZUX1VMb25nKSggemlwLT5saW1pdCAtIHppcC0+Y3Vyc29yICk7CisKKworICAgICAgaWYgKCBkZWx0YSA+PSBjb3VudCApCisgICAgICAgIGRlbHRhID0gY291bnQ7CisKKyAgICAgIHppcC0+Y3Vyc29yICs9IGRlbHRhOworICAgICAgemlwLT5wb3MgICAgKz0gZGVsdGE7CisKKyAgICAgIGNvdW50IC09IGRlbHRhOworICAgIH0KKworICAgIC8qIG5leHQsIHdlIHNraXAgYXMgbWFueSBieXRlcyByZW1haW5pbmcgYXMgcG9zc2libGUgKi8KKyAgICB3aGlsZSAoIGNvdW50ID4gMCApCisgICAgeworICAgICAgRlRfVUxvbmcgIGRlbHRhID0gRlRfTFpXX0JVRkZFUl9TSVpFOworICAgICAgRlRfVUxvbmcgIG51bXJlYWQ7CisKKworICAgICAgaWYgKCBkZWx0YSA+IGNvdW50ICkKKyAgICAgICAgZGVsdGEgPSBjb3VudDsKKworICAgICAgbnVtcmVhZCA9IGZ0X2x6d3N0YXRlX2lvKCAmemlwLT5sencsIE5VTEwsIGRlbHRhICk7CisgICAgICBpZiAoIG51bXJlYWQgPCBkZWx0YSApCisgICAgICB7CisgICAgICAgIC8qIG5vdCBlbm91Z2ggYnl0ZXMgKi8KKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICB6aXAtPnBvcyArPSBkZWx0YTsKKyAgICAgIGNvdW50ICAgIC09IGRlbHRhOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VMb25nCisgIGZ0X2x6d19maWxlX2lvKCBGVF9MWldGaWxlICB6aXAsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICBwb3MsCisgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBidWZmZXIsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICBjb3VudCApCisgIHsKKyAgICBGVF9VTG9uZyAgcmVzdWx0ID0gMDsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIC8qIHNlZWtpbmcgYmFja3dhcmRzLiAqLworICAgIGlmICggcG9zIDwgemlwLT5wb3MgKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSBuZXcgcG9zaXRpb24gaXMgd2l0aGluIHRoZSBvdXRwdXQgYnVmZmVyLCBzaW1wbHkgICAgICAgKi8KKyAgICAgIC8qIGRlY3JlbWVudCBwb2ludGVycywgb3RoZXJ3aXNlIHdlIHJlc2V0IHRoZSBzdHJlYW0gY29tcGxldGVseSEgKi8KKyAgICAgIGlmICggKCB6aXAtPnBvcyAtIHBvcyApIDw9IChGVF9VTG9uZykoIHppcC0+Y3Vyc29yIC0gemlwLT5idWZmZXIgKSApCisgICAgICB7CisgICAgICAgIHppcC0+Y3Vyc29yIC09IHppcC0+cG9zIC0gcG9zOworICAgICAgICB6aXAtPnBvcyAgICAgPSBwb3M7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGVycm9yID0gZnRfbHp3X2ZpbGVfcmVzZXQoIHppcCApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgfQorCisgICAgLyogc2tpcCB1bndhbnRlZCBieXRlcyAqLworICAgIGlmICggcG9zID4gemlwLT5wb3MgKQorICAgIHsKKyAgICAgIGVycm9yID0gZnRfbHp3X2ZpbGVfc2tpcF9vdXRwdXQoIHppcCwgKEZUX1VMb25nKSggcG9zIC0gemlwLT5wb3MgKSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogbm93IHJlYWQgdGhlIGRhdGEgKi8KKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIEZUX1VMb25nICBkZWx0YTsKKworCisgICAgICBkZWx0YSA9IChGVF9VTG9uZykoIHppcC0+bGltaXQgLSB6aXAtPmN1cnNvciApOworICAgICAgaWYgKCBkZWx0YSA+PSBjb3VudCApCisgICAgICAgIGRlbHRhID0gY291bnQ7CisKKyAgICAgIEZUX01FTV9DT1BZKCBidWZmZXIgKyByZXN1bHQsIHppcC0+Y3Vyc29yLCBkZWx0YSApOworICAgICAgcmVzdWx0ICAgICAgKz0gZGVsdGE7CisgICAgICB6aXAtPmN1cnNvciArPSBkZWx0YTsKKyAgICAgIHppcC0+cG9zICAgICs9IGRlbHRhOworCisgICAgICBjb3VudCAtPSBkZWx0YTsKKyAgICAgIGlmICggY291bnQgPT0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgICBlcnJvciA9IGZ0X2x6d19maWxlX2ZpbGxfb3V0cHV0KCB6aXAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgTCBaIFcgICBFIE0gQiBFIEQgRCBJIE4gRyAgIFMgVCBSIEUgQSBNICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBmdF9sendfc3RyZWFtX2Nsb3NlKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9MWldGaWxlICB6aXAgICAgPSAoRlRfTFpXRmlsZSlzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlcjsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKworCisgICAgaWYgKCB6aXAgKQorICAgIHsKKyAgICAgIC8qIGZpbmFsaXplIGx6dyBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICAgIGZ0X2x6d19maWxlX2RvbmUoIHppcCApOworCisgICAgICBGVF9GUkVFKCB6aXAgKTsKKworICAgICAgc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXIgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX1VMb25nCisgIGZ0X2x6d19zdHJlYW1faW8oIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHBvcywKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQorICB7CisgICAgRlRfTFpXRmlsZSAgemlwID0gKEZUX0xaV0ZpbGUpc3RyZWFtLT5kZXNjcmlwdG9yLnBvaW50ZXI7CisKKworICAgIHJldHVybiBmdF9sendfZmlsZV9pbyggemlwLCBwb3MsIGJ1ZmZlciwgY291bnQgKTsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TdHJlYW1fT3BlbkxaVyggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHNvdXJjZSApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnk7CisgICAgRlRfTFpXRmlsZSAgemlwID0gTlVMTDsKKworCisgICAgaWYgKCAhc3RyZWFtIHx8ICFzb3VyY2UgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX0hhbmRsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIG1lbW9yeSA9IHNvdXJjZS0+bWVtb3J5OworCisgICAgLyoKKyAgICAgKiAgQ2hlY2sgdGhlIGhlYWRlciByaWdodCBub3c7IHRoaXMgcHJldmVudHMgYWxsb2NhdGlvbiBvZiBhIGh1Z2UKKyAgICAgKiAgTFpXRmlsZSBvYmplY3QgKDQwMCBLQnl0ZSBvZiBoZWFwIG1lbW9yeSkgaWYgbm90IG5lY2Vzc2FyeS4KKyAgICAgKgorICAgICAqICBEaWQgSSBtZW50aW9uIHRoYXQgeW91IHNob3VsZCBuZXZlciB1c2UgLlogY29tcHJlc3NlZCBmb250CisgICAgICogIGZpbGVzPworICAgICAqLworICAgIGVycm9yID0gZnRfbHp3X2NoZWNrX2hlYWRlciggc291cmNlICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9aRVJPKCBzdHJlYW0gKTsKKyAgICBzdHJlYW0tPm1lbW9yeSA9IG1lbW9yeTsKKworICAgIGlmICggIUZUX05FVyggemlwICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gZnRfbHp3X2ZpbGVfaW5pdCggemlwLCBzdHJlYW0sIHNvdXJjZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIEZUX0ZSRUUoIHppcCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIHN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyID0gemlwOworICAgIH0KKworICAgIHN0cmVhbS0+c2l6ZSAgPSAweDdGRkZGRkZGTDsgIC8qIGRvbid0IGtub3cgdGhlIHJlYWwgc2l6ZSEgKi8KKyAgICBzdHJlYW0tPnBvcyAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgID0gMDsKKyAgICBzdHJlYW0tPnJlYWQgID0gZnRfbHp3X3N0cmVhbV9pbzsKKyAgICBzdHJlYW0tPmNsb3NlID0gZnRfbHp3X3N0cmVhbV9jbG9zZTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNpbmNsdWRlICJmdHpvcGVuLmMiCisKKworI2Vsc2UgIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcgKi8KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU3RyZWFtX09wZW5MWlcoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKQorICB7CisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKyAgICBGVF9VTlVTRUQoIHNvdXJjZSApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9VU0VfTFpXICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdHpvcGVuLmMgYi9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdHpvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2YmI3MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvbHp3L2Z0em9wZW4uYwpAQCAtMCwwICsxLDQxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnR6b3Blbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5aIGNvbXByZXNzZWQgZmlsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgb3B0aW9uYWwgY29tcG9uZW50IHJlbGllcyBvbiBOZXRCU0QncyB6b3BlbigpLiAgSXQgc2hvdWxkIG1haW5seSAgKi8KKy8qICBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICovCisvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmdHpvcGVuLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworCisgIHN0YXRpYyBpbnQKKyAgZnRfbHp3c3RhdGVfcmVmaWxsKCBGVF9MendTdGF0ZSAgc3RhdGUgKQorICB7CisgICAgRlRfVUxvbmcgIGNvdW50OworCisKKyAgICBpZiAoIHN0YXRlLT5pbl9lb2YgKQorICAgICAgcmV0dXJuIC0xOworCisgICAgY291bnQgPSBGVF9TdHJlYW1fVHJ5UmVhZCggc3RhdGUtPnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+YnVmX3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bnVtX2JpdHMgKTsgIC8qIFdIWT8gKi8KKworICAgIHN0YXRlLT5idWZfc2l6ZSAgID0gKEZUX1VJbnQpY291bnQ7CisgICAgc3RhdGUtPmJ1Zl90b3RhbCArPSBjb3VudDsKKyAgICBzdGF0ZS0+aW5fZW9mICAgICA9IEZUX0JPT0woIGNvdW50IDwgc3RhdGUtPm51bV9iaXRzICk7CisgICAgc3RhdGUtPmJ1Zl9vZmZzZXQgPSAwOworICAgIHN0YXRlLT5idWZfc2l6ZSAgID0gKCBzdGF0ZS0+YnVmX3NpemUgPDwgMyApIC0gKCBzdGF0ZS0+bnVtX2JpdHMgLSAxICk7CisKKyAgICBpZiAoIGNvdW50ID09IDAgKSAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgRlRfSW50MzIKKyAgZnRfbHp3c3RhdGVfZ2V0X2NvZGUoIEZUX0x6d1N0YXRlICBzdGF0ZSApCisgIHsKKyAgICBGVF9VSW50ICAgbnVtX2JpdHMgPSBzdGF0ZS0+bnVtX2JpdHM7CisgICAgRlRfVUludCAgIG9mZnNldCAgID0gc3RhdGUtPmJ1Zl9vZmZzZXQ7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfSW50ICAgIHJlc3VsdDsKKworCisgICAgaWYgKCBzdGF0ZS0+YnVmX2NsZWFyICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgb2Zmc2V0ID49IHN0YXRlLT5idWZfc2l6ZSAgICAgICAgICAgfHwKKyAgICAgICAgIHN0YXRlLT5mcmVlX2VudCA+PSBzdGF0ZS0+ZnJlZV9iaXRzICkKKyAgICB7CisgICAgICBpZiAoIHN0YXRlLT5mcmVlX2VudCA+PSBzdGF0ZS0+ZnJlZV9iaXRzICkKKyAgICAgIHsKKyAgICAgICAgc3RhdGUtPm51bV9iaXRzICA9ICsrbnVtX2JpdHM7CisgICAgICAgIHN0YXRlLT5mcmVlX2JpdHMgPSBzdGF0ZS0+bnVtX2JpdHMgPCBzdGF0ZS0+bWF4X2JpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKEZUX1VJbnQpKCAoIDFVTCA8PCBudW1fYml0cyApIC0gMjU2ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPm1heF9mcmVlICsgMTsKKyAgICAgIH0KKworICAgICAgaWYgKCBzdGF0ZS0+YnVmX2NsZWFyICkKKyAgICAgIHsKKyAgICAgICAgc3RhdGUtPm51bV9iaXRzICA9IG51bV9iaXRzID0gTFpXX0lOSVRfQklUUzsKKyAgICAgICAgc3RhdGUtPmZyZWVfYml0cyA9IChGVF9VSW50KSggKCAxVUwgPDwgbnVtX2JpdHMgKSAtIDI1NiApOworICAgICAgICBzdGF0ZS0+YnVmX2NsZWFyID0gMDsKKyAgICAgIH0KKworICAgICAgaWYgKCBmdF9sendzdGF0ZV9yZWZpbGwoIHN0YXRlICkgPCAwICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgICBvZmZzZXQgPSAwOworICAgIH0KKworICAgIHN0YXRlLT5idWZfb2Zmc2V0ID0gb2Zmc2V0ICsgbnVtX2JpdHM7CisKKyAgICBwICAgICAgICAgPSAmc3RhdGUtPmJ1Zl90YWJbb2Zmc2V0ID4+IDNdOworICAgIG9mZnNldCAgICY9IDc7CisgICAgcmVzdWx0ICAgID0gKnArKyA+PiBvZmZzZXQ7CisgICAgb2Zmc2V0ICAgID0gOCAtIG9mZnNldDsKKyAgICBudW1fYml0cyAtPSBvZmZzZXQ7CisKKyAgICBpZiAoIG51bV9iaXRzID49IDggKQorICAgIHsKKyAgICAgIHJlc3VsdCAgIHw9ICpwKysgPDwgb2Zmc2V0OworICAgICAgb2Zmc2V0ICAgKz0gODsKKyAgICAgIG51bV9iaXRzIC09IDg7CisgICAgfQorICAgIGlmICggbnVtX2JpdHMgPiAwICkKKyAgICAgIHJlc3VsdCB8PSAoICpwICYgTFpXX01BU0soIG51bV9iaXRzICkgKSA8PCBvZmZzZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICAvKiBncm93IHRoZSBjaGFyYWN0ZXIgc3RhY2sgKi8KKyAgc3RhdGljIGludAorICBmdF9sendzdGF0ZV9zdGFja19ncm93KCBGVF9MendTdGF0ZSAgc3RhdGUgKQorICB7CisgICAgaWYgKCBzdGF0ZS0+c3RhY2tfdG9wID49IHN0YXRlLT5zdGFja19zaXplICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0YXRlLT5tZW1vcnk7CisgICAgICBGVF9FcnJvciAgIGVycm9yOworICAgICAgRlRfT2Zmc2V0ICBvbGRfc2l6ZSA9IHN0YXRlLT5zdGFja19zaXplOworICAgICAgRlRfT2Zmc2V0ICBuZXdfc2l6ZSA9IG9sZF9zaXplOworCisgICAgICBuZXdfc2l6ZSA9IG5ld19zaXplICsgKCBuZXdfc2l6ZSA+PiAxICkgKyA0OworCisgICAgICBpZiAoIHN0YXRlLT5zdGFjayA9PSBzdGF0ZS0+c3RhY2tfMCApCisgICAgICB7CisgICAgICAgIHN0YXRlLT5zdGFjayA9IE5VTEw7CisgICAgICAgIG9sZF9zaXplICAgICA9IDA7CisgICAgICB9CisKKyAgICAgIC8qIHJlcXVpcmVtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RhY2sgbGFyZ2VyIHRoYW4gMTw8TFpXX01BWF9CSVRTICovCisgICAgICAvKiBpbXBsaWVzIGJ1ZyBpbiB0aGUgZGVjb21wcmVzc2lvbiBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBuZXdfc2l6ZSA+ICggMSA8PCBMWldfTUFYX0JJVFMgKSApCisgICAgICB7CisgICAgICAgIG5ld19zaXplID0gMSA8PCBMWldfTUFYX0JJVFM7CisgICAgICAgIGlmICggbmV3X3NpemUgPT0gb2xkX3NpemUgKQorICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgaWYgKCBGVF9SRU5FV19BUlJBWSggc3RhdGUtPnN0YWNrLCBvbGRfc2l6ZSwgbmV3X3NpemUgKSApCisgICAgICAgIHJldHVybiAtMTsKKworICAgICAgc3RhdGUtPnN0YWNrX3NpemUgPSBuZXdfc2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qIGdyb3cgdGhlIHByZWZpeC9zdWZmaXggYXJyYXlzICovCisgIHN0YXRpYyBpbnQKKyAgZnRfbHp3c3RhdGVfcHJlZml4X2dyb3coIEZUX0x6d1N0YXRlICBzdGF0ZSApCisgIHsKKyAgICBGVF9VSW50ICAgIG9sZF9zaXplID0gc3RhdGUtPnByZWZpeF9zaXplOworICAgIEZUX1VJbnQgICAgbmV3X3NpemUgPSBvbGRfc2l6ZTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSAgID0gc3RhdGUtPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworCisKKyAgICBpZiAoIG5ld19zaXplID09IDAgKSAgLyogZmlyc3QgYWxsb2NhdGlvbiAtPiA5IGJpdHMgKi8KKyAgICAgIG5ld19zaXplID0gNTEyOworICAgIGVsc2UKKyAgICAgIG5ld19zaXplICs9IG5ld19zaXplID4+IDI7ICAvKiBkb24ndCBncm93IHRvbyBmYXN0ICovCisKKyAgICAvKgorICAgICAqICBOb3RlIHRoYXQgdGhlIGBzdWZmaXgnIGFycmF5IGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgbWVtb3J5IGJsb2NrCisgICAgICogIHBvaW50ZWQgdG8gYnkgYHByZWZpeCcuCisgICAgICoKKyAgICAgKiAgSSBrbm93IHRoYXQgc2l6ZW9mKEZUX0J5dGUpID09IDEgYnkgZGVmaW5pdGlvbiwgYnV0IGl0IGlzIGNsZWFyZXIKKyAgICAgKiAgdG8gd3JpdGUgaXQgbGl0ZXJhbGx5LgorICAgICAqCisgICAgICovCisgICAgaWYgKCBGVF9SRUFMTE9DX01VTFQoIHN0YXRlLT5wcmVmaXgsIG9sZF9zaXplLCBuZXdfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfVVNob3J0ICkgKyBzaXplb2YgKCBGVF9CeXRlICkgKSApCisgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBub3cgYWRqdXN0IGBzdWZmaXgnIGFuZCBtb3ZlIHRoZSBkYXRhIGFjY29yZGluZ2x5ICovCisgICAgc3RhdGUtPnN1ZmZpeCA9IChGVF9CeXRlKikoIHN0YXRlLT5wcmVmaXggKyBuZXdfc2l6ZSApOworCisgICAgRlRfTUVNX01PVkUoIHN0YXRlLT5zdWZmaXgsCisgICAgICAgICAgICAgICAgIHN0YXRlLT5wcmVmaXggKyBvbGRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgb2xkX3NpemUgKiBzaXplb2YgKCBGVF9CeXRlICkgKTsKKworICAgIHN0YXRlLT5wcmVmaXhfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBmdF9sendzdGF0ZV9yZXNldCggRlRfTHp3U3RhdGUgIHN0YXRlICkKKyAgeworICAgIHN0YXRlLT5pbl9lb2YgICAgID0gMDsKKyAgICBzdGF0ZS0+YnVmX29mZnNldCA9IDA7CisgICAgc3RhdGUtPmJ1Zl9zaXplICAgPSAwOworICAgIHN0YXRlLT5idWZfY2xlYXIgID0gMDsKKyAgICBzdGF0ZS0+YnVmX3RvdGFsICA9IDA7CisgICAgc3RhdGUtPnN0YWNrX3RvcCAgPSAwOworICAgIHN0YXRlLT5udW1fYml0cyAgID0gTFpXX0lOSVRfQklUUzsKKyAgICBzdGF0ZS0+cGhhc2UgICAgICA9IEZUX0xaV19QSEFTRV9TVEFSVDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZnRfbHp3c3RhdGVfaW5pdCggRlRfTHp3U3RhdGUgIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc291cmNlICkKKyAgeworICAgIEZUX1pFUk8oIHN0YXRlICk7CisKKyAgICBzdGF0ZS0+c291cmNlID0gc291cmNlOworICAgIHN0YXRlLT5tZW1vcnkgPSBzb3VyY2UtPm1lbW9yeTsKKworICAgIHN0YXRlLT5wcmVmaXggICAgICA9IE5VTEw7CisgICAgc3RhdGUtPnN1ZmZpeCAgICAgID0gTlVMTDsKKyAgICBzdGF0ZS0+cHJlZml4X3NpemUgPSAwOworCisgICAgc3RhdGUtPnN0YWNrICAgICAgPSBzdGF0ZS0+c3RhY2tfMDsKKyAgICBzdGF0ZS0+c3RhY2tfc2l6ZSA9IHNpemVvZiAoIHN0YXRlLT5zdGFja18wICk7CisKKyAgICBmdF9sendzdGF0ZV9yZXNldCggc3RhdGUgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgZnRfbHp3c3RhdGVfZG9uZSggRlRfTHp3U3RhdGUgIHN0YXRlICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RhdGUtPm1lbW9yeTsKKworCisgICAgZnRfbHp3c3RhdGVfcmVzZXQoIHN0YXRlICk7CisKKyAgICBpZiAoIHN0YXRlLT5zdGFjayAhPSBzdGF0ZS0+c3RhY2tfMCApCisgICAgICBGVF9GUkVFKCBzdGF0ZS0+c3RhY2sgKTsKKworICAgIEZUX0ZSRUUoIHN0YXRlLT5wcmVmaXggKTsKKyAgICBzdGF0ZS0+c3VmZml4ID0gTlVMTDsKKworICAgIEZUX1pFUk8oIHN0YXRlICk7CisgIH0KKworCisjZGVmaW5lIEZUTFpXX1NUQUNLX1BVU0goIGMgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggc3RhdGUtPnN0YWNrX3RvcCA+PSBzdGF0ZS0+c3RhY2tfc2l6ZSAmJiAgICBcCisgICAgICAgICBmdF9sendzdGF0ZV9zdGFja19ncm93KCBzdGF0ZSApIDwgMCAgICkgICAgIFwKKyAgICAgIGdvdG8gRW9mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGUtPnN0YWNrW3N0YXRlLT5zdGFja190b3ArK10gPSAoRlRfQnl0ZSkoYyk7IFwKKyAgRlRfRU5EX1NUTU5UCisKKworICBGVF9MT0NBTF9ERUYoIEZUX1VMb25nICkKKyAgZnRfbHp3c3RhdGVfaW8oIEZUX0x6d1N0YXRlICBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBidWZmZXIsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgb3V0X3NpemUgKQorICB7CisgICAgRlRfVUxvbmcgIHJlc3VsdCA9IDA7CisKKyAgICBGVF9VSW50ICBvbGRfY2hhciA9IHN0YXRlLT5vbGRfY2hhcjsKKyAgICBGVF9VSW50ICBvbGRfY29kZSA9IHN0YXRlLT5vbGRfY29kZTsKKyAgICBGVF9VSW50ICBpbl9jb2RlICA9IHN0YXRlLT5pbl9jb2RlOworCisKKyAgICBpZiAoIG91dF9zaXplID09IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgc3dpdGNoICggc3RhdGUtPnBoYXNlICkKKyAgICB7CisgICAgY2FzZSBGVF9MWldfUEhBU0VfU1RBUlQ6CisgICAgICB7CisgICAgICAgIEZUX0J5dGUgICBtYXhfYml0czsKKyAgICAgICAgRlRfSW50MzIgIGM7CisKKworICAgICAgICAvKiBza2lwIG1hZ2ljIGJ5dGVzLCBhbmQgcmVhZCBtYXhfYml0cyArIGJsb2NrX2ZsYWcgKi8KKyAgICAgICAgaWYgKCBGVF9TdHJlYW1fU2Vlayggc3RhdGUtPnNvdXJjZSwgMiApICE9IDAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgIEZUX1N0cmVhbV9UcnlSZWFkKCBzdGF0ZS0+c291cmNlLCAmbWF4X2JpdHMsIDEgKSAhPSAxICkKKyAgICAgICAgICBnb3RvIEVvZjsKKworICAgICAgICBzdGF0ZS0+bWF4X2JpdHMgICA9IG1heF9iaXRzICYgTFpXX0JJVF9NQVNLOworICAgICAgICBzdGF0ZS0+YmxvY2tfbW9kZSA9IG1heF9iaXRzICYgTFpXX0JMT0NLX01BU0s7CisgICAgICAgIHN0YXRlLT5tYXhfZnJlZSAgID0gKEZUX1VJbnQpKCAoIDFVTCA8PCBzdGF0ZS0+bWF4X2JpdHMgKSAtIDI1NiApOworCisgICAgICAgIGlmICggc3RhdGUtPm1heF9iaXRzID4gTFpXX01BWF9CSVRTICkKKyAgICAgICAgICBnb3RvIEVvZjsKKworICAgICAgICBzdGF0ZS0+bnVtX2JpdHMgPSBMWldfSU5JVF9CSVRTOworICAgICAgICBzdGF0ZS0+ZnJlZV9lbnQgPSAoIHN0YXRlLT5ibG9ja19tb2RlID8gTFpXX0ZJUlNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMWldfQ0xFQVIgKSAtIDI1NjsKKyAgICAgICAgaW5fY29kZSAgPSAwOworCisgICAgICAgIHN0YXRlLT5mcmVlX2JpdHMgPSBzdGF0ZS0+bnVtX2JpdHMgPCBzdGF0ZS0+bWF4X2JpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKEZUX1VJbnQpKCAoIDFVTCA8PCBzdGF0ZS0+bnVtX2JpdHMgKSAtIDI1NiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5tYXhfZnJlZSArIDE7CisKKyAgICAgICAgYyA9IGZ0X2x6d3N0YXRlX2dldF9jb2RlKCBzdGF0ZSApOworICAgICAgICBpZiAoIGMgPCAwIHx8IGMgPiAyNTUgKQorICAgICAgICAgIGdvdG8gRW9mOworCisgICAgICAgIG9sZF9jb2RlID0gb2xkX2NoYXIgPSAoRlRfVUludCljOworCisgICAgICAgIGlmICggYnVmZmVyICkKKyAgICAgICAgICBidWZmZXJbcmVzdWx0XSA9IChGVF9CeXRlKW9sZF9jaGFyOworCisgICAgICAgIGlmICggKytyZXN1bHQgPj0gb3V0X3NpemUgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBzdGF0ZS0+cGhhc2UgPSBGVF9MWldfUEhBU0VfQ09ERTsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworCisgICAgY2FzZSBGVF9MWldfUEhBU0VfQ09ERToKKyAgICAgIHsKKyAgICAgICAgRlRfSW50MzIgIGM7CisgICAgICAgIEZUX1VJbnQgICBjb2RlOworCisKKyAgICAgIE5leHRDb2RlOgorICAgICAgICBjID0gZnRfbHp3c3RhdGVfZ2V0X2NvZGUoIHN0YXRlICk7CisgICAgICAgIGlmICggYyA8IDAgKQorICAgICAgICAgIGdvdG8gRW9mOworCisgICAgICAgIGNvZGUgPSAoRlRfVUludCljOworCisgICAgICAgIGlmICggY29kZSA9PSBMWldfQ0xFQVIgJiYgc3RhdGUtPmJsb2NrX21vZGUgKQorICAgICAgICB7CisgICAgICAgICAgLyogd2h5IG5vdCBMWldfRklSU1QtMjU2ID8gKi8KKyAgICAgICAgICBzdGF0ZS0+ZnJlZV9lbnQgID0gKCBMWldfRklSU1QgLSAxICkgLSAyNTY7CisgICAgICAgICAgc3RhdGUtPmJ1Zl9jbGVhciA9IDE7CisKKyAgICAgICAgICAvKiBub3QgcXVpdGUgcmlnaHQsIGJ1dCBhdCBsZWFzdCBtb3JlIHByZWRpY3RhYmxlICovCisgICAgICAgICAgb2xkX2NvZGUgPSAwOworICAgICAgICAgIG9sZF9jaGFyID0gMDsKKworICAgICAgICAgIGdvdG8gTmV4dENvZGU7CisgICAgICAgIH0KKworICAgICAgICBpbl9jb2RlID0gY29kZTsgLyogc2F2ZSBjb2RlIGZvciBsYXRlciAqLworCisgICAgICAgIGlmICggY29kZSA+PSAyNTZVICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgS3dLd0t3SyAqLworICAgICAgICAgIGlmICggY29kZSAtIDI1NlUgPj0gc3RhdGUtPmZyZWVfZW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBjb3JydXB0ZWQgTFpXIHN0cmVhbSAqLworICAgICAgICAgICAgaWYgKCBjb2RlIC0gMjU2VSA+IHN0YXRlLT5mcmVlX2VudCApCisgICAgICAgICAgICAgIGdvdG8gRW9mOworCisgICAgICAgICAgICBGVExaV19TVEFDS19QVVNIKCBvbGRfY2hhciApOworICAgICAgICAgICAgY29kZSA9IG9sZF9jb2RlOworICAgICAgICAgIH0KKworICAgICAgICAgIHdoaWxlICggY29kZSA+PSAyNTZVICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFzdGF0ZS0+cHJlZml4ICkKKyAgICAgICAgICAgICAgZ290byBFb2Y7CisKKyAgICAgICAgICAgIEZUTFpXX1NUQUNLX1BVU0goIHN0YXRlLT5zdWZmaXhbY29kZSAtIDI1Nl0gKTsKKyAgICAgICAgICAgIGNvZGUgPSBzdGF0ZS0+cHJlZml4W2NvZGUgLSAyNTZdOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9sZF9jaGFyID0gY29kZTsKKyAgICAgICAgRlRMWldfU1RBQ0tfUFVTSCggb2xkX2NoYXIgKTsKKworICAgICAgICBzdGF0ZS0+cGhhc2UgPSBGVF9MWldfUEhBU0VfU1RBQ0s7CisgICAgICB9CisgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKworICAgIGNhc2UgRlRfTFpXX1BIQVNFX1NUQUNLOgorICAgICAgeworICAgICAgICB3aGlsZSAoIHN0YXRlLT5zdGFja190b3AgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIC0tc3RhdGUtPnN0YWNrX3RvcDsKKworICAgICAgICAgIGlmICggYnVmZmVyICkKKyAgICAgICAgICAgIGJ1ZmZlcltyZXN1bHRdID0gc3RhdGUtPnN0YWNrW3N0YXRlLT5zdGFja190b3BdOworCisgICAgICAgICAgaWYgKCArK3Jlc3VsdCA9PSBvdXRfc2l6ZSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBub3cgY3JlYXRlIG5ldyBlbnRyeSAqLworICAgICAgICBpZiAoIHN0YXRlLT5mcmVlX2VudCA8IHN0YXRlLT5tYXhfZnJlZSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHN0YXRlLT5mcmVlX2VudCA+PSBzdGF0ZS0+cHJlZml4X3NpemUgJiYKKyAgICAgICAgICAgICAgIGZ0X2x6d3N0YXRlX3ByZWZpeF9ncm93KCBzdGF0ZSApIDwgMCAgKQorICAgICAgICAgICAgZ290byBFb2Y7CisKKyAgICAgICAgICBGVF9BU1NFUlQoIHN0YXRlLT5mcmVlX2VudCA8IHN0YXRlLT5wcmVmaXhfc2l6ZSApOworCisgICAgICAgICAgc3RhdGUtPnByZWZpeFtzdGF0ZS0+ZnJlZV9lbnRdID0gKEZUX1VTaG9ydClvbGRfY29kZTsKKyAgICAgICAgICBzdGF0ZS0+c3VmZml4W3N0YXRlLT5mcmVlX2VudF0gPSAoRlRfQnl0ZSkgIG9sZF9jaGFyOworCisgICAgICAgICAgc3RhdGUtPmZyZWVfZW50ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBvbGRfY29kZSA9IGluX2NvZGU7CisKKyAgICAgICAgc3RhdGUtPnBoYXNlID0gRlRfTFpXX1BIQVNFX0NPREU7CisgICAgICAgIGdvdG8gTmV4dENvZGU7CisgICAgICB9CisKKyAgICBkZWZhdWx0OiAgLyogc3RhdGUgPT0gRU9GICovCisgICAgICA7CisgICAgfQorCisgIEV4aXQ6CisgICAgc3RhdGUtPm9sZF9jb2RlID0gb2xkX2NvZGU7CisgICAgc3RhdGUtPm9sZF9jaGFyID0gb2xkX2NoYXI7CisgICAgc3RhdGUtPmluX2NvZGUgID0gaW5fY29kZTsKKworICAgIHJldHVybiByZXN1bHQ7CisKKyAgRW9mOgorICAgIHN0YXRlLT5waGFzZSA9IEZUX0xaV19QSEFTRV9FT0Y7CisgICAgZ290byBFeGl0OworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdHpvcGVuLmggYi9mcmVldHlwZS0yLjYvc3JjL2x6dy9mdHpvcGVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZTM4MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvbHp3L2Z0em9wZW4uaApAQCAtMCwwICsxLDE3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnR6b3Blbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5aIGNvbXByZXNzZWQgZmlsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgb3B0aW9uYWwgY29tcG9uZW50IHJlbGllcyBvbiBOZXRCU0QncyB6b3BlbigpLiAgSXQgc2hvdWxkIG1haW5seSAgKi8KKy8qICBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICovCisvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVF9aT1BFTl9IX18KKyNkZWZpbmUgX19GVF9aT1BFTl9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworICAvKgorICAgKiAgVGhpcyBpcyBhIGNvbXBsZXRlIHJlLWltcGxlbWVudGF0aW9uIG9mIHRoZSBMWlcgZmlsZSByZWFkZXIsCisgICAqICBzaW5jZSB0aGUgb2xkIG9uZSB3YXMgaW5jcmVkaWJseSBiYWRseSB3cml0dGVuLCB1c2luZworICAgKiAgNDAwIEtCeXRlIG9mIGhlYXAgbWVtb3J5IGJlZm9yZSBkZWNvbXByZXNzaW5nIGFueXRoaW5nLgorICAgKgorICAgKi8KKworI2RlZmluZSBGVF9MWldfSU5fQlVGRl9TSVpFICAgICAgICA2NAorI2RlZmluZSBGVF9MWldfREVGQVVMVF9TVEFDS19TSVpFICA2NAorCisjZGVmaW5lIExaV19JTklUX0JJVFMgICAgIDkKKyNkZWZpbmUgTFpXX01BWF9CSVRTICAgICAgMTYKKworI2RlZmluZSBMWldfQ0xFQVIgICAgICAgICAyNTYKKyNkZWZpbmUgTFpXX0ZJUlNUICAgICAgICAgMjU3CisKKyNkZWZpbmUgTFpXX0JJVF9NQVNLICAgICAgMHgxRgorI2RlZmluZSBMWldfQkxPQ0tfTUFTSyAgICAweDgwCisjZGVmaW5lIExaV19NQVNLKCBuICkgICAgICggKCAxVSA8PCAobikgKSAtIDFVICkKKworCisgIHR5cGVkZWYgZW51bSAgRlRfTHp3UGhhc2VfCisgIHsKKyAgICBGVF9MWldfUEhBU0VfU1RBUlQgPSAwLAorICAgIEZUX0xaV19QSEFTRV9DT0RFLAorICAgIEZUX0xaV19QSEFTRV9TVEFDSywKKyAgICBGVF9MWldfUEhBU0VfRU9GCisKKyAgfSBGVF9MendQaGFzZTsKKworCisgIC8qCisgICAqICBzdGF0ZSBvZiBMWlcgZGVjb21wcmVzc29yCisgICAqCisgICAqICBzbWFsbCB0ZWNobmljYWwgbm90ZQorICAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogIFdlIHVzZSBhIGZldyB0cmlja3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGF0IGFyZSBleHBsYWluZWQgaGVyZSB0bworICAgKiAgZWFzZSBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLgorICAgKgorICAgKiAgLSBGaXJzdCBvZiBhbGwsIHRoZSBgcHJlZml4JyBhbmQgYHN1ZmZpeCcgYXJyYXlzIGNvbnRhaW4gdGhlIHN1ZmZpeAorICAgKiAgICBhbmQgcHJlZml4IGZvciBjb2RlcyBvdmVyIDI1NjsgdGhpcyBtZWFucyB0aGF0CisgICAqCisgICAqICAgICAgcHJlZml4X29mKGNvZGUpID09IHN0YXRlLT5wcmVmaXhbY29kZS0yNTZdCisgICAqICAgICAgc3VmZml4X29mKGNvZGUpID09IHN0YXRlLT5zdWZmaXhbY29kZS0yNTZdCisgICAqCisgICAqICAgIEVhY2ggcHJlZml4IGlzIGEgMTYtYml0IGNvZGUsIGFuZCBlYWNoIHN1ZmZpeCBhbiA4LWJpdCBieXRlLgorICAgKgorICAgKiAgICBCb3RoIGFycmF5cyBhcmUgc3RvcmVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9jaywgcG9pbnRlZCB0byBieQorICAgKiAgICBgc3RhdGUtPnByZWZpeCcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBlcXVhbGl0eSBpcyBhbHdheXMKKyAgICogICAgdHJ1ZToKKyAgICoKKyAgICogICAgICBzdGF0ZS0+c3VmZml4ID09IChGVF9CeXRlKikoc3RhdGUtPnByZWZpeCArIHN0YXRlLT5wcmVmaXhfc2l6ZSkKKyAgICoKKyAgICogICAgT2YgY291cnNlLCBzdGF0ZS0+cHJlZml4X3NpemUgaXMgdGhlIG51bWJlciBvZiBwcmVmaXgvc3VmZml4IHNsb3RzCisgICAqICAgIGluIHRoZSBhcnJheXMsIGNvcnJlc3BvbmRpbmcgdG8gY29kZXMgMjU2Li4yNTUrcHJlZml4X3NpemUuCisgICAqCisgICAqICAtIGBmcmVlX2VudCcgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIGBwcmVmaXgnCisgICAqICAgIGFuZCBgc3VmZml4JyBhcnJheXMuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgYG5leHQgZnJlZQorICAgKiAgICBjb2RlJyBpcyByZWFsbHkgYDI1NitmcmVlX2VudCcuCisgICAqCisgICAqICAgIE1vcmVvdmVyLCBgbWF4X2ZyZWUnIGlzIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgYGZyZWVfZW50JyBjYW4gcmVhY2guCisgICAqCisgICAqICAgIGBtYXhfZnJlZScgY29ycmVzcG9uZHMgdG8gYCgxIDw8IG1heF9iaXRzKSAtIDI1NicuICBOb3RlIHRoYXQgdGhpcworICAgKiAgICB2YWx1ZSBpcyBhbHdheXMgPD0gMHhGRjAwLCB3aGljaCBtZWFucyB0aGF0IGJvdGggYGZyZWVfZW50JyBhbmQKKyAgICogICAgYG1heF9mcmVlJyBjYW4gYmUgc3RvcmVkIGluIGFuIEZUX1VJbnQgdmFyaWFibGUsIGV2ZW4gb24gMTYtYml0CisgICAqICAgIG1hY2hpbmVzLgorICAgKgorICAgKiAgICBJZiBgZnJlZV9lbnQgPT0gbWF4X2ZyZWUnLCB5b3UgY2Fubm90IGFkZCBuZXcgY29kZXMgdG8gdGhlCisgICAqICAgIHByZWZpeC9zdWZmaXggdGFibGUuCisgICAqCisgICAqICAtIGBudW1fYml0cycgaXMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNvZGUgYml0cywgc3RhcnRpbmcgYXQgOSBhbmQKKyAgICogICAgZ3Jvd2luZyBlYWNoIHRpbWUgYGZyZWVfZW50JyByZWFjaGVzIHRoZSB2YWx1ZSBvZiBgZnJlZV9iaXRzJy4gIFRoZQorICAgKiAgICBsYXR0ZXIgaXMgY29tcHV0ZWQgYXMgZm9sbG93cworICAgKgorICAgKiAgICAgIGlmIG51bV9iaXRzIDwgbWF4X2JpdHM6CisgICAqICAgICAgICAgZnJlZV9iaXRzID0gKDEgPDwgbnVtX2JpdHMpLTI1NgorICAgKiAgICAgIGVsc2U6CisgICAqICAgICAgICAgZnJlZV9iaXRzID0gbWF4X2ZyZWUgKyAxCisgICAqCisgICAqICAgIFNpbmNlIHRoZSB2YWx1ZSBvZiBgbWF4X2ZyZWUgKyAxJyBjYW4gbmV2ZXIgYmUgcmVhY2hlZCBieQorICAgKiAgICBgZnJlZV9lbnQnLCBgbnVtX2JpdHMnIGNhbm5vdCBncm93IGxhcmdlciB0aGFuIGBtYXhfYml0cycuCisgICAqLworCisgIHR5cGVkZWYgc3RydWN0ICBGVF9MendTdGF0ZVJlY18KKyAgeworICAgIEZUX0x6d1BoYXNlICBwaGFzZTsKKyAgICBGVF9JbnQgICAgICAgaW5fZW9mOworCisgICAgRlRfQnl0ZSAgICAgIGJ1Zl90YWJbMTZdOworICAgIEZUX1VJbnQgICAgICBidWZfb2Zmc2V0OworICAgIEZUX1VJbnQgICAgICBidWZfc2l6ZTsKKyAgICBGVF9Cb29sICAgICAgYnVmX2NsZWFyOworICAgIEZUX09mZnNldCAgICBidWZfdG90YWw7CisKKyAgICBGVF9VSW50ICAgICAgbWF4X2JpdHM7ICAgIC8qIG1heCBjb2RlIGJpdHMsIGZyb20gZmlsZSBoZWFkZXIgICAqLworICAgIEZUX0ludCAgICAgICBibG9ja19tb2RlOyAgLyogYmxvY2sgbW9kZSBmbGFnLCBmcm9tIGZpbGUgaGVhZGVyICovCisgICAgRlRfVUludCAgICAgIG1heF9mcmVlOyAgICAvKiAoMSA8PCBtYXhfYml0cykgLSAyNTYgICAgICAgICAgICAgKi8KKworICAgIEZUX1VJbnQgICAgICBudW1fYml0czsgICAgLyogY3VycmVudCBjb2RlIGJpdCBudW1iZXIgKi8KKyAgICBGVF9VSW50ICAgICAgZnJlZV9lbnQ7ICAgIC8qIGluZGV4IG9mIG5leHQgZnJlZSBlbnRyeSAqLworICAgIEZUX1VJbnQgICAgICBmcmVlX2JpdHM7ICAgLyogaWYgcmVhY2hlZCBieSBmcmVlX2VudCwgaW5jcmVtZW50IG51bV9iaXRzICovCisgICAgRlRfVUludCAgICAgIG9sZF9jb2RlOworICAgIEZUX1VJbnQgICAgICBvbGRfY2hhcjsKKyAgICBGVF9VSW50ICAgICAgaW5fY29kZTsKKworICAgIEZUX1VTaG9ydCogICBwcmVmaXg7ICAgICAgLyogYWx3YXlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCAvIHJlYWxsb2NhdGVkICovCisgICAgRlRfQnl0ZSogICAgIHN1ZmZpeDsgICAgICAvKiBzdWZmaXggPSAoRlRfQnl0ZSopKHByZWZpeCArIHByZWZpeF9zaXplKSAgKi8KKyAgICBGVF9VSW50ICAgICAgcHJlZml4X3NpemU7IC8qIG51bWJlciBvZiBzbG90cyBpbiBgcHJlZml4JyBvciBgc3VmZml4JyAgICAqLworCisgICAgRlRfQnl0ZSogICAgIHN0YWNrOyAgICAgICAvKiBjaGFyYWN0ZXIgc3RhY2sgKi8KKyAgICBGVF9VSW50ICAgICAgc3RhY2tfdG9wOworICAgIEZUX09mZnNldCAgICBzdGFja19zaXplOworICAgIEZUX0J5dGUgICAgICBzdGFja18wW0ZUX0xaV19ERUZBVUxUX1NUQUNLX1NJWkVdOyAvKiBtaW5pbWl6ZSBoZWFwIGFsbG9jICovCisKKyAgICBGVF9TdHJlYW0gICAgc291cmNlOyAgICAgIC8qIHNvdXJjZSBzdHJlYW0gKi8KKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5OworCisgIH0gRlRfTHp3U3RhdGVSZWMsICpGVF9MendTdGF0ZTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZnRfbHp3c3RhdGVfaW5pdCggRlRfTHp3U3RhdGUgIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc291cmNlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBmdF9sendzdGF0ZV9kb25lKCBGVF9MendTdGF0ZSAgc3RhdGUgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgZnRfbHp3c3RhdGVfcmVzZXQoIEZUX0x6d1N0YXRlICBzdGF0ZSApOworCisKKyAgRlRfTE9DQUwoIEZUX1VMb25nICkKKyAgZnRfbHp3c3RhdGVfaW8oIEZUX0x6d1N0YXRlICBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBidWZmZXIsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgb3V0X3NpemUgKTsKKworLyogKi8KKworI2VuZGlmIC8qIF9fRlRfWk9QRU5fSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL2x6dy9ydWxlcy5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvbHp3L3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWMwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL2x6dy9ydWxlcy5tawpAQCAtMCwwICsxLDcyIEBACisjCisjIEZyZWVUeXBlIDIgTFpXIHN1cHBvcnQgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDIwMDQtMjAxNSBieQorIyBBbGJlcnQgQ2hpbi1BLVlvdW5nLgorIworIyBiYXNlZCBvbiBgc3JjL2x6dy9ydWxlcy5taycKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisjIExaVyBkcml2ZXIgZGlyZWN0b3J5CisjCitMWldfRElSIDo9ICQoU1JDX0RJUikvbHp3CisKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworTFpXX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICRJJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkKExaV19ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBMWlcgc3VwcG9ydCBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworTFpXX0RSVl9TUkMgOj0gJChMWldfRElSKS9mdGx6dy5jCisKKyMgTFpXIHN1cHBvcnQgaGVhZGVycworIworTFpXX0RSVl9IIDo9ICQoTFpXX0RJUikvZnR6b3Blbi5oIFwKKyAgICAgICAgICAgICAkKExaV19ESVIpL2Z0em9wZW4uYworCisKKyMgTFpXIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBMWldfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzCisjICAgTFpXX0RSVl9PQkpfUyBpcyB1c2VkIGR1cmluZyBgc2luZ2xlJyBidWlsZHMKKyMKK0xaV19EUlZfT0JKX00gOj0gJChPQkpfRElSKS9mdGx6dy4kTworTFpXX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL2Z0bHp3LiRPCisKKyMgTFpXIHN1cHBvcnQgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworTFpXX0RSVl9TUkNfUyA6PSAkKExaV19ESVIpL2Z0bHp3LmMKKworCisjIExaVyBzdXBwb3J0IC0gc2luZ2xlIG9iamVjdAorIworJChMWldfRFJWX09CSl9TKTogJChMWldfRFJWX1NSQ19TKSAkKExaV19EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoTFpXX0RSVl9IKQorCSQoTFpXX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKExaV19EUlZfU1JDX1MpKQorCisKKyMgTFpXIHN1cHBvcnQgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoTFpXX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChMWldfRFJWX0gpCisJJChMWldfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKExaV19EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoTFpXX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmMyMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL0phbWZpbGUKQEAgLTAsMCArMSwyOSBAQAorIyBGcmVlVHlwZSAyIHNyYy9vdHZhbGlkIEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDQtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSBvdHZhbGlkIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBvdHZiYXNlIG90dmNvbW1uIG90dmdkZWYgb3R2Z3BvcyBvdHZnc3ViIG90dmpzdGYgb3R2bW9kIG90dm1hdGggOworICB9CisgIGVsc2UKKyAgeworICAgIF9zb3VyY2VzID0gb3R2YWxpZCA7CisgIH0KKworICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Cit9CisKKyMgZW5kIG9mIHNyYy9vdHZhbGlkIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9tb2R1bGUubWsgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvbW9kdWxlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOGMwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgRnJlZVR5cGUgMiBvdHZhbGlkIG1vZHVsZSBkZWZpbml0aW9uCisjCisKKworIyBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitGVE1PRFVMRV9IX0NPTU1BTkRTICs9IE9UVkFMSURfTU9EVUxFCisKK2RlZmluZSBPVFZBTElEX01PRFVMRQorJChPUEVOX0RSSVZFUikgRlRfTW9kdWxlX0NsYXNzLCBvdHZfbW9kdWxlX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUilvdHZhbGlkICAgJChFQ0hPX0RSSVZFUl9ERVNDKU9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlJChFQ0hPX0RSSVZFUl9ET05FKQorZW5kZWYKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZhbGlkLmMgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2YWxpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNTk3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2YWxpZC5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmFsaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSB2YWxpZGF0b3IgZm9yIE9wZW5UeXBlIHRhYmxlcyAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKworI2luY2x1ZGUgIm90dmJhc2UuYyIKKyNpbmNsdWRlICJvdHZjb21tbi5jIgorI2luY2x1ZGUgIm90dmdkZWYuYyIKKyNpbmNsdWRlICJvdHZncG9zLmMiCisjaW5jbHVkZSAib3R2Z3N1Yi5jIgorI2luY2x1ZGUgIm90dmpzdGYuYyIKKyNpbmNsdWRlICJvdHZtYXRoLmMiCisjaW5jbHVkZSAib3R2bW9kLmMiCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmFsaWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZhbGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3NWRlYgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZhbGlkLmgKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgb3R2YWxpZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIHRhYmxlIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fT1RWQUxJRF9IX18KKyNkZWZpbmUgX19PVFZBTElEX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaW5jbHVkZSAib3R2ZXJyb3IuaCIgICAgICAgICAgIC8qIG11c3QgY29tZSBiZWZvcmUgRlRfSU5URVJOQUxfVkFMSURBVEVfSCAqLworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfQkFTRV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKTsKKworICAvKiBHU1VCIGFuZCBHUE9TIHRhYmxlcyBzaG91bGQgYWxyZWFkeSBiZSB2YWxpZGF0ZWQ7ICovCisgIC8qIGlmIG1pc3NpbmcsIHNldCBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHRvIDAgICAgICAgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfR0RFRl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgZ3N1YiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgZ3BvcywKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfR1BPU192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfR1NVQl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgLyogR1NVQiBhbmQgR1BPUyB0YWJsZXMgc2hvdWxkIGFscmVhZHkgYmUgdmFsaWRhdGVkOyAqLworICAvKiBpZiBtaXNzaW5nLCBzZXQgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byAwICAgICAgICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X0pTVEZfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdzdWIsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdwb3MsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X01BVEhfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19PVFZBTElEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmJhc2UuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZiYXNlLmMKQEAgLTAsMCArMSwzMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmJhc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBCQVNFIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgIm90dmFsaWQuaCIKKyNpbmNsdWRlICJvdHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2YmFzZQorCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0Jhc2VDb29yZF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQmFzZUNvb3JkRm9ybWF0OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkJhc2VDb29yZCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIEJhc2VDb29yZEZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgcCArPSAyOyAgICAgLyogc2tpcCBDb29yZGluYXRlICovCisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBCYXNlQ29vcmRGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBCYXNlQ29vcmRGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6ICAgICAvKiBCYXNlQ29vcmRGb3JtYXQxICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgMjogICAgIC8qIEJhc2VDb29yZEZvcm1hdDIgKi8KKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOyAgIC8qIFJlZmVyZW5jZUdseXBoLCBCYXNlQ29vcmRQb2ludCAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6ICAgICAvKiBCYXNlQ29vcmRGb3JtYXQzICovCisgICAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICAgIC8qIERldmljZVRhYmxlICovCisgICAgICBvdHZfRGV2aWNlX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfQmFzZVRhZ0xpc3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQmFzZVRhZ0NvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkJhc2VUYWdMaXN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisKKyAgICBCYXNlVGFnQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoQmFzZVRhZ0NvdW50ID0gJWQpXG4iLCBCYXNlVGFnQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIEJhc2VUYWdDb3VudCAqIDQgKTsgICAgICAgICAgLyogQmFzZWxpbmVUYWcgKi8KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfQmFzZVZhbHVlc192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIEJhc2VDb29yZENvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkJhc2VWYWx1ZXMiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKworICAgIHAgICAgICAgICAgICAgKz0gMjsgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIERlZmF1bHRJbmRleCAqLworICAgIEJhc2VDb29yZENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEJhc2VDb29yZENvdW50ID0gJWQpXG4iLCBCYXNlQ29vcmRDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggQmFzZUNvb3JkQ291bnQgKiAyICk7CisKKyAgICAvKiBCYXNlQ29vcmQgKi8KKyAgICBmb3IgKCA7IEJhc2VDb29yZENvdW50ID4gMDsgQmFzZUNvb3JkQ291bnQtLSApCisgICAgICBvdHZfQmFzZUNvb3JkX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfTWluTWF4X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICB0YWJsZV9zaXplOworICAgIEZUX1VJbnQgICBGZWF0TWluTWF4Q291bnQ7CisKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIE1pbkNvb3JkICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBNYXhDb29yZCApOworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIk1pbk1heCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggTWluQ29vcmQgKTsKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBNYXhDb29yZCApOworICAgIEZlYXRNaW5NYXhDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChGZWF0TWluTWF4Q291bnQgPSAlZClcbiIsIEZlYXRNaW5NYXhDb3VudCApKTsKKworICAgIHRhYmxlX3NpemUgPSBGZWF0TWluTWF4Q291bnQgKiA4ICsgNjsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBNaW5Db29yZCApOworICAgIGlmICggTWluQ29vcmQgKQorICAgICAgb3R2X0Jhc2VDb29yZF92YWxpZGF0ZSggdGFibGUgKyBNaW5Db29yZCwgb3R2YWxpZCApOworCisgICAgT1RWX1NJWkVfQ0hFQ0soIE1heENvb3JkICk7CisgICAgaWYgKCBNYXhDb29yZCApCisgICAgICBvdHZfQmFzZUNvb3JkX3ZhbGlkYXRlKCB0YWJsZSArIE1heENvb3JkLCBvdHZhbGlkICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIEZlYXRNaW5NYXhDb3VudCAqIDggKTsKKworICAgIC8qIEZlYXRNaW5NYXhSZWNvcmQgKi8KKyAgICBmb3IgKCA7IEZlYXRNaW5NYXhDb3VudCA+IDA7IEZlYXRNaW5NYXhDb3VudC0tICkKKyAgICB7CisgICAgICBwICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2tpcCBGZWF0dXJlVGFibGVUYWcgKi8KKworICAgICAgT1RWX09QVElPTkFMX09GRlNFVCggTWluQ29vcmQgKTsKKyAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIE1heENvb3JkICk7CisKKyAgICAgIE9UVl9TSVpFX0NIRUNLKCBNaW5Db29yZCApOworICAgICAgaWYgKCBNaW5Db29yZCApCisgICAgICAgIG90dl9CYXNlQ29vcmRfdmFsaWRhdGUoIHRhYmxlICsgTWluQ29vcmQsIG90dmFsaWQgKTsKKworICAgICAgT1RWX1NJWkVfQ0hFQ0soIE1heENvb3JkICk7CisgICAgICBpZiAoIE1heENvb3JkICkKKyAgICAgICAgb3R2X0Jhc2VDb29yZF92YWxpZGF0ZSggdGFibGUgKyBNYXhDb29yZCwgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfQmFzZVNjcmlwdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIHRhYmxlX3NpemU7CisgICAgRlRfVUludCAgIEJhc2VMYW5nU3lzQ291bnQ7CisKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEJhc2VWYWx1ZXMgICAgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIERlZmF1bHRNaW5NYXggKTsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJCYXNlU2NyaXB0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA2ICk7CisgICAgT1RWX09QVElPTkFMX09GRlNFVCggQmFzZVZhbHVlcyAgICApOworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIERlZmF1bHRNaW5NYXggKTsKKyAgICBCYXNlTGFuZ1N5c0NvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEJhc2VMYW5nU3lzQ291bnQgPSAlZClcbiIsIEJhc2VMYW5nU3lzQ291bnQgKSk7CisKKyAgICB0YWJsZV9zaXplID0gQmFzZUxhbmdTeXNDb3VudCAqIDYgKyA2OworCisgICAgT1RWX1NJWkVfQ0hFQ0soIEJhc2VWYWx1ZXMgKTsKKyAgICBpZiAoIEJhc2VWYWx1ZXMgKQorICAgICAgb3R2X0Jhc2VWYWx1ZXNfdmFsaWRhdGUoIHRhYmxlICsgQmFzZVZhbHVlcywgb3R2YWxpZCApOworCisgICAgT1RWX1NJWkVfQ0hFQ0soIERlZmF1bHRNaW5NYXggKTsKKyAgICBpZiAoIERlZmF1bHRNaW5NYXggKQorICAgICAgb3R2X01pbk1heF92YWxpZGF0ZSggdGFibGUgKyBEZWZhdWx0TWluTWF4LCBvdHZhbGlkICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIEJhc2VMYW5nU3lzQ291bnQgKiA2ICk7CisKKyAgICAvKiBCYXNlTGFuZ1N5c1JlY29yZCAqLworICAgIGZvciAoIDsgQmFzZUxhbmdTeXNDb3VudCA+IDA7IEJhc2VMYW5nU3lzQ291bnQtLSApCisgICAgeworICAgICAgcCArPSA0OyAgICAgICAvKiBza2lwIEJhc2VMYW5nU3lzVGFnICovCisKKyAgICAgIG90dl9NaW5NYXhfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKSwgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfQmFzZVNjcmlwdExpc3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQmFzZVNjcmlwdENvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkJhc2VTY3JpcHRMaXN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgQmFzZVNjcmlwdENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEJhc2VTY3JpcHRDb3VudCA9ICVkKVxuIiwgQmFzZVNjcmlwdENvdW50ICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBCYXNlU2NyaXB0Q291bnQgKiA2ICk7CisKKyAgICAvKiBCYXNlU2NyaXB0UmVjb3JkICovCisgICAgZm9yICggOyBCYXNlU2NyaXB0Q291bnQgPiAwOyBCYXNlU2NyaXB0Q291bnQtLSApCisgICAgeworICAgICAgcCArPSA0OyAgICAgICAvKiBza2lwIEJhc2VTY3JpcHRUYWcgKi8KKworICAgICAgLyogQmFzZVNjcmlwdCAqLworICAgICAgb3R2X0Jhc2VTY3JpcHRfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKSwgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfQXhpc192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIHRhYmxlX3NpemU7CisKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEJhc2VUYWdMaXN0ICk7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiQXhpcyIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEJhc2VUYWdMaXN0ICk7CisKKyAgICB0YWJsZV9zaXplID0gNDsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBCYXNlVGFnTGlzdCApOworICAgIGlmICggQmFzZVRhZ0xpc3QgKQorICAgICAgb3R2X0Jhc2VUYWdMaXN0X3ZhbGlkYXRlKCB0YWJsZSArIEJhc2VUYWdMaXN0LCBvdHZhbGlkICk7CisKKyAgICAvKiBCYXNlU2NyaXB0TGlzdCAqLworICAgIG90dl9CYXNlU2NyaXB0TGlzdF92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0JBU0VfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIGZ0dmFsaWQgKQorICB7CisgICAgT1RWX1ZhbGlkYXRvclJlYyAgb3R2YWxpZHJlYzsKKyAgICBPVFZfVmFsaWRhdG9yICAgICBvdHZhbGlkID0gJm90dmFsaWRyZWM7CisgICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgICA9IHRhYmxlOworICAgIEZUX1VJbnQgICAgICAgICAgIHRhYmxlX3NpemU7CisKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEhvcml6QXhpcyApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggVmVydEF4aXMgICk7CisKKworICAgIG90dmFsaWQtPnJvb3QgPSBmdHZhbGlkOworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgQkFTRSB0YWJsZVxuIiApKTsKKyAgICBPVFZfSU5JVDsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworCisgICAgaWYgKCBGVF9ORVhUX1VMT05HKCBwICkgIT0gMHgxMDAwMFVMICkgICAgICAvKiBWZXJzaW9uICovCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIHRhYmxlX3NpemUgPSA2OworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggSG9yaXpBeGlzICk7CisgICAgT1RWX1NJWkVfQ0hFQ0soIEhvcml6QXhpcyApOworICAgIGlmICggSG9yaXpBeGlzICkKKyAgICAgIG90dl9BeGlzX3ZhbGlkYXRlKCB0YWJsZSArIEhvcml6QXhpcywgb3R2YWxpZCApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggVmVydEF4aXMgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggVmVydEF4aXMgKTsKKyAgICBpZiAoIFZlcnRBeGlzICkKKyAgICAgIG90dl9BeGlzX3ZhbGlkYXRlKCB0YWJsZSArIFZlcnRBeGlzLCBvdHZhbGlkICk7CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Y29tbW4uYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZjb21tbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2ZmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Y29tbW4uYwpAQCAtMCwwICsxLDEwODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmNvbW1uLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgIm90dmNvbW1uLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vdHZjb21tb24KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgQ09WRVJBR0UgVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBleHBlY3RlZF9jb3VudCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBDb3ZlcmFnZUZvcm1hdDsKKyAgICBGVF9VSW50ICAgdG90YWwgPSAwOworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkNvdmVyYWdlIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgQ292ZXJhZ2VGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgQ292ZXJhZ2VGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBDb3ZlcmFnZUZvcm1hdCApCisgICAgeworICAgIGNhc2UgMTogICAgIC8qIENvdmVyYWdlRm9ybWF0MSAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICBHbHlwaENvdW50OworICAgICAgICBGVF9VSW50ICBpOworCisKKyAgICAgICAgR2x5cGhDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgT1RWX1RSQUNFKCggIiAoR2x5cGhDb3VudCA9ICVkKVxuIiwgR2x5cGhDb3VudCApKTsKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIEdseXBoQ291bnQgKiAyICk7ICAgICAgICAvKiBHbHlwaEFycmF5ICovCisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBHbHlwaENvdW50OyArK2kgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVUludCAgZ2lkOworCisKKyAgICAgICAgICBnaWQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgIGlmICggZ2lkID49IG90dmFsaWQtPmdseXBoX2NvdW50ICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbCA9IEdseXBoQ291bnQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjogICAgIC8qIENvdmVyYWdlRm9ybWF0MiAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICBuLCBSYW5nZUNvdW50OworICAgICAgICBGVF9VSW50ICBTdGFydCwgRW5kLCBTdGFydENvdmVyYWdlSW5kZXgsIGxhc3QgPSAwOworCisKKyAgICAgICAgUmFuZ2VDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgT1RWX1RSQUNFKCggIiAoUmFuZ2VDb3VudCA9ICVkKVxuIiwgUmFuZ2VDb3VudCApKTsKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIFJhbmdlQ291bnQgKiA2ICk7CisKKyAgICAgICAgLyogUmFuZ2VSZWNvcmQgKi8KKyAgICAgICAgZm9yICggbiA9IDA7IG4gPCBSYW5nZUNvdW50OyBuKysgKQorICAgICAgICB7CisgICAgICAgICAgU3RhcnQgICAgICAgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgICBFbmQgICAgICAgICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgIFN0YXJ0Q292ZXJhZ2VJbmRleCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgICBpZiAoIFN0YXJ0ID4gRW5kIHx8IFN0YXJ0Q292ZXJhZ2VJbmRleCAhPSB0b3RhbCApCisgICAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgICBpZiAoIEVuZCA+PSBvdHZhbGlkLT5nbHlwaF9jb3VudCApCisgICAgICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworCisgICAgICAgICAgaWYgKCBuID4gMCAmJiBTdGFydCA8PSBsYXN0ICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICAgIHRvdGFsICs9IEVuZCAtIFN0YXJ0ICsgMTsKKyAgICAgICAgICBsYXN0ICAgPSBFbmQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIC8qIEdlbmVyYWxseSwgYSBjb3ZlcmFnZSB0YWJsZSBvZmZzZXQgaGFzIGFuIGFzc29jaWF0ZWQgY291bnQgZmllbGQuICAqLworICAgIC8qIFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSB0YWJsZSBzaG91bGQgbWF0Y2ggdGhpcyBmaWVsZC4gIElmICAgICAqLworICAgIC8qIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgY291bnQsIGEgdmFsdWUgb2YgLTEgdGVsbHMgdXMgbm90IHRvIGNoZWNrLiAqLworICAgIGlmICggZXhwZWN0ZWRfY291bnQgIT0gLTEgJiYgKEZUX1VJbnQpZXhwZWN0ZWRfY291bnQgIT0gdG90YWwgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfVUludCApCisgIG90dl9Db3ZlcmFnZV9nZXRfZmlyc3QoIEZUX0J5dGVzICB0YWJsZSApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisKKyAgICBwICs9IDQ7ICAgICAvKiBza2lwIENvdmVyYWdlRm9ybWF0IGFuZCBHbHlwaC9SYW5nZUNvdW50ICovCisKKyAgICByZXR1cm4gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9VSW50ICkKKyAgb3R2X0NvdmVyYWdlX2dldF9sYXN0KCBGVF9CeXRlcyAgdGFibGUgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQ292ZXJhZ2VGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEZUX1VJbnQgICBjb3VudCAgICAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7ICAgICAvKiBHbHlwaC9SYW5nZUNvdW50ICovCisgICAgRlRfVUludCAgIHJlc3VsdCA9IDA7CisKKworICAgIHN3aXRjaCAoIENvdmVyYWdlRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgcCArPSAoIGNvdW50IC0gMSApICogMjsKKyAgICAgIHJlc3VsdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIHAgKz0gKCBjb3VudCAtIDEgKSAqIDYgKyAyOworICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX1VJbnQgKQorICBvdHZfQ292ZXJhZ2VfZ2V0X2NvdW50KCBGVF9CeXRlcyAgdGFibGUgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgICAgICAgICAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgIENvdmVyYWdlRm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBGVF9VSW50ICAgY291bnQgICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOyAgICAgLyogR2x5cGgvUmFuZ2VDb3VudCAqLworICAgIEZUX1VJbnQgICByZXN1bHQgICAgICAgICA9IDA7CisKKworICAgIHN3aXRjaCAoIENvdmVyYWdlRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIGNvdW50OworCisgICAgY2FzZSAyOgorICAgICAgeworICAgICAgICBGVF9VSW50ICBTdGFydCwgRW5kOworCisKKyAgICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgICB7CisgICAgICAgICAgU3RhcnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgIEVuZCAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgICBwICAgICs9IDI7ICAgICAgICAgICAgICAgICAgICAvKiBza2lwIFN0YXJ0Q292ZXJhZ2VJbmRleCAqLworCisgICAgICAgICAgcmVzdWx0ICs9IEVuZCAtIFN0YXJ0ICsgMTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICBDTEFTUyBERUZJTklUSU9OIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBDbGFzc0Zvcm1hdDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJDbGFzc0RlZiIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIENsYXNzRm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIENsYXNzRm9ybWF0ICkpOworCisgICAgc3dpdGNoICggQ2xhc3NGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6ICAgICAvKiBDbGFzc0RlZkZvcm1hdDEgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgU3RhcnRHbHlwaDsKKyAgICAgICAgRlRfVUludCAgR2x5cGhDb3VudDsKKworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworCisgICAgICAgIFN0YXJ0R2x5cGggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBHbHlwaENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICBPVFZfVFJBQ0UoKCAiIChHbHlwaENvdW50ID0gJWQpXG4iLCBHbHlwaENvdW50ICkpOworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggR2x5cGhDb3VudCAqIDIgKTsgICAgLyogQ2xhc3NWYWx1ZUFycmF5ICovCisKKyAgICAgICAgaWYgKCBTdGFydEdseXBoICsgR2x5cGhDb3VudCAtIDEgPj0gb3R2YWxpZC0+Z2x5cGhfY291bnQgKQorICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjogICAgIC8qIENsYXNzRGVmRm9ybWF0MiAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICBuLCBDbGFzc1JhbmdlQ291bnQ7CisgICAgICAgIEZUX1VJbnQgIFN0YXJ0LCBFbmQsIGxhc3QgPSAwOworCisKKyAgICAgICAgQ2xhc3NSYW5nZUNvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICBPVFZfVFJBQ0UoKCAiIChDbGFzc1JhbmdlQ291bnQgPSAlZClcbiIsIENsYXNzUmFuZ2VDb3VudCApKTsKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIENsYXNzUmFuZ2VDb3VudCAqIDYgKTsKKworICAgICAgICAvKiBDbGFzc1JhbmdlUmVjb3JkICovCisgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgQ2xhc3NSYW5nZUNvdW50OyBuKysgKQorICAgICAgICB7CisgICAgICAgICAgU3RhcnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgIEVuZCAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgICBwICAgICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2tpcCBDbGFzcyAqLworCisgICAgICAgICAgaWYgKCBTdGFydCA+IEVuZCB8fCAoIG4gPiAwICYmIFN0YXJ0IDw9IGxhc3QgKSApCisgICAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgICBpZiAoIEVuZCA+PSBvdHZhbGlkLT5nbHlwaF9jb3VudCApCisgICAgICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworCisgICAgICAgICAgbGFzdCA9IEVuZDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgLyogbm8gbmVlZCB0byBjaGVjayBnbHlwaCBpbmRpY2VzIHVzZWQgYXMgaW5wdXQgdG8gY2xhc3MgZGVmaW5pdGlvbiAgICovCisgICAgLyogdGFibGVzIHNpbmNlIGV2ZW4gaW52YWxpZCBnbHlwaCBpbmRpY2VzIHJldHVybiBhIG1lYW5pbmdmdWwgcmVzdWx0ICovCisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERFVklDRSBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0RldmljZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgU3RhcnRTaXplLCBFbmRTaXplLCBEZWx0YUZvcm1hdCwgY291bnQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiRGV2aWNlIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA4ICk7CisgICAgU3RhcnRTaXplICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEVuZFNpemUgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBEZWx0YUZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBpZiAoIERlbHRhRm9ybWF0IDwgMSB8fCBEZWx0YUZvcm1hdCA+IDMgKQorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICBpZiAoIEVuZFNpemUgPCBTdGFydFNpemUgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgY291bnQgPSBFbmRTaXplIC0gU3RhcnRTaXplICsgMTsKKyAgICBPVFZfTElNSVRfQ0hFQ0soICggMSA8PCBEZWx0YUZvcm1hdCApICogY291bnQgLyA4ICk7ICAvKiBEZWx0YVZhbHVlICovCisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIExPT0tVUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogdXNlcyBvdHZhbGlkLT50eXBlX2NvdW50ICovCisgIC8qIHVzZXMgb3R2YWxpZC0+dHlwZV9mdW5jcyAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9Mb29rdXBfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgIExvb2t1cFR5cGUsIFN1YlRhYmxlQ291bnQ7CisgICAgT1RWX1ZhbGlkYXRlX0Z1bmMgIHZhbGlkYXRlOworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkxvb2t1cCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworICAgIExvb2t1cFR5cGUgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIHAgICAgICAgICAgICArPSAyOyAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIExvb2t1cEZsYWcgKi8KKyAgICBTdWJUYWJsZUNvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKHR5cGUgJWQpXG4iLCBMb29rdXBUeXBlICkpOworCisgICAgaWYgKCBMb29rdXBUeXBlID09IDAgfHwgTG9va3VwVHlwZSA+IG90dmFsaWQtPnR5cGVfY291bnQgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgdmFsaWRhdGUgPSBvdHZhbGlkLT50eXBlX2Z1bmNzW0xvb2t1cFR5cGUgLSAxXTsKKworICAgIE9UVl9UUkFDRSgoICIgKFN1YlRhYmxlQ291bnQgPSAlZClcbiIsIFN1YlRhYmxlQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIFN1YlRhYmxlQ291bnQgKiAyICk7CisKKyAgICAvKiBTdWJUYWJsZSAqLworICAgIGZvciAoIDsgU3ViVGFibGVDb3VudCA+IDA7IFN1YlRhYmxlQ291bnQtLSApCisgICAgICB2YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyogdXNlcyB2YWxpZC0+bG9va3VwX2NvdW50ICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0xvb2t1cExpc3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBMb29rdXBDb3VudDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJMb29rdXBMaXN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgTG9va3VwQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoTG9va3VwQ291bnQgPSAlZClcbiIsIExvb2t1cENvdW50ICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBMb29rdXBDb3VudCAqIDIgKTsKKworICAgIG90dmFsaWQtPmxvb2t1cF9jb3VudCA9IExvb2t1cENvdW50OworCisgICAgLyogTG9va3VwICovCisgICAgZm9yICggOyBMb29rdXBDb3VudCA+IDA7IExvb2t1cENvdW50LS0gKQorICAgICAgb3R2X0xvb2t1cF92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQKKyAgb3R2X0xvb2t1cExpc3RfZ2V0X2NvdW50KCBGVF9CeXRlcyAgdGFibGUgKQorICB7CisgICAgcmV0dXJuIEZUX05FWFRfVVNIT1JUKCB0YWJsZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICBGRUFUVVJFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB1c2VzIG90dmFsaWQtPmxvb2t1cF9jb3VudCAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9GZWF0dXJlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgTG9va3VwQ291bnQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiRmVhdHVyZSIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIHAgICAgICAgICAgICs9IDI7ICAgICAgICAgICAgICAgICAgIC8qIHNraXAgRmVhdHVyZVBhcmFtcyAodW51c2VkKSAqLworICAgIExvb2t1cENvdW50ICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChMb29rdXBDb3VudCA9ICVkKVxuIiwgTG9va3VwQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIExvb2t1cENvdW50ICogMiApOworCisgICAgLyogTG9va3VwTGlzdEluZGV4ICovCisgICAgZm9yICggOyBMb29rdXBDb3VudCA+IDA7IExvb2t1cENvdW50LS0gKQorICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApID49IG90dmFsaWQtPmxvb2t1cF9jb3VudCApCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICBvdHZfRmVhdHVyZV9nZXRfY291bnQoIEZUX0J5dGVzICB0YWJsZSApCisgIHsKKyAgICByZXR1cm4gRlRfTkVYVF9VU0hPUlQoIHRhYmxlICk7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+bG9va3VwX2NvdW50ICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0ZlYXR1cmVMaXN0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsb29rdXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgRmVhdHVyZUNvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkZlYXR1cmVMaXN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgRmVhdHVyZUNvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEZlYXR1cmVDb3VudCA9ICVkKVxuIiwgRmVhdHVyZUNvdW50ICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBGZWF0dXJlQ291bnQgKiAyICk7CisKKyAgICBvdHZhbGlkLT5sb29rdXBfY291bnQgPSBvdHZfTG9va3VwTGlzdF9nZXRfY291bnQoIGxvb2t1cHMgKTsKKworICAgIC8qIEZlYXR1cmVSZWNvcmQgKi8KKyAgICBmb3IgKCA7IEZlYXR1cmVDb3VudCA+IDA7IEZlYXR1cmVDb3VudC0tICkKKyAgICB7CisgICAgICBwICs9IDQ7ICAgICAgIC8qIHNraXAgRmVhdHVyZVRhZyAqLworCisgICAgICAvKiBGZWF0dXJlICovCisgICAgICBvdHZfRmVhdHVyZV92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgTEFOR1VBR0UgU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogdXNlcyBvdHZhbGlkLT5leHRyYTEgKG51bWJlciBvZiBmZWF0dXJlcykgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfTGFuZ1N5c192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIFJlcUZlYXR1cmVJbmRleDsKKyAgICBGVF9VSW50ICAgRmVhdHVyZUNvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkxhbmdTeXMiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICBwICAgICAgICAgICAgICArPSAyOyAgICAgICAgICAgICAgICAgICAgLyogc2tpcCBMb29rdXBPcmRlciAodW51c2VkKSAqLworICAgIFJlcUZlYXR1cmVJbmRleCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgRmVhdHVyZUNvdW50ICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKFJlcUZlYXR1cmVJbmRleCA9ICVkKVxuIiwgUmVxRmVhdHVyZUluZGV4ICkpOworICAgIE9UVl9UUkFDRSgoICIgKEZlYXR1cmVDb3VudCA9ICVkKVxuIiwgICAgRmVhdHVyZUNvdW50ICAgICkpOworCisgICAgaWYgKCBSZXFGZWF0dXJlSW5kZXggIT0gMHhGRkZGVSAmJiBSZXFGZWF0dXJlSW5kZXggPj0gb3R2YWxpZC0+ZXh0cmExICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggRmVhdHVyZUNvdW50ICogMiApOworCisgICAgLyogRmVhdHVyZUluZGV4ICovCisgICAgZm9yICggOyBGZWF0dXJlQ291bnQgPiAwOyBGZWF0dXJlQ291bnQtLSApCisgICAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgPj0gb3R2YWxpZC0+ZXh0cmExICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9TY3JpcHRfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX1VJbnQgICBEZWZhdWx0TGFuZ1N5cywgTGFuZ1N5c0NvdW50OworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiU2NyaXB0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgRGVmYXVsdExhbmdTeXMgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIExhbmdTeXNDb3VudCAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKExhbmdTeXNDb3VudCA9ICVkKVxuIiwgTGFuZ1N5c0NvdW50ICkpOworCisgICAgaWYgKCBEZWZhdWx0TGFuZ1N5cyAhPSAwICkKKyAgICAgIG90dl9MYW5nU3lzX3ZhbGlkYXRlKCB0YWJsZSArIERlZmF1bHRMYW5nU3lzLCBvdHZhbGlkICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIExhbmdTeXNDb3VudCAqIDYgKTsKKworICAgIC8qIExhbmdTeXNSZWNvcmQgKi8KKyAgICBmb3IgKCA7IExhbmdTeXNDb3VudCA+IDA7IExhbmdTeXNDb3VudC0tICkKKyAgICB7CisgICAgICBwICs9IDQ7ICAgICAgIC8qIHNraXAgTGFuZ1N5c1RhZyAqLworCisgICAgICAvKiBMYW5nU3lzICovCisgICAgICBvdHZfTGFuZ1N5c192YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChudW1iZXIgb2YgZmVhdHVyZXMpICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X1NjcmlwdExpc3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICAgICAgZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX1VJbnQgICBTY3JpcHRDb3VudDsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIlNjcmlwdExpc3QiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBTY3JpcHRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChTY3JpcHRDb3VudCA9ICVkKVxuIiwgU2NyaXB0Q291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIFNjcmlwdENvdW50ICogNiApOworCisgICAgb3R2YWxpZC0+ZXh0cmExID0gb3R2X0ZlYXR1cmVfZ2V0X2NvdW50KCBmZWF0dXJlcyApOworCisgICAgLyogU2NyaXB0UmVjb3JkICovCisgICAgZm9yICggOyBTY3JpcHRDb3VudCA+IDA7IFNjcmlwdENvdW50LS0gKQorICAgIHsKKyAgICAgIHAgKz0gNDsgICAgICAgLyogc2tpcCBTY3JpcHRUYWcgKi8KKworICAgICAgb3R2X1NjcmlwdF92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7IC8qIFNjcmlwdCAqLworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKgorICAgICB1OiAgIHVpbnQxNgorICAgICB1eDogIHVuaXQxNiBbeF0KKworICAgICBzOiAgIHN0cnVjdAorICAgICBzeDogIHN0cnVjdCBbeF0KKyAgICAgc3h5OiBzdHJ1Y3QgW3hdLCB1c2luZyBleHRlcm5hbCB5IGNvdW50CisKKyAgICAgeDogICB1aW50MTYgeAorCisgICAgIEM6ICAgQ292ZXJhZ2UKKworICAgICBPOiAgIE9mZnNldAorICAgICBPbjogIE9mZnNldCAoTlVMTCkKKyAgICAgT3g6ICBPZmZzZXQgW3hdCisgICAgIE9ueDogT2Zmc2V0IChOVUxMKSBbeF0KKyAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfeF9PeCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgIENvdW50OworICAgIE9UVl9WYWxpZGF0ZV9GdW5jICBmdW5jOworCisKKyAgICBPVFZfRU5URVI7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDb3VudCA9ICVkKVxuIiwgQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIENvdW50ICogMiApOworCisgICAgb3R2YWxpZC0+bmVzdGluZ19sZXZlbCsrOworICAgIGZ1bmMgPSBvdHZhbGlkLT5mdW5jW290dmFsaWQtPm5lc3RpbmdfbGV2ZWxdOworCisgICAgZm9yICggOyBDb3VudCA+IDA7IENvdW50LS0gKQorICAgICAgZnVuYyggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsLS07CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X3VfQ194X094KCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgIENvdW50LCBDb3ZlcmFnZTsKKyAgICBPVFZfVmFsaWRhdGVfRnVuYyAgZnVuYzsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgcCArPSAyOyAgICAgLyogc2tpcCBGb3JtYXQgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIENvdmVyYWdlID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBDb3VudCAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDb3VudCA9ICVkKVxuIiwgQ291bnQgKSk7CisKKyAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgQ292ZXJhZ2UsIG90dmFsaWQsIChGVF9JbnQpQ291bnQgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggQ291bnQgKiAyICk7CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7CisgICAgZnVuYyA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisKKyAgICBmb3IgKCA7IENvdW50ID4gMDsgQ291bnQtLSApCisgICAgICBmdW5jKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKworICAgIG90dmFsaWQtPm5lc3RpbmdfbGV2ZWwtLTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKiB1c2VzIG90dmFsaWQtPmV4dHJhMSAoaWYgPiAwOiBhcnJheSB2YWx1ZSBsaW1pdCkgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfeF91eCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIENvdW50OworCisKKyAgICBPVFZfRU5URVI7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDb3VudCA9ICVkKVxuIiwgQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIENvdW50ICogMiApOworCisgICAgaWYgKCBvdHZhbGlkLT5leHRyYTEgKQorICAgIHsKKyAgICAgIGZvciAoIDsgQ291bnQgPiAwOyBDb3VudC0tICkKKyAgICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApID49IG90dmFsaWQtPmV4dHJhMSApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKiBgdXgnIGluIHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgbm90IHJlYWxseSBjb3JyZWN0IHNpbmNlIG9ubHkgeC0xICovCisgIC8qIGVsZW1lbnRzIGFyZSB0ZXN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiB1c2VzIG90dmFsaWQtPmV4dHJhMSAoYXJyYXkgdmFsdWUgbGltaXQpICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X3hfeV91eF9zeSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQ291bnQxLCBDb3VudDI7CisKKworICAgIE9UVl9FTlRFUjsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIENvdW50MSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgQ291bnQyID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKENvdW50MSA9ICVkKVxuIiwgQ291bnQxICkpOworICAgIE9UVl9UUkFDRSgoICIgKENvdW50MiA9ICVkKVxuIiwgQ291bnQyICkpOworCisgICAgaWYgKCBDb3VudDEgPT0gMCApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soICggQ291bnQxIC0gMSApICogMiArIENvdW50MiAqIDQgKTsKKyAgICBwICs9ICggQ291bnQxIC0gMSApICogMjsKKworICAgIGZvciAoIDsgQ291bnQyID4gMDsgQ291bnQyLS0gKQorICAgIHsKKyAgICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSA+PSBDb3VudDEgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSA+PSBvdHZhbGlkLT5leHRyYTEgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIGB1eScgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyBub3QgcmVhbGx5IGNvcnJlY3Qgc2luY2Ugb25seSB5LTEgKi8KKyAgLyogZWxlbWVudHMgYXJlIHRlc3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIHVzZXMgb3R2YWxpZC0+ZXh0cmExIChhcnJheSB2YWx1ZSBsaW1pdCkgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfeF91eF95X3V5X3pfdXpfcF9zcCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIEJhY2t0cmFja0NvdW50LCBJbnB1dENvdW50LCBMb29rYWhlYWRDb3VudDsKKyAgICBGVF9VSW50ICAgQ291bnQ7CisKKworICAgIE9UVl9FTlRFUjsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIEJhY2t0cmFja0NvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEJhY2t0cmFja0NvdW50ID0gJWQpXG4iLCBCYWNrdHJhY2tDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggQmFja3RyYWNrQ291bnQgKiAyICsgMiApOworICAgIHAgKz0gQmFja3RyYWNrQ291bnQgKiAyOworCisgICAgSW5wdXRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgaWYgKCBJbnB1dENvdW50ID09IDAgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgT1RWX1RSQUNFKCggIiAoSW5wdXRDb3VudCA9ICVkKVxuIiwgSW5wdXRDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggSW5wdXRDb3VudCAqIDIgKTsKKyAgICBwICs9ICggSW5wdXRDb3VudCAtIDEgKSAqIDI7CisKKyAgICBMb29rYWhlYWRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChMb29rYWhlYWRDb3VudCA9ICVkKVxuIiwgTG9va2FoZWFkQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIExvb2thaGVhZENvdW50ICogMiArIDIgKTsKKyAgICBwICs9IExvb2thaGVhZENvdW50ICogMjsKKworICAgIENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKENvdW50ID0gJWQpXG4iLCBDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggQ291bnQgKiA0ICk7CisKKyAgICBmb3IgKCA7IENvdW50ID4gMDsgQ291bnQtLSApCisgICAgeworICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApID49IElucHV0Q291bnQgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSA+PSBvdHZhbGlkLT5leHRyYTEgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExICh2YWxpZC0+bG9va3VwX2NvdW50KSAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl91X09fT194X09ueCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICAgICAgICAgICBDb3ZlcmFnZSwgQ2xhc3NEZWYsIENsYXNzU2V0Q291bnQ7CisgICAgT1RWX1ZhbGlkYXRlX0Z1bmMgIGZ1bmM7CisKKworICAgIE9UVl9FTlRFUjsKKworICAgIHAgKz0gMjsgICAgIC8qIHNraXAgRm9ybWF0ICovCisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICBDb3ZlcmFnZSAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBDbGFzc0RlZiAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBDbGFzc1NldENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKENsYXNzU2V0Q291bnQgPSAlZClcbiIsIENsYXNzU2V0Q291bnQgKSk7CisKKyAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgQ292ZXJhZ2UsIG90dmFsaWQsIC0xICk7CisgICAgb3R2X0NsYXNzRGVmX3ZhbGlkYXRlKCB0YWJsZSArIENsYXNzRGVmLCBvdHZhbGlkICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIENsYXNzU2V0Q291bnQgKiAyICk7CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7CisgICAgZnVuYyAgICAgICAgICA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisgICAgb3R2YWxpZC0+ZXh0cmExID0gb3R2YWxpZC0+bG9va3VwX2NvdW50OworCisgICAgZm9yICggOyBDbGFzc1NldENvdW50ID4gMDsgQ2xhc3NTZXRDb3VudC0tICkKKyAgICB7CisgICAgICBGVF9VSW50ICBvZmZzZXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAgIGlmICggb2Zmc2V0ICkKKyAgICAgICAgZnVuYyggdGFibGUgKyBvZmZzZXQsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsLS07CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyogdXNlcyBvdHZhbGlkLT5sb29rdXBfY291bnQgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfdV94X3lfT3hfc3koIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgR2x5cGhDb3VudCwgQ291bnQsIGNvdW50MTsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgcCArPSAyOyAgICAgLyogc2tpcCBGb3JtYXQgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgIEdseXBoQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIENvdW50ICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoR2x5cGhDb3VudCA9ICVkKVxuIiwgR2x5cGhDb3VudCApKTsKKyAgICBPVFZfVFJBQ0UoKCAiIChDb3VudCA9ICVkKVxuIiwgICAgICBDb3VudCAgICAgICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBHbHlwaENvdW50ICogMiArIENvdW50ICogNCApOworCisgICAgZm9yICggY291bnQxID0gR2x5cGhDb3VudDsgY291bnQxID4gMDsgY291bnQxLS0gKQorICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQsIC0xICk7CisKKyAgICBmb3IgKCA7IENvdW50ID4gMDsgQ291bnQtLSApCisgICAgeworICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApID49IEdseXBoQ291bnQgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSA+PSBvdHZhbGlkLT5sb29rdXBfY291bnQgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExICh2YWxpZC0+bG9va3VwX2NvdW50KSAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl91X09fT19PX09feF9PbngoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICAgICAgICAgICBwID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgIENvdmVyYWdlOworICAgIEZUX1VJbnQgICAgICAgICAgICBCYWNrdHJhY2tDbGFzc0RlZiwgSW5wdXRDbGFzc0RlZiwgTG9va2FoZWFkQ2xhc3NEZWY7CisgICAgRlRfVUludCAgICAgICAgICAgIENoYWluQ2xhc3NTZXRDb3VudDsKKyAgICBPVFZfVmFsaWRhdGVfRnVuYyAgZnVuYzsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgcCArPSAyOyAgICAgLyogc2tpcCBGb3JtYXQgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggMTAgKTsKKyAgICBDb3ZlcmFnZSAgICAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEJhY2t0cmFja0NsYXNzRGVmICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgSW5wdXRDbGFzc0RlZiAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBMb29rYWhlYWRDbGFzc0RlZiAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIENoYWluQ2xhc3NTZXRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDaGFpbkNsYXNzU2V0Q291bnQgPSAlZClcbiIsIENoYWluQ2xhc3NTZXRDb3VudCApKTsKKworICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggdGFibGUgKyBDb3ZlcmFnZSwgb3R2YWxpZCwgLTEgKTsKKworICAgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggdGFibGUgKyBCYWNrdHJhY2tDbGFzc0RlZiwgIG90dmFsaWQgKTsKKyAgICBvdHZfQ2xhc3NEZWZfdmFsaWRhdGUoIHRhYmxlICsgSW5wdXRDbGFzc0RlZiwgb3R2YWxpZCApOworICAgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggdGFibGUgKyBMb29rYWhlYWRDbGFzc0RlZiwgb3R2YWxpZCApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBDaGFpbkNsYXNzU2V0Q291bnQgKiAyICk7CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7CisgICAgZnVuYyAgICAgICAgICA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisgICAgb3R2YWxpZC0+ZXh0cmExID0gb3R2YWxpZC0+bG9va3VwX2NvdW50OworCisgICAgZm9yICggOyBDaGFpbkNsYXNzU2V0Q291bnQgPiAwOyBDaGFpbkNsYXNzU2V0Q291bnQtLSApCisgICAgeworICAgICAgRlRfVUludCAgb2Zmc2V0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworCisgICAgICBpZiAoIG9mZnNldCApCisgICAgICAgIGZ1bmMoIHRhYmxlICsgb2Zmc2V0LCBvdHZhbGlkICk7CisgICAgfQorCisgICAgb3R2YWxpZC0+bmVzdGluZ19sZXZlbC0tOworCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHVzZXMgb3R2YWxpZC0+bG9va3VwX2NvdW50ICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X3VfeF9PeF95X095X3pfT3pfcF9zcCggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgQmFja3RyYWNrR2x5cGhDb3VudCwgSW5wdXRHbHlwaENvdW50LCBMb29rYWhlYWRHbHlwaENvdW50OworICAgIEZUX1VJbnQgICBjb3VudDEsIGNvdW50MjsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgcCArPSAyOyAgICAgLyogc2tpcCBGb3JtYXQgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIEJhY2t0cmFja0dseXBoQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoQmFja3RyYWNrR2x5cGhDb3VudCA9ICVkKVxuIiwgQmFja3RyYWNrR2x5cGhDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggQmFja3RyYWNrR2x5cGhDb3VudCAqIDIgKyAyICk7CisKKyAgICBmb3IgKCA7IEJhY2t0cmFja0dseXBoQ291bnQgPiAwOyBCYWNrdHJhY2tHbHlwaENvdW50LS0gKQorICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQsIC0xICk7CisKKyAgICBJbnB1dEdseXBoQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoSW5wdXRHbHlwaENvdW50ID0gJWQpXG4iLCBJbnB1dEdseXBoQ291bnQgKSk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIElucHV0R2x5cGhDb3VudCAqIDIgKyAyICk7CisKKyAgICBmb3IgKCBjb3VudDEgPSBJbnB1dEdseXBoQ291bnQ7IGNvdW50MSA+IDA7IGNvdW50MS0tICkKKyAgICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkLCAtMSApOworCisgICAgTG9va2FoZWFkR2x5cGhDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChMb29rYWhlYWRHbHlwaENvdW50ID0gJWQpXG4iLCBMb29rYWhlYWRHbHlwaENvdW50ICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBMb29rYWhlYWRHbHlwaENvdW50ICogMiArIDIgKTsKKworICAgIGZvciAoIDsgTG9va2FoZWFkR2x5cGhDb3VudCA+IDA7IExvb2thaGVhZEdseXBoQ291bnQtLSApCisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKSwgb3R2YWxpZCwgLTEgKTsKKworICAgIGNvdW50MiA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDb3VudCA9ICVkKVxuIiwgY291bnQyICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBjb3VudDIgKiA0ICk7CisKKyAgICBmb3IgKCA7IGNvdW50MiA+IDA7IGNvdW50Mi0tICkKKyAgICB7CisgICAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgPj0gSW5wdXRHbHlwaENvdW50ICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgPj0gb3R2YWxpZC0+bG9va3VwX2NvdW50ICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX1VJbnQgKQorICBvdHZfR1NVQkdQT1NfZ2V0X0xvb2t1cF9jb3VudCggRlRfQnl0ZXMgIHRhYmxlICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGUgKyA4OworCisKKyAgICByZXR1cm4gb3R2X0xvb2t1cExpc3RfZ2V0X2NvdW50KCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICkgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9VSW50ICkKKyAgb3R2X0dTVUJHUE9TX2hhdmVfTWFya0F0dGFjaG1lbnRUeXBlX2ZsYWcoIEZUX0J5dGVzICB0YWJsZSApCisgIHsKKyAgICBGVF9CeXRlcyAgcCwgbG9va3VwOworICAgIEZUX1VJbnQgICBjb3VudDsKKworCisgICAgaWYgKCAhdGFibGUgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBMb29rdXBMaXN0ICovCisgICAgcCAgICAgID0gdGFibGUgKyA4OworICAgIHRhYmxlICs9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAvKiBMb29rdXBDb3VudCAqLworICAgIHAgICAgID0gdGFibGU7CisgICAgY291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgIHsKKyAgICAgIEZUX0J5dGVzICBvbGRwOworCisKKyAgICAgIC8qIExvb2t1cCAqLworICAgICAgbG9va3VwID0gdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBvbGRwID0gcDsKKworICAgICAgLyogTG9va3VwRmxhZyAqLworICAgICAgcCA9IGxvb2t1cCArIDI7CisgICAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgJiAweEZGMDBVICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIHAgPSBvbGRwOworICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Y29tbW4uaCBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZjb21tbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWJmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Y29tbW4uaApAQCAtMCwwICsxLDQzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgb3R2Y29tbW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fT1RWQ09NTU5fSF9fCisjZGVmaW5lIF9fT1RWQ09NTU5fSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAib3R2YWxpZC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgT1RWX1ZhbGlkYXRvclJlY18qICBPVFZfVmFsaWRhdG9yOworCisgIHR5cGVkZWYgdm9pZCAgKCpPVFZfVmFsaWRhdGVfRnVuYykoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIE9UVl9WYWxpZGF0b3JSZWNfCisgIHsKKyAgICBGVF9WYWxpZGF0b3IgICAgICAgIHJvb3Q7CisgICAgRlRfVUludCAgICAgICAgICAgICB0eXBlX2NvdW50OworICAgIE9UVl9WYWxpZGF0ZV9GdW5jKiAgdHlwZV9mdW5jczsKKworICAgIEZUX1VJbnQgICAgICAgICAgICAgbG9va3VwX2NvdW50OworICAgIEZUX1VJbnQgICAgICAgICAgICAgZ2x5cGhfY291bnQ7CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgIG5lc3RpbmdfbGV2ZWw7CisKKyAgICBPVFZfVmFsaWRhdGVfRnVuYyAgIGZ1bmNbM107CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgIGV4dHJhMTsgICAgIC8qIGZvciBwYXNzaW5nIHBhcmFtZXRlcnMgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgIGV4dHJhMjsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgIGV4dHJhMzsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgRlRfVUludCAgICAgICAgICAgICBkZWJ1Z19pbmRlbnQ7CisgICAgY29uc3QgRlRfU3RyaW5nKiAgICBkZWJ1Z19mdW5jdGlvbl9uYW1lWzNdOworI2VuZGlmCisKKyAgfSBPVFZfVmFsaWRhdG9yUmVjOworCisKKyN1bmRlZiAgRlRfSU5WQUxJRF8KKyNkZWZpbmUgRlRfSU5WQUxJRF8oIF9lcnJvciApIFwKKyAgICAgICAgICBmdF92YWxpZGF0b3JfZXJyb3IoIG90dmFsaWQtPnJvb3QsIEZUX1RIUk9XKCBfZXJyb3IgKSApCisKKyNkZWZpbmUgT1RWX09QVElPTkFMX1RBQkxFKCBfdGFibGUgKSAgRlRfVVNob3J0ICBfdGFibGU7ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgIF90YWJsZSAjIyBfcAorCisjZGVmaW5lIE9UVl9PUFRJT05BTF9PRkZTRVQoIF9vZmZzZXQgKSAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9vZmZzZXQgIyMgX3AgPSBwOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfb2Zmc2V0ICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIE9UVl9MSU1JVF9DSEVDSyggX2NvdW50ICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCBwICsgKF9jb3VudCkgPiBvdHZhbGlkLT5yb290LT5saW1pdCApIFwKKyAgICAgICAgICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIE9UVl9TSVpFX0NIRUNLKCBfc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCBfc2l6ZSA+IDAgJiYgX3NpemUgPCB0YWJsZV9zaXplICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCBvdHZhbGlkLT5yb290LT5sZXZlbCA9PSBGVF9WQUxJREFURV9QQVJBTk9JRCApICAgICBcCisgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogc3RyaXAgb2ZmIGBjb25zdCcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiAgcHAgPSAoRlRfQnl0ZSopX3NpemUgIyMgX3A7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIG9mZnNldCB0byBvcHRpb25hbCB0YWJsZSBgJXMnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZXQgdG8gemVyby5cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLCAjX3NpemUgKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogYWx3YXlzIGFzc3VtZSAxNmJpdCBlbnRpdGllcyAqLyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfc2l6ZSA9IHBwWzBdID0gcHBbMV0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworCisjZGVmaW5lICBPVFZfTkFNRV8oeCkgICN4CisjZGVmaW5lICBPVFZfTkFNRSh4KSAgIE9UVl9OQU1FXyh4KQorCisjZGVmaW5lICBPVFZfRlVOQ18oeCkgIHgjI0Z1bmMKKyNkZWZpbmUgIE9UVl9GVU5DKHgpICAgT1RWX0ZVTkNfKHgpCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisjZGVmaW5lIE9UVl9ORVNUMSggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90dmFsaWQtPm5lc3RpbmdfbGV2ZWwgICAgICAgICAgPSAwOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5mdW5jWzBdICAgICAgICAgICAgICAgID0gT1RWX0ZVTkMoIHggKTsgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZGVidWdfZnVuY3Rpb25fbmFtZVswXSA9IE9UVl9OQU1FKCB4ICk7IFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBPVFZfTkVTVDIoIHgsIHkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsICAgICAgICAgID0gMDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZnVuY1swXSAgICAgICAgICAgICAgICA9IE9UVl9GVU5DKCB4ICk7IFwKKyAgICAgICAgICAgIG90dmFsaWQtPmZ1bmNbMV0gICAgICAgICAgICAgICAgPSBPVFZfRlVOQyggeSApOyBcCisgICAgICAgICAgICBvdHZhbGlkLT5kZWJ1Z19mdW5jdGlvbl9uYW1lWzBdID0gT1RWX05BTUUoIHggKTsgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZGVidWdfZnVuY3Rpb25fbmFtZVsxXSA9IE9UVl9OQU1FKCB5ICk7IFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBPVFZfTkVTVDMoIHgsIHksIHogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsICAgICAgICAgID0gMDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZnVuY1swXSAgICAgICAgICAgICAgICA9IE9UVl9GVU5DKCB4ICk7IFwKKyAgICAgICAgICAgIG90dmFsaWQtPmZ1bmNbMV0gICAgICAgICAgICAgICAgPSBPVFZfRlVOQyggeSApOyBcCisgICAgICAgICAgICBvdHZhbGlkLT5mdW5jWzJdICAgICAgICAgICAgICAgID0gT1RWX0ZVTkMoIHogKTsgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZGVidWdfZnVuY3Rpb25fbmFtZVswXSA9IE9UVl9OQU1FKCB4ICk7IFwKKyAgICAgICAgICAgIG90dmFsaWQtPmRlYnVnX2Z1bmN0aW9uX25hbWVbMV0gPSBPVFZfTkFNRSggeSApOyBcCisgICAgICAgICAgICBvdHZhbGlkLT5kZWJ1Z19mdW5jdGlvbl9uYW1lWzJdID0gT1RWX05BTUUoIHogKTsgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIE9UVl9JTklUICBvdHZhbGlkLT5kZWJ1Z19pbmRlbnQgPSAwCisKKyNkZWZpbmUgT1RWX0VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZGVidWdfaW5kZW50ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlKi5zIiwgb3R2YWxpZC0+ZGVidWdfaW5kZW50LCAwICkpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJXMgdGFibGVcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3R2YWxpZC0+ZGVidWdfZnVuY3Rpb25fbmFtZVtvdHZhbGlkLT5uZXN0aW5nX2xldmVsXSApKTsgXAorICAgICAgICAgIEZUX0VORF9TVE1OVAorCisjZGVmaW5lIE9UVl9OQU1FX0VOVEVSKCBuYW1lICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90dmFsaWQtPmRlYnVnX2luZGVudCArPSAyOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJSoucyIsIG90dmFsaWQtPmRlYnVnX2luZGVudCwgMCApKTsgXAorICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiVzIHRhYmxlXG4iLCBuYW1lICkpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBPVFZfRVhJVCAgb3R2YWxpZC0+ZGVidWdfaW5kZW50IC09IDIKKworI2RlZmluZSBPVFZfVFJBQ0UoIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJSoucyIsIG90dmFsaWQtPmRlYnVnX2luZGVudCwgMCApKTsgXAorICAgICAgICAgICAgRlRfVFJBQ0U0KCBzICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2Vsc2UgICAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworI2RlZmluZSBPVFZfTkVTVDEoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsID0gMDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZnVuY1swXSAgICAgICA9IE9UVl9GVU5DKCB4ICk7IFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBPVFZfTkVTVDIoIHgsIHkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsID0gMDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZnVuY1swXSAgICAgICA9IE9UVl9GVU5DKCB4ICk7IFwKKyAgICAgICAgICAgIG90dmFsaWQtPmZ1bmNbMV0gICAgICAgPSBPVFZfRlVOQyggeSApOyBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKKyNkZWZpbmUgT1RWX05FU1QzKCB4LCB5LCB6ICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3R2YWxpZC0+bmVzdGluZ19sZXZlbCA9IDA7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90dmFsaWQtPmZ1bmNbMF0gICAgICAgPSBPVFZfRlVOQyggeCApOyBcCisgICAgICAgICAgICBvdHZhbGlkLT5mdW5jWzFdICAgICAgID0gT1RWX0ZVTkMoIHkgKTsgXAorICAgICAgICAgICAgb3R2YWxpZC0+ZnVuY1syXSAgICAgICA9IE9UVl9GVU5DKCB6ICk7IFwKKyAgICAgICAgICBGVF9FTkRfU1RNTlQKKworI2RlZmluZSBPVFZfSU5JVCAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKCAwICkKKyNkZWZpbmUgT1RWX0VOVEVSICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICggMCApCisjZGVmaW5lIE9UVl9OQU1FX0VOVEVSKCBuYW1lICkgIGRvIHsgfSB3aGlsZSAoIDAgKQorI2RlZmluZSBPVFZfRVhJVCAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBPVFZfVFJBQ0UoIHMgKSAgICAgICAgICBkbyB7IH0gd2hpbGUgKCAwICkKKworI2VuZGlmICAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisjZGVmaW5lIE9UVl9SVU4gIG90dmFsaWQtPmZ1bmNbMF0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgQ09WRVJBR0UgVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGV4cGVjdGVkX2NvdW50ICk7CisKKyAgLyogcmV0dXJuIGZpcnN0IGNvdmVyZWQgZ2x5cGggKi8KKyAgRlRfTE9DQUwoIEZUX1VJbnQgKQorICBvdHZfQ292ZXJhZ2VfZ2V0X2ZpcnN0KCBGVF9CeXRlcyAgdGFibGUgKTsKKworICAvKiByZXR1cm4gbGFzdCBjb3ZlcmVkIGdseXBoICovCisgIEZUX0xPQ0FMKCBGVF9VSW50ICkKKyAgb3R2X0NvdmVyYWdlX2dldF9sYXN0KCBGVF9CeXRlcyAgdGFibGUgKTsKKworICAvKiByZXR1cm4gbnVtYmVyIG9mIGNvdmVyZWQgZ2x5cGhzICovCisgIEZUX0xPQ0FMKCBGVF9VSW50ICkKKyAgb3R2X0NvdmVyYWdlX2dldF9jb3VudCggRlRfQnl0ZXMgIHRhYmxlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICBDTEFTUyBERUZJTklUSU9OIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIERFVklDRSBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfRGV2aWNlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfTG9va3VwX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X0xvb2t1cExpc3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgRkVBVFVSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfRmVhdHVyZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyAgLyogbG9va3VwcyBtdXN0IGFscmVhZHkgYmUgdmFsaWRhdGVkICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X0ZlYXR1cmVMaXN0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBsb29rdXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgTEFOR1VBR0UgU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X0xhbmdTeXNfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfU2NyaXB0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisgIC8qIGZlYXR1cmVzIG11c3QgYWxyZWFkeSBiZSB2YWxpZGF0ZWQgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfU2NyaXB0TGlzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgICBmZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBVVElMSVRZIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENoYWluUG9zQ2xhc3NTZXRGdW5jICBvdHZfeF9PeAorI2RlZmluZSBDaGFpblBvc1J1bGVTZXRGdW5jICAgb3R2X3hfT3gKKyNkZWZpbmUgQ2hhaW5TdWJDbGFzc1NldEZ1bmMgIG90dl94X094CisjZGVmaW5lIENoYWluU3ViUnVsZVNldEZ1bmMgICBvdHZfeF9PeAorI2RlZmluZSBKc3RmTGFuZ1N5c0Z1bmMgICAgICAgb3R2X3hfT3gKKyNkZWZpbmUgSnN0Zk1heEZ1bmMgICAgICAgICAgIG90dl94X094CisjZGVmaW5lIExpZ0dseXBoRnVuYyAgICAgICAgICBvdHZfeF9PeAorI2RlZmluZSBMaWdhdHVyZUFycmF5RnVuYyAgICAgb3R2X3hfT3gKKyNkZWZpbmUgTGlnYXR1cmVTZXRGdW5jICAgICAgIG90dl94X094CisjZGVmaW5lIFBvc0NsYXNzU2V0RnVuYyAgICAgICBvdHZfeF9PeAorI2RlZmluZSBQb3NSdWxlU2V0RnVuYyAgICAgICAgb3R2X3hfT3gKKyNkZWZpbmUgU3ViQ2xhc3NTZXRGdW5jICAgICAgIG90dl94X094CisjZGVmaW5lIFN1YlJ1bGVTZXRGdW5jICAgICAgICBvdHZfeF9PeAorCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X3hfT3ggKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyNkZWZpbmUgQWx0ZXJuYXRlU3Vic3RGb3JtYXQxRnVuYyAgICAgb3R2X3VfQ194X094CisjZGVmaW5lIENoYWluQ29udGV4dFBvc0Zvcm1hdDFGdW5jICAgIG90dl91X0NfeF9PeAorI2RlZmluZSBDaGFpbkNvbnRleHRTdWJzdEZvcm1hdDFGdW5jICBvdHZfdV9DX3hfT3gKKyNkZWZpbmUgQ29udGV4dFBvc0Zvcm1hdDFGdW5jICAgICAgICAgb3R2X3VfQ194X094CisjZGVmaW5lIENvbnRleHRTdWJzdEZvcm1hdDFGdW5jICAgICAgIG90dl91X0NfeF9PeAorI2RlZmluZSBMaWdhdHVyZVN1YnN0Rm9ybWF0MUZ1bmMgICAgICBvdHZfdV9DX3hfT3gKKyNkZWZpbmUgTXVsdGlwbGVTdWJzdEZvcm1hdDFGdW5jICAgICAgb3R2X3VfQ194X094CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfdV9DX3hfT3goIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKTsKKworI2RlZmluZSBBbHRlcm5hdGVTZXRGdW5jICAgICBvdHZfeF91eAorI2RlZmluZSBBdHRhY2hQb2ludEZ1bmMgICAgICBvdHZfeF91eAorI2RlZmluZSBFeHRlbmRlckdseXBoRnVuYyAgICBvdHZfeF91eAorI2RlZmluZSBKc3RmR1BPU01vZExpc3RGdW5jICBvdHZfeF91eAorI2RlZmluZSBKc3RmR1NVQk1vZExpc3RGdW5jICBvdHZfeF91eAorI2RlZmluZSBTZXF1ZW5jZUZ1bmMgICAgICAgICBvdHZfeF91eAorCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X3hfdXgoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisjZGVmaW5lIFBvc0NsYXNzUnVsZUZ1bmMgIG90dl94X3lfdXhfc3kKKyNkZWZpbmUgUG9zUnVsZUZ1bmMgICAgICAgb3R2X3hfeV91eF9zeQorI2RlZmluZSBTdWJDbGFzc1J1bGVGdW5jICBvdHZfeF95X3V4X3N5CisjZGVmaW5lIFN1YlJ1bGVGdW5jICAgICAgIG90dl94X3lfdXhfc3kKKworICBGVF9MT0NBTCggdm9pZCApCisgIG90dl94X3lfdXhfc3koIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyNkZWZpbmUgQ2hhaW5Qb3NDbGFzc1J1bGVGdW5jICBvdHZfeF91eF95X3V5X3pfdXpfcF9zcAorI2RlZmluZSBDaGFpblBvc1J1bGVGdW5jICAgICAgIG90dl94X3V4X3lfdXlfel91el9wX3NwCisjZGVmaW5lIENoYWluU3ViQ2xhc3NSdWxlRnVuYyAgb3R2X3hfdXhfeV91eV96X3V6X3Bfc3AKKyNkZWZpbmUgQ2hhaW5TdWJSdWxlRnVuYyAgICAgICBvdHZfeF91eF95X3V5X3pfdXpfcF9zcAorCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X3hfdXhfeV91eV96X3V6X3Bfc3AoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisjZGVmaW5lIENvbnRleHRQb3NGb3JtYXQyRnVuYyAgICBvdHZfdV9PX09feF9PbngKKyNkZWZpbmUgQ29udGV4dFN1YnN0Rm9ybWF0MkZ1bmMgIG90dl91X09fT194X09ueAorCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgb3R2X3VfT19PX3hfT254KCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyNkZWZpbmUgQ29udGV4dFBvc0Zvcm1hdDNGdW5jICAgIG90dl91X3hfeV9PeF9zeQorI2RlZmluZSBDb250ZXh0U3Vic3RGb3JtYXQzRnVuYyAgb3R2X3VfeF95X094X3N5CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfdV94X3lfT3hfc3koIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKTsKKworI2RlZmluZSBDaGFpbkNvbnRleHRQb3NGb3JtYXQyRnVuYyAgICBvdHZfdV9PX09fT19PX3hfT254CisjZGVmaW5lIENoYWluQ29udGV4dFN1YnN0Rm9ybWF0MkZ1bmMgIG90dl91X09fT19PX09feF9PbngKKworICBGVF9MT0NBTCggdm9pZCApCisgIG90dl91X09fT19PX09feF9PbngoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICk7CisKKyNkZWZpbmUgQ2hhaW5Db250ZXh0UG9zRm9ybWF0M0Z1bmMgICAgb3R2X3VfeF9PeF95X095X3pfT3pfcF9zcAorI2RlZmluZSBDaGFpbkNvbnRleHRTdWJzdEZvcm1hdDNGdW5jICBvdHZfdV94X094X3lfT3lfel9Pel9wX3NwCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBvdHZfdV94X094X3lfT3lfel9Pel9wX3NwKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApOworCisKKyAgRlRfTE9DQUwoIEZUX1VJbnQgKQorICBvdHZfR1NVQkdQT1NfZ2V0X0xvb2t1cF9jb3VudCggRlRfQnl0ZXMgIHRhYmxlICk7CisKKyAgRlRfTE9DQUwoIEZUX1VJbnQgKQorICBvdHZfR1NVQkdQT1NfaGF2ZV9NYXJrQXR0YWNobWVudFR5cGVfZmxhZyggRlRfQnl0ZXMgIHRhYmxlICk7CisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX09UVkNPTU1OX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmVycm9yLmggYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2ZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQ3OTVlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmVycm9yLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgb3R2ZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvciAgICAgICovCisgIC8qIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19PVFZFUlJPUl9IX18KKyNkZWZpbmUgX19PVFZFUlJPUl9IX18KKworI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisKKyN1bmRlZiBfX0ZURVJST1JTX0hfXworCisjdW5kZWYgIEZUX0VSUl9QUkVGSVgKKyNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgT1RWX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9PVHZhbGlkCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX09UVkVSUk9SX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmdkZWYuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZnZGVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2OWQyZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZnZGVmLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmdkZWYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBHREVGIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgIm90dmFsaWQuaCIKKyNpbmNsdWRlICJvdHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2Z2RlZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIFVUSUxJVFkgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQXR0YWNoTGlzdEZ1bmMgICAgb3R2X09feF9PeAorI2RlZmluZSBMaWdDYXJldExpc3RGdW5jICBvdHZfT194X094CisKKyAgLyogc2V0cyB2YWxpZC0+ZXh0cmExICgwKSAgICAgICAgICAgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfT194X094KCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgICAgICAgICAgcCA9IHRhYmxlOworICAgIEZUX0J5dGVzICAgICAgICAgICBDb3ZlcmFnZTsKKyAgICBGVF9VSW50ICAgICAgICAgICAgR2x5cGhDb3VudDsKKyAgICBPVFZfVmFsaWRhdGVfRnVuYyAgZnVuYzsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgQ292ZXJhZ2UgICA9IHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBHbHlwaENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKEdseXBoQ291bnQgPSAlZClcbiIsIEdseXBoQ291bnQgKSk7CisKKyAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIENvdmVyYWdlLCBvdHZhbGlkLCAoRlRfSW50KUdseXBoQ291bnQgKTsKKyAgICBpZiAoIEdseXBoQ291bnQgIT0gb3R2X0NvdmVyYWdlX2dldF9jb3VudCggQ292ZXJhZ2UgKSApCisgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIEdseXBoQ291bnQgKiAyICk7CisKKyAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7CisgICAgZnVuYyAgICAgICAgICA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisgICAgb3R2YWxpZC0+ZXh0cmExID0gMDsKKworICAgIGZvciAoIDsgR2x5cGhDb3VudCA+IDA7IEdseXBoQ291bnQtLSApCisgICAgICBmdW5jKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKworICAgIG90dmFsaWQtPm5lc3RpbmdfbGV2ZWwtLTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgIExJR0FUVVJFIENBUkVUUyAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDYXJldFZhbHVlRnVuYyAgb3R2X0NhcmV0VmFsdWVfdmFsaWRhdGUKKworICBzdGF0aWMgdm9pZAorICBvdHZfQ2FyZXRWYWx1ZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIENhcmV0VmFsdWVGb3JtYXQ7CisKKworICAgIE9UVl9FTlRFUjsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworCisgICAgQ2FyZXRWYWx1ZUZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgPSAlZClcbiIsIENhcmV0VmFsdWVGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBDYXJldFZhbHVlRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOiAgICAgLyogQ2FyZXRWYWx1ZUZvcm1hdDEgKi8KKyAgICAgIC8qIHNraXAgQ29vcmRpbmF0ZSwgbm8gdGVzdCAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6ICAgICAvKiBDYXJldFZhbHVlRm9ybWF0MiAqLworICAgICAgLyogc2tpcCBDYXJldFZhbHVlUG9pbnQsIG5vIHRlc3QgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOiAgICAgLyogQ2FyZXRWYWx1ZUZvcm1hdDMgKi8KKyAgICAgIHAgKz0gMjsgICAvKiBza2lwIENvb3JkaW5hdGUgKi8KKworICAgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisKKyAgICAgIC8qIERldmljZVRhYmxlICovCisgICAgICBvdHZfRGV2aWNlX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgR0RFRiBUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBzZXRzIG90dmFsaWQtPmdseXBoX2NvdW50ICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0dERUZfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdzdWIsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdwb3MsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIE9UVl9WYWxpZGF0b3JSZWMgIG90dmFsaWRyZWM7CisgICAgT1RWX1ZhbGlkYXRvciAgICAgb3R2YWxpZCA9ICZvdHZhbGlkcmVjOworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgdGFibGVfc2l6ZTsKKyAgICBGVF9Cb29sICAgICAgICAgICBuZWVkX01hcmtBdHRhY2hDbGFzc0RlZjsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggR2x5cGhDbGFzc0RlZiApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggQXR0YWNoTGlzdE9mZnNldCApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggTGlnQ2FyZXRMaXN0T2Zmc2V0ICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBNYXJrQXR0YWNoQ2xhc3NEZWYgKTsKKworCisgICAgb3R2YWxpZC0+cm9vdCA9IGZ0dmFsaWQ7CisKKyAgICBGVF9UUkFDRTMoKCAidmFsaWRhdGluZyBHREVGIHRhYmxlXG4iICkpOworICAgIE9UVl9JTklUOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAxMiApOworCisgICAgaWYgKCBGVF9ORVhUX1VMT05HKCBwICkgIT0gMHgxMDAwMFVMICkgICAgICAgICAgLyogVmVyc2lvbiAqLworICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICAvKiBNYXJrQXR0YWNoQ2xhc3NEZWYgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE9wZW5UeXBlICovCisgICAgLyogc3BlY2lmaWNhdGlvbiB3aXRob3V0IGluY3JlYXNpbmcgR0RFRidzIHZlcnNpb24sICAqLworICAgIC8qIHNvIHdlIHVzZSB0aGlzIHVnbHkgaGFjayB0byBmaW5kIG91dCB3aGV0aGVyIHRoZSAgKi8KKyAgICAvKiB0YWJsZSBpcyBuZWVkZWQgYWN0dWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBuZWVkX01hcmtBdHRhY2hDbGFzc0RlZiA9IEZUX0JPT0woCisgICAgICBvdHZfR1NVQkdQT1NfaGF2ZV9NYXJrQXR0YWNobWVudFR5cGVfZmxhZyggZ3N1YiApIHx8CisgICAgICBvdHZfR1NVQkdQT1NfaGF2ZV9NYXJrQXR0YWNobWVudFR5cGVfZmxhZyggZ3BvcyApICk7CisKKyAgICBpZiAoIG5lZWRfTWFya0F0dGFjaENsYXNzRGVmICkKKyAgICAgIHRhYmxlX3NpemUgPSAxMjsgICAgICAgICAgICAgIC8qIE9wZW5UeXBlID49IDEuMiAqLworICAgIGVsc2UKKyAgICAgIHRhYmxlX3NpemUgPSAxMDsgICAgICAgICAgICAgIC8qIE9wZW5UeXBlIDwgMS4yICAqLworCisgICAgb3R2YWxpZC0+Z2x5cGhfY291bnQgPSBnbHlwaF9jb3VudDsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEdseXBoQ2xhc3NEZWYgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggR2x5cGhDbGFzc0RlZiApOworICAgIGlmICggR2x5cGhDbGFzc0RlZiApCisgICAgICBvdHZfQ2xhc3NEZWZfdmFsaWRhdGUoIHRhYmxlICsgR2x5cGhDbGFzc0RlZiwgb3R2YWxpZCApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggQXR0YWNoTGlzdE9mZnNldCApOworICAgIE9UVl9TSVpFX0NIRUNLKCBBdHRhY2hMaXN0T2Zmc2V0ICk7CisgICAgaWYgKCBBdHRhY2hMaXN0T2Zmc2V0ICkKKyAgICB7CisgICAgICBPVFZfTkVTVDIoIEF0dGFjaExpc3QsIEF0dGFjaFBvaW50ICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSArIEF0dGFjaExpc3RPZmZzZXQsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBMaWdDYXJldExpc3RPZmZzZXQgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggTGlnQ2FyZXRMaXN0T2Zmc2V0ICk7CisgICAgaWYgKCBMaWdDYXJldExpc3RPZmZzZXQgKQorICAgIHsKKyAgICAgIE9UVl9ORVNUMyggTGlnQ2FyZXRMaXN0LCBMaWdHbHlwaCwgQ2FyZXRWYWx1ZSApOworICAgICAgT1RWX1JVTiggdGFibGUgKyBMaWdDYXJldExpc3RPZmZzZXQsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBpZiAoIG5lZWRfTWFya0F0dGFjaENsYXNzRGVmICkKKyAgICB7CisgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBNYXJrQXR0YWNoQ2xhc3NEZWYgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLKCBNYXJrQXR0YWNoQ2xhc3NEZWYgKTsKKyAgICAgIGlmICggTWFya0F0dGFjaENsYXNzRGVmICkKKyAgICAgICAgb3R2X0NsYXNzRGVmX3ZhbGlkYXRlKCB0YWJsZSArIE1hcmtBdHRhY2hDbGFzc0RlZiwgb3R2YWxpZCApOworICAgIH0KKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZncG9zLmMgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Z3Bvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzQzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Z3Bvcy5jCkBAIC0wLDAgKzEsMTAyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgb3R2Z3Bvcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIEdQT1MgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAib3R2YWxpZC5oIgorI2luY2x1ZGUgIm90dmNvbW1uLmgiCisjaW5jbHVkZSAib3R2Z3Bvcy5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2Z3BvcworCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0FuY2hvcl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIHZhbGlkICk7CisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X01hcmtBcnJheV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIHZhbGlkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgVVRJTElUWSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCYXNlQXJyYXlGdW5jICAgICAgIG90dl94X3N4eQorI2RlZmluZSBMaWdhdHVyZUF0dGFjaEZ1bmMgIG90dl94X3N4eQorI2RlZmluZSBNYXJrMkFycmF5RnVuYyAgICAgIG90dl94X3N4eQorCisgIC8qIHVzZXMgdmFsaWQtPmV4dHJhMSAoY291bnRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHVzZXMgdmFsaWQtPmV4dHJhMiAoYm9vbGVhbiB0byBoYW5kbGUgTlVMTCBhbmNob3IgZmllbGQpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X3hfc3h5KCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIENvdW50LCBjb3VudDEsIHRhYmxlX3NpemU7CisKKworICAgIE9UVl9FTlRFUjsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworCisgICAgQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoQ291bnQgPSAlZClcbiIsIENvdW50ICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBDb3VudCAqIG90dmFsaWQtPmV4dHJhMSAqIDIgKTsKKworICAgIHRhYmxlX3NpemUgPSBDb3VudCAqIG90dmFsaWQtPmV4dHJhMSAqIDIgKyAyOworCisgICAgZm9yICggOyBDb3VudCA+IDA7IENvdW50LS0gKQorICAgICAgZm9yICggY291bnQxID0gb3R2YWxpZC0+ZXh0cmExOyBjb3VudDEgPiAwOyBjb3VudDEtLSApCisgICAgICB7CisgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggYW5jaG9yX29mZnNldCApOworCisKKyAgICAgICAgT1RWX09QVElPTkFMX09GRlNFVCggYW5jaG9yX29mZnNldCApOworCisgICAgICAgIGlmICggb3R2YWxpZC0+ZXh0cmEyICkKKyAgICAgICAgeworICAgICAgICAgIE9UVl9TSVpFX0NIRUNLKCBhbmNob3Jfb2Zmc2V0ICk7CisgICAgICAgICAgaWYgKCBhbmNob3Jfb2Zmc2V0ICkKKyAgICAgICAgICAgIG90dl9BbmNob3JfdmFsaWRhdGUoIHRhYmxlICsgYW5jaG9yX29mZnNldCwgb3R2YWxpZCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBvdHZfQW5jaG9yX3ZhbGlkYXRlKCB0YWJsZSArIGFuY2hvcl9vZmZzZXQsIG90dmFsaWQgKTsKKyAgICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworI2RlZmluZSBNYXJrQmFzZVBvc0Zvcm1hdDFGdW5jICBvdHZfdV9PX09fdV9PX08KKyNkZWZpbmUgTWFya0xpZ1Bvc0Zvcm1hdDFGdW5jICAgb3R2X3VfT19PX3VfT19PCisjZGVmaW5lIE1hcmtNYXJrUG9zRm9ybWF0MUZ1bmMgIG90dl91X09fT191X09fTworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChjbGFzcyBjb3VudCkgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfdV9PX09fdV9PX08oIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgICAgICAgICAgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgICAgICAgICAgQ292ZXJhZ2UxLCBDb3ZlcmFnZTIsIENsYXNzQ291bnQ7CisgICAgRlRfVUludCAgICAgICAgICAgIEFycmF5MSwgQXJyYXkyOworICAgIE9UVl9WYWxpZGF0ZV9GdW5jICBmdW5jOworCisKKyAgICBPVFZfRU5URVI7CisKKyAgICBwICs9IDI7ICAgICAvKiBza2lwIFBvc0Zvcm1hdCAqLworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAxMCApOworICAgIENvdmVyYWdlMSAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIENvdmVyYWdlMiAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIENsYXNzQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEFycmF5MSAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEFycmF5MiAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIENvdmVyYWdlMSwgb3R2YWxpZCwgLTEgKTsKKyAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgQ292ZXJhZ2UyLCBvdHZhbGlkLCAtMSApOworCisgICAgb3R2X01hcmtBcnJheV92YWxpZGF0ZSggdGFibGUgKyBBcnJheTEsIG90dmFsaWQgKTsKKworICAgIG90dmFsaWQtPm5lc3RpbmdfbGV2ZWwrKzsKKyAgICBmdW5jICAgICAgICAgID0gb3R2YWxpZC0+ZnVuY1tvdHZhbGlkLT5uZXN0aW5nX2xldmVsXTsKKyAgICBvdHZhbGlkLT5leHRyYTEgPSBDbGFzc0NvdW50OworCisgICAgZnVuYyggdGFibGUgKyBBcnJheTIsIG90dmFsaWQgKTsKKworICAgIG90dmFsaWQtPm5lc3RpbmdfbGV2ZWwtLTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSBSRUNPUkRTICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgRlRfVUludAorICBvdHZfdmFsdWVfbGVuZ3RoKCBGVF9VSW50ICBmb3JtYXQgKQorICB7CisgICAgRlRfVUludCAgY291bnQ7CisKKworICAgIGNvdW50ID0gKCAoIGZvcm1hdCAmIDB4QUEgKSA+PiAxICkgKyAoIGZvcm1hdCAmIDB4NTUgKTsKKyAgICBjb3VudCA9ICggKCBjb3VudCAgJiAweENDICkgPj4gMiApICsgKCBjb3VudCAgJiAweDMzICk7CisgICAgY291bnQgPSAoICggY291bnQgICYgMHhGMCApID4+IDQgKSArICggY291bnQgICYgMHgwRiApOworCisgICAgcmV0dXJuIGNvdW50ICogMjsKKyAgfQorCisKKyAgLyogdXNlcyBvdHZhbGlkLT5leHRyYTMgKHBvaW50ZXIgdG8gYmFzZSB0YWJsZSkgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfVmFsdWVSZWNvcmRfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIGNvdW50OworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBGVF9JbnQgICAgbG9vcDsKKyAgICBGVF9VTG9uZyAgcmVzID0gMDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJWYWx1ZVJlY29yZCIgKTsKKworICAgIC8qIGRpc3BsYXkgYGZvcm1hdCcgaW4gZHVhbCByZXByZXNlbnRhdGlvbiAqLworICAgIGZvciAoIGxvb3AgPSA3OyBsb29wID49IDA7IGxvb3AtLSApCisgICAgeworICAgICAgcmVzIDw8PSA0OworICAgICAgcmVzICArPSAoIGZvcm1hdCA+PiBsb29wICkgJiAxOworICAgIH0KKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAwYiUwOGx4KVxuIiwgcmVzICkpOworI2VuZGlmCisKKyAgICBpZiAoIGZvcm1hdCA+PSAweDEwMCApCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIGZvciAoIGNvdW50ID0gNDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICB7CisgICAgICBpZiAoIGZvcm1hdCAmIDEgKQorICAgICAgeworICAgICAgICAvKiBYUGxhY2VtZW50LCBZUGxhY2VtZW50LCBYQWR2YW5jZSwgWUFkdmFuY2UgKi8KKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgICAgIHAgKz0gMjsKKyAgICAgIH0KKworICAgICAgZm9ybWF0ID4+PSAxOworICAgIH0KKworICAgIGZvciAoIGNvdW50ID0gNDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICB7CisgICAgICBpZiAoIGZvcm1hdCAmIDEgKQorICAgICAgeworICAgICAgICBGVF9QdHJEaXN0ICB0YWJsZV9zaXplOworCisgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggZGV2aWNlICk7CisKKworICAgICAgICAvKiBYUGxhRGV2aWNlLCBZUGxhRGV2aWNlLCBYQWR2RGV2aWNlLCBZQWR2RGV2aWNlICovCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBkZXZpY2UgKTsKKworICAgICAgICAvKiBYWFg6IHRoaXMgdmFsdWUgaXMgdXN1YWxseSB0b28gc21hbGwsIGVzcGVjaWFsbHkgaWYgdGhlIGN1cnJlbnQgKi8KKyAgICAgICAgLyogVmFsdWVSZWNvcmQgaXMgcGFydCBvZiBhbiBhcnJheSAtLSBnZXR0aW5nIHRoZSBjb3JyZWN0IHRhYmxlICAgICovCisgICAgICAgIC8qIHNpemUgaXMgcHJvYmFibHkgbm90IHdvcnRoIHRoZSB0cm91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHRhYmxlX3NpemUgPSBwIC0gb3R2YWxpZC0+ZXh0cmEzOworCisgICAgICAgIE9UVl9TSVpFX0NIRUNLKCBkZXZpY2UgKTsKKyAgICAgICAgaWYgKCBkZXZpY2UgKQorICAgICAgICAgIG90dl9EZXZpY2VfdmFsaWRhdGUoIG90dmFsaWQtPmV4dHJhMyArIGRldmljZSwgb3R2YWxpZCApOworICAgICAgfQorICAgICAgZm9ybWF0ID4+PSAxOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICBBTkNIT1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfQW5jaG9yX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBBbmNob3JGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiQW5jaG9yIik7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICBBbmNob3JGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgQW5jaG9yRm9ybWF0ICkpOworCisgICAgcCArPSA0OyAgICAgLyogc2tpcCBYQ29vcmRpbmF0ZSBhbmQgWUNvb3JkaW5hdGUgKi8KKworICAgIHN3aXRjaCAoIEFuY2hvckZvcm1hdCApCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOgorICAgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7ICAvKiBBbmNob3JQb2ludCAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICB7CisgICAgICAgIEZUX1VJbnQgICB0YWJsZV9zaXplOworCisgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggWERldmljZVRhYmxlICk7CisgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggWURldmljZVRhYmxlICk7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKyAgICAgICAgT1RWX09QVElPTkFMX09GRlNFVCggWERldmljZVRhYmxlICk7CisgICAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIFlEZXZpY2VUYWJsZSApOworCisgICAgICAgIHRhYmxlX3NpemUgPSA2ICsgNDsKKworICAgICAgICBPVFZfU0laRV9DSEVDSyggWERldmljZVRhYmxlICk7CisgICAgICAgIGlmICggWERldmljZVRhYmxlICkKKyAgICAgICAgICBvdHZfRGV2aWNlX3ZhbGlkYXRlKCB0YWJsZSArIFhEZXZpY2VUYWJsZSwgb3R2YWxpZCApOworCisgICAgICAgIE9UVl9TSVpFX0NIRUNLKCBZRGV2aWNlVGFibGUgKTsKKyAgICAgICAgaWYgKCBZRGV2aWNlVGFibGUgKQorICAgICAgICAgIG90dl9EZXZpY2VfdmFsaWRhdGUoIHRhYmxlICsgWURldmljZVRhYmxlLCBvdHZhbGlkICk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIE1BUksgQVJSQVlTICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X01hcmtBcnJheV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgTWFya0NvdW50OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIk1hcmtBcnJheSIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIE1hcmtDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChNYXJrQ291bnQgPSAlZClcbiIsIE1hcmtDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggTWFya0NvdW50ICogNCApOworCisgICAgLyogTWFya1JlY29yZCAqLworICAgIGZvciAoIDsgTWFya0NvdW50ID4gMDsgTWFya0NvdW50LS0gKQorICAgIHsKKyAgICAgIHAgKz0gMjsgICAvKiBza2lwIENsYXNzICovCisgICAgICAvKiBNYXJrQW5jaG9yICovCisgICAgICBvdHZfQW5jaG9yX3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgR1BPUyBMT09LVVAgVFlQRSAxICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogc2V0cyBvdHZhbGlkLT5leHRyYTMgKHBvaW50ZXIgdG8gYmFzZSB0YWJsZSkgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfU2luZ2xlUG9zX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBQb3NGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiU2luZ2xlUG9zIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgUG9zRm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFBvc0Zvcm1hdCApKTsKKworICAgIG90dmFsaWQtPmV4dHJhMyA9IHRhYmxlOworCisgICAgc3dpdGNoICggUG9zRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOiAgICAgLyogU2luZ2xlUG9zRm9ybWF0MSAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICBDb3ZlcmFnZSwgVmFsdWVGb3JtYXQ7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKyAgICAgICAgQ292ZXJhZ2UgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBWYWx1ZUZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIENvdmVyYWdlLCBvdHZhbGlkLCAtMSApOworICAgICAgICBvdHZfVmFsdWVSZWNvcmRfdmFsaWRhdGUoIHAsIFZhbHVlRm9ybWF0LCBvdHZhbGlkICk7IC8qIFZhbHVlICovCisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjogICAgIC8qIFNpbmdsZVBvc0Zvcm1hdDIgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgQ292ZXJhZ2UsIFZhbHVlRm9ybWF0LCBWYWx1ZUNvdW50LCBsZW5fdmFsdWU7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICAgICAgQ292ZXJhZ2UgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBWYWx1ZUZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIFZhbHVlQ291bnQgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICBPVFZfVFJBQ0UoKCAiIChWYWx1ZUNvdW50ID0gJWQpXG4iLCBWYWx1ZUNvdW50ICkpOworCisgICAgICAgIGxlbl92YWx1ZSA9IG90dl92YWx1ZV9sZW5ndGgoIFZhbHVlRm9ybWF0ICk7CisKKyAgICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIENvdmVyYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludClWYWx1ZUNvdW50ICk7CisKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCBWYWx1ZUNvdW50ICogbGVuX3ZhbHVlICk7CisKKyAgICAgICAgLyogVmFsdWUgKi8KKyAgICAgICAgZm9yICggOyBWYWx1ZUNvdW50ID4gMDsgVmFsdWVDb3VudC0tICkKKyAgICAgICAgeworICAgICAgICAgIG90dl9WYWx1ZVJlY29yZF92YWxpZGF0ZSggcCwgVmFsdWVGb3JtYXQsIG90dmFsaWQgKTsKKyAgICAgICAgICBwICs9IGxlbl92YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdQT1MgTE9PS1VQIFRZUEUgMiAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9QYWlyU2V0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGZvcm1hdDEsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBmb3JtYXQyLAorICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICB2YWx1ZV9sZW4xLCB2YWx1ZV9sZW4yLCBQYWlyVmFsdWVDb3VudDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJQYWlyU2V0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgUGFpclZhbHVlQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoUGFpclZhbHVlQ291bnQgPSAlZClcbiIsIFBhaXJWYWx1ZUNvdW50ICkpOworCisgICAgdmFsdWVfbGVuMSA9IG90dl92YWx1ZV9sZW5ndGgoIGZvcm1hdDEgKTsKKyAgICB2YWx1ZV9sZW4yID0gb3R2X3ZhbHVlX2xlbmd0aCggZm9ybWF0MiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCBQYWlyVmFsdWVDb3VudCAqICggdmFsdWVfbGVuMSArIHZhbHVlX2xlbjIgKyAyICkgKTsKKworICAgIC8qIFBhaXJWYWx1ZVJlY29yZCAqLworICAgIGZvciAoIDsgUGFpclZhbHVlQ291bnQgPiAwOyBQYWlyVmFsdWVDb3VudC0tICkKKyAgICB7CisgICAgICBwICs9IDI7ICAgICAgIC8qIHNraXAgU2Vjb25kR2x5cGggKi8KKworICAgICAgaWYgKCBmb3JtYXQxICkKKyAgICAgICAgb3R2X1ZhbHVlUmVjb3JkX3ZhbGlkYXRlKCBwLCBmb3JtYXQxLCBvdHZhbGlkICk7IC8qIFZhbHVlMSAqLworICAgICAgcCArPSB2YWx1ZV9sZW4xOworCisgICAgICBpZiAoIGZvcm1hdDIgKQorICAgICAgICBvdHZfVmFsdWVSZWNvcmRfdmFsaWRhdGUoIHAsIGZvcm1hdDIsIG90dmFsaWQgKTsgLyogVmFsdWUyICovCisgICAgICBwICs9IHZhbHVlX2xlbjI7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmEzIChwb2ludGVyIHRvIGJhc2UgdGFibGUpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X1BhaXJQb3NfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBQb3NGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiUGFpclBvcyIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIFBvc0Zvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBQb3NGb3JtYXQgKSk7CisKKyAgICBvdHZhbGlkLT5leHRyYTMgPSB0YWJsZTsKKworICAgIHN3aXRjaCAoIFBvc0Zvcm1hdCApCisgICAgeworICAgIGNhc2UgMTogICAgIC8qIFBhaXJQb3NGb3JtYXQxICovCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIENvdmVyYWdlLCBWYWx1ZUZvcm1hdDEsIFZhbHVlRm9ybWF0MiwgUGFpclNldENvdW50OworCisKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCA4ICk7CisgICAgICAgIENvdmVyYWdlICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIFZhbHVlRm9ybWF0MSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIFZhbHVlRm9ybWF0MiA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIFBhaXJTZXRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgT1RWX1RSQUNFKCggIiAoUGFpclNldENvdW50ID0gJWQpXG4iLCBQYWlyU2V0Q291bnQgKSk7CisKKyAgICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIENvdmVyYWdlLCBvdHZhbGlkLCAtMSApOworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggUGFpclNldENvdW50ICogMiApOworCisgICAgICAgIC8qIFBhaXJTZXRPZmZzZXQgKi8KKyAgICAgICAgZm9yICggOyBQYWlyU2V0Q291bnQgPiAwOyBQYWlyU2V0Q291bnQtLSApCisgICAgICAgICAgb3R2X1BhaXJTZXRfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVGb3JtYXQxLCBWYWx1ZUZvcm1hdDIsIG90dmFsaWQgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOiAgICAgLyogUGFpclBvc0Zvcm1hdDIgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgQ292ZXJhZ2UsIFZhbHVlRm9ybWF0MSwgVmFsdWVGb3JtYXQyLCBDbGFzc0RlZjEsIENsYXNzRGVmMjsKKyAgICAgICAgRlRfVUludCAgQ2xhc3NDb3VudDEsIENsYXNzQ291bnQyLCBsZW5fdmFsdWUxLCBsZW5fdmFsdWUyLCBjb3VudDsKKworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggMTQgKTsKKyAgICAgICAgQ292ZXJhZ2UgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgVmFsdWVGb3JtYXQxID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgVmFsdWVGb3JtYXQyID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgQ2xhc3NEZWYxICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgQ2xhc3NEZWYyICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgQ2xhc3NDb3VudDEgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgQ2xhc3NDb3VudDIgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICBPVFZfVFJBQ0UoKCAiIChDbGFzc0NvdW50MSA9ICVkKVxuIiwgQ2xhc3NDb3VudDEgKSk7CisgICAgICAgIE9UVl9UUkFDRSgoICIgKENsYXNzQ291bnQyID0gJWQpXG4iLCBDbGFzc0NvdW50MiApKTsKKworICAgICAgICBsZW5fdmFsdWUxID0gb3R2X3ZhbHVlX2xlbmd0aCggVmFsdWVGb3JtYXQxICk7CisgICAgICAgIGxlbl92YWx1ZTIgPSBvdHZfdmFsdWVfbGVuZ3RoKCBWYWx1ZUZvcm1hdDIgKTsKKworICAgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgQ292ZXJhZ2UsIG90dmFsaWQsIC0xICk7CisgICAgICAgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggdGFibGUgKyBDbGFzc0RlZjEsIG90dmFsaWQgKTsKKyAgICAgICAgb3R2X0NsYXNzRGVmX3ZhbGlkYXRlKCB0YWJsZSArIENsYXNzRGVmMiwgb3R2YWxpZCApOworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggQ2xhc3NDb3VudDEgKiBDbGFzc0NvdW50MiAqCisgICAgICAgICAgICAgICAgICAgICAoIGxlbl92YWx1ZTEgKyBsZW5fdmFsdWUyICkgKTsKKworICAgICAgICAvKiBDbGFzczFSZWNvcmQgKi8KKyAgICAgICAgZm9yICggOyBDbGFzc0NvdW50MSA+IDA7IENsYXNzQ291bnQxLS0gKQorICAgICAgICB7CisgICAgICAgICAgLyogQ2xhc3MyUmVjb3JkICovCisgICAgICAgICAgZm9yICggY291bnQgPSBDbGFzc0NvdW50MjsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIFZhbHVlRm9ybWF0MSApCisgICAgICAgICAgICAgIC8qIFZhbHVlMSAqLworICAgICAgICAgICAgICBvdHZfVmFsdWVSZWNvcmRfdmFsaWRhdGUoIHAsIFZhbHVlRm9ybWF0MSwgb3R2YWxpZCApOworICAgICAgICAgICAgcCArPSBsZW5fdmFsdWUxOworCisgICAgICAgICAgICBpZiAoIFZhbHVlRm9ybWF0MiApCisgICAgICAgICAgICAgIC8qIFZhbHVlMiAqLworICAgICAgICAgICAgICBvdHZfVmFsdWVSZWNvcmRfdmFsaWRhdGUoIHAsIFZhbHVlRm9ybWF0Miwgb3R2YWxpZCApOworICAgICAgICAgICAgcCArPSBsZW5fdmFsdWUyOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdQT1MgTE9PS1VQIFRZUEUgMyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9DdXJzaXZlUG9zX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgUG9zRm9ybWF0OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkN1cnNpdmVQb3MiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBQb3NGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgUG9zRm9ybWF0ICkpOworCisgICAgc3dpdGNoICggUG9zRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOiAgICAgLyogQ3Vyc2l2ZVBvc0Zvcm1hdDEgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgIHRhYmxlX3NpemU7CisgICAgICAgIEZUX1VJbnQgICBDb3ZlcmFnZSwgRW50cnlFeGl0Q291bnQ7CisKKyAgICAgICAgT1RWX09QVElPTkFMX1RBQkxFKCBFbnRyeUFuY2hvciApOworICAgICAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEV4aXRBbmNob3IgICk7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKyAgICAgICAgQ292ZXJhZ2UgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBFbnRyeUV4aXRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgT1RWX1RSQUNFKCggIiAoRW50cnlFeGl0Q291bnQgPSAlZClcbiIsIEVudHJ5RXhpdENvdW50ICkpOworCisgICAgICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggdGFibGUgKyBDb3ZlcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpRW50cnlFeGl0Q291bnQgKTsKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIEVudHJ5RXhpdENvdW50ICogNCApOworCisgICAgICAgIHRhYmxlX3NpemUgPSBFbnRyeUV4aXRDb3VudCAqIDQgKyA0OworCisgICAgICAgIC8qIEVudHJ5RXhpdFJlY29yZCAqLworICAgICAgICBmb3IgKCA7IEVudHJ5RXhpdENvdW50ID4gMDsgRW50cnlFeGl0Q291bnQtLSApCisgICAgICAgIHsKKyAgICAgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBFbnRyeUFuY2hvciApOworICAgICAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEV4aXRBbmNob3IgICk7CisKKyAgICAgICAgICBPVFZfU0laRV9DSEVDSyggRW50cnlBbmNob3IgKTsKKyAgICAgICAgICBpZiAoIEVudHJ5QW5jaG9yICkKKyAgICAgICAgICAgIG90dl9BbmNob3JfdmFsaWRhdGUoIHRhYmxlICsgRW50cnlBbmNob3IsIG90dmFsaWQgKTsKKworICAgICAgICAgIE9UVl9TSVpFX0NIRUNLKCBFeGl0QW5jaG9yICk7CisgICAgICAgICAgaWYgKCBFeGl0QW5jaG9yICkKKyAgICAgICAgICAgIG90dl9BbmNob3JfdmFsaWRhdGUoIHRhYmxlICsgRXhpdEFuY2hvciwgb3R2YWxpZCApOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgR1BPUyBMT09LVVAgVFlQRSA0ICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogVU5ET0NVTUVOVEVEIChpbiBPcGVuVHlwZSAxLjUpOiAgICAgICAgICAgICAgKi8KKyAgLyogQmFzZVJlY29yZCB0YWJsZXMgY2FuIGNvbnRhaW4gTlVMTCBwb2ludGVycy4gKi8KKworICAvKiBzZXRzIG90dmFsaWQtPmV4dHJhMiAoMSkgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfTWFya0Jhc2VQb3NfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgUG9zRm9ybWF0OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIk1hcmtCYXNlUG9zIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgUG9zRm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFBvc0Zvcm1hdCApKTsKKworICAgIHN3aXRjaCAoIFBvc0Zvcm1hdCApCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIG90dmFsaWQtPmV4dHJhMiA9IDE7CisgICAgICBPVFZfTkVTVDIoIE1hcmtCYXNlUG9zRm9ybWF0MSwgQmFzZUFycmF5ICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdQT1MgTE9PS1VQIFRZUEUgNSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmEyICgxKSAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9NYXJrTGlnUG9zX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgUG9zRm9ybWF0OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIk1hcmtMaWdQb3MiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBQb3NGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgUG9zRm9ybWF0ICkpOworCisgICAgc3dpdGNoICggUG9zRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgb3R2YWxpZC0+ZXh0cmEyID0gMTsKKyAgICAgIE9UVl9ORVNUMyggTWFya0xpZ1Bvc0Zvcm1hdDEsIExpZ2F0dXJlQXJyYXksIExpZ2F0dXJlQXR0YWNoICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdQT1MgTE9PS1VQIFRZUEUgNiAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmEyICgwKSAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9NYXJrTWFya1Bvc192YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBQb3NGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiTWFya01hcmtQb3MiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBQb3NGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgUG9zRm9ybWF0ICkpOworCisgICAgc3dpdGNoICggUG9zRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgb3R2YWxpZC0+ZXh0cmEyID0gMDsKKyAgICAgIE9UVl9ORVNUMiggTWFya01hcmtQb3NGb3JtYXQxLCBNYXJrMkFycmF5ICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdQT1MgTE9PS1VQIFRZUEUgNyAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChsb29rdXAgY291bnQpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0NvbnRleHRQb3NfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBQb3NGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiQ29udGV4dFBvcyIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIFBvc0Zvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBQb3NGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBQb3NGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIGdseXBoIGluZGljZXMvY2xhc3NlcyB1c2VkIGFzIGlucHV0IGZvciB0aGVzZSAqLworICAgICAgLyogY29udGV4dCBydWxlcyBzaW5jZSBldmVuIGludmFsaWQgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHJldHVybiAgKi8KKyAgICAgIC8qIG1lYW5pbmdmdWwgcmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIG90dmFsaWQtPmV4dHJhMSA9IG90dmFsaWQtPmxvb2t1cF9jb3VudDsKKyAgICAgIE9UVl9ORVNUMyggQ29udGV4dFBvc0Zvcm1hdDEsIFBvc1J1bGVTZXQsIFBvc1J1bGUgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlLCBvdHZhbGlkICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHVzZWQgYXMgaW5wdXQgZm9yIHRoZXNlICovCisgICAgICAvKiBjb250ZXh0IHJ1bGVzIHNpbmNlIGV2ZW4gaW52YWxpZCBnbHlwaCBpbmRpY2VzL2NsYXNzZXMgcmV0dXJuICAqLworICAgICAgLyogbWVhbmluZ2Z1bCByZXN1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgT1RWX05FU1QzKCBDb250ZXh0UG9zRm9ybWF0MiwgUG9zQ2xhc3NTZXQsIFBvc0NsYXNzUnVsZSApOworICAgICAgT1RWX1JVTiggdGFibGUsIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgT1RWX05FU1QxKCBDb250ZXh0UG9zRm9ybWF0MyApOworICAgICAgT1RWX1JVTiggdGFibGUsIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICBHUE9TIExPT0tVUCBUWVBFIDggICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBzZXRzIG90dmFsaWQtPmV4dHJhMSAobG9va3VwIGNvdW50KSAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9DaGFpbkNvbnRleHRQb3NfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIFBvc0Zvcm1hdDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJDaGFpbkNvbnRleHRQb3MiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBQb3NGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgUG9zRm9ybWF0ICkpOworCisgICAgc3dpdGNoICggUG9zRm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgLyogbm8gbmVlZCB0byBjaGVjayBnbHlwaCBpbmRpY2VzL2NsYXNzZXMgdXNlZCBhcyBpbnB1dCBmb3IgdGhlc2UgKi8KKyAgICAgIC8qIGNvbnRleHQgcnVsZXMgc2luY2UgZXZlbiBpbnZhbGlkIGdseXBoIGluZGljZXMvY2xhc3NlcyByZXR1cm4gICovCisgICAgICAvKiBtZWFuaW5nZnVsIHJlc3VsdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBvdHZhbGlkLT5leHRyYTEgPSBvdHZhbGlkLT5sb29rdXBfY291bnQ7CisgICAgICBPVFZfTkVTVDMoIENoYWluQ29udGV4dFBvc0Zvcm1hdDEsCisgICAgICAgICAgICAgICAgIENoYWluUG9zUnVsZVNldCwgQ2hhaW5Qb3NSdWxlICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIGdseXBoIGluZGljZXMvY2xhc3NlcyB1c2VkIGFzIGlucHV0IGZvciB0aGVzZSAqLworICAgICAgLyogY29udGV4dCBydWxlcyBzaW5jZSBldmVuIGludmFsaWQgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHJldHVybiAgKi8KKyAgICAgIC8qIG1lYW5pbmdmdWwgcmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIE9UVl9ORVNUMyggQ2hhaW5Db250ZXh0UG9zRm9ybWF0MiwKKyAgICAgICAgICAgICAgICAgQ2hhaW5Qb3NDbGFzc1NldCwgQ2hhaW5Qb3NDbGFzc1J1bGUgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlLCBvdHZhbGlkICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMzoKKyAgICAgIE9UVl9ORVNUMSggQ2hhaW5Db250ZXh0UG9zRm9ybWF0MyApOworICAgICAgT1RWX1JVTiggdGFibGUsIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICBHUE9TIExPT0tVUCBUWVBFIDkgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB1c2VzIG90dmFsaWQtPnR5cGVfZnVuY3MgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfRXh0ZW5zaW9uUG9zX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBQb3NGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiRXh0ZW5zaW9uUG9zIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgUG9zRm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFBvc0Zvcm1hdCApKTsKKworICAgIHN3aXRjaCAoIFBvc0Zvcm1hdCApCisgICAgeworICAgIGNhc2UgMTogICAgIC8qIEV4dGVuc2lvblBvc0Zvcm1hdDEgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgICAgICAgICAgIEV4dGVuc2lvbkxvb2t1cFR5cGU7CisgICAgICAgIEZUX1VMb25nICAgICAgICAgICBFeHRlbnNpb25PZmZzZXQ7CisgICAgICAgIE9UVl9WYWxpZGF0ZV9GdW5jICB2YWxpZGF0ZTsKKworCisgICAgICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworICAgICAgICBFeHRlbnNpb25Mb29rdXBUeXBlID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgRXh0ZW5zaW9uT2Zmc2V0ICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICBpZiAoIEV4dGVuc2lvbkxvb2t1cFR5cGUgPT0gMCB8fCBFeHRlbnNpb25Mb29rdXBUeXBlID49IDkgKQorICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICB2YWxpZGF0ZSA9IG90dmFsaWQtPnR5cGVfZnVuY3NbRXh0ZW5zaW9uTG9va3VwVHlwZSAtIDFdOworICAgICAgICB2YWxpZGF0ZSggdGFibGUgKyBFeHRlbnNpb25PZmZzZXQsIG90dmFsaWQgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgY29uc3QgT1RWX1ZhbGlkYXRlX0Z1bmMgIG90dl9ncG9zX3ZhbGlkYXRlX2Z1bmNzWzldID0KKyAgeworICAgIG90dl9TaW5nbGVQb3NfdmFsaWRhdGUsCisgICAgb3R2X1BhaXJQb3NfdmFsaWRhdGUsCisgICAgb3R2X0N1cnNpdmVQb3NfdmFsaWRhdGUsCisgICAgb3R2X01hcmtCYXNlUG9zX3ZhbGlkYXRlLAorICAgIG90dl9NYXJrTGlnUG9zX3ZhbGlkYXRlLAorICAgIG90dl9NYXJrTWFya1Bvc192YWxpZGF0ZSwKKyAgICBvdHZfQ29udGV4dFBvc192YWxpZGF0ZSwKKyAgICBvdHZfQ2hhaW5Db250ZXh0UG9zX3ZhbGlkYXRlLAorICAgIG90dl9FeHRlbnNpb25Qb3NfdmFsaWRhdGUKKyAgfTsKKworCisgIC8qIHNldHMgb3R2YWxpZC0+dHlwZV9jb3VudCAqLworICAvKiBzZXRzIG90dmFsaWQtPnR5cGVfZnVuY3MgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfR1BPU19zdWJ0YWJsZV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIG90dmFsaWQtPnR5cGVfY291bnQgPSA5OworICAgIG90dmFsaWQtPnR5cGVfZnVuY3MgPSAoT1RWX1ZhbGlkYXRlX0Z1bmMqKW90dl9ncG9zX3ZhbGlkYXRlX2Z1bmNzOworCisgICAgb3R2X0xvb2t1cF92YWxpZGF0ZSggdGFibGUsIG90dmFsaWQgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBHUE9TIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogc2V0cyBvdHZhbGlkLT5nbHlwaF9jb3VudCAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9HUE9TX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBPVFZfVmFsaWRhdG9yUmVjICB2YWxpZHJlYzsKKyAgICBPVFZfVmFsaWRhdG9yICAgICBvdHZhbGlkID0gJnZhbGlkcmVjOworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgU2NyaXB0TGlzdCwgRmVhdHVyZUxpc3QsIExvb2t1cExpc3Q7CisKKworICAgIG90dmFsaWQtPnJvb3QgPSBmdHZhbGlkOworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgR1BPUyB0YWJsZVxuIiApKTsKKyAgICBPVFZfSU5JVDsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMTAgKTsKKworICAgIGlmICggRlRfTkVYVF9VTE9ORyggcCApICE9IDB4MTAwMDBVTCApICAgICAgLyogVmVyc2lvbiAqLworICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisKKyAgICBTY3JpcHRMaXN0ICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgRmVhdHVyZUxpc3QgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIExvb2t1cExpc3QgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIG90dmFsaWQtPnR5cGVfY291bnQgID0gOTsKKyAgICBvdHZhbGlkLT50eXBlX2Z1bmNzICA9IChPVFZfVmFsaWRhdGVfRnVuYyopb3R2X2dwb3NfdmFsaWRhdGVfZnVuY3M7CisgICAgb3R2YWxpZC0+Z2x5cGhfY291bnQgPSBnbHlwaF9jb3VudDsKKworICAgIG90dl9Mb29rdXBMaXN0X3ZhbGlkYXRlKCB0YWJsZSArIExvb2t1cExpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKKyAgICBvdHZfRmVhdHVyZUxpc3RfdmFsaWRhdGUoIHRhYmxlICsgRmVhdHVyZUxpc3QsIHRhYmxlICsgTG9va3VwTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKKyAgICBvdHZfU2NyaXB0TGlzdF92YWxpZGF0ZSggdGFibGUgKyBTY3JpcHRMaXN0LCB0YWJsZSArIEZlYXR1cmVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHZhbGlkICk7CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2Z3Bvcy5oIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmdwb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzkyYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmdwb3MuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBvdHZncG9zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT3BlblR5cGUgR1BPUyB0YWJsZSB2YWxpZGF0b3IgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19PVFZHUE9TX0hfXworI2RlZmluZSBfX09UVkdQT1NfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggdm9pZCApCisgIG90dl9HUE9TX3N1YnRhYmxlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIHZhbGlkICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19PVFZHUE9TX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmdzdWIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZnc3ViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4YjAyYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZnc3ViLmMKQEAgLTAsMCArMSw1ODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmdzdWIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBHU1VCIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgIm90dmFsaWQuaCIKKyNpbmNsdWRlICJvdHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2Z3N1YgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgR1NVQiBMT09LVVAgVFlQRSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogdXNlcyBvdHZhbGlkLT5nbHlwaF9jb3VudCAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9TaW5nbGVTdWJzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBTdWJzdEZvcm1hdDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJTaW5nbGVTdWJzdCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIFN1YnN0Rm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFN1YnN0Rm9ybWF0ICkpOworCisgICAgc3dpdGNoICggU3Vic3RGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6ICAgICAvKiBTaW5nbGVTdWJzdEZvcm1hdDEgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZXMgIENvdmVyYWdlOworICAgICAgICBGVF9JbnQgICAgRGVsdGFHbHlwaElEOworICAgICAgICBGVF9Mb25nICAgaWR4OworCisKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgICAgIENvdmVyYWdlICAgICA9IHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgRGVsdGFHbHlwaElEID0gRlRfTkVYVF9TSE9SVCggcCApOworCisgICAgICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggQ292ZXJhZ2UsIG90dmFsaWQsIC0xICk7CisKKyAgICAgICAgaWR4ID0gKEZUX0xvbmcpb3R2X0NvdmVyYWdlX2dldF9maXJzdCggQ292ZXJhZ2UgKSArIERlbHRhR2x5cGhJRDsKKyAgICAgICAgaWYgKCBpZHggPCAwICkKKyAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgaWR4ID0gKEZUX0xvbmcpb3R2X0NvdmVyYWdlX2dldF9sYXN0KCBDb3ZlcmFnZSApICsgRGVsdGFHbHlwaElEOworICAgICAgICBpZiAoIChGVF9VSW50KWlkeCA+PSBvdHZhbGlkLT5nbHlwaF9jb3VudCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6ICAgICAvKiBTaW5nbGVTdWJzdEZvcm1hdDIgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgQ292ZXJhZ2UsIEdseXBoQ291bnQ7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKyAgICAgICAgQ292ZXJhZ2UgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIEdseXBoQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICAgIE9UVl9UUkFDRSgoICIgKEdseXBoQ291bnQgPSAlZClcbiIsIEdseXBoQ291bnQgKSk7CisKKyAgICAgICAgb3R2X0NvdmVyYWdlX3ZhbGlkYXRlKCB0YWJsZSArIENvdmVyYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludClHbHlwaENvdW50ICk7CisKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCBHbHlwaENvdW50ICogMiApOworCisgICAgICAgIC8qIFN1YnN0aXR1dGUgKi8KKyAgICAgICAgZm9yICggOyBHbHlwaENvdW50ID4gMDsgR2x5cGhDb3VudC0tICkKKyAgICAgICAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgPj0gb3R2YWxpZC0+Z2x5cGhfY291bnQgKQorICAgICAgICAgICAgRlRfSU5WQUxJRF9HTFlQSF9JRDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICBHU1VCIExPT0tVUCBUWVBFIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBzZXRzIG90dmFsaWQtPmV4dHJhMSAoZ2x5cGggY291bnQpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X011bHRpcGxlU3Vic3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBTdWJzdEZvcm1hdDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJNdWx0aXBsZVN1YnN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgU3Vic3RGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgU3Vic3RGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBTdWJzdEZvcm1hdCApCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIG90dmFsaWQtPmV4dHJhMSA9IG90dmFsaWQtPmdseXBoX2NvdW50OworICAgICAgT1RWX05FU1QyKCBNdWx0aXBsZVN1YnN0Rm9ybWF0MSwgU2VxdWVuY2UgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlLCBvdHZhbGlkICk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBHU1VCIExPT0tVUCBUWVBFIDMgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogc2V0cyBvdHZhbGlkLT5leHRyYTEgKGdseXBoIGNvdW50KSAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9BbHRlcm5hdGVTdWJzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBTdWJzdEZvcm1hdDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJBbHRlcm5hdGVTdWJzdCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIFN1YnN0Rm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFN1YnN0Rm9ybWF0ICkpOworCisgICAgc3dpdGNoICggU3Vic3RGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICBvdHZhbGlkLT5leHRyYTEgPSBvdHZhbGlkLT5nbHlwaF9jb3VudDsKKyAgICAgIE9UVl9ORVNUMiggQWx0ZXJuYXRlU3Vic3RGb3JtYXQxLCBBbHRlcm5hdGVTZXQgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlLCBvdHZhbGlkICk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBHU1VCIExPT0tVUCBUWVBFIDQgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTGlnYXR1cmVGdW5jICBvdHZfTGlnYXR1cmVfdmFsaWRhdGUKKworICAvKiB1c2VzIG90dmFsaWQtPmdseXBoX2NvdW50ICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0xpZ2F0dXJlX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIExpZ2F0dXJlR2x5cGgsIENvbXBDb3VudDsKKworCisgICAgT1RWX0VOVEVSOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisgICAgTGlnYXR1cmVHbHlwaCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgaWYgKCBMaWdhdHVyZUdseXBoID49IG90dmFsaWQtPmdseXBoX2NvdW50ICkKKyAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgIENvbXBDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChDb21wQ291bnQgPSAlZClcbiIsIENvbXBDb3VudCApKTsKKworICAgIGlmICggQ29tcENvdW50ID09IDAgKQorICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgQ29tcENvdW50LS07CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIENvbXBDb3VudCAqIDIgKTsgICAgIC8qIENvbXBvbmVudCAqLworCisgICAgLyogbm8gbmVlZCB0byBjaGVjayB0aGUgQ29tcG9uZW50IGdseXBoIGluZGljZXMgKi8KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfTGlnYXR1cmVTdWJzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIFN1YnN0Rm9ybWF0OworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggIkxpZ2F0dXJlU3Vic3QiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBTdWJzdEZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBTdWJzdEZvcm1hdCApKTsKKworICAgIHN3aXRjaCAoIFN1YnN0Rm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgT1RWX05FU1QzKCBMaWdhdHVyZVN1YnN0Rm9ybWF0MSwgTGlnYXR1cmVTZXQsIExpZ2F0dXJlICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgIEdTVUIgTE9PS1VQIFRZUEUgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChsb29rdXAgY291bnQpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0NvbnRleHRTdWJzdF92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgU3Vic3RGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiQ29udGV4dFN1YnN0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CisgICAgU3Vic3RGb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgU3Vic3RGb3JtYXQgKSk7CisKKyAgICBzd2l0Y2ggKCBTdWJzdEZvcm1hdCApCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHVzZWQgYXMgaW5wdXQgZm9yIHRoZXNlICovCisgICAgICAvKiBjb250ZXh0IHJ1bGVzIHNpbmNlIGV2ZW4gaW52YWxpZCBnbHlwaCBpbmRpY2VzL2NsYXNzZXMgcmV0dXJuICAqLworICAgICAgLyogbWVhbmluZ2Z1bCByZXN1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgb3R2YWxpZC0+ZXh0cmExID0gb3R2YWxpZC0+bG9va3VwX2NvdW50OworICAgICAgT1RWX05FU1QzKCBDb250ZXh0U3Vic3RGb3JtYXQxLCBTdWJSdWxlU2V0LCBTdWJSdWxlICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIGdseXBoIGluZGljZXMvY2xhc3NlcyB1c2VkIGFzIGlucHV0IGZvciB0aGVzZSAqLworICAgICAgLyogY29udGV4dCBydWxlcyBzaW5jZSBldmVuIGludmFsaWQgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHJldHVybiAgKi8KKyAgICAgIC8qIG1lYW5pbmdmdWwgcmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIE9UVl9ORVNUMyggQ29udGV4dFN1YnN0Rm9ybWF0MiwgU3ViQ2xhc3NTZXQsIFN1YkNsYXNzUnVsZSApOworICAgICAgT1RWX1JVTiggdGFibGUsIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgT1RWX05FU1QxKCBDb250ZXh0U3Vic3RGb3JtYXQzICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgR1NVQiBMT09LVVAgVFlQRSA2ICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChsb29rdXAgY291bnQpICAgICAgICAgICAgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfQ2hhaW5Db250ZXh0U3Vic3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgU3Vic3RGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiQ2hhaW5Db250ZXh0U3Vic3QiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBTdWJzdEZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBTdWJzdEZvcm1hdCApKTsKKworICAgIHN3aXRjaCAoIFN1YnN0Rm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgLyogbm8gbmVlZCB0byBjaGVjayBnbHlwaCBpbmRpY2VzL2NsYXNzZXMgdXNlZCBhcyBpbnB1dCBmb3IgdGhlc2UgKi8KKyAgICAgIC8qIGNvbnRleHQgcnVsZXMgc2luY2UgZXZlbiBpbnZhbGlkIGdseXBoIGluZGljZXMvY2xhc3NlcyByZXR1cm4gICovCisgICAgICAvKiBtZWFuaW5nZnVsIHJlc3VsdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBvdHZhbGlkLT5leHRyYTEgPSBvdHZhbGlkLT5sb29rdXBfY291bnQ7CisgICAgICBPVFZfTkVTVDMoIENoYWluQ29udGV4dFN1YnN0Rm9ybWF0MSwKKyAgICAgICAgICAgICAgICAgQ2hhaW5TdWJSdWxlU2V0LCBDaGFpblN1YlJ1bGUgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlLCBvdHZhbGlkICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sgZ2x5cGggaW5kaWNlcy9jbGFzc2VzIHVzZWQgYXMgaW5wdXQgZm9yIHRoZXNlICovCisgICAgICAvKiBjb250ZXh0IHJ1bGVzIHNpbmNlIGV2ZW4gaW52YWxpZCBnbHlwaCBpbmRpY2VzL2NsYXNzZXMgcmV0dXJuICAqLworICAgICAgLyogbWVhbmluZ2Z1bCByZXN1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgT1RWX05FU1QzKCBDaGFpbkNvbnRleHRTdWJzdEZvcm1hdDIsCisgICAgICAgICAgICAgICAgIENoYWluU3ViQ2xhc3NTZXQsIENoYWluU3ViQ2xhc3NSdWxlICk7CisgICAgICBPVFZfUlVOKCB0YWJsZSwgb3R2YWxpZCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICBPVFZfTkVTVDEoIENoYWluQ29udGV4dFN1YnN0Rm9ybWF0MyApOworICAgICAgT1RWX1JVTiggdGFibGUsIG90dmFsaWQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIEdTVUIgTE9PS1VQIFRZUEUgNyAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB1c2VzIG90dmFsaWQtPnR5cGVfZnVuY3MgKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfRXh0ZW5zaW9uU3Vic3RfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgU3Vic3RGb3JtYXQ7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiRXh0ZW5zaW9uU3Vic3QiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKyAgICBTdWJzdEZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfVFJBQ0UoKCAiIChmb3JtYXQgJWQpXG4iLCBTdWJzdEZvcm1hdCApKTsKKworICAgIHN3aXRjaCAoIFN1YnN0Rm9ybWF0ICkKKyAgICB7CisgICAgY2FzZSAxOiAgICAgLyogRXh0ZW5zaW9uU3Vic3RGb3JtYXQxICovCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgICAgICAgICAgICBFeHRlbnNpb25Mb29rdXBUeXBlOworICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgRXh0ZW5zaW9uT2Zmc2V0OworICAgICAgICBPVFZfVmFsaWRhdGVfRnVuYyAgdmFsaWRhdGU7CisKKworICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICAgICAgRXh0ZW5zaW9uTG9va3VwVHlwZSA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgIEV4dGVuc2lvbk9mZnNldCAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgICAgaWYgKCBFeHRlbnNpb25Mb29rdXBUeXBlID09IDAgfHwKKyAgICAgICAgICAgICBFeHRlbnNpb25Mb29rdXBUeXBlID09IDcgfHwKKyAgICAgICAgICAgICBFeHRlbnNpb25Mb29rdXBUeXBlID4gOCAgKQorICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICB2YWxpZGF0ZSA9IG90dmFsaWQtPnR5cGVfZnVuY3NbRXh0ZW5zaW9uTG9va3VwVHlwZSAtIDFdOworICAgICAgICB2YWxpZGF0ZSggdGFibGUgKyBFeHRlbnNpb25PZmZzZXQsIG90dmFsaWQgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIEdTVUIgTE9PS1VQIFRZUEUgOCAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB1c2VzIG90dmFsaWQtPmdseXBoX2NvdW50ICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X1JldmVyc2VDaGFpblNpbmdsZVN1YnN0X3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGUsIENvdmVyYWdlOworICAgIEZUX1VJbnQgICBTdWJzdEZvcm1hdDsKKyAgICBGVF9VSW50ICAgQmFja3RyYWNrR2x5cGhDb3VudCwgTG9va2FoZWFkR2x5cGhDb3VudCwgR2x5cGhDb3VudDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJSZXZlcnNlQ2hhaW5TaW5nbGVTdWJzdCIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIFN1YnN0Rm9ybWF0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKGZvcm1hdCAlZClcbiIsIFN1YnN0Rm9ybWF0ICkpOworCisgICAgc3dpdGNoICggU3Vic3RGb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6ICAgICAvKiBSZXZlcnNlQ2hhaW5TaW5nbGVTdWJzdEZvcm1hdDEgKi8KKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworICAgICAgQ292ZXJhZ2UgICAgICAgICAgICA9IHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIEJhY2t0cmFja0dseXBoQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBPVFZfVFJBQ0UoKCAiIChCYWNrdHJhY2tHbHlwaENvdW50ID0gJWQpXG4iLCBCYWNrdHJhY2tHbHlwaENvdW50ICkpOworCisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIENvdmVyYWdlLCBvdHZhbGlkLCAtMSApOworCisgICAgICBPVFZfTElNSVRfQ0hFQ0soIEJhY2t0cmFja0dseXBoQ291bnQgKiAyICsgMiApOworCisgICAgICBmb3IgKCA7IEJhY2t0cmFja0dseXBoQ291bnQgPiAwOyBCYWNrdHJhY2tHbHlwaENvdW50LS0gKQorICAgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VU0hPUlQoIHAgKSwgb3R2YWxpZCwgLTEgKTsKKworICAgICAgTG9va2FoZWFkR2x5cGhDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgIE9UVl9UUkFDRSgoICIgKExvb2thaGVhZEdseXBoQ291bnQgPSAlZClcbiIsIExvb2thaGVhZEdseXBoQ291bnQgKSk7CisKKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggTG9va2FoZWFkR2x5cGhDb3VudCAqIDIgKyAyICk7CisKKyAgICAgIGZvciAoIDsgTG9va2FoZWFkR2x5cGhDb3VudCA+IDA7IExvb2thaGVhZEdseXBoQ291bnQtLSApCisgICAgICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkLCAtMSApOworCisgICAgICBHbHlwaENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgT1RWX1RSQUNFKCggIiAoR2x5cGhDb3VudCA9ICVkKVxuIiwgR2x5cGhDb3VudCApKTsKKworICAgICAgaWYgKCBHbHlwaENvdW50ICE9IG90dl9Db3ZlcmFnZV9nZXRfY291bnQoIENvdmVyYWdlICkgKQorICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggR2x5cGhDb3VudCAqIDIgKTsKKworICAgICAgLyogU3Vic3RpdHV0ZSAqLworICAgICAgZm9yICggOyBHbHlwaENvdW50ID4gMDsgR2x5cGhDb3VudC0tICkKKyAgICAgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApID49IG90dmFsaWQtPmdseXBoX2NvdW50ICkKKyAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICBzdGF0aWMgY29uc3QgT1RWX1ZhbGlkYXRlX0Z1bmMgIG90dl9nc3ViX3ZhbGlkYXRlX2Z1bmNzWzhdID0KKyAgeworICAgIG90dl9TaW5nbGVTdWJzdF92YWxpZGF0ZSwKKyAgICBvdHZfTXVsdGlwbGVTdWJzdF92YWxpZGF0ZSwKKyAgICBvdHZfQWx0ZXJuYXRlU3Vic3RfdmFsaWRhdGUsCisgICAgb3R2X0xpZ2F0dXJlU3Vic3RfdmFsaWRhdGUsCisgICAgb3R2X0NvbnRleHRTdWJzdF92YWxpZGF0ZSwKKyAgICBvdHZfQ2hhaW5Db250ZXh0U3Vic3RfdmFsaWRhdGUsCisgICAgb3R2X0V4dGVuc2lvblN1YnN0X3ZhbGlkYXRlLAorICAgIG90dl9SZXZlcnNlQ2hhaW5TaW5nbGVTdWJzdF92YWxpZGF0ZQorICB9OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBHU1VCIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogc2V0cyBvdHZhbGlkLT50eXBlX2NvdW50ICAqLworICAvKiBzZXRzIG90dmFsaWQtPnR5cGVfZnVuY3MgICovCisgIC8qIHNldHMgb3R2YWxpZC0+Z2x5cGhfY291bnQgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBvdHZfR1NVQl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIGZ0dmFsaWQgKQorICB7CisgICAgT1RWX1ZhbGlkYXRvclJlYyAgb3R2YWxpZHJlYzsKKyAgICBPVFZfVmFsaWRhdG9yICAgICBvdHZhbGlkID0gJm90dmFsaWRyZWM7CisgICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgICA9IHRhYmxlOworICAgIEZUX1VJbnQgICAgICAgICAgIFNjcmlwdExpc3QsIEZlYXR1cmVMaXN0LCBMb29rdXBMaXN0OworCisKKyAgICBvdHZhbGlkLT5yb290ID0gZnR2YWxpZDsKKworICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIEdTVUIgdGFibGVcbiIgKSk7CisgICAgT1RWX0lOSVQ7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDEwICk7CisKKyAgICBpZiAoIEZUX05FWFRfVUxPTkcoIHAgKSAhPSAweDEwMDAwVUwgKSAgICAgIC8qIFZlcnNpb24gKi8KKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgU2NyaXB0TGlzdCAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIEZlYXR1cmVMaXN0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBMb29rdXBMaXN0ICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBvdHZhbGlkLT50eXBlX2NvdW50ICA9IDg7CisgICAgb3R2YWxpZC0+dHlwZV9mdW5jcyAgPSAoT1RWX1ZhbGlkYXRlX0Z1bmMqKW90dl9nc3ViX3ZhbGlkYXRlX2Z1bmNzOworICAgIG90dmFsaWQtPmdseXBoX2NvdW50ID0gZ2x5cGhfY291bnQ7CisKKyAgICBvdHZfTG9va3VwTGlzdF92YWxpZGF0ZSggdGFibGUgKyBMb29rdXBMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHZhbGlkICk7CisgICAgb3R2X0ZlYXR1cmVMaXN0X3ZhbGlkYXRlKCB0YWJsZSArIEZlYXR1cmVMaXN0LCB0YWJsZSArIExvb2t1cExpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHZhbGlkICk7CisgICAgb3R2X1NjcmlwdExpc3RfdmFsaWRhdGUoIHRhYmxlICsgU2NyaXB0TGlzdCwgdGFibGUgKyBGZWF0dXJlTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3R2YWxpZCApOworCisgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dmpzdGYuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZqc3RmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2OGE2MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZqc3RmLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIG90dmpzdGYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPcGVuVHlwZSBKU1RGIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgIm90dmFsaWQuaCIKKyNpbmNsdWRlICJvdHZjb21tbi5oIgorI2luY2x1ZGUgIm90dmdwb3MuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX290dmpzdGYKKworCisjZGVmaW5lIEpzdGZQcmlvcml0eUZ1bmMgIG90dl9Kc3RmUHJpb3JpdHlfdmFsaWRhdGUKKyNkZWZpbmUgSnN0Zkxvb2t1cEZ1bmMgICAgb3R2X0dQT1Nfc3VidGFibGVfdmFsaWRhdGUKKworICAvKiB1c2VzIG90dmFsaWQtPmV4dHJhMSAoR1NVQiBsb29rdXAgY291bnQpICovCisgIC8qIHVzZXMgb3R2YWxpZC0+ZXh0cmEyIChHUE9TIGxvb2t1cCBjb3VudCkgKi8KKyAgLyogc2V0cyBvdHZhbGlkLT5leHRyYTEgKGNvdW50ZXIpICAgICAgICAgICAqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9Kc3RmUHJpb3JpdHlfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIHRhYmxlX3NpemU7CisgICAgRlRfVUludCAgIGdzdWJfbG9va3VwX2NvdW50LCBncG9zX2xvb2t1cF9jb3VudDsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggU2hyaW5rYWdlRW5hYmxlR1NVQiAgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIFNocmlua2FnZURpc2FibGVHU1VCICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBTaHJpbmthZ2VFbmFibGVHUE9TICApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggU2hyaW5rYWdlRGlzYWJsZUdQT1MgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEV4dGVuc2lvbkVuYWJsZUdTVUIgICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBFeHRlbnNpb25EaXNhYmxlR1NVQiApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggRXh0ZW5zaW9uRW5hYmxlR1BPUyAgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEV4dGVuc2lvbkRpc2FibGVHUE9TICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBTaHJpbmthZ2VKc3RmTWF4ICk7CisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBFeHRlbnNpb25Kc3RmTWF4ICk7CisKKworICAgIE9UVl9FTlRFUjsKKyAgICBPVFZfVFJBQ0UoKCAiSnN0ZlByaW9yaXR5IHRhYmxlXG4iICkpOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyMCApOworCisgICAgZ3N1Yl9sb29rdXBfY291bnQgPSBvdHZhbGlkLT5leHRyYTE7CisgICAgZ3Bvc19sb29rdXBfY291bnQgPSBvdHZhbGlkLT5leHRyYTI7CisKKyAgICB0YWJsZV9zaXplID0gMjA7CisKKyAgICBvdHZhbGlkLT5leHRyYTEgPSBnc3ViX2xvb2t1cF9jb3VudDsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIFNocmlua2FnZUVuYWJsZUdTVUIgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggU2hyaW5rYWdlRW5hYmxlR1NVQiApOworICAgIGlmICggU2hyaW5rYWdlRW5hYmxlR1NVQiApCisgICAgICBvdHZfeF91eCggdGFibGUgKyBTaHJpbmthZ2VFbmFibGVHU1VCLCBvdHZhbGlkICk7CisKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBTaHJpbmthZ2VEaXNhYmxlR1NVQiApOworICAgIE9UVl9TSVpFX0NIRUNLKCBTaHJpbmthZ2VEaXNhYmxlR1NVQiApOworICAgIGlmICggU2hyaW5rYWdlRGlzYWJsZUdTVUIgKQorICAgICAgb3R2X3hfdXgoIHRhYmxlICsgU2hyaW5rYWdlRGlzYWJsZUdTVUIsIG90dmFsaWQgKTsKKworICAgIG90dmFsaWQtPmV4dHJhMSA9IGdwb3NfbG9va3VwX2NvdW50OworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggU2hyaW5rYWdlRW5hYmxlR1BPUyApOworICAgIE9UVl9TSVpFX0NIRUNLKCBTaHJpbmthZ2VFbmFibGVHUE9TICk7CisgICAgaWYgKCBTaHJpbmthZ2VFbmFibGVHUE9TICkKKyAgICAgIG90dl94X3V4KCB0YWJsZSArIFNocmlua2FnZUVuYWJsZUdQT1MsIG90dmFsaWQgKTsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIFNocmlua2FnZURpc2FibGVHUE9TICk7CisgICAgT1RWX1NJWkVfQ0hFQ0soIFNocmlua2FnZURpc2FibGVHUE9TICk7CisgICAgaWYgKCBTaHJpbmthZ2VEaXNhYmxlR1BPUyApCisgICAgICBvdHZfeF91eCggdGFibGUgKyBTaHJpbmthZ2VEaXNhYmxlR1BPUywgb3R2YWxpZCApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggU2hyaW5rYWdlSnN0Zk1heCApOworICAgIE9UVl9TSVpFX0NIRUNLKCBTaHJpbmthZ2VKc3RmTWF4ICk7CisgICAgaWYgKCBTaHJpbmthZ2VKc3RmTWF4ICkKKyAgICB7CisgICAgICAvKiBYWFg6IGNoZWNrIGxvb2t1cCB0eXBlcz8gKi8KKyAgICAgIE9UVl9ORVNUMiggSnN0Zk1heCwgSnN0Zkxvb2t1cCApOworICAgICAgT1RWX1JVTiggdGFibGUgKyBTaHJpbmthZ2VKc3RmTWF4LCBvdHZhbGlkICk7CisgICAgfQorCisgICAgb3R2YWxpZC0+ZXh0cmExID0gZ3N1Yl9sb29rdXBfY291bnQ7CisKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBFeHRlbnNpb25FbmFibGVHU1VCICk7CisgICAgT1RWX1NJWkVfQ0hFQ0soIEV4dGVuc2lvbkVuYWJsZUdTVUIgKTsKKyAgICBpZiAoIEV4dGVuc2lvbkVuYWJsZUdTVUIgKQorICAgICAgb3R2X3hfdXgoIHRhYmxlICsgRXh0ZW5zaW9uRW5hYmxlR1NVQiwgb3R2YWxpZCApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggRXh0ZW5zaW9uRGlzYWJsZUdTVUIgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggRXh0ZW5zaW9uRGlzYWJsZUdTVUIgKTsKKyAgICBpZiAoIEV4dGVuc2lvbkRpc2FibGVHU1VCICkKKyAgICAgIG90dl94X3V4KCB0YWJsZSArIEV4dGVuc2lvbkRpc2FibGVHU1VCLCBvdHZhbGlkICk7CisKKyAgICBvdHZhbGlkLT5leHRyYTEgPSBncG9zX2xvb2t1cF9jb3VudDsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEV4dGVuc2lvbkVuYWJsZUdQT1MgKTsKKyAgICBPVFZfU0laRV9DSEVDSyggRXh0ZW5zaW9uRW5hYmxlR1BPUyApOworICAgIGlmICggRXh0ZW5zaW9uRW5hYmxlR1BPUyApCisgICAgICBvdHZfeF91eCggdGFibGUgKyBFeHRlbnNpb25FbmFibGVHUE9TLCBvdHZhbGlkICk7CisKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBFeHRlbnNpb25EaXNhYmxlR1BPUyApOworICAgIE9UVl9TSVpFX0NIRUNLKCBFeHRlbnNpb25EaXNhYmxlR1BPUyApOworICAgIGlmICggRXh0ZW5zaW9uRGlzYWJsZUdQT1MgKQorICAgICAgb3R2X3hfdXgoIHRhYmxlICsgRXh0ZW5zaW9uRGlzYWJsZUdQT1MsIG90dmFsaWQgKTsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEV4dGVuc2lvbkpzdGZNYXggKTsKKyAgICBPVFZfU0laRV9DSEVDSyggRXh0ZW5zaW9uSnN0Zk1heCApOworICAgIGlmICggRXh0ZW5zaW9uSnN0Zk1heCApCisgICAgeworICAgICAgLyogWFhYOiBjaGVjayBsb29rdXAgdHlwZXM/ICovCisgICAgICBPVFZfTkVTVDIoIEpzdGZNYXgsIEpzdGZMb29rdXAgKTsKKyAgICAgIE9UVl9SVU4oIHRhYmxlICsgRXh0ZW5zaW9uSnN0Zk1heCwgb3R2YWxpZCApOworICAgIH0KKworICAgIG90dmFsaWQtPmV4dHJhMSA9IGdzdWJfbG9va3VwX2NvdW50OworICAgIG90dmFsaWQtPmV4dHJhMiA9IGdwb3NfbG9va3VwX2NvdW50OworCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmEgKGdseXBoIGNvdW50KSAgICAgICAgICAgICAgICovCisgIC8qIHNldHMgb3R2YWxpZC0+ZnVuYzEgKG90dl9Kc3RmUHJpb3JpdHlfdmFsaWRhdGUpICovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X0pzdGZTY3JpcHRfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICB0YWJsZV9zaXplOworICAgIEZUX1VJbnQgICBKc3RmTGFuZ1N5c0NvdW50OworCisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBFeHRHbHlwaCApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggRGVmSnN0ZkxhbmdTeXMgKTsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJKc3RmU2NyaXB0IiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA2ICk7CisgICAgT1RWX09QVElPTkFMX09GRlNFVCggRXh0R2x5cGggKTsKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBEZWZKc3RmTGFuZ1N5cyApOworICAgIEpzdGZMYW5nU3lzQ291bnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX1RSQUNFKCggIiAoSnN0ZkxhbmdTeXNDb3VudCA9ICVkKVxuIiwgSnN0ZkxhbmdTeXNDb3VudCApKTsKKworICAgIHRhYmxlX3NpemUgPSBKc3RmTGFuZ1N5c0NvdW50ICogNiArIDY7CisKKyAgICBPVFZfU0laRV9DSEVDSyggRXh0R2x5cGggKTsKKyAgICBpZiAoIEV4dEdseXBoICkKKyAgICB7CisgICAgICBvdHZhbGlkLT5leHRyYTEgPSBvdHZhbGlkLT5nbHlwaF9jb3VudDsKKyAgICAgIE9UVl9ORVNUMSggRXh0ZW5kZXJHbHlwaCApOworICAgICAgT1RWX1JVTiggdGFibGUgKyBFeHRHbHlwaCwgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9TSVpFX0NIRUNLKCBEZWZKc3RmTGFuZ1N5cyApOworICAgIGlmICggRGVmSnN0ZkxhbmdTeXMgKQorICAgIHsKKyAgICAgIE9UVl9ORVNUMiggSnN0ZkxhbmdTeXMsIEpzdGZQcmlvcml0eSApOworICAgICAgT1RWX1JVTiggdGFibGUgKyBEZWZKc3RmTGFuZ1N5cywgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiAqIEpzdGZMYW5nU3lzQ291bnQgKTsKKworICAgIC8qIEpzdGZMYW5nU3lzUmVjb3JkICovCisgICAgT1RWX05FU1QyKCBKc3RmTGFuZ1N5cywgSnN0ZlByaW9yaXR5ICk7CisgICAgZm9yICggOyBKc3RmTGFuZ1N5c0NvdW50ID4gMDsgSnN0ZkxhbmdTeXNDb3VudC0tICkKKyAgICB7CisgICAgICBwICs9IDQ7ICAgICAgIC8qIHNraXAgSnN0ZkxhbmdTeXNUYWcgKi8KKworICAgICAgT1RWX1JVTiggdGFibGUgKyBGVF9ORVhUX1VTSE9SVCggcCApLCBvdHZhbGlkICk7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmExIChHU1VCIGxvb2t1cCBjb3VudCkgKi8KKyAgLyogc2V0cyBvdHZhbGlkLT5leHRyYTIgKEdQT1MgbG9va3VwIGNvdW50KSAqLworICAvKiBzZXRzIG90dmFsaWQtPmdseXBoX2NvdW50ICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgb3R2X0pTVEZfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdzdWIsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgICAgIGdwb3MsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICBmdHZhbGlkICkKKyAgeworICAgIE9UVl9WYWxpZGF0b3JSZWMgIG90dmFsaWRyZWM7CisgICAgT1RWX1ZhbGlkYXRvciAgICAgb3R2YWxpZCA9ICZvdHZhbGlkcmVjOworICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgSnN0ZlNjcmlwdENvdW50OworCisKKyAgICBvdHZhbGlkLT5yb290ID0gZnR2YWxpZDsKKworCisgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgSlNURiB0YWJsZVxuIiApKTsKKyAgICBPVFZfSU5JVDsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworCisgICAgaWYgKCBGVF9ORVhUX1VMT05HKCBwICkgIT0gMHgxMDAwMFVMICkgICAgICAvKiBWZXJzaW9uICovCisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKworICAgIEpzdGZTY3JpcHRDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBGVF9UUkFDRTMoKCAiIChKc3RmU2NyaXB0Q291bnQgPSAlZClcbiIsIEpzdGZTY3JpcHRDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggSnN0ZlNjcmlwdENvdW50ICogNiApOworCisgICAgaWYgKCBnc3ViICkKKyAgICAgIG90dmFsaWQtPmV4dHJhMSA9IG90dl9HU1VCR1BPU19nZXRfTG9va3VwX2NvdW50KCBnc3ViICk7CisgICAgZWxzZQorICAgICAgb3R2YWxpZC0+ZXh0cmExID0gMDsKKworICAgIGlmICggZ3BvcyApCisgICAgICBvdHZhbGlkLT5leHRyYTIgPSBvdHZfR1NVQkdQT1NfZ2V0X0xvb2t1cF9jb3VudCggZ3BvcyApOworICAgIGVsc2UKKyAgICAgIG90dmFsaWQtPmV4dHJhMiA9IDA7CisKKyAgICBvdHZhbGlkLT5nbHlwaF9jb3VudCA9IGdseXBoX2NvdW50OworCisgICAgLyogSnN0ZlNjcmlwdFJlY29yZCAqLworICAgIGZvciAoIDsgSnN0ZlNjcmlwdENvdW50ID4gMDsgSnN0ZlNjcmlwdENvdW50LS0gKQorICAgIHsKKyAgICAgIHAgKz0gNDsgICAgICAgLyogc2tpcCBKc3RmU2NyaXB0VGFnICovCisKKyAgICAgIC8qIEpzdGZTY3JpcHQgKi8KKyAgICAgIG90dl9Kc3RmU2NyaXB0X3ZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2bWF0aC5jIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dm1hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNkNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dm1hdGguYwpAQCAtMCwwICsxLDQ1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgb3R2bWF0aC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9wZW5UeXBlIE1BVEggdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFdyaXR0ZW4gYnkgR2VvcmdlIFdpbGxpYW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJvdHZhbGlkLmgiCisjaW5jbHVkZSAib3R2Y29tbW4uaCIKKyNpbmNsdWRlICJvdHZncG9zLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vdHZtYXRoCisKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgIE1BVEggVFlQT0dSQVBISUMgQ09OU1RBTlRTICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9NYXRoQ29uc3RhbnRzX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgaTsKKyAgICBGVF9VSW50ICAgdGFibGVfc2l6ZTsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggRGV2aWNlVGFibGVPZmZzZXQgKTsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJNYXRoQ29uc3RhbnRzIiApOworCisgICAgLyogNTYgY29uc3RhbnRzLCA1MSBoYXZlIGRldmljZSB0YWJsZXMgKi8KKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKiAoIDU2ICsgNTEgKSApOworICAgIHRhYmxlX3NpemUgPSAyICogKCA1NiArIDUxICk7CisKKyAgICBwICs9IDQgKiAyOyAgICAgICAgICAgICAgICAgLyogRmlyc3QgNCBjb25zdGFudHMgaGF2ZSBubyBkZXZpY2UgdGFibGVzICovCisgICAgZm9yICggaSA9IDA7IGkgPCA1MTsgKytpICkKKyAgICB7CisgICAgICBwICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSB2YWx1ZSAqLworICAgICAgT1RWX09QVElPTkFMX09GRlNFVCggRGV2aWNlVGFibGVPZmZzZXQgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLKCBEZXZpY2VUYWJsZU9mZnNldCApOworICAgICAgaWYgKCBEZXZpY2VUYWJsZU9mZnNldCApCisgICAgICAgIG90dl9EZXZpY2VfdmFsaWRhdGUoIHRhYmxlICsgRGV2aWNlVGFibGVPZmZzZXQsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgIE1BVEggSVRBTElDUyBDT1JSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgTUFUSCBUT1AgQUNDRU5UIEFUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIG90dl9NYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBpc0l0YWxpYyApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBpLCBjbnQsIHRhYmxlX3NpemUgOworCisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBDb3ZlcmFnZSApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggRGV2aWNlVGFibGVPZmZzZXQgKTsKKworICAgIEZUX1VOVVNFRCggaXNJdGFsaWMgKTsgIC8qIG9ubHkgdXNlZCBpZiB0cmFjaW5nIGlzIGFjdGl2ZSAqLworCisKKyAgICBPVFZfTkFNRV9FTlRFUiggaXNJdGFsaWMgPyAiTWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiTWF0aFRvcEFjY2VudEF0dGFjaG1lbnQiICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIENvdmVyYWdlICk7CisgICAgY250ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCAqIGNudCApOworICAgIHRhYmxlX3NpemUgPSA0ICsgNCAqIGNudDsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBDb3ZlcmFnZSApOworICAgIG90dl9Db3ZlcmFnZV92YWxpZGF0ZSggdGFibGUgKyBDb3ZlcmFnZSwgb3R2YWxpZCwgKEZUX0ludCljbnQgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgY250OyArK2kgKQorICAgIHsKKyAgICAgIHAgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIHZhbHVlICovCisgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBEZXZpY2VUYWJsZU9mZnNldCApOworICAgICAgT1RWX1NJWkVfQ0hFQ0soIERldmljZVRhYmxlT2Zmc2V0ICk7CisgICAgICBpZiAoIERldmljZVRhYmxlT2Zmc2V0ICkKKyAgICAgICAgb3R2X0RldmljZV92YWxpZGF0ZSggdGFibGUgKyBEZXZpY2VUYWJsZU9mZnNldCwgb3R2YWxpZCApOworICAgIH0KKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRIIEtFUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfTWF0aEtlcm5fdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgaSwgY250LCB0YWJsZV9zaXplOworCisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBEZXZpY2VUYWJsZU9mZnNldCApOworCisKKyAgICAvKiBPVFZfTkFNRV9FTlRFUiggIk1hdGhLZXJuIiApOyovCisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKKworICAgIGNudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKiBjbnQgKyAyICk7CisgICAgdGFibGVfc2l6ZSA9IDQgKyA0ICogY250OworCisgICAgLyogSGVpZ2h0cyAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgY250OyArK2kgKQorICAgIHsKKyAgICAgIHAgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIHZhbHVlICovCisgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBEZXZpY2VUYWJsZU9mZnNldCApOworICAgICAgT1RWX1NJWkVfQ0hFQ0soIERldmljZVRhYmxlT2Zmc2V0ICk7CisgICAgICBpZiAoIERldmljZVRhYmxlT2Zmc2V0ICkKKyAgICAgICAgb3R2X0RldmljZV92YWxpZGF0ZSggdGFibGUgKyBEZXZpY2VUYWJsZU9mZnNldCwgb3R2YWxpZCApOworICAgIH0KKworICAgIC8qIE9uZSBtb3JlIEtlcm5pbmcgdmFsdWUgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGNudCArIDE7ICsraSApCisgICAgeworICAgICAgcCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgdmFsdWUgKi8KKyAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIERldmljZVRhYmxlT2Zmc2V0ICk7CisgICAgICBPVFZfU0laRV9DSEVDSyggRGV2aWNlVGFibGVPZmZzZXQgKTsKKyAgICAgIGlmICggRGV2aWNlVGFibGVPZmZzZXQgKQorICAgICAgICBvdHZfRGV2aWNlX3ZhbGlkYXRlKCB0YWJsZSArIERldmljZVRhYmxlT2Zmc2V0LCBvdHZhbGlkICk7CisgICAgfQorCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIG90dl9NYXRoS2VybkluZm9fdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIGksIGosIGNudCwgdGFibGVfc2l6ZTsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggQ292ZXJhZ2UgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIE1LUmVjb3JkT2Zmc2V0ICk7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiTWF0aEtlcm5JbmZvIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CisKKyAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBDb3ZlcmFnZSApOworICAgIGNudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDggKiBjbnQgKTsKKyAgICB0YWJsZV9zaXplID0gNCArIDggKiBjbnQ7CisKKyAgICBPVFZfU0laRV9DSEVDSyggQ292ZXJhZ2UgKTsKKyAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgQ292ZXJhZ2UsIG90dmFsaWQsIChGVF9JbnQpY250ICk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNudDsgKytpICkKKyAgICB7CisgICAgICBmb3IgKCBqID0gMDsgaiA8IDQ7ICsraiApCisgICAgICB7CisgICAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIE1LUmVjb3JkT2Zmc2V0ICk7CisgICAgICAgIE9UVl9TSVpFX0NIRUNLKCBNS1JlY29yZE9mZnNldCApOworICAgICAgICBpZiAoIE1LUmVjb3JkT2Zmc2V0ICkKKyAgICAgICAgICBvdHZfTWF0aEtlcm5fdmFsaWRhdGUoIHRhYmxlICsgTUtSZWNvcmRPZmZzZXQsIG90dmFsaWQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgIE1BVEggR0xZUEggSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X01hdGhHbHlwaEluZm9fdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBNYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvLCBNYXRoVG9wQWNjZW50QXR0YWNobWVudDsKKyAgICBGVF9VSW50ICAgRXh0ZW5kZWRTaGFwZUNvdmVyYWdlLCBNYXRoS2VybkluZm87CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiTWF0aEdseXBoSW5mbyIgKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggOCApOworCisgICAgTWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mbyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgTWF0aFRvcEFjY2VudEF0dGFjaG1lbnQgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgRXh0ZW5kZWRTaGFwZUNvdmVyYWdlICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgTWF0aEtlcm5JbmZvICAgICAgICAgICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBpZiAoIE1hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm8gKQorICAgICAgb3R2X01hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm9fdmFsaWRhdGUoCisgICAgICAgIHRhYmxlICsgTWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mbywgb3R2YWxpZCwgVFJVRSApOworCisgICAgLyogSXRhbGljIGNvcnJlY3Rpb24gYW5kIFRvcCBBY2NlbnQgQXR0YWNobWVudCBoYXZlIHRoZSBzYW1lIGZvcm1hdCAqLworICAgIGlmICggTWF0aFRvcEFjY2VudEF0dGFjaG1lbnQgKQorICAgICAgb3R2X01hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm9fdmFsaWRhdGUoCisgICAgICAgIHRhYmxlICsgTWF0aFRvcEFjY2VudEF0dGFjaG1lbnQsIG90dmFsaWQsIEZBTFNFICk7CisKKyAgICBpZiAoIEV4dGVuZGVkU2hhcGVDb3ZlcmFnZSApCisgICAgeworICAgICAgT1RWX05BTUVfRU5URVIoICJFeHRlbmRlZFNoYXBlQ292ZXJhZ2UiICk7CisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgRXh0ZW5kZWRTaGFwZUNvdmVyYWdlLCBvdHZhbGlkLCAtMSApOworICAgICAgT1RWX0VYSVQ7CisgICAgfQorCisgICAgaWYgKCBNYXRoS2VybkluZm8gKQorICAgICAgb3R2X01hdGhLZXJuSW5mb192YWxpZGF0ZSggdGFibGUgKyBNYXRoS2VybkluZm8sIG90dmFsaWQgKTsKKworICAgIE9UVl9FWElUOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIE1BVEggR0xZUEggQ09OU1RSVUNUSU9OICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBvdHZfR2x5cGhBc3NlbWJseV92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFZfVmFsaWRhdG9yICBvdHZhbGlkICkKKyAgeworICAgIEZUX0J5dGVzICBwID0gdGFibGU7CisgICAgRlRfVUludCAgIHBjbnQsIHRhYmxlX3NpemU7CisgICAgRlRfVUludCAgIGk7CisKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIERldmljZVRhYmxlT2Zmc2V0ICk7CisKKworICAgIC8qIE9UVl9OQU1FX0VOVEVSKCAiR2x5cGhBc3NlbWJseSIgKTsgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworCisgICAgcCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIEl0YWxpY3MgQ29ycmVjdGlvbiB2YWx1ZSAqLworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIERldmljZVRhYmxlT2Zmc2V0ICk7CisgICAgcGNudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDggKiBwY250ICk7CisgICAgdGFibGVfc2l6ZSA9IDYgKyA4ICogcGNudDsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBEZXZpY2VUYWJsZU9mZnNldCApOworICAgIGlmICggRGV2aWNlVGFibGVPZmZzZXQgKQorICAgICAgb3R2X0RldmljZV92YWxpZGF0ZSggdGFibGUgKyBEZXZpY2VUYWJsZU9mZnNldCwgb3R2YWxpZCApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBwY250OyArK2kgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIGdpZDsKKworCisgICAgICBnaWQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgaWYgKCBnaWQgPj0gb3R2YWxpZC0+Z2x5cGhfY291bnQgKQorICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworICAgICAgcCArPSAyKjQ7ICAgICAgICAgICAgIC8qIHNraXAgdGhlIFN0YXJ0LCBFbmQsIEZ1bGwsIGFuZCBGbGFncyBmaWVsZHMgKi8KKyAgICB9CisKKyAgICAvKiBPVFZfRVhJVDsgKi8KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X01hdGhHbHlwaENvbnN0cnVjdGlvbl92YWxpZGF0ZSggRlRfQnl0ZXMgICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UVl9WYWxpZGF0b3IgIG90dmFsaWQgKQorICB7CisgICAgRlRfQnl0ZXMgIHAgPSB0YWJsZTsKKyAgICBGVF9VSW50ICAgdmNudCwgdGFibGVfc2l6ZTsKKyAgICBGVF9VSW50ICAgaTsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggR2x5cGhBc3NlbWJseSApOworCisKKyAgICAvKiBPVFZfTkFNRV9FTlRFUiggIk1hdGhHbHlwaENvbnN0cnVjdGlvbiIgKTsgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggNCApOworCisgICAgT1RWX09QVElPTkFMX09GRlNFVCggR2x5cGhBc3NlbWJseSApOworICAgIHZjbnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICogdmNudCApOworICAgIHRhYmxlX3NpemUgPSA0ICsgNCAqIHZjbnQ7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IHZjbnQ7ICsraSApCisgICAgeworICAgICAgRlRfVUludCAgZ2lkOworCisKKyAgICAgIGdpZCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBpZiAoIGdpZCA+PSBvdHZhbGlkLT5nbHlwaF9jb3VudCApCisgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICBwICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBzaXplICovCisgICAgfQorCisgICAgT1RWX1NJWkVfQ0hFQ0soIEdseXBoQXNzZW1ibHkgKTsKKyAgICBpZiAoIEdseXBoQXNzZW1ibHkgKQorICAgICAgb3R2X0dseXBoQXNzZW1ibHlfdmFsaWRhdGUoIHRhYmxlK0dseXBoQXNzZW1ibHksIG90dmFsaWQgKTsKKworICAgIC8qIE9UVl9FWElUOyAqLworICB9CisKKworICBzdGF0aWMgdm9pZAorICBvdHZfTWF0aFZhcmlhbnRzX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICB2Y250LCBoY250LCBpLCB0YWJsZV9zaXplOworCisgICAgT1RWX09QVElPTkFMX1RBQkxFKCBWQ292ZXJhZ2UgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIEhDb3ZlcmFnZSApOworICAgIE9UVl9PUFRJT05BTF9UQUJMRSggT2Zmc2V0ICk7CisKKworICAgIE9UVl9OQU1FX0VOVEVSKCAiTWF0aFZhcmlhbnRzIiApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAxMCApOworCisgICAgcCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgTWluQ29ubmVjdG9yT3ZlcmxhcCBjb25zdGFudCAqLworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIFZDb3ZlcmFnZSApOworICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIEhDb3ZlcmFnZSApOworICAgIHZjbnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGhjbnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgT1RWX0xJTUlUX0NIRUNLKCAyICogdmNudCArIDIgKiBoY250ICk7CisgICAgdGFibGVfc2l6ZSA9IDEwICsgMiAqIHZjbnQgKyAyICogaGNudDsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBWQ292ZXJhZ2UgKTsKKyAgICBpZiAoIFZDb3ZlcmFnZSApCisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgVkNvdmVyYWdlLCBvdHZhbGlkLCAoRlRfSW50KXZjbnQgKTsKKworICAgIE9UVl9TSVpFX0NIRUNLKCBIQ292ZXJhZ2UgKTsKKyAgICBpZiAoIEhDb3ZlcmFnZSApCisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgSENvdmVyYWdlLCBvdHZhbGlkLCAoRlRfSW50KWhjbnQgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgdmNudDsgKytpICkKKyAgICB7CisgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBPZmZzZXQgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLKCBPZmZzZXQgKTsKKyAgICAgIG90dl9NYXRoR2x5cGhDb25zdHJ1Y3Rpb25fdmFsaWRhdGUoIHRhYmxlICsgT2Zmc2V0LCBvdHZhbGlkICk7CisgICAgfQorCisgICAgZm9yICggaSA9IDA7IGkgPCBoY250OyArK2kgKQorICAgIHsKKyAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIE9mZnNldCApOworICAgICAgT1RWX1NJWkVfQ0hFQ0soIE9mZnNldCApOworICAgICAgb3R2X01hdGhHbHlwaENvbnN0cnVjdGlvbl92YWxpZGF0ZSggdGFibGUgKyBPZmZzZXQsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBPVFZfRVhJVDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRIIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogc2V0cyBvdHZhbGlkLT5nbHlwaF9jb3VudCAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIG90dl9NQVRIX3ZhbGlkYXRlKCBGVF9CeXRlcyAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgZnR2YWxpZCApCisgIHsKKyAgICBPVFZfVmFsaWRhdG9yUmVjICBvdHZhbGlkcmVjOworICAgIE9UVl9WYWxpZGF0b3IgICAgIG90dmFsaWQgPSAmb3R2YWxpZHJlYzsKKyAgICBGVF9CeXRlcyAgICAgICAgICBwICAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgTWF0aENvbnN0YW50cywgTWF0aEdseXBoSW5mbywgTWF0aFZhcmlhbnRzOworCisKKyAgICBvdHZhbGlkLT5yb290ID0gZnR2YWxpZDsKKworICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIE1BVEggdGFibGVcbiIgKSk7CisgICAgT1RWX0lOSVQ7CisKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDEwICk7CisKKyAgICBpZiAoIEZUX05FWFRfVUxPTkcoIHAgKSAhPSAweDEwMDAwVUwgKSAgICAgIC8qIFZlcnNpb24gKi8KKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworCisgICAgTWF0aENvbnN0YW50cyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgTWF0aEdseXBoSW5mbyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgTWF0aFZhcmlhbnRzICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBvdHZhbGlkLT5nbHlwaF9jb3VudCA9IGdseXBoX2NvdW50OworCisgICAgb3R2X01hdGhDb25zdGFudHNfdmFsaWRhdGUoIHRhYmxlICsgTWF0aENvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3R2YWxpZCApOworICAgIG90dl9NYXRoR2x5cGhJbmZvX3ZhbGlkYXRlKCB0YWJsZSArIE1hdGhHbHlwaEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKKyAgICBvdHZfTWF0aFZhcmlhbnRzX3ZhbGlkYXRlICggdGFibGUgKyBNYXRoVmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZtb2QuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY4NTEzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL290dm1vZC5jCkBAIC0wLDAgKzEsMjgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBvdHZtb2QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUncyBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX09QRU5UWVBFX1ZBTElEQVRFX0gKKworI2luY2x1ZGUgIm90dm1vZC5oIgorI2luY2x1ZGUgIm90dmFsaWQuaCIKKyNpbmNsdWRlICJvdHZjb21tbi5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2bW9kdWxlCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgb3R2X2xvYWRfdGFibGUoIEZUX0ZhY2UgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX1RhZyAgICAgICAgICAgICAgdGFnLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogdm9sYXRpbGUqICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICAgICAgdGFibGVfbGVuICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOworCisKKyAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZSggZmFjZSwgdGFnLCAwLCBOVUxMLCB0YWJsZV9sZW4gKTsKKyAgICBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIFRhYmxlX01pc3NpbmcgKSApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBGVF9BTExPQyggKnRhYmxlLCAqdGFibGVfbGVuICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoIGZhY2UsIHRhZywgMCwgKnRhYmxlLCB0YWJsZV9sZW4gKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIG90dl92YWxpZGF0ZSggRlRfRmFjZSB2b2xhdGlsZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgIG90X2ZsYWdzLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICpvdF9iYXNlLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICpvdF9nZGVmLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICpvdF9ncG9zLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICpvdF9nc3ViLAorICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgICAgICAgICpvdF9qc3RmICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSogdm9sYXRpbGUgICAgICAgICBiYXNlOworICAgIEZUX0J5dGUqIHZvbGF0aWxlICAgICAgICAgZ2RlZjsKKyAgICBGVF9CeXRlKiB2b2xhdGlsZSAgICAgICAgIGdwb3M7CisgICAgRlRfQnl0ZSogdm9sYXRpbGUgICAgICAgICBnc3ViOworICAgIEZUX0J5dGUqIHZvbGF0aWxlICAgICAgICAganN0ZjsKKyAgICBGVF9CeXRlKiB2b2xhdGlsZSAgICAgICAgIG1hdGg7CisgICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICBsZW5fYmFzZSwgbGVuX2dkZWYsIGxlbl9ncG9zLCBsZW5fZ3N1YiwgbGVuX2pzdGY7CisgICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICBsZW5fbWF0aDsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgIG51bV9nbHlwaHMgPSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzOworICAgIEZUX1ZhbGlkYXRvclJlYyB2b2xhdGlsZSAgdmFsaWQ7CisKKworICAgIGJhc2UgICAgID0gZ2RlZiAgICAgPSBncG9zICAgICA9IGdzdWIgICAgID0ganN0ZiAgICAgPSBtYXRoICAgICA9IE5VTEw7CisgICAgbGVuX2Jhc2UgPSBsZW5fZ2RlZiA9IGxlbl9ncG9zID0gbGVuX2dzdWIgPSBsZW5fanN0ZiA9IGxlbl9tYXRoID0gMDsKKworICAgIC8qCisgICAgICogWFhYOiBPcGVuVHlwZSB0YWJsZXMgY2Fubm90IGhhbmRsZSAzMi1iaXQgZ2x5cGggaW5kZXgsCisgICAgICogICAgICBhbHRob3VnaCBicm9rZW4gVHJ1ZVR5cGUgY2FuIGhhdmUgMzItYml0IGdseXBoIGluZGV4LgorICAgICAqLworICAgIGlmICggZmFjZS0+bnVtX2dseXBocyA+IDB4RkZGRkwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJvdHZfdmFsaWRhdGU6IEludmFsaWQgZ2x5cGhzIGluZGV4ICgweDAwMDBGRkZGIC0gMHglMDh4KSAiLAorICAgICAgICAgICAgICAgICAgZmFjZS0+bnVtX2dseXBocyApKTsKKyAgICAgIEZUX1RSQUNFMSgoICJhcmUgbm90IGhhbmRsZWQgYnkgT3BlblR5cGUgdGFibGVzXG4iICkpOworICAgICAgbnVtX2dseXBocyA9IDB4RkZGRjsKKyAgICB9CisKKyAgICAvKiBsb2FkIHRhYmxlcyAqLworCisgICAgaWYgKCBvdF9mbGFncyAmIEZUX1ZBTElEQVRFX0JBU0UgKQorICAgIHsKKyAgICAgIGVycm9yID0gb3R2X2xvYWRfdGFibGUoIGZhY2UsIFRUQUdfQkFTRSwgJmJhc2UsICZsZW5fYmFzZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIG90X2ZsYWdzICYgRlRfVkFMSURBVEVfR0RFRiApCisgICAgeworICAgICAgZXJyb3IgPSBvdHZfbG9hZF90YWJsZSggZmFjZSwgVFRBR19HREVGLCAmZ2RlZiwgJmxlbl9nZGVmICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggb3RfZmxhZ3MgJiBGVF9WQUxJREFURV9HUE9TICkKKyAgICB7CisgICAgICBlcnJvciA9IG90dl9sb2FkX3RhYmxlKCBmYWNlLCBUVEFHX0dQT1MsICZncG9zLCAmbGVuX2dwb3MgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBvdF9mbGFncyAmIEZUX1ZBTElEQVRFX0dTVUIgKQorICAgIHsKKyAgICAgIGVycm9yID0gb3R2X2xvYWRfdGFibGUoIGZhY2UsIFRUQUdfR1NVQiwgJmdzdWIsICZsZW5fZ3N1YiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIG90X2ZsYWdzICYgRlRfVkFMSURBVEVfSlNURiApCisgICAgeworICAgICAgZXJyb3IgPSBvdHZfbG9hZF90YWJsZSggZmFjZSwgVFRBR19KU1RGLCAmanN0ZiwgJmxlbl9qc3RmICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggb3RfZmxhZ3MgJiBGVF9WQUxJREFURV9NQVRIICkKKyAgICB7CisgICAgICBlcnJvciA9IG90dl9sb2FkX3RhYmxlKCBmYWNlLCBUVEFHX01BVEgsICZtYXRoLCAmbGVuX21hdGggKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogdmFsaWRhdGUgdGFibGVzICovCisKKyAgICBpZiAoIGJhc2UgKQorICAgIHsKKyAgICAgIGZ0X3ZhbGlkYXRvcl9pbml0KCAmdmFsaWQsIGJhc2UsIGJhc2UgKyBsZW5fYmFzZSwgRlRfVkFMSURBVEVfREVGQVVMVCApOworICAgICAgaWYgKCBmdF9zZXRqbXAoIHZhbGlkLmp1bXBfYnVmZmVyICkgPT0gMCApCisgICAgICAgIG90dl9CQVNFX3ZhbGlkYXRlKCBiYXNlLCAmdmFsaWQgKTsKKyAgICAgIGVycm9yID0gdmFsaWQuZXJyb3I7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggZ3BvcyApCisgICAgeworICAgICAgZnRfdmFsaWRhdG9yX2luaXQoICZ2YWxpZCwgZ3BvcywgZ3BvcyArIGxlbl9ncG9zLCBGVF9WQUxJREFURV9ERUZBVUxUICk7CisgICAgICBpZiAoIGZ0X3NldGptcCggdmFsaWQuanVtcF9idWZmZXIgKSA9PSAwICkKKyAgICAgICAgb3R2X0dQT1NfdmFsaWRhdGUoIGdwb3MsIG51bV9nbHlwaHMsICZ2YWxpZCApOworICAgICAgZXJyb3IgPSB2YWxpZC5lcnJvcjsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBnc3ViICkKKyAgICB7CisgICAgICBmdF92YWxpZGF0b3JfaW5pdCggJnZhbGlkLCBnc3ViLCBnc3ViICsgbGVuX2dzdWIsIEZUX1ZBTElEQVRFX0RFRkFVTFQgKTsKKyAgICAgIGlmICggZnRfc2V0am1wKCB2YWxpZC5qdW1wX2J1ZmZlciApID09IDAgKQorICAgICAgICBvdHZfR1NVQl92YWxpZGF0ZSggZ3N1YiwgbnVtX2dseXBocywgJnZhbGlkICk7CisgICAgICBlcnJvciA9IHZhbGlkLmVycm9yOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGdkZWYgKQorICAgIHsKKyAgICAgIGZ0X3ZhbGlkYXRvcl9pbml0KCAmdmFsaWQsIGdkZWYsIGdkZWYgKyBsZW5fZ2RlZiwgRlRfVkFMSURBVEVfREVGQVVMVCApOworICAgICAgaWYgKCBmdF9zZXRqbXAoIHZhbGlkLmp1bXBfYnVmZmVyICkgPT0gMCApCisgICAgICAgIG90dl9HREVGX3ZhbGlkYXRlKCBnZGVmLCBnc3ViLCBncG9zLCBudW1fZ2x5cGhzLCAmdmFsaWQgKTsKKyAgICAgIGVycm9yID0gdmFsaWQuZXJyb3I7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICgganN0ZiApCisgICAgeworICAgICAgZnRfdmFsaWRhdG9yX2luaXQoICZ2YWxpZCwganN0ZiwganN0ZiArIGxlbl9qc3RmLCBGVF9WQUxJREFURV9ERUZBVUxUICk7CisgICAgICBpZiAoIGZ0X3NldGptcCggdmFsaWQuanVtcF9idWZmZXIgKSA9PSAwICkKKyAgICAgICAgb3R2X0pTVEZfdmFsaWRhdGUoIGpzdGYsIGdzdWIsIGdwb3MsIG51bV9nbHlwaHMsICZ2YWxpZCApOworICAgICAgZXJyb3IgPSB2YWxpZC5lcnJvcjsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBtYXRoICkKKyAgICB7CisgICAgICBmdF92YWxpZGF0b3JfaW5pdCggJnZhbGlkLCBtYXRoLCBtYXRoICsgbGVuX21hdGgsIEZUX1ZBTElEQVRFX0RFRkFVTFQgKTsKKyAgICAgIGlmICggZnRfc2V0am1wKCB2YWxpZC5qdW1wX2J1ZmZlciApID09IDAgKQorICAgICAgICBvdHZfTUFUSF92YWxpZGF0ZSggbWF0aCwgbnVtX2dseXBocywgJnZhbGlkICk7CisgICAgICBlcnJvciA9IHZhbGlkLmVycm9yOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAqb3RfYmFzZSA9IChGVF9CeXRlcyliYXNlOworICAgICpvdF9nZGVmID0gKEZUX0J5dGVzKWdkZWY7CisgICAgKm90X2dwb3MgPSAoRlRfQnl0ZXMpZ3BvczsKKyAgICAqb3RfZ3N1YiA9IChGVF9CeXRlcylnc3ViOworICAgICpvdF9qc3RmID0gKEZUX0J5dGVzKWpzdGY7CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBmYWNlICk7CisKKworICAgICAgRlRfRlJFRSggYmFzZSApOworICAgICAgRlRfRlJFRSggZ2RlZiApOworICAgICAgRlRfRlJFRSggZ3BvcyApOworICAgICAgRlRfRlJFRSggZ3N1YiApOworICAgICAgRlRfRlJFRSgganN0ZiApOworICAgIH0KKworICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgICBGVF9GUkVFKCBtYXRoICk7ICAgICAgICAgICAgICAgICAvKiBDYW4ndCByZXR1cm4gdGhpcyBhcyBBUEkgaXMgZnJvemVuICovCisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfU2VydmljZV9PVHZhbGlkYXRlUmVjICBvdHZhbGlkX2ludGVyZmFjZSA9CisgIHsKKyAgICBvdHZfdmFsaWRhdGUKKyAgfTsKKworCisgIHN0YXRpYworICBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgb3R2YWxpZF9zZXJ2aWNlc1tdID0KKyAgeworICAgIHsgRlRfU0VSVklDRV9JRF9PUEVOVFlQRV9WQUxJREFURSwgJm90dmFsaWRfaW50ZXJmYWNlIH0sCisgICAgeyBOVUxMLCBOVUxMIH0KKyAgfTsKKworCisgIHN0YXRpYyBGVF9Qb2ludGVyCisgIG90dmFsaWRfZ2V0X3NlcnZpY2UoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzZXJ2aWNlX2lkICkKKyAgeworICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CisKKyAgICByZXR1cm4gZnRfc2VydmljZV9saXN0X2xvb2t1cCggb3R2YWxpZF9zZXJ2aWNlcywgc2VydmljZV9pZCApOworICB9CisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKKyAgY29uc3QgRlRfTW9kdWxlX0NsYXNzICBvdHZfbW9kdWxlX2NsYXNzID0KKyAgeworICAgIDAsCisgICAgc2l6ZW9mICggRlRfTW9kdWxlUmVjICksCisgICAgIm90dmFsaWQiLAorICAgIDB4MTAwMDBMLAorICAgIDB4MjAwMDBMLAorCisgICAgMCwgICAgICAgICAgICAgIC8qIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgKi8KKworICAgIChGVF9Nb2R1bGVfQ29uc3RydWN0b3IpMCwKKyAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIDAsCisgICAgKEZUX01vZHVsZV9SZXF1ZXN0ZXIpICBvdHZhbGlkX2dldF9zZXJ2aWNlCisgIH07CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2bW9kLmggYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvb3R2bW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhMDIzNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvb3R2YWxpZC9vdHZtb2QuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBvdHZtb2QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUncyBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgKi8KKy8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fT1RWTU9EX0hfXworI2RlZmluZSBfX09UVk1PRF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX01PRFVMRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworI2Vycm9yICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCisjZW5kaWYKKworCisgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX01vZHVsZV9DbGFzcyApICBvdHZfbW9kdWxlX2NsYXNzOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fT1RWTU9EX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9vdHZhbGlkL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDc0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL290dmFsaWQvcnVsZXMubWsKQEAgLTAsMCArMSw4MSBAQAorIworIyBGcmVlVHlwZSAyIE9wZW5UeXBlIHZhbGlkYXRpb24gZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAyMDA0LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgT1RWIGRyaXZlciBkaXJlY3RvcnkKKyMKK09UVl9ESVIgOj0gJChTUkNfRElSKS9vdHZhbGlkCisKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworT1RWX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICRJJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkKE9UVl9ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBPVFYgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCisjCitPVFZfRFJWX1NSQyA6PSAkKE9UVl9ESVIpL290dmJhc2UuYyAgXAorICAgICAgICAgICAgICAgJChPVFZfRElSKS9vdHZjb21tbi5jIFwKKyAgICAgICAgICAgICAgICQoT1RWX0RJUikvb3R2Z2RlZi5jICBcCisgICAgICAgICAgICAgICAkKE9UVl9ESVIpL290dmdwb3MuYyAgXAorICAgICAgICAgICAgICAgJChPVFZfRElSKS9vdHZnc3ViLmMgIFwKKyAgICAgICAgICAgICAgICQoT1RWX0RJUikvb3R2anN0Zi5jICBcCisgICAgICAgICAgICAgICAkKE9UVl9ESVIpL290dm1hdGguYyAgXAorICAgICAgICAgICAgICAgJChPVFZfRElSKS9vdHZtb2QuYworCisjIE9UViBkcml2ZXIgaGVhZGVycworIworT1RWX0RSVl9IIDo9ICQoT1RWX0RJUikvb3R2YWxpZC5oICBcCisgICAgICAgICAgICAgJChPVFZfRElSKS9vdHZjb21tbi5oIFwKKyAgICAgICAgICAgICAkKE9UVl9ESVIpL290dmVycm9yLmggXAorICAgICAgICAgICAgICQoT1RWX0RJUikvb3R2Z3Bvcy5oICBcCisgICAgICAgICAgICAgJChPVFZfRElSKS9vdHZtb2QuaAorCisKKyMgT1RWIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBPVFZfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzLgorIyAgIE9UVl9EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzLgorIworT1RWX0RSVl9PQkpfTSA6PSAkKE9UVl9EUlZfU1JDOiQoT1RWX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK09UVl9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9vdHZhbGlkLiRPCisKKyMgT1RWIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitPVFZfRFJWX1NSQ19TIDo9ICQoT1RWX0RJUikvb3R2YWxpZC5jCisKKworIyBPVFYgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChPVFZfRFJWX09CSl9TKTogJChPVFZfRFJWX1NSQ19TKSAkKE9UVl9EUlZfU1JDKSBcCisgICAgICAgICAgICAgICAgICAgJChGUkVFVFlQRV9IKSAkKE9UVl9EUlZfSCkKKwkkKE9UVl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChPVFZfRFJWX1NSQ19TKSkKKworCisjIE9UViBkcml2ZXIgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoT1RWX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChPVFZfRFJWX0gpCisJJChPVFZfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKE9UVl9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoT1RWX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkOTBlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL0phbWZpbGUKQEAgLTAsMCArMSwyOSBAQAorIyBGcmVlVHlwZSAyIHNyYy9wY2YgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHBjZiA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gcGNmZHJpdnIgcGNmcmVhZCBwY2Z1dGlsIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHBjZiA7CisgIH0KKworICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Cit9CisKKyMgZW5kIG9mIHNyYy9wY2YgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvUkVBRE1FIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZWZmMTUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9SRUFETUUKQEAgLTAsMCArMSw5NiBAQAorICAgICAgICAgICAgICAgICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIFBDRiBmb250cworCisgICAgICAgICAgICAgICAgICAgICAgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorICAgICAgICAgICAgICAgICAgPGZyYW5jZXNjby56YXBwYS5uYXJkZWxsaUBlbnMuZnI+CisKKworSW50cm9kdWN0aW9uCisqKioqKioqKioqKioKKworUENGIChQb3J0YWJsZSBDb21waWxlZCBGb3JtYXQpIGlzIGEgYmluYXJ5IGJpdG1hcCBmb250IGZvcm1hdCwgbGFyZ2VseSB1c2VkCitpbiBYIHdvcmxkLiBUaGlzIGNvZGUgaW1wbGVtZW50cyBhIFBDRiBkcml2ZXIgZm9yIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LgorR2x5cGggaW1hZ2VzIGFyZSBsb2FkZWQgaW50byBtZW1vcnkgb25seSBvbiBkZW1hbmQsIHRodXMgbGVhZGluZyB0byBhIHNtYWxsCittZW1vcnkgZm9vdHByaW50LgorCitJbmZvcm1hdGlvbiBvbiB0aGUgUENGIGZvbnQgZm9ybWF0IGNhbiBvbmx5IGJlIHdvcmtlZCBvdXQgZnJvbQorYHBjZnJlYWQuYycsIGFuZCBgcGNmd3JpdGUuYycsIHRvIGJlIGZvdW5kLCBmb3IgaW5zdGFuY2UsIGluIHRoZSBYRnJlZTg2Cisod3d3LnhmcmVlODYub3JnKSBzb3VyY2UgdHJlZSAoeGMvbGliL2ZvbnQvYml0bWFwLykuCisKK01hbnkgZ29vZCBiaXRtYXAgZm9udHMgaW4gYmRmIGZvcm1hdCBjb21lIHdpdGggWEZyZWU4NjogdGhleSBjYW4gYmUKK2NvbXBpbGVkIGludG8gdGhlIHBjZiBmb3JtYXQgdXNpbmcgdGhlIGBiZGZ0b3BjZicgdXRpbGl0eS4KKworCitTdXBwb3J0ZWQgaGFyZHdhcmUKKyoqKioqKioqKioqKioqKioqKgorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBsaW51eC94ODYgYW5kIHN1bm9zNS41L3NwYXJjLiAgSW4gYm90aAorY2FzZXMgdGhlIGNvbXBpbGVyIHdhcyBnY2MuICBXaGVuIGJhY2sgaW4gUGFyaXMsIEkgd2lsbCB0ZXN0IGl0IGFsc28KK29uIGxpbnV4L2FscGhhLgorCisKK0VuY29kaW5ncworKioqKioqKioqCisKK1VzZSBgRlRfR2V0X0JERl9DaGFyc2V0X0lEJyB0byBhY2Nlc3MgdGhlIGVuY29kaW5nIGFuZCByZWdpc3RyeS4KKworVGhlIGRyaXZlciBhbHdheXMgZXhwb3J0cyBgZnRfZW5jb2Rpbmdfbm9uZScgYXMgZmFjZS0+Y2hhcm1hcC5lbmNvZGluZy4KK0ZUX0dldF9DaGFyX0luZGV4KCkgYmVoYXZpb3IgaXMgdW5tb2RpZmllZCwgdGhhdCBpcywgaXQgY29udmVydHMgdGhlIFVMb25nCit2YWx1ZSBnaXZlbiBhcyBhcmd1bWVudCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIG51bWJlci4KKworCitLbm93biBwcm9ibGVtcworKioqKioqKioqKioqKioKKworLSBkZWFsaW5nIGV4cGxpY2l0bHkgd2l0aCBlbmNvZGluZ3MgYnJlYWtzIHRoZSB1bmlmb3JtaXR5IG9mIGZyZWV0eXBlMgorICBhcGkuCisKKy0gZXhjZXB0IGZvciBlbmNvZGluZ3MgcHJvcGVydGllcywgY2xpZW50IGFwcGxpY2F0aW9ucyBoYXZlIG5vCisgIHZpc2liaWxpdHkgb2YgdGhlIFBDRl9GYWNlIG9iamVjdC4gIFRoaXMgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMKKyAgY2Fubm90IGRpcmVjdGx5IGFjY2VzcyBmb250IHRhYmxlcyBhbmQgYXJlIG9ibGlnZWQgdG8gdHJ1c3QKKyAgRnJlZVR5cGUuCisKKy0gY3VycmVudGx5LCBnbHlwaCBuYW1lcyBhbmQgaW5rX21ldHJpY3MgYXJlIGlnbm9yZWQuCisKK0kgcGxhbiB0byBnaXZlIGZ1bGwgdmlzaWJpbGl0eSBvZiB0aGUgUENGX0ZhY2Ugb2JqZWN0IGluIHRoZSBuZXh0CityZWxlYXNlIG9mIHRoZSBkcml2ZXIsIHRodXMgaW1wbGVtZW50aW5nIGFsc28gZ2x5cGggbmFtZXMgYW5kCitpbmtfbWV0cmljcy4KKworLSBoZWlnaHQgaXMgZGVmaW5lZCBhcyAoYXNjZW50IC0gZGVzY2VudCkuICBJcyB0aGlzIGNvcnJlY3Q/CisKKy0gaWYgdW5hYmxlIHRvIHJlYWQgc2l6ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb250LCBQQ0ZfSW5pdF9GYWNlCisgIHNldHMgYXZhaWxhYmxlX3NpemUtPndpZHRoIGFuZCBhdmFpbGFibGVfc2l6ZS0+aGVpZ2h0IHRvIDEyLgorCistIHRvbyBtYW55IGVuZ2xpc2ggZ3JhbW1hciBlcnJvcnMgaW4gdGhlIHJlYWRtZSBmaWxlIDotKAorCisKK0xpY2Vuc2UKKyoqKioqKioKKworQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKworQ3JlZGl0cworKioqKioqKgorCitLZWl0aCBQYWNrYXJkIHdyb3RlIHRoZSBwY2YgZHJpdmVyIGZvdW5kIGluIFhGcmVlODYuICBIaXMgd29yayBpcyBhdAordGhlIHNhbWUgdGltZSB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgdGhlIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKK1BDRiBmb3JtYXQuICBVbmRvdWJ0ZWRseSwgdGhpcyBkcml2ZXIgaXMgaW5zcGlyZWQgZnJvbSBoaXMgd29yay4KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL21vZHVsZS5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL21vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM4M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgRnJlZVR5cGUgMiBQQ0YgbW9kdWxlIGRlZmluaXRpb24KKyMKKworIyBDb3B5cmlnaHQgMjAwMCwgMjAwNiBieQorIyBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gUENGX0RSSVZFUgorCitkZWZpbmUgUENGX0RSSVZFUgorJChPUEVOX0RSSVZFUikgRlRfRHJpdmVyX0NsYXNzUmVjLCBwY2ZfZHJpdmVyX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUilwY2YgICAgICAgJChFQ0hPX0RSSVZFUl9ERVNDKXBjZiBiaXRtYXAgZm9udHMkKEVDSE9fRFJJVkVSX0RPTkUpCitlbmRlZgorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmLmMgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ1YjdiCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmLmMKQEAgLTAsMCArMSwzNiBAQAorLyogIHBjZi5jCisKKyAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgcGNmIGZvbnRzCisKKyAgQ29weXJpZ2h0IDIwMDAtMjAwMSwgMjAwMyBieQorICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorKi8KKworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJwY2Z1dGlsLmMiCisjaW5jbHVkZSAicGNmcmVhZC5jIgorI2luY2x1ZGUgInBjZmRyaXZyLmMiCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmLmggYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGRhNTAzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmLmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qICBwY2YuaAorCisgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBwY2YgZm9udHMKKworICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYsIDIwMTAgYnkKKyAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyovCisKKworI2lmbmRlZiBfX1BDRl9IX18KKyNkZWZpbmUgX19QQ0ZfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworICB0eXBlZGVmIHN0cnVjdCAgUENGX1RhYmxlUmVjXworICB7CisgICAgRlRfVUxvbmcgIHR5cGU7CisgICAgRlRfVUxvbmcgIGZvcm1hdDsKKyAgICBGVF9VTG9uZyAgc2l6ZTsKKyAgICBGVF9VTG9uZyAgb2Zmc2V0OworCisgIH0gUENGX1RhYmxlUmVjLCAqUENGX1RhYmxlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBDRl9Ub2NSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgIHZlcnNpb247CisgICAgRlRfVUxvbmcgICBjb3VudDsKKyAgICBQQ0ZfVGFibGUgIHRhYmxlczsKKworICB9IFBDRl9Ub2NSZWMsICpQQ0ZfVG9jOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBDRl9QYXJzZVByb3BlcnR5UmVjXworICB7CisgICAgRlRfTG9uZyAgbmFtZTsKKyAgICBGVF9CeXRlICBpc1N0cmluZzsKKyAgICBGVF9Mb25nICB2YWx1ZTsKKworICB9IFBDRl9QYXJzZVByb3BlcnR5UmVjLCAqUENGX1BhcnNlUHJvcGVydHk7CisKKworICB0eXBlZGVmIHN0cnVjdCAgUENGX1Byb3BlcnR5UmVjXworICB7CisgICAgRlRfU3RyaW5nKiAgbmFtZTsKKyAgICBGVF9CeXRlICAgICBpc1N0cmluZzsKKworICAgIHVuaW9uCisgICAgeworICAgICAgRlRfU3RyaW5nKiAgYXRvbTsKKyAgICAgIEZUX0xvbmcgICAgIGw7CisgICAgICBGVF9VTG9uZyAgICB1bDsKKworICAgIH0gdmFsdWU7CisKKyAgfSBQQ0ZfUHJvcGVydHlSZWMsICpQQ0ZfUHJvcGVydHk7CisKKworICB0eXBlZGVmIHN0cnVjdCAgUENGX0NvbXByZXNzZWRfTWV0cmljUmVjXworICB7CisgICAgRlRfQnl0ZSAgbGVmdFNpZGVCZWFyaW5nOworICAgIEZUX0J5dGUgIHJpZ2h0U2lkZUJlYXJpbmc7CisgICAgRlRfQnl0ZSAgY2hhcmFjdGVyV2lkdGg7CisgICAgRlRfQnl0ZSAgYXNjZW50OworICAgIEZUX0J5dGUgIGRlc2NlbnQ7CisKKyAgfSBQQ0ZfQ29tcHJlc3NlZF9NZXRyaWNSZWMsICpQQ0ZfQ29tcHJlc3NlZF9NZXRyaWM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgUENGX01ldHJpY1JlY18KKyAgeworICAgIEZUX1Nob3J0ICBsZWZ0U2lkZUJlYXJpbmc7CisgICAgRlRfU2hvcnQgIHJpZ2h0U2lkZUJlYXJpbmc7CisgICAgRlRfU2hvcnQgIGNoYXJhY3RlcldpZHRoOworICAgIEZUX1Nob3J0ICBhc2NlbnQ7CisgICAgRlRfU2hvcnQgIGRlc2NlbnQ7CisgICAgRlRfU2hvcnQgIGF0dHJpYnV0ZXM7CisgICAgRlRfVUxvbmcgIGJpdHM7CisKKyAgfSBQQ0ZfTWV0cmljUmVjLCAqUENGX01ldHJpYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQQ0ZfQWNjZWxSZWNfCisgIHsKKyAgICBGVF9CeXRlICAgICAgICBub092ZXJsYXA7CisgICAgRlRfQnl0ZSAgICAgICAgY29uc3RhbnRNZXRyaWNzOworICAgIEZUX0J5dGUgICAgICAgIHRlcm1pbmFsRm9udDsKKyAgICBGVF9CeXRlICAgICAgICBjb25zdGFudFdpZHRoOworICAgIEZUX0J5dGUgICAgICAgIGlua0luc2lkZTsKKyAgICBGVF9CeXRlICAgICAgICBpbmtNZXRyaWNzOworICAgIEZUX0J5dGUgICAgICAgIGRyYXdEaXJlY3Rpb247CisgICAgRlRfTG9uZyAgICAgICAgZm9udEFzY2VudDsKKyAgICBGVF9Mb25nICAgICAgICBmb250RGVzY2VudDsKKyAgICBGVF9Mb25nICAgICAgICBtYXhPdmVybGFwOworICAgIFBDRl9NZXRyaWNSZWMgIG1pbmJvdW5kczsKKyAgICBQQ0ZfTWV0cmljUmVjICBtYXhib3VuZHM7CisgICAgUENGX01ldHJpY1JlYyAgaW5rX21pbmJvdW5kczsKKyAgICBQQ0ZfTWV0cmljUmVjICBpbmtfbWF4Ym91bmRzOworCisgIH0gUENGX0FjY2VsUmVjLCAqUENGX0FjY2VsOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBDRl9FbmNvZGluZ1JlY18KKyAgeworICAgIEZUX0xvbmcgICAgZW5jOworICAgIEZUX1VTaG9ydCAgZ2x5cGg7CisKKyAgfSBQQ0ZfRW5jb2RpbmdSZWMsICpQQ0ZfRW5jb2Rpbmc7CisKKworICB0eXBlZGVmIHN0cnVjdCAgUENGX0ZhY2VSZWNfCisgIHsKKyAgICBGVF9GYWNlUmVjICAgICByb290OworCisgICAgRlRfU3RyZWFtUmVjICAgY29tcF9zdHJlYW07CisgICAgRlRfU3RyZWFtICAgICAgY29tcF9zb3VyY2U7CisKKyAgICBjaGFyKiAgICAgICAgICBjaGFyc2V0X2VuY29kaW5nOworICAgIGNoYXIqICAgICAgICAgIGNoYXJzZXRfcmVnaXN0cnk7CisKKyAgICBQQ0ZfVG9jUmVjICAgICB0b2M7CisgICAgUENGX0FjY2VsUmVjICAgYWNjZWw7CisKKyAgICBpbnQgICAgICAgICAgICBucHJvcHM7CisgICAgUENGX1Byb3BlcnR5ICAgcHJvcGVydGllczsKKworICAgIEZUX1VMb25nICAgICAgIG5tZXRyaWNzOworICAgIFBDRl9NZXRyaWMgICAgIG1ldHJpY3M7CisgICAgRlRfVUxvbmcgICAgICAgbmVuY29kaW5nczsKKyAgICBQQ0ZfRW5jb2RpbmcgICBlbmNvZGluZ3M7CisKKyAgICBGVF9TaG9ydCAgICAgICBkZWZhdWx0Q2hhcjsKKworICAgIEZUX1VMb25nICAgICAgIGJpdG1hcHNGb3JtYXQ7CisKKyAgICBGVF9DaGFyTWFwICAgICBjaGFybWFwX2hhbmRsZTsKKyAgICBGVF9DaGFyTWFwUmVjICBjaGFybWFwOyAgLyogYSBzaW5nbGUgY2hhcm1hcCBwZXIgZmFjZSAqLworCisgIH0gUENGX0ZhY2VSZWMsICpQQ0ZfRmFjZTsKKworCisgIC8qIG1hY3JvcyBmb3IgcGNmIGZvbnQgZm9ybWF0ICovCisKKyNkZWZpbmUgTFNCRmlyc3QgIDAKKyNkZWZpbmUgTVNCRmlyc3QgIDEKKworI2RlZmluZSBQQ0ZfRklMRV9WRVJTSU9OICAgICAgICAoICggJ3AnIDw8IDI0ICkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAnYycgPDwgMTYgKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICdmJyA8PCAgOCApIHwgMSApCisjZGVmaW5lIFBDRl9GT1JNQVRfTUFTSyAgICAgICAgIDB4RkZGRkZGMDBVTAorCisjZGVmaW5lIFBDRl9ERUZBVUxUX0ZPUk1BVCAgICAgIDB4MDAwMDAwMDBVTAorI2RlZmluZSBQQ0ZfSU5LQk9VTkRTICAgICAgICAgICAweDAwMDAwMjAwVUwKKyNkZWZpbmUgUENGX0FDQ0VMX1dfSU5LQk9VTkRTICAgMHgwMDAwMDEwMFVMCisjZGVmaW5lIFBDRl9DT01QUkVTU0VEX01FVFJJQ1MgIDB4MDAwMDAxMDBVTAorCisjZGVmaW5lIFBDRl9GT1JNQVRfTUFUQ0goIGEsIGIgKSBcCisgICAgICAgICAgKCAoIChhKSAmIFBDRl9GT1JNQVRfTUFTSyApID09ICggKGIpICYgUENGX0ZPUk1BVF9NQVNLICkgKQorCisjZGVmaW5lIFBDRl9HTFlQSF9QQURfTUFTSyAgKCAzIDw8IDAgKQorI2RlZmluZSBQQ0ZfQllURV9NQVNLICAgICAgICggMSA8PCAyICkKKyNkZWZpbmUgUENGX0JJVF9NQVNLICAgICAgICAoIDEgPDwgMyApCisjZGVmaW5lIFBDRl9TQ0FOX1VOSVRfTUFTSyAgKCAzIDw8IDQgKQorCisjZGVmaW5lIFBDRl9CWVRFX09SREVSKCBmICkgXAorICAgICAgICAgICggKCAoZikgJiBQQ0ZfQllURV9NQVNLICkgPyBNU0JGaXJzdCA6IExTQkZpcnN0ICkKKyNkZWZpbmUgUENGX0JJVF9PUkRFUiggZiApIFwKKyAgICAgICAgICAoICggKGYpICYgUENGX0JJVF9NQVNLICkgPyBNU0JGaXJzdCA6IExTQkZpcnN0ICkKKyNkZWZpbmUgUENGX0dMWVBIX1BBRF9JTkRFWCggZiApIFwKKyAgICAgICAgICAoIChmKSAmIFBDRl9HTFlQSF9QQURfTUFTSyApCisjZGVmaW5lIFBDRl9HTFlQSF9QQUQoIGYgKSBcCisgICAgICAgICAgKCAxIDw8IFBDRl9HTFlQSF9QQURfSU5ERVgoIGYgKSApCisjZGVmaW5lIFBDRl9TQ0FOX1VOSVRfSU5ERVgoIGYgKSBcCisgICAgICAgICAgKCAoIChmKSAmIFBDRl9TQ0FOX1VOSVRfTUFTSyApID4+IDQgKQorI2RlZmluZSBQQ0ZfU0NBTl9VTklUKCBmICkgXAorICAgICAgICAgICggMSA8PCBQQ0ZfU0NBTl9VTklUX0lOREVYKCBmICkgKQorI2RlZmluZSBQQ0ZfRk9STUFUX0JJVFMoIGYgKSAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoZikgJiAoIFBDRl9HTFlQSF9QQURfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgUENGX0JZVEVfTUFTSyAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICBQQ0ZfQklUX01BU0sgICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgIFBDRl9TQ0FOX1VOSVRfTUFTSyApICkKKworI2RlZmluZSBQQ0ZfU0laRV9UT19JTkRFWCggcyApICAoIChzKSA9PSA0ID8gMiA6IChzKSA9PSAyID8gMSA6IDAgKQorI2RlZmluZSBQQ0ZfSU5ERVhfVE9fU0laRSggYiApICAoIDEgPDwgYiApCisKKyNkZWZpbmUgUENGX0ZPUk1BVCggYml0LCBieXRlLCBnbHlwaCwgc2NhbiApICAgICAgICAgIFwKKyAgICAgICAgICAoICggUENGX1NJWkVfVE9fSU5ERVgoIHNjYW4gKSAgICAgIDw8IDQgKSB8IFwKKyAgICAgICAgICAgICggKCAoYml0KSAgPT0gTVNCRmlyc3QgPyAxIDogMCApIDw8IDMgKSB8IFwKKyAgICAgICAgICAgICggKCAoYnl0ZSkgPT0gTVNCRmlyc3QgPyAxIDogMCApIDw8IDIgKSB8IFwKKyAgICAgICAgICAgICggUENGX1NJWkVfVE9fSU5ERVgoIGdseXBoICkgICAgIDw8IDAgKSApCisKKyNkZWZpbmUgUENGX1BST1BFUlRJRVMgICAgICAgICggMSA8PCAwICkKKyNkZWZpbmUgUENGX0FDQ0VMRVJBVE9SUyAgICAgICggMSA8PCAxICkKKyNkZWZpbmUgUENGX01FVFJJQ1MgICAgICAgICAgICggMSA8PCAyICkKKyNkZWZpbmUgUENGX0JJVE1BUFMgICAgICAgICAgICggMSA8PCAzICkKKyNkZWZpbmUgUENGX0lOS19NRVRSSUNTICAgICAgICggMSA8PCA0ICkKKyNkZWZpbmUgUENGX0JERl9FTkNPRElOR1MgICAgICggMSA8PCA1ICkKKyNkZWZpbmUgUENGX1NXSURUSFMgICAgICAgICAgICggMSA8PCA2ICkKKyNkZWZpbmUgUENGX0dMWVBIX05BTUVTICAgICAgICggMSA8PCA3ICkKKyNkZWZpbmUgUENGX0JERl9BQ0NFTEVSQVRPUlMgICggMSA8PCA4ICkKKworI2RlZmluZSBHTFlQSFBBRE9QVElPTlMgIDQgLyogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgKi8KKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwY2ZfbG9hZF9mb250KCBGVF9TdHJlYW0sCisgICAgICAgICAgICAgICAgIFBDRl9GYWNlICk7CisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUENGX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmZHJpdnIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZmRyaXZyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyMDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZmRyaXZyLmMKQEAgLTAsMCArMSw3MjkgQEAKKy8qICBwY2Zkcml2ci5jCisKKyAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgcGNmIGZpbGVzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgMjAwNi0yMDExLCAyMDEzLCAyMDE0IGJ5CisgICAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0daSVBfSAorI2luY2x1ZGUgRlRfTFpXX0gKKyNpbmNsdWRlIEZUX0JaSVAyX0gKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisjaW5jbHVkZSBGVF9CREZfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKKworI2luY2x1ZGUgInBjZi5oIgorI2luY2x1ZGUgInBjZmRyaXZyLmgiCisjaW5jbHVkZSAicGNmcmVhZC5oIgorCisjaW5jbHVkZSAicGNmZXJyb3IuaCIKKyNpbmNsdWRlICJwY2Z1dGlsLmgiCisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcGNmcmVhZAorCisjaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BjZmRyaXZlcgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBDRl9DTWFwUmVjXworICB7CisgICAgRlRfQ01hcFJlYyAgICByb290OworICAgIEZUX1VMb25nICAgICAgbnVtX2VuY29kaW5nczsKKyAgICBQQ0ZfRW5jb2RpbmcgIGVuY29kaW5nczsKKworICB9IFBDRl9DTWFwUmVjLCAqUENGX0NNYXA7CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGNmX2NtYXBfaW5pdCggRlRfQ01hcCAgICAgcGNmY21hcCwgICAvKiBQQ0ZfQ01hcCAqLworICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBpbml0X2RhdGEgKQorICB7CisgICAgUENGX0NNYXAgIGNtYXAgPSAoUENGX0NNYXApcGNmY21hcDsKKyAgICBQQ0ZfRmFjZSAgZmFjZSA9IChQQ0ZfRmFjZSlGVF9DTUFQX0ZBQ0UoIHBjZmNtYXAgKTsKKworICAgIEZUX1VOVVNFRCggaW5pdF9kYXRhICk7CisKKworICAgIGNtYXAtPm51bV9lbmNvZGluZ3MgPSBmYWNlLT5uZW5jb2RpbmdzOworICAgIGNtYXAtPmVuY29kaW5ncyAgICAgPSBmYWNlLT5lbmNvZGluZ3M7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBwY2ZfY21hcF9kb25lKCBGVF9DTWFwICBwY2ZjbWFwICkgICAgICAgICAvKiBQQ0ZfQ01hcCAqLworICB7CisgICAgUENGX0NNYXAgIGNtYXAgPSAoUENGX0NNYXApcGNmY21hcDsKKworCisgICAgY21hcC0+ZW5jb2RpbmdzICAgICA9IE5VTEw7CisgICAgY21hcC0+bnVtX2VuY29kaW5ncyA9IDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHBjZl9jbWFwX2NoYXJfaW5kZXgoIEZUX0NNYXAgICAgcGNmY21hcCwgIC8qIFBDRl9DTWFwICovCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgY2hhcmNvZGUgKQorICB7CisgICAgUENGX0NNYXAgICAgICBjbWFwICAgICAgPSAoUENGX0NNYXApcGNmY21hcDsKKyAgICBQQ0ZfRW5jb2RpbmcgIGVuY29kaW5ncyA9IGNtYXAtPmVuY29kaW5nczsKKyAgICBGVF9VTG9uZyAgICAgIG1pbiwgbWF4LCBtaWQ7CisgICAgRlRfVUludCAgICAgICByZXN1bHQgICAgPSAwOworCisKKyAgICBtaW4gPSAwOworICAgIG1heCA9IGNtYXAtPm51bV9lbmNvZGluZ3M7CisKKyAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgeworICAgICAgRlRfVUxvbmcgIGNvZGU7CisKKworICAgICAgbWlkICA9ICggbWluICsgbWF4ICkgPj4gMTsKKyAgICAgIGNvZGUgPSAoRlRfVUxvbmcpZW5jb2RpbmdzW21pZF0uZW5jOworCisgICAgICBpZiAoIGNoYXJjb2RlID09IGNvZGUgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBlbmNvZGluZ3NbbWlkXS5nbHlwaCArIDE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAoIGNoYXJjb2RlIDwgY29kZSApCisgICAgICAgIG1heCA9IG1pZDsKKyAgICAgIGVsc2UKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICBwY2ZfY21hcF9jaGFyX25leHQoIEZUX0NNYXAgICAgcGNmY21hcCwgICAvKiBQQ0ZfQ01hcCAqLworICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKmFjaGFyY29kZSApCisgIHsKKyAgICBQQ0ZfQ01hcCAgICAgIGNtYXAgICAgICA9IChQQ0ZfQ01hcClwY2ZjbWFwOworICAgIFBDRl9FbmNvZGluZyAgZW5jb2RpbmdzID0gY21hcC0+ZW5jb2RpbmdzOworICAgIEZUX1VMb25nICAgICAgbWluLCBtYXgsIG1pZDsKKyAgICBGVF9VTG9uZyAgICAgIGNoYXJjb2RlICA9ICphY2hhcmNvZGUgKyAxOworICAgIEZUX1VJbnQgICAgICAgcmVzdWx0ICAgID0gMDsKKworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBjbWFwLT5udW1fZW5jb2RpbmdzOworCisgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgIHsKKyAgICAgIEZUX1VMb25nICBjb2RlOworCisKKyAgICAgIG1pZCAgPSAoIG1pbiArIG1heCApID4+IDE7CisgICAgICBjb2RlID0gKEZUX1VMb25nKWVuY29kaW5nc1ttaWRdLmVuYzsKKworICAgICAgaWYgKCBjaGFyY29kZSA9PSBjb2RlICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gZW5jb2RpbmdzW21pZF0uZ2x5cGggKyAxOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggY2hhcmNvZGUgPCBjb2RlICkKKyAgICAgICAgbWF4ID0gbWlkOworICAgICAgZWxzZQorICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgIH0KKworICAgIGNoYXJjb2RlID0gMDsKKyAgICBpZiAoIG1pbiA8IGNtYXAtPm51bV9lbmNvZGluZ3MgKQorICAgIHsKKyAgICAgIGNoYXJjb2RlID0gKEZUX1VMb25nKWVuY29kaW5nc1ttaW5dLmVuYzsKKyAgICAgIHJlc3VsdCAgID0gZW5jb2RpbmdzW21pbl0uZ2x5cGggKyAxOworICAgIH0KKworICBFeGl0OgorICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJwY2ZfY21hcF9jaGFyX25leHQ6IGNoYXJjb2RlIDB4JXggPiAzMmJpdCBBUEkiICkpOworICAgICAgKmFjaGFyY29kZSA9IDA7CisgICAgICAvKiBYWFg6IHJlc3VsdCBzaG91bGQgYmUgY2hhbmdlZCB0byBpbmRpY2F0ZSBhbiBvdmVyZmxvdyBlcnJvciAqLworICAgIH0KKyAgICBlbHNlCisgICAgICAqYWNoYXJjb2RlID0gKEZUX1VJbnQzMiljaGFyY29kZTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfQ01hcF9DbGFzc1JlYyAgcGNmX2NtYXBfY2xhc3MgPQorICB7CisgICAgc2l6ZW9mICggUENGX0NNYXBSZWMgKSwKKyAgICBwY2ZfY21hcF9pbml0LAorICAgIHBjZl9jbWFwX2RvbmUsCisgICAgcGNmX2NtYXBfY2hhcl9pbmRleCwKKyAgICBwY2ZfY21hcF9jaGFyX25leHQsCisKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgIH07CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBQQ0ZfRmFjZV9Eb25lKCBGVF9GYWNlICBwY2ZmYWNlICkgICAgICAgICAvKiBQQ0ZfRmFjZSAqLworICB7CisgICAgUENGX0ZhY2UgICBmYWNlID0gKFBDRl9GYWNlKXBjZmZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworICAgIEZUX0ZSRUUoIGZhY2UtPmVuY29kaW5ncyApOworICAgIEZUX0ZSRUUoIGZhY2UtPm1ldHJpY3MgKTsKKworICAgIC8qIGZyZWUgcHJvcGVydGllcyAqLworICAgIGlmICggZmFjZS0+cHJvcGVydGllcyApCisgICAgeworICAgICAgRlRfSW50ICBpOworCisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgZmFjZS0+bnByb3BzOyBpKysgKQorICAgICAgeworICAgICAgICBQQ0ZfUHJvcGVydHkgIHByb3AgPSAmZmFjZS0+cHJvcGVydGllc1tpXTsKKworCisgICAgICAgIGlmICggcHJvcCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9GUkVFKCBwcm9wLT5uYW1lICk7CisgICAgICAgICAgaWYgKCBwcm9wLT5pc1N0cmluZyApCisgICAgICAgICAgICBGVF9GUkVFKCBwcm9wLT52YWx1ZS5hdG9tICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgRlRfRlJFRSggZmFjZS0+cHJvcGVydGllcyApOworICAgIH0KKworICAgIEZUX0ZSRUUoIGZhY2UtPnRvYy50YWJsZXMgKTsKKyAgICBGVF9GUkVFKCBwY2ZmYWNlLT5mYW1pbHlfbmFtZSApOworICAgIEZUX0ZSRUUoIHBjZmZhY2UtPnN0eWxlX25hbWUgKTsKKyAgICBGVF9GUkVFKCBwY2ZmYWNlLT5hdmFpbGFibGVfc2l6ZXMgKTsKKyAgICBGVF9GUkVFKCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nICk7CisgICAgRlRfRlJFRSggZmFjZS0+Y2hhcnNldF9yZWdpc3RyeSApOworCisgICAgLyogY2xvc2UgY29tcHJlc3NlZCBzdHJlYW0gaWYgYW55ICovCisgICAgaWYgKCBwY2ZmYWNlLT5zdHJlYW0gPT0gJmZhY2UtPmNvbXBfc3RyZWFtICkKKyAgICB7CisgICAgICBGVF9TdHJlYW1fQ2xvc2UoICZmYWNlLT5jb21wX3N0cmVhbSApOworICAgICAgcGNmZmFjZS0+c3RyZWFtID0gZmFjZS0+Y29tcF9zb3VyY2U7CisgICAgfQorICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgUENGX0ZhY2VfSW5pdCggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBwY2ZmYWNlLCAgICAgICAgLyogUENGX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIFBDRl9GYWNlICBmYWNlICA9IChQQ0ZfRmFjZSlwY2ZmYWNlOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIEZUX1VOVVNFRCggbnVtX3BhcmFtcyApOworICAgIEZUX1VOVVNFRCggcGFyYW1zICk7CisKKworICAgIEZUX1RSQUNFMigoICJQQ0YgZHJpdmVyXG4iICkpOworCisgICAgZXJyb3IgPSBwY2ZfbG9hZF9mb250KCBzdHJlYW0sIGZhY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBQQ0ZfRmFjZV9Eb25lKCBwY2ZmYWNlICk7CisKKyNpZiBkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCICkgIHx8IFwKKyAgICBkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcgKSAgIHx8IFwKKyAgICBkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMiApCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCCisgICAgICB7CisgICAgICAgIEZUX0Vycm9yICBlcnJvcjI7CisKKworICAgICAgICAvKiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgZ3ppcCBzdXBwb3J0ISAqLworICAgICAgICBlcnJvcjIgPSBGVF9TdHJlYW1fT3Blbkd6aXAoICZmYWNlLT5jb21wX3N0cmVhbSwgc3RyZWFtICk7CisgICAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvcjIsIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZXJyb3IgPSBlcnJvcjI7CisgICAgICB9CisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiAqLworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfTFpXCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfRXJyb3IgIGVycm9yMzsKKworCisgICAgICAgIC8qIHRoaXMgZGlkbid0IHdvcmssIHRyeSBMWlcgc3VwcG9ydCEgKi8KKyAgICAgICAgZXJyb3IzID0gRlRfU3RyZWFtX09wZW5MWlcoICZmYWNlLT5jb21wX3N0cmVhbSwgc3RyZWFtICk7CisgICAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvcjMsIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZXJyb3IgPSBlcnJvcjM7CisgICAgICB9CisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfTFpXICovCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMgorICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIEZUX0Vycm9yICBlcnJvcjQ7CisKKworICAgICAgICAvKiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgQnppcDIgc3VwcG9ydCEgKi8KKyAgICAgICAgZXJyb3I0ID0gRlRfU3RyZWFtX09wZW5CemlwMiggJmZhY2UtPmNvbXBfc3RyZWFtLCBzdHJlYW0gKTsKKyAgICAgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yNCwgVW5pbXBsZW1lbnRlZF9GZWF0dXJlICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBlcnJvciA9IGVycm9yNDsKKyAgICAgIH0KKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMiAqLworCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBmYWNlLT5jb21wX3NvdXJjZSA9IHN0cmVhbTsKKyAgICAgIHBjZmZhY2UtPnN0cmVhbSAgID0gJmZhY2UtPmNvbXBfc3RyZWFtOworCisgICAgICBzdHJlYW0gPSBwY2ZmYWNlLT5zdHJlYW07CisKKyAgICAgIGVycm9yID0gcGNmX2xvYWRfZm9udCggc3RyZWFtLCBmYWNlICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisjZWxzZSAvKiAhKEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIgfHwKKyAgICAgICAgICAgRlRfQ09ORklHX09QVElPTl9VU0VfTFpXIHx8CisgICAgICAgICAgIEZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyKSAqLworCisgICAgICBnb3RvIEZhaWw7CisKKyNlbmRpZgorICAgIH0KKworICAgIC8qIFBDRiBjb3VsZCBub3QgaGF2ZSBtdWx0aXBsZSBmYWNlIGluIHNpbmdsZSBmb250IGZpbGUuCisgICAgICogWFhYOiBub24temVybyBmYWNlX2luZGV4IGlzIGFscmVhZHkgaW52YWxpZCBhcmd1bWVudCwgYnV0CisgICAgICogICAgICBUeXBlMSwgVHlwZTQyIGRyaXZlciBoYXMgYSBjb252ZW50aW9uIHRvIHJldHVybgorICAgICAqICAgICAgYW4gaW52YWxpZCBhcmd1bWVudCBlcnJvciB3aGVuIHRoZSBmb250IGNvdWxkIGJlCisgICAgICogICAgICBvcGVuZWQgYnkgdGhlIHNwZWNpZmllZCBkcml2ZXIuCisgICAgICovCisgICAgaWYgKCBmYWNlX2luZGV4ID4gMCApIHsKKyAgICAgIEZUX0VSUk9SKCggIlBDRl9GYWNlX0luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKKyAgICAgIFBDRl9GYWNlX0RvbmUoIHBjZmZhY2UgKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKworICAgIC8qIHNldCB1cCBjaGFybWFwICovCisgICAgeworICAgICAgRlRfU3RyaW5nICAqY2hhcnNldF9yZWdpc3RyeSA9IGZhY2UtPmNoYXJzZXRfcmVnaXN0cnk7CisgICAgICBGVF9TdHJpbmcgICpjaGFyc2V0X2VuY29kaW5nID0gZmFjZS0+Y2hhcnNldF9lbmNvZGluZzsKKyAgICAgIEZUX0Jvb2wgICAgIHVuaWNvZGVfY2hhcm1hcCAgPSAwOworCisKKyAgICAgIGlmICggY2hhcnNldF9yZWdpc3RyeSAmJiBjaGFyc2V0X2VuY29kaW5nICkKKyAgICAgIHsKKyAgICAgICAgY2hhciogIHMgPSBjaGFyc2V0X3JlZ2lzdHJ5OworCisKKyAgICAgICAgLyogVWgsIG9oLCBjb21wYXJlIGZpcnN0IGxldHRlcnMgbWFudWFsbHkgdG8gYXZvaWQgZGVwZW5kZW5jeQorICAgICAgICAgICBvbiBsb2NhbGVzLiAqLworICAgICAgICBpZiAoICggc1swXSA9PSAnaScgfHwgc1swXSA9PSAnSScgKSAmJgorICAgICAgICAgICAgICggc1sxXSA9PSAncycgfHwgc1sxXSA9PSAnUycgKSAmJgorICAgICAgICAgICAgICggc1syXSA9PSAnbycgfHwgc1syXSA9PSAnTycgKSApCisgICAgICAgIHsKKyAgICAgICAgICBzICs9IDM7CisgICAgICAgICAgaWYgKCAhZnRfc3RyY21wKCBzLCAiMTA2NDYiICkgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICggIWZ0X3N0cmNtcCggcywgIjg4NTkiICkgJiYKKyAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggZmFjZS0+Y2hhcnNldF9lbmNvZGluZywgIjEiICkgKSApCisgICAgICAgICAgdW5pY29kZV9jaGFybWFwID0gMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB7CisgICAgICAgIEZUX0NoYXJNYXBSZWMgIGNoYXJtYXA7CisKKworICAgICAgICBjaGFybWFwLmZhY2UgICAgICAgID0gRlRfRkFDRSggZmFjZSApOworICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfTk9ORTsKKyAgICAgICAgLyogaW5pdGlhbCBwbGF0Zm9ybS9lbmNvZGluZyBzaG91bGQgaW5kaWNhdGUgdW5zZXQgc3RhdHVzPyAqLworICAgICAgICBjaGFybWFwLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERTsKKyAgICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX0FQUExFX0lEX0RFRkFVTFQ7CisKKyAgICAgICAgaWYgKCB1bmljb2RlX2NoYXJtYXAgKQorICAgICAgICB7CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX1VOSUNPREU7CisgICAgICAgICAgY2hhcm1hcC5wbGF0Zm9ybV9pZCA9IFRUX1BMQVRGT1JNX01JQ1JPU09GVDsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfTVNfSURfVU5JQ09ERV9DUzsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gRlRfQ01hcF9OZXcoICZwY2ZfY21hcF9jbGFzcywgTlVMTCwgJmNoYXJtYXAsIE5VTEwgKTsKKworI2lmIDAKKyAgICAgICAgLyogU2VsZWN0IGRlZmF1bHQgY2hhcm1hcCAqLworICAgICAgICBpZiAoIHBjZmZhY2UtPm51bV9jaGFybWFwcyApCisgICAgICAgICAgcGNmZmFjZS0+Y2hhcm1hcCA9IHBjZmZhY2UtPmNoYXJtYXBzWzBdOworI2VuZGlmCisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgUENGIGZpbGVcbiIgKSk7CisgICAgUENGX0ZhY2VfRG9uZSggcGNmZmFjZSApOworICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsgIC8qIGVycm9yICovCisgICAgZ290byBFeGl0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgUENGX1NpemVfU2VsZWN0KCBGVF9TaXplICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgc3RyaWtlX2luZGV4ICkKKyAgeworICAgIFBDRl9BY2NlbCAgYWNjZWwgPSAmKCAoUENGX0ZhY2Upc2l6ZS0+ZmFjZSApLT5hY2NlbDsKKworCisgICAgRlRfU2VsZWN0X01ldHJpY3MoIHNpemUtPmZhY2UsIHN0cmlrZV9pbmRleCApOworCisgICAgc2l6ZS0+bWV0cmljcy5hc2NlbmRlciAgICA9ICBhY2NlbC0+Zm9udEFzY2VudCA8PCA2OworICAgIHNpemUtPm1ldHJpY3MuZGVzY2VuZGVyICAgPSAtYWNjZWwtPmZvbnREZXNjZW50IDw8IDY7CisgICAgc2l6ZS0+bWV0cmljcy5tYXhfYWR2YW5jZSA9ICBhY2NlbC0+bWF4Ym91bmRzLmNoYXJhY3RlcldpZHRoIDw8IDY7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgUENGX1NpemVfUmVxdWVzdCggRlRfU2l6ZSAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApCisgIHsKKyAgICBQQ0ZfRmFjZSAgICAgICAgIGZhY2UgID0gKFBDRl9GYWNlKXNpemUtPmZhY2U7CisgICAgRlRfQml0bWFwX1NpemUqICBic2l6ZSA9IHNpemUtPmZhY2UtPmF2YWlsYWJsZV9zaXplczsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX1BpeGVsX1NpemUgKTsKKyAgICBGVF9Mb25nICAgICAgICAgIGhlaWdodDsKKworCisgICAgaGVpZ2h0ID0gRlRfUkVRVUVTVF9IRUlHSFQoIHJlcSApOworICAgIGhlaWdodCA9ICggaGVpZ2h0ICsgMzIgKSA+PiA2OworCisgICAgc3dpdGNoICggcmVxLT50eXBlICkKKyAgICB7CisgICAgY2FzZSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMOgorICAgICAgaWYgKCBoZWlnaHQgPT0gKCAoIGJzaXplLT55X3BwZW0gKyAzMiApID4+IDYgKSApCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNOgorICAgICAgaWYgKCBoZWlnaHQgPT0gKCBmYWNlLT5hY2NlbC5mb250QXNjZW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+YWNjZWwuZm9udERlc2NlbnQgKSApCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gUENGX1NpemVfU2VsZWN0KCBzaXplLCAwICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBQQ0ZfR2x5cGhfTG9hZCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApCisgIHsKKyAgICBQQ0ZfRmFjZSAgICBmYWNlICAgPSAoUENGX0ZhY2UpRlRfU0laRV9GQUNFKCBzaXplICk7CisgICAgRlRfU3RyZWFtICAgc3RyZWFtOworICAgIEZUX0Vycm9yICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9CaXRtYXAqICBiaXRtYXAgPSAmc2xvdC0+Yml0bWFwOworICAgIFBDRl9NZXRyaWMgIG1ldHJpYzsKKyAgICBGVF9VTG9uZyAgICBieXRlczsKKworICAgIEZUX1VOVVNFRCggbG9hZF9mbGFncyApOworCisKKyAgICBGVF9UUkFDRTEoKCAiUENGX0dseXBoX0xvYWQ6IGdseXBoIGluZGV4ICVkXG4iLCBnbHlwaF9pbmRleCApKTsKKworICAgIGlmICggIWZhY2UgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworCisgICAgaWYgKCBnbHlwaF9pbmRleCA+IDAgKQorICAgICAgZ2x5cGhfaW5kZXgtLTsKKworICAgIG1ldHJpYyA9IGZhY2UtPm1ldHJpY3MgKyBnbHlwaF9pbmRleDsKKworICAgIGJpdG1hcC0+cm93cyAgICAgICA9ICh1bnNpZ25lZCBpbnQpKCBtZXRyaWMtPmFzY2VudCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpYy0+ZGVzY2VudCApOworICAgIGJpdG1hcC0+d2lkdGggICAgICA9ICh1bnNpZ25lZCBpbnQpKCBtZXRyaWMtPnJpZ2h0U2lkZUJlYXJpbmcgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWMtPmxlZnRTaWRlQmVhcmluZyApOworICAgIGJpdG1hcC0+bnVtX2dyYXlzICA9IDE7CisgICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POworCisgICAgRlRfVFJBQ0U2KCggIkJJVF9PUkRFUiAlZCA7IEJZVEVfT1JERVIgJWQgOyBHTFlQSF9QQUQgJWRcbiIsCisgICAgICAgICAgICAgICAgICBQQ0ZfQklUX09SREVSKCBmYWNlLT5iaXRtYXBzRm9ybWF0ICksCisgICAgICAgICAgICAgICAgICBQQ0ZfQllURV9PUkRFUiggZmFjZS0+Yml0bWFwc0Zvcm1hdCApLAorICAgICAgICAgICAgICAgICAgUENGX0dMWVBIX1BBRCggZmFjZS0+Yml0bWFwc0Zvcm1hdCApICkpOworCisgICAgc3dpdGNoICggUENGX0dMWVBIX1BBRCggZmFjZS0+Yml0bWFwc0Zvcm1hdCApICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgYml0bWFwLT5waXRjaCA9IChpbnQpKCAoIGJpdG1hcC0+d2lkdGggKyA3ICkgPj4gMyApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBiaXRtYXAtPnBpdGNoID0gKGludCkoICggKCBiaXRtYXAtPndpZHRoICsgMTUgKSA+PiA0ICkgPDwgMSApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDQ6CisgICAgICBiaXRtYXAtPnBpdGNoID0gKGludCkoICggKCBiaXRtYXAtPndpZHRoICsgMzEgKSA+PiA1ICkgPDwgMiApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDg6CisgICAgICBiaXRtYXAtPnBpdGNoID0gKGludCkoICggKCBiaXRtYXAtPndpZHRoICsgNjMgKSA+PiA2ICkgPDwgMyApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgfQorCisgICAgLyogWFhYOiB0byBkbzogYXJlIHRoZXJlIGNhc2VzIHRoYXQgbmVlZCByZXBhZGRpbmcgdGhlIGJpdG1hcD8gKi8KKyAgICBieXRlcyA9IChGVF9VTG9uZyliaXRtYXAtPnBpdGNoICogYml0bWFwLT5yb3dzOworCisgICAgZXJyb3IgPSBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwKCBzbG90LCAoRlRfVUxvbmcpYnl0ZXMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG1ldHJpYy0+Yml0cyApICAgICAgICAgIHx8CisgICAgICAgICBGVF9TVFJFQU1fUkVBRCggYml0bWFwLT5idWZmZXIsIGJ5dGVzICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBQQ0ZfQklUX09SREVSKCBmYWNlLT5iaXRtYXBzRm9ybWF0ICkgIT0gTVNCRmlyc3QgKQorICAgICAgQml0T3JkZXJJbnZlcnQoIGJpdG1hcC0+YnVmZmVyLCBieXRlcyApOworCisgICAgaWYgKCAoIFBDRl9CWVRFX09SREVSKCBmYWNlLT5iaXRtYXBzRm9ybWF0ICkgIT0KKyAgICAgICAgICAgUENGX0JJVF9PUkRFUiggZmFjZS0+Yml0bWFwc0Zvcm1hdCApICApICkKKyAgICB7CisgICAgICBzd2l0Y2ggKCBQQ0ZfU0NBTl9VTklUKCBmYWNlLT5iaXRtYXBzRm9ybWF0ICkgKQorICAgICAgeworICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBUd29CeXRlU3dhcCggYml0bWFwLT5idWZmZXIsIGJ5dGVzICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDQ6CisgICAgICAgIEZvdXJCeXRlU3dhcCggYml0bWFwLT5idWZmZXIsIGJ5dGVzICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHNsb3QtPmZvcm1hdCAgICAgID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKKyAgICBzbG90LT5iaXRtYXBfbGVmdCA9IG1ldHJpYy0+bGVmdFNpZGVCZWFyaW5nOworICAgIHNsb3QtPmJpdG1hcF90b3AgID0gbWV0cmljLT5hc2NlbnQ7CisKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IChGVF9Qb3MpKCBtZXRyaWMtPmNoYXJhY3RlcldpZHRoIDw8IDYgKTsKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3MpKCBtZXRyaWMtPmxlZnRTaWRlQmVhcmluZyA8PCA2ICk7CisgICAgc2xvdC0+bWV0cmljcy5ob3JpQmVhcmluZ1kgPSAoRlRfUG9zKSggbWV0cmljLT5hc2NlbnQgPDwgNiApOworICAgIHNsb3QtPm1ldHJpY3Mud2lkdGggICAgICAgID0gKEZUX1BvcykoICggbWV0cmljLT5yaWdodFNpZGVCZWFyaW5nIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpYy0+bGVmdFNpZGVCZWFyaW5nICkgPDwgNiApOworICAgIHNsb3QtPm1ldHJpY3MuaGVpZ2h0ICAgICAgID0gKEZUX1BvcykoIGJpdG1hcC0+cm93cyA8PCA2ICk7CisKKyAgICBmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MoICZzbG90LT5tZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBmYWNlLT5hY2NlbC5mb250QXNjZW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+YWNjZWwuZm9udERlc2NlbnQgKSA8PCA2ICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgLyoKKyAgKgorICAqICBCREYgU0VSVklDRQorICAqCisgICovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHBjZl9nZXRfYmRmX3Byb3BlcnR5KCBQQ0ZfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgQkRGX1Byb3BlcnR5UmVjICAqYXByb3BlcnR5ICkKKyAgeworICAgIFBDRl9Qcm9wZXJ0eSAgcHJvcDsKKworCisgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCBwcm9wX25hbWUgKTsKKyAgICBpZiAoIHByb3AgIT0gTlVMTCApCisgICAgeworICAgICAgaWYgKCBwcm9wLT5pc1N0cmluZyApCisgICAgICB7CisgICAgICAgIGFwcm9wZXJ0eS0+dHlwZSAgID0gQkRGX1BST1BFUlRZX1RZUEVfQVRPTTsKKyAgICAgICAgYXByb3BlcnR5LT51LmF0b20gPSBwcm9wLT52YWx1ZS5hdG9tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIHByb3AtPnZhbHVlLmwgPiAweDdGRkZGRkZGTCB8fCBwcm9wLT52YWx1ZS5sIDwgKCAtMSAtIDB4N0ZGRkZGRkZMICkgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggInBjZl9nZXRfYmRmX3Byb3BlcnR5OiAiICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICJ0b28gbGFyZ2UgaW50ZWdlciAweCV4IGlzIHRydW5jYXRlZFxuIiApKTsKKyAgICAgICAgfQorICAgICAgICAvKiBBcHBhcmVudGx5LCB0aGUgUENGIGRyaXZlciBsb2FkcyBhbGwgcHJvcGVydGllcyBhcyBzaWduZWQgaW50ZWdlcnMhCisgICAgICAgICAqIFRoaXMgcmVhbGx5IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHByb2JsZW0sIGJlY2F1c2UgdGhpcyBpcworICAgICAgICAgKiBzdWZmaWNpZW50IGZvciBhbnkgbWVhbmluZ2Z1bCB2YWx1ZXMuCisgICAgICAgICAqLworICAgICAgICBhcHJvcGVydHktPnR5cGUgICAgICA9IEJERl9QUk9QRVJUWV9UWVBFX0lOVEVHRVI7CisgICAgICAgIGFwcm9wZXJ0eS0+dS5pbnRlZ2VyID0gKEZUX0ludDMyKXByb3AtPnZhbHVlLmw7CisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHBjZl9nZXRfY2hhcnNldF9pZCggUENGX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9yZWdpc3RyeSApCisgIHsKKyAgICAqYWNoYXJzZXRfZW5jb2RpbmcgPSBmYWNlLT5jaGFyc2V0X2VuY29kaW5nOworICAgICphY2hhcnNldF9yZWdpc3RyeSA9IGZhY2UtPmNoYXJzZXRfcmVnaXN0cnk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfQkRGUmVjICBwY2Zfc2VydmljZV9iZGYgPQorICB7CisgICAgKEZUX0JERl9HZXRDaGFyc2V0SWRGdW5jKXBjZl9nZXRfY2hhcnNldF9pZCwKKyAgICAoRlRfQkRGX0dldFByb3BlcnR5RnVuYykgcGNmX2dldF9iZGZfcHJvcGVydHkKKyAgfTsKKworCisgLyoKKyAgKgorICAqICBTRVJWSUNFIExJU1QKKyAgKgorICAqLworCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgcGNmX3NlcnZpY2VzW10gPQorICB7CisgICAgeyBGVF9TRVJWSUNFX0lEX0JERiwgICAgICAgICAmcGNmX3NlcnZpY2VfYmRmIH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFULCBGVF9GT05UX0ZPUk1BVF9QQ0YgfSwKKyAgICB7IE5VTEwsIE5VTEwgfQorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Nb2R1bGVfSW50ZXJmYWNlICkKKyAgcGNmX2RyaXZlcl9yZXF1ZXN0ZXIoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbmFtZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIHBjZl9zZXJ2aWNlcywgbmFtZSApOworICB9CisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKKyAgY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICBwY2ZfZHJpdmVyX2NsYXNzID0KKyAgeworICAgIHsKKyAgICAgIEZUX01PRFVMRV9GT05UX0RSSVZFUiAgICAgICAgfAorICAgICAgRlRfTU9EVUxFX0RSSVZFUl9OT19PVVRMSU5FUywKKyAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorCisgICAgICAicGNmIiwKKyAgICAgIDB4MTAwMDBMLAorICAgICAgMHgyMDAwMEwsCisKKyAgICAgIDAsCisKKyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiBGVF9Nb2R1bGVfQ29uc3RydWN0b3IgKi8KKyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiBGVF9Nb2R1bGVfRGVzdHJ1Y3RvciAgKi8KKyAgICAgIHBjZl9kcml2ZXJfcmVxdWVzdGVyCisgICAgfSwKKworICAgIHNpemVvZiAoIFBDRl9GYWNlUmVjICksCisgICAgc2l6ZW9mICggRlRfU2l6ZVJlYyApLAorICAgIHNpemVvZiAoIEZUX0dseXBoU2xvdFJlYyApLAorCisgICAgUENGX0ZhY2VfSW5pdCwKKyAgICBQQ0ZfRmFjZV9Eb25lLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX1NpemVfSW5pdEZ1bmMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9TaXplX0RvbmVGdW5jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogRlRfU2xvdF9Jbml0RnVuYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX1Nsb3RfRG9uZUZ1bmMgKi8KKworICAgIFBDRl9HbHlwaF9Mb2FkLAorCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogRlRfRmFjZV9HZXRLZXJuaW5nRnVuYyAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0F0dGFjaEZ1bmMgICAgICAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICovCisKKyAgICBQQ0ZfU2l6ZV9SZXF1ZXN0LAorICAgIFBDRl9TaXplX1NlbGVjdAorICB9OworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmZHJpdnIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZmRyaXZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2MTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZmRyaXZyLmgKQEAgLTAsMCArMSw0OCBAQAorLyogIHBjZmRyaXZyLmgKKworICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBwY2YgZm9udHMKKworICBDb3B5cmlnaHQgMjAwMC0yMDAxLCAyMDAyIGJ5CisgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisqLworCisKKyNpZm5kZWYgX19QQ0ZEUklWUl9IX18KKyNkZWZpbmUgX19QQ0ZEUklWUl9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX0RyaXZlcl9DbGFzc1JlYyApICBwY2ZfZHJpdmVyX2NsYXNzOworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fUENGRFJJVlJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2ZlcnJvci5oIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTFmZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmZXJyb3IuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwY2ZlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUENGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFBDRiBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUENGRVJST1JfSF9fCisjZGVmaW5lIF9fUENGRVJST1JfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBDRl9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUENGCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX1BDRkVSUk9SX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmcmVhZC5jIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWFmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2ZyZWFkLmMKQEAgLTAsMCArMSwxMzQ5IEBACisvKiAgcGNmcmVhZC5jCisKKyAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgcGNmIGZvbnRzCisKKyAgQ29weXJpZ2h0IDIwMDAtMjAxMCwgMjAxMi0yMDE0IGJ5CisgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKyNpbmNsdWRlICJwY2YuaCIKKyNpbmNsdWRlICJwY2ZyZWFkLmgiCisKKyNpbmNsdWRlICJwY2ZlcnJvci5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcGNmcmVhZAorCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIHRhYmxlTmFtZXNbXSA9CisgIHsKKyAgICAicHJvcCIsICJhY2NsIiwgIm10cmNzIiwgImJtcHMiLCAiaW10cmNzIiwKKyAgICAiZW5jIiwgInN3aWR0aCIsICJuYW1lcyIsICJhY2NlbCIKKyAgfTsKKyNlbmRpZgorCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfdG9jX2hlYWRlcltdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBQQ0ZfVG9jUmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggOCApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUoIHZlcnNpb24gKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBjb3VudCApLAorICAgIEZUX0ZSQU1FX0VORAorICB9OworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfdGFibGVfaGVhZGVyW10gPQorICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBDRl9UYWJsZVJlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIDE2ICApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUoIHR5cGUgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBmb3JtYXQgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBzaXplICksICAgLyogcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIDQgKi8KKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBvZmZzZXQgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2ZfcmVhZF9UT0MoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIFBDRl9Ub2MgICAgdG9jID0gJmZhY2UtPnRvYzsKKyAgICBQQ0ZfVGFibGUgIHRhYmxlczsKKworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRSggZmFjZSApLT5tZW1vcnk7CisgICAgRlRfVUludCAgICBuOworCisgICAgRlRfVUxvbmcgICBzaXplOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCAwICkgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHBjZl90b2NfaGVhZGVyLCB0b2MgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7CisKKyAgICBpZiAoIHRvYy0+dmVyc2lvbiAhPSBQQ0ZfRklMRV9WRVJTSU9OICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgdG9jLT5jb3VudCAgID4gIEZUX0FSUkFZX01BWCggZmFjZS0+dG9jLnRhYmxlcyApIHx8CisgICAgICAgICB0b2MtPmNvdW50ICAgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggZmFjZS0+dG9jLnRhYmxlcywgdG9jLT5jb3VudCApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworCisgICAgdGFibGVzID0gZmFjZS0+dG9jLnRhYmxlczsKKyAgICBmb3IgKCBuID0gMDsgbiA8IHRvYy0+Y291bnQ7IG4rKyApCisgICAgeworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHBjZl90YWJsZV9oZWFkZXIsIHRhYmxlcyApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgdGFibGVzKys7CisgICAgfQorCisgICAgLyogU29ydCB0YWJsZXMgYW5kIGNoZWNrIGZvciBvdmVybGFwcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxtb3N0ICAgICAgKi8KKyAgICAvKiBhbHdheXMgb3JkZXJlZCBhbHJlYWR5LCBhbiBpbi1wbGFjZSBidWJibGUgc29ydCB3aXRoIHNpbXVsdGFuZW91cyAqLworICAgIC8qIGJvdW5kYXJ5IGNoZWNraW5nIHNlZW1zIGFwcHJvcHJpYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdGFibGVzID0gZmFjZS0+dG9jLnRhYmxlczsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgdG9jLT5jb3VudCAtIDE7IG4rKyApCisgICAgeworICAgICAgRlRfVUludCAgaSwgaGF2ZV9jaGFuZ2U7CisKKworICAgICAgaGF2ZV9jaGFuZ2UgPSAwOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IHRvYy0+Y291bnQgLSAxIC0gbjsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgUENGX1RhYmxlUmVjICB0bXA7CisKKworICAgICAgICBpZiAoIHRhYmxlc1tpXS5vZmZzZXQgPiB0YWJsZXNbaSArIDFdLm9mZnNldCApCisgICAgICAgIHsKKyAgICAgICAgICB0bXAgICAgICAgICAgID0gdGFibGVzW2ldOworICAgICAgICAgIHRhYmxlc1tpXSAgICAgPSB0YWJsZXNbaSArIDFdOworICAgICAgICAgIHRhYmxlc1tpICsgMV0gPSB0bXA7CisKKyAgICAgICAgICBoYXZlX2NoYW5nZSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICggdGFibGVzW2ldLnNpemUgICA+IHRhYmxlc1tpICsgMV0ub2Zmc2V0ICkgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICggdGFibGVzW2ldLm9mZnNldCA+IHRhYmxlc1tpICsgMV0ub2Zmc2V0IC0gdGFibGVzW2ldLnNpemUgKSApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09mZnNldCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICFoYXZlX2NoYW5nZSApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgICogIFdlIG5vdyBjaGVjayB3aGV0aGVyIHRoZSBgc2l6ZScgYW5kIGBvZmZzZXQnIHZhbHVlcyBhcmUgcmVhc29uYWJsZToKKyAgICAgKiAgYG9mZnNldCcgKyBgc2l6ZScgbXVzdCBub3QgZXhjZWVkIHRoZSBzdHJlYW0gc2l6ZS4KKyAgICAgKgorICAgICAqICBOb3RlLCBob3dldmVyLCB0aGF0IFgxMSdzIGBwY2ZXcml0ZUZvbnQnIHJvdXRpbmUgKHVzZWQgYnkgdGhlCisgICAgICogIGBiZGZ0b3BjZicgcHJvZ3JhbSB0byBjcmVhdGUgUERGIGZvbnQgZmlsZXMpIGhhcyB0d28gc3BlY2lhbAorICAgICAqICBmZWF0dXJlcy4KKyAgICAgKgorICAgICAqICAtIEl0IGFsd2F5cyBhc3NpZ25zIHRoZSBhY2NlbGVyYXRvciB0YWJsZSBhIHNpemUgb2YgMTAwIGJ5dGVzIGluIHRoZQorICAgICAqICAgIFRPQywgcmVnYXJkbGVzcyBvZiBpdHMgcmVhbCBzaXplLCB3aGljaCBjYW4gdmFyeSBiZXR3ZWVuIDM0IGFuZCA3MgorICAgICAqICAgIGJ5dGVzLgorICAgICAqCisgICAgICogIC0gRHVlIHRvIHRoZSB3YXkgdGhlIHJvdXRpbmUgaXMgZGVzaWduZWQsIGl0IHNoaXBzIG91dCB0aGUgbGFzdCBmb250CisgICAgICogICAgdGFibGUgd2l0aCBpdHMgcmVhbCBzaXplLCBpZ25vcmluZyB0aGUgVE9DJ3Mgc2l6ZSB2YWx1ZS4gIFNpbmNlCisgICAgICogICAgdGhlIFRPQyBzaXplIHZhbHVlcyBhcmUgYWx3YXlzIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiA0LCB0aGUKKyAgICAgKiAgICBkaWZmZXJlbmNlIGNhbiBiZSB1cCB0byB0aHJlZSBieXRlcyBmb3IgYWxsIHRhYmxlcyBleGNlcHQgdGhlCisgICAgICogICAgYWNjZWxlcmF0b3IgdGFibGUsIGZvciB3aGljaCB0aGUgZGlmZmVyZW5jZSBjYW4gYmUgYXMgbGFyZ2UgYXMgNjYKKyAgICAgKiAgICBieXRlcy4KKyAgICAgKgorICAgICAqLworCisgICAgdGFibGVzID0gZmFjZS0+dG9jLnRhYmxlczsKKyAgICBzaXplICAgPSBzdHJlYW0tPnNpemU7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IHRvYy0+Y291bnQgLSAxOyBuKysgKQorICAgIHsKKyAgICAgIC8qIHdlIG5lZWQgdHdvIGNoZWNrcyB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgICAgaWYgKCAoIHRhYmxlcy0+c2l6ZSAgID4gc2l6ZSAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICAgICggdGFibGVzLT5vZmZzZXQgPiBzaXplIC0gdGFibGVzLT5zaXplICkgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICAgIHRhYmxlcysrOworICAgIH0KKworICAgIC8qIG9ubHkgY2hlY2sgYHRhYmxlcy0+b2Zmc2V0JyBmb3IgbGFzdCB0YWJsZSBlbGVtZW50IC4uLiAqLworICAgIGlmICggKCB0YWJsZXMtPm9mZnNldCA+IHNpemUgKSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICAvKiAuLi4gYW5kIGFkanVzdCBgdGFibGVzLT5zaXplJyB0byB0aGUgcmVhbCB2YWx1ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAoIHRhYmxlcy0+c2l6ZSA+IHNpemUgLSB0YWJsZXMtPm9mZnNldCApCisgICAgICB0YWJsZXMtPnNpemUgPSBzaXplIC0gdGFibGVzLT5vZmZzZXQ7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgeworICAgICAgRlRfVUludCAgICAgIGksIGo7CisgICAgICBjb25zdCBjaGFyKiAgbmFtZSA9ICI/IjsKKworCisgICAgICBGVF9UUkFDRTQoKCAicGNmX3JlYWRfVE9DOlxuIiApKTsKKworICAgICAgRlRfVFJBQ0U0KCggIiAgbnVtYmVyIG9mIHRhYmxlczogJWxkXG4iLCBmYWNlLT50b2MuY291bnQgKSk7CisKKyAgICAgIHRhYmxlcyA9IGZhY2UtPnRvYy50YWJsZXM7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IHRvYy0+Y291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgc2l6ZW9mICggdGFibGVOYW1lcyApIC8gc2l6ZW9mICggdGFibGVOYW1lc1swXSApOworICAgICAgICAgICAgICBqKysgKQorICAgICAgICAgIGlmICggdGFibGVzW2ldLnR5cGUgPT0gKEZUX1VJbnQpKCAxIDw8IGogKSApCisgICAgICAgICAgICBuYW1lID0gdGFibGVOYW1lc1tqXTsKKworICAgICAgICBGVF9UUkFDRTQoKCAiICAlZDogdHlwZT0lcywgZm9ybWF0PTB4JVgsICIKKyAgICAgICAgICAgICAgICAgICAgInNpemU9JWxkICgweCVsWCksIG9mZnNldD0lbGQgKDB4JWxYKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgdGFibGVzW2ldLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgdGFibGVzW2ldLnNpemUsIHRhYmxlc1tpXS5zaXplLAorICAgICAgICAgICAgICAgICAgICB0YWJsZXNbaV0ub2Zmc2V0LCB0YWJsZXNbaV0ub2Zmc2V0ICkpOworICAgICAgfQorICAgIH0KKworI2VuZGlmCisKKyAgICByZXR1cm4gRlRfRXJyX09rOworCisgIEV4aXQ6CisgICAgRlRfRlJFRSggZmFjZS0+dG9jLnRhYmxlcyApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNkZWZpbmUgUENGX01FVFJJQ19TSVpFICAxMgorCisgIHN0YXRpYworICBjb25zdCBGVF9GcmFtZV9GaWVsZCAgcGNmX21ldHJpY19oZWFkZXJbXSA9CisgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgUENGX01ldHJpY1JlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIFBDRl9NRVRSSUNfU0laRSApLAorICAgICAgRlRfRlJBTUVfU0hPUlRfTEUoIGxlZnRTaWRlQmVhcmluZyApLAorICAgICAgRlRfRlJBTUVfU0hPUlRfTEUoIHJpZ2h0U2lkZUJlYXJpbmcgKSwKKyAgICAgIEZUX0ZSQU1FX1NIT1JUX0xFKCBjaGFyYWN0ZXJXaWR0aCApLAorICAgICAgRlRfRlJBTUVfU0hPUlRfTEUoIGFzY2VudCApLAorICAgICAgRlRfRlJBTUVfU0hPUlRfTEUoIGRlc2NlbnQgKSwKKyAgICAgIEZUX0ZSQU1FX1NIT1JUX0xFKCBhdHRyaWJ1dGVzICksCisgICAgRlRfRlJBTUVfRU5ECisgIH07CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBjZl9tZXRyaWNfbXNiX2hlYWRlcltdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBQQ0ZfTWV0cmljUmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggUENGX01FVFJJQ19TSVpFICksCisgICAgICBGVF9GUkFNRV9TSE9SVCggbGVmdFNpZGVCZWFyaW5nICksCisgICAgICBGVF9GUkFNRV9TSE9SVCggcmlnaHRTaWRlQmVhcmluZyApLAorICAgICAgRlRfRlJBTUVfU0hPUlQoIGNoYXJhY3RlcldpZHRoICksCisgICAgICBGVF9GUkFNRV9TSE9SVCggYXNjZW50ICksCisgICAgICBGVF9GUkFNRV9TSE9SVCggZGVzY2VudCApLAorICAgICAgRlRfRlJBTUVfU0hPUlQoIGF0dHJpYnV0ZXMgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworCisjZGVmaW5lIFBDRl9DT01QUkVTU0VEX01FVFJJQ19TSVpFICA1CisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfY29tcHJlc3NlZF9tZXRyaWNfaGVhZGVyW10gPQorICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBDRl9Db21wcmVzc2VkX01ldHJpY1JlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIFBDRl9DT01QUkVTU0VEX01FVFJJQ19TSVpFICksCisgICAgICBGVF9GUkFNRV9CWVRFKCBsZWZ0U2lkZUJlYXJpbmcgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUoIHJpZ2h0U2lkZUJlYXJpbmcgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUoIGNoYXJhY3RlcldpZHRoICksCisgICAgICBGVF9GUkFNRV9CWVRFKCBhc2NlbnQgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUoIGRlc2NlbnQgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2ZfZ2V0X21ldHJpYyggRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgUENGX01ldHJpYyAgbWV0cmljICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICkKKyAgICB7CisgICAgICBjb25zdCBGVF9GcmFtZV9GaWVsZCogIGZpZWxkczsKKworCisgICAgICAvKiBwYXJzaW5nIG5vcm1hbCBtZXRyaWNzICovCisgICAgICBmaWVsZHMgPSBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QKKyAgICAgICAgICAgICAgID8gcGNmX21ldHJpY19tc2JfaGVhZGVyCisgICAgICAgICAgICAgICA6IHBjZl9tZXRyaWNfaGVhZGVyOworCisgICAgICAvKiB0aGUgZm9sbG93aW5nIHNldHMgYGVycm9yJyBidXQgZG9lc24ndCByZXR1cm4gaW4gY2FzZSBvZiBmYWlsdXJlICovCisgICAgICAodm9pZClGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIGZpZWxkcywgbWV0cmljICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBQQ0ZfQ29tcHJlc3NlZF9NZXRyaWNSZWMgIGNvbXByOworCisKKyAgICAgIC8qIHBhcnNpbmcgY29tcHJlc3NlZCBtZXRyaWNzICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggcGNmX2NvbXByZXNzZWRfbWV0cmljX2hlYWRlciwgJmNvbXByICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIG1ldHJpYy0+bGVmdFNpZGVCZWFyaW5nICA9IChGVF9TaG9ydCkoIGNvbXByLmxlZnRTaWRlQmVhcmluZyAgLSAweDgwICk7CisgICAgICBtZXRyaWMtPnJpZ2h0U2lkZUJlYXJpbmcgPSAoRlRfU2hvcnQpKCBjb21wci5yaWdodFNpZGVCZWFyaW5nIC0gMHg4MCApOworICAgICAgbWV0cmljLT5jaGFyYWN0ZXJXaWR0aCAgID0gKEZUX1Nob3J0KSggY29tcHIuY2hhcmFjdGVyV2lkdGggICAtIDB4ODAgKTsKKyAgICAgIG1ldHJpYy0+YXNjZW50ICAgICAgICAgICA9IChGVF9TaG9ydCkoIGNvbXByLmFzY2VudCAgICAgICAgICAgLSAweDgwICk7CisgICAgICBtZXRyaWMtPmRlc2NlbnQgICAgICAgICAgPSAoRlRfU2hvcnQpKCBjb21wci5kZXNjZW50ICAgICAgICAgIC0gMHg4MCApOworICAgICAgbWV0cmljLT5hdHRyaWJ1dGVzICAgICAgID0gMDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2Zfc2Vla190b190YWJsZV90eXBlKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUENGX1RhYmxlICB0YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgbnRhYmxlcywgLyogc2FtZSBhcyBQQ0ZfVG9jLT5jb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqYWZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICphc2l6ZSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICBGVF9VTG9uZyAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBudGFibGVzOyBpKysgKQorICAgICAgaWYgKCB0YWJsZXNbaV0udHlwZSA9PSB0eXBlICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzdHJlYW0tPnBvcyA+IHRhYmxlc1tpXS5vZmZzZXQgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fU2tpcCApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIHRhYmxlc1tpXS5vZmZzZXQgLSBzdHJlYW0tPnBvcyApICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX1NraXAgKTsKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKworICAgICAgICAqYXNpemUgICA9IHRhYmxlc1tpXS5zaXplOworICAgICAgICAqYWZvcm1hdCA9IHRhYmxlc1tpXS5mb3JtYXQ7CisKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICAgIH0KKworICBGYWlsOgorICAgICphc2l6ZSA9IDA7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfQm9vbAorICBwY2ZfaGFzX3RhYmxlX3R5cGUoIFBDRl9UYWJsZSAgdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgbnRhYmxlcywgLyogc2FtZSBhcyBQQ0ZfVG9jLT5jb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdHlwZSApCisgIHsKKyAgICBGVF9VTG9uZyAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBudGFibGVzOyBpKysgKQorICAgICAgaWYgKCB0YWJsZXNbaV0udHlwZSA9PSB0eXBlICkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworCisjZGVmaW5lIFBDRl9QUk9QRVJUWV9TSVpFICA5CisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfcHJvcGVydHlfaGVhZGVyW10gPQorICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBDRl9QYXJzZVByb3BlcnR5UmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggUENGX1BST1BFUlRZX1NJWkUgKSwKKyAgICAgIEZUX0ZSQU1FX0xPTkdfTEUoIG5hbWUgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAoIGlzU3RyaW5nICksCisgICAgICBGVF9GUkFNRV9MT05HX0xFKCB2YWx1ZSApLAorICAgIEZUX0ZSQU1FX0VORAorICB9OworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfcHJvcGVydHlfbXNiX2hlYWRlcltdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBQQ0ZfUGFyc2VQcm9wZXJ0eVJlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIFBDRl9QUk9QRVJUWV9TSVpFICksCisgICAgICBGVF9GUkFNRV9MT05HKCBuYW1lICksCisgICAgICBGVF9GUkFNRV9CWVRFKCBpc1N0cmluZyApLAorICAgICAgRlRfRlJBTUVfTE9ORyggdmFsdWUgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworCisgIEZUX0xPQ0FMX0RFRiggUENGX1Byb3BlcnR5ICkKKyAgcGNmX2ZpbmRfcHJvcGVydHkoIFBDRl9GYWNlICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wICkKKyAgeworICAgIFBDRl9Qcm9wZXJ0eSAgcHJvcGVydGllcyA9IGZhY2UtPnByb3BlcnRpZXM7CisgICAgRlRfQm9vbCAgICAgICBmb3VuZCAgICAgID0gMDsKKyAgICBpbnQgICAgICAgICAgIGk7CisKKworICAgIGZvciAoIGkgPSAwIDsgaSA8IGZhY2UtPm5wcm9wcyAmJiAhZm91bmQ7IGkrKyApCisgICAgeworICAgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0aWVzW2ldLm5hbWUsIHByb3AgKSApCisgICAgICAgIGZvdW5kID0gMTsKKyAgICB9CisKKyAgICBpZiAoIGZvdW5kICkKKyAgICAgIHJldHVybiBwcm9wZXJ0aWVzICsgaSAtIDE7CisgICAgZWxzZQorICAgICAgcmV0dXJuIE5VTEw7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2ZfZ2V0X3Byb3BlcnRpZXMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCisgIHsKKyAgICBQQ0ZfUGFyc2VQcm9wZXJ0eSAgcHJvcHMgICAgICA9IE5VTEw7CisgICAgUENGX1Byb3BlcnR5ICAgICAgIHByb3BlcnRpZXMgPSBOVUxMOworICAgIEZUX1VMb25nICAgICAgICAgICBucHJvcHMsIGk7CisgICAgRlRfVUxvbmcgICAgICAgICAgIGZvcm1hdCwgc2l6ZTsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgPSBGVF9GQUNFKCBmYWNlICktPm1lbW9yeTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgc3RyaW5nX3NpemU7CisgICAgRlRfU3RyaW5nKiAgICAgICAgIHN0cmluZ3MgICAgPSBOVUxMOworCisKKyAgICBlcnJvciA9IHBjZl9zZWVrX3RvX3RhYmxlX3R5cGUoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnRvYy50YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ZfUFJPUEVSVElFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBCYWlsOworCisgICAgaWYgKCBGVF9SRUFEX1VMT05HX0xFKCBmb3JtYXQgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBGVF9UUkFDRTQoKCAicGNmX2dldF9wcm9wZXJ0aWVzOlxuIiApKTsKKworICAgIEZUX1RSQUNFNCgoICIgIGZvcm1hdCA9ICVsZFxuIiwgZm9ybWF0ICkpOworCisgICAgaWYgKCAhUENGX0ZPUk1BVF9NQVRDSCggZm9ybWF0LCBQQ0ZfREVGQVVMVF9GT1JNQVQgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICAodm9pZClGVF9SRUFEX1VMT05HKCBucHJvcHMgKTsKKyAgICBlbHNlCisgICAgICAodm9pZClGVF9SRUFEX1VMT05HX0xFKCBucHJvcHMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIEZUX1RSQUNFNCgoICIgIG5wcm9wID0gJWQgKHRydW5jYXRlICVkIHByb3BzKVxuIiwKKyAgICAgICAgICAgICAgICAoaW50KW5wcm9wcywgbnByb3BzIC0gKEZUX1VMb25nKShpbnQpbnByb3BzICkpOworCisgICAgbnByb3BzID0gKEZUX1VMb25nKShpbnQpbnByb3BzOworCisgICAgLyogcm91Z2ggZXN0aW1hdGUgKi8KKyAgICBpZiAoIG5wcm9wcyA+IHNpemUgLyBQQ0ZfUFJPUEVSVFlfU0laRSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBCYWlsOworICAgIH0KKworICAgIGZhY2UtPm5wcm9wcyA9IChpbnQpbnByb3BzOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHByb3BzLCBucHJvcHMgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5wcm9wczsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICB7CisgICAgICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBwY2ZfcHJvcGVydHlfbXNiX2hlYWRlciwgcHJvcHMgKyBpICkgKQorICAgICAgICAgIGdvdG8gQmFpbDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHBjZl9wcm9wZXJ0eV9oZWFkZXIsIHByb3BzICsgaSApICkKKyAgICAgICAgICBnb3RvIEJhaWw7CisgICAgICB9CisgICAgfQorCisgICAgLyogcGFkIHRoZSBwcm9wZXJ0eSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGNsZXZlciBoZXJlIC0gbnByb3BzIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2Ygb2RkLXVuaXRzIHJlYWQsICovCisgICAgLyogYXMgb25seSBpc1N0cmluZ1Byb3AgYXJlIG9kZCBsZW5ndGggICAoS2VpdGggUGFja2FyZCkgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggbnByb3BzICYgMyApCisgICAgeworICAgICAgaSA9IDQgLSAoIG5wcm9wcyAmIDMgKTsKKyAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIGkgKSApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfU3RyZWFtX1NraXAgKTsKKyAgICAgICAgZ290byBCYWlsOworICAgICAgfQorICAgIH0KKworICAgIGlmICggUENGX0JZVEVfT1JERVIoIGZvcm1hdCApID09IE1TQkZpcnN0ICkKKyAgICAgICh2b2lkKUZUX1JFQURfVUxPTkcoIHN0cmluZ19zaXplICk7CisgICAgZWxzZQorICAgICAgKHZvaWQpRlRfUkVBRF9VTE9OR19MRSggc3RyaW5nX3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIEZUX1RSQUNFNCgoICIgIHN0cmluZ19zaXplID0gJWxkXG4iLCBzdHJpbmdfc2l6ZSApKTsKKworICAgIC8qIHJvdWdoIGVzdGltYXRlICovCisgICAgaWYgKCBzdHJpbmdfc2l6ZSA+IHNpemUgLSBucHJvcHMgKiBQQ0ZfUFJPUEVSVFlfU0laRSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBCYWlsOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIG9uZSBtb3JlIGJ5dGUgc28gdGhhdCB3ZSBoYXZlIGEgZmluYWwgbnVsbCBieXRlICovCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHN0cmluZ3MsIHN0cmluZ19zaXplICsgMSApICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUqKXN0cmluZ3MsIHN0cmluZ19zaXplICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggcHJvcGVydGllcywgbnByb3BzICkgKQorICAgICAgZ290byBCYWlsOworCisgICAgZmFjZS0+cHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5wcm9wczsgaSsrICkKKyAgICB7CisgICAgICBGVF9Mb25nICBuYW1lX29mZnNldCA9IHByb3BzW2ldLm5hbWU7CisKKworICAgICAgaWYgKCAoIG5hbWVfb2Zmc2V0IDwgMCApICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCAoRlRfVUxvbmcpbmFtZV9vZmZzZXQgPiBzdHJpbmdfc2l6ZSApICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PZmZzZXQgKTsKKyAgICAgICAgZ290byBCYWlsOworICAgICAgfQorCisgICAgICBpZiAoIEZUX1NUUkRVUCggcHJvcGVydGllc1tpXS5uYW1lLCBzdHJpbmdzICsgbmFtZV9vZmZzZXQgKSApCisgICAgICAgIGdvdG8gQmFpbDsKKworICAgICAgRlRfVFJBQ0U0KCggIiAgJXM6IiwgcHJvcGVydGllc1tpXS5uYW1lICkpOworCisgICAgICBwcm9wZXJ0aWVzW2ldLmlzU3RyaW5nID0gcHJvcHNbaV0uaXNTdHJpbmc7CisKKyAgICAgIGlmICggcHJvcHNbaV0uaXNTdHJpbmcgKQorICAgICAgeworICAgICAgICBGVF9Mb25nICB2YWx1ZV9vZmZzZXQgPSBwcm9wc1tpXS52YWx1ZTsKKworCisgICAgICAgIGlmICggKCB2YWx1ZV9vZmZzZXQgPCAwICkgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICggKEZUX1VMb25nKXZhbHVlX29mZnNldCA+IHN0cmluZ19zaXplICkgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PZmZzZXQgKTsKKyAgICAgICAgICBnb3RvIEJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIEZUX1NUUkRVUCggcHJvcGVydGllc1tpXS52YWx1ZS5hdG9tLCBzdHJpbmdzICsgdmFsdWVfb2Zmc2V0ICkgKQorICAgICAgICAgIGdvdG8gQmFpbDsKKworICAgICAgICBGVF9UUkFDRTQoKCAiIGAlcydcbiIsIHByb3BlcnRpZXNbaV0udmFsdWUuYXRvbSApKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcHJvcGVydGllc1tpXS52YWx1ZS5sID0gcHJvcHNbaV0udmFsdWU7CisKKyAgICAgICAgRlRfVFJBQ0U0KCggIiAlZFxuIiwgcHJvcGVydGllc1tpXS52YWx1ZS5sICkpOworICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gRlRfRXJyX09rOworCisgIEJhaWw6CisgICAgRlRfRlJFRSggcHJvcHMgKTsKKyAgICBGVF9GUkVFKCBzdHJpbmdzICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2ZfZ2V0X21ldHJpY3MoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnkgID0gRlRfRkFDRSggZmFjZSApLT5tZW1vcnk7CisgICAgRlRfVUxvbmcgICAgZm9ybWF0LCBzaXplOworICAgIFBDRl9NZXRyaWMgIG1ldHJpY3MgPSBOVUxMOworICAgIEZUX1VMb25nICAgIG5tZXRyaWNzLCBpOworCisKKyAgICBlcnJvciA9IHBjZl9zZWVrX3RvX3RhYmxlX3R5cGUoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnRvYy50YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ZfTUVUUklDUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYgKCBGVF9SRUFEX1VMT05HX0xFKCBmb3JtYXQgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoICFQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICAgICAmJgorICAgICAgICAgIVBDRl9GT1JNQVRfTUFUQ0goIGZvcm1hdCwgUENGX0NPTVBSRVNTRURfTUVUUklDUyApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgaWYgKCBQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICkKKyAgICB7CisgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICAgICh2b2lkKUZUX1JFQURfVUxPTkcoIG5tZXRyaWNzICk7CisgICAgICBlbHNlCisgICAgICAgICh2b2lkKUZUX1JFQURfVUxPTkdfTEUoIG5tZXRyaWNzICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICAgICh2b2lkKUZUX1JFQURfVVNIT1JUKCBubWV0cmljcyApOworICAgICAgZWxzZQorICAgICAgICAodm9pZClGVF9SRUFEX1VTSE9SVF9MRSggbm1ldHJpY3MgKTsKKyAgICB9CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICAgIGZhY2UtPm5tZXRyaWNzID0gbm1ldHJpY3M7CisKKyAgICBpZiAoICFubWV0cmljcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIEZUX1RSQUNFNCgoICJwY2ZfZ2V0X21ldHJpY3M6XG4iICkpOworCisgICAgRlRfVFJBQ0U0KCggIiAgbnVtYmVyIG9mIG1ldHJpY3M6ICVkXG4iLCBubWV0cmljcyApKTsKKworICAgIC8qIHJvdWdoIGVzdGltYXRlICovCisgICAgaWYgKCBQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICkKKyAgICB7CisgICAgICBpZiAoIG5tZXRyaWNzID4gc2l6ZSAvIFBDRl9NRVRSSUNfU0laRSApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBubWV0cmljcyA+IHNpemUgLyBQQ0ZfQ09NUFJFU1NFRF9NRVRSSUNfU0laRSApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIH0KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBmYWNlLT5tZXRyaWNzLCBubWV0cmljcyApICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworCisgICAgbWV0cmljcyA9IGZhY2UtPm1ldHJpY3M7CisgICAgZm9yICggaSA9IDA7IGkgPCBubWV0cmljczsgaSsrLCBtZXRyaWNzKysgKQorICAgIHsKKyAgICAgIGVycm9yID0gcGNmX2dldF9tZXRyaWMoIHN0cmVhbSwgZm9ybWF0LCBtZXRyaWNzICk7CisKKyAgICAgIG1ldHJpY3MtPmJpdHMgPSAwOworCisgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IHdpZHRoPSVkLCAiCisgICAgICAgICAgICAgICAgICAibHNiPSVkLCByc2I9JWQsIGFzY2VudD0lZCwgZGVzY2VudD0lZCwgc3dpZHRoPSVkXG4iLAorICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPmNoYXJhY3RlcldpZHRoLAorICAgICAgICAgICAgICAgICAgbWV0cmljcy0+bGVmdFNpZGVCZWFyaW5nLAorICAgICAgICAgICAgICAgICAgbWV0cmljcy0+cmlnaHRTaWRlQmVhcmluZywKKyAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPmFzY2VudCwKKyAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPmRlc2NlbnQsCisgICAgICAgICAgICAgICAgICBtZXRyaWNzLT5hdHRyaWJ1dGVzICkpOworCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHNhbml0eSBjaGVja3MgLS0gdGhvc2UgdmFsdWVzIGFyZSB1c2VkIGluIGBQQ0ZfR2x5cGhfTG9hZCcgdG8gICAgICovCisgICAgICAvKiBjb21wdXRlIGEgZ2x5cGgncyBiaXRtYXAgZGltZW5zaW9ucywgdGh1cyBzZXR0aW5nIHRoZW0gdG8gemVybyBpbiAqLworICAgICAgLyogY2FzZSBvZiBhbiBlcnJvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgZ2x5cGggb25seSAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggbWV0cmljcy0+cmlnaHRTaWRlQmVhcmluZyA8IG1ldHJpY3MtPmxlZnRTaWRlQmVhcmluZyB8fAorICAgICAgICAgICBtZXRyaWNzLT5hc2NlbnQgKyBtZXRyaWNzLT5kZXNjZW50IDwgMCAgICAgICAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgbWV0cmljcy0+Y2hhcmFjdGVyV2lkdGggICA9IDA7CisgICAgICAgIG1ldHJpY3MtPmxlZnRTaWRlQmVhcmluZyAgPSAwOworICAgICAgICBtZXRyaWNzLT5yaWdodFNpZGVCZWFyaW5nID0gMDsKKyAgICAgICAgbWV0cmljcy0+YXNjZW50ICAgICAgICAgICA9IDA7CisgICAgICAgIG1ldHJpY3MtPmRlc2NlbnQgICAgICAgICAgPSAwOworCisgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfZ2V0X21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgbWV0cmljcyBmb3IgZ2x5cGggJWRcbiIsIGkgKSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9GUkVFKCBmYWNlLT5tZXRyaWNzICk7CisKKyAgQmFpbDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwY2ZfZ2V0X2JpdG1hcHMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ICA9IEZUX0ZBQ0UoIGZhY2UgKS0+bWVtb3J5OworICAgIEZUX0xvbmcqICAgb2Zmc2V0cyA9IE5VTEw7CisgICAgRlRfTG9uZyAgICBiaXRtYXBTaXplc1tHTFlQSFBBRE9QVElPTlNdOworICAgIEZUX1VMb25nICAgZm9ybWF0LCBzaXplOworICAgIEZUX1VMb25nICAgbmJpdG1hcHMsIGksIHNpemViaXRtYXBzID0gMDsKKworCisgICAgZXJyb3IgPSBwY2Zfc2Vla190b190YWJsZV90eXBlKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MudGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+dG9jLmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENGX0JJVE1BUFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX0VudGVyRnJhbWUoIHN0cmVhbSwgOCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZm9ybWF0ID0gRlRfR0VUX1VMT05HX0xFKCk7CisgICAgaWYgKCBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QgKQorICAgICAgbmJpdG1hcHMgID0gRlRfR0VUX1VMT05HKCk7CisgICAgZWxzZQorICAgICAgbmJpdG1hcHMgID0gRlRfR0VUX1VMT05HX0xFKCk7CisKKyAgICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBzdHJlYW0gKTsKKworICAgIGlmICggIVBDRl9GT1JNQVRfTUFUQ0goIGZvcm1hdCwgUENGX0RFRkFVTFRfRk9STUFUICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBGVF9UUkFDRTQoKCAicGNmX2dldF9iaXRtYXBzOlxuIiApKTsKKworICAgIEZUX1RSQUNFNCgoICIgIG51bWJlciBvZiBiaXRtYXBzOiAlZFxuIiwgbmJpdG1hcHMgKSk7CisKKyAgICBpZiAoIG5iaXRtYXBzICE9IGZhY2UtPm5tZXRyaWNzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIG9mZnNldHMsIG5iaXRtYXBzICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZm9yICggaSA9IDA7IGkgPCBuYml0bWFwczsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICAgICh2b2lkKUZUX1JFQURfTE9ORyggb2Zmc2V0c1tpXSApOworICAgICAgZWxzZQorICAgICAgICAodm9pZClGVF9SRUFEX0xPTkdfTEUoIG9mZnNldHNbaV0gKTsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgYml0bWFwICVkOiBvZmZzZXQgJWxkICgweCVsWClcbiIsCisgICAgICAgICAgICAgICAgICBpLCBvZmZzZXRzW2ldLCBvZmZzZXRzW2ldICkpOworICAgIH0KKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgR0xZUEhQQURPUFRJT05TOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggUENGX0JZVEVfT1JERVIoIGZvcm1hdCApID09IE1TQkZpcnN0ICkKKyAgICAgICAgKHZvaWQpRlRfUkVBRF9MT05HKCBiaXRtYXBTaXplc1tpXSApOworICAgICAgZWxzZQorICAgICAgICAodm9pZClGVF9SRUFEX0xPTkdfTEUoIGJpdG1hcFNpemVzW2ldICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBCYWlsOworCisgICAgICBzaXplYml0bWFwcyA9IChGVF9VTG9uZyliaXRtYXBTaXplc1tQQ0ZfR0xZUEhfUEFEX0lOREVYKCBmb3JtYXQgKV07CisKKyAgICAgIEZUX1RSQUNFNCgoICIgIHBhZGRpbmcgJWQgaW1wbGllcyBhIHNpemUgb2YgJWxkXG4iLAorICAgICAgICAgICAgICAgICAgaSwgYml0bWFwU2l6ZXNbaV0gKSk7CisgICAgfQorCisgICAgRlRfVFJBQ0U0KCggIiAgJWQgYml0bWFwcywgcGFkZGluZyBpbmRleCAlbGRcbiIsCisgICAgICAgICAgICAgICAgbmJpdG1hcHMsCisgICAgICAgICAgICAgICAgUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICkgKSk7CisgICAgRlRfVFJBQ0U0KCggIiAgYml0bWFwIHNpemUgPSAlZFxuIiwgc2l6ZWJpdG1hcHMgKSk7CisKKyAgICBGVF9VTlVTRUQoIHNpemViaXRtYXBzICk7ICAgICAgIC8qIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nICovCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5iaXRtYXBzOyBpKysgKQorICAgIHsKKyAgICAgIC8qIHJvdWdoIGVzdGltYXRlICovCisgICAgICBpZiAoICggb2Zmc2V0c1tpXSA8IDAgKSAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCAoRlRfVUxvbmcpb2Zmc2V0c1tpXSA+IHNpemUgKSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfZ2V0X2JpdG1hcHM6IgorICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgb2Zmc2V0IHRvIGJpdG1hcCBkYXRhIG9mIGdseXBoICVkXG4iLCBpICkpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBmYWNlLT5tZXRyaWNzW2ldLmJpdHMgPSBzdHJlYW0tPnBvcyArIChGVF9VTG9uZylvZmZzZXRzW2ldOworICAgIH0KKworICAgIGZhY2UtPmJpdG1hcHNGb3JtYXQgPSBmb3JtYXQ7CisKKyAgQmFpbDoKKyAgICBGVF9GUkVFKCBvZmZzZXRzICk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGNmX2dldF9lbmNvZGluZ3MoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgUENGX0ZhY2UgICBmYWNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBGVF9GQUNFKCBmYWNlICktPm1lbW9yeTsKKyAgICBGVF9VTG9uZyAgICAgIGZvcm1hdCwgc2l6ZTsKKyAgICBpbnQgICAgICAgICAgIGZpcnN0Q29sLCBsYXN0Q29sOworICAgIGludCAgICAgICAgICAgZmlyc3RSb3csIGxhc3RSb3c7CisgICAgRlRfVUxvbmcgICAgICBuZW5jb2Rpbmc7CisgICAgaW50ICAgICAgICAgICBlbmNvZGluZ09mZnNldDsKKyAgICBpbnQgICAgICAgICAgIGksIGo7CisgICAgRlRfVUxvbmcgICAgICBrOworICAgIFBDRl9FbmNvZGluZyAgZW5jb2RpbmcgPSBOVUxMOworCisKKyAgICBlcnJvciA9IHBjZl9zZWVrX3RvX3RhYmxlX3R5cGUoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnRvYy50YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ZfQkRGX0VOQ09ESU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZXJyb3IgPSBGVF9TdHJlYW1fRW50ZXJGcmFtZSggc3RyZWFtLCAxNCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZm9ybWF0ID0gRlRfR0VUX1VMT05HX0xFKCk7CisKKyAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgeworICAgICAgZmlyc3RDb2wgICAgICAgICAgPSBGVF9HRVRfU0hPUlQoKTsKKyAgICAgIGxhc3RDb2wgICAgICAgICAgID0gRlRfR0VUX1NIT1JUKCk7CisgICAgICBmaXJzdFJvdyAgICAgICAgICA9IEZUX0dFVF9TSE9SVCgpOworICAgICAgbGFzdFJvdyAgICAgICAgICAgPSBGVF9HRVRfU0hPUlQoKTsKKyAgICAgIGZhY2UtPmRlZmF1bHRDaGFyID0gRlRfR0VUX1NIT1JUKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBmaXJzdENvbCAgICAgICAgICA9IEZUX0dFVF9TSE9SVF9MRSgpOworICAgICAgbGFzdENvbCAgICAgICAgICAgPSBGVF9HRVRfU0hPUlRfTEUoKTsKKyAgICAgIGZpcnN0Um93ICAgICAgICAgID0gRlRfR0VUX1NIT1JUX0xFKCk7CisgICAgICBsYXN0Um93ICAgICAgICAgICA9IEZUX0dFVF9TSE9SVF9MRSgpOworICAgICAgZmFjZS0+ZGVmYXVsdENoYXIgPSBGVF9HRVRfU0hPUlRfTEUoKTsKKyAgICB9CisKKyAgICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBzdHJlYW0gKTsKKworICAgIGlmICggIVBDRl9GT1JNQVRfTUFUQ0goIGZvcm1hdCwgUENGX0RFRkFVTFRfRk9STUFUICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAvKiBzYW5pdHkgY2hlY2tzICovCisgICAgaWYgKCBmaXJzdENvbCA8IDAgICAgICAgfHwKKyAgICAgICAgIGZpcnN0Q29sID4gbGFzdENvbCB8fAorICAgICAgICAgbGFzdENvbCAgPiAweEZGICAgIHx8CisgICAgICAgICBmaXJzdFJvdyA8IDAgICAgICAgfHwKKyAgICAgICAgIGZpcnN0Um93ID4gbGFzdFJvdyB8fAorICAgICAgICAgbGFzdFJvdyAgPiAweEZGICAgICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgRlRfVFJBQ0U0KCggInBkZl9nZXRfZW5jb2RpbmdzOlxuIiApKTsKKworICAgIEZUX1RSQUNFNCgoICIgIGZpcnN0Q29sICVkLCBsYXN0Q29sICVkLCBmaXJzdFJvdyAlZCwgbGFzdFJvdyAlZFxuIiwKKyAgICAgICAgICAgICAgICBmaXJzdENvbCwgbGFzdENvbCwgZmlyc3RSb3csIGxhc3RSb3cgKSk7CisKKyAgICBuZW5jb2RpbmcgPSAoRlRfVUxvbmcpKCBsYXN0Q29sIC0gZmlyc3RDb2wgKyAxICkgKgorICAgICAgICAgICAgICAgIChGVF9VTG9uZykoIGxhc3RSb3cgLSBmaXJzdFJvdyArIDEgKTsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBlbmNvZGluZywgbmVuY29kaW5nICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBPdXRfT2ZfTWVtb3J5ICk7CisKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9FbnRlckZyYW1lKCBzdHJlYW0sIDIgKiBuZW5jb2RpbmcgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIGsgPSAwOworICAgIGZvciAoIGkgPSBmaXJzdFJvdzsgaSA8PSBsYXN0Um93OyBpKysgKQorICAgIHsKKyAgICAgIGZvciAoIGogPSBmaXJzdENvbDsgaiA8PSBsYXN0Q29sOyBqKysgKQorICAgICAgeworICAgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgICAgICAgZW5jb2RpbmdPZmZzZXQgPSBGVF9HRVRfU0hPUlQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVuY29kaW5nT2Zmc2V0ID0gRlRfR0VUX1NIT1JUX0xFKCk7CisKKyAgICAgICAgaWYgKCBlbmNvZGluZ09mZnNldCA+IC0xICkKKyAgICAgICAgeworICAgICAgICAgIGVuY29kaW5nW2tdLmVuYyAgID0gaSAqIDI1NiArIGo7CisgICAgICAgICAgZW5jb2Rpbmdba10uZ2x5cGggPSAoRlRfVVNob3J0KWVuY29kaW5nT2Zmc2V0OworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgY29kZSAlZCAoMHglMDRYKTogaWR4ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nW2tdLmVuYywgZW5jb2Rpbmdba10uZW5jLCBlbmNvZGluZ1trXS5nbHlwaCApKTsKKworICAgICAgICAgIGsrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBzdHJlYW0gKTsKKworICAgIGlmICggRlRfUkVORVdfQVJSQVkoIGVuY29kaW5nLCBuZW5jb2RpbmcsIGsgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBmYWNlLT5uZW5jb2RpbmdzID0gazsKKyAgICBmYWNlLT5lbmNvZGluZ3MgID0gZW5jb2Rpbmc7CisKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgQmFpbDoKKyAgICBGVF9GUkVFKCBlbmNvZGluZyApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBwY2ZfYWNjZWxfaGVhZGVyW10gPQorICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBDRl9BY2NlbFJlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIDIwICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBub092ZXJsYXAgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGNvbnN0YW50TWV0cmljcyApLAorICAgICAgRlRfRlJBTUVfQllURSAgICAgICggdGVybWluYWxGb250ICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBjb25zdGFudFdpZHRoICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBpbmtJbnNpZGUgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGlua01ldHJpY3MgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGRyYXdEaXJlY3Rpb24gKSwKKyAgICAgIEZUX0ZSQU1FX1NLSVBfQllURVMoIDEgKSwKKyAgICAgIEZUX0ZSQU1FX0xPTkdfTEUgICAoIGZvbnRBc2NlbnQgKSwKKyAgICAgIEZUX0ZSQU1FX0xPTkdfTEUgICAoIGZvbnREZXNjZW50ICksCisgICAgICBGVF9GUkFNRV9MT05HX0xFICAgKCBtYXhPdmVybGFwICksCisgICAgRlRfRlJBTUVfRU5ECisgIH07CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBjZl9hY2NlbF9tc2JfaGVhZGVyW10gPQorICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBDRl9BY2NlbFJlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIDIwICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBub092ZXJsYXAgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGNvbnN0YW50TWV0cmljcyApLAorICAgICAgRlRfRlJBTUVfQllURSAgICAgICggdGVybWluYWxGb250ICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBjb25zdGFudFdpZHRoICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAgKCBpbmtJbnNpZGUgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGlua01ldHJpY3MgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICAoIGRyYXdEaXJlY3Rpb24gKSwKKyAgICAgIEZUX0ZSQU1FX1NLSVBfQllURVMoIDEgKSwKKyAgICAgIEZUX0ZSQU1FX0xPTkcgICAgICAoIGZvbnRBc2NlbnQgKSwKKyAgICAgIEZUX0ZSQU1FX0xPTkcgICAgICAoIGZvbnREZXNjZW50ICksCisgICAgICBGVF9GUkFNRV9MT05HICAgICAgKCBtYXhPdmVybGFwICksCisgICAgRlRfRlJBTUVfRU5ECisgIH07CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGNmX2dldF9hY2NlbCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICB0eXBlICkKKyAgeworICAgIEZUX1VMb25nICAgZm9ybWF0LCBzaXplOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgUENGX0FjY2VsICBhY2NlbCA9ICZmYWNlLT5hY2NlbDsKKworCisgICAgZXJyb3IgPSBwY2Zfc2Vla190b190YWJsZV90eXBlKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MudGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+dG9jLmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBCYWlsOworCisgICAgaWYgKCBGVF9SRUFEX1VMT05HX0xFKCBmb3JtYXQgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoICFQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICAgICYmCisgICAgICAgICAhUENGX0ZPUk1BVF9NQVRDSCggZm9ybWF0LCBQQ0ZfQUNDRUxfV19JTktCT1VORFMgKSApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCisgICAgeworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHBjZl9hY2NlbF9tc2JfaGVhZGVyLCBhY2NlbCApICkKKyAgICAgICAgZ290byBCYWlsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHBjZl9hY2NlbF9oZWFkZXIsIGFjY2VsICkgKQorICAgICAgICBnb3RvIEJhaWw7CisgICAgfQorCisgICAgZXJyb3IgPSBwY2ZfZ2V0X21ldHJpYyggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCAmICggflBDRl9GT1JNQVRfTUFTSyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoYWNjZWwtPm1pbmJvdW5kcykgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gQmFpbDsKKworICAgIGVycm9yID0gcGNmX2dldF9tZXRyaWMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgJiAoIH5QQ0ZfRk9STUFUX01BU0sgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGFjY2VsLT5tYXhib3VuZHMpICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEJhaWw7CisKKyAgICBpZiAoIFBDRl9GT1JNQVRfTUFUQ0goIGZvcm1hdCwgUENGX0FDQ0VMX1dfSU5LQk9VTkRTICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gcGNmX2dldF9tZXRyaWMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCAmICggflBDRl9GT1JNQVRfTUFTSyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihhY2NlbC0+aW5rX21pbmJvdW5kcykgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEJhaWw7CisKKyAgICAgIGVycm9yID0gcGNmX2dldF9tZXRyaWMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCAmICggflBDRl9GT1JNQVRfTUFTSyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihhY2NlbC0+aW5rX21heGJvdW5kcykgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEJhaWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBhY2NlbC0+aW5rX21pbmJvdW5kcyA9IGFjY2VsLT5taW5ib3VuZHM7IC8qIEknbSBub3Qgc3VyZSBhYm91dCB0aGlzICovCisgICAgICBhY2NlbC0+aW5rX21heGJvdW5kcyA9IGFjY2VsLT5tYXhib3VuZHM7CisgICAgfQorCisgIEJhaWw6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGNmX2ludGVycHJldF9zdHlsZSggUENGX0ZhY2UgIHBjZiApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9GYWNlICAgIGZhY2UgICA9IEZUX0ZBQ0UoIHBjZiApOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+bWVtb3J5OworCisgICAgUENGX1Byb3BlcnR5ICBwcm9wOworCisgICAgc2l6ZV90ICBubiwgbGVuOworICAgIGNoYXIqICAgc3RyaW5nc1s0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICAgIHNpemVfdCAgbGVuZ3Roc1s0XTsKKworCisgICAgZmFjZS0+c3R5bGVfZmxhZ3MgPSAwOworCisgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBwY2YsICJTTEFOVCIgKTsKKyAgICBpZiAoIHByb3AgJiYgcHJvcC0+aXNTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCAqKHByb3AtPnZhbHVlLmF0b20pID09ICdPJyB8fCAqKHByb3AtPnZhbHVlLmF0b20pID09ICdvJyB8fAorICAgICAgICAgICAqKHByb3AtPnZhbHVlLmF0b20pID09ICdJJyB8fCAqKHByb3AtPnZhbHVlLmF0b20pID09ICdpJyApICkKKyAgICB7CisgICAgICBmYWNlLT5zdHlsZV9mbGFncyB8PSBGVF9TVFlMRV9GTEFHX0lUQUxJQzsKKyAgICAgIHN0cmluZ3NbMl0gPSAoICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ08nIHx8CisgICAgICAgICAgICAgICAgICAgICAqKHByb3AtPnZhbHVlLmF0b20pID09ICdvJyApID8gKGNoYXIgKikiT2JsaXF1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY2hhciAqKSJJdGFsaWMiOworICAgIH0KKworICAgIHByb3AgPSBwY2ZfZmluZF9wcm9wZXJ0eSggcGNmLCAiV0VJR0hUX05BTUUiICk7CisgICAgaWYgKCBwcm9wICYmIHByb3AtPmlzU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnQicgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnYicgKSApCisgICAgeworICAgICAgZmFjZS0+c3R5bGVfZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19CT0xEOworICAgICAgc3RyaW5nc1sxXSA9IChjaGFyKikiQm9sZCI7CisgICAgfQorCisgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBwY2YsICJTRVRXSURUSF9OQU1FIiApOworICAgIGlmICggcHJvcCAmJiBwcm9wLT5pc1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKihwcm9wLT52YWx1ZS5hdG9tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnTicgfHwgKihwcm9wLT52YWx1ZS5hdG9tKSA9PSAnbicgKSApCisgICAgICBzdHJpbmdzWzNdID0gKGNoYXIqKSggcHJvcC0+dmFsdWUuYXRvbSApOworCisgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBwY2YsICJBRERfU1RZTEVfTkFNRSIgKTsKKyAgICBpZiAoIHByb3AgJiYgcHJvcC0+aXNTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICoocHJvcC0+dmFsdWUuYXRvbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICEoICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ04nIHx8ICoocHJvcC0+dmFsdWUuYXRvbSkgPT0gJ24nICkgKQorICAgICAgc3RyaW5nc1swXSA9IChjaGFyKikoIHByb3AtPnZhbHVlLmF0b20gKTsKKworICAgIGZvciAoIGxlbiA9IDAsIG5uID0gMDsgbm4gPCA0OyBubisrICkKKyAgICB7CisgICAgICBsZW5ndGhzW25uXSA9IDA7CisgICAgICBpZiAoIHN0cmluZ3Nbbm5dICkKKyAgICAgIHsKKyAgICAgICAgbGVuZ3Roc1tubl0gPSBmdF9zdHJsZW4oIHN0cmluZ3Nbbm5dICk7CisgICAgICAgIGxlbiAgICAgICAgKz0gbGVuZ3Roc1tubl0gKyAxOworICAgICAgfQorICAgIH0KKworICAgIGlmICggbGVuID09IDAgKQorICAgIHsKKyAgICAgIHN0cmluZ3NbMF0gPSAoY2hhciopIlJlZ3VsYXIiOworICAgICAgbGVuZ3Roc1swXSA9IGZ0X3N0cmxlbiggc3RyaW5nc1swXSApOworICAgICAgbGVuICAgICAgICA9IGxlbmd0aHNbMF0gKyAxOworICAgIH0KKworICAgIHsKKyAgICAgIGNoYXIqICBzOworCisKKyAgICAgIGlmICggRlRfQUxMT0MoIGZhY2UtPnN0eWxlX25hbWUsIGxlbiApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBzID0gZmFjZS0+c3R5bGVfbmFtZTsKKworICAgICAgZm9yICggbm4gPSAwOyBubiA8IDQ7IG5uKysgKQorICAgICAgeworICAgICAgICBjaGFyKiAgc3JjID0gc3RyaW5nc1tubl07CisKKworICAgICAgICBsZW4gPSBsZW5ndGhzW25uXTsKKworICAgICAgICBpZiAoIHNyYyA9PSBOVUxMICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBzZXBhcmF0ZSBlbGVtZW50cyB3aXRoIGEgc3BhY2UgKi8KKyAgICAgICAgaWYgKCBzICE9IGZhY2UtPnN0eWxlX25hbWUgKQorICAgICAgICAgICpzKysgPSAnICc7CisKKyAgICAgICAgZnRfbWVtY3B5KCBzLCBzcmMsIGxlbiApOworCisgICAgICAgIC8qIG5lZWQgdG8gY29udmVydCBzcGFjZXMgdG8gZGFzaGVzIGZvciAqLworICAgICAgICAvKiBhZGRfc3R5bGVfbmFtZSBhbmQgc2V0d2lkdGhfbmFtZSAgICAgKi8KKyAgICAgICAgaWYgKCBubiA9PSAwIHx8IG5uID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90ICBtbTsKKworCisgICAgICAgICAgZm9yICggbW0gPSAwOyBtbSA8IGxlbjsgbW0rKyApCisgICAgICAgICAgICBpZiAoIHNbbW1dID09ICcgJyApCisgICAgICAgICAgICAgIHNbbW1dID0gJy0nOworICAgICAgICB9CisKKyAgICAgICAgcyArPSBsZW47CisgICAgICB9CisgICAgICAqcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGNmX2xvYWRfZm9udCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRSggZmFjZSApLT5tZW1vcnk7CisgICAgRlRfQm9vbCAgICBoYXNCREZBY2NlbGVyYXRvcnM7CisKKworICAgIGVycm9yID0gcGNmX3JlYWRfVE9DKCBzdHJlYW0sIGZhY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gcGNmX2dldF9wcm9wZXJ0aWVzKCBzdHJlYW0sIGZhY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIFVzZSB0aGUgb2xkIGFjY2VsZXJhdG9ycyBpZiBubyBCREYgYWNjZWxlcmF0b3JzIGFyZSBpbiB0aGUgZmlsZS4gKi8KKyAgICBoYXNCREZBY2NlbGVyYXRvcnMgPSBwY2ZfaGFzX3RhYmxlX3R5cGUoIGZhY2UtPnRvYy50YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50b2MuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ZfQkRGX0FDQ0VMRVJBVE9SUyApOworICAgIGlmICggIWhhc0JERkFjY2VsZXJhdG9ycyApCisgICAgeworICAgICAgZXJyb3IgPSBwY2ZfZ2V0X2FjY2VsKCBzdHJlYW0sIGZhY2UsIFBDRl9BQ0NFTEVSQVRPUlMgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogbWV0cmljcyAqLworICAgIGVycm9yID0gcGNmX2dldF9tZXRyaWNzKCBzdHJlYW0sIGZhY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGJpdG1hcHMgKi8KKyAgICBlcnJvciA9IHBjZl9nZXRfYml0bWFwcyggc3RyZWFtLCBmYWNlICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBlbmNvZGluZ3MgKi8KKyAgICBlcnJvciA9IHBjZl9nZXRfZW5jb2RpbmdzKCBzdHJlYW0sIGZhY2UgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIEJERiBzdHlsZSBhY2NlbGVyYXRvcnMgKGkuZS4gYm91bmRzIGJhc2VkIG9uIGVuY29kZWQgZ2x5cGhzKSAqLworICAgIGlmICggaGFzQkRGQWNjZWxlcmF0b3JzICkKKyAgICB7CisgICAgICBlcnJvciA9IHBjZl9nZXRfYWNjZWwoIHN0cmVhbSwgZmFjZSwgUENGX0JERl9BQ0NFTEVSQVRPUlMgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogWFhYOiBUTyBETzogaW5rbWV0cmljcyBhbmQgZ2x5cGhfbmFtZXMgYXJlIG1pc3NpbmcgKi8KKworICAgIC8qIG5vdyBjb25zdHJ1Y3QgdGhlIGZhY2Ugb2JqZWN0ICovCisgICAgeworICAgICAgRlRfRmFjZSAgICAgICByb290ID0gRlRfRkFDRSggZmFjZSApOworICAgICAgUENGX1Byb3BlcnR5ICBwcm9wOworCisKKyAgICAgIHJvb3QtPm51bV9mYWNlcyAgPSAxOworICAgICAgcm9vdC0+ZmFjZV9pbmRleCA9IDA7CisKKyAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTOworCisgICAgICBpZiAoIGZhY2UtPmFjY2VsLmNvbnN0YW50V2lkdGggKQorICAgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKKworICAgICAgaWYgKCAoIGVycm9yID0gcGNmX2ludGVycHJldF9zdHlsZSggZmFjZSApICkgIT0gMCApCisgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHByb3AgPSBwY2ZfZmluZF9wcm9wZXJ0eSggZmFjZSwgIkZBTUlMWV9OQU1FIiApOworICAgICAgaWYgKCBwcm9wICYmIHByb3AtPmlzU3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9TVFJEVVAoIHJvb3QtPmZhbWlseV9uYW1lLCBwcm9wLT52YWx1ZS5hdG9tICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcm9vdC0+ZmFtaWx5X25hbWUgPSBOVUxMOworCisgICAgICAvKgorICAgICAgICogTm90ZTogV2Ugc2hpZnQgYWxsIGdseXBoIGluZGljZXMgYnkgKzEgc2luY2Ugd2UgbXVzdAorICAgICAgICogcmVzcGVjdCB0aGUgY29udmVudGlvbiB0aGF0IGdseXBoIDAgYWx3YXlzIGNvcnJlc3BvbmRzCisgICAgICAgKiB0byB0aGUgYG1pc3NpbmcgZ2x5cGgnLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgaW1wbGllcyBidW1waW5nIHRoZSBudW1iZXIgb2YgYGF2YWlsYWJsZScgZ2x5cGhzIGJ5IDEuCisgICAgICAgKi8KKyAgICAgIHJvb3QtPm51bV9nbHlwaHMgPSAoRlRfTG9uZykoIGZhY2UtPm5tZXRyaWNzICsgMSApOworCisgICAgICByb290LT5udW1fZml4ZWRfc2l6ZXMgPSAxOworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHJvb3QtPmF2YWlsYWJsZV9zaXplcywgMSApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICB7CisgICAgICAgIEZUX0JpdG1hcF9TaXplKiAgYnNpemUgPSByb290LT5hdmFpbGFibGVfc2l6ZXM7CisgICAgICAgIEZUX1Nob3J0ICAgICAgICAgcmVzb2x1dGlvbl94ID0gMCwgcmVzb2x1dGlvbl95ID0gMDsKKworCisgICAgICAgIEZUX01FTV9aRVJPKCBic2l6ZSwgc2l6ZW9mICggRlRfQml0bWFwX1NpemUgKSApOworCisjaWYgMAorICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gZmFjZS0+YWNjZWwubWF4Ym91bmRzLmFzY2VudCA8PCA2OworI2VuZGlmCisgICAgICAgIGJzaXplLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBmYWNlLT5hY2NlbC5mb250QXNjZW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmFjY2VsLmZvbnREZXNjZW50ICk7CisKKyAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiQVZFUkFHRV9XSURUSCIgKTsKKyAgICAgICAgaWYgKCBwcm9wICkKKyAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpKCAoIHByb3AtPnZhbHVlLmwgKyA1ICkgLyAxMCApOworICAgICAgICBlbHNlCisgICAgICAgICAgYnNpemUtPndpZHRoID0gKEZUX1Nob3J0KSggYnNpemUtPmhlaWdodCAqIDIvMyApOworCisgICAgICAgIHByb3AgPSBwY2ZfZmluZF9wcm9wZXJ0eSggZmFjZSwgIlBPSU5UX1NJWkUiICk7CisgICAgICAgIGlmICggcHJvcCApCisgICAgICAgICAgLyogY29udmVydCBmcm9tIDcyMi43IGRlY2lwb2ludHMgdG8gNzIgcG9pbnRzIHBlciBpbmNoICovCisgICAgICAgICAgYnNpemUtPnNpemUgPQorICAgICAgICAgICAgKEZUX1BvcykoICggcHJvcC0+dmFsdWUubCAqIDY0ICogNzIwMCArIDM2MTM1TCApIC8gNzIyNzBMICk7CisKKyAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiUElYRUxfU0laRSIgKTsKKyAgICAgICAgaWYgKCBwcm9wICkKKyAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgPDwgNjsKKworICAgICAgICBwcm9wID0gcGNmX2ZpbmRfcHJvcGVydHkoIGZhY2UsICJSRVNPTFVUSU9OX1giICk7CisgICAgICAgIGlmICggcHJvcCApCisgICAgICAgICAgcmVzb2x1dGlvbl94ID0gKEZUX1Nob3J0KXByb3AtPnZhbHVlLmw7CisKKyAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiUkVTT0xVVElPTl9ZIiApOworICAgICAgICBpZiAoIHByb3AgKQorICAgICAgICAgIHJlc29sdXRpb25feSA9IChGVF9TaG9ydClwcm9wLT52YWx1ZS5sOworCisgICAgICAgIGlmICggYnNpemUtPnlfcHBlbSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIGJzaXplLT55X3BwZW0gPSBic2l6ZS0+c2l6ZTsKKyAgICAgICAgICBpZiAoIHJlc29sdXRpb25feSApCisgICAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gYnNpemUtPnlfcHBlbSAqIHJlc29sdXRpb25feSAvIDcyOworICAgICAgICB9CisgICAgICAgIGlmICggcmVzb2x1dGlvbl94ICYmIHJlc29sdXRpb25feSApCisgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IGJzaXplLT55X3BwZW0gKiByZXNvbHV0aW9uX3ggLyByZXNvbHV0aW9uX3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBic2l6ZS0+eF9wcGVtID0gYnNpemUtPnlfcHBlbTsKKyAgICAgIH0KKworICAgICAgLyogc2V0IHVwIGNoYXJzZXQgKi8KKyAgICAgIHsKKyAgICAgICAgUENGX1Byb3BlcnR5ICBjaGFyc2V0X3JlZ2lzdHJ5LCBjaGFyc2V0X2VuY29kaW5nOworCisKKyAgICAgICAgY2hhcnNldF9yZWdpc3RyeSA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiQ0hBUlNFVF9SRUdJU1RSWSIgKTsKKyAgICAgICAgY2hhcnNldF9lbmNvZGluZyA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiQ0hBUlNFVF9FTkNPRElORyIgKTsKKworICAgICAgICBpZiAoIGNoYXJzZXRfcmVnaXN0cnkgJiYgY2hhcnNldF9yZWdpc3RyeS0+aXNTdHJpbmcgJiYKKyAgICAgICAgICAgICBjaGFyc2V0X2VuY29kaW5nICYmIGNoYXJzZXRfZW5jb2RpbmctPmlzU3RyaW5nICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggRlRfU1RSRFVQKCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0X2VuY29kaW5nLT52YWx1ZS5hdG9tICkgfHwKKyAgICAgICAgICAgICAgIEZUX1NUUkRVUCggZmFjZS0+Y2hhcnNldF9yZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldF9yZWdpc3RyeS0+dmFsdWUuYXRvbSApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIC8qIFRoaXMgaXMgZG9uZSB0byByZXNwZWN0IHRoZSBiZWhhdmlvdXIgb2YgdGhlIG9yaWdpbmFsICovCisgICAgICAvKiBQQ0YgZm9udCBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmcmVhZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmcmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTI0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2ZyZWFkLmgKQEAgLTAsMCArMSw0NSBAQAorLyogIHBjZnJlYWQuaAorCisgICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIHBjZiBmb250cworCisgIENvcHlyaWdodCAyMDAzIGJ5CisgIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisqLworCisKKyNpZm5kZWYgX19QQ0ZSRUFEX0hfXworI2RlZmluZSBfX1BDRlJFQURfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKK0ZUX0JFR0lOX0hFQURFUgorCisgIEZUX0xPQ0FMKCBQQ0ZfUHJvcGVydHkgKQorICBwY2ZfZmluZF9wcm9wZXJ0eSggUENGX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHByb3AgKTsKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QQ0ZSRUFEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmdXRpbC5jIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9wY2Z1dGlsLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisKK0NvcHlyaWdodCAxOTkwLCAxOTk0LCAxOTk4ICBUaGUgT3BlbiBHcm91cAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Cit0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24uCisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorT1BFTiBHUk9VUCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCitDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgT3BlbiBHcm91cCBzaGFsbCBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIFRoZSBPcGVuIEdyb3VwLgorCisqLworLyogJFhGcmVlODY6IHhjL2xpYi9mb250L3V0aWwvdXRpbGJpdG1hcC5jLHYgMS4zIDE5OTkvMDgvMjIgMDg6NTg6NTggZGF3ZXMgRXhwICQgKi8KKworLyoKKyAqIEF1dGhvcjogIEtlaXRoIFBhY2thcmQsIE1JVCBYIENvbnNvcnRpdW0KKyAqLworCisvKiBNb2RpZmllZCBmb3IgdXNlIHdpdGggRnJlZVR5cGUgKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJwY2Z1dGlsLmgiCisKKworICAvKgorICAgKiAgSW52ZXJ0IGJpdCBvcmRlciB3aXRoaW4gZWFjaCBCWVRFIG9mIGFuIGFycmF5LgorICAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBCaXRPcmRlckludmVydCggdW5zaWduZWQgY2hhciogIGJ1ZiwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBuYnl0ZXMgKQorICB7CisgICAgZm9yICggOyBuYnl0ZXMgPiAwOyBuYnl0ZXMtLSwgYnVmKysgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCAgdmFsID0gKmJ1ZjsKKworCisgICAgICB2YWwgPSAoICggdmFsID4+IDEgKSAmIDB4NTUgKSB8ICggKCB2YWwgPDwgMSApICYgMHhBQSApOworICAgICAgdmFsID0gKCAoIHZhbCA+PiAyICkgJiAweDMzICkgfCAoICggdmFsIDw8IDIgKSAmIDB4Q0MgKTsKKyAgICAgIHZhbCA9ICggKCB2YWwgPj4gNCApICYgMHgwRiApIHwgKCAoIHZhbCA8PCA0ICkgJiAweEYwICk7CisKKyAgICAgICpidWYgPSAodW5zaWduZWQgY2hhcil2YWw7CisgICAgfQorICB9CisKKworICAvKgorICAgKiAgSW52ZXJ0IGJ5dGUgb3JkZXIgd2l0aGluIGVhY2ggMTYtYml0cyBvZiBhbiBhcnJheS4KKyAgICovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVHdvQnl0ZVN3YXAoIHVuc2lnbmVkIGNoYXIqICBidWYsCisgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgbmJ5dGVzICkKKyAgeworICAgIGZvciAoIDsgbmJ5dGVzID49IDI7IG5ieXRlcyAtPSAyLCBidWYgKz0gMiApCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAgYzsKKworCisgICAgICBjICAgICAgPSBidWZbMF07CisgICAgICBidWZbMF0gPSBidWZbMV07CisgICAgICBidWZbMV0gPSBjOworICAgIH0KKyAgfQorCisgIC8qCisgICAqICBJbnZlcnQgYnl0ZSBvcmRlciB3aXRoaW4gZWFjaCAzMi1iaXRzIG9mIGFuIGFycmF5LgorICAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBGb3VyQnl0ZVN3YXAoIHVuc2lnbmVkIGNoYXIqICBidWYsCisgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG5ieXRlcyApCisgIHsKKyAgICBmb3IgKCA7IG5ieXRlcyA+PSA0OyBuYnl0ZXMgLT0gNCwgYnVmICs9IDQgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgIGM7CisKKworICAgICAgYyAgICAgID0gYnVmWzBdOworICAgICAgYnVmWzBdID0gYnVmWzNdOworICAgICAgYnVmWzNdID0gYzsKKworICAgICAgYyAgICAgID0gYnVmWzFdOworICAgICAgYnVmWzFdID0gYnVmWzJdOworICAgICAgYnVmWzJdID0gYzsKKyAgICB9CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZnV0aWwuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcGNmL3BjZnV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTEwZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcGNmdXRpbC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qICBwY2Z1dGlsLmgKKworICAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBwY2YgZm9udHMKKworICBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwNCBieQorICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorKi8KKworCisjaWZuZGVmIF9fUENGVVRJTF9IX18KKyNkZWZpbmUgX19QQ0ZVVElMX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBCaXRPcmRlckludmVydCggdW5zaWduZWQgY2hhciogIGJ1ZiwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBuYnl0ZXMgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIFR3b0J5dGVTd2FwKCB1bnNpZ25lZCBjaGFyKiAgYnVmLAorICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG5ieXRlcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgRm91ckJ5dGVTd2FwKCB1bnNpZ25lZCBjaGFyKiAgYnVmLAorICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBuYnl0ZXMgKTsKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QQ0ZVVElMX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wY2YvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL3BjZi9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU1ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wY2YvcnVsZXMubWsKQEAgLTAsMCArMSw4MiBAQAorIworIyBGcmVlVHlwZSAyIHBjZiBkcml2ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzLCAyMDA4IGJ5CisjIEZyYW5jZXNjbyBaYXBwYSBOYXJkZWxsaQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisKKworIyBwY2YgZHJpdmVyIGRpcmVjdG9yeQorIworUENGX0RJUiA6PSAkKFNSQ19ESVIpL3BjZgorCisKK1BDRl9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChQQ0ZfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgcGNmIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworUENGX0RSVl9TUkMgOj0gJChQQ0ZfRElSKS9wY2Zkcml2ci5jIFwKKyAgICAgICAgICAgICAgICQoUENGX0RJUikvcGNmcmVhZC5jICBcCisgICAgICAgICAgICAgICAkKFBDRl9ESVIpL3BjZnV0aWwuYworCisjIHBjZiBkcml2ZXIgaGVhZGVycworIworUENGX0RSVl9IIDo9ICQoUENGX0RSVl9TUkM6JS5jPSUuaCkgXAorICAgICAgICAgICAgICQoUENGX0RJUikvcGNmLmggICAgICAgXAorICAgICAgICAgICAgICQoUENGX0RJUikvcGNmZXJyb3IuaAorCisjIHBjZiBkcml2ZXIgb2JqZWN0KHMpCisjCisjICAgUENGX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcworIyAgIFBDRl9EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzCisjCitQQ0ZfRFJWX09CSl9NIDo9ICQoUENGX0RSVl9TUkM6JChQQ0ZfRElSKS8lLmM9JChPQkpfRElSKS8lLiRPKQorUENGX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL3BjZi4kTworCisjIHBjZiBkcml2ZXIgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworUENGX0RSVl9TUkNfUyA6PSAkKFBDRl9ESVIpL3BjZi5jCisKKworIyBwY2YgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChQQ0ZfRFJWX09CSl9TKTogJChQQ0ZfRFJWX1NSQ19TKSAkKFBDRl9EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoUENGX0RSVl9IKQorCSQoUENGX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKFBDRl9EUlZfU1JDX1MpKQorCisKKyMgcGNmIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChQQ0ZfRElSKS8lLmMgJChGUkVFVFlQRV9IKSAkKFBDRl9EUlZfSCkKKwkkKFBDRl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoUENGX0RSVl9PQkpfUykKK0RSVl9PQkpTX00gKz0gJChQQ0ZfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDY0YmNkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL3BmciBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAyLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgcGZyIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBwZnJkcml2ciBwZnJnbG9hZCBwZnJsb2FkIHBmcm9ianMgcGZyY21hcCBwZnJzYml0IDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHBmciA7CisgIH0KKworICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Cit9CisKKyMgZW5kIG9mIHNyYy9wZnIgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvbW9kdWxlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWE0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9tb2R1bGUubWsKQEAgLTAsMCArMSwyMyBAQAorIworIyBGcmVlVHlwZSAyIFBGUiBtb2R1bGUgZGVmaW5pdGlvbgorIworCisKKyMgQ29weXJpZ2h0IDIwMDItMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBQRlJfRFJJVkVSCisKK2RlZmluZSBQRlJfRFJJVkVSCiskKE9QRU5fRFJJVkVSKSBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBmcl9kcml2ZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXBmciAgICAgICAkKEVDSE9fRFJJVkVSX0RFU0MpUEZSL1RydWVEb2MgZm9udCBmaWxlcyB3aXRoIGV4dGVuc2lvbiAqLnBmciQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3Bmci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTY3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnIuYwpAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUEZSIGRyaXZlciBjb21wb25lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlICJwZnJsb2FkLmMiCisjaW5jbHVkZSAicGZyZ2xvYWQuYyIKKyNpbmNsdWRlICJwZnJjbWFwLmMiCisjaW5jbHVkZSAicGZyb2Jqcy5jIgorI2luY2x1ZGUgInBmcmRyaXZyLmMiCisjaW5jbHVkZSAicGZyc2JpdC5jIgorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmNtYXAuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmNtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGZmNTVhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyY21hcC5jCkBAIC0wLDAgKzEsMTczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnJjbWFwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUEZSIGNtYXAgaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgInBmcmNtYXAuaCIKKyNpbmNsdWRlICJwZnJvYmpzLmgiCisKKyNpbmNsdWRlICJwZnJlcnJvci5oIgorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHBmcl9jbWFwX2luaXQoIFBGUl9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIHBvaW50ZXIgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIFBGUl9GYWNlICBmYWNlICA9IChQRlJfRmFjZSlGVF9DTUFQX0ZBQ0UoIGNtYXAgKTsKKworICAgIEZUX1VOVVNFRCggcG9pbnRlciApOworCisKKyAgICBjbWFwLT5udW1fY2hhcnMgPSBmYWNlLT5waHlfZm9udC5udW1fY2hhcnM7CisgICAgY21hcC0+Y2hhcnMgICAgID0gZmFjZS0+cGh5X2ZvbnQuY2hhcnM7CisKKyAgICAvKiBqdXN0IGZvciBzYWZldHksIGNoZWNrIHRoYXQgdGhlIGNoYXJhY3RlciBlbnRyaWVzIGFyZSBjb3JyZWN0bHkgKi8KKyAgICAvKiBzb3J0ZWQgaW4gaW5jcmVhc2luZyBjaGFyYWN0ZXIgY29kZSBvcmRlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICBuOworCisKKyAgICAgIGZvciAoIG4gPSAxOyBuIDwgY21hcC0+bnVtX2NoYXJzOyBuKysgKQorICAgICAgeworICAgICAgICBpZiAoIGNtYXAtPmNoYXJzW24gLSAxXS5jaGFyX2NvZGUgPj0gY21hcC0+Y2hhcnNbbl0uY2hhcl9jb2RlICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIHBmcl9jbWFwX2RvbmUoIFBGUl9DTWFwICBjbWFwICkKKyAgeworICAgIGNtYXAtPmNoYXJzICAgICA9IE5VTEw7CisgICAgY21hcC0+bnVtX2NoYXJzID0gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50ICkKKyAgcGZyX2NtYXBfY2hhcl9pbmRleCggUEZSX0NNYXAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50ICBtaW4gPSAwOworICAgIEZUX1VJbnQgIG1heCA9IGNtYXAtPm51bV9jaGFyczsKKworCisgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgIHsKKyAgICAgIFBGUl9DaGFyICBnY2hhcjsKKyAgICAgIEZUX1VJbnQgICBtaWQ7CisKKworICAgICAgbWlkICAgPSBtaW4gKyAoIG1heCAtIG1pbiApIC8gMjsKKyAgICAgIGdjaGFyID0gY21hcC0+Y2hhcnMgKyBtaWQ7CisKKyAgICAgIGlmICggZ2NoYXItPmNoYXJfY29kZSA9PSBjaGFyX2NvZGUgKQorICAgICAgICByZXR1cm4gbWlkICsgMTsKKworICAgICAgaWYgKCBnY2hhci0+Y2hhcl9jb2RlIDwgY2hhcl9jb2RlICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWF4ID0gbWlkOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICBwZnJfY21hcF9jaGFyX25leHQoIFBGUl9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAqcGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50ICAgIHJlc3VsdCAgICA9IDA7CisgICAgRlRfVUludDMyICBjaGFyX2NvZGUgPSAqcGNoYXJfY29kZSArIDE7CisKKworICBSZXN0YXJ0OgorICAgIHsKKyAgICAgIEZUX1VJbnQgICBtaW4gPSAwOworICAgICAgRlRfVUludCAgIG1heCA9IGNtYXAtPm51bV9jaGFyczsKKyAgICAgIEZUX1VJbnQgICBtaWQ7CisgICAgICBQRlJfQ2hhciAgZ2NoYXI7CisKKworICAgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgICAgeworICAgICAgICBtaWQgICA9IG1pbiArICggKCBtYXggLSBtaW4gKSA+PiAxICk7CisgICAgICAgIGdjaGFyID0gY21hcC0+Y2hhcnMgKyBtaWQ7CisKKyAgICAgICAgaWYgKCBnY2hhci0+Y2hhcl9jb2RlID09IGNoYXJfY29kZSApCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBtaWQ7CisgICAgICAgICAgaWYgKCByZXN1bHQgIT0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2hhcl9jb2RlKys7CisgICAgICAgICAgZ290byBSZXN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBnY2hhci0+Y2hhcl9jb2RlIDwgY2hhcl9jb2RlICkKKyAgICAgICAgICBtaW4gPSBtaWQrMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG1heCA9IG1pZDsKKyAgICAgIH0KKworICAgICAgLyogd2UgZGlkbid0IGZpbmQgaXQsIGJ1dCB3ZSBoYXZlIGEgcGFpciBqdXN0IGFib3ZlIGl0ICovCisgICAgICBjaGFyX2NvZGUgPSAwOworCisgICAgICBpZiAoIG1pbiA8IGNtYXAtPm51bV9jaGFycyApCisgICAgICB7CisgICAgICAgIGdjaGFyICA9IGNtYXAtPmNoYXJzICsgbWluOworICAgICAgICByZXN1bHQgPSBtaW47CisgICAgICAgIGlmICggcmVzdWx0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgICAgY2hhcl9jb2RlID0gZ2NoYXItPmNoYXJfY29kZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgICpwY2hhcl9jb2RlID0gY2hhcl9jb2RlOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBjb25zdCBGVF9DTWFwX0NsYXNzUmVjCisgIHBmcl9jbWFwX2NsYXNzX3JlYyA9CisgIHsKKyAgICBzaXplb2YgKCBQRlJfQ01hcFJlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICBwZnJfY21hcF9pbml0LAorICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgcGZyX2NtYXBfZG9uZSwKKyAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKXBmcl9jbWFwX2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSBwZnJfY21hcF9jaGFyX25leHQsCisKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgIH07CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJjbWFwLmggYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJjbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlMWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmNtYXAuaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnJjbWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUEZSIGNtYXAgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QRlJDTUFQX0hfXworI2RlZmluZSBfX1BGUkNNQVBfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSAicGZydHlwZXMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworICB0eXBlZGVmIHN0cnVjdCAgUEZSX0NNYXBSZWNfCisgIHsKKyAgICBGVF9DTWFwUmVjICBjbWFwOworICAgIEZUX1VJbnQgICAgIG51bV9jaGFyczsKKyAgICBQRlJfQ2hhciAgICBjaGFyczsKKworICB9IFBGUl9DTWFwUmVjLCAqUEZSX0NNYXA7CisKKworICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBGVF9DTWFwX0NsYXNzUmVjICBwZnJfY21hcF9jbGFzc19yZWM7CisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19QRlJDTUFQX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZHJpdnIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmRyaXZyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1Mzc0OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmRyaXZyLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBmcmRyaXZyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBQRlIgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QRlJfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICisjaW5jbHVkZSAicGZyZHJpdnIuaCIKKyNpbmNsdWRlICJwZnJvYmpzLmgiCisKKyNpbmNsdWRlICJwZnJlcnJvci5oIgorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHBmcl9nZXRfa2VybmluZyggRlRfRmFjZSAgICAgcGZyZmFjZSwgICAgIC8qIFBGUl9GYWNlICovCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVmdCwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodCwKKyAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICphdmVjdG9yICkKKyAgeworICAgIFBGUl9GYWNlICAgICBmYWNlID0gKFBGUl9GYWNlKXBmcmZhY2U7CisgICAgUEZSX1BoeUZvbnQgIHBoeXMgPSAmZmFjZS0+cGh5X2ZvbnQ7CisKKworICAgICh2b2lkKXBmcl9mYWNlX2dldF9rZXJuaW5nKCBwZnJmYWNlLCBsZWZ0LCByaWdodCwgYXZlY3RvciApOworCisgICAgLyogY29udmVydCBmcm9tIG1ldHJpY3MgdG8gb3V0bGluZSB1bml0cyB3aGVuIG5lY2Vzc2FyeSAqLworICAgIGlmICggcGh5cy0+b3V0bGluZV9yZXNvbHV0aW9uICE9IHBoeXMtPm1ldHJpY3NfcmVzb2x1dGlvbiApCisgICAgeworICAgICAgaWYgKCBhdmVjdG9yLT54ICE9IDAgKQorICAgICAgICBhdmVjdG9yLT54ID0gRlRfTXVsRGl2KCBhdmVjdG9yLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylwaHlzLT5vdXRsaW5lX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXBoeXMtPm1ldHJpY3NfcmVzb2x1dGlvbiApOworCisgICAgICBpZiAoIGF2ZWN0b3ItPnkgIT0gMCApCisgICAgICAgIGF2ZWN0b3ItPnkgPSBGVF9NdWxEaXYoIGF2ZWN0b3ItPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXBoeXMtPm91dGxpbmVfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uICk7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAvKgorICAqICBQRlIgTUVUUklDUyBTRVJWSUNFCisgICoKKyAgKi8KKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2dldF9hZHZhbmNlKCBGVF9GYWNlICAgcGZyZmFjZSwgICAgICAgLyogUEZSX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICphbmFkdmFuY2UgKQorICB7CisgICAgUEZSX0ZhY2UgIGZhY2UgID0gKFBGUl9GYWNlKXBmcmZhY2U7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKworICAgICphbmFkdmFuY2UgPSAwOworCisgICAgaWYgKCAhZ2luZGV4ICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGdpbmRleC0tOworCisgICAgaWYgKCBmYWNlICkKKyAgICB7CisgICAgICBQRlJfUGh5Rm9udCAgcGh5cyA9ICZmYWNlLT5waHlfZm9udDsKKworCisgICAgICBpZiAoIGdpbmRleCA8IHBoeXMtPm51bV9jaGFycyApCisgICAgICB7CisgICAgICAgICphbmFkdmFuY2UgPSBwaHlzLT5jaGFyc1tnaW5kZXhdLmFkdmFuY2U7CisgICAgICAgIGVycm9yICAgICAgPSBGVF9FcnJfT2s7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2dldF9tZXRyaWNzKCBGVF9GYWNlICAgIHBmcmZhY2UsICAgICAgLyogUEZSX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmFub3V0bGluZV9yZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYW1ldHJpY3NfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgKmFtZXRyaWNzX3hfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICphbWV0cmljc195X3NjYWxlICkKKyAgeworICAgIFBGUl9GYWNlICAgICBmYWNlID0gKFBGUl9GYWNlKXBmcmZhY2U7CisgICAgUEZSX1BoeUZvbnQgIHBoeXMgPSAmZmFjZS0+cGh5X2ZvbnQ7CisgICAgRlRfRml4ZWQgICAgIHhfc2NhbGUsIHlfc2NhbGU7CisgICAgRlRfU2l6ZSAgICAgIHNpemUgPSBmYWNlLT5yb290LnNpemU7CisKKworICAgIGlmICggYW5vdXRsaW5lX3Jlc29sdXRpb24gKQorICAgICAgKmFub3V0bGluZV9yZXNvbHV0aW9uID0gcGh5cy0+b3V0bGluZV9yZXNvbHV0aW9uOworCisgICAgaWYgKCBhbWV0cmljc19yZXNvbHV0aW9uICkKKyAgICAgICphbWV0cmljc19yZXNvbHV0aW9uID0gcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uOworCisgICAgeF9zY2FsZSA9IDB4MTAwMDBMOworICAgIHlfc2NhbGUgPSAweDEwMDAwTDsKKworICAgIGlmICggc2l6ZSApCisgICAgeworICAgICAgeF9zY2FsZSA9IEZUX0RpdkZpeCggc2l6ZS0+bWV0cmljcy54X3BwZW0gPDwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXBoeXMtPm1ldHJpY3NfcmVzb2x1dGlvbiApOworCisgICAgICB5X3NjYWxlID0gRlRfRGl2Rml4KCBzaXplLT5tZXRyaWNzLnlfcHBlbSA8PCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uICk7CisgICAgfQorCisgICAgaWYgKCBhbWV0cmljc194X3NjYWxlICkKKyAgICAgICphbWV0cmljc194X3NjYWxlID0geF9zY2FsZTsKKworICAgIGlmICggYW1ldHJpY3NfeV9zY2FsZSApCisgICAgICAqYW1ldHJpY3NfeV9zY2FsZSA9IHlfc2NhbGU7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfU2VydmljZV9QZnJNZXRyaWNzUmVjICBwZnJfbWV0cmljc19zZXJ2aWNlX3JlYyA9CisgIHsKKyAgICBwZnJfZ2V0X21ldHJpY3MsCisgICAgcGZyX2ZhY2VfZ2V0X2tlcm5pbmcsCisgICAgcGZyX2dldF9hZHZhbmNlCisgIH07CisKKworIC8qCisgICogIFNFUlZJQ0UgTElTVAorICAqCisgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICBwZnJfc2VydmljZXNbXSA9CisgIHsKKyAgICB7IEZUX1NFUlZJQ0VfSURfUEZSX01FVFJJQ1MsICZwZnJfbWV0cmljc19zZXJ2aWNlX3JlYyB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgRlRfRk9OVF9GT1JNQVRfUEZSIH0sCisgICAgeyBOVUxMLCBOVUxMIH0KKyAgfTsKKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfTW9kdWxlX0ludGVyZmFjZSApCisgIHBmcl9nZXRfc2VydmljZSggRlRfTW9kdWxlICAgICAgICAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHNlcnZpY2VfaWQgKQorICB7CisgICAgRlRfVU5VU0VEKCBtb2R1bGUgKTsKKworICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBwZnJfc2VydmljZXMsIHNlcnZpY2VfaWQgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IEZUX0RyaXZlcl9DbGFzc1JlYyAgcGZyX2RyaXZlcl9jbGFzcyA9CisgIHsKKyAgICB7CisgICAgICBGVF9NT0RVTEVfRk9OVF9EUklWRVIgICAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUsCisKKyAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorCisgICAgICAicGZyIiwKKyAgICAgIDB4MTAwMDBMLAorICAgICAgMHgyMDAwMEwsCisKKyAgICAgIE5VTEwsCisKKyAgICAgIDAsICAgICAgICAgICAgICAgIC8qIEZUX01vZHVsZV9Db25zdHJ1Y3RvciAqLworICAgICAgMCwgICAgICAgICAgICAgICAgLyogRlRfTW9kdWxlX0Rlc3RydWN0b3IgICovCisgICAgICBwZnJfZ2V0X3NlcnZpY2UKKyAgICB9LAorCisgICAgc2l6ZW9mICggUEZSX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBQRlJfU2l6ZVJlYyApLAorICAgIHNpemVvZiAoIFBGUl9TbG90UmVjICksCisKKyAgICBwZnJfZmFjZV9pbml0LAorICAgIHBmcl9mYWNlX2RvbmUsCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiBGVF9TaXplX0luaXRGdW5jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiBGVF9TaXplX0RvbmVGdW5jICovCisgICAgcGZyX3Nsb3RfaW5pdCwKKyAgICBwZnJfc2xvdF9kb25lLAorCisgICAgcGZyX3Nsb3RfbG9hZCwKKworICAgIHBmcl9nZXRfa2VybmluZywKKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0dldEFkdmFuY2VzRnVuYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogRlRfU2l6ZV9SZXF1ZXN0RnVuYyAgICAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIEZUX1NpemVfU2VsZWN0RnVuYyAgICAgICovCisgIH07CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJkcml2ci5oIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZHJpdnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWJlNDcwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZHJpdnIuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnJkcml2ci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSGlnaC1sZXZlbCBUeXBlIFBGUiBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QRlJEUklWUl9IX18KKyNkZWZpbmUgX19QRlJEUklWUl9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RSSVZFUl9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworI2Vycm9yICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCisjZW5kaWYKKworCisgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX0RyaXZlcl9DbGFzc1JlYyApICBwZnJfZHJpdmVyX2NsYXNzOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19QRlJEUklWUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmVycm9yLmggYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJlcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJlcnJvci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBmcmVycm9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQRlIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUEZSIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19QRlJFUlJPUl9IX18KKyNkZWZpbmUgX19QRlJFUlJPUl9IX18KKworI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisKKyN1bmRlZiBfX0ZURVJST1JTX0hfXworCisjdW5kZWYgIEZUX0VSUl9QUkVGSVgKKyNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgUEZSX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9QRlIKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fUEZSRVJST1JfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJnbG9hZC5jIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZ2xvYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QxM2MyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZ2xvYWQuYwpAQCAtMCwwICsxLDg0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZyZ2xvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBnbHlwaCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAicGZyZ2xvYWQuaCIKKyNpbmNsdWRlICJwZnJzYml0LmgiCisjaW5jbHVkZSAicGZybG9hZC5oIiAgICAgICAgICAgIC8qIGZvciBtYWNybyBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAicGZyZXJyb3IuaCIKKworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9wZnIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBQRlIgR0xZUEggQlVJTERFUiAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcGZyX2dseXBoX2luaXQoIFBGUl9HbHlwaCAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfWkVSTyggZ2x5cGggKTsKKworICAgIGdseXBoLT5sb2FkZXIgICAgID0gbG9hZGVyOworICAgIGdseXBoLT5wYXRoX2JlZ3VuID0gMDsKKworICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHBmcl9nbHlwaF9kb25lKCBQRlJfR2x5cGggIGdseXBoICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZ2x5cGgtPmxvYWRlci0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCBnbHlwaC0+eF9jb250cm9sICk7CisgICAgZ2x5cGgtPnlfY29udHJvbCA9IE5VTEw7CisKKyAgICBnbHlwaC0+bWF4X3h5X2NvbnRyb2wgPSAwOworI2lmIDAKKyAgICBnbHlwaC0+bnVtX3hfY29udHJvbCAgPSAwOworICAgIGdseXBoLT5udW1feV9jb250cm9sICA9IDA7CisjZW5kaWYKKworICAgIEZUX0ZSRUUoIGdseXBoLT5zdWJzICk7CisKKyAgICBnbHlwaC0+bWF4X3N1YnMgPSAwOworICAgIGdseXBoLT5udW1fc3VicyA9IDA7CisKKyAgICBnbHlwaC0+bG9hZGVyICAgICA9IE5VTEw7CisgICAgZ2x5cGgtPnBhdGhfYmVndW4gPSAwOworICB9CisKKworICAvKiBjbG9zZSBjdXJyZW50IGNvbnRvdXIsIGlmIGFueSAqLworICBzdGF0aWMgdm9pZAorICBwZnJfZ2x5cGhfY2xvc2VfY29udG91ciggUEZSX0dseXBoICBnbHlwaCApCisgIHsKKyAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyICA9IGdseXBoLT5sb2FkZXI7CisgICAgRlRfT3V0bGluZSogICAgIG91dGxpbmUgPSAmbG9hZGVyLT5jdXJyZW50Lm91dGxpbmU7CisgICAgRlRfSW50ICAgICAgICAgIGxhc3QsIGZpcnN0OworCisKKyAgICBpZiAoICFnbHlwaC0+cGF0aF9iZWd1biApCisgICAgICByZXR1cm47CisKKyAgICAvKiBjb21wdXRlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGluZGljZXMgaW4gY3VycmVudCBnbHlwaCBvdXRsaW5lICovCisgICAgbGFzdCAgPSBvdXRsaW5lLT5uX3BvaW50cyAtIDE7CisgICAgZmlyc3QgPSAwOworICAgIGlmICggb3V0bGluZS0+bl9jb250b3VycyA+IDAgKQorICAgICAgZmlyc3QgPSBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV07CisKKyAgICAvKiBpZiB0aGUgbGFzdCBwb2ludCBmYWxscyBvbiB0aGUgc2FtZSBsb2NhdGlvbiB0aGFuIHRoZSBmaXJzdCBvbmUgKi8KKyAgICAvKiB3ZSBuZWVkIHRvIGRlbGV0ZSBpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGxhc3QgPiBmaXJzdCApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgcDEgPSBvdXRsaW5lLT5wb2ludHMgKyBmaXJzdDsKKyAgICAgIEZUX1ZlY3RvciogIHAyID0gb3V0bGluZS0+cG9pbnRzICsgbGFzdDsKKworCisgICAgICBpZiAoIHAxLT54ID09IHAyLT54ICYmIHAxLT55ID09IHAyLT55ICkKKyAgICAgIHsKKyAgICAgICAgb3V0bGluZS0+bl9wb2ludHMtLTsKKyAgICAgICAgbGFzdC0tOworICAgICAgfQorICAgIH0KKworICAgIC8qIGRvbid0IGFkZCBlbXB0eSBjb250b3VycyAqLworICAgIGlmICggbGFzdCA+PSBmaXJzdCApCisgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzKytdID0gKHNob3J0KWxhc3Q7CisKKyAgICBnbHlwaC0+cGF0aF9iZWd1biA9IDA7CisgIH0KKworCisgIC8qIHJlc2V0IGdseXBoIHRvIHN0YXJ0IHRoZSBsb2FkaW5nIG9mIGEgbmV3IGdseXBoICovCisgIHN0YXRpYyB2b2lkCisgIHBmcl9nbHlwaF9zdGFydCggUEZSX0dseXBoICBnbHlwaCApCisgIHsKKyAgICBnbHlwaC0+cGF0aF9iZWd1biA9IDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwZnJfZ2x5cGhfbGluZV90byggUEZSX0dseXBoICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0byApCisgIHsKKyAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyICA9IGdseXBoLT5sb2FkZXI7CisgICAgRlRfT3V0bGluZSogICAgIG91dGxpbmUgPSAmbG9hZGVyLT5jdXJyZW50Lm91dGxpbmU7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworCisKKyAgICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgYmVndW4gYSBuZXcgcGF0aCAqLworICAgIGlmICggIWdseXBoLT5wYXRoX2JlZ3VuICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICBGVF9FUlJPUigoICJwZnJfZ2x5cGhfbGluZV90bzogaW52YWxpZCBnbHlwaCBkYXRhXG4iICkpOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBsb2FkZXIsIDEsIDAgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgRlRfSW50ICBuID0gb3V0bGluZS0+bl9wb2ludHM7CisKKworICAgICAgb3V0bGluZS0+cG9pbnRzW25dID0gKnRvOworICAgICAgb3V0bGluZS0+dGFncyAgW25dID0gRlRfQ1VSVkVfVEFHX09OOworCisgICAgICBvdXRsaW5lLT5uX3BvaW50cysrOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHBmcl9nbHlwaF9jdXJ2ZV90byggUEZSX0dseXBoICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29udHJvbDEsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29udHJvbDIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8gKQorICB7CisgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciAgPSBnbHlwaC0+bG9hZGVyOworICAgIEZUX091dGxpbmUqICAgICBvdXRsaW5lID0gJmxvYWRlci0+Y3VycmVudC5vdXRsaW5lOworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKworCisgICAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGJlZ3VuIGEgbmV3IHBhdGggKi8KKyAgICBpZiAoICFnbHlwaC0+cGF0aF9iZWd1biApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgRlRfRVJST1IoKCAicGZyX2dseXBoX2xpbmVfdG86IGludmFsaWQgZ2x5cGggZGF0YVxuIiApKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlcnJvciA9IEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggbG9hZGVyLCAzLCAwICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHZlYyA9IG91dGxpbmUtPnBvaW50cyAgICAgICAgICsgb3V0bGluZS0+bl9wb2ludHM7CisgICAgICBGVF9CeXRlKiAgICB0YWcgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzOworCisKKyAgICAgIHZlY1swXSA9ICpjb250cm9sMTsKKyAgICAgIHZlY1sxXSA9ICpjb250cm9sMjsKKyAgICAgIHZlY1syXSA9ICp0bzsKKyAgICAgIHRhZ1swXSA9IEZUX0NVUlZFX1RBR19DVUJJQzsKKyAgICAgIHRhZ1sxXSA9IEZUX0NVUlZFX1RBR19DVUJJQzsKKyAgICAgIHRhZ1syXSA9IEZUX0NVUlZFX1RBR19PTjsKKworICAgICAgb3V0bGluZS0+bl9wb2ludHMgPSAoRlRfU2hvcnQpKCBvdXRsaW5lLT5uX3BvaW50cyArIDMgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwZnJfZ2x5cGhfbW92ZV90byggUEZSX0dseXBoICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0byApCisgIHsKKyAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyICA9IGdseXBoLT5sb2FkZXI7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworCisKKyAgICAvKiBjbG9zZSBjdXJyZW50IGNvbnRvdXIgaWYgYW55ICovCisgICAgcGZyX2dseXBoX2Nsb3NlX2NvbnRvdXIoIGdseXBoICk7CisKKyAgICAvKiBpbmRpY2F0ZSB0aGF0IGEgbmV3IGNvbnRvdXIgaGFzIHN0YXJ0ZWQgKi8KKyAgICBnbHlwaC0+cGF0aF9iZWd1biA9IDE7CisKKyAgICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIHNwYWNlIGZvciBhIG5ldyBjb250b3VyIGFuZCBhIG5ldyBwb2ludCAqLworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBsb2FkZXIsIDEsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICAvKiBhZGQgbmV3IHN0YXJ0IHBvaW50ICovCisgICAgICBlcnJvciA9IHBmcl9nbHlwaF9saW5lX3RvKCBnbHlwaCwgdG8gKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgcGZyX2dseXBoX2VuZCggUEZSX0dseXBoICBnbHlwaCApCisgIHsKKyAgICAvKiBjbG9zZSBjdXJyZW50IGNvbnRvdXIgaWYgYW55ICovCisgICAgcGZyX2dseXBoX2Nsb3NlX2NvbnRvdXIoIGdseXBoICk7CisKKyAgICAvKiBtZXJnZSB0aGUgY3VycmVudCBnbHlwaCBpbnRvIHRoZSBzdGFjayAqLworICAgIEZUX0dseXBoTG9hZGVyX0FkZCggZ2x5cGgtPmxvYWRlciApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgUEZSIEdMWVBIIExPQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIGxvYWQgYSBzaW1wbGUgZ2x5cGggKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBmcl9nbHlwaF9sb2FkX3NpbXBsZSggUEZSX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGdseXBoLT5sb2FkZXItPm1lbW9yeTsKKyAgICBGVF9VSW50ICAgIGZsYWdzLCB4X2NvdW50LCB5X2NvdW50LCBpLCBjb3VudCwgbWFzazsKKyAgICBGVF9JbnQgICAgIHg7CisKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIGZsYWdzID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgLyogdGVzdCBmb3IgY29tcG9zaXRlIGdseXBocyAqLworICAgIGlmICggZmxhZ3MgJiBQRlJfR0xZUEhfSVNfQ09NUE9VTkQgKQorICAgICAgZ290byBGYWlsdXJlOworCisgICAgeF9jb3VudCA9IDA7CisgICAgeV9jb3VudCA9IDA7CisKKyAgICBpZiAoIGZsYWdzICYgUEZSX0dMWVBIXzFCWVRFX1hZQ09VTlQgKQorICAgIHsKKyAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgY291bnQgICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgIHhfY291bnQgPSBjb3VudCAmIDE1OworICAgICAgeV9jb3VudCA9IGNvdW50ID4+IDQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIGZsYWdzICYgUEZSX0dMWVBIX1hDT1VOVCApCisgICAgICB7CisgICAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgICB4X2NvdW50ID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgfQorCisgICAgICBpZiAoIGZsYWdzICYgUEZSX0dMWVBIX1lDT1VOVCApCisgICAgICB7CisgICAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgICB5X2NvdW50ID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgfQorICAgIH0KKworICAgIGNvdW50ID0geF9jb3VudCArIHlfY291bnQ7CisKKyAgICAvKiByZS1hbGxvY2F0ZSBhcnJheSB3aGVuIG5lY2Vzc2FyeSAqLworICAgIGlmICggY291bnQgPiBnbHlwaC0+bWF4X3h5X2NvbnRyb2wgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIG5ld19tYXggPSBGVF9QQURfQ0VJTCggY291bnQsIDggKTsKKworCisgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBnbHlwaC0+eF9jb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPm1heF94eV9jb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X21heCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBnbHlwaC0+bWF4X3h5X2NvbnRyb2wgPSBuZXdfbWF4OworICAgIH0KKworICAgIGdseXBoLT55X2NvbnRyb2wgPSBnbHlwaC0+eF9jb250cm9sICsgeF9jb3VudDsKKworICAgIG1hc2sgID0gMDsKKyAgICB4ICAgICA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggKCBpICYgNyApID09IDAgKQorICAgICAgeworICAgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgICAgbWFzayA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBtYXNrICYgMSApCisgICAgICB7CisgICAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgICB4ID0gUEZSX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgIHggKz0gUEZSX05FWFRfQllURSggcCApOworICAgICAgfQorCisgICAgICBnbHlwaC0+eF9jb250cm9sW2ldID0geDsKKworICAgICAgbWFzayA+Pj0gMTsKKyAgICB9CisKKyAgICAvKiBYWFg6IGZvciBub3cgd2UgaWdub3JlIHRoZSBzZWNvbmRhcnkgc3Ryb2tlIGFuZCBlZGdlIGRlZmluaXRpb25zICovCisgICAgLyogICAgICBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHN1cHBvcnQgbmF0aXZlIFBGUiBoaW50aW5nICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIGZsYWdzICYgUEZSX0dMWVBIX0VYVFJBX0lURU1TICkKKyAgICB7CisgICAgICBlcnJvciA9IHBmcl9leHRyYV9pdGVtc19za2lwKCAmcCwgbGltaXQgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgcGZyX2dseXBoX3N0YXJ0KCBnbHlwaCApOworCisgICAgLyogbm93IGxvYWQgYSBzaW1wbGUgZ2x5cGggKi8KKyAgICB7CisgICAgICBGVF9WZWN0b3IgICBwb3NbNF07CisgICAgICBGVF9WZWN0b3IqICBjdXI7CisKKworICAgICAgcG9zWzBdLnggPSBwb3NbMF0ueSA9IDA7CisgICAgICBwb3NbM10gICA9IHBvc1swXTsKKworICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgZm9ybWF0LCBmb3JtYXRfbG93LCBhcmdzX2Zvcm1hdCA9IDAsIGFyZ3NfY291bnQsIG47CisKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAvKiAgcmVhZCBpbnN0cnVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgICAgZm9ybWF0ICAgICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgZm9ybWF0X2xvdyA9IGZvcm1hdCAmIDE1OworCisgICAgICAgIHN3aXRjaCAoIGZvcm1hdCA+PiA0ICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZ2x5cGggKi8KKyAgICAgICAgICBGVF9UUkFDRTYoKCAiLSBlbmQgZ2x5cGgiICkpOworICAgICAgICAgIGFyZ3NfY291bnQgPSAwOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgbGluZSBvcGVyYXRpb24gKi8KKyAgICAgICAgICBGVF9UUkFDRTYoKCAiLSBnZW5lcmFsIGxpbmUiICkpOworICAgICAgICAgIGdvdG8gTGluZTE7CisKKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92ZSB0byBpbnNpZGUgY29udG91ciAgKi8KKyAgICAgICAgICBGVF9UUkFDRTYoKCAiLSBtb3ZlIHRvIGluc2lkZSIgKSk7CisgICAgICAgICAgZ290byBMaW5lMTsKKworICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIHRvIG91dHNpZGUgY29udG91ciAqLworICAgICAgICAgIEZUX1RSQUNFNigoICItIG1vdmUgdG8gb3V0c2lkZSIgKSk7CisgICAgICAgIExpbmUxOgorICAgICAgICAgIGFyZ3NfZm9ybWF0ID0gZm9ybWF0X2xvdzsKKyAgICAgICAgICBhcmdzX2NvdW50ICA9IDE7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9yaXpvbnRhbCBsaW5lIHRvICovCisgICAgICAgICAgRlRfVFJBQ0U2KCggIi0gaG9yaXpvbnRhbCBsaW5lIHRvIGN4LiVkIiwgZm9ybWF0X2xvdyApKTsKKyAgICAgICAgICBpZiAoIGZvcm1hdF9sb3cgPj0geF9jb3VudCApCisgICAgICAgICAgICBnb3RvIEZhaWx1cmU7CisgICAgICAgICAgcG9zWzBdLnggICA9IGdseXBoLT54X2NvbnRyb2xbZm9ybWF0X2xvd107CisgICAgICAgICAgcG9zWzBdLnkgICA9IHBvc1szXS55OworICAgICAgICAgIHBvc1szXSAgICAgPSBwb3NbMF07CisgICAgICAgICAgYXJnc19jb3VudCA9IDA7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgbGluZSB0byAqLworICAgICAgICAgIEZUX1RSQUNFNigoICItIHZlcnRpY2FsIGxpbmUgdG8gY3kuJWQiLCBmb3JtYXRfbG93ICkpOworICAgICAgICAgIGlmICggZm9ybWF0X2xvdyA+PSB5X2NvdW50ICkKKyAgICAgICAgICAgIGdvdG8gRmFpbHVyZTsKKyAgICAgICAgICBwb3NbMF0ueCAgID0gcG9zWzNdLng7CisgICAgICAgICAgcG9zWzBdLnkgICA9IGdseXBoLT55X2NvbnRyb2xbZm9ybWF0X2xvd107CisgICAgICAgICAgcG9zWzNdICAgICA9IHBvc1swXTsKKyAgICAgICAgICBhcmdzX2NvdW50ID0gMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3Jpem9udGFsIHRvIHZlcnRpY2FsIGN1cnZlICovCisgICAgICAgICAgRlRfVFJBQ0U2KCggIi0gaHYgY3VydmUgIiApKTsKKyAgICAgICAgICBhcmdzX2Zvcm1hdCA9IDB4QjhFOworICAgICAgICAgIGFyZ3NfY291bnQgID0gMzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJ0aWNhbCB0byBob3Jpem9udGFsIGN1cnZlICovCisgICAgICAgICAgRlRfVFJBQ0U2KCggIi0gdmggY3VydmUiICkpOworICAgICAgICAgIGFyZ3NfZm9ybWF0ID0gMHhFMkI7CisgICAgICAgICAgYXJnc19jb3VudCAgPSAzOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY3VydmUgdG8gKi8KKyAgICAgICAgICBGVF9UUkFDRTYoKCAiLSBnZW5lcmFsIGN1cnZlIiApKTsKKyAgICAgICAgICBhcmdzX2NvdW50ICA9IDQ7CisgICAgICAgICAgYXJnc19mb3JtYXQgPSBmb3JtYXRfbG93OworICAgICAgICB9CisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAvKiAgbm93IHJlYWQgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgY3VyID0gcG9zOworICAgICAgICBmb3IgKCBuID0gMDsgbiA8IGFyZ3NfY291bnQ7IG4rKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBpZHg7CisgICAgICAgICAgRlRfSW50ICAgZGVsdGE7CisKKworICAgICAgICAgIC8qIHJlYWQgdGhlIFggYXJndW1lbnQgKi8KKyAgICAgICAgICBzd2l0Y2ggKCBhcmdzX2Zvcm1hdCAmIDMgKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC1iaXQgaW5kZXggKi8KKyAgICAgICAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgICAgICAgaWR4ICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgICAgIGlmICggaWR4ID49IHhfY291bnQgKQorICAgICAgICAgICAgICBnb3RvIEZhaWx1cmU7CisgICAgICAgICAgICBjdXItPnggPSBnbHlwaC0+eF9jb250cm9sW2lkeF07CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiIGN4IyVkIiwgaWR4ICkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYtYml0IHZhbHVlICovCisgICAgICAgICAgICBQRlJfQ0hFQ0soIDIgKTsKKyAgICAgICAgICAgIGN1ci0+eCA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiIHguJWQiLCBjdXItPnggKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4LWJpdCBkZWx0YSAqLworICAgICAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgICAgICBkZWx0YSAgPSBQRlJfTkVYVF9JTlQ4KCBwICk7CisgICAgICAgICAgICBjdXItPnggPSBwb3NbM10ueCArIGRlbHRhOworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiBkeC4lZCIsIGRlbHRhICkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiB8IiApKTsKKyAgICAgICAgICAgIGN1ci0+eCA9IHBvc1szXS54OworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIHJlYWQgdGhlIFkgYXJndW1lbnQgKi8KKyAgICAgICAgICBzd2l0Y2ggKCAoIGFyZ3NfZm9ybWF0ID4+IDIgKSAmIDMgKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC1iaXQgaW5kZXggKi8KKyAgICAgICAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgICAgICAgaWR4ICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgICAgIGlmICggaWR4ID49IHlfY291bnQgKQorICAgICAgICAgICAgICBnb3RvIEZhaWx1cmU7CisgICAgICAgICAgICBjdXItPnkgPSBnbHlwaC0+eV9jb250cm9sW2lkeF07CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiIGN5IyVkIiwgaWR4ICkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYtYml0IGFic29sdXRlIHZhbHVlICovCisgICAgICAgICAgICBQRlJfQ0hFQ0soIDIgKTsKKyAgICAgICAgICAgIGN1ci0+eSA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiIHkuJWQiLCBjdXItPnkgKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4LWJpdCBkZWx0YSAqLworICAgICAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgICAgICBkZWx0YSAgPSBQRlJfTkVYVF9JTlQ4KCBwICk7CisgICAgICAgICAgICBjdXItPnkgPSBwb3NbM10ueSArIGRlbHRhOworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiBkeS4lZCIsIGRlbHRhICkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAtIiApKTsKKyAgICAgICAgICAgIGN1ci0+eSA9IHBvc1szXS55OworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIHJlYWQgdGhlIGFkZGl0aW9uYWwgZm9ybWF0IGZsYWcgZm9yIHRoZSBnZW5lcmFsIGN1cnZlICovCisgICAgICAgICAgaWYgKCBuID09IDAgJiYgYXJnc19jb3VudCA9PSA0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgICAgICAgIGFyZ3NfZm9ybWF0ID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgICAgICAgYXJnc19jb3VudC0tOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmdzX2Zvcm1hdCA+Pj0gNDsKKworICAgICAgICAgIC8qIHNhdmUgdGhlIHByZXZpb3VzIHBvaW50ICovCisgICAgICAgICAgcG9zWzNdID0gY3VyWzBdOworICAgICAgICAgIGN1cisrOworICAgICAgICB9CisKKyAgICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qICBmaW5hbGx5LCBleGVjdXRlIGluc3RydWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzd2l0Y2ggKCBmb3JtYXQgPj4gNCApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGdseXBoID0+IEVYSVQgKi8KKyAgICAgICAgICBwZnJfZ2x5cGhfZW5kKCBnbHlwaCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW5lIG9wZXJhdGlvbnMgKi8KKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDM6CisgICAgICAgICAgZXJyb3IgPSBwZnJfZ2x5cGhfbGluZV90byggZ2x5cGgsIHBvcyApOworICAgICAgICAgIGdvdG8gVGVzdF9FcnJvcjsKKworICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIHRvIGluc2lkZSBjb250b3VyICAqLworICAgICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIHRvIG91dHNpZGUgY29udG91ciAqLworICAgICAgICAgIGVycm9yID0gcGZyX2dseXBoX21vdmVfdG8oIGdseXBoLCBwb3MgKTsKKyAgICAgICAgICBnb3RvIFRlc3RfRXJyb3I7CisKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VydmUgb3BlcmF0aW9ucyAqLworICAgICAgICAgIGVycm9yID0gcGZyX2dseXBoX2N1cnZlX3RvKCBnbHlwaCwgcG9zLCBwb3MgKyAxLCBwb3MgKyAyICk7CisKKyAgICAgICAgVGVzdF9FcnJvcjogIC8qIHRlc3QgZXJyb3IgY29uZGl0aW9uICovCisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0gLyogZm9yICg7OykgKi8KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgRmFpbHVyZToKKyAgVG9vX1Nob3J0OgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBGVF9FUlJPUigoICJwZnJfZ2x5cGhfbG9hZF9zaW1wbGU6IGludmFsaWQgZ2x5cGggZGF0YVxuIiApKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIC8qIGxvYWQgYSBjb21wb3NpdGUvY29tcG91bmQgZ2x5cGggKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBmcl9nbHlwaF9sb2FkX2NvbXBvdW5kKCBQRlJfR2x5cGggIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgPSBnbHlwaC0+bG9hZGVyOworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBsb2FkZXItPm1lbW9yeTsKKyAgICBQRlJfU3ViR2x5cGggICAgc3ViZ2x5cGg7CisgICAgRlRfVUludCAgICAgICAgIGZsYWdzLCBpLCBjb3VudCwgb3JnX2NvdW50OworICAgIEZUX0ludCAgICAgICAgICB4X3BvcywgeV9wb3M7CisKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIGZsYWdzID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgLyogdGVzdCBmb3IgY29tcG9zaXRlIGdseXBocyAqLworICAgIGlmICggISggZmxhZ3MgJiBQRlJfR0xZUEhfSVNfQ09NUE9VTkQgKSApCisgICAgICBnb3RvIEZhaWx1cmU7CisKKyAgICBjb3VudCA9IGZsYWdzICYgMHgzRjsKKworICAgIC8qIGlnbm9yZSBleHRyYSBpdGVtcyB3aGVuIHByZXNlbnQgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmbGFncyAmIFBGUl9HTFlQSF9FWFRSQV9JVEVNUyApCisgICAgeworICAgICAgZXJyb3IgPSBwZnJfZXh0cmFfaXRlbXNfc2tpcCggJnAsIGxpbWl0ICk7CisgICAgICBpZiAoZXJyb3IpIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiB3ZSBjYW4ndCByZWx5IG9uIHRoZSBGVF9HbHlwaExvYWRlciB0byBsb2FkIHN1Yi1nbHlwaHMsIGJlY2F1c2UgICAqLworICAgIC8qIHRoZSBQRlIgZm9ybWF0IGlzIGR1bWIsIHVzaW5nIGRpcmVjdCBmaWxlIG9mZnNldHMgdG8gcG9pbnQgdG8gdGhlICovCisgICAgLyogc3ViLWdseXBocyAoaW5zdGVhZCBvZiBnbHlwaCBpbmRpY2VzKS4gIFNpZ2guICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEZvciBub3csIHdlIGxvYWQgdGhlIGxpc3Qgb2Ygc3ViLWdseXBocyBpbnRvIGEgZGlmZmVyZW50IGFycmF5ICAgICovCisgICAgLyogYnV0IHRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gdXNpbmcgdGhlIGF1dG8taGludGVyIGF0IGl0cyBiZXN0ICAgKi8KKyAgICAvKiBxdWFsaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgb3JnX2NvdW50ID0gZ2x5cGgtPm51bV9zdWJzOworCisgICAgaWYgKCBvcmdfY291bnQgKyBjb3VudCA+IGdseXBoLT5tYXhfc3VicyApCisgICAgeworICAgICAgRlRfVUludCAgbmV3X21heCA9ICggb3JnX2NvdW50ICsgY291bnQgKyAzICkgJiAoRlRfVUludCktNDsKKworCisgICAgICAvKiB3ZSBhcmJpdHJhcmlseSBsaW1pdCB0aGUgbnVtYmVyIG9mIHN1YmdseXBocyAqLworICAgICAgLyogdG8gYXZvaWQgZW5kbGVzcyByZWN1cnNpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggbmV3X21heCA+IDY0ICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBGVF9FUlJPUigoICJwZnJfZ2x5cGhfbG9hZF9jb21wb3VuZDoiCisgICAgICAgICAgICAgICAgICAgIiB0b28gbWFueSBjb21wb3VuZCBnbHlwaHMgY29tcG9uZW50c1xuIiApKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoIEZUX1JFTkVXX0FSUkFZKCBnbHlwaC0+c3VicywgZ2x5cGgtPm1heF9zdWJzLCBuZXdfbWF4ICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGdseXBoLT5tYXhfc3VicyA9IG5ld19tYXg7CisgICAgfQorCisgICAgc3ViZ2x5cGggPSBnbHlwaC0+c3VicyArIG9yZ19jb3VudDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKywgc3ViZ2x5cGgrKyApCisgICAgeworICAgICAgRlRfVUludCAgZm9ybWF0OworCisKKyAgICAgIHhfcG9zID0gMDsKKyAgICAgIHlfcG9zID0gMDsKKworICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICBmb3JtYXQgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICAgIC8qIHJlYWQgc2NhbGUgd2hlbiBhdmFpbGFibGUgKi8KKyAgICAgIHN1YmdseXBoLT54X3NjYWxlID0gMHgxMDAwMEw7CisgICAgICBpZiAoIGZvcm1hdCAmIFBGUl9TVUJHTFlQSF9YU0NBTEUgKQorICAgICAgeworICAgICAgICBQRlJfQ0hFQ0soIDIgKTsKKyAgICAgICAgc3ViZ2x5cGgtPnhfc2NhbGUgPSBQRlJfTkVYVF9TSE9SVCggcCApIDw8IDQ7CisgICAgICB9CisKKyAgICAgIHN1YmdseXBoLT55X3NjYWxlID0gMHgxMDAwMEw7CisgICAgICBpZiAoIGZvcm1hdCAmIFBGUl9TVUJHTFlQSF9ZU0NBTEUgKQorICAgICAgeworICAgICAgICBQRlJfQ0hFQ0soIDIgKTsKKyAgICAgICAgc3ViZ2x5cGgtPnlfc2NhbGUgPSBQRlJfTkVYVF9TSE9SVCggcCApIDw8IDQ7CisgICAgICB9CisKKyAgICAgIC8qIHJlYWQgb2Zmc2V0ICovCisgICAgICBzd2l0Y2ggKCBmb3JtYXQgJiAzICkKKyAgICAgIHsKKyAgICAgIGNhc2UgMToKKyAgICAgICAgUEZSX0NIRUNLKCAyICk7CisgICAgICAgIHhfcG9zID0gUEZSX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgIHhfcG9zICs9IFBGUl9ORVhUX0lOVDgoIHAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIDsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICggKCBmb3JtYXQgPj4gMiApICYgMyApCisgICAgICB7CisgICAgICBjYXNlIDE6CisgICAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgICB5X3BvcyA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIFBGUl9DSEVDSyggMSApOworICAgICAgICB5X3BvcyArPSBQRlJfTkVYVF9JTlQ4KCBwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICA7CisgICAgICB9CisKKyAgICAgIHN1YmdseXBoLT54X2RlbHRhID0geF9wb3M7CisgICAgICBzdWJnbHlwaC0+eV9kZWx0YSA9IHlfcG9zOworCisgICAgICAvKiByZWFkIGdseXBoIHBvc2l0aW9uIGFuZCBzaXplIG5vdyAqLworICAgICAgaWYgKCBmb3JtYXQgJiBQRlJfU1VCR0xZUEhfMkJZVEVfU0laRSApCisgICAgICB7CisgICAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgICBzdWJnbHlwaC0+Z3BzX3NpemUgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgIHN1YmdseXBoLT5ncHNfc2l6ZSA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBmb3JtYXQgJiBQRlJfU1VCR0xZUEhfM0JZVEVfT0ZGU0VUICkKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAzICk7CisgICAgICAgIHN1YmdseXBoLT5ncHNfb2Zmc2V0ID0gUEZSX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAyICk7CisgICAgICAgIHN1YmdseXBoLT5ncHNfb2Zmc2V0ID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisgICAgICB9CisKKyAgICAgIGdseXBoLT5udW1fc3VicysrOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsdXJlOgorICBUb29fU2hvcnQ6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIEZUX0VSUk9SKCggInBmcl9nbHlwaF9sb2FkX2NvbXBvdW5kOiBpbnZhbGlkIGdseXBoIGRhdGFcbiIgKSk7CisgICAgZ290byBFeGl0OworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGZyX2dseXBoX2xvYWRfcmVjKCBQRlJfR2x5cGggIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgZ3BzX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX0J5dGUqICBwOworICAgIEZUX0J5dGUqICBsaW1pdDsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZ3BzX29mZnNldCArIG9mZnNldCApIHx8CisgICAgICAgICBGVF9GUkFNRV9FTlRFUiggc2l6ZSApICAgICAgICAgICAgICAgICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHAgICAgID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOworICAgIGxpbWl0ID0gcCArIHNpemU7CisKKyAgICBpZiAoIHNpemUgPiAwICYmICpwICYgUEZSX0dMWVBIX0lTX0NPTVBPVU5EICkKKyAgICB7CisgICAgICBGVF9VSW50ICAgICAgICAgbiwgb2xkX2NvdW50LCBjb3VudDsKKyAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgPSBnbHlwaC0+bG9hZGVyOworICAgICAgRlRfT3V0bGluZSogICAgIGJhc2UgICA9ICZsb2FkZXItPmJhc2Uub3V0bGluZTsKKworCisgICAgICBvbGRfY291bnQgPSBnbHlwaC0+bnVtX3N1YnM7CisKKyAgICAgIC8qIHRoaXMgaXMgYSBjb21wb3VuZCBnbHlwaCAtIGxvYWQgaXQgKi8KKyAgICAgIGVycm9yID0gcGZyX2dseXBoX2xvYWRfY29tcG91bmQoIGdseXBoLCBwLCBsaW1pdCApOworCisgICAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGNvdW50ID0gZ2x5cGgtPm51bV9zdWJzIC0gb2xkX2NvdW50OworCisgICAgICBGVF9UUkFDRTQoKCAiY29tcG91bmQgZ2x5cGggd2l0aCAlZCBlbGVtZW50cyAob2Zmc2V0ICVsdSk6XG4iLAorICAgICAgICAgICAgICAgICAgY291bnQsIG9mZnNldCApKTsKKworICAgICAgLyogbm93LCBsb2FkIGVhY2ggaW5kaXZpZHVhbCBnbHlwaCAqLworICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICAgICAgICBpLCBvbGRfcG9pbnRzLCBudW1fcG9pbnRzOworICAgICAgICBQRlJfU3ViR2x5cGggIHN1YmdseXBoOworCisKKyAgICAgICAgRlRfVFJBQ0U0KCggIiAgc3ViZ2x5cGggJWQ6XG4iLCBuICkpOworCisgICAgICAgIHN1YmdseXBoICAgPSBnbHlwaC0+c3VicyArIG9sZF9jb3VudCArIG47CisgICAgICAgIG9sZF9wb2ludHMgPSBiYXNlLT5uX3BvaW50czsKKworICAgICAgICBlcnJvciA9IHBmcl9nbHlwaF9sb2FkX3JlYyggZ2x5cGgsIHN0cmVhbSwgZ3BzX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmdseXBoLT5ncHNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPmdwc19zaXplICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIG5vdGUgdGhhdCBgZ2x5cGgtPnN1YnMnIG1pZ2h0IGhhdmUgYmVlbiByZS1hbGxvY2F0ZWQgKi8KKyAgICAgICAgc3ViZ2x5cGggICA9IGdseXBoLT5zdWJzICsgb2xkX2NvdW50ICsgbjsKKyAgICAgICAgbnVtX3BvaW50cyA9IGJhc2UtPm5fcG9pbnRzIC0gb2xkX3BvaW50czsKKworICAgICAgICAvKiB0cmFuc2xhdGUgYW5kIGV2ZW50dWFsbHkgc2NhbGUgdGhlIG5ldyBnbHlwaCBwb2ludHMgKi8KKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+eF9zY2FsZSAhPSAweDEwMDAwTCB8fCBzdWJnbHlwaC0+eV9zY2FsZSAhPSAweDEwMDAwTCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMgPSBiYXNlLT5wb2ludHMgKyBvbGRfcG9pbnRzOworCisKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKywgdmVjKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZlYy0+eCA9IEZUX011bEZpeCggdmVjLT54LCBzdWJnbHlwaC0+eF9zY2FsZSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnhfZGVsdGE7CisgICAgICAgICAgICB2ZWMtPnkgPSBGVF9NdWxGaXgoIHZlYy0+eSwgc3ViZ2x5cGgtPnlfc2NhbGUgKSArCisgICAgICAgICAgICAgICAgICAgICAgIHN1YmdseXBoLT55X2RlbHRhOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMgPSBsb2FkZXItPmJhc2Uub3V0bGluZS5wb2ludHMgKyBvbGRfcG9pbnRzOworCisKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKywgdmVjKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZlYy0+eCArPSBzdWJnbHlwaC0+eF9kZWx0YTsKKyAgICAgICAgICAgIHZlYy0+eSArPSBzdWJnbHlwaC0+eV9kZWx0YTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBwcm9jZWVkIHRvIG5leHQgc3ViLWdseXBoICovCisgICAgICB9CisKKyAgICAgIEZUX1RSQUNFNCgoICJlbmQgY29tcG91bmQgZ2x5cGggd2l0aCAlZCBlbGVtZW50c1xuIiwgY291bnQgKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9UUkFDRTQoKCAic2ltcGxlIGdseXBoIChvZmZzZXQgJWx1KVxuIiwgb2Zmc2V0ICkpOworCisgICAgICAvKiBsb2FkIGEgc2ltcGxlIGdseXBoICovCisgICAgICBlcnJvciA9IHBmcl9nbHlwaF9sb2FkX3NpbXBsZSggZ2x5cGgsIHAsIGxpbWl0ICk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZ2x5cGhfbG9hZCggUEZSX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBncHNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUgKQorICB7CisgICAgLyogaW5pdGlhbGl6ZSBnbHlwaCBsb2FkZXIgKi8KKyAgICBGVF9HbHlwaExvYWRlcl9SZXdpbmQoIGdseXBoLT5sb2FkZXIgKTsKKworICAgIGdseXBoLT5udW1fc3VicyA9IDA7CisKKyAgICAvKiBsb2FkIHRoZSBnbHlwaCwgcmVjdXJzaXZlbHkgd2hlbiBuZWVkZWQgKi8KKyAgICByZXR1cm4gcGZyX2dseXBoX2xvYWRfcmVjKCBnbHlwaCwgc3RyZWFtLCBncHNfb2Zmc2V0LCBvZmZzZXQsIHNpemUgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyZ2xvYWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3Bmcmdsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjOGRhMQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3Bmcmdsb2FkLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZyZ2xvYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBnbHlwaCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUEZSR0xPQURfSF9fCisjZGVmaW5lIF9fUEZSR0xPQURfSF9fCisKKyNpbmNsdWRlICJwZnJ0eXBlcy5oIgorCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcGZyX2dseXBoX2luaXQoIFBGUl9HbHlwaCAgICAgICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBmcl9nbHlwaF9kb25lKCBQRlJfR2x5cGggIGdseXBoICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfZ2x5cGhfbG9hZCggUEZSX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBncHNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUgKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fUEZSR0xPQURfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJsb2FkLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3MzExZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmxvYWQuYwpAQCAtMCwwICsxLDk0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZybG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAicGZybG9hZC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKworI2luY2x1ZGUgInBmcmVycm9yLmgiCisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcGZyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBIElURU1TICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZXh0cmFfaXRlbXNfc2tpcCggRlRfQnl0ZSogICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorICB7CisgICAgcmV0dXJuIHBmcl9leHRyYV9pdGVtc19wYXJzZSggcHAsIGxpbWl0LCBOVUxMLCBOVUxMICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZXh0cmFfaXRlbXNfcGFyc2UoIEZUX0J5dGUqICAgICAgICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX0V4dHJhSXRlbSAgIGl0ZW1fbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgaXRlbV9kYXRhICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgcCAgICAgPSAqcHA7CisgICAgRlRfVUludCAgIG51bV9pdGVtcywgaXRlbV90eXBlLCBpdGVtX3NpemU7CisKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIG51bV9pdGVtcyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIGZvciAoIDsgbnVtX2l0ZW1zID4gMDsgbnVtX2l0ZW1zLS0gKQorICAgIHsKKyAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgaXRlbV9zaXplID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgaXRlbV90eXBlID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgICBQRlJfQ0hFQ0soIGl0ZW1fc2l6ZSApOworCisgICAgICBpZiAoIGl0ZW1fbGlzdCApCisgICAgICB7CisgICAgICAgIFBGUl9FeHRyYUl0ZW0gIGV4dHJhID0gaXRlbV9saXN0OworCisKKyAgICAgICAgZm9yICggZXh0cmEgPSBpdGVtX2xpc3Q7IGV4dHJhLT5wYXJzZXIgIT0gTlVMTDsgZXh0cmErKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGV4dHJhLT50eXBlID09IGl0ZW1fdHlwZSApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBleHRyYS0+cGFyc2VyKCBwLCBwICsgaXRlbV9zaXplLCBpdGVtX2RhdGEgKTsKKyAgICAgICAgICAgIGlmICggZXJyb3IgKSBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwICs9IGl0ZW1fc2l6ZTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICAqcHAgPSBwOworICAgIHJldHVybiBlcnJvcjsKKworICBUb29fU2hvcnQ6CisgICAgRlRfRVJST1IoKCAicGZyX2V4dHJhX2l0ZW1zX3BhcnNlOiBpbnZhbGlkIGV4dHJhIGl0ZW1zIHRhYmxlXG4iICkpOworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSIEhFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBmcl9oZWFkZXJfZmllbGRzW10gPQorICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBQRlJfSGVhZGVyUmVjCisKKyAgICAgRlRfRlJBTUVfU1RBUlQoIDU4ICksCisgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBzaWduYXR1cmUgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHZlcnNpb24gKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHNpZ25hdHVyZTIgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGhlYWRlcl9zaXplICksCisKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGxvZ19kaXJfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbG9nX2Rpcl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbG9nX2ZvbnRfbWF4X3NpemUgKSwKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIGxvZ19mb250X3NlY3Rpb25fc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggbG9nX2ZvbnRfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggcGh5X2ZvbnRfbWF4X3NpemUgKSwKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIHBoeV9mb250X3NlY3Rpb25fc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggcGh5X2ZvbnRfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggZ3BzX21heF9zaXplICksCisgICAgICAgRlRfRlJBTUVfVU9GRjMgKCBncHNfc2VjdGlvbl9zaXplICksCisgICAgICAgRlRfRlJBTUVfVU9GRjMgKCBncHNfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX0JZVEUgICggbWF4X2JsdWVfdmFsdWVzICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfeF9vcnVzICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfeV9vcnVzICksCisKKyAgICAgICBGVF9GUkFNRV9CWVRFICAoIHBoeV9mb250X21heF9zaXplX2hpZ2ggKSwKKyAgICAgICBGVF9GUkFNRV9CWVRFICAoIGNvbG9yX2ZsYWdzICksCisKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIGJjdF9tYXhfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggYmN0X3NldF9tYXhfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggcGh5X2JjdF9zZXRfbWF4X3NpemUgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbnVtX3BoeV9mb250cyApLAorICAgICAgIEZUX0ZSQU1FX0JZVEUgICggbWF4X3ZlcnRfc3RlbV9zbmFwICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfaG9yel9zdGVtX3NuYXAgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heF9jaGFycyApLAorICAgICBGVF9GUkFNRV9FTkQKKyAgIH07CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2hlYWRlcl9sb2FkKCBQRlJfSGVhZGVyICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgLyogcmVhZCBoZWFkZXIgZGlyZWN0bHkgKi8KKyAgICBpZiAoICFGVF9TVFJFQU1fU0VFSyggMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgIUZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggcGZyX2hlYWRlcl9maWVsZHMsIGhlYWRlciApICkKKyAgICB7CisgICAgICAvKiBtYWtlIGEgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSBoZWFkZXIgKi8KKyAgICAgIGhlYWRlci0+cGh5X2ZvbnRfbWF4X3NpemUgKz0KKyAgICAgICAgKEZUX1VJbnQzMiloZWFkZXItPnBoeV9mb250X21heF9zaXplX2hpZ2ggPDwgMTY7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Jvb2wgKQorICBwZnJfaGVhZGVyX2NoZWNrKCBQRlJfSGVhZGVyICBoZWFkZXIgKQorICB7CisgICAgRlRfQm9vbCAgcmVzdWx0ID0gMTsKKworCisgICAgLyogY2hlY2sgc2lnbmF0dXJlIGFuZCBoZWFkZXIgc2l6ZSAqLworICAgIGlmICggaGVhZGVyLT5zaWduYXR1cmUgICE9IDB4NTA0NjUyMzBMIHx8ICAgLyogIlBGUjAiICovCisgICAgICAgICBoZWFkZXItPnZlcnNpb24gICAgID4gNCAgICAgICAgICAgfHwKKyAgICAgICAgIGhlYWRlci0+aGVhZGVyX3NpemUgPCA1OCAgICAgICAgICB8fAorICAgICAgICAgaGVhZGVyLT5zaWduYXR1cmUyICE9IDB4MEQwQSAgICAgICkgICAgLyogQ1IvTEYgICovCisgICAgeworICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuICByZXN1bHQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgUEZSIExPR0lDQUwgRk9OVFMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfbG9nX2ZvbnRfY291bnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgc2VjdGlvbl9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICphY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX1VJbnQgICBjb3VudDsKKyAgICBGVF9VSW50ICAgcmVzdWx0ID0gMDsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc2VjdGlvbl9vZmZzZXQgKSB8fCBGVF9SRUFEX1VTSE9SVCggY291bnQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICByZXN1bHQgPSBjb3VudDsKKworICBFeGl0OgorICAgICphY291bnQgPSAoRlRfTG9uZylyZXN1bHQ7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2xvZ19mb250X2xvYWQoIFBGUl9Mb2dGb250ICBsb2dfZm9udCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHNlY3Rpb25fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHNpemVfaW5jcmVtZW50ICkKKyAgeworICAgIEZUX1VJbnQgICAgbnVtX2xvZ19mb250czsKKyAgICBGVF9VSW50ICAgIGZsYWdzOworICAgIEZUX1VJbnQzMiAgb2Zmc2V0OworICAgIEZUX1VJbnQzMiAgc2l6ZTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzZWN0aW9uX29mZnNldCApIHx8CisgICAgICAgICBGVF9SRUFEX1VTSE9SVCggbnVtX2xvZ19mb250cyApICApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGlkeCA+PSBudW1fbG9nX2ZvbnRzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggaWR4ICogNSApIHx8CisgICAgICAgICBGVF9SRUFEX1VTSE9SVCggc2l6ZSApICAgIHx8CisgICAgICAgICBGVF9SRUFEX1VPRkYzICggb2Zmc2V0ICkgICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIHNhdmUgbG9naWNhbCBmb250IHNpemUgYW5kIG9mZnNldCAqLworICAgIGxvZ19mb250LT5zaXplICAgPSBzaXplOworICAgIGxvZ19mb250LT5vZmZzZXQgPSBvZmZzZXQ7CisKKyAgICAvKiBub3csIGNoZWNrIHRoZSByZXN0IG9mIHRoZSB0YWJsZSBiZWZvcmUgbG9hZGluZyBpdCAqLworICAgIHsKKyAgICAgIEZUX0J5dGUqICBwOworICAgICAgRlRfQnl0ZSogIGxpbWl0OworICAgICAgRlRfVUludCAgIGxvY2FsOworCisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApIHx8IEZUX0ZSQU1FX0VOVEVSKCBzaXplICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgICBsaW1pdCA9IHAgKyBzaXplOworCisgICAgICBQRlJfQ0hFQ0soMTMpOworCisgICAgICBsb2dfZm9udC0+bWF0cml4WzBdID0gUEZSX05FWFRfTE9ORyggcCApOworICAgICAgbG9nX2ZvbnQtPm1hdHJpeFsxXSA9IFBGUl9ORVhUX0xPTkcoIHAgKTsKKyAgICAgIGxvZ19mb250LT5tYXRyaXhbMl0gPSBQRlJfTkVYVF9MT05HKCBwICk7CisgICAgICBsb2dfZm9udC0+bWF0cml4WzNdID0gUEZSX05FWFRfTE9ORyggcCApOworCisgICAgICBmbGFncyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgbG9jYWwgPSAwOworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfU1RST0tFICkKKyAgICAgIHsKKyAgICAgICAgbG9jYWwrKzsKKyAgICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfMkJZVEVfU1RST0tFICkKKyAgICAgICAgICBsb2NhbCsrOworCisgICAgICAgIGlmICggKGZsYWdzICYgUEZSX0xJTkVfSk9JTl9NQVNLKSA9PSBQRlJfTElORV9KT0lOX01JVEVSICkKKyAgICAgICAgICBsb2NhbCArPSAzOworICAgICAgfQorICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfQk9MRCApCisgICAgICB7CisgICAgICAgIGxvY2FsKys7CisgICAgICAgIGlmICggZmxhZ3MgJiBQRlJfTE9HXzJCWVRFX0JPTEQgKQorICAgICAgICAgIGxvY2FsKys7CisgICAgICB9CisKKyAgICAgIFBGUl9DSEVDSyggbG9jYWwgKTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfU1RST0tFICkKKyAgICAgIHsKKyAgICAgICAgbG9nX2ZvbnQtPnN0cm9rZV90aGlja25lc3MgPSAoIGZsYWdzICYgUEZSX0xPR18yQllURV9TVFJPS0UgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICAgIGlmICggKCBmbGFncyAmIFBGUl9MSU5FX0pPSU5fTUFTSyApID09IFBGUl9MSU5FX0pPSU5fTUlURVIgKQorICAgICAgICAgIGxvZ19mb250LT5taXRlcl9saW1pdCA9IFBGUl9ORVhUX0xPTkcoIHAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfQk9MRCApCisgICAgICB7CisgICAgICAgIGxvZ19mb250LT5ib2xkX3RoaWNrbmVzcyA9ICggZmxhZ3MgJiBQRlJfTE9HXzJCWVRFX0JPTEQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1NIT1JUKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgICB9CisKKyAgICAgIGlmICggZmxhZ3MgJiBQRlJfTE9HX0VYVFJBX0lURU1TICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBwZnJfZXh0cmFfaXRlbXNfc2tpcCggJnAsIGxpbWl0ICk7CisgICAgICAgIGlmIChlcnJvcikgZ290byBGYWlsOworICAgICAgfQorCisgICAgICBQRlJfQ0hFQ0soNSk7CisgICAgICBsb2dfZm9udC0+cGh5c19zaXplICAgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGxvZ19mb250LT5waHlzX29mZnNldCA9IFBGUl9ORVhUX1VMT05HKCBwICk7CisgICAgICBpZiAoIHNpemVfaW5jcmVtZW50ICkKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgIGxvZ19mb250LT5waHlzX3NpemUgKz0gKEZUX1VJbnQzMilQRlJfTkVYVF9CWVRFKCBwICkgPDwgMTY7CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBGVF9FUlJPUigoICJwZnJfbG9nX2ZvbnRfbG9hZDogaW52YWxpZCBsb2dpY2FsIGZvbnQgdGFibGVcbiIgKSk7CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIGdvdG8gRmFpbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBQRlIgUEhZU0lDQUwgRk9OVFMgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogbG9hZCBiaXRtYXAgc3RyaWtlcyBsaXN0cyAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9iaXRtYXBfaW5mbyggRlRfQnl0ZSogICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IHBoeV9mb250LT5tZW1vcnk7CisgICAgUEZSX1N0cmlrZSAgc3RyaWtlOworICAgIEZUX1VJbnQgICAgIGZsYWdzMDsKKyAgICBGVF9VSW50ICAgICBuLCBjb3VudCwgc2l6ZTE7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIFBGUl9DSEVDSyggNSApOworCisgICAgcCArPSAzOyAgLyogc2tpcCBiY3RTaXplICovCisgICAgZmxhZ3MwID0gUEZSX05FWFRfQllURSggcCApOworICAgIGNvdW50ICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIC8qIHJlLWFsbG9jYXRlIHdoZW4gbmVlZGVkICovCisgICAgaWYgKCBwaHlfZm9udC0+bnVtX3N0cmlrZXMgKyBjb3VudCA+IHBoeV9mb250LT5tYXhfc3RyaWtlcyApCisgICAgeworICAgICAgRlRfVUludCAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBwaHlfZm9udC0+bnVtX3N0cmlrZXMgKyBjb3VudCwgNCApOworCisKKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIHBoeV9mb250LT5zdHJpa2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2ZvbnQtPm51bV9zdHJpa2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X21heCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBwaHlfZm9udC0+bWF4X3N0cmlrZXMgPSBuZXdfbWF4OworICAgIH0KKworICAgIHNpemUxID0gMSArIDEgKyAxICsgMiArIDIgKyAxOworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9YUFBNICkKKyAgICAgIHNpemUxKys7CisKKyAgICBpZiAoIGZsYWdzMCAmIFBGUl9TVFJJS0VfMkJZVEVfWVBQTSApCisgICAgICBzaXplMSsrOworCisgICAgaWYgKCBmbGFnczAgJiBQRlJfU1RSSUtFXzNCWVRFX1NJWkUgKQorICAgICAgc2l6ZTErKzsKKworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8zQllURV9PRkZTRVQgKQorICAgICAgc2l6ZTErKzsKKworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9DT1VOVCApCisgICAgICBzaXplMSsrOworCisgICAgc3RyaWtlID0gcGh5X2ZvbnQtPnN0cmlrZXMgKyBwaHlfZm9udC0+bnVtX3N0cmlrZXM7CisKKyAgICBQRlJfQ0hFQ0soIGNvdW50ICogc2l6ZTEgKTsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKywgc3RyaWtlKysgKQorICAgIHsKKyAgICAgIHN0cmlrZS0+eF9wcG0gICAgICAgPSAoIGZsYWdzMCAmIFBGUl9TVFJJS0VfMkJZVEVfWFBQTSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICBzdHJpa2UtPnlfcHBtICAgICAgID0gKCBmbGFnczAgJiBQRlJfU1RSSUtFXzJCWVRFX1lQUE0gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfVVNIT1JUKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgc3RyaWtlLT5mbGFncyAgICAgICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgc3RyaWtlLT5iY3Rfc2l6ZSAgICA9ICggZmxhZ3MwICYgUEZSX1NUUklLRV8zQllURV9TSVpFICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VMT05HKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBGUl9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBzdHJpa2UtPmJjdF9vZmZzZXQgID0gKCBmbGFnczAgJiBQRlJfU1RSSUtFXzNCWVRFX09GRlNFVCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VTE9ORyggcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgc3RyaWtlLT5udW1fYml0bWFwcyA9ICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9DT1VOVCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworICAgIH0KKworICAgIHBoeV9mb250LT5udW1fc3RyaWtlcyArPSBjb3VudDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBUb29fU2hvcnQ6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIEZUX0VSUk9SKCggInBmcl9leHRyYV9pdGVtX2xvYWRfYml0bWFwX2luZm86IgorICAgICAgICAgICAgICAgIiBpbnZhbGlkIGJpdG1hcCBpbmZvIHRhYmxlXG4iICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgLyogTG9hZCBmb250IElELiAgVGhpcyBpcyBhIHNvLWNhbGxlZCAidW5pcXVlIiBuYW1lIHRoYXQgaXMgcmF0aGVyCisgICAqIGxvbmcgYW5kIGRlc2NyaXB0aXZlIChsaWtlICJUaXJlc2lhcyBTY3JlZW5Gb250IHY3LjUxIikuCisgICAqCisgICAqIE5vdGUgdGhhdCBhIFBGUiBmb250J3MgZmFtaWx5IG5hbWUgaXMgY29udGFpbmVkIGluIGFuICp1bmRvY3VtZW50ZWQqCisgICAqIHN0cmluZyBvZiB0aGUgImF1eGlsaWFyeSBkYXRhIiBwb3J0aW9uIG9mIGEgcGh5c2ljYWwgZm9udCByZWNvcmQuICBUaGlzCisgICAqIG1heSBhbHNvIGNvbnRhaW4gdGhlICJyZWFsIiBzdHlsZSBuYW1lIQorICAgKgorICAgKiBJZiBubyBmYW1pbHkgbmFtZSBpcyBwcmVzZW50LCB0aGUgZm9udCBJRCBpcyB1c2VkIGluc3RlYWQgZm9yIHRoZQorICAgKiBmYW1pbHkuCisgICAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9mb250X2lkKCBGVF9CeXRlKiAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGh5X2ZvbnQtPm1lbW9yeTsKKyAgICBGVF9VSW50ICAgIGxlbiAgICA9IChGVF9VSW50KSggbGltaXQgLSBwICk7CisKKworICAgIGlmICggcGh5X2ZvbnQtPmZvbnRfaWQgIT0gTlVMTCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX0FMTE9DKCBwaHlfZm9udC0+Zm9udF9pZCwgbGVuICsgMSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGNvcHkgZm9udCBJRCBuYW1lLCBhbmQgdGVybWluYXRlIGl0IGZvciBzYWZldHkgKi8KKyAgICBGVF9NRU1fQ09QWSggcGh5X2ZvbnQtPmZvbnRfaWQsIHAsIGxlbiApOworICAgIHBoeV9mb250LT5mb250X2lkW2xlbl0gPSAwOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBsb2FkIHN0ZW0gc25hcCB0YWJsZXMgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyggRlRfQnl0ZSogICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGUl9QaHlGb250ICBwaHlfZm9udCApCisgIHsKKyAgICBGVF9VSW50ICAgIGNvdW50LCBudW1fdmVydCwgbnVtX2hvcno7CisgICAgRlRfSW50KiAgICBzbmFwcyAgPSBOVUxMOworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGh5X2ZvbnQtPm1lbW9yeTsKKworCisgICAgaWYgKCBwaHlfZm9udC0+dmVydGljYWwuc3RlbV9zbmFwcyAhPSBOVUxMICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIGNvdW50ID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgbnVtX3ZlcnQgPSBjb3VudCAmIDE1OworICAgIG51bV9ob3J6ID0gY291bnQgPj4gNDsKKyAgICBjb3VudCAgICA9IG51bV92ZXJ0ICsgbnVtX2hvcno7CisKKyAgICBQRlJfQ0hFQ0soIGNvdW50ICogMiApOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHNuYXBzLCBjb3VudCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHBoeV9mb250LT52ZXJ0aWNhbC5zdGVtX3NuYXBzID0gc25hcHM7CisgICAgcGh5X2ZvbnQtPmhvcml6b250YWwuc3RlbV9zbmFwcyA9IHNuYXBzICsgbnVtX3ZlcnQ7CisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc25hcHMrKyApCisgICAgICAqc25hcHMgPSBGVF9ORVhUX1NIT1JUKCBwICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgVG9vX1Nob3J0OgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBGVF9FUlJPUigoICJwZnJfZXh0YV9pdGVtX2xvYWRfc3RlbV9zbmFwczoiCisgICAgICAgICAgICAgICAiIGludmFsaWQgc3RlbSBzbmFwcyB0YWJsZVxuIiApKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisKKyAgLyogbG9hZCBrZXJuaW5nIHBhaXIgZGF0YSAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzKCBGVF9CeXRlKiAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIFBGUl9LZXJuSXRlbSAgaXRlbSAgID0gTlVMTDsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IHBoeV9mb250LT5tZW1vcnk7CisKKworICAgIEZUX1RSQUNFMigoICJwZnJfZXh0cmFfaXRlbV9sb2FkX2tlcm5pbmdfcGFpcnMoKVxuIiApKTsKKworICAgIGlmICggRlRfTkVXKCBpdGVtICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgUEZSX0NIRUNLKCA0ICk7CisKKyAgICBpdGVtLT5wYWlyX2NvdW50ID0gUEZSX05FWFRfQllURSggcCApOworICAgIGl0ZW0tPmJhc2VfYWRqICAgPSBQRlJfTkVYVF9TSE9SVCggcCApOworICAgIGl0ZW0tPmZsYWdzICAgICAgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgaXRlbS0+b2Zmc2V0ICAgICA9IHBoeV9mb250LT5vZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KSggcCAtIHBoeV9mb250LT5jdXJzb3IgKTsKKworI2lmbmRlZiBQRlJfQ09ORklHX05PX0NIRUNLUworICAgIGl0ZW0tPnBhaXJfc2l6ZSA9IDM7CisKKyAgICBpZiAoIGl0ZW0tPmZsYWdzICYgUEZSX0tFUk5fMkJZVEVfQ0hBUiApCisgICAgICBpdGVtLT5wYWlyX3NpemUgKz0gMjsKKworICAgIGlmICggaXRlbS0+ZmxhZ3MgJiBQRlJfS0VSTl8yQllURV9BREogKQorICAgICAgaXRlbS0+cGFpcl9zaXplICs9IDE7CisKKyAgICBQRlJfQ0hFQ0soIGl0ZW0tPnBhaXJfY291bnQgKiBpdGVtLT5wYWlyX3NpemUgKTsKKyNlbmRpZgorCisgICAgLyogbG9hZCBmaXJzdCBhbmQgbGFzdCBwYWlycyBpbnRvIHRoZSBpdGVtIHRvIHNwZWVkIHVwICovCisgICAgLyogbG9va3VwIGxhdGVyLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBpdGVtLT5wYWlyX2NvdW50ID4gMCApCisgICAgeworICAgICAgRlRfVUludCAgIGNoYXIxLCBjaGFyMjsKKyAgICAgIEZUX0J5dGUqICBxOworCisKKyAgICAgIGlmICggaXRlbS0+ZmxhZ3MgJiBQRlJfS0VSTl8yQllURV9DSEFSICkKKyAgICAgIHsKKyAgICAgICAgcSAgICAgPSBwOworICAgICAgICBjaGFyMSA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIxID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworCisgICAgICAgIHEgPSBwICsgaXRlbS0+cGFpcl9zaXplICogKCBpdGVtLT5wYWlyX2NvdW50IC0gMSApOworICAgICAgICBjaGFyMSA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIyID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBxICAgICA9IHA7CisgICAgICAgIGNoYXIxID0gUEZSX05FWFRfQllURSggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX0JZVEUoIHEgKTsKKworICAgICAgICBpdGVtLT5wYWlyMSA9IFBGUl9LRVJOX0lOREVYKCBjaGFyMSwgY2hhcjIgKTsKKworICAgICAgICBxID0gcCArIGl0ZW0tPnBhaXJfc2l6ZSAqICggaXRlbS0+cGFpcl9jb3VudCAtIDEgKTsKKyAgICAgICAgY2hhcjEgPSBQRlJfTkVYVF9CWVRFKCBxICk7CisgICAgICAgIGNoYXIyID0gUEZSX05FWFRfQllURSggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIyID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworICAgICAgfQorCisgICAgICAvKiBhZGQgbmV3IGl0ZW0gdG8gdGhlIGN1cnJlbnQgbGlzdCAqLworICAgICAgaXRlbS0+bmV4dCAgICAgICAgICAgICAgICAgPSBOVUxMOworICAgICAgKnBoeV9mb250LT5rZXJuX2l0ZW1zX3RhaWwgPSBpdGVtOworICAgICAgcGh5X2ZvbnQtPmtlcm5faXRlbXNfdGFpbCAgPSAmaXRlbS0+bmV4dDsKKyAgICAgIHBoeV9mb250LT5udW1fa2Vybl9wYWlycyAgKz0gaXRlbS0+cGFpcl9jb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGVtcHR5IGl0ZW0hICovCisgICAgICBGVF9GUkVFKCBpdGVtICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBGVF9GUkVFKCBpdGVtICk7CisKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgRlRfRVJST1IoKCAicGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzOiIKKyAgICAgICAgICAgICAgICIgaW52YWxpZCBrZXJuaW5nIHBhaXJzIHRhYmxlXG4iICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKworICBzdGF0aWMgY29uc3QgUEZSX0V4dHJhSXRlbVJlYyAgcGZyX3BoeV9mb250X2V4dHJhX2l0ZW1zW10gPQorICB7CisgICAgeyAxLCAoUEZSX0V4dHJhSXRlbV9QYXJzZUZ1bmMpcGZyX2V4dHJhX2l0ZW1fbG9hZF9iaXRtYXBfaW5mbyB9LAorICAgIHsgMiwgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfZm9udF9pZCB9LAorICAgIHsgMywgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyB9LAorICAgIHsgNCwgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfa2VybmluZ19wYWlycyB9LAorICAgIHsgMCwgTlVMTCB9CisgIH07CisKKworICAvKiBMb2FkcyBhIG5hbWUgZnJvbSB0aGUgYXV4aWxpYXJ5IGRhdGEuICBTaW5jZSB0aGlzIGV4dHJhY3RzIHVuZG9jdW1lbnRlZAorICAgKiBzdHJpbmdzIGZyb20gdGhlIGZvbnQgZmlsZSwgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGZyX2F1eF9uYW1lX2xvYWQoIEZUX0J5dGUqICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICAqYXN0cmluZyApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfU3RyaW5nKiAgcmVzdWx0ID0gTlVMTDsKKyAgICBGVF9VSW50ICAgICBuLCBvazsKKworCisgICAgaWYgKCBsZW4gPiAwICYmIHBbbGVuIC0gMV0gPT0gMCApCisgICAgICBsZW4tLTsKKworICAgIC8qIGNoZWNrIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaXMgQVNDSUkgZm9yIG1ha2luZyBzdXJlIG5vdCB0bworICAgICAgIGxvYWQgZ2FyYmFnZQorICAgICAqLworICAgIG9rID0gKCBsZW4gPiAwICk7CisgICAgZm9yICggbiA9IDA7IG4gPCBsZW47IG4rKyApCisgICAgICBpZiAoIHBbbl0gPCAzMiB8fCBwW25dID4gMTI3ICkKKyAgICAgIHsKKyAgICAgICAgb2sgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGlmICggb2sgKQorICAgIHsKKyAgICAgIGlmICggRlRfQUxMT0MoIHJlc3VsdCwgbGVuICsgMSApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBGVF9NRU1fQ09QWSggcmVzdWx0LCBwLCBsZW4gKTsKKyAgICAgIHJlc3VsdFtsZW5dID0gMDsKKyAgICB9CisgIEV4aXQ6CisgICAgKmFzdHJpbmcgPSByZXN1bHQ7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwZnJfcGh5X2ZvbnRfZG9uZSggUEZSX1BoeUZvbnQgIHBoeV9mb250LAorICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+Zm9udF9pZCApOworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5mYW1pbHlfbmFtZSApOworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5zdHlsZV9uYW1lICk7CisKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+dmVydGljYWwuc3RlbV9zbmFwcyApOworICAgIHBoeV9mb250LT52ZXJ0aWNhbC5udW1fc3RlbV9zbmFwcyA9IDA7CisKKyAgICBwaHlfZm9udC0+aG9yaXpvbnRhbC5zdGVtX3NuYXBzICAgICA9IE5VTEw7CisgICAgcGh5X2ZvbnQtPmhvcml6b250YWwubnVtX3N0ZW1fc25hcHMgPSAwOworCisgICAgRlRfRlJFRSggcGh5X2ZvbnQtPnN0cmlrZXMgKTsKKyAgICBwaHlfZm9udC0+bnVtX3N0cmlrZXMgPSAwOworICAgIHBoeV9mb250LT5tYXhfc3RyaWtlcyA9IDA7CisKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+Y2hhcnMgKTsKKyAgICBwaHlfZm9udC0+bnVtX2NoYXJzICAgID0gMDsKKyAgICBwaHlfZm9udC0+Y2hhcnNfb2Zmc2V0ID0gMDsKKworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5ibHVlX3ZhbHVlcyApOworICAgIHBoeV9mb250LT5udW1fYmx1ZV92YWx1ZXMgPSAwOworCisgICAgeworICAgICAgUEZSX0tlcm5JdGVtICBpdGVtLCBuZXh0OworCisKKyAgICAgIGl0ZW0gPSBwaHlfZm9udC0+a2Vybl9pdGVtczsKKyAgICAgIHdoaWxlICggaXRlbSApCisgICAgICB7CisgICAgICAgIG5leHQgPSBpdGVtLT5uZXh0OworICAgICAgICBGVF9GUkVFKCBpdGVtICk7CisgICAgICAgIGl0ZW0gPSBuZXh0OworICAgICAgfQorICAgICAgcGh5X2ZvbnQtPmtlcm5faXRlbXMgICAgICA9IE5VTEw7CisgICAgICBwaHlfZm9udC0+a2Vybl9pdGVtc190YWlsID0gTlVMTDsKKyAgICB9CisKKyAgICBwaHlfZm9udC0+bnVtX2tlcm5fcGFpcnMgPSAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX3BoeV9mb250X2xvYWQoIFBGUl9QaHlGb250ICBwaHlfZm9udCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHNpemUgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX1VJbnQgICAgZmxhZ3M7CisgICAgRlRfVUxvbmcgICBudW1fYXV4OworICAgIEZUX0J5dGUqICAgcDsKKyAgICBGVF9CeXRlKiAgIGxpbWl0OworCisKKyAgICBwaHlfZm9udC0+bWVtb3J5ID0gbWVtb3J5OworICAgIHBoeV9mb250LT5vZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBwaHlfZm9udC0+a2Vybl9pdGVtcyAgICAgID0gTlVMTDsKKyAgICBwaHlfZm9udC0+a2Vybl9pdGVtc190YWlsID0gJnBoeV9mb250LT5rZXJuX2l0ZW1zOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgfHwgRlRfRlJBTUVfRU5URVIoIHNpemUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBwaHlfZm9udC0+Y3Vyc29yID0gc3RyZWFtLT5jdXJzb3I7CisKKyAgICBwICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgIGxpbWl0ID0gcCArIHNpemU7CisKKyAgICBQRlJfQ0hFQ0soIDE1ICk7CisgICAgcGh5X2ZvbnQtPmZvbnRfcmVmX251bWJlciAgICA9IFBGUl9ORVhUX1VTSE9SVCggcCApOworICAgIHBoeV9mb250LT5vdXRsaW5lX3Jlc29sdXRpb24gPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBwaHlfZm9udC0+bWV0cmljc19yZXNvbHV0aW9uID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueE1pbiAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueU1pbiAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueE1heCAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueU1heCAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmZsYWdzICAgICAgPSBmbGFncyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIC8qIGdldCB0aGUgc3RhbmRhcmQgYWR2YW5jZSBmb3Igbm9uLXByb3BvcnRpb25hbCBmb250cyAqLworICAgIGlmICggIShmbGFncyAmIFBGUl9QSFlfUFJPUE9SVElPTkFMKSApCisgICAgeworICAgICAgUEZSX0NIRUNLKCAyICk7CisgICAgICBwaHlfZm9udC0+c3RhbmRhcmRfYWR2YW5jZSA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgfQorCisgICAgLyogbG9hZCB0aGUgZXh0cmEgaXRlbXMgd2hlbiBwcmVzZW50ICovCisgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfRVhUUkFfSVRFTVMgKQorICAgIHsKKyAgICAgIGVycm9yID0gIHBmcl9leHRyYV9pdGVtc19wYXJzZSggJnAsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZnJfcGh5X2ZvbnRfZXh0cmFfaXRlbXMsIHBoeV9mb250ICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogSW4gY2VydGFpbiBmb250cywgdGhlIGF1eGlsaWFyeSBieXRlcyBjb250YWluIGludGVyZXN0aW5nICAqLworICAgIC8qIGluZm9ybWF0aW9uLiBUaGVzZSBhcmUgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGJ1dCBjYW4gYmUgKi8KKyAgICAvKiBndWVzc2VkIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnQgb2YgYSBmZXcgUEZSMCBmb250cy4gICAgICovCisgICAgUEZSX0NIRUNLKCAzICk7CisgICAgbnVtX2F1eCA9IFBGUl9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIG51bV9hdXggPiAwICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgcSA9IHA7CisgICAgICBGVF9CeXRlKiAgcTI7CisKKworICAgICAgUEZSX0NIRUNLKCBudW1fYXV4ICk7CisgICAgICBwICs9IG51bV9hdXg7CisKKyAgICAgIHdoaWxlICggbnVtX2F1eCA+IDAgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICBsZW5ndGgsIHR5cGU7CisKKworICAgICAgICBpZiAoIHEgKyA0ID4gcCApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbGVuZ3RoID0gUEZSX05FWFRfVVNIT1JUKCBxICk7CisgICAgICAgIGlmICggbGVuZ3RoIDwgNCB8fCBsZW5ndGggPiBudW1fYXV4ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBxMiAgID0gcSArIGxlbmd0aCAtIDI7CisgICAgICAgIHR5cGUgPSBQRlJfTkVYVF9VU0hPUlQoIHEgKTsKKworICAgICAgICBzd2l0Y2ggKCB0eXBlICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgLyogdGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIHRoZSBmb250J3MgZmFtaWx5IG5hbWUsCisgICAgICAgICAgICogcGFkZGVkIHRvIDE2LWJpdHMgd2l0aCBvbmUgemVybyB3aGVuIG5lY2Vzc2FyeQorICAgICAgICAgICAqLworICAgICAgICAgIGVycm9yID0gcGZyX2F1eF9uYW1lX2xvYWQoIHEsIGxlbmd0aCAtIDRVLCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9mb250LT5mYW1pbHlfbmFtZSApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICBpZiAoIHEgKyAzMiA+IHEyICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcSArPSAxMDsKKyAgICAgICAgICBwaHlfZm9udC0+YXNjZW50ICA9IFBGUl9ORVhUX1NIT1JUKCBxICk7CisgICAgICAgICAgcGh5X2ZvbnQtPmRlc2NlbnQgPSBQRlJfTkVYVF9TSE9SVCggcSApOworICAgICAgICAgIHBoeV9mb250LT5sZWFkaW5nID0gUEZSX05FWFRfU0hPUlQoIHEgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgLyogdGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIHRoZSBmb250J3Mgc3R5bGUgbmFtZSwKKyAgICAgICAgICAgKiBwYWRkZWQgdG8gMTYtYml0cyB3aXRoIG9uZSB6ZXJvIHdoZW4gbmVjZXNzYXJ5CisgICAgICAgICAgICovCisgICAgICAgICAgZXJyb3IgPSBwZnJfYXV4X25hbWVfbG9hZCggcSwgbGVuZ3RoIC0gNFUsIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGh5X2ZvbnQtPnN0eWxlX25hbWUgKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIDsKKyAgICAgICAgfQorCisgICAgICAgIHEgICAgICAgID0gcTI7CisgICAgICAgIG51bV9hdXggLT0gbGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgdGhlIGJsdWUgdmFsdWVzICovCisgICAgeworICAgICAgRlRfVUludCAgbiwgY291bnQ7CisKKworICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICBwaHlfZm9udC0+bnVtX2JsdWVfdmFsdWVzID0gY291bnQgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICAgIFBGUl9DSEVDSyggY291bnQgKiAyICk7CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwaHlfZm9udC0+Ymx1ZV92YWx1ZXMsIGNvdW50ICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICAgIHBoeV9mb250LT5ibHVlX3ZhbHVlc1tuXSA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgfQorCisgICAgUEZSX0NIRUNLKCA4ICk7CisgICAgcGh5X2ZvbnQtPmJsdWVfZnV6eiAgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgcGh5X2ZvbnQtPmJsdWVfc2NhbGUgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICBwaHlfZm9udC0+dmVydGljYWwuc3RhbmRhcmQgICA9IFBGUl9ORVhUX1VTSE9SVCggcCApOworICAgIHBoeV9mb250LT5ob3Jpem9udGFsLnN0YW5kYXJkID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAvKiByZWFkIHRoZSBjaGFyYWN0ZXIgZGVzY3JpcHRvcnMgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICBuLCBjb3VudCwgU2l6ZTsKKworCisgICAgICBwaHlfZm9udC0+bnVtX2NoYXJzICAgID0gY291bnQgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHBoeV9mb250LT5jaGFyc19vZmZzZXQgPSBvZmZzZXQgKyAoRlRfT2Zmc2V0KSggcCAtIHN0cmVhbS0+Y3Vyc29yICk7CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwaHlfZm9udC0+Y2hhcnMsIGNvdW50ICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIFNpemUgPSAxICsgMSArIDI7CisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9DSEFSQ09ERSApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfUFJPUE9SVElPTkFMICkKKyAgICAgICAgU2l6ZSArPSAyOworCisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV9BU0NJSV9DT0RFICkKKyAgICAgICAgU2l6ZSArPSAxOworCisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9HUFNfU0laRSApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfM0JZVEVfR1BTX09GRlNFVCApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgUEZSX0NIRUNLKCBjb3VudCAqIFNpemUgKTsKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIHsKKyAgICAgICAgUEZSX0NoYXIgIGN1ciA9ICZwaHlfZm9udC0+Y2hhcnNbbl07CisKKworICAgICAgICBjdXItPmNoYXJfY29kZSA9ICggZmxhZ3MgJiBQRlJfUEhZXzJCWVRFX0NIQVJDT0RFICkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VTSE9SVCggcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICAgICAgY3VyLT5hZHZhbmNlICAgPSAoIGZsYWdzICYgUEZSX1BIWV9QUk9QT1JUSU9OQUwgKQorICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIDogcGh5X2ZvbnQtPnN0YW5kYXJkX2FkdmFuY2U7CisKKyNpZiAwCisgICAgICAgIGN1ci0+YXNjaWkgICAgID0gKCBmbGFncyAmIFBGUl9QSFlfQVNDSUlfQ09ERSApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9CWVRFKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisjZWxzZQorICAgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV9BU0NJSV9DT0RFICkKKyAgICAgICAgICBwICs9IDE7CisjZW5kaWYKKyAgICAgICAgY3VyLT5ncHNfc2l6ZSAgPSAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9HUFNfU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICAgIGN1ci0+Z3BzX29mZnNldCA9ICggZmxhZ3MgJiBQRlJfUEhZXzNCWVRFX0dQU19PRkZTRVQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VMT05HKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0aGF0J3MgaXQhICovCisKKyAgRmFpbDoKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAvKiBzYXZlIHBvc2l0aW9uIG9mIGJpdG1hcCBpbmZvICovCisgICAgcGh5X2ZvbnQtPmJjdF9vZmZzZXQgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgcGh5X2ZvbnQtPmN1cnNvciAgICAgPSBOVUxMOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgRlRfRVJST1IoKCAicGZyX3BoeV9mb250X2xvYWQ6IGludmFsaWQgcGh5c2ljYWwgZm9udCB0YWJsZVxuIiApKTsKKyAgICBnb3RvIEZhaWw7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmxvYWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTUxMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZybG9hZC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnJsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUEZSIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QRlJMT0FEX0hfXworI2RlZmluZSBfX1BGUkxPQURfSF9fCisKKyNpbmNsdWRlICJwZnJvYmpzLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisjaWZkZWYgUEZSX0NPTkZJR19OT19DSEVDS1MKKyNkZWZpbmUgUEZSX0NIRUNLKCB4ICkgIGRvIHsgfSB3aGlsZSAoIDAgKQorI2Vsc2UKKyNkZWZpbmUgUEZSX0NIRUNLKCB4ICkgIGRvICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHAgKyAoeCkgPiBsaW1pdCApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFRvb19TaG9ydDsgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggMCApCisjZW5kaWYKKworI2RlZmluZSBQRlJfTkVYVF9CWVRFKCBwICkgICAgRlRfTkVYVF9CWVRFKCBwICkKKyNkZWZpbmUgUEZSX05FWFRfSU5UOCggcCApICAgIEZUX05FWFRfQ0hBUiggcCApCisjZGVmaW5lIFBGUl9ORVhUX1NIT1JUKCBwICkgICBGVF9ORVhUX1NIT1JUKCBwICkKKyNkZWZpbmUgUEZSX05FWFRfVVNIT1JUKCBwICkgIEZUX05FWFRfVVNIT1JUKCBwICkKKyNkZWZpbmUgUEZSX05FWFRfTE9ORyggcCApICAgIEZUX05FWFRfT0ZGMyggcCApCisjZGVmaW5lIFBGUl9ORVhUX1VMT05HKCBwICkgICBGVF9ORVhUX1VPRkYzKCBwICkKKworCisgLyogaGFuZGxpbmcgZXh0cmEgaXRlbXMgKi8KKworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqUEZSX0V4dHJhSXRlbV9QYXJzZUZ1bmMpKCBGVF9CeXRlKiAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBkYXRhICk7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9FeHRyYUl0ZW1SZWNfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgdHlwZTsKKyAgICBQRlJfRXh0cmFJdGVtX1BhcnNlRnVuYyAgcGFyc2VyOworCisgIH0gUEZSX0V4dHJhSXRlbVJlYzsKKworICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBQRlJfRXh0cmFJdGVtUmVjXyogIFBGUl9FeHRyYUl0ZW07CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfZXh0cmFfaXRlbXNfc2tpcCggRlRfQnl0ZSogICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICBsaW1pdCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBmcl9leHRyYV9pdGVtc19wYXJzZSggRlRfQnl0ZSogICAgICAqcHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX0V4dHJhSXRlbSAgaXRlbV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgIGl0ZW1fZGF0YSApOworCisKKyAgLyogbG9hZCBhIFBGUiBoZWFkZXIgKi8KKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgcGZyX2hlYWRlcl9sb2FkKCBQRlJfSGVhZGVyICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtICk7CisKKyAgLyogY2hlY2sgYSBQRlIgaGVhZGVyICovCisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgcGZyX2hlYWRlcl9jaGVjayggUEZSX0hlYWRlciAgaGVhZGVyICk7CisKKworICAvKiByZXR1cm4gbnVtYmVyIG9mIGxvZ2ljYWwgZm9udHMgaW4gdGhpcyBmaWxlICovCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBmcl9sb2dfZm9udF9jb3VudCggRlRfU3RyZWFtICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgIGxvZ19zZWN0aW9uX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICphY291bnQgKTsKKworICAvKiBsb2FkIGEgcGZyIGxvZ2ljYWwgZm9udCBlbnRyeSAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfbG9nX2ZvbnRfbG9hZCggUEZSX0xvZ0ZvbnQgIGxvZ19mb250LAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHNlY3Rpb25fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHNpemVfaW5jcmVtZW50ICk7CisKKworICAvKiBsb2FkIGEgcGh5c2ljYWwgZm9udCBlbnRyeSAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfcGh5X2ZvbnRfbG9hZCggUEZSX1BoeUZvbnQgIHBoeV9mb250LAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgc2l6ZSApOworCisgIC8qIGZpbmFsaXplIGEgcGh5c2ljYWwgZm9udCAqLworICBGVF9MT0NBTCggdm9pZCApCisgIHBmcl9waHlfZm9udF9kb25lKCBQRlJfUGh5Rm9udCAgcGh5X2ZvbnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICk7CisKKyAgLyogKi8KKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QRlJMT0FEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyb2Jqcy5jIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyb2Jqcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYmFiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJvYmpzLmMKQEAgLTAsMCArMSw1OTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBmcm9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBQRlIgb2JqZWN0IG1ldGhvZHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgInBmcm9ianMuaCIKKyNpbmNsdWRlICJwZnJsb2FkLmgiCisjaW5jbHVkZSAicGZyZ2xvYWQuaCIKKyNpbmNsdWRlICJwZnJjbWFwLmgiCisjaW5jbHVkZSAicGZyc2JpdC5oIgorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisKKyNpbmNsdWRlICJwZnJlcnJvci5oIgorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BmcgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgRkFDRSBPQkpFQ1QgTUVUSE9EUyAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcGZyX2ZhY2VfZG9uZSggRlRfRmFjZSAgcGZyZmFjZSApICAgICAvKiBQRlJfRmFjZSAqLworICB7CisgICAgUEZSX0ZhY2UgICBmYWNlID0gKFBGUl9GYWNlKXBmcmZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gcGZyZmFjZS0+ZHJpdmVyLT5yb290Lm1lbW9yeTsKKworICAgIC8qIHdlIGRvbid0IHdhbnQgZGFuZ2xpbmcgcG9pbnRlcnMgKi8KKyAgICBwZnJmYWNlLT5mYW1pbHlfbmFtZSA9IE5VTEw7CisgICAgcGZyZmFjZS0+c3R5bGVfbmFtZSAgPSBOVUxMOworCisgICAgLyogZmluYWxpemUgdGhlIHBoeXNpY2FsIGZvbnQgcmVjb3JkICovCisgICAgcGZyX3BoeV9mb250X2RvbmUoICZmYWNlLT5waHlfZm9udCwgRlRfRkFDRV9NRU1PUlkoIGZhY2UgKSApOworCisgICAgLyogbm8gbmVlZCB0byBmaW5hbGl6ZSB0aGUgbG9naWNhbCBmb250IG9yIHRoZSBoZWFkZXIgKi8KKyAgICBGVF9GUkVFKCBwZnJmYWNlLT5hdmFpbGFibGVfc2l6ZXMgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHBmcl9mYWNlX2luaXQoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgcGZyZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIFBGUl9GYWNlICBmYWNlID0gKFBGUl9GYWNlKXBmcmZhY2U7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisgICAgRlRfVU5VU0VEKCBudW1fcGFyYW1zICk7CisgICAgRlRfVU5VU0VEKCBwYXJhbXMgKTsKKworCisgICAgRlRfVFJBQ0UyKCggIlBGUiBkcml2ZXJcbiIgKSk7CisKKyAgICAvKiBsb2FkIHRoZSBoZWFkZXIgYW5kIGNoZWNrIGl0ICovCisgICAgZXJyb3IgPSBwZnJfaGVhZGVyX2xvYWQoICZmYWNlLT5oZWFkZXIsIHN0cmVhbSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCAhcGZyX2hlYWRlcl9jaGVjayggJmZhY2UtPmhlYWRlciApICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiICBub3QgYSBQRlIgZm9udFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBjaGVjayBmYWNlIGluZGV4ICovCisgICAgeworICAgICAgRlRfTG9uZyAgbnVtX2ZhY2VzOworCisKKyAgICAgIGVycm9yID0gcGZyX2xvZ19mb250X2NvdW50KCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aGVhZGVyLmxvZ19kaXJfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1fZmFjZXMgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHBmcmZhY2UtPm51bV9mYWNlcyA9IG51bV9mYWNlczsKKyAgICB9CisKKyAgICBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggZmFjZV9pbmRleCA+PSBwZnJmYWNlLT5udW1fZmFjZXMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInBmcl9mYWNlX2luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBsb2FkIHRoZSBmYWNlICovCisgICAgZXJyb3IgPSBwZnJfbG9nX2ZvbnRfbG9hZCgKKyAgICAgICAgICAgICAgICZmYWNlLT5sb2dfZm9udCwgc3RyZWFtLCAoRlRfVUludClmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgZmFjZS0+aGVhZGVyLmxvZ19kaXJfb2Zmc2V0LAorICAgICAgICAgICAgICAgRlRfQk9PTCggZmFjZS0+aGVhZGVyLnBoeV9mb250X21heF9zaXplX2hpZ2ggIT0gMCApICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBub3cgbG9hZCB0aGUgcGh5c2ljYWwgZm9udCBkZXNjcmlwdG9yICovCisgICAgZXJyb3IgPSBwZnJfcGh5X2ZvbnRfbG9hZCggJmZhY2UtPnBoeV9mb250LCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bG9nX2ZvbnQucGh5c19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bG9nX2ZvbnQucGh5c19zaXplICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBub3cgc2V0IHVwIGFsbCByb290IGZhY2UgZmllbGRzICovCisgICAgeworICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ID0gJmZhY2UtPnBoeV9mb250OworCisKKyAgICAgIHBmcmZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworICAgICAgcGZyZmFjZS0+bnVtX2dseXBocyA9IChGVF9Mb25nKXBoeV9mb250LT5udW1fY2hhcnMgKyAxOworCisgICAgICBwZnJmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTsKKworICAgICAgLyogaWYgYWxsIGNoYXJhY3RlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZ3BzX29mZnNldCAwLCB3ZSAqLworICAgICAgLyogYXNzdW1lIHRoYXQgdGhlIGZvbnQgb25seSBjb250YWlucyBiaXRtYXBzICAgICAgICAgICAqLworICAgICAgeworICAgICAgICBGVF9VSW50ICBubjsKKworCisgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBwaHlfZm9udC0+bnVtX2NoYXJzOyBubisrICkKKyAgICAgICAgICBpZiAoIHBoeV9mb250LT5jaGFyc1tubl0uZ3BzX29mZnNldCAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggbm4gPT0gcGh5X2ZvbnQtPm51bV9jaGFycyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBoeV9mb250LT5udW1fc3RyaWtlcyA+IDAgKQorICAgICAgICAgICAgcGZyZmFjZS0+ZmFjZV9mbGFncyA9IDA7ICAgICAgICAvKiBub3Qgc2NhbGFibGUgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAicGZyX2ZhY2VfaW5pdDogZm9udCBkb2Vzbid0IGNvbnRhaW4gZ2x5cGhzXG4iICkpOworICAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIChwaHlfZm9udC0+ZmxhZ3MgJiBQRlJfUEhZX1BST1BPUlRJT05BTCkgPT0gMCApCisgICAgICAgIHBmcmZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIOworCisgICAgICBpZiAoIHBoeV9mb250LT5mbGFncyAmIFBGUl9QSFlfVkVSVElDQUwgKQorICAgICAgICBwZnJmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19WRVJUSUNBTDsKKyAgICAgIGVsc2UKKyAgICAgICAgcGZyZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTDsKKworICAgICAgaWYgKCBwaHlfZm9udC0+bnVtX3N0cmlrZXMgPiAwICkKKyAgICAgICAgcGZyZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVM7CisKKyAgICAgIGlmICggcGh5X2ZvbnQtPm51bV9rZXJuX3BhaXJzID4gMCApCisgICAgICAgIHBmcmZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0tFUk5JTkc7CisKKyAgICAgIC8qIElmIG5vIGZhbWlseSBuYW1lIHdhcyBmb3VuZCBpbiB0aGUgInVuZG9jdW1lbnRlZCIgYXV4aWxpYXJ5CisgICAgICAgKiBkYXRhLCB1c2UgdGhlIGZvbnQgSUQgaW5zdGVhZC4gIFRoaXMgc3Vja3MgYnV0IGlzIGJldHRlciB0aGFuCisgICAgICAgKiBub3RoaW5nLgorICAgICAgICovCisgICAgICBwZnJmYWNlLT5mYW1pbHlfbmFtZSA9IHBoeV9mb250LT5mYW1pbHlfbmFtZTsKKyAgICAgIGlmICggcGZyZmFjZS0+ZmFtaWx5X25hbWUgPT0gTlVMTCApCisgICAgICAgIHBmcmZhY2UtPmZhbWlseV9uYW1lID0gcGh5X2ZvbnQtPmZvbnRfaWQ7CisKKyAgICAgIC8qIG5vdGUgdGhhdCB0aGUgc3R5bGUgbmFtZSBjYW4gYmUgTlVMTCBpbiBjZXJ0YWluIFBGUiBmb250cywKKyAgICAgICAqIHByb2JhYmx5IG1lYW5pbmcgIlJlZ3VsYXIiCisgICAgICAgKi8KKyAgICAgIHBmcmZhY2UtPnN0eWxlX25hbWUgPSBwaHlfZm9udC0+c3R5bGVfbmFtZTsKKworICAgICAgcGZyZmFjZS0+bnVtX2ZpeGVkX3NpemVzID0gMDsKKyAgICAgIHBmcmZhY2UtPmF2YWlsYWJsZV9zaXplcyA9IE5VTEw7CisKKyAgICAgIHBmcmZhY2UtPmJib3ggICAgICAgICA9IHBoeV9mb250LT5iYm94OworICAgICAgcGZyZmFjZS0+dW5pdHNfcGVyX0VNID0gKEZUX1VTaG9ydClwaHlfZm9udC0+b3V0bGluZV9yZXNvbHV0aW9uOworICAgICAgcGZyZmFjZS0+YXNjZW5kZXIgICAgID0gKEZUX1Nob3J0KSBwaHlfZm9udC0+YmJveC55TWF4OworICAgICAgcGZyZmFjZS0+ZGVzY2VuZGVyICAgID0gKEZUX1Nob3J0KSBwaHlfZm9udC0+YmJveC55TWluOworCisgICAgICBwZnJmYWNlLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCAoIHBmcmZhY2UtPnVuaXRzX3Blcl9FTSAqIDEyICkgLyAxMCApOworICAgICAgaWYgKCBwZnJmYWNlLT5oZWlnaHQgPCBwZnJmYWNlLT5hc2NlbmRlciAtIHBmcmZhY2UtPmRlc2NlbmRlciApCisgICAgICAgIHBmcmZhY2UtPmhlaWdodCA9IChGVF9TaG9ydCkocGZyZmFjZS0+YXNjZW5kZXIgLSBwZnJmYWNlLT5kZXNjZW5kZXIpOworCisgICAgICBpZiAoIHBoeV9mb250LT5udW1fc3RyaWtlcyA+IDAgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICAgICAgICAgIG4sIGNvdW50ID0gcGh5X2ZvbnQtPm51bV9zdHJpa2VzOworICAgICAgICBGVF9CaXRtYXBfU2l6ZSogIHNpemU7CisgICAgICAgIFBGUl9TdHJpa2UgICAgICAgc3RyaWtlOworICAgICAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IHBmcmZhY2UtPnN0cmVhbS0+bWVtb3J5OworCisKKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBmcmZhY2UtPmF2YWlsYWJsZV9zaXplcywgY291bnQgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIHNpemUgICA9IHBmcmZhY2UtPmF2YWlsYWJsZV9zaXplczsKKyAgICAgICAgc3RyaWtlID0gcGh5X2ZvbnQtPnN0cmlrZXM7CisgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKywgc2l6ZSsrLCBzdHJpa2UrKyApCisgICAgICAgIHsKKyAgICAgICAgICBzaXplLT5oZWlnaHQgPSAoRlRfU2hvcnQpc3RyaWtlLT55X3BwbTsKKyAgICAgICAgICBzaXplLT53aWR0aCAgPSAoRlRfU2hvcnQpc3RyaWtlLT54X3BwbTsKKyAgICAgICAgICBzaXplLT5zaXplICAgPSAoRlRfUG9zKSggc3RyaWtlLT55X3BwbSA8PCA2ICk7CisgICAgICAgICAgc2l6ZS0+eF9wcGVtID0gKEZUX1BvcykoIHN0cmlrZS0+eF9wcG0gPDwgNiApOworICAgICAgICAgIHNpemUtPnlfcHBlbSA9IChGVF9Qb3MpKCBzdHJpa2UtPnlfcHBtIDw8IDYgKTsKKyAgICAgICAgfQorICAgICAgICBwZnJmYWNlLT5udW1fZml4ZWRfc2l6ZXMgPSAoRlRfSW50KWNvdW50OworICAgICAgfQorCisgICAgICAvKiBub3cgY29tcHV0ZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggKi8KKyAgICAgIGlmICggKCBwaHlfZm9udC0+ZmxhZ3MgJiBQRlJfUEhZX1BST1BPUlRJT05BTCApID09IDAgKQorICAgICAgICBwZnJmYWNlLT5tYXhfYWR2YW5jZV93aWR0aCA9IChGVF9TaG9ydClwaHlfZm9udC0+c3RhbmRhcmRfYWR2YW5jZTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICAgIG1heCA9IDA7CisgICAgICAgIEZUX1VJbnQgICBjb3VudCA9IHBoeV9mb250LT5udW1fY2hhcnM7CisgICAgICAgIFBGUl9DaGFyICBnY2hhciA9IHBoeV9mb250LT5jaGFyczsKKworCisgICAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBnY2hhcisrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggbWF4IDwgZ2NoYXItPmFkdmFuY2UgKQorICAgICAgICAgICAgbWF4ID0gZ2NoYXItPmFkdmFuY2U7CisgICAgICAgIH0KKworICAgICAgICBwZnJmYWNlLT5tYXhfYWR2YW5jZV93aWR0aCA9IChGVF9TaG9ydCltYXg7CisgICAgICB9CisKKyAgICAgIHBmcmZhY2UtPm1heF9hZHZhbmNlX2hlaWdodCA9IHBmcmZhY2UtPmhlaWdodDsKKworICAgICAgcGZyZmFjZS0+dW5kZXJsaW5lX3Bvc2l0aW9uICA9IChGVF9TaG9ydCkoIC1wZnJmYWNlLT51bml0c19wZXJfRU0gLyAxMCApOworICAgICAgcGZyZmFjZS0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IChGVF9TaG9ydCkoICBwZnJmYWNlLT51bml0c19wZXJfRU0gLyAzMCApOworCisgICAgICAvKiBjcmVhdGUgY2hhcm1hcCAqLworICAgICAgeworICAgICAgICBGVF9DaGFyTWFwUmVjICBjaGFybWFwOworCisKKyAgICAgICAgY2hhcm1hcC5mYWNlICAgICAgICA9IHBmcmZhY2U7CisgICAgICAgIGNoYXJtYXAucGxhdGZvcm1faWQgPSBUVF9QTEFURk9STV9NSUNST1NPRlQ7CisgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9NU19JRF9VTklDT0RFX0NTOworICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfVU5JQ09ERTsKKworICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAmcGZyX2NtYXBfY2xhc3NfcmVjLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOworCisjaWYgMAorICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCisgICAgICAgIGlmICggcGZyZmFjZS0+bnVtX2NoYXJtYXBzICkKKyAgICAgICAgICBwZnJmYWNlLT5jaGFybWFwID0gcGZyZmFjZS0+Y2hhcm1hcHNbMF07CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgLyogY2hlY2sgd2hldGhlciB3ZSd2ZSBsb2FkZWQgYW55IGtlcm5pbmcgcGFpcnMgKi8KKyAgICAgIGlmICggcGh5X2ZvbnQtPm51bV9rZXJuX3BhaXJzICkKKyAgICAgICAgcGZyZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfS0VSTklORzsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgU0xPVCBPQkpFQ1QgTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfc2xvdF9pbml0KCBGVF9HbHlwaFNsb3QgIHBmcnNsb3QgKSAgICAgICAgLyogUEZSX1Nsb3QgKi8KKyAgeworICAgIFBGUl9TbG90ICAgICAgICBzbG90ICAgPSAoUEZSX1Nsb3QpcGZyc2xvdDsKKyAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyID0gcGZyc2xvdC0+aW50ZXJuYWwtPmxvYWRlcjsKKworCisgICAgcGZyX2dseXBoX2luaXQoICZzbG90LT5nbHlwaCwgbG9hZGVyICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcGZyX3Nsb3RfZG9uZSggRlRfR2x5cGhTbG90ICBwZnJzbG90ICkgICAgICAgIC8qIFBGUl9TbG90ICovCisgIHsKKyAgICBQRlJfU2xvdCAgc2xvdCA9IChQRlJfU2xvdClwZnJzbG90OworCisKKyAgICBwZnJfZ2x5cGhfZG9uZSggJnNsb3QtPmdseXBoICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfc2xvdF9sb2FkKCBGVF9HbHlwaFNsb3QgIHBmcnNsb3QsICAgICAgICAgLyogUEZSX1Nsb3QgKi8KKyAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBwZnJzaXplLCAgICAgICAgIC8qIFBGUl9TaXplICovCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgUEZSX1Nsb3QgICAgIHNsb3QgICAgPSAoUEZSX1Nsb3QpcGZyc2xvdDsKKyAgICBQRlJfU2l6ZSAgICAgc2l6ZSAgICA9IChQRlJfU2l6ZSlwZnJzaXplOworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBQRlJfRmFjZSAgICAgZmFjZSAgICA9IChQRlJfRmFjZSlwZnJzbG90LT5mYWNlOworICAgIFBGUl9DaGFyICAgICBnY2hhcjsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9ICZwZnJzbG90LT5vdXRsaW5lOworICAgIEZUX1VMb25nICAgICBncHNfb2Zmc2V0OworCisKKyAgICBGVF9UUkFDRTEoKCAicGZyX3Nsb3RfbG9hZDogZ2x5cGggaW5kZXggJWRcbiIsIGdpbmRleCApKTsKKworICAgIGlmICggZ2luZGV4ID4gMCApCisgICAgICBnaW5kZXgtLTsKKworICAgIGlmICggIWZhY2UgfHwgZ2luZGV4ID49IGZhY2UtPnBoeV9mb250Lm51bV9jaGFycyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHRyeSB0byBsb2FkIGFuIGVtYmVkZGVkIGJpdG1hcCAqLworICAgIGlmICggKCBsb2FkX2ZsYWdzICYgKCBGVF9MT0FEX05PX1NDQUxFIHwgRlRfTE9BRF9OT19CSVRNQVAgKSApID09IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gcGZyX3Nsb3RfbG9hZF9iaXRtYXAoIHNsb3QsIHNpemUsIGdpbmRleCApOworICAgICAgaWYgKCBlcnJvciA9PSAwICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfU0JJVFNfT05MWSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGdjaGFyICAgICAgICAgICAgICAgPSBmYWNlLT5waHlfZm9udC5jaGFycyArIGdpbmRleDsKKyAgICBwZnJzbG90LT5mb3JtYXQgICAgID0gRlRfR0xZUEhfRk9STUFUX09VVExJTkU7CisgICAgb3V0bGluZS0+bl9wb2ludHMgICA9IDA7CisgICAgb3V0bGluZS0+bl9jb250b3VycyA9IDA7CisgICAgZ3BzX29mZnNldCAgICAgICAgICA9IGZhY2UtPmhlYWRlci5ncHNfc2VjdGlvbl9vZmZzZXQ7CisKKyAgICAvKiBsb2FkIHRoZSBnbHlwaCBvdXRsaW5lIChGVF9MT0FEX05PX1JFQ1VSU0UgaXNuJ3Qgc3VwcG9ydGVkKSAqLworICAgIGVycm9yID0gcGZyX2dseXBoX2xvYWQoICZzbG90LT5nbHlwaCwgZmFjZS0+cm9vdC5zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BzX29mZnNldCwgZ2NoYXItPmdwc19vZmZzZXQsIGdjaGFyLT5ncHNfc2l6ZSApOworCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0JCb3ggICAgICAgICAgICBjYm94OworICAgICAgRlRfR2x5cGhfTWV0cmljcyogIG1ldHJpY3MgPSAmcGZyc2xvdC0+bWV0cmljczsKKyAgICAgIEZUX1BvcyAgICAgICAgICAgICBhZHZhbmNlOworICAgICAgRlRfVUludCAgICAgICAgICAgIGVtX21ldHJpY3MsIGVtX291dGxpbmU7CisgICAgICBGVF9Cb29sICAgICAgICAgICAgc2NhbGluZzsKKworCisgICAgICBzY2FsaW5nID0gRlRfQk9PTCggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKTsKKworICAgICAgLyogY29weSBvdXRsaW5lIGRhdGEgKi8KKyAgICAgICpvdXRsaW5lID0gc2xvdC0+Z2x5cGgubG9hZGVyLT5iYXNlLm91dGxpbmU7CisKKyAgICAgIG91dGxpbmUtPmZsYWdzICY9IH5GVF9PVVRMSU5FX09XTkVSOworICAgICAgb3V0bGluZS0+ZmxhZ3MgfD0gRlRfT1VUTElORV9SRVZFUlNFX0ZJTEw7CisKKyAgICAgIGlmICggc2l6ZSAmJiBwZnJzaXplLT5tZXRyaWNzLnlfcHBlbSA8IDI0ICkKKyAgICAgICAgb3V0bGluZS0+ZmxhZ3MgfD0gRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTjsKKworICAgICAgLyogY29tcHV0ZSB0aGUgYWR2YW5jZSB2ZWN0b3IgKi8KKyAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gMDsKKyAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gMDsKKworICAgICAgYWR2YW5jZSAgICA9IGdjaGFyLT5hZHZhbmNlOworICAgICAgZW1fbWV0cmljcyA9IGZhY2UtPnBoeV9mb250Lm1ldHJpY3NfcmVzb2x1dGlvbjsKKyAgICAgIGVtX291dGxpbmUgPSBmYWNlLT5waHlfZm9udC5vdXRsaW5lX3Jlc29sdXRpb247CisKKyAgICAgIGlmICggZW1fbWV0cmljcyAhPSBlbV9vdXRsaW5lICkKKyAgICAgICAgYWR2YW5jZSA9IEZUX011bERpdiggYWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpZW1fb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpZW1fbWV0cmljcyApOworCisgICAgICBpZiAoIGZhY2UtPnBoeV9mb250LmZsYWdzICYgUEZSX1BIWV9WRVJUSUNBTCApCisgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgPSBhZHZhbmNlOworCisgICAgICBwZnJzbG90LT5saW5lYXJIb3JpQWR2YW5jZSA9IG1ldHJpY3MtPmhvcmlBZHZhbmNlOworICAgICAgcGZyc2xvdC0+bGluZWFyVmVydEFkdmFuY2UgPSBtZXRyaWNzLT52ZXJ0QWR2YW5jZTsKKworICAgICAgLyogbWFrZS11cCB2ZXJ0aWNhbCBtZXRyaWNzKD8pICovCisgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggPSAwOworICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdZID0gMDsKKworI2lmIDAgLyogc29tZSBmb250cyBzZWVtIHRvIGJlIGJyb2tlbiBoZXJlISAqLworCisgICAgICAvKiBBcHBseSB0aGUgZm9udCBtYXRyaXgsIGlmIGFueS4gICAgICAgICAgICAgICAgICovCisgICAgICAvKiBUT0RPOiBUZXN0IGV4aXN0aW5nIGZvbnRzIHdpdGggdW51c3VhbCBtYXRyaXggICovCisgICAgICAvKiB3aGV0aGVyIHdlIGhhdmUgdG8gYWRqdXN0IFVuaXRzIHBlciBFTS4gICAgICAgICovCisgICAgICB7CisgICAgICAgIEZUX01hdHJpeCBmb250X21hdHJpeDsKKworCisgICAgICAgIGZvbnRfbWF0cml4Lnh4ID0gZmFjZS0+bG9nX2ZvbnQubWF0cml4WzBdIDw8IDg7CisgICAgICAgIGZvbnRfbWF0cml4Lnl4ID0gZmFjZS0+bG9nX2ZvbnQubWF0cml4WzFdIDw8IDg7CisgICAgICAgIGZvbnRfbWF0cml4Lnh5ID0gZmFjZS0+bG9nX2ZvbnQubWF0cml4WzJdIDw8IDg7CisgICAgICAgIGZvbnRfbWF0cml4Lnl5ID0gZmFjZS0+bG9nX2ZvbnQubWF0cml4WzNdIDw8IDg7CisKKyAgICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oIG91dGxpbmUsICZmb250X21hdHJpeCApOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qIHNjYWxlIHdoZW4gbmVlZGVkICovCisgICAgICBpZiAoIHNjYWxpbmcgKQorICAgICAgeworICAgICAgICBGVF9JbnQgICAgICBuOworICAgICAgICBGVF9GaXhlZCAgICB4X3NjYWxlID0gcGZyc2l6ZS0+bWV0cmljcy54X3NjYWxlOworICAgICAgICBGVF9GaXhlZCAgICB5X3NjYWxlID0gcGZyc2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICBGVF9WZWN0b3IqICB2ZWMgICAgID0gb3V0bGluZS0+cG9pbnRzOworCisKKyAgICAgICAgLyogc2NhbGUgb3V0bGluZSBwb2ludHMgKi8KKyAgICAgICAgZm9yICggbiA9IDA7IG4gPCBvdXRsaW5lLT5uX3BvaW50czsgbisrLCB2ZWMrKyApCisgICAgICAgIHsKKyAgICAgICAgICB2ZWMtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApOworICAgICAgICAgIHZlYy0+eSA9IEZUX011bEZpeCggdmVjLT55LCB5X3NjYWxlICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzY2FsZSB0aGUgYWR2YW5jZSAqLworICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IEZUX011bEZpeCggbWV0cmljcy0+aG9yaUFkdmFuY2UsIHhfc2NhbGUgKTsKKyAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSBGVF9NdWxGaXgoIG1ldHJpY3MtPnZlcnRBZHZhbmNlLCB5X3NjYWxlICk7CisgICAgICB9CisKKyAgICAgIC8qIGNvbXB1dGUgdGhlIHJlc3Qgb2YgdGhlIG1ldHJpY3MgKi8KKyAgICAgIEZUX091dGxpbmVfR2V0X0NCb3goIG91dGxpbmUsICZjYm94ICk7CisKKyAgICAgIG1ldHJpY3MtPndpZHRoICAgICAgICA9IGNib3gueE1heCAtIGNib3gueE1pbjsKKyAgICAgIG1ldHJpY3MtPmhlaWdodCAgICAgICA9IGNib3gueU1heCAtIGNib3gueU1pbjsKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IGNib3gueE1pbjsKKyAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA9IGNib3gueU1heCAtIG1ldHJpY3MtPmhlaWdodDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBLRVJOSU5HIE1FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZmFjZV9nZXRfa2VybmluZyggRlRfRmFjZSAgICAgcGZyZmFjZSwgICAgICAgIC8qIFBGUl9GYWNlICovCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaDEsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaDIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBrZXJuaW5nICkKKyAgeworICAgIFBGUl9GYWNlICAgICBmYWNlICAgICA9IChQRlJfRmFjZSlwZnJmYWNlOworICAgIEZUX0Vycm9yICAgICBlcnJvciAgICA9IEZUX0Vycl9PazsKKyAgICBQRlJfUGh5Rm9udCAgcGh5X2ZvbnQgPSAmZmFjZS0+cGh5X2ZvbnQ7CisgICAgRlRfVUludDMyICAgIGNvZGUxLCBjb2RlMiwgcGFpcjsKKworCisgICAga2VybmluZy0+eCA9IDA7CisgICAga2VybmluZy0+eSA9IDA7CisKKyAgICBpZiAoIGdseXBoMSA+IDAgKQorICAgICAgZ2x5cGgxLS07CisKKyAgICBpZiAoIGdseXBoMiA+IDAgKQorICAgICAgZ2x5cGgyLS07CisKKyAgICAvKiBjb252ZXJ0IGdseXBoIGluZGljZXMgdG8gY2hhcmFjdGVyIGNvZGVzICovCisgICAgaWYgKCBnbHlwaDEgPiBwaHlfZm9udC0+bnVtX2NoYXJzIHx8CisgICAgICAgICBnbHlwaDIgPiBwaHlfZm9udC0+bnVtX2NoYXJzICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGNvZGUxID0gcGh5X2ZvbnQtPmNoYXJzW2dseXBoMV0uY2hhcl9jb2RlOworICAgIGNvZGUyID0gcGh5X2ZvbnQtPmNoYXJzW2dseXBoMl0uY2hhcl9jb2RlOworICAgIHBhaXIgID0gUEZSX0tFUk5fSU5ERVgoIGNvZGUxLCBjb2RlMiApOworCisgICAgLyogbm93IHNlYXJjaCB0aGUgbGlzdCBvZiBrZXJuaW5nIGl0ZW1zICovCisgICAgeworICAgICAgUEZSX0tlcm5JdGVtICBpdGVtICAgPSBwaHlfZm9udC0+a2Vybl9pdGVtczsKKyAgICAgIEZUX1N0cmVhbSAgICAgc3RyZWFtID0gcGZyZmFjZS0+c3RyZWFtOworCisKKyAgICAgIGZvciAoIDsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQgKQorICAgICAgeworICAgICAgICBpZiAoIHBhaXIgPj0gaXRlbS0+cGFpcjEgJiYgcGFpciA8PSBpdGVtLT5wYWlyMiApCisgICAgICAgICAgZ290byBGb3VuZFBhaXI7CisgICAgICB9CisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGb3VuZFBhaXI6IC8qIHdlIGZvdW5kIGFuIGl0ZW0sIG5vdyBwYXJzZSBpdCBhbmQgZmluZCB0aGUgdmFsdWUgaWYgYW55ICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBpdGVtLT5vZmZzZXQgKSAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGl0ZW0tPnBhaXJfY291bnQgKiBpdGVtLT5wYWlyX3NpemUgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgeworICAgICAgICBGVF9VSW50ICAgIGNvdW50ICAgICAgID0gaXRlbS0+cGFpcl9jb3VudDsKKyAgICAgICAgRlRfVUludCAgICBzaXplICAgICAgICA9IGl0ZW0tPnBhaXJfc2l6ZTsKKyAgICAgICAgRlRfVUludCAgICBwb3dlciAgICAgICA9IDEgPDwgRlRfTVNCKCBjb3VudCApOworICAgICAgICBGVF9VSW50ICAgIHByb2JlICAgICAgID0gcG93ZXIgKiBzaXplOworICAgICAgICBGVF9VSW50ICAgIGV4dHJhICAgICAgID0gY291bnQgLSBwb3dlcjsKKyAgICAgICAgRlRfQnl0ZSogICBiYXNlICAgICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgICAgICBGVF9Cb29sICAgIHR3b2J5dGVzICAgID0gRlRfQk9PTCggaXRlbS0+ZmxhZ3MgJiAxICk7CisgICAgICAgIEZUX0Jvb2wgICAgdHdvYnl0ZV9hZGogPSBGVF9CT09MKCBpdGVtLT5mbGFncyAmIDIgKTsKKyAgICAgICAgRlRfQnl0ZSogICBwOworICAgICAgICBGVF9VSW50MzIgIGNwYWlyOworCisKKyAgICAgICAgaWYgKCBleHRyYSA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgcCA9IGJhc2UgKyBleHRyYSAqIHNpemU7CisKKyAgICAgICAgICBpZiAoIHR3b2J5dGVzICkKKyAgICAgICAgICAgIGNwYWlyID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwYWlyID0gUEZSX05FWFRfS1BBSVIoIHAgKTsKKworICAgICAgICAgIGlmICggY3BhaXIgPT0gcGFpciApCisgICAgICAgICAgICBnb3RvIEZvdW5kOworCisgICAgICAgICAgaWYgKCBjcGFpciA8IHBhaXIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggdHdvYnl0ZV9hZGogKQorICAgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGJhc2UgPSBwOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICggcHJvYmUgPiBzaXplICkKKyAgICAgICAgeworICAgICAgICAgIHByb2JlID4+PSAxOworICAgICAgICAgIHAgICAgICAgPSBiYXNlICsgcHJvYmU7CisKKyAgICAgICAgICBpZiAoIHR3b2J5dGVzICkKKyAgICAgICAgICAgIGNwYWlyID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwYWlyID0gUEZSX05FWFRfS1BBSVIoIHAgKTsKKworICAgICAgICAgIGlmICggY3BhaXIgPT0gcGFpciApCisgICAgICAgICAgICBnb3RvIEZvdW5kOworCisgICAgICAgICAgaWYgKCBjcGFpciA8IHBhaXIgKQorICAgICAgICAgICAgYmFzZSArPSBwcm9iZTsKKyAgICAgICAgfQorCisgICAgICAgIHAgPSBiYXNlOworCisgICAgICAgIGlmICggdHdvYnl0ZXMgKQorICAgICAgICAgIGNwYWlyID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgICAgICBlbHNlCisgICAgICAgICAgY3BhaXIgPSBQRlJfTkVYVF9LUEFJUiggcCApOworCisgICAgICAgIGlmICggY3BhaXIgPT0gcGFpciApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgIHZhbHVlOworCisKKyAgICAgICAgRm91bmQ6CisgICAgICAgICAgaWYgKCB0d29ieXRlX2FkaiApCisgICAgICAgICAgICB2YWx1ZSA9IEZUX1BFRUtfU0hPUlQoIHAgKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IHBbMF07CisKKyAgICAgICAgICBrZXJuaW5nLT54ID0gaXRlbS0+YmFzZV9hZGogKyB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyb2Jqcy5oIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyb2Jqcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OTBiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJvYmpzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZyb2Jqcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBvYmplY3QgbWV0aG9kcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUEZST0JKU19IX18KKyNkZWZpbmUgX19QRlJPQkpTX0hfXworCisjaW5jbHVkZSAicGZydHlwZXMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworICB0eXBlZGVmIHN0cnVjdCBQRlJfRmFjZVJlY18qICBQRlJfRmFjZTsKKworICB0eXBlZGVmIHN0cnVjdCBQRlJfU2l6ZVJlY18qICBQRlJfU2l6ZTsKKworICB0eXBlZGVmIHN0cnVjdCBQRlJfU2xvdFJlY18qICBQRlJfU2xvdDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfRmFjZVJlY18KKyAgeworICAgIEZUX0ZhY2VSZWMgICAgICByb290OworICAgIFBGUl9IZWFkZXJSZWMgICBoZWFkZXI7CisgICAgUEZSX0xvZ0ZvbnRSZWMgIGxvZ19mb250OworICAgIFBGUl9QaHlGb250UmVjICBwaHlfZm9udDsKKworICB9IFBGUl9GYWNlUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9TaXplUmVjXworICB7CisgICAgRlRfU2l6ZVJlYyAgcm9vdDsKKworICB9IFBGUl9TaXplUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9TbG90UmVjXworICB7CisgICAgRlRfR2x5cGhTbG90UmVjICByb290OworICAgIFBGUl9HbHlwaFJlYyAgICAgZ2x5cGg7CisKKyAgfSBQRlJfU2xvdFJlYzsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBmcl9mYWNlX2luaXQoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgZmFjZSwgICAgICAgICAgIC8qIFBGUl9GYWNlICovCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcGZyX2ZhY2VfZG9uZSggRlRfRmFjZSAgZmFjZSApOyAgICAgICAgICAgICAgIC8qIFBGUl9GYWNlICovCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfZmFjZV9nZXRfa2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwgICAgICAgLyogUEZSX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGtlcm5pbmcgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBmcl9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApOyAgICAgICAgICAvKiBQRlJfU2xvdCAqLworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcGZyX3Nsb3RfZG9uZSggRlRfR2x5cGhTbG90ICBzbG90ICk7ICAgICAgICAgIC8qIFBGUl9TbG90ICovCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfc2xvdF9sb2FkKCBGVF9HbHlwaFNsb3QgIHNsb3QsICAgICAgICAgICAgLyogUEZSX1Nsb3QgKi8KKyAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLCAgICAgICAgICAgIC8qIFBGUl9TaXplICovCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1BGUk9CSlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJzYml0LmMgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJzYml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1ZGY1YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcnNiaXQuYwpAQCAtMCwwICsxLDcwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZyc2JpdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBiaXRtYXAgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAicGZyc2JpdC5oIgorI2luY2x1ZGUgInBmcmxvYWQuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisKKyNpbmNsdWRlICJwZnJlcnJvci5oIgorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BmcgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgIFBGUiBCSVQgV1JJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9CaXRXcml0ZXJfCisgIHsKKyAgICBGVF9CeXRlKiAgbGluZTsgICAgICAvKiBjdXJyZW50IGxpbmUgc3RhcnQgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfSW50ICAgIHBpdGNoOyAgICAgLyogbGluZSBzaXplIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX1VJbnQgICB3aWR0aDsgICAgIC8qIHdpZHRoIGluIHBpeGVscy9iaXRzICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9VSW50ICAgcm93czsgICAgICAvKiBudW1iZXIgb2YgcmVtYWluaW5nIHJvd3MgdG8gc2NhbiAgICAgICovCisgICAgRlRfVUludCAgIHRvdGFsOyAgICAgLyogdG90YWwgbnVtYmVyIG9mIGJpdHMgdG8gZHJhdyAgICAgICAgICAqLworCisgIH0gUEZSX0JpdFdyaXRlclJlYywgKlBGUl9CaXRXcml0ZXI7CisKKworICBzdGF0aWMgdm9pZAorICBwZnJfYml0d3JpdGVyX2luaXQoIFBGUl9CaXRXcml0ZXIgIHdyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICAgICB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgZGVjcmVhc2luZyApCisgIHsKKyAgICB3cml0ZXItPmxpbmUgICA9IHRhcmdldC0+YnVmZmVyOworICAgIHdyaXRlci0+cGl0Y2ggID0gdGFyZ2V0LT5waXRjaDsKKyAgICB3cml0ZXItPndpZHRoICA9IHRhcmdldC0+d2lkdGg7CisgICAgd3JpdGVyLT5yb3dzICAgPSB0YXJnZXQtPnJvd3M7CisgICAgd3JpdGVyLT50b3RhbCAgPSB3cml0ZXItPndpZHRoICogd3JpdGVyLT5yb3dzOworCisgICAgaWYgKCAhZGVjcmVhc2luZyApCisgICAgeworICAgICAgd3JpdGVyLT5saW5lICs9IHdyaXRlci0+cGl0Y2ggKiAoRlRfSW50KSggdGFyZ2V0LT5yb3dzIC0gMSApOworICAgICAgd3JpdGVyLT5waXRjaCA9IC13cml0ZXItPnBpdGNoOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgcGZyX2JpdHdyaXRlcl9kZWNvZGVfYnl0ZXMoIFBGUl9CaXRXcml0ZXIgIHdyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICBsaW1pdCApCisgIHsKKyAgICBGVF9VSW50ICAgbiwgcmVsb2FkOworICAgIEZUX1VJbnQgICBsZWZ0ID0gd3JpdGVyLT53aWR0aDsKKyAgICBGVF9CeXRlKiAgY3VyICA9IHdyaXRlci0+bGluZTsKKyAgICBGVF9VSW50ICAgbWFzayA9IDB4ODA7CisgICAgRlRfVUludCAgIHZhbCAgPSAwOworICAgIEZUX1VJbnQgICBjICAgID0gMDsKKworCisgICAgbiA9IChGVF9VSW50KSggbGltaXQgLSBwICkgKiA4OworICAgIGlmICggbiA+IHdyaXRlci0+dG90YWwgKQorICAgICAgbiA9IHdyaXRlci0+dG90YWw7CisKKyAgICByZWxvYWQgPSBuICYgNzsKKworICAgIGZvciAoIDsgbiA+IDA7IG4tLSApCisgICAgeworICAgICAgaWYgKCAoIG4gJiA3ICkgPT0gcmVsb2FkICkKKyAgICAgICAgdmFsID0gKnArKzsKKworICAgICAgaWYgKCB2YWwgJiAweDgwICkKKyAgICAgICAgYyB8PSBtYXNrOworCisgICAgICB2YWwgIDw8PSAxOworICAgICAgbWFzayA+Pj0gMTsKKworICAgICAgaWYgKCAtLWxlZnQgPD0gMCApCisgICAgICB7CisgICAgICAgIGN1clswXSA9IChGVF9CeXRlKWM7CisgICAgICAgIGxlZnQgICA9IHdyaXRlci0+d2lkdGg7CisgICAgICAgIG1hc2sgICA9IDB4ODA7CisKKyAgICAgICAgd3JpdGVyLT5saW5lICs9IHdyaXRlci0+cGl0Y2g7CisgICAgICAgIGN1ciAgICAgICAgICAgPSB3cml0ZXItPmxpbmU7CisgICAgICAgIGMgICAgICAgICAgICAgPSAwOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIG1hc2sgPT0gMCApCisgICAgICB7CisgICAgICAgIGN1clswXSA9IChGVF9CeXRlKWM7CisgICAgICAgIG1hc2sgICA9IDB4ODA7CisgICAgICAgIGMgICAgICA9IDA7CisgICAgICAgIGN1cisrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggbWFzayAhPSAweDgwICkKKyAgICAgIGN1clswXSA9IChGVF9CeXRlKWM7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHBmcl9iaXR3cml0ZXJfZGVjb2RlX3JsZTEoIFBGUl9CaXRXcml0ZXIgIHdyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgbGltaXQgKQorICB7CisgICAgRlRfSW50ICAgIHBoYXNlLCBjb3VudCwgY291bnRzWzJdOworICAgIEZUX1VJbnQgICBuLCByZWxvYWQ7CisgICAgRlRfVUludCAgIGxlZnQgPSB3cml0ZXItPndpZHRoOworICAgIEZUX0J5dGUqICBjdXIgID0gd3JpdGVyLT5saW5lOworICAgIEZUX1VJbnQgICBtYXNrID0gMHg4MDsKKyAgICBGVF9VSW50ICAgYyAgICA9IDA7CisKKworICAgIG4gPSB3cml0ZXItPnRvdGFsOworCisgICAgcGhhc2UgICAgID0gMTsKKyAgICBjb3VudHNbMF0gPSAwOworICAgIGNvdW50c1sxXSA9IDA7CisgICAgY291bnQgICAgID0gMDsKKyAgICByZWxvYWQgICAgPSAxOworCisgICAgZm9yICggOyBuID4gMDsgbi0tICkKKyAgICB7CisgICAgICBpZiAoIHJlbG9hZCApCisgICAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBoYXNlICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHY7CisKKworICAgICAgICAgICAgaWYgKCBwID49IGxpbWl0ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHYgICAgICAgICA9ICpwKys7CisgICAgICAgICAgICBjb3VudHNbMF0gPSB2ID4+IDQ7CisgICAgICAgICAgICBjb3VudHNbMV0gPSB2ICYgMTU7CisgICAgICAgICAgICBwaGFzZSAgICAgPSAwOworICAgICAgICAgICAgY291bnQgICAgID0gY291bnRzWzBdOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgcGhhc2UgPSAxOworICAgICAgICAgICAgY291bnQgPSBjb3VudHNbMV07CisgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKCBjb3VudCA9PSAwICk7CisgICAgICB9CisKKyAgICAgIGlmICggcGhhc2UgKQorICAgICAgICBjIHw9IG1hc2s7CisKKyAgICAgIG1hc2sgPj49IDE7CisKKyAgICAgIGlmICggLS1sZWZ0IDw9IDAgKQorICAgICAgeworICAgICAgICBjdXJbMF0gPSAoRlRfQnl0ZSljOworICAgICAgICBsZWZ0ICAgPSB3cml0ZXItPndpZHRoOworICAgICAgICBtYXNrICAgPSAweDgwOworCisgICAgICAgIHdyaXRlci0+bGluZSArPSB3cml0ZXItPnBpdGNoOworICAgICAgICBjdXIgICAgICAgICAgID0gd3JpdGVyLT5saW5lOworICAgICAgICBjICAgICAgICAgICAgID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBtYXNrID09IDAgKQorICAgICAgeworICAgICAgICBjdXJbMF0gPSAoRlRfQnl0ZSljOworICAgICAgICBtYXNrICAgPSAweDgwOworICAgICAgICBjICAgICAgPSAwOworICAgICAgICBjdXIrKzsKKyAgICAgIH0KKworICAgICAgcmVsb2FkID0gKCAtLWNvdW50IDw9IDAgKTsKKyAgICB9CisKKyAgICBpZiAoIG1hc2sgIT0gMHg4MCApCisgICAgICBjdXJbMF0gPSAoRlRfQnl0ZSkgYzsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgcGZyX2JpdHdyaXRlcl9kZWNvZGVfcmxlMiggUEZSX0JpdFdyaXRlciAgd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICBsaW1pdCApCisgIHsKKyAgICBGVF9JbnQgICAgcGhhc2UsIGNvdW50OworICAgIEZUX1VJbnQgICBuLCByZWxvYWQ7CisgICAgRlRfVUludCAgIGxlZnQgPSB3cml0ZXItPndpZHRoOworICAgIEZUX0J5dGUqICBjdXIgID0gd3JpdGVyLT5saW5lOworICAgIEZUX1VJbnQgICBtYXNrID0gMHg4MDsKKyAgICBGVF9VSW50ICAgYyAgICA9IDA7CisKKworICAgIG4gPSB3cml0ZXItPnRvdGFsOworCisgICAgcGhhc2UgID0gMTsKKyAgICBjb3VudCAgPSAwOworICAgIHJlbG9hZCA9IDE7CisKKyAgICBmb3IgKCA7IG4gPiAwOyBuLS0gKQorICAgIHsKKyAgICAgIGlmICggcmVsb2FkICkKKyAgICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNvdW50ID0gKnArKzsKKyAgICAgICAgICBwaGFzZSA9IHBoYXNlIF4gMTsKKworICAgICAgICB9IHdoaWxlICggY291bnQgPT0gMCApOworICAgICAgfQorCisgICAgICBpZiAoIHBoYXNlICkKKyAgICAgICAgYyB8PSBtYXNrOworCisgICAgICBtYXNrID4+PSAxOworCisgICAgICBpZiAoIC0tbGVmdCA8PSAwICkKKyAgICAgIHsKKyAgICAgICAgY3VyWzBdID0gKEZUX0J5dGUpYzsKKyAgICAgICAgYyAgICAgID0gMDsKKyAgICAgICAgbWFzayAgID0gMHg4MDsKKyAgICAgICAgbGVmdCAgID0gd3JpdGVyLT53aWR0aDsKKworICAgICAgICB3cml0ZXItPmxpbmUgKz0gd3JpdGVyLT5waXRjaDsKKyAgICAgICAgY3VyICAgICAgICAgICA9IHdyaXRlci0+bGluZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBtYXNrID09IDAgKQorICAgICAgeworICAgICAgICBjdXJbMF0gPSAoRlRfQnl0ZSljOworICAgICAgICBjICAgICAgPSAwOworICAgICAgICBtYXNrICAgPSAweDgwOworICAgICAgICBjdXIrKzsKKyAgICAgIH0KKworICAgICAgcmVsb2FkID0gKCAtLWNvdW50IDw9IDAgKTsKKyAgICB9CisKKyAgICBpZiAoIG1hc2sgIT0gMHg4MCApCisgICAgICBjdXJbMF0gPSAoRlRfQnl0ZSkgYzsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgQklUTUFQIERBVEEgREVDT0RJTkcgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgcGZyX2xvb2t1cF9iaXRtYXBfZGF0YSggRlRfQnl0ZSogICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNoYXJfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBmb3VuZF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgZm91bmRfc2l6ZSApCisgIHsKKyAgICBGVF9VSW50ICAgbGVmdCwgcmlnaHQsIGNoYXJfbGVuOworICAgIEZUX0Jvb2wgICB0d28gPSBGVF9CT09MKCBmbGFncyAmIDEgKTsKKyAgICBGVF9CeXRlKiAgYnVmZjsKKworCisgICAgY2hhcl9sZW4gPSA0OworICAgIGlmICggdHdvICkgICAgICAgY2hhcl9sZW4gKz0gMTsKKyAgICBpZiAoIGZsYWdzICYgMiApIGNoYXJfbGVuICs9IDE7CisgICAgaWYgKCBmbGFncyAmIDQgKSBjaGFyX2xlbiArPSAxOworCisgICAgbGVmdCAgPSAwOworICAgIHJpZ2h0ID0gY291bnQ7CisKKyAgICB3aGlsZSAoIGxlZnQgPCByaWdodCApCisgICAgeworICAgICAgRlRfVUludCAgbWlkZGxlLCBjb2RlOworCisKKyAgICAgIG1pZGRsZSA9ICggbGVmdCArIHJpZ2h0ICkgPj4gMTsKKyAgICAgIGJ1ZmYgICA9IGJhc2UgKyBtaWRkbGUgKiBjaGFyX2xlbjsKKworICAgICAgLyogY2hlY2sgdGhhdCB3ZSBhcmUgbm90IG91dHNpZGUgb2YgdGhlIHRhYmxlIC0tICovCisgICAgICAvKiB0aGlzIGlzIHBvc3NpYmxlIHdpdGggYnJva2VuIGZvbnRzLi4uICAgICAgICAgKi8KKyAgICAgIGlmICggYnVmZiArIGNoYXJfbGVuID4gbGltaXQgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGlmICggdHdvICkKKyAgICAgICAgY29kZSA9IFBGUl9ORVhUX1VTSE9SVCggYnVmZiApOworICAgICAgZWxzZQorICAgICAgICBjb2RlID0gUEZSX05FWFRfQllURSggYnVmZiApOworCisgICAgICBpZiAoIGNvZGUgPT0gY2hhcl9jb2RlICkKKyAgICAgICAgZ290byBGb3VuZF9JdDsKKworICAgICAgaWYgKCBjb2RlIDwgY2hhcl9jb2RlICkKKyAgICAgICAgbGVmdCA9IG1pZGRsZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmlnaHQgPSBtaWRkbGU7CisgICAgfQorCisgIEZhaWw6CisgICAgLyogTm90IGZvdW5kICovCisgICAgKmZvdW5kX3NpemUgICA9IDA7CisgICAgKmZvdW5kX29mZnNldCA9IDA7CisgICAgcmV0dXJuOworCisgIEZvdW5kX0l0OgorICAgIGlmICggZmxhZ3MgJiAyICkKKyAgICAgICpmb3VuZF9zaXplID0gUEZSX05FWFRfVVNIT1JUKCBidWZmICk7CisgICAgZWxzZQorICAgICAgKmZvdW5kX3NpemUgPSBQRlJfTkVYVF9CWVRFKCBidWZmICk7CisKKyAgICBpZiAoIGZsYWdzICYgNCApCisgICAgICAqZm91bmRfb2Zmc2V0ID0gUEZSX05FWFRfVUxPTkcoIGJ1ZmYgKTsKKyAgICBlbHNlCisgICAgICAqZm91bmRfb2Zmc2V0ID0gUEZSX05FWFRfVVNIT1JUKCBidWZmICk7CisgIH0KKworCisgIC8qIGxvYWQgYml0bWFwIG1ldHJpY3MuICAiKnBhZHZhbmNlIiBtdXN0IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAqLworICAvKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwZnJfbG9hZF9iaXRtYXBfbWV0cmljcyggRlRfQnl0ZSoqICBwZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHNjYWxlZF9hZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICpheHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAqYXlwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmF4c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYXlzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICphYWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYWZvcm1hdCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSAgIGZsYWdzOworICAgIEZUX0NoYXIgICBjOworICAgIEZUX0J5dGUgICBiOworICAgIEZUX0J5dGUqICBwID0gKnBkYXRhOworICAgIEZUX0xvbmcgICB4cG9zLCB5cG9zLCBhZHZhbmNlOworICAgIEZUX1VJbnQgICB4c2l6ZSwgeXNpemU7CisKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIGZsYWdzID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgeHBvcyAgICA9IDA7CisgICAgeXBvcyAgICA9IDA7CisgICAgeHNpemUgICA9IDA7CisgICAgeXNpemUgICA9IDA7CisgICAgYWR2YW5jZSA9IDA7CisKKyAgICBzd2l0Y2ggKCBmbGFncyAmIDMgKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgIGMgICAgPSBQRlJfTkVYVF9JTlQ4KCBwICk7CisgICAgICB4cG9zID0gYyA+PiA0OworICAgICAgeXBvcyA9ICggKEZUX0NoYXIpKCBjIDw8IDQgKSApID4+IDQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgeHBvcyA9IFBGUl9ORVhUX0lOVDgoIHAgKTsKKyAgICAgIHlwb3MgPSBQRlJfTkVYVF9JTlQ4KCBwICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIFBGUl9DSEVDSyggNCApOworICAgICAgeHBvcyA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgICB5cG9zID0gUEZSX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgUEZSX0NIRUNLKCA2ICk7CisgICAgICB4cG9zID0gUEZSX05FWFRfTE9ORyggcCApOworICAgICAgeXBvcyA9IFBGUl9ORVhUX0xPTkcoIHAgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIDsKKyAgICB9CisKKyAgICBmbGFncyA+Pj0gMjsKKyAgICBzd2l0Y2ggKCBmbGFncyAmIDMgKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAvKiBibGFuayBpbWFnZSAqLworICAgICAgeHNpemUgPSAwOworICAgICAgeXNpemUgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgIGIgICAgID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgeHNpemUgPSAoIGIgPj4gNCApICYgMHhGOworICAgICAgeXNpemUgPSBiICYgMHhGOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBQRlJfQ0hFQ0soIDIgKTsKKyAgICAgIHhzaXplID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgeXNpemUgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMzoKKyAgICAgIFBGUl9DSEVDSyggNCApOworICAgICAgeHNpemUgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHlzaXplID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICA7CisgICAgfQorCisgICAgZmxhZ3MgPj49IDI7CisgICAgc3dpdGNoICggZmxhZ3MgJiAzICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgYWR2YW5jZSA9IHNjYWxlZF9hZHZhbmNlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICBQRlJfQ0hFQ0soIDEgKTsKKyAgICAgIGFkdmFuY2UgPSBQRlJfTkVYVF9JTlQ4KCBwICkgPDwgODsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOgorICAgICAgUEZSX0NIRUNLKCAyICk7CisgICAgICBhZHZhbmNlID0gUEZSX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgUEZSX0NIRUNLKCAzICk7CisgICAgICBhZHZhbmNlID0gUEZSX05FWFRfTE9ORyggcCApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgOworICAgIH0KKworICAgICpheHBvcyAgICA9IHhwb3M7CisgICAgKmF5cG9zICAgID0geXBvczsKKyAgICAqYXhzaXplICAgPSB4c2l6ZTsKKyAgICAqYXlzaXplICAgPSB5c2l6ZTsKKyAgICAqYWFkdmFuY2UgPSBhZHZhbmNlOworICAgICphZm9ybWF0ICA9IGZsYWdzID4+IDI7CisgICAgKnBkYXRhICAgID0gcDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBUb29fU2hvcnQ6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIEZUX0VSUk9SKCggInBmcl9sb2FkX2JpdG1hcF9tZXRyaWNzOiBpbnZhbGlkIGdseXBoIGRhdGFcbiIgKSk7CisgICAgZ290byBFeGl0OworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGZyX2xvYWRfYml0bWFwX2JpdHMoIEZUX0J5dGUqICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIGRlY3JlYXNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICB0YXJnZXQgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgUEZSX0JpdFdyaXRlclJlYyAgd3JpdGVyOworCisKKyAgICBpZiAoIHRhcmdldC0+cm93cyA+IDAgJiYgdGFyZ2V0LT53aWR0aCA+IDAgKQorICAgIHsKKyAgICAgIHBmcl9iaXR3cml0ZXJfaW5pdCggJndyaXRlciwgdGFyZ2V0LCBkZWNyZWFzaW5nICk7CisKKyAgICAgIHN3aXRjaCAoIGZvcm1hdCApCisgICAgICB7CisgICAgICBjYXNlIDA6IC8qIHBhY2tlZCBiaXRzICovCisgICAgICAgIHBmcl9iaXR3cml0ZXJfZGVjb2RlX2J5dGVzKCAmd3JpdGVyLCBwLCBsaW1pdCApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAxOiAvKiBSTEUxICovCisgICAgICAgIHBmcl9iaXR3cml0ZXJfZGVjb2RlX3JsZTEoICZ3cml0ZXIsIHAsIGxpbWl0ICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6IC8qIFJMRTIgKi8KKyAgICAgICAgcGZyX2JpdHdyaXRlcl9kZWNvZGVfcmxlMiggJndyaXRlciwgcCwgbGltaXQgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEZUX0VSUk9SKCggInBmcl9yZWFkX2JpdG1hcF9kYXRhOiBpbnZhbGlkIGltYWdlIHR5cGVcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEJJVE1BUCBMT0FESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBmcl9zbG90X2xvYWRfYml0bWFwKCBQRlJfU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICBQRlJfU2l6ZSAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCApCisgIHsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgUEZSX0ZhY2UgICAgIGZhY2UgICA9IChQRlJfRmFjZSkgZ2x5cGgtPnJvb3QuZmFjZTsKKyAgICBGVF9TdHJlYW0gICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisgICAgUEZSX1BoeUZvbnQgIHBoeXMgICA9ICZmYWNlLT5waHlfZm9udDsKKyAgICBGVF9VTG9uZyAgICAgZ3BzX29mZnNldDsKKyAgICBGVF9VTG9uZyAgICAgZ3BzX3NpemU7CisgICAgUEZSX0NoYXIgICAgIGNoYXJhY3RlcjsKKyAgICBQRlJfU3RyaWtlICAgc3RyaWtlOworCisKKyAgICBjaGFyYWN0ZXIgPSAmcGh5cy0+Y2hhcnNbZ2x5cGhfaW5kZXhdOworCisgICAgLyogTG9vay11cCBhIGJpdG1hcCBzdHJpa2UgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCAqLworICAgIC8qIGNoYXJhY3RlciBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICBuOworCisKKyAgICAgIHN0cmlrZSA9IHBoeXMtPnN0cmlrZXM7CisgICAgICBmb3IgKCBuID0gMDsgbiA8IHBoeXMtPm51bV9zdHJpa2VzOyBuKysgKQorICAgICAgeworICAgICAgICBpZiAoIHN0cmlrZS0+eF9wcG0gPT0gKEZUX1VJbnQpc2l6ZS0+cm9vdC5tZXRyaWNzLnhfcHBlbSAmJgorICAgICAgICAgICAgIHN0cmlrZS0+eV9wcG0gPT0gKEZUX1VJbnQpc2l6ZS0+cm9vdC5tZXRyaWNzLnlfcHBlbSApCisgICAgICAgIHsKKyAgICAgICAgICBnb3RvIEZvdW5kX1N0cmlrZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmlrZSsrOworICAgICAgfQorCisgICAgICAvKiBjb3VsZG4ndCBmaW5kIGl0ICovCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICB9CisKKyAgRm91bmRfU3RyaWtlOgorCisgICAgLyogTm93IGxvb2t1cCB0aGUgZ2x5cGgncyBwb3NpdGlvbiB3aXRoaW4gdGhlIGZpbGUgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICBjaGFyX2xlbjsKKworCisgICAgICBjaGFyX2xlbiA9IDQ7CisgICAgICBpZiAoIHN0cmlrZS0+ZmxhZ3MgJiAxICkgY2hhcl9sZW4gKz0gMTsKKyAgICAgIGlmICggc3RyaWtlLT5mbGFncyAmIDIgKSBjaGFyX2xlbiArPSAxOworICAgICAgaWYgKCBzdHJpa2UtPmZsYWdzICYgNCApIGNoYXJfbGVuICs9IDE7CisKKyAgICAgIC8qIEFjY2VzcyBkYXRhIGRpcmVjdGx5IGluIHRoZSBmcmFtZSB0byBzcGVlZCBsb29rdXBzICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBwaHlzLT5iY3Rfb2Zmc2V0ICsgc3RyaWtlLT5iY3Rfb2Zmc2V0ICkgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGNoYXJfbGVuICogc3RyaWtlLT5udW1fYml0bWFwcyApICAgICAgICApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcGZyX2xvb2t1cF9iaXRtYXBfZGF0YSggc3RyZWFtLT5jdXJzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlLT5udW1fYml0bWFwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXItPmNoYXJfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncHNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwc19zaXplICk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgaWYgKCBncHNfc2l6ZSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgLyogQ291bGQgbm90IGZpbmQgYSBiaXRtYXAgcHJvZ3JhbSBzdHJpbmcgZm9yIHRoaXMgZ2x5cGggKi8KKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBiaXRtYXAgbWV0cmljcyAqLworICAgIHsKKyAgICAgIEZUX0xvbmcgICB4cG9zID0gMCwgeXBvcyA9IDAsIGFkdmFuY2UgPSAwOworICAgICAgRlRfVUludCAgIHhzaXplID0gMCwgeXNpemUgPSAwLCBmb3JtYXQgPSAwOworICAgICAgRlRfQnl0ZSogIHA7CisKKworICAgICAgLyogY29tcHV0ZSBsaW5lYXIgYWR2YW5jZSAqLworICAgICAgYWR2YW5jZSA9IGNoYXJhY3Rlci0+YWR2YW5jZTsKKyAgICAgIGlmICggcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uICE9IHBoeXMtPm91dGxpbmVfcmVzb2x1dGlvbiApCisgICAgICAgIGFkdmFuY2UgPSBGVF9NdWxEaXYoIGFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXBoeXMtPm91dGxpbmVfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uICk7CisKKyAgICAgIGdseXBoLT5yb290LmxpbmVhckhvcmlBZHZhbmNlID0gYWR2YW5jZTsKKworICAgICAgLyogY29tcHV0ZSBkZWZhdWx0IGFkdmFuY2UsIGkuZS4sIHNjYWxlZCBhZHZhbmNlLiAgVGhpcyBjYW4gYmUgKi8KKyAgICAgIC8qIG92ZXJyaWRkZW4gaW4gdGhlIGJpdG1hcCBoZWFkZXIgb2YgY2VydGFpbiBnbHlwaHMuICAgICAgICAgICovCisgICAgICBhZHZhbmNlID0gRlRfTXVsRGl2KCAoRlRfRml4ZWQpc2l6ZS0+cm9vdC5tZXRyaWNzLnhfcHBlbSA8PCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyLT5hZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpcGh5cy0+bWV0cmljc19yZXNvbHV0aW9uICk7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZhY2UtPmhlYWRlci5ncHNfc2VjdGlvbl9vZmZzZXQgKyBncHNfb2Zmc2V0ICkgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGdwc19zaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgICBlcnJvciA9IHBmcl9sb2FkX2JpdG1hcF9tZXRyaWNzKCAmcCwgc3RyZWFtLT5saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHBvcywgJnlwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNpemUsICZ5c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZHZhbmNlLCAmZm9ybWF0ICk7CisKKyAgICAgIC8qCisgICAgICAgKiBYWFg6IG9uIDE2Yml0IHN5c3RlbXMgd2UgcmV0dXJuIGFuIGVycm9yIGZvciBodWdlIGJpdG1hcHMKKyAgICAgICAqICAgICAgdGhhdCBjYXVzZSBzaXplIHRydW5jYXRpb24sIGJlY2F1c2UgdHJ1bmNhdGVkCisgICAgICAgKiAgICAgIHNpemUgcHJvcGVydGllcyBtYWtlIGJpdG1hcCBnbHlwaHMgYnJva2VuLgorICAgICAgICovCisgICAgICBpZiAoIHhwb3MgPiBGVF9JTlRfTUFYICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgeHBvcyA8IEZUX0lOVF9NSU4gICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICB5c2l6ZSA+IEZUX0lOVF9NQVggICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIHlwb3MgPiBGVF9JTlRfTUFYIC0gKEZUX0xvbmcpeXNpemUgfHwKKyAgICAgICAgICAgeXBvcyArIChGVF9Mb25nKXlzaXplIDwgRlRfSU5UX01JTiApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMSgoICJwZnJfc2xvdF9sb2FkX2JpdG1hcDoiICkpOworICAgICAgICBGVF9UUkFDRTEoKCAiaHVnZSBiaXRtYXAgZ2x5cGggJWR4JWQgb3ZlciBGVF9HbHlwaFNsb3RcbiIsCisgICAgICAgICAgICAgICAgICAgICB4cG9zLCB5cG9zICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1BpeGVsX1NpemUgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBnbHlwaC0+cm9vdC5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworCisgICAgICAgIC8qIFNldCB1cCBnbHlwaCBiaXRtYXAgYW5kIG1ldHJpY3MgKi8KKworICAgICAgICAvKiBYWFg6IG5lZWRzIGNhc3RzIHRvIGZpdCBGVF9CaXRtYXAue3dpZHRofHJvd3N8cGl0Y2h9ICovCisgICAgICAgIGdseXBoLT5yb290LmJpdG1hcC53aWR0aCAgICAgID0geHNpemU7CisgICAgICAgIGdseXBoLT5yb290LmJpdG1hcC5yb3dzICAgICAgID0geXNpemU7CisgICAgICAgIGdseXBoLT5yb290LmJpdG1hcC5waXRjaCAgICAgID0gKEZUX0ludCkoIHhzaXplICsgNyApID4+IDM7CisgICAgICAgIGdseXBoLT5yb290LmJpdG1hcC5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POworCisgICAgICAgIC8qIFhYWDogbmVlZHMgY2FzdHMgdG8gZml0IEZUX0dseXBoX01ldHJpY3Mue3dpZHRofGhlaWdodH0gKi8KKyAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy53aWR0aCAgICAgICAgPSAoRlRfUG9zKXhzaXplIDw8IDY7CisgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaGVpZ2h0ICAgICAgID0gKEZUX1Bvcyl5c2l6ZSA8PCA2OworICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IHhwb3MgPDwgNjsKKyAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy5ob3JpQmVhcmluZ1kgPSB5cG9zIDw8IDY7CisgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gRlRfUElYX1JPVU5EKCAoIGFkdmFuY2UgPj4gMiApICk7CisgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MudmVydEJlYXJpbmdYID0gLSBnbHlwaC0+cm9vdC5tZXRyaWNzLndpZHRoID4+IDE7CisgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MudmVydEJlYXJpbmdZID0gMDsKKyAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QWR2YW5jZSAgPSBzaXplLT5yb290Lm1ldHJpY3MuaGVpZ2h0OworCisgICAgICAgIC8qIFhYWDogbmVlZHMgY2FzdHMgZml0IEZUX0dseXBoU2xvdFJlYy5iaXRtYXBfe2xlZnR8dG9wfSAqLworICAgICAgICBnbHlwaC0+cm9vdC5iaXRtYXBfbGVmdCA9IChGVF9JbnQpeHBvczsKKyAgICAgICAgZ2x5cGgtPnJvb3QuYml0bWFwX3RvcCAgPSAoRlRfSW50KSggeXBvcyArIChGVF9Mb25nKXlzaXplICk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYW5kIHJlYWQgYml0bWFwIGRhdGEgKi8KKyAgICAgICAgeworICAgICAgICAgIEZUX1VMb25nICBsZW4gPSAoRlRfVUxvbmcpZ2x5cGgtPnJvb3QuYml0bWFwLnBpdGNoICogeXNpemU7CisKKworICAgICAgICAgIGVycm9yID0gZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCggJmdseXBoLT5yb290LCBsZW4gKTsKKyAgICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBwZnJfbG9hZF9iaXRtYXBfYml0cygKKyAgICAgICAgICAgICAgICAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+bGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0JPT0woZmFjZS0+aGVhZGVyLmNvbG9yX2ZsYWdzICYgMiksCisgICAgICAgICAgICAgICAgICAgICAgJmdseXBoLT5yb290LmJpdG1hcCApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyc2JpdC5oIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcGZyc2JpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjJjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJzYml0LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZyc2JpdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBiaXRtYXAgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUEZSU0JJVF9IX18KKyNkZWZpbmUgX19QRlJTQklUX0hfXworCisjaW5jbHVkZSAicGZyb2Jqcy5oIgorCitGVF9CRUdJTl9IRUFERVIKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwZnJfc2xvdF9sb2FkX2JpdG1hcCggUEZSX1Nsb3QgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1NpemUgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2x5cGhfaW5kZXggKTsKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QRlJfU0JJVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3BmcnR5cGVzLmggYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJ0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmIxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Bmci9wZnJ0eXBlcy5oCkBAIC0wLDAgKzEsMzYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwZnJ0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUEZSIGRhdGEgc3RydWN0dXJlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QRlJUWVBFU19IX18KKyNkZWZpbmUgX19QRlJUWVBFU19IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKworRlRfQkVHSU5fSEVBREVSCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB0aGUgUEZSIEhlYWRlciBzdHJ1Y3R1cmUgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9IZWFkZXJSZWNfCisgIHsKKyAgICBGVF9VSW50MzIgIHNpZ25hdHVyZTsKKyAgICBGVF9VSW50ICAgIHZlcnNpb247CisgICAgRlRfVUludCAgICBzaWduYXR1cmUyOworICAgIEZUX1VJbnQgICAgaGVhZGVyX3NpemU7CisKKyAgICBGVF9VSW50ICAgIGxvZ19kaXJfc2l6ZTsKKyAgICBGVF9VSW50ICAgIGxvZ19kaXJfb2Zmc2V0OworCisgICAgRlRfVUludCAgICBsb2dfZm9udF9tYXhfc2l6ZTsKKyAgICBGVF9VSW50MzIgIGxvZ19mb250X3NlY3Rpb25fc2l6ZTsKKyAgICBGVF9VSW50MzIgIGxvZ19mb250X3NlY3Rpb25fb2Zmc2V0OworCisgICAgRlRfVUludDMyICBwaHlfZm9udF9tYXhfc2l6ZTsKKyAgICBGVF9VSW50MzIgIHBoeV9mb250X3NlY3Rpb25fc2l6ZTsKKyAgICBGVF9VSW50MzIgIHBoeV9mb250X3NlY3Rpb25fb2Zmc2V0OworCisgICAgRlRfVUludCAgICBncHNfbWF4X3NpemU7CisgICAgRlRfVUludDMyICBncHNfc2VjdGlvbl9zaXplOworICAgIEZUX1VJbnQzMiAgZ3BzX3NlY3Rpb25fb2Zmc2V0OworCisgICAgRlRfVUludCAgICBtYXhfYmx1ZV92YWx1ZXM7CisgICAgRlRfVUludCAgICBtYXhfeF9vcnVzOworICAgIEZUX1VJbnQgICAgbWF4X3lfb3J1czsKKworICAgIEZUX1VJbnQgICAgcGh5X2ZvbnRfbWF4X3NpemVfaGlnaDsKKyAgICBGVF9VSW50ICAgIGNvbG9yX2ZsYWdzOworCisgICAgRlRfVUludDMyICBiY3RfbWF4X3NpemU7CisgICAgRlRfVUludDMyICBiY3Rfc2V0X21heF9zaXplOworICAgIEZUX1VJbnQzMiAgcGh5X2JjdF9zZXRfbWF4X3NpemU7CisKKyAgICBGVF9VSW50ICAgIG51bV9waHlfZm9udHM7CisgICAgRlRfVUludCAgICBtYXhfdmVydF9zdGVtX3NuYXA7CisgICAgRlRfVUludCAgICBtYXhfaG9yel9zdGVtX3NuYXA7CisgICAgRlRfVUludCAgICBtYXhfY2hhcnM7CisKKyAgfSBQRlJfSGVhZGVyUmVjLCAqUEZSX0hlYWRlcjsKKworCisgIC8qIHVzZWQgaW4gYGNvbG9yX2ZsYWdzJyBmaWVsZCBvZiB0aGUgUEZSX0hlYWRlciAqLworICB0eXBlZGVmIGVudW0gIFBGUl9IZWFkZXJGbGFnc18KKyAgeworICAgIFBGUl9GTEFHX0JMQUNLX1BJWEVMICAgPSAxLAorICAgIFBGUl9GTEFHX0lOVkVSVF9CSVRNQVAgPSAyCisKKyAgfSBQRlJfSGVhZGVyRmxhZ3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfTG9nRm9udFJlY18KKyAgeworICAgIEZUX1VJbnQzMiAgc2l6ZTsKKyAgICBGVF9VSW50MzIgIG9mZnNldDsKKworICAgIEZUX0ludDMyICAgbWF0cml4WzRdOworICAgIEZUX1VJbnQgICAgc3Ryb2tlX2ZsYWdzOworICAgIEZUX0ludCAgICAgc3Ryb2tlX3RoaWNrbmVzczsKKyAgICBGVF9JbnQgICAgIGJvbGRfdGhpY2tuZXNzOworICAgIEZUX0ludDMyICAgbWl0ZXJfbGltaXQ7CisKKyAgICBGVF9VSW50MzIgIHBoeXNfc2l6ZTsKKyAgICBGVF9VSW50MzIgIHBoeXNfb2Zmc2V0OworCisgIH0gUEZSX0xvZ0ZvbnRSZWMsICpQRlJfTG9nRm9udDsKKworCisgIHR5cGVkZWYgZW51bSAgUEZSX0xvZ0ZsYWdzXworICB7CisgICAgUEZSX0xPR19FWFRSQV9JVEVNUyAgPSAweDQwLAorICAgIFBGUl9MT0dfMkJZVEVfQk9MRCAgID0gMHgyMCwKKyAgICBQRlJfTE9HX0JPTEQgICAgICAgICA9IDB4MTAsCisgICAgUEZSX0xPR18yQllURV9TVFJPS0UgPSA4LAorICAgIFBGUl9MT0dfU1RST0tFICAgICAgID0gNCwKKyAgICBQRlJfTElORV9KT0lOX01BU0sgICA9IDMKKworICB9IFBGUl9Mb2dGbGFnczsKKworCisgIHR5cGVkZWYgZW51bSAgUEZSX0xpbmVKb2luRmxhZ3NfCisgIHsKKyAgICBQRlJfTElORV9KT0lOX01JVEVSID0gMCwKKyAgICBQRlJfTElORV9KT0lOX1JPVU5EID0gMSwKKyAgICBQRlJfTElORV9KT0lOX0JFVkVMID0gMgorCisgIH0gUEZSX0xpbmVKb2luRmxhZ3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgZW51bSAgUEZSX0JpdG1hcEZsYWdzXworICB7CisgICAgUEZSX0JJVE1BUF8zQllURV9PRkZTRVQgICA9IDQsCisgICAgUEZSX0JJVE1BUF8yQllURV9TSVpFICAgICA9IDIsCisgICAgUEZSX0JJVE1BUF8yQllURV9DSEFSQ09ERSA9IDEKKworICB9IFBGUl9CaXRtYXBGbGFnczsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfQml0bWFwQ2hhclJlY18KKyAgeworICAgIEZUX1VJbnQgICAgY2hhcl9jb2RlOworICAgIEZUX1VJbnQgICAgZ3BzX3NpemU7CisgICAgRlRfVUludDMyICBncHNfb2Zmc2V0OworCisgIH0gUEZSX0JpdG1hcENoYXJSZWMsICpQRlJfQml0bWFwQ2hhcjsKKworCisgIHR5cGVkZWYgZW51bSAgUEZSX1N0cmlrZUZsYWdzXworICB7CisgICAgUEZSX1NUUklLRV8yQllURV9DT1VOVCAgPSAweDEwLAorICAgIFBGUl9TVFJJS0VfM0JZVEVfT0ZGU0VUID0gMHgwOCwKKyAgICBQRlJfU1RSSUtFXzNCWVRFX1NJWkUgICA9IDB4MDQsCisgICAgUEZSX1NUUklLRV8yQllURV9ZUFBNICAgPSAweDAyLAorICAgIFBGUl9TVFJJS0VfMkJZVEVfWFBQTSAgID0gMHgwMQorCisgIH0gUEZSX1N0cmlrZUZsYWdzOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9TdHJpa2VSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgeF9wcG07CisgICAgRlRfVUludCAgICAgICAgIHlfcHBtOworICAgIEZUX1VJbnQgICAgICAgICBmbGFnczsKKworICAgIEZUX1VJbnQzMiAgICAgICBncHNfc2l6ZTsKKyAgICBGVF9VSW50MzIgICAgICAgZ3BzX29mZnNldDsKKworICAgIEZUX1VJbnQzMiAgICAgICBiY3Rfc2l6ZTsKKyAgICBGVF9VSW50MzIgICAgICAgYmN0X29mZnNldDsKKworICAgIC8qIG9wdGlvbmFsICovCisgICAgRlRfVUludCAgICAgICAgIG51bV9iaXRtYXBzOworICAgIFBGUl9CaXRtYXBDaGFyICBiaXRtYXBzOworCisgIH0gUEZSX1N0cmlrZVJlYywgKlBGUl9TdHJpa2U7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfQ2hhclJlY18KKyAgeworICAgIEZUX1VJbnQgICAgY2hhcl9jb2RlOworICAgIEZUX0ludCAgICAgYWR2YW5jZTsKKyAgICBGVF9VSW50ICAgIGdwc19zaXplOworICAgIEZUX1VJbnQzMiAgZ3BzX29mZnNldDsKKworICB9IFBGUl9DaGFyUmVjLCAqUEZSX0NoYXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfRGltZW5zaW9uUmVjXworICB7CisgICAgRlRfVUludCAgc3RhbmRhcmQ7CisgICAgRlRfVUludCAgbnVtX3N0ZW1fc25hcHM7CisgICAgRlRfSW50KiAgc3RlbV9zbmFwczsKKworICB9IFBGUl9EaW1lbnNpb25SZWMsICpQRlJfRGltZW5zaW9uOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgUEZSX0tlcm5JdGVtUmVjXyogIFBGUl9LZXJuSXRlbTsKKworICB0eXBlZGVmIHN0cnVjdCAgUEZSX0tlcm5JdGVtUmVjXworICB7CisgICAgUEZSX0tlcm5JdGVtICBuZXh0OworICAgIEZUX0J5dGUgICAgICAgcGFpcl9jb3VudDsKKyAgICBGVF9CeXRlICAgICAgIGZsYWdzOworICAgIEZUX1Nob3J0ICAgICAgYmFzZV9hZGo7CisgICAgRlRfVUludCAgICAgICBwYWlyX3NpemU7CisgICAgRlRfT2Zmc2V0ICAgICBvZmZzZXQ7CisgICAgRlRfVUludDMyICAgICBwYWlyMTsKKyAgICBGVF9VSW50MzIgICAgIHBhaXIyOworCisgIH0gUEZSX0tlcm5JdGVtUmVjOworCisKKyNkZWZpbmUgUEZSX0tFUk5fSU5ERVgoIGcxLCBnMiApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoIChGVF9VSW50MzIpKGcxKSA8PCAxNiApIHwgKEZUX1VJbnQxNikoZzIpICkKKworI2RlZmluZSBQRlJfS0VSTl9QQUlSX0lOREVYKCBwYWlyICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgUEZSX0tFUk5fSU5ERVgoIChwYWlyKS0+Z2x5cGgxLCAocGFpciktPmdseXBoMiApCisKKyNkZWZpbmUgUEZSX05FWFRfS1BBSVIoIHAgKSAgKCBwICs9IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMilwWy0yXSA8PCAxNiApIHwgcFstMV0gKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICB0eXBlZGVmIHN0cnVjdCAgUEZSX1BoeUZvbnRSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5OworICAgIEZUX1VJbnQzMiAgICAgICAgICBvZmZzZXQ7CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgZm9udF9yZWZfbnVtYmVyOworICAgIEZUX1VJbnQgICAgICAgICAgICBvdXRsaW5lX3Jlc29sdXRpb247CisgICAgRlRfVUludCAgICAgICAgICAgIG1ldHJpY3NfcmVzb2x1dGlvbjsKKyAgICBGVF9CQm94ICAgICAgICAgICAgYmJveDsKKyAgICBGVF9VSW50ICAgICAgICAgICAgZmxhZ3M7CisgICAgRlRfSW50ICAgICAgICAgICAgIHN0YW5kYXJkX2FkdmFuY2U7CisKKyAgICBGVF9JbnQgICAgICAgICAgICAgYXNjZW50OyAgIC8qIG9wdGlvbmFsLCBiYm94LnlNYXggaWYgbm90IHByZXNlbnQgKi8KKyAgICBGVF9JbnQgICAgICAgICAgICAgZGVzY2VudDsgIC8qIG9wdGlvbmFsLCBiYm94LnlNaW4gaWYgbm90IHByZXNlbnQgKi8KKyAgICBGVF9JbnQgICAgICAgICAgICAgbGVhZGluZzsgIC8qIG9wdGlvbmFsLCAwIGlmIG5vdCBwcmVzZW50ICAgICAgICAgKi8KKworICAgIFBGUl9EaW1lbnNpb25SZWMgICBob3Jpem9udGFsOworICAgIFBGUl9EaW1lbnNpb25SZWMgICB2ZXJ0aWNhbDsKKworICAgIEZUX1N0cmluZyogICAgICAgICBmb250X2lkOworICAgIEZUX1N0cmluZyogICAgICAgICBmYW1pbHlfbmFtZTsKKyAgICBGVF9TdHJpbmcqICAgICAgICAgc3R5bGVfbmFtZTsKKworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1fc3RyaWtlczsKKyAgICBGVF9VSW50ICAgICAgICAgICAgbWF4X3N0cmlrZXM7CisgICAgUEZSX1N0cmlrZVJlYyogICAgIHN0cmlrZXM7CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX2JsdWVfdmFsdWVzOworICAgIEZUX0ludCAgICAgICAgICAgICpibHVlX3ZhbHVlczsKKyAgICBGVF9VSW50ICAgICAgICAgICAgYmx1ZV9mdXp6OworICAgIEZUX1VJbnQgICAgICAgICAgICBibHVlX3NjYWxlOworCisgICAgRlRfVUludCAgICAgICAgICAgIG51bV9jaGFyczsKKyAgICBGVF9PZmZzZXQgICAgICAgICAgY2hhcnNfb2Zmc2V0OworICAgIFBGUl9DaGFyICAgICAgICAgICBjaGFyczsKKworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1fa2Vybl9wYWlyczsKKyAgICBQRlJfS2Vybkl0ZW0gICAgICAga2Vybl9pdGVtczsKKyAgICBQRlJfS2Vybkl0ZW0qICAgICAga2Vybl9pdGVtc190YWlsOworCisgICAgLyogbm90IHBhcnQgb2YgdGhlIHNwZWMsIGJ1dCB1c2VkIGR1cmluZyBsb2FkICovCisgICAgRlRfVUxvbmcgICAgICAgICAgIGJjdF9vZmZzZXQ7CisgICAgRlRfQnl0ZSogICAgICAgICAgIGN1cnNvcjsKKworICB9IFBGUl9QaHlGb250UmVjLCAqUEZSX1BoeUZvbnQ7CisKKworICB0eXBlZGVmIGVudW0gIFBGUl9QaHlGbGFnc18KKyAgeworICAgIFBGUl9QSFlfRVhUUkFfSVRFTVMgICAgICA9IDB4ODAsCisgICAgUEZSX1BIWV8zQllURV9HUFNfT0ZGU0VUID0gMHgyMCwKKyAgICBQRlJfUEhZXzJCWVRFX0dQU19TSVpFICAgPSAweDEwLAorICAgIFBGUl9QSFlfQVNDSUlfQ09ERSAgICAgICA9IDB4MDgsCisgICAgUEZSX1BIWV9QUk9QT1JUSU9OQUwgICAgID0gMHgwNCwKKyAgICBQRlJfUEhZXzJCWVRFX0NIQVJDT0RFICAgPSAweDAyLAorICAgIFBGUl9QSFlfVkVSVElDQUwgICAgICAgICA9IDB4MDEKKworICB9IFBGUl9QaHlGbGFnczsKKworCisgIHR5cGVkZWYgZW51bSBQRlJfS2VybkZsYWdzXworICB7CisgICAgUEZSX0tFUk5fMkJZVEVfQ0hBUiAgPSAweDAxLAorICAgIFBGUl9LRVJOXzJCWVRFX0FESiAgID0gMHgwMgorCisgIH0gUEZSX0tlcm5GbGFnczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBlbnVtICBQRlJfR2x5cGhGbGFnc18KKyAgeworICAgIFBGUl9HTFlQSF9JU19DT01QT1VORCAgID0gMHg4MCwKKyAgICBQRlJfR0xZUEhfRVhUUkFfSVRFTVMgICA9IDB4MDgsCisgICAgUEZSX0dMWVBIXzFCWVRFX1hZQ09VTlQgPSAweDA0LAorICAgIFBGUl9HTFlQSF9YQ09VTlQgICAgICAgID0gMHgwMiwKKyAgICBQRlJfR0xZUEhfWUNPVU5UICAgICAgICA9IDB4MDEKKworICB9IFBGUl9HbHlwaEZsYWdzOworCisKKyAgLyogY29udHJvbGxlZCBjb29yZGluYXRlICovCisgIHR5cGVkZWYgc3RydWN0ICBQRlJfQ29vcmRSZWNfCisgIHsKKyAgICBGVF9VSW50ICBvcmc7CisgICAgRlRfVUludCAgY3VyOworCisgIH0gUEZSX0Nvb3JkUmVjLCAqUEZSX0Nvb3JkOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9TdWJHbHlwaFJlY18KKyAgeworICAgIEZUX0ZpeGVkICAgeF9zY2FsZTsKKyAgICBGVF9GaXhlZCAgIHlfc2NhbGU7CisgICAgRlRfSW50ICAgICB4X2RlbHRhOworICAgIEZUX0ludCAgICAgeV9kZWx0YTsKKyAgICBGVF9VSW50MzIgIGdwc19vZmZzZXQ7CisgICAgRlRfVUludCAgICBncHNfc2l6ZTsKKworICB9IFBGUl9TdWJHbHlwaFJlYywgKlBGUl9TdWJHbHlwaDsKKworCisgIHR5cGVkZWYgZW51bSAgUEZSX1N1YmdHbHlwaEZsYWdzXworICB7CisgICAgUEZSX1NVQkdMWVBIXzNCWVRFX09GRlNFVCA9IDB4ODAsCisgICAgUEZSX1NVQkdMWVBIXzJCWVRFX1NJWkUgICA9IDB4NDAsCisgICAgUEZSX1NVQkdMWVBIX1lTQ0FMRSAgICAgICA9IDB4MjAsCisgICAgUEZSX1NVQkdMWVBIX1hTQ0FMRSAgICAgICA9IDB4MTAKKworICB9IFBGUl9TdWJHbHlwaEZsYWdzOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBGUl9HbHlwaFJlY18KKyAgeworICAgIEZUX0J5dGUgICAgICAgICAgIGZvcm1hdDsKKworI2lmIDAKKyAgICBGVF9VSW50ICAgICAgICAgICBudW1feF9jb250cm9sOworICAgIEZUX1VJbnQgICAgICAgICAgIG51bV95X2NvbnRyb2w7CisjZW5kaWYKKyAgICBGVF9VSW50ICAgICAgICAgICBtYXhfeHlfY29udHJvbDsKKyAgICBGVF9Qb3MqICAgICAgICAgICB4X2NvbnRyb2w7CisgICAgRlRfUG9zKiAgICAgICAgICAgeV9jb250cm9sOworCisKKyAgICBGVF9VSW50ICAgICAgICAgICBudW1fc3ViczsKKyAgICBGVF9VSW50ICAgICAgICAgICBtYXhfc3ViczsKKyAgICBQRlJfU3ViR2x5cGhSZWMqICBzdWJzOworCisgICAgRlRfR2x5cGhMb2FkZXIgICAgbG9hZGVyOworICAgIEZUX0Jvb2wgICAgICAgICAgIHBhdGhfYmVndW47CisKKyAgfSBQRlJfR2x5cGhSZWMsICpQRlJfR2x5cGg7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QRlJUWVBFU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wZnIvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NTQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcGZyL3J1bGVzLm1rCkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgRnJlZVR5cGUgMiBQRlIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAyMDAyLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgcGZyIGRyaXZlciBkaXJlY3RvcnkKKyMKK1BGUl9ESVIgOj0gJChTUkNfRElSKS9wZnIKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitQRlJfQ09NUElMRSA6PSAkKENDKSAkKEFOU0lGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoUEZSX0RJUikpIFwKKyAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkKEZUX0NGTEFHUykKKworCisjIHBmciBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK1BGUl9EUlZfU1JDIDo9ICQoUEZSX0RJUikvcGZybG9hZC5jICBcCisgICAgICAgICAgICAgICAkKFBGUl9ESVIpL3Bmcmdsb2FkLmMgXAorICAgICAgICAgICAgICAgJChQRlJfRElSKS9wZnJjbWFwLmMgIFwKKyAgICAgICAgICAgICAgICQoUEZSX0RJUikvcGZyZHJpdnIuYyBcCisgICAgICAgICAgICAgICAkKFBGUl9ESVIpL3BmcnNiaXQuYyAgXAorICAgICAgICAgICAgICAgJChQRlJfRElSKS9wZnJvYmpzLmMKKworIyBwZnIgZHJpdmVyIGhlYWRlcnMKKyMKK1BGUl9EUlZfSCA6PSAkKFBGUl9EUlZfU1JDOiUuYz0lLmgpIFwKKyAgICAgICAgICAgICAkKFBGUl9ESVIpL3BmcmVycm9yLmggIFwKKyAgICAgICAgICAgICAkKFBGUl9ESVIpL3BmcnR5cGVzLmgKKworCisjIFBmciBkcml2ZXIgb2JqZWN0KHMpCisjCisjICAgUEZSX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcworIyAgIFBGUl9EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzCisjCitQRlJfRFJWX09CSl9NIDo9ICQoUEZSX0RSVl9TUkM6JChQRlJfRElSKS8lLmM9JChPQkpfRElSKS8lLiRPKQorUEZSX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL3Bmci4kTworCisjIHBmciBkcml2ZXIgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworUEZSX0RSVl9TUkNfUyA6PSAkKFBGUl9ESVIpL3Bmci5jCisKKworIyBwZnIgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChQRlJfRFJWX09CSl9TKTogJChQRlJfRFJWX1NSQ19TKSAkKFBGUl9EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoUEZSX0RSVl9IKQorCSQoUEZSX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKFBGUl9EUlZfU1JDX1MpKQorCisKKyMgcGZyIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChQRlJfRElSKS8lLmMgJChGUkVFVFlQRV9IKSAkKFBGUl9EUlZfSCkKKwkkKFBGUl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoUEZSX0RSVl9PQkpfUykKK0RSVl9PQkpTX00gKz0gJChQRlJfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjMmU2YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvSmFtZmlsZQpAQCAtMCwwICsxLDMxIEBACisjIEZyZWVUeXBlIDIgc3JjL3BzYXV4IEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSBwc2F1eCA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gcHNhdXhtb2QgcHNvYmpzICAgdDFkZWNvZGUgdDFjbWFwCisgICAgICAgICAgICAgICBwc2NvbnYgICBhZm1wYXJzZQorICAgICAgICAgICAgICAgOworICB9CisgIGVsc2UKKyAgeworICAgIF9zb3VyY2VzID0gcHNhdXggOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIGVuZCBvZiBzcmMvcHNhdXggSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9hZm1wYXJzZS5jIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9hZm1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDQ0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L2FmbXBhcnNlLmMKQEAgLTAsMCArMSw5NzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbXBhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBRk0gcGFyc2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCisjaW5jbHVkZSAiYWZtcGFyc2UuaCIKKyNpbmNsdWRlICJwc2NvbnYuaCIKKworI2luY2x1ZGUgInBzYXV4ZXJyLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBRk1fU3RyZWFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSB1c2Ugb2YgQUZNX1N0cmVhbSBpcyBsYXJnZWx5IGluc3BpcmVkIGJ5IHBhcnNlQUZNLltjaF0gZnJvbSB0MWxpYi4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBlbnVtCisgIHsKKyAgICBBRk1fU1RSRUFNX1NUQVRVU19OT1JNQUwsCisgICAgQUZNX1NUUkVBTV9TVEFUVVNfRU9DLAorICAgIEFGTV9TVFJFQU1fU1RBVFVTX0VPTCwKKyAgICBBRk1fU1RSRUFNX1NUQVRVU19FT0YKKyAgfTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBBRk1fU3RyZWFtUmVjXworICB7CisgICAgRlRfQnl0ZSogIGN1cnNvcjsKKyAgICBGVF9CeXRlKiAgYmFzZTsKKyAgICBGVF9CeXRlKiAgbGltaXQ7CisKKyAgICBGVF9JbnQgICAgc3RhdHVzOworCisgIH0gQUZNX1N0cmVhbVJlYzsKKworCisjaWZuZGVmIEVPRgorI2RlZmluZSBFT0YgLTEKKyNlbmRpZgorCisKKyAgLyogdGhpcyB3b3JrcyBiZWNhdXNlIGVtcHR5IGxpbmVzIGFyZSBpZ25vcmVkICovCisjZGVmaW5lIEFGTV9JU19ORVdMSU5FKCBjaCApICAoIChjaCkgPT0gJ1xyJyB8fCAoY2gpID09ICdcbicgKQorCisjZGVmaW5lIEFGTV9JU19FT0YoIGNoICkgICAgICAoIChjaCkgPT0gRU9GICB8fCAoY2gpID09ICdceDFhJyApCisjZGVmaW5lIEFGTV9JU19TUEFDRSggY2ggKSAgICAoIChjaCkgPT0gJyAnICB8fCAoY2gpID09ICdcdCcgKQorCisgIC8qIGNvbHVtbiBzZXBhcmF0b3I7IHRoZXJlIGlzIG5vIGBjb2x1bW4nIGluIHRoZSBzcGVjIGFjdHVhbGx5ICovCisjZGVmaW5lIEFGTV9JU19TRVAoIGNoICkgICAgICAoIChjaCkgPT0gJzsnICkKKworI2RlZmluZSBBRk1fR0VUQygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoICggKHN0cmVhbSktPmN1cnNvciA8IChzdHJlYW0pLT5saW1pdCApID8gKihzdHJlYW0pLT5jdXJzb3IrKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEVPRiApCisKKyNkZWZpbmUgQUZNX1NUUkVBTV9LRVlfQkVHSU4oIHN0cmVhbSApICAgIFwKKyAgICAgICAgICAoY2hhciopKCAoc3RyZWFtKS0+Y3Vyc29yIC0gMSApCisKKyNkZWZpbmUgQUZNX1NUUkVBTV9LRVlfTEVOKCBzdHJlYW0sIGtleSApICAgICAgICAgICBcCisgICAgICAgICAgKEZUX09mZnNldCkoIChjaGFyKikoc3RyZWFtKS0+Y3Vyc29yIC0ga2V5IC0gMSApCisKKyNkZWZpbmUgQUZNX1NUQVRVU19FT0MoIHN0cmVhbSApIFwKKyAgICAgICAgICAoIChzdHJlYW0pLT5zdGF0dXMgPj0gQUZNX1NUUkVBTV9TVEFUVVNfRU9DICkKKworI2RlZmluZSBBRk1fU1RBVFVTX0VPTCggc3RyZWFtICkgXAorICAgICAgICAgICggKHN0cmVhbSktPnN0YXR1cyA+PSBBRk1fU1RSRUFNX1NUQVRVU19FT0wgKQorCisjZGVmaW5lIEFGTV9TVEFUVVNfRU9GKCBzdHJlYW0gKSBcCisgICAgICAgICAgKCAoc3RyZWFtKS0+c3RhdHVzID49IEFGTV9TVFJFQU1fU1RBVFVTX0VPRiApCisKKworICBzdGF0aWMgaW50CisgIGFmbV9zdHJlYW1fc2tpcF9zcGFjZXMoIEFGTV9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBpbnQgIGNoID0gMDsgIC8qIG1ha2Ugc3R1cGlkIGNvbXBpbGVyIGhhcHB5ICovCisKKworICAgIGlmICggQUZNX1NUQVRVU19FT0MoIHN0cmVhbSApICkKKyAgICAgIHJldHVybiAnOyc7CisKKyAgICB3aGlsZSAoIDEgKQorICAgIHsKKyAgICAgIGNoID0gQUZNX0dFVEMoKTsKKyAgICAgIGlmICggIUFGTV9JU19TUEFDRSggY2ggKSApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICggQUZNX0lTX05FV0xJTkUoIGNoICkgKQorICAgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0w7CisgICAgZWxzZSBpZiAoIEFGTV9JU19TRVAoIGNoICkgKQorICAgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0M7CisgICAgZWxzZSBpZiAoIEFGTV9JU19FT0YoIGNoICkgKQorICAgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0Y7CisKKyAgICByZXR1cm4gY2g7CisgIH0KKworCisgIC8qIHJlYWQgYSBrZXkgb3IgdmFsdWUgaW4gY3VycmVudCBjb2x1bW4gKi8KKyAgc3RhdGljIGNoYXIqCisgIGFmbV9zdHJlYW1fcmVhZF9vbmUoIEFGTV9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBjaGFyKiAgc3RyOworCisKKyAgICBhZm1fc3RyZWFtX3NraXBfc3BhY2VzKCBzdHJlYW0gKTsKKyAgICBpZiAoIEFGTV9TVEFUVVNfRU9DKCBzdHJlYW0gKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0ciA9IEFGTV9TVFJFQU1fS0VZX0JFR0lOKCBzdHJlYW0gKTsKKworICAgIHdoaWxlICggMSApCisgICAgeworICAgICAgaW50ICBjaCA9IEFGTV9HRVRDKCk7CisKKworICAgICAgaWYgKCBBRk1fSVNfU1BBQ0UoIGNoICkgKQorICAgICAgICBicmVhazsKKyAgICAgIGVsc2UgaWYgKCBBRk1fSVNfTkVXTElORSggY2ggKSApCisgICAgICB7CisgICAgICAgIHN0cmVhbS0+c3RhdHVzID0gQUZNX1NUUkVBTV9TVEFUVVNfRU9MOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBBRk1fSVNfU0VQKCBjaCApICkKKyAgICAgIHsKKyAgICAgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0M7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIEFGTV9JU19FT0YoIGNoICkgKQorICAgICAgeworICAgICAgICBzdHJlYW0tPnN0YXR1cyA9IEFGTV9TVFJFQU1fU1RBVFVTX0VPRjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cjsKKyAgfQorCisKKyAgLyogcmVhZCBhIHN0cmluZyAoaS5lLiwgcmVhZCB0byBFT0wpICovCisgIHN0YXRpYyBjaGFyKgorICBhZm1fc3RyZWFtX3JlYWRfc3RyaW5nKCBBRk1fU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgY2hhciogIHN0cjsKKworCisgICAgYWZtX3N0cmVhbV9za2lwX3NwYWNlcyggc3RyZWFtICk7CisgICAgaWYgKCBBRk1fU1RBVFVTX0VPTCggc3RyZWFtICkgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdHIgPSBBRk1fU1RSRUFNX0tFWV9CRUdJTiggc3RyZWFtICk7CisKKyAgICAvKiBzY2FuIHRvIGVvbCAqLworICAgIHdoaWxlICggMSApCisgICAgeworICAgICAgaW50ICBjaCA9IEFGTV9HRVRDKCk7CisKKworICAgICAgaWYgKCBBRk1fSVNfTkVXTElORSggY2ggKSApCisgICAgICB7CisgICAgICAgIHN0cmVhbS0+c3RhdHVzID0gQUZNX1NUUkVBTV9TVEFUVVNfRU9MOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBBRk1fSVNfRU9GKCBjaCApICkKKyAgICAgIHsKKyAgICAgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0Y7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdHI7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQUZNX1BhcnNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBhbGwga2V5cyBkZWZpbmVkIGluIENoLiA3LTEwIG9mIDUwMDQuQUZNX1NwZWMucGRmICovCisgIHR5cGVkZWYgZW51bSAgQUZNX1Rva2VuXworICB7CisgICAgQUZNX1RPS0VOX0FTQ0VOREVSLAorICAgIEFGTV9UT0tFTl9BWElTTEFCRUwsCisgICAgQUZNX1RPS0VOX0FYSVNUWVBFLAorICAgIEFGTV9UT0tFTl9CLAorICAgIEFGTV9UT0tFTl9CTEVOREFYSVNUWVBFUywKKyAgICBBRk1fVE9LRU5fQkxFTkRERVNJR05NQVAsCisgICAgQUZNX1RPS0VOX0JMRU5EREVTSUdOUE9TSVRJT05TLAorICAgIEFGTV9UT0tFTl9DLAorICAgIEFGTV9UT0tFTl9DQywKKyAgICBBRk1fVE9LRU5fQ0gsCisgICAgQUZNX1RPS0VOX0NBUEhFSUdIVCwKKyAgICBBRk1fVE9LRU5fQ0hBUldJRFRILAorICAgIEFGTV9UT0tFTl9DSEFSQUNURVJTRVQsCisgICAgQUZNX1RPS0VOX0NIQVJBQ1RFUlMsCisgICAgQUZNX1RPS0VOX0RFU0NFTkRFUiwKKyAgICBBRk1fVE9LRU5fRU5DT0RJTkdTQ0hFTUUsCisgICAgQUZNX1RPS0VOX0VOREFYSVMsCisgICAgQUZNX1RPS0VOX0VORENIQVJNRVRSSUNTLAorICAgIEFGTV9UT0tFTl9FTkRDT01QT1NJVEVTLAorICAgIEFGTV9UT0tFTl9FTkRESVJFQ1RJT04sCisgICAgQUZNX1RPS0VOX0VOREZPTlRNRVRSSUNTLAorICAgIEFGTV9UT0tFTl9FTkRLRVJOREFUQSwKKyAgICBBRk1fVE9LRU5fRU5ES0VSTlBBSVJTLAorICAgIEFGTV9UT0tFTl9FTkRUUkFDS0tFUk4sCisgICAgQUZNX1RPS0VOX0VTQ0NIQVIsCisgICAgQUZNX1RPS0VOX0ZBTUlMWU5BTUUsCisgICAgQUZNX1RPS0VOX0ZPTlRCQk9YLAorICAgIEFGTV9UT0tFTl9GT05UTkFNRSwKKyAgICBBRk1fVE9LRU5fRlVMTE5BTUUsCisgICAgQUZNX1RPS0VOX0lTQkFTRUZPTlQsCisgICAgQUZNX1RPS0VOX0lTQ0lERk9OVCwKKyAgICBBRk1fVE9LRU5fSVNGSVhFRFBJVENILAorICAgIEFGTV9UT0tFTl9JU0ZJWEVEViwKKyAgICBBRk1fVE9LRU5fSVRBTElDQU5HTEUsCisgICAgQUZNX1RPS0VOX0tQLAorICAgIEFGTV9UT0tFTl9LUEgsCisgICAgQUZNX1RPS0VOX0tQWCwKKyAgICBBRk1fVE9LRU5fS1BZLAorICAgIEFGTV9UT0tFTl9MLAorICAgIEFGTV9UT0tFTl9NQVBQSU5HU0NIRU1FLAorICAgIEFGTV9UT0tFTl9NRVRSSUNTU0VUUywKKyAgICBBRk1fVE9LRU5fTiwKKyAgICBBRk1fVE9LRU5fTk9USUNFLAorICAgIEFGTV9UT0tFTl9QQ0MsCisgICAgQUZNX1RPS0VOX1NUQVJUQVhJUywKKyAgICBBRk1fVE9LRU5fU1RBUlRDSEFSTUVUUklDUywKKyAgICBBRk1fVE9LRU5fU1RBUlRDT01QT1NJVEVTLAorICAgIEFGTV9UT0tFTl9TVEFSVERJUkVDVElPTiwKKyAgICBBRk1fVE9LRU5fU1RBUlRGT05UTUVUUklDUywKKyAgICBBRk1fVE9LRU5fU1RBUlRLRVJOREFUQSwKKyAgICBBRk1fVE9LRU5fU1RBUlRLRVJOUEFJUlMsCisgICAgQUZNX1RPS0VOX1NUQVJUS0VSTlBBSVJTMCwKKyAgICBBRk1fVE9LRU5fU1RBUlRLRVJOUEFJUlMxLAorICAgIEFGTV9UT0tFTl9TVEFSVFRSQUNLS0VSTiwKKyAgICBBRk1fVE9LRU5fU1RESFcsCisgICAgQUZNX1RPS0VOX1NURFZXLAorICAgIEFGTV9UT0tFTl9UUkFDS0tFUk4sCisgICAgQUZNX1RPS0VOX1VOREVSTElORVBPU0lUSU9OLAorICAgIEFGTV9UT0tFTl9VTkRFUkxJTkVUSElDS05FU1MsCisgICAgQUZNX1RPS0VOX1ZWLAorICAgIEFGTV9UT0tFTl9WVkVDVE9SLAorICAgIEFGTV9UT0tFTl9WRVJTSU9OLAorICAgIEFGTV9UT0tFTl9XLAorICAgIEFGTV9UT0tFTl9XMCwKKyAgICBBRk1fVE9LRU5fVzBYLAorICAgIEFGTV9UT0tFTl9XMFksCisgICAgQUZNX1RPS0VOX1cxLAorICAgIEFGTV9UT0tFTl9XMVgsCisgICAgQUZNX1RPS0VOX1cxWSwKKyAgICBBRk1fVE9LRU5fV1gsCisgICAgQUZNX1RPS0VOX1dZLAorICAgIEFGTV9UT0tFTl9XRUlHSFQsCisgICAgQUZNX1RPS0VOX1dFSUdIVFZFQ1RPUiwKKyAgICBBRk1fVE9LRU5fWEhFSUdIVCwKKyAgICBOX0FGTV9UT0tFTlMsCisgICAgQUZNX1RPS0VOX1VOS05PV04KKworICB9IEFGTV9Ub2tlbjsKKworCisgIHN0YXRpYyBjb25zdCBjaGFyKiAgY29uc3QgYWZtX2tleV90YWJsZVtOX0FGTV9UT0tFTlNdID0KKyAgeworICAgICJBc2NlbmRlciIsCisgICAgIkF4aXNMYWJlbCIsCisgICAgIkF4aXNUeXBlIiwKKyAgICAiQiIsCisgICAgIkJsZW5kQXhpc1R5cGVzIiwKKyAgICAiQmxlbmREZXNpZ25NYXAiLAorICAgICJCbGVuZERlc2lnblBvc2l0aW9ucyIsCisgICAgIkMiLAorICAgICJDQyIsCisgICAgIkNIIiwKKyAgICAiQ2FwSGVpZ2h0IiwKKyAgICAiQ2hhcldpZHRoIiwKKyAgICAiQ2hhcmFjdGVyU2V0IiwKKyAgICAiQ2hhcmFjdGVycyIsCisgICAgIkRlc2NlbmRlciIsCisgICAgIkVuY29kaW5nU2NoZW1lIiwKKyAgICAiRW5kQXhpcyIsCisgICAgIkVuZENoYXJNZXRyaWNzIiwKKyAgICAiRW5kQ29tcG9zaXRlcyIsCisgICAgIkVuZERpcmVjdGlvbiIsCisgICAgIkVuZEZvbnRNZXRyaWNzIiwKKyAgICAiRW5kS2VybkRhdGEiLAorICAgICJFbmRLZXJuUGFpcnMiLAorICAgICJFbmRUcmFja0tlcm4iLAorICAgICJFc2NDaGFyIiwKKyAgICAiRmFtaWx5TmFtZSIsCisgICAgIkZvbnRCQm94IiwKKyAgICAiRm9udE5hbWUiLAorICAgICJGdWxsTmFtZSIsCisgICAgIklzQmFzZUZvbnQiLAorICAgICJJc0NJREZvbnQiLAorICAgICJJc0ZpeGVkUGl0Y2giLAorICAgICJJc0ZpeGVkViIsCisgICAgIkl0YWxpY0FuZ2xlIiwKKyAgICAiS1AiLAorICAgICJLUEgiLAorICAgICJLUFgiLAorICAgICJLUFkiLAorICAgICJMIiwKKyAgICAiTWFwcGluZ1NjaGVtZSIsCisgICAgIk1ldHJpY3NTZXRzIiwKKyAgICAiTiIsCisgICAgIk5vdGljZSIsCisgICAgIlBDQyIsCisgICAgIlN0YXJ0QXhpcyIsCisgICAgIlN0YXJ0Q2hhck1ldHJpY3MiLAorICAgICJTdGFydENvbXBvc2l0ZXMiLAorICAgICJTdGFydERpcmVjdGlvbiIsCisgICAgIlN0YXJ0Rm9udE1ldHJpY3MiLAorICAgICJTdGFydEtlcm5EYXRhIiwKKyAgICAiU3RhcnRLZXJuUGFpcnMiLAorICAgICJTdGFydEtlcm5QYWlyczAiLAorICAgICJTdGFydEtlcm5QYWlyczEiLAorICAgICJTdGFydFRyYWNrS2VybiIsCisgICAgIlN0ZEhXIiwKKyAgICAiU3RkVlciLAorICAgICJUcmFja0tlcm4iLAorICAgICJVbmRlcmxpbmVQb3NpdGlvbiIsCisgICAgIlVuZGVybGluZVRoaWNrbmVzcyIsCisgICAgIlZWIiwKKyAgICAiVlZlY3RvciIsCisgICAgIlZlcnNpb24iLAorICAgICJXIiwKKyAgICAiVzAiLAorICAgICJXMFgiLAorICAgICJXMFkiLAorICAgICJXMSIsCisgICAgIlcxWCIsCisgICAgIlcxWSIsCisgICAgIldYIiwKKyAgICAiV1kiLAorICAgICJXZWlnaHQiLAorICAgICJXZWlnaHRWZWN0b3IiLAorICAgICJYSGVpZ2h0IgorICB9OworCisKKyAgLyoKKyAgICogYGFmbV9wYXJzZXJfcmVhZF92YWxzJyBhbmQgYGFmbV9wYXJzZXJfbmV4dF9rZXknIHByb3ZpZGUKKyAgICogaGlnaC1sZXZlbCBvcGVyYXRpb25zIHRvIGFuIEFGTV9TdHJlYW0uICBUaGUgcmVzdCBvZiB0aGUKKyAgICogcGFyc2VyIGZ1bmN0aW9ucyBzaG91bGQgdXNlIHRoZW0gd2l0aG91dCBhY2Nlc3NpbmcgdGhlCisgICAqIEFGTV9TdHJlYW0gZGlyZWN0bHkuCisgICAqLworCisgIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKKyAgYWZtX3BhcnNlcl9yZWFkX3ZhbHMoIEFGTV9QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFGTV9WYWx1ZSAgIHZhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBuICkKKyAgeworICAgIEFGTV9TdHJlYW0gIHN0cmVhbSA9IHBhcnNlci0+c3RyZWFtOworICAgIGNoYXIqICAgICAgIHN0cjsKKyAgICBGVF9JbnQgICAgICBpOworCisKKyAgICBpZiAoIG4gPiBBRk1fTUFYX0FSR1VNRU5UUyApCisgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgaSsrICkKKyAgICB7CisgICAgICBGVF9PZmZzZXQgIGxlbjsKKyAgICAgIEFGTV9WYWx1ZSAgdmFsID0gdmFscyArIGk7CisKKworICAgICAgaWYgKCB2YWwtPnR5cGUgPT0gQUZNX1ZBTFVFX1RZUEVfU1RSSU5HICkKKyAgICAgICAgc3RyID0gYWZtX3N0cmVhbV9yZWFkX3N0cmluZyggc3RyZWFtICk7CisgICAgICBlbHNlCisgICAgICAgIHN0ciA9IGFmbV9zdHJlYW1fcmVhZF9vbmUoIHN0cmVhbSApOworCisgICAgICBpZiAoICFzdHIgKQorICAgICAgICBicmVhazsKKworICAgICAgbGVuID0gQUZNX1NUUkVBTV9LRVlfTEVOKCBzdHJlYW0sIHN0ciApOworCisgICAgICBzd2l0Y2ggKCB2YWwtPnR5cGUgKQorICAgICAgeworICAgICAgY2FzZSBBRk1fVkFMVUVfVFlQRV9TVFJJTkc6CisgICAgICBjYXNlIEFGTV9WQUxVRV9UWVBFX05BTUU6CisgICAgICAgIHsKKyAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+bWVtb3J5OworICAgICAgICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgICAgICAgIGlmICggIUZUX1FBTExPQyggdmFsLT51LnMsIGxlbiArIDEgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgZnRfbWVtY3B5KCB2YWwtPnUucywgc3RyLCBsZW4gKTsKKyAgICAgICAgICAgIHZhbC0+dS5zW2xlbl0gPSAnXDAnOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVkFMVUVfVFlQRV9GSVhFRDoKKyAgICAgICAgdmFsLT51LmYgPSBQU19Db252X1RvRml4ZWQoIChGVF9CeXRlKiopKHZvaWQqKSZzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQnl0ZSopc3RyICsgbGVuLCAwICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9WQUxVRV9UWVBFX0lOVEVHRVI6CisgICAgICAgIHZhbC0+dS5pID0gUFNfQ29udl9Ub0ludCggKEZUX0J5dGUqKikodm9pZCopJnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQnl0ZSopc3RyICsgbGVuICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9WQUxVRV9UWVBFX0JPT0w6CisgICAgICAgIHZhbC0+dS5iID0gRlRfQk9PTCggbGVuID09IDQgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZnRfc3RybmNtcCggc3RyLCAidHJ1ZSIsIDQgKSApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVkFMVUVfVFlQRV9JTkRFWDoKKyAgICAgICAgaWYgKCBwYXJzZXItPmdldF9pbmRleCApCisgICAgICAgICAgdmFsLT51LmkgPSBwYXJzZXItPmdldF9pbmRleCggc3RyLCBsZW4sIHBhcnNlci0+dXNlcl9kYXRhICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2YWwtPnUuaSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIGNoYXIqICkKKyAgYWZtX3BhcnNlcl9uZXh0X2tleSggQUZNX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQqICBsZW4gKQorICB7CisgICAgQUZNX1N0cmVhbSAgc3RyZWFtID0gcGFyc2VyLT5zdHJlYW07CisgICAgY2hhciogICAgICAga2V5ICAgID0gTlVMTDsgIC8qIG1ha2Ugc3R1cGlkIGNvbXBpbGVyIGhhcHB5ICovCisKKworICAgIGlmICggbGluZSApCisgICAgeworICAgICAgd2hpbGUgKCAxICkKKyAgICAgIHsKKyAgICAgICAgLyogc2tpcCBjdXJyZW50IGxpbmUgKi8KKyAgICAgICAgaWYgKCAhQUZNX1NUQVRVU19FT0woIHN0cmVhbSApICkKKyAgICAgICAgICBhZm1fc3RyZWFtX3JlYWRfc3RyaW5nKCBzdHJlYW0gKTsKKworICAgICAgICBzdHJlYW0tPnN0YXR1cyA9IEFGTV9TVFJFQU1fU1RBVFVTX05PUk1BTDsKKyAgICAgICAga2V5ID0gYWZtX3N0cmVhbV9yZWFkX29uZSggc3RyZWFtICk7CisKKyAgICAgICAgLyogc2tpcCBlbXB0eSBsaW5lICovCisgICAgICAgIGlmICggIWtleSAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICFBRk1fU1RBVFVTX0VPRiggc3RyZWFtICkgJiYKKyAgICAgICAgICAgICBBRk1fU1RBVFVTX0VPTCggc3RyZWFtICkgICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHdoaWxlICggMSApCisgICAgICB7CisgICAgICAgIC8qIHNraXAgY3VycmVudCBjb2x1bW4gKi8KKyAgICAgICAgd2hpbGUgKCAhQUZNX1NUQVRVU19FT0MoIHN0cmVhbSApICkKKyAgICAgICAgICBhZm1fc3RyZWFtX3JlYWRfb25lKCBzdHJlYW0gKTsKKworICAgICAgICBzdHJlYW0tPnN0YXR1cyA9IEFGTV9TVFJFQU1fU1RBVFVTX05PUk1BTDsKKyAgICAgICAga2V5ID0gYWZtX3N0cmVhbV9yZWFkX29uZSggc3RyZWFtICk7CisKKyAgICAgICAgLyogc2tpcCBlbXB0eSBjb2x1bW4gKi8KKyAgICAgICAgaWYgKCAha2V5ICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgIUFGTV9TVEFUVVNfRU9GKCBzdHJlYW0gKSAmJgorICAgICAgICAgICAgIEFGTV9TVEFUVVNfRU9DKCBzdHJlYW0gKSAgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggbGVuICkKKyAgICAgICpsZW4gPSAoIGtleSApID8gKEZUX09mZnNldClBRk1fU1RSRUFNX0tFWV9MRU4oIHN0cmVhbSwga2V5ICkKKyAgICAgICAgICAgICAgICAgICAgIDogMDsKKworICAgIHJldHVybiBrZXk7CisgIH0KKworCisgIHN0YXRpYyBBRk1fVG9rZW4KKyAgYWZtX3Rva2VuaXplKCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgIEZUX09mZnNldCAgICBsZW4gKQorICB7CisgICAgaW50ICBuOworCisKKyAgICBmb3IgKCBuID0gMDsgbiA8IE5fQUZNX1RPS0VOUzsgbisrICkKKyAgICB7CisgICAgICBpZiAoICooIGFmbV9rZXlfdGFibGVbbl0gKSA9PSAqa2V5ICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggOyBuIDwgTl9BRk1fVE9LRU5TOyBuKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCAqKCBhZm1fa2V5X3RhYmxlW25dICkgIT0gKmtleSApCisgICAgICAgICAgICByZXR1cm4gQUZNX1RPS0VOX1VOS05PV047CisKKyAgICAgICAgICBpZiAoIGZ0X3N0cm5jbXAoIGFmbV9rZXlfdGFibGVbbl0sIGtleSwgbGVuICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4gKEFGTV9Ub2tlbikgbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBBRk1fVE9LRU5fVU5LTk9XTjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGFmbV9wYXJzZXJfaW5pdCggQUZNX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGxpbWl0ICkKKyAgeworICAgIEFGTV9TdHJlYW0gIHN0cmVhbSA9IE5VTEw7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKworICAgIGlmICggRlRfTkVXKCBzdHJlYW0gKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBzdHJlYW0tPmN1cnNvciA9IHN0cmVhbS0+YmFzZSA9IGJhc2U7CisgICAgc3RyZWFtLT5saW1pdCAgPSBsaW1pdDsKKworICAgIC8qIGRvbid0IHNraXAgdGhlIGZpcnN0IGxpbmUgZHVyaW5nIHRoZSBmaXJzdCBjYWxsICovCisgICAgc3RyZWFtLT5zdGF0dXMgPSBBRk1fU1RSRUFNX1NUQVRVU19FT0w7CisKKyAgICBwYXJzZXItPm1lbW9yeSAgICA9IG1lbW9yeTsKKyAgICBwYXJzZXItPnN0cmVhbSAgICA9IHN0cmVhbTsKKyAgICBwYXJzZXItPkZvbnRJbmZvICA9IE5VTEw7CisgICAgcGFyc2VyLT5nZXRfaW5kZXggPSBOVUxMOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBhZm1fcGFyc2VyX2RvbmUoIEFGTV9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCBwYXJzZXItPnN0cmVhbSApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZtX3BhcnNlcl9yZWFkX2ludCggQUZNX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQqICAgICBhaW50ICkKKyAgeworICAgIEFGTV9WYWx1ZVJlYyAgdmFsOworCisKKyAgICB2YWwudHlwZSA9IEFGTV9WQUxVRV9UWVBFX0lOVEVHRVI7CisKKyAgICBpZiAoIGFmbV9wYXJzZXJfcmVhZF92YWxzKCBwYXJzZXIsICZ2YWwsIDEgKSA9PSAxICkKKyAgICB7CisgICAgICAqYWludCA9IHZhbC51Lmk7CisKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiBGVF9USFJPVyggU3ludGF4X0Vycm9yICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZm1fcGFyc2VfdHJhY2tfa2VybiggQUZNX1BhcnNlciAgcGFyc2VyICkKKyAgeworICAgIEFGTV9Gb250SW5mbyAgIGZpID0gcGFyc2VyLT5Gb250SW5mbzsKKyAgICBBRk1fVHJhY2tLZXJuICB0azsKKyAgICBjaGFyKiAgICAgICAgICBrZXk7CisgICAgRlRfT2Zmc2V0ICAgICAgbGVuOworICAgIGludCAgICAgICAgICAgIG4gPSAtMTsKKyAgICBGVF9JbnQgICAgICAgICB0bXA7CisKKworICAgIGlmICggYWZtX3BhcnNlcl9yZWFkX2ludCggcGFyc2VyLCAmdG1wICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgZ290byBGYWlsOworCisgICAgZmktPk51bVRyYWNrS2VybiA9IChGVF9VSW50KXRtcDsKKworICAgIGlmICggZmktPk51bVRyYWNrS2VybiApCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBwYXJzZXItPm1lbW9yeTsKKyAgICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKworICAgICAgaWYgKCBGVF9RTkVXX0FSUkFZKCBmaS0+VHJhY2tLZXJucywgZmktPk51bVRyYWNrS2VybiApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIHdoaWxlICggKCBrZXkgPSBhZm1fcGFyc2VyX25leHRfa2V5KCBwYXJzZXIsIDEsICZsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgIEFGTV9WYWx1ZVJlYyAgc2hhcmVkX3ZhbHNbNV07CisKKworICAgICAgc3dpdGNoICggYWZtX3Rva2VuaXplKCBrZXksIGxlbiApICkKKyAgICAgIHsKKyAgICAgIGNhc2UgQUZNX1RPS0VOX1RSQUNLS0VSTjoKKyAgICAgICAgbisrOworCisgICAgICAgIGlmICggbiA+PSAoaW50KWZpLT5OdW1UcmFja0tlcm4gKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICB0ayA9IGZpLT5UcmFja0tlcm5zICsgbjsKKworICAgICAgICBzaGFyZWRfdmFsc1swXS50eXBlID0gQUZNX1ZBTFVFX1RZUEVfSU5URUdFUjsKKyAgICAgICAgc2hhcmVkX3ZhbHNbMV0udHlwZSA9IEFGTV9WQUxVRV9UWVBFX0ZJWEVEOworICAgICAgICBzaGFyZWRfdmFsc1syXS50eXBlID0gQUZNX1ZBTFVFX1RZUEVfRklYRUQ7CisgICAgICAgIHNoYXJlZF92YWxzWzNdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9GSVhFRDsKKyAgICAgICAgc2hhcmVkX3ZhbHNbNF0udHlwZSA9IEFGTV9WQUxVRV9UWVBFX0ZJWEVEOworICAgICAgICBpZiAoIGFmbV9wYXJzZXJfcmVhZF92YWxzKCBwYXJzZXIsIHNoYXJlZF92YWxzLCA1ICkgIT0gNSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIHRrLT5kZWdyZWUgICAgID0gc2hhcmVkX3ZhbHNbMF0udS5pOworICAgICAgICB0ay0+bWluX3B0c2l6ZSA9IHNoYXJlZF92YWxzWzFdLnUuZjsKKyAgICAgICAgdGstPm1pbl9rZXJuICAgPSBzaGFyZWRfdmFsc1syXS51LmY7CisgICAgICAgIHRrLT5tYXhfcHRzaXplID0gc2hhcmVkX3ZhbHNbM10udS5mOworICAgICAgICB0ay0+bWF4X2tlcm4gICA9IHNoYXJlZF92YWxzWzRdLnUuZjsKKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fRU5EVFJBQ0tLRVJOOgorICAgICAgY2FzZSBBRk1fVE9LRU5fRU5ES0VSTkRBVEE6CisgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRGT05UTUVUUklDUzoKKyAgICAgICAgZmktPk51bVRyYWNrS2VybiA9IChGVF9VSW50KSggbiArIDEgKTsKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgRmFpbDoKKyAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICB9CisKKworI3VuZGVmICBLRVJOX0lOREVYCisjZGVmaW5lIEtFUk5fSU5ERVgoIGcxLCBnMiApICAoICggKEZUX1VMb25nKWcxIDw8IDE2ICkgfCBnMiApCisKKworICAvKiBjb21wYXJlIHR3byBrZXJuaW5nIHBhaXJzICovCisgIEZUX0NBTExCQUNLX0RFRiggaW50ICkKKyAgYWZtX2NvbXBhcmVfa2Vybl9wYWlycyggY29uc3Qgdm9pZCogIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBiICkKKyAgeworICAgIEFGTV9LZXJuUGFpciAga3AxID0gKEFGTV9LZXJuUGFpcilhOworICAgIEFGTV9LZXJuUGFpciAga3AyID0gKEFGTV9LZXJuUGFpciliOworCisgICAgRlRfVUxvbmcgIGluZGV4MSA9IEtFUk5fSU5ERVgoIGtwMS0+aW5kZXgxLCBrcDEtPmluZGV4MiApOworICAgIEZUX1VMb25nICBpbmRleDIgPSBLRVJOX0lOREVYKCBrcDItPmluZGV4MSwga3AyLT5pbmRleDIgKTsKKworCisgICAgaWYgKCBpbmRleDEgPiBpbmRleDIgKQorICAgICAgcmV0dXJuIDE7CisgICAgZWxzZSBpZiAoIGluZGV4MSA8IGluZGV4MiApCisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBhZm1fcGFyc2Vfa2Vybl9wYWlycyggQUZNX1BhcnNlciAgcGFyc2VyICkKKyAgeworICAgIEFGTV9Gb250SW5mbyAgZmkgPSBwYXJzZXItPkZvbnRJbmZvOworICAgIEFGTV9LZXJuUGFpciAga3A7CisgICAgY2hhciogICAgICAgICBrZXk7CisgICAgRlRfT2Zmc2V0ICAgICBsZW47CisgICAgaW50ICAgICAgICAgICBuID0gLTE7CisgICAgRlRfSW50ICAgICAgICB0bXA7CisKKworICAgIGlmICggYWZtX3BhcnNlcl9yZWFkX2ludCggcGFyc2VyLCAmdG1wICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgaWYgKCB0bXAgPCAwICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGZpLT5OdW1LZXJuUGFpciA9IChGVF9VSW50KXRtcDsKKworICAgIGlmICggZmktPk51bUtlcm5QYWlyICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+bWVtb3J5OworICAgICAgRlRfRXJyb3IgICBlcnJvcjsKKworCisgICAgICBpZiAoIEZUX1FORVdfQVJSQVkoIGZpLT5LZXJuUGFpcnMsIGZpLT5OdW1LZXJuUGFpciApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIHdoaWxlICggKCBrZXkgPSBhZm1fcGFyc2VyX25leHRfa2V5KCBwYXJzZXIsIDEsICZsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgIEFGTV9Ub2tlbiAgdG9rZW4gPSBhZm1fdG9rZW5pemUoIGtleSwgbGVuICk7CisKKworICAgICAgc3dpdGNoICggdG9rZW4gKQorICAgICAgeworICAgICAgY2FzZSBBRk1fVE9LRU5fS1A6CisgICAgICBjYXNlIEFGTV9UT0tFTl9LUFg6CisgICAgICBjYXNlIEFGTV9UT0tFTl9LUFk6CisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgICAgICAgIHI7CisgICAgICAgICAgQUZNX1ZhbHVlUmVjICBzaGFyZWRfdmFsc1s0XTsKKworCisgICAgICAgICAgbisrOworCisgICAgICAgICAgaWYgKCBuID49IChpbnQpZmktPk51bUtlcm5QYWlyICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIGtwID0gZmktPktlcm5QYWlycyArIG47CisKKyAgICAgICAgICBzaGFyZWRfdmFsc1swXS50eXBlID0gQUZNX1ZBTFVFX1RZUEVfSU5ERVg7CisgICAgICAgICAgc2hhcmVkX3ZhbHNbMV0udHlwZSA9IEFGTV9WQUxVRV9UWVBFX0lOREVYOworICAgICAgICAgIHNoYXJlZF92YWxzWzJdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9JTlRFR0VSOworICAgICAgICAgIHNoYXJlZF92YWxzWzNdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9JTlRFR0VSOworICAgICAgICAgIHIgPSBhZm1fcGFyc2VyX3JlYWRfdmFscyggcGFyc2VyLCBzaGFyZWRfdmFscywgNCApOworICAgICAgICAgIGlmICggciA8IDMgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgLyogaW5kZXggdmFsdWVzIGNhbid0IGJlIG5lZ2F0aXZlICovCisgICAgICAgICAga3AtPmluZGV4MSA9IHNoYXJlZF92YWxzWzBdLnUudTsKKyAgICAgICAgICBrcC0+aW5kZXgyID0gc2hhcmVkX3ZhbHNbMV0udS51OworICAgICAgICAgIGlmICggdG9rZW4gPT0gQUZNX1RPS0VOX0tQWSApCisgICAgICAgICAgeworICAgICAgICAgICAga3AtPnggPSAwOworICAgICAgICAgICAga3AtPnkgPSBzaGFyZWRfdmFsc1syXS51Lmk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBrcC0+eCA9IHNoYXJlZF92YWxzWzJdLnUuaTsKKyAgICAgICAgICAgIGtwLT55ID0gKCB0b2tlbiA9PSBBRk1fVE9LRU5fS1AgJiYgciA9PSA0ICkKKyAgICAgICAgICAgICAgICAgICAgICA/IHNoYXJlZF92YWxzWzNdLnUuaSA6IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRLRVJOUEFJUlM6CisgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRLRVJOREFUQToKKyAgICAgIGNhc2UgQUZNX1RPS0VOX0VOREZPTlRNRVRSSUNTOgorICAgICAgICBmaS0+TnVtS2VyblBhaXIgPSAoRlRfVUludCkoIG4gKyAxICk7CisgICAgICAgIGZ0X3Fzb3J0KCBmaS0+S2VyblBhaXJzLCBmaS0+TnVtS2VyblBhaXIsCisgICAgICAgICAgICAgICAgICBzaXplb2YgKCBBRk1fS2VyblBhaXJSZWMgKSwKKyAgICAgICAgICAgICAgICAgIGFmbV9jb21wYXJlX2tlcm5fcGFpcnMgKTsKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgRmFpbDoKKyAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZtX3BhcnNlX2tlcm5fZGF0YSggQUZNX1BhcnNlciAgcGFyc2VyICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgY2hhciogICAgICBrZXk7CisgICAgRlRfT2Zmc2V0ICBsZW47CisKKworICAgIHdoaWxlICggKCBrZXkgPSBhZm1fcGFyc2VyX25leHRfa2V5KCBwYXJzZXIsIDEsICZsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoIGFmbV90b2tlbml6ZSgga2V5LCBsZW4gKSApCisgICAgICB7CisgICAgICBjYXNlIEFGTV9UT0tFTl9TVEFSVFRSQUNLS0VSTjoKKyAgICAgICAgZXJyb3IgPSBhZm1fcGFyc2VfdHJhY2tfa2VybiggcGFyc2VyICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQUZNX1RPS0VOX1NUQVJUS0VSTlBBSVJTOgorICAgICAgY2FzZSBBRk1fVE9LRU5fU1RBUlRLRVJOUEFJUlMwOgorICAgICAgICBlcnJvciA9IGFmbV9wYXJzZV9rZXJuX3BhaXJzKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fRU5ES0VSTkRBVEE6CisgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRGT05UTUVUUklDUzoKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgRmFpbDoKKyAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgYWZtX3BhcnNlcl9za2lwX3NlY3Rpb24oIEFGTV9QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBRk1fVG9rZW4gICBlbmRfc2VjdGlvbiApCisgIHsKKyAgICBjaGFyKiAgICAgIGtleTsKKyAgICBGVF9PZmZzZXQgIGxlbjsKKworCisgICAgd2hpbGUgKCBuLS0gPiAwICkKKyAgICB7CisgICAgICBrZXkgPSBhZm1fcGFyc2VyX25leHRfa2V5KCBwYXJzZXIsIDEsIE5VTEwgKTsKKyAgICAgIGlmICggIWtleSApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICB3aGlsZSAoICgga2V5ID0gYWZtX3BhcnNlcl9uZXh0X2tleSggcGFyc2VyLCAxLCAmbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICBBRk1fVG9rZW4gIHRva2VuID0gYWZtX3Rva2VuaXplKCBrZXksIGxlbiApOworCisKKyAgICAgIGlmICggdG9rZW4gPT0gZW5kX3NlY3Rpb24gfHwgdG9rZW4gPT0gQUZNX1RPS0VOX0VOREZPTlRNRVRSSUNTICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisKKyAgRmFpbDoKKyAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgYWZtX3BhcnNlcl9wYXJzZSggQUZNX1BhcnNlciAgcGFyc2VyICkKKyAgeworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gcGFyc2VyLT5tZW1vcnk7CisgICAgQUZNX0ZvbnRJbmZvICBmaSAgICAgPSBwYXJzZXItPkZvbnRJbmZvOworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgID0gRlRfRVJSKCBTeW50YXhfRXJyb3IgKTsKKyAgICBjaGFyKiAgICAgICAgIGtleTsKKyAgICBGVF9PZmZzZXQgICAgIGxlbjsKKyAgICBGVF9JbnQgICAgICAgIG1ldHJpY3Nfc2V0cyA9IDA7CisKKworICAgIGlmICggIWZpICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAga2V5ID0gYWZtX3BhcnNlcl9uZXh0X2tleSggcGFyc2VyLCAxLCAmbGVuICk7CisgICAgaWYgKCAha2V5IHx8IGxlbiAhPSAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBmdF9zdHJuY21wKCBrZXksICJTdGFydEZvbnRNZXRyaWNzIiwgMTYgKSAhPSAwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworCisgICAgd2hpbGUgKCAoIGtleSA9IGFmbV9wYXJzZXJfbmV4dF9rZXkoIHBhcnNlciwgMSwgJmxlbiApICkgIT0gMCApCisgICAgeworICAgICAgQUZNX1ZhbHVlUmVjICBzaGFyZWRfdmFsc1s0XTsKKworCisgICAgICBzd2l0Y2ggKCBhZm1fdG9rZW5pemUoIGtleSwgbGVuICkgKQorICAgICAgeworICAgICAgY2FzZSBBRk1fVE9LRU5fTUVUUklDU1NFVFM6CisgICAgICAgIGlmICggYWZtX3BhcnNlcl9yZWFkX2ludCggcGFyc2VyLCAmbWV0cmljc19zZXRzICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBpZiAoIG1ldHJpY3Nfc2V0cyAhPSAwICYmIG1ldHJpY3Nfc2V0cyAhPSAyICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworCisgICAgICAgICAgZ290byBGYWlsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9UT0tFTl9JU0NJREZPTlQ6CisgICAgICAgIHNoYXJlZF92YWxzWzBdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9CT09MOworICAgICAgICBpZiAoIGFmbV9wYXJzZXJfcmVhZF92YWxzKCBwYXJzZXIsIHNoYXJlZF92YWxzLCAxICkgIT0gMSApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGZpLT5Jc0NJREZvbnQgPSBzaGFyZWRfdmFsc1swXS51LmI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9UT0tFTl9GT05UQkJPWDoKKyAgICAgICAgc2hhcmVkX3ZhbHNbMF0udHlwZSA9IEFGTV9WQUxVRV9UWVBFX0ZJWEVEOworICAgICAgICBzaGFyZWRfdmFsc1sxXS50eXBlID0gQUZNX1ZBTFVFX1RZUEVfRklYRUQ7CisgICAgICAgIHNoYXJlZF92YWxzWzJdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9GSVhFRDsKKyAgICAgICAgc2hhcmVkX3ZhbHNbM10udHlwZSA9IEFGTV9WQUxVRV9UWVBFX0ZJWEVEOworICAgICAgICBpZiAoIGFmbV9wYXJzZXJfcmVhZF92YWxzKCBwYXJzZXIsIHNoYXJlZF92YWxzLCA0ICkgIT0gNCApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGZpLT5Gb250QkJveC54TWluID0gc2hhcmVkX3ZhbHNbMF0udS5mOworICAgICAgICBmaS0+Rm9udEJCb3gueU1pbiA9IHNoYXJlZF92YWxzWzFdLnUuZjsKKyAgICAgICAgZmktPkZvbnRCQm94LnhNYXggPSBzaGFyZWRfdmFsc1syXS51LmY7CisgICAgICAgIGZpLT5Gb250QkJveC55TWF4ID0gc2hhcmVkX3ZhbHNbM10udS5mOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fQVNDRU5ERVI6CisgICAgICAgIHNoYXJlZF92YWxzWzBdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9GSVhFRDsKKyAgICAgICAgaWYgKCBhZm1fcGFyc2VyX3JlYWRfdmFscyggcGFyc2VyLCBzaGFyZWRfdmFscywgMSApICE9IDEgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBmaS0+QXNjZW5kZXIgPSBzaGFyZWRfdmFsc1swXS51LmY7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEFGTV9UT0tFTl9ERVNDRU5ERVI6CisgICAgICAgIHNoYXJlZF92YWxzWzBdLnR5cGUgPSBBRk1fVkFMVUVfVFlQRV9GSVhFRDsKKyAgICAgICAgaWYgKCBhZm1fcGFyc2VyX3JlYWRfdmFscyggcGFyc2VyLCBzaGFyZWRfdmFscywgMSApICE9IDEgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBmaS0+RGVzY2VuZGVyID0gc2hhcmVkX3ZhbHNbMF0udS5mOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fU1RBUlRDSEFSTUVUUklDUzoKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgbiA9IDA7CisKKworICAgICAgICAgIGlmICggYWZtX3BhcnNlcl9yZWFkX2ludCggcGFyc2VyLCAmbiApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIGVycm9yID0gYWZtX3BhcnNlcl9za2lwX3NlY3Rpb24oIHBhcnNlciwgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRk1fVE9LRU5fRU5EQ0hBUk1FVFJJQ1MgKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBBRk1fVE9LRU5fU1RBUlRLRVJOREFUQToKKyAgICAgICAgZXJyb3IgPSBhZm1fcGFyc2Vfa2Vybl9kYXRhKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggc2luY2Ugd2Ugb25seSBzdXBwb3J0IGtlcm4gZGF0YSAqLworCisgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRGT05UTUVUUklDUzoKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgRlRfRlJFRSggZmktPlRyYWNrS2VybnMgKTsKKyAgICBmaS0+TnVtVHJhY2tLZXJuID0gMDsKKworICAgIEZUX0ZSRUUoIGZpLT5LZXJuUGFpcnMgKTsKKyAgICBmaS0+TnVtS2VyblBhaXIgPSAwOworCisgICAgZmktPklzQ0lERm9udCA9IDA7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvYWZtcGFyc2UuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvYWZtcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIyYzRlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9hZm1wYXJzZS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGFmbXBhcnNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBRk0gcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0FGTVBBUlNFX0hfXworI2RlZmluZSBfX0FGTVBBUlNFX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgYWZtX3BhcnNlcl9pbml0KCBBRk1fUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgbGltaXQgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgYWZtX3BhcnNlcl9kb25lKCBBRk1fUGFyc2VyICBwYXJzZXIgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGFmbV9wYXJzZXJfcGFyc2UoIEFGTV9QYXJzZXIgIHBhcnNlciApOworCisKKyAgZW51bSAgQUZNX1ZhbHVlVHlwZV8KKyAgeworICAgIEFGTV9WQUxVRV9UWVBFX1NUUklORywKKyAgICBBRk1fVkFMVUVfVFlQRV9OQU1FLAorICAgIEFGTV9WQUxVRV9UWVBFX0ZJWEVELCAgIC8qIHJlYWwgbnVtYmVyICovCisgICAgQUZNX1ZBTFVFX1RZUEVfSU5URUdFUiwKKyAgICBBRk1fVkFMVUVfVFlQRV9CT09MLAorICAgIEFGTV9WQUxVRV9UWVBFX0lOREVYICAgIC8qIGdseXBoIGluZGV4ICovCisgIH07CisKKworICB0eXBlZGVmIHN0cnVjdCAgQUZNX1ZhbHVlUmVjXworICB7CisgICAgZW51bSBBRk1fVmFsdWVUeXBlXyAgdHlwZTsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgIGNoYXIqICAgICBzOworICAgICAgRlRfRml4ZWQgIGY7CisgICAgICBGVF9JbnQgICAgaTsKKyAgICAgIEZUX1VJbnQgICB1OworICAgICAgRlRfQm9vbCAgIGI7CisKKyAgICB9IHU7CisKKyAgfSBBRk1fVmFsdWVSZWMsICpBRk1fVmFsdWU7CisKKyNkZWZpbmUgIEFGTV9NQVhfQVJHVU1FTlRTICA1CisKKyAgRlRfTE9DQUwoIEZUX0ludCApCisgIGFmbV9wYXJzZXJfcmVhZF92YWxzKCBBRk1fUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBBRk1fVmFsdWUgICB2YWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgbiApOworCisgIC8qIHJlYWQgdGhlIG5leHQga2V5IGZyb20gdGhlIG5leHQgbGluZSBvciBjb2x1bW4gKi8KKyAgRlRfTE9DQUwoIGNoYXIqICkKKyAgYWZtX3BhcnNlcl9uZXh0X2tleSggQUZNX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQqICBsZW4gKTsKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19BRk1QQVJTRV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5MGUxNAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgRnJlZVR5cGUgMiBQU2F1eCBtb2R1bGUgZGVmaW5pdGlvbgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBQU0FVWF9NT0RVTEUKKworZGVmaW5lIFBTQVVYX01PRFVMRQorJChPUEVOX0RSSVZFUikgRlRfTW9kdWxlX0NsYXNzLCBwc2F1eF9tb2R1bGVfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXBzYXV4ICAgICAkKEVDSE9fRFJJVkVSX0RFU0MpUG9zdHNjcmlwdCBUeXBlIDEgJiBUeXBlIDIgaGVscGVyIG1vZHVsZSQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3BzYXV4LmMgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3BzYXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YxZDlhYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNhdXguYwpAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2F1eC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJwc29ianMuYyIKKyNpbmNsdWRlICJwc2F1eG1vZC5jIgorI2luY2x1ZGUgInQxZGVjb2RlLmMiCisjaW5jbHVkZSAidDFjbWFwLmMiCisKKyNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKyNpbmNsdWRlICJhZm1wYXJzZS5jIgorI2VuZGlmCisKKyNpbmNsdWRlICJwc2NvbnYuYyIKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNhdXhlcnIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNhdXhlcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzcxMmYwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2F1eGVyci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzYXV4ZXJyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQUyBhdXhpbGlhcnkgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUFMgYXV4aWxpYXJ5IG1vZHVsZSBlcnJvciBlbnVtZXJhdGlvbiAqLworICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUFNBVVhFUlJfSF9fCisjZGVmaW5lIF9fUFNBVVhFUlJfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTYXV4X0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9QU2F1eAorCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisjZW5kaWYgLyogX19QU0FVWEVSUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNhdXhtb2QuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNhdXhtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmZjYWIwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2F1eG1vZC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2F1eG1vZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInBzYXV4bW9kLmgiCisjaW5jbHVkZSAicHNvYmpzLmgiCisjaW5jbHVkZSAidDFkZWNvZGUuaCIKKyNpbmNsdWRlICJ0MWNtYXAuaCIKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorI2luY2x1ZGUgImFmbXBhcnNlLmgiCisjZW5kaWYKKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorICBjb25zdCBQU19UYWJsZV9GdW5jc1JlYyAgcHNfdGFibGVfZnVuY3MgPQorICB7CisgICAgcHNfdGFibGVfbmV3LAorICAgIHBzX3RhYmxlX2RvbmUsCisgICAgcHNfdGFibGVfYWRkLAorICAgIHBzX3RhYmxlX3JlbGVhc2UKKyAgfTsKKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorICBjb25zdCBQU19QYXJzZXJfRnVuY3NSZWMgIHBzX3BhcnNlcl9mdW5jcyA9CisgIHsKKyAgICBwc19wYXJzZXJfaW5pdCwKKyAgICBwc19wYXJzZXJfZG9uZSwKKyAgICBwc19wYXJzZXJfc2tpcF9zcGFjZXMsCisgICAgcHNfcGFyc2VyX3NraXBfUFNfdG9rZW4sCisgICAgcHNfcGFyc2VyX3RvX2ludCwKKyAgICBwc19wYXJzZXJfdG9fZml4ZWQsCisgICAgcHNfcGFyc2VyX3RvX2J5dGVzLAorICAgIHBzX3BhcnNlcl90b19jb29yZF9hcnJheSwKKyAgICBwc19wYXJzZXJfdG9fZml4ZWRfYXJyYXksCisgICAgcHNfcGFyc2VyX3RvX3Rva2VuLAorICAgIHBzX3BhcnNlcl90b190b2tlbl9hcnJheSwKKyAgICBwc19wYXJzZXJfbG9hZF9maWVsZCwKKyAgICBwc19wYXJzZXJfbG9hZF9maWVsZF90YWJsZQorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IFQxX0J1aWxkZXJfRnVuY3NSZWMgIHQxX2J1aWxkZXJfZnVuY3MgPQorICB7CisgICAgdDFfYnVpbGRlcl9pbml0LAorICAgIHQxX2J1aWxkZXJfZG9uZSwKKyAgICB0MV9idWlsZGVyX2NoZWNrX3BvaW50cywKKyAgICB0MV9idWlsZGVyX2FkZF9wb2ludCwKKyAgICB0MV9idWlsZGVyX2FkZF9wb2ludDEsCisgICAgdDFfYnVpbGRlcl9hZGRfY29udG91ciwKKyAgICB0MV9idWlsZGVyX3N0YXJ0X3BvaW50LAorICAgIHQxX2J1aWxkZXJfY2xvc2VfY29udG91cgorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IFQxX0RlY29kZXJfRnVuY3NSZWMgIHQxX2RlY29kZXJfZnVuY3MgPQorICB7CisgICAgdDFfZGVjb2Rlcl9pbml0LAorICAgIHQxX2RlY29kZXJfZG9uZSwKKyAgICB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzCisgIH07CisKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKKyAgY29uc3QgQUZNX1BhcnNlcl9GdW5jc1JlYyAgYWZtX3BhcnNlcl9mdW5jcyA9CisgIHsKKyAgICBhZm1fcGFyc2VyX2luaXQsCisgICAgYWZtX3BhcnNlcl9kb25lLAorICAgIGFmbV9wYXJzZXJfcGFyc2UKKyAgfTsKKyNlbmRpZgorCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IFQxX0NNYXBfQ2xhc3Nlc1JlYyAgdDFfY21hcF9jbGFzc2VzID0KKyAgeworICAgICZ0MV9jbWFwX3N0YW5kYXJkX2NsYXNzX3JlYywKKyAgICAmdDFfY21hcF9leHBlcnRfY2xhc3NfcmVjLAorICAgICZ0MV9jbWFwX2N1c3RvbV9jbGFzc19yZWMsCisgICAgJnQxX2NtYXBfdW5pY29kZV9jbGFzc19yZWMKKyAgfTsKKworCisgIHN0YXRpYworICBjb25zdCBQU0F1eF9JbnRlcmZhY2UgIHBzYXV4X2ludGVyZmFjZSA9CisgIHsKKyAgICAmcHNfdGFibGVfZnVuY3MsCisgICAgJnBzX3BhcnNlcl9mdW5jcywKKyAgICAmdDFfYnVpbGRlcl9mdW5jcywKKyAgICAmdDFfZGVjb2Rlcl9mdW5jcywKKyAgICB0MV9kZWNyeXB0LAorCisgICAgKGNvbnN0IFQxX0NNYXBfQ2xhc3Nlc1JlYyopICZ0MV9jbWFwX2NsYXNzZXMsCisKKyNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKyAgICAmYWZtX3BhcnNlcl9mdW5jcywKKyNlbHNlCisgICAgMCwKKyNlbmRpZgorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IEZUX01vZHVsZV9DbGFzcyAgcHNhdXhfbW9kdWxlX2NsYXNzID0KKyAgeworICAgIDAsCisgICAgc2l6ZW9mICggRlRfTW9kdWxlUmVjICksCisgICAgInBzYXV4IiwKKyAgICAweDIwMDAwTCwKKyAgICAweDIwMDAwTCwKKworICAgICZwc2F1eF9pbnRlcmZhY2UsICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKTAsCisgICAgKEZUX01vZHVsZV9EZXN0cnVjdG9yKSAwLAorICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgMAorICB9OworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2F1eG1vZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2F1eG1vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNmE4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3BzYXV4bW9kLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNhdXhtb2QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIGF1eGlsaWFyeSBQb3N0U2NyaXB0IG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUFNBVVhNT0RfSF9fCisjZGVmaW5lIF9fUFNBVVhNT0RfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9NT0RVTEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyNlcnJvciAidGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgorI2VuZGlmCisKKworICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MgKSAgcHNhdXhfZHJpdmVyX2NsYXNzOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUFNBVVhNT0RfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3BzY29udi5jIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2NvbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2E3NDEyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2NvbnYuYwpAQCAtMCwwICsxLDYwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNjb252LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFNvbWUgY29udmVuaWVuY2UgY29udmVyc2lvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKworI2luY2x1ZGUgInBzY29udi5oIgorI2luY2x1ZGUgInBzYXV4ZXJyLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9wc2NvbnYKKworCisgIC8qIFRoZSBmb2xsb3dpbmcgYXJyYXkgaXMgdXNlZCBieSB2YXJpb3VzIGZ1bmN0aW9ucyB0byBxdWlja2x5IGNvbnZlcnQgKi8KKyAgLyogZGlnaXRzIChib3RoIGRlY2ltYWwgYW5kIG5vbi1kZWNpbWFsKSBpbnRvIG51bWJlcnMuICAgICAgICAgICAgICAgICAqLworCisjaWYgJ0EnID09IDY1CisgIC8qIEFTQ0lJICovCisKKyAgc3RhdGljIGNvbnN0IEZUX0NoYXIgIGZ0X2NoYXJfdGFibGVbMTI4XSA9CisgIHsKKyAgICAvKiAweDAwICovCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsCisgICAgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsCisgICAgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIH07CisKKyAgLyogbm8gY2hhcmFjdGVyID49IDB4ODAgY2FuIHJlcHJlc2VudCBhIHZhbGlkIG51bWJlciAqLworI2RlZmluZSBPUCAgPj0KKworI2VuZGlmIC8qICdBJyA9PSA2NSAqLworCisjaWYgJ0EnID09IDE5MworICAvKiBFQkNESUMgKi8KKworICBzdGF0aWMgY29uc3QgRlRfQ2hhciAgZnRfY2hhcl90YWJsZVsxMjhdID0KKyAgeworICAgIC8qIDB4ODAgKi8KKyAgICAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgfTsKKworICAvKiBubyBjaGFyYWN0ZXIgPCAweDgwIGNhbiByZXByZXNlbnQgYSB2YWxpZCBudW1iZXIgKi8KKyNkZWZpbmUgT1AgIDwKKworI2VuZGlmIC8qICdBJyA9PSAxOTMgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfTG9uZyApCisgIFBTX0NvbnZfU3RydG9sKCBGVF9CeXRlKiogIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGJhc2UgKQorICB7CisgICAgRlRfQnl0ZSogIHAgPSAqY3Vyc29yOworCisgICAgRlRfTG9uZyAgIG51bSAgICAgICAgICAgPSAwOworICAgIEZUX0Jvb2wgICBzaWduICAgICAgICAgID0gMDsKKyAgICBGVF9Cb29sICAgaGF2ZV9vdmVyZmxvdyA9IDA7CisKKyAgICBGVF9Mb25nICAgbnVtX2xpbWl0OworICAgIEZUX0NoYXIgICBjX2xpbWl0OworCisKKyAgICBpZiAoIHAgPj0gbGltaXQgKQorICAgICAgZ290byBCYWQ7CisKKyAgICBpZiAoIGJhc2UgPCAyIHx8IGJhc2UgPiAzNiApCisgICAgeworICAgICAgRlRfVFJBQ0U0KCggIiEhIUlOVkFMSUQgQkFTRTohISEiICkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCAqcCA9PSAnLScgfHwgKnAgPT0gJysnICkKKyAgICB7CisgICAgICBzaWduID0gRlRfQk9PTCggKnAgPT0gJy0nICk7CisKKyAgICAgIHArKzsKKyAgICAgIGlmICggcCA9PSBsaW1pdCApCisgICAgICAgIGdvdG8gQmFkOworICAgIH0KKworICAgIG51bV9saW1pdCA9IDB4N0ZGRkZGRkZMIC8gYmFzZTsKKyAgICBjX2xpbWl0ICAgPSAoRlRfQ2hhcikoIDB4N0ZGRkZGRkZMICUgYmFzZSApOworCisgICAgZm9yICggOyBwIDwgbGltaXQ7IHArKyApCisgICAgeworICAgICAgRlRfQ2hhciAgYzsKKworCisgICAgICBpZiAoIElTX1BTX1NQQUNFKCAqcCApIHx8ICpwIE9QIDB4ODAgKQorICAgICAgICBicmVhazsKKworICAgICAgYyA9IGZ0X2NoYXJfdGFibGVbKnAgJiAweDdGXTsKKworICAgICAgaWYgKCBjIDwgMCB8fCBjID49IGJhc2UgKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBudW0gPiBudW1fbGltaXQgfHwgKCBudW0gPT0gbnVtX2xpbWl0ICYmIGMgPiBjX2xpbWl0ICkgKQorICAgICAgICBoYXZlX292ZXJmbG93ID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgbnVtID0gbnVtICogYmFzZSArIGM7CisgICAgfQorCisgICAgKmN1cnNvciA9IHA7CisKKyAgICBpZiAoIGhhdmVfb3ZlcmZsb3cgKQorICAgIHsKKyAgICAgIG51bSA9IDB4N0ZGRkZGRkZMOworICAgICAgRlRfVFJBQ0U0KCggIiEhIU9WRVJGTE9XOiEhISIgKSk7CisgICAgfQorCisgICAgaWYgKCBzaWduICkKKyAgICAgIG51bSA9IC1udW07CisKKyAgICByZXR1cm4gbnVtOworCisgIEJhZDoKKyAgICBGVF9UUkFDRTQoKCAiISEhRU5EIE9GIERBVEE6ISEhIiApKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Mb25nICkKKyAgUFNfQ29udl9Ub0ludCggRlRfQnl0ZSoqICBjdXJzb3IsCisgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9ICpjdXJzb3I7CisgICAgRlRfQnl0ZSogIGN1cnA7CisKKyAgICBGVF9Mb25nICAgbnVtOworCisKKyAgICBjdXJwID0gcDsKKyAgICBudW0gID0gUFNfQ29udl9TdHJ0b2woICZwLCBsaW1pdCwgMTAgKTsKKworICAgIGlmICggcCA9PSBjdXJwICkKKyAgICAgIHJldHVybiAwOworCisgICAgaWYgKCBwIDwgbGltaXQgJiYgKnAgPT0gJyMnICkKKyAgICB7CisgICAgICBwKys7CisKKyAgICAgIGN1cnAgPSBwOworICAgICAgbnVtICA9IFBTX0NvbnZfU3RydG9sKCAmcCwgbGltaXQsIG51bSApOworCisgICAgICBpZiAoIHAgPT0gY3VycCApCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgICpjdXJzb3IgPSBwOworCisgICAgcmV0dXJuIG51bTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9GaXhlZCApCisgIFBTX0NvbnZfVG9GaXhlZCggRlRfQnl0ZSoqICBjdXJzb3IsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHBvd2VyX3RlbiApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9ICpjdXJzb3I7CisgICAgRlRfQnl0ZSogIGN1cnA7CisKKyAgICBGVF9GaXhlZCAgaW50ZWdyYWwgPSAwOworICAgIEZUX0xvbmcgICBkZWNpbWFsICA9IDA7CisgICAgRlRfTG9uZyAgIGRpdmlkZXIgID0gMTsKKworICAgIEZUX0Jvb2wgICBzaWduICAgICAgICAgICA9IDA7CisgICAgRlRfQm9vbCAgIGhhdmVfb3ZlcmZsb3cgID0gMDsKKyAgICBGVF9Cb29sICAgaGF2ZV91bmRlcmZsb3cgPSAwOworCisKKyAgICBpZiAoIHAgPj0gbGltaXQgKQorICAgICAgZ290byBCYWQ7CisKKyAgICBpZiAoICpwID09ICctJyB8fCAqcCA9PSAnKycgKQorICAgIHsKKyAgICAgIHNpZ24gPSBGVF9CT09MKCAqcCA9PSAnLScgKTsKKworICAgICAgcCsrOworICAgICAgaWYgKCBwID09IGxpbWl0ICkKKyAgICAgICAgZ290byBCYWQ7CisgICAgfQorCisgICAgLyogcmVhZCB0aGUgaW50ZWdlciBwYXJ0ICovCisgICAgaWYgKCAqcCAhPSAnLicgKQorICAgIHsKKyAgICAgIGN1cnAgICAgID0gcDsKKyAgICAgIGludGVncmFsID0gUFNfQ29udl9Ub0ludCggJnAsIGxpbWl0ICk7CisKKyAgICAgIGlmICggcCA9PSBjdXJwICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgIGlmICggaW50ZWdyYWwgPiAweDdGRkYgKQorICAgICAgICBoYXZlX292ZXJmbG93ID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgaW50ZWdyYWwgPSAoRlRfRml4ZWQpKCAoRlRfVUludDMyKWludGVncmFsIDw8IDE2ICk7CisgICAgfQorCisgICAgLyogcmVhZCB0aGUgZGVjaW1hbCBwYXJ0ICovCisgICAgaWYgKCBwIDwgbGltaXQgJiYgKnAgPT0gJy4nICkKKyAgICB7CisgICAgICBwKys7CisKKyAgICAgIGZvciAoIDsgcCA8IGxpbWl0OyBwKysgKQorICAgICAgeworICAgICAgICBGVF9DaGFyICBjOworCisKKyAgICAgICAgaWYgKCBJU19QU19TUEFDRSggKnAgKSB8fCAqcCBPUCAweDgwICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjID0gZnRfY2hhcl90YWJsZVsqcCAmIDB4N0ZdOworCisgICAgICAgIGlmICggYyA8IDAgfHwgYyA+PSAxMCApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogb25seSBhZGQgZGlnaXQgaWYgd2UgZG9uJ3Qgb3ZlcmZsb3cgKi8KKyAgICAgICAgaWYgKCBkaXZpZGVyIDwgMHhDQ0NDQ0NDTCAmJiBkZWNpbWFsIDwgMHhDQ0NDQ0NDTCApCisgICAgICAgIHsKKyAgICAgICAgICBkZWNpbWFsID0gZGVjaW1hbCAqIDEwICsgYzsKKworICAgICAgICAgIGlmICggIWludGVncmFsICYmIHBvd2VyX3RlbiA+IDAgKQorICAgICAgICAgICAgcG93ZXJfdGVuLS07CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGl2aWRlciAqPSAxMDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgZXhwb25lbnQsIGlmIGFueSAqLworICAgIGlmICggcCArIDEgPCBsaW1pdCAmJiAoICpwID09ICdlJyB8fCAqcCA9PSAnRScgKSApCisgICAgeworICAgICAgRlRfTG9uZyAgZXhwb25lbnQ7CisKKworICAgICAgcCsrOworCisgICAgICBjdXJwICAgICA9IHA7CisgICAgICBleHBvbmVudCA9IFBTX0NvbnZfVG9JbnQoICZwLCBsaW1pdCApOworCisgICAgICBpZiAoIGN1cnAgPT0gcCApCisgICAgICAgIHJldHVybiAwOworCisgICAgICAvKiBhcmJpdHJhcmlseSBsaW1pdCBleHBvbmVudCAqLworICAgICAgaWYgKCBleHBvbmVudCA+IDEwMDAgKQorICAgICAgICBoYXZlX292ZXJmbG93ID0gMTsKKyAgICAgIGVsc2UgaWYgKCBleHBvbmVudCA8IC0xMDAwICkKKyAgICAgICAgaGF2ZV91bmRlcmZsb3cgPSAxOworICAgICAgZWxzZQorICAgICAgICBwb3dlcl90ZW4gKz0gZXhwb25lbnQ7CisgICAgfQorCisgICAgKmN1cnNvciA9IHA7CisKKyAgICBpZiAoICFpbnRlZ3JhbCAmJiAhZGVjaW1hbCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggaGF2ZV9vdmVyZmxvdyApCisgICAgICBnb3RvIE92ZXJmbG93OworICAgIGlmICggaGF2ZV91bmRlcmZsb3cgKQorICAgICAgZ290byBVbmRlcmZsb3c7CisKKyAgICB3aGlsZSAoIHBvd2VyX3RlbiA+IDAgKQorICAgIHsKKyAgICAgIGlmICggaW50ZWdyYWwgPj0gMHhDQ0NDQ0NDTCApCisgICAgICAgIGdvdG8gT3ZlcmZsb3c7CisgICAgICBpbnRlZ3JhbCAqPSAxMDsKKworICAgICAgaWYgKCBkZWNpbWFsID49IDB4Q0NDQ0NDQ0wgKQorICAgICAgeworICAgICAgICBpZiAoIGRpdmlkZXIgPT0gMSApCisgICAgICAgICAgZ290byBPdmVyZmxvdzsKKyAgICAgICAgZGl2aWRlciAvPSAxMDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGVjaW1hbCAqPSAxMDsKKworICAgICAgcG93ZXJfdGVuLS07CisgICAgfQorCisgICAgd2hpbGUgKCBwb3dlcl90ZW4gPCAwICkKKyAgICB7CisgICAgICBpbnRlZ3JhbCAvPSAxMDsKKyAgICAgIGlmICggZGl2aWRlciA8IDB4Q0NDQ0NDQ0wgKQorICAgICAgICBkaXZpZGVyICo9IDEwOworICAgICAgZWxzZQorICAgICAgICBkZWNpbWFsIC89IDEwOworCisgICAgICBpZiAoICFpbnRlZ3JhbCAmJiAhZGVjaW1hbCApCisgICAgICAgIGdvdG8gVW5kZXJmbG93OworCisgICAgICBwb3dlcl90ZW4rKzsKKyAgICB9CisKKyAgICBpZiAoIGRlY2ltYWwgKQorICAgIHsKKyAgICAgIGRlY2ltYWwgPSBGVF9EaXZGaXgoIGRlY2ltYWwsIGRpdmlkZXIgKTsKKyAgICAgIC8qIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGlzIGFkZGl0aW9uIGZvciBvdmVyZmxvdyAqLworICAgICAgLyogZHVlIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlYWwgbnVtYmVyIHJlcHJlc2VudGF0aW9uICovCisgICAgICBpbnRlZ3JhbCArPSBkZWNpbWFsOworICAgIH0KKworICBFeGl0OgorICAgIGlmICggc2lnbiApCisgICAgICBpbnRlZ3JhbCA9IC1pbnRlZ3JhbDsKKworICAgIHJldHVybiBpbnRlZ3JhbDsKKworICBCYWQ6CisgICAgRlRfVFJBQ0U0KCggIiEhIUVORCBPRiBEQVRBOiEhISIgKSk7CisgICAgcmV0dXJuIDA7CisKKyAgT3ZlcmZsb3c6CisgICAgaW50ZWdyYWwgPSAweDdGRkZGRkZGTDsKKyAgICBGVF9UUkFDRTQoKCAiISEhT1ZFUkZMT1c6ISEhIiApKTsKKyAgICBnb3RvIEV4aXQ7CisKKyAgVW5kZXJmbG93OgorICAgIEZUX1RSQUNFNCgoICIhISFVTkRFUkZMT1c6ISEhIiApKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyNpZiAwCisgIEZUX0xPQ0FMX0RFRiggRlRfVUludCApCisgIFBTX0NvbnZfU3RyaW5nRGVjb2RlKCBGVF9CeXRlKiogIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbiApCisgIHsKKyAgICBGVF9CeXRlKiAgcDsKKyAgICBGVF9VSW50ICAgciA9IDA7CisKKworICAgIGZvciAoIHAgPSAqY3Vyc29yOyByIDwgbiAmJiBwIDwgbGltaXQ7IHArKyApCisgICAgeworICAgICAgRlRfQnl0ZSAgYjsKKworCisgICAgICBpZiAoICpwICE9ICdcXCcgKQorICAgICAgeworICAgICAgICBidWZmZXJbcisrXSA9ICpwOworCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBwKys7CisKKyAgICAgIHN3aXRjaCAoICpwICkKKyAgICAgIHsKKyAgICAgIGNhc2UgJ24nOgorICAgICAgICBiID0gJ1xuJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdyJzoKKyAgICAgICAgYiA9ICdccic7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndCc6CisgICAgICAgIGIgPSAnXHQnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2InOgorICAgICAgICBiID0gJ1xiJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdmJzoKKyAgICAgICAgYiA9ICdcZic7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnXHInOgorICAgICAgICBwKys7CisgICAgICAgIGlmICggKnAgIT0gJ1xuJyApCisgICAgICAgIHsKKyAgICAgICAgICBiID0gKnA7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBubyBicmVhayAqLworICAgICAgY2FzZSAnXG4nOgorICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoIElTX1BTX0RJR0lUKCAqcCApICkKKyAgICAgICAgeworICAgICAgICAgIGIgPSAqcCAtICcwJzsKKworICAgICAgICAgIHArKzsKKworICAgICAgICAgIGlmICggSVNfUFNfRElHSVQoICpwICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBiICogOCArICpwIC0gJzAnOworCisgICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgIGlmICggSVNfUFNfRElHSVQoICpwICkgKQorICAgICAgICAgICAgICBiID0gYiAqIDggKyAqcCAtICcwJzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnVmZmVyW3IrK10gPSBiOworICAgICAgICAgICAgICBiID0gKnA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBidWZmZXJbcisrXSA9IGI7CisgICAgICAgICAgICBiID0gKnA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBiID0gKnA7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBidWZmZXJbcisrXSA9IGI7CisgICAgfQorCisgICAgKmN1cnNvciA9IHA7CisKKyAgICByZXR1cm4gcjsKKyAgfQorI2VuZGlmIC8qIDAgKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfVUludCApCisgIFBTX0NvbnZfQVNDSUlIZXhEZWNvZGUoIEZUX0J5dGUqKiAgY3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBuICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VJbnQgICByICAgPSAwOworICAgIEZUX1VJbnQgICB3ICAgPSAwOworICAgIEZUX1VJbnQgICBwYWQgPSAweDAxOworCisKKyAgICBuICo9IDI7CisKKyNpZiAxCisKKyAgICBwID0gKmN1cnNvcjsKKworICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggbiA+IChGVF9VSW50KSggbGltaXQgLSBwICkgKQorICAgICAgbiA9IChGVF9VSW50KSggbGltaXQgLSBwICk7CisKKyAgICAvKiB3ZSB0cnkgdG8gcHJvY2VzcyB0d28gbmliYmxlcyBhdCBhIHRpbWUgdG8gYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSAqLworICAgIGZvciAoIDsgciA8IG47IHIrKyApCisgICAgeworICAgICAgRlRfVUludCAgYyA9IHBbcl07CisKKworICAgICAgaWYgKCBJU19QU19TUEFDRSggYyApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggYyBPUCAweDgwICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGMgPSAoRlRfVUludClmdF9jaGFyX3RhYmxlW2MgJiAweDdGXTsKKyAgICAgIGlmICggYyA+PSAxNiApCisgICAgICAgIGJyZWFrOworCisgICAgICBwYWQgPSAoIHBhZCA8PCA0ICkgfCBjOworICAgICAgaWYgKCBwYWQgJiAweDEwMCApCisgICAgICB7CisgICAgICAgIGJ1ZmZlclt3KytdID0gKEZUX0J5dGUpcGFkOworICAgICAgICBwYWQgICAgICAgICA9IDB4MDE7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBwYWQgIT0gMHgwMSApCisgICAgICBidWZmZXJbdysrXSA9IChGVF9CeXRlKSggcGFkIDw8IDQgKTsKKworICAgICpjdXJzb3IgPSBwICsgcjsKKworICAgIHJldHVybiB3OworCisjZWxzZSAvKiAwICovCisKKyAgICBmb3IgKCByID0gMDsgciA8IG47IHIrKyApCisgICAgeworICAgICAgRlRfQ2hhciAgYzsKKworCisgICAgICBpZiAoIElTX1BTX1NQQUNFKCAqcCApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggKnAgT1AgMHg4MCApCisgICAgICAgIGJyZWFrOworCisgICAgICBjID0gZnRfY2hhcl90YWJsZVsqcCAmIDB4N0ZdOworCisgICAgICBpZiAoICh1bnNpZ25lZCljID49IDE2ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggciAmIDEgKQorICAgICAgeworICAgICAgICAqYnVmZmVyID0gKEZUX0J5dGUpKCpidWZmZXIgKyBjKTsKKyAgICAgICAgYnVmZmVyKys7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgICpidWZmZXIgPSAoRlRfQnl0ZSkoYyA8PCA0KTsKKworICAgICAgcisrOworICAgIH0KKworICAgICpjdXJzb3IgPSBwOworCisgICAgcmV0dXJuICggciArIDEgKSAvIDI7CisKKyNlbmRpZiAvKiAwICovCisKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9VSW50ICkKKyAgUFNfQ29udl9FZXhlY0RlY29kZSggRlRfQnl0ZSoqICAgY3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgICBuLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBzZWVkICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VJbnQgICByOworICAgIEZUX1VJbnQgICBzID0gKnNlZWQ7CisKKworI2lmIDEKKworICAgIHAgPSAqY3Vyc29yOworCisgICAgaWYgKCBwID49IGxpbWl0ICkKKyAgICAgIHJldHVybiAwOworCisgICAgaWYgKCBuID4gKEZUX1VJbnQpKGxpbWl0IC0gcCkgKQorICAgICAgbiA9IChGVF9VSW50KShsaW1pdCAtIHApOworCisgICAgZm9yICggciA9IDA7IHIgPCBuOyByKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIHZhbCA9IHBbcl07CisgICAgICBGVF9VSW50ICBiICAgPSAoIHZhbCBeICggcyA+PiA4ICkgKTsKKworCisgICAgICBzICAgICAgICAgPSAoICh2YWwgKyBzKSo1Mjg0NVUgKyAyMjcxOSApICYgMHhGRkZGVTsKKyAgICAgIGJ1ZmZlcltyXSA9IChGVF9CeXRlKSBiOworICAgIH0KKworICAgICpjdXJzb3IgPSBwICsgbjsKKyAgICAqc2VlZCAgID0gKEZUX1VTaG9ydClzOworCisjZWxzZSAvKiAwICovCisKKyAgICBmb3IgKCByID0gMCwgcCA9ICpjdXJzb3I7IHIgPCBuICYmIHAgPCBsaW1pdDsgcisrLCBwKysgKQorICAgIHsKKyAgICAgIEZUX0J5dGUgIGIgPSAoRlRfQnl0ZSkoICpwIF4gKCBzID4+IDggKSApOworCisKKyAgICAgIHMgPSAoRlRfVVNob3J0KSggKCAqcCArIHMgKSAqIDUyODQ1VSArIDIyNzE5ICk7CisgICAgICAqYnVmZmVyKysgPSBiOworICAgIH0KKyAgICAqY3Vyc29yID0gcDsKKyAgICAqc2VlZCAgID0gczsKKworI2VuZGlmIC8qIDAgKi8KKworICAgIHJldHVybiByOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3BzY29udi5oIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2NvbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGYxZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc2NvbnYuaApAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2NvbnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgU29tZSBjb252ZW5pZW5jZSBjb252ZXJzaW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU0NPTlZfSF9fCisjZGVmaW5lIF9fUFNDT05WX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCBGVF9Mb25nICkKKyAgUFNfQ29udl9TdHJ0b2woIEZUX0J5dGUqKiAgY3Vyc29yLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgYmFzZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0xvbmcgKQorICBQU19Db252X1RvSW50KCBGVF9CeXRlKiogIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCApOworCisgIEZUX0xPQ0FMKCBGVF9GaXhlZCApCisgIFBTX0NvbnZfVG9GaXhlZCggRlRfQnl0ZSoqICBjdXJzb3IsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHBvd2VyX3RlbiApOworCisjaWYgMAorICBGVF9MT0NBTCggRlRfVUludCApCisgIFBTX0NvbnZfU3RyaW5nRGVjb2RlKCBGVF9CeXRlKiogIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbiApOworI2VuZGlmCisKKyAgRlRfTE9DQUwoIEZUX1VJbnQgKQorICBQU19Db252X0FTQ0lJSGV4RGVjb2RlKCBGVF9CeXRlKiogIGN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbiApOworCisgIEZUX0xPQ0FMKCBGVF9VSW50ICkKKyAgUFNfQ29udl9FZXhlY0RlY29kZSggRlRfQnl0ZSoqICAgY3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgICBuLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBzZWVkICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QU0NPTlZfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3Bzb2Jqcy5jIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc29ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NiYzY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9wc29ianMuYwpAQCAtMCwwICsxLDE3NjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzb2Jqcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKworI2luY2x1ZGUgInBzb2Jqcy5oIgorI2luY2x1ZGUgInBzY29udi5oIgorCisjaW5jbHVkZSAicHNhdXhlcnIuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Bzb2JqcworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU19UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHNfdGFibGVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBQU19UYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFibGUgIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY291bnQgIDo6IFRoZSB0YWJsZSBzaXplID0gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgOjogVGhlIG1lbW9yeSBvYmplY3QgdG8gdXNlIGZvciBhbGwgc3Vic2VxdWVudCAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgIHJlYWxsb2NhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcHNfdGFibGVfbmV3KCBQU19UYWJsZSAgIHRhYmxlLAorICAgICAgICAgICAgICAgIEZUX0ludCAgICAgY291bnQsCisgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICB0YWJsZS0+bWVtb3J5ID0gbWVtb3J5OworICAgIGlmICggRlRfTkVXX0FSUkFZKCB0YWJsZS0+ZWxlbWVudHMsIGNvdW50ICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggdGFibGUtPmxlbmd0aHMsICBjb3VudCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHRhYmxlLT5tYXhfZWxlbXMgPSBjb3VudDsKKyAgICB0YWJsZS0+aW5pdCAgICAgID0gMHhERUFEQkVFRlVMOworICAgIHRhYmxlLT5udW1fZWxlbXMgPSAwOworICAgIHRhYmxlLT5ibG9jayAgICAgPSBOVUxMOworICAgIHRhYmxlLT5jYXBhY2l0eSAgPSAwOworICAgIHRhYmxlLT5jdXJzb3IgICAgPSAwOworCisgICAgKihQU19UYWJsZV9GdW5jc1JlYyopJnRhYmxlLT5mdW5jcyA9IHBzX3RhYmxlX2Z1bmNzOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgICBGVF9GUkVFKCB0YWJsZS0+ZWxlbWVudHMgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgc2hpZnRfZWxlbWVudHMoIFBTX1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICBvbGRfYmFzZSApCisgIHsKKyAgICBGVF9QdHJEaXN0ICBkZWx0YSAgPSB0YWJsZS0+YmxvY2sgLSBvbGRfYmFzZTsKKyAgICBGVF9CeXRlKiogICBvZmZzZXQgPSB0YWJsZS0+ZWxlbWVudHM7CisgICAgRlRfQnl0ZSoqICAgbGltaXQgID0gb2Zmc2V0ICsgdGFibGUtPm1heF9lbGVtczsKKworCisgICAgZm9yICggOyBvZmZzZXQgPCBsaW1pdDsgb2Zmc2V0KysgKQorICAgIHsKKyAgICAgIGlmICggb2Zmc2V0WzBdICkKKyAgICAgICAgb2Zmc2V0WzBdICs9IGRlbHRhOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHJlYWxsb2NhdGVfdDFfdGFibGUoIFBTX1RhYmxlICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbmV3X3NpemUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgICA9IHRhYmxlLT5tZW1vcnk7CisgICAgRlRfQnl0ZSogICBvbGRfYmFzZSA9IHRhYmxlLT5ibG9jazsKKyAgICBGVF9FcnJvciAgIGVycm9yOworCisKKyAgICAvKiBhbGxvY2F0ZSBuZXcgYmFzZSBibG9jayAqLworICAgIGlmICggRlRfQUxMT0MoIHRhYmxlLT5ibG9jaywgbmV3X3NpemUgKSApCisgICAgeworICAgICAgdGFibGUtPmJsb2NrID0gb2xkX2Jhc2U7CisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgLyogY29weSBlbGVtZW50cyBhbmQgc2hpZnQgb2Zmc2V0cyAqLworICAgIGlmICggb2xkX2Jhc2UgKQorICAgIHsKKyAgICAgIEZUX01FTV9DT1BZKCB0YWJsZS0+YmxvY2ssIG9sZF9iYXNlLCB0YWJsZS0+Y2FwYWNpdHkgKTsKKyAgICAgIHNoaWZ0X2VsZW1lbnRzKCB0YWJsZSwgb2xkX2Jhc2UgKTsKKyAgICAgIEZUX0ZSRUUoIG9sZF9iYXNlICk7CisgICAgfQorCisgICAgdGFibGUtPmNhcGFjaXR5ID0gbmV3X3NpemU7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwc190YWJsZV9hZGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZGRzIGFuIG9iamVjdCB0byBhIFBTX1RhYmxlLCBwb3NzaWJseSBncm93aW5nIGl0cyBtZW1vcnkgYmxvY2suICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWJsZSAgOjogVGhlIHRhcmdldCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpZHggICAgOjogVGhlIGluZGV4IG9mIHRoZSBvYmplY3QgaW4gdGhlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9iamVjdCA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IHRvIGNvcHkgaW4gbWVtb3J5LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGVuZ3RoIDo6IFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIGEgICovCisgIC8qICAgIHJlYWxsb2NhdGlvbiBmYWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHBzX3RhYmxlX2FkZCggUFNfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgIEZUX0ludCAgICBpZHgsCisgICAgICAgICAgICAgICAgdm9pZCogICAgIG9iamVjdCwKKyAgICAgICAgICAgICAgICBGVF9VSW50ICAgbGVuZ3RoICkKKyAgeworICAgIGlmICggaWR4IDwgMCB8fCBpZHggPj0gdGFibGUtPm1heF9lbGVtcyApCisgICAgeworICAgICAgRlRfRVJST1IoKCAicHNfdGFibGVfYWRkOiBpbnZhbGlkIGluZGV4XG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgfQorCisgICAgLyogZ3JvdyB0aGUgYmFzZSBibG9jayBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIHRhYmxlLT5jdXJzb3IgKyBsZW5ndGggPiB0YWJsZS0+Y2FwYWNpdHkgKQorICAgIHsKKyAgICAgIEZUX0Vycm9yICAgIGVycm9yOworICAgICAgRlRfT2Zmc2V0ICAgbmV3X3NpemUgPSB0YWJsZS0+Y2FwYWNpdHk7CisgICAgICBGVF9QdHJEaXN0ICBpbl9vZmZzZXQ7CisKKworICAgICAgaW5fb2Zmc2V0ID0gKEZUX0J5dGUqKW9iamVjdCAtIHRhYmxlLT5ibG9jazsKKyAgICAgIGlmICggaW5fb2Zmc2V0IDwgMCB8fCAoRlRfT2Zmc2V0KWluX29mZnNldCA+PSB0YWJsZS0+Y2FwYWNpdHkgKQorICAgICAgICBpbl9vZmZzZXQgPSAtMTsKKworICAgICAgd2hpbGUgKCBuZXdfc2l6ZSA8IHRhYmxlLT5jdXJzb3IgKyBsZW5ndGggKQorICAgICAgeworICAgICAgICAvKiBpbmNyZWFzZSBzaXplIGJ5IDI1JSBhbmQgcm91bmQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUKKyAgICAgICAgICAgb2YgMTAyNCAqLworICAgICAgICBuZXdfc2l6ZSArPSAoIG5ld19zaXplID4+IDIgKSArIDE7CisgICAgICAgIG5ld19zaXplICA9IEZUX1BBRF9DRUlMKCBuZXdfc2l6ZSwgMTAyNCApOworICAgICAgfQorCisgICAgICBlcnJvciA9IHJlYWxsb2NhdGVfdDFfdGFibGUoIHRhYmxlLCBuZXdfc2l6ZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgaWYgKCBpbl9vZmZzZXQgPj0gMCApCisgICAgICAgIG9iamVjdCA9IHRhYmxlLT5ibG9jayArIGluX29mZnNldDsKKyAgICB9CisKKyAgICAvKiBhZGQgdGhlIG9iamVjdCB0byB0aGUgYmFzZSBibG9jayBhbmQgYWRqdXN0IG9mZnNldCAqLworICAgIHRhYmxlLT5lbGVtZW50c1tpZHhdID0gdGFibGUtPmJsb2NrICsgdGFibGUtPmN1cnNvcjsKKyAgICB0YWJsZS0+bGVuZ3RocyBbaWR4XSA9IGxlbmd0aDsKKyAgICBGVF9NRU1fQ09QWSggdGFibGUtPmJsb2NrICsgdGFibGUtPmN1cnNvciwgb2JqZWN0LCBsZW5ndGggKTsKKworICAgIHRhYmxlLT5jdXJzb3IgKz0gbGVuZ3RoOworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBzX3RhYmxlX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIFBTX1RhYmxlUmVjIChpLmUuLCByZWFsbG9jYXRlIGl0IHRvIGl0cyBjdXJyZW50ICAgICAgICAqLworICAvKiAgICBjdXJzb3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWJsZSA6OiBUaGUgdGFyZ2V0IHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHJlbGVhc2UgdGhlIGhlYXAncyBtZW1vcnkgYmxvY2suICBJdCBpcyB1cCAgKi8KKyAgLyogICAgdG8gdGhlIGNhbGxlciB0byBjbGVhbiBpdCwgb3IgcmVmZXJlbmNlIGl0IGluIGl0cyBvd24gc3RydWN0dXJlcy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc190YWJsZV9kb25lKCBQU19UYWJsZSAgdGFibGUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSB0YWJsZS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfQnl0ZSogICBvbGRfYmFzZSA9IHRhYmxlLT5ibG9jazsKKworCisgICAgLyogc2hvdWxkIG5ldmVyIGZhaWwsIGJlY2F1c2UgcmVjLmN1cnNvciA8PSByZWMuc2l6ZSAqLworICAgIGlmICggIW9sZF9iYXNlICkKKyAgICAgIHJldHVybjsKKworICAgIGlmICggRlRfQUxMT0MoIHRhYmxlLT5ibG9jaywgdGFibGUtPmN1cnNvciApICkKKyAgICAgIHJldHVybjsKKyAgICBGVF9NRU1fQ09QWSggdGFibGUtPmJsb2NrLCBvbGRfYmFzZSwgdGFibGUtPmN1cnNvciApOworICAgIHNoaWZ0X2VsZW1lbnRzKCB0YWJsZSwgb2xkX2Jhc2UgKTsKKworICAgIHRhYmxlLT5jYXBhY2l0eSA9IHRhYmxlLT5jdXJzb3I7CisgICAgRlRfRlJFRSggb2xkX2Jhc2UgKTsKKworICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfdGFibGVfcmVsZWFzZSggUFNfVGFibGUgIHRhYmxlICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gdGFibGUtPm1lbW9yeTsKKworCisgICAgaWYgKCAoRlRfVUxvbmcpdGFibGUtPmluaXQgPT0gMHhERUFEQkVFRlVMICkKKyAgICB7CisgICAgICBGVF9GUkVFKCB0YWJsZS0+YmxvY2sgKTsKKyAgICAgIEZUX0ZSRUUoIHRhYmxlLT5lbGVtZW50cyApOworICAgICAgRlRfRlJFRSggdGFibGUtPmxlbmd0aHMgKTsKKyAgICAgIHRhYmxlLT5pbml0ID0gMDsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMSBQQVJTRVIgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogZmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjb21tZW50ICovCisKKyAgc3RhdGljIHZvaWQKKyAgc2tpcF9jb21tZW50KCBGVF9CeXRlKiAgKmFjdXIsCisgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCApCisgIHsKKyAgICBGVF9CeXRlKiAgY3VyID0gKmFjdXI7CisKKworICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgIHsKKyAgICAgIGlmICggSVNfUFNfTkVXTElORSggKmN1ciApICkKKyAgICAgICAgYnJlYWs7CisgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICAqYWN1ciA9IGN1cjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgc2tpcF9zcGFjZXMoIEZUX0J5dGUqICAqYWN1ciwKKyAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorICB7CisgICAgRlRfQnl0ZSogIGN1ciA9ICphY3VyOworCisKKyAgICB3aGlsZSAoIGN1ciA8IGxpbWl0ICkKKyAgICB7CisgICAgICBpZiAoICFJU19QU19TUEFDRSggKmN1ciApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAqY3VyID09ICclJyApCisgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIHRoZSBQTFJNLCBhIGNvbW1lbnQgaXMgZXF1YWwgdG8gYSBzcGFjZS4gKi8KKyAgICAgICAgICBza2lwX2NvbW1lbnQoICZjdXIsIGxpbWl0ICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cisrOworICAgIH0KKworICAgICphY3VyID0gY3VyOworICB9CisKKworI2RlZmluZSBJU19PQ1RBTF9ESUdJVCggYyApICggJzAnIDw9IChjKSAmJiAoYykgPD0gJzcnICkKKworCisgIC8qIGZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGAoJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogKmFjdXIgaXMgcG9zaXRpb25lZCBhdCB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBjbG9zaW5nIGApJyAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBza2lwX2xpdGVyYWxfc3RyaW5nKCBGVF9CeXRlKiAgKmFjdXIsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorICB7CisgICAgRlRfQnl0ZSogICAgICBjdXIgICA9ICphY3VyOworICAgIEZUX0ludCAgICAgICAgZW1iZWQgPSAwOworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICB1bnNpZ25lZCBpbnQgIGk7CisKKworICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgIHsKKyAgICAgIEZUX0J5dGUgIGMgPSAqY3VyOworCisKKyAgICAgICsrY3VyOworCisgICAgICBpZiAoIGMgPT0gJ1xcJyApCisgICAgICB7CisgICAgICAgIC8qIFJlZCBCb29rIDNyZCBlZC4sIHNlY3Rpb24gYExpdGVyYWwgVGV4dCBTdHJpbmdzJywgcC4gMjk6ICAgICAqLworICAgICAgICAvKiBBIGJhY2tzbGFzaCBjYW4gaW50cm9kdWNlIHRocmVlIGRpZmZlcmVudCB0eXBlcyAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogb2YgZXNjYXBlIHNlcXVlbmNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgLSBhIHNwZWNpYWwgZXNjYXBlZCBjaGFyIGxpa2UgXHIsIFxuLCBldGMuICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgIC0gYSBvbmUtLCB0d28tLCBvciB0aHJlZS1kaWdpdCBvY3RhbCBudW1iZXIgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAtIG5vbmUgb2YgdGhlIGFib3ZlIGluIHdoaWNoIGNhc2UgdGhlIGJhY2tzbGFzaCBpcyBpZ25vcmVkICovCisKKyAgICAgICAgaWYgKCBjdXIgPT0gbGltaXQgKQorICAgICAgICAgIC8qIGVycm9yIChvciB0byBiZSBpZ25vcmVkPykgKi8KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBzd2l0Y2ggKCAqY3VyICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHNraXAgYHNwZWNpYWwnIGVzY2FwZSAqLworICAgICAgICBjYXNlICduJzoKKyAgICAgICAgY2FzZSAncic6CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgY2FzZSAnZic6CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgY2FzZSAnKCc6CisgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICsrY3VyOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgLyogc2tpcCBvY3RhbCBlc2NhcGUgb3IgaWdub3JlIGJhY2tzbGFzaCAqLworICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMyAmJiBjdXIgPCBsaW1pdDsgKytpICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFJU19PQ1RBTF9ESUdJVCggKmN1ciApICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICsrY3VyOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIGMgPT0gJygnICkKKyAgICAgICAgZW1iZWQrKzsKKyAgICAgIGVsc2UgaWYgKCBjID09ICcpJyApCisgICAgICB7CisgICAgICAgIGVtYmVkLS07CisgICAgICAgIGlmICggZW1iZWQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgICphY3VyID0gY3VyOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBgPCcgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgc2tpcF9zdHJpbmcoIEZUX0J5dGUqICAqYWN1ciwKKyAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorICB7CisgICAgRlRfQnl0ZSogIGN1ciA9ICphY3VyOworICAgIEZUX0Vycm9yICBlcnIgPSAgRlRfRXJyX09rOworCisKKyAgICB3aGlsZSAoICsrY3VyIDwgbGltaXQgKQorICAgIHsKKyAgICAgIC8qIEFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuICovCisgICAgICBza2lwX3NwYWNlcyggJmN1ciwgbGltaXQgKTsKKyAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggIUlTX1BTX1hESUdJVCggKmN1ciApICkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCBjdXIgPCBsaW1pdCAmJiAqY3VyICE9ICc+JyApCisgICAgeworICAgICAgRlRfRVJST1IoKCAic2tpcF9zdHJpbmc6IG1pc3NpbmcgY2xvc2luZyBkZWxpbWl0ZXIgYD4nXG4iICkpOworICAgICAgZXJyID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgY3VyKys7CisKKyAgICAqYWN1ciA9IGN1cjsKKyAgICByZXR1cm4gZXJyOworICB9CisKKworICAvKiBmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSB0aGUgb3BlbmluZyBicmFjZSB0aGF0ICovCisgIC8qIHN0YXJ0cyB0aGUgcHJvY2VkdXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBOQjogWyBhbmQgXSBuZWVkIG5vdCBtYXRjaDogICAgICAgICAgICAgICAgICAgICovCisgIC8qIGAvZm9vIHtbfSBkZWYnIGlzIGEgdmFsaWQgUG9zdFNjcmlwdCBmcmFnbWVudCwgKi8KKyAgLyogZXZlbiB3aXRoaW4gYSBUeXBlMSBmb250ICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBza2lwX3Byb2NlZHVyZSggRlRfQnl0ZSogICphY3VyLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCApCisgIHsKKyAgICBGVF9CeXRlKiAgY3VyOworICAgIEZUX0ludCAgICBlbWJlZCA9IDA7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBGVF9BU1NFUlQoICoqYWN1ciA9PSAneycgKTsKKworICAgIGZvciAoIGN1ciA9ICphY3VyOyBjdXIgPCBsaW1pdCAmJiBlcnJvciA9PSBGVF9FcnJfT2s7ICsrY3VyICkKKyAgICB7CisgICAgICBzd2l0Y2ggKCAqY3VyICkKKyAgICAgIHsKKyAgICAgIGNhc2UgJ3snOgorICAgICAgICArK2VtYmVkOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnfSc6CisgICAgICAgIC0tZW1iZWQ7CisgICAgICAgIGlmICggZW1iZWQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICArK2N1cjsKKyAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnKCc6CisgICAgICAgIGVycm9yID0gc2tpcF9saXRlcmFsX3N0cmluZyggJmN1ciwgbGltaXQgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJzwnOgorICAgICAgICBlcnJvciA9IHNraXBfc3RyaW5nKCAmY3VyLCBsaW1pdCApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnJSc6CisgICAgICAgIHNraXBfY29tbWVudCggJmN1ciwgbGltaXQgKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgIGVuZDoKKyAgICBpZiAoIGVtYmVkICE9IDAgKQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgKmFjdXIgPSBjdXI7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBbGwgZXhwb3J0ZWQgcGFyc2luZyByb3V0aW5lcyBoYW5kbGUgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBzdG9wIGF0ICovCisgIC8qIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaXNuJ3QgcGFydCBvZiB0aGUganVzdCBoYW5kbGVkIHRva2VuLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc19wYXJzZXJfc2tpcF9QU190b2tlbiggUFNfUGFyc2VyICBwYXJzZXIgKQorICB7CisgICAgLyogTm90ZTogUG9zdFNjcmlwdCBhbGxvd3MgYW55IG5vbi1kZWxpbWl0aW5nLCBub24td2hpdGVzcGFjZSAgICAgICAgKi8KKyAgICAvKiAgICAgICBjaGFyYWN0ZXIgaW4gYSBuYW1lIChQUyBSZWYgTWFudWFsLCAzcmQgZWQsIHAzMSkuICAgICAgICAgICAqLworICAgIC8qICAgICAgIFBvc3RTY3JpcHQgZGVsaW1pdGVycyBhcmUgKCwgKSwgPCwgPiwgWywgXSwgeywgfSwgLywgYW5kICUuICovCisKKyAgICBGVF9CeXRlKiAgY3VyICAgPSBwYXJzZXItPmN1cnNvcjsKKyAgICBGVF9CeXRlKiAgbGltaXQgPSBwYXJzZXItPmxpbWl0OworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgc2tpcF9zcGFjZXMoICZjdXIsIGxpbWl0ICk7ICAgICAgICAgICAgIC8qIHRoaXMgYWxzbyBza2lwcyBjb21tZW50cyAqLworICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIHNlbGYtZGVsaW1pdGluZywgc2luZ2xlLWNoYXJhY3RlciB0b2tlbnMgKi8KKyAgICBpZiAoICpjdXIgPT0gJ1snIHx8ICpjdXIgPT0gJ10nICkKKyAgICB7CisgICAgICBjdXIrKzsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBza2lwIGJhbGFuY2VkIGV4cHJlc3Npb25zIChwcm9jZWR1cmVzIGFuZCBzdHJpbmdzKSAqLworCisgICAgaWYgKCAqY3VyID09ICd7JyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogey4uLn0gKi8KKyAgICB7CisgICAgICBlcnJvciA9IHNraXBfcHJvY2VkdXJlKCAmY3VyLCBsaW1pdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggKmN1ciA9PSAnKCcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICguLi4pICovCisgICAgeworICAgICAgZXJyb3IgPSBza2lwX2xpdGVyYWxfc3RyaW5nKCAmY3VyLCBsaW1pdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggKmN1ciA9PSAnPCcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDwuLi4+ICovCisgICAgeworICAgICAgaWYgKCBjdXIgKyAxIDwgbGltaXQgJiYgKihjdXIgKyAxKSA9PSAnPCcgKSAgIC8qIDw8ICovCisgICAgICB7CisgICAgICAgIGN1cisrOworICAgICAgICBjdXIrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZXJyb3IgPSBza2lwX3N0cmluZyggJmN1ciwgbGltaXQgKTsKKworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggKmN1ciA9PSAnPicgKQorICAgIHsKKyAgICAgIGN1cisrOworICAgICAgaWYgKCBjdXIgPj0gbGltaXQgfHwgKmN1ciAhPSAnPicgKSAgICAgICAgICAgICAvKiA+PiAqLworICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJwc19wYXJzZXJfc2tpcF9QU190b2tlbjoiCisgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIGNsb3NpbmcgZGVsaW1pdGVyIGA+J1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBjdXIrKzsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoICpjdXIgPT0gJy8nICkKKyAgICAgIGN1cisrOworCisgICAgLyogYW55dGhpbmcgZWxzZSAqLworICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgIHsKKyAgICAgIC8qICpjdXIgbWlnaHQgYmUgaW52YWxpZCAoZS5nLiwgJyknIG9yICd9JyksIGJ1dCB0aGlzICAgKi8KKyAgICAgIC8qIGlzIGhhbmRsZWQgYnkgdGhlIHRlc3QgYGN1ciA9PSBwYXJzZXItPmN1cnNvcicgYmVsb3cgKi8KKyAgICAgIGlmICggSVNfUFNfREVMSU0oICpjdXIgKSApCisgICAgICAgIGJyZWFrOworCisgICAgICBjdXIrKzsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBpZiAoIGN1ciA8IGxpbWl0ICYmIGN1ciA9PSBwYXJzZXItPmN1cnNvciApCisgICAgeworICAgICAgRlRfRVJST1IoKCAicHNfcGFyc2VyX3NraXBfUFNfdG9rZW46IgorICAgICAgICAgICAgICAgICAiIGN1cnJlbnQgdG9rZW4gaXMgYCVjJyB3aGljaCBpcyBzZWxmLWRlbGltaXRpbmdcbiIKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgIiBidXQgaW52YWxpZCBhdCB0aGlzIHBvaW50XG4iLAorICAgICAgICAgICAgICAgICAqY3VyICkpOworCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgfQorCisgICAgcGFyc2VyLT5lcnJvciAgPSBlcnJvcjsKKyAgICBwYXJzZXItPmN1cnNvciA9IGN1cjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfcGFyc2VyX3NraXBfc3BhY2VzKCBQU19QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBza2lwX3NwYWNlcyggJnBhcnNlci0+Y3Vyc29yLCBwYXJzZXItPmxpbWl0ICk7CisgIH0KKworCisgIC8qIGB0b2tlbicgaGVyZSBtZWFucyBlaXRoZXIgc29tZXRoaW5nIGJldHdlZW4gYmFsYW5jZWQgZGVsaW1pdGVycyAqLworICAvKiBvciB0aGUgbmV4dCB0b2tlbjsgdGhlIGRlbGltaXRlcnMgYXJlIG5vdCByZW1vdmVkLiAgICAgICAgICAgICAgKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc19wYXJzZXJfdG9fdG9rZW4oIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIFQxX1Rva2VuICAgdG9rZW4gKQorICB7CisgICAgRlRfQnl0ZSogIGN1cjsKKyAgICBGVF9CeXRlKiAgbGltaXQ7CisgICAgRlRfSW50ICAgIGVtYmVkOworCisKKyAgICB0b2tlbi0+dHlwZSAgPSBUMV9UT0tFTl9UWVBFX05PTkU7CisgICAgdG9rZW4tPnN0YXJ0ID0gTlVMTDsKKyAgICB0b2tlbi0+bGltaXQgPSBOVUxMOworCisgICAgLyogZmlyc3Qgb2YgYWxsLCBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIHBzX3BhcnNlcl9za2lwX3NwYWNlcyggcGFyc2VyICk7CisKKyAgICBjdXIgICA9IHBhcnNlci0+Y3Vyc29yOworICAgIGxpbWl0ID0gcGFyc2VyLT5saW1pdDsKKworICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoICpjdXIgKQorICAgIHsKKyAgICAgIC8qKioqKioqKioqKioqIGNoZWNrIGZvciBsaXRlcmFsIHN0cmluZyAqKioqKioqKioqKioqKioqKi8KKyAgICBjYXNlICcoJzoKKyAgICAgIHRva2VuLT50eXBlICA9IFQxX1RPS0VOX1RZUEVfU1RSSU5HOworICAgICAgdG9rZW4tPnN0YXJ0ID0gY3VyOworCisgICAgICBpZiAoIHNraXBfbGl0ZXJhbF9zdHJpbmcoICZjdXIsIGxpbWl0ICkgPT0gRlRfRXJyX09rICkKKyAgICAgICAgdG9rZW4tPmxpbWl0ID0gY3VyOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qKioqKioqKioqKioqIGNoZWNrIGZvciBwcm9ncmFtcy9hcnJheSAqKioqKioqKioqKioqKioqKi8KKyAgICBjYXNlICd7JzoKKyAgICAgIHRva2VuLT50eXBlICA9IFQxX1RPS0VOX1RZUEVfQVJSQVk7CisgICAgICB0b2tlbi0+c3RhcnQgPSBjdXI7CisKKyAgICAgIGlmICggc2tpcF9wcm9jZWR1cmUoICZjdXIsIGxpbWl0ICkgPT0gRlRfRXJyX09rICkKKyAgICAgICAgdG9rZW4tPmxpbWl0ID0gY3VyOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qKioqKioqKioqKioqIGNoZWNrIGZvciB0YWJsZS9hcnJheSAqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIFhYWDogaW4gdGhlb3J5IHdlIHNob3VsZCBhbHNvIGxvb2sgZm9yICI8PCIgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgc2luY2UgdGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byAiWyI7ICAgKi8KKyAgICAgIC8qICAgICAgaW4gcHJhY3RpY2UgaXQgZG9lc24ndCBtYXR0ZXIgKD8pICAgICAgICAgICAgICAgKi8KKyAgICBjYXNlICdbJzoKKyAgICAgIHRva2VuLT50eXBlICA9IFQxX1RPS0VOX1RZUEVfQVJSQVk7CisgICAgICBlbWJlZCAgICAgICAgPSAxOworICAgICAgdG9rZW4tPnN0YXJ0ID0gY3VyKys7CisKKyAgICAgIC8qIHdlIG5lZWQgdGhpcyB0byBjYXRjaCBgWyBdJyAqLworICAgICAgcGFyc2VyLT5jdXJzb3IgPSBjdXI7CisgICAgICBwc19wYXJzZXJfc2tpcF9zcGFjZXMoIHBhcnNlciApOworICAgICAgY3VyID0gcGFyc2VyLT5jdXJzb3I7CisKKyAgICAgIHdoaWxlICggY3VyIDwgbGltaXQgJiYgIXBhcnNlci0+ZXJyb3IgKQorICAgICAgeworICAgICAgICAvKiBYWFg6IHRoaXMgaXMgd3JvbmcgYmVjYXVzZSBpdCBkb2VzIG5vdCAgICAgICovCisgICAgICAgIC8qICAgICAgc2tpcCBjb21tZW50cywgcHJvY2VkdXJlcywgYW5kIHN0cmluZ3MgKi8KKyAgICAgICAgaWYgKCAqY3VyID09ICdbJyApCisgICAgICAgICAgZW1iZWQrKzsKKyAgICAgICAgZWxzZSBpZiAoICpjdXIgPT0gJ10nICkKKyAgICAgICAgeworICAgICAgICAgIGVtYmVkLS07CisgICAgICAgICAgaWYgKCBlbWJlZCA8PSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+bGltaXQgPSArK2N1cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBhcnNlci0+Y3Vyc29yID0gY3VyOworICAgICAgICBwc19wYXJzZXJfc2tpcF9QU190b2tlbiggcGFyc2VyICk7CisgICAgICAgIC8qIHdlIG5lZWQgdGhpcyB0byBjYXRjaCBgW1hYWCBdJyAqLworICAgICAgICBwc19wYXJzZXJfc2tpcF9zcGFjZXMgICggcGFyc2VyICk7CisgICAgICAgIGN1ciA9IHBhcnNlci0+Y3Vyc29yOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qICoqKioqKioqKioqKiBvdGhlcndpc2UsIGl0IGlzIGFueSB0b2tlbiAqKioqKioqKioqKioqKi8KKyAgICBkZWZhdWx0OgorICAgICAgdG9rZW4tPnN0YXJ0ID0gY3VyOworICAgICAgdG9rZW4tPnR5cGUgID0gKCAqY3VyID09ICcvJyA/IFQxX1RPS0VOX1RZUEVfS0VZIDogVDFfVE9LRU5fVFlQRV9BTlkgKTsKKyAgICAgIHBzX3BhcnNlcl9za2lwX1BTX3Rva2VuKCBwYXJzZXIgKTsKKyAgICAgIGN1ciA9IHBhcnNlci0+Y3Vyc29yOworICAgICAgaWYgKCAhcGFyc2VyLT5lcnJvciApCisgICAgICAgIHRva2VuLT5saW1pdCA9IGN1cjsKKyAgICB9CisKKyAgICBpZiAoICF0b2tlbi0+bGltaXQgKQorICAgIHsKKyAgICAgIHRva2VuLT5zdGFydCA9IE5VTEw7CisgICAgICB0b2tlbi0+dHlwZSAgPSBUMV9UT0tFTl9UWVBFX05PTkU7CisgICAgfQorCisgICAgcGFyc2VyLT5jdXJzb3IgPSBjdXI7CisgIH0KKworCisgIC8qIE5COiBgdG9rZW5zJyBjYW4gYmUgTlVMTCBpZiB3ZSBvbmx5IHdhbnQgdG8gY291bnQgKi8KKyAgLyogdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHBzX3BhcnNlcl90b190b2tlbl9hcnJheSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDFfVG9rZW4gICB0b2tlbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBtYXhfdG9rZW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCogICAgcG51bV90b2tlbnMgKQorICB7CisgICAgVDFfVG9rZW5SZWMgIG1hc3RlcjsKKworCisgICAgKnBudW1fdG9rZW5zID0gLTE7CisKKyAgICAvKiB0aGlzIGFsc28gaGFuZGxlcyBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKyAgICBwc19wYXJzZXJfdG9fdG9rZW4oIHBhcnNlciwgJm1hc3RlciApOworCisgICAgaWYgKCBtYXN0ZXIudHlwZSA9PSBUMV9UT0tFTl9UWVBFX0FSUkFZICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgb2xkX2N1cnNvciA9IHBhcnNlci0+Y3Vyc29yOworICAgICAgRlRfQnl0ZSogIG9sZF9saW1pdCAgPSBwYXJzZXItPmxpbWl0OworICAgICAgVDFfVG9rZW4gIGN1ciAgICAgICAgPSB0b2tlbnM7CisgICAgICBUMV9Ub2tlbiAgbGltaXQgICAgICA9IGN1ciArIG1heF90b2tlbnM7CisKKworICAgICAgLyogZG9uJ3QgaW5jbHVkZSBvdXRlcm1vc3QgZGVsaW1pdGVycyAqLworICAgICAgcGFyc2VyLT5jdXJzb3IgPSBtYXN0ZXIuc3RhcnQgKyAxOworICAgICAgcGFyc2VyLT5saW1pdCAgPSBtYXN0ZXIubGltaXQgLSAxOworCisgICAgICB3aGlsZSAoIHBhcnNlci0+Y3Vyc29yIDwgcGFyc2VyLT5saW1pdCApCisgICAgICB7CisgICAgICAgIFQxX1Rva2VuUmVjICB0b2tlbjsKKworCisgICAgICAgIHBzX3BhcnNlcl90b190b2tlbiggcGFyc2VyLCAmdG9rZW4gKTsKKyAgICAgICAgaWYgKCAhdG9rZW4udHlwZSApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCB0b2tlbnMgIT0gTlVMTCAmJiBjdXIgPCBsaW1pdCApCisgICAgICAgICAgKmN1ciA9IHRva2VuOworCisgICAgICAgIGN1cisrOworICAgICAgfQorCisgICAgICAqcG51bV90b2tlbnMgPSAoRlRfSW50KSggY3VyIC0gdG9rZW5zICk7CisKKyAgICAgIHBhcnNlci0+Y3Vyc29yID0gb2xkX2N1cnNvcjsKKyAgICAgIHBhcnNlci0+bGltaXQgID0gb2xkX2xpbWl0OworICAgIH0KKyAgfQorCisKKyAgLyogZmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBkZWxpbWl0ZXIgb3IgYSBwYXJ0IG9mIGEgbnVtYmVyICovCisgIC8qIE5COiBgY29vcmRzJyBjYW4gYmUgTlVMTCBpZiB3ZSBqdXN0IHdhbnQgdG8gc2tpcCB0aGUgICAgICAqLworICAvKiAgICAgYXJyYXk7IGluIHRoaXMgY2FzZSB3ZSBpZ25vcmUgYG1heF9jb29yZHMnICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfSW50CisgIHBzX3RvY29vcmRhcnJheSggRlRfQnl0ZSogICphY3VyLAorICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBtYXhfY29vcmRzLAorICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgY29vcmRzICkKKyAgeworICAgIEZUX0J5dGUqICBjdXIgICA9ICphY3VyOworICAgIEZUX0ludCAgICBjb3VudCA9IDA7CisgICAgRlRfQnl0ZSAgIGMsIGVuZGVyOworCisKKyAgICBpZiAoIGN1ciA+PSBsaW1pdCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBjaGVjayBmb3IgdGhlIGJlZ2lubmluZyBvZiBhbiBhcnJheTsgb3RoZXJ3aXNlLCBvbmx5IG9uZSBudW1iZXIgKi8KKyAgICAvKiB3aWxsIGJlIHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjICAgICA9ICpjdXI7CisgICAgZW5kZXIgPSAwOworCisgICAgaWYgKCBjID09ICdbJyApCisgICAgICBlbmRlciA9ICddJzsKKyAgICBlbHNlIGlmICggYyA9PSAneycgKQorICAgICAgZW5kZXIgPSAnfSc7CisKKyAgICBpZiAoIGVuZGVyICkKKyAgICAgIGN1cisrOworCisgICAgLyogbm93LCByZWFkIHRoZSBjb29yZGluYXRlcyAqLworICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgIHsKKyAgICAgIEZUX1Nob3J0ICBkdW1teTsKKyAgICAgIEZUX0J5dGUqICBvbGRfY3VyOworCisKKyAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBpbiBmcm9udCBvZiBkYXRhICovCisgICAgICBza2lwX3NwYWNlcyggJmN1ciwgbGltaXQgKTsKKyAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoICpjdXIgPT0gZW5kZXIgKQorICAgICAgeworICAgICAgICBjdXIrKzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIG9sZF9jdXIgPSBjdXI7CisKKyAgICAgIGlmICggY29vcmRzICE9IE5VTEwgJiYgY291bnQgPj0gbWF4X2Nvb3JkcyApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBjYWxsIFBTX0NvbnZfVG9GaXhlZCgpIGV2ZW4gaWYgY29vcmRzID09IE5VTEwgKi8KKyAgICAgIC8qIHRvIHByb3Blcmx5IHBhcnNlIG51bWJlciBhdCBgY3VyJyAgICAgICAgICAgICAqLworICAgICAgKiggY29vcmRzICE9IE5VTEwgPyAmY29vcmRzW2NvdW50XSA6ICZkdW1teSApID0KKyAgICAgICAgKEZUX1Nob3J0KSggUFNfQ29udl9Ub0ZpeGVkKCAmY3VyLCBsaW1pdCwgMCApID4+IDE2ICk7CisKKyAgICAgIGlmICggb2xkX2N1ciA9PSBjdXIgKQorICAgICAgeworICAgICAgICBjb3VudCA9IC0xOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGNvdW50Kys7CisKKyAgICAgIGlmICggIWVuZGVyICkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgIEV4aXQ6CisgICAgKmFjdXIgPSBjdXI7CisgICAgcmV0dXJuIGNvdW50OworICB9CisKKworICAvKiBmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGRlbGltaXRlciBvciBhIHBhcnQgb2YgYSBudW1iZXIgKi8KKyAgLyogTkI6IGB2YWx1ZXMnIGNhbiBiZSBOVUxMIGlmIHdlIGp1c3Qgd2FudCB0byBza2lwIHRoZSAgICAgICovCisgIC8qICAgICBhcnJheTsgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSBgbWF4X3ZhbHVlcycgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogcmV0dXJuIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgcGFyc2VkIHZhbHVlcyAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIEZUX0ludAorICBwc190b2ZpeGVkYXJyYXkoIEZUX0J5dGUqICAqYWN1ciwKKyAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgbWF4X3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIHZhbHVlcywKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIHBvd2VyX3RlbiApCisgIHsKKyAgICBGVF9CeXRlKiAgY3VyICAgPSAqYWN1cjsKKyAgICBGVF9JbnQgICAgY291bnQgPSAwOworICAgIEZUX0J5dGUgICBjLCBlbmRlcjsKKworCisgICAgaWYgKCBjdXIgPj0gbGltaXQgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogQ2hlY2sgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYW4gYXJyYXkuICBPdGhlcndpc2UsIG9ubHkgb25lIG51bWJlciAqLworICAgIC8qIHdpbGwgYmUgcmVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjICAgICA9ICpjdXI7CisgICAgZW5kZXIgPSAwOworCisgICAgaWYgKCBjID09ICdbJyApCisgICAgICBlbmRlciA9ICddJzsKKyAgICBlbHNlIGlmICggYyA9PSAneycgKQorICAgICAgZW5kZXIgPSAnfSc7CisKKyAgICBpZiAoIGVuZGVyICkKKyAgICAgIGN1cisrOworCisgICAgLyogbm93LCByZWFkIHRoZSB2YWx1ZXMgKi8KKyAgICB3aGlsZSAoIGN1ciA8IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9GaXhlZCAgZHVtbXk7CisgICAgICBGVF9CeXRlKiAgb2xkX2N1cjsKKworCisgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgaW4gZnJvbnQgb2YgZGF0YSAqLworICAgICAgc2tpcF9zcGFjZXMoICZjdXIsIGxpbWl0ICk7CisgICAgICBpZiAoIGN1ciA+PSBsaW1pdCApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCAqY3VyID09IGVuZGVyICkKKyAgICAgIHsKKyAgICAgICAgY3VyKys7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBvbGRfY3VyID0gY3VyOworCisgICAgICBpZiAoIHZhbHVlcyAhPSBOVUxMICYmIGNvdW50ID49IG1heF92YWx1ZXMgKQorICAgICAgICBicmVhazsKKworICAgICAgLyogY2FsbCBQU19Db252X1RvRml4ZWQoKSBldmVuIGlmIGNvb3JkcyA9PSBOVUxMICovCisgICAgICAvKiB0byBwcm9wZXJseSBwYXJzZSBudW1iZXIgYXQgYGN1cicgICAgICAgICAgICAgKi8KKyAgICAgICooIHZhbHVlcyAhPSBOVUxMID8gJnZhbHVlc1tjb3VudF0gOiAmZHVtbXkgKSA9CisgICAgICAgIFBTX0NvbnZfVG9GaXhlZCggJmN1ciwgbGltaXQsIHBvd2VyX3RlbiApOworCisgICAgICBpZiAoIG9sZF9jdXIgPT0gY3VyICkKKyAgICAgIHsKKyAgICAgICAgY291bnQgPSAtMTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBjb3VudCsrOworCisgICAgICBpZiAoICFlbmRlciApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICBFeGl0OgorICAgICphY3VyID0gY3VyOworICAgIHJldHVybiBjb3VudDsKKyAgfQorCisKKyNpZiAwCisKKyAgc3RhdGljIEZUX1N0cmluZyoKKyAgcHNfdG9zdHJpbmcoIEZUX0J5dGUqKiAgY3Vyc29yLAorICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX0J5dGUqICAgIGN1ciA9ICpjdXJzb3I7CisgICAgRlRfVUludCAgICAgbGVuID0gMDsKKyAgICBGVF9JbnQgICAgICBjb3VudDsKKyAgICBGVF9TdHJpbmcqICByZXN1bHQ7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKworICAgIC8qIFhYWDogc29tZSBzdHVwaWQgZm9udHMgaGF2ZSBhIGBOb3RpY2UnIG9yIGBDb3B5cmlnaHQnIHN0cmluZyAgICAgKi8KKyAgICAvKiAgICAgIHRoYXQgc2ltcGx5IGRvZXNuJ3QgYmVnaW4gd2l0aCBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLCBldmVuICovCisgICAgLyogICAgICB0aG91Z2ggdGhleSBoYXZlIGEgY2xvc2luZyBvbmUhICBFLmcuICJhbXVuY2lhbC5wZmIiICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgIFdlIG11c3QgZGVhbCB3aXRoIHRoZXNlIGlsbC1mYXRlZCBjYXNlcyB0aGVyZS4gIE5vdGUgdGhhdCAgICovCisgICAgLyogICAgICB0aGVzZSBmb250cyBkaWRuJ3Qgd29yayB3aXRoIHRoZSBvbGQgVHlwZSAxIGRyaXZlciBhcyB0aGUgICAqLworICAgIC8qICAgICAgbm90aWNlL2NvcHlyaWdodCB3YXMgbm90IHJlY29nbml6ZWQgYXMgYSB2YWxpZCBzdHJpbmcgdG9rZW4gKi8KKyAgICAvKiAgICAgIGFuZCBtYWRlIHRoZSBvbGQgdG9rZW4gcGFyc2VyIGNvbW1pdCBlcnJvcnMuICAgICAgICAgICAgICAgICovCisKKyAgICB3aGlsZSAoIGN1ciA8IGxpbWl0ICYmICggKmN1ciA9PSAnICcgfHwgKmN1ciA9PSAnXHQnICkgKQorICAgICAgY3VyKys7CisgICAgaWYgKCBjdXIgKyAxID49IGxpbWl0ICkKKyAgICAgIHJldHVybiAwOworCisgICAgaWYgKCAqY3VyID09ICcoJyApCisgICAgICBjdXIrKzsgIC8qIHNraXAgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMsIGlmIHRoZXJlIGlzIG9uZSAqLworCisgICAgKmN1cnNvciA9IGN1cjsKKyAgICBjb3VudCAgID0gMDsKKworICAgIC8qIHRoZW4sIGNvdW50IGl0cyBsZW5ndGggKi8KKyAgICBmb3IgKCA7IGN1ciA8IGxpbWl0OyBjdXIrKyApCisgICAgeworICAgICAgaWYgKCAqY3VyID09ICcoJyApCisgICAgICAgIGNvdW50Kys7CisKKyAgICAgIGVsc2UgaWYgKCAqY3VyID09ICcpJyApCisgICAgICB7CisgICAgICAgIGNvdW50LS07CisgICAgICAgIGlmICggY291bnQgPCAwICkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsZW4gPSAoRlRfVUludCkoIGN1ciAtICpjdXJzb3IgKTsKKyAgICBpZiAoIGN1ciA+PSBsaW1pdCB8fCBGVF9BTExPQyggcmVzdWx0LCBsZW4gKyAxICkgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBub3cgY29weSB0aGUgc3RyaW5nICovCisgICAgRlRfTUVNX0NPUFkoIHJlc3VsdCwgKmN1cnNvciwgbGVuICk7CisgICAgcmVzdWx0W2xlbl0gPSAnXDAnOworICAgICpjdXJzb3IgPSBjdXI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisjZW5kaWYgLyogMCAqLworCisKKyAgc3RhdGljIGludAorICBwc190b2Jvb2woIEZUX0J5dGUqICAqYWN1ciwKKyAgICAgICAgICAgICBGVF9CeXRlKiAgIGxpbWl0ICkKKyAgeworICAgIEZUX0J5dGUqICBjdXIgICAgPSAqYWN1cjsKKyAgICBGVF9Cb29sICAgcmVzdWx0ID0gMDsKKworCisgICAgLyogcmV0dXJuIDEgaWYgd2UgZmluZCBgdHJ1ZScsIDAgb3RoZXJ3aXNlICovCisgICAgaWYgKCBjdXIgKyAzIDwgbGltaXQgJiYKKyAgICAgICAgIGN1clswXSA9PSAndCcgICAmJgorICAgICAgICAgY3VyWzFdID09ICdyJyAgICYmCisgICAgICAgICBjdXJbMl0gPT0gJ3UnICAgJiYKKyAgICAgICAgIGN1clszXSA9PSAnZScgICApCisgICAgeworICAgICAgcmVzdWx0ID0gMTsKKyAgICAgIGN1ciAgICs9IDU7CisgICAgfQorICAgIGVsc2UgaWYgKCBjdXIgKyA0IDwgbGltaXQgJiYKKyAgICAgICAgICAgICAgY3VyWzBdID09ICdmJyAgICYmCisgICAgICAgICAgICAgIGN1clsxXSA9PSAnYScgICAmJgorICAgICAgICAgICAgICBjdXJbMl0gPT0gJ2wnICAgJiYKKyAgICAgICAgICAgICAgY3VyWzNdID09ICdzJyAgICYmCisgICAgICAgICAgICAgIGN1cls0XSA9PSAnZScgICApCisgICAgeworICAgICAgcmVzdWx0ID0gMDsKKyAgICAgIGN1ciAgICs9IDY7CisgICAgfQorCisgICAgKmFjdXIgPSBjdXI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogbG9hZCBhIHNpbXBsZSBmaWVsZCAoaS5lLiBub24tdGFibGUpIGludG8gdGhlIGN1cnJlbnQgbGlzdCBvZiBvYmplY3RzICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHBzX3BhcnNlcl9sb2FkX2ZpZWxkKCBQU19QYXJzZXIgICAgICAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVDFfRmllbGQgIGZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqICAgICAgICAgIG9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbWF4X29iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICAgcGZsYWdzICkKKyAgeworICAgIFQxX1Rva2VuUmVjICAgdG9rZW47CisgICAgRlRfQnl0ZSogICAgICBjdXI7CisgICAgRlRfQnl0ZSogICAgICBsaW1pdDsKKyAgICBGVF9VSW50ICAgICAgIGNvdW50OworICAgIEZUX1VJbnQgICAgICAgaWR4OworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgVDFfRmllbGRUeXBlICB0eXBlOworCisKKyAgICAvKiB0aGlzIGFsc28gc2tpcHMgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgcHNfcGFyc2VyX3RvX3Rva2VuKCBwYXJzZXIsICZ0b2tlbiApOworICAgIGlmICggIXRva2VuLnR5cGUgKQorICAgICAgZ290byBGYWlsOworCisgICAgY291bnQgPSAxOworICAgIGlkeCAgID0gMDsKKyAgICBjdXIgICA9IHRva2VuLnN0YXJ0OworICAgIGxpbWl0ID0gdG9rZW4ubGltaXQ7CisKKyAgICB0eXBlID0gZmllbGQtPnR5cGU7CisKKyAgICAvKiB3ZSBtdXN0IGRldGVjdCBhcnJheXMgaW4gL0ZvbnRCQm94ICovCisgICAgaWYgKCB0eXBlID09IFQxX0ZJRUxEX1RZUEVfQkJPWCApCisgICAgeworICAgICAgVDFfVG9rZW5SZWMgIHRva2VuMjsKKyAgICAgIEZUX0J5dGUqICAgICBvbGRfY3VyICAgPSBwYXJzZXItPmN1cnNvcjsKKyAgICAgIEZUX0J5dGUqICAgICBvbGRfbGltaXQgPSBwYXJzZXItPmxpbWl0OworCisKKyAgICAgIC8qIGRvbid0IGluY2x1ZGUgZGVsaW1pdGVycyAqLworICAgICAgcGFyc2VyLT5jdXJzb3IgPSB0b2tlbi5zdGFydCArIDE7CisgICAgICBwYXJzZXItPmxpbWl0ICA9IHRva2VuLmxpbWl0IC0gMTsKKworICAgICAgcHNfcGFyc2VyX3RvX3Rva2VuKCBwYXJzZXIsICZ0b2tlbjIgKTsKKyAgICAgIHBhcnNlci0+Y3Vyc29yID0gb2xkX2N1cjsKKyAgICAgIHBhcnNlci0+bGltaXQgID0gb2xkX2xpbWl0OworCisgICAgICBpZiAoIHRva2VuMi50eXBlID09IFQxX1RPS0VOX1RZUEVfQVJSQVkgKQorICAgICAgeworICAgICAgICB0eXBlID0gVDFfRklFTERfVFlQRV9NTV9CQk9YOworICAgICAgICBnb3RvIEZpZWxkQXJyYXk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB0b2tlbi50eXBlID09IFQxX1RPS0VOX1RZUEVfQVJSQVkgKQorICAgIHsKKyAgICAgIGNvdW50ID0gbWF4X29iamVjdHM7CisKKyAgICBGaWVsZEFycmF5OgorICAgICAgLyogaWYgdGhpcyBpcyBhbiBhcnJheSBhbmQgd2UgaGF2ZSBubyBibGVuZCwgYW4gZXJyb3Igb2NjdXJzICovCisgICAgICBpZiAoIG1heF9vYmplY3RzID09IDAgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGlkeCA9IDE7CisKKyAgICAgIC8qIGRvbid0IGluY2x1ZGUgZGVsaW1pdGVycyAqLworICAgICAgY3VyKys7CisgICAgICBsaW1pdC0tOworICAgIH0KKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBpZHgrKyApCisgICAgeworICAgICAgRlRfQnl0ZSogICAgcSA9IChGVF9CeXRlKilvYmplY3RzW2lkeF0gKyBmaWVsZC0+b2Zmc2V0OworICAgICAgRlRfTG9uZyAgICAgdmFsOworICAgICAgRlRfU3RyaW5nKiAgc3RyaW5nOworCisKKyAgICAgIHNraXBfc3BhY2VzKCAmY3VyLCBsaW1pdCApOworCisgICAgICBzd2l0Y2ggKCB0eXBlICkKKyAgICAgIHsKKyAgICAgIGNhc2UgVDFfRklFTERfVFlQRV9CT09MOgorICAgICAgICB2YWwgPSBwc190b2Jvb2woICZjdXIsIGxpbWl0ICk7CisgICAgICAgIGdvdG8gU3RvcmVfSW50ZWdlcjsKKworICAgICAgY2FzZSBUMV9GSUVMRF9UWVBFX0ZJWEVEOgorICAgICAgICB2YWwgPSBQU19Db252X1RvRml4ZWQoICZjdXIsIGxpbWl0LCAwICk7CisgICAgICAgIGdvdG8gU3RvcmVfSW50ZWdlcjsKKworICAgICAgY2FzZSBUMV9GSUVMRF9UWVBFX0ZJWEVEXzEwMDA6CisgICAgICAgIHZhbCA9IFBTX0NvbnZfVG9GaXhlZCggJmN1ciwgbGltaXQsIDMgKTsKKyAgICAgICAgZ290byBTdG9yZV9JbnRlZ2VyOworCisgICAgICBjYXNlIFQxX0ZJRUxEX1RZUEVfSU5URUdFUjoKKyAgICAgICAgdmFsID0gUFNfQ29udl9Ub0ludCggJmN1ciwgbGltaXQgKTsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgIFN0b3JlX0ludGVnZXI6CisgICAgICAgIHN3aXRjaCAoIGZpZWxkLT5zaXplICkKKyAgICAgICAgeworICAgICAgICBjYXNlICg4IC8gRlRfQ0hBUl9CSVQpOgorICAgICAgICAgICooRlRfQnl0ZSopcSA9IChGVF9CeXRlKXZhbDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICgxNiAvIEZUX0NIQVJfQklUKToKKyAgICAgICAgICAqKEZUX1VTaG9ydCopcSA9IChGVF9VU2hvcnQpdmFsOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgKDMyIC8gRlRfQ0hBUl9CSVQpOgorICAgICAgICAgICooRlRfVUludDMyKilxID0gKEZUX1VJbnQzMil2YWw7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLyogZm9yIDY0LWJpdCBzeXN0ZW1zICovCisgICAgICAgICAgKihGVF9Mb25nKilxID0gdmFsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFQxX0ZJRUxEX1RZUEVfU1RSSU5HOgorICAgICAgY2FzZSBUMV9GSUVMRF9UWVBFX0tFWToKKyAgICAgICAgeworICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGFyc2VyLT5tZW1vcnk7CisgICAgICAgICAgRlRfVUludCAgICBsZW4gICAgPSAoRlRfVUludCkoIGxpbWl0IC0gY3VyICk7CisKKworICAgICAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogd2UgYWxsb3cgYm90aCBhIHN0cmluZyBvciBhIG5hbWUgICAqLworICAgICAgICAgIC8qIGZvciBjYXNlcyBsaWtlIC9Gb250TmFtZSAoZm9vKSBkZWYgKi8KKyAgICAgICAgICBpZiAoIHRva2VuLnR5cGUgPT0gVDFfVE9LRU5fVFlQRV9LRVkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGRvbid0IGluY2x1ZGUgbGVhZGluZyBgLycgKi8KKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgY3VyKys7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCB0b2tlbi50eXBlID09IFQxX1RPS0VOX1RZUEVfU1RSSU5HICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBkb24ndCBpbmNsdWRlIGRlbGltaXRpbmcgcGFyZW50aGVzZXMgICAgKi8KKyAgICAgICAgICAgIC8qIFhYWCB3ZSBkb24ndCBoYW5kbGUgPDwuLi4+PiBoZXJlICAgICAgICAqLworICAgICAgICAgICAgLyogWFhYIHNob3VsZCB3ZSBjb252ZXJ0IG9jdGFsIGVzY2FwZXM/ICAgICovCisgICAgICAgICAgICAvKiAgICAgaWYgc28sIHdoYXQgZW5jb2Rpbmcgc2hvdWxkIHdlIHVzZT8gKi8KKyAgICAgICAgICAgIGN1cisrOworICAgICAgICAgICAgbGVuIC09IDI7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9FUlJPUigoICJwc19wYXJzZXJfbG9hZF9maWVsZDoiCisgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgYSBuYW1lIG9yIHN0cmluZ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAgICAiIGJ1dCBmb3VuZCB0b2tlbiBvZiB0eXBlICVkIGluc3RlYWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgKSk7CisgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZm9yIHRoaXMgdG8gd29yayAoRlRfU3RyaW5nKiopcSBtdXN0IGhhdmUgYmVlbiAqLworICAgICAgICAgIC8qIGluaXRpYWxpemVkIHRvIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoICooRlRfU3RyaW5nKiopcSAhPSBOVUxMICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTAoKCAicHNfcGFyc2VyX2xvYWRfZmllbGQ6IG92ZXJ3cml0aW5nIGZpZWxkICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPmlkZW50ICkpOworICAgICAgICAgICAgRlRfRlJFRSggKihGVF9TdHJpbmcqKilxICk7CisgICAgICAgICAgICAqKEZUX1N0cmluZyoqKXEgPSBOVUxMOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggRlRfQUxMT0MoIHN0cmluZywgbGVuICsgMSApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgIEZUX01FTV9DT1BZKCBzdHJpbmcsIGN1ciwgbGVuICk7CisgICAgICAgICAgc3RyaW5nW2xlbl0gPSAwOworCisgICAgICAgICAgKihGVF9TdHJpbmcqKilxID0gc3RyaW5nOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFQxX0ZJRUxEX1RZUEVfQkJPWDoKKyAgICAgICAgeworICAgICAgICAgIEZUX0ZpeGVkICB0ZW1wWzRdOworICAgICAgICAgIEZUX0JCb3gqICBiYm94ID0gKEZUX0JCb3gqKXE7CisgICAgICAgICAgRlRfSW50ICAgIHJlc3VsdDsKKworCisgICAgICAgICAgcmVzdWx0ID0gcHNfdG9maXhlZGFycmF5KCAmY3VyLCBsaW1pdCwgNCwgdGVtcCwgMCApOworCisgICAgICAgICAgaWYgKCByZXN1bHQgPCA0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9FUlJPUigoICJwc19wYXJzZXJfbG9hZF9maWVsZDoiCisgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgZm91ciBpbnRlZ2VycyBpbiBib3VuZGluZyBib3hcbiIgKSk7CisgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgYmJveC0+eE1pbiA9IEZUX1JvdW5kRml4KCB0ZW1wWzBdICk7CisgICAgICAgICAgYmJveC0+eU1pbiA9IEZUX1JvdW5kRml4KCB0ZW1wWzFdICk7CisgICAgICAgICAgYmJveC0+eE1heCA9IEZUX1JvdW5kRml4KCB0ZW1wWzJdICk7CisgICAgICAgICAgYmJveC0+eU1heCA9IEZUX1JvdW5kRml4KCB0ZW1wWzNdICk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVDFfRklFTERfVFlQRV9NTV9CQk9YOgorICAgICAgICB7CisgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBwYXJzZXItPm1lbW9yeTsKKyAgICAgICAgICBGVF9GaXhlZCogIHRlbXA7CisgICAgICAgICAgRlRfSW50ICAgICByZXN1bHQ7CisgICAgICAgICAgRlRfVUludCAgICBpOworCisKKyAgICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggdGVtcCwgbWF4X29iamVjdHMgKiA0ICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBzX3RvZml4ZWRhcnJheSggJmN1ciwgbGltaXQsIChGVF9JbnQpbWF4X29iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKyBpICogbWF4X29iamVjdHMsIDAgKTsKKyAgICAgICAgICAgIGlmICggcmVzdWx0IDwgMCB8fCAoRlRfVUludClyZXN1bHQgPCBtYXhfb2JqZWN0cyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggInBzX3BhcnNlcl9sb2FkX2ZpZWxkOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGV4cGVjdGVkICVkIGludGVnZXJzIGluIHRoZSAlcyBzdWJhcnJheVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZiAvRm9udEJCb3ggaW4gdGhlIC9CbGVuZCBkaWN0aW9uYXJ5XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9vYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT0gMCA/ICJmaXJzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMSA/ICJzZWNvbmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMiA/ICJ0aGlyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImZvdXJ0aCIgKSApICkpOworICAgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2tpcF9zcGFjZXMoICZjdXIsIGxpbWl0ICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBtYXhfb2JqZWN0czsgaSsrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9CQm94KiAgYmJveCA9IChGVF9CQm94KilvYmplY3RzW2ldOworCisKKyAgICAgICAgICAgIGJib3gtPnhNaW4gPSBGVF9Sb3VuZEZpeCggdGVtcFtpICAgICAgICAgICAgICAgICAgXSApOworICAgICAgICAgICAgYmJveC0+eU1pbiA9IEZUX1JvdW5kRml4KCB0ZW1wW2kgKyAgICAgbWF4X29iamVjdHNdICk7CisgICAgICAgICAgICBiYm94LT54TWF4ID0gRlRfUm91bmRGaXgoIHRlbXBbaSArIDIgKiBtYXhfb2JqZWN0c10gKTsKKyAgICAgICAgICAgIGJib3gtPnlNYXggPSBGVF9Sb3VuZEZpeCggdGVtcFtpICsgMyAqIG1heF9vYmplY3RzXSApOworICAgICAgICAgIH0KKworICAgICAgICAgIEZUX0ZSRUUoIHRlbXAgKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogYW4gZXJyb3Igb2NjdXJyZWQgKi8KKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorICAgIH0KKworI2lmIDAgIC8qIG9ic29sZXRlIC0tIGtlZXAgZm9yIHJlZmVyZW5jZSAqLworICAgIGlmICggcGZsYWdzICkKKyAgICAgICpwZmxhZ3MgfD0gMUwgPDwgZmllbGQtPmZsYWdfYml0OworI2Vsc2UKKyAgICBGVF9VTlVTRUQoIHBmbGFncyApOworI2VuZGlmCisKKyAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisjZGVmaW5lIFQxX01BWF9UQUJMRV9FTEVNRU5UUyAgMzIKKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwc19wYXJzZXJfbG9hZF9maWVsZF90YWJsZSggUFNfUGFyc2VyICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxX0ZpZWxkICBmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiAgICAgICAgICBvYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIG1heF9vYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgIHBmbGFncyApCisgIHsKKyAgICBUMV9Ub2tlblJlYyAgZWxlbWVudHNbVDFfTUFYX1RBQkxFX0VMRU1FTlRTXTsKKyAgICBUMV9Ub2tlbiAgICAgdG9rZW47CisgICAgRlRfSW50ICAgICAgIG51bV9lbGVtZW50czsKKyAgICBGVF9FcnJvciAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSogICAgIG9sZF9jdXJzb3I7CisgICAgRlRfQnl0ZSogICAgIG9sZF9saW1pdDsKKyAgICBUMV9GaWVsZFJlYyAgZmllbGRyZWMgPSAqKFQxX0ZpZWxkKWZpZWxkOworCisKKyAgICBmaWVsZHJlYy50eXBlID0gVDFfRklFTERfVFlQRV9JTlRFR0VSOworICAgIGlmICggZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9GSVhFRF9BUlJBWSB8fAorICAgICAgICAgZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9CQk9YICAgICAgICApCisgICAgICBmaWVsZHJlYy50eXBlID0gVDFfRklFTERfVFlQRV9GSVhFRDsKKworICAgIHBzX3BhcnNlcl90b190b2tlbl9hcnJheSggcGFyc2VyLCBlbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxX01BWF9UQUJMRV9FTEVNRU5UUywgJm51bV9lbGVtZW50cyApOworICAgIGlmICggbnVtX2VsZW1lbnRzIDwgMCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIElnbm9yZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBpZiAoIChGVF9VSW50KW51bV9lbGVtZW50cyA+IGZpZWxkLT5hcnJheV9tYXggKQorICAgICAgbnVtX2VsZW1lbnRzID0gKEZUX0ludClmaWVsZC0+YXJyYXlfbWF4OworCisgICAgb2xkX2N1cnNvciA9IHBhcnNlci0+Y3Vyc29yOworICAgIG9sZF9saW1pdCAgPSBwYXJzZXItPmxpbWl0OworCisgICAgLyogd2Ugc3RvcmUgdGhlIGVsZW1lbnRzIGNvdW50IGlmIG5lY2Vzc2FyeTsgICAgICAgICAgICovCisgICAgLyogd2UgZnVydGhlciBhc3N1bWUgdGhhdCBgY291bnRfb2Zmc2V0JyBjYW4ndCBiZSB6ZXJvICovCisgICAgaWYgKCBmaWVsZC0+dHlwZSAhPSBUMV9GSUVMRF9UWVBFX0JCT1ggJiYgZmllbGQtPmNvdW50X29mZnNldCAhPSAwICkKKyAgICAgICooRlRfQnl0ZSopKCAoRlRfQnl0ZSopb2JqZWN0c1swXSArIGZpZWxkLT5jb3VudF9vZmZzZXQgKSA9CisgICAgICAgIChGVF9CeXRlKW51bV9lbGVtZW50czsKKworICAgIC8qIHdlIG5vdyBsb2FkIGVhY2ggZWxlbWVudCwgYWRqdXN0aW5nIHRoZSBmaWVsZC5vZmZzZXQgb24gZWFjaCBvbmUgKi8KKyAgICB0b2tlbiA9IGVsZW1lbnRzOworICAgIGZvciAoIDsgbnVtX2VsZW1lbnRzID4gMDsgbnVtX2VsZW1lbnRzLS0sIHRva2VuKysgKQorICAgIHsKKyAgICAgIHBhcnNlci0+Y3Vyc29yID0gdG9rZW4tPnN0YXJ0OworICAgICAgcGFyc2VyLT5saW1pdCAgPSB0b2tlbi0+bGltaXQ7CisKKyAgICAgIGVycm9yID0gcHNfcGFyc2VyX2xvYWRfZmllbGQoIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZHJlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfb2JqZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBicmVhazsKKworICAgICAgZmllbGRyZWMub2Zmc2V0ICs9IGZpZWxkcmVjLnNpemU7CisgICAgfQorCisjaWYgMCAgLyogb2Jzb2xldGUgLS0ga2VlcCBmb3IgcmVmZXJlbmNlICovCisgICAgaWYgKCBwZmxhZ3MgKQorICAgICAgKnBmbGFncyB8PSAxTCA8PCBmaWVsZC0+ZmxhZ19iaXQ7CisjZWxzZQorICAgIEZUX1VOVVNFRCggcGZsYWdzICk7CisjZW5kaWYKKworICAgIHBhcnNlci0+Y3Vyc29yID0gb2xkX2N1cnNvcjsKKyAgICBwYXJzZXItPmxpbWl0ICA9IG9sZF9saW1pdDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Mb25nICkKKyAgcHNfcGFyc2VyX3RvX2ludCggUFNfUGFyc2VyICBwYXJzZXIgKQorICB7CisgICAgcHNfcGFyc2VyX3NraXBfc3BhY2VzKCBwYXJzZXIgKTsKKyAgICByZXR1cm4gUFNfQ29udl9Ub0ludCggJnBhcnNlci0+Y3Vyc29yLCBwYXJzZXItPmxpbWl0ICk7CisgIH0KKworCisgIC8qIGZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGA8JyBpZiBgZGVsaW1pdGVycycgaXMgbm9uLXplcm8gKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcHNfcGFyc2VyX3RvX2J5dGVzKCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbWF4X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgcG51bV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIGRlbGltaXRlcnMgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX0J5dGUqICBjdXI7CisKKworICAgIHBzX3BhcnNlcl9za2lwX3NwYWNlcyggcGFyc2VyICk7CisgICAgY3VyID0gcGFyc2VyLT5jdXJzb3I7CisKKyAgICBpZiAoIGN1ciA+PSBwYXJzZXItPmxpbWl0ICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggZGVsaW1pdGVycyApCisgICAgeworICAgICAgaWYgKCAqY3VyICE9ICc8JyApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInBzX3BhcnNlcl90b19ieXRlczogTWlzc2luZyBzdGFydGluZyBkZWxpbWl0ZXIgYDwnXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgY3VyKys7CisgICAgfQorCisgICAgKnBudW1fYnl0ZXMgPSBQU19Db252X0FTQ0lJSGV4RGVjb2RlKCAmY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2J5dGVzICk7CisKKyAgICBpZiAoIGRlbGltaXRlcnMgKQorICAgIHsKKyAgICAgIGlmICggY3VyIDwgcGFyc2VyLT5saW1pdCAmJiAqY3VyICE9ICc+JyApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInBzX3BhcnNlcl90b19ieXRlczogTWlzc2luZyBjbG9zaW5nIGRlbGltaXRlciBgPidcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICBwYXJzZXItPmN1cnNvciA9IGN1cjsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9GaXhlZCApCisgIHBzX3BhcnNlcl90b19maXhlZCggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBwb3dlcl90ZW4gKQorICB7CisgICAgcHNfcGFyc2VyX3NraXBfc3BhY2VzKCBwYXJzZXIgKTsKKyAgICByZXR1cm4gUFNfQ29udl9Ub0ZpeGVkKCAmcGFyc2VyLT5jdXJzb3IsIHBhcnNlci0+bGltaXQsIHBvd2VyX3RlbiApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0ludCApCisgIHBzX3BhcnNlcl90b19jb29yZF9hcnJheSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBtYXhfY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgY29vcmRzICkKKyAgeworICAgIHBzX3BhcnNlcl9za2lwX3NwYWNlcyggcGFyc2VyICk7CisgICAgcmV0dXJuIHBzX3RvY29vcmRhcnJheSggJnBhcnNlci0+Y3Vyc29yLCBwYXJzZXItPmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9jb29yZHMsIGNvb3JkcyApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0ludCApCisgIHBzX3BhcnNlcl90b19maXhlZF9hcnJheSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBtYXhfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgcG93ZXJfdGVuICkKKyAgeworICAgIHBzX3BhcnNlcl9za2lwX3NwYWNlcyggcGFyc2VyICk7CisgICAgcmV0dXJuIHBzX3RvZml4ZWRhcnJheSggJnBhcnNlci0+Y3Vyc29yLCBwYXJzZXItPmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF92YWx1ZXMsIHZhbHVlcywgcG93ZXJfdGVuICk7CisgIH0KKworCisjaWYgMAorCisgIEZUX0xPQ0FMX0RFRiggRlRfU3RyaW5nKiApCisgIFQxX1RvU3RyaW5nKCBQU19QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICByZXR1cm4gcHNfdG9zdHJpbmcoICZwYXJzZXItPmN1cnNvciwgcGFyc2VyLT5saW1pdCwgcGFyc2VyLT5tZW1vcnkgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgVDFfVG9Cb29sKCBQU19QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICByZXR1cm4gcHNfdG9ib29sKCAmcGFyc2VyLT5jdXJzb3IsIHBhcnNlci0+bGltaXQgKTsKKyAgfQorCisjZW5kaWYgLyogMCAqLworCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfcGFyc2VyX2luaXQoIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBiYXNlLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIHBhcnNlci0+ZXJyb3IgID0gRlRfRXJyX09rOworICAgIHBhcnNlci0+YmFzZSAgID0gYmFzZTsKKyAgICBwYXJzZXItPmxpbWl0ICA9IGxpbWl0OworICAgIHBhcnNlci0+Y3Vyc29yID0gYmFzZTsKKyAgICBwYXJzZXItPm1lbW9yeSA9IG1lbW9yeTsKKyAgICBwYXJzZXItPmZ1bmNzICA9IHBzX3BhcnNlcl9mdW5jczsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfcGFyc2VyX2RvbmUoIFBTX1BhcnNlciAgcGFyc2VyICkKKyAgeworICAgIEZUX1VOVVNFRCggcGFyc2VyICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMSBCVUlMREVSICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHQxX2J1aWxkZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluaXRpYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1aWxkZXIgOjogQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGluaXRpYWxpemUuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSAgICA6OiBUaGUgY3VycmVudCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaCAgIDo6IFRoZSBjdXJyZW50IGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhpbnRpbmcgOjogV2hldGhlciBoaW50aW5nIHNob3VsZCBiZSBhcHBsaWVkLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgdDFfYnVpbGRlcl9pbml0KCBUMV9CdWlsZGVyICAgIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIGdseXBoLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgaGludGluZyApCisgIHsKKyAgICBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9IFQxX1BhcnNlX1N0YXJ0OworICAgIGJ1aWxkZXItPmxvYWRfcG9pbnRzID0gMTsKKworICAgIGJ1aWxkZXItPmZhY2UgICA9IGZhY2U7CisgICAgYnVpbGRlci0+Z2x5cGggID0gZ2x5cGg7CisgICAgYnVpbGRlci0+bWVtb3J5ID0gZmFjZS0+bWVtb3J5OworCisgICAgaWYgKCBnbHlwaCApCisgICAgeworICAgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IGdseXBoLT5pbnRlcm5hbC0+bG9hZGVyOworCisKKyAgICAgIGJ1aWxkZXItPmxvYWRlciAgPSBsb2FkZXI7CisgICAgICBidWlsZGVyLT5iYXNlICAgID0gJmxvYWRlci0+YmFzZS5vdXRsaW5lOworICAgICAgYnVpbGRlci0+Y3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKKyAgICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CisKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBzaXplLT5pbnRlcm5hbDsKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2Z1bmNzICAgPSBOVUxMOworCisgICAgICBpZiAoIGhpbnRpbmcgKQorICAgICAgICBidWlsZGVyLT5oaW50c19mdW5jcyA9IGdseXBoLT5pbnRlcm5hbC0+Z2x5cGhfaGludHM7CisgICAgfQorCisgICAgYnVpbGRlci0+cG9zX3ggPSAwOworICAgIGJ1aWxkZXItPnBvc195ID0gMDsKKworICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gMDsKKyAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IDA7CisgICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgPSAwOworICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgID0gMDsKKworICAgIGJ1aWxkZXItPmZ1bmNzID0gdDFfYnVpbGRlcl9mdW5jczsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdDFfYnVpbGRlcl9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZCAgICovCisgIC8qICAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbiAgICAgICAqLworICAvKiAgICB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBidWlsZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBmaW5hbGl6ZS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHQxX2J1aWxkZXJfZG9uZSggVDFfQnVpbGRlciAgYnVpbGRlciApCisgIHsKKyAgICBGVF9HbHlwaFNsb3QgIGdseXBoID0gYnVpbGRlci0+Z2x5cGg7CisKKworICAgIGlmICggZ2x5cGggKQorICAgICAgZ2x5cGgtPm91dGxpbmUgPSAqYnVpbGRlci0+YmFzZTsKKyAgfQorCisKKyAgLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGBjb3VudCcgbW9yZSBwb2ludHMgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfY2hlY2tfcG9pbnRzKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgY291bnQgKQorICB7CisgICAgcmV0dXJuIEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggYnVpbGRlci0+bG9hZGVyLCBjb3VudCwgMCApOworICB9CisKKworICAvKiBhZGQgYSBuZXcgcG9pbnQsIGRvIG5vdCBjaGVjayBzcGFjZSAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0MV9idWlsZGVyX2FkZF9wb2ludCggVDFfQnVpbGRlciAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICAgZmxhZyApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisKKworICAgIGlmICggYnVpbGRlci0+bG9hZF9wb2ludHMgKQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHBvaW50ICAgPSBvdXRsaW5lLT5wb2ludHMgKyBvdXRsaW5lLT5uX3BvaW50czsKKyAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzOworCisKKyAgICAgIHBvaW50LT54ID0gRklYRURfVE9fSU5UKCB4ICk7CisgICAgICBwb2ludC0+eSA9IEZJWEVEX1RPX0lOVCggeSApOworICAgICAgKmNvbnRyb2wgPSAoRlRfQnl0ZSkoIGZsYWcgPyBGVF9DVVJWRV9UQUdfT04gOiBGVF9DVVJWRV9UQUdfQ1VCSUMgKTsKKyAgICB9CisgICAgb3V0bGluZS0+bl9wb2ludHMrKzsKKyAgfQorCisKKyAgLyogY2hlY2sgc3BhY2UgZm9yIGEgbmV3IG9uLWN1cnZlIHBvaW50LCB0aGVuIGFkZCBpdCAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdDFfYnVpbGRlcl9hZGRfcG9pbnQxKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gdDFfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjaGVjayBzcGFjZSBmb3IgYSBuZXcgY29udG91ciwgdGhlbiBhZGQgaXQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfYWRkX2NvbnRvdXIoIFQxX0J1aWxkZXIgIGJ1aWxkZXIgKQorICB7CisgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSBidWlsZGVyLT5jdXJyZW50OworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKworCisgICAgLyogdGhpcyBtaWdodCBoYXBwZW4gaW4gaW52YWxpZCBmb250cyAqLworICAgIGlmICggIW91dGxpbmUgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInQxX2J1aWxkZXJfYWRkX2NvbnRvdXI6IG5vIG91dGxpbmUgdG8gYWRkIHBvaW50cyB0b1xuIiApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgIH0KKworICAgIGlmICggIWJ1aWxkZXItPmxvYWRfcG9pbnRzICkKKyAgICB7CisgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzKys7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBidWlsZGVyLT5sb2FkZXIsIDAsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSA9CisgICAgICAgICAgKHNob3J0KSggb3V0bGluZS0+bl9wb2ludHMgLSAxICk7CisKKyAgICAgIG91dGxpbmUtPm5fY29udG91cnMrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGlmIGEgcGF0aCB3YXMgYmVndW4sIGFkZCBpdHMgZmlyc3Qgb24tY3VydmUgcG9pbnQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfc3RhcnRfcG9pbnQoIFQxX0J1aWxkZXIgIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKworICAgIC8qIHRlc3Qgd2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgYSBuZXcgY29udG91ciAqLworCisgICAgaWYgKCBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9PSBUMV9QYXJzZV9IYXZlX1BhdGggKQorICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9QYXRoOworICAgICAgZXJyb3IgPSB0MV9idWlsZGVyX2FkZF9jb250b3VyKCBidWlsZGVyICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIGVycm9yID0gdDFfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjbG9zZSB0aGUgY3VycmVudCBjb250b3VyICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHQxX2J1aWxkZXJfY2xvc2VfY29udG91ciggVDFfQnVpbGRlciAgYnVpbGRlciApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisgICAgRlRfSW50ICAgICAgIGZpcnN0OworCisKKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICAgIHJldHVybjsKKworICAgIGZpcnN0ID0gb3V0bGluZS0+bl9jb250b3VycyA8PSAxCisgICAgICAgICAgICA/IDAgOiBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMl0gKyAxOworCisgICAgLyogV2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgbGFzdCBwb2ludCBpbiB0aGUgcGF0aCBpZiBpdCAqLworICAgIC8qIGlzIGxvY2F0ZWQgb24gdGhlIGZpcnN0IHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID4gMSApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgcDEgICAgICA9IG91dGxpbmUtPnBvaW50cyArIGZpcnN0OworICAgICAgRlRfVmVjdG9yKiAgcDIgICAgICA9IG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKyAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKworCisgICAgICAvKiBgZGVsZXRlJyBsYXN0IHBvaW50IG9ubHkgaWYgaXQgY29pbmNpZGVzIHdpdGggdGhlIGZpcnN0ICovCisgICAgICAvKiBwb2ludCBhbmQgaXQgaXMgbm90IGEgY29udHJvbCBwb2ludCAod2hpY2ggY2FuIGhhcHBlbikuICovCisgICAgICBpZiAoIHAxLT54ID09IHAyLT54ICYmIHAxLT55ID09IHAyLT55ICkKKyAgICAgICAgaWYgKCAqY29udHJvbCA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzLS07CisgICAgfQorCisgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgeworICAgICAgLyogRG9uJ3QgYWRkIGNvbnRvdXJzIG9ubHkgY29uc2lzdGluZyBvZiBvbmUgcG9pbnQsIGkuZS4sICAqLworICAgICAgLyogY2hlY2sgd2hldGhlciB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IHBvaW50IGlzIHRoZSBzYW1lLiAqLworICAgICAgaWYgKCBmaXJzdCA9PSBvdXRsaW5lLT5uX3BvaW50cyAtIDEgKQorICAgICAgeworICAgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzLS07CisgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzLS07CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSA9CisgICAgICAgICAgKHNob3J0KSggb3V0bGluZS0+bl9wb2ludHMgLSAxICk7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0MV9kZWNyeXB0KCBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBsZW5ndGgsCisgICAgICAgICAgICAgIEZUX1VTaG9ydCAgc2VlZCApCisgIHsKKyAgICBQU19Db252X0VleGVjRGVjb2RlKCAmYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICZzZWVkICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvcHNvYmpzLmggYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3Bzb2Jqcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODc5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3Bzb2Jqcy5oCkBAIC0wLDAgKzEsMjEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc29ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgUG9zdFNjcmlwdCBmb250cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU09CSlNfSF9fCisjZGVmaW5lIF9fUFNPQkpTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMV9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBQU19UYWJsZV9GdW5jc1JlYyAgICBwc190YWJsZV9mdW5jczsKKworICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBQU19QYXJzZXJfRnVuY3NSZWMgICBwc19wYXJzZXJfZnVuY3M7CisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUKKyAgY29uc3QgVDFfQnVpbGRlcl9GdW5jc1JlYyAgdDFfYnVpbGRlcl9mdW5jczsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBzX3RhYmxlX25ldyggUFNfVGFibGUgICB0YWJsZSwKKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGNvdW50LAorICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgcHNfdGFibGVfYWRkKCBQU19UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgRlRfSW50ICAgIGlkeCwKKyAgICAgICAgICAgICAgICB2b2lkKiAgICAgb2JqZWN0LAorICAgICAgICAgICAgICAgIEZUX1VJbnQgICBsZW5ndGggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX3RhYmxlX2RvbmUoIFBTX1RhYmxlICB0YWJsZSApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc190YWJsZV9yZWxlYXNlKCBQU19UYWJsZSAgdGFibGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMSBQQVJTRVIgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc19wYXJzZXJfc2tpcF9zcGFjZXMoIFBTX1BhcnNlciAgcGFyc2VyICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc19wYXJzZXJfc2tpcF9QU190b2tlbiggUFNfUGFyc2VyICBwYXJzZXIgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX3BhcnNlcl90b190b2tlbiggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgVDFfVG9rZW4gICB0b2tlbiApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcHNfcGFyc2VyX3RvX3Rva2VuX2FycmF5KCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMV9Ub2tlbiAgIHRva2VucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG1heF90b2tlbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgICBwbnVtX3Rva2VucyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBzX3BhcnNlcl9sb2FkX2ZpZWxkKCBQU19QYXJzZXIgICAgICAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVDFfRmllbGQgIGZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqICAgICAgICAgIG9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbWF4X29iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogICAgICAgcGZsYWdzICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgcHNfcGFyc2VyX2xvYWRfZmllbGRfdGFibGUoIFBTX1BhcnNlciAgICAgICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMV9GaWVsZCAgZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICAgICAgb2JqZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBtYXhfb2JqZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgICBwZmxhZ3MgKTsKKworICBGVF9MT0NBTCggRlRfTG9uZyApCisgIHBzX3BhcnNlcl90b19pbnQoIFBTX1BhcnNlciAgcGFyc2VyICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwc19wYXJzZXJfdG9fYnl0ZXMoIFBTX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBtYXhfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBwbnVtX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgZGVsaW1pdGVycyApOworCisKKyAgRlRfTE9DQUwoIEZUX0ZpeGVkICkKKyAgcHNfcGFyc2VyX3RvX2ZpeGVkKCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIHBvd2VyX3RlbiApOworCisKKyAgRlRfTE9DQUwoIEZUX0ludCApCisgIHBzX3BhcnNlcl90b19jb29yZF9hcnJheSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBtYXhfY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgY29vcmRzICk7CisKKyAgRlRfTE9DQUwoIEZUX0ludCApCisgIHBzX3BhcnNlcl90b19maXhlZF9hcnJheSggUFNfUGFyc2VyICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBtYXhfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgcG93ZXJfdGVuICk7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX3BhcnNlcl9pbml0KCBQU19QYXJzZXIgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQsCisgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcHNfcGFyc2VyX2RvbmUoIFBTX1BhcnNlciAgcGFyc2VyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgVDEgQlVJTERFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX2J1aWxkZXJfaW5pdCggVDFfQnVpbGRlciAgICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGhpbnRpbmcgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX2J1aWxkZXJfZG9uZSggVDFfQnVpbGRlciAgYnVpbGRlciApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfY2hlY2tfcG9pbnRzKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgY291bnQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICBmbGFnICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdDFfYnVpbGRlcl9hZGRfcG9pbnQxKCBUMV9CdWlsZGVyICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfYWRkX2NvbnRvdXIoIFQxX0J1aWxkZXIgIGJ1aWxkZXIgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHQxX2J1aWxkZXJfc3RhcnRfcG9pbnQoIFQxX0J1aWxkZXIgIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIHkgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgdDFfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBUMV9CdWlsZGVyICBidWlsZGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX2RlY3J5cHQoIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICBGVF9PZmZzZXQgIGxlbmd0aCwKKyAgICAgICAgICAgICAgRlRfVVNob3J0ICBzZWVkICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QU09CSlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDIxMThjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC9ydWxlcy5tawpAQCAtMCwwICsxLDc2IEBACisjCisjIEZyZWVUeXBlIDIgUFNhdXggZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgUFNBVVggZHJpdmVyIGRpcmVjdG9yeQorIworUFNBVVhfRElSIDo9ICQoU1JDX0RJUikvcHNhdXgKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitQU0FVWF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoUFNBVVhfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgUFNBVVggZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCisjCitQU0FVWF9EUlZfU1JDIDo9ICQoUFNBVVhfRElSKS9wc29ianMuYyAgIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3QxZGVjb2RlLmMgXAorICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvdDFjbWFwLmMgICBcCisgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9hZm1wYXJzZS5jIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3BzY29udi5jICAgXAorICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNhdXhtb2QuYworCisjIFBTQVVYIGRyaXZlciBoZWFkZXJzCisjCitQU0FVWF9EUlZfSCA6PSAkKFBTQVVYX0RSVl9TUkM6JWM9JWgpICBcCisgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNhdXhlcnIuaAorCisKKyMgUFNBVVggZHJpdmVyIG9iamVjdChzKQorIworIyAgIFBTQVVYX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcy4KKyMgICBQU0FVWF9EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzLgorIworUFNBVVhfRFJWX09CSl9NIDo9ICQoUFNBVVhfRFJWX1NSQzokKFBTQVVYX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK1BTQVVYX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL3BzYXV4LiRPCisKKyMgUFNBVVggZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK1BTQVVYX0RSVl9TUkNfUyA6PSAkKFBTQVVYX0RJUikvcHNhdXguYworCisKKyMgUFNBVVggZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChQU0FVWF9EUlZfT0JKX1MpOiAkKFBTQVVYX0RSVl9TUkNfUykgJChQU0FVWF9EUlZfU1JDKSBcCisgICAgICAgICAgICAgICAgICAgJChGUkVFVFlQRV9IKSAkKFBTQVVYX0RSVl9IKQorCSQoUFNBVVhfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoUFNBVVhfRFJWX1NSQ19TKSkKKworCisjIFBTQVVYIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChQU0FVWF9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoUFNBVVhfRFJWX0gpCisJJChQU0FVWF9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoUFNBVVhfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKFBTQVVYX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC90MWNtYXAuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvdDFjbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyZDQzMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvdDFjbWFwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxY21hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgInQxY21hcC5oIgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisKKyNpbmNsdWRlICJwc2F1eGVyci5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgIFRZUEUxIFNUQU5EQVJEIChBTkQgRVhQRVJUKSBFTkNPRElORyBDTUFQUyAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgdDFfY21hcF9zdGRfaW5pdCggVDFfQ01hcFN0ZCAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgaXNfZXhwZXJ0ICkKKyAgeworICAgIFQxX0ZhY2UgICAgICAgICAgICAgZmFjZSAgICA9IChUMV9GYWNlKUZUX0NNQVBfRkFDRSggY21hcCApOworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpZmFjZS0+cHNuYW1lczsKKworCisgICAgY21hcC0+bnVtX2dseXBocyAgICA9IChGVF9VSW50KWZhY2UtPnR5cGUxLm51bV9nbHlwaHM7CisgICAgY21hcC0+Z2x5cGhfbmFtZXMgICA9IChjb25zdCBjaGFyKiBjb25zdCopZmFjZS0+dHlwZTEuZ2x5cGhfbmFtZXM7CisgICAgY21hcC0+c2lkX3RvX3N0cmluZyA9IHBzbmFtZXMtPmFkb2JlX3N0ZF9zdHJpbmdzOworICAgIGNtYXAtPmNvZGVfdG9fc2lkICAgPSBpc19leHBlcnQgPyBwc25hbWVzLT5hZG9iZV9leHBlcnRfZW5jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHNuYW1lcy0+YWRvYmVfc3RkX2VuY29kaW5nOworCisgICAgRlRfQVNTRVJUKCBjbWFwLT5jb2RlX3RvX3NpZCAhPSBOVUxMICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIHQxX2NtYXBfc3RkX2RvbmUoIFQxX0NNYXBTdGQgIGNtYXAgKQorICB7CisgICAgY21hcC0+bnVtX2dseXBocyAgICA9IDA7CisgICAgY21hcC0+Z2x5cGhfbmFtZXMgICA9IE5VTEw7CisgICAgY21hcC0+c2lkX3RvX3N0cmluZyA9IE5VTEw7CisgICAgY21hcC0+Y29kZV90b19zaWQgICA9IE5VTEw7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHQxX2NtYXBfc3RkX2NoYXJfaW5kZXgoIFQxX0NNYXBTdGQgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50ICByZXN1bHQgPSAwOworCisKKyAgICBpZiAoIGNoYXJfY29kZSA8IDI1NiApCisgICAgeworICAgICAgRlRfVUludCAgICAgIGNvZGUsIG47CisgICAgICBjb25zdCBjaGFyKiAgZ2x5cGhfbmFtZTsKKworCisgICAgICAvKiBjb252ZXJ0IGNoYXJhY3RlciBjb2RlIHRvIEFkb2JlIFNJRCBzdHJpbmcgKi8KKyAgICAgIGNvZGUgICAgICAgPSBjbWFwLT5jb2RlX3RvX3NpZFtjaGFyX2NvZGVdOworICAgICAgZ2x5cGhfbmFtZSA9IGNtYXAtPnNpZF90b19zdHJpbmcoIGNvZGUgKTsKKworICAgICAgLyogbG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggbmFtZSAqLworICAgICAgZm9yICggbiA9IDA7IG4gPCBjbWFwLT5udW1fZ2x5cGhzOyBuKysgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiBnbmFtZSA9IGNtYXAtPmdseXBoX25hbWVzW25dOworCisKKyAgICAgICAgaWYgKCBnbmFtZSAmJiBnbmFtZVswXSA9PSBnbHlwaF9uYW1lWzBdICAmJgorICAgICAgICAgICAgIGZ0X3N0cmNtcCggZ25hbWUsIGdseXBoX25hbWUgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IG47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHQxX2NtYXBfc3RkX2NoYXJfbmV4dCggVDFfQ01hcFN0ZCAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfVUludCAgICByZXN1bHQgICAgPSAwOworICAgIEZUX1VJbnQzMiAgY2hhcl9jb2RlID0gKnBjaGFyX2NvZGUgKyAxOworCisKKyAgICB3aGlsZSAoIGNoYXJfY29kZSA8IDI1NiApCisgICAgeworICAgICAgcmVzdWx0ID0gdDFfY21hcF9zdGRfY2hhcl9pbmRleCggY21hcCwgY2hhcl9jb2RlICk7CisgICAgICBpZiAoIHJlc3VsdCAhPSAwICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBjaGFyX2NvZGUrKzsKKyAgICB9CisgICAgY2hhcl9jb2RlID0gMDsKKworICBFeGl0OgorICAgICpwY2hhcl9jb2RlID0gY2hhcl9jb2RlOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0MV9jbWFwX3N0YW5kYXJkX2luaXQoIFQxX0NNYXBTdGQgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgcG9pbnRlciApCisgIHsKKyAgICBGVF9VTlVTRUQoIHBvaW50ZXIgKTsKKworCisgICAgdDFfY21hcF9zdGRfaW5pdCggY21hcCwgMCApOworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYgY29uc3QgRlRfQ01hcF9DbGFzc1JlYworICB0MV9jbWFwX3N0YW5kYXJkX2NsYXNzX3JlYyA9CisgIHsKKyAgICBzaXplb2YgKCBUMV9DTWFwU3RkUmVjICksCisKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIHQxX2NtYXBfc3RhbmRhcmRfaW5pdCwKKyAgICAoRlRfQ01hcF9Eb25lRnVuYykgICAgIHQxX2NtYXBfc3RkX2RvbmUsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0MV9jbWFwX3N0ZF9jaGFyX2luZGV4LAorICAgIChGVF9DTWFwX0NoYXJOZXh0RnVuYykgdDFfY21hcF9zdGRfY2hhcl9uZXh0LAorCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICB9OworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHQxX2NtYXBfZXhwZXJ0X2luaXQoIFQxX0NNYXBTdGQgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIHBvaW50ZXIgKQorICB7CisgICAgRlRfVU5VU0VEKCBwb2ludGVyICk7CisKKworICAgIHQxX2NtYXBfc3RkX2luaXQoIGNtYXAsIDEgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBjb25zdCBGVF9DTWFwX0NsYXNzUmVjCisgIHQxX2NtYXBfZXhwZXJ0X2NsYXNzX3JlYyA9CisgIHsKKyAgICBzaXplb2YgKCBUMV9DTWFwU3RkUmVjICksCisKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIHQxX2NtYXBfZXhwZXJ0X2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICB0MV9jbWFwX3N0ZF9kb25lLAorICAgIChGVF9DTWFwX0NoYXJJbmRleEZ1bmMpdDFfY21hcF9zdGRfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHQxX2NtYXBfc3RkX2NoYXJfbmV4dCwKKworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgfTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgVFlQRTEgQ1VTVE9NIEVOQ09ESU5HIENNQVAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHQxX2NtYXBfY3VzdG9tX2luaXQoIFQxX0NNYXBDdXN0b20gIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgIHBvaW50ZXIgKQorICB7CisgICAgVDFfRmFjZSAgICAgIGZhY2UgICAgID0gKFQxX0ZhY2UpRlRfQ01BUF9GQUNFKCBjbWFwICk7CisgICAgVDFfRW5jb2RpbmcgIGVuY29kaW5nID0gJmZhY2UtPnR5cGUxLmVuY29kaW5nOworCisgICAgRlRfVU5VU0VEKCBwb2ludGVyICk7CisKKworICAgIGNtYXAtPmZpcnN0ICAgPSAoRlRfVUludCllbmNvZGluZy0+Y29kZV9maXJzdDsKKyAgICBjbWFwLT5jb3VudCAgID0gKEZUX1VJbnQpZW5jb2RpbmctPmNvZGVfbGFzdCAtIGNtYXAtPmZpcnN0OworICAgIGNtYXAtPmluZGljZXMgPSBlbmNvZGluZy0+Y2hhcl9pbmRleDsKKworICAgIEZUX0FTU0VSVCggY21hcC0+aW5kaWNlcyAhPSBOVUxMICk7CisgICAgRlRfQVNTRVJUKCBlbmNvZGluZy0+Y29kZV9maXJzdCA8PSBlbmNvZGluZy0+Y29kZV9sYXN0ICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgdDFfY21hcF9jdXN0b21fZG9uZSggVDFfQ01hcEN1c3RvbSAgY21hcCApCisgIHsKKyAgICBjbWFwLT5pbmRpY2VzID0gTlVMTDsKKyAgICBjbWFwLT5maXJzdCAgID0gMDsKKyAgICBjbWFwLT5jb3VudCAgID0gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50ICkKKyAgdDFfY21hcF9jdXN0b21fY2hhcl9pbmRleCggVDFfQ01hcEN1c3RvbSAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgICAgY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VJbnQgICAgcmVzdWx0ID0gMDsKKworCisgICAgaWYgKCAoIGNoYXJfY29kZSA+PSBjbWFwLT5maXJzdCApICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggY2hhcl9jb2RlIDwgKCBjbWFwLT5maXJzdCArIGNtYXAtPmNvdW50ICkgKSApCisgICAgICByZXN1bHQgPSBjbWFwLT5pbmRpY2VzW2NoYXJfY29kZV07CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHQxX2NtYXBfY3VzdG9tX2NoYXJfbmV4dCggVDFfQ01hcEN1c3RvbSAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgICpwY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VJbnQgICAgcmVzdWx0ID0gMDsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlOworCisKKyAgICArK2NoYXJfY29kZTsKKworICAgIGlmICggY2hhcl9jb2RlIDwgY21hcC0+Zmlyc3QgKQorICAgICAgY2hhcl9jb2RlID0gY21hcC0+Zmlyc3Q7CisKKyAgICBmb3IgKCA7IGNoYXJfY29kZSA8ICggY21hcC0+Zmlyc3QgKyBjbWFwLT5jb3VudCApOyBjaGFyX2NvZGUrKyApCisgICAgeworICAgICAgcmVzdWx0ID0gY21hcC0+aW5kaWNlc1tjaGFyX2NvZGVdOworICAgICAgaWYgKCByZXN1bHQgIT0gMCApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBjaGFyX2NvZGUgPSAwOworCisgIEV4aXQ6CisgICAgKnBjaGFyX2NvZGUgPSBjaGFyX2NvZGU7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGIGNvbnN0IEZUX0NNYXBfQ2xhc3NSZWMKKyAgdDFfY21hcF9jdXN0b21fY2xhc3NfcmVjID0KKyAgeworICAgIHNpemVvZiAoIFQxX0NNYXBDdXN0b21SZWMgKSwKKworICAgIChGVF9DTWFwX0luaXRGdW5jKSAgICAgdDFfY21hcF9jdXN0b21faW5pdCwKKyAgICAoRlRfQ01hcF9Eb25lRnVuYykgICAgIHQxX2NtYXBfY3VzdG9tX2RvbmUsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0MV9jbWFwX2N1c3RvbV9jaGFyX2luZGV4LAorICAgIChGVF9DTWFwX0NoYXJOZXh0RnVuYykgdDFfY21hcF9jdXN0b21fY2hhcl9uZXh0LAorCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICB9OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgVFlQRTEgU1lOVEhFVElDIFVOSUNPREUgRU5DT0RJTkcgQ01BUCAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBjb25zdCBjaGFyICogKQorICBwc2F1eF9nZXRfZ2x5cGhfbmFtZSggVDFfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGlkeCApCisgIHsKKyAgICByZXR1cm4gZmFjZS0+dHlwZTEuZ2x5cGhfbmFtZXNbaWR4XTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHQxX2NtYXBfdW5pY29kZV9pbml0KCBQU19Vbmljb2RlcyAgdW5pY29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgcG9pbnRlciApCisgIHsKKyAgICBUMV9GYWNlICAgICAgICAgICAgIGZhY2UgICAgPSAoVDFfRmFjZSlGVF9DTUFQX0ZBQ0UoIHVuaWNvZGVzICk7CisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXMgPSAoRlRfU2VydmljZV9Qc0NNYXBzKWZhY2UtPnBzbmFtZXM7CisKKyAgICBGVF9VTlVTRUQoIHBvaW50ZXIgKTsKKworCisgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2luaXQoIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWZhY2UtPnR5cGUxLm51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU19HZXRHbHlwaE5hbWVGdW5jKSZwc2F1eF9nZXRfZ2x5cGhfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBTX0ZyZWVHbHlwaE5hbWVGdW5jKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Qb2ludGVyKWZhY2UgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgdDFfY21hcF91bmljb2RlX2RvbmUoIFBTX1VuaWNvZGVzICB1bmljb2RlcyApCisgIHsKKyAgICBGVF9GYWNlICAgIGZhY2UgICA9IEZUX0NNQVBfRkFDRSggdW5pY29kZXMgKTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBmYWNlICk7CisKKworICAgIEZUX0ZSRUUoIHVuaWNvZGVzLT5tYXBzICk7CisgICAgdW5pY29kZXMtPm51bV9tYXBzID0gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50ICkKKyAgdDFfY21hcF91bmljb2RlX2NoYXJfaW5kZXgoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgICBjaGFyX2NvZGUgKQorICB7CisgICAgVDFfRmFjZSAgICAgICAgICAgICBmYWNlICAgID0gKFQxX0ZhY2UpRlRfQ01BUF9GQUNFKCB1bmljb2RlcyApOworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpZmFjZS0+cHNuYW1lczsKKworCisgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2NoYXJfaW5kZXgoIHVuaWNvZGVzLCBjaGFyX2NvZGUgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0MV9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0KCBQU19Vbmljb2RlcyAgdW5pY29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgICpwY2hhcl9jb2RlICkKKyAgeworICAgIFQxX0ZhY2UgICAgICAgICAgICAgZmFjZSAgICA9IChUMV9GYWNlKUZUX0NNQVBfRkFDRSggdW5pY29kZXMgKTsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXMgPSAoRlRfU2VydmljZV9Qc0NNYXBzKWZhY2UtPnBzbmFtZXM7CisKKworICAgIHJldHVybiBwc25hbWVzLT51bmljb2Rlc19jaGFyX25leHQoIHVuaWNvZGVzLCBwY2hhcl9jb2RlICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBjb25zdCBGVF9DTWFwX0NsYXNzUmVjCisgIHQxX2NtYXBfdW5pY29kZV9jbGFzc19yZWMgPQorICB7CisgICAgc2l6ZW9mICggUFNfVW5pY29kZXNSZWMgKSwKKworICAgIChGVF9DTWFwX0luaXRGdW5jKSAgICAgdDFfY21hcF91bmljb2RlX2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICB0MV9jbWFwX3VuaWNvZGVfZG9uZSwKKyAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKXQxX2NtYXBfdW5pY29kZV9jaGFyX2luZGV4LAorICAgIChGVF9DTWFwX0NoYXJOZXh0RnVuYykgdDFfY21hcF91bmljb2RlX2NoYXJfbmV4dCwKKworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgfTsKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvdDFjbWFwLmggYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3QxY21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmEwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3QxY21hcC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MWNtYXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIGNoYXJhY3RlciBtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UMUNNQVBfSF9fCisjZGVmaW5lIF9fVDFDTUFQX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICBUWVBFMSBTVEFOREFSRCAoQU5EIEVYUEVSVCkgRU5DT0RJTkcgQ01BUFMgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIHN0YW5kYXJkIChhbmQgZXhwZXJ0KSBlbmNvZGluZyBjbWFwcyAqLworICB0eXBlZGVmIHN0cnVjdCBUMV9DTWFwU3RkUmVjXyogIFQxX0NNYXBTdGQ7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0NNYXBTdGRSZWNfCisgIHsKKyAgICBGVF9DTWFwUmVjICAgICAgICAgICAgICAgIGNtYXA7CisKKyAgICBjb25zdCBGVF9VU2hvcnQqICAgICAgICAgIGNvZGVfdG9fc2lkOworICAgIFBTX0Fkb2JlX1N0ZF9TdHJpbmdzRnVuYyAgc2lkX3RvX3N0cmluZzsKKworICAgIEZUX1VJbnQgICAgICAgICAgICAgICAgICAgbnVtX2dseXBoczsKKyAgICBjb25zdCBjaGFyKiBjb25zdCogICAgICAgIGdseXBoX25hbWVzOworCisgIH0gVDFfQ01hcFN0ZFJlYzsKKworCisgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0IEZUX0NNYXBfQ2xhc3NSZWMKKyAgdDFfY21hcF9zdGFuZGFyZF9jbGFzc19yZWM7CisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgRlRfQ01hcF9DbGFzc1JlYworICB0MV9jbWFwX2V4cGVydF9jbGFzc19yZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICBUWVBFMSBDVVNUT00gRU5DT0RJTkcgQ01BUCAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICB0eXBlZGVmIHN0cnVjdCBUMV9DTWFwQ3VzdG9tUmVjXyogIFQxX0NNYXBDdXN0b207CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0NNYXBDdXN0b21SZWNfCisgIHsKKyAgICBGVF9DTWFwUmVjICBjbWFwOworICAgIEZUX1VJbnQgICAgIGZpcnN0OworICAgIEZUX1VJbnQgICAgIGNvdW50OworICAgIEZUX1VTaG9ydCogIGluZGljZXM7CisKKyAgfSBUMV9DTWFwQ3VzdG9tUmVjOworCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgRlRfQ01hcF9DbGFzc1JlYworICB0MV9jbWFwX2N1c3RvbV9jbGFzc19yZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgVFlQRTEgU1lOVEhFVElDIFVOSUNPREUgRU5DT0RJTkcgQ01BUCAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiB1bmljb2RlIChzeW50aGV0aWMpIGNtYXBzICovCisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgRlRfQ01hcF9DbGFzc1JlYworICB0MV9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjOworCisgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1QxQ01BUF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvdDFkZWNvZGUuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNhdXgvdDFkZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTE5OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC90MWRlY29kZS5jCkBAIC0wLDAgKzEsMTYyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDFkZWNvZGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKworI2luY2x1ZGUgInQxZGVjb2RlLmgiCisjaW5jbHVkZSAicHNvYmpzLmgiCisKKyNpbmNsdWRlICJwc2F1eGVyci5oIgorCisvKiBlbnN1cmUgcHJvcGVyIHNpZ24gZXh0ZW5zaW9uICovCisjZGVmaW5lIEZpeDJJbnQoIGYgKSAgKCAoRlRfSW50KShGVF9TaG9ydCkoIChmKSA+PiAxNiApICkKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWRlY29kZQorCisKKyAgdHlwZWRlZiBlbnVtICBUMV9PcGVyYXRvcl8KKyAgeworICAgIG9wX25vbmUgPSAwLAorICAgIG9wX2VuZGNoYXIsCisgICAgb3BfaHNidywKKyAgICBvcF9zZWFjLAorICAgIG9wX3NidywKKyAgICBvcF9jbG9zZXBhdGgsCisgICAgb3BfaGxpbmV0bywKKyAgICBvcF9obW92ZXRvLAorICAgIG9wX2h2Y3VydmV0bywKKyAgICBvcF9ybGluZXRvLAorICAgIG9wX3Jtb3ZldG8sCisgICAgb3BfcnJjdXJ2ZXRvLAorICAgIG9wX3ZoY3VydmV0bywKKyAgICBvcF92bGluZXRvLAorICAgIG9wX3Ztb3ZldG8sCisgICAgb3BfZG90c2VjdGlvbiwKKyAgICBvcF9oc3RlbSwKKyAgICBvcF9oc3RlbTMsCisgICAgb3BfdnN0ZW0sCisgICAgb3BfdnN0ZW0zLAorICAgIG9wX2RpdiwKKyAgICBvcF9jYWxsb3RoZXJzdWJyLAorICAgIG9wX2NhbGxzdWJyLAorICAgIG9wX3BvcCwKKyAgICBvcF9yZXR1cm4sCisgICAgb3Bfc2V0Y3VycmVudHBvaW50LAorICAgIG9wX3Vua25vd24xNSwKKworICAgIG9wX21heCAgICAvKiBuZXZlciByZW1vdmUgdGhpcyBvbmUgKi8KKworICB9IFQxX09wZXJhdG9yOworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0ludCAgdDFfYXJnc19jb3VudFtvcF9tYXhdID0KKyAgeworICAgIDAsIC8qIG5vbmUgKi8KKyAgICAwLCAvKiBlbmRjaGFyICovCisgICAgMiwgLyogaHNidyAqLworICAgIDUsIC8qIHNlYWMgKi8KKyAgICA0LCAvKiBzYncgKi8KKyAgICAwLCAvKiBjbG9zZXBhdGggKi8KKyAgICAxLCAvKiBobGluZXRvICovCisgICAgMSwgLyogaG1vdmV0byAqLworICAgIDQsIC8qIGh2Y3VydmV0byAqLworICAgIDIsIC8qIHJsaW5ldG8gKi8KKyAgICAyLCAvKiBybW92ZXRvICovCisgICAgNiwgLyogcnJjdXJ2ZXRvICovCisgICAgNCwgLyogdmhjdXJ2ZXRvICovCisgICAgMSwgLyogdmxpbmV0byAqLworICAgIDEsIC8qIHZtb3ZldG8gKi8KKyAgICAwLCAvKiBkb3RzZWN0aW9uICovCisgICAgMiwgLyogaHN0ZW0gKi8KKyAgICA2LCAvKiBoc3RlbTMgKi8KKyAgICAyLCAvKiB2c3RlbSAqLworICAgIDYsIC8qIHZzdGVtMyAqLworICAgIDIsIC8qIGRpdiAqLworICAgLTEsIC8qIGNhbGxvdGhlcnN1YnIgKi8KKyAgICAxLCAvKiBjYWxsc3ViciAqLworICAgIDAsIC8qIHBvcCAqLworICAgIDAsIC8qIHJldHVybiAqLworICAgIDIsIC8qIHNldGN1cnJlbnRwb2ludCAqLworICAgIDIgIC8qIG9wY29kZSAxNSAodW5kb2N1bWVudGVkIGFuZCBvYnNvbGV0ZSkgKi8KKyAgfTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHQxX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvb2tzIHVwIGEgZ2l2ZW4gZ2x5cGggYnkgaXRzIFN0YW5kYXJkRW5jb2RpbmcgY2hhcmNvZGUuICBVc2VkIHRvICAqLworICAvKiAgICBpbXBsZW1lbnQgdGhlIFNFQUMgVHlwZSAxIG9wZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJjb2RlIDo6IFRoZSBjaGFyYWN0ZXIgY29kZSB0byBsb29rIGZvci4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZ2x5cGggaW5kZXggaW4gdGhlIGZvbnQgZmFjZS4gIFJldHVybnMgLTEgaWYgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiAgICBnbHlwaCB3YXNuJ3QgZm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9JbnQKKyAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgIGNoYXJjb2RlICkKKyAgeworICAgIEZUX1VJbnQgICAgICAgICAgICAgbjsKKyAgICBjb25zdCBGVF9TdHJpbmcqICAgIGdseXBoX25hbWU7CisgICAgRlRfU2VydmljZV9Qc0NNYXBzICBwc25hbWVzID0gZGVjb2Rlci0+cHNuYW1lczsKKworCisgICAgLyogY2hlY2sgcmFuZ2Ugb2Ygc3RhbmRhcmQgY2hhciBjb2RlICovCisgICAgaWYgKCBjaGFyY29kZSA8IDAgfHwgY2hhcmNvZGUgPiAyNTUgKQorICAgICAgcmV0dXJuIC0xOworCisgICAgZ2x5cGhfbmFtZSA9IHBzbmFtZXMtPmFkb2JlX3N0ZF9zdHJpbmdzKAorICAgICAgICAgICAgICAgICAgIHBzbmFtZXMtPmFkb2JlX3N0ZF9lbmNvZGluZ1tjaGFyY29kZV0pOworCisgICAgZm9yICggbiA9IDA7IG4gPCBkZWNvZGVyLT5udW1fZ2x5cGhzOyBuKysgKQorICAgIHsKKyAgICAgIEZUX1N0cmluZyogIG5hbWUgPSAoRlRfU3RyaW5nKilkZWNvZGVyLT5nbHlwaF9uYW1lc1tuXTsKKworCisgICAgICBpZiAoIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgbmFtZVswXSA9PSBnbHlwaF9uYW1lWzBdICAgICAgICAgICAmJgorICAgICAgICAgICBmdF9zdHJjbXAoIG5hbWUsIGdseXBoX25hbWUgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuIChGVF9JbnQpbjsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHQxb3BlcmF0b3Jfc2VhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEltcGxlbWVudHMgdGhlIGBzZWFjJyBUeXBlIDEgb3BlcmF0b3IgZm9yIGEgVHlwZSAxIGRlY29kZXIuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlY29kZXIgOjogVGhlIGN1cnJlbnQgQ0lEIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXNiICAgICA6OiBUaGUgYWNjZW50J3Mgc2lkZSBiZWFyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZHggICAgIDo6IFRoZSBob3Jpem9udGFsIG9mZnNldCBvZiB0aGUgYWNjZW50LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkeSAgICAgOjogVGhlIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgYWNjZW50LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmNoYXIgICA6OiBUaGUgYmFzZSBjaGFyYWN0ZXIncyBTdGFuZGFyZEVuY29kaW5nIGNoYXJjb2RlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhY2hhciAgIDo6IFRoZSBhY2NlbnQgY2hhcmFjdGVyJ3MgU3RhbmRhcmRFbmNvZGluZyBjaGFyY29kZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICB0MW9wZXJhdG9yX3NlYWMoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgYXNiLAorICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIGFkeCwKKyAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICBhZHksCisgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgYmNoYXIsCisgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgYWNoYXIgKQorICB7CisgICAgRlRfRXJyb3IgICAgIGVycm9yOworICAgIEZUX0ludCAgICAgICBiY2hhcl9pbmRleCwgYWNoYXJfaW5kZXg7CisjaWYgMAorICAgIEZUX0ludCAgICAgICBuX2Jhc2VfcG9pbnRzOworICAgIEZUX091dGxpbmUqICBiYXNlID0gZGVjb2Rlci0+YnVpbGRlci5iYXNlOworI2VuZGlmCisgICAgRlRfVmVjdG9yICAgIGxlZnRfYmVhcmluZywgYWR2YW5jZTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICBUMV9GYWNlICAgICAgZmFjZSAgPSAoVDFfRmFjZSlkZWNvZGVyLT5idWlsZGVyLmZhY2U7CisjZW5kaWYKKworCisgICAgaWYgKCBkZWNvZGVyLT5zZWFjICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ0MW9wZXJhdG9yX3NlYWM6IGludmFsaWQgbmVzdGVkIHNlYWNcbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICAgIH0KKworICAgIGlmICggZGVjb2Rlci0+YnVpbGRlci5tZXRyaWNzX29ubHkgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInQxb3BlcmF0b3Jfc2VhYzogdW5leHBlY3RlZCBzZWFjXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICB9CisKKyAgICAvKiBzZWFjIHdlaXJkbmVzcyAqLworICAgIGFkeCArPSBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy54OworCisgICAgLyogYGdseXBoX25hbWVzJyBpcyBzZXQgdG8gMCBmb3IgQ0lEIGZvbnRzIHdoaWNoIGRvIG5vdCAqLworICAgIC8qIGluY2x1ZGUgYW4gZW5jb2RpbmcuICBIb3cgY2FuIHdlIGRlYWwgd2l0aCB0aGVzZT8gICAgKi8KKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgaWYgKCBkZWNvZGVyLT5nbHlwaF9uYW1lcyA9PSAwICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyNlbHNlCisgICAgaWYgKCBkZWNvZGVyLT5nbHlwaF9uYW1lcyA9PSAwICkKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgeworICAgICAgRlRfRVJST1IoKCAidDFvcGVyYXRvcl9zZWFjOiIKKyAgICAgICAgICAgICAgICAgIiBnbHlwaCBuYW1lcyB0YWJsZSBub3QgYXZhaWxhYmxlIGluIHRoaXMgZm9udFxuIiApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggU3ludGF4X0Vycm9yICk7CisgICAgfQorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIGlmICggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICB7CisgICAgICAvKiB0aGUgY2FsbGVyIG11c3QgaGFuZGxlIHRoZSBmb250IGVuY29kaW5nIGFsc28gKi8KKyAgICAgIGJjaGFyX2luZGV4ID0gYmNoYXI7CisgICAgICBhY2hhcl9pbmRleCA9IGFjaGFyOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBiY2hhcl9pbmRleCA9IHQxX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSggZGVjb2RlciwgYmNoYXIgKTsKKyAgICAgIGFjaGFyX2luZGV4ID0gdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBkZWNvZGVyLCBhY2hhciApOworICAgIH0KKworICAgIGlmICggYmNoYXJfaW5kZXggPCAwIHx8IGFjaGFyX2luZGV4IDwgMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidDFvcGVyYXRvcl9zZWFjOiIKKyAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHNlYWMgY2hhcmFjdGVyIGNvZGUgYXJndW1lbnRzXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICB9CisKKyAgICAvKiBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGxvYWQgYSBjb21wb3NpdGUgZ2x5cGgsIGRvIG5vdCBsb2FkIHRoZSAqLworICAgIC8qIGFjY2VudCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgYXJyYXkgb2Ygc3ViZ2x5cGhzLiAgICAgICAgICovCisgICAgaWYgKCBkZWNvZGVyLT5idWlsZGVyLm5vX3JlY3Vyc2UgKQorICAgIHsKKyAgICAgIEZUX0dseXBoU2xvdCAgICBnbHlwaCAgPSAoRlRfR2x5cGhTbG90KWRlY29kZXItPmJ1aWxkZXIuZ2x5cGg7CisgICAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyID0gZ2x5cGgtPmludGVybmFsLT5sb2FkZXI7CisgICAgICBGVF9TdWJHbHlwaCAgICAgc3ViZzsKKworCisgICAgICAvKiByZWFsbG9jYXRlIHN1YmdseXBoIGFycmF5IGlmIG5lY2Vzc2FyeSAqLworICAgICAgZXJyb3IgPSBGVF9HbHlwaExvYWRlcl9DaGVja1N1YkdseXBocyggbG9hZGVyLCAyICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBzdWJnID0gbG9hZGVyLT5jdXJyZW50LnN1YmdseXBoczsKKworICAgICAgLyogc3ViZ2x5cGggMCA9IGJhc2UgY2hhcmFjdGVyICovCisgICAgICBzdWJnLT5pbmRleCA9IGJjaGFyX2luZGV4OworICAgICAgc3ViZy0+ZmxhZ3MgPSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyB8CisgICAgICAgICAgICAgICAgICAgIEZUX1NVQkdMWVBIX0ZMQUdfVVNFX01ZX01FVFJJQ1M7CisgICAgICBzdWJnLT5hcmcxICA9IDA7CisgICAgICBzdWJnLT5hcmcyICA9IDA7CisgICAgICBzdWJnKys7CisKKyAgICAgIC8qIHN1YmdseXBoIDEgPSBhY2NlbnQgY2hhcmFjdGVyICovCisgICAgICBzdWJnLT5pbmRleCA9IGFjaGFyX2luZGV4OworICAgICAgc3ViZy0+ZmxhZ3MgPSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUzsKKyAgICAgIHN1YmctPmFyZzEgID0gKEZUX0ludClGSVhFRF9UT19JTlQoIGFkeCAtIGFzYiApOworICAgICAgc3ViZy0+YXJnMiAgPSAoRlRfSW50KUZJWEVEX1RPX0lOVCggYWR5ICk7CisKKyAgICAgIC8qIHNldCB1cCByZW1haW5pbmcgZ2x5cGggZmllbGRzICovCisgICAgICBnbHlwaC0+bnVtX3N1YmdseXBocyA9IDI7CisgICAgICBnbHlwaC0+c3ViZ2x5cGhzICAgICA9IGxvYWRlci0+YmFzZS5zdWJnbHlwaHM7CisgICAgICBnbHlwaC0+Zm9ybWF0ICAgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEU7CisKKyAgICAgIGxvYWRlci0+Y3VycmVudC5udW1fc3ViZ2x5cGhzID0gMjsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBGaXJzdCBsb2FkIGBiY2hhcicgaW4gYnVpbGRlciAqLworICAgIC8qIG5vdyBsb2FkIHRoZSB1bnNjYWxlZCBvdXRsaW5lICovCisKKyAgICBGVF9HbHlwaExvYWRlcl9QcmVwYXJlKCBkZWNvZGVyLT5idWlsZGVyLmxvYWRlciApOyAgLyogcHJlcGFyZSBsb2FkZXIgKi8KKworICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLworICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOworICAgIGVycm9yID0gdDFfZGVjb2Rlcl9wYXJzZV9nbHlwaCggZGVjb2RlciwgKEZUX1VJbnQpYmNoYXJfaW5kZXggKTsKKyAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBzYXZlIHRoZSBsZWZ0IGJlYXJpbmcgYW5kIHdpZHRoIG9mIHRoZSBiYXNlIGNoYXJhY3RlciAqLworICAgIC8qIGFzIHRoZXkgd2lsbCBiZSBlcmFzZWQgYnkgdGhlIG5leHQgbG9hZC4gICAgICAgICAgICAgICovCisKKyAgICBsZWZ0X2JlYXJpbmcgPSBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZzsKKyAgICBhZHZhbmNlICAgICAgPSBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2U7CisKKyAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy54ID0gMDsKKyAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy55ID0gMDsKKworICAgIGRlY29kZXItPmJ1aWxkZXIucG9zX3ggPSBhZHggLSBhc2I7CisgICAgZGVjb2Rlci0+YnVpbGRlci5wb3NfeSA9IGFkeTsKKworICAgIC8qIE5vdyBsb2FkIGBhY2hhcicgb24gdG9wIG9mICovCisgICAgLyogdGhlIGJhc2Ugb3V0bGluZSAgICAgICAgICAgKi8KKworICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLworICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOworICAgIGVycm9yID0gdDFfZGVjb2Rlcl9wYXJzZV9nbHlwaCggZGVjb2RlciwgKEZUX1VJbnQpYWNoYXJfaW5kZXggKTsKKyAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiByZXN0b3JlIHRoZSBsZWZ0IHNpZGUgYmVhcmluZyBhbmQgICAqLworICAgIC8qIGFkdmFuY2Ugd2lkdGggb2YgdGhlIGJhc2UgY2hhcmFjdGVyICovCisKKyAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZyA9IGxlZnRfYmVhcmluZzsKKyAgICBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UgICAgICA9IGFkdmFuY2U7CisKKyAgICBkZWNvZGVyLT5idWlsZGVyLnBvc194ID0gMDsKKyAgICBkZWNvZGVyLT5idWlsZGVyLnBvc195ID0gMDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGFyc2VzIGEgZ2l2ZW4gVHlwZSAxIGNoYXJzdHJpbmdzIHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVjb2RlciAgICAgICAgIDo6IFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyc3RyaW5nX2Jhc2UgOjogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgY2hhcnN0cmluZ19sZW4gKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKyAgICBUMV9EZWNvZGVyX1pvbmUgIHpvbmU7CisgICAgRlRfQnl0ZSogICAgICAgICBpcDsKKyAgICBGVF9CeXRlKiAgICAgICAgIGxpbWl0OworICAgIFQxX0J1aWxkZXIgICAgICAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOworICAgIEZUX1BvcyAgICAgICAgICAgeCwgeSwgb3JpZ194LCBvcmlnX3k7CisgICAgRlRfSW50ICAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAgID0gMDsKKyAgICBGVF9JbnQgICAgICAgICAgIHVua25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAwOworICAgIEZUX0Jvb2wgICAgICAgICAgbGFyZ2VfaW50OworICAgIEZUX0ZpeGVkICAgICAgICAgc2VlZDsKKworICAgIFQxX0hpbnRzX0Z1bmNzICAgaGludGVyOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBGVF9Cb29sICAgICAgICAgIGJvbCA9IFRSVUU7CisjZW5kaWYKKworCisgICAgLyogY29tcHV0ZSByYW5kb20gc2VlZCBmcm9tIHN0YWNrIGFkZHJlc3Mgb2YgcGFyYW1ldGVyICovCisgICAgc2VlZCA9IChGVF9GaXhlZCkoICggKEZUX09mZnNldCkoY2hhciopJnNlZWQgICAgICAgICAgICBeCisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY2hhciopJmRlY29kZXIgICAgICAgICBeCisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY2hhciopJmNoYXJzdHJpbmdfYmFzZSApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTE9OR19NQVggICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBzZWVkID0gKCBzZWVkIF4gKCBzZWVkID4+IDEwICkgXiAoIHNlZWQgPj4gMjAgKSApICYgMHhGRkZGTDsKKyAgICBpZiAoIHNlZWQgPT0gMCApCisgICAgICBzZWVkID0gMHg3Mzg0OworCisgICAgLyogRmlyc3Qgb2YgYWxsLCBpbml0aWFsaXplIHRoZSBkZWNvZGVyICovCisgICAgZGVjb2Rlci0+dG9wICA9IGRlY29kZXItPnN0YWNrOworICAgIGRlY29kZXItPnpvbmUgPSBkZWNvZGVyLT56b25lczsKKyAgICB6b25lICAgICAgICAgID0gZGVjb2Rlci0+em9uZXM7CisKKyAgICBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9IFQxX1BhcnNlX1N0YXJ0OworCisgICAgaGludGVyID0gKFQxX0hpbnRzX0Z1bmNzKWJ1aWxkZXItPmhpbnRzX2Z1bmNzOworCisgICAgLyogYSBmb250IHRoYXQgcmVhZHMgQnVpbGRDaGFyQXJyYXkgd2l0aG91dCBzZXR0aW5nICovCisgICAgLyogaXRzIHZhbHVlcyBmaXJzdCBpcyBidWdneSwgYnV0IC4uLiAgICAgICAgICAgICAgICovCisgICAgRlRfQVNTRVJUKCAoIGRlY29kZXItPmxlbl9idWlsZGNoYXIgPT0gMCApID09CisgICAgICAgICAgICAgICAoIGRlY29kZXItPmJ1aWxkY2hhciA9PSBOVUxMICkgICk7CisKKyAgICBpZiAoIGRlY29kZXItPmJ1aWxkY2hhciAmJiBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyID4gMCApCisgICAgICBmdF9tZW1zZXQoICZkZWNvZGVyLT5idWlsZGNoYXJbMF0sCisgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgIHNpemVvZiAoIGRlY29kZXItPmJ1aWxkY2hhclswXSApICogZGVjb2Rlci0+bGVuX2J1aWxkY2hhciApOworCisgICAgRlRfVFJBQ0U0KCggIlxuIgorICAgICAgICAgICAgICAgICJTdGFydCBjaGFyc3RyaW5nXG4iICkpOworCisgICAgem9uZS0+YmFzZSAgICAgICAgICAgPSBjaGFyc3RyaW5nX2Jhc2U7CisgICAgbGltaXQgPSB6b25lLT5saW1pdCAgPSBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbjsKKyAgICBpcCAgICA9IHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIHggPSBvcmlnX3ggPSBidWlsZGVyLT5wb3NfeDsKKyAgICB5ID0gb3JpZ195ID0gYnVpbGRlci0+cG9zX3k7CisKKyAgICAvKiBiZWdpbiBoaW50cyByZWNvcmRpbmcgc2Vzc2lvbiwgaWYgYW55ICovCisgICAgaWYgKCBoaW50ZXIgKQorICAgICAgaGludGVyLT5vcGVuKCBoaW50ZXItPmhpbnRzICk7CisKKyAgICBsYXJnZV9pbnQgPSBGQUxTRTsKKworICAgIC8qIG5vdywgZXhlY3V0ZSBsb29wICovCisgICAgd2hpbGUgKCBpcCA8IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9Mb25nKiAgICAgdG9wICAgPSBkZWNvZGVyLT50b3A7CisgICAgICBUMV9PcGVyYXRvciAgb3AgICAgPSBvcF9ub25lOworICAgICAgRlRfSW50MzIgICAgIHZhbHVlID0gMDsKKworCisgICAgICBGVF9BU1NFUlQoIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID09IDAgICB8fAorICAgICAgICAgICAgICAgICB1bmtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID09IDAgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBpZiAoIGJvbCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoICIgKCVkKSIsIGRlY29kZXItPnRvcCAtIGRlY29kZXItPnN0YWNrICkpOworICAgICAgICBib2wgPSBGQUxTRTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIERlY29kZSBvcGVyYXRvciBvciBvcGVyYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogZmlyc3Qgb2YgYWxsLCBkZWNvbXByZXNzIG9wZXJhdG9yIG9yIHZhbHVlICovCisgICAgICBzd2l0Y2ggKCAqaXArKyApCisgICAgICB7CisgICAgICBjYXNlIDE6CisgICAgICAgIG9wID0gb3BfaHN0ZW07CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDM6CisgICAgICAgIG9wID0gb3BfdnN0ZW07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA0OgorICAgICAgICBvcCA9IG9wX3Ztb3ZldG87CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA1OgorICAgICAgICBvcCA9IG9wX3JsaW5ldG87CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA2OgorICAgICAgICBvcCA9IG9wX2hsaW5ldG87CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA3OgorICAgICAgICBvcCA9IG9wX3ZsaW5ldG87CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA4OgorICAgICAgICBvcCA9IG9wX3JyY3VydmV0bzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDk6CisgICAgICAgIG9wID0gb3BfY2xvc2VwYXRoOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMTA6CisgICAgICAgIG9wID0gb3BfY2FsbHN1YnI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxMToKKyAgICAgICAgb3AgPSBvcF9yZXR1cm47CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDEzOgorICAgICAgICBvcCA9IG9wX2hzYnc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxNDoKKyAgICAgICAgb3AgPSBvcF9lbmRjaGFyOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAxNTogICAgICAgICAgLyogdW5kb2N1bWVudGVkLCBvYnNvbGV0ZSBvcGVyYXRvciAqLworICAgICAgICBvcCA9IG9wX3Vua25vd24xNTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjE6CisgICAgICAgIG9wID0gb3Bfcm1vdmV0bzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDIyOgorICAgICAgICBvcCA9IG9wX2htb3ZldG87CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDMwOgorICAgICAgICBvcCA9IG9wX3ZoY3VydmV0bzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDMxOgorICAgICAgICBvcCA9IG9wX2h2Y3VydmV0bzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMTI6CisgICAgICAgIGlmICggaXAgPiBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBlc2NhcGUgKDEyK0VPRilcbiIgKSk7CisgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKCAqaXArKyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgIG9wID0gb3BfZG90c2VjdGlvbjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgIG9wID0gb3BfdnN0ZW0zOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgb3AgPSBvcF9oc3RlbTM7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICBvcCA9IG9wX3NlYWM7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICBvcCA9IG9wX3NidzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICBvcCA9IG9wX2RpdjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICBvcCA9IG9wX2NhbGxvdGhlcnN1YnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgb3AgPSBvcF9wb3A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzM6CisgICAgICAgICAgb3AgPSBvcF9zZXRjdXJyZW50cG9pbnQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBlc2NhcGUgKDEyKyVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGlwWy0xXSApKTsKKyAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyNTU6ICAgIC8qIGZvdXIgYnl0ZXMgaW50ZWdlciAqLworICAgICAgICBpZiAoIGlwICsgNCA+IGxpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIEVPRiBpbiBpbnRlZ2VyXG4iICkpOworICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgPSAoRlRfSW50MzIpKCAoIChGVF9VSW50MzIpaXBbMF0gPDwgMjQgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWlwWzFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMilpcFsyXSA8PCA4ICApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpaXBbM10gICAgICAgICApOworICAgICAgICBpcCArPSA0OworCisgICAgICAgIC8qIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiwgdmFsdWVzID4gMzIwMDAgb3IgPCAtMzIwMDAgbXVzdCAqLworICAgICAgICAvKiBiZSBmb2xsb3dlZCBieSBhIGBkaXYnIG9wZXJhdG9yIHRvIG1ha2UgdGhlIHJlc3VsdCBiZSBpbiB0aGUgICAgKi8KKyAgICAgICAgLyogcmFuZ2UgWy0zMjAwMDszMjAwMF0uICBXZSBleHBlY3QgdGhhdCB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mICAgICovCisgICAgICAgIC8qIGBkaXYnIGlzIG5vdCBhIGxhcmdlIG51bWJlci4gIEFkZGl0aW9uYWxseSwgd2UgZG9uJ3QgaGFuZGxlICAgICAqLworICAgICAgICAvKiBzdHVmZiBsaWtlIGA8bGFyZ2UxPiA8bGFyZ2UyPiA8bnVtPiBkaXYgPG51bT4gZGl2JyBvciAgICAgICAgICAgKi8KKyAgICAgICAgLyogPGxhcmdlMT4gPGxhcmdlMj4gPG51bT4gZGl2IGRpdicuICBUaGlzIGlzIHByb2JhYmx5IG5vdCBhbGxvd2VkICovCisgICAgICAgIC8qIGFueXdheS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIHZhbHVlID4gMzIwMDAgfHwgdmFsdWUgPCAtMzIwMDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBsYXJnZV9pbnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAiIG5vIGBkaXYnIGFmdGVyIGxhcmdlIGludGVnZXJcbiIgKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxhcmdlX2ludCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKCAhbGFyZ2VfaW50ICkKKyAgICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWx1ZSA8PCAxNiApOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggaXBbLTFdID49IDMyICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggaXBbLTFdIDwgMjQ3ICkKKyAgICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKWlwWy0xXSAtIDEzOTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCArK2lwID4gbGltaXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHVuZXhwZWN0ZWQgRU9GIGluIGludGVnZXJcbiIgKSk7CisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlwWy0yXSA8IDI1MSApCisgICAgICAgICAgICAgIHZhbHVlID0gICAgKCAoIGlwWy0yXSAtIDI0NyApICogMjU2ICkgKyBpcFstMV0gKyAxMDg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHZhbHVlID0gLSggKCAoIGlwWy0yXSAtIDI1MSApICogMjU2ICkgKyBpcFstMV0gKyAxMDggKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoICFsYXJnZV9pbnQgKQorICAgICAgICAgICAgdmFsdWUgPSAoRlRfSW50MzIpKCAoRlRfVUludDMyKXZhbHVlIDw8IDE2ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgYnl0ZSAoJWQpXG4iLCBpcFstMV0gKSk7CisgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCB1bmtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID4gMCApCisgICAgICB7CisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIG9wX2NhbGxzdWJyOgorICAgICAgICBjYXNlIG9wX3JldHVybjoKKyAgICAgICAgY2FzZSBvcF9ub25lOgorICAgICAgICBjYXNlIG9wX3BvcDoKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgYnkgcHJldmlvdXMgcG9wcyAqLworICAgICAgICAgIHVua25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggbGFyZ2VfaW50ICYmICEoIG9wID09IG9wX25vbmUgfHwgb3AgPT0gb3BfZGl2ICkgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAiIG5vIGBkaXYnIGFmdGVyIGxhcmdlIGludGVnZXJcbiIgKSk7CisKKyAgICAgICAgbGFyZ2VfaW50ID0gRkFMU0U7CisgICAgICB9CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogIFB1c2ggdmFsdWUgb24gc3RhY2ssIG9yIHByb2Nlc3Mgb3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBvcCA9PSBvcF9ub25lICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCB0b3AgLSBkZWNvZGVyLT5zdGFjayA+PSBUMV9NQVhfQ0hBUlNUUklOR1NfT1BFUkFORFMgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3RhY2sgb3ZlcmZsb3dcbiIgKSk7CisgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGlmICggbGFyZ2VfaW50ICkKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVsZCIsIHZhbHVlICkpOworICAgICAgICBlbHNlCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlbGQiLCBGaXgySW50KCB2YWx1ZSApICkpOworI2VuZGlmCisKKyAgICAgICAgKnRvcCsrICAgICAgID0gdmFsdWU7CisgICAgICAgIGRlY29kZXItPnRvcCA9IHRvcDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBvcCA9PSBvcF9jYWxsb3RoZXJzdWJyICkgIC8qIGNhbGxvdGhlcnN1YnIgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBzdWJyX25vOworICAgICAgICBGVF9JbnQgIGFyZ19jbnQ7CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIEZUX1RSQUNFNCgoICIgY2FsbG90aGVyc3ViclxuIiApKTsKKyAgICAgICAgYm9sID0gVFJVRTsKKyNlbmRpZgorCisgICAgICAgIGlmICggdG9wIC0gZGVjb2Rlci0+c3RhY2sgPCAyICkKKyAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICB0b3AgLT0gMjsKKworICAgICAgICBzdWJyX25vID0gRml4MkludCggdG9wWzFdICk7CisgICAgICAgIGFyZ19jbnQgPSBGaXgySW50KCB0b3BbMF0gKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogcmVtb3ZlIGFsbCBvcGVyYW5kcyB0byBjYWxsb3RoZXJzdWJyIGZyb20gdGhlIHN0YWNrICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIGZvciBoYW5kbGVkIG90aGVyc3VicnMsIHdoZXJlIHdlIGtub3cgdGhlIG51bWJlciBvZiAgICAgKi8KKyAgICAgICAgLyogYXJndW1lbnRzLCB3ZSBpbmNyZWFzZSB0aGUgc3RhY2sgYnkgdGhlIHZhbHVlIG9mICAgICAgICAqLworICAgICAgICAvKiBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogZm9yIHVuaGFuZGxlZCBvdGhlcnN1YnJzIHRoZSBmb2xsb3dpbmcgcG9wcyBhZGp1c3QgdGhlICAqLworICAgICAgICAvKiBzdGFjayBwb2ludGVyIGFzIG5lY2Vzc2FyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgaWYgKCBhcmdfY250ID4gdG9wIC0gZGVjb2Rlci0+c3RhY2sgKQorICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgIHRvcCAtPSBhcmdfY250OworCisgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ICAgPSAwOworICAgICAgICB1bmtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMDsKKworICAgICAgICAvKiBYWFggVE9ETzogVGhlIGNoZWNrcyB0byBgYXJnX2NvdW50ID09IDx3aGF0ZXZlcj4nICAgICAgICovCisgICAgICAgIC8qIG1pZ2h0IG5vdCBiZSBjb3JyZWN0OyBhbiBvdGhlcnN1YnIgZXhwZWN0cyBhIGNlcnRhaW4gICAgKi8KKyAgICAgICAgLyogbnVtYmVyIG9mIG9wZXJhbmRzIG9uIHRoZSBQb3N0U2NyaXB0IHN0YWNrIChhcyBvcHBvc2VkICAqLworICAgICAgICAvKiB0byB0aGUgVDEgc3RhY2spIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gcHV0IHRoZW0gdGhlcmUgICovCisgICAgICAgIC8qIGJ5IGl0c2VsZjsgcHJldmlvdXMgb3RoZXJzdWJycyBtaWdodCBoYXZlIGxlZnQgdGhlICAgICAgKi8KKyAgICAgICAgLyogb3BlcmFuZHMgdGhlcmUgaWYgdGhleSB3ZXJlIG5vdCBmb2xsb3dlZCBieSBhbiAgICAgICAgICAqLworICAgICAgICAvKiBhcHByb3ByaWF0ZSBudW1iZXIgb2YgcG9wcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogT24gdGhlIG90aGVyIGhhbmQsIEFkb2JlIFJlYWRlciA3LjAuOCBmb3IgTGludXggZG9lc24ndCAqLworICAgICAgICAvKiBhY2NlcHQgYSBmb250IHRoYXQgY29udGFpbnMgY2hhcnN0cmluZ3MgbGlrZSAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgIDEwMCAyMDAgMiAyMCBjYWxsb3RoZXJzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgMzAwIDEgMjAgY2FsbG90aGVyc3ViciBwb3AgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogUGVyaGFwcyB0aGlzIGlzIHRoZSByZWFzb24gd2h5IEJ1aWxkQ2hhckFycmF5IGV4aXN0cy4gICAqLworCisgICAgICAgIHN3aXRjaCAoIHN1YnJfbm8gKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZmxleCBmZWF0dXJlICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDMgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIGlmICggZGVjb2Rlci0+ZmxleF9zdGF0ZSAgICAgICA9PSAwIHx8CisgICAgICAgICAgICAgICBkZWNvZGVyLT5udW1fZmxleF92ZWN0b3JzICE9IDcgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAiIHVuZXhwZWN0ZWQgZmxleCBlbmRcbiIgKSk7CisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiB0aGUgdHdvIGByZXN1bHRzJyBhcmUgcG9wcGVkIGJ5IHRoZSBmb2xsb3dpbmcgc2V0Y3VycmVudHBvaW50ICovCisgICAgICAgICAgdG9wWzBdID0geDsKKyAgICAgICAgICB0b3BbMV0gPSB5OworICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgZmxleCBmZWF0dXJlICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDAgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIGRlY29kZXItPmZsZXhfc3RhdGUgICAgICAgID0gMTsKKyAgICAgICAgICBkZWNvZGVyLT5udW1fZmxleF92ZWN0b3JzICA9IDA7CisgICAgICAgICAgaWYgKCAoIGVycm9yID0gdDFfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgICAgIT0gRlRfRXJyX09rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgKCBlcnJvciA9IHQxX2J1aWxkZXJfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCA2ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogYWRkIGZsZXggdmVjdG9ycyAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgaWR4OworCisKKyAgICAgICAgICAgIGlmICggYXJnX2NudCAhPSAwICkKKyAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgaWYgKCBkZWNvZGVyLT5mbGV4X3N0YXRlID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG1pc3NpbmcgZmxleCBzdGFydFxuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIG5vdGUgdGhhdCB3ZSBzaG91bGQgbm90IGFkZCBhIHBvaW50IGZvciBpbmRleCAwOyAqLworICAgICAgICAgICAgLyogdGhpcyB3aWxsIG1vdmUgb3VyIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGZsZXggICovCisgICAgICAgICAgICAvKiBwb2ludCB3aXRob3V0IGFkZGluZyBhbnkgcG9pbnQgdG8gdGhlIG91dGxpbmUgICAgKi8KKyAgICAgICAgICAgIGlkeCA9IGRlY29kZXItPm51bV9mbGV4X3ZlY3RvcnMrKzsKKyAgICAgICAgICAgIGlmICggaWR4ID4gMCAmJiBpZHggPCA3ICkKKyAgICAgICAgICAgICAgdDFfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKSggaWR4ID09IDMgfHwgaWR4ID09IDYgKSApOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogY2hhbmdlIGhpbnRzICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDEgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMTsKKworICAgICAgICAgIGlmICggaGludGVyICkKKyAgICAgICAgICAgIGhpbnRlci0+cmVzZXQoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTI6CisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgLyogY291bnRlciBjb250cm9sIGhpbnRzLCBjbGVhciBzdGFjayAqLworICAgICAgICAgIHRvcCA9IGRlY29kZXItPnN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTQ6CisgICAgICAgIGNhc2UgMTU6CisgICAgICAgIGNhc2UgMTY6CisgICAgICAgIGNhc2UgMTc6CisgICAgICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aXBsZSBtYXN0ZXJzICovCisgICAgICAgICAgeworICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisgICAgICAgICAgICBGVF9VSW50ICAgbnVtX3BvaW50cywgbm4sIG1tOworICAgICAgICAgICAgRlRfTG9uZyogIGRlbHRhOworICAgICAgICAgICAgRlRfTG9uZyogIHZhbHVlczsKKworCisgICAgICAgICAgICBpZiAoICFibGVuZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgdW5leHBlY3RlZCBtdWx0aXBsZSBtYXN0ZXJzIG9wZXJhdG9yXG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbnVtX3BvaW50cyA9IChGVF9VSW50KXN1YnJfbm8gLSAxMyArICggc3Vicl9ubyA9PSAxOCApOworICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IChGVF9JbnQpKCBudW1fcG9pbnRzICogYmxlbmQtPm51bV9kZXNpZ25zICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGluY29ycmVjdCBudW1iZXIgb2YgbXVsdGlwbGUgbWFzdGVycyBhcmd1bWVudHNcbiIgKSk7CisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBXZSB3YW50IHRvIGNvbXB1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgYTAqdzAgKyBhMSp3MSArIC4uLiArIGFrKndrICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogYnV0IHdlIG9ubHkgaGF2ZSBhMCwgYTEtYTAsIGEyLWEwLCAuLi4sIGFrLWEwLiAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBIb3dldmVyLCBnaXZlbiB0aGF0IHcwICsgdzEgKyAuLi4gKyB3ayA9PSAxLCB3ZSBjYW4gICAqLworICAgICAgICAgICAgLyogcmV3cml0ZSBpdCBlYXNpbHkgYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAgIGEwICsgKGExLWEwKSp3MSArIChhMi1hMCkqdzIgKyAuLi4gKyAoYWstYTApKndrICAgICAqLworICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHdoZXJlIGsgPT0gbnVtX2Rlc2lnbnMtMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogSSBndWVzcyB0aGF0J3Mgd2h5IGl0J3Mgd3JpdHRlbiBpbiB0aGlzIGBjb21wYWN0JyAgICAgKi8KKyAgICAgICAgICAgIC8qIGZvcm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVsdGEgID0gdG9wICsgbnVtX3BvaW50czsKKyAgICAgICAgICAgIHZhbHVlcyA9IHRvcDsKKyAgICAgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fcG9pbnRzOyBubisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfTG9uZyAgdG1wID0gdmFsdWVzWzBdOworCisKKyAgICAgICAgICAgICAgZm9yICggbW0gPSAxOyBtbSA8IGJsZW5kLT5udW1fZGVzaWduczsgbW0rKyApCisgICAgICAgICAgICAgICAgdG1wICs9IEZUX011bEZpeCggKmRlbHRhKyssIGJsZW5kLT53ZWlnaHRfdmVjdG9yW21tXSApOworCisgICAgICAgICAgICAgICp2YWx1ZXMrKyA9IHRtcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAoRlRfSW50KW51bV9wb2ludHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAvKiA8aWR4PiAxIDE5IGNhbGxvdGhlcnN1YnIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogPT4gcmVwbGFjZSBlbGVtZW50cyBzdGFydGluZyBmcm9tIGluZGV4IGN2aSggPGlkeD4gKSAqLworICAgICAgICAgIC8qICAgIG9mIEJ1aWxkQ2hhckFycmF5IHdpdGggV2VpZ2h0VmVjdG9yICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgICAgaWR4OworICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisKKworICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDEgfHwgYmxlbmQgPT0gTlVMTCApCisgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgIGlkeCA9IEZpeDJJbnQoIHRvcFswXSApOworCisgICAgICAgICAgICBpZiAoIGlkeCA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgKEZUX1VJbnQpaWR4ICsgYmxlbmQtPm51bV9kZXNpZ25zID4gZGVjb2Rlci0+bGVuX2J1aWxkY2hhciApCisgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgIGZ0X21lbWNweSggJmRlY29kZXItPmJ1aWxkY2hhcltpZHhdLAorICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+d2VpZ2h0X3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm51bV9kZXNpZ25zICoKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBibGVuZC0+d2VpZ2h0X3ZlY3RvclswXSApICk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgLyogPGFyZzE+IDxhcmcyPiAyIDIwIGNhbGxvdGhlcnN1YnIgcG9wICAgKi8KKyAgICAgICAgICAvKiA9PT4gcHVzaCA8YXJnMT4gKyA8YXJnMj4gb250byBUMSBzdGFjayAqLworICAgICAgICAgIGlmICggYXJnX2NudCAhPSAyICkKKyAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICB0b3BbMF0gKz0gdG9wWzFdOyAvKiBYWFggKG92ZXJ8dW5kZXIpZmxvdyAqLworCisgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjE6CisgICAgICAgICAgLyogPGFyZzE+IDxhcmcyPiAyIDIxIGNhbGxvdGhlcnN1YnIgcG9wICAgKi8KKyAgICAgICAgICAvKiA9PT4gcHVzaCA8YXJnMT4gLSA8YXJnMj4gb250byBUMSBzdGFjayAqLworICAgICAgICAgIGlmICggYXJnX2NudCAhPSAyICkKKyAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICB0b3BbMF0gLT0gdG9wWzFdOyAvKiBYWFggKG92ZXJ8dW5kZXIpZmxvdyAqLworCisgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgLyogPGFyZzE+IDxhcmcyPiAyIDIyIGNhbGxvdGhlcnN1YnIgcG9wICAgKi8KKyAgICAgICAgICAvKiA9PT4gcHVzaCA8YXJnMT4gKiA8YXJnMj4gb250byBUMSBzdGFjayAqLworICAgICAgICAgIGlmICggYXJnX2NudCAhPSAyICkKKyAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICB0b3BbMF0gPSBGVF9NdWxGaXgoIHRvcFswXSwgdG9wWzFdICk7CisKKyAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDE7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAvKiA8YXJnMT4gPGFyZzI+IDIgMjMgY2FsbG90aGVyc3ViciBwb3AgICAqLworICAgICAgICAgIC8qID09PiBwdXNoIDxhcmcxPiAvIDxhcmcyPiBvbnRvIFQxIHN0YWNrICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDIgfHwgdG9wWzFdID09IDAgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIHRvcFswXSA9IEZUX0RpdkZpeCggdG9wWzBdLCB0b3BbMV0gKTsKKworICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI0OgorICAgICAgICAgIC8qIDx2YWw+IDxpZHg+IDIgMjQgY2FsbG90aGVyc3ViciAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogPT0+IHNldCBCdWlsZENoYXJBcnJheVtjdmkoIDxpZHg+ICldID0gPHZhbD4gKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgICAgaWR4OworICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisKKworICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDIgfHwgYmxlbmQgPT0gTlVMTCApCisgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgIGlkeCA9IEZpeDJJbnQoIHRvcFsxXSApOworCisgICAgICAgICAgICBpZiAoIGlkeCA8IDAgfHwgKEZUX1VJbnQpIGlkeCA+PSBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICkKKyAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF0gPSB0b3BbMF07CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgLyogPGlkeD4gMSAyNSBjYWxsb3RoZXJzdWJyIHBvcCAgICAgICAgKi8KKyAgICAgICAgICAvKiA9PT4gcHVzaCBCdWlsZENoYXJBcnJheVtjdmkoIGlkeCApXSAqLworICAgICAgICAgIC8qICAgICBvbnRvIFQxIHN0YWNrICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICAgIGlkeDsKKyAgICAgICAgICAgIFBTX0JsZW5kICBibGVuZCA9IGRlY29kZXItPmJsZW5kOworCisKKyAgICAgICAgICAgIGlmICggYXJnX2NudCAhPSAxIHx8IGJsZW5kID09IE5VTEwgKQorICAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOworCisgICAgICAgICAgICBpZHggPSBGaXgySW50KCB0b3BbMF0gKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPCAwIHx8IChGVF9VSW50KSBpZHggPj0gZGVjb2Rlci0+bGVuX2J1aWxkY2hhciApCisgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgIHRvcFswXSA9IGRlY29kZXItPmJ1aWxkY2hhcltpZHhdOworICAgICAgICAgIH0KKworICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMTsKKyAgICAgICAgICBicmVhazsKKworI2lmIDAKKyAgICAgICAgY2FzZSAyNjoKKyAgICAgICAgICAvKiA8dmFsPiBtYXJrIDxpZHg+ID09PiBzZXQgQnVpbGRDaGFyQXJyYXlbY3ZpKCA8aWR4PiApXSA9IDx2YWw+LCAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgIGxlYXZlIG1hcmsgb24gVDEgc3RhY2sgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogPHZhbD4gPGlkeD4gICAgICA9PT4gc2V0IEJ1aWxkQ2hhckFycmF5W2N2aSggPGlkeD4gKV0gPSA8dmFsPiAgKi8KKyAgICAgICAgICBYWFggd2hpY2ggcm91dGluZSBoYXMgbGVmdCBpdHMgbWFyayBvbiB0aGUgKFBvc3RTY3JpcHQpIHN0YWNrPzsKKyAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgLyogPHJlczE+IDxyZXMyPiA8dmFsMT4gPHZhbDI+IDQgMjcgY2FsbG90aGVyc3ViciBwb3AgKi8KKyAgICAgICAgICAvKiA9PT4gcHVzaCA8cmVzMT4gb250byBUMSBzdGFjayBpZiA8dmFsMT4gPD0gPHZhbDI+LCAqLworICAgICAgICAgIC8qICAgICBvdGhlcndpc2UgcHVzaCA8cmVzMj4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDQgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIGlmICggdG9wWzJdID4gdG9wWzNdICkKKyAgICAgICAgICAgIHRvcFswXSA9IHRvcFsxXTsKKworICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI4OgorICAgICAgICAgIC8qIDAgMjggY2FsbG90aGVyc3ViciBwb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiA9PiBwdXNoIHJhbmRvbSB2YWx1ZSBmcm9tIGludGVydmFsIFswLCAxKSBvbnRvIHN0YWNrICovCisgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDAgKQorICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBSYW5kOworCisKKyAgICAgICAgICAgIFJhbmQgPSBzZWVkOworICAgICAgICAgICAgaWYgKCBSYW5kID49IDB4ODAwMEwgKQorICAgICAgICAgICAgICBSYW5kKys7CisKKyAgICAgICAgICAgIHRvcFswXSA9IFJhbmQ7CisKKyAgICAgICAgICAgIHNlZWQgPSBGVF9NdWxGaXgoIHNlZWQsIDB4MTAwMDBMIC0gc2VlZCApOworICAgICAgICAgICAgaWYgKCBzZWVkID09IDAgKQorICAgICAgICAgICAgICBzZWVkICs9IDB4Mjg3MzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDE7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAoIGFyZ19jbnQgPj0gMCAmJiBzdWJyX25vID49IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAiIHVua25vd24gb3RoZXJzdWJyIFslZCAlZF0sIHdpc2ggbWUgbHVja1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXJnX2NudCwgc3Vicl9ubyApKTsKKyAgICAgICAgICAgIHVua25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSBhcmdfY250OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOgorICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIG90aGVyc3ViciBbJWQgJWRdXG4iLCBhcmdfY250LCBzdWJyX25vICkpOworICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICB9CisKKyAgICAgICAgdG9wICs9IGtub3duX290aGVyc3Vicl9yZXN1bHRfY250OworCisgICAgICAgIGRlY29kZXItPnRvcCA9IHRvcDsKKyAgICAgIH0KKyAgICAgIGVsc2UgIC8qIGdlbmVyYWwgb3BlcmF0b3IgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBudW1fYXJncyA9IHQxX2FyZ3NfY291bnRbb3BdOworCisKKyAgICAgICAgRlRfQVNTRVJUKCBudW1fYXJncyA+PSAwICk7CisKKyAgICAgICAgaWYgKCB0b3AgLSBkZWNvZGVyLT5zdGFjayA8IG51bV9hcmdzICkKKyAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAvKiBYWFggT3BlcmF0b3JzIHVzdWFsbHkgdGFrZSB0aGVpciBvcGVyYW5kcyBmcm9tIHRoZSAgICAgICAgKi8KKyAgICAgICAgLyogICAgIGJvdHRvbSBvZiB0aGUgc3RhY2ssIGkuZS4sIHRoZSBvcGVyYW5kcyBhcmUgICAgICAgICAgICovCisgICAgICAgIC8qICAgICBkZWNvZGVyLT5zdGFja1swXSwgLi4uLCBkZWNvZGVyLT5zdGFja1tudW1fYXJncyAtIDFdOyAqLworICAgICAgICAvKiAgICAgb25seSBkaXYsIGNhbGxzdWJyLCBhbmQgY2FsbG90aGVyc3ViciBhcmUgZGlmZmVyZW50LiAgKi8KKyAgICAgICAgLyogICAgIEluIHByYWN0aWNlIGl0IGRvZXNuJ3QgbWF0dGVyICg/KS4gICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIG9wX2NhbGxzdWJyOgorICAgICAgICBjYXNlIG9wX2RpdjoKKyAgICAgICAgY2FzZSBvcF9jYWxsb3RoZXJzdWJyOgorICAgICAgICBjYXNlIG9wX3BvcDoKKyAgICAgICAgY2FzZSBvcF9yZXR1cm46CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBpZiAoIHRvcCAtIGRlY29kZXItPnN0YWNrICE9IG51bV9hcmdzICkKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgdG9vIG11Y2ggb3BlcmFuZHMgb24gdGhlIHN0YWNrIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAoc2VlbiAlZCwgZXhwZWN0ZWQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9wIC0gZGVjb2Rlci0+c3RhY2ssIG51bV9hcmdzICkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgICAgdG9wIC09IG51bV9hcmdzOworCisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIG9wX2VuZGNoYXI6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOworCisgICAgICAgICAgdDFfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisKKyAgICAgICAgICAvKiBjbG9zZSBoaW50cyByZWNvcmRpbmcgc2Vzc2lvbiAqLworICAgICAgICAgIGlmICggaGludGVyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGhpbnRlci0+Y2xvc2UoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICkgKQorICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgLyogYXBwbHkgaGludHMgdG8gdGhlIGxvYWRlZCBnbHlwaCBvdXRsaW5lIG5vdyAqLworICAgICAgICAgICAgZXJyb3IgPSBoaW50ZXItPmFwcGx5KCBoaW50ZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5jdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFNIX0dsb2JhbHMpYnVpbGRlci0+aGludHNfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+aGludF9tb2RlICk7CisgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KKyAgICAgICAgICBGVF9HbHlwaExvYWRlcl9BZGQoIGJ1aWxkZXItPmxvYWRlciApOworCisgICAgICAgICAgLyogdGhlIGNvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSBhd2F5IHRoaXMgZW1wdHkgbG9vcCBidXQgLi4uICovCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgICAgICAgaWYgKCBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyID4gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgaTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiQnVpbGRDaGFyQXJyYXkgPSBbICIgKSk7CisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGVjb2Rlci0+bGVuX2J1aWxkY2hhcjsgKytpICkKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiVkICIsIGRlY29kZXItPmJ1aWxkY2hhcltpXSApKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIl1cbiIgKSk7CisgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworICAgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisKKyAgICAgICAgICAvKiByZXR1cm4gbm93ISAqLworICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgICAgICAgY2FzZSBvcF9oc2J3OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgaHNidyIgKSk7CisKKyAgICAgICAgICBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9IFQxX1BhcnNlX0hhdmVfV2lkdGg7CisKKyAgICAgICAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueCArPSB0b3BbMF07CisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgID0gdG9wWzFdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgICA9IDA7CisKKyAgICAgICAgICBvcmlnX3ggPSB4ID0gYnVpbGRlci0+cG9zX3ggKyB0b3BbMF07CisgICAgICAgICAgb3JpZ195ID0geSA9IGJ1aWxkZXItPnBvc195OworCisgICAgICAgICAgRlRfVU5VU0VEKCBvcmlnX3kgKTsKKworICAgICAgICAgIC8qIHRoZSBgbWV0cmljc19vbmx5JyBpbmRpY2F0ZXMgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSAqLworICAgICAgICAgIC8qIHRoZSBnbHlwaCdzIG1ldHJpY3MgKGxzYiArIGFkdmFuY2Ugd2lkdGgpLCBub3QgbG9hZCB0aGUgICAqLworICAgICAgICAgIC8qIHJlc3Qgb2YgaXQ7IHNvIGV4aXQgaW1tZWRpYXRlbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggYnVpbGRlci0+bWV0cmljc19vbmx5ICkKKyAgICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX3NlYWM6CisgICAgICAgICAgcmV0dXJuIHQxb3BlcmF0b3Jfc2VhYyggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXgySW50KCB0b3BbM10gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXgySW50KCB0b3BbNF0gKSApOworCisgICAgICAgIGNhc2Ugb3Bfc2J3OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2J3IiApKTsKKworICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9XaWR0aDsKKworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ICs9IHRvcFswXTsKKyAgICAgICAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSArPSB0b3BbMV07CisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgID0gdG9wWzJdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgICA9IHRvcFszXTsKKworICAgICAgICAgIHggPSBidWlsZGVyLT5wb3NfeCArIHRvcFswXTsKKyAgICAgICAgICB5ID0gYnVpbGRlci0+cG9zX3kgKyB0b3BbMV07CisKKyAgICAgICAgICAvKiB0aGUgYG1ldHJpY3Nfb25seScgaW5kaWNhdGVzIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgKi8KKyAgICAgICAgICAvKiB0aGUgZ2x5cGgncyBtZXRyaWNzIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlICAgKi8KKyAgICAgICAgICAvKiByZXN0IG9mIGl0OyBzbyBleGl0IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGJ1aWxkZXItPm1ldHJpY3Nfb25seSApCisgICAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9jbG9zZXBhdGg6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjbG9zZXBhdGgiICkpOworCisgICAgICAgICAgLyogaWYgdGhlcmUgaXMgbm8gcGF0aCwgYGNsb3NlcGF0aCcgaXMgYSBuby1vcCAqLworICAgICAgICAgIGlmICggYnVpbGRlci0+cGFyc2Vfc3RhdGUgPT0gVDFfUGFyc2VfSGF2ZV9QYXRoICAgfHwKKyAgICAgICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID09IFQxX1BhcnNlX0hhdmVfTW92ZXRvICkKKyAgICAgICAgICAgIHQxX2J1aWxkZXJfY2xvc2VfY29udG91ciggYnVpbGRlciApOworCisgICAgICAgICAgYnVpbGRlci0+cGFyc2Vfc3RhdGUgPSBUMV9QYXJzZV9IYXZlX1dpZHRoOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfaGxpbmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhsaW5ldG8iICkpOworCisgICAgICAgICAgaWYgKCAoIGVycm9yID0gdDFfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgICAgIT0gRlRfRXJyX09rICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIHggKz0gdG9wWzBdOworICAgICAgICAgIGdvdG8gQWRkX0xpbmU7CisKKyAgICAgICAgY2FzZSBvcF9obW92ZXRvOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgaG1vdmV0byIgKSk7CisKKyAgICAgICAgICB4ICs9IHRvcFswXTsKKyAgICAgICAgICBpZiAoICFkZWNvZGVyLT5mbGV4X3N0YXRlICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGJ1aWxkZXItPnBhcnNlX3N0YXRlID09IFQxX1BhcnNlX1N0YXJ0ICkKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9IFQxX1BhcnNlX0hhdmVfTW92ZXRvOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX2h2Y3VydmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGh2Y3VydmV0byIgKSk7CisKKyAgICAgICAgICBpZiAoICggZXJyb3IgPSB0MV9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAoIGVycm9yID0gdDFfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKSApCisgICAgICAgICAgICAgICAgICE9IEZUX0Vycl9PayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgeCArPSB0b3BbMF07CisgICAgICAgICAgdDFfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICB4ICs9IHRvcFsxXTsKKyAgICAgICAgICB5ICs9IHRvcFsyXTsKKyAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworICAgICAgICAgIHkgKz0gdG9wWzNdOworICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9ybGluZXRvOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmxpbmV0byIgKSk7CisKKyAgICAgICAgICBpZiAoICggZXJyb3IgPSB0MV9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgeCArPSB0b3BbMF07CisgICAgICAgICAgeSArPSB0b3BbMV07CisKKyAgICAgICAgQWRkX0xpbmU6CisgICAgICAgICAgaWYgKCAoIGVycm9yID0gdDFfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgKQorICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3Bfcm1vdmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJtb3ZldG8iICkpOworCisgICAgICAgICAgeCArPSB0b3BbMF07CisgICAgICAgICAgeSArPSB0b3BbMV07CisgICAgICAgICAgaWYgKCAhZGVjb2Rlci0+ZmxleF9zdGF0ZSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9PSBUMV9QYXJzZV9TdGFydCApCisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgYnVpbGRlci0+cGFyc2Vfc3RhdGUgPSBUMV9QYXJzZV9IYXZlX01vdmV0bzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9ycmN1cnZldG86CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBycmN1cnZldG8iICkpOworCisgICAgICAgICAgaWYgKCAoIGVycm9yID0gdDFfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgICAgIT0gRlRfRXJyX09rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgKCBlcnJvciA9IHQxX2J1aWxkZXJfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCAzICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIHggKz0gdG9wWzBdOworICAgICAgICAgIHkgKz0gdG9wWzFdOworICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICB4ICs9IHRvcFsyXTsKKyAgICAgICAgICB5ICs9IHRvcFszXTsKKyAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgeCArPSB0b3BbNF07CisgICAgICAgICAgeSArPSB0b3BbNV07CisgICAgICAgICAgdDFfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX3ZoY3VydmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZoY3VydmV0byIgKSk7CisKKyAgICAgICAgICBpZiAoICggZXJyb3IgPSB0MV9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAoIGVycm9yID0gdDFfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKSApCisgICAgICAgICAgICAgICAgICE9IEZUX0Vycl9PayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgeSArPSB0b3BbMF07CisgICAgICAgICAgdDFfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKyAgICAgICAgICB4ICs9IHRvcFsxXTsKKyAgICAgICAgICB5ICs9IHRvcFsyXTsKKyAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworICAgICAgICAgIHggKz0gdG9wWzNdOworICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF92bGluZXRvOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgdmxpbmV0byIgKSk7CisKKyAgICAgICAgICBpZiAoICggZXJyb3IgPSB0MV9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICAgICAhPSBGVF9FcnJfT2sgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgeSArPSB0b3BbMF07CisgICAgICAgICAgZ290byBBZGRfTGluZTsKKworICAgICAgICBjYXNlIG9wX3Ztb3ZldG86CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB2bW92ZXRvIiApKTsKKworICAgICAgICAgIHkgKz0gdG9wWzBdOworICAgICAgICAgIGlmICggIWRlY29kZXItPmZsZXhfc3RhdGUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggYnVpbGRlci0+cGFyc2Vfc3RhdGUgPT0gVDFfUGFyc2VfU3RhcnQgKQorICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9Nb3ZldG87CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfZGl2OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgZGl2IiApKTsKKworICAgICAgICAgIC8qIGlmIGBsYXJnZV9pbnQnIGlzIHNldCwgd2UgZGl2aWRlIHVuc2NhbGVkIG51bWJlcnM7ICovCisgICAgICAgICAgLyogb3RoZXJ3aXNlLCB3ZSBkaXZpZGUgbnVtYmVycyBpbiAxNi4xNiBmb3JtYXQgLS0gICAgKi8KKyAgICAgICAgICAvKiBpbiBib3RoIGNhc2VzLCBpdCBpcyB0aGUgc2FtZSBvcGVyYXRpb24gICAgICAgICAgICAqLworICAgICAgICAgICp0b3AgPSBGVF9EaXZGaXgoIHRvcFswXSwgdG9wWzFdICk7CisgICAgICAgICAgKyt0b3A7CisKKyAgICAgICAgICBsYXJnZV9pbnQgPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX2NhbGxzdWJyOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgaWR4OworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2FsbHN1YnIiICkpOworCisgICAgICAgICAgICBpZHggPSBGaXgySW50KCB0b3BbMF0gKTsKKyAgICAgICAgICAgIGlmICggaWR4IDwgMCB8fCBpZHggPj0gZGVjb2Rlci0+bnVtX3N1YnJzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHN1YnJzIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gVDFfTUFYX1NVQlJTX0NBTExTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbWFueSBuZXN0ZWQgc3VicnNcbiIgKSk7CisgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB6b25lLT5jdXJzb3IgPSBpcDsgIC8qIHNhdmUgY3VycmVudCBpbnN0cnVjdGlvbiBwb2ludGVyICovCisKKyAgICAgICAgICAgIHpvbmUrKzsKKworICAgICAgICAgICAgLyogVGhlIFR5cGUgMSBkcml2ZXIgc3RvcmVzIHN1YnJvdXRpbmVzIHdpdGhvdXQgdGhlIHNlZWQgYnl0ZXMuICovCisgICAgICAgICAgICAvKiBUaGUgQ0lEIGRyaXZlciBzdG9yZXMgc3Vicm91dGluZXMgd2l0aCBzZWVkIGJ5dGVzLiAgVGhpcyAgICAgKi8KKyAgICAgICAgICAgIC8qIGNhc2UgaXMgdGFrZW4gY2FyZSBvZiB3aGVuIGRlY29kZXItPnN1YnJzX2xlbiA9PSAwLiAgICAgICAgICAqLworICAgICAgICAgICAgem9uZS0+YmFzZSA9IGRlY29kZXItPnN1YnJzW2lkeF07CisKKyAgICAgICAgICAgIGlmICggZGVjb2Rlci0+c3VicnNfbGVuICkKKyAgICAgICAgICAgICAgem9uZS0+bGltaXQgPSB6b25lLT5iYXNlICsgZGVjb2Rlci0+c3VicnNfbGVuW2lkeF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFdlIGFyZSB1c2luZyBzdWJyb3V0aW5lcyBmcm9tIGEgQ0lEIGZvbnQuICBXZSBtdXN0IGFkanVzdCAqLworICAgICAgICAgICAgICAvKiBmb3IgdGhlIHNlZWQgYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgem9uZS0+YmFzZSAgKz0gKCBkZWNvZGVyLT5sZW5JViA+PSAwID8gZGVjb2Rlci0+bGVuSVYgOiAwICk7CisgICAgICAgICAgICAgIHpvbmUtPmxpbWl0ICA9IGRlY29kZXItPnN1YnJzW2lkeCArIDFdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB6b25lLT5jdXJzb3IgPSB6b25lLT5iYXNlOworCisgICAgICAgICAgICBpZiAoICF6b25lLT5iYXNlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2luZyBlbXB0eSBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlY29kZXItPnpvbmUgPSB6b25lOworICAgICAgICAgICAgaXAgICAgICAgICAgICA9IHpvbmUtPmJhc2U7CisgICAgICAgICAgICBsaW1pdCAgICAgICAgID0gem9uZS0+bGltaXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9wb3A6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBwb3AiICkpOworCisgICAgICAgICAgaWYgKCBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA+IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250LS07CisgICAgICAgICAgICAvKiBpZ25vcmUsIHdlIHB1c2hlZCB0aGUgb3BlcmFuZHMgb3Vyc2VsdmVzICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIHVua25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPT0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICIgbm8gbW9yZSBvcGVyYW5kcyBmb3Igb3RoZXJzdWJyXG4iICkpOworICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgfQorCisgICAgICAgICAgdW5rbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudC0tOworICAgICAgICAgIHRvcCsrOyAgIC8qIGBwdXNoJyB0aGUgb3BlcmFuZCB0byBjYWxsb3RoZXJzdWJyIG9udG8gdGhlIHN0YWNrICovCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF9yZXR1cm46CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiByZXR1cm4iICkpOworCisgICAgICAgICAgaWYgKCB6b25lIDw9IGRlY29kZXItPnpvbmVzICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIHJldHVyblxuIiApKTsKKyAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgIH0KKworICAgICAgICAgIHpvbmUtLTsKKyAgICAgICAgICBpcCAgICAgICAgICAgID0gem9uZS0+Y3Vyc29yOworICAgICAgICAgIGxpbWl0ICAgICAgICAgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICBkZWNvZGVyLT56b25lID0gem9uZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX2RvdHNlY3Rpb246CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkb3RzZWN0aW9uIiApKTsKKworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfaHN0ZW06CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoc3RlbSIgKSk7CisKKyAgICAgICAgICAvKiByZWNvcmQgaG9yaXpvbnRhbCBoaW50ICovCisgICAgICAgICAgaWYgKCBoaW50ZXIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHRvcFswXSArPSBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueTsgKi8KKyAgICAgICAgICAgIGhpbnRlci0+c3RlbSggaGludGVyLT5oaW50cywgMSwgdG9wICk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfaHN0ZW0zOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgaHN0ZW0zIiApKTsKKworICAgICAgICAgIC8qIHJlY29yZCBob3Jpem9udGFsIGNvdW50ZXItY29udHJvbGxlZCBoaW50cyAqLworICAgICAgICAgIGlmICggaGludGVyICkKKyAgICAgICAgICAgIGhpbnRlci0+c3RlbTMoIGhpbnRlci0+aGludHMsIDEsIHRvcCApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ugb3BfdnN0ZW06CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB2c3RlbSIgKSk7CisKKyAgICAgICAgICAvKiByZWNvcmQgdmVydGljYWwgaGludCAqLworICAgICAgICAgIGlmICggaGludGVyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0b3BbMF0gKz0gb3JpZ194OworICAgICAgICAgICAgaGludGVyLT5zdGVtKCBoaW50ZXItPmhpbnRzLCAwLCB0b3AgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBvcF92c3RlbTM6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB2c3RlbTMiICkpOworCisgICAgICAgICAgLyogcmVjb3JkIHZlcnRpY2FsIGNvdW50ZXItY29udHJvbGxlZCBoaW50cyAqLworICAgICAgICAgIGlmICggaGludGVyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIGR4ID0gb3JpZ194OworCisKKyAgICAgICAgICAgIHRvcFswXSArPSBkeDsKKyAgICAgICAgICAgIHRvcFsyXSArPSBkeDsKKyAgICAgICAgICAgIHRvcFs0XSArPSBkeDsKKyAgICAgICAgICAgIGhpbnRlci0+c3RlbTMoIGhpbnRlci0+aGludHMsIDAsIHRvcCApOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX3NldGN1cnJlbnRwb2ludDoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNldGN1cnJlbnRwb2ludCIgKSk7CisKKyAgICAgICAgICAvKiBGcm9tIHRoZSBUMSBzcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDYuNDogICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIFRoZSBzZXRjdXJyZW50cG9pbnQgY29tbWFuZCBpcyB1c2VkIG9ubHkgaW4gICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIGNvbmp1bmN0aW9uIHdpdGggcmVzdWx0cyBmcm9tIE90aGVyU3VicnMgcHJvY2VkdXJlcy4gKi8KKworICAgICAgICAgIC8qIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ICE9IDAgaXMgYWxyZWFkeSBoYW5kbGVkICAgICAqLworICAgICAgICAgIC8qIGFib3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgLyogTm90ZSwgaG93ZXZlciwgdGhhdCBib3RoIEdob3N0c2NyaXB0IGFuZCBBZG9iZSAgICAgICAgICovCisgICAgICAgICAgLyogRGlzdGlsbGVyIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBieSBzaWxlbnRseSBpZ25vcmluZyAgICovCisgICAgICAgICAgLyogdGhlIGluYXBwcm9wcmlhdGUgYHNldGN1cnJlbnRwb2ludCcgaW5zdHJ1Y3Rpb24uICBTbyAgICovCisgICAgICAgICAgLyogd2UgZG8gdGhlIHNhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgMAorCisgICAgICAgICAgaWYgKCBkZWNvZGVyLT5mbGV4X3N0YXRlICE9IDEgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAiIHVuZXhwZWN0ZWQgYHNldGN1cnJlbnRwb2ludCdcbiIgKSk7CisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgLi4uCisjZW5kaWYKKworICAgICAgICAgIHggPSB0b3BbMF07CisgICAgICAgICAgeSA9IHRvcFsxXTsKKyAgICAgICAgICBkZWNvZGVyLT5mbGV4X3N0YXRlID0gMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG9wX3Vua25vd24xNToKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIG9wY29kZV8xNSIgKSk7CisgICAgICAgICAgLyogbm90aGluZyB0byBkbyBleGNlcHQgdG8gcG9wIHRoZSB0d28gYXJndW1lbnRzICovCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICIgdW5oYW5kbGVkIG9wY29kZSAlZFxuIiwgb3AgKSk7CisgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBYWFggT3BlcmF0b3JzIHVzdWFsbHkgY2xlYXIgdGhlIG9wZXJhbmQgc3RhY2s7ICAqLworICAgICAgICAvKiAgICAgb25seSBkaXYsIGNhbGxzdWJyLCBjYWxsb3RoZXJzdWJyLCBwb3AsIGFuZCAqLworICAgICAgICAvKiAgICAgcmV0dXJuIGFyZSBkaWZmZXJlbnQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgSW4gcHJhY3RpY2UgaXQgZG9lc24ndCBtYXR0ZXIgKD8pLiAgICAgICAgICAqLworCisgICAgICAgIGRlY29kZXItPnRvcCA9IHRvcDsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgICAgICAgIGJvbCA9IFRSVUU7CisjZW5kaWYKKworICAgICAgfSAvKiBnZW5lcmFsIG9wZXJhdG9yIHByb2Nlc3NpbmcgKi8KKworICAgIH0gLyogd2hpbGUgaXAgPCBsaW1pdCAqLworCisgICAgRlRfVFJBQ0U0KCggIi4uZW5kLi5cblxuIiApKTsKKworICBGYWlsOgorICAgIHJldHVybiBlcnJvcjsKKworICBTeW50YXhfRXJyb3I6CisgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKworICBTdGFja19VbmRlcmZsb3c6CisgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19VbmRlcmZsb3cgKTsKKyAgfQorCisKKyAgLyogcGFyc2UgYSBzaW5nbGUgVHlwZSAxIGdseXBoICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0MV9kZWNvZGVyX3BhcnNlX2dseXBoKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaCApCisgIHsKKyAgICByZXR1cm4gZGVjb2Rlci0+cGFyc2VfY2FsbGJhY2soIGRlY29kZXIsIGdseXBoICk7CisgIH0KKworCisgIC8qIGluaXRpYWxpemUgVDEgZGVjb2RlciAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdDFfZGVjb2Rlcl9pbml0KCBUMV9EZWNvZGVyICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgICAgICAgICAgIGdseXBoX25hbWVzLAorICAgICAgICAgICAgICAgICAgIFBTX0JsZW5kICAgICAgICAgICAgIGJsZW5kLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgICAgIGhpbnRpbmcsCisgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgICAgaGludF9tb2RlLAorICAgICAgICAgICAgICAgICAgIFQxX0RlY29kZXJfQ2FsbGJhY2sgIHBhcnNlX2NhbGxiYWNrICkKKyAgeworICAgIEZUX01FTV9aRVJPKCBkZWNvZGVyLCBzaXplb2YgKCAqZGVjb2RlciApICk7CisKKyAgICAvKiByZXRyaWV2ZSBQU05hbWVzIGludGVyZmFjZSBmcm9tIGxpc3Qgb2YgY3VycmVudCBtb2R1bGVzICovCisgICAgeworICAgICAgRlRfU2VydmljZV9Qc0NNYXBzICBwc25hbWVzOworCisKKyAgICAgIEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSggZmFjZSwgcHNuYW1lcywgUE9TVFNDUklQVF9DTUFQUyApOworICAgICAgaWYgKCAhcHNuYW1lcyApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfaW5pdDoiCisgICAgICAgICAgICAgICAgICAgIiB0aGUgYHBzbmFtZXMnIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlXG4iICkpOworICAgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgICAgfQorCisgICAgICBkZWNvZGVyLT5wc25hbWVzID0gcHNuYW1lczsKKyAgICB9CisKKyAgICB0MV9idWlsZGVyX2luaXQoICZkZWNvZGVyLT5idWlsZGVyLCBmYWNlLCBzaXplLCBzbG90LCBoaW50aW5nICk7CisKKyAgICAvKiBkZWNvZGVyLT5idWlsZGNoYXIgYW5kIGRlY29kZXItPmxlbl9idWlsZGNoYXIgaGF2ZSB0byBiZSAgKi8KKyAgICAvKiBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIHNpbmNlIHdlIGNhbm5vdCBrbm93IHRoZSBsZW5ndGggKi8KKyAgICAvKiBvZiB0aGUgQnVpbGRDaGFyQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGRlY29kZXItPm51bV9nbHlwaHMgICAgID0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBoczsKKyAgICBkZWNvZGVyLT5nbHlwaF9uYW1lcyAgICA9IGdseXBoX25hbWVzOworICAgIGRlY29kZXItPmhpbnRfbW9kZSAgICAgID0gaGludF9tb2RlOworICAgIGRlY29kZXItPmJsZW5kICAgICAgICAgID0gYmxlbmQ7CisgICAgZGVjb2Rlci0+cGFyc2VfY2FsbGJhY2sgPSBwYXJzZV9jYWxsYmFjazsKKworICAgIGRlY29kZXItPmZ1bmNzICAgICAgICAgID0gdDFfZGVjb2Rlcl9mdW5jczsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIGZpbmFsaXplIFQxIGRlY29kZXIgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgdDFfZGVjb2Rlcl9kb25lKCBUMV9EZWNvZGVyICBkZWNvZGVyICkKKyAgeworICAgIHQxX2J1aWxkZXJfZG9uZSggJmRlY29kZXItPmJ1aWxkZXIgKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC90MWRlY29kZS5oIGIvZnJlZXR5cGUtMi42L3NyYy9wc2F1eC90MWRlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzA3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzYXV4L3QxZGVjb2RlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDFkZWNvZGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVDFERUNPREVfSF9fCisjZGVmaW5lIF9fVDFERUNPREVfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBUMV9EZWNvZGVyX0Z1bmNzUmVjICB0MV9kZWNvZGVyX2Z1bmNzOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdDFfZGVjb2Rlcl9wYXJzZV9nbHlwaCggVDFfRGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXggKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZW4gKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0MV9kZWNvZGVyX2luaXQoIFQxX0RlY29kZXIgICAgICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICAgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICAgICAgICAgICAgZ2x5cGhfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgUFNfQmxlbmQgICAgICAgICAgICAgYmxlbmQsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICAgICBoaW50X21vZGUsCisgICAgICAgICAgICAgICAgICAgVDFfRGVjb2Rlcl9DYWxsYmFjayAgcGFyc2VfZ2x5cGggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX2RlY29kZXJfZG9uZSggVDFfRGVjb2RlciAgZGVjb2RlciApOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVDFERUNPREVfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2M2M0NwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL3BzaGludGVyIEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSBwc2hpbnRlciA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gcHNocmVjIHBzaGdsb2IgcHNoYWxnbyBwc2htb2QgcHNocGljIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHBzaGludGVyIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL3BzaGludGVyIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkOGU1NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgRnJlZVR5cGUgMiBQU0hpbnRlciBtb2R1bGUgZGVmaW5pdGlvbgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBQU0hJTlRFUl9NT0RVTEUKKworZGVmaW5lIFBTSElOVEVSX01PRFVMRQorJChPUEVOX0RSSVZFUikgRlRfTW9kdWxlX0NsYXNzLCBwc2hpbnRlcl9tb2R1bGVfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXBzaGludGVyICAkKEVDSE9fRFJJVkVSX0RFU0MpUG9zdHNjcmlwdCBoaW50ZXIgbW9kdWxlJChFQ0hPX0RSSVZFUl9ET05FKQorZW5kZWYKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkYjNlZAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCkBAIC0wLDAgKzEsMjI4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNoYWxnby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KKy8qICBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisjaW5jbHVkZSAicHNoYWxnby5oIgorCisjaW5jbHVkZSAicHNobnRlcnIuaCIKKworCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BzaGFsZ28yCisKKworI2lmZGVmIERFQlVHX0hJTlRFUgorICBQU0hfSGludF9UYWJsZSAgcHNfZGVidWdfaGludF90YWJsZSA9IE5VTEw7CisgIFBTSF9IaW50RnVuYyAgICBwc19kZWJ1Z19oaW50X2Z1bmMgID0gTlVMTDsKKyAgUFNIX0dseXBoICAgICAgIHBzX2RlYnVnX2dseXBoICAgICAgPSBOVUxMOworI2VuZGlmCisKKworI2RlZmluZSAgQ09NUFVURV9JTkZMRVhTICAvKiBjb21wdXRlIGluZmxlY3Rpb24gcG9pbnRzIHRvIG9wdGltaXplIGBTJyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2ltaWxhciBnbHlwaHMgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgQkFTSUMgSElOVFMgUkVDT1JESU5HUyAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogcmV0dXJuIHRydWUgaWYgdHdvIHN0ZW0gaGludHMgb3ZlcmxhcCAqLworICBzdGF0aWMgRlRfSW50CisgIHBzaF9oaW50X292ZXJsYXAoIFBTSF9IaW50ICBoaW50MSwKKyAgICAgICAgICAgICAgICAgICAgUFNIX0hpbnQgIGhpbnQyICkKKyAgeworICAgIHJldHVybiBoaW50MS0+b3JnX3BvcyArIGhpbnQxLT5vcmdfbGVuID49IGhpbnQyLT5vcmdfcG9zICYmCisgICAgICAgICAgIGhpbnQyLT5vcmdfcG9zICsgaGludDItPm9yZ19sZW4gPj0gaGludDEtPm9yZ19wb3M7CisgIH0KKworCisgIC8qIGRlc3Ryb3kgaGludHMgdGFibGUgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNoX2hpbnRfdGFibGVfZG9uZSggUFNIX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0ZSRUUoIHRhYmxlLT56b25lcyApOworICAgIHRhYmxlLT5udW1fem9uZXMgPSAwOworICAgIHRhYmxlLT56b25lICAgICAgPSBOVUxMOworCisgICAgRlRfRlJFRSggdGFibGUtPnNvcnQgKTsKKyAgICBGVF9GUkVFKCB0YWJsZS0+aGludHMgKTsKKyAgICB0YWJsZS0+bnVtX2hpbnRzICAgPSAwOworICAgIHRhYmxlLT5tYXhfaGludHMgICA9IDA7CisgICAgdGFibGUtPnNvcnRfZ2xvYmFsID0gTlVMTDsKKyAgfQorCisKKyAgLyogZGVhY3RpdmF0ZSBhbGwgaGludHMgaW4gYSB0YWJsZSAqLworICBzdGF0aWMgdm9pZAorICBwc2hfaGludF90YWJsZV9kZWFjdGl2YXRlKCBQU0hfSGludF9UYWJsZSAgdGFibGUgKQorICB7CisgICAgRlRfVUludCAgIGNvdW50ID0gdGFibGUtPm1heF9oaW50czsKKyAgICBQU0hfSGludCAgaGludCAgPSB0YWJsZS0+aGludHM7CisKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBoaW50KysgKQorICAgIHsKKyAgICAgIHBzaF9oaW50X2RlYWN0aXZhdGUoIGhpbnQgKTsKKyAgICAgIGhpbnQtPm9yZGVyID0gLTE7CisgICAgfQorICB9CisKKworICAvKiBpbnRlcm5hbCBmdW5jdGlvbiB0byByZWNvcmQgYSBuZXcgaGludCAqLworICBzdGF0aWMgdm9pZAorICBwc2hfaGludF90YWJsZV9yZWNvcmQoIFBTSF9IaW50X1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgaWR4ICkKKyAgeworICAgIFBTSF9IaW50ICBoaW50ID0gdGFibGUtPmhpbnRzICsgaWR4OworCisKKyAgICBpZiAoIGlkeCA+PSB0YWJsZS0+bWF4X2hpbnRzICkKKyAgICB7CisgICAgICBGVF9UUkFDRTAoKCAicHNoX2hpbnRfdGFibGVfcmVjb3JkOiBpbnZhbGlkIGhpbnQgaW5kZXggJWRcbiIsIGlkeCApKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBpZ25vcmUgYWN0aXZlIGhpbnRzICovCisgICAgaWYgKCBwc2hfaGludF9pc19hY3RpdmUoIGhpbnQgKSApCisgICAgICByZXR1cm47CisKKyAgICBwc2hfaGludF9hY3RpdmF0ZSggaGludCApOworCisgICAgLyogbm93IHNjYW4gdGhlIGN1cnJlbnQgYWN0aXZlIGhpbnQgc2V0IHRvIGNoZWNrICovCisgICAgLyogd2hldGhlciBgaGludCcgb3ZlcmxhcHMgd2l0aCBhbm90aGVyIGhpbnQgICAgICovCisgICAgeworICAgICAgUFNIX0hpbnQqICBzb3J0ZWQgPSB0YWJsZS0+c29ydF9nbG9iYWw7CisgICAgICBGVF9VSW50ICAgIGNvdW50ICA9IHRhYmxlLT5udW1faGludHM7CisgICAgICBQU0hfSGludCAgIGhpbnQyOworCisKKyAgICAgIGhpbnQtPnBhcmVudCA9IE5VTEw7CisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc29ydGVkKysgKQorICAgICAgeworICAgICAgICBoaW50MiA9IHNvcnRlZFswXTsKKworICAgICAgICBpZiAoIHBzaF9oaW50X292ZXJsYXAoIGhpbnQsIGhpbnQyICkgKQorICAgICAgICB7CisgICAgICAgICAgaGludC0+cGFyZW50ID0gaGludDI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHRhYmxlLT5udW1faGludHMgPCB0YWJsZS0+bWF4X2hpbnRzICkKKyAgICAgIHRhYmxlLT5zb3J0X2dsb2JhbFt0YWJsZS0+bnVtX2hpbnRzKytdID0gaGludDsKKyAgICBlbHNlCisgICAgICBGVF9UUkFDRTAoKCAicHNoX2hpbnRfdGFibGVfcmVjb3JkOiB0b28gbWFueSBzb3J0ZWQgaGludHMhICBCVUchXG4iICkpOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBwc2hfaGludF90YWJsZV9yZWNvcmRfbWFzayggUFNIX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfTWFzayAgICAgICAgIGhpbnRfbWFzayApCisgIHsKKyAgICBGVF9JbnQgICAgbWFzayA9IDAsIHZhbCA9IDA7CisgICAgRlRfQnl0ZSogIGN1cnNvciA9IGhpbnRfbWFzay0+Ynl0ZXM7CisgICAgRlRfVUludCAgIGlkeCwgbGltaXQ7CisKKworICAgIGxpbWl0ID0gaGludF9tYXNrLT5udW1fYml0czsKKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IGxpbWl0OyBpZHgrKyApCisgICAgeworICAgICAgaWYgKCBtYXNrID09IDAgKQorICAgICAgeworICAgICAgICB2YWwgID0gKmN1cnNvcisrOworICAgICAgICBtYXNrID0gMHg4MDsKKyAgICAgIH0KKworICAgICAgaWYgKCB2YWwgJiBtYXNrICkKKyAgICAgICAgcHNoX2hpbnRfdGFibGVfcmVjb3JkKCB0YWJsZSwgaWR4ICk7CisKKyAgICAgIG1hc2sgPj49IDE7CisgICAgfQorICB9CisKKworICAvKiBjcmVhdGUgaGludHMgdGFibGUgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzaF9oaW50X3RhYmxlX2luaXQoIFBTSF9IaW50X1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUFNfSGludF9UYWJsZSAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBQU19NYXNrX1RhYmxlICAgaGludF9tYXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgUFNfTWFza19UYWJsZSAgIGNvdW50ZXJfbWFza3MsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfVUludCAgIGNvdW50OworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIEZUX1VOVVNFRCggY291bnRlcl9tYXNrcyApOworCisKKyAgICBjb3VudCA9IGhpbnRzLT5udW1faGludHM7CisKKyAgICAvKiBhbGxvY2F0ZSBvdXIgdGFibGVzICovCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHRhYmxlLT5zb3J0LCAgMiAqIGNvdW50ICAgICApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIHRhYmxlLT5oaW50cywgICAgIGNvdW50ICAgICApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIHRhYmxlLT56b25lcywgMiAqIGNvdW50ICsgMSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHRhYmxlLT5tYXhfaGludHMgICA9IGNvdW50OworICAgIHRhYmxlLT5zb3J0X2dsb2JhbCA9IHRhYmxlLT5zb3J0ICsgY291bnQ7CisgICAgdGFibGUtPm51bV9oaW50cyAgID0gMDsKKyAgICB0YWJsZS0+bnVtX3pvbmVzICAgPSAwOworICAgIHRhYmxlLT56b25lICAgICAgICA9IE5VTEw7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBgdGFibGUtPmhpbnRzJyBhcnJheSAqLworICAgIHsKKyAgICAgIFBTSF9IaW50ICB3cml0ZSA9IHRhYmxlLT5oaW50czsKKyAgICAgIFBTX0hpbnQgICByZWFkICA9IGhpbnRzLT5oaW50czsKKworCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgd3JpdGUrKywgcmVhZCsrICkKKyAgICAgIHsKKyAgICAgICAgd3JpdGUtPm9yZ19wb3MgPSByZWFkLT5wb3M7CisgICAgICAgIHdyaXRlLT5vcmdfbGVuID0gcmVhZC0+bGVuOworICAgICAgICB3cml0ZS0+ZmxhZ3MgICA9IHJlYWQtPmZsYWdzOworICAgICAgfQorICAgIH0KKworICAgIC8qIHdlIG5vdyBuZWVkIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBgcGFyZW50JyBzdGVtczsgZmlyc3QgICovCisgICAgLyogYWN0aXZhdGUgdGhlIGhpbnRzIHRoYXQgYXJlIGdpdmVuIGJ5IHRoZSBpbml0aWFsIGhpbnQgbWFza3MgKi8KKyAgICBpZiAoIGhpbnRfbWFza3MgKQorICAgIHsKKyAgICAgIFBTX01hc2sgIG1hc2sgPSBoaW50X21hc2tzLT5tYXNrczsKKworCisgICAgICBjb3VudCAgICAgICAgICAgICA9IGhpbnRfbWFza3MtPm51bV9tYXNrczsKKyAgICAgIHRhYmxlLT5oaW50X21hc2tzID0gaGludF9tYXNrczsKKworICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIG1hc2srKyApCisgICAgICAgIHBzaF9oaW50X3RhYmxlX3JlY29yZF9tYXNrKCB0YWJsZSwgbWFzayApOworICAgIH0KKworICAgIC8qIGZpbmFsbHksIGRvIGEgbGluZWFyIHBhcnNlIGluIGNhc2Ugc29tZSBoaW50cyB3ZXJlIGxlZnQgYWxvbmUgKi8KKyAgICBpZiAoIHRhYmxlLT5udW1faGludHMgIT0gdGFibGUtPm1heF9oaW50cyApCisgICAgeworICAgICAgRlRfVUludCAgaWR4OworCisKKyAgICAgIEZUX1RSQUNFMCgoICJwc2hfaGludF90YWJsZV9pbml0OiBtaXNzaW5nL2luY29ycmVjdCBoaW50IG1hc2tzXG4iICkpOworCisgICAgICBjb3VudCA9IHRhYmxlLT5tYXhfaGludHM7CisgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KysgKQorICAgICAgICBwc2hfaGludF90YWJsZV9yZWNvcmQoIHRhYmxlLCBpZHggKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHBzaF9oaW50X3RhYmxlX2FjdGl2YXRlX21hc2soIFBTSF9IaW50X1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfTWFzayAgICAgICAgIGhpbnRfbWFzayApCisgIHsKKyAgICBGVF9JbnQgICAgbWFzayA9IDAsIHZhbCA9IDA7CisgICAgRlRfQnl0ZSogIGN1cnNvciA9IGhpbnRfbWFzay0+Ynl0ZXM7CisgICAgRlRfVUludCAgIGlkeCwgbGltaXQsIGNvdW50OworCisKKyAgICBsaW1pdCA9IGhpbnRfbWFzay0+bnVtX2JpdHM7CisgICAgY291bnQgPSAwOworCisgICAgcHNoX2hpbnRfdGFibGVfZGVhY3RpdmF0ZSggdGFibGUgKTsKKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IGxpbWl0OyBpZHgrKyApCisgICAgeworICAgICAgaWYgKCBtYXNrID09IDAgKQorICAgICAgeworICAgICAgICB2YWwgID0gKmN1cnNvcisrOworICAgICAgICBtYXNrID0gMHg4MDsKKyAgICAgIH0KKworICAgICAgaWYgKCB2YWwgJiBtYXNrICkKKyAgICAgIHsKKyAgICAgICAgUFNIX0hpbnQgIGhpbnQgPSAmdGFibGUtPmhpbnRzW2lkeF07CisKKworICAgICAgICBpZiAoICFwc2hfaGludF9pc19hY3RpdmUoIGhpbnQgKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICAgICBjb3VudDI7CisKKyNpZiAwCisgICAgICAgICAgUFNIX0hpbnQqICBzb3J0ID0gdGFibGUtPnNvcnQ7CisgICAgICAgICAgUFNIX0hpbnQgICBoaW50MjsKKworCisgICAgICAgICAgZm9yICggY291bnQyID0gY291bnQ7IGNvdW50MiA+IDA7IGNvdW50Mi0tLCBzb3J0KysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhpbnQyID0gc29ydFswXTsKKyAgICAgICAgICAgIGlmICggcHNoX2hpbnRfb3ZlcmxhcCggaGludCwgaGludDIgKSApCisgICAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwc2hfaGludF90YWJsZV9hY3RpdmF0ZV9tYXNrOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3VuZCBvdmVybGFwcGluZyBoaW50c1xuIiApKQorICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgY291bnQyID0gMDsKKyNlbmRpZgorCisgICAgICAgICAgaWYgKCBjb3VudDIgPT0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgcHNoX2hpbnRfYWN0aXZhdGUoIGhpbnQgKTsKKyAgICAgICAgICAgIGlmICggY291bnQgPCB0YWJsZS0+bWF4X2hpbnRzICkKKyAgICAgICAgICAgICAgdGFibGUtPnNvcnRbY291bnQrK10gPSBoaW50OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBGVF9UUkFDRTAoKCAicHNoX2hpbnRfdGFibGVhY3RpdmF0ZV9tYXNrOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbWFueSBhY3RpdmUgaGludHNcbiIgKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIG1hc2sgPj49IDE7CisgICAgfQorICAgIHRhYmxlLT5udW1faGludHMgPSBjb3VudDsKKworICAgIC8qIG5vdywgc29ydCB0aGUgaGludHM7IHRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gbm90IG92ZXJsYXAgKi8KKyAgICAvKiBzbyB3ZSBjYW4gY29tcGFyZSB0aGVpciAib3JnX3BvcyIgZmllbGQgZGlyZWN0bHkgICAgICAgICovCisgICAgeworICAgICAgRlRfSW50ICAgICBpMSwgaTI7CisgICAgICBQU0hfSGludCAgIGhpbnQxLCBoaW50MjsKKyAgICAgIFBTSF9IaW50KiAgc29ydCA9IHRhYmxlLT5zb3J0OworCisKKyAgICAgIC8qIGEgc2ltcGxlIGJ1YmJsZSBzb3J0IHdpbGwgZG8sIHNpbmNlIGluIDk5JSBvZiBjYXNlcywgdGhlIGhpbnRzICovCisgICAgICAvKiB3aWxsIGJlIGFscmVhZHkgc29ydGVkIC0tIGFuZCB0aGUgc29ydCB3aWxsIGJlIGxpbmVhciAgICAgICAgICAqLworICAgICAgZm9yICggaTEgPSAxOyBpMSA8IChGVF9JbnQpY291bnQ7IGkxKysgKQorICAgICAgeworICAgICAgICBoaW50MSA9IHNvcnRbaTFdOworICAgICAgICBmb3IgKCBpMiA9IGkxIC0gMTsgaTIgPj0gMDsgaTItLSApCisgICAgICAgIHsKKyAgICAgICAgICBoaW50MiA9IHNvcnRbaTJdOworCisgICAgICAgICAgaWYgKCBoaW50Mi0+b3JnX3BvcyA8IGhpbnQxLT5vcmdfcG9zICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgc29ydFtpMiArIDFdID0gaGludDI7CisgICAgICAgICAgc29ydFtpMl0gICAgID0gaGludDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgIEhJTlRTIEdSSUQtRklUVElORyBBTkQgT1BUSU1JWkFUSU9OICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMQorICBzdGF0aWMgRlRfUG9zCisgIHBzaF9kaW1lbnNpb25fcXVhbnRpemVfbGVuKCBQU0hfRGltZW5zaW9uICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICBkb19zbmFwcGluZyApCisgIHsKKyAgICBpZiAoIGxlbiA8PSA2NCApCisgICAgICBsZW4gPSA2NDsKKyAgICBlbHNlCisgICAgeworICAgICAgRlRfUG9zICBkZWx0YSA9IGxlbiAtIGRpbS0+c3Rkdy53aWR0aHNbMF0uY3VyOworCisKKyAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgZGVsdGEgPSAtZGVsdGE7CisKKyAgICAgIGlmICggZGVsdGEgPCA0MCApCisgICAgICB7CisgICAgICAgIGxlbiA9IGRpbS0+c3Rkdy53aWR0aHNbMF0uY3VyOworICAgICAgICBpZiAoIGxlbiA8IDQ4ICkKKyAgICAgICAgICBsZW4gPSA0ODsKKyAgICAgIH0KKworICAgICAgaWYgKCBsZW4gPCAzICogNjQgKQorICAgICAgeworICAgICAgICBkZWx0YSA9ICggbGVuICYgNjMgKTsKKyAgICAgICAgbGVuICAmPSAtNjQ7CisKKyAgICAgICAgaWYgKCBkZWx0YSA8IDEwICkKKyAgICAgICAgICBsZW4gKz0gZGVsdGE7CisKKyAgICAgICAgZWxzZSBpZiAoIGRlbHRhIDwgMzIgKQorICAgICAgICAgIGxlbiArPSAxMDsKKworICAgICAgICBlbHNlIGlmICggZGVsdGEgPCA1NCApCisgICAgICAgICAgbGVuICs9IDU0OworCisgICAgICAgIGVsc2UKKyAgICAgICAgICBsZW4gKz0gZGVsdGE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGxlbiA9IEZUX1BJWF9ST1VORCggbGVuICk7CisgICAgfQorCisgICAgaWYgKCBkb19zbmFwcGluZyApCisgICAgICBsZW4gPSBGVF9QSVhfUk9VTkQoIGxlbiApOworCisgICAgcmV0dXJuICBsZW47CisgIH0KKyNlbmRpZiAvKiAwICovCisKKworI2lmZGVmIERFQlVHX0hJTlRFUgorCisgIHN0YXRpYyB2b2lkCisgIHBzX3NpbXBsZV9zY2FsZSggUFNIX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICAgICBzY2FsZSwKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgICAgZGVsdGEsCisgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIGRpbWVuc2lvbiApCisgIHsKKyAgICBGVF9VSW50ICBjb3VudDsKKworCisgICAgZm9yICggY291bnQgPSAwOyBjb3VudCA8IHRhYmxlLT5tYXhfaGludHM7IGNvdW50KysgKQorICAgIHsKKyAgICAgIFBTSF9IaW50ICBoaW50ID0gdGFibGUtPmhpbnRzICsgY291bnQ7CisKKworICAgICAgaGludC0+Y3VyX3BvcyA9IEZUX011bEZpeCggaGludC0+b3JnX3Bvcywgc2NhbGUgKSArIGRlbHRhOworICAgICAgaGludC0+Y3VyX2xlbiA9IEZUX011bEZpeCggaGludC0+b3JnX2xlbiwgc2NhbGUgKTsKKworICAgICAgaWYgKCBwc19kZWJ1Z19oaW50X2Z1bmMgKQorICAgICAgICBwc19kZWJ1Z19oaW50X2Z1bmMoIGhpbnQsIGRpbWVuc2lvbiApOworICAgIH0KKyAgfQorCisjZW5kaWYgLyogREVCVUdfSElOVEVSICovCisKKworICBzdGF0aWMgRlRfRml4ZWQKKyAgcHNoX2hpbnRfc25hcF9zdGVtX3NpZGVfZGVsdGEoIEZUX0ZpeGVkICBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgbGVuICkKKyAgeworICAgIEZUX0ZpeGVkICBkZWx0YTEgPSBGVF9QSVhfUk9VTkQoIHBvcyApIC0gcG9zOworICAgIEZUX0ZpeGVkICBkZWx0YTIgPSBGVF9QSVhfUk9VTkQoIHBvcyArIGxlbiApIC0gcG9zIC0gbGVuOworCisKKyAgICBpZiAoIEZUX0FCUyggZGVsdGExICkgPD0gRlRfQUJTKCBkZWx0YTIgKSApCisgICAgICByZXR1cm4gZGVsdGExOworICAgIGVsc2UKKyAgICAgIHJldHVybiBkZWx0YTI7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHBzaF9oaW50X2FsaWduKCBQU0hfSGludCAgICAgaGludCwKKyAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIGRpbWVuc2lvbiwKKyAgICAgICAgICAgICAgICAgIFBTSF9HbHlwaCAgICBnbHlwaCApCisgIHsKKyAgICBQU0hfRGltZW5zaW9uICBkaW0gICA9ICZnbG9iYWxzLT5kaW1lbnNpb25bZGltZW5zaW9uXTsKKyAgICBGVF9GaXhlZCAgICAgICBzY2FsZSA9IGRpbS0+c2NhbGVfbXVsdDsKKyAgICBGVF9GaXhlZCAgICAgICBkZWx0YSA9IGRpbS0+c2NhbGVfZGVsdGE7CisKKworICAgIGlmICggIXBzaF9oaW50X2lzX2ZpdHRlZCggaGludCApICkKKyAgICB7CisgICAgICBGVF9Qb3MgIHBvcyA9IEZUX011bEZpeCggaGludC0+b3JnX3Bvcywgc2NhbGUgKSArIGRlbHRhOworICAgICAgRlRfUG9zICBsZW4gPSBGVF9NdWxGaXgoIGhpbnQtPm9yZ19sZW4sIHNjYWxlICk7CisKKyAgICAgIEZUX0ludCAgICAgICAgICAgIGRvX3NuYXBwaW5nOworICAgICAgRlRfUG9zICAgICAgICAgICAgZml0X2xlbjsKKyAgICAgIFBTSF9BbGlnbm1lbnRSZWMgIGFsaWduOworCisKKyAgICAgIC8qIGlnbm9yZSBzdGVtIGFsaWdubWVudHMgd2hlbiByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgaGludCBmbGFncyAqLworICAgICAgaWYgKCAoIGRpbWVuc2lvbiA9PSAwICYmICFnbHlwaC0+ZG9faG9yel9oaW50cyApIHx8CisgICAgICAgICAgICggZGltZW5zaW9uID09IDEgJiYgIWdseXBoLT5kb192ZXJ0X2hpbnRzICkgKQorICAgICAgeworICAgICAgICBoaW50LT5jdXJfcG9zID0gcG9zOworICAgICAgICBoaW50LT5jdXJfbGVuID0gbGVuOworCisgICAgICAgIHBzaF9oaW50X3NldF9maXR0ZWQoIGhpbnQgKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAvKiBwZXJmb3JtIHN0ZW0gc25hcHBpbmcgd2hlbiByZXF1ZXN0ZWQgLSB0aGlzIGlzIG5lY2Vzc2FyeQorICAgICAgICogZm9yIG1vbm9jaHJvbWUgYW5kIExDRCBoaW50aW5nIG1vZGVzIG9ubHkKKyAgICAgICAqLworICAgICAgZG9fc25hcHBpbmcgPSAoIGRpbWVuc2lvbiA9PSAwICYmIGdseXBoLT5kb19ob3J6X3NuYXBwaW5nICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBkaW1lbnNpb24gPT0gMSAmJiBnbHlwaC0+ZG9fdmVydF9zbmFwcGluZyApOworCisgICAgICBoaW50LT5jdXJfbGVuID0gZml0X2xlbiA9IGxlbjsKKworICAgICAgLyogY2hlY2sgYmx1ZSB6b25lcyBmb3IgaG9yaXpvbnRhbCBzdGVtcyAqLworICAgICAgYWxpZ24uYWxpZ24gICAgID0gUFNIX0JMVUVfQUxJR05fTk9ORTsKKyAgICAgIGFsaWduLmFsaWduX2JvdCA9IGFsaWduLmFsaWduX3RvcCA9IDA7CisKKyAgICAgIGlmICggZGltZW5zaW9uID09IDEgKQorICAgICAgICBwc2hfYmx1ZXNfc25hcF9zdGVtKCAmZ2xvYmFscy0+Ymx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQtPm9yZ19wb3MgKyBoaW50LT5vcmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50LT5vcmdfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxpZ24gKTsKKworICAgICAgc3dpdGNoICggYWxpZ24uYWxpZ24gKQorICAgICAgeworICAgICAgY2FzZSBQU0hfQkxVRV9BTElHTl9UT1A6CisgICAgICAgIC8qIHRoZSB0b3Agb2YgdGhlIHN0ZW0gaXMgYWxpZ25lZCBhZ2FpbnN0IGEgYmx1ZSB6b25lICovCisgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBhbGlnbi5hbGlnbl90b3AgLSBmaXRfbGVuOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQU0hfQkxVRV9BTElHTl9CT1Q6CisgICAgICAgIC8qIHRoZSBib3R0b20gb2YgdGhlIHN0ZW0gaXMgYWxpZ25lZCBhZ2FpbnN0IGEgYmx1ZSB6b25lICovCisgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBhbGlnbi5hbGlnbl9ib3Q7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBTSF9CTFVFX0FMSUdOX1RPUCB8IFBTSF9CTFVFX0FMSUdOX0JPVDoKKyAgICAgICAgLyogYm90aCBlZGdlcyBvZiB0aGUgc3RlbSBhcmUgYWxpZ25lZCBhZ2FpbnN0IGJsdWUgem9uZXMgKi8KKyAgICAgICAgaGludC0+Y3VyX3BvcyA9IGFsaWduLmFsaWduX2JvdDsKKyAgICAgICAgaGludC0+Y3VyX2xlbiA9IGFsaWduLmFsaWduX3RvcCAtIGFsaWduLmFsaWduX2JvdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICBQU0hfSGludCAgcGFyZW50ID0gaGludC0+cGFyZW50OworCisKKyAgICAgICAgICBpZiAoIHBhcmVudCApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICBwYXJfb3JnX2NlbnRlciwgcGFyX2N1cl9jZW50ZXI7CisgICAgICAgICAgICBGVF9Qb3MgIGN1cl9vcmdfY2VudGVyLCBjdXJfZGVsdGE7CisKKworICAgICAgICAgICAgLyogZW5zdXJlIHRoYXQgcGFyZW50IGlzIGFscmVhZHkgZml0dGVkICovCisgICAgICAgICAgICBpZiAoICFwc2hfaGludF9pc19maXR0ZWQoIHBhcmVudCApICkKKyAgICAgICAgICAgICAgcHNoX2hpbnRfYWxpZ24oIHBhcmVudCwgZ2xvYmFscywgZGltZW5zaW9uLCBnbHlwaCApOworCisgICAgICAgICAgICAvKiBrZWVwIG9yaWdpbmFsIHJlbGF0aW9uIGJldHdlZW4gaGludHMsIHRoaXMgaXMsIHVzZSB0aGUgKi8KKyAgICAgICAgICAgIC8qIHNjYWxlZCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjZW50ZXJzIG9mIHRoZSBoaW50cyB0byAgICAqLworICAgICAgICAgICAgLyogY29tcHV0ZSB0aGUgbmV3IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBwYXJfb3JnX2NlbnRlciA9IHBhcmVudC0+b3JnX3BvcyArICggcGFyZW50LT5vcmdfbGVuID4+IDEgKTsKKyAgICAgICAgICAgIHBhcl9jdXJfY2VudGVyID0gcGFyZW50LT5jdXJfcG9zICsgKCBwYXJlbnQtPmN1cl9sZW4gPj4gMSApOworICAgICAgICAgICAgY3VyX29yZ19jZW50ZXIgPSBoaW50LT5vcmdfcG9zICAgKyAoIGhpbnQtPm9yZ19sZW4gICA+PiAxICk7CisKKyAgICAgICAgICAgIGN1cl9kZWx0YSA9IEZUX011bEZpeCggY3VyX29yZ19jZW50ZXIgLSBwYXJfb3JnX2NlbnRlciwgc2NhbGUgKTsKKyAgICAgICAgICAgIHBvcyAgICAgICA9IHBhcl9jdXJfY2VudGVyICsgY3VyX2RlbHRhIC0gKCBsZW4gPj4gMSApOworICAgICAgICAgIH0KKworICAgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBwb3M7CisgICAgICAgICAgaGludC0+Y3VyX2xlbiA9IGZpdF9sZW47CisKKyAgICAgICAgICAvKiBTdGVtIGFkanVzdG1lbnQgdHJpZXMgdG8gc25hcCBzdGVtIHdpZHRocyB0byBzdGFuZGFyZAorICAgICAgICAgICAqIG9uZXMuICBUaGlzIGlzIGltcG9ydGFudCB0byBwcmV2ZW50IHVucGxlYXNhbnQgcm91bmRpbmcKKyAgICAgICAgICAgKiBhcnRlZmFjdHMuCisgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBnbHlwaC0+ZG9fc3RlbV9hZGp1c3QgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggbGVuIDw9IDY0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogdGhlIHN0ZW0gaXMgbGVzcyB0aGFuIG9uZSBwaXhlbDsgd2Ugd2lsbCBjZW50ZXIgaXQKKyAgICAgICAgICAgICAgICogYXJvdW5kIHRoZSBuZWFyZXN0IHBpeGVsIGNlbnRlcgorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaWYgKCBsZW4gPj0gMzIgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBhbHNvIHdpZGVuIHRoZSBzdGVtCisgICAgICAgICAgICAgICAgICogYW5kIGFsaWduIGl0IHRvIHRoZSBwaXhlbCBncmlkLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogICBzdGVtX2NlbnRlciAgICAgICAgICA9IHBvcyArIChsZW4vMikKKyAgICAgICAgICAgICAgICAgKiAgIG5lYXJlc3RfcGl4ZWxfY2VudGVyID0gRlRfUk9VTkQoc3RlbV9jZW50ZXItMzIpKzMyCisgICAgICAgICAgICAgICAgICogICBuZXdfcG9zICAgICAgICAgICAgICA9IG5lYXJlc3RfcGl4ZWxfY2VudGVyLTMyCisgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICA9IEZUX1JPVU5EKHN0ZW1fY2VudGVyLTMyKQorICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgPSBGVF9GTE9PUihzdGVtX2NlbnRlci0zMiszMikKKyAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgID0gRlRfRkxPT1Ioc3RlbV9jZW50ZXIpCisgICAgICAgICAgICAgICAgICogICBuZXdfbGVuICAgICAgICAgICAgICA9IDY0CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcG9zID0gRlRfUElYX0ZMT09SKCBwb3MgKyAoIGxlbiA+PiAxICkgKTsKKyAgICAgICAgICAgICAgICBsZW4gPSA2NDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICggbGVuID4gMCApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGEgdmVyeSBzbWFsbCBzdGVtOyB3ZSBzaW1wbHkgYWxpZ24gaXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICogcGl4ZWwgZ3JpZCwgdHJ5aW5nIHRvIGZpbmQgdGhlIG1pbmltdW0gZGlzcGxhY2VtZW50LgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogbGVmdCAgICAgICAgICAgICAgID0gcG9zCisgICAgICAgICAgICAgICAgICogcmlnaHQgICAgICAgICAgICAgID0gcG9zICsgbGVuCisgICAgICAgICAgICAgICAgICogbGVmdF9uZWFyZXN0X2VkZ2UgID0gUk9VTkQocG9zKQorICAgICAgICAgICAgICAgICAqIHJpZ2h0X25lYXJlc3RfZWRnZSA9IFJPVU5EKHJpZ2h0KQorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogaWYgKCBBQlMobGVmdF9uZWFyZXN0X2VkZ2UgLSBsZWZ0KSA8PQorICAgICAgICAgICAgICAgICAqICAgICAgQUJTKHJpZ2h0X25lYXJlc3RfZWRnZSAtIHJpZ2h0KSApCisgICAgICAgICAgICAgICAgICogICAgbmV3X3BvcyA9IGxlZnQKKyAgICAgICAgICAgICAgICAgKiBlbHNlCisgICAgICAgICAgICAgICAgICogICAgbmV3X3BvcyA9IHJpZ2h0CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgRlRfUG9zICBsZWZ0X25lYXJlc3QgID0gRlRfUElYX1JPVU5EKCBwb3MgKTsKKyAgICAgICAgICAgICAgICBGVF9Qb3MgIHJpZ2h0X25lYXJlc3QgPSBGVF9QSVhfUk9VTkQoIHBvcyArIGxlbiApOworICAgICAgICAgICAgICAgIEZUX1BvcyAgbGVmdF9kaXNwICAgICA9IGxlZnRfbmVhcmVzdCAtIHBvczsKKyAgICAgICAgICAgICAgICBGVF9Qb3MgIHJpZ2h0X2Rpc3AgICAgPSByaWdodF9uZWFyZXN0IC0gKCBwb3MgKyBsZW4gKTsKKworCisgICAgICAgICAgICAgICAgaWYgKCBsZWZ0X2Rpc3AgPCAwICkKKyAgICAgICAgICAgICAgICAgIGxlZnRfZGlzcCA9IC1sZWZ0X2Rpc3A7CisgICAgICAgICAgICAgICAgaWYgKCByaWdodF9kaXNwIDwgMCApCisgICAgICAgICAgICAgICAgICByaWdodF9kaXNwID0gLXJpZ2h0X2Rpc3A7CisgICAgICAgICAgICAgICAgaWYgKCBsZWZ0X2Rpc3AgPD0gcmlnaHRfZGlzcCApCisgICAgICAgICAgICAgICAgICBwb3MgPSBsZWZ0X25lYXJlc3Q7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcG9zID0gcmlnaHRfbmVhcmVzdDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiB0aGlzIGlzIGEgZ2hvc3Qgc3RlbTsgd2Ugc2ltcGx5IHJvdW5kIGl0ICovCisgICAgICAgICAgICAgICAgcG9zID0gRlRfUElYX1JPVU5EKCBwb3MgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZW4gPSBwc2hfZGltZW5zaW9uX3F1YW50aXplX2xlbiggZGltLCBsZW4sIDAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBub3cgdGhhdCB3ZSBoYXZlIGEgZ29vZCBoaW50ZWQgc3RlbSB3aWR0aCwgdHJ5IHRvIHBvc2l0aW9uICovCisgICAgICAgICAgLyogdGhlIHN0ZW0gYWxvbmcgYSBwaXhlbCBncmlkIGludGVnZXIgY29vcmRpbmF0ZSAgICAgICAgICAgICAqLworICAgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBwb3MgKyBwc2hfaGludF9zbmFwX3N0ZW1fc2lkZV9kZWx0YSggcG9zLCBsZW4gKTsKKyAgICAgICAgICBoaW50LT5jdXJfbGVuID0gbGVuOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggZG9fc25hcHBpbmcgKQorICAgICAgeworICAgICAgICBwb3MgPSBoaW50LT5jdXJfcG9zOworICAgICAgICBsZW4gPSBoaW50LT5jdXJfbGVuOworCisgICAgICAgIGlmICggbGVuIDwgNjQgKQorICAgICAgICAgIGxlbiA9IDY0OworICAgICAgICBlbHNlCisgICAgICAgICAgbGVuID0gRlRfUElYX1JPVU5EKCBsZW4gKTsKKworICAgICAgICBzd2l0Y2ggKCBhbGlnbi5hbGlnbiApCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBTSF9CTFVFX0FMSUdOX1RPUDoKKyAgICAgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBhbGlnbi5hbGlnbl90b3AgLSBsZW47CisgICAgICAgICAgICBoaW50LT5jdXJfbGVuID0gbGVuOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBTSF9CTFVFX0FMSUdOX0JPVDoKKyAgICAgICAgICAgIGhpbnQtPmN1cl9sZW4gPSBsZW47CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFNIX0JMVUVfQUxJR05fQk9UIHwgUFNIX0JMVUVfQUxJR05fVE9QOgorICAgICAgICAgICAgLyogZG9uJ3QgdG91Y2ggKi8KKyAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaGludC0+Y3VyX2xlbiA9IGxlbjsKKyAgICAgICAgICAgIGlmICggbGVuICYgNjQgKQorICAgICAgICAgICAgICBwb3MgPSBGVF9QSVhfRkxPT1IoIHBvcyArICggbGVuID4+IDEgKSApICsgMzI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHBvcyA9IEZUX1BJWF9ST1VORCggcG9zICsgKCBsZW4gPj4gMSApICk7CisKKyAgICAgICAgICAgIGhpbnQtPmN1cl9wb3MgPSBwb3MgLSAoIGxlbiA+PiAxICk7CisgICAgICAgICAgICBoaW50LT5jdXJfbGVuID0gbGVuOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHBzaF9oaW50X3NldF9maXR0ZWQoIGhpbnQgKTsKKworI2lmZGVmIERFQlVHX0hJTlRFUgorICAgICAgaWYgKCBwc19kZWJ1Z19oaW50X2Z1bmMgKQorICAgICAgICBwc19kZWJ1Z19oaW50X2Z1bmMoIGhpbnQsIGRpbWVuc2lvbiApOworI2VuZGlmCisgICAgfQorICB9CisKKworI2lmIDAgIC8qIG5vdCB1c2VkIGZvciBub3csIGV4cGVyaW1lbnRhbCAqLworCisgLyoKKyAgKiAgQSB2YXJpYW50IHRvIHBlcmZvcm0gImxpZ2h0IiBoaW50aW5nIChpLmUuIEZUX1JFTkRFUl9NT0RFX0xJR0hUKQorICAqICBvZiBzdGVtcworICAqLworICBzdGF0aWMgdm9pZAorICBwc2hfaGludF9hbGlnbl9saWdodCggUFNIX0hpbnQgICAgIGhpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQU0hfR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBQU0hfR2x5cGggICAgZ2x5cGggKQorICB7CisgICAgUFNIX0RpbWVuc2lvbiAgZGltICAgPSAmZ2xvYmFscy0+ZGltZW5zaW9uW2RpbWVuc2lvbl07CisgICAgRlRfRml4ZWQgICAgICAgc2NhbGUgPSBkaW0tPnNjYWxlX211bHQ7CisgICAgRlRfRml4ZWQgICAgICAgZGVsdGEgPSBkaW0tPnNjYWxlX2RlbHRhOworCisKKyAgICBpZiAoICFwc2hfaGludF9pc19maXR0ZWQoIGhpbnQgKSApCisgICAgeworICAgICAgRlRfUG9zICBwb3MgPSBGVF9NdWxGaXgoIGhpbnQtPm9yZ19wb3MsIHNjYWxlICkgKyBkZWx0YTsKKyAgICAgIEZUX1BvcyAgbGVuID0gRlRfTXVsRml4KCBoaW50LT5vcmdfbGVuLCBzY2FsZSApOworCisgICAgICBGVF9Qb3MgIGZpdF9sZW47CisKKyAgICAgIFBTSF9BbGlnbm1lbnRSZWMgIGFsaWduOworCisKKyAgICAgIC8qIGlnbm9yZSBzdGVtIGFsaWdubWVudHMgd2hlbiByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgaGludCBmbGFncyAqLworICAgICAgaWYgKCAoIGRpbWVuc2lvbiA9PSAwICYmICFnbHlwaC0+ZG9faG9yel9oaW50cyApIHx8CisgICAgICAgICAgICggZGltZW5zaW9uID09IDEgJiYgIWdseXBoLT5kb192ZXJ0X2hpbnRzICkgKQorICAgICAgeworICAgICAgICBoaW50LT5jdXJfcG9zID0gcG9zOworICAgICAgICBoaW50LT5jdXJfbGVuID0gbGVuOworCisgICAgICAgIHBzaF9oaW50X3NldF9maXR0ZWQoIGhpbnQgKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBmaXRfbGVuID0gbGVuOworCisgICAgICBoaW50LT5jdXJfbGVuID0gZml0X2xlbjsKKworICAgICAgLyogY2hlY2sgYmx1ZSB6b25lcyBmb3IgaG9yaXpvbnRhbCBzdGVtcyAqLworICAgICAgYWxpZ24uYWxpZ24gPSBQU0hfQkxVRV9BTElHTl9OT05FOworICAgICAgYWxpZ24uYWxpZ25fYm90ID0gYWxpZ24uYWxpZ25fdG9wID0gMDsKKworICAgICAgaWYgKCBkaW1lbnNpb24gPT0gMSApCisgICAgICAgIHBzaF9ibHVlc19zbmFwX3N0ZW0oICZnbG9iYWxzLT5ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludC0+b3JnX3BvcyArIGhpbnQtPm9yZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQtPm9yZ19wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbGlnbiApOworCisgICAgICBzd2l0Y2ggKCBhbGlnbi5hbGlnbiApCisgICAgICB7CisgICAgICBjYXNlIFBTSF9CTFVFX0FMSUdOX1RPUDoKKyAgICAgICAgLyogdGhlIHRvcCBvZiB0aGUgc3RlbSBpcyBhbGlnbmVkIGFnYWluc3QgYSBibHVlIHpvbmUgKi8KKyAgICAgICAgaGludC0+Y3VyX3BvcyA9IGFsaWduLmFsaWduX3RvcCAtIGZpdF9sZW47CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBTSF9CTFVFX0FMSUdOX0JPVDoKKyAgICAgICAgLyogdGhlIGJvdHRvbSBvZiB0aGUgc3RlbSBpcyBhbGlnbmVkIGFnYWluc3QgYSBibHVlIHpvbmUgKi8KKyAgICAgICAgaGludC0+Y3VyX3BvcyA9IGFsaWduLmFsaWduX2JvdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFNIX0JMVUVfQUxJR05fVE9QIHwgUFNIX0JMVUVfQUxJR05fQk9UOgorICAgICAgICAvKiBib3RoIGVkZ2VzIG9mIHRoZSBzdGVtIGFyZSBhbGlnbmVkIGFnYWluc3QgYmx1ZSB6b25lcyAqLworICAgICAgICBoaW50LT5jdXJfcG9zID0gYWxpZ24uYWxpZ25fYm90OworICAgICAgICBoaW50LT5jdXJfbGVuID0gYWxpZ24uYWxpZ25fdG9wIC0gYWxpZ24uYWxpZ25fYm90OworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgIFBTSF9IaW50ICBwYXJlbnQgPSBoaW50LT5wYXJlbnQ7CisKKworICAgICAgICAgIGlmICggcGFyZW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIHBhcl9vcmdfY2VudGVyLCBwYXJfY3VyX2NlbnRlcjsKKyAgICAgICAgICAgIEZUX1BvcyAgY3VyX29yZ19jZW50ZXIsIGN1cl9kZWx0YTsKKworCisgICAgICAgICAgICAvKiBlbnN1cmUgdGhhdCBwYXJlbnQgaXMgYWxyZWFkeSBmaXR0ZWQgKi8KKyAgICAgICAgICAgIGlmICggIXBzaF9oaW50X2lzX2ZpdHRlZCggcGFyZW50ICkgKQorICAgICAgICAgICAgICBwc2hfaGludF9hbGlnbl9saWdodCggcGFyZW50LCBnbG9iYWxzLCBkaW1lbnNpb24sIGdseXBoICk7CisKKyAgICAgICAgICAgIHBhcl9vcmdfY2VudGVyID0gcGFyZW50LT5vcmdfcG9zICsgKCBwYXJlbnQtPm9yZ19sZW4gLyAyICk7CisgICAgICAgICAgICBwYXJfY3VyX2NlbnRlciA9IHBhcmVudC0+Y3VyX3BvcyArICggcGFyZW50LT5jdXJfbGVuIC8gMiApOworICAgICAgICAgICAgY3VyX29yZ19jZW50ZXIgPSBoaW50LT5vcmdfcG9zICAgKyAoIGhpbnQtPm9yZ19sZW4gICAvIDIgKTsKKworICAgICAgICAgICAgY3VyX2RlbHRhID0gRlRfTXVsRml4KCBjdXJfb3JnX2NlbnRlciAtIHBhcl9vcmdfY2VudGVyLCBzY2FsZSApOworICAgICAgICAgICAgcG9zICAgICAgID0gcGFyX2N1cl9jZW50ZXIgKyBjdXJfZGVsdGEgLSAoIGxlbiA+PiAxICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogU3RlbXMgbGVzcyB0aGFuIG9uZSBwaXhlbCB3aWRlIGFyZSBlYXN5IC0tIHdlIHdhbnQgdG8KKyAgICAgICAgICAgKiBtYWtlIHRoZW0gYXMgZGFyayBhcyBwb3NzaWJsZSwgc28gdGhleSBtdXN0IGZhbGwgd2l0aGluCisgICAgICAgICAgICogb25lIHBpeGVsLiAgSWYgdGhlIHN0ZW0gaXMgc3BsaXQgYmV0d2VlbiB0d28gcGl4ZWxzCisgICAgICAgICAgICogdGhlbiBzbmFwIHRoZSBlZGdlIHRoYXQgaXMgbmVhcmVyIHRvIHRoZSBwaXhlbCBib3VuZGFyeQorICAgICAgICAgICAqIHRvIHRoZSBwaXhlbCBib3VuZGFyeS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGxlbiA8PSA2NCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCAoIHBvcyArIGxlbiArIDYzICkgLyA2NCAgIT0gcG9zIC8gNjQgKyAxICkKKyAgICAgICAgICAgICAgcG9zICs9IHBzaF9oaW50X3NuYXBfc3RlbV9zaWRlX2RlbHRhICggcG9zLCBsZW4gKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBQb3NpdGlvbiBzdGVtcyBvdGhlciB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIG1pZC1ncmF5cy4KKyAgICAgICAgICAgKiBUaGVyZSBhcmUsIGluIGdlbmVyYWwsIHR3byBwb3NpdGlvbnMgdGhhdCBkbyB0aGlzLAorICAgICAgICAgICAqIGlsbHVzdHJhdGVkIGFzIEEpIGFuZCBCKSBiZWxvdy4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqICAgKyAgICAgICAgICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAqCisgICAgICAgICAgICogQSkgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAqIEIpICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAqIEMpICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgICAgKgorICAgICAgICAgICAqIFBvc2l0aW9uIEEpIChzcGxpdCB0aGUgZXhjZXNzIHN0ZW0gZXF1YWxseSkgc2hvdWxkIGJlIGJldHRlcgorICAgICAgICAgICAqIGZvciBzdGVtcyBvZiB3aWR0aCBOICsgZiB3aGVyZSBmIDwgMC41LgorICAgICAgICAgICAqCisgICAgICAgICAgICogUG9zaXRpb24gQikgKHNwbGl0IHRoZSBkZWZpY2llbmN5IGVxdWFsbHkpIHNob3VsZCBiZSBiZXR0ZXIKKyAgICAgICAgICAgKiBmb3Igc3RlbXMgb2Ygd2lkdGggTiArIGYgd2hlcmUgZiA+IDAuNS4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEl0IHR1cm5zIG91dCB0aG91Z2ggdGhhdCBtaW5pbWl6aW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgbGl0CisgICAgICAgICAgICogcGl4ZWxzIGlzIGFsc28gaW1wb3J0YW50LCBzbyBwb3NpdGlvbiBDKSwgd2l0aCBvbmUgZWRnZQorICAgICAgICAgICAqIGFsaWduZWQgd2l0aCBhIHBpeGVsIGJvdW5kYXJ5IGlzIGFjdHVhbGx5IHByZWZlcmFibGUKKyAgICAgICAgICAgKiB0byBBKS4gIFRoZXJlIGFyZSBhbHNvIG1vcmUgcG9zc2liaWxlIHBvc2l0aW9ucyBmb3IgQykgdGhhbgorICAgICAgICAgICAqIGZvciBBKSBvciBCKSwgc28gaXQgaW52b2x2ZXMgbGVzcyBkaXN0b3J0aW9uIG9mIHRoZSBvdmVyYWxsCisgICAgICAgICAgICogY2hhcmFjdGVyIHNoYXBlLgorICAgICAgICAgICAqLworICAgICAgICAgIGVsc2UgLyogbGVuID4gNjQgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9GaXhlZCAgZnJhY19sZW4gPSBsZW4gJiA2MzsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjZW50ZXIgPSBwb3MgKyAoIGxlbiA+PiAxICk7CisgICAgICAgICAgICBGVF9GaXhlZCAgZGVsdGFfYSwgZGVsdGFfYjsKKworCisgICAgICAgICAgICBpZiAoICggbGVuIC8gNjQgKSAmIDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBkZWx0YV9hID0gRlRfUElYX0ZMT09SKCBjZW50ZXIgKSArIDMyIC0gY2VudGVyOworICAgICAgICAgICAgICBkZWx0YV9iID0gRlRfUElYX1JPVU5EKCBjZW50ZXIgKSAtIGNlbnRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVsdGFfYSA9IEZUX1BJWF9ST1VORCggY2VudGVyICkgLSBjZW50ZXI7CisgICAgICAgICAgICAgIGRlbHRhX2IgPSBGVF9QSVhfRkxPT1IoIGNlbnRlciApICsgMzIgLSBjZW50ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFdlIGNob29zZSBiZXR3ZWVuIEIpIGFuZCBDKSBhYm92ZSBiYXNlZCBvbiB0aGUgYW1vdW50CisgICAgICAgICAgICAgKiBvZiBmcmFjdGluYWwgc3RlbSB3aWR0aDsgZm9yIHNtYWxsIGFtb3VudHMsIGNob29zZQorICAgICAgICAgICAgICogQykgYWx3YXlzLCBmb3IgbGFyZ2UgYW1vdW50cywgQikgYWx3YXlzLCBhbmQgaW5iZXR3ZWVuLAorICAgICAgICAgICAgICogcGljayB3aGljaGV2ZXIgb25lIGludm9sdmVzIGxlc3Mgc3RlbSBtb3ZlbWVudC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBmcmFjX2xlbiA8IDMyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcG9zICs9IHBzaF9oaW50X3NuYXBfc3RlbV9zaWRlX2RlbHRhICggcG9zLCBsZW4gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBmcmFjX2xlbiA8IDQ4ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRml4ZWQgIHNpZGVfZGVsdGEgPSBwc2hfaGludF9zbmFwX3N0ZW1fc2lkZV9kZWx0YSAoIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiApOworCisgICAgICAgICAgICAgIGlmICggRlRfQUJTKCBzaWRlX2RlbHRhICkgPCBGVF9BQlMoIGRlbHRhX2IgKSApCisgICAgICAgICAgICAgICAgcG9zICs9IHNpZGVfZGVsdGE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3MgKz0gZGVsdGFfYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcG9zICs9IGRlbHRhX2I7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaGludC0+Y3VyX3BvcyA9IHBvczsKKyAgICAgICAgfQorICAgICAgfSAgLyogc3dpdGNoICovCisKKyAgICAgIHBzaF9oaW50X3NldF9maXR0ZWQoIGhpbnQgKTsKKworI2lmZGVmIERFQlVHX0hJTlRFUgorICAgICAgaWYgKCBwc19kZWJ1Z19oaW50X2Z1bmMgKQorICAgICAgICBwc19kZWJ1Z19oaW50X2Z1bmMoIGhpbnQsIGRpbWVuc2lvbiApOworI2VuZGlmCisgICAgfQorICB9CisKKyNlbmRpZiAvKiAwICovCisKKworICBzdGF0aWMgdm9pZAorICBwc2hfaGludF90YWJsZV9hbGlnbl9oaW50cyggUFNIX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNIX0dsb2JhbHMgICAgIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNIX0dseXBoICAgICAgIGdseXBoICkKKyAgeworICAgIFBTSF9IaW50ICAgICAgIGhpbnQ7CisgICAgRlRfVUludCAgICAgICAgY291bnQ7CisKKyNpZmRlZiBERUJVR19ISU5URVIKKworICAgIFBTSF9EaW1lbnNpb24gIGRpbSAgID0gJmdsb2JhbHMtPmRpbWVuc2lvbltkaW1lbnNpb25dOworICAgIEZUX0ZpeGVkICAgICAgIHNjYWxlID0gZGltLT5zY2FsZV9tdWx0OworICAgIEZUX0ZpeGVkICAgICAgIGRlbHRhID0gZGltLT5zY2FsZV9kZWx0YTsKKworCisgICAgaWYgKCBwc19kZWJ1Z19ub192ZXJ0X2hpbnRzICYmIGRpbWVuc2lvbiA9PSAwICkKKyAgICB7CisgICAgICBwc19zaW1wbGVfc2NhbGUoIHRhYmxlLCBzY2FsZSwgZGVsdGEsIGRpbWVuc2lvbiApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggcHNfZGVidWdfbm9faG9yel9oaW50cyAmJiBkaW1lbnNpb24gPT0gMSApCisgICAgeworICAgICAgcHNfc2ltcGxlX3NjYWxlKCB0YWJsZSwgc2NhbGUsIGRlbHRhLCBkaW1lbnNpb24gKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZiAvKiBERUJVR19ISU5URVIqLworCisgICAgaGludCAgPSB0YWJsZS0+aGludHM7CisgICAgY291bnQgPSB0YWJsZS0+bWF4X2hpbnRzOworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIGhpbnQrKyApCisgICAgICBwc2hfaGludF9hbGlnbiggaGludCwgZ2xvYmFscywgZGltZW5zaW9uLCBnbHlwaCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgUE9JTlRTIElOVEVSUE9MQVRJT04gUk9VVElORVMgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSB4eERFQlVHX1pPTkVTCisKKworI2lmZGVmIERFQlVHX1pPTkVTCisKKyNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKKworICBzdGF0aWMgdm9pZAorICBwc2hfcHJpbnRfem9uZSggUFNIX1pvbmUgIHpvbmUgKQorICB7CisgICAgcHJpbnRmKCAiem9uZSBbc2NhbGUsZGVsdGEsbWluLG1heF0gPSBbJS4zZiwlLjNmLCVkLCVkXVxuIiwKKyAgICAgICAgICAgICB6b25lLT5zY2FsZSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgem9uZS0+ZGVsdGEgLyA2NC4wLAorICAgICAgICAgICAgIHpvbmUtPm1pbiwKKyAgICAgICAgICAgICB6b25lLT5tYXggKTsKKyAgfQorCisjZW5kaWYgLyogREVCVUdfWk9ORVMgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgSElOVEVSIEdMWVBIIE1BTkFHRU1FTlQgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMQorCisjZGVmaW5lICBwc2hfY29ybmVyX2lzX2ZsYXQgICAgICBmdF9jb3JuZXJfaXNfZmxhdAorI2RlZmluZSAgcHNoX2Nvcm5lcl9vcmllbnRhdGlvbiAgZnRfY29ybmVyX29yaWVudGF0aW9uCisKKyNlbHNlCisKKyAgRlRfTE9DQUxfREVGKCBGVF9JbnQgKQorICBwc2hfY29ybmVyX2lzX2ZsYXQoIEZUX1BvcyAgeF9pbiwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIHlfaW4sCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICB4X291dCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIHlfb3V0ICkKKyAgeworICAgIEZUX1BvcyAgYXggPSB4X2luOworICAgIEZUX1BvcyAgYXkgPSB5X2luOworCisgICAgRlRfUG9zICBkX2luLCBkX291dCwgZF9jb3JuZXI7CisKKworICAgIGlmICggYXggPCAwICkKKyAgICAgIGF4ID0gLWF4OworICAgIGlmICggYXkgPCAwICkKKyAgICAgIGF5ID0gLWF5OworICAgIGRfaW4gPSBheCArIGF5OworCisgICAgYXggPSB4X291dDsKKyAgICBpZiAoIGF4IDwgMCApCisgICAgICBheCA9IC1heDsKKyAgICBheSA9IHlfb3V0OworICAgIGlmICggYXkgPCAwICkKKyAgICAgIGF5ID0gLWF5OworICAgIGRfb3V0ID0gYXggKyBheTsKKworICAgIGF4ID0geF9vdXQgKyB4X2luOworICAgIGlmICggYXggPCAwICkKKyAgICAgIGF4ID0gLWF4OworICAgIGF5ID0geV9vdXQgKyB5X2luOworICAgIGlmICggYXkgPCAwICkKKyAgICAgIGF5ID0gLWF5OworICAgIGRfY29ybmVyID0gYXggKyBheTsKKworICAgIHJldHVybiAoIGRfaW4gKyBkX291dCAtIGRfY29ybmVyICkgPCAoIGRfY29ybmVyID4+IDQgKTsKKyAgfQorCisgIHN0YXRpYyBGVF9JbnQKKyAgcHNoX2Nvcm5lcl9vcmllbnRhdGlvbiggRlRfUG9zICBpbl94LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGluX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgb3V0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgb3V0X3kgKQorICB7CisgICAgRlRfSW50ICByZXN1bHQ7CisKKworICAgIC8qIGRlYWwgd2l0aCB0aGUgdHJpdmlhbCBjYXNlcyBxdWlja2x5ICovCisgICAgaWYgKCBpbl95ID09IDAgKQorICAgIHsKKyAgICAgIGlmICggaW5feCA+PSAwICkKKyAgICAgICAgcmVzdWx0ID0gb3V0X3k7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IC1vdXRfeTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGluX3ggPT0gMCApCisgICAgeworICAgICAgaWYgKCBpbl95ID49IDAgKQorICAgICAgICByZXN1bHQgPSAtb3V0X3g7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IG91dF94OworICAgIH0KKyAgICBlbHNlIGlmICggb3V0X3kgPT0gMCApCisgICAgeworICAgICAgaWYgKCBvdXRfeCA+PSAwICkKKyAgICAgICAgcmVzdWx0ID0gaW5feTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gLWluX3k7CisgICAgfQorICAgIGVsc2UgaWYgKCBvdXRfeCA9PSAwICkKKyAgICB7CisgICAgICBpZiAoIG91dF95ID49IDAgKQorICAgICAgICByZXN1bHQgPSAtaW5feDsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gIGluX3g7CisgICAgfQorICAgIGVsc2UgLyogZ2VuZXJhbCBjYXNlICovCisgICAgeworICAgICAgbG9uZyBsb25nICBkZWx0YSA9IChsb25nIGxvbmcpaW5feCAqIG91dF95IC0gKGxvbmcgbG9uZylpbl95ICogb3V0X3g7CisKKyAgICAgIGlmICggZGVsdGEgPT0gMCApCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IDEgLSAyICogKCBkZWx0YSA8IDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyNlbmRpZiAvKiAhMSAqLworCisKKyNpZmRlZiBDT01QVVRFX0lORkxFWFMKKworICAvKiBjb21wdXRlIGFsbCBpbmZsZXggcG9pbnRzIGluIGEgZ2l2ZW4gZ2x5cGggKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNoX2dseXBoX2NvbXB1dGVfaW5mbGVjdGlvbnMoIFBTSF9HbHlwaCAgZ2x5cGggKQorICB7CisgICAgRlRfVUludCAgbjsKKworCisgICAgZm9yICggbiA9IDA7IG4gPCBnbHlwaC0+bnVtX2NvbnRvdXJzOyBuKysgKQorICAgIHsKKyAgICAgIFBTSF9Qb2ludCAgZmlyc3QsIHN0YXJ0LCBlbmQsIGJlZm9yZSwgYWZ0ZXI7CisgICAgICBGVF9Qb3MgICAgIGluX3gsIGluX3ksIG91dF94LCBvdXRfeTsKKyAgICAgIEZUX0ludCAgICAgb3JpZW50X3ByZXYsIG9yaWVudF9jdXI7CisgICAgICBGVF9JbnQgICAgIGZpbmlzaGVkID0gMDsKKworCisgICAgICAvKiB3ZSBuZWVkIGF0IGxlYXN0IDQgcG9pbnRzIHRvIGNyZWF0ZSBhbiBpbmZsZWN0aW9uIHBvaW50ICovCisgICAgICBpZiAoIGdseXBoLT5jb250b3Vyc1tuXS5jb3VudCA8IDQgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogY29tcHV0ZSBmaXJzdCBzZWdtZW50IGluIGNvbnRvdXIgKi8KKyAgICAgIGZpcnN0ID0gZ2x5cGgtPmNvbnRvdXJzW25dLnN0YXJ0OworCisgICAgICBzdGFydCA9IGVuZCA9IGZpcnN0OworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgZW5kID0gZW5kLT5uZXh0OworICAgICAgICBpZiAoIGVuZCA9PSBmaXJzdCApCisgICAgICAgICAgZ290byBTa2lwOworCisgICAgICAgIGluX3ggPSBlbmQtPm9yZ191IC0gc3RhcnQtPm9yZ191OworICAgICAgICBpbl95ID0gZW5kLT5vcmdfdiAtIHN0YXJ0LT5vcmdfdjsKKworICAgICAgfSB3aGlsZSAoIGluX3ggPT0gMCAmJiBpbl95ID09IDAgKTsKKworICAgICAgLyogZXh0ZW5kIHRoZSBzZWdtZW50IHN0YXJ0IHdoZW5ldmVyIHBvc3NpYmxlICovCisgICAgICBiZWZvcmUgPSBzdGFydDsKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBzdGFydCAgPSBiZWZvcmU7CisgICAgICAgICAgYmVmb3JlID0gYmVmb3JlLT5wcmV2OworICAgICAgICAgIGlmICggYmVmb3JlID09IGZpcnN0ICkKKyAgICAgICAgICAgIGdvdG8gU2tpcDsKKworICAgICAgICAgIG91dF94ID0gc3RhcnQtPm9yZ191IC0gYmVmb3JlLT5vcmdfdTsKKyAgICAgICAgICBvdXRfeSA9IHN0YXJ0LT5vcmdfdiAtIGJlZm9yZS0+b3JnX3Y7CisKKyAgICAgICAgfSB3aGlsZSAoIG91dF94ID09IDAgJiYgb3V0X3kgPT0gMCApOworCisgICAgICAgIG9yaWVudF9wcmV2ID0gcHNoX2Nvcm5lcl9vcmllbnRhdGlvbiggaW5feCwgaW5feSwgb3V0X3gsIG91dF95ICk7CisKKyAgICAgIH0gd2hpbGUgKCBvcmllbnRfcHJldiA9PSAwICk7CisKKyAgICAgIGZpcnN0ID0gc3RhcnQ7CisgICAgICBpbl94ICA9IG91dF94OworICAgICAgaW5feSAgPSBvdXRfeTsKKworICAgICAgLyogbm93LCBwcm9jZXNzIGFsbCBzZWdtZW50cyBpbiB0aGUgY29udG91ciAqLworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgLyogZmlyc3QsIGV4dGVuZCBjdXJyZW50IHNlZ21lbnQncyBlbmQgd2hlbmV2ZXIgcG9zc2libGUgKi8KKyAgICAgICAgYWZ0ZXIgPSBlbmQ7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAgICAgICAgIGVuZCAgID0gYWZ0ZXI7CisgICAgICAgICAgICBhZnRlciA9IGFmdGVyLT5uZXh0OworICAgICAgICAgICAgaWYgKCBhZnRlciA9PSBmaXJzdCApCisgICAgICAgICAgICAgIGZpbmlzaGVkID0gMTsKKworICAgICAgICAgICAgb3V0X3ggPSBhZnRlci0+b3JnX3UgLSBlbmQtPm9yZ191OworICAgICAgICAgICAgb3V0X3kgPSBhZnRlci0+b3JnX3YgLSBlbmQtPm9yZ192OworCisgICAgICAgICAgfSB3aGlsZSAoIG91dF94ID09IDAgJiYgb3V0X3kgPT0gMCApOworCisgICAgICAgICAgb3JpZW50X2N1ciA9IHBzaF9jb3JuZXJfb3JpZW50YXRpb24oIGluX3gsIGluX3ksIG91dF94LCBvdXRfeSApOworCisgICAgICAgIH0gd2hpbGUgKCBvcmllbnRfY3VyID09IDAgKTsKKworICAgICAgICBpZiAoICggb3JpZW50X2N1ciBeIG9yaWVudF9wcmV2ICkgPCAwICkKKyAgICAgICAgeworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgcHNoX3BvaW50X3NldF9pbmZsZXgoIHN0YXJ0ICk7CisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0LT5uZXh0OworICAgICAgICAgIH0KKyAgICAgICAgICB3aGlsZSAoIHN0YXJ0ICE9IGVuZCApOworCisgICAgICAgICAgcHNoX3BvaW50X3NldF9pbmZsZXgoIHN0YXJ0ICk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydCAgICAgICA9IGVuZDsKKyAgICAgICAgZW5kICAgICAgICAgPSBhZnRlcjsKKyAgICAgICAgb3JpZW50X3ByZXYgPSBvcmllbnRfY3VyOworICAgICAgICBpbl94ICAgICAgICA9IG91dF94OworICAgICAgICBpbl95ICAgICAgICA9IG91dF95OworCisgICAgICB9IHdoaWxlICggIWZpbmlzaGVkICk7CisKKyAgICBTa2lwOgorICAgICAgOworICAgIH0KKyAgfQorCisjZW5kaWYgLyogQ09NUFVURV9JTkZMRVhTICovCisKKworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfZG9uZSggUFNIX0dseXBoICBnbHlwaCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGdseXBoLT5tZW1vcnk7CisKKworICAgIHBzaF9oaW50X3RhYmxlX2RvbmUoICZnbHlwaC0+aGludF90YWJsZXNbMV0sIG1lbW9yeSApOworICAgIHBzaF9oaW50X3RhYmxlX2RvbmUoICZnbHlwaC0+aGludF90YWJsZXNbMF0sIG1lbW9yeSApOworCisgICAgRlRfRlJFRSggZ2x5cGgtPnBvaW50cyApOworICAgIEZUX0ZSRUUoIGdseXBoLT5jb250b3VycyApOworCisgICAgZ2x5cGgtPm51bV9wb2ludHMgICA9IDA7CisgICAgZ2x5cGgtPm51bV9jb250b3VycyA9IDA7CisKKyAgICBnbHlwaC0+bWVtb3J5ID0gTlVMTDsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBwc2hfY29tcHV0ZV9kaXIoIEZUX1BvcyAgZHgsCisgICAgICAgICAgICAgICAgICAgRlRfUG9zICBkeSApCisgIHsKKyAgICBGVF9Qb3MgIGF4LCBheTsKKyAgICBpbnQgICAgIHJlc3VsdCA9IFBTSF9ESVJfTk9ORTsKKworCisgICAgYXggPSBGVF9BQlMoIGR4ICk7CisgICAgYXkgPSBGVF9BQlMoIGR5ICk7CisKKyAgICBpZiAoIGF5ICogMTIgPCBheCApCisgICAgeworICAgICAgLyogfGR5fCA8PDwgfGR4fCAgbWVhbnMgYSBuZWFyLWhvcml6b250YWwgc2VnbWVudCAqLworICAgICAgcmVzdWx0ID0gKCBkeCA+PSAwICkgPyBQU0hfRElSX1JJR0hUIDogUFNIX0RJUl9MRUZUOworICAgIH0KKyAgICBlbHNlIGlmICggYXggKiAxMiA8IGF5ICkKKyAgICB7CisgICAgICAvKiB8ZHh8IDw8PCB8ZHl8ICBtZWFucyBhIG5lYXItdmVydGljYWwgc2VnbWVudCAqLworICAgICAgcmVzdWx0ID0gKCBkeSA+PSAwICkgPyBQU0hfRElSX1VQIDogUFNIX0RJUl9ET1dOOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGxvYWQgb3V0bGluZSBwb2ludCBjb29yZGluYXRlcyBpbnRvIGhpbnRlciBnbHlwaCAqLworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfbG9hZF9wb2ludHMoIFBTSF9HbHlwaCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkaW1lbnNpb24gKQorICB7CisgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBnbHlwaC0+b3V0bGluZS0+cG9pbnRzOworICAgIFBTSF9Qb2ludCAgIHBvaW50ID0gZ2x5cGgtPnBvaW50czsKKyAgICBGVF9VSW50ICAgICBjb3VudCA9IGdseXBoLT5udW1fcG9pbnRzOworCisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcG9pbnQrKywgdmVjKysgKQorICAgIHsKKyAgICAgIHBvaW50LT5mbGFnczIgPSAwOworICAgICAgcG9pbnQtPmhpbnQgICA9IE5VTEw7CisgICAgICBpZiAoIGRpbWVuc2lvbiA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPm9yZ191ID0gdmVjLT54OworICAgICAgICBwb2ludC0+b3JnX3YgPSB2ZWMtPnk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHBvaW50LT5vcmdfdSA9IHZlYy0+eTsKKyAgICAgICAgcG9pbnQtPm9yZ192ID0gdmVjLT54OworICAgICAgfQorCisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgICBwb2ludC0+b3JnX3ggPSB2ZWMtPng7CisgICAgICBwb2ludC0+b3JnX3kgPSB2ZWMtPnk7CisjZW5kaWYKKworICAgIH0KKyAgfQorCisKKyAgLyogc2F2ZSBoaW50ZWQgcG9pbnQgY29vcmRpbmF0ZXMgYmFjayB0byBvdXRsaW5lICovCisgIHN0YXRpYyB2b2lkCisgIHBzaF9nbHlwaF9zYXZlX3BvaW50cyggUFNIX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRpbWVuc2lvbiApCisgIHsKKyAgICBGVF9VSW50ICAgICBuOworICAgIFBTSF9Qb2ludCAgIHBvaW50ID0gZ2x5cGgtPnBvaW50czsKKyAgICBGVF9WZWN0b3IqICB2ZWMgICA9IGdseXBoLT5vdXRsaW5lLT5wb2ludHM7CisgICAgY2hhciogICAgICAgdGFncyAgPSBnbHlwaC0+b3V0bGluZS0+dGFnczsKKworCisgICAgZm9yICggbiA9IDA7IG4gPCBnbHlwaC0+bnVtX3BvaW50czsgbisrICkKKyAgICB7CisgICAgICBpZiAoIGRpbWVuc2lvbiA9PSAwICkKKyAgICAgICAgdmVjW25dLnggPSBwb2ludC0+Y3VyX3U7CisgICAgICBlbHNlCisgICAgICAgIHZlY1tuXS55ID0gcG9pbnQtPmN1cl91OworCisgICAgICBpZiAoIHBzaF9wb2ludF9pc19zdHJvbmcoIHBvaW50ICkgKQorICAgICAgICB0YWdzW25dIHw9IChjaGFyKSggKCBkaW1lbnNpb24gPT0gMCApID8gMzIgOiA2NCApOworCisjaWZkZWYgREVCVUdfSElOVEVSCisKKyAgICAgIGlmICggZGltZW5zaW9uID09IDAgKQorICAgICAgeworICAgICAgICBwb2ludC0+Y3VyX3ggICA9IHBvaW50LT5jdXJfdTsKKyAgICAgICAgcG9pbnQtPmZsYWdzX3ggPSBwb2ludC0+ZmxhZ3MyIHwgcG9pbnQtPmZsYWdzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwb2ludC0+Y3VyX3kgICA9IHBvaW50LT5jdXJfdTsKKyAgICAgICAgcG9pbnQtPmZsYWdzX3kgPSBwb2ludC0+ZmxhZ3MyIHwgcG9pbnQtPmZsYWdzOworICAgICAgfQorCisjZW5kaWYKKworICAgICAgcG9pbnQrKzsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBwc2hfZ2x5cGhfaW5pdCggUFNIX0dseXBoICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICBQU19IaW50cyAgICAgcHNfaGludHMsCisgICAgICAgICAgICAgICAgICBQU0hfR2xvYmFscyAgZ2xvYmFscyApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisKKyAgICAvKiBjbGVhciBhbGwgZmllbGRzICovCisgICAgRlRfTUVNX1pFUk8oIGdseXBoLCBzaXplb2YgKCAqZ2x5cGggKSApOworCisgICAgbWVtb3J5ID0gZ2x5cGgtPm1lbW9yeSA9IGdsb2JhbHMtPm1lbW9yeTsKKworICAgIC8qIGFsbG9jYXRlIGFuZCBzZXR1cCBwb2ludHMgKyBjb250b3VycyBhcnJheXMgKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggZ2x5cGgtPnBvaW50cywgICBvdXRsaW5lLT5uX3BvaW50cyAgICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggZ2x5cGgtPmNvbnRvdXJzLCBvdXRsaW5lLT5uX2NvbnRvdXJzICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZ2x5cGgtPm51bV9wb2ludHMgICA9IChGVF9VSW50KW91dGxpbmUtPm5fcG9pbnRzOworICAgIGdseXBoLT5udW1fY29udG91cnMgPSAoRlRfVUludClvdXRsaW5lLT5uX2NvbnRvdXJzOworCisgICAgeworICAgICAgRlRfVUludCAgICAgIGZpcnN0ID0gMCwgbmV4dCwgbjsKKyAgICAgIFBTSF9Qb2ludCAgICBwb2ludHMgID0gZ2x5cGgtPnBvaW50czsKKyAgICAgIFBTSF9Db250b3VyICBjb250b3VyID0gZ2x5cGgtPmNvbnRvdXJzOworCisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgZ2x5cGgtPm51bV9jb250b3VyczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgICBjb3VudDsKKyAgICAgICAgUFNIX1BvaW50ICBwb2ludDsKKworCisgICAgICAgIG5leHQgID0gKEZUX1VJbnQpb3V0bGluZS0+Y29udG91cnNbbl0gKyAxOworICAgICAgICBjb3VudCA9IG5leHQgLSBmaXJzdDsKKworICAgICAgICBjb250b3VyLT5zdGFydCA9IHBvaW50cyArIGZpcnN0OworICAgICAgICBjb250b3VyLT5jb3VudCA9IGNvdW50OworCisgICAgICAgIGlmICggY291bnQgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIHBvaW50ID0gcG9pbnRzICsgZmlyc3Q7CisKKyAgICAgICAgICBwb2ludC0+cHJldiAgICA9IHBvaW50cyArIG5leHQgLSAxOworICAgICAgICAgIHBvaW50LT5jb250b3VyID0gY29udG91cjsKKworICAgICAgICAgIGZvciAoIDsgY291bnQgPiAxOyBjb3VudC0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwb2ludFswXS5uZXh0ID0gcG9pbnQgKyAxOworICAgICAgICAgICAgcG9pbnRbMV0ucHJldiA9IHBvaW50OworICAgICAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgICAgIHBvaW50LT5jb250b3VyID0gY29udG91cjsKKyAgICAgICAgICB9CisgICAgICAgICAgcG9pbnQtPm5leHQgPSBwb2ludHMgKyBmaXJzdDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRvdXIrKzsKKyAgICAgICAgZmlyc3QgPSBuZXh0OworICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgIFBTSF9Qb2ludCAgIHBvaW50cyA9IGdseXBoLT5wb2ludHM7CisgICAgICBQU0hfUG9pbnQgICBwb2ludCAgPSBwb2ludHM7CisgICAgICBGVF9WZWN0b3IqICB2ZWMgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICBGVF9VSW50ICAgICBuOworCisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgZ2x5cGgtPm51bV9wb2ludHM7IG4rKywgcG9pbnQrKyApCisgICAgICB7CisgICAgICAgIEZUX0ludCAgbl9wcmV2ID0gKEZUX0ludCkoIHBvaW50LT5wcmV2IC0gcG9pbnRzICk7CisgICAgICAgIEZUX0ludCAgbl9uZXh0ID0gKEZUX0ludCkoIHBvaW50LT5uZXh0IC0gcG9pbnRzICk7CisgICAgICAgIEZUX1BvcyAgZHhpLCBkeWksIGR4bywgZHlvOworCisKKyAgICAgICAgaWYgKCAhKCBvdXRsaW5lLT50YWdzW25dICYgRlRfQ1VSVkVfVEFHX09OICkgKQorICAgICAgICAgIHBvaW50LT5mbGFncyA9IFBTSF9QT0lOVF9PRkY7CisKKyAgICAgICAgZHhpID0gdmVjW25dLnggLSB2ZWNbbl9wcmV2XS54OworICAgICAgICBkeWkgPSB2ZWNbbl0ueSAtIHZlY1tuX3ByZXZdLnk7CisKKyAgICAgICAgcG9pbnQtPmRpcl9pbiA9IChGVF9DaGFyKXBzaF9jb21wdXRlX2RpciggZHhpLCBkeWkgKTsKKworICAgICAgICBkeG8gPSB2ZWNbbl9uZXh0XS54IC0gdmVjW25dLng7CisgICAgICAgIGR5byA9IHZlY1tuX25leHRdLnkgLSB2ZWNbbl0ueTsKKworICAgICAgICBwb2ludC0+ZGlyX291dCA9IChGVF9DaGFyKXBzaF9jb21wdXRlX2RpciggZHhvLCBkeW8gKTsKKworICAgICAgICAvKiBkZXRlY3Qgc21vb3RoIHBvaW50cyAqLworICAgICAgICBpZiAoIHBvaW50LT5mbGFncyAmIFBTSF9QT0lOVF9PRkYgKQorICAgICAgICAgIHBvaW50LT5mbGFncyB8PSBQU0hfUE9JTlRfU01PT1RIOworCisgICAgICAgIGVsc2UgaWYgKCBwb2ludC0+ZGlyX2luID09IHBvaW50LT5kaXJfb3V0ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggcG9pbnQtPmRpcl9vdXQgIT0gUFNIX0RJUl9OT05FICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgcHNoX2Nvcm5lcl9pc19mbGF0KCBkeGksIGR5aSwgZHhvLCBkeW8gKSApCisgICAgICAgICAgICBwb2ludC0+ZmxhZ3MgfD0gUFNIX1BPSU5UX1NNT09USDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGdseXBoLT5vdXRsaW5lID0gb3V0bGluZTsKKyAgICBnbHlwaC0+Z2xvYmFscyA9IGdsb2JhbHM7CisKKyNpZmRlZiBDT01QVVRFX0lORkxFWFMKKyAgICBwc2hfZ2x5cGhfbG9hZF9wb2ludHMoIGdseXBoLCAwICk7CisgICAgcHNoX2dseXBoX2NvbXB1dGVfaW5mbGVjdGlvbnMoIGdseXBoICk7CisjZW5kaWYgLyogQ09NUFVURV9JTkZMRVhTICovCisKKyAgICAvKiBub3cgZGVhbCB3aXRoIGhpbnRzIHRhYmxlcyAqLworICAgIGVycm9yID0gcHNoX2hpbnRfdGFibGVfaW5pdCggJmdseXBoLT5oaW50X3RhYmxlcyBbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNfaGludHMtPmRpbWVuc2lvblswXS5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc19oaW50cy0+ZGltZW5zaW9uWzBdLm1hc2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzX2hpbnRzLT5kaW1lbnNpb25bMF0uY291bnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gcHNoX2hpbnRfdGFibGVfaW5pdCggJmdseXBoLT5oaW50X3RhYmxlcyBbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNfaGludHMtPmRpbWVuc2lvblsxXS5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc19oaW50cy0+ZGltZW5zaW9uWzFdLm1hc2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzX2hpbnRzLT5kaW1lbnNpb25bMV0uY291bnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogY29tcHV0ZSBhbGwgZXh0cmVtYSBpbiBhIGdseXBoIGZvciBhIGdpdmVuIGRpbWVuc2lvbiAqLworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfY29tcHV0ZV9leHRyZW1hKCBQU0hfR2x5cGggIGdseXBoICkKKyAgeworICAgIEZUX1VJbnQgIG47CisKKworICAgIC8qIGZpcnN0IG9mIGFsbCwgY29tcHV0ZSBhbGwgbG9jYWwgZXh0cmVtYSAqLworICAgIGZvciAoIG4gPSAwOyBuIDwgZ2x5cGgtPm51bV9jb250b3VyczsgbisrICkKKyAgICB7CisgICAgICBQU0hfUG9pbnQgIGZpcnN0ID0gZ2x5cGgtPmNvbnRvdXJzW25dLnN0YXJ0OworICAgICAgUFNIX1BvaW50ICBwb2ludCwgYmVmb3JlLCBhZnRlcjsKKworCisgICAgICBpZiAoIGdseXBoLT5jb250b3Vyc1tuXS5jb3VudCA9PSAwICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHBvaW50ICA9IGZpcnN0OworICAgICAgYmVmb3JlID0gcG9pbnQ7CisKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGJlZm9yZSA9IGJlZm9yZS0+cHJldjsKKyAgICAgICAgaWYgKCBiZWZvcmUgPT0gZmlyc3QgKQorICAgICAgICAgIGdvdG8gU2tpcDsKKworICAgICAgfSB3aGlsZSAoIGJlZm9yZS0+b3JnX3UgPT0gcG9pbnQtPm9yZ191ICk7CisKKyAgICAgIGZpcnN0ID0gcG9pbnQgPSBiZWZvcmUtPm5leHQ7CisKKyAgICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIGFmdGVyID0gcG9pbnQ7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBhZnRlciA9IGFmdGVyLT5uZXh0OworICAgICAgICAgIGlmICggYWZ0ZXIgPT0gZmlyc3QgKQorICAgICAgICAgICAgZ290byBOZXh0OworCisgICAgICAgIH0gd2hpbGUgKCBhZnRlci0+b3JnX3UgPT0gcG9pbnQtPm9yZ191ICk7CisKKyAgICAgICAgaWYgKCBiZWZvcmUtPm9yZ191IDwgcG9pbnQtPm9yZ191ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggYWZ0ZXItPm9yZ191IDwgcG9pbnQtPm9yZ191ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBsb2NhbCBtYXhpbXVtICovCisgICAgICAgICAgICBnb3RvIEV4dHJlbXVtOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIGJlZm9yZS0+b3JnX3UgPiBwb2ludC0+b3JnX3UgKi8KKyAgICAgICAgeworICAgICAgICAgIGlmICggYWZ0ZXItPm9yZ191ID4gcG9pbnQtPm9yZ191ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBsb2NhbCBtaW5pbXVtICovCisgICAgICAgICAgRXh0cmVtdW06CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBwc2hfcG9pbnRfc2V0X2V4dHJlbXVtKCBwb2ludCApOworICAgICAgICAgICAgICBwb2ludCA9IHBvaW50LT5uZXh0OworCisgICAgICAgICAgICB9IHdoaWxlICggcG9pbnQgIT0gYWZ0ZXIgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBiZWZvcmUgPSBhZnRlci0+cHJldjsKKyAgICAgICAgcG9pbnQgID0gYWZ0ZXI7CisKKyAgICAgIH0gLyogZm9yICAqLworCisgICAgTmV4dDoKKyAgICAgIDsKKyAgICB9CisKKyAgICAvKiBmb3IgZWFjaCBleHRyZW11bSwgZGV0ZXJtaW5lIGl0cyBkaXJlY3Rpb24gYWxvbmcgdGhlICovCisgICAgLyogb3J0aG9nb25hbCBheGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIG4gPSAwOyBuIDwgZ2x5cGgtPm51bV9wb2ludHM7IG4rKyApCisgICAgeworICAgICAgUFNIX1BvaW50ICBwb2ludCwgYmVmb3JlLCBhZnRlcjsKKworCisgICAgICBwb2ludCAgPSAmZ2x5cGgtPnBvaW50c1tuXTsKKyAgICAgIGJlZm9yZSA9IHBvaW50OworICAgICAgYWZ0ZXIgID0gcG9pbnQ7CisKKyAgICAgIGlmICggcHNoX3BvaW50X2lzX2V4dHJlbXVtKCBwb2ludCApICkKKyAgICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGJlZm9yZSA9IGJlZm9yZS0+cHJldjsKKyAgICAgICAgICBpZiAoIGJlZm9yZSA9PSBwb2ludCApCisgICAgICAgICAgICBnb3RvIFNraXA7CisKKyAgICAgICAgfSB3aGlsZSAoIGJlZm9yZS0+b3JnX3YgPT0gcG9pbnQtPm9yZ192ICk7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGFmdGVyID0gYWZ0ZXItPm5leHQ7CisgICAgICAgICAgaWYgKCBhZnRlciA9PSBwb2ludCApCisgICAgICAgICAgICBnb3RvIFNraXA7CisKKyAgICAgICAgfSB3aGlsZSAoIGFmdGVyLT5vcmdfdiA9PSBwb2ludC0+b3JnX3YgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBiZWZvcmUtPm9yZ192IDwgcG9pbnQtPm9yZ192ICYmCisgICAgICAgICAgIGFmdGVyLT5vcmdfdiAgPiBwb2ludC0+b3JnX3YgKQorICAgICAgeworICAgICAgICBwc2hfcG9pbnRfc2V0X3Bvc2l0aXZlKCBwb2ludCApOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGJlZm9yZS0+b3JnX3YgPiBwb2ludC0+b3JnX3YgJiYKKyAgICAgICAgICAgICAgICBhZnRlci0+b3JnX3YgIDwgcG9pbnQtPm9yZ192ICkKKyAgICAgIHsKKyAgICAgICAgcHNoX3BvaW50X3NldF9uZWdhdGl2ZSggcG9pbnQgKTsKKyAgICAgIH0KKworICAgIFNraXA6CisgICAgICA7CisgICAgfQorICB9CisKKworICAvKiBtYWpvcl9kaXIgaXMgdGhlIGRpcmVjdGlvbiBmb3IgcG9pbnRzIG9uIHRoZSBib3R0b20vbGVmdCBvZiB0aGUgc3RlbTsgKi8KKyAgLyogUG9pbnRzIG9uIHRoZSB0b3AvcmlnaHQgb2YgdGhlIHN0ZW0gd2lsbCBoYXZlIGEgZGlyZWN0aW9uIG9mICAgICAgICAgICovCisgIC8qIC1tYWpvcl9kaXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0YXRpYyB2b2lkCisgIHBzaF9oaW50X3RhYmxlX2ZpbmRfc3Ryb25nX3BvaW50cyggUFNIX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTSF9Qb2ludCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgbWFqb3JfZGlyICkKKyAgeworICAgIFBTSF9IaW50KiAgc29ydCAgICAgID0gdGFibGUtPnNvcnQ7CisgICAgRlRfVUludCAgICBudW1faGludHMgPSB0YWJsZS0+bnVtX2hpbnRzOworCisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcG9pbnQrKyApCisgICAgeworICAgICAgRlRfSW50ICBwb2ludF9kaXIgPSAwOworICAgICAgRlRfUG9zICBvcmdfdSAgICAgPSBwb2ludC0+b3JnX3U7CisKKworICAgICAgaWYgKCBwc2hfcG9pbnRfaXNfc3Ryb25nKCBwb2ludCApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmICggUFNIX0RJUl9DT01QQVJFKCBwb2ludC0+ZGlyX2luLCBtYWpvcl9kaXIgKSApCisgICAgICAgIHBvaW50X2RpciA9IHBvaW50LT5kaXJfaW47CisKKyAgICAgIGVsc2UgaWYgKCBQU0hfRElSX0NPTVBBUkUoIHBvaW50LT5kaXJfb3V0LCBtYWpvcl9kaXIgKSApCisgICAgICAgIHBvaW50X2RpciA9IHBvaW50LT5kaXJfb3V0OworCisgICAgICBpZiAoIHBvaW50X2RpciApCisgICAgICB7CisgICAgICAgIGlmICggcG9pbnRfZGlyID09IG1ham9yX2RpciApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBubjsKKworCisgICAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9oaW50czsgbm4rKyApCisgICAgICAgICAgeworICAgICAgICAgICAgUFNIX0hpbnQgIGhpbnQgPSBzb3J0W25uXTsKKyAgICAgICAgICAgIEZUX1BvcyAgICBkICAgID0gb3JnX3UgLSBoaW50LT5vcmdfcG9zOworCisKKyAgICAgICAgICAgIGlmICggZCA8IHRocmVzaG9sZCAmJiAtZCA8IHRocmVzaG9sZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBzaF9wb2ludF9zZXRfc3Ryb25nKCBwb2ludCApOworICAgICAgICAgICAgICBwb2ludC0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01JTjsKKyAgICAgICAgICAgICAgcG9pbnQtPmhpbnQgICAgPSBoaW50OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHBvaW50X2RpciA9PSAtbWFqb3JfZGlyICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIG5uOworCisKKyAgICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgbnVtX2hpbnRzOyBubisrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQU0hfSGludCAgaGludCA9IHNvcnRbbm5dOworICAgICAgICAgICAgRlRfUG9zICAgIGQgICAgPSBvcmdfdSAtIGhpbnQtPm9yZ19wb3MgLSBoaW50LT5vcmdfbGVuOworCisKKyAgICAgICAgICAgIGlmICggZCA8IHRocmVzaG9sZCAmJiAtZCA8IHRocmVzaG9sZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBzaF9wb2ludF9zZXRfc3Ryb25nKCBwb2ludCApOworICAgICAgICAgICAgICBwb2ludC0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01BWDsKKyAgICAgICAgICAgICAgcG9pbnQtPmhpbnQgICAgPSBoaW50OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworI2lmIDEKKyAgICAgIGVsc2UgaWYgKCBwc2hfcG9pbnRfaXNfZXh0cmVtdW0oIHBvaW50ICkgKQorICAgICAgeworICAgICAgICAvKiB0cmVhdCBleHRyZW1hIGFzIHNwZWNpYWwgY2FzZXMgZm9yIHN0ZW0gZWRnZSBhbGlnbm1lbnQgKi8KKyAgICAgICAgRlRfVUludCAgbm4sIG1pbl9mbGFnLCBtYXhfZmxhZzsKKworCisgICAgICAgIGlmICggbWFqb3JfZGlyID09IFBTSF9ESVJfSE9SSVpPTlRBTCApCisgICAgICAgIHsKKyAgICAgICAgICBtaW5fZmxhZyA9IFBTSF9QT0lOVF9QT1NJVElWRTsKKyAgICAgICAgICBtYXhfZmxhZyA9IFBTSF9QT0lOVF9ORUdBVElWRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBtaW5fZmxhZyA9IFBTSF9QT0lOVF9ORUdBVElWRTsKKyAgICAgICAgICBtYXhfZmxhZyA9IFBTSF9QT0lOVF9QT1NJVElWRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcG9pbnQtPmZsYWdzMiAmIG1pbl9mbGFnICkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1faGludHM7IG5uKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFBTSF9IaW50ICBoaW50ID0gc29ydFtubl07CisgICAgICAgICAgICBGVF9Qb3MgICAgZCAgICA9IG9yZ191IC0gaGludC0+b3JnX3BvczsKKworCisgICAgICAgICAgICBpZiAoIGQgPCB0aHJlc2hvbGQgJiYgLWQgPCB0aHJlc2hvbGQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwb2ludC0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01JTjsKKyAgICAgICAgICAgICAgcG9pbnQtPmhpbnQgICAgPSBoaW50OworICAgICAgICAgICAgICBwc2hfcG9pbnRfc2V0X3N0cm9uZyggcG9pbnQgKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBwb2ludC0+ZmxhZ3MyICYgbWF4X2ZsYWcgKQorICAgICAgICB7CisgICAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9oaW50czsgbm4rKyApCisgICAgICAgICAgeworICAgICAgICAgICAgUFNIX0hpbnQgIGhpbnQgPSBzb3J0W25uXTsKKyAgICAgICAgICAgIEZUX1BvcyAgICBkICAgID0gb3JnX3UgLSBoaW50LT5vcmdfcG9zIC0gaGludC0+b3JnX2xlbjsKKworCisgICAgICAgICAgICBpZiAoIGQgPCB0aHJlc2hvbGQgJiYgLWQgPCB0aHJlc2hvbGQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwb2ludC0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01BWDsKKyAgICAgICAgICAgICAgcG9pbnQtPmhpbnQgICAgPSBoaW50OworICAgICAgICAgICAgICBwc2hfcG9pbnRfc2V0X3N0cm9uZyggcG9pbnQgKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwb2ludC0+aGludCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1faGludHM7IG5uKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFBTSF9IaW50ICBoaW50ID0gc29ydFtubl07CisKKworICAgICAgICAgICAgaWYgKCBvcmdfdSA+PSBoaW50LT5vcmdfcG9zICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgIG9yZ191IDw9IGhpbnQtPm9yZ19wb3MgKyBoaW50LT5vcmdfbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcG9pbnQtPmhpbnQgPSBoaW50OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworI2VuZGlmIC8qIDEgKi8KKyAgICB9CisgIH0KKworCisgIC8qIHRoZSBhY2NlcHRlZCBzaGlmdCBmb3Igc3Ryb25nIHBvaW50cyBpbiBmcmFjdGlvbmFsIHBpeGVscyAqLworI2RlZmluZSBQU0hfU1RST05HX1RIUkVTSE9MRCAgMzIKKworICAvKiB0aGUgbWF4aW11bSBzaGlmdCB2YWx1ZSBpbiBmb250IHVuaXRzICovCisjZGVmaW5lIFBTSF9TVFJPTkdfVEhSRVNIT0xEX01BWElNVU0gIDMwCisKKworICAvKiBmaW5kIHN0cm9uZyBwb2ludHMgaW4gYSBnbHlwaCAqLworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfZmluZF9zdHJvbmdfcG9pbnRzKCBQU0hfR2x5cGggIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRpbWVuc2lvbiApCisgIHsKKyAgICAvKiBhIHBvaW50IGlzIGBzdHJvbmcnIGlmIGl0IGlzIGxvY2F0ZWQgb24gYSBzdGVtIGVkZ2UgYW5kICAgICAgICovCisgICAgLyogaGFzIGFuIGBpbicgb3IgYG91dCcgdGFuZ2VudCBwYXJhbGxlbCB0byB0aGUgaGludCdzIGRpcmVjdGlvbiAqLworCisgICAgUFNIX0hpbnRfVGFibGUgIHRhYmxlICAgICA9ICZnbHlwaC0+aGludF90YWJsZXNbZGltZW5zaW9uXTsKKyAgICBQU19NYXNrICAgICAgICAgbWFzayAgICAgID0gdGFibGUtPmhpbnRfbWFza3MtPm1hc2tzOworICAgIEZUX1VJbnQgICAgICAgICBudW1fbWFza3MgPSB0YWJsZS0+aGludF9tYXNrcy0+bnVtX21hc2tzOworICAgIEZUX1VJbnQgICAgICAgICBmaXJzdCAgICAgPSAwOworICAgIEZUX0ludCAgICAgICAgICBtYWpvcl9kaXIgPSBkaW1lbnNpb24gPT0gMCA/IFBTSF9ESVJfVkVSVElDQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQU0hfRElSX0hPUklaT05UQUw7CisgICAgUFNIX0RpbWVuc2lvbiAgIGRpbSAgICAgICA9ICZnbHlwaC0+Z2xvYmFscy0+ZGltZW5zaW9uW2RpbWVuc2lvbl07CisgICAgRlRfRml4ZWQgICAgICAgIHNjYWxlICAgICA9IGRpbS0+c2NhbGVfbXVsdDsKKyAgICBGVF9JbnQgICAgICAgICAgdGhyZXNob2xkOworCisKKyAgICB0aHJlc2hvbGQgPSAoRlRfSW50KUZUX0RpdkZpeCggUFNIX1NUUk9OR19USFJFU0hPTEQsIHNjYWxlICk7CisgICAgaWYgKCB0aHJlc2hvbGQgPiBQU0hfU1RST05HX1RIUkVTSE9MRF9NQVhJTVVNICkKKyAgICAgIHRocmVzaG9sZCA9IFBTSF9TVFJPTkdfVEhSRVNIT0xEX01BWElNVU07CisKKyAgICAvKiBwcm9jZXNzIHNlY29uZGFyeSBoaW50cyB0byBgc2VsZWN0ZWQnIHBvaW50cyAqLworICAgIGlmICggbnVtX21hc2tzID4gMSAmJiBnbHlwaC0+bnVtX3BvaW50cyA+IDAgKQorICAgIHsKKyAgICAgIC8qIHRoZSBgZW5kY2hhcicgb3AgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBvaW50cyAqLworICAgICAgZmlyc3QgPSBtYXNrLT5lbmRfcG9pbnQgPiBnbHlwaC0+bnVtX3BvaW50cworICAgICAgICAgICAgICAgID8gZ2x5cGgtPm51bV9wb2ludHMKKyAgICAgICAgICAgICAgICA6IG1hc2stPmVuZF9wb2ludDsKKyAgICAgIG1hc2srKzsKKyAgICAgIGZvciAoIDsgbnVtX21hc2tzID4gMTsgbnVtX21hc2tzLS0sIG1hc2srKyApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIG5leHQgPSBGVF9NSU4oIG1hc2stPmVuZF9wb2ludCwgZ2x5cGgtPm51bV9wb2ludHMgKTsKKworCisgICAgICAgIGlmICggbmV4dCA+IGZpcnN0ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgICAgY291bnQgPSBuZXh0IC0gZmlyc3Q7CisgICAgICAgICAgUFNIX1BvaW50ICBwb2ludCA9IGdseXBoLT5wb2ludHMgKyBmaXJzdDsKKworCisgICAgICAgICAgcHNoX2hpbnRfdGFibGVfYWN0aXZhdGVfbWFzayggdGFibGUsIG1hc2sgKTsKKworICAgICAgICAgIHBzaF9oaW50X3RhYmxlX2ZpbmRfc3Ryb25nX3BvaW50cyggdGFibGUsIHBvaW50LCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgbWFqb3JfZGlyICk7CisgICAgICAgIH0KKyAgICAgICAgZmlyc3QgPSBuZXh0OworICAgICAgfQorICAgIH0KKworICAgIC8qIHByb2Nlc3MgcHJpbWFyeSBoaW50cyBmb3IgYWxsIHBvaW50cyAqLworICAgIGlmICggbnVtX21hc2tzID09IDEgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICAgY291bnQgPSBnbHlwaC0+bnVtX3BvaW50czsKKyAgICAgIFBTSF9Qb2ludCAgcG9pbnQgPSBnbHlwaC0+cG9pbnRzOworCisKKyAgICAgIHBzaF9oaW50X3RhYmxlX2FjdGl2YXRlX21hc2soIHRhYmxlLCB0YWJsZS0+aGludF9tYXNrcy0+bWFza3MgKTsKKworICAgICAgcHNoX2hpbnRfdGFibGVfZmluZF9zdHJvbmdfcG9pbnRzKCB0YWJsZSwgcG9pbnQsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIG1ham9yX2RpciApOworICAgIH0KKworICAgIC8qIG5vdywgY2VydGFpbiBwb2ludHMgbWF5IGhhdmUgYmVlbiBhdHRhY2hlZCB0byBhIGhpbnQgYW5kICovCisgICAgLyogbm90IG1hcmtlZCBhcyBzdHJvbmc7IHVwZGF0ZSB0aGVpciBmbGFncyB0aGVuICAgICAgICAgICAgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICAgIGNvdW50ID0gZ2x5cGgtPm51bV9wb2ludHM7CisgICAgICBQU0hfUG9pbnQgIHBvaW50ID0gZ2x5cGgtPnBvaW50czsKKworCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcG9pbnQrKyApCisgICAgICAgIGlmICggcG9pbnQtPmhpbnQgJiYgIXBzaF9wb2ludF9pc19zdHJvbmcoIHBvaW50ICkgKQorICAgICAgICAgIHBzaF9wb2ludF9zZXRfc3Ryb25nKCBwb2ludCApOworICAgIH0KKyAgfQorCisKKyAgLyogZmluZCBwb2ludHMgaW4gYSBnbHlwaCB3aGljaCBhcmUgaW4gYSBibHVlIHpvbmUgYW5kIGhhdmUgYGluJyBvciAqLworICAvKiBgb3V0JyB0YW5nZW50cyBwYXJhbGxlbCB0byB0aGUgaG9yaXpvbnRhbCBheGlzICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIHBzaF9nbHlwaF9maW5kX2JsdWVfcG9pbnRzKCBQU0hfQmx1ZXMgIGJsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNIX0dseXBoICBnbHlwaCApCisgIHsKKyAgICBQU0hfQmx1ZV9UYWJsZSAgdGFibGU7CisgICAgUFNIX0JsdWVfWm9uZSAgIHpvbmU7CisgICAgRlRfVUludCAgICAgICAgIGdseXBoX2NvdW50ID0gZ2x5cGgtPm51bV9wb2ludHM7CisgICAgRlRfVUludCAgICAgICAgIGJsdWVfY291bnQ7CisgICAgUFNIX1BvaW50ICAgICAgIHBvaW50ID0gZ2x5cGgtPnBvaW50czsKKworCisgICAgZm9yICggOyBnbHlwaF9jb3VudCA+IDA7IGdseXBoX2NvdW50LS0sIHBvaW50KysgKQorICAgIHsKKyAgICAgIEZUX1BvcyAgeTsKKworCisgICAgICAvKiBjaGVjayB0YW5nZW50cyAqLworICAgICAgaWYgKCAhUFNIX0RJUl9DT01QQVJFKCBwb2ludC0+ZGlyX2luLCAgUFNIX0RJUl9IT1JJWk9OVEFMICkgJiYKKyAgICAgICAgICAgIVBTSF9ESVJfQ09NUEFSRSggcG9pbnQtPmRpcl9vdXQsIFBTSF9ESVJfSE9SSVpPTlRBTCApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIHNraXAgc3Ryb25nIHBvaW50cyAqLworICAgICAgaWYgKCBwc2hfcG9pbnRfaXNfc3Ryb25nKCBwb2ludCApICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHkgPSBwb2ludC0+b3JnX3U7CisKKyAgICAgIC8qIGxvb2sgdXAgdG9wIHpvbmVzICovCisgICAgICB0YWJsZSAgICAgID0gJmJsdWVzLT5ub3JtYWxfdG9wOworICAgICAgYmx1ZV9jb3VudCA9IHRhYmxlLT5jb3VudDsKKyAgICAgIHpvbmUgICAgICAgPSB0YWJsZS0+em9uZXM7CisKKyAgICAgIGZvciAoIDsgYmx1ZV9jb3VudCA+IDA7IGJsdWVfY291bnQtLSwgem9uZSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfUG9zICBkZWx0YSA9IHkgLSB6b25lLT5vcmdfYm90dG9tOworCisKKyAgICAgICAgaWYgKCBkZWx0YSA8IC1ibHVlcy0+Ymx1ZV9mdXp6ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIHkgPD0gem9uZS0+b3JnX3RvcCArIGJsdWVzLT5ibHVlX2Z1enogKQorICAgICAgICAgIGlmICggYmx1ZXMtPm5vX292ZXJzaG9vdHMgfHwgZGVsdGEgPD0gYmx1ZXMtPmJsdWVfdGhyZXNob2xkICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwb2ludC0+Y3VyX3UgPSB6b25lLT5jdXJfYm90dG9tOworICAgICAgICAgICAgcHNoX3BvaW50X3NldF9zdHJvbmcoIHBvaW50ICk7CisgICAgICAgICAgICBwc2hfcG9pbnRfc2V0X2ZpdHRlZCggcG9pbnQgKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIGxvb2sgdXAgYm90dG9tIHpvbmVzICovCisgICAgICB0YWJsZSAgICAgID0gJmJsdWVzLT5ub3JtYWxfYm90dG9tOworICAgICAgYmx1ZV9jb3VudCA9IHRhYmxlLT5jb3VudDsKKyAgICAgIHpvbmUgICAgICAgPSB0YWJsZS0+em9uZXMgKyBibHVlX2NvdW50IC0gMTsKKworICAgICAgZm9yICggOyBibHVlX2NvdW50ID4gMDsgYmx1ZV9jb3VudC0tLCB6b25lLS0gKQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGRlbHRhID0gem9uZS0+b3JnX3RvcCAtIHk7CisKKworICAgICAgICBpZiAoIGRlbHRhIDwgLWJsdWVzLT5ibHVlX2Z1enogKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggeSA+PSB6b25lLT5vcmdfYm90dG9tIC0gYmx1ZXMtPmJsdWVfZnV6eiApCisgICAgICAgICAgaWYgKCBibHVlcy0+bm9fb3ZlcnNob290cyB8fCBkZWx0YSA8IGJsdWVzLT5ibHVlX3RocmVzaG9sZCApCisgICAgICAgICAgeworICAgICAgICAgICAgcG9pbnQtPmN1cl91ID0gem9uZS0+Y3VyX3RvcDsKKyAgICAgICAgICAgIHBzaF9wb2ludF9zZXRfc3Ryb25nKCBwb2ludCApOworICAgICAgICAgICAgcHNoX3BvaW50X3NldF9maXR0ZWQoIHBvaW50ICk7CisgICAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogaW50ZXJwb2xhdGUgc3Ryb25nIHBvaW50cyB3aXRoIHRoZSBoZWxwIG9mIGhpbnRlZCBjb29yZGluYXRlcyAqLworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfc3Ryb25nX3BvaW50cyggUFNIX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgZGltZW5zaW9uICkKKyAgeworICAgIFBTSF9EaW1lbnNpb24gIGRpbSAgID0gJmdseXBoLT5nbG9iYWxzLT5kaW1lbnNpb25bZGltZW5zaW9uXTsKKyAgICBGVF9GaXhlZCAgICAgICBzY2FsZSA9IGRpbS0+c2NhbGVfbXVsdDsKKworICAgIEZUX1VJbnQgICAgICAgIGNvdW50ID0gZ2x5cGgtPm51bV9wb2ludHM7CisgICAgUFNIX1BvaW50ICAgICAgcG9pbnQgPSBnbHlwaC0+cG9pbnRzOworCisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcG9pbnQrKyApCisgICAgeworICAgICAgUFNIX0hpbnQgIGhpbnQgPSBwb2ludC0+aGludDsKKworCisgICAgICBpZiAoIGhpbnQgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGRlbHRhOworCisKKyAgICAgICAgaWYgKCBwc2hfcG9pbnRfaXNfZWRnZV9taW4oIHBvaW50ICkgKQorICAgICAgICAgIHBvaW50LT5jdXJfdSA9IGhpbnQtPmN1cl9wb3M7CisKKyAgICAgICAgZWxzZSBpZiAoIHBzaF9wb2ludF9pc19lZGdlX21heCggcG9pbnQgKSApCisgICAgICAgICAgcG9pbnQtPmN1cl91ID0gaGludC0+Y3VyX3BvcyArIGhpbnQtPmN1cl9sZW47CisKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgPSBwb2ludC0+b3JnX3UgLSBoaW50LT5vcmdfcG9zOworCisgICAgICAgICAgaWYgKCBkZWx0YSA8PSAwICkKKyAgICAgICAgICAgIHBvaW50LT5jdXJfdSA9IGhpbnQtPmN1cl9wb3MgKyBGVF9NdWxGaXgoIGRlbHRhLCBzY2FsZSApOworCisgICAgICAgICAgZWxzZSBpZiAoIGRlbHRhID49IGhpbnQtPm9yZ19sZW4gKQorICAgICAgICAgICAgcG9pbnQtPmN1cl91ID0gaGludC0+Y3VyX3BvcyArIGhpbnQtPmN1cl9sZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGRlbHRhIC0gaGludC0+b3JnX2xlbiwgc2NhbGUgKTsKKworICAgICAgICAgIGVsc2UgLyogaGludC0+b3JnX2xlbiA+IDAgKi8KKyAgICAgICAgICAgIHBvaW50LT5jdXJfdSA9IGhpbnQtPmN1cl9wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGRlbHRhLCBoaW50LT5jdXJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQtPm9yZ19sZW4gKTsKKyAgICAgICAgfQorICAgICAgICBwc2hfcG9pbnRfc2V0X2ZpdHRlZCggcG9pbnQgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisjZGVmaW5lICBQU0hfTUFYX1NUUk9OR19JTlRFUk5BTCAgMTYKKworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfbm9ybWFsX3BvaW50cyggUFNIX0dseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgZGltZW5zaW9uICkKKyAgeworCisjaWYgMQorICAgIC8qIGZpcnN0IHRlY2huaXF1ZTogYSBwb2ludCBpcyBzdHJvbmcgaWYgaXQgaXMgYSBsb2NhbCBleHRyZW11bSAqLworCisgICAgUFNIX0RpbWVuc2lvbiAgZGltICAgID0gJmdseXBoLT5nbG9iYWxzLT5kaW1lbnNpb25bZGltZW5zaW9uXTsKKyAgICBGVF9GaXhlZCAgICAgICBzY2FsZSAgPSBkaW0tPnNjYWxlX211bHQ7CisgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ID0gZ2x5cGgtPm1lbW9yeTsKKworICAgIFBTSF9Qb2ludCogICAgIHN0cm9uZ3MgICAgID0gTlVMTDsKKyAgICBQU0hfUG9pbnQgICAgICBzdHJvbmdzXzBbUFNIX01BWF9TVFJPTkdfSU5URVJOQUxdOworICAgIEZUX1VJbnQgICAgICAgIG51bV9zdHJvbmdzID0gMDsKKworICAgIFBTSF9Qb2ludCAgICAgIHBvaW50cyA9IGdseXBoLT5wb2ludHM7CisgICAgUFNIX1BvaW50ICAgICAgcG9pbnRzX2VuZCA9IHBvaW50cyArIGdseXBoLT5udW1fcG9pbnRzOworICAgIFBTSF9Qb2ludCAgICAgIHBvaW50OworCisKKyAgICAvKiBmaXJzdCBjb3VudCB0aGUgbnVtYmVyIG9mIHN0cm9uZyBwb2ludHMgKi8KKyAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBwb2ludHNfZW5kOyBwb2ludCsrICkKKyAgICB7CisgICAgICBpZiAoIHBzaF9wb2ludF9pc19zdHJvbmcoIHBvaW50ICkgKQorICAgICAgICBudW1fc3Ryb25ncysrOworICAgIH0KKworICAgIGlmICggbnVtX3N0cm9uZ3MgPT0gMCApICAvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKyAgICAgIHJldHVybjsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFycmF5IHRvIHN0b3JlIGEgbGlzdCBvZiBwb2ludHMsICovCisgICAgLyogc3RvcmVkIGluIGluY3JlYXNpbmcgb3JnX3Ugb3JkZXIgICAgICAgICAgICAgKi8KKyAgICBpZiAoIG51bV9zdHJvbmdzIDw9IFBTSF9NQVhfU1RST05HX0lOVEVSTkFMICkKKyAgICAgIHN0cm9uZ3MgPSBzdHJvbmdzXzA7CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggc3Ryb25ncywgbnVtX3N0cm9uZ3MgKSApCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBudW1fc3Ryb25ncyA9IDA7CisgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRzX2VuZDsgcG9pbnQrKyApCisgICAgeworICAgICAgUFNIX1BvaW50KiAgaW5zZXJ0OworCisKKyAgICAgIGlmICggIXBzaF9wb2ludF9pc19zdHJvbmcoIHBvaW50ICkgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgZm9yICggaW5zZXJ0ID0gc3Ryb25ncyArIG51bV9zdHJvbmdzOyBpbnNlcnQgPiBzdHJvbmdzOyBpbnNlcnQtLSApCisgICAgICB7CisgICAgICAgIGlmICggaW5zZXJ0Wy0xXS0+b3JnX3UgPD0gcG9pbnQtPm9yZ191ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnNlcnRbMF0gPSBpbnNlcnRbLTFdOworICAgICAgfQorICAgICAgaW5zZXJ0WzBdID0gcG9pbnQ7CisgICAgICBudW1fc3Ryb25ncysrOworICAgIH0KKworICAgIC8qIG5vdyB0cnkgdG8gaW50ZXJwb2xhdGUgYWxsIG5vcm1hbCBwb2ludHMgKi8KKyAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBwb2ludHNfZW5kOyBwb2ludCsrICkKKyAgICB7CisgICAgICBpZiAoIHBzaF9wb2ludF9pc19zdHJvbmcoIHBvaW50ICkgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogc29tZXRpbWVzLCBzb21lIGxvY2FsIGV4dHJlbWEgYXJlIHNtb290aCBwb2ludHMgKi8KKyAgICAgIGlmICggcHNoX3BvaW50X2lzX3Ntb290aCggcG9pbnQgKSApCisgICAgICB7CisgICAgICAgIGlmICggcG9pbnQtPmRpcl9pbiA9PSBQU0hfRElSX05PTkUgICB8fAorICAgICAgICAgICAgIHBvaW50LT5kaXJfaW4gIT0gcG9pbnQtPmRpcl9vdXQgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggIXBzaF9wb2ludF9pc19leHRyZW11bSggcG9pbnQgKSAmJgorICAgICAgICAgICAgICFwc2hfcG9pbnRfaXNfaW5mbGV4KCBwb2ludCApICAgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHBvaW50LT5mbGFncyAmPSB+UFNIX1BPSU5UX1NNT09USDsKKyAgICAgIH0KKworICAgICAgLyogZmluZCBiZXN0IGVuY2xvc2luZyBwb2ludCBjb29yZGluYXRlcyB0aGVuIGludGVycG9sYXRlICovCisgICAgICB7CisgICAgICAgIFBTSF9Qb2ludCAgIGJlZm9yZSwgYWZ0ZXI7CisgICAgICAgIEZUX1VJbnQgICAgIG5uOworCisKKyAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9zdHJvbmdzOyBubisrICkKKyAgICAgICAgICBpZiAoIHN0cm9uZ3Nbbm5dLT5vcmdfdSA+IHBvaW50LT5vcmdfdSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIG5uID09IDAgKSAgLyogcG9pbnQgYmVmb3JlIHRoZSBmaXJzdCBzdHJvbmcgcG9pbnQgKi8KKyAgICAgICAgeworICAgICAgICAgIGFmdGVyID0gc3Ryb25nc1swXTsKKworICAgICAgICAgIHBvaW50LT5jdXJfdSA9IGFmdGVyLT5jdXJfdSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIHBvaW50LT5vcmdfdSAtIGFmdGVyLT5vcmdfdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBiZWZvcmUgPSBzdHJvbmdzW25uIC0gMV07CisKKyAgICAgICAgICBmb3IgKCBubiA9IG51bV9zdHJvbmdzOyBubiA+IDA7IG5uLS0gKQorICAgICAgICAgICAgaWYgKCBzdHJvbmdzW25uIC0gMV0tPm9yZ191IDwgcG9pbnQtPm9yZ191ICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBpZiAoIG5uID09IG51bV9zdHJvbmdzICkgIC8qIHBvaW50IGlzIGFmdGVyIGxhc3Qgc3Ryb25nIHBvaW50ICovCisgICAgICAgICAgeworICAgICAgICAgICAgYmVmb3JlID0gc3Ryb25nc1tubiAtIDFdOworCisgICAgICAgICAgICBwb2ludC0+Y3VyX3UgPSBiZWZvcmUtPmN1cl91ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBwb2ludC0+b3JnX3UgLSBiZWZvcmUtPm9yZ191LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIHU7CisKKworICAgICAgICAgICAgYWZ0ZXIgPSBzdHJvbmdzW25uXTsKKworICAgICAgICAgICAgLyogbm93IGludGVycG9sYXRlIHBvaW50IGJldHdlZW4gYmVmb3JlIGFuZCBhZnRlciAqLworICAgICAgICAgICAgdSA9IHBvaW50LT5vcmdfdTsKKworICAgICAgICAgICAgaWYgKCB1ID09IGJlZm9yZS0+b3JnX3UgKQorICAgICAgICAgICAgICBwb2ludC0+Y3VyX3UgPSBiZWZvcmUtPmN1cl91OworCisgICAgICAgICAgICBlbHNlIGlmICggdSA9PSBhZnRlci0+b3JnX3UgKQorICAgICAgICAgICAgICBwb2ludC0+Y3VyX3UgPSBhZnRlci0+Y3VyX3U7CisKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcG9pbnQtPmN1cl91ID0gYmVmb3JlLT5jdXJfdSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCB1IC0gYmVmb3JlLT5vcmdfdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyLT5jdXJfdSAtIGJlZm9yZS0+Y3VyX3UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlci0+b3JnX3UgLSBiZWZvcmUtPm9yZ191ICk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBzaF9wb2ludF9zZXRfZml0dGVkKCBwb2ludCApOworICAgICAgfQorICAgIH0KKworICAgIGlmICggc3Ryb25ncyAhPSBzdHJvbmdzXzAgKQorICAgICAgRlRfRlJFRSggc3Ryb25ncyApOworCisjZW5kaWYgLyogMSAqLworCisgIH0KKworCisgIC8qIGludGVycG9sYXRlIG90aGVyIHBvaW50cyAqLworICBzdGF0aWMgdm9pZAorICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfb3RoZXJfcG9pbnRzKCBQU0hfR2x5cGggIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRpbWVuc2lvbiApCisgIHsKKyAgICBQU0hfRGltZW5zaW9uICBkaW0gICAgICAgICAgPSAmZ2x5cGgtPmdsb2JhbHMtPmRpbWVuc2lvbltkaW1lbnNpb25dOworICAgIEZUX0ZpeGVkICAgICAgIHNjYWxlICAgICAgICA9IGRpbS0+c2NhbGVfbXVsdDsKKyAgICBGVF9GaXhlZCAgICAgICBkZWx0YSAgICAgICAgPSBkaW0tPnNjYWxlX2RlbHRhOworICAgIFBTSF9Db250b3VyICAgIGNvbnRvdXIgICAgICA9IGdseXBoLT5jb250b3VyczsKKyAgICBGVF9VSW50ICAgICAgICBudW1fY29udG91cnMgPSBnbHlwaC0+bnVtX2NvbnRvdXJzOworCisKKyAgICBmb3IgKCA7IG51bV9jb250b3VycyA+IDA7IG51bV9jb250b3Vycy0tLCBjb250b3VyKysgKQorICAgIHsKKyAgICAgIFBTSF9Qb2ludCAgc3RhcnQgPSBjb250b3VyLT5zdGFydDsKKyAgICAgIFBTSF9Qb2ludCAgZmlyc3QsIG5leHQsIHBvaW50OworICAgICAgRlRfVUludCAgICBmaXRfY291bnQ7CisKKworICAgICAgLyogY291bnQgdGhlIG51bWJlciBvZiBzdHJvbmcgcG9pbnRzIGluIHRoaXMgY29udG91ciAqLworICAgICAgbmV4dCAgICAgID0gc3RhcnQgKyBjb250b3VyLT5jb3VudDsKKyAgICAgIGZpdF9jb3VudCA9IDA7CisgICAgICBmaXJzdCAgICAgPSBOVUxMOworCisgICAgICBmb3IgKCBwb2ludCA9IHN0YXJ0OyBwb2ludCA8IG5leHQ7IHBvaW50KysgKQorICAgICAgICBpZiAoIHBzaF9wb2ludF9pc19maXR0ZWQoIHBvaW50ICkgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCAhZmlyc3QgKQorICAgICAgICAgICAgZmlyc3QgPSBwb2ludDsKKworICAgICAgICAgIGZpdF9jb3VudCsrOworICAgICAgICB9CisKKyAgICAgIC8qIGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMiBmaXR0ZWQgcG9pbnRzIGluIHRoZSBjb250b3VyLCB3ZSAqLworICAgICAgLyogc2ltcGx5IHNjYWxlIGFuZCBldmVudHVhbGx5IHRyYW5zbGF0ZSB0aGUgY29udG91ciBwb2ludHMgICovCisgICAgICBpZiAoIGZpdF9jb3VudCA8IDIgKQorICAgICAgeworICAgICAgICBpZiAoIGZpdF9jb3VudCA9PSAxICkKKyAgICAgICAgICBkZWx0YSA9IGZpcnN0LT5jdXJfdSAtIEZUX011bEZpeCggZmlyc3QtPm9yZ191LCBzY2FsZSApOworCisgICAgICAgIGZvciAoIHBvaW50ID0gc3RhcnQ7IHBvaW50IDwgbmV4dDsgcG9pbnQrKyApCisgICAgICAgICAgaWYgKCBwb2ludCAhPSBmaXJzdCApCisgICAgICAgICAgICBwb2ludC0+Y3VyX3UgPSBGVF9NdWxGaXgoIHBvaW50LT5vcmdfdSwgc2NhbGUgKSArIGRlbHRhOworCisgICAgICAgIGdvdG8gTmV4dF9Db250b3VyOworICAgICAgfQorCisgICAgICAvKiB0aGVyZSBhcmUgbW9yZSB0aGFuIDIgc3Ryb25nIHBvaW50cyBpbiB0aGlzIGNvbnRvdXI7IHdlICovCisgICAgICAvKiBuZWVkIHRvIGludGVycG9sYXRlIHdlYWsgcG9pbnRzIGJldHdlZW4gdGhlbSAgICAgICAgICAgICovCisgICAgICBzdGFydCA9IGZpcnN0OworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgLyogc2tpcCBjb25zZWN1dGl2ZSBmaXR0ZWQgcG9pbnRzICovCisgICAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICBuZXh0ID0gZmlyc3QtPm5leHQ7CisgICAgICAgICAgaWYgKCBuZXh0ID09IHN0YXJ0ICkKKyAgICAgICAgICAgIGdvdG8gTmV4dF9Db250b3VyOworCisgICAgICAgICAgaWYgKCAhcHNoX3BvaW50X2lzX2ZpdHRlZCggbmV4dCApICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZmlyc3QgPSBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgLyogZmluZCBuZXh0IGZpdHRlZCBwb2ludCBhZnRlciB1bmZpdHRlZCBvbmUgKi8KKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIG5leHQgPSBuZXh0LT5uZXh0OworICAgICAgICAgIGlmICggcHNoX3BvaW50X2lzX2ZpdHRlZCggbmV4dCApICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGludGVycG9sYXRlIGJldHdlZW4gdGhlbSAqLworICAgICAgICB7CisgICAgICAgICAgRlRfUG9zICAgIG9yZ19hLCBvcmdfYWIsIGN1cl9hLCBjdXJfYWI7CisgICAgICAgICAgRlRfUG9zICAgIG9yZ19jLCBvcmdfYWMsIGN1cl9jOworICAgICAgICAgIEZUX0ZpeGVkICBzY2FsZV9hYjsKKworCisgICAgICAgICAgaWYgKCBmaXJzdC0+b3JnX3UgPD0gbmV4dC0+b3JnX3UgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG9yZ19hICA9IGZpcnN0LT5vcmdfdTsKKyAgICAgICAgICAgIGN1cl9hICA9IGZpcnN0LT5jdXJfdTsKKyAgICAgICAgICAgIG9yZ19hYiA9IG5leHQtPm9yZ191IC0gb3JnX2E7CisgICAgICAgICAgICBjdXJfYWIgPSBuZXh0LT5jdXJfdSAtIGN1cl9hOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgb3JnX2EgID0gbmV4dC0+b3JnX3U7CisgICAgICAgICAgICBjdXJfYSAgPSBuZXh0LT5jdXJfdTsKKyAgICAgICAgICAgIG9yZ19hYiA9IGZpcnN0LT5vcmdfdSAtIG9yZ19hOworICAgICAgICAgICAgY3VyX2FiID0gZmlyc3QtPmN1cl91IC0gY3VyX2E7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2NhbGVfYWIgPSAweDEwMDAwTDsKKyAgICAgICAgICBpZiAoIG9yZ19hYiA+IDAgKQorICAgICAgICAgICAgc2NhbGVfYWIgPSBGVF9EaXZGaXgoIGN1cl9hYiwgb3JnX2FiICk7CisKKyAgICAgICAgICBwb2ludCA9IGZpcnN0LT5uZXh0OworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgb3JnX2MgID0gcG9pbnQtPm9yZ191OworICAgICAgICAgICAgb3JnX2FjID0gb3JnX2MgLSBvcmdfYTsKKworICAgICAgICAgICAgaWYgKCBvcmdfYWMgPD0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIG9uIHRoZSBsZWZ0IG9mIHRoZSBpbnRlcnBvbGF0aW9uIHpvbmUgKi8KKyAgICAgICAgICAgICAgY3VyX2MgPSBjdXJfYSArIEZUX011bEZpeCggb3JnX2FjLCBzY2FsZSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIG9yZ19hYyA+PSBvcmdfYWIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBvbiB0aGUgcmlnaHQgb24gdGhlIGludGVycG9sYXRpb24gem9uZSAqLworICAgICAgICAgICAgICBjdXJfYyA9IGN1cl9hICsgY3VyX2FiICsgRlRfTXVsRml4KCBvcmdfYWMgLSBvcmdfYWIsIHNjYWxlICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIHdpdGhpbiB0aGUgaW50ZXJwb2xhdGlvbiB6b25lICovCisgICAgICAgICAgICAgIGN1cl9jID0gY3VyX2EgKyBGVF9NdWxGaXgoIG9yZ19hYywgc2NhbGVfYWIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcG9pbnQtPmN1cl91ID0gY3VyX2M7CisKKyAgICAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CisKKyAgICAgICAgICB9IHdoaWxlICggcG9pbnQgIT0gbmV4dCApOworICAgICAgICB9CisKKyAgICAgICAgLyoga2VlcCBnb2luZyB1bnRpbCBhbGwgcG9pbnRzIGluIHRoZSBjb250b3VycyBoYXZlIGJlZW4gcHJvY2Vzc2VkICovCisgICAgICAgIGZpcnN0ID0gbmV4dDsKKworICAgICAgfSB3aGlsZSAoIGZpcnN0ICE9IHN0YXJ0ICk7CisKKyAgICBOZXh0X0NvbnRvdXI6CisgICAgICA7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICBISUdILUxFVkVMIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9FcnJvcgorICBwc19oaW50c19hcHBseSggUFNfSGludHMgICAgICAgIHBzX2hpbnRzLAorICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICBQU0hfR2xvYmFscyAgICAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBoaW50X21vZGUgKQorICB7CisgICAgUFNIX0dseXBoUmVjICBnbHlwaHJlYzsKKyAgICBQU0hfR2x5cGggICAgIGdseXBoID0gJmdseXBocmVjOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnk7CisjZW5kaWYKKyAgICBGVF9JbnQgICAgICAgIGRpbWVuc2lvbjsKKworCisgICAgLyogc29tZXRoaW5nIHRvIGRvPyAqLworICAgIGlmICggb3V0bGluZS0+bl9wb2ludHMgPT0gMCB8fCBvdXRsaW5lLT5uX2NvbnRvdXJzID09IDAgKQorICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworI2lmZGVmIERFQlVHX0hJTlRFUgorCisgICAgbWVtb3J5ID0gZ2xvYmFscy0+bWVtb3J5OworCisgICAgaWYgKCBwc19kZWJ1Z19nbHlwaCApCisgICAgeworICAgICAgcHNoX2dseXBoX2RvbmUoIHBzX2RlYnVnX2dseXBoICk7CisgICAgICBGVF9GUkVFKCBwc19kZWJ1Z19nbHlwaCApOworICAgIH0KKworICAgIGlmICggRlRfTkVXKCBnbHlwaCApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIHBzX2RlYnVnX2dseXBoID0gZ2x5cGg7CisKKyNlbmRpZiAvKiBERUJVR19ISU5URVIgKi8KKworICAgIGVycm9yID0gcHNoX2dseXBoX2luaXQoIGdseXBoLCBvdXRsaW5lLCBwc19oaW50cywgZ2xvYmFscyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogdHJ5IHRvIG9wdGltaXplIHRoZSB5X3NjYWxlIHNvIHRoYXQgdGhlIHRvcCBvZiBub24tY2FwaXRhbCBsZXR0ZXJzCisgICAgICogaXMgYWxpZ25lZCBvbiBhIHBpeGVsIGJvdW5kYXJ5IHdoZW5ldmVyIHBvc3NpYmxlCisgICAgICovCisgICAgeworICAgICAgUFNIX0RpbWVuc2lvbiAgZGltX3ggPSAmZ2x5cGgtPmdsb2JhbHMtPmRpbWVuc2lvblswXTsKKyAgICAgIFBTSF9EaW1lbnNpb24gIGRpbV95ID0gJmdseXBoLT5nbG9iYWxzLT5kaW1lbnNpb25bMV07CisKKyAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gZGltX3gtPnNjYWxlX211bHQ7CisgICAgICBGVF9GaXhlZCAgeV9zY2FsZSA9IGRpbV95LT5zY2FsZV9tdWx0OworCisgICAgICBGVF9GaXhlZCAgb2xkX3hfc2NhbGUgPSB4X3NjYWxlOworICAgICAgRlRfRml4ZWQgIG9sZF95X3NjYWxlID0geV9zY2FsZTsKKworICAgICAgRlRfRml4ZWQgIHNjYWxlZDsKKyAgICAgIEZUX0ZpeGVkICBmaXR0ZWQ7CisKKyAgICAgIEZUX0Jvb2wgIHJlc2NhbGUgPSBGQUxTRTsKKworCisgICAgICBzY2FsZWQgPSBGVF9NdWxGaXgoIGdsb2JhbHMtPmJsdWVzLm5vcm1hbF90b3Auem9uZXMtPm9yZ19yZWYsIHlfc2NhbGUgKTsKKyAgICAgIGZpdHRlZCA9IEZUX1BJWF9ST1VORCggc2NhbGVkICk7CisKKyAgICAgIGlmICggZml0dGVkICE9IDAgJiYgc2NhbGVkICE9IGZpdHRlZCApCisgICAgICB7CisgICAgICAgIHJlc2NhbGUgPSBUUlVFOworCisgICAgICAgIHlfc2NhbGUgPSBGVF9NdWxEaXYoIHlfc2NhbGUsIGZpdHRlZCwgc2NhbGVkICk7CisKKyAgICAgICAgaWYgKCBmaXR0ZWQgPCBzY2FsZWQgKQorICAgICAgICAgIHhfc2NhbGUgLT0geF9zY2FsZSAvIDUwOworCisgICAgICAgIHBzaF9nbG9iYWxzX3NldF9zY2FsZSggZ2x5cGgtPmdsb2JhbHMsIHhfc2NhbGUsIHlfc2NhbGUsIDAsIDAgKTsKKyAgICAgIH0KKworICAgICAgZ2x5cGgtPmRvX2hvcnpfaGludHMgPSAxOworICAgICAgZ2x5cGgtPmRvX3ZlcnRfaGludHMgPSAxOworCisgICAgICBnbHlwaC0+ZG9faG9yel9zbmFwcGluZyA9IEZUX0JPT0woIGhpbnRfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9NT05PIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgICk7CisKKyAgICAgIGdseXBoLT5kb192ZXJ0X3NuYXBwaW5nID0gRlRfQk9PTCggaGludF9tb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApOworCisgICAgICBnbHlwaC0+ZG9fc3RlbV9hZGp1c3QgICA9IEZUX0JPT0woIGhpbnRfbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApOworCisgICAgICBmb3IgKCBkaW1lbnNpb24gPSAwOyBkaW1lbnNpb24gPCAyOyBkaW1lbnNpb24rKyApCisgICAgICB7CisgICAgICAgIC8qIGxvYWQgb3V0bGluZSBjb29yZGluYXRlcyBpbnRvIGdseXBoICovCisgICAgICAgIHBzaF9nbHlwaF9sb2FkX3BvaW50cyggZ2x5cGgsIGRpbWVuc2lvbiApOworCisgICAgICAgIC8qIGNvbXB1dGUgbG9jYWwgZXh0cmVtYSAqLworICAgICAgICBwc2hfZ2x5cGhfY29tcHV0ZV9leHRyZW1hKCBnbHlwaCApOworCisgICAgICAgIC8qIGNvbXB1dGUgYWxpZ25lZCBzdGVtL2hpbnRzIHBvc2l0aW9ucyAqLworICAgICAgICBwc2hfaGludF90YWJsZV9hbGlnbl9oaW50cyggJmdseXBoLT5oaW50X3RhYmxlc1tkaW1lbnNpb25dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPmdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCApOworCisgICAgICAgIC8qIGZpbmQgc3Ryb25nIHBvaW50cywgYWxpZ24gdGhlbSwgdGhlbiBpbnRlcnBvbGF0ZSBvdGhlcnMgKi8KKyAgICAgICAgcHNoX2dseXBoX2ZpbmRfc3Ryb25nX3BvaW50cyggZ2x5cGgsIGRpbWVuc2lvbiApOworICAgICAgICBpZiAoIGRpbWVuc2lvbiA9PSAxICkKKyAgICAgICAgICBwc2hfZ2x5cGhfZmluZF9ibHVlX3BvaW50cyggJmdsb2JhbHMtPmJsdWVzLCBnbHlwaCApOworICAgICAgICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfc3Ryb25nX3BvaW50cyggZ2x5cGgsIGRpbWVuc2lvbiApOworICAgICAgICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfbm9ybWFsX3BvaW50cyggZ2x5cGgsIGRpbWVuc2lvbiApOworICAgICAgICBwc2hfZ2x5cGhfaW50ZXJwb2xhdGVfb3RoZXJfcG9pbnRzKCBnbHlwaCwgZGltZW5zaW9uICk7CisKKyAgICAgICAgLyogc2F2ZSBoaW50ZWQgY29vcmRpbmF0ZXMgYmFjayB0byBvdXRsaW5lICovCisgICAgICAgIHBzaF9nbHlwaF9zYXZlX3BvaW50cyggZ2x5cGgsIGRpbWVuc2lvbiApOworCisgICAgICAgIGlmICggcmVzY2FsZSApCisgICAgICAgICAgcHNoX2dsb2JhbHNfc2V0X3NjYWxlKCBnbHlwaC0+Z2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF94X3NjYWxlLCBvbGRfeV9zY2FsZSwgMCwgMCApOworICAgICAgfQorICAgIH0KKworICBFeGl0OgorCisjaWZuZGVmIERFQlVHX0hJTlRFUgorICAgIHBzaF9nbHlwaF9kb25lKCBnbHlwaCApOworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoYWxnby5oIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3M2U1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCkBAIC0wLDAgKzEsMjQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2hhbGdvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU0hBTEdPX0hfXworI2RlZmluZSBfX1BTSEFMR09fSF9fCisKKworI2luY2x1ZGUgInBzaHJlYy5oIgorI2luY2x1ZGUgInBzaGdsb2IuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIGhhbmRsZSB0byBIaW50IHN0cnVjdHVyZSAqLworICB0eXBlZGVmIHN0cnVjdCBQU0hfSGludFJlY18qICBQU0hfSGludDsKKworCisgIC8qIGhpbnQgYml0LWZsYWdzICovCisjZGVmaW5lIFBTSF9ISU5UX0dIT1NUICAgUFNfSElOVF9GTEFHX0dIT1NUCisjZGVmaW5lIFBTSF9ISU5UX0JPVFRPTSAgUFNfSElOVF9GTEFHX0JPVFRPTQorI2RlZmluZSBQU0hfSElOVF9BQ1RJVkUgIDRVCisjZGVmaW5lIFBTSF9ISU5UX0ZJVFRFRCAgOFUKKworCisjZGVmaW5lIHBzaF9oaW50X2lzX2FjdGl2ZSggeCApICAoICggKHgpLT5mbGFncyAmIFBTSF9ISU5UX0FDVElWRSApICE9IDAgKQorI2RlZmluZSBwc2hfaGludF9pc19naG9zdCggeCApICAgKCAoICh4KS0+ZmxhZ3MgJiBQU0hfSElOVF9HSE9TVCAgKSAhPSAwICkKKyNkZWZpbmUgcHNoX2hpbnRfaXNfZml0dGVkKCB4ICkgICggKCAoeCktPmZsYWdzICYgUFNIX0hJTlRfRklUVEVEICkgIT0gMCApCisKKyNkZWZpbmUgcHNoX2hpbnRfYWN0aXZhdGUoIHggKSAgICAoeCktPmZsYWdzIHw9ICBQU0hfSElOVF9BQ1RJVkUKKyNkZWZpbmUgcHNoX2hpbnRfZGVhY3RpdmF0ZSggeCApICAoeCktPmZsYWdzICY9IH5QU0hfSElOVF9BQ1RJVkUKKyNkZWZpbmUgcHNoX2hpbnRfc2V0X2ZpdHRlZCggeCApICAoeCktPmZsYWdzIHw9ICBQU0hfSElOVF9GSVRURUQKKworCisgIC8qIGhpbnQgc3RydWN0dXJlICovCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfSGludFJlY18KKyAgeworICAgIEZUX0ludCAgICBvcmdfcG9zOworICAgIEZUX0ludCAgICBvcmdfbGVuOworICAgIEZUX1BvcyAgICBjdXJfcG9zOworICAgIEZUX1BvcyAgICBjdXJfbGVuOworICAgIEZUX1VJbnQgICBmbGFnczsKKyAgICBQU0hfSGludCAgcGFyZW50OworICAgIEZUX0ludCAgICBvcmRlcjsKKworICB9IFBTSF9IaW50UmVjOworCisKKyAgLyogdGhpcyBpcyBhbiBpbnRlcnBvbGF0aW9uIHpvbmUgdXNlZCBmb3Igc3Ryb25nIHBvaW50czsgICovCisgIC8qIHdlYWsgcG9pbnRzIGFyZSBpbnRlcnBvbGF0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHN0cm9uZyAqLworICAvKiBuZWlnaGJvdXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSF9ab25lUmVjXworICB7CisgICAgRlRfRml4ZWQgIHNjYWxlOworICAgIEZUX0ZpeGVkICBkZWx0YTsKKyAgICBGVF9Qb3MgICAgbWluOworICAgIEZUX1BvcyAgICBtYXg7CisKKyAgfSBQU0hfWm9uZVJlYywgKlBTSF9ab25lOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSF9IaW50X1RhYmxlUmVjXworICB7CisgICAgRlRfVUludCAgICAgICAgbWF4X2hpbnRzOworICAgIEZUX1VJbnQgICAgICAgIG51bV9oaW50czsKKyAgICBQU0hfSGludCAgICAgICBoaW50czsKKyAgICBQU0hfSGludCogICAgICBzb3J0OworICAgIFBTSF9IaW50KiAgICAgIHNvcnRfZ2xvYmFsOworICAgIEZUX1VJbnQgICAgICAgIG51bV96b25lczsKKyAgICBQU0hfWm9uZVJlYyogICB6b25lczsKKyAgICBQU0hfWm9uZSAgICAgICB6b25lOworICAgIFBTX01hc2tfVGFibGUgIGhpbnRfbWFza3M7CisgICAgUFNfTWFza19UYWJsZSAgY291bnRlcl9tYXNrczsKKworICB9IFBTSF9IaW50X1RhYmxlUmVjLCAqUFNIX0hpbnRfVGFibGU7CisKKworICB0eXBlZGVmIHN0cnVjdCBQU0hfUG9pbnRSZWNfKiAgICBQU0hfUG9pbnQ7CisgIHR5cGVkZWYgc3RydWN0IFBTSF9Db250b3VyUmVjXyogIFBTSF9Db250b3VyOworCisgIGVudW0KKyAgeworICAgIFBTSF9ESVJfTk9ORSAgPSAgNCwKKyAgICBQU0hfRElSX1VQICAgID0gLTEsCisgICAgUFNIX0RJUl9ET1dOICA9ICAxLAorICAgIFBTSF9ESVJfTEVGVCAgPSAtMiwKKyAgICBQU0hfRElSX1JJR0hUID0gIDIKKyAgfTsKKworI2RlZmluZSBQU0hfRElSX0hPUklaT05UQUwgIDIKKyNkZWZpbmUgUFNIX0RJUl9WRVJUSUNBTCAgICAxCisKKyNkZWZpbmUgUFNIX0RJUl9DT01QQVJFKCBkMSwgZDIgKSAgICggKGQxKSA9PSAoZDIpIHx8IChkMSkgPT0gLShkMikgKQorI2RlZmluZSBQU0hfRElSX0lTX0hPUklaT05UQUwoIGQgKSAgUFNIX0RJUl9DT01QQVJFKCBkLCBQU0hfRElSX0hPUklaT05UQUwgKQorI2RlZmluZSBQU0hfRElSX0lTX1ZFUlRJQ0FMKCBkICkgICAgUFNIX0RJUl9DT01QQVJFKCBkLCBQU0hfRElSX1ZFUlRJQ0FMICkKKworCisgIC8qIHRoZSBmb2xsb3dpbmcgYml0LWZsYWdzIGFyZSBjb21wdXRlZCBvbmNlIGJ5IHRoZSBnbHlwaCAqLworICAvKiBhbmFseXplciwgZm9yIGJvdGggZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX09GRiAgICAgMVUgICAgICAvKiBwb2ludCBpcyBvZmYgdGhlIGN1cnZlICovCisjZGVmaW5lIFBTSF9QT0lOVF9TTU9PVEggIDJVICAgICAgLyogcG9pbnQgaXMgc21vb3RoICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfSU5GTEVYICA0VSAgICAgIC8qIHBvaW50IGlzIGluZmxlY3Rpb24gICAgKi8KKworCisjZGVmaW5lIHBzaF9wb2ludF9pc19zbW9vdGgoIHAgKSAgKCAocCktPmZsYWdzICYgUFNIX1BPSU5UX1NNT09USCApCisjZGVmaW5lIHBzaF9wb2ludF9pc19vZmYoIHAgKSAgICAgKCAocCktPmZsYWdzICYgUFNIX1BPSU5UX09GRiAgICApCisjZGVmaW5lIHBzaF9wb2ludF9pc19pbmZsZXgoIHAgKSAgKCAocCktPmZsYWdzICYgUFNIX1BPSU5UX0lORkxFWCApCisKKyNkZWZpbmUgcHNoX3BvaW50X3NldF9zbW9vdGgoIHAgKSAgKHApLT5mbGFncyB8PSBQU0hfUE9JTlRfU01PT1RICisjZGVmaW5lIHBzaF9wb2ludF9zZXRfb2ZmKCBwICkgICAgIChwKS0+ZmxhZ3MgfD0gUFNIX1BPSU5UX09GRgorI2RlZmluZSBwc2hfcG9pbnRfc2V0X2luZmxleCggcCApICAocCktPmZsYWdzIHw9IFBTSF9QT0lOVF9JTkZMRVgKKworCisgIC8qIHRoZSBmb2xsb3dpbmcgYml0LWZsYWdzIGFyZSByZS1jb21wdXRlZCBmb3IgZWFjaCBkaW1lbnNpb24gKi8KKyNkZWZpbmUgUFNIX1BPSU5UX1NUUk9ORyAgICAgIDE2VSAvKiBwb2ludCBpcyBzdHJvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfRklUVEVEICAgICAgMzJVIC8qIHBvaW50IGlzIGFscmVhZHkgZml0dGVkICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTSF9QT0lOVF9FWFRSRU1VTSAgICA2NFUgLyogcG9pbnQgaXMgbG9jYWwgZXh0cmVtdW0gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX1BPU0lUSVZFICAgMTI4VSAvKiBleHRyZW11bSBoYXMgcG9zaXRpdmUgY29udG91ciBmbG93ICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfTkVHQVRJVkUgICAyNTZVIC8qIGV4dHJlbXVtIGhhcyBuZWdhdGl2ZSBjb250b3VyIGZsb3cgICAgICAgICovCisjZGVmaW5lIFBTSF9QT0lOVF9FREdFX01JTiAgIDUxMlUgLyogcG9pbnQgaXMgYWxpZ25lZCB0byBsZWZ0L2JvdHRvbSBzdGVtIGVkZ2UgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX0VER0VfTUFYICAxMDI0VSAvKiBwb2ludCBpcyBhbGlnbmVkIHRvIHRvcC9yaWdodCBzdGVtIGVkZ2UgICAqLworCisKKyNkZWZpbmUgcHNoX3BvaW50X2lzX3N0cm9uZyggcCApICAgICggKHApLT5mbGFnczIgJiBQU0hfUE9JTlRfU1RST05HICkKKyNkZWZpbmUgcHNoX3BvaW50X2lzX2ZpdHRlZCggcCApICAgICggKHApLT5mbGFnczIgJiBQU0hfUE9JTlRfRklUVEVEICkKKyNkZWZpbmUgcHNoX3BvaW50X2lzX2V4dHJlbXVtKCBwICkgICggKHApLT5mbGFnczIgJiBQU0hfUE9JTlRfRVhUUkVNVU0gKQorI2RlZmluZSBwc2hfcG9pbnRfaXNfcG9zaXRpdmUoIHAgKSAgKCAocCktPmZsYWdzMiAmIFBTSF9QT0lOVF9QT1NJVElWRSApCisjZGVmaW5lIHBzaF9wb2ludF9pc19uZWdhdGl2ZSggcCApICAoIChwKS0+ZmxhZ3MyICYgUFNIX1BPSU5UX05FR0FUSVZFICkKKyNkZWZpbmUgcHNoX3BvaW50X2lzX2VkZ2VfbWluKCBwICkgICggKHApLT5mbGFnczIgJiBQU0hfUE9JTlRfRURHRV9NSU4gKQorI2RlZmluZSBwc2hfcG9pbnRfaXNfZWRnZV9tYXgoIHAgKSAgKCAocCktPmZsYWdzMiAmIFBTSF9QT0lOVF9FREdFX01BWCApCisKKyNkZWZpbmUgcHNoX3BvaW50X3NldF9zdHJvbmcoIHAgKSAgICAocCktPmZsYWdzMiB8PSBQU0hfUE9JTlRfU1RST05HCisjZGVmaW5lIHBzaF9wb2ludF9zZXRfZml0dGVkKCBwICkgICAgKHApLT5mbGFnczIgfD0gUFNIX1BPSU5UX0ZJVFRFRAorI2RlZmluZSBwc2hfcG9pbnRfc2V0X2V4dHJlbXVtKCBwICkgIChwKS0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FWFRSRU1VTQorI2RlZmluZSBwc2hfcG9pbnRfc2V0X3Bvc2l0aXZlKCBwICkgIChwKS0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9QT1NJVElWRQorI2RlZmluZSBwc2hfcG9pbnRfc2V0X25lZ2F0aXZlKCBwICkgIChwKS0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9ORUdBVElWRQorI2RlZmluZSBwc2hfcG9pbnRfc2V0X2VkZ2VfbWluKCBwICkgIChwKS0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01JTgorI2RlZmluZSBwc2hfcG9pbnRfc2V0X2VkZ2VfbWF4KCBwICkgIChwKS0+ZmxhZ3MyIHw9IFBTSF9QT0lOVF9FREdFX01BWAorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSF9Qb2ludFJlY18KKyAgeworICAgIFBTSF9Qb2ludCAgICBwcmV2OworICAgIFBTSF9Qb2ludCAgICBuZXh0OworICAgIFBTSF9Db250b3VyICBjb250b3VyOworICAgIEZUX1VJbnQgICAgICBmbGFnczsKKyAgICBGVF9VSW50ICAgICAgZmxhZ3MyOworICAgIEZUX0NoYXIgICAgICBkaXJfaW47CisgICAgRlRfQ2hhciAgICAgIGRpcl9vdXQ7CisgICAgUFNIX0hpbnQgICAgIGhpbnQ7CisgICAgRlRfUG9zICAgICAgIG9yZ191OworICAgIEZUX1BvcyAgICAgICBvcmdfdjsKKyAgICBGVF9Qb3MgICAgICAgY3VyX3U7CisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgRlRfUG9zICAgICAgIG9yZ194OworICAgIEZUX1BvcyAgICAgICBjdXJfeDsKKyAgICBGVF9Qb3MgICAgICAgb3JnX3k7CisgICAgRlRfUG9zICAgICAgIGN1cl95OworICAgIEZUX1VJbnQgICAgICBmbGFnc194OworICAgIEZUX1VJbnQgICAgICBmbGFnc195OworI2VuZGlmCisKKyAgfSBQU0hfUG9pbnRSZWM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgUFNIX0NvbnRvdXJSZWNfCisgIHsKKyAgICBQU0hfUG9pbnQgIHN0YXJ0OworICAgIEZUX1VJbnQgICAgY291bnQ7CisKKyAgfSBQU0hfQ29udG91clJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfR2x5cGhSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX3BvaW50czsKKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX2NvbnRvdXJzOworCisgICAgUFNIX1BvaW50ICAgICAgICAgIHBvaW50czsKKyAgICBQU0hfQ29udG91ciAgICAgICAgY29udG91cnM7CisKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5OworICAgIEZUX091dGxpbmUqICAgICAgICBvdXRsaW5lOworICAgIFBTSF9HbG9iYWxzICAgICAgICBnbG9iYWxzOworICAgIFBTSF9IaW50X1RhYmxlUmVjICBoaW50X3RhYmxlc1syXTsKKworICAgIEZUX0Jvb2wgICAgICAgICAgICB2ZXJ0aWNhbDsKKyAgICBGVF9JbnQgICAgICAgICAgICAgbWFqb3JfZGlyOworICAgIEZUX0ludCAgICAgICAgICAgICBtaW5vcl9kaXI7CisKKyAgICBGVF9Cb29sICAgICAgICAgICAgZG9faG9yel9oaW50czsKKyAgICBGVF9Cb29sICAgICAgICAgICAgZG9fdmVydF9oaW50czsKKyAgICBGVF9Cb29sICAgICAgICAgICAgZG9faG9yel9zbmFwcGluZzsKKyAgICBGVF9Cb29sICAgICAgICAgICAgZG9fdmVydF9zbmFwcGluZzsKKyAgICBGVF9Cb29sICAgICAgICAgICAgZG9fc3RlbV9hZGp1c3Q7CisKKyAgfSBQU0hfR2x5cGhSZWMsICpQU0hfR2x5cGg7CisKKworI2lmZGVmIERFQlVHX0hJTlRFUgorICBleHRlcm4gUFNIX0hpbnRfVGFibGUgIHBzX2RlYnVnX2hpbnRfdGFibGU7CisKKyAgdHlwZWRlZiB2b2lkCisgICgqUFNIX0hpbnRGdW5jKSggUFNIX0hpbnQgIGhpbnQsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgIHZlcnRpY2FsICk7CisKKyAgZXh0ZXJuIFBTSF9IaW50RnVuYyAgICBwc19kZWJ1Z19oaW50X2Z1bmM7CisKKyAgZXh0ZXJuIFBTSF9HbHlwaCAgICAgICBwc19kZWJ1Z19nbHlwaDsKKyNlbmRpZgorCisKKyAgZXh0ZXJuIEZUX0Vycm9yCisgIHBzX2hpbnRzX2FwcGx5KCBQU19IaW50cyAgICAgICAgcHNfaGludHMsCisgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzICAgICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIGhpbnRfbW9kZSApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19QU0hBTEdPX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hnbG9iLmMgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaGdsb2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzIzYjcxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKQEAgLTAsMCArMSw3OTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzaGdsb2IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQb3N0U2NyaXB0IGhpbnRlciBnbG9iYWwgaGludGluZyBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAqLworLyogICAgSW5zcGlyZWQgYnkgdGhlIG5ldyBhdXRvLWhpbnRlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLworLyogIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSAicHNoZ2xvYi5oIgorCisjaWZkZWYgREVCVUdfSElOVEVSCisgIFBTSF9HbG9iYWxzICBwc19kZWJ1Z19nbG9iYWxzID0gTlVMTDsKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBTVEFOREFSRCBXSURUSFMgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBzY2FsZSB0aGUgd2lkdGhzL2hlaWdodHMgdGFibGUgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNoX2dsb2JhbHNfc2NhbGVfd2lkdGhzKCBQU0hfR2xvYmFscyAgZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZGlyZWN0aW9uICkKKyAgeworICAgIFBTSF9EaW1lbnNpb24gIGRpbSAgID0gJmdsb2JhbHMtPmRpbWVuc2lvbltkaXJlY3Rpb25dOworICAgIFBTSF9XaWR0aHMgICAgIHN0ZHcgID0gJmRpbS0+c3RkdzsKKyAgICBGVF9VSW50ICAgICAgICBjb3VudCA9IHN0ZHctPmNvdW50OworICAgIFBTSF9XaWR0aCAgICAgIHdpZHRoID0gc3Rkdy0+d2lkdGhzOworICAgIFBTSF9XaWR0aCAgICAgIHN0YW5kID0gd2lkdGg7ICAgICAgICAgICAgICAgLyogc3RhbmRhcmQgd2lkdGgvaGVpZ2h0ICovCisgICAgRlRfRml4ZWQgICAgICAgc2NhbGUgPSBkaW0tPnNjYWxlX211bHQ7CisKKworICAgIGlmICggY291bnQgPiAwICkKKyAgICB7CisgICAgICB3aWR0aC0+Y3VyID0gRlRfTXVsRml4KCB3aWR0aC0+b3JnLCBzY2FsZSApOworICAgICAgd2lkdGgtPmZpdCA9IEZUX1BJWF9ST1VORCggd2lkdGgtPmN1ciApOworCisgICAgICB3aWR0aCsrOworICAgICAgY291bnQtLTsKKworICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHdpZHRoKysgKQorICAgICAgeworICAgICAgICBGVF9Qb3MgIHcsIGRpc3Q7CisKKworICAgICAgICB3ICAgID0gRlRfTXVsRml4KCB3aWR0aC0+b3JnLCBzY2FsZSApOworICAgICAgICBkaXN0ID0gdyAtIHN0YW5kLT5jdXI7CisKKyAgICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgICAgZGlzdCA9IC1kaXN0OworCisgICAgICAgIGlmICggZGlzdCA8IDEyOCApCisgICAgICAgICAgdyA9IHN0YW5kLT5jdXI7CisKKyAgICAgICAgd2lkdGgtPmN1ciA9IHc7CisgICAgICAgIHdpZHRoLT5maXQgPSBGVF9QSVhfUk9VTkQoIHcgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisjaWYgMAorCisgIC8qIG9yZ193aWR0aCBpcyBpcyBmb250IHVuaXRzLCByZXN1bHQgaW4gZGV2aWNlIHBpeGVscywgMjYuNiBmb3JtYXQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9Qb3MgKQorICBwc2hfZGltZW5zaW9uX3NuYXBfd2lkdGgoIFBTSF9EaW1lbnNpb24gIGRpbWVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBvcmdfd2lkdGggKQorICB7CisgICAgRlRfVUludCAgbjsKKyAgICBGVF9Qb3MgICB3aWR0aCAgICAgPSBGVF9NdWxGaXgoIG9yZ193aWR0aCwgZGltZW5zaW9uLT5zY2FsZV9tdWx0ICk7CisgICAgRlRfUG9zICAgYmVzdCAgICAgID0gNjQgKyAzMiArIDI7CisgICAgRlRfUG9zICAgcmVmZXJlbmNlID0gd2lkdGg7CisKKworICAgIGZvciAoIG4gPSAwOyBuIDwgZGltZW5zaW9uLT5zdGR3LmNvdW50OyBuKysgKQorICAgIHsKKyAgICAgIEZUX1BvcyAgdzsKKyAgICAgIEZUX1BvcyAgZGlzdDsKKworCisgICAgICB3ID0gZGltZW5zaW9uLT5zdGR3LndpZHRoc1tuXS5jdXI7CisgICAgICBkaXN0ID0gd2lkdGggLSB3OworICAgICAgaWYgKCBkaXN0IDwgMCApCisgICAgICAgIGRpc3QgPSAtZGlzdDsKKyAgICAgIGlmICggZGlzdCA8IGJlc3QgKQorICAgICAgeworICAgICAgICBiZXN0ICAgICAgPSBkaXN0OworICAgICAgICByZWZlcmVuY2UgPSB3OworICAgICAgfQorICAgIH0KKworICAgIGlmICggd2lkdGggPj0gcmVmZXJlbmNlICkKKyAgICB7CisgICAgICB3aWR0aCAtPSAweDIxOworICAgICAgaWYgKCB3aWR0aCA8IHJlZmVyZW5jZSApCisgICAgICAgIHdpZHRoID0gcmVmZXJlbmNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgd2lkdGggKz0gMHgyMTsKKyAgICAgIGlmICggd2lkdGggPiByZWZlcmVuY2UgKQorICAgICAgICB3aWR0aCA9IHJlZmVyZW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gd2lkdGg7CisgIH0KKworI2VuZGlmIC8qIDAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgQkxVRSBaT05FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIHBzaF9ibHVlc19zZXRfem9uZXNfMCggUFNIX0JsdWVzICAgICAgIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgaXNfb3RoZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICByZWFkX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgICAgICByZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTSF9CbHVlX1RhYmxlICB0b3BfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgUFNIX0JsdWVfVGFibGUgIGJvdF90YWJsZSApCisgIHsKKyAgICBGVF9VSW50ICBjb3VudF90b3AgPSB0b3BfdGFibGUtPmNvdW50OworICAgIEZUX1VJbnQgIGNvdW50X2JvdCA9IGJvdF90YWJsZS0+Y291bnQ7CisgICAgRlRfQm9vbCAgZmlyc3QgICAgID0gMTsKKworICAgIEZUX1VOVVNFRCggdGFyZ2V0ICk7CisKKworICAgIGZvciAoIDsgcmVhZF9jb3VudCA+IDE7IHJlYWRfY291bnQgLT0gMiApCisgICAgeworICAgICAgRlRfSW50ICAgICAgICAgcmVmZXJlbmNlLCBkZWx0YTsKKyAgICAgIEZUX1VJbnQgICAgICAgIGNvdW50OworICAgICAgUFNIX0JsdWVfWm9uZSAgem9uZXMsIHpvbmU7CisgICAgICBGVF9Cb29sICAgICAgICB0b3A7CisKKworICAgICAgLyogcmVhZCBibHVlIHpvbmUgZW50cnksIGFuZCBzZWxlY3QgdGFyZ2V0IHRvcC9ib3R0b20gem9uZSAqLworICAgICAgdG9wID0gMDsKKyAgICAgIGlmICggZmlyc3QgfHwgaXNfb3RoZXJzICkKKyAgICAgIHsKKyAgICAgICAgcmVmZXJlbmNlID0gcmVhZFsxXTsKKyAgICAgICAgZGVsdGEgICAgID0gcmVhZFswXSAtIHJlZmVyZW5jZTsKKworICAgICAgICB6b25lcyA9IGJvdF90YWJsZS0+em9uZXM7CisgICAgICAgIGNvdW50ID0gY291bnRfYm90OworICAgICAgICBmaXJzdCA9IDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJlZmVyZW5jZSA9IHJlYWRbMF07CisgICAgICAgIGRlbHRhICAgICA9IHJlYWRbMV0gLSByZWZlcmVuY2U7CisKKyAgICAgICAgem9uZXMgPSB0b3BfdGFibGUtPnpvbmVzOworICAgICAgICBjb3VudCA9IGNvdW50X3RvcDsKKyAgICAgICAgdG9wICAgPSAxOworICAgICAgfQorCisgICAgICAvKiBpbnNlcnQgaW50byBzb3J0ZWQgdGFibGUgKi8KKyAgICAgIHpvbmUgPSB6b25lczsKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCB6b25lKysgKQorICAgICAgeworICAgICAgICBpZiAoIHJlZmVyZW5jZSA8IHpvbmUtPm9yZ19yZWYgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICggcmVmZXJlbmNlID09IHpvbmUtPm9yZ19yZWYgKQorICAgICAgICB7CisgICAgICAgICAgRlRfSW50ICBkZWx0YTAgPSB6b25lLT5vcmdfZGVsdGE7CisKKworICAgICAgICAgIC8qIHdlIGhhdmUgdHdvIHpvbmVzIG9uIHRoZSBzYW1lIHJlZmVyZW5jZSBwb3NpdGlvbiAtLSAqLworICAgICAgICAgIC8qIG9ubHkga2VlcCB0aGUgbGFyZ2VzdCBvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGRlbHRhIDwgZGVsdGEwICkKKyAgICAgICAgICAgICAgem9uZS0+b3JnX2RlbHRhID0gZGVsdGE7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGRlbHRhID4gZGVsdGEwICkKKyAgICAgICAgICAgICAgem9uZS0+b3JnX2RlbHRhID0gZGVsdGE7CisgICAgICAgICAgfQorICAgICAgICAgIGdvdG8gU2tpcDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICAgIHpvbmVbY291bnRdID0gem9uZVtjb3VudC0xXTsKKworICAgICAgem9uZS0+b3JnX3JlZiAgID0gcmVmZXJlbmNlOworICAgICAgem9uZS0+b3JnX2RlbHRhID0gZGVsdGE7CisKKyAgICAgIGlmICggdG9wICkKKyAgICAgICAgY291bnRfdG9wKys7CisgICAgICBlbHNlCisgICAgICAgIGNvdW50X2JvdCsrOworCisgICAgU2tpcDoKKyAgICAgIHJlYWQgKz0gMjsKKyAgICB9CisKKyAgICB0b3BfdGFibGUtPmNvdW50ID0gY291bnRfdG9wOworICAgIGJvdF90YWJsZS0+Y291bnQgPSBjb3VudF9ib3Q7CisgIH0KKworCisgIC8qIFJlLXJlYWQgYmx1ZSB6b25lcyBmcm9tIHRoZSBvcmlnaW5hbCBmb250cyBhbmQgc3RvcmUgdGhlbSBpbnRvIG91dCAqLworICAvKiBwcml2YXRlIHN0cnVjdHVyZS4gIFRoaXMgZnVuY3Rpb24gcmUtb3JkZXJzLCBzYW5pdGl6ZXMgYW5kICAgICAgICAgKi8KKyAgLyogZnV6ei1leHBhbmRzIHRoZSB6b25lcyBhcyB3ZWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIHBzaF9ibHVlc19zZXRfem9uZXMoIFBTSF9CbHVlcyAgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9TaG9ydCogIGJsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNvdW50X290aGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU2hvcnQqICBvdGhlcl9ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBmdXp6LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGZhbWlseSApCisgIHsKKyAgICBQU0hfQmx1ZV9UYWJsZSAgdG9wX3RhYmxlLCBib3RfdGFibGU7CisgICAgRlRfVUludCAgICAgICAgIGNvdW50X3RvcCwgY291bnRfYm90OworCisKKyAgICBpZiAoIGZhbWlseSApCisgICAgeworICAgICAgdG9wX3RhYmxlID0gJnRhcmdldC0+ZmFtaWx5X3RvcDsKKyAgICAgIGJvdF90YWJsZSA9ICZ0YXJnZXQtPmZhbWlseV9ib3R0b207CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0b3BfdGFibGUgPSAmdGFyZ2V0LT5ub3JtYWxfdG9wOworICAgICAgYm90X3RhYmxlID0gJnRhcmdldC0+bm9ybWFsX2JvdHRvbTsKKyAgICB9CisKKyAgICAvKiByZWFkIHRoZSBpbnB1dCBibHVlIHpvbmVzLCBhbmQgYnVpbGQgdHdvIHNvcnRlZCB0YWJsZXMgICovCisgICAgLyogKG9uZSBmb3IgdGhlIHRvcCB6b25lcywgdGhlIG90aGVyIGZvciB0aGUgYm90dG9tIHpvbmVzKSAqLworICAgIHRvcF90YWJsZS0+Y291bnQgPSAwOworICAgIGJvdF90YWJsZS0+Y291bnQgPSAwOworCisgICAgLyogZmlyc3QsIHRoZSBibHVlcyAqLworICAgIHBzaF9ibHVlc19zZXRfem9uZXNfMCggdGFyZ2V0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIGJsdWVzLCB0b3BfdGFibGUsIGJvdF90YWJsZSApOworICAgIHBzaF9ibHVlc19zZXRfem9uZXNfMCggdGFyZ2V0LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3RoZXJzLCBvdGhlcl9ibHVlcywgdG9wX3RhYmxlLCBib3RfdGFibGUgKTsKKworICAgIGNvdW50X3RvcCA9IHRvcF90YWJsZS0+Y291bnQ7CisgICAgY291bnRfYm90ID0gYm90X3RhYmxlLT5jb3VudDsKKworICAgIC8qIHNhbml0aXplIHRvcCB0YWJsZSAqLworICAgIGlmICggY291bnRfdG9wID4gMCApCisgICAgeworICAgICAgUFNIX0JsdWVfWm9uZSAgem9uZSA9IHRvcF90YWJsZS0+em9uZXM7CisKKworICAgICAgZm9yICggY291bnQgPSBjb3VudF90b3A7IGNvdW50ID4gMDsgY291bnQtLSwgem9uZSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBkZWx0YTsKKworCisgICAgICAgIGlmICggY291bnQgPiAxICkKKyAgICAgICAgeworICAgICAgICAgIGRlbHRhID0gem9uZVsxXS5vcmdfcmVmIC0gem9uZVswXS5vcmdfcmVmOworICAgICAgICAgIGlmICggem9uZS0+b3JnX2RlbHRhID4gZGVsdGEgKQorICAgICAgICAgICAgem9uZS0+b3JnX2RlbHRhID0gZGVsdGE7CisgICAgICAgIH0KKworICAgICAgICB6b25lLT5vcmdfYm90dG9tID0gem9uZS0+b3JnX3JlZjsKKyAgICAgICAgem9uZS0+b3JnX3RvcCAgICA9IHpvbmUtPm9yZ19kZWx0YSArIHpvbmUtPm9yZ19yZWY7CisgICAgICB9CisgICAgfQorCisgICAgLyogc2FuaXRpemUgYm90dG9tIHRhYmxlICovCisgICAgaWYgKCBjb3VudF9ib3QgPiAwICkKKyAgICB7CisgICAgICBQU0hfQmx1ZV9ab25lICB6b25lID0gYm90X3RhYmxlLT56b25lczsKKworCisgICAgICBmb3IgKCBjb3VudCA9IGNvdW50X2JvdDsgY291bnQgPiAwOyBjb3VudC0tLCB6b25lKysgKQorICAgICAgeworICAgICAgICBGVF9JbnQgIGRlbHRhOworCisKKyAgICAgICAgaWYgKCBjb3VudCA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgZGVsdGEgPSB6b25lWzBdLm9yZ19yZWYgLSB6b25lWzFdLm9yZ19yZWY7CisgICAgICAgICAgaWYgKCB6b25lLT5vcmdfZGVsdGEgPCBkZWx0YSApCisgICAgICAgICAgICB6b25lLT5vcmdfZGVsdGEgPSBkZWx0YTsKKyAgICAgICAgfQorCisgICAgICAgIHpvbmUtPm9yZ190b3AgICAgPSB6b25lLT5vcmdfcmVmOworICAgICAgICB6b25lLT5vcmdfYm90dG9tID0gem9uZS0+b3JnX2RlbHRhICsgem9uZS0+b3JnX3JlZjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBleHBhbmQgdG9wIGFuZCBib3R0b20gdGFibGVzIHdpdGggYmx1ZSBmdXp6ICovCisgICAgeworICAgICAgRlRfSW50ICAgICAgICAgZGltLCB0b3AsIGJvdCwgZGVsdGE7CisgICAgICBQU0hfQmx1ZV9ab25lICB6b25lOworCisKKyAgICAgIHpvbmUgID0gdG9wX3RhYmxlLT56b25lczsKKyAgICAgIGNvdW50ID0gY291bnRfdG9wOworCisgICAgICBmb3IgKCBkaW0gPSAxOyBkaW0gPj0gMDsgZGltLS0gKQorICAgICAgeworICAgICAgICBpZiAoIGNvdW50ID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBleHBhbmQgdGhlIGJvdHRvbSBvZiB0aGUgbG93ZXN0IHpvbmUgbm9ybWFsbHkgKi8KKyAgICAgICAgICB6b25lLT5vcmdfYm90dG9tIC09IGZ1eno7CisKKyAgICAgICAgICAvKiBleHBhbmQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGludGVybWVkaWF0ZSB6b25lczsgICAgKi8KKyAgICAgICAgICAvKiBjaGVja2luZyB0aGF0IHRoZSBpbnRlcnZhbCBpcyBzbWFsbGVyIHRoYW4gdGhlIGZ1enogKi8KKyAgICAgICAgICB0b3AgPSB6b25lLT5vcmdfdG9wOworCisgICAgICAgICAgZm9yICggY291bnQtLTsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBib3QgICA9IHpvbmVbMV0ub3JnX2JvdHRvbTsKKyAgICAgICAgICAgIGRlbHRhID0gYm90IC0gdG9wOworCisgICAgICAgICAgICBpZiAoIGRlbHRhIDwgMiAqIGZ1enogKQorICAgICAgICAgICAgICB6b25lWzBdLm9yZ190b3AgPSB6b25lWzFdLm9yZ19ib3R0b20gPSB0b3AgKyBkZWx0YSAvIDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHpvbmVbMF0ub3JnX3RvcCAgICA9IHRvcCArIGZ1eno7CisgICAgICAgICAgICAgIHpvbmVbMV0ub3JnX2JvdHRvbSA9IGJvdCAtIGZ1eno7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUrKzsKKyAgICAgICAgICAgIHRvcCA9IHpvbmUtPm9yZ190b3A7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZXhwYW5kIHRoZSB0b3Agb2YgdGhlIGhpZ2hlc3Qgem9uZSBub3JtYWxseSAqLworICAgICAgICAgIHpvbmUtPm9yZ190b3AgPSB0b3AgKyBmdXp6OworICAgICAgICB9CisgICAgICAgIHpvbmUgID0gYm90X3RhYmxlLT56b25lczsKKyAgICAgICAgY291bnQgPSBjb3VudF9ib3Q7CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKiByZXNldCB0aGUgYmx1ZXMgdGFibGUgd2hlbiB0aGUgZGV2aWNlIHRyYW5zZm9ybSBjaGFuZ2VzICovCisgIHN0YXRpYyB2b2lkCisgIHBzaF9ibHVlc19zY2FsZV96b25lcyggUFNIX0JsdWVzICBibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgIHNjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgZGVsdGEgKQorICB7CisgICAgRlRfVUludCAgICAgICAgIGNvdW50OworICAgIEZUX1VJbnQgICAgICAgICBudW07CisgICAgUFNIX0JsdWVfVGFibGUgIHRhYmxlID0gTlVMTDsKKworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3VwcHJlc3Mgb3ZlcnNob290cyBvciAgICAqLworICAgIC8qIG5vdC4gIFdlIHNpbXBseSBuZWVkIHRvIGNvbXBhcmUgdGhlIHZlcnRpY2FsIHNjYWxlICAgICAqLworICAgIC8qIHBhcmFtZXRlciB0byB0aGUgcmF3IGJsdWVzY2FsZSB2YWx1ZS4gIEhlcmUgaXMgd2h5OiAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgV2UgbmVlZCB0byBzdXBwcmVzcyBvdmVyc2hvb3RzIGZvciBhbGwgcG9pbnRzaXplcy4gICAqLworICAgIC8qICAgQXQgMzAwZHBpIHRoYXQgc2F0aXNmaWVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgcG9pbnRzaXplIDwgMjQwKmJsdWVzY2FsZSArIDAuNDkgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgVGhpcyBjb3JyZXNwb25kcyB0bzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgcGl4ZWxzaXplIDwgMTAwMCpibHVlc2NhbGUgKyA0OS8yNCAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgc2NhbGUqRU1fU2l6ZSA8IDEwMDAqYmx1ZXNjYWxlICsgNDkvMjQgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgSG93ZXZlciwgZm9yIG5vcm1hbCBUeXBlIDEgZm9udHMsIEVNX1NpemUgaXMgMTAwMCEgICAqLworICAgIC8qICAgV2UgdGh1cyBvbmx5IGNoZWNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgc2NhbGUgPCBibHVlc2NhbGUgKyA0OS8yNDAwMCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgd2hpY2ggd2Ugc2hvcnRlbiB0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgInNjYWxlIDwgYmx1ZXNjYWxlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIE5vdGUgdGhhdCBgYmx1ZV9zY2FsZScgaXMgc3RvcmVkIDEwMDAgdGltZXMgaXRzIHJlYWwgICAqLworICAgIC8qIHZhbHVlLCBhbmQgdGhhdCBgc2NhbGUnIGNvbnZlcnRzIGZyb20gZm9udCB1bml0cyB0byAgICAqLworICAgIC8qIGZyYWN0aW9uYWwgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogMTAwMCAvIDY0ID0gMTI1IC8gOCAqLworICAgIGlmICggc2NhbGUgPj0gMHgyMEM0OUJBTCApCisgICAgICBibHVlcy0+bm9fb3ZlcnNob290cyA9IEZUX0JPT0woIHNjYWxlIDwgYmx1ZXMtPmJsdWVfc2NhbGUgKiA4IC8gMTI1ICk7CisgICAgZWxzZQorICAgICAgYmx1ZXMtPm5vX292ZXJzaG9vdHMgPSBGVF9CT09MKCBzY2FsZSAqIDEyNSA8IGJsdWVzLT5ibHVlX3NjYWxlICogOCApOworCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogIFRoZSBibHVlIHRocmVzaG9sZCBpcyB0aGUgZm9udCB1bml0cyBkaXN0YW5jZSB1bmRlciAgICovCisgICAgLyogIHdoaWNoIG92ZXJzaG9vdHMgYXJlIHN1cHByZXNzZWQgZHVlIHRvIHRoZSBCbHVlU2hpZnQgICovCisgICAgLyogIGV2ZW4gaWYgdGhlIHNjYWxlIGlzIGdyZWF0ZXIgdGhhbiBCbHVlU2NhbGUuICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogIEl0IGlzIHRoZSBzbWFsbGVzdCBkaXN0YW5jZSBzdWNoIHRoYXQgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgZGlzdCA8PSBCbHVlU2hpZnQgJiYgZGlzdCpzY2FsZSA8PSAwLjUgcGl4ZWxzICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgeworICAgICAgRlRfSW50ICB0aHJlc2hvbGQgPSBibHVlcy0+Ymx1ZV9zaGlmdDsKKworCisgICAgICB3aGlsZSAoIHRocmVzaG9sZCA+IDAgJiYgRlRfTXVsRml4KCB0aHJlc2hvbGQsIHNjYWxlICkgPiAzMiApCisgICAgICAgIHRocmVzaG9sZC0tOworCisgICAgICBibHVlcy0+Ymx1ZV90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisgICAgfQorCisgICAgZm9yICggbnVtID0gMDsgbnVtIDwgNDsgbnVtKysgKQorICAgIHsKKyAgICAgIFBTSF9CbHVlX1pvbmUgIHpvbmU7CisKKworICAgICAgc3dpdGNoICggbnVtICkKKyAgICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgdGFibGUgPSAmYmx1ZXMtPm5vcm1hbF90b3A7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICB0YWJsZSA9ICZibHVlcy0+bm9ybWFsX2JvdHRvbTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDI6CisgICAgICAgIHRhYmxlID0gJmJsdWVzLT5mYW1pbHlfdG9wOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHRhYmxlID0gJmJsdWVzLT5mYW1pbHlfYm90dG9tOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgem9uZSAgPSB0YWJsZS0+em9uZXM7CisgICAgICBjb3VudCA9IHRhYmxlLT5jb3VudDsKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCB6b25lKysgKQorICAgICAgeworICAgICAgICB6b25lLT5jdXJfdG9wICAgID0gRlRfTXVsRml4KCB6b25lLT5vcmdfdG9wLCAgICBzY2FsZSApICsgZGVsdGE7CisgICAgICAgIHpvbmUtPmN1cl9ib3R0b20gPSBGVF9NdWxGaXgoIHpvbmUtPm9yZ19ib3R0b20sIHNjYWxlICkgKyBkZWx0YTsKKyAgICAgICAgem9uZS0+Y3VyX3JlZiAgICA9IEZUX011bEZpeCggem9uZS0+b3JnX3JlZiwgICAgc2NhbGUgKSArIGRlbHRhOworICAgICAgICB6b25lLT5jdXJfZGVsdGEgID0gRlRfTXVsRml4KCB6b25lLT5vcmdfZGVsdGEsICBzY2FsZSApOworCisgICAgICAgIC8qIHJvdW5kIHNjYWxlZCByZWZlcmVuY2UgcG9zaXRpb24gKi8KKyAgICAgICAgem9uZS0+Y3VyX3JlZiA9IEZUX1BJWF9ST1VORCggem9uZS0+Y3VyX3JlZiApOworCisjaWYgMAorICAgICAgICBpZiAoIHpvbmUtPmN1cl9yZWYgPiB6b25lLT5jdXJfdG9wICkKKyAgICAgICAgICB6b25lLT5jdXJfcmVmIC09IDY0OworICAgICAgICBlbHNlIGlmICggem9uZS0+Y3VyX3JlZiA8IHpvbmUtPmN1cl9ib3R0b20gKQorICAgICAgICAgIHpvbmUtPmN1cl9yZWYgKz0gNjQ7CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIHRoZSBmYW1pbGllcyBub3cgKi8KKworICAgIGZvciAoIG51bSA9IDA7IG51bSA8IDI7IG51bSsrICkKKyAgICB7CisgICAgICBQU0hfQmx1ZV9ab25lICAgem9uZTEsIHpvbmUyOworICAgICAgRlRfVUludCAgICAgICAgIGNvdW50MSwgY291bnQyOworICAgICAgUFNIX0JsdWVfVGFibGUgIG5vcm1hbCwgZmFtaWx5OworCisKKyAgICAgIHN3aXRjaCAoIG51bSApCisgICAgICB7CisgICAgICBjYXNlIDA6CisgICAgICAgIG5vcm1hbCA9ICZibHVlcy0+bm9ybWFsX3RvcDsKKyAgICAgICAgZmFtaWx5ID0gJmJsdWVzLT5mYW1pbHlfdG9wOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbm9ybWFsID0gJmJsdWVzLT5ub3JtYWxfYm90dG9tOworICAgICAgICBmYW1pbHkgPSAmYmx1ZXMtPmZhbWlseV9ib3R0b207CisgICAgICB9CisKKyAgICAgIHpvbmUxICA9IG5vcm1hbC0+em9uZXM7CisgICAgICBjb3VudDEgPSBub3JtYWwtPmNvdW50OworCisgICAgICBmb3IgKCA7IGNvdW50MSA+IDA7IGNvdW50MS0tLCB6b25lMSsrICkKKyAgICAgIHsKKyAgICAgICAgLyogdHJ5IHRvIGZpbmQgYSBmYW1pbHkgem9uZSB3aG9zZSByZWZlcmVuY2UgcG9zaXRpb24gaXMgbGVzcyAqLworICAgICAgICAvKiB0aGFuIDEgcGl4ZWwgZmFyIGZyb20gdGhlIGN1cnJlbnQgem9uZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHpvbmUyICA9IGZhbWlseS0+em9uZXM7CisgICAgICAgIGNvdW50MiA9IGZhbWlseS0+Y291bnQ7CisKKyAgICAgICAgZm9yICggOyBjb3VudDIgPiAwOyBjb3VudDItLSwgem9uZTIrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Qb3MgIERlbHRhOworCisKKyAgICAgICAgICBEZWx0YSA9IHpvbmUxLT5vcmdfcmVmIC0gem9uZTItPm9yZ19yZWY7CisgICAgICAgICAgaWYgKCBEZWx0YSA8IDAgKQorICAgICAgICAgICAgRGVsdGEgPSAtRGVsdGE7CisKKyAgICAgICAgICBpZiAoIEZUX011bEZpeCggRGVsdGEsIHNjYWxlICkgPCA2NCApCisgICAgICAgICAgeworICAgICAgICAgICAgem9uZTEtPmN1cl90b3AgICAgPSB6b25lMi0+Y3VyX3RvcDsKKyAgICAgICAgICAgIHpvbmUxLT5jdXJfYm90dG9tID0gem9uZTItPmN1cl9ib3R0b207CisgICAgICAgICAgICB6b25lMS0+Y3VyX3JlZiAgICA9IHpvbmUyLT5jdXJfcmVmOworICAgICAgICAgICAgem9uZTEtPmN1cl9kZWx0YSAgPSB6b25lMi0+Y3VyX2RlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKiBjYWxjdWxhdGUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGdpdmVuIGJsdWUgem9uZXMgKi8KKyAgc3RhdGljIEZUX1Nob3J0CisgIHBzaF9jYWxjX21heF9oZWlnaHQoIEZUX1VJbnQgICAgICAgICAgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TaG9ydCogIHZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU2hvcnQgICAgICAgICBjdXJfbWF4ICkKKyAgeworICAgIEZUX1VJbnQgIGNvdW50OworCisKKyAgICBmb3IgKCBjb3VudCA9IDA7IGNvdW50IDwgbnVtOyBjb3VudCArPSAyICkKKyAgICB7CisgICAgICBGVF9TaG9ydCAgY3VyX2hlaWdodCA9IHZhbHVlc1tjb3VudCArIDFdIC0gdmFsdWVzW2NvdW50XTsKKworCisgICAgICBpZiAoIGN1cl9oZWlnaHQgPiBjdXJfbWF4ICkKKyAgICAgICAgY3VyX21heCA9IGN1cl9oZWlnaHQ7CisgICAgfQorCisgICAgcmV0dXJuIGN1cl9tYXg7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHBzaF9ibHVlc19zbmFwX3N0ZW0oIFBTSF9CbHVlcyAgICAgIGJsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBzdGVtX3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgc3RlbV9ib3QsCisgICAgICAgICAgICAgICAgICAgICAgIFBTSF9BbGlnbm1lbnQgIGFsaWdubWVudCApCisgIHsKKyAgICBQU0hfQmx1ZV9UYWJsZSAgdGFibGU7CisgICAgRlRfVUludCAgICAgICAgIGNvdW50OworICAgIEZUX1BvcyAgICAgICAgICBkZWx0YTsKKyAgICBQU0hfQmx1ZV9ab25lICAgem9uZTsKKyAgICBGVF9JbnQgICAgICAgICAgbm9fc2hvb3RzOworCisKKyAgICBhbGlnbm1lbnQtPmFsaWduID0gUFNIX0JMVUVfQUxJR05fTk9ORTsKKworICAgIG5vX3Nob290cyA9IGJsdWVzLT5ub19vdmVyc2hvb3RzOworCisgICAgLyogbG9vayB1cCBzdGVtIHRvcCBpbiB0b3Agem9uZXMgdGFibGUgKi8KKyAgICB0YWJsZSA9ICZibHVlcy0+bm9ybWFsX3RvcDsKKyAgICBjb3VudCA9IHRhYmxlLT5jb3VudDsKKyAgICB6b25lICA9IHRhYmxlLT56b25lczsKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCB6b25lKysgKQorICAgIHsKKyAgICAgIGRlbHRhID0gc3RlbV90b3AgLSB6b25lLT5vcmdfYm90dG9tOworICAgICAgaWYgKCBkZWx0YSA8IC1ibHVlcy0+Ymx1ZV9mdXp6ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggc3RlbV90b3AgPD0gem9uZS0+b3JnX3RvcCArIGJsdWVzLT5ibHVlX2Z1enogKQorICAgICAgeworICAgICAgICBpZiAoIG5vX3Nob290cyB8fCBkZWx0YSA8PSBibHVlcy0+Ymx1ZV90aHJlc2hvbGQgKQorICAgICAgICB7CisgICAgICAgICAgYWxpZ25tZW50LT5hbGlnbiAgICB8PSBQU0hfQkxVRV9BTElHTl9UT1A7CisgICAgICAgICAgYWxpZ25tZW50LT5hbGlnbl90b3AgPSB6b25lLT5jdXJfcmVmOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIC8qIGxvb2sgdXAgc3RlbSBib3R0b20gaW4gYm90dG9tIHpvbmVzIHRhYmxlICovCisgICAgdGFibGUgPSAmYmx1ZXMtPm5vcm1hbF9ib3R0b207CisgICAgY291bnQgPSB0YWJsZS0+Y291bnQ7CisgICAgem9uZSAgPSB0YWJsZS0+em9uZXMgKyBjb3VudC0xOworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHpvbmUtLSApCisgICAgeworICAgICAgZGVsdGEgPSB6b25lLT5vcmdfdG9wIC0gc3RlbV9ib3Q7CisgICAgICBpZiAoIGRlbHRhIDwgLWJsdWVzLT5ibHVlX2Z1enogKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBzdGVtX2JvdCA+PSB6b25lLT5vcmdfYm90dG9tIC0gYmx1ZXMtPmJsdWVfZnV6eiApCisgICAgICB7CisgICAgICAgIGlmICggbm9fc2hvb3RzIHx8IGRlbHRhIDwgYmx1ZXMtPmJsdWVfdGhyZXNob2xkICkKKyAgICAgICAgeworICAgICAgICAgIGFsaWdubWVudC0+YWxpZ24gICAgfD0gUFNIX0JMVUVfQUxJR05fQk9UOworICAgICAgICAgIGFsaWdubWVudC0+YWxpZ25fYm90ID0gem9uZS0+Y3VyX3JlZjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTCBISU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIHBzaF9nbG9iYWxzX2Rlc3Ryb3koIFBTSF9HbG9iYWxzICBnbG9iYWxzICkKKyAgeworICAgIGlmICggZ2xvYmFscyApCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgICAgbWVtb3J5ID0gZ2xvYmFscy0+bWVtb3J5OworICAgICAgZ2xvYmFscy0+ZGltZW5zaW9uWzBdLnN0ZHcuY291bnQgPSAwOworICAgICAgZ2xvYmFscy0+ZGltZW5zaW9uWzFdLnN0ZHcuY291bnQgPSAwOworCisgICAgICBnbG9iYWxzLT5ibHVlcy5ub3JtYWxfdG9wLmNvdW50ICAgID0gMDsKKyAgICAgIGdsb2JhbHMtPmJsdWVzLm5vcm1hbF9ib3R0b20uY291bnQgPSAwOworICAgICAgZ2xvYmFscy0+Ymx1ZXMuZmFtaWx5X3RvcC5jb3VudCAgICA9IDA7CisgICAgICBnbG9iYWxzLT5ibHVlcy5mYW1pbHlfYm90dG9tLmNvdW50ID0gMDsKKworICAgICAgRlRfRlJFRSggZ2xvYmFscyApOworCisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgICBwc19kZWJ1Z19nbG9iYWxzID0gTlVMTDsKKyNlbmRpZgorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzaF9nbG9iYWxzX25ldyggRlRfTWVtb3J5ICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgVDFfUHJpdmF0ZSogICBwcml2LAorICAgICAgICAgICAgICAgICAgIFBTSF9HbG9iYWxzICAqYWdsb2JhbHMgKQorICB7CisgICAgUFNIX0dsb2JhbHMgIGdsb2JhbHMgPSBOVUxMOworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKworCisgICAgaWYgKCAhRlRfTkVXKCBnbG9iYWxzICkgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICAgY291bnQ7CisgICAgICBGVF9TaG9ydCogIHJlYWQ7CisKKworICAgICAgZ2xvYmFscy0+bWVtb3J5ID0gbWVtb3J5OworCisgICAgICAvKiBjb3B5IHN0YW5kYXJkIHdpZHRocyAqLworICAgICAgeworICAgICAgICBQU0hfRGltZW5zaW9uICBkaW0gICA9ICZnbG9iYWxzLT5kaW1lbnNpb25bMV07CisgICAgICAgIFBTSF9XaWR0aCAgICAgIHdyaXRlID0gZGltLT5zdGR3LndpZHRoczsKKworCisgICAgICAgIHdyaXRlLT5vcmcgPSBwcml2LT5zdGFuZGFyZF93aWR0aFswXTsKKyAgICAgICAgd3JpdGUrKzsKKworICAgICAgICByZWFkID0gcHJpdi0+c25hcF93aWR0aHM7CisgICAgICAgIGZvciAoIGNvdW50ID0gcHJpdi0+bnVtX3NuYXBfd2lkdGhzOyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgICB7CisgICAgICAgICAgd3JpdGUtPm9yZyA9ICpyZWFkOworICAgICAgICAgIHdyaXRlKys7CisgICAgICAgICAgcmVhZCsrOworICAgICAgICB9CisKKyAgICAgICAgZGltLT5zdGR3LmNvdW50ID0gcHJpdi0+bnVtX3NuYXBfd2lkdGhzICsgMTsKKyAgICAgIH0KKworICAgICAgLyogY29weSBzdGFuZGFyZCBoZWlnaHRzICovCisgICAgICB7CisgICAgICAgIFBTSF9EaW1lbnNpb24gIGRpbSA9ICZnbG9iYWxzLT5kaW1lbnNpb25bMF07CisgICAgICAgIFBTSF9XaWR0aCAgICAgIHdyaXRlID0gZGltLT5zdGR3LndpZHRoczsKKworCisgICAgICAgIHdyaXRlLT5vcmcgPSBwcml2LT5zdGFuZGFyZF9oZWlnaHRbMF07CisgICAgICAgIHdyaXRlKys7CisgICAgICAgIHJlYWQgPSBwcml2LT5zbmFwX2hlaWdodHM7CisgICAgICAgIGZvciAoIGNvdW50ID0gcHJpdi0+bnVtX3NuYXBfaGVpZ2h0czsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgeworICAgICAgICAgIHdyaXRlLT5vcmcgPSAqcmVhZDsKKyAgICAgICAgICB3cml0ZSsrOworICAgICAgICAgIHJlYWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGRpbS0+c3Rkdy5jb3VudCA9IHByaXYtPm51bV9zbmFwX2hlaWdodHMgKyAxOworICAgICAgfQorCisgICAgICAvKiBjb3B5IGJsdWUgem9uZXMgKi8KKyAgICAgIHBzaF9ibHVlc19zZXRfem9uZXMoICZnbG9iYWxzLT5ibHVlcywgcHJpdi0+bnVtX2JsdWVfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Ymx1ZV92YWx1ZXMsIHByaXYtPm51bV9vdGhlcl9ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm90aGVyX2JsdWVzLCBwcml2LT5ibHVlX2Z1enosIDAgKTsKKworICAgICAgcHNoX2JsdWVzX3NldF96b25lcyggJmdsb2JhbHMtPmJsdWVzLCBwcml2LT5udW1fZmFtaWx5X2JsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZmFtaWx5X2JsdWVzLCBwcml2LT5udW1fZmFtaWx5X290aGVyX2JsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZmFtaWx5X290aGVyX2JsdWVzLCBwcml2LT5ibHVlX2Z1enosIDEgKTsKKworICAgICAgLyogbGltaXQgdGhlIEJsdWVTY2FsZSB2YWx1ZSB0byBgMSAvIG1heF9vZl9ibHVlX3pvbmVfaGVpZ2h0cycgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfRml4ZWQgIG1heF9zY2FsZTsKKyAgICAgICAgRlRfU2hvcnQgIG1heF9oZWlnaHQgPSAxOworCisKKyAgICAgICAgbWF4X2hlaWdodCA9IHBzaF9jYWxjX21heF9oZWlnaHQoIHByaXYtPm51bV9ibHVlX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmJsdWVfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2hlaWdodCApOworICAgICAgICBtYXhfaGVpZ2h0ID0gcHNoX2NhbGNfbWF4X2hlaWdodCggcHJpdi0+bnVtX290aGVyX2JsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+b3RoZXJfYmx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfaGVpZ2h0ICk7CisgICAgICAgIG1heF9oZWlnaHQgPSBwc2hfY2FsY19tYXhfaGVpZ2h0KCBwcml2LT5udW1fZmFtaWx5X2JsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZmFtaWx5X2JsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2hlaWdodCApOworICAgICAgICBtYXhfaGVpZ2h0ID0gcHNoX2NhbGNfbWF4X2hlaWdodCggcHJpdi0+bnVtX2ZhbWlseV9vdGhlcl9ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmZhbWlseV9vdGhlcl9ibHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9oZWlnaHQgKTsKKworICAgICAgICAvKiBCbHVlU2NhbGUgaXMgc2NhbGVkIDEwMDAgdGltZXMgKi8KKyAgICAgICAgbWF4X3NjYWxlID0gRlRfRGl2Rml4KCAxMDAwLCBtYXhfaGVpZ2h0ICk7CisgICAgICAgIGdsb2JhbHMtPmJsdWVzLmJsdWVfc2NhbGUgPSBwcml2LT5ibHVlX3NjYWxlIDwgbWF4X3NjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJpdi0+Ymx1ZV9zY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1heF9zY2FsZTsKKyAgICAgIH0KKworICAgICAgZ2xvYmFscy0+Ymx1ZXMuYmx1ZV9zaGlmdCA9IHByaXYtPmJsdWVfc2hpZnQ7CisgICAgICBnbG9iYWxzLT5ibHVlcy5ibHVlX2Z1enogID0gcHJpdi0+Ymx1ZV9mdXp6OworCisgICAgICBnbG9iYWxzLT5kaW1lbnNpb25bMF0uc2NhbGVfbXVsdCAgPSAwOworICAgICAgZ2xvYmFscy0+ZGltZW5zaW9uWzBdLnNjYWxlX2RlbHRhID0gMDsKKyAgICAgIGdsb2JhbHMtPmRpbWVuc2lvblsxXS5zY2FsZV9tdWx0ICA9IDA7CisgICAgICBnbG9iYWxzLT5kaW1lbnNpb25bMV0uc2NhbGVfZGVsdGEgPSAwOworCisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgICBwc19kZWJ1Z19nbG9iYWxzID0gZ2xvYmFsczsKKyNlbmRpZgorICAgIH0KKworICAgICphZ2xvYmFscyA9IGdsb2JhbHM7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc2hfZ2xvYmFsc19zZXRfc2NhbGUoIFBTSF9HbG9iYWxzICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB4X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB5X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB4X2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB5X2RlbHRhICkKKyAgeworICAgIFBTSF9EaW1lbnNpb24gIGRpbTsKKworCisgICAgZGltID0gJmdsb2JhbHMtPmRpbWVuc2lvblswXTsKKyAgICBpZiAoIHhfc2NhbGUgIT0gZGltLT5zY2FsZV9tdWx0ICB8fAorICAgICAgICAgeF9kZWx0YSAhPSBkaW0tPnNjYWxlX2RlbHRhICkKKyAgICB7CisgICAgICBkaW0tPnNjYWxlX211bHQgID0geF9zY2FsZTsKKyAgICAgIGRpbS0+c2NhbGVfZGVsdGEgPSB4X2RlbHRhOworCisgICAgICBwc2hfZ2xvYmFsc19zY2FsZV93aWR0aHMoIGdsb2JhbHMsIDAgKTsKKyAgICB9CisKKyAgICBkaW0gPSAmZ2xvYmFscy0+ZGltZW5zaW9uWzFdOworICAgIGlmICggeV9zY2FsZSAhPSBkaW0tPnNjYWxlX211bHQgIHx8CisgICAgICAgICB5X2RlbHRhICE9IGRpbS0+c2NhbGVfZGVsdGEgKQorICAgIHsKKyAgICAgIGRpbS0+c2NhbGVfbXVsdCAgPSB5X3NjYWxlOworICAgICAgZGltLT5zY2FsZV9kZWx0YSA9IHlfZGVsdGE7CisKKyAgICAgIHBzaF9nbG9iYWxzX3NjYWxlX3dpZHRocyggZ2xvYmFscywgMSApOworICAgICAgcHNoX2JsdWVzX3NjYWxlX3pvbmVzKCAmZ2xvYmFscy0+Ymx1ZXMsIHlfc2NhbGUsIHlfZGVsdGEgKTsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHBzaF9nbG9iYWxzX2Z1bmNzX2luaXQoIFBTSF9HbG9iYWxzX0Z1bmNzUmVjKiAgZnVuY3MgKQorICB7CisgICAgZnVuY3MtPmNyZWF0ZSAgICA9IHBzaF9nbG9iYWxzX25ldzsKKyAgICBmdW5jcy0+c2V0X3NjYWxlID0gcHNoX2dsb2JhbHNfc2V0X3NjYWxlOworICAgIGZ1bmNzLT5kZXN0cm95ICAgPSBwc2hfZ2xvYmFsc19kZXN0cm95OworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaGdsb2IuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzZkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaGdsb2IuaApAQCAtMCwwICsxLDE5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNoZ2xvYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUFNIR0xPQl9IX18KKyNkZWZpbmUgX19QU0hHTE9CX0hfXworCisKKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBHTE9CQUwgSElOVFMgSU5URVJOQUxTICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEBjb25zdGFudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU19HTE9CQUxTX01BWF9CTFVFX1pPTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEBkZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmx1ZSB6b25lcyBpbiBhIGZvbnQgZ2xvYmFsIGhpbnRzIHN0cnVjdHVyZS4gKi8KKyAgLyogICAgU2VlIEBQU19HbG9iYWxzX0JsdWVzUmVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU19HTE9CQUxTX01BWF9CTFVFX1pPTkVTICAxNgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBAY29uc3RhbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUFNfR0xPQkFMU19NQVhfU1REX1dJRFRIUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBAZGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YW5kYXJkIGFuZCBzbmFwIHdpZHRocyBpbiBlaXRoZXIgdGhlICAgICAgICovCisgIC8qICAgIGhvcml6b250YWwgb3IgdmVydGljYWwgZGlyZWN0aW9uLiAgU2VlIEBQU19HbG9iYWxzX1dpZHRoc1JlYy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNfR0xPQkFMU19NQVhfU1REX1dJRFRIUyAgMTYKKworCisgIC8qIHN0YW5kYXJkIGFuZCBzbmFwIHdpZHRoICovCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfV2lkdGhSZWNfCisgIHsKKyAgICBGVF9JbnQgIG9yZzsKKyAgICBGVF9Qb3MgIGN1cjsKKyAgICBGVF9Qb3MgIGZpdDsKKworICB9IFBTSF9XaWR0aFJlYywgKlBTSF9XaWR0aDsKKworCisgIC8qIHN0YW5kYXJkIGFuZCBzbmFwIHdpZHRocyB0YWJsZSAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNIX1dpZHRoc1JlY18KKyAgeworICAgIEZUX1VJbnQgICAgICAgY291bnQ7CisgICAgUFNIX1dpZHRoUmVjICB3aWR0aHNbUFNfR0xPQkFMU19NQVhfU1REX1dJRFRIU107CisKKyAgfSBQU0hfV2lkdGhzUmVjLCAqUFNIX1dpZHRoczsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfRGltZW5zaW9uUmVjXworICB7CisgICAgUFNIX1dpZHRoc1JlYyAgc3RkdzsKKyAgICBGVF9GaXhlZCAgICAgICBzY2FsZV9tdWx0OworICAgIEZUX0ZpeGVkICAgICAgIHNjYWxlX2RlbHRhOworCisgIH0gUFNIX0RpbWVuc2lvblJlYywgKlBTSF9EaW1lbnNpb247CisKKworICAvKiBibHVlIHpvbmUgZGVzY3JpcHRvciAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNIX0JsdWVfWm9uZVJlY18KKyAgeworICAgIEZUX0ludCAgb3JnX3JlZjsKKyAgICBGVF9JbnQgIG9yZ19kZWx0YTsKKyAgICBGVF9JbnQgIG9yZ190b3A7CisgICAgRlRfSW50ICBvcmdfYm90dG9tOworCisgICAgRlRfUG9zICBjdXJfcmVmOworICAgIEZUX1BvcyAgY3VyX2RlbHRhOworICAgIEZUX1BvcyAgY3VyX2JvdHRvbTsKKyAgICBGVF9Qb3MgIGN1cl90b3A7CisKKyAgfSBQU0hfQmx1ZV9ab25lUmVjLCAqUFNIX0JsdWVfWm9uZTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQU0hfQmx1ZV9UYWJsZVJlY18KKyAgeworICAgIEZUX1VJbnQgICAgICAgICAgIGNvdW50OworICAgIFBTSF9CbHVlX1pvbmVSZWMgIHpvbmVzW1BTX0dMT0JBTFNfTUFYX0JMVUVfWk9ORVNdOworCisgIH0gUFNIX0JsdWVfVGFibGVSZWMsICpQU0hfQmx1ZV9UYWJsZTsKKworCisgIC8qIGJsdWUgem9uZXMgdGFibGUgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSF9CbHVlc1JlY18KKyAgeworICAgIFBTSF9CbHVlX1RhYmxlUmVjICBub3JtYWxfdG9wOworICAgIFBTSF9CbHVlX1RhYmxlUmVjICBub3JtYWxfYm90dG9tOworICAgIFBTSF9CbHVlX1RhYmxlUmVjICBmYW1pbHlfdG9wOworICAgIFBTSF9CbHVlX1RhYmxlUmVjICBmYW1pbHlfYm90dG9tOworCisgICAgRlRfRml4ZWQgICAgICAgICAgIGJsdWVfc2NhbGU7CisgICAgRlRfSW50ICAgICAgICAgICAgIGJsdWVfc2hpZnQ7CisgICAgRlRfSW50ICAgICAgICAgICAgIGJsdWVfdGhyZXNob2xkOworICAgIEZUX0ludCAgICAgICAgICAgICBibHVlX2Z1eno7CisgICAgRlRfQm9vbCAgICAgICAgICAgIG5vX292ZXJzaG9vdHM7CisKKyAgfSBQU0hfQmx1ZXNSZWMsICpQU0hfQmx1ZXM7CisKKworICAvKiBmb250IGdsb2JhbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBkaW1lbnNpb24gMCA9PiBYIGNvb3JkaW5hdGVzICsgdmVydGljYWwgaGludHMvc3RlbXMgICAqLworICAvKiBkaW1lbnNpb24gMSA9PiBZIGNvb3JkaW5hdGVzICsgaG9yaXpvbnRhbCBoaW50cy9zdGVtcyAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNIX0dsb2JhbHNSZWNfCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CisgICAgUFNIX0RpbWVuc2lvblJlYyAgZGltZW5zaW9uWzJdOworICAgIFBTSF9CbHVlc1JlYyAgICAgIGJsdWVzOworCisgIH0gUFNIX0dsb2JhbHNSZWM7CisKKworI2RlZmluZSBQU0hfQkxVRV9BTElHTl9OT05FICAwCisjZGVmaW5lIFBTSF9CTFVFX0FMSUdOX1RPUCAgIDEKKyNkZWZpbmUgUFNIX0JMVUVfQUxJR05fQk9UICAgMgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTSF9BbGlnbm1lbnRSZWNfCisgIHsKKyAgICBpbnQgICAgIGFsaWduOworICAgIEZUX1BvcyAgYWxpZ25fdG9wOworICAgIEZUX1BvcyAgYWxpZ25fYm90OworCisgIH0gUFNIX0FsaWdubWVudFJlYywgKlBTSF9BbGlnbm1lbnQ7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzaF9nbG9iYWxzX2Z1bmNzX2luaXQoIFBTSF9HbG9iYWxzX0Z1bmNzUmVjKiAgZnVuY3MgKTsKKworCisjaWYgMAorICAvKiBzbmFwIGEgc3RlbSB3aWR0aCB0byBmaXR0ZXIgY29vcmRpbmF0ZXMuICBgb3JnX3dpZHRoJyBpcyBpbiBmb250ICovCisgIC8qIHVuaXRzLiAgVGhlIHJlc3VsdCBpcyBpbiBkZXZpY2UgcGl4ZWxzICgyNi42IGZvcm1hdCkuICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUwoIEZUX1BvcyApCisgIHBzaF9kaW1lbnNpb25fc25hcF93aWR0aCggUFNIX0RpbWVuc2lvbiAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG9yZ193aWR0aCApOworI2VuZGlmCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc2hfZ2xvYmFsc19zZXRfc2NhbGUoIFBTSF9HbG9iYWxzICBnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB4X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB5X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB4X2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICB5X2RlbHRhICk7CisKKyAgLyogc25hcCBhIHN0ZW0gdG8gb25lIG9yIHR3byBibHVlIHpvbmVzICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcHNoX2JsdWVzX3NuYXBfc3RlbSggUFNIX0JsdWVzICAgICAgYmx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIHN0ZW1fdG9wLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBzdGVtX2JvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgUFNIX0FsaWdubWVudCAgYWxpZ25tZW50ICk7CisgIC8qICovCisKKyNpZmRlZiBERUJVR19ISU5URVIKKyAgZXh0ZXJuIFBTSF9HbG9iYWxzICBwc19kZWJ1Z19nbG9iYWxzOworI2VuZGlmCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1BTSEdMT0JfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaGludGVyLmMgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaGludGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2NWZlMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYwpAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2hpbnRlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBIaW50aW5nIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJwc2hwaWMuYyIKKyNpbmNsdWRlICJwc2hyZWMuYyIKKyNpbmNsdWRlICJwc2hnbG9iLmMiCisjaW5jbHVkZSAicHNoYWxnby5jIgorI2luY2x1ZGUgInBzaG1vZC5jIgorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2htb2QuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxYjQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzaG1vZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlICJwc2hyZWMuaCIKKyNpbmNsdWRlICJwc2hhbGdvLmgiCisjaW5jbHVkZSAicHNocGljLmgiCisKKworICAvKiB0aGUgUG9zdHNjcmlwdCBIaW50ZXIgbW9kdWxlIHN0cnVjdHVyZSAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNfSGludGVyX01vZHVsZV9SZWNfCisgIHsKKyAgICBGVF9Nb2R1bGVSZWMgICAgICAgICAgcm9vdDsKKyAgICBQU19IaW50c1JlYyAgICAgICAgICAgcHNfaGludHM7CisKKyAgICBQU0hfR2xvYmFsc19GdW5jc1JlYyAgZ2xvYmFsc19mdW5jczsKKyAgICBUMV9IaW50c19GdW5jc1JlYyAgICAgdDFfZnVuY3M7CisgICAgVDJfSGludHNfRnVuY3NSZWMgICAgIHQyX2Z1bmNzOworCisgIH0gUFNfSGludGVyX01vZHVsZVJlYywgKlBTX0hpbnRlcl9Nb2R1bGU7CisKKworICAvKiBmaW5hbGl6ZSBtb2R1bGUgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgcHNfaGludGVyX2RvbmUoIFBTX0hpbnRlcl9Nb2R1bGUgIG1vZHVsZSApCisgIHsKKyAgICBtb2R1bGUtPnQxX2Z1bmNzLmhpbnRzID0gTlVMTDsKKyAgICBtb2R1bGUtPnQyX2Z1bmNzLmhpbnRzID0gTlVMTDsKKworICAgIHBzX2hpbnRzX2RvbmUoICZtb2R1bGUtPnBzX2hpbnRzICk7CisgIH0KKworCisgIC8qIGluaXRpYWxpemUgbW9kdWxlLCBjcmVhdGUgaGludHMgcmVjb3JkZXIgYW5kIHRoZSBpbnRlcmZhY2UgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHBzX2hpbnRlcl9pbml0KCBQU19IaW50ZXJfTW9kdWxlICBtb2R1bGUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBtb2R1bGUtPnJvb3QubWVtb3J5OworICAgIHZvaWQqICAgICAgcGggICAgID0gJm1vZHVsZS0+cHNfaGludHM7CisKKworICAgIHBzX2hpbnRzX2luaXQoICZtb2R1bGUtPnBzX2hpbnRzLCBtZW1vcnkgKTsKKworICAgIHBzaF9nbG9iYWxzX2Z1bmNzX2luaXQoICZtb2R1bGUtPmdsb2JhbHNfZnVuY3MgKTsKKworICAgIHQxX2hpbnRzX2Z1bmNzX2luaXQoICZtb2R1bGUtPnQxX2Z1bmNzICk7CisgICAgbW9kdWxlLT50MV9mdW5jcy5oaW50cyA9IChUMV9IaW50cylwaDsKKworICAgIHQyX2hpbnRzX2Z1bmNzX2luaXQoICZtb2R1bGUtPnQyX2Z1bmNzICk7CisgICAgbW9kdWxlLT50Ml9mdW5jcy5oaW50cyA9IChUMl9IaW50cylwaDsKKworICAgIHJldHVybiAwOworICB9CisKKworICAvKiByZXR1cm5zIGdsb2JhbCBoaW50cyBpbnRlcmZhY2UgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBQU0hfR2xvYmFsc19GdW5jcyApCisgIHBzaGludGVyX2dldF9nbG9iYWxzX2Z1bmNzKCBGVF9Nb2R1bGUgIG1vZHVsZSApCisgIHsKKyAgICByZXR1cm4gJigoUFNfSGludGVyX01vZHVsZSltb2R1bGUpLT5nbG9iYWxzX2Z1bmNzOworICB9CisKKworICAvKiByZXR1cm4gVHlwZSAxIGhpbnRzIGludGVyZmFjZSAqLworICBGVF9DQUxMQkFDS19ERUYoIFQxX0hpbnRzX0Z1bmNzICkKKyAgcHNoaW50ZXJfZ2V0X3QxX2Z1bmNzKCBGVF9Nb2R1bGUgIG1vZHVsZSApCisgIHsKKyAgICByZXR1cm4gJigoUFNfSGludGVyX01vZHVsZSltb2R1bGUpLT50MV9mdW5jczsKKyAgfQorCisKKyAgLyogcmV0dXJuIFR5cGUgMiBoaW50cyBpbnRlcmZhY2UgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBUMl9IaW50c19GdW5jcyApCisgIHBzaGludGVyX2dldF90Ml9mdW5jcyggRlRfTW9kdWxlICBtb2R1bGUgKQorICB7CisgICAgcmV0dXJuICYoKFBTX0hpbnRlcl9Nb2R1bGUpbW9kdWxlKS0+dDJfZnVuY3M7CisgIH0KKworCisgIEZUX0RFRklORV9QU0hJTlRFUl9JTlRFUkZBQ0UoCisgICAgcHNoaW50ZXJfaW50ZXJmYWNlLAorICAgIHBzaGludGVyX2dldF9nbG9iYWxzX2Z1bmNzLAorICAgIHBzaGludGVyX2dldF90MV9mdW5jcywKKyAgICBwc2hpbnRlcl9nZXRfdDJfZnVuY3MgKQorCisKKyAgRlRfREVGSU5FX01PRFVMRSgKKyAgICBwc2hpbnRlcl9tb2R1bGVfY2xhc3MsCisKKyAgICAwLAorICAgIHNpemVvZiAoIFBTX0hpbnRlcl9Nb2R1bGVSZWMgKSwKKyAgICAicHNoaW50ZXIiLAorICAgIDB4MTAwMDBMLAorICAgIDB4MjAwMDBMLAorCisgICAgJlBTSElOVEVSX0lOVEVSRkFDRV9HRVQsICAgICAgICAgICAgICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKXBzX2hpbnRlcl9pbml0LAorICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgcHNfaGludGVyX2RvbmUsCisgICAgKEZUX01vZHVsZV9SZXF1ZXN0ZXIpICBOVUxMICkgICAvKiBubyBhZGRpdGlvbmFsIGludGVyZmFjZSBmb3Igbm93ICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaG1vZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2htb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThkODU2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2htb2QuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2htb2QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBoaW50ZXIgbW9kdWxlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU0hNT0RfSF9fCisjZGVmaW5lIF9fUFNITU9EX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfTU9EVUxFX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0RFQ0xBUkVfTU9EVUxFKCBwc2hpbnRlcl9tb2R1bGVfY2xhc3MgKQorCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19QU0hNT0RfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaG50ZXJyLmggYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3OTBhOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2hudGVyci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUFMgSGludGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFBTSGludGVyIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUFNITlRFUlJfSF9fCisjZGVmaW5lIF9fUFNITlRFUlJfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTSF9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfUFNoaW50ZXIKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fUFNITlRFUlJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaHBpYy5jIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hwaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ4ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hwaWMuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2hwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHBzaGludGVyIG1vZHVsZS4gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSAicHNocGljLmgiCisjaW5jbHVkZSAicHNobnRlcnIuaCIKKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHBzaG1vZC5jICovCisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc19wc2hpbnRlcl9pbnRlcmZhY2UoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0hpbnRlcl9JbnRlcmZhY2UqICBjbGF6eiApOworCisgIHZvaWQKKyAgcHNoaW50ZXJfbW9kdWxlX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIGlmICggcGljX2NvbnRhaW5lci0+cHNoaW50ZXIgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIHBpY19jb250YWluZXItPnBzaGludGVyICk7CisgICAgICBwaWNfY29udGFpbmVyLT5wc2hpbnRlciA9IE5VTEw7CisgICAgfQorICB9CisKKworICBGVF9FcnJvcgorICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICBQU0hpbnRlclBJQyogICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCisgICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKKyAgICBwaWNfY29udGFpbmVyLT5wc2hpbnRlciA9IGNvbnRhaW5lcjsKKworICAgIC8qIGFkZCBjYWxsIHRvIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdoZW4geW91IGFkZCBuZXcgc2NyaXB0cyAqLworICAgIEZUX0luaXRfQ2xhc3NfcHNoaW50ZXJfaW50ZXJmYWNlKAorICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+cHNoaW50ZXJfaW50ZXJmYWNlICk7CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHBzaGludGVyX21vZHVsZV9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hwaWMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNocGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkZTQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNocGljLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNocGljLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc2hpbnRlciBtb2R1bGUuICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUFNIUElDX0hfXworI2RlZmluZSBfX1BTSFBJQ19IX18KKworCitGVF9CRUdJTl9IRUFERVIKKworI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgUFNISU5URVJfSU5URVJGQUNFX0dFVCAgcHNoaW50ZXJfaW50ZXJmYWNlCisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorCisgIHR5cGVkZWYgc3RydWN0ICBQU0hpbnRlclBJQ18KKyAgeworICAgIFBTSGludGVyX0ludGVyZmFjZSAgcHNoaW50ZXJfaW50ZXJmYWNlOworCisgIH0gUFNIaW50ZXJQSUM7CisKKworI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgKCAoUFNIaW50ZXJQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIucHNoaW50ZXIgKSApCisKKyNkZWZpbmUgUFNISU5URVJfSU5URVJGQUNFX0dFVCAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnBzaGludGVyX2ludGVyZmFjZSApCisKKyAgLyogc2VlIHBzaHBpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KKyAgdm9pZAorICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1BTSFBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNocmVjLmMgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaHJlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODk1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3BzaHJlYy5jCkBAIC0wLDAgKzEsMTIyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNocmVjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgaGludHMgcmVjb3JkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisKKyNpbmNsdWRlICJwc2hyZWMuaCIKKyNpbmNsdWRlICJwc2hhbGdvLmgiCisKKyNpbmNsdWRlICJwc2hudGVyci5oIgorCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BzaHJlYworCisjaWZkZWYgREVCVUdfSElOVEVSCisgIFBTX0hpbnRzICBwc19kZWJ1Z19oaW50cyAgICAgICAgID0gTlVMTDsKKyAgaW50ICAgICAgIHBzX2RlYnVnX25vX2hvcnpfaGludHMgPSAwOworICBpbnQgICAgICAgcHNfZGVidWdfbm9fdmVydF9oaW50cyA9IDA7CisjZW5kaWYKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBQU19ISU5UIE1BTkFHRU1FTlQgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIGRlc3Ryb3kgaGludHMgdGFibGUgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfaGludF90YWJsZV9kb25lKCBQU19IaW50X1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfRlJFRSggdGFibGUtPmhpbnRzICk7CisgICAgdGFibGUtPm51bV9oaW50cyA9IDA7CisgICAgdGFibGUtPm1heF9oaW50cyA9IDA7CisgIH0KKworCisgIC8qIGVuc3VyZSB0aGF0IGEgdGFibGUgY2FuIGNvbnRhaW4gImNvdW50IiBlbGVtZW50cyAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfaGludF90YWJsZV9lbnN1cmUoIFBTX0hpbnRfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfVUludCAgIG9sZF9tYXggPSB0YWJsZS0+bWF4X2hpbnRzOworICAgIEZUX1VJbnQgICBuZXdfbWF4ID0gY291bnQ7CisgICAgRlRfRXJyb3IgIGVycm9yICAgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggbmV3X21heCA+IG9sZF9tYXggKQorICAgIHsKKyAgICAgIC8qIHRyeSB0byBncm93IHRoZSB0YWJsZSAqLworICAgICAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBuZXdfbWF4LCA4ICk7CisgICAgICBpZiAoICFGVF9SRU5FV19BUlJBWSggdGFibGUtPmhpbnRzLCBvbGRfbWF4LCBuZXdfbWF4ICkgKQorICAgICAgICB0YWJsZS0+bWF4X2hpbnRzID0gbmV3X21heDsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfaGludF90YWJsZV9hbGxvYyggUFNfSGludF9UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgUFNfSGludCAgICAgICAqYWhpbnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VJbnQgICBjb3VudDsKKyAgICBQU19IaW50ICAgaGludCA9IE5VTEw7CisKKworICAgIGNvdW50ID0gdGFibGUtPm51bV9oaW50czsKKyAgICBjb3VudCsrOworCisgICAgaWYgKCBjb3VudCA+PSB0YWJsZS0+bWF4X2hpbnRzICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzX2hpbnRfdGFibGVfZW5zdXJlKCB0YWJsZSwgY291bnQsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBoaW50ICAgICAgICA9IHRhYmxlLT5oaW50cyArIGNvdW50IC0gMTsKKyAgICBoaW50LT5wb3MgICA9IDA7CisgICAgaGludC0+bGVuICAgPSAwOworICAgIGhpbnQtPmZsYWdzID0gMDsKKworICAgIHRhYmxlLT5udW1faGludHMgPSBjb3VudDsKKworICBFeGl0OgorICAgICphaGludCA9IGhpbnQ7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgUFNfTUFTSyBNQU5BR0VNRU5UICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBkZXN0cm95IG1hc2sgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfbWFza19kb25lKCBQU19NYXNrICAgIG1hc2ssCisgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgRlRfRlJFRSggbWFzay0+Ynl0ZXMgKTsKKyAgICBtYXNrLT5udW1fYml0cyAgPSAwOworICAgIG1hc2stPm1heF9iaXRzICA9IDA7CisgICAgbWFzay0+ZW5kX3BvaW50ID0gMDsKKyAgfQorCisKKyAgLyogZW5zdXJlIHRoYXQgYSBtYXNrIGNhbiBjb250YWluICJjb3VudCIgYml0cyAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfbWFza19lbnN1cmUoIFBTX01hc2sgICAgbWFzaywKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgY291bnQsCisgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9VSW50ICAgb2xkX21heCA9ICggbWFzay0+bWF4X2JpdHMgKyA3ICkgPj4gMzsKKyAgICBGVF9VSW50ICAgbmV3X21heCA9ICggY291bnQgICAgICAgICAgKyA3ICkgPj4gMzsKKyAgICBGVF9FcnJvciAgZXJyb3IgICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBuZXdfbWF4ID4gb2xkX21heCApCisgICAgeworICAgICAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBuZXdfbWF4LCA4ICk7CisgICAgICBpZiAoICFGVF9SRU5FV19BUlJBWSggbWFzay0+Ynl0ZXMsIG9sZF9tYXgsIG5ld19tYXggKSApCisgICAgICAgIG1hc2stPm1heF9iaXRzID0gbmV3X21heCAqIDg7CisgICAgfQorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogdGVzdCBhIGJpdCB2YWx1ZSBpbiBhIGdpdmVuIG1hc2sgKi8KKyAgc3RhdGljIEZUX0ludAorICBwc19tYXNrX3Rlc3RfYml0KCBQU19NYXNrICBtYXNrLAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICBpZHggKQorICB7CisgICAgaWYgKCAoRlRfVUludClpZHggPj0gbWFzay0+bnVtX2JpdHMgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbWFzay0+Ynl0ZXNbaWR4ID4+IDNdICYgKCAweDgwID4+ICggaWR4ICYgNyApICk7CisgIH0KKworCisgIC8qIGNsZWFyIGEgZ2l2ZW4gYml0ICovCisgIHN0YXRpYyB2b2lkCisgIHBzX21hc2tfY2xlYXJfYml0KCBQU19NYXNrICBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgaWR4ICkKKyAgeworICAgIEZUX0J5dGUqICBwOworCisKKyAgICBpZiAoIGlkeCA+PSBtYXNrLT5udW1fYml0cyApCisgICAgICByZXR1cm47CisKKyAgICBwICAgID0gbWFzay0+Ynl0ZXMgKyAoIGlkeCA+PiAzICk7CisgICAgcFswXSA9IChGVF9CeXRlKSggcFswXSAmIH4oIDB4ODAgPj4gKCBpZHggJiA3ICkgKSApOworICB9CisKKworICAvKiBzZXQgYSBnaXZlbiBiaXQsIHBvc3NpYmx5IGdyb3cgdGhlIG1hc2sgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX21hc2tfc2V0X2JpdCggUFNfTWFzayAgICBtYXNrLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgaWR4LAorICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgcDsKKworCisgICAgaWYgKCBpZHggPj0gbWFzay0+bnVtX2JpdHMgKQorICAgIHsKKyAgICAgIGVycm9yID0gcHNfbWFza19lbnN1cmUoIG1hc2ssIGlkeCArIDEsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgbWFzay0+bnVtX2JpdHMgPSBpZHggKyAxOworICAgIH0KKworICAgIHAgICAgPSBtYXNrLT5ieXRlcyArICggaWR4ID4+IDMgKTsKKyAgICBwWzBdID0gKEZUX0J5dGUpKCBwWzBdIHwgKCAweDgwID4+ICggaWR4ICYgNyApICkgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZGVzdHJveSBtYXNrIHRhYmxlICovCisgIHN0YXRpYyB2b2lkCisgIHBzX21hc2tfdGFibGVfZG9uZSggUFNfTWFza19UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX1VJbnQgIGNvdW50ID0gdGFibGUtPm1heF9tYXNrczsKKyAgICBQU19NYXNrICBtYXNrICA9IHRhYmxlLT5tYXNrczsKKworCisgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIG1hc2srKyApCisgICAgICBwc19tYXNrX2RvbmUoIG1hc2ssIG1lbW9yeSApOworCisgICAgRlRfRlJFRSggdGFibGUtPm1hc2tzICk7CisgICAgdGFibGUtPm51bV9tYXNrcyA9IDA7CisgICAgdGFibGUtPm1heF9tYXNrcyA9IDA7CisgIH0KKworCisgIC8qIGVuc3VyZSB0aGF0IGEgbWFzayB0YWJsZSBjYW4gY29udGFpbiAiY291bnQiIG1hc2tzICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwc19tYXNrX3RhYmxlX2Vuc3VyZSggUFNfTWFza19UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9VSW50ICAgb2xkX21heCA9IHRhYmxlLT5tYXhfbWFza3M7CisgICAgRlRfVUludCAgIG5ld19tYXggPSBjb3VudDsKKyAgICBGVF9FcnJvciAgZXJyb3IgICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBuZXdfbWF4ID4gb2xkX21heCApCisgICAgeworICAgICAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBuZXdfbWF4LCA4ICk7CisgICAgICBpZiAoICFGVF9SRU5FV19BUlJBWSggdGFibGUtPm1hc2tzLCBvbGRfbWF4LCBuZXdfbWF4ICkgKQorICAgICAgICB0YWJsZS0+bWF4X21hc2tzID0gbmV3X21heDsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBhbGxvY2F0ZSBhIG5ldyBtYXNrIGluIGEgdGFibGUgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX21hc2tfdGFibGVfYWxsb2MoIFBTX01hc2tfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgIFBTX01hc2sgICAgICAgKmFtYXNrICkKKyAgeworICAgIEZUX1VJbnQgICBjb3VudDsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgUFNfTWFzayAgIG1hc2sgID0gTlVMTDsKKworCisgICAgY291bnQgPSB0YWJsZS0+bnVtX21hc2tzOworICAgIGNvdW50Kys7CisKKyAgICBpZiAoIGNvdW50ID4gdGFibGUtPm1heF9tYXNrcyApCisgICAgeworICAgICAgZXJyb3IgPSBwc19tYXNrX3RhYmxlX2Vuc3VyZSggdGFibGUsIGNvdW50LCBtZW1vcnkgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbWFzayAgICAgICAgICAgICA9IHRhYmxlLT5tYXNrcyArIGNvdW50IC0gMTsKKyAgICBtYXNrLT5udW1fYml0cyAgID0gMDsKKyAgICBtYXNrLT5lbmRfcG9pbnQgID0gMDsKKyAgICB0YWJsZS0+bnVtX21hc2tzID0gY291bnQ7CisKKyAgRXhpdDoKKyAgICAqYW1hc2sgPSBtYXNrOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogcmV0dXJuIGxhc3QgaGludCBtYXNrIGluIGEgdGFibGUsIGNyZWF0ZSBvbmUgaWYgdGhlIHRhYmxlIGlzIGVtcHR5ICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwc19tYXNrX3RhYmxlX2xhc3QoIFBTX01hc2tfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICBQU19NYXNrICAgICAgICphbWFzayApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfVUludCAgIGNvdW50OworICAgIFBTX01hc2sgICBtYXNrOworCisKKyAgICBjb3VudCA9IHRhYmxlLT5udW1fbWFza3M7CisgICAgaWYgKCBjb3VudCA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzX21hc2tfdGFibGVfYWxsb2MoIHRhYmxlLCBtZW1vcnksICZtYXNrICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgICBtYXNrID0gdGFibGUtPm1hc2tzICsgY291bnQgLSAxOworCisgIEV4aXQ6CisgICAgKmFtYXNrID0gbWFzazsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHNldCBhIG5ldyBtYXNrIHRvIGEgZ2l2ZW4gYml0IHJhbmdlICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwc19tYXNrX3RhYmxlX3NldF9iaXRzKCBQU19NYXNrX1RhYmxlICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBiaXRfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgYml0X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBQU19NYXNrICAgbWFzazsKKworCisgICAgZXJyb3IgPSBwc19tYXNrX3RhYmxlX2xhc3QoIHRhYmxlLCBtZW1vcnksICZtYXNrICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IHBzX21hc2tfZW5zdXJlKCBtYXNrLCBiaXRfY291bnQsIG1lbW9yeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgbWFzay0+bnVtX2JpdHMgPSBiaXRfY291bnQ7CisKKyAgICAvKiBub3csIGNvcHkgYml0cyAqLworICAgIHsKKyAgICAgIEZUX0J5dGUqICByZWFkICA9IChGVF9CeXRlKilzb3VyY2UgKyAoIGJpdF9wb3MgPj4gMyApOworICAgICAgRlRfSW50ICAgIHJtYXNrID0gMHg4MCA+PiAoIGJpdF9wb3MgJiA3ICk7CisgICAgICBGVF9CeXRlKiAgd3JpdGUgPSBtYXNrLT5ieXRlczsKKyAgICAgIEZUX0ludCAgICB3bWFzayA9IDB4ODA7CisgICAgICBGVF9JbnQgICAgdmFsOworCisKKyAgICAgIGZvciAoIDsgYml0X2NvdW50ID4gMDsgYml0X2NvdW50LS0gKQorICAgICAgeworICAgICAgICB2YWwgPSB3cml0ZVswXSAmIH53bWFzazsKKworICAgICAgICBpZiAoIHJlYWRbMF0gJiBybWFzayApCisgICAgICAgICAgdmFsIHw9IHdtYXNrOworCisgICAgICAgIHdyaXRlWzBdID0gKEZUX0J5dGUpdmFsOworCisgICAgICAgIHJtYXNrID4+PSAxOworICAgICAgICBpZiAoIHJtYXNrID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgcmVhZCsrOworICAgICAgICAgIHJtYXNrID0gMHg4MDsKKyAgICAgICAgfQorCisgICAgICAgIHdtYXNrID4+PSAxOworICAgICAgICBpZiAoIHdtYXNrID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgd3JpdGUrKzsKKyAgICAgICAgICB3bWFzayA9IDB4ODA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHRlc3Qgd2hldGhlciB0d28gbWFza3MgaW4gYSB0YWJsZSBpbnRlcnNlY3QgKi8KKyAgc3RhdGljIEZUX0ludAorICBwc19tYXNrX3RhYmxlX3Rlc3RfaW50ZXJzZWN0KCBQU19NYXNrX1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgaW5kZXgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBpbmRleDIgKQorICB7CisgICAgUFNfTWFzayAgIG1hc2sxICA9IHRhYmxlLT5tYXNrcyArIGluZGV4MTsKKyAgICBQU19NYXNrICAgbWFzazIgID0gdGFibGUtPm1hc2tzICsgaW5kZXgyOworICAgIEZUX0J5dGUqICBwMSAgICAgPSBtYXNrMS0+Ynl0ZXM7CisgICAgRlRfQnl0ZSogIHAyICAgICA9IG1hc2syLT5ieXRlczsKKyAgICBGVF9VSW50ICAgY291bnQxID0gbWFzazEtPm51bV9iaXRzOworICAgIEZUX1VJbnQgICBjb3VudDIgPSBtYXNrMi0+bnVtX2JpdHM7CisgICAgRlRfVUludCAgIGNvdW50OworCisKKyAgICBjb3VudCA9IEZUX01JTiggY291bnQxLCBjb3VudDIgKTsKKyAgICBmb3IgKCA7IGNvdW50ID49IDg7IGNvdW50IC09IDggKQorICAgIHsKKyAgICAgIGlmICggcDFbMF0gJiBwMlswXSApCisgICAgICAgIHJldHVybiAxOworCisgICAgICBwMSsrOworICAgICAgcDIrKzsKKyAgICB9CisKKyAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKCBwMVswXSAmIHAyWzBdICkgJiB+KCAweEZGID4+IGNvdW50ICk7CisgIH0KKworCisgIC8qIG1lcmdlIHR3byBtYXNrcywgdXNlZCBieSBwc19tYXNrX3RhYmxlX21lcmdlX2FsbCAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfbWFza190YWJsZV9tZXJnZSggUFNfTWFza19UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGluZGV4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgaW5kZXgyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiBzd2FwIGluZGV4MSBhbmQgaW5kZXgyIHNvIHRoYXQgaW5kZXgxIDwgaW5kZXgyICovCisgICAgaWYgKCBpbmRleDEgPiBpbmRleDIgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIHRlbXA7CisKKworICAgICAgdGVtcCAgID0gaW5kZXgxOworICAgICAgaW5kZXgxID0gaW5kZXgyOworICAgICAgaW5kZXgyID0gdGVtcDsKKyAgICB9CisKKyAgICBpZiAoIGluZGV4MSA8IGluZGV4MiAmJiBpbmRleDIgPCB0YWJsZS0+bnVtX21hc2tzICkKKyAgICB7CisgICAgICAvKiB3ZSBuZWVkIHRvIG1lcmdlIHRoZSBiaXRzZXRzIG9mIGluZGV4MSBhbmQgaW5kZXgyIHdpdGggYSAqLworICAgICAgLyogc2ltcGxlIHVuaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIFBTX01hc2sgIG1hc2sxICA9IHRhYmxlLT5tYXNrcyArIGluZGV4MTsKKyAgICAgIFBTX01hc2sgIG1hc2syICA9IHRhYmxlLT5tYXNrcyArIGluZGV4MjsKKyAgICAgIEZUX1VJbnQgIGNvdW50MSA9IG1hc2sxLT5udW1fYml0czsKKyAgICAgIEZUX1VJbnQgIGNvdW50MiA9IG1hc2syLT5udW1fYml0czsKKyAgICAgIEZUX0ludCAgIGRlbHRhOworCisKKyAgICAgIGlmICggY291bnQyID4gMCApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgICBwb3M7CisgICAgICAgIEZUX0J5dGUqICByZWFkOworICAgICAgICBGVF9CeXRlKiAgd3JpdGU7CisKKworICAgICAgICAvKiBpZiAiY291bnQyIiBpcyBncmVhdGVyIHRoYW4gImNvdW50MSIsIHdlIG5lZWQgdG8gZ3JvdyB0aGUgKi8KKyAgICAgICAgLyogZmlyc3QgYml0c2V0LCBhbmQgY2xlYXIgdGhlIGhpZ2hlc3QgYml0cyAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggY291bnQyID4gY291bnQxICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gcHNfbWFza19lbnN1cmUoIG1hc2sxLCBjb3VudDIsIG1lbW9yeSApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgZm9yICggcG9zID0gY291bnQxOyBwb3MgPCBjb3VudDI7IHBvcysrICkKKyAgICAgICAgICAgIHBzX21hc2tfY2xlYXJfYml0KCBtYXNrMSwgcG9zICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBtZXJnZSAodW5pdGUpIHRoZSBiaXRzZXRzICovCisgICAgICAgIHJlYWQgID0gbWFzazItPmJ5dGVzOworICAgICAgICB3cml0ZSA9IG1hc2sxLT5ieXRlczsKKyAgICAgICAgcG9zICAgPSAoIGNvdW50MiArIDcgKSA+PiAzOworCisgICAgICAgIGZvciAoIDsgcG9zID4gMDsgcG9zLS0gKQorICAgICAgICB7CisgICAgICAgICAgd3JpdGVbMF0gPSAoRlRfQnl0ZSkoIHdyaXRlWzBdIHwgcmVhZFswXSApOworICAgICAgICAgIHdyaXRlKys7CisgICAgICAgICAgcmVhZCsrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIE5vdywgcmVtb3ZlICJtYXNrMiIgZnJvbSB0aGUgbGlzdC4gIFdlIG5lZWQgdG8ga2VlcCB0aGUgbWFza3MgKi8KKyAgICAgIC8qIHNvcnRlZCBpbiBvcmRlciBvZiBpbXBvcnRhbmNlLCBzbyBtb3ZlIHRhYmxlIGVsZW1lbnRzLiAgICAgICAgKi8KKyAgICAgIG1hc2syLT5udW1fYml0cyAgPSAwOworICAgICAgbWFzazItPmVuZF9wb2ludCA9IDA7CisKKyAgICAgIC8qIG51bWJlciBvZiBtYXNrcyB0byBtb3ZlICovCisgICAgICBkZWx0YSA9IChGVF9JbnQpKCB0YWJsZS0+bnVtX21hc2tzIC0gMSAtIGluZGV4MiApOworICAgICAgaWYgKCBkZWx0YSA+IDAgKQorICAgICAgeworICAgICAgICAvKiBtb3ZlIHRvIGVuZCBvZiB0YWJsZSBmb3IgcmV1c2UgKi8KKyAgICAgICAgUFNfTWFza1JlYyAgZHVtbXkgPSAqbWFzazI7CisKKworICAgICAgICBmdF9tZW1tb3ZlKCBtYXNrMiwKKyAgICAgICAgICAgICAgICAgICAgbWFzazIgKyAxLAorICAgICAgICAgICAgICAgICAgICAoRlRfVUludClkZWx0YSAqIHNpemVvZiAoIFBTX01hc2tSZWMgKSApOworCisgICAgICAgIG1hc2syW2RlbHRhXSA9IGR1bW15OworICAgICAgfQorCisgICAgICB0YWJsZS0+bnVtX21hc2tzLS07CisgICAgfQorICAgIGVsc2UKKyAgICAgIEZUX1RSQUNFMCgoICJwc19tYXNrX3RhYmxlX21lcmdlOiBpZ25vcmluZyBpbnZhbGlkIGluZGljZXMgKCVkLCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIGluZGV4MSwgaW5kZXgyICkpOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBUcnkgdG8gbWVyZ2UgYWxsIG1hc2tzIGluIGEgZ2l2ZW4gdGFibGUuICBUaGlzIGlzIHVzZWQgdG8gbWVyZ2UgKi8KKyAgLyogYWxsIGNvdW50ZXIgbWFza3MgaW50byBpbmRlcGVuZGVudCBjb3VudGVyICJwYXRocyIuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfbWFza190YWJsZV9tZXJnZV9hbGwoIFBTX01hc2tfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0ludCAgICBpbmRleDEsIGluZGV4MjsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIC8qIGJvdGggbG9vcHMgZ28gZG93biB0byAwLCB0aHVzIEZUX0ludCBmb3IgaW5kZXgxIGFuZCBpbmRleDIgKi8KKyAgICBmb3IgKCBpbmRleDEgPSAoRlRfSW50KXRhYmxlLT5udW1fbWFza3MgLSAxOyBpbmRleDEgPiAwOyBpbmRleDEtLSApCisgICAgeworICAgICAgZm9yICggaW5kZXgyID0gaW5kZXgxIC0gMTsgaW5kZXgyID49IDA7IGluZGV4Mi0tICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBwc19tYXNrX3RhYmxlX3Rlc3RfaW50ZXJzZWN0KCB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClpbmRleDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpaW5kZXgyICkgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBwc19tYXNrX3RhYmxlX21lcmdlKCB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWluZGV4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWluZGV4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgUFNfRElNRU5TSU9OIE1BTkFHRU1FTlQgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogZmluYWxpemUgYSBnaXZlbiBkaW1lbnNpb24gKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfZGltZW5zaW9uX2RvbmUoIFBTX0RpbWVuc2lvbiAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgcHNfbWFza190YWJsZV9kb25lKCAmZGltZW5zaW9uLT5jb3VudGVycywgbWVtb3J5ICk7CisgICAgcHNfbWFza190YWJsZV9kb25lKCAmZGltZW5zaW9uLT5tYXNrcywgICAgbWVtb3J5ICk7CisgICAgcHNfaGludF90YWJsZV9kb25lKCAmZGltZW5zaW9uLT5oaW50cywgICAgbWVtb3J5ICk7CisgIH0KKworCisgIC8qIGluaXRpYWxpemUgYSBnaXZlbiBkaW1lbnNpb24gKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfZGltZW5zaW9uX2luaXQoIFBTX0RpbWVuc2lvbiAgZGltZW5zaW9uICkKKyAgeworICAgIGRpbWVuc2lvbi0+aGludHMubnVtX2hpbnRzICAgID0gMDsKKyAgICBkaW1lbnNpb24tPm1hc2tzLm51bV9tYXNrcyAgICA9IDA7CisgICAgZGltZW5zaW9uLT5jb3VudGVycy5udW1fbWFza3MgPSAwOworICB9CisKKworI2lmIDAKKworICAvKiBzZXQgYSBiaXQgYXQgYSBnaXZlbiBpbmRleCBpbiB0aGUgY3VycmVudCBoaW50IG1hc2sgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX2RpbWVuc2lvbl9zZXRfbWFza19iaXQoIFBTX0RpbWVuc2lvbiAgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgUFNfTWFzayAgIG1hc2s7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiBnZXQgbGFzdCBoaW50IG1hc2sgKi8KKyAgICBlcnJvciA9IHBzX21hc2tfdGFibGVfbGFzdCggJmRpbS0+bWFza3MsIG1lbW9yeSwgJm1hc2sgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gcHNfbWFza19zZXRfYml0KCBtYXNrLCBpZHgsIG1lbW9yeSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZgorCisgIC8qIHNldCB0aGUgZW5kIHBvaW50IGluIGEgbWFzaywgY2FsbGVkIGZyb20gIkVuZCIgJiAiUmVzZXQiIG1ldGhvZHMgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfZGltZW5zaW9uX2VuZF9tYXNrKCBQU19EaW1lbnNpb24gIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGVuZF9wb2ludCApCisgIHsKKyAgICBGVF9VSW50ICBjb3VudCA9IGRpbS0+bWFza3MubnVtX21hc2tzOworCisKKyAgICBpZiAoIGNvdW50ID4gMCApCisgICAgeworICAgICAgUFNfTWFzayAgbWFzayA9IGRpbS0+bWFza3MubWFza3MgKyBjb3VudCAtIDE7CisKKworICAgICAgbWFzay0+ZW5kX3BvaW50ID0gZW5kX3BvaW50OworICAgIH0KKyAgfQorCisKKyAgLyogc2V0IHRoZSBlbmQgcG9pbnQgaW4gdGhlIGN1cnJlbnQgbWFzaywgdGhlbiBjcmVhdGUgYSBuZXcgZW1wdHkgb25lICovCisgIC8qIChjYWxsZWQgYnkgIlJlc2V0IiBtZXRob2QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfZGltZW5zaW9uX3Jlc2V0X21hc2soIFBTX0RpbWVuc2lvbiAgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBlbmRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSApCisgIHsKKyAgICBQU19NYXNrICBtYXNrOworCisKKyAgICAvKiBlbmQgY3VycmVudCBtYXNrICovCisgICAgcHNfZGltZW5zaW9uX2VuZF9tYXNrKCBkaW0sIGVuZF9wb2ludCApOworCisgICAgLyogYWxsb2NhdGUgbmV3IG9uZSAqLworICAgIHJldHVybiBwc19tYXNrX3RhYmxlX2FsbG9jKCAmZGltLT5tYXNrcywgbWVtb3J5LCAmbWFzayApOworICB9CisKKworICAvKiBzZXQgYSBuZXcgbWFzaywgY2FsbGVkIGZyb20gdGhlICJUMlN0ZW0iIG1ldGhvZCAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfZGltZW5zaW9uX3NldF9tYXNrX2JpdHMoIFBTX0RpbWVuc2lvbiAgICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIHNvdXJjZV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgc291cmNlX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZW5kX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIC8qIHJlc2V0IGN1cnJlbnQgbWFzaywgaWYgYW55ICovCisgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fcmVzZXRfbWFzayggZGltLCBlbmRfcG9pbnQsIG1lbW9yeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogc2V0IGJpdHMgaW4gbmV3IG1hc2sgKi8KKyAgICBlcnJvciA9IHBzX21hc2tfdGFibGVfc2V0X2JpdHMoICZkaW0tPm1hc2tzLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcG9zLCBzb3VyY2VfYml0cywgbWVtb3J5ICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGFkZCBhIG5ldyBzaW5nbGUgc3RlbSAoY2FsbGVkIGZyb20gIlQxU3RlbSIgbWV0aG9kKSAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcHNfZGltZW5zaW9uX2FkZF90MXN0ZW0oIFBTX0RpbWVuc2lvbiAgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICphaW5kZXggKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VJbnQgICBmbGFncyA9IDA7CisKKworICAgIC8qIGRldGVjdCBnaG9zdCBzdGVtICovCisgICAgaWYgKCBsZW4gPCAwICkKKyAgICB7CisgICAgICBmbGFncyB8PSBQU19ISU5UX0ZMQUdfR0hPU1Q7CisgICAgICBpZiAoIGxlbiA9PSAtMjEgKQorICAgICAgeworICAgICAgICBmbGFncyB8PSBQU19ISU5UX0ZMQUdfQk9UVE9NOworICAgICAgICBwb3MgICArPSBsZW47CisgICAgICB9CisgICAgICBsZW4gPSAwOworICAgIH0KKworICAgIGlmICggYWluZGV4ICkKKyAgICAgICphaW5kZXggPSAtMTsKKworICAgIC8qIG5vdywgbG9va3VwIHN0ZW0gaW4gdGhlIGN1cnJlbnQgaGludHMgdGFibGUgKi8KKyAgICB7CisgICAgICBQU19NYXNrICBtYXNrOworICAgICAgRlRfVUludCAgaWR4OworICAgICAgRlRfVUludCAgbWF4ICA9IGRpbS0+aGludHMubnVtX2hpbnRzOworICAgICAgUFNfSGludCAgaGludCA9IGRpbS0+aGludHMuaGludHM7CisKKworICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKywgaGludCsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBoaW50LT5wb3MgPT0gcG9zICYmIGhpbnQtPmxlbiA9PSBsZW4gKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBoaW50IGluIHRoZSB0YWJsZSAqLworICAgICAgaWYgKCBpZHggPj0gbWF4ICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBwc19oaW50X3RhYmxlX2FsbG9jKCAmZGltLT5oaW50cywgbWVtb3J5LCAmaGludCApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaGludC0+cG9zICAgPSBwb3M7CisgICAgICAgIGhpbnQtPmxlbiAgID0gbGVuOworICAgICAgICBoaW50LT5mbGFncyA9IGZsYWdzOworICAgICAgfQorCisgICAgICAvKiBub3csIHN0b3JlIHRoZSBoaW50IGluIHRoZSBjdXJyZW50IG1hc2sgKi8KKyAgICAgIGVycm9yID0gcHNfbWFza190YWJsZV9sYXN0KCAmZGltLT5tYXNrcywgbWVtb3J5LCAmbWFzayApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZXJyb3IgPSBwc19tYXNrX3NldF9iaXQoIG1hc2ssIGlkeCwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoIGFpbmRleCApCisgICAgICAgICphaW5kZXggPSAoRlRfSW50KWlkeDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGFkZCBhICJoc3RlbTMvdnN0ZW0zIiBjb3VudGVyIHRvIG91ciBkaW1lbnNpb24gdGFibGUgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX2RpbWVuc2lvbl9hZGRfY291bnRlciggUFNfRGltZW5zaW9uICBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBoaW50MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGhpbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgaGludDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yICAgPSBGVF9FcnJfT2s7CisgICAgRlRfVUludCAgIGNvdW50ICAgPSBkaW0tPmNvdW50ZXJzLm51bV9tYXNrczsKKyAgICBQU19NYXNrICAgY291bnRlciA9IGRpbS0+Y291bnRlcnMubWFza3M7CisKKworICAgIC8qIHRyeSB0byBmaW5kIGFuIGV4aXN0aW5nIGNvdW50ZXIgbWFzayB0aGF0IGFscmVhZHkgdXNlcyAqLworICAgIC8qIG9uZSBvZiB0aGVzZSBzdGVtcyBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBjb3VudGVyKysgKQorICAgIHsKKyAgICAgIGlmICggcHNfbWFza190ZXN0X2JpdCggY291bnRlciwgaGludDEgKSB8fAorICAgICAgICAgICBwc19tYXNrX3Rlc3RfYml0KCBjb3VudGVyLCBoaW50MiApIHx8CisgICAgICAgICAgIHBzX21hc2tfdGVzdF9iaXQoIGNvdW50ZXIsIGhpbnQzICkgKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgYSBuZXcgY291bnRlciB3aGVuIG5lZWRlZCAqLworICAgIGlmICggY291bnQgPT0gMCApCisgICAgeworICAgICAgZXJyb3IgPSBwc19tYXNrX3RhYmxlX2FsbG9jKCAmZGltLT5jb3VudGVycywgbWVtb3J5LCAmY291bnRlciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBub3csIHNldCB0aGUgYml0cyBmb3Igb3VyIGhpbnRzIGluIHRoZSBjb3VudGVyIG1hc2sgKi8KKyAgICBpZiAoIGhpbnQxID49IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gcHNfbWFza19zZXRfYml0KCBjb3VudGVyLCAoRlRfVUludCloaW50MSwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggaGludDIgPj0gMCApCisgICAgeworICAgICAgZXJyb3IgPSBwc19tYXNrX3NldF9iaXQoIGNvdW50ZXIsIChGVF9VSW50KWhpbnQyLCBtZW1vcnkgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBoaW50MyA+PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzX21hc2tfc2V0X2JpdCggY291bnRlciwgKEZUX1VJbnQpaGludDMsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGVuZCBvZiByZWNvcmRpbmcgc2Vzc2lvbiBmb3IgYSBnaXZlbiBkaW1lbnNpb24gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX2RpbWVuc2lvbl9lbmQoIFBTX0RpbWVuc2lvbiAgZGltLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGVuZF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgLyogZW5kIGhpbnQgbWFzayB0YWJsZSAqLworICAgIHBzX2RpbWVuc2lvbl9lbmRfbWFzayggZGltLCBlbmRfcG9pbnQgKTsKKworICAgIC8qIG1lcmdlIGFsbCBjb3VudGVyIG1hc2tzIGludG8gaW5kZXBlbmRlbnQgInBhdGhzIiAqLworICAgIHJldHVybiBwc19tYXNrX3RhYmxlX21lcmdlX2FsbCggJmRpbS0+Y291bnRlcnMsIG1lbW9yeSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgIFBTX1JFQ09SREVSIE1BTkFHRU1FTlQgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIGRlc3Ryb3kgaGludHMgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc19oaW50c19kb25lKCBQU19IaW50cyAgaGludHMgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OworCisKKyAgICBwc19kaW1lbnNpb25fZG9uZSggJmhpbnRzLT5kaW1lbnNpb25bMF0sIG1lbW9yeSApOworICAgIHBzX2RpbWVuc2lvbl9kb25lKCAmaGludHMtPmRpbWVuc2lvblsxXSwgbWVtb3J5ICk7CisKKyAgICBoaW50cy0+ZXJyb3IgID0gRlRfRXJyX09rOworICAgIGhpbnRzLT5tZW1vcnkgPSBOVUxMOworICB9CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX2hpbnRzX2luaXQoIFBTX0hpbnRzICAgaGludHMsCisgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX01FTV9aRVJPKCBoaW50cywgc2l6ZW9mICggKmhpbnRzICkgKTsKKyAgICBoaW50cy0+bWVtb3J5ID0gbWVtb3J5OworICB9CisKKworICAvKiBpbml0aWFsaXplIGEgaGludHMgZm9yIGEgbmV3IHNlc3Npb24gKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfaGludHNfb3BlbiggUFNfSGludHMgICAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgUFNfSGludF9UeXBlICBoaW50X3R5cGUgKQorICB7CisgICAgaGludHMtPmVycm9yICAgICA9IEZUX0Vycl9PazsKKyAgICBoaW50cy0+aGludF90eXBlID0gaGludF90eXBlOworCisgICAgcHNfZGltZW5zaW9uX2luaXQoICZoaW50cy0+ZGltZW5zaW9uWzBdICk7CisgICAgcHNfZGltZW5zaW9uX2luaXQoICZoaW50cy0+ZGltZW5zaW9uWzFdICk7CisgIH0KKworCisgIC8qIGFkZCBvbmUgb3IgbW9yZSBzdGVtcyB0byB0aGUgY3VycmVudCBoaW50cyB0YWJsZSAqLworICBzdGF0aWMgdm9pZAorICBwc19oaW50c19zdGVtKCBQU19IaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgRlRfTG9uZyogIHN0ZW1zICkKKyAgeworICAgIFBTX0RpbWVuc2lvbiAgZGltOworCisKKyAgICBpZiAoIGhpbnRzLT5lcnJvciApCisgICAgICByZXR1cm47CisKKyAgICAvKiBsaW1pdCAiZGltZW5zaW9uIiB0byAwLi4xICovCisgICAgaWYgKCBkaW1lbnNpb24gPiAxICkKKyAgICB7CisgICAgICBGVF9UUkFDRTAoKCAicHNfaGludHNfc3RlbTogaW52YWxpZCBkaW1lbnNpb24gKCVkKSB1c2VkXG4iLAorICAgICAgICAgICAgICAgICAgZGltZW5zaW9uICkpOworICAgICAgZGltZW5zaW9uID0gKCBkaW1lbnNpb24gIT0gMCApOworICAgIH0KKworICAgIC8qIHJlY29yZCB0aGUgc3RlbXMgaW4gdGhlIGN1cnJlbnQgaGludHMvbWFza3MgdGFibGUgKi8KKyAgICAvKiAoVHlwZSAxICYgMidzIGBoc3RlbScgb3IgYHZzdGVtJyBvcGVyYXRvcnMpICAgICAgICovCisgICAgZGltID0gJmhpbnRzLT5kaW1lbnNpb25bZGltZW5zaW9uXTsKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBzdGVtcyArPSAyICkKKyAgICB7CisgICAgICBGVF9FcnJvciAgIGVycm9yOworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OworCisKKyAgICAgIGVycm9yID0gcHNfZGltZW5zaW9uX2FkZF90MXN0ZW0oIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpc3RlbXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KXN0ZW1zWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInBzX2hpbnRzX3N0ZW06IGNvdWxkIG5vdCBhZGQgc3RlbSIKKyAgICAgICAgICAgICAgICAgICAiICglZCwlZCkgdG8gaGludHMgdGFibGVcbiIsIHN0ZW1zWzBdLCBzdGVtc1sxXSApKTsKKworICAgICAgICBoaW50cy0+ZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogYWRkIG9uZSBUeXBlMSBjb3VudGVyIHN0ZW0gdG8gdGhlIGN1cnJlbnQgaGludHMgdGFibGUgKi8KKyAgc3RhdGljIHZvaWQKKyAgcHNfaGludHNfdDFzdGVtMyggUFNfSGludHMgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgc3RlbXMgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoICFoaW50cy0+ZXJyb3IgKQorICAgIHsKKyAgICAgIFBTX0RpbWVuc2lvbiAgZGltOworICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OworICAgICAgRlRfSW50ICAgICAgICBjb3VudDsKKyAgICAgIEZUX0ludCAgICAgICAgaWR4WzNdOworCisKKyAgICAgIC8qIGxpbWl0ICJkaW1lbnNpb24iIHRvIDAuLjEgKi8KKyAgICAgIGlmICggZGltZW5zaW9uID4gMSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJwc19oaW50c190MXN0ZW0zOiBpbnZhbGlkIGRpbWVuc2lvbiAoJWQpIHVzZWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiApKTsKKyAgICAgICAgZGltZW5zaW9uID0gKCBkaW1lbnNpb24gIT0gMCApOworICAgICAgfQorCisgICAgICBkaW0gPSAmaGludHMtPmRpbWVuc2lvbltkaW1lbnNpb25dOworCisgICAgICAvKiB0aGVyZSBtdXN0IGJlIDYgZWxlbWVudHMgaW4gdGhlICdzdGVtJyBhcnJheSAqLworICAgICAgaWYgKCBoaW50cy0+aGludF90eXBlID09IFBTX0hJTlRfVFlQRV8xICkKKyAgICAgIHsKKyAgICAgICAgLyogYWRkIHRoZSB0aHJlZSBzdGVtcyB0byBvdXIgaGludHMvbWFza3MgdGFibGUgKi8KKyAgICAgICAgZm9yICggY291bnQgPSAwOyBjb3VudCA8IDM7IGNvdW50KyssIHN0ZW1zICs9IDIgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fYWRkX3Qxc3RlbSggZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpRklYRURfVE9fSU5UKCBzdGVtc1swXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpRklYRURfVE9fSU5UKCBzdGVtc1sxXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgJmlkeFtjb3VudF0gKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgYWRkIHRoZSBoaW50cyB0byB0aGUgY291bnRlcnMgdGFibGUgKi8KKyAgICAgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fYWRkX2NvdW50ZXIoIGRpbSwgaWR4WzBdLCBpZHhbMV0sIGlkeFsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInBzX2hpbnRzX3Qxc3RlbTM6IGNhbGxlZCB3aXRoIGludmFsaWQgaGludCB0eXBlXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm47CisKKyAgRmFpbDoKKyAgICBGVF9FUlJPUigoICJwc19oaW50c190MXN0ZW0zOiBjb3VsZCBub3QgYWRkIGNvdW50ZXIgc3RlbXMgdG8gdGFibGVcbiIgKSk7CisgICAgaGludHMtPmVycm9yID0gZXJyb3I7CisgIH0KKworCisgIC8qIHJlc2V0IGhpbnRzIChvbmx5IHdpdGggVHlwZSAxIGhpbnRzKSAqLworICBzdGF0aWMgdm9pZAorICBwc19oaW50c190MXJlc2V0KCBQU19IaW50cyAgaGludHMsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBlbmRfcG9pbnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoICFoaW50cy0+ZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gaGludHMtPm1lbW9yeTsKKworCisgICAgICBpZiAoIGhpbnRzLT5oaW50X3R5cGUgPT0gUFNfSElOVF9UWVBFXzEgKQorICAgICAgeworICAgICAgICBlcnJvciA9IHBzX2RpbWVuc2lvbl9yZXNldF9tYXNrKCAmaGludHMtPmRpbWVuc2lvblswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3BvaW50LCBtZW1vcnkgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGVycm9yID0gcHNfZGltZW5zaW9uX3Jlc2V0X21hc2soICZoaW50cy0+ZGltZW5zaW9uWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcG9pbnQsIG1lbW9yeSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGludmFsaWQgaGludCB0eXBlICovCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm47CisKKyAgRmFpbDoKKyAgICBoaW50cy0+ZXJyb3IgPSBlcnJvcjsKKyAgfQorCisKKyAgLyogVHlwZTIgImhpbnRtYXNrIiBvcGVyYXRvciwgYWRkIGEgbmV3IGhpbnRtYXNrIHRvIGVhY2ggZGlyZWN0aW9uICovCisgIHN0YXRpYyB2b2lkCisgIHBzX2hpbnRzX3QybWFzayggUFNfSGludHMgICAgICAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBlbmRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGJpdF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgYnl0ZXMgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICBpZiAoICFoaW50cy0+ZXJyb3IgKQorICAgIHsKKyAgICAgIFBTX0RpbWVuc2lvbiAgZGltICAgID0gaGludHMtPmRpbWVuc2lvbjsKKyAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gaGludHMtPm1lbW9yeTsKKyAgICAgIEZUX1VJbnQgICAgICAgY291bnQxID0gZGltWzBdLmhpbnRzLm51bV9oaW50czsKKyAgICAgIEZUX1VJbnQgICAgICAgY291bnQyID0gZGltWzFdLmhpbnRzLm51bV9oaW50czsKKworCisgICAgICAvKiBjaGVjayBiaXQgY291bnQ7IG11c3QgYmUgZXF1YWwgdG8gY3VycmVudCB0b3RhbCBoaW50IGNvdW50ICovCisgICAgICBpZiAoIGJpdF9jb3VudCAhPSAgY291bnQxICsgY291bnQyICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UwKCggInBzX2hpbnRzX3QybWFzazoiCisgICAgICAgICAgICAgICAgICAgICIgY2FsbGVkIHdpdGggaW52YWxpZCBiaXRjb3VudCAlZCAoaW5zdGVhZCBvZiAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgYml0X2NvdW50LCBjb3VudDEgKyBjb3VudDIgKSk7CisKKyAgICAgICAgLyogc2ltcGx5IGlnbm9yZSB0aGUgb3BlcmF0b3IgKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAvKiBzZXQtdXAgbmV3IGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGhpbnQgbWFzayBub3cgKi8KKyAgICAgIGVycm9yID0gcHNfZGltZW5zaW9uX3NldF9tYXNrX2JpdHMoICZkaW1bMF0sIGJ5dGVzLCBjb3VudDIsIGNvdW50MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9wb2ludCwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBlcnJvciA9IHBzX2RpbWVuc2lvbl9zZXRfbWFza19iaXRzKCAmZGltWzFdLCBieXRlcywgMCwgY291bnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3BvaW50LCBtZW1vcnkgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgfQorICAgIHJldHVybjsKKworICBGYWlsOgorICAgIGhpbnRzLT5lcnJvciA9IGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBwc19oaW50c190MmNvdW50ZXIoIFBTX0hpbnRzICAgICAgICBoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgYml0X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBieXRlcyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGlmICggIWhpbnRzLT5lcnJvciApCisgICAgeworICAgICAgUFNfRGltZW5zaW9uICBkaW0gICAgPSBoaW50cy0+ZGltZW5zaW9uOworICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OworICAgICAgRlRfVUludCAgICAgICBjb3VudDEgPSBkaW1bMF0uaGludHMubnVtX2hpbnRzOworICAgICAgRlRfVUludCAgICAgICBjb3VudDIgPSBkaW1bMV0uaGludHMubnVtX2hpbnRzOworCisKKyAgICAgIC8qIGNoZWNrIGJpdCBjb3VudCwgbXVzdCBiZSBlcXVhbCB0byBjdXJyZW50IHRvdGFsIGhpbnQgY291bnQgKi8KKyAgICAgIGlmICggYml0X2NvdW50ICE9ICBjb3VudDEgKyBjb3VudDIgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTAoKCAicHNfaGludHNfdDJjb3VudGVyOiIKKyAgICAgICAgICAgICAgICAgICAgIiBjYWxsZWQgd2l0aCBpbnZhbGlkIGJpdGNvdW50ICVkIChpbnN0ZWFkIG9mICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBiaXRfY291bnQsIGNvdW50MSArIGNvdW50MiApKTsKKworICAgICAgICAvKiBzaW1wbHkgaWdub3JlIHRoZSBvcGVyYXRvciAqLworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8qIHNldC11cCBuZXcgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgaGludCBtYXNrIG5vdyAqLworICAgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fc2V0X21hc2tfYml0cyggJmRpbVswXSwgYnl0ZXMsIDAsIGNvdW50MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fc2V0X21hc2tfYml0cyggJmRpbVsxXSwgYnl0ZXMsIGNvdW50MSwgY291bnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworICAgIH0KKyAgICByZXR1cm47CisKKyAgRmFpbDoKKyAgICBoaW50cy0+ZXJyb3IgPSBlcnJvcjsKKyAgfQorCisKKyAgLyogZW5kIHJlY29yZGluZyBzZXNzaW9uICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBwc19oaW50c19jbG9zZSggUFNfSGludHMgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGVuZF9wb2ludCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gaGludHMtPmVycm9yOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CisgICAgICBQU19EaW1lbnNpb24gIGRpbSAgICA9IGhpbnRzLT5kaW1lbnNpb247CisKKworICAgICAgZXJyb3IgPSBwc19kaW1lbnNpb25fZW5kKCAmZGltWzBdLCBlbmRfcG9pbnQsIG1lbW9yeSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBlcnJvciA9IHBzX2RpbWVuc2lvbl9lbmQoICZkaW1bMV0sIGVuZF9wb2ludCwgbWVtb3J5ICk7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgREVCVUdfSElOVEVSCisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgcHNfZGVidWdfaGludHMgPSBoaW50czsKKyNlbmRpZgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgIFRZUEUgMSBISU5UUyBSRUNPUkRJTkcgSU5URVJGQUNFICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgdDFfaGludHNfb3BlbiggVDFfSGludHMgIGhpbnRzICkKKyAgeworICAgIHBzX2hpbnRzX29wZW4oIChQU19IaW50cyloaW50cywgUFNfSElOVF9UWVBFXzEgKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkCisgIHQxX2hpbnRzX3N0ZW0oIFQxX0hpbnRzICAgaGludHMsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCisgIHsKKyAgICBGVF9Qb3MgIHN0ZW1zWzJdOworCisKKyAgICBzdGVtc1swXSA9IEZJWEVEX1RPX0lOVCggY29vcmRzWzBdICk7CisgICAgc3RlbXNbMV0gPSBGSVhFRF9UT19JTlQoIGNvb3Jkc1sxXSApOworCisgICAgcHNfaGludHNfc3RlbSggKFBTX0hpbnRzKWhpbnRzLCBkaW1lbnNpb24sIDEsIHN0ZW1zICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHQxX2hpbnRzX2Z1bmNzX2luaXQoIFQxX0hpbnRzX0Z1bmNzUmVjKiAgZnVuY3MgKQorICB7CisgICAgRlRfTUVNX1pFUk8oIChjaGFyKilmdW5jcywgc2l6ZW9mICggKmZ1bmNzICkgKTsKKworICAgIGZ1bmNzLT5vcGVuICA9IChUMV9IaW50c19PcGVuRnVuYykgICAgdDFfaGludHNfb3BlbjsKKyAgICBmdW5jcy0+Y2xvc2UgPSAoVDFfSGludHNfQ2xvc2VGdW5jKSAgIHBzX2hpbnRzX2Nsb3NlOworICAgIGZ1bmNzLT5zdGVtICA9IChUMV9IaW50c19TZXRTdGVtRnVuYykgdDFfaGludHNfc3RlbTsKKyAgICBmdW5jcy0+c3RlbTMgPSAoVDFfSGludHNfU2V0U3RlbTNGdW5jKXBzX2hpbnRzX3Qxc3RlbTM7CisgICAgZnVuY3MtPnJlc2V0ID0gKFQxX0hpbnRzX1Jlc2V0RnVuYykgICBwc19oaW50c190MXJlc2V0OworICAgIGZ1bmNzLT5hcHBseSA9IChUMV9IaW50c19BcHBseUZ1bmMpICAgcHNfaGludHNfYXBwbHk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICBUWVBFIDIgSElOVFMgUkVDT1JESU5HIElOVEVSRkFDRSAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyB2b2lkCisgIHQyX2hpbnRzX29wZW4oIFQyX0hpbnRzICBoaW50cyApCisgIHsKKyAgICBwc19oaW50c19vcGVuKCAoUFNfSGludHMpaGludHMsIFBTX0hJTlRfVFlQRV8yICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHQyX2hpbnRzX3N0ZW1zKCBUMl9IaW50cyAgIGhpbnRzLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKQorICB7CisgICAgRlRfUG9zICBzdGVtc1szMl0sIHk7CisgICAgRlRfSW50ICB0b3RhbCA9IGNvdW50LCBuOworCisKKyAgICB5ID0gMDsKKyAgICB3aGlsZSAoIHRvdGFsID4gMCApCisgICAgeworICAgICAgLyogZGV0ZXJtaW5lIG51bWJlciBvZiBzdGVtcyB0byB3cml0ZSAqLworICAgICAgY291bnQgPSB0b3RhbDsKKyAgICAgIGlmICggY291bnQgPiAxNiApCisgICAgICAgIGNvdW50ID0gMTY7CisKKyAgICAgIC8qIGNvbXB1dGUgaW50ZWdlciBzdGVtIHBvc2l0aW9ucyBpbiBmb250IHVuaXRzICovCisgICAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50ICogMjsgbisrICkKKyAgICAgIHsKKyAgICAgICAgeSAgICAgICArPSBjb29yZHNbbl07CisgICAgICAgIHN0ZW1zW25dID0gRklYRURfVE9fSU5UKCB5ICk7CisgICAgICB9CisKKyAgICAgIC8qIGNvbXB1dGUgbGVuZ3RocyAqLworICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudCAqIDI7IG4gKz0gMiApCisgICAgICAgIHN0ZW1zW24gKyAxXSA9IHN0ZW1zW24gKyAxXSAtIHN0ZW1zW25dOworCisgICAgICAvKiBhZGQgdGhlbSB0byB0aGUgY3VycmVudCBkaW1lbnNpb24gKi8KKyAgICAgIHBzX2hpbnRzX3N0ZW0oIChQU19IaW50cyloaW50cywgZGltZW5zaW9uLCBjb3VudCwgc3RlbXMgKTsKKworICAgICAgdG90YWwgLT0gY291bnQ7CisgICAgfQorICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0Ml9oaW50c19mdW5jc19pbml0KCBUMl9IaW50c19GdW5jc1JlYyogIGZ1bmNzICkKKyAgeworICAgIEZUX01FTV9aRVJPKCBmdW5jcywgc2l6ZW9mICggKmZ1bmNzICkgKTsKKworICAgIGZ1bmNzLT5vcGVuICAgID0gKFQyX0hpbnRzX09wZW5GdW5jKSAgIHQyX2hpbnRzX29wZW47CisgICAgZnVuY3MtPmNsb3NlICAgPSAoVDJfSGludHNfQ2xvc2VGdW5jKSAgcHNfaGludHNfY2xvc2U7CisgICAgZnVuY3MtPnN0ZW1zICAgPSAoVDJfSGludHNfU3RlbXNGdW5jKSAgdDJfaGludHNfc3RlbXM7CisgICAgZnVuY3MtPmhpbnRtYXNrPSAoVDJfSGludHNfTWFza0Z1bmMpICAgcHNfaGludHNfdDJtYXNrOworICAgIGZ1bmNzLT5jb3VudGVyID0gKFQyX0hpbnRzX0NvdW50ZXJGdW5jKXBzX2hpbnRzX3QyY291bnRlcjsKKyAgICBmdW5jcy0+YXBwbHkgICA9IChUMl9IaW50c19BcHBseUZ1bmMpICBwc19oaW50c19hcHBseTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc2hpbnRlci9wc2hyZWMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxYWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzaHJlYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQb3N0c2NyaXB0IChUeXBlMS9UeXBlMikgaGludHMgcmVjb3JkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBjYWxsZWQgZnJvbSB0aGUgVHlwZSAxLCBDSUQgYW5kIENGRiAgICAqLworICAvKiAgZm9udCBkcml2ZXJzIHRvIHJlY29yZCB0aGUgaGludHMgb2YgYSBnaXZlbiBjaGFyYWN0ZXIvZ2x5cGguICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoZSBoaW50cyBhcmUgcmVjb3JkZWQgaW4gYSB1bmlmaWVkIGZvcm1hdCwgYW5kIGFyZSBsYXRlciBwcm9jZXNzZWQgICAqLworICAvKiAgYnkgdGhlIGBvcHRpbWl6ZXInIGFuZCBgZml0dGVyJyB0byBhZGp1c3QgdGhlIG91dGxpbmVzIHRvIHRoZSBwaXhlbCAgICovCisgIC8qICBncmlkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1BTSFJFQ19IX18KKyNkZWZpbmUgX19QU0hSRUNfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKyNpbmNsdWRlICJwc2hnbG9iLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgIEdMWVBIIEhJTlRTIFJFQ09SREVSIElOVEVSTkFMUyAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBoYW5kbGUgdG8gaGludCByZWNvcmQgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgUFNfSGludFJlY18qICBQU19IaW50OworCisgIC8qIGhpbnQgdHlwZXMgKi8KKyAgdHlwZWRlZiBlbnVtICBQU19IaW50X1R5cGVfCisgIHsKKyAgICBQU19ISU5UX1RZUEVfMSA9IDEsCisgICAgUFNfSElOVF9UWVBFXzIgPSAyCisKKyAgfSBQU19IaW50X1R5cGU7CisKKworICAvKiBoaW50IGZsYWdzICovCisjZGVmaW5lIFBTX0hJTlRfRkxBR19HSE9TVCAgIDFVCisjZGVmaW5lIFBTX0hJTlRfRkxBR19CT1RUT00gIDJVCisKKworICAvKiBoaW50IGRlc2NyaXB0b3IgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0hpbnRSZWNfCisgIHsKKyAgICBGVF9JbnQgICBwb3M7CisgICAgRlRfSW50ICAgbGVuOworICAgIEZUX1VJbnQgIGZsYWdzOworCisgIH0gUFNfSGludFJlYzsKKworCisjZGVmaW5lIHBzX2hpbnRfaXNfYWN0aXZlKCB4ICkgICggKHgpLT5mbGFncyAmIFBTX0hJTlRfRkxBR19BQ1RJVkUgKQorI2RlZmluZSBwc19oaW50X2lzX2dob3N0KCB4ICkgICAoICh4KS0+ZmxhZ3MgJiBQU19ISU5UX0ZMQUdfR0hPU1QgICkKKyNkZWZpbmUgcHNfaGludF9pc19ib3R0b20oIHggKSAgKCAoeCktPmZsYWdzICYgUFNfSElOVF9GTEFHX0JPVFRPTSApCisKKworICAvKiBoaW50cyB0YWJsZSBkZXNjcmlwdG9yICovCisgIHR5cGVkZWYgc3RydWN0ICBQU19IaW50X1RhYmxlUmVjXworICB7CisgICAgRlRfVUludCAgbnVtX2hpbnRzOworICAgIEZUX1VJbnQgIG1heF9oaW50czsKKyAgICBQU19IaW50ICBoaW50czsKKworICB9IFBTX0hpbnRfVGFibGVSZWMsICpQU19IaW50X1RhYmxlOworCisKKyAgLyogaGludCBhbmQgY291bnRlciBtYXNrIGRlc2NyaXB0b3IgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX01hc2tSZWNfCisgIHsKKyAgICBGVF9VSW50ICAgbnVtX2JpdHM7CisgICAgRlRfVUludCAgIG1heF9iaXRzOworICAgIEZUX0J5dGUqICBieXRlczsKKyAgICBGVF9VSW50ICAgZW5kX3BvaW50OworCisgIH0gUFNfTWFza1JlYywgKlBTX01hc2s7CisKKworICAvKiBtYXNrcyBhbmQgY291bnRlcnMgdGFibGUgZGVzY3JpcHRvciAqLworICB0eXBlZGVmIHN0cnVjdCAgUFNfTWFza19UYWJsZVJlY18KKyAgeworICAgIEZUX1VJbnQgIG51bV9tYXNrczsKKyAgICBGVF9VSW50ICBtYXhfbWFza3M7CisgICAgUFNfTWFzayAgbWFza3M7CisKKyAgfSBQU19NYXNrX1RhYmxlUmVjLCAqUFNfTWFza19UYWJsZTsKKworCisgLyogZGltZW5zaW9uLXNwZWNpZmljIGhpbnRzIGRlc2NyaXB0b3IgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0RpbWVuc2lvblJlY18KKyAgeworICAgIFBTX0hpbnRfVGFibGVSZWMgIGhpbnRzOworICAgIFBTX01hc2tfVGFibGVSZWMgIG1hc2tzOworICAgIFBTX01hc2tfVGFibGVSZWMgIGNvdW50ZXJzOworCisgIH0gUFNfRGltZW5zaW9uUmVjLCAqUFNfRGltZW5zaW9uOworCisKKyAgLyogZ2x5cGggaGludHMgZGVzY3JpcHRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogZGltZW5zaW9uIDAgPT4gWCBjb29yZGluYXRlcyArIHZlcnRpY2FsIGhpbnRzL3N0ZW1zICAgKi8KKyAgLyogZGltZW5zaW9uIDEgPT4gWSBjb29yZGluYXRlcyArIGhvcml6b250YWwgaGludHMvc3RlbXMgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0hpbnRzUmVjXworICB7CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnk7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKyAgICBGVF9VSW50MzIgICAgICAgIG1hZ2ljOworICAgIFBTX0hpbnRfVHlwZSAgICAgaGludF90eXBlOworICAgIFBTX0RpbWVuc2lvblJlYyAgZGltZW5zaW9uWzJdOworCisgIH0gUFNfSGludHNSZWMsICpQU19IaW50czsKKworICAvKiAqLworCisgIC8qIGluaXRpYWxpemUgaGludHMgcmVjb3JkZXIgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICBwc19oaW50c19pbml0KCBQU19IaW50cyAgIGhpbnRzLAorICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIC8qIGZpbmFsaXplIGhpbnRzIHJlY29yZGVyICovCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcHNfaGludHNfZG9uZSggUFNfSGludHMgIGhpbnRzICk7CisKKyAgLyogaW5pdGlhbGl6ZSBUeXBlMSBoaW50cyByZWNvcmRlciBpbnRlcmZhY2UgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0MV9oaW50c19mdW5jc19pbml0KCBUMV9IaW50c19GdW5jc1JlYyogIGZ1bmNzICk7CisKKyAgLyogaW5pdGlhbGl6ZSBUeXBlMiBoaW50cyByZWNvcmRlciBpbnRlcmZhY2UgKi8KKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0Ml9oaW50c19mdW5jc19pbml0KCBUMl9IaW50c19GdW5jc1JlYyogIGZ1bmNzICk7CisKKworI2lmZGVmIERFQlVHX0hJTlRFUgorICBleHRlcm4gUFNfSGludHMgIHBzX2RlYnVnX2hpbnRzOworICBleHRlcm4gIGludCAgICAgIHBzX2RlYnVnX25vX2hvcnpfaGludHM7CisgIGV4dGVybiAgaW50ICAgICAgcHNfZGVidWdfbm9fdmVydF9oaW50czsKKyNlbmRpZgorCisgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fUFNfSElOVEVSX1JFQ09SRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcHNoaW50ZXIvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzhlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzaGludGVyL3J1bGVzLm1rCkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgRnJlZVR5cGUgMiBQU0hpbnRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBQU0hJTlRFUiBkcml2ZXIgZGlyZWN0b3J5CisjCitQU0hJTlRFUl9ESVIgOj0gJChTUkNfRElSKS9wc2hpbnRlcgorCisKKyMgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZSBkcml2ZXIKKyMKK1BTSElOVEVSX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChQU0hJTlRFUl9ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICQoSU5DTFVERV9GTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBQU0hJTlRFUiBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK1BTSElOVEVSX0RSVl9TUkMgOj0gJChQU0hJTlRFUl9ESVIpL3BzaGFsZ28uYyBcCisgICAgICAgICAgICAgICAgICAgICQoUFNISU5URVJfRElSKS9wc2hnbG9iLmMgXAorICAgICAgICAgICAgICAgICAgICAkKFBTSElOVEVSX0RJUikvcHNobW9kLmMgIFwKKyAgICAgICAgICAgICAgICAgICAgJChQU0hJTlRFUl9ESVIpL3BzaHBpYy5jICBcCisgICAgICAgICAgICAgICAgICAgICQoUFNISU5URVJfRElSKS9wc2hyZWMuYworCisKKyMgUFNISU5URVIgZHJpdmVyIGhlYWRlcnMKKyMKK1BTSElOVEVSX0RSVl9IIDo9ICQoUFNISU5URVJfRFJWX1NSQzolYz0laCkgXAorICAgICAgICAgICAgICAgICAgJChQU0hJTlRFUl9ESVIpL3BzaG50ZXJyLmgKKworCisjIFBTSElOVEVSIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBQU0hJTlRFUl9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMuCisjICAgUFNISU5URVJfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcy4KKyMKK1BTSElOVEVSX0RSVl9PQkpfTSA6PSAkKFBTSElOVEVSX0RSVl9TUkM6JChQU0hJTlRFUl9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitQU0hJTlRFUl9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9wc2hpbnRlci4kTworCisjIFBTSElOVEVSIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitQU0hJTlRFUl9EUlZfU1JDX1MgOj0gJChQU0hJTlRFUl9ESVIpL3BzaGludGVyLmMKKworCisjIFBTSElOVEVSIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoUFNISU5URVJfRFJWX09CSl9TKTogJChQU0hJTlRFUl9EUlZfU1JDX1MpICQoUFNISU5URVJfRFJWX1NSQykgXAorICAgICAgICAgICAgICAgICAgICAgICAkKEZSRUVUWVBFX0gpICQoUFNISU5URVJfRFJWX0gpCisJJChQU0hJTlRFUl9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChQU0hJTlRFUl9EUlZfU1JDX1MpKQorCisKKyMgUFNISU5URVIgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKFBTSElOVEVSX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChQU0hJTlRFUl9EUlZfSCkKKwkkKFBTSElOVEVSX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChQU0hJTlRFUl9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoUFNISU5URVJfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZmUyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL3BzbmFtZXMgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHBzbmFtZXMgOworCit7CisgIGxvY2FsICBfc291cmNlcyA7CisKKyAgaWYgJChGVDJfTVVMVEkpCisgIHsKKyAgICBfc291cmNlcyA9IHBzbW9kdWxlIHBzcGljIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHBzbmFtZXMgOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIGVuZCBvZiBzcmMvcHNuYW1lcyBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL21vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzA4ZjYwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgUFNuYW1lcyBtb2R1bGUgZGVmaW5pdGlvbgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBQU05BTUVTX01PRFVMRQorCitkZWZpbmUgUFNOQU1FU19NT0RVTEUKKyQoT1BFTl9EUklWRVIpIEZUX01vZHVsZV9DbGFzcywgcHNuYW1lc19tb2R1bGVfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXBzbmFtZXMgICAkKEVDSE9fRFJJVkVSX0RFU0MpUG9zdHNjcmlwdCAmIFVuaWNvZGUgR2x5cGggbmFtZSBoYW5kbGluZyQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDRjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYwpAQCAtMCwwICsxLDYwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNtb2R1bGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBTTmFtZXMgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKworI2luY2x1ZGUgInBzbW9kdWxlLmgiCisjaW5jbHVkZSAicHN0YWJsZXMuaCIKKworI2luY2x1ZGUgInBzbmFtZXJyLmgiCisjaW5jbHVkZSAicHNwaWMuaCIKKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVAorCisKKyNkZWZpbmUgVkFSSUFOVF9CSVQgICAgICAgICAweDgwMDAwMDAwVUwKKyNkZWZpbmUgQkFTRV9HTFlQSCggY29kZSApICAoIChGVF9VSW50MzIpKCAoY29kZSkgJiB+VkFSSUFOVF9CSVQgKSApCisKKworICAvKiBSZXR1cm4gdGhlIFVuaWNvZGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGdseXBoLiAgTm90ZSB0aGF0ICovCisgIC8qIHdlIGRvIGRlYWwgd2l0aCBnbHlwaCB2YXJpYW50cyBieSBkZXRlY3RpbmcgYSBub24taW5pdGlhbCBkb3QgaW4gICAgKi8KKyAgLyogdGhlIG5hbWUsIGFzIGluIGBBLnN3YXNoJyBvciBgZS5maW5hbCc7IGluIHRoaXMgY2FzZSwgdGhlICAgICAgICAgICAqLworICAvKiBWQVJJQU5UX0JJVCBpcyBzZXQgaW4gdGhlIHJldHVybiB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX1VJbnQzMgorICBwc191bmljb2RlX3ZhbHVlKCBjb25zdCBjaGFyKiAgZ2x5cGhfbmFtZSApCisgIHsKKyAgICAvKiBJZiB0aGUgbmFtZSBiZWdpbnMgd2l0aCBgdW5pJywgdGhlbiB0aGUgZ2x5cGggbmFtZSBtYXkgYmUgYSAqLworICAgIC8qIGhhcmQtY29kZWQgdW5pY29kZSBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBnbHlwaF9uYW1lWzBdID09ICd1JyAmJgorICAgICAgICAgZ2x5cGhfbmFtZVsxXSA9PSAnbicgJiYKKyAgICAgICAgIGdseXBoX25hbWVbMl0gPT0gJ2knICkKKyAgICB7CisgICAgICAvKiBkZXRlcm1pbmUgd2hldGhlciB0aGUgbmV4dCBmb3VyIGNoYXJhY3RlcnMgZm9sbG93aW5nIGFyZSAqLworICAgICAgLyogaGV4YWRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogWFhYOiBBZGQgY29kZSB0byBkZWFsIHdpdGggbGlnYXR1cmVzLCBpLmUuIGdseXBoIG5hbWVzIGxpa2UgKi8KKyAgICAgIC8qICAgICAgYHVuaVhYWFhZWVlZWlpaWicuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIEZUX0ludCAgICAgICBjb3VudDsKKyAgICAgIEZUX1VJbnQzMiAgICB2YWx1ZSA9IDA7CisgICAgICBjb25zdCBjaGFyKiAgcCAgICAgPSBnbHlwaF9uYW1lICsgMzsKKworCisgICAgICBmb3IgKCBjb3VudCA9IDQ7IGNvdW50ID4gMDsgY291bnQtLSwgcCsrICkKKyAgICAgIHsKKyAgICAgICAgY2hhciAgICAgICAgICBjID0gKnA7CisgICAgICAgIHVuc2lnbmVkIGludCAgZDsKKworCisgICAgICAgIGQgPSAodW5zaWduZWQgY2hhciljIC0gJzAnOworICAgICAgICBpZiAoIGQgPj0gMTAgKQorICAgICAgICB7CisgICAgICAgICAgZCA9ICh1bnNpZ25lZCBjaGFyKWMgLSAnQSc7CisgICAgICAgICAgaWYgKCBkID49IDYgKQorICAgICAgICAgICAgZCA9IDE2OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGQgKz0gMTA7CisgICAgICAgIH0KKworICAgICAgICAvKiBFeGl0IGlmIGEgbm9uLXVwcGVyY2FzZSBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgd2FzIGZvdW5kICAgKi8KKyAgICAgICAgLyogLS0gdGhpcyBhbHNvIGNhdGNoZXMgY2hhcmFjdGVyIGNvZGVzIGJlbG93IGAwJyBzaW5jZSBzdWNoICovCisgICAgICAgIC8qIG5lZ2F0aXZlIG51bWJlcnMgY2FzdCB0byBgdW5zaWduZWQgaW50JyBhcmUgZmFyIHRvbyBiaWcuICAqLworICAgICAgICBpZiAoIGQgPj0gMTYgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHZhbHVlID0gKCB2YWx1ZSA8PCA0ICkgKyBkOworICAgICAgfQorCisgICAgICAvKiB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgZm91ciBoZXggZGlnaXRzICovCisgICAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgeworICAgICAgICBpZiAoICpwID09ICdcMCcgKQorICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgaWYgKCAqcCA9PSAnLicgKQorICAgICAgICAgIHJldHVybiAoRlRfVUludDMyKSggdmFsdWUgfCBWQVJJQU5UX0JJVCApOworICAgICAgfQorICAgIH0KKworICAgIC8qIElmIHRoZSBuYW1lIGJlZ2lucyB3aXRoIGB1JywgZm9sbG93ZWQgYnkgZm91ciB0byBzaXggdXBwZXJjYXNlICovCisgICAgLyogaGV4YWRlY2ltYWwgZGlnaXRzLCBpdCBpcyBhIGhhcmQtY29kZWQgdW5pY29kZSBjaGFyYWN0ZXIgY29kZS4gKi8KKyAgICBpZiAoIGdseXBoX25hbWVbMF0gPT0gJ3UnICkKKyAgICB7CisgICAgICBGVF9JbnQgICAgICAgY291bnQ7CisgICAgICBGVF9VSW50MzIgICAgdmFsdWUgPSAwOworICAgICAgY29uc3QgY2hhciogIHAgICAgID0gZ2x5cGhfbmFtZSArIDE7CisKKworICAgICAgZm9yICggY291bnQgPSA2OyBjb3VudCA+IDA7IGNvdW50LS0sIHArKyApCisgICAgICB7CisgICAgICAgIGNoYXIgICAgICAgICAgYyA9ICpwOworICAgICAgICB1bnNpZ25lZCBpbnQgIGQ7CisKKworICAgICAgICBkID0gKHVuc2lnbmVkIGNoYXIpYyAtICcwJzsKKyAgICAgICAgaWYgKCBkID49IDEwICkKKyAgICAgICAgeworICAgICAgICAgIGQgPSAodW5zaWduZWQgY2hhciljIC0gJ0EnOworICAgICAgICAgIGlmICggZCA+PSA2ICkKKyAgICAgICAgICAgIGQgPSAxNjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkICs9IDEwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkID49IDE2ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICB2YWx1ZSA9ICggdmFsdWUgPDwgNCApICsgZDsKKyAgICAgIH0KKworICAgICAgaWYgKCBjb3VudCA8PSAyICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAqcCA9PSAnXDAnICkKKyAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIGlmICggKnAgPT0gJy4nICkKKyAgICAgICAgICByZXR1cm4gKEZUX1VJbnQzMikoIHZhbHVlIHwgVkFSSUFOVF9CSVQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBMb29rIGZvciBhIG5vbi1pbml0aWFsIGRvdCBpbiB0aGUgZ2x5cGggbmFtZSBpbiBvcmRlciB0byAqLworICAgIC8qIGZpbmQgdmFyaWFudHMgbGlrZSBgQS5zd2FzaCcsIGBlLmZpbmFsJywgZXRjLiAgICAgICAgICAgICovCisgICAgeworICAgICAgY29uc3QgY2hhciogIHAgICA9IGdseXBoX25hbWU7CisgICAgICBjb25zdCBjaGFyKiAgZG90ID0gTlVMTDsKKworCisgICAgICBmb3IgKCA7ICpwOyBwKysgKQorICAgICAgeworICAgICAgICBpZiAoICpwID09ICcuJyAmJiBwID4gZ2x5cGhfbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICBkb3QgPSBwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBsb29rIHVwIHRoZSBnbHlwaCBpbiB0aGUgQWRvYmUgR2x5cGggTGlzdCAqLworICAgICAgaWYgKCAhZG90ICkKKyAgICAgICAgcmV0dXJuIChGVF9VSW50MzIpZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4KCBnbHlwaF9uYW1lLCBwICk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAoRlRfVUludDMyKSggZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4KCBnbHlwaF9uYW1lLCBkb3QgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSSUFOVF9CSVQgKTsKKyAgICB9CisgIH0KKworCisgIC8qIGZ0X3Fzb3J0IGNhbGxiYWNrIHRvIHNvcnQgdGhlIHVuaWNvZGUgbWFwICovCisgIEZUX0NBTExCQUNLX0RFRiggaW50ICkKKyAgY29tcGFyZV91bmlfbWFwcyggY29uc3Qgdm9pZCogIGEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBiICkKKyAgeworICAgIFBTX1VuaU1hcCogIG1hcDEgPSAoUFNfVW5pTWFwKilhOworICAgIFBTX1VuaU1hcCogIG1hcDIgPSAoUFNfVW5pTWFwKiliOworICAgIEZUX1VJbnQzMiAgIHVuaWNvZGUxID0gQkFTRV9HTFlQSCggbWFwMS0+dW5pY29kZSApOworICAgIEZUX1VJbnQzMiAgIHVuaWNvZGUyID0gQkFTRV9HTFlQSCggbWFwMi0+dW5pY29kZSApOworCisKKyAgICAvKiBzb3J0IGJhc2UgZ2x5cGhzIGJlZm9yZSBnbHlwaCB2YXJpYW50cyAqLworICAgIGlmICggdW5pY29kZTEgPT0gdW5pY29kZTIgKQorICAgIHsKKyAgICAgIGlmICggbWFwMS0+dW5pY29kZSA+IG1hcDItPnVuaWNvZGUgKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UgaWYgKCBtYXAxLT51bmljb2RlIDwgbWFwMi0+dW5pY29kZSApCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHVuaWNvZGUxID4gdW5pY29kZTIgKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UgaWYgKCB1bmljb2RlMSA8IHVuaWNvZGUyICkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworCisgIC8qIHN1cHBvcnQgZm9yIGV4dHJhIGdseXBocyBub3QgaGFuZGxlZCAod2VsbCkgaW4gQUdMOyAqLworICAvKiB3ZSBhZGQgZXh0cmEgbWFwcGluZ3MgZm9yIHRoZW0gaWYgbmVjZXNzYXJ5ICAgICAgICAgKi8KKworI2RlZmluZSBFWFRSQV9HTFlQSF9MSVNUX1NJWkUgIDEwCisKKyAgc3RhdGljIGNvbnN0IEZUX1VJbnQzMiAgZnRfZXh0cmFfZ2x5cGhfdW5pY29kZXNbRVhUUkFfR0xZUEhfTElTVF9TSVpFXSA9CisgIHsKKyAgICAvKiBXR0wgNCAqLworICAgIDB4MDM5NCwKKyAgICAweDAzQTksCisgICAgMHgyMjE1LAorICAgIDB4MDBBRCwKKyAgICAweDAyQzksCisgICAgMHgwM0JDLAorICAgIDB4MjIxOSwKKyAgICAweDAwQTAsCisgICAgLyogUm9tYW5pYW4gKi8KKyAgICAweDAyMUEsCisgICAgMHgwMjFCCisgIH07CisKKyAgc3RhdGljIGNvbnN0IGNoYXIgIGZ0X2V4dHJhX2dseXBoX25hbWVzW10gPQorICB7CisgICAgJ0QnLCdlJywnbCcsJ3QnLCdhJywwLAorICAgICdPJywnbScsJ2UnLCdnJywnYScsMCwKKyAgICAnZicsJ3InLCdhJywnYycsJ3QnLCdpJywnbycsJ24nLDAsCisgICAgJ2gnLCd5JywncCcsJ2gnLCdlJywnbicsMCwKKyAgICAnbScsJ2EnLCdjJywncicsJ28nLCduJywwLAorICAgICdtJywndScsMCwKKyAgICAncCcsJ2UnLCdyJywnaScsJ28nLCdkJywnYycsJ2UnLCduJywndCcsJ2UnLCdyJywnZScsJ2QnLDAsCisgICAgJ3MnLCdwJywnYScsJ2MnLCdlJywwLAorICAgICdUJywnYycsJ28nLCdtJywnbScsJ2EnLCdhJywnYycsJ2MnLCdlJywnbicsJ3QnLDAsCisgICAgJ3QnLCdjJywnbycsJ20nLCdtJywnYScsJ2EnLCdjJywnYycsJ2UnLCduJywndCcsMAorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9JbnQKKyAgZnRfZXh0cmFfZ2x5cGhfbmFtZV9vZmZzZXRzW0VYVFJBX0dMWVBIX0xJU1RfU0laRV0gPQorICB7CisgICAgIDAsCisgICAgIDYsCisgICAgMTIsCisgICAgMjEsCisgICAgMjgsCisgICAgMzUsCisgICAgMzgsCisgICAgNTMsCisgICAgNTksCisgICAgNzIKKyAgfTsKKworCisgIHN0YXRpYyB2b2lkCisgIHBzX2NoZWNrX2V4dHJhX2dseXBoX25hbWUoIGNvbnN0IGNoYXIqICBnbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50KiAgICAgZXh0cmFfZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAqc3RhdGVzICkKKyAgeworICAgIEZUX1VJbnQgIG47CisKKworICAgIGZvciAoIG4gPSAwOyBuIDwgRVhUUkFfR0xZUEhfTElTVF9TSVpFOyBuKysgKQorICAgIHsKKyAgICAgIGlmICggZnRfc3RyY21wKCBmdF9leHRyYV9nbHlwaF9uYW1lcyArCisgICAgICAgICAgICAgICAgICAgICAgICBmdF9leHRyYV9nbHlwaF9uYW1lX29mZnNldHNbbl0sIGduYW1lICkgPT0gMCApCisgICAgICB7CisgICAgICAgIGlmICggc3RhdGVzW25dID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgLyogbWFyayB0aGlzIGV4dHJhIGdseXBoIGFzIGEgY2FuZGlkYXRlIGZvciB0aGUgY21hcCAqLworICAgICAgICAgIHN0YXRlc1tuXSAgICAgPSAxOworICAgICAgICAgIGV4dHJhX2dseXBoc1tuXSA9IGdseXBoOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgcHNfY2hlY2tfZXh0cmFfZ2x5cGhfdW5pY29kZSggRlRfVUludDMyICB1bmlfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICpzdGF0ZXMgKQorICB7CisgICAgRlRfVUludCAgbjsKKworCisgICAgZm9yICggbiA9IDA7IG4gPCBFWFRSQV9HTFlQSF9MSVNUX1NJWkU7IG4rKyApCisgICAgeworICAgICAgaWYgKCB1bmlfY2hhciA9PSBmdF9leHRyYV9nbHlwaF91bmljb2Rlc1tuXSApCisgICAgICB7CisgICAgICAgIC8qIGRpc2FibGUgdGhpcyBleHRyYSBnbHlwaCBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjbWFwICovCisgICAgICAgIHN0YXRlc1tuXSA9IDI7CisKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogQnVpbGQgYSB0YWJsZSB0aGF0IG1hcHMgVW5pY29kZSB2YWx1ZXMgdG8gZ2x5cGggaW5kaWNlcy4gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHBzX3VuaWNvZGVzX2luaXQoIEZUX01lbW9yeSAgICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIFBTX1VuaWNvZGVzICAgICAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICAgIG51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgIFBTX0dldEdseXBoTmFtZUZ1bmMgICBnZXRfZ2x5cGhfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgUFNfRnJlZUdseXBoTmFtZUZ1bmMgIGZyZWVfZ2x5cGhfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICAgICAgIGdseXBoX2RhdGEgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisgICAgRlRfVUludCAgZXh0cmFfZ2x5cGhfbGlzdF9zdGF0ZXNbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICAgIEZUX1VJbnQgIGV4dHJhX2dseXBoc1tFWFRSQV9HTFlQSF9MSVNUX1NJWkVdOworCisKKyAgICAvKiB3ZSBmaXJzdCBhbGxvY2F0ZSB0aGUgdGFibGUgKi8KKyAgICB0YWJsZS0+bnVtX21hcHMgPSAwOworICAgIHRhYmxlLT5tYXBzICAgICA9IE5VTEw7CisKKyAgICBpZiAoICFGVF9ORVdfQVJSQVkoIHRhYmxlLT5tYXBzLCBudW1fZ2x5cGhzICsgRVhUUkFfR0xZUEhfTElTVF9TSVpFICkgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICAgIG47CisgICAgICBGVF9VSW50ICAgICBjb3VudDsKKyAgICAgIFBTX1VuaU1hcCogIG1hcDsKKyAgICAgIEZUX1VJbnQzMiAgIHVuaV9jaGFyOworCisKKyAgICAgIG1hcCA9IHRhYmxlLT5tYXBzOworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9nbHlwaHM7IG4rKyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBnbmFtZSA9IGdldF9nbHlwaF9uYW1lKCBnbHlwaF9kYXRhLCBuICk7CisKKworICAgICAgICBpZiAoIGduYW1lICkKKyAgICAgICAgeworICAgICAgICAgIHBzX2NoZWNrX2V4dHJhX2dseXBoX25hbWUoIGduYW1lLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2dseXBocywgZXh0cmFfZ2x5cGhfbGlzdF9zdGF0ZXMgKTsKKyAgICAgICAgICB1bmlfY2hhciA9IHBzX3VuaWNvZGVfdmFsdWUoIGduYW1lICk7CisKKyAgICAgICAgICBpZiAoIEJBU0VfR0xZUEgoIHVuaV9jaGFyICkgIT0gMCApCisgICAgICAgICAgeworICAgICAgICAgICAgcHNfY2hlY2tfZXh0cmFfZ2x5cGhfdW5pY29kZSggdW5pX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9nbHlwaF9saXN0X3N0YXRlcyApOworICAgICAgICAgICAgbWFwLT51bmljb2RlICAgICA9IHVuaV9jaGFyOworICAgICAgICAgICAgbWFwLT5nbHlwaF9pbmRleCA9IG47CisgICAgICAgICAgICBtYXArKzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIGZyZWVfZ2x5cGhfbmFtZSApCisgICAgICAgICAgICBmcmVlX2dseXBoX25hbWUoIGdseXBoX2RhdGEsIGduYW1lICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZm9yICggbiA9IDA7IG4gPCBFWFRSQV9HTFlQSF9MSVNUX1NJWkU7IG4rKyApCisgICAgICB7CisgICAgICAgIGlmICggZXh0cmFfZ2x5cGhfbGlzdF9zdGF0ZXNbbl0gPT0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGlzIGdseXBoIG5hbWUgaGFzIGFuIGFkZGl0aW9uYWwgcmVwcmVzZW50YXRpb24uICovCisgICAgICAgICAgLyogQWRkIGl0IHRvIHRoZSBjbWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgbWFwLT51bmljb2RlICAgICA9IGZ0X2V4dHJhX2dseXBoX3VuaWNvZGVzW25dOworICAgICAgICAgIG1hcC0+Z2x5cGhfaW5kZXggPSBleHRyYV9nbHlwaHNbbl07CisgICAgICAgICAgbWFwKys7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogbm93IGNvbXByZXNzIHRoZSB0YWJsZSBhIGJpdCAqLworICAgICAgY291bnQgPSAoRlRfVUludCkoIG1hcCAtIHRhYmxlLT5tYXBzICk7CisKKyAgICAgIGlmICggY291bnQgPT0gMCApCisgICAgICB7CisgICAgICAgIC8qIE5vIHVuaWNvZGUgY2hhcnMgaGVyZSEgKi8KKyAgICAgICAgRlRfRlJFRSggdGFibGUtPm1hcHMgKTsKKyAgICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIE5vX1VuaWNvZGVfR2x5cGhfTmFtZSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBSZWFsbG9jYXRlIGlmIHRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIG11Y2ggc21hbGxlci4gKi8KKyAgICAgICAgaWYgKCBjb3VudCA8IG51bV9nbHlwaHMgLyAyICkKKyAgICAgICAgeworICAgICAgICAgICh2b2lkKUZUX1JFTkVXX0FSUkFZKCB0YWJsZS0+bWFwcywgbnVtX2dseXBocywgY291bnQgKTsKKyAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNvcnQgdGhlIHRhYmxlIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgdW5pY29kZSB2YWx1ZXMsICovCisgICAgICAgIC8qIHRha2luZyBjYXJlIG9mIGdseXBoIHZhcmlhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGZ0X3Fzb3J0KCB0YWJsZS0+bWFwcywgY291bnQsIHNpemVvZiAoIFBTX1VuaU1hcCApLAorICAgICAgICAgICAgICAgICAgY29tcGFyZV91bmlfbWFwcyApOworICAgICAgfQorCisgICAgICB0YWJsZS0+bnVtX21hcHMgPSBjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHBzX3VuaWNvZGVzX2NoYXJfaW5kZXgoIFBTX1VuaWNvZGVzICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHVuaWNvZGUgKQorICB7CisgICAgUFNfVW5pTWFwICAqbWluLCAqbWF4LCAqbWlkLCAqcmVzdWx0ID0gTlVMTDsKKworCisgICAgLyogUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRhYmxlLiAqLworCisgICAgbWluID0gdGFibGUtPm1hcHM7CisgICAgbWF4ID0gbWluICsgdGFibGUtPm51bV9tYXBzIC0gMTsKKworICAgIHdoaWxlICggbWluIDw9IG1heCApCisgICAgeworICAgICAgRlRfVUludDMyICBiYXNlX2dseXBoOworCisKKyAgICAgIG1pZCA9IG1pbiArICggKCBtYXggLSBtaW4gKSA+PiAxICk7CisKKyAgICAgIGlmICggbWlkLT51bmljb2RlID09IHVuaWNvZGUgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBtaWQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBiYXNlX2dseXBoID0gQkFTRV9HTFlQSCggbWlkLT51bmljb2RlICk7CisKKyAgICAgIGlmICggYmFzZV9nbHlwaCA9PSB1bmljb2RlICkKKyAgICAgICAgcmVzdWx0ID0gbWlkOyAvKiByZW1lbWJlciBtYXRjaCBidXQgY29udGludWUgc2VhcmNoIGZvciBiYXNlIGdseXBoICovCisKKyAgICAgIGlmICggbWluID09IG1heCApCisgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIGJhc2VfZ2x5cGggPCB1bmljb2RlICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWF4ID0gbWlkIC0gMTsKKyAgICB9CisKKyAgICBpZiAoIHJlc3VsdCApCisgICAgICByZXR1cm4gcmVzdWx0LT5nbHlwaF9pbmRleDsKKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQzMgorICBwc191bmljb2Rlc19jaGFyX25leHQoIFBTX1VuaWNvZGVzICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAqdW5pY29kZSApCisgIHsKKyAgICBGVF9VSW50ICAgIHJlc3VsdCAgICA9IDA7CisgICAgRlRfVUludDMyICBjaGFyX2NvZGUgPSAqdW5pY29kZSArIDE7CisKKworICAgIHsKKyAgICAgIEZUX1VJbnQgICAgIG1pbiA9IDA7CisgICAgICBGVF9VSW50ICAgICBtYXggPSB0YWJsZS0+bnVtX21hcHM7CisgICAgICBGVF9VSW50ICAgICBtaWQ7CisgICAgICBQU19VbmlNYXAqICBtYXA7CisgICAgICBGVF9VSW50MzIgICBiYXNlX2dseXBoOworCisKKyAgICAgIHdoaWxlICggbWluIDwgbWF4ICkKKyAgICAgIHsKKyAgICAgICAgbWlkID0gbWluICsgKCAoIG1heCAtIG1pbiApID4+IDEgKTsKKyAgICAgICAgbWFwID0gdGFibGUtPm1hcHMgKyBtaWQ7CisKKyAgICAgICAgaWYgKCBtYXAtPnVuaWNvZGUgPT0gY2hhcl9jb2RlICkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IG1hcC0+Z2x5cGhfaW5kZXg7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgYmFzZV9nbHlwaCA9IEJBU0VfR0xZUEgoIG1hcC0+dW5pY29kZSApOworCisgICAgICAgIGlmICggYmFzZV9nbHlwaCA9PSBjaGFyX2NvZGUgKQorICAgICAgICAgIHJlc3VsdCA9IG1hcC0+Z2x5cGhfaW5kZXg7CisKKyAgICAgICAgaWYgKCBiYXNlX2dseXBoIDwgY2hhcl9jb2RlICkKKyAgICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgICAgICBlbHNlCisgICAgICAgICAgbWF4ID0gbWlkOworICAgICAgfQorCisgICAgICBpZiAoIHJlc3VsdCApCisgICAgICAgIGdvdG8gRXhpdDsgICAgICAgICAgICAgICAvKiB3ZSBoYXZlIGEgdmFyaWFudCBnbHlwaCAqLworCisgICAgICAvKiB3ZSBkaWRuJ3QgZmluZCBpdDsgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgbWFwIGp1c3QgYWJvdmUgaXQgKi8KKyAgICAgIGNoYXJfY29kZSA9IDA7CisKKyAgICAgIGlmICggbWluIDwgdGFibGUtPm51bV9tYXBzICkKKyAgICAgIHsKKyAgICAgICAgbWFwICAgICAgID0gdGFibGUtPm1hcHMgKyBtaW47CisgICAgICAgIHJlc3VsdCAgICA9IG1hcC0+Z2x5cGhfaW5kZXg7CisgICAgICAgIGNoYXJfY29kZSA9IEJBU0VfR0xZUEgoIG1hcC0+dW5pY29kZSApOworICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgICp1bmljb2RlID0gY2hhcl9jb2RlOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUICovCisKKworICBzdGF0aWMgY29uc3QgY2hhcioKKyAgcHNfZ2V0X21hY2ludG9zaF9uYW1lKCBGVF9VSW50ICBuYW1lX2luZGV4ICkKKyAgeworICAgIGlmICggbmFtZV9pbmRleCA+PSBGVF9OVU1fTUFDX05BTUVTICkKKyAgICAgIG5hbWVfaW5kZXggPSAwOworCisgICAgcmV0dXJuIGZ0X3N0YW5kYXJkX2dseXBoX25hbWVzICsgZnRfbWFjX25hbWVzW25hbWVfaW5kZXhdOworICB9CisKKworICBzdGF0aWMgY29uc3QgY2hhcioKKyAgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MoIEZUX1VJbnQgIHNpZCApCisgIHsKKyAgICBpZiAoIHNpZCA+PSBGVF9OVU1fU0lEX05BTUVTICkKKyAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZ0X3N0YW5kYXJkX2dseXBoX25hbWVzICsgZnRfc2lkX25hbWVzW3NpZF07CisgIH0KKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfUFNDTUFQU1JFQygKKyAgICBwc2NtYXBzX2ludGVyZmFjZSwKKyAgICAoUFNfVW5pY29kZV9WYWx1ZUZ1bmMpICAgICBwc191bmljb2RlX3ZhbHVlLAorICAgIChQU19Vbmljb2Rlc19Jbml0RnVuYykgICAgIHBzX3VuaWNvZGVzX2luaXQsCisgICAgKFBTX1VuaWNvZGVzX0NoYXJJbmRleEZ1bmMpcHNfdW5pY29kZXNfY2hhcl9pbmRleCwKKyAgICAoUFNfVW5pY29kZXNfQ2hhck5leHRGdW5jKSBwc191bmljb2Rlc19jaGFyX25leHQsCisKKyAgICAoUFNfTWFjaW50b3NoX05hbWVGdW5jKSAgICBwc19nZXRfbWFjaW50b3NoX25hbWUsCisgICAgKFBTX0Fkb2JlX1N0ZF9TdHJpbmdzRnVuYykgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MsCisKKyAgICB0MV9zdGFuZGFyZF9lbmNvZGluZywKKyAgICB0MV9leHBlcnRfZW5jb2RpbmcgKQorCisjZWxzZQorCisgIEZUX0RFRklORV9TRVJWSUNFX1BTQ01BUFNSRUMoCisgICAgcHNjbWFwc19pbnRlcmZhY2UsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKworICAgIChQU19NYWNpbnRvc2hfTmFtZUZ1bmMpICAgIHBzX2dldF9tYWNpbnRvc2hfbmFtZSwKKyAgICAoUFNfQWRvYmVfU3RkX1N0cmluZ3NGdW5jKSBwc19nZXRfc3RhbmRhcmRfc3RyaW5ncywKKworICAgIHQxX3N0YW5kYXJkX2VuY29kaW5nLAorICAgIHQxX2V4cGVydF9lbmNvZGluZyApCisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0FET0JFX0dMWVBIX0xJU1QgKi8KKworCisgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzEoCisgICAgcHNjbWFwc19zZXJ2aWNlcywKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfQ01BUFMsICZQU0NNQVBTX0lOVEVSRkFDRV9HRVQgKQorCisKKyAgc3RhdGljIEZUX1BvaW50ZXIKKyAgcHNuYW1lc19nZXRfc2VydmljZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHNlcnZpY2VfaWQgKQorICB7CisgICAgLyogUFNDTUFQU19TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKworCisgICAgaWYgKCAhbW9kdWxlICkKKyAgICAgIHJldHVybiBOVUxMOworICAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gTlVMTDsKKyNlbHNlCisgICAgRlRfVU5VU0VEKCBtb2R1bGUgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIFBTQ01BUFNfU0VSVklDRVNfR0VULCBzZXJ2aWNlX2lkICk7CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLworCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisjZGVmaW5lIFBVVF9QU19OQU1FU19TRVJWSUNFKCBhICkgIE5VTEwKKyNlbHNlCisjZGVmaW5lIFBVVF9QU19OQU1FU19TRVJWSUNFKCBhICkgIGEKKyNlbmRpZgorCisgIEZUX0RFRklORV9NT0RVTEUoCisgICAgcHNuYW1lc19tb2R1bGVfY2xhc3MsCisKKyAgICAwLCAgLyogdGhpcyBpcyBub3QgYSBmb250IGRyaXZlciwgbm9yIGEgcmVuZGVyZXIgKi8KKyAgICBzaXplb2YgKCBGVF9Nb2R1bGVSZWMgKSwKKworICAgICJwc25hbWVzIiwgIC8qIGRyaXZlciBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgMHgxMDAwMEwsICAgLyogZHJpdmVyIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDIwMDAwTCwgICAvKiBkcml2ZXIgcmVxdWlyZXMgRnJlZVR5cGUgMiBvciBhYm92ZSAqLworCisgICAgUFVUX1BTX05BTUVTX1NFUlZJQ0UoCisgICAgICAodm9pZCopJlBTQ01BUFNfSU5URVJGQUNFX0dFVCApLCAgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKyAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKU5VTEwsCisgICAgKEZUX01vZHVsZV9EZXN0cnVjdG9yKSBOVUxMLAorICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgUFVUX1BTX05BTUVTX1NFUlZJQ0UoIHBzbmFtZXNfZ2V0X3NlcnZpY2UgKSApCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NWYzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc21vZHVsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSGlnaC1sZXZlbCBQU05hbWVzIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QU01PRFVMRV9IX18KKyNkZWZpbmUgX19QU01PRFVMRV9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX01PRFVMRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9ERUNMQVJFX01PRFVMRSggcHNuYW1lc19tb2R1bGVfY2xhc3MgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUFNNT0RVTEVfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc25hbWVyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2MyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaApAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc25hbWVyci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUFMgbmFtZXMgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFBTIG5hbWVzIG1vZHVsZSBlcnJvciBlbnVtZXJhdGlvbiAgICAgKi8KKyAgLyogY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1BTTkFNRVJSX0hfXworI2RlZmluZSBfX1BTTkFNRVJSX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBQU25hbWVzX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9QU25hbWVzCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX1BTTkFNRVJSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3BzbmFtZXMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzODU5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc25hbWVzLmMKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNuYW1lcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBTTmFtZXMgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAicHNwaWMuYyIKKyNpbmNsdWRlICJwc21vZHVsZS5jIgorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3BzcGljLmMgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNwaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk0Zjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3BzcGljLmMKQEAgLTAsMCArMSw5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc25hbWVzIG1vZHVsZS4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgInBzcGljLmgiCisjaW5jbHVkZSAicHNuYW1lcnIuaCIKKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHBzbW9kdWxlLmMgKi8KKyAgRlRfRXJyb3IKKyAgRlRfQ3JlYXRlX0NsYXNzX3BzY21hcHNfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKTsKKyAgdm9pZAorICBGVF9EZXN0cm95X0NsYXNzX3BzY21hcHNfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICk7CisKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX3BzY21hcHNfaW50ZXJmYWNlKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX1BzQ01hcHNSZWMqICBjbGF6eiApOworCisKKyAgdm9pZAorICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBpZiAoIHBpY19jb250YWluZXItPnBzbmFtZXMgKQorICAgIHsKKyAgICAgIFBTTW9kdWxlUElDKiAgY29udGFpbmVyID0gKFBTTW9kdWxlUElDKilwaWNfY29udGFpbmVyLT5wc25hbWVzOworCisKKyAgICAgIGlmICggY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzICkKKyAgICAgICAgRlRfRGVzdHJveV9DbGFzc19wc2NtYXBzX3NlcnZpY2VzKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+cHNjbWFwc19zZXJ2aWNlcyApOworICAgICAgY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzID0gTlVMTDsKKyAgICAgIEZUX0ZSRUUoIGNvbnRhaW5lciApOworICAgICAgcGljX2NvbnRhaW5lci0+cHNuYW1lcyA9IE5VTEw7CisgICAgfQorICB9CisKKworICBGVF9FcnJvcgorICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIFBTTW9kdWxlUElDKiAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KKyAgICBpZiAoIEZUX0FMTE9DKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOworICAgIHBpY19jb250YWluZXItPnBzbmFtZXMgPSBjb250YWluZXI7CisKKyAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KKyAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19wc2NtYXBzX3NlcnZpY2VzKAorICAgICAgICAgICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisgICAgRlRfSW5pdF9DbGFzc19wc2NtYXBzX2ludGVyZmFjZSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyLT5wc2NtYXBzX2ludGVyZmFjZSApOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3BzcGljLmggYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHNwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGNjZGEzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3BzcGljLmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc25hbWVzIG1vZHVsZS4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUFNQSUNfSF9fCisjZGVmaW5lIF9fUFNQSUNfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBQU0NNQVBTX1NFUlZJQ0VTX0dFVCAgIHBzY21hcHNfc2VydmljZXMKKyNkZWZpbmUgUFNDTUFQU19JTlRFUkZBQ0VfR0VUICBwc2NtYXBzX2ludGVyZmFjZQorCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorCisgIHR5cGVkZWYgc3RydWN0ICBQU01vZHVsZVBJQ18KKyAgeworICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgcHNjbWFwc19zZXJ2aWNlczsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHNSZWMgIHBzY21hcHNfaW50ZXJmYWNlOworCisgIH0gUFNNb2R1bGVQSUM7CisKKworI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoUFNNb2R1bGVQSUMqKSgobGliKS0+cGljX2NvbnRhaW5lci5wc25hbWVzKSApCisjZGVmaW5lIFBTQ01BUFNfU0VSVklDRVNfR0VUICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnBzY21hcHNfc2VydmljZXMgKQorI2RlZmluZSBQU0NNQVBTX0lOVEVSRkFDRV9HRVQgICggR0VUX1BJQyggbGlicmFyeSApLT5wc2NtYXBzX2ludGVyZmFjZSApCisKKworICAvKiBzZWUgcHNwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCisgIHZvaWQKKyAgcHNuYW1lc19tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUFNQSUNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzFjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaApAQCAtMCwwICsxLDQxNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzdGFibGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQb3N0U2NyaXB0IGdseXBoIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgLS0gZG8gbm90IGVkaXQhICovCisKKworICBzdGF0aWMgY29uc3QgY2hhciAgZnRfc3RhbmRhcmRfZ2x5cGhfbmFtZXNbMzY5Nl0gPQorICB7CisgICAgJy4nLCduJywndScsJ2wnLCdsJywgMCwKKyAgICAnbicsJ28nLCduJywnbScsJ2EnLCdyJywnaycsJ2knLCduJywnZycsJ3InLCdlJywndCcsJ3UnLCdyJywnbicsIDAsCisgICAgJ24nLCdvJywndCcsJ2UnLCdxJywndScsJ2EnLCdsJywgMCwKKyAgICAnaScsJ24nLCdmJywnaScsJ24nLCdpJywndCcsJ3knLCAwLAorICAgICdsJywnZScsJ3MnLCdzJywnZScsJ3EnLCd1JywnYScsJ2wnLCAwLAorICAgICdnJywncicsJ2UnLCdhJywndCcsJ2UnLCdyJywnZScsJ3EnLCd1JywnYScsJ2wnLCAwLAorICAgICdwJywnYScsJ3InLCd0JywnaScsJ2EnLCdsJywnZCcsJ2knLCdmJywnZicsIDAsCisgICAgJ3MnLCd1JywnbScsJ20nLCdhJywndCcsJ2knLCdvJywnbicsIDAsCisgICAgJ3AnLCdyJywnbycsJ2QnLCd1JywnYycsJ3QnLCAwLAorICAgICdwJywnaScsIDAsCisgICAgJ2knLCduJywndCcsJ2UnLCdnJywncicsJ2EnLCdsJywgMCwKKyAgICAnTycsJ20nLCdlJywnZycsJ2EnLCAwLAorICAgICdyJywnYScsJ2QnLCdpJywnYycsJ2EnLCdsJywgMCwKKyAgICAnYScsJ3AnLCdwJywncicsJ28nLCd4JywnZScsJ3EnLCd1JywnYScsJ2wnLCAwLAorICAgICdEJywnZScsJ2wnLCd0JywnYScsIDAsCisgICAgJ24nLCdvJywnbicsJ2InLCdyJywnZScsJ2EnLCdrJywnaScsJ24nLCdnJywncycsJ3AnLCdhJywnYycsJ2UnLCAwLAorICAgICdsJywnbycsJ3onLCdlJywnbicsJ2cnLCdlJywgMCwKKyAgICAnYScsJ3AnLCdwJywnbCcsJ2UnLCAwLAorICAgICdmJywncicsJ2EnLCduJywnYycsIDAsCisgICAgJ0cnLCdiJywncicsJ2UnLCd2JywnZScsIDAsCisgICAgJ2cnLCdiJywncicsJ2UnLCd2JywnZScsIDAsCisgICAgJ0knLCdkJywnbycsJ3QnLCdhJywnYycsJ2MnLCdlJywnbicsJ3QnLCAwLAorICAgICdTJywnYycsJ2UnLCdkJywnaScsJ2wnLCdsJywnYScsIDAsCisgICAgJ3MnLCdjJywnZScsJ2QnLCdpJywnbCcsJ2wnLCdhJywgMCwKKyAgICAnQycsJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAnYycsJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAnQycsJ2MnLCdhJywncicsJ28nLCduJywgMCwKKyAgICAnYycsJ2MnLCdhJywncicsJ28nLCduJywgMCwKKyAgICAnZCcsJ2MnLCdyJywnbycsJ2EnLCd0JywgMCwKKyAgICAnLicsJ24nLCdvJywndCcsJ2QnLCdlJywnZicsIDAsCisgICAgJ3MnLCdwJywnYScsJ2MnLCdlJywgMCwKKyAgICAnZScsJ3gnLCdjJywnbCcsJ2EnLCdtJywgMCwKKyAgICAncScsJ3UnLCdvJywndCcsJ2UnLCdkJywnYicsJ2wnLCAwLAorICAgICduJywndScsJ20nLCdiJywnZScsJ3InLCdzJywnaScsJ2cnLCduJywgMCwKKyAgICAnZCcsJ28nLCdsJywnbCcsJ2EnLCdyJywgMCwKKyAgICAncCcsJ2UnLCdyJywnYycsJ2UnLCduJywndCcsIDAsCisgICAgJ2EnLCdtJywncCcsJ2UnLCdyJywncycsJ2EnLCduJywnZCcsIDAsCisgICAgJ3EnLCd1JywnbycsJ3QnLCdlJywncicsJ2knLCdnJywnaCcsJ3QnLCAwLAorICAgICdwJywnYScsJ3InLCdlJywnbicsJ2wnLCdlJywnZicsJ3QnLCAwLAorICAgICdwJywnYScsJ3InLCdlJywnbicsJ3InLCdpJywnZycsJ2gnLCd0JywgMCwKKyAgICAnYScsJ3MnLCd0JywnZScsJ3InLCdpJywncycsJ2snLCAwLAorICAgICdwJywnbCcsJ3UnLCdzJywgMCwKKyAgICAnYycsJ28nLCdtJywnbScsJ2EnLCAwLAorICAgICdoJywneScsJ3AnLCdoJywnZScsJ24nLCAwLAorICAgICdwJywnZScsJ3InLCdpJywnbycsJ2QnLCAwLAorICAgICdzJywnbCcsJ2EnLCdzJywnaCcsIDAsCisgICAgJ3onLCdlJywncicsJ28nLCAwLAorICAgICdvJywnbicsJ2UnLCAwLAorICAgICd0JywndycsJ28nLCAwLAorICAgICd0JywnaCcsJ3InLCdlJywnZScsIDAsCisgICAgJ2YnLCdvJywndScsJ3InLCAwLAorICAgICdmJywnaScsJ3YnLCdlJywgMCwKKyAgICAncycsJ2knLCd4JywgMCwKKyAgICAncycsJ2UnLCd2JywnZScsJ24nLCAwLAorICAgICdlJywnaScsJ2cnLCdoJywndCcsIDAsCisgICAgJ24nLCdpJywnbicsJ2UnLCAwLAorICAgICdjJywnbycsJ2wnLCdvJywnbicsIDAsCisgICAgJ3MnLCdlJywnbScsJ2knLCdjJywnbycsJ2wnLCdvJywnbicsIDAsCisgICAgJ2wnLCdlJywncycsJ3MnLCAwLAorICAgICdlJywncScsJ3UnLCdhJywnbCcsIDAsCisgICAgJ2cnLCdyJywnZScsJ2EnLCd0JywnZScsJ3InLCAwLAorICAgICdxJywndScsJ2UnLCdzJywndCcsJ2knLCdvJywnbicsIDAsCisgICAgJ2EnLCd0JywgMCwKKyAgICAnQScsIDAsCisgICAgJ0InLCAwLAorICAgICdDJywgMCwKKyAgICAnRCcsIDAsCisgICAgJ0UnLCAwLAorICAgICdGJywgMCwKKyAgICAnRycsIDAsCisgICAgJ0gnLCAwLAorICAgICdJJywgMCwKKyAgICAnSicsIDAsCisgICAgJ0snLCAwLAorICAgICdMJywgMCwKKyAgICAnTScsIDAsCisgICAgJ04nLCAwLAorICAgICdPJywgMCwKKyAgICAnUCcsIDAsCisgICAgJ1EnLCAwLAorICAgICdSJywgMCwKKyAgICAnUycsIDAsCisgICAgJ1QnLCAwLAorICAgICdVJywgMCwKKyAgICAnVicsIDAsCisgICAgJ1cnLCAwLAorICAgICdYJywgMCwKKyAgICAnWScsIDAsCisgICAgJ1onLCAwLAorICAgICdiJywncicsJ2EnLCdjJywnaycsJ2UnLCd0JywnbCcsJ2UnLCdmJywndCcsIDAsCisgICAgJ2InLCdhJywnYycsJ2snLCdzJywnbCcsJ2EnLCdzJywnaCcsIDAsCisgICAgJ2InLCdyJywnYScsJ2MnLCdrJywnZScsJ3QnLCdyJywnaScsJ2cnLCdoJywndCcsIDAsCisgICAgJ2EnLCdzJywnYycsJ2knLCdpJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywgMCwKKyAgICAndScsJ24nLCdkJywnZScsJ3InLCdzJywnYycsJ28nLCdyJywnZScsIDAsCisgICAgJ3EnLCd1JywnbycsJ3QnLCdlJywnbCcsJ2UnLCdmJywndCcsIDAsCisgICAgJ2EnLCAwLAorICAgICdiJywgMCwKKyAgICAnYycsIDAsCisgICAgJ2QnLCAwLAorICAgICdlJywgMCwKKyAgICAnZicsIDAsCisgICAgJ2cnLCAwLAorICAgICdoJywgMCwKKyAgICAnaScsIDAsCisgICAgJ2onLCAwLAorICAgICdrJywgMCwKKyAgICAnbCcsIDAsCisgICAgJ20nLCAwLAorICAgICduJywgMCwKKyAgICAnbycsIDAsCisgICAgJ3AnLCAwLAorICAgICdxJywgMCwKKyAgICAncicsIDAsCisgICAgJ3MnLCAwLAorICAgICd0JywgMCwKKyAgICAndScsIDAsCisgICAgJ3YnLCAwLAorICAgICd3JywgMCwKKyAgICAneCcsIDAsCisgICAgJ3knLCAwLAorICAgICd6JywgMCwKKyAgICAnYicsJ3InLCdhJywnYycsJ2UnLCdsJywnZScsJ2YnLCd0JywgMCwKKyAgICAnYicsJ2EnLCdyJywgMCwKKyAgICAnYicsJ3InLCdhJywnYycsJ2UnLCdyJywnaScsJ2cnLCdoJywndCcsIDAsCisgICAgJ2EnLCdzJywnYycsJ2knLCdpJywndCcsJ2knLCdsJywnZCcsJ2UnLCAwLAorICAgICdlJywneCcsJ2MnLCdsJywnYScsJ20nLCdkJywnbycsJ3cnLCduJywgMCwKKyAgICAnYycsJ2UnLCduJywndCcsIDAsCisgICAgJ3MnLCd0JywnZScsJ3InLCdsJywnaScsJ24nLCdnJywgMCwKKyAgICAnZicsJ3InLCdhJywnYycsJ3QnLCdpJywnbycsJ24nLCAwLAorICAgICd5JywnZScsJ24nLCAwLAorICAgICdmJywnbCcsJ28nLCdyJywnaScsJ24nLCAwLAorICAgICdzJywnZScsJ2MnLCd0JywnaScsJ28nLCduJywgMCwKKyAgICAnYycsJ3UnLCdyJywncicsJ2UnLCduJywnYycsJ3knLCAwLAorICAgICdxJywndScsJ28nLCd0JywnZScsJ3MnLCdpJywnbicsJ2cnLCdsJywnZScsIDAsCisgICAgJ3EnLCd1JywnbycsJ3QnLCdlJywnZCcsJ2InLCdsJywnbCcsJ2UnLCdmJywndCcsIDAsCisgICAgJ2cnLCd1JywnaScsJ2wnLCdsJywnZScsJ20nLCdvJywndCcsJ2wnLCdlJywnZicsJ3QnLCAwLAorICAgICdnJywndScsJ2knLCdsJywncycsJ2knLCduJywnZycsJ2wnLCdsJywnZScsJ2YnLCd0JywgMCwKKyAgICAnZycsJ3UnLCdpJywnbCcsJ3MnLCdpJywnbicsJ2cnLCdsJywncicsJ2knLCdnJywnaCcsJ3QnLCAwLAorICAgICdmJywnaScsIDAsCisgICAgJ2YnLCdsJywgMCwKKyAgICAnZScsJ24nLCdkJywnYScsJ3MnLCdoJywgMCwKKyAgICAnZCcsJ2EnLCdnJywnZycsJ2UnLCdyJywgMCwKKyAgICAnZCcsJ2EnLCdnJywnZycsJ2UnLCdyJywnZCcsJ2InLCdsJywgMCwKKyAgICAncCcsJ2UnLCdyJywnaScsJ28nLCdkJywnYycsJ2UnLCduJywndCcsJ2UnLCdyJywnZScsJ2QnLCAwLAorICAgICdwJywnYScsJ3InLCdhJywnZycsJ3InLCdhJywncCcsJ2gnLCAwLAorICAgICdiJywndScsJ2wnLCdsJywnZScsJ3QnLCAwLAorICAgICdxJywndScsJ28nLCd0JywnZScsJ3MnLCdpJywnbicsJ2cnLCdsJywnYicsJ2EnLCdzJywnZScsIDAsCisgICAgJ3EnLCd1JywnbycsJ3QnLCdlJywnZCcsJ2InLCdsJywnYicsJ2EnLCdzJywnZScsIDAsCisgICAgJ3EnLCd1JywnbycsJ3QnLCdlJywnZCcsJ2InLCdsJywncicsJ2knLCdnJywnaCcsJ3QnLCAwLAorICAgICdnJywndScsJ2knLCdsJywnbCcsJ2UnLCdtJywnbycsJ3QnLCdyJywnaScsJ2cnLCdoJywndCcsIDAsCisgICAgJ2UnLCdsJywnbCcsJ2knLCdwJywncycsJ2knLCdzJywgMCwKKyAgICAncCcsJ2UnLCdyJywndCcsJ2gnLCdvJywndScsJ3MnLCdhJywnbicsJ2QnLCAwLAorICAgICdxJywndScsJ2UnLCdzJywndCcsJ2knLCdvJywnbicsJ2QnLCdvJywndycsJ24nLCAwLAorICAgICdnJywncicsJ2EnLCd2JywnZScsIDAsCisgICAgJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsIDAsCisgICAgJ3QnLCdpJywnbCcsJ2QnLCdlJywgMCwKKyAgICAnbScsJ2EnLCdjJywncicsJ28nLCduJywgMCwKKyAgICAnYicsJ3InLCdlJywndicsJ2UnLCAwLAorICAgICdkJywnbycsJ3QnLCdhJywnYycsJ2MnLCdlJywnbicsJ3QnLCAwLAorICAgICdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ3InLCdpJywnbicsJ2cnLCAwLAorICAgICdjJywnZScsJ2QnLCdpJywnbCcsJ2wnLCdhJywgMCwKKyAgICAnaCcsJ3UnLCduJywnZycsJ2EnLCdyJywndScsJ20nLCdsJywnYScsJ3UnLCd0JywgMCwKKyAgICAnbycsJ2cnLCdvJywnbicsJ2UnLCdrJywgMCwKKyAgICAnYycsJ2EnLCdyJywnbycsJ24nLCAwLAorICAgICdlJywnbScsJ2QnLCdhJywncycsJ2gnLCAwLAorICAgICdBJywnRScsIDAsCisgICAgJ28nLCdyJywnZCcsJ2YnLCdlJywnbScsJ2knLCduJywnaScsJ24nLCdlJywgMCwKKyAgICAnTCcsJ3MnLCdsJywnYScsJ3MnLCdoJywgMCwKKyAgICAnTycsJ3MnLCdsJywnYScsJ3MnLCdoJywgMCwKKyAgICAnTycsJ0UnLCAwLAorICAgICdvJywncicsJ2QnLCdtJywnYScsJ3MnLCdjJywndScsJ2wnLCdpJywnbicsJ2UnLCAwLAorICAgICdhJywnZScsIDAsCisgICAgJ2QnLCdvJywndCcsJ2wnLCdlJywncycsJ3MnLCdpJywgMCwKKyAgICAnbCcsJ3MnLCdsJywnYScsJ3MnLCdoJywgMCwKKyAgICAnbycsJ3MnLCdsJywnYScsJ3MnLCdoJywgMCwKKyAgICAnbycsJ2UnLCAwLAorICAgICdnJywnZScsJ3InLCdtJywnYScsJ24nLCdkJywnYicsJ2wnLCdzJywgMCwKKyAgICAnbycsJ24nLCdlJywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdsJywnbycsJ2cnLCdpJywnYycsJ2EnLCdsJywnbicsJ28nLCd0JywgMCwKKyAgICAnbScsJ3UnLCAwLAorICAgICd0JywncicsJ2EnLCdkJywnZScsJ20nLCdhJywncicsJ2snLCAwLAorICAgICdFJywndCcsJ2gnLCAwLAorICAgICdvJywnbicsJ2UnLCdoJywnYScsJ2wnLCdmJywgMCwKKyAgICAncCcsJ2wnLCd1JywncycsJ20nLCdpJywnbicsJ3UnLCdzJywgMCwKKyAgICAnVCcsJ2gnLCdvJywncicsJ24nLCAwLAorICAgICdvJywnbicsJ2UnLCdxJywndScsJ2EnLCdyJywndCcsJ2UnLCdyJywgMCwKKyAgICAnZCcsJ2knLCd2JywnaScsJ2QnLCdlJywgMCwKKyAgICAnYicsJ3InLCdvJywnaycsJ2UnLCduJywnYicsJ2EnLCdyJywgMCwKKyAgICAnZCcsJ2UnLCdnJywncicsJ2UnLCdlJywgMCwKKyAgICAndCcsJ2gnLCdvJywncicsJ24nLCAwLAorICAgICd0JywnaCcsJ3InLCdlJywnZScsJ3EnLCd1JywnYScsJ3InLCd0JywnZScsJ3InLCdzJywgMCwKKyAgICAndCcsJ3cnLCdvJywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdyJywnZScsJ2cnLCdpJywncycsJ3QnLCdlJywncicsJ2UnLCdkJywgMCwKKyAgICAnbScsJ2knLCduJywndScsJ3MnLCAwLAorICAgICdlJywndCcsJ2gnLCAwLAorICAgICdtJywndScsJ2wnLCd0JywnaScsJ3AnLCdsJywneScsIDAsCisgICAgJ3QnLCdoJywncicsJ2UnLCdlJywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdjJywnbycsJ3AnLCd5JywncicsJ2knLCdnJywnaCcsJ3QnLCAwLAorICAgICdBJywnYScsJ2MnLCd1JywndCcsJ2UnLCAwLAorICAgICdBJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsIDAsCisgICAgJ0EnLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ0EnLCdnJywncicsJ2EnLCd2JywnZScsIDAsCisgICAgJ0EnLCdyJywnaScsJ24nLCdnJywgMCwKKyAgICAnQScsJ3QnLCdpJywnbCcsJ2QnLCdlJywgMCwKKyAgICAnQycsJ2MnLCdlJywnZCcsJ2knLCdsJywnbCcsJ2EnLCAwLAorICAgICdFJywnYScsJ2MnLCd1JywndCcsJ2UnLCAwLAorICAgICdFJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsIDAsCisgICAgJ0UnLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ0UnLCdnJywncicsJ2EnLCd2JywnZScsIDAsCisgICAgJ0knLCdhJywnYycsJ3UnLCd0JywnZScsIDAsCisgICAgJ0knLCdjJywnaScsJ3InLCdjJywndScsJ20nLCdmJywnbCcsJ2UnLCd4JywgMCwKKyAgICAnSScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywgMCwKKyAgICAnSScsJ2cnLCdyJywnYScsJ3YnLCdlJywgMCwKKyAgICAnTicsJ3QnLCdpJywnbCcsJ2QnLCdlJywgMCwKKyAgICAnTycsJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAnTycsJ2MnLCdpJywncicsJ2MnLCd1JywnbScsJ2YnLCdsJywnZScsJ3gnLCAwLAorICAgICdPJywnZCcsJ2knLCdlJywncicsJ2UnLCdzJywnaScsJ3MnLCAwLAorICAgICdPJywnZycsJ3InLCdhJywndicsJ2UnLCAwLAorICAgICdPJywndCcsJ2knLCdsJywnZCcsJ2UnLCAwLAorICAgICdTJywnYycsJ2EnLCdyJywnbycsJ24nLCAwLAorICAgICdVJywnYScsJ2MnLCd1JywndCcsJ2UnLCAwLAorICAgICdVJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsIDAsCisgICAgJ1UnLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ1UnLCdnJywncicsJ2EnLCd2JywnZScsIDAsCisgICAgJ1knLCdhJywnYycsJ3UnLCd0JywnZScsIDAsCisgICAgJ1knLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ1onLCdjJywnYScsJ3InLCdvJywnbicsIDAsCisgICAgJ2EnLCdhJywnYycsJ3UnLCd0JywnZScsIDAsCisgICAgJ2EnLCdjJywnaScsJ3InLCdjJywndScsJ20nLCdmJywnbCcsJ2UnLCd4JywgMCwKKyAgICAnYScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywgMCwKKyAgICAnYScsJ2cnLCdyJywnYScsJ3YnLCdlJywgMCwKKyAgICAnYScsJ3InLCdpJywnbicsJ2cnLCAwLAorICAgICdhJywndCcsJ2knLCdsJywnZCcsJ2UnLCAwLAorICAgICdjJywnYycsJ2UnLCdkJywnaScsJ2wnLCdsJywnYScsIDAsCisgICAgJ2UnLCdhJywnYycsJ3UnLCd0JywnZScsIDAsCisgICAgJ2UnLCdjJywnaScsJ3InLCdjJywndScsJ20nLCdmJywnbCcsJ2UnLCd4JywgMCwKKyAgICAnZScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywgMCwKKyAgICAnZScsJ2cnLCdyJywnYScsJ3YnLCdlJywgMCwKKyAgICAnaScsJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAnaScsJ2MnLCdpJywncicsJ2MnLCd1JywnbScsJ2YnLCdsJywnZScsJ3gnLCAwLAorICAgICdpJywnZCcsJ2knLCdlJywncicsJ2UnLCdzJywnaScsJ3MnLCAwLAorICAgICdpJywnZycsJ3InLCdhJywndicsJ2UnLCAwLAorICAgICduJywndCcsJ2knLCdsJywnZCcsJ2UnLCAwLAorICAgICdvJywnYScsJ2MnLCd1JywndCcsJ2UnLCAwLAorICAgICdvJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsIDAsCisgICAgJ28nLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsIDAsCisgICAgJ28nLCdnJywncicsJ2EnLCd2JywnZScsIDAsCisgICAgJ28nLCd0JywnaScsJ2wnLCdkJywnZScsIDAsCisgICAgJ3MnLCdjJywnYScsJ3InLCdvJywnbicsIDAsCisgICAgJ3UnLCdhJywnYycsJ3UnLCd0JywnZScsIDAsCisgICAgJ3UnLCdjJywnaScsJ3InLCdjJywndScsJ20nLCdmJywnbCcsJ2UnLCd4JywgMCwKKyAgICAndScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywgMCwKKyAgICAndScsJ2cnLCdyJywnYScsJ3YnLCdlJywgMCwKKyAgICAneScsJ2EnLCdjJywndScsJ3QnLCdlJywgMCwKKyAgICAneScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywgMCwKKyAgICAneicsJ2MnLCdhJywncicsJ28nLCduJywgMCwKKyAgICAnZScsJ3gnLCdjJywnbCcsJ2EnLCdtJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdIJywndScsJ24nLCdnJywnYScsJ3InLCd1JywnbScsJ2wnLCdhJywndScsJ3QnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ2QnLCdvJywnbCcsJ2wnLCdhJywncicsJ28nLCdsJywnZCcsJ3MnLCd0JywneScsJ2wnLCdlJywgMCwKKyAgICAnZCcsJ28nLCdsJywnbCcsJ2EnLCdyJywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdhJywnbScsJ3AnLCdlJywncicsJ3MnLCdhJywnbicsJ2QnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0EnLCdjJywndScsJ3QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdwJywnYScsJ3InLCdlJywnbicsJ2wnLCdlJywnZicsJ3QnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3AnLCdhJywncicsJ2UnLCduJywncicsJ2knLCdnJywnaCcsJ3QnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3QnLCd3JywnbycsJ2QnLCdvJywndCcsJ2UnLCduJywnbCcsJ2UnLCdhJywnZCcsJ2UnLCdyJywgMCwKKyAgICAnbycsJ24nLCdlJywnZCcsJ28nLCd0JywnZScsJ24nLCdsJywnZScsJ2EnLCdkJywnZScsJ3InLCAwLAorICAgICd6JywnZScsJ3InLCdvJywnbycsJ2wnLCdkJywncycsJ3QnLCd5JywnbCcsJ2UnLCAwLAorICAgICdvJywnbicsJ2UnLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ3QnLCd3JywnbycsJ28nLCdsJywnZCcsJ3MnLCd0JywneScsJ2wnLCdlJywgMCwKKyAgICAndCcsJ2gnLCdyJywnZScsJ2UnLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ2YnLCdvJywndScsJ3InLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ2YnLCdpJywndicsJ2UnLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ3MnLCdpJywneCcsJ28nLCdsJywnZCcsJ3MnLCd0JywneScsJ2wnLCdlJywgMCwKKyAgICAncycsJ2UnLCd2JywnZScsJ24nLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ2UnLCdpJywnZycsJ2gnLCd0JywnbycsJ2wnLCdkJywncycsJ3QnLCd5JywnbCcsJ2UnLCAwLAorICAgICduJywnaScsJ24nLCdlJywnbycsJ2wnLCdkJywncycsJ3QnLCd5JywnbCcsJ2UnLCAwLAorICAgICdjJywnbycsJ20nLCdtJywnYScsJ3MnLCd1JywncCcsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAndCcsJ2gnLCdyJywnZScsJ2UnLCdxJywndScsJ2EnLCdyJywndCcsJ2UnLCdyJywncycsJ2UnLCdtJywnZCcsJ2EnLCdzJywnaCcsIDAsCisgICAgJ3AnLCdlJywncicsJ2knLCdvJywnZCcsJ3MnLCd1JywncCcsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAncScsJ3UnLCdlJywncycsJ3QnLCdpJywnbycsJ24nLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ2EnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2InLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2MnLCdlJywnbicsJ3QnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2QnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2UnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2knLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2wnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ20nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ24nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ28nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3InLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3MnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3QnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2YnLCdmJywgMCwKKyAgICAnZicsJ2YnLCdpJywgMCwKKyAgICAnZicsJ2YnLCdsJywgMCwKKyAgICAncCcsJ2EnLCdyJywnZScsJ24nLCdsJywnZScsJ2YnLCd0JywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdwJywnYScsJ3InLCdlJywnbicsJ3InLCdpJywnZycsJ2gnLCd0JywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdDJywnaScsJ3InLCdjJywndScsJ20nLCdmJywnbCcsJ2UnLCd4JywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdoJywneScsJ3AnLCdoJywnZScsJ24nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ0cnLCdyJywnYScsJ3YnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdBJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdCJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdDJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdEJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdFJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdGJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdHJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdIJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdJJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdKJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdLJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdMJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdNJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdOJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdPJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdQJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdRJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdSJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdTJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdUJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdVJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdWJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdXJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdYJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdZJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdaJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdjJywnbycsJ2wnLCdvJywnbicsJ20nLCdvJywnbicsJ2UnLCd0JywnYScsJ3InLCd5JywgMCwKKyAgICAnbycsJ24nLCdlJywnZicsJ2knLCd0JywndCcsJ2UnLCdkJywgMCwKKyAgICAncicsJ3UnLCdwJywnaScsJ2EnLCdoJywgMCwKKyAgICAnVCcsJ2knLCdsJywnZCcsJ2UnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ2UnLCd4JywnYycsJ2wnLCdhJywnbScsJ2QnLCdvJywndycsJ24nLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ2MnLCdlJywnbicsJ3QnLCdvJywnbCcsJ2QnLCdzJywndCcsJ3knLCdsJywnZScsIDAsCisgICAgJ0wnLCdzJywnbCcsJ2EnLCdzJywnaCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnUycsJ2MnLCdhJywncicsJ28nLCduJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdaJywnYycsJ2EnLCdyJywnbycsJ24nLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdCJywncicsJ2UnLCd2JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnQycsJ2EnLCdyJywnbycsJ24nLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0QnLCdvJywndCcsJ2EnLCdjJywnYycsJ2UnLCduJywndCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnTScsJ2EnLCdjJywncicsJ28nLCduJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdmJywnaScsJ2cnLCd1JywncicsJ2UnLCdkJywnYScsJ3MnLCdoJywgMCwKKyAgICAnaCcsJ3knLCdwJywnaCcsJ2UnLCduJywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdPJywnZycsJ28nLCduJywnZScsJ2snLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ1InLCdpJywnbicsJ2cnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0MnLCdlJywnZCcsJ2knLCdsJywnbCcsJ2EnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ3EnLCd1JywnZScsJ3MnLCd0JywnaScsJ28nLCduJywnZCcsJ28nLCd3JywnbicsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnbycsJ24nLCdlJywnZScsJ2knLCdnJywnaCcsJ3QnLCdoJywgMCwKKyAgICAndCcsJ2gnLCdyJywnZScsJ2UnLCdlJywnaScsJ2cnLCdoJywndCcsJ2gnLCdzJywgMCwKKyAgICAnZicsJ2knLCd2JywnZScsJ2UnLCdpJywnZycsJ2gnLCd0JywnaCcsJ3MnLCAwLAorICAgICdzJywnZScsJ3YnLCdlJywnbicsJ2UnLCdpJywnZycsJ2gnLCd0JywnaCcsJ3MnLCAwLAorICAgICdvJywnbicsJ2UnLCd0JywnaCcsJ2knLCdyJywnZCcsIDAsCisgICAgJ3QnLCd3JywnbycsJ3QnLCdoJywnaScsJ3InLCdkJywncycsIDAsCisgICAgJ3onLCdlJywncicsJ28nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2YnLCdvJywndScsJ3InLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2YnLCdpJywndicsJ2UnLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3MnLCdpJywneCcsJ3MnLCd1JywncCcsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAncycsJ2UnLCd2JywnZScsJ24nLCdzJywndScsJ3AnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2UnLCdpJywnZycsJ2gnLCd0JywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICduJywnaScsJ24nLCdlJywncycsJ3UnLCdwJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICd6JywnZScsJ3InLCdvJywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdvJywnbicsJ2UnLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3QnLCd3JywnbycsJ2knLCduJywnZicsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAndCcsJ2gnLCdyJywnZScsJ2UnLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2YnLCdvJywndScsJ3InLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2YnLCdpJywndicsJ2UnLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3MnLCdpJywneCcsJ2knLCduJywnZicsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAncycsJ2UnLCd2JywnZScsJ24nLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ2UnLCdpJywnZycsJ2gnLCd0JywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICduJywnaScsJ24nLCdlJywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdjJywnZScsJ24nLCd0JywnaScsJ24nLCdmJywnZScsJ3InLCdpJywnbycsJ3InLCAwLAorICAgICdkJywnbycsJ2wnLCdsJywnYScsJ3InLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ3AnLCdlJywncicsJ2knLCdvJywnZCcsJ2knLCduJywnZicsJ2UnLCdyJywnaScsJ28nLCdyJywgMCwKKyAgICAnYycsJ28nLCdtJywnbScsJ2EnLCdpJywnbicsJ2YnLCdlJywncicsJ2knLCdvJywncicsIDAsCisgICAgJ0EnLCdnJywncicsJ2EnLCd2JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnQScsJ2EnLCdjJywndScsJ3QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdBJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnQScsJ3QnLCdpJywnbCcsJ2QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdBJywnZCcsJ2knLCdlJywncicsJ2UnLCdzJywnaScsJ3MnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0EnLCdyJywnaScsJ24nLCdnJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdBJywnRScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnQycsJ2MnLCdlJywnZCcsJ2knLCdsJywnbCcsJ2EnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0UnLCdnJywncicsJ2EnLCd2JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnRScsJ2EnLCdjJywndScsJ3QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdFJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnRScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdJJywnZycsJ3InLCdhJywndicsJ2UnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0knLCdhJywnYycsJ3UnLCd0JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnSScsJ2MnLCdpJywncicsJ2MnLCd1JywnbScsJ2YnLCdsJywnZScsJ3gnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ0knLCdkJywnaScsJ2UnLCdyJywnZScsJ3MnLCdpJywncycsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnRScsJ3QnLCdoJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdOJywndCcsJ2knLCdsJywnZCcsJ2UnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ08nLCdnJywncicsJ2EnLCd2JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnTycsJ2EnLCdjJywndScsJ3QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdPJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnTycsJ3QnLCdpJywnbCcsJ2QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdPJywnZCcsJ2knLCdlJywncicsJ2UnLCdzJywnaScsJ3MnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ08nLCdFJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdPJywncycsJ2wnLCdhJywncycsJ2gnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ1UnLCdnJywncicsJ2EnLCd2JywnZScsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnVScsJ2EnLCdjJywndScsJ3QnLCdlJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdVJywnYycsJ2knLCdyJywnYycsJ3UnLCdtJywnZicsJ2wnLCdlJywneCcsJ3MnLCdtJywnYScsJ2wnLCdsJywgMCwKKyAgICAnVScsJ2QnLCdpJywnZScsJ3InLCdlJywncycsJ2knLCdzJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdZJywnYScsJ2MnLCd1JywndCcsJ2UnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJ1QnLCdoJywnbycsJ3InLCduJywncycsJ20nLCdhJywnbCcsJ2wnLCAwLAorICAgICdZJywnZCcsJ2knLCdlJywncicsJ2UnLCdzJywnaScsJ3MnLCdzJywnbScsJ2EnLCdsJywnbCcsIDAsCisgICAgJzAnLCcwJywnMScsJy4nLCcwJywnMCcsJzAnLCAwLAorICAgICcwJywnMCcsJzEnLCcuJywnMCcsJzAnLCcxJywgMCwKKyAgICAnMCcsJzAnLCcxJywnLicsJzAnLCcwJywnMicsIDAsCisgICAgJzAnLCcwJywnMScsJy4nLCcwJywnMCcsJzMnLCAwLAorICAgICdCJywnbCcsJ2EnLCdjJywnaycsIDAsCisgICAgJ0InLCdvJywnbCcsJ2QnLCAwLAorICAgICdCJywnbycsJ28nLCdrJywgMCwKKyAgICAnTCcsJ2knLCdnJywnaCcsJ3QnLCAwLAorICAgICdNJywnZScsJ2QnLCdpJywndScsJ20nLCAwLAorICAgICdSJywnZScsJ2cnLCd1JywnbCcsJ2EnLCdyJywgMCwKKyAgICAnUicsJ28nLCdtJywnYScsJ24nLCAwLAorICAgICdTJywnZScsJ20nLCdpJywnYicsJ28nLCdsJywnZCcsIDAsCisgIH07CisKKworI2RlZmluZSBGVF9OVU1fTUFDX05BTUVTICAyNTgKKworICAvKiBWYWx1ZXMgYXJlIG9mZnNldHMgaW50byB0aGUgYGZ0X3N0YW5kYXJkX2dseXBoX25hbWVzJyB0YWJsZSAqLworCisgIHN0YXRpYyBjb25zdCBzaG9ydCAgZnRfbWFjX25hbWVzW0ZUX05VTV9NQUNfTkFNRVNdID0KKyAgeworICAgICAyNTMsICAgMCwgICA2LCAyNjEsIDI2NywgMjc0LCAyODMsIDI5NCwgMzAxLCAzMDksIDc1OCwgMzMwLCAzNDAsIDM1MSwKKyAgICAgMzYwLCAzNjUsIDM3MSwgMzc4LCAzODUsIDM5MSwgMzk2LCA0MDAsIDQwNCwgNDEwLCA0MTUsIDQyMCwgNDI0LCA0MzAsCisgICAgIDQzNiwgNDQxLCA0NDcsIDQ1NywgNDYyLCA0NjgsIDQ3NiwgNDg1LCA0ODgsIDQ5MCwgNDkyLCA0OTQsIDQ5NiwgNDk4LAorICAgICA1MDAsIDUwMiwgNTA0LCA1MDYsIDUwOCwgNTEwLCA1MTIsIDUxNCwgNTE2LCA1MTgsIDUyMCwgNTIyLCA1MjQsIDUyNiwKKyAgICAgNTI4LCA1MzAsIDUzMiwgNTM0LCA1MzYsIDUzOCwgNTQwLCA1NTIsIDU2MiwgNTc1LCA1ODcsIDk3OSwgNjA4LCA2MTAsCisgICAgIDYxMiwgNjE0LCA2MTYsIDYxOCwgNjIwLCA2MjIsIDYyNCwgNjI2LCA2MjgsIDYzMCwgNjMyLCA2MzQsIDYzNiwgNjM4LAorICAgICA2NDAsIDY0MiwgNjQ0LCA2NDYsIDY0OCwgNjUwLCA2NTIsIDY1NCwgNjU2LCA2NTgsIDY2MCwgNjcwLCA2NzQsIDY4NSwKKyAgICAxMzc1LDEzOTIsMTQwNSwxNDE0LDE0ODYsMTUxMiwxNTYyLDE2MDMsMTYzMiwxNjEwLDE2MjIsMTY0NSwxNjM5LDE2NTIsCisgICAgMTY2MSwxNjkwLDE2NjgsMTY4MCwxNjk3LDE3MjYsMTcwNCwxNzE2LDE3MzMsMTc0MCwxNzY5LDE3NDcsMTc1OSwxNzc2LAorICAgIDE3OTAsMTgxOSwxNzk3LDE4MDksIDgzOSwxMjYzLCA3MDcsIDcxMiwgNzQxLCA4ODEsIDg3MSwxMTYwLDEzMDIsMTM0NiwKKyAgICAxMTk3LCA5ODUsMTAzMSwgIDIzLDEwODYsMTEwOCwgIDMyLDEyMTksICA0MSwgIDUxLCA3MzAsMTE5NCwgIDY0LCAgNzYsCisgICAgICA4NiwgIDk0LCAgOTcsMTA4OSwxMTE4LCAxMDYsMTEzMSwxMTUwLCA5NjYsIDY5NiwxMTgzLCAxMTIsIDczNCwgMTIwLAorICAgICAxMzIsIDc4MywgOTMwLCA5NDUsIDEzOCwxMzg1LDEzOTgsMTUyOSwxMTE1LDExNTcsIDgzMiwxMDc5LCA3NzAsIDkxNiwKKyAgICAgNTk4LCAzMTksMTI0NiwgMTU1LDE4MzMsMTU4NiwgNzIxLCA3NDksIDc5NywgODExLCA4MjYsIDgyOSwgODQ2LCA4NTYsCisgICAgIDg4OCwgOTAzLCA5NTQsMTM2MywxNDIxLDEzNTYsMTQzMywxNDQzLDE0NTAsMTQ1NywxNDY5LDE0NzksMTQ5MywxNTAwLAorICAgICAxNjMsMTUyMiwxNTQzLDE1NTAsMTU3MiwxMTM0LCA5OTEsMTAwMiwxMDA4LDEwMTUsMTAyMSwxMDQwLDEwNDUsMTA1MywKKyAgICAxMDY2LDEwNzMsMTEwMSwxMTQzLDE1MzYsMTc4MywxNTk2LDE4NDMsMTI1MywxMjA3LDEzMTksMTU3OSwxODI2LDEyMjksCisgICAgMTI3MCwxMzEzLDEzMjMsMTE3MSwxMjkwLDEzMzIsMTIxMSwxMjM1LDEyNzYsIDE2OSwgMTc1LCAxODIsIDE4OSwgMjAwLAorICAgICAyMDksIDIxOCwgMjI1LCAyMzIsIDIzOSwgMjQ2CisgIH07CisKKworI2RlZmluZSBGVF9OVU1fU0lEX05BTUVTICAzOTEKKworICAvKiBWYWx1ZXMgYXJlIG9mZnNldHMgaW50byB0aGUgYGZ0X3N0YW5kYXJkX2dseXBoX25hbWVzJyB0YWJsZSAqLworCisgIHN0YXRpYyBjb25zdCBzaG9ydCAgZnRfc2lkX25hbWVzW0ZUX05VTV9TSURfTkFNRVNdID0KKyAgeworICAgICAyNTMsIDI2MSwgMjY3LCAyNzQsIDI4MywgMjk0LCAzMDEsIDMwOSwgMzE5LCAzMzAsIDM0MCwgMzUxLCAzNjAsIDM2NSwKKyAgICAgMzcxLCAzNzgsIDM4NSwgMzkxLCAzOTYsIDQwMCwgNDA0LCA0MTAsIDQxNSwgNDIwLCA0MjQsIDQzMCwgNDM2LCA0NDEsCisgICAgIDQ0NywgNDU3LCA0NjIsIDQ2OCwgNDc2LCA0ODUsIDQ4OCwgNDkwLCA0OTIsIDQ5NCwgNDk2LCA0OTgsIDUwMCwgNTAyLAorICAgICA1MDQsIDUwNiwgNTA4LCA1MTAsIDUxMiwgNTE0LCA1MTYsIDUxOCwgNTIwLCA1MjIsIDUyNCwgNTI2LCA1MjgsIDUzMCwKKyAgICAgNTMyLCA1MzQsIDUzNiwgNTM4LCA1NDAsIDU1MiwgNTYyLCA1NzUsIDU4NywgNTk4LCA2MDgsIDYxMCwgNjEyLCA2MTQsCisgICAgIDYxNiwgNjE4LCA2MjAsIDYyMiwgNjI0LCA2MjYsIDYyOCwgNjMwLCA2MzIsIDYzNCwgNjM2LCA2MzgsIDY0MCwgNjQyLAorICAgICA2NDQsIDY0NiwgNjQ4LCA2NTAsIDY1MiwgNjU0LCA2NTYsIDY1OCwgNjYwLCA2NzAsIDY3NCwgNjg1LCA2OTYsIDcwNywKKyAgICAgNzEyLCA3MjEsIDczMCwgNzM0LCA3NDEsIDc0OSwgNzU4LCA3NzAsIDc4MywgNzk3LCA4MTEsIDgyNiwgODI5LCA4MzIsCisgICAgIDgzOSwgODQ2LCA4NTYsIDg3MSwgODgxLCA4ODgsIDkwMywgOTE2LCA5MzAsIDk0NSwgOTU0LCA5NjYsIDk3OSwgOTg1LAorICAgICA5OTEsMTAwMiwxMDA4LDEwMTUsMTAyMSwxMDMxLDEwNDAsMTA0NSwxMDUzLDEwNjYsMTA3MywxMDc5LDEwODYsMTA4OSwKKyAgICAxMTAxLDExMDgsMTExNSwxMTE4LDExMzEsMTEzNCwxMTQzLDExNTAsMTE1NywxMTYwLDExNzEsMTE4MywxMTk0LDExOTcsCisgICAgMTIwNywxMjExLDEyMTksMTIyOSwxMjM1LDEyNDYsMTI1MywxMjYzLDEyNzAsMTI3NiwxMjkwLDEzMDIsMTMxMywxMzE5LAorICAgIDEzMjMsMTMzMiwxMzQ2LDEzNTYsMTM2MywxMzc1LDEzODUsMTM5MiwxMzk4LDE0MDUsMTQxNCwxNDIxLDE0MzMsMTQ0MywKKyAgICAxNDUwLDE0NTcsMTQ2OSwxNDc5LDE0ODYsMTQ5MywxNTAwLDE1MTIsMTUyMiwxNTI5LDE1MzYsMTU0MywxNTUwLDE1NjIsCisgICAgMTU3MiwxNTc5LDE1ODYsMTU5NiwxNjAzLDE2MTAsMTYyMiwxNjMyLDE2MzksMTY0NSwxNjUyLDE2NjEsMTY2OCwxNjgwLAorICAgIDE2OTAsMTY5NywxNzA0LDE3MTYsMTcyNiwxNzMzLDE3NDAsMTc0NywxNzU5LDE3NjksMTc3NiwxNzgzLDE3OTAsMTc5NywKKyAgICAxODA5LDE4MTksMTgyNiwxODMzLDE4NDMsMTg1MCwxODYyLDE4ODAsMTg5NSwxOTEwLDE5MjUsMTkzNiwxOTU0LDE5NzMsCisgICAgMTk4OCwyMDAzLDIwMTYsMjAyOCwyMDQwLDIwNTQsMjA2NywyMDgwLDIwOTIsMjEwNiwyMTIwLDIxMzMsMjE0NywyMTY3LAorICAgIDIxODIsMjE5NiwyMjA2LDIyMTYsMjIyOSwyMjM5LDIyNDksMjI1OSwyMjY5LDIyNzksMjI4OSwyMjk5LDIzMDksMjMxOSwKKyAgICAyMzI5LDIzMzIsMjMzNiwyMzQwLDIzNTgsMjM3NywyMzkzLDI0MDgsMjQxOSwyNDI2LDI0MzMsMjQ0MCwyNDQ3LDI0NTQsCisgICAgMjQ2MSwyNDY4LDI0NzUsMjQ4MiwyNDg5LDI0OTYsMjUwMywyNTEwLDI1MTcsMjUyNCwyNTMxLDI1MzgsMjU0NSwyNTUyLAorICAgIDI1NTksMjU2NiwyNTczLDI1ODAsMjU4NywyNTk0LDI2MDEsMjYxNSwyNjI1LDI2MzIsMjY0MywyNjU5LDI2NzIsMjY4NCwKKyAgICAyNjk2LDI3MDgsMjcyMiwyNzMzLDI3NDQsMjc1OSwyNzcxLDI3ODIsMjc5NywyODA5LDI4MTksMjgzMiwyODUwLDI4NjAsCisgICAgMjg3MywyODg1LDI4OTgsMjkwNywyOTE3LDI5MzAsMjk0MywyOTU2LDI5NjgsMjk4MiwyOTk2LDMwMDksMzAyMiwzMDM0LAorICAgIDMwNDYsMzA2MCwzMDczLDMwODYsMzA5OCwzMTEyLDMxMjYsMzEzOSwzMTUyLDMxNjcsMzE4MiwzMTk2LDMyMDgsMzIyMCwKKyAgICAzMjM3LDMyNDksMzI2NCwzMjc1LDMyODMsMzI5NywzMzA5LDMzMjEsMzMzOCwzMzUzLDMzNjUsMzM3NywzMzk0LDM0MDksCisgICAgMzQxOCwzNDMwLDM0NDIsMzQ1NCwzNDcxLDM0ODMsMzQ5OCwzNTA2LDM1MTgsMzUzMCwzNTQyLDM1NTksMzU3NCwzNTg2LAorICAgIDM1OTcsMzYxMiwzNjIwLDM2MjgsMzYzNiwzNjQ0LDM2NTAsMzY1NSwzNjYwLDM2NjYsMzY3MywzNjgxLDM2ODcKKyAgfTsKKworCisgIC8qIHRoZSBmb2xsb3dpbmcgYXJlIGluZGljZXMgaW50byB0aGUgU0lEIG5hbWUgdGFibGUgKi8KKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0ICB0MV9zdGFuZGFyZF9lbmNvZGluZ1syNTZdID0KKyAgeworICAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgICAgICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LAorICAgICAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwKKyAgICAgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsCisgICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LAorICAgICA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwKKyAgICAgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgIDAsCisgICAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorICAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgIDAsIDk2LCA5NywgOTgsIDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsCisgICAgICAwLDExMSwxMTIsMTEzLDExNCwgIDAsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwgIDAsMTIzLAorICAgICAgMCwxMjQsMTI1LDEyNiwxMjcsMTI4LDEyOSwxMzAsMTMxLCAgMCwxMzIsMTMzLCAgMCwxMzQsMTM1LDEzNiwKKyAgICAxMzcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgICAgICAwLDEzOCwgIDAsMTM5LCAgMCwgIDAsICAwLCAgMCwxNDAsMTQxLDE0MiwxNDMsICAwLCAgMCwgIDAsICAwLAorICAgICAgMCwxNDQsICAwLCAgMCwgIDAsMTQ1LCAgMCwgIDAsMTQ2LDE0NywxNDgsMTQ5LCAgMCwgIDAsICAwLCAgMAorICB9OworCisKKyAgLyogdGhlIGZvbGxvd2luZyBhcmUgaW5kaWNlcyBpbnRvIHRoZSBTSUQgbmFtZSB0YWJsZSAqLworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgIHQxX2V4cGVydF9lbmNvZGluZ1syNTZdID0KKyAgeworICAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgICAgICAxLDIyOSwyMzAsICAwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsIDEzLCAxNCwgMTUsIDk5LAorICAgIDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwgMjcsIDI4LDI0OSwyNTAsMjUxLDI1MiwKKyAgICAgIDAsMjUzLDI1NCwyNTUsMjU2LDI1NywgIDAsICAwLCAgMCwyNTgsICAwLCAgMCwyNTksMjYwLDI2MSwyNjIsCisgICAgICAwLCAgMCwyNjMsMjY0LDI2NSwgIDAsMjY2LDEwOSwxMTAsMjY3LDI2OCwyNjksICAwLDI3MCwyNzEsMjcyLAorICAgIDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwKKyAgICAyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywgIDAsCisgICAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorICAgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgICAgIDAsMzA0LDMwNSwzMDYsICAwLCAgMCwzMDcsMzA4LDMwOSwzMTAsMzExLCAgMCwzMTIsICAwLCAgMCwzMTMsCisgICAgICAwLCAgMCwzMTQsMzE1LCAgMCwgIDAsMzE2LDMxNywzMTgsICAwLCAgMCwgIDAsMTU4LDE1NSwxNjMsMzE5LAorICAgIDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LCAgMCwgIDAsMzI2LDE1MCwxNjQsMTY5LDMyNywzMjgsMzI5LDMzMCwKKyAgICAzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsCisgICAgMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLAorICAgIDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OAorICB9OworCisKKyAgLyoKKyAgICogIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCisgICAqICBvcHRpbWl6ZWQgZm9yIGVmZmljaWVudCBzZWFyY2hpbmcuICBJdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlCisgICAqICBgZ2xuYW1lcy5weScgcHl0aG9uIHNjcmlwdCBsb2NhdGVkIGluIHRoZSBgc3JjL3Rvb2xzJyBkaXJlY3RvcnkuCisgICAqCisgICAqICBUaGUgbG9va3VwIGZ1bmN0aW9uIHRvIGdldCB0aGUgVW5pY29kZSB2YWx1ZSBmb3IgYSBnaXZlbiBzdHJpbmcKKyAgICogIGlzIGRlZmluZWQgYmVsb3cgdGhlIHRhYmxlLgorICAgKi8KKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVAorCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICBmdF9hZG9iZV9nbHlwaF9saXN0WzU1OTk3TF0gPQorICB7CisgICAgICAwLCA1MiwgIDAsMTA2LCAgMiwxNjcsICAzLCA2MywgIDQsMjIwLCAgNiwxMjUsICA5LDE0MywgMTAsIDIzLAorICAgICAxMSwxMzcsIDEyLDE5OSwgMTQsMjQ2LCAxNSwgODcsIDE2LDIzMywgMTcsMjE5LCAxOCwxMDQsIDE5LCA4OCwKKyAgICAgMjIsMTEwLCAyMywgMzIsIDIzLCA3MSwgMjQsIDc3LCAyNywxNTYsIDI5LCA3MywgMzEsMjQ3LCAzMiwxMDcsCisgICAgIDMyLDIyMiwgMzMsIDU1LCAzNCwxNTQsIDM1LDIxOCwgNTgsIDEwLCA2NCwxMjIsIDcyLDE4OCwgODAsMTA5LAorICAgICA4OCwxMDQsIDkzLCA2MSwgOTgsMTY4LDEwNiwgOTEsMTE0LDExMSwxMTUsMjM3LDEyMiwxODAsMTI3LDI1NSwKKyAgICAxMzUsMTY0LDE0MywxMzIsMTQ5LDIxMywxNTgsMTA4LDE2MSwxMTUsMTY4LDE3NSwxODMsMTQ3LDE5NywxOTksCisgICAgMjAyLCAyNSwyMDQsMTY2LDIwOCwyMDksMjA5LCA4MSwyMTUsIDI2LCA2NSwxNDMsICAwLCA2NSwgIDAsMTQwLAorICAgICAgMCwxNzUsICAwLDE5MywgIDEsIDE1LCAgMSwxNDcsICAxLDIzMywgIDEsMjUxLCAgMiwgIDcsICAyLCA0MCwKKyAgICAgIDIsIDU3LCAgMiwgODIsICAyLCA5MSwgIDIsMTI4LCAgMiwxMzYsICAyLDE1NCwgNjksMTMxLCAgMCwxOTgsCisgICAgICAwLDE1MCwgIDAsMTU4LCAgMCwxNjcsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLDI1MiwyMzcsMjI1LAorICAgIDIyNywyNDIsMjM5LDExMCwxMjgsICAxLDIyNiwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMjMwLDIyNSwKKyAgICAyMjcsMjQ1LDI0NCwxMDEsMTI5LCAgMCwxOTMsICAwLDE4NSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsCisgICAgMjI1LDIyNiwyNDIsMjI5LDI0NiwxMDEsMTM0LCAgMSwgIDIsICAwLDIxMywgIDAsMjIxLCAgMCwyMzIsICAwLAorICAgIDI0MywgIDAsMjUxLCAgMSwgIDcsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLDE3NCwyMjcsMjQ5LDI0MiwKKyAgICAyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjA4LDIyOCwyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksCisgICAgMTI4LCAzMCwxODIsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLDE3NiwyMzIsMjM5LDIzOSwyMzUsMjI1LAorICAgIDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDE3OCwyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwgMzAsMTgwLCA5OSwKKyAgICAgIDQsICAxLCAyNSwgIDEsIDMyLCAgMSwxMjEsICAxLDEzNywyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMDUsCisgICAgMjMzLDI0MiwgOTksICAyLCAgMSwgNDAsICAxLCA0NSwyMzYsMTAxLDEyOCwgMzYsMTgyLDI0NSwyMzcsMjMwLAorICAgIDIzNiwyMjksMTIwLDEzNCwgIDAsMTk0LCAgMSwgNjYsICAxLCA3NCwgIDEsIDg1LCAgMSwgOTMsICAxLDEwNSwKKyAgICAgIDEsMTEzLDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAzMCwxNjQsMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsCisgICAgMjM5LDExOSwxMjgsIDMwLDE3MiwyMzEsMjQyLDIyNSwyNDYsMTAxLDEyOCwgMzAsMTY2LDIzMiwyMzksMjM5LAorICAgIDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsMTY4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywKKyAgICAyMjYsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjgsIDMwLDE3MCwyNDUsMjQ0LDEwMSwxMjksMjQ2LDIwMSwgIDEsCisgICAgMTI5LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxODAsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsIDE2LDEwMCwgIDMsICAxLDE1NSwgIDEsMTY1LCAgMSwyMDksMjI2LDIzNiwyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwgIDIsICAwLDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMzEsICAwLDE5NiwgIDEsCisgICAgMTgxLCAgMSwxOTIsICAxLDIwMSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjEwLAorICAgIDIzNywyMjUsMjI3LDI0MiwyMzksMTEwLDEyOCwgIDEsMjIyLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywKKyAgICAyMjgsMjM5LDExNiwgIDIsICAxLDIxNiwgIDEsMjI0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwxNjAsCisgICAgMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMjQsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjksICAwLAorICAgIDE5MiwgIDEsMjQzLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMjQsMjMyLDIzOSwyMzksMjM1LDIyNSwKKyAgICAyMjYsMjM5LDI0NiwxMDEsMTI4LCAzMCwxNjIsMTA1LCAgMiwgIDIsIDEzLCAgMiwgMjUsMjI5LDIyNywyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyMTIsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LAorICAgIDIyNiwyNDIsMjI5LDI0NiwxMDEsMTI4LCAgMiwgIDIsMjM2LDI0MCwyMzIsIDk3LDEyOSwgIDMsMTQ1LCAgMiwKKyAgICAgNDksMjQ0LDIzOSwyMzgsMjM5LDExNSwxMjgsICAzLDEzNCwxMDksICAyLCAgMiwgNjMsICAyLCA3MSwyMjUsCisgICAgMjI3LDI0MiwyMzksMTEwLDEyOCwgIDEsICAwLDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LAorICAgIDI1NSwgMzMsMjM5LDIzMSwyMzksMjM4LDIyOSwxMDcsMTI4LCAgMSwgIDQsMjQyLDIzMywyMzgsMTAzLDEzMSwKKyAgICAgIDAsMTk3LCAgMiwxMDQsICAyLDExMiwgIDIsMTIwLDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMSwyNTAsCisgICAgMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLCAgMCwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMjI5LAorICAgIDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywgOTcsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjksICAwLDE5NSwKKyAgICAgIDIsMTQ2LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMjcsMjQ5LDIyNiwyMjUsMjQyLDIzNywyMjksCisgICAgMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDQ5LCA2NiwxMzcsICAwLCA2NiwgIDIsMTg5LCAgMiwxOTgsICAyLAorICAgIDIyMywgIDMsICAzLCAgMywgMTAsICAzLCAyMiwgIDMsIDM0LCAgMywgNDYsICAzLCA1NCwyMjcsMjMzLDI0MiwKKyAgICAyMjcsMjM2LDEwMSwxMjgsIDM2LDE4MywyMjgsMjM5LDExNiwgIDIsICAyLDIwNiwgIDIsMjE1LDIyNSwyMjcsCisgICAgMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsICAyLDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgIDQsMTAxLAorICAgICAgMywgIDIsMjMxLCAgMiwyNDIsICAyLDI1NCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsIDE3LDIzOCwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDUwLDI0NCwgOTcsCisgICAgMTI4LCAgMywxNDYsMjMyLDIzOSwyMzksMTA3LDEyOCwgIDEsMTI5LDIzNiwyMzMsMjM4LDIyOSwyMjYsMjI5LAorICAgIDIzNiwyMzksMTE5LDEyOCwgMzAsICA2LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsIDM0LDI0MiwyMjksMjQ2LDIyOSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDYsMjQ0LDI0MywyMzcsCisgICAgMjI1LDIzNiwxMDgsMTI4LDI0NywgOTgsMjQ0LDIzOSwyNDAsMjI2LDIyNSwxMTQsMTI4LCAgMSwxMzAsIDY3LAorICAgIDEzNywgIDAsIDY3LCAgMywgODUsICAzLDEyNywgIDMsMTkzLCAgMywyMTAsICAzLDIyNCwgIDQsMTcxLCAgNCwKKyAgICAxODgsICA0LDIwMCwgIDQsMjEyLCA5NywgIDMsICAzLCA5MywgIDMsMTA0LCAgMywxMTEsMjI1LDI0MiwyMzcsCisgICAgMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA2MiwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMSwgIDYsMjQyLAorICAgIDIzOSwxMTAsMTI5LDI0NiwyMDIsICAzLDExOSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDYsMjQ1LCA5OSwKKyAgICAgIDMsICAzLDEzNSwgIDMsMTQyLCAgMywxNzEsMjI1LDI0MiwyMzksMTEwLDEyOCwgIDEsIDEyLDIyOSwyMjgsCisgICAgMjMzLDIzNiwyMzYsIDk3LDEzMCwgIDAsMTk5LCAgMywxNTUsICAzLDE2MywyMjUsMjI3LDI0NSwyNDQsMTAxLAorICAgIDEyOCwgMzAsICA4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMzEsMjMzLDI0MiwgOTksICAyLCAgMywKKyAgICAxNzksICAzLDE4NCwyMzYsMTAxLDEyOCwgMzYsMTg0LDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEyOCwgIDEsCisgICAgICA4LDIyOCwyMzksMTE2LDEyOSwgIDEsIDEwLCAgMywyMDEsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LAorICAgICAgMSwgMTAsMjI5LDIyOCwyMzMsMjM2LDIzNiwyMjUsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDE4NCwKKyAgICAxMDQsICA0LCAgMywyMzQsICAzLDI0NiwgIDQsMTYxLCAgNCwxNjUsMjI1LDIyNSwyNDIsMjM3LDIyOSwyMzgsCisgICAgMjMzLDIyNSwxMTAsMTI4LCAgNSwgNzMsMTAxLCAgNiwgIDQsICA0LCAgNCwgMjQsICA0LCAzNSwgIDQsMTAzLAorICAgICAgNCwxMTUsICA0LDEzNiwyMjUsMjI2LDIzNSwyMzIsMjI1LDI0MywyMzMsMjI1LDIzOCwyMjcsMjQ5LDI0MiwKKyAgICAyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTg4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksCisgICAgMTI4LCAgNCwgMzksMTAwLCAgMiwgIDQsIDQxLCAgNCwgODUsMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LAorICAgIDExNCwgIDIsICA0LCA1NCwgIDQsIDc0LDIyNSwyMjYsMjM1LDIzMiwyMjUsMjQzLDIzMywyMjUsMjM4LDIyNywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxOTAsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LDE4MiwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDI0NCwyMzIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwKKyAgICAxMjgsICA1LCA2NywyMzUsMjMyLDIyNSwyMzUsMjI1LDI0MywyNDMsMjMzLDIyNSwyMzgsMjI3LDI0OSwyNDIsCisgICAgMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIwMywyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMjM2LAorICAgIDI0MywyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwKKyAgICAxODQsMTA1LDEyOCwgIDMsMTY3LDIzOSwyMzksMTA3LDEyOCwgIDEsMTM1LDIzMywyNDIsMjI3LDI0NSwyMzcsCisgICAgMjMwLDIzNiwyMjksMjQ4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NiwyNDYsMjM3LDIzOSwyMzgsMjM5LAorICAgIDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMzUsMjM5LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwKKyAgICAxMTAsMTI4LCAgNSwgODEsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LCA5OSwgNjgsMTQyLCAgMCwgNjgsCisgICAgICA0LDI1MiwgIDUsIDEwLCAgNSwgMzYsICA1LCA5NiwgIDUsMTIxLCAgNSwxNjYsICA1LDE3MywgIDUsMjMxLAorICAgICAgNSwyNDQsICA2LCAgMCwgIDYsIDEyLCAgNiwgMjgsICA2LCA0OCwgIDYsIDU3LCA5MCwxMjksICAxLDI0MSwKKyAgICAgIDUsICAyLDIyNywyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwxOTYsIDk3LCAgMiwgIDUsIDE2LCAgNSwgMjcsCisgICAgMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA1MiwyMzAsMjQyLDIzMywyMjcsMjI1LAorICAgIDExMCwxMjgsICAxLDEzNywgOTksICA0LCAgNSwgNDYsICA1LCA1MywgIDUsIDYyLCAgNSwgODksMjI1LDI0MiwKKyAgICAyMzksMTEwLDEyOCwgIDEsIDE0LDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgMzAsIDE2LDIzMywyNDIsCisgICAgIDk5LCAgMiwgIDUsIDcwLCAgNSwgNzUsMjM2LDEwMSwxMjgsIDM2LDE4NSwyNDUsMjM3LDIzMCwyMzYsMjI5LAorICAgIDI0OCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDE4LDI0MiwyMzksMjI1LDExNiwxMjgsICAxLCAxNiwKKyAgICAyMjgsMjM5LDExNiwgIDIsICA1LDEwNCwgIDUsMTEzLDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsCisgICAgIDEwLDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgMTIsMTAxLCAgMywgIDUsMTI5LCAgNSwxNDAsICA1LAorICAgIDE1MCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDIwLDIzMywyMjcsMjM5LDI0MCwKKyAgICAyNDQsMjMzLCA5OSwxMjgsICAzLDIzOCwyMzYsMjQ0LCA5NywxMjksIDM0LCAgNiwgIDUsMTU4LDIzMSwyNDIsCisgICAgMjI5LDIyOSwxMDcsMTI4LCAgMywxNDgsMjMyLDIzOSwyMzksMTA3LDEyOCwgIDEsMTM4LDEwNSwgIDIsICA1LAorICAgIDE3OSwgIDUsMjE4LDIyOSwyNDIsMjI5LDI0MywyMzMsMTE1LDEzMSwyNDYsMjAzLCAgNSwxOTQsICA1LDIwMiwKKyAgICAgIDUsMjEwLDE5MywyMjcsMjQ1LDI0NCwxMDEsMTI4LDI0NiwyMDQsMTk5LDI0MiwyMjUsMjQ2LDEwMSwxMjgsCisgICAgMjQ2LDIwNSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTY4LDIzMSwyMjUsMjM3LDIzNywyMjUsMjMxLAorICAgIDI0MiwyMjksMjI5LDEwNywxMjgsICAzLDIyMCwyMzQsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywKKyAgICAgOTksMTI4LCAgNCwgIDIsMjM2LDIzMywyMzgsMjI5LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgMTQsCisgICAgMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMzYsMjM5LDI0NCwyMjUsMjI3LAorICAgIDIyNywyMjksMjM4LDI0NCwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDYsMjQ3LDExNSwgIDIsICA2LCAzNCwKKyAgICAgIDYsIDQxLDIzNiwyMjUsMjQzLDEwNCwxMjgsICAxLCAxNiwyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxMDAsCisgICAgMjQ0LDIzOSwyNDAsMjI2LDIyNSwxMTQsMTI4LCAgMSwxMzksMTIyLDEzMSwgIDEsMjQyLCAgNiwgNjcsICA2LAorICAgICA3NSwgIDYsMTEyLDIyNywyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwxOTcsMTAxLCAgMiwgIDYsIDgxLCAgNiwKKyAgICAxMDEsMjI1LDIyNiwyMzUsMjMyLDIyNSwyNDMsMjMzLDIyNSwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LDIyNCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsICA1LAorICAgIDIzMiwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAxNSwgNjksMTQ2LCAgMCwKKyAgICAgNjksICA2LDE2NSwgIDYsMTgzLCAgNiwxOTEsICA3LCA4OSwgIDcsMTUzLCAgNywxNjUsICA3LDE4MywgIDcsCisgICAgMjExLCAgOCwgIDcsICA4LCAzNiwgIDgsIDk0LCAgOCwxNjksICA4LDE4OSwgIDgsMjA4LCAgOCwyNDgsICA5LAorICAgICA0NCwgIDksMTA5LCAgOSwxMTUsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjksICAwLDIwMSwgIDYsMTc1LDI0MywKKyAgICAyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMzMsMjI2LDI0MiwyMjksMjQ2LDEwMSwxMjgsICAxLCAyMCwgOTksCisgICAgICA1LCAgNiwyMDMsICA2LDIxMCwgIDYsMjI0LCAgNiwyMzYsICA3LCA3OSwyMjUsMjQyLDIzOSwxMTAsMTI4LAorICAgICAgMSwgMjYsMjI5LDIyOCwyMzMsMjM2LDIzNiwyMjUsMjI2LDI0MiwyMjksMjQ2LDEwMSwxMjgsIDMwLCAyOCwKKyAgICAyMzIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA1MywyMzMsMjQyLCA5OSwgIDIsCisgICAgICA2LDI0NCwgIDYsMjQ5LDIzNiwxMDEsMTI4LCAzNiwxODYsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTM1LAorICAgICAgMCwyMDIsICA3LCAxNiwgIDcsIDI0LCAgNywgMzIsICA3LCA0MywgIDcsIDUxLCAgNywgNjMsICA3LCA3MSwKKyAgICAyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsMTkwLDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgMjQsCisgICAgMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDE5OCwyMzEsMjQyLDIyNSwyNDYsMTAxLAorICAgIDEyOCwgMzAsMTkyLDIzMiwyMzksMjM5LDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsMTk0LDI0MywKKyAgICAyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMzQsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjgsIDMwLDE5NiwyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgIDQsMTAwLCAgMywgIDcsIDk3LCAgNywxMDcsICA3LAorICAgIDEyNywyMjYsMjM2LDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMiwgIDQsMjMzLDIyOSwyNDIsMjI5LDI0MywKKyAgICAyMzMsMTE1LDEyOSwgIDAsMjAzLCAgNywxMTksMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDIzNSwyMzksCisgICAgMTE2LDEzMCwgIDEsIDIyLCAgNywxMzYsICA3LDE0NSwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsICAxLAorICAgICAyMiwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTg0LDIzMCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwKKyAgICAyMzMsIDk5LDEyOCwgIDQsIDM2LDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI5LCAgMCwyMDAsICA3LDE3NSwyNDMsCisgICAgMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMjMyLDEwNCwgIDIsICA3LDE4OSwgIDcsMjAwLDIyNSwyNDIsMjM3LAorICAgIDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNTUsMjM5LDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwKKyAgICAxMjgsIDMwLDE4NiwxMDUsICAzLCAgNywyMTksICA3LDIzMCwgIDcsMjQ1LDIzMSwyMzIsMjQ0LDI0MiwyMzksCisgICAgMjM3LDIyNSwxMTAsMTI4LCAzMywxMDMsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LDIyNiwyNDIsMjI5LAorICAgIDI0NiwxMDEsMTI4LCAgMiwgIDYsMjM5LDI0NCwyMzMsMjMwLDIzMywyMjksMjI4LDIyNywyNDksMjQyLDIzMywKKyAgICAyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMDAsMTA4LCAgMiwgIDgsIDEzLCAgOCwgMjQsMjI3LDI0OSwyNDIsCisgICAgMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAyNywyMjksMjQ2LDIyOSwyMzgsMjQyLDIzOSwyMzcsMjI1LAorICAgIDExMCwxMjgsIDMzLDEwNiwxMDksICAzLCAgOCwgNDQsICA4LCA3MiwgIDgsIDgzLDIyNSwyMjcsMjQyLDIzOSwKKyAgICAxMTAsMTMwLCAgMSwgMTgsICA4LCA1NiwgIDgsIDY0LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAzMCwgMjIsCisgICAgMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLCAyMCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsIDI4LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMzcsMTEwLCAgNCwKKyAgICAgIDgsMTA0LCAgOCwxMTUsICA4LDEzNSwgIDgsMTU0LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksCisgICAgMTI4LCAgNCwgMjksMjI4LDIyOSwyNDMsMjI3LDIyOSwyMzgsMjI4LDIyOSwyNDIsMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE2MiwxMDMsMTI5LCAgMSwgNzQsICA4LDE0MSwyMzIsMjI5LDIyNywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNjQsMjMyLDIzOSwyMzksMjM1LDIyNywyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxOTksMTExLCAgMiwgIDgsMTc1LCAgOCwxODMsMjMxLAorICAgIDIzOSwyMzgsMjI5LDEwNywxMjgsICAxLCAyNCwyNDAsMjI5LDExMCwxMjgsICAxLDE0NCwyNDAsMjQzLDIzMywKKyAgICAyMzYsMjM5LDExMCwxMjksICAzLDE0OSwgIDgsMjAwLDI0NCwyMzksMjM4LDIzOSwxMTUsMTI4LCAgMywxMzYsCisgICAgMTE0LCAgMiwgIDgsMjE0LCAgOCwyMjUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgICAzMiwyMjksMjQ2LDIyOSwyNDIsMjQzLDIyOSwxMDAsMTI5LCAgMSwxNDIsICA4LDIzNywyMjcsMjQ5LDI0MiwKKyAgICAyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDQ1LDExNSwgIDQsICA5LCAgMiwgIDksIDEzLCAgOSwgMzMsCisgICAgICA5LCAzNywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDMzLDIyOCwyMjksMjQzLAorICAgIDIyNywyMjksMjM4LDIyOCwyMjksMjQyLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwKKyAgICAxNzAsMTA0LDEyOCwgIDEsMTY5LDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDEwMSwxMTYsICAzLCAgOSwgNTIsCisgICAgICA5LCA3OCwgIDksIDkyLCA5NywxMzAsICAzLDE1MSwgIDksIDYwLCAgOSwgNzAsMjQyLDIzNywyMjksMjM4LAorICAgIDIzMywyMjUsMTEwLDEyOCwgIDUsIDU2LDI0NCwyMzksMjM4LDIzOSwxMTUsMTI4LCAgMywxMzcsMTA0LDEyOSwKKyAgICAgIDAsMjA4LCAgOSwgODQsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI0MCwyMzMsMjM2LDIyOCwxMDEsCisgICAgMTI5LCAzMCwxODgsICA5LDEwMSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDI2LDI0NSwyNDIsMTExLAorICAgIDEyOCwgMzIsMTcyLDI1MCwxMDQsMTMwLCAgMSwxODMsICA5LDEyNCwgIDksMTMyLDIyNywyMjUsMjQyLDIzOSwKKyAgICAxMTAsMTI4LCAgMSwyMzgsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwxMjgsICAxLDE4NCwgNzAsCisgICAgMTM2LCAgMCwgNzAsICA5LDE2MywgIDksMTcyLCAgOSwxODQsICA5LDIxMiwgIDksMjE5LCAgOSwyNDgsIDEwLAorICAgICAgNCwgMTAsIDE1LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMTg3LDIyOCwyMzksMjQ0LDIyNSwKKyAgICAyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsIDMwLDEwMSwgIDIsICA5LDE5MCwgIDksMjAyLDIzMiwyMjUsCisgICAgMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDg2LDIzMywyMjcsMjM5LDI0MCwyNDQsMjMzLAorICAgICA5OSwxMjgsICAzLDIyOCwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMSwxNDUsMTA1LCAgMiwgIDksMjI1LCAgOSwKKyAgICAyMzgsMjQ0LDIyNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTE0LDI0NiwyMjksCisgICAgMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDEwMCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LAorICAgIDEwMSwxMjgsMjU1LCAzOCwyMzksMjQ1LDI0MiwyNDIsMjM5LDIzNywyMjUsMTEwLDEyOCwgMzMsIDk5LDI0MywKKyAgICAyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxMDIsIDcxLDE0MCwgIDAsIDcxLCAxMCwgNTEsIDEwLCA2MSwgMTAsCisgICAgMTA3LCAxMCwxMTUsIDEwLDE3NiwgMTAsMTkzLCAxMCwyMDUsIDExLCAzOSwgMTEsIDUyLCAxMSwgNjUsIDExLAorICAgICA5MCwgMTEsMTA3LDE5NCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDEzNSwgOTcsICAzLCAxMCwKKyAgICAgNjksIDEwLCA3NiwgMTAsIDk0LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLDI0NCwyMzcsMjM3LCA5NywxMjksCisgICAgICAzLDE0NywgMTAsIDg0LDIyNSwyMzAsMjQyLDIzMywyMjcsMjI1LDExMCwxMjgsICAxLDE0OCwyMzgsMjMxLAorICAgIDIzMywyMjUsMjI3LDIzOSwyNDAsMjQ0LDIzMywgOTksMTI4LCAgMywyMzQsMjI2LDI0MiwyMjksMjQ2LDEwMSwKKyAgICAxMjgsICAxLCAzMCwgOTksICA0LCAxMCwxMjUsIDEwLDEzMiwgMTAsMTQxLCAxMCwxNjMsMjI1LDI0MiwyMzksCisgICAgMTEwLDEyOCwgIDEsMjMwLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgIDEsIDM0LDIzMywyNDIsIDk5LAorICAgICAgMiwgMTAsMTQ5LCAxMCwxNTQsMjM2LDEwMSwxMjgsIDM2LDE4OCwyNDUsMjM3LDIzMCwyMzYsMjI5LDEyMCwKKyAgICAxMjgsICAxLCAyOCwyMzksMjM3LDIzNywyMjUsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAgMSwgMzQsCisgICAgMjI4LDIzOSwxMTYsMTI5LCAgMSwgMzIsIDEwLDE4NCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsICAxLAorICAgICAzMiwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAxOSwxMDQsICAzLCAxMCwKKyAgICAyMTMsIDEwLDIyNiwgMTEsIDMzLDIyNSwyMjgsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsCisgICAgICA1LCA2NiwxMDEsICAzLCAxMCwyMzQsIDEwLDI1NSwgMTEsIDE2LDIzNywyMzMsMjI4LDIyOCwyMzYsMjI5LAorICAgIDIzMiwyMzksMjM5LDIzNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTQ4LDI0MywKKyAgICAyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNDYsCisgICAgMjQ1LDI0MCwyNDQsMjQ1LDI0MiwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgIDE0NCwyMzksMjM5LDEwNywxMjgsICAxLDE0NywyMzMsMjM3LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwKKyAgICAxMTAsMTI4LCAgNSwgNTEsMjM0LDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgICAzLDEwOSwgIDIsIDExLCA3MSwgMTEsIDc5LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAzMCwgMzIsMjM5LAorICAgIDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAzOSwyNDIsMjI1LDI0NiwxMDEsMTI5LDI0NiwKKyAgICAyMDYsIDExLCA5OSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsIDk2LDExNSwgIDIsIDExLDExMywgMTEsCisgICAgMTI5LDIzNywyMjUsMjM2LDEwOCwxMjksMjQ3LDEwMywgMTEsMTIyLDIzMiwyMzksMjM5LDEwNywxMjgsICAyLAorICAgIDE1NSwyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsMjI4LCA3MiwxNDAsICAwLCA3MiwgMTEsMTY1LCAxMSwKKyAgICAxOTAsIDExLDE5OCwgMTEsMjA4LCAxMiwgMTcsIDEyLCA0MCwgMTIsIDc3LCAxMiwxMTcsIDEyLDEyOSwgMTIsCisgICAgMTU3LCAxMiwxNjUsIDEyLDE4OSwxNzcsMTg0LCA1MywgIDMsIDExLDE3NSwgMTEsMTgwLCAxMSwxODUsMTc5LAorICAgICA1MSwxMjgsIDM3LDIwNywxODAsIDUxLDEyOCwgMzcsMTcwLDE4MSwgNDksMTI4LCAzNywxNzEsMTc4LDE3OCwKKyAgICAxNzYsMTgzLCA1MSwxMjgsIDM3LDE2MSwyMDgsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwyMDMsCisgICAgIDk3LCAgMywgMTEsMjE2LCAxMSwyMzYsIDEyLCAgMCwyMjUsMjI2LDIzNSwyMzIsMjI1LDI0MywyMzMsMjI1LAorICAgIDIzOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTY4LDIyOCwyMjksMjQzLDIyNywKKyAgICAyMjksMjM4LDIyOCwyMjksMjQyLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNzgsCisgICAgMjQyLDIyOCwyNDMsMjMzLDIzMSwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgICA0MiwgOTgsICAyLCAxMiwgMjMsIDEyLCAyOCwyMjUsMTE0LDEyOCwgIDEsIDM4LDI0MiwyMjksMjQ2LDIyOSwKKyAgICAyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDQyLCA5OSwgIDIsIDEyLCA0NiwgMTIsIDU1LDIyOSwyMjgsCisgICAgMjMzLDIzNiwyMzYsIDk3LDEyOCwgMzAsIDQwLDIzMywyNDIsIDk5LCAgMiwgMTIsIDYzLCAxMiwgNjgsMjM2LAorICAgIDEwMSwxMjgsIDM2LDE4OSwyNDUsMjM3LDIzMCwyMzYsMjI5LDEyMCwxMjgsICAxLCAzNiwxMDAsICAyLCAxMiwKKyAgICAgODMsIDEyLCA5MywyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTI4LCAzMCwgMzgsMjM5LDExNiwgIDIsCisgICAgIDEyLDEwMCwgMTIsMTA5LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsIDM0LDIyNiwyMjksMjM2LAorICAgIDIzOSwxMTksMTI4LCAzMCwgMzYsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwKKyAgICAgNDAsMTExLCAgMiwgMTIsMTM1LCAxMiwxNDYsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsCisgICAgICA1LCA2NCwyNDIsMjMzLDIyNywyMzksMjQwLDI0NCwyMzMsIDk5LDEyOCwgIDMsMjMyLDI0MywyMzcsMjI1LAorICAgIDIzNiwxMDgsMTI4LDI0NywxMDQsMjQ1LDIzOCwyMzEsMjI1LDI0MiwyNDUsMjM3LDIzNiwyMjUsMjQ1LDExNiwKKyAgICAxMjksMjQ2LDIwNywgMTIsMTgxLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NiwyNDgsMjUwLDI0MywyNDEsCisgICAgMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTQ0LCA3MywxNDYsICAwLCA3MywgMTIsMjM5LCAxMiwyNTEsIDEyLAorICAgIDI1NSwgMTMsIDExLCAxMywgMjksIDEzLCAzNywgMTMsIDk0LCAxMywxODEsIDEzLDIxNCwgMTMsMjI0LCAxMywKKyAgICAyNDIsIDEzLDI1NCwgMTQsIDQ4LCAxNCwgODYsIDE0LCA5OSwgMTQsMTY2LCAxNCwxODcsIDE0LDIwNSwxOTMsCisgICAgMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA0NywgNzQsMTI4LCAgMSwgNTAsMjEzLAorICAgIDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNDYsMjI1LDIyNywyNDUsMjQ0LDEwMSwKKyAgICAxMjksICAwLDIwNSwgMTMsIDIxLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMzcsMjI2LDI0MiwyMjksCisgICAgMjQ2LDEwMSwxMjgsICAxLCA0NCwgOTksICAzLCAxMywgNDUsIDEzLCA1MiwgMTMsIDg0LDIyNSwyNDIsMjM5LAorICAgIDExMCwxMjgsICAxLDIwNywyMzMsMjQyLCA5OSwgIDIsIDEzLCA2MCwgMTMsIDY1LDIzNiwxMDEsMTI4LCAzNiwKKyAgICAxOTAsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTI5LCAgMCwyMDYsIDEzLCA3NiwyNDMsMjM3LDIyNSwyMzYsCisgICAgMTA4LDEyOCwyNDcsMjM4LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAgNiwxMDAsICAzLAorICAgICAxMywxMDIsIDEzLDExMiwgMTMsMTU1LDIyNiwyMzYsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAyLCAgOCwKKyAgICAyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTMxLCAgMCwyMDcsIDEzLDEyOCwgMTMsMTM2LCAxMywxNDcsCisgICAgMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA0NiwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsMjI4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyMzksMjM5LDExNiwxMzAsICAxLCA0OCwKKyAgICAgMTMsMTY0LCAxMywxNzMsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAgMSwgNDgsMjI2LDIyOSwyMzYsCisgICAgMjM5LDExOSwxMjgsIDMwLDIwMiwxMDEsICAyLCAxMywxODcsIDEzLDIwMywyMjYsMjQyLDIyOSwyNDYsMjI5LAorICAgIDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyMTQsMjI3LDI0OSwyNDIsMjMzLDIzNiwKKyAgICAyMzYsMjMzLCA5OSwxMjgsICA0LCAyMSwyMzAsMjQyLDIyNSwyMzUsMjQ0LDI0NSwxMTQsMTI4LCAzMywgMTcsCisgICAgMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjksICAwLDIwNCwgMTMsMjM0LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LAorICAgIDI0NywyMzYsMjMyLDIzOSwyMzksMjM1LDIyNSwyMjYsMjM5LDI0NiwxMDEsMTI4LCAzMCwyMDAsMTA1LCAgMywKKyAgICAgMTQsICA2LCAxNCwgMTcsIDE0LCAzMiwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgIDI0LDIzOCwyNDYsMjI5LDI0MiwyNDQsMjI5LDIyOCwyMjYsMjQyLDIyOSwyNDYsMTAxLDEyOCwgIDIsIDEwLAorICAgIDI0MywyMzIsMjM5LDI0MiwyNDQsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAyNSwKKyAgICAxMDksICAyLCAxNCwgNTQsIDE0LCA3NSwyMjUsMjI3LDI0MiwyMzksMTEwLDEyOSwgIDEsIDQyLCAxNCwgNjQsCisgICAgMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIyNiwyMzksMjM4LDIzOSwyNDMsMjQwLAorICAgIDIyNSwyMjcsMTAxLDEyOCwyNTUsIDQxLDIzOCwyMzMsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwKKyAgICAxMjgsICA1LCA1OSwxMTEsICAzLCAxNCwxMDcsIDE0LDExOCwgMTQsMTI2LDIyNywyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwgIDEsMjMxLDIzOSwyMzgsMjI5LDEwNywxMjgsICAxLCA0NiwyNDQsIDk3LAorICAgIDEzMSwgIDMsMTUzLCAxNCwxMzcsIDE0LDE0NywgMTQsMTU4LDIyNSwyMzAsMjQyLDIzMywyMjcsMjI1LDExMCwKKyAgICAxMjgsICAxLDE1MCwyMjgsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMTE1LDEyOCwgIDMsMTcwLDI0NCwyMzksCisgICAgMjM4LDIzOSwxMTUsMTI4LCAgMywxMzgsMTE1LCAgMiwgMTQsMTcyLCAxNCwxNzksMjM3LDIyNSwyMzYsMTA4LAorICAgIDEyOCwyNDcsMTA1LDI0NCwyNDIsMjM5LDIzNSwxMDEsMTI4LCAgMSwxNTEsMjQ0LDIzMywyMzYsMjI4LDEwMSwKKyAgICAxMjksICAxLCA0MCwgMTQsMTk3LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgNDQsMjUwLDIzMiwyMzMsCisgICAgMjQ0LDI0MywgOTcsICAyLCAxNCwyMTYsIDE0LDIyNywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsMTE2LDIyOCwyMjYsMjM2LDIzMSwyNDIsMjI1LDI0NiwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwKKyAgICAyMzYsMjMzLCA5OSwxMjgsICA0LDExOCwgNzQsMTM0LCAgMCwgNzQsIDE1LCAgNiwgMTUsIDE4LCAxNSwgNDEsCisgICAgIDE1LCA1MywgMTUsIDY3LCAxNSwgNzksMjI1LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LAorICAgICAgNSwgNjUsMjI3LDIzMywyNDIsIDk5LCAgMiwgMTUsIDI3LCAxNSwgMzIsMjM2LDEwMSwxMjgsIDM2LDE5MSwKKyAgICAyNDUsMjM3LDIzMCwyMzYsMjI5LDEyMCwxMjgsICAxLCA1MiwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LCAgOCwyMzIsMjI5LDIzMiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLAorICAgIDEyOCwgIDUsIDc1LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDQyLDI0MywKKyAgICAyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxMDYsIDc1LDE0MCwgIDAsIDc1LCAxNSwxMTUsIDE1LDEyNSwgMTUsCisgICAgMTM1LCAxNiwgMTgsIDE2LCA2NSwgMTYsIDc2LCAxNiwxMDYsIDE2LDE0MywgMTYsMTU2LCAxNiwxNjgsIDE2LAorICAgIDE4MCwgMTYsMjA4LDE5NCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDEzMywyMDMsMjQzLDI0MSwKKyAgICAyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwyMDUsIDk3LCAgNywgMTUsMTUxLCAxNSwxNjksIDE1LDE5MSwgMTUsCisgICAgMjExLCAxNSwyMjYsIDE1LDIzMiwgMTUsMjQ5LDIyNiwyMjUsMjQzLDIzMiwyMzUsMjMzLDI0MiwyMjcsMjQ5LAorICAgIDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTYwLCA5OSwgIDIsIDE1LDE3NSwgMTUsMTgxLDI0NSwKKyAgICAyNDQsMTAxLDEyOCwgMzAsIDQ4LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAyNiwyMjgsCisgICAgMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LDI0MiwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsMTU0LDIzMiwyMzksMjM5LDIzNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsMTk1LDI0MCwyNDAsIDk3LDEyOCwgIDMsMTU0LDI0MywyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNywyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNTgsMjQ2LDIyOSwyNDIsMjQ0LDIzMywyMjcsMjI1LAorICAgIDIzNiwyNDMsMjQ0LDI0MiwyMzksMjM1LDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsMTU2LCA5OSwgIDQsIDE2LCAyOCwgMTYsIDM1LCAxNiwgNDQsIDE2LCA1MiwyMjUsMjQyLDIzOSwxMTAsCisgICAgMTI4LCAgMSwyMzIsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwgNTQsMjMzLDI0MiwyMjcsMjM2LAorICAgIDEwMSwxMjgsIDM2LDE5MiwyMzksMjM3LDIzNywyMjUsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAgMSwKKyAgICAgNTQsMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLCA1MCwxMDEsICAyLCAxNiwgODIsCisgICAgIDE2LCA5NCwyMzIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA4NCwyMzgsMjI1LAorICAgIDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA2MywxMDQsICAzLCAxNiwxMTQsIDE2LDEyNiwKKyAgICAgMTYsMTM3LDIyNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDM3LDIyOSwyMzMsCisgICAgMjI3LDIzOSwyNDAsMjQ0LDIzMywgOTksMTI4LCAgMywyMzAsMjM5LDIzOSwxMDcsMTI4LCAgMSwxNTIsMjM0LAorICAgIDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDEyLDIzNiwyMzMsMjM4LDIyOSwKKyAgICAyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDUyLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsCisgICAgMTAxLDEyOCwyNTUsIDQzLDIzOSwyNDAsMjQwLCA5NywgIDIsIDE2LDE4OSwgMTYsMjAwLDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMjgsMjMxLDI0MiwyMjksMjI5LDEwNywxMjgsICAzLDIyMiwKKyAgICAxMTUsICAyLCAxNiwyMTQsIDE2LDIyNiwyMzMsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LDExMCwyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxMDcsIDc2LDEzOCwgIDAsIDc2LCAxNywgIDEsIDE3LAorICAgICAgNSwgMTcsICA5LCAxNywgMjksIDE3LCA5NSwgMTcsMTMzLCAxNywxNDcsIDE3LDE2NSwgMTcsMTc3LCAxNywKKyAgICAxODksIDc0LDEyOCwgIDEsMTk5LCA3NiwxMjgsMjQ2LDE5MSwgOTcsICAyLCAxNywgMTUsIDE3LCAyMiwyMjcsCisgICAgMjQ1LDI0NCwxMDEsMTI4LCAgMSwgNTcsMjM3LDIyNiwyMjgsIDk3LDEyOCwgIDMsMTU1LCA5OSwgIDQsIDE3LAorICAgICAzOSwgMTcsIDQ2LCAxNywgNTUsIDE3LCA4MiwyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwgNjEsMjI5LDIyOCwKKyAgICAyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwgNTksMjMzLDI0MiwgOTksICAyLCAxNywgNjMsIDE3LCA2OCwyMzYsCisgICAgMTAxLDEyOCwgMzYsMTkzLDI0NSwyMzcsMjMwLDIzNiwyMjksMjQ4LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LAorICAgICAzMCwgNjAsMjM5LDIzNywyMzcsMjI1LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgIDEsIDU5LDIyOCwKKyAgICAyMzksMTE2LDEzMCwgIDEsIDYzLCAxNywxMDUsIDE3LDExNCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsCisgICAgICAxLCA2MywyMjYsMjI5LDIzNiwyMzksMTE5LDEyOSwgMzAsIDU0LCAxNywxMjQsMjM3LDIyNSwyMjcsMjQyLAorICAgIDIzOSwxMTAsMTI4LCAzMCwgNTYsMjMzLDI0NywyMzgsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwKKyAgICAxMjgsICA1LCA2MCwxMDYsMTI5LCAgMSwyMDAsIDE3LDE1MywyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LCAgOSwyMzYsMjMzLDIzOCwyMjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLAorICAgICA1OCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA0NCwxMTUsICAyLCAxNywKKyAgICAxOTUsIDE3LDIxMiwyMzYsMjI1LDI0MywxMDQsMTI5LCAgMSwgNjUsIDE3LDIwNCwyNDMsMjM3LDIyNSwyMzYsCisgICAgMTA4LDEyOCwyNDYsMjQ5LDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDEwOCwgNzcsMTM3LCAgMCwgNzcsIDE3LAorICAgIDI0MSwgMTcsMjUxLCAxOCwgMjQsIDE4LCAzMywgMTgsIDU4LCAxOCwgNzEsIDE4LCA4MywgMTgsIDkxLCAxOCwKKyAgICAxMDAsMTk0LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTM0LDIyNSwgOTksICAyLCAxOCwgIDIsCisgICAgIDE4LCAxOCwyNDIsMjM5LDExMCwxMjksMjQ2LDIwOCwgMTgsIDEwLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LAorICAgIDI0NywxNzUsMjQ1LDI0NCwxMDEsMTI4LCAzMCwgNjIsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNiwKKyAgICAxOTQsMjI4LDIzOSwxMTYsICAyLCAxOCwgNDEsIDE4LCA1MCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsCisgICAgIDMwLCA2NCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDY2LDIyOSwyMzgsMjI1LDI0MiwyMzcsMjI5LAorICAgIDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA2OCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwKKyAgICAxMjgsMjU1LCA0NSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTA5LDI0NCwyNDUsMjQyLDIzOCwyMjksCisgICAgMTAwLDEyOCwgIDEsMTU2LDExNywxMjgsICAzLDE1NiwgNzgsMTQxLCAgMCwgNzgsIDE4LDEzNCwgMTgsMTM4LAorICAgICAxOCwxNDYsIDE4LDIxMiwgMTgsMjM3LCAxOCwyNDgsIDE5LCAgMywgMTksIDIxLCAxOSwgMzMsIDE5LCA0NSwKKyAgICAgMTksIDU4LCAxOSwgNjYsIDE5LCA4NCwgNzQsMTI4LCAgMSwyMDIsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsCisgICAgICAxLCA2NywgOTksICA0LCAxOCwxNTYsIDE4LDE2MywgMTgsMTcyLCAxOCwxOTksMjI1LDI0MiwyMzksMTEwLAorICAgIDEyOCwgIDEsIDcxLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgIDEsIDY5LDIzMywyNDIsIDk5LCAgMiwKKyAgICAgMTgsMTgwLCAxOCwxODUsMjM2LDEwMSwxMjgsIDM2LDE5NSwyNDUsMjM3LDIzMCwyMzYsMjI5LDI0OCwyMjYsCisgICAgMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDc0LDIzOSwyMzcsMjM3LDIyNSwyMjUsMjI3LDIyNywyMjksMjM4LAorICAgIDExNiwxMjgsICAxLCA2OSwyMjgsMjM5LDExNiwgIDIsIDE4LDIyMCwgMTgsMjI5LDIyNSwyMjcsMjI3LDIyOSwKKyAgICAyMzgsMTE2LDEyOCwgMzAsIDY4LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgNzAsMjMyLDIzOSwyMzksCisgICAgMjM1LDIzNiwyMjksMjMwLDExNiwxMjgsICAxLDE1NywyMzMsMjM4LDIyOSwyNDIsMjM5LDIzNywyMjUsMTEwLAorICAgIDEyOCwgMzMsMTA0LDEwNiwxMjksICAxLDIwMywgMTksICA5LDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwKKyAgICAyMzMsIDk5LDEyOCwgIDQsIDEwLDIzNiwyMzMsMjM4LDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsCisgICAgIDcyLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDQ2LDIzOSwyNDcsMjI1LAorICAgIDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA3MCwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwKKyAgICAyNDcsMTEwLDI0NCwyMzMsMjM2LDIyOCwxMDEsMTI5LCAgMCwyMDksIDE5LCA3NiwyNDMsMjM3LDIyNSwyMzYsCisgICAgMTA4LDEyOCwyNDcsMjQxLDExNywxMjgsICAzLDE1NywgNzksMTQxLCAgMCwgNzksIDE5LDExOCwgMTksMTMyLAorICAgICAxOSwxNTAsIDE5LDIwMywgMjAsIDc4LCAyMCwxNTIsIDIwLDE4NywgMjEsIDQ4LCAyMSwgNjksIDIxLDIxMywKKyAgICAgMjEsMjIzLCAyMSwyNTQsIDIyLCA1MywgNjksMTI5LCAgMSwgODIsIDE5LDEyNCwyNDMsMjM3LDIyNSwyMzYsCisgICAgMTA4LDEyOCwyNDYsMjUwLDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI5LCAgMCwyMTEsIDE5LDE0MiwyNDMsMjM3LAorICAgIDIyNSwyMzYsMTA4LDEyOCwyNDcsMjQzLCA5OCwgIDIsIDE5LDE1NiwgMTksMTk2LDIyNSwyNDIsMjQyLDIyOSwKKyAgICAxMDAsICAyLCAxOSwxNjYsIDE5LDE3NywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgMjMyLDIyOCwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLAorICAgICA5OSwxMjgsICA0LDIzNCwyNDIsMjI5LDI0NiwxMDEsMTI4LCAgMSwgNzgsIDk5LCAgNCwgMTksMjEzLCAxOSwKKyAgICAyMjAsIDE5LDIzNSwgMjAsIDY4LDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLDIwOSwyMjksMjM4LDI0NCwyMjksCisgICAgMjQyLDIyOSwyMjgsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjgsICAxLDE1OSwyMzMsMjQyLCA5OSwgIDIsIDE5LAorICAgIDI0MywgMTksMjQ4LDIzNiwxMDEsMTI4LCAzNiwxOTYsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTM0LCAgMCwKKyAgICAyMTIsIDIwLCAxMywgMjAsIDIxLCAyMCwgMzIsIDIwLCA0MCwgMjAsIDUyLCAyMCwgNjAsMjI1LDIyNywyNDUsCisgICAgMjQ0LDEwMSwxMjgsIDMwLDIwOCwyMjgsMjM5LDI0NCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMjE2LAorICAgIDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAzMCwyMTAsMjMyLDIzOSwyMzksMjM1LDIyNSwyMjYsMjM5LDI0NiwKKyAgICAxMDEsMTI4LCAzMCwyMTIsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI0NCwyNDQsMjMzLDIzNiwyMjgsCisgICAgMTAxLDEyOCwgMzAsMjE0LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAzMCwxMDAsICAzLAorICAgICAyMCwgODYsIDIwLDEwOSwgMjAsMTQyLDIyNiwxMDgsICAyLCAyMCwgOTMsIDIwLDEwMSwyMjUsMjI3LDI0NSwKKyAgICAyNDQsMTAxLDEyOCwgIDEsIDgwLDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMiwgMTIsMjMzLDIyOSwyNDIsCisgICAgMjI5LDI0MywyMzMsMTE1LDEzMCwgIDAsMjE0LCAyMCwxMjMsIDIwLDEzNCwyMjcsMjQ5LDI0MiwyMzMsMjM2LAorICAgIDIzNiwyMzMsIDk5LDEyOCwgIDQsMjMwLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyNDYsMjM5LDI0NCwKKyAgICAyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMjA0LDEwMywgIDIsIDIwLDE1OCwgMjAsMTcwLDIzOSwyMzgsCisgICAgMjI5LDIzNSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDYsMjUxLDI0MiwyMjUsMjQ2LDEwMSwxMjksICAwLAorICAgIDIxMCwgMjAsMTc5LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyNDIsMTA0LCAgNCwgMjAsMTk3LCAyMCwKKyAgICAyMDgsIDIwLDIxMiwgMjEsIDM0LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgODUsCisgICAgMTA5LDEyOCwgMzMsIDM4LDExMSwgIDIsIDIwLDIxOCwgMjAsMjI4LDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LAorICAgIDEwMSwxMjgsIDMwLDIwNiwyNDIsMTEwLDEzMywgIDEsMTYwLCAyMCwyNDMsIDIwLDI1MSwgMjEsICA2LCAyMSwKKyAgICAgMTQsIDIxLCAyNiwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsMjE4LDIyOCwyMzksMjQ0LDIyNiwyMjksCisgICAgMjM2LDIzOSwxMTksMTI4LCAzMCwyMjYsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLDIyMCwyMzIsMjM5LAorICAgIDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIyMiwyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwKKyAgICAgMzAsMjI0LDI0NSwyMzgsMjMxLDIyNSwyNDIsMjQ1LDIzNywyMzYsMjI1LDI0NSwxMTYsMTI4LCAgMSwgODAsCisgICAgMTA1LDEyOSwgIDEsMTYyLCAyMSwgNTQsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LDIyNiwyNDIsMjI5LAorICAgIDI0NiwxMDEsMTI4LCAgMiwgMTQsMTA5LCAgNCwgMjEsIDc5LCAyMSwxMDcsIDIxLDE4NCwgMjEsMjAyLDIyNSwKKyAgICAyMjcsMjQyLDIzOSwxMTAsMTMwLCAgMSwgNzYsIDIxLCA5MSwgMjEsIDk5LDIyNSwyMjcsMjQ1LDI0NCwxMDEsCisgICAgMTI4LCAzMCwgODIsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLCA4MCwyMjksMjMxLCA5NywxMzIsIDMzLAorICAgICAzOCwgMjEsMTIxLCAyMSwxMzIsIDIxLDE0MCwgMjEsMTU2LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywKKyAgICAgOTksMTI4LCAgNCwgOTYsMjMxLDI0MiwyMjksMjI5LDEwNywxMjgsICAzLDE2OSwyNDIsMjM5LDI0NSwyMzgsCisgICAgMjI4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMjIsMTE2LCAgMiwgMjEsMTYyLAorICAgICAyMSwxNzcsMjMzLDI0NCwyMzYsMjM5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwKKyAgICAxMjQsMjM5LDIzOCwyMzksMTE1LDEyOCwgIDMsMTQzLDIzMywyMjcsMjQyLDIzOSwxMTAsMTI5LCAgMywxNTksCisgICAgIDIxLDE5NCwyNDQsMjM5LDIzOCwyMzksMTE1LDEyOCwgIDMsMTQwLDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LAorICAgIDIyNywxMDEsMTI4LDI1NSwgNDcsMjM4LDIyOSwyNDIsMjM5LDIzNywyMjUsMTEwLDEyOCwgMzMsIDk2LDExMSwKKyAgICAgIDIsIDIxLDIyOSwgMjEsMjQ4LDIzMSwyMzksMjM4LDIyOSwxMDcsMTI5LCAgMSwyMzQsIDIxLDIzOSwyMzcsCisgICAgMjI1LDIyNywyNDIsMjM5LDExMCwxMjgsICAxLDIzNiwyNDAsMjI5LDExMCwxMjgsICAxLDEzNCwxMTUsICAzLAorICAgICAyMiwgIDYsIDIyLCAzMywgMjIsIDQwLDIzNiwyMjUsMjQzLDEwNCwxMzAsICAwLDIxNiwgMjIsIDE3LCAyMiwKKyAgICAgMjUsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLDI1NCwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsCisgICAgMjQ4LDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDExMSwyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNSwyMjcsMjQ1LAorICAgIDI0NCwxMDEsMTI4LCAgMSwyNTQsMTE2LCAgMiwgMjIsIDU5LCAyMiwgNzAsMjI3LDI0OSwyNDIsMjMzLDIzNiwKKyAgICAyMzYsMjMzLCA5OSwxMjgsICA0LDEyNiwyMzMsMjM2LDIyOCwxMDEsMTMxLCAgMCwyMTMsIDIyLCA4MywgMjIsCisgICAgIDkxLCAyMiwxMDIsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA3NiwyMjgsMjMzLDIyOSwyNDIsMjI5LAorICAgIDI0MywyMzMsMTE1LDEyOCwgMzAsIDc4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyNDUsIDgwLDEzNiwKKyAgICAgIDAsIDgwLCAyMiwxMzAsIDIyLDEzOCwgMjIsMTQ3LCAyMiwxNTksIDIyLDIxMSwgMjIsMjI3LCAyMiwyNDYsCisgICAgIDIzLCAgMiwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsIDg0LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLAorICAgIDEyOCwgMzYsMTk3LDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsIDg2LDEwMSwKKyAgICAgIDMsIDIyLDE2NywgMjIsMTc4LCAyMiwxOTAsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LCAzMSwyMzIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA3NCwyMzcsMjMzLAorICAgIDIyOCwyMjgsMjM2LDIyOSwyMzIsMjM5LDIzOSwyMzUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwKKyAgICAxMjgsICA0LDE2NiwxMDQsICAyLCAyMiwyMTcsIDIyLDIyMSwxMDUsMTI4LCAgMywxNjYsMjM5LDIzOSwxMDcsCisgICAgMTI4LCAgMSwxNjQsMTA1LDEyOSwgIDMsMTYwLCAyMiwyMzMsMjQ3LDI0MiwyMjUsMjQyLDIzNywyMjksMjM4LAorICAgIDIzMywyMjUsMTEwLDEyOCwgIDUsIDgzLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsIDQ4LDExNSwgIDIsIDIzLCAgOCwgMjMsIDI1LDEwNSwxMjksICAzLDE2OCwgMjMsIDE0LDIyNywyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMTIsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTEyLAorICAgICA4MSwxMzEsICAwLCA4MSwgMjMsIDQyLCAyMywgNTEsIDIzLCA2MywyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwKKyAgICAxMjgsIDM2LDE5OCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA0OSwyNDMsCisgICAgMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTEzLCA4MiwxMzgsICAwLCA4MiwgMjMsIDk1LCAyMywxMTksIDIzLAorICAgIDE2NiwgMjMsMjE3LCAyMywyMzAsIDIzLDI0MCwgMjMsMjQ1LCAyNCwgMTksIDI0LCAzMSwgMjQsIDQzLCA5NywKKyAgICAgIDIsIDIzLDEwMSwgMjMsMTEyLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNzYsCisgICAgMjI3LDI0NSwyNDQsMTAxLDEyOCwgIDEsIDg0LCA5OSwgIDQsIDIzLDEyOSwgMjMsMTM2LCAyMywxNDUsIDIzLAorICAgIDE1MywyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwgODgsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwKKyAgICAgODYsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM2LDE5OSwyMzksMjM3LDIzNywyMjUsMjI1LDIyNywyMjcsCisgICAgMjI5LDIzOCwxMTYsMTI4LCAgMSwgODYsMTAwLCAgMiwgMjMsMTcyLCAyMywxODIsMjI2LDIzNiwyMzEsMjQyLAorICAgIDIyNSwyNDYsMTAxLDEyOCwgIDIsIDE2LDIzOSwxMTYsICAyLCAyMywxODksIDIzLDE5OCwyMjUsMjI3LDIyNywKKyAgICAyMjksMjM4LDExNiwxMjgsIDMwLCA4OCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOSwgMzAsIDkwLCAyMywyMDgsCisgICAgMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAzMCwgOTIsMjI5LDIzMiwyMjUsMjQyLDIzNywyMjksMjM4LAorICAgIDIzMywyMjUsMTEwLDEyOCwgIDUsIDgwLDIzMCwyNDIsMjI1LDIzNSwyNDQsMjQ1LDExNCwxMjgsIDMzLCAyOCwKKyAgICAyMzIsMTExLDEyOCwgIDMsMTYxLDIzMywxMTAsICAyLCAyMywyNTIsIDI0LCAgNSwyMzEsMjQzLDIzNywyMjUsCisgICAgMjM2LDEwOCwxMjgsMjQ2LDI1MiwyNDYsMjI5LDI0MiwyNDQsMjI5LDIyOCwyMjYsMjQyLDIyOSwyNDYsMTAxLAorICAgIDEyOCwgIDIsIDE4LDIzNiwyMzMsMjM4LDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDk0LDIzNywKKyAgICAyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDUwLDI0MywyMzcsMjI1LDIzNiwxMDgsCisgICAgMTI5LDI0NywxMTQsIDI0LCA1MywyMzMsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMTAwLDEyOSwgIDIsMTI5LAorICAgICAyNCwgNjYsMjQzLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsICAyLDE4MiwgODMsMTM5LCAgMCwKKyAgICAgODMsIDI0LDEwMywgMjYsIDE3LCAyNiwgNTUsIDI2LDE4MiwgMjYsMjIxLCAyNiwyNTAsIDI3LCA4NCwgMjcsCisgICAgMTA1LCAyNywxMTcsIDI3LDEzNSwgMjcsMTQzLCA3MCwgIDYsIDI0LDExNywgMjQsMjA5LCAyNCwyNDEsIDI1LAorICAgICA3NywgMjUsMTE5LCAyNSwyMjEsIDQ4LCAgOSwgMjQsMTM3LCAyNCwxNDUsIDI0LDE1MywgMjQsMTYxLCAyNCwKKyAgICAxNjksIDI0LDE3NywgMjQsMTg1LCAyNCwxOTMsIDI0LDIwMSwxNzcsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsCisgICAgIDEyLDE3OCwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgMjAsMTc5LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LAorICAgICAxNiwxODAsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsIDI0LDE4MSwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywKKyAgICAgNjAsMTgyLDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LCA0NCwxODMsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsCisgICAgIDUyLDE4NCwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgMjgsMTg1LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LAorICAgICAzNiwgNDksICAzLCAyNCwyMTcsIDI0LDIyNSwgMjQsMjMzLDE3NiwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywKKyAgICAgIDAsMTc3LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LCAgMiwxODUsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsCisgICAgIDk3LCA1MCwgIDksIDI1LCAgNSwgMjUsIDEzLCAyNSwgMjEsIDI1LCAyOSwgMjUsIDM3LCAyNSwgNDUsIDI1LAorICAgICA1MywgMjUsIDYxLCAyNSwgNjksMTc2LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LCA5OCwxNzcsMTc2LDE3NiwKKyAgICAxNzYsIDQ4LDEyOCwgMzcsIDg2LDE3OCwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgODUsMTc5LDE3NiwxNzYsCisgICAgMTc2LCA0OCwxMjgsIDM3LCA5OSwxODAsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsIDgxLDE4MSwxNzYsMTc2LAorICAgIDE3NiwgNDgsMTI4LCAzNywgODcsMTgyLDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LCA5MywxODMsMTc2LDE3NiwKKyAgICAxNzYsIDQ4LDEyOCwgMzcsIDkyLDE4NCwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgOTEsIDUxLCAgNCwgMjUsCisgICAgIDg3LCAyNSwgOTUsIDI1LDEwMywgMjUsMTExLDE4MiwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgOTQsMTgzLAorICAgIDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LCA5NSwxODQsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsIDkwLDE4NSwKKyAgICAxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgODQsIDUyLCAxMCwgMjUsMTQxLCAyNSwxNDksIDI1LDE1NywgMjUsCisgICAgMTY1LCAyNSwxNzMsIDI1LDE4MSwgMjUsMTg5LCAyNSwxOTcsIDI1LDIwNSwgMjUsMjEzLDE3NiwxNzYsMTc2LAorICAgIDE3NiwgNDgsMTI4LCAzNywxMDUsMTc3LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LDEwMiwxNzgsMTc2LDE3NiwKKyAgICAxNzYsIDQ4LDEyOCwgMzcsIDk2LDE3OSwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgODAsMTgwLDE3NiwxNzYsCisgICAgMTc2LCA0OCwxMjgsIDM3LDEwOCwxODEsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsMTAzLDE4MiwxNzYsMTc2LAorICAgIDE3NiwgNDgsMTI4LCAzNywxMDQsMTgzLDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LDEwMCwxODQsMTc2LDE3NiwKKyAgICAxNzYsIDQ4LDEyOCwgMzcsMTAxLDE4NSwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywgODksIDUzLCAgNSwgMjUsCisgICAgMjMzLCAyNSwyNDEsIDI1LDI0OSwgMjYsICAxLCAyNiwgIDksMTc2LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LAorICAgICA4OCwxNzcsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsIDgyLDE3OCwxNzYsMTc2LDE3NiwgNDgsMTI4LCAzNywKKyAgICAgODMsMTc5LDE3NiwxNzYsMTc2LCA0OCwxMjgsIDM3LDEwNywxODAsMTc2LDE3NiwxNzYsIDQ4LDEyOCwgMzcsCisgICAgMTA2LCA5NywgIDIsIDI2LCAyMywgMjYsIDQ0LDIyNywyNDUsMjQ0LDEwMSwxMjksICAxLCA5MCwgMjYsIDMyLAorICAgIDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsMTAwLDIzNywyNDAsMjMzLDIzMSwKKyAgICAyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywyMjQsIDk5LCAgNSwgMjYsIDY3LCAyNiwgOTgsIDI2LDEwNywgMjYsCisgICAgMTQ3LCAyNiwxNjksMjI1LDI0MiwyMzksMTEwLDEzMCwgIDEsIDk2LCAyNiwgNzgsIDI2LCA5MCwyMjgsMjM5LAorICAgIDI0NCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsIDMwLDEwMiwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwKKyAgICAyNDYsMjUzLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgIDEsIDk0LDIzMiwyNDcsIDk3LDEzMCwgIDEsCisgICAgMTQzLCAyNiwxMTcsIDI2LDEyOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjE2LAorICAgIDIyOCwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwKKyAgICAxMjgsICA0LDIxOCwyMzMsMjQyLCA5OSwgIDIsIDI2LDE1NSwgMjYsMTYwLDIzNiwxMDEsMTI4LCAzNiwyMDAsCisgICAgMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTI4LCAgMSwgOTIsMjM5LDIzNywyMzcsMjI1LDIyNSwyMjcsMjI3LAorICAgIDIyOSwyMzgsMTE2LDEyOCwgIDIsIDI0LDIyOCwyMzksMTE2LCAgMiwgMjYsMTkwLCAyNiwxOTksMjI1LDIyNywKKyAgICAyMjcsMjI5LDIzOCwxMTYsMTI4LCAzMCwgOTYsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjksIDMwLCA5OCwgMjYsCisgICAgMjA5LDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsMTA0LDEwMSwgIDIsIDI2LAorICAgIDIyNywgMjYsMjM5LDIzMiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDc3LDI0NiwKKyAgICAyMjksMjM4LDI0MiwyMzksMjM3LDIyNSwxMTAsMTI4LCAzMywxMDIsMTA0LCAgNSwgMjcsICA2LCAyNywgMzQsCisgICAgIDI3LCA0OCwgMjcsIDU5LCAyNywgNzIsIDk3LCAgMiwgMjcsIDEyLCAyNywgMjMsMjI1LDI0MiwyMzcsMjI5LAorICAgIDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA3MSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsIDQwLDIyNywyMzIsMjI1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNDEsCisgICAgMjI5LDIzMywyMjcsMjM5LDI0MCwyNDQsMjMzLCA5OSwxMjgsICAzLDIyNiwyMzIsMjI1LDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxODYsMjMzLDIzNywyMjUsMjI3LDIzOSwyNDAsMjQ0LDIzMywKKyAgICAgOTksMTI4LCAgMywyMzYsMTA1LCAgMiwgMjcsIDkwLCAyNywgOTYsMjMxLDIzNywgOTcsMTI4LCAgMywxNjMsCisgICAgMjQ4LDI0MiwyMzksMjM3LDIyNSwxMTAsMTI4LCAzMywxMDEsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LAorICAgIDIyNywxMDEsMTI4LDI1NSwgNTEsMjM5LDIzMCwyNDQsMjQzLDIzMywyMzEsMjM4LDIyNywyNDksMjQyLDIzMywKKyAgICAyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNDQsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDExNSwyNDQsCisgICAgMjMzLDIzMSwyMzcsMjI1LDIzMSwyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywyMTgsIDg0LDE0MSwgIDAsIDg0LAorICAgICAyNywxODYsIDI3LDE5MSwgMjcsMTk3LCAyOCwgIDcsIDI4LCAzMiwgMjgsIDk2LCAyOCwxNDcsIDI4LDE3NywKKyAgICAgMjgsMTg5LCAyOCwyMDEsIDI4LDI0NiwgMjksICA2LCAyOSwgNDYsMjI1LDExNywxMjgsICAzLDE2NCwyMjYsCisgICAgMjI1LDExNCwxMjgsICAxLDEwMiwgOTksICA0LCAyNywyMDcsIDI3LDIxNCwgMjcsMjIzLCAyNywyNTAsMjI1LAorICAgIDI0MiwyMzksMTEwLDEyOCwgIDEsMTAwLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgIDEsIDk4LDIzMywKKyAgICAyNDIsIDk5LCAgMiwgMjcsMjMxLCAyNywyMzYsMjM2LDEwMSwxMjgsIDM2LDIwMSwyNDUsMjM3LDIzMCwyMzYsCisgICAgMjI5LDI0OCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTEyLDIzOSwyMzcsMjM3LDIyNSwyMjUsMjI3LAorICAgIDIyNywyMjksMjM4LDExNiwxMjgsICAxLCA5OCwyMjgsMjM5LDExNiwgIDIsIDI4LCAxNSwgMjgsIDI0LDIyNSwKKyAgICAyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsMTA2LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwxMDgsCisgICAgMTAxLCAgNCwgMjgsIDQyLCAyOCwgNTMsIDI4LCA3MywgMjgsIDgyLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LAorICAgIDIzMywgOTksMTI4LCAgNCwgMzQsMjI4LDIyOSwyNDMsMjI3LDIyOSwyMzgsMjI4LDIyOSwyNDIsMjI3LDI0OSwKKyAgICAyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE3MiwyMzgsMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsCisgICAgIDMzLDEwNSwyNDQsMjQzLDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTgwLAorICAgIDEwNCwgIDMsIDI4LDEwNCwgMjgsMTEwLCAyOCwxMzYsMjI5LDI0NCwgOTcsMTI4LCAgMywxNTIsMTExLCAgMiwKKyAgICAgMjgsMTE2LCAyOCwxMjEsMjM5LDEwNywxMjgsICAxLDE3MiwyNDIsMTEwLDEyOSwgIDAsMjIyLCAyOCwxMjgsCisgICAgMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI1NCwyNDIsMjI5LDIyOSwyNDIsMjM5LDIzNywyMjUsMTEwLAorICAgIDEyOCwgMzMsIDk4LDEwNSwgIDIsIDI4LDE1MywgMjgsMTY0LDIzNiwyMjgsMjI5LDI0MywyMzcsMjI1LDIzNiwKKyAgICAxMDgsMTI4LDI0NiwyNTQsMjQ3LDIzOCwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsCisgICAgIDc5LDIzNiwyMzMsMjM4LDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTEwLDIzNywyMzksMjM4LAorICAgIDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDUyLDExMSwgIDIsIDI4LDIwNywgMjgsMjE4LDIyNSwKKyAgICAyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNTcsMjM4LDEwMSwgIDMsIDI4LDIyNywgMjgsCisgICAgMjM0LCAyOCwyNDAsMjMwLDIzMywyNDYsMTAxLDEyOCwgIDEsMTg4LDI0MywyMzMsMTIwLDEyOCwgIDEsMTMyLAorICAgIDI0NCwyNDcsMTExLDEyOCwgIDEsMTY3LDI0MiwyMjksMjQ0LDI0MiwyMzksMjMwLDIzNiwyMjksMjQ4LDIzMiwKKyAgICAyMzksMjM5LDEwNywxMjgsICAxLDE3NCwxMTUsICAzLCAyOSwgMTQsIDI5LCAyNiwgMjksIDM5LDIyOSwyMjcsCisgICAgMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDM4LDIzMiwyMjksMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAxMSwyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxMTYsMTE5LCAgMiwKKyAgICAgMjksIDUyLCAyOSwgNjQsMjI5LDIzNiwyNDYsMjI5LDI0MiwyMzksMjM3LDIyNSwxMTAsMTI4LCAzMywxMDcsCisgICAgMjM5LDI0MiwyMzksMjM3LDIyNSwxMTAsMTI4LCAzMywgOTcsIDg1LDE0MiwgIDAsIDg1LCAyOSwxMDUsIDI5LAorICAgIDEyMywgMjksMTMxLCAyOSwxOTgsIDMwLCA2OSwgMzAsIDg3LCAzMCwxOTgsIDMwLDIxNCwgMzAsMjI2LCAzMSwKKyAgICAgMjEsIDMxLCAzMCwgMzEsMTQyLCAzMSwxNDksIDMxLDIxOSwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOSwgIDAsCisgICAgMjE4LCAyOSwxMTUsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI1MCwyMjYsMjQyLDIyOSwyNDYsMTAxLAorICAgIDEyOCwgIDEsMTA4LCA5OSwgIDMsIDI5LDEzOSwgMjksMTQ2LCAyOSwxODgsMjI1LDI0MiwyMzksMTEwLDEyOCwKKyAgICAgIDEsMjExLDIzMywyNDIsIDk5LCAgMiwgMjksMTU0LCAyOSwxNTksMjM2LDEwMSwxMjgsIDM2LDIwMiwyNDUsCisgICAgMjM3LDIzMCwyMzYsMjI5LDEyMCwxMzAsICAwLDIxOSwgMjksMTcyLCAyOSwxODAsMjI2LDIyOSwyMzYsMjM5LAorICAgIDExOSwxMjgsIDMwLDExOCwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMjUxLDI0OSwyNDIsMjMzLDIzNiwKKyAgICAyMzYsMjMzLCA5OSwxMjgsICA0LCAzNSwxMDAsICAzLCAyOSwyMDYsIDI5LDIyOSwgMzAsIDU5LDIyNiwxMDgsCisgICAgICAyLCAyOSwyMTMsIDI5LDIyMSwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgIDEsMTEyLDIzMSwyNDIsMjI1LAorICAgIDI0NiwxMDEsMTI4LCAgMiwgMjAsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMTE1LDEzNCwgIDAsMjIwLCAyOSwKKyAgICAyNTEsIDMwLCAgMywgMzAsIDExLCAzMCwgMzQsIDMwLCA0MiwgMzAsIDUxLDIyNSwyMjcsMjQ1LDI0NCwxMDEsCisgICAgMTI4LCAgMSwyMTUsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDExNCwgOTksICAyLCAzMCwgMTcsIDMwLAorICAgICAyNCwyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMTcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsMjQwLDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMSwyMTksMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsCisgICAgMTI4LCAgMSwyMTMsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI1MiwyMzksMjQ0LDIyNiwyMjksMjM2LAorICAgIDIzOSwxMTksMTI4LCAzMCwyMjgsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjksICAwLDIxNywgMzAsIDc5LDI0MywKKyAgICAyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywyNDksMTA0LCAgMiwgMzAsIDkzLCAzMCwxNzEsMTExLCAgMiwgMzAsCisgICAgIDk5LCAzMCwxMDksMjM5LDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsMjMwLDI0MiwxMTAsMTMzLAorICAgICAgMSwxNzUsIDMwLDEyNCwgMzAsMTMyLCAzMCwxNDMsIDMwLDE1MSwgMzAsMTYzLDIyNSwyMjcsMjQ1LDI0NCwKKyAgICAxMDEsMTI4LCAzMCwyMzIsMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDI0MCwyMzEsCisgICAgMjQyLDIyNSwyNDYsMTAxLDEyOCwgMzAsMjM0LDIzMiwyMzksMjM5LDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLAorICAgIDEyOCwgMzAsMjM2LDI0NCwyMzMsMjM2LDIyOCwxMDEsMTI4LCAzMCwyMzgsMjQ1LDIzOCwyMzEsMjI1LDI0MiwKKyAgICAyNDUsMjM3LDIzNiwyMjUsMjQ1LDExNiwxMjksICAxLDExMiwgMzAsMTg3LDIyNywyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwyNDIsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDQsMjI5LDIyOCwyMjYsMjQyLAorICAgIDIyOSwyNDYsMTAxLDEyOCwgIDIsIDIyLDIzNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsMTIwLDEwOSwgIDIsIDMwLDIzMiwgMzEsIDEwLDIyNSwyMjcsMjQyLDIzOSwxMTAsMTMwLCAgMSwxMDYsCisgICAgIDMwLDI0NCwgMzAsMjU1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyMzgsMjI4LAorICAgIDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjgsIDMwLDEyMiwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwKKyAgICAyMjcsMTAxLDEyOCwyNTUsIDUzLDIzOSwyMzEsMjM5LDIzOCwyMjksMTA3LDEyOCwgIDEsMTE0LDI0MCwyNDMsCisgICAgMjMzLDIzNiwyMzksMTEwLDEzMywgIDMsMTY1LCAzMSwgNDksIDMxLCA1MywgMzEsIDkwLCAzMSwxMjEsIDMxLAorICAgIDEzNCwgNDksMTI4LCAgMywyMTAsIDk3LCAgMiwgMzEsIDU5LCAzMSwgODEsMjI3LDI0NSwyNDQsMjI5LDIzMiwKKyAgICAyMzksMjM5LDIzNSwyNDMsMjQ5LDIzNywyMjYsMjM5LDIzNiwyMzEsMjQyLDIyOSwyMjksMTA3LDEyOCwgIDMsCisgICAgMjExLDIzMCwyNDIsMjMzLDIyNywyMjUsMTEwLDEyOCwgIDEsMTc3LDIyOCwyMzMsMjI5LDI0MiwyMjksMjQzLAorICAgIDIzMywxMTUsMTI5LCAgMywxNzEsIDMxLDEwMywyMzIsMjM5LDIzOSwyMzUsMjQzLDI0OSwyMzcsMjI2LDIzOSwKKyAgICAyMzYsMjMxLDI0MiwyMjksMjI5LDEwNywxMjgsICAzLDIxMiwyMzIsMjM5LDIzOSwyMzUsMjQzLDI0OSwyMzcsCisgICAgMjI2LDIzOSwxMDgsMTI4LCAgMywyMTAsMjQ0LDIzOSwyMzgsMjM5LDExNSwxMjgsICAzLDE0MiwyNDIsMjMzLAorICAgIDIzOCwxMDMsMTI4LCAgMSwxMTAsMTE1LCAgMywgMzEsMTU3LCAzMSwxNzIsIDMxLDE3OSwyMzIsMjM5LDI0MiwKKyAgICAyNDQsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAxNCwyMzcsMjI1LDIzNiwxMDgsCisgICAgMTI4LDI0NywxMTcsMjQ0LDI0MiwyMjUsMjMzLDIzMSwyMzIsMTE2LCAgMiwgMzEsMTkxLCAzMSwyMDIsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE3NCwyNDMsMjQ0LDI0MiwyMzksMjM1LDIyOSwKKyAgICAyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTc2LDI0NCwyMzMsMjM2LDIyOCwxMDEsCisgICAgMTMwLCAgMSwxMDQsIDMxLDIzMSwgMzEsMjM5LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAzMCwxMjAsMjI2LAorICAgIDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDExNiwgODYsMTM2LCAgMCwgODYsIDMyLCAxMSwgMzIsIDIwLCAzMiwKKyAgICAgMzEsIDMyLCA2MCwgMzIsIDY3LCAzMiwgNzksIDMyLCA5MSwgMzIsIDk5LDIyNywyMzMsMjQyLDIyNywyMzYsCisgICAgMTAxLDEyOCwgMzYsMjAzLDIyOCwyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwxMjYsMTAxLAorICAgICAgMiwgMzIsIDM3LCAzMiwgNDgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCAxOCwKKyAgICAyNDcsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA3OCwyMzIsMjM5LDIzOSwxMDcsCisgICAgMTI4LCAgMSwxNzgsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNTQsMjM5LAorICAgIDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNzIsMjQzLDIzNywyMjUsMjM2LDEwOCwKKyAgICAxMjgsMjQ3LDExOCwyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwgMzAsMTI0LCA4NywxMzQsICAwLCA4NywgMzIsCisgICAgMTIzLCAzMiwxMzEsIDMyLDE1NCwgMzIsMTk0LCAzMiwyMDIsIDMyLDIxNCwyMjUsMjI3LDI0NSwyNDQsMTAxLAorICAgIDEyOCwgMzAsMTMwLDIyNywyMzMsMjQyLCA5OSwgIDIsIDMyLDE0MCwgMzIsMTQ1LDIzNiwxMDEsMTI4LCAzNiwKKyAgICAyMDQsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTI4LCAgMSwxMTYsMTAwLCAgMiwgMzIsMTYwLCAzMiwxNzAsCisgICAgMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMTE1LDEyOCwgMzAsMTMyLDIzOSwxMTYsICAyLCAzMiwxNzcsIDMyLAorICAgIDE4NiwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsIDMwLDEzNCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwKKyAgICAgMzAsMTM2LDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAzMCwxMjgsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsCisgICAgMjI1LDIyNywxMDEsMTI4LDI1NSwgNTUsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDExOSwgODgsMTM0LAorICAgICAgMCwgODgsIDMyLDIzOCwgMzIsMjQ3LCAzMywgMTgsIDMzLCAzMSwgMzMsIDM1LCAzMywgNDcsMjI3LDIzMywKKyAgICAyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNiwyMDUsMTAwLCAgMiwgMzIsMjUzLCAzMywgIDcsMjMzLDIyOSwyNDIsCisgICAgMjI5LDI0MywyMzMsMTE1LDEyOCwgMzAsMTQwLDIzOSwyNDQsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LAorICAgICAzMCwxMzgsMjI5LDIzMiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDYxLDEwNSwKKyAgICAxMjgsICAzLDE1OCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA1NiwyNDMsCisgICAgMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTIwLCA4OSwxMzksICAwLCA4OSwgMzMsIDgxLCAzMywxMTYsIDMzLAorICAgIDEzOSwgMzMsMTg5LCAzMywyMjgsIDMzLDIzNiwgMzMsMjUzLCAzNCwgNDAsIDM0LCA1MiwgMzQsIDYwLCAzNCwKKyAgICAgNjgsIDk3LCAgMiwgMzMsIDg3LCAzMywxMDQsMjI3LDI0NSwyNDQsMTAxLDEyOSwgIDAsMjIxLCAzMywgOTYsCisgICAgMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjQ3LDI1MywyNDQsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLAorICAgICA5OSwxMjgsICA0LCA5OCwyMjcsMjMzLDI0MiwgOTksICAyLCAzMywxMjUsIDMzLDEzMCwyMzYsMTAxLDEyOCwKKyAgICAgMzYsMjA2LDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEyOCwgIDEsMTE4LDEwMCwgIDIsIDMzLDE0NSwgMzMsCisgICAgMTY1LDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjksICAxLDEyMCwgMzMsMTU3LDI0MywyMzcsMjI1LAorICAgIDIzNiwxMDgsMTI4LDI0NywyNTUsMjM5LDExNiwgIDIsIDMzLDE3MiwgMzMsMTgxLDIyNSwyMjcsMjI3LDIyOSwKKyAgICAyMzgsMTE2LDEyOCwgMzAsMTQyLDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwyNDQsMjI5LDExNCwgIDIsCisgICAgIDMzLDE5NiwgMzMsMjA4LDIzMywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDQzLAorICAgIDI0NSwyMjgsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMjQzLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywKKyAgICAgOTksMTI4LCAgNCwyNDgsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLDI0MiwyMzIsMjM5LDIzOSwxMDcsCisgICAgMTI5LCAgMSwxNzksIDMzLDI0NSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsMjQ2LDEwNSwgIDMsIDM0LAorICAgICAgNSwgMzQsIDE2LCAzNCwgMjcsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA2OSwKKyAgICAyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsICA3LDI0NywyMzgsMjI1LDI0MiwyMzcsCisgICAgMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA4MiwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LAorICAgIDEwMSwxMjgsMjU1LCA1NywyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTIxLDI0NCwyMzMsMjM2LDIyOCwKKyAgICAxMDEsMTI4LCAzMCwyNDgsMjQ1LDExNSwgIDIsIDM0LCA3NSwgMzQsMTEzLDIyNiwyMzMsMTAzLCAgMiwgMzQsCisgICAgIDgzLCAzNCwgOTQsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDEwNiwyMzMsMjM5LAorICAgIDI0NCwyMzMsMjMwLDIzMywyMjksMjI4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwKKyAgICAxMDgsMjM2LDIzMywyNDQsMjQ0LDIzNiwxMDEsICAyLCAzNCwxMjQsIDM0LDEzNSwyMjcsMjQ5LDI0MiwyMzMsCisgICAgMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTAyLDIzMywyMzksMjQ0LDIzMywyMzAsMjMzLDIyOSwyMjgsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDEwNCwgOTAsMTM2LCAgMCwgOTAsIDM0LDE3NCwKKyAgICAgMzQsMTk4LCAzNCwyNDMsIDM1LCAxNCwgMzUsIDgxLCAzNSwxNzMsIDM1LDE4NSwgMzUsMTk3LCA5NywgIDIsCisgICAgIDM0LDE4MCwgMzQsMTkxLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNTQsMjI3LAorICAgIDI0NSwyNDQsMTAxLDEyOCwgIDEsMTIxLCA5OSwgIDIsIDM0LDIwNCwgMzQsMjIxLDIyNSwyNDIsMjM5LDExMCwKKyAgICAxMjksICAxLDEyNSwgMzQsMjEzLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NiwyNTUsMjMzLDI0MiwgOTksCisgICAgICAyLCAzNCwyMjksIDM0LDIzNCwyMzYsMTAxLDEyOCwgMzYsMjA3LDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLAorICAgIDEyOCwgMzAsMTQ0LDIyOCwyMzksMTE2LDEzMCwgIDEsMTIzLCAzNCwyNTMsIDM1LCAgNiwyMjUsMjI3LDIyNywKKyAgICAyMjksMjM4LDExNiwxMjgsICAxLDEyMywyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTQ2LDEwMSwgIDMsCisgICAgIDM1LCAyMiwgMzUsIDMzLCAzNSwgNzYsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgICAyMywxMDAsICAyLCAzNSwgMzksIDM1LCA1OCwyMjksMjQzLDIyNywyMjksMjM4LDIyOCwyMjksMjQyLDIyNywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNTIsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsCisgICAgMjQzLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyMjIsMjQ0LCA5NywxMjgsICAzLAorICAgIDE1MCwyMzIsMTAxLCAgNCwgMzUsIDkyLCAzNSwxMDMsIDM1LDExOSwgMzUsMTMwLDIyNSwyNDIsMjM3LDIyOSwKKyAgICAyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgNTgsMjI2LDI0MiwyMjksMjQ2LDIyOSwyMjcsMjQ5LDI0MiwyMzMsCisgICAgMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTkzLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LAorICAgICAgNCwgMjIsMTAwLCAgMiwgMzUsMTM2LCAzNSwxNTUsMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LDI0MiwKKyAgICAyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTUwLDIzMywyMjksMjQyLDIyOSwyNDMsCisgICAgMjMzLDI0MywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjIwLDIzNiwyMzMsMjM4LAorICAgIDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTQ4LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwKKyAgICAyMjcsMTAxLDEyOCwyNTUsIDU4LDExNSwgIDIsIDM1LDIwMywgMzUsMjEwLDIzNywyMjUsMjM2LDEwOCwxMjgsCisgICAgMjQ3LDEyMiwyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsMTgxLCA5NywxNTgsICAwLCA5NywgMzYsIDI2LAorICAgICAzOCwxNTQsIDM5LCAgNCwgMzksIDY4LCAzOSwxMzIsIDM5LDE5NiwgNDAsICA0LCA0MCwgNjgsIDQwLDEyNiwKKyAgICAgNDAsMTkwLCA0MSwgNzAsIDQxLDIxNywgNDIsMTM3LCA0MiwyMzcsIDQzLCAxNywgNDksMTkyLCA0OSwyMjksCisgICAgIDUwLCAgMCwgNTAsMjI1LCA1MSwgIDcsIDUyLCA5NiwgNTIsMTY4LCA1MywxMjMsIDUzLDEzMiwgNTQsICA1LAorICAgICA1NiwgMTMsIDU3LCAgMywgNTcsIDUwLCA1NywyMDEsIDU3LDIxNSwgNDksMTM4LCAzOSwgIDEsIDM2LCA1MCwKKyAgICAgMzYsMTE0LCAzNiwxNTQsIDM2LDIxOCwgMzcsIDI2LCAzNywgOTAsIDM3LDE1NCwgMzcsMjE4LCAzOCwgMjYsCisgICAgIDM4LCA5MCwgNDgsMTM4LCAzOSwgMzMsIDM2LCA3NCwgMzYsIDc4LCAzNiwgODIsIDM2LCA4NiwgMzYsIDkwLAorICAgICAzNiwgOTQsIDM2LCA5OCwgMzYsMTAyLCAzNiwxMDYsIDM2LDExMCwgNDgsMTI4LCAzOSwgOTQsIDQ5LDEyOCwKKyAgICAgMzksIDk3LCA1MCwxMjgsIDM5LCA5OCwgNTEsMTI4LCAzOSwgOTksIDUyLDEyOCwgMzksMTAwLCA1MywxMjgsCisgICAgIDM5LCAxNiwgNTQsMTI4LCAzOSwxMDEsIDU1LDEyOCwgMzksMTAyLCA1NiwxMjgsIDM5LDEwMywgNTcsMTI4LAorICAgICAzOCwgOTYsIDQ5LDEzNCwgMzgsIDI3LCAzNiwxMzAsIDM2LDEzNCwgMzYsMTM4LCAzNiwxNDIsIDM2LDE0NiwKKyAgICAgMzYsMTUwLCA0OCwxMjgsIDM4LDEwMSwgNDksMTI4LCAzOCwxMDIsIDUwLDEyOCwgMzgsIDk5LCA1NSwxMjgsCisgICAgIDM5LCAgOSwgNTYsMTI4LCAzOSwgIDgsIDU3LDEyOCwgMzksICA3LCA1MCwxMzgsIDM4LCAzMCwgMzYsMTc4LAorICAgICAzNiwxODIsIDM2LDE4NiwgMzYsMTkwLCAzNiwxOTQsIDM2LDE5OCwgMzYsMjAyLCAzNiwyMDYsIDM2LDIxMCwKKyAgICAgMzYsMjE0LCA0OCwxMjgsIDM2LCA5NiwgNDksMTI4LCAzNiwgOTcsIDUwLDEyOCwgMzYsIDk4LCA1MSwxMjgsCisgICAgIDM2LCA5OSwgNTIsMTI4LCAzNiwxMDAsIDUzLDEyOCwgMzYsMTAxLCA1NCwxMjgsIDM2LDEwMiwgNTUsMTI4LAorICAgICAzNiwxMDMsIDU2LDEyOCwgMzYsMTA0LCA1NywxMjgsIDM2LDEwNSwgNTEsMTM4LCAzOSwgMTIsIDM2LDI0MiwKKyAgICAgMzYsMjQ2LCAzNiwyNTAsIDM2LDI1NCwgMzcsICAyLCAzNywgIDYsIDM3LCAxMCwgMzcsIDE0LCAzNywgMTgsCisgICAgIDM3LCAyMiwgNDgsMTI4LCAzOSwxMTgsIDQ5LDEyOCwgMzksMTE5LCA1MCwxMjgsIDM5LDEyMCwgNTEsMTI4LAorICAgICAzOSwxMjEsIDUyLDEyOCwgMzksMTIyLCA1MywxMjgsIDM5LDEyMywgNTQsMTI4LCAzOSwxMjQsIDU1LDEyOCwKKyAgICAgMzksMTI1LCA1NiwxMjgsIDM5LDEyNiwgNTcsMTI4LCAzOSwxMjcsIDUyLDEzOCwgMzksIDEzLCAzNywgNTAsCisgICAgIDM3LCA1NCwgMzcsIDU4LCAzNywgNjIsIDM3LCA2NiwgMzcsIDcwLCAzNywgNzQsIDM3LCA3OCwgMzcsIDgyLAorICAgICAzNywgODYsIDQ4LDEyOCwgMzksMTI4LCA0OSwxMjgsIDM5LDEyOSwgNTAsMTI4LCAzOSwxMzAsIDUxLDEyOCwKKyAgICAgMzksMTMxLCA1MiwxMjgsIDM5LDEzMiwgNTMsMTI4LCAzOSwxMzMsIDU0LDEyOCwgMzksMTM0LCA1NSwxMjgsCisgICAgIDM5LDEzNSwgNTYsMTI4LCAzOSwxMzYsIDU3LDEyOCwgMzksMTM3LCA1MywxMzgsIDM5LCAxNCwgMzcsMTE0LAorICAgICAzNywxMTgsIDM3LDEyMiwgMzcsMTI2LCAzNywxMzAsIDM3LDEzNCwgMzcsMTM4LCAzNywxNDIsIDM3LDE0NiwKKyAgICAgMzcsMTUwLCA0OCwxMjgsIDM5LDEzOCwgNDksMTI4LCAzOSwxMzksIDUwLDEyOCwgMzksMTQwLCA1MSwxMjgsCisgICAgIDM5LDE0MSwgNTIsMTI4LCAzOSwxNDIsIDUzLDEyOCwgMzksMTQzLCA1NCwxMjgsIDM5LDE0NCwgNTUsMTI4LAorICAgICAzOSwxNDUsIDU2LDEyOCwgMzksMTQ2LCA1NywxMjgsIDM5LDE0NywgNTQsMTM4LCAzOSwgMTUsIDM3LDE3OCwKKyAgICAgMzcsMTgyLCAzNywxODYsIDM3LDE5MCwgMzcsMTk0LCAzNywxOTgsIDM3LDIwMiwgMzcsMjA2LCAzNywyMTAsCisgICAgIDM3LDIxNCwgNDgsMTI4LCAzOSwxNDgsIDQ5LDEyOCwgMzMsMTQ2LCA1MCwxMjgsIDM5LDE2MywgNTEsMTI4LAorICAgICAzMywxNDgsIDUyLDEyOCwgMzMsMTQ5LCA1MywxMjgsIDM5LDE1MywgNTQsMTI4LCAzOSwxNTUsIDU1LDEyOCwKKyAgICAgMzksMTU2LCA1NiwxMjgsIDM5LDE1NywgNTcsMTI4LCAzOSwxNTgsIDU1LDEzOCwgMzksIDE3LCAzNywyNDIsCisgICAgIDM3LDI0NiwgMzcsMjUwLCAzNywyNTQsIDM4LCAgMiwgMzgsICA2LCAzOCwgMTAsIDM4LCAxNCwgMzgsIDE4LAorICAgICAzOCwgMjIsIDQ4LDEyOCwgMzksMTU5LCA0OSwxMjgsIDM5LDE2MCwgNTAsMTI4LCAzOSwxNjEsIDUxLDEyOCwKKyAgICAgMzksMTYyLCA1MiwxMjgsIDM5LDE2NCwgNTMsMTI4LCAzOSwxNjUsIDU0LDEyOCwgMzksMTY2LCA1NSwxMjgsCisgICAgIDM5LDE2NywgNTYsMTI4LCAzOSwxNjgsIDU3LDEyOCwgMzksMTY5LCA1NiwxMzgsIDM5LCAxOCwgMzgsIDUwLAorICAgICAzOCwgNTQsIDM4LCA1OCwgMzgsIDYyLCAzOCwgNjYsIDM4LCA3MCwgMzgsIDc0LCAzOCwgNzgsIDM4LCA4MiwKKyAgICAgMzgsIDg2LCA0OCwxMjgsIDM5LDE3MSwgNDksMTI4LCAzOSwxNzMsIDUwLDEyOCwgMzksMTc1LCA1MSwxMjgsCisgICAgIDM5LDE3OCwgNTIsMTI4LCAzOSwxNzksIDUzLDEyOCwgMzksMTgxLCA1NCwxMjgsIDM5LDE4NCwgNTUsMTI4LAorICAgICAzOSwxODYsIDU2LDEyOCwgMzksMTg3LCA1NywxMjgsIDM5LDE4OCwgNTcsMTM4LCAzOSwgMTksIDM4LDExNCwKKyAgICAgMzgsMTE4LCAzOCwxMjIsIDM4LDEyNiwgMzgsMTMwLCAzOCwxMzQsIDM4LDEzOCwgMzgsMTQyLCAzOCwxNDYsCisgICAgIDM4LDE1MCwgNDgsMTI4LCAzOSwxODksIDQ5LDEyOCwgMzksMTkwLCA1MCwxMjgsIDM5LDE1NCwgNTEsMTI4LAorICAgICAzOSwxNzAsIDUyLDEyOCwgMzksMTgyLCA1MywxMjgsIDM5LDE4NSwgNTQsMTI4LCAzOSwxNTIsIDU1LDEyOCwKKyAgICAgMzksMTgwLCA1NiwxMjgsIDM5LDE4MywgNTcsMTI4LCAzOSwxNzIsIDUwLDEzOCwgMzksICAyLCAzOCwxNzgsCisgICAgIDM4LDIyNCwgMzgsMjI4LCAzOCwyMzIsIDM4LDIzNiwgMzgsMjQwLCAzOCwyNDQsIDM4LDI0OCwgMzgsMjUyLAorICAgICAzOSwgIDAsIDQ4LDEzNSwgMzksIDIwLCAzOCwxOTYsIDM4LDIwMCwgMzgsMjA0LCAzOCwyMDgsIDM4LDIxMiwKKyAgICAgMzgsMjE2LCAzOCwyMjAsIDQ4LDEyOCwgMzksMTc0LCA0OSwxMjgsIDM5LDE3NywgNTAsMTI4LCAzOSwgIDMsCisgICAgIDUxLDEyOCwgMzksIDgwLCA1MiwxMjgsIDM5LCA4MiwgNTMsMTI4LCAzOSwxMTAsIDU0LDEyOCwgMzksMTEyLAorICAgICA0OSwxMjgsIDM5LCAyMSwgNTAsMTI4LCAzOSwgMjIsIDUxLDEyOCwgMzksIDIzLCA1MiwxMjgsIDM5LCAyNCwKKyAgICAgNTMsMTI4LCAzOSwgMjUsIDU0LDEyOCwgMzksIDI2LCA1NSwxMjgsIDM5LCAyNywgNTYsMTI4LCAzOSwgMjgsCisgICAgIDU3LDEyOCwgMzksIDM0LCA1MSwxMzgsIDM5LCAgNCwgMzksIDI4LCAzOSwgMzIsIDM5LCAzNiwgMzksIDQwLAorICAgICAzOSwgNDQsIDM5LCA0OCwgMzksIDUyLCAzOSwgNTYsIDM5LCA2MCwgMzksIDY0LCA0OCwxMjgsIDM5LCAzNSwKKyAgICAgNDksMTI4LCAzOSwgMzYsIDUwLDEyOCwgMzksIDM3LCA1MSwxMjgsIDM5LCAzOCwgNTIsMTI4LCAzOSwgMzksCisgICAgIDUzLDEyOCwgMzgsICA1LCA1NCwxMjgsIDM5LCA0MSwgNTUsMTI4LCAzOSwgNDIsIDU2LDEyOCwgMzksIDQzLAorICAgICA1NywxMjgsIDM5LCA0NCwgNTIsMTM4LCAzOCwgMTQsIDM5LCA5MiwgMzksIDk2LCAzOSwxMDAsIDM5LDEwNCwKKyAgICAgMzksMTA4LCAzOSwxMTIsIDM5LDExNiwgMzksMTIwLCAzOSwxMjQsIDM5LDEyOCwgNDgsMTI4LCAzOSwgNDUsCisgICAgIDQ5LDEyOCwgMzksIDQ2LCA1MCwxMjgsIDM5LCA0NywgNTEsMTI4LCAzOSwgNDgsIDUyLDEyOCwgMzksIDQ5LAorICAgICA1MywxMjgsIDM5LCA1MCwgNTQsMTI4LCAzOSwgNTEsIDU1LDEyOCwgMzksIDUyLCA1NiwxMjgsIDM5LCA1MywKKyAgICAgNTcsMTI4LCAzOSwgNTQsIDUzLDEzOCwgMzksICA2LCAzOSwxNTYsIDM5LDE2MCwgMzksMTY0LCAzOSwxNjgsCisgICAgIDM5LDE3MiwgMzksMTc2LCAzOSwxODAsIDM5LDE4NCwgMzksMTg4LCAzOSwxOTIsIDQ4LDEyOCwgMzksIDU1LAorICAgICA0OSwxMjgsIDM5LCA1NiwgNTAsMTI4LCAzOSwgNTcsIDUxLDEyOCwgMzksIDU4LCA1MiwxMjgsIDM5LCA1OSwKKyAgICAgNTMsMTI4LCAzOSwgNjAsIDU0LDEyOCwgMzksIDYxLCA1NSwxMjgsIDM5LCA2MiwgNTYsMTI4LCAzOSwgNjMsCisgICAgIDU3LDEyOCwgMzksIDY0LCA1NCwxMzgsIDM5LCAyOSwgMzksMjIwLCAzOSwyMjQsIDM5LDIyOCwgMzksMjMyLAorICAgICAzOSwyMzYsIDM5LDI0MCwgMzksMjQ0LCAzOSwyNDgsIDM5LDI1MiwgNDAsICAwLCA0OCwxMjgsIDM5LCA2NSwKKyAgICAgNDksMTI4LCAzOSwgNjYsIDUwLDEyOCwgMzksIDY3LCA1MSwxMjgsIDM5LCA2OCwgNTIsMTI4LCAzOSwgNjksCisgICAgIDUzLDEyOCwgMzksIDcwLCA1NCwxMjgsIDM5LCA3MSwgNTUsMTI4LCAzOSwgNzIsIDU2LDEyOCwgMzksIDczLAorICAgICA1NywxMjgsIDM5LCA3NCwgNTUsMTM4LCAzOSwgMzAsIDQwLCAyOCwgNDAsIDMyLCA0MCwgMzYsIDQwLCA0MCwKKyAgICAgNDAsIDQ0LCA0MCwgNDgsIDQwLCA1MiwgNDAsIDU2LCA0MCwgNjAsIDQwLCA2NCwgNDgsMTI4LCAzOSwgNzUsCisgICAgIDQ5LDEyOCwgMzcsMjA3LCA1MCwxMjgsIDM5LCA3NywgNTEsMTI4LCAzNywxNjAsIDUyLDEyOCwgMzksIDc5LAorICAgICA1MywxMjgsIDM5LCA4MSwgNTQsMTI4LCAzNywxNzgsIDU1LDEyOCwgMzcsMTg4LCA1NiwxMjgsIDM3LDE5OCwKKyAgICAgNTcsMTI4LCAzOSwgODYsIDU2LDEzNywgMzksIDMxLCA0MCwgOTAsIDQwLCA5NCwgNDAsIDk4LCA0MCwxMDIsCisgICAgIDQwLDEwNiwgNDAsMTEwLCA0MCwxMTQsIDQwLDExOCwgNDAsMTIyLCA0OSwxMjgsIDM3LDIxNSwgNTAsMTI4LAorICAgICAzOSwgODgsIDUxLDEyOCwgMzksIDg5LCA1MiwxMjgsIDM5LCA5MCwgNTMsMTI4LCAzOSwxMTEsIDU0LDEyOCwKKyAgICAgMzksMTEzLCA1NSwxMjgsIDM5LDExNCwgNTYsMTI4LCAzOSwxMTUsIDU3LDEyOCwgMzksMTA0LCA1NywxMzgsCisgICAgIDM5LCAzMiwgNDAsMTUwLCA0MCwxNTQsIDQwLDE1OCwgNDAsMTYyLCA0MCwxNjYsIDQwLDE3MCwgNDAsMTc0LAorICAgICA0MCwxNzgsIDQwLDE4MiwgNDAsMTg2LCA0OCwxMjgsIDM5LDEwNSwgNDksMTI4LCAzOSwxMDgsIDUwLDEyOCwKKyAgICAgMzksMTA5LCA1MSwxMjgsIDM5LDEwNiwgNTIsMTI4LCAzOSwxMDcsIDUzLDEyOCwgMzksMTE2LCA1NCwxMjgsCisgICAgIDM5LDExNywgNTUsMTI4LCAzOSwgOTEsIDU2LDEyOCwgMzksIDkyLCA1NywxMjgsIDM5LCA5MywgOTcsICA3LAorICAgICA0MCwyMDYsIDQwLDIxNiwgNDAsMjIzLCA0MCwyMzAsIDQwLDI1NSwgNDEsIDE1LCA0MSwgMjYsMjI2LDIyOSwKKyAgICAyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTM0LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAwLDIyNSwyMjgsCisgICAgMjI5LDI0NiwgOTcsMTI4LCAgOSwgIDYsMjMxLDExNywgIDIsIDQwLDIzNywgNDAsMjQ2LDIzNCwyMjUsMjQyLAorICAgIDIyNSwyNDQsMTA1LDEyOCwgMTAsMTM0LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsICA2LDIzNywKKyAgICAyMjUsMjQ0LDI0MiwyMjUsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA2MiwyNDIsCisgICAgMjQ1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsICAzLDI0NiwyMzksMjQ3LDIyOSwyMzYsMjQzLAorICAgIDIzMywyMzEsMTEwLCAgMywgNDEsIDQyLCA0MSwgNTIsIDQxLCA1OSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwKKyAgICAxMDUsMTI4LCAgOSwxOTAsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDYyLDIzMSwyNDUsMjM0LDIyNSwyNDIsCisgICAgMjI1LDI0NCwxMDUsMTI4LCAxMCwxOTAsIDk4LCAgNCwgNDEsIDgwLCA0MSwxMjEsIDQxLDEzMCwgNDEsMTQwLAorICAgIDIyNiwyNDIsMjI5LDI0NiwyMzMsMjI1LDI0NCwyMzMsMjM5LDExMCwgIDIsIDQxLCA5NSwgNDEsMTEwLDIzNywKKyAgICAyMjUsMjQyLDIzNSwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDk1LDI0MywyMzMsCisgICAgMjMxLDIzOCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwxMTIsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LAorICAgICAgOSwxMzMsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksIDI2LDI0MiwyMjksMjQ2LDEwMSwKKyAgICAxMzQsICAxLCAgMywgNDEsMTU5LCA0MSwxNjcsIDQxLDE3OCwgNDEsMTg5LCA0MSwxOTcsIDQxLDIwOSwyMjUsCisgICAgMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsMTc1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LAorICAgICAgNCwyMDksMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDE4MywyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwgMzAsMTc3LDIzMiwyMzksMjM5LDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsCisgICAgMTc5LDI0NCwyMzMsMjM2LDIyOCwxMDEsMTI4LCAzMCwxODEsIDk5LCAgNCwgNDEsMjI3LCA0MSwyMzQsIDQyLAorICAgICA1NywgNDIsMTI3LDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLDIwNiwyMzMsMjQyLCA5OSwgIDIsIDQxLDI0MiwKKyAgICAgNDEsMjQ3LDIzNiwxMDEsMTI4LCAzNiwyMDgsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTMzLCAgMCwyMjYsCisgICAgIDQyLCAxMCwgNDIsIDE4LCA0MiwgMjksIDQyLCAzNywgNDIsIDQ5LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LAorICAgICAzMCwxNjUsMjI4LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDE3MywyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwgMzAsMTY3LDIzMiwyMzksMjM5LDIzNSwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsCisgICAgMTY5LDI0NCwyMzMsMjM2LDIyOCwxMDEsMTI4LCAzMCwxNzEsMjQ1LDI0NCwxMDEsMTMzLCAgMCwxODAsIDQyLAorICAgICA3MywgNDIsIDg0LCA0MiwxMDEsIDQyLDEwOCwgNDIsMTE3LDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywKKyAgICAgOTgsMTI4LCAgMywgMjMsIDk5LCAgMiwgNDIsIDkwLCA0MiwgOTUsMjM3LCA5OCwxMjgsICAzLCAgMSwyMzksCisgICAgMjM3LCA5OCwxMjgsICAzLCAgMSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgODQsMjM2LDIzOSwyNDcsMjM3LAorICAgIDIzOSwxMDAsMTI4LCAgMiwyMDcsMjQ0LDIzOSwyMzgsMjI5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDY1LDI0OSwKKyAgICAyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA0OCwxMDAsICA1LCA0MiwxNDksIDQyLDE1OSwgNDIsCisgICAgMTczLCA0MiwxNzksIDQyLDIxMywyMjYsMjM2LDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMiwgIDEsMjI4LAorICAgIDIyNSwyMzUsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLDExMywyMjksMjQ2LCA5NywKKyAgICAxMjgsICA5LCAgNSwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTMwLCAgMCwyMjgsIDQyLDE5MywgNDIsCisgICAgMjA0LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyMTEsMjM3LDIyNSwyMjcsMjQyLAorICAgIDIzOSwxMTAsMTI4LCAgMSwyMjMsMjM5LDExNiwgIDIsIDQyLDIyMCwgNDIsMjI4LDIyNiwyMjksMjM2LDIzOSwKKyAgICAxMTksMTI4LCAzMCwxNjEsMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMjUsMTAxLDEzMSwgIDAsCisgICAgMjMwLCA0MiwyNDcsIDQyLDI1NSwgNDMsICA4LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMSwyNTMsMjM1LAorICAgIDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgODAsMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAgMSwKKyAgICAyMjcsMjMwLDIzMywxMDUsICA2LCA0MywgMzMsIDQzLCA1MywgNDUsMjQ2LCA0NSwyNTIsIDQ2LCAxMSwgNDksCisgICAgMTExLCA0OCwgIDIsIDQzLCAzOSwgNDMsIDQ2LDE3NiwxNzgsMTc2LCA1NiwxMjgsIDMyLCAyMSwxODQsMTg1LAorICAgIDE4MCwgNDksMTI4LCAzMiwxNjQsMTc3LCA0OCwgIDMsIDQzLCA2MiwgNDUsIDg2LCA0NSwyMjEsIDQ4LCAgOSwKKyAgICAgNDMsIDgyLCA0MywxMDIsIDQzLDE2NCwgNDMsMjI2LCA0NCwgMzIsIDQ0LCA5NCwgNDQsMTU2LCA0NCwyMTgsCisgICAgIDQ1LCAyNCwgNDksICAzLCA0MywgOTAsIDQzLCA5NCwgNDMsIDk4LCA1NSwxMjgsICA0LCAxNiwgNTYsMTI4LAorICAgICAgNCwgMTcsIDU3LDEyOCwgIDQsIDE4LCA1MCwgMTAsIDQzLDEyNCwgNDMsMTI4LCA0MywxMzIsIDQzLDEzNiwKKyAgICAgNDMsMTQwLCA0MywxNDQsIDQzLDE0OCwgNDMsMTUyLCA0MywxNTYsIDQzLDE2MCwgNDgsMTI4LCAgNCwgMTksCisgICAgIDQ5LDEyOCwgIDQsIDIwLCA1MCwxMjgsICA0LCAyMSwgNTEsMTI4LCAgNCwgIDEsIDUyLDEyOCwgIDQsIDIyLAorICAgICA1MywxMjgsICA0LCAyMywgNTQsMTI4LCAgNCwgMjQsIDU1LDEyOCwgIDQsIDI1LCA1NiwxMjgsICA0LCAyNiwKKyAgICAgNTcsMTI4LCAgNCwgMjcsIDUxLCAxMCwgNDMsMTg2LCA0MywxOTAsIDQzLDE5NCwgNDMsMTk4LCA0MywyMDIsCisgICAgIDQzLDIwNiwgNDMsMjEwLCA0MywyMTQsIDQzLDIxOCwgNDMsMjIyLCA0OCwxMjgsICA0LCAyOCwgNDksMTI4LAorICAgICAgNCwgMjksIDUwLDEyOCwgIDQsIDMwLCA1MSwxMjgsICA0LCAzMSwgNTIsMTI4LCAgNCwgMzIsIDUzLDEyOCwKKyAgICAgIDQsIDMzLCA1NCwxMjgsICA0LCAzNCwgNTUsMTI4LCAgNCwgMzUsIDU2LDEyOCwgIDQsIDM2LCA1NywxMjgsCisgICAgICA0LCAzNywgNTIsIDEwLCA0MywyNDgsIDQzLDI1MiwgNDQsICAwLCA0NCwgIDQsIDQ0LCAgOCwgNDQsIDEyLAorICAgICA0NCwgMTYsIDQ0LCAyMCwgNDQsIDI0LCA0NCwgMjgsIDQ4LDEyOCwgIDQsIDM4LCA0OSwxMjgsICA0LCAzOSwKKyAgICAgNTAsMTI4LCAgNCwgNDAsIDUxLDEyOCwgIDQsIDQxLCA1MiwxMjgsICA0LCA0MiwgNTMsMTI4LCAgNCwgNDMsCisgICAgIDU0LDEyOCwgIDQsIDQ0LCA1NSwxMjgsICA0LCA0NSwgNTYsMTI4LCAgNCwgNDYsIDU3LDEyOCwgIDQsIDQ3LAorICAgICA1MywgMTAsIDQ0LCA1NCwgNDQsIDU4LCA0NCwgNjIsIDQ0LCA2NiwgNDQsIDcwLCA0NCwgNzQsIDQ0LCA3OCwKKyAgICAgNDQsIDgyLCA0NCwgODYsIDQ0LCA5MCwgNDgsMTI4LCAgNCwxNDQsIDQ5LDEyOCwgIDQsICAyLCA1MCwxMjgsCisgICAgICA0LCAgMywgNTEsMTI4LCAgNCwgIDQsIDUyLDEyOCwgIDQsICA1LCA1MywxMjgsICA0LCAgNiwgNTQsMTI4LAorICAgICAgNCwgIDcsIDU1LDEyOCwgIDQsICA4LCA1NiwxMjgsICA0LCAgOSwgNTcsMTI4LCAgNCwgMTAsIDU0LCAxMCwKKyAgICAgNDQsMTE2LCA0NCwxMjAsIDQ0LDEyNCwgNDQsMTI4LCA0NCwxMzIsIDQ0LDEzNiwgNDQsMTQwLCA0NCwxNDQsCisgICAgIDQ0LDE0OCwgNDQsMTUyLCA0OCwxMjgsICA0LCAxMSwgNDksMTI4LCAgNCwgMTIsIDUwLDEyOCwgIDQsIDE0LAorICAgICA1MSwxMjgsMjQ2LDE5NiwgNTIsMTI4LDI0NiwxOTcsIDUzLDEyOCwgIDQsIDQ4LCA1NCwxMjgsICA0LCA0OSwKKyAgICAgNTUsMTI4LCAgNCwgNTAsIDU2LDEyOCwgIDQsIDUxLCA1NywxMjgsICA0LCA1MiwgNTUsIDEwLCA0NCwxNzgsCisgICAgIDQ0LDE4MiwgNDQsMTg2LCA0NCwxOTAsIDQ0LDE5NCwgNDQsMTk4LCA0NCwyMDIsIDQ0LDIwNiwgNDQsMjEwLAorICAgICA0NCwyMTQsIDQ4LDEyOCwgIDQsIDUzLCA0OSwxMjgsICA0LCA4MSwgNTAsMTI4LCAgNCwgNTQsIDUxLDEyOCwKKyAgICAgIDQsIDU1LCA1MiwxMjgsICA0LCA1NiwgNTMsMTI4LCAgNCwgNTcsIDU0LDEyOCwgIDQsIDU4LCA1NSwxMjgsCisgICAgICA0LCA1OSwgNTYsMTI4LCAgNCwgNjAsIDU3LDEyOCwgIDQsIDYxLCA1NiwgMTAsIDQ0LDI0MCwgNDQsMjQ0LAorICAgICA0NCwyNDgsIDQ0LDI1MiwgNDUsICAwLCA0NSwgIDQsIDQ1LCAgOCwgNDUsIDEyLCA0NSwgMTYsIDQ1LCAyMCwKKyAgICAgNDgsMTI4LCAgNCwgNjIsIDQ5LDEyOCwgIDQsIDYzLCA1MCwxMjgsICA0LCA2NCwgNTEsMTI4LCAgNCwgNjUsCisgICAgIDUyLDEyOCwgIDQsIDY2LCA1MywxMjgsICA0LCA2NywgNTQsMTI4LCAgNCwgNjgsIDU1LDEyOCwgIDQsIDY5LAorICAgICA1NiwxMjgsICA0LCA3MCwgNTcsMTI4LCAgNCwgNzEsIDU3LCAxMCwgNDUsIDQ2LCA0NSwgNTAsIDQ1LCA1NCwKKyAgICAgNDUsIDU4LCA0NSwgNjIsIDQ1LCA2NiwgNDUsIDcwLCA0NSwgNzQsIDQ1LCA3OCwgNDUsIDgyLCA0OCwxMjgsCisgICAgICA0LCA3MiwgNDksMTI4LCAgNCwgNzMsIDUwLDEyOCwgIDQsIDc0LCA1MSwxMjgsICA0LCA3NSwgNTIsMTI4LAorICAgICAgNCwgNzYsIDUzLDEyOCwgIDQsIDc3LCA1NCwxMjgsICA0LCA3OCwgNTUsMTI4LCAgNCwgNzksIDU2LDEyOCwKKyAgICAgIDQsMTQ1LCA1NywxMjgsICA0LCA4MiwgNDksICA0LCA0NSwgOTYsIDQ1LDE1OCwgNDUsMTYzLCA0NSwxODksCisgICAgIDQ4LCAxMCwgNDUsMTE4LCA0NSwxMjIsIDQ1LDEyNiwgNDUsMTMwLCA0NSwxMzQsIDQ1LDEzOCwgNDUsMTQyLAorICAgICA0NSwxNDYsIDQ1LDE1MCwgNDUsMTU0LCA0OCwxMjgsICA0LCA4MywgNDksMTI4LCAgNCwgODQsIDUwLDEyOCwKKyAgICAgIDQsIDg1LCA1MSwxMjgsICA0LCA4NiwgNTIsMTI4LCAgNCwgODcsIDUzLDEyOCwgIDQsIDg4LCA1NCwxMjgsCisgICAgICA0LCA4OSwgNTUsMTI4LCAgNCwgOTAsIDU2LDEyOCwgIDQsIDkxLCA1NywxMjgsICA0LCA5MiwxNzcsIDQ4LAorICAgIDEyOCwgIDQsIDk0LCA1MiwgIDQsIDQ1LDE3MywgNDUsMTc3LCA0NSwxODEsIDQ1LDE4NSwgNTMsMTI4LCAgNCwKKyAgICAgMTUsIDU0LDEyOCwgIDQsIDk4LCA1NSwxMjgsICA0LDExNCwgNTYsMTI4LCAgNCwxMTYsIDU3LCAgNSwgNDUsCisgICAgMjAxLCA0NSwyMDUsIDQ1LDIwOSwgNDUsMjEzLCA0NSwyMTcsIDUwLDEyOCwyNDYsMTk4LCA1MSwxMjgsICA0LAorICAgICA5NSwgNTIsMTI4LCAgNCwgOTksIDUzLDEyOCwgIDQsMTE1LCA1NCwxMjgsICA0LDExNywgNTYsICAyLCA0NSwKKyAgICAyMjcsIDQ1LDI0MSwgNTEsICAyLCA0NSwyMzMsIDQ1LDIzNywgNDksMTI4LDI0NiwxOTksIDUwLDEyOCwyNDYsCisgICAgMjAwLDE4MCwgNTQsMTI4LCAgNCwyMTcsMTc4LDE4NSwgNTcsMTI4LCAzMiwgMTQsMTc5LCA0OCwgIDIsIDQ2LAorICAgICAgMywgNDYsICA3LCA0OCwxMjgsIDMyLCAxNSwgNDksMTI4LCAzMiwgMTMsMTgxLCA1NSwgIDcsIDQ2LCAyOCwKKyAgICAgNDYsIDk4LCA0NywxNjMsIDQ3LDI0MCwgNDgsMTk3LCA0OSwgMzQsIDQ5LDEwNSwgNTEsICAyLCA0NiwgMzQsCisgICAgIDQ2LCA0OCwgNTYsICAyLCA0NiwgNDAsIDQ2LCA0NCwgNDksMTI4LCAgNiwxMDYsIDU2LDEyOCwgIDYsIDEyLAorICAgICA1NywgIDgsIDQ2LCA2NiwgNDYsIDcwLCA0NiwgNzQsIDQ2LCA3OCwgNDYsIDgyLCA0NiwgODYsIDQ2LCA5MCwKKyAgICAgNDYsIDk0LCA1MCwxMjgsICA2LCA5NiwgNTEsMTI4LCAgNiwgOTcsIDUyLDEyOCwgIDYsIDk4LCA1MywxMjgsCisgICAgICA2LCA5OSwgNTQsMTI4LCAgNiwxMDAsIDU1LDEyOCwgIDYsMTAxLCA1NiwxMjgsICA2LDEwMiwgNTcsMTI4LAorICAgICAgNiwxMDMsIDUyLCAgNywgNDYsMTE0LCA0NiwxNDYsIDQ2LDIwOCwgNDcsIDE0LCA0NywgNDYsIDQ3LDEwMiwKKyAgICAgNDcsMTU4LCA0OCwgIDUsIDQ2LDEyNiwgNDYsMTMwLCA0NiwxMzQsIDQ2LDEzOCwgNDYsMTQyLCA0OCwxMjgsCisgICAgICA2LDEwNCwgNDksMTI4LCAgNiwxMDUsIDUxLDEyOCwgIDYsIDI3LCA1NSwxMjgsICA2LCAzMSwgNTcsMTI4LAorICAgICAgNiwgMzMsIDQ5LCAxMCwgNDYsMTY4LCA0NiwxNzIsIDQ2LDE3NiwgNDYsMTgwLCA0NiwxODQsIDQ2LDE4OCwKKyAgICAgNDYsMTkyLCA0NiwxOTYsIDQ2LDIwMCwgNDYsMjA0LCA0OCwxMjgsICA2LCAzNCwgNDksMTI4LCAgNiwgMzUsCisgICAgIDUwLDEyOCwgIDYsIDM2LCA1MSwxMjgsICA2LCAzNywgNTIsMTI4LCAgNiwgMzgsIDUzLDEyOCwgIDYsIDM5LAorICAgICA1NCwxMjgsICA2LCA0MCwgNTUsMTI4LCAgNiwgNDEsIDU2LDEyOCwgIDYsIDQyLCA1NywxMjgsICA2LCA0MywKKyAgICAgNTAsIDEwLCA0NiwyMzAsIDQ2LDIzNCwgNDYsMjM4LCA0NiwyNDIsIDQ2LDI0NiwgNDYsMjUwLCA0NiwyNTQsCisgICAgIDQ3LCAgMiwgNDcsICA2LCA0NywgMTAsIDQ4LDEyOCwgIDYsIDQ0LCA0OSwxMjgsICA2LCA0NSwgNTAsMTI4LAorICAgICAgNiwgNDYsIDUxLDEyOCwgIDYsIDQ3LCA1MiwxMjgsICA2LCA0OCwgNTMsMTI4LCAgNiwgNDksIDU0LDEyOCwKKyAgICAgIDYsIDUwLCA1NSwxMjgsICA2LCA1MSwgNTYsMTI4LCAgNiwgNTIsIDU3LDEyOCwgIDYsIDUzLCA1MSwgIDUsCisgICAgIDQ3LCAyNiwgNDcsIDMwLCA0NywgMzQsIDQ3LCAzOCwgNDcsIDQyLCA0OCwxMjgsICA2LCA1NCwgNDksMTI4LAorICAgICAgNiwgNTUsIDUwLDEyOCwgIDYsIDU2LCA1MSwxMjgsICA2LCA1NywgNTIsMTI4LCAgNiwgNTgsIDUyLCAgOSwKKyAgICAgNDcsIDY2LCA0NywgNzAsIDQ3LCA3NCwgNDcsIDc4LCA0NywgODIsIDQ3LCA4NiwgNDcsIDkwLCA0NywgOTQsCisgICAgIDQ3LCA5OCwgNDgsMTI4LCAgNiwgNjQsIDQ5LDEyOCwgIDYsIDY1LCA1MCwxMjgsICA2LCA2NiwgNTEsMTI4LAorICAgICAgNiwgNjcsIDUyLDEyOCwgIDYsIDY4LCA1MywxMjgsICA2LCA2OSwgNTQsMTI4LCAgNiwgNzAsIDU2LDEyOCwKKyAgICAgIDYsIDcyLCA1NywxMjgsICA2LCA3MywgNTMsICA5LCA0NywxMjIsIDQ3LDEyNiwgNDcsMTMwLCA0NywxMzQsCisgICAgIDQ3LDEzOCwgNDcsMTQyLCA0NywxNDYsIDQ3LDE1MCwgNDcsMTU0LCA0OCwxMjgsICA2LCA3NCwgNDksMTI4LAorICAgICAgNiwgNzUsIDUwLDEyOCwgIDYsIDc2LCA1MSwxMjgsICA2LCA3NywgNTIsMTI4LCAgNiwgNzgsIDUzLDEyOCwKKyAgICAgIDYsIDc5LCA1NCwxMjgsICA2LCA4MCwgNTUsMTI4LCAgNiwgODEsIDU2LDEyOCwgIDYsIDgyLDE4MywgNDgsCisgICAgMTI4LCAgNiwgNzEsIDUzLCAgMywgNDcsMTcxLCA0NywyMDMsIDQ3LDIzNSwgNDgsICA1LCA0NywxODMsIDQ3LAorICAgIDE4NywgNDcsMTkxLCA0NywxOTUsIDQ3LDE5OSwgNTMsMTI4LCAgNiwxNjQsIDU0LDEyOCwgIDYsMTI2LCA1NSwKKyAgICAxMjgsICA2LDEzNCwgNTYsMTI4LCAgNiwxNTIsIDU3LDEyOCwgIDYsMTc1LCA0OSwgIDUsIDQ3LDIxNSwgNDcsCisgICAgMjE5LCA0NywyMjMsIDQ3LDIyNywgNDcsMjMxLCA0OSwxMjgsICA2LDEyMSwgNTAsMTI4LCAgNiwxMzYsIDUxLAorICAgIDEyOCwgIDYsMTQ1LCA1MiwxMjgsICA2LDE4NiwgNTcsMTI4LCAgNiwyMTAsMTc5LCA1MiwxMjgsICA2LDIxMywKKyAgICAgNTQsICA3LCA0OCwgIDAsIDQ4LCAgNSwgNDgsIDEwLCA0OCwgMTUsIDQ4LCA1MywgNDgsMTE1LCA0OCwxNzcsCisgICAgMTc5LCA1NCwxMjgsIDMyLDE3MCwxODAsIDUzLDEyOCwgIDUsMTkwLDE4MSwgNTYsMTI4LCAgNSwxOTUsIDU0LAorICAgICAgNiwgNDgsIDI5LCA0OCwgMzMsIDQ4LCAzNywgNDgsIDQxLCA0OCwgNDUsIDQ4LCA0OSwgNTIsMTI4LCAgNSwKKyAgICAyMDgsIDUzLDEyOCwgIDUsMjA5LCA1NCwxMjgsICA1LDIxMCwgNTUsMTI4LCAgNSwyMTEsIDU2LDEyOCwgIDUsCisgICAgMjEyLCA1NywxMjgsICA1LDIxMywgNTUsIDEwLCA0OCwgNzUsIDQ4LCA3OSwgNDgsIDgzLCA0OCwgODcsIDQ4LAorICAgICA5MSwgNDgsIDk1LCA0OCwgOTksIDQ4LDEwMywgNDgsMTA3LCA0OCwxMTEsIDQ4LDEyOCwgIDUsMjE0LCA0OSwKKyAgICAxMjgsICA1LDIxNSwgNTAsMTI4LCAgNSwyMTYsIDUxLDEyOCwgIDUsMjE3LCA1MiwxMjgsICA1LDIxOCwgNTMsCisgICAgMTI4LCAgNSwyMTksIDU0LDEyOCwgIDUsMjIwLCA1NSwxMjgsICA1LDIyMSwgNTYsMTI4LCAgNSwyMjIsIDU3LAorICAgIDEyOCwgIDUsMjIzLCA1NiwgMTAsIDQ4LDEzNywgNDgsMTQxLCA0OCwxNDUsIDQ4LDE0OSwgNDgsMTUzLCA0OCwKKyAgICAxNTcsIDQ4LDE2MSwgNDgsMTY1LCA0OCwxNjksIDQ4LDE3MywgNDgsMTI4LCAgNSwyMjQsIDQ5LDEyOCwgIDUsCisgICAgMjI1LCA1MCwxMjgsICA1LDIyNiwgNTEsMTI4LCAgNSwyMjcsIDUyLDEyOCwgIDUsMjI4LCA1MywxMjgsICA1LAorICAgIDIyOSwgNTQsMTI4LCAgNSwyMzAsIDU1LDEyOCwgIDUsMjMxLCA1NiwxMjgsICA1LDIzMiwgNTcsMTI4LCAgNSwKKyAgICAyMzMsIDU3LCAgMywgNDgsMTg1LCA0OCwxODksIDQ4LDE5MywgNDgsMTI4LCAgNSwyMzQsIDUyLDEyOCwyNTEsCisgICAgIDQyLCA1MywxMjgsMjUxLCA0MywgNTUsICA0LCA0OCwyMDcsIDQ4LDIyMSwgNDgsMjQxLCA0OCwyNDYsIDQ4LAorICAgICAgMiwgNDgsMjEzLCA0OCwyMTcsIDQ4LDEyOCwyNTEsIDc1LCA1MywxMjgsMjUxLCAzMSwgNDksICAzLCA0OCwKKyAgICAyMjksIDQ4LDIzMywgNDgsMjM3LCA1NCwxMjgsICA1LDI0MCwgNTUsMTI4LCAgNSwyNDEsIDU2LDEyOCwgIDUsCisgICAgMjQyLDE3OCwgNTEsMTI4LDI1MSwgNTMsIDU3LCAgNywgNDksICA2LCA0OSwgMTAsIDQ5LCAxNCwgNDksIDE4LAorICAgICA0OSwgMjIsIDQ5LCAyNiwgNDksIDMwLCA1MSwxMjgsICA1LDE4MCwgNTIsMTI4LCAgNSwxODEsIDUzLDEyOCwKKyAgICAgIDUsMTgyLCA1NCwxMjgsICA1LDE4NywgNTUsMTI4LCAgNSwxODQsIDU2LDEyOCwgIDUsMTgzLCA1NywxMjgsCisgICAgICA1LDE3NiwgNTYsICAzLCA0OSwgNDIsIDQ5LCA4NiwgNDksIDkxLCA0OCwgIDcsIDQ5LCA1OCwgNDksIDYyLAorICAgICA0OSwgNjYsIDQ5LCA3MCwgNDksIDc0LCA0OSwgNzgsIDQ5LCA4MiwgNDgsMTI4LCAgNSwxNzgsIDQ5LDEyOCwKKyAgICAgIDUsMTc3LCA1MCwxMjgsICA1LDE3OSwgNTEsMTI4LCAgNSwxOTQsIDUyLDEyOCwgIDUsMTkzLCA1NCwxMjgsCisgICAgICA1LDE4NSwgNTUsMTI4LCAgNSwxODgsMTc5LCA1NywxMjgsICA1LDE4OSwgNTIsICAyLCA0OSwgOTcsIDQ5LAorICAgIDEwMSwgNDksMTI4LCAgNSwxOTEsIDUwLDEyOCwgIDUsMTkyLDE4NSwxNzgsIDU3LDEyOCwgIDIsMTg4LCA1NCwKKyAgICAgIDMsIDQ5LDExOSwgNDksMTc4LCA0OSwxODUsIDQ5LCAgNCwgNDksMTI5LCA0OSwxNDUsIDQ5LDE1MSwgNDksCisgICAgMTcyLCA1MCwgIDIsIDQ5LDEzNSwgNDksMTQwLDE4MCwgNTYsMTI4LCAzMywgIDUsMTg0LCA1NywxMjgsIDMzLAorICAgICAxOSwxNzksMTgxLCA1MCwxMjgsIDMzLCAyMiwxODEsIDU1LCAgMywgNDksMTYwLCA0OSwxNjQsIDQ5LDE2OCwKKyAgICAgNTEsMTI4LCAzMiwgNDQsIDUyLDEyOCwgMzIsIDQ1LCA1MywxMjgsIDMyLCA0NiwxODIsMTgyLCA1MiwxMjgsCisgICAgIDMyLCAxMiwxNzksMTc3LDE4MiwgNTUsMTI4LCAgNiwxMDksMTgwLDE4NSwxNzksIDU1LDEyOCwgIDIsMTg5LAorICAgIDEwMywgIDIsIDQ5LDE5OCwgNDksMjA1LDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAwLDIyNCwxMTcsICAyLCA0OSwKKyAgICAyMTEsIDQ5LDIyMCwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDEzMywyNDIsMjM3LDI0NSwyMzUsCisgICAgMjMyLDEwNSwxMjgsIDEwLCAgNSwxMDQsICAyLCA0OSwyMzUsIDQ5LDI0NSwyMzMsMjQyLDIyNSwyMzEsMjI1LAorICAgIDIzOCwgOTcsMTI4LCA0OCwgNjYsMjM5LDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDE2MywKKyAgICAxMDUsICA3LCA1MCwgMTYsIDUwLCA0MSwgNTAsIDQ4LCA1MCwgNjAsIDUwLCA4NSwgNTAsMTAxLCA1MCwxODEsCisgICAgIDk4LCAgMiwgNTAsIDIyLCA1MCwgMzEsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxNDQsMjM5LAorICAgIDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksIDMwLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAxNiwKKyAgICAyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIxMywyMzEsMTE3LCAgMiwgNTAsCisgICAgIDY3LCA1MCwgNzYsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNDQsMjQyLDIzNywyNDUsMjM1LAorICAgIDIzMiwxMDUsMTI4LCAxMCwgMTYsMjM3LDIyNSwyNDQsMjQyLDIyNSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwKKyAgICAyMzIsMTA1LDEyOCwgMTAsIDcyLDExMCwgIDUsIDUwLDExMywgNTAsMTIyLCA1MCwxMzYsIDUwLDE1MiwgNTAsCisgICAgMTY3LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDU3LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LAorICAgIDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMDIsMjMzLDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwKKyAgICAyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjAzLDIzNywyMjksMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsCisgICAgMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjA0LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LDIyNiwyNDIsMjI5LAorICAgIDI0NiwxMDEsMTI4LCAgMiwgIDMsMjQ2LDIzOSwyNDcsMjI5LDIzNiwyNDMsMjMzLDIzMSwxMTAsICAzLCA1MCwKKyAgICAxOTcsIDUwLDIwNywgNTAsMjE0LDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIwMCwyMjgsCisgICAgMjI5LDI0NiwgOTcsMTI4LCAgOSwgNzIsMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLAorICAgIDIwMCwxMDcsICAyLCA1MCwyMzEsIDUwLDI1NSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwKKyAgICAxNjIsIDUwLDI0MywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDExMywyMzksCisgICAgMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDc5LDEwOCwgIDMsIDUxLCAxNSwgNTIsIDcxLCA1MiwgODAsMTAxLAorICAgICAgMiwgNTEsIDIxLCA1MiwgNjYsMTAyLDEzNiwgIDUsMjA4LCA1MSwgNDEsIDUxLCA1MCwgNTEsIDY1LCA1MSwKKyAgICAgNzksIDUxLDE2OCwgNTEsMTgyLCA1MiwgMzcsIDUyLCA1MSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgICA2LCAzOSwyMjgsMjI1LDIzMSwyMjksMjQzLDIzMiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLAorICAgICA0OCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTQyLDEwNCwKKyAgICAgIDIsIDUxLCA4NSwgNTEsMTYwLDIyNSwyMzcsMjUwLCA5NywgIDIsIDUxLCA5NCwgNTEsMTI3LDIyNSwyMjYsCisgICAgMjM5LDI0NiwxMDEsICAyLCA1MSwxMDQsIDUxLDExMywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LAorICAgICAzNSwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTMyLDIyNiwKKyAgICAyMjksMjM2LDIzOSwxMTksICAyLCA1MSwxMzcsIDUxLDE0NiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgICA2LCAzNywyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTM2LAorICAgIDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwyMDgsMjM2LDIyNSwyMzcsMjI5LDIyOCwyMzIsMjI5LDIyNiwKKyAgICAyNDIsMjI5LDExOSwxMjgsMjUxLCA3OSwyMzcsIDk3LCAgMiwgNTEsMTg5LCA1MSwyMjUsMjI4LDIyOCwyMjUsCisgICAgMjI1LDIyNiwyMzksMjQ2LDEwMSwgIDIsIDUxLDIwMiwgNTEsMjExLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LAorICAgIDEyOCwgIDYsIDM0LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwKKyAgICAxMzAsMjM1LDI0MywyNDUsMjQyLCA5NywgIDQsIDUxLDIzOSwgNTEsMjQ4LCA1MiwgIDYsIDUyLCAyMiwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA3MywyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwyNTQsMjQwLDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsMjU0LDI0MywyMzcsMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsMjU0LDI0NCwyNDAsMjI1LDI0NCwyMjUsMjMyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LAorICAgIDEyOCwyNTEsIDQ2LDI0MSwyMjUsMjM3LDIyNSwyNDQsMjQzLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwKKyAgICAyNTEsIDQ3LDI0MCwxMDQsMTI4LCAzMywgNTMsMjM2LDIyOSwyNDEsMjQ1LDIyNSwxMDgsMTI4LCAzNCwgNzYsCisgICAgMjQwLDIzMiwgOTcsMTI5LCAgMywxNzcsIDUyLCA4OCwyNDQsMjM5LDIzOCwyMzksMTE1LDEyOCwgIDMsMTcyLAorICAgIDEwOSwgIDQsIDUyLDEwNiwgNTIsMTE0LCA1MiwxMjUsIDUyLDE1OSwyMjUsMjI3LDI0MiwyMzksMTEwLDEyOCwKKyAgICAgIDEsICAxLDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNjUsMjQwLDIyOSwyNDIsCisgICAgMjQzLDIyNSwyMzgsMTAwLDEzMCwgIDAsIDM4LCA1MiwxMzksIDUyLDE1MSwyMzcsMjM5LDIzOCwyMzksMjQzLAorICAgIDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAgNiwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsIDM4LDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTk0LDExMCwgIDQsIDUyLDE3OCwgNTIsMTg5LCA1MywgNTUsCisgICAgIDUzLCA2NSwyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksIDM0LDEwMywgIDQsIDUyLAorICAgIDE5OSwgNTIsMjEwLCA1MiwyMjQsIDUzLCA0NywyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwKKyAgICAgNDksIDM2LDIzNSwyMzIsMjI1LDIzOCwyMzUsMjMyLDI0NSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgOTAsCisgICAgMjM2LDEwMSwxMzEsIDM0LCAzMiwgNTIsMjM1LCA1MywgMzIsIDUzLCAzOSwyMjYsMjQyLDIyNSwyMjcsMjM1LAorICAgIDIyOSwxMTYsICAyLCA1MiwyNDcsIDUzLCAxMSwyMzYsMjI5LDIzMCwxMTYsMTI5LCA0OCwgIDgsIDUzLCAgMCwKKyAgICAyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsIDYzLDI0MiwyMzMsMjMxLDIzMiwxMTYsCisgICAgMTI5LCA0OCwgIDksIDUzLCAyMSwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsIDY0LAorICAgIDIzNiwyMjksMjMwLDExNiwxMjgsIDM1LCA0MSwyNDIsMjMzLDIzMSwyMzIsMTE2LDEyOCwgMzUsIDQyLDI0MywKKyAgICAyNDQsMjQyLDIzOSwxMDksMTI4LCAzMywgNDMsMjM5LDI0NCwyMjksMjM2LDIyOSwyMzMsIDk3LDEyOCwgIDMsCisgICAgMTM1LDExNywgIDIsIDUzLCA3MSwgNTMsIDgzLDIyOCwyMjUsMjQ0LDI0NCwyMjUsMjI4LDIyOSwyNDYsIDk3LAorICAgIDEyOCwgIDksIDgyLDI0MywyNDYsMjI1LDI0MiwgOTcsICAzLCA1MywgOTUsIDUzLDEwNSwgNTMsMTEyLDIyNiwKKyAgICAyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDEzMCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgIDIsCisgICAgMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDEzMCwyMzksMjMxLDIzOSwyMzgsMjI5LAorICAgIDEwNywxMjgsICAxLCAgNSwxMTIsICAzLCA1MywxNDAsIDUzLDE2NCwgNTMsMTk0LCA5NywgIDIsIDUzLDE0NiwKKyAgICAgNTMsMTU4LDIyNSwyNDQsMjM5LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsICAwLDI0MiwyMjksCisgICAgMTEwLDEyOCwgMzYsMTU2LDIzOSwyNDMsMjQ0LDI0MiwyMzksMjQwLDIzMiwxMDEsICAyLCA1MywxNzcsIDUzLAorICAgIDE4OCwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDkwLDIzNywyMzksMTAwLDEyOCwKKyAgICAgIDIsMTg4LDExMiwgIDIsIDUzLDIwMCwgNTMsMjA1LDIzNiwxMDEsMTI4LDI0OCwyNTUsMjQyLDExMSwgIDIsCisgICAgIDUzLDIxMiwgNTMsMjIwLDIyNSwyMjcsMjMyLDIyOSwxMTUsMTI4LCAzNCwgODAsMTIwLCAgMiwgNTMsMjI2LAorICAgICA1MywyNDYsMjI5LDI0MSwyNDUsMjI1LDEwOCwxMjksIDM0LCA3MiwgNTMsMjM2LDIzOSwyNDIsMjMzLDIzNywKKyAgICAyMjUsMjMxLDEwMSwxMjgsIDM0LCA4MiwyMzMsMjM3LDIyNSwyNDQsMjI5LDIzNiwyNDksMjI5LDI0MSwyNDUsCisgICAgMjI1LDEwOCwxMjgsIDM0LCA2OSwxMTQsICA0LCA1NCwgMTUsIDU0LCA0MiwgNTQsIDQ2LCA1NCwgOTEsMjI1LAorICAgIDIyOSwgOTcsICAyLCA1NCwgMjMsIDU0LCAzMywyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwKKyAgICAxNDIsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxNDEsIDk5LDEyOCwgMzUsIDE4LDEwNSwgIDIsCisgICAgIDU0LCA1MiwgNTQsIDY2LDIzMSwyMzIsMjQ0LDIzMiwyMjUsMjM2LDIzMCwyNDIsMjMzLDIzOCwxMDMsMTI4LAorICAgICAzMCwxNTQsMjM4LDEwMywxMzAsICAwLDIyOSwgNTQsIDc1LCA1NCwgODMsMjI1LDIyNywyNDUsMjQ0LDEwMSwKKyAgICAxMjgsICAxLDI1MSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsICAxLDI0MiwyMzksMTE5LCAgOCwgNTQsCisgICAgMTExLCA1NCwxMTgsIDU0LDI0NywgNTUsIDU3LCA1NSwxMDcsIDU1LDE2MiwgNTUsMTg1LCA1NiwgIDQsMjI2LAorICAgIDIzOSwyNDQsMTA0LDEyOCwgMzMsMTQ4LDEwMCwgIDMsIDU0LDEyNiwgNTQsMTY1LCA1NCwyMTIsMjI1LDI0MywKKyAgICAxMDQsICA0LCA1NCwxMzgsIDU0LDE0NSwgNTQsMTUyLCA1NCwxNjAsMjI4LDIzOSwyNDcsMTEwLDEyOCwgMzMsCisgICAgMjI3LDIzNiwyMjksMjMwLDExNiwxMjgsIDMzLDIyNCwyNDIsMjMzLDIzMSwyMzIsMTE2LDEyOCwgMzMsMjI2LAorICAgIDI0NSwxMTIsMTI4LCAzMywyMjUsMjI2LDEwOCwgIDUsIDU0LDE3OCwgNTQsMTg1LCA1NCwxOTIsIDU0LDE5OSwKKyAgICAgNTQsMjA3LDIyNiwyMzksMjQ0LDEwNCwxMjgsIDMzLDIxMiwyMjgsMjM5LDI0NywxMTAsMTI4LCAzMywyMTEsCisgICAgMjM2LDIyOSwyMzAsMTE2LDEyOCwgMzMsMjA4LDI0MiwyMzMsMjMxLDIzMiwxMTYsMTI4LCAzMywyMTAsMjQ1LAorICAgIDExMiwxMjgsIDMzLDIwOSwyMzksMjQ3LDExMCwxMzEsIDMzLDE0NywgNTQsMjI0LCA1NCwyMzEsIDU0LDIzOSwKKyAgICAyMzYsMjI5LDIzMCwxMTYsMTI4LCAzMywxNTMsMjQyLDIzMywyMzEsMjMyLDExNiwxMjgsIDMzLDE1MiwyNDcsCisgICAgMjMyLDIzMywyNDQsMTAxLDEyOCwgMzMsMjMzLDEwNCwgIDIsIDU0LDI1MywgNTUsIDQ4LDIyOSwyMjUsMTAwLAorICAgICAgNCwgNTUsICA5LCA1NSwgMTksIDU1LCAyOSwgNTUsIDQwLDIyOCwyMzksMjQ3LDIzOCwyMzcsMjM5LDEwMCwKKyAgICAxMjgsICAyLDE5NywyMzYsMjI5LDIzMCwyNDQsMjM3LDIzOSwxMDAsMTI4LCAgMiwxOTQsMjQyLDIzMywyMzEsCisgICAgMjMyLDI0NCwyMzcsMjM5LDEwMCwxMjgsICAyLDE5NSwyNDUsMjQwLDIzNywyMzksMTAwLDEyOCwgIDIsMTk2LAorICAgIDIzOSwyNDIsMjMzLDI1MCwyMjksMTIwLDEyOCwyNDgsMjMxLDIzNiwyMjksMjMwLDExNiwxMzEsIDMzLDE0NCwKKyAgICAgNTUsIDcwLCA1NSwgODcsIDU1LCA5OSwyMjgsMjI2LDEwOCwxMjksIDMzLDIwOCwgNTUsIDc4LDI0MywyNDQsCisgICAgMjQyLDIzOSwyMzUsMTAxLDEyOCwgMzMsMjA1LDIzOSwyNDYsMjI5LDI0MiwyNDIsMjMzLDIzMSwyMzIsMTE2LAorICAgIDEyOCwgMzMsMTk4LDI0NywyMzIsMjMzLDI0NCwxMDEsMTI4LCAzMywyMzAsMjQyLDIzMywyMzEsMjMyLDExNiwKKyAgICAxMzIsIDMzLDE0NiwgNTUsMTIzLCA1NSwxMzUsIDU1LDE0MywgNTUsMTU0LDIyOCwyMjYsMjM2LDI0MywyNDQsCisgICAgMjQyLDIzOSwyMzUsMTAxLDEyOCwgMzMsMjA3LDIzMiwyMjksMjI1LDI0NiwxMjEsMTI4LCAzOSwxNTgsMjM5LAorICAgIDI0NiwyMjksMjQyLDIzNiwyMjksMjMwLDExNiwxMjgsIDMzLDE5NiwyNDcsMjMyLDIzMywyNDQsMTAxLDEyOCwKKyAgICAgMzMsMjMyLDI0NCwyMjUsIDk4LCAgMiwgNTUsMTcwLCA1NSwxNzcsMjM2LDIyOSwyMzAsMTE2LDEyOCwgMzMsCisgICAgMjI4LDI0MiwyMzMsMjMxLDIzMiwxMTYsMTI4LCAzMywyMjksMjQ1LDExMiwxMzIsIDMzLDE0NSwgNTUsMTk4LAorICAgICA1NSwyMjYsIDU1LDI0NCwgNTUsMjUyLDEwMCwgIDIsIDU1LDIwNCwgNTUsMjE2LDExMCwxMjksIDMzLDE0OSwKKyAgICAgNTUsMjEwLDIyNiwyNDMsMTAxLDEyOCwgMzMsMTY4LDIzOSwyNDcsMjM4LDIyNiwyMjUsMjQzLDEwMSwxMjgsCisgICAgIDMzLDE2OCwyMzYsMjI5LDIzMCwxMTYsMTI5LCAzMywxNTAsIDU1LDIzNSwyMzksMjMwLDIyOCwyMzksMjQ3LAorICAgIDExMCwxMjgsIDMzLDE5NywyNDIsMjMzLDIzMSwyMzIsMTE2LDEyOCwgMzMsMTUxLDI0NywyMzIsMjMzLDI0NCwKKyAgICAxMDEsMTI4LCAzMywyMzEsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwxMjAsMTI4LDI0OCwyMzAsMTE1LCAgNSwgNTYsCisgICAgIDI1LCA1NiwxMDEsIDU2LDE0NiwgNTYsMjI5LCA1NiwyMzksIDk5LCAgMiwgNTYsIDMxLCA1NiwgODMsMjMzLAorICAgIDEwNSwgIDIsIDU2LCAzOCwgNTYsIDYxLDIyNywyMzMsMjQyLDIyNywyNDUsMTA5LDEyOSwgIDAsIDk0LCA1NiwKKyAgICAgNDksMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNjIsMjQ0LDIzMywyMzYsCisgICAgMjI4LDEwMSwxMjksICAwLDEyNiwgNTYsIDcxLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLAorICAgIDEyOCwyNTUsIDk0LDI0MiwyMzMsMjQwLDExNiwxMjksICAyLCA4MSwgNTYsIDkyLDI0NCwyNDUsMjQyLDIzOCwKKyAgICAyMjksMTAwLDEyOCwgIDIsIDgyLDIzNywyMjUsMjM2LDEwOCwgIDIsIDU2LDExMCwgNTYsMTIxLDIzMiwyMzMsCisgICAgMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgNjUsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LAorICAgICA5NywxMjksIDQ4LDE2MSwgNTYsMTM0LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwKKyAgICAyNTUsMTAzLDI0NCwyMjksMjQyLDIzMywxMTUsICAyLCA1NiwxNTYsIDU2LDIyNSwxMDcsMTMxLCAgMCwgNDIsCisgICAgIDU2LDE2NiwgNTYsMTk0LCA1NiwyMTcsIDk3LCAgMiwgNTYsMTcyLCA1NiwxODYsMjM2LDI0NCwyMzksMjM4LAorICAgIDIyOSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LDEwOSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwKKyAgICAgIDYsMTA5LDEwOSwgIDIsIDU2LDIwMCwgNTYsMjA2LDIyNSwyNDQsMTA0LDEyOCwgMzQsIDIzLDIzOSwyMzgsCisgICAgMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMTAsMjQzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjU0LAorICAgICA5NywxMDksMTI4LCAzMiwgNjYsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwyNDYsMjMzLDI0OSwKKyAgICAyMzcsMjQwLDI0NCwyMzksMjQ0LDIzMywyMjcsMjI1LDIzNiwyMzYsMjQ5LDIyOSwyNDEsMjQ1LDIyNSwxMDgsCisgICAgMTI4LCAzNCwgNjcsMTE2LDEzMiwgIDAsIDY0LCA1NywgMTUsIDU3LCAyMiwgNTcsIDM0LCA1NywgNDIsMjMzLAorICAgIDIzNiwyMjgsMTAxLDEyOCwgIDAsMjI3LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsIDMyLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI1NCwxMDcsMjQ1LDI0MiwyMzgsMjI5LDEwMCwxMjgsCisgICAgICAyLCA4MCwxMTcsICA2LCA1NywgNjQsIDU3LCA4OSwgNTcsIDk2LCA1NywxMjEsIDU3LDE0MSwgNTcsMTU3LAorICAgICA5OCwgIDIsIDU3LCA3MCwgNTcsIDc5LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTQ4LDIzOSwKKyAgICAyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAzMiwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgMjAsCisgICAgMjMxLDExNywgIDIsIDU3LDEwMywgNTcsMTEyLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTQ4LAorICAgIDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDIwLDIzNiwyMjksMjM4LDIzMSwyNDQsMjMyLDIzNywKKyAgICAyMjUsMjQyLDIzNSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMTUsMjM3LDIyNSwyNDQsCisgICAgMjQyLDIyNSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDc2LDI0NiwyMzksMjQ3LAorICAgIDIyOSwyMzYsMjQzLDIzMywyMzEsMTEwLCAgMywgNTcsMTczLCA1NywxODMsIDU3LDE5MCwyMjYsMjI5LDIzOCwKKyAgICAyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMDQsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDc2LDIzMSwyNDUsCisgICAgMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwyMDQsMjQ2LDIyNSwyMzEsMjQyLDIyNSwyMzIsMjI1LAorICAgIDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA2MSwxMjEsICAyLCA1NywyMjEsIDU3LDIzMywyMjYsMjI1LDI0MiwKKyAgICAyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LCA5NywyMzMsMTEwLDEzMCwgIDUsMjI2LCA1NywyNDIsCisgICAgIDU4LCAgMSwyMjUsMjM2LDI0NCwyMzksMjM4LDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLAorICAgICAzMiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIyNiwgOTgsMTQ0LCAgMCwgOTgsIDU4LCA0NiwKKyAgICAgNTgsMTgxLCA1OCwxOTIsIDU4LDIwMSwgNTgsMjI2LCA2MCwgMTEsIDYwLCA3MywgNjAsMTQ2LCA2MiwgNzIsCisgICAgIDYyLCA4NCwgNjIsMTI3LCA2MiwxMzUsIDYyLDE0NSwgNjQsIDE1LCA2NCwgMzksIDY0LCA0OCwgOTcsICA3LAorICAgICA1OCwgNjIsIDU4LCA3MiwgNTgsIDk2LCA1OCwxMDMsIDU4LDEyOCwgNTgsMTUyLCA1OCwxNjMsMjI2LDIyOSwKKyAgICAyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTcyLDIyNywyMzUsMjQzLDIzNiwyMjUsMjQzLDEwNCwxMjksCisgICAgICAwLCA5MiwgNTgsIDg0LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDYwLAorICAgIDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA0NCwyMzEsMTE3LCAgMiwgNTgsMTEwLCA1OCwxMTksMjM0LDIyNSwKKyAgICAyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNzIsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgNDQsCisgICAgMTA0LCAgMiwgNTgsMTM0LCA1OCwxNDQsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTEyLAorICAgIDI0NCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNjMsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywKKyAgICAxMjgsIDQ4LDIwOCwxMTQsMTI5LCAgMCwxMjQsIDU4LDE2OSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsCisgICAgMjI3LDEwMSwxMjgsMjU1LCA5MiwyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksICA1LAorICAgIDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMjA5LDIyOCwyMzksMTE2LCAgMiwgNTgsMjA5LCA1OCwKKyAgICAyMTgsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAzMCwgIDMsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsCisgICAgIDMwLCAgNSwxMDEsICA2LCA1OCwyNDAsIDU5LCAgNSwgNTksIDI4LCA1OSwxNzAsIDU5LDE4MSwgNTksMTkzLAorICAgIDIyNSwyMzcsMjI5LDIyOCwyNDMsMjMzLDI0OCwyNDQsMjI5LDIyOSwyMzgsMjQ0LDIzMiwyMzgsMjM5LDI0NCwKKyAgICAyMjksMTE1LDEyOCwgMzgsMTA4LCA5OSwgIDIsIDU5LCAxMSwgNTksIDE4LDIyNSwyNDUsMjQzLDEwMSwxMjgsCisgICAgIDM0LCA1MywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNDksMTA0LCAgNSwgNTksIDQwLAorICAgICA1OSwgNDksIDU5LCA2MywgNTksIDkzLCA1OSwxNTIsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwKKyAgICAgNDAsMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE0NCwxMDUsCisgICAgICAyLCA1OSwgNjksIDU5LCA4NCwyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsMjU0LDE0NSwyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEyMSwyMzcsMTAxLCAgMiwKKyAgICAgNTksMTAwLCA1OSwxMTMsMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsCisgICAgMTQ2LDIyOSwyMzcsMTA1LCAgMiwgNTksMTIxLCA1OSwxMzYsMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LAorICAgIDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MiwxNTksMjQzLDIzOSwyMzYsMjI1LDI0NCwyMjksMjI4LDIyNSwKKyAgICAyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsICA4LDIzOCwyMzksMjM5LDIzOCwyMzAsMjMzLDIzOCwyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsMTA5LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LAorICAgIDIzOCwgOTcsMTI4LCA0OCwyMTcsMjM4LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwKKyAgICAgOTgsMTE2LDEzMiwgIDUsMjA5LCA1OSwyMDUsIDU5LDIyNSwgNTksMjQ1LCA1OSwyNTQsIDk3LDEyOSwgIDMsCisgICAgMTc4LCA1OSwyMTEsMjQzLDI0OSwyMzcsMjI2LDIzOSwyMzYsMjMxLDI0MiwyMjksMjI5LDEwNywxMjgsICAzLAorICAgIDIwOCwyMjgsMjI1LDIzMSwyMjksMjQzLDEwNCwxMjksMjUxLCA0OSwgNTksMjM2LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwyNTEsIDQ5LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjA5LDI0MiwyMjUsCisgICAgMjMwLDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA3NiwxMDQsICAyLCA2MCwgMTcsIDYwLAorICAgICA2NywgOTcsICAzLCA2MCwgMjUsIDYwLCAzNSwgNjAsIDQyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwKKyAgICAxMjgsICA5LDE3MywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNDUsMjMxLDExNywgIDIsIDYwLCA0OSwgNjAsCisgICAgIDU4LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTczLDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LAorICAgIDEyOCwgMTAsIDQ1LDIzOSwyMzksMTA3LDEyOCwgIDIsIDgzLDEwNSwgIDUsIDYwLCA4NSwgNjAsIDk2LCA2MCwKKyAgICAxMDcsIDYwLDEyMSwgNjAsMTM1LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMTUsCisgICAgMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDIxMSwyMzYsMjI1LDIyNiwyMzMsMjI1LAorICAgIDIzNiwyMjcsMjM2LDIzMywyMjcsMTA3LDEyOCwgIDIsMTUyLDIzOCwyMjgsMjMzLDIzMSwyNDUsMjQyLDIzNywKKyAgICAyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgIDIsMjQyLDI0NSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsCisgICAgIDUxLCA0OSwxMDgsICAzLCA2MCwxNTQsIDYyLCA1NSwgNjIsIDY2LCA5NywgIDIsIDYwLDE2MCwgNjIsIDUwLAorICAgIDIyNywxMDcsICA2LCA2MCwxNzUsIDYwLDE4NCwgNjAsMjIxLCA2MSwxMTQsIDYxLDE2OSwgNjEsMjIxLDIyNywKKyAgICAyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzcsMjA3LDEwMCwgIDIsIDYwLDE5MCwgNjAsMTk5LDIzMywyMjUsCisgICAgMjM3LDIzOSwyMzgsMTAwLDEyOCwgMzcsMTk4LDIzOSwyNDcsMjM4LDI0MCwyMzksMjMzLDIzOCwyNDQsMjMzLAorICAgIDIzOCwyMzEsMjQ0LDI0MiwyMzMsMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LDE4OCwxMDgsICAyLCA2MCwKKyAgICAyMjcsIDYxLCA3NCwxMDEsICAyLCA2MCwyMzMsIDYxLCAxMywyMzAsMjQ0LDI0MCwyMzksMjMzLDIzOCwyNDQsCisgICAgMjMzLDIzOCwxMDMsICAyLCA2MCwyNDgsIDYxLCAgMiwyNDAsMjM5LDIzMywyMzgsMjQ0LDIyOSwxMTQsMTI4LAorICAgICAzNywxOTYsMjQ0LDI0MiwyMzMsMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LDE5MiwyMzgsMjQ0LDIzMywKKyAgICAyMjcsMjQ1LDIzNiwyMjUsMjQyLDIyNiwyNDIsMjI1LDIyNywyMzUsMjI5LDExNiwgIDIsIDYxLCAzMywgNjEsCisgICAgIDUzLDIzNiwyMjksMjMwLDExNiwxMjksIDQ4LCAxNiwgNjEsIDQyLDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LAorICAgIDIyNSwxMDgsMTI4LDI1NCwgNTksMjQyLDIzMywyMzEsMjMyLDExNiwxMjksIDQ4LCAxNywgNjEsIDYzLDI0NiwKKyAgICAyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LDI1NCwgNjAsMjM5LDI0NywyMjksMTE0LCAgMiwgNjEsCisgICAgIDgzLCA2MSwgOTgsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyNDIsMjMzLDIyNSwyMzgsMjMxLDIzNiwxMDEsMTI4LAorICAgICAzNywyMjcsMjQyLDIzMywyMzEsMjMyLDI0NCwyNDQsMjQyLDIzMywyMjUsMjM4LDIzMSwyMzYsMTAxLDEyOCwKKyAgICAgMzcsMjI2LDExNCwgIDIsIDYxLDEyMCwgNjEsMTMxLDIyOSwyMjcsMjQ0LDIyNSwyMzgsMjMxLDIzNiwxMDEsCisgICAgMTI4LCAzNywxNzIsMjMzLDIzMSwyMzIsMjQ0LDI0MCwyMzksMjMzLDIzOCwyNDQsMjMzLDIzOCwxMDMsICAyLAorICAgICA2MSwxNDgsIDYxLDE1OCwyNDAsMjM5LDIzMywyMzgsMjQ0LDIyOSwxMTQsMTI4LCAzNywxODYsMjQ0LDI0MiwKKyAgICAyMzMsMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LDE4MiwxMTUsICAzLCA2MSwxNzcsIDYxLDIwNywgNjEsCisgICAgMjE1LDEwOSwgIDIsIDYxLDE4MywgNjEsMTk1LDIyNSwyMzYsMjM2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLAorICAgIDEyOCwgMzcsMTcwLDIzMywyMzYsMjMzLDIzOCwyMzEsMjMwLDIyNSwyMjcsMTAxLDEyOCwgMzgsIDU5LDI0MSwKKyAgICAyNDUsMjI1LDI0MiwxMDEsMTI4LCAzNywxNjAsMjQ0LDIyNSwxMTQsMTI4LCAzOCwgIDUsMjQ1LDI0MCwxMTIsCisgICAgICAyLCA2MSwyMjksIDYyLCAxMSwyMjksMTE0LCAgMiwgNjEsMjM2LCA2MSwyNTEsMjM2LDIyOSwyMzAsMjQ0LAorICAgIDI0NCwyNDIsMjMzLDIyNSwyMzgsMjMxLDIzNiwxMDEsMTI4LCAzNywyMjgsMjQyLDIzMywyMzEsMjMyLDI0NCwKKyAgICAyNDQsMjQyLDIzMywyMjUsMjM4LDIzMSwyMzYsMTAxLDEyOCwgMzcsMjI5LDIzOSwyMzMsMjM4LDI0NCwyMzMsCisgICAgMjM4LDEwMywgIDIsIDYyLCAyMywgNjIsIDM5LDI0MywyMzcsMjI1LDIzNiwyMzYsMjQ0LDI0MiwyMzMsMjI1LAorICAgIDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LDE4MCwyNDQsMjQyLDIzMywyMjUsMjM4LDIzMSwyMzYsMTAxLDEyOCwKKyAgICAgMzcsMTc4LDIzOCwxMDcsMTI4LCAzNiwgMzUsMjMzLDIzOCwyMjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsCisgICAgIDMwLCAgNywyMzksMjI3LDEwNywxMjgsIDM3LDEzNiwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LAorICAgIDEwMSwxMjgsMjU1LCA2NiwxMTEsICAzLCA2MiwgOTIsIDYyLDEwNSwgNjIsMTE2LDIyNiwyMjUsMjMzLDIzNywKKyAgICAyMjUsMjMzLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAyNiwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsCisgICAgIDk3LDEyOCwgNDgsMTI0LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyMjAsMjQwLAorICAgIDIyNSwyNDIsMjI5LDExMCwxMjgsIDM2LDE1NywyNDEsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwKKyAgICAxOTUsMTE0LCAgNCwgNjIsMTU1LCA2MywxNDksIDYzLDIyMiwgNjQsICA1LDIyNSwgOTksICAyLCA2MiwxNjIsCisgICAgIDYzLCA1NiwxMDEsICAzLCA2MiwxNzAsIDYyLDE3NSwgNjIsMjQzLDIyOSwxMjAsMTI4LDI0OCwyNDQsMjM2LAorICAgIDIyOSwyMzAsMTE2LDEzMywgIDAsMTIzLCA2MiwxOTIsIDYyLDE5NywgNjIsMjE5LCA2MiwyMjcsIDYyLDIzMiwKKyAgICAyMjYsMTE2LDEyOCwyNDgsMjQzLDEwOSwgIDIsIDYyLDIwMywgNjIsMjA4LDIzMywxMDAsMTI4LDI0OCwyNDIsCisgICAgMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA5MSwyNDMsMjM3LDIyNSwyMzYsMTA4LAorICAgIDEyOCwyNTQsIDkxLDI0NCwxMTIsMTI4LDI0OCwyNDEsMjQ2LDIyOSwyNDIsMjQ0LDIzMywyMjcsMjI1LDEwOCwKKyAgICAxMjgsMjU0LCA1NSwyNDIsMjMzLDIzMSwyMzIsMTE2LDEzMywgIDAsMTI1LCA2MywgIDUsIDYzLCAxMCwgNjMsCisgICAgIDMyLCA2MywgNDAsIDYzLCA0NSwyMjYsMTE2LDEyOCwyNDgsMjU0LDEwOSwgIDIsIDYzLCAxNiwgNjMsIDIxLAorICAgIDIzMywxMDAsMTI4LDI0OCwyNTMsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA5MywKKyAgICAyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDkyLDI0NCwxMTIsMTI4LDI0OCwyNTIsMjQ2LDIyOSwyNDIsCisgICAgMjQ0LDIzMywyMjcsMjI1LDEwOCwxMjgsMjU0LCA1NiwyMzUsMjI5LDExNiwgIDIsIDYzLCA2NCwgNjMsMTA2LAorICAgIDIzNiwyMjksMjMwLDExNiwxMzIsICAwLCA5MSwgNjMsIDc5LCA2MywgODQsIDYzLCA4OSwgNjMsMTAxLDIyNiwKKyAgICAxMTYsMTI4LDI0OCwyNDAsMjI5LDEyMCwxMjgsMjQ4LDIzOSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsCisgICAgMjI3LDEwMSwxMjgsMjU1LCA1OSwyNDQsMTEyLDEyOCwyNDgsMjM4LDI0MiwyMzMsMjMxLDIzMiwxMTYsMTMyLAorICAgICAgMCwgOTMsIDYzLDEyMiwgNjMsMTI3LCA2MywxMzIsIDYzLDE0NCwyMjYsMTE2LDEyOCwyNDgsMjUxLDIyOSwKKyAgICAxMjAsMTI4LDI0OCwyNTAsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNjEsCisgICAgMjQ0LDExMiwxMjgsMjQ4LDI0OSwyMjksMjQ2LDEwMSwxMzEsICAyLDIxNiwgNjMsMTYxLCA2MywxNzIsIDYzLAorICAgIDE3OCwyMjYsMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDQ2LDIyNywyMzcsIDk4LDEyOCwKKyAgICAgIDMsICA2LDIzMywyMzgsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwxMDAsICAzLCA2MywxOTMsIDYzLDIwNCwgNjMsCisgICAgMjEwLDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgNDcsMjI3LDIzNywgOTgsMTI4LAorICAgICAgMywgMTcsMjI4LDIzOSwyNDUsMjI2LDIzNiwyMjksMjI3LDIzNywgOTgsMTI4LCAgMywgOTcsMjMzLDIyOCwKKyAgICAyMzEsMTAxLCAgMiwgNjMsMjMxLCA2MywyNDIsMjI2LDIyOSwyMzYsMjM5LDI0NywyMjcsMjM3LCA5OCwxMjgsCisgICAgICAzLCA0MiwyMzMsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LAorICAgIDIzNywgOTgsMTI4LCAgMywgNTgsMjM5LDIzNSwyMjksMjM4LDIyNiwyMjUsMTE0LDEyOCwgIDAsMTY2LDExNSwKKyAgICAgIDIsIDY0LCAyMSwgNjQsIDI5LDI0NCwyNDIsMjM5LDIzNSwxMDEsMTI4LCAgMSwxMjgsMjQ1LDI0MCwyMjksCisgICAgMjQyLDIzMywyMzksMTE0LDEyOCwyNDYsMjM0LDI0NCwyMzksMjQwLDIyNiwyMjUsMTE0LDEyOCwgIDEsMTMxLAorICAgIDExNywgIDMsIDY0LCA1NiwgNjQsIDY3LCA2NCwgNzgsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywKKyAgICAxMjgsIDQ4LDExOCwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMjE0LDIzNiwxMDgsCisgICAgICAyLCA2NCwgODUsIDY0LDExNSwyMjksMTE2LDEzMCwgMzIsIDM0LCA2NCwgOTQsIDY0LDEwNCwyMzMsMjM4LAorICAgIDI0NiwyMjksMjQyLDI0MywxMDEsMTI4LCAzNywyMTYsMjM5LDI0MCwyMjksMjQyLDIyNSwyNDQsMjM5LDExNCwKKyAgICAxMjgsIDM0LCAyNSwyNDMsMjI5LDI0OSwxMDEsMTI4LCAzNywyMDYsIDk5LDE0MywgIDAsIDk5LCA2NCwxNTYsCisgICAgIDY1LDEwNSwgNjUsMTE2LCA2NSwxODAsIDY1LDIxMSwgNjYsIDQ4LCA2NywyMTUsIDY4LDE5OSwgNjksIDQzLAorICAgICA2OSwgOTIsIDcyLCA4NCwgNzIsIDkyLCA3MiwxMDIsIDcyLDExNCwgNzIsMTQ3LCA5NywgIDksIDY0LDE3NiwKKyAgICAgNjQsMTg3LCA2NCwxOTcsIDY0LDIwNCwgNjQsMjExLCA2NCwyMzYsIDY0LDI0NiwgNjUsIDQyLCA2NSwgNTEsCisgICAgMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDExMCwyMjYsMjI5LDIzOCwyMzEsMjI1LAorICAgIDIzNiwxMDUsMTI4LCAgOSwxNTQsMjI3LDI0NSwyNDQsMTAxLDEyOCwgIDEsICA3LDIyOCwyMjksMjQ2LCA5NywKKyAgICAxMjgsICA5LCAyNiwyMzEsMTE3LCAgMiwgNjQsMjE4LCA2NCwyMjcsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsCisgICAgMTI4LCAxMCwxNTQsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjYsMjM2LDI0MywyNDEsMjQ1LAorICAgIDIyNSwyNDIsMTAxLDEyOCwgNTEsMTM2LDIzOCwyMjgsMjQyLDIyNSwyMjYsMjMzLDIzOCwyMjgsMTE3LCAgNCwKKyAgICAgNjUsICA4LCA2NSwgMTgsIDY1LCAyNCwgNjUsIDMxLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsCisgICAgICA5LDEyOSwyMjcsMjM3LCA5OCwxMjgsICAzLCAxNiwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgIDEsMjMxLAorICAgIDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDEyOSwyNDAsMjQzLDIzNiwyMzksMjI3LDEwNywKKyAgICAxMjgsIDMzLDIzNCwxMTQsICAzLCA2NSwgNTksIDY1LCA2NSwgNjUsIDkxLDIyOSwyMzksMTAyLDEyOCwgMzMsCisgICAgICA1LDIzOSwxMTAsMTMwLCAgMiwxOTksIDY1LCA3NCwgNjUsIDg1LDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LAorICAgIDIzNywgOTgsMTI4LCAgMywgNDQsMjI3LDIzNywgOTgsMTI4LCAgMywgMTIsMjQyLDIzMywyMjUsMjMxLDIyOSwKKyAgICAyNDIsMjI5LDI0NCwyNDUsMjQyLDExMCwxMjgsIDMzLDE4MSwyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsCisgICAgMTExLDEyOCwgNDksIDI0LCA5OSwgIDQsIDY1LDEyNiwgNjUsMTMzLCA2NSwxNTIsIDY1LDE3NCwyMjUsMjQyLAorICAgIDIzOSwxMTAsMTI4LCAgMSwgMTMsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI5LCAgMCwyMzEsIDY1LDE0NCwKKyAgICAyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsICA5LDIzMywyNDIsIDk5LCAgMiwgNjUsMTYwLCA2NSwxNjUsCisgICAgMjM2LDEwMSwxMjgsIDM2LDIxMCwyNDUsMjM3LDIzMCwyMzYsMjI5LDEyMCwxMjgsICAxLCAgOSwyNDUsMjQyLAorICAgIDEwOCwxMjgsICAyLCA4NSwxMDAsICAyLCA2NSwxODYsIDY1LDIwMiwyMzksMTE2LDEyOSwgIDEsIDExLCA2NSwKKyAgICAxOTMsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAgMSwgMTEsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsCisgICAgMTI4LCA1MSwxOTcsMTAxLCAgMiwgNjUsMjE3LCA2NSwyMzMsMjI4LDIzMywyMzYsMjM2LCA5NywxMjksICAwLAorICAgIDE4NCwgNjUsMjI3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDM5LDIzOCwxMTYsMTMyLCAgMCwxNjIsIDY1LDI0NiwKKyAgICAgNjYsIDE0LCA2NiwgMjYsIDY2LCAzNywxMDUsICAyLCA2NSwyNTIsIDY2LCAgNCwyMzEsMjQyLDIyNSwyMjgsCisgICAgMTAxLDEyOCwgMzMsICAzLDIzOCwyMzAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDIyMywyMzcsMjM5LAorICAgIDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LDIyNCwyMzksMjM2LDIyOCwyNDMsMjQ0LDI0OSwKKyAgICAyMzYsMTAxLDEyOCwyNDcsMTYyLDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LDI0NiwyMjQsCisgICAgMTA0LCAgNSwgNjYsIDYwLCA2NiwxMjMsIDY2LDEzNCwgNjcsIDYyLCA2NywxNTQsIDk3LCAgNCwgNjYsIDcwLAorICAgICA2NiwgODEsIDY2LCA5MSwgNjYsIDk4LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwKKyAgICAxMjEsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTU1LDIyOCwyMjksMjQ2LCA5NywxMjgsCisgICAgICA5LCAyNywyMzEsMTE3LCAgMiwgNjYsMTA1LCA2NiwxMTQsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LAorICAgICAxMCwxNTUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjcsMjI2LDIzOSwyNDAsMjM5LDIzNywKKyAgICAyMzksMjMwLDExMSwxMjgsIDQ5LCAyMCwxMDEsICA2LCA2NiwxNDgsIDY2LDE2OCwgNjYsMTkyLCA2NywgIDQsCisgICAgIDY3LCAxNiwgNjcsIDM3LDIyNSwyMjYsMjM1LDIzMiwyMjUsMjQzLDIzMywyMjUsMjM4LDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxODksIDk5LCAgMiwgNjYsMTc0LCA2NiwxODIsMjM1LDIzNywKKyAgICAyMjUsMjQyLDEwNywxMjgsIDM5LCAxOSwyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNzEsCisgICAgMTAwLCAgMiwgNjYsMTk4LCA2NiwyNDIsMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LDExNCwgIDIsIDY2LAorICAgIDIxMSwgNjYsMjMxLDIyNSwyMjYsMjM1LDIzMiwyMjUsMjQzLDIzMywyMjUsMjM4LDIyNywyNDksMjQyLDIzMywKKyAgICAyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxOTEsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LDE4MywyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLAorICAgICA5OSwxMjgsICA0LDI0NSwyMzIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDExNSwKKyAgICAyMzUsMjMyLDIyNSwyMzUsMjI1LDI0MywyNDMsMjMzLDIyNSwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LDIwNCwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMjM2LDI0MywyNDQsMjQyLAorICAgIDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxODUsMTA1LDEyOSwKKyAgICAgIDMsMTk5LCA2NywgNjgsMjI5LDI0NSwyMjcsMTA0LCAgNCwgNjcsIDgxLCA2NywxMTYsIDY3LDEzMSwgNjcsCisgICAgMTQwLCA5NywgIDIsIDY3LCA4NywgNjcsMTAyLDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLAorICAgIDIyOSwyMjUsMTEwLDEyOCwgNTAsMTE5LDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA1MCwgMjMsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsCisgICAgMTI4LCA1MCwxMDUsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNzQsMjQwLDIyNSwyNDIsMjI5LAorICAgIDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAgOSwxMTEsICAyLCA2NywxNjAsIDY3LDIxMCwKKyAgICAyMjcsMTA0LCAgMywgNjcsMTY5LCA2NywxOTEsIDY3LDIwMSwyMjUsMTEwLCAgMiwgNjcsMTc2LCA2NywxODQsCisgICAgMjMxLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAxMCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgIDgsMjMzLAorICAgIDIzOCwyMzEsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsICA5LDIzOSwyMjksMjQ0LDIzMiwyMjUsMTA1LDEyOCwKKyAgICAgMTQsIDEyLDIzOSwxMDcsMTI4LCAgMSwxMzYsMTA1LCAgMiwgNjcsMjIxLCA2OCwgNjcsMjI5LDI0NSwgOTksCisgICAgICA1LCA2NywyMzUsIDY4LCAxNCwgNjgsIDI5LCA2OCwgMzgsIDY4LCA1MiwgOTcsICAyLCA2NywyNDEsIDY4LAorICAgICAgMCwyMjcsMjMzLDI0MiwyMjcsMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLDExOCwKKyAgICAyNDAsMjI1LDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsIDIyLDIyNywyMzMsCisgICAgMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsMTA0LDIzNSwyMzksMjQyLAorICAgIDIyOSwyMjUsMTEwLDEyOCwgNDksIDcyLDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA1MCwgIDgsMjQ1LDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsCisgICAgMTI4LCA1MCwgMjgsMjQyLCA5OSwgIDIsIDY4LCA3NCwgNjgsMTY5LDIzNiwxMDEsMTMyLCAzNywyMDMsIDY4LAorICAgICA4NywgNjgsIDk4LCA2OCwxMDMsIDY4LDEyNywyMzcsMjQ1LDIzNiwyNDQsMjMzLDI0MCwyMzYsMTIxLDEyOCwKKyAgICAgMzQsMTUxLDIzOSwxMTYsMTI4LCAzNCwxNTMsMTEyLCAgMiwgNjgsMTA5LCA2OCwxMTUsMjM2LDI0NSwxMTUsCisgICAgMTI4LCAzNCwxNDksMjM5LDI0MywyNDQsMjI1LDIzNiwyMzcsMjI1LDI0MiwxMDcsMTI4LCA0OCwgNTQsMjQ3LAorICAgIDIzMywyNDQsMTA0LCAgMiwgNjgsMTM2LCA2OCwxNTIsMjM2LDIyOSwyMzAsMjQ0LDIzMiwyMjUsMjM2LDIzMCwKKyAgICAyMjYsMjM2LDIyNSwyMjcsMTA3LDEyOCwgMzcsMjA4LDI0MiwyMzMsMjMxLDIzMiwyNDQsMjMyLDIyNSwyMzYsCisgICAgMjMwLDIyNiwyMzYsMjI1LDIyNywxMDcsMTI4LCAzNywyMDksMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTMwLAorICAgICAgMiwxOTgsIDY4LDE4MiwgNjgsMTkzLDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywKKyAgICAgNDUsMjI3LDIzNywgOTgsMTI4LCAgMywgIDIsMTA4LCAgMywgNjgsMjA3LCA2OCwyMTMsIDY5LCAxMSwyMjksCisgICAgMjI1LDExNCwxMjgsIDM1LCAzOSwyMzMsMjI3LDEwNywgIDQsIDY4LDIyNSwgNjgsMjM2LCA2OCwyNDUsIDY4LAorICAgIDI1NSwyMjUsMjM2LDI0NiwyMjksMjM5LDIzNiwyMjUsMTE0LDEyOCwgIDEsMTk0LDIyOCwyMjksMjM4LDI0NCwKKyAgICAyMjUsMTA4LDEyOCwgIDEsMTkyLDIzNiwyMjUsMjQ0LDIyOSwyNDIsMjI1LDEwOCwxMjgsICAxLDE5MywyNDIsCisgICAgMjI5LDI0NCwyNDIsMjM5LDIzMCwyMzYsMjI5LDEyMCwxMjgsICAxLDE5NSwyNDUsIDk4LDEyOSwgMzgsIDk5LAorICAgICA2OSwgMTgsMjQzLDI0NSwyMzMsMTE2LCAgMiwgNjksIDI3LCA2OSwgMzUsMjI2LDIzNiwyMjUsMjI3LDEwNywKKyAgICAxMjgsIDM4LCA5OSwyNDcsMjMyLDIzMywyNDQsMTAxLDEyOCwgMzgsMTAzLDEwOSwgIDMsIDY5LCA1MSwgNjksCisgICAgIDY1LCA2OSwgNzYsMjI3LDI0NSwyMjYsMjI5LDIyOCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLAorICAgIDE2NCwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDY3LDI0MywyNDEsMjQ1LDIyNSwKKyAgICAyNDIsMjI5LDIyOCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE2MCwxMTEsICA4LCA2OSwxMTAsCisgICAgIDY5LDEyMSwgNjksMjA4LCA3MCwxNTAsIDcxLDE3OSwgNzEsMjEwLCA3MiwgNjEsIDcyLCA3MCwyMjUsMjQyLAorICAgIDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsMTI5LDIzNiwyMzksMTEwLDEzMSwgIDAsIDU4LCA2OSwKKyAgICAxMzMsIDY5LDE1OCwgNjksMTc3LDIzNywyMzksMTEwLCAgMiwgNjksMTQxLCA2OSwxNDksMjI5LDI0NCwyMjUsCisgICAgMjQyLDEyMSwxMjgsIDMyLDE2MSwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAyNiwxMTUsICAyLAorICAgICA2OSwxNjQsIDY5LDE3MCwyMzMsMjMxLDExMCwxMjgsIDMyLDE2MSwyMzcsMjI1LDIzNiwxMDgsMTI4LDI1NCwKKyAgICAgODUsMjQ0LDI0MiwyMzMsMjI1LDIzOCwyMzEsMjQ1LDIzNiwyMjUsMTE0LCAgMiwgNjksMTkyLCA2OSwyMDIsCisgICAgMjMyLDIyNSwyMzYsMjMwLDIzNywyMzksMTAwLDEyOCwgIDIsMjA5LDIzNywyMzksMTAwLDEyOCwgIDIsMjA4LAorICAgIDEwOSwgIDIsIDY5LDIxNCwgNzAsMTQzLDIzNywgOTcsMTM0LCAgMCwgNDQsIDY5LDIzMSwgNzAsIDM5LCA3MCwKKyAgICAgNTAsIDcwLCA2MiwgNzAsIDkyLCA3MCwxMTUsIDk3LCAgMywgNjksMjM5LCA3MCwgIDksIDcwLCAxNywyMjYsCisgICAgMjM5LDI0NiwxMDEsICAyLCA2OSwyNDgsIDY5LDI1NCwyMjcsMjM3LCA5OCwxMjgsICAzLCAxOSwyNDIsMjMzLAorICAgIDIzMSwyMzIsMjQ0LDIyNywyMzcsIDk4LDEyOCwgIDMsIDIxLDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LDI0NiwKKyAgICAxOTUsMTE0LCAgMiwgNzAsIDIzLCA3MCwgMzAsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDEyLDIzNywyMjksCisgICAgMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDkzLDIzMywyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LAorICAgIDI0NiwyMjUsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMTIsMjQyLDIyOSwKKyAgICAyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwgIDIsIDcwLCA3NSwgNzAsIDg2LDIyNSwyMjYsMjM5LDI0NiwyMjksCisgICAgMjI3LDIzNywgOTgsMTI4LCAgMywgMjAsMjM3LDIzOSwxMDAsMTI4LCAgMiwxODksMTE1LCAgMiwgNzAsIDk4LAorICAgICA3MCwxMDUsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDgwLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwKKyAgICAxMjgsMjQ2LDIyNiwyNDQsMjQ1LDI0MiwyMzgsMjI5LDEwMCwgIDIsIDcwLDEyNiwgNzAsMTM3LDIyNSwyMjYsCisgICAgMjM5LDI0NiwyMjksMjI3LDIzNywgOTgsMTI4LCAgMywgMTgsMjM3LDIzOSwxMDAsMTI4LCAgMiwxODcsMjQwLAorICAgIDIyNSwyNDMsMTE1LDEyOCwgMzgsIDYwLDExMCwgIDIsIDcwLDE1NiwgNzAsMTY1LDIzMSwyNDIsMjQ1LDIyOSwKKyAgICAyMzgsMTE2LDEyOCwgMzQsIDY5LDExNiwgIDIsIDcwLDE3MSwgNzAsMTg1LDIzOSwyNDUsMjQyLDIzMywyMzgsCisgICAgMjQ0LDIyOSwyMzEsMjQyLDIyNSwxMDgsMTI4LCAzNCwgNDYsMjQyLDIzOSwxMDgsMTQyLCAzNSwgIDMsIDcwLAorICAgIDIxOSwgNzAsMjI1LCA3MCwyNDAsIDcwLDI1NSwgNzEsIDQzLCA3MSwgODgsIDcxLDEwMiwgNzEsMTA3LCA3MSwKKyAgICAxMTIsIDcxLDExNywgNzEsMTIzLCA3MSwxMjgsIDcxLDE2OSwgNzEsMTc0LDE5MywxOTUsIDc1LDEyOCwgIDAsCisgICAgICA2LCA2NiwgIDIsIDcwLDIzMSwgNzAsMjM2LDE5NywgNzYsMTI4LCAgMCwgIDcsIDgzLDEyOCwgIDAsICA4LAorICAgICA2NywgIDIsIDcwLDI0NiwgNzAsMjUxLDE5MywgNzgsMTI4LCAgMCwgMjQsIDgyLDEyOCwgIDAsIDEzLCA2OCwKKyAgICAgIDMsIDcxLCAgNywgNzEsIDMzLCA3MSwgMzgsIDY3LCAgNCwgNzEsIDE3LCA3MSwgMjEsIDcxLCAyNSwgNzEsCisgICAgIDI5LCA0OSwxMjgsICAwLCAxNywgNTAsMTI4LCAgMCwgMTgsIDUxLDEyOCwgIDAsIDE5LCA1MiwxMjgsICAwLAorICAgICAyMCwxOTcsIDc2LDEyOCwgIDAsMTI3LDIwNCwgNjksMTI4LCAgMCwgMTYsIDY5LCAgNSwgNzEsIDU1LCA3MSwKKyAgICAgNTksIDcxLCA2NCwgNzEsIDY5LCA3MSwgNzQsIDc3LDEyOCwgIDAsIDI1LDIwNiwgODEsMTI4LCAgMCwgIDUsCisgICAgMjA3LCA4NCwxMjgsICAwLCAgNCwyMTEsIDY3LDEyOCwgIDAsIDI3LCA4NCwgIDIsIDcxLCA4MCwgNzEsIDg0LAorICAgICA2NiwxMjgsICAwLCAyMywgODgsMTI4LCAgMCwgIDMsIDcwLCAgMiwgNzEsIDk0LCA3MSwgOTgsIDcwLDEyOCwKKyAgICAgIDAsIDEyLCA4MywxMjgsICAwLCAyOCwxOTksIDgzLDEyOCwgIDAsIDI5LDIwMCwgODQsMTI4LCAgMCwgIDksCisgICAgMjA0LCA3MCwxMjgsICAwLCAxMCwyMDYsMTkzLCA3NSwxMjgsICAwLCAyMSwyMTAsIDgzLDEyOCwgIDAsIDMwLAorICAgICA4MywgIDUsIDcxLDE0MCwgNzEsMTQ0LCA3MSwxNTQsIDcxLDE1OSwgNzEsMTY0LCA3MywxMjgsICAwLCAxNSwKKyAgICAgNzksMTI5LCAgMCwgMTQsIDcxLDE1MCwgODQsMTI4LCAgMCwgIDIsMjEyLCA4OCwxMjgsICAwLCAgMSwyMTMsCisgICAgIDY2LDEyOCwgIDAsIDI2LDIxNywgNzgsMTI4LCAgMCwgMjIsMjEzLCA4MywxMjgsICAwLCAzMSwyMTQsIDg0LAorICAgIDEyOCwgIDAsIDExLDI0MCwyNDksMjQyLDIzMywyMzEsMjMyLDExNiwxMjksICAwLDE2OSwgNzEsMTkxLDExNSwKKyAgICAgIDIsIDcxLDE5NywgNzEsMjAzLDIyNSwyMzgsMTE1LDEyOCwyNDgsMjMzLDIyOSwyNDIsMjMzLDEwMiwxMjgsCisgICAgMjQ2LDIxNywxMTQsICAyLCA3MSwyMTYsIDcyLCA0NCwyMzgsMjI5LDI0MiwyMjYsMjQyLDIyNSwyMjcsMjM1LAorICAgIDIyOSwxMTYsICAyLCA3MSwyMzEsIDcyLCAgOSwyMzYsMjI5LDIzMCwxMTYsMTMwLCA0OCwgMTIsIDcxLDI0MiwKKyAgICAgNzEsMjU0LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsIDk4LDI0NiwyMjksCisgICAgMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LDI1NCwgNjUsMjQyLDIzMywyMzEsMjMyLDExNiwxMzAsIDQ4LAorICAgICAxMywgNzIsIDIxLCA3MiwgMzMsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwKKyAgICAgOTksMjQ2LDIyOSwyNDIsMjQ0LDIzMywyMjcsMjI1LDEwOCwxMjgsMjU0LCA2NiwyNDAsMjM5LDI0MiwyMjUsCisgICAgMjQ0LDIzMywyMzksMjM4LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTI3LDI0MywyNDEsMjQ1LAorICAgIDIyNSwyNDIsMTAxLDEyOCwgNTEsMTk5LDI0NiwyMjksMjQyLDIzNSwyMzEsMjQzLDI0MSwyNDUsMjI1LDI0MiwKKyAgICAxMDEsMTI4LCA1MSwxOTgsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDM2LDE1OCwyNDIsMjQ1LDI1MCwyMjksCisgICAgMjMzLDI0MiwxMTEsMTI4LCAzMiwxNjIsMjQzLDI0NCwyNDIsMjI5LDI0NCwyMjcsMjMyLDIyOSwxMDAsMTI4LAorICAgICAgMiwxNTEsMjQ1LDExNCwgIDIsIDcyLDEyMSwgNzIsMTM5LDIzNiwxMjEsICAyLCA3MiwxMjgsIDcyLDEzNCwKKyAgICAyMjUsMjM4LDEwMCwxMjgsIDM0LDIwNywyMzksMTE0LDEyOCwgMzQsMjA2LDI0MiwyMjksMjM4LDIyNywxMjEsCisgICAgMTI4LCAgMCwxNjQsMjQ5LDExNCwgIDQsIDcyLDE1OCwgNzIsMTY2LCA3MiwxNzMsIDcyLDE4MSwxOTQsMjQyLAorICAgIDIyOSwyNDYsMTAxLDEyOCwyNDYsMjA5LDE5OCwyMzYsMjI5LDEyMCwxMjgsMjQ2LDIxMCwyMjYsMjQyLDIyOSwKKyAgICAyNDYsMTAxLDEyOCwyNDYsMjEyLDIzMCwyMzYsMjI5LDEyMCwxMjgsMjQ2LDIxMywxMDAsMTQ2LCAgMCwxMDAsCisgICAgIDcyLDIyOCwgNzQsMTEwLCA3NSwxMzQsIDc1LDE5NCwgNzYsMTE0LCA3NywgNjgsIDc3LDEzMCwgNzgsIDU5LAorICAgICA3OCwgNzIsIDc4LCA4MSwgNzgsMTA3LCA3OCwxMzIsIDc4LDE0MSwgNzksMjA4LCA3OSwyMTYsIDc5LDIyNywKKyAgICAgNzksMjQ3LCA4MCwgMTksIDk3LCAxMSwgNzIsMjUyLCA3MywgIDcsIDczLCAxNywgNzMsIDg5LCA3MywxNTIsCisgICAgIDczLDE2MywgNzMsMTc0LCA3MywyNDMsIDc0LCA0OSwgNzQsIDU1LCA3NCwgODUsMjI1LDI0MiwyMzcsMjI5LAorICAgIDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDEwMCwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwKKyAgICAxNjYsMTAwLCAgNSwgNzMsIDI5LCA3MywgMzgsIDczLCA0NCwgNzMsIDU4LCA3MywgNzQsMjI1LDI0MiwyMjUsCisgICAgMjI2LDIzMywgOTksMTI4LCAgNiwgNTQsMjI5LDI0NiwgOTcsMTI4LCAgOSwgMzgsMjMwLDIzMywyMzgsMjI1LAorICAgIDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE5MCwyMzMsMjM4LDIzMywyNDQsMjMzLDIyNSwKKyAgICAyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxOTEsMjM3LDIyOSwyMjgsMjMzLDIyNSwyMzYsCisgICAgMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxOTIsMTAzLCAgMywgNzMsIDk3LCA3MywxMTQsIDczLAorICAgIDEyOCwyMjksMjQzLDEwNCwxMjksICA1LDE4OCwgNzMsMTA1LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwKKyAgICAgIDUsMTg4LDIzMSwyMjksMTE0LDEyOSwgMzIsIDMyLCA3MywxMjIsMjI4LDIyNiwxMDgsMTI4LCAzMiwgMzMsCisgICAgMTE3LCAgMiwgNzMsMTM0LCA3MywxNDMsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNjYsMjQyLAorICAgIDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMzgsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywKKyAgICAxMjgsIDQ4LCA5NiwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMTkyLDEwOCwgIDMsCisgICAgIDczLDE4MiwgNzMsMTkxLCA3MywyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgNDcsMjI5LAorICAgIDExNiwxMzAsICA1LDIxMSwgNzMsMjAwLCA3MywyMjAsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwKKyAgICAgNTEsIDczLDIxMSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA1MSwyMzIsMjI5LDIyNiwyNDIsCisgICAgMjI5LDExOSwxMjgsICA1LDIxMSwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LAorICAgIDEyOCwyNTQsMTcwLDIzNywyMzcsIDk3LCAgMywgNzMsMjUzLCA3NCwgIDYsIDc0LCAxOCwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsICA2LCA3OSwyMzYsMjM5LDI0NywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgICA2LCA3OSwyNDQsMjI1LDIzOCwgOTcsICAyLCA3NCwgMjcsIDc0LCA0MSwyMzYsMjQ0LDIzOSwyMzgsMjI5LAorICAgIDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDc2LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwKKyAgICAgNzYsMjM4LDIyOCwgOTcsMTI4LCAgOSwxMDAsMjQyLDIzMSwgOTcsICAyLCA3NCwgNjMsIDc0LCA3MiwyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE2NywyMzYsMjI5LDIzMCwyNDQsMjMyLDIyOSwyMjYsMjQyLAorICAgIDIyOSwxMTksMTI4LCAgNSwxNjcsMjQzLDIzMywyMjUsMjQwLDIzOCwyMjksMjQ1LDIzNywyMjUsMjQ0LDIyNSwKKyAgICAyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsMjI3LDIyNywyMzcsIDk4LDEyOCwgIDQsMTMzLCA5OCwgIDMsCisgICAgIDc0LDExOCwgNzUsMTE1LCA3NSwxMjUsMTA4LCAgOSwgNzQsMTM4LCA3NCwxNDYsIDc1LCAgMywgNzUsIDExLAorICAgICA3NSwgMjcsIDc1LCAzOCwgNzUsIDU2LCA3NSwgNzAsIDc1LCA4MSwxOTksMjQyLDIyNSwyNDYsMTAxLDEyOCwKKyAgICAyNDYsMjExLCA5NywgIDIsIDc0LDE1MiwgNzQsMjA5LDIzOCwyMzEsMjM2LDIyOSwyMjYsMjQyLDIyNSwyMjcsCisgICAgMjM1LDIyOSwxMTYsICAyLCA3NCwxNjgsIDc0LDE4OCwyMzYsMjI5LDIzMCwxMTYsMTI5LCA0OCwgMTAsIDc0LAorICAgIDE3NywyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsIDYxLDI0MiwyMzMsMjMxLDIzMiwKKyAgICAxMTYsMTI5LCA0OCwgMTEsIDc0LDE5OCwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsCisgICAgIDYyLDExNCwgIDIsIDc0LDIxNSwgNzQsMjM2LDIyNywyMzIsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDQsMjI5LAorICAgIDIyOCwyMjYsMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDQzLDI0MiwyMzksMTE5LCAgMiwKKyAgICAgNzQsMjQ0LCA3NCwyNTEsMjM2LDIyOSwyMzAsMTE2LDEyOCwgMzMsMjEyLDI0MiwyMzMsMjMxLDIzMiwxMTYsCisgICAgMTI4LCAzMywyMTAsMjI4LDIyNSwyMzgsMjI4LCA5NywxMjgsICA5LDEwMSwyMzEsMjQyLDIyNSwyNDYsMTAxLAorICAgIDEyOSwyNDYsMjE0LCA3NSwgMjEsMjI3LDIzNywgOTgsMTI4LCAgMywgMTUsMjMzLDIzOCwyNDQsMjI5LDIzMSwKKyAgICAyNDIsMjI1LDEwOCwxMjgsIDM0LCA0NCwyMzYsMjM5LDI0NywyMzYsMjMzLDIzOCwxMDEsMTI5LCAzMiwgMjMsCisgICAgIDc1LCA1MCwyMjcsMjM3LCA5OCwxMjgsICAzLCA1MSwyMzksMjQ2LDIyOSwyNDIsMjM2LDIzMywyMzgsMjI5LAorICAgIDIyNywyMzcsIDk4LDEyOCwgIDMsIDYzLDI0MCwyNDIsMjMzLDIzNywyMjksMjM3LDIzOSwxMDAsMTI4LCAgMiwKKyAgICAxODYsMjQ2LDIyOSwyNDIsMjQ0LDIzMywyMjcsMjI1LDEwOCwgIDIsIDc1LCA5NCwgNzUsMTAwLDIyNiwyMjUsCisgICAgMTE0LDEyOCwgMzIsIDIyLDIzNiwyMzMsMjM4LDIyOSwyMjUsMjI2LDIzOSwyNDYsMjI5LDIyNywyMzcsIDk4LAorICAgIDEyOCwgIDMsIDE0LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAgOSwyNDMsMjQxLDI0NSwKKyAgICAyMjUsMjQyLDEwMSwxMjgsIDUxLDIwMCwgOTksICA0LCA3NSwxNDQsIDc1LDE1MSwgNzUsMTYwLCA3NSwxODcsCisgICAgMjI1LDI0MiwyMzksMTEwLDEyOCwgIDEsIDE1LDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgMzAsIDE3LAorICAgIDIzMywyNDIsIDk5LCAgMiwgNzUsMTY4LCA3NSwxNzMsMjM2LDEwMSwxMjgsIDM2LDIxMSwyNDUsMjM3LDIzMCwKKyAgICAyMzYsMjI5LDI0OCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDE5LDI0MiwyMzksMjI1LDExNiwxMjgsCisgICAgICAxLCAxNywxMDAsICA0LCA3NSwyMDQsIDc2LCAyOSwgNzYsIDM5LCA3NiwgOTAsIDk3LCAgNCwgNzUsMjE0LAorICAgICA3NSwyMjQsIDc1LDIzMSwgNzYsICAwLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE2MSwKKyAgICAyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgMzMsMjMxLDExNywgIDIsIDc1LDIzOCwgNzUsMjQ3LDIzNCwyMjUsCisgICAgMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTYxLDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDMzLAorICAgIDEwOCwgIDIsIDc2LCAgNiwgNzYsIDE1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTM2LDIzMCwKKyAgICAyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxMzcsMjI4LDIzMiwyMjUsCisgICAgMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDkyLDIzMiwgOTcsICAzLCA3NiwgNDgsIDc2LCA1OCwgNzYsIDY1LAorICAgIDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE2MiwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwKKyAgICAgMzQsMjMxLDExNywgIDIsIDc2LCA3MiwgNzYsIDgxLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsCisgICAgMTYyLDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDM0LDIzOSwxMTYsICAyLCA3NiwgOTcsIDc2LAorICAgIDEwNiwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsIDMwLCAxMSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwKKyAgICAgMzAsIDEzLDEwMSwgIDgsIDc2LDEzMiwgNzYsMTg1LCA3NiwxOTIsIDc2LDIxNywgNzYsMjI3LCA3NiwyMzgsCisgICAgIDc3LCAyNywgNzcsIDYzLCA5OSwgIDIsIDc2LDEzOCwgNzYsMTc1LDIzMywyMzcsMjI1LDIzNiwyNDMsMjI5LAorICAgIDI0MCwyMjUsMjQyLDIyNSwyNDQsMjM5LDExNCwgIDIsIDc2LDE1NiwgNzYsMTY1LDIyNSwyNDIsMjI1LDIyNiwKKyAgICAyMzMsIDk5LDEyOCwgIDYsMTA3LDI0MCwyMjksMjQyLDI0MywyMzMsMjI1LDExMCwxMjgsICA2LDEwNywyNDksCisgICAgMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNTIsMjMxLDI0MiwyMjksMTAxLDEyOCwgIDAsMTc2LAorICAgIDIzMiwxMDUsICAyLCA3NiwxOTksIDc2LDIwOCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3MywKKyAgICAyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEwMywyMzMsMjI3LDIzOSwyNDAsMjQ0LDIzMywgOTksCisgICAgMTI4LCAgMywyMzksMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDE5OSwxMDgsICAyLAorICAgICA3NiwyNDQsIDc3LCAxMSwyMjksMjQ0LDEwMSwgIDIsIDc2LDI1MiwgNzcsICAzLDIzNiwyMjksMjMwLDExNiwKKyAgICAxMjgsIDM1LCA0MywyNDIsMjMzLDIzMSwyMzIsMTE2LDEyOCwgMzUsIDM4LDI0NCwgOTcsMTI5LCAgMywxODAsCisgICAgIDc3LCAxOCwyNDQsMjQ1LDI0MiwyMzgsMjI5LDEwMCwxMjgsICAxLDE0MSwyMzgsMjM5LDIzNywyMzMsMjM4LAorICAgIDIyNSwyNDQsMjM5LDI0MiwyMzcsMjMzLDIzOCwyNDUsMjQzLDIzOSwyMzgsMjI5LDIzOCwyNDUsMjM3LDIyOSwKKyAgICAyNDIsMjI1LDI0NCwyMzksMjQyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDI0OCwyNTAsCisgICAgMTA0LDEyOCwgIDIsMTY0LDEwNCwgIDIsIDc3LCA3NCwgNzcsMTI0LCA5NywgIDMsIDc3LCA4MiwgNzcsIDkyLAorICAgICA3NywgOTksMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTY3LDIyOCwyMjksMjQ2LCA5NywKKyAgICAxMjgsICA5LCAzOSwyMzEsMTE3LCAgMiwgNzcsMTA2LCA3NywxMTUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsCisgICAgMTI4LCAxMCwxNjcsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMzksMjM5LDIzOSwxMDcsMTI4LAorICAgICAgMiwgODcsMTA1LCAgNiwgNzcsMTQ0LCA3NywxOTMsIDc3LDI1MywgNzgsICA4LCA3OCwgMTksIDc4LCAyOSwKKyAgICAgOTcsICAyLCA3NywxNTAsIDc3LDE3MiwyMzYsMjQ5LDI0NCwyMzMsMjM1LDIyNSwyNDQsMjM5LDIzOCwyMzksCisgICAgMTE1LDEyOSwgIDMsMTMzLCA3NywxNjYsMjI3LDIzNywgOTgsMTI4LCAgMywgNjgsMjM3LDIzOSwyMzgsMTAwLAorICAgIDEyOSwgMzgsMTAyLCA3NywxODEsMjQzLDI0NSwyMzMsMjQ0LDI0NywyMzIsMjMzLDI0NCwxMDEsMTI4LCAzOCwKKyAgICAgOTgsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTMzLCAgMCwxNjgsIDc3LDIxMiwgNzcsMjIwLCA3NywyMzEsCisgICAgIDc3LDIzNywgNzcsMjQ1LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LDI0NiwyMTUsMjI2LDIyOSwyMzYsMjM5LAorICAgIDI0NywyMjcsMjM3LCA5OCwxMjgsICAzLCAzNiwyMjcsMjM3LCA5OCwxMjgsICAzLCAgOCwyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwyNDYsMjE2LDI0NCwyMzksMjM4LDIzOSwxMTUsMTI4LCAgMywxMzMsMjMyLDIzMywyNDIsCisgICAgMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LCA5OCwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LAorICAgIDEyOCwgNDgsMTk0LDI0NCwyNDQsMjM5LDIzNywyMjUsMjQyLDEwNywxMjgsIDQ4LCAgMywyNDYsMTA1LCAgMiwKKyAgICAgNzgsIDM2LCA3OCwgNDcsMjI4LDEwMSwxMjksICAwLDI0NywgNzgsIDQzLDExNSwxMjgsIDM0LCAzNSwyNDMsCisgICAgMjMzLDIzOSwyMzgsMjQzLDIzNiwyMjUsMjQzLDEwNCwxMjgsIDM0LCAyMSwyMzQsMjI5LDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgODIsMjM1LDI0MywyMzIsMjI1LDIyOCwxMDEsMTI4LCAzNywKKyAgICAxNDcsMTA4LCAgMiwgNzgsIDg3LCA3OCwgOTgsMjMzLDIzOCwyMjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsCisgICAgIDMwLCAxNSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE1MSwxMDksICAyLCA3OCwxMTMsIDc4LAorICAgIDEyMSwyMjUsMjI3LDI0MiwyMzksMTEwLDEyOCwgIDEsIDE3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywKKyAgICAxMDEsMTI4LDI1NSwgNjgsMjM4LDIyNiwyMzYsMjM5LDIyNywxMDcsMTI4LCAzNywxMzIsMTExLCAxMCwgNzgsCisgICAgMTYzLCA3OCwxNzUsIDc4LDE4NSwgNzgsMTk2LCA3OCwyMDcsIDc5LCAyMywgNzksIDI4LCA3OSwgMzksIDc5LAorICAgIDE1NCwgNzksMTgwLDIyNywyMzIsMjI1LDIyOCwyMjUsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDE0LDIyOCwKKyAgICAyMjksMjM1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAyMCwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsCisgICAgIDk3LDEyOCwgNDgsMTA1LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyMDEsMjM2LAorICAgIDIzNiwyMjUsMTE0LDEzMiwgIDAsIDM2LCA3OCwyMjIsIDc4LDIzMywgNzgsMjQ1LCA3OSwgIDAsMjMzLDIzOCwKKyAgICAyMzAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDIyNywyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsCisgICAgMjI3LDEwMSwxMjgsMjU1LCAgNCwyMzksMjM2LDIyOCwyNDMsMjQ0LDI0OSwyMzYsMTAxLDEyOCwyNDcsIDM2LAorICAgIDExNSwgIDIsIDc5LCAgNiwgNzksIDEzLDIzNywyMjUsMjM2LDEwOCwxMjgsMjU0LDEwNSwyNDUsMjQwLDIyOSwKKyAgICAyNDIsMjMzLDIzOSwxMTQsMTI4LDI0NiwyMjgsMjM4LDEwMywxMjgsIDMyLDE3MSwyNDIsMjQ1LDI0MywyNDEsCisgICAgMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDM4LDExNiwgIDYsIDc5LCA1MywgNzksIDcwLCA3OSwgOTIsIDc5LAorICAgIDEwMywgNzksMTM1LCA3OSwxNDIsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI5LCAgMiwyMTcsIDc5LCA2NCwKKyAgICAyMjcsMjM3LCA5OCwxMjgsICAzLCAgNywyMjYsMjI5LDIzNiwyMzksMjQ3LCA5OSwgIDIsIDc5LCA4MSwgNzksCisgICAgIDg2LDIzNywgOTgsMTI4LCAgMywgMzUsMjM5LDIzNywgOTgsMTI4LCAgMywgMzUsMjM1LDIyNSwyNDQsMjI1LAorICAgIDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI1MSwyMzYsMjI5LDI0MywxMTUsICAyLCA3OSwxMTIsIDc5LDExNiwKKyAgICAxMDUsMTI4LCAgMSwgNDksMTA2LDEyOSwyNDYsMTkwLCA3OSwxMjIsMjQzLDI0NCwyNDIsMjM5LDIzNSwyMjksCisgICAgMjMyLDIzOSwyMzksMTA3LDEyOCwgIDIsMTMyLDIzNywyMjUsMjQ0LDEwNCwxMjgsIDM0LDE5NywyNDQsMjI5LAorICAgIDIyOCwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM3LDIwNCwyNDUsMjI2LDIzNiwyMjksMjQ5LDIzOSwKKyAgICAyMjgsMjQwLDIyNSwyNDQsMjI1LDEwNCwxMjksMjUxLCAzMSwgNzksMTcxLDIzMiwyMjksMjI2LDI0MiwyMjksCisgICAgMTE5LDEyOCwyNTEsIDMxLDI0NywyMzgsMjQ0LDIyNSwyMjcsMTA3LCAgMiwgNzksMTkxLCA3OSwyMDIsMjI2LAorICAgIDIyOSwyMzYsMjM5LDI0NywyMjcsMjM3LCA5OCwxMjgsICAzLCAzMCwyMzcsMjM5LDEwMCwxMjgsICAyLDIxMywKKyAgICAyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTU5LDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsCisgICAgMTI4LDI0NiwyMzUsMTE2LCAgMiwgNzksMjMzLCA3OSwyMzksMjI1LDIzMywxMDgsMTI4LCAgMiwgODYsMjM5LAorICAgIDI0MCwyMjYsMjI1LDExNCwxMjgsICAxLDE0MCwxMTcsICAyLCA3OSwyNTMsIDgwLCAgOCwyMzIsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTAxLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsCisgICAgMTI4LCA0OCwxOTcsMTIyLDEzMiwgIDEsMjQzLCA4MCwgMzEsIDgwLCA0MCwgODAsIDU5LCA4MCwgOTYsMjI1LAorICAgIDIzNiwyNDQsMjM5LDIzOCwxMDEsMTI4LCAgMiwxNjMsIDk5LCAgMiwgODAsIDQ2LCA4MCwgNTMsMjI1LDI0MiwKKyAgICAyMzksMTEwLDEyOCwgIDEsMTk4LDI0NSwyNDIsMTA4LDEyOCwgIDIsMTY1LDEwMSwgIDIsIDgwLCA2NSwgODAsCisgICAgIDg1LDIyNSwyMjYsMjM1LDIzMiwyMjUsMjQzLDIzMywyMjUsMjM4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LAorICAgIDIzMywgOTksMTI4LCAgNCwyMjUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA4NSwKKyAgICAyMzIsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgOTUsMTAxLDE1MSwgIDAsCisgICAgMTAxLCA4MCwxNTksIDgwLDE3OCwgODAsMjEyLCA4MSwxODYsIDgxLDI0OCwgODIsIDI1LCA4MiwgMzcsIDgyLAorICAgICA2MCwgODIsMTEzLCA4MywyMjUsIDg0LCAyNywgODQsMTI5LCA4NCwyNDUsIDg1LDEyNCwgODUsMTk5LCA4NSwKKyAgICAyMzAsIDg2LCAzNiwgODYsIDg5LCA4NywgMjQsIDg3LDE1NywgODcsMTc3LCA4NywyMjEsIDg4LCA1NiwgOTcsCisgICAgICAyLCA4MCwxNjUsIDgwLDE3MiwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMCwyMzMsMjQyLDI0NCwxMDQsMTI4LAorICAgICAzOCwgNjUsIDk4LCAgMywgODAsMTg2LCA4MCwxOTUsIDgwLDIwNSwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwKKyAgICAxMjgsICA5LDE0MywyMzksMjQwLDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMjgsMjQyLDIyOSwyNDYsCisgICAgMTAxLDEyOCwgIDEsIDIxLCA5OSwgIDUsIDgwLDIyNCwgODEsIDQxLCA4MSwgNTUsIDgxLCA4NywgODEsMTc2LAorICAgICA5NywgIDIsIDgwLDIzMCwgODEsIDM1LDIzOCwyMjgsMjQyLCA5NywgIDMsIDgwLDI0MSwgODAsMjQ4LCA4MSwKKyAgICAgIDMsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDEzLDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsCisgICAgMTI4LCAxMCwxNDEsMjQ2LDIzOSwyNDcsMjI5LDIzNiwyNDMsMjMzLDIzMSwxMTAsICAyLCA4MSwgMTcsIDgxLAorICAgICAyNCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNjksMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwKKyAgICAxMjgsIDEwLDE5NywyNDIsMjM5LDExMCwxMjgsICAxLCAyNywyMjksMjI4LDIzMywyMzYsMjM2LDIyNSwyMjYsCisgICAgMjQyLDIyOSwyNDYsMTAxLDEyOCwgMzAsIDI5LDEwNCwgIDIsIDgxLCA2MSwgODEsIDcyLDIyNSwyNDIsMjM3LAorICAgIDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMDEsMjQ5LDIzMywyNDcsMjM4LDIyNSwyNDIsMjM3LDIyOSwKKyAgICAyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMzUsMjMzLDI0MiwgOTksICAyLCA4MSwgOTUsIDgxLDEwMCwyMzYsCisgICAgMTAxLDEyOCwgMzYsMjEyLDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEzNCwgIDAsMjM0LCA4MSwxMjEsIDgxLAorICAgIDEyOSwgODEsMTM3LCA4MSwxNDgsIDgxLDE1NiwgODEsMTY4LDIyNSwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAzMCwKKyAgICAxOTEsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLCAyNSwyMjgsMjM5LDI0NCwyMjYsMjI5LDIzNiwyMzksCisgICAgMTE5LDEyOCwgMzAsMTk5LDIzMSwyNDIsMjI1LDI0NiwxMDEsMTI4LCAzMCwxOTMsMjMyLDIzOSwyMzksMjM1LAorICAgIDIyNSwyMjYsMjM5LDI0NiwxMDEsMTI4LCAzMCwxOTUsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjgsIDMwLDE5NywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgODQsMTAwLCAgNCwgODEsMTk2LCA4MSwyMDYsCisgICAgIDgxLDIxMiwgODEsMjIyLDIyNiwyMzYsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAyLCAgNSwyMjksMjQ2LAorICAgICA5NywxMjgsICA5LCAxNSwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTI4LCAgMCwyMzUsMjM5LDExNiwKKyAgICAxMzAsICAxLCAyMywgODEsMjMxLCA4MSwyNDAsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAgMSwgMjMsCisgICAgMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDE4NSwxMDEsICAyLCA4MSwyNTQsIDgyLCAgOSwyMzEsMjQ1LAorICAgIDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDE1LDIzNywyMjUsMjQ0LDI0MiwyMjUsMjMxLDI0NSwKKyAgICAyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA3MSwyMzAsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LCA2OCwxMDMsICAyLCA4MiwgNDMsIDgyLCA1MCwyNDIsMjI1LDI0NiwxMDEsMTI4LAorICAgICAgMCwyMzIsMjQ1LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTQzLDEwNCwgIDQsIDgyLCA3MCwKKyAgICAgODIsIDgxLCA4MiwgOTIsIDgyLDEwMiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsCisgICAgMTAzLDIyNiwyMzksMjQwLDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMjksMjMzLDI0MiwyMjUsMjMxLAorICAgIDIyNSwyMzgsIDk3LDEyOCwgNDgsIDcyLDIzOSwyMzksMjM1LDIyNSwyMjYsMjM5LDI0NiwxMDEsMTI4LCAzMCwKKyAgICAxODcsMTA1LCAgNCwgODIsMTIzLCA4MiwxMzQsIDgzLDE5MiwgODMsMjA3LDIyNiwyMzksMjQwLDIzOSwyMzcsCisgICAgMjM5LDIzMCwxMTEsMTI4LCA0OSwgMzEsMjMxLDIzMiwxMTYsMTQyLCAgMCwgNTYsIDgyLDE2OCwgODIsMTc3LAorICAgICA4MiwxODcsIDgyLDIxNywgODIsMjI0LCA4MywgIDYsIDgzLCAzMSwgODMsIDc2LCA4MywxMTAsIDgzLDEyMiwKKyAgICAgODMsMTMzLCA4MywxNjYsIDgzLDE3NCwgODMsMTg1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsCisgICAgMTA0LDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIzOCwyMjcsMjMzLDI0MiwyMjcsMjM2LAorICAgIDEwMSwxMjksIDM2LDEwMywgODIsMTk4LDIzMywyMzgsMjQ2LDIyOSwyNDIsMjQzLDIyOSwyNDMsMjI1LDIzOCwKKyAgICAyNDMsMjQzLDIyOSwyNDIsMjMzLDEwMiwxMjgsIDM5LDE0NSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwxMTAsCisgICAgMjI5LDIyOSwxMTAsICAyLCA4MiwyMzIsIDgyLDI0MSwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM2LAorICAgIDExMywxMTIsICAyLCA4MiwyNDcsIDgyLDI1NCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxMzMsMjI5LDI0MiwKKyAgICAyMzMsMjM5LDEwMCwxMjgsIDM2LDE1MywyMzEsMTE3LCAgMiwgODMsIDEzLCA4MywgMjIsMjM0LDIyNSwyNDIsCisgICAgMjI1LDI0NCwxMDUsMTI4LCAxMCwyMzgsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwxMTAsMTA0LAorICAgICAgMiwgODMsIDM3LCA4MywgNjMsIDk3LCAgMiwgODMsIDQzLCA4MywgNTQsMjI3LDIzNSwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsICA2LDEwNCwyMzgsMjMxLDI1MCwyMzIsMjM5LDExNywxMjgsIDQ4LCA0MCwyMzgsCisgICAgMjM5LDI0NCwyMjksMjI2LDIyOSwyMjUsMjM3LDIyOSwxMDAsMTI4LCAzOCwxMDcsMTA1LCAgMiwgODMsIDgyLAorICAgICA4MywxMDAsMjI4LDIyOSwyMzksMjMxLDI0MiwyMjUsMjQwLDIzMiwyMzMsMjI3LDI0MCwyMjUsMjQyLDIyOSwKKyAgICAxMTAsMTI4LCA1MCwgMzksMjM4LDIzMCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsMTM2LDIzNywyMzksCisgICAgMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDI0LDIzOSwyMzYsMjI4LDI0MywyNDQsMjQ5LAorICAgIDIzNiwxMDEsMTI4LDI0NywgNTYsMTEyLCAgMiwgODMsMTM5LCA4MywxNDYsMjI1LDI0MiwyMjksMTEwLDEyOCwKKyAgICAgMzYsMTIzLDIyOSwxMTQsICAyLCA4MywxNTMsIDgzLDE1OSwyMzMsMjM5LDEwMCwxMjgsIDM2LDE0MywyNDMsCisgICAgMjMzLDIyNSwxMTAsMTI4LCAgNiwyNDgsMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDExOSwyNDMsMjQ1LAorICAgIDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsMTIwLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA4OCwKKyAgICAyMzgsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwyMjgsMjI2LDI0MiwyMjksMjQ2LDEwMSwxMjgsICAyLCAgNywyMzksCisgICAgMjQ0LDIzMywyMzAsMjMzLDIyOSwyMjgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgIDEwMSwxMDcsICAyLCA4MywyMzEsIDgzLDI1NSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwKKyAgICAxNjgsIDgzLDI0MywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDExNiwxMTEsCisgICAgICAyLCA4NCwgIDUsIDg0LCAyMCwyMzgsMjM1LDIyNSwyNDIsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLAorICAgIDEwNSwxMjgsIDEwLDExNiwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgODQsMTA4LCAgMywgODQsIDM1LCA4NCwKKyAgICAgNDYsIDg0LDEwNywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDU5LDEwMSwgIDIsCisgICAgIDg0LCA1MiwgODQsIDU5LDIzNywyMjksMjM4LDExNiwxMjgsIDM0LCAgOCwyNDYsMjI5LDExMCwgIDMsIDg0LAorICAgICA2OSwgODQsIDc4LCA4NCwgOTksMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNiwxMDYsMTEyLCAgMiwKKyAgICAgODQsIDg0LCA4NCwgOTEsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTI2LDIyOSwyNDIsMjMzLDIzOSwxMDAsCisgICAgMTI4LCAzNiwxNDYsMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDEyMiwyMzYsMjMzLDI0MCwyNDMsMjMzLAorICAgIDExNSwxMjksIDMyLCAzOCwgODQsMTE4LDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LCAzNCwKKyAgICAyMzgsMTA5LCAgNSwgODQsMTQxLCA4NCwxNjksIDg0LDE4MCwgODQsMjAwLCA4NCwyMTEsMjI1LDIyNywyNDIsCisgICAgMjM5LDExMCwxMzAsICAxLCAxOSwgODQsMTUzLCA4NCwxNjEsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLAorICAgICAyMywyMzEsMjQyLDIyNSwyNDYsMTAxLDEyOCwgMzAsIDIxLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywKKyAgICAgOTksMTI4LCAgNCwgNjAsMjI4LDIyNSwyNDMsMTA0LDEyOSwgMzIsIDIwLCA4NCwxODksMjQ2LDIyOSwyNDIsCisgICAgMjQ0LDIzMywyMjcsMjI1LDEwOCwxMjgsMjU0LCA0OSwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLAorICAgIDEyOCwyNTUsIDY5LDExMiwgIDIsIDg0LDIxNywgODQsMjM3LDIzMiwyMjUsMjQzLDIzMywyNDMsMjM3LDIyNSwKKyAgICAyNDIsMjM1LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgOTEsMjQ0LDI0OSwyNDMsCisgICAgMjI5LDExNiwxMjgsIDM0LCAgNSwxMTAsICA2LCA4NSwgIDMsIDg1LCAxNCwgODUsIDI1LCA4NSwgNjksIDg1LAorICAgIDEwMSwgODUsMTE2LDIyNiwyMzksMjQwLDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMzUsMjI3LDI0OSwKKyAgICAyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA2MSwxMDAsICAyLCA4NSwgMzEsIDg1LCA1MCwyMjUsCisgICAgMjQzLDEwNCwxMjksIDMyLCAxOSwgODUsIDM5LDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LAorICAgIDI1NCwgNTAsMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LDI0MiwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwKKyAgICAyMzMsIDk5LDEyOCwgIDQsMTYzLDEwMywxMzAsICAxLCA3NSwgODUsIDc3LCA4NSwgODgsMjI2LDIzOSwyNDAsCisgICAgMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAzNywyMzIsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LAorICAgIDIzMywgOTksMTI4LCAgNCwxNjUsMjMyLDIzOSwyMzksMjM1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywKKyAgICAgOTksMTI4LCAgNCwyMDAsMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsIDMyLCAgMiwxMTEsICAzLCA4NSwxMzIsCisgICAgIDg1LDE0MCwgODUsMTQ5LDIzMSwyMzksMjM4LDIyOSwxMDcsMTI4LCAgMSwgMjUsMjM1LDIzOSwyNDIsMjI5LAorICAgIDIyNSwxMTAsMTI4LCA0OSwgODMsMjQwLDIyOSwxMTAsMTMwLCAgMiwgOTEsIDg1LDE1OSwgODUsMTY4LDIyNywKKyAgICAyMzYsMjM5LDI0MywyMjksMTAwLDEyOCwgIDIsMTU0LDI0MiwyMjksMjQ2LDIyOSwyNDIsMjQzLDIyOSwxMDAsCisgICAgMTMwLCAgMiwgOTIsIDg1LDE4MywgODUsMTkyLDIyNywyMzYsMjM5LDI0MywyMjksMTAwLDEyOCwgIDIsIDk0LAorICAgIDIzMiwyMzksMjM5LDEwNywxMjgsICAyLCA5MywxMTIsICAyLCA4NSwyMDUsIDg1LDIxMiwyMjUsMjQyLDIyOSwKKyAgICAxMTAsMTI4LCAzNiwxNjAsMjQzLDIzMywyMzYsMjM5LDExMCwxMjksICAzLDE4MSwgODUsMjIyLDI0NCwyMzksCisgICAgMjM4LDIzOSwxMTUsMTI4LCAgMywxNzMsMjQxLDExNywgIDIsIDg1LDIzNywgODYsIDI1LDIyNSwxMDgsMTMwLAorICAgICAgMCwgNjEsIDg1LDI0NiwgODYsICAyLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsIDI5LDExNSwgIDIsIDg2LCAgOCwgODYsIDE1LDIzNywyMjUsMjM2LDEwOCwxMjgsMjU0LDEwMiwyNDUsCisgICAgMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwxMjQsMjMzLDI0NiwyMjUsMjM2LDIyOSwyMzgsMjI3LAorICAgIDEwMSwxMjgsIDM0LCA5NywxMTQsICAzLCA4NiwgNDQsIDg2LCA1NSwgODYsIDY2LDIyNiwyMzksMjQwLDIzOSwKKyAgICAyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LCA2NCwyMjksMjQ2LDIyOSwyNDIsMjQzLDIyOSwxMDAsMTI5LCAgMiwgODgsIDg2LCA3OCwyMjcsMjQ5LAorICAgIDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDc3LDExNSwgIDYsIDg2LDEwMywgODYsMTE0LCA4NiwKKyAgICAxMzQsIDg2LDIxNSwgODcsICA0LCA4NywgMTQsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LCA2NSwyMjgsMjI5LDI0MywyMjcsMjI5LDIzOCwyMjgsMjI5LDI0MiwyMjcsMjQ5LDI0MiwyMzMsMjM2LAorICAgIDIzNiwyMzMsIDk5LDEyOCwgIDQsMTcxLDEwNCwxMzIsICAyLDEzMSwgODYsMTQ2LCA4NiwxNTMsIDg2LDE4NCwKKyAgICAgODYsMTk5LDIyNywyNDUsMjQyLDEwOCwxMjgsICAyLDEzNCwyMzksMjQyLDExNiwgIDIsIDg2LDE2MSwgODYsCisgICAgMTY4LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAxNCwyNDYsMjM5LDI0NywyMjksMjM2LDI0MywyMzMsMjMxLAorICAgIDIzOCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNzAsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDIyOCwKKyAgICAyMzYsMjM5LDIzOSwxMTIsMTI4LCAgMSwxNzAsMjQzLDI0MSwyNDUsMjI1LDI0NCwyNDIsMjI5LDI0NiwyMjksCisgICAgMjQyLDI0MywyMjksMTAwLDEyOCwgIDIsMTMzLDIzNywyMjUsMjM2LDEwOCwgIDIsIDg2LDIyNCwgODYsMjM1LAorICAgIDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgNzEsMjM1LDIyNSwyNDQsMjI1LDIzNSwKKyAgICAyMjUsMjM4LCA5NywxMjksIDQ4LDE2NywgODYsMjQ4LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsCisgICAgMTA0LDEyOCwyNTUsMTA2LDI0NCwyMzMsMjM3LDIyNSwyNDQsMjI5LDEwMCwxMjgsIDMzLCA0NiwyNDUsMjQwLAorICAgIDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LDI0NiwyMzYsMTE2LCAgNSwgODcsIDM2LCA4NywgNjIsIDg3LCA2NiwKKyAgICAgODcsIDgzLCA4NywxNDksIDk3LDEzMCwgIDMsMTgzLCA4NywgNDQsIDg3LCA1NCwyNDIsMjM3LDIyOSwyMzgsCisgICAgMjMzLDIyNSwxMTAsMTI4LCAgNSwxMDQsMjQ0LDIzOSwyMzgsMjM5LDExNSwxMjgsICAzLDE3NCwxMDQsMTI4LAorICAgICAgMCwyNDAsMjMzLDIzNiwyMjgsMTAxLDEyOSwgMzAsMTg5LCA4NywgNzUsMjI2LDIyOSwyMzYsMjM5LDExOSwKKyAgICAxMjgsIDMwLCAyNywyMzgsMjI1LDIzMiwyNDQsIDk3LCAgMywgODcsIDk1LCA4NywxMjcsIDg3LDEzNiwyMzAsCisgICAgMjM5LDI0NSwyMzUsMTA0LCAgMiwgODcsMTA1LCA4NywxMTQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwxNDUsMjM2LDIyOSwyMzAsMjQ0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTQ1LDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTQ1LDIzNiwyMjksMjMwLDI0NCwyMzIsMjI5LDIyNiwyNDIsCisgICAgMjI5LDExOSwxMjgsICA1LDE0NSwyNDUsMjQyLDIzOCwyMjksMTAwLDEyOCwgIDEsMjIxLDExNywgIDIsIDg3LAorICAgIDE2MywgODcsMTcyLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDk3LDI0MiwxMTEsMTI4LCAzMiwKKyAgICAxNzIsMjQ2LDIzOSwyNDcsMjI5LDIzNiwyNDMsMjMzLDIzMSwxMTAsICAzLCA4NywxOTMsIDg3LDIwMywgODcsCisgICAgMjEwLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE5OSwyMjgsMjI5LDI0NiwgOTcsMTI4LAorICAgICAgOSwgNzEsMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE5OSwxMjAsICAyLCA4NywKKyAgICAyMjcsIDg4LCA0NCwyMjcsMjM2LDIyNSwxMDksMTMyLCAgMCwgMzMsIDg3LDI0MiwgODcsMjUzLCA4OCwgMjQsCisgICAgIDg4LCAzNiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDkyLDEwMCwgIDIsIDg4LAorICAgICAgMywgODgsICA4LDIyNiwxMDgsMTI4LCAzMiwgNjAsMjM5LDI0NywxMTAsMTI5LCAgMCwxNjEsIDg4LCAxNiwKKyAgICAyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsMTYxLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsCisgICAgMTAxLDEyOCwyNTUsICAxLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywgMzMsMjMzLDI0MywyNDQsMjI5LAorICAgIDIzOCwyNDQsMjMzLDIyNSwxMDgsMTI4LCAzNCwgIDMsMjUwLDEwNCwxMzEsICAyLDE0NiwgODgsIDY3LCA4OCwKKyAgICAgODYsIDg4LCA5NywgOTksICAyLCA4OCwgNzMsIDg4LCA4MCwyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMzksCisgICAgMjQ1LDI0MiwxMDgsMTI4LCAgMiwxNDcsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwxMjgsICAxLAorICAgIDE4NSwyNDQsMjI1LDIzMywxMDgsMTI4LCAgMSwxODYsMTAyLDE0MCwgIDAsMTAyLCA4OCwxMzIsIDg4LDIxNCwKKyAgICAgODgsMjI1LCA4OCwyMzQsIDg4LDI0NiwgODksIDkzLCA4OSwxMDksIDkxLDExNywgOTEsMTMwLCA5MSwxNTYsCisgICAgIDkzLCAzMywgOTMsIDQxLCA5NywgIDQsIDg4LDE0MiwgODgsMTQ5LCA4OCwxNjAsIDg4LDE3MSwyMjgsMjI5LAorICAgIDI0NiwgOTcsMTI4LCAgOSwgOTQsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA5NCwKKyAgICAyMzIsMjQyLDIyOSwyMzgsMjMyLDIyOSwyMzMsMTE2LDEyOCwgMzMsICA5LDI0NCwyMzIsIDk3LCAgMywgODgsCisgICAgMTgxLCA4OCwxOTAsIDg4LDIwMiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA3OCwyMzYsMjM5LAorICAgIDI0NywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA3OCwyNDQsMjI1LDIzOCwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsICA2LCA3NSwyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksCisgICAgICA4LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMjEzLDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LAorICAgIDIyOSwyMzgsMTE2LDEyOCwgMzAsIDMxLDEwMSwgIDMsIDg4LDI1NCwgODksIDc2LCA4OSwgODYsMTA0LCAgNCwKKyAgICAgODksICA4LCA4OSwgMzEsIDg5LCA0NSwgODksIDYxLDIyNSwxMTQsICAyLCA4OSwgMTUsIDg5LCAyMiwyMjUsCisgICAgMjI2LDIzMywgOTksMTI4LCAgNiwgNjUsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMzQsMjMwLAorICAgIDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIxMCwyMzMsMjM4LDIzMywKKyAgICAyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMTEsMjM3LDIyOSwyMjgsCisgICAgMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMTIsMjMzLDIyNywyMzksMjQwLAorICAgIDI0NCwyMzMsIDk5LDEyOCwgIDMsMjI5LDIzNywyMjUsMjM2LDEwMSwxMjgsIDM4LCA2NCwxMDIsMTMwLDI1MSwKKyAgICAgIDAsIDg5LDEwMSwgODksMTA1LDEwNSwxMjgsMjUxLCAgMywxMDgsMTI4LDI1MSwgIDQsMTA1LDEzNiwyNTEsCisgICAgICAxLCA4OSwxMjksIDg5LDE2OSwgODksMTgwLCA4OSwyMDIsIDkwLCA2OCwgOTAsIDg1LCA5MCwgOTMsIDkwLAorICAgIDEwNiwyMzAsMjQ0LDIyOSwyMjksMTEwLCAgMiwgODksMTM5LCA4OSwxNDgsMjI3LDIzMywyNDIsMjI3LDIzNiwKKyAgICAxMDEsMTI4LCAzNiwxMTAsMTEyLCAgMiwgODksMTU0LCA4OSwxNjEsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsCisgICAgMTMwLDIyOSwyNDIsMjMzLDIzOSwxMDAsMTI4LCAzNiwxNTAsMjMxLDI0NSwyNDIsMjI5LDIyOCwyMjUsMjQzLAorICAgIDEwNCwxMjgsIDMyLCAxOCwyMzYsMjM2LDIyOSwxMDAsICAyLCA4OSwxODksIDg5LDE5NSwyMjYsMjM5LDEyMCwKKyAgICAxMjgsIDM3LDE2MCwyNDIsMjI5LDIyNywxMTYsMTI4LCAzNywxNzIsMjM4LDIyNSwxMDgsICA1LCA4OSwyMTYsCisgICAgIDg5LDI1NSwgOTAsIDE2LCA5MCwgMzMsIDkwLCA0OSwyMzUsMjI1LDEwMiwxMzAsICA1LDIxOCwgODksMjI2LAorICAgICA4OSwyNDYsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNTgsIDg5LDIzNywyMzIsMjI5LDIyNiwKKyAgICAyNDIsMjI5LDExOSwxMjgsMjUxLCA1OCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIxOCwyMzcsCisgICAgMjI5LDEwOSwxMjksICA1LDIyMSwgOTAsICA3LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjIxLAorICAgIDIzOCwyNDUsMTEwLDEyOSwgIDUsMjIzLCA5MCwgMjQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwKKyAgICAyMjMsMjQwLDEwMSwxMjksICA1LDIyNywgOTAsIDQwLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsCisgICAgMjI3LDI0NCwyNDMsMjI1LDIyOCwxMDUsMTI5LCAgNSwyMjksIDkwLCA1OSwyMzIsMjI5LDIyNiwyNDIsMjI5LAorICAgIDExOSwxMjgsICA1LDIyOSwyNDIsMjQzLDI0NCwyNDQsMjM5LDIzOCwyMjksMjI3LDIzMiwyMzMsMjM4LDIyOSwKKyAgICAyNDMsMTAxLDEyOCwgIDIsMjAxLDI0MywyMzIsMjI5LDI0OSwxMDEsMTI4LCAzNywyMDEsMjQ0LDIyNSwyMjcsCisgICAgMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTE1LDI0NiwxMDEsMTQyLCAgMCwgNTMsIDkwLAorICAgIDEzOSwgOTAsMTQ4LCA5MCwxNTgsIDkwLDE4OCwgOTAsMTk1LCA5MCwyMDUsIDkwLDIzMCwgOTEsICAxLCA5MSwKKyAgICAgMzUsIDkxLCA0NywgOTEsIDU4LCA5MSwgOTEsIDkxLCA5OSwgOTEsMTEwLDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwgIDYsMTAxLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIzNSwyMjcsMjMzLAorICAgIDI0MiwyMjcsMjM2LDEwMSwxMjksIDM2LDEwMCwgOTAsMTY5LDIzMywyMzgsMjQ2LDIyOSwyNDIsMjQzLDIyOSwKKyAgICAyNDMsMjI1LDIzOCwyNDMsMjQzLDIyOSwyNDIsMjMzLDEwMiwxMjgsIDM5LDE0MiwyMjgsMjI5LDI0NiwgOTcsCisgICAgMTI4LCAgOSwxMDcsMjI5LDIzMywyMzEsMjMyLDI0NCwyMzIsMTE1LDEyOCwgMzMsIDkzLDIzMSwxMTcsICAyLAorICAgICA5MCwyMTIsIDkwLDIyMSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDIzNSwyNDIsMjM3LDI0NSwKKyAgICAyMzUsMjMyLDEwNSwxMjgsIDEwLDEwNywyMzIsIDk3LCAgMiwgOTAsMjM3LCA5MCwyNDgsMjI3LDIzNSwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LDEwMSwyMzgsMjMxLDI1MCwyMzIsMjM5LDExNywxMjgsIDQ4LAorICAgICAzNywxMDUsICAyLCA5MSwgIDcsIDkxLCAyNSwyMjgsMjI5LDIzOSwyMzEsMjQyLDIyNSwyNDAsMjMyLDIzMywKKyAgICAyMjcsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCAzNiwyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsCisgICAgMTI4LCAzMiwxMzMsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMjEsMjM5LAorICAgIDIzNiwyMjgsMjQzLDI0NCwyNDksMjM2LDEwMSwxMjgsMjQ3LCA1MywxMTIsICAyLCA5MSwgNjQsIDkxLCA3MSwKKyAgICAyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxMjAsMjI5LDExNCwgIDIsIDkxLCA3OCwgOTEsIDg0LDIzMywyMzksCisgICAgMTAwLDEyOCwgMzYsMTQwLDI0MywyMzMsMjI1LDExMCwxMjgsICA2LDI0NSwyNDIsMjM5LDIzNywyMjUsMTEwLAorICAgIDEyOCwgMzMsMTE2LDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwxMTcsMjQ0LDIzMiwKKyAgICAyMjUsMTA1LDEyOCwgMTQsIDg1LDEwOCwxMjksMjUxLCAgMiwgOTEsMTIzLDIzOSwyNDIsMjMzLDExMCwxMjgsCisgICAgICAxLDE0NiwxMDksICAyLCA5MSwxMzYsIDkxLDE0NywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLAorICAgIDEyOCwyNTUsIDcwLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTUzLDExMSwgIDQsIDkxLDE2NiwKKyAgICAgOTEsMTg4LCA5MSwyMDAsIDkxLDIwNywyMzAsIDk3LCAgMiwgOTEsMTczLCA5MSwxODEsMjM4LDI0NCwyMzIsCisgICAgMjI1LDEwNSwxMjgsIDE0LCAzMSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgMjksMjM4LDIzMSwyMzcsMjI1LAorICAgIDIzOCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNzksMjQyLDIyNSwyMzYsMTA4LDEyOCwgMzQsICAwLDI0NSwKKyAgICAxMTQsMTQyLCAgMCwgNTIsIDkxLDI0MCwgOTEsMjQ5LCA5MiwgIDMsIDkyLCAzMywgOTIsIDQwLCA5MiwgNjUsCisgICAgIDkyLCA5MiwgOTIsMTI2LCA5MiwxMzgsIDkyLDE1NywgOTIsMTY4LCA5MiwyMDEsIDkyLDIwOSwgOTIsMjIwLAorICAgIDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTAwLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwKKyAgICAxMjgsICA5LDIzNCwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjksIDM2LCA5OSwgOTIsIDE0LDIzMywyMzgsCisgICAgMjQ2LDIyOSwyNDIsMjQzLDIyOSwyNDMsMjI1LDIzOCwyNDMsMjQzLDIyOSwyNDIsMjMzLDEwMiwxMjgsIDM5LAorICAgIDE0MSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwxMDYsMjMxLDExNywgIDIsIDkyLCA0NywgOTIsIDU2LDIzNCwKKyAgICAyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMjM0LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsCisgICAgMTA2LDIzMiwgOTcsICAyLCA5MiwgNzIsIDkyLCA4MywyMjcsMjM1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LAorICAgIDEyOCwgIDYsMTAwLDIzOCwyMzEsMjUwLDIzMiwyMzksMTE3LDEyOCwgNDgsIDM2LDEwNSwgIDIsIDkyLCA5OCwKKyAgICAgOTIsMTE2LDIyOCwyMjksMjM5LDIzMSwyNDIsMjI1LDI0MCwyMzIsMjMzLDIyNywyNDAsMjI1LDI0MiwyMjksCisgICAgMTEwLDEyOCwgNTAsIDM1LDIzOCwyMzAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsIDMyLDEzMiwyMzcsMjM5LAorICAgIDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAyMCwyMzgsMjQ1LDIzNywyMjksMjQyLDIyNSwKKyAgICAyNDQsMjM5LDI0MiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyNDcsMjM5LDIzNiwyMjgsCisgICAgMjQzLDI0NCwyNDksMjM2LDEwMSwxMjgsMjQ3LCA1MiwxMTIsICAyLCA5MiwxNzQsIDkyLDE4MSwyMjUsMjQyLAorICAgIDIyOSwxMTAsMTI4LCAzNiwxMTksMjI5LDExNCwgIDIsIDkyLDE4OCwgOTIsMTk0LDIzMywyMzksMTAwLDEyOCwKKyAgICAgMzYsMTM5LDI0MywyMzMsMjI1LDExMCwxMjgsICA2LDI0NCwyNDIsMjM5LDIzNywyMjUsMTEwLDEyOCwgMzMsCisgICAgMTE1LDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwxMTYsMTE2LCAgMiwgOTIsMjI2LAorICAgICA5MywgIDgsMjI5LDIyOSwxMTAsICAyLCA5MiwyMzQsIDkyLDI0MywyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwKKyAgICAxMjgsIDM2LDEwOSwxMTIsICAyLCA5MiwyNDksIDkzLCAgMCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxMjksCisgICAgMjI5LDI0MiwyMzMsMjM5LDEwMCwxMjgsIDM2LDE0OSwxMDQsICAyLCA5MywgMTQsIDkzLCAxOSwyMjUsMTA1LAorICAgIDEyOCwgMTQsIDg0LDI0NCwyMzksMjM4LDIyOSwyMjcsMjMyLDIzMywyMzgsMjI5LDI0MywxMDEsMTI4LCAgMiwKKyAgICAyMDMsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDM2LDE2MSwyNDIsIDk3LCAgMiwgOTMsIDQ4LCA5MywgNTYsCisgICAgMjI3LDI0NCwyMzMsMjM5LDExMCwxMjgsIDMyLCA2OCwyMzgsIDk5LDEyOCwgMzIsMTYzLDEwMywxNDQsICAwLAorICAgIDEwMywgOTMsIDk3LCA5NCwgNDMsIDk0LCA2NiwgOTQsMTI3LCA5NCwxNDQsIDk1LCA2NSwgOTYsIDU4LCA5NiwKKyAgICAxNDMsIDk2LDE1NiwgOTcsIDE0LCA5NywgMzksIDk3LCA2NywgOTcsIDg5LCA5OCwgMzQsIDk4LCA1NiwgOTgsCisgICAgMTU4LCA5NywgIDksIDkzLDExNywgOTMsMTI3LCA5MywxMzQsIDkzLDE0MSwgOTMsMjA1LCA5MywyMzAsIDkzLAorICAgIDI0MSwgOTMsMjUyLCA5NCwgMzAsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTUxLDIyNywKKyAgICAyNDUsMjQ0LDEwMSwxMjgsICAxLDI0NSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgMjMsMTAyLCAgNCwgOTMsCisgICAgMTUxLCA5MywxNjAsIDkzLDE3NCwgOTMsMTkwLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTc1LAorICAgIDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxNDcsMjMzLDIzOCwKKyAgICAyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTEsMTQ4LDIzNywyMjksCisgICAgMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTEsMTQ5LDIzMSwxMTcsICAyLAorICAgICA5MywyMTIsIDkzLDIyMSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE1MSwyNDIsMjM3LDI0NSwKKyAgICAyMzUsMjMyLDEwNSwxMjgsIDEwLCAyMywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsCisgICAgIDc2LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxNzIsMjM3LDIzNywgOTcsMTMwLAorICAgICAgMywxNzksIDk0LCAgNiwgOTQsIDE5LDIzNiwyMjUsMjQ0LDIzMywyMzgsMjQzLDIzNywyMjUsMjM2LDEwOCwKKyAgICAxMjgsICAyLCA5OSwyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgIDIsMjI0LDIzOCwyMzEsCisgICAgMjMzLDIyNSwyMjcsMjM5LDI0MCwyNDQsMjMzLCA5OSwxMjgsICAzLDIzNSwgOTgsICAyLCA5NCwgNDksIDk0LAorICAgICA1OSwyMzksMjQwLDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMTMsMjQyLDIyOSwyNDYsMTAxLDEyOCwKKyAgICAgIDEsIDMxLCA5OSwgIDQsIDk0LCA3NiwgOTQsIDgzLCA5NCwgOTIsIDk0LDExNCwyMjUsMjQyLDIzOSwxMTAsCisgICAgMTI4LCAgMSwyMzEsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwgMzUsMjMzLDI0MiwgOTksICAyLAorICAgICA5NCwxMDAsIDk0LDEwNSwyMzYsMTAxLDEyOCwgMzYsMjE0LDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEyOCwKKyAgICAgIDEsIDI5LDIzOSwyMzcsMjM3LDIyNSwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsICAxLCAzNSwyMjgsCisgICAgMjM5LDExNiwxMjksICAxLCAzMywgOTQsMTM1LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgIDEsIDMzLAorICAgIDEwMSwgIDYsIDk0LDE1OCwgOTQsMTY5LCA5NCwxODAsIDk0LDE5MSwgOTQsMjEwLCA5NSwgNTYsMjI3LDI0OSwKKyAgICAyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA1MSwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsCisgICAgIDk3LDEyOCwgNDgsIDgyLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxNzgsMjM5LAorICAgIDIzNywyMjksMjQ0LDI0MiwyMzMsMjI3LDIyNSwyMzYsMjM2LDI0OSwyMjksMjQxLDI0NSwyMjUsMTA4LDEyOCwKKyAgICAgMzQsIDgxLDExNCwgIDMsIDk0LDIxOCwgOTUsIDExLCA5NSwgMjEsMjI5LDI0MywxMDQsICAzLCA5NCwyMjgsCisgICAgIDk0LDI0MywgOTQsMjUyLDIyNSwyMjcsMjI3LDIyOSwyMzgsMjQ0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LAorICAgIDEyOCwgIDUsMTU2LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjQzLDIzNywyNDUsMjQxLDIyOCwKKyAgICAyMjUsMjM3LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTU3LDIzNywyMjUsMjM4LDIyOCwyMjYsCisgICAgMjM2LDExNSwxMjgsICAwLDIyMywyNDMsMjMyLDIyNSwyNDksMjMzLDEwOSwgIDIsIDk1LCAzMiwgOTUsIDQ3LAorICAgIDIyNSwyMjcsMjI3LDIyOSwyMzgsMjQ0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTU4LDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjQ0LDI0NCwyMjUsMjM3LDIyNSwyNDIsMTA3LDEyOCwgNDgsCisgICAgIDE5LDEwNCwgIDUsIDk1LCA3NywgOTUsMjEwLCA5NiwgMTcsIDk2LCA0MiwgOTYsIDQ4LCA5NywgIDQsIDk1LAorICAgICA4NywgOTUsIDk3LCA5NSwxMjAsIDk1LDE0NSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwKKyAgICAxNTIsMTAwLCAgMiwgOTUsMTAzLCA5NSwxMTQsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsCisgICAgICA1LDExNCwyMjksMjQ2LCA5NywxMjgsICA5LCAyNCwyMzEsMTE3LCAgMiwgOTUsMTI3LCA5NSwxMzYsMjM0LAorICAgIDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNTIsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwKKyAgICAgMjQsMjMzLDExMCwgIDQsIDk1LDE1NiwgOTUsMTY1LCA5NSwxNzksIDk1LDE5NSwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsICA2LCA1OCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LAorICAgIDEyOCwyNTQsMjA2LDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsMjU0LDIwNywyMzcsMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgMjU0LDIwOCwxMDEsICAzLCA5NSwyMTgsIDk1LDIzOSwgOTYsICAwLDIzNywyMzMsMjI4LDIyOCwyMzYsMjI5LAorICAgIDIzMiwyMzksMjM5LDIzNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTQ5LDI0MywKKyAgICAyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNDcsCisgICAgMjQ1LDI0MCwyNDQsMjQ1LDI0MiwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgIDE0NSwyMzIsIDk3LCAgMiwgOTYsIDI0LCA5NiwgMzEsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDkwLDIzMSwKKyAgICAyNDUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgOTAsMjM5LDIzOSwxMDcsMTI4LCAgMiwgOTYsCisgICAgMjUwLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTQ3LDEwNSwgIDMsIDk2LCA2NiwgOTYsIDc3LAorICAgICA5NiwgODgsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LCA3OCwyMzUsMjI1LDI0NCwKKyAgICAyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMTc0LDEwOSwgIDIsIDk2LCA5NCwgOTYsMTA1LDIyNSwyNDIsCisgICAgMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwgOTksMjI5LDEwOCwxMzAsICA1LDIxMCwgOTYsMTE0LAorICAgICA5NiwxMzQsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNTAsIDk2LDEyNSwyMzIsMjI5LDIyNiwKKyAgICAyNDIsMjI5LDExOSwxMjgsMjUxLCA1MCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIxMCwyMzQsCisgICAgMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgODMsMjM2LDIzOSwyNDQsMjQ0LAorICAgIDIyNSwxMDgsICAyLCA5NiwxNjcsIDk2LDE4NCwyMzMsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksMjI4LDI0MywKKyAgICAyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsMTkwLDI0MywyNDQsMjM5LDExMiwxMzIsICAyLDE0OCwgOTYsCisgICAgMTk5LCA5NiwyMTAsIDk2LDIxNiwgOTYsMjQ4LDIzMywyMzgsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwxMDAsMTI4LAorICAgICAgMiwxNTAsMjM3LDIzOSwxMDAsMTI4LCAgMiwxOTIsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwKKyAgICAxMzAsICAyLDE0OSwgOTYsMjMxLCA5NiwyMzcsMjM3LDIzOSwxMDAsMTI4LCAgMiwxOTMsMjQzLDI0NSwyNDAsCisgICAgMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsICAyLDIyOCwyNDMsMjQ0LDI0MiwyMzksMjM1LDEwMSwxMjksICAyLAorICAgIDE2MSwgOTcsICAzLDI0MiwyMjksMjQ2LDIyOSwyNDIsMjQzLDIyOSwxMDAsMTI4LCAgMiwxNjIsMTA5LCAgMiwKKyAgICAgOTcsIDIwLCA5NywgMjgsMjI1LDIyNywyNDIsMjM5LDExMCwxMjgsIDMwLCAzMywyMzksMjM4LDIzOSwyNDMsCisgICAgMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDcxLDExMSwgIDIsIDk3LCA0NSwgOTcsIDU2LDIzMiwyMzMsMjQyLAorICAgIDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgODQsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywKKyAgICAxMjgsIDQ4LDE4MCwyNDAsIDk3LCAgMiwgOTcsIDc0LCA5NywgODAsMjQyLDIyOSwxMTAsMTI4LCAzNiwxNjIsCisgICAgMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxNzIsMTE0LCAgMiwgOTcsIDk1LCA5NywxOTIsIDk3LAorICAgICAgMiwgOTcsMTAxLCA5NywxMDksMjI4LDIzMywyMjksMjM4LDExNiwxMjgsIDM0LCAgNywyNDYsMTAxLDEzNCwKKyAgICAgIDAsIDk2LCA5NywxMjYsIDk3LDEzNywgOTcsMTU0LCA5NywxNjEsIDk3LDE3MCwgOTcsMTgyLDIyNiwyMjksCisgICAgMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgMjIsIDk5LCAgMiwgOTcsMTQzLCA5NywxNDgsMjM3LAorICAgICA5OCwxMjgsICAzLCAgMCwyMzksMjM3LCA5OCwxMjgsICAzLCAgMCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwKKyAgICAgODMsMjM2LDIzOSwyNDcsMjM3LDIzOSwxMDAsMTI4LCAgMiwyMDYsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsCisgICAgMjI1LDIyNywxMDEsMTI4LDI1NSwgNjQsMjQ0LDIzOSwyMzgsMjI5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDY0LAorICAgIDIyOSwyMjUsMjQ0LDIyOSwxMTQsMTMyLCAgMCwgNjIsIDk3LDIwOCwgOTcsMjI3LCA5NywyMzksIDk4LCAyNiwKKyAgICAyMjksMjQxLDI0NSwyMjUsMTA4LDEyOSwgMzQsMTAxLCA5NywyMTgsMjM5LDI0MiwyMzYsMjI5LDI0MywxMTUsCisgICAgMTI4LCAzNCwyMTksMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMzAsMTExLAorICAgICAgMiwgOTcsMjQ1LCA5OCwgMTUsMTE0LCAgMiwgOTcsMjUxLCA5OCwgIDgsMjI5LDI0MSwyNDUsMjMzLDI0NiwKKyAgICAyMjUsMjM2LDIyOSwyMzgsMTE2LDEyOCwgMzQsMTE1LDIzNiwyMjksMjQzLDExNSwxMjgsIDM0LDExOSwyNDYsCisgICAgMjI5LDI0MiwyMjksMjQxLDI0NSwyMjUsMTA4LDEyOCwgMzQsMTAzLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LAorICAgIDI1NCwxMDEsMTE1LCAgMiwgOTgsIDQwLCA5OCwgNDgsMjI3LDI0MiwyMzMsMjQwLDExNiwxMjgsICAyLCA5NywKKyAgICAyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsMjI5LDExNywgIDQsIDk4LCA2NiwgOTgsIDc3LCA5OCwxMzQsCisgICAgIDk4LDE0NSwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDgwLDIzMywxMDgsICAyLAorICAgICA5OCwgODQsIDk4LDEwOSwyMzYsMjI5LDIzNywyMzksMTE2LCAgMiwgOTgsIDk0LCA5OCwxMDEsMjM2LDIyOSwKKyAgICAyMzAsMTE2LDEyOCwgIDAsMTcxLDI0MiwyMzMsMjMxLDIzMiwxMTYsMTI4LCAgMCwxODcsMjQzLDIzMywyMzgsCisgICAgMjMxLDEwOCwgIDIsIDk4LDExOSwgOTgsMTI2LDIzNiwyMjksMjMwLDExNiwxMjgsIDMyLCA1NywyNDIsMjMzLAorICAgIDIzMSwyMzIsMTE2LDEyOCwgMzIsIDU4LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwKKyAgICAxNzYsMjQyLDIyNSwyMzcsMjQ1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDI0LDI0OSwyNDMsCisgICAgMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDIwMSwxMDQsMTQ0LCAgMCwxMDQsIDk4LDIwNCwxMDEsIDkwLAorICAgIDEwMSwxMjUsMTAxLDE2MiwxMDEsMjAyLDEwMywgOTAsMTAzLDExMCwxMDQsIDc1LDEwNCwgODcsMTA0LCA5OSwKKyAgICAxMDUsMTY3LDEwNSwxNzUsMTA1LDE4NiwxMDUsMTk1LDEwNiwgMTksMTA2LCAyMywgOTcsIDEzLCA5OCwyMzIsCisgICAgIDk5LCAxNSwgOTksIDI1LCA5OSwgNTUsIDk5LCA4MCwgOTksMTU4LCA5OSwxNzAsIDk5LDE5NSwgOTksMjEwLAorICAgICA5OSwyMzksIDk5LDI1MiwxMDAsIDU0LDEwMCwgNjMsIDk3LCAgMiwgOTgsMjM4LCA5OSwgIDEsMjI2LDIzNSwKKyAgICAyMzIsMjI1LDI0MywyMzMsMjI1LDIzOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgMTY5LDIzNiwyNDQsMjM5LDIzOCwyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxOTMsMjI2LAorICAgIDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTg1LDIyOCwxMDEsICAyLCA5OSwgMzIsIDk5LCA1MCwKKyAgICAyNDMsMjI3LDIyOSwyMzgsMjI4LDIyOSwyNDIsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LDE3OSwyNDYsIDk3LDEyOCwgIDksIDU3LDIzMSwxMTcsICAyLCA5OSwgNjIsIDk5LCA3MSwyMzQsMjI1LAorICAgIDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE4NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA1NywKKyAgICAxMDQsICA0LCA5OSwgOTAsIDk5LCA5OSwgOTksMTEzLCA5OSwxNDMsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksCisgICAgMTI4LCAgNiwgNDUsMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LAorICAgIDE2MiwxMDUsICAyLCA5OSwxMTksIDk5LDEzNCwyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsMjU0LDE2MywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDExMSwyMzcsCisgICAgMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE2NCwyMzMsMjQ0LAorICAgIDI0NSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCA0MiwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwKKyAgICAyMzgsIDk3LDEyOSwgNDgsMjA3LCA5OSwxODMsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsCisgICAgMTI4LDI1NSwxMzgsMjM2LDIyNSwyMzgsMjQ0LDIzMSwyNDUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LAorICAgICAxMCwgNzcsMjM3LDI1MCwgOTcsICAyLCA5OSwyMTgsIDk5LDIyNywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsICA2LCAzMywyMzYsMjM5LDI0NywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCAzMywyMzgsCisgICAgMjMxLDI0NSwyMzYsMjMwLDIzMywyMzYsMjM2LDIyOSwxMTQsMTI4LCA0OSwxMDAsMTE0LCAgMiwxMDAsICAyLAorICAgIDEwMCwgMTgsMjI4LDI0MywyMzMsMjMxLDIzOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwKKyAgICAgIDQsIDc0LDI0MCwyMzksMjM5LDExMCwgIDIsMTAwLCAyNywxMDAsIDQwLDIzNiwyMjksMjMwLDI0NCwyMjYsCisgICAgMjI1LDI0MiwyMjYsMjQ1LDExMiwxMjgsIDMzLDE4OCwyNDIsMjMzLDIzMSwyMzIsMjQ0LDIyNiwyMjUsMjQyLAorICAgIDIyNiwyNDUsMTEyLDEyOCwgMzMsMTkyLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMjAyLDI0NCwKKyAgICAyMjUsMTAyLCAgMywxMDAsIDczLDEwMCwxNjUsMTAxLCAgMCwyNDAsMjI1LDI0NCwyMjUsMTA0LDEzNCwgIDUsCisgICAgMTc4LDEwMCwgOTMsMTAwLCA5OCwxMDAsMTEyLDEwMCwxMjEsMTAwLDEzNiwxMDAsMTUyLDE3NywgNTQsMTI4LAorICAgICAgNSwxNzgsIDUwLCAgMiwxMDAsMTA0LDEwMCwxMDgsIDUxLDEyOCwgIDUsMTc4LDEwMiwxMjgsICA1LDE3OCwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3OCwyMzgsMjI1LDI0MiwyNDIsMjM5LDI0NywyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3OCwyNDEsMjQ1LDIyNSwyNDIsMjQ0LDIyOSwyNDIsMjMyLAorICAgIDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzgsMjQ3LDIzMywyMjgsMjI5LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwgIDUsMTc4LDI0MSwyMjUsMjM3LDIyNSwyNDQsMTE1LDEzNSwgIDUsMTc5LDEwMCwxODgsCisgICAgMTAwLDE5MywxMDAsMTk4LDEwMCwyMDMsMTAwLDIxMiwxMDAsMjI3LDEwMCwyNDMsMTc3LCA5OCwxMjgsICA1LAorICAgIDE3OSwxNzgsIDU2LDEyOCwgIDUsMTc5LDE3OSwgNTIsMTI4LCAgNSwxNzksMjMyLDIyOSwyMjYsMjQyLDIyOSwKKyAgICAxMTksMTI4LCAgNSwxNzksMjM4LDIyNSwyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksCisgICAgMTI4LCAgNSwxNzksMjQxLDI0NSwyMjUsMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LAorICAgIDEyOCwgIDUsMTc5LDI0NywyMzMsMjI4LDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3OSwKKyAgICAyNDMsMjI5LDIzMSwyMzksMTA4LDEzNSwgIDUsMTc3LDEwMSwgMjIsMTAxLCAyNywxMDEsIDMyLDEwMSwgMzcsCisgICAgMTAxLCA0NiwxMDEsIDYxLDEwMSwgNzcsMTc3LCA1NSwxMjgsICA1LDE3NywxNzgsIDUyLDEyOCwgIDUsMTc3LAorICAgIDE3OSwgNDgsMTI4LCAgNSwxNzcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzcsMjM4LDIyNSwKKyAgICAyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzcsMjQxLDI0NSwyMjUsCisgICAgMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTc3LDI0NywyMzMsMjI4LAorICAgIDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3NywgOTgsICAzLDEwMSwgOTgsMTAxLDEwMywKKyAgICAxMDEsMTEzLDIyNSwxMTQsMTI4LCAgMSwgMzksMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLDEyOCwgNDksCisgICAgIDE1LDI0MiwyMjksMjQ2LDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDQzLCA5OSwgIDIsMTAxLAorICAgIDEzMSwxMDEsMTQwLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwgMzAsIDQxLDIzMywyNDIsIDk5LCAgMiwKKyAgICAxMDEsMTQ4LDEwMSwxNTMsMjM2LDEwMSwxMjgsIDM2LDIxNSwyNDUsMjM3LDIzMCwyMzYsMjI5LDEyMCwxMjgsCisgICAgICAxLCAzNywxMDAsICAyLDEwMSwxNjgsMTAxLDE3OCwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTI4LAorICAgICAzMCwgMzksMjM5LDExNiwgIDIsMTAxLDE4NSwxMDEsMTk0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwKKyAgICAgMzAsIDM1LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgMzcsMTAxLDEzNiwgIDUsMjEyLDEwMSwyMjIsCisgICAgMTAxLDI1NSwxMDIsIDE5LDEwMiwyNDgsMTAzLCAgOCwxMDMsIDUzLDEwMywgNjIsMTAzLCA3NSwyMjUsMjQyLAorICAgIDExNiwxMjksIDM4LDEwMSwxMDEsMjMwLDI0MywyNDUsMjMzLDExNiwgIDIsMTAxLDIzOSwxMDEsMjQ3LDIyNiwKKyAgICAyMzYsMjI1LDIyNywxMDcsMTI4LCAzOCwxMDEsMjQ3LDIzMiwyMzMsMjQ0LDEwMSwxMjgsIDM4LCA5NywyMjgsCisgICAgMjI1LDIzMSwyMjksMjQzLDEwNCwxMjksMjUxLCA1MiwxMDIsIDEwLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LAorICAgIDEyOCwyNTEsIDUyLDEwNCwgIDYsMTAyLCAzMywxMDIsIDYxLDEwMiwgNjksMTAyLDExOSwxMDIsMTY1LDEwMiwKKyAgICAyMTQsIDk3LCAgMiwxMDIsIDM5LDEwMiwgNTMsMjM2LDI0NCwyMzksMjM4LDIyOSwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsICA2LDE5MywyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDcxLDIyOSwyMjYsMjQyLAorICAgIDIyOSwxMTksMTI4LCAgNSwyMTIsMjMwLDIzMywyMzgsMjI1LDIzNiwgOTcsICAyLDEwMiwgODAsMTAyLDExMSwKKyAgICAyMzYsMTE2LCAgMiwxMDIsIDg3LDEwMiwgOTksMjM5LDIzOCwyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksCisgICAgMTI4LDI1MSwxNjcsMjQ0LDI0NywyMzksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMzQsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIzNCwyMzIsMjI1LDIzNywyNTAsMjI1LDIyNSwyMjYsMjM5LDI0NiwKKyAgICAxMDEsICAyLDEwMiwxMzQsMTAyLDE0OCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwyNTEsMTY1LDIzMywyNDMsMjM5LDIzNiwyMjUsMjQ0LDIyOSwyMjgsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LDI1MSwxNjQsMTA1LCAgMiwxMDIsMTcxLDEwMiwyMDUsMjM4LDIzMywyNDQsMjMzLDIyNSwKKyAgICAyMzYsIDk3LCAgMiwxMDIsMTgzLDEwMiwxOTcsMjM2LDI0NCwyMzksMjM4LDIyOSwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsMjUxLDE2OCwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjM1LDI0MiwyMjUsMjMxLAorICAgIDIyNSwyMzgsIDk3LDEyOCwgNDgsMTIwLDIzNywyMjksMjI4LDIzMywyMjUsMjM2LCA5NywgIDIsMTAyLDIyNiwKKyAgICAxMDIsMjQwLDIzNiwyNDQsMjM5LDIzOCwyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxNjksCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIzNiwyMzMsMjQzLDIyOSwyMzMsMjI5LDI0MiwyMjUsMjQzLAorICAgIDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxMjMsMTA3LCAgMiwxMDMsIDE0LDEwMywgMzgsMjI1LDI0NCwKKyAgICAyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMjE2LDEwMywgMjYsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsCisgICAgMjI4LDI0NCwxMDQsMTI4LDI1NSwxNDEsMjQ1LDI0NCwyMjUsMjI1LDI0MiwyNDUsMjQzLDI0MSwyNDUsMjI1LAorICAgIDI0MiwxMDEsMTI4LCA1MSwgNTQsMjM4LDIzMSwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMiwxMDMsMjQyLDI0NSwKKyAgICAyNDQsMjQ1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDU3LDExNiwxMjksICA1LDIxNSwxMDMsCisgICAgIDgxLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjE1LDIzMiwyMzksMjM5LDEwNywxMjksICAyLAorICAgIDEwMiwxMDMsIDk5LDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAgMiwxNzcsMTA1LCAgNCwKKyAgICAxMDMsMTIwLDEwMywyMDUsMTAzLDIxNiwxMDMsMjQxLDIyOSwyNDUsMTA0LCAgNCwxMDMsMTMyLDEwMywxNjcsCisgICAgMTAzLDE4MiwxMDMsMTkxLCA5NywgIDIsMTAzLDEzOCwxMDMsMTUzLDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LAorICAgIDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsMTIzLDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwKKyAgICAyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgMjcsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsCisgICAgMjI5LDIyNSwxMTAsMTI4LCA1MCwxMDksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNzgsMjQwLAorICAgIDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAxMywyMzIsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTE0LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsCisgICAgMTI5LCA0OCwyMTAsMTAzLDIyOSwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LAorICAgIDEzOSwyNDIsMjMzLDExMywxMzQsICA1LDE4MCwxMDQsICAzLDEwNCwgIDgsMTA0LCAyMiwxMDQsIDMxLDEwNCwKKyAgICAgNDYsMTA0LCA2MiwxNzcsIDUyLDEyOCwgIDUsMTgwLCA1MCwgIDIsMTA0LCAxNCwxMDQsIDE4LCA0OSwxMjgsCisgICAgICA1LDE4MCwxMDAsMTI4LCAgNSwxODAsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODAsMjM4LAorICAgIDIyNSwyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODAsMjQxLDI0NSwKKyAgICAyMjUsMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTgwLDI0NywyMzMsCisgICAgMjI4LDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4MCwyMzYsMjMzLDIzOCwyMjksMjI2LAorICAgIDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDE1MCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwKKyAgICAxMjgsMjU1LCA3MiwxMTEsICA5LDEwNCwxMTksMTA0LDEzMCwxMDQsMTU0LDEwNCwxNzksMTA1LCAxMSwxMDUsCisgICAgIDI0LDEwNSwxMTAsMTA1LDE1MCwxMDUsMTYxLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LAorICAgICAgNSwxMTIsMjMyLDEwNSwgIDIsMTA0LDEzNywxMDQsMTQ1LDI0MCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwKKyAgICAgNDMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMjMsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsCisgICAgMjM4LCA5NywxMjksIDQ4LDIxOSwxMDQsMTY3LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LAorICAgIDEyOCwyNTUsMTQyLDIzNiwyMjUsMTA5LDEzNSwgIDUsMTg1LDEwNCwxOTksMTA0LDIwNCwxMDQsMjA5LDEwNCwKKyAgICAyMTQsMTA0LDIyMywxMDQsMjM4LDEwNCwyNTQsMTc3LCA1NywxMjgsICA1LDE4NSwxNzgsIDU0LDEyOCwgIDUsCisgICAgMTg1LDE3OSwgNTAsMTI4LCAgNSwxODUsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODUsMjM4LAorICAgIDIyNSwyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODUsMjQxLDI0NSwKKyAgICAyMjUsMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTg1LDI0NywyMzMsCisgICAgMjI4LDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4NSwyMzgsMjM5LDIzNSwyMzIsMjQ1LAorICAgIDIzNSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNDYsMTExLCAgMiwxMDUsIDMwLDEwNSwxMDAsMTA3LCAgNCwKKyAgICAxMDUsIDQwLDEwNSwgNTIsMTA1LCA1OCwxMDUsIDgwLDIyNSwyMjYsMjM5LDI0NiwyMjksMjI3LDIzOSwyMzcsCisgICAgIDk4LDEyOCwgIDMsICA5LDIyNywyMzcsIDk4LDEyOCwgIDMsICA5LDI0MCwyMjUsMjM2LDIyNSwyNDQsMjI1LAorICAgIDIzNiwyMzMsMjUwLDIyOSwyMjgsMjI2LDIyOSwyMzYsMjM5LDI0NywyMjcsMjM3LCA5OCwxMjgsICAzLCAzMywKKyAgICAyNDIsMjI5LDI0NCwyNDIsMjM5LDIzMCwyMzYsMjI5LDI0OCwyMjYsMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsCisgICAgIDk4LDEyOCwgIDMsIDM0LDIzOCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCA2NiwxMTQsICAyLAorICAgIDEwNSwxMTYsMTA1LDE0MywxMDUsICAyLDEwNSwxMjIsMTA1LDEzMSwyMjcsMjM5LDI0MCwyNDQsMjMzLCA5OSwKKyAgICAxMjgsICAzLDIzMywyNTAsMjM5LDIzOCwyNDQsMjI1LDIzNiwyMjYsMjI1LDExNCwxMjgsIDMyLCAyMSwyMzgsCisgICAgMjI3LDIzNywgOTgsMTI4LCAgMywgMjcsMjQ0LDI0MywyNDAsMjQyLDIzMywyMzgsMjMxLDExNSwxMjgsIDM4LAorICAgIDEwNCwyNDUsMjQzLDEwMSwxMjgsIDM1LCAgMiwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTYzLDI0MywKKyAgICAyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAgMiwxNzYsMjQ0LDI0NSwyNDIsMjM4LDIyOSwxMDAsCisgICAgMTI4LCAgMiwxMDEsMTE3LCAgNCwxMDUsMjA1LDEwNSwyMTYsMTA1LDIyOSwxMDUsMjU0LDIzMiwyMzMsMjQyLAorICAgIDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMTcsMjMzLDIzMywyNDQsMjM5LDI0MywyNDEsMjQ1LDIyNSwKKyAgICAyNDIsMTAxLDEyOCwgNTEsIDUxLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMTMsCisgICAgMTA1LDI0MiwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDE0MCwyMzgsMjMxLAorICAgIDIyNSwyNDIsMjQ1LDIzNywyMzYsMjI1LDI0NSwxMTYsMTI5LCAgMiwyMjEsMTA2LCAxMywyMjcsMjM3LCA5OCwKKyAgICAxMjgsICAzLCAxMSwxMTgsMTI4LCAgMSwxNDksMjQ5LDI0MCwyMzIsMjI5LDExMCwxMzIsICAwLCA0NSwxMDYsCisgICAgIDM5LDEwNiwgNTAsMTA2LCA2MiwxMDYsIDg1LDIzMywyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LAorICAgIDI0NiwyMjksMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMTMsMTE1LCAgMiwKKyAgICAxMDYsIDY4LDEwNiwgNzUsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDk5LDI0NSwyNDAsMjI5LDI0MiwyMzMsCisgICAgMjM5LDExNCwxMjgsMjQ2LDIzMCwyNDQsMjQ3LDExMSwxMjgsIDMyLCAxNiwxMDUsMTQ5LCAgMCwxMDUsMTA2LAorICAgIDEzNywxMDYsMTYwLDEwNiwxOTQsMTA2LDI0MSwxMTAsMTIzLDExMCwyNDMsMTExLCAyNCwxMTEsIDUxLDExMSwKKyAgICAyMTMsMTExLDIxNywxMTEsMjU1LDExMiwgMjEsMTEyLDEwNSwxMTMsIDE0LDExMywgODksMTEzLCA5NywxMTMsCisgICAgMTEwLDExMywxOTcsMTEzLDI1NCwxMTQsIDI2LDExNCwgNzAsMjI1LCA5OSwgIDIsMTA2LDE0NCwxMDYsMTUwLAorICAgIDI0NSwyNDQsMTAxLDEyOCwgIDAsMjM3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA3OSwKKyAgICAgOTgsICAzLDEwNiwxNjgsMTA2LDE3NywxMDYsMTg3LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksCisgICAgMTM1LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAzOSwyNDIsMjI5LDI0NiwxMDEsMTI4LAorICAgICAgMSwgNDUsIDk5LCAgMywxMDYsMjAyLDEwNiwyMDksMTA2LDIzMSwyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwKKyAgICAyMDgsMjMzLDI0MiwgOTksICAyLDEwNiwyMTcsMTA2LDIyMiwyMzYsMTAxLDEyOCwgMzYsMjE2LDI0NSwyMzcsCisgICAgMjMwLDIzNiwyMjksMTIwLDEyOCwgIDAsMjM4LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgICA4NiwxMDAsICA0LDEwNiwyNTEsMTA3LCAgNSwxMTAsIDgwLDExMCwxMTMsMjI2LDIzNiwyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwgIDIsICA5LDEwMSwgIDIsMTA3LCAxMSwxMTAsIDc1LDIzOSwyMzEsMjQyLDIyNSwyNDAsCisgICAgMTA0LCAgNywxMDcsIDMyLDEwNywgNDYsMTA3LCA1OSwxMDksMjQ0LDExMCwgMTksMTEwLCAzMiwxMTAsIDQ0LAorICAgIDIyOSwyMjUsMjQyLDI0NCwyMzIsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCA1MCwxNDMsMjMwLDIzMywKKyAgICAyNDIsMjI5LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgNTAsMTM5LDIzMywgOTksIDE0LDEwNywgOTAsCisgICAgMTA3LDEwNiwxMDcsMjA1LDEwOCwgIDMsMTA4LCA2OSwxMDgsIDk4LDEwOCwxMTQsMTA4LDE3MSwxMDgsMjIwLAorICAgIDEwOCwyMzIsMTA5LCAgMywxMDksIDcwLDEwOSwyMDgsMTA5LDIzNywyMjUsMjM2LDIzNiwyMzMsMjI1LDIzOCwKKyAgICAyMjcsMjI5LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNjMsIDk5LCAgNCwxMDcsMTE2LDEwNywxMjcsCisgICAgMTA3LDE0MSwxMDcsMTQ4LDIyNSwyMzYsMjM2LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNTgsMjI5LAorICAgIDIzOCwyNDQsMjQyLDIyOSwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDUwLDE2NSwyMzYsMjM5LDI0MywKKyAgICAxMDEsMTI4LCA0OCwgIDYsMTExLCAgMywxMDcsMTU2LDEwNywxNzEsMTA3LDE5MSwyMzcsMjM3LCA5NywxMjksCisgICAgIDQ4LCAgMSwxMDcsMTY0LDIzNiwyMjksMjMwLDExNiwxMjgsMjU1LDEwMCwyMzgsMjMxLDI0MiwyMjUsMjQ0LAorICAgIDI0NSwyMzYsMjI1LDI0NCwyMzMsMjM5LDIzOCwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDU1LDI0MiwKKyAgICAyNDIsMjI5LDIyNywyNDQsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCA1MCwxNjMsMTAxLCAgMywxMDcsCisgICAgMjEzLDEwNywyMjUsMTA3LDI0MiwyMjUsMjQyLDI0NCwyMzIsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLAorICAgICA0NywyMzgsMjQ0LDIyOSwyNDIsMjQwLDI0MiwyMzMsMjQzLDIyOSwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwKKyAgICAgNTAsIDYxLDI0OCwyMjcsMjI5LDIzNiwyMzYsMjI5LDIzOCwyNDQsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsCisgICAgMTI4LCA1MCwxNTcsMTAyLCAgMiwxMDgsICA5LDEwOCwgMjQsMjI5LDI0MywyNDQsMjMzLDI0NiwyMjUsMjM2LAorICAgIDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNjQsMTA1LCAgMiwxMDgsIDMwLDEwOCwgNTksMjM4LDIyNSwKKyAgICAyMzgsMjI3LDIzMywyMjUsMTA4LCAgMiwxMDgsIDQyLDEwOCwgNTEsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsCisgICAgMTI4LCA1MCwxNTAsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCA1NCwyNDIsMjI5LDI0MCwyMjUsMjQyLAorICAgIDIyOSwxMTAsMTI4LCA1MCwgNDMsMTA0LCAgMiwxMDgsIDc1LDEwOCwgODYsMjI1LDI0NiwyMjksMjQwLDIyNSwKKyAgICAyNDIsMjI5LDExMCwxMjgsIDUwLCA1MCwyMzMsMjMxLDIzMiwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsCisgICAgIDUwLDE2NCwyMzMsMjQ0LDIyOSwyNDIsMjI1LDI0NCwyMzMsMjM5LDIzOCwyMzcsMjI1LDI0MiwxMDcsMTI4LAorICAgICA0OCwgIDUsMTA4LCAgMywxMDgsMTIyLDEwOCwxNDgsMTA4LDE2MCwyMjUsMjI2LDIzOSwxMTQsICAyLDEwOCwKKyAgICAxMzEsMTA4LDE0MCwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDUwLDE1MiwyNDAsMjI1LDI0MiwyMjksCisgICAgMTEwLDEyOCwgNTAsIDU2LDIyOSwyMzAsMjQ0LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgNTAsMTY3LAorICAgIDIzOSwyNDcsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCA1MCwxNjYsMTA5LCAgMiwxMDgsMTc3LDEwOCwKKyAgICAyMDksMTAxLCAgMiwxMDgsMTgzLDEwOCwxOTgsMjI4LDIzMywyMjcsMjMzLDIzOCwyMjksMjI3LDIzMywyNDIsCisgICAgMjI3LDIzNiwxMDEsMTI4LCA1MCwxNjksMjQ0LDIyNSwyMzYsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLAorICAgICA0NiwyMzksMjM5LDIzOCwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDQyLDIzOCwyMjUsMjM3LDIyOSwKKyAgICAyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDUyLDExMiwgIDIsMTA4LDIzOCwxMDgsMjQ2LDIyOSwyNDIsCisgICAgMjMzLDIzOSwxMDAsMTI4LCA0OCwgIDIsMjQyLDIzMywyMzgsMjQ0LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLAorICAgIDEyOCwgNTAsMTU4LDExNCwgIDIsMTA5LCAgOSwxMDksIDU3LDEwMSwgIDMsMTA5LCAxNywxMDksIDI4LDEwOSwKKyAgICAgNDMsMjI1LDIyNywyMzIsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCA2NywyNDAsMjQyLDIyOSwyNDMsCisgICAgMjI5LDIzOCwyNDQsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCA1NywyNDMsMjM5LDI0NSwyNDIsMjI3LAorICAgIDIyOSwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDYyLDIzMywyMzEsMjMyLDI0NCwyMjcsMjMzLDI0MiwKKyAgICAyMjcsMjM2LDEwMSwxMjgsIDUwLDE2OCwxMTUsICA1LDEwOSwgODIsMTA5LDExMSwxMDksMTI1LDEwOSwxNTAsCisgICAgMTA5LDE3OCwxMDEsICAyLDEwOSwgODgsMTA5LDEwMSwyMjcsMjQyLDIyOSwyNDQsMjI3LDIzMywyNDIsMjI3LAorICAgIDIzNiwxMDEsMTI4LCA1MCwxNTMsMjM2LDIzMCwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDY2LDIzOSwKKyAgICAyMjcsMjMzLDIyOSwyNDQsMjQ5LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNTEsMTEyLCAgMiwxMDksCisgICAgMTMxLDEwOSwxMzcsMjI1LDIyNywxMDEsMTI4LCA0OCwgIDAsMjI5LDIyNywyMzMsMjI1LDIzNiwyNDAsMjI1LAorICAgIDI0MiwyMjksMTEwLDEyOCwgNTAsIDUzLDExNiwgIDIsMTA5LDE1NiwxMDksMTY3LDIzOSwyMjcsMjM1LDI0MCwKKyAgICAyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNDksMjQ1LDIyOCwyNDksMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsCisgICAgIDUwLCA1OSwxMTcsICAyLDEwOSwxODQsMTA5LDE5MywyMzgsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLAorICAgICA0OCwyNDAsMjI5LDI0MiwyNDYsMjMzLDI0MywyMjksMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCA2MCwKKyAgICAxMTksICAyLDEwOSwyMTQsMTA5LDIyNiwyMjUsMjQ0LDIyOSwyNDIsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsCisgICAgIDUwLCA0NCwyMzksMjM5LDIyOCwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDQ1LDI1MCwyMjksMjQyLAorICAgIDExMSwxMjgsIDQ4LCAgNywxMDksICAyLDEwOSwyNTAsMTEwLCAgNywyMjksMjQ0LDIyNSwyMzYsMjI3LDIzMywKKyAgICAyNDIsMjI3LDIzNiwxMDEsMTI4LCA1MCwxNDIsMjM5LDIzOSwyMzgsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsCisgICAgMTI4LCA1MCwxMzgsMjM4LDIyNSwyMzcsMjI5LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgNTAsMTQ4LAorICAgIDI0MywyNDUsMjM4LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgNTAsMTQ0LDExOSwgIDIsMTEwLCA1MCwKKyAgICAxMTAsIDYzLDIyNSwyNDQsMjI5LDI0MiwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDUwLDE0MCwyMzksCisgICAgMjM5LDIyOCwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDUwLDE0MSwyNDYsIDk3LDEyOCwgIDksICA3LAorICAgIDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMzAsICAwLDIzOSwxMTAsIDk0LDExMCwxMDIsMjI1LDIyNywKKyAgICAyNDUsMjQ0LDEwMSwxMjgsIDMwLCA0NywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgMjI5LDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDIwMywxMDEsICAzLDExMCwxMzEsMTEwLAorICAgIDE0NywxMTAsMTU4LDIyNiwyNDIsMjI5LDI0NiwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwKKyAgICAxMjgsICA0LDIxNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDUzLDI0NSwyMzgsCisgICAgMTAzLCAgNCwxMTAsMTcwLDExMCwyMDUsMTEwLDIyMCwxMTAsMjI5LCA5NywgIDIsMTEwLDE3NiwxMTAsMTkxLAorICAgIDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsMTE3LDI0MCwKKyAgICAyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgMjEsMjI3LDIzMywyNDIsCisgICAgMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwxMDMsMjM1LDIzOSwyNDIsMjI5LAorICAgIDIyNSwxMTAsMTI4LCA0OSwgNzEsMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwKKyAgICAxMjgsIDUwLCAgNywxMDMsICAyLDExMCwyNDksMTExLCAgMCwyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMCwyMzYsCisgICAgMTE3LCAgMiwxMTEsICA2LDExMSwgMTUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxMzUsMjQyLAorICAgIDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgIDcsMTA0LCAgMiwxMTEsIDMwLDExMSwgNDAsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDY4LDIzOSwyMzksMjM1LDIyNSwyMjYsMjM5LDI0NiwxMDEsCisgICAgMTI4LCAzMCwyMDEsMTA1LCAgOCwxMTEsIDY5LDExMSwgNzksMTExLCA5MCwxMTEsIDk3LDExMSwxMjIsMTExLAorICAgIDEzOCwxMTEsMTUzLDExMSwxNjksMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTM2LDIyNywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNTYsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksCisgICAgICA4LDIzMSwxMTcsICAyLDExMSwxMDQsMTExLDExMywyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLAorICAgIDEzNiwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCAgOCwyMzcsMjI1LDI0NCwyNDIsMjI1LDIzMSwKKyAgICAyNDUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgNjQsMjM4LDI0NiwyMjksMjQyLDI0NCwyMjksCisgICAgMjI4LDIyNiwyNDIsMjI5LDI0NiwxMDEsMTI4LCAgMiwgMTEsMjQzLDIzMiwyMzksMjQyLDI0NCwyMjcsMjQ5LAorICAgIDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDU3LDI0NiwyMzksMjQ3LDIyOSwyMzYsMjQzLDIzMywKKyAgICAyMzEsMTEwLCAgMywxMTEsMTg1LDExMSwxOTUsMTExLDIwMiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsCisgICAgMTI4LCAgOSwxOTIsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDY0LDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LAorICAgIDI0NCwxMDUsMTI4LCAxMCwxOTIsMTA2LDEyOCwgIDEsIDUxLDEwNywgIDIsMTExLDIyMywxMTEsMjQ3LDIyNSwKKyAgICAyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDE2NCwxMTEsMjM1LDIzMiwyMjUsMjM2LDIzMCwyNDcsCisgICAgMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTE0LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgOTksMTA4LAorICAgICAgMiwxMTIsICA1LDExMiwgMTAsMjI4LDEwMSwxMjgsICAyLDIyMCwyNDUsMjQ5LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwgIDUsMTcyLDEwOSwgIDIsMTEyLCAyNywxMTIsIDk0LCA5NywgIDMsMTEyLCAzNSwxMTIsCisgICAgIDU1LDExMiwgODAsMjI3LDI0MiwyMzksMTEwLDEyOSwgIDEsIDQzLDExMiwgNDQsMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIyNywyMzEsMjI5LDIzOSwyNDIsMjI1LDI0MCwyNDAsMjQyLDIzOSwKKyAgICAyNDgsMjMzLDIzNywyMjUsMjQ0LDIyOSwyMzYsMjQ5LDIyOSwyNDEsMjQ1LDIyNSwxMDgsMTI4LCAzNCwgODMsCisgICAgMjQ0LDI0MiwyMjUsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA2MywyMzksMjM4LAorICAgIDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDczLDExMCwgIDUsMTEyLDExNywxMTIsMTI3LDExMiwKKyAgICAxMzYsMTEyLDE0OCwxMTIsMjMyLDIyNywyNDIsMjI5LDIzNywyMjksMjM4LDExNiwxMjgsIDM0LCAgNiwyMzAsCisgICAgMjMzLDIzOCwyMzMsMjQ0LDEyMSwxMjgsIDM0LCAzMCwyMzMsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LAorICAgIDExMCwxMjgsICA1LDEwNywxMTYsICAyLDExMiwxNTQsMTEyLDIyMiwxMDEsICAyLDExMiwxNjAsMTEyLDIxMSwKKyAgICAyMzEsMjQyLDIyNSwxMDgsMTMxLCAzNCwgNDMsMTEyLDE3MywxMTIsMTkxLDExMiwxOTYsIDk4LCAgMiwxMTIsCisgICAgMTc5LDExMiwxODcsMjM5LDI0NCwyNDQsMjM5LDEwOSwxMjgsIDM1LCAzMywxMTYsMTI4LCAzNSwgMzMsMjI5LAorICAgIDEyMCwxMjgsMjQ4LDI0NSwxMTYsICAyLDExMiwyMDIsMTEyLDIwNywyMzksMTEyLDEyOCwgMzUsIDMyLDExMiwKKyAgICAxMjgsIDM1LCAzMiwyNDIsMjQzLDIyOSwyMjcsMjQ0LDIzMywyMzksMTEwLDEyOCwgMzQsIDQxLDIzMywyNDMsCisgICAgMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCAgNSwxMTgsICAzLDExMiwyNDAsMTEyLDI0OSwxMTMsICAyLAorICAgIDIyNiwyNDUsMjM2LDIzNiwyMjksMTE2LDEyOCwgMzcsMjE2LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwKKyAgICAgMzcsMjE3LDI0MywyMzcsMjMzLDIzNiwyMjksMjMwLDIyNSwyMjcsMTAxLDEyOCwgMzgsIDU5LDExMSwgIDMsCisgICAgMTEzLCAyMiwxMTMsIDMzLDExMywgNDEsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgICA4MSwyMzEsMjM5LDIzOCwyMjksMTA3LDEyOCwgIDEsIDQ3LDI0NCwgOTcsMTMxLCAgMywxODUsMTEzLCA1MiwKKyAgICAxMTMsIDczLDExMywgODEsMjI4LDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjksICAzLDIwMiwxMTMsCisgICAgIDY1LDI0NCwyMzksMjM4LDIzOSwxMTUsMTI4LCAgMywxNDQsMjM2LDIyNSwyNDQsMjMzLDExMCwxMjgsICAyLAorICAgIDEwNSwyNDQsMjM5LDIzOCwyMzksMTE1LDEyOCwgIDMsMTc1LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwKKyAgICAxNjQsMjQyLDIzMywyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsMTE0LDExNSwgIDQsCisgICAgMTEzLDEyMCwxMTMsMTY1LDExMywxNzksMTEzLDE4NywyMzcsMjI1LDIzNiwxMDgsICAyLDExMywxMjksMTEzLAorICAgIDE0MCwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDY3LDIzNSwyMjUsMjQ0LDIyNSwKKyAgICAyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwxNjMsMTEzLDE1MywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsCisgICAgMjQ0LDEwNCwxMjgsMjU1LDEwNCwyNDMsMjMyLDIyNSwyNDIsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LAorICAgIDEyOCwgIDksMjUwLDI0NCwyNDIsMjM5LDIzNSwxMDEsMTI4LCAgMiwxMDQsMjQ1LDI0MCwyMjksMjQyLDIzMywKKyAgICAyMzksMTE0LDEyOCwyNDYsMjM3LDExNiwgIDIsMTEzLDIwMywxMTMsMjM3LDIyOSwyNDIsMjI1LDI0NCwyMzMsCisgICAgMjM5LDExMCwgIDIsMTEzLDIxNSwxMTMsMjI2LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LAorICAgICA0OCwxNTcsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI1MywyMzMsMjM2LDIyOCwKKyAgICAxMDEsMTI5LCAgMSwgNDEsMTEzLDI0NiwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDQ1LDExNywgIDIsCisgICAgMTE0LCAgNCwxMTQsIDE1LDIyNiwyMzksMjQwLDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgNDEsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA3OCwyNDYsMjM5LDI0NywyMjksMjM2LDI0MywKKyAgICAyMzMsMjMxLDExMCwgIDMsMTE0LCA0MiwxMTQsIDUyLDExNCwgNTksMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsCisgICAgMTA1LDEyOCwgIDksMTkxLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA2MywyMzEsMjQ1LDIzNCwyMjUsMjQyLAorICAgIDIyNSwyNDQsMTA1LDEyOCwgMTAsMTkxLDI1MCwyMzIsMjMzLDI0NCwyNDMsIDk3LCAgMiwxMTQsIDgxLDExNCwKKyAgICAgOTIsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDExNywyMjgsMjI2LDIzNiwyMzEsCisgICAgMjQyLDIyNSwyNDYsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMTksMTA2LAorICAgIDEzOCwgIDAsMTA2LDExNCwxMzUsMTE0LDE5OCwxMTQsMjA5LDExNSwgIDMsMTE1LCAxOSwxMTUsMTMyLDExNSwKKyAgICAyMDEsMTE1LDIwNiwxMTUsMjE4LDExNSwyMjYsIDk3LCAgNCwxMTQsMTQ1LDExNCwxNTYsMTE0LDE2NiwxMTQsCisgICAgMTczLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMTMsMjI2LDIyOSwyMzgsMjMxLAorICAgIDIyNSwyMzYsMTA1LDEyOCwgIDksMTU2LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAyOCwyMzEsMTE3LCAgMiwKKyAgICAxMTQsMTgwLDExNCwxODksMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNTYsMjQyLDIzNywyNDUsCisgICAgMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjgsMjI2LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LAorICAgICAxNiwgOTksICAzLDExNCwyMTcsMTE0LDIyNCwxMTQsMjQ2LDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLDI0MCwKKyAgICAyMzMsMjQyLCA5OSwgIDIsMTE0LDIzMiwxMTQsMjM3LDIzNiwxMDEsMTI4LCAzNiwyMTcsMjQ1LDIzNywyMzAsCisgICAgMjM2LDIyOSwxMjAsMTI4LCAgMSwgNTMsMjQyLDIzOSwyNDMsMjQzLDIyOSwyMjgsMjQ0LDIyNSwyMzMsMTA4LAorICAgIDEyOCwgIDIsMTU3LDIyOCwyMzksMjQ0LDIzNiwyMjksMjQzLDI0MywyNDMsMjQ0LDI0MiwyMzksMjM1LDEwMSwKKyAgICAxMjgsICAyLCA5NSwxMDEsICAzLDExNSwgMjcsMTE1LCAzOCwxMTUsMTAzLDIyNywyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwgODgsMjI5LDEwOSwgIDQsMTE1LCA0OSwxMTUsIDU4LDExNSwgNzIsMTE1LAorICAgICA4OCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA0NCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwKKyAgICAyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTU4LDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE1OSwyMzcsMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE2MCwxMDQsICAyLDExNSwxMDksMTE1LDExOCwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsICA2LDE1MiwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwyNTEsMTM5LDEwNCwgIDIsMTE1LDEzOCwxMTUsMTg4LCA5NywgIDMsMTE1LDE0NiwxMTUsMTU2LAorICAgIDExNSwxNjMsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTU3LDIyOCwyMjksMjQ2LCA5NywKKyAgICAxMjgsICA5LCAyOSwyMzEsMTE3LCAgMiwxMTUsMTcwLDExNSwxNzksMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsCisgICAgMTI4LCAxMCwxNTcsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjksMjI5LDIzMiwyMjUsMjQyLAorICAgIDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsMTIzLDIzMywxMTUsMTI4LCA0OCwgIDQsMjM3LDIzOSwKKyAgICAyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNzQsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsCisgICAgIDM2LDE2NSwyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgIDIsMTc4LDEwNywxNDYsICAwLAorICAgIDEwNywxMTYsIDIxLDExOCwxMTAsMTE4LDEyMSwxMTgsMTgzLDExOCwxOTQsMTE5LCAyOCwxMTksIDQyLDEyMCwKKyAgICAxNTAsMTIxLCA5MCwxMjEsMTAzLDEyMSwxMjksMTIxLDE3OCwxMjIsIDYwLDEyMiwgODIsMTIyLCA5NSwxMjIsCisgICAgMTE4LDEyMiwxNjAsMTIyLDE3MCwgOTcsIDEyLDExNiwgNDcsMTE2LCA3OSwxMTYsMTAxLDExNiwxMzEsMTE2LAorICAgIDI0NSwxMTcsIDE0LDExNywgNDQsMTE3LCA2OSwxMTcsMTc1LDExNywxODksMTE4LCA1NiwxMTgsIDg1LCA5OCwKKyAgICAgIDIsMTE2LCA1MywxMTYsIDcwLDIyNSwyNDMsMjMyLDIzNSwyMzMsMjQyLDIyNywyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwxNjEsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxNDksIDk5LAorICAgICAgMiwxMTYsIDg1LDExNiwgOTEsMjQ1LDI0NCwxMDEsMTI4LCAzMCwgNDksMjQ5LDI0MiwyMzMsMjM2LDIzNiwKKyAgICAyMzMsIDk5LDEyOCwgIDQsIDU4LDIyOCwxMDEsICAyLDExNiwxMDgsMTE2LDEyNiwyNDMsMjI3LDIyOSwyMzgsCisgICAgMjI4LDIyOSwyNDIsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE1NSwyNDYsIDk3LAorICAgIDEyOCwgIDksIDIxLDEwMiwxMzUsICA1LDIxOSwxMTYsMTQ5LDExNiwxNTgsMTE2LDE3OCwxMTYsMTkyLDExNiwKKyAgICAyMDEsMTE2LDIxNywxMTYsMjMyLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDY3LDIyOCwyMjUsCisgICAgMjMxLDIyOSwyNDMsMTA0LDEyOSwyNTEsIDU5LDExNiwxNjksMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgIDI1MSwgNTksMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIxOCwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIxOSwyMzMsMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsCisgICAgMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMTksMjM3LDIyOSwyMjgsMjMzLDIyNSwyMzYsMjI1LAorICAgIDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMjAsMjQyLDIyNSwyMzAsMjI5LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwyNTEsIDc3LDIzMSwxMTcsICAyLDExNiwyNTIsMTE3LCAgNSwyMzQsMjI1LDI0MiwyMjUsCisgICAgMjQ0LDEwNSwxMjgsIDEwLDE0OSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCAyMSwxMDQsICAyLAorICAgIDExNywgMjAsMTE3LCAzMCwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgNzUsMjM5LDIzOSwKKyAgICAyMzUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE5NiwyMzUsMjI1LDI0NCwyMjUsCisgICAgMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMTcxLDExNywgNTcsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LAorICAgIDI0NCwxMDQsMTI4LDI1NSwxMTgsMTEyLCAgMiwxMTcsIDc1LDExNywgOTYsMjQwLCA5NywxMjksICAzLDE4NiwKKyAgICAxMTcsIDgyLDI0MywyNDksMjM3LDIyNiwyMzksMjM2LDIzMSwyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywyNDAsCisgICAgMjQ5LDIyOSwyMzksMjQ1LDExMCwgIDMsMTE3LDEwOCwxMTcsMTIyLDExNywxNTYsMjM3LDIzMywyMjksMjQ1LAorICAgIDIzNywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDExMywxMTIsICAyLDExNywxMjgsMTE3LDE0MywKKyAgICAyMzIsMjMzLDIyOSwyNDUsMjQwLDIzMiwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDEzMiwyMzMsCisgICAgMjI5LDI0NSwyNDAsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMjAsMjQzLDI0MywyMjUsMjM4LAorICAgIDIzMSwyNDAsMjMzLDIyOSwyNDUsMjQwLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTIxLDI0MiwKKyAgICAyMzksMjQyLDIzMywyMzMsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgMTMsMTE1LCAgNSwxMTcsCisgICAgMjAxLDExNywyNDUsMTE4LCAgNCwxMTgsIDEyLDExOCwgNDAsMjMyLDIzMywyMjgsMjI1LDIyNSwyNDUsMjQ0LAorICAgIDExMSwgIDIsMTE3LDIxNCwxMTcsMjIzLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDY0LDIzOCwKKyAgICAyMzksMjQzLDIzMywyMjgsMjI5LDIyNiwyMjksMjI1LDI0MiwyMzMsMjM4LDIzMSwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsICA2LCA2NCwyMzcsMjI1LDIzNiwyMzYsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LAorICAgICA5NywxMjgsIDQ4LDI0NSwyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTMyLDI0MiwgOTcsICAyLDExOCwKKyAgICAgMTksMTE4LCAyOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA4MCwyNDQsMjI1LDIzOCwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA3NywyNDQsMjQyLDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNTksMjQ0LDIyNSwyMzIsMjMzLDI0MiwyMjUsMjQwLDI0MiwKKyAgICAyMzksMjM2LDIzOSwyMzgsMjMxLDIzNywyMjUsMjQyLDIzNSwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsCisgICAgMjQ0LDEwNCwxMjgsMjU1LDExMiwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMjM2LDI0MywyNDQsMjQyLAorICAgIDIzOSwyMzUsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNTcsMjI2LDIzOSwKKyAgICAyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAxNCwgOTksICA0LDExOCwxMzEsMTE4LDE1MywxMTgsCisgICAgMTYyLDExOCwxNzAsIDk3LCAgMiwxMTgsMTM3LDExOCwxNDcsMjM2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLAorICAgIDEyOCwgNTEsMTM3LDI0MiwyMzksMTEwLDEyOCwgIDEsMjMzLDIyOSwyMjgsMjMzLDIzNiwyMzYsIDk3LDEyOCwKKyAgICAgIDEsIDU1LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNiwyMTgsMjM5LDIzNywyMzcsMjI1LDIyNSwyMjcsCisgICAgMjI3LDIyOSwyMzgsMTE2LDEyOCwgIDEsIDU1LDIyOCwyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LAorICAgICAzMCwgNTEsMTAxLCAgNCwxMTgsMjA0LDExOCwyMzEsMTE5LCAgMCwxMTksIDEyLDEwNCwgIDIsMTE4LDIxMCwKKyAgICAxMTgsMjIxLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMzIsMjMzLDI0MiwyMjUsCisgICAgMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDgxLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LAorICAgICA0OCwxNzcsMTE4LDI0NCwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEyMSwKKyAgICAyMzgsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDExMSwyNDMsMjM3LDIyNSwyMzYsCisgICAgMjM2LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyNDYsMjMxLDI0MiwyMjksMjI5LAorICAgIDIzOCwyMzYsMjI1LDIzOCwyMjgsMjMzLCA5OSwxMjgsICAxLCA1NiwxMDQsICA2LDExOSwgNTYsMTE5LDE4NSwKKyAgICAxMTksMTk2LDExOSwyMjEsMTIwLCA1MiwxMjAsMTQwLCA5NywgIDUsMTE5LCA2OCwxMTksIDc4LDExOSwgODksCisgICAgMTE5LCA5NiwxMTksMTIxLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE1MCwyMjcsMjQ5LAorICAgIDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDY5LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAyMiwKKyAgICAyMzEsMTE3LCAgMiwxMTksMTAzLDExOSwxMTIsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNTAsCisgICAgMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjIsMTA0LCAgNCwxMTksMTMxLDExOSwxNDAsMTE5LAorICAgIDE1NCwxMTksMTcwLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDQ2LDIzMCwyMzMsMjM4LDIyNSwKKyAgICAyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxNjYsMjMzLDIzOCwyMzMsMjQ0LDIzMywyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTY3LDIzNywyMjksMjI4LDIzMywyMjUsMjM2LAorICAgIDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTY4LDIyOSwyMzMsMjI3LDIzOSwyNDAsMjQ0LDIzMywKKyAgICAgOTksMTI4LCAgMywyMzEsMjMyLCA5NywgIDIsMTE5LDIwMywxMTksMjEwLDIyOCwyMjksMjQ2LCA5NywxMjgsCisgICAgICA5LCA4OSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDg5LDIzMywyMjksMjQ1LAorICAgIDIzNSwxMDQsICA0LDExOSwyMzUsMTIwLCAxNCwxMjAsIDI5LDEyMCwgMzgsIDk3LCAgMiwxMTksMjQxLDEyMCwKKyAgICAgIDAsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwxMjAsCisgICAgMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAyNCwyMjcsMjMzLAorICAgIDI0MiwyMjcsMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLDEwNiwyMzUsMjM5LDI0MiwKKyAgICAyMjksMjI1LDExMCwxMjgsIDQ5LCA3NSwyNDAsMjI1LDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsCisgICAgMTEwLDEyOCwgNTAsIDEwLDExMSwgIDQsMTIwLCA2MiwxMjAsMTExLDEyMCwxMjEsMTIwLDEyNiwyMzUsMTA0LAorICAgICAgNCwxMjAsIDczLDEyMCwgODIsMTIwLCA5MSwxMjAsMTAxLDIyNSwyMzMsMjQ0LDIzMiwyMjUsMTA1LDEyOCwKKyAgICAgMTQsICAyLDIzOSwyMzgsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsICA1LDI0NSwyMjUsMjQ0LDI0NCwyMzIsCisgICAgMjI1LDEwNSwxMjgsIDE0LCAgMywyNDcsMjI1LDIzMywyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgIDQsMjM3LAorICAgIDI0NSwyNDQsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDkxLDIzOSwxMDcsMTI4LCAgMSwxNTMsMjQyLDIyNSwKKyAgICAyMzUsMjMyLDIyNSwyMzgsMjMxLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAgNiwyNTAsMjQzLDI0MSwyNDUsCisgICAgMjI1LDI0MiwxMDEsMTI4LCA1MSwxNDUsMTA1LCAgNCwxMjAsMTYwLDEyMCwxNzEsMTIwLDE5NiwxMjAsMjQ1LAorICAgIDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgNzcsMjM1LDIyNSwyNDQsMjI1LDIzNSwKKyAgICAyMjUsMjM4LCA5NywxMjksIDQ4LDE3MywxMjAsMTg0LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsCisgICAgMTA0LDEyOCwyNTUsMTE5LDI0MiwxMTEsICAzLDEyMCwyMDUsMTIwLDIyMCwxMjAsMjM2LDIzMSwyNDUsMjQyLAorICAgIDIyNSwyMzcsMjQ1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDIxLDIzNywyMjksMjI5LDI0NCwKKyAgICAyMzksMjQyLDI0NSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCAyMiwyNDMsMjQxLDI0NSwyMjUsCisgICAgMjQyLDEwMSwxMjgsIDUxLCAyMCwyNDksMjI5LDIzOSwxMDcsICA1LDEyMSwgIDQsMTIxLCAzOSwxMjEsIDU0LAorICAgIDEyMSwgNjMsMTIxLCA3NywgOTcsICAyLDEyMSwgMTAsMTIxLCAyNSwyMjcsMjMzLDI0MiwyMjcsMjM2LDIyOSwKKyAgICAyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLDExMCwyNDAsMjI1LDI0MiwyMjksMjM4LDIzNSwyMzksCisgICAgMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsIDE0LDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLAorICAgIDIyOSwyMjUsMTEwLDEyOCwgNTAsIDk2LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDQ5LDI0MCwKKyAgICAyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgIDAsMjQzLDIzMywyMzksCisgICAgMjQzLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDUxLDIzNCwyMjksMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA5MiwxMDgsICAyLDEyMSwxMDksMTIxLDEyMCwyMzMsMjM4LDIyOSwKKyAgICAyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsIDUzLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsCisgICAgMTUyLDEwOSwgIDMsMTIxLDEzNywxMjEsMTUxLDEyMSwxNjIsMjI3LDI0NSwyMjYsMjI5LDIyOCwyNDMsMjQxLAorICAgIDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE2NiwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsIDc1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMjI5LDIyOCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsCisgICAgIDUxLDE2MiwxMTEsICA1LDEyMSwxOTAsMTIxLDIxNiwxMjEsMjU0LDEyMiwgMTAsMTIyLCAyNCwxMDQsICAyLAorICAgIDEyMSwxOTYsMTIxLDIwNiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgODMsMjM3LDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTkyLDIzNSwgOTcsICAyLDEyMSwyMjMsMTIxLDIzMSwyMzMsCisgICAgMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsICAxLDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMTc5LAorICAgIDEyMSwyNDIsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMjIsMjM5LDI0MCwKKyAgICAyMzksMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgMzAsMjQwLDI0MCwyMjUsMjI3LDI0OSwyNDIsCisgICAgMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDEyOSwxMTQsICAyLDEyMiwgMzAsMTIyLCA1MCwyMjksMjI1LAorICAgIDIzOCwyNDMsMjQ0LDIyNSwyMzgsMjI4LDIyNSwyNDIsMjI4LDI0MywyNDksMjM3LDIyNiwyMzksMTA4LDEyOCwKKyAgICAgNTAsMTI3LDIzOSwyMzgsMjMzLDI0MywyMjcsMjM3LCA5OCwxMjgsICAzLCA2NywyNDAsIDk3LCAgMiwxMjIsCisgICAgIDY3LDEyMiwgNzMsMjQyLDIyOSwxMTAsMTI4LCAzNiwxNjYsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LAorICAgICA1MSwxNzAsMjQzLDIzMywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTExLDExNiwKKyAgICAgIDIsMTIyLDEwMSwxMjIsMTEwLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMjA3LDI0NSwyNDIsCisgICAgMjM4LDIyOSwxMDAsMTI4LCAgMiwxNTgsMTE3LCAgMiwxMjIsMTI0LDEyMiwxMzUsMjMyLDIzMywyNDIsMjI1LAorICAgIDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LCA3OSwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwKKyAgICAgNDgsMTc1LDEyMiwxNDgsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMjAsCisgICAgMjQ2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTg0LDI0NywyNDMsMjQxLDI0NSwyMjUsMjQyLAorICAgIDEwMSwxMjgsIDUxLDE5MCwxMDgsMTQ2LCAgMCwxMDgsMTIyLDIyMCwxMjQsMjQ3LDEyNSwgMjAsMTI1LCA4NiwKKyAgICAxMjUsMTI0LDEyNiwgMjAsMTI2LCAyOSwxMjYsIDQ1LDEyNiwgNjksMTI2LCA4NywxMjYsMjA1LDEyNiwyNDYsCisgICAgMTI3LDEyNSwxMjcsMTMzLDEyNywxNjYsMTI3LDE3NSwxMjcsMTgzLDEyNywyNDUsIDk3LCAgNywxMjIsMjM2LAorICAgIDEyMiwyNDYsMTIyLDI1MywxMjMsICA0LDEyMywgMjksMTIzLCA0NSwxMjQsMjM1LDIyNiwyMjksMjM4LDIzMSwKKyAgICAyMjUsMjM2LDEwNSwxMjgsICA5LDE3OCwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMSwgNTgsMjI4LDIyOSwyNDYsCisgICAgIDk3LDEyOCwgIDksIDUwLDIzMSwxMTcsICAyLDEyMywgMTEsMTIzLCAyMCwyMzQsMjI1LDI0MiwyMjUsMjQ0LAorICAgIDEwNSwxMjgsIDEwLDE3OCwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA1MCwyMzUsMjM1LDIzMiwKKyAgICAyMjUsMjM4LDIzMSwyNDksMjI1LDIzOSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNjksMTA5LCAxMCwxMjMsCisgICAgIDY3LDEyNCwgIDYsMTI0LCAyMywxMjQsIDYxLDEyNCwgNzUsMTI0LCA5NCwxMjQsMTEwLDEyNCwxMzAsMTI0LAorICAgIDE1MCwxMjQsMTczLCA5NywgIDIsMTIzLCA3MywxMjMsMjU0LDIzNiwyMjksMTAyLCAgNCwxMjMsIDg1LDEyMywKKyAgICAgOTksMTIzLDE5MSwxMjMsMjA4LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksCisgICAgMTI4LDI1NCwyNTIsMjMyLDIyNSwyMzcsMjUwLCA5NywgIDIsMTIzLDEwOSwxMjMsMTUwLDIyNSwyMjYsMjM5LAorICAgIDI0NiwxMDEsICAyLDEyMywxMTksMTIzLDEzMywyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwKKyAgICAyMzMsIDk5LDEyOCwyNTQsMjQ4LDIzMywyNDMsMjM5LDIzNiwyMjUsMjQ0LDIyOSwyMjgsMjI1LDI0MiwyMjUsCisgICAgMjI2LDIzMywgOTksMTI4LDI1NCwyNDcsMjI2LDIyOSwyMzYsMjM5LDExOSwgIDIsMTIzLDE2MCwxMjMsMTc0LAorICAgIDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyNTAsMjMzLDI0MywKKyAgICAyMzksMjM2LDIyNSwyNDQsMjI5LDIyOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDI0OSwyMzMsCisgICAgMjQzLDIzOSwyMzYsMjI1LDI0NCwyMjksMjI4LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjUxLAorICAgIDIzNywyMjUsMjI4LDIyOCwyMjUsMjI1LDIyNiwyMzksMjQ2LDEwMSwgIDIsMTIzLDIyMywxMjMsMjM3LDIzMCwKKyAgICAyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyNDYsMjMzLDI0MywyMzksCisgICAgMjM2LDIyNSwyNDQsMjI5LDIyOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDI0NSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwgIDYsIDY4LDIyNiwyMjgsIDk3LDEyOSwgIDMsMTg3LDEyNCwgMTQsMjQzLDI0NCwKKyAgICAyNDIsMjM5LDIzNSwxMDEsMTI4LCAgMSwxNTUsMjI5LDEwMCwxMzAsICA1LDIyMCwxMjQsIDMyLDEyNCwgNTIsCisgICAgMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNjAsMTI0LCA0MywyMzIsMjI5LDIyNiwyNDIsMjI5LAorICAgIDExOSwxMjgsMjUxLCA2MCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIyMCwyMzAsMjMzLDIzOCwKKyAgICAyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjIyLDIzMiwyMjUsMjMyLDIzMywyMzgsCisgICAgMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLDIwMiwyMzMsMjM4LAorICAgIDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwyMjMsMjM0LDIyOSwKKyAgICAyMjksMjM3LDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgMjUyLDIwMSwyMzUsMjMyLDIyNSwyMzIsMjMzLDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwyNTIsMjAzLDIzNiwyMjUsMjM3LDIzMiwyMjksMjMyLDIzMywyNDMsMjM5LDIzNiwKKyAgICAyMjUsMjQ0LDIyOSwyMjgsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MywyNDIsMjM3LDEwMSwgIDIsCisgICAgMTI0LDE4MCwxMjQsMTkzLDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LAorICAgIDIyNCwyMjksMTA5LCAgMiwxMjQsMjAwLDEyNCwyMTksMjMyLDIyNSwyMzIsMjMzLDIzOCwyMzMsMjQ0LDIzMywKKyAgICAyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTMsMTM2LDIzMywyMzgsMjMzLDI0NCwyMzMsCisgICAgMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLDIwNCwyNDIsMjMxLDIyOSwyMjcsMjMzLAorICAgIDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM3LDIzOSwgOTgsICAzLDEyNCwyNTUsMTI1LCAgNCwxMjUsIDEwLDIyNSwKKyAgICAxMTQsMTI4LCAgMSwxNTQsMjI5LDIzNiwxMTYsMTI4LCAgMiwxMDgsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsCisgICAgMTExLDEyOCwgNDksIDEyLCA5OSwgIDQsMTI1LCAzMCwxMjUsIDM3LDEyNSwgNDYsMTI1LCA3MywyMjUsMjQyLAorICAgIDIzOSwxMTAsMTI4LCAgMSwgNjIsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwgNjAsMjMzLDI0MiwKKyAgICAgOTksICAyLDEyNSwgNTQsMTI1LCA1OSwyMzYsMTAxLDEyOCwgMzYsMjE5LDI0NSwyMzcsMjMwLDIzNiwyMjksCisgICAgMjQ4LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgNjEsMjM5LDIzNywyMzcsMjI1LDIyNSwyMjcsMjI3LAorICAgIDIyOSwyMzgsMTE2LDEyOCwgIDEsIDYwLDIyOCwyMzksMTE2LDEzMCwgIDEsIDY0LDEyNSwgOTYsMTI1LDEwNSwKKyAgICAyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsICAxLCA2NCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOSwgMzAsCisgICAgIDU1LDEyNSwxMTUsMjM3LDIyNSwyMjcsMjQyLDIzOSwxMTAsMTI4LCAzMCwgNTcsMTAxLCAgMywxMjUsMTMyLAorICAgIDEyNSwxNzAsMTI2LCAxNSwyMzAsMTE2LCAgMiwxMjUsMTM5LDEyNSwxNTUsMjI1LDIzOCwyMzEsMjM2LDIyOSwKKyAgICAyMjUsMjI2LDIzOSwyNDYsMjI5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDI2LDI0NCwyMjUsMjI3LDIzNSwyMjYsCisgICAgMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDI0LDI0MywxMTUsMTMyLCAgMCwgNjAsMTI1LAorICAgIDE4MywxMjUsMjA1LDEyNSwyMTcsMTI2LCAgNywyMjksMjQxLDI0NSwyMjUsMTA4LDEyOSwgMzQsMTAwLDEyNSwKKyAgICAxOTMsMjM5LDI0MiwyMzEsMjQyLDIyOSwyMjUsMjQ0LDIyOSwxMTQsMTI4LCAzNCwyMTgsMjM3LDIzOSwyMzgsCisgICAgMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMjgsMTExLCAgMiwxMjUsMjIzLDEyNSwyNTIsMTE0LAorICAgICAgMiwxMjUsMjI5LDEyNSwyNDIsMjI5LDI0MSwyNDUsMjMzLDI0NiwyMjUsMjM2LDIyOSwyMzgsMTE2LDEyOCwKKyAgICAgMzQsMTE0LDIzMSwyNDIsMjI5LDIyNSwyNDQsMjI5LDExNCwxMjgsIDM0LDExOCwyNDYsMjI5LDI0MiwyMjksCisgICAgMjQxLDI0NSwyMjUsMTA4LDEyOCwgMzQsMTAyLDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI1NCwxMDAsMjUwLAorICAgIDEwNCwxMjgsICAyLDExMCwyMzAsMjI2LDIzNiwyMzksMjI3LDEwNywxMjgsIDM3LDE0MCwyMzIsMjM5LDIzOSwKKyAgICAyMzUsMjQyLDIyOSwyNDQsMjQyLDIzOSwyMzAsMjM2LDIyOSwxMjAsMTI4LCAgMiwxMDksMTA1LCAgMiwxMjYsCisgICAgIDUxLDEyNiwgNTYsMjQyLCA5NywxMjgsIDMyLDE2NCwyNDcsMjM4LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLAorICAgIDIyNSwxMTAsMTI4LCAgNSwxMDgsMTA2LDEyOSwgIDEsMjAxLDEyNiwgNzUsMjI5LDIyNywyNDksMjQyLDIzMywKKyAgICAyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgODksMTA4LDEzMiwyNDYsMTkyLDEyNiwgOTksMTI2LDEyMywxMjYsCisgICAgMTM0LDEyNiwxNDMsIDk3LCAgMiwxMjYsMTA1LDEyNiwxMTIsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDUxLAorICAgIDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNzksMjMzLDIzOCwyMjksMjI2LDIyOSwKKyAgICAyMzYsMjM5LDExOSwxMjgsIDMwLCA1OSwyMzYsMjI1LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA1MiwyNDYsCisgICAgMjM5LDIyNywyMjUsMjM2LDIzMywgOTksICAzLDEyNiwxNTcsMTI2LDE2NywxMjYsMTc0LDIyNiwyMjksMjM4LAorICAgIDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIyNSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgOTcsMjQ2LDIzOSwKKyAgICAyNDcsMjI5LDIzNiwyNDMsMjMzLDIzMSwxMTAsICAyLDEyNiwxODgsMTI2LDE5OCwyMjYsMjI5LDIzOCwyMzEsCisgICAgMjI1LDIzNiwxMDUsMTI4LCAgOSwyMjcsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDk5LDEwOSwgIDMsMTI2LAorICAgIDIxMywxMjYsMjI2LDEyNiwyMzcsMjMzLDIyOCwyMjgsMjM2LDIyOSwyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwKKyAgICAgIDIsMTA3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNzYsMjQzLDI0MSwyNDUsCisgICAgMjI1LDI0MiwxMDEsMTI4LCA1MSwyMDgsMTExLCAgNiwxMjcsICA0LDEyNywgMTYsMTI3LCA1OCwxMjcsIDY5LAorICAgIDEyNywgNzUsMTI3LDExNywyMjcsMjMyLDI0NSwyMzYsMjI1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA0NCwKKyAgICAyMzEsMjMzLDIyNywyMjUsMTA4LCAgMywxMjcsIDI4LDEyNywgMzQsMTI3LCA1MywyMjUsMjM4LDEwMCwxMjgsCisgICAgIDM0LCAzOSwyMzgsMjM5LDExNiwxMjksICAwLDE3MiwxMjcsIDQyLDI0MiwyMjksMjQ2LDIyOSwyNDIsMjQzLAorICAgIDIyOSwxMDAsMTI4LCAzNSwgMTYsMjM5LDExNCwxMjgsIDM0LCA0MCwyMzYsMjMzLDIzOCwyMzEsMjQ0LDIzMiwKKyAgICAyMjUsMTA1LDEyOCwgMTQsIDM3LDIzOCwyMzEsMTE1LDEyOCwgIDEsMTI3LDI0NywyMzYsMjMzLDIzOCwxMDEsCisgICAgICAyLDEyNywgODUsMTI3LDEwOCwgOTksICAyLDEyNywgOTEsMTI3LDEwMywyMjksMjM4LDI0NCwyMjksMjQyLAorICAgIDIzNiwyMzMsMjM4LDEwMSwxMjgsMjU0LCA3OCwyMzcsIDk4LDEyOCwgIDMsIDUwLDIyOCwyMjUsMjQzLDIzMiwKKyAgICAyMjksMTAwLDEyOCwyNTQsIDc3LDI1MCwyMjksMjM4LDIzMSwxMDEsMTI4LCAzNywyMDIsMjQwLDIyNSwyNDIsCisgICAgMjI5LDExMCwxMjgsIDM2LDE2NywxMTUsICAzLDEyNywxNDEsMTI3LDE0OCwxMjcsMTU2LDIzNiwyMjUsMjQzLAorICAgIDEwNCwxMjgsICAxLCA2NiwyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgMzMsIDE5LDI0NSwyNDAsMjI5LDI0MiwKKyAgICAyMzMsMjM5LDExNCwxMjgsMjQ2LDIzOCwyNDQsMjQzLDIzMiwyMjUsMjI4LDEwMSwxMjgsIDM3LDE0NSwyNDUsCisgICAgMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDM4LDI0NiwyMzksMjI3LDIyNSwyMzYsMjMzLCA5OSwgIDMsMTI3LAorICAgIDE5NywxMjcsMjA3LDEyNywyMTQsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTQwLDIyOCwKKyAgICAyMjksMjQ2LCA5NywxMjgsICA5LCAxMiwyNDYsMjM5LDI0NywyMjksMjM2LDI0MywyMzMsMjMxLDExMCwgIDIsCisgICAgMTI3LDIyOCwxMjcsMjM4LDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIyNiwyMjgsMjI5LAorICAgIDI0NiwgOTcsMTI4LCAgOSwgOTgsMjQ4LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMjExLDEwOSwKKyAgICAxNDQsICAwLDEwOSwxMjgsIDM1LDEzMCwxNDQsMTMwLDE2OSwxMzAsMTk2LDEzMCwyMjEsMTMyLCAxOCwxMzIsCisgICAgIDQwLDEzMywgOTUsMTMzLDEyNSwxMzMsMTc0LDEzNCwgMjUsMTM0LCA0NywxMzQsIDcyLDEzNCwgODEsMTM1LAorICAgIDEwOCwxMzUsMTM2LCA5NywgMTIsMTI4LCA2MSwxMjgsIDcxLDEyOCwxMzUsMTI4LDE0MiwxMjgsMTY3LDEyOCwKKyAgICAyMTUsMTMwLCA1MSwxMzAsIDc2LDEzMCwgODEsMTMwLCA5NSwxMzAsMTA3LDEzMCwxMTIsMjI2LDIyOSwyMzgsCisgICAgMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTc0LCA5OSwgIDIsMTI4LCA3NywxMjgsMTI5LDI0MiwyMzksMTEwLAorICAgIDEzMiwgIDAsMTc1LDEyOCwgOTEsMTI4LDEwMiwxMjgsMTA4LDEyOCwxMTcsMjI2LDIyOSwyMzYsMjM5LDI0NywKKyAgICAyMjcsMjM3LCA5OCwxMjgsICAzLCA0OSwyMjcsMjM3LCA5OCwxMjgsICAzLCAgNCwyMzYsMjM5LDI0NywyMzcsCisgICAgMjM5LDEwMCwxMjgsICAyLDIwNSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LAorICAgIDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA2MywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNDYsMjMxLDExNywKKyAgICAgIDIsMTI4LDE0OSwxMjgsMTU4LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTc0LDI0MiwyMzcsCisgICAgMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDQ2LDEwNCwgIDIsMTI4LDE3MywxMjgsMjA1LDIyNSwyNDAsMjI1LAorICAgIDIzNSwxMDQsICAyLDEyOCwxODMsMTI4LDE5MiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE2NCwKKyAgICAyMzYsMjI5LDIzMCwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNjQsMjMzLDI0MiwyMjUsCisgICAgMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTI2LDEwNSwgIDUsMTI4LDIyNywxMjksIDQwLDEyOSwxMDMsMTI5LAorICAgIDEzMywxMzAsIDM5LDIyNywyMzIsMjI1LDI0NCwyNDQsMjI1LDI0NywgOTcsICAzLDEyOCwyNDIsMTI5LCAxNywKKyAgICAxMjksIDI0LDIzNiwyMzksMTE5LCAgMiwxMjgsMjUwLDEyOSwgIDUsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsCisgICAgMjI1LDEwNSwxMjgsMjQ4LDE0OSwyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LAorICAgIDE0OCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNzUsMjQ1LDI0MCwyNDAsMjI5LDI0MiwyMzYsMjI5LDIzMCwKKyAgICAyNDQsMjQ0LDIzMiwyMjUsMTA1LDEyOCwyNDgsMTQ3LDIyOSwxMDcsICAzLDEyOSwgNDksMTI5LCA4MCwxMjksCisgICAgIDg3LDIzNiwyMzksMTE5LCAgMiwxMjksIDU3LDEyOSwgNjgsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LAorICAgIDEwNSwxMjgsMjQ4LDE0MCwyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LDEzOSwKKyAgICAyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNzIsMjQ1LDI0MCwyNDAsMjI5LDI0MiwyMzYsMjI5LDIzMCwyNDQsCisgICAgMjQ0LDIzMiwyMjUsMTA1LDEyOCwyNDgsMTM4LDIzMiwyMjUsMjM4LDIyNSwyMzUsMjI1LDExNiwgIDIsMTI5LAorICAgIDExNSwxMjksMTI2LDIzNiwyMjksMjMwLDI0NCwyNDQsMjMyLDIyNSwxMDUsMTI4LDI0OCwxMzIsMjQ0LDIzMiwKKyAgICAyMjUsMTA1LDEyOCwgMTQsIDQ5LDExNiwgIDMsMTI5LDE0MSwxMjksMTY5LDEyOSwyMzIsMjI1LDIzMywyMzUsCisgICAgMjMyLDExNywgIDIsMTI5LDE1MSwxMjksMTYyLDIzNiwyMjksMjMwLDI0NCwyNDQsMjMyLDIyNSwxMDUsMTI4LAorICAgIDI0OCwxMzcsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDcxLDIzMiwxMTEsICAzLDEyOSwxNzgsMTI5LDIwOSwKKyAgICAxMjksMjE2LDIzNiwyMzksMTE5LCAgMiwxMjksMTg2LDEyOSwxOTcsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsCisgICAgMjI1LDEwNSwxMjgsMjQ4LDE0MywyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LAorICAgIDE0MiwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNzMsMjQ1LDI0MCwyNDAsMjI5LDI0MiwyMzYsMjI5LDIzMCwKKyAgICAyNDQsMjQ0LDIzMiwyMjUsMTA1LDEyOCwyNDgsMTQxLDI0MiwxMDUsICAzLDEyOSwyNDEsMTMwLCAxNiwxMzAsCisgICAgIDIzLDIzNiwyMzksMTE5LCAgMiwxMjksMjQ5LDEzMCwgIDQsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LAorICAgIDEwNSwxMjgsMjQ4LDE0NiwyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LDE0NSwKKyAgICAyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNzQsMjQ1LDI0MCwyNDAsMjI5LDI0MiwyMzYsMjI5LDIzMCwyNDQsCisgICAgMjQ0LDIzMiwyMjUsMTA1LDEyOCwyNDgsMTQ0LDI0OSwyMjUsMjM3LDIzOSwyMzUsMjQ0LDIzMiwyMjUsMTA1LAorICAgIDEyOCwgMTQsIDcwLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMjIsMTMwLCA2NCwKKyAgICAyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDE0MywyMzYsMTAxLDEyOCwgMzgsCisgICAgIDY2LDIzOCwyNDMsMjQ5LDIzOSwyMzgsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgNzEsMjQxLAorICAgIDIyNSwyMzAsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxOTAsMjQyLDExNSwxMjgsIDM4LCA2NiwKKyAgICAxMTUsICAyLDEzMCwxMTgsMTMwLDEzNiwyMzksMjQyLDIyNSwyMjcsMjMzLDI0MiwyMjcsMjM2LDIyOSwyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3NSwyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTMxLAorICAgICA5OCwgIDIsMTMwLDE1MCwxMzAsMTYwLDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAgNywKKyAgICAyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDIxMiwgOTksICAyLDEzMCwxNzUsMTMwLDE4MywyMzMsCisgICAgMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMjIwLDI0NSwyMjYsMjI5LDIyOCwyNDMsMjQxLDI0NSwyMjUsMjQyLAorICAgIDEwMSwxMjgsIDUxLDE2NSwyMjgsMjM5LDExNiwgIDIsMTMwLDIwNCwxMzAsMjEzLDIyNSwyMjcsMjI3LDIyOSwKKyAgICAyMzgsMTE2LDEyOCwgMzAsIDY1LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgNjcsMTAxLCAgNywxMzAsCisgICAgMjM3LDEzMSwxMDgsMTMxLDExOSwxMzEsMTM0LDEzMSwxNTksMTMxLDE5NiwxMzEsMjA4LDEwMSwgIDIsMTMwLAorICAgIDI0MywxMzEsIDk1LDEwOSwgIDQsMTMwLDI1MywxMzEsICA2LDEzMSwgMjAsMTMxLCAzNiwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsICA2LCA2OSwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwyNTQsMjI2LDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsMjU0LDIyNywyMzcsMTAxLCAgMiwxMzEsIDQzLDEzMSwgNTYsMjI4LDIzMywyMjUsMjM2LDIyNSwKKyAgICAyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjI4LDIyOSwyMzcsMTA1LCAgMiwxMzEsIDY0LDEzMSwgNzksCisgICAgMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MiwyMDksMjQzLAorICAgIDIzOSwyMzYsMjI1LDI0NCwyMjksMjI4LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsIDcyLDI0NCwKKyAgICAyMzksMjQyLDI0NSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCA3NywyMzIsMjMzLDI0MiwyMjUsCisgICAgMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTI5LDIzMywyNTAsMjMzLDIyOSwyNDIsMjI1LDI0MywyNDEsMjQ1LAorICAgIDIyNSwyNDIsMTAxLDEyOCwgNTEsMTI2LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwKKyAgICAyMjUsMTMxLDE0NywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDE0NiwxMDksCisgICAgMTMwLCAgNSwyMjIsMTMxLDE2NywxMzEsMTg3LDIyOCwyMjUsMjMxLDIyOSwyNDMsMTA0LDEyOSwyNTEsIDYyLAorICAgIDEzMSwxNzgsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LDI1MSwgNjIsMjMyLDIyOSwyMjYsMjQyLDIyOSwKKyAgICAxMTksMTI4LCAgNSwyMjIsMjM4LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMTYsCisgICAgMjQyLDIzNSwyMzIsIDk3LCAgMywxMzEsMjE5LDEzMSwyMjgsMTMyLCAgNSwyMzIsMjI5LDIyNiwyNDIsMjI5LAorICAgIDExOSwxMjgsICA1LDE2NSwyMzUsMjI5LDIzMCwyNDUsMjM2LCA5NywgIDIsMTMxLDIzOSwxMzEsMjQ4LDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTY2LDIzNiwyMjksMjMwLDI0NCwyMzIsMjI5LDIyNiwyNDIsCisgICAgMjI5LDExOSwxMjgsICA1LDE2NiwyMzYsMjI5LDIzMCwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwxNjUsMTA0LCAgMiwxMzIsIDI0LDEzMiwgMzAsMjM5LDIzOSwxMDcsMTI4LCAgMiwxMTMsMjUwLDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTQ2LDEwNSwgIDYsMTMyLCA1NCwxMzIsIDkxLDEzMiwyMjgsCisgICAgMTMyLDIzOSwxMzMsICA4LDEzMywgNjUsMjI4LDEwMCwgIDIsMTMyLCA2MSwxMzIsIDg2LDIzNiwyMjksMjI4LAorICAgIDIzOSwyNDQsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LDIyNSwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywKKyAgICAyMjgsMjQ0LDEwNCwxMjgsMjU1LDEwMSwyMzksMTE2LDEyOCwgIDAsMTgzLDIyOSwyNDUsMTA5LCAgNSwxMzIsCisgICAgMTA1LDEzMiwxNDAsMTMyLDE1NSwxMzIsMTY0LDEzMiwyMTUsIDk3LCAgMiwxMzIsMTExLDEzMiwxMjYsMjI3LAorICAgIDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwxMTQsMjQwLDIyNSwKKyAgICAyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAxOCwyMjcsMjMzLDI0MiwyMjcsCisgICAgMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLDEwMCwyMzUsMjM5LDI0MiwyMjksMjI1LAorICAgIDExMCwxMjgsIDQ5LCA2NSwxMTIsICAyLDEzMiwxNzAsMTMyLDIwMiwgOTcsICAyLDEzMiwxNzYsMTMyLDE5MCwKKyAgICAyMzgsMjQzLDIzMywyMzksMjQzLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTEyLDI0MiwyMjksCisgICAgMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsICA0LDIzMywyMjksMjQ1LDI0MCwyMzUsMjM5LAorICAgIDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDExMCwyNDMsMjMzLDIzOSwyNDMsMjM1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA0OSwxMTEsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEyNywyMzUsCisgICAgMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMjIzLDEzMiwyNTIsMjMyLDIyNSwyMzYsMjMwLAorICAgIDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxNDQsMjM4LDExNywgIDIsMTMzLCAxNSwxMzMsIDYwLDExNSwKKyAgICAxMzIsIDM0LCAxOCwxMzMsIDI3LDEzMywgMzgsMTMzLCA0NywxMzMsIDUzLDIyNiwyMjksMjM2LDIzOSwyNDcsCisgICAgMjI3LDIzNywgOTgsMTI4LCAgMywgMzIsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNCwxNTAsMjM3LAorICAgIDIzOSwxMDAsMTI4LCAgMiwyMTUsMjQwLDIzNiwyNDUsMTE1LDEyOCwgMzQsIDE5LDI0NCwxMDEsMTI4LCAzMiwKKyAgICAgNTAsMjQyLDEwNSwgIDIsMTMzLCA3MiwxMzMsIDg2LDIyNiwyMjUsMjI1LDI0MiwyNDUsMjQzLDI0MSwyNDUsCisgICAgMjI1LDI0MiwxMDEsMTI4LCA1MSwgNzQsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgNzMsMTA4LAorICAgICAgMiwxMzMsMTAxLDEzMywxMTYsMjM5LDIzOCwyMzEsMjM2LDIyOSwyMzEsMjQ0LDI0NSwyNDIsMjM4LDIyOSwKKyAgICAxMDAsMTI4LCAgMiwxMTIsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxNTAsMTA5LCAgMywxMzMsCisgICAgMTMzLDEzMywxNDcsMTMzLDE1OCwyMjcsMjQ1LDIyNiwyMjksMjI4LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLAorICAgIDEyOCwgNTEsMTYzLDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgNzcsMjQzLDI0MSwKKyAgICAyNDUsMjI1LDI0MiwyMjksMjI4LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTU5LDExMSwgIDUsCisgICAgMTMzLDE4NiwxMzMsMjEyLDEzMywyMzcsMTMzLDI0NywxMzQsICAwLDEwNCwgIDIsMTMzLDE5MiwxMzMsMjAyLAorICAgIDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEzMCwyMzcsMjQzLDI0MSwyNDUsMjI1LDI0MiwKKyAgICAxMDEsMTI4LCA1MSwxOTMsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIyNiwxMzMsCisgICAgMjI1LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTQ3LDIzNiwyNDMsMjQxLAorICAgIDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDIxNCwyMzcsMjI1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAzMywKKyAgICAyNDYsMjI5LDI0MiwyNDMsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI5LCA1MSwxNjcsMTM0LCAxNSwyMjgsCisgICAgMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxNjgsMjQwLCA5NywgIDIsMTM0LCAzMiwxMzQsIDM4LAorICAgIDI0MiwyMjksMTEwLDEyOCwgMzYsMTY4LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTcxLDExNSwKKyAgICAgIDIsMTM0LCA1MywxMzQsIDYyLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTc5LDI0NSwyNDAsCisgICAgMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDIzOSwyNDQsMjQ1LDI0MiwyMzgsMjI5LDEwMCwxMjgsICAyLAorICAgIDExMSwxMTcsMTQxLCAgMCwxODEsMTM0LDExMSwxMzQsMTE1LDEzNCwxMjUsMTM0LDE0OSwxMzQsMTU5LDEzNCwKKyAgICAxODEsMTM0LDE5MiwxMzQsMjE3LDEzNCwyNDAsMTM0LDI1MCwxMzUsIDI0LDEzNSwgODgsMTM1LCA5OCwgNDksCisgICAgMTI4LCAgMCwxODEsMjI1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTMwLDIyNywxMDQsICAyLAorICAgIDEzNCwxMzIsMTM0LDE0MiwyMzEsMjQyLDIyOSwyMjUsMjQ0LDIyOSwxMTQsMTI4LCAzNCwxMDcsMjM2LDIyOSwKKyAgICAyNDMsMTE1LDEyOCwgMzQsMTA2LDIzMCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE0MCwxMDMsCisgICAgICAyLDEzNCwxNjUsMTM0LDE3MiwyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywxODgsMjQzLDI0MSwyNDUsMjI1LAorICAgIDI0MiwxMDEsMTI4LCA1MSwxNDEsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEyOCwKKyAgICAyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMjI0LDEzNCwyMDUsMjMyLDIyNSwyMzYsCisgICAgMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxNDUsMTA4LCAgMiwxMzQsMjIzLDEzNCwyMzIsMjQzLAorICAgIDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxNDksMjQ0LDIzMywyNDAsMjM2LDEyMSwxMjgsICAwLDIxNSwKKyAgICAyMzcsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxNTUsMjM4LDIyNSwxMDQsICAyLDEzNSwgIDIsCisgICAgMTM1LCAxMSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE2MywyMzYsMjI5LDIzMCwyNDQsMjMyLAorICAgIDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNjMsMTE1LCAgMiwxMzUsIDMwLDEzNSwgNzksMjMzLCA5OSwKKyAgICAgIDMsMTM1LCAzOSwxMzUsIDU2LDEzNSwgNjcsMjI1LDIzNiwyMzgsMjM5LDI0NCwxMDEsMTI5LCAzOCwxMDYsCisgICAgMTM1LCA1MCwyMjgsMjI2LDEwOCwxMjgsIDM4LDEwNywyMzAsMjM2LDIyNSwyNDQsMjQzLDIzMywyMzEsMTEwLAorICAgIDEyOCwgMzgsMTA5LDI0MywyMzIsMjI1LDI0MiwyNDAsMjQzLDIzMywyMzEsMTEwLDEyOCwgMzgsMTExLDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTc4LDI0NiwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsCisgICAgIDUxLDE4MiwyNDcsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxODgsMTE4LCAgMiwxMzUsMTE0LAorICAgIDEzNSwxMjcsMjM3LDIyOSwyMzEsMjI1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTg1LDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTgzLDExOSwgIDIsMTM1LDE0MiwxMzUsMTU1LDIzNywyMjksCisgICAgMjMxLDIyNSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE5MSwyNDMsMjQxLDI0NSwyMjUsMjQyLAorICAgIDEwMSwxMjgsIDUxLDE4OSwxMTAsMTUwLCAgMCwxMTAsMTM1LDIxMiwxMzYsIDkwLDEzNiwxMTQsMTM2LDE4MCwKKyAgICAxMzYsMjA1LDEzNywgIDcsMTM3LCAxNywxMzcsIDg0LDEzNywxMjcsMTM5LDE2MSwxMzksMTc5LDEzOSwyMDQsCisgICAgMTM5LDIzNSwxNDAsICA1LDE0MCwgNzAsMTQyLCA1MiwxNDIsIDYwLDE0MiwgODUsMTQyLCA5MywxNDMsIDYxLAorICAgIDE0MywgNzEsMTQzLCA4MSwgOTcsICA4LDEzNSwyMzAsMTM1LDI1MCwxMzYsICAxLDEzNiwgIDgsMTM2LCAzMywKKyAgICAxMzYsIDQ0LDEzNiwgNjksMTM2LCA4MSwgOTgsICAyLDEzNSwyMzYsMTM1LDI0NSwyMjksMjM4LDIzMSwyMjUsCisgICAgMjM2LDEwNSwxMjgsICA5LDE2OCwyMzYsIDk3LDEyOCwgMzQsICA3LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLAorICAgICA2OCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNDAsMjMxLDExNywgIDIsMTM2LCAxNSwxMzYsIDI0LDIzNCwKKyAgICAyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTY4LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsCisgICAgIDQwLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMDYsMjM1LDIyNSwyNDQsMjI1LAorICAgIDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIwMiwxMzYsIDU3LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwKKyAgICAyNDQsMTA0LDEyOCwyNTUsMTMzLDI0MCwyMzksMjQzLDI0NCwyNDIsMjM5LDI0MCwyMzIsMTAxLDEyOCwgIDEsCisgICAgIDczLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTI5LCA5OCwgIDIsMTM2LCA5NiwxMzYsMTA2LAorICAgIDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAxMSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAgIDAsMTYwLCA5OSwgIDQsMTM2LDEyNCwxMzYsMTMxLDEzNiwxNDAsMTM2LDE2NywyMjUsMjQyLDIzOSwxMTAsCisgICAgMTI4LCAgMSwgNzIsMjI5LDIyOCwyMzMsMjM2LDIzNiwgOTcsMTI4LCAgMSwgNzAsMjMzLDI0MiwgOTksICAyLAorICAgIDEzNiwxNDgsMTM2LDE1MywyMzYsMTAxLDEyOCwgMzYsMjIxLDI0NSwyMzcsMjMwLDIzNiwyMjksMjQ4LDIyNiwKKyAgICAyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwgNzUsMjM5LDIzNywyMzcsMjI1LDIyNSwyMjcsMjI3LDIyOSwyMzgsCisgICAgMTE2LDEyOCwgIDEsIDcwLDIyOCwyMzksMTE2LCAgMiwxMzYsMTg4LDEzNiwxOTcsMjI1LDIyNywyMjcsMjI5LAorICAgIDIzOCwxMTYsMTI4LCAzMCwgNjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLCA3MSwxMDEsICAzLDEzNiwKKyAgICAyMTMsMTM2LDIyNCwxMzYsMjQ5LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMDksCisgICAgMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIwNSwxMzYsMjM3LDIzMiwyMjUsMjM2LAorICAgIDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTM2LDI0NywyNDMsMjMyLDIyOSwyNDEsMjI5LDIzNiwKKyAgICAyNDMsMjMzLDIzMSwxMTAsMTI4LCAzMiwxNzAsMjMwLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsCisgICAgMTM5LDEwMywgIDIsMTM3LCAyMywxMzcsIDczLCA5NywgIDMsMTM3LCAzMSwxMzcsIDQxLDEzNywgNDgsMjI2LAorICAgIDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTUzLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAyNSwKKyAgICAyMzEsMTE3LCAgMiwxMzcsIDU1LDEzNywgNjQsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNTMsCisgICAgMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMjUsMjM5LDIzOCwyMzEsMjQ1LDI0NCwyMzIsMjI1LAorICAgIDEwNSwxMjgsIDE0LCAgNywxMDQsICAyLDEzNywgOTAsMTM3LDEwMCwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwKKyAgICAgOTcsMTI4LCA0OCwxNDcsMjM5LDIzOSwxMDcsICAyLDEzNywxMDgsMTM3LDExNSwyMzYsMjI5LDIzMCwxMTYsCisgICAgMTI4LCAgMiwxMTQsMjQyLDIyOSwyNDQsMjQyLDIzOSwyMzAsMjM2LDIyOSwxMjAsMTI4LCAgMiwxMTUsMTA1LAorICAgICAgNCwxMzcsMTM3LDEzOCwgNTAsMTM4LCA2MSwxMzgsMTE5LDIyOSwyNDUsMTEwLCAgNywxMzcsMTU1LDEzNywKKyAgICAxOTAsMTM3LDIyMiwxMzcsMjM2LDEzNywyNDUsMTM4LCAyMiwxMzgsIDM1LCA5NywgIDIsMTM3LDE2MSwxMzcsCisgICAgMTc2LDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsMTExLAorICAgIDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgMTUsMjI3LDEwNSwKKyAgICAgIDIsMTM3LDE5NywxMzcsMjA5LDIyOSwyNDUsMjI3LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksCisgICAgIDUzLDI0MiwyMjcsMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCA5NywyMzIsMjMzLAorICAgIDIyOSwyNDUsMjMyLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDU0LDIzNSwyMzksMjQyLDIyOSwKKyAgICAyMjUsMTEwLDEyOCwgNDksIDUyLDI0MCwgOTcsICAyLDEzNywyNTIsMTM4LCAxMCwyMzgsMjQzLDIzMywyMzksCisgICAgMjQzLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTA0LDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLAorICAgIDIyOSwyMjUsMTEwLDEyOCwgNTAsICAxLDI0MywyMzMsMjM5LDI0MywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwKKyAgICAxMjgsIDQ5LDEwMywyNDQsMjMzLDIzNSwyMjksMjQ1LDI0NCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsCisgICAgIDQ5LDEwMiwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTA3LDEwNywgIDIsMTM4LAorICAgICA2NywxMzgsIDkxLDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIwMywxMzgsIDc5LDIzMiwKKyAgICAyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTM0LDIzMiwyMjUsMjMyLDIzMywxMTYsCisgICAgICAyLDEzOCwxMDEsMTM4LDExMiwyMzYsMjI5LDIzMCwyNDQsMjQ0LDIzMiwyMjUsMTA1LDEyOCwyNDgsMTUzLAorICAgIDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA3NywyMzgsMTAxLDE0MSwgIDAsIDU3LDEzOCwxNTAsMTM4LDE1OSwKKyAgICAxMzgsMTY5LDEzOCwxOTksMTM4LDIwNiwxMzgsMjMxLDEzOSwgIDIsMTM5LCAzNiwxMzksIDQ4LDEzOSwgNTksCisgICAgMTM5LCA5MiwxMzksMTAwLDEzOSwxMTEsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxMDUsMjI2LAorICAgIDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMjM5LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOSwKKyAgICAgMzYsMTA0LDEzOCwxODAsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDMsMjI5LDI0MywyMjUsMjM4LDI0MywyNDMsCisgICAgMjI5LDI0MiwyMzMsMTAyLDEyOCwgMzksMTQ2LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LDExMSwyMzEsMTE3LAorICAgICAgMiwxMzgsMjEzLDEzOCwyMjIsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwyMzksMjQyLDIzNywKKyAgICAyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwxMTEsMjMyLCA5NywgIDIsMTM4LDIzOCwxMzgsMjQ5LDIyNywyMzUsCisgICAgMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxMDUsMjM4LDIzMSwyNTAsMjMyLDIzOSwxMTcsMTI4LAorICAgICA0OCwgNDEsMTA1LCAgMiwxMzksICA4LDEzOSwgMjYsMjI4LDIyOSwyMzksMjMxLDI0MiwyMjUsMjQwLDIzMiwKKyAgICAyMzMsMjI3LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgNDAsMjM4LDIzMCwyMjksMjQyLDIzMywyMzksCisgICAgMTE0LDEyOCwgMzIsMTM3LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDI1LAorICAgIDIzOSwyMzYsMjI4LDI0MywyNDQsMjQ5LDIzNiwxMDEsMTI4LDI0NywgNTcsMTEyLCAgMiwxMzksIDY1LDEzOSwKKyAgICAgNzIsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTI0LDIyOSwxMTQsICAyLDEzOSwgNzksMTM5LCA4NSwyMzMsCisgICAgMjM5LDEwMCwxMjgsIDM2LDE0NCwyNDMsMjMzLDIyNSwxMTAsMTI4LCAgNiwyNDksMjQyLDIzOSwyMzcsMjI1LAorICAgIDExMCwxMjgsIDMzLDEyMCwyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsMTIxLDExNiwKKyAgICAgIDIsMTM5LDExNywxMzksMTU1LDIyOSwyMjksMTEwLCAgMiwxMzksMTI1LDEzOSwxMzQsMjI3LDIzMywyNDIsCisgICAgMjI3LDIzNiwxMDEsMTI4LCAzNiwxMTQsMTEyLCAgMiwxMzksMTQwLDEzOSwxNDcsMjI1LDI0MiwyMjksMTEwLAorICAgIDEyOCwgMzYsMTM0LDIyOSwyNDIsMjMzLDIzOSwxMDAsMTI4LCAzNiwxNTQsMjMyLDIyNSwxMDUsMTI4LCAxNCwKKyAgICAgODksMTA2LDEyOSwgIDEsMjA0LDEzOSwxNjcsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksCisgICAgMTI4LCAgNCwgOTAsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDI0MywxMzksMTkyLAorICAgIDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTU3LDEwOCwgIDIsMTM5LDIxMCwKKyAgICAxMzksMjI0LDIyOSwyMzEsMjQyLDIzMywyMzEsMjMyLDI0NCwyMzYsMjM5LDIzOCwxMDMsMTI4LCAgMSwxNTgsCisgICAgMjMzLDIzOCwyMjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLCA3MywxMDksICAyLDEzOSwyNDEsMTM5LAorICAgIDI1MiwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDc4LDI0MywyNDEsMjQ1LDIyNSwKKyAgICAyNDIsMTAxLDEyOCwgNTEsMTU0LDExMCwgIDIsMTQwLCAxMSwxNDAsIDYxLCA5NywgIDMsMTQwLCAxOSwxNDAsCisgICAgIDI5LDE0MCwgMzYsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTYzLDIyOCwyMjksMjQ2LAorICAgICA5NywxMjgsICA5LCAzNSwyMzEsMTE3LCAgMiwxNDAsIDQzLDE0MCwgNTIsMjM0LDIyNSwyNDIsMjI1LDI0NCwKKyAgICAxMDUsMTI4LCAxMCwxNjMsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgMzUsMjM4LDIyNSwyMjgsCisgICAgMjI5LDI0NiwgOTcsMTI4LCAgOSwgNDEsMTExLCAgNiwxNDAsIDg0LDE0MCwgOTUsMTQwLDEyMCwxNDAsMTYxLAorICAgIDE0MSwxMTMsMTQyLCA0MCwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTEwLDIzNSwKKyAgICAyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMDYsMTQwLDEwOCwyMzIsMjI1LDIzNiwyMzAsCisgICAgMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEzNywxMTAsICAzLDE0MCwxMjgsMTQwLDE0NCwxNDAsMTUzLAorICAgIDIyNiwyNDIsMjI5LDIyNSwyMzUsMjMzLDIzOCwyMzEsMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsICAwLDE2MCwKKyAgICAyMjksMjM4LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAxOSwyNDUsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsCisgICAgIDI1LDIzOSwxMTAsICA3LDE0MCwxNzgsMTQwLDE4NywxNDAsMjAxLDE0MCwyMzUsMTQwLDI1MSwxNDEsIDM2LAorICAgIDE0MSwgOTUsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgNzAsMjMwLDIzMywyMzgsMjI1LDIzNiwKKyAgICAyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIzMCwyMzEsMjMyLDI0NSwyMzgsMjM4LCA5NywgIDIsCisgICAgMTQwLDIxMiwxNDAsMjIxLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTg2LDIzMCwyMzMsMjM4LAorICAgIDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxNTksMjMzLDIzOCwyMzMsMjQ0LDIzMywKKyAgICAyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMjMxLDIzNCwyMjksMjI5LDIzNywxMDUsCisgICAgICAyLDE0MSwgIDUsMTQxLCAyMCwyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsMjUyLDIxMCwyNDMsMjM5LDIzNiwyMjUsMjQ0LDIyOSwyMjgsMjI1LDI0MiwyMjUsMjI2LDIzMywKKyAgICAgOTksMTI4LDI1MiwgNzUsMjM3LDEwMSwgIDIsMTQxLCA0MywxNDEsIDU2LDIyOCwyMzMsMjI1LDIzNiwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIzMiwyMjksMjM3LDEwNSwgIDIsMTQxLCA2NCwxNDEsIDc5LAorICAgIDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsMjEzLDI0MywKKyAgICAyMzksMjM2LDIyNSwyNDQsMjI5LDIyOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLCA3OCwyMzgsCisgICAgMjM5LDIzOSwyMzgsMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLAorICAgIDE0MSwxMTYsICA3LDE0MSwxMjksMTQxLDE0MCwxNDEsMTY5LDE0MSwyMDQsMTQxLDIxNiwxNDEsMjM2LDE0MiwKKyAgICAgIDYsMjI3LDIzOSwyMzgsMjQ0LDIyNSwyMzMsMjM4LDExNSwxMjgsIDM0LCAxMiwxMDEsICAyLDE0MSwxNDYsCisgICAgMTQxLDE2MiwyMzYsMjI5LDIzNywyMjksMjM4LDExNiwxMjksIDM0LCAgOSwxNDEsMTU3LDIzOSwxMDIsMTI4LAorICAgICAzNCwgIDksMjQxLDI0NSwyMjUsMTA4LDEyOCwgMzQsIDk2LDIzMSwyNDIsMjI5LDIyNSwyNDQsMjI5LDExNCwKKyAgICAxMjksIDM0LDExMSwxNDEsMTgxLDIzOCwyMzksMTE0LCAgMiwxNDEsMTg5LDE0MSwxOTcsMjI5LDI0MSwyNDUsCisgICAgMjI1LDEwOCwxMjgsIDM0LDExMywyMzYsMjI5LDI0MywxMTUsMTI4LCAzNCwxMjEsMjMzLDIyOCwyMjksMjM4LAorICAgIDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LCAzNCwgOTgsMjM2LDIyOSwyNDMsMTE1LDEyOSwgMzQsMTEwLDE0MSwKKyAgICAyMjUsMjM4LDIzOSwyNDIsMjI5LDI0MSwyNDUsMjI1LDEwOCwxMjgsIDM0LDExMiwxMTIsICAyLDE0MSwyNDIsCisgICAgMTQxLDI1MiwyMjUsMjQyLDIyNSwyMzYsMjM2LDIyOSwxMDgsMTI4LCAzNCwgMzgsMjQyLDIyOSwyMjcsMjI5LAorICAgIDIyOCwyMjksMTE1LDEyOCwgMzQsMTI4LDI0MywxMTcsICAzLDE0MiwgMTUsMTQyLCAyMiwxNDIsIDMxLDIyNiwKKyAgICAyNDMsMjI5LDExNiwxMjgsIDM0LDEzMiwyMjcsMjI3LDIyOSwyMjksMjI4LDExNSwxMjgsIDM0LDEyOSwyNDAsCisgICAgMjI5LDI0MiwyNDMsMjI5LDExNiwxMjgsIDM0LDEzMywyNDcsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LAorICAgIDExMCwxMjgsICA1LDExOCwyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTY5LDExNSwgIDIsMTQyLCA2NiwKKyAgICAxNDIsIDc1LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTc3LDI0NSwyNDAsMjI5LDI0MiwyMzMsCisgICAgMjM5LDExNCwxMjgsIDMyLDEyNywyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwgIDAsMjQxLDExNywxMzIsICAzLAorICAgIDE4OSwxNDIsMTA1LDE0MiwxMTYsMTQyLDE5NywxNDMsIDI0LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwKKyAgICAgOTcsMTI4LCA0OCwxMDgsMTA3LCAgMiwxNDIsMTIyLDE0MiwxNDYsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsCisgICAgIDk3LDEyOSwgNDgsMjA0LDE0MiwxMzQsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LAorICAgIDI1NSwxMzUsMjQ0LCA5NywgIDMsMTQyLDE1NSwxNDIsMTY1LDE0MiwxNzIsMjI2LDIyOSwyMzgsMjMxLDIyNSwKKyAgICAyMzYsMTA1LDEyOCwgIDksMTg4LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA2MCwyMzEsMTE3LCAgMiwxNDIsCisgICAgMTc5LDE0MiwxODgsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxODgsMjQyLDIzNywyNDUsMjM1LAorICAgIDIzMiwxMDUsMTI4LCAxMCwgNjAsMTA5LCAgMiwxNDIsMjAzLDE0MiwyMzcsMjI2LDIyOSwyNDIsMjQzLDIzMywKKyAgICAyMzEsMTEwLDEzMCwgIDAsIDM1LDE0MiwyMTcsMTQyLDIyOSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsCisgICAgMjI3LDEwMSwxMjgsMjU1LCAgMywyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDk1LDIyOSwxMTQsICAyLAorICAgIDE0MiwyNDQsMTQzLCAyMCwyMjUsMjM2LDI0MywyMzMsMjMxLDExMCwgIDIsMTQyLDI1NSwxNDMsICA3LDIzMSwKKyAgICAyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywxMTYsMjM2LDIzOSwyNDcsMjI5LDI0MiwyMzEsMjQyLDIyOSwyMjksCisgICAgMTA3LDEyOCwgIDMsMTE3LDExMSwxMjgsIDMzLCAyMiwxMTAsMTMwLCAgNSwyMjQsMTQzLCAzMiwxNDMsIDUyLAorICAgIDIyOCwyMjUsMjMxLDIyOSwyNDMsMTA0LDEyOSwyNTEsIDY0LDE0MywgNDMsMjMyLDIyOSwyMjYsMjQyLDIyOSwKKyAgICAxMTksMTI4LDI1MSwgNjQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwyMjQsMjQ2LDI0MywyNDEsCisgICAgMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTgxLDI0NywyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLAorICAgIDE4NywyNDksIDk3LCAgMywxNDMsIDkwLDE0MywxMDAsMTQzLDEwNywyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwKKyAgICAxMDUsMTI4LCAgOSwxNTgsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDMwLDIzMSwxMTcsICAyLDE0MywxMTQsCisgICAgMTQzLDEyMywyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE1OCwyNDIsMjM3LDI0NSwyMzUsMjMyLAorICAgIDEwNSwxMjgsIDEwLCAzMCwxMTEsMTQ3LCAgMCwxMTEsMTQzLDE3NCwxNDMsMTk2LDE0NCwgMTgsMTQ0LDE4OCwKKyAgICAxNDUsICA0LDE0NSwgMTksMTQ1LCA1OSwxNDUsMTgyLDE0NSwyMDMsMTQ1LDI0MSwxNDUsMjUyLDE0NiwxNzQsCisgICAgMTQ4LCAgOCwxNDgsIDcyLDE0OCwxMDUsMTQ4LDE1MSwxNDksIDI0LDE0OSwgNzEsMTQ5LCA4MywgOTcsICAyLAorICAgIDE0MywxODAsMTQzLDE4NywyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMCwyNDMsMjM4LDIzMSwyNDQsMjMyLDIyNSwKKyAgICAxMDUsMTI4LCAxNCwgNDUsIDk4LCAgNCwxNDMsMjA2LDE0MywyNDgsMTQ0LCAgMSwxNDQsIDExLDIyNSwyNDIsCisgICAgMjQyLDIyOSwxMDAsMTMwLCAgMiwxMTcsMTQzLDIxOCwxNDMsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LAorICAgIDIzMywgOTksMTI4LCAgNCwyMzMsMjI4LDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDI0MywyMjcsMjQ5LDI0MiwKKyAgICAyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjM1LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksCisgICAgMTQ3LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAyNywyNDIsMjI5LDI0NiwxMDEsMTI4LAorICAgICAgMSwgNzksIDk5LCAgMywxNDQsIDI2LDE0NCwgOTksMTQ0LDE3OCwgOTcsICAyLDE0NCwgMzIsMTQ0LCA5MywKKyAgICAyMzgsMjI4LDI0MiwgOTcsICAzLDE0NCwgNDMsMTQ0LCA1MCwxNDQsIDYxLDIyOCwyMjksMjQ2LCA5NywxMjgsCisgICAgICA5LCAxNywyMzEsMjQ1LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTQ1LDI0NiwyMzksMjQ3LAorICAgIDIyOSwyMzYsMjQzLDIzMywyMzEsMTEwLCAgMiwxNDQsIDc1LDE0NCwgODIsMjI4LDIyOSwyNDYsIDk3LDEyOCwKKyAgICAgIDksIDczLDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwyMDEsMjQyLDIzOSwxMTAsCisgICAgMTI4LCAgMSwyMTAsMjMzLDI0MiwgOTksICAyLDE0NCwxMDcsMTQ0LDExMiwyMzYsMTAxLDEyOCwgMzYsMjIyLAorICAgIDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEzMywgIDAsMjQ0LDE0NCwxMzEsMTQ0LDEzOSwxNDQsMTUwLDE0NCwKKyAgICAxNTgsMTQ0LDE3MCwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsMjA5LDIyOCwyMzksMjQ0LDIyNiwyMjksCisgICAgMjM2LDIzOSwxMTksMTI4LCAzMCwyMTcsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLDIxMSwyMzIsMjM5LAorICAgIDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIxMywyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwKKyAgICAgMzAsMjE1LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA2MiwxMDAsICA0LDE0NCwxOTgsCisgICAgMTQ0LDIyMSwxNDQsMjI3LDE0NCwyNTAsMjI2LDEwOCwgIDIsMTQ0LDIwNSwxNDQsMjEzLDIyNSwyMjcsMjQ1LAorICAgIDI0NCwxMDEsMTI4LCAgMSwgODEsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAyLCAxMywyMjksMjQ2LCA5NywKKyAgICAxMjgsICA5LCAxOSwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywxMTUsMTI5LCAgMCwyNDYsMTQ0LDIzOSwyMjcsCisgICAgMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjMxLDIzOSwyNDQsMjI2LDIyOSwyMzYsMjM5LAorICAgIDExOSwxMjgsIDMwLDIwNSwxMDEsMTI5LCAgMSwgODMsMTQ1LCAxMCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwKKyAgICAxMjgsIDQ5LCA5MCwxMDMsICAzLDE0NSwgMjcsMTQ1LCA0MiwxNDUsIDQ5LDIzOSwyMzgsMjI5LDEwNywxMjksCisgICAgICAyLDIxOSwxNDUsIDM2LDIyNywyMzcsIDk4LDEyOCwgIDMsIDQwLDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAwLAorICAgIDI0MiwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNDcsMTA0LCAgNCwxNDUsIDY5LDE0NSwKKyAgICAgODAsMTQ1LCA5MCwxNDUsMTY4LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMzMsCisgICAgMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDc0LDExMSwgIDIsMTQ1LCA5NiwxNDUsMTA2LAorICAgIDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIwNywyNDIsMTEwLDEzMywgIDEsMTYxLDE0NSwKKyAgICAxMjEsMTQ1LDEyOSwxNDUsMTQwLDE0NSwxNDgsMTQ1LDE2MCwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsCisgICAgMjE5LDIyOCwyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwyMjcsMjMxLDI0MiwyMjUsMjQ2LAorICAgIDEwMSwxMjgsIDMwLDIyMSwyMzIsMjM5LDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIyMywKKyAgICAyNDQsMjMzLDIzNiwyMjgsMTAxLDEyOCwgMzAsMjI1LDI0NSwyMzgsMjMxLDIyNSwyNDIsMjQ1LDIzNywyMzYsCisgICAgMjI1LDI0NSwxMTYsMTI4LCAgMSwgODEsMTA1LDEyOSwgIDEsMTYzLDE0NSwxODgsMjM4LDI0NiwyMjksMjQyLAorICAgIDI0NCwyMjksMjI4LDIyNiwyNDIsMjI5LDI0NiwxMDEsMTI4LCAgMiwgMTUsMTA3LCAgMiwxNDUsMjA5LDE0NSwKKyAgICAyMzMsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMTcwLDE0NSwyMjEsMjMyLDIyNSwyMzYsCisgICAgMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMTcsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LAorICAgICA4NywyMzYsMjI5LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTcxLDEwOSwgIDYsMTQ2LCAxMCwKKyAgICAxNDYsIDM4LDE0NiwgNDUsMTQ2LDEzNCwxNDYsMTQ1LDE0NiwxNjMsMjI1LDIyNywyNDIsMjM5LDExMCwxMzAsCisgICAgICAxLCA3NywxNDYsIDIyLDE0NiwgMzAsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA4MywyMzEsMjQyLAorICAgIDIyNSwyNDYsMTAxLDEyOCwgMzAsIDgxLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA4MCwyMjksMjMxLCA5NywKKyAgICAxMzMsICAzLDIwMSwxNDYsIDYxLDE0NiwgNjUsMTQ2LCA3NiwxNDYsIDkwLDE0NiwxMDYsIDQ5LDEyOCwgIDMsCisgICAgMjE0LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgOTcsMjM2LDIyNSwyNDQsMjMzLAorICAgIDIzOCwyMjcsMjM2LDIzOSwyNDMsMjI5LDEwMCwxMjgsICAyLDExOSwyNDIsMjM5LDI0NSwyMzgsMjI4LDIyNywKKyAgICAyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMjMsMTE2LCAgMiwxNDYsMTEyLDE0NiwxMjcsCisgICAgMjMzLDI0NCwyMzYsMjM5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMjUsMjM5LAorICAgIDIzOCwyMzksMTE1LDEyOCwgIDMsMjA2LDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwKKyAgICAyMDgsMjMzLDIyNywyNDIsMjM5LDExMCwxMjksICAzLDE5MSwxNDYsMTU1LDI0NCwyMzksMjM4LDIzOSwxMTUsCisgICAgMTI4LCAgMywyMDQsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA3OSwyMzgsMTAxLAorICAgIDE0NSwgIDAsIDQ5LDE0NiwyMTMsMTQ2LDIyMiwxNDYsMjMyLDE0NywgIDYsMTQ3LCAzMSwxNDcsIDQwLDE0NywKKyAgICAgNDksMTQ3LCA3NCwxNDcsMTA4LDE0NywxNDIsMTQ3LDE1NCwxNDcsMTczLDE0NywxODQsMTQ3LDIxNywxNDcsCisgICAgMjI3LDE0NywyMzUsMTQ3LDI0NiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA5NywyMjYsMjI5LAorICAgIDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMzEsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI5LCAzNiwKKyAgICAgOTYsMTQ2LDI0MywyMzMsMjM4LDI0NiwyMjksMjQyLDI0MywyMjksMjQzLDIyNSwyMzgsMjQzLDI0MywyMjksCisgICAgMjQyLDIzMywxMDIsMTI4LCAzOSwxMzgsMTAwLCAgMiwxNDcsIDEyLDE0NywgMTgsMjI5LDI0NiwgOTcsMTI4LAorICAgICAgOSwxMDMsMjM5LDI0NCwyMjksMjM4LDIzNiwyMjksMjI1LDIyOCwyMjksMTE0LDEyOCwgMzIsIDM2LDIyOSwKKyAgICAyMzMsMjMxLDIzMiwyNDQsMTA0LDEyOCwgMzMsIDkxLDIzMCwyMzMsMjQ0LDI0NCwyMjksMTAwLDEyOCwyNDYsCisgICAgMjIwLDIzMSwxMTcsICAyLDE0NywgNTYsMTQ3LCA2NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLAorICAgIDIzMSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLDEwMywyMzIsIDk3LCAgMywxNDcsIDgzLDE0NywKKyAgICAgOTQsMTQ3LCA5OSwyMjcsMjM1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDk3LDIzNiwxMDIsCisgICAgMTI4LCAgMCwxODksMjM4LDIzMSwyNTAsMjMyLDIzOSwxMTcsMTI4LCA0OCwgMzMsMTA1LCAgMiwxNDcsMTE0LAorICAgIDE0NywxMzIsMjI4LDIyOSwyMzksMjMxLDI0MiwyMjUsMjQwLDIzMiwyMzMsMjI3LDI0MCwyMjUsMjQyLDIyOSwKKyAgICAxMTAsMTI4LCA1MCwgMzIsMjM4LDIzMCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsMTI5LDIzNywyMzksCisgICAgMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDE3LDIzOCwyNDUsMjM3LDIyOSwyNDIsMjI1LAorICAgIDI0NCwyMzksMjQyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDI0NCwyMzksMjM2LDIyOCwKKyAgICAyNDMsMjQ0LDI0OSwyMzYsMTAxLDEyOCwyNDcsIDQ5LDExMiwgIDIsMTQ3LDE5MCwxNDcsMTk3LDIyNSwyNDIsCisgICAgMjI5LDExMCwxMjgsIDM2LDExNiwyMjksMTE0LCAgMiwxNDcsMjA0LDE0NywyMTAsMjMzLDIzOSwxMDAsMTI4LAorICAgICAzNiwxMzYsMjQzLDIzMywyMjUsMTEwLDEyOCwgIDYsMjQxLDI0MSwyNDUsMjI1LDI0MiwyNDQsMjI5LDExNCwKKyAgICAxMjgsICAwLDE4OCwyNDIsMjM5LDIzNywyMjUsMTEwLDEyOCwgMzMsMTEyLDI0MywyNDUsMjQwLDIyOSwyNDIsCisgICAgMjMzLDIzOSwxMTQsMTI4LCAgMCwxODUsMjQ0LDEwNCwgIDIsMTQ3LDI1MywxNDgsICAyLDIyNSwxMDUsMTI4LAorICAgICAxNCwgODEsMjMzLDI0MiwxMDAsMTI4LCAzMywgODMsMTExLCAgMywxNDgsIDE2LDE0OCwgNTAsMTQ4LCA2NiwKKyAgICAxMDMsICAyLDE0OCwgMjIsMTQ4LCA0MCwyMzksMjM4LDIyOSwxMDcsMTI5LCAgMSwyMzUsMTQ4LCAzMSwyMzcsCisgICAgMjI1LDIyNywyNDIsMjM5LDExMCwxMjgsICAxLDIzNywyNDUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LAorICAgICAxMCwgMTksMjM3LDIyNSwyNDQsMjQyLDIyNSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwKKyAgICAgMTAsIDc1LDI0MCwyMjksMTEwLDEyOCwgIDIsIDg0LDExMiwgIDMsMTQ4LCA4MCwxNDgsIDg3LDE0OCwgOTgsCisgICAgMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTcwLDIyOSwyMzgsMjI2LDI0NSwyMzYsMjM2LDIyOSwxMTYsMTI4LAorICAgICAzNywyMzAsMjQ0LDIzMywyMzksMTEwLDEyOCwgMzUsIDM3LDExNCwgIDIsMTQ4LDExMSwxNDgsMTQwLDEwMCwKKyAgICAgIDIsMTQ4LDExNywxNDgsMTI4LDIzMCwyMjksMjM3LDIzMywyMzgsMjMzLDIzOCwxMDEsMTI4LCAgMCwxNzAsCisgICAgMjM3LDIyNSwyNDMsMjI3LDI0NSwyMzYsMjMzLDIzOCwxMDEsMTI4LCAgMCwxODYsMjQ0LDIzMiwyMzksMjMxLAorICAgIDIzOSwyMzgsMjI1LDEwOCwxMjgsIDM0LCAzMSwxMTUsICA1LDE0OCwxNjMsMTQ4LDE5NSwxNDgsMjEyLDE0OSwKKyAgICAgIDEsMTQ5LCAxNCwyMzIsMjM5LDI0MiwxMTYsICAyLDE0OCwxNzIsMTQ4LDE3OSwyMjgsMjI5LDI0NiwgOTcsCisgICAgMTI4LCAgOSwgMTgsMjQ2LDIzOSwyNDcsMjI5LDIzNiwyNDMsMjMzLDIzMSwyMzgsMjI4LDIyOSwyNDYsIDk3LAorICAgIDEyOCwgIDksIDc0LDIzNiwyMjUsMjQzLDEwNCwxMjksICAwLDI0OCwxNDgsMjA0LDIyNSwyMjcsMjQ1LDI0NCwKKyAgICAxMDEsMTI4LCAgMSwyNTUsMjM3LDIyNSwyMzYsMTA4LCAgMiwxNDgsMjIxLDE0OCwyMzIsMjMyLDIzMywyNDIsCisgICAgMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LCA3MywyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LAorICAgIDEyOSwgNDgsMTY5LDE0OCwyNDUsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwKKyAgICAxMDcsMjQ0LDI0MiwyMzksMjM1LDIyOSwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgIDEsMjU1LDI0NSwyNDAsCisgICAgMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDI0MCwxMTYsICAyLDE0OSwgMzAsMTQ5LCA0MSwyMjcsMjQ5LAorICAgIDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTI3LDIzMywyMzYsMjI4LDEwMSwxMzAsICAwLDI0NSwKKyAgICAxNDksIDUyLDE0OSwgNjAsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA3NywyMjgsMjMzLDIyOSwyNDIsCisgICAgMjI5LDI0MywyMzMsMTE1LDEyOCwgMzAsIDc5LDI0NSwyMjYsMjM5LDI0MCwyMzksMjM3LDIzOSwyMzAsMTExLAorICAgIDEyOCwgNDksIDMzLDExOCwgIDIsMTQ5LCA4OSwxNDksMTcwLDIyOSwxMTQsICAyLDE0OSwgOTYsMTQ5LDE2MiwKKyAgICAyMzYsMjMzLDIzOCwxMDEsMTMxLCAzMiwgNjIsMTQ5LDEwOSwxNDksMTMyLDE0OSwxNTUsIDk5LCAgMiwxNDksCisgICAgMTE1LDE0OSwxMjcsMjI5LDIzOCwyNDQsMjI5LDI0MiwyMzYsMjMzLDIzOCwxMDEsMTI4LDI1NCwgNzQsMjM3LAorICAgICA5OCwxMjgsICAzLCAgNSwxMDAsICAyLDE0OSwxMzgsMTQ5LDE0NiwyMjUsMjQzLDIzMiwyMjksMTAwLDEyOCwKKyAgICAyNTQsIDczLDIyNiwyMzYsMjQ3LDIyNSwyNDYsMTIxLDEyOCwyNTQsIDc2LDI0NywyMjUsMjQ2LDEyMSwxMjgsCisgICAgMjU0LCA3NSwyNDMsMjI3LDIzOSwyNDIsMTAxLDEyOCwgIDAsMTc1LDIzOSwyNDcsMjI5LDIzNiwyNDMsMjMzLAorICAgIDIzMSwxMTAsICAzLDE0OSwxODUsMTQ5LDE5NSwxNDksMjAyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwKKyAgICAxMjgsICA5LDIwMywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNzUsMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsCisgICAgMjQ0LDEwNSwxMjgsIDEwLDIwMywxMTIsMTQ1LCAgMCwxMTIsMTQ5LDI1MSwxNTIsMTIzLDE1MiwxMzQsMTUyLAorICAgIDE0MywxNTIsMTU1LDE1NCwgODAsMTU0LCA5MCwxNTUsIDgyLDE1NiwxMDEsMTU2LDE5MSwxNTYsMjE3LDE1NywKKyAgICAgOTIsMTU3LDEwMCwxNTgsICAyLDE1OCwgNjAsMTU4LCA4OCwxNTgsIDk4LCA5NywgMTQsMTUwLCAyNSwxNTAsCisgICAgIDU3LDE1MCwgNjcsMTUwLCA3NCwxNTAsIDgxLDE1MCwxMjksMTUwLDE0MCwxNTAsMTU0LDE1MCwxNjUsMTUwLAorICAgIDIxMiwxNTAsMjI2LDE1MSwyMzgsMTUyLCAyMSwxNTIsMTExLCA5NywgIDIsMTUwLCAzMSwxNTAsIDQzLDIzNywKKyAgICAyNDAsMjQzLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTI4LDI0MywyMjksMjM4LDI0NCwyMzksCisgICAgMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgNDMsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LAorICAgIDEyOCwgIDksMTcwLDIyNywyNDUsMjQ0LDEwMSwxMjgsIDMwLCA4NSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwKKyAgICAgNDIsMTAzLCAgMiwxNTAsIDg3LDE1MCwxMDUsMTAxLCAgMiwxNTAsIDkzLDE1MCwxMDAsMjI4LDIzOSwyNDcsCisgICAgMTEwLDEyOCwgMzMsMjIzLDI0NSwxMTIsMTI4LCAzMywyMjIsMTE3LCAgMiwxNTAsMTExLDE1MCwxMjAsMjM0LAorICAgIDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxNzAsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwKKyAgICAgNDIsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDExMywyMzMsMjQ5LDIyNSwyMzgsCisgICAgMjM4LDIzOSwyMzMsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDQ3LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LAorICAgIDIzOCwgOTcsMTI4LCA0OCwyMDksMTA4LCAgMiwxNTAsMTcxLDE1MCwxOTYsMjI1LDI0NCwyMjUsMjM2LDIzMywKKyAgICAyNTAsMjI1LDI0NCwyMzMsMjM5LDIzOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsMjI3LDIyNywyMzcsCisgICAgIDk4LDEyOCwgIDQsMTMyLDIzOSwyMjcsMjMyLDIzNSwyMjUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLAorICAgICA5OSwxMjgsICA0LDE5MiwyMzgsMjQzLDIzMywyMzksMjQzLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwKKyAgICAgNDksMTI3LDExNCwgIDMsMTUwLDIzNCwxNTAsMjU1LDE1MSwyMjcsIDk3LCAgMiwxNTAsMjQwLDE1MCwyNDgsCisgICAgMjMxLDI0MiwyMjUsMjQwLDEwNCwxMjgsICAwLDE4MiwyMzYsMjM2LDIyOSwxMDgsMTI4LCAzNCwgMzcsMjI5LAorICAgIDExMCwgIDIsMTUxLCAgNiwxNTEsMTE2LDIzNiwyMjksMjMwLDExNiwxMzYsICAwLCA0MCwxNTEsIDI5LDE1MSwKKyAgICAgNDQsMTUxLCA0OSwxNTEsIDU0LDE1MSwgNjUsMTUxLCA3NywxNTEsMTAwLDE1MSwxMDUsMjI1LDIzNiwyNDQsCisgICAgMjM5LDIzOCwyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MywgNjIsMjI2LDExNiwxMjgsMjQ4LAorICAgIDIzNywyMjksMTIwLDEyOCwyNDgsMjM2LDIzMywyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwKKyAgICAxNDEsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgIDgsMTE1LCAgMiwxNTEsCisgICAgIDgzLDE1MSwgOTAsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDg5LDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LAorICAgIDExNCwxMjgsIDMyLDEyNSwyNDQsMTEyLDEyOCwyNDgsMjM1LDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwKKyAgICAxMDgsMTI4LDI1NCwgNTMsMjQyLDIzMywyMzEsMjMyLDExNiwxMzYsICAwLCA0MSwxNTEsMTQwLDE1MSwxNTUsCisgICAgMTUxLDE2MCwxNTEsMTY1LDE1MSwxNzYsMTUxLDE4OCwxNTEsMjExLDE1MSwyMTYsMjI1LDIzNiwyNDQsMjM5LAorICAgIDIzOCwyMjksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MywgNjMsMjI2LDExNiwxMjgsMjQ4LDI0OCwKKyAgICAyMjksMTIwLDEyOCwyNDgsMjQ3LDIzMywyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwxNDIsCisgICAgMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgIDksMTE1LCAgMiwxNTEsMTk0LAorICAgIDE1MSwyMDEsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDkwLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwKKyAgICAxMjgsIDMyLDEyNiwyNDQsMTEyLDEyOCwyNDgsMjQ2LDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsCisgICAgMTI4LDI1NCwgNTQsMjQ0LDIzMywyMjUsMjM2LDIyOCwyMzMsMjMwLDEwMiwxMjgsIDM0LCAgMiwxMTUsICAzLAorICAgIDE1MSwyNDYsMTUyLCAgMSwxNTIsIDEzLDIyOSwyNDEsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwKKyAgICAxOTIsMjMyLDI0NCwyMjUsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNTMsMjQxLDI0NSwyMjUsCisgICAgMjQyLDEwMSwxMjgsIDUxLDE2OSwyNDQsMjI1LDEwNCwxMzQsICA1LDE4MywxNTIsIDM5LDE1MiwgNTMsMTUyLAorICAgICA1OCwxNTIsIDY3LDE1MiwgODIsMTUyLCA5OCwgNDksICAyLDE1MiwgNDUsMTUyLCA0OSwgNDksMTI4LCAgNSwKKyAgICAxODMsMTAwLDEyOCwgIDUsMTgzLDE3OCwgOTcsMTI4LCAgNSwxODMsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksCisgICAgMTI4LCAgNSwxODMsMjM4LDIyNSwyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwxODMsMjQxLDI0NSwyMjUsMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwKKyAgICAgIDUsMTgzLDI0NywyMzMsMjI4LDIyOSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4MywyNTAsCisgICAgMjI5LDI0MiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE2MSwyMjYsMjM5LDI0MCwyMzksMjM3LAorICAgIDIzOSwyMzAsMTExLDEyOCwgNDksICA2LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMjIzLDIyOCwKKyAgICAyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsIDg3LDEwMSwxMzcsICA1LDIyOCwxNTIsCisgICAgMTc3LDE1MiwxODgsMTUyLDIwOCwxNTIsMjIwLDE1MiwyNDAsMTUzLCA4NiwxNTMsIDk3LDE1MywxMTgsMTU0LAorICAgICA3MywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDYzLDIyOCwyMjUsMjMxLDIyOSwKKyAgICAyNDMsMTA0LDEyOSwyNTEsIDY4LDE1MiwxOTksMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LDI1MSwgNjgsCisgICAgMjI5LDI1MCwyMzMsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgNTksMjMwLDIzMywyMzgsMjI1LAorICAgIDIzNiwyMjgsMjI1LDIzMSwyMjksMjQzLDIzMiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA2NywKKyAgICAxMDQsICA1LDE1MiwyNTIsMTUzLCAxOSwxNTMsIDI3LDE1MywgNDEsMTUzLCA3MSwyMjUsMTE0LCAgMiwxNTMsCisgICAgICAzLDE1MywgMTAsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTI2LDIzNywyMjksMjM4LDIzMywyMjUsMTEwLAorICAgIDEyOCwgIDUsMTIyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwyMjgsMjMwLDIzMywyMzgsMjI1LDIzNiwKKyAgICAyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUxLCA4NywxMDUsICAyLDE1MywgNDcsMTUzLCA2MiwyMzgsCisgICAgMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUxLCA4OCwyNDIsMjI1LAorICAgIDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEyMiwyMzcsMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwKKyAgICAyMjYsMjMzLCA5OSwxMjgsMjUxLCA4OSwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsCisgICAgMjE4LDIzNywyMzMsMjI4LDIyOCwyMzYsMjI5LDIzMiwyMzksMjM5LDIzNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LAorICAgIDIzNiwyMzMsIDk5LDEyOCwgIDQsMTY3LDExNCwgIDUsMTUzLDEzMCwxNTMsMTQyLDE1MywxODQsMTU0LCA0OSwKKyAgICAxNTQsIDYyLDIyNSwyMzAsMjI5LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwyNTEsIDc4LDIyNywyMjksCisgICAgMjM4LDExNiwxMzEsICAwLCAzNywxNTMsMTU1LDE1MywxNjQsMTUzLDE3NiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsICA2LDEwNiwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAgNSwKKyAgICAyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsMTA2LDEwNSwgIDIsMTUzLDE5MCwxNTQsIDMxLDIzOSwxMDAsCisgICAgMTM0LCAgMCwgNDYsMTUzLDIwNywxNTMsMjE4LDE1MywyMjksMTUzLDI0MSwxNTMsMjUyLDE1NCwgIDgsMjI1LAorICAgIDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDEzNywyMjcsMjI5LDIzOCwyNDQsMjI5LDI0MiwKKyAgICAyMjksMTAwLDEyOCwgIDAsMTgzLDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsCisgICAgIDk3LDIzMywyMzgsMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LDI0NiwyMzEsMjM3LDIzOSwyMzgsMjM5LAorICAgIDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMTQsMTE1LCAgMiwxNTQsIDE0LDE1NCwgMjEsMjM3LDIyNSwKKyAgICAyMzYsMTA4LDEyOCwyNTQsIDgyLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDIzMiwyNDMsCisgICAgMjQwLDIzOSwyMzcsMjI5LDIzOCwyMzMsMjMxLDI0MiwyMjksMjI5LDIzNSwyMjcsMjM3LCA5OCwxMjgsICAzLAorICAgICA2NiwyNDAsMjI5LDIzOCwyMjgsMjMzLDIyNywyNDUsMjM2LDIyNSwxMTQsMTI4LCAzNCwxNjUsMjQ0LDIzMiwKKyAgICAyMzksMjQ1LDI0MywyMjUsMjM4LDEwMCwxMjgsIDMyLCA0OCwyNDMsMjI5LDI0NCwgOTcsMTI4LCAzMiwxNjcsCisgICAgMjMwLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMTM4LDEwNCwgIDMsMTU0LCA5OCwxNTQsMTQ4LAorICAgIDE1NSwgMjksIDk3LCAgMywxNTQsMTA2LDE1NCwxMTYsMTU0LDEyMywyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwKKyAgICAxMDUsMTI4LCAgOSwxNzEsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDQzLDIzMSwxMTcsICAyLDE1NCwxMzAsCisgICAgMTU0LDEzOSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE3MSwyNDIsMjM3LDI0NSwyMzUsMjMyLAorICAgIDEwNSwxMjgsIDEwLCA0MywxMDUsMTMzLCAgMywxOTgsMTU0LDE2MiwxNTQsMTY2LDE1NCwyNTIsMTU1LCAgNCwKKyAgICAxNTUsIDE1LCA0OSwxMjgsICAzLDIxMywyMjksMjQ1LDI0MCwxMDQsICA0LDE1NCwxNzksMTU0LDIxNCwxNTQsCisgICAgMjI5LDE1NCwyMzgsIDk3LCAgMiwxNTQsMTg1LDE1NCwyMDAsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LAorICAgIDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwxMjIsMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwKKyAgICAyMjksMjI1LDExMCwxMjgsIDUwLCAyNiwyMjcsMjMzLDI0MiwyMjcsMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksCisgICAgMjI1LDExMCwxMjgsIDUwLDEwOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA3NywyNDAsMjI1LAorICAgIDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsIDEyLDIzNiwyMjUsMjQ0LDIzMywKKyAgICAxMTAsMTI4LCAgMiwxMjAsMjM4LDI0NCwyMzIsMjQ1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA1OCwyNDMsCisgICAgMjQ5LDIzNywyMjYsMjM5LDIzNiwyMzEsMjQyLDIyOSwyMjksMTA3LDEyOCwgIDMsMjEzLDExMSwgIDMsMTU1LAorICAgICAzNywxNTUsIDQyLDE1NSwgNjgsMjM5LDEwNywxMjgsICAxLDE2NSwyNDAsMTA0LCAgMiwxNTUsIDQ5LDE1NSwKKyAgICAgNTgsMjI1LDIzOCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgMzAsMjQ1LDIzOCwyMzEsMjQ0LDIzMiwyMjUsCisgICAgMTA1LDEyOCwgMTQsIDI4LDI0MywyMjUsMjM3LDI0MCwyMzIsMjI1LDIzOSwyNDQsMjMyLDIyNSwxMDUsMTI4LAorICAgICAxNCwgMzIsMTA1LDEzMywgIDMsMTkyLDE1NSwgOTYsMTU2LCA1MiwxNTYsIDYzLDE1NiwgNzQsMTU2LCA4OCwKKyAgICAyMjksMjQ1LDExMiwgIDYsMTU1LDExMiwxNTUsMTQ3LDE1NSwxNzksMTU1LDIwNywxNTUsMjIxLDE1NiwgMTcsCisgICAgIDk3LCAgMiwxNTUsMTE4LDE1NSwxMzMsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LAorICAgIDIyNSwxMTAsMTI4LCA1MCwxMTUsMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwKKyAgICAxMjgsIDUwLCAxOSwyMjcsMTA1LCAgMiwxNTUsMTU0LDE1NSwxNjYsMjI5LDI0NSwyMjcsMjM1LDIzOSwyNDIsCisgICAgMjI5LDIyNSwxMTAsMTI4LCA0OSwxMTgsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLAorICAgIDEyOCwgNTAsMTAxLDEwNywgIDIsMTU1LDE4NSwxNTUsMTk5LDIzMywyNDksMjI5LDIzOSwyMzUsMjM1LDIzOSwKKyAgICAyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMTQsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA2NiwyNDAsCisgICAgMjI1LDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsICA1LDI0MywyMzMsMjM5LAorICAgIDExNSwgIDIsMTU1LDIzMCwxNTYsICAyLDEwNywgIDIsMTU1LDIzNiwxNTUsMjUwLDIzMywyNDksMjI5LDIzOSwKKyAgICAyMzUsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMTYsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsCisgICAgIDQ5LCA2OCwyNDQsMjMzLDIzNSwyMjksMjQ1LDI0NCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LAorICAgIDExNywxMTYsICAyLDE1NiwgMjMsMTU2LCAzOCwyMzIsMjMzLDIyOSwyNDUsMjQ0LDIzMiwyMzUsMjM5LDI0MiwKKyAgICAyMjksMjI1LDExMCwxMjgsIDQ5LDExOSwyMzMsMjM1LDIyOSwyNDUsMjQ0LDIzNSwyMzksMjQyLDIyOSwyMjUsCisgICAgMTEwLDEyOCwgNDksMTE1LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMTYsMjM1LAorICAgIDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDIxMiwyNDMsMjQ5LDIzNywyMjYsMjM5LDIzNiwKKyAgICAyMzEsMjQyLDIyOSwyMjksMTA3LDEyOCwgIDMsMjE0LDI0NywyNDIsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsCisgICAgMjI1LDExMCwxMjgsICA1LDEzMSwyMzYsMjQ1LDExNSwxMzIsICAwLCA0MywxNTYsMTE1LDE1NiwxMjYsMTU2LAorICAgIDEzNSwxNTYsMTY4LDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgMzEsMjI3LDIzMywKKyAgICAyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNCwxNDksMTA5LCAgMiwxNTYsMTQxLDE1NiwxNDgsMjMzLDIzOCwyNDUsCisgICAgMTE1LDEyOCwgIDAsMTc3LDExMSwgIDIsMTU2LDE1NCwxNTYsMTU4LDEwMCwxMjgsICAyLDIxNCwyMzgsMjM5LAorICAgIDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgMTEsMTE1LCAgMiwxNTYsMTc0LDE1NiwxODEsMjM3LDIyNSwKKyAgICAyMzYsMTA4LDEyOCwyNTQsIDk4LDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsIDMyLDEyMiwxMDksCisgICAgICAyLDE1NiwxOTcsMTU2LDIwOCwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDgwLAorICAgIDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsMjE2LDExMSwgIDUsMTU2LDIyOSwxNTYsMjQwLDE1NywKKyAgICAgNTEsMTU3LCA2MiwxNTcsIDcyLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMjUsCisgICAgMjMzLDIzOCwyNDQsMjMzLDIzOCwyMzEsMjMzLDIzOCwyMjgsMjI5LDEyMCwgIDQsMTU3LCAgNCwxNTcsIDE2LAorICAgIDE1NywgMjgsMTU3LCA0MSwyMjgsMjM5LDI0NywyMzgsMjQ3LDIzMiwyMzMsMjQ0LDEwMSwxMjgsIDM4LCAzMSwKKyAgICAyMzYsMjI5LDIzMCwyNDQsMjQ3LDIzMiwyMzMsMjQ0LDEwMSwxMjgsIDM4LCAyOCwyNDIsMjMzLDIzMSwyMzIsCisgICAgMjQ0LDI0NywyMzIsMjMzLDI0NCwxMDEsMTI4LCAzOCwgMzAsMjQ1LDI0MCwyNDcsMjMyLDIzMywyNDQsMTAxLAorICAgIDEyOCwgMzgsIDI5LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyMjEsMjQwLDIzNiwKKyAgICAyMjUsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDI3LDI0MywyNDQsMjI1LDIzNiwyMzcsMjI1LDI0MiwxMDcsCisgICAgMTI5LCA0OCwgMTgsMTU3LCA4NSwyMzAsMjI1LDIyNywxMDEsMTI4LCA0OCwgMzIsMjQwLDIyNSwyNDIsMjI5LAorICAgIDExMCwxMjgsIDM2LDE3MSwxMTQsICAzLDE1NywxMDgsMTU3LDEzNCwxNTcsMTU5LDEwMSwgIDIsMTU3LDExNCwKKyAgICAxNTcsMTIyLDIyNywyMjksMjI4LDIyOSwxMTUsMTI4LCAzNCwxMjIsMjQzLDIyNywyNDIsMjMzLDI0MCwyNDQsCisgICAgMjMzLDIzOSwxMTAsMTI4LCAzMywgMzAsMjMzLDIzNywxMDEsICAyLDE1NywxNDIsMTU3LDE0OCwyMzcsMjM5LAorICAgIDEwMCwxMjgsICAyLDE4NSwyNDIsMjI5LDI0NiwyMjksMjQyLDI0MywyMjksMTAwLDEyOCwgMzIsIDUzLDExMSwKKyAgICAgIDQsMTU3LDE2OSwxNTcsMTc2LDE1NywxODYsMTU3LDE5OSwyMjgsMjQ1LDIyNywxMTYsMTI4LCAzNCwgMTUsCisgICAgMjM0LDIyOSwyMjcsMjQ0LDIzMywyNDYsMTAxLDEyOCwgMzUsICA1LDIzNiwyMzksMjM4LDIzMSwyMjksMjI4LAorICAgIDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI1MiwxMTIsICAyLDE1NywyMDUsMTU3LDI0MiwxMDEsICAyLDE1NywKKyAgICAyMTEsMTU3LDIxOCwyMzYsMjM2LDIzOSwxMTQsMTI4LCAzNSwgMjQsMjQyLDI0MywxMTcsICAyLDE1NywyMjYsCisgICAgMTU3LDIzMywyMjYsMjQzLDIyOSwxMTYsMTI4LCAzNCwxMzAsMjQwLDIyOSwyNDIsMjQzLDIyOSwxMTYsMTI4LAorICAgICAzNCwxMzEsMjM5LDI0MiwyNDQsMjMzLDIzOSwxMTAsMTI5LCAzNCwgNTUsMTU3LDI1MywyMjUsMTA4LDEyOCwKKyAgICAgMzQsIDI5LDExNSwgIDIsMTU4LCAgOCwxNTgsIDUxLDEwNSwxMzAsICAzLDIwMCwxNTgsIDE2LDE1OCwgMjcsCisgICAgMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDExMywyMzYsMjMzLDI0MCwyMzgsMjI5LAorICAgIDI0NSwyMzcsMjI1LDI0NCwyMjUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLDIyNywyMjcsMjM3LCA5OCwKKyAgICAxMjgsICA0LDEzNCwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE3NiwxMTcsICAyLDE1OCwgNjYsCisgICAgMTU4LCA3NywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTE5LDIzNSwyMjUsMjQ0LAorICAgIDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyMTUsMjQ2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwKKyAgICAgNTEsMTgwLDI0NywyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE4NiwxMTMsMTM2LCAgMCwxMTMsCisgICAgMTU4LDEyOCwxNTksMTc3LDE1OSwxODgsMTU5LDE5NywxNTksMjA0LDE1OSwyMTYsMTU5LDI1NCwxNjAsICA2LAorICAgICA5NywgIDQsMTU4LDEzOCwxNTgsMTYxLDE1OCwyMjUsMTU5LDE2MCwxMDAsICAyLDE1OCwxNDQsMTU4LDE1MCwKKyAgICAyMjksMjQ2LCA5NywxMjgsICA5LCA4OCwyMzcsMjI1LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsCisgICAgMTY4LDEwMiwgIDQsMTU4LDE3MSwxNTgsMTgwLDE1OCwxOTQsMTU4LDIxMCwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsICA2LCA2NiwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwKKyAgICAyNTQsMjE0LDIzMywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgMjU0LDIxNSwyMzcsMjI5LDIyOCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LAorICAgIDIxNiwyMzcsMjI1LDI0NCwxMTUsMTM2LCAgNSwxODQsMTU4LDI0OCwxNTksIDEyLDE1OSwgMjYsMTU5LCAzMSwKKyAgICAxNTksIDM2LDE1OSwgNDUsMTU5LCA2MCwxNTksMTQ3LCA0OSwgIDMsMTU5LCAgMCwxNTksICA0LDE1OSwgIDgsCisgICAgIDQ4LDEyOCwgIDUsMTg0LCA5NywxMjgsICA1LDE4NCwgOTksMTI4LCAgNSwxODQsIDUwLCAgMiwxNTksIDE4LAorICAgIDE1OSwgMjIsIDU1LDEyOCwgIDUsMTg0LCA1NywxMjgsICA1LDE4NCwxNzksIDUxLDEyOCwgIDUsMTg0LDIyOCwKKyAgICAxMDEsMTI4LCAgNSwxODQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODQsMjM4LDIyNSwyNDIsCisgICAgMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODQsMTEzLCAgMiwxNTksIDY2LAorICAgIDE1OSwxMzIsMjI1LDI0NCwyMjUsMTEwLCAgNCwxNTksIDc5LDE1OSwgODgsMTU5LDEwMywxNTksMTE5LDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTg0LDIzOCwyMjUsMjQyLDI0MiwyMzksMjQ3LDIzMiwyMjksCisgICAgMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTg0LDI0MSwyNDUsMjI1LDI0MiwyNDQsMjI5LDI0MiwyMzIsMjI5LAorICAgIDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4NCwyNDcsMjMzLDIyOCwyMjksMjMyLDIyOSwyMjYsMjQyLDIyOSwKKyAgICAxMTksMTI4LCAgNSwxODQsMjQ1LDIyNSwyNDIsMjQ0LDIyOSwyNDIsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksCisgICAgMTI4LCAgNSwxODQsMjQ3LDIzMywyMjgsMjI5LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTg0LAorICAgIDI0MiwyMzgsMjI5LDI0OSwyNDAsMjI1LDI0MiwyMjUsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwKKyAgICAxNTksMjI2LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAxNywyMjcsMjMzLDI0MiwyMjcsCisgICAgMjM2LDEwMSwxMjgsIDM2LDIyNCwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMiwxNjAsMjM3LDIzOSwyMzgsMjM5LAorICAgIDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgODEsMjM5LDEwMiwxMzAsICA1LDIzMSwxNTksMjI1LDE1OSwKKyAgICAyNDUsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNzEsMTU5LDIzNiwyMzIsMjI5LDIyNiwyNDIsCisgICAgMjI5LDExOSwxMjgsMjUxLCA3MSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIzMSwyNDAsMjI1LAorICAgIDI0MiwyMjksMTEwLDEyOCwgMzYsMTcyLDExNywgIDQsMTYwLCAxNiwxNjAsIDI4LDE2MCwxMTcsMTYwLDIwNCwKKyAgICAyMjUsMjQyLDI0NCwyMjksMjQyLDIzOCwyMzksMjQ0LDEwMSwxMjgsIDM4LDEwNSwyMjYsMjQ1LDI0NCwxMTUsCisgICAgMTM1LCAgNSwxODcsMTYwLCA0OSwxNjAsIDU0LDE2MCwgNTksMTYwLCA2NCwxNjAsIDczLDE2MCwgODgsMTYwLAorICAgIDEwNCwxNzcsIDU2LDEyOCwgIDUsMTg3LDE3OCwgNTMsMTI4LCAgNSwxODcsMTc5LCA0OSwxMjgsICA1LDE4NywKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4NywyMzgsMjI1LDI0MiwyNDIsMjM5LDI0NywyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4NywyNDEsMjQ1LDIyNSwyNDIsMjQ0LDIyOSwyNDIsMjMyLAorICAgIDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODcsMjQ3LDIzMywyMjgsMjI5LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwgIDUsMTg3LDIyOSwyNDMsMjQ0LDIzMywyMzksMTEwLDEzMywgIDAsIDYzLDE2MCwxMzYsCisgICAgMTYwLDE1OSwxNjAsMTc2LDE2MCwxODQsMTYwLDE5NiwyMjUsMTE0LCAgMiwxNjAsMTQzLDE2MCwxNTAsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwgIDYsIDMxLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDk0LDIyOCwKKyAgICAyMzksMjQ3LDExMCwxMjksICAwLDE5MSwxNjAsMTY4LDI0MywyMzcsMjI1LDIzNiwxMDgsMTI4LDI0NywxOTEsCisgICAgMjMxLDI0MiwyMjksMjI5LDEwNywxMjgsICAzLDEyNiwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LAorICAgIDEwMSwxMjgsMjU1LCAzMSwyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNDcsIDYzLDIzOSwyNDQsMTAxLCAgNCwKKyAgICAxNjAsMjE2LDE2MSwgMzEsMTYxLCA1MSwxNjEsIDgwLDIyOCwyMjYsMTA4LDEzMywgIDAsIDM0LDE2MCwyMzIsCisgICAgMTYwLDIzOSwxNjAsMjQ2LDE2MSwgIDIsMTYxLCAyMywyMjYsMjI1LDI0MywxMDEsMTI4LCAzMiwgMzAsMjM2LAorICAgIDIyOSwyMzAsMTE2LDEyOCwgMzIsIDI4LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwKKyAgICAyNTUsICAyLDI0MCwyNDIsMjMzLDIzNywxMDEsMTI5LCA0OCwgMzAsMTYxLCAxMiwyNDIsMjI5LDI0NiwyMjksCisgICAgMjQyLDI0MywyMjksMTAwLDEyOCwgNDgsIDI5LDI0MiwyMzMsMjMxLDIzMiwxMTYsMTI4LCAzMiwgMjksMjM2LAorICAgIDIyOSwyMzAsMTE2LDEyOSwgMzIsIDI0LDE2MSwgNDAsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwKKyAgICAxMjgsIDMyLCAyNywxMTQsICAyLDE2MSwgNTcsMTYxLCA2NywyMjksMjQ2LDIyOSwyNDIsMjQzLDIyOSwxMDAsCisgICAgMTI4LCAzMiwgMjcsMjMzLDIzMSwyMzIsMTE2LDEyOSwgMzIsIDI1LDE2MSwgNzYsMTEwLDEyOCwgIDEsIDczLAorICAgIDI0MywyMzMsMjM4LDIzMSwxMDgsICAyLDE2MSwgOTAsMTYxLCA5NywyMjYsMjI1LDI0MywxMDEsMTI4LCAzMiwKKyAgICAgMjYsMTAxLDEyOSwgIDAsIDM5LDE2MSwxMDMsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsCisgICAgMTI4LDI1NSwgIDcsMTE0LDE0NSwgIDAsMTE0LDE2MSwxNTMsMTYyLDE1NywxNjIsMTY4LDE2MiwyMTUsMTYzLAorICAgICAxMCwxNjQsIDI3LDE2NCwgNTEsMTY0LDE0NiwxNjYsMTgwLDE2NiwyMTcsMTY2LDIyOSwxNjcsIDI3LDE2NywKKyAgICAgMzUsMTY3LDE5NywxNjcsMjA4LDE2NywyNDMsMTY4LCA4NywgOTcsIDExLDE2MSwxNzcsMTYxLDE4OCwxNjEsCisgICAgMTk4LDE2MSwyMDUsMTYyLCAxNCwxNjIsIDMwLDE2MiwgNTUsMTYyLCA2NiwxNjIsIDkxLDE2MiwxMTQsMTYyLAorICAgIDE1MSwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsMTI0LDIyNiwyMjksMjM4LDIzMSwKKyAgICAyMjUsMjM2LDEwNSwxMjgsICA5LDE3NiwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAgMSwgODUsMTAwLCAgNCwxNjEsCisgICAgMjE1LDE2MSwyMjEsMTYxLDIzNSwxNjIsICA1LDIyOSwyNDYsIDk3LDEyOCwgIDksIDQ4LDIzMywyMjcsMjI1LAorICAgIDEwOCwxMjksIDM0LCAyNiwxNjEsMjMwLDIyOSwxMjAsMTI4LDI0OCwyMjksMjM5LDI0NiwyMjksMjQyLDI0MywKKyAgICAyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjksIDUxLDE3NCwxNjEsMjUxLDIyOCwyNDMsMjQxLDI0NSwyMjUsCisgICAgMjQyLDEwMSwxMjgsIDUxLDE3NSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDE3MywyMzAsMTAxLAorICAgIDEyOSwgIDUsMTkxLDE2MiwgMjEsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxOTEsMjMxLDExNywKKyAgICAgIDIsMTYyLCAzNywxNjIsIDQ2LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTc2LDI0MiwyMzcsCisgICAgMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDQ4LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LAorICAgICA0OCwxMzcsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIzMywxNjIsIDc5LDIzMiwKKyAgICAyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTUxLDIzNiwyMzksMjQ3LDIyOSwyNDIsCisgICAgMjI4LDIzMywyMjUsMjMxLDIzOSwyMzgsMjI1LDIzNiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LAorICAgICAgOSwyNDEsMTA5LCAgMiwxNjIsMTIwLDE2MiwxNDMsMjMzLDIyOCwyMjgsMjM2LDIyOSwyMjgsMjMzLDIyNSwKKyAgICAyMzEsMjM5LDIzOCwyMjUsMjM2LDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDI0MCwyNDMsCisgICAgMjMyLDIzOSwyNDIsMTEwLDEyOCwgIDIsMTAwLDI0NCwyMzMsMTExLDEyOCwgMzQsIDU0LDIyNiwyMzksMjQwLAorICAgIDIzOSwyMzcsMjM5LDIzMCwxMTEsMTI4LCA0OSwgMjIsIDk5LCAgNCwxNjIsMTc4LDE2MiwxODUsMTYyLDE5NCwKKyAgICAxNjIsMjAyLDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLCA4OSwyMjksMjI4LDIzMywyMzYsMjM2LCA5NywxMjgsCisgICAgICAxLCA4NywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMjI1LDIzOSwyMzcsMjM3LDIyNSwyMjUsMjI3LAorICAgIDIyNywyMjksMjM4LDExNiwxMjgsICAxLCA4NywxMDAsICAyLDE2MiwyMjEsMTYyLDIzMSwyMjYsMjM2LDIzMSwKKyAgICAyNDIsMjI1LDI0NiwxMDEsMTI4LCAgMiwgMTcsMjM5LDExNiwgIDIsMTYyLDIzOCwxNjIsMjQ3LDIyNSwyMjcsCisgICAgMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsIDg5LDIyNiwyMjksMjM2LDIzOSwxMTksMTI5LCAzMCwgOTEsMTYzLAorICAgICAgMSwyMzcsMjI1LDIyNywyNDIsMjM5LDExMCwxMjgsIDMwLCA5MywxMDEsICA2LDE2MywgMjQsMTYzLCA2OSwKKyAgICAxNjMsMTA0LDE2MywxNTksMTYzLDE4NCwxNjMsMjE3LDEwMiwgIDIsMTYzLCAzMCwxNjMsIDQzLDIyOSwyNDIsCisgICAgMjI5LDIzOCwyMjcsMjI5LDIzNywyMjUsMjQyLDEwNywxMjgsIDMyLCA1OSwyMzYsMjI5LDI0OCwyNDMsMTE3LAorICAgICAgMiwxNjMsIDUzLDE2MywgNjAsMjI2LDI0MywyMjksMTE2LDEyOCwgMzQsMTM0LDI0MCwyMjksMjQyLDI0MywKKyAgICAyMjksMTE2LDEyOCwgMzQsMTM1LDIzMSwyMzMsMjQzLDI0NCwyMjksMTE0LCAgMiwxNjMsIDgwLDE2MywgODUsCisgICAgMjI5LDEwMCwxMjgsICAwLDE3NCwxMTUsICAyLDE2MywgOTEsMTYzLCA5NywyMjUsMjM4LDExNSwxMjgsMjQ4LAorICAgIDIzMiwyMjksMjQyLDIzMywxMDIsMTI4LDI0NiwyMTgsMTA0LCAgMywxNjMsMTEyLDE2MywxMzUsMTYzLDE0OSwKKyAgICAyMjUsMTE0LCAgMiwxNjMsMTE5LDE2MywxMjYsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDQ5LDIzNywyMjksCisgICAgMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsMTI4LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LDI1NCwxNzQsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTQwLDIzNSwKKyAgICAyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMzYsMTYzLDE3MiwyMzIsMjI1LDIzNiwyMzAsCisgICAgMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDE1NCwyNDMsMTA0LDEzMCwgIDUsMjMyLDE2MywxOTMsMTYzLAorICAgIDIwOCwyMjgsMjI1LDIzMSwyMjksMjQzLDIzMiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA3MiwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIzMiwxMTgsICAzLDE2MywyMjUsMTYzLDIzOCwxNjQsCisgICAgIDE0LDIyOSwyNDIsMjQzLDIyOSwyMjgsMjQ0LDIzMywyMzYsMjI4LDEwMSwxMjgsIDM0LCA2MSwyMzMsIDk3LAorICAgICAgMiwxNjMsMjQ1LDE2MywyNTQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNTEsMjM3LDI0NSwKKyAgICAyMzEsMjQyLDIyNSwyNDMsMjMyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTUxLDIzNiwyMzksCisgICAgMjMxLDIzMywyMjcsMjI1LDIzNiwyMzgsMjM5LDExNiwxMjgsIDM1LCAxNiwyMzAsMjMzLDI0MywyMzIsMjMyLAorICAgIDIzOSwyMzksMTA3LDEyOSwgIDIsMTI2LDE2NCwgNDAsMjQyLDIyOSwyNDYsMjI5LDI0MiwyNDMsMjI5LDEwMCwKKyAgICAxMjgsICAyLDEyNywxMDQsICAyLDE2NCwgNTcsMTY0LCA4MCwgOTcsICAyLDE2NCwgNjMsMTY0LCA3MywyMjYsCisgICAgMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMjEsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDkzLAorICAgIDExMSwxMzEsICAzLDE5MywxNjQsIDkwLDE2NCwxMTksMTY0LDEzMywyMzksMTA3LDEyOSwgIDIsMTI1LDE2NCwKKyAgICAgOTcsMjQ0LDI0NSwyNDIsMjM4LDIyOSwxMDAsMTI5LCAgMiwxMjMsMTY0LDEwOCwyNDMsMjQ1LDI0MCwyMjksCisgICAgMjQyLDIzMywyMzksMTE0LDEyOCwgIDIsMTgxLDI0MywyNDksMjM3LDIyNiwyMzksMjM2LDIzMSwyNDIsMjI5LAorICAgIDIyOSwxMDcsMTI4LCAgMywyNDEsMjQ0LDIzMywyMjcsMjMyLDIzOSwyMzksMjM1LDIzNywyMzksMTAwLDEyOCwKKyAgICAgIDIsMjIyLDEwNSwgIDYsMTY0LDE2MCwxNjUsMjA0LDE2NSwyNTAsMTY2LCAgNSwxNjYsIDMwLDE2NiwxNjYsCisgICAgMjI5LDI0NSwxMDgsICA5LDE2NCwxODIsMTY0LDIxNywxNjQsMjMyLDE2NCwyNDYsMTY1LCAzNiwxNjUsIDUwLAorICAgIDE2NSwxMzYsMTY1LDE0OSwxNjUsMTg0LCA5NywgIDIsMTY0LDE4OCwxNjQsMjAzLDIyNywyMzMsMjQyLDIyNywKKyAgICAyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNTAsMTEzLDI0MCwyMjUsMjQyLDIyOSwyMzgsCisgICAgMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgMTcsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LAorICAgIDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgOTksMjMyLDIzMywyMjksMjQ1LDIzMiwyMzUsMjM5LDI0MiwKKyAgICAyMjksMjI1LDExMCwxMjgsIDQ5LCA2NCwxMDcsICAyLDE2NCwyNTIsMTY1LCAyOCwyMzMsMjQ5LDIyOSwyMzksCisgICAgMTA3LCAgMiwxNjUsICA2LDE2NSwgMTUsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNTgsMjQzLAorICAgIDIzMywyMzksMjQzLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTA1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA0OSwgNTcsMjM3LDIzMywyMjksMjQ1LDIzNywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsCisgICAgIDQ5LCA1OSwxMTIsICAzLDE2NSwgNTgsMTY1LCA5MCwxNjUsMTA1LCA5NywgIDIsMTY1LCA2NCwxNjUsIDc4LAorICAgIDIzOCwyNDMsMjMzLDIzOSwyNDMsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMDgsMjQyLDIyOSwKKyAgICAyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwgIDMsMjMyLDIzMywyMjksMjQ1LDI0MCwyMzIsCisgICAgMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNjMsMjMzLDIyOSwyNDUsMTEyLCAgMiwxNjUsMTE0LAorICAgIDE2NSwxMjMsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNjAsMjQzLDIzMywyMzksMjQzLDIzNSwKKyAgICAyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTA3LDI0MywyMzMsMjM5LDI0MywyMzUsMjM5LDI0MiwyMjksCisgICAgMjI1LDExMCwxMjgsIDQ5LCA2MSwxMTYsICAyLDE2NSwxNTUsMTY1LDE3MCwyMzIsMjMzLDIyOSwyNDUsMjQ0LAorICAgIDIzMiwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA2MiwyMzMsMjM1LDIyOSwyNDUsMjQ0LDIzNSwKKyAgICAyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTA2LDI0OSwyMjksMjM5LDI0MiwyMzMsMjM4LDIzMiwyMzMsCisgICAgMjI5LDI0NSwyMzIsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMDksMjMxLDIzMiwxMTYsICAyLAorICAgIDE2NSwyMTIsMTY1LDIyMCwyMjUsMjM4LDIzMSwyMzYsMTAxLDEyOCwgMzQsIDMxLDExNiwgIDIsMTY1LDIyNiwKKyAgICAxNjUsMjQwLDIyNSwyMjcsMjM1LDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgMjUsCisgICAgMjQyLDIzMywyMjUsMjM4LDIzMSwyMzYsMTAxLDEyOCwgMzQsMTkxLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LAorICAgIDIzOCwgOTcsMTI4LCA0OCwxMzgsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIzNCwKKyAgICAxNjYsIDE4LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTUyLDExMCwgIDIsCisgICAgMTY2LCAzNiwxNjYsMTUyLDEwMywxMzEsICAyLDIxOCwxNjYsIDQ2LDE2NiwgNTcsMTY2LCA2MywyMjYsMjI5LAorICAgIDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDM3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDEwLDIzMiwKKyAgICAyMjUsMjM2LDEwMiwgIDIsMTY2LCA3MiwxNjYsMTE4LDIzNiwyMjksMjMwLDExNiwxMzEsICAyLDE5MSwxNjYsCisgICAgIDg1LDE2NiwgOTYsMTY2LDEwNywyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsIDg5LAorICAgIDIyNiwyMjksMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgMjgsMjI3LDIyOSwyMzgsMjQ0LDIyOSwKKyAgICAyNDIsMjI5LDEwMCwxMjgsICAyLDIxMSwyNDIsMjMzLDIzMSwyMzIsMTE2LDEzMCwgIDIsMTkwLDE2NiwxMzAsCisgICAgMTY2LDE0MSwyMjYsMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDU3LDIyNywyMjksMjM4LAorICAgIDI0NCwyMjksMjQyLDIyOSwxMDAsMTI4LCAgMiwyMTAsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwyMjgsMjI2LDI0MiwKKyAgICAyMjksMjQ2LDEwMSwxMjgsICAyLCAxOSwyNDQsMjQ0LDIzOSwyNDIsMjQ1LDI0MywyNDEsMjQ1LDIyNSwyNDIsCisgICAgMTAxLDEyOCwgNTEsIDgxLDEwOCwgIDIsMTY2LDE4NiwxNjYsMTk3LDIzMywyMzgsMjI5LDIyNiwyMjksMjM2LAorICAgIDIzOSwxMTksMTI4LCAzMCwgOTUsMjM5LDIzOCwyMzEsMjM2LDIyOSwxMDMsMTI5LCAgMiwxMjQsMTY2LDIwOCwKKyAgICAyNDQsMjQ1LDI0MiwyMzgsMjI5LDEwMCwxMjgsICAyLDEyMiwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsCisgICAgMjI3LDEwMSwxMjgsMjU1LCA4MiwxMTEsICAzLDE2NiwyMzcsMTY2LDI0OCwxNjcsIDE3LDIzMiwyMzMsMjQyLAorICAgIDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxNDEsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywKKyAgICAxMjksIDQ4LDIzNywxNjcsICA1LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsCisgICAgMTU1LDI0MiwyNDUsMjI1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAzNSwyNDAsMjI1LDI0MiwyMjksMTEwLAorICAgIDEyOCwgMzYsMTczLDExNCwgIDMsMTY3LCA0MywxNjcsIDc5LDE2NywxMDksIDk3LCAgMywxNjcsIDUxLDE2NywKKyAgICAgNjEsMTY3LCA2OCwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMjAsMjI4LDIyOSwyNDYsCisgICAgIDk3LDEyOCwgIDksIDQ5LDIzMSwyNDUsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwgOTIsMjI5LAorICAgIDEwNCwgIDIsMTY3LCA4NiwxNjcsIDk1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTQ1LDIzMCwKKyAgICAyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxNDEsMjQ2LDIzOSwyMjcsCisgICAgMjI1LDIzNiwyMzMsIDk5LCAgNCwxNjcsMTI1LDE2NywxMzUsMTY3LDE0MiwxNjcsMTUzLDIyNiwyMjksMjM4LAorICAgIDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDIyNCwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgOTYsMjMxLDI0NSwKKyAgICAyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDIyNCwyNDYsMjM5LDI0NywyMjksMjM2LDI0MywyMzMsCisgICAgMjMxLDExMCwgIDMsMTY3LDE2OSwxNjcsMTc5LDE2NywxODYsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LAorICAgIDEyOCwgIDksMTk2LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA2OCwyMzEsMjQ1LDIzNCwyMjUsMjQyLDIyNSwKKyAgICAyNDQsMTA1LDEyOCwgMTAsMTk2LDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LDI0NiwyNDEsCisgICAgMTE2LCAgMiwxNjcsMjE0LDE2NywyMjIsMjI2LDIzNiwyMzksMjI3LDEwNywxMjgsIDM3LDE0NCwyNDUsMjQyLAorICAgIDIzOCwyMjksMTAwLDEyOSwgIDIsMTIxLDE2NywyMzIsMjQzLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwKKyAgICAxMjgsICAyLDE4MCwxMTcsICA0LDE2NywyNTMsMTY4LCAgOCwxNjgsIDMzLDE2OCwgODAsMjMyLDIzMywyNDIsCisgICAgMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEzOSwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LAorICAgIDEyOSwgNDgsMjM1LDE2OCwgMjEsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwKKyAgICAxNTMsMTEyLCAgMiwxNjgsIDM5LDE2OCwgNzQsMjI5LDEwMSwgIDIsMTY4LCA0NiwxNjgsIDYwLDIzNywyMjUsCisgICAgMjQyLDIzNSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyNDIsMjQzLDIzMywyMzEsMjM4LAorICAgIDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDI0MywyMzMsMjI1LDEwNCwxMjgsMjQ2LDIyMSwKKyAgICAyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgMzYsMjQ2LDIzOSwyMjcsMjI1LDIzNiwyMzMsIDk5LCAgNCwxNjgsCisgICAgMTAzLDE2OCwxMTMsMTY4LDEyMCwxNjgsMTMxLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LAorICAgIDEzOSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgMTEsMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwKKyAgICAxMjgsIDEwLDEzOSwyNDYsMjM5LDI0NywyMjksMjM2LDI0MywyMzMsMjMxLDExMCwgIDMsMTY4LDE0NywxNjgsCisgICAgMTU3LDE2OCwxNjQsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTk1LDIyOCwyMjksMjQ2LAorICAgICA5NywxMjgsICA5LCA2NywyMzEsMjQ1LDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTk1LDExNSwKKyAgICAxNDcsICAwLDExNSwxNjgsMjE3LDE3MCwxODcsMTcwLDE5OCwxNzEsIDY4LDE3MSwxMDcsMTc0LCA0OSwxNzQsCisgICAgIDYwLDE3NiwyMDMsMTc5LCA4NSwxNzksMTMxLDE3OSwxNTgsMTgwLCA5MywxODAsMTYwLDE4MSwxOTMsMTgxLAorICAgIDIwMywxODIsMTMzLDE4MiwyMDYsMTgzLDEyMCwxODMsMTMwLCA5NywgIDksMTY4LDIzNywxNjgsMjQ3LDE2OSwKKyAgICAgMTIsMTY5LCA4NCwxNjksMTA5LDE2OSwxMjAsMTY5LDE0NSwxNjksMTc3LDE2OSwyMTcsMjI2LDIyOSwyMzgsCisgICAgMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTg0LDIyNywyNDUsMjQ0LDEwMSwxMjksICAxLCA5MSwxNjksICAwLAorICAgIDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgMzAsMTAxLDEwMCwgIDUsMTY5LCAyNCwKKyAgICAxNjksIDMzLDE2OSwgMzksMTY5LCA1MywxNjksIDY5LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsCisgICAgIDUzLDIyOSwyNDYsIDk3LDEyOCwgIDksIDU2LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LDI1NCwxODYsMjMzLDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwKKyAgICAyMzMsIDk5LDEyOCwyNTQsMTg3LDIzNywyMjksMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwyNTQsMTg4LDIzMSwxMTcsICAyLDE2OSwgOTEsMTY5LDEwMCwyMzQsMjI1LDI0MiwyMjUsMjQ0LAorICAgIDEwNSwxMjgsIDEwLDE4NCwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCA1NiwyMzIsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDg1LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsCisgICAgMTI5LCA0OCwxODEsMTY5LDEzMywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LAorICAgIDEyMywyMzYsMjM2LDIyNSwyMzYsMjM2LDIyNSwyMzIsMjM5LDI0NSwyMjUsMjM2LDIyNSwyNDksMjMyLDIyOSwKKyAgICAyNDcsMjI1LDI0MywyMjUsMjM2LDIzNiwyMjUsMjM3LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTMsCisgICAgMjUwLDIzNywyMjksMjM1LDEwNCwxMzAsICA1LDIyNSwxNjksMTg4LDE2OSwyMDgsMjI4LDIyNSwyMzEsMjI5LAorICAgIDI0MywxMDQsMTI5LDI1MSwgNjUsMTY5LDE5OSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA2NSwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIyNSwyNDIsIDk3LCAgNSwxNjksMjMwLDE3MCwgNDgsCisgICAgMTcwLCA1NiwxNzAsMTA2LDE3MCwxMTQsIDk3LCAgNSwxNjksMjQyLDE2OSwyNTAsMTcwLCAgMiwxNzAsIDMzLAorICAgIDE3MCwgNDEsMjI1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA1MCwyMjksMjQ0LDIzMiwyMjUsMTA1LDEyOCwKKyAgICAgMTQsIDY1LDIzMywyMzcsMjI1LDIzMywxMDksICAyLDE3MCwgMTIsMTcwLCAyMywyMjUsMjM2LDIyNSwyMzMsCisgICAgMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDY4LDI0NSwyMjUsMjM4LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LAorICAgICA2NywyMzcsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDUxLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA0OCwKKyAgICAyMjksMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDY0LDEwNSwgIDMsMTcwLCA2NCwxNzAsIDg4LDE3MCwgOTksCisgICAgMTA1LCAgMiwxNzAsIDcwLDE3MCwgODEsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LAorICAgIDEzNCwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNTMsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LDEwNSwKKyAgICAxMjgsMjQ4LDEzMywyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNTIsMjM5LDI0NCwyMzIsMjI1LDEwNSwxMjgsCisgICAgIDE0LCA2NiwxMTcsICAzLDE3MCwxMjIsMTcwLDE3MiwxNzAsMTc5LDEwMSwgIDMsMTcwLDEzMCwxNzAsMTU0LAorICAgIDE3MCwxNjUsMTAxLCAgMiwxNzAsMTM2LDE3MCwxNDcsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LDEwNSwKKyAgICAxMjgsMjQ4LDEzNiwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNTUsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsCisgICAgMjI1LDEwNSwxMjgsMjQ4LDEzNSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNTQsMjQ0LDIzMiwyMjUsMTA1LAorICAgIDEyOCwgMTQsIDU2LDI0NSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNTcsMjI2LDIzOSwyNDAsMjM5LDIzNywKKyAgICAyMzksMjMwLDExMSwxMjgsIDQ5LCAyNSwgOTksICA1LDE3MCwyMTAsMTcwLDIzMSwxNzAsMjQwLDE3MSwgMzMsCisgICAgMTcxLCA1NSwyMjUsMjQyLDIzOSwxMTAsMTI5LCAgMSwgOTcsMTcwLDIxOSwyMjgsMjM5LDI0NCwyMjUsMjI3LAorICAgIDIyNywyMjksMjM4LDExNiwxMjgsIDMwLDEwMywyMjksMjI4LDIzMywyMzYsMjM2LCA5NywxMjgsICAxLCA5NSwKKyAgICAyMzIsMjQ3LCA5NywxMzEsICAyLCA4OSwxNzAsMjUyLDE3MSwgIDcsMTcxLCAyNiwyMjcsMjQ5LDI0MiwyMzMsCisgICAgMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMjE3LDIyOCwyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIxOSwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMiwKKyAgICAgOTAsMjMzLDI0MiwgOTksICAyLDE3MSwgNDEsMTcxLCA0NiwyMzYsMTAxLDEyOCwgMzYsMjI2LDI0NSwyMzcsCisgICAgMjMwLDIzNiwyMjksMTIwLDEyOCwgIDEsIDkzLDIzOSwyMzcsMjM3LDIyNSwyMjUsMjI3LDIyNywyMjksMjM4LAorICAgIDExNiwxMjgsICAyLCAyNSwyMjgsMjM5LDExNiwgIDIsMTcxLCA3NiwxNzEsIDg1LDIyNSwyMjcsMjI3LDIyOSwKKyAgICAyMzgsMTE2LDEyOCwgMzAsIDk3LDIyNiwyMjksMjM2LDIzOSwxMTksMTI5LCAzMCwgOTksMTcxLCA5NSwyMjgsCisgICAgMjM5LDI0NCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsIDMwLDEwNSwxMDEsICA5LDE3MSwxMjcsMTcxLAorICAgIDE0MywxNzEsMTc4LDE3MSwyNDMsMTcyLCA5MCwxNzIsMTE3LDE3MiwxNDIsMTcyLDIyMywxNzIsMjUwLDIyNSwKKyAgICAyMzEsMjQ1LDIzNiwyMzYsMjI2LDIyOSwyMzYsMjM5LDI0NywyMjcsMjM3LCA5OCwxMjgsICAzLCA2MCwgOTksCisgICAgICAyLDE3MSwxNDksMTcxLDE3MSwyMzksMjM4LDEwMCwxMjksIDMyLCA1MSwxNzEsMTU3LDI0NCwyMzksMjM4LAorICAgIDIyOSwyMjcsMjMyLDIzMywyMzgsMjI5LDI0MywxMDEsMTI4LCAgMiwyMDIsMjQ0LDIzMywyMzksMTEwLDEyOCwKKyAgICAgIDAsMTY3LDIyOSwxMTAsICA0LDE3MSwxODksMTcxLDE5OCwxNzEsMjEyLDE3MSwyMjgsMjI1LDI0MiwyMjUsCisgICAgMjI2LDIzMywgOTksMTI4LCAgNiwgNTEsMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsMjU0LDE3OCwyMzMsMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywKKyAgICAgOTksMTI4LDI1NCwxNzksMjM3LDIyOSwyMjgsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksCisgICAgMTI4LDI1NCwxODAsMjMxLDIzOSwxMDgsMTM1LCAgNSwxODIsMTcyLCAgNywxNzIsIDIxLDE3MiwgMjYsMTcyLAorICAgICAzNSwxNzIsIDUwLDE3MiwgNjYsMTcyLCA3NywgNDksICAyLDE3MiwgMTMsMTcyLCAxNywgNTEsMTI4LCAgNSwKKyAgICAxODIsMTAyLDEyOCwgIDUsMTgyLDE3OCwgOTksMTI4LCAgNSwxODIsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksCisgICAgMTI4LCAgNSwxODIsMjM4LDIyNSwyNDIsMjQyLDIzOSwyNDcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwxODIsMjQxLDI0NSwyMjUsMjQyLDI0NCwyMjksMjQyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwKKyAgICAgIDUsMTgyLDI0NCwyMjUsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNDYsMjQ3LDIzMywyMjgsCisgICAgMjI5LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTgyLDEwNCwgIDIsMTcyLCA5NiwxNzIsMTA3LAorICAgIDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMjUsMjMzLDI0MiwyMjUsMjMxLDIyNSwKKyAgICAyMzgsIDk3LDEyOCwgNDgsIDkxLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwxODcsCisgICAgMTcyLDEzMCwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEyNiwyMzcsMTA1LAorICAgICAgMiwxNzIsMTQ5LDE3MiwxOTIsMjI3LDIzOSwyMzYsMjM5LDExMCwxMzEsICAwLCA1OSwxNzIsMTYzLDE3MiwKKyAgICAxNzIsMTcyLDE4NCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCAyNywyMzcsMjM5LDIzOCwyMzksCisgICAgMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAyNywyNDMsMjM3LDIyNSwyMzYsMTA4LDEyOCwyNTQsIDg0LAorICAgIDI0NiwyMzksMjMzLDIyNywyMjksMjI4LDIzNywyMjUsMjQyLDIzNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwKKyAgICAxNTYsMTcyLDIxMSwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDE1OSwyMzgsCisgICAgMTE2LCAgMiwxNzIsMjMwLDE3MiwyNDAsMjMzLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDM0LAorICAgIDIzOSwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLCAzNSwyNDYsMjI5LDExMCwxNDIsICAwLCA1NSwKKyAgICAxNzMsIDI4LDE3MywgMzcsMTczLCA0NywxNzMsIDc3LDE3MywgODQsMTczLCA5NCwxNzMsMTE5LDE3MywxNDYsCisgICAgMTczLDE4MCwxNzMsMTkyLDE3MywyMDMsMTczLDIzNiwxNzMsMjQ0LDE3MywyNTUsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LCAgNiwxMDMsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMjM3LDIyNywKKyAgICAyMzMsMjQyLDIyNywyMzYsMTAxLDEyOSwgMzYsMTAyLDE3MywgNTgsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDMsCisgICAgMjI5LDI0MywyMjUsMjM4LDI0MywyNDMsMjI5LDI0MiwyMzMsMTAyLDEyOCwgMzksMTQ0LDIyOCwyMjksMjQ2LAorICAgICA5NywxMjgsICA5LDEwOSwyMjksMjMzLDIzMSwyMzIsMjQ0LDIzMiwxMTUsMTI4LCAzMywgOTQsMjMxLDExNywKKyAgICAgIDIsMTczLDEwMSwxNzMsMTEwLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMjM3LDI0MiwyMzcsCisgICAgMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsMTA5LDIzMiwgOTcsICAyLDE3MywxMjYsMTczLDEzNywyMjcsMjM1LAorICAgIDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTAzLDIzOCwyMzEsMjUwLDIzMiwyMzksMTE3LDEyOCwKKyAgICAgNDgsIDM5LDEwNSwgIDIsMTczLDE1MiwxNzMsMTcwLDIyOCwyMjksMjM5LDIzMSwyNDIsMjI1LDI0MCwyMzIsCisgICAgMjMzLDIyNywyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDM4LDIzOCwyMzAsMjI5LDI0MiwyMzMsMjM5LAorICAgIDExNCwxMjgsIDMyLDEzNSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAyMywKKyAgICAyMzksMjM2LDIyOCwyNDMsMjQ0LDI0OSwyMzYsMTAxLDEyOCwyNDcsIDU1LDExMiwgIDIsMTczLDIwOSwxNzMsCisgICAgMjE2LDIyNSwyNDIsMjI5LDExMCwxMjgsIDM2LDEyMiwyMjksMTE0LCAgMiwxNzMsMjIzLDE3MywyMjksMjMzLAorICAgIDIzOSwxMDAsMTI4LCAzNiwxNDIsMjQzLDIzMywyMjUsMTEwLDEyOCwgIDYsMjQ3LDI0MiwyMzksMjM3LDIyNSwKKyAgICAxMTAsMTI4LCAzMywxMTgsMjQzLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsIDMyLDExOSwxMTYsCisgICAgICAyLDE3NCwgIDUsMTc0LCA0MywyMjksMjI5LDExMCwgIDIsMTc0LCAxMywxNzQsIDIyLDIyNywyMzMsMjQyLAorICAgIDIyNywyMzYsMTAxLDEyOCwgMzYsMTEyLDExMiwgIDIsMTc0LCAyOCwxNzQsIDM1LDIyNSwyNDIsMjI5LDExMCwKKyAgICAxMjgsIDM2LDEzMiwyMjksMjQyLDIzMywyMzksMTAwLDEyOCwgMzYsMTUyLDIzMiwyMjUsMTA1LDEyOCwgMTQsCisgICAgIDg3LDIzMCwyNDQsMjMyLDI0OSwyNDAsMjMyLDIyOSwxMTAsMTI4LCAgMCwxNzMsMTA0LCAgNywxNzQsIDc2LAorICAgIDE3NSwgNTAsMTc1LCA2MSwxNzUsIDc1LDE3NiwgMjAsMTc2LCAzMywxNzYsMTk3LCA5NywgIDYsMTc0LCA5MCwKKyAgICAxNzQsMTAxLDE3NCwxMTEsMTc0LDEyMiwxNzUsICA5LDE3NSwgMzQsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsCisgICAgMjI1LDExMCwxMjgsICA1LDExOSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxODIsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA3MiwxMDAsICAyLDE3NCwxMjgsMTc0LDIyNCwKKyAgICAyMjgsIDk3LCAgNCwxNzQsMTM5LDE3NCwxNDgsMTc0LDE3OSwxNzQsMTkzLDIyNSwyNDIsMjI1LDIyNiwyMzMsCisgICAgIDk5LDEyOCwgIDYsIDgxLDIyOCwyMjUsMjM3LDIzNywgOTcsICAyLDE3NCwxNTgsMTc0LDE2NywyMjUsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLCA5NywyNDQsMjI1LDIzOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsMjUyLCA5NCwyMzAsMjI1LDI0NCwyMzIsMjI1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsCisgICAgIDk2LDIzNSwyMjUsMjQzLDI0MiwgOTcsICAyLDE3NCwyMDMsMTc0LDIxMiwyMjUsMjQyLDIyNSwyMjYsMjMzLAorICAgICA5OSwxMjgsMjUyLCA5OCwyNDQsMjI1LDIzOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLCA5NSwKKyAgICAxMDEsMTMyLCAzNywxNDYsMTc0LDIzNiwxNzQsMjQzLDE3NCwyNTEsMTc1LCAgNCwyMjgsMjI1LDI0MiwxMDcsCisgICAgMTI4LCAzNywxNDcsMjM2LDIzMywyMzEsMjMyLDExNiwxMjgsIDM3LDE0NSwyMzcsMjI5LDIyOCwyMzMsMjQ1LAorICAgIDEwOSwxMjgsIDM3LDE0NiwyNDYsIDk3LDEyOCwgIDksIDU0LDIzMSwxMTcsICAyLDE3NSwgMTYsMTc1LCAyNSwKKyAgICAyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE4MiwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsCisgICAgIDEwLCA1NCwyMzYsMjQzLDIzMiwyMjksMjM2LDIyOSwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwxNDcsMjI2LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAyMSwyMjcsMjMyLDIyNSwKKyAgICAyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDczLDEwMSwgIDQsMTc1LCA4NSwxNzUsCisgICAgMTUwLDE3NSwxNjAsMTc1LDE3NywyMjksMTEwLCAgNCwxNzUsIDk2LDE3NSwxMDUsMTc1LDExOSwxNzUsMTM1LAorICAgIDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDUyLDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwKKyAgICAyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxODIsMjMzLDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsCisgICAgMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTgzLDIzNywyMjksMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwyNTQsMTg0LDIzMywyMjcsMjM5LDI0MCwyNDQsMjMzLCA5OSwxMjgsICAzLDIyNywKKyAgICAyNDEsMjI5LDEwOCwxMjksIDMyLDE3MCwxNzUsMTY4LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgMzIsCisgICAgMTcwLDI0NiwgOTcsMTM0LCAgNSwxNzYsMTc1LDE5NCwxNzUsMjA5LDE3NSwyMjMsMTc1LDIzMiwxNzUsMjQ3LAorICAgIDE3NiwgIDcsIDQ5LCAgMiwxNzUsMjAwLDE3NSwyMDUsMTc3LCA1MywxMjgsICA1LDE3NiwgNTMsMTI4LCAgNSwKKyAgICAxNzYsIDUwLCAgMiwxNzUsMjE1LDE3NSwyMTksIDUwLDEyOCwgIDUsMTc2LDEwMSwxMjgsICA1LDE3NiwyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3NiwyMzgsMjI1LDI0MiwyNDIsMjM5LDI0NywyMzIsMjI5LAorICAgIDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE3NiwyNDEsMjQ1LDIyNSwyNDIsMjQ0LDIyOSwyNDIsMjMyLDIyOSwKKyAgICAyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzYsMjQ3LDIzMywyMjgsMjI5LDIzMiwyMjksMjI2LDI0MiwyMjksCisgICAgMTE5LDEyOCwgIDUsMTc2LDIzMiwyMjUsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LAorICAgIDE4NywxMDUsICAyLDE3NiwgMzksMTc2LCA1MCwyMzcsMjI1LDIyNywyMzksMjQwLDI0NCwyMzMsIDk5LDEyOCwKKyAgICAgIDMsMjM3LDExMCwxMzEsICA1LDIzMywxNzYsIDYwLDE3NiwxNDMsMTc2LDE1MiwxMDAsICAyLDE3NiwgNjYsCisgICAgMTc2LDEzMiwyMjUsMjMxLDIyOSwyNDMsMTA0LDEzMCwyNTEsIDczLDE3NiwgNzgsMTc2LCA4NywyMzIsMjI5LAorICAgIDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA3MywxMTUsICAyLDE3NiwgOTMsMTc2LDExMywyMzIsMjMzLDIzOCwKKyAgICAyMjgsMjM5LDExNiwxMjksMjUxLCA0NCwxNzYsMTA0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwyNTEsCisgICAgIDQ0LDIzMywyMzgsMjI4LDIzOSwxMTYsMTI5LDI1MSwgNDUsMTc2LDEyMywyMzIsMjI5LDIyNiwyNDIsMjI5LAorICAgIDExOSwxMjgsMjUxLCA0NSwyMzksMjQ0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTkzLDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjMzLDExNSwgIDIsMTc2LDE1OCwxNzYsMTc4LDIzMiwyMzMsCisgICAgMjM4LDIyOCwyMzksMTE2LDEyOSwyNTEsIDQyLDE3NiwxNjksMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgIDI1MSwgNDIsMjMzLDIzOCwyMjgsMjM5LDExNiwxMjksMjUxLCA0MywxNzYsMTg4LDIzMiwyMjksMjI2LDI0MiwKKyAgICAyMjksMTE5LDEyOCwyNTEsIDQzLDIzOSwyMzksMTA3LDEyOCwgIDIsMTMwLDEwNSwgIDgsMTc2LDIyMSwxNzcsCisgICAgICA5LDE3NywgMjAsMTc3LCA0NSwxNzcsIDc1LDE3NywgODMsMTc3LCA5NiwxNzgsIDExLDIzMSwyMzcsIDk3LAorICAgIDEzMSwgIDMsMTk1LDE3NiwyMzMsMTc2LDIzNywxNzYsMjQ1LCA0OSwxMjgsICAzLDE5NCwyMzAsMjMzLDIzOCwKKyAgICAyMjUsMTA4LDEyOCwgIDMsMTk0LDIzNiwyNDUsMjM4LDIyNSwyNDQsMjI5LDI0MywyNDksMjM3LDIyNiwyMzksCisgICAgMjM2LDIzMSwyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywyNDIsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LAorICAgICA5NywxMjgsIDQ4LCA4NywyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMTgzLDE3NywKKyAgICAgMzMsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMjQsMjM2LDI0NSwxMTMsCisgICAgICAyLDE3NywgNTMsMTc3LCA2MiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4OSwyMzYsMjI5LAorICAgIDIzMCwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxODksMjM3LDIzMywyMzYsMjI1LDExNCwKKyAgICAxMjgsIDM0LCA2MCwyMzgsMjI4LDIzOSwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxOTQsCisgICAgMjM5LDExNSwgIDYsMTc3LDExMSwxNzcsMTQ2LDE3NywxNzgsMTc3LDIwNiwxNzcsMjIwLDE3NywyNTIsIDk3LAorICAgICAgMiwxNzcsMTE3LDE3NywxMzIsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA1MCwxMTYsMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsCisgICAgIDUwLCAyMCwyMjcsMTA1LCAgMiwxNzcsMTUzLDE3NywxNjUsMjI5LDI0NSwyMjcsMjM1LDIzOSwyNDIsMjI5LAorICAgIDIyNSwxMTAsMTI4LCA0OSwxMjYsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwKKyAgICAgNTAsMTAyLDEwNywgIDIsMTc3LDE4NCwxNzcsMTk4LDIzMywyNDksMjI5LDIzOSwyMzUsMjM1LDIzOSwyNDIsCisgICAgMjI5LDIyNSwxMTAsMTI4LCA0OSwxMjIsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA2OSwyMzgsMjMzLAorICAgIDIyOSwyNDUsMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTIzLDExMiwgIDIsMTc3LDIyNiwKKyAgICAxNzcsMjM5LDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAgNiwyMzMsCisgICAgMjI5LDI0NSwyNDAsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMjUsMjQ0LDIzMywyMzUsMjI5LAorICAgIDI0NSwyNDQsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMjQsMTIwLDE0MSwgIDAsIDU0LDE3OCwKKyAgICAgNDEsMTc4LCA1MCwxNzgsIDYwLDE3OCwgOTAsMTc4LCA5NywxNzgsMTIyLDE3OCwxNDksMTc4LDE4MywxNzgsCisgICAgMTk1LDE3OCwyMDYsMTc4LDIzOSwxNzgsMjQ3LDE3OSwgIDIsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LAorICAgICAgNiwxMDIsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMjM2LDIyNywyMzMsMjQyLDIyNywKKyAgICAyMzYsMTAxLDEyOSwgMzYsMTAxLDE3OCwgNzEsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDMsMjI5LDI0MywyMjUsCisgICAgMjM4LDI0MywyNDMsMjI5LDI0MiwyMzMsMTAyLDEyOCwgMzksMTQzLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LAorICAgIDEwOCwyMzEsMTE3LCAgMiwxNzgsMTA0LDE3OCwxMTMsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwKKyAgICAyMzYsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwxMDgsMjMyLCA5NywgIDIsMTc4LDEyOSwxNzgsCisgICAgMTQwLDIyNywyMzUsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxMDIsMjM4LDIzMSwyNTAsMjMyLAorICAgIDIzOSwxMTcsMTI4LCA0OCwgMzgsMTA1LCAgMiwxNzgsMTU1LDE3OCwxNzMsMjI4LDIyOSwyMzksMjMxLDI0MiwKKyAgICAyMjUsMjQwLDIzMiwyMzMsMjI3LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCA1MCwgMzcsMjM4LDIzMCwyMjksCisgICAgMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsMTM0LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLAorICAgIDEyOCwyNTUsIDIyLDIzOSwyMzYsMjI4LDI0MywyNDQsMjQ5LDIzNiwxMDEsMTI4LDI0NywgNTQsMTEyLCAgMiwKKyAgICAxNzgsMjEyLDE3OCwyMTksMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTIxLDIyOSwxMTQsICAyLDE3OCwyMjYsCisgICAgMTc4LDIzMiwyMzMsMjM5LDEwMCwxMjgsIDM2LDE0MSwyNDMsMjMzLDIyNSwxMTAsMTI4LCAgNiwyNDYsMjQyLAorICAgIDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDExNywyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwKKyAgICAgMzIsMTE4LDExNiwgIDIsMTc5LCAgOCwxNzksIDc5LDIyOSwyMjksMTEwLCAgMiwxNzksIDE2LDE3OSwgNTgsCisgICAgIDk5LCAgMiwxNzksIDIyLDE3OSwgMzAsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM2LDExMSwyNDUsMjQyLAorICAgIDI0MiwyMjksMjM4LDIyNywyNDksMjI4LDIyOSwyMzgsMjM5LDIzNywyMzMsMjM4LDIyNSwyNDQsMjM5LDI0MiwKKyAgICAyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyNDksMTEyLCAgMiwxNzksIDY0LDE3OSwgNzEsCisgICAgMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTMxLDIyOSwyNDIsMjMzLDIzOSwxMDAsMTI4LCAzNiwxNTEsMjMyLAorICAgIDIyNSwxMDUsMTI4LCAxNCwgODYsMTA4LCAgMiwxNzksIDkxLDE3OSwxMTEsMjI1LDI0MywxMDQsMTI5LCAgMCwKKyAgICAgNDcsMTc5LCA5OSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAxNSwyMzksCisgICAgMjM4LDEwMywxMjksICAxLDEyNywxNzksMTE5LDIyOCwyMzksMjQ0LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LAorICAgIDEyOCwgMzAsMTU1LDEwOSwgIDIsMTc5LDEzNywxNzksMTQ3LDIzMywyMzYsMjI5LDIzMCwyMjUsMjI3LDEwMSwKKyAgICAxMjgsIDM4LCA1OCwyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDgzLDExMSwgIDYsCisgICAgMTc5LDE3MiwxNzksMjIyLDE3OSwyMzMsMTgwLCAgMiwxODAsIDQ3LDE4MCwgNTgsMTAyLCAgMiwxNzksMTc4LAorICAgIDE3OSwxOTIsMjQwLDIyNSwyNDMsMjQ1LDI0MSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE5NSwKKyAgICAxMTYsICAyLDE3OSwxOTgsMTc5LDIwNywyMzIsMjQ5LDI0MCwyMzIsMjI5LDExMCwxMjgsICAwLDE3MywyNDMsCisgICAgMjMzLDIzMSwyMzgsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA3NiwyMzIsMjMzLAorICAgIDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDkzLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwKKyAgICAgOTcsMTI5LCA0OCwxODksMTc5LDI0NiwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsCisgICAgMjU1LDEyNywyMzYsMjMzLDIyOCwyNDUsMTE1LCAgMiwxODAsIDEyLDE4MCwgMjksMjM2LDIzOSwyMzgsMjMxLAorICAgIDIzOSwyNDYsMjI5LDI0MiwyMzYsMjI1LDI0OSwyMjcsMjM3LCA5OCwxMjgsICAzLCA1NiwyNDMsMjMyLDIzOSwKKyAgICAyNDIsMjQ0LDIzOSwyNDYsMjI5LDI0MiwyMzYsMjI1LDI0OSwyMjcsMjM3LCA5OCwxMjgsICAzLCA1NSwyNDIsCisgICAgMjQ1LDI0MywyMzMsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDQxLDExNSwgIDMsMTgwLCA2NiwxODAsIDc2LAorICAgIDE4MCwgODQsMjI1LDIzNiwyMjUsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDQwLDIzOSwyNDQsMjMyLDIyNSwKKyAgICAxMDUsMTI4LCAxNCwgMTEsMjQ1LDIyNSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgNDIsMjQwLCA5NywgIDMsCisgICAgMTgwLDEwMiwxODAsMTIyLDE4MCwxNTQsMjI3LDEwMSwxMjksICAwLCAzMiwxODAsMTA5LDIzMiwyMjUsMjI3LAorICAgIDIzNSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICAwLCAzMiwyMjgsMTAxLDEyOSwgMzgsIDk2LDE4MCwKKyAgICAxMjksMjQzLDI0NSwyMzMsMTE2LCAgMiwxODAsMTM4LDE4MCwxNDYsMjI2LDIzNiwyMjUsMjI3LDEwNywxMjgsCisgICAgIDM4LCA5NiwyNDcsMjMyLDIzMywyNDQsMTAxLDEyOCwgMzgsMTAwLDI0MiwyMjksMTEwLDEyOCwgMzYsMTc0LAorICAgIDI0MSwyNDUsMjI1LDI0MiwxMDEsIDExLDE4MCwxODgsMTgwLDE5OSwxODAsMjEzLDE4MCwyMzgsMTgwLDI1NSwKKyAgICAxODEsIDI1LDE4MSwgNDAsMTgxLCA3MywxODEsMTAwLDE4MSwxNTYsMTgxLDE3MSwyMjYsMjI5LDIzNiwyMzksCisgICAgMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDU5LCA5OSwgIDIsMTgwLDIwNSwxODAsMjA5LCA5OSwxMjgsIDUxLAorICAgIDE5NiwxMDksMTI4LCA1MSwxNTcsMjI4LDIzMywyMjUsMjMxLDIzOSwyMzgsMjI1LDIzNiwyMjcsMjQyLDIzOSwKKyAgICAyNDMsMjQzLDIzMiwyMjUsMjQ0LDIyNywyMzIsMjMwLDIzMywyMzYsMTA4LDEyOCwgMzcsMTY5LDIzMiwyMzksCisgICAgMjQyLDIzMywyNTAsMjM5LDIzOCwyNDQsMjI1LDIzNiwyMzAsMjMzLDIzNiwxMDgsMTI4LCAzNywxNjQsMTA3LAorICAgICAgMiwxODEsICA1LDE4MSwgIDksMTAzLDEyOCwgNTEsMTQzLDEwOSwxMjksIDUxLDE1OCwxODEsIDE1LDIyNywKKyAgICAyMjUsMjQwLDIzMywyNDQsMjI1LDEwOCwxMjgsIDUxLDIwNiwxMDgsICAyLDE4MSwgMzEsMTgxLCAzNSwxMTAsCisgICAgMTI4LCA1MSwyMDksMjM5LDEwMywxMjgsIDUxLDIxMCwxMDksICA0LDE4MSwgNTAsMTgxLCA1NCwxODEsIDU5LAorICAgIDE4MSwgNjMsMTAzLDEyOCwgNTEsMTQyLDIzMywxMDgsMTI4LCA1MSwyMTMsMTA5LDEyOCwgNTEsMTU2LDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMjI5LDEwMCwxMjgsIDUxLDE2MSwyMzksMjQyLDI0NCwyMzIsMjM5LDIzMSwyMzksCisgICAgMjM4LDIyNSwyMzYsMjI3LDI0MiwyMzksMjQzLDI0MywyMzIsMjI1LDI0NCwyMjcsMjMyLDIzMCwyMzMsMjM2LAorICAgIDEwOCwxMjgsIDM3LDE2NiwyNDUsMjQwLDI0MCwyMjksMTE0LCAgMiwxODEsMTEwLDE4MSwxMzMsMjM2LDIyOSwKKyAgICAyMzAsMjQ0LDI0NCwyMzksMjM2LDIzOSwyNDcsMjI5LDI0MiwyNDIsMjMzLDIzMSwyMzIsMjQ0LDIzMCwyMzMsCisgICAgMjM2LDEwOCwxMjgsIDM3LDE2NywyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzksMjM2LDIzOSwyNDcsMjI5LAorICAgIDI0MiwyMzYsMjI5LDIzMCwyNDQsMjMwLDIzMywyMzYsMTA4LDEyOCwgMzcsMTY4LDI0NiwyMjksMjQyLDI0NCwKKyAgICAyMzMsMjI3LDIyNSwyMzYsMjMwLDIzMywyMzYsMTA4LDEyOCwgMzcsMTY1LDI0NywyMzIsMjMzLDI0NCwyMjksCisgICAgMjQ3LDIzMywyNDQsMjMyLDI0MywyMzcsMjI1LDIzNiwyMzYsMjI2LDIzNiwyMjUsMjI3LDEwNywxMjgsIDM3LAorICAgIDE2MywyNDIsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwyMTksMTE1LCAgMiwxODEsMjA5LDE4MiwKKyAgICAxMjMsIDk3LCAgNCwxODEsMjE5LDE4MSwyMjksMTgxLDIzNiwxODEsMjQ3LDIyNiwyMjksMjM4LDIzMSwyMjUsCisgICAgMjM2LDEwNSwxMjgsICA5LDE4MywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNTUsMjMxLDI0NSwyMzQsMjI1LAorICAgIDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE4MywyMzgsMTAzLCAgOCwxODIsIDEwLDE4MiwgMjQsMTgyLCAzOCwKKyAgICAxODIsIDUyLDE4MiwgNjcsMTgyLCA4MSwxODIsIDk1LDE4MiwxMDgsMjI3LDIzMywyMjksMjQ1LDIyNywyMzUsCisgICAgMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA3MywyMzIsMjMzLDIyOSwyNDUsMjMyLDIzNSwyMzksMjQyLAorICAgIDIyOSwyMjUsMTEwLDEyOCwgNDksMTMzLDIzMywyMjksMjQ1LDIzOCwyMzEsMjM1LDIzOSwyNDIsMjI5LDIyNSwKKyAgICAxMTAsMTI4LCA0OSwxMjgsMjM1LDIzMywyNDksMjI5LDIzOSwyMzUsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsCisgICAgMTI4LCA0OSwgNTAsMjM4LDIzMywyMjksMjQ1LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LAorICAgIDEwMSwyNDAsMjMzLDIyOSwyNDUsMjQwLDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDY3LDI0MywKKyAgICAyMzMsMjM5LDI0MywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA3MCwyNDQsMjMzLDIzNSwyMjksCisgICAgMjQ1LDI0NCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA1NiwyNDUsMjQwLDIyOSwyNDIsMjMzLAorICAgIDIzOSwxMTQsMTI4LDI0NiwyNDIsMTE2LCAgMiwxODIsMTM5LDE4MiwxNjIsMjI5LDI0MiwyMzYsMjMzLDIzOCwKKyAgICAxMDMsMTI5LCAgMCwxNjMsMTgyLDE1MCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsCisgICAgMjU1LDIyNSwyNDIsMjM5LDIzNSwxMDEsICAyLDE4MiwxNzEsMTgyLDE4OCwyMzYsMjM5LDIzOCwyMzEsMjM5LAorICAgIDI0NiwyMjksMjQyLDIzNiwyMjUsMjQ5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDU0LDI0MywyMzIsMjM5LDI0MiwKKyAgICAyNDQsMjM5LDI0NiwyMjksMjQyLDIzNiwyMjUsMjQ5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDUzLDExNywgIDcsCisgICAgMTgyLDIyMiwxODIsMjU0LDE4MywgMjAsMTgzLCAzMSwxODMsIDcyLDE4MywgODIsMTgzLCA4NiwyMjYsMjQzLAorICAgIDIyOSwxMTYsMTMwLCAzNCwxMzAsMTgyLDIzMywxODIsMjQ0LDIzOCwyMzksMjQ0LDIyOSwyNDEsMjQ1LDIyNSwKKyAgICAxMDgsMTI4LCAzNCwxMzgsMjM5LDI0MiwyMjksMjQxLDI0NSwyMjUsMTA4LDEyOCwgMzQsMTM0LCA5OSwgIDIsCisgICAgMTgzLCAgNCwxODMsIDEyLDIyNywyMjksMjI5LDIyOCwxMTUsMTI4LCAzNCwxMjMsMjMyLDI0NCwyMzIsMjI1LAorICAgIDExNiwxMjgsIDM0LCAxMSwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDg5LDEwNywKKyAgICAgIDIsMTgzLCAzNywxODMsIDYxLDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDE4NSwxODMsCisgICAgIDQ5LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTI1LDI0NSwyMzgsMjI1LAorICAgIDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgODIsMjM3LDIzNywyMjUsMjQ0LDIzMywyMzksMTEwLDEyOCwKKyAgICAgMzQsIDE3LDExMCwxMjgsIDM4LCA2MCwyNDAsMjI5LDI0MiwyNDMsMjI5LDExNiwxMzAsIDM0LDEzMSwxODMsCisgICAgIDk5LDE4MywxMTAsMjM4LDIzOSwyNDQsMjI5LDI0MSwyNDUsMjI1LDEwOCwxMjgsIDM0LDEzOSwyMzksMjQyLAorICAgIDIyOSwyNDEsMjQ1LDIyNSwxMDgsMTI4LCAzNCwxMzUsMjQ2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwKKyAgICAgNTEsMjIwLDI0OSwyMzksMjQ1LDI0NywyMjUsMjI5LDI0MiwyMjUsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsCisgICAgMTI4LCA1MSwxMjQsMTE2LDE0NCwgIDAsMTE2LDE4MywxODMsMTg0LDE5MiwxODQsMjEzLDE4NSwxMDAsMTg1LAorICAgIDE0MCwxODcsMTg4LDE5MSwgNzAsMTkyLDE0NSwxOTIsMTU3LDE5MiwxNjksMTkzLDIwMiwxOTMsMjI3LDE5NCwKKyAgICAgNTcsMTk0LDIzNywxOTUsMTY1LDE5NSwyNTUsIDk3LCAxMCwxODMsMjA1LDE4MywyMTUsMTgzLDIzNiwxODMsCisgICAgMjQzLDE4NCwgMTIsMTg0LCA5MCwxODQsMTA3LDE4NCwxMzIsMTg0LDE0NiwxODQsMTUwLDIyNiwyMjksMjM4LAorICAgIDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE2NCwyMjcsMTA3LCAgMiwxODMsMjIyLDE4MywyMjksMjI4LDIzOSwKKyAgICAyNDcsMTEwLDEyOCwgMzQsMTY0LDIzNiwyMjksMjMwLDExNiwxMjgsIDM0LDE2MywyMjgsMjI5LDI0NiwgOTcsCisgICAgMTI4LCAgOSwgMzYsMjMxLDExNywgIDIsMTgzLDI1MCwxODQsICAzLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LAorICAgIDEyOCwgMTAsMTY0LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDM2LDEwNCwgIDQsMTg0LCAyMiwKKyAgICAxODQsIDMxLDE4NCwgNDUsMTg0LCA3NSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA1NSwyMzAsCisgICAgMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTk0LDEwNSwgIDIsMTg0LAorICAgICA1MSwxODQsIDY2LDIzOCwyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwKKyAgICAyNTQsMTk1LDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDk1LDIzNywyMjksMjI4LDIzMywyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTk2LDIzMywyNDMsMjQ5LDIzOSwyNDUsMjI5LAorICAgIDI0MiwyMjUsMjQzLDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwxMjUsMjM1LDIyNSwyNDQsMjI1LDIzNSwKKyAgICAyMjUsMjM4LCA5NywxMjksIDQ4LDE5MSwxODQsMTIwLDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsCisgICAgMTA0LDEyOCwyNTUsMTI4LDI0NCwyNDcsMjI5LDIyOSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LAorICAgICAgNiwgNjQsMTE3LDEyOCwgIDMsMTk2LDExOCwxMzAsICA1LDIzNCwxODQsMTU4LDE4NCwxODMsMjI4LDIyNSwKKyAgICAyMzEsMjI5LDExNSwxMjksMjUxLCA3NCwxODQsMTY4LDEwNCwxMjksMjUxLCA3NCwxODQsMTc0LDIzMiwyMjksCisgICAgMjI2LDI0MiwyMjksMTE5LDEyOCwyNTEsIDc0LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMjM0LAorICAgICA5OCwgIDIsMTg0LDE5OCwxODQsMjAzLDIyNSwxMTQsMTI4LCAgMSwxMDMsMjM5LDI0MCwyMzksMjM3LDIzOSwKKyAgICAyMzAsMTExLDEyOCwgNDksIDEwLCA5OSwgIDYsMTg0LDIyNywxODQsMjM0LDE4NCwyNDEsMTg0LDI1MCwxODUsCisgICAgIDYwLDE4NSwgODcsMjI1LDI0MiwyMzksMTEwLDEyOCwgIDEsMTAxLDIyNywyNDUsMjQyLDEwOCwxMjgsICAyLAorICAgIDE2OCwyMjksMjI4LDIzMywyMzYsMjM2LCA5NywxMjgsICAxLCA5OSwyMzIsMjI5LDEwNCwgIDQsMTg1LCAgNiwKKyAgICAxODUsIDE1LDE4NSwgMjksMTg1LCA0NSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LDEzNCwyMzAsCisgICAgMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTEsMTIzLDIzMywyMzgsMjMzLAorICAgIDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUxLDEyNCwyMzcsMjI5LDIyOCwKKyAgICAyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUxLDEyNSwyMzMsMjQyLCA5OSwgIDIsCisgICAgMTg1LCA2OCwxODUsIDczLDIzNiwxMDEsMTI4LCAzNiwyMjcsMjQ1LDIzNywyMzAsMjM2LDIyOSwyNDgsMjI2LAorICAgIDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDExMywyMzksMjM3LDIzNywyMjUsMjI1LDIyNywyMjcsMjI5LDIzOCwKKyAgICAxMTYsMTI4LCAgMSwgOTksMTAwLCAgMiwxODUsMTA2LDE4NSwxMTYsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsCisgICAgMTE1LDEyOCwgMzAsMTUxLDIzOSwxMTYsICAyLDE4NSwxMjMsMTg1LDEzMiwyMjUsMjI3LDIyNywyMjksMjM4LAorICAgIDExNiwxMjgsIDMwLDEwNywyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTA5LDEwMSwgIDksMTg1LDE2MCwKKyAgICAxODUsMTcxLDE4NSwxOTEsMTg2LDIwMSwxODYsMjI2LDE4NywgMzQsMTg3LDEwMSwxODcsMTA2LDE4NywxNTgsCisgICAgMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA2NiwyMjgsMjI5LDI0MywyMjcsMjI5LAorICAgIDIzOCwyMjgsMjI5LDI0MiwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTczLDEwNCwKKyAgICAgIDcsMTg1LDIwNywxODUsMjE2LDE4NSwyMzAsMTg2LCAxNCwxODYsIDQ0LDE4NiwgODUsMTg2LDE4MywyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA0MiwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwyNTQsMTUwLDIzMiwyMjUsMjMyLDEwNSwgIDIsMTg1LDIzOSwxODUsMjU0LDIzOCwKKyAgICAyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsMTYyLDI0MywyMzksCisgICAgMjM2LDIyNSwyNDQsMjI5LDIyOCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLCAxMiwxMDUsICAyLAorICAgIDE4NiwgMjAsMTg2LCAzNSwyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsMjU0LDE1MSwyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDEwMiwyMzQsMjI5LDIyOSwyMzcsCisgICAgMTA1LCAgMiwxODYsIDU0LDE4NiwgNjksMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LDI1MiwxNjEsMjQzLDIzOSwyMzYsMjI1LDI0NCwyMjksMjI4LDIyNSwyNDIsMjI1LDIyNiwKKyAgICAyMzMsIDk5LDEyOCwyNTIsIDExLDEwOSwgIDIsMTg2LCA5MSwxODYsMTI1LDIyNSwyNDIsMjI2LDI0NSwyNDQsCisgICAgIDk3LCAgMiwxODYsMTAyLDE4NiwxMTEsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgNDEsMjMwLAorICAgIDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDE0OCwxMDEsICAyLDE4NiwKKyAgICAxMzEsMTg2LDE0NCwyMjgsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxNTIsCisgICAgMjI5LDIzNywxMDUsICAyLDE4NiwxNTIsMTg2LDE2NywyMzgsMjMzLDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsMjUyLDE2NCwyNDMsMjM5LDIzNiwyMjUsMjQ0LDIyOSwyMjgsMjI1LDI0MiwKKyAgICAyMjUsMjI2LDIzMywgOTksMTI4LDI1MiwgMTQsMjM4LDIzOSwyMzksMjM4LDIzMCwyMzMsMjM4LDIyNSwyMzYsCisgICAgMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MiwxMTUsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LAorICAgICA5NywxMjksIDQ4LDE5OCwxODYsMjE0LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwKKyAgICAyNTUsMTMxLDEwOCwgIDIsMTg2LDIzMiwxODYsMjUxLDIyOSwyNDAsMjMyLDIzOSwyMzgsMTAxLDEyOSwgMzMsCisgICAgIDMzLDE4NiwyNDMsMjI2LDIzNiwyMjUsMjI3LDEwNywxMjgsIDM4LCAxNCwyMzMsMjQzLDIzMiwgOTcsICAyLAorICAgIDE4NywgIDQsMTg3LCAxOSwyMzEsMjI5LDIyOCwyMzksMjM2LDIyNSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwKKyAgICAxMjgsICA1LDE2MCwyNDEsMjI5LDI0NCwyMjUsMjM4LDIyNSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsCisgICAgICA1LDE2OSwxMTAsICA0LDE4NywgNDQsMTg3LCA1MywxODcsIDcyLDE4NywgOTMsMjI3LDIzMywyNDIsMjI3LAorICAgIDIzNiwxMDEsMTI4LCAzNiwxMDUsMjMzLDIyOCwyMjksMjM5LDIzMSwyNDIsMjI1LDI0MCwyMzIsMjMzLDIyNywKKyAgICAyNDAsMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDQxLDExMiwgIDIsMTg3LCA3OCwxODcsIDg1LDIyNSwyNDIsCisgICAgMjI5LDExMCwxMjgsIDM2LDEyNSwyMjksMjQyLDIzMywyMzksMTAwLDEyOCwgMzYsMTQ1LDI0MiwyMzksMjM3LAorICAgIDIyNSwxMTAsMTI4LCAzMywxMjEsMjQzLDEwNCwxMjgsICAyLDE2NywxMTYsMTMxLCAgNSwyMTYsMTg3LDExNiwKKyAgICAxODcsMTM2LDE4NywxNDUsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNTYsMTg3LDEyNywyMzIsCisgICAgMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA1NiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LAorICAgIDIxNiwyNDMsMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxODEsMjQ2LDIzMywKKyAgICAxMTQsICAyLDE4NywxNjYsMTg3LDE3NSwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE1NSwyMzYsCisgICAgMjI5LDIzMCwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNTUsMTA0LCAgNiwxODcsMjAyLAorICAgIDE4OCwgOTgsMTg4LDIyMCwxODksIDk2LDE5MCwgIDMsMTkxLCA2MCwgOTcsICA1LDE4NywyMTQsMTg3LDIyNCwKKyAgICAxODcsMjMxLDE4OCwgIDAsMTg4LCAyOSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxNjUsCisgICAgMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDM3LDIzMSwxMTcsICAyLDE4NywyMzgsMTg3LDI0NywyMzQsMjI1LAorICAgIDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE2NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCAzNywKKyAgICAxMDgsICAyLDE4OCwgIDYsMTg4LCAxNSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA0OCwyMzAsCisgICAgMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTcyLDIzOCwyNDQsMjMyLAorICAgIDIyNSwyMzUsMjMyLDIyNSwxMTYsICAzLDE4OCwgNDQsMTg4LCA3NSwxODgsIDgyLDIzNiwyMzksMTE5LCAgMiwKKyAgICAxODgsIDUyLDE4OCwgNjMsMjM2LDIyOSwyMzAsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LDE1MiwyNDIsCisgICAgMjMzLDIzMSwyMzIsMjQ0LDI0NCwyMzIsMjI1LDEwNSwxMjgsMjQ4LDE1MSwyNDQsMjMyLDIyNSwxMDUsMTI4LAorICAgICAxNCwgNzYsMjQ1LDI0MCwyNDAsMjI5LDI0MiwyMzYsMjI5LDIzMCwyNDQsMjQ0LDIzMiwyMjUsMTA1LDEyOCwKKyAgICAyNDgsMTUwLDEwMSwgIDMsMTg4LDEwNiwxODgsMTcwLDE4OCwxOTMsMTA0LCAgNCwxODgsMTE2LDE4OCwxMjUsCisgICAgMTg4LDEzOSwxODgsMTU1LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDQzLDIzMCwyMzMsMjM4LAorICAgIDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxNTQsMjMzLDIzOCwyMzMsMjQ0LDIzMywKKyAgICAyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTU1LDIzNywyMjksMjI4LDIzMywyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTU2LDI0MiwxMDEsICAyLDE4OCwxNzcsMTg4LAorICAgIDE4NiwyMjksMjQ4LDIzMywyNDMsMjQ0LDExNSwxMjgsIDM0LCAgMywyMzAsMjM5LDI0MiwxMDEsMTI4LCAzNCwKKyAgICAgNTIsMjQ0LCA5NywxMzAsICAzLDE4NCwxODgsMjAyLDE4OCwyMDYsIDQ5LDEyOCwgIDMsMjA5LDI0MywyNDksCisgICAgMjM3LDIyNiwyMzksMjM2LDIzMSwyNDIsMjI5LDIyOSwxMDcsMTI4LCAgMywyMDksMTA1LCAgMiwxODgsMjI2LAorICAgIDE4OSwgNTYsMjI5LDI0NSwyNDQsMTA0LCAgNCwxODgsMjM5LDE4OSwgMTgsMTg5LCAzMywxODksIDQyLCA5NywKKyAgICAgIDIsMTg4LDI0NSwxODksICA0LDIyNywyMzMsMjQyLDIyNywyMzYsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsCisgICAgMTEwLDEyOCwgNTAsMTIxLDI0MCwyMjUsMjQyLDIyOSwyMzgsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LAorICAgICA1MCwgMjUsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwKKyAgICAxMDcsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgNzYsMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsCisgICAgMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAxMSwyNDIsMjQ0LDIyOSwyMjksMTEwLCAgMiwxODksIDY2LAorICAgIDE4OSwgNzUsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LCAzNiwxMDgsMTEyLCAgMiwxODksIDgxLDE4OSwKKyAgICAgODgsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTI4LDIyOSwyNDIsMjMzLDIzOSwxMDAsMTI4LCAzNiwxNDgsCisgICAgMTExLCAgNiwxODksMTEwLDE4OSwxMjcsMTg5LDEzMiwxODksMTQ2LDE4OSwxNTEsMTg5LDIwNCwyMzgsMjI1LAorICAgIDIzOCwyMzEsMjM3LDIzOSwyMzgsMjQ0LDIzMiwyMzksMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDE3LDIzOSwKKyAgICAxMDcsMTI4LCAgMSwxNzMsMjQwLDIzMiwyNDUsMjQ0LDIzMiwyMjUsMjM5LDI0NCwyMzIsMjI1LDEwNSwxMjgsCisgICAgIDE0LCAxOCwyNDIsMTEwLDEyOCwgIDAsMjU0LDI0NCwxMDQsICAzLDE4OSwxNjAsMTg5LDE4NCwxODksMTk0LAorICAgICA5NywgIDIsMTg5LDE2NiwxODksMTc2LDIzMiwyMjUsMjM4LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAyMywKKyAgICAyMzgsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDE2LDIzOSwyMzgsMjMxLDI0NCwyMzIsMjI1LDEwNSwxMjgsCisgICAgIDE0LCAyNCwyNDUsMjM4LDIzMSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgMjIsMjQ1LDI0MywyMjUsMjM4LAorICAgIDEwMCwgIDIsMTg5LDIxNCwxODksMjI1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwKKyAgICAxMzAsMjQzLDI0MywyMjksMjQwLDIyNSwyNDIsMjI1LDI0NCwyMzksMTE0LCAgMiwxODksMjQwLDE4OSwyNDksCisgICAgMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxMDgsMjQwLDIyOSwyNDIsMjQzLDIzMywyMjUsMTEwLAorICAgIDEyOCwgIDYsMTA4LDI0MiwyMjksMTAxLDE0NCwgIDAsIDUxLDE5MCwgNDEsMTkwLCA1MCwxOTAsIDYwLDE5MCwKKyAgICAgOTAsMTkwLCA5NywxOTAsMTA3LDE5MCwxMzIsMTkwLDE1OSwxOTAsMTkzLDE5MCwyMDUsMTkwLDIyNCwxOTAsCisgICAgMjM1LDE5MSwgMTIsMTkxLCAzNCwxOTEsIDQyLDE5MSwgNTMsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LAorICAgICAgNiwgOTksMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMjMzLDIyNywyMzMsMjQyLDIyNywKKyAgICAyMzYsMTAxLDEyOSwgMzYsIDk4LDE5MCwgNzEsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDMsMjI5LDI0MywyMjUsCisgICAgMjM4LDI0MywyNDMsMjI5LDI0MiwyMzMsMTAyLDEyOCwgMzksMTQwLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LAorICAgIDEwNSwyMjksMjMzLDIzMSwyMzIsMjQ0LDIzMiwxMTUsMTI4LCAzMywgOTIsMjMxLDExNywgIDIsMTkwLDExNCwKKyAgICAxOTAsMTIzLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMjMzLDI0MiwyMzcsMjQ1LDIzNSwyMzIsCisgICAgMTA1LDEyOCwgMTAsMTA1LDIzMiwgOTcsICAyLDE5MCwxMzksMTkwLDE1MCwyMjcsMjM1LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwgIDYsIDk5LDIzOCwyMzEsMjUwLDIzMiwyMzksMTE3LDEyOCwgNDgsIDM1LDEwNSwKKyAgICAgIDIsMTkwLDE2NSwxOTAsMTgzLDIyOCwyMjksMjM5LDIzMSwyNDIsMjI1LDI0MCwyMzIsMjMzLDIyNywyNDAsCisgICAgMjI1LDI0MiwyMjksMTEwLDEyOCwgNTAsIDM0LDIzOCwyMzAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsIDMyLAorICAgIDEzMSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCAxOSwyMzgsMjQ1LDIzNywKKyAgICAyMjksMjQyLDIyNSwyNDQsMjM5LDI0MiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyNDYsCisgICAgMjM5LDIzNiwyMjgsMjQzLDI0NCwyNDksMjM2LDEwMSwxMjgsMjQ3LCA1MSwxMTIsICAyLDE5MCwyNDEsMTkwLAorICAgIDI0OCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxMTgsMjI5LDExNCwgIDIsMTkwLDI1NSwxOTEsICA1LDIzMywKKyAgICAyMzksMTAwLDEyOCwgMzYsMTM4LDI0MywyMzMsMjI1LDExMCwxMjgsICA2LDI0MywyNDEsMjQ1LDIyNSwyNDIsCisgICAgMjQ0LDIyOSwyNDIsMTE1LDEyOSwgIDAsMTkwLDE5MSwgMjUsMjI5LDIzNywyMjgsMjI1LDI0MywxMDQsMTI4LAorICAgIDI0NiwyMjIsMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDExNCwyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywKKyAgICAyMzksMTE0LDEyOCwgIDAsMTc5LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA4MywyNTAsMjQzLDI0MSwyNDUsCisgICAgMjI1LDI0MiwxMDEsMTI4LCA1MSwxNDgsMTA1LCAgNywxOTEsIDg2LDE5MSwgOTcsMTkxLDIxMiwxOTIsIDU0LAorICAgIDE5MiwgNjYsMTkyLDExNSwxOTIsMTMyLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwKKyAgICAgOTcsMTA3LCAgMiwxOTEsMTAzLDE5MSwxMjcsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsCisgICAgMTkzLDE5MSwxMTUsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMjksMjI5LAorICAgIDI0NSwxMTYsICA0LDE5MSwxMzksMTkxLDE3NCwxOTEsMTg5LDE5MSwxOTgsIDk3LCAgMiwxOTEsMTQ1LDE5MSwKKyAgICAxNjAsMjI3LDIzMywyNDIsMjI3LDIzNiwyMjksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA1MCwxMTIsCisgICAgMjQwLDIyNSwyNDIsMjI5LDIzOCwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCAxNiwyMjcsMjMzLAorICAgIDI0MiwyMjcsMjM2LDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDUwLCA5OCwyMzUsMjM5LDI0MiwKKyAgICAyMjksMjI1LDExMCwxMjgsIDQ5LCA1NSwyNDAsMjI1LDI0MiwyMjksMjM4LDIzNSwyMzksMjQyLDIyOSwyMjUsCisgICAgMTEwLDEyOCwgNTAsICAyLDIzNiwyMjgsMTAxLDEzMywgIDIsMjIwLDE5MSwyMjgsMTkxLDIzOSwxOTIsICAwLAorICAgIDE5MiwgMTIsMTkyLCA0MCwyMjYsMjI5LDIzNiwyMzksMjQ3LDIyNywyMzcsIDk4LDEyOCwgIDMsIDQ4LCA5OSwKKyAgICAgIDIsMTkxLDI0NSwxOTEsMjUwLDIzNywgOTgsMTI4LCAgMywgIDMsMjM5LDIzNywgOTgsMTI4LCAgMywgIDMsCisgICAgMjI4LDIzOSwyNDUsMjI2LDIzNiwyMjksMjI3LDIzNywgOTgsMTI4LCAgMywgOTYsMTExLCAgMiwxOTIsIDE4LAorICAgIDE5MiwgMjgsMjQwLDIyOSwyNDIsMjI1LDI0NCwyMzksMTE0LDEyOCwgMzQsIDYwLDI0NiwyMjksMjQyLDIzNiwKKyAgICAyMjUsMjQ5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDUyLDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwyMzYsCisgICAgMjI3LDIzNywgOTgsMTI4LCAgMywgNjIsMjM3LDIyOSwyNDMsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI4LAorICAgICAzNCwxNTEsMTEyLCAgMiwxOTIsIDcyLDE5MiwxMDIsMjI5LDIzMiwgOTcsICAyLDE5MiwgODAsMTkyLCA4OSwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE1MCwyMzYsMjI5LDIzMCwyNDQsMjMyLDIyOSwyMjYsCisgICAgMjQyLDIyOSwxMTksMTI4LCAgNSwxNTAsMjQwLDIzMywyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LAorICAgIDEyOCwgMTAsMTEyLDI0NCwyMzYsMjM5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywyMjcsMjI3LDIzNywKKyAgICAgOTgsMTI4LCAgNCwxMzEsMjQ3LDIzOCwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsCisgICAgMTI3LDIzNiwyMzMsMjM4LDIyOSwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTExLDIzNywyMzksMjM4LAorICAgIDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDg0LDExMSwgIDcsMTkyLDE4NSwxOTIsMTk2LDE5MiwKKyAgICAyMDcsMTkyLDIzMiwxOTMsIDk2LDE5MywxMDgsMTkzLDE5MiwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsCisgICAgMTEwLDEyOCwgIDUsMTA1LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMDQsMjM1LAorICAgIDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIwMCwxOTIsMjIwLDIzMiwyMjUsMjM2LDIzMCwKKyAgICAyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTMyLDExMCwgIDMsMTkyLDI0MCwxOTMsIDgyLDE5MywgODcsCisgICAgMTAxLCAgNCwxOTIsMjUwLDE5MywgNjMsMTkzLCA3MCwxOTMsIDc2LDIyNiwyMjUsMTE0LCAgNCwxOTMsICA2LAorICAgIDE5MywgMzUsMTkzLCA0NSwxOTMsIDU0LDIyOSwyNDgsMjQ0LDI0MiwgOTcsICAyLDE5MywgMTYsMTkzLCAyNiwKKyAgICAyMzIsMjMzLDIzMSwyMzIsMjM3LDIzOSwxMDAsMTI4LCAgMiwyMjksMjM2LDIzOSwyNDcsMjM3LDIzOSwxMDAsCisgICAgMTI4LCAgMiwyMzMsMjMyLDIzMywyMzEsMjMyLDIzNywyMzksMTAwLDEyOCwgIDIsMjMwLDIzNiwyMzksMjQ3LAorICAgIDIzNywyMzksMTAwLDEyOCwgIDIsMjMyLDIzNywyMzMsMjI4LDIzNywyMzksMTAwLDEyOCwgIDIsMjMxLDIzMCwKKyAgICAyMzMsMjQ2LDEwMSwxMjgsICAxLDE4OSwyNDMsMjMzLDEyMCwxMjgsICAxLDEzMywyNDQsMjQ3LDExMSwxMjgsCisgICAgICAxLDE2OCwyMzksMTE1LDEyOCwgIDMsMTMyLDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDM5LAorICAgIDI0MCwyMjUsMjQ0LDIyNSwyMzUsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDE1LDI0MiwyNDQsMjM5LDIzMywKKyAgICAyNDMsMjI5LDI0MywyMzIsMjI5LDIzNiwyMzYsMjI2LDI0MiwyMjUsMjI3LDIzNSwyMjksMTE2LCAgMiwxOTMsCisgICAgMTMxLDE5MywxNjEsMjM2LDIyOSwyMzAsMTE2LDEzMCwgNDgsIDIwLDE5MywxNDIsMTkzLDE1MCwyNDMsMjM3LAorICAgIDIyNSwyMzYsMTA4LDEyOCwyNTQsIDkzLDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LDI1NCwKKyAgICAgNTcsMjQyLDIzMywyMzEsMjMyLDExNiwxMzAsIDQ4LCAyMSwxOTMsMTczLDE5MywxODEsMjQzLDIzNywyMjUsCisgICAgMjM2LDEwOCwxMjgsMjU0LCA5NCwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsIDU4LAorICAgIDI0NCwyMjUsMjM5LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAyMSwyNDAsIDk3LCAgMiwxOTMsMjA5LDE5MywKKyAgICAyMjEsMjM2LDIyNSwyNDQsMjI1LDIzNiwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMSwxNzEsMjQyLDIyOSwxMTAsCisgICAgMTI4LCAzNiwxNzUsMTE0LCAgMywxOTMsMjM1LDE5NCwgMTAsMTk0LCAyNSwyMjUsMjI4LDIyOSwyMzcsMjI1LAorICAgIDI0MiwxMDcsMTI5LCAzMywgMzQsMTkzLDI0NywxMTUsICAyLDE5MywyNTMsMTk0LCAgMywyMjUsMjM4LDExNSwKKyAgICAxMjgsMjQ4LDIzNCwyMjksMjQyLDIzMywxMDIsMTI4LDI0NiwyMTksMjI5LDI0NCwyNDIsMjM5LDIzMCwyMzYsCisgICAgMjI5LDI0OCwyMzIsMjM5LDIzOSwxMDcsMTI4LCAgMiwxMzYsMjMzLDIyNSwxMDMsICA0LDE5NCwgMzcsMTk0LAorICAgICA0MiwxOTQsIDQ3LDE5NCwgNTIsMjI4LDExMCwxMjgsIDM3LDE4OCwyMzYsMTAyLDEyOCwgMzcsMTk2LDI0MiwKKyAgICAxMTYsMTI4LCAzNywxODYsMjQ1LDExMiwxMjgsIDM3LDE3OCwxMTUsMTMyLCAgMiwxNjYsMTk0LCA2OSwxOTQsCisgICAgMTA4LDE5NCwyMTQsMTk0LDIyNywyMjUsMjI4LDEwNSwxMzAsICA1LDIzMCwxOTQsIDc5LDE5NCwgOTksMjI4LAorICAgIDIyNSwyMzEsMjI5LDI0MywxMDQsMTI5LDI1MSwgNzAsMTk0LCA5MCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwKKyAgICAxMjgsMjUxLCA3MCwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIzMCwxMDEsICAyLDE5NCwxMTQsCisgICAgMTk0LDEyNSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDcwLDI0MiwxMDEsMTM0LAorICAgICAgNSwxODEsMTk0LDE0MiwxOTQsMTU2LDE5NCwxNjEsMTk0LDE3MCwxOTQsMTg1LDE5NCwyMDEsIDQ5LCAgMiwKKyAgICAxOTQsMTQ4LDE5NCwxNTIsIDUwLDEyOCwgIDUsMTgxLDEwMSwxMjgsICA1LDE4MSwxNzgsIDk4LDEyOCwgIDUsCisgICAgMTgxLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTgxLDIzOCwyMjUsMjQyLDI0MiwyMzksMjQ3LAorICAgIDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTgxLDI0MSwyNDUsMjI1LDI0MiwyNDQsMjI5LDI0MiwKKyAgICAyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDE4MSwyNDcsMjMzLDIyOCwyMjksMjMyLDIyOSwyMjYsCisgICAgMjQyLDIyOSwxMTksMTI4LCAgNSwxODEsMjMyLDIyOSwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LAorICAgIDEyOCwgIDQsIDkxLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsMjQ2LDI0MywxMTYsICA0LDE5NCwKKyAgICAyNDcsMTk1LCA0MSwxOTUsMTA2LDE5NSwxNTcsIDk3LCAgMywxOTQsMjU1LDE5NSwgIDksMTk1LCAxNiwyMjYsCisgICAgMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxNTksMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDMxLAorICAgIDIzMSwxMTcsICAyLDE5NSwgMjMsMTk1LCAzMiwyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE1OSwKKyAgICAyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLCAzMSwyMjksMTA0LCAgNCwxOTUsIDUyLDE5NSwgNjEsCisgICAgMTk1LCA3NSwxOTUsIDkxLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsMTIxLDIzMCwyMzMsMjM4LAorICAgIDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MSwxMDMsMjMzLDIzOCwyMzMsMjQ0LDIzMywKKyAgICAyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTEsMTA0LDIzNywyMjksMjI4LDIzMywyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTEsMTA1LDIzMiwgOTcsICAzLDE5NSwxMTUsMTk1LAorICAgIDEyNSwxOTUsMTMyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE2MCwyMjgsMjI5LDI0NiwKKyAgICAgOTcsMTI4LCAgOSwgMzIsMjMxLDExNywgIDIsMTk1LDEzOSwxOTUsMTQ4LDIzNCwyMjUsMjQyLDIyNSwyNDQsCisgICAgMTA1LDEyOCwgMTAsMTYwLDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDMyLDI0NSwyNDIsMjM4LAorICAgIDIyOSwxMDAsMTI4LCAgMiwxMzUsMTE3LCAgMywxOTUsMTczLDE5NSwxODQsMTk1LDIwOSwyMzIsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTAwLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsCisgICAgMTI5LCA0OCwxOTYsMTk1LDE5NywyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LAorICAgIDEzMCwyNDMsMjM3LDIyNSwyMzYsMTA4LCAgMiwxOTUsMjE5LDE5NSwyMzAsMjMyLDIzMywyNDIsMjI1LDIzMSwKKyAgICAyMjUsMjM4LCA5NywxMjgsIDQ4LCA5OSwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsCisgICAgMTk1LDE5NSwyNDMsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxMTEsMTE5LAorICAgICAgMiwxOTYsICA1LDE5NiwxMTAsMTAxLCAgMiwxOTYsIDExLDE5NiwgNTksMjM2LDI0NiwxMDEsICAzLDE5NiwKKyAgICAgMjEsMTk2LCAzMCwxOTYsIDUxLDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMTA3LDExMiwgIDIsCisgICAgMTk2LCAzNiwxOTYsIDQzLDIyNSwyNDIsMjI5LDExMCwxMjgsIDM2LDEyNywyMjksMjQyLDIzMywyMzksMTAwLAorICAgIDEyOCwgMzYsMTQ3LDI0MiwyMzksMjM3LDIyNSwxMTAsMTI4LCAzMywxMjMsMjM4LDI0NCwxMjEsICAzLDE5NiwKKyAgICAgNjksMTk2LCA3OCwxOTYsIDg5LDIyNywyMzMsMjQyLDIyNywyMzYsMTAxLDEyOCwgMzYsMTE1LDIzMiwyMjUsCisgICAgMjM4LDIzMSwyNTAsMjMyLDIzOSwxMTcsMTI4LCA4MywgNjgsMTEyLCAgMiwxOTYsIDk1LDE5NiwxMDIsMjI1LAorICAgIDI0MiwyMjksMTEwLDEyOCwgMzYsMTM1LDIyOSwyNDIsMjMzLDIzOSwxMDAsMTI4LCAzNiwxNTUsMTExLDE0MiwKKyAgICAgIDAsIDUwLDE5NiwxNDIsMTk2LDE1MSwxOTYsMTYxLDE5NiwxOTEsMTk2LDI0MywxOTcsIDEyLDE5NywgMzksCisgICAgMTk3LCA3MywxOTcsIDg1LDE5NywxMDQsMTk3LDExNSwxOTcsMTQ4LDE5NywxNTYsMTk3LDE4MCwyMjUsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA5OCwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwKKyAgICAyMzIsMjI3LDIzMywyNDIsMjI3LDIzNiwxMDEsMTI5LCAzNiwgOTcsMTk2LDE3MiwyMzMsMjM4LDI0NiwyMjksCisgICAgMjQyLDI0MywyMjksMjQzLDIyNSwyMzgsMjQzLDI0MywyMjksMjQyLDIzMywxMDIsMTI4LCAzOSwxMzksMTAwLAorICAgICAgMiwxOTYsMTk3LDE5NiwyMDMsMjI5LDI0NiwgOTcsMTI4LCAgOSwxMDQsMjM5LDExNiwgIDIsMTk2LDIxMCwKKyAgICAxOTYsMjIxLDIyOSwyMzgsMjM2LDIyOSwyMjUsMjI4LDIyOSwxMTQsMTI4LCAzMiwgMzcsMjM2LDIyOSwyMjUsCisgICAgMjI4LDIyOSwxMTQsMTI5LCAzMiwgMzcsMTk2LDIzMiwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LAorICAgIDEyOCwyNTQsIDQ4LDIzMSwxMTcsICAyLDE5NiwyNTAsMTk3LCAgMywyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwKKyAgICAxMjgsIDEwLDIzMiwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLDEwNCwyMzIsIDk3LCAgMiwxOTcsCisgICAgIDE5LDE5NywgMzAsMjI3LDIzNSwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA5OCwyMzgsMjMxLAorICAgIDI1MCwyMzIsMjM5LDExNywxMjgsIDQ4LCAzNCwxMDUsICAyLDE5NywgNDUsMTk3LCA2MywyMjgsMjI5LDIzOSwKKyAgICAyMzEsMjQyLDIyNSwyNDAsMjMyLDIzMywyMjcsMjQwLDIyNSwyNDIsMjI5LDExMCwxMjgsIDUwLCAzMywyMzgsCisgICAgMjMwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAzMiwxMzAsMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LAorICAgIDIyNywxMDEsMTI4LDI1NSwgMTgsMjM4LDI0NSwyMzcsMjI5LDI0MiwyMjUsMjQ0LDIzOSwyNDIsMjI2LDIyOSwKKyAgICAyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMjQ1LDIzOSwyMzYsMjI4LDI0MywyNDQsMjQ5LDIzNiwxMDEsCisgICAgMTI4LDI0NywgNTAsMTEyLCAgMiwxOTcsMTIxLDE5NywxMjgsMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTE3LAorICAgIDIyOSwxMTQsICAyLDE5NywxMzUsMTk3LDE0MSwyMzMsMjM5LDEwMCwxMjgsIDM2LDEzNywyNDMsMjMzLDIyNSwKKyAgICAxMTAsMTI4LCAgNiwyNDIsMjQyLDIzOSwyMzcsMjI1LDExMCwxMjgsIDMzLDExMywxMTUsICAyLDE5NywxNjIsCisgICAgMTk3LDE3MCwyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsMTg3LDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LAorICAgIDExNCwxMjgsICAwLDE3OCwyNDQsMTA0LCAgMiwxOTcsMTg3LDE5NywxOTIsMjI1LDEwNSwxMjgsIDE0LCA4MiwKKyAgICAyMzMsMjQyLDIyOCwxMTUsMTI4LCAzMywgODQsMTE3LDE0NSwgIDAsMTE3LDE5NywyMzcsMTk3LDI0NSwxOTgsCisgICAgIDMwLDE5OCwgODcsMTk4LDIyNSwxOTksICA2LDE5OSwxMjksMTk5LDE0NSwxOTksMTk2LDIwMCwgMTAsMjAwLAorICAgICA5MSwyMDAsMTAwLDIwMCwyMTksMjAwLDI0MywyMDEsIDk1LDIwMSwxMjMsMjAxLDIzNywyMjUsMjI3LDI0NSwKKyAgICAyNDQsMTAxLDEyOCwgIDAsMjUwLCA5OCwgIDQsMTk3LDI1NSwxOTgsICA0LDE5OCwgMTMsMTk4LCAyMywyMjUsCisgICAgMTE0LDEyOCwgIDIsMTM3LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksMTM3LDIzOSwyNDAsMjM5LAorICAgIDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCA0MCwyNDIsMjI5LDI0NiwxMDEsMTI4LCAgMSwxMDksIDk5LCAgMywKKyAgICAxOTgsIDM4LDE5OCwgNDUsMTk4LCA3NywyMjUsMjQyLDIzOSwxMTAsMTI4LCAgMSwyMTIsMjMzLDI0MiwgOTksCisgICAgICAyLDE5OCwgNTMsMTk4LCA1OCwyMzYsMTAxLDEyOCwgMzYsMjI4LDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLAorICAgIDEyOSwgIDAsMjUxLDE5OCwgNjksMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDExOSwyNDksMjQyLDIzMywKKyAgICAyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwgNjcsMTAwLCAgNSwxOTgsIDk5LDE5OCwxMTAsMTk4LDEzMywxOTgsCisgICAgMTM5LDE5OCwyMTUsMjI1LDI0NCwyNDQsMjI1LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA4MSwyMjYsMTA4LAorICAgICAgMiwxOTgsMTE3LDE5OCwxMjUsMjI1LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLDExMywyMzEsMjQyLDIyNSwKKyAgICAyNDYsMTAxLDEyOCwgIDIsIDIxLDIyOSwyNDYsIDk3LDEyOCwgIDksICA5LDIzMywyMjksMjQyLDIyOSwyNDMsCisgICAgMjMzLDExNSwxMzMsICAwLDI1MiwxOTgsMTU5LDE5OCwxNjcsMTk4LDE3NSwxOTgsMTk4LDE5OCwyMDYsMjI1LAorICAgIDIyNywyNDUsMjQ0LDEwMSwxMjgsICAxLDIxNiwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTE1LCA5OSwKKyAgICAgIDIsMTk4LDE4MSwxOTgsMTg4LDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLDIxOCwyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwyNDEsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsICAxLDIyMCwyMzcsMjI1LAorICAgIDIyNywyNDIsMjM5LDExMCwxMjgsICAxLDIxNCwyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwKKyAgICAyMjksMTAzLCAgMiwxOTgsMjMxLDE5OCwyMzgsMjQyLDIyNSwyNDYsMTAxLDEyOCwgIDAsMjQ5LDExNywgIDIsCisgICAgMTk4LDI0NCwxOTgsMjUzLDIzNCwyMjUsMjQyLDIyNSwyNDQsMTA1LDEyOCwgMTAsMTM3LDI0MiwyMzcsMjQ1LAorICAgIDIzNSwyMzIsMTA1LDEyOCwgMTAsICA5LDEwNCwgIDMsMTk5LCAxNCwxOTksIDI0LDE5OSwxMDIsMjMzLDI0MiwKKyAgICAyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsIDcwLDExMSwgIDIsMTk5LCAzMCwxOTksIDQwLDIzOSwyMzUsCisgICAgMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIzMSwyNDIsMTEwLDEzMywgIDEsMTc2LDE5OSwgNTUsMTk5LAorICAgICA2MywxOTksIDc0LDE5OSwgODIsMTk5LCA5NCwyMjUsMjI3LDI0NSwyNDQsMTAxLDEyOCwgMzAsMjMzLDIyOCwKKyAgICAyMzksMjQ0LDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwyNDEsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsCisgICAgIDMwLDIzNSwyMzIsMjM5LDIzOSwyMzUsMjI1LDIyNiwyMzksMjQ2LDEwMSwxMjgsIDMwLDIzNywyNDQsMjMzLAorICAgIDIzNiwyMjgsMTAxLDEyOCwgMzAsMjM5LDI0NSwyMzgsMjMxLDIyNSwyNDIsMjQ1LDIzNywyMzYsMjI1LDI0NSwKKyAgICAxMTYsMTI5LCAgMSwxMTMsMTk5LDExOCwyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsCisgICAgMjQzLDIzMywyMzgsMjQ2LDIyOSwyNDIsMjQ0LDIyOSwyMjgsMjI2LDI0MiwyMjksMjQ2LDEwMSwxMjgsICAyLAorICAgICAyMywxMDcsICAzLDE5OSwxNTMsMTk5LDE3NywxOTksMTg4LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywKKyAgICAxMjksIDQ4LDE2NiwxOTksMTY1LDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsCisgICAgMTE1LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxMjEsMjM5LDI0MiwyMjksMjI1LAorICAgIDExMCwxMjgsIDQ5LCA5MiwxMDksICAyLDE5OSwyMDIsMTk5LDI1NSwgOTcsICAyLDE5OSwyMDgsMTk5LDI0MSwKKyAgICAyMjcsMjQyLDIzOSwxMTAsMTMwLCAgMSwxMDcsMTk5LDIxOSwxOTksMjMwLDIyNywyNDksMjQyLDIzMywyMzYsCisgICAgMjM2LDIzMywgOTksMTI4LCAgNCwyMzksMjI4LDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjgsIDMwLAorICAgIDEyMywyNDQsMjQyLDIyNSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDY1LDIzOSwKKyAgICAyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgODUsMTEwLCAgMiwyMDAsIDE2LDIwMCwgNzEsCisgICAgMjI4LDIyOSwyNDIsMjQzLDIyNywyMzksMjQyLDEwMSwxMzIsICAwLCA5NSwyMDAsIDM1LDIwMCwgNDEsMjAwLAorICAgICA1MywyMDAsIDY0LDIyOCwyMjYsMTA4LDEyOCwgMzIsIDIzLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwKKyAgICAyMjcsMTAxLDEyOCwyNTUsIDYzLDI0NiwyMjksMjQyLDI0NCwyMzMsMjI3LDIyNSwxMDgsMTI4LDI1NCwgNTEsCisgICAgMjQ3LDIyNSwyNDYsMTIxLDEyOCwyNTQsIDc5LDEwNSwgIDIsMjAwLCA3NywyMDAsIDgyLDIzOSwxMTAsMTI4LAorICAgICAzNCwgNDIsMjQ2LDIyOSwyNDIsMjQzLDIyNSwxMDgsMTI4LCAzNCwgIDAsMjM5LDIzMSwyMzksMjM4LDIyOSwKKyAgICAxMDcsMTI4LCAgMSwxMTUsMTEyLCAgNSwyMDAsMTEyLDIwMCwxMTksMjAwLDEyNywyMDAsMTQyLDIwMCwxOTMsCisgICAgMjI1LDI0MiwyMjksMTEwLDEyOCwgMzYsMTc2LDIyNiwyMzYsMjM5LDIyNywxMDcsMTI4LCAzNywxMjgsMjQwLAorICAgIDIyOSwyNDIsMjI4LDIzOSwyNDQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxOTYsMjQzLDIzMywKKyAgICAyMzYsMjM5LDExMCwxMzEsICAzLDE5NywyMDAsMTU2LDIwMCwxNzcsMjAwLDE4NSwyMjgsMjMzLDIyOSwyNDIsCisgICAgMjI5LDI0MywyMzMsMTE1LDEyOSwgIDMsMjAzLDIwMCwxNjksMjQ0LDIzOSwyMzgsMjM5LDExNSwxMjgsICAzLAorICAgIDE3NiwyMzYsMjI1LDI0NCwyMzMsMTEwLDEyOCwgIDIsMTM4LDI0NCwyMzksMjM4LDIzOSwxMTUsMTI4LCAgMywKKyAgICAyMDUsMjQ0LDIyNSwyMjcsMTA3LCAgMiwyMDAsMjAyLDIwMCwyMTMsMjI2LDIyOSwyMzYsMjM5LDI0NywyMjcsCisgICAgMjM3LCA5OCwxMjgsICAzLCAyOSwyMzcsMjM5LDEwMCwxMjgsICAyLDIxMiwxMTQsICAyLDIwMCwyMjUsMjAwLAorICAgIDIzNywyMjUsMjMxLDI0NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLDExNSwyMzMsMjM4LDEwMywKKyAgICAxMjgsICAxLDExMSwxMTUsICAzLDIwMCwyNTEsMjAxLCAxMCwyMDEsIDU1LDIzMiwyMzksMjQyLDI0NCwyMjcsCisgICAgMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDk0LDIzNywyMjUsMjM2LDEwOCwgIDIsMjAxLAorICAgICAxOSwyMDEsIDMwLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwgNjksMjM1LDIyNSwKKyAgICAyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDE2NSwyMDEsIDQzLDIzMiwyMjUsMjM2LDIzMCwyNDcsCisgICAgMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTA1LDI0NCwyNDIsMjI1LDIzMywyMzEsMjMyLDExNiwgIDIsMjAxLAorICAgICA2NywyMDEsIDc4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNzUsMjQzLDI0NCwKKyAgICAyNDIsMjM5LDIzNSwyMjksMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDE3NywyNDQsCisgICAgMjMzLDIzNiwyMjgsMTAxLDEzMCwgIDEsMTA1LDIwMSwxMDcsMjAxLDExNSwyMjUsMjI3LDI0NSwyNDQsMTAxLAorICAgIDEyOCwgMzAsMTIxLDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwxMTcsMTE3LCAgNSwyMDEsMTM1LDIwMSwKKyAgICAxNDUsMjAxLDE1MiwyMDEsMTc3LDIwMSwxOTMsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksCisgICAgMTM4LDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCAxMCwyMzEsMTE3LCAgMiwyMDEsMTU5LDIwMSwxNjgsMjM0LAorICAgIDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxMzgsMjQyLDIzNywyNDUsMjM1LDIzMiwxMDUsMTI4LCAxMCwKKyAgICAgMTAsMjM3LDIyNSwyNDQsMjQyLDIyNSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsCisgICAgIDY2LDI0NiwyMzksMjQ3LDIyOSwyMzYsMjQzLDIzMywyMzEsMTEwLCAgMywyMDEsMjA5LDIwMSwyMTksMjAxLAorICAgIDIyNiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxOTQsMjI4LDIyOSwyNDYsIDk3LDEyOCwKKyAgICAgIDksIDY2LDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxOTQsMjQ2LDIzOSwyNDcsCisgICAgMjI5LDIzNiwyNDMsMjMzLDIzMSwxMTAsICAzLDIwMSwyNTMsMjAyLCAgNywyMDIsIDE0LDIyNiwyMjksMjM4LAorICAgIDIzMSwyMjUsMjM2LDEwNSwxMjgsICA5LDE5MywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNjUsMjMxLDI0NSwKKyAgICAyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE5MywxMTgsMTM5LCAgMCwxMTgsMjAyLCA1MSwyMDIsCisgICAgMTk5LDIwMiwyMDgsMjAyLDIxOSwyMDMsMTQ4LDIwMywxNTUsMjAzLDI1MywyMDQsICA5LDIwNCwxMDksMjA0LAorICAgIDExNywyMDQsMTM4LCA5NywgIDQsMjAyLCA2MSwyMDIsIDY4LDIwMiwgOTMsMjAyLDEwNCwyMjgsMjI5LDI0NiwKKyAgICAgOTcsMTI4LCAgOSwgNTMsMjMxLDExNywgIDIsMjAyLCA3NSwyMDIsIDg0LDIzNCwyMjUsMjQyLDIyNSwyNDQsCisgICAgMTA1LDEyOCwgMTAsMTgxLDI0MiwyMzcsMjQ1LDIzNSwyMzIsMTA1LDEyOCwgMTAsIDUzLDIzNSwyMjUsMjQ0LAorICAgIDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyNDcsMTE4LDEzMiwgIDUsMjEzLDIwMiwxMTYsMjAyLDE0MywKKyAgICAyMDIsMTc1LDIwMiwxODcsMjI4LDIyNSwyMzEsMjI5LDI0MywxMDQsMTMwLDI1MSwgNTMsMjAyLDEyOSwyMDIsCisgICAgMTM0LDE4MiwgNTMsMTI4LDI1MSwgNTMsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LDI1MSwgNTMsMTA0LAorICAgICAgMiwyMDIsMTQ5LDIwMiwxNTcsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDIxMywyMzksMjM2LDIyNSwKKyAgICAxMDksMTI5LDI1MSwgNzUsMjAyLDE2NiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsMjUxLCA3NSwyNDYsCisgICAgMjI1LDI0NiwyMzIsMjI5LDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDI0MCwyNDksMjM5LDIyOCwyMzIsMjI5LAorICAgIDIyNiwyNDIsMjI5LDExOSwxMjgsICA1LDI0MSwyMjcsMjMzLDI0MiwyMjcsMjM2LDEwMSwxMjgsIDM2LDIyOSwKKyAgICAyMjgsMjM5LDI0NCwyMjYsMjI5LDIzNiwyMzksMTE5LDEyOCwgMzAsMTI3LDEwMSwgIDYsMjAyLDIzMywyMDIsCisgICAgMjQ0LDIwMywgNTIsMjAzLCA2MywyMDMsIDY5LDIwMywxMzYsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLAorICAgICA5OSwxMjgsICA0LCA1MCwxMDQsICA0LDIwMiwyNTQsMjAzLCAgNywyMDMsIDIxLDIwMywgMzcsMjI1LDI0MiwKKyAgICAyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwxNjQsMjMwLDIzMywyMzgsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsCisgICAgMjMzLCA5OSwxMjgsMjUxLDEwNywyMzMsMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LAorICAgIDIzMywgOTksMTI4LDI1MSwxMDgsMjM3LDIyOSwyMjgsMjMzLDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywKKyAgICAgOTksMTI4LDI1MSwxMDksMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI0OSwyMzgsCisgICAgMjQ1LDExNSwxMjgsIDM4LCA2NCwyNDIsMjQ0LDIzMywyMjcsMjI1LDEwOCwgIDIsMjAzLCA4MCwyMDMsIDg2LAorICAgIDIyNiwyMjUsMTE0LDEyOCwgIDAsMTI0LDIzNiwyMzMsMjM4LDEwMSwgIDQsMjAzLCA5OSwyMDMsMTEwLDIwMywKKyAgICAxMjEsMjAzLDEzMCwyMjUsMjI2LDIzOSwyNDYsMjI5LDIyNywyMzcsIDk4LDEyOCwgIDMsIDEzLDIyNiwyMjksCisgICAgMjM2LDIzOSwyNDcsMjI3LDIzNywgOTgsMTI4LCAgMywgNDEsMjM2LDIzOSwyNDcsMjM3LDIzOSwxMDAsMTI4LAorICAgICAgMiwyMDQsMjM3LDIzOSwxMDAsMTI4LCAgMiwyMDAsMjQ3LDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwKKyAgICAxMTAsMTI4LCAgNSwxMjYsMjMyLDIzOSwyMzksMTA3LDEyOCwgIDIsMTM5LDEwNSwgIDMsMjAzLDE2MywyMDMsCisgICAgMTc0LDIwMywyMTMsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI0OCwyNDIsMjI1LAorICAgIDIzNywgOTcsICAzLDIwMywxODUsMjAzLDE5NSwyMDMsMjAyLDIyNiwyMjksMjM4LDIzMSwyMjUsMjM2LDEwNSwKKyAgICAxMjgsICA5LDIwNSwyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNzcsMjMxLDI0NSwyMzQsMjI1LDI0MiwyMjUsCisgICAgMjQ0LDEwNSwxMjgsIDEwLDIwNSwyNDMsMjI1LDI0MiwyMzEsIDk3LCAgMywyMDMsMjI1LDIwMywyMzUsMjAzLAorICAgIDI0MiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwxMzEsMjI4LDIyOSwyNDYsIDk3LDEyOCwKKyAgICAgIDksICAzLDIzMSwyNDUsMjM0LDIyNSwyNDIsMjI1LDI0NCwxMDUsMTI4LCAxMCwxMzEsMjM3LDIzOSwyMzgsCisgICAgMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwgODYsMTExLCAgMywyMDQsIDE3LDIwNCwgMjgsMjA0LAorICAgICA5OCwyMjUsMjQyLDIzNywyMjksMjM4LDIzMywyMjUsMTEwLDEyOCwgIDUsMTIwLDIzMywyMjcsMjI5LDEwMCwKKyAgICAgIDIsMjA0LCAzNywyMDQsIDczLDIzMywyNDQsMjI5LDI0MiwyMjUsMjQ0LDIzMywyMzksMTEwLCAgMiwyMDQsCisgICAgIDUxLDIwNCwgNjIsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDE1OCwyMzUsMjI1LAorICAgIDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMjU0LDIzNywyMjUsMjQyLDIzNSwyMzUsMjI1LDIzOCwKKyAgICAgOTcsMTI5LCA0OCwxNTUsMjA0LCA4NiwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsCisgICAgMjU1LDE1OCwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMjUwLDI0MCwyMjUsMjQyLAorICAgIDIyOSwxMTAsMTI4LCAzNiwxNzcsMTE2LCAgMiwyMDQsMTIzLDIwNCwxMzAsMjMzLDIzNiwyMjgsMTAxLDEyOCwKKyAgICAgMzAsMTI1LDI0NSwyNDIsMjM4LDIyOSwxMDAsMTI4LCAgMiwxNDAsMTE3LCAgMiwyMDQsMTQ0LDIwNCwxNTUsCisgICAgMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDE0OCwyMzUsMjI1LDI0NCwyMjUsMjM1LAorICAgIDIyNSwyMzgsIDk3LDEyOCwgNDgsMjQ0LDExOSwxNDMsICAwLDExOSwyMDQsMjAwLDIwNSwxNzcsMjA1LDE4NywKKyAgICAyMDUsMjEwLDIwNSwyNTAsMjA2LCA2MSwyMDYsIDY5LDIwOCwgNDAsMjA4LCA4MSwyMDgsIDkzLDIwOCwxNjgsCisgICAgMjA4LDE3NiwyMDgsMTgzLDIwOCwxOTQsMjA4LDIwMywgOTcsICA4LDIwNCwyMTgsMjA0LDIyNSwyMDQsMjM1LAorICAgIDIwNCwyNDYsMjA1LCAyOCwyMDUsIDYwLDIwNSwgNzIsMjA1LDEwOCwyMjcsMjQ1LDI0NCwxMDEsMTI4LCAzMCwKKyAgICAxMzEsMjI5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDg5LDIzMiwyMzMsMjQyLDIyNSwyMzEsCisgICAgMjI1LDIzOCwgOTcsMTI4LCA0OCwxNDMsMTA3LCAgMiwyMDQsMjUyLDIwNSwgMjAsMjI1LDI0NCwyMjUsMjM1LAorICAgIDIyNSwyMzgsIDk3LDEyOSwgNDgsMjM5LDIwNSwgIDgsMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwKKyAgICAxMDQsMTI4LDI1NSwxNTYsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA4OCwyNDMsMjM3LDIyNSwyMzYsCisgICAgMTA4LCAgMiwyMDUsIDM4LDIwNSwgNDksMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LAorICAgIDE0MiwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMjM4LDI0NCwyNDQsMjM5LDI0MywKKyAgICAyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgNTEsIDg3LDExOCwgIDIsMjA1LCA3OCwyMDUsIDg2LDIyOSwyMjgsCisgICAgMjI1LDI0MywxMDQsMTI4LCA0OCwgMjgsMjQ5LDI0NSwyMzgsMjI4LDIyOSwyNDIsMjQzLDIyNywyMzksMjQyLAorICAgIDIyOSwyNDYsMjI5LDI0MiwyNDQsMjMzLDIyNywyMjUsMTA4LDEyOCwyNTQsIDUyLDExOSwgIDMsMjA1LDExNiwKKyAgICAyMDUsMTI1LDIwNSwxMzksMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgNzIsMjMwLDIzMywyMzgsCisgICAgMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDIzOCwyMzIsMjI1LDIzNywyNTAsMjI1LAorICAgIDIyNSwyMjYsMjM5LDI0NiwxMDEsICAyLDIwNSwxNTQsMjA1LDE2MywyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsICA2LCAzNiwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsCisgICAgMTM0LDIyNiwyNDMsMjQxLDI0NSwyMjUsMjQyLDEwMSwxMjgsIDUxLDIyMSwyMjcsMjMzLDI0MiwgOTksICAyLAorICAgIDIwNSwxOTYsMjA1LDIwMSwyMzYsMTAxLDEyOCwgMzYsMjMwLDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEyOCwKKyAgICAgIDEsMTE3LDEwMCwgIDIsMjA1LDIxNiwyMDUsMjI2LDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjgsCisgICAgIDMwLDEzMywyMzksMTE2LCAgMiwyMDUsMjMzLDIwNSwyNDIsMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LAorICAgICAzMCwxMzUsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDEzNywxMDEsICA0LDIwNiwgIDQsMjA2LCAxNSwKKyAgICAyMDYsIDI3LDIwNiwgNTEsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LCA5NywxMjgsIDQ4LDE0NSwyMzMsCisgICAgMjI5LDI0MiwyNDMsMjQ0LDI0MiwyMjUsMjQzLDExNSwxMjgsIDMzLCAyNCwxMDcsICAyLDIwNiwgMzMsMjA2LAorICAgICA0MywyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwyNDEsMjM5LDI0MiwyMjksMjI1LDExMCwKKyAgICAxMjgsIDQ5LCA5NCwyMzksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgOTMsMjMxLDI0MiwyMjUsCisgICAgMjQ2LDEwMSwxMjgsIDMwLDEyOSwyMzIsMjMzLDI0NCwxMDEsICA4LDIwNiwgOTAsMjA2LCA5OSwyMDYsMTgzLAorICAgIDIwNywgMTcsMjA3LDEwMSwyMDcsMTQ2LDIwNywxOTgsMjA3LDI1NCwyMjYsMjQ1LDIzNiwyMzYsMjI5LDExNiwKKyAgICAxMjgsIDM3LDIzMCwgOTksICAyLDIwNiwxMDUsMjA2LDEyNSwyMzMsMjQyLDIyNywyMzYsMTAxLDEyOSwgMzcsCisgICAgMjAzLDIwNiwxMTUsMjMzLDIzOCwyNDYsMjI5LDI0MiwyNDMsMTAxLDEyOCwgMzcsMjE3LDIzOSwyNDIsMjM4LAorICAgIDIyOSwyNDIsMjI2LDI0MiwyMjUsMjI3LDIzNSwyMjksMTE2LCAgMiwyMDYsMTQyLDIwNiwxNjIsMjM2LDIyOSwKKyAgICAyMzAsMTE2LDEyOSwgNDgsIDE0LDIwNiwxNTEsMjQ2LDIyOSwyNDIsMjQ0LDIzMywyMjcsMjI1LDEwOCwxMjgsCisgICAgMjU0LCA2NywyNDIsMjMzLDIzMSwyMzIsMTE2LDEyOSwgNDgsIDE1LDIwNiwxNzIsMjQ2LDIyOSwyNDIsMjQ0LAorICAgIDIzMywyMjcsMjI1LDEwOCwxMjgsMjU0LCA2OCwxMDAsICAyLDIwNiwxODksMjA2LDIzMCwyMzMsMjI1LDIzNywKKyAgICAyMzksMjM4LDEwMCwxMjksIDM3LDE5OSwyMDYsMjAwLDIyNywyMzksMjM4LDI0NCwyMjUsMjMzLDIzOCwyMzMsCisgICAgMjM4LDIzMSwyMjYsMjM2LDIyNSwyMjcsMjM1LDI0MywyMzcsMjI1LDIzNiwyMzYsMjI4LDIzMywyMjUsMjM3LAorICAgIDIzOSwyMzgsMTAwLDEyOCwgMzcsMjAwLDIzOSwyNDcsMjM4LDI0MCwyMzksMjMzLDIzOCwyNDQsMjMzLDIzOCwKKyAgICAxMDMsICAyLDIwNiwyNDYsMjA3LCAgNiwyNDMsMjM3LDIyNSwyMzYsMjM2LDI0NCwyNDIsMjMzLDIyNSwyMzgsCisgICAgMjMxLDIzNiwxMDEsMTI4LCAzNywxOTEsMjQ0LDI0MiwyMzMsMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LAorICAgIDE4OSwyMzYsMTAxLCAgMiwyMDcsIDI0LDIwNywgNjYsMjMwLDI0NCwyNDAsMjM5LDIzMywyMzgsMjQ0LDIzMywKKyAgICAyMzgsMTAzLCAgMiwyMDcsIDM5LDIwNywgNTUsMjQzLDIzNywyMjUsMjM2LDIzNiwyNDQsMjQyLDIzMywyMjUsCisgICAgMjM4LDIzMSwyMzYsMTAxLDEyOCwgMzcsMTk1LDI0NCwyNDIsMjMzLDIyNSwyMzgsMjMxLDIzNiwxMDEsMTI4LAorICAgICAzNywxOTMsMjM4LDI0NCwyMzMsMjI3LDI0NSwyMzYsMjI1LDI0MiwyMjYsMjQyLDIyNSwyMjcsMjM1LDIyOSwKKyAgICAxMTYsICAyLDIwNywgODYsMjA3LCA5MywyMzYsMjI5LDIzMCwxMTYsMTI4LCA0OCwgMjIsMjQyLDIzMywyMzEsCisgICAgMjMyLDExNiwxMjgsIDQ4LCAyMywyNDIsMjMzLDIzMSwyMzIsMjQ0LDI0MCwyMzksMjMzLDIzOCwyNDQsMjMzLAorICAgIDIzOCwxMDMsICAyLDIwNywxMTksMjA3LDEzNSwyNDMsMjM3LDIyNSwyMzYsMjM2LDI0NCwyNDIsMjMzLDIyNSwKKyAgICAyMzgsMjMxLDIzNiwxMDEsMTI4LCAzNywxODUsMjQ0LDI0MiwyMzMsMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsCisgICAgIDM3LDE4MywxMTUsICAzLDIwNywxNTQsMjA3LDE4NCwyMDcsMTkyLDEwOSwgIDIsMjA3LDE2MCwyMDcsMTcyLAorICAgIDIyNSwyMzYsMjM2LDI0MywyNDEsMjQ1LDIyNSwyNDIsMTAxLDEyOCwgMzcsMTcxLDIzMywyMzYsMjMzLDIzOCwKKyAgICAyMzEsMjMwLDIyNSwyMjcsMTAxLDEyOCwgMzgsIDU4LDI0MSwyNDUsMjI1LDI0MiwxMDEsMTI4LCAzNywxNjEsCisgICAgMjQ0LDIyNSwxMTQsMTI4LCAzOCwgIDYsMTE2LCAgMiwyMDcsMjA0LDIwNywyMTUsMjI5LDIzNiwyMjksMjQwLAorICAgIDIzMiwyMzksMjM4LDEwMSwxMjgsIDM4LCAxNSwyMzksMjQyLDI0NCwyMzksMjMzLDI0MywyMjksMjQzLDIzMiwKKyAgICAyMjksMjM2LDIzNiwyMjYsMjQyLDIyNSwyMjcsMjM1LDIyOSwxMTYsICAyLDIwNywyMzksMjA3LDI0NiwyMzYsCisgICAgMjI5LDIzMCwxMTYsMTI4LCA0OCwgMjQsMjQyLDIzMywyMzEsMjMyLDExNiwxMjgsIDQ4LCAyNSwyNDUsMjQwLAorICAgIDI0MCwyMzksMjMzLDIzOCwyNDQsMjMzLDIzOCwxMDMsICAyLDIwOCwgMTMsMjA4LCAyOSwyNDMsMjM3LDIyNSwKKyAgICAyMzYsMjM2LDI0NCwyNDIsMjMzLDIyNSwyMzgsMjMxLDIzNiwxMDEsMTI4LCAzNywxODEsMjQ0LDI0MiwyMzMsCisgICAgMjI1LDIzOCwyMzEsMjM2LDEwMSwxMjgsIDM3LDE3OSwxMDUsICAyLDIwOCwgNDYsMjA4LCA1NywyMzIsMjMzLAorICAgIDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTQ0LDEwNywgIDIsMjA4LCA2MywyMDgsIDczLDIyNSwKKyAgICAyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDI0MCwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksCisgICAgIDk1LDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDg3LDExMSwgIDQsMjA4LAorICAgIDEwMywyMDgsMTE0LDIwOCwxMzksMjA4LDE1NywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwKKyAgICAgNDgsMTQ2LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyNDIsMjA4LDEyNywyMzIsCisgICAgMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEwMiwxMTAsMTI5LCAzMiwxNjksMjA4LAorICAgIDE0NSwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LDIzMCwyNDcsMjI1LDIyOSwKKyAgICAyMzgsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDM5LDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxNzgsCisgICAgMjQyLDIzMywyMzgsMTAzLDEyOCwgMzAsMTUyLDI0MywyNDUsMjQwLDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LAorICAgICAgMiwxODMsMjQ0LDI0NSwyNDIsMjM4LDIyOSwxMDAsMTI4LCAgMiwxNDEsMjQ5LDIzOCwxMTAsMTI4LCAgMSwKKyAgICAxOTEsMTIwLDEzNywgIDAsMTIwLDIwOCwyMzEsMjA4LDI0MiwyMDgsMjUzLDIwOSwgIDYsMjA5LCAzMywyMDksCisgICAgIDQ2LDIwOSwgNTAsMjA5LCA2MiwyMDksIDcwLDIyNSwyMjYsMjM5LDI0NiwyMjksMjI3LDIzNywgOTgsMTI4LAorICAgICAgMywgNjEsMjI2LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAxOCwyMjcsMjMzLDI0MiwKKyAgICAyMjcsMjM2LDEwMSwxMjgsIDM2LDIzMSwxMDAsICAyLDIwOSwgMTIsMjA5LCAyMiwyMzMsMjI5LDI0MiwyMjksCisgICAgMjQzLDIzMywxMTUsMTI4LCAzMCwxNDEsMjM5LDI0NCwyMjUsMjI3LDIyNywyMjksMjM4LDExNiwxMjgsIDMwLAorICAgIDEzOSwyMjksMjMyLDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMDksMTA1LDEyOCwKKyAgICAgIDMsMTkwLDIzNywyMzksMjM4LDIzOSwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwyNTUsIDg4LDI0MCwyMjUsCisgICAgMjQyLDIyOSwxMTAsMTI4LCAzNiwxNzksMjQzLDI0NSwyNDAsMjI5LDI0MiwyMzMsMjM5LDExNCwxMjgsICAyLAorICAgIDIyNywxMjEsMTQzLCAgMCwxMjEsMjA5LDExNSwyMTAsIDc0LDIxMCwgOTcsMjEwLDEzNywyMTIsMTAzLDIxMiwKKyAgICAxMTEsMjEyLDEyOCwyMTIsMTkyLDIxMiwyMDQsMjEzLDIwMSwyMTMsMjQxLDIxMywyNTMsMjE0LCAgOCwyMTQsCisgICAgIDI5LDIxNSwgIDIsIDk3LCAxMSwyMDksMTM5LDIwOSwxNTEsMjA5LDE2MSwyMDksMTY4LDIwOSwxNzUsMjA5LAorICAgIDE4NSwyMDksMjEwLDIwOSwyMjEsMjEwLCAgMywyMTAsIDE2LDIxMCwgNjIsMjI1LDIyOCwyMzksMjQzLDI0MSwKKyAgICAyNDUsMjI1LDI0MiwxMDEsMTI4LCA1MSwgNzgsMjI2LDIyOSwyMzgsMjMxLDIyNSwyMzYsMTA1LDEyOCwgIDksCisgICAgMTc1LDIyNywyNDUsMjQ0LDEwMSwxMjgsICAwLDI1MywyMjgsMjI5LDI0NiwgOTcsMTI4LCAgOSwgNDcsMjI5LAorICAgIDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksIDgyLDIzMSwxMTcsICAyLDIwOSwxOTIsMjA5LDIwMSwKKyAgICAyMzQsMjI1LDI0MiwyMjUsMjQ0LDEwNSwxMjgsIDEwLDE3NSwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsCisgICAgIDEwLCA0NywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTMyLDEwNywgIDIsMjA5LAorICAgIDIyNywyMDksMjUxLDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIyOCwyMDksMjM5LDIzMiwKKyAgICAyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTQ4LDIzOSwyNDIsMjI5LDIyNSwxMTAsCisgICAgMTI4LCA0OSwgODEsMjM3LDIyNSwyMzUsMjM1LDIyNSwyMzgsMjQ0LDIzMiwyMjUsMTA1LDEyOCwgMTQsIDc4LAorICAgIDI0MywyMzcsMjI1LDIzNiwxMDgsICAyLDIxMCwgMjYsMjEwLCAzNywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwKKyAgICAyMzgsIDk3LDEyOCwgNDgsMTMxLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMjcsCisgICAgMjEwLCA1MCwyMzIsMjI1LDIzNiwyMzAsMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEwOCwyNDQsMjI3LAorICAgIDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA5OSwyMjcsMjMzLDI0MiwgOTksICAyLDIxMCwKKyAgICAgODMsMjEwLCA4OCwyMzYsMTAxLDEyOCwgMzYsMjMyLDI0NSwyMzcsMjMwLDIzNiwyMjksMTIwLDEyOCwgIDEsCisgICAgMTE5LDEwMCwgIDIsMjEwLDEwMywyMTAsMTEzLDIzMywyMjksMjQyLDIyOSwyNDMsMjMzLDExNSwxMjgsICAwLAorICAgIDI1NSwyMzksMTE2LCAgMiwyMTAsMTIwLDIxMCwxMjksMjI1LDIyNywyMjcsMjI5LDIzOCwxMTYsMTI4LCAzMCwKKyAgICAxNDMsMjI2LDIyOSwyMzYsMjM5LDExOSwxMjgsIDMwLDI0NSwxMDEsICA3LDIxMCwxNTMsMjExLDE2MSwyMTEsCisgICAgMTcwLDIxMSwxODgsMjExLDIyMCwyMTIsIDQwLDIxMiwgOTEsMTA0LCAgOCwyMTAsMTcxLDIxMCwxODAsMjEwLAorICAgIDIxNCwyMTAsMjI4LDIxMSwgNDUsMjExLCA2MSwyMTEsMTIwLDIxMSwxMzgsMjI1LDI0MiwyMjUsMjI2LDIzMywKKyAgICAgOTksMTI4LCAgNiwgNzQsMjI2LDIyNSwyNDIsMjQyLDIyOSwxMDEsICAyLDIxMCwxOTEsMjEwLDIwMCwyMjUsCisgICAgMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LDIxMCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LAorICAgIDIyNiwyMzMsIDk5LDEyOCwyNTEsMTc1LDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywKKyAgICAgOTksMTI4LDI1NCwyNDIsMjMyLDIyNSwyMzcsMjUwLDIyNSwyMjUsMjI2LDIzOSwyNDYsMTAxLCAgNCwyMTAsCisgICAgMjQ3LDIxMSwgIDAsMjExLCAxNCwyMTEsIDMwLDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwgIDYsIDM4LAorICAgIDIzMCwyMzMsMjM4LDIyNSwyMzYsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1NCwxMzgsMjMzLDIzOCwKKyAgICAyMzMsMjQ0LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTM5LDIzNywyMjksCisgICAgMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTQwLDIzMywyMzgsMjMzLAorICAgIDI0NCwyMzMsMjI1LDIzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsMjU0LDI0MywyMzcsMTAxLCAgMiwKKyAgICAyMTEsIDY4LDIxMSwgODEsMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsCisgICAgMjQ0LDIyOSwyMzcsMTA1LCAgMiwyMTEsIDg5LDIxMSwxMDQsMjM4LDIzMywyNDQsMjMzLDIyNSwyMzYsMjI1LAorICAgIDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LDI1MiwyMjEsMjQzLDIzOSwyMzYsMjI1LDI0NCwyMjksMjI4LDIyNSwKKyAgICAyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsIDg4LDIzOCwyMzksMjM5LDIzOCwyMzAsMjMzLDIzOCwyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTIsMTQ4LDI0NCwyMzIsMjQyLDIyOSwyMjksMjI4LAorICAgIDIzOSwyNDQsMjQzLDIyNiwyMjksMjM2LDIzOSwyNDcsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwKKyAgICAyMDksMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgODYsMTEwLDEyOSwgIDAsMTY1LDIxMSwxNzYsCisgICAgMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywxMDEsMTI4LDI1NSwyMjksMTExLCAgMiwyMTEsMTk0LAorICAgIDIxMSwyMDMsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgODUsMjQyLDIzMywyMzgsMjMyLDIzMywKKyAgICAyMjksMjQ1LDIzMiwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDEzNCwxMTQsICAzLDIxMSwyMjgsCisgICAgMjEyLCAgOCwyMTIsIDIwLDIyNSwyMzIsMjI2LDIyOSwyMzgsMjQ5LDIzOSwyMzcsMTExLCAgMiwyMTEsMjQyLAorICAgIDIxMSwyNTEsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzAsMjM2LDIyOSwyMzAsMjQ0LDIzMiwKKyAgICAyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsMTcwLDIzMywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsCisgICAgIDk5LDEyOCwgIDQsIDc1LDI0NSwyMjgsMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMjQzLDIyNywyNDksMjQyLAorICAgIDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwyNDksMjQzLDIzMywyMjksMjQ1LDIzOCwxMDMsICAzLDIxMiwKKyAgICAgNTMsMjEyLCA2MiwyMTIsIDc4LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTI5LDI0MCwyMjUsCisgICAgMjM4LDI0MywyMzMsMjM5LDI0MywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDEzMSwyNDMsMjMzLAorICAgIDIzOSwyNDMsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMzAsMjQ0LDIzMywyNDYsMjMyLDIyOSwKKyAgICAyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNTQsMjMxLDI0MiwyMjUsMjQ2LDEwMSwxMjgsIDMwLDI0MywyMzIsCisgICAgMjM5LDIzOSwxMDcsMTI5LCAgMSwxODAsMjEyLDEyMCwyMjUsMjI2LDIzOSwyNDYsMTAxLDEyOCwgMzAsMjQ3LAorICAgIDEwNSwgIDUsMjEyLDE0MCwyMTIsMTUxLDIxMiwxNjIsMjEyLDE3MSwyMTIsMTc5LDIyNSwyNDIsMjM3LDIyOSwKKyAgICAyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMTcsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsCisgICAgICA0LCA4NywyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LCA5OCwyMzgsMjQ5LDIyNSwyMzgsMTAzLAorICAgIDEyOCwgMzgsIDQ3LDI0NywyMzgsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDEzMCwKKyAgICAyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LCA4OSwxMTEsICA3LDIxMiwyMjAsCisgICAgMjEzLCAzNCwyMTMsIDQ1LDIxMywgNTUsMjEzLCA5MywyMTMsMTM5LDIxMywxNDgsMTAwLDEzMSwgIDUsMjE3LAorICAgIDIxMiwyMzAsMjEyLDI1MCwyMTMsICAzLDIyOCwyMjUsMjMxLDIyOSwyNDMsMTA0LDEyOSwyNTEsIDU3LDIxMiwKKyAgICAyNDEsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LDI1MSwgNTcsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksCisgICAgMTI4LCAgNSwyMTcsMjQ5LDIzOSwxMDAsICAyLDIxMywgMTEsMjEzLCAyMCwyMzIsMjI5LDIyNiwyNDIsMjI5LAorICAgIDExOSwxMjgsICA1LDI0MiwyNDAsMjI1LDI0NCwyMjUsMjMyLDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwKKyAgICAyNTEsIDMxLDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LCA0OCwxMzYsMjMzLDIzNSwyMzksCisgICAgMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTM3LDEwNywgIDIsMjEzLCA2MSwyMTMsIDg1LDIyNSwyNDQsMjI1LAorICAgIDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIzMiwyMTMsIDczLDIzMiwyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwKKyAgICAyNDQsMTA0LDEyOCwyNTUsMTUwLDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwgOTEsMjQzLDIzNywyMjUsCisgICAgMjM2LDEwOCwgIDIsMjEzLDEwMywyMTMsMTE0LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LAorICAgICA0OCwxMzUsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjksIDQ4LDIzMSwyMTMsMTI3LDIzMiwKKyAgICAyMjUsMjM2LDIzMCwyNDcsMjMzLDIyOCwyNDQsMTA0LDEyOCwyNTUsMTEwLDI0NCwyMzEsMjQyLDIyOSwyMjksCisgICAgMTA3LDEyOCwgIDMsMjQzLDEyMSwgIDIsMjEzLDE1NCwyMTMsMTkxLCA5NywgIDIsMjEzLDE2MCwyMTMsMTcwLAorICAgIDIyOSwyMzUsMjM5LDI0MiwyMjksMjI1LDExMCwxMjgsIDQ5LDEzNiwxMDcsICAyLDIxMywxNzYsMjEzLDE4NCwKKyAgICAyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwgNDksMTM1LDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCAzNCwyMzMsCisgICAgMjM4LDIzMSwyNDQsMjMyLDIyNSwxMDUsMTI4LCAxNCwgMTMsMTEyLCAgMiwyMTMsMjA3LDIxMywyMTQsMjI1LAorICAgIDI0MiwyMjksMTEwLDEyOCwgMzYsMTgwLDIzOSwyMzEsMjI5LDIzMSwyNDIsMjI1LDIzNywyMzcsMjI5LDIzOCwKKyAgICAxMDUsMTI5LCAgMywxMjIsMjEzLDIzMCwyMzEsMjQyLDIyOSwyMjksMjM1LDIyNywyMzcsIDk4LDEyOCwgIDMsCisgICAgIDY5LDExNCwxMjksICAxLDE2NiwyMTMsMjQ3LDIzMywyMzgsMTAzLDEyOCwgMzAsMTUzLDI0MywyNDUsMjQwLAorICAgIDIyOSwyNDIsMjMzLDIzOSwxMTQsMTI4LCAgMiwxODQsMTE2LCAgMiwyMTQsIDE0LDIxNCwgMjEsMjMzLDIzNiwKKyAgICAyMjgsMTAxLDEyOCwgMzAsMjQ5LDI0NSwyNDIsMjM4LDIyOSwxMDAsMTI4LCAgMiwxNDIsMTE3LCAgNSwyMTQsCisgICAgIDQxLDIxNCwgNTIsMjE0LCA2MiwyMTQsMTAwLDIxNCwyMzIsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsMjM4LAorICAgICA5NywxMjgsIDQ4LDEzNCwyMzMsMjM1LDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxNDAsMTA3LCAgMiwKKyAgICAyMTQsIDY4LDIxNCwgOTIsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOSwgNDgsMjMwLDIxNCwgODAsCisgICAgMjMyLDIyNSwyMzYsMjMwLDI0NywyMzMsMjI4LDI0NCwxMDQsMTI4LDI1NSwxNDksMjM5LDI0MiwyMjksMjI1LAorICAgIDExMCwxMjgsIDQ5LCA5NiwxMTUsICAzLDIxNCwxMDgsMjE0LDE0NiwyMTQsMTg3LDIyNiwyMzMsMTAzLCAgMiwKKyAgICAyMTQsMTE2LDIxNCwxMjcsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDEwNywyMzMsCisgICAgMjM5LDI0NCwyMzMsMjMwLDIzMywyMjksMjI4LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LAorICAgICAgNCwxMDksMjM2LDIzMywyNDQsMjQ0LDIzNiwxMDEsICAyLDIxNCwxNTcsMjE0LDE2OCwyMjcsMjQ5LDI0MiwKKyAgICAyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsMTAzLDIzMywyMzksMjQ0LDIzMywyMzAsMjMzLDIyOSwyMjgsCisgICAgMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDEwNSwyMzcsMjI1LDIzNiwxMDgsICAyLAorICAgIDIxNCwxOTYsMjE0LDIwNywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwgNDgsMTMzLDIzNSwKKyAgICAyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI5LCA0OCwyMjksMjE0LDIyMCwyMzIsMjI1LDIzNiwyMzAsCisgICAgMjQ3LDIzMywyMjgsMjQ0LDEwNCwxMjgsMjU1LDEwOSwyNDksMTAxLCAgMiwyMTQsMjM5LDIxNCwyNDgsMjM1LAorICAgIDIzOSwyNDIsMjI5LDIyNSwxMTAsMTI4LCA0OSwxMzksMjM5LDIzNSwyMzksMjQyLDIyOSwyMjUsMTEwLDEyOCwKKyAgICAgNDksMTM4LDI0OSwgOTcsICAyLDIxNSwgIDksMjE1LCAxOSwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsCisgICAgMTI4LCAgOSwyMjMsMjI4LDIyOSwyNDYsIDk3LDEyOCwgIDksIDk1LDEyMiwxNDIsICAwLDEyMiwyMTUsIDU4LAorICAgIDIxNiwgNjYsMjE2LCA3NywyMTYsMTIwLDIxNiwxNDcsMjE3LDE4MiwyMTgsIDM0LDIxOCwgNzYsMjE4LCA4OCwKKyAgICAyMTgsMTAwLDIxOCwxMjgsMjE4LDEzNiwyMTgsMTUyLDIxOCwxNjEsIDk3LCAxMCwyMTUsIDgwLDIxNSwgOTEsCisgICAgMjE1LCA5OCwyMTUsMTA1LDIxNSwxMTYsMjE1LDE5NCwyMTUsMjI0LDIxNSwyMzUsMjE2LCAxNSwyMTYsIDI3LAorICAgIDIyNSwyNDIsMjM3LDIyOSwyMzgsMjMzLDIyNSwxMTAsMTI4LCAgNSwxMDIsMjI3LDI0NSwyNDQsMTAxLDEyOCwKKyAgICAgIDEsMTIyLDIyOCwyMjksMjQ2LCA5NywxMjgsICA5LCA5MSwyMzEsMjQ1LDI0MiwyMzcsMjQ1LDIzNSwyMzIsCisgICAgMTA1LDEyOCwgMTAsIDkxLDEwNCwgIDQsMjE1LDEyNiwyMTUsMTM1LDIxNSwxNDksMjE1LDE3OSwyMjUsMjQyLAorICAgIDIyNSwyMjYsMjMzLCA5OSwxMjgsICA2LCA1NiwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwKKyAgICAyMzMsIDk5LDEyOCwyNTQsMTk4LDEwNSwgIDIsMjE1LDE1NSwyMTUsMTcwLDIzOCwyMzMsMjQ0LDIzMywyMjUsCisgICAgMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTk5LDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LAorICAgIDEyOCwgNDgsIDg2LDIzNywyMjksMjI4LDIzMywyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwKKyAgICAyNTQsMjAwLDIzMywxMTAsICAyLDIxNSwyMDEsMjE1LDIxMCwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwxMjgsCisgICAgICA2LCA1MCwyMzAsMjMzLDIzOCwyMjUsMjM2LDIyNSwyNDIsMjI1LDIyNiwyMzMsIDk5LDEyOCwyNTQsMTc2LAorICAgIDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxODIsMjQxLDIyOSwxMDIsICAyLDIxNSwKKyAgICAyNDMsMjE2LCAgMSwyMzEsMjI1LDIyOCwyMzksMjM2LDIzMiwyMjksMjI2LDI0MiwyMjksMTE5LDEyOCwgIDUsCisgICAgMTQ5LDI0MSwyMjUsMjQ0LDIyNSwyMzgsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNDgsMjQyLAorICAgIDI0MSwyMjUsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNTIsMjQ5LDIzMywxMTAsMTMwLCAgNSwKKyAgICAyMTQsMjE2LCAzNywyMTYsIDU3LDIyOCwyMjUsMjMxLDIyOSwyNDMsMTA0LDEyOSwyNTEsIDU0LDIxNiwgNDgsCisgICAgMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LDI1MSwgNTQsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LAorICAgICAgNSwyMTQsMjI2LDIzOSwyNDAsMjM5LDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAyMywgOTksICAzLDIxNiwKKyAgICAgODUsMjE2LCA5MiwyMTYsMTE0LDIyNSwyNDIsMjM5LDExMCwxMjgsICAxLDEyNiwyMzMsMjQyLCA5OSwgIDIsCisgICAgMjE2LDEwMCwyMTYsMTA1LDIzNiwxMDEsMTI4LCAzNiwyMzMsMjQ1LDIzNywyMzAsMjM2LDIyOSwxMjAsMTI4LAorICAgICAzMCwxNDUsMjQ1LDI0MiwxMDgsMTI4LCAgMiwxNDUsMjI4LDIzOSwxMTYsMTMwLCAgMSwxMjQsMjE2LDEzMCwKKyAgICAyMTYsMTM5LDIyNSwyMjcsMjI3LDIyOSwyMzgsMTE2LDEyOCwgIDEsMTI0LDIyNiwyMjksMjM2LDIzOSwxMTksCisgICAgMTI4LCAzMCwxNDcsMTAxLCAgNiwyMTYsMTYxLDIxNiwxNzIsMjE2LDIxNSwyMTYsMjI2LDIxNiwyMzcsMjE3LAorICAgIDE3NywyMjcsMjQ5LDI0MiwyMzMsMjM2LDIzNiwyMzMsIDk5LDEyOCwgIDQsIDU1LDEwMCwgIDIsMjE2LDE3OCwKKyAgICAyMTYsMTk3LDIyOSwyNDMsMjI3LDIyOSwyMzgsMjI4LDIyOSwyNDIsMjI3LDI0OSwyNDIsMjMzLDIzNiwyMzYsCisgICAgMjMzLCA5OSwxMjgsICA0LDE1MywyMzMsMjI5LDI0MiwyMjksMjQzLDIzMywyNDMsMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LDIyMywyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwKKyAgICAgNDgsIDkyLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxODgsMjQyLDExMSwxNDAsCisgICAgICAwLCA0OCwyMTcsIDEwLDIxNywgMTksMjE3LCAyOSwyMTcsIDM2LDIxNywgNjEsMjE3LCA3NCwyMTcsIDg1LAorICAgIDIxNywgOTcsMjE3LDEwOCwyMTcsMTE4LDIxNywxMjksMjE3LDEzNiwyMjUsMjQyLDIyNSwyMjYsMjMzLCA5OSwKKyAgICAxMjgsICA2LCA5NiwyMjYsMjI5LDIzOCwyMzEsMjI1LDIzNiwxMDUsMTI4LCAgOSwyMzAsMjI4LDIyOSwyNDYsCisgICAgIDk3LDEyOCwgIDksMTAyLDIzMSwxMTcsICAyLDIxNywgNDMsMjE3LCA1MiwyMzQsMjI1LDI0MiwyMjUsMjQ0LAorICAgIDEwNSwxMjgsIDEwLDIzMCwyNDIsMjM3LDI0NSwyMzUsMjMyLDEwNSwxMjgsIDEwLDEwMiwyMzIsMjI1LDIyNywKKyAgICAyMzUsMjI1LDI0MiwyMjUsMjI2LDIzMywgOTksMTI4LCAgNiwgOTYsMjMzLDIzOCwyMzAsMjI5LDI0MiwyMzMsCisgICAgMjM5LDExNCwxMjgsIDMyLDEyOCwyMzcsMjM5LDIzOCwyMzksMjQzLDI0MCwyMjUsMjI3LDEwMSwxMjgsMjU1LAorICAgICAxNiwyMzksMjM2LDIyOCwyNDMsMjQ0LDI0OSwyMzYsMTAxLDEyOCwyNDcsIDQ4LDI0MCwyMjksMjQyLDI0MywKKyAgICAyMzMsMjI1LDExMCwxMjgsICA2LDI0MCwyNDMsMjQ1LDI0MCwyMjksMjQyLDIzMywyMzksMTE0LDEyOCwgMzIsCisgICAgMTEyLDI0NCwyMzIsMjI1LDEwNSwxMjgsIDE0LCA4MCwyNDcsMjMzLDIyOCwyNDQsMTA0LCAgMywyMTcsMTQ4LAorICAgIDIxNywxNTcsMjE3LDE2OSwyMzQsMjM5LDIzMywyMzgsMjI5LDExNCwxMjgsMjU0LDI1NSwyMzgsMjM5LDIzOCwKKyAgICAyMzQsMjM5LDIzMywyMzgsMjI5LDExNCwxMjgsIDMyLCAxMiwyNDMsMjQwLDIyNSwyMjcsMTAxLDEyOCwgMzIsCisgICAgIDExLDI0NCwgOTcsMTI4LCAgMywxODIsMTA0LCAgMiwyMTcsMTg4LDIxNywxOTksMjI2LDIzOSwyNDAsMjM5LAorICAgIDIzNywyMzksMjMwLDExMSwxMjgsIDQ5LCAxOSwxMDEsICA0LDIxNywyMDksMjE3LDIyMCwyMTcsMjM2LDIxNywKKyAgICAyNDcsMjI1LDI0MiwyMzcsMjI5LDIzOCwyMzMsMjI1LDExMCwxMjgsICA1LDEwNiwyMjYsMjQyLDIyOSwyNDYsCisgICAgMjI5LDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxOTQsMjI3LDI0OSwyNDIsMjMzLAorICAgIDIzNiwyMzYsMjMzLCA5OSwxMjgsICA0LCA1NCwxMDAsICAyLDIxNywyNTMsMjE4LCAxNiwyMjksMjQzLDIyNywKKyAgICAyMjksMjM4LDIyOCwyMjksMjQyLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LCAgNCwxNTEsCisgICAgMjMzLDIyOSwyNDIsMjI5LDI0MywyMzMsMjQzLDIyNywyNDksMjQyLDIzMywyMzYsMjM2LDIzMywgOTksMTI4LAorICAgICAgNCwyMjEsMTA1LCAgMywyMTgsIDQyLDIxOCwgNTMsMjE4LCA2NCwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwKKyAgICAyMzgsIDk3LDEyOCwgNDgsIDg4LDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxODQsCisgICAgMjM4LDIzOSwyNDIsMjMyLDIyOSwyMjYsMjQyLDIyOSwxMTksMTI4LCAgNSwxNzQsMjM2LDIzMywyMzgsMjI5LAorICAgIDIyNiwyMjksMjM2LDIzOSwxMTksMTI4LCAzMCwxNDksMjM3LDIzOSwyMzgsMjM5LDI0MywyNDAsMjI1LDIyNywKKyAgICAxMDEsMTI4LDI1NSwgOTAsMTExLCAgMiwyMTgsMTA2LDIxOCwxMTcsMjMyLDIzMywyNDIsMjI1LDIzMSwyMjUsCisgICAgMjM4LCA5NywxMjgsIDQ4LCA5NCwyMzUsMjI1LDI0NCwyMjUsMjM1LDIyNSwyMzgsIDk3LDEyOCwgNDgsMTkwLAorICAgIDI0MCwyMjUsMjQyLDIyOSwxMTAsMTI4LCAzNiwxODEsMjQyLDIyOSwyNDQsMjQyLDIzOSwyMzAsMjM2LDIyOSwKKyAgICAyNDgsMjMyLDIzOSwyMzksMTA3LDEyOCwgIDIsMTQ0LDI0MywyNDQsMjQyLDIzOSwyMzUsMTAxLDEyOCwgIDEsCisgICAgMTgyLDExNywgIDIsMjE4LDE2NywyMTgsMTc4LDIzMiwyMzMsMjQyLDIyNSwyMzEsMjI1LDIzOCwgOTcsMTI4LAorICAgICA0OCwgOTAsMjM1LDIyNSwyNDQsMjI1LDIzNSwyMjUsMjM4LCA5NywxMjgsIDQ4LDE4NgorICB9OworCisKKyAgLyoKKyAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGNvbXByZXNzZWQgdGFibGUgZWZmaWNpZW50bHkuCisgICAqLworICBzdGF0aWMgdW5zaWduZWQgbG9uZworICBmdF9nZXRfYWRvYmVfZ2x5cGhfaW5kZXgoIGNvbnN0IGNoYXIqICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBsaW1pdCApCisgIHsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgYyA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGNvdW50LCBtaW4sIG1heDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcCA9IGZ0X2Fkb2JlX2dseXBoX2xpc3Q7CisKKworICAgIGlmICggbmFtZSA9PSAwIHx8IG5hbWUgPj0gbGltaXQgKQorICAgICAgZ290byBOb3RGb3VuZDsKKworICAgIGMgICAgID0gKm5hbWUrKzsKKyAgICBjb3VudCA9IHBbMV07CisgICAgcCAgICArPSAyOworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBjb3VudDsKKworICAgIHdoaWxlICggbWluIDwgbWF4ICkKKyAgICB7CisgICAgICBpbnQgICAgICAgICAgICAgICAgICAgbWlkID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHEgICA9IHAgKyBtaWQgKiAyOworICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGMyOworCisKKyAgICAgIHEgPSBmdF9hZG9iZV9nbHlwaF9saXN0ICsgKCAoIChpbnQpcVswXSA8PCA4ICkgfCBxWzFdICk7CisKKyAgICAgIGMyID0gcVswXSAmIDEyNzsKKyAgICAgIGlmICggYzIgPT0gYyApCisgICAgICB7CisgICAgICAgIHAgPSBxOworICAgICAgICBnb3RvIEZvdW5kOworICAgICAgfQorICAgICAgaWYgKCBjMiA8IGMgKQorICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgICAgZWxzZQorICAgICAgICBtYXggPSBtaWQ7CisgICAgfQorICAgIGdvdG8gTm90Rm91bmQ7CisKKyAgRm91bmQ6CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAvKiBhc3NlcnQgKCpwICYgMTI3KSA9PSBjICovCisKKyAgICAgIGlmICggbmFtZSA+PSBsaW1pdCApCisgICAgICB7CisgICAgICAgIGlmICggKHBbMF0gJiAxMjgpID09IDAgJiYKKyAgICAgICAgICAgICAocFsxXSAmIDEyOCkgIT0gMCApCisgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSggKCAoaW50KXBbMl0gPDwgOCApIHwgcFszXSApOworCisgICAgICAgIGdvdG8gTm90Rm91bmQ7CisgICAgICB9CisgICAgICBjID0gKm5hbWUrKzsKKyAgICAgIGlmICggcFswXSAmIDEyOCApCisgICAgICB7CisgICAgICAgIHArKzsKKyAgICAgICAgaWYgKCBjICE9IChwWzBdICYgMTI3KSApCisgICAgICAgICAgZ290byBOb3RGb3VuZDsKKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgcCsrOworICAgICAgY291bnQgPSBwWzBdICYgMTI3OworICAgICAgaWYgKCBwWzBdICYgMTI4ICkKKyAgICAgICAgcCArPSAyOworCisgICAgICBwKys7CisKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBwICs9IDIgKQorICAgICAgeworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKCAoaW50KXBbMF0gPDwgOCApIHwgcFsxXTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHEgICAgICA9IGZ0X2Fkb2JlX2dseXBoX2xpc3QgKyBvZmZzZXQ7CisKKyAgICAgICAgaWYgKCBjID09ICggcVswXSAmIDEyNyApICkKKyAgICAgICAgeworICAgICAgICAgIHAgPSBxOworICAgICAgICAgIGdvdG8gTmV4dEl0ZXI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGdvdG8gTm90Rm91bmQ7CisKKyAgICBOZXh0SXRlcjoKKyAgICAgIDsKKyAgICB9CisKKyAgTm90Rm91bmQ6CisgICAgcmV0dXJuIDA7CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVCAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9wc25hbWVzL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzc0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3BzbmFtZXMvcnVsZXMubWsKQEAgLTAsMCArMSw3NCBAQAorIworIyBGcmVlVHlwZSAyIFBTTmFtZXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgUFNOYW1lcyBkcml2ZXIgZGlyZWN0b3J5CisjCitQU05BTUVTX0RJUiA6PSAkKFNSQ19ESVIpL3BzbmFtZXMKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitQU05BTUVTX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoUFNOQU1FU19ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBQU05hbWVzIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworUFNOQU1FU19EUlZfU1JDIDo9ICQoUFNOQU1FU19ESVIpL3BzbW9kdWxlLmMgXAorICAgICAgICAgICAgICAgICAgICQoUFNOQU1FU19ESVIpL3BzcGljLmMKKworCisjIFBTTmFtZXMgZHJpdmVyIGhlYWRlcnMKKyMKK1BTTkFNRVNfRFJWX0ggOj0gJChQU05BTUVTX0RSVl9TUkM6JS5jPSUuaCkgXAorICAgICAgICAgICAgICAgICAkKFBTTkFNRVNfRElSKS9wc25hbWVyci5oICBcCisgICAgICAgICAgICAgICAgICQoUFNOQU1FU19ESVIpL3BzdGFibGVzLmgKKworCisjIFBTTmFtZXMgZHJpdmVyIG9iamVjdChzKQorIworIyAgIFBTTkFNRVNfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzCisjICAgUFNOQU1FU19EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzCisjCitQU05BTUVTX0RSVl9PQkpfTSA6PSAkKFBTTkFNRVNfRFJWX1NSQzokKFBTTkFNRVNfRElSKS8lLmM9JChPQkpfRElSKS8lLiRPKQorUFNOQU1FU19EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9wc25hbWVzLiRPCisKKyMgUFNOYW1lcyBkcml2ZXIgc291cmNlIGZpbGUgZm9yIHNpbmdsZSBidWlsZAorIworUFNOQU1FU19EUlZfU1JDX1MgOj0gJChQU05BTUVTX0RJUikvcHNuYW1lcy5jCisKKworIyBQU05hbWVzIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoUFNOQU1FU19EUlZfT0JKX1MpOiAkKFBTTkFNRVNfRFJWX1NSQ19TKSAkKFBTTkFNRVNfRFJWX1NSQykgXAorICAgICAgICAgICAgICAgICAgICAgICQoRlJFRVRZUEVfSCkgJChQU05BTUVTX0RSVl9IKQorCSQoUFNOQU1FU19DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChQU05BTUVTX0RSVl9TUkNfUykpCisKKworIyBQU05hbWVzIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChQU05BTUVTX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChQU05BTUVTX0RSVl9IKQorCSQoUFNOQU1FU19DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoUFNOQU1FU19EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoUFNOQU1FU19EUlZfT0JKX00pCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2VkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9KYW1maWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgRnJlZVR5cGUgMiBzcmMvcmFzdGVyIEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSByYXN0ZXIgOworCit7CisgIGxvY2FsICBfc291cmNlcyA7CisKKyAgaWYgJChGVDJfTVVMVEkpCisgIHsKKyAgICBfc291cmNlcyA9IGZ0cmFzdGVyIGZ0cmVuZDEgcmFzdHBpYyA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSByYXN0ZXIgOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIGVuZCBvZiBzcmMvcmFzdGVyIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL2Z0bWlzYy5oIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRtaXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliZTRjYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL2Z0bWlzYy5oCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdG1pc2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgTWlzY2VsbGFuZW91cyBtYWNyb3MgZm9yIHN0YW5kLWFsb25lIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24gICAgICAgKi8KKy8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KKy8qICBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyAqbm90KiBwb3J0YWJsZSEgIFlvdSBoYXZlIHRvIGFkYXB0ICovCisgIC8qIGl0cyBkZWZpbml0aW9ucyB0byB5b3VyIHBsYXRmb3JtLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVE1JU0NfSF9fCisjZGVmaW5lIF9fRlRNSVNDX0hfXworCisKKyAgLyogbWVtc2V0ICovCisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKyNkZWZpbmUgRlRfQkVHSU5fSEVBREVSCisjZGVmaW5lIEZUX0VORF9IRUFERVIKKworI2RlZmluZSBGVF9MT0NBTF9ERUYoIHggKSAgIHN0YXRpYyB4CisKKworICAvKiBmcm9tIGluY2x1ZGUvZnJlZXR5cGUyL2Z0dHlwZXMuaCAqLworCisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgRlRfQnl0ZTsKKyAgdHlwZWRlZiBzaWduZWQgaW50ICAgICBGVF9JbnQ7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgRlRfVUludDsKKyAgdHlwZWRlZiBzaWduZWQgbG9uZyAgICBGVF9Mb25nOworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEZUX1VMb25nOworICB0eXBlZGVmIHNpZ25lZCBsb25nICAgIEZUX0YyNkRvdDY7CisgIHR5cGVkZWYgaW50ICAgICAgICAgICAgRlRfRXJyb3I7CisKKyNkZWZpbmUgRlRfTUFLRV9UQUcoIF94MSwgX3gyLCBfeDMsIF94NCApIFwKKyAgICAgICAgICAoICggKEZUX1VMb25nKV94MSA8PCAyNCApIHwgICAgIFwKKyAgICAgICAgICAgICggKEZUX1VMb25nKV94MiA8PCAxNiApIHwgICAgIFwKKyAgICAgICAgICAgICggKEZUX1VMb25nKV94MyA8PCAgOCApIHwgICAgIFwKKyAgICAgICAgICAgICAgKEZUX1VMb25nKV94NCAgICAgICAgICkKKworCisgIC8qIGZyb20gaW5jbHVkZS9mcmVldHlwZTIvZnRzeXN0ZW0uaCAqLworCisgIHR5cGVkZWYgc3RydWN0IEZUX01lbW9yeVJlY18qICBGVF9NZW1vcnk7CisKKyAgdHlwZWRlZiB2b2lkKiAoKkZUX0FsbG9jX0Z1bmMpKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKTsKKworICB0eXBlZGVmIHZvaWQgKCpGVF9GcmVlX0Z1bmMpKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICBibG9jayApOworCisgIHR5cGVkZWYgdm9pZCogKCpGVF9SZWFsbG9jX0Z1bmMpKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgY3VyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIG5ld19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICBibG9jayApOworCisgIHR5cGVkZWYgc3RydWN0IEZUX01lbW9yeVJlY18KKyAgeworICAgIHZvaWQqICAgICAgICAgICAgdXNlcjsKKworICAgIEZUX0FsbG9jX0Z1bmMgICAgYWxsb2M7CisgICAgRlRfRnJlZV9GdW5jICAgICBmcmVlOworICAgIEZUX1JlYWxsb2NfRnVuYyAgcmVhbGxvYzsKKworICB9IEZUX01lbW9yeVJlYzsKKworCisgIC8qIGZyb20gc3JjL2Z0Y2FsYy5jICovCisKKyNpZiAoIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX1dJTjY0ICkKKworICB0eXBlZGVmIF9faW50NjQgIEZUX0ludDY0OworCisjZWxzZQorCisjaW5jbHVkZSAiaW50dHlwZXMuaCIKKworICB0eXBlZGVmIGludDY0X3QgIEZUX0ludDY0OworCisjZW5kaWYKKworCisgIHN0YXRpYyBGVF9Mb25nCisgIEZUX011bERpdiggRlRfTG9uZyAgYSwKKyAgICAgICAgICAgICBGVF9Mb25nICBiLAorICAgICAgICAgICAgIEZUX0xvbmcgIGMgKQorICB7CisgICAgRlRfSW50ICAgczsKKyAgICBGVF9Mb25nICBkOworCisKKyAgICBzID0gMTsKKyAgICBpZiAoIGEgPCAwICkgeyBhID0gLWE7IHMgPSAtMTsgfQorICAgIGlmICggYiA8IDAgKSB7IGIgPSAtYjsgcyA9IC1zOyB9CisgICAgaWYgKCBjIDwgMCApIHsgYyA9IC1jOyBzID0gLXM7IH0KKworICAgIGQgPSAoRlRfTG9uZykoIGMgPiAwID8gKCAoRlRfSW50NjQpYSAqIGIgKyAoIGMgPj4gMSApICkgLyBjCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDdGRkZGRkZGTCApOworCisgICAgcmV0dXJuICggcyA+IDAgKSA/IGQgOiAtZDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0xvbmcKKyAgRlRfTXVsRGl2X05vX1JvdW5kKCBGVF9Mb25nICBhLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYyApCisgIHsKKyAgICBGVF9JbnQgICBzOworICAgIEZUX0xvbmcgIGQ7CisKKworICAgIHMgPSAxOworICAgIGlmICggYSA8IDAgKSB7IGEgPSAtYTsgcyA9IC0xOyB9CisgICAgaWYgKCBiIDwgMCApIHsgYiA9IC1iOyBzID0gLXM7IH0KKyAgICBpZiAoIGMgPCAwICkgeyBjID0gLWM7IHMgPSAtczsgfQorCisgICAgZCA9IChGVF9Mb25nKSggYyA+IDAgPyAoRlRfSW50NjQpYSAqIGIgLyBjCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDdGRkZGRkZGTCApOworCisgICAgcmV0dXJuICggcyA+IDAgKSA/IGQgOiAtZDsKKyAgfQorCisjZW5kaWYgLyogX19GVE1JU0NfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWFiMTQzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpAQCAtMCwwICsxLDMyMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0cmFzdGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGZpbGUgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHJlc3Qgb2YgdGhlIEZyZWVUeXBlIGVuZ2luZSwgYnkgKi8KKyAgLyogZGVmaW5pbmcgdGhlIF9TVEFOREFMT05FXyBtYWNybyB3aGVuIGNvbXBpbGluZyBpdC4gIFlvdSBhbHNvIG5lZWQgdG8gICovCisgIC8qIHB1dCB0aGUgZmlsZXMgYGZ0aW1hZ2UuaCcgYW5kIGBmdG1pc2MuaCcgaW50byB0aGUgJChpbmNkaXIpICAgICAgICAgICAqLworICAvKiBkaXJlY3RvcnkuICBUeXBpY2FsbHksIHlvdSBzaG91bGQgZG8gc29tZXRoaW5nIGxpa2UgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gY29weSBgc3JjL3Jhc3Rlci9mdHJhc3Rlci5jJyAodGhpcyBmaWxlKSB0byB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBjb3B5IGBpbmNsdWRlL2Z0aW1hZ2UuaCcgYW5kIGBzcmMvcmFzdGVyL2Z0bWlzYy5oJyB0byB5b3VyIGN1cnJlbnQgICovCisgIC8qICAgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBjb21waWxlIGBmdHJhc3Rlcicgd2l0aCB0aGUgX1NUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY2MgLWMgLURfU1RBTkRBTE9ORV8gZnRyYXN0ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSByZW5kZXJlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgZnRfc3RhbmRhcmRfcmFzdGVyLnJhc3Rlcl9uZXcnOyBhIGJpdG1hcCBjYW4gYmUgZ2VuZXJhdGVkICAgICAgICAgICAgKi8KKyAgLyogd2l0aCBhIGNhbGwgdG8gYGZ0X3N0YW5kYXJkX3Jhc3Rlci5yYXN0ZXJfcmVuZGVyJy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTZWUgdGhlIGNvbW1lbnRzIGFuZCBkb2N1bWVudGF0aW9uIGluIHRoZSBmaWxlIGBmdGltYWdlLmgnIGZvciBtb3JlICAgKi8KKyAgLyogZGV0YWlscyBvbiBob3cgdGhlIHJhc3RlciB3b3Jrcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBpcyBhIHJld3JpdGUgb2YgdGhlIEZyZWVUeXBlIDEueCBzY2FuLWxpbmUgY29udmVydGVyICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9TVEFOREFMT05FXworCisgIC8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbCB1c2VkIGJ5IHRoZSBzY2FuLWxpbmUgY29udmVydGVyICAqLworICAvKiB0byBkbyBhbGwgb2YgaXRzIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfUkVOREVSX1BPT0xfU0laRSAgMTYzODRMCisKKyNkZWZpbmUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSCAgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAvKiBmb3IgbWVtc2V0ICovCisKKyNpbmNsdWRlICJmdG1pc2MuaCIKKyNpbmNsdWRlICJmdGltYWdlLmgiCisKKyNlbHNlIC8qICFfU1RBTkRBTE9ORV8gKi8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiZnRyYXN0ZXIuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSCAgIC8qIGZvciBGVF9NdWxEaXYgYW5kIEZUX011bERpdl9Ob19Sb3VuZCAqLworCisjaW5jbHVkZSAicmFzdHBpYy5oIgorCisjZW5kaWYgLyogIV9TVEFOREFMT05FXyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIHNpbXBsZSB0ZWNobmljYWwgbm90ZSBvbiBob3cgdGhlIHJhc3RlciB3b3JrcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIENvbnZlcnRpbmcgYW4gb3V0bGluZSBpbnRvIGEgYml0bWFwIGlzIGFjaGlldmVkIGluIHNldmVyYWwgc3RlcHM6ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgMSAtIERlY29tcG9zaW5nIHRoZSBvdXRsaW5lIGludG8gc3VjY2Vzc2l2ZSBgcHJvZmlsZXMnLiAgRWFjaCAgICAgICAqLworICAvKiAgICAgICBwcm9maWxlIGlzIHNpbXBseSBhbiBhcnJheSBvZiBzY2FubGluZSBpbnRlcnNlY3Rpb25zIG9uIGEgZ2l2ZW4gKi8KKyAgLyogICAgICAgZGltZW5zaW9uLiAgQSBwcm9maWxlJ3MgbWFpbiBhdHRyaWJ1dGVzIGFyZSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBvIGl0cyBzY2FubGluZSBwb3NpdGlvbiBib3VuZGFyaWVzLCBpLmUuIGBZbWluJyBhbmQgYFltYXgnICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIG8gYW4gYXJyYXkgb2YgaW50ZXJzZWN0aW9uIGNvb3JkaW5hdGVzIGZvciBlYWNoIHNjYW5saW5lICAgICAgICAqLworICAvKiAgICAgICAgIGJldHdlZW4gYFltaW4nIGFuZCBgWW1heCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIG8gYSBkaXJlY3Rpb24sIGluZGljYXRpbmcgd2hldGhlciBpdCB3YXMgYnVpbHQgZ29pbmcgYHVwJyBvciAgICAqLworICAvKiAgICAgICAgIGBkb3duJywgYXMgdGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgZmlsbGluZyBydWxlcyAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIG8gaXRzIGRyb3Atb3V0IG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAyIC0gU3dlZXBpbmcgdGhlIHRhcmdldCBtYXAncyBzY2FubGluZXMgaW4gb3JkZXIgdG8gY29tcHV0ZSBzZWdtZW50ICovCisgIC8qICAgICAgIGBzcGFucycgd2hpY2ggYXJlIHRoZW4gZmlsbGVkLiAgQWRkaXRpb25hbGx5LCB0aGlzIHBhc3MgICAgICAgICAqLworICAvKiAgICAgICBwZXJmb3JtcyBkcm9wLW91dCBjb250cm9sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIG91dGxpbmUgZGF0YSBpcyBwYXJzZWQgZHVyaW5nIHN0ZXAgMSBvbmx5LiAgVGhlIHByb2ZpbGVzIGFyZSAgICAqLworICAvKiAgIGJ1aWx0IGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgcmVuZGVyIHBvb2wsIHVzZWQgYXMgYSBzdGFjay4gIFRoZSAgICAgKi8KKyAgLyogICBmb2xsb3dpbmcgZ3JhcGhpY3Mgc2hvd3MgdGhlIHByb2ZpbGUgbGlzdCB1bmRlciBjb25zdHJ1Y3Rpb246ICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBfIF8gICAgKi8KKyAgLyogICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICovCisgIC8qICAgIHwgcHJvZmlsZSB8IGNvb3JkaW5hdGVzIGZvciB8IHByb2ZpbGUgfCBjb29yZGluYXRlcyBmb3IgfC0tPiAgICAgICAqLworICAvKiAgICB8ICAgIDEgICAgfCAgcHJvZmlsZSAxICAgICAgfCAgICAyICAgIHwgIHByb2ZpbGUgMiAgICAgIHwtLT4gICAgICAgKi8KKyAgLyogICAgfF9fX19fX19fX3xfX19fX19fX19fX19fX19fX3xfX19fX19fX198X19fX19fX19fX19fX19fX198X18gXyBfICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgKi8KKyAgLyogICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICovCisgIC8qIHN0YXJ0IG9mIHJlbmRlciBwb29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGUgdG9wIG9mIHRoZSBwcm9maWxlIHN0YWNrIGlzIGtlcHQgaW4gdGhlIGB0b3AnIHZhcmlhYmxlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFzIHlvdSBjYW4gc2VlLCBhIHByb2ZpbGUgcmVjb3JkIGlzIHB1c2hlZCBvbiB0b3Agb2YgdGhlIHJlbmRlciAgICAgKi8KKyAgLyogICBwb29sLCB3aGljaCBpcyB0aGVuIGZvbGxvd2VkIGJ5IGl0cyBjb29yZGluYXRlcy9pbnRlcnNlY3Rpb25zLiAgSWYgICovCisgIC8qICAgYSBjaGFuZ2Ugb2YgZGlyZWN0aW9uIGlzIGRldGVjdGVkIGluIHRoZSBvdXRsaW5lLCBhIG5ldyBwcm9maWxlIGlzICAqLworICAvKiAgIGdlbmVyYXRlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTm90ZSB0aGF0IHdoZW4gYWxsIHByb2ZpbGVzIGhhdmUgYmVlbiBnZW5lcmF0ZWQsIHRoZSBmdW5jdGlvbiAgICAgICAqLworICAvKiAgIEZpbmFsaXplX1Byb2ZpbGVfVGFibGUoKSBpcyB1c2VkIHRvIHJlY29yZCwgZm9yIGVhY2ggcHJvZmlsZSwgaXRzICAgKi8KKyAgLyogICBib3R0b20tbW9zdCBzY2FubGluZSBhcyB3ZWxsIGFzIHRoZSBzY2FubGluZSBhYm92ZSBpdHMgdXBtb3N0ICAgICAgICovCisgIC8qICAgYm91bmRhcnkuICBUaGVzZSBwb3NpdGlvbnMgYXJlIGNhbGxlZCBgeS10dXJucycgYmVjYXVzZSB0aGV5IChzb3J0ICAqLworICAvKiAgIG9mKSBjb3JyZXNwb25kIHRvIGxvY2FsIGV4dHJlbWEuICBUaGV5IGFyZSBzdG9yZWQgaW4gYSBzb3J0ZWQgbGlzdCAgKi8KKyAgLyogICBidWlsdCBmcm9tIHRoZSB0b3Agb2YgdGhlIHJlbmRlciBwb29sIGFzIGEgZG93bndhcmRzIHN0YWNrOiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIF8gXyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIDwtLXwgc29ydGVkIGxpc3Qgb2YgICAgIHwgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICA8LS18ICBleHRyZW1hIHNjYW5saW5lcyB8ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBfIF8gX19fX19fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJ1ZmYgICAgICAgICAgIHNpemVCdWZmID0gZW5kIG9mIHBvb2wgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIGxpc3QgaXMgbGF0ZXIgdXNlZCBkdXJpbmcgdGhlIHN3ZWVwIHBoYXNlIGluIG9yZGVyIHRvICAgICAgICAgICovCisgIC8qICAgb3B0aW1pemUgcGVyZm9ybWFuY2UgKHNlZSB0ZWNobmljYWwgbm90ZSBvbiB0aGUgc3dlZXAgYmVsb3cpLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBPZiBjb3Vyc2UsIHRoZSByYXN0ZXIgZGV0ZWN0cyB3aGV0aGVyIHRoZSB0d28gc3RhY2tzIGNvbGxpZGUgYW5kICAgICovCisgIC8qICAgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHByb3Blcmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworICAvKiogIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKyAgLyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKiBkZWZpbmUgREVCVUdfUkFTVEVSIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgYSBkZWJ1Z2dpbmcgdmVyc2lvbiAqLworLyogI2RlZmluZSBERUJVR19SQVNURVIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIC8qKiAgT1RIRVIgTUFDUk9TIChkbyBub3QgY2hhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworICAvKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Jhc3RlcgorCisKKyNpZmRlZiBfU1RBTkRBTE9ORV8KKworICAvKiBBdXhpbGlhcnkgbWFjcm9zIGZvciB0b2tlbiBjb25jYXRlbmF0aW9uLiAqLworI2RlZmluZSBGVF9FUlJfWENBVCggeCwgeSApICB4ICMjIHkKKyNkZWZpbmUgRlRfRVJSX0NBVCggeCwgeSApICAgRlRfRVJSX1hDQVQoIHgsIHkgKQorCisjZGVmaW5lIEZUX01BWCggYSwgYiApICAoIChhKSA+IChiKSA/IChhKSA6IChiKSApCisKKyAgLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgaXMgdW51c2VkLiAqLworICAvKiBJdHMgcHVycG9zZSBpcyBzaW1wbHkgdG8gcmVkdWNlIGNvbXBpbGVyIHdhcm5pbmdzLiAgTm90ZSBhbHNvIHRoYXQgICovCisgIC8qIHNpbXBseSBkZWZpbmluZyBpdCBhcyBgKHZvaWQpeCcgZG9lc24ndCBhdm9pZCB3YXJuaW5ncyB3aXRoIGNlcnRhaW4gKi8KKyAgLyogQU5TSSBjb21waWxlcnMgKGUuZy4gTENDKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9VTlVTRUQoIHggKSAgKHgpID0gKHgpCisKKyAgLyogRGlzYWJsZSB0aGUgdHJhY2luZyBtZWNoYW5pc20gZm9yIHNpbXBsaWNpdHkgLS0gZGV2ZWxvcGVycyBjYW4gICAgICAqLworICAvKiBhY3RpdmF0ZSBpdCBlYXNpbHkgYnkgcmVkZWZpbmluZyB0aGVzZSBtYWNyb3MuICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIEZUX0VSUk9SCisjZGVmaW5lIEZUX0VSUk9SKCB4ICkgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZm5kZWYgRlRfVFJBQ0UKKyNkZWZpbmUgRlRfVFJBQ0UoIHggKSAgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAvKiBub3RoaW5nICovCisjZGVmaW5lIEZUX1RSQUNFMSggeCApICBkbyB7IH0gd2hpbGUgKCAwICkgICAgLyogbm90aGluZyAqLworI2RlZmluZSBGVF9UUkFDRTYoIHggKSAgZG8geyB9IHdoaWxlICggMCApICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgRlRfVFJBQ0U3KCB4ICkgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAvKiBub3RoaW5nICovCisjZW5kaWYKKworI2lmbmRlZiBGVF9USFJPVworI2RlZmluZSBGVF9USFJPVyggZSApICBGVF9FUlJfQ0FUKCBSYXN0ZXJfRXJyXywgZSApCisjZW5kaWYKKworI2RlZmluZSBSYXN0ZXJfRXJyX05vbmUgICAgICAgICAgMAorI2RlZmluZSBSYXN0ZXJfRXJyX05vdF9JbmkgICAgICAtMQorI2RlZmluZSBSYXN0ZXJfRXJyX092ZXJmbG93ICAgICAtMgorI2RlZmluZSBSYXN0ZXJfRXJyX05lZ19IZWlnaHQgICAtMworI2RlZmluZSBSYXN0ZXJfRXJyX0ludmFsaWQgICAgICAtNAorI2RlZmluZSBSYXN0ZXJfRXJyX1Vuc3VwcG9ydGVkICAtNQorCisjZGVmaW5lIGZ0X21lbXNldCAgbWVtc2V0CisKKyNkZWZpbmUgRlRfREVGSU5FX1JBU1RFUl9GVU5DUyggY2xhc3NfLCBnbHlwaF9mb3JtYXRfLCByYXN0ZXJfbmV3XywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXN0ZXJfcmVzZXRfLCByYXN0ZXJfc2V0X21vZGVfLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcl9yZW5kZXJfLCByYXN0ZXJfZG9uZV8gKSAgICAgIFwKKyAgICAgICAgICBjb25zdCBGVF9SYXN0ZXJfRnVuY3MgY2xhc3NfID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnbHlwaF9mb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJhc3Rlcl9uZXdfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmFzdGVyX3Jlc2V0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfc2V0X21vZGVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJhc3Rlcl9yZW5kZXJfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmFzdGVyX2RvbmVfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB9OworCisjZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisKKworI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19IICAgICAgIC8qIGZvciBGVF9UUkFDRSwgRlRfRVJST1IsIGFuZCBGVF9USFJPVyAqLworCisjaW5jbHVkZSAicmFzdGVycnMuaCIKKworI2RlZmluZSBSYXN0ZXJfRXJyX05vbmUgICAgICAgICBGVF9FcnJfT2sKKyNkZWZpbmUgUmFzdGVyX0Vycl9Ob3RfSW5pICAgICAgUmFzdGVyX0Vycl9SYXN0ZXJfVW5pbml0aWFsaXplZAorI2RlZmluZSBSYXN0ZXJfRXJyX092ZXJmbG93ICAgICBSYXN0ZXJfRXJyX1Jhc3Rlcl9PdmVyZmxvdworI2RlZmluZSBSYXN0ZXJfRXJyX05lZ19IZWlnaHQgICBSYXN0ZXJfRXJyX1Jhc3Rlcl9OZWdhdGl2ZV9IZWlnaHQKKyNkZWZpbmUgUmFzdGVyX0Vycl9JbnZhbGlkICAgICAgUmFzdGVyX0Vycl9JbnZhbGlkX091dGxpbmUKKyNkZWZpbmUgUmFzdGVyX0Vycl9VbnN1cHBvcnRlZCAgUmFzdGVyX0Vycl9DYW5ub3RfUmVuZGVyX0dseXBoCisKKworI2VuZGlmIC8qICFfU1RBTkRBTE9ORV8gKi8KKworCisjaWZuZGVmIEZUX01FTV9TRVQKKyNkZWZpbmUgRlRfTUVNX1NFVCggZCwgcywgYyApICBmdF9tZW1zZXQoIGQsIHMsIGMgKQorI2VuZGlmCisKKyNpZm5kZWYgRlRfTUVNX1pFUk8KKyNkZWZpbmUgRlRfTUVNX1pFUk8oIGRlc3QsIGNvdW50ICkgIEZUX01FTV9TRVQoIGRlc3QsIDAsIGNvdW50ICkKKyNlbmRpZgorCisgIC8qIEZNdWxEaXYgbWVhbnMgYEZhc3QgTXVsRGl2JzsgaXQgaXMgdXNlZCBpbiBjYXNlIHdoZXJlIGBiJyBpcyAgICAgICAqLworICAvKiB0eXBpY2FsbHkgYSBzbWFsbCB2YWx1ZSBhbmQgdGhlIHJlc3VsdCBvZiBhKmIgaXMga25vd24gdG8gZml0IGludG8gKi8KKyAgLyogMzIgYml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNdWxEaXYoIGEsIGIsIGMgKSAgKCAoYSkgKiAoYikgLyAoYykgKQorCisgIC8qIE9uIHRoZSBvdGhlciBoYW5kLCBTTXVsRGl2IG1lYW5zIGBTbG93IE11bERpdicsIGFuZCBpcyB1c2VkIHR5cGljYWxseSAqLworICAvKiBmb3IgY2xpcHBpbmcgY29tcHV0YXRpb25zLiAgSXQgc2ltcGx5IHVzZXMgdGhlIEZUX011bERpdigpIGZ1bmN0aW9uICAgKi8KKyAgLyogZGVmaW5lZCBpbiBgZnRjYWxjLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNNdWxEaXYgICAgICAgICAgIEZUX011bERpdgorI2RlZmluZSBTTXVsRGl2X05vX1JvdW5kICBGVF9NdWxEaXZfTm9fUm91bmQKKworICAvKiBUaGUgcmFzdGVyaXplciBpcyBhIHZlcnkgZ2VuZXJhbCBwdXJwb3NlIGNvbXBvbmVudDsgcGxlYXNlIGxlYXZlICovCisgIC8qIHRoZSBmb2xsb3dpbmcgcmVkZWZpbml0aW9ucyB0aGVyZSAoeW91IG5ldmVyIGtub3cgeW91ciB0YXJnZXQgICAgKi8KKyAgLyogZW52aXJvbm1lbnQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgIDEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZW5kaWYKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgICh2b2lkKikwCisjZW5kaWYKKworI2lmbmRlZiBTVUNDRVNTCisjZGVmaW5lIFNVQ0NFU1MgIDAKKyNlbmRpZgorCisjaWZuZGVmIEZBSUxVUkUKKyNkZWZpbmUgRkFJTFVSRSAgMQorI2VuZGlmCisKKworI2RlZmluZSBNYXhCZXppZXIgIDMyICAgLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YWNrZWQgQmV6aWVyIGN1cnZlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldHRpbmcgdGhpcyBjb25zdGFudCB0byBtb3JlIHRoYW4gMzIgaXMgYSAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwdXJlIHdhc3RlIG9mIHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIFBpeGVsX0JpdHMgIDYgICAvKiBmcmFjdGlvbmFsIGJpdHMgb2YgKmlucHV0KiBjb29yZGluYXRlcyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKyAgLyoqICBTSU1QTEUgVFlQRSBERUNMQVJBVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgdHlwZWRlZiBpbnQgICAgICAgICAgICAgSW50OworICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICBVSW50OworICB0eXBlZGVmIHNob3J0ICAgICAgICAgICBTaG9ydDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgVVNob3J0LCAqUFVTaG9ydDsKKyAgdHlwZWRlZiBsb25nICAgICAgICAgICAgTG9uZywgKlBMb25nOworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBVTG9uZzsKKworICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBCeXRlLCAqUEJ5dGU7CisgIHR5cGVkZWYgY2hhciAgICAgICAgICAgIEJvb2w7CisKKworICB0eXBlZGVmIHVuaW9uICBBbGlnbm1lbnRfCisgIHsKKyAgICBMb25nICAgIGw7CisgICAgdm9pZCogICBwOworICAgIHZvaWQgICgqZikodm9pZCk7CisKKyAgfSBBbGlnbm1lbnQsICpQQWxpZ25tZW50OworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRQb2ludF8KKyAgeworICAgIExvbmcgIHg7CisgICAgTG9uZyAgeTsKKworICB9IFRQb2ludDsKKworCisgIC8qIHZhbHVlcyBmb3IgdGhlIGBmbGFncycgYml0IGZpZWxkICovCisjZGVmaW5lIEZsb3dfVXAgICAgICAgICAgIDB4MDhVCisjZGVmaW5lIE92ZXJzaG9vdF9Ub3AgICAgIDB4MTBVCisjZGVmaW5lIE92ZXJzaG9vdF9Cb3R0b20gIDB4MjBVCisKKworICAvKiBTdGF0ZXMgb2YgZWFjaCBsaW5lLCBhcmMsIGFuZCBwcm9maWxlICovCisgIHR5cGVkZWYgZW51bSAgVFN0YXRlc18KKyAgeworICAgIFVua25vd25fU3RhdGUsCisgICAgQXNjZW5kaW5nX1N0YXRlLAorICAgIERlc2NlbmRpbmdfU3RhdGUsCisgICAgRmxhdF9TdGF0ZQorCisgIH0gVFN0YXRlczsKKworCisgIHR5cGVkZWYgc3RydWN0IFRQcm9maWxlXyAgVFByb2ZpbGU7CisgIHR5cGVkZWYgVFByb2ZpbGUqICAgICAgICAgUFByb2ZpbGU7CisKKyAgc3RydWN0ICBUUHJvZmlsZV8KKyAgeworICAgIEZUX0YyNkRvdDYgIFg7ICAgICAgICAgICAvKiBjdXJyZW50IGNvb3JkaW5hdGUgZHVyaW5nIHN3ZWVwICAgICAgICAgICovCisgICAgUFByb2ZpbGUgICAgbGluazsgICAgICAgIC8qIGxpbmsgdG8gbmV4dCBwcm9maWxlICh2YXJpb3VzIHB1cnBvc2VzKSAgKi8KKyAgICBQTG9uZyAgICAgICBvZmZzZXQ7ICAgICAgLyogc3RhcnQgb2YgcHJvZmlsZSdzIGRhdGEgaW4gcmVuZGVyIHBvb2wgICAqLworICAgIFVTaG9ydCAgICAgIGZsYWdzOyAgICAgICAvKiBCaXQgMC0yOiBkcm9wLW91dCBtb2RlICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpdCAzOiBwcm9maWxlIG9yaWVudGF0aW9uICh1cC9kb3duKSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQml0IDQ6IGlzIHRvcCBwcm9maWxlPyAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCaXQgNTogaXMgYm90dG9tIHByb2ZpbGU/ICAgICAgICAgICAgICAgICovCisgICAgTG9uZyAgICAgICAgaGVpZ2h0OyAgICAgIC8qIHByb2ZpbGUncyBoZWlnaHQgaW4gc2NhbmxpbmVzICAgICAgICAgICAgKi8KKyAgICBMb25nICAgICAgICBzdGFydDsgICAgICAgLyogcHJvZmlsZSdzIHN0YXJ0aW5nIHNjYW5saW5lICAgICAgICAgICAgICAqLworCisgICAgSW50ICAgICAgICAgY291bnRMOyAgICAgIC8qIG51bWJlciBvZiBsaW5lcyB0byBzdGVwIGJlZm9yZSB0aGlzICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZmlsZSBiZWNvbWVzIGRyYXdhYmxlICAgICAgICAgICAgICAgICAqLworCisgICAgUFByb2ZpbGUgICAgbmV4dDsgICAgICAgIC8qIG5leHQgcHJvZmlsZSBpbiBzYW1lIGNvbnRvdXIsIHVzZWQgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHVyaW5nIGRyb3Atb3V0IGNvbnRyb2wgICAgICAgICAgICAgICAgICAqLworICB9OworCisgIHR5cGVkZWYgUFByb2ZpbGUgICBUUHJvZmlsZUxpc3Q7CisgIHR5cGVkZWYgUFByb2ZpbGUqICBQUHJvZmlsZUxpc3Q7CisKKworICAvKiBTaW1wbGUgcmVjb3JkIHVzZWQgdG8gaW1wbGVtZW50IGEgc3RhY2sgb2YgYmFuZHMsIHJlcXVpcmVkICovCisgIC8qIGJ5IHRoZSBzdWItYmFuZGluZyBtZWNoYW5pc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIGJsYWNrX1RCYW5kXworICB7CisgICAgU2hvcnQgIHlfbWluOyAgIC8qIGJhbmQncyBtaW5pbXVtICovCisgICAgU2hvcnQgIHlfbWF4OyAgIC8qIGJhbmQncyBtYXhpbXVtICovCisKKyAgfSBibGFja19UQmFuZDsKKworCisjZGVmaW5lIEFsaWduUHJvZmlsZVNpemUgXAorICAoICggc2l6ZW9mICggVFByb2ZpbGUgKSArIHNpemVvZiAoIEFsaWdubWVudCApIC0gMSApIC8gc2l6ZW9mICggTG9uZyApICkKKworCisjdW5kZWYgUkFTX0FSRworI3VuZGVmIFJBU19BUkdTCisjdW5kZWYgUkFTX1ZBUgorI3VuZGVmIFJBU19WQVJTCisKKyNpZmRlZiBGVF9TVEFUSUNfUkFTVEVSCisKKworI2RlZmluZSBSQVNfQVJHUyAgICAgICAvKiB2b2lkICovCisjZGVmaW5lIFJBU19BUkcgICAgICAgIC8qIHZvaWQgKi8KKworI2RlZmluZSBSQVNfVkFSUyAgICAgICAvKiB2b2lkICovCisjZGVmaW5lIFJBU19WQVIgICAgICAgIC8qIHZvaWQgKi8KKworI2RlZmluZSBGVF9VTlVTRURfUkFTVEVSICBkbyB7IH0gd2hpbGUgKCAwICkKKworCisjZWxzZSAvKiAhRlRfU1RBVElDX1JBU1RFUiAqLworCisKKyNkZWZpbmUgUkFTX0FSR1MgICAgICAgYmxhY2tfUFdvcmtlciAgd29ya2VyLAorI2RlZmluZSBSQVNfQVJHICAgICAgICBibGFja19QV29ya2VyICB3b3JrZXIKKworI2RlZmluZSBSQVNfVkFSUyAgICAgICB3b3JrZXIsCisjZGVmaW5lIFJBU19WQVIgICAgICAgIHdvcmtlcgorCisjZGVmaW5lIEZUX1VOVVNFRF9SQVNURVIgIEZUX1VOVVNFRCggd29ya2VyICkKKworCisjZW5kaWYgLyogIUZUX1NUQVRJQ19SQVNURVIgKi8KKworCisgIHR5cGVkZWYgc3RydWN0IGJsYWNrX1RXb3JrZXJfICBibGFja19UV29ya2VyLCAqYmxhY2tfUFdvcmtlcjsKKworCisgIC8qIHByb3RvdHlwZXMgdXNlZCBmb3Igc3dlZXAgZnVuY3Rpb24gZGlzcGF0Y2ggKi8KKyAgdHlwZWRlZiB2b2lkCisgIEZ1bmN0aW9uX1N3ZWVwX0luaXQoIFJBU19BUkdTIFNob3J0KiAgbWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG9ydCogIG1heCApOworCisgIHR5cGVkZWYgdm9pZAorICBGdW5jdGlvbl9Td2VlcF9TcGFuKCBSQVNfQVJHUyBTaG9ydCAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIHJpZ2h0ICk7CisKKyAgdHlwZWRlZiB2b2lkCisgIEZ1bmN0aW9uX1N3ZWVwX1N0ZXAoIFJBU19BUkcgKTsKKworCisgIC8qIE5PVEU6IFRoZXNlIG9wZXJhdGlvbnMgYXJlIG9ubHkgdmFsaWQgb24gMidzIGNvbXBsZW1lbnQgcHJvY2Vzc29ycyAqLworI3VuZGVmIEZMT09SCisjdW5kZWYgQ0VJTElORworI3VuZGVmIFRSVU5DCisjdW5kZWYgU0NBTEVECisKKyNkZWZpbmUgRkxPT1IoIHggKSAgICAoICh4KSAmIC1yYXMucHJlY2lzaW9uICkKKyNkZWZpbmUgQ0VJTElORyggeCApICAoICggKHgpICsgcmFzLnByZWNpc2lvbiAtIDEgKSAmIC1yYXMucHJlY2lzaW9uICkKKyNkZWZpbmUgVFJVTkMoIHggKSAgICAoIChMb25nKSh4KSA+PiByYXMucHJlY2lzaW9uX2JpdHMgKQorI2RlZmluZSBGUkFDKCB4ICkgICAgICggKHgpICYgKCByYXMucHJlY2lzaW9uIC0gMSApICkKKyNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICggKExvbmcpKHgpIDw8IHJhcy5zY2FsZV9zaGlmdCApIC0gcmFzLnByZWNpc2lvbl9oYWxmICkKKworI2RlZmluZSBJU19CT1RUT01fT1ZFUlNIT09UKCB4ICkgXAorICAgICAgICAgIChCb29sKSggQ0VJTElORyggeCApIC0geCA+PSByYXMucHJlY2lzaW9uX2hhbGYgKQorI2RlZmluZSBJU19UT1BfT1ZFUlNIT09UKCB4ICkgICAgXAorICAgICAgICAgIChCb29sKSggeCAtIEZMT09SKCB4ICkgPj0gcmFzLnByZWNpc2lvbl9oYWxmICkKKworICAvKiBUaGUgbW9zdCB1c2VkIHZhcmlhYmxlcyBhcmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSBzdHJ1Y3R1cmUuICovCisgIC8qIFRodXMsIHRoZWlyIG9mZnNldCBjYW4gYmUgY29kZWQgd2l0aCBsZXNzIG9wY29kZXMsIHJlc3VsdGluZyBpbiBhICAgKi8KKyAgLyogc21hbGxlciBleGVjdXRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0cnVjdCAgYmxhY2tfVFdvcmtlcl8KKyAgeworICAgIEludCAgICAgICAgIHByZWNpc2lvbl9iaXRzOyAgICAgLyogcHJlY2lzaW9uIHJlbGF0ZWQgdmFyaWFibGVzICAgICAgICAgKi8KKyAgICBJbnQgICAgICAgICBwcmVjaXNpb247CisgICAgSW50ICAgICAgICAgcHJlY2lzaW9uX2hhbGY7CisgICAgSW50ICAgICAgICAgcHJlY2lzaW9uX3NoaWZ0OworICAgIEludCAgICAgICAgIHByZWNpc2lvbl9zdGVwOworICAgIEludCAgICAgICAgIHByZWNpc2lvbl9qaXR0ZXI7CisKKyAgICBJbnQgICAgICAgICBzY2FsZV9zaGlmdDsgICAgICAgIC8qID09IHByZWNpc2lvbl9zaGlmdCAgIGZvciBiaXRtYXBzICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA9PSBwcmVjaXNpb25fc2hpZnQrMSBmb3IgcGl4bWFwcyAgICAqLworCisgICAgUExvbmcgICAgICAgYnVmZjsgICAgICAgICAgICAgICAvKiBUaGUgcHJvZmlsZXMgYnVmZmVyICAgICAgICAgICAgICAgICAqLworICAgIFBMb25nICAgICAgIHNpemVCdWZmOyAgICAgICAgICAgLyogUmVuZGVyIHBvb2wgc2l6ZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBQTG9uZyAgICAgICBtYXhCdWZmOyAgICAgICAgICAgIC8qIFByb2ZpbGVzIGJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICovCisgICAgUExvbmcgICAgICAgdG9wOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGN1cnNvciBpbiBidWZmZXIgICAgICAgICAgICAqLworCisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKyAgICBJbnQgICAgICAgICBudW1UdXJuczsgICAgICAgICAgIC8qIG51bWJlciBvZiBZLXR1cm5zIGluIG91dGxpbmUgICAgICAgICovCisKKyAgICBUUG9pbnQqICAgICBhcmM7ICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgQmV6aWVyIGFyYyBwb2ludGVyICAgICAgICAgICovCisKKyAgICBVU2hvcnQgICAgICBiV2lkdGg7ICAgICAgICAgICAgIC8qIHRhcmdldCBiaXRtYXAgd2lkdGggICAgICAgICAgICAgICAgICovCisgICAgUEJ5dGUgICAgICAgYlRhcmdldDsgICAgICAgICAgICAvKiB0YXJnZXQgYml0bWFwIGJ1ZmZlciAgICAgICAgICAgICAgICAqLworICAgIFBCeXRlICAgICAgIGdUYXJnZXQ7ICAgICAgICAgICAgLyogdGFyZ2V0IHBpeG1hcCBidWZmZXIgICAgICAgICAgICAgICAgKi8KKworICAgIExvbmcgICAgICAgIGxhc3RYLCBsYXN0WTsKKyAgICBMb25nICAgICAgICBtaW5ZLCBtYXhZOworCisgICAgVVNob3J0ICAgICAgbnVtX1Byb2ZzOyAgICAgICAgICAvKiBjdXJyZW50IG51bWJlciBvZiBwcm9maWxlcyAgICAgICAgICAqLworCisgICAgQm9vbCAgICAgICAgZnJlc2g7ICAgICAgICAgICAgICAvKiBzaWduYWxzIGEgZnJlc2ggbmV3IHByb2ZpbGUgd2hpY2ggICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYHN0YXJ0JyBmaWVsZCBtdXN0IGJlIGNvbXBsZXRlZCAgICAgKi8KKyAgICBCb29sICAgICAgICBqb2ludDsgICAgICAgICAgICAgIC8qIHNpZ25hbHMgdGhhdCB0aGUgbGFzdCBhcmMgZW5kZWQgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGFjdGx5IG9uIGEgc2NhbmxpbmUuICBBbGxvd3MgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVtb3ZhbCBvZiBkb3VibGV0cyAgICAgICAgICAgICAgICAgKi8KKyAgICBQUHJvZmlsZSAgICBjUHJvZmlsZTsgICAgICAgICAgIC8qIGN1cnJlbnQgcHJvZmlsZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgUFByb2ZpbGUgICAgZlByb2ZpbGU7ICAgICAgICAgICAvKiBoZWFkIG9mIGxpbmtlZCBsaXN0IG9mIHByb2ZpbGVzICAgICAqLworICAgIFBQcm9maWxlICAgIGdQcm9maWxlOyAgICAgICAgICAgLyogY29udG91cidzIGZpcnN0IHByb2ZpbGUgaW4gY2FzZSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mIGltcGFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBUU3RhdGVzICAgICBzdGF0ZTsgICAgICAgICAgICAgIC8qIHJlbmRlcmluZyBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9CaXRtYXAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIGRlc2NyaXB0aW9uIG9mIHRhcmdldCBiaXQvcGl4bWFwICAgICovCisgICAgRlRfT3V0bGluZSAgb3V0bGluZTsKKworICAgIExvbmcgICAgICAgIHRyYWNlT2ZzOyAgICAgICAgICAgLyogY3VycmVudCBvZmZzZXQgaW4gdGFyZ2V0IGJpdG1hcCAgICAgKi8KKyAgICBMb25nICAgICAgICB0cmFjZUc7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgb2Zmc2V0IGluIHRhcmdldCBwaXhtYXAgICAgICovCisKKyAgICBTaG9ydCAgICAgICB0cmFjZUluY3I7ICAgICAgICAgIC8qIHN3ZWVwJ3MgaW5jcmVtZW50IGluIHRhcmdldCBiaXRtYXAgICovCisKKyAgICAvKiBkaXNwYXRjaCB2YXJpYWJsZXMgKi8KKworICAgIEZ1bmN0aW9uX1N3ZWVwX0luaXQqICBQcm9jX1N3ZWVwX0luaXQ7CisgICAgRnVuY3Rpb25fU3dlZXBfU3BhbiogIFByb2NfU3dlZXBfU3BhbjsKKyAgICBGdW5jdGlvbl9Td2VlcF9TcGFuKiAgUHJvY19Td2VlcF9Ecm9wOworICAgIEZ1bmN0aW9uX1N3ZWVwX1N0ZXAqICBQcm9jX1N3ZWVwX1N0ZXA7CisKKyAgICBCeXRlICAgICAgICBkcm9wT3V0Q29udHJvbDsgICAgIC8qIGN1cnJlbnQgZHJvcF9vdXQgY29udHJvbCBtZXRob2QgICAgICovCisKKyAgICBCb29sICAgICAgICBzZWNvbmRfcGFzczsgICAgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGEgaG9yaXpvbnRhbCBwYXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGNvbnRyb2wgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHJvcC1vdXQgYWNjdXJhdGVseSB3aGVuIGNhbGxpbmcgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbmRlcl9HbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBUUG9pbnQgICAgICBhcmNzWzMgKiBNYXhCZXppZXIgKyAxXTsgLyogVGhlIEJlemllciBzdGFjayAgICAgICAgICAgICAgICovCisKKyAgICBibGFja19UQmFuZCAgYmFuZF9zdGFja1sxNl07ICAgIC8qIGJhbmQgc3RhY2sgdXNlZCBmb3Igc3ViLWJhbmRpbmcgICAgICovCisgICAgSW50ICAgICAgICAgIGJhbmRfdG9wOyAgICAgICAgICAvKiBiYW5kIHN0YWNrIHRvcCAgICAgICAgICAgICAgICAgICAgICAqLworCisgIH07CisKKworICB0eXBlZGVmIHN0cnVjdCAgYmxhY2tfVFJhc3Rlcl8KKyAgeworICAgIHZvaWQqICAgICAgICAgIG1lbW9yeTsKKworICB9IGJsYWNrX1RSYXN0ZXIsICpibGFja19QUmFzdGVyOworCisjaWZkZWYgRlRfU1RBVElDX1JBU1RFUgorCisgIHN0YXRpYyBibGFja19UV29ya2VyICBjdXJfcmFzOworI2RlZmluZSByYXMgIGN1cl9yYXMKKworI2Vsc2UgLyogIUZUX1NUQVRJQ19SQVNURVIgKi8KKworI2RlZmluZSByYXMgICgqd29ya2VyKQorCisjZW5kaWYgLyogIUZUX1NUQVRJQ19SQVNURVIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIC8qKiAgUFJPRklMRVMgQ09NUFVUQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworICAvKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2V0X0hpZ2hfUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2V0IHByZWNpc2lvbiB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHBhcmFtIGZsYWcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSGlnaCA6OiBTZXQgdG8gVHJ1ZSBmb3IgaGlnaCBwcmVjaXNpb24gKHR5cGljYWxseSBmb3IgcHBlbSA8IDI0KSwgICovCisgIC8qICAgICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgU2V0X0hpZ2hfUHJlY2lzaW9uKCBSQVNfQVJHUyBJbnQgIEhpZ2ggKQorICB7CisgICAgLyoKKyAgICAgKiBgcHJlY2lzaW9uX3N0ZXAnIGlzIHVzZWQgaW4gYEJlemllcl9VcCcgdG8gZGVjaWRlIHdoZW4gdG8gc3BsaXQgYQorICAgICAqIGdpdmVuIHktbW9ub3Rvbm91cyBCZXppZXIgYXJjIHRoYXQgY3Jvc3NlcyBhIHNjYW5saW5lIGJlZm9yZQorICAgICAqIGFwcHJveGltYXRpbmcgaXQgYXMgYSBzdHJhaWdodCBzZWdtZW50LiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMzIgKGZvcgorICAgICAqIGxvdyBhY2N1cmFjeSkgY29ycmVzcG9uZHMgdG8KKyAgICAgKgorICAgICAqICAgMzIgLyA2NCA9PSAwLjUgcGl4ZWxzLAorICAgICAqCisgICAgICogd2hpbGUgZm9yIHRoZSBoaWdoIGFjY3VyYWN5IGNhc2Ugd2UgaGF2ZQorICAgICAqCisgICAgICogICAyNTYgLyAoMSA8PCAxMikgPSAwLjA2MjUgcGl4ZWxzLgorICAgICAqCisgICAgICogYHByZWNpc2lvbl9qaXR0ZXInIGlzIGFuIGVwc2lsb24gdGhyZXNob2xkIHVzZWQgaW4KKyAgICAgKiBgVmVydGljYWxfU3dlZXBfU3BhbicgdG8gZGVhbCB3aXRoIHNtYWxsIGltcGVyZmVjdGlvbnMgaW4gdGhlIEJlemllcgorICAgICAqIGRlY29tcG9zaXRpb24gKGFmdGVyIGFsbCwgd2UgYXJlIHdvcmtpbmcgd2l0aCBhcHByb3hpbWF0aW9ucyBvbmx5KTsKKyAgICAgKiBpdCBhdm9pZHMgc3dpdGNoaW5nIG9uIGFkZGl0aW9uYWwgcGl4ZWxzIHdoaWNoIHdvdWxkIGNhdXNlIGFydGlmYWN0cworICAgICAqIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIFRoZSB2YWx1ZSBvZiBgcHJlY2lzaW9uX2ppdHRlcicgaGFzIGJlZW4gZGV0ZXJtaW5lZCBoZXVyaXN0aWNhbGx5LgorICAgICAqCisgICAgICovCisKKyAgICBpZiAoIEhpZ2ggKQorICAgIHsKKyAgICAgIHJhcy5wcmVjaXNpb25fYml0cyAgID0gMTI7CisgICAgICByYXMucHJlY2lzaW9uX3N0ZXAgICA9IDI1NjsKKyAgICAgIHJhcy5wcmVjaXNpb25faml0dGVyID0gMzA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByYXMucHJlY2lzaW9uX2JpdHMgICA9IDY7CisgICAgICByYXMucHJlY2lzaW9uX3N0ZXAgICA9IDMyOworICAgICAgcmFzLnByZWNpc2lvbl9qaXR0ZXIgPSAyOworICAgIH0KKworICAgIEZUX1RSQUNFNigoICJTZXRfSGlnaF9QcmVjaXNpb24oJXMpXG4iLCBIaWdoID8gInRydWUiIDogImZhbHNlIiApKTsKKworICAgIHJhcy5wcmVjaXNpb24gICAgICAgPSAxIDw8IHJhcy5wcmVjaXNpb25fYml0czsKKyAgICByYXMucHJlY2lzaW9uX2hhbGYgID0gcmFzLnByZWNpc2lvbiAvIDI7CisgICAgcmFzLnByZWNpc2lvbl9zaGlmdCA9IHJhcy5wcmVjaXNpb25fYml0cyAtIFBpeGVsX0JpdHM7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5ld19Qcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENyZWF0ZSBhIG5ldyBwcm9maWxlIGluIHRoZSByZW5kZXIgcG9vbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFTdGF0ZSAgICA6OiBUaGUgc3RhdGUvb3JpZW50YXRpb24gb2YgdGhlIG5ldyBwcm9maWxlLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3ZlcnNob290IDo6IFdoZXRoZXIgdGhlIHByb2ZpbGUncyB1bnJvdW5kZWQgc3RhcnQgcG9zaXRpb24gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBkaWZmZXJzIGJ5IGF0IGxlYXN0IGEgaGFsZiBwaXhlbC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgU1VDQ0VTUyBvbiBzdWNjZXNzLiAgRkFJTFVSRSBpbiBjYXNlIG9mIG92ZXJmbG93IG9yIG9mIGluY29oZXJlbnQgICAqLworICAvKiAgIHByb2ZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBCb29sCisgIE5ld19Qcm9maWxlKCBSQVNfQVJHUyBUU3RhdGVzICBhU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBCb29sICAgICBvdmVyc2hvb3QgKQorICB7CisgICAgaWYgKCAhcmFzLmZQcm9maWxlICkKKyAgICB7CisgICAgICByYXMuY1Byb2ZpbGUgID0gKFBQcm9maWxlKXJhcy50b3A7CisgICAgICByYXMuZlByb2ZpbGUgID0gcmFzLmNQcm9maWxlOworICAgICAgcmFzLnRvcCAgICAgICs9IEFsaWduUHJvZmlsZVNpemU7CisgICAgfQorCisgICAgaWYgKCByYXMudG9wID49IHJhcy5tYXhCdWZmICkKKyAgICB7CisgICAgICByYXMuZXJyb3IgPSBGVF9USFJPVyggT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybiBGQUlMVVJFOworICAgIH0KKworICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgID0gMDsKKyAgICByYXMuY1Byb2ZpbGUtPnN0YXJ0ICA9IDA7CisgICAgcmFzLmNQcm9maWxlLT5oZWlnaHQgPSAwOworICAgIHJhcy5jUHJvZmlsZS0+b2Zmc2V0ID0gcmFzLnRvcDsKKyAgICByYXMuY1Byb2ZpbGUtPmxpbmsgICA9IChQUHJvZmlsZSkwOworICAgIHJhcy5jUHJvZmlsZS0+bmV4dCAgID0gKFBQcm9maWxlKTA7CisgICAgcmFzLmNQcm9maWxlLT5mbGFncyAgPSByYXMuZHJvcE91dENvbnRyb2w7CisKKyAgICBzd2l0Y2ggKCBhU3RhdGUgKQorICAgIHsKKyAgICBjYXNlIEFzY2VuZGluZ19TdGF0ZToKKyAgICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgfD0gRmxvd19VcDsKKyAgICAgIGlmICggb3ZlcnNob290ICkKKyAgICAgICAgcmFzLmNQcm9maWxlLT5mbGFncyB8PSBPdmVyc2hvb3RfQm90dG9tOworCisgICAgICBGVF9UUkFDRTYoKCAiICBuZXcgYXNjZW5kaW5nIHByb2ZpbGUgPSAlcFxuIiwgcmFzLmNQcm9maWxlICkpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERlc2NlbmRpbmdfU3RhdGU6CisgICAgICBpZiAoIG92ZXJzaG9vdCApCisgICAgICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgfD0gT3ZlcnNob290X1RvcDsKKyAgICAgIEZUX1RSQUNFNigoICIgIG5ldyBkZXNjZW5kaW5nIHByb2ZpbGUgPSAlcFxuIiwgcmFzLmNQcm9maWxlICkpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfRVJST1IoKCAiTmV3X1Byb2ZpbGU6IGludmFsaWQgcHJvZmlsZSBkaXJlY3Rpb25cbiIgKSk7CisgICAgICByYXMuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZCApOworICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKCAhcmFzLmdQcm9maWxlICkKKyAgICAgIHJhcy5nUHJvZmlsZSA9IHJhcy5jUHJvZmlsZTsKKworICAgIHJhcy5zdGF0ZSA9IGFTdGF0ZTsKKyAgICByYXMuZnJlc2ggPSBUUlVFOworICAgIHJhcy5qb2ludCA9IEZBTFNFOworCisgICAgcmV0dXJuIFNVQ0NFU1M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVuZF9Qcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplIHRoZSBjdXJyZW50IHByb2ZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG92ZXJzaG9vdCA6OiBXaGV0aGVyIHRoZSBwcm9maWxlJ3MgdW5yb3VuZGVkIGVuZCBwb3NpdGlvbiBkaWZmZXJzICAqLworICAvKiAgICAgICAgICAgICAgICAgYnkgYXQgbGVhc3QgYSBoYWxmIHBpeGVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTVUNDRVNTIG9uIHN1Y2Nlc3MuICBGQUlMVVJFIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgb3IgaW5jb2hlcmVuY3kuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBCb29sCisgIEVuZF9Qcm9maWxlKCBSQVNfQVJHUyBCb29sICBvdmVyc2hvb3QgKQorICB7CisgICAgTG9uZyAgaDsKKworCisgICAgaCA9IChMb25nKSggcmFzLnRvcCAtIHJhcy5jUHJvZmlsZS0+b2Zmc2V0ICk7CisKKyAgICBpZiAoIGggPCAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJFbmRfUHJvZmlsZTogbmVnYXRpdmUgaGVpZ2h0IGVuY291bnRlcmVkXG4iICkpOworICAgICAgcmFzLmVycm9yID0gRlRfVEhST1coIE5lZ19IZWlnaHQgKTsKKyAgICAgIHJldHVybiBGQUlMVVJFOworICAgIH0KKworICAgIGlmICggaCA+IDAgKQorICAgIHsKKyAgICAgIFBQcm9maWxlICBvbGRQcm9maWxlOworCisKKyAgICAgIEZUX1RSQUNFNigoICIgIGVuZGluZyBwcm9maWxlICVwLCBzdGFydCA9ICVsZCwgaGVpZ2h0ID0gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgcmFzLmNQcm9maWxlLCByYXMuY1Byb2ZpbGUtPnN0YXJ0LCBoICkpOworCisgICAgICByYXMuY1Byb2ZpbGUtPmhlaWdodCA9IGg7CisgICAgICBpZiAoIG92ZXJzaG9vdCApCisgICAgICB7CisgICAgICAgIGlmICggcmFzLmNQcm9maWxlLT5mbGFncyAmIEZsb3dfVXAgKQorICAgICAgICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgfD0gT3ZlcnNob290X1RvcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJhcy5jUHJvZmlsZS0+ZmxhZ3MgfD0gT3ZlcnNob290X0JvdHRvbTsKKyAgICAgIH0KKworICAgICAgb2xkUHJvZmlsZSAgID0gcmFzLmNQcm9maWxlOworICAgICAgcmFzLmNQcm9maWxlID0gKFBQcm9maWxlKXJhcy50b3A7CisKKyAgICAgIHJhcy50b3AgKz0gQWxpZ25Qcm9maWxlU2l6ZTsKKworICAgICAgcmFzLmNQcm9maWxlLT5oZWlnaHQgPSAwOworICAgICAgcmFzLmNQcm9maWxlLT5vZmZzZXQgPSByYXMudG9wOworCisgICAgICBvbGRQcm9maWxlLT5uZXh0ID0gcmFzLmNQcm9maWxlOworICAgICAgcmFzLm51bV9Qcm9mcysrOworICAgIH0KKworICAgIGlmICggcmFzLnRvcCA+PSByYXMubWF4QnVmZiApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggIm92ZXJmbG93IGluIEVuZF9Qcm9maWxlXG4iICkpOworICAgICAgcmFzLmVycm9yID0gRlRfVEhST1coIE92ZXJmbG93ICk7CisgICAgICByZXR1cm4gRkFJTFVSRTsKKyAgICB9CisKKyAgICByYXMuam9pbnQgPSBGQUxTRTsKKworICAgIHJldHVybiBTVUNDRVNTOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnNlcnRfWV9UdXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnNlcnQgYSBzYWxpZW50IGludG8gdGhlIHNvcnRlZCBsaXN0IHBsYWNlZCBvbiB0b3Agb2YgdGhlIHJlbmRlciAgKi8KKyAgLyogICAgcG9vbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTmV3IHkgc2NhbmxpbmUgcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLiAgRkFJTFVSRSBpbiBjYXNlIG9mIG92ZXJmbG93LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBJbnNlcnRfWV9UdXJuKCBSQVNfQVJHUyBJbnQgIHkgKQorICB7CisgICAgUExvbmcgIHlfdHVybnM7CisgICAgSW50ICAgIG47CisKKworICAgIG4gICAgICAgPSByYXMubnVtVHVybnMgLSAxOworICAgIHlfdHVybnMgPSByYXMuc2l6ZUJ1ZmYgLSByYXMubnVtVHVybnM7CisKKyAgICAvKiBsb29rIGZvciBmaXJzdCB5IHZhbHVlIHRoYXQgaXMgPD0gKi8KKyAgICB3aGlsZSAoIG4gPj0gMCAmJiB5IDwgeV90dXJuc1tuXSApCisgICAgICBuLS07CisKKyAgICAvKiBpZiBpdCBpcyA8LCBzaW1wbHkgaW5zZXJ0IGl0LCBpZ25vcmUgaWYgPT0gKi8KKyAgICBpZiAoIG4gPj0gMCAmJiB5ID4geV90dXJuc1tuXSApCisgICAgICB3aGlsZSAoIG4gPj0gMCApCisgICAgICB7CisgICAgICAgIEludCAgeTIgPSAoSW50KXlfdHVybnNbbl07CisKKworICAgICAgICB5X3R1cm5zW25dID0geTsKKyAgICAgICAgeSA9IHkyOworICAgICAgICBuLS07CisgICAgICB9CisKKyAgICBpZiAoIG4gPCAwICkKKyAgICB7CisgICAgICByYXMubWF4QnVmZi0tOworICAgICAgaWYgKCByYXMubWF4QnVmZiA8PSByYXMudG9wICkKKyAgICAgIHsKKyAgICAgICAgcmFzLmVycm9yID0gRlRfVEhST1coIE92ZXJmbG93ICk7CisgICAgICAgIHJldHVybiBGQUlMVVJFOworICAgICAgfQorICAgICAgcmFzLm51bVR1cm5zKys7CisgICAgICByYXMuc2l6ZUJ1ZmZbLXJhcy5udW1UdXJuc10gPSB5OworICAgIH0KKworICAgIHJldHVybiBTVUNDRVNTOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGaW5hbGl6ZV9Qcm9maWxlX1RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZGp1c3QgYWxsIGxpbmtzIGluIHRoZSBwcm9maWxlcyBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTVUNDRVNTIG9uIHN1Y2Nlc3MuICBGQUlMVVJFIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBCb29sCisgIEZpbmFsaXplX1Byb2ZpbGVfVGFibGUoIFJBU19BUkcgKQorICB7CisgICAgVVNob3J0ICAgIG47CisgICAgUFByb2ZpbGUgIHA7CisKKworICAgIG4gPSByYXMubnVtX1Byb2ZzOworICAgIHAgPSByYXMuZlByb2ZpbGU7CisKKyAgICBpZiAoIG4gPiAxICYmIHAgKQorICAgIHsKKyAgICAgIHdoaWxlICggbiA+IDAgKQorICAgICAgeworICAgICAgICBJbnQgIGJvdHRvbSwgdG9wOworCisKKyAgICAgICAgaWYgKCBuID4gMSApCisgICAgICAgICAgcC0+bGluayA9IChQUHJvZmlsZSkoIHAtPm9mZnNldCArIHAtPmhlaWdodCApOworICAgICAgICBlbHNlCisgICAgICAgICAgcC0+bGluayA9IE5VTEw7CisKKyAgICAgICAgaWYgKCBwLT5mbGFncyAmIEZsb3dfVXAgKQorICAgICAgICB7CisgICAgICAgICAgYm90dG9tID0gKEludClwLT5zdGFydDsKKyAgICAgICAgICB0b3AgICAgPSAoSW50KSggcC0+c3RhcnQgKyBwLT5oZWlnaHQgLSAxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYm90dG9tICAgICA9IChJbnQpKCBwLT5zdGFydCAtIHAtPmhlaWdodCArIDEgKTsKKyAgICAgICAgICB0b3AgICAgICAgID0gKEludClwLT5zdGFydDsKKyAgICAgICAgICBwLT5zdGFydCAgID0gYm90dG9tOworICAgICAgICAgIHAtPm9mZnNldCArPSBwLT5oZWlnaHQgLSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBJbnNlcnRfWV9UdXJuKCBSQVNfVkFSUyBib3R0b20gKSAgfHwKKyAgICAgICAgICAgICBJbnNlcnRfWV9UdXJuKCBSQVNfVkFSUyB0b3AgKyAxICkgKQorICAgICAgICAgIHJldHVybiBGQUlMVVJFOworCisgICAgICAgIHAgPSBwLT5saW5rOworICAgICAgICBuLS07CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJhcy5mUHJvZmlsZSA9IE5VTEw7CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3BsaXRfQ29uaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3ViZGl2aWRlIG9uZSBjb25pYyBCZXppZXIgaW50byB0d28gam9pbnQgc3ViLWFyY3MgaW4gdGhlIEJlemllciAgICovCisgIC8qICAgIHN0YWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vbmUgKHN1YmRpdmlkZWQgQmV6aWVyIGlzIHRha2VuIGZyb20gdGhlIHRvcCBvZiB0aGUgc3RhY2spLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgcm91dGluZSBpcyB0aGUgYGJlZWYnIG9mIHRoaXMgY29tcG9uZW50LiAgSXQgaXMgIF90aGVfIGlubmVyICAqLworICAvKiAgICBsb29wIHRoYXQgc2hvdWxkIGJlIG9wdGltaXplZCB0byBoZWxsIHRvIGdldCB0aGUgYmVzdCBwZXJmb3JtYW5jZS4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIFNwbGl0X0NvbmljKCBUUG9pbnQqICBiYXNlICkKKyAgeworICAgIExvbmcgIGEsIGI7CisKKworICAgIGJhc2VbNF0ueCA9IGJhc2VbMl0ueDsKKyAgICBiID0gYmFzZVsxXS54OworICAgIGEgPSBiYXNlWzNdLnggPSAoIGJhc2VbMl0ueCArIGIgKSAvIDI7CisgICAgYiA9IGJhc2VbMV0ueCA9ICggYmFzZVswXS54ICsgYiApIC8gMjsKKyAgICBiYXNlWzJdLnggPSAoIGEgKyBiICkgLyAyOworCisgICAgYmFzZVs0XS55ID0gYmFzZVsyXS55OworICAgIGIgPSBiYXNlWzFdLnk7CisgICAgYSA9IGJhc2VbM10ueSA9ICggYmFzZVsyXS55ICsgYiApIC8gMjsKKyAgICBiID0gYmFzZVsxXS55ID0gKCBiYXNlWzBdLnkgKyBiICkgLyAyOworICAgIGJhc2VbMl0ueSA9ICggYSArIGIgKSAvIDI7CisKKyAgICAvKiBoYW5kIG9wdGltaXplZC4gIGdjYyBkb2Vzbid0IHNlZW0gdG8gYmUgdG9vIGdvb2QgYXQgY29tbW9uICAgICAgKi8KKyAgICAvKiBleHByZXNzaW9uIHN1YnN0aXR1dGlvbiBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyA7LSkgICAgICAgICAgKi8KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3BsaXRfQ3ViaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3ViZGl2aWRlIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYyBpbnRvIHR3byBqb2ludCBzdWItYXJjcyBpbiB0aGUgICovCisgIC8qICAgIEJlemllciBzdGFjay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgcm91dGluZSBpcyB0aGUgYGJlZWYnIG9mIHRoZSBjb21wb25lbnQuICBJdCBpcyBvbmUgb2YgX3RoZV8gICAqLworICAvKiAgICBpbm5lciBsb29wcyB0aGF0IHNob3VsZCBiZSBvcHRpbWl6ZWQgbGlrZSBoZWxsIHRvIGdldCB0aGUgYmVzdCAgICAgKi8KKyAgLyogICAgcGVyZm9ybWFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBTcGxpdF9DdWJpYyggVFBvaW50KiAgYmFzZSApCisgIHsKKyAgICBMb25nICBhLCBiLCBjLCBkOworCisKKyAgICBiYXNlWzZdLnggPSBiYXNlWzNdLng7CisgICAgYyA9IGJhc2VbMV0ueDsKKyAgICBkID0gYmFzZVsyXS54OworICAgIGJhc2VbMV0ueCA9IGEgPSAoIGJhc2VbMF0ueCArIGMgKyAxICkgPj4gMTsKKyAgICBiYXNlWzVdLnggPSBiID0gKCBiYXNlWzNdLnggKyBkICsgMSApID4+IDE7CisgICAgYyA9ICggYyArIGQgKyAxICkgPj4gMTsKKyAgICBiYXNlWzJdLnggPSBhID0gKCBhICsgYyArIDEgKSA+PiAxOworICAgIGJhc2VbNF0ueCA9IGIgPSAoIGIgKyBjICsgMSApID4+IDE7CisgICAgYmFzZVszXS54ID0gKCBhICsgYiArIDEgKSA+PiAxOworCisgICAgYmFzZVs2XS55ID0gYmFzZVszXS55OworICAgIGMgPSBiYXNlWzFdLnk7CisgICAgZCA9IGJhc2VbMl0ueTsKKyAgICBiYXNlWzFdLnkgPSBhID0gKCBiYXNlWzBdLnkgKyBjICsgMSApID4+IDE7CisgICAgYmFzZVs1XS55ID0gYiA9ICggYmFzZVszXS55ICsgZCArIDEgKSA+PiAxOworICAgIGMgPSAoIGMgKyBkICsgMSApID4+IDE7CisgICAgYmFzZVsyXS55ID0gYSA9ICggYSArIGMgKyAxICkgPj4gMTsKKyAgICBiYXNlWzRdLnkgPSBiID0gKCBiICsgYyArIDEgKSA+PiAxOworICAgIGJhc2VbM10ueSA9ICggYSArIGIgKyAxICkgPj4gMTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGluZV9VcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZSB0aGUgeC1jb29yZGluYXRlcyBvZiBhbiBhc2NlbmRpbmcgbGluZSBzZWdtZW50IGFuZCBzdG9yZSAgICovCisgIC8qICAgIHRoZW0gaW4gdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHgxICAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIHN0YXJ0IHBvaW50LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeTEgICA6OiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3Mgc3RhcnQgcG9pbnQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4MiAgIDo6IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBlbmQgcG9pbnQuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHkyICAgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWlueSA6OiBBIGxvd2VyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXh5IDo6IEFuIHVwcGVyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBCb29sCisgIExpbmVfVXAoIFJBU19BUkdTIExvbmcgIHgxLAorICAgICAgICAgICAgICAgICAgICBMb25nICB5MSwKKyAgICAgICAgICAgICAgICAgICAgTG9uZyAgeDIsCisgICAgICAgICAgICAgICAgICAgIExvbmcgIHkyLAorICAgICAgICAgICAgICAgICAgICBMb25nICBtaW55LAorICAgICAgICAgICAgICAgICAgICBMb25nICBtYXh5ICkKKyAgeworICAgIExvbmcgICBEeCwgRHk7CisgICAgSW50ICAgIGUxLCBlMiwgZjEsIGYyLCBzaXplOyAgICAgLyogWFhYOiBpcyBgU2hvcnQnIHN1ZmZpY2llbnQ/ICovCisgICAgTG9uZyAgIEl4LCBSeCwgQXg7CisKKyAgICBQTG9uZyAgdG9wOworCisKKyAgICBEeCA9IHgyIC0geDE7CisgICAgRHkgPSB5MiAtIHkxOworCisgICAgaWYgKCBEeSA8PSAwIHx8IHkyIDwgbWlueSB8fCB5MSA+IG1heHkgKQorICAgICAgcmV0dXJuIFNVQ0NFU1M7CisKKyAgICBpZiAoIHkxIDwgbWlueSApCisgICAgeworICAgICAgLyogVGFrZSBjYXJlOiBtaW55LXkxIGNhbiBiZSBhIHZlcnkgbGFyZ2UgdmFsdWU7IHdlIHVzZSAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgYSBzbG93IE11bERpdiBmdW5jdGlvbiB0byBhdm9pZCBjbGlwcGluZyBidWdzICovCisgICAgICB4MSArPSBTTXVsRGl2KCBEeCwgbWlueSAtIHkxLCBEeSApOworICAgICAgZTEgID0gKEludClUUlVOQyggbWlueSApOworICAgICAgZjEgID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGUxID0gKEludClUUlVOQyggeTEgKTsKKyAgICAgIGYxID0gKEludClGUkFDKCB5MSApOworICAgIH0KKworICAgIGlmICggeTIgPiBtYXh5ICkKKyAgICB7CisgICAgICAvKiB4MiArPSBGTXVsRGl2KCBEeCwgbWF4eSAtIHkyLCBEeSApOyAgVU5ORUNFU1NBUlkgKi8KKyAgICAgIGUyICA9IChJbnQpVFJVTkMoIG1heHkgKTsKKyAgICAgIGYyICA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBlMiA9IChJbnQpVFJVTkMoIHkyICk7CisgICAgICBmMiA9IChJbnQpRlJBQyggeTIgKTsKKyAgICB9CisKKyAgICBpZiAoIGYxID4gMCApCisgICAgeworICAgICAgaWYgKCBlMSA9PSBlMiApCisgICAgICAgIHJldHVybiBTVUNDRVNTOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICB4MSArPSBTTXVsRGl2KCBEeCwgcmFzLnByZWNpc2lvbiAtIGYxLCBEeSApOworICAgICAgICBlMSArPSAxOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICBpZiAoIHJhcy5qb2ludCApCisgICAgICB7CisgICAgICAgIHJhcy50b3AtLTsKKyAgICAgICAgcmFzLmpvaW50ID0gRkFMU0U7CisgICAgICB9CisKKyAgICByYXMuam9pbnQgPSAoY2hhcikoIGYyID09IDAgKTsKKworICAgIGlmICggcmFzLmZyZXNoICkKKyAgICB7CisgICAgICByYXMuY1Byb2ZpbGUtPnN0YXJ0ID0gZTE7CisgICAgICByYXMuZnJlc2ggICAgICAgICAgID0gRkFMU0U7CisgICAgfQorCisgICAgc2l6ZSA9IGUyIC0gZTEgKyAxOworICAgIGlmICggcmFzLnRvcCArIHNpemUgPj0gcmFzLm1heEJ1ZmYgKQorICAgIHsKKyAgICAgIHJhcy5lcnJvciA9IEZUX1RIUk9XKCBPdmVyZmxvdyApOworICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKCBEeCA+IDAgKQorICAgIHsKKyAgICAgIEl4ID0gU011bERpdl9Ob19Sb3VuZCggcmFzLnByZWNpc2lvbiwgRHgsIER5ICk7CisgICAgICBSeCA9ICggcmFzLnByZWNpc2lvbiAqIER4ICkgJSBEeTsKKyAgICAgIER4ID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEl4ID0gLVNNdWxEaXZfTm9fUm91bmQoIHJhcy5wcmVjaXNpb24sIC1EeCwgRHkgKTsKKyAgICAgIFJ4ID0gKCByYXMucHJlY2lzaW9uICogLUR4ICkgJSBEeTsKKyAgICAgIER4ID0gLTE7CisgICAgfQorCisgICAgQXggID0gLUR5OworICAgIHRvcCA9IHJhcy50b3A7CisKKyAgICB3aGlsZSAoIHNpemUgPiAwICkKKyAgICB7CisgICAgICAqdG9wKysgPSB4MTsKKworICAgICAgeDEgKz0gSXg7CisgICAgICBBeCArPSBSeDsKKyAgICAgIGlmICggQXggPj0gMCApCisgICAgICB7CisgICAgICAgIEF4IC09IER5OworICAgICAgICB4MSArPSBEeDsKKyAgICAgIH0KKyAgICAgIHNpemUtLTsKKyAgICB9CisKKyAgICByYXMudG9wID0gdG9wOworICAgIHJldHVybiBTVUNDRVNTOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMaW5lX0Rvd24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGRlc2NlbmRpbmcgbGluZSBzZWdtZW50IGFuZCBzdG9yZSAgKi8KKyAgLyogICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeDEgICA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3Mgc3RhcnQgcG9pbnQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB5MSAgIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBzdGFydCBwb2ludC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHgyICAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeTIgICA6OiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3MgZW5kIHBvaW50LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtaW55IDo6IEEgbG93ZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heHkgOjogQW4gdXBwZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdy4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEJvb2wKKyAgTGluZV9Eb3duKCBSQVNfQVJHUyBMb25nICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICBMb25nICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICBMb25nICB4MiwKKyAgICAgICAgICAgICAgICAgICAgICBMb25nICB5MiwKKyAgICAgICAgICAgICAgICAgICAgICBMb25nICBtaW55LAorICAgICAgICAgICAgICAgICAgICAgIExvbmcgIG1heHkgKQorICB7CisgICAgQm9vbCAgcmVzdWx0LCBmcmVzaDsKKworCisgICAgZnJlc2ggID0gcmFzLmZyZXNoOworCisgICAgcmVzdWx0ID0gTGluZV9VcCggUkFTX1ZBUlMgeDEsIC15MSwgeDIsIC15MiwgLW1heHksIC1taW55ICk7CisKKyAgICBpZiAoIGZyZXNoICYmICFyYXMuZnJlc2ggKQorICAgICAgcmFzLmNQcm9maWxlLT5zdGFydCA9IC1yYXMuY1Byb2ZpbGUtPnN0YXJ0OworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyogQSBmdW5jdGlvbiB0eXBlIGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIHNwbGl0IEJlemllciBhcmNzICovCisgIHR5cGVkZWYgdm9pZCAgKCpUU3BsaXR0ZXIpKCBUUG9pbnQqICBiYXNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCZXppZXJfVXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGFzY2VuZGluZyBCZXppZXIgYXJjIGFuZCBzdG9yZSAgICAgKi8KKyAgLyogICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVncmVlICAgOjogVGhlIGRlZ3JlZSBvZiB0aGUgQmV6aWVyIGFyYyAoZWl0aGVyIDIgb3IgMykuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzcGxpdHRlciA6OiBUaGUgZnVuY3Rpb24gdG8gc3BsaXQgQmV6aWVyIGFyY3MuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbnkgICAgIDo6IEEgbG93ZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4eSAgICAgOjogQW4gdXBwZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIG9uIHJlbmRlciBwb29sIG92ZXJmbG93LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBCZXppZXJfVXAoIFJBU19BUkdTIEludCAgICAgICAgZGVncmVlLAorICAgICAgICAgICAgICAgICAgICAgIFRTcGxpdHRlciAgc3BsaXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgTG9uZyAgICAgICBtaW55LAorICAgICAgICAgICAgICAgICAgICAgIExvbmcgICAgICAgbWF4eSApCisgIHsKKyAgICBMb25nICAgeTEsIHkyLCBlLCBlMiwgZTA7CisgICAgU2hvcnQgIGYxOworCisgICAgVFBvaW50KiAgYXJjOworICAgIFRQb2ludCogIHN0YXJ0X2FyYzsKKworICAgIFBMb25nIHRvcDsKKworCisgICAgYXJjID0gcmFzLmFyYzsKKyAgICB5MSAgPSBhcmNbZGVncmVlXS55OworICAgIHkyICA9IGFyY1swXS55OworICAgIHRvcCA9IHJhcy50b3A7CisKKyAgICBpZiAoIHkyIDwgbWlueSB8fCB5MSA+IG1heHkgKQorICAgICAgZ290byBGaW47CisKKyAgICBlMiA9IEZMT09SKCB5MiApOworCisgICAgaWYgKCBlMiA+IG1heHkgKQorICAgICAgZTIgPSBtYXh5OworCisgICAgZTAgPSBtaW55OworCisgICAgaWYgKCB5MSA8IG1pbnkgKQorICAgICAgZSA9IG1pbnk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGUgID0gQ0VJTElORyggeTEgKTsKKyAgICAgIGYxID0gKFNob3J0KSggRlJBQyggeTEgKSApOworICAgICAgZTAgPSBlOworCisgICAgICBpZiAoIGYxID09IDAgKQorICAgICAgeworICAgICAgICBpZiAoIHJhcy5qb2ludCApCisgICAgICAgIHsKKyAgICAgICAgICB0b3AtLTsKKyAgICAgICAgICByYXMuam9pbnQgPSBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgICp0b3ArKyA9IGFyY1tkZWdyZWVdLng7CisKKyAgICAgICAgZSArPSByYXMucHJlY2lzaW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmICggcmFzLmZyZXNoICkKKyAgICB7CisgICAgICByYXMuY1Byb2ZpbGUtPnN0YXJ0ID0gVFJVTkMoIGUwICk7CisgICAgICByYXMuZnJlc2ggPSBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoIGUyIDwgZSApCisgICAgICBnb3RvIEZpbjsKKworICAgIGlmICggKCB0b3AgKyBUUlVOQyggZTIgLSBlICkgKyAxICkgPj0gcmFzLm1heEJ1ZmYgKQorICAgIHsKKyAgICAgIHJhcy50b3AgICA9IHRvcDsKKyAgICAgIHJhcy5lcnJvciA9IEZUX1RIUk9XKCBPdmVyZmxvdyApOworICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgfQorCisgICAgc3RhcnRfYXJjID0gYXJjOworCisgICAgd2hpbGUgKCBhcmMgPj0gc3RhcnRfYXJjICYmIGUgPD0gZTIgKQorICAgIHsKKyAgICAgIHJhcy5qb2ludCA9IEZBTFNFOworCisgICAgICB5MiA9IGFyY1swXS55OworCisgICAgICBpZiAoIHkyID4gZSApCisgICAgICB7CisgICAgICAgIHkxID0gYXJjW2RlZ3JlZV0ueTsKKyAgICAgICAgaWYgKCB5MiAtIHkxID49IHJhcy5wcmVjaXNpb25fc3RlcCApCisgICAgICAgIHsKKyAgICAgICAgICBzcGxpdHRlciggYXJjICk7CisgICAgICAgICAgYXJjICs9IGRlZ3JlZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAqdG9wKysgPSBhcmNbZGVncmVlXS54ICsgRk11bERpdiggYXJjWzBdLnggLSBhcmNbZGVncmVlXS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIC0geTEsIHkyIC0geTEgKTsKKyAgICAgICAgICBhcmMgLT0gZGVncmVlOworICAgICAgICAgIGUgICArPSByYXMucHJlY2lzaW9uOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmICggeTIgPT0gZSApCisgICAgICAgIHsKKyAgICAgICAgICByYXMuam9pbnQgID0gVFJVRTsKKyAgICAgICAgICAqdG9wKysgICAgID0gYXJjWzBdLng7CisKKyAgICAgICAgICBlICs9IHJhcy5wcmVjaXNpb247CisgICAgICAgIH0KKyAgICAgICAgYXJjIC09IGRlZ3JlZTsKKyAgICAgIH0KKyAgICB9CisKKyAgRmluOgorICAgIHJhcy50b3AgID0gdG9wOworICAgIHJhcy5hcmMgLT0gZGVncmVlOworICAgIHJldHVybiBTVUNDRVNTOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCZXppZXJfRG93biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGRlc2NlbmRpbmcgQmV6aWVyIGFyYyBhbmQgc3RvcmUgICAgKi8KKyAgLyogICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVncmVlICAgOjogVGhlIGRlZ3JlZSBvZiB0aGUgQmV6aWVyIGFyYyAoZWl0aGVyIDIgb3IgMykuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzcGxpdHRlciA6OiBUaGUgZnVuY3Rpb24gdG8gc3BsaXQgQmV6aWVyIGFyY3MuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1pbnkgICAgIDo6IEEgbG93ZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4eSAgICAgOjogQW4gdXBwZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIG9uIHJlbmRlciBwb29sIG92ZXJmbG93LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBCZXppZXJfRG93biggUkFTX0FSR1MgSW50ICAgICAgICBkZWdyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICBUU3BsaXR0ZXIgIHNwbGl0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgTG9uZyAgICAgICBtaW55LAorICAgICAgICAgICAgICAgICAgICAgICAgTG9uZyAgICAgICBtYXh5ICkKKyAgeworICAgIFRQb2ludCogIGFyYyA9IHJhcy5hcmM7CisgICAgQm9vbCAgICAgcmVzdWx0LCBmcmVzaDsKKworCisgICAgYXJjWzBdLnkgPSAtYXJjWzBdLnk7CisgICAgYXJjWzFdLnkgPSAtYXJjWzFdLnk7CisgICAgYXJjWzJdLnkgPSAtYXJjWzJdLnk7CisgICAgaWYgKCBkZWdyZWUgPiAyICkKKyAgICAgIGFyY1szXS55ID0gLWFyY1szXS55OworCisgICAgZnJlc2ggPSByYXMuZnJlc2g7CisKKyAgICByZXN1bHQgPSBCZXppZXJfVXAoIFJBU19WQVJTIGRlZ3JlZSwgc3BsaXR0ZXIsIC1tYXh5LCAtbWlueSApOworCisgICAgaWYgKCBmcmVzaCAmJiAhcmFzLmZyZXNoICkKKyAgICAgIHJhcy5jUHJvZmlsZS0+c3RhcnQgPSAtcmFzLmNQcm9maWxlLT5zdGFydDsKKworICAgIGFyY1swXS55ID0gLWFyY1swXS55OworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExpbmVfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluamVjdCBhIG5ldyBsaW5lIHNlZ21lbnQgYW5kIGFkanVzdCB0aGUgUHJvZmlsZXMgbGlzdC4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeCA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgICAqLworICAvKiAgICAgICAgaXMgc3RvcmVkIGluIGBsYXN0WCcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeSA6OiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgICAqLworICAvKiAgICAgICAgaXMgc3RvcmVkIGluIGBsYXN0WScpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdyBvciBpbmNvcnJlY3QgICAgKi8KKyAgLyogICBwcm9maWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBMaW5lX1RvKCBSQVNfQVJHUyBMb25nICB4LAorICAgICAgICAgICAgICAgICAgICBMb25nICB5ICkKKyAgeworICAgIC8qIEZpcnN0LCBkZXRlY3QgYSBjaGFuZ2Ugb2YgZGlyZWN0aW9uICovCisKKyAgICBzd2l0Y2ggKCByYXMuc3RhdGUgKQorICAgIHsKKyAgICBjYXNlIFVua25vd25fU3RhdGU6CisgICAgICBpZiAoIHkgPiByYXMubGFzdFkgKQorICAgICAgeworICAgICAgICBpZiAoIE5ld19Qcm9maWxlKCBSQVNfVkFSUyBBc2NlbmRpbmdfU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX0JPVFRPTV9PVkVSU0hPT1QoIHJhcy5sYXN0WSApICkgKQorICAgICAgICAgIHJldHVybiBGQUlMVVJFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIHkgPCByYXMubGFzdFkgKQorICAgICAgICAgIGlmICggTmV3X1Byb2ZpbGUoIFJBU19WQVJTIERlc2NlbmRpbmdfU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfVE9QX09WRVJTSE9PVCggcmFzLmxhc3RZICkgKSApCisgICAgICAgICAgICByZXR1cm4gRkFJTFVSRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBc2NlbmRpbmdfU3RhdGU6CisgICAgICBpZiAoIHkgPCByYXMubGFzdFkgKQorICAgICAgeworICAgICAgICBpZiAoIEVuZF9Qcm9maWxlKCBSQVNfVkFSUyBJU19UT1BfT1ZFUlNIT09UKCByYXMubGFzdFkgKSApIHx8CisgICAgICAgICAgICAgTmV3X1Byb2ZpbGUoIFJBU19WQVJTIERlc2NlbmRpbmdfU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX1RPUF9PVkVSU0hPT1QoIHJhcy5sYXN0WSApICkgKQorICAgICAgICAgIHJldHVybiBGQUlMVVJFOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERlc2NlbmRpbmdfU3RhdGU6CisgICAgICBpZiAoIHkgPiByYXMubGFzdFkgKQorICAgICAgeworICAgICAgICBpZiAoIEVuZF9Qcm9maWxlKCBSQVNfVkFSUyBJU19CT1RUT01fT1ZFUlNIT09UKCByYXMubGFzdFkgKSApIHx8CisgICAgICAgICAgICAgTmV3X1Byb2ZpbGUoIFJBU19WQVJTIEFzY2VuZGluZ19TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfQk9UVE9NX09WRVJTSE9PVCggcmFzLmxhc3RZICkgKSApCisgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICA7CisgICAgfQorCisgICAgLyogVGhlbiBjb21wdXRlIHRoZSBsaW5lcyAqLworCisgICAgc3dpdGNoICggcmFzLnN0YXRlICkKKyAgICB7CisgICAgY2FzZSBBc2NlbmRpbmdfU3RhdGU6CisgICAgICBpZiAoIExpbmVfVXAoIFJBU19WQVJTIHJhcy5sYXN0WCwgcmFzLmxhc3RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCByYXMubWluWSwgcmFzLm1heFkgKSApCisgICAgICAgIHJldHVybiBGQUlMVVJFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERlc2NlbmRpbmdfU3RhdGU6CisgICAgICBpZiAoIExpbmVfRG93biggUkFTX1ZBUlMgcmFzLmxhc3RYLCByYXMubGFzdFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgcmFzLm1pblksIHJhcy5tYXhZICkgKQorICAgICAgICByZXR1cm4gRkFJTFVSRTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIDsKKyAgICB9CisKKyAgICByYXMubGFzdFggPSB4OworICAgIHJhcy5sYXN0WSA9IHk7CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29uaWNfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5qZWN0IGEgbmV3IGNvbmljIGFyYyBhbmQgYWRqdXN0IHRoZSBwcm9maWxlIGxpc3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBjeCA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBuZXcgY29udHJvbCBwb2ludC4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGN5IDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIG5ldyBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeCAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICAqLworICAvKiAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeSAgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICAqLworICAvKiAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFknKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdyBvciBpbmNvcnJlY3QgICAgKi8KKyAgLyogICBwcm9maWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBDb25pY19UbyggUkFTX0FSR1MgTG9uZyAgY3gsCisgICAgICAgICAgICAgICAgICAgICBMb25nICBjeSwKKyAgICAgICAgICAgICAgICAgICAgIExvbmcgIHgsCisgICAgICAgICAgICAgICAgICAgICBMb25nICB5ICkKKyAgeworICAgIExvbmcgICAgIHkxLCB5MiwgeTMsIHgzLCB5bWluLCB5bWF4OworICAgIFRTdGF0ZXMgIHN0YXRlX2JlejsKKworCisgICAgcmFzLmFyYyAgICAgID0gcmFzLmFyY3M7CisgICAgcmFzLmFyY1syXS54ID0gcmFzLmxhc3RYOworICAgIHJhcy5hcmNbMl0ueSA9IHJhcy5sYXN0WTsKKyAgICByYXMuYXJjWzFdLnggPSBjeDsKKyAgICByYXMuYXJjWzFdLnkgPSBjeTsKKyAgICByYXMuYXJjWzBdLnggPSB4OworICAgIHJhcy5hcmNbMF0ueSA9IHk7CisKKyAgICBkbworICAgIHsKKyAgICAgIHkxID0gcmFzLmFyY1syXS55OworICAgICAgeTIgPSByYXMuYXJjWzFdLnk7CisgICAgICB5MyA9IHJhcy5hcmNbMF0ueTsKKyAgICAgIHgzID0gcmFzLmFyY1swXS54OworCisgICAgICAvKiBmaXJzdCwgY2F0ZWdvcml6ZSB0aGUgQmV6aWVyIGFyYyAqLworCisgICAgICBpZiAoIHkxIDw9IHkzICkKKyAgICAgIHsKKyAgICAgICAgeW1pbiA9IHkxOworICAgICAgICB5bWF4ID0geTM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHltaW4gPSB5MzsKKyAgICAgICAgeW1heCA9IHkxOworICAgICAgfQorCisgICAgICBpZiAoIHkyIDwgeW1pbiB8fCB5MiA+IHltYXggKQorICAgICAgeworICAgICAgICAvKiB0aGlzIGFyYyBoYXMgbm8gZ2l2ZW4gZGlyZWN0aW9uLCBzcGxpdCBpdCEgKi8KKyAgICAgICAgU3BsaXRfQ29uaWMoIHJhcy5hcmMgKTsKKyAgICAgICAgcmFzLmFyYyArPSAyOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIHkxID09IHkzICkKKyAgICAgIHsKKyAgICAgICAgLyogdGhpcyBhcmMgaXMgZmxhdCwgaWdub3JlIGl0IGFuZCBwb3AgaXQgZnJvbSB0aGUgQmV6aWVyIHN0YWNrICovCisgICAgICAgIHJhcy5hcmMgLT0gMjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogdGhlIGFyYyBpcyB5LW1vbm90b25vdXMsIGVpdGhlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyAqLworICAgICAgICAvKiBkZXRlY3QgYSBjaGFuZ2Ugb2YgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHN0YXRlX2JleiA9IHkxIDwgeTMgPyBBc2NlbmRpbmdfU3RhdGUgOiBEZXNjZW5kaW5nX1N0YXRlOworICAgICAgICBpZiAoIHJhcy5zdGF0ZSAhPSBzdGF0ZV9iZXogKQorICAgICAgICB7CisgICAgICAgICAgQm9vbCAgbyA9IHN0YXRlX2JleiA9PSBBc2NlbmRpbmdfU3RhdGUgPyBJU19CT1RUT01fT1ZFUlNIT09UKCB5MSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJU19UT1BfT1ZFUlNIT09UKCB5MSApOworCisKKyAgICAgICAgICAvKiBmaW5hbGl6ZSBjdXJyZW50IHByb2ZpbGUgaWYgYW55ICovCisgICAgICAgICAgaWYgKCByYXMuc3RhdGUgIT0gVW5rbm93bl9TdGF0ZSAmJgorICAgICAgICAgICAgICAgRW5kX1Byb2ZpbGUoIFJBU19WQVJTIG8gKSAgKQorICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgLyogY3JlYXRlIGEgbmV3IHByb2ZpbGUgKi8KKyAgICAgICAgICBpZiAoIE5ld19Qcm9maWxlKCBSQVNfVkFSUyBzdGF0ZV9iZXosIG8gKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBub3cgY2FsbCB0aGUgYXBwcm9wcmlhdGUgcm91dGluZSAqLworICAgICAgICBpZiAoIHN0YXRlX2JleiA9PSBBc2NlbmRpbmdfU3RhdGUgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBCZXppZXJfVXAoIFJBU19WQVJTIDIsIFNwbGl0X0NvbmljLCByYXMubWluWSwgcmFzLm1heFkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmICggQmV6aWVyX0Rvd24oIFJBU19WQVJTIDIsIFNwbGl0X0NvbmljLCByYXMubWluWSwgcmFzLm1heFkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisKKyAgICB9IHdoaWxlICggcmFzLmFyYyA+PSByYXMuYXJjcyApOworCisgICAgcmFzLmxhc3RYID0geDM7CisgICAgcmFzLmxhc3RZID0geTM7CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKworICBGYWlsOgorICAgIHJldHVybiBGQUlMVVJFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDdWJpY19UbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbmplY3QgYSBuZXcgY3ViaWMgYXJjIGFuZCBhZGp1c3QgdGhlIHByb2ZpbGUgbGlzdC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGN4MSA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBmaXJzdCBuZXcgY29udHJvbCBwb2ludC4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgY3kxIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIGZpcnN0IG5ldyBjb250cm9sIHBvaW50LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBjeDIgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3Mgc2Vjb25kIG5ldyBjb250cm9sIHBvaW50LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGN5MiA6OiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBzZWNvbmQgbmV3IGNvbnRyb2wgcG9pbnQuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeCAgIDo6IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50IGlzICAqLworICAvKiAgICAgICAgICBzdG9yZWQgaW4gYGxhc3RYJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeSAgIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50IGlzICAqLworICAvKiAgICAgICAgICBzdG9yZWQgaW4gYGxhc3RZJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdyBvciBpbmNvcnJlY3QgICAgKi8KKyAgLyogICBwcm9maWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgQm9vbAorICBDdWJpY19UbyggUkFTX0FSR1MgTG9uZyAgY3gxLAorICAgICAgICAgICAgICAgICAgICAgTG9uZyAgY3kxLAorICAgICAgICAgICAgICAgICAgICAgTG9uZyAgY3gyLAorICAgICAgICAgICAgICAgICAgICAgTG9uZyAgY3kyLAorICAgICAgICAgICAgICAgICAgICAgTG9uZyAgeCwKKyAgICAgICAgICAgICAgICAgICAgIExvbmcgIHkgKQorICB7CisgICAgTG9uZyAgICAgeTEsIHkyLCB5MywgeTQsIHg0LCB5bWluMSwgeW1heDEsIHltaW4yLCB5bWF4MjsKKyAgICBUU3RhdGVzICBzdGF0ZV9iZXo7CisKKworICAgIHJhcy5hcmMgICAgICA9IHJhcy5hcmNzOworICAgIHJhcy5hcmNbM10ueCA9IHJhcy5sYXN0WDsKKyAgICByYXMuYXJjWzNdLnkgPSByYXMubGFzdFk7CisgICAgcmFzLmFyY1syXS54ID0gY3gxOworICAgIHJhcy5hcmNbMl0ueSA9IGN5MTsKKyAgICByYXMuYXJjWzFdLnggPSBjeDI7CisgICAgcmFzLmFyY1sxXS55ID0gY3kyOworICAgIHJhcy5hcmNbMF0ueCA9IHg7CisgICAgcmFzLmFyY1swXS55ID0geTsKKworICAgIGRvCisgICAgeworICAgICAgeTEgPSByYXMuYXJjWzNdLnk7CisgICAgICB5MiA9IHJhcy5hcmNbMl0ueTsKKyAgICAgIHkzID0gcmFzLmFyY1sxXS55OworICAgICAgeTQgPSByYXMuYXJjWzBdLnk7CisgICAgICB4NCA9IHJhcy5hcmNbMF0ueDsKKworICAgICAgLyogZmlyc3QsIGNhdGVnb3JpemUgdGhlIEJlemllciBhcmMgKi8KKworICAgICAgaWYgKCB5MSA8PSB5NCApCisgICAgICB7CisgICAgICAgIHltaW4xID0geTE7CisgICAgICAgIHltYXgxID0geTQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHltaW4xID0geTQ7CisgICAgICAgIHltYXgxID0geTE7CisgICAgICB9CisKKyAgICAgIGlmICggeTIgPD0geTMgKQorICAgICAgeworICAgICAgICB5bWluMiA9IHkyOworICAgICAgICB5bWF4MiA9IHkzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB5bWluMiA9IHkzOworICAgICAgICB5bWF4MiA9IHkyOworICAgICAgfQorCisgICAgICBpZiAoIHltaW4yIDwgeW1pbjEgfHwgeW1heDIgPiB5bWF4MSApCisgICAgICB7CisgICAgICAgIC8qIHRoaXMgYXJjIGhhcyBubyBnaXZlbiBkaXJlY3Rpb24sIHNwbGl0IGl0ISAqLworICAgICAgICBTcGxpdF9DdWJpYyggcmFzLmFyYyApOworICAgICAgICByYXMuYXJjICs9IDM7CisgICAgICB9CisgICAgICBlbHNlIGlmICggeTEgPT0geTQgKQorICAgICAgeworICAgICAgICAvKiB0aGlzIGFyYyBpcyBmbGF0LCBpZ25vcmUgaXQgYW5kIHBvcCBpdCBmcm9tIHRoZSBCZXppZXIgc3RhY2sgKi8KKyAgICAgICAgcmFzLmFyYyAtPSAzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBzdGF0ZV9iZXogPSAoIHkxIDw9IHk0ICkgPyBBc2NlbmRpbmdfU3RhdGUgOiBEZXNjZW5kaW5nX1N0YXRlOworCisgICAgICAgIC8qIGRldGVjdCBhIGNoYW5nZSBvZiBkaXJlY3Rpb24gKi8KKyAgICAgICAgaWYgKCByYXMuc3RhdGUgIT0gc3RhdGVfYmV6ICkKKyAgICAgICAgeworICAgICAgICAgIEJvb2wgIG8gPSBzdGF0ZV9iZXogPT0gQXNjZW5kaW5nX1N0YXRlID8gSVNfQk9UVE9NX09WRVJTSE9PVCggeTEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSVNfVE9QX09WRVJTSE9PVCggeTEgKTsKKworCisgICAgICAgICAgLyogZmluYWxpemUgY3VycmVudCBwcm9maWxlIGlmIGFueSAqLworICAgICAgICAgIGlmICggcmFzLnN0YXRlICE9IFVua25vd25fU3RhdGUgJiYKKyAgICAgICAgICAgICAgIEVuZF9Qcm9maWxlKCBSQVNfVkFSUyBvICkgICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIGlmICggTmV3X1Byb2ZpbGUoIFJBU19WQVJTIHN0YXRlX2JleiwgbyApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNvbXB1dGUgaW50ZXJzZWN0aW9ucyAqLworICAgICAgICBpZiAoIHN0YXRlX2JleiA9PSBBc2NlbmRpbmdfU3RhdGUgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBCZXppZXJfVXAoIFJBU19WQVJTIDMsIFNwbGl0X0N1YmljLCByYXMubWluWSwgcmFzLm1heFkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmICggQmV6aWVyX0Rvd24oIFJBU19WQVJTIDMsIFNwbGl0X0N1YmljLCByYXMubWluWSwgcmFzLm1heFkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisKKyAgICB9IHdoaWxlICggcmFzLmFyYyA+PSByYXMuYXJjcyApOworCisgICAgcmFzLmxhc3RYID0geDQ7CisgICAgcmFzLmxhc3RZID0geTQ7CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKworICBGYWlsOgorICAgIHJldHVybiBGQUlMVVJFOworICB9CisKKworI3VuZGVmICBTV0FQXworI2RlZmluZSBTV0FQXyggeCwgeSApICBkbyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMb25nICBzd2FwID0geDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geTsgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBzd2FwOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERlY29tcG9zZV9DdXJ2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNjYW4gdGhlIG91dGxpbmUgYXJyYXlzIGluIG9yZGVyIHRvIGVtaXQgaW5kaXZpZHVhbCBzZWdtZW50cyBhbmQgICAqLworICAvKiAgICBCZXppZXJzIGJ5IGNhbGxpbmcgTGluZV9UbygpIGFuZCBCZXppZXJfVG8oKS4gIEl0IGhhbmRsZXMgYWxsICAgICAgKi8KKyAgLyogICAgd2VpcmQgY2FzZXMsIGxpa2Ugd2hlbiB0aGUgZmlyc3QgcG9pbnQgaXMgb2ZmIHRoZSBjdXJ2ZSwgb3Igd2hlbiAgICovCisgIC8qICAgIHRoZXJlIGFyZSBzaW1wbHkgbm8gYG9uJyBwb2ludHMgaW4gdGhlIGNvbnRvdXIhICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZpcnN0ICAgOjogVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgY29udG91ci4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGFzdCAgICA6OiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgcG9pbnQgaW4gdGhlIGNvbnRvdXIuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmbGlwcGVkIDo6IElmIHNldCwgZmxpcCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjdXJ2ZS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBCb29sCisgIERlY29tcG9zZV9DdXJ2ZSggUkFTX0FSR1MgVVNob3J0ICBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2hvcnQgIGxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ICAgICBmbGlwcGVkICkKKyAgeworICAgIEZUX1ZlY3RvciAgIHZfbGFzdDsKKyAgICBGVF9WZWN0b3IgICB2X2NvbnRyb2w7CisgICAgRlRfVmVjdG9yICAgdl9zdGFydDsKKworICAgIEZUX1ZlY3RvciogIHBvaW50czsKKyAgICBGVF9WZWN0b3IqICBwb2ludDsKKyAgICBGVF9WZWN0b3IqICBsaW1pdDsKKyAgICBjaGFyKiAgICAgICB0YWdzOworCisgICAgVUludCAgICAgICAgdGFnOyAgICAgICAvKiBjdXJyZW50IHBvaW50J3Mgc3RhdGUgICAgICAgICAgICovCisKKworICAgIHBvaW50cyA9IHJhcy5vdXRsaW5lLnBvaW50czsKKyAgICBsaW1pdCAgPSBwb2ludHMgKyBsYXN0OworCisgICAgdl9zdGFydC54ID0gU0NBTEVEKCBwb2ludHNbZmlyc3RdLnggKTsKKyAgICB2X3N0YXJ0LnkgPSBTQ0FMRUQoIHBvaW50c1tmaXJzdF0ueSApOworICAgIHZfbGFzdC54ICA9IFNDQUxFRCggcG9pbnRzW2xhc3RdLnggKTsKKyAgICB2X2xhc3QueSAgPSBTQ0FMRUQoIHBvaW50c1tsYXN0XS55ICk7CisKKyAgICBpZiAoIGZsaXBwZWQgKQorICAgIHsKKyAgICAgIFNXQVBfKCB2X3N0YXJ0LngsIHZfc3RhcnQueSApOworICAgICAgU1dBUF8oIHZfbGFzdC54LCB2X2xhc3QueSApOworICAgIH0KKworICAgIHZfY29udHJvbCA9IHZfc3RhcnQ7CisKKyAgICBwb2ludCA9IHBvaW50cyArIGZpcnN0OworICAgIHRhZ3MgID0gcmFzLm91dGxpbmUudGFncyArIGZpcnN0OworCisgICAgLyogc2V0IHNjYW4gbW9kZSBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAoIHRhZ3NbMF0gJiBGVF9DVVJWRV9UQUdfSEFTX1NDQU5NT0RFICkKKyAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCA9IChCeXRlKXRhZ3NbMF0gPj4gNTsKKworICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworCisgICAgLyogQSBjb250b3VyIGNhbm5vdCBzdGFydCB3aXRoIGEgY3ViaWMgY29udHJvbCBwb2ludCEgKi8KKyAgICBpZiAoIHRhZyA9PSBGVF9DVVJWRV9UQUdfQ1VCSUMgKQorICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICAvKiBjaGVjayBmaXJzdCBwb2ludCB0byBkZXRlcm1pbmUgb3JpZ2luICovCisgICAgaWYgKCB0YWcgPT0gRlRfQ1VSVkVfVEFHX0NPTklDICkKKyAgICB7CisgICAgICAvKiBmaXJzdCBwb2ludCBpcyBjb25pYyBjb250cm9sLiAgWWVzLCB0aGlzIGhhcHBlbnMuICovCisgICAgICBpZiAoIEZUX0NVUlZFX1RBRyggcmFzLm91dGxpbmUudGFnc1tsYXN0XSApID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICB7CisgICAgICAgIC8qIHN0YXJ0IGF0IGxhc3QgcG9pbnQgaWYgaXQgaXMgb24gdGhlIGN1cnZlICovCisgICAgICAgIHZfc3RhcnQgPSB2X2xhc3Q7CisgICAgICAgIGxpbWl0LS07CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGlmIGJvdGggZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBjb25pYywgICAgICAgICAqLworICAgICAgICAvKiBzdGFydCBhdCB0aGVpciBtaWRkbGUgYW5kIHJlY29yZCBpdHMgcG9zaXRpb24gICAgKi8KKyAgICAgICAgLyogZm9yIGNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHZfc3RhcnQueCA9ICggdl9zdGFydC54ICsgdl9sYXN0LnggKSAvIDI7CisgICAgICAgIHZfc3RhcnQueSA9ICggdl9zdGFydC55ICsgdl9sYXN0LnkgKSAvIDI7CisKKyAgICAgLyogdl9sYXN0ID0gdl9zdGFydDsgKi8KKyAgICAgIH0KKyAgICAgIHBvaW50LS07CisgICAgICB0YWdzLS07CisgICAgfQorCisgICAgcmFzLmxhc3RYID0gdl9zdGFydC54OworICAgIHJhcy5sYXN0WSA9IHZfc3RhcnQueTsKKworICAgIHdoaWxlICggcG9pbnQgPCBsaW1pdCApCisgICAgeworICAgICAgcG9pbnQrKzsKKyAgICAgIHRhZ3MrKzsKKworICAgICAgdGFnID0gRlRfQ1VSVkVfVEFHKCB0YWdzWzBdICk7CisKKyAgICAgIHN3aXRjaCAoIHRhZyApCisgICAgICB7CisgICAgICBjYXNlIEZUX0NVUlZFX1RBR19PTjogIC8qIGVtaXQgYSBzaW5nbGUgbGluZV90byAqLworICAgICAgICB7CisgICAgICAgICAgTG9uZyAgeCwgeTsKKworCisgICAgICAgICAgeCA9IFNDQUxFRCggcG9pbnQtPnggKTsKKyAgICAgICAgICB5ID0gU0NBTEVEKCBwb2ludC0+eSApOworICAgICAgICAgIGlmICggZmxpcHBlZCApCisgICAgICAgICAgICBTV0FQXyggeCwgeSApOworCisgICAgICAgICAgaWYgKCBMaW5lX1RvKCBSQVNfVkFSUyB4LCB5ICkgKQorICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX0NPTklDOiAgLyogY29uc3VtZSBjb25pYyBhcmNzICovCisgICAgICAgIHZfY29udHJvbC54ID0gU0NBTEVEKCBwb2ludFswXS54ICk7CisgICAgICAgIHZfY29udHJvbC55ID0gU0NBTEVEKCBwb2ludFswXS55ICk7CisKKyAgICAgICAgaWYgKCBmbGlwcGVkICkKKyAgICAgICAgICBTV0FQXyggdl9jb250cm9sLngsIHZfY29udHJvbC55ICk7CisKKyAgICAgIERvX0NvbmljOgorICAgICAgICBpZiAoIHBvaW50IDwgbGltaXQgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVmVjdG9yICB2X21pZGRsZTsKKyAgICAgICAgICBMb25nICAgICAgIHgsIHk7CisKKworICAgICAgICAgIHBvaW50Kys7CisgICAgICAgICAgdGFncysrOworICAgICAgICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworCisgICAgICAgICAgeCA9IFNDQUxFRCggcG9pbnRbMF0ueCApOworICAgICAgICAgIHkgPSBTQ0FMRUQoIHBvaW50WzBdLnkgKTsKKworICAgICAgICAgIGlmICggZmxpcHBlZCApCisgICAgICAgICAgICBTV0FQXyggeCwgeSApOworCisgICAgICAgICAgaWYgKCB0YWcgPT0gRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIENvbmljX1RvKCBSQVNfVkFSUyB2X2NvbnRyb2wueCwgdl9jb250cm9sLnksIHgsIHkgKSApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggdGFnICE9IEZUX0NVUlZFX1RBR19DT05JQyApCisgICAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICAgIHZfbWlkZGxlLnggPSAoIHZfY29udHJvbC54ICsgeCApIC8gMjsKKyAgICAgICAgICB2X21pZGRsZS55ID0gKCB2X2NvbnRyb2wueSArIHkgKSAvIDI7CisKKyAgICAgICAgICBpZiAoIENvbmljX1RvKCBSQVNfVkFSUyB2X2NvbnRyb2wueCwgdl9jb250cm9sLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdl9taWRkbGUueCwgIHZfbWlkZGxlLnkgKSApCisgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICB2X2NvbnRyb2wueCA9IHg7CisgICAgICAgICAgdl9jb250cm9sLnkgPSB5OworCisgICAgICAgICAgZ290byBEb19Db25pYzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggQ29uaWNfVG8oIFJBU19WQVJTIHZfY29udHJvbC54LCB2X2NvbnRyb2wueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdl9zdGFydC54LCAgIHZfc3RhcnQueSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZ290byBDbG9zZTsKKworICAgICAgZGVmYXVsdDogIC8qIEZUX0NVUlZFX1RBR19DVUJJQyAqLworICAgICAgICB7CisgICAgICAgICAgTG9uZyAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MzsKKworCisgICAgICAgICAgaWYgKCBwb2ludCArIDEgPiBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgIEZUX0NVUlZFX1RBRyggdGFnc1sxXSApICE9IEZUX0NVUlZFX1RBR19DVUJJQyApCisgICAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICAgIHBvaW50ICs9IDI7CisgICAgICAgICAgdGFncyAgKz0gMjsKKworICAgICAgICAgIHgxID0gU0NBTEVEKCBwb2ludFstMl0ueCApOworICAgICAgICAgIHkxID0gU0NBTEVEKCBwb2ludFstMl0ueSApOworICAgICAgICAgIHgyID0gU0NBTEVEKCBwb2ludFstMV0ueCApOworICAgICAgICAgIHkyID0gU0NBTEVEKCBwb2ludFstMV0ueSApOworCisgICAgICAgICAgaWYgKCBmbGlwcGVkICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBTV0FQXyggeDEsIHkxICk7CisgICAgICAgICAgICBTV0FQXyggeDIsIHkyICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBwb2ludCA8PSBsaW1pdCApCisgICAgICAgICAgeworICAgICAgICAgICAgeDMgPSBTQ0FMRUQoIHBvaW50WzBdLnggKTsKKyAgICAgICAgICAgIHkzID0gU0NBTEVEKCBwb2ludFswXS55ICk7CisKKyAgICAgICAgICAgIGlmICggZmxpcHBlZCApCisgICAgICAgICAgICAgIFNXQVBfKCB4MywgeTMgKTsKKworICAgICAgICAgICAgaWYgKCBDdWJpY19UbyggUkFTX1ZBUlMgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MyApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBDdWJpY19UbyggUkFTX1ZBUlMgeDEsIHkxLCB4MiwgeTIsIHZfc3RhcnQueCwgdl9zdGFydC55ICkgKQorICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIGdvdG8gQ2xvc2U7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBjbG9zZSB0aGUgY29udG91ciB3aXRoIGEgbGluZSBzZWdtZW50ICovCisgICAgaWYgKCBMaW5lX1RvKCBSQVNfVkFSUyB2X3N0YXJ0LngsIHZfc3RhcnQueSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICBDbG9zZToKKyAgICByZXR1cm4gU1VDQ0VTUzsKKworICBJbnZhbGlkX091dGxpbmU6CisgICAgcmFzLmVycm9yID0gRlRfVEhST1coIEludmFsaWQgKTsKKworICBGYWlsOgorICAgIHJldHVybiBGQUlMVVJFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb252ZXJ0X0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb252ZXJ0IGEgZ2x5cGggaW50byBhIHNlcmllcyBvZiBzZWdtZW50cyBhbmQgYXJjcyBhbmQgbWFrZSBhICAgICAgKi8KKyAgLyogICAgcHJvZmlsZXMgbGlzdCB3aXRoIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmxpcHBlZCA6OiBJZiBzZXQsIGZsaXAgdGhlIGRpcmVjdGlvbiBvZiBjdXJ2ZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIGlmIGFueSBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nICAgICovCisgIC8qICAgIHJlbmRlcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEJvb2wKKyAgQ29udmVydF9HbHlwaCggUkFTX0FSR1MgSW50ICBmbGlwcGVkICkKKyAgeworICAgIEludCAgIGk7CisgICAgVUludCAgc3RhcnQ7CisKKworICAgIHJhcy5mUHJvZmlsZSA9IE5VTEw7CisgICAgcmFzLmpvaW50ICAgID0gRkFMU0U7CisgICAgcmFzLmZyZXNoICAgID0gRkFMU0U7CisKKyAgICByYXMubWF4QnVmZiAgPSByYXMuc2l6ZUJ1ZmYgLSBBbGlnblByb2ZpbGVTaXplOworCisgICAgcmFzLm51bVR1cm5zID0gMDsKKworICAgIHJhcy5jUHJvZmlsZSAgICAgICAgID0gKFBQcm9maWxlKXJhcy50b3A7CisgICAgcmFzLmNQcm9maWxlLT5vZmZzZXQgPSByYXMudG9wOworICAgIHJhcy5udW1fUHJvZnMgICAgICAgID0gMDsKKworICAgIHN0YXJ0ID0gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgcmFzLm91dGxpbmUubl9jb250b3VyczsgaSsrICkKKyAgICB7CisgICAgICBQUHJvZmlsZSAgbGFzdFByb2ZpbGU7CisgICAgICBCb29sICAgICAgbzsKKworCisgICAgICByYXMuc3RhdGUgICAgPSBVbmtub3duX1N0YXRlOworICAgICAgcmFzLmdQcm9maWxlID0gTlVMTDsKKworICAgICAgaWYgKCBEZWNvbXBvc2VfQ3VydmUoIFJBU19WQVJTIChVU2hvcnQpc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVTaG9ydClyYXMub3V0bGluZS5jb250b3Vyc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwcGVkICkgKQorICAgICAgICByZXR1cm4gRkFJTFVSRTsKKworICAgICAgc3RhcnQgPSAoVVNob3J0KXJhcy5vdXRsaW5lLmNvbnRvdXJzW2ldICsgMTsKKworICAgICAgLyogd2UgbXVzdCBub3cgY2hlY2sgd2hldGhlciB0aGUgZXh0cmVtZSBhcmNzIGpvaW4gb3Igbm90ICovCisgICAgICBpZiAoIEZSQUMoIHJhcy5sYXN0WSApID09IDAgJiYKKyAgICAgICAgICAgcmFzLmxhc3RZID49IHJhcy5taW5ZICAmJgorICAgICAgICAgICByYXMubGFzdFkgPD0gcmFzLm1heFkgICkKKyAgICAgICAgaWYgKCByYXMuZ1Byb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICggcmFzLmdQcm9maWxlLT5mbGFncyAmIEZsb3dfVXAgKSA9PQorICAgICAgICAgICAgICAgKCByYXMuY1Byb2ZpbGUtPmZsYWdzICYgRmxvd19VcCApICkKKyAgICAgICAgICByYXMudG9wLS07CisgICAgICAgIC8qIE5vdGUgdGhhdCByYXMuZ1Byb2ZpbGUgY2FuIGJlIG5pbCBpZiB0aGUgY29udG91ciB3YXMgdG9vIHNtYWxsICovCisgICAgICAgIC8qIHRvIGJlIGRyYXduLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGxhc3RQcm9maWxlID0gcmFzLmNQcm9maWxlOworICAgICAgaWYgKCByYXMudG9wICE9IHJhcy5jUHJvZmlsZS0+b2Zmc2V0ICYmCisgICAgICAgICAgICggcmFzLmNQcm9maWxlLT5mbGFncyAmIEZsb3dfVXAgKSApCisgICAgICAgIG8gPSBJU19UT1BfT1ZFUlNIT09UKCByYXMubGFzdFkgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbyA9IElTX0JPVFRPTV9PVkVSU0hPT1QoIHJhcy5sYXN0WSApOworICAgICAgaWYgKCBFbmRfUHJvZmlsZSggUkFTX1ZBUlMgbyApICkKKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7CisKKyAgICAgIC8qIGNsb3NlIHRoZSBgbmV4dCBwcm9maWxlIGluIGNvbnRvdXInIGxpbmtlZCBsaXN0ICovCisgICAgICBpZiAoIHJhcy5nUHJvZmlsZSApCisgICAgICAgIGxhc3RQcm9maWxlLT5uZXh0ID0gcmFzLmdQcm9maWxlOworICAgIH0KKworICAgIGlmICggRmluYWxpemVfUHJvZmlsZV9UYWJsZSggUkFTX1ZBUiApICkKKyAgICAgIHJldHVybiBGQUlMVVJFOworCisgICAgcmV0dXJuIChCb29sKSggcmFzLnRvcCA8IHJhcy5tYXhCdWZmID8gU1VDQ0VTUyA6IEZBSUxVUkUgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KKyAgLyoqICBTQ0FOLUxJTkUgU1dFRVBTIEFORCBEUkFXSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBJbml0X0xpbmtlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYW4gZW1wdHkgbGlua2VkIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbml0X0xpbmtlZCggVFByb2ZpbGVMaXN0KiAgbCApCisgIHsKKyAgICAqbCA9IE5VTEw7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIEluc05ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnNlcnRzIGEgbmV3IHByb2ZpbGUgaW4gYSBsaW5rZWQgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc05ldyggUFByb2ZpbGVMaXN0ICBsaXN0LAorICAgICAgICAgIFBQcm9maWxlICAgICAgcHJvZmlsZSApCisgIHsKKyAgICBQUHJvZmlsZSAgKm9sZCwgY3VycmVudDsKKyAgICBMb25nICAgICAgIHg7CisKKworICAgIG9sZCAgICAgPSBsaXN0OworICAgIGN1cnJlbnQgPSAqb2xkOworICAgIHggICAgICAgPSBwcm9maWxlLT5YOworCisgICAgd2hpbGUgKCBjdXJyZW50ICkKKyAgICB7CisgICAgICBpZiAoIHggPCBjdXJyZW50LT5YICkKKyAgICAgICAgYnJlYWs7CisgICAgICBvbGQgICAgID0gJmN1cnJlbnQtPmxpbms7CisgICAgICBjdXJyZW50ID0gKm9sZDsKKyAgICB9CisKKyAgICBwcm9maWxlLT5saW5rID0gY3VycmVudDsKKyAgICAqb2xkICAgICAgICAgID0gcHJvZmlsZTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgRGVsT2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJlbW92ZXMgYW4gb2xkIHByb2ZpbGUgZnJvbSBhIGxpbmtlZCBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgRGVsT2xkKCBQUHJvZmlsZUxpc3QgIGxpc3QsCisgICAgICAgICAgUFByb2ZpbGUgICAgICBwcm9maWxlICkKKyAgeworICAgIFBQcm9maWxlICAqb2xkLCBjdXJyZW50OworCisKKyAgICBvbGQgICAgID0gbGlzdDsKKyAgICBjdXJyZW50ID0gKm9sZDsKKworICAgIHdoaWxlICggY3VycmVudCApCisgICAgeworICAgICAgaWYgKCBjdXJyZW50ID09IHByb2ZpbGUgKQorICAgICAgeworICAgICAgICAqb2xkID0gY3VycmVudC0+bGluazsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBvbGQgICAgID0gJmN1cnJlbnQtPmxpbms7CisgICAgICBjdXJyZW50ID0gKm9sZDsKKyAgICB9CisKKyAgICAvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IHRoZXJlLCB1bmxlc3MgdGhlIHByb2ZpbGUgd2FzIG5vdCBwYXJ0IG9mICovCisgICAgLyogdGhlIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBTb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU29ydHMgYSB0cmFjZSBsaXN0LiAgSW4gOTUlLCB0aGUgbGlzdCBpcyBhbHJlYWR5IHNvcnRlZC4gIFdlIG5lZWQgICovCisgIC8qICAgIGFuIGFsZ29yaXRobSB3aGljaCBpcyBmYXN0IGluIHRoaXMgY2FzZS4gIEJ1YmJsZSBzb3J0IGlzIGVub3VnaCAgICAqLworICAvKiAgICBhbmQgc2ltcGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIFNvcnQoIFBQcm9maWxlTGlzdCAgbGlzdCApCisgIHsKKyAgICBQUHJvZmlsZSAgKm9sZCwgY3VycmVudCwgbmV4dDsKKworCisgICAgLyogRmlyc3QsIHNldCB0aGUgbmV3IFggY29vcmRpbmF0ZSBvZiBlYWNoIHByb2ZpbGUgKi8KKyAgICBjdXJyZW50ID0gKmxpc3Q7CisgICAgd2hpbGUgKCBjdXJyZW50ICkKKyAgICB7CisgICAgICBjdXJyZW50LT5YICAgICAgID0gKmN1cnJlbnQtPm9mZnNldDsKKyAgICAgIGN1cnJlbnQtPm9mZnNldCArPSBjdXJyZW50LT5mbGFncyAmIEZsb3dfVXAgPyAxIDogLTE7CisgICAgICBjdXJyZW50LT5oZWlnaHQtLTsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5saW5rOworICAgIH0KKworICAgIC8qIFRoZW4gc29ydCB0aGVtICovCisgICAgb2xkICAgICA9IGxpc3Q7CisgICAgY3VycmVudCA9ICpvbGQ7CisKKyAgICBpZiAoICFjdXJyZW50ICkKKyAgICAgIHJldHVybjsKKworICAgIG5leHQgPSBjdXJyZW50LT5saW5rOworCisgICAgd2hpbGUgKCBuZXh0ICkKKyAgICB7CisgICAgICBpZiAoIGN1cnJlbnQtPlggPD0gbmV4dC0+WCApCisgICAgICB7CisgICAgICAgIG9sZCAgICAgPSAmY3VycmVudC0+bGluazsKKyAgICAgICAgY3VycmVudCA9ICpvbGQ7CisKKyAgICAgICAgaWYgKCAhY3VycmVudCApCisgICAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAqb2xkICAgICAgICAgID0gbmV4dDsKKyAgICAgICAgY3VycmVudC0+bGluayA9IG5leHQtPmxpbms7CisgICAgICAgIG5leHQtPmxpbmsgICAgPSBjdXJyZW50OworCisgICAgICAgIG9sZCAgICAgPSBsaXN0OworICAgICAgICBjdXJyZW50ID0gKm9sZDsKKyAgICAgIH0KKworICAgICAgbmV4dCA9IGN1cnJlbnQtPmxpbms7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBWZXJ0aWNhbCBTd2VlcCBQcm9jZWR1cmUgU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoZXNlIGZvdXIgcm91dGluZXMgYXJlIHVzZWQgZHVyaW5nIHRoZSB2ZXJ0aWNhbCBibGFjay93aGl0ZSBzd2VlcCAgICovCisgIC8qICBwaGFzZSBieSB0aGUgZ2VuZXJpYyBEcmF3X1N3ZWVwKCkgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgVmVydGljYWxfU3dlZXBfSW5pdCggUkFTX0FSR1MgU2hvcnQqICBtaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3J0KiAgbWF4ICkKKyAgeworICAgIExvbmcgIHBpdGNoID0gcmFzLnRhcmdldC5waXRjaDsKKworICAgIEZUX1VOVVNFRCggbWF4ICk7CisKKworICAgIHJhcy50cmFjZUluY3IgPSAoU2hvcnQpLXBpdGNoOworICAgIHJhcy50cmFjZU9mcyAgPSAtKm1pbiAqIHBpdGNoOworICAgIGlmICggcGl0Y2ggPiAwICkKKyAgICAgIHJhcy50cmFjZU9mcyArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHBpdGNoOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBWZXJ0aWNhbF9Td2VlcF9TcGFuKCBSQVNfQVJHUyBTaG9ydCAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIHJpZ2h0ICkKKyAgeworICAgIExvbmcgICBlMSwgZTI7CisgICAgQnl0ZSogIHRhcmdldDsKKworICAgIEludCAgZHJvcE91dENvbnRyb2wgPSBsZWZ0LT5mbGFncyAmIDc7CisKKyAgICBGVF9VTlVTRUQoIHkgKTsKKyAgICBGVF9VTlVTRUQoIGxlZnQgKTsKKyAgICBGVF9VTlVTRUQoIHJpZ2h0ICk7CisKKworICAgIC8qIGluIGhpZ2gtcHJlY2lzaW9uIG1vZGUsIHdlIG5lZWQgMTIgZGlnaXRzIGFmdGVyIHRoZSBjb21tYSB0byAqLworICAgIC8qIHJlcHJlc2VudCBtdWx0aXBsZXMgb2YgMS8oMTw8MTIpID0gMS80MDk2ICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX1RSQUNFNygoICIgIHk9JWQgeD1bJS4xMmY7JS4xMmZdLCBkcm9wLW91dD0lZCIsCisgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICB4MSAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICBkcm9wT3V0Q29udHJvbCApKTsKKworICAgIC8qIERyb3Atb3V0IGNvbnRyb2wgKi8KKworICAgIGUxID0gVFJVTkMoIENFSUxJTkcoIHgxICkgKTsKKworICAgIGlmICggZHJvcE91dENvbnRyb2wgIT0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHgyIC0geDEgLSByYXMucHJlY2lzaW9uIDw9IHJhcy5wcmVjaXNpb25faml0dGVyICkKKyAgICAgIGUyID0gZTE7CisgICAgZWxzZQorICAgICAgZTIgPSBUUlVOQyggRkxPT1IoIHgyICkgKTsKKworICAgIGlmICggZTIgPj0gMCAmJiBlMSA8IHJhcy5iV2lkdGggKQorICAgIHsKKyAgICAgIEludCAgIGMxLCBjMjsKKyAgICAgIEJ5dGUgIGYxLCBmMjsKKworCisgICAgICBpZiAoIGUxIDwgMCApCisgICAgICAgIGUxID0gMDsKKyAgICAgIGlmICggZTIgPj0gcmFzLmJXaWR0aCApCisgICAgICAgIGUyID0gcmFzLmJXaWR0aCAtIDE7CisKKyAgICAgIEZUX1RSQUNFNygoICIgLT4geD1bJWQ7JWRdIiwgZTEsIGUyICkpOworCisgICAgICBjMSA9IChTaG9ydCkoIGUxID4+IDMgKTsKKyAgICAgIGMyID0gKFNob3J0KSggZTIgPj4gMyApOworCisgICAgICBmMSA9IChCeXRlKSAgKCAweEZGID4+ICggZTEgJiA3ICkgKTsKKyAgICAgIGYyID0gKEJ5dGUpIH4oIDB4N0YgPj4gKCBlMiAmIDcgKSApOworCisgICAgICB0YXJnZXQgPSByYXMuYlRhcmdldCArIHJhcy50cmFjZU9mcyArIGMxOworICAgICAgYzIgLT0gYzE7CisKKyAgICAgIGlmICggYzIgPiAwICkKKyAgICAgIHsKKyAgICAgICAgdGFyZ2V0WzBdIHw9IGYxOworCisgICAgICAgIC8qIG1lbXNldCgpIGlzIHNsb3dlciB0aGFuIHRoZSBmb2xsb3dpbmcgY29kZSBvbiBtYW55IHBsYXRmb3Jtcy4gKi8KKyAgICAgICAgLyogVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCwgaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMsICAqLworICAgICAgICAvKiB0aGUgc3BhbiBsZW5ndGggaW4gYnl0ZXMgaXMgcmVsYXRpdmVseSBzbWFsbC4gICAgICAgICAgICAgICAgICovCisgICAgICAgIGMyLS07CisgICAgICAgIHdoaWxlICggYzIgPiAwICkKKyAgICAgICAgeworICAgICAgICAgICooKyt0YXJnZXQpID0gMHhGRjsKKyAgICAgICAgICBjMi0tOworICAgICAgICB9CisgICAgICAgIHRhcmdldFsxXSB8PSBmMjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgKnRhcmdldCB8PSAoIGYxICYgZjIgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBWZXJ0aWNhbF9Td2VlcF9Ecm9wKCBSQVNfQVJHUyBTaG9ydCAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIHJpZ2h0ICkKKyAgeworICAgIExvbmcgICBlMSwgZTIsIHB4bDsKKyAgICBTaG9ydCAgYzEsIGYxOworCisKKyAgICBGVF9UUkFDRTcoKCAiICB5PSVkIHg9WyUuMTJmOyUuMTJmXSIsCisgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICB4MSAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiApKTsKKworICAgIC8qIERyb3Atb3V0IGNvbnRyb2wgKi8KKworICAgIC8qICAgZTIgICAgICAgICAgICB4MiAgICAgICAgICAgICAgICAgICAgeDEgICAgICAgICAgIGUxICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rICAgICovCisgICAgLyogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogcGl4ZWwgICAgICAgICBjb250b3VyICAgICAgICAgICAgICBjb250b3VyICAgICAgIHBpeGVsICAqLworICAgIC8qIGNlbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXIgKi8KKworICAgIC8qIGRyb3Atb3V0IG1vZGUgICAgc2NhbiBjb252ZXJzaW9uIHJ1bGVzIChhcyBkZWZpbmVkIGluIE9wZW5UeXBlKSAqLworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIC8qICAwICAgICAgICAgICAgICAgIDEsIDIsIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAxICAgICAgICAgICAgICAgIDEsIDIsIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAyICAgICAgICAgICAgICAgIDEsIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAzICAgICAgICAgICAgICAgIHNhbWUgYXMgbW9kZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICA0ICAgICAgICAgICAgICAgIDEsIDIsIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICA1ICAgICAgICAgICAgICAgIDEsIDIsIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICA2LCA3ICAgICAgICAgICAgIHNhbWUgYXMgbW9kZSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgZTEgID0gQ0VJTElORyggeDEgKTsKKyAgICBlMiAgPSBGTE9PUiAgKCB4MiApOworICAgIHB4bCA9IGUxOworCisgICAgaWYgKCBlMSA+IGUyICkKKyAgICB7CisgICAgICBJbnQgIGRyb3BPdXRDb250cm9sID0gbGVmdC0+ZmxhZ3MgJiA3OworCisKKyAgICAgIEZUX1RSQUNFNygoICIsIGRyb3Atb3V0PSVkIiwgZHJvcE91dENvbnRyb2wgKSk7CisKKyAgICAgIGlmICggZTEgPT0gZTIgKyByYXMucHJlY2lzaW9uICkKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoICggZHJvcE91dENvbnRyb2wgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogc2ltcGxlIGRyb3Atb3V0cyBpbmNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICBweGwgPSBlMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6IC8qIHNtYXJ0IGRyb3Atb3V0cyBpbmNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICBweGwgPSBGTE9PUiggKCB4MSArIHgyIC0gMSApIC8gMiArIHJhcy5wcmVjaXNpb25faGFsZiApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTogLyogc2ltcGxlIGRyb3Atb3V0cyBleGNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgY2FzZSA1OiAvKiBzbWFydCBkcm9wLW91dHMgZXhjbHVkaW5nIHN0dWJzICAqLworCisgICAgICAgICAgLyogRHJvcC1vdXQgQ29udHJvbCBSdWxlcyAjNCBhbmQgIzYgKi8KKworICAgICAgICAgIC8qIFRoZSBzcGVjaWZpY2F0aW9uIG5laXRoZXIgcHJvdmlkZXMgYW4gZXhhY3QgZGVmaW5pdGlvbiAqLworICAgICAgICAgIC8qIG9mIGEgYHN0dWInIG5vciBnaXZlcyBleGFjdCBydWxlcyB0byBleGNsdWRlIHRoZW0uICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIEhlcmUgdGhlIGNvbnN0cmFpbnRzIHdlIHVzZSB0byByZWNvZ25pemUgYSBzdHViLiAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICB1cHBlciBzdHViOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSBQX0xlZnQgYW5kIFBfUmlnaHQgYXJlIGluIHRoZSBzYW1lIGNvbnRvdXIgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSBQX1JpZ2h0IGlzIHRoZSBzdWNjZXNzb3Igb2YgUF9MZWZ0IGluIHRoYXQgY29udG91ciAqLworICAgICAgICAgIC8qICAgLSB5IGlzIHRoZSB0b3Agb2YgUF9MZWZ0IGFuZCBQX1JpZ2h0ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICBsb3dlciBzdHViOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSBQX0xlZnQgYW5kIFBfUmlnaHQgYXJlIGluIHRoZSBzYW1lIGNvbnRvdXIgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSBQX0xlZnQgaXMgdGhlIHN1Y2Nlc3NvciBvZiBQX1JpZ2h0IGluIHRoYXQgY29udG91ciAqLworICAgICAgICAgIC8qICAgLSB5IGlzIHRoZSBib3R0b20gb2YgUF9MZWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFdlIGRyYXcgYSBzdHViIGlmIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgYXJlIG1ldC4gICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSBmb3IgYW4gdXBwZXIgb3IgbG93ZXIgc3R1YiwgdGhlcmUgaXMgdG9wIG9yIGJvdHRvbSAqLworICAgICAgICAgIC8qICAgICBvdmVyc2hvb3QsIHJlc3BlY3RpdmVseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgLSB0aGUgY292ZXJlZCBpbnRlcnZhbCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIGEgaGFsZiAqLworICAgICAgICAgIC8qICAgICBwaXhlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgLyogdXBwZXIgc3R1YiB0ZXN0ICovCisgICAgICAgICAgaWYgKCBsZWZ0LT5uZXh0ID09IHJpZ2h0ICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBsZWZ0LT5oZWlnaHQgPD0gMCAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAhKCBsZWZ0LT5mbGFncyAmIE92ZXJzaG9vdF9Ub3AgICAmJgorICAgICAgICAgICAgICAgICAgeDIgLSB4MSA+PSByYXMucHJlY2lzaW9uX2hhbGYgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiBsb3dlciBzdHViIHRlc3QgKi8KKyAgICAgICAgICBpZiAoIHJpZ2h0LT5uZXh0ID09IGxlZnQgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBsZWZ0LT5zdGFydCA9PSB5ICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgISggbGVmdC0+ZmxhZ3MgJiBPdmVyc2hvb3RfQm90dG9tICYmCisgICAgICAgICAgICAgICAgICB4MiAtIHgxID49IHJhcy5wcmVjaXNpb25faGFsZiAgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBpZiAoIGRyb3BPdXRDb250cm9sID09IDEgKQorICAgICAgICAgICAgcHhsID0gZTI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiAvKiBtb2RlcyAyLCAzLCA2LCA3ICovCisgICAgICAgICAgZ290byBFeGl0OyAgLyogbm8gZHJvcC1vdXQgY29udHJvbCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogdW5kb2N1bWVudGVkIGJ1dCBjb25maXJtZWQ6IElmIHRoZSBkcm9wLW91dCB3b3VsZCByZXN1bHQgaW4gYSAgKi8KKyAgICAgICAgLyogcGl4ZWwgb3V0c2lkZSBvZiB0aGUgYm91bmRpbmcgYm94LCB1c2UgdGhlIHBpeGVsIGluc2lkZSBvZiB0aGUgKi8KKyAgICAgICAgLyogYm91bmRpbmcgYm94IGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBweGwgPCAwICkKKyAgICAgICAgICBweGwgPSBlMTsKKyAgICAgICAgZWxzZSBpZiAoIFRSVU5DKCBweGwgKSA+PSByYXMuYldpZHRoICkKKyAgICAgICAgICBweGwgPSBlMjsKKworICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBvdGhlciBwaXhlbCBpc24ndCBzZXQgKi8KKyAgICAgICAgZTEgPSBweGwgPT0gZTEgPyBlMiA6IGUxOworCisgICAgICAgIGUxID0gVFJVTkMoIGUxICk7CisKKyAgICAgICAgYzEgPSAoU2hvcnQpKCBlMSA+PiAzICk7CisgICAgICAgIGYxID0gKFNob3J0KSggZTEgJiAgNyApOworCisgICAgICAgIGlmICggZTEgPj0gMCAmJiBlMSA8IHJhcy5iV2lkdGggICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICByYXMuYlRhcmdldFtyYXMudHJhY2VPZnMgKyBjMV0gJiAoIDB4ODAgPj4gZjEgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZTEgPSBUUlVOQyggcHhsICk7CisKKyAgICBpZiAoIGUxID49IDAgJiYgZTEgPCByYXMuYldpZHRoICkKKyAgICB7CisgICAgICBGVF9UUkFDRTcoKCAiIC0+IHg9JWQgKGRyb3Atb3V0KSIsIGUxICkpOworCisgICAgICBjMSA9IChTaG9ydCkoIGUxID4+IDMgKTsKKyAgICAgIGYxID0gKFNob3J0KSggZTEgJiA3ICk7CisKKyAgICAgIHJhcy5iVGFyZ2V0W3Jhcy50cmFjZU9mcyArIGMxXSB8PSAoY2hhcikoIDB4ODAgPj4gZjEgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBWZXJ0aWNhbF9Td2VlcF9TdGVwKCBSQVNfQVJHICkKKyAgeworICAgIHJhcy50cmFjZU9mcyArPSByYXMudHJhY2VJbmNyOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIEhvcml6b250YWwgU3dlZXAgUHJvY2VkdXJlIFNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBUaGVzZSBmb3VyIHJvdXRpbmVzIGFyZSB1c2VkIGR1cmluZyB0aGUgaG9yaXpvbnRhbCBibGFjay93aGl0ZSAgICAgKi8KKyAgLyogIHN3ZWVwIHBoYXNlIGJ5IHRoZSBnZW5lcmljIERyYXdfU3dlZXAoKSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBzdGF0aWMgdm9pZAorICBIb3Jpem9udGFsX1N3ZWVwX0luaXQoIFJBU19BUkdTIFNob3J0KiAgbWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3J0KiAgbWF4ICkKKyAgeworICAgIC8qIG5vdGhpbmcsIHJlYWxseSAqLworICAgIEZUX1VOVVNFRF9SQVNURVI7CisgICAgRlRfVU5VU0VEKCBtaW4gKTsKKyAgICBGVF9VTlVTRUQoIG1heCApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBIb3Jpem9udGFsX1N3ZWVwX1NwYW4oIFJBU19BUkdTIFNob3J0ICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFByb2ZpbGUgICAgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUHJvZmlsZSAgICByaWdodCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGxlZnQgKTsKKyAgICBGVF9VTlVTRUQoIHJpZ2h0ICk7CisKKworICAgIGlmICggeDIgLSB4MSA8IHJhcy5wcmVjaXNpb24gKQorICAgIHsKKyAgICAgIExvbmcgIGUxLCBlMjsKKworCisgICAgICBGVF9UUkFDRTcoKCAiICB4PSVkIHk9WyUuMTJmOyUuMTJmXSIsCisgICAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgeDEgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiApKTsKKworICAgICAgZTEgPSBDRUlMSU5HKCB4MSApOworICAgICAgZTIgPSBGTE9PUiAgKCB4MiApOworCisgICAgICBpZiAoIGUxID09IGUyICkKKyAgICAgIHsKKyAgICAgICAgZTEgPSBUUlVOQyggZTEgKTsKKworICAgICAgICBpZiAoIGUxID49IDAgJiYgKFVMb25nKWUxIDwgcmFzLnRhcmdldC5yb3dzICkKKyAgICAgICAgeworICAgICAgICAgIEJ5dGUgICBmMTsKKyAgICAgICAgICBQQnl0ZSAgYml0czsKKyAgICAgICAgICBQQnl0ZSAgcDsKKworCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAtPiB5PSVkIChkcm9wLW91dCkiLCBlMSApKTsKKworICAgICAgICAgIGJpdHMgPSByYXMuYlRhcmdldCArICggeSA+PiAzICk7CisgICAgICAgICAgZjEgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKKyAgICAgICAgICBwICAgID0gYml0cyAtIGUxICogcmFzLnRhcmdldC5waXRjaDsKKworICAgICAgICAgIGlmICggcmFzLnRhcmdldC5waXRjaCA+IDAgKQorICAgICAgICAgICAgcCArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHJhcy50YXJnZXQucGl0Y2g7CisKKyAgICAgICAgICBwWzBdIHw9IGYxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEZUX1RSQUNFNygoICJcbiIgKSk7CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICBIb3Jpem9udGFsX1N3ZWVwX0Ryb3AoIFJBU19BUkdTIFNob3J0ICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFByb2ZpbGUgICAgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUHJvZmlsZSAgICByaWdodCApCisgIHsKKyAgICBMb25nICAgZTEsIGUyLCBweGw7CisgICAgUEJ5dGUgIGJpdHM7CisgICAgQnl0ZSAgIGYxOworCisKKyAgICBGVF9UUkFDRTcoKCAiICB4PSVkIHk9WyUuMTJmOyUuMTJmXSIsCisgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICB4MSAvIChkb3VibGUpcmFzLnByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICB4MiAvIChkb3VibGUpcmFzLnByZWNpc2lvbiApKTsKKworICAgIC8qIER1cmluZyB0aGUgaG9yaXpvbnRhbCBzd2VlcCwgd2Ugb25seSB0YWtlIGNhcmUgb2YgZHJvcC1vdXRzICovCisKKyAgICAvKiBlMSAgICAgKyAgICAgICA8LS0gcGl4ZWwgY2VudGVyICovCisgICAgLyogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHgxICAtLS0rLS0+ICAgIDwtLSBjb250b3VyICAgICAgKi8KKyAgICAvKiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIHgyICA8LS0rLS0tICAgIDwtLSBjb250b3VyICAgICAgKi8KKyAgICAvKiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGUyICAgICArICAgICAgIDwtLSBwaXhlbCBjZW50ZXIgKi8KKworICAgIGUxICA9IENFSUxJTkcoIHgxICk7CisgICAgZTIgID0gRkxPT1IgICggeDIgKTsKKyAgICBweGwgPSBlMTsKKworICAgIGlmICggZTEgPiBlMiApCisgICAgeworICAgICAgSW50ICBkcm9wT3V0Q29udHJvbCA9IGxlZnQtPmZsYWdzICYgNzsKKworCisgICAgICBGVF9UUkFDRTcoKCAiLCBkcm9wb3V0PSVkIiwgZHJvcE91dENvbnRyb2wgKSk7CisKKyAgICAgIGlmICggZTEgPT0gZTIgKyByYXMucHJlY2lzaW9uICkKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoICggZHJvcE91dENvbnRyb2wgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogc2ltcGxlIGRyb3Atb3V0cyBpbmNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICBweGwgPSBlMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6IC8qIHNtYXJ0IGRyb3Atb3V0cyBpbmNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICBweGwgPSBGTE9PUiggKCB4MSArIHgyIC0gMSApIC8gMiArIHJhcy5wcmVjaXNpb25faGFsZiApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTogLyogc2ltcGxlIGRyb3Atb3V0cyBleGNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgY2FzZSA1OiAvKiBzbWFydCBkcm9wLW91dHMgZXhjbHVkaW5nIHN0dWJzICAqLworICAgICAgICAgIC8qIHNlZSBWZXJ0aWNhbF9Td2VlcF9Ecm9wIGZvciBkZXRhaWxzICovCisKKyAgICAgICAgICAvKiByaWdodG1vc3Qgc3R1YiB0ZXN0ICovCisgICAgICAgICAgaWYgKCBsZWZ0LT5uZXh0ID09IHJpZ2h0ICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBsZWZ0LT5oZWlnaHQgPD0gMCAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAhKCBsZWZ0LT5mbGFncyAmIE92ZXJzaG9vdF9Ub3AgICAmJgorICAgICAgICAgICAgICAgICAgeDIgLSB4MSA+PSByYXMucHJlY2lzaW9uX2hhbGYgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiBsZWZ0bW9zdCBzdHViIHRlc3QgKi8KKyAgICAgICAgICBpZiAoIHJpZ2h0LT5uZXh0ID09IGxlZnQgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBsZWZ0LT5zdGFydCA9PSB5ICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgISggbGVmdC0+ZmxhZ3MgJiBPdmVyc2hvb3RfQm90dG9tICYmCisgICAgICAgICAgICAgICAgICB4MiAtIHgxID49IHJhcy5wcmVjaXNpb25faGFsZiAgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBpZiAoIGRyb3BPdXRDb250cm9sID09IDEgKQorICAgICAgICAgICAgcHhsID0gZTI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHhsID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiAvKiBtb2RlcyAyLCAzLCA2LCA3ICovCisgICAgICAgICAgZ290byBFeGl0OyAgLyogbm8gZHJvcC1vdXQgY29udHJvbCAqLworICAgICAgICB9CisKKyAgICAgICAgLyogdW5kb2N1bWVudGVkIGJ1dCBjb25maXJtZWQ6IElmIHRoZSBkcm9wLW91dCB3b3VsZCByZXN1bHQgaW4gYSAgKi8KKyAgICAgICAgLyogcGl4ZWwgb3V0c2lkZSBvZiB0aGUgYm91bmRpbmcgYm94LCB1c2UgdGhlIHBpeGVsIGluc2lkZSBvZiB0aGUgKi8KKyAgICAgICAgLyogYm91bmRpbmcgYm94IGluc3RlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBweGwgPCAwICkKKyAgICAgICAgICBweGwgPSBlMTsKKyAgICAgICAgZWxzZSBpZiAoIChVTG9uZykoIFRSVU5DKCBweGwgKSApID49IHJhcy50YXJnZXQucm93cyApCisgICAgICAgICAgcHhsID0gZTI7CisKKyAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgb3RoZXIgcGl4ZWwgaXNuJ3Qgc2V0ICovCisgICAgICAgIGUxID0gcHhsID09IGUxID8gZTIgOiBlMTsKKworICAgICAgICBlMSA9IFRSVU5DKCBlMSApOworCisgICAgICAgIGJpdHMgPSByYXMuYlRhcmdldCArICggeSA+PiAzICk7CisgICAgICAgIGYxICAgPSAoQnl0ZSkoIDB4ODAgPj4gKCB5ICYgNyApICk7CisKKyAgICAgICAgYml0cyAtPSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7CisgICAgICAgIGlmICggcmFzLnRhcmdldC5waXRjaCA+IDAgKQorICAgICAgICAgIGJpdHMgKz0gKExvbmcpKCByYXMudGFyZ2V0LnJvd3MgLSAxICkgKiByYXMudGFyZ2V0LnBpdGNoOworCisgICAgICAgIGlmICggZTEgPj0gMCAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKFVMb25nKWUxIDwgcmFzLnRhcmdldC5yb3dzICYmCisgICAgICAgICAgICAgKmJpdHMgJiBmMSAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlMSA9IFRSVU5DKCBweGwgKTsKKworICAgIGlmICggZTEgPj0gMCAmJiAoVUxvbmcpZTEgPCByYXMudGFyZ2V0LnJvd3MgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFNygoICIgLT4geT0lZCAoZHJvcC1vdXQpIiwgZTEgKSk7CisKKyAgICAgIGJpdHMgID0gcmFzLmJUYXJnZXQgKyAoIHkgPj4gMyApOworICAgICAgZjEgICAgPSAoQnl0ZSkoIDB4ODAgPj4gKCB5ICYgNyApICk7CisgICAgICBiaXRzIC09IGUxICogcmFzLnRhcmdldC5waXRjaDsKKworICAgICAgaWYgKCByYXMudGFyZ2V0LnBpdGNoID4gMCApCisgICAgICAgIGJpdHMgKz0gKExvbmcpKCByYXMudGFyZ2V0LnJvd3MgLSAxICkgKiByYXMudGFyZ2V0LnBpdGNoOworCisgICAgICBiaXRzWzBdIHw9IGYxOworICAgIH0KKworICBFeGl0OgorICAgIEZUX1RSQUNFNygoICJcbiIgKSk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIEhvcml6b250YWxfU3dlZXBfU3RlcCggUkFTX0FSRyApCisgIHsKKyAgICAvKiBOb3RoaW5nLCByZWFsbHkgKi8KKyAgICBGVF9VTlVTRURfUkFTVEVSOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBHZW5lcmljIFN3ZWVwIERyYXdpbmcgcm91dGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIEJvb2wKKyAgRHJhd19Td2VlcCggUkFTX0FSRyApCisgIHsKKyAgICBTaG9ydCAgICAgICAgIHksIHlfY2hhbmdlLCB5X2hlaWdodDsKKworICAgIFBQcm9maWxlICAgICAgUCwgUSwgUF9MZWZ0LCBQX1JpZ2h0OworCisgICAgU2hvcnQgICAgICAgICBtaW5fWSwgbWF4X1ksIHRvcCwgYm90dG9tLCBkcm9wb3V0czsKKworICAgIExvbmcgICAgICAgICAgeDEsIHgyLCB4cywgZTEsIGUyOworCisgICAgVFByb2ZpbGVMaXN0ICB3YWl0aW5nOworICAgIFRQcm9maWxlTGlzdCAgZHJhd19sZWZ0LCBkcmF3X3JpZ2h0OworCisKKyAgICAvKiBpbml0aWFsaXplIGVtcHR5IGxpbmtlZCBsaXN0cyAqLworCisgICAgSW5pdF9MaW5rZWQoICZ3YWl0aW5nICk7CisKKyAgICBJbml0X0xpbmtlZCggJmRyYXdfbGVmdCAgKTsKKyAgICBJbml0X0xpbmtlZCggJmRyYXdfcmlnaHQgKTsKKworICAgIC8qIGZpcnN0LCBjb21wdXRlIG1pbiBhbmQgbWF4IFkgKi8KKworICAgIFAgICAgID0gcmFzLmZQcm9maWxlOworICAgIG1heF9ZID0gKFNob3J0KVRSVU5DKCByYXMubWluWSApOworICAgIG1pbl9ZID0gKFNob3J0KVRSVU5DKCByYXMubWF4WSApOworCisgICAgd2hpbGUgKCBQICkKKyAgICB7CisgICAgICBRID0gUC0+bGluazsKKworICAgICAgYm90dG9tID0gKFNob3J0KVAtPnN0YXJ0OworICAgICAgdG9wICAgID0gKFNob3J0KSggUC0+c3RhcnQgKyBQLT5oZWlnaHQgLSAxICk7CisKKyAgICAgIGlmICggbWluX1kgPiBib3R0b20gKQorICAgICAgICBtaW5fWSA9IGJvdHRvbTsKKyAgICAgIGlmICggbWF4X1kgPCB0b3AgKQorICAgICAgICBtYXhfWSA9IHRvcDsKKworICAgICAgUC0+WCA9IDA7CisgICAgICBJbnNOZXcoICZ3YWl0aW5nLCBQICk7CisKKyAgICAgIFAgPSBROworICAgIH0KKworICAgIC8qIGNoZWNrIHRoZSBZLXR1cm5zICovCisgICAgaWYgKCByYXMubnVtVHVybnMgPT0gMCApCisgICAgeworICAgICAgcmFzLmVycm9yID0gRlRfVEhST1coIEludmFsaWQgKTsKKyAgICAgIHJldHVybiBGQUlMVVJFOworICAgIH0KKworICAgIC8qIG5vdyBpbml0aWFsaXplIHRoZSBzd2VlcCAqLworCisgICAgcmFzLlByb2NfU3dlZXBfSW5pdCggUkFTX1ZBUlMgJm1pbl9ZLCAmbWF4X1kgKTsKKworICAgIC8qIHRoZW4gY29tcHV0ZSB0aGUgZGlzdGFuY2Ugb2YgZWFjaCBwcm9maWxlIGZyb20gbWluX1kgKi8KKworICAgIFAgPSB3YWl0aW5nOworCisgICAgd2hpbGUgKCBQICkKKyAgICB7CisgICAgICBQLT5jb3VudEwgPSBQLT5zdGFydCAtIG1pbl9ZOworICAgICAgUCA9IFAtPmxpbms7CisgICAgfQorCisgICAgLyogbGV0J3MgZ28gKi8KKworICAgIHkgICAgICAgID0gbWluX1k7CisgICAgeV9oZWlnaHQgPSAwOworCisgICAgaWYgKCByYXMubnVtVHVybnMgPiAwICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHJhcy5zaXplQnVmZlstcmFzLm51bVR1cm5zXSA9PSBtaW5fWSApCisgICAgICByYXMubnVtVHVybnMtLTsKKworICAgIHdoaWxlICggcmFzLm51bVR1cm5zID4gMCApCisgICAgeworICAgICAgLyogY2hlY2sgd2FpdGluZyBsaXN0IGZvciBuZXcgYWN0aXZhdGlvbnMgKi8KKworICAgICAgUCA9IHdhaXRpbmc7CisKKyAgICAgIHdoaWxlICggUCApCisgICAgICB7CisgICAgICAgIFEgPSBQLT5saW5rOworICAgICAgICBQLT5jb3VudEwgLT0geV9oZWlnaHQ7CisgICAgICAgIGlmICggUC0+Y291bnRMID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgRGVsT2xkKCAmd2FpdGluZywgUCApOworCisgICAgICAgICAgaWYgKCBQLT5mbGFncyAmIEZsb3dfVXAgKQorICAgICAgICAgICAgSW5zTmV3KCAmZHJhd19sZWZ0LCAgUCApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc05ldyggJmRyYXdfcmlnaHQsIFAgKTsKKyAgICAgICAgfQorCisgICAgICAgIFAgPSBROworICAgICAgfQorCisgICAgICAvKiBzb3J0IHRoZSBkcmF3aW5nIGxpc3RzICovCisKKyAgICAgIFNvcnQoICZkcmF3X2xlZnQgKTsKKyAgICAgIFNvcnQoICZkcmF3X3JpZ2h0ICk7CisKKyAgICAgIHlfY2hhbmdlID0gKFNob3J0KXJhcy5zaXplQnVmZlstcmFzLm51bVR1cm5zLS1dOworICAgICAgeV9oZWlnaHQgPSAoU2hvcnQpKCB5X2NoYW5nZSAtIHkgKTsKKworICAgICAgd2hpbGUgKCB5IDwgeV9jaGFuZ2UgKQorICAgICAgeworICAgICAgICAvKiBsZXQncyB0cmFjZSAqLworCisgICAgICAgIGRyb3BvdXRzID0gMDsKKworICAgICAgICBQX0xlZnQgID0gZHJhd19sZWZ0OworICAgICAgICBQX1JpZ2h0ID0gZHJhd19yaWdodDsKKworICAgICAgICB3aGlsZSAoIFBfTGVmdCApCisgICAgICAgIHsKKyAgICAgICAgICB4MSA9IFBfTGVmdCAtPlg7CisgICAgICAgICAgeDIgPSBQX1JpZ2h0LT5YOworCisgICAgICAgICAgaWYgKCB4MSA+IHgyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4cyA9IHgxOworICAgICAgICAgICAgeDEgPSB4MjsKKyAgICAgICAgICAgIHgyID0geHM7CisgICAgICAgICAgfQorCisgICAgICAgICAgZTEgPSBGTE9PUiggeDEgKTsKKyAgICAgICAgICBlMiA9IENFSUxJTkcoIHgyICk7CisKKyAgICAgICAgICBpZiAoIHgyIC0geDEgPD0gcmFzLnByZWNpc2lvbiAmJgorICAgICAgICAgICAgICAgZTEgIT0geDEgJiYgZTIgIT0geDIgICAgICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGUxID4gZTIgfHwgZTIgPT0gZTEgKyByYXMucHJlY2lzaW9uICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgSW50ICBkcm9wT3V0Q29udHJvbCA9IFBfTGVmdC0+ZmxhZ3MgJiA3OworCisKKyAgICAgICAgICAgICAgaWYgKCBkcm9wT3V0Q29udHJvbCAhPSAyICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGEgZHJvcC1vdXQgd2FzIGRldGVjdGVkICovCisKKyAgICAgICAgICAgICAgICBQX0xlZnQgLT5YID0geDE7CisgICAgICAgICAgICAgICAgUF9SaWdodC0+WCA9IHgyOworCisgICAgICAgICAgICAgICAgLyogbWFyayBwcm9maWxlIGZvciBkcm9wLW91dCBwcm9jZXNzaW5nICovCisgICAgICAgICAgICAgICAgUF9MZWZ0LT5jb3VudEwgPSAxOworICAgICAgICAgICAgICAgIGRyb3BvdXRzKys7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBnb3RvIFNraXBfVG9fTmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICByYXMuUHJvY19Td2VlcF9TcGFuKCBSQVNfVkFSUyB5LCB4MSwgeDIsIFBfTGVmdCwgUF9SaWdodCApOworCisgICAgICAgIFNraXBfVG9fTmV4dDoKKworICAgICAgICAgIFBfTGVmdCAgPSBQX0xlZnQtPmxpbms7CisgICAgICAgICAgUF9SaWdodCA9IFBfUmlnaHQtPmxpbms7CisgICAgICAgIH0KKworICAgICAgICAvKiBoYW5kbGUgZHJvcC1vdXRzIF9hZnRlcl8gdGhlIHNwYW4gZHJhd2luZyAtLSAgICAgICAqLworICAgICAgICAvKiBkcm9wLW91dCBwcm9jZXNzaW5nIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB0aGUgbG9vcCAqLworICAgICAgICAvKiBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGRyb3BvdXRzID4gMCApCisgICAgICAgICAgZ290byBTY2FuX0Ryb3BPdXRzOworCisgICAgICBOZXh0X0xpbmU6CisKKyAgICAgICAgcmFzLlByb2NfU3dlZXBfU3RlcCggUkFTX1ZBUiApOworCisgICAgICAgIHkrKzsKKworICAgICAgICBpZiAoIHkgPCB5X2NoYW5nZSApCisgICAgICAgIHsKKyAgICAgICAgICBTb3J0KCAmZHJhd19sZWZ0ICApOworICAgICAgICAgIFNvcnQoICZkcmF3X3JpZ2h0ICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogbm93IGZpbmFsaXplIHRoZSBwcm9maWxlcyB0aGF0IG5lZWQgaXQgKi8KKworICAgICAgUCA9IGRyYXdfbGVmdDsKKyAgICAgIHdoaWxlICggUCApCisgICAgICB7CisgICAgICAgIFEgPSBQLT5saW5rOworICAgICAgICBpZiAoIFAtPmhlaWdodCA9PSAwICkKKyAgICAgICAgICBEZWxPbGQoICZkcmF3X2xlZnQsIFAgKTsKKyAgICAgICAgUCA9IFE7CisgICAgICB9CisKKyAgICAgIFAgPSBkcmF3X3JpZ2h0OworICAgICAgd2hpbGUgKCBQICkKKyAgICAgIHsKKyAgICAgICAgUSA9IFAtPmxpbms7CisgICAgICAgIGlmICggUC0+aGVpZ2h0ID09IDAgKQorICAgICAgICAgIERlbE9sZCggJmRyYXdfcmlnaHQsIFAgKTsKKyAgICAgICAgUCA9IFE7CisgICAgICB9CisgICAgfQorCisgICAgLyogZm9yIGdyYXktc2NhbGluZywgZmx1c2ggdGhlIGJpdG1hcCBzY2FubGluZSBjYWNoZSAqLworICAgIHdoaWxlICggeSA8PSBtYXhfWSApCisgICAgeworICAgICAgcmFzLlByb2NfU3dlZXBfU3RlcCggUkFTX1ZBUiApOworICAgICAgeSsrOworICAgIH0KKworICAgIHJldHVybiBTVUNDRVNTOworCisgIFNjYW5fRHJvcE91dHM6CisKKyAgICBQX0xlZnQgID0gZHJhd19sZWZ0OworICAgIFBfUmlnaHQgPSBkcmF3X3JpZ2h0OworCisgICAgd2hpbGUgKCBQX0xlZnQgKQorICAgIHsKKyAgICAgIGlmICggUF9MZWZ0LT5jb3VudEwgKQorICAgICAgeworICAgICAgICBQX0xlZnQtPmNvdW50TCA9IDA7CisjaWYgMAorICAgICAgICBkcm9wb3V0cy0tOyAgLyogLS0gdGhpcyBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgb25seSAqLworI2VuZGlmCisgICAgICAgIHJhcy5Qcm9jX1N3ZWVwX0Ryb3AoIFJBU19WQVJTIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBfTGVmdC0+WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUF9SaWdodC0+WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUF9MZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQX1JpZ2h0ICk7CisgICAgICB9CisKKyAgICAgIFBfTGVmdCAgPSBQX0xlZnQtPmxpbms7CisgICAgICBQX1JpZ2h0ID0gUF9SaWdodC0+bGluazsKKyAgICB9CisKKyAgICBnb3RvIE5leHRfTGluZTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVuZGVyX1NpbmdsZV9QYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGVyZm9ybSBvbmUgc3dlZXAgd2l0aCBzdWItYmFuZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmxpcHBlZCA6OiBJZiBzZXQsIGZsaXAgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb3V0bGluZS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVuZGVyZXIgZXJyb3IgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgaW50CisgIFJlbmRlcl9TaW5nbGVfUGFzcyggUkFTX0FSR1MgQm9vbCAgZmxpcHBlZCApCisgIHsKKyAgICBTaG9ydCAgaSwgaiwgazsKKworCisgICAgd2hpbGUgKCByYXMuYmFuZF90b3AgPj0gMCApCisgICAgeworICAgICAgcmFzLm1heFkgPSAoTG9uZylyYXMuYmFuZF9zdGFja1tyYXMuYmFuZF90b3BdLnlfbWF4ICogcmFzLnByZWNpc2lvbjsKKyAgICAgIHJhcy5taW5ZID0gKExvbmcpcmFzLmJhbmRfc3RhY2tbcmFzLmJhbmRfdG9wXS55X21pbiAqIHJhcy5wcmVjaXNpb247CisKKyAgICAgIHJhcy50b3AgPSByYXMuYnVmZjsKKworICAgICAgcmFzLmVycm9yID0gUmFzdGVyX0Vycl9Ob25lOworCisgICAgICBpZiAoIENvbnZlcnRfR2x5cGgoIFJBU19WQVJTIGZsaXBwZWQgKSApCisgICAgICB7CisgICAgICAgIGlmICggcmFzLmVycm9yICE9IFJhc3Rlcl9FcnJfT3ZlcmZsb3cgKQorICAgICAgICAgIHJldHVybiBGQUlMVVJFOworCisgICAgICAgIHJhcy5lcnJvciA9IFJhc3Rlcl9FcnJfTm9uZTsKKworICAgICAgICAvKiBzdWItYmFuZGluZyAqLworCisjaWZkZWYgREVCVUdfUkFTVEVSCisgICAgICAgIENsZWFyQmFuZCggUkFTX1ZBUlMgVFJVTkMoIHJhcy5taW5ZICksIFRSVU5DKCByYXMubWF4WSApICk7CisjZW5kaWYKKworICAgICAgICBpID0gcmFzLmJhbmRfc3RhY2tbcmFzLmJhbmRfdG9wXS55X21pbjsKKyAgICAgICAgaiA9IHJhcy5iYW5kX3N0YWNrW3Jhcy5iYW5kX3RvcF0ueV9tYXg7CisKKyAgICAgICAgayA9IChTaG9ydCkoICggaSArIGogKSAvIDIgKTsKKworICAgICAgICBpZiAoIHJhcy5iYW5kX3RvcCA+PSA3IHx8IGsgPCBpICkKKyAgICAgICAgeworICAgICAgICAgIHJhcy5iYW5kX3RvcCA9IDA7CisgICAgICAgICAgcmFzLmVycm9yICAgID0gRlRfVEhST1coIEludmFsaWQgKTsKKworICAgICAgICAgIHJldHVybiByYXMuZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICByYXMuYmFuZF9zdGFja1tyYXMuYmFuZF90b3AgKyAxXS55X21pbiA9IGs7CisgICAgICAgIHJhcy5iYW5kX3N0YWNrW3Jhcy5iYW5kX3RvcCArIDFdLnlfbWF4ID0gajsKKworICAgICAgICByYXMuYmFuZF9zdGFja1tyYXMuYmFuZF90b3BdLnlfbWF4ID0gKFNob3J0KSggayAtIDEgKTsKKworICAgICAgICByYXMuYmFuZF90b3ArKzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCByYXMuZlByb2ZpbGUgKQorICAgICAgICAgIGlmICggRHJhd19Td2VlcCggUkFTX1ZBUiApICkKKyAgICAgICAgICAgICByZXR1cm4gcmFzLmVycm9yOworICAgICAgICByYXMuYmFuZF90b3AtLTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVuZGVyX0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVuZGVyIGEgZ2x5cGggaW4gYSBiaXRtYXAuICBTdWItYmFuZGluZyBpZiBuZWVkZWQuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgUmVuZGVyX0dseXBoKCBSQVNfQVJHICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgU2V0X0hpZ2hfUHJlY2lzaW9uKCBSQVNfVkFSUyByYXMub3V0bGluZS5mbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OICk7CisgICAgcmFzLnNjYWxlX3NoaWZ0ID0gcmFzLnByZWNpc2lvbl9zaGlmdDsKKworICAgIGlmICggcmFzLm91dGxpbmUuZmxhZ3MgJiBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUyApCisgICAgICByYXMuZHJvcE91dENvbnRyb2wgPSAyOworICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHJhcy5vdXRsaW5lLmZsYWdzICYgRlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUyApCisgICAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCA9IDQ7CisgICAgICBlbHNlCisgICAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCA9IDA7CisKKyAgICAgIGlmICggISggcmFzLm91dGxpbmUuZmxhZ3MgJiBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgKSApCisgICAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCArPSAxOworICAgIH0KKworICAgIHJhcy5zZWNvbmRfcGFzcyA9IChCb29sKSggISggcmFzLm91dGxpbmUuZmxhZ3MgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PVVRMSU5FX1NJTkdMRV9QQVNTICkgKTsKKworICAgIC8qIFZlcnRpY2FsIFN3ZWVwICovCisgICAgRlRfVFJBQ0U3KCggIlZlcnRpY2FsIHBhc3MgKGZ0cmFzdGVyKVxuIiApKTsKKworICAgIHJhcy5Qcm9jX1N3ZWVwX0luaXQgPSBWZXJ0aWNhbF9Td2VlcF9Jbml0OworICAgIHJhcy5Qcm9jX1N3ZWVwX1NwYW4gPSBWZXJ0aWNhbF9Td2VlcF9TcGFuOworICAgIHJhcy5Qcm9jX1N3ZWVwX0Ryb3AgPSBWZXJ0aWNhbF9Td2VlcF9Ecm9wOworICAgIHJhcy5Qcm9jX1N3ZWVwX1N0ZXAgPSBWZXJ0aWNhbF9Td2VlcF9TdGVwOworCisgICAgcmFzLmJhbmRfdG9wICAgICAgICAgICAgPSAwOworICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWluID0gMDsKKyAgICByYXMuYmFuZF9zdGFja1swXS55X21heCA9IChTaG9ydCkoIHJhcy50YXJnZXQucm93cyAtIDEgKTsKKworICAgIHJhcy5iV2lkdGggID0gKFVTaG9ydClyYXMudGFyZ2V0LndpZHRoOworICAgIHJhcy5iVGFyZ2V0ID0gKEJ5dGUqKXJhcy50YXJnZXQuYnVmZmVyOworCisgICAgaWYgKCAoIGVycm9yID0gUmVuZGVyX1NpbmdsZV9QYXNzKCBSQVNfVkFSUyAwICkgKSAhPSAwICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIEhvcml6b250YWwgU3dlZXAgKi8KKyAgICBpZiAoIHJhcy5zZWNvbmRfcGFzcyAmJiByYXMuZHJvcE91dENvbnRyb2wgIT0gMiApCisgICAgeworICAgICAgRlRfVFJBQ0U3KCggIkhvcml6b250YWwgcGFzcyAoZnRyYXN0ZXIpXG4iICkpOworCisgICAgICByYXMuUHJvY19Td2VlcF9Jbml0ID0gSG9yaXpvbnRhbF9Td2VlcF9Jbml0OworICAgICAgcmFzLlByb2NfU3dlZXBfU3BhbiA9IEhvcml6b250YWxfU3dlZXBfU3BhbjsKKyAgICAgIHJhcy5Qcm9jX1N3ZWVwX0Ryb3AgPSBIb3Jpem9udGFsX1N3ZWVwX0Ryb3A7CisgICAgICByYXMuUHJvY19Td2VlcF9TdGVwID0gSG9yaXpvbnRhbF9Td2VlcF9TdGVwOworCisgICAgICByYXMuYmFuZF90b3AgICAgICAgICAgICA9IDA7CisgICAgICByYXMuYmFuZF9zdGFja1swXS55X21pbiA9IDA7CisgICAgICByYXMuYmFuZF9zdGFja1swXS55X21heCA9IChTaG9ydCkoIHJhcy50YXJnZXQud2lkdGggLSAxICk7CisKKyAgICAgIGlmICggKCBlcnJvciA9IFJlbmRlcl9TaW5nbGVfUGFzcyggUkFTX1ZBUlMgMSApICkgIT0gMCApCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm4gUmFzdGVyX0Vycl9Ob25lOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9ibGFja19pbml0KCBibGFja19QUmFzdGVyICByYXN0ZXIgKQorICB7CisgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKKyAgfQorCisKKyAgLyoqKiogUkFTVEVSIE9CSkVDVCBDUkVBVElPTjogSW4gc3RhbmRhbG9uZSBtb2RlLCB3ZSBzaW1wbHkgdXNlICoqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YXRpYyBvYmplY3QuICAgICAgICAgICAgICAgICAgKioqKiovCisKKworI2lmZGVmIF9TVEFOREFMT05FXworCisKKyAgc3RhdGljIGludAorICBmdF9ibGFja19uZXcoIHZvaWQqICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICBGVF9SYXN0ZXIgICphcmFzdGVyICkKKyAgeworICAgICBzdGF0aWMgYmxhY2tfVFJhc3RlciAgdGhlX3Jhc3RlcjsKKyAgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKworCisgICAgICphcmFzdGVyID0gKEZUX1Jhc3RlcikmdGhlX3Jhc3RlcjsKKyAgICAgRlRfTUVNX1pFUk8oICZ0aGVfcmFzdGVyLCBzaXplb2YgKCB0aGVfcmFzdGVyICkgKTsKKyAgICAgZnRfYmxhY2tfaW5pdCggJnRoZV9yYXN0ZXIgKTsKKworICAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfYmxhY2tfZG9uZSggRlRfUmFzdGVyICByYXN0ZXIgKQorICB7CisgICAgLyogbm90aGluZyAqLworICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CisgIH0KKworCisjZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisKKworICBzdGF0aWMgaW50CisgIGZ0X2JsYWNrX25ldyggRlRfTWVtb3J5ICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICBibGFja19QUmFzdGVyICAqYXJhc3RlciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICBibGFja19QUmFzdGVyICByYXN0ZXIgPSBOVUxMOworCisKKyAgICAqYXJhc3RlciA9IDA7CisgICAgaWYgKCAhRlRfTkVXKCByYXN0ZXIgKSApCisgICAgeworICAgICAgcmFzdGVyLT5tZW1vcnkgPSBtZW1vcnk7CisgICAgICBmdF9ibGFja19pbml0KCByYXN0ZXIgKTsKKworICAgICAgKmFyYXN0ZXIgPSByYXN0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBmdF9ibGFja19kb25lKCBibGFja19QUmFzdGVyICByYXN0ZXIgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSAoRlRfTWVtb3J5KXJhc3Rlci0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCByYXN0ZXIgKTsKKyAgfQorCisKKyNlbmRpZiAvKiAhX1NUQU5EQUxPTkVfICovCisKKworICBzdGF0aWMgdm9pZAorICBmdF9ibGFja19yZXNldCggYmxhY2tfUFJhc3RlciAgcmFzdGVyLAorICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICAgcG9vbF9iYXNlLAorICAgICAgICAgICAgICAgICAgTG9uZyAgICAgICAgICAgcG9vbF9zaXplICkKKyAgeworICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CisgICAgRlRfVU5VU0VEKCBwb29sX2Jhc2UgKTsKKyAgICBGVF9VTlVTRUQoIHBvb2xfc2l6ZSApOworICB9CisKKworICBzdGF0aWMgaW50CisgIGZ0X2JsYWNrX3NldF9tb2RlKCBibGFja19QUmFzdGVyICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVTG9uZyAgICAgICAgICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgcGFsZXR0ZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIHJhc3RlciApOworICAgIEZUX1VOVVNFRCggbW9kZSApOworICAgIEZUX1VOVVNFRCggcGFsZXR0ZSApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgZnRfYmxhY2tfcmVuZGVyKCBibGFja19QUmFzdGVyICAgICAgICAgICAgcmFzdGVyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1Jhc3Rlcl9QYXJhbXMqICBwYXJhbXMgKQorICB7CisgICAgY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CisgICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgPSBwYXJhbXMtPnRhcmdldDsKKworICAgIGJsYWNrX1RXb3JrZXIgIHdvcmtlclsxXTsKKworICAgIExvbmcgIGJ1ZmZlcltGVF9NQVgoIEZUX1JFTkRFUl9QT09MX1NJWkUsIDIwNDggKSAvIHNpemVvZiAoIExvbmcgKV07CisKKworICAgIGlmICggIXJhc3RlciApCisgICAgICByZXR1cm4gRlRfVEhST1coIE5vdF9JbmkgKTsKKworICAgIGlmICggIW91dGxpbmUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkICk7CisKKyAgICAvKiByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlIG91dGxpbmUgaXMgZW1wdHkgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID09IDAgfHwgb3V0bGluZS0+bl9jb250b3VycyA8PSAwICkKKyAgICAgIHJldHVybiBSYXN0ZXJfRXJyX05vbmU7CisKKyAgICBpZiAoICFvdXRsaW5lLT5jb250b3VycyB8fCAhb3V0bGluZS0+cG9pbnRzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOworCisgICAgaWYgKCBvdXRsaW5lLT5uX3BvaW50cyAhPQorICAgICAgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV0gKyAxICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOworCisgICAgLyogdGhpcyB2ZXJzaW9uIG9mIHRoZSByYXN0ZXIgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3QgcmVuZGVyaW5nLCBzb3JyeSAqLworICAgIGlmICggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVuc3VwcG9ydGVkICk7CisKKyAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19BQSApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVuc3VwcG9ydGVkICk7CisKKyAgICBpZiAoICF0YXJnZXRfbWFwICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOworCisgICAgLyogbm90aGluZyB0byBkbyAqLworICAgIGlmICggIXRhcmdldF9tYXAtPndpZHRoIHx8ICF0YXJnZXRfbWFwLT5yb3dzICkKKyAgICAgIHJldHVybiBSYXN0ZXJfRXJyX05vbmU7CisKKyAgICBpZiAoICF0YXJnZXRfbWFwLT5idWZmZXIgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkICk7CisKKyAgICByYXMub3V0bGluZSA9ICpvdXRsaW5lOworICAgIHJhcy50YXJnZXQgID0gKnRhcmdldF9tYXA7CisKKyAgICB3b3JrZXItPmJ1ZmYgICAgID0gYnVmZmVyOworICAgIHdvcmtlci0+c2l6ZUJ1ZmYgPSAoJmJ1ZmZlcilbMV07IC8qIFBvaW50cyB0byByaWdodCBhZnRlciBidWZmZXIuICovCisKKyAgICByZXR1cm4gUmVuZGVyX0dseXBoKCBSQVNfVkFSICk7CisgIH0KKworCisgIEZUX0RFRklORV9SQVNURVJfRlVOQ1MoCisgICAgZnRfc3RhbmRhcmRfcmFzdGVyLAorCisgICAgRlRfR0xZUEhfRk9STUFUX09VVExJTkUsCisKKyAgICAoRlRfUmFzdGVyX05ld19GdW5jKSAgICAgZnRfYmxhY2tfbmV3LAorICAgIChGVF9SYXN0ZXJfUmVzZXRfRnVuYykgICBmdF9ibGFja19yZXNldCwKKyAgICAoRlRfUmFzdGVyX1NldF9Nb2RlX0Z1bmMpZnRfYmxhY2tfc2V0X21vZGUsCisgICAgKEZUX1Jhc3Rlcl9SZW5kZXJfRnVuYykgIGZ0X2JsYWNrX3JlbmRlciwKKyAgICAoRlRfUmFzdGVyX0RvbmVfRnVuYykgICAgZnRfYmxhY2tfZG9uZSApCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjcwZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHJhc3Rlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLworLyogIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFJBU1RFUl9IX18KKyNkZWZpbmUgX19GVFJBU1RFUl9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfSU1BR0VfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSBhcmUgdXNpbmcgZnRyYXN0ZXIuYyBhcyBhICAgICAgICAgKi8KKyAgLyogc3RhbmRhbG9uZSBtb2R1bGUsIGZ1bGx5IGluZGVwZW5kZW50IG9mIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogI2RlZmluZSBfU1RBTkRBTE9ORV8gKi8KKworICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9SYXN0ZXJfRnVuY3MgKSAgZnRfc3RhbmRhcmRfcmFzdGVyOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fRlRSQVNURVJfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9mdHJlbmQxLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwpAQCAtMCwwICsxLDI1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRyZW5kMS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSAiZnRyZW5kMS5oIgorI2luY2x1ZGUgImZ0cmFzdGVyLmgiCisjaW5jbHVkZSAicmFzdHBpYy5oIgorCisjaW5jbHVkZSAicmFzdGVycnMuaCIKKworCisgIC8qIGluaXRpYWxpemUgcmVuZGVyZXIgLS0gaW5pdCBpdHMgcmFzdGVyICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9yYXN0ZXIxX2luaXQoIEZUX1JlbmRlcmVyICByZW5kZXIgKQorICB7CisgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX01PRFVMRV9MSUJSQVJZKCByZW5kZXIgKTsKKworCisgICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVzZXQoIHJlbmRlci0+cmFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeS0+cmFzdGVyX3Bvb2xfc2l6ZSApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogc2V0IHJlbmRlci1zcGVjaWZpYyBtb2RlICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9yYXN0ZXIxX3NldF9tb2RlKCBGVF9SZW5kZXJlciAgcmVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgbW9kZV90YWcsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBkYXRhICkKKyAgeworICAgIC8qIHdlIHNpbXBseSBwYXNzIGl0IHRvIHRoZSByYXN0ZXIgKi8KKyAgICByZXR1cm4gcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfc2V0X21vZGUoIHJlbmRlci0+cmFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICk7CisgIH0KKworCisgIC8qIHRyYW5zZm9ybSBhIGdpdmVuIGdseXBoIGltYWdlICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9yYXN0ZXIxX3RyYW5zZm9ybSggRlRfUmVuZGVyZXIgICAgICAgcmVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIGRlbHRhICkKKyAgeworICAgIEZUX0Vycm9yIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoIHNsb3QtPmZvcm1hdCAhPSByZW5kZXItPmdseXBoX2Zvcm1hdCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggbWF0cml4ICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmc2xvdC0+b3V0bGluZSwgbWF0cml4ICk7CisKKyAgICBpZiAoIGRlbHRhICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCAmc2xvdC0+b3V0bGluZSwgZGVsdGEtPngsIGRlbHRhLT55ICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHJldHVybiB0aGUgZ2x5cGgncyBjb250cm9sIGJveCAqLworICBzdGF0aWMgdm9pZAorICBmdF9yYXN0ZXIxX2dldF9jYm94KCBGVF9SZW5kZXJlciAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgICAgIGNib3ggKQorICB7CisgICAgRlRfTUVNX1pFUk8oIGNib3gsIHNpemVvZiAoICpjYm94ICkgKTsKKworICAgIGlmICggc2xvdC0+Zm9ybWF0ID09IHJlbmRlci0+Z2x5cGhfZm9ybWF0ICkKKyAgICAgIEZUX091dGxpbmVfR2V0X0NCb3goICZzbG90LT5vdXRsaW5lLCBjYm94ICk7CisgIH0KKworCisgIC8qIGNvbnZlcnQgYSBzbG90J3MgZ2x5cGggaW1hZ2UgaW50byBhIGJpdG1hcCAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfcmFzdGVyMV9yZW5kZXIoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZTsKKyAgICBGVF9CQm94ICAgICAgY2JveCwgY2JveDA7CisgICAgRlRfVUludCAgICAgIHdpZHRoLCBoZWlnaHQsIHBpdGNoOworICAgIEZUX0JpdG1hcCogICBiaXRtYXA7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKKworICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKKworCisgICAgLyogY2hlY2sgZ2x5cGggaW1hZ2UgZm9ybWF0ICovCisgICAgaWYgKCBzbG90LT5mb3JtYXQgIT0gcmVuZGVyLT5nbHlwaF9mb3JtYXQgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBjaGVjayByZW5kZXJpbmcgbW9kZSAqLworICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9NT05PICkKKyAgICB7CisgICAgICAvKiByYXN0ZXIxIGlzIG9ubHkgY2FwYWJsZSBvZiBwcm9kdWNpbmcgbW9ub2Nocm9tZSBiaXRtYXBzICovCisgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9SZW5kZXJfR2x5cGggKTsKKyAgICB9CisKKyAgICBvdXRsaW5lID0gJnNsb3QtPm91dGxpbmU7CisKKyAgICAvKiB0cmFuc2xhdGUgdGhlIG91dGxpbmUgdG8gdGhlIG5ldyBvcmlnaW4gaWYgbmVlZGVkICovCisgICAgaWYgKCBvcmlnaW4gKQorICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIG9yaWdpbi0+eCwgb3JpZ2luLT55ICk7CisKKyAgICAvKiBjb21wdXRlIHRoZSBjb250cm9sIGJveCwgYW5kIGdyaWQgZml0IGl0ICovCisgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3gwICk7CisKKyAgICAvKiB1bmRvY3VtZW50ZWQgYnV0IGNvbmZpcm1lZDogYmJveCB2YWx1ZXMgZ2V0IHJvdW5kZWQgKi8KKyNpZiAxCisgICAgY2JveC54TWluID0gRlRfUElYX1JPVU5EKCBjYm94MC54TWluICk7CisgICAgY2JveC55TWluID0gRlRfUElYX1JPVU5EKCBjYm94MC55TWluICk7CisgICAgY2JveC54TWF4ID0gRlRfUElYX1JPVU5EKCBjYm94MC54TWF4ICk7CisgICAgY2JveC55TWF4ID0gRlRfUElYX1JPVU5EKCBjYm94MC55TWF4ICk7CisjZWxzZQorICAgIGNib3gueE1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC54TWluICk7CisgICAgY2JveC55TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnlNaW4gKTsKKyAgICBjYm94LnhNYXggPSBGVF9QSVhfQ0VJTCggY2JveC54TWF4ICk7CisgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUwoIGNib3gueU1heCApOworI2VuZGlmCisKKyAgICAvKiBJZiBlaXRoZXIgYHdpZHRoJyBvciBgaGVpZ2h0JyByb3VuZCB0byAwLCB0cnkgICAgKi8KKyAgICAvKiBleHBsaWNpdGx5IHJvdW5kaW5nIHVwL2Rvd24uICBJbiB0aGUgY2FzZSBvZiAgICAgKi8KKyAgICAvKiBnbHlwaHMgY29udGFpbmluZyBvbmx5IG9uZSB2ZXJ5IG5hcnJvdyBmZWF0dXJlLCAgKi8KKyAgICAvKiB0aGlzIGdpdmVzIHRoZSBkcm9wLW91dCBjb21wZW5zYXRpb24gaW4gdGhlIHNjYW4gKi8KKyAgICAvKiBjb252ZXJzaW9uIGNvZGUgYSBjaGFuY2UgdG8gZG8gaXRzIHN0dWZmLiAgICAgICAgKi8KKyAgICB3aWR0aCAgPSAoRlRfVUludCkoICggY2JveC54TWF4IC0gY2JveC54TWluICkgPj4gNiApOworICAgIGlmICggd2lkdGggPT0gMCApCisgICAgeworICAgICAgY2JveC54TWluID0gRlRfUElYX0ZMT09SKCBjYm94MC54TWluICk7CisgICAgICBjYm94LnhNYXggPSBGVF9QSVhfQ0VJTCggY2JveDAueE1heCApOworCisgICAgICB3aWR0aCA9IChGVF9VSW50KSggKCBjYm94LnhNYXggLSBjYm94LnhNaW4gKSA+PiA2ICk7CisgICAgfQorCisgICAgaGVpZ2h0ID0gKEZUX1VJbnQpKCAoIGNib3gueU1heCAtIGNib3gueU1pbiApID4+IDYgKTsKKyAgICBpZiAoIGhlaWdodCA9PSAwICkKKyAgICB7CisgICAgICBjYm94LnlNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gwLnlNaW4gKTsKKyAgICAgIGNib3gueU1heCA9IEZUX1BJWF9DRUlMKCBjYm94MC55TWF4ICk7CisKKyAgICAgIGhlaWdodCA9IChGVF9VSW50KSggKCBjYm94LnlNYXggLSBjYm94LnlNaW4gKSA+PiA2ICk7CisgICAgfQorCisgICAgaWYgKCB3aWR0aCA+IEZUX1VTSE9SVF9NQVggfHwgaGVpZ2h0ID4gRlRfVVNIT1JUX01BWCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGJpdG1hcCA9ICZzbG90LT5iaXRtYXA7CisgICAgbWVtb3J5ID0gcmVuZGVyLT5yb290Lm1lbW9yeTsKKworICAgIC8qIHJlbGVhc2Ugb2xkIGJpdG1hcCBidWZmZXIgKi8KKyAgICBpZiAoIHNsb3QtPmludGVybmFsLT5mbGFncyAmIEZUX0dMWVBIX09XTl9CSVRNQVAgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGJpdG1hcC0+YnVmZmVyICk7CisgICAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJj0gfkZUX0dMWVBIX09XTl9CSVRNQVA7CisgICAgfQorCisgICAgcGl0Y2ggICAgICAgICAgICAgID0gKCAoIHdpZHRoICsgMTUgKSA+PiA0ICkgPDwgMTsKKyAgICBiaXRtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX01PTk87CisKKyAgICBiaXRtYXAtPndpZHRoID0gd2lkdGg7CisgICAgYml0bWFwLT5yb3dzICA9IGhlaWdodDsKKyAgICBiaXRtYXAtPnBpdGNoID0gKGludClwaXRjaDsKKworICAgIGlmICggRlRfQUxMT0NfTVVMVCggYml0bWFwLT5idWZmZXIsIHBpdGNoLCBoZWlnaHQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgfD0gRlRfR0xZUEhfT1dOX0JJVE1BUDsKKworICAgIC8qIHRyYW5zbGF0ZSBvdXRsaW5lIHRvIHJlbmRlciBpdCBpbnRvIHRoZSBiaXRtYXAgKi8KKyAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgLWNib3gueE1pbiwgLWNib3gueU1pbiApOworCisgICAgLyogc2V0IHVwIHBhcmFtZXRlcnMgKi8KKyAgICBwYXJhbXMudGFyZ2V0ID0gYml0bWFwOworICAgIHBhcmFtcy5zb3VyY2UgPSBvdXRsaW5lOworICAgIHBhcmFtcy5mbGFncyAgPSAwOworCisgICAgLyogcmVuZGVyIG91dGxpbmUgaW50byB0aGUgYml0bWFwICovCisgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisKKyAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgY2JveC54TWluLCBjYm94LnlNaW4gKTsKKworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2xvdC0+Zm9ybWF0ICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworICAgIHNsb3QtPmJpdG1hcF9sZWZ0ID0gKEZUX0ludCkoIGNib3gueE1pbiA+PiA2ICk7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgPSAoRlRfSW50KSggY2JveC55TWF4ID4+IDYgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfREVGSU5FX1JFTkRFUkVSKCBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzLAorCisgICAgICBGVF9NT0RVTEVfUkVOREVSRVIsCisgICAgICBzaXplb2YgKCBGVF9SZW5kZXJlclJlYyApLAorCisgICAgICAicmFzdGVyMSIsCisgICAgICAweDEwMDAwTCwKKyAgICAgIDB4MjAwMDBMLAorCisgICAgICAwLCAgICAvKiBtb2R1bGUgc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAgIChGVF9Nb2R1bGVfQ29uc3RydWN0b3IpZnRfcmFzdGVyMV9pbml0LAorICAgICAgKEZUX01vZHVsZV9EZXN0cnVjdG9yKSAwLAorICAgICAgKEZUX01vZHVsZV9SZXF1ZXN0ZXIpICAwCisgICAgLAorCisgICAgRlRfR0xZUEhfRk9STUFUX09VVExJTkUsCisKKyAgICAoRlRfUmVuZGVyZXJfUmVuZGVyRnVuYykgICBmdF9yYXN0ZXIxX3JlbmRlciwKKyAgICAoRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYylmdF9yYXN0ZXIxX3RyYW5zZm9ybSwKKyAgICAoRlRfUmVuZGVyZXJfR2V0Q0JveEZ1bmMpICBmdF9yYXN0ZXIxX2dldF9jYm94LAorICAgIChGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykgIGZ0X3Jhc3RlcjFfc2V0X21vZGUsCisKKyAgICAoRlRfUmFzdGVyX0Z1bmNzKikgICAgJkZUX1NUQU5EQVJEX1JBU1RFUl9HRVQKKyAgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyZW5kMS5oIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvZnRyZW5kMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjcyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRyZW5kMS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRSRU5EMV9IX18KKyNkZWZpbmUgX19GVFJFTkQxX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfUkVOREVSX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3MgKQorCisgIC8qIHRoaXMgcmVuZGVyZXIgaXMgX05PVF8gcGFydCBvZiB0aGUgZGVmYXVsdCBtb2R1bGVzLCB5b3UnbGwgbmVlZCAqLworICAvKiB0byByZWdpc3RlciBpdCBieSBoYW5kIGluIHlvdXIgYXBwbGljYXRpb24uICBJdCBzaG91bGQgb25seSBiZSAgKi8KKyAgLyogdXNlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBGVCAxLnggYW55d2F5LiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzICkKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUUkVORDFfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9tb2R1bGUubWsgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlYTEwNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgcmVuZGVyZXIgbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gUkFTVEVSX01PRFVMRQorCitkZWZpbmUgUkFTVEVSX01PRFVMRQorJChPUEVOX0RSSVZFUikgRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXJhc3RlciAgICAkKEVDSE9fRFJJVkVSX0RFU0MpbW9ub2Nocm9tZSBiaXRtYXAgcmVuZGVyZXIkKEVDSE9fRFJJVkVSX0RPTkUpCitlbmRlZgorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcmFzdGVyLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9yYXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWJiMTZkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcmFzdGVyLmMKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcmFzdGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIG1vbm9jaHJvbWUgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAicmFzdHBpYy5jIgorI2luY2x1ZGUgImZ0cmFzdGVyLmMiCisjaW5jbHVkZSAiZnRyZW5kMS5jIgorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcmFzdGVycnMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmMDBiYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcmFzdGVycnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIG1vbm9jaHJvbWUgcmVuZGVyZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBtb25vY2hyb21lIHJlbmRlcmVyIGVycm9yIGVudW1lcmF0aW9uICovCisgIC8qIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SQVNURVJSU19IX18KKyNkZWZpbmUgX19SQVNURVJSU19IX18KKworI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisKKyN1bmRlZiBfX0ZURVJST1JTX0hfXworCisjdW5kZWYgIEZUX0VSUl9QUkVGSVgKKyNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgUmFzdGVyX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9SYXN0ZXIKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fUkFTVEVSUlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9yYXN0cGljLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9yYXN0cGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1OGM5OQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL3Jhc3RwaWMuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcmFzdHBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciByYXN0ZXIgbW9kdWxlLiAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgInJhc3RwaWMuaCIKKyNpbmNsdWRlICJyYXN0ZXJycy5oIgorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gZnRyYXN0ZXIuYyAqLworICB2b2lkCisgIEZUX0luaXRfQ2xhc3NfZnRfc3RhbmRhcmRfcmFzdGVyKCBGVF9SYXN0ZXJfRnVuY3MqICBmdW5jcyApOworCisKKyAgdm9pZAorICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIGlmICggcGljX2NvbnRhaW5lci0+cmFzdGVyICkKKyAgICB7CisgICAgICBSYXN0ZXJQSUMqICBjb250YWluZXIgPSAoUmFzdGVyUElDKilwaWNfY29udGFpbmVyLT5yYXN0ZXI7CisKKworICAgICAgaWYgKCAtLWNvbnRhaW5lci0+cmVmX2NvdW50ICkKKyAgICAgICAgcmV0dXJuOworICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7CisgICAgICBwaWNfY29udGFpbmVyLT5yYXN0ZXIgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIFJhc3RlclBJQyogICAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgLyogc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIHNlcnZlcyByYXN0ZXI1IHJlbmRlcmVyLCAqLworICAgIC8qIGl0IGltcGxlbWVudHMgcmVmZXJlbmNlIGNvdW50aW5nICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHBpY19jb250YWluZXItPnJhc3RlciApCisgICAgeworICAgICAgKChSYXN0ZXJQSUMqKXBpY19jb250YWluZXItPnJhc3RlciktPnJlZl9jb3VudCsrOworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCisgICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKKyAgICBwaWNfY29udGFpbmVyLT5yYXN0ZXIgPSBjb250YWluZXI7CisKKyAgICBjb250YWluZXItPnJlZl9jb3VudCA9IDE7CisKKyAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KKyAgICBGVF9Jbml0X0NsYXNzX2Z0X3N0YW5kYXJkX3Jhc3RlciggJmNvbnRhaW5lci0+ZnRfc3RhbmRhcmRfcmFzdGVyICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHJlLXJvdXRlIHRoZXNlIGluaXQgYW5kIGZyZWUgZnVuY3Rpb25zIHRvIHRoZSBhYm92ZSBmdW5jdGlvbnMgKi8KKyAgRlRfRXJyb3IKKyAgZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICByZXR1cm4gZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggbGlicmFyeSApOworICB9CisKKworICB2b2lkCisgIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcmFzdHBpYy5oIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcmFzdHBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzU4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Jhc3Rlci9yYXN0cGljLmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcmFzdHBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciByYXN0ZXIgbW9kdWxlLiAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fUkFTVFBJQ19IX18KKyNkZWZpbmUgX19SQVNUUElDX0hfXworCisKK0ZUX0JFR0lOX0hFQURFUgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAorCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9TVEFOREFSRF9SQVNURVJfR0VUICBmdF9zdGFuZGFyZF9yYXN0ZXIKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgUmFzdGVyUElDXworICB7CisgICAgaW50ICAgICAgICAgICAgICByZWZfY291bnQ7CisgICAgRlRfUmFzdGVyX0Z1bmNzICBmdF9zdGFuZGFyZF9yYXN0ZXI7CisKKyAgfSBSYXN0ZXJQSUM7CisKKworI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChSYXN0ZXJQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIucmFzdGVyICkgKQorI2RlZmluZSBGVF9TVEFOREFSRF9SQVNURVJfR0VUICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+ZnRfc3RhbmRhcmRfcmFzdGVyICkKKworCisgIC8qIHNlZSByYXN0cGljLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiAqLworICB2b2lkCisgIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICB2b2lkCisgIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyAgRlRfRXJyb3IKKyAgZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fUkFTVFBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9yYXN0ZXIvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxNGIzNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvcmFzdGVyL3J1bGVzLm1rCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgRnJlZVR5cGUgMiByZW5kZXJlciBtb2R1bGUgYnVpbGQgcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgcmFzdGVyIGRyaXZlciBkaXJlY3RvcnkKKyMKK1JBU1RFUl9ESVIgOj0gJChTUkNfRElSKS9yYXN0ZXIKKworIyBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlIGRyaXZlcgorIworUkFTVEVSX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICRJJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkKFJBU1RFUl9ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyByYXN0ZXIgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCisjCitSQVNURVJfRFJWX1NSQyA6PSAkKFJBU1RFUl9ESVIpL2Z0cmFzdGVyLmMgXAorICAgICAgICAgICAgICAgICAgJChSQVNURVJfRElSKS9mdHJlbmQxLmMgIFwKKyAgICAgICAgICAgICAgICAgICQoUkFTVEVSX0RJUikvcmFzdHBpYy5jCisKKworIyByYXN0ZXIgZHJpdmVyIGhlYWRlcnMKKyMKK1JBU1RFUl9EUlZfSCA6PSAkKFJBU1RFUl9EUlZfU1JDOiUuYz0lLmgpIFwKKyAgICAgICAgICAgICAgICAkKFJBU1RFUl9ESVIpL3Jhc3RlcnJzLmgKKworCisjIHJhc3RlciBkcml2ZXIgb2JqZWN0KHMpCisjCisjICAgUkFTVEVSX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcy4KKyMgICBSQVNURVJfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcy4KKyMKK1JBU1RFUl9EUlZfT0JKX00gOj0gJChSQVNURVJfRFJWX1NSQzokKFJBU1RFUl9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitSQVNURVJfRFJWX09CSl9TIDo9ICQoT0JKX0RJUikvcmFzdGVyLiRPCisKKyMgcmFzdGVyIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitSQVNURVJfRFJWX1NSQ19TIDo9ICQoUkFTVEVSX0RJUikvcmFzdGVyLmMKKworCisjIHJhc3RlciBkcml2ZXIgLSBzaW5nbGUgb2JqZWN0CisjCiskKFJBU1RFUl9EUlZfT0JKX1MpOiAkKFJBU1RFUl9EUlZfU1JDX1MpICQoUkFTVEVSX0RSVl9TUkMpIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlJFRVRZUEVfSCkgJChSQVNURVJfRFJWX0gpCisJJChSQVNURVJfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoUkFTVEVSX0RSVl9TUkNfUykpCisKKworIyByYXN0ZXIgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKFJBU1RFUl9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoUkFTVEVSX0RSVl9IKQorCSQoUkFTVEVSX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChSQVNURVJfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKFJBU1RFUl9EUlZfT0JKX00pCisKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjNmUxNQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9KYW1maWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgRnJlZVR5cGUgMiBzcmMvc2ZudCBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgc2ZudCA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gc2ZvYmpzIHNmZHJpdmVyIHR0Y21hcCB0dG10eCB0dHBvc3QgdHRsb2FkIHR0c2JpdCB0dGtlcm4gdHRiZGYgc2ZudHBpYyA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSBzZm50IDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL3NmbnQgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L21vZHVsZS5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1ZmUyMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9tb2R1bGUubWsKQEAgLTAsMCArMSwyMyBAQAorIworIyBGcmVlVHlwZSAyIFNGTlQgbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gU0ZOVF9NT0RVTEUKKworZGVmaW5lIFNGTlRfTU9EVUxFCiskKE9QRU5fRFJJVkVSKSBGVF9Nb2R1bGVfQ2xhc3MsIHNmbnRfbW9kdWxlX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUilzZm50ICAgICAgJChFQ0hPX0RSSVZFUl9ERVNDKWhlbHBlciBtb2R1bGUgZm9yIFRydWVUeXBlICYgT3BlblR5cGUgZm9ybWF0cyQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvcG5nc2hpbS5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3BuZ3NoaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYwNDUyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3BuZ3NoaW0uYwpAQCAtMCwwICsxLDM3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcG5nc2hpbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9ICisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORworCisgIC8qIFdlIGFsd2F5cyBpbmNsdWRlIDxzdGptcC5oPiwgc28gbWFrZSBsaWJwbmcgc2h1dCB1cCEgKi8KKyNkZWZpbmUgUE5HX1NLSVBfU0VUSk1QX0NIRUNLIDEKKyNpbmNsdWRlIDxwbmcuaD4KKyNpbmNsdWRlICJwbmdzaGltLmgiCisKKyNpbmNsdWRlICJzZmVycm9ycy5oIgorCisKKyAgLyogVGhpcyBjb2RlIGlzIGZyZWVseSBiYXNlZCBvbiBjYWlyby1wbmcuYy4gIFRoZXJlJ3Mgc28gbWFueSB3YXlzICovCisgIC8qIHRvIGNhbGwgbGlicG5nLCBhbmQgdGhlIHdheSBjYWlybyBkb2VzIGl0IGlzIGRlZmFjdG8gc3RhbmRhcmQuICAqLworCisgIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyAgbXVsdGlwbHlfYWxwaGEoIHVuc2lnbmVkIGludCAgYWxwaGEsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIGNvbG9yICkKKyAgeworICAgIHVuc2lnbmVkIGludCAgdGVtcCA9IGFscGhhICogY29sb3IgKyAweDgwOworCisKKyAgICByZXR1cm4gKCB0ZW1wICsgKCB0ZW1wID4+IDggKSApID4+IDg7CisgIH0KKworCisgIC8qIFByZW11bHRpcGxpZXMgZGF0YSBhbmQgY29udmVydHMgUkdCQSBieXRlcyA9PiBuYXRpdmUgZW5kaWFuLiAqLworICBzdGF0aWMgdm9pZAorICBwcmVtdWx0aXBseV9kYXRhKCBwbmdfc3RydWN0cCAgICBwbmcsCisgICAgICAgICAgICAgICAgICAgIHBuZ19yb3dfaW5mb3AgIHJvd19pbmZvLAorICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgICAgICBkYXRhICkKKyAgeworICAgIHVuc2lnbmVkIGludCAgaTsKKworICAgIEZUX1VOVVNFRCggcG5nICk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgcm93X2luZm8tPnJvd2J5dGVzOyBpICs9IDQgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIqICBiYXNlICA9ICZkYXRhW2ldOworICAgICAgdW5zaWduZWQgaW50ICAgIGFscGhhID0gYmFzZVszXTsKKworCisgICAgICBpZiAoIGFscGhhID09IDAgKQorICAgICAgICBiYXNlWzBdID0gYmFzZVsxXSA9IGJhc2VbMl0gPSBiYXNlWzNdID0gMDsKKworICAgICAgZWxzZQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgIHJlZCAgID0gYmFzZVswXTsKKyAgICAgICAgdW5zaWduZWQgaW50ICBncmVlbiA9IGJhc2VbMV07CisgICAgICAgIHVuc2lnbmVkIGludCAgYmx1ZSAgPSBiYXNlWzJdOworCisKKyAgICAgICAgaWYgKCBhbHBoYSAhPSAweEZGICkKKyAgICAgICAgeworICAgICAgICAgIHJlZCAgID0gbXVsdGlwbHlfYWxwaGEoIGFscGhhLCByZWQgICApOworICAgICAgICAgIGdyZWVuID0gbXVsdGlwbHlfYWxwaGEoIGFscGhhLCBncmVlbiApOworICAgICAgICAgIGJsdWUgID0gbXVsdGlwbHlfYWxwaGEoIGFscGhhLCBibHVlICApOworICAgICAgICB9CisKKyAgICAgICAgYmFzZVswXSA9ICh1bnNpZ25lZCBjaGFyKWJsdWU7CisgICAgICAgIGJhc2VbMV0gPSAodW5zaWduZWQgY2hhcilncmVlbjsKKyAgICAgICAgYmFzZVsyXSA9ICh1bnNpZ25lZCBjaGFyKXJlZDsKKyAgICAgICAgYmFzZVszXSA9ICh1bnNpZ25lZCBjaGFyKWFscGhhOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogQ29udmVydHMgUkdCeCBieXRlcyB0byBCR1JBLiAqLworICBzdGF0aWMgdm9pZAorICBjb252ZXJ0X2J5dGVzX3RvX2RhdGEoIHBuZ19zdHJ1Y3RwICAgIHBuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfcm93X2luZm9wICByb3dfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgICAgICBkYXRhICkKKyAgeworICAgIHVuc2lnbmVkIGludCAgaTsKKworICAgIEZUX1VOVVNFRCggcG5nICk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgcm93X2luZm8tPnJvd2J5dGVzOyBpICs9IDQgKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIqICBiYXNlICA9ICZkYXRhW2ldOworICAgICAgdW5zaWduZWQgaW50ICAgIHJlZCAgID0gYmFzZVswXTsKKyAgICAgIHVuc2lnbmVkIGludCAgICBncmVlbiA9IGJhc2VbMV07CisgICAgICB1bnNpZ25lZCBpbnQgICAgYmx1ZSAgPSBiYXNlWzJdOworCisKKyAgICAgIGJhc2VbMF0gPSAodW5zaWduZWQgY2hhcilibHVlOworICAgICAgYmFzZVsxXSA9ICh1bnNpZ25lZCBjaGFyKWdyZWVuOworICAgICAgYmFzZVsyXSA9ICh1bnNpZ25lZCBjaGFyKXJlZDsKKyAgICAgIGJhc2VbM10gPSAweEZGOworICAgIH0KKyAgfQorCisKKyAgLyogVXNlIGVycm9yIGNhbGxiYWNrIHRvIGF2b2lkIHBuZyB3cml0aW5nIHRvIHN0ZGVyci4gKi8KKyAgc3RhdGljIHZvaWQKKyAgZXJyb3JfY2FsbGJhY2soIHBuZ19zdHJ1Y3RwICAgICAgcG5nLAorICAgICAgICAgICAgICAgICAgcG5nX2NvbnN0X2NoYXJwICBlcnJvcl9tc2cgKQorICB7CisgICAgRlRfRXJyb3IqICBlcnJvciA9IChGVF9FcnJvciopcG5nX2dldF9lcnJvcl9wdHIoIHBuZyApOworCisgICAgRlRfVU5VU0VEKCBlcnJvcl9tc2cgKTsKKworCisgICAgKmVycm9yID0gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKKyNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRAorICAgIGZ0X2xvbmdqbXAoIHBuZ19qbXBidWYoIHBuZyApLCAxICk7CisjZW5kaWYKKyAgICAvKiBpZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gYWJvcnQgLi4uICovCisgIH0KKworCisgIC8qIFVzZSB3YXJuaW5nIGNhbGxiYWNrIHRvIGF2b2lkIHBuZyB3cml0aW5nIHRvIHN0ZGVyci4gKi8KKyAgc3RhdGljIHZvaWQKKyAgd2FybmluZ19jYWxsYmFjayggcG5nX3N0cnVjdHAgICAgICBwbmcsCisgICAgICAgICAgICAgICAgICAgIHBuZ19jb25zdF9jaGFycCAgZXJyb3JfbXNnICkKKyAgeworICAgIEZUX1VOVVNFRCggcG5nICk7CisgICAgRlRfVU5VU0VEKCBlcnJvcl9tc2cgKTsKKworICAgIC8qIEp1c3QgaWdub3JlIHdhcm5pbmdzLiAqLworICB9CisKKworICBzdGF0aWMgdm9pZAorICByZWFkX2RhdGFfZnJvbV9GVF9TdHJlYW0oIHBuZ19zdHJ1Y3RwICBwbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3NpemVfdCAgIGxlbmd0aCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIHBuZ192b2lkcCAgcCAgICAgID0gcG5nX2dldF9pb19wdHIoIHBuZyApOworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gKEZUX1N0cmVhbSlwOworCisKKyAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCBsZW5ndGggKSApCisgICAgeworICAgICAgRlRfRXJyb3IqICBlID0gKEZUX0Vycm9yKilwbmdfZ2V0X2Vycm9yX3B0ciggcG5nICk7CisKKworICAgICAgKmUgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fUmVhZCApOworICAgICAgcG5nX2Vycm9yKCBwbmcsIE5VTEwgKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1lbWNweSggZGF0YSwgc3RyZWFtLT5jdXJzb3IsIGxlbmd0aCApOworCisgICAgRlRfRlJBTUVfRVhJVCgpOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgTG9hZF9TQml0X1BuZyggRlRfR2x5cGhTbG90ICAgICBzbG90LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgIHhfb2Zmc2V0LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgIHlfb2Zmc2V0LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgIHBpeF9iaXRzLAorICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3MgIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgcG5nX2xlbiwKKyAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICBwb3B1bGF0ZV9tYXBfYW5kX21ldHJpY3MgKQorICB7CisgICAgRlRfQml0bWFwICAgICptYXAgICA9ICZzbG90LT5iaXRtYXA7CisgICAgRlRfRXJyb3IgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9TdHJlYW1SZWMgIHN0cmVhbTsKKworICAgIHBuZ19zdHJ1Y3RwICBwbmc7CisgICAgcG5nX2luZm9wICAgIGluZm87CisgICAgcG5nX3VpbnRfMzIgIGltZ1dpZHRoLCBpbWdIZWlnaHQ7CisKKyAgICBpbnQgICAgICAgICBiaXRkZXB0aCwgY29sb3JfdHlwZSwgaW50ZXJsYWNlOworICAgIEZUX0ludCAgICAgIGk7CisgICAgcG5nX2J5dGUqICAqcm93cyA9IE5VTEw7IC8qIHBhY2lmeSBjb21waWxlciAqLworCisKKyAgICBpZiAoIHhfb2Zmc2V0IDwgMCB8fAorICAgICAgICAgeV9vZmZzZXQgPCAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCAhcG9wdWxhdGVfbWFwX2FuZF9tZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIChGVF9VSW50KXhfb2Zmc2V0ICsgbWV0cmljcy0+d2lkdGggID4gbWFwLT53aWR0aCB8fAorICAgICAgICAgICAoRlRfVUludCl5X29mZnNldCArIG1ldHJpY3MtPmhlaWdodCA+IG1hcC0+cm93cyAgfHwKKyAgICAgICAgICAgcGl4X2JpdHMgIT0gMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIG1hcC0+cGl4ZWxfbW9kZSAhPSBGVF9QSVhFTF9NT0RFX0JHUkEgICAgICAgICAgICApICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoICZzdHJlYW0sIGRhdGEsIHBuZ19sZW4gKTsKKworICAgIHBuZyA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoIFBOR19MSUJQTkdfVkVSX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19jYWxsYmFjayApOworICAgIGlmICggIXBuZyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGluZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KCBwbmcgKTsKKyAgICBpZiAoICFpbmZvICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBPdXRfT2ZfTWVtb3J5ICk7CisgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCggJnBuZywgTlVMTCwgTlVMTCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggZnRfc2V0am1wKCBwbmdfam1wYnVmKCBwbmcgKSApICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIERlc3Ryb3lFeGl0OworICAgIH0KKworICAgIHBuZ19zZXRfcmVhZF9mbiggcG5nLCAmc3RyZWFtLCByZWFkX2RhdGFfZnJvbV9GVF9TdHJlYW0gKTsKKworICAgIHBuZ19yZWFkX2luZm8oIHBuZywgaW5mbyApOworICAgIHBuZ19nZXRfSUhEUiggcG5nLCBpbmZvLAorICAgICAgICAgICAgICAgICAgJmltZ1dpZHRoLCAmaW1nSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgJmJpdGRlcHRoLCAmY29sb3JfdHlwZSwgJmludGVybGFjZSwKKyAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKTsKKworICAgIGlmICggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICggIXBvcHVsYXRlX21hcF9hbmRfbWV0cmljcyAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIChGVF9JbnQpaW1nV2lkdGggICE9IG1ldHJpY3MtPndpZHRoICB8fAorICAgICAgICAgICAgIChGVF9JbnQpaW1nSGVpZ2h0ICE9IG1ldHJpY3MtPmhlaWdodCApICkgKQorICAgICAgZ290byBEZXN0cm95RXhpdDsKKworICAgIGlmICggcG9wdWxhdGVfbWFwX2FuZF9tZXRyaWNzICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgc2l6ZTsKKworCisgICAgICBtZXRyaWNzLT53aWR0aCAgPSAoRlRfVVNob3J0KWltZ1dpZHRoOworICAgICAgbWV0cmljcy0+aGVpZ2h0ID0gKEZUX1VTaG9ydClpbWdIZWlnaHQ7CisKKyAgICAgIG1hcC0+d2lkdGggICAgICA9IG1ldHJpY3MtPndpZHRoOworICAgICAgbWFwLT5yb3dzICAgICAgID0gbWV0cmljcy0+aGVpZ2h0OworICAgICAgbWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9CR1JBOworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoIG1hcC0+d2lkdGggKiA0ICk7CisgICAgICBtYXAtPm51bV9ncmF5cyAgPSAyNTY7CisKKyAgICAgIC8qIHJlamVjdCB0b28gbGFyZ2UgYml0bWFwcyBzaW1pbGFybHkgdG8gdGhlIHJhc3Rlcml6ZXIgKi8KKyAgICAgIGlmICggbWFwLT5yb3dzID4gMHg3RkZGIHx8IG1hcC0+d2lkdGggPiAweDdGRkYgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKyAgICAgICAgZ290byBEZXN0cm95RXhpdDsKKyAgICAgIH0KKworICAgICAgLyogdGhpcyBkb2Vzbid0IG92ZXJmbG93OiAweDdGRkYgKiAweDdGRkYgKiA0IDwgMl4zMiAqLworICAgICAgc2l6ZSA9IG1hcC0+cm93cyAqIChGVF9VTG9uZyltYXAtPnBpdGNoOworCisgICAgICBlcnJvciA9IGZ0X2dseXBoc2xvdF9hbGxvY19iaXRtYXAoIHNsb3QsIHNpemUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIERlc3Ryb3lFeGl0OworICAgIH0KKworICAgIC8qIGNvbnZlcnQgcGFsZXR0ZS9ncmF5IGltYWdlIHRvIHJnYiAqLworICAgIGlmICggY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFICkKKyAgICAgIHBuZ19zZXRfcGFsZXR0ZV90b19yZ2IoIHBuZyApOworCisgICAgLyogZXhwYW5kIGdyYXkgYml0IGRlcHRoIGlmIG5lZWRlZCAqLworICAgIGlmICggY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZICkKKyAgICB7CisjaWYgUE5HX0xJQlBOR19WRVIgPj0gMTAyMDkKKyAgICAgIHBuZ19zZXRfZXhwYW5kX2dyYXlfMV8yXzRfdG9fOCggcG5nICk7CisjZWxzZQorICAgICAgcG5nX3NldF9ncmF5XzFfMl80X3RvXzgoIHBuZyApOworI2VuZGlmCisgICAgfQorCisgICAgLyogdHJhbnNmb3JtIHRyYW5zcGFyZW5jeSB0byBhbHBoYSAqLworICAgIGlmICggcG5nX2dldF92YWxpZChwbmcsIGluZm8sIFBOR19JTkZPX3RSTlMgKSApCisgICAgICBwbmdfc2V0X3RSTlNfdG9fYWxwaGEoIHBuZyApOworCisgICAgaWYgKCBiaXRkZXB0aCA9PSAxNiApCisgICAgICBwbmdfc2V0X3N0cmlwXzE2KCBwbmcgKTsKKworICAgIGlmICggYml0ZGVwdGggPCA4ICkKKyAgICAgIHBuZ19zZXRfcGFja2luZyggcG5nICk7CisKKyAgICAvKiBjb252ZXJ0IGdyYXlzY2FsZSB0byBSR0IgKi8KKyAgICBpZiAoIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSAgICAgICB8fAorICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBICkKKyAgICAgIHBuZ19zZXRfZ3JheV90b19yZ2IoIHBuZyApOworCisgICAgaWYgKCBpbnRlcmxhY2UgIT0gUE5HX0lOVEVSTEFDRV9OT05FICkKKyAgICAgIHBuZ19zZXRfaW50ZXJsYWNlX2hhbmRsaW5nKCBwbmcgKTsKKworICAgIHBuZ19zZXRfZmlsbGVyKCBwbmcsIDB4RkYsIFBOR19GSUxMRVJfQUZURVIgKTsKKworICAgIC8qIHJlY2hlY2sgaGVhZGVyIGFmdGVyIHNldHRpbmcgRVhQQU5EIG9wdGlvbnMgKi8KKyAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhwbmcsIGluZm8gKTsKKyAgICBwbmdfZ2V0X0lIRFIoIHBuZywgaW5mbywKKyAgICAgICAgICAgICAgICAgICZpbWdXaWR0aCwgJmltZ0hlaWdodCwKKyAgICAgICAgICAgICAgICAgICZiaXRkZXB0aCwgJmNvbG9yX3R5cGUsICZpbnRlcmxhY2UsCisgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICk7CisKKyAgICBpZiAoIGJpdGRlcHRoICE9IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAhKCBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiAgICAgICB8fAorICAgICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSApICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIERlc3Ryb3lFeGl0OworICAgIH0KKworICAgIHN3aXRjaCAoIGNvbG9yX3R5cGUgKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiwgYnV0IGZhbGwgdGhyb3VnaC4gKi8KKworICAgIGNhc2UgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBOgorICAgICAgcG5nX3NldF9yZWFkX3VzZXJfdHJhbnNmb3JtX2ZuKCBwbmcsIHByZW11bHRpcGx5X2RhdGEgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9SR0I6CisgICAgICAvKiBIdW1tLCB0aGlzIHNtZWxscy4gIENhcnJ5IG9uIHRob3VnaC4gKi8KKyAgICAgIHBuZ19zZXRfcmVhZF91c2VyX3RyYW5zZm9ybV9mbiggcG5nLCBjb252ZXJ0X2J5dGVzX3RvX2RhdGEgKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCByb3dzLCBpbWdIZWlnaHQgKSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgICAgZ290byBEZXN0cm95RXhpdDsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IChGVF9JbnQpaW1nSGVpZ2h0OyBpKysgKQorICAgICAgcm93c1tpXSA9IG1hcC0+YnVmZmVyICsgKCB5X29mZnNldCArIGkgKSAqIG1hcC0+cGl0Y2ggKyB4X29mZnNldCAqIDQ7CisKKyAgICBwbmdfcmVhZF9pbWFnZSggcG5nLCByb3dzICk7CisKKyAgICBGVF9GUkVFKCByb3dzICk7CisKKyAgICBwbmdfcmVhZF9lbmQoIHBuZywgaW5mbyApOworCisgIERlc3Ryb3lFeGl0OgorICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCAmcG5nLCAmaW5mbywgTlVMTCApOworICAgIEZUX1N0cmVhbV9DbG9zZSggJnN0cmVhbSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9wbmdzaGltLmggYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvcG5nc2hpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzVjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvcG5nc2hpbS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBuZ3NoaW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBQTkcgQml0bWFwIGdseXBoIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19QTkdTSElNX0hfXworI2RlZmluZSBfX1BOR1NISU1fSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidHRsb2FkLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBMb2FkX1NCaXRfUG5nKCBGVF9HbHlwaFNsb3QgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICAgeF9vZmZzZXQsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICAgeV9vZmZzZXQsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICAgcGl4X2JpdHMsCisgICAgICAgICAgICAgICAgIFRUX1NCaXRfTWV0cmljcyAgbWV0cmljcywKKyAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBwbmdfbGVuLAorICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgIHBvcHVsYXRlX21hcF9hbmRfbWV0cmljcyApOworCisjZW5kaWYKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19QTkdTSElNX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzc2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvcnVsZXMubWsKQEAgLTAsMCArMSw4MSBAQAorIworIyBGcmVlVHlwZSAyIFNGTlQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgU0ZOVCBkcml2ZXIgZGlyZWN0b3J5CisjCitTRk5UX0RJUiA6PSAkKFNSQ19ESVIpL3NmbnQKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitTRk5UX0NPTVBJTEUgOj0gJChDQykgJChBTlNJRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoU0ZOVF9ESVIpKSBcCisgICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgJChGVF9DRkxBR1MpCisKKworIyBTRk5UIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworU0ZOVF9EUlZfU1JDIDo9ICQoU0ZOVF9ESVIpL3R0bG9hZC5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0bXR4LmMgICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0Y21hcC5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0c2JpdC5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0cG9zdC5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0a2Vybi5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3R0YmRmLmMgICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3Nmb2Jqcy5jICAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3NmZHJpdmVyLmMgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3NmbnRwaWMuYyAgXAorICAgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3BuZ3NoaW0uYworCisjIFNGTlQgZHJpdmVyIGhlYWRlcnMKKyMKK1NGTlRfRFJWX0ggOj0gJChTRk5UX0RSVl9TUkM6JWM9JWgpICBcCisgICAgICAgICAgICAgICQoU0ZOVF9ESVIpL3NmZXJyb3JzLmgKKworCisjIFNGTlQgZHJpdmVyIG9iamVjdChzKQorIworIyAgIFNGTlRfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzLgorIyAgIFNGTlRfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcy4KKyMKK1NGTlRfRFJWX09CSl9NIDo9ICQoU0ZOVF9EUlZfU1JDOiQoU0ZOVF9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitTRk5UX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL3NmbnQuJE8KKworIyBTRk5UIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitTRk5UX0RSVl9TUkNfUyA6PSAkKFNGTlRfRElSKS9zZm50LmMKKworCisjIFNGTlQgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChTRk5UX0RSVl9PQkpfUyk6ICQoU0ZOVF9EUlZfU1JDX1MpICQoU0ZOVF9EUlZfU1JDKSBcCisgICAgICAgICAgICAgICAgICAgJChGUkVFVFlQRV9IKSAkKFNGTlRfRFJWX0gpCisJJChTRk5UX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKFNGTlRfRFJWX1NSQ19TKSkKKworCisjIFNGTlQgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKFNGTlRfRElSKS8lLmMgJChGUkVFVFlQRV9IKSAkKFNGTlRfRFJWX0gpCisJJChTRk5UX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChTRk5UX0RSVl9PQkpfUykKK0RSVl9PQkpTX00gKz0gJChTRk5UX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZHJpdmVyLmMgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2Zkcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQ4YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZHJpdmVyLmMKQEAgLTAsMCArMSw1MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHNmZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIaWdoLWxldmVsIFNGTlQgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorCisjaW5jbHVkZSAic2Zkcml2ZXIuaCIKKyNpbmNsdWRlICJ0dGxvYWQuaCIKKyNpbmNsdWRlICJzZm9ianMuaCIKKyNpbmNsdWRlICJzZm50cGljLmgiCisKKyNpbmNsdWRlICJzZmVycm9ycy5oIgorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisjaW5jbHVkZSAidHRzYml0LmgiCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworI2luY2x1ZGUgInR0cG9zdC5oIgorI2VuZGlmCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorI2luY2x1ZGUgInR0YmRmLmgiCisjaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICisjZW5kaWYKKworI2luY2x1ZGUgInR0Y21hcC5oIgorI2luY2x1ZGUgInR0a2Vybi5oIgorI2luY2x1ZGUgInR0bXR4LmgiCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1NGTlRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9UVF9DTUFQX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3NmZHJpdmVyCisKKworICAvKgorICAgKiAgU0ZOVCBUQUJMRSBTRVJWSUNFCisgICAqCisgICAqLworCisgIHN0YXRpYyB2b2lkKgorICBnZXRfc2ZudF90YWJsZSggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9TZm50X1RhZyAgdGFnICkKKyAgeworICAgIHZvaWQqICB0YWJsZTsKKworCisgICAgc3dpdGNoICggdGFnICkKKyAgICB7CisgICAgY2FzZSBGVF9TRk5UX0hFQUQ6CisgICAgICB0YWJsZSA9ICZmYWNlLT5oZWFkZXI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfU0ZOVF9ISEVBOgorICAgICAgdGFibGUgPSAmZmFjZS0+aG9yaXpvbnRhbDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9TRk5UX1ZIRUE6CisgICAgICB0YWJsZSA9IGZhY2UtPnZlcnRpY2FsX2luZm8gPyAmZmFjZS0+dmVydGljYWwgOiBOVUxMOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUX1NGTlRfT1MyOgorICAgICAgdGFibGUgPSBmYWNlLT5vczIudmVyc2lvbiA9PSAweEZGRkZVID8gTlVMTCA6ICZmYWNlLT5vczI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfU0ZOVF9QT1NUOgorICAgICAgdGFibGUgPSAmZmFjZS0+cG9zdHNjcmlwdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9TRk5UX01BWFA6CisgICAgICB0YWJsZSA9ICZmYWNlLT5tYXhfcHJvZmlsZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9TRk5UX1BDTFQ6CisgICAgICB0YWJsZSA9IGZhY2UtPnBjbHQuVmVyc2lvbiA/ICZmYWNlLT5wY2x0IDogTlVMTDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHRhYmxlID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdGFibGU7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBzZm50X3RhYmxlX2luZm8oIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgKnRhZywKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgKm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgKmxlbmd0aCApCisgIHsKKyAgICBpZiAoICFvZmZzZXQgfHwgIWxlbmd0aCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggIXRhZyApCisgICAgICAqbGVuZ3RoID0gZmFjZS0+bnVtX3RhYmxlczsKKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBpZHggPj0gZmFjZS0+bnVtX3RhYmxlcyApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggVGFibGVfTWlzc2luZyApOworCisgICAgICAqdGFnICAgID0gZmFjZS0+ZGlyX3RhYmxlc1tpZHhdLlRhZzsKKyAgICAgICpvZmZzZXQgPSBmYWNlLT5kaXJfdGFibGVzW2lkeF0uT2Zmc2V0OworICAgICAgKmxlbmd0aCA9IGZhY2UtPmRpcl90YWJsZXNbaWR4XS5MZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfU0ZOVF9UQUJMRVJFQygKKyAgICBzZm50X3NlcnZpY2Vfc2ZudF90YWJsZSwKKyAgICAoRlRfU0ZOVF9UYWJsZUxvYWRGdW5jKXR0X2ZhY2VfbG9hZF9hbnksCisgICAgKEZUX1NGTlRfVGFibGVHZXRGdW5jKSBnZXRfc2ZudF90YWJsZSwKKyAgICAoRlRfU0ZOVF9UYWJsZUluZm9GdW5jKXNmbnRfdGFibGVfaW5mbyApCisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworCisgIC8qCisgICAqICBHTFlQSCBESUNUIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHNmbnRfZ2V0X2dseXBoX25hbWUoIFRUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICB7CisgICAgRlRfU3RyaW5nKiAgZ25hbWU7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKworICAgIGVycm9yID0gdHRfZmFjZV9nZXRfcHNfbmFtZSggZmFjZSwgZ2x5cGhfaW5kZXgsICZnbmFtZSApOworICAgIGlmICggIWVycm9yICkKKyAgICAgIEZUX1NUUkNQWU4oIGJ1ZmZlciwgZ25hbWUsIGJ1ZmZlcl9tYXggKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQKKyAgc2ZudF9nZXRfbmFtZV9pbmRleCggVFRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiAgZ2x5cGhfbmFtZSApCisgIHsKKyAgICBGVF9GYWNlICByb290ID0gJmZhY2UtPnJvb3Q7CisKKyAgICBGVF9VSW50ICBpLCBtYXhfZ2lkID0gRlRfVUlOVF9NQVg7CisKKworICAgIGlmICggcm9vdC0+bnVtX2dseXBocyA8IDAgKQorICAgICAgcmV0dXJuIDA7CisgICAgZWxzZSBpZiAoIChGVF9VTG9uZylyb290LT5udW1fZ2x5cGhzIDwgRlRfVUlOVF9NQVggKQorICAgICAgbWF4X2dpZCA9IChGVF9VSW50KXJvb3QtPm51bV9nbHlwaHM7CisgICAgZWxzZQorICAgICAgRlRfVFJBQ0UwKCggIklnbm9yZSBnbHlwaCBuYW1lcyBmb3IgaW52YWxpZCBHSUQgMHglMDh4IC0gMHglMDh4XG4iLAorICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVgsIHJvb3QtPm51bV9nbHlwaHMgKSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG1heF9naWQ7IGkrKyApCisgICAgeworICAgICAgRlRfU3RyaW5nKiAgZ25hbWU7CisgICAgICBGVF9FcnJvciAgICBlcnJvciA9IHR0X2ZhY2VfZ2V0X3BzX25hbWUoIGZhY2UsIGksICZnbmFtZSApOworCisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCAhZnRfc3RyY21wKCBnbHlwaF9uYW1lLCBnbmFtZSApICkKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX0dMWVBIRElDVFJFQygKKyAgICBzZm50X3NlcnZpY2VfZ2x5cGhfZGljdCwKKyAgICAoRlRfR2x5cGhEaWN0X0dldE5hbWVGdW5jKSAgc2ZudF9nZXRfZ2x5cGhfbmFtZSwKKyAgICAoRlRfR2x5cGhEaWN0X05hbWVJbmRleEZ1bmMpc2ZudF9nZXRfbmFtZV9pbmRleCApCisKKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLworCisKKyAgLyoKKyAgICogIFBPU1RTQ1JJUFQgTkFNRSBTRVJWSUNFCisgICAqCisgICAqLworCisgIHN0YXRpYyBjb25zdCBjaGFyKgorICBzZm50X2dldF9wc19uYW1lKCBUVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX0ludCAgICAgICBuLCBmb3VuZF93aW4sIGZvdW5kX2FwcGxlOworICAgIGNvbnN0IGNoYXIqICByZXN1bHQgPSBOVUxMOworCisKKyAgICAvKiBzaG91bGRuJ3QgaGFwcGVuLCBidXQganVzdCBpbiBjYXNlIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyAqLworICAgIGlmICggZmFjZS0+cG9zdHNjcmlwdF9uYW1lICkKKyAgICAgIHJldHVybiBmYWNlLT5wb3N0c2NyaXB0X25hbWU7CisKKyAgICAvKiBzY2FuIHRoZSBuYW1lIHRhYmxlIHRvIHNlZSB3aGV0aGVyIHdlIGhhdmUgYSBQb3N0c2NyaXB0IG5hbWUgaGVyZSwgKi8KKyAgICAvKiBlaXRoZXIgaW4gTWFjaW50b3NoIG9yIFdpbmRvd3MgcGxhdGZvcm0gZW5jb2RpbmdzICAgICAgICAgICAgICAgICAgKi8KKyAgICBmb3VuZF93aW4gICA9IC0xOworICAgIGZvdW5kX2FwcGxlID0gLTE7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IGZhY2UtPm51bV9uYW1lczsgbisrICkKKyAgICB7CisgICAgICBUVF9OYW1lRW50cnlSZWMqICBuYW1lID0gZmFjZS0+bmFtZV90YWJsZS5uYW1lcyArIG47CisKKworICAgICAgaWYgKCBuYW1lLT5uYW1lSUQgPT0gNiAmJiBuYW1lLT5zdHJpbmdMZW5ndGggPiAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBuYW1lLT5wbGF0Zm9ybUlEID09IDMgICAgICYmCisgICAgICAgICAgICAgbmFtZS0+ZW5jb2RpbmdJRCA9PSAxICAgICAmJgorICAgICAgICAgICAgIG5hbWUtPmxhbmd1YWdlSUQgPT0gMHg0MDkgKQorICAgICAgICAgIGZvdW5kX3dpbiA9IG47CisKKyAgICAgICAgaWYgKCBuYW1lLT5wbGF0Zm9ybUlEID09IDEgJiYKKyAgICAgICAgICAgICBuYW1lLT5lbmNvZGluZ0lEID09IDAgJiYKKyAgICAgICAgICAgICBuYW1lLT5sYW5ndWFnZUlEID09IDAgKQorICAgICAgICAgIGZvdW5kX2FwcGxlID0gbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGZvdW5kX3dpbiAhPSAtMSApCisgICAgeworICAgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgICBUVF9OYW1lRW50cnlSZWMqICBuYW1lICAgPSBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzICsgZm91bmRfd2luOworICAgICAgRlRfVUludCAgICAgICAgICAgbGVuICAgID0gbmFtZS0+c3RyaW5nTGVuZ3RoIC8gMjsKKyAgICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKworICAgICAgRlRfVU5VU0VEKCBlcnJvciApOworCisKKyAgICAgIGlmICggIUZUX0FMTE9DKCByZXN1bHQsIG5hbWUtPnN0cmluZ0xlbmd0aCArIDEgKSApCisgICAgICB7CisgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSA9IGZhY2UtPm5hbWVfdGFibGUuc3RyZWFtOworICAgICAgICBGVF9TdHJpbmcqICByICAgICAgPSAoRlRfU3RyaW5nKilyZXN1bHQ7CisgICAgICAgIEZUX0NoYXIqICAgIHA7CisKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBuYW1lLT5zdHJpbmdPZmZzZXQgKSB8fAorICAgICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBuYW1lLT5zdHJpbmdMZW5ndGggKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9GUkVFKCByZXN1bHQgKTsKKyAgICAgICAgICBuYW1lLT5zdHJpbmdMZW5ndGggPSAwOworICAgICAgICAgIG5hbWUtPnN0cmluZ09mZnNldCA9IDA7CisgICAgICAgICAgRlRfRlJFRSggbmFtZS0+c3RyaW5nICk7CisKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBwID0gKEZUX0NoYXIqKXN0cmVhbS0+Y3Vyc29yOworCisgICAgICAgIGZvciAoIDsgbGVuID4gMDsgbGVuLS0sIHAgKz0gMiApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHBbMF0gPT0gMCAmJiBwWzFdID49IDMyICkKKyAgICAgICAgICAgICpyKysgPSBwWzFdOworICAgICAgICB9CisgICAgICAgICpyID0gJ1wwJzsKKworICAgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgICB9CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBmb3VuZF9hcHBsZSAhPSAtMSApCisgICAgeworICAgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgICBUVF9OYW1lRW50cnlSZWMqICBuYW1lICAgPSBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzICsgZm91bmRfYXBwbGU7CisgICAgICBGVF9VSW50ICAgICAgICAgICBsZW4gICAgPSBuYW1lLT5zdHJpbmdMZW5ndGg7CisgICAgICBGVF9FcnJvciAgICAgICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisKKyAgICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKKworCisgICAgICBpZiAoICFGVF9BTExPQyggcmVzdWx0LCBsZW4gKyAxICkgKQorICAgICAgeworICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPm5hbWVfdGFibGUuc3RyZWFtOworCisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggbmFtZS0+c3RyaW5nT2Zmc2V0ICkgfHwKKyAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRCggcmVzdWx0LCBsZW4gKSAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgbmFtZS0+c3RyaW5nT2Zmc2V0ID0gMDsKKyAgICAgICAgICBuYW1lLT5zdHJpbmdMZW5ndGggPSAwOworICAgICAgICAgIEZUX0ZSRUUoIG5hbWUtPnN0cmluZyApOworICAgICAgICAgIEZUX0ZSRUUoIHJlc3VsdCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgICAoKGNoYXIqKXJlc3VsdClbbGVuXSA9ICdcMCc7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgZmFjZS0+cG9zdHNjcmlwdF9uYW1lID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX1BTRk9OVE5BTUVSRUMoCisgICAgc2ZudF9zZXJ2aWNlX3BzX25hbWUsCisgICAgKEZUX1BzTmFtZV9HZXRGdW5jKXNmbnRfZ2V0X3BzX25hbWUgKQorCisKKyAgLyoKKyAgICogIFRUIENNQVAgSU5GTworICAgKi8KKyAgRlRfREVGSU5FX1NFUlZJQ0VfVFRDTUFQU1JFQygKKyAgICB0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8sCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKXR0X2dldF9jbWFwX2luZm8gKQorCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorCisgIHN0YXRpYyBGVF9FcnJvcgorICBzZm50X2dldF9jaGFyc2V0X2lkKCBUVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfcmVnaXN0cnkgKQorICB7CisgICAgQkRGX1Byb3BlcnR5UmVjICBlbmNvZGluZywgcmVnaXN0cnk7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKworCisgICAgLyogWFhYOiBJIGRvbid0IGtub3cgd2hldGhlciB0aGlzIGlzIGNvcnJlY3QsIHNpbmNlCisgICAgICogICAgICB0dF9mYWNlX2ZpbmRfYmRmX3Byb3Agb25seSByZXR1cm5zIHNvbWV0aGluZyBjb3JyZWN0IGlmIHdlIGhhdmUKKyAgICAgKiAgICAgIHByZXZpb3VzbHkgc2VsZWN0ZWQgYSBzaXplIHRoYXQgaXMgbGlzdGVkIGluIHRoZSBCREYgdGFibGUuCisgICAgICogICAgICBTaG91bGQgd2UgY2hhbmdlIHRoZSBCREYgdGFibGUgZm9ybWF0IHRvIGluY2x1ZGUgc2luZ2xlIG9mZnNldHMKKyAgICAgKiAgICAgIGZvciBgQ0hBUlNFVF9SRUdJU1RSWScgYW5kIGBDSEFSU0VUX0VOQ09ESU5HJz8KKyAgICAgKi8KKyAgICBlcnJvciA9IHR0X2ZhY2VfZmluZF9iZGZfcHJvcCggZmFjZSwgIkNIQVJTRVRfUkVHSVNUUlkiLCAmcmVnaXN0cnkgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgZXJyb3IgPSB0dF9mYWNlX2ZpbmRfYmRmX3Byb3AoIGZhY2UsICJDSEFSU0VUX0VOQ09ESU5HIiwgJmVuY29kaW5nICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIGlmICggcmVnaXN0cnkudHlwZSA9PSBCREZfUFJPUEVSVFlfVFlQRV9BVE9NICYmCisgICAgICAgICAgICAgZW5jb2RpbmcudHlwZSA9PSBCREZfUFJPUEVSVFlfVFlQRV9BVE9NICkKKyAgICAgICAgeworICAgICAgICAgICphY2hhcnNldF9lbmNvZGluZyA9IGVuY29kaW5nLnUuYXRvbTsKKyAgICAgICAgICAqYWNoYXJzZXRfcmVnaXN0cnkgPSByZWdpc3RyeS51LmF0b207CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX0JERlJlYygKKyAgICBzZm50X3NlcnZpY2VfYmRmLAorICAgIChGVF9CREZfR2V0Q2hhcnNldElkRnVuYylzZm50X2dldF9jaGFyc2V0X2lkLAorICAgIChGVF9CREZfR2V0UHJvcGVydHlGdW5jKSB0dF9mYWNlX2ZpbmRfYmRmX3Byb3AgKQorCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0JERiAqLworCisKKyAgLyoKKyAgICogIFNFUlZJQ0UgTElTVAorICAgKi8KKworI2lmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTICYmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9CREYKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNSgKKyAgICBzZm50X3NlcnZpY2VzLAorICAgIEZUX1NFUlZJQ0VfSURfU0ZOVF9UQUJMRSwgICAgICAgICAgICZTRk5UX1NFUlZJQ0VfU0ZOVF9UQUJMRV9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJlNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX0dMWVBIX0RJQ1QsICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfQkRGLCAgICAgICAgICAgICAgICAgICZTRk5UX1NFUlZJQ0VfQkRGX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICkKKyNlbGlmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzQoCisgICAgc2ZudF9zZXJ2aWNlcywKKyAgICBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUsICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX1NGTlRfVEFCTEVfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZTRk5UX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICkKKyNlbGlmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9CREYKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNCgKKyAgICBzZm50X3NlcnZpY2VzLAorICAgIEZUX1NFUlZJQ0VfSURfU0ZOVF9UQUJMRSwgICAgICAgICAgICZTRk5UX1NFUlZJQ0VfU0ZOVF9UQUJMRV9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJlNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX0JERiwgICAgICAgICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX0JERl9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJlRUX1NFUlZJQ0VfQ01BUF9JTkZPX0dFVCApCisjZWxzZQorICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMzKAorICAgIHNmbnRfc2VydmljZXMsCisgICAgRlRfU0VSVklDRV9JRF9TRk5UX1RBQkxFLCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmU0ZOVF9TRVJWSUNFX1BTX05BTUVfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZUVF9TRVJWSUNFX0NNQVBfSU5GT19HRVQgKQorI2VuZGlmCisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX01vZHVsZV9JbnRlcmZhY2UgKQorICBzZm50X2dldF9pbnRlcmZhY2UoIEZUX01vZHVsZSAgICBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG1vZHVsZV9pbnRlcmZhY2UgKQorICB7CisgICAgLyogU0ZOVF9TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKworCisgICAgaWYgKCAhbW9kdWxlICkKKyAgICAgIHJldHVybiBOVUxMOworICAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gTlVMTDsKKyNlbHNlCisgICAgRlRfVU5VU0VEKCBtb2R1bGUgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIFNGTlRfU0VSVklDRVNfR0VULCBtb2R1bGVfaW50ZXJmYWNlICk7CisgIH0KKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisjZGVmaW5lIFBVVF9FTUJFRERFRF9CSVRNQVBTKCBhICkgIGEKKyNlbHNlCisjZGVmaW5lIFBVVF9FTUJFRERFRF9CSVRNQVBTKCBhICkgIE5VTEwKKyNlbmRpZgorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisjZGVmaW5lIFBVVF9QU19OQU1FUyggYSApICBhCisjZWxzZQorI2RlZmluZSBQVVRfUFNfTkFNRVMoIGEgKSAgTlVMTAorI2VuZGlmCisKKyAgRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKAorICAgIHNmbnRfaW50ZXJmYWNlLAorICAgIHR0X2ZhY2VfZ290b190YWJsZSwKKworICAgIHNmbnRfaW5pdF9mYWNlLAorICAgIHNmbnRfbG9hZF9mYWNlLAorICAgIHNmbnRfZG9uZV9mYWNlLAorICAgIHNmbnRfZ2V0X2ludGVyZmFjZSwKKworICAgIHR0X2ZhY2VfbG9hZF9hbnksCisKKyAgICB0dF9mYWNlX2xvYWRfaGVhZCwKKyAgICB0dF9mYWNlX2xvYWRfaGhlYSwKKyAgICB0dF9mYWNlX2xvYWRfY21hcCwKKyAgICB0dF9mYWNlX2xvYWRfbWF4cCwKKyAgICB0dF9mYWNlX2xvYWRfb3MyLAorICAgIHR0X2ZhY2VfbG9hZF9wb3N0LAorCisgICAgdHRfZmFjZV9sb2FkX25hbWUsCisgICAgdHRfZmFjZV9mcmVlX25hbWUsCisKKyAgICB0dF9mYWNlX2xvYWRfa2VybiwKKyAgICB0dF9mYWNlX2xvYWRfZ2FzcCwKKyAgICB0dF9mYWNlX2xvYWRfcGNsdCwKKworICAgIC8qIHNlZSBgdHRsb2FkLmgnICovCisgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2VfbG9hZF9iaGVkICksCisKKyAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9sb2FkX3NiaXRfaW1hZ2UgKSwKKworICAgIC8qIHNlZSBgdHRwb3N0LmgnICovCisgICAgUFVUX1BTX05BTUVTKCB0dF9mYWNlX2dldF9wc19uYW1lICAgKSwKKyAgICBQVVRfUFNfTkFNRVMoIHR0X2ZhY2VfZnJlZV9wc19uYW1lcyApLAorCisgICAgLyogc2luY2UgdmVyc2lvbiAyLjEuOCAqLworICAgIHR0X2ZhY2VfZ2V0X2tlcm5pbmcsCisKKyAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuMiAqLworICAgIHR0X2ZhY2VfbG9hZF9mb250X2RpciwKKyAgICB0dF9mYWNlX2xvYWRfaG10eCwKKworICAgIC8qIHNlZSBgdHRzYml0LmgnIGFuZCBgc2ZudC5oJyAqLworICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2xvYWRfc2JpdCApLAorICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2ZyZWVfc2JpdCApLAorCisgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2Vfc2V0X3NiaXRfc3RyaWtlICAgICApLAorICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MgKSwKKworICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MKKyAgKQorCisKKyAgRlRfREVGSU5FX01PRFVMRSgKKyAgICBzZm50X21vZHVsZV9jbGFzcywKKworICAgIDAsICAvKiBub3QgYSBmb250IGRyaXZlciBvciByZW5kZXJlciAqLworICAgIHNpemVvZiAoIEZUX01vZHVsZVJlYyApLAorCisgICAgInNmbnQiLCAgICAgLyogZHJpdmVyIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDEwMDAwTCwgICAvKiBkcml2ZXIgdmVyc2lvbiAxLjAgICAgICAgICAgICAgICAgICAgICAqLworICAgIDB4MjAwMDBMLCAgIC8qIGRyaXZlciByZXF1aXJlcyBGcmVlVHlwZSAyLjAgb3IgaGlnaGVyICovCisKKyAgICAoY29uc3Qgdm9pZCopJlNGTlRfSU5URVJGQUNFX0dFVCwgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKworICAgIChGVF9Nb2R1bGVfQ29uc3RydWN0b3IpMCwKKyAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIDAsCisgICAgKEZUX01vZHVsZV9SZXF1ZXN0ZXIpICBzZm50X2dldF9pbnRlcmZhY2UgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZHJpdmVyLmggYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2Zkcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQxMTljCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZHJpdmVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2Zkcml2ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU0ZEUklWRVJfSF9fCisjZGVmaW5lIF9fU0ZEUklWRVJfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9NT0RVTEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfREVDTEFSRV9NT0RVTEUoIHNmbnRfbW9kdWxlX2NsYXNzICkKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1NGRFJJVkVSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZXJyb3JzLmggYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZlcnJvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JlZjNmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmZXJyb3JzLmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2ZlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFNGTlQgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBTRk5UIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1NGRVJST1JTX0hfXworI2RlZmluZSBfX1NGRVJST1JTX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBTRk5UX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9TRk5UCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX1NGRVJST1JTX0hfXyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9zZm50LmMgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGI1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZudC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHNmbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInNmbnRwaWMuYyIKKyNpbmNsdWRlICJ0dGxvYWQuYyIKKyNpbmNsdWRlICJ0dG10eC5jIgorI2luY2x1ZGUgInR0Y21hcC5jIgorI2luY2x1ZGUgInR0a2Vybi5jIgorI2luY2x1ZGUgInNmb2Jqcy5jIgorI2luY2x1ZGUgInNmZHJpdmVyLmMiCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKyNpbmNsdWRlICJwbmdzaGltLmMiCisjaW5jbHVkZSAidHRzYml0LmMiCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworI2luY2x1ZGUgInR0cG9zdC5jIgorI2VuZGlmCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorI2luY2x1ZGUgInR0YmRmLmMiCisjZW5kaWYKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZudHBpYy5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmbnRwaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFmNGJjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmbnRwaWMuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2ZudHBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgInNmbnRwaWMuaCIKKyNpbmNsdWRlICJzZmVycm9ycy5oIgorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gc2Zkcml2ZXIuYyAqLworICBGVF9FcnJvcgorICBGVF9DcmVhdGVfQ2xhc3Nfc2ZudF9zZXJ2aWNlcyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOworICB2b2lkCisgIEZUX0Rlc3Ryb3lfQ2xhc3Nfc2ZudF9zZXJ2aWNlcyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9iZGYoIEZUX1NlcnZpY2VfQkRGUmVjKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX3NmbnRfaW50ZXJmYWNlKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNGTlRfSW50ZXJmYWNlKiAgY2xhenogKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9nbHlwaF9kaWN0KAorICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgbGlicmFyeSwKKyAgICBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyogIGNsYXp6ICk7CisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc19zZm50X3NlcnZpY2VfcHNfbmFtZSgKKyAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgIEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYyogIGNsYXp6ICk7CisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc190dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8oCisgICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgbGlicmFyeSwKKyAgICBGVF9TZXJ2aWNlX1RUQ01hcHNSZWMqICBjbGF6eiApOworICB2b2lkCisgIEZUX0luaXRfQ2xhc3Nfc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUoCisgICAgRlRfU2VydmljZV9TRk5UX1RhYmxlUmVjKiAgY2xhenogKTsKKworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gdHRjbWFwLmMgKi8KKyAgRlRfRXJyb3IKKyAgRlRfQ3JlYXRlX0NsYXNzX3R0X2NtYXBfY2xhc3NlcyggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwX0NsYXNzKiogIG91dHB1dF9jbGFzcyApOworICB2b2lkCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBfQ2xhc3MqICBjbGF6eiApOworCisKKyAgdm9pZAorICBzZm50X21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBpZiAoIHBpY19jb250YWluZXItPnNmbnQgKQorICAgIHsKKyAgICAgIHNmbnRNb2R1bGVQSUMqICBjb250YWluZXIgPSAoc2ZudE1vZHVsZVBJQyopcGljX2NvbnRhaW5lci0+c2ZudDsKKworCisgICAgICBpZiAoIGNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlcyApCisgICAgICAgIEZUX0Rlc3Ryb3lfQ2xhc3Nfc2ZudF9zZXJ2aWNlcyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXItPnNmbnRfc2VydmljZXMgKTsKKyAgICAgIGNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlcyA9IE5VTEw7CisKKyAgICAgIGlmICggY29udGFpbmVyLT50dF9jbWFwX2NsYXNzZXMgKQorICAgICAgICBGVF9EZXN0cm95X0NsYXNzX3R0X2NtYXBfY2xhc3NlcyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+dHRfY21hcF9jbGFzc2VzICk7CisgICAgICBjb250YWluZXItPnR0X2NtYXBfY2xhc3NlcyA9IE5VTEw7CisKKyAgICAgIEZUX0ZSRUUoIGNvbnRhaW5lciApOworICAgICAgcGljX2NvbnRhaW5lci0+c2ZudCA9IE5VTEw7CisgICAgfQorICB9CisKKworICBGVF9FcnJvcgorICBzZm50X21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOworICAgIHNmbnRNb2R1bGVQSUMqICAgICBjb250YWluZXIgICAgID0gTlVMTDsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KKyAgICBpZiAoIEZUX0FMTE9DKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOworICAgIHBpY19jb250YWluZXItPnNmbnQgPSBjb250YWluZXI7CisKKyAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KKyAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19zZm50X3NlcnZpY2VzKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb250YWluZXItPnNmbnRfc2VydmljZXMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gRlRfQ3JlYXRlX0NsYXNzX3R0X2NtYXBfY2xhc3NlcyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb250YWluZXItPnR0X2NtYXBfY2xhc3NlcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfSW5pdF9DbGFzc19zZm50X3NlcnZpY2VfZ2x5cGhfZGljdCgKKyAgICAgIGxpYnJhcnksICZjb250YWluZXItPnNmbnRfc2VydmljZV9nbHlwaF9kaWN0ICk7CisgICAgRlRfSW5pdF9DbGFzc19zZm50X3NlcnZpY2VfcHNfbmFtZSgKKyAgICAgIGxpYnJhcnksICZjb250YWluZXItPnNmbnRfc2VydmljZV9wc19uYW1lICk7CisgICAgRlRfSW5pdF9DbGFzc190dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8oCisgICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT50dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8gKTsKKyAgICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9zZm50X3RhYmxlKAorICAgICAgJmNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUgKTsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorICAgIEZUX0luaXRfQ2xhc3Nfc2ZudF9zZXJ2aWNlX2JkZiggJmNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlX2JkZiApOworI2VuZGlmCisgICAgRlRfSW5pdF9DbGFzc19zZm50X2ludGVyZmFjZSggbGlicmFyeSwgJmNvbnRhaW5lci0+c2ZudF9pbnRlcmZhY2UgKTsKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgICAgc2ZudF9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZudHBpYy5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmbnRwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNkNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3NmbnRwaWMuaApAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2ZudHBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU0ZOVFBJQ19IX18KKyNkZWZpbmUgX19TRk5UUElDX0hfXworCisKK0ZUX0JFR0lOX0hFQURFUgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAorCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBTRk5UX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgIHNmbnRfc2VydmljZXMKKyNkZWZpbmUgU0ZOVF9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VUICBzZm50X3NlcnZpY2VfZ2x5cGhfZGljdAorI2RlZmluZSBTRk5UX1NFUlZJQ0VfUFNfTkFNRV9HRVQgICAgIHNmbnRfc2VydmljZV9wc19uYW1lCisjZGVmaW5lIFRUX1NFUlZJQ0VfQ01BUF9JTkZPX0dFVCAgICAgdHRfc2VydmljZV9nZXRfY21hcF9pbmZvCisjZGVmaW5lIFNGTlRfU0VSVklDRVNfR0VUICAgICAgICAgICAgc2ZudF9zZXJ2aWNlcworI2RlZmluZSBUVF9DTUFQX0NMQVNTRVNfR0VUICAgICAgICAgIHR0X2NtYXBfY2xhc3NlcworI2RlZmluZSBTRk5UX1NFUlZJQ0VfU0ZOVF9UQUJMRV9HRVQgIHNmbnRfc2VydmljZV9zZm50X3RhYmxlCisjZGVmaW5lIFNGTlRfU0VSVklDRV9CREZfR0VUICAgICAgICAgc2ZudF9zZXJ2aWNlX2JkZgorI2RlZmluZSBTRk5UX0lOVEVSRkFDRV9HRVQgICAgICAgICAgIHNmbnRfaW50ZXJmYWNlCisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAgLyogc29tZSBpbmNsdWRlIGZpbGVzIHJlcXVpcmVkIGZvciBtZW1iZXJzIG9mIHNmbnRNb2R1bGVQSUMgKi8KKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1NGTlRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9UVF9DTUFQX0gKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCisjaW5jbHVkZSAidHRiZGYuaCIKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfQkRGX0gKKyNlbmRpZgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICisjaW5jbHVkZSAidHRjbWFwLmgiCisKKworICB0eXBlZGVmIHN0cnVjdCAgc2ZudE1vZHVsZVBJQ18KKyAgeworICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgc2ZudF9zZXJ2aWNlczsKKyAgICBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyAgIHNmbnRfc2VydmljZV9nbHlwaF9kaWN0OworICAgIEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYyAgc2ZudF9zZXJ2aWNlX3BzX25hbWU7CisgICAgRlRfU2VydmljZV9UVENNYXBzUmVjICAgICB0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm87CisgICAgVFRfQ01hcF9DbGFzcyogICAgICAgICAgICB0dF9jbWFwX2NsYXNzZXM7CisgICAgRlRfU2VydmljZV9TRk5UX1RhYmxlUmVjICBzZm50X3NlcnZpY2Vfc2ZudF90YWJsZTsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorICAgIEZUX1NlcnZpY2VfQkRGUmVjICAgICAgICAgc2ZudF9zZXJ2aWNlX2JkZjsKKyNlbmRpZgorICAgIFNGTlRfSW50ZXJmYWNlICAgICAgICAgICAgc2ZudF9pbnRlcmZhY2U7CisKKyAgfSBzZm50TW9kdWxlUElDOworCisKKyNkZWZpbmUgR0VUX1BJQyggbGliICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChzZm50TW9kdWxlUElDKikoIChsaWIpLT5waWNfY29udGFpbmVyLnNmbnQgKSApCisKKyNkZWZpbmUgU0ZOVF9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+c2ZudF9zZXJ2aWNlcyApCisjZGVmaW5lIFNGTlRfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2VfZ2x5cGhfZGljdCApCisjZGVmaW5lIFNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2VfcHNfbmFtZSApCisjZGVmaW5lIFRUX1NFUlZJQ0VfQ01BUF9JTkZPX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+dHRfc2VydmljZV9nZXRfY21hcF9pbmZvICkKKyNkZWZpbmUgU0ZOVF9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+c2ZudF9zZXJ2aWNlcyApCisjZGVmaW5lIFRUX0NNQVBfQ0xBU1NFU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+dHRfY21hcF9jbGFzc2VzICkKKyNkZWZpbmUgU0ZOVF9TRVJWSUNFX1NGTlRfVEFCTEVfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9zZm50X3RhYmxlICkKKyNkZWZpbmUgU0ZOVF9TRVJWSUNFX0JERl9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+c2ZudF9zZXJ2aWNlX2JkZiApCisjZGVmaW5lIFNGTlRfSU5URVJGQUNFX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X2ludGVyZmFjZSApCisKKworICAvKiBzZWUgc2ZudHBpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KKyAgdm9pZAorICBzZm50X21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisgIEZUX0Vycm9yCisgIHNmbnRfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgIC8qICovCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fU0ZOVFBJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9zZm9ianMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC9zZm9ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGMyN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3Nmb2Jqcy5jCkBAIC0wLDAgKzEsMTU3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2ZvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKGJhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJzZm9ianMuaCIKKyNpbmNsdWRlICJ0dGxvYWQuaCIKKyNpbmNsdWRlICJ0dGNtYXAuaCIKKyNpbmNsdWRlICJ0dGtlcm4uaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKyNpbmNsdWRlIEZUX1NGTlRfTkFNRVNfSAorI2luY2x1ZGUgRlRfR1pJUF9ICisjaW5jbHVkZSAic2ZlcnJvcnMuaCIKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCisjaW5jbHVkZSAidHRiZGYuaCIKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfc2ZvYmpzCisKKworCisgIC8qIGNvbnZlcnQgYSBVVEYtMTYgbmFtZSBlbnRyeSB0byBBU0NJSSAqLworICBzdGF0aWMgRlRfU3RyaW5nKgorICB0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fdXRmMTYoIFRUX05hbWVFbnRyeSAgZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgKQorICB7CisgICAgRlRfU3RyaW5nKiAgc3RyaW5nID0gTlVMTDsKKyAgICBGVF9VSW50ICAgICBsZW4sIGNvZGUsIG47CisgICAgRlRfQnl0ZSogICAgcmVhZCAgID0gKEZUX0J5dGUqKWVudHJ5LT5zdHJpbmc7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisKKworICAgIGxlbiA9IChGVF9VSW50KWVudHJ5LT5zdHJpbmdMZW5ndGggLyAyOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHN0cmluZywgbGVuICsgMSApICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yICggbiA9IDA7IG4gPCBsZW47IG4rKyApCisgICAgeworICAgICAgY29kZSA9IEZUX05FWFRfVVNIT1JUKCByZWFkICk7CisKKyAgICAgIGlmICggY29kZSA9PSAwICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggY29kZSA8IDMyIHx8IGNvZGUgPiAxMjcgKQorICAgICAgICBjb2RlID0gJz8nOworCisgICAgICBzdHJpbmdbbl0gPSAoY2hhciljb2RlOworICAgIH0KKworICAgIHN0cmluZ1tuXSA9IDA7CisKKyAgICByZXR1cm4gc3RyaW5nOworICB9CisKKworICAvKiBjb252ZXJ0IGFuIEFwcGxlIFJvbWFuIG9yIHN5bWJvbCBuYW1lIGVudHJ5IHRvIEFTQ0lJICovCisgIHN0YXRpYyBGVF9TdHJpbmcqCisgIHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV9vdGhlciggVFRfTmFtZUVudHJ5ICBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9TdHJpbmcqICBzdHJpbmcgPSBOVUxMOworICAgIEZUX1VJbnQgICAgIGxlbiwgY29kZSwgbjsKKyAgICBGVF9CeXRlKiAgICByZWFkICAgPSAoRlRfQnl0ZSopZW50cnktPnN0cmluZzsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKworCisgICAgbGVuID0gKEZUX1VJbnQpZW50cnktPnN0cmluZ0xlbmd0aDsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBzdHJpbmcsIGxlbiArIDEgKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgbGVuOyBuKysgKQorICAgIHsKKyAgICAgIGNvZGUgPSAqcmVhZCsrOworCisgICAgICBpZiAoIGNvZGUgPT0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIGNvZGUgPCAzMiB8fCBjb2RlID4gMTI3ICkKKyAgICAgICAgY29kZSA9ICc/JzsKKworICAgICAgc3RyaW5nW25dID0gKGNoYXIpY29kZTsKKyAgICB9CisKKyAgICBzdHJpbmdbbl0gPSAwOworCisgICAgcmV0dXJuIHN0cmluZzsKKyAgfQorCisKKyAgdHlwZWRlZiBGVF9TdHJpbmcqICAoKlRUX05hbWVFbnRyeV9Db252ZXJ0RnVuYykoIFRUX05hbWVFbnRyeSAgZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9nZXRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJucyBhIGdpdmVuIEVOR0xJU0ggbmFtZSByZWNvcmQgaW4gQVNDSUkuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1laWQgOjogVGhlIG5hbWUgaWQgb2YgdGhlIG5hbWUgcmVjb3JkIHRvIHJldHVybi4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBuYW1lICAgOjogVGhlIGFkZHJlc3Mgb2YgYSBzdHJpbmcgcG9pbnRlci4gIE5VTEwgaWYgbm8gbmFtZSBpcyAgICAgKi8KKyAgLyogICAgICAgICAgICAgIHByZXNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfZmFjZV9nZXRfbmFtZSggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICBuYW1laWQsCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBuYW1lICkKKyAgeworICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9TdHJpbmcqICAgICAgICByZXN1bHQgPSBOVUxMOworICAgIEZUX1VTaG9ydCAgICAgICAgIG47CisgICAgVFRfTmFtZUVudHJ5UmVjKiAgcmVjOworICAgIEZUX0ludCAgICAgICAgICAgIGZvdW5kX2FwcGxlICAgICAgICAgPSAtMTsKKyAgICBGVF9JbnQgICAgICAgICAgICBmb3VuZF9hcHBsZV9yb21hbiAgID0gLTE7CisgICAgRlRfSW50ICAgICAgICAgICAgZm91bmRfYXBwbGVfZW5nbGlzaCA9IC0xOworICAgIEZUX0ludCAgICAgICAgICAgIGZvdW5kX3dpbiAgICAgICAgICAgPSAtMTsKKyAgICBGVF9JbnQgICAgICAgICAgICBmb3VuZF91bmljb2RlICAgICAgID0gLTE7CisKKyAgICBGVF9Cb29sICAgICAgICAgICBpc19lbmdsaXNoID0gMDsKKworICAgIFRUX05hbWVFbnRyeV9Db252ZXJ0RnVuYyAgY29udmVydDsKKworCisgICAgRlRfQVNTRVJUKCBuYW1lICk7CisKKyAgICByZWMgPSBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgZmFjZS0+bnVtX25hbWVzOyBuKyssIHJlYysrICkKKyAgICB7CisgICAgICAvKiBBY2NvcmRpbmcgdG8gdGhlIE9wZW5UeXBlIDEuMyBzcGVjaWZpY2F0aW9uLCBvbmx5IE1pY3Jvc29mdCBvciAgKi8KKyAgICAgIC8qIEFwcGxlIHBsYXRmb3JtIElEcyBtaWdodCBiZSB1c2VkIGluIHRoZSBgbmFtZScgdGFibGUuICBUaGUgICAgICAqLworICAgICAgLyogYFVuaWNvZGUnIHBsYXRmb3JtIGlzIHJlc2VydmVkIGZvciB0aGUgYGNtYXAnIHRhYmxlLCBhbmQgdGhlICAgICovCisgICAgICAvKiBgSVNPJyBvbmUgaXMgZGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogSG93ZXZlciwgdGhlIEFwcGxlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZG9lc24ndCBzYXkgdGhlIHNhbWUgICovCisgICAgICAvKiB0aGluZyBhbmQgZ29lcyB0byBzdWdnZXN0IHRoYXQgYWxsIFVuaWNvZGUgYG5hbWUnIHRhYmxlIGVudHJpZXMgKi8KKyAgICAgIC8qIHNob3VsZCBiZSBjb2RlZCBpbiBVVEYtMTYgKGluIGJpZy1lbmRpYW4gZm9ybWF0IEkgc3VwcG9zZSkuICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIHJlYy0+bmFtZUlEID09IG5hbWVpZCAmJiByZWMtPnN0cmluZ0xlbmd0aCA+IDAgKQorICAgICAgeworICAgICAgICBzd2l0Y2ggKCByZWMtPnBsYXRmb3JtSUQgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERToKKyAgICAgICAgY2FzZSBUVF9QTEFURk9STV9JU086CisgICAgICAgICAgLyogdGhlcmUgaXMgYGxhbmd1YWdlSUQnIHRvIGNoZWNrIHRoZXJlLiAgV2Ugc2hvdWxkIHVzZSB0aGlzICovCisgICAgICAgICAgLyogZmllbGQgb25seSBhcyBhIGxhc3Qgc29sdXRpb24gd2hlbiBub3RoaW5nIGVsc2UgaXMgICAgICAgICovCisgICAgICAgICAgLyogYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgZm91bmRfdW5pY29kZSA9IG47CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUVF9QTEFURk9STV9NQUNJTlRPU0g6CisgICAgICAgICAgLyogVGhpcyBpcyBhIGJpdCBzcGVjaWFsIGJlY2F1c2Ugc29tZSBmb250cyB3aWxsIHVzZSBlaXRoZXIgICAgKi8KKyAgICAgICAgICAvKiBhbiBFbmdsaXNoIGxhbmd1YWdlIGlkLCBvciBhIFJvbWFuIGVuY29kaW5nIGlkLCB0byBpbmRpY2F0ZSAqLworICAgICAgICAgIC8qIHRoZSBFbmdsaXNoIHZlcnNpb24gb2YgaXRzIGZvbnQgbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIHJlYy0+bGFuZ3VhZ2VJRCA9PSBUVF9NQUNfTEFOR0lEX0VOR0xJU0ggKQorICAgICAgICAgICAgZm91bmRfYXBwbGVfZW5nbGlzaCA9IG47CisgICAgICAgICAgZWxzZSBpZiAoIHJlYy0+ZW5jb2RpbmdJRCA9PSBUVF9NQUNfSURfUk9NQU4gKQorICAgICAgICAgICAgZm91bmRfYXBwbGVfcm9tYW4gPSBuOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFRfUExBVEZPUk1fTUlDUk9TT0ZUOgorICAgICAgICAgIC8qIHdlIG9ubHkgdGFrZSBhIG5vbi1FbmdsaXNoIG5hbWUgd2hlbiB0aGVyZSBpcyBub3RoaW5nICovCisgICAgICAgICAgLyogZWxzZSBhdmFpbGFibGUgaW4gdGhlIGZvbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggZm91bmRfd2luID09IC0xIHx8ICggcmVjLT5sYW5ndWFnZUlEICYgMHgzRkYgKSA9PSAweDAwOSApCisgICAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICggcmVjLT5lbmNvZGluZ0lEICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVFRfTVNfSURfU1lNQk9MX0NTOgorICAgICAgICAgICAgY2FzZSBUVF9NU19JRF9VTklDT0RFX0NTOgorICAgICAgICAgICAgY2FzZSBUVF9NU19JRF9VQ1NfNDoKKyAgICAgICAgICAgICAgaXNfZW5nbGlzaCA9IEZUX0JPT0woICggcmVjLT5sYW5ndWFnZUlEICYgMHgzRkYgKSA9PSAweDAwOSApOworICAgICAgICAgICAgICBmb3VuZF93aW4gID0gbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBmb3VuZF9hcHBsZSA9IGZvdW5kX2FwcGxlX3JvbWFuOworICAgIGlmICggZm91bmRfYXBwbGVfZW5nbGlzaCA+PSAwICkKKyAgICAgIGZvdW5kX2FwcGxlID0gZm91bmRfYXBwbGVfZW5nbGlzaDsKKworICAgIC8qIHNvbWUgZm9udHMgY29udGFpbiBpbnZhbGlkIFVuaWNvZGUgb3IgTWFjaW50b3NoIGZvcm1hdHRlZCBlbnRyaWVzOyAqLworICAgIC8qIHdlIHdpbGwgdGh1cyBmYXZvciBuYW1lcyBlbmNvZGVkIGluIFdpbmRvd3MgZm9ybWF0cyBpZiBhdmFpbGFibGUgICAqLworICAgIC8qIChwcm92aWRlZCBpdCBpcyBhbiBFbmdsaXNoIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGNvbnZlcnQgPSBOVUxMOworICAgIGlmICggZm91bmRfd2luID49IDAgJiYgISggZm91bmRfYXBwbGUgPj0gMCAmJiAhaXNfZW5nbGlzaCApICkKKyAgICB7CisgICAgICByZWMgPSBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzICsgZm91bmRfd2luOworICAgICAgc3dpdGNoICggcmVjLT5lbmNvZGluZ0lEICkKKyAgICAgIHsKKyAgICAgICAgLyogYWxsIFVuaWNvZGUgc3RyaW5ncyBhcmUgZW5jb2RlZCB1c2luZyBVVEYtMTZCRSAqLworICAgICAgY2FzZSBUVF9NU19JRF9VTklDT0RFX0NTOgorICAgICAgY2FzZSBUVF9NU19JRF9TWU1CT0xfQ1M6CisgICAgICAgIGNvbnZlcnQgPSB0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fdXRmMTY7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFRUX01TX0lEX1VDU180OgorICAgICAgICAvKiBBcHBhcmVudGx5LCBpZiB0aGlzIHZhbHVlIGlzIGZvdW5kIGluIGEgbmFtZSB0YWJsZSBlbnRyeSwgaXQgaXMgKi8KKyAgICAgICAgLyogZG9jdW1lbnRlZCBhcyBgZnVsbCBVbmljb2RlIHJlcGVydG9pcmUnLiAgRXhwZXJpZW5jZSB3aXRoIHRoZSAgICovCisgICAgICAgIC8qIE1zR290aGljIGZvbnQgc2hpcHBlZCB3aXRoIFdpbmRvd3MgVmlzdGEgc2hvd3MgdGhhdCB0aGlzIHJlYWxseSAqLworICAgICAgICAvKiBtZWFucyBVVEYtMTYgZW5jb2RlZCBuYW1lcyAoVUNTLTQgdmFsdWVzIGFyZSBvbmx5IHVzZWQgd2l0aGluICAgKi8KKyAgICAgICAgLyogY2hhcm1hcHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNvbnZlcnQgPSB0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fdXRmMTY7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCBmb3VuZF9hcHBsZSA+PSAwICkKKyAgICB7CisgICAgICByZWMgICAgID0gZmFjZS0+bmFtZV90YWJsZS5uYW1lcyArIGZvdW5kX2FwcGxlOworICAgICAgY29udmVydCA9IHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV9vdGhlcjsKKyAgICB9CisgICAgZWxzZSBpZiAoIGZvdW5kX3VuaWNvZGUgPj0gMCApCisgICAgeworICAgICAgcmVjICAgICA9IGZhY2UtPm5hbWVfdGFibGUubmFtZXMgKyBmb3VuZF91bmljb2RlOworICAgICAgY29udmVydCA9IHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV91dGYxNjsKKyAgICB9CisKKyAgICBpZiAoIHJlYyAmJiBjb252ZXJ0ICkKKyAgICB7CisgICAgICBpZiAoIHJlYy0+c3RyaW5nID09IE5VTEwgKQorICAgICAgeworICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPm5hbWVfdGFibGUuc3RyZWFtOworCisKKyAgICAgICAgaWYgKCBGVF9RTkVXX0FSUkFZICggcmVjLT5zdHJpbmcsIHJlYy0+c3RyaW5nTGVuZ3RoICkgfHwKKyAgICAgICAgICAgICBGVF9TVFJFQU1fU0VFSyggcmVjLT5zdHJpbmdPZmZzZXQgKSAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRCggcmVjLT5zdHJpbmcsIHJlYy0+c3RyaW5nTGVuZ3RoICkgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRlJFRSggcmVjLT5zdHJpbmcgKTsKKyAgICAgICAgICByZWMtPnN0cmluZ0xlbmd0aCA9IDA7CisgICAgICAgICAgcmVzdWx0ICAgICAgICAgICAgPSBOVUxMOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXN1bHQgPSBjb252ZXJ0KCByZWMsIG1lbW9yeSApOworICAgIH0KKworICBFeGl0OgorICAgICpuYW1lID0gcmVzdWx0OworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0VuY29kaW5nCisgIHNmbnRfZmluZF9lbmNvZGluZyggaW50ICBwbGF0Zm9ybV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgIGVuY29kaW5nX2lkICkKKyAgeworICAgIHR5cGVkZWYgc3RydWN0ICBURW5jb2RpbmdfCisgICAgeworICAgICAgaW50ICAgICAgICAgIHBsYXRmb3JtX2lkOworICAgICAgaW50ICAgICAgICAgIGVuY29kaW5nX2lkOworICAgICAgRlRfRW5jb2RpbmcgIGVuY29kaW5nOworCisgICAgfSBURW5jb2Rpbmc7CisKKyAgICBzdGF0aWMKKyAgICBjb25zdCBURW5jb2RpbmcgIHR0X2VuY29kaW5nc1tdID0KKyAgICB7CisgICAgICB7IFRUX1BMQVRGT1JNX0lTTywgICAgICAgICAgIC0xLCAgICAgICAgICAgICAgICAgIEZUX0VOQ09ESU5HX1VOSUNPREUgfSwKKworICAgICAgeyBUVF9QTEFURk9STV9BUFBMRV9VTklDT0RFLCAtMSwgICAgICAgICAgICAgICAgICBGVF9FTkNPRElOR19VTklDT0RFIH0sCisKKyAgICAgIHsgVFRfUExBVEZPUk1fTUFDSU5UT1NILCAgICAgVFRfTUFDX0lEX1JPTUFOLCAgICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4gfSwKKworICAgICAgeyBUVF9QTEFURk9STV9NSUNST1NPRlQsICAgICBUVF9NU19JRF9TWU1CT0xfQ1MsICBGVF9FTkNPRElOR19NU19TWU1CT0wgfSwKKyAgICAgIHsgVFRfUExBVEZPUk1fTUlDUk9TT0ZULCAgICAgVFRfTVNfSURfVUNTXzQsICAgICAgRlRfRU5DT0RJTkdfVU5JQ09ERSB9LAorICAgICAgeyBUVF9QTEFURk9STV9NSUNST1NPRlQsICAgICBUVF9NU19JRF9VTklDT0RFX0NTLCBGVF9FTkNPRElOR19VTklDT0RFIH0sCisgICAgICB7IFRUX1BMQVRGT1JNX01JQ1JPU09GVCwgICAgIFRUX01TX0lEX1NKSVMsICAgICAgIEZUX0VOQ09ESU5HX1NKSVMgfSwKKyAgICAgIHsgVFRfUExBVEZPUk1fTUlDUk9TT0ZULCAgICAgVFRfTVNfSURfR0IyMzEyLCAgICAgRlRfRU5DT0RJTkdfR0IyMzEyIH0sCisgICAgICB7IFRUX1BMQVRGT1JNX01JQ1JPU09GVCwgICAgIFRUX01TX0lEX0JJR181LCAgICAgIEZUX0VOQ09ESU5HX0JJRzUgfSwKKyAgICAgIHsgVFRfUExBVEZPUk1fTUlDUk9TT0ZULCAgICAgVFRfTVNfSURfV0FOU1VORywgICAgRlRfRU5DT0RJTkdfV0FOU1VORyB9LAorICAgICAgeyBUVF9QTEFURk9STV9NSUNST1NPRlQsICAgICBUVF9NU19JRF9KT0hBQiwgICAgICBGVF9FTkNPRElOR19KT0hBQiB9CisgICAgfTsKKworICAgIGNvbnN0IFRFbmNvZGluZyAgKmN1ciwgKmxpbWl0OworCisKKyAgICBjdXIgICA9IHR0X2VuY29kaW5nczsKKyAgICBsaW1pdCA9IGN1ciArIHNpemVvZiAoIHR0X2VuY29kaW5ncyApIC8gc2l6ZW9mICggdHRfZW5jb2RpbmdzWzBdICk7CisKKyAgICBmb3IgKCA7IGN1ciA8IGxpbWl0OyBjdXIrKyApCisgICAgeworICAgICAgaWYgKCBjdXItPnBsYXRmb3JtX2lkID09IHBsYXRmb3JtX2lkICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBjdXItPmVuY29kaW5nX2lkID09IGVuY29kaW5nX2lkIHx8CisgICAgICAgICAgICAgY3VyLT5lbmNvZGluZ19pZCA9PSAtMSAgICAgICAgICApCisgICAgICAgICAgcmV0dXJuIGN1ci0+ZW5jb2Rpbmc7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUX0VOQ09ESU5HX05PTkU7CisgIH0KKworCisjZGVmaW5lIFdSSVRFX1VTSE9SVCggcCwgdiApICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiA4ICk7IFwKKyAgICAgICAgICAgICoocCkrKyA9IChGVF9CeXRlKSggKHYpID4+IDAgKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQorCisjZGVmaW5lIFdSSVRFX1VMT05HKCBwLCB2ICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAyNCApOyBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAxNiApOyBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAgOCApOyBcCisgICAgICAgICAgICAqKHApKysgPSAoRlRfQnl0ZSkoICh2KSA+PiAgMCApOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQorCisKKyAgc3RhdGljIHZvaWQKKyAgc2ZudF9zdHJlYW1fY2xvc2UoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisKKworICAgIEZUX0ZSRUUoIHN0cmVhbS0+YmFzZSApOworCisgICAgc3RyZWFtLT5zaXplICA9IDA7CisgICAgc3RyZWFtLT5iYXNlICA9IE5VTEw7CisgICAgc3RyZWFtLT5jbG9zZSA9IE5VTEw7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggaW50ICkKKyAgY29tcGFyZV9vZmZzZXRzKCBjb25zdCB2b2lkKiAgYSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgYiApCisgIHsKKyAgICBXT0ZGX1RhYmxlICB0YWJsZTEgPSAqKFdPRkZfVGFibGUqKWE7CisgICAgV09GRl9UYWJsZSAgdGFibGUyID0gKihXT0ZGX1RhYmxlKiliOworCisgICAgRlRfVUxvbmcgIG9mZnNldDEgPSB0YWJsZTEtPk9mZnNldDsKKyAgICBGVF9VTG9uZyAgb2Zmc2V0MiA9IHRhYmxlMi0+T2Zmc2V0OworCisKKyAgICBpZiAoIG9mZnNldDEgPiBvZmZzZXQyICkKKyAgICAgIHJldHVybiAxOworICAgIGVsc2UgaWYgKCBvZmZzZXQxIDwgb2Zmc2V0MiApCisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qIFJlcGxhY2UgYGZhY2UtPnJvb3Quc3RyZWFtJyB3aXRoIGEgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIGV4dHJhY3RlZCAqLworICAvKiBTRk5UIG9mIGEgV09GRiBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgd29mZl9vcGVuX2ZvbnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICBmYWNlICkKKyAgeworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworCisgICAgV09GRl9IZWFkZXJSZWMgIHdvZmY7CisgICAgV09GRl9UYWJsZSAgICAgIHRhYmxlcyAgPSBOVUxMOworICAgIFdPRkZfVGFibGUqICAgICBpbmRpY2VzID0gTlVMTDsKKworICAgIEZUX1VMb25nICAgICAgICB3b2ZmX29mZnNldDsKKworICAgIEZUX0J5dGUqICAgICAgICBzZm50ICAgICAgICA9IE5VTEw7CisgICAgRlRfU3RyZWFtICAgICAgIHNmbnRfc3RyZWFtID0gTlVMTDsKKworICAgIEZUX0J5dGUqICAgICAgICBzZm50X2hlYWRlcjsKKyAgICBGVF9VTG9uZyAgICAgICAgc2ZudF9vZmZzZXQ7CisKKyAgICBGVF9JbnQgICAgICAgICAgbm47CisgICAgRlRfVUxvbmcgICAgICAgIG9sZF90YWcgPSAwOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICB3b2ZmX2hlYWRlcl9maWVsZHNbXSA9CisgICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXT0ZGX0hlYWRlclJlYworCisgICAgICBGVF9GUkFNRV9TVEFSVCggNDQgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBzaWduYXR1cmUgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBmbGF2b3IgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBsZW5ndGggKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBudW1fdGFibGVzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggcmVzZXJ2ZWQgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCB0b3RhbFNmbnRTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbWFqb3JWZXJzaW9uICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbWlub3JWZXJzaW9uICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggbWV0YU9mZnNldCApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAoIG1ldGFMZW5ndGggKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBtZXRhT3JpZ0xlbmd0aCApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAoIHByaXZPZmZzZXQgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBwcml2TGVuZ3RoICksCisgICAgICBGVF9GUkFNRV9FTkQKKyAgICB9OworCisKKyAgICBGVF9BU1NFUlQoIHN0cmVhbSA9PSBmYWNlLT5yb290LnN0cmVhbSApOworICAgIEZUX0FTU0VSVCggRlRfU1RSRUFNX1BPUygpID09IDAgKTsKKworICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCB3b2ZmX2hlYWRlcl9maWVsZHMsICZ3b2ZmICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlY3Vyc2UgYmFjayBoZXJlIG9yIGhpdCBUVEMgY29kZS4gKi8KKyAgICBpZiAoIHdvZmYuZmxhdm9yID09IFRUQUdfd09GRiB8fCB3b2ZmLmZsYXZvciA9PSBUVEFHX3R0Y2YgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAvKiBNaXNjZWxsYW5lb3VzIGNoZWNrcy4gKi8KKyAgICBpZiAoIHdvZmYubGVuZ3RoICE9IHN0cmVhbS0+c2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICB3b2ZmLm51bV90YWJsZXMgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgNDQgKyB3b2ZmLm51bV90YWJsZXMgKiAyMFVMID49IHdvZmYubGVuZ3RoICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIDEyICsgd29mZi5udW1fdGFibGVzICogMTZVTCA+PSB3b2ZmLnRvdGFsU2ZudFNpemUgICAgICAgIHx8CisgICAgICAgICAoIHdvZmYudG90YWxTZm50U2l6ZSAmIDMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgKCB3b2ZmLm1ldGFPZmZzZXQgPT0gMCAmJiAoIHdvZmYubWV0YUxlbmd0aCAhPSAwICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvZmYubWV0YU9yaWdMZW5ndGggIT0gMCApICkgfHwKKyAgICAgICAgICggd29mZi5tZXRhTGVuZ3RoICE9IDAgJiYgd29mZi5tZXRhT3JpZ0xlbmd0aCA9PSAwICkgICAgIHx8CisgICAgICAgICAoIHdvZmYucHJpdk9mZnNldCA9PSAwICYmIHdvZmYucHJpdkxlbmd0aCAhPSAwICkgICAgICAgICApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICAgIGlmICggRlRfQUxMT0MoIHNmbnQsIHdvZmYudG90YWxTZm50U2l6ZSApIHx8CisgICAgICAgICBGVF9ORVcoIHNmbnRfc3RyZWFtICkgICAgICAgICAgICAgICAgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2ZudF9oZWFkZXIgPSBzZm50OworCisgICAgLyogV3JpdGUgc2ZudCBoZWFkZXIuICovCisgICAgeworICAgICAgRlRfVUludCAgc2VhcmNoUmFuZ2UsIGVudHJ5U2VsZWN0b3IsIHJhbmdlU2hpZnQsIHg7CisKKworICAgICAgeCAgICAgICAgICAgICA9IHdvZmYubnVtX3RhYmxlczsKKyAgICAgIGVudHJ5U2VsZWN0b3IgPSAwOworICAgICAgd2hpbGUgKCB4ICkKKyAgICAgIHsKKyAgICAgICAgeCAgICAgICAgICAgID4+PSAxOworICAgICAgICBlbnRyeVNlbGVjdG9yICs9IDE7CisgICAgICB9CisgICAgICBlbnRyeVNlbGVjdG9yLS07CisKKyAgICAgIHNlYXJjaFJhbmdlID0gKCAxIDw8IGVudHJ5U2VsZWN0b3IgKSAqIDE2OworICAgICAgcmFuZ2VTaGlmdCAgPSB3b2ZmLm51bV90YWJsZXMgKiAxNiAtIHNlYXJjaFJhbmdlOworCisgICAgICBXUklURV9VTE9ORyAoIHNmbnRfaGVhZGVyLCB3b2ZmLmZsYXZvciApOworICAgICAgV1JJVEVfVVNIT1JUKCBzZm50X2hlYWRlciwgd29mZi5udW1fdGFibGVzICk7CisgICAgICBXUklURV9VU0hPUlQoIHNmbnRfaGVhZGVyLCBzZWFyY2hSYW5nZSApOworICAgICAgV1JJVEVfVVNIT1JUKCBzZm50X2hlYWRlciwgZW50cnlTZWxlY3RvciApOworICAgICAgV1JJVEVfVVNIT1JUKCBzZm50X2hlYWRlciwgcmFuZ2VTaGlmdCApOworICAgIH0KKworICAgIC8qIFdoaWxlIHRoZSBlbnRyaWVzIGluIHRoZSBzZm50IGhlYWRlciBtdXN0IGJlIHNvcnRlZCBieSB0aGUgKi8KKyAgICAvKiB0YWcgdmFsdWUsIHRoZSB0YWJsZXMgdGhlbXNlbHZlcyBhcmUgbm90LiAgV2UgdGh1cyBoYXZlIHRvICovCisgICAgLyogc29ydCB0aGVtIGJ5IG9mZnNldCBhbmQgY2hlY2sgdGhhdCB0aGV5IGRvbid0IG92ZXJsYXAuICAgICAqLworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHRhYmxlcywgd29mZi5udW1fdGFibGVzICkgIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGluZGljZXMsIHdvZmYubnVtX3RhYmxlcyApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX1RSQUNFMigoICJcbiIKKyAgICAgICAgICAgICAgICAiICB0YWcgICAgb2Zmc2V0ICAgIGNvbXBMZW4gIG9yaWdMZW4gIGNoZWNrc3VtXG4iCisgICAgICAgICAgICAgICAgIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiApKTsKKworICAgIGlmICggRlRfRlJBTUVfRU5URVIoIDIwTCAqIHdvZmYubnVtX3RhYmxlcyApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCB3b2ZmLm51bV90YWJsZXM7IG5uKysgKQorICAgIHsKKyAgICAgIFdPRkZfVGFibGUgIHRhYmxlID0gdGFibGVzICsgbm47CisKKyAgICAgIHRhYmxlLT5UYWcgICAgICAgID0gRlRfR0VUX1RBRzQoKTsKKyAgICAgIHRhYmxlLT5PZmZzZXQgICAgID0gRlRfR0VUX1VMT05HKCk7CisgICAgICB0YWJsZS0+Q29tcExlbmd0aCA9IEZUX0dFVF9VTE9ORygpOworICAgICAgdGFibGUtPk9yaWdMZW5ndGggPSBGVF9HRVRfVUxPTkcoKTsKKyAgICAgIHRhYmxlLT5DaGVja1N1bSAgID0gRlRfR0VUX1VMT05HKCk7CisKKyAgICAgIEZUX1RSQUNFMigoICIgICVjJWMlYyVjICAlMDhseCAgJTA4bHggICUwOGx4ICAlMDhseFxuIiwKKyAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFibGUtPlRhZyA+PiAyNCApLAorICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWJsZS0+VGFnID4+IDE2ICksCisgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHRhYmxlLT5UYWcgPj4gOCAgKSwKKyAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFibGUtPlRhZyAgICAgICApLAorICAgICAgICAgICAgICAgICAgdGFibGUtPk9mZnNldCwKKyAgICAgICAgICAgICAgICAgIHRhYmxlLT5Db21wTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgdGFibGUtPk9yaWdMZW5ndGgsCisgICAgICAgICAgICAgICAgICB0YWJsZS0+Q2hlY2tTdW0gKSk7CisKKyAgICAgIGlmICggdGFibGUtPlRhZyA8PSBvbGRfdGFnICkKKyAgICAgIHsKKyAgICAgICAgRlRfRlJBTUVfRVhJVCgpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgb2xkX3RhZyAgICAgPSB0YWJsZS0+VGFnOworICAgICAgaW5kaWNlc1tubl0gPSB0YWJsZTsKKyAgICB9CisKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAvKiBTb3J0IGJ5IG9mZnNldC4gKi8KKworICAgIGZ0X3Fzb3J0KCBpbmRpY2VzLAorICAgICAgICAgICAgICB3b2ZmLm51bV90YWJsZXMsCisgICAgICAgICAgICAgIHNpemVvZiAoIFdPRkZfVGFibGUgKSwKKyAgICAgICAgICAgICAgY29tcGFyZV9vZmZzZXRzICk7CisKKyAgICAvKiBDaGVjayBvZmZzZXRzIGFuZCBsZW5ndGhzLiAqLworCisgICAgd29mZl9vZmZzZXQgPSA0NCArIHdvZmYubnVtX3RhYmxlcyAqIDIwTDsKKyAgICBzZm50X29mZnNldCA9IDEyICsgd29mZi5udW1fdGFibGVzICogMTZMOworCisgICAgZm9yICggbm4gPSAwOyBubiA8IHdvZmYubnVtX3RhYmxlczsgbm4rKyApCisgICAgeworICAgICAgV09GRl9UYWJsZSAgdGFibGUgPSBpbmRpY2VzW25uXTsKKworCisgICAgICBpZiAoIHRhYmxlLT5PZmZzZXQgIT0gd29mZl9vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgdGFibGUtPkNvbXBMZW5ndGggPiB3b2ZmLmxlbmd0aCAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICB0YWJsZS0+T2Zmc2V0ID4gd29mZi5sZW5ndGggLSB0YWJsZS0+Q29tcExlbmd0aCAgICAgIHx8CisgICAgICAgICAgIHRhYmxlLT5PcmlnTGVuZ3RoID4gd29mZi50b3RhbFNmbnRTaXplICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgc2ZudF9vZmZzZXQgPiB3b2ZmLnRvdGFsU2ZudFNpemUgLSB0YWJsZS0+T3JpZ0xlbmd0aCB8fAorICAgICAgICAgICB0YWJsZS0+Q29tcExlbmd0aCA+IHRhYmxlLT5PcmlnTGVuZ3RoICAgICAgICAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIHRhYmxlLT5PcmlnT2Zmc2V0ID0gc2ZudF9vZmZzZXQ7CisKKyAgICAgIC8qIFRoZSBvZmZzZXRzIG11c3QgYmUgbXVsdGlwbGVzIG9mIDQuICovCisgICAgICB3b2ZmX29mZnNldCArPSAoIHRhYmxlLT5Db21wTGVuZ3RoICsgMyApICYgfjNVOworICAgICAgc2ZudF9vZmZzZXQgKz0gKCB0YWJsZS0+T3JpZ0xlbmd0aCArIDMgKSAmIH4zVTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmFsIGNoZWNrcyEKKyAgICAgKgorICAgICAqIFdlIGRvbid0IGRlY29kZSBhbmQgY2hlY2sgdGhlIG1ldGFkYXRhIGJsb2NrLgorICAgICAqIFdlIGRvbid0IGNoZWNrIHRhYmxlIGNoZWNrc3VtcyBlaXRoZXIuCisgICAgICogQnV0IG90aGVyIHRoYW4gdGhvc2UsIEkgdGhpbmsgd2UgaW1wbGVtZW50IGFsbAorICAgICAqIGBNVVNUJyBjaGVja3MgZnJvbSB0aGUgc3BlYy4KKyAgICAgKi8KKworICAgIGlmICggd29mZi5tZXRhT2Zmc2V0ICkKKyAgICB7CisgICAgICBpZiAoIHdvZmYubWV0YU9mZnNldCAhPSB3b2ZmX29mZnNldCAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIHdvZmYubWV0YU9mZnNldCArIHdvZmYubWV0YUxlbmd0aCA+IHdvZmYubGVuZ3RoICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qIFdlIGhhdmUgcGFkZGluZyBvbmx5IC4uLiAqLworICAgICAgd29mZl9vZmZzZXQgKz0gd29mZi5tZXRhTGVuZ3RoOworICAgIH0KKworICAgIGlmICggd29mZi5wcml2T2Zmc2V0ICkKKyAgICB7CisgICAgICAvKiAuLi4gaWYgaXQgaXNuJ3QgdGhlIGxhc3QgYmxvY2suICovCisgICAgICB3b2ZmX29mZnNldCA9ICggd29mZl9vZmZzZXQgKyAzICkgJiB+M1U7CisKKyAgICAgIGlmICggd29mZi5wcml2T2Zmc2V0ICE9IHdvZmZfb2Zmc2V0ICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgd29mZi5wcml2T2Zmc2V0ICsgd29mZi5wcml2TGVuZ3RoID4gd29mZi5sZW5ndGggKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogTm8gcGFkZGluZyBmb3IgdGhlIGxhc3QgYmxvY2suICovCisgICAgICB3b2ZmX29mZnNldCArPSB3b2ZmLnByaXZMZW5ndGg7CisgICAgfQorCisgICAgaWYgKCBzZm50X29mZnNldCAhPSB3b2ZmLnRvdGFsU2ZudFNpemUgfHwKKyAgICAgICAgIHdvZmZfb2Zmc2V0ICE9IHdvZmYubGVuZ3RoICAgICAgICApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFdyaXRlIHRoZSB0YWJsZXMuICovCisKKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgd29mZi5udW1fdGFibGVzOyBubisrICkKKyAgICB7CisgICAgICBXT0ZGX1RhYmxlICB0YWJsZSA9IHRhYmxlcyArIG5uOworCisKKyAgICAgIC8qIFdyaXRlIFNGTlQgdGFibGUgZW50cnkuICovCisgICAgICBXUklURV9VTE9ORyggc2ZudF9oZWFkZXIsIHRhYmxlLT5UYWcgKTsKKyAgICAgIFdSSVRFX1VMT05HKCBzZm50X2hlYWRlciwgdGFibGUtPkNoZWNrU3VtICk7CisgICAgICBXUklURV9VTE9ORyggc2ZudF9oZWFkZXIsIHRhYmxlLT5PcmlnT2Zmc2V0ICk7CisgICAgICBXUklURV9VTE9ORyggc2ZudF9oZWFkZXIsIHRhYmxlLT5PcmlnTGVuZ3RoICk7CisKKyAgICAgIC8qIFdyaXRlIHRhYmxlIGRhdGEuICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCB0YWJsZS0+T2Zmc2V0ICkgICAgIHx8CisgICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCB0YWJsZS0+Q29tcExlbmd0aCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoIHRhYmxlLT5Db21wTGVuZ3RoID09IHRhYmxlLT5PcmlnTGVuZ3RoICkKKyAgICAgIHsKKyAgICAgICAgLyogVW5jb21wcmVzc2VkIGRhdGE7IGp1c3QgY29weS4gKi8KKyAgICAgICAgZnRfbWVtY3B5KCBzZm50ICsgdGFibGUtPk9yaWdPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5jdXJzb3IsCisgICAgICAgICAgICAgICAgICAgdGFibGUtPk9yaWdMZW5ndGggKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCCisKKyAgICAgICAgLyogVW5jb21wcmVzcyB3aXRoIHpsaWIuICovCisgICAgICAgIEZUX1VMb25nICBvdXRwdXRfbGVuID0gdGFibGUtPk9yaWdMZW5ndGg7CisKKworICAgICAgICBlcnJvciA9IEZUX0d6aXBfVW5jb21wcmVzcyggbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudCArIHRhYmxlLT5PcmlnT2Zmc2V0LCAmb3V0cHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+Y3Vyc29yLCB0YWJsZS0+Q29tcExlbmd0aCApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIGlmICggb3V0cHV0X2xlbiAhPSB0YWJsZS0+T3JpZ0xlbmd0aCApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyNlbHNlIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCICovCisKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKworI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCICovCisgICAgICB9CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgLyogV2UgZG9uJ3QgY2hlY2sgd2hldGhlciB0aGUgcGFkZGluZyBieXRlcyBpbiB0aGUgV09GRiBmaWxlIGFyZSAgICAgKi8KKyAgICAgIC8qIGFjdHVhbGx5ICdcMCcuICBGb3IgdGhlIG91dHB1dCwgaG93ZXZlciwgd2UgZG8gc2V0IHRoZW0gcHJvcGVybHkuICovCisgICAgICBzZm50X29mZnNldCA9IHRhYmxlLT5PcmlnT2Zmc2V0ICsgdGFibGUtPk9yaWdMZW5ndGg7CisgICAgICB3aGlsZSAoIHNmbnRfb2Zmc2V0ICYgMyApCisgICAgICB7CisgICAgICAgIHNmbnRbc2ZudF9vZmZzZXRdID0gJ1wwJzsKKyAgICAgICAgc2ZudF9vZmZzZXQrKzsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBPayEgIEZpbmFsbHkgcmVhZHkuICBTd2FwIG91dCBzdHJlYW0gYW5kIHJldHVybi4gKi8KKyAgICBGVF9TdHJlYW1fT3Blbk1lbW9yeSggc2ZudF9zdHJlYW0sIHNmbnQsIHdvZmYudG90YWxTZm50U2l6ZSApOworICAgIHNmbnRfc3RyZWFtLT5tZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBzZm50X3N0cmVhbS0+Y2xvc2UgID0gc2ZudF9zdHJlYW1fY2xvc2U7CisKKyAgICBGVF9TdHJlYW1fRnJlZSgKKyAgICAgIGZhY2UtPnJvb3Quc3RyZWFtLAorICAgICAgKCBmYWNlLT5yb290LmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICkgIT0gMCApOworCisgICAgZmFjZS0+cm9vdC5zdHJlYW0gPSBzZm50X3N0cmVhbTsKKworICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTTsKKworICBFeGl0OgorICAgIEZUX0ZSRUUoIHRhYmxlcyApOworICAgIEZUX0ZSRUUoIGluZGljZXMgKTsKKworICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIHNmbnQgKTsKKyAgICAgIEZUX1N0cmVhbV9DbG9zZSggc2ZudF9zdHJlYW0gKTsKKyAgICAgIEZUX0ZSRUUoIHNmbnRfc3RyZWFtICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI3VuZGVmIFdSSVRFX1VTSE9SVAorI3VuZGVmIFdSSVRFX1VMT05HCisKKworICAvKiBGaWxsIGluIGZhY2UtPnR0Y19oZWFkZXIuICBJZiB0aGUgZm9udCBpcyBub3QgYSBUVEMsIGl0IGlzICovCisgIC8qIHN5bnRoZXNpemVkIGludG8gYSBUVEMgd2l0aCBvbmUgb2Zmc2V0IHRhYmxlLiAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHNmbnRfb3Blbl9mb250KCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfVUxvbmcgICB0YWcsIG9mZnNldDsKKworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgdHRjX2hlYWRlcl9maWVsZHNbXSA9CisgICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUVENfSGVhZGVyUmVjCisKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCA4ICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcoIHZlcnNpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfTE9ORyggY291bnQgICApLCAgLyogdGhpcyBpcyBVTG9uZyBpbiB0aGUgc3BlY3MgKi8KKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKworICAgIGZhY2UtPnR0Y19oZWFkZXIudGFnICAgICA9IDA7CisgICAgZmFjZS0+dHRjX2hlYWRlci52ZXJzaW9uID0gMDsKKyAgICBmYWNlLT50dGNfaGVhZGVyLmNvdW50ICAgPSAwOworCisgIHJldHJ5OgorICAgIG9mZnNldCA9IEZUX1NUUkVBTV9QT1MoKTsKKworICAgIGlmICggRlRfUkVBRF9VTE9ORyggdGFnICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYgKCB0YWcgPT0gVFRBR193T0ZGICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAic2ZudF9vcGVuX2ZvbnQ6IGZpbGUgaXMgYSBXT0ZGOyBzeW50aGVzaXppbmcgU0ZOVFxuIiApKTsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIGVycm9yID0gd29mZl9vcGVuX2ZvbnQoIHN0cmVhbSwgZmFjZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgLyogU3dhcCBvdXQgc3RyZWFtIGFuZCByZXRyeSEgKi8KKyAgICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgICAgZ290byByZXRyeTsKKyAgICB9CisKKyAgICBpZiAoIHRhZyAhPSAweDAwMDEwMDAwVUwgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHX3R0Y2YgICAgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHX09UVE8gICAgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHX3RydWUgICAgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHX3R5cDEgICAgJiYKKyAgICAgICAgIHRhZyAhPSAweDAwMDIwMDAwVUwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICIgIG5vdCBhIGZvbnQgdXNpbmcgdGhlIFNGTlQgY29udGFpbmVyIGZvcm1hdFxuIiApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgIH0KKworICAgIGZhY2UtPnR0Y19oZWFkZXIudGFnID0gVFRBR190dGNmOworCisgICAgaWYgKCB0YWcgPT0gVFRBR190dGNmICkKKyAgICB7CisgICAgICBGVF9JbnQgIG47CisKKworICAgICAgRlRfVFJBQ0UzKCggInNmbnRfb3Blbl9mb250OiBmaWxlIGlzIGEgY29sbGVjdGlvblxuIiApKTsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHR0Y19oZWFkZXJfZmllbGRzLCAmZmFjZS0+dHRjX2hlYWRlciApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBpZiAoIGZhY2UtPnR0Y19oZWFkZXIuY291bnQgPT0gMCApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgICAvKiBhIHJvdWdoIHNpemUgZXN0aW1hdGU6IGxldCdzIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IHRoZXJlICAgKi8KKyAgICAgIC8qIGlzIGp1c3QgYSBzaW5nbGUgdGFibGUgaW5mbyBpbiBlYWNoIHN1YmZvbnQgaGVhZGVyICgxMiArIDE2KjEgPSAqLworICAgICAgLyogMjggYnl0ZXMpLCB0aHVzIHdlIGhhdmUgKGF0IGxlYXN0KSBgMTIgKyA0KmNvdW50JyBieXRlcyBmb3IgdGhlICovCisgICAgICAvKiBzaXplIG9mIHRoZSBUVEMgaGVhZGVyIHBsdXMgYDI4KmNvdW50JyBieXRlcyBmb3IgYWxsIHN1YmZvbnQgICAgKi8KKyAgICAgIC8qIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAoRlRfVUxvbmcpZmFjZS0+dHRjX2hlYWRlci5jb3VudCA+IHN0cmVhbS0+c2l6ZSAvICggMjggKyA0ICkgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEFycmF5X1Rvb19MYXJnZSApOworCisgICAgICAvKiBub3cgcmVhZCB0aGUgb2Zmc2V0cyBvZiBlYWNoIGZvbnQgaW4gdGhlIGZpbGUgKi8KKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBmYWNlLT50dGNfaGVhZGVyLm9mZnNldHMsIGZhY2UtPnR0Y19oZWFkZXIuY291bnQgKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggZmFjZS0+dHRjX2hlYWRlci5jb3VudCAqIDRMICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgZmFjZS0+dHRjX2hlYWRlci5jb3VudDsgbisrICkKKyAgICAgICAgZmFjZS0+dHRjX2hlYWRlci5vZmZzZXRzW25dID0gRlRfR0VUX1VMT05HKCk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1RSQUNFMygoICJzZm50X29wZW5fZm9udDogc3ludGhlc2l6ZSBUVENcbiIgKSk7CisKKyAgICAgIGZhY2UtPnR0Y19oZWFkZXIudmVyc2lvbiA9IDEgPDwgMTY7CisgICAgICBmYWNlLT50dGNfaGVhZGVyLmNvdW50ICAgPSAxOworCisgICAgICBpZiAoIEZUX05FVyggZmFjZS0+dHRjX2hlYWRlci5vZmZzZXRzICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIGZhY2UtPnR0Y19oZWFkZXIub2Zmc2V0c1swXSA9IG9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBzZm50X2luaXRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKyAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSA9IGZhY2UtPnJvb3QuZHJpdmVyLT5yb290LmxpYnJhcnk7CisgICAgU0ZOVF9TZXJ2aWNlICAgIHNmbnQ7CisKKworICAgIC8qIGZvciBub3csIHBhcmFtZXRlcnMgYXJlIHVudXNlZCAqLworICAgIEZUX1VOVVNFRCggbnVtX3BhcmFtcyApOworICAgIEZUX1VOVVNFRCggcGFyYW1zICk7CisKKworICAgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CisgICAgaWYgKCAhc2ZudCApCisgICAgeworICAgICAgc2ZudCA9IChTRk5UX1NlcnZpY2UpRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIGxpYnJhcnksICJzZm50IiApOworICAgICAgaWYgKCAhc2ZudCApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInNmbnRfaW5pdF9mYWNlOiBjYW5ub3QgYWNjZXNzIGBzZm50JyBtb2R1bGVcbiIgKSk7CisgICAgICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICAgIH0KKworICAgICAgZmFjZS0+c2ZudCAgICAgICA9IHNmbnQ7CisgICAgICBmYWNlLT5nb3RvX3RhYmxlID0gc2ZudC0+Z290b190YWJsZTsKKyAgICB9CisKKyAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIGZhY2UtPnBzbmFtZXMsIFBPU1RTQ1JJUFRfQ01BUFMgKTsKKworICAgIEZUX1RSQUNFMigoICJTRk5UIGRyaXZlclxuIiApKTsKKworICAgIGVycm9yID0gc2ZudF9vcGVuX2ZvbnQoIHN0cmVhbSwgZmFjZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgLyogU3RyZWFtIG1heSBoYXZlIGNoYW5nZWQgaW4gc2ZudF9vcGVuX2ZvbnQuICovCisgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisKKyAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAsICVsZFxuIiwgZmFjZSwgZmFjZV9pbmRleCApKTsKKworICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgZmFjZV9pbmRleCA9IDA7CisKKyAgICBpZiAoIGZhY2VfaW5kZXggPj0gZmFjZS0+dHRjX2hlYWRlci5jb3VudCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZhY2UtPnR0Y19oZWFkZXIub2Zmc2V0c1tmYWNlX2luZGV4XSApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIFRydWVUeXBlIGZpbGUgKi8KKyAgICBlcnJvciA9IHNmbnQtPmxvYWRfZm9udF9kaXIoIGZhY2UsIHN0cmVhbSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZmFjZS0+cm9vdC5udW1fZmFjZXMgID0gZmFjZS0+dHRjX2hlYWRlci5jb3VudDsKKyAgICBmYWNlLT5yb290LmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworI2RlZmluZSBMT0FEXyggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1RSQUNFMigoICJgIiAjeCAiJyAiICkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1RSQUNFMygoICItLT5cbiIgKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVycm9yID0gc2ZudC0+bG9hZF8gIyMgeCggZmFjZSwgc3RyZWFtICk7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX1RSQUNFMigoICIlc1xuIiwgKCAhZXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgPyAibG9hZGVkIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgOiBGVF9FUlJfRVEoIGVycm9yLCBUYWJsZV9NaXNzaW5nICkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJtaXNzaW5nIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJmYWlsZWQgdG8gbG9hZCIgKSk7ICAgICAgICAgICAgXAorICAgIEZUX1RSQUNFMygoICJcbiIgKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICggMCApCisKKyNkZWZpbmUgTE9BRE1fKCB4LCB2ZXJ0aWNhbCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9UUkFDRTIoKCAiYCVzIiAjeCAiJyAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB2ZXJ0aWNhbCA/ICJ2ZXJ0aWNhbCAiIDogIiIgKSk7ICAgICAgICAgICAgIFwKKyAgICBGVF9UUkFDRTMoKCAiLS0+XG4iICkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlcnJvciA9IHNmbnQtPmxvYWRfICMjIHgoIGZhY2UsIHN0cmVhbSwgdmVydGljYWwgKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9UUkFDRTIoKCAiJXNcbiIsICggIWVycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgID8gImxvYWRlZCIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDogRlRfRVJSX0VRKCBlcnJvciwgVGFibGVfTWlzc2luZyApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAibWlzc2luZyIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZmFpbGVkIHRvIGxvYWQiICkpOyAgICAgICAgICAgIFwKKyAgICBGVF9UUkFDRTMoKCAiXG4iICkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoIDAgKQorCisjZGVmaW5lIEdFVF9OQU1FKCBpZCwgZmllbGQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZXJyb3IgPSB0dF9mYWNlX2dldF9uYW1lKCBmYWNlLCBUVF9OQU1FX0lEXyAjIyBpZCwgZmllbGQgKTsgXAorICAgIGlmICggZXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGdvdG8gRXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKCAwICkKKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBzZm50X2xvYWRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisgICAgRlRfRXJyb3IgICAgICBwc25hbWVzX2Vycm9yOworI2VuZGlmCisgICAgRlRfQm9vbCAgICAgICBoYXNfb3V0bGluZTsKKyAgICBGVF9Cb29sICAgICAgIGlzX2FwcGxlX3NiaXQ7CisgICAgRlRfQm9vbCAgICAgICBpc19hcHBsZV9zYml4OworICAgIEZUX0Jvb2wgICAgICAgaWdub3JlX3ByZWZlcnJlZF9mYW1pbHkgICAgPSBGQUxTRTsKKyAgICBGVF9Cb29sICAgICAgIGlnbm9yZV9wcmVmZXJyZWRfc3ViZmFtaWx5ID0gRkFMU0U7CisKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CisKKyAgICBGVF9VTlVTRUQoIGZhY2VfaW5kZXggKTsKKworCisgICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLworCisgICAgeworICAgICAgRlRfSW50ICBpOworCisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3BhcmFtczsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBwYXJhbXNbaV0udGFnID09IEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWSApCisgICAgICAgICAgaWdub3JlX3ByZWZlcnJlZF9mYW1pbHkgPSBUUlVFOworICAgICAgICBlbHNlIGlmICggcGFyYW1zW2ldLnRhZyA9PSBGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9TVUJGQU1JTFkgKQorICAgICAgICAgIGlnbm9yZV9wcmVmZXJyZWRfc3ViZmFtaWx5ID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBMb2FkIHRhYmxlcyAqLworCisgICAgLyogV2Ugbm93IHN1cHBvcnQgdHdvIFNGTlQtYmFzZWQgYml0bWFwcGVkIGZvbnQgZm9ybWF0cy4gIFRoZXkgKi8KKyAgICAvKiBhcmUgcmVjb2duaXplZCBlYXNpbHkgYXMgdGhleSBkbyBub3QgaW5jbHVkZSBhIGBnbHlmJyAgICAgICAqLworICAgIC8qIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBUaGUgZmlyc3QgZm9ybWF0IGNvbWVzIGZyb20gQXBwbGUsIGFuZCB1c2VzIGEgdGFibGUgbmFtZWQgICAqLworICAgIC8qIGBiaGVkJyBpbnN0ZWFkIG9mIGBoZWFkJyB0byBzdG9yZSB0aGUgZm9udCBoZWFkZXIgKHVzaW5nICAgICovCisgICAgLyogdGhlIHNhbWUgZm9ybWF0KS4gIEl0IGFsc28gZG9lc24ndCBpbmNsdWRlIGhvcml6b250YWwgYW5kICAgKi8KKyAgICAvKiB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlcyAoaS5lLiBgaGhlYScgYW5kIGB2aGVhJyB0YWJsZXMgYXJlICAqLworICAgIC8qIG1pc3NpbmcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBUaGUgb3RoZXIgZm9ybWF0IGNvbWVzIGZyb20gTWljcm9zb2Z0LCBhbmQgaXMgdXNlZCB3aXRoICAgICAqLworICAgIC8qIFdpbkNFL1BvY2tldFBDLiAgSXQgbG9va3MgbGlrZSBhIHN0YW5kYXJkIFRURiwgZXhjZXB0IHRoYXQgICovCisgICAgLyogaXQgZG9lc24ndCBjb250YWluIG91dGxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgRlRfVFJBQ0UyKCggInNmbnRfbG9hZF9mYWNlOiAlMDhwXG5cbiIsIGZhY2UgKSk7CisKKyAgICAvKiBkbyB3ZSBoYXZlIG91dGxpbmVzIGluIHRoZXJlPyAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICBoYXNfb3V0bGluZSA9IEZUX0JPT0woIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0dF9mYWNlX2xvb2t1cF90YWJsZSggZmFjZSwgVFRBR19nbHlmICkgICAgIT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRfZmFjZV9sb29rdXBfdGFibGUoIGZhY2UsIFRUQUdfQ0ZGICkgICAgICE9IDAgKTsKKyNlbHNlCisgICAgaGFzX291dGxpbmUgPSBGVF9CT09MKCB0dF9mYWNlX2xvb2t1cF90YWJsZSggZmFjZSwgVFRBR19nbHlmICkgIT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRfZmFjZV9sb29rdXBfdGFibGUoIGZhY2UsIFRUQUdfQ0ZGICkgICE9IDAgKTsKKyNlbmRpZgorCisgICAgaXNfYXBwbGVfc2JpdCA9IDA7CisgICAgaXNfYXBwbGVfc2JpeCA9ICFmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX3NiaXgsIHN0cmVhbSwgMCApOworCisgICAgLyogQXBwbGUgJ3NiaXgnIGNvbG9yIGJpdG1hcHMgYXJlIHJlbmRlcmVkIHNjYWxlZCBhbmQgdGhlbiB0aGUgJ2dseWYnCisgICAgICogb3V0bGluZSByZW5kZXJlZCBvbiB0b3AuICBXZSBkb24ndCBzdXBwb3J0IHRoYXQgeWV0LCBzbyBqdXN0IGlnbm9yZQorICAgICAqIHRoZSAnZ2x5Zicgb3V0bGluZSBhbmQgYWR2ZXJ0aXNlIGl0IGFzIGEgYml0bWFwLW9ubHkgZm9udC4gKi8KKyAgICBpZiAoIGlzX2FwcGxlX3NiaXggKQorICAgICAgaGFzX291dGxpbmUgPSBGQUxTRTsKKworICAgIC8qIGlmIHRoaXMgZm9udCBkb2Vzbid0IGNvbnRhaW4gb3V0bGluZXMsIHdlIHRyeSB0byBsb2FkICovCisgICAgLyogYSBgYmhlZCcgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICFoYXNfb3V0bGluZSAmJiBzZm50LT5sb2FkX2JoZWQgKQorICAgIHsKKyAgICAgIExPQURfKCBiaGVkICk7CisgICAgICBpc19hcHBsZV9zYml0ID0gRlRfQk9PTCggIWVycm9yICk7CisgICAgfQorCisgICAgLyogbG9hZCB0aGUgZm9udCBoZWFkZXIgKGBoZWFkJyB0YWJsZSkgaWYgdGhpcyBpc24ndCBhbiBBcHBsZSAqLworICAgIC8qIHNiaXQgZm9udCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICFpc19hcHBsZV9zYml0IHx8IGlzX2FwcGxlX3NiaXggKQorICAgIHsKKyAgICAgIExPQURfKCBoZWFkICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggZmFjZS0+aGVhZGVyLlVuaXRzX1Blcl9FTSA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiB0aGUgZm9sbG93aW5nIHRhYmxlcyBhcmUgb2Z0ZW4gbm90IHByZXNlbnQgaW4gZW1iZWRkZWQgVHJ1ZVR5cGUgKi8KKyAgICAvKiBmb250cyB3aXRoaW4gUERGIGRvY3VtZW50cywgc28gZG9uJ3QgY2hlY2sgZm9yIHRoZW0uICAgICAgICAgICAgKi8KKyAgICBMT0FEXyggbWF4cCApOworICAgIExPQURfKCBjbWFwICk7CisKKyAgICAvKiB0aGUgZm9sbG93aW5nIHRhYmxlcyBhcmUgb3B0aW9uYWwgaW4gUENMIGZvbnRzIC0tICovCisgICAgLyogZG9uJ3QgY2hlY2sgZm9yIGVycm9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIExPQURfKCBuYW1lICk7CisgICAgTE9BRF8oIHBvc3QgKTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworICAgIHBzbmFtZXNfZXJyb3IgPSBlcnJvcjsKKyNlbmRpZgorCisgICAgLyogZG8gbm90IGxvYWQgdGhlIG1ldHJpY3MgaGVhZGVycyBhbmQgdGFibGVzIGlmIHRoaXMgaXMgYW4gQXBwbGUgKi8KKyAgICAvKiBzYml0IGZvbnQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggIWlzX2FwcGxlX3NiaXQgKQorICAgIHsKKyAgICAgIC8qIGxvYWQgdGhlIGBoaGVhJyBhbmQgYGhtdHgnIHRhYmxlcyAqLworICAgICAgTE9BRE1fKCBoaGVhLCAwICk7CisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIExPQURNXyggaG10eCwgMCApOworICAgICAgICBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIFRhYmxlX01pc3NpbmcgKSApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBIbXR4X1RhYmxlX01pc3NpbmcgKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAgICAgICAvKiBJZiB0aGlzIGlzIGFuIGluY3JlbWVudGFsbHkgbG9hZGVkIGZvbnQgYW5kIHRoZXJlIGFyZSAqLworICAgICAgICAgIC8qIG92ZXJyaWRpbmcgbWV0cmljcywgdG9sZXJhdGUgYSBtaXNzaW5nIGBobXR4JyB0YWJsZS4gICovCisgICAgICAgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPgorICAgICAgICAgICAgICAgICBnZXRfZ2x5cGhfbWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmYWNlLT5ob3Jpem9udGFsLm51bWJlcl9PZl9ITWV0cmljcyA9IDA7CisgICAgICAgICAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIFRhYmxlX01pc3NpbmcgKSApCisgICAgICB7CisgICAgICAgIC8qIE5vIGBoaGVhJyB0YWJsZSBuZWNlc3NhcnkgZm9yIFNGTlQgTWFjIGZvbnRzLiAqLworICAgICAgICBpZiAoIGZhY2UtPmZvcm1hdF90YWcgPT0gVFRBR190cnVlICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFMigoICJUaGlzIGlzIGFuIFNGTlQgTWFjIGZvbnQuXG4iICkpOworCisgICAgICAgICAgaGFzX291dGxpbmUgPSAwOworICAgICAgICAgIGVycm9yICAgICAgID0gRlRfRXJyX09rOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEhvcml6X0hlYWRlcl9NaXNzaW5nICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgICAgICAgLyogSWYgdGhpcyBpcyBhbiBpbmNyZW1lbnRhbGx5IGxvYWRlZCBmb250IGFuZCB0aGVyZSBhcmUgKi8KKyAgICAgICAgICAvKiBvdmVycmlkaW5nIG1ldHJpY3MsIHRvbGVyYXRlIGEgbWlzc2luZyBgaGhlYScgdGFibGUuICAqLworICAgICAgICAgIGlmICggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICAgICAgICAgICYmCisgICAgICAgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT4KKyAgICAgICAgICAgICAgICAgZ2V0X2dseXBoX21ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgeworICAgICAgICAgICAgZmFjZS0+aG9yaXpvbnRhbC5udW1iZXJfT2ZfSE1ldHJpY3MgPSAwOworICAgICAgICAgICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiB0cnkgdG8gbG9hZCB0aGUgYHZoZWEnIGFuZCBgdm10eCcgdGFibGVzICovCisgICAgICBMT0FETV8oIGhoZWEsIDEgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgIHsKKyAgICAgICAgTE9BRE1fKCBobXR4LCAxICk7CisgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICBmYWNlLT52ZXJ0aWNhbF9pbmZvID0gMTsKKyAgICAgIH0KKworICAgICAgaWYgKCBlcnJvciAmJiBGVF9FUlJfTkVRKCBlcnJvciwgVGFibGVfTWlzc2luZyApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBMT0FEXyggb3MyICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgLyogd2UgdHJlYXQgdGhlIHRhYmxlIGFzIG1pc3NpbmcgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMgKi8KKyAgICAgICAgZmFjZS0+b3MyLnZlcnNpb24gPSAweEZGRkZVOworICAgICAgfQorICAgIH0KKworICAgIC8qIHRoZSBvcHRpb25hbCB0YWJsZXMgKi8KKworICAgIC8qIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0ICovCisgICAgaWYgKCBzZm50LT5sb2FkX2VibGMgKQorICAgIHsKKyAgICAgIExPQURfKCBlYmxjICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgLyogYSBmb250IHdoaWNoIGNvbnRhaW5zIG5laXRoZXIgYml0bWFwcyBub3Igb3V0bGluZXMgaXMgKi8KKyAgICAgICAgLyogc3RpbGwgdmFsaWQgKGFsdGhvdWdoIHJhdGhlciB1c2VsZXNzIGluIG1vc3QgY2FzZXMpOyAgKi8KKyAgICAgICAgLyogaG93ZXZlciwgeW91IGNhbiBmaW5kIHN1Y2ggc3RyaXBwZWQgZm9udHMgaW4gUERGcyAgICAgKi8KKyAgICAgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBUYWJsZV9NaXNzaW5nICkgKQorICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgICBlbHNlCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICAgIExPQURfKCBwY2x0ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgaWYgKCBGVF9FUlJfTkVRKCBlcnJvciwgVGFibGVfTWlzc2luZyApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBmYWNlLT5wY2x0LlZlcnNpb24gPSAwOworICAgIH0KKworICAgIC8qIGNvbnNpZGVyIHRoZSBrZXJuaW5nIGFuZCBnYXNwIHRhYmxlcyBhcyBvcHRpb25hbCAqLworICAgIExPQURfKCBnYXNwICk7CisgICAgTE9BRF8oIGtlcm4gKTsKKworICAgIGZhY2UtPnJvb3QubnVtX2dseXBocyA9IGZhY2UtPm1heF9wcm9maWxlLm51bUdseXBoczsKKworICAgIC8qIEJpdCA4IG9mIHRoZSBgZnNTZWxlY3Rpb24nIGZpZWxkIGluIHRoZSBgT1MvMicgdGFibGUgZGVub3RlcyAgKi8KKyAgICAvKiBhIFdXUy1vbmx5IGZvbnQgZmFjZS4gIGBXV1MnIHN0YW5kcyBmb3IgYHdlaWdodCcsIHdpZHRoJywgYW5kICovCisgICAgLyogYHNsb3BlJywgYSB0ZXJtIHVzZWQgYnkgTWljcm9zb2Z0J3MgV2luZG93cyBQcmVzZW50YXRpb24gICAgICAqLworICAgIC8qIEZvdW5kYXRpb24gKFdQRikuICBUaGlzIGZsYWcgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB2ZXJzaW9uICAgKi8KKyAgICAvKiAxLjUgb2YgdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24gKE1heSAyMDA4KS4gICAgICAgICAgICAgICAgICovCisKKyAgICBmYWNlLT5yb290LmZhbWlseV9uYW1lID0gTlVMTDsKKyAgICBmYWNlLT5yb290LnN0eWxlX25hbWUgID0gTlVMTDsKKyAgICBpZiAoIGZhY2UtPm9zMi52ZXJzaW9uICE9IDB4RkZGRlUgJiYgZmFjZS0+b3MyLmZzU2VsZWN0aW9uICYgMjU2ICkKKyAgICB7CisgICAgICBpZiAoICFpZ25vcmVfcHJlZmVycmVkX2ZhbWlseSApCisgICAgICAgIEdFVF9OQU1FKCBQUkVGRVJSRURfRkFNSUxZLCAmZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSApOworICAgICAgaWYgKCAhZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSApCisgICAgICAgIEdFVF9OQU1FKCBGT05UX0ZBTUlMWSwgJmZhY2UtPnJvb3QuZmFtaWx5X25hbWUgKTsKKworICAgICAgaWYgKCAhaWdub3JlX3ByZWZlcnJlZF9zdWJmYW1pbHkgKQorICAgICAgICBHRVRfTkFNRSggUFJFRkVSUkVEX1NVQkZBTUlMWSwgJmZhY2UtPnJvb3Quc3R5bGVfbmFtZSApOworICAgICAgaWYgKCAhZmFjZS0+cm9vdC5zdHlsZV9uYW1lICkKKyAgICAgICAgR0VUX05BTUUoIEZPTlRfU1VCRkFNSUxZLCAmZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBHRVRfTkFNRSggV1dTX0ZBTUlMWSwgJmZhY2UtPnJvb3QuZmFtaWx5X25hbWUgKTsKKyAgICAgIGlmICggIWZhY2UtPnJvb3QuZmFtaWx5X25hbWUgJiYgIWlnbm9yZV9wcmVmZXJyZWRfZmFtaWx5ICkKKyAgICAgICAgR0VUX05BTUUoIFBSRUZFUlJFRF9GQU1JTFksICZmYWNlLT5yb290LmZhbWlseV9uYW1lICk7CisgICAgICBpZiAoICFmYWNlLT5yb290LmZhbWlseV9uYW1lICkKKyAgICAgICAgR0VUX05BTUUoIEZPTlRfRkFNSUxZLCAmZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSApOworCisgICAgICBHRVRfTkFNRSggV1dTX1NVQkZBTUlMWSwgJmZhY2UtPnJvb3Quc3R5bGVfbmFtZSApOworICAgICAgaWYgKCAhZmFjZS0+cm9vdC5zdHlsZV9uYW1lICYmICFpZ25vcmVfcHJlZmVycmVkX3N1YmZhbWlseSApCisgICAgICAgIEdFVF9OQU1FKCBQUkVGRVJSRURfU1VCRkFNSUxZLCAmZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7CisgICAgICBpZiAoICFmYWNlLT5yb290LnN0eWxlX25hbWUgKQorICAgICAgICBHRVRfTkFNRSggRk9OVF9TVUJGQU1JTFksICZmYWNlLT5yb290LnN0eWxlX25hbWUgKTsKKyAgICB9CisKKyAgICAvKiBub3cgc2V0IHVwIHJvb3QgZmllbGRzICovCisgICAgeworICAgICAgRlRfRmFjZSAgcm9vdCAgPSAmZmFjZS0+cm9vdDsKKyAgICAgIEZUX0xvbmcgIGZsYWdzID0gcm9vdC0+ZmFjZV9mbGFnczsKKworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIENvbXB1dGUgZmFjZSBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBmYWNlLT5zYml0X3RhYmxlX3R5cGUgPT0gVFRfU0JJVF9UQUJMRV9UWVBFX0NCTEMgfHwKKyAgICAgICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID09IFRUX1NCSVRfVEFCTEVfVFlQRV9TQklYICkKKyAgICAgICAgZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0NPTE9SOyAgICAgIC8qIGNvbG9yIGdseXBocyAqLworCisgICAgICBpZiAoIGhhc19vdXRsaW5lID09IFRSVUUgKQorICAgICAgICBmbGFncyB8PSBGVF9GQUNFX0ZMQUdfU0NBTEFCTEU7ICAgLyogc2NhbGFibGUgb3V0bGluZXMgKi8KKworICAgICAgLyogVGhlIHNmbnQgZHJpdmVyIG9ubHkgc3VwcG9ydHMgYml0bWFwIGZvbnRzIG5hdGl2ZWx5LCB0aHVzIHdlICovCisgICAgICAvKiBkb24ndCBzZXQgRlRfRkFDRV9GTEFHX0hJTlRFUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TRk5UICAgICAgIHwgIC8qIFNGTlQgZmlsZSBmb3JtYXQgICovCisgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTDsgICAvKiBob3Jpem9udGFsIGRhdGEgICAqLworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisgICAgICBpZiAoICFwc25hbWVzX2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBmYWNlLT5wb3N0c2NyaXB0LkZvcm1hdFR5cGUgIT0gMHgwMDAzMDAwMEwgKQorICAgICAgICBmbGFncyB8PSBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVM7CisjZW5kaWYKKworICAgICAgLyogZml4ZWQgd2lkdGggZm9udD8gKi8KKyAgICAgIGlmICggZmFjZS0+cG9zdHNjcmlwdC5pc0ZpeGVkUGl0Y2ggKQorICAgICAgICBmbGFncyB8PSBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg7CisKKyAgICAgIC8qIHZlcnRpY2FsIGluZm9ybWF0aW9uPyAqLworICAgICAgaWYgKCBmYWNlLT52ZXJ0aWNhbF9pbmZvICkKKyAgICAgICAgZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMOworCisgICAgICAvKiBrZXJuaW5nIGF2YWlsYWJsZSA/ICovCisgICAgICBpZiAoIFRUX0ZBQ0VfSEFTX0tFUk5JTkcoIGZhY2UgKSApCisgICAgICAgIGZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19LRVJOSU5HOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICAgLyogRG9uJ3QgYm90aGVyIHRvIGxvYWQgdGhlIHRhYmxlcyB1bmxlc3Mgc29tZWJvZHkgYXNrcyBmb3IgdGhlbS4gKi8KKyAgICAgIC8qIE5vIG5lZWQgdG8gZG8gd29yayB3aGljaCB3aWxsIChwcm9iYWJseSkgbm90IGJlIHVzZWQuICAgICAgICAgICovCisgICAgICBpZiAoIHR0X2ZhY2VfbG9va3VwX3RhYmxlKCBmYWNlLCBUVEFHX2dseWYgKSAhPSAwICYmCisgICAgICAgICAgIHR0X2ZhY2VfbG9va3VwX3RhYmxlKCBmYWNlLCBUVEFHX2Z2YXIgKSAhPSAwICYmCisgICAgICAgICAgIHR0X2ZhY2VfbG9va3VwX3RhYmxlKCBmYWNlLCBUVEFHX2d2YXIgKSAhPSAwICkKKyAgICAgICAgZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlM7CisjZW5kaWYKKworICAgICAgcm9vdC0+ZmFjZV9mbGFncyA9IGZsYWdzOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIENvbXB1dGUgc3R5bGUgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBmbGFncyA9IDA7CisgICAgICBpZiAoIGhhc19vdXRsaW5lID09IFRSVUUgJiYgZmFjZS0+b3MyLnZlcnNpb24gIT0gMHhGRkZGVSApCisgICAgICB7CisgICAgICAgIC8qIFdlIGhhdmUgYW4gT1MvMiB0YWJsZTsgdXNlIHRoZSBgZnNTZWxlY3Rpb24nIGZpZWxkLiAgQml0IDkgKi8KKyAgICAgICAgLyogaW5kaWNhdGVzIGFuIG9ibGlxdWUgZm9udCBmYWNlLiAgVGhpcyBmbGFnIGhhcyBiZWVuICAgICAgICAqLworICAgICAgICAvKiBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS41IG9mIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICovCisKKyAgICAgICAgaWYgKCBmYWNlLT5vczIuZnNTZWxlY3Rpb24gJiA1MTIgKSAgICAgICAvKiBiaXQgOSAqLworICAgICAgICAgIGZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfSVRBTElDOworICAgICAgICBlbHNlIGlmICggZmFjZS0+b3MyLmZzU2VsZWN0aW9uICYgMSApICAgIC8qIGJpdCAwICovCisgICAgICAgICAgZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CisKKyAgICAgICAgaWYgKCBmYWNlLT5vczIuZnNTZWxlY3Rpb24gJiAzMiApICAgICAgICAvKiBiaXQgNSAqLworICAgICAgICAgIGZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfQk9MRDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogdGhpcyBpcyBhbiBvbGQgTWFjIGZvbnQsIHVzZSB0aGUgaGVhZGVyIGZpZWxkICovCisKKyAgICAgICAgaWYgKCBmYWNlLT5oZWFkZXIuTWFjX1N0eWxlICYgMSApCisgICAgICAgICAgZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19CT0xEOworCisgICAgICAgIGlmICggZmFjZS0+aGVhZGVyLk1hY19TdHlsZSAmIDIgKQorICAgICAgICAgIGZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfSVRBTElDOworICAgICAgfQorCisgICAgICByb290LT5zdHlsZV9mbGFncyA9IGZsYWdzOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIFBvbGlzaCB0aGUgY2hhcm1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICBUcnkgdG8gc2V0IHRoZSBjaGFybWFwIGVuY29kaW5nIGFjY29yZGluZyB0byB0aGUgcGxhdGZvcm0gJiAgICAgKi8KKyAgICAgIC8qICAgZW5jb2RpbmcgSUQgb2YgZWFjaCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICB0dF9mYWNlX2J1aWxkX2NtYXBzKCBmYWNlICk7ICAvKiBpZ25vcmUgZXJyb3JzICovCisKKworICAgICAgLyogc2V0IHRoZSBlbmNvZGluZyBmaWVsZHMgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBtOworCisKKyAgICAgICAgZm9yICggbSA9IDA7IG0gPCByb290LT5udW1fY2hhcm1hcHM7IG0rKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9DaGFyTWFwICBjaGFybWFwID0gcm9vdC0+Y2hhcm1hcHNbbV07CisKKworICAgICAgICAgIGNoYXJtYXAtPmVuY29kaW5nID0gc2ZudF9maW5kX2VuY29kaW5nKCBjaGFybWFwLT5wbGF0Zm9ybV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcC0+ZW5jb2RpbmdfaWQgKTsKKworI2lmIDAKKyAgICAgICAgICBpZiAoIHJvb3QtPmNoYXJtYXAgICAgID09IE5VTEwgJiYKKyAgICAgICAgICAgICAgIGNoYXJtYXAtPmVuY29kaW5nID09IEZUX0VOQ09ESU5HX1VOSUNPREUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNldCAncm9vdC0+Y2hhcm1hcCcgdG8gdGhlIGZpcnN0IFVuaWNvZGUgZW5jb2Rpbmcgd2UgZmluZCAqLworICAgICAgICAgICAgcm9vdC0+Y2hhcm1hcCA9IGNoYXJtYXA7CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICAgIH0KKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworCisgICAgICAvKgorICAgICAgICogIE5vdyBhbGxvY2F0ZSB0aGUgcm9vdCBhcnJheSBvZiBGVF9CaXRtYXBfU2l6ZSByZWNvcmRzIGFuZAorICAgICAgICogIHBvcHVsYXRlIHRoZW0uICBVbmZvcnR1bmF0ZWx5LCBpdCBpc24ndCBwb3NzaWJsZSB0byBpbmRpY2F0ZSBiaXQKKyAgICAgICAqICBkZXB0aHMgaW4gdGhlIEZUX0JpdG1hcF9TaXplIHJlY29yZC4gIFRoaXMgaXMgYSBkZXNpZ24gZXJyb3IuCisgICAgICAgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgaSwgY291bnQ7CisKKworICAgICAgICBjb3VudCA9IGZhY2UtPnNiaXRfbnVtX3N0cmlrZXM7CisKKyAgICAgICAgaWYgKCBjb3VudCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgICA9IGZhY2UtPnJvb3Quc3RyZWFtLT5tZW1vcnk7CisgICAgICAgICAgRlRfVVNob3J0ICAgICAgICBlbV9zaXplICA9IGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU07CisgICAgICAgICAgRlRfU2hvcnQgICAgICAgICBhdmd3aWR0aCA9IGZhY2UtPm9zMi54QXZnQ2hhcldpZHRoOworICAgICAgICAgIEZUX1NpemVfTWV0cmljcyAgbWV0cmljczsKKworCisgICAgICAgICAgaWYgKCBlbV9zaXplID09IDAgfHwgZmFjZS0+b3MyLnZlcnNpb24gPT0gMHhGRkZGVSApCisgICAgICAgICAgeworICAgICAgICAgICAgYXZnd2lkdGggPSAxOworICAgICAgICAgICAgZW1fc2l6ZSA9IDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHJvb3QtPmF2YWlsYWJsZV9zaXplcywgY291bnQgKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0JpdG1hcF9TaXplKiAgYnNpemUgPSByb290LT5hdmFpbGFibGVfc2l6ZXMgKyBpOworCisKKyAgICAgICAgICAgIGVycm9yID0gc2ZudC0+bG9hZF9zdHJpa2VfbWV0cmljcyggZmFjZSwgaSwgJm1ldHJpY3MgKTsKKyAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIGJzaXplLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBtZXRyaWNzLmhlaWdodCA+PiA2ICk7CisgICAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpKAorICAgICAgICAgICAgICAgICggYXZnd2lkdGggKiBtZXRyaWNzLnhfcHBlbSArIGVtX3NpemUgLyAyICkgLyBlbV9zaXplICk7CisKKyAgICAgICAgICAgIGJzaXplLT54X3BwZW0gPSBtZXRyaWNzLnhfcHBlbSA8PCA2OworICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IG1ldHJpY3MueV9wcGVtIDw8IDY7CisKKyAgICAgICAgICAgIC8qIGFzc3VtZSA3MmRwaSAqLworICAgICAgICAgICAgYnNpemUtPnNpemUgICA9IG1ldHJpY3MueV9wcGVtIDw8IDY7CisgICAgICAgICAgfQorCisgICAgICAgICAgcm9vdC0+ZmFjZV9mbGFncyAgICAgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTOworICAgICAgICAgIHJvb3QtPm51bV9maXhlZF9zaXplcyA9IChGVF9JbnQpY291bnQ7CisgICAgICAgIH0KKyAgICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyAqLworCisgICAgICAvKiBhIGZvbnQgd2l0aCBubyBiaXRtYXBzIGFuZCBubyBvdXRsaW5lcyBpcyBzY2FsYWJsZTsgKi8KKyAgICAgIC8qIGl0IGhhcyBvbmx5IGVtcHR5IGdseXBocyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAhRlRfSEFTX0ZJWEVEX1NJWkVTKCByb290ICkgJiYgIUZUX0lTX1NDQUxBQkxFKCByb290ICkgKQorICAgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTsKKworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICBTZXQgdXAgbWV0cmljcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBGVF9JU19TQ0FMQUJMRSggcm9vdCApICkKKyAgICAgIHsKKyAgICAgICAgLyogWFhYIFdoYXQgYWJvdXQgaWYgb3V0bGluZSBoZWFkZXIgaXMgbWlzc2luZyAqLworICAgICAgICAvKiAgICAgKGUuZy4gc2ZudCB3cmFwcGVkIGJpdG1hcCk/ICAgICAgICAgICAgICovCisgICAgICAgIHJvb3QtPmJib3gueE1pbiAgICA9IGZhY2UtPmhlYWRlci54TWluOworICAgICAgICByb290LT5iYm94LnlNaW4gICAgPSBmYWNlLT5oZWFkZXIueU1pbjsKKyAgICAgICAgcm9vdC0+YmJveC54TWF4ICAgID0gZmFjZS0+aGVhZGVyLnhNYXg7CisgICAgICAgIHJvb3QtPmJib3gueU1heCAgICA9IGZhY2UtPmhlYWRlci55TWF4OworICAgICAgICByb290LT51bml0c19wZXJfRU0gPSBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNOworCisKKyAgICAgICAgLyogWFhYOiBDb21wdXRpbmcgdGhlIGFzY2VuZGVyL2Rlc2NlbmRlci9oZWlnaHQgaXMgdmVyeSBkaWZmZXJlbnQgKi8KKyAgICAgICAgLyogICAgICBmcm9tIHdoYXQgdGhlIHNwZWNpZmljYXRpb24gdGVsbHMgeW91LiAgQXBwYXJlbnRseSwgd2UgICAgKi8KKyAgICAgICAgLyogICAgICBtdXN0IGJlIGNhcmVmdWwgYmVjYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAtIG5vdCBhbGwgZm9udHMgaGF2ZSBhbiBPUy8yIHRhYmxlOyBpbiB0aGlzIGNhc2UsIHdlIHRha2UgKi8KKyAgICAgICAgLyogICAgICAgIHRoZSB2YWx1ZXMgaW4gdGhlIGhvcml6b250YWwgaGVhZGVyLiAgSG93ZXZlciwgdGhlc2UgICAgKi8KKyAgICAgICAgLyogICAgICAgIHZhbHVlcyB2ZXJ5IG9mdGVuIGFyZSBub3QgcmVsaWFibGUuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAtIG90aGVyd2lzZSwgdGhlIGNvcnJlY3QgdHlwb2dyYXBoaWMgdmFsdWVzIGFyZSBpbiB0aGUgICAgKi8KKyAgICAgICAgLyogICAgICAgIHNUeXBvQXNjZW5kZXIsIHNUeXBvRGVzY2VuZGVyICYgc1R5cG9MaW5lR2FwIGZpZWxkcy4gICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgIEhvd2V2ZXIsIGNlcnRhaW4gZm9udHMgaGF2ZSB0aGVzZSBmaWVsZHMgc2V0IHRvIDAuICAgICAgKi8KKyAgICAgICAgLyogICAgICAgIFJhdGhlciwgdGhleSBoYXZlIHVzV2luQXNjZW50ICYgdXNXaW5EZXNjZW50IGNvcnJlY3RseSAgKi8KKyAgICAgICAgLyogICAgICAgIHNldCAoYnV0IHdpdGggZGlmZmVyZW50IHZhbHVlcykuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICBBcyBhbiBleGFtcGxlLCBBcmlhbCBOYXJyb3cgaXMgaW1wbGVtZW50ZWQgdGhyb3VnaCBmb3VyICAgKi8KKyAgICAgICAgLyogICAgICBmaWxlcyBBUklBTE4uVFRGLCBBUklBTE5JLlRURiwgQVJJQUxOQi5UVEYgJiBBUklBTE5CSS5UVEYgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICBTdHJhbmdlbHksIGFsbCBmb250cyBoYXZlIHRoZSBzYW1lIHZhbHVlcyBpbiB0aGVpciAgICAgICAgKi8KKyAgICAgICAgLyogICAgICBzVHlwb1hYWCBmaWVsZHMsIGV4Y2VwdCBBUklBTE5CIHdoaWNoIHNldHMgdGhlbSB0byAwLiAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBhbGwgaGF2ZSBkaWZmZXJlbnQgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICB1c1dpbkFzY2VudC9EZXNjZW50IHZhbHVlcyAtLSBhcyBhIGNvbmNsdXNpb24sIHRoZSBPUy8yICAgKi8KKyAgICAgICAgLyogICAgICB0YWJsZSBjYW5ub3QgYmUgdXNlZCB0byBjb21wdXRlIHRoZSB0ZXh0IGhlaWdodCByZWxpYWJseSEgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAvKiBUaGUgYXNjZW5kZXIgYW5kIGRlc2NlbmRlciBhcmUgdGFrZW4gZnJvbSB0aGUgYGhoZWEnIHRhYmxlLiAqLworICAgICAgICAvKiBJZiB6ZXJvLCB0aGV5IGFyZSB0YWtlbiBmcm9tIHRoZSBgT1MvMicgdGFibGUuICAgICAgICAgICAgICAqLworCisgICAgICAgIHJvb3QtPmFzY2VuZGVyICA9IGZhY2UtPmhvcml6b250YWwuQXNjZW5kZXI7CisgICAgICAgIHJvb3QtPmRlc2NlbmRlciA9IGZhY2UtPmhvcml6b250YWwuRGVzY2VuZGVyOworCisgICAgICAgIHJvb3QtPmhlaWdodCA9IHJvb3QtPmFzY2VuZGVyIC0gcm9vdC0+ZGVzY2VuZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aG9yaXpvbnRhbC5MaW5lX0dhcDsKKworICAgICAgICBpZiAoICEoIHJvb3QtPmFzY2VuZGVyIHx8IHJvb3QtPmRlc2NlbmRlciApICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggZmFjZS0+b3MyLnZlcnNpb24gIT0gMHhGRkZGVSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBmYWNlLT5vczIuc1R5cG9Bc2NlbmRlciB8fCBmYWNlLT5vczIuc1R5cG9EZXNjZW5kZXIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByb290LT5hc2NlbmRlciAgPSBmYWNlLT5vczIuc1R5cG9Bc2NlbmRlcjsKKyAgICAgICAgICAgICAgcm9vdC0+ZGVzY2VuZGVyID0gZmFjZS0+b3MyLnNUeXBvRGVzY2VuZGVyOworCisgICAgICAgICAgICAgIHJvb3QtPmhlaWdodCA9IHJvb3QtPmFzY2VuZGVyIC0gcm9vdC0+ZGVzY2VuZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+b3MyLnNUeXBvTGluZUdhcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcm9vdC0+YXNjZW5kZXIgID0gIChGVF9TaG9ydClmYWNlLT5vczIudXNXaW5Bc2NlbnQ7CisgICAgICAgICAgICAgIHJvb3QtPmRlc2NlbmRlciA9IC0oRlRfU2hvcnQpZmFjZS0+b3MyLnVzV2luRGVzY2VudDsKKworICAgICAgICAgICAgICByb290LT5oZWlnaHQgPSByb290LT5hc2NlbmRlciAtIHJvb3QtPmRlc2NlbmRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByb290LT5tYXhfYWR2YW5jZV93aWR0aCAgPQorICAgICAgICAgIChGVF9TaG9ydClmYWNlLT5ob3Jpem9udGFsLmFkdmFuY2VfV2lkdGhfTWF4OworICAgICAgICByb290LT5tYXhfYWR2YW5jZV9oZWlnaHQgPQorICAgICAgICAgIChGVF9TaG9ydCkoIGZhY2UtPnZlcnRpY2FsX2luZm8gPyBmYWNlLT52ZXJ0aWNhbC5hZHZhbmNlX0hlaWdodF9NYXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcm9vdC0+aGVpZ2h0ICk7CisKKyAgICAgICAgLyogU2VlIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9PcGVuVHlwZS9PVFNwZWMvcG9zdC5odG0gLS0gKi8KKyAgICAgICAgLyogQWRqdXN0IHVuZGVybGluZSBwb3NpdGlvbiBmcm9tIHRvcCBlZGdlIHRvIGNlbnRyZSBvZiAgICAgKi8KKyAgICAgICAgLyogc3Ryb2tlIHRvIGNvbnZlcnQgVHJ1ZVR5cGUgbWVhbmluZyB0byBGcmVlVHlwZSBtZWFuaW5nLiAgKi8KKyAgICAgICAgcm9vdC0+dW5kZXJsaW5lX3Bvc2l0aW9uICA9IGZhY2UtPnBvc3RzY3JpcHQudW5kZXJsaW5lUG9zaXRpb24gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cG9zdHNjcmlwdC51bmRlcmxpbmVUaGlja25lc3MgLyAyOworICAgICAgICByb290LT51bmRlcmxpbmVfdGhpY2tuZXNzID0gZmFjZS0+cG9zdHNjcmlwdC51bmRlcmxpbmVUaGlja25lc3M7CisgICAgICB9CisKKyAgICB9CisKKyAgRXhpdDoKKyAgICBGVF9UUkFDRTIoKCAic2ZudF9sb2FkX2ZhY2U6IGRvbmVcbiIgKSk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisjdW5kZWYgTE9BRF8KKyN1bmRlZiBMT0FETV8KKyN1bmRlZiBHRVRfTkFNRQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgc2ZudF9kb25lX2ZhY2UoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnk7CisgICAgU0ZOVF9TZXJ2aWNlICBzZm50OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybjsKKworICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKKworICAgIGlmICggc2ZudCApCisgICAgeworICAgICAgLyogZGVzdHJveSB0aGUgcG9zdHNjcmlwdCBuYW1lcyB0YWJsZSBpZiBpdCBpcyBsb2FkZWQgKi8KKyAgICAgIGlmICggc2ZudC0+ZnJlZV9wc25hbWVzICkKKyAgICAgICAgc2ZudC0+ZnJlZV9wc25hbWVzKCBmYWNlICk7CisKKyAgICAgIC8qIGRlc3Ryb3kgdGhlIGVtYmVkZGVkIGJpdG1hcHMgdGFibGUgaWYgaXQgaXMgbG9hZGVkICovCisgICAgICBpZiAoIHNmbnQtPmZyZWVfZWJsYyApCisgICAgICAgIHNmbnQtPmZyZWVfZWJsYyggZmFjZSApOworICAgIH0KKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCisgICAgLyogZnJlZWluZyB0aGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKi8KKyAgICB0dF9mYWNlX2ZyZWVfYmRmX3Byb3BzKCBmYWNlICk7CisjZW5kaWYKKworICAgIC8qIGZyZWVpbmcgdGhlIGtlcm5pbmcgdGFibGUgKi8KKyAgICB0dF9mYWNlX2RvbmVfa2VybiggZmFjZSApOworCisgICAgLyogZnJlZWluZyB0aGUgY29sbGVjdGlvbiB0YWJsZSAqLworICAgIEZUX0ZSRUUoIGZhY2UtPnR0Y19oZWFkZXIub2Zmc2V0cyApOworICAgIGZhY2UtPnR0Y19oZWFkZXIuY291bnQgPSAwOworCisgICAgLyogZnJlZWluZyB0YWJsZSBkaXJlY3RvcnkgKi8KKyAgICBGVF9GUkVFKCBmYWNlLT5kaXJfdGFibGVzICk7CisgICAgZmFjZS0+bnVtX3RhYmxlcyA9IDA7CisKKyAgICB7CisgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IEZUX0ZBQ0VfU1RSRUFNKCBmYWNlICk7CisKKworICAgICAgLyogc2ltcGx5IHJlbGVhc2UgdGhlICdjbWFwJyB0YWJsZSBmcmFtZSAqLworICAgICAgRlRfRlJBTUVfUkVMRUFTRSggZmFjZS0+Y21hcF90YWJsZSApOworICAgICAgZmFjZS0+Y21hcF9zaXplID0gMDsKKyAgICB9CisKKyAgICAvKiBmcmVlaW5nIHRoZSBob3Jpem9udGFsIG1ldHJpY3MgKi8KKyAgICB7CisgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IEZUX0ZBQ0VfU1RSRUFNKCBmYWNlICk7CisKKworICAgICAgRlRfRlJBTUVfUkVMRUFTRSggZmFjZS0+aG9yel9tZXRyaWNzICk7CisgICAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT52ZXJ0X21ldHJpY3MgKTsKKyAgICAgIGZhY2UtPmhvcnpfbWV0cmljc19zaXplID0gMDsKKyAgICAgIGZhY2UtPnZlcnRfbWV0cmljc19zaXplID0gMDsKKyAgICB9CisKKyAgICAvKiBmcmVlaW5nIHRoZSB2ZXJ0aWNhbCBvbmVzLCBpZiBhbnkgKi8KKyAgICBpZiAoIGZhY2UtPnZlcnRpY2FsX2luZm8gKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGZhY2UtPnZlcnRpY2FsLmxvbmdfbWV0cmljcyAgKTsKKyAgICAgIEZUX0ZSRUUoIGZhY2UtPnZlcnRpY2FsLnNob3J0X21ldHJpY3MgKTsKKyAgICAgIGZhY2UtPnZlcnRpY2FsX2luZm8gPSAwOworICAgIH0KKworICAgIC8qIGZyZWVpbmcgdGhlIGdhc3AgdGFibGUgKi8KKyAgICBGVF9GUkVFKCBmYWNlLT5nYXNwLmdhc3BSYW5nZXMgKTsKKyAgICBmYWNlLT5nYXNwLm51bVJhbmdlcyA9IDA7CisKKyAgICAvKiBmcmVlaW5nIHRoZSBuYW1lIHRhYmxlICovCisgICAgaWYgKCBzZm50ICkKKyAgICAgIHNmbnQtPmZyZWVfbmFtZSggZmFjZSApOworCisgICAgLyogZnJlZWluZyBmYW1pbHkgYW5kIHN0eWxlIG5hbWUgKi8KKyAgICBGVF9GUkVFKCBmYWNlLT5yb290LmZhbWlseV9uYW1lICk7CisgICAgRlRfRlJFRSggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7CisKKyAgICAvKiBmcmVlaW5nIHNiaXQgc2l6ZSB0YWJsZSAqLworICAgIEZUX0ZSRUUoIGZhY2UtPnJvb3QuYXZhaWxhYmxlX3NpemVzICk7CisgICAgZmFjZS0+cm9vdC5udW1fZml4ZWRfc2l6ZXMgPSAwOworCisgICAgRlRfRlJFRSggZmFjZS0+cG9zdHNjcmlwdF9uYW1lICk7CisKKyAgICBmYWNlLT5zZm50ID0gTlVMTDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3Nmb2Jqcy5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3Nmb2Jqcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzdkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvc2ZvYmpzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc2ZvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fU0ZPQkpTX0hfXworI2RlZmluZSBfX1NGT0JKU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBzZm50X2luaXRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgc2ZudF9sb2FkX2ZhY2UoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgc2ZudF9kb25lX2ZhY2UoIFRUX0ZhY2UgIGZhY2UgKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1NGRFJJVkVSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0YmRmLmMgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRiZGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOThiNzgxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0YmRmLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0YmRmLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSAidHRiZGYuaCIKKworI2luY2x1ZGUgInNmZXJyb3JzLmgiCisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRiZGYKKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHR0X2ZhY2VfZnJlZV9iZGZfcHJvcHMoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgVFRfQkRGICBiZGYgPSAmZmFjZS0+YmRmOworCisKKyAgICBpZiAoIGJkZi0+bG9hZGVkICkKKyAgICB7CisgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IEZUX0ZBQ0UoZmFjZSktPnN0cmVhbTsKKworCisgICAgICBpZiAoIGJkZi0+dGFibGUgIT0gTlVMTCApCisgICAgICAgIEZUX0ZSQU1FX1JFTEVBU0UoIGJkZi0+dGFibGUgKTsKKworICAgICAgYmRmLT50YWJsZV9lbmQgICAgPSBOVUxMOworICAgICAgYmRmLT5zdHJpbmdzICAgICAgPSBOVUxMOworICAgICAgYmRmLT5zdHJpbmdzX3NpemUgPSAwOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X2ZhY2VfbG9hZF9iZGZfcHJvcHMoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgVFRfQkRGICAgIGJkZiA9ICZmYWNlLT5iZGY7CisgICAgRlRfVUxvbmcgIGxlbmd0aDsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIEZUX1pFUk8oIGJkZiApOworCisgICAgZXJyb3IgPSB0dF9mYWNlX2dvdG9fdGFibGUoIGZhY2UsIFRUQUdfQkRGLCBzdHJlYW0sICZsZW5ndGggKTsKKyAgICBpZiAoIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBsZW5ndGggPCA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgRlRfRlJBTUVfRVhUUkFDVCggbGVuZ3RoLCBiZGYtPnRhYmxlICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBiZGYtPnRhYmxlX2VuZCA9IGJkZi0+dGFibGUgKyBsZW5ndGg7CisKKyAgICB7CisgICAgICBGVF9CeXRlKiAgIHAgICAgICAgICAgID0gYmRmLT50YWJsZTsKKyAgICAgIEZUX1VJbnQgICAgdmVyc2lvbiAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgICBudW1fc3RyaWtlcyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBGVF9VTG9uZyAgIHN0cmluZ3MgICAgID0gRlRfTkVYVF9VTE9ORyAoIHAgKTsKKyAgICAgIEZUX1VJbnQgICAgY291bnQ7CisgICAgICBGVF9CeXRlKiAgIHN0cmlrZTsKKworCisgICAgICBpZiAoIHZlcnNpb24gIT0gMHgwMDAxICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBzdHJpbmdzIDwgOCAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCBzdHJpbmdzIC0gOCApIC8gNCA8IG51bV9zdHJpa2VzIHx8CisgICAgICAgICAgIHN0cmluZ3MgKyAxID4gbGVuZ3RoICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIGdvdG8gQmFkVGFibGU7CisgICAgICB9CisKKyAgICAgIGJkZi0+bnVtX3N0cmlrZXMgID0gbnVtX3N0cmlrZXM7CisgICAgICBiZGYtPnN0cmluZ3MgICAgICA9IGJkZi0+dGFibGUgKyBzdHJpbmdzOworICAgICAgYmRmLT5zdHJpbmdzX3NpemUgPSBsZW5ndGggLSBzdHJpbmdzOworCisgICAgICBjb3VudCAgPSBiZGYtPm51bV9zdHJpa2VzOworICAgICAgcCAgICAgID0gYmRmLT50YWJsZSArIDg7CisgICAgICBzdHJpa2UgPSBwICsgY291bnQgKiA0OworCisKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgbnVtX2l0ZW1zID0gRlRfUEVFS19VU0hPUlQoIHAgKyAyICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHZhbHVlIHNldHMgdGhlbXNlbHZlcywgc2luY2UgdGhpcworICAgICAgICAgKiAgaXMgZG9uZSBsYXRlci4KKyAgICAgICAgICovCisgICAgICAgIHN0cmlrZSArPSAxMCAqIG51bV9pdGVtczsKKworICAgICAgICBwICs9IDQ7CisgICAgICB9CisKKyAgICAgIGlmICggc3RyaWtlID4gYmRmLT5zdHJpbmdzICkKKyAgICAgICAgZ290byBCYWRUYWJsZTsKKyAgICB9CisKKyAgICBiZGYtPmxvYWRlZCA9IDE7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgQmFkVGFibGU6CisgICAgRlRfRlJBTUVfUkVMRUFTRSggYmRmLT50YWJsZSApOworICAgIEZUX1pFUk8oIGJkZiApOworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2ZpbmRfYmRmX3Byb3AoIFRUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCREZfUHJvcGVydHlSZWMgICphcHJvcCApCisgIHsKKyAgICBUVF9CREYgICAgIGJkZiAgID0gJmZhY2UtPmJkZjsKKyAgICBGVF9TaXplICAgIHNpemUgID0gRlRfRkFDRShmYWNlKS0+c2l6ZTsKKyAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX0J5dGUqICAgcDsKKyAgICBGVF9VSW50ICAgIGNvdW50OworICAgIEZUX0J5dGUqICAgc3RyaWtlOworICAgIEZUX09mZnNldCAgcHJvcGVydHlfbGVuOworCisKKyAgICBhcHJvcC0+dHlwZSA9IEJERl9QUk9QRVJUWV9UWVBFX05PTkU7CisKKyAgICBpZiAoIGJkZi0+bG9hZGVkID09IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gdHRfZmFjZV9sb2FkX2JkZl9wcm9wcyggZmFjZSwgRlRfRkFDRSggZmFjZSApLT5zdHJlYW0gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgY291bnQgID0gYmRmLT5udW1fc3RyaWtlczsKKyAgICBwICAgICAgPSBiZGYtPnRhYmxlICsgODsKKyAgICBzdHJpa2UgPSBwICsgNCAqIGNvdW50OworCisgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggc2l6ZSA9PSBOVUxMIHx8IHByb3BlcnR5X25hbWUgPT0gTlVMTCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBwcm9wZXJ0eV9sZW4gPSBmdF9zdHJsZW4oIHByb3BlcnR5X25hbWUgKTsKKyAgICBpZiAoIHByb3BlcnR5X2xlbiA9PSAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICB7CisgICAgICBGVF9VSW50ICBfcHBlbSAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgX2NvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgaWYgKCBfcHBlbSA9PSBzaXplLT5tZXRyaWNzLnlfcHBlbSApCisgICAgICB7CisgICAgICAgIGNvdW50ID0gX2NvdW50OworICAgICAgICBnb3RvIEZvdW5kU3RyaWtlOworICAgICAgfQorCisgICAgICBzdHJpa2UgKz0gMTAgKiBfY291bnQ7CisgICAgfQorICAgIGdvdG8gRXhpdDsKKworICBGb3VuZFN0cmlrZToKKyAgICBwID0gc3RyaWtlOworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICB7CisgICAgICBGVF9VSW50ICB0eXBlID0gRlRfUEVFS19VU0hPUlQoIHAgKyA0ICk7CisKKyAgICAgIGlmICggKCB0eXBlICYgMHgxMCApICE9IDAgKQorICAgICAgeworICAgICAgICBGVF9VSW50MzIgIG5hbWVfb2Zmc2V0ID0gRlRfUEVFS19VTE9ORyggcCAgICAgKTsKKyAgICAgICAgRlRfVUludDMyICB2YWx1ZSAgICAgICA9IEZUX1BFRUtfVUxPTkcoIHAgKyA2ICk7CisKKyAgICAgICAgLyogYmUgYSBiaXQgcGFyYW5vaWQgZm9yIGludmFsaWQgZW50cmllcyBoZXJlICovCisgICAgICAgIGlmICggbmFtZV9vZmZzZXQgPCBiZGYtPnN0cmluZ3Nfc2l6ZSAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcm9wZXJ0eV9sZW4gPCBiZGYtPnN0cmluZ3Nfc2l6ZSAtIG5hbWVfb2Zmc2V0ICAgICAmJgorICAgICAgICAgICAgIGZ0X3N0cm5jbXAoIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKWJkZi0+c3RyaW5ncyArIG5hbWVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJkZi0+c3RyaW5nc19zaXplIC0gbmFtZV9vZmZzZXQgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoIHR5cGUgJiAweDBGICkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSAweDAwOiAgLyogc3RyaW5nICovCisgICAgICAgICAgY2FzZSAweDAxOiAgLyogYXRvbXMgKi8KKyAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgdGhlIGNvbnRlbnQgaXMgcmVhbGx5IDAtdGVybWluYXRlZCAqLworICAgICAgICAgICAgaWYgKCB2YWx1ZSA8IGJkZi0+c3RyaW5nc19zaXplICYmCisgICAgICAgICAgICAgICAgIGZ0X21lbWNociggYmRmLT5zdHJpbmdzICsgdmFsdWUsIDAsIGJkZi0+c3RyaW5nc19zaXplICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBhcHJvcC0+dHlwZSAgID0gQkRGX1BST1BFUlRZX1RZUEVfQVRPTTsKKyAgICAgICAgICAgICAgYXByb3AtPnUuYXRvbSA9IChjb25zdCBjaGFyKiliZGYtPnN0cmluZ3MgKyB2YWx1ZTsKKyAgICAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDB4MDI6CisgICAgICAgICAgICBhcHJvcC0+dHlwZSAgICAgID0gQkRGX1BST1BFUlRZX1RZUEVfSU5URUdFUjsKKyAgICAgICAgICAgIGFwcm9wLT51LmludGVnZXIgPSAoRlRfSW50MzIpdmFsdWU7CisgICAgICAgICAgICBlcnJvciAgICAgICAgICAgID0gRlRfRXJyX09rOworICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgY2FzZSAweDAzOgorICAgICAgICAgICAgYXByb3AtPnR5cGUgICAgICAgPSBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTDsKKyAgICAgICAgICAgIGFwcm9wLT51LmNhcmRpbmFsID0gdmFsdWU7CisgICAgICAgICAgICBlcnJvciAgICAgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBwICs9IDEwOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9CREYgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dGJkZi5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0YmRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0YmE0OAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dGJkZi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0YmRmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUQkRGX0hfXworI2RlZmluZSBfX1RUQkRGX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInR0bG9hZC5oIgorI2luY2x1ZGUgRlRfQkRGX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgdHRfZmFjZV9mcmVlX2JkZl9wcm9wcyggVFRfRmFjZSAgZmFjZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9maW5kX2JkZl9wcm9wKCBUVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQkRGX1Byb3BlcnR5UmVjICAqYXByb3AgKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1RUQkRGX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcC5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNWVlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRjbWFwLmMKQEAgLTAsMCArMSwzNTk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGNtYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSAic2ZlcnJvcnMuaCIgICAgICAgICAgIC8qIG11c3QgY29tZSBiZWZvcmUgRlRfSU5URVJOQUxfVkFMSURBVEVfSCAqLworCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgInR0bG9hZC5oIgorI2luY2x1ZGUgInR0Y21hcC5oIgorI2luY2x1ZGUgInNmbnRwaWMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Y21hcAorCisKKyNkZWZpbmUgVFRfUEVFS19TSE9SVCAgIEZUX1BFRUtfU0hPUlQKKyNkZWZpbmUgVFRfUEVFS19VU0hPUlQgIEZUX1BFRUtfVVNIT1JUCisjZGVmaW5lIFRUX1BFRUtfVUlOVDI0ICBGVF9QRUVLX1VPRkYzCisjZGVmaW5lIFRUX1BFRUtfTE9ORyAgICBGVF9QRUVLX0xPTkcKKyNkZWZpbmUgVFRfUEVFS19VTE9ORyAgIEZUX1BFRUtfVUxPTkcKKworI2RlZmluZSBUVF9ORVhUX1NIT1JUICAgRlRfTkVYVF9TSE9SVAorI2RlZmluZSBUVF9ORVhUX1VTSE9SVCAgRlRfTkVYVF9VU0hPUlQKKyNkZWZpbmUgVFRfTkVYVF9VSU5UMjQgIEZUX05FWFRfVU9GRjMKKyNkZWZpbmUgVFRfTkVYVF9MT05HICAgIEZUX05FWFRfTE9ORworI2RlZmluZSBUVF9ORVhUX1VMT05HICAgRlRfTkVYVF9VTE9ORworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXBfaW5pdCggVFRfQ01hcCAgIGNtYXAsCisgICAgICAgICAgICAgICAgRlRfQnl0ZSogIHRhYmxlICkKKyAgeworICAgIGNtYXAtPmRhdGEgPSB0YWJsZTsKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVQgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgICAgVFlQRSAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICAgIG11c3QgYmUgMCAgICAgICAgICAgICAgICAgICovCisgIC8qICAgbGVuZ3RoICAgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgICB0YWJsZSBsZW5ndGggaW4gYnl0ZXMgICAgICAqLworICAvKiAgIGxhbmd1YWdlICAgIDQgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUgICAgICAgICAgKi8KKyAgLyogICBnbHlwaF9pZHMgICA2ICAgICAgICAgICAgICBCWVRFWzI1Nl0gICAgIGFycmF5IG9mIGdseXBoIGluZGljZXMgICAgICovCisgIC8qICAgICAgICAgICAgICAgMjYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8wCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXAwX3ZhbGlkYXRlKCBGVF9CeXRlKiAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlKiAgcDsKKyAgICBGVF9VSW50ICAgbGVuZ3RoOworCisKKyAgICBpZiAoIHRhYmxlICsgMiArIDIgPiB2YWxpZC0+bGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBwICAgICAgPSB0YWJsZSArIDI7ICAgICAgICAgICAvKiBza2lwIGZvcm1hdCAqLworICAgIGxlbmd0aCA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBpZiAoIHRhYmxlICsgbGVuZ3RoID4gdmFsaWQtPmxpbWl0IHx8IGxlbmd0aCA8IDI2MiApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIGNoZWNrIGdseXBoIGluZGljZXMgd2hlbmV2ZXIgbmVjZXNzYXJ5ICovCisgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfVElHSFQgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIG4sIGlkeDsKKworCisgICAgICBwID0gdGFibGUgKyA2OworICAgICAgZm9yICggbiA9IDA7IG4gPCAyNTY7IG4rKyApCisgICAgICB7CisgICAgICAgIGlkeCA9ICpwKys7CisgICAgICAgIGlmICggaWR4ID49IFRUX1ZBTElEX0dMWVBIX0NPVU5UKCB2YWxpZCApICkKKyAgICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHR0X2NtYXAwX2NoYXJfaW5kZXgoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogIHRhYmxlID0gY21hcC0+ZGF0YTsKKworCisgICAgcmV0dXJuIGNoYXJfY29kZSA8IDI1NiA/IHRhYmxlWzYgKyBjaGFyX2NvZGVdIDogMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0dF9jbWFwMF9jaGFyX25leHQoIFRUX0NNYXAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAqcGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9CeXRlKiAgIHRhYmxlICAgID0gY21hcC0+ZGF0YTsKKyAgICBGVF9VSW50MzIgIGNoYXJjb2RlID0gKnBjaGFyX2NvZGU7CisgICAgRlRfVUludDMyICByZXN1bHQgICA9IDA7CisgICAgRlRfVUludCAgICBnaW5kZXggICA9IDA7CisKKworICAgIHRhYmxlICs9IDY7ICAvKiBnbyB0byBnbHlwaCBJRHMgKi8KKyAgICB3aGlsZSAoICsrY2hhcmNvZGUgPCAyNTYgKQorICAgIHsKKyAgICAgIGdpbmRleCA9IHRhYmxlW2NoYXJjb2RlXTsKKyAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBjaGFyY29kZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgKnBjaGFyX2NvZGUgPSByZXN1bHQ7CisgICAgcmV0dXJuIGdpbmRleDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXAwX2dldF9pbmZvKCBUVF9DTWFwICAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IGNtYXAtPmRhdGEgKyA0OworCisKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gMDsKKyAgICBjbWFwX2luZm8tPmxhbmd1YWdlID0gKEZUX1VMb25nKVRUX1BFRUtfVVNIT1JUKCBwICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9ERUZJTkVfVFRfQ01BUCgKKyAgICB0dF9jbWFwMF9jbGFzc19yZWMsCisgICAgc2l6ZW9mICggVFRfQ01hcFJlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICB0dF9jbWFwX2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICBOVUxMLAorICAgIChGVF9DTWFwX0NoYXJJbmRleEZ1bmMpdHRfY21hcDBfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHR0X2NtYXAwX2NoYXJfbmV4dCwKKworICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKworICAgIDAsCisgICAgKFRUX0NNYXBfVmFsaWRhdGVGdW5jKXR0X2NtYXAwX3ZhbGlkYXRlLAorICAgIChUVF9DTWFwX0luZm9fR2V0RnVuYyl0dF9jbWFwMF9nZXRfaW5mbyApCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogVGhpcyBpcyB1c2VkIGZvciBjZXJ0YWluIENKSyBlbmNvZGluZ3MgdGhhdCBlbmNvZGUgdGV4dCBpbiBhICAqKioqKi8KKyAgLyoqKioqIG1peGVkIDgvMTYgYml0cyBlbmNvZGluZyBhbG9uZyB0aGUgZm9sbG93aW5nIGxpbmVzOiAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogKiBDZXJ0YWluIGJ5dGUgdmFsdWVzIGNvcnJlc3BvbmQgdG8gYW4gOC1iaXQgY2hhcmFjdGVyIGNvZGUgICAqKioqKi8KKyAgLyoqKioqICAgKHR5cGljYWxseSBpbiB0aGUgcmFuZ2UgMC4uMTI3IGZvciBBU0NJSSBjb21wYXRpYmlsaXR5KS4gICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogKiBDZXJ0YWluIGJ5dGUgdmFsdWVzIHNpZ25hbCB0aGUgZmlyc3QgYnl0ZSBvZiBhIDItYnl0ZSAgICAgICAqKioqKi8KKyAgLyoqKioqICAgY2hhcmFjdGVyIGNvZGUgKGJ1dCB0aGVzZSB2YWx1ZXMgYXJlIGFsc28gdmFsaWQgYXMgdGhlICAgICAgKioqKiovCisgIC8qKioqKiAgIHNlY29uZCBieXRlIG9mIGEgMi1ieXRlIGNoYXJhY3RlcikuICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIFRoZSBmb2xsb3dpbmcgY2hhcm1hcCBsb29rdXAgYW5kIGl0ZXJhdGlvbiBmdW5jdGlvbnMgYWxsICAgICAgKioqKiovCisgIC8qKioqKiBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgImNoYXJjb2RlIiBjb3JyZXNwb25kIHRvIGZvbGxvd2luZzogICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgLSBGb3Igb25lIGJ5dGUgY2hhcmFjdGVycywgImNoYXJjb2RlIiBpcyBzaW1wbHkgdGhlICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgLSBGb3IgdHdvIGJ5dGUgY2hhcmFjdGVycywgImNoYXJjb2RlIiBpcyB0aGUgMi1ieXRlICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgY2hhcmFjdGVyIGNvZGUgaW4gYmlnIGVuZGlhbiBmb3JtYXQuICBNb3JlIGV4YWN0bHk6ICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgIChjaGFyY29kZSA+PiA4KSAgICBpcyB0aGUgZmlyc3QgYnl0ZSB2YWx1ZSAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAoY2hhcmNvZGUgJiAweEZGKSAgaXMgdGhlIHNlY29uZCBieXRlIHZhbHVlICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIE5vdGUgdGhhdCBub3QgYWxsIHZhbHVlcyBvZiAiY2hhcmNvZGUiIGFyZSB2YWxpZCBhY2NvcmRpbmcgICAgKioqKiovCisgIC8qKioqKiB0byB0aGVzZSBydWxlcywgYW5kIHRoZSBmdW5jdGlvbiBtb2RlcmF0ZWx5IGNoZWNrIHRoZSAgICAgICAgICoqKioqLworICAvKioqKiogYXJndW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgICAgVFlQRSAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgbXVzdCBiZSAyICAgICAgICAgICAgICAgICovCisgIC8qICAgbGVuZ3RoICAgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcyAgICAqLworICAvKiAgIGxhbmd1YWdlICAgIDQgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICAgKi8KKyAgLyogICBrZXlzICAgICAgICA2ICAgICAgICAgICAgICBVU0hPUlRbMjU2XSAgICAgc3ViLWhlYWRlciBrZXlzICAgICAgICAgICovCisgIC8qICAgc3VicyAgICAgICAgNTE4ICAgICAgICAgICAgU1VCSEVBRFtOU1VCU10gIHN1Yi1oZWFkZXJzIGFycmF5ICAgICAgICAqLworICAvKiAgIGdseXBoX2lkcyAgIDUxOCtOU1VCKjggICAgIFVTSE9SVFtdICAgICAgICBnbHlwaCBJRCBhcnJheSAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBga2V5cycgdGFibGUgaXMgdXNlZCB0byBtYXAgY2hhcmNvZGUgaGlnaC1ieXRlcyB0byBzdWItaGVhZGVycy4gICAqLworICAvKiBUaGUgdmFsdWUgb2YgYE5TVUJTJyBpcyB0aGUgbnVtYmVyIG9mIHN1Yi1oZWFkZXJzIGRlZmluZWQgaW4gdGhlICAgICAgKi8KKyAgLyogdGFibGUgYW5kIGlzIGNvbXB1dGVkIGJ5IGZpbmRpbmcgdGhlIG1heGltdW0gb2YgdGhlIGBrZXlzJyB0YWJsZS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlIHRoYXQgZm9yIGFueSBuLCBga2V5c1tuXScgaXMgYSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIGBzdWJzJyAgICAgKi8KKyAgLyogdGFibGUsIGkuZS4sIGl0IGlzIHRoZSBjb3JyZXNwb25kaW5nIHN1Yi1oZWFkZXIgaW5kZXggbXVsdGlwbGllZCAgICAgICovCisgIC8qIGJ5IDguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRWFjaCBzdWItaGVhZGVyIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgIFRZUEUgICAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZmlyc3QgICAgICAgMCAgICAgICAgICAgVVNIT1JUICAgICAgICAgIGZpcnN0IHZhbGlkIGxvdy1ieXRlICAgICAgICAqLworICAvKiAgIGNvdW50ICAgICAgIDIgICAgICAgICAgIFVTSE9SVCAgICAgICAgICBudW1iZXIgb2YgdmFsaWQgbG93LWJ5dGVzICAgKi8KKyAgLyogICBkZWx0YSAgICAgICA0ICAgICAgICAgICBTSE9SVCAgICAgICAgICAgc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgb2Zmc2V0ICAgICAgNiAgICAgICAgICAgVVNIT1JUICAgICAgICAgIHNlZSBiZWxvdyAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSBzdWItaGVhZGVyIGRlZmluZXMsIGZvciBlYWNoIGhpZ2gtYnl0ZSwgdGhlIHJhbmdlIG9mIHZhbGlkICAgICAgICAgICovCisgIC8qIGxvdy1ieXRlcyB3aXRoaW4gdGhlIGNoYXJtYXAuICBOb3RlIHRoYXQgdGhlIHJhbmdlIGRlZmluZWQgYnkgYGZpcnN0JyAqLworICAvKiBhbmQgYGNvdW50JyBtdXN0IGJlIGNvbXBsZXRlbHkgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsIFswLi4yNTVdICAgICAgKi8KKyAgLyogYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiBhIGNoYXJhY3RlciBjb2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBnaXZlbiBzdWItaGVhZGVyLCB0aGVuICAgICAgKi8KKyAgLyogbWFwcGluZyBpdCB0byBhIGdseXBoIGluZGV4IGlzIGRvbmUgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAqIFRoZSB2YWx1ZSBvZiBgb2Zmc2V0JyBpcyByZWFkLiAgVGhpcyBpcyBhIF9ieXRlXyBkaXN0YW5jZSBmcm9tIHRoZSAgKi8KKyAgLyogICBsb2NhdGlvbiBvZiB0aGUgYG9mZnNldCcgZmllbGQgaXRzZWxmIGludG8gYSBzbGljZSBvZiB0aGUgICAgICAgICAgICovCisgIC8qICAgYGdseXBoX2lkcycgdGFibGUuICBMZXQncyBjYWxsIGl0IGBzbGljZScgKGl0IGlzIGEgVVNIT1JUW10gdG9vKS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogKiBUaGUgdmFsdWUgYHNsaWNlW2NoYXIubG8gLSBmaXJzdF0nIGlzIHJlYWQuICBJZiBpdCBpcyAwLCB0aGVyZSBpcyAgICovCisgIC8qICAgbm8gZ2x5cGggZm9yIHRoZSBjaGFyY29kZS4gIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIGBkZWx0YScgaXMgICAgICAqLworICAvKiAgIGFkZGVkIHRvIGl0IChtb2R1bG8gNjU1MzYpIHRvIGZvcm0gYSBuZXcgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEl0IGlzIHVwIHRvIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgdG8gY2hlY2sgdGhhdCBhbGwgb2Zmc2V0cyBmYWxsICAgICAqLworICAvKiB3aXRoaW4gdGhlIGdseXBoIElEcyB0YWJsZSAoYW5kIG5vdCB3aXRoaW4gdGhlIGBzdWJzJyB0YWJsZSBpdHNlbGYgb3IgKi8KKyAgLyogb3V0c2lkZSBvZiB0aGUgQ01hcCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzIKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgdHRfY21hcDJfdmFsaWRhdGUoIEZUX0J5dGUqICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VJbnQgICBsZW5ndGg7CisKKyAgICBGVF9VSW50ICAgbiwgbWF4X3N1YnM7CisgICAgRlRfQnl0ZSogIGtleXM7ICAgICAgICAvKiBrZXlzIHRhYmxlICAgICAqLworICAgIEZUX0J5dGUqICBzdWJzOyAgICAgICAgLyogc3ViLWhlYWRlcnMgICAgKi8KKyAgICBGVF9CeXRlKiAgZ2x5cGhfaWRzOyAgIC8qIGdseXBoIElEIGFycmF5ICovCisKKworICAgIGlmICggdGFibGUgKyAyICsgMiA+IHZhbGlkLT5saW1pdCApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIHAgICAgICA9IHRhYmxlICsgMjsgICAgICAgICAgIC8qIHNraXAgZm9ybWF0ICovCisgICAgbGVuZ3RoID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGlmICggdGFibGUgKyBsZW5ndGggPiB2YWxpZC0+bGltaXQgfHwgbGVuZ3RoIDwgNiArIDUxMiApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIGtleXMgPSB0YWJsZSArIDY7CisKKyAgICAvKiBwYXJzZSBrZXlzIHRvIGNvbXB1dGUgc3ViLWhlYWRlcnMgY291bnQgKi8KKyAgICBwICAgICAgICA9IGtleXM7CisgICAgbWF4X3N1YnMgPSAwOworICAgIGZvciAoIG4gPSAwOyBuIDwgMjU2OyBuKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIGlkeCA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisKKworICAgICAgLyogdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiA4ICovCisgICAgICBpZiAoIHZhbGlkLT5sZXZlbCA+PSBGVF9WQUxJREFURV9QQVJBTk9JRCAmJiAoIGlkeCAmIDcgKSAhPSAwICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICBpZHggPj49IDM7CisKKyAgICAgIGlmICggaWR4ID4gbWF4X3N1YnMgKQorICAgICAgICBtYXhfc3VicyA9IGlkeDsKKyAgICB9CisKKyAgICBGVF9BU1NFUlQoIHAgPT0gdGFibGUgKyA1MTggKTsKKworICAgIHN1YnMgICAgICA9IHA7CisgICAgZ2x5cGhfaWRzID0gc3VicyArIChtYXhfc3VicyArIDEpICogODsKKyAgICBpZiAoIGdseXBoX2lkcyA+IHZhbGlkLT5saW1pdCApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIHBhcnNlIHN1Yi1oZWFkZXJzICovCisgICAgZm9yICggbiA9IDA7IG4gPD0gbWF4X3N1YnM7IG4rKyApCisgICAgeworICAgICAgRlRfVUludCAgZmlyc3RfY29kZSwgY29kZV9jb3VudCwgb2Zmc2V0OworICAgICAgRlRfSW50ICAgZGVsdGE7CisKKworICAgICAgZmlyc3RfY29kZSA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBjb2RlX2NvdW50ID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGRlbHRhICAgICAgPSBUVF9ORVhUX1NIT1JUKCBwICk7CisgICAgICBvZmZzZXQgICAgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgLyogbWFueSBEeW5hbGFiIGZvbnRzIGhhdmUgZW1wdHkgc3ViLWhlYWRlcnMgKi8KKyAgICAgIGlmICggY29kZV9jb3VudCA9PSAwICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIGNoZWNrIHJhbmdlIHdpdGhpbiAwLi4yNTUgKi8KKyAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1BBUkFOT0lEICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBmaXJzdF9jb2RlID49IDI1NiB8fCBmaXJzdF9jb2RlICsgY29kZV9jb3VudCA+IDI1NiApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgfQorCisgICAgICAvKiBjaGVjayBvZmZzZXQgKi8KKyAgICAgIGlmICggb2Zmc2V0ICE9IDAgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgaWRzOworCisKKyAgICAgICAgaWRzID0gcCAtIDIgKyBvZmZzZXQ7CisgICAgICAgIGlmICggaWRzIDwgZ2x5cGhfaWRzIHx8IGlkcyArIGNvZGVfY291bnQgKiAyID4gdGFibGUgKyBsZW5ndGggKQorICAgICAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOworCisgICAgICAgIC8qIGNoZWNrIGdseXBoIElEcyAqLworICAgICAgICBpZiAoIHZhbGlkLT5sZXZlbCA+PSBGVF9WQUxJREFURV9USUdIVCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlKiAgbGltaXQgPSBwICsgY29kZV9jb3VudCAqIDI7CisgICAgICAgICAgRlRfVUludCAgIGlkeDsKKworCisgICAgICAgICAgZm9yICggOyBwIDwgbGltaXQ7ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZHggPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgICAgaWYgKCBpZHggIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlkeCA9IChGVF9VSW50KSggKEZUX0ludClpZHggKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICAgICAgaWYgKCBpZHggPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgKQorICAgICAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogcmV0dXJuIHN1YiBoZWFkZXIgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGNoYXJhY3RlciBjb2RlICovCisgIC8qIE5VTEwgb24gaW52YWxpZCBjaGFyY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfQnl0ZSoKKyAgdHRfY21hcDJfZ2V0X3N1YmhlYWRlciggRlRfQnl0ZSogICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogIHJlc3VsdCA9IE5VTEw7CisKKworICAgIGlmICggY2hhcl9jb2RlIDwgMHgxMDAwMFVMICkKKyAgICB7CisgICAgICBGVF9VSW50ICAgY2hhcl9sbyA9IChGVF9VSW50KSggY2hhcl9jb2RlICYgMHhGRiApOworICAgICAgRlRfVUludCAgIGNoYXJfaGkgPSAoRlRfVUludCkoIGNoYXJfY29kZSA+PiA4ICk7CisgICAgICBGVF9CeXRlKiAgcCAgICAgICA9IHRhYmxlICsgNjsgICAgLyoga2V5cyB0YWJsZSAqLworICAgICAgRlRfQnl0ZSogIHN1YnMgICAgPSB0YWJsZSArIDUxODsgIC8qIHN1YmhlYWRlcnMgdGFibGUgKi8KKyAgICAgIEZUX0J5dGUqICBzdWI7CisKKworICAgICAgaWYgKCBjaGFyX2hpID09IDAgKQorICAgICAgeworICAgICAgICAvKiBhbiA4LWJpdCBjaGFyYWN0ZXIgY29kZSAtLSB3ZSB1c2Ugc3ViSGVhZGVyIDAgaW4gdGhpcyBjYXNlICovCisgICAgICAgIC8qIHRvIHRlc3Qgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgaXMgaW4gdGhlIGNoYXJtYXAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzdWIgPSBzdWJzOyAgLyoganVtcCB0byBmaXJzdCBzdWItaGVhZGVyICovCisKKyAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgc3ViLWhlYWRlciBmb3IgdGhpcyBieXRlIGlzIDAsIHdoaWNoICovCisgICAgICAgIC8qIGluZGljYXRlcyB0aGF0IGl0IGlzIHJlYWxseSBhIHZhbGlkIG9uZS1ieXRlIHZhbHVlICAqLworICAgICAgICAvKiBPdGhlcndpc2UsIHJldHVybiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHAgKz0gY2hhcl9sbyAqIDI7CisgICAgICAgIGlmICggVFRfUEVFS19VU0hPUlQoIHAgKSAhPSAwICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIGEgMTYtYml0IGNoYXJhY3RlciBjb2RlICovCisKKyAgICAgICAgLyoganVtcCB0byBrZXkgZW50cnkgICovCisgICAgICAgIHAgICs9IGNoYXJfaGkgKiAyOworICAgICAgICAvKiBqdW1wIHRvIHN1Yi1oZWFkZXIgKi8KKyAgICAgICAgc3ViID0gc3VicyArICggRlRfUEFEX0ZMT09SKCBUVF9QRUVLX1VTSE9SVCggcCApLCA4ICkgKTsKKworICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBoaWdoIGJ5dGUgaXNuJ3QgYSB2YWxpZCBvbmUtYnl0ZSB2YWx1ZSAqLworICAgICAgICBpZiAoIHN1YiA9PSBzdWJzICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICByZXN1bHQgPSBzdWI7CisgICAgfQorICBFeGl0OgorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHR0X2NtYXAyX2NoYXJfaW5kZXgoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogIHRhYmxlICAgPSBjbWFwLT5kYXRhOworICAgIEZUX1VJbnQgICByZXN1bHQgID0gMDsKKyAgICBGVF9CeXRlKiAgc3ViaGVhZGVyOworCisKKyAgICBzdWJoZWFkZXIgPSB0dF9jbWFwMl9nZXRfc3ViaGVhZGVyKCB0YWJsZSwgY2hhcl9jb2RlICk7CisgICAgaWYgKCBzdWJoZWFkZXIgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBwICAgPSBzdWJoZWFkZXI7CisgICAgICBGVF9VSW50ICAgaWR4ID0gKEZUX1VJbnQpKGNoYXJfY29kZSAmIDB4RkYpOworICAgICAgRlRfVUludCAgIHN0YXJ0LCBjb3VudDsKKyAgICAgIEZUX0ludCAgICBkZWx0YTsKKyAgICAgIEZUX1VJbnQgICBvZmZzZXQ7CisKKworICAgICAgc3RhcnQgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGNvdW50ICA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBkZWx0YSAgPSBUVF9ORVhUX1NIT1JUICggcCApOworICAgICAgb2Zmc2V0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgaWR4IC09IHN0YXJ0OworICAgICAgaWYgKCBpZHggPCBjb3VudCAmJiBvZmZzZXQgIT0gMCApCisgICAgICB7CisgICAgICAgIHAgICs9IG9mZnNldCArIDIgKiBpZHg7CisgICAgICAgIGlkeCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisKKyAgICAgICAgaWYgKCBpZHggIT0gMCApCisgICAgICAgICAgcmVzdWx0ID0gKEZUX1VJbnQpKCAoRlRfSW50KWlkeCArIGRlbHRhICkgJiAweEZGRkZVOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHR0X2NtYXAyX2NoYXJfbmV4dCggVFRfQ01hcCAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcmNvZGUgKQorICB7CisgICAgRlRfQnl0ZSogICB0YWJsZSAgICA9IGNtYXAtPmRhdGE7CisgICAgRlRfVUludCAgICBnaW5kZXggICA9IDA7CisgICAgRlRfVUludDMyICByZXN1bHQgICA9IDA7CisgICAgRlRfVUludDMyICBjaGFyY29kZSA9ICpwY2hhcmNvZGUgKyAxOworICAgIEZUX0J5dGUqICAgc3ViaGVhZGVyOworCisKKyAgICB3aGlsZSAoIGNoYXJjb2RlIDwgMHgxMDAwMFVMICkKKyAgICB7CisgICAgICBzdWJoZWFkZXIgPSB0dF9jbWFwMl9nZXRfc3ViaGVhZGVyKCB0YWJsZSwgY2hhcmNvZGUgKTsKKyAgICAgIGlmICggc3ViaGVhZGVyICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIHAgICAgICAgPSBzdWJoZWFkZXI7CisgICAgICAgIEZUX1VJbnQgICBzdGFydCAgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgRlRfVUludCAgIGNvdW50ICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBGVF9JbnQgICAgZGVsdGEgICA9IFRUX05FWFRfU0hPUlQgKCBwICk7CisgICAgICAgIEZUX1VJbnQgICBvZmZzZXQgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgRlRfVUludCAgIGNoYXJfbG8gPSAoRlRfVUludCkoIGNoYXJjb2RlICYgMHhGRiApOworICAgICAgICBGVF9VSW50ICAgcG9zLCBpZHg7CisKKworICAgICAgICBpZiAoIG9mZnNldCA9PSAwICkKKyAgICAgICAgICBnb3RvIE5leHRfU3ViSGVhZGVyOworCisgICAgICAgIGlmICggY2hhcl9sbyA8IHN0YXJ0ICkKKyAgICAgICAgeworICAgICAgICAgIGNoYXJfbG8gPSBzdGFydDsKKyAgICAgICAgICBwb3MgICAgID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcG9zID0gKEZUX1VJbnQpKCBjaGFyX2xvIC0gc3RhcnQgKTsKKworICAgICAgICBwICAgICAgICs9IG9mZnNldCArIHBvcyAqIDI7CisgICAgICAgIGNoYXJjb2RlID0gRlRfUEFEX0ZMT09SKCBjaGFyY29kZSwgMjU2ICkgKyBjaGFyX2xvOworCisgICAgICAgIGZvciAoIDsgcG9zIDwgY291bnQ7IHBvcysrLCBjaGFyY29kZSsrICkKKyAgICAgICAgeworICAgICAgICAgIGlkeCA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgICBpZiAoIGlkeCAhPSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpaWR4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gY2hhcmNvZGU7CisgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyoganVtcCB0byBuZXh0IHN1Yi1oZWFkZXIsIGkuZS4gaGlnaGVyIGJ5dGUgdmFsdWUgKi8KKyAgICBOZXh0X1N1YkhlYWRlcjoKKyAgICAgIGNoYXJjb2RlID0gRlRfUEFEX0ZMT09SKCBjaGFyY29kZSwgMjU2ICkgKyAyNTY7CisgICAgfQorCisgIEV4aXQ6CisgICAgKnBjaGFyY29kZSA9IHJlc3VsdDsKKworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMl9nZXRfaW5mbyggVFRfQ01hcCAgICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgVFRfQ01hcEluZm8gICpjbWFwX2luZm8gKQorICB7CisgICAgRlRfQnl0ZSogIHAgPSBjbWFwLT5kYXRhICsgNDsKKworCisgICAgY21hcF9pbmZvLT5mb3JtYXQgICA9IDI7CisgICAgY21hcF9pbmZvLT5sYW5ndWFnZSA9IChGVF9VTG9uZylUVF9QRUVLX1VTSE9SVCggcCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfREVGSU5FX1RUX0NNQVAoCisgICAgdHRfY21hcDJfY2xhc3NfcmVjLAorICAgIHNpemVvZiAoIFRUX0NNYXBSZWMgKSwKKworICAgIChGVF9DTWFwX0luaXRGdW5jKSAgICAgdHRfY21hcF9pbml0LAorICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgTlVMTCwKKyAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKXR0X2NtYXAyX2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSB0dF9jbWFwMl9jaGFyX25leHQsCisKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisKKyAgICAyLAorICAgIChUVF9DTWFwX1ZhbGlkYXRlRnVuYyl0dF9jbWFwMl92YWxpZGF0ZSwKKyAgICAoVFRfQ01hcF9JbmZvX0dldEZ1bmMpdHRfY21hcDJfZ2V0X2luZm8gKQorCisjZW5kaWYgLyogVFRfQ09ORklHX0NNQVBfRk9STUFUXzIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVCA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVEFCTEUgT1ZFUlZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBOQU1FICAgICAgICAgIE9GRlNFVCAgICAgICAgIFRZUEUgICAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGZvcm1hdCAgICAgICAgMCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgbXVzdCBiZSA0ICAgICAgICAgICAgKi8KKyAgLyogICBsZW5ndGggICAgICAgIDIgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIHRhYmxlIGxlbmd0aCAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBieXRlcyAgICAgICAgICAgICAqLworICAvKiAgIGxhbmd1YWdlICAgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgc2VnQ291bnRYMiAgICA2ICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgICAyKk5VTV9TRUdTICAgICAgICAgICAqLworICAvKiAgIHNlYXJjaFJhbmdlICAgOCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgMiooMSA8PCBMT0dfU0VHUykgICAgKi8KKyAgLyogICBlbnRyeVNlbGVjdG9yIDEwICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIExPR19TRUdTICAgICAgICAgICAgICovCisgIC8qICAgcmFuZ2VTaGlmdCAgICAxMiAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgICBzZWdDb3VudFgyIC0gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZW5kQ291bnQgICAgICAxNCAgICAgICAgICAgICBVU0hPUlRbTlVNX1NFR1NdICBlbmQgY2hhcmNvZGUgZm9yICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBzZWdtZW50OyBsYXN0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIDB4RkZGRiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHBhZCAgICAgICAgICAgMTQrTlVNX1NFR1MqMiAgVVNIT1JUICAgICAgICAgICAgcGFkZGluZyAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgc3RhcnRDb3VudCAgICAxNitOVU1fU0VHUyoyICBVU0hPUlRbTlVNX1NFR1NdICBmaXJzdCBjaGFyY29kZSBmb3IgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBzZWdtZW50ICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgaWREZWx0YSAgICAgICAxNitOVU1fU0VHUyo0ICBTSE9SVFtOVU1fU0VHU10gICBkZWx0YSBmb3IgZWFjaCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCAgICAgICAgICAgICAgKi8KKyAgLyogICBpZE9mZnNldCAgICAgIDE2K05VTV9TRUdTKjYgIFNIT1JUW05VTV9TRUdTXSAgIHJhbmdlIG9mZnNldCBmb3IgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHNlZ21lbnQ7IGNhbiBiZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZ2x5cGhJZHMgICAgICAxNitOVU1fU0VHUyo4ICBVU0hPUlRbXSAgICAgICAgICBhcnJheSBvZiBnbHlwaCBJRCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENoYXJhY3RlciBjb2RlcyBhcmUgbW9kZWxsZWQgYnkgYSBzZXJpZXMgb2Ygb3JkZXJlZCAoaW5jcmVhc2luZykgICAgICAqLworICAvKiBpbnRlcnZhbHMgY2FsbGVkIHNlZ21lbnRzLiAgRWFjaCBzZWdtZW50IGhhcyBzdGFydCBhbmQgZW5kIGNvZGVzLCAgICAgKi8KKyAgLyogcHJvdmlkZWQgYnkgdGhlIGBzdGFydENvdW50JyBhbmQgYGVuZENvdW50JyBhcnJheXMuICBTZWdtZW50cyBtdXN0ICAgICovCisgIC8qIG5vdCBvdmVybGFwLCBhbmQgdGhlIGxhc3Qgc2VnbWVudCBzaG91bGQgYWx3YXlzIGNvbnRhaW4gdGhlIHZhbHVlICAgICAqLworICAvKiAweEZGRkYgZm9yIGBlbmRDb3VudCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBmaWVsZHMgYHNlYXJjaFJhbmdlJywgYGVudHJ5U2VsZWN0b3InIGFuZCBgcmFuZ2VTaGlmdCcgYXJlIGJldHRlciAqLworICAvKiBpZ25vcmVkICh0aGV5IGFyZSB0cmFjZXMgb2Ygb3Zlci1lbmdpbmVlcmluZyBpbiB0aGUgVHJ1ZVR5cGUgICAgICAgICAgKi8KKyAgLyogc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFYWNoIHNlZ21lbnQgYWxzbyBoYXMgYSBzaWduZWQgYGRlbHRhJywgYXMgd2VsbCBhcyBhbiBvcHRpb25hbCBvZmZzZXQgKi8KKyAgLyogd2l0aGluIHRoZSBgZ2x5cGhJZHMnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJZiBhIHNlZ21lbnQncyBpZE9mZnNldCBpcyAwLCB0aGUgZ2x5cGggaW5kZXggY29ycmVzcG9uZGluZyB0byBhbnkgICAgKi8KKyAgLyogY2hhcmNvZGUgd2l0aGluIHRoZSBzZWdtZW50IGlzIG9idGFpbmVkIGJ5IGFkZGluZyB0aGUgdmFsdWUgb2YgICAgICAgICovCisgIC8qIGBpZERlbHRhJyBkaXJlY3RseSB0byB0aGUgY2hhcmNvZGUsIG1vZHVsbyA2NTUzNi4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3RoZXJ3aXNlLCBhIGdseXBoIGluZGV4IGlzIHRha2VuIGZyb20gdGhlIGdseXBoIElEcyBzdWItYXJyYXkgZm9yICAgICovCisgIC8qIHRoZSBzZWdtZW50LCBhbmQgdGhlIHZhbHVlIG9mIGBpZERlbHRhJyBpcyBhZGRlZCB0byBpdC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZpbmFsbHksIG5vdGUgdGhhdCBhIGxvdCBvZiBmb250cyBjb250YWluIGFuIGludmFsaWQgbGFzdCBzZWdtZW50LCAgICAqLworICAvKiB3aGVyZSBgc3RhcnQnIGFuZCBgZW5kJyBhcmUgY29ycmVjdGx5IHNldCB0byAweEZGRkYgYnV0IGJvdGggYGRlbHRhJyAgKi8KKyAgLyogYW5kIGBvZmZzZXQnIGFyZSBpbmNvcnJlY3QgKGUuZy4sIGBvcGVuc19fXy50dGYnIHdoaWNoIGNvbWVzIHdpdGggICAgICovCisgIC8qIE9wZW5PZmZpY2Uub3JnKS4gIFdlIG5lZWQgc3BlY2lhbCBjb2RlIHRvIGRlYWwgd2l0aCB0aGVtIGNvcnJlY3RseS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF80CisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0NNYXA0UmVjXworICB7CisgICAgVFRfQ01hcFJlYyAgY21hcDsKKyAgICBGVF9VSW50MzIgICBjdXJfY2hhcmNvZGU7ICAgLyogY3VycmVudCBjaGFyY29kZSAqLworICAgIEZUX1VJbnQgICAgIGN1cl9naW5kZXg7ICAgICAvKiBjdXJyZW50IGdseXBoIGluZGV4ICovCisKKyAgICBGVF9VSW50ICAgICBudW1fcmFuZ2VzOworICAgIEZUX1VJbnQgICAgIGN1cl9yYW5nZTsKKyAgICBGVF9VSW50ICAgICBjdXJfc3RhcnQ7CisgICAgRlRfVUludCAgICAgY3VyX2VuZDsKKyAgICBGVF9JbnQgICAgICBjdXJfZGVsdGE7CisgICAgRlRfQnl0ZSogICAgY3VyX3ZhbHVlczsKKworICB9IFRUX0NNYXA0UmVjLCAqVFRfQ01hcDQ7CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgdHRfY21hcDRfaW5pdCggVFRfQ01hcDQgIGNtYXAsCisgICAgICAgICAgICAgICAgIEZUX0J5dGUqICB0YWJsZSApCisgIHsKKyAgICBGVF9CeXRlKiAgcDsKKworCisgICAgY21hcC0+Y21hcC5kYXRhICAgID0gdGFibGU7CisKKyAgICBwICAgICAgICAgICAgICAgICAgPSB0YWJsZSArIDY7CisgICAgY21hcC0+bnVtX3JhbmdlcyAgID0gRlRfUEVFS19VU0hPUlQoIHAgKSA+PiAxOworICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IChGVF9VSW50MzIpMHhGRkZGRkZGRlVMOworICAgIGNtYXAtPmN1cl9naW5kZXggICA9IDA7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfSW50CisgIHR0X2NtYXA0X3NldF9yYW5nZSggVFRfQ01hcDQgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIHJhbmdlX2luZGV4ICkKKyAgeworICAgIEZUX0J5dGUqICB0YWJsZSA9IGNtYXAtPmNtYXAuZGF0YTsKKyAgICBGVF9CeXRlKiAgcDsKKyAgICBGVF9VSW50ICAgbnVtX3JhbmdlcyA9IGNtYXAtPm51bV9yYW5nZXM7CisKKworICAgIHdoaWxlICggcmFuZ2VfaW5kZXggPCBudW1fcmFuZ2VzICkKKyAgICB7CisgICAgICBGVF9VSW50ICBvZmZzZXQ7CisKKworICAgICAgcCAgICAgICAgICAgICA9IHRhYmxlICsgMTQgKyByYW5nZV9pbmRleCAqIDI7CisgICAgICBjbWFwLT5jdXJfZW5kID0gRlRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgcCAgICAgICAgICAgICAgKz0gMiArIG51bV9yYW5nZXMgKiAyOworICAgICAgY21hcC0+Y3VyX3N0YXJ0ID0gRlRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgcCAgICAgICAgICAgICAgKz0gbnVtX3JhbmdlcyAqIDI7CisgICAgICBjbWFwLT5jdXJfZGVsdGEgPSBGVF9QRUVLX1NIT1JUKCBwICk7CisKKyAgICAgIHAgICAgICs9IG51bV9yYW5nZXMgKiAyOworICAgICAgb2Zmc2V0ID0gRlRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCBsYXN0IHNlZ21lbnQ7ICovCisgICAgICAvKiB3ZSBoYXZlIHRvIGNhdGNoIGl0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggcmFuZ2VfaW5kZXggICAgID49IG51bV9yYW5nZXMgLSAxICYmCisgICAgICAgICAgIGNtYXAtPmN1cl9zdGFydCA9PSAweEZGRkZVICAgICAgICAmJgorICAgICAgICAgICBjbWFwLT5jdXJfZW5kICAgPT0gMHhGRkZGVSAgICAgICAgKQorICAgICAgeworICAgICAgICBUVF9GYWNlICAgZmFjZSAgPSAoVFRfRmFjZSljbWFwLT5jbWFwLmNtYXAuY2hhcm1hcC5mYWNlOworICAgICAgICBGVF9CeXRlKiAgbGltaXQgPSBmYWNlLT5jbWFwX3RhYmxlICsgZmFjZS0+Y21hcF9zaXplOworCisKKyAgICAgICAgaWYgKCBvZmZzZXQgJiYgcCArIG9mZnNldCArIDIgPiBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBjbWFwLT5jdXJfZGVsdGEgPSAxOworICAgICAgICAgIG9mZnNldCAgICAgICAgICA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBvZmZzZXQgIT0gMHhGRkZGVSApCisgICAgICB7CisgICAgICAgIGNtYXAtPmN1cl92YWx1ZXMgPSBvZmZzZXQgPyBwICsgb2Zmc2V0IDogTlVMTDsKKyAgICAgICAgY21hcC0+Y3VyX3JhbmdlICA9IHJhbmdlX2luZGV4OworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgLyogd2Ugc2tpcCBlbXB0eSBzZWdtZW50cyAqLworICAgICAgcmFuZ2VfaW5kZXgrKzsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7CisgIH0KKworCisgIC8qIHNlYXJjaCB0aGUgaW5kZXggb2YgdGhlIGNoYXJjb2RlIG5leHQgdG8gY21hcC0+Y3VyX2NoYXJjb2RlOyAqLworICAvKiBjYWxsZXIgc2hvdWxkIGNhbGwgdHRfY21hcDRfc2V0X3JhbmdlIHdpdGggcHJvcGVyIHJhbmdlICAgICAgKi8KKyAgLyogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICB0dF9jbWFwNF9uZXh0KCBUVF9DTWFwNCAgY21hcCApCisgIHsKKyAgICBGVF9VSW50ICBjaGFyY29kZTsKKworCisgICAgaWYgKCBjbWFwLT5jdXJfY2hhcmNvZGUgPj0gMHhGRkZGVUwgKQorICAgICAgZ290byBGYWlsOworCisgICAgY2hhcmNvZGUgPSAoRlRfVUludCljbWFwLT5jdXJfY2hhcmNvZGUgKyAxOworCisgICAgaWYgKCBjaGFyY29kZSA8IGNtYXAtPmN1cl9zdGFydCApCisgICAgICBjaGFyY29kZSA9IGNtYXAtPmN1cl9zdGFydDsKKworICAgIGZvciAoIDs7ICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgdmFsdWVzID0gY21hcC0+Y3VyX3ZhbHVlczsKKyAgICAgIEZUX1VJbnQgICBlbmQgICAgPSBjbWFwLT5jdXJfZW5kOworICAgICAgRlRfSW50ICAgIGRlbHRhICA9IGNtYXAtPmN1cl9kZWx0YTsKKworCisgICAgICBpZiAoIGNoYXJjb2RlIDw9IGVuZCApCisgICAgICB7CisgICAgICAgIGlmICggdmFsdWVzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0J5dGUqICBwID0gdmFsdWVzICsgMiAqICggY2hhcmNvZGUgLSBjbWFwLT5jdXJfc3RhcnQgKTsKKworCisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBnaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY21hcC0+Y3VyX2NoYXJjb2RlID0gY2hhcmNvZGU7CisgICAgICAgICAgICAgICAgY21hcC0+Y3VyX2dpbmRleCAgID0gZ2luZGV4OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gd2hpbGUgKCArK2NoYXJjb2RlIDw9IGVuZCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWNoYXJjb2RlICsgZGVsdGEgKSAmIDB4RkZGRlU7CisKKworICAgICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IGNoYXJjb2RlOworICAgICAgICAgICAgICBjbWFwLT5jdXJfZ2luZGV4ICAgPSBnaW5kZXg7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlICggKytjaGFyY29kZSA8PSBlbmQgKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciByYW5nZSAqLworICAgICAgaWYgKCB0dF9jbWFwNF9zZXRfcmFuZ2UoIGNtYXAsIGNtYXAtPmN1cl9yYW5nZSArIDEgKSA8IDAgKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBjaGFyY29kZSA8IGNtYXAtPmN1cl9zdGFydCApCisgICAgICAgIGNoYXJjb2RlID0gY21hcC0+Y3VyX3N0YXJ0OworICAgIH0KKworICBGYWlsOgorICAgIGNtYXAtPmN1cl9jaGFyY29kZSA9IChGVF9VSW50MzIpMHhGRkZGRkZGRlVMOworICAgIGNtYXAtPmN1cl9naW5kZXggICA9IDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwNF92YWxpZGF0ZSggRlRfQnl0ZSogICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKQorICB7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfVUludCAgIGxlbmd0aDsKKworICAgIEZUX0J5dGUgICAqZW5kcywgKnN0YXJ0cywgKm9mZnNldHMsICpkZWx0YXMsICpnbHlwaF9pZHM7CisgICAgRlRfVUludCAgIG51bV9zZWdzOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCB0YWJsZSArIDIgKyAyID4gdmFsaWQtPmxpbWl0ICkKKyAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgcCAgICAgID0gdGFibGUgKyAyOyAgICAgICAgICAgLyogc2tpcCBmb3JtYXQgKi8KKyAgICBsZW5ndGggPSBUVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgLyogaW4gY2VydGFpbiBmb250cywgdGhlIGBsZW5ndGgnIGZpZWxkIGlzIGludmFsaWQgYW5kIGdvZXMgKi8KKyAgICAvKiBvdXQgb2YgYm91bmQuICBXZSB0cnkgdG8gY29ycmVjdCB0aGlzIGhlcmUuLi4gICAgICAgICAgICAqLworICAgIGlmICggdGFibGUgKyBsZW5ndGggPiB2YWxpZC0+bGltaXQgKQorICAgIHsKKyAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICAgIGxlbmd0aCA9IChGVF9VSW50KSggdmFsaWQtPmxpbWl0IC0gdGFibGUgKTsKKyAgICB9CisKKyAgICBpZiAoIGxlbmd0aCA8IDE2ICkKKyAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgcCAgICAgICAgPSB0YWJsZSArIDY7CisgICAgbnVtX3NlZ3MgPSBUVF9ORVhUX1VTSE9SVCggcCApOyAgIC8qIHJlYWQgc2VnQ291bnRYMiAqLworCisgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfUEFSQU5PSUQgKQorICAgIHsKKyAgICAgIC8qIGNoZWNrIHRoYXQgd2UgaGF2ZSBhbiBldmVuIHZhbHVlIGhlcmUgKi8KKyAgICAgIGlmICggbnVtX3NlZ3MgJiAxICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgIH0KKworICAgIG51bV9zZWdzIC89IDI7CisKKyAgICBpZiAoIGxlbmd0aCA8IDE2ICsgbnVtX3NlZ3MgKiAyICogNCApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIGNoZWNrIHRoZSBzZWFyY2ggcGFyYW1ldGVycyAtIGV2ZW4gdGhvdWdoIHdlIG5ldmVyIHVzZSB0aGVtICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHZhbGlkLT5sZXZlbCA+PSBGVF9WQUxJREFURV9QQVJBTk9JRCApCisgICAgeworICAgICAgLyogY2hlY2sgdGhlIHZhbHVlcyBvZiBgc2VhcmNoUmFuZ2UnLCBgZW50cnlTZWxlY3RvcicsIGByYW5nZVNoaWZ0JyAqLworICAgICAgRlRfVUludCAgc2VhcmNoX3JhbmdlICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgZW50cnlfc2VsZWN0b3IgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgcmFuZ2Vfc2hpZnQgICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAgIGlmICggKCBzZWFyY2hfcmFuZ2UgfCByYW5nZV9zaGlmdCApICYgMSApICAvKiBtdXN0IGJlIGV2ZW4gdmFsdWVzICovCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgc2VhcmNoX3JhbmdlIC89IDI7CisgICAgICByYW5nZV9zaGlmdCAgLz0gMjsKKworICAgICAgLyogYHNlYXJjaCByYW5nZScgaXMgdGhlIGdyZWF0ZXN0IHBvd2VyIG9mIDIgdGhhdCBpcyA8PSBudW1fc2VncyAqLworCisgICAgICBpZiAoIHNlYXJjaF9yYW5nZSAgICAgICAgICAgICAgICA+IG51bV9zZWdzICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBzZWFyY2hfcmFuZ2UgKiAyICAgICAgICAgICAgPCBudW1fc2VncyAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgc2VhcmNoX3JhbmdlICsgcmFuZ2Vfc2hpZnQgIT0gbnVtX3NlZ3MgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIHNlYXJjaF9yYW5nZSAgICAgICAgICAgICAgICE9ICggMVUgPDwgZW50cnlfc2VsZWN0b3IgKSApCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICB9CisKKyAgICBlbmRzICAgICAgPSB0YWJsZSAgICsgMTQ7CisgICAgc3RhcnRzICAgID0gdGFibGUgICArIDE2ICsgbnVtX3NlZ3MgKiAyOworICAgIGRlbHRhcyAgICA9IHN0YXJ0cyAgKyBudW1fc2VncyAqIDI7CisgICAgb2Zmc2V0cyAgID0gZGVsdGFzICArIG51bV9zZWdzICogMjsKKyAgICBnbHlwaF9pZHMgPSBvZmZzZXRzICsgbnVtX3NlZ3MgKiAyOworCisgICAgLyogY2hlY2sgbGFzdCBzZWdtZW50OyBpdHMgZW5kIGNvdW50IHZhbHVlIG11c3QgYmUgMHhGRkZGICovCisgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfUEFSQU5PSUQgKQorICAgIHsKKyAgICAgIHAgPSBlbmRzICsgKCBudW1fc2VncyAtIDEgKSAqIDI7CisgICAgICBpZiAoIFRUX1BFRUtfVVNIT1JUKCBwICkgIT0gMHhGRkZGVSApCisgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICB9CisKKyAgICB7CisgICAgICBGVF9VSW50ICAgc3RhcnQsIGVuZCwgb2Zmc2V0LCBuOworICAgICAgRlRfVUludCAgIGxhc3Rfc3RhcnQgPSAwLCBsYXN0X2VuZCA9IDA7CisgICAgICBGVF9JbnQgICAgZGVsdGE7CisgICAgICBGVF9CeXRlKiAgcF9zdGFydCAgID0gc3RhcnRzOworICAgICAgRlRfQnl0ZSogIHBfZW5kICAgICA9IGVuZHM7CisgICAgICBGVF9CeXRlKiAgcF9kZWx0YSAgID0gZGVsdGFzOworICAgICAgRlRfQnl0ZSogIHBfb2Zmc2V0ICA9IG9mZnNldHM7CisKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fc2VnczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgcCAgICAgID0gcF9vZmZzZXQ7CisgICAgICAgIHN0YXJ0ICA9IFRUX05FWFRfVVNIT1JUKCBwX3N0YXJ0ICk7CisgICAgICAgIGVuZCAgICA9IFRUX05FWFRfVVNIT1JUKCBwX2VuZCApOworICAgICAgICBkZWx0YSAgPSBUVF9ORVhUX1NIT1JUKCBwX2RlbHRhICk7CisgICAgICAgIG9mZnNldCA9IFRUX05FWFRfVVNIT1JUKCBwX29mZnNldCApOworCisgICAgICAgIGlmICggc3RhcnQgPiBlbmQgKQorICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICAvKiB0aGlzIHRlc3Qgc2hvdWxkIGJlIHBlcmZvcm1lZCBhdCBkZWZhdWx0IHZhbGlkYXRpb24gbGV2ZWw7ICovCisgICAgICAgIC8qIHVuZm9ydHVuYXRlbHksIHNvbWUgcG9wdWxhciBBc2lhbiBmb250cyBoYXZlIG92ZXJsYXBwaW5nICAgKi8KKyAgICAgICAgLyogcmFuZ2VzIGluIHRoZWlyIGNoYXJtYXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggc3RhcnQgPD0gbGFzdF9lbmQgJiYgbiA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfVElHSFQgKQorICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBhbGxvdyBvdmVybGFwcGluZyBzZWdtZW50cywgcHJvdmlkZWQgdGhlaXIgc3RhcnQgcG9pbnRzICovCisgICAgICAgICAgICAvKiBhbmQgZW5kIHBvaW50cywgcmVzcGVjdGl2ZWx5LCBhcmUgaW4gYXNjZW5kaW5nIG9yZGVyICAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIGxhc3Rfc3RhcnQgPiBzdGFydCB8fCBsYXN0X2VuZCA+IGVuZCApCisgICAgICAgICAgICAgIGVycm9yIHw9IFRUX0NNQVBfRkxBR19VTlNPUlRFRDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZXJyb3IgfD0gVFRfQ01BUF9GTEFHX09WRVJMQVBQSU5HOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggb2Zmc2V0ICYmIG9mZnNldCAhPSAweEZGRkZVICkKKyAgICAgICAgeworICAgICAgICAgIHAgKz0gb2Zmc2V0OyAgLyogc3RhcnQgb2YgZ2x5cGggSUQgYXJyYXkgKi8KKworICAgICAgICAgIC8qIGNoZWNrIHRoYXQgd2UgcG9pbnQgd2l0aGluIHRoZSBnbHlwaCBJRHMgdGFibGUgb25seSAqLworICAgICAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHAgPCBnbHlwaF9pZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIHAgKyAoIGVuZCAtIHN0YXJ0ICsgMSApICogMiA+IHRhYmxlICsgbGVuZ3RoICkKKyAgICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBTb21lIGZvbnRzIGhhbmRsZSB0aGUgbGFzdCBzZWdtZW50IGluY29ycmVjdGx5LiAgSW4gKi8KKyAgICAgICAgICAvKiB0aGVvcnksIDB4RkZGRiBtaWdodCBwb2ludCB0byBhbiBvcmRpbmFyeSBnbHlwaCAtLSAgKi8KKyAgICAgICAgICAvKiBhIGNtYXAgNCBpcyB2ZXJzYXRpbGUgYW5kIGNvdWxkIGJlIHVzZWQgZm9yIGFueSAgICAgKi8KKyAgICAgICAgICAvKiBlbmNvZGluZywgbm90IG9ubHkgVW5pY29kZS4gIEhvd2V2ZXIsIHJlYWxpdHkgc2hvd3MgKi8KKyAgICAgICAgICAvKiB0aGF0IGZhciB0b28gbWFueSBmb250cyBhcmUgc2xvcHB5IGFuZCBpbmNvcnJlY3RseSAgKi8KKyAgICAgICAgICAvKiBzZXQgYWxsIGZpZWxkcyBidXQgYHN0YXJ0JyBhbmQgYGVuZCcgZm9yIHRoZSBsYXN0ICAgKi8KKyAgICAgICAgICAvKiBzZWdtZW50IGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgY2hhcmFjdGVyLiAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBXZSB0aHVzIG9taXQgdGhlIHRlc3QgaGVyZSwgZGVsYXlpbmcgaXQgdG8gdGhlICAgICAgKi8KKyAgICAgICAgICAvKiByb3V0aW5lcyB3aGljaCBhY3R1YWxseSBhY2Nlc3MgdGhlIGNtYXAuICAgICAgICAgICAgKi8KKyAgICAgICAgICBlbHNlIGlmICggbiAhPSBudW1fc2VncyAtIDEgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICEoIHN0YXJ0ID09IDB4RkZGRlUgJiYgZW5kID09IDB4RkZGRlUgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwIDwgZ2x5cGhfaWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgcCArICggZW5kIC0gc3RhcnQgKyAxICkgKiAyID4gdmFsaWQtPmxpbWl0ICkKKyAgICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIGNoZWNrIGdseXBoIGluZGljZXMgd2l0aGluIHRoZSBzZWdtZW50IHJhbmdlICovCisgICAgICAgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfVElHSFQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1VJbnQgIGksIGlkeDsKKworCisgICAgICAgICAgICBmb3IgKCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlkeCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICAgICAgICAgIGlmICggaWR4ICE9IDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWR4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWlkeCArIGRlbHRhICkgJiAweEZGRkZVOworCisgICAgICAgICAgICAgICAgaWYgKCBpZHggPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgKQorICAgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9HTFlQSF9JRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQorICAgICAgICB7CisgICAgICAgICAgLyogc29tZSBmb250cyAoZXJyb25lb3VzbHk/KSB1c2UgYSByYW5nZSBvZmZzZXQgb2YgMHhGRkZGICovCisgICAgICAgICAgLyogdG8gbWVhbiBtaXNzaW5nIGdseXBoIGluIGNtYXAgdGFibGUgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfUEFSQU5PSUQgICAgfHwKKyAgICAgICAgICAgICAgIG4gIT0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgISggc3RhcnQgPT0gMHhGRkZGVSAmJiBlbmQgPT0gMHhGRkZGVSApICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3Rfc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbGFzdF9lbmQgICA9IGVuZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHR0X2NtYXA0X2NoYXJfbWFwX2xpbmVhciggVFRfQ01hcCAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbmV4dCApCisgIHsKKyAgICBGVF9VSW50ICAgIG51bV9zZWdzMiwgc3RhcnQsIGVuZCwgb2Zmc2V0OworICAgIEZUX0ludCAgICAgZGVsdGE7CisgICAgRlRfVUludCAgICBpLCBudW1fc2VnczsKKyAgICBGVF9VSW50MzIgIGNoYXJjb2RlID0gKnBjaGFyY29kZTsKKyAgICBGVF9VSW50ICAgIGdpbmRleCAgID0gMDsKKyAgICBGVF9CeXRlKiAgIHA7CisKKworICAgIHAgPSBjbWFwLT5kYXRhICsgNjsKKyAgICBudW1fc2VnczIgPSBGVF9QQURfRkxPT1IoIFRUX1BFRUtfVVNIT1JUKCBwICksIDIgKTsKKworICAgIG51bV9zZWdzID0gbnVtX3NlZ3MyID4+IDE7CisKKyAgICBpZiAoICFudW1fc2VncyApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggbmV4dCApCisgICAgICBjaGFyY29kZSsrOworCisgICAgLyogbGluZWFyIHNlYXJjaCAqLworICAgIGZvciAoIDsgY2hhcmNvZGUgPD0gMHhGRkZGVTsgY2hhcmNvZGUrKyApCisgICAgeworICAgICAgRlRfQnl0ZSogIHE7CisKKworICAgICAgcCA9IGNtYXAtPmRhdGEgKyAxNDsgICAgICAgICAgICAgICAvKiBlbmRzIHRhYmxlICAgKi8KKyAgICAgIHEgPSBjbWFwLT5kYXRhICsgMTYgKyBudW1fc2VnczI7ICAgLyogc3RhcnRzIHRhYmxlICovCisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3NlZ3M7IGkrKyApCisgICAgICB7CisgICAgICAgIGVuZCAgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgc3RhcnQgPSBUVF9ORVhUX1VTSE9SVCggcSApOworCisgICAgICAgIGlmICggY2hhcmNvZGUgPj0gc3RhcnQgJiYgY2hhcmNvZGUgPD0gZW5kICkKKyAgICAgICAgeworICAgICAgICAgIHAgICAgICAgPSBxIC0gMiArIG51bV9zZWdzMjsKKyAgICAgICAgICBkZWx0YSAgID0gVFRfUEVFS19TSE9SVCggcCApOworICAgICAgICAgIHAgICAgICArPSBudW1fc2VnczI7CisgICAgICAgICAgb2Zmc2V0ICA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisKKyAgICAgICAgICAvKiBzb21lIGZvbnRzIGhhdmUgYW4gaW5jb3JyZWN0IGxhc3Qgc2VnbWVudDsgKi8KKyAgICAgICAgICAvKiB3ZSBoYXZlIHRvIGNhdGNoIGl0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGkgPj0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIHN0YXJ0ID09IDB4RkZGRlUgJiYgZW5kID09IDB4RkZGRlUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY2hhcm1hcC5mYWNlOworICAgICAgICAgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKworCisgICAgICAgICAgICBpZiAoIG9mZnNldCAmJiBwICsgb2Zmc2V0ICsgMiA+IGxpbWl0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVsdGEgID0gMTsKKyAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIG9mZnNldCA9PSAweEZGRkZVICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgaWYgKCBvZmZzZXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHAgKz0gb2Zmc2V0ICsgKCBjaGFyY29kZSAtIHN0YXJ0ICkgKiAyOworICAgICAgICAgICAgZ2luZGV4ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludCljaGFyY29kZSArIGRlbHRhICkgJiAweEZGRkZVOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCAhbmV4dCB8fCBnaW5kZXggKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIG5leHQgJiYgZ2luZGV4ICkKKyAgICAgICpwY2hhcmNvZGUgPSBjaGFyY29kZTsKKworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHR0X2NtYXA0X2NoYXJfbWFwX2JpbmFyeSggVFRfQ01hcCAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbmV4dCApCisgIHsKKyAgICBGVF9VSW50ICAgbnVtX3NlZ3MyLCBzdGFydCwgZW5kLCBvZmZzZXQ7CisgICAgRlRfSW50ICAgIGRlbHRhOworICAgIEZUX1VJbnQgICBtYXgsIG1pbiwgbWlkLCBudW1fc2VnczsKKyAgICBGVF9VSW50ICAgY2hhcmNvZGUgPSAoRlRfVUludCkqcGNoYXJjb2RlOworICAgIEZUX1VJbnQgICBnaW5kZXggICA9IDA7CisgICAgRlRfQnl0ZSogIHA7CisKKworICAgIHAgPSBjbWFwLT5kYXRhICsgNjsKKyAgICBudW1fc2VnczIgPSBGVF9QQURfRkxPT1IoIFRUX1BFRUtfVVNIT1JUKCBwICksIDIgKTsKKworICAgIGlmICggIW51bV9zZWdzMiApCisgICAgICByZXR1cm4gMDsKKworICAgIG51bV9zZWdzID0gbnVtX3NlZ3MyID4+IDE7CisKKyAgICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgbWlkID0gbnVtX3NlZ3M7CisgICAgZW5kID0gMHhGRkZGVTsKKworICAgIGlmICggbmV4dCApCisgICAgICBjaGFyY29kZSsrOworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBudW1fc2VnczsKKworICAgIC8qIGJpbmFyeSBzZWFyY2ggKi8KKyAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgeworICAgICAgbWlkICAgID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgcCAgICAgID0gY21hcC0+ZGF0YSArIDE0ICsgbWlkICogMjsKKyAgICAgIGVuZCAgICA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisgICAgICBwICAgICArPSAyICsgbnVtX3NlZ3MyOworICAgICAgc3RhcnQgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgaWYgKCBjaGFyY29kZSA8IHN0YXJ0ICkKKyAgICAgICAgbWF4ID0gbWlkOworICAgICAgZWxzZSBpZiAoIGNoYXJjb2RlID4gZW5kICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcCAgICAgKz0gbnVtX3NlZ3MyOworICAgICAgICBkZWx0YSAgPSBUVF9QRUVLX1NIT1JUKCBwICk7CisgICAgICAgIHAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgb2Zmc2V0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgICAvKiBzb21lIGZvbnRzIGhhdmUgYW4gaW5jb3JyZWN0IGxhc3Qgc2VnbWVudDsgKi8KKyAgICAgICAgLyogd2UgaGF2ZSB0byBjYXRjaCBpdCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbWlkID49IG51bV9zZWdzIC0gMSAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIHN0YXJ0ID09IDB4RkZGRlUgJiYgZW5kID09IDB4RkZGRlUgKQorICAgICAgICB7CisgICAgICAgICAgVFRfRmFjZSAgIGZhY2UgID0gKFRUX0ZhY2UpY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7CisgICAgICAgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKworCisgICAgICAgICAgaWYgKCBvZmZzZXQgJiYgcCArIG9mZnNldCArIDIgPiBsaW1pdCApCisgICAgICAgICAgeworICAgICAgICAgICAgZGVsdGEgID0gMTsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogc2VhcmNoIHRoZSBmaXJzdCBzZWdtZW50IGNvbnRhaW5pbmcgYGNoYXJjb2RlJyAqLworICAgICAgICBpZiAoIGNtYXAtPmZsYWdzICYgVFRfQ01BUF9GTEFHX09WRVJMQVBQSU5HICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgICAgIC8qIGNhbGwgdGhlIGN1cnJlbnQgc2VnbWVudCBgbWF4JyAqLworICAgICAgICAgIG1heCA9IG1pZDsKKworICAgICAgICAgIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQorICAgICAgICAgICAgbWlkID0gbWF4ICsgMTsKKworICAgICAgICAgIC8qIHNlYXJjaCBpbiBzZWdtZW50cyBiZWZvcmUgdGhlIGN1cnJlbnQgc2VnbWVudCAqLworICAgICAgICAgIGZvciAoIGkgPSBtYXggOyBpID4gMDsgaS0tICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICAgcHJldl9lbmQ7CisgICAgICAgICAgICBGVF9CeXRlKiAgb2xkX3A7CisKKworICAgICAgICAgICAgb2xkX3AgICAgPSBwOworICAgICAgICAgICAgcCAgICAgICAgPSBjbWFwLT5kYXRhICsgMTQgKyAoIGkgLSAxICkgKiAyOworICAgICAgICAgICAgcHJldl9lbmQgPSBUVF9QRUVLX1VTSE9SVCggcCApOworCisgICAgICAgICAgICBpZiAoIGNoYXJjb2RlID4gcHJldl9lbmQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwID0gb2xkX3A7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmQgICAgPSBwcmV2X2VuZDsKKyAgICAgICAgICAgIHAgICAgICs9IDIgKyBudW1fc2VnczI7CisgICAgICAgICAgICBzdGFydCAgPSBUVF9QRUVLX1VTSE9SVCggcCApOworICAgICAgICAgICAgcCAgICAgKz0gbnVtX3NlZ3MyOworICAgICAgICAgICAgZGVsdGEgID0gVFRfUEVFS19TSE9SVCggcCApOworICAgICAgICAgICAgcCAgICAgKz0gbnVtX3NlZ3MyOworICAgICAgICAgICAgb2Zmc2V0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKworICAgICAgICAgICAgaWYgKCBvZmZzZXQgIT0gMHhGRkZGVSApCisgICAgICAgICAgICAgIG1pZCA9IGkgLSAxOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIG5vIGx1Y2sgKi8KKyAgICAgICAgICBpZiAoIG1pZCA9PSBtYXggKyAxICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGkgIT0gbWF4ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcCAgICAgID0gY21hcC0+ZGF0YSArIDE0ICsgbWF4ICogMjsKKyAgICAgICAgICAgICAgZW5kICAgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgICAgICAgcCAgICAgKz0gMiArIG51bV9zZWdzMjsKKyAgICAgICAgICAgICAgc3RhcnQgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgICAgICAgcCAgICAgKz0gbnVtX3NlZ3MyOworICAgICAgICAgICAgICBkZWx0YSAgPSBUVF9QRUVLX1NIT1JUKCBwICk7CisgICAgICAgICAgICAgIHAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgICAgICAgb2Zmc2V0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWlkID0gbWF4OworCisgICAgICAgICAgICAvKiBzZWFyY2ggaW4gc2VnbWVudHMgYWZ0ZXIgdGhlIGN1cnJlbnQgc2VnbWVudCAqLworICAgICAgICAgICAgZm9yICggaSA9IG1heCArIDE7IGkgPCBudW1fc2VnczsgaSsrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVUludCAgbmV4dF9lbmQsIG5leHRfc3RhcnQ7CisKKworICAgICAgICAgICAgICBwICAgICAgICAgID0gY21hcC0+ZGF0YSArIDE0ICsgaSAqIDI7CisgICAgICAgICAgICAgIG5leHRfZW5kICAgPSBUVF9QRUVLX1VTSE9SVCggcCApOworICAgICAgICAgICAgICBwICAgICAgICAgKz0gMiArIG51bV9zZWdzMjsKKyAgICAgICAgICAgICAgbmV4dF9zdGFydCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisKKyAgICAgICAgICAgICAgaWYgKCBjaGFyY29kZSA8IG5leHRfc3RhcnQgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGVuZCAgICA9IG5leHRfZW5kOworICAgICAgICAgICAgICBzdGFydCAgPSBuZXh0X3N0YXJ0OworICAgICAgICAgICAgICBwICAgICArPSBudW1fc2VnczI7CisgICAgICAgICAgICAgIGRlbHRhICA9IFRUX1BFRUtfU0hPUlQoIHAgKTsKKyAgICAgICAgICAgICAgcCAgICAgKz0gbnVtX3NlZ3MyOworICAgICAgICAgICAgICBvZmZzZXQgPSBUVF9QRUVLX1VTSE9SVCggcCApOworCisgICAgICAgICAgICAgIGlmICggb2Zmc2V0ICE9IDB4RkZGRlUgKQorICAgICAgICAgICAgICAgIG1pZCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpLS07CisKKyAgICAgICAgICAgIC8qIHN0aWxsIG5vIGx1Y2sgKi8KKyAgICAgICAgICAgIGlmICggbWlkID09IG1heCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1pZCA9IGk7CisKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZW5kLCBzdGFydCwgZGVsdGEsIGFuZCBvZmZzZXQgYXJlIGZvciB0aGUgaSd0aCBzZWdtZW50ICovCisgICAgICAgICAgaWYgKCBtaWQgIT0gaSApCisgICAgICAgICAgeworICAgICAgICAgICAgcCAgICAgID0gY21hcC0+ZGF0YSArIDE0ICsgbWlkICogMjsKKyAgICAgICAgICAgIGVuZCAgICA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisgICAgICAgICAgICBwICAgICArPSAyICsgbnVtX3NlZ3MyOworICAgICAgICAgICAgc3RhcnQgID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICAgICAgICAgIHAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgICAgIGRlbHRhICA9IFRUX1BFRUtfU0hPUlQoIHAgKTsKKyAgICAgICAgICAgIHAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgICAgIG9mZnNldCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9mZnNldCApCisgICAgICAgIHsKKyAgICAgICAgICBwICs9IG9mZnNldCArICggY2hhcmNvZGUgLSBzdGFydCApICogMjsKKyAgICAgICAgICBnaW5kZXggPSBUVF9QRUVLX1VTSE9SVCggcCApOworICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWdpbmRleCArIGRlbHRhICkgJiAweEZGRkZVOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSApICYgMHhGRkZGVTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIG5leHQgKQorICAgIHsKKyAgICAgIFRUX0NNYXA0ICBjbWFwNCA9IChUVF9DTWFwNCljbWFwOworCisKKyAgICAgIC8qIGlmIGBjaGFyY29kZScgaXMgbm90IGluIGFueSBzZWdtZW50LCB0aGVuIGBtaWQnIGlzICovCisgICAgICAvKiB0aGUgc2VnbWVudCBuZWFyZXN0IHRvIGBjaGFyY29kZScgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgaWYgKCBjaGFyY29kZSA+IGVuZCApCisgICAgICB7CisgICAgICAgIG1pZCsrOworICAgICAgICBpZiAoIG1pZCA9PSBudW1fc2VncyApCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmICggdHRfY21hcDRfc2V0X3JhbmdlKCBjbWFwNCwgbWlkICkgKQorICAgICAgeworICAgICAgICBpZiAoIGdpbmRleCApCisgICAgICAgICAgKnBjaGFyY29kZSA9IGNoYXJjb2RlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBjbWFwNC0+Y3VyX2NoYXJjb2RlID0gY2hhcmNvZGU7CisKKyAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgIGNtYXA0LT5jdXJfZ2luZGV4ID0gZ2luZGV4OworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjbWFwNC0+Y3VyX2NoYXJjb2RlID0gY2hhcmNvZGU7CisgICAgICAgICAgdHRfY21hcDRfbmV4dCggY21hcDQgKTsKKyAgICAgICAgICBnaW5kZXggPSBjbWFwNC0+Y3VyX2dpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZ2luZGV4ICkKKyAgICAgICAgICAqcGNoYXJjb2RlID0gY21hcDQtPmN1cl9jaGFyY29kZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZ2luZGV4OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICB0dF9jbWFwNF9jaGFyX2luZGV4KCBUVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgY2hhcl9jb2RlICkKKyAgeworICAgIGlmICggY2hhcl9jb2RlID49IDB4MTAwMDBVTCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggY21hcC0+ZmxhZ3MgJiBUVF9DTUFQX0ZMQUdfVU5TT1JURUQgKQorICAgICAgcmV0dXJuIHR0X2NtYXA0X2NoYXJfbWFwX2xpbmVhciggY21hcCwgJmNoYXJfY29kZSwgMCApOworICAgIGVsc2UKKyAgICAgIHJldHVybiB0dF9jbWFwNF9jaGFyX21hcF9iaW5hcnkoIGNtYXAsICZjaGFyX2NvZGUsIDAgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0dF9jbWFwNF9jaGFyX25leHQoIFRUX0NNYXAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAqcGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50ICBnaW5kZXg7CisKKworICAgIGlmICggKnBjaGFyX2NvZGUgPj0gMHhGRkZGVSApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggY21hcC0+ZmxhZ3MgJiBUVF9DTUFQX0ZMQUdfVU5TT1JURUQgKQorICAgICAgZ2luZGV4ID0gdHRfY21hcDRfY2hhcl9tYXBfbGluZWFyKCBjbWFwLCBwY2hhcl9jb2RlLCAxICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRUX0NNYXA0ICBjbWFwNCA9IChUVF9DTWFwNCljbWFwOworCisKKyAgICAgIC8qIG5vIG5lZWQgdG8gc2VhcmNoICovCisgICAgICBpZiAoICpwY2hhcl9jb2RlID09IGNtYXA0LT5jdXJfY2hhcmNvZGUgKQorICAgICAgeworICAgICAgICB0dF9jbWFwNF9uZXh0KCBjbWFwNCApOworICAgICAgICBnaW5kZXggPSBjbWFwNC0+Y3VyX2dpbmRleDsKKyAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgICpwY2hhcl9jb2RlID0gY21hcDQtPmN1cl9jaGFyY29kZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZ2luZGV4ID0gdHRfY21hcDRfY2hhcl9tYXBfYmluYXJ5KCBjbWFwLCBwY2hhcl9jb2RlLCAxICk7CisgICAgfQorCisgICAgcmV0dXJuIGdpbmRleDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXA0X2dldF9pbmZvKCBUVF9DTWFwICAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IGNtYXAtPmRhdGEgKyA0OworCisKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gNDsKKyAgICBjbWFwX2luZm8tPmxhbmd1YWdlID0gKEZUX1VMb25nKVRUX1BFRUtfVVNIT1JUKCBwICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9ERUZJTkVfVFRfQ01BUCgKKyAgICB0dF9jbWFwNF9jbGFzc19yZWMsCisgICAgc2l6ZW9mICggVFRfQ01hcDRSZWMgKSwKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIHR0X2NtYXA0X2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICBOVUxMLAorICAgIChGVF9DTWFwX0NoYXJJbmRleEZ1bmMpdHRfY21hcDRfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHR0X2NtYXA0X2NoYXJfbmV4dCwKKworICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKworICAgIDQsCisgICAgKFRUX0NNYXBfVmFsaWRhdGVGdW5jKXR0X2NtYXA0X3ZhbGlkYXRlLAorICAgIChUVF9DTWFwX0luZm9fR2V0RnVuYyl0dF9jbWFwNF9nZXRfaW5mbyApCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVQgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgICAgICBUWVBFICAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZm9ybWF0ICAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgbXVzdCBiZSA0ICAgICAgICAgICAgICAqLworICAvKiAgIGxlbmd0aCAgICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcyAgKi8KKyAgLyogICBsYW5ndWFnZSAgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGZpcnN0ICAgICAgICA2ICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIGZpcnN0IHNlZ21lbnQgY29kZSAgICAgKi8KKyAgLyogICBjb3VudCAgICAgICAgOCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICBzZWdtZW50IHNpemUgaW4gY2hhcnMgICovCisgIC8qICAgZ2x5cGhJZHMgICAgIDEwICAgICAgICAgICAgIFVTSE9SVFtjb3VudF0gICAgZ2x5cGggSURzICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSB2ZXJ5IHNpbXBsaWZpZWQgc2VnbWVudCBtYXBwaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzYKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgdHRfY21hcDZfdmFsaWRhdGUoIEZUX0J5dGUqICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VJbnQgICBsZW5ndGgsIGNvdW50OworCisKKyAgICBpZiAoIHRhYmxlICsgMTAgPiB2YWxpZC0+bGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBwICAgICAgPSB0YWJsZSArIDI7CisgICAgbGVuZ3RoID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIHAgICAgICA9IHRhYmxlICsgODsgICAgICAgICAgICAgLyogc2tpcCBsYW5ndWFnZSBhbmQgc3RhcnQgaW5kZXggKi8KKyAgICBjb3VudCAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgaWYgKCB0YWJsZSArIGxlbmd0aCA+IHZhbGlkLT5saW1pdCB8fCBsZW5ndGggPCAxMCArIGNvdW50ICogMiApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIGNoZWNrIGdseXBoIGluZGljZXMgKi8KKyAgICBpZiAoIHZhbGlkLT5sZXZlbCA+PSBGVF9WQUxJREFURV9USUdIVCApCisgICAgeworICAgICAgRlRfVUludCAgZ2luZGV4OworCisKKyAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgIHsKKyAgICAgICAgZ2luZGV4ID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgaWYgKCBnaW5kZXggPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgKQorICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50ICkKKyAgdHRfY21hcDZfY2hhcl9pbmRleCggVFRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9CeXRlKiAgdGFibGUgID0gY21hcC0+ZGF0YTsKKyAgICBGVF9VSW50ICAgcmVzdWx0ID0gMDsKKyAgICBGVF9CeXRlKiAgcCAgICAgID0gdGFibGUgKyA2OworICAgIEZUX1VJbnQgICBzdGFydCAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgIEZUX1VJbnQgICBjb3VudCAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgIEZUX1VJbnQgICBpZHggICAgPSAoRlRfVUludCkoIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisKKworICAgIGlmICggaWR4IDwgY291bnQgKQorICAgIHsKKyAgICAgIHAgKz0gMiAqIGlkeDsKKyAgICAgIHJlc3VsdCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludDMyICkKKyAgdHRfY21hcDZfY2hhcl9uZXh0KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogICB0YWJsZSAgICAgPSBjbWFwLT5kYXRhOworICAgIEZUX1VJbnQzMiAgcmVzdWx0ICAgID0gMDsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKyAgICBGVF9VSW50ICAgIGdpbmRleCAgICA9IDA7CisKKyAgICBGVF9CeXRlKiAgIHAgICAgICAgICA9IHRhYmxlICsgNjsKKyAgICBGVF9VSW50ICAgIHN0YXJ0ICAgICA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisgICAgRlRfVUludCAgICBjb3VudCAgICAgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgIEZUX1VJbnQgICAgaWR4OworCisKKyAgICBpZiAoIGNoYXJfY29kZSA+PSAweDEwMDAwVUwgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCisgICAgICBjaGFyX2NvZGUgPSBzdGFydDsKKworICAgIGlkeCA9IChGVF9VSW50KSggY2hhcl9jb2RlIC0gc3RhcnQgKTsKKyAgICBwICArPSAyICogaWR4OworCisgICAgZm9yICggOyBpZHggPCBjb3VudDsgaWR4KysgKQorICAgIHsKKyAgICAgIGdpbmRleCA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gY2hhcl9jb2RlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNoYXJfY29kZSsrOworICAgIH0KKworICBFeGl0OgorICAgICpwY2hhcl9jb2RlID0gcmVzdWx0OworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwNl9nZXRfaW5mbyggVFRfQ01hcCAgICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgVFRfQ01hcEluZm8gICpjbWFwX2luZm8gKQorICB7CisgICAgRlRfQnl0ZSogIHAgPSBjbWFwLT5kYXRhICsgNDsKKworCisgICAgY21hcF9pbmZvLT5mb3JtYXQgICA9IDY7CisgICAgY21hcF9pbmZvLT5sYW5ndWFnZSA9IChGVF9VTG9uZylUVF9QRUVLX1VTSE9SVCggcCApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfREVGSU5FX1RUX0NNQVAoCisgICAgdHRfY21hcDZfY2xhc3NfcmVjLAorICAgIHNpemVvZiAoIFRUX0NNYXBSZWMgKSwKKworICAgIChGVF9DTWFwX0luaXRGdW5jKSAgICAgdHRfY21hcF9pbml0LAorICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgTlVMTCwKKyAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKXR0X2NtYXA2X2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSB0dF9jbWFwNl9jaGFyX25leHQsCisKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisKKyAgICA2LAorICAgIChUVF9DTWFwX1ZhbGlkYXRlRnVuYyl0dF9jbWFwNl92YWxpZGF0ZSwKKyAgICAoVFRfQ01hcF9JbmZvX0dldEZ1bmMpdHRfY21hcDZfZ2V0X2luZm8gKQorCisjZW5kaWYgLyogVFRfQ09ORklHX0NNQVBfRk9STUFUXzYgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIEl0IGlzIGhhcmQgdG8gY29tcGxldGVseSB1bmRlcnN0YW5kIHdoYXQgdGhlIE9wZW5UeXBlIHNwZWMgICAgKioqKiovCisgIC8qKioqKiBzYXlzIGFib3V0IHRoaXMgZm9ybWF0LCBidXQgaGVyZSBpcyBteSBjb25jbHVzaW9uLiAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZm9ybWF0IGlzIHRvIGVhc2lseSBtYXAgVVRGLTE2IHRleHQgdG8gICAgKioqKiovCisgIC8qKioqKiBnbHlwaCBpbmRpY2VzLiAgQmFzaWNhbGx5LCB0aGUgYGNoYXJfY29kZScgbXVzdCBiZSBpbiBvbmUgb2YgICoqKioqLworICAvKioqKiogdGhlIGZvbGxvd2luZyBmb3JtYXRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgIC0gQSAxNi1iaXQgdmFsdWUgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZSBVbmljb2RlIFN1cnJvZ2F0ZXMgICoqKioqLworICAvKioqKiogICAgIEFyZWEgKGkuZS4gVStEODAwLVUrREZGRikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgIC0gQSAzMi1iaXQgdmFsdWUsIG1hZGUgb2YgdHdvIHN1cnJvZ2F0ZSB2YWx1ZXMsIGkuZS4uIGlmICAgICoqKioqLworICAvKioqKiogICAgIGBjaGFyX2NvZGUgPSAoY2hhcl9oaSA8PCAxNikgfCBjaGFyX2xvJywgdGhlbiBib3RoICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICBgY2hhcl9oaScgYW5kIGBjaGFyX2xvJyBtdXN0IGJlIGluIHRoZSBTdXJyb2dhdGVzIEFyZWEuICAgKioqKiovCisgIC8qKioqKiAgICAgIEFyZWEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIFRoZSBgaXMzMicgdGFibGUgZW1iZWRkZWQgaW4gdGhlIGNoYXJtYXAgaW5kaWNhdGVzIHdoZXRoZXIgYSAgKioqKiovCisgIC8qKioqKiBnaXZlbiAxNi1iaXQgdmFsdWUgaXMgaW4gdGhlIHN1cnJvZ2F0ZXMgYXJlYSBvciBub3QuICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqIFNvLCBmb3IgYW55IGdpdmVuIGBjaGFyX2NvZGUnLCB3ZSBjYW4gYXNzZXJ0IHRoZSBmb2xsb3dpbmc6ICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICBJZiBgY2hhcl9oaSA9PSAwJyB0aGVuIHdlIG11c3QgaGF2ZSBgaXMzMltjaGFyX2xvXSA9PSAwJy4gICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgIElmIGBjaGFyX2hpICE9IDAnIHRoZW4gd2UgbXVzdCBoYXZlIGJvdGggICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICBgaXMzMltjaGFyX2hpXSAhPSAwJyBhbmQgYGlzMzJbY2hhcl9sb10gIT0gMCcuICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgICAgVFlQRSAgICAgICAgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICBtdXN0IGJlIDggICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgcmVzZXJ2ZWQgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGxlbmd0aCAgICAgIDQgICAgICAgICAgICAgIFVMT05HICAgICAgIGxlbmd0aCBpbiBieXRlcyAgICAgICAgICAgICAgKi8KKyAgLyogICBsYW5ndWFnZSAgICA4ICAgICAgICAgICAgICBVTE9ORyAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICAgICAgICovCisgIC8qICAgaXMzMiAgICAgICAgMTIgICAgICAgICAgICAgQllURVs4MTkyXSAgMzItYml0bmVzcyBiaXRtYXAgICAgICAgICAgICAqLworICAvKiAgIGNvdW50ICAgICAgIDgyMDQgICAgICAgICAgIFVMT05HICAgICAgIG51bWJlciBvZiBncm91cHMgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IGBjb3VudCcgZ3JvdXBzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBzdGFydCAgICAgICAwICAgICAgICAgICAgICBVTE9ORyAgICAgICBmaXJzdCBjaGFyY29kZSAgICAgICAgICAgICAgICovCisgIC8qICAgZW5kICAgICAgICAgNCAgICAgICAgICAgICAgVUxPTkcgICAgICAgbGFzdCBjaGFyY29kZSAgICAgICAgICAgICAgICAqLworICAvKiAgIHN0YXJ0SWQgICAgIDggICAgICAgICAgICAgIFVMT05HICAgICAgIHN0YXJ0IGdseXBoIElEIGZvciB0aGUgZ3JvdXAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfOAorCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwOF92YWxpZGF0ZSggRlRfQnl0ZSogICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKQorICB7CisgICAgRlRfQnl0ZSogICBwID0gdGFibGUgKyA0OworICAgIEZUX0J5dGUqICAgaXMzMjsKKyAgICBGVF9VSW50MzIgIGxlbmd0aDsKKyAgICBGVF9VSW50MzIgIG51bV9ncm91cHM7CisKKworICAgIGlmICggdGFibGUgKyAxNiArIDgxOTIgPiB2YWxpZC0+bGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBsZW5ndGggPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgaWYgKCBsZW5ndGggPiAoRlRfVUludDMyKSggdmFsaWQtPmxpbWl0IC0gdGFibGUgKSB8fCBsZW5ndGggPCA4MTkyICsgMTYgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBpczMyICAgICAgID0gdGFibGUgKyAxMjsKKyAgICBwICAgICAgICAgID0gaXMzMiAgKyA4MTkyOyAgICAgICAgICAvKiBza2lwIGBpczMyJyBhcnJheSAqLworICAgIG51bV9ncm91cHMgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAvKiBwICsgbnVtX2dyb3VwcyAqIDEyID4gdmFsaWQtPmxpbWl0ID8gKi8KKyAgICBpZiAoIG51bV9ncm91cHMgPiAoRlRfVUludDMyKSggdmFsaWQtPmxpbWl0IC0gcCApIC8gMTIgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICAvKiBjaGVjayBncm91cHMsIHRoZXkgbXVzdCBiZSBpbiBpbmNyZWFzaW5nIG9yZGVyICovCisgICAgeworICAgICAgRlRfVUludDMyICBuLCBzdGFydCwgZW5kLCBzdGFydF9pZCwgY291bnQsIGxhc3QgPSAwOworCisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2dyb3VwczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgIGhpLCBsbzsKKworCisgICAgICAgIHN0YXJ0ICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgICBlbmQgICAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgc3RhcnRfaWQgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgICAgaWYgKCBzdGFydCA+IGVuZCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgIGlmICggbiA+IDAgJiYgc3RhcnQgPD0gbGFzdCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQzMiAgZCA9IGVuZCAtIHN0YXJ0OworCisKKyAgICAgICAgICAvKiBzdGFydF9pZCArIGVuZCAtIHN0YXJ0ID49IFRUX1ZBTElEX0dMWVBIX0NPVU5UKCB2YWxpZCApID8gKi8KKyAgICAgICAgICBpZiAoIGQgPiBUVF9WQUxJRF9HTFlQSF9DT1VOVCggdmFsaWQgKSAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgc3RhcnRfaWQgPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgLSBkICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisKKyAgICAgICAgICBjb3VudCA9IChGVF9VSW50MzIpKCBlbmQgLSBzdGFydCArIDEgKTsKKworICAgICAgICAgIGlmICggc3RhcnQgJiB+MHhGRkZGVSApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogc3RhcnRfaGkgIT0gMDsgY2hlY2sgdGhhdCBpczMyW2ldIGlzIDEgZm9yIGVhY2ggaSBpbiAqLworICAgICAgICAgICAgLyogdGhlIGBoaScgYW5kIGBsbycgb2YgdGhlIHJhbmdlIFtzdGFydC4uZW5kXSAgICAgICAgICAqLworICAgICAgICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHN0YXJ0KysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBoaSA9IChGVF9VSW50KSggc3RhcnQgPj4gMTYgKTsKKyAgICAgICAgICAgICAgbG8gPSAoRlRfVUludCkoIHN0YXJ0ICYgMHhGRkZGVSApOworCisgICAgICAgICAgICAgIGlmICggKGlzMzJbaGkgPj4gM10gJiAoIDB4ODAgPj4gKCBoaSAmIDcgKSApICkgPT0gMCApCisgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgICAgICAgIGlmICggKGlzMzJbbG8gPj4gM10gJiAoIDB4ODAgPj4gKCBsbyAmIDcgKSApICkgPT0gMCApCisgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgLyogc3RhcnRfaGkgPT0gMDsgY2hlY2sgdGhhdCBpczMyW2ldIGlzIDAgZm9yIGVhY2ggaSBpbiAqLworICAgICAgICAgICAgLyogdGhlIHJhbmdlIFtzdGFydC4uZW5kXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAvKiBlbmRfaGkgY2Fubm90IGJlICE9IDAhICovCisgICAgICAgICAgICBpZiAoIGVuZCAmIH4weEZGRkZVICkKKyAgICAgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc3RhcnQrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxvID0gKEZUX1VJbnQpKCBzdGFydCAmIDB4RkZGRlUgKTsKKworICAgICAgICAgICAgICBpZiAoIChpczMyW2xvID4+IDNdICYgKCAweDgwID4+ICggbG8gJiA3ICkgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gZW5kOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHR0X2NtYXA4X2NoYXJfaW5kZXgoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogICB0YWJsZSAgICAgID0gY21hcC0+ZGF0YTsKKyAgICBGVF9VSW50ICAgIHJlc3VsdCAgICAgPSAwOworICAgIEZUX0J5dGUqICAgcCAgICAgICAgICA9IHRhYmxlICsgODIwNDsKKyAgICBGVF9VSW50MzIgIG51bV9ncm91cHMgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgRlRfVUludDMyICBzdGFydCwgZW5kLCBzdGFydF9pZDsKKworCisgICAgZm9yICggOyBudW1fZ3JvdXBzID4gMDsgbnVtX2dyb3Vwcy0tICkKKyAgICB7CisgICAgICBzdGFydCAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIGVuZCAgICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgc3RhcnRfaWQgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBjaGFyX2NvZGUgPD0gZW5kICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHR0X2NtYXA4X2NoYXJfbmV4dCggVFRfQ01hcCAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VJbnQzMiAgcmVzdWx0ICAgICA9IDA7CisgICAgRlRfVUludDMyICBjaGFyX2NvZGUgID0gKnBjaGFyX2NvZGUgKyAxOworICAgIEZUX1VJbnQgICAgZ2luZGV4ICAgICA9IDA7CisgICAgRlRfQnl0ZSogICB0YWJsZSAgICAgID0gY21hcC0+ZGF0YTsKKyAgICBGVF9CeXRlKiAgIHAgICAgICAgICAgPSB0YWJsZSArIDgyMDQ7CisgICAgRlRfVUludDMyICBudW1fZ3JvdXBzID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgIEZUX1VJbnQzMiAgc3RhcnQsIGVuZCwgc3RhcnRfaWQ7CisKKworICAgIHAgPSB0YWJsZSArIDgyMDg7CisKKyAgICBmb3IgKCA7IG51bV9ncm91cHMgPiAwOyBudW1fZ3JvdXBzLS0gKQorICAgIHsKKyAgICAgIHN0YXJ0ICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgZW5kICAgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBzdGFydF9pZCA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCisgICAgICAgIGNoYXJfY29kZSA9IHN0YXJ0OworCisgICAgICBpZiAoIGNoYXJfY29kZSA8PSBlbmQgKQorICAgICAgeworICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIGNoYXJfY29kZSAtIHN0YXJ0ICsgc3RhcnRfaWQgKTsKKyAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBjaGFyX2NvZGU7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgKnBjaGFyX2NvZGUgPSByZXN1bHQ7CisgICAgcmV0dXJuIGdpbmRleDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXA4X2dldF9pbmZvKCBUVF9DTWFwICAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IGNtYXAtPmRhdGEgKyA4OworCisKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gODsKKyAgICBjbWFwX2luZm8tPmxhbmd1YWdlID0gKEZUX1VMb25nKVRUX1BFRUtfVUxPTkcoIHAgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0RFRklORV9UVF9DTUFQKAorICAgIHR0X2NtYXA4X2NsYXNzX3JlYywKKyAgICBzaXplb2YgKCBUVF9DTWFwUmVjICksCisKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIHR0X2NtYXBfaW5pdCwKKyAgICAoRlRfQ01hcF9Eb25lRnVuYykgICAgIE5VTEwsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0dF9jbWFwOF9jaGFyX2luZGV4LAorICAgIChGVF9DTWFwX0NoYXJOZXh0RnVuYykgdHRfY21hcDhfY2hhcl9uZXh0LAorCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorCisgICAgOCwKKyAgICAoVFRfQ01hcF9WYWxpZGF0ZUZ1bmMpdHRfY21hcDhfdmFsaWRhdGUsCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKXR0X2NtYXA4X2dldF9pbmZvICkKKworI2VuZGlmIC8qIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF84ICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVCAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgIE9GRlNFVCAgVFlQRSAgICAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgIDAgICAgICBVU0hPUlQgICAgICAgICAgICAgbXVzdCBiZSAxMCAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgcmVzZXJ2ZWQgICAyICAgICAgVVNIT1JUICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGxlbmd0aCAgICAgNCAgICAgIFVMT05HICAgICAgICAgICAgICBsZW5ndGggaW4gYnl0ZXMgICAgICAgICAgICAgICAgKi8KKyAgLyogICBsYW5ndWFnZSAgIDggICAgICBVTE9ORyAgICAgICAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHN0YXJ0ICAgICAxMiAgICAgIFVMT05HICAgICAgICAgICAgICBmaXJzdCBjaGFyIGluIHJhbmdlICAgICAgICAgICAgKi8KKyAgLyogICBjb3VudCAgICAgMTYgICAgICBVTE9ORyAgICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJzIGluIHJhbmdlICAgICAgICovCisgIC8qICAgZ2x5cGhJZHMgIDIwICAgICAgVVNIT1JUW2NvdW50XSAgICAgIGdseXBoIGluZGljZXMgY292ZXJlZCAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMAorCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTBfdmFsaWRhdGUoIEZUX0J5dGUqICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IHRhYmxlICsgNDsKKyAgICBGVF9VTG9uZyAgbGVuZ3RoLCBjb3VudDsKKworCisgICAgaWYgKCB0YWJsZSArIDIwID4gdmFsaWQtPmxpbWl0ICkKKyAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgbGVuZ3RoID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgIHAgICAgICA9IHRhYmxlICsgMTY7CisgICAgY291bnQgID0gVFRfTkVYVF9VTE9ORyggcCApOworCisgICAgaWYgKCBsZW5ndGggPiAoRlRfVUxvbmcpKCB2YWxpZC0+bGltaXQgLSB0YWJsZSApIHx8CisgICAgICAgICAvKiBsZW5ndGggPCAyMCArIGNvdW50ICogMiA/ICovCisgICAgICAgICBsZW5ndGggPCAyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAoIGxlbmd0aCAtIDIwICkgLyAyIDwgY291bnQgICAgICAgICAgICAgICAgICkKKyAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgLyogY2hlY2sgZ2x5cGggaW5kaWNlcyAqLworICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICB7CisgICAgICBGVF9VSW50ICBnaW5kZXg7CisKKworICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgeworICAgICAgICBnaW5kZXggPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBpZiAoIGdpbmRleCA+PSBUVF9WQUxJRF9HTFlQSF9DT1VOVCggdmFsaWQgKSApCisgICAgICAgICAgRlRfSU5WQUxJRF9HTFlQSF9JRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICB0dF9jbWFwMTBfY2hhcl9pbmRleCggVFRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfQnl0ZSogICB0YWJsZSAgPSBjbWFwLT5kYXRhOworICAgIEZUX1VJbnQgICAgcmVzdWx0ID0gMDsKKyAgICBGVF9CeXRlKiAgIHAgICAgICA9IHRhYmxlICsgMTI7CisgICAgRlRfVUludDMyICBzdGFydCAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgRlRfVUludDMyICBjb3VudCAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgRlRfVUludDMyICBpZHggICAgPSAoRlRfVUxvbmcpKCBjaGFyX2NvZGUgLSBzdGFydCApOworCisKKyAgICBpZiAoIGlkeCA8IGNvdW50ICkKKyAgICB7CisgICAgICBwICAgICArPSAyICogaWR4OworICAgICAgcmVzdWx0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0dF9jbWFwMTBfY2hhcl9uZXh0KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKKyAgeworICAgIEZUX0J5dGUqICAgdGFibGUgICAgID0gY21hcC0+ZGF0YTsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKyAgICBGVF9VSW50ICAgIGdpbmRleCAgICA9IDA7CisgICAgRlRfQnl0ZSogICBwICAgICAgICAgPSB0YWJsZSArIDEyOworICAgIEZUX1VJbnQzMiAgc3RhcnQgICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgIEZUX1VJbnQzMiAgY291bnQgICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgIEZUX1VJbnQzMiAgaWR4OworCisKKyAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKKyAgICAgIGNoYXJfY29kZSA9IHN0YXJ0OworCisgICAgaWR4ID0gKEZUX1VJbnQzMikoIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgcCAgKz0gMiAqIGlkeDsKKworICAgIGZvciAoIDsgaWR4IDwgY291bnQ7IGlkeCsrICkKKyAgICB7CisgICAgICBnaW5kZXggPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgIGJyZWFrOworICAgICAgY2hhcl9jb2RlKys7CisgICAgfQorCisgICAgKnBjaGFyX2NvZGUgPSBjaGFyX2NvZGU7CisgICAgcmV0dXJuIGdpbmRleDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXAxMF9nZXRfaW5mbyggVFRfQ01hcCAgICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBJbmZvICAqY21hcF9pbmZvICkKKyAgeworICAgIEZUX0J5dGUqICBwID0gY21hcC0+ZGF0YSArIDg7CisKKworICAgIGNtYXBfaW5mby0+Zm9ybWF0ICAgPSAxMDsKKyAgICBjbWFwX2luZm8tPmxhbmd1YWdlID0gKEZUX1VMb25nKVRUX1BFRUtfVUxPTkcoIHAgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0RFRklORV9UVF9DTUFQKAorICAgIHR0X2NtYXAxMF9jbGFzc19yZWMsCisgICAgc2l6ZW9mICggVFRfQ01hcFJlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICB0dF9jbWFwX2luaXQsCisgICAgKEZUX0NNYXBfRG9uZUZ1bmMpICAgICBOVUxMLAorICAgIChGVF9DTWFwX0NoYXJJbmRleEZ1bmMpdHRfY21hcDEwX2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSB0dF9jbWFwMTBfY2hhcl9uZXh0LAorCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorCisgICAgMTAsCisgICAgKFRUX0NNYXBfVmFsaWRhdGVGdW5jKXR0X2NtYXAxMF92YWxpZGF0ZSwKKyAgICAoVFRfQ01hcF9JbmZvX0dldEZ1bmMpdHRfY21hcDEwX2dldF9pbmZvICkKKworI2VuZGlmIC8qIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVQgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgVFlQRSAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZm9ybWF0ICAgICAgMCAgICAgICAgICBVU0hPUlQgICAgIG11c3QgYmUgMTIgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHJlc2VydmVkICAgIDIgICAgICAgICAgVVNIT1JUICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBsZW5ndGggICAgICA0ICAgICAgICAgIFVMT05HICAgICAgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgbGFuZ3VhZ2UgICAgOCAgICAgICAgICBVTE9ORyAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgICAgICAgICAgICAqLworICAvKiAgIGNvdW50ICAgICAgIDEyICAgICAgICAgVUxPTkcgICAgICBudW1iZXIgb2YgZ3JvdXBzICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGhlYWRlciBpcyBmb2xsb3dlZCBieSBgY291bnQnIGdyb3VwcyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDogICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgc3RhcnQgICAgICAgMCAgICAgICAgICBVTE9ORyAgICAgIGZpcnN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsYXN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBzdGFydElkICAgICA4ICAgICAgICAgIFVMT05HICAgICAgc3RhcnQgZ2x5cGggSUQgZm9yIHRoZSBncm91cCAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzEyCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0NNYXAxMlJlY18KKyAgeworICAgIFRUX0NNYXBSZWMgIGNtYXA7CisgICAgRlRfQm9vbCAgICAgdmFsaWQ7CisgICAgRlRfVUxvbmcgICAgY3VyX2NoYXJjb2RlOworICAgIEZUX1VJbnQgICAgIGN1cl9naW5kZXg7CisgICAgRlRfVUxvbmcgICAgY3VyX2dyb3VwOworICAgIEZUX1VMb25nICAgIG51bV9ncm91cHM7CisKKyAgfSBUVF9DTWFwMTJSZWMsICpUVF9DTWFwMTI7CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgdHRfY21hcDEyX2luaXQoIFRUX0NNYXAxMiAgY21hcCwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgdGFibGUgKQorICB7CisgICAgY21hcC0+Y21hcC5kYXRhICA9IHRhYmxlOworCisgICAgdGFibGUgICAgICAgICAgICs9IDEyOworICAgIGNtYXAtPm51bV9ncm91cHMgPSBGVF9QRUVLX1VMT05HKCB0YWJsZSApOworCisgICAgY21hcC0+dmFsaWQgICAgICA9IDA7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgdHRfY21hcDEyX3ZhbGlkYXRlKCBGVF9CeXRlKiAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZhbGlkYXRvciAgdmFsaWQgKQorICB7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfVUxvbmcgIGxlbmd0aDsKKyAgICBGVF9VTG9uZyAgbnVtX2dyb3VwczsKKworCisgICAgaWYgKCB0YWJsZSArIDE2ID4gdmFsaWQtPmxpbWl0ICkKKyAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgcCAgICAgID0gdGFibGUgKyA0OworICAgIGxlbmd0aCA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIHAgICAgICAgICAgPSB0YWJsZSArIDEyOworICAgIG51bV9ncm91cHMgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIGxlbmd0aCA+IChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIHRhYmxlICkgfHwKKyAgICAgICAgIC8qIGxlbmd0aCA8IDE2ICsgMTIgKiBudW1fZ3JvdXBzID8gKi8KKyAgICAgICAgIGxlbmd0aCA8IDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICggbGVuZ3RoIC0gMTYgKSAvIDEyIDwgbnVtX2dyb3VwcyAgICAgICAgICAgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICAvKiBjaGVjayBncm91cHMsIHRoZXkgbXVzdCBiZSBpbiBpbmNyZWFzaW5nIG9yZGVyICovCisgICAgeworICAgICAgRlRfVUxvbmcgIG4sIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkLCBsYXN0ID0gMDsKKworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9ncm91cHM7IG4rKyApCisgICAgICB7CisgICAgICAgIHN0YXJ0ICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgICBlbmQgICAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgc3RhcnRfaWQgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgICAgaWYgKCBzdGFydCA+IGVuZCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgIGlmICggbiA+IDAgJiYgc3RhcnQgPD0gbGFzdCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1RJR0hUICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQzMiAgZCA9IGVuZCAtIHN0YXJ0OworCisKKyAgICAgICAgICAvKiBzdGFydF9pZCArIGVuZCAtIHN0YXJ0ID49IFRUX1ZBTElEX0dMWVBIX0NPVU5UKCB2YWxpZCApID8gKi8KKyAgICAgICAgICBpZiAoIGQgPiBUVF9WQUxJRF9HTFlQSF9DT1VOVCggdmFsaWQgKSAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgc3RhcnRfaWQgPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgLSBkICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gZW5kOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIHNlYXJjaCB0aGUgaW5kZXggb2YgdGhlIGNoYXJjb2RlIG5leHQgdG8gY21hcC0+Y3VyX2NoYXJjb2RlICovCisgIC8qIGNtYXAtPmN1cl9ncm91cCBzaG91bGQgYmUgc2V0IHVwIHByb3Blcmx5IGJ5IGNhbGxlciAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIHR0X2NtYXAxMl9uZXh0KCBUVF9DTWFwMTIgIGNtYXAgKQorICB7CisgICAgRlRfQnl0ZSogIHA7CisgICAgRlRfVUxvbmcgIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkLCBjaGFyX2NvZGU7CisgICAgRlRfVUxvbmcgIG47CisgICAgRlRfVUludCAgIGdpbmRleDsKKworCisgICAgaWYgKCBjbWFwLT5jdXJfY2hhcmNvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGNoYXJfY29kZSA9IGNtYXAtPmN1cl9jaGFyY29kZSArIDE7CisKKyAgICBmb3IgKCBuID0gY21hcC0+Y3VyX2dyb3VwOyBuIDwgY21hcC0+bnVtX2dyb3VwczsgbisrICkKKyAgICB7CisgICAgICBwICAgICAgICA9IGNtYXAtPmNtYXAuZGF0YSArIDE2ICsgMTIgKiBuOworICAgICAgc3RhcnQgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBlbmQgICAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIHN0YXJ0X2lkID0gVFRfUEVFS19VTE9ORyggcCApOworCisgICAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKKyAgICAgICAgY2hhcl9jb2RlID0gc3RhcnQ7CisKKyAgICAgIGZvciAoIDsgY2hhcl9jb2RlIDw9IGVuZDsgY2hhcl9jb2RlKysgKQorICAgICAgeworICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgY2hhcl9jb2RlIC0gc3RhcnQgKTsKKworICAgICAgICBpZiAoIGdpbmRleCApCisgICAgICAgIHsKKyAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7OworICAgICAgICAgIGNtYXAtPmN1cl9naW5kZXggICA9IGdpbmRleDsKKyAgICAgICAgICBjbWFwLT5jdXJfZ3JvdXAgICAgPSBuOworCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgY21hcC0+dmFsaWQgPSAwOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICB0dF9jbWFwMTJfY2hhcl9tYXBfYmluYXJ5KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBuZXh0ICkKKyAgeworICAgIEZUX1VJbnQgICAgZ2luZGV4ICAgICA9IDA7CisgICAgRlRfQnl0ZSogICBwICAgICAgICAgID0gY21hcC0+ZGF0YSArIDEyOworICAgIEZUX1VJbnQzMiAgbnVtX2dyb3VwcyA9IFRUX1BFRUtfVUxPTkcoIHAgKTsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSAgPSAqcGNoYXJfY29kZTsKKyAgICBGVF9VSW50MzIgIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkOworICAgIEZUX1VJbnQzMiAgbWF4LCBtaW4sIG1pZDsKKworCisgICAgaWYgKCAhbnVtX2dyb3VwcyApCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBtaWQgPSBudW1fZ3JvdXBzOworICAgIGVuZCA9IDB4RkZGRkZGRkZVTDsKKworICAgIGlmICggbmV4dCApCisgICAgICBjaGFyX2NvZGUrKzsKKworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gbnVtX2dyb3VwczsKKworICAgIC8qIGJpbmFyeSBzZWFyY2ggKi8KKyAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgeworICAgICAgbWlkID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgcCAgID0gY21hcC0+ZGF0YSArIDE2ICsgMTIgKiBtaWQ7CisKKyAgICAgIHN0YXJ0ID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgZW5kICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQorICAgICAgICBtYXggPSBtaWQ7CisgICAgICBlbHNlIGlmICggY2hhcl9jb2RlID4gZW5kICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc3RhcnRfaWQgPSBUVF9QRUVLX1VMT05HKCBwICk7CisgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggc3RhcnRfaWQgKyBjaGFyX2NvZGUgLSBzdGFydCApOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggbmV4dCApCisgICAgeworICAgICAgVFRfQ01hcDEyICBjbWFwMTIgPSAoVFRfQ01hcDEyKWNtYXA7CisKKworICAgICAgLyogaWYgYGNoYXJfY29kZScgaXMgbm90IGluIGFueSBncm91cCwgdGhlbiBgbWlkJyBpcyAqLworICAgICAgLyogdGhlIGdyb3VwIG5lYXJlc3QgdG8gYGNoYXJfY29kZScgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBpZiAoIGNoYXJfY29kZSA+IGVuZCApCisgICAgICB7CisgICAgICAgIG1pZCsrOworICAgICAgICBpZiAoIG1pZCA9PSBudW1fZ3JvdXBzICkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgY21hcDEyLT52YWxpZCAgICAgICAgPSAxOworICAgICAgY21hcDEyLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7CisgICAgICBjbWFwMTItPmN1cl9ncm91cCAgICA9IG1pZDsKKworICAgICAgaWYgKCAhZ2luZGV4ICkKKyAgICAgIHsKKyAgICAgICAgdHRfY21hcDEyX25leHQoIGNtYXAxMiApOworCisgICAgICAgIGlmICggY21hcDEyLT52YWxpZCApCisgICAgICAgICAgZ2luZGV4ID0gY21hcDEyLT5jdXJfZ2luZGV4OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBjbWFwMTItPmN1cl9naW5kZXggPSBnaW5kZXg7CisKKyAgICAgIGlmICggZ2luZGV4ICkKKyAgICAgICAgKnBjaGFyX2NvZGUgPSBjbWFwMTItPmN1cl9jaGFyY29kZTsKKyAgICB9CisKKyAgICByZXR1cm4gZ2luZGV4OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICB0dF9jbWFwMTJfY2hhcl9pbmRleCggVFRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyX2NvZGUgKQorICB7CisgICAgcmV0dXJuIHR0X2NtYXAxMl9jaGFyX21hcF9iaW5hcnkoIGNtYXAsICZjaGFyX2NvZGUsIDAgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0dF9jbWFwMTJfY2hhcl9uZXh0KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKKyAgeworICAgIFRUX0NNYXAxMiAgY21hcDEyID0gKFRUX0NNYXAxMiljbWFwOworICAgIEZUX1VMb25nICAgZ2luZGV4OworCisKKyAgICBpZiAoIGNtYXAxMi0+Y3VyX2NoYXJjb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICByZXR1cm4gMDsKKworICAgIC8qIG5vIG5lZWQgdG8gc2VhcmNoICovCisgICAgaWYgKCBjbWFwMTItPnZhbGlkICYmIGNtYXAxMi0+Y3VyX2NoYXJjb2RlID09ICpwY2hhcl9jb2RlICkKKyAgICB7CisgICAgICB0dF9jbWFwMTJfbmV4dCggY21hcDEyICk7CisgICAgICBpZiAoIGNtYXAxMi0+dmFsaWQgKQorICAgICAgeworICAgICAgICBnaW5kZXggPSBjbWFwMTItPmN1cl9naW5kZXg7CisKKyAgICAgICAgLyogWFhYOiBjaGVjayBjdXJfY2hhcmNvZGUgb3ZlcmZsb3cgaXMgZXhwZWN0ZWQgKi8KKyAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgICpwY2hhcl9jb2RlID0gKEZUX1VJbnQzMiljbWFwMTItPmN1cl9jaGFyY29kZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZ2luZGV4ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgZ2luZGV4ID0gdHRfY21hcDEyX2NoYXJfbWFwX2JpbmFyeSggY21hcCwgcGNoYXJfY29kZSwgMSApOworCisgICAgLyogWFhYOiBjaGVjayBnaW5kZXggb3ZlcmZsb3cgaXMgZXhwZWN0ZWQgKi8KKyAgICByZXR1cm4gKEZUX1VJbnQzMilnaW5kZXg7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTJfZ2V0X2luZm8oIFRUX0NNYXAgICAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IGNtYXAtPmRhdGEgKyA4OworCisKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gMTI7CisgICAgY21hcF9pbmZvLT5sYW5ndWFnZSA9IChGVF9VTG9uZylUVF9QRUVLX1VMT05HKCBwICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9ERUZJTkVfVFRfQ01BUCgKKyAgICB0dF9jbWFwMTJfY2xhc3NfcmVjLAorICAgIHNpemVvZiAoIFRUX0NNYXAxMlJlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICB0dF9jbWFwMTJfaW5pdCwKKyAgICAoRlRfQ01hcF9Eb25lRnVuYykgICAgIE5VTEwsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0dF9jbWFwMTJfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHR0X2NtYXAxMl9jaGFyX25leHQsCisKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisKKyAgICAxMiwKKyAgICAoVFRfQ01hcF9WYWxpZGF0ZUZ1bmMpdHRfY21hcDEyX3ZhbGlkYXRlLAorICAgIChUVF9DTWFwX0luZm9fR2V0RnVuYyl0dF9jbWFwMTJfZ2V0X2luZm8gKQorCisjZW5kaWYgLyogVFRfQ09ORklHX0NNQVBfRk9STUFUXzEyICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVCAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICBUWVBFICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAwICAgICAgICAgIFVTSE9SVCAgICAgbXVzdCBiZSAxMyAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgcmVzZXJ2ZWQgICAgMiAgICAgICAgICBVU0hPUlQgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGxlbmd0aCAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsZW5ndGggaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBsYW5ndWFnZSAgICA4ICAgICAgICAgIFVMT05HICAgICAgTWFjIGxhbmd1YWdlIGNvZGUgICAgICAgICAgICAgICAgICovCisgIC8qICAgY291bnQgICAgICAgMTIgICAgICAgICBVTE9ORyAgICAgIG51bWJlciBvZiBncm91cHMgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IGBjb3VudCcgZ3JvdXBzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBzdGFydCAgICAgICAwICAgICAgICAgIFVMT05HICAgICAgZmlyc3QgY2hhcmNvZGUgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgZW5kICAgICAgICAgNCAgICAgICAgICBVTE9ORyAgICAgIGxhc3QgY2hhcmNvZGUgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGdseXBoSWQgICAgIDggICAgICAgICAgVUxPTkcgICAgICBnbHlwaCBJRCBmb3IgdGhlIHdob2xlIGdyb3VwICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTMKKworICB0eXBlZGVmIHN0cnVjdCAgVFRfQ01hcDEzUmVjXworICB7CisgICAgVFRfQ01hcFJlYyAgY21hcDsKKyAgICBGVF9Cb29sICAgICB2YWxpZDsKKyAgICBGVF9VTG9uZyAgICBjdXJfY2hhcmNvZGU7CisgICAgRlRfVUludCAgICAgY3VyX2dpbmRleDsKKyAgICBGVF9VTG9uZyAgICBjdXJfZ3JvdXA7CisgICAgRlRfVUxvbmcgICAgbnVtX2dyb3VwczsKKworICB9IFRUX0NNYXAxM1JlYywgKlRUX0NNYXAxMzsKKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTNfaW5pdCggVFRfQ01hcDEzICBjbWFwLAorICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICB0YWJsZSApCisgIHsKKyAgICBjbWFwLT5jbWFwLmRhdGEgID0gdGFibGU7CisKKyAgICB0YWJsZSAgICAgICAgICAgKz0gMTI7CisgICAgY21hcC0+bnVtX2dyb3VwcyA9IEZUX1BFRUtfVUxPTkcoIHRhYmxlICk7CisKKyAgICBjbWFwLT52YWxpZCAgICAgID0gMDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTNfdmFsaWRhdGUoIEZUX0J5dGUqICAgICAgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlKiAgcDsKKyAgICBGVF9VTG9uZyAgbGVuZ3RoOworICAgIEZUX1VMb25nICBudW1fZ3JvdXBzOworCisKKyAgICBpZiAoIHRhYmxlICsgMTYgPiB2YWxpZC0+bGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBwICAgICAgPSB0YWJsZSArIDQ7CisgICAgbGVuZ3RoID0gVFRfTkVYVF9VTE9ORyggcCApOworCisgICAgcCAgICAgICAgICA9IHRhYmxlICsgMTI7CisgICAgbnVtX2dyb3VwcyA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIGlmICggbGVuZ3RoID4gKEZUX1VMb25nKSggdmFsaWQtPmxpbWl0IC0gdGFibGUgKSB8fAorICAgICAgICAgLyogbGVuZ3RoIDwgMTYgKyAxMiAqIG51bV9ncm91cHMgPyAqLworICAgICAgICAgbGVuZ3RoIDwgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgKCBsZW5ndGggLSAxNiApIC8gMTIgPCBudW1fZ3JvdXBzICAgICAgICAgICApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIGNoZWNrIGdyb3VwcywgdGhleSBtdXN0IGJlIGluIGluY3JlYXNpbmcgb3JkZXIgKi8KKyAgICB7CisgICAgICBGVF9VTG9uZyAgbiwgc3RhcnQsIGVuZCwgZ2x5cGhfaWQsIGxhc3QgPSAwOworCisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2dyb3VwczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgc3RhcnQgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICAgIGVuZCAgICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgICBnbHlwaF9pZCA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICBpZiAoIHN0YXJ0ID4gZW5kICkKKyAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgaWYgKCBuID4gMCAmJiBzdGFydCA8PSBsYXN0ICkKKyAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgaWYgKCB2YWxpZC0+bGV2ZWwgPj0gRlRfVkFMSURBVEVfVElHSFQgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBnbHlwaF9pZCA+PSBUVF9WQUxJRF9HTFlQSF9DT1VOVCggdmFsaWQgKSApCisgICAgICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworICAgICAgICB9CisKKyAgICAgICAgbGFzdCA9IGVuZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBzZWFyY2ggdGhlIGluZGV4IG9mIHRoZSBjaGFyY29kZSBuZXh0IHRvIGNtYXAtPmN1cl9jaGFyY29kZSAqLworICAvKiBjbWFwLT5jdXJfZ3JvdXAgc2hvdWxkIGJlIHNldCB1cCBwcm9wZXJseSBieSBjYWxsZXIgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICB0dF9jbWFwMTNfbmV4dCggVFRfQ01hcDEzICBjbWFwICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VMb25nICBzdGFydCwgZW5kLCBnbHlwaF9pZCwgY2hhcl9jb2RlOworICAgIEZUX1VMb25nICBuOworICAgIEZUX1VJbnQgICBnaW5kZXg7CisKKworICAgIGlmICggY21hcC0+Y3VyX2NoYXJjb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBjaGFyX2NvZGUgPSBjbWFwLT5jdXJfY2hhcmNvZGUgKyAxOworCisgICAgZm9yICggbiA9IGNtYXAtPmN1cl9ncm91cDsgbiA8IGNtYXAtPm51bV9ncm91cHM7IG4rKyApCisgICAgeworICAgICAgcCAgICAgICAgPSBjbWFwLT5jbWFwLmRhdGEgKyAxNiArIDEyICogbjsKKyAgICAgIHN0YXJ0ICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgZW5kICAgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBnbHlwaF9pZCA9IFRUX1BFRUtfVUxPTkcoIHAgKTsKKworICAgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCisgICAgICAgIGNoYXJfY29kZSA9IHN0YXJ0OworCisgICAgICBpZiAoIGNoYXJfY29kZSA8PSBlbmQgKQorICAgICAgeworICAgICAgICBnaW5kZXggPSAoRlRfVUludClnbHlwaF9pZDsKKworICAgICAgICBpZiAoIGdpbmRleCApCisgICAgICAgIHsKKyAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7OworICAgICAgICAgIGNtYXAtPmN1cl9naW5kZXggICA9IGdpbmRleDsKKyAgICAgICAgICBjbWFwLT5jdXJfZ3JvdXAgICAgPSBuOworCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgY21hcC0+dmFsaWQgPSAwOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICB0dF9jbWFwMTNfY2hhcl9tYXBfYmluYXJ5KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBuZXh0ICkKKyAgeworICAgIEZUX1VJbnQgICAgZ2luZGV4ICAgICA9IDA7CisgICAgRlRfQnl0ZSogICBwICAgICAgICAgID0gY21hcC0+ZGF0YSArIDEyOworICAgIEZUX1VJbnQzMiAgbnVtX2dyb3VwcyA9IFRUX1BFRUtfVUxPTkcoIHAgKTsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSAgPSAqcGNoYXJfY29kZTsKKyAgICBGVF9VSW50MzIgIHN0YXJ0LCBlbmQ7CisgICAgRlRfVUludDMyICBtYXgsIG1pbiwgbWlkOworCisKKyAgICBpZiAoICFudW1fZ3JvdXBzICkKKyAgICAgIHJldHVybiAwOworCisgICAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworICAgIG1pZCA9IG51bV9ncm91cHM7CisgICAgZW5kID0gMHhGRkZGRkZGRlVMOworCisgICAgaWYgKCBuZXh0ICkKKyAgICAgIGNoYXJfY29kZSsrOworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBudW1fZ3JvdXBzOworCisgICAgLyogYmluYXJ5IHNlYXJjaCAqLworICAgIHdoaWxlICggbWluIDwgbWF4ICkKKyAgICB7CisgICAgICBtaWQgPSAoIG1pbiArIG1heCApID4+IDE7CisgICAgICBwICAgPSBjbWFwLT5kYXRhICsgMTYgKyAxMiAqIG1pZDsKKworICAgICAgc3RhcnQgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBlbmQgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCisgICAgICAgIG1heCA9IG1pZDsKKyAgICAgIGVsc2UgaWYgKCBjaGFyX2NvZGUgPiBlbmQgKQorICAgICAgICBtaW4gPSBtaWQgKyAxOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBnaW5kZXggPSAoRlRfVUludClUVF9QRUVLX1VMT05HKCBwICk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBuZXh0ICkKKyAgICB7CisgICAgICBUVF9DTWFwMTMgIGNtYXAxMyA9IChUVF9DTWFwMTMpY21hcDsKKworCisgICAgICAvKiBpZiBgY2hhcl9jb2RlJyBpcyBub3QgaW4gYW55IGdyb3VwLCB0aGVuIGBtaWQnIGlzICovCisgICAgICAvKiB0aGUgZ3JvdXAgbmVhcmVzdCB0byBgY2hhcl9jb2RlJyAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGlmICggY2hhcl9jb2RlID4gZW5kICkKKyAgICAgIHsKKyAgICAgICAgbWlkKys7CisgICAgICAgIGlmICggbWlkID09IG51bV9ncm91cHMgKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBjbWFwMTMtPnZhbGlkICAgICAgICA9IDE7CisgICAgICBjbWFwMTMtPmN1cl9jaGFyY29kZSA9IGNoYXJfY29kZTsKKyAgICAgIGNtYXAxMy0+Y3VyX2dyb3VwICAgID0gbWlkOworCisgICAgICBpZiAoICFnaW5kZXggKQorICAgICAgeworICAgICAgICB0dF9jbWFwMTNfbmV4dCggY21hcDEzICk7CisKKyAgICAgICAgaWYgKCBjbWFwMTMtPnZhbGlkICkKKyAgICAgICAgICBnaW5kZXggPSBjbWFwMTMtPmN1cl9naW5kZXg7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGNtYXAxMy0+Y3VyX2dpbmRleCA9IGdpbmRleDsKKworICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMy0+Y3VyX2NoYXJjb2RlOworICAgIH0KKworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHR0X2NtYXAxM19jaGFyX2luZGV4KCBUVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApCisgIHsKKyAgICByZXR1cm4gdHRfY21hcDEzX2NoYXJfbWFwX2JpbmFyeSggY21hcCwgJmNoYXJfY29kZSwgMCApOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHR0X2NtYXAxM19jaGFyX25leHQoIFRUX0NNYXAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgVFRfQ01hcDEzICBjbWFwMTMgPSAoVFRfQ01hcDEzKWNtYXA7CisgICAgRlRfVUludCAgICBnaW5kZXg7CisKKworICAgIGlmICggY21hcDEzLT5jdXJfY2hhcmNvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgIHJldHVybiAwOworCisgICAgLyogbm8gbmVlZCB0byBzZWFyY2ggKi8KKyAgICBpZiAoIGNtYXAxMy0+dmFsaWQgJiYgY21hcDEzLT5jdXJfY2hhcmNvZGUgPT0gKnBjaGFyX2NvZGUgKQorICAgIHsKKyAgICAgIHR0X2NtYXAxM19uZXh0KCBjbWFwMTMgKTsKKyAgICAgIGlmICggY21hcDEzLT52YWxpZCApCisgICAgICB7CisgICAgICAgIGdpbmRleCA9IGNtYXAxMy0+Y3VyX2dpbmRleDsKKyAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgICpwY2hhcl9jb2RlID0gY21hcDEzLT5jdXJfY2hhcmNvZGU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGdpbmRleCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGdpbmRleCA9IHR0X2NtYXAxM19jaGFyX21hcF9iaW5hcnkoIGNtYXAsIHBjaGFyX2NvZGUsIDEgKTsKKworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTNfZ2V0X2luZm8oIFRUX0NNYXAgICAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9CeXRlKiAgcCA9IGNtYXAtPmRhdGEgKyA4OworCisKKyAgICBjbWFwX2luZm8tPmZvcm1hdCAgID0gMTM7CisgICAgY21hcF9pbmZvLT5sYW5ndWFnZSA9IChGVF9VTG9uZylUVF9QRUVLX1VMT05HKCBwICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9ERUZJTkVfVFRfQ01BUCgKKyAgICB0dF9jbWFwMTNfY2xhc3NfcmVjLAorICAgIHNpemVvZiAoIFRUX0NNYXAxM1JlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICB0dF9jbWFwMTNfaW5pdCwKKyAgICAoRlRfQ01hcF9Eb25lRnVuYykgICAgIE5VTEwsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0dF9jbWFwMTNfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHR0X2NtYXAxM19jaGFyX25leHQsCisKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisKKyAgICAxMywKKyAgICAoVFRfQ01hcF9WYWxpZGF0ZUZ1bmMpdHRfY21hcDEzX3ZhbGlkYXRlLAorICAgIChUVF9DTWFwX0luZm9fR2V0RnVuYyl0dF9jbWFwMTNfZ2V0X2luZm8gKQorCisjZW5kaWYgLyogVFRfQ09ORklHX0NNQVBfRk9STUFUXzEzICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVQgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgTkFNRSAgICAgICAgIE9GRlNFVCAgVFlQRSAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAgICAwICAgICBVU0hPUlQgIG11c3QgYmUgMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgbGVuZ3RoICAgICAgICAgMiAgICAgVUxPTkcgICB0YWJsZSBsZW5ndGggaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAqLworICAvKiAgIG51bVNlbGVjdG9yICAgIDYgICAgIFVMT05HICAgbnVtYmVyIG9mIHZhcmlhdGlvbiBzZWwuIHJlY29yZHMgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZvbGxvd2VkIGJ5IG51bVNlbGVjdG9yIHJlY29yZHMsIGVhY2ggb2Ygd2hpY2ggbG9va3MgbGlrZSAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICB2YXJTZWxlY3RvciAgICAwICAgICBVSU5UMjQgIFVuaWNvZGUgY29kZXBvaW50IG9mIHNlbC4gICAgICAgICAgICAgICovCisgIC8qICAgZGVmYXVsdE9mZiAgICAgMyAgICAgVUxPTkcgICBvZmZzZXQgdG8gYSBkZWZhdWx0IFVWUyB0YWJsZSAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmluZyBhbnkgdmFyaWFudHMgdG8gYmUgZm91bmQgaW4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBub3JtYWwgVW5pY29kZSBzdWJ0YWJsZS4gICAgICAgICAgICovCisgIC8qICAgbm9uRGVmT2ZmICAgICAgNyAgICAgVUxPTkcgICBvZmZzZXQgdG8gYSBub24tZGVmYXVsdCBVVlMgdGFibGUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmluZyBhbnkgdmFyaWFudHMgbm90IGluIHRoZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIGNtYXAsIHdpdGggR0lEcyBoZXJlICAgICAgICAgICovCisgIC8qIChlaXRoZXIgb2Zmc2V0IG1heSBiZSAwIE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU2VsZWN0b3JzIGFyZSBzb3J0ZWQgYnkgY29kZSBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIGRlZmF1bHQgVW5pY29kZSBWYXJpYXRpb24gU2VsZWN0b3IgKFVWUykgc3VidGFibGUgaXMganVzdCBhIGxpc3Qgb2YgKi8KKyAgLyogcmFuZ2VzIG9mIGNvZGUgcG9pbnRzIHdoaWNoIGFyZSB0byBiZSBmb3VuZCBpbiB0aGUgc3RhbmRhcmQgY21hcC4gIE5vICovCisgIC8qIGdseXBoIElEcyAoR0lEcykgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBudW1SYW5nZXMgICAgICAwICAgICBVTE9ORyAgIG51bWJlciBvZiByYW5nZXMgZm9sbG93aW5nICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIHJhbmdlIGxvb2tzIGxpa2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgdW5pU3RhcnQgICAgICAgMCAgICAgVUlOVDI0ICBjb2RlIHBvaW50IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBhZGRpdGlvbmFsQ250ICAzICAgICBVQllURSAgIGNvdW50IG9mIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBpbiB0aGlzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAoemVybyBtZWFucyBhIHJhbmdlIG9mIGEgc2luZ2xlICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJhbmdlcyBhcmUgc29ydGVkIGJ5IGB1bmlTdGFydCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQSBub24tZGVmYXVsdCBVbmljb2RlIFZhcmlhdGlvbiBTZWxlY3RvciAoVVZTKSBzdWJ0YWJsZSBpcyBhIGxpc3Qgb2YgICovCisgIC8qIG1hcHBpbmdzIGZyb20gY29kZXBvaW50IHRvIEdJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBudW1NYXBwaW5ncyAgICAwICAgICBVTE9ORyAgIG51bWJlciBvZiBtYXBwaW5ncyAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIHJhbmdlIGxvb2tzIGxpa2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgdW5pU3RhcnQgICAgICAgMCAgICAgVUlOVDI0ICBjb2RlIHBvaW50IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBHSUQgICAgICAgICAgICAzICAgICBVU0hPUlQgIGFuZCBpdHMgR0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSYW5nZXMgYXJlIHNvcnRlZCBieSBgdW5pU3RhcnQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xNAorCisgIHR5cGVkZWYgc3RydWN0ICBUVF9DTWFwMTRSZWNfCisgIHsKKyAgICBUVF9DTWFwUmVjICBjbWFwOworICAgIEZUX1VMb25nICAgIG51bV9zZWxlY3RvcnM7CisKKyAgICAvKiBUaGlzIGFycmF5IGlzIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdmFyaW91cworICAgICAqIGNtYXAgMTQgcXVlcnkgZnVuY3Rpb25zLiAgVGhlIGRhdGEgaXMgb3ZlcndyaXR0ZW4KKyAgICAgKiBvbiBlYWNoIGNhbGwgdG8gdGhlc2UgZnVuY3Rpb25zLgorICAgICAqLworICAgIEZUX1VJbnQzMiAgIG1heF9yZXN1bHRzOworICAgIEZUX1VJbnQzMiogIHJlc3VsdHM7CisgICAgRlRfTWVtb3J5ICAgbWVtb3J5OworCisgIH0gVFRfQ01hcDE0UmVjLCAqVFRfQ01hcDE0OworCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgdHRfY21hcDE0X2RvbmUoIFRUX0NNYXAxNCAgY21hcCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNtYXAtPm1lbW9yeTsKKworCisgICAgY21hcC0+bWF4X3Jlc3VsdHMgPSAwOworICAgIGlmICggbWVtb3J5ICE9IE5VTEwgJiYgY21hcC0+cmVzdWx0cyAhPSBOVUxMICkKKyAgICAgIEZUX0ZSRUUoIGNtYXAtPnJlc3VsdHMgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X2NtYXAxNF9lbnN1cmUoIFRUX0NNYXAxNCAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBudW1fcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgRlRfVUludDMyICBvbGRfbWF4ID0gY21hcC0+bWF4X3Jlc3VsdHM7CisgICAgRlRfRXJyb3IgICBlcnJvciAgID0gRlRfRXJyX09rOworCisKKyAgICBpZiAoIG51bV9yZXN1bHRzID4gY21hcC0+bWF4X3Jlc3VsdHMgKQorICAgIHsKKyAgICAgICBjbWFwLT5tZW1vcnkgPSBtZW1vcnk7CisKKyAgICAgICBpZiAoIEZUX1FSRU5FV19BUlJBWSggY21hcC0+cmVzdWx0cywgb2xkX21heCwgbnVtX3Jlc3VsdHMgKSApCisgICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgICBjbWFwLT5tYXhfcmVzdWx0cyA9IG51bV9yZXN1bHRzOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXAxNF9pbml0KCBUVF9DTWFwMTQgIGNtYXAsCisgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIHRhYmxlICkKKyAgeworICAgIGNtYXAtPmNtYXAuZGF0YSA9IHRhYmxlOworCisgICAgdGFibGUgICAgICAgICAgICAgICArPSA2OworICAgIGNtYXAtPm51bV9zZWxlY3RvcnMgID0gRlRfUEVFS19VTE9ORyggdGFibGUgKTsKKyAgICBjbWFwLT5tYXhfcmVzdWx0cyAgICA9IDA7CisgICAgY21hcC0+cmVzdWx0cyAgICAgICAgPSBOVUxMOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXAxNF92YWxpZGF0ZSggRlRfQnl0ZSogICAgICB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9WYWxpZGF0b3IgIHZhbGlkICkKKyAgeworICAgIEZUX0J5dGUqICBwOworICAgIEZUX1VMb25nICBsZW5ndGg7CisgICAgRlRfVUxvbmcgIG51bV9zZWxlY3RvcnM7CisKKworICAgIGlmICggdGFibGUgKyAyICsgNCArIDQgPiB2YWxpZC0+bGltaXQgKQorICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICBwICAgICAgICAgICAgID0gdGFibGUgKyAyOworICAgIGxlbmd0aCAgICAgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgbnVtX3NlbGVjdG9ycyA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIGlmICggbGVuZ3RoID4gKEZUX1VMb25nKSggdmFsaWQtPmxpbWl0IC0gdGFibGUgKSB8fAorICAgICAgICAgLyogbGVuZ3RoIDwgMTAgKyAxMSAqIG51bV9zZWxlY3RvcnMgPyAqLworICAgICAgICAgbGVuZ3RoIDwgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgKCBsZW5ndGggLSAxMCApIC8gMTEgPCBudW1fc2VsZWN0b3JzICAgICAgICApCisgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsKKworICAgIC8qIGNoZWNrIHNlbGVjdG9ycywgdGhleSBtdXN0IGJlIGluIGluY3JlYXNpbmcgb3JkZXIgKi8KKyAgICB7CisgICAgICAvKiB3ZSBzdGFydCBsYXN0VmFyU2VsIGF0IDEgYmVjYXVzZSBhIHZhcmlhbnQgc2VsZWN0b3IgdmFsdWUgb2YgMAorICAgICAgICogaXNuJ3QgdmFsaWQuCisgICAgICAgKi8KKyAgICAgIEZUX1VMb25nICBuLCBsYXN0VmFyU2VsID0gMTsKKworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9zZWxlY3RvcnM7IG4rKyApCisgICAgICB7CisgICAgICAgIEZUX1VMb25nICB2YXJTZWwgICAgPSBUVF9ORVhUX1VJTlQyNCggcCApOworICAgICAgICBGVF9VTG9uZyAgZGVmT2ZmICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgICAgICBGVF9VTG9uZyAgbm9uZGVmT2ZmID0gVFRfTkVYVF9VTE9ORyggcCApOworCisKKyAgICAgICAgaWYgKCBkZWZPZmYgPj0gbGVuZ3RoIHx8IG5vbmRlZk9mZiA+PSBsZW5ndGggKQorICAgICAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgICAgIGlmICggdmFyU2VsIDwgbGFzdFZhclNlbCApCisgICAgICAgICAgRlRfSU5WQUxJRF9EQVRBOworCisgICAgICAgIGxhc3RWYXJTZWwgPSB2YXJTZWwgKyAxOworCisgICAgICAgIC8qIGNoZWNrIHRoZSBkZWZhdWx0IHRhYmxlICh0aGVzZSBnbHlwaHMgc2hvdWxkIGJlIHJlYWNoZWQgICAgICovCisgICAgICAgIC8qIHRocm91Z2ggdGhlIG5vcm1hbCBVbmljb2RlIGNtYXAsIG5vIEdJRHMsIGp1c3QgY2hlY2sgb3JkZXIpICovCisgICAgICAgIGlmICggZGVmT2ZmICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogIGRlZnAgICAgICA9IHRhYmxlICsgZGVmT2ZmOworICAgICAgICAgIEZUX1VMb25nICBudW1SYW5nZXMgPSBUVF9ORVhUX1VMT05HKCBkZWZwICk7CisgICAgICAgICAgRlRfVUxvbmcgIGk7CisgICAgICAgICAgRlRfVUxvbmcgIGxhc3RCYXNlICA9IDA7CisKKworICAgICAgICAgIC8qIGRlZnAgKyBudW1SYW5nZXMgKiA0ID4gdmFsaWQtPmxpbWl0ID8gKi8KKyAgICAgICAgICBpZiAoIG51bVJhbmdlcyA+IChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIGRlZnAgKSAvIDQgKQorICAgICAgICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7CisKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bVJhbmdlczsgKytpICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VTG9uZyAgYmFzZSA9IFRUX05FWFRfVUlOVDI0KCBkZWZwICk7CisgICAgICAgICAgICBGVF9VTG9uZyAgY250ICA9IEZUX05FWFRfQllURSggZGVmcCApOworCisKKyAgICAgICAgICAgIGlmICggYmFzZSArIGNudCA+PSAweDExMDAwMFVMICkgICAgICAgICAgICAgIC8qIGVuZCBvZiBVbmljb2RlICovCisgICAgICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICAgICAgaWYgKCBiYXNlIDwgbGFzdEJhc2UgKQorICAgICAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgICAgIGxhc3RCYXNlID0gYmFzZSArIGNudCArIDFVOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGFuZCB0aGUgbm9uLWRlZmF1bHQgdGFibGUgKHRoZXNlIGdseXBocyBhcmUgc3BlY2lmaWVkIGhlcmUpICovCisgICAgICAgIGlmICggbm9uZGVmT2ZmICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSogIG5kcCAgICAgICAgID0gdGFibGUgKyBub25kZWZPZmY7CisgICAgICAgICAgRlRfVUxvbmcgIG51bU1hcHBpbmdzID0gVFRfTkVYVF9VTE9ORyggbmRwICk7CisgICAgICAgICAgRlRfVUxvbmcgIGksIGxhc3RVbmkgID0gMDsKKworCisgICAgICAgICAgLyogbnVtTWFwcGluZ3MgKiA0ID4gKEZUX1VMb25nKSggdmFsaWQtPmxpbWl0IC0gbmRwICkgPyAqLworICAgICAgICAgIGlmICggbnVtTWFwcGluZ3MgPiAoIChGVF9VTG9uZykoIHZhbGlkLT5saW1pdCAtIG5kcCApICkgLyA0ICkKKyAgICAgICAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOworCisgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1NYXBwaW5nczsgKytpICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VTG9uZyAgdW5pID0gVFRfTkVYVF9VSU5UMjQoIG5kcCApOworICAgICAgICAgICAgRlRfVUxvbmcgIGdpZCA9IFRUX05FWFRfVVNIT1JUKCBuZHAgKTsKKworCisgICAgICAgICAgICBpZiAoIHVuaSA+PSAweDExMDAwMFVMICkgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgVW5pY29kZSAqLworICAgICAgICAgICAgICBGVF9JTlZBTElEX0RBVEE7CisKKyAgICAgICAgICAgIGlmICggdW5pIDwgbGFzdFVuaSApCisgICAgICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKKworICAgICAgICAgICAgbGFzdFVuaSA9IHVuaSArIDFVOworCisgICAgICAgICAgICBpZiAoIHZhbGlkLT5sZXZlbCA+PSBGVF9WQUxJREFURV9USUdIVCAgICAmJgorICAgICAgICAgICAgICAgICBnaWQgPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgKQorICAgICAgICAgICAgICBGVF9JTlZBTElEX0dMWVBIX0lEOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUludCApCisgIHR0X2NtYXAxNF9jaGFyX2luZGV4KCBUVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGNtYXAgKTsKKyAgICBGVF9VTlVTRUQoIGNoYXJfY29kZSApOworCisgICAgLyogVGhpcyBjYW4ndCBoYXBwZW4gKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIgKQorICB0dF9jbWFwMTRfY2hhcl9uZXh0KCBUVF9DTWFwICAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKKyAgeworICAgIEZUX1VOVVNFRCggY21hcCApOworCisgICAgLyogVGhpcyBjYW4ndCBoYXBwZW4gKi8KKyAgICAqcGNoYXJfY29kZSA9IDA7CisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICB0dF9jbWFwMTRfZ2V0X2luZm8oIFRUX0NNYXAgICAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9VTlVTRUQoIGNtYXAgKTsKKworICAgIGNtYXBfaW5mby0+Zm9ybWF0ICAgPSAxNDsKKyAgICAvKiBzdWJ0YWJsZSAxNCBkb2VzIG5vdCBkZWZpbmUgYSBsYW5ndWFnZSBmaWVsZCAqLworICAgIGNtYXBfaW5mby0+bGFuZ3VhZ2UgPSAweEZGRkZGRkZGVUw7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICB0dF9jbWFwMTRfY2hhcl9tYXBfZGVmX2JpbmFyeSggRlRfQnl0ZSAgICAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50MzIgIG51bVJhbmdlcyA9IFRUX1BFRUtfVUxPTkcoIGJhc2UgKTsKKyAgICBGVF9VSW50MzIgIG1heCwgbWluOworCisKKyAgICBtaW4gPSAwOworICAgIG1heCA9IG51bVJhbmdlczsKKworICAgIGJhc2UgKz0gNDsKKworICAgIC8qIGJpbmFyeSBzZWFyY2ggKi8KKyAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgeworICAgICAgRlRfVUludDMyICBtaWQgICA9ICggbWluICsgbWF4ICkgPj4gMTsKKyAgICAgIEZUX0J5dGUqICAgcCAgICAgPSBiYXNlICsgNCAqIG1pZDsKKyAgICAgIEZUX1VMb25nICAgc3RhcnQgPSBUVF9ORVhUX1VJTlQyNCggcCApOworICAgICAgRlRfVUludCAgICBjbnQgICA9IEZUX05FWFRfQllURSggcCApOworCisKKyAgICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQorICAgICAgICBtYXggPSBtaWQ7CisgICAgICBlbHNlIGlmICggY2hhcl9jb2RlID4gc3RhcnQrY250ICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICB0dF9jbWFwMTRfY2hhcl9tYXBfbm9uZGVmX2JpbmFyeSggRlRfQnl0ZSAgICAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50MzIgIG51bU1hcHBpbmdzID0gVFRfUEVFS19VTE9ORyggYmFzZSApOworICAgIEZUX1VJbnQzMiAgbWF4LCBtaW47CisKKworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gbnVtTWFwcGluZ3M7CisKKyAgICBiYXNlICs9IDQ7CisKKyAgICAvKiBiaW5hcnkgc2VhcmNoICovCisgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgIHsKKyAgICAgIEZUX1VJbnQzMiAgbWlkID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgRlRfQnl0ZSogICBwICAgPSBiYXNlICsgNSAqIG1pZDsKKyAgICAgIEZUX1VJbnQzMiAgdW5pID0gKEZUX1VJbnQzMilUVF9ORVhUX1VJTlQyNCggcCApOworCisKKyAgICAgIGlmICggY2hhcl9jb2RlIDwgdW5pICkKKyAgICAgICAgbWF4ID0gbWlkOworICAgICAgZWxzZSBpZiAoIGNoYXJfY29kZSA+IHVuaSApCisgICAgICAgIG1pbiA9IG1pZCArIDE7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBUVF9QRUVLX1VTSE9SVCggcCApOworICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgRlRfQnl0ZSoKKyAgdHRfY21hcDE0X2ZpbmRfdmFyaWFudCggRlRfQnl0ZSAgICAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgdmFyaWFudENvZGUgKQorICB7CisgICAgRlRfVUludDMyICBudW1WYXIgPSBUVF9QRUVLX1VMT05HKCBiYXNlICk7CisgICAgRlRfVUludDMyICBtYXgsIG1pbjsKKworCisgICAgbWluID0gMDsKKyAgICBtYXggPSBudW1WYXI7CisKKyAgICBiYXNlICs9IDQ7CisKKyAgICAvKiBiaW5hcnkgc2VhcmNoICovCisgICAgd2hpbGUgKCBtaW4gPCBtYXggKQorICAgIHsKKyAgICAgIEZUX1VJbnQzMiAgbWlkICAgID0gKCBtaW4gKyBtYXggKSA+PiAxOworICAgICAgRlRfQnl0ZSogICBwICAgICAgPSBiYXNlICsgMTEgKiBtaWQ7CisgICAgICBGVF9VTG9uZyAgIHZhclNlbCA9IFRUX05FWFRfVUlOVDI0KCBwICk7CisKKworICAgICAgaWYgKCB2YXJpYW50Q29kZSA8IHZhclNlbCApCisgICAgICAgIG1heCA9IG1pZDsKKyAgICAgIGVsc2UgaWYgKCB2YXJpYW50Q29kZSA+IHZhclNlbCApCisgICAgICAgIG1pbiA9IG1pZCArIDE7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBwOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICB0dF9jbWFwMTRfY2hhcl92YXJfaW5kZXgoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwICAgIHVjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICB2YXJpYW50U2VsZWN0b3IgKQorICB7CisgICAgRlRfQnl0ZSogIHAgPSB0dF9jbWFwMTRfZmluZF92YXJpYW50KCBjbWFwLT5kYXRhICsgNiwgdmFyaWFudFNlbGVjdG9yICk7CisgICAgRlRfVUxvbmcgIGRlZk9mZjsKKyAgICBGVF9VTG9uZyAgbm9uZGVmT2ZmOworCisKKyAgICBpZiAoICFwICkKKyAgICAgIHJldHVybiAwOworCisgICAgZGVmT2ZmICAgID0gVFRfTkVYVF9VTE9ORyggcCApOworICAgIG5vbmRlZk9mZiA9IFRUX1BFRUtfVUxPTkcoIHAgKTsKKworICAgIGlmICggZGVmT2ZmICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHR0X2NtYXAxNF9jaGFyX21hcF9kZWZfYmluYXJ5KCBjbWFwLT5kYXRhICsgZGVmT2ZmLCBjaGFyY29kZSApICkKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhcmlhbnQgb2YgdGhpcyBjaGFyY29kZS4gIEdJRCBub3Qgc3RvcmVkICovCisgICAgICAvKiBoZXJlOyBzdG9yZWQgaW4gdGhlIG5vcm1hbCBVbmljb2RlIGNoYXJtYXAgaW5zdGVhZC4gICAgICAgICAgICovCisgICAgICByZXR1cm4gdWNtYXAtPmNtYXAuY2xhenotPmNoYXJfaW5kZXgoICZ1Y21hcC0+Y21hcCwgY2hhcmNvZGUgKTsKKyAgICB9CisKKyAgICBpZiAoIG5vbmRlZk9mZiAhPSAwICkKKyAgICAgIHJldHVybiB0dF9jbWFwMTRfY2hhcl9tYXBfbm9uZGVmX2JpbmFyeSggY21hcC0+ZGF0YSArIG5vbmRlZk9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmNvZGUgKTsKKworICAgIHJldHVybiAwOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0ludCApCisgIHR0X2NtYXAxNF9jaGFyX3Zhcl9pc2RlZmF1bHQoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICB2YXJpYW50U2VsZWN0b3IgKQorICB7CisgICAgRlRfQnl0ZSogIHAgPSB0dF9jbWFwMTRfZmluZF92YXJpYW50KCBjbWFwLT5kYXRhICsgNiwgdmFyaWFudFNlbGVjdG9yICk7CisgICAgRlRfVUxvbmcgIGRlZk9mZjsKKyAgICBGVF9VTG9uZyAgbm9uZGVmT2ZmOworCisKKyAgICBpZiAoICFwICkKKyAgICAgIHJldHVybiAtMTsKKworICAgIGRlZk9mZiAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBub25kZWZPZmYgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIGRlZk9mZiAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICB0dF9jbWFwMTRfY2hhcl9tYXBfZGVmX2JpbmFyeSggY21hcC0+ZGF0YSArIGRlZk9mZiwgY2hhcmNvZGUgKSApCisgICAgICByZXR1cm4gMTsKKworICAgIGlmICggbm9uZGVmT2ZmICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICB0dF9jbWFwMTRfY2hhcl9tYXBfbm9uZGVmX2JpbmFyeSggY21hcC0+ZGF0YSArIG5vbmRlZk9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyY29kZSApICE9IDAgICAgICAgICApCisgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAtMTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VSW50MzIqICkKKyAgdHRfY21hcDE0X3ZhcmlhbnRzKCBUVF9DTWFwICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgVFRfQ01hcDE0ICAgY21hcDE0ID0gKFRUX0NNYXAxNCljbWFwOworICAgIEZUX1VJbnQzMiAgIGNvdW50ICA9IGNtYXAxNC0+bnVtX3NlbGVjdG9yczsKKyAgICBGVF9CeXRlKiAgICBwICAgICAgPSBjbWFwLT5kYXRhICsgMTA7CisgICAgRlRfVUludDMyKiAgcmVzdWx0OworICAgIEZUX1VJbnQzMiAgIGk7CisKKworICAgIGlmICggdHRfY21hcDE0X2Vuc3VyZSggY21hcDE0LCAoIGNvdW50ICsgMSApLCBtZW1vcnkgKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IGNtYXAxNC0+cmVzdWx0czsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyArK2kgKQorICAgIHsKKyAgICAgIHJlc3VsdFtpXSA9IChGVF9VSW50MzIpVFRfTkVYVF9VSU5UMjQoIHAgKTsKKyAgICAgIHAgICAgICAgICs9IDg7CisgICAgfQorICAgIHJlc3VsdFtpXSA9IDA7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiAqICkKKyAgdHRfY21hcDE0X2NoYXJfdmFyaWFudHMoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICBjaGFyQ29kZSApCisgIHsKKyAgICBUVF9DTWFwMTQgICBjbWFwMTQgPSAoVFRfQ01hcDE0KSAgY21hcDsKKyAgICBGVF9VSW50MzIgICBjb3VudCAgPSBjbWFwMTQtPm51bV9zZWxlY3RvcnM7CisgICAgRlRfQnl0ZSogICAgcCAgICAgID0gY21hcC0+ZGF0YSArIDEwOworICAgIEZUX1VJbnQzMiogIHE7CisKKworICAgIGlmICggdHRfY21hcDE0X2Vuc3VyZSggY21hcDE0LCAoIGNvdW50ICsgMSApLCBtZW1vcnkgKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoIHEgPSBjbWFwMTQtPnJlc3VsdHM7IGNvdW50ID4gMDsgLS1jb3VudCApCisgICAgeworICAgICAgRlRfVUludDMyICB2YXJTZWwgICAgPSBUVF9ORVhUX1VJTlQyNCggcCApOworICAgICAgRlRfVUxvbmcgICBkZWZPZmYgICAgPSBUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBGVF9VTG9uZyAgIG5vbmRlZk9mZiA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworCisgICAgICBpZiAoICggZGVmT2ZmICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgdHRfY21hcDE0X2NoYXJfbWFwX2RlZl9iaW5hcnkoIGNtYXAtPmRhdGEgKyBkZWZPZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlICkgICAgICAgICAgICAgICAgICkgfHwKKyAgICAgICAgICAgKCBub25kZWZPZmYgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICB0dF9jbWFwMTRfY2hhcl9tYXBfbm9uZGVmX2JpbmFyeSggY21hcC0+ZGF0YSArIG5vbmRlZk9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgKSAhPSAwICAgICAgICAgKSApCisgICAgICB7CisgICAgICAgIHFbMF0gPSB2YXJTZWw7CisgICAgICAgIHErKzsKKyAgICAgIH0KKyAgICB9CisgICAgcVswXSA9IDA7CisKKyAgICByZXR1cm4gY21hcDE0LT5yZXN1bHRzOworICB9CisKKworICBzdGF0aWMgRlRfVUludAorICB0dF9jbWFwMTRfZGVmX2NoYXJfY291bnQoIEZUX0J5dGUgICpwICkKKyAgeworICAgIEZUX1VJbnQzMiAgbnVtUmFuZ2VzID0gKEZUX1VJbnQzMilUVF9ORVhUX1VMT05HKCBwICk7CisgICAgRlRfVUludCAgICB0b3QgICAgICAgPSAwOworCisKKyAgICBwICs9IDM7ICAvKiBwb2ludCB0byB0aGUgZmlyc3QgYGNudCcgZmllbGQgKi8KKyAgICBmb3IgKCA7IG51bVJhbmdlcyA+IDA7IG51bVJhbmdlcy0tICkKKyAgICB7CisgICAgICB0b3QgKz0gMSArIHBbMF07CisgICAgICBwICAgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4gdG90OworICB9CisKKworICBzdGF0aWMgRlRfVUludDMyKgorICB0dF9jbWFwMTRfZ2V0X2RlZl9jaGFycyggVFRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQorICB7CisgICAgVFRfQ01hcDE0ICAgY21hcDE0ID0gKFRUX0NNYXAxNCkgY21hcDsKKyAgICBGVF9VSW50MzIgICBudW1SYW5nZXM7CisgICAgRlRfVUludCAgICAgY250OworICAgIEZUX1VJbnQzMiogIHE7CisKKworICAgIGNudCAgICAgICA9IHR0X2NtYXAxNF9kZWZfY2hhcl9jb3VudCggcCApOworICAgIG51bVJhbmdlcyA9IChGVF9VSW50MzIpVFRfTkVYVF9VTE9ORyggcCApOworCisgICAgaWYgKCB0dF9jbWFwMTRfZW5zdXJlKCBjbWFwMTQsICggY250ICsgMSApLCBtZW1vcnkgKSApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoIHEgPSBjbWFwMTQtPnJlc3VsdHM7IG51bVJhbmdlcyA+IDA7IC0tbnVtUmFuZ2VzICkKKyAgICB7CisgICAgICBGVF9VSW50MzIgIHVuaSA9IChGVF9VSW50MzIpVFRfTkVYVF9VSU5UMjQoIHAgKTsKKworCisgICAgICBjbnQgPSBGVF9ORVhUX0JZVEUoIHAgKSArIDE7CisgICAgICBkbworICAgICAgeworICAgICAgICBxWzBdICA9IHVuaTsKKyAgICAgICAgdW5pICArPSAxOworICAgICAgICBxICAgICs9IDE7CisKKyAgICAgIH0gd2hpbGUgKCAtLWNudCAhPSAwICk7CisgICAgfQorICAgIHFbMF0gPSAwOworCisgICAgcmV0dXJuIGNtYXAxNC0+cmVzdWx0czsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQzMioKKyAgdHRfY21hcDE0X2dldF9ub25kZWZfY2hhcnMoIFRUX0NNYXAgICAgIGNtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICpwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgbWVtb3J5ICkKKyAgeworICAgIFRUX0NNYXAxNCAgIGNtYXAxNCA9IChUVF9DTWFwMTQpIGNtYXA7CisgICAgRlRfVUludDMyICAgbnVtTWFwcGluZ3M7CisgICAgRlRfVUludCAgICAgaTsKKyAgICBGVF9VSW50MzIgICpyZXQ7CisKKworICAgIG51bU1hcHBpbmdzID0gKEZUX1VJbnQzMilUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIHR0X2NtYXAxNF9lbnN1cmUoIGNtYXAxNCwgKCBudW1NYXBwaW5ncyArIDEgKSwgbWVtb3J5ICkgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXQgPSBjbWFwMTQtPnJlc3VsdHM7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1NYXBwaW5nczsgKytpICkKKyAgICB7CisgICAgICByZXRbaV0gPSAoRlRfVUludDMyKVRUX05FWFRfVUlOVDI0KCBwICk7CisgICAgICBwICs9IDI7CisgICAgfQorICAgIHJldFtpXSA9IDA7CisKKyAgICByZXR1cm4gcmV0OworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiAqICkKKyAgdHRfY21hcDE0X3ZhcmlhbnRfY2hhcnMoIFRUX0NNYXAgICAgY21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICB2YXJpYW50U2VsZWN0b3IgKQorICB7CisgICAgRlRfQnl0ZSAgICAqcCAgPSB0dF9jbWFwMTRfZmluZF92YXJpYW50KCBjbWFwLT5kYXRhICsgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRTZWxlY3RvciApOworICAgIEZUX0ludCAgICAgIGk7CisgICAgRlRfVUxvbmcgICAgZGVmT2ZmOworICAgIEZUX1VMb25nICAgIG5vbmRlZk9mZjsKKworCisgICAgaWYgKCAhcCApCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGRlZk9mZiAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBub25kZWZPZmYgPSBUVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIGRlZk9mZiA9PSAwICYmIG5vbmRlZk9mZiA9PSAwICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCBkZWZPZmYgPT0gMCApCisgICAgICByZXR1cm4gdHRfY21hcDE0X2dldF9ub25kZWZfY2hhcnMoIGNtYXAsIGNtYXAtPmRhdGEgKyBub25kZWZPZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworICAgIGVsc2UgaWYgKCBub25kZWZPZmYgPT0gMCApCisgICAgICByZXR1cm4gdHRfY21hcDE0X2dldF9kZWZfY2hhcnMoIGNtYXAsIGNtYXAtPmRhdGEgKyBkZWZPZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBCb3RoIGEgZGVmYXVsdCBhbmQgYSBub24tZGVmYXVsdCBnbHlwaCBzZXQ/ICBUaGF0J3MgcHJvYmFibHkgbm90ICovCisgICAgICAvKiBnb29kIGZvbnQgZGVzaWduLCBidXQgdGhlIHNwZWMgYWxsb3dzIGZvciBpdC4uLiAgICAgICAgICAgICAgICAgICovCisgICAgICBUVF9DTWFwMTQgIGNtYXAxNCA9IChUVF9DTWFwMTQpIGNtYXA7CisgICAgICBGVF9VSW50MzIgIG51bVJhbmdlczsKKyAgICAgIEZUX1VJbnQzMiAgbnVtTWFwcGluZ3M7CisgICAgICBGVF9VSW50MzIgIGR1bmk7CisgICAgICBGVF9VSW50MzIgIGRjbnQ7CisgICAgICBGVF9VSW50MzIgIG51bmk7CisgICAgICBGVF9CeXRlKiAgIGRwOworICAgICAgRlRfVUludCAgICBkaSwgbmksIGs7CisKKyAgICAgIEZUX1VJbnQzMiAgKnJldDsKKworCisgICAgICBwICA9IGNtYXAtPmRhdGEgKyBub25kZWZPZmY7CisgICAgICBkcCA9IGNtYXAtPmRhdGEgKyBkZWZPZmY7CisKKyAgICAgIG51bU1hcHBpbmdzID0gKEZUX1VJbnQzMilUVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBkY250ICAgICAgICA9IHR0X2NtYXAxNF9kZWZfY2hhcl9jb3VudCggZHAgKTsKKyAgICAgIG51bVJhbmdlcyAgID0gKEZUX1VJbnQzMilUVF9ORVhUX1VMT05HKCBkcCApOworCisgICAgICBpZiAoIG51bU1hcHBpbmdzID09IDAgKQorICAgICAgICByZXR1cm4gdHRfY21hcDE0X2dldF9kZWZfY2hhcnMoIGNtYXAsIGNtYXAtPmRhdGEgKyBkZWZPZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7CisgICAgICBpZiAoIGRjbnQgPT0gMCApCisgICAgICAgIHJldHVybiB0dF9jbWFwMTRfZ2V0X25vbmRlZl9jaGFycyggY21hcCwgY21hcC0+ZGF0YSArIG5vbmRlZk9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKTsKKworICAgICAgaWYgKCB0dF9jbWFwMTRfZW5zdXJlKCBjbWFwMTQsICggZGNudCArIG51bU1hcHBpbmdzICsgMSApLCBtZW1vcnkgKSApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICByZXQgID0gY21hcDE0LT5yZXN1bHRzOworICAgICAgZHVuaSA9IChGVF9VSW50MzIpVFRfTkVYVF9VSU5UMjQoIGRwICk7CisgICAgICBkY250ID0gRlRfTkVYVF9CWVRFKCBkcCApOworICAgICAgZGkgICA9IDE7CisgICAgICBudW5pID0gKEZUX1VJbnQzMilUVF9ORVhUX1VJTlQyNCggcCApOworICAgICAgcCAgICs9IDI7CisgICAgICBuaSAgID0gMTsKKyAgICAgIGkgICAgPSAwOworCisgICAgICBmb3IgKCA7OyApCisgICAgICB7CisgICAgICAgIGlmICggbnVuaSA+IGR1bmkgKyBkY250ICkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoIGsgPSAwOyBrIDw9IGRjbnQ7ICsrayApCisgICAgICAgICAgICByZXRbaSsrXSA9IGR1bmkgKyBrOworCisgICAgICAgICAgKytkaTsKKworICAgICAgICAgIGlmICggZGkgPiBudW1SYW5nZXMgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkdW5pID0gKEZUX1VJbnQzMilUVF9ORVhUX1VJTlQyNCggZHAgKTsKKyAgICAgICAgICBkY250ID0gRlRfTkVYVF9CWVRFKCBkcCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICggbnVuaSA8IGR1bmkgKQorICAgICAgICAgICAgcmV0W2krK10gPSBudW5pOworICAgICAgICAgIC8qIElmIGl0IGlzIHdpdGhpbiB0aGUgZGVmYXVsdCByYW5nZSB0aGVuIGlnbm9yZSBpdCAtLSAqLworICAgICAgICAgIC8qIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGhhcHBlbmVkICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICsrbmk7CisgICAgICAgICAgaWYgKCBuaSA+IG51bU1hcHBpbmdzICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgbnVuaSA9IChGVF9VSW50MzIpVFRfTkVYVF9VSU5UMjQoIHAgKTsKKyAgICAgICAgICBwICs9IDI7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBuaSA8PSBudW1NYXBwaW5ncyApCisgICAgICB7CisgICAgICAgIC8qIElmIHdlIGdldCBoZXJlIHRoZW4gd2UgaGF2ZSBydW4gb3V0IG9mIGFsbCBkZWZhdWx0IHJhbmdlcy4gICAqLworICAgICAgICAvKiBXZSBoYXZlIHJlYWQgb25lIG5vbi1kZWZhdWx0IG1hcHBpbmcgd2hpY2ggd2UgaGF2ZW4ndCBzdG9yZWQgKi8KKyAgICAgICAgLyogYW5kIHRoZXJlIG1heSBiZSBvdGhlcnMgdGhhdCBuZWVkIHRvIGJlIHJlYWQuICAgICAgICAgICAgICAgICovCisgICAgICAgIHJldFtpKytdID0gbnVuaTsKKyAgICAgICAgd2hpbGUgKCBuaSA8IG51bU1hcHBpbmdzICkKKyAgICAgICAgeworICAgICAgICAgIHJldFtpKytdID0gKEZUX1VJbnQzMilUVF9ORVhUX1VJTlQyNCggcCApOworICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICArK25pOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmICggZGkgPD0gbnVtUmFuZ2VzICkKKyAgICAgIHsKKyAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUgdGhlbiB3ZSBoYXZlIHJ1biBvdXQgb2YgYWxsIG5vbi1kZWZhdWx0ICAgICAqLworICAgICAgICAvKiBtYXBwaW5ncy4gIFdlIGhhdmUgcmVhZCBvbmUgZGVmYXVsdCByYW5nZSB3aGljaCB3ZSBoYXZlbid0ICovCisgICAgICAgIC8qIHN0b3JlZCBhbmQgdGhlcmUgbWF5IGJlIG90aGVycyB0aGF0IG5lZWQgdG8gYmUgcmVhZC4gICAgICAgKi8KKyAgICAgICAgZm9yICggayA9IDA7IGsgPD0gZGNudDsgKytrICkKKyAgICAgICAgICByZXRbaSsrXSA9IGR1bmkgKyBrOworCisgICAgICAgIHdoaWxlICggZGkgPCBudW1SYW5nZXMgKQorICAgICAgICB7CisgICAgICAgICAgZHVuaSA9IChGVF9VSW50MzIpVFRfTkVYVF9VSU5UMjQoIGRwICk7CisgICAgICAgICAgZGNudCA9IEZUX05FWFRfQllURSggZHAgKTsKKworICAgICAgICAgIGZvciAoIGsgPSAwOyBrIDw9IGRjbnQ7ICsrayApCisgICAgICAgICAgICByZXRbaSsrXSA9IGR1bmkgKyBrOworICAgICAgICAgICsrZGk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0W2ldID0gMDsKKworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgIH0KKworCisgIEZUX0RFRklORV9UVF9DTUFQKAorICAgIHR0X2NtYXAxNF9jbGFzc19yZWMsCisgICAgc2l6ZW9mICggVFRfQ01hcDE0UmVjICksCisKKyAgICAoRlRfQ01hcF9Jbml0RnVuYykgICAgIHR0X2NtYXAxNF9pbml0LAorICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgdHRfY21hcDE0X2RvbmUsCisgICAgKEZUX0NNYXBfQ2hhckluZGV4RnVuYyl0dF9jbWFwMTRfY2hhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyTmV4dEZ1bmMpIHR0X2NtYXAxNF9jaGFyX25leHQsCisKKyAgICAvKiBGb3JtYXQgMTQgZXh0ZW5zaW9uIGZ1bmN0aW9ucyAqLworICAgIChGVF9DTWFwX0NoYXJWYXJJbmRleEZ1bmMpICAgIHR0X2NtYXAxNF9jaGFyX3Zhcl9pbmRleCwKKyAgICAoRlRfQ01hcF9DaGFyVmFySXNEZWZhdWx0RnVuYyl0dF9jbWFwMTRfY2hhcl92YXJfaXNkZWZhdWx0LAorICAgIChGVF9DTWFwX1ZhcmlhbnRMaXN0RnVuYykgICAgIHR0X2NtYXAxNF92YXJpYW50cywKKyAgICAoRlRfQ01hcF9DaGFyVmFyaWFudExpc3RGdW5jKSB0dF9jbWFwMTRfY2hhcl92YXJpYW50cywKKyAgICAoRlRfQ01hcF9WYXJpYW50Q2hhckxpc3RGdW5jKSB0dF9jbWFwMTRfdmFyaWFudF9jaGFycywKKworICAgIDE0LAorICAgIChUVF9DTWFwX1ZhbGlkYXRlRnVuYyl0dF9jbWFwMTRfdmFsaWRhdGUsCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKXR0X2NtYXAxNF9nZXRfaW5mbyApCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTQgKi8KKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyAgc3RhdGljIGNvbnN0IFRUX0NNYXBfQ2xhc3MgIHR0X2NtYXBfY2xhc3Nlc1tdID0KKyAgeworI2RlZmluZSBUVENNQVBDSVRFTSggYSApICAmYSwKKyNpbmNsdWRlICJ0dGNtYXBjLmgiCisgICAgTlVMTCwKKyAgfTsKKworI2Vsc2UgLypGVF9DT05GSUdfT1BUSU9OX1BJQyovCisKKyAgdm9pZAorICBGVF9EZXN0cm95X0NsYXNzX3R0X2NtYXBfY2xhc3NlcyggRlRfTGlicmFyeSAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwX0NsYXNzKiAgY2xhenogKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIGlmICggY2xhenogKQorICAgICAgRlRfRlJFRSggY2xhenogKTsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgRlRfQ3JlYXRlX0NsYXNzX3R0X2NtYXBfY2xhc3NlcyggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9DTWFwX0NsYXNzKiogIG91dHB1dF9jbGFzcyApCisgIHsKKyAgICBUVF9DTWFwX0NsYXNzKiAgICAgY2xhenogID0gTlVMTDsKKyAgICBUVF9DTWFwX0NsYXNzUmVjKiAgcmVjczsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKKworICAgIGludCAgaSA9IDA7CisKKworI2RlZmluZSBUVENNQVBDSVRFTSggYSApIGkrKzsKKyNpbmNsdWRlICJ0dGNtYXBjLmgiCisKKyAgICAvKiBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGJvdGggdGhlIHBvaW50ZXJzICovCisgICAgLyogcGx1cyB0ZXJtaW5hdG9yIGFuZCB0aGUgY2xhc3MgaW5zdGFuY2VzICAgICAqLworICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqICggaSArIDEgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIFRUX0NNYXBfQ2xhc3NSZWMgKSAqIGkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAvKiB0aGUgbG9jYXRpb24gb2YgdGhlIGNsYXNzIGluc3RhbmNlcyBmb2xsb3dzIHRoZSBhcnJheSBvZiBwb2ludGVycyAqLworICAgIHJlY3MgPSAoVFRfQ01hcF9DbGFzc1JlYyopKCAoY2hhciopY2xhenogKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCAqY2xhenogKSAqICggaSArIDEgKSApOworICAgIGkgICAgPSAwOworCisjdW5kZWYgVFRDTUFQQ0lURU0KKyNkZWZpbmUgIFRUQ01BUENJVEVNKCBhICkgICAgICAgICAgICAgXAorICAgIEZUX0luaXRfQ2xhc3NfICMjIGEoICZyZWNzW2ldICk7ICBcCisgICAgY2xhenpbaV0gPSAmcmVjc1tpXTsgICAgICAgICAgICAgIFwKKyAgICBpKys7CisjaW5jbHVkZSAidHRjbWFwYy5oIgorCisgICAgY2xhenpbaV0gPSBOVUxMOworCisgICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworI2VuZGlmIC8qRlRfQ09ORklHX09QVElPTl9QSUMqLworCisKKyAgLyogcGFyc2UgdGhlIGBjbWFwJyB0YWJsZSBhbmQgYnVpbGQgdGhlIGNvcnJlc3BvbmRpbmcgVFRfQ01hcCBvYmplY3RzICovCisgIC8qIGluIHRoZSBjdXJyZW50IGZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfYnVpbGRfY21hcHMoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfQnl0ZSogICAgICAgICAgIHRhYmxlID0gZmFjZS0+Y21hcF90YWJsZTsKKyAgICBGVF9CeXRlKiAgICAgICAgICAgbGltaXQgPSB0YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKyAgICBGVF9VSW50IHZvbGF0aWxlICAgbnVtX2NtYXBzOworICAgIEZUX0J5dGUqIHZvbGF0aWxlICBwICAgICA9IHRhYmxlOworICAgIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5ID0gRlRfRkFDRV9MSUJSQVJZKCBmYWNlICk7CisKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKworCisgICAgaWYgKCAhcCB8fCBwICsgNCA+IGxpbWl0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgLyogb25seSByZWNvZ25pemUgZm9ybWF0IDAgKi8KKyAgICBpZiAoIFRUX05FWFRfVVNIT1JUKCBwICkgIT0gMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9idWlsZF9jbWFwczoiCisgICAgICAgICAgICAgICAgICIgdW5zdXBwb3J0ZWQgYGNtYXAnIHRhYmxlIGZvcm1hdCA9ICVkXG4iLAorICAgICAgICAgICAgICAgICBUVF9QRUVLX1VTSE9SVCggcCAtIDIgKSApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIH0KKworICAgIG51bV9jbWFwcyA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBmb3IgKCA7IG51bV9jbWFwcyA+IDAgJiYgcCArIDggPD0gbGltaXQ7IG51bV9jbWFwcy0tICkKKyAgICB7CisgICAgICBGVF9DaGFyTWFwUmVjICBjaGFybWFwOworICAgICAgRlRfVUludDMyICAgICAgb2Zmc2V0OworCisKKyAgICAgIGNoYXJtYXAucGxhdGZvcm1faWQgPSBUVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX05FWFRfVVNIT1JUKCBwICk7CisgICAgICBjaGFybWFwLmZhY2UgICAgICAgID0gRlRfRkFDRSggZmFjZSApOworICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX05PTkU7ICAvKiB3aWxsIGJlIGZpbGxlZCBsYXRlciAqLworICAgICAgb2Zmc2V0ICAgICAgICAgICAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgaWYgKCBvZmZzZXQgJiYgb2Zmc2V0IDw9IGZhY2UtPmNtYXBfc2l6ZSAtIDIgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiB2b2xhdGlsZSAgICAgICAgICAgICAgY21hcCAgID0gdGFibGUgKyBvZmZzZXQ7CisgICAgICAgIHZvbGF0aWxlIEZUX1VJbnQgICAgICAgICAgICAgICBmb3JtYXQgPSBUVF9QRUVLX1VTSE9SVCggY21hcCApOworICAgICAgICBjb25zdCBUVF9DTWFwX0NsYXNzKiB2b2xhdGlsZSAgcGNsYXp6ID0gVFRfQ01BUF9DTEFTU0VTX0dFVDsKKyAgICAgICAgVFRfQ01hcF9DbGFzcyB2b2xhdGlsZSAgICAgICAgIGNsYXp6OworCisKKyAgICAgICAgZm9yICggOyAqcGNsYXp6OyBwY2xhenorKyApCisgICAgICAgIHsKKyAgICAgICAgICBjbGF6eiA9ICpwY2xheno7CisgICAgICAgICAgaWYgKCBjbGF6ei0+Zm9ybWF0ID09IGZvcm1hdCApCisgICAgICAgICAgeworICAgICAgICAgICAgdm9sYXRpbGUgVFRfVmFsaWRhdG9yUmVjICB2YWxpZDsKKyAgICAgICAgICAgIHZvbGF0aWxlIEZUX0Vycm9yICAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgICAgICAgICAgZnRfdmFsaWRhdG9yX2luaXQoIEZUX1ZBTElEQVRPUiggJnZhbGlkICksIGNtYXAsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0RFRkFVTFQgKTsKKworICAgICAgICAgICAgdmFsaWQubnVtX2dseXBocyA9IChGVF9VSW50KWZhY2UtPm1heF9wcm9maWxlLm51bUdseXBoczsKKworICAgICAgICAgICAgaWYgKCBmdF9zZXRqbXAoIEZUX1ZBTElEQVRPUiggJnZhbGlkICktPmp1bXBfYnVmZmVyKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogdmFsaWRhdGUgdGhpcyBjbWFwIHN1Yi10YWJsZSAqLworICAgICAgICAgICAgICBlcnJvciA9IGNsYXp6LT52YWxpZGF0ZSggY21hcCwgRlRfVkFMSURBVE9SKCAmdmFsaWQgKSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHZhbGlkLnZhbGlkYXRvci5lcnJvciA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfQ01hcCAgdHRjbWFwOworCisKKyAgICAgICAgICAgICAgLyogSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBzdG9yZSB0aGUgc2luZ2xlIHZhcmlhdGlvbiAgICAgICAgICovCisgICAgICAgICAgICAgIC8qIHNlbGVjdG9yIGNtYXAgc29tZXdoZXJlIHNwZWNpYWwuICBCdXQgaXQgd291bGQgaGF2ZSB0byBiZSAqLworICAgICAgICAgICAgICAvKiBpbiB0aGUgcHVibGljIEZUX0ZhY2VSZWMsIGFuZCB3ZSBjYW4ndCBjaGFuZ2UgdGhhdC4gICAgICAgKi8KKworICAgICAgICAgICAgICBpZiAoICFGVF9DTWFwX05ldyggKEZUX0NNYXBfQ2xhc3MpY2xhenosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFwLCAmY2hhcm1hcCwgJnR0Y21hcCApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGl0IGlzIHNpbXBsZXIgdG8gZGlyZWN0bHkgc2V0IGBmbGFncycgdGhhbiBhZGRpbmcgKi8KKyAgICAgICAgICAgICAgICAvKiBhIHBhcmFtZXRlciB0byBGVF9DTWFwX05ldyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgKChUVF9DTWFwKXR0Y21hcCktPmZsYWdzID0gKEZUX0ludCllcnJvcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9UUkFDRTAoKCAidHRfZmFjZV9idWlsZF9jbWFwczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnJva2VuIGNtYXAgc3ViLXRhYmxlIGlnbm9yZWRcbiIgKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoICpwY2xhenogPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTAoKCAidHRfZmFjZV9idWlsZF9jbWFwczoiCisgICAgICAgICAgICAgICAgICAgICAgIiB1bnN1cHBvcnRlZCBjbWFwIHN1Yi10YWJsZSBpZ25vcmVkXG4iICkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZ2V0X2NtYXBfaW5mbyggRlRfQ2hhck1hcCAgICBjaGFybWFwLAorICAgICAgICAgICAgICAgICAgICBUVF9DTWFwSW5mbyAgKmNtYXBfaW5mbyApCisgIHsKKyAgICBGVF9DTWFwICAgICAgICBjbWFwICA9IChGVF9DTWFwKWNoYXJtYXA7CisgICAgVFRfQ01hcF9DbGFzcyAgY2xhenogPSAoVFRfQ01hcF9DbGFzcyljbWFwLT5jbGF6ejsKKworCisgICAgcmV0dXJuIGNsYXp6LT5nZXRfY21hcF9pbmZvKCBjaGFybWFwLCBjbWFwX2luZm8gKTsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcC5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRjbWFwLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0Y21hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUQ01BUF9IX18KKyNkZWZpbmUgX19UVENNQVBfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAorCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIFRUX0NNQVBfRkxBR19VTlNPUlRFRCAgICAgMQorI2RlZmluZSBUVF9DTUFQX0ZMQUdfT1ZFUkxBUFBJTkcgIDIKKworICB0eXBlZGVmIHN0cnVjdCAgVFRfQ01hcFJlY18KKyAgeworICAgIEZUX0NNYXBSZWMgIGNtYXA7CisgICAgRlRfQnl0ZSogICAgZGF0YTsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gaW4tbWVtb3J5IGNtYXAgdGFibGUgKi8KKyAgICBGVF9JbnQgICAgICBmbGFnczsgICAgICAgICAgLyogZm9yIGZvcm1hdCA0IG9ubHkgICAgICAgICAgICAgICAqLworCisgIH0gVFRfQ01hcFJlYywgKlRUX0NNYXA7CisKKyAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgVFRfQ01hcF9DbGFzc1JlY18qICBUVF9DTWFwX0NsYXNzOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0NNYXBfVmFsaWRhdGVGdW5jKSggRlRfQnl0ZSogICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmFsaWRhdG9yICB2YWxpZCApOworCisgIHR5cGVkZWYgc3RydWN0ICBUVF9DTWFwX0NsYXNzUmVjXworICB7CisgICAgRlRfQ01hcF9DbGFzc1JlYyAgICAgIGNsYXp6OworICAgIEZUX1VJbnQgICAgICAgICAgICAgICBmb3JtYXQ7CisgICAgVFRfQ01hcF9WYWxpZGF0ZUZ1bmMgIHZhbGlkYXRlOworICAgIFRUX0NNYXBfSW5mb19HZXRGdW5jICBnZXRfY21hcF9pbmZvOworCisgIH0gVFRfQ01hcF9DbGFzc1JlYzsKKworCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisKKyNkZWZpbmUgRlRfREVGSU5FX1RUX0NNQVAoIGNsYXNzXywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0XywgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9pbmRleF8sICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX25leHRfLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdmFyX2luZGV4XywgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl92YXJfZGVmYXVsdF8sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50X2xpc3RfLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ2YXJpYW50X2xpc3RfLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudGNoYXJfbGlzdF8sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlXywgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NtYXBfaW5mb18gKSAgICBcCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29uc3QgVFRfQ01hcF9DbGFzc1JlYyAgY2xhc3NfID0gICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZG9uZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjaGFyX2luZGV4XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNoYXJfbmV4dF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY2hhcl92YXJfaW5kZXhfLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjaGFyX3Zhcl9kZWZhdWx0XywgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHZhcmlhbnRfbGlzdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY2hhcnZhcmlhbnRfbGlzdF8sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB2YXJpYW50Y2hhcl9saXN0XyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9ybWF0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2YWxpZGF0ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9jbWFwX2luZm9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1RUX0NNQVAoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9pbmRleF8sICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX25leHRfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdmFyX2luZGV4XywgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl92YXJfZGVmYXVsdF8sICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50X2xpc3RfLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ2YXJpYW50X2xpc3RfLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudGNoYXJfbGlzdF8sICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlXywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NtYXBfaW5mb18gKSAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBUVF9DTWFwX0NsYXNzUmVjKiAgY2xhenogKSAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenotPmNsYXp6LnNpemUgICAgICAgICAgICAgPSBzaXplXzsgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Y2xhenouaW5pdCAgICAgICAgICAgICA9IGluaXRfOyAgICAgICAgICAgICAgXAorICAgIGNsYXp6LT5jbGF6ei5kb25lICAgICAgICAgICAgID0gZG9uZV87ICAgICAgICAgICAgICBcCisgICAgY2xhenotPmNsYXp6LmNoYXJfaW5kZXggICAgICAgPSBjaGFyX2luZGV4XzsgICAgICAgIFwKKyAgICBjbGF6ei0+Y2xhenouY2hhcl9uZXh0ICAgICAgICA9IGNoYXJfbmV4dF87ICAgICAgICAgXAorICAgIGNsYXp6LT5jbGF6ei5jaGFyX3Zhcl9pbmRleCAgID0gY2hhcl92YXJfaW5kZXhfOyAgICBcCisgICAgY2xhenotPmNsYXp6LmNoYXJfdmFyX2RlZmF1bHQgPSBjaGFyX3Zhcl9kZWZhdWx0XzsgIFwKKyAgICBjbGF6ei0+Y2xhenoudmFyaWFudF9saXN0ICAgICA9IHZhcmlhbnRfbGlzdF87ICAgICAgXAorICAgIGNsYXp6LT5jbGF6ei5jaGFydmFyaWFudF9saXN0ID0gY2hhcnZhcmlhbnRfbGlzdF87ICBcCisgICAgY2xhenotPmNsYXp6LnZhcmlhbnRjaGFyX2xpc3QgPSB2YXJpYW50Y2hhcl9saXN0XzsgIFwKKyAgICBjbGF6ei0+Zm9ybWF0ICAgICAgICAgICAgICAgICA9IGZvcm1hdF87ICAgICAgICAgICAgXAorICAgIGNsYXp6LT52YWxpZGF0ZSAgICAgICAgICAgICAgID0gdmFsaWRhdGVfOyAgICAgICAgICBcCisgICAgY2xhenotPmdldF9jbWFwX2luZm8gICAgICAgICAgPSBnZXRfY21hcF9pbmZvXzsgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisgIHR5cGVkZWYgc3RydWN0ICBUVF9WYWxpZGF0b3JSZWNfCisgIHsKKyAgICBGVF9WYWxpZGF0b3JSZWMgIHZhbGlkYXRvcjsKKyAgICBGVF9VSW50ICAgICAgICAgIG51bV9nbHlwaHM7CisKKyAgfSBUVF9WYWxpZGF0b3JSZWMsICpUVF9WYWxpZGF0b3I7CisKKworI2RlZmluZSBUVF9WQUxJREFUT1IoIHggKSAgICAgICAgICAoIChUVF9WYWxpZGF0b3IpKCB4ICkgKQorI2RlZmluZSBUVF9WQUxJRF9HTFlQSF9DT1VOVCggeCApICBUVF9WQUxJREFUT1IoIHggKS0+bnVtX2dseXBocworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9idWlsZF9jbWFwcyggVFRfRmFjZSAgZmFjZSApOworCisgIC8qIHVzZWQgaW4gdHQtY21hcHMgc2VydmljZSAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9nZXRfY21hcF9pbmZvKCBGVF9DaGFyTWFwICAgIGNoYXJtYXAsCisgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBJbmZvICAqY21hcF9pbmZvICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVENNQVBfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRjbWFwYy5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQ4OTQwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0Y21hcGMuaApAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGNtYXBjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVFQgQ01BUCBjbGFzc2VzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMAorICBUVENNQVBDSVRFTSggdHRfY21hcDBfY2xhc3NfcmVjICkKKyNlbmRpZgorCisjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzIKKyAgVFRDTUFQQ0lURU0oIHR0X2NtYXAyX2NsYXNzX3JlYyApCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF80CisgIFRUQ01BUENJVEVNKCB0dF9jbWFwNF9jbGFzc19yZWMgKQorI2VuZGlmCisKKyNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNgorICBUVENNQVBDSVRFTSggdHRfY21hcDZfY2xhc3NfcmVjICkKKyNlbmRpZgorCisjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzgKKyAgVFRDTUFQQ0lURU0oIHR0X2NtYXA4X2NsYXNzX3JlYyApCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMAorICBUVENNQVBDSVRFTSggdHRfY21hcDEwX2NsYXNzX3JlYyApCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMgorICBUVENNQVBDSVRFTSggdHRfY21hcDEyX2NsYXNzX3JlYyApCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xMworICBUVENNQVBDSVRFTSggdHRfY21hcDEzX2NsYXNzX3JlYyApCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xNAorICBUVENNQVBDSVRFTSggdHRfY21hcDE0X2NsYXNzX3JlYyApCisjZW5kaWYKKworCisgIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0a2Vybi5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0a2Vybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2NjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRrZXJuLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0a2Vybi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLworLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgInR0a2Vybi5oIgorCisjaW5jbHVkZSAic2ZlcnJvcnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0a2VybgorCisKKyN1bmRlZiAgVFRfS0VSTl9JTkRFWAorI2RlZmluZSBUVF9LRVJOX0lOREVYKCBnMSwgZzIgKSAgKCAoIChGVF9VTG9uZykoZzEpIDw8IDE2ICkgfCAoZzIpICkKKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfa2VybiggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9VTG9uZyAgIHRhYmxlX3NpemU7CisgICAgRlRfQnl0ZSogICBwOworICAgIEZUX0J5dGUqICAgcF9saW1pdDsKKyAgICBGVF9VSW50ICAgIG5uLCBudW1fdGFibGVzOworICAgIEZUX1VJbnQzMiAgYXZhaWwgPSAwLCBvcmRlcmVkID0gMDsKKworCisgICAgLyogdGhlIGtlcm4gdGFibGUgaXMgb3B0aW9uYWw7IGV4aXQgc2lsZW50bHkgaWYgaXQgaXMgbWlzc2luZyAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19rZXJuLCBzdHJlYW0sICZ0YWJsZV9zaXplICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIHRhYmxlX3NpemUgPCA0ICkgIC8qIHRoZSBjYXNlIG9mIGEgbWFsZm9ybWVkIHRhYmxlICovCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9sb2FkX2tlcm46IgorICAgICAgICAgICAgICAgICAiIGtlcm5pbmcgdGFibGUgaXMgdG9vIHNtYWxsIC0gaWdub3JlZFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFRhYmxlX01pc3NpbmcgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIEZUX0ZSQU1FX0VYVFJBQ1QoIHRhYmxlX3NpemUsIGZhY2UtPmtlcm5fdGFibGUgKSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9sb2FkX2tlcm46IgorICAgICAgICAgICAgICAgICAiIGNvdWxkIG5vdCBleHRyYWN0IGtlcm5pbmcgdGFibGVcbiIgKSk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZmFjZS0+a2Vybl90YWJsZV9zaXplID0gdGFibGVfc2l6ZTsKKworICAgIHAgICAgICAgPSBmYWNlLT5rZXJuX3RhYmxlOworICAgIHBfbGltaXQgPSBwICsgdGFibGVfc2l6ZTsKKworICAgIHAgICAgICAgICArPSAyOyAvKiBza2lwIHZlcnNpb24gKi8KKyAgICBudW1fdGFibGVzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGlmICggbnVtX3RhYmxlcyA+IDMyICkgLyogd2Ugb25seSBzdXBwb3J0IHVwIHRvIDMyIHN1Yi10YWJsZXMgKi8KKyAgICAgIG51bV90YWJsZXMgPSAzMjsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fdGFibGVzOyBubisrICkKKyAgICB7CisgICAgICBGVF9VSW50ICAgIG51bV9wYWlycywgbGVuZ3RoLCBjb3ZlcmFnZTsKKyAgICAgIEZUX0J5dGUqICAgcF9uZXh0OworICAgICAgRlRfVUludDMyICBtYXNrID0gKEZUX1VJbnQzMikxVUwgPDwgbm47CisKKworICAgICAgaWYgKCBwICsgNiA+IHBfbGltaXQgKQorICAgICAgICBicmVhazsKKworICAgICAgcF9uZXh0ID0gcDsKKworICAgICAgcCArPSAyOyAvKiBza2lwIHZlcnNpb24gKi8KKyAgICAgIGxlbmd0aCAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGNvdmVyYWdlID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgaWYgKCBsZW5ndGggPD0gNiArIDggKQorICAgICAgICBicmVhazsKKworICAgICAgcF9uZXh0ICs9IGxlbmd0aDsKKworICAgICAgaWYgKCBwX25leHQgPiBwX2xpbWl0ICkgIC8qIGhhbmRsZSBicm9rZW4gdGFibGUgKi8KKyAgICAgICAgcF9uZXh0ID0gcF9saW1pdDsKKworICAgICAgLyogb25seSB1c2UgaG9yaXpvbnRhbCBrZXJuaW5nIHRhYmxlcyAqLworICAgICAgaWYgKCAoIGNvdmVyYWdlICYgfjhVICkgIT0gMHgwMDAxIHx8CisgICAgICAgICAgIHAgKyA4ID4gcF9saW1pdCAgICAgICAgICAgICAgKQorICAgICAgICBnb3RvIE5leHRUYWJsZTsKKworICAgICAgbnVtX3BhaXJzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHAgICAgICAgICs9IDY7CisKKyAgICAgIGlmICggKCBwX25leHQgLSBwICkgPCA2ICogKGludCludW1fcGFpcnMgKSAvKiBoYW5kbGUgYnJva2VuIGNvdW50ICovCisgICAgICAgIG51bV9wYWlycyA9IChGVF9VSW50KSggKCBwX25leHQgLSBwICkgLyA2ICk7CisKKyAgICAgIGF2YWlsIHw9IG1hc2s7CisKKyAgICAgIC8qCisgICAgICAgKiAgTm93IGNoZWNrIHdoZXRoZXIgdGhlIHBhaXJzIGluIHRoaXMgdGFibGUgYXJlIG9yZGVyZWQuCisgICAgICAgKiAgV2UgdGhlbiBjYW4gdXNlIGJpbmFyeSBzZWFyY2guCisgICAgICAgKi8KKyAgICAgIGlmICggbnVtX3BhaXJzID4gMCApCisgICAgICB7CisgICAgICAgIEZUX1VMb25nICBjb3VudDsKKyAgICAgICAgRlRfVUxvbmcgIG9sZF9wYWlyOworCisKKyAgICAgICAgb2xkX3BhaXIgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgICAgIHAgICAgICAgKz0gMjsKKworICAgICAgICBmb3IgKCBjb3VudCA9IG51bV9wYWlycyAtIDE7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50MzIgIGN1cl9wYWlyOworCisKKyAgICAgICAgICBjdXJfcGFpciA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgICBpZiAoIGN1cl9wYWlyIDw9IG9sZF9wYWlyICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcCArPSAyOworICAgICAgICAgIG9sZF9wYWlyID0gY3VyX3BhaXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgICAgIG9yZGVyZWQgfD0gbWFzazsKKyAgICAgIH0KKworICAgIE5leHRUYWJsZToKKyAgICAgIHAgPSBwX25leHQ7CisgICAgfQorCisgICAgZmFjZS0+bnVtX2tlcm5fdGFibGVzID0gbm47CisgICAgZmFjZS0+a2Vybl9hdmFpbF9iaXRzID0gYXZhaWw7CisgICAgZmFjZS0+a2Vybl9vcmRlcl9iaXRzID0gb3JkZXJlZDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgdHRfZmFjZV9kb25lX2tlcm4oIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKworCisgICAgRlRfRlJBTUVfUkVMRUFTRSggZmFjZS0+a2Vybl90YWJsZSApOworICAgIGZhY2UtPmtlcm5fdGFibGVfc2l6ZSA9IDA7CisgICAgZmFjZS0+bnVtX2tlcm5fdGFibGVzID0gMDsKKyAgICBmYWNlLT5rZXJuX2F2YWlsX2JpdHMgPSAwOworICAgIGZhY2UtPmtlcm5fb3JkZXJfYml0cyA9IDA7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKKyAgdHRfZmFjZV9nZXRfa2VybmluZyggVFRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgbGVmdF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcmlnaHRfZ2x5cGggKQorICB7CisgICAgRlRfSW50ICAgIHJlc3VsdCA9IDA7CisgICAgRlRfVUludCAgIGNvdW50LCBtYXNrOworICAgIEZUX0J5dGUqICBwICAgICAgID0gZmFjZS0+a2Vybl90YWJsZTsKKyAgICBGVF9CeXRlKiAgcF9saW1pdCA9IHAgKyBmYWNlLT5rZXJuX3RhYmxlX3NpemU7CisKKworICAgIHAgICArPSA0OworICAgIG1hc2sgPSAweDAwMDE7CisKKyAgICBmb3IgKCBjb3VudCA9IGZhY2UtPm51bV9rZXJuX3RhYmxlczsKKyAgICAgICAgICBjb3VudCA+IDAgJiYgcCArIDYgPD0gcF9saW1pdDsKKyAgICAgICAgICBjb3VudC0tLCBtYXNrIDw8PSAxICkKKyAgICB7CisgICAgICBGVF9CeXRlKiBiYXNlICAgICA9IHA7CisgICAgICBGVF9CeXRlKiBuZXh0OworICAgICAgRlRfVUludCAgdmVyc2lvbiAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgbGVuZ3RoICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgY292ZXJhZ2UgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfVUludCAgbnVtX3BhaXJzOworICAgICAgRlRfSW50ICAgdmFsdWUgICAgPSAwOworCisgICAgICBGVF9VTlVTRUQoIHZlcnNpb24gKTsKKworCisgICAgICBuZXh0ID0gYmFzZSArIGxlbmd0aDsKKworICAgICAgaWYgKCBuZXh0ID4gcF9saW1pdCApICAvKiBoYW5kbGUgYnJva2VuIHRhYmxlICovCisgICAgICAgIG5leHQgPSBwX2xpbWl0OworCisgICAgICBpZiAoICggZmFjZS0+a2Vybl9hdmFpbF9iaXRzICYgbWFzayApID09IDAgKQorICAgICAgICBnb3RvIE5leHRUYWJsZTsKKworICAgICAgaWYgKCBwICsgOCA+IG5leHQgKQorICAgICAgICBnb3RvIE5leHRUYWJsZTsKKworICAgICAgbnVtX3BhaXJzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHAgICAgICAgICs9IDY7CisKKyAgICAgIGlmICggKCBuZXh0IC0gcCApIDwgNiAqIChpbnQpbnVtX3BhaXJzICkgIC8qIGhhbmRsZSBicm9rZW4gY291bnQgICovCisgICAgICAgIG51bV9wYWlycyA9IChGVF9VSW50KSggKCBuZXh0IC0gcCApIC8gNiApOworCisgICAgICBzd2l0Y2ggKCBjb3ZlcmFnZSA+PiA4ICkKKyAgICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgeworICAgICAgICAgIEZUX1VMb25nICBrZXkwID0gVFRfS0VSTl9JTkRFWCggbGVmdF9nbHlwaCwgcmlnaHRfZ2x5cGggKTsKKworCisgICAgICAgICAgaWYgKCBmYWNlLT5rZXJuX29yZGVyX2JpdHMgJiBtYXNrICkgICAvKiBiaW5hcnkgc2VhcmNoICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgIG1pbiA9IDA7CisgICAgICAgICAgICBGVF9VSW50ICAgbWF4ID0gbnVtX3BhaXJzOworCisKKyAgICAgICAgICAgIHdoaWxlICggbWluIDwgbWF4ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVUludCAgIG1pZCA9ICggbWluICsgbWF4ICkgPj4gMTsKKyAgICAgICAgICAgICAgRlRfQnl0ZSogIHEgICA9IHAgKyA2ICogbWlkOworICAgICAgICAgICAgICBGVF9VTG9uZyAga2V5OworCisKKyAgICAgICAgICAgICAga2V5ID0gRlRfTkVYVF9VTE9ORyggcSApOworCisgICAgICAgICAgICAgIGlmICgga2V5ID09IGtleTAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBGVF9QRUVLX1NIT1JUKCBxICk7CisgICAgICAgICAgICAgICAgZ290byBGb3VuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoIGtleSA8IGtleTAgKQorICAgICAgICAgICAgICAgIG1pbiA9IG1pZCArIDE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXggPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgLyogbGluZWFyIHNlYXJjaCAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1VJbnQgIGNvdW50MjsKKworCisgICAgICAgICAgICBmb3IgKCBjb3VudDIgPSBudW1fcGFpcnM7IGNvdW50MiA+IDA7IGNvdW50Mi0tICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfVUxvbmcgIGtleSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworCisgICAgICAgICAgICAgIGlmICgga2V5ID09IGtleTAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBGVF9QRUVLX1NIT1JUKCBwICk7CisgICAgICAgICAgICAgICAgZ290byBGb3VuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgLyoKKyAgICAgICAgKiAgV2UgZG9uJ3Qgc3VwcG9ydCBmb3JtYXQgMiBiZWNhdXNlIHdlIGhhdmVuJ3Qgc2VlbiBhIHNpbmdsZSBmb250CisgICAgICAgICogIHVzaW5nIGl0IGluIHJlYWwgbGlmZS4uLgorICAgICAgICAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICA7CisgICAgICB9CisKKyAgICAgIGdvdG8gTmV4dFRhYmxlOworCisgICAgRm91bmQ6CisgICAgICBpZiAoIGNvdmVyYWdlICYgOCApIC8qIG92ZXJyaWRlIG9yIGFkZCAqLworICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ICs9IHZhbHVlOworCisgICAgTmV4dFRhYmxlOgorICAgICAgcCA9IG5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisjdW5kZWYgVFRfS0VSTl9JTkRFWAorCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dGtlcm4uaCBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dGtlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNiMjRmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0a2Vybi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0a2Vybi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLworLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVEtFUk5fSF9fCisjZGVmaW5lIF9fVFRLRVJOX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciAgKQorICB0dF9mYWNlX2xvYWRfa2VybiggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHR0X2ZhY2VfZG9uZV9rZXJuKCBUVF9GYWNlICBmYWNlICk7CisKKyAgRlRfTE9DQUwoIEZUX0ludCApCisgIHR0X2ZhY2VfZ2V0X2tlcm5pbmcoIFRUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHJpZ2h0X2dseXBoICk7CisKKyNkZWZpbmUgVFRfRkFDRV9IQVNfS0VSTklORyggZmFjZSApICAoIChmYWNlKS0+a2Vybl9hdmFpbF9iaXRzICE9IDAgKQorCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRLRVJOX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bG9hZC5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjk3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRsb2FkLmMKQEAgLTAsMCArMSwxMzMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGxvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluICAgKi8KKy8qICAgIFRURiBvciBPVEYgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKyNpbmNsdWRlICJ0dGxvYWQuaCIKKworI2luY2x1ZGUgInNmZXJyb3JzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGxvYWQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2ZhY2VfbG9va3VwX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvb2tzIGZvciBhIFRydWVUeXBlIHRhYmxlIGJ5IG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBmYWNlIG9iamVjdCBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGFnICA6OiBUaGUgc2VhcmNoZWQgdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBwb2ludGVyIHRvIHRoZSB0YWJsZSBkaXJlY3RvcnkgZW50cnkuICAwIGlmIG5vdCBmb3VuZC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIFRUX1RhYmxlICApCisgIHR0X2ZhY2VfbG9va3VwX3RhYmxlKCBUVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB0YWcgICkKKyAgeworICAgIFRUX1RhYmxlICBlbnRyeTsKKyAgICBUVF9UYWJsZSAgbGltaXQ7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICBGVF9Cb29sICAgemVyb19sZW5ndGggPSBGQUxTRTsKKyNlbmRpZgorCisKKyAgICBGVF9UUkFDRTQoKCAidHRfZmFjZV9sb29rdXBfdGFibGU6ICUwOHAsIGAlYyVjJWMlYycgLS0gIiwKKyAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFnID4+IDI0ICksCisgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB0YWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHRhZyA+PiA4ICApLAorICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdGFnICAgICAgICkgKSk7CisKKyAgICBlbnRyeSA9IGZhY2UtPmRpcl90YWJsZXM7CisgICAgbGltaXQgPSBlbnRyeSArIGZhY2UtPm51bV90YWJsZXM7CisKKyAgICBmb3IgKCA7IGVudHJ5IDwgbGltaXQ7IGVudHJ5KysgKQorICAgIHsKKyAgICAgIC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggV2luZG93cywgd2UgY29uc2lkZXIgICAgKi8KKyAgICAgIC8qIHplcm8tbGVuZ3RoIHRhYmxlcyB0aGUgc2FtZSBhcyBtaXNzaW5nIHRhYmxlcy4gKi8KKyAgICAgIGlmICggZW50cnktPlRhZyA9PSB0YWcgKQorICAgICAgeworICAgICAgICBpZiAoIGVudHJ5LT5MZW5ndGggIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiZm91bmQgdGFibGUuXG4iICkpOworICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIHplcm9fbGVuZ3RoID0gVFJVRTsKKyNlbmRpZgorICAgICAgfQorICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCB6ZXJvX2xlbmd0aCApCisgICAgICBGVF9UUkFDRTQoKCAiaWdub3JpbmcgZW1wdHkgdGFibGVcbiIgKSk7CisgICAgZWxzZQorICAgICAgRlRfVFJBQ0U0KCggImNvdWxkIG5vdCBmaW5kIHRhYmxlXG4iICkpOworI2VuZGlmCisKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9nb3RvX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9va3MgZm9yIGEgVHJ1ZVR5cGUgdGFibGUgYnkgbmFtZSwgdGhlbiBzZWVrIGEgc3RyZWFtIHRvIGl0LiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgZmFjZSBvYmplY3QgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWcgICAgOjogVGhlIHNlYXJjaGVkIHRhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBUaGUgc3RyZWFtIHRvIHNlZWsgd2hlbiB0aGUgdGFibGUgaXMgZm91bmQuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlbmd0aCA6OiBUaGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfZ290b190YWJsZSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICkKKyAgeworICAgIFRUX1RhYmxlICB0YWJsZTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIHRhYmxlID0gdHRfZmFjZV9sb29rdXBfdGFibGUoIGZhY2UsIHRhZyApOworICAgIGlmICggdGFibGUgKQorICAgIHsKKyAgICAgIGlmICggbGVuZ3RoICkKKyAgICAgICAgKmxlbmd0aCA9IHRhYmxlLT5MZW5ndGg7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHRhYmxlLT5PZmZzZXQgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVGFibGVfTWlzc2luZyApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBIZXJlLCB3ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBjaGVjayB0aGF0IGBudW1fdGFibGVzJyBpcyB2YWxpZCAoYW5kIGFkanVzdCBpdCBpZiBuZWNlc3NhcnkpICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gbG9vayBmb3IgYSBgaGVhZCcgdGFibGUsIGNoZWNrIGl0cyBzaXplLCBhbmQgcGFyc2UgaXQgdG8gY2hlY2sgKi8KKyAgLyogICB3aGV0aGVyIGl0cyBgbWFnaWMnIGZpZWxkIGlzIGNvcnJlY3RseSBzZXQgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gZXJyb3JzIChleGNlcHQgZXJyb3JzIHJldHVybmVkIGJ5IHN0cmVhbSBoYW5kbGluZykgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgU0ZOVF9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIG5vIHRhYmxlIGlzIGRlZmluZWQgaW4gZGlyZWN0b3J5LCBpdCBpcyBub3Qgc2ZudC13cmFwcGVkICAgKi8KKyAgLyogICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgU0ZOVF9FcnJfVGFibGVfTWlzc2luZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIHRhYmxlIGRpcmVjdG9yeSBpcyB2YWxpZCwgYnV0IGVzc2VudGlhbCB0YWJsZXMgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgKGhlYWQvYmhlZC9TSU5HKSBhcmUgbWlzc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBjaGVja190YWJsZV9kaXIoIFNGTlRfSGVhZGVyICBzZm50LAorICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9VU2hvcnQgIG5uLCB2YWxpZF9lbnRyaWVzID0gMDsKKyAgICBGVF9VSW50ICAgIGhhc19oZWFkID0gMCwgaGFzX3NpbmcgPSAwLCBoYXNfbWV0YSA9IDA7CisgICAgRlRfVUxvbmcgICBvZmZzZXQgPSBzZm50LT5vZmZzZXQgKyAxMjsKKworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgdGFibGVfZGlyX2VudHJ5X2ZpZWxkc1tdID0KKyAgICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFRUX1RhYmxlUmVjCisKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCAxNiApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggVGFnICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HKCBDaGVja1N1bSApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggT2Zmc2V0ICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HKCBMZW5ndGggKSwKKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBzZm50LT5udW1fdGFibGVzOyBubisrICkKKyAgICB7CisgICAgICBUVF9UYWJsZVJlYyAgdGFibGU7CisKKworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHRhYmxlX2Rpcl9lbnRyeV9maWVsZHMsICZ0YWJsZSApICkKKyAgICAgIHsKKyAgICAgICAgbm4tLTsKKyAgICAgICAgRlRfVFJBQ0UyKCggImNoZWNrX3RhYmxlX2RpcjoiCisgICAgICAgICAgICAgICAgICAgICIgY2FuIHJlYWQgb25seSAlZCB0YWJsZSVzIGluIGZvbnQgKGluc3RlYWQgb2YgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBubiwgbm4gPT0gMSA/ICIiIDogInMiLCBzZm50LT5udW1fdGFibGVzICkpOworICAgICAgICBzZm50LT5udW1fdGFibGVzID0gbm47CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiB3ZSBpZ25vcmUgaW52YWxpZCB0YWJsZXMgKi8KKworICAgICAgaWYgKCB0YWJsZS5PZmZzZXQgPiBzdHJlYW0tPnNpemUgKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKCB0YWJsZS5MZW5ndGggPiBzdHJlYW0tPnNpemUgLSB0YWJsZS5PZmZzZXQgKQorICAgICAgeworICAgICAgICAvKiBTb21lIHRhYmxlcyBoYXZlIHN1Y2ggYSBzaW1wbGUgc3RydWN0dXJlIHRoYXQgY2xpcHBpbmcgaXRzICAgICAqLworICAgICAgICAvKiBjb250ZW50cyBpcyBoYXJtbGVzcy4gIFRoaXMgYWxzbyBtYWtlcyBGcmVlVHlwZSBsZXNzIHNlbnNpdGl2ZSAqLworICAgICAgICAvKiB0byBpbnZhbGlkIHRhYmxlIGxlbmd0aHMgKHdoaWNoIHByb2dyYW1zIGxpa2UgQWNyb3JlYWQgc2VlbSB0byAqLworICAgICAgICAvKiBpZ25vcmUgaW4gZ2VuZXJhbCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIGlmICggdGFibGUuVGFnID09IFRUQUdfaG10eCB8fAorICAgICAgICAgICAgIHRhYmxlLlRhZyA9PSBUVEFHX3ZtdHggKQorICAgICAgICAgIHZhbGlkX2VudHJpZXMrKzsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggImNoZWNrX3RhYmxlX2RpcjogdGFibGUgZW50cnkgJWQgaW52YWxpZFxuIiwgbm4gKSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgdmFsaWRfZW50cmllcysrOworCisgICAgICBpZiAoIHRhYmxlLlRhZyA9PSBUVEFHX2hlYWQgfHwgdGFibGUuVGFnID09IFRUQUdfYmhlZCApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQzMiAgbWFnaWM7CisKKworI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKyAgICAgICAgaWYgKCB0YWJsZS5UYWcgPT0gVFRBR19oZWFkICkKKyNlbmRpZgorICAgICAgICAgIGhhc19oZWFkID0gMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgdGFibGUgbGVuZ3RoIHNob3VsZCBiZSAweDM2LCBidXQgY2VydGFpbiBmb250IHRvb2xzIG1ha2UgaXQKKyAgICAgICAgICogMHgzOCwgc28gd2Ugd2lsbCBqdXN0IGNoZWNrIHRoYXQgaXQgaXMgZ3JlYXRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHRhYmxlIG11c3QgYmUKKyAgICAgICAgICogcGFkZGVkIHRvIDMyLWJpdCBsZW5ndGhzLCBidXQgdGhpcyBkb2Vzbid0IGFwcGx5IHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgKiBpdHMgYExlbmd0aCcgZmllbGQhCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBpZiAoIHRhYmxlLkxlbmd0aCA8IDB4MzYgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggImNoZWNrX3RhYmxlX2RpcjoiCisgICAgICAgICAgICAgICAgICAgICAgIiBgaGVhZCcgb3IgYGJoZWQnIHRhYmxlIHRvbyBzbWFsbFxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBUYWJsZV9NaXNzaW5nICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggdGFibGUuT2Zmc2V0ICsgMTIgKSB8fAorICAgICAgICAgICAgIEZUX1JFQURfVUxPTkcoIG1hZ2ljICkgICAgICAgICAgICAgICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCBtYWdpYyAhPSAweDVGMEYzQ0Y1VUwgKQorICAgICAgICAgIEZUX1RSQUNFMigoICJjaGVja190YWJsZV9kaXI6IgorICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBtYWdpYyBudW1iZXIgaW4gYGhlYWQnIG9yIGBiaGVkJyB0YWJsZVxuIikpOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCArICggbm4gKyAxICkgKiAxNiApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBlbHNlIGlmICggdGFibGUuVGFnID09IFRUQUdfU0lORyApCisgICAgICAgIGhhc19zaW5nID0gMTsKKyAgICAgIGVsc2UgaWYgKCB0YWJsZS5UYWcgPT0gVFRBR19NRVRBICkKKyAgICAgICAgaGFzX21ldGEgPSAxOworICAgIH0KKworICAgIHNmbnQtPm51bV90YWJsZXMgPSB2YWxpZF9lbnRyaWVzOworCisgICAgaWYgKCBzZm50LT5udW1fdGFibGVzID09IDAgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJjaGVja190YWJsZV9kaXI6IG5vIHRhYmxlcyBmb3VuZFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBpZiBgc2luZycgYW5kIGBtZXRhJyB0YWJsZXMgYXJlIHByZXNlbnQsIHRoZXJlIGlzIG5vIGBoZWFkJyB0YWJsZSAqLworICAgIGlmICggaGFzX2hlYWQgfHwgKCBoYXNfc2luZyAmJiBoYXNfbWV0YSApICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJjaGVja190YWJsZV9kaXI6IiApKTsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKyAgICAgIEZUX1RSQUNFMigoICIgbmVpdGhlciBgaGVhZCcsIGBiaGVkJywgbm9yIGBzaW5nJyB0YWJsZSBmb3VuZFxuIiApKTsKKyNlbHNlCisgICAgICBGVF9UUkFDRTIoKCAiIG5laXRoZXIgYGhlYWQnIG5vciBgc2luZycgdGFibGUgZm91bmRcbiIgKSk7CisjZW5kaWYKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFRhYmxlX01pc3NpbmcgKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2ZhY2VfbG9hZF9mb250X2RpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvYWRzIHRoZSBoZWFkZXIgb2YgYSBTRk5UIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2ZudCAgICAgICA6OiBUaGUgU0ZOVCBoZWFkZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb250IGRpcmVjdG9yeS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2ZvbnRfZGlyKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgU0ZOVF9IZWFkZXJSZWMgIHNmbnQ7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBUVF9UYWJsZVJlYyogICAgZW50cnk7CisgICAgRlRfSW50ICAgICAgICAgIG5uOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBvZmZzZXRfdGFibGVfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgU0ZOVF9IZWFkZXJSZWMKKworICAgICAgRlRfRlJBTUVfU1RBUlQoIDggKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBudW1fdGFibGVzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggc2VhcmNoX3JhbmdlICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggZW50cnlfc2VsZWN0b3IgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCByYW5nZV9zaGlmdCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworCisgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9mb250X2RpcjogJTA4cFxuIiwgZmFjZSApKTsKKworICAgIC8qIHJlYWQgdGhlIG9mZnNldCB0YWJsZSAqLworCisgICAgc2ZudC5vZmZzZXQgPSBGVF9TVFJFQU1fUE9TKCk7CisKKyAgICBpZiAoIEZUX1JFQURfVUxPTkcoIHNmbnQuZm9ybWF0X3RhZyApICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCBvZmZzZXRfdGFibGVfZmllbGRzLCAmc2ZudCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIG1hbnkgZm9udHMgZG9uJ3QgaGF2ZSB0aGVzZSBmaWVsZHMgc2V0IGNvcnJlY3RseSAqLworI2lmIDAKKyAgICBpZiAoIHNmbnQuc2VhcmNoX3JhbmdlICE9IDEgPDwgKCBzZm50LmVudHJ5X3NlbGVjdG9yICsgNCApICAgICAgICB8fAorICAgICAgICAgc2ZudC5zZWFyY2hfcmFuZ2UgKyBzZm50LnJhbmdlX3NoaWZ0ICE9IHNmbnQubnVtX3RhYmxlcyA8PCA0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworI2VuZGlmCisKKyAgICAvKiBsb2FkIHRoZSB0YWJsZSBkaXJlY3RvcnkgKi8KKworICAgIEZUX1RSQUNFMigoICItLSBOdW1iZXIgb2YgdGFibGVzOiAlMTB1XG4iLCAgICBzZm50Lm51bV90YWJsZXMgKSk7CisgICAgRlRfVFJBQ0UyKCggIi0tIEZvcm1hdCB2ZXJzaW9uOiAgIDB4JTA4bHhcbiIsIHNmbnQuZm9ybWF0X3RhZyApKTsKKworICAgIGlmICggc2ZudC5mb3JtYXRfdGFnICE9IFRUQUdfT1RUTyApCisgICAgeworICAgICAgLyogY2hlY2sgZmlyc3QgKi8KKyAgICAgIGVycm9yID0gY2hlY2tfdGFibGVfZGlyKCAmc2ZudCwgc3RyZWFtICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfbG9hZF9mb250X2RpcjoiCisgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCB0YWJsZSBkaXJlY3RvcnkgZm9yIFRydWVUeXBlXG4iICkpOworCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmYWNlLT5udW1fdGFibGVzID0gc2ZudC5udW1fdGFibGVzOworICAgIGZhY2UtPmZvcm1hdF90YWcgPSBzZm50LmZvcm1hdF90YWc7CisKKyAgICBpZiAoIEZUX1FORVdfQVJSQVkoIGZhY2UtPmRpcl90YWJsZXMsIGZhY2UtPm51bV90YWJsZXMgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzZm50Lm9mZnNldCArIDEyICkgICAgICAgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBmYWNlLT5udW1fdGFibGVzICogMTZMICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZW50cnkgPSBmYWNlLT5kaXJfdGFibGVzOworCisgICAgRlRfVFJBQ0UyKCggIlxuIgorICAgICAgICAgICAgICAgICIgIHRhZyAgICBvZmZzZXQgICAgbGVuZ3RoICAgY2hlY2tzdW1cbiIKKyAgICAgICAgICAgICAgICAiICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iICkpOworCisgICAgZm9yICggbm4gPSAwOyBubiA8IHNmbnQubnVtX3RhYmxlczsgbm4rKyApCisgICAgeworICAgICAgZW50cnktPlRhZyAgICAgID0gRlRfR0VUX1RBRzQoKTsKKyAgICAgIGVudHJ5LT5DaGVja1N1bSA9IEZUX0dFVF9VTE9ORygpOworICAgICAgZW50cnktPk9mZnNldCAgID0gRlRfR0VUX1VMT05HKCk7CisgICAgICBlbnRyeS0+TGVuZ3RoICAgPSBGVF9HRVRfVUxPTkcoKTsKKworICAgICAgLyogaWdub3JlIGludmFsaWQgdGFibGVzIHRoYXQgY2FuJ3QgYmUgc2FuaXRpemVkICovCisKKyAgICAgIGlmICggZW50cnktPk9mZnNldCA+IHN0cmVhbS0+c2l6ZSApCisgICAgICAgIGNvbnRpbnVlOworICAgICAgZWxzZSBpZiAoIGVudHJ5LT5MZW5ndGggPiBzdHJlYW0tPnNpemUgLSBlbnRyeS0+T2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBlbnRyeS0+VGFnID09IFRUQUdfaG10eCB8fAorICAgICAgICAgICAgIGVudHJ5LT5UYWcgPT0gVFRBR192bXR4ICkKKyAgICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgRlRfVUxvbmcgIG9sZF9sZW5ndGggPSBlbnRyeS0+TGVuZ3RoOworI2VuZGlmCisKKworICAgICAgICAgIC8qIG1ha2UgbWV0cmljcyB0YWJsZSBsZW5ndGggYSBtdWx0aXBsZSBvZiA0ICovCisgICAgICAgICAgZW50cnktPkxlbmd0aCA9ICggc3RyZWFtLT5zaXplIC0gZW50cnktPk9mZnNldCApICYgfjNVOworCisgICAgICAgICAgRlRfVFJBQ0UyKCggIiAgJWMlYyVjJWMgICUwOGx4ICAlMDhseCAgJTA4bHgiCisgICAgICAgICAgICAgICAgICAgICAgIiAoc2FuaXRpemVkOyBvcmlnaW5hbCBsZW5ndGggJTA4bHgpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiAyNCApLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiAxNiApLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiA4ICApLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5PZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgZW50cnktPkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Q2hlY2tTdW0sCisgICAgICAgICAgICAgICAgICAgICAgb2xkX2xlbmd0aCApKTsKKyAgICAgICAgICBlbnRyeSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgJWMlYyVjJWMgICUwOGx4ICAlMDhseCAgJTA4bHhcbiIsCisgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiAyNCApLAorICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIGVudHJ5LT5UYWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDggICksCisgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Q2hlY2tTdW0gKSk7CisgICAgICAgIGVudHJ5Kys7CisgICAgICB9CisgICAgfQorCisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgICAgRlRfVFJBQ0UyKCggInRhYmxlIGRpcmVjdG9yeSBsb2FkZWRcblxuIiApKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX2FueSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZHMgYW55IGZvbnQgdGFibGUgaW50byBjbGllbnQgbWVtb3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IFRoZSBmYWNlIG9iamVjdCB0byBsb29rIGZvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0YWcgICAgOjogVGhlIHRhZyBvZiB0YWJsZSB0byBsb2FkLiAgVXNlIHRoZSB2YWx1ZSAwIGlmIHlvdSB3YW50ICAgKi8KKyAgLyogICAgICAgICAgICAgIHRvIGFjY2VzcyB0aGUgd2hvbGUgZm9udCBmaWxlLCBlbHNlIHNldCB0aGlzIHBhcmFtZXRlciAgICovCisgIC8qICAgICAgICAgICAgICB0byBhIHZhbGlkIFRydWVUeXBlIHRhYmxlIHRhZyB0aGF0IHlvdSBjYW4gZm9yZ2Ugd2l0aCAgICAqLworICAvKiAgICAgICAgICAgICAgdGhlIE1BS0VfVFRfVEFHIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9mZnNldCA6OiBUaGUgc3RhcnRpbmcgb2Zmc2V0IGluIHRoZSB0YWJsZSAob3IgdGhlIGZpbGUgaWYgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgdGFnID09IDApLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlbmd0aCA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgZGVjaXNpb24gdmFyaWFibGU6ICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgSWYgbGVuZ3RoID09IE5VTEw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgTG9hZHMgdGhlIHdob2xlIHRhYmxlLiAgUmV0dXJucyBhbiBlcnJvciBpZiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGBvZmZzZXQnID09IDAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgIElmICpsZW5ndGggPT0gMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIEV4aXRzIGltbWVkaWF0ZWx5OyByZXR1cm5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gKi8KKyAgLyogICAgICAgICAgICAgICAgICB0YWJsZSBvciBvZiB0aGUgZm9udCBmaWxlLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mICovCisgIC8qICAgICAgICAgICAgICAgICAgYHRhZycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgSWYgKmxlbmd0aCAhPSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgTG9hZHMgdGhlIG5leHQgYGxlbmd0aCcgYnl0ZXMgb2YgdGFibGUgb3IgZm9udCwgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IG9mZnNldCBgb2Zmc2V0JyAoaW4gdGFibGUgb3IgZm9udCB0b28pLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBidWZmZXIgOjogVGhlIGFkZHJlc3Mgb2YgdGFyZ2V0IGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfYW55KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfU3RyZWFtICBzdHJlYW07CisgICAgVFRfVGFibGUgICB0YWJsZTsKKyAgICBGVF9VTG9uZyAgIHNpemU7CisKKworICAgIGlmICggdGFnICE9IDAgKQorICAgIHsKKyAgICAgIC8qIGxvb2sgZm9yIHRhZyBpbiBmb250IGRpcmVjdG9yeSAqLworICAgICAgdGFibGUgPSB0dF9mYWNlX2xvb2t1cF90YWJsZSggZmFjZSwgdGFnICk7CisgICAgICBpZiAoICF0YWJsZSApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIFRhYmxlX01pc3NpbmcgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBvZmZzZXQgKz0gdGFibGUtPk9mZnNldDsKKyAgICAgIHNpemUgICAgPSB0YWJsZS0+TGVuZ3RoOworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiB0YWcgPT0gMCAtLSB0aGUgdXNlciB3YW50cyB0byBhY2Nlc3MgdGhlIGZvbnQgZmlsZSBkaXJlY3RseSAqLworICAgICAgc2l6ZSA9IGZhY2UtPnJvb3Quc3RyZWFtLT5zaXplOworCisgICAgaWYgKCBsZW5ndGggJiYgKmxlbmd0aCA9PSAwICkKKyAgICB7CisgICAgICAqbGVuZ3RoID0gc2l6ZTsKKworICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisKKyAgICBpZiAoIGxlbmd0aCApCisgICAgICBzaXplID0gKmxlbmd0aDsKKworICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgIC8qIHRoZSBgaWYnIGlzIHN5bnRhY3RpYyBzdWdhciBmb3IgcGlja3kgY29tcGlsZXJzICovCisgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9BVCggb2Zmc2V0LCBidWZmZXIsIHNpemUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2ZhY2VfbG9hZF9nZW5lcmljX2hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvYWRzIHRoZSBUcnVlVHlwZSB0YWJsZSBgaGVhZCcgb3IgYGJoZWQnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfZmFjZV9sb2FkX2dlbmVyaWNfaGVhZGVyKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICB0YWcgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgVFRfSGVhZGVyKiAgaGVhZGVyOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBoZWFkZXJfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfSGVhZGVyCisKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCA1NCApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAoIFRhYmxlX1ZlcnNpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBGb250X1JldmlzaW9uICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggQ2hlY2tTdW1fQWRqdXN0ICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggTWFnaWNfTnVtYmVyICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggRmxhZ3MgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBVbml0c19QZXJfRU0gKSwKKyAgICAgICAgRlRfRlJBTUVfTE9ORyAgKCBDcmVhdGVkWzBdICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggQ3JlYXRlZFsxXSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIE1vZGlmaWVkWzBdICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggTW9kaWZpZWRbMV0gKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCB4TWluICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeU1pbiApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHhNYXggKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCB5TWF4ICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggTWFjX1N0eWxlICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggTG93ZXN0X1JlY19QUEVNICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggRm9udF9EaXJlY3Rpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBJbmRleF9Ub19Mb2NfRm9ybWF0ICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggR2x5cGhfRGF0YV9Gb3JtYXQgKSwKKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgdGFnLCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGhlYWRlciA9ICZmYWNlLT5oZWFkZXI7CisKKyAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggaGVhZGVyX2ZpZWxkcywgaGVhZGVyICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfVFJBQ0UzKCggIlVuaXRzIHBlciBFTTogJTR1XG4iLCBoZWFkZXItPlVuaXRzX1Blcl9FTSApKTsKKyAgICBGVF9UUkFDRTMoKCAiSW5kZXhUb0xvYzogICAlNGRcbiIsIGhlYWRlci0+SW5kZXhfVG9fTG9jX0Zvcm1hdCApKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9oZWFkKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICByZXR1cm4gdHRfZmFjZV9sb2FkX2dlbmVyaWNfaGVhZGVyKCBmYWNlLCBzdHJlYW0sIFRUQUdfaGVhZCApOworICB9CisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfYmhlZCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgcmV0dXJuIHR0X2ZhY2VfbG9hZF9nZW5lcmljX2hlYWRlciggZmFjZSwgc3RyZWFtLCBUVEFHX2JoZWQgKTsKKyAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfbWF4X3Byb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyB0aGUgbWF4aW11bSBwcm9maWxlIGludG8gYSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9tYXhwKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgVFRfTWF4UHJvZmlsZSogIG1heFByb2ZpbGUgPSAmZmFjZS0+bWF4X3Byb2ZpbGU7CisKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIG1heHBfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfTWF4UHJvZmlsZQorCisgICAgICBGVF9GUkFNRV9TVEFSVCggNiApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIHZlcnNpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBudW1HbHlwaHMgKSwKKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIG1heHBfZmllbGRzX2V4dHJhW10gPQorICAgIHsKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCAyNiApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heFBvaW50cyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heENvbnRvdXJzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbWF4Q29tcG9zaXRlUG9pbnRzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbWF4Q29tcG9zaXRlQ29udG91cnMgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBtYXhab25lcyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heFR3aWxpZ2h0UG9pbnRzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbWF4U3RvcmFnZSApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heEZ1bmN0aW9uRGVmcyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heEluc3RydWN0aW9uRGVmcyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heFN0YWNrRWxlbWVudHMgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBtYXhDb21wb25lbnRFbGVtZW50cyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heENvbXBvbmVudERlcHRoICksCisgICAgICBGVF9GUkFNRV9FTkQKKyAgICB9OworCisKKyAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfbWF4cCwgc3RyZWFtLCAwICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggbWF4cF9maWVsZHMsIG1heFByb2ZpbGUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBtYXhQcm9maWxlLT5tYXhQb2ludHMgICAgICAgICAgICAgPSAwOworICAgIG1heFByb2ZpbGUtPm1heENvbnRvdXJzICAgICAgICAgICA9IDA7CisgICAgbWF4UHJvZmlsZS0+bWF4Q29tcG9zaXRlUG9pbnRzICAgID0gMDsKKyAgICBtYXhQcm9maWxlLT5tYXhDb21wb3NpdGVDb250b3VycyAgPSAwOworICAgIG1heFByb2ZpbGUtPm1heFpvbmVzICAgICAgICAgICAgICA9IDA7CisgICAgbWF4UHJvZmlsZS0+bWF4VHdpbGlnaHRQb2ludHMgICAgID0gMDsKKyAgICBtYXhQcm9maWxlLT5tYXhTdG9yYWdlICAgICAgICAgICAgPSAwOworICAgIG1heFByb2ZpbGUtPm1heEZ1bmN0aW9uRGVmcyAgICAgICA9IDA7CisgICAgbWF4UHJvZmlsZS0+bWF4SW5zdHJ1Y3Rpb25EZWZzICAgID0gMDsKKyAgICBtYXhQcm9maWxlLT5tYXhTdGFja0VsZW1lbnRzICAgICAgPSAwOworICAgIG1heFByb2ZpbGUtPm1heFNpemVPZkluc3RydWN0aW9ucyA9IDA7CisgICAgbWF4UHJvZmlsZS0+bWF4Q29tcG9uZW50RWxlbWVudHMgID0gMDsKKyAgICBtYXhQcm9maWxlLT5tYXhDb21wb25lbnREZXB0aCAgICAgPSAwOworCisgICAgaWYgKCBtYXhQcm9maWxlLT52ZXJzaW9uID49IDB4MTAwMDBMICkKKyAgICB7CisgICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggbWF4cF9maWVsZHNfZXh0cmEsIG1heFByb2ZpbGUgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogWFhYOiBhbiBhZGp1c3RtZW50IHRoYXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgY2VydGFpbiAqLworICAgICAgLyogICAgICBicm9rZW4gZm9udHMgbGlrZSBgS2V5c3Ryb2tlcyBNVCcgOi0oICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICBXZSBhbGxvY2F0ZSA2NCBmdW5jdGlvbiBlbnRyaWVzIGJ5IGRlZmF1bHQgd2hlbiAgICAqLworICAgICAgLyogICB0aGUgbWF4RnVuY3Rpb25EZWZzIHZhbHVlIGlzIHNtYWxsZXIuICAgICAgICAgICAgICAqLworCisgICAgICBpZiAoIG1heFByb2ZpbGUtPm1heEZ1bmN0aW9uRGVmcyA8IDY0ICkKKyAgICAgICAgbWF4UHJvZmlsZS0+bWF4RnVuY3Rpb25EZWZzID0gNjQ7CisKKyAgICAgIC8qIHdlIGFkZCA0IHBoYW50b20gcG9pbnRzIGxhdGVyICovCisgICAgICBpZiAoIG1heFByb2ZpbGUtPm1heFR3aWxpZ2h0UG9pbnRzID4gKCAweEZGRkZVIC0gNCApICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UwKCggInR0X2ZhY2VfbG9hZF9tYXhwOiIKKyAgICAgICAgICAgICAgICAgICAgIiB0b28gbXVjaCB0d2lsaWdodCBwb2ludHMgaW4gYG1heHAnIHRhYmxlO1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAiIHNvbWUgZ2x5cGhzIG1pZ2h0IGJlIHJlbmRlcmVkIGluY29ycmVjdGx5XG4iICkpOworCisgICAgICAgIG1heFByb2ZpbGUtPm1heFR3aWxpZ2h0UG9pbnRzID0gMHhGRkZGVSAtIDQ7CisgICAgICB9CisKKyAgICAgIC8qIHdlIGFyYml0cmFyaWx5IGxpbWl0IHJlY3Vyc2lvbiB0byBhdm9pZCBzdGFjayBleGhhdXN0aW9uICovCisgICAgICBpZiAoIG1heFByb2ZpbGUtPm1heENvbXBvbmVudERlcHRoID4gMTAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UwKCggInR0X2ZhY2VfbG9hZF9tYXhwOiIKKyAgICAgICAgICAgICAgICAgICAgIiBhYm5vcm1hbGx5IGxhcmdlIGNvbXBvbmVudCBkZXB0aCAoJWQpIHNldCB0byAxMDBcbiIsCisgICAgICAgICAgICAgICAgICAgIG1heFByb2ZpbGUtPm1heENvbXBvbmVudERlcHRoICkpOworICAgICAgICBtYXhQcm9maWxlLT5tYXhDb21wb25lbnREZXB0aCA9IDEwMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBGVF9UUkFDRTMoKCAibnVtR2x5cGhzOiAldVxuIiwgbWF4UHJvZmlsZS0+bnVtR2x5cGhzICkpOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyB0aGUgbmFtZSByZWNvcmRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9uYW1lKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgRlRfVUxvbmcgICAgICB0YWJsZV9wb3MsIHRhYmxlX2xlbjsKKyAgICBGVF9VTG9uZyAgICAgIHN0b3JhZ2Vfc3RhcnQsIHN0b3JhZ2VfbGltaXQ7CisgICAgRlRfVUludCAgICAgICBjb3VudDsKKyAgICBUVF9OYW1lVGFibGUgIHRhYmxlOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBuYW1lX3RhYmxlX2ZpZWxkc1tdID0KKyAgICB7CisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFRUX05hbWVUYWJsZVJlYworCisgICAgICBGVF9GUkFNRV9TVEFSVCggNiApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGZvcm1hdCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG51bU5hbWVSZWNvcmRzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggc3RvcmFnZU9mZnNldCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgbmFtZV9yZWNvcmRfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfTmFtZUVudHJ5UmVjCisKKyAgICAgIC8qIG5vIEZUX0ZSQU1FX1NUQVJUICovCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggcGxhdGZvcm1JRCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGVuY29kaW5nSUQgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBsYW5ndWFnZUlEICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbmFtZUlEICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggc3RyaW5nTGVuZ3RoICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggc3RyaW5nT2Zmc2V0ICksCisgICAgICBGVF9GUkFNRV9FTkQKKyAgICB9OworCisKKyAgICB0YWJsZSAgICAgICAgID0gJmZhY2UtPm5hbWVfdGFibGU7CisgICAgdGFibGUtPnN0cmVhbSA9IHN0cmVhbTsKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19uYW1lLCBzdHJlYW0sICZ0YWJsZV9sZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHRhYmxlX3BvcyA9IEZUX1NUUkVBTV9QT1MoKTsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIG5hbWVfdGFibGVfZmllbGRzLCB0YWJsZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIFNvbWUgcG9wdWxhciBBc2lhbiBmb250cyBoYXZlIGFuIGludmFsaWQgYHN0b3JhZ2VPZmZzZXQnIHZhbHVlICAgKi8KKyAgICAvKiAoaXQgc2hvdWxkIGJlIGF0IGxlYXN0ICI2ICsgMTIqbnVtX25hbWVzIikuICBIb3dldmVyLCB0aGUgc3RyaW5nICovCisgICAgLyogb2Zmc2V0cywgY29tcHV0ZWQgYXMgInN0b3JhZ2VPZmZzZXQgKyBlbnRyeS0+c3RyaW5nT2Zmc2V0IiwgYXJlICAqLworICAgIC8qIHZhbGlkIHBvaW50ZXJzIHdpdGhpbiB0aGUgbmFtZSB0YWJsZS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogV2UgdGh1cyBjYW4ndCBjaGVjayBgc3RvcmFnZU9mZnNldCcgcmlnaHQgbm93LiAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzdG9yYWdlX3N0YXJ0ID0gdGFibGVfcG9zICsgNiArIDEyKnRhYmxlLT5udW1OYW1lUmVjb3JkczsKKyAgICBzdG9yYWdlX2xpbWl0ID0gdGFibGVfcG9zICsgdGFibGVfbGVuOworCisgICAgaWYgKCBzdG9yYWdlX3N0YXJ0ID4gc3RvcmFnZV9saW1pdCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9sb2FkX25hbWU6IGludmFsaWQgYG5hbWUnIHRhYmxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggTmFtZV9UYWJsZV9NaXNzaW5nICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQWxsb2NhdGUgdGhlIGFycmF5IG9mIG5hbWUgcmVjb3Jkcy4gKi8KKyAgICBjb3VudCAgICAgICAgICAgICAgICAgPSB0YWJsZS0+bnVtTmFtZVJlY29yZHM7CisgICAgdGFibGUtPm51bU5hbWVSZWNvcmRzID0gMDsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCB0YWJsZS0+bmFtZXMsIGNvdW50ICkgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBjb3VudCAqIDEyICkgICAgICAgICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIExvYWQgdGhlIG5hbWUgcmVjb3JkcyBhbmQgZGV0ZXJtaW5lIGhvdyBtdWNoIHN0b3JhZ2UgaXMgbmVlZGVkICovCisgICAgLyogdG8gaG9sZCB0aGUgc3RyaW5ncyB0aGVtc2VsdmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB7CisgICAgICBUVF9OYW1lRW50cnlSZWMqICBlbnRyeSA9IHRhYmxlLT5uYW1lczsKKworCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICB7CisgICAgICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBuYW1lX3JlY29yZF9maWVsZHMsIGVudHJ5ICkgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIGNoZWNrIHRoYXQgdGhlIG5hbWUgaXMgbm90IGVtcHR5ICovCisgICAgICAgIGlmICggZW50cnktPnN0cmluZ0xlbmd0aCA9PSAwICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBuYW1lIHN0cmluZyBpcyB3aXRoaW4gdGhlIHRhYmxlICovCisgICAgICAgIGVudHJ5LT5zdHJpbmdPZmZzZXQgKz0gdGFibGVfcG9zICsgdGFibGUtPnN0b3JhZ2VPZmZzZXQ7CisgICAgICAgIGlmICggZW50cnktPnN0cmluZ09mZnNldCAgICAgICAgICAgICAgICAgICAgICAgPCBzdG9yYWdlX3N0YXJ0IHx8CisgICAgICAgICAgICAgZW50cnktPnN0cmluZ09mZnNldCArIGVudHJ5LT5zdHJpbmdMZW5ndGggPiBzdG9yYWdlX2xpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGludmFsaWQgZW50cnkgLSBpZ25vcmUgaXQgKi8KKyAgICAgICAgICBlbnRyeS0+c3RyaW5nT2Zmc2V0ID0gMDsKKyAgICAgICAgICBlbnRyeS0+c3RyaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5Kys7CisgICAgICB9CisKKyAgICAgIHRhYmxlLT5udW1OYW1lUmVjb3JkcyA9IChGVF9VSW50KSggZW50cnkgLSB0YWJsZS0+bmFtZXMgKTsKKyAgICB9CisKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAvKiBldmVyeXRoaW5nIHdlbnQgd2VsbCwgdXBkYXRlIGZhY2UtPm51bV9uYW1lcyAqLworICAgIGZhY2UtPm51bV9uYW1lcyA9IChGVF9VU2hvcnQpIHRhYmxlLT5udW1OYW1lUmVjb3JkczsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9mcmVlX25hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZXMgdGhlIG5hbWUgcmVjb3Jkcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfbmFtZSggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QuZHJpdmVyLT5yb290Lm1lbW9yeTsKKyAgICBUVF9OYW1lVGFibGUgIHRhYmxlICA9ICZmYWNlLT5uYW1lX3RhYmxlOworICAgIFRUX05hbWVFbnRyeSAgZW50cnkgID0gdGFibGUtPm5hbWVzOworICAgIEZUX1VJbnQgICAgICAgY291bnQgID0gdGFibGUtPm51bU5hbWVSZWNvcmRzOworCisKKyAgICBpZiAoIHRhYmxlLT5uYW1lcyApCisgICAgeworICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIGVudHJ5KysgKQorICAgICAgeworICAgICAgICBGVF9GUkVFKCBlbnRyeS0+c3RyaW5nICk7CisgICAgICAgIGVudHJ5LT5zdHJpbmdMZW5ndGggPSAwOworICAgICAgfQorCisgICAgICAvKiBmcmVlIHN0cmluZ3MgdGFibGUgKi8KKyAgICAgIEZUX0ZSRUUoIHRhYmxlLT5uYW1lcyApOworICAgIH0KKworICAgIHRhYmxlLT5udW1OYW1lUmVjb3JkcyA9IDA7CisgICAgdGFibGUtPmZvcm1hdCAgICAgICAgID0gMDsKKyAgICB0YWJsZS0+c3RvcmFnZU9mZnNldCAgPSAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfY21hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyB0aGUgY21hcCBkaXJlY3RvcnkgaW4gYSBmYWNlIG9iamVjdC4gIFRoZSBjbWFwcyB0aGVtc2VsdmVzICAgKi8KKyAgLyogICAgYXJlIGxvYWRlZCBvbiBkZW1hbmQgaW4gdGhlIGB0dGNtYXAuYycgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9jbWFwKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19jbWFwLCBzdHJlYW0sICZmYWNlLT5jbWFwX3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggZmFjZS0+Y21hcF9zaXplLCBmYWNlLT5jbWFwX3RhYmxlICkgKQorICAgICAgZmFjZS0+Y21hcF9zaXplID0gMDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfb3MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyB0aGUgT1MyIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9vczIoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIFRUX09TMiogICBvczI7CisKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIG9zMl9maWVsZHNbXSA9CisgICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUVF9PUzIKKworICAgICAgRlRfRlJBTUVfU1RBUlQoIDc4ICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggdmVyc2lvbiApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHhBdmdDaGFyV2lkdGggKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c1dlaWdodENsYXNzICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggdXNXaWR0aENsYXNzICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggZnNUeXBlICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN1YnNjcmlwdFhTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN1YnNjcmlwdFlTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN1YnNjcmlwdFhPZmZzZXQgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCB5U3Vic2NyaXB0WU9mZnNldCApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHlTdXBlcnNjcmlwdFhTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN1cGVyc2NyaXB0WVNpemUgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCB5U3VwZXJzY3JpcHRYT2Zmc2V0ICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN1cGVyc2NyaXB0WU9mZnNldCApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHlTdHJpa2VvdXRTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggeVN0cmlrZW91dFBvc2l0aW9uICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggc0ZhbWlseUNsYXNzICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzBdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzFdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzJdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzNdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzRdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzVdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzZdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzddICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzhdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggcGFub3NlWzldICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggdWxVbmljb2RlUmFuZ2UxICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggdWxVbmljb2RlUmFuZ2UyICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggdWxVbmljb2RlUmFuZ2UzICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggdWxVbmljb2RlUmFuZ2U0ICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggYWNoVmVuZElEWzBdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggYWNoVmVuZElEWzFdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggYWNoVmVuZElEWzJdICksCisgICAgICAgIEZUX0ZSQU1FX0JZVEUgICggYWNoVmVuZElEWzNdICksCisKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBmc1NlbGVjdGlvbiApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHVzRmlyc3RDaGFySW5kZXggKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c0xhc3RDaGFySW5kZXggKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBzVHlwb0FzY2VuZGVyICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggc1R5cG9EZXNjZW5kZXIgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBzVHlwb0xpbmVHYXAgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c1dpbkFzY2VudCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHVzV2luRGVzY2VudCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIC8qIGBPUy8yJyB2ZXJzaW9uIDEgYW5kIG5ld2VyICovCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBvczJfZmllbGRzX2V4dHJhMVtdID0KKyAgICB7CisgICAgICBGVF9GUkFNRV9TVEFSVCggOCApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggdWxDb2RlUGFnZVJhbmdlMSApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggdWxDb2RlUGFnZVJhbmdlMiApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIC8qIGBPUy8yJyB2ZXJzaW9uIDIgYW5kIG5ld2VyICovCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBvczJfZmllbGRzX2V4dHJhMltdID0KKyAgICB7CisgICAgICBGVF9GUkFNRV9TVEFSVCggMTAgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBzeEhlaWdodCApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHNDYXBIZWlnaHQgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c0RlZmF1bHRDaGFyICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggdXNCcmVha0NoYXIgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c01heENvbnRleHQgKSwKKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKyAgICAvKiBgT1MvMicgdmVyc2lvbiA1IGFuZCBuZXdlciAqLworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgb3MyX2ZpZWxkc19leHRyYTVbXSA9CisgICAgeworICAgICAgRlRfRlJBTUVfU1RBUlQoIDQgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCB1c0xvd2VyT3B0aWNhbFBvaW50U2l6ZSApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHVzVXBwZXJPcHRpY2FsUG9pbnRTaXplICksCisgICAgICBGVF9GUkFNRV9FTkQKKyAgICB9OworCisKKyAgICAvKiBXZSBub3cgc3VwcG9ydCBvbGQgTWFjIGZvbnRzIHdoZXJlIHRoZSBPUy8yIHRhYmxlIGRvZXNuJ3QgICovCisgICAgLyogZXhpc3QuICBTaW1wbHkgcHV0LCB3ZSBzZXQgdGhlIGB2ZXJzaW9uJyBmaWVsZCB0byAweEZGRkYgICAqLworICAgIC8qIGFuZCB0ZXN0IHRoaXMgdmFsdWUgZWFjaCB0aW1lIHdlIG5lZWQgdG8gYWNjZXNzIHRoZSB0YWJsZS4gKi8KKyAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfT1MyLCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIG9zMiA9ICZmYWNlLT5vczI7CisKKyAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggb3MyX2ZpZWxkcywgb3MyICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgb3MyLT51bENvZGVQYWdlUmFuZ2UxICAgICAgICA9IDA7CisgICAgb3MyLT51bENvZGVQYWdlUmFuZ2UyICAgICAgICA9IDA7CisgICAgb3MyLT5zeEhlaWdodCAgICAgICAgICAgICAgICA9IDA7CisgICAgb3MyLT5zQ2FwSGVpZ2h0ICAgICAgICAgICAgICA9IDA7CisgICAgb3MyLT51c0RlZmF1bHRDaGFyICAgICAgICAgICA9IDA7CisgICAgb3MyLT51c0JyZWFrQ2hhciAgICAgICAgICAgICA9IDA7CisgICAgb3MyLT51c01heENvbnRleHQgICAgICAgICAgICA9IDA7CisgICAgb3MyLT51c0xvd2VyT3B0aWNhbFBvaW50U2l6ZSA9IDA7CisgICAgb3MyLT51c1VwcGVyT3B0aWNhbFBvaW50U2l6ZSA9IDB4RkZGRjsKKworICAgIGlmICggb3MyLT52ZXJzaW9uID49IDB4MDAwMSApCisgICAgeworICAgICAgLyogb25seSB2ZXJzaW9uIDEgdGFibGVzICovCisgICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggb3MyX2ZpZWxkc19leHRyYTEsIG9zMiApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoIG9zMi0+dmVyc2lvbiA+PSAweDAwMDIgKQorICAgICAgeworICAgICAgICAvKiBvbmx5IHZlcnNpb24gMiB0YWJsZXMgKi8KKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIG9zMl9maWVsZHNfZXh0cmEyLCBvczIgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGlmICggb3MyLT52ZXJzaW9uID49IDB4MDAwNSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBvbmx5IHZlcnNpb24gNSB0YWJsZXMgKi8KKyAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggb3MyX2ZpZWxkc19leHRyYTUsIG9zMiApICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIEZUX1RSQUNFMygoICJzVHlwb0FzY2VuZGVyOiAgJTRkXG4iLCAgIG9zMi0+c1R5cG9Bc2NlbmRlciApKTsKKyAgICBGVF9UUkFDRTMoKCAic1R5cG9EZXNjZW5kZXI6ICU0ZFxuIiwgICBvczItPnNUeXBvRGVzY2VuZGVyICkpOworICAgIEZUX1RSQUNFMygoICJ1c1dpbkFzY2VudDogICAgJTR1XG4iLCAgIG9zMi0+dXNXaW5Bc2NlbnQgKSk7CisgICAgRlRfVFJBQ0UzKCggInVzV2luRGVzY2VudDogICAlNHVcbiIsICAgb3MyLT51c1dpbkRlc2NlbnQgKSk7CisgICAgRlRfVFJBQ0UzKCggImZzU2VsZWN0aW9uOiAgICAweCUyeFxuIiwgb3MyLT5mc1NlbGVjdGlvbiApKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX3Bvc3RzY3JpcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZHMgdGhlIFBvc3RzY3JpcHQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfcG9zdCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworICAgIFRUX1Bvc3RzY3JpcHQqICBwb3N0ID0gJmZhY2UtPnBvc3RzY3JpcHQ7CisKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBvc3RfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfUG9zdHNjcmlwdAorCisgICAgICBGVF9GUkFNRV9TVEFSVCggMzIgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcoIEZvcm1hdFR5cGUgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcoIGl0YWxpY0FuZ2xlICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUKCB1bmRlcmxpbmVQb3NpdGlvbiApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCggdW5kZXJsaW5lVGhpY2tuZXNzICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HKCBpc0ZpeGVkUGl0Y2ggKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcoIG1pbk1lbVR5cGU0MiApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggbWF4TWVtVHlwZTQyICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HKCBtaW5NZW1UeXBlMSApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyggbWF4TWVtVHlwZTEgKSwKKyAgICAgIEZUX0ZSQU1FX0VORAorICAgIH07CisKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19wb3N0LCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBwb3N0X2ZpZWxkcywgcG9zdCApICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIC8qIHdlIGRvbid0IGxvYWQgdGhlIGdseXBoIG5hbWVzLCB3ZSBkbyB0aGF0IGluIGFub3RoZXIgKi8KKyAgICAvKiBtb2R1bGUgKHR0cG9zdCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9UUkFDRTMoKCAiRm9ybWF0VHlwZTogICAweCV4XG4iLCBwb3N0LT5Gb3JtYXRUeXBlICkpOworICAgIEZUX1RSQUNFMygoICJpc0ZpeGVkUGl0Y2g6ICAgJXNcbiIsIHBvc3QtPmlzRml4ZWRQaXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIiAgeWVzIiA6ICIgICBubyIgKSk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfcGNsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyB0aGUgUENMIDUgVGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9wY2x0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBjbHRfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfUENMVAorCisgICAgICBGVF9GUkFNRV9TVEFSVCggNTQgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBWZXJzaW9uICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggRm9udE51bWJlciApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIFBpdGNoICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggeEhlaWdodCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIFN0eWxlICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggVHlwZUZhbWlseSApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIENhcEhlaWdodCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIFN5bWJvbFNldCApLAorICAgICAgICBGVF9GUkFNRV9CWVRFUyAoIFR5cGVGYWNlLCAxNiApLAorICAgICAgICBGVF9GUkFNRV9CWVRFUyAoIENoYXJhY3RlckNvbXBsZW1lbnQsIDggKSwKKyAgICAgICAgRlRfRlJBTUVfQllURVMgKCBGaWxlTmFtZSwgNiApLAorICAgICAgICBGVF9GUkFNRV9DSEFSICAoIFN0cm9rZVdlaWdodCApLAorICAgICAgICBGVF9GUkFNRV9DSEFSICAoIFdpZHRoVHlwZSApLAorICAgICAgICBGVF9GUkFNRV9CWVRFICAoIFNlcmlmU3R5bGUgKSwKKyAgICAgICAgRlRfRlJBTUVfQllURSAgKCBSZXNlcnZlZCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICBUVF9QQ0xUKiAgcGNsdCA9ICZmYWNlLT5wY2x0OworCisKKyAgICAvKiBvcHRpb25hbCB0YWJsZSAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19QQ0xULCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBwY2x0X2ZpZWxkcywgcGNsdCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX2dhc3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZHMgdGhlIGBnYXNwJyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfZ2FzcCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisgICAgRlRfVUludCAgICAgICAgaixudW1fcmFuZ2VzOworICAgIFRUX0dhc3BSYW5nZSAgIGdhc3ByYW5nZXMgPSBOVUxMOworCisKKyAgICAvKiB0aGUgZ2FzcCB0YWJsZSBpcyBvcHRpb25hbCAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19nYXNwLCBzdHJlYW0sIDAgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfRlJBTUVfRU5URVIoIDRMICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZmFjZS0+Z2FzcC52ZXJzaW9uICAgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgZmFjZS0+Z2FzcC5udW1SYW5nZXMgPSBGVF9HRVRfVVNIT1JUKCk7CisKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAvKiBvbmx5IHN1cHBvcnQgdmVyc2lvbnMgMCBhbmQgMSBvZiB0aGUgdGFibGUgKi8KKyAgICBpZiAoIGZhY2UtPmdhc3AudmVyc2lvbiA+PSAyICkKKyAgICB7CisgICAgICBmYWNlLT5nYXNwLm51bVJhbmdlcyA9IDA7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbnVtX3JhbmdlcyA9IGZhY2UtPmdhc3AubnVtUmFuZ2VzOworICAgIEZUX1RSQUNFMygoICJudW1SYW5nZXM6ICV1XG4iLCBudW1fcmFuZ2VzICkpOworCisgICAgaWYgKCBGVF9RTkVXX0FSUkFZKCBmYWNlLT5nYXNwLmdhc3BSYW5nZXMsIG51bV9yYW5nZXMgKSB8fAorICAgICAgICAgRlRfRlJBTUVfRU5URVIoIG51bV9yYW5nZXMgKiA0TCApICAgICAgICAgICAgICAgICAgKQorICAgICAgZ290byBFeGl0OworCisgICAgZ2FzcHJhbmdlcyA9IGZhY2UtPmdhc3AuZ2FzcFJhbmdlczsKKworICAgIGZvciAoIGogPSAwOyBqIDwgbnVtX3JhbmdlczsgaisrICkKKyAgICB7CisgICAgICBnYXNwcmFuZ2VzW2pdLm1heFBQRU0gID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgZ2FzcHJhbmdlc1tqXS5nYXNwRmxhZyA9IEZUX0dFVF9VU0hPUlQoKTsKKworICAgICAgRlRfVFJBQ0UzKCggImdhc3BSYW5nZSAlZDogcmFuZ2VNYXhQUEVNICU1ZCwgcmFuZ2VHYXNwQmVoYXZpb3IgMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgICBnYXNwcmFuZ2VzW2pdLm1heFBQRU0sCisgICAgICAgICAgICAgICAgICBnYXNwcmFuZ2VzW2pdLmdhc3BGbGFnICkpOworICAgIH0KKworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bG9hZC5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZDkxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRsb2FkLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0bG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMsIGkuZS4sIHRhYmxlcyB0aGF0IGNhbiBiZSBlaXRoZXIgaW4gICAqLworLyogICAgVFRGIG9yIE9URiBmb250cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVExPQURfSF9fCisjZGVmaW5lIF9fVFRMT0FEX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCBUVF9UYWJsZSAgKQorICB0dF9mYWNlX2xvb2t1cF90YWJsZSggVFRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdGFnICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9nb3RvX3RhYmxlKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBsZW5ndGggKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9mb250X2RpciggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfYW55KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgdGFnLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfaGVhZCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9jbWFwKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX21heHAoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfbmFtZSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9vczIoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9wb3N0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3BjbHQoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfbmFtZSggVFRfRmFjZSAgZmFjZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2dhc3AoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfYmhlZCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRMT0FEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bXR4LmMgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRtdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODMwOWFhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bXR4LmMKQEAgLTAsMCArMSwyODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0bXR4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKGJvZHkpLiAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSAidHRtdHguaCIKKworI2luY2x1ZGUgInNmZXJyb3JzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dG10eAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX2htdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZCB0aGUgYGhtdHgnIG9yIGB2bXR4JyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRpY2FsIDo6IEEgYm9vbGVhbiBmbGFnLiAgSWYgc2V0LCBsb2FkIGB2bXR4Jy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9obXR4KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgdmVydGljYWwgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9VTG9uZyAgIHRhZywgdGFibGVfc2l6ZTsKKyAgICBGVF9VTG9uZyogIHB0YWJsZV9vZmZzZXQ7CisgICAgRlRfVUxvbmcqICBwdGFibGVfc2l6ZTsKKworCisgICAgaWYgKCB2ZXJ0aWNhbCApCisgICAgeworICAgICAgdGFnICAgICAgICAgICA9IFRUQUdfdm10eDsKKyAgICAgIHB0YWJsZV9vZmZzZXQgPSAmZmFjZS0+dmVydF9tZXRyaWNzX29mZnNldDsKKyAgICAgIHB0YWJsZV9zaXplICAgPSAmZmFjZS0+dmVydF9tZXRyaWNzX3NpemU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0YWcgICAgICAgICAgID0gVFRBR19obXR4OworICAgICAgcHRhYmxlX29mZnNldCA9ICZmYWNlLT5ob3J6X21ldHJpY3Nfb2Zmc2V0OworICAgICAgcHRhYmxlX3NpemUgICA9ICZmYWNlLT5ob3J6X21ldHJpY3Nfc2l6ZTsKKyAgICB9CisKKyAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIHRhZywgc3RyZWFtLCAmdGFibGVfc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgKnB0YWJsZV9zaXplICAgPSB0YWJsZV9zaXplOworICAgICpwdGFibGVfb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpOworCisgIEZhaWw6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfaGhlYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIHRoZSBgaGhlYScgb3IgJ3ZoZWEnIHRhYmxlIGludG8gYSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydGljYWwgOjogQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgYHZoZWEnLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2hoZWEoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICB2ZXJ0aWNhbCApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgVFRfSG9yaUhlYWRlciogIGhlYWRlcjsKKworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgbWV0cmljc19oZWFkZXJfZmllbGRzW10gPQorICAgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgVFRfSG9yaUhlYWRlcgorCisgICAgICBGVF9GUkFNRV9TVEFSVCggMzYgKSwKKyAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBWZXJzaW9uICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggQXNjZW5kZXIgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBEZXNjZW5kZXIgKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBMaW5lX0dhcCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGFkdmFuY2VfV2lkdGhfTWF4ICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggbWluX0xlZnRfU2lkZV9CZWFyaW5nICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggbWluX1JpZ2h0X1NpZGVfQmVhcmluZyApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIHhNYXhfRXh0ZW50ICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggY2FyZXRfU2xvcGVfUmlzZSApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIGNhcmV0X1Nsb3BlX1J1biApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIGNhcmV0X09mZnNldCApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIFJlc2VydmVkWzBdICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggUmVzZXJ2ZWRbMV0gKSwKKyAgICAgICAgRlRfRlJBTUVfU0hPUlQgKCBSZXNlcnZlZFsyXSApLAorICAgICAgICBGVF9GUkFNRV9TSE9SVCAoIFJlc2VydmVkWzNdICksCisgICAgICAgIEZUX0ZSQU1FX1NIT1JUICggbWV0cmljX0RhdGFfRm9ybWF0ICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbnVtYmVyX09mX0hNZXRyaWNzICksCisgICAgICBGVF9GUkFNRV9FTkQKKyAgICB9OworCisKKyAgICBpZiAoIHZlcnRpY2FsICkKKyAgICB7CisgICAgICB2b2lkICAqdiA9ICZmYWNlLT52ZXJ0aWNhbDsKKworCisgICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfdmhlYSwgc3RyZWFtLCAwICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBoZWFkZXIgPSAoVFRfSG9yaUhlYWRlciopdjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19oaGVhLCBzdHJlYW0sIDAgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGhlYWRlciA9ICZmYWNlLT5ob3Jpem9udGFsOworICAgIH0KKworICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBtZXRyaWNzX2hlYWRlcl9maWVsZHMsIGhlYWRlciApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIEZUX1RSQUNFMygoICJBc2NlbmRlcjogICAgICAgICAgJTVkXG4iLCBoZWFkZXItPkFzY2VuZGVyICkpOworICAgIEZUX1RSQUNFMygoICJEZXNjZW5kZXI6ICAgICAgICAgJTVkXG4iLCBoZWFkZXItPkRlc2NlbmRlciApKTsKKyAgICBGVF9UUkFDRTMoKCAibnVtYmVyX09mX01ldHJpY3M6ICU1dVxuIiwgaGVhZGVyLT5udW1iZXJfT2ZfSE1ldHJpY3MgKSk7CisKKyAgICBoZWFkZXItPmxvbmdfbWV0cmljcyAgPSBOVUxMOworICAgIGhlYWRlci0+c2hvcnRfbWV0cmljcyA9IE5VTEw7CisKKyAgRmFpbDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiB0aGUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBtZXRyaWNzIGluIGZvbnQgdW5pdHMgZm9yIGEgICAgICAqLworICAvKiAgICBnaXZlbiBnbHlwaC4gIFRoZSB2YWx1ZXMgYXJlIHRoZSBsZWZ0IHNpZGUgYmVhcmluZyAodG9wIHNpZGUgICAgICAgKi8KKyAgLyogICAgYmVhcmluZyBmb3IgdmVydGljYWwgbWV0cmljcykgYW5kIGFkdmFuY2Ugd2lkdGggKGFkdmFuY2UgaGVpZ2h0ICAgICovCisgIC8qICAgIGZvciB2ZXJ0aWNhbCBtZXRyaWNzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgVHJ1ZVR5cGUgZmFjZSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydGljYWwgOjogSWYgc2V0IHRvIFRSVUUsIGdldCB2ZXJ0aWNhbCBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnaW5kZXggICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhYmVhcmluZyA6OiBUaGUgYmVhcmluZywgZWl0aGVyIGxlZnQgc2lkZSBvciB0b3Agc2lkZS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFhZHZhbmNlIDo6IFRoZSBhZHZhbmNlIHdpZHRoIG9yIGFkdmFuY2UgaGVpZ2h0LCBkZXBlbmRpbmcgb24gICAgICAqLworICAvKiAgICAgICAgICAgICAgICB0aGUgYHZlcnRpY2FsJyBmbGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHR0X2ZhY2VfZ2V0X21ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIHZlcnRpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0ICAgKmFiZWFyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICphYWR2YW5jZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgIFRUX0hvcmlIZWFkZXIqICBoZWFkZXI7CisgICAgRlRfVUxvbmcgICAgICAgIHRhYmxlX3BvcywgdGFibGVfc2l6ZSwgdGFibGVfZW5kOworICAgIEZUX1VTaG9ydCAgICAgICBrOworCisKKyAgICBpZiAoIHZlcnRpY2FsICkKKyAgICB7CisgICAgICB2b2lkKiAgdiA9ICZmYWNlLT52ZXJ0aWNhbDsKKworCisgICAgICBoZWFkZXIgICAgID0gKFRUX0hvcmlIZWFkZXIqKXY7CisgICAgICB0YWJsZV9wb3MgID0gZmFjZS0+dmVydF9tZXRyaWNzX29mZnNldDsKKyAgICAgIHRhYmxlX3NpemUgPSBmYWNlLT52ZXJ0X21ldHJpY3Nfc2l6ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhlYWRlciAgICAgPSAmZmFjZS0+aG9yaXpvbnRhbDsKKyAgICAgIHRhYmxlX3BvcyAgPSBmYWNlLT5ob3J6X21ldHJpY3Nfb2Zmc2V0OworICAgICAgdGFibGVfc2l6ZSA9IGZhY2UtPmhvcnpfbWV0cmljc19zaXplOworICAgIH0KKworICAgIHRhYmxlX2VuZCA9IHRhYmxlX3BvcyArIHRhYmxlX3NpemU7CisKKyAgICBrID0gaGVhZGVyLT5udW1iZXJfT2ZfSE1ldHJpY3M7CisKKyAgICBpZiAoIGsgPiAwICkKKyAgICB7CisgICAgICBpZiAoIGdpbmRleCA8IChGVF9VSW50KWsgKQorICAgICAgeworICAgICAgICB0YWJsZV9wb3MgKz0gNCAqIGdpbmRleDsKKyAgICAgICAgaWYgKCB0YWJsZV9wb3MgKyA0ID4gdGFibGVfZW5kICkKKyAgICAgICAgICBnb3RvIE5vRGF0YTsKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCB0YWJsZV9wb3MgKSB8fAorICAgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCAqYWFkdmFuY2UgKSB8fAorICAgICAgICAgICAgIEZUX1JFQURfU0hPUlQoICphYmVhcmluZyApICApCisgICAgICAgICAgZ290byBOb0RhdGE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHRhYmxlX3BvcyArPSA0ICogKCBrIC0gMSApOworICAgICAgICBpZiAoIHRhYmxlX3BvcyArIDQgPiB0YWJsZV9lbmQgKQorICAgICAgICAgIGdvdG8gTm9EYXRhOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHRhYmxlX3BvcyApIHx8CisgICAgICAgICAgICAgRlRfUkVBRF9VU0hPUlQoICphYWR2YW5jZSApICkKKyAgICAgICAgICBnb3RvIE5vRGF0YTsKKworICAgICAgICB0YWJsZV9wb3MgKz0gNCArIDIgKiAoIGdpbmRleCAtIGsgKTsKKyAgICAgICAgaWYgKCB0YWJsZV9wb3MgKyAyID4gdGFibGVfZW5kICkKKyAgICAgICAgICAqYWJlYXJpbmcgPSAwOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICFGVF9TVFJFQU1fU0VFSyggdGFibGVfcG9zICkgKQorICAgICAgICAgICAgKHZvaWQpRlRfUkVBRF9TSE9SVCggKmFiZWFyaW5nICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICBOb0RhdGE6CisgICAgICAqYWJlYXJpbmcgPSAwOworICAgICAgKmFhZHZhbmNlID0gMDsKKyAgICB9CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dG10eC5oIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0bXR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZWUwNgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dG10eC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0bXR4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKHNwZWNpZmljYXRpb24pLiAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUTVRYX0hfXworI2RlZmluZSBfX1RUTVRYX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9oaGVhKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgdmVydGljYWwgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9obXR4KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgdmVydGljYWwgKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgdHRfZmFjZV9nZXRfbWV0cmljcyggVFRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgdmVydGljYWwsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU2hvcnQqICAgYWJlYXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogIGFhZHZhbmNlICk7CisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRNVFhfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRwb3N0LmMgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRwb3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyOWQxZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dHBvc3QuYwpAQCAtMCwwICsxLDU2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRwb3N0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgICovCisvKiAgICAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgcG9zdCB0YWJsZSBpcyBub3QgY29tcGxldGVseSBsb2FkZWQgYnkgdGhlIGNvcmUgZW5naW5lLiAgVGhpcyAgICAgKi8KKyAgLyogZmlsZSBsb2FkcyB0aGUgbWlzc2luZyBQUyBnbHlwaCBuYW1lcyBhbmQgaW1wbGVtZW50cyBhbiBBUEkgdG8gYWNjZXNzICovCisgIC8qIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSAidHRwb3N0LmgiCisKKyNpbmNsdWRlICJzZmVycm9ycy5oIgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRwb3N0CisKKworICAvKiBJZiB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gaXMgZGVmaW5lZCwgd2UgcmVseSBvbiB0aGUgYFBTTmFtZXMnICovCisgIC8qIG1vZHVsZSB0byBncmFiIHRoZSBnbHlwaCBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICisKKyNkZWZpbmUgTUFDX05BTUUoIHggKSAgKEZUX1N0cmluZyopcHNuYW1lcy0+bWFjaW50b3NoX25hbWUoIChGVF9VSW50KSh4KSApCisKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTICovCisKKworICAgLyogT3RoZXJ3aXNlLCB3ZSBpZ25vcmUgdGhlIGBQU05hbWVzJyBtb2R1bGUsIGFuZCBwcm92aWRlIG91ciBvd24gICovCisgICAvKiB0YWJsZSBvZiBNYWMgbmFtZXMuICBUaHVzLCBpdCBpcyBwb3NzaWJsZSB0byBidWlsZCBhIHZlcnNpb24gb2YgKi8KKyAgIC8qIEZyZWVUeXBlIHdpdGhvdXQgdGhlIFR5cGUgMSBkcml2ZXIgJiBQU05hbWVzIG1vZHVsZS4gICAgICAgICAgICAqLworCisjZGVmaW5lIE1BQ19OQU1FKCB4ICkgIChGVF9TdHJpbmcqKXR0X3Bvc3RfZGVmYXVsdF9uYW1lc1t4XQorCisgIC8qIHRoZSAyNTggZGVmYXVsdCBNYWMgUFMgZ2x5cGggbmFtZXM7IHNlZSBmaWxlIGB0b29scy9nbG5hbWVzLnB5JyAqLworCisgIHN0YXRpYyBjb25zdCBGVF9TdHJpbmcqIGNvbnN0ICB0dF9wb3N0X2RlZmF1bHRfbmFtZXNbMjU4XSA9CisgIHsKKyAgICAvKiAgIDAgKi8KKyAgICAiLm5vdGRlZiIsICIubnVsbCIsICJub25tYXJraW5ncmV0dXJuIiwgInNwYWNlIiwgImV4Y2xhbSIsCisgICAgInF1b3RlZGJsIiwgIm51bWJlcnNpZ24iLCAiZG9sbGFyIiwgInBlcmNlbnQiLCAiYW1wZXJzYW5kIiwKKyAgICAvKiAgMTAgKi8KKyAgICAicXVvdGVzaW5nbGUiLCAicGFyZW5sZWZ0IiwgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsCisgICAgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLCAiemVybyIsCisgICAgLyogIDIwICovCisgICAgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwKKyAgICAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLAorICAgIC8qICAzMCAqLworICAgICJzZW1pY29sb24iLCAibGVzcyIsICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwKKyAgICAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsCisgICAgLyogIDQwICovCisgICAgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsCisgICAgIkoiLCAiSyIsICJMIiwgIk0iLCAiTiIsCisgICAgLyogIDUwICovCisgICAgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsCisgICAgIlQiLCAiVSIsICJWIiwgIlciLCAiWCIsCisgICAgLyogIDYwICovCisgICAgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwKKyAgICAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsICJncmF2ZSIsICJhIiwgImIiLAorICAgIC8qICA3MCAqLworICAgICJjIiwgImQiLCAiZSIsICJmIiwgImciLAorICAgICJoIiwgImkiLCAiaiIsICJrIiwgImwiLAorICAgIC8qICA4MCAqLworICAgICJtIiwgIm4iLCAibyIsICJwIiwgInEiLAorICAgICJyIiwgInMiLCAidCIsICJ1IiwgInYiLAorICAgIC8qICA5MCAqLworICAgICJ3IiwgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsCisgICAgImJhciIsICJicmFjZXJpZ2h0IiwgImFzY2lpdGlsZGUiLCAiQWRpZXJlc2lzIiwgIkFyaW5nIiwKKyAgICAvKiAxMDAgKi8KKyAgICAiQ2NlZGlsbGEiLCAiRWFjdXRlIiwgIk50aWxkZSIsICJPZGllcmVzaXMiLCAiVWRpZXJlc2lzIiwKKyAgICAiYWFjdXRlIiwgImFncmF2ZSIsICJhY2lyY3VtZmxleCIsICJhZGllcmVzaXMiLCAiYXRpbGRlIiwKKyAgICAvKiAxMTAgKi8KKyAgICAiYXJpbmciLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVncmF2ZSIsICJlY2lyY3VtZmxleCIsCisgICAgImVkaWVyZXNpcyIsICJpYWN1dGUiLCAiaWdyYXZlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsCisgICAgLyogMTIwICovCisgICAgIm50aWxkZSIsICJvYWN1dGUiLCAib2dyYXZlIiwgIm9jaXJjdW1mbGV4IiwgIm9kaWVyZXNpcyIsCisgICAgIm90aWxkZSIsICJ1YWN1dGUiLCAidWdyYXZlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsCisgICAgLyogMTMwICovCisgICAgImRhZ2dlciIsICJkZWdyZWUiLCAiY2VudCIsICJzdGVybGluZyIsICJzZWN0aW9uIiwKKyAgICAiYnVsbGV0IiwgInBhcmFncmFwaCIsICJnZXJtYW5kYmxzIiwgInJlZ2lzdGVyZWQiLCAiY29weXJpZ2h0IiwKKyAgICAvKiAxNDAgKi8KKyAgICAidHJhZGVtYXJrIiwgImFjdXRlIiwgImRpZXJlc2lzIiwgIm5vdGVxdWFsIiwgIkFFIiwKKyAgICAiT3NsYXNoIiwgImluZmluaXR5IiwgInBsdXNtaW51cyIsICJsZXNzZXF1YWwiLCAiZ3JlYXRlcmVxdWFsIiwKKyAgICAvKiAxNTAgKi8KKyAgICAieWVuIiwgIm11IiwgInBhcnRpYWxkaWZmIiwgInN1bW1hdGlvbiIsICJwcm9kdWN0IiwKKyAgICAicGkiLCAiaW50ZWdyYWwiLCAib3JkZmVtaW5pbmUiLCAib3JkbWFzY3VsaW5lIiwgIk9tZWdhIiwKKyAgICAvKiAxNjAgKi8KKyAgICAiYWUiLCAib3NsYXNoIiwgInF1ZXN0aW9uZG93biIsICJleGNsYW1kb3duIiwgImxvZ2ljYWxub3QiLAorICAgICJyYWRpY2FsIiwgImZsb3JpbiIsICJhcHByb3hlcXVhbCIsICJEZWx0YSIsICJndWlsbGVtb3RsZWZ0IiwKKyAgICAvKiAxNzAgKi8KKyAgICAiZ3VpbGxlbW90cmlnaHQiLCAiZWxsaXBzaXMiLCAibm9uYnJlYWtpbmdzcGFjZSIsICJBZ3JhdmUiLCAiQXRpbGRlIiwKKyAgICAiT3RpbGRlIiwgIk9FIiwgIm9lIiwgImVuZGFzaCIsICJlbWRhc2giLAorICAgIC8qIDE4MCAqLworICAgICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJkaXZpZGUiLAorICAgICJsb3plbmdlIiwgInlkaWVyZXNpcyIsICJZZGllcmVzaXMiLCAiZnJhY3Rpb24iLCAiY3VycmVuY3kiLAorICAgIC8qIDE5MCAqLworICAgICJndWlsc2luZ2xsZWZ0IiwgImd1aWxzaW5nbHJpZ2h0IiwgImZpIiwgImZsIiwgImRhZ2dlcmRibCIsCisgICAgInBlcmlvZGNlbnRlcmVkIiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJwZXJ0aG91c2FuZCIsICJBY2lyY3VtZmxleCIsCisgICAgLyogMjAwICovCisgICAgIkVjaXJjdW1mbGV4IiwgIkFhY3V0ZSIsICJFZGllcmVzaXMiLCAiRWdyYXZlIiwgIklhY3V0ZSIsCisgICAgIkljaXJjdW1mbGV4IiwgIklkaWVyZXNpcyIsICJJZ3JhdmUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwKKyAgICAvKiAyMTAgKi8KKyAgICAiYXBwbGUiLCAiT2dyYXZlIiwgIlVhY3V0ZSIsICJVY2lyY3VtZmxleCIsICJVZ3JhdmUiLAorICAgICJkb3RsZXNzaSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwgIm1hY3JvbiIsICJicmV2ZSIsCisgICAgLyogMjIwICovCisgICAgImRvdGFjY2VudCIsICJyaW5nIiwgImNlZGlsbGEiLCAiaHVuZ2FydW1sYXV0IiwgIm9nb25layIsCisgICAgImNhcm9uIiwgIkxzbGFzaCIsICJsc2xhc2giLCAiU2Nhcm9uIiwgInNjYXJvbiIsCisgICAgLyogMjMwICovCisgICAgIlpjYXJvbiIsICJ6Y2Fyb24iLCAiYnJva2VuYmFyIiwgIkV0aCIsICJldGgiLAorICAgICJZYWN1dGUiLCAieWFjdXRlIiwgIlRob3JuIiwgInRob3JuIiwgIm1pbnVzIiwKKyAgICAvKiAyNDAgKi8KKyAgICAibXVsdGlwbHkiLCAib25lc3VwZXJpb3IiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJvbmVoYWxmIiwKKyAgICAib25lcXVhcnRlciIsICJ0aHJlZXF1YXJ0ZXJzIiwgImZyYW5jIiwgIkdicmV2ZSIsICJnYnJldmUiLAorICAgIC8qIDI1MCAqLworICAgICJJZG90YWNjZW50IiwgIlNjZWRpbGxhIiwgInNjZWRpbGxhIiwgIkNhY3V0ZSIsICJjYWN1dGUiLAorICAgICJDY2Fyb24iLCAiY2Nhcm9uIiwgImRjcm9hdCIsCisgIH07CisKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGxvYWRfZm9ybWF0XzIwKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zdF9saW1pdCApCisgIHsKKyAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKworICAgIEZUX0ludCAgICAgIG51bV9nbHlwaHM7CisgICAgRlRfVVNob3J0ICAgbnVtX25hbWVzOworCisgICAgRlRfVVNob3J0KiAgZ2x5cGhfaW5kaWNlcyA9IE5VTEw7CisgICAgRlRfQ2hhcioqICAgbmFtZV9zdHJpbmdzICA9IE5VTEw7CisKKworICAgIGlmICggRlRfUkVBRF9VU0hPUlQoIG51bV9nbHlwaHMgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBVTkRPQ1VNRU5URUQhICBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGlzIHRhYmxlIGNhbiBiZSBzbWFsbGVyICovCisgICAgLyogdGhhbiB0aGUgdmFsdWUgaW4gdGhlIG1heHAgdGFibGUgKGNmLiBjeWJlcmJpdC50dGYpLiAgICAgICAgICAgICAqLworCisgICAgLyogVGhlcmUgYWxyZWFkeSBleGlzdCBmb250cyB3aGljaCBoYXZlIG1vcmUgdGhhbiAzMjc2OCBnbHlwaCBuYW1lcyAqLworICAgIC8qIGluIHRoaXMgdGFibGUsIHNvIHRoZSB0ZXN0IGZvciB0aGlzIHRocmVzaG9sZCBoYXMgYmVlbiBkcm9wcGVkLiAgKi8KKworICAgIGlmICggbnVtX2dseXBocyA+IGZhY2UtPm1heF9wcm9maWxlLm51bUdseXBocyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGxvYWQgdGhlIGluZGljZXMgKi8KKyAgICB7CisgICAgICBGVF9JbnQgIG47CisKKworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkgKCBnbHlwaF9pbmRpY2VzLCBudW1fZ2x5cGhzICkgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIG51bV9nbHlwaHMgKiAyTCApICAgICAgICAgICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9nbHlwaHM7IG4rKyApCisgICAgICAgIGdseXBoX2luZGljZXNbbl0gPSBGVF9HRVRfVVNIT1JUKCk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICB9CisKKyAgICAvKiBjb21wdXRlIG51bWJlciBvZiBuYW1lcyBzdG9yZWQgaW4gdGFibGUgKi8KKyAgICB7CisgICAgICBGVF9JbnQgIG47CisKKworICAgICAgbnVtX25hbWVzID0gMDsKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fZ2x5cGhzOyBuKysgKQorICAgICAgeworICAgICAgICBGVF9JbnQgIGlkeDsKKworCisgICAgICAgIGlkeCA9IGdseXBoX2luZGljZXNbbl07CisgICAgICAgIGlmICggaWR4ID49IDI1OCApCisgICAgICAgIHsKKyAgICAgICAgICBpZHggLT0gMjU3OworICAgICAgICAgIGlmICggaWR4ID4gbnVtX25hbWVzICkKKyAgICAgICAgICAgIG51bV9uYW1lcyA9IChGVF9VU2hvcnQpaWR4OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogbm93IGxvYWQgdGhlIG5hbWUgc3RyaW5ncyAqLworICAgIHsKKyAgICAgIEZUX1VTaG9ydCAgbjsKKworCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggbmFtZV9zdHJpbmdzLCBudW1fbmFtZXMgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fbmFtZXM7IG4rKyApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGxlbjsKKworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1BPUygpID49IHBvc3RfbGltaXQgKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTYoKCAibG9hZF9mb3JtYXRfMjA6ICVkIGJ5dGUgbGVmdCBpbiBwb3N0IHRhYmxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHBvc3RfbGltaXQgLSBGVF9TVFJFQU1fUE9TKCkgKSk7CisKKyAgICAgICAgICBpZiAoIEZUX1JFQURfQllURSggbGVuICkgKQorICAgICAgICAgICAgZ290byBGYWlsMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbGVuID4gcG9zdF9saW1pdCAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgIEZUX1NUUkVBTV9QT1MoKSA+IHBvc3RfbGltaXQgLSBsZW4gKQorICAgICAgICB7CisgICAgICAgICAgRlRfSW50ICBkID0gKEZUX0ludClwb3N0X2xpbWl0IC0gKEZUX0ludClGVF9TVFJFQU1fUE9TKCk7CisKKworICAgICAgICAgIEZUX0VSUk9SKCggImxvYWRfZm9ybWF0XzIwOiIKKyAgICAgICAgICAgICAgICAgICAgICIgZXhjZWVkaW5nIHN0cmluZyBsZW5ndGggKCVkKSwiCisgICAgICAgICAgICAgICAgICAgICAiIHRydW5jYXRpbmcgYXQgZW5kIG9mIHBvc3QgdGFibGUgKCVkIGJ5dGUgbGVmdClcbiIsCisgICAgICAgICAgICAgICAgICAgICBsZW4sIGQgKSk7CisgICAgICAgICAgbGVuID0gKEZUX1VJbnQpRlRfTUFYKCAwLCBkICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggbmFtZV9zdHJpbmdzW25dLCBsZW4gKyAxICkgfHwKKyAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRCggbmFtZV9zdHJpbmdzW25dLCBsZW4gICApICkKKyAgICAgICAgICBnb3RvIEZhaWwxOworCisgICAgICAgIG5hbWVfc3RyaW5nc1tuXVtsZW5dID0gJ1wwJzsKKyAgICAgIH0KKworICAgICAgaWYgKCBuIDwgbnVtX25hbWVzICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAibG9hZF9mb3JtYXRfMjA6IgorICAgICAgICAgICAgICAgICAgICIgYWxsIGVudHJpZXMgaW4gcG9zdCB0YWJsZSBhcmUgYWxyZWFkeSBwYXJzZWQsIgorICAgICAgICAgICAgICAgICAgICIgdXNpbmcgTlVMTCBuYW1lcyBmb3IgZ2lkICVkIC0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG4sIG51bV9uYW1lcyAtIDEgKSk7CisgICAgICAgIGZvciAoIDsgbiA8IG51bV9uYW1lczsgbisrICkKKyAgICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggbmFtZV9zdHJpbmdzW25dLCAxICkgKQorICAgICAgICAgICAgZ290byBGYWlsMTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBuYW1lX3N0cmluZ3Nbbl1bMF0gPSAnXDAnOworICAgICAgfQorICAgIH0KKworICAgIC8qIGFsbCByaWdodCwgc2V0IHRhYmxlIGZpZWxkcyBhbmQgZXhpdCBzdWNjZXNzZnVsbHkgKi8KKyAgICB7CisgICAgICBUVF9Qb3N0XzIwICB0YWJsZSA9ICZmYWNlLT5wb3N0c2NyaXB0X25hbWVzLm5hbWVzLmZvcm1hdF8yMDsKKworCisgICAgICB0YWJsZS0+bnVtX2dseXBocyAgICA9IChGVF9VU2hvcnQpbnVtX2dseXBoczsKKyAgICAgIHRhYmxlLT5udW1fbmFtZXMgICAgID0gKEZUX1VTaG9ydCludW1fbmFtZXM7CisgICAgICB0YWJsZS0+Z2x5cGhfaW5kaWNlcyA9IGdseXBoX2luZGljZXM7CisgICAgICB0YWJsZS0+Z2x5cGhfbmFtZXMgICA9IG5hbWVfc3RyaW5nczsKKyAgICB9CisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBGYWlsMToKKyAgICB7CisgICAgICBGVF9VU2hvcnQgIG47CisKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fbmFtZXM7IG4rKyApCisgICAgICAgIEZUX0ZSRUUoIG5hbWVfc3RyaW5nc1tuXSApOworICAgIH0KKworICBGYWlsOgorICAgIEZUX0ZSRUUoIG5hbWVfc3RyaW5ncyApOworICAgIEZUX0ZSRUUoIGdseXBoX2luZGljZXMgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGxvYWRfZm9ybWF0XzI1KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zdF9saW1pdCApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKyAgICBGVF9JbnQgICAgIG51bV9nbHlwaHM7CisgICAgRlRfQ2hhciogICBvZmZzZXRfdGFibGUgPSBOVUxMOworCisgICAgRlRfVU5VU0VEKCBwb3N0X2xpbWl0ICk7CisKKworICAgIC8qIFVORE9DVU1FTlRFRCEgIFRoaXMgdmFsdWUgYXBwZWFycyBvbmx5IGluIHRoZSBBcHBsZSBUVCBzcGVjcy4gKi8KKyAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1fZ2x5cGhzICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY2hlY2sgdGhlIG51bWJlciBvZiBnbHlwaHMgKi8KKyAgICBpZiAoIG51bV9nbHlwaHMgPiBmYWNlLT5tYXhfcHJvZmlsZS5udW1HbHlwaHMgfHwgbnVtX2dseXBocyA+IDI1OCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBvZmZzZXRfdGFibGUsIG51bV9nbHlwaHMgKSAgIHx8CisgICAgICAgICBGVF9TVFJFQU1fUkVBRCggb2Zmc2V0X3RhYmxlLCBudW1fZ2x5cGhzICkgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogbm93IGNoZWNrIHRoZSBvZmZzZXQgdGFibGUgKi8KKyAgICB7CisgICAgICBGVF9JbnQgIG47CisKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fZ2x5cGhzOyBuKysgKQorICAgICAgeworICAgICAgICBGVF9Mb25nICBpZHggPSAoRlRfTG9uZyluICsgb2Zmc2V0X3RhYmxlW25dOworCisKKyAgICAgICAgaWYgKCBpZHggPCAwIHx8IGlkeCA+IG51bV9nbHlwaHMgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIE9LLCBzZXQgdGFibGUgZmllbGRzIGFuZCBleGl0IHN1Y2Nlc3NmdWxseSAqLworICAgIHsKKyAgICAgIFRUX1Bvc3RfMjUgIHRhYmxlID0gJmZhY2UtPnBvc3RzY3JpcHRfbmFtZXMubmFtZXMuZm9ybWF0XzI1OworCisKKyAgICAgIHRhYmxlLT5udW1fZ2x5cGhzID0gKEZUX1VTaG9ydCludW1fZ2x5cGhzOworICAgICAgdGFibGUtPm9mZnNldHMgICAgPSBvZmZzZXRfdGFibGU7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBGYWlsOgorICAgIEZUX0ZSRUUoIG9mZnNldF90YWJsZSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgbG9hZF9wb3N0X25hbWVzKCBUVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtOworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfRml4ZWQgICBmb3JtYXQ7CisgICAgRlRfVUxvbmcgICBwb3N0X2xlbjsKKyAgICBGVF9VTG9uZyAgIHBvc3RfbGltaXQ7CisKKworICAgIC8qIGdldCBhIHN0cmVhbSBmb3IgdGhlIGZhY2UncyByZXNvdXJjZSAqLworICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworCisgICAgLyogc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBQUyBuYW1lcyB0YWJsZSAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19wb3N0LCBzdHJlYW0sICZwb3N0X2xlbiApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgcG9zdF9saW1pdCA9IEZUX1NUUkVBTV9QT1MoKSArIHBvc3RfbGVuOworCisgICAgZm9ybWF0ID0gZmFjZS0+cG9zdHNjcmlwdC5Gb3JtYXRUeXBlOworCisgICAgLyogZ28gdG8gYmVnaW5uaW5nIG9mIHN1YnRhYmxlICovCisgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggMzIgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBub3cgcmVhZCBwb3N0c2NyaXB0IHRhYmxlICovCisgICAgaWYgKCBmb3JtYXQgPT0gMHgwMDAyMDAwMEwgKQorICAgICAgZXJyb3IgPSBsb2FkX2Zvcm1hdF8yMCggZmFjZSwgc3RyZWFtLCBwb3N0X2xpbWl0ICk7CisgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI4MDAwTCApCisgICAgICBlcnJvciA9IGxvYWRfZm9ybWF0XzI1KCBmYWNlLCBzdHJlYW0sIHBvc3RfbGltaXQgKTsKKyAgICBlbHNlCisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgICBmYWNlLT5wb3N0c2NyaXB0X25hbWVzLmxvYWRlZCA9IDE7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHR0X2ZhY2VfZnJlZV9wc19uYW1lcyggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKyAgICBUVF9Qb3N0X05hbWVzICBuYW1lcyAgPSAmZmFjZS0+cG9zdHNjcmlwdF9uYW1lczsKKyAgICBGVF9GaXhlZCAgICAgICBmb3JtYXQ7CisKKworICAgIGlmICggbmFtZXMtPmxvYWRlZCApCisgICAgeworICAgICAgZm9ybWF0ID0gZmFjZS0+cG9zdHNjcmlwdC5Gb3JtYXRUeXBlOworCisgICAgICBpZiAoIGZvcm1hdCA9PSAweDAwMDIwMDAwTCApCisgICAgICB7CisgICAgICAgIFRUX1Bvc3RfMjAgIHRhYmxlID0gJm5hbWVzLT5uYW1lcy5mb3JtYXRfMjA7CisgICAgICAgIEZUX1VTaG9ydCAgIG47CisKKworICAgICAgICBGVF9GUkVFKCB0YWJsZS0+Z2x5cGhfaW5kaWNlcyApOworICAgICAgICB0YWJsZS0+bnVtX2dseXBocyA9IDA7CisKKyAgICAgICAgZm9yICggbiA9IDA7IG4gPCB0YWJsZS0+bnVtX25hbWVzOyBuKysgKQorICAgICAgICAgIEZUX0ZSRUUoIHRhYmxlLT5nbHlwaF9uYW1lc1tuXSApOworCisgICAgICAgIEZUX0ZSRUUoIHRhYmxlLT5nbHlwaF9uYW1lcyApOworICAgICAgICB0YWJsZS0+bnVtX25hbWVzID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBmb3JtYXQgPT0gMHgwMDAyODAwMEwgKQorICAgICAgeworICAgICAgICBUVF9Qb3N0XzI1ICB0YWJsZSA9ICZuYW1lcy0+bmFtZXMuZm9ybWF0XzI1OworCisKKyAgICAgICAgRlRfRlJFRSggdGFibGUtPm9mZnNldHMgKTsKKyAgICAgICAgdGFibGUtPm51bV9nbHlwaHMgPSAwOworICAgICAgfQorICAgIH0KKyAgICBuYW1lcy0+bG9hZGVkID0gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9nZXRfcHNfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgR2V0IHRoZSBQb3N0U2NyaXB0IGdseXBoIG5hbWUgb2YgYSBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpZHggICAgOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQU25hbWUgOjogVGhlIGFkZHJlc3Mgb2YgYSBzdHJpbmcgcG9pbnRlci4gIFdpbGwgYmUgTlVMTCBpbiBjYXNlICAgKi8KKyAgLyogICAgICAgICAgICAgIG9mIGVycm9yLCBvdGhlcndpc2UgaXQgaXMgYSBwb2ludGVyIHRvIHRoZSBnbHlwaCBuYW1lLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgWW91IG11c3Qgbm90IG1vZGlmeSB0aGUgcmV0dXJuZWQgc3RyaW5nISAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2dldF9wc19uYW1lKCBUVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiogIFBTbmFtZSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKyAgICBUVF9Qb3N0X05hbWVzICBuYW1lczsKKyAgICBGVF9GaXhlZCAgICAgICBmb3JtYXQ7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXM7CisjZW5kaWYKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGlmICggaWR4ID49IChGVF9VSW50KWZhY2UtPm1heF9wcm9maWxlLm51bUdseXBocyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworICAgIHBzbmFtZXMgPSAoRlRfU2VydmljZV9Qc0NNYXBzKWZhY2UtPnBzbmFtZXM7CisgICAgaWYgKCAhcHNuYW1lcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworI2VuZGlmCisKKyAgICBuYW1lcyA9ICZmYWNlLT5wb3N0c2NyaXB0X25hbWVzOworCisgICAgLyogYC5ub3RkZWYnIGJ5IGRlZmF1bHQgKi8KKyAgICAqUFNuYW1lID0gTUFDX05BTUUoIDAgKTsKKworICAgIGZvcm1hdCA9IGZhY2UtPnBvc3RzY3JpcHQuRm9ybWF0VHlwZTsKKworICAgIGlmICggZm9ybWF0ID09IDB4MDAwMTAwMDBMICkKKyAgICB7CisgICAgICBpZiAoIGlkeCA8IDI1OCApICAgICAgICAgICAgICAgICAgICAvKiBwYXJhbm9pZCBjaGVja2luZyAqLworICAgICAgICAqUFNuYW1lID0gTUFDX05BTUUoIGlkeCApOworICAgIH0KKyAgICBlbHNlIGlmICggZm9ybWF0ID09IDB4MDAwMjAwMDBMICkKKyAgICB7CisgICAgICBUVF9Qb3N0XzIwICB0YWJsZSA9ICZuYW1lcy0+bmFtZXMuZm9ybWF0XzIwOworCisKKyAgICAgIGlmICggIW5hbWVzLT5sb2FkZWQgKQorICAgICAgeworICAgICAgICBlcnJvciA9IGxvYWRfcG9zdF9uYW1lcyggZmFjZSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEVuZDsKKyAgICAgIH0KKworICAgICAgaWYgKCBpZHggPCAoRlRfVUludCl0YWJsZS0+bnVtX2dseXBocyApCisgICAgICB7CisgICAgICAgIEZUX1VTaG9ydCAgbmFtZV9pbmRleCA9IHRhYmxlLT5nbHlwaF9pbmRpY2VzW2lkeF07CisKKworICAgICAgICBpZiAoIG5hbWVfaW5kZXggPCAyNTggKQorICAgICAgICAgICpQU25hbWUgPSBNQUNfTkFNRSggbmFtZV9pbmRleCApOworICAgICAgICBlbHNlCisgICAgICAgICAgKlBTbmFtZSA9IChGVF9TdHJpbmcqKXRhYmxlLT5nbHlwaF9uYW1lc1tuYW1lX2luZGV4IC0gMjU4XTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI4MDAwTCApCisgICAgeworICAgICAgVFRfUG9zdF8yNSAgdGFibGUgPSAmbmFtZXMtPm5hbWVzLmZvcm1hdF8yNTsKKworCisgICAgICBpZiAoICFuYW1lcy0+bG9hZGVkICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBsb2FkX3Bvc3RfbmFtZXMoIGZhY2UgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFbmQ7CisgICAgICB9CisKKyAgICAgIGlmICggaWR4IDwgKEZUX1VJbnQpdGFibGUtPm51bV9nbHlwaHMgKSAgICAvKiBwYXJhbm9pZCBjaGVja2luZyAqLworICAgICAgICAqUFNuYW1lID0gTUFDX05BTUUoIChGVF9JbnQpaWR4ICsgdGFibGUtPm9mZnNldHNbaWR4XSApOworICAgIH0KKworICAgIC8qIG5vdGhpbmcgdG8gZG8gZm9yIGZvcm1hdCA9PSAweDAwMDMwMDAwTCAqLworCisgIEVuZDoKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRwb3N0LmggYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRwb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlY2EwMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dHBvc3QuaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHBvc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUG9zdGNyaXB0IG5hbWUgdGFibGUgcHJvY2Vzc2luZyBmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzICAgICAgKi8KKy8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFRQT1NUX0hfXworI2RlZmluZSBfX1RUUE9TVF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9nZXRfcHNfbmFtZSggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBQU25hbWUgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHR0X2ZhY2VfZnJlZV9wc19uYW1lcyggVFRfRmFjZSAgZmFjZSApOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRQT1NUX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0c2JpdC5jIGIvZnJlZXR5cGUtMi42L3NyYy9zZm50L3R0c2JpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2YyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRzYml0LmMKQEAgLTAsMCArMSwxNDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHNiaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEdvb2dsZSBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfQklUTUFQX0gKKyNpbmNsdWRlICJ0dHNiaXQuaCIKKworI2luY2x1ZGUgInNmZXJyb3JzLmgiCisKKyNpbmNsdWRlICJ0dG10eC5oIgorI2luY2x1ZGUgInBuZ3NoaW0uaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0c2JpdAorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9zYml0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRfVUxvbmcgIHRhYmxlX3NpemU7CisKKworICAgIGZhY2UtPnNiaXRfdGFibGUgICAgICAgPSBOVUxMOworICAgIGZhY2UtPnNiaXRfdGFibGVfc2l6ZSAgPSAwOworICAgIGZhY2UtPnNiaXRfdGFibGVfdHlwZSAgPSBUVF9TQklUX1RBQkxFX1RZUEVfTk9ORTsKKyAgICBmYWNlLT5zYml0X251bV9zdHJpa2VzID0gMDsKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19DQkxDLCBzdHJlYW0sICZ0YWJsZV9zaXplICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID0gVFRfU0JJVF9UQUJMRV9UWVBFX0NCTEM7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19FQkxDLCBzdHJlYW0sICZ0YWJsZV9zaXplICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2Jsb2MsIHN0cmVhbSwgJnRhYmxlX3NpemUgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID0gVFRfU0JJVF9UQUJMRV9UWVBFX0VCTEM7CisgICAgfQorCisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX3NiaXgsIHN0cmVhbSwgJnRhYmxlX3NpemUgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID0gVFRfU0JJVF9UQUJMRV9UWVBFX1NCSVg7CisgICAgfQorICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCB0YWJsZV9zaXplIDwgOCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9sb2FkX3NiaXRfc3RyaWtlczogdGFibGUgdG9vIHNob3J0XG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHN3aXRjaCAoIChGVF9VSW50KWZhY2UtPnNiaXRfdGFibGVfdHlwZSApCisgICAgeworICAgIGNhc2UgVFRfU0JJVF9UQUJMRV9UWVBFX0VCTEM6CisgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfQ0JMQzoKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIHA7CisgICAgICAgIEZUX0ZpeGVkICB2ZXJzaW9uOworICAgICAgICBGVF9VTG9uZyAgbnVtX3N0cmlrZXM7CisgICAgICAgIEZUX1VJbnQgICBjb3VudDsKKworCisgICAgICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggdGFibGVfc2l6ZSwgZmFjZS0+c2JpdF90YWJsZSApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgZmFjZS0+c2JpdF90YWJsZV9zaXplID0gdGFibGVfc2l6ZTsKKworICAgICAgICBwID0gZmFjZS0+c2JpdF90YWJsZTsKKworICAgICAgICB2ZXJzaW9uICAgICA9IEZUX05FWFRfTE9ORyggcCApOworICAgICAgICBudW1fc3RyaWtlcyA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICBpZiAoICggKEZUX1VMb25nKXZlcnNpb24gJiAweEZGRkYwMDAwVUwgKSAhPSAweDAwMDIwMDAwVUwgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbnVtX3N0cmlrZXMgPj0gMHgxMDAwMFVMICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAgQ291bnQgdGhlIG51bWJlciBvZiBzdHJpa2VzIGF2YWlsYWJsZSBpbiB0aGUgdGFibGUuICBXZSBhcmUgYSBiaXQKKyAgICAgICAgICogIHBhcmFub2lkIHRoZXJlIGFuZCBkb24ndCB0cnVzdCB0aGUgZGF0YS4KKyAgICAgICAgICovCisgICAgICAgIGNvdW50ID0gKEZUX1VJbnQpbnVtX3N0cmlrZXM7CisgICAgICAgIGlmICggOCArIDQ4VUwgKiBjb3VudCA+IHRhYmxlX3NpemUgKQorICAgICAgICAgIGNvdW50ID0gKEZUX1VJbnQpKCAoIHRhYmxlX3NpemUgLSA4ICkgLyA0OCApOworCisgICAgICAgIGZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgPSBjb3VudDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfU0JJWDoKKyAgICAgIHsKKyAgICAgICAgRlRfVVNob3J0ICB2ZXJzaW9uOworICAgICAgICBGVF9VU2hvcnQgIGZsYWdzOworICAgICAgICBGVF9VTG9uZyAgIG51bV9zdHJpa2VzOworICAgICAgICBGVF9VSW50ICAgIGNvdW50OworCisKKyAgICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggOCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgdmVyc2lvbiAgICAgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICAgIGZsYWdzICAgICAgID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgICBudW1fc3RyaWtlcyA9IEZUX0dFVF9VTE9ORygpOworCisgICAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgICAgICBpZiAoIHZlcnNpb24gPCAxICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBCaXQgMCBtdXN0IGFsd2F5cyBiZSBgMScuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIEJpdCAxIGNvbnRyb2xzIHRoZSBvdmVybGF5IG9mIGJpdG1hcHMgd2l0aCBvdXRsaW5lcy4gKi8KKyAgICAgICAgLyogQWxsIG90aGVyIGJpdHMgc2hvdWxkIGJlIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoICEoIGZsYWdzID09IDEgfHwgZmxhZ3MgPT0gMyApIHx8CisgICAgICAgICAgICAgbnVtX3N0cmlrZXMgPj0gMHgxMDAwMFVMICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGJpdCAxOyBob3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gKi8KKyAgICAgICAgLyogZHJhdyBhdCBsZWFzdCBzb21ldGhpbmcuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGZsYWdzID09IDMgKQorICAgICAgICAgIEZUX1RSQUNFMSgoICJ0dF9mYWNlX2xvYWRfc2JpdF9zdHJpa2VzOiIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNiaXggb3ZlcmxheSBub3Qgc3VwcG9ydGVkIHlldFxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgICAiIGV4cGVjdCBiYWQgcmVuZGVyaW5nIHJlc3VsdHNcbiIgKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIENvdW50IHRoZSBudW1iZXIgb2Ygc3RyaWtlcyBhdmFpbGFibGUgaW4gdGhlIHRhYmxlLiAgV2UgYXJlIGEgYml0CisgICAgICAgICAqICBwYXJhbm9pZCB0aGVyZSBhbmQgZG9uJ3QgdHJ1c3QgdGhlIGRhdGEuCisgICAgICAgICAqLworICAgICAgICBjb3VudCA9IChGVF9VSW50KW51bV9zdHJpa2VzOworICAgICAgICBpZiAoIDggKyA0VUwgKiBjb3VudCA+IHRhYmxlX3NpemUgKQorICAgICAgICAgIGNvdW50ID0gKEZUX1VJbnQpKCAoIHRhYmxlX3NpemUgLSA4ICkgLyA0ICk7CisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggRlRfU1RSRUFNX1BPUygpIC0gOCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgZmFjZS0+c2JpdF90YWJsZV9zaXplID0gOCArIGNvdW50ICogNDsKKyAgICAgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCBmYWNlLT5zYml0X3RhYmxlX3NpemUsIGZhY2UtPnNiaXRfdGFibGUgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgPSBjb3VudDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICggIWVycm9yICkKKyAgICAgIEZUX1RSQUNFMygoICJzYml0X251bV9zdHJpa2VzOiAldVxuIiwgZmFjZS0+c2JpdF9udW1fc3RyaWtlcyApKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBpZiAoIGZhY2UtPnNiaXRfdGFibGUgKQorICAgICAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT5zYml0X3RhYmxlICk7CisgICAgICBmYWNlLT5zYml0X3RhYmxlX3NpemUgPSAwOworICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID0gVFRfU0JJVF9UQUJMRV9UWVBFX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfc2JpdCggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworCisKKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT5zYml0X3RhYmxlICk7CisgICAgZmFjZS0+c2JpdF90YWJsZV9zaXplICA9IDA7CisgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlICA9IFRUX1NCSVRfVEFCTEVfVFlQRV9OT05FOworICAgIGZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgPSAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9zZXRfc2JpdF9zdHJpa2UoIFRUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgICBhc3RyaWtlX2luZGV4ICkKKyAgeworICAgIHJldHVybiBGVF9NYXRjaF9TaXplKCAoRlRfRmFjZSlmYWNlLCByZXEsIDAsIGFzdHJpa2VfaW5kZXggKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyggVFRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyApCisgIHsKKyAgICBpZiAoIHN0cmlrZV9pbmRleCA+PSAoRlRfVUxvbmcpZmFjZS0+c2JpdF9udW1fc3RyaWtlcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIHN3aXRjaCAoIChGVF9VSW50KWZhY2UtPnNiaXRfdGFibGVfdHlwZSApCisgICAgeworICAgIGNhc2UgVFRfU0JJVF9UQUJMRV9UWVBFX0VCTEM6CisgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfQ0JMQzoKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIHN0cmlrZTsKKworCisgICAgICAgIHN0cmlrZSA9IGZhY2UtPnNiaXRfdGFibGUgKyA4ICsgc3RyaWtlX2luZGV4ICogNDg7CisKKyAgICAgICAgbWV0cmljcy0+eF9wcGVtID0gKEZUX1VTaG9ydClzdHJpa2VbNDRdOworICAgICAgICBtZXRyaWNzLT55X3BwZW0gPSAoRlRfVVNob3J0KXN0cmlrZVs0NV07CisKKyAgICAgICAgbWV0cmljcy0+YXNjZW5kZXIgID0gKEZUX0NoYXIpc3RyaWtlWzE2XSA8PCA2OyAgLyogaG9yaS5hc2NlbmRlciAgKi8KKyAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyID0gKEZUX0NoYXIpc3RyaWtlWzE3XSA8PCA2OyAgLyogaG9yaS5kZXNjZW5kZXIgKi8KKyAgICAgICAgbWV0cmljcy0+aGVpZ2h0ICAgID0gbWV0cmljcy0+YXNjZW5kZXIgLSBtZXRyaWNzLT5kZXNjZW5kZXI7CisKKyAgICAgICAgLyogSXMgdGhpcyBjb3JyZWN0PyAqLworICAgICAgICBtZXRyaWNzLT5tYXhfYWR2YW5jZSA9ICggKEZUX0NoYXIpc3RyaWtlWzIyXSArIC8qIG1pbl9vcmlnaW5fU0IgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VbMThdICsgLyogbWF4X3dpZHRoICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKXN0cmlrZVsyM10gICAvKiBtaW5fYWR2YW5jZV9TQiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDw8IDY7CisgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgICB9CisKKyAgICBjYXNlIFRUX1NCSVRfVEFCTEVfVFlQRV9TQklYOgorICAgICAgeworICAgICAgICBGVF9TdHJlYW0gICAgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisgICAgICAgIEZUX1VJbnQgICAgICAgICBvZmZzZXQsIHVwZW07CisgICAgICAgIEZUX1VTaG9ydCAgICAgICBwcGVtLCByZXNvbHV0aW9uOworICAgICAgICBUVF9Ib3JpSGVhZGVyICAqaG9yaTsKKyAgICAgICAgRlRfVUxvbmcgICAgICAgIHRhYmxlX3NpemU7CisgICAgICAgIEZUX1BvcyAgICAgICAgICBwcGVtXywgdXBlbV87IC8qIHRvIHJlZHVjZSBjYXN0cyAqLworCisgICAgICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICAgICAgRlRfQnl0ZSogIHA7CisKKworICAgICAgICBwICAgICAgPSBmYWNlLT5zYml0X3RhYmxlICsgOCArIDQgKiBzdHJpa2VfaW5kZXg7CisgICAgICAgIG9mZnNldCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfc2JpeCwgc3RyZWFtLCAmdGFibGVfc2l6ZSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgICAgaWYgKCBvZmZzZXQgKyA0ICA+IHRhYmxlX3NpemUgKQorICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIEZUX1NUUkVBTV9QT1MoKSArIG9mZnNldCApIHx8CisgICAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIDQgKSAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgICAgcHBlbSAgICAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgICAgcmVzb2x1dGlvbiA9IEZUX0dFVF9VU0hPUlQoKTsKKworICAgICAgICBGVF9VTlVTRUQoIHJlc29sdXRpb24gKTsgLyogV2hhdCB0byBkbyB3aXRoIHRoaXM/ICovCisKKyAgICAgICAgRlRfRlJBTUVfRVhJVCgpOworCisgICAgICAgIHVwZW0gPSBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNOworICAgICAgICBob3JpID0gJmZhY2UtPmhvcml6b250YWw7CisKKyAgICAgICAgbWV0cmljcy0+eF9wcGVtID0gcHBlbTsKKyAgICAgICAgbWV0cmljcy0+eV9wcGVtID0gcHBlbTsKKworICAgICAgICBwcGVtXyA9IChGVF9Qb3MpcHBlbTsKKyAgICAgICAgdXBlbV8gPSAoRlRfUG9zKXVwZW07CisKKyAgICAgICAgbWV0cmljcy0+YXNjZW5kZXIgICAgPSBwcGVtXyAqIGhvcmktPkFzY2VuZGVyICogNjQgLyB1cGVtXzsKKyAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSBwcGVtXyAqIGhvcmktPkRlc2NlbmRlciAqIDY0IC8gdXBlbV87CisgICAgICAgIG1ldHJpY3MtPmhlaWdodCAgICAgID0gcHBlbV8gKiAoIGhvcmktPkFzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaS0+RGVzY2VuZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaS0+TGluZV9HYXAgKSAqIDY0IC8gdXBlbV87CisgICAgICAgIG1ldHJpY3MtPm1heF9hZHZhbmNlID0gcHBlbV8gKiBob3JpLT5hZHZhbmNlX1dpZHRoX01heCAqIDY0IC8gdXBlbV87CisKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgIH0KKyAgfQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXREZWNvZGVyUmVjXworICB7CisgICAgVFRfRmFjZSAgICAgICAgICBmYWNlOworICAgIEZUX1N0cmVhbSAgICAgICAgc3RyZWFtOworICAgIEZUX0JpdG1hcCogICAgICAgYml0bWFwOworICAgIFRUX1NCaXRfTWV0cmljcyAgbWV0cmljczsKKyAgICBGVF9Cb29sICAgICAgICAgIG1ldHJpY3NfbG9hZGVkOworICAgIEZUX0Jvb2wgICAgICAgICAgYml0bWFwX2FsbG9jYXRlZDsKKyAgICBGVF9CeXRlICAgICAgICAgIGJpdF9kZXB0aDsKKworICAgIEZUX1VMb25nICAgICAgICAgZWJkdF9zdGFydDsKKyAgICBGVF9VTG9uZyAgICAgICAgIGViZHRfc2l6ZTsKKworICAgIEZUX1VMb25nICAgICAgICAgc3RyaWtlX2luZGV4X2FycmF5OworICAgIEZUX1VMb25nICAgICAgICAgc3RyaWtlX2luZGV4X2NvdW50OworICAgIEZUX0J5dGUqICAgICAgICAgZWJsY19iYXNlOworICAgIEZUX0J5dGUqICAgICAgICAgZWJsY19saW1pdDsKKworICB9IFRUX1NCaXREZWNvZGVyUmVjLCAqVFRfU0JpdERlY29kZXI7CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfc2JpdF9kZWNvZGVyX2luaXQoIFRUX1NCaXREZWNvZGVyICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgICAgc3RyaWtlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdF9NZXRyaWNzUmVjKiAgbWV0cmljcyApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisgICAgRlRfVUxvbmcgICBlYmR0X3NpemU7CisKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19DQkRULCBzdHJlYW0sICZlYmR0X3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19FQkRULCBzdHJlYW0sICZlYmR0X3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19iZGF0LCBzdHJlYW0sICZlYmR0X3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGRlY29kZXItPmZhY2UgICAgPSBmYWNlOworICAgIGRlY29kZXItPnN0cmVhbSAgPSBzdHJlYW07CisgICAgZGVjb2Rlci0+Yml0bWFwICA9ICZmYWNlLT5yb290LmdseXBoLT5iaXRtYXA7CisgICAgZGVjb2Rlci0+bWV0cmljcyA9IG1ldHJpY3M7CisKKyAgICBkZWNvZGVyLT5tZXRyaWNzX2xvYWRlZCAgID0gMDsKKyAgICBkZWNvZGVyLT5iaXRtYXBfYWxsb2NhdGVkID0gMDsKKworICAgIGRlY29kZXItPmViZHRfc3RhcnQgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgZGVjb2Rlci0+ZWJkdF9zaXplICA9IGViZHRfc2l6ZTsKKworICAgIGRlY29kZXItPmVibGNfYmFzZSAgPSBmYWNlLT5zYml0X3RhYmxlOworICAgIGRlY29kZXItPmVibGNfbGltaXQgPSBmYWNlLT5zYml0X3RhYmxlICsgZmFjZS0+c2JpdF90YWJsZV9zaXplOworCisgICAgLyogbm93IGZpbmQgdGhlIHN0cmlrZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbmRleCAqLworICAgIHsKKyAgICAgIEZUX0J5dGUqICBwOworCisKKyAgICAgIGlmICggOCArIDQ4ICogc3RyaWtlX2luZGV4ICsgMyAqIDQgKyAzNCArIDEgPiBmYWNlLT5zYml0X3RhYmxlX3NpemUgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgcCA9IGRlY29kZXItPmVibGNfYmFzZSArIDggKyA0OCAqIHN0cmlrZV9pbmRleDsKKworICAgICAgZGVjb2Rlci0+c3RyaWtlX2luZGV4X2FycmF5ID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgICAgcCAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gNDsKKyAgICAgIGRlY29kZXItPnN0cmlrZV9pbmRleF9jb3VudCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIHAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IDM0OworICAgICAgZGVjb2Rlci0+Yml0X2RlcHRoICAgICAgICAgID0gKnA7CisKKyAgICAgIC8qIGRlY29kZXItPnN0cmlrZV9pbmRleF9hcnJheSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgIDggKiBkZWNvZGVyLT5zdHJpa2VfaW5kZXhfY291bnQgPiBmYWNlLT5zYml0X3RhYmxlX3NpemUgPyAqLworICAgICAgaWYgKCBkZWNvZGVyLT5zdHJpa2VfaW5kZXhfYXJyYXkgPiBmYWNlLT5zYml0X3RhYmxlX3NpemUgICAgICAgICAgIHx8CisgICAgICAgICAgIGRlY29kZXItPnN0cmlrZV9pbmRleF9jb3VudCA+CisgICAgICAgICAgICAgKCBmYWNlLT5zYml0X3RhYmxlX3NpemUgLSBkZWNvZGVyLT5zdHJpa2VfaW5kZXhfYXJyYXkgKSAvIDggKQorICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICB0dF9zYml0X2RlY29kZXJfZG9uZSggVFRfU0JpdERlY29kZXIgIGRlY29kZXIgKQorICB7CisgICAgRlRfVU5VU0VEKCBkZWNvZGVyICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9zYml0X2RlY29kZXJfYWxsb2NfYml0bWFwKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9VSW50ICAgICB3aWR0aCwgaGVpZ2h0OworICAgIEZUX0JpdG1hcCogIG1hcCA9IGRlY29kZXItPmJpdG1hcDsKKyAgICBGVF9VTG9uZyAgICBzaXplOworCisKKyAgICBpZiAoICFkZWNvZGVyLT5tZXRyaWNzX2xvYWRlZCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHdpZHRoICA9IGRlY29kZXItPm1ldHJpY3MtPndpZHRoOworICAgIGhlaWdodCA9IGRlY29kZXItPm1ldHJpY3MtPmhlaWdodDsKKworICAgIG1hcC0+d2lkdGggPSB3aWR0aDsKKyAgICBtYXAtPnJvd3MgID0gaGVpZ2h0OworCisgICAgc3dpdGNoICggZGVjb2Rlci0+Yml0X2RlcHRoICkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgbWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoICggbWFwLT53aWR0aCArIDcgKSA+PiAzICk7CisgICAgICBtYXAtPm51bV9ncmF5cyAgPSAyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVkyOworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoICggbWFwLT53aWR0aCArIDMgKSA+PiAyICk7CisgICAgICBtYXAtPm51bV9ncmF5cyAgPSA0OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDQ6CisgICAgICBtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVk0OworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoICggbWFwLT53aWR0aCArIDEgKSA+PiAxICk7CisgICAgICBtYXAtPm51bV9ncmF5cyAgPSAxNjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA4OgorICAgICAgbWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9HUkFZOworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoIG1hcC0+d2lkdGggKTsKKyAgICAgIG1hcC0+bnVtX2dyYXlzICA9IDI1NjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzMjoKKyAgICAgIG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfQkdSQTsKKyAgICAgIG1hcC0+cGl0Y2ggICAgICA9IChpbnQpKCBtYXAtPndpZHRoICogNCApOworICAgICAgbWFwLT5udW1fZ3JheXMgID0gMjU2OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHNpemUgPSBtYXAtPnJvd3MgKiAoRlRfVUxvbmcpbWFwLT5waXRjaDsKKworICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gZW1wdHkgaW1hZ2UgKi8KKyAgICBpZiAoIHNpemUgPT0gMCApCisgICAgICBnb3RvIEV4aXQ7ICAgICAvKiBleGl0IHN1Y2Nlc3NmdWxseSEgKi8KKworICAgIGVycm9yID0gZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCggZGVjb2Rlci0+ZmFjZS0+cm9vdC5nbHlwaCwgc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgZGVjb2Rlci0+Yml0bWFwX2FsbG9jYXRlZCA9IDE7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgKnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBiaWcgKQorICB7CisgICAgRlRfQnl0ZSogICAgICAgICBwICAgICAgID0gKnBwOworICAgIFRUX1NCaXRfTWV0cmljcyAgbWV0cmljcyA9IGRlY29kZXItPm1ldHJpY3M7CisKKworICAgIGlmICggcCArIDUgPiBsaW1pdCApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBtZXRyaWNzLT5oZWlnaHQgICAgICAgPSBwWzBdOworICAgIG1ldHJpY3MtPndpZHRoICAgICAgICA9IHBbMV07CisgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYID0gKEZUX0NoYXIpcFsyXTsKKyAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSAoRlRfQ2hhcilwWzNdOworICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlICA9IHBbNF07CisKKyAgICBwICs9IDU7CisgICAgaWYgKCBiaWcgKQorICAgIHsKKyAgICAgIGlmICggcCArIDMgPiBsaW1pdCApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdYID0gKEZUX0NoYXIpcFswXTsKKyAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IChGVF9DaGFyKXBbMV07CisgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSAgPSBwWzJdOworCisgICAgICBwICs9IDM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBhdm9pZCB1bmluaXRpYWxpemVkIGRhdGEgaW4gY2FzZSB0aGVyZSBpcyBubyB2ZXJ0aWNhbCBpbmZvIC0tICovCisgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggPSAwOworICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdZID0gMDsKKyAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICA9IDA7CisgICAgfQorCisgICAgZGVjb2Rlci0+bWV0cmljc19sb2FkZWQgPSAxOworICAgICpwcCA9IHA7CisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBGYWlsOgorICAgIEZUX1RSQUNFMSgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzOiBicm9rZW4gdGFibGVcbiIgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgIH0KKworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApOworCisgIHR5cGVkZWYgRlRfRXJyb3IgICgqVFRfU0JpdERlY29kZXJfTG9hZEZ1bmMpKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB5X3BvcyApOworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZCggVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSogICAgbGluZTsKKyAgICBGVF9JbnQgICAgICBwaXRjaCwgd2lkdGgsIGhlaWdodCwgbGluZV9iaXRzLCBoOworICAgIEZUX1VJbnQgICAgIGJpdF9oZWlnaHQsIGJpdF93aWR0aDsKKyAgICBGVF9CaXRtYXAqICBiaXRtYXA7CisKKworICAgIC8qIGNoZWNrIHRoYXQgd2UgY2FuIHdyaXRlIHRoZSBnbHlwaCBpbnRvIHRoZSBiaXRtYXAgKi8KKyAgICBiaXRtYXAgICAgID0gZGVjb2Rlci0+Yml0bWFwOworICAgIGJpdF93aWR0aCAgPSBiaXRtYXAtPndpZHRoOworICAgIGJpdF9oZWlnaHQgPSBiaXRtYXAtPnJvd3M7CisgICAgcGl0Y2ggICAgICA9IGJpdG1hcC0+cGl0Y2g7CisgICAgbGluZSAgICAgICA9IGJpdG1hcC0+YnVmZmVyOworCisgICAgd2lkdGggID0gZGVjb2Rlci0+bWV0cmljcy0+d2lkdGg7CisgICAgaGVpZ2h0ID0gZGVjb2Rlci0+bWV0cmljcy0+aGVpZ2h0OworCisgICAgbGluZV9iaXRzID0gd2lkdGggKiBkZWNvZGVyLT5iaXRfZGVwdGg7CisKKyAgICBpZiAoIHhfcG9zIDwgMCB8fCAoRlRfVUludCkoIHhfcG9zICsgd2lkdGggKSA+IGJpdF93aWR0aCAgIHx8CisgICAgICAgICB5X3BvcyA8IDAgfHwgKEZUX1VJbnQpKCB5X3BvcyArIGhlaWdodCApID4gYml0X2hlaWdodCApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZDoiCisgICAgICAgICAgICAgICAgICAiIGludmFsaWQgYml0bWFwIGRpbWVuc2lvbnNcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBwICsgKCAoIGxpbmVfYml0cyArIDcgKSA+PiAzICkgKiBoZWlnaHQgPiBsaW1pdCApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZDogYnJva2VuIGJpdG1hcFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBub3cgZG8gdGhlIGJsaXQgKi8KKyAgICBsaW5lICArPSB5X3BvcyAqIHBpdGNoICsgKCB4X3BvcyA+PiAzICk7CisgICAgeF9wb3MgJj0gNzsKKworICAgIGlmICggeF9wb3MgPT0gMCApICAvKiB0aGUgZWFzeSBvbmUgKi8KKyAgICB7CisgICAgICBmb3IgKCBoID0gaGVpZ2h0OyBoID4gMDsgaC0tLCBsaW5lICs9IHBpdGNoICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIHB3cml0ZSA9IGxpbmU7CisgICAgICAgIEZUX0ludCAgICB3OworCisKKyAgICAgICAgZm9yICggdyA9IGxpbmVfYml0czsgdyA+PSA4OyB3IC09IDggKQorICAgICAgICB7CisgICAgICAgICAgcHdyaXRlWzBdID0gKEZUX0J5dGUpKCBwd3JpdGVbMF0gfCAqcCsrICk7CisgICAgICAgICAgcHdyaXRlICAgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdyA+IDAgKQorICAgICAgICAgIHB3cml0ZVswXSA9IChGVF9CeXRlKSggcHdyaXRlWzBdIHwgKCAqcCsrICYgKCAweEZGMDBVID4+IHcgKSApICk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgIC8qIHhfcG9zID4gMCAqLworICAgIHsKKyAgICAgIGZvciAoIGggPSBoZWlnaHQ7IGggPiAwOyBoLS0sIGxpbmUgKz0gcGl0Y2ggKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgcHdyaXRlID0gbGluZTsKKyAgICAgICAgRlRfSW50ICAgIHc7CisgICAgICAgIEZUX1VJbnQgICB3dmFsID0gMDsKKworCisgICAgICAgIGZvciAoIHcgPSBsaW5lX2JpdHM7IHcgPj0gODsgdyAtPSA4ICkKKyAgICAgICAgeworICAgICAgICAgIHd2YWwgICAgICAgPSAoRlRfVUludCkoIHd2YWwgfCAqcCsrICk7CisgICAgICAgICAgcHdyaXRlWzBdICA9IChGVF9CeXRlKSggcHdyaXRlWzBdIHwgKCB3dmFsID4+IHhfcG9zICkgKTsKKyAgICAgICAgICBwd3JpdGUgICAgKz0gMTsKKyAgICAgICAgICB3dmFsICAgICA8PD0gODsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdyA+IDAgKQorICAgICAgICAgIHd2YWwgPSAoRlRfVUludCkoIHd2YWwgfCAoICpwKysgJiAoIDB4RkYwMFUgPj4gdyApICkgKTsKKworICAgICAgICAvKiBhbGwgYml0cyByZWFkIGFuZCB0aGVyZSBhcmUgYHhfcG9zICsgdycgYml0cyB0byBiZSB3cml0dGVuICovCisKKyAgICAgICAgcHdyaXRlWzBdID0gKEZUX0J5dGUpKCBwd3JpdGVbMF0gfCAoIHd2YWwgPj4geF9wb3MgKSApOworCisgICAgICAgIGlmICggeF9wb3MgKyB3ID4gOCApCisgICAgICAgIHsKKyAgICAgICAgICBwd3JpdGUrKzsKKyAgICAgICAgICB3dmFsICAgICA8PD0gODsKKyAgICAgICAgICBwd3JpdGVbMF0gID0gKEZUX0J5dGUpKCBwd3JpdGVbMF0gfCAoIHd2YWwgPj4geF9wb3MgKSApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgRlRfVFJBQ0UzKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZDogbG9hZGVkXG4iICkpOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoKKyAgICogTG9hZCBhIGJpdC1hbGlnbmVkIGJpdG1hcCAod2l0aCBwb2ludGVyIGBwJykgaW50byBhIGxpbmUtYWxpZ25lZCBiaXRtYXAKKyAgICogKHdpdGggcG9pbnRlciBgcHdyaXRlJykuICBJbiB0aGUgZXhhbXBsZSBiZWxvdywgdGhlIHdpZHRoIGlzIDMgcGl4ZWwsCisgICAqIGFuZCBgeF9wb3MnIGlzIDEgcGl4ZWwuCisgICAqCisgICAqICAgICAgIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsxCisgICAqICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKiAgICAgfCA3ICAgNiAgIDUgICA0ICAgMyAgIDIgICAxICAgMCB8IDcgICA2ICAgNSAgIDQgICAzICAgMiAgIDEgICAwIHwuLi4KKyAgICogICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICstLS0tLS0tKyAgICstLS0tLS0tKyAgICstLS0tLS0tKyAuLi4KKyAgICogICAgICAgICAgIC4gICAgICAgICAgIC4gICAgICAgICAgIC4KKyAgICogICAgICAgICAgIC4gICAgICAgICAgIC4gICAgICAgICAgIC4KKyAgICogICAgICAgICAgIHYgICAgICAgICAgIC4gICAgICAgICAgIC4KKyAgICogICAgICAgKy0tLS0tLS0rICAgICAgIC4gICAgICAgICAgIC4KKyAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4KKyAgICogfCA3ICAgNiAgIDUgICA0ICAgMyAgIDIgICAxICAgMCB8IC4KKyAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4KKyAgICogICBwd3JpdGUgICAgICAgICAgICAgIC4gICAgICAgICAgIC4KKyAgICogICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAgIC4KKyAgICogICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgIC4KKyAgICogICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIC4KKyAgICogICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgICAgIHwgNyAgIDYgICA1ICAgNCAgIDMgICAyICAgMSAgIDAgfAorICAgKiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICogICAgICAgICAgICAgICBwd3JpdGUrMSAgICAgICAgICAgIC4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICA2ICAgNSAgIDQgICAzICAgMiAgIDEgICAwIHwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdyaXRlKzIKKyAgICoKKyAgICovCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHhfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX0J5dGUqICAgIGxpbmU7CisgICAgRlRfSW50ICAgICAgcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIGxpbmVfYml0cywgaCwgbmJpdHM7CisgICAgRlRfVUludCAgICAgYml0X2hlaWdodCwgYml0X3dpZHRoOworICAgIEZUX0JpdG1hcCogIGJpdG1hcDsKKyAgICBGVF9VU2hvcnQgICBydmFsOworCisKKyAgICAvKiBjaGVjayB0aGF0IHdlIGNhbiB3cml0ZSB0aGUgZ2x5cGggaW50byB0aGUgYml0bWFwICovCisgICAgYml0bWFwICAgICA9IGRlY29kZXItPmJpdG1hcDsKKyAgICBiaXRfd2lkdGggID0gYml0bWFwLT53aWR0aDsKKyAgICBiaXRfaGVpZ2h0ID0gYml0bWFwLT5yb3dzOworICAgIHBpdGNoICAgICAgPSBiaXRtYXAtPnBpdGNoOworICAgIGxpbmUgICAgICAgPSBiaXRtYXAtPmJ1ZmZlcjsKKworICAgIHdpZHRoICA9IGRlY29kZXItPm1ldHJpY3MtPndpZHRoOworICAgIGhlaWdodCA9IGRlY29kZXItPm1ldHJpY3MtPmhlaWdodDsKKworICAgIGxpbmVfYml0cyA9IHdpZHRoICogZGVjb2Rlci0+Yml0X2RlcHRoOworCisgICAgaWYgKCB4X3BvcyA8IDAgfHwgKEZUX1VJbnQpKCB4X3BvcyArIHdpZHRoICkgPiBiaXRfd2lkdGggICB8fAorICAgICAgICAgeV9wb3MgPCAwIHx8IChGVF9VSW50KSggeV9wb3MgKyBoZWlnaHQgKSA+IGJpdF9oZWlnaHQgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZDoiCisgICAgICAgICAgICAgICAgICAiIGludmFsaWQgYml0bWFwIGRpbWVuc2lvbnNcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBwICsgKCAoIGxpbmVfYml0cyAqIGhlaWdodCArIDcgKSA+PiAzICkgPiBsaW1pdCApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkOiBicm9rZW4gYml0bWFwXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIG5vdyBkbyB0aGUgYmxpdCAqLworCisgICAgLyogYWRqdXN0IGBsaW5lJyB0byBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYml0bWFwICovCisgICAgbGluZSAgKz0geV9wb3MgKiBwaXRjaCArICggeF9wb3MgPj4gMyApOworICAgIHhfcG9zICY9IDc7CisKKyAgICAvKiB0aGUgaGlnaGVyIGJ5dGUgb2YgYHJ2YWwnIGlzIHVzZWQgYXMgYSBidWZmZXIgKi8KKyAgICBydmFsICA9IDA7CisgICAgbmJpdHMgPSAwOworCisgICAgZm9yICggaCA9IGhlaWdodDsgaCA+IDA7IGgtLSwgbGluZSArPSBwaXRjaCApCisgICAgeworICAgICAgRlRfQnl0ZSogIHB3cml0ZSA9IGxpbmU7CisgICAgICBGVF9JbnQgICAgdyAgICAgID0gbGluZV9iaXRzOworCisKKyAgICAgIC8qIGhhbmRsZSBpbml0aWFsIGJ5dGUgKGluIHRhcmdldCBiaXRtYXApIHNwZWNpYWxseSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGlmICggeF9wb3MgKQorICAgICAgeworICAgICAgICB3ID0gKCBsaW5lX2JpdHMgPCA4IC0geF9wb3MgKSA/IGxpbmVfYml0cyA6IDggLSB4X3BvczsKKworICAgICAgICBpZiAoIGggPT0gaGVpZ2h0ICkKKyAgICAgICAgeworICAgICAgICAgIHJ2YWwgID0gKnArKzsKKyAgICAgICAgICBuYml0cyA9IHhfcG9zOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBuYml0cyA8IHcgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBwIDwgbGltaXQgKQorICAgICAgICAgICAgcnZhbCB8PSAqcCsrOworICAgICAgICAgIG5iaXRzICs9IDggLSB3OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJ2YWwgID4+PSA4OworICAgICAgICAgIG5iaXRzICAtPSB3OworICAgICAgICB9CisKKyAgICAgICAgKnB3cml0ZSsrIHw9ICggKCBydmFsID4+IG5iaXRzICkgJiAweEZGICkgJgorICAgICAgICAgICAgICAgICAgICAgKCB+KCAweEZGIDw8IHcgKSA8PCAoIDggLSB3IC0geF9wb3MgKSApOworICAgICAgICBydmFsICAgICA8PD0gODsKKworICAgICAgICB3ID0gbGluZV9iaXRzIC0gdzsKKyAgICAgIH0KKworICAgICAgLyogaGFuZGxlIG1lZGlhbCBieXRlcyAqLworICAgICAgZm9yICggOyB3ID49IDg7IHcgLT0gOCApCisgICAgICB7CisgICAgICAgIHJ2YWwgICAgICB8PSAqcCsrOworICAgICAgICAqcHdyaXRlKysgfD0gKCBydmFsID4+IG5iaXRzICkgJiAweEZGOworCisgICAgICAgIHJ2YWwgPDw9IDg7CisgICAgICB9CisKKyAgICAgIC8qIGhhbmRsZSBmaW5hbCBieXRlIGlmIG5lY2Vzc2FyeSAqLworICAgICAgaWYgKCB3ID4gMCApCisgICAgICB7CisgICAgICAgIGlmICggbmJpdHMgPCB3ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggcCA8IGxpbWl0ICkKKyAgICAgICAgICAgIHJ2YWwgfD0gKnArKzsKKyAgICAgICAgICAqcHdyaXRlIHw9ICggKCBydmFsID4+IG5iaXRzICkgJiAweEZGICkgJiAoIDB4RkYwMFUgPj4gdyApOworICAgICAgICAgIG5iaXRzICAgKz0gOCAtIHc7CisKKyAgICAgICAgICBydmFsIDw8PSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICpwd3JpdGUgfD0gKCAoIHJ2YWwgPj4gbmJpdHMgKSAmIDB4RkYgKSAmICggMHhGRjAwVSA+PiB3ICk7CisgICAgICAgICAgbmJpdHMgICAtPSB3OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgRlRfVFJBQ0UzKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkOiBsb2FkZWRcbiIgKSk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQoIFRUX1NCaXREZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VJbnQgICBudW1fY29tcG9uZW50cywgbm47CisKKyAgICBGVF9DaGFyICBob3JpQmVhcmluZ1ggPSAoRlRfQ2hhcilkZWNvZGVyLT5tZXRyaWNzLT5ob3JpQmVhcmluZ1g7CisgICAgRlRfQ2hhciAgaG9yaUJlYXJpbmdZID0gKEZUX0NoYXIpZGVjb2Rlci0+bWV0cmljcy0+aG9yaUJlYXJpbmdZOworICAgIEZUX0J5dGUgIGhvcmlBZHZhbmNlICA9IChGVF9CeXRlKWRlY29kZXItPm1ldHJpY3MtPmhvcmlBZHZhbmNlOworICAgIEZUX0NoYXIgIHZlcnRCZWFyaW5nWCA9IChGVF9DaGFyKWRlY29kZXItPm1ldHJpY3MtPnZlcnRCZWFyaW5nWDsKKyAgICBGVF9DaGFyICB2ZXJ0QmVhcmluZ1kgPSAoRlRfQ2hhcilkZWNvZGVyLT5tZXRyaWNzLT52ZXJ0QmVhcmluZ1k7CisgICAgRlRfQnl0ZSAgdmVydEFkdmFuY2UgID0gKEZUX0J5dGUpZGVjb2Rlci0+bWV0cmljcy0+dmVydEFkdmFuY2U7CisKKworICAgIGlmICggcCArIDIgPiBsaW1pdCApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBudW1fY29tcG9uZW50cyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgaWYgKCBwICsgNCAqIG51bV9jb21wb25lbnRzID4gbGltaXQgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZDogYnJva2VuIHRhYmxlXG4iICkpOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIEZUX1RSQUNFMygoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZDogbG9hZGluZyAlZCBjb21wb25lbnRzXG4iLAorICAgICAgICAgICAgICAgIG51bV9jb21wb25lbnRzICkpOworCisgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9jb21wb25lbnRzOyBubisrICkKKyAgICB7CisgICAgICBGVF9VSW50ICBnaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgRlRfQnl0ZSAgZHggICAgID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICBGVF9CeXRlICBkeSAgICAgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKworCisgICAgICAvKiBOQjogYSByZWN1cnNpdmUgY2FsbCAqLworICAgICAgZXJyb3IgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSggZGVjb2RlciwgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9wb3MgKyBkeCwgeV9wb3MgKyBkeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZUX1RSQUNFMygoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9jb21wb3VuZDogZG9uZVxuIiApKTsKKworICAgIGRlY29kZXItPm1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IGhvcmlCZWFyaW5nWDsKKyAgICBkZWNvZGVyLT5tZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBob3JpQmVhcmluZ1k7CisgICAgZGVjb2Rlci0+bWV0cmljcy0+aG9yaUFkdmFuY2UgID0gaG9yaUFkdmFuY2U7CisgICAgZGVjb2Rlci0+bWV0cmljcy0+dmVydEJlYXJpbmdYID0gdmVydEJlYXJpbmdYOworICAgIGRlY29kZXItPm1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IHZlcnRCZWFyaW5nWTsKKyAgICBkZWNvZGVyLT5tZXRyaWNzLT52ZXJ0QWR2YW5jZSAgPSB2ZXJ0QWR2YW5jZTsKKyAgICBkZWNvZGVyLT5tZXRyaWNzLT53aWR0aCAgICAgICAgPSAoRlRfQnl0ZSlkZWNvZGVyLT5iaXRtYXAtPndpZHRoOworICAgIGRlY29kZXItPm1ldHJpY3MtPmhlaWdodCAgICAgICA9IChGVF9CeXRlKWRlY29kZXItPmJpdG1hcC0+cm93czsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX3BuZyggVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICB4X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX1VMb25nICBwbmdfbGVuOworCisKKyAgICBpZiAoIGxpbWl0IC0gcCA8IDQgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9wbmc6IGJyb2tlbiBiaXRtYXBcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgcG5nX2xlbiA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBpZiAoIChGVF9VTG9uZykoIGxpbWl0IC0gcCApIDwgcG5nX2xlbiApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX3BuZzogYnJva2VuIGJpdG1hcFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBlcnJvciA9IExvYWRfU0JpdF9QbmcoIGRlY29kZXItPmZhY2UtPnJvb3QuZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Yml0X2RlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bWV0cmljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPnN0cmVhbS0+bWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOworCisgIEV4aXQ6CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgRlRfVFJBQ0UzKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX3BuZzogbG9hZGVkXG4iICkpOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfUE5HICovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0bWFwKCBUVF9TQml0RGVjb2RlciAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2x5cGhfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBnbHlwaF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgZ2x5cGhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHlfcG9zICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBkZWNvZGVyLT5zdHJlYW07CisgICAgRlRfQnl0ZSogICBwOworICAgIEZUX0J5dGUqICAgcF9saW1pdDsKKyAgICBGVF9CeXRlKiAgIGRhdGE7CisKKworICAgIC8qIHNlZWsgaW50byB0aGUgRUJEVCB0YWJsZSBub3cgKi8KKyAgICBpZiAoIGdseXBoX3N0YXJ0ICsgZ2x5cGhfc2l6ZSA+IGRlY29kZXItPmViZHRfc2l6ZSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGRlY29kZXItPmViZHRfc3RhcnQgKyBnbHlwaF9zdGFydCApIHx8CisgICAgICAgICBGVF9GUkFNRV9FWFRSQUNUKCBnbHlwaF9zaXplLCBkYXRhICkgICAgICAgICAgICAgICAgKQorICAgICAgZ290byBFeGl0OworCisgICAgcCAgICAgICA9IGRhdGE7CisgICAgcF9saW1pdCA9IHAgKyBnbHlwaF9zaXplOworCisgICAgLyogcmVhZCB0aGUgZGF0YSwgZGVwZW5kaW5nIG9uIHRoZSBnbHlwaCBmb3JtYXQgKi8KKyAgICBzd2l0Y2ggKCBnbHlwaF9mb3JtYXQgKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgODoKKyAgICBjYXNlIDE3OgorICAgICAgZXJyb3IgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzKCBkZWNvZGVyLCAmcCwgcF9saW1pdCwgMCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDY6CisgICAgY2FzZSA3OgorICAgIGNhc2UgOToKKyAgICBjYXNlIDE4OgorICAgICAgZXJyb3IgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzKCBkZWNvZGVyLCAmcCwgcF9saW1pdCwgMSApOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgfQorCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICB7CisgICAgICBUVF9TQml0RGVjb2Rlcl9Mb2FkRnVuYyAgbG9hZGVyOworCisKKyAgICAgIHN3aXRjaCAoIGdseXBoX2Zvcm1hdCApCisgICAgICB7CisgICAgICBjYXNlIDE6CisgICAgICBjYXNlIDY6CisgICAgICAgIGxvYWRlciA9IHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgIGNhc2UgNzoKKyAgICAgICAgeworICAgICAgICAgIC8qIERvbid0IHRydXN0IGBnbHlwaF9mb3JtYXQnLiAgRm9yIGV4YW1wbGUsIEFwcGxlJ3MgbWFpbiBLb3JlYW4gKi8KKyAgICAgICAgICAvKiBzeXN0ZW0gZm9udCwgYEFwcGxlTXl1bmdKby50dGYnICh2ZXJzaW9uIDcuMGQyZTYpLCB1c2VzIGdseXBoICovCisgICAgICAgICAgLyogZm9ybWF0IDcsIGJ1dCB0aGUgZGF0YSBpcyBmb3JtYXQgNi4gIFdlIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSAqLworICAgICAgICAgIC8qIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGltYWdlOiBJZiBpdCBpcyBlcXVhbCB0byAgKi8KKyAgICAgICAgICAvKiB0aGUgdmFsdWUgZm9yIGEgYnl0ZS1hbGlnbmVkIGdseXBoLCB1c2UgdGhlIG90aGVyIGxvYWRpbmcgICAgICovCisgICAgICAgICAgLyogcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBOb3RlIHRoYXQgZm9yIHNvbWUgKHdpZHRoLGhlaWdodCkgY29tYmluYXRpb25zLCB3aGVyZSB0aGUgICAgICovCisgICAgICAgICAgLyogd2lkdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgOCwgdGhlIHNpemVzIGZvciBiaXQtIGFuZCAgICAgICAgICAqLworICAgICAgICAgIC8qIGJ5dGUtYWxpZ25lZCBkYXRhIGFyZSBlcXVhbCwgZm9yIGV4YW1wbGUgKDcsNykgb3IgKDE1LDYpLiAgV2UgKi8KKyAgICAgICAgICAvKiB0aGVuIHByZWZlciB3aGF0IGBnbHlwaF9mb3JtYXQnIHNwZWNpZmllcy4gICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICBGVF9VSW50ICB3aWR0aCAgPSBkZWNvZGVyLT5tZXRyaWNzLT53aWR0aDsKKyAgICAgICAgICBGVF9VSW50ICBoZWlnaHQgPSBkZWNvZGVyLT5tZXRyaWNzLT5oZWlnaHQ7CisKKyAgICAgICAgICBGVF9VSW50ICBiaXRfc2l6ZSAgPSAoIHdpZHRoICogaGVpZ2h0ICsgNyApID4+IDM7CisgICAgICAgICAgRlRfVUludCAgYnl0ZV9zaXplID0gaGVpZ2h0ICogKCAoIHdpZHRoICsgNyApID4+IDMgKTsKKworCisgICAgICAgICAgaWYgKCBiaXRfc2l6ZSA8IGJ5dGVfc2l6ZSAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBieXRlX3NpemUgPT0gKEZUX1VJbnQpKCBwX2xpbWl0IC0gcCApICkKKyAgICAgICAgICAgIGxvYWRlciA9IHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2J5dGVfYWxpZ25lZDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkZXIgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSA1OgorICAgICAgICBsb2FkZXIgPSB0dF9zYml0X2RlY29kZXJfbG9hZF9iaXRfYWxpZ25lZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgODoKKyAgICAgICAgaWYgKCBwICsgMSA+IHBfbGltaXQgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBwICs9IDE7ICAvKiBza2lwIHBhZGRpbmcgKi8KKyAgICAgICAgLyogZmFsbC10aHJvdWdoICovCisKKyAgICAgIGNhc2UgOToKKyAgICAgICAgbG9hZGVyID0gdHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDE3OiAvKiBzbWFsbCBtZXRyaWNzLCBQTkcgaW1hZ2UgZGF0YSAgICovCisgICAgICBjYXNlIDE4OiAvKiBiaWcgbWV0cmljcywgUE5HIGltYWdlIGRhdGEgICAgICovCisgICAgICBjYXNlIDE5OiAvKiBtZXRyaWNzIGluIEVCTEMsIFBORyBpbWFnZSBkYXRhICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCisgICAgICAgIGxvYWRlciA9IHR0X3NiaXRfZGVjb2Rlcl9sb2FkX3BuZzsKKyAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgICAgICAgZ290byBGYWlsOworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORyAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgaWYgKCAhZGVjb2Rlci0+Yml0bWFwX2FsbG9jYXRlZCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gdHRfc2JpdF9kZWNvZGVyX2FsbG9jX2JpdG1hcCggZGVjb2RlciApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisKKyAgICAgIGVycm9yID0gbG9hZGVyKCBkZWNvZGVyLCBwLCBwX2xpbWl0LCB4X3BvcywgeV9wb3MgKTsKKyAgICB9CisKKyAgRmFpbDoKKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBkYXRhICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSggVFRfU0JpdERlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgeV9wb3MgKQorICB7CisgICAgLyoKKyAgICAgKiAgRmlyc3QsIHdlIGZpbmQgdGhlIGNvcnJlY3Qgc3RyaWtlIHJhbmdlIHRoYXQgYXBwbGllcyB0byB0aGlzCisgICAgICogIGdseXBoIGluZGV4LgorICAgICAqLworCisgICAgRlRfQnl0ZSogIHAgICAgICAgICAgPSBkZWNvZGVyLT5lYmxjX2Jhc2UgKyBkZWNvZGVyLT5zdHJpa2VfaW5kZXhfYXJyYXk7CisgICAgRlRfQnl0ZSogIHBfbGltaXQgICAgPSBkZWNvZGVyLT5lYmxjX2xpbWl0OworICAgIEZUX1VMb25nICBudW1fcmFuZ2VzID0gZGVjb2Rlci0+c3RyaWtlX2luZGV4X2NvdW50OworICAgIEZUX1VJbnQgICBzdGFydCwgZW5kLCBpbmRleF9mb3JtYXQsIGltYWdlX2Zvcm1hdDsKKyAgICBGVF9VTG9uZyAgaW1hZ2Vfc3RhcnQgPSAwLCBpbWFnZV9lbmQgPSAwLCBpbWFnZV9vZmZzZXQ7CisKKworICAgIGZvciAoIDsgbnVtX3JhbmdlcyA+IDA7IG51bV9yYW5nZXMtLSApCisgICAgeworICAgICAgc3RhcnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgZW5kICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBpZiAoIGdseXBoX2luZGV4ID49IHN0YXJ0ICYmIGdseXBoX2luZGV4IDw9IGVuZCApCisgICAgICAgIGdvdG8gRm91bmRSYW5nZTsKKworICAgICAgcCArPSA0OyAgLyogaWdub3JlIGluZGV4IG9mZnNldCAqLworICAgIH0KKyAgICBnb3RvIE5vQml0bWFwOworCisgIEZvdW5kUmFuZ2U6CisgICAgaW1hZ2Vfb2Zmc2V0ID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgLyogb3ZlcmZsb3cgY2hlY2sgKi8KKyAgICBwID0gZGVjb2Rlci0+ZWJsY19iYXNlICsgZGVjb2Rlci0+c3RyaWtlX2luZGV4X2FycmF5OworICAgIGlmICggaW1hZ2Vfb2Zmc2V0ID4gKEZUX1VMb25nKSggcF9saW1pdCAtIHAgKSApCisgICAgICBnb3RvIEZhaWx1cmU7CisKKyAgICBwICs9IGltYWdlX29mZnNldDsKKyAgICBpZiAoIHAgKyA4ID4gcF9saW1pdCApCisgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgLyogbm93IGZpbmQgdGhlIGdseXBoJ3MgbG9jYXRpb24gYW5kIGV4dGVuZCB3aXRoaW4gdGhlIGViZHQgdGFibGUgKi8KKyAgICBpbmRleF9mb3JtYXQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGltYWdlX2Zvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgaW1hZ2Vfb2Zmc2V0ID0gRlRfTkVYVF9VTE9ORyAoIHAgKTsKKworICAgIHN3aXRjaCAoIGluZGV4X2Zvcm1hdCApCisgICAgeworICAgIGNhc2UgMTogLyogNC1ieXRlIG9mZnNldHMgcmVsYXRpdmUgdG8gYGltYWdlX29mZnNldCcgKi8KKyAgICAgIHAgKz0gNCAqICggZ2x5cGhfaW5kZXggLSBzdGFydCApOworICAgICAgaWYgKCBwICsgOCA+IHBfbGltaXQgKQorICAgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgICBpbWFnZV9zdGFydCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgIGltYWdlX2VuZCAgID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgICBpZiAoIGltYWdlX3N0YXJ0ID09IGltYWdlX2VuZCApICAvKiBtaXNzaW5nIGdseXBoICovCisgICAgICAgIGdvdG8gTm9CaXRtYXA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjogLyogYmlnIG1ldHJpY3MsIGNvbnN0YW50IGltYWdlIHNpemUgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgIGltYWdlX3NpemU7CisKKworICAgICAgICBpZiAoIHAgKyAxMiA+IHBfbGltaXQgKQorICAgICAgICAgIGdvdG8gTm9CaXRtYXA7CisKKyAgICAgICAgaW1hZ2Vfc2l6ZSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICBpZiAoIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX21ldHJpY3MoIGRlY29kZXIsICZwLCBwX2xpbWl0LCAxICkgKQorICAgICAgICAgIGdvdG8gTm9CaXRtYXA7CisKKyAgICAgICAgaW1hZ2Vfc3RhcnQgPSBpbWFnZV9zaXplICogKCBnbHlwaF9pbmRleCAtIHN0YXJ0ICk7CisgICAgICAgIGltYWdlX2VuZCAgID0gaW1hZ2Vfc3RhcnQgKyBpbWFnZV9zaXplOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6IC8qIDItYnl0ZSBvZmZzZXRzIHJlbGF0aXZlIHRvICdpbWFnZV9vZmZzZXQnICovCisgICAgICBwICs9IDIgKiAoIGdseXBoX2luZGV4IC0gc3RhcnQgKTsKKyAgICAgIGlmICggcCArIDQgPiBwX2xpbWl0ICkKKyAgICAgICAgZ290byBOb0JpdG1hcDsKKworICAgICAgaW1hZ2Vfc3RhcnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgaW1hZ2VfZW5kICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBpZiAoIGltYWdlX3N0YXJ0ID09IGltYWdlX2VuZCApICAvKiBtaXNzaW5nIGdseXBoICovCisgICAgICAgIGdvdG8gTm9CaXRtYXA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNDogLyogc3BhcnNlIGdseXBoIGFycmF5IHdpdGggKGdseXBoLG9mZnNldCkgcGFpcnMgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgIG1tLCBudW1fZ2x5cGhzOworCisKKyAgICAgICAgaWYgKCBwICsgNCA+IHBfbGltaXQgKQorICAgICAgICAgIGdvdG8gTm9CaXRtYXA7CisKKyAgICAgICAgbnVtX2dseXBocyA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgICAgICAvKiBvdmVyZmxvdyBjaGVjayBmb3IgcCArICggbnVtX2dseXBocyArIDEgKSAqIDQgKi8KKyAgICAgICAgaWYgKCBwICsgNCA+IHBfbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgbnVtX2dseXBocyA+IChGVF9VTG9uZykoICggKCBwX2xpbWl0IC0gcCApID4+IDIgKSAtIDEgKSApCisgICAgICAgICAgZ290byBOb0JpdG1hcDsKKworICAgICAgICBmb3IgKCBtbSA9IDA7IG1tIDwgbnVtX2dseXBoczsgbW0rKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBnaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisKKyAgICAgICAgICBpZiAoIGdpbmRleCA9PSBnbHlwaF9pbmRleCApCisgICAgICAgICAgeworICAgICAgICAgICAgaW1hZ2Vfc3RhcnQgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgICAgcCAgICAgICAgICArPSAyOworICAgICAgICAgICAgaW1hZ2VfZW5kICAgPSBGVF9QRUVLX1VTSE9SVCggcCApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbW0gPj0gbnVtX2dseXBocyApCisgICAgICAgICAgZ290byBOb0JpdG1hcDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA1OiAvKiBjb25zdGFudCBtZXRyaWNzIHdpdGggc3BhcnNlIGdseXBoIGNvZGVzICovCisgICAgY2FzZSAxOToKKyAgICAgIHsKKyAgICAgICAgRlRfVUxvbmcgIGltYWdlX3NpemUsIG1tLCBudW1fZ2x5cGhzOworCisKKyAgICAgICAgaWYgKCBwICsgMTYgPiBwX2xpbWl0ICkKKyAgICAgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgICAgIGltYWdlX3NpemUgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgICAgaWYgKCB0dF9zYml0X2RlY29kZXJfbG9hZF9tZXRyaWNzKCBkZWNvZGVyLCAmcCwgcF9saW1pdCwgMSApICkKKyAgICAgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgICAgIG51bV9nbHlwaHMgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgICAgLyogb3ZlcmZsb3cgY2hlY2sgZm9yIHAgKyAyICogbnVtX2dseXBocyAqLworICAgICAgICBpZiAoIG51bV9nbHlwaHMgPiAoRlRfVUxvbmcpKCAoIHBfbGltaXQgLSBwICkgPj4gMSApICkKKyAgICAgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgICAgIGZvciAoIG1tID0gMDsgbW0gPCBudW1fZ2x5cGhzOyBtbSsrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgIGdpbmRleCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKworICAgICAgICAgIGlmICggZ2luZGV4ID09IGdseXBoX2luZGV4ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBtbSA+PSBudW1fZ2x5cGhzICkKKyAgICAgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgICAgIGltYWdlX3N0YXJ0ID0gaW1hZ2Vfc2l6ZSAqIG1tOworICAgICAgICBpbWFnZV9lbmQgICA9IGltYWdlX3N0YXJ0ICsgaW1hZ2Vfc2l6ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGdvdG8gTm9CaXRtYXA7CisgICAgfQorCisgICAgaWYgKCBpbWFnZV9zdGFydCA+IGltYWdlX2VuZCApCisgICAgICBnb3RvIE5vQml0bWFwOworCisgICAgaW1hZ2VfZW5kICAtPSBpbWFnZV9zdGFydDsKKyAgICBpbWFnZV9zdGFydCA9IGltYWdlX29mZnNldCArIGltYWdlX3N0YXJ0OworCisgICAgRlRfVFJBQ0UzKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlOiIKKyAgICAgICAgICAgICAgICAiIGZvdW5kIHNiaXQgKGZvcm1hdCAlZCkgZm9yIGdseXBoIGluZGV4ICVkXG4iLAorICAgICAgICAgICAgICAgIGltYWdlX2Zvcm1hdCwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICByZXR1cm4gdHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0bWFwKCBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9wb3MgKTsKKworICBGYWlsdXJlOgorICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgIE5vQml0bWFwOgorICAgIEZUX1RSQUNFNCgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZToiCisgICAgICAgICAgICAgICAgIiBubyBzYml0IGZvdW5kIGZvciBnbHlwaCBpbmRleCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X2ZhY2VfbG9hZF9zYml4X2ltYWdlKCBUVF9GYWNlICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgICAgc3RyaWtlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICAgICAgICAgICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMgICptZXRyaWNzICkKKyAgeworICAgIEZUX1VJbnQgICBzYml4X3Bvcywgc3RyaWtlX29mZnNldCwgZ2x5cGhfc3RhcnQsIGdseXBoX2VuZDsKKyAgICBGVF9VTG9uZyAgdGFibGVfc2l6ZTsKKyAgICBGVF9JbnQgICAgb3JpZ2luT2Zmc2V0WCwgb3JpZ2luT2Zmc2V0WTsKKyAgICBGVF9UYWcgICAgZ3JhcGhpY1R5cGU7CisgICAgRlRfSW50ICAgIHJlY3Vyc2VfZGVwdGggPSAwOworCisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX0J5dGUqICBwOworCisgICAgRlRfVU5VU0VEKCBtYXAgKTsKKworCisgICAgbWV0cmljcy0+d2lkdGggID0gMDsKKyAgICBtZXRyaWNzLT5oZWlnaHQgPSAwOworCisgICAgcCA9IGZhY2UtPnNiaXRfdGFibGUgKyA4ICsgNCAqIHN0cmlrZV9pbmRleDsKKyAgICBzdHJpa2Vfb2Zmc2V0ID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX3NiaXgsIHN0cmVhbSwgJnRhYmxlX3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBzYml4X3BvcyA9IEZUX1NUUkVBTV9QT1MoKTsKKworICByZXRyeToKKyAgICBpZiAoIGdseXBoX2luZGV4ID4gKEZUX1VJbnQpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBzdHJpa2Vfb2Zmc2V0ID49IHRhYmxlX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICB0YWJsZV9zaXplIC0gc3RyaWtlX29mZnNldCA8IDQgKyBnbHlwaF9pbmRleCAqIDQgKyA4ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc2JpeF9wb3MgKyBzdHJpa2Vfb2Zmc2V0ICsgNCArIGdseXBoX2luZGV4ICogNCApIHx8CisgICAgICAgICBGVF9GUkFNRV9FTlRFUiggOCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGdseXBoX3N0YXJ0ID0gRlRfR0VUX1VMT05HKCk7CisgICAgZ2x5cGhfZW5kICAgPSBGVF9HRVRfVUxPTkcoKTsKKworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgIGlmICggZ2x5cGhfc3RhcnQgPT0gZ2x5cGhfZW5kICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIGlmICggZ2x5cGhfc3RhcnQgPiBnbHlwaF9lbmQgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGdseXBoX2VuZCAtIGdseXBoX3N0YXJ0IDwgOCAgICAgICAgICAgIHx8CisgICAgICAgICB0YWJsZV9zaXplIC0gc3RyaWtlX29mZnNldCA8IGdseXBoX2VuZCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHNiaXhfcG9zICsgc3RyaWtlX29mZnNldCArIGdseXBoX3N0YXJ0ICkgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBnbHlwaF9lbmQgLSBnbHlwaF9zdGFydCApICAgICAgICAgICAgICAgICkKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIG9yaWdpbk9mZnNldFggPSBGVF9HRVRfU0hPUlQoKTsKKyAgICBvcmlnaW5PZmZzZXRZID0gRlRfR0VUX1NIT1JUKCk7CisKKyAgICBncmFwaGljVHlwZSA9IEZUX0dFVF9UQUc0KCk7CisKKyAgICBzd2l0Y2ggKCBncmFwaGljVHlwZSApCisgICAgeworICAgIGNhc2UgRlRfTUFLRV9UQUcoICdkJywgJ3UnLCAncCcsICdlJyApOgorICAgICAgaWYgKCByZWN1cnNlX2RlcHRoIDwgNCApCisgICAgICB7CisgICAgICAgIGdseXBoX2luZGV4ID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgICAgIHJlY3Vyc2VfZGVwdGgrKzsKKyAgICAgICAgZ290byByZXRyeTsKKyAgICAgIH0KKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9NQUtFX1RBRyggJ3AnLCAnbicsICdnJywgJyAnICk6CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCisgICAgICBlcnJvciA9IExvYWRfU0JpdF9QbmcoIGZhY2UtPnJvb3QuZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPm1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5jdXJzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2VuZCAtIGdseXBoX3N0YXJ0IC0gOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSApOworI2Vsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworI2VuZGlmCisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfTUFLRV9UQUcoICdqJywgJ3AnLCAnZycsICcgJyApOgorICAgIGNhc2UgRlRfTUFLRV9UQUcoICd0JywgJ2knLCAnZicsICdmJyApOgorICAgIGNhc2UgRlRfTUFLRV9UQUcoICdyJywgJ2cnLCAnYicsICdsJyApOiAvKiB1c2VkIG9uIGlPUyA3LjEgKi8KKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX1Nob3J0ICAgYWJlYXJpbmc7CisgICAgICBGVF9VU2hvcnQgIGFhZHZhbmNlOworCisKKyAgICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MoIGZhY2UsIEZBTFNFLCBnbHlwaF9pbmRleCwgJmFiZWFyaW5nLCAmYWFkdmFuY2UgKTsKKworICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYID0gKEZUX1Nob3J0KW9yaWdpbk9mZnNldFg7CisgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSAoRlRfU2hvcnQpKCAtb3JpZ2luT2Zmc2V0WSArIG1ldHJpY3MtPmhlaWdodCApOworICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgID0gKEZUX1VTaG9ydCkoIGFhZHZhbmNlICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LnNpemUtPm1ldHJpY3MueF9wcGVtIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3NiaXRfaW1hZ2UoIFRUX0ZhY2UgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgIGxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICAgICAgICAgICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMgICptZXRyaWNzICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgc3dpdGNoICggKEZUX1VJbnQpZmFjZS0+c2JpdF90YWJsZV90eXBlICkKKyAgICB7CisgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfRUJMQzoKKyAgICBjYXNlIFRUX1NCSVRfVEFCTEVfVFlQRV9DQkxDOgorICAgICAgeworICAgICAgICBUVF9TQml0RGVjb2RlclJlYyAgZGVjb2RlclsxXTsKKworCisgICAgICAgIGVycm9yID0gdHRfc2JpdF9kZWNvZGVyX2luaXQoIGRlY29kZXIsIGZhY2UsIHN0cmlrZV9pbmRleCwgbWV0cmljcyApOworICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKCBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOworICAgICAgICAgIHR0X3NiaXRfZGVjb2Rlcl9kb25lKCBkZWNvZGVyICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUVF9TQklUX1RBQkxFX1RZUEVfU0JJWDoKKyAgICAgIGVycm9yID0gdHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIEZsYXR0ZW4gY29sb3IgYml0bWFwcyBpZiBjb2xvciB3YXMgbm90IHJlcXVlc3RlZC4gKi8KKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICEoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX0NPTE9SICkgICAgICAgJiYKKyAgICAgICAgIG1hcC0+cGl4ZWxfbW9kZSA9PSBGVF9QSVhFTF9NT0RFX0JHUkEgKQorICAgIHsKKyAgICAgIEZUX0JpdG1hcCAgIG5ld19tYXA7CisgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5ID0gZmFjZS0+cm9vdC5nbHlwaC0+bGlicmFyeTsKKworCisgICAgICBGVF9CaXRtYXBfSW5pdCggJm5ld19tYXAgKTsKKworICAgICAgLyogQ29udmVydCB0byA4Yml0IGdyYXlzY2FsZS4gKi8KKyAgICAgIGVycm9yID0gRlRfQml0bWFwX0NvbnZlcnQoIGxpYnJhcnksIG1hcCwgJm5ld19tYXAsIDEgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgJm5ld19tYXAgKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbWFwLT5waXhlbF9tb2RlID0gbmV3X21hcC5waXhlbF9tb2RlOworICAgICAgICBtYXAtPnBpdGNoICAgICAgPSBuZXdfbWFwLnBpdGNoOworICAgICAgICBtYXAtPm51bV9ncmF5cyAgPSBuZXdfbWFwLm51bV9ncmF5czsKKworICAgICAgICBmdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCggZmFjZS0+cm9vdC5nbHlwaCwgbmV3X21hcC5idWZmZXIgKTsKKyAgICAgICAgZmFjZS0+cm9vdC5nbHlwaC0+aW50ZXJuYWwtPmZsYWdzIHw9IEZUX0dMWVBIX09XTl9CSVRNQVA7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU9GICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRzYml0LmggYi9mcmVldHlwZS0yLjYvc3JjL3NmbnQvdHRzYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlMTNhZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc2ZudC90dHNiaXQuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHNiaXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVFNCSVRfSF9fCisjZGVmaW5lIF9fVFRTQklUX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInR0bG9hZC5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3NiaXQoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfc2JpdCggVFRfRmFjZSAgZmFjZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9zZXRfc2JpdF9zdHJpa2UoIFRUX0ZhY2UgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgICBhc3RyaWtlX2luZGV4ICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzKCBUVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgIHN0cmlrZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3NiaXRfaW1hZ2UoIFRUX0ZhY2UgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgIGxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICAgICAgICAgICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMgICptZXRyaWNzICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVFNCSVRfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2IyOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL3Ntb290aCBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgc21vb3RoIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSBmdGdyYXlzIGZ0c21vb3RoIGZ0c3BpYyA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSBzbW9vdGggOworICB9CisKKyAgTGlicmFyeSAgJChGVDJfTElCKSA6ICQoX3NvdXJjZXMpLmMgOworfQorCisjIGVuZCBvZiBzcmMvc21vb3RoIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0Z3JheXMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0Z3JheXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I1OGYyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRncmF5cy5jCkBAIC0wLDAgKzEsMjEzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRncmF5cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEEgbmV3IGBwZXJmZWN0JyBhbnRpLWFsaWFzaW5nIHJlbmRlcmVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCB0aGUgcmVzdCBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLCBieSAqLworICAvKiBkZWZpbmluZyB0aGUgX1NUQU5EQUxPTkVfIG1hY3JvIHdoZW4gY29tcGlsaW5nIGl0LiAgWW91IGFsc28gbmVlZCB0byAgKi8KKyAgLyogcHV0IHRoZSBmaWxlcyBgZnRncmF5cy5oJyBhbmQgYGZ0aW1hZ2UuaCcgaW50byB0aGUgY3VycmVudCAgICAgICAgICAgICovCisgIC8qIGNvbXBpbGF0aW9uIGRpcmVjdG9yeS4gIFR5cGljYWxseSwgeW91IGNvdWxkIGRvIHNvbWV0aGluZyBsaWtlICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBjb3B5IGBzcmMvc21vb3RoL2Z0Z3JheXMuYycgKHRoaXMgZmlsZSkgdG8geW91ciBjdXJyZW50IGRpcmVjdG9yeSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIGNvcHkgYGluY2x1ZGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9zbW9vdGgvZnRncmF5cy5oJyB0byB0aGUgc2FtZSAgICAgKi8KKyAgLyogICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIGNvbXBpbGUgYGZ0Z3JheXMnIHdpdGggdGhlIF9TVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBjYyAtYyAtRF9TVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIHJlbmRlcmVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgY2FsbCB0byAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGBmdF9ncmF5X3Jhc3Rlci5yYXN0ZXJfbmV3JzsgYW4gYW50aS1hbGlhc2VkIGJpdG1hcCBjYW4gYmUgZ2VuZXJhdGVkICAqLworICAvKiB3aXRoIGEgY2FsbCB0byBgZnRfZ3JheV9yYXN0ZXIucmFzdGVyX3JlbmRlcicuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNlZSB0aGUgY29tbWVudHMgYW5kIGRvY3VtZW50YXRpb24gaW4gdGhlIGZpbGUgYGZ0aW1hZ2UuaCcgZm9yIG1vcmUgICAqLworICAvKiBkZXRhaWxzIG9uIGhvdyB0aGUgcmFzdGVyIHdvcmtzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBpcyBhIG5ldyBhbnRpLWFsaWFzaW5nIHNjYW4tY29udmVydGVyIGZvciBGcmVlVHlwZSAyLiAgVGhlICAgICAgICovCisgIC8qIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgX3ZlcnlfIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgaW4gdGhlIHN0YW5kYXJkICAqLworICAvKiBgZnRyYXN0ZXInIG1vZHVsZS4gIEFjdHVhbGx5LCBgZnRncmF5cycgY29tcHV0ZXMgdGhlIF9leGFjdF8gICAgICAgICAgKi8KKyAgLyogY292ZXJhZ2Ugb2YgdGhlIG91dGxpbmUgb24gZWFjaCBwaXhlbCBjZWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJdCBpcyBiYXNlZCBvbiBpZGVhcyB0aGF0IEkgaW5pdGlhbGx5IGZvdW5kIGluIFJhcGggTGV2aWVuJ3MgICAgICAgICAgKi8KKyAgLyogZXhjZWxsZW50IExpYkFydCBncmFwaGljcyBsaWJyYXJ5IChzZWUgaHR0cDovL3d3dy5sZXZpZW4uY29tL2xpYmFydCAgICovCisgIC8qIGZvciBtb3JlIGluZm9ybWF0aW9uLCB0aG91Z2ggdGhlIHdlYiBwYWdlcyBkbyBub3QgdGVsbCBhbnl0aGluZyAgICAgICAqLworICAvKiBhYm91dCB0aGUgcmVuZGVyZXI7IHlvdSdsbCBoYXZlIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gICAgICAgKi8KKyAgLyogdW5kZXJzdGFuZCBob3cgaXQgd29ya3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlLCBob3dldmVyLCB0aGF0IHRoaXMgaXMgYSBfdmVyeV8gZGlmZmVyZW50IGltcGxlbWVudGF0aW9uICAgICAgICAgKi8KKyAgLyogY29tcGFyZWQgdG8gUmFwaCdzLiAgQ292ZXJhZ2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGEgdmVyeSAgICAgICAgICovCisgIC8qIGRpZmZlcmVudCB3YXksIGFuZCBJIGRvbid0IHVzZSBzb3J0ZWQgdmVjdG9yIHBhdGhzLiAgQWxzbywgaXQgZG9lc24ndCAqLworICAvKiB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgcmVuZGVyZXIgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczogICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBJdCBkb2Vzbid0IG5lZWQgYW4gaW50ZXJtZWRpYXRlIGJpdG1hcC4gIEluc3RlYWQsIG9uZSBjYW4gc3VwcGx5IGEgICovCisgIC8qICAgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgcmVuZGVyZXIgdG8gZHJhdyBncmF5ICAqLworICAvKiAgIHNwYW5zIG9uIGFueSB0YXJnZXQgc3VyZmFjZS4gIFlvdSBjYW4gdGh1cyBkbyBkaXJlY3QgY29tcG9zaXRpb24gb24gKi8KKyAgLyogICBhbnkga2luZCBvZiBiaXRtYXAsIHByb3ZpZGVkIHRoYXQgeW91IGdpdmUgdGhlIHJlbmRlcmVyIHRoZSByaWdodCAgICovCisgIC8qICAgY2FsbGJhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBBIHBlcmZlY3QgYW50aS1hbGlhc2VyLCBpLmUuLCBpdCBjb21wdXRlcyB0aGUgX2V4YWN0XyBjb3ZlcmFnZSBvbiAgICovCisgIC8qICAgZWFjaCBwaXhlbCBjZWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBJdCBwZXJmb3JtcyBhIHNpbmdsZSBwYXNzIG9uIHRoZSBvdXRsaW5lICh0aGUgYHN0YW5kYXJkJyBGVDIgICAgICAgICovCisgIC8qICAgcmVuZGVyZXIgbWFrZXMgdHdvIHBhc3NlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBJdCBjYW4gZWFzaWx5IGJlIG1vZGlmaWVkIHRvIHJlbmRlciB0byBfYW55XyBudW1iZXIgb2YgZ3JheSBsZXZlbHMgICovCisgIC8qICAgY2hlYXBseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBGb3Igc21hbGwgKDwgMjApIHBpeGVsIHNpemVzLCBpdCBpcyBmYXN0ZXIgdGhhbiB0aGUgc3RhbmRhcmQgICAgICAgICovCisgIC8qICAgcmVuZGVyZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zbW9vdGgKKworCisjaWZkZWYgX1NUQU5EQUxPTkVfCisKKworICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KKyAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1JFTkRFUl9QT09MX1NJWkUgIDE2Mzg0TAorCisKKyAgLyogQXV4aWxpYXJ5IG1hY3JvcyBmb3IgdG9rZW4gY29uY2F0ZW5hdGlvbi4gKi8KKyNkZWZpbmUgRlRfRVJSX1hDQVQoIHgsIHkgKSAgeCAjIyB5CisjZGVmaW5lIEZUX0VSUl9DQVQoIHgsIHkgKSAgIEZUX0VSUl9YQ0FUKCB4LCB5ICkKKworI2RlZmluZSBGVF9CRUdJTl9TVE1OVCAgZG8geworI2RlZmluZSBGVF9FTkRfU1RNTlQgICAgfSB3aGlsZSAoIDAgKQorCisjZGVmaW5lIEZUX01BWCggYSwgYiApICAoIChhKSA+IChiKSA/IChhKSA6IChiKSApCisjZGVmaW5lIEZUX0FCUyggYSApICAgICAoIChhKSA8IDAgPyAtKGEpIDogKGEpICkKKworCisgIC8qCisgICAqICBBcHByb3hpbWF0ZSBzcXJ0KHgqeCt5KnkpIHVzaW5nIHRoZSBgYWxwaGEgbWF4IHBsdXMgYmV0YSBtaW4nCisgICAqICBhbGdvcml0aG0uICBXZSB1c2UgYWxwaGEgPSAxLCBiZXRhID0gMy84LCBnaXZpbmcgdXMgcmVzdWx0cyB3aXRoIGEKKyAgICogIGxhcmdlc3QgZXJyb3IgbGVzcyB0aGFuIDclIGNvbXBhcmVkIHRvIHRoZSBleGFjdCB2YWx1ZS4KKyAgICovCisjZGVmaW5lIEZUX0hZUE9UKCB4LCB5ICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIHggPSBGVF9BQlMoIHggKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgeSA9IEZUX0FCUyggeSApLCAgICAgICAgICAgICBcCisgICAgICAgICAgICB4ID4geSA/IHggKyAoIDMgKiB5ID4+IDMgKSAgIFwKKyAgICAgICAgICAgICAgICAgIDogeSArICggMyAqIHggPj4gMyApICkKKworCisgIC8qIGRlZmluZSB0aGlzIHRvIGR1bXAgZGVidWdnaW5nIGluZm9ybWF0aW9uICovCisvKiAjZGVmaW5lIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjZGVmaW5lIEZUX1VJTlRfTUFYICBVSU5UX01BWAorI2RlZmluZSBGVF9JTlRfTUFYICAgSU5UX01BWAorCisjZGVmaW5lIGZ0X21lbXNldCAgIG1lbXNldAorCisjZGVmaW5lIGZ0X3NldGptcCAgIHNldGptcAorI2RlZmluZSBmdF9sb25nam1wICBsb25nam1wCisjZGVmaW5lIGZ0X2ptcF9idWYgIGptcF9idWYKKwordHlwZWRlZiBwdHJkaWZmX3QgIEZUX1B0ckRpc3Q7CisKKworI2RlZmluZSBFcnJSYXN0ZXJfSW52YWxpZF9Nb2RlICAgICAgLTIKKyNkZWZpbmUgRXJyUmFzdGVyX0ludmFsaWRfT3V0bGluZSAgIC0xCisjZGVmaW5lIEVyclJhc3Rlcl9JbnZhbGlkX0FyZ3VtZW50ICAtMworI2RlZmluZSBFcnJSYXN0ZXJfTWVtb3J5X092ZXJmbG93ICAgLTQKKworI2RlZmluZSBGVF9CRUdJTl9IRUFERVIKKyNkZWZpbmUgRlRfRU5EX0hFQURFUgorCisjaW5jbHVkZSAiZnRpbWFnZS5oIgorI2luY2x1ZGUgImZ0Z3JheXMuaCIKKworCisgIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIHVudXNlZC4gKi8KKyAgLyogSXRzIHB1cnBvc2UgaXMgc2ltcGx5IHRvIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncy4gIE5vdGUgYWxzbyB0aGF0ICAqLworICAvKiBzaW1wbHkgZGVmaW5pbmcgaXQgYXMgYCh2b2lkKXgnIGRvZXNuJ3QgYXZvaWQgd2FybmluZ3Mgd2l0aCBjZXJ0YWluICovCisgIC8qIEFOU0kgY29tcGlsZXJzIChlLmcuIExDQykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfVU5VU0VEKCB4ICkgICh4KSA9ICh4KQorCisKKyAgLyogd2Ugb25seSB1c2UgbGV2ZWwgNSAmIDcgdHJhY2luZyBtZXNzYWdlczsgY2YuIGZ0ZGVidWcuaCAqLworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKworICB2b2lkCisgIEZUX01lc3NhZ2UoIGNvbnN0IGNoYXIqICBmbXQsCisgICAgICAgICAgICAgIC4uLiApCisgIHsKKyAgICB2YV9saXN0ICBhcDsKKworCisgICAgdmFfc3RhcnQoIGFwLCBmbXQgKTsKKyAgICB2ZnByaW50Ziggc3RkZXJyLCBmbXQsIGFwICk7CisgICAgdmFfZW5kKCBhcCApOworICB9CisKKworICAvKiBlbXB0eSBmdW5jdGlvbiB1c2VmdWwgZm9yIHNldHRpbmcgYSBicmVha3BvaW50IHRvIGNhdGNoIGVycm9ycyAqLworICBpbnQKKyAgRlRfVGhyb3coIGludCAgICAgICAgICBlcnJvciwKKyAgICAgICAgICAgIGludCAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGUgKQorICB7CisgICAgRlRfVU5VU0VEKCBlcnJvciApOworICAgIEZUX1VOVVNFRCggbGluZSApOworICAgIEZUX1VOVVNFRCggZmlsZSApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qIHdlIGRvbid0IGhhbmRsZSB0cmFjaW5nIGxldmVscyBpbiBzdGFuZC1hbG9uZSBtb2RlOyAqLworI2lmbmRlZiBGVF9UUkFDRTUKKyNkZWZpbmUgRlRfVFJBQ0U1KCB2YXJmb3JtYXQgKSAgRlRfTWVzc2FnZSB2YXJmb3JtYXQKKyNlbmRpZgorI2lmbmRlZiBGVF9UUkFDRTcKKyNkZWZpbmUgRlRfVFJBQ0U3KCB2YXJmb3JtYXQgKSAgRlRfTWVzc2FnZSB2YXJmb3JtYXQKKyNlbmRpZgorI2lmbmRlZiBGVF9FUlJPUgorI2RlZmluZSBGVF9FUlJPUiggdmFyZm9ybWF0ICkgICBGVF9NZXNzYWdlIHZhcmZvcm1hdAorI2VuZGlmCisKKyNkZWZpbmUgRlRfVEhST1coIGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBGVF9UaHJvdyggRlRfRVJSX0NBVCggRXJyUmFzdGVyLCBlICksICAgXAorICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXyApICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICBGVF9FUlJfQ0FUKCBFcnJSYXN0ZXIsIGUgKSAgICAgICAgICAgICkKKworI2Vsc2UgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyNkZWZpbmUgRlRfVFJBQ0U1KCB4ICkgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAgLyogbm90aGluZyAqLworI2RlZmluZSBGVF9UUkFDRTcoIHggKSAgZG8geyB9IHdoaWxlICggMCApICAgICAvKiBub3RoaW5nICovCisjZGVmaW5lIEZUX0VSUk9SKCB4ICkgICBkbyB7IH0gd2hpbGUgKCAwICkgICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgRlRfVEhST1coIGUgKSAgIEZUX0VSUl9DQVQoIEVyclJhc3Rlcl8sIGUgKQorCisKKyNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworCisjZGVmaW5lIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKCBjbGFzc18sICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZV90b18sIGxpbmVfdG9fLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmljX3RvXywgY3ViaWNfdG9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdF8sIGRlbHRhXyApICAgICAgXAorICAgICAgICAgIHN0YXRpYyBjb25zdCBGVF9PdXRsaW5lX0Z1bmNzIGNsYXNzXyA9ICAgICAgIFwKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtb3ZlX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbGluZV90b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNvbmljX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjdWJpY190b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2hpZnRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlbHRhXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB9OworCisjZGVmaW5lIEZUX0RFRklORV9SQVNURVJfRlVOQ1MoIGNsYXNzXywgZ2x5cGhfZm9ybWF0XywgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcl9uZXdfLCByYXN0ZXJfcmVzZXRfLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcl9zZXRfbW9kZV8sIHJhc3Rlcl9yZW5kZXJfLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcl9kb25lXyApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgY29uc3QgRlRfUmFzdGVyX0Z1bmNzIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnbHlwaF9mb3JtYXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfbmV3XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfcmVzZXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfc2V0X21vZGVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfcmVuZGVyXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByYXN0ZXJfZG9uZV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB9OworCisKKyNlbHNlIC8qICFfU1RBTkRBTE9ORV8gKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJmdGdyYXlzLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX09VVExJTkVfSAorCisjaW5jbHVkZSAiZnRzbWVycnMuaCIKKworI2luY2x1ZGUgImZ0c3BpYy5oIgorCisjZGVmaW5lIFNtb290aF9FcnJfSW52YWxpZF9Nb2RlICAgICBTbW9vdGhfRXJyX0Nhbm5vdF9SZW5kZXJfR2x5cGgKKyNkZWZpbmUgU21vb3RoX0Vycl9NZW1vcnlfT3ZlcmZsb3cgIFNtb290aF9FcnJfT3V0X09mX01lbW9yeQorI2RlZmluZSBFcnJSYXN0ZXJfTWVtb3J5X092ZXJmbG93ICAgU21vb3RoX0Vycl9PdXRfT2ZfTWVtb3J5CisKKworI2VuZGlmIC8qICFfU1RBTkRBTE9ORV8gKi8KKworCisjaWZuZGVmIEZUX01FTV9TRVQKKyNkZWZpbmUgRlRfTUVNX1NFVCggZCwgcywgYyApICBmdF9tZW1zZXQoIGQsIHMsIGMgKQorI2VuZGlmCisKKyNpZm5kZWYgRlRfTUVNX1pFUk8KKyNkZWZpbmUgRlRfTUVNX1pFUk8oIGRlc3QsIGNvdW50ICkgIEZUX01FTV9TRVQoIGRlc3QsIDAsIGNvdW50ICkKKyNlbmRpZgorCisgIC8qIGFzIHVzdWFsLCBmb3IgdGhlIHNwZWVkIGh1bmdyeSA6LSkgKi8KKworI3VuZGVmIFJBU19BUkcKKyN1bmRlZiBSQVNfQVJHXworI3VuZGVmIFJBU19WQVIKKyN1bmRlZiBSQVNfVkFSXworCisjaWZuZGVmIEZUX1NUQVRJQ19SQVNURVIKKworI2RlZmluZSBSQVNfQVJHICAgZ3JheV9QV29ya2VyICB3b3JrZXIKKyNkZWZpbmUgUkFTX0FSR18gIGdyYXlfUFdvcmtlciAgd29ya2VyLAorCisjZGVmaW5lIFJBU19WQVIgICB3b3JrZXIKKyNkZWZpbmUgUkFTX1ZBUl8gIHdvcmtlciwKKworI2Vsc2UgLyogRlRfU1RBVElDX1JBU1RFUiAqLworCisjZGVmaW5lIFJBU19BUkcgICAvKiBlbXB0eSAqLworI2RlZmluZSBSQVNfQVJHXyAgLyogZW1wdHkgKi8KKyNkZWZpbmUgUkFTX1ZBUiAgIC8qIGVtcHR5ICovCisjZGVmaW5lIFJBU19WQVJfICAvKiBlbXB0eSAqLworCisjZW5kaWYgLyogRlRfU1RBVElDX1JBU1RFUiAqLworCisKKyAgLyogbXVzdCBiZSBhdCBsZWFzdCA2IGJpdHMhICovCisjZGVmaW5lIFBJWEVMX0JJVFMgIDgKKworI3VuZGVmIEZMT09SCisjdW5kZWYgQ0VJTElORworI3VuZGVmIFRSVU5DCisjdW5kZWYgU0NBTEVECisKKyNkZWZpbmUgT05FX1BJWEVMICAgICAgICggMUwgPDwgUElYRUxfQklUUyApCisjZGVmaW5lIFBJWEVMX01BU0sgICAgICAoIC0xTCA8PCBQSVhFTF9CSVRTICkKKyNkZWZpbmUgVFJVTkMoIHggKSAgICAgICggKFRDb29yZCkoICh4KSA+PiBQSVhFTF9CSVRTICkgKQorI2RlZmluZSBTVUJQSVhFTFMoIHggKSAgKCAoVFBvcykoeCkgPDwgUElYRUxfQklUUyApCisjZGVmaW5lIEZMT09SKCB4ICkgICAgICAoICh4KSAmIC1PTkVfUElYRUwgKQorI2RlZmluZSBDRUlMSU5HKCB4ICkgICAgKCAoICh4KSArIE9ORV9QSVhFTCAtIDEgKSAmIC1PTkVfUElYRUwgKQorI2RlZmluZSBST1VORCggeCApICAgICAgKCAoICh4KSArIE9ORV9QSVhFTCAvIDIgKSAmIC1PTkVfUElYRUwgKQorCisjaWYgUElYRUxfQklUUyA+PSA2CisjZGVmaW5lIFVQU0NBTEUoIHggKSAgICAoICh4KSA8PCAoIFBJWEVMX0JJVFMgLSA2ICkgKQorI2RlZmluZSBET1dOU0NBTEUoIHggKSAgKCAoeCkgPj4gKCBQSVhFTF9CSVRTIC0gNiApICkKKyNlbHNlCisjZGVmaW5lIFVQU0NBTEUoIHggKSAgICAoICh4KSA+PiAoIDYgLSBQSVhFTF9CSVRTICkgKQorI2RlZmluZSBET1dOU0NBTEUoIHggKSAgKCAoeCkgPDwgKCA2IC0gUElYRUxfQklUUyApICkKKyNlbmRpZgorCisKKyAgLyogQ29tcHV0ZSBgZGl2aWRlbmQgLyBkaXZpc29yJyBhbmQgcmV0dXJuIGJvdGggaXRzIHF1b3RpZW50IGFuZCAgICAgKi8KKyAgLyogcmVtYWluZGVyLCBjYXN0IHRvIGEgc3BlY2lmaWMgdHlwZS4gIFRoaXMgbWFjcm8gYWxzbyBlbnN1cmVzIHRoYXQgKi8KKyAgLyogdGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfRElWX01PRCggdHlwZSwgZGl2aWRlbmQsIGRpdmlzb3IsIHF1b3RpZW50LCByZW1haW5kZXIgKSBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChxdW90aWVudCkgID0gKHR5cGUpKCAoZGl2aWRlbmQpIC8gKGRpdmlzb3IpICk7ICAgICAgICAgICAgICAgIFwKKyAgICAocmVtYWluZGVyKSA9ICh0eXBlKSggKGRpdmlkZW5kKSAlIChkaXZpc29yKSApOyAgICAgICAgICAgICAgICBcCisgICAgaWYgKCAocmVtYWluZGVyKSA8IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChxdW90aWVudCktLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocmVtYWluZGVyKSArPSAodHlwZSkoZGl2aXNvcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisKKyNpZmRlZiAgX19hcm1fXworICAvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBzcGVjaWZpYyB0byBHQ0Mgd2hpY2ggbWFrZSB0aGUgY29tcGlsZXIgZmFpbCB0byAqLworICAvKiBvcHRpbWl6ZSBhIGRpdmlzaW9uIGFuZCBtb2R1bG8gb3BlcmF0aW9uIG9uIHRoZSBzYW1lIHBhcmFtZXRlcnMgICAqLworICAvKiBpbnRvIGEgc2luZ2xlIGNhbGwgdG8gYF9fYWVhYmlfaWRpdm1vZCcuICBTZWUgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00MzcyMSAgICAgICAgICAgICAgICAqLworI3VuZGVmIEZUX0RJVl9NT0QKKyNkZWZpbmUgRlRfRElWX01PRCggdHlwZSwgZGl2aWRlbmQsIGRpdmlzb3IsIHF1b3RpZW50LCByZW1haW5kZXIgKSBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChxdW90aWVudCkgID0gKHR5cGUpKCAoZGl2aWRlbmQpIC8gKGRpdmlzb3IpICk7ICAgICAgICAgICAgICAgIFwKKyAgICAocmVtYWluZGVyKSA9ICh0eXBlKSggKGRpdmlkZW5kKSAtIChxdW90aWVudCkgKiAoZGl2aXNvcikgKTsgICBcCisgICAgaWYgKCAocmVtYWluZGVyKSA8IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChxdW90aWVudCktLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocmVtYWluZGVyKSArPSAodHlwZSkoZGl2aXNvcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRU5EX1NUTU5UCisjZW5kaWYgLyogX19hcm1fXyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRZUEUgREVGSU5JVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogZG9uJ3QgY2hhbmdlIHRoZSBmb2xsb3dpbmcgdHlwZXMgdG8gRlRfSW50IG9yIEZUX1Bvcywgc2luY2Ugd2UgbWlnaHQgKi8KKyAgLyogbmVlZCB0byBkZWZpbmUgdGhlbSB0byAiZmxvYXQiIG9yICJkb3VibGUiIHdoZW4gZXhwZXJpbWVudGluZyB3aXRoICAgKi8KKyAgLyogbmV3IGFsZ29yaXRobXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB0eXBlZGVmIGxvbmcgIFRDb29yZDsgICAvKiBpbnRlZ2VyIHNjYW5saW5lL3BpeGVsIGNvb3JkaW5hdGUgKi8KKyAgdHlwZWRlZiBsb25nICBUUG9zOyAgICAgLyogc3ViLXBpeGVsIGNvb3JkaW5hdGUgICAgICAgICAgICAgICovCisKKyAgLyogZGV0ZXJtaW5lIHRoZSB0eXBlIHVzZWQgdG8gc3RvcmUgY2VsbCBhcmVhcy4gIFRoaXMgbm9ybWFsbHkgdGFrZXMgYXQgKi8KKyAgLyogbGVhc3QgUElYRUxfQklUUyoyICsgMSBiaXRzLiAgT24gMTYtYml0IHN5c3RlbXMsIHdlIG5lZWQgdG8gdXNlICAgICAgKi8KKyAgLyogYGxvbmcnIGluc3RlYWQgb2YgYGludCcsIG90aGVyd2lzZSBiYWQgdGhpbmdzIGhhcHBlbiAgICAgICAgICAgICAgICAgKi8KKworI2lmIFBJWEVMX0JJVFMgPD0gNworCisgIHR5cGVkZWYgaW50ICBUQXJlYTsKKworI2Vsc2UgLyogUElYRUxfQklUUyA+PSA4ICovCisKKyAgLyogYXBwcm94aW1hdGVseSBkZXRlcm1pbmUgdGhlIHNpemUgb2YgaW50ZWdlcnMgdXNpbmcgYW4gQU5TSS1DIGhlYWRlciAqLworI2lmIEZUX1VJTlRfTUFYID09IDB4RkZGRlUKKyAgdHlwZWRlZiBsb25nICBUQXJlYTsKKyNlbHNlCisgIHR5cGVkZWYgaW50ICAgVEFyZWE7CisjZW5kaWYKKworI2VuZGlmIC8qIFBJWEVMX0JJVFMgPj0gOCAqLworCisKKyAgLyogbWF4aW11bSBudW1iZXIgb2YgZ3JheSBzcGFucyBpbiBhIGNhbGwgdG8gdGhlIHNwYW4gY2FsbGJhY2sgKi8KKyNkZWZpbmUgRlRfTUFYX0dSQVlfU1BBTlMgIDMyCisKKworICB0eXBlZGVmIHN0cnVjdCBUQ2VsbF8qICBQQ2VsbDsKKworICB0eXBlZGVmIHN0cnVjdCAgVENlbGxfCisgIHsKKyAgICBUUG9zICAgIHg7ICAgICAvKiBzYW1lIHdpdGggZ3JheV9UV29ya2VyLmV4ICAgICovCisgICAgVENvb3JkICBjb3ZlcjsgLyogc2FtZSB3aXRoIGdyYXlfVFdvcmtlci5jb3ZlciAqLworICAgIFRBcmVhICAgYXJlYTsKKyAgICBQQ2VsbCAgIG5leHQ7CisKKyAgfSBUQ2VsbDsKKworCisjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAgICAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCisgIC8qIFdlIGRpc2FibGUgdGhlIHdhcm5pbmcgYHN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1ZSB0byAgICovCisgIC8qIF9fZGVjbHNwZWMoYWxpZ24oKSknIGluIG9yZGVyIHRvIGNvbXBpbGUgY2xlYW5seSB3aXRoICovCisgIC8qIHRoZSBtYXhpbXVtIGxldmVsIG9mIHdhcm5pbmdzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDMyNCApCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgZ3JheV9UV29ya2VyXworICB7CisgICAgZnRfam1wX2J1ZiAganVtcF9idWZmZXI7CisKKyAgICBUQ29vcmQgIGV4LCBleTsKKyAgICBUUG9zICAgIG1pbl9leCwgbWF4X2V4OworICAgIFRQb3MgICAgbWluX2V5LCBtYXhfZXk7CisgICAgVFBvcyAgICBjb3VudF9leCwgY291bnRfZXk7CisKKyAgICBUQXJlYSAgIGFyZWE7CisgICAgVENvb3JkICBjb3ZlcjsKKyAgICBpbnQgICAgIGludmFsaWQ7CisKKyAgICBQQ2VsbCAgICAgICBjZWxsczsKKyAgICBGVF9QdHJEaXN0ICBtYXhfY2VsbHM7CisgICAgRlRfUHRyRGlzdCAgbnVtX2NlbGxzOworCisgICAgVENvb3JkICBjeCwgY3k7CisgICAgVFBvcyAgICB4LCAgeTsKKworICAgIFRQb3MgICAgbGFzdF9leTsKKworICAgIEZUX1ZlY3RvciAgIGJlel9zdGFja1szMiAqIDMgKyAxXTsKKyAgICBpbnQgICAgICAgICBsZXZfc3RhY2tbMzJdOworCisgICAgRlRfT3V0bGluZSAgb3V0bGluZTsKKyAgICBGVF9CaXRtYXAgICB0YXJnZXQ7CisgICAgRlRfQkJveCAgICAgY2xpcF9ib3g7CisKKyAgICBGVF9TcGFuICAgICBncmF5X3NwYW5zW0ZUX01BWF9HUkFZX1NQQU5TXTsKKyAgICBpbnQgICAgICAgICBudW1fZ3JheV9zcGFuczsKKworICAgIEZUX1Jhc3Rlcl9TcGFuX0Z1bmMgIHJlbmRlcl9zcGFuOworICAgIHZvaWQqICAgICAgICAgICAgICAgIHJlbmRlcl9zcGFuX2RhdGE7CisgICAgaW50ICAgICAgICAgICAgICAgICAgc3Bhbl95OworCisgICAgaW50ICBiYW5kX3NpemU7CisgICAgaW50ICBiYW5kX3Nob290OworCisgICAgdm9pZCogICAgICAgYnVmZmVyOworICAgIGxvbmcgICAgICAgIGJ1ZmZlcl9zaXplOworCisgICAgUENlbGwqICAgICB5Y2VsbHM7CisgICAgVFBvcyAgICAgICB5Y291bnQ7CisKKyAgfSBncmF5X1RXb3JrZXIsICpncmF5X1BXb3JrZXI7CisKKyNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApCisjcHJhZ21hIHdhcm5pbmcoIHBvcCApCisjZW5kaWYKKworCisjaWZuZGVmIEZUX1NUQVRJQ19SQVNURVIKKyNkZWZpbmUgcmFzICAoKndvcmtlcikKKyNlbHNlCisgIHN0YXRpYyBncmF5X1RXb3JrZXIgIHJhczsKKyNlbmRpZgorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgZ3JheV9UUmFzdGVyXworICB7CisgICAgdm9pZCogICAgICAgICBtZW1vcnk7CisKKyAgfSBncmF5X1RSYXN0ZXIsICpncmF5X1BSYXN0ZXI7CisKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2VsbHMgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBncmF5X2luaXRfY2VsbHMoIFJBU19BUkdfIHZvaWQqICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAgIGJ5dGVfc2l6ZSApCisgIHsKKyAgICByYXMuYnVmZmVyICAgICAgPSBidWZmZXI7CisgICAgcmFzLmJ1ZmZlcl9zaXplID0gYnl0ZV9zaXplOworCisgICAgcmFzLnljZWxscyAgICAgID0gKFBDZWxsKikgYnVmZmVyOworICAgIHJhcy5jZWxscyAgICAgICA9IE5VTEw7CisgICAgcmFzLm1heF9jZWxscyAgID0gMDsKKyAgICByYXMubnVtX2NlbGxzICAgPSAwOworICAgIHJhcy5hcmVhICAgICAgICA9IDA7CisgICAgcmFzLmNvdmVyICAgICAgID0gMDsKKyAgICByYXMuaW52YWxpZCAgICAgPSAxOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENvbXB1dGUgdGhlIG91dGxpbmUgYm91bmRpbmcgYm94LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9jb21wdXRlX2Nib3goIFJBU19BUkcgKQorICB7CisgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSAmcmFzLm91dGxpbmU7CisgICAgRlRfVmVjdG9yKiAgIHZlYyAgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgRlRfVmVjdG9yKiAgIGxpbWl0ICAgPSB2ZWMgKyBvdXRsaW5lLT5uX3BvaW50czsKKworCisgICAgaWYgKCBvdXRsaW5lLT5uX3BvaW50cyA8PSAwICkKKyAgICB7CisgICAgICByYXMubWluX2V4ID0gcmFzLm1heF9leCA9IDA7CisgICAgICByYXMubWluX2V5ID0gcmFzLm1heF9leSA9IDA7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmFzLm1pbl9leCA9IHJhcy5tYXhfZXggPSB2ZWMtPng7CisgICAgcmFzLm1pbl9leSA9IHJhcy5tYXhfZXkgPSB2ZWMtPnk7CisKKyAgICB2ZWMrKzsKKworICAgIGZvciAoIDsgdmVjIDwgbGltaXQ7IHZlYysrICkKKyAgICB7CisgICAgICBUUG9zICB4ID0gdmVjLT54OworICAgICAgVFBvcyAgeSA9IHZlYy0+eTsKKworCisgICAgICBpZiAoIHggPCByYXMubWluX2V4ICkgcmFzLm1pbl9leCA9IHg7CisgICAgICBpZiAoIHggPiByYXMubWF4X2V4ICkgcmFzLm1heF9leCA9IHg7CisgICAgICBpZiAoIHkgPCByYXMubWluX2V5ICkgcmFzLm1pbl9leSA9IHk7CisgICAgICBpZiAoIHkgPiByYXMubWF4X2V5ICkgcmFzLm1heF9leSA9IHk7CisgICAgfQorCisgICAgLyogdHJ1bmNhdGUgdGhlIGJvdW5kaW5nIGJveCB0byBpbnRlZ2VyIHBpeGVscyAqLworICAgIHJhcy5taW5fZXggPSByYXMubWluX2V4ID4+IDY7CisgICAgcmFzLm1pbl9leSA9IHJhcy5taW5fZXkgPj4gNjsKKyAgICByYXMubWF4X2V4ID0gKCByYXMubWF4X2V4ICsgNjMgKSA+PiA2OworICAgIHJhcy5tYXhfZXkgPSAoIHJhcy5tYXhfZXkgKyA2MyApID4+IDY7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUmVjb3JkIHRoZSBjdXJyZW50IGNlbGwgaW4gdGhlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgUENlbGwKKyAgZ3JheV9maW5kX2NlbGwoIFJBU19BUkcgKQorICB7CisgICAgUENlbGwgICpwY2VsbCwgY2VsbDsKKyAgICBUUG9zICAgIHggPSByYXMuZXg7CisKKworICAgIGlmICggeCA+IHJhcy5jb3VudF9leCApCisgICAgICB4ID0gcmFzLmNvdW50X2V4OworCisgICAgcGNlbGwgPSAmcmFzLnljZWxsc1tyYXMuZXldOworICAgIGZvciAoOzspCisgICAgeworICAgICAgY2VsbCA9ICpwY2VsbDsKKyAgICAgIGlmICggY2VsbCA9PSBOVUxMIHx8IGNlbGwtPnggPiB4ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmICggY2VsbC0+eCA9PSB4ICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBwY2VsbCA9ICZjZWxsLT5uZXh0OworICAgIH0KKworICAgIGlmICggcmFzLm51bV9jZWxscyA+PSByYXMubWF4X2NlbGxzICkKKyAgICAgIGZ0X2xvbmdqbXAoIHJhcy5qdW1wX2J1ZmZlciwgMSApOworCisgICAgY2VsbCAgICAgICAgPSByYXMuY2VsbHMgKyByYXMubnVtX2NlbGxzKys7CisgICAgY2VsbC0+eCAgICAgPSB4OworICAgIGNlbGwtPmFyZWEgID0gMDsKKyAgICBjZWxsLT5jb3ZlciA9IDA7CisKKyAgICBjZWxsLT5uZXh0ICA9ICpwY2VsbDsKKyAgICAqcGNlbGwgICAgICA9IGNlbGw7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gY2VsbDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX0FSRyApCisgIHsKKyAgICBpZiAoIHJhcy5hcmVhIHwgcmFzLmNvdmVyICkKKyAgICB7CisgICAgICBQQ2VsbCAgY2VsbCA9IGdyYXlfZmluZF9jZWxsKCBSQVNfVkFSICk7CisKKworICAgICAgY2VsbC0+YXJlYSAgKz0gcmFzLmFyZWE7CisgICAgICBjZWxsLT5jb3ZlciArPSByYXMuY292ZXI7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNldCB0aGUgY3VycmVudCBjZWxsIHRvIGEgbmV3IHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9zZXRfY2VsbCggUkFTX0FSR18gVENvb3JkICBleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICBleSApCisgIHsKKyAgICAvKiBNb3ZlIHRoZSBjZWxsIHBvaW50ZXIgdG8gYSBuZXcgcG9zaXRpb24uICBXZSBzZXQgdGhlIGBpbnZhbGlkJyAgICAgICovCisgICAgLyogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjZWxsIGlzbid0IHBhcnQgb2YgdGhvc2Ugd2UncmUgaW50ZXJlc3RlZCAqLworICAgIC8qIGluIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiAgVGhpcyBtZWFucyB0aGF0OiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogLiB0aGUgbmV3IHZlcnRpY2FsIHBvc2l0aW9uIG11c3QgYmUgd2l0aGluIG1pbl9leS4ubWF4X2V5LTEuICAgICAgICAqLworICAgIC8qIC4gdGhlIG5ldyBob3Jpem9udGFsIHBvc2l0aW9uIG11c3QgYmUgc3RyaWN0bHkgbGVzcyB0aGFuIG1heF9leCAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogTm90ZSB0aGF0IGlmIGEgY2VsbCBpcyB0byB0aGUgbGVmdCBvZiB0aGUgY2xpcHBpbmcgcmVnaW9uLCBpdCBpcyAgICAqLworICAgIC8qIGFjdHVhbGx5IHNldCB0byB0aGUgKG1pbl9leC0xKSBob3Jpem9udGFsIHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIEFsbCBjZWxscyB0aGF0IGFyZSBvbiB0aGUgbGVmdCBvZiB0aGUgY2xpcHBpbmcgcmVnaW9uIGdvIHRvIHRoZSAqLworICAgIC8qIG1pbl9leCAtIDEgaG9yaXpvbnRhbCBwb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGV5IC09IHJhcy5taW5fZXk7CisKKyAgICBpZiAoIGV4ID4gcmFzLm1heF9leCApCisgICAgICBleCA9IHJhcy5tYXhfZXg7CisKKyAgICBleCAtPSByYXMubWluX2V4OworICAgIGlmICggZXggPCAwICkKKyAgICAgIGV4ID0gLTE7CisKKyAgICAvKiBhcmUgd2UgbW92aW5nIHRvIGEgZGlmZmVyZW50IGNlbGwgPyAqLworICAgIGlmICggZXggIT0gcmFzLmV4IHx8IGV5ICE9IHJhcy5leSApCisgICAgeworICAgICAgLyogcmVjb3JkIHRoZSBjdXJyZW50IG9uZSBpZiBpdCBpcyB2YWxpZCAqLworICAgICAgaWYgKCAhcmFzLmludmFsaWQgKQorICAgICAgICBncmF5X3JlY29yZF9jZWxsKCBSQVNfVkFSICk7CisKKyAgICAgIHJhcy5hcmVhICA9IDA7CisgICAgICByYXMuY292ZXIgPSAwOworICAgICAgcmFzLmV4ICAgID0gZXg7CisgICAgICByYXMuZXkgICAgPSBleTsKKyAgICB9CisKKyAgICByYXMuaW52YWxpZCA9ICggKHVuc2lnbmVkIGludClleSA+PSAodW5zaWduZWQgaW50KXJhcy5jb3VudF9leSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ID49IHJhcy5jb3VudF9leCAgICAgICAgICAgICAgICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhcnQgYSBuZXcgY29udG91ciBhdCBhIGdpdmVuIGNlbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBncmF5X3N0YXJ0X2NlbGwoIFJBU19BUkdfIFRDb29yZCAgZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICBleSApCisgIHsKKyAgICBpZiAoIGV4ID4gcmFzLm1heF9leCApCisgICAgICBleCA9IChUQ29vcmQpKCByYXMubWF4X2V4ICk7CisKKyAgICBpZiAoIGV4IDwgcmFzLm1pbl9leCApCisgICAgICBleCA9IChUQ29vcmQpKCByYXMubWluX2V4IC0gMSApOworCisgICAgcmFzLmFyZWEgICAgPSAwOworICAgIHJhcy5jb3ZlciAgID0gMDsKKyAgICByYXMuZXggICAgICA9IGV4IC0gcmFzLm1pbl9leDsKKyAgICByYXMuZXkgICAgICA9IGV5IC0gcmFzLm1pbl9leTsKKyAgICByYXMubGFzdF9leSA9IFNVQlBJWEVMUyggZXkgKTsKKyAgICByYXMuaW52YWxpZCA9IDA7CisKKyAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleCwgZXkgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSZW5kZXIgYSBzY2FubGluZSBhcyBvbmUgb3IgbW9yZSBjZWxscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfcmVuZGVyX3NjYW5saW5lKCBSQVNfQVJHXyBUQ29vcmQgIGV5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb29yZCAgeTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUG9zICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICB5MiApCisgIHsKKyAgICBUQ29vcmQgIGV4MSwgZXgyLCBmeDEsIGZ4MiwgZGVsdGEsIG1vZDsKKyAgICBsb25nICAgIHAsIGZpcnN0LCBkeDsKKyAgICBpbnQgICAgIGluY3I7CisKKworICAgIGR4ID0geDIgLSB4MTsKKworICAgIGV4MSA9IFRSVU5DKCB4MSApOworICAgIGV4MiA9IFRSVU5DKCB4MiApOworICAgIGZ4MSA9IChUQ29vcmQpKCB4MSAtIFNVQlBJWEVMUyggZXgxICkgKTsKKyAgICBmeDIgPSAoVENvb3JkKSggeDIgLSBTVUJQSVhFTFMoIGV4MiApICk7CisKKyAgICAvKiB0cml2aWFsIGNhc2UuICBIYXBwZW5zIG9mdGVuICovCisgICAgaWYgKCB5MSA9PSB5MiApCisgICAgeworICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gZXgyLCBleSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgbG9jYXRlZCBpbiBhIHNpbmdsZSBjZWxsLiAgVGhhdCBpcyBlYXN5ISAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZXgxID09IGV4MiApCisgICAgeworICAgICAgZGVsdGEgICAgICA9IHkyIC0geTE7CisgICAgICByYXMuYXJlYSAgKz0gKFRBcmVhKSgoIGZ4MSArIGZ4MiApICogZGVsdGEpOworICAgICAgcmFzLmNvdmVyICs9IGRlbHRhOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIG9rLCB3ZSdsbCBoYXZlIHRvIHJlbmRlciBhIHJ1biBvZiBhZGphY2VudCBjZWxscyBvbiB0aGUgc2FtZSAqLworICAgIC8qIHNjYW5saW5lLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHAgICAgID0gKCBPTkVfUElYRUwgLSBmeDEgKSAqICggeTIgLSB5MSApOworICAgIGZpcnN0ID0gT05FX1BJWEVMOworICAgIGluY3IgID0gMTsKKworICAgIGlmICggZHggPCAwICkKKyAgICB7CisgICAgICBwICAgICA9IGZ4MSAqICggeTIgLSB5MSApOworICAgICAgZmlyc3QgPSAwOworICAgICAgaW5jciAgPSAtMTsKKyAgICAgIGR4ICAgID0gLWR4OworICAgIH0KKworICAgIEZUX0RJVl9NT0QoIFRDb29yZCwgcCwgZHgsIGRlbHRhLCBtb2QgKTsKKworICAgIHJhcy5hcmVhICArPSAoVEFyZWEpKCggZngxICsgZmlyc3QgKSAqIGRlbHRhKTsKKyAgICByYXMuY292ZXIgKz0gZGVsdGE7CisKKyAgICBleDEgKz0gaW5jcjsKKyAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleDEsIGV5ICk7CisgICAgeTEgICs9IGRlbHRhOworCisgICAgaWYgKCBleDEgIT0gZXgyICkKKyAgICB7CisgICAgICBUQ29vcmQgIGxpZnQsIHJlbTsKKworCisgICAgICBwID0gT05FX1BJWEVMICogKCB5MiAtIHkxICsgZGVsdGEgKTsKKyAgICAgIEZUX0RJVl9NT0QoIFRDb29yZCwgcCwgZHgsIGxpZnQsIHJlbSApOworCisgICAgICBtb2QgLT0gKGludClkeDsKKworICAgICAgd2hpbGUgKCBleDEgIT0gZXgyICkKKyAgICAgIHsKKyAgICAgICAgZGVsdGEgPSBsaWZ0OworICAgICAgICBtb2QgICs9IHJlbTsKKyAgICAgICAgaWYgKCBtb2QgPj0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBtb2QgLT0gKFRDb29yZClkeDsKKyAgICAgICAgICBkZWx0YSsrOworICAgICAgICB9CisKKyAgICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSkoT05FX1BJWEVMICogZGVsdGEpOworICAgICAgICByYXMuY292ZXIgKz0gZGVsdGE7CisgICAgICAgIHkxICAgICAgICArPSBkZWx0YTsKKyAgICAgICAgZXgxICAgICAgICs9IGluY3I7CisgICAgICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4MSwgZXkgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkZWx0YSAgICAgID0geTIgLSB5MTsKKyAgICByYXMuYXJlYSAgKz0gKFRBcmVhKSgoIGZ4MiArIE9ORV9QSVhFTCAtIGZpcnN0ICkgKiBkZWx0YSk7CisgICAgcmFzLmNvdmVyICs9IGRlbHRhOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJlbmRlciBhIGdpdmVuIGxpbmUgYXMgYSBzZXJpZXMgb2Ygc2NhbmxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9yZW5kZXJfbGluZSggUkFTX0FSR18gVFBvcyAgdG9feCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgdG9feSApCisgIHsKKyAgICBUQ29vcmQgIGV5MSwgZXkyLCBmeTEsIGZ5MiwgbW9kOworICAgIFRQb3MgICAgZHgsIGR5LCB4LCB4MjsKKyAgICBsb25nICAgIHAsIGZpcnN0OworICAgIGludCAgICAgZGVsdGEsIHJlbSwgbGlmdCwgaW5jcjsKKworCisgICAgZXkxID0gVFJVTkMoIHJhcy5sYXN0X2V5ICk7CisgICAgZXkyID0gVFJVTkMoIHRvX3kgKTsgICAgIC8qIGlmIChleTIgPj0gcmFzLm1heF9leSkgZXkyID0gcmFzLm1heF9leS0xOyAqLworICAgIGZ5MSA9IChUQ29vcmQpKCByYXMueSAtIHJhcy5sYXN0X2V5ICk7CisgICAgZnkyID0gKFRDb29yZCkoIHRvX3kgLSBTVUJQSVhFTFMoIGV5MiApICk7CisKKyAgICBkeCA9IHRvX3ggLSByYXMueDsKKyAgICBkeSA9IHRvX3kgLSByYXMueTsKKworICAgIC8qIHBlcmZvcm0gdmVydGljYWwgY2xpcHBpbmcgKi8KKyAgICB7CisgICAgICBUQ29vcmQgIG1pbiwgbWF4OworCisKKyAgICAgIG1pbiA9IGV5MTsKKyAgICAgIG1heCA9IGV5MjsKKyAgICAgIGlmICggZXkxID4gZXkyICkKKyAgICAgIHsKKyAgICAgICAgbWluID0gZXkyOworICAgICAgICBtYXggPSBleTE7CisgICAgICB9CisgICAgICBpZiAoIG1pbiA+PSByYXMubWF4X2V5IHx8IG1heCA8IHJhcy5taW5fZXkgKQorICAgICAgICBnb3RvIEVuZDsKKyAgICB9CisKKyAgICAvKiBldmVyeXRoaW5nIGlzIG9uIGEgc2luZ2xlIHNjYW5saW5lICovCisgICAgaWYgKCBleTEgPT0gZXkyICkKKyAgICB7CisgICAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLCByYXMueCwgZnkxLCB0b194LCBmeTIgKTsKKyAgICAgIGdvdG8gRW5kOworICAgIH0KKworICAgIC8qIHZlcnRpY2FsIGxpbmUgLSBhdm9pZCBjYWxsaW5nIGdyYXlfcmVuZGVyX3NjYW5saW5lICovCisgICAgaW5jciA9IDE7CisKKyAgICBpZiAoIGR4ID09IDAgKQorICAgIHsKKyAgICAgIFRDb29yZCAgZXggICAgID0gVFJVTkMoIHJhcy54ICk7CisgICAgICBUQ29vcmQgIHR3b19meCA9IChUQ29vcmQpKCAoIHJhcy54IC0gU1VCUElYRUxTKCBleCApICkgPDwgMSApOworICAgICAgVEFyZWEgICBhcmVhOworCisKKyAgICAgIGZpcnN0ID0gT05FX1BJWEVMOworICAgICAgaWYgKCBkeSA8IDAgKQorICAgICAgeworICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgIGluY3IgID0gLTE7CisgICAgICB9CisKKyAgICAgIGRlbHRhICAgICAgPSAoaW50KSggZmlyc3QgLSBmeTEgKTsKKyAgICAgIHJhcy5hcmVhICArPSAoVEFyZWEpdHdvX2Z4ICogZGVsdGE7CisgICAgICByYXMuY292ZXIgKz0gZGVsdGE7CisgICAgICBleTEgICAgICAgKz0gaW5jcjsKKworICAgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gZXgsIGV5MSApOworCisgICAgICBkZWx0YSA9IChpbnQpKCBmaXJzdCArIGZpcnN0IC0gT05FX1BJWEVMICk7CisgICAgICBhcmVhICA9IChUQXJlYSl0d29fZnggKiBkZWx0YTsKKyAgICAgIHdoaWxlICggZXkxICE9IGV5MiApCisgICAgICB7CisgICAgICAgIHJhcy5hcmVhICArPSBhcmVhOworICAgICAgICByYXMuY292ZXIgKz0gZGVsdGE7CisgICAgICAgIGV5MSAgICAgICArPSBpbmNyOworCisgICAgICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleTEgKTsKKyAgICAgIH0KKworICAgICAgZGVsdGEgICAgICA9IChpbnQpKCBmeTIgLSBPTkVfUElYRUwgKyBmaXJzdCApOworICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSl0d29fZnggKiBkZWx0YTsKKyAgICAgIHJhcy5jb3ZlciArPSBkZWx0YTsKKworICAgICAgZ290byBFbmQ7CisgICAgfQorCisgICAgLyogb2ssIHdlIGhhdmUgdG8gcmVuZGVyIHNldmVyYWwgc2NhbmxpbmVzICovCisgICAgcCAgICAgPSAoIE9ORV9QSVhFTCAtIGZ5MSApICogZHg7CisgICAgZmlyc3QgPSBPTkVfUElYRUw7CisgICAgaW5jciAgPSAxOworCisgICAgaWYgKCBkeSA8IDAgKQorICAgIHsKKyAgICAgIHAgICAgID0gZnkxICogZHg7CisgICAgICBmaXJzdCA9IDA7CisgICAgICBpbmNyICA9IC0xOworICAgICAgZHkgICAgPSAtZHk7CisgICAgfQorCisgICAgRlRfRElWX01PRCggaW50LCBwLCBkeSwgZGVsdGEsIG1vZCApOworCisgICAgeCA9IHJhcy54ICsgZGVsdGE7CisgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgcmFzLngsIGZ5MSwgeCwgKFRDb29yZClmaXJzdCApOworCisgICAgZXkxICs9IGluY3I7CisgICAgZ3JheV9zZXRfY2VsbCggUkFTX1ZBUl8gVFJVTkMoIHggKSwgZXkxICk7CisKKyAgICBpZiAoIGV5MSAhPSBleTIgKQorICAgIHsKKyAgICAgIHAgICAgID0gT05FX1BJWEVMICogZHg7CisgICAgICBGVF9ESVZfTU9EKCBpbnQsIHAsIGR5LCBsaWZ0LCByZW0gKTsKKyAgICAgIG1vZCAtPSAoaW50KWR5OworCisgICAgICB3aGlsZSAoIGV5MSAhPSBleTIgKQorICAgICAgeworICAgICAgICBkZWx0YSA9IGxpZnQ7CisgICAgICAgIG1vZCAgKz0gcmVtOworICAgICAgICBpZiAoIG1vZCA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgIG1vZCAtPSAoaW50KWR5OworICAgICAgICAgIGRlbHRhKys7CisgICAgICAgIH0KKworICAgICAgICB4MiA9IHggKyBkZWx0YTsKKyAgICAgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQ29vcmQpKCBPTkVfUElYRUwgLSBmaXJzdCApLCB4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUQ29vcmQpZmlyc3QgKTsKKyAgICAgICAgeCA9IHgyOworCisgICAgICAgIGV5MSArPSBpbmNyOworICAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBUUlVOQyggeCApLCBleTEgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVENvb3JkKSggT05FX1BJWEVMIC0gZmlyc3QgKSwgdG9feCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnkyICk7CisKKyAgRW5kOgorICAgIHJhcy54ICAgICAgID0gdG9feDsKKyAgICByYXMueSAgICAgICA9IHRvX3k7CisgICAgcmFzLmxhc3RfZXkgPSBTVUJQSVhFTFMoIGV5MiApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBncmF5X3NwbGl0X2NvbmljKCBGVF9WZWN0b3IqICBiYXNlICkKKyAgeworICAgIFRQb3MgIGEsIGI7CisKKworICAgIGJhc2VbNF0ueCA9IGJhc2VbMl0ueDsKKyAgICBiID0gYmFzZVsxXS54OworICAgIGEgPSBiYXNlWzNdLnggPSAoIGJhc2VbMl0ueCArIGIgKSAvIDI7CisgICAgYiA9IGJhc2VbMV0ueCA9ICggYmFzZVswXS54ICsgYiApIC8gMjsKKyAgICBiYXNlWzJdLnggPSAoIGEgKyBiICkgLyAyOworCisgICAgYmFzZVs0XS55ID0gYmFzZVsyXS55OworICAgIGIgPSBiYXNlWzFdLnk7CisgICAgYSA9IGJhc2VbM10ueSA9ICggYmFzZVsyXS55ICsgYiApIC8gMjsKKyAgICBiID0gYmFzZVsxXS55ID0gKCBiYXNlWzBdLnkgKyBiICkgLyAyOworICAgIGJhc2VbMl0ueSA9ICggYSArIGIgKSAvIDI7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfcmVuZGVyX2NvbmljKCBSQVNfQVJHXyBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgdG8gKQorICB7CisgICAgVFBvcyAgICAgICAgZHgsIGR5OworICAgIFRQb3MgICAgICAgIG1pbiwgbWF4LCB5OworICAgIGludCAgICAgICAgIHRvcCwgbGV2ZWw7CisgICAgaW50KiAgICAgICAgbGV2ZWxzOworICAgIEZUX1ZlY3RvciogIGFyYzsKKworCisgICAgbGV2ZWxzID0gcmFzLmxldl9zdGFjazsKKworICAgIGFyYyAgICAgID0gcmFzLmJlel9zdGFjazsKKyAgICBhcmNbMF0ueCA9IFVQU0NBTEUoIHRvLT54ICk7CisgICAgYXJjWzBdLnkgPSBVUFNDQUxFKCB0by0+eSApOworICAgIGFyY1sxXS54ID0gVVBTQ0FMRSggY29udHJvbC0+eCApOworICAgIGFyY1sxXS55ID0gVVBTQ0FMRSggY29udHJvbC0+eSApOworICAgIGFyY1syXS54ID0gcmFzLng7CisgICAgYXJjWzJdLnkgPSByYXMueTsKKyAgICB0b3AgICAgICA9IDA7CisKKyAgICBkeCA9IEZUX0FCUyggYXJjWzJdLnggKyBhcmNbMF0ueCAtIDIgKiBhcmNbMV0ueCApOworICAgIGR5ID0gRlRfQUJTKCBhcmNbMl0ueSArIGFyY1swXS55IC0gMiAqIGFyY1sxXS55ICk7CisgICAgaWYgKCBkeCA8IGR5ICkKKyAgICAgIGR4ID0gZHk7CisKKyAgICBpZiAoIGR4IDwgT05FX1BJWEVMIC8gNCApCisgICAgICBnb3RvIERyYXc7CisKKyAgICAvKiBzaG9ydC1jdXQgdGhlIGFyYyB0aGF0IGNyb3NzZXMgdGhlIGN1cnJlbnQgYmFuZCAqLworICAgIG1pbiA9IG1heCA9IGFyY1swXS55OworCisgICAgeSA9IGFyY1sxXS55OworICAgIGlmICggeSA8IG1pbiApIG1pbiA9IHk7CisgICAgaWYgKCB5ID4gbWF4ICkgbWF4ID0geTsKKworICAgIHkgPSBhcmNbMl0ueTsKKyAgICBpZiAoIHkgPCBtaW4gKSBtaW4gPSB5OworICAgIGlmICggeSA+IG1heCApIG1heCA9IHk7CisKKyAgICBpZiAoIFRSVU5DKCBtaW4gKSA+PSByYXMubWF4X2V5IHx8IFRSVU5DKCBtYXggKSA8IHJhcy5taW5fZXkgKQorICAgICAgZ290byBEcmF3OworCisgICAgbGV2ZWwgPSAwOworICAgIGRvCisgICAgeworICAgICAgZHggPj49IDI7CisgICAgICBsZXZlbCsrOworICAgIH0gd2hpbGUgKCBkeCA+IE9ORV9QSVhFTCAvIDQgKTsKKworICAgIGxldmVsc1swXSA9IGxldmVsOworCisgICAgZG8KKyAgICB7CisgICAgICBsZXZlbCA9IGxldmVsc1t0b3BdOworICAgICAgaWYgKCBsZXZlbCA+IDAgKQorICAgICAgeworICAgICAgICBncmF5X3NwbGl0X2NvbmljKCBhcmMgKTsKKyAgICAgICAgYXJjICs9IDI7CisgICAgICAgIHRvcCsrOworICAgICAgICBsZXZlbHNbdG9wXSA9IGxldmVsc1t0b3AgLSAxXSA9IGxldmVsIC0gMTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICBEcmF3OgorICAgICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX1ZBUl8gYXJjWzBdLngsIGFyY1swXS55ICk7CisgICAgICB0b3AtLTsKKyAgICAgIGFyYyAtPSAyOworCisgICAgfSB3aGlsZSAoIHRvcCA+PSAwICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfc3BsaXRfY3ViaWMoIEZUX1ZlY3RvciogIGJhc2UgKQorICB7CisgICAgVFBvcyAgYSwgYiwgYywgZDsKKworCisgICAgYmFzZVs2XS54ID0gYmFzZVszXS54OworICAgIGMgPSBiYXNlWzFdLng7CisgICAgZCA9IGJhc2VbMl0ueDsKKyAgICBiYXNlWzFdLnggPSBhID0gKCBiYXNlWzBdLnggKyBjICkgLyAyOworICAgIGJhc2VbNV0ueCA9IGIgPSAoIGJhc2VbM10ueCArIGQgKSAvIDI7CisgICAgYyA9ICggYyArIGQgKSAvIDI7CisgICAgYmFzZVsyXS54ID0gYSA9ICggYSArIGMgKSAvIDI7CisgICAgYmFzZVs0XS54ID0gYiA9ICggYiArIGMgKSAvIDI7CisgICAgYmFzZVszXS54ID0gKCBhICsgYiApIC8gMjsKKworICAgIGJhc2VbNl0ueSA9IGJhc2VbM10ueTsKKyAgICBjID0gYmFzZVsxXS55OworICAgIGQgPSBiYXNlWzJdLnk7CisgICAgYmFzZVsxXS55ID0gYSA9ICggYmFzZVswXS55ICsgYyApIC8gMjsKKyAgICBiYXNlWzVdLnkgPSBiID0gKCBiYXNlWzNdLnkgKyBkICkgLyAyOworICAgIGMgPSAoIGMgKyBkICkgLyAyOworICAgIGJhc2VbMl0ueSA9IGEgPSAoIGEgKyBjICkgLyAyOworICAgIGJhc2VbNF0ueSA9IGIgPSAoIGIgKyBjICkgLyAyOworICAgIGJhc2VbM10ueSA9ICggYSArIGIgKSAvIDI7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfcmVuZGVyX2N1YmljKCBSQVNfQVJHXyBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIGNvbnRyb2wyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgdG8gKQorICB7CisgICAgRlRfVmVjdG9yKiAgYXJjOworICAgIFRQb3MgICAgICAgIG1pbiwgbWF4LCB5OworCisKKyAgICBhcmMgICAgICA9IHJhcy5iZXpfc3RhY2s7CisgICAgYXJjWzBdLnggPSBVUFNDQUxFKCB0by0+eCApOworICAgIGFyY1swXS55ID0gVVBTQ0FMRSggdG8tPnkgKTsKKyAgICBhcmNbMV0ueCA9IFVQU0NBTEUoIGNvbnRyb2wyLT54ICk7CisgICAgYXJjWzFdLnkgPSBVUFNDQUxFKCBjb250cm9sMi0+eSApOworICAgIGFyY1syXS54ID0gVVBTQ0FMRSggY29udHJvbDEtPnggKTsKKyAgICBhcmNbMl0ueSA9IFVQU0NBTEUoIGNvbnRyb2wxLT55ICk7CisgICAgYXJjWzNdLnggPSByYXMueDsKKyAgICBhcmNbM10ueSA9IHJhcy55OworCisgICAgLyogU2hvcnQtY3V0IHRoZSBhcmMgdGhhdCBjcm9zc2VzIHRoZSBjdXJyZW50IGJhbmQuICovCisgICAgbWluID0gbWF4ID0gYXJjWzBdLnk7CisKKyAgICB5ID0gYXJjWzFdLnk7CisgICAgaWYgKCB5IDwgbWluICkKKyAgICAgIG1pbiA9IHk7CisgICAgaWYgKCB5ID4gbWF4ICkKKyAgICAgIG1heCA9IHk7CisKKyAgICB5ID0gYXJjWzJdLnk7CisgICAgaWYgKCB5IDwgbWluICkKKyAgICAgIG1pbiA9IHk7CisgICAgaWYgKCB5ID4gbWF4ICkKKyAgICAgIG1heCA9IHk7CisKKyAgICB5ID0gYXJjWzNdLnk7CisgICAgaWYgKCB5IDwgbWluICkKKyAgICAgIG1pbiA9IHk7CisgICAgaWYgKCB5ID4gbWF4ICkKKyAgICAgIG1heCA9IHk7CisKKyAgICBpZiAoIFRSVU5DKCBtaW4gKSA+PSByYXMubWF4X2V5IHx8IFRSVU5DKCBtYXggKSA8IHJhcy5taW5fZXkgKQorICAgICAgZ290byBEcmF3OworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAvKiBEZWNpZGUgd2hldGhlciB0byBzcGxpdCBvciBkcmF3LiBTZWUgYFJhcGlkIFRlcm1pbmF0aW9uICAgICAgICAgICovCisgICAgICAvKiBFdmFsdWF0aW9uIGZvciBSZWN1cnNpdmUgU3ViZGl2aXNpb24gb2YgQmV6aWVyIEN1cnZlcycgYnkgVGhvbWFzICovCisgICAgICAvKiBGLiBIYWluLCBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBodHRwOi8vd3d3LmNpcy5zb3V0aGFsYWJhbWEuZWR1L35oYWluL2dlbmVyYWwvUHVibGljYXRpb25zL0Jlemllci9DYW1lcmEtcmVhZHklMjBDSVNTVDAyJTIwMi5wZGYgKi8KKworICAgICAgeworICAgICAgICBUUG9zICBkeCwgZHksIGR4XywgZHlfOworICAgICAgICBUUG9zICBkeDEsIGR5MSwgZHgyLCBkeTI7CisgICAgICAgIFRQb3MgIEwsIHMsIHNfbGltaXQ7CisKKworICAgICAgICAvKiBkeCBhbmQgZHkgYXJlIHggYW5kIHkgY29tcG9uZW50cyBvZiB0aGUgUDAtUDMgY2hvcmQgdmVjdG9yLiAqLworICAgICAgICBkeCA9IGR4XyA9IGFyY1szXS54IC0gYXJjWzBdLng7CisgICAgICAgIGR5ID0gZHlfID0gYXJjWzNdLnkgLSBhcmNbMF0ueTsKKworICAgICAgICBMID0gRlRfSFlQT1QoIGR4XywgZHlfICk7CisKKyAgICAgICAgLyogQXZvaWQgcG9zc2libGUgYXJpdGhtZXRpYyBvdmVyZmxvdyBiZWxvdyBieSBzcGxpdHRpbmcuICovCisgICAgICAgIGlmICggTCA+IDMyNzY3ICkKKyAgICAgICAgICBnb3RvIFNwbGl0OworCisgICAgICAgIC8qIE1heCBkZXZpYXRpb24gbWF5IGJlIGFzIG11Y2ggYXMgKHMvTCkgKiAzLzQgKGlmIEhhaW4ncyB2ID0gMSkuICovCisgICAgICAgIHNfbGltaXQgPSBMICogKFRQb3MpKCBPTkVfUElYRUwgLyA2ICk7CisKKyAgICAgICAgLyogcyBpcyBMICogdGhlIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSBQMSB0byB0aGUgbGluZSBQMC1QMy4gKi8KKyAgICAgICAgZHgxID0gYXJjWzFdLnggLSBhcmNbMF0ueDsKKyAgICAgICAgZHkxID0gYXJjWzFdLnkgLSBhcmNbMF0ueTsKKyAgICAgICAgcyA9IEZUX0FCUyggZHkgKiBkeDEgLSBkeCAqIGR5MSApOworCisgICAgICAgIGlmICggcyA+IHNfbGltaXQgKQorICAgICAgICAgIGdvdG8gU3BsaXQ7CisKKyAgICAgICAgLyogcyBpcyBMICogdGhlIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSBQMiB0byB0aGUgbGluZSBQMC1QMy4gKi8KKyAgICAgICAgZHgyID0gYXJjWzJdLnggLSBhcmNbMF0ueDsKKyAgICAgICAgZHkyID0gYXJjWzJdLnkgLSBhcmNbMF0ueTsKKyAgICAgICAgcyA9IEZUX0FCUyggZHkgKiBkeDIgLSBkeCAqIGR5MiApOworCisgICAgICAgIGlmICggcyA+IHNfbGltaXQgKQorICAgICAgICAgIGdvdG8gU3BsaXQ7CisKKyAgICAgICAgLyogU3BsaXQgc3VwZXIgY3Vydnkgc2VnbWVudHMgd2hlcmUgdGhlIG9mZiBwb2ludHMgYXJlIHNvIGZhcgorICAgICAgICAgICBmcm9tIHRoZSBjaG9yZCB0aGF0IHRoZSBhbmdsZXMgUDAtUDEtUDMgb3IgUDAtUDItUDMgYmVjb21lCisgICAgICAgICAgIGFjdXRlIGFzIGRldGVjdGVkIGJ5IGFwcHJvcHJpYXRlIGRvdCBwcm9kdWN0cy4gKi8KKyAgICAgICAgaWYgKCBkeDEgKiAoIGR4MSAtIGR4ICkgKyBkeTEgKiAoIGR5MSAtIGR5ICkgPiAwIHx8CisgICAgICAgICAgICAgZHgyICogKCBkeDIgLSBkeCApICsgZHkyICogKCBkeTIgLSBkeSApID4gMCApCisgICAgICAgICAgZ290byBTcGxpdDsKKworICAgICAgICAvKiBObyByZWFzb24gdG8gc3BsaXQuICovCisgICAgICAgIGdvdG8gRHJhdzsKKyAgICAgIH0KKworICAgIFNwbGl0OgorICAgICAgZ3JheV9zcGxpdF9jdWJpYyggYXJjICk7CisgICAgICBhcmMgKz0gMzsKKyAgICAgIGNvbnRpbnVlOworCisgICAgRHJhdzoKKyAgICAgIGdyYXlfcmVuZGVyX2xpbmUoIFJBU19WQVJfIGFyY1swXS54LCBhcmNbMF0ueSApOworCisgICAgICBpZiAoIGFyYyA9PSByYXMuYmV6X3N0YWNrICkKKyAgICAgICAgcmV0dXJuOworCisgICAgICBhcmMgLT0gMzsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgZ3JheV9tb3ZlX3RvKCBjb25zdCBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICBncmF5X1BXb3JrZXIgICAgICB3b3JrZXIgKQorICB7CisgICAgVFBvcyAgeCwgeTsKKworCisgICAgLyogcmVjb3JkIGN1cnJlbnQgY2VsbCwgaWYgYW55ICovCisgICAgaWYgKCAhcmFzLmludmFsaWQgKQorICAgICAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX1ZBUiApOworCisgICAgLyogc3RhcnQgdG8gYSBuZXcgcG9zaXRpb24gKi8KKyAgICB4ID0gVVBTQ0FMRSggdG8tPnggKTsKKyAgICB5ID0gVVBTQ0FMRSggdG8tPnkgKTsKKworICAgIGdyYXlfc3RhcnRfY2VsbCggUkFTX1ZBUl8gVFJVTkMoIHggKSwgVFJVTkMoIHkgKSApOworCisgICAgd29ya2VyLT54ID0geDsKKyAgICB3b3JrZXItPnkgPSB5OworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgaW50CisgIGdyYXlfbGluZV90byggY29uc3QgRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgZ3JheV9QV29ya2VyICAgICAgd29ya2VyICkKKyAgeworICAgIGdyYXlfcmVuZGVyX2xpbmUoIFJBU19WQVJfIFVQU0NBTEUoIHRvLT54ICksIFVQU0NBTEUoIHRvLT55ICkgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBncmF5X2NvbmljX3RvKCBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sLAorICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICAgZ3JheV9QV29ya2VyICAgICAgd29ya2VyICkKKyAgeworICAgIGdyYXlfcmVuZGVyX2NvbmljKCBSQVNfVkFSXyBjb250cm9sLCB0byApOworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgaW50CisgIGdyYXlfY3ViaWNfdG8oIGNvbnN0IEZUX1ZlY3RvciogIGNvbnRyb2wxLAorICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sMiwKKyAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgIGdyYXlfUFdvcmtlciAgICAgIHdvcmtlciApCisgIHsKKyAgICBncmF5X3JlbmRlcl9jdWJpYyggUkFTX1ZBUl8gY29udHJvbDEsIGNvbnRyb2wyLCB0byApOworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBncmF5X3JlbmRlcl9zcGFuKCBpbnQgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TcGFuKiAgc3BhbnMsCisgICAgICAgICAgICAgICAgICAgIGdyYXlfUFdvcmtlciAgICB3b3JrZXIgKQorICB7CisgICAgdW5zaWduZWQgY2hhciogIHA7CisgICAgRlRfQml0bWFwKiAgICAgIG1hcCA9ICZ3b3JrZXItPnRhcmdldDsKKworCisgICAgLyogZmlyc3Qgb2YgYWxsLCBjb21wdXRlIHRoZSBzY2FubGluZSBvZmZzZXQgKi8KKyAgICBwID0gKHVuc2lnbmVkIGNoYXIqKW1hcC0+YnVmZmVyIC0geSAqIG1hcC0+cGl0Y2g7CisgICAgaWYgKCBtYXAtPnBpdGNoID49IDAgKQorICAgICAgcCArPSAoIG1hcC0+cm93cyAtIDEgKSAqICh1bnNpZ25lZCBpbnQpbWFwLT5waXRjaDsKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBzcGFucysrICkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICBjb3ZlcmFnZSA9IHNwYW5zLT5jb3ZlcmFnZTsKKworCisgICAgICBpZiAoIGNvdmVyYWdlICkKKyAgICAgIHsKKyAgICAgICAgLyogRm9yIHNtYWxsLXNwYW5zIGl0IGlzIGZhc3RlciB0byBkbyBpdCBieSBvdXJzZWx2ZXMgdGhhbgorICAgICAgICAgKiBjYWxsaW5nIGBtZW1zZXQnLiAgVGhpcyBpcyBtYWlubHkgZHVlIHRvIHRoZSBjb3N0IG9mIHRoZQorICAgICAgICAgKiBmdW5jdGlvbiBjYWxsLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBzcGFucy0+bGVuID49IDggKQorICAgICAgICAgIEZUX01FTV9TRVQoIHAgKyBzcGFucy0+eCwgKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2UsIHNwYW5zLT5sZW4gKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciogIHEgPSBwICsgc3BhbnMtPng7CisKKworICAgICAgICAgIHN3aXRjaCAoIHNwYW5zLT5sZW4gKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDc6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDY6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDU6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDQ6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDM6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDI6ICpxKysgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBjYXNlIDE6ICpxICAgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9obGluZSggUkFTX0FSR18gVENvb3JkICB4LAorICAgICAgICAgICAgICAgICAgICAgICBUQ29vcmQgIHksCisgICAgICAgICAgICAgICAgICAgICAgIFRQb3MgICAgYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICBhY291bnQgKQorICB7CisgICAgaW50ICBjb3ZlcmFnZTsKKworCisgICAgLyogY29tcHV0ZSB0aGUgY292ZXJhZ2UgbGluZSdzIGNvdmVyYWdlLCBkZXBlbmRpbmcgb24gdGhlICAgICovCisgICAgLyogb3V0bGluZSBmaWxsIHJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogdGhlIGNvdmVyYWdlIHBlcmNlbnRhZ2UgaXMgYXJlYS8oUElYRUxfQklUUypQSVhFTF9CSVRTKjIpICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgY292ZXJhZ2UgPSAoaW50KSggYXJlYSA+PiAoIFBJWEVMX0JJVFMgKiAyICsgMSAtIDggKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSByYW5nZSAwLi4yNTYgKi8KKyAgICBpZiAoIGNvdmVyYWdlIDwgMCApCisgICAgICBjb3ZlcmFnZSA9IC1jb3ZlcmFnZTsKKworICAgIGlmICggcmFzLm91dGxpbmUuZmxhZ3MgJiBGVF9PVVRMSU5FX0VWRU5fT0REX0ZJTEwgKQorICAgIHsKKyAgICAgIGNvdmVyYWdlICY9IDUxMTsKKworICAgICAgaWYgKCBjb3ZlcmFnZSA+IDI1NiApCisgICAgICAgIGNvdmVyYWdlID0gNTEyIC0gY292ZXJhZ2U7CisgICAgICBlbHNlIGlmICggY292ZXJhZ2UgPT0gMjU2ICkKKyAgICAgICAgY292ZXJhZ2UgPSAyNTU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBub3JtYWwgbm9uLXplcm8gd2luZGluZyBydWxlICovCisgICAgICBpZiAoIGNvdmVyYWdlID49IDI1NiApCisgICAgICAgIGNvdmVyYWdlID0gMjU1OworICAgIH0KKworICAgIHkgKz0gKFRDb29yZClyYXMubWluX2V5OworICAgIHggKz0gKFRDb29yZClyYXMubWluX2V4OworCisgICAgLyogRlRfU3Bhbi54IGlzIGEgMTYtYml0IHNob3J0LCBzbyBsaW1pdCBvdXIgY29vcmRpbmF0ZXMgYXBwcm9wcmlhdGVseSAqLworICAgIGlmICggeCA+PSAzMjc2NyApCisgICAgICB4ID0gMzI3Njc7CisKKyAgICAvKiBGVF9TcGFuLnkgaXMgYW4gaW50ZWdlciwgc28gbGltaXQgb3VyIGNvb3JkaW5hdGVzIGFwcHJvcHJpYXRlbHkgKi8KKyAgICBpZiAoIHkgPj0gRlRfSU5UX01BWCApCisgICAgICB5ID0gRlRfSU5UX01BWDsKKworICAgIGlmICggY292ZXJhZ2UgKQorICAgIHsKKyAgICAgIEZUX1NwYW4qICBzcGFuOworICAgICAgaW50ICAgICAgIGNvdW50OworCisKKyAgICAgIC8qIHNlZSB3aGV0aGVyIHdlIGNhbiBhZGQgdGhpcyBzcGFuIHRvIHRoZSBjdXJyZW50IGxpc3QgKi8KKyAgICAgIGNvdW50ID0gcmFzLm51bV9ncmF5X3NwYW5zOworICAgICAgc3BhbiAgPSByYXMuZ3JheV9zcGFucyArIGNvdW50IC0gMTsKKyAgICAgIGlmICggY291bnQgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICByYXMuc3Bhbl95ID09IHkgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIChpbnQpc3Bhbi0+eCArIHNwYW4tPmxlbiA9PSAoaW50KXggJiYKKyAgICAgICAgICAgc3Bhbi0+Y292ZXJhZ2UgPT0gY292ZXJhZ2UgICAgICAgICApCisgICAgICB7CisgICAgICAgIHNwYW4tPmxlbiA9ICh1bnNpZ25lZCBzaG9ydCkoIHNwYW4tPmxlbiArIGFjb3VudCApOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmICggcmFzLnNwYW5feSAhPSB5IHx8IGNvdW50ID49IEZUX01BWF9HUkFZX1NQQU5TICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCByYXMucmVuZGVyX3NwYW4gJiYgY291bnQgPiAwICkKKyAgICAgICAgICByYXMucmVuZGVyX3NwYW4oIHJhcy5zcGFuX3ksIGNvdW50LCByYXMuZ3JheV9zcGFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhcy5yZW5kZXJfc3Bhbl9kYXRhICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgICAgIGlmICggY291bnQgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIGludCAgbjsKKworCisgICAgICAgICAgRlRfVFJBQ0U3KCggInkgPSAlM2QgIiwgcmFzLnNwYW5feSApKTsKKyAgICAgICAgICBzcGFuID0gcmFzLmdyYXlfc3BhbnM7CisgICAgICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrLCBzcGFuKysgKQorICAgICAgICAgICAgRlRfVFJBQ0U3KCggIlslZC4uJWRdOiUwMnggIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4tPngsIHNwYW4tPnggKyBzcGFuLT5sZW4gLSAxLCBzcGFuLT5jb3ZlcmFnZSApKTsKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICAgICAgICB9CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisgICAgICAgIHJhcy5udW1fZ3JheV9zcGFucyA9IDA7CisgICAgICAgIHJhcy5zcGFuX3kgICAgICAgICA9IChpbnQpeTsKKworICAgICAgICBzcGFuICA9IHJhcy5ncmF5X3NwYW5zOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBzcGFuKys7CisKKyAgICAgIC8qIGFkZCBhIGdyYXkgc3BhbiB0byB0aGUgY3VycmVudCBsaXN0ICovCisgICAgICBzcGFuLT54ICAgICAgICA9IChzaG9ydCl4OworICAgICAgc3Bhbi0+bGVuICAgICAgPSAodW5zaWduZWQgc2hvcnQpYWNvdW50OworICAgICAgc3Bhbi0+Y292ZXJhZ2UgPSAodW5zaWduZWQgY2hhciljb3ZlcmFnZTsKKworICAgICAgcmFzLm51bV9ncmF5X3NwYW5zKys7CisgICAgfQorICB9CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisKKyAgLyogdG8gYmUgY2FsbGVkIHdoaWxlIGluIHRoZSBkZWJ1Z2dlciAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogdGhpcyBmdW5jdGlvbiBjYXVzZXMgYSBjb21waWxlciB3YXJuaW5nIHNpbmNlIGl0IGlzIHVudXNlZCBvdGhlcndpc2UgKi8KKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9kdW1wX2NlbGxzKCBSQVNfQVJHICkKKyAgeworICAgIGludCAgeWluZGV4OworCisKKyAgICBmb3IgKCB5aW5kZXggPSAwOyB5aW5kZXggPCByYXMueWNvdW50OyB5aW5kZXgrKyApCisgICAgeworICAgICAgUENlbGwgIGNlbGw7CisKKworICAgICAgcHJpbnRmKCAiJTNkOiIsIHlpbmRleCApOworCisgICAgICBmb3IgKCBjZWxsID0gcmFzLnljZWxsc1t5aW5kZXhdOyBjZWxsICE9IE5VTEw7IGNlbGwgPSBjZWxsLT5uZXh0ICkKKyAgICAgICAgcHJpbnRmKCAiICglM2xkLCBjOiU0bGQsIGE6JTZkKSIsIGNlbGwtPngsIGNlbGwtPmNvdmVyLCBjZWxsLT5hcmVhICk7CisgICAgICBwcmludGYoICJcbiIgKTsKKyAgICB9CisgIH0KKworI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKworICBzdGF0aWMgdm9pZAorICBncmF5X3N3ZWVwKCBSQVNfQVJHXyBjb25zdCBGVF9CaXRtYXAqICB0YXJnZXQgKQorICB7CisgICAgaW50ICB5aW5kZXg7CisKKyAgICBGVF9VTlVTRUQoIHRhcmdldCApOworCisKKyAgICBpZiAoIHJhcy5udW1fY2VsbHMgPT0gMCApCisgICAgICByZXR1cm47CisKKyAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOworCisgICAgRlRfVFJBQ0U3KCggImdyYXlfc3dlZXA6IHN0YXJ0XG4iICkpOworCisgICAgZm9yICggeWluZGV4ID0gMDsgeWluZGV4IDwgcmFzLnljb3VudDsgeWluZGV4KysgKQorICAgIHsKKyAgICAgIFBDZWxsICAgY2VsbCAgPSByYXMueWNlbGxzW3lpbmRleF07CisgICAgICBUQ29vcmQgIGNvdmVyID0gMDsKKyAgICAgIFRDb29yZCAgeCAgICAgPSAwOworCisKKyAgICAgIGZvciAoIDsgY2VsbCAhPSBOVUxMOyBjZWxsID0gY2VsbC0+bmV4dCApCisgICAgICB7CisgICAgICAgIFRQb3MgIGFyZWE7CisKKworICAgICAgICBpZiAoIGNlbGwtPnggPiB4ICYmIGNvdmVyICE9IDAgKQorICAgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIHgsIHlpbmRleCwgY292ZXIgKiAoIE9ORV9QSVhFTCAqIDIgKSwKKyAgICAgICAgICAgICAgICAgICAgICBjZWxsLT54IC0geCApOworCisgICAgICAgIGNvdmVyICs9IGNlbGwtPmNvdmVyOworICAgICAgICBhcmVhICAgPSBjb3ZlciAqICggT05FX1BJWEVMICogMiApIC0gY2VsbC0+YXJlYTsKKworICAgICAgICBpZiAoIGFyZWEgIT0gMCAmJiBjZWxsLT54ID49IDAgKQorICAgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIGNlbGwtPngsIHlpbmRleCwgYXJlYSwgMSApOworCisgICAgICAgIHggPSBjZWxsLT54ICsgMTsKKyAgICAgIH0KKworICAgICAgaWYgKCBjb3ZlciAhPSAwICkKKyAgICAgICAgZ3JheV9obGluZSggUkFTX1ZBUl8geCwgeWluZGV4LCBjb3ZlciAqICggT05FX1BJWEVMICogMiApLAorICAgICAgICAgICAgICAgICAgICByYXMuY291bnRfZXggLSB4ICk7CisgICAgfQorCisgICAgaWYgKCByYXMucmVuZGVyX3NwYW4gJiYgcmFzLm51bV9ncmF5X3NwYW5zID4gMCApCisgICAgICByYXMucmVuZGVyX3NwYW4oIHJhcy5zcGFuX3ksIHJhcy5udW1fZ3JheV9zcGFucywKKyAgICAgICAgICAgICAgICAgICAgICAgcmFzLmdyYXlfc3BhbnMsIHJhcy5yZW5kZXJfc3Bhbl9kYXRhICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgICAgaWYgKCByYXMubnVtX2dyYXlfc3BhbnMgPiAwICkKKyAgICB7CisgICAgICBGVF9TcGFuKiAgc3BhbjsKKyAgICAgIGludCAgICAgICBuOworCisKKyAgICAgIEZUX1RSQUNFNygoICJ5ID0gJTNkICIsIHJhcy5zcGFuX3kgKSk7CisgICAgICBzcGFuID0gcmFzLmdyYXlfc3BhbnM7CisgICAgICBmb3IgKCBuID0gMDsgbiA8IHJhcy5udW1fZ3JheV9zcGFuczsgbisrLCBzcGFuKysgKQorICAgICAgICBGVF9UUkFDRTcoKCAiWyVkLi4lZF06JTAyeCAiLAorICAgICAgICAgICAgICAgICAgICBzcGFuLT54LCBzcGFuLT54ICsgc3Bhbi0+bGVuIC0gMSwgc3Bhbi0+Y292ZXJhZ2UgKSk7CisgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICAgIH0KKworICAgIEZUX1RSQUNFNygoICJncmF5X3N3ZWVwOiBlbmRcbiIgKSk7CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisgIH0KKworCisjaWZkZWYgX1NUQU5EQUxPTkVfCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzaG91bGQgb25seSBjb21waWxlIGluIHN0YW5kLWFsb25lIG1vZGUsICAgICAgKi8KKyAgLyogIGkuZS4sIHdoZW4gYnVpbGRpbmcgdGhpcyBjb21wb25lbnQgd2l0aG91dCB0aGUgcmVzdCBvZiBGcmVlVHlwZS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0RlY29tcG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXYWxrIG92ZXIgYW4gb3V0bGluZSdzIHN0cnVjdHVyZSB0byBkZWNvbXBvc2UgaXQgaW50byBpbmRpdmlkdWFsICAgKi8KKyAgLyogICAgc2VnbWVudHMgYW5kIELDqXppZXIgYXJjcy4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhYmxlIHRvIGVtaXQgICAgICAqLworICAvKiAgICBgbW92ZSB0bycgYW5kIGBjbG9zZSB0bycgb3BlcmF0aW9ucyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCAgKi8KKyAgLyogICAgb2YgbmV3IGNvbnRvdXJzIGluIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgdGFyZ2V0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdW5jX2ludGVyZmFjZSA6OiBBIHRhYmxlIG9mIGBlbWl0dGVycycsIGkuZS4sIGZ1bmN0aW9uIHBvaW50ZXJzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGggICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHVzZXIgICAgICAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB3aGljaCBpcyBwYXNzZWQgdG8gZWFjaCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVyIGR1cmluZyB0aGUgZGVjb21wb3NpdGlvbi4gIEl0IGNhbiBiZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZHVyaW5nIHRoZSAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIGRlY29tcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIGludAorICBGVF9PdXRsaW5lX0RlY29tcG9zZSggY29uc3QgRlRfT3V0bGluZSogICAgICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9PdXRsaW5lX0Z1bmNzKiAgZnVuY19pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgdXNlciApCisgIHsKKyN1bmRlZiBTQ0FMRUQKKyNkZWZpbmUgU0NBTEVEKCB4ICkgICggKCAoeCkgPDwgc2hpZnQgKSAtIGRlbHRhICkKKworICAgIEZUX1ZlY3RvciAgIHZfbGFzdDsKKyAgICBGVF9WZWN0b3IgICB2X2NvbnRyb2w7CisgICAgRlRfVmVjdG9yICAgdl9zdGFydDsKKworICAgIEZUX1ZlY3RvciogIHBvaW50OworICAgIEZUX1ZlY3RvciogIGxpbWl0OworICAgIGNoYXIqICAgICAgIHRhZ3M7CisKKyAgICBpbnQgICAgICAgICBlcnJvcjsKKworICAgIGludCAgIG47ICAgICAgICAgLyogaW5kZXggb2YgY29udG91ciBpbiBvdXRsaW5lICAgICAqLworICAgIGludCAgIGZpcnN0OyAgICAgLyogaW5kZXggb2YgZmlyc3QgcG9pbnQgaW4gY29udG91ciAqLworICAgIGNoYXIgIHRhZzsgICAgICAgLyogY3VycmVudCBwb2ludCdzIHN0YXRlICAgICAgICAgICAqLworCisgICAgaW50ICAgc2hpZnQ7CisgICAgVFBvcyAgZGVsdGE7CisKKworICAgIGlmICggIW91dGxpbmUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKworICAgIGlmICggIWZ1bmNfaW50ZXJmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgc2hpZnQgPSBmdW5jX2ludGVyZmFjZS0+c2hpZnQ7CisgICAgZGVsdGEgPSBmdW5jX2ludGVyZmFjZS0+ZGVsdGE7CisgICAgZmlyc3QgPSAwOworCisgICAgZm9yICggbiA9IDA7IG4gPCBvdXRsaW5lLT5uX2NvbnRvdXJzOyBuKysgKQorICAgIHsKKyAgICAgIGludCAgbGFzdDsgIC8qIGluZGV4IG9mIGxhc3QgcG9pbnQgaW4gY29udG91ciAqLworCisKKyAgICAgIEZUX1RSQUNFNSgoICJGVF9PdXRsaW5lX0RlY29tcG9zZTogT3V0bGluZSAlZFxuIiwgbiApKTsKKworICAgICAgbGFzdCAgPSBvdXRsaW5lLT5jb250b3Vyc1tuXTsKKyAgICAgIGlmICggbGFzdCA8IDAgKQorICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKyAgICAgIGxpbWl0ID0gb3V0bGluZS0+cG9pbnRzICsgbGFzdDsKKworICAgICAgdl9zdGFydCAgID0gb3V0bGluZS0+cG9pbnRzW2ZpcnN0XTsKKyAgICAgIHZfc3RhcnQueCA9IFNDQUxFRCggdl9zdGFydC54ICk7CisgICAgICB2X3N0YXJ0LnkgPSBTQ0FMRUQoIHZfc3RhcnQueSApOworCisgICAgICB2X2xhc3QgICA9IG91dGxpbmUtPnBvaW50c1tsYXN0XTsKKyAgICAgIHZfbGFzdC54ID0gU0NBTEVEKCB2X2xhc3QueCApOworICAgICAgdl9sYXN0LnkgPSBTQ0FMRUQoIHZfbGFzdC55ICk7CisKKyAgICAgIHZfY29udHJvbCA9IHZfc3RhcnQ7CisKKyAgICAgIHBvaW50ID0gb3V0bGluZS0+cG9pbnRzICsgZmlyc3Q7CisgICAgICB0YWdzICA9IG91dGxpbmUtPnRhZ3MgICArIGZpcnN0OworICAgICAgdGFnICAgPSBGVF9DVVJWRV9UQUcoIHRhZ3NbMF0gKTsKKworICAgICAgLyogQSBjb250b3VyIGNhbm5vdCBzdGFydCB3aXRoIGEgY3ViaWMgY29udHJvbCBwb2ludCEgKi8KKyAgICAgIGlmICggdGFnID09IEZUX0NVUlZFX1RBR19DVUJJQyApCisgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAvKiBjaGVjayBmaXJzdCBwb2ludCB0byBkZXRlcm1pbmUgb3JpZ2luICovCisgICAgICBpZiAoIHRhZyA9PSBGVF9DVVJWRV9UQUdfQ09OSUMgKQorICAgICAgeworICAgICAgICAvKiBmaXJzdCBwb2ludCBpcyBjb25pYyBjb250cm9sLiAgWWVzLCB0aGlzIGhhcHBlbnMuICovCisgICAgICAgIGlmICggRlRfQ1VSVkVfVEFHKCBvdXRsaW5lLT50YWdzW2xhc3RdICkgPT0gRlRfQ1VSVkVfVEFHX09OICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHN0YXJ0IGF0IGxhc3QgcG9pbnQgaWYgaXQgaXMgb24gdGhlIGN1cnZlICovCisgICAgICAgICAgdl9zdGFydCA9IHZfbGFzdDsKKyAgICAgICAgICBsaW1pdC0tOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIGlmIGJvdGggZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBjb25pYywgICAgICAgICAqLworICAgICAgICAgIC8qIHN0YXJ0IGF0IHRoZWlyIG1pZGRsZSBhbmQgcmVjb3JkIGl0cyBwb3NpdGlvbiAgICAqLworICAgICAgICAgIC8qIGZvciBjbG9zdXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHZfc3RhcnQueCA9ICggdl9zdGFydC54ICsgdl9sYXN0LnggKSAvIDI7CisgICAgICAgICAgdl9zdGFydC55ID0gKCB2X3N0YXJ0LnkgKyB2X2xhc3QueSApIC8gMjsKKworICAgICAgICAgIHZfbGFzdCA9IHZfc3RhcnQ7CisgICAgICAgIH0KKyAgICAgICAgcG9pbnQtLTsKKyAgICAgICAgdGFncy0tOworICAgICAgfQorCisgICAgICBGVF9UUkFDRTUoKCAiICBtb3ZlIHRvICglLjJmLCAlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgIHZfc3RhcnQueCAvIDY0LjAsIHZfc3RhcnQueSAvIDY0LjAgKSk7CisgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5tb3ZlX3RvKCAmdl9zdGFydCwgdXNlciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgd2hpbGUgKCBwb2ludCA8IGxpbWl0ICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgdGFncysrOworCisgICAgICAgIHRhZyA9IEZUX0NVUlZFX1RBRyggdGFnc1swXSApOworICAgICAgICBzd2l0Y2ggKCB0YWcgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRlRfQ1VSVkVfVEFHX09OOiAgLyogZW1pdCBhIHNpbmdsZSBsaW5lX3RvICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CisKKworICAgICAgICAgICAgdmVjLnggPSBTQ0FMRUQoIHBvaW50LT54ICk7CisgICAgICAgICAgICB2ZWMueSA9IFNDQUxFRCggcG9pbnQtPnkgKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgbGluZSB0byAoJS4yZiwgJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB2ZWMueCAvIDY0LjAsIHZlYy55IC8gNjQuMCApKTsKKyAgICAgICAgICAgIGVycm9yID0gZnVuY19pbnRlcmZhY2UtPmxpbmVfdG8oICZ2ZWMsIHVzZXIgKTsKKyAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBGVF9DVVJWRV9UQUdfQ09OSUM6ICAvKiBjb25zdW1lIGNvbmljIGFyY3MgKi8KKyAgICAgICAgICB2X2NvbnRyb2wueCA9IFNDQUxFRCggcG9pbnQtPnggKTsKKyAgICAgICAgICB2X2NvbnRyb2wueSA9IFNDQUxFRCggcG9pbnQtPnkgKTsKKworICAgICAgICBEb19Db25pYzoKKyAgICAgICAgICBpZiAoIHBvaW50IDwgbGltaXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1ZlY3RvciAgdmVjOworICAgICAgICAgICAgRlRfVmVjdG9yICB2X21pZGRsZTsKKworCisgICAgICAgICAgICBwb2ludCsrOworICAgICAgICAgICAgdGFncysrOworICAgICAgICAgICAgdGFnID0gRlRfQ1VSVkVfVEFHKCB0YWdzWzBdICk7CisKKyAgICAgICAgICAgIHZlYy54ID0gU0NBTEVEKCBwb2ludC0+eCApOworICAgICAgICAgICAgdmVjLnkgPSBTQ0FMRUQoIHBvaW50LT55ICk7CisKKyAgICAgICAgICAgIGlmICggdGFnID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGNvbmljIHRvICglLjJmLCAlLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGNvbnRyb2wgKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMueCAvIDY0LjAsIHZlYy55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdl9jb250cm9sLnggLyA2NC4wLCB2X2NvbnRyb2wueSAvIDY0LjAgKSk7CisgICAgICAgICAgICAgIGVycm9yID0gZnVuY19pbnRlcmZhY2UtPmNvbmljX3RvKCAmdl9jb250cm9sLCAmdmVjLCB1c2VyICk7CisgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdGFnICE9IEZUX0NVUlZFX1RBR19DT05JQyApCisgICAgICAgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAgICAgICB2X21pZGRsZS54ID0gKCB2X2NvbnRyb2wueCArIHZlYy54ICkgLyAyOworICAgICAgICAgICAgdl9taWRkbGUueSA9ICggdl9jb250cm9sLnkgKyB2ZWMueSApIC8gMjsKKworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgY29uaWMgdG8gKCUuMmYsICUuMmYpIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGNvbnRyb2wgKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdl9taWRkbGUueCAvIDY0LjAsIHZfbWlkZGxlLnkgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgdl9jb250cm9sLnggLyA2NC4wLCB2X2NvbnRyb2wueSAvIDY0LjAgKSk7CisgICAgICAgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5jb25pY190byggJnZfY29udHJvbCwgJnZfbWlkZGxlLCB1c2VyICk7CisgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICB2X2NvbnRyb2wgPSB2ZWM7CisgICAgICAgICAgICBnb3RvIERvX0NvbmljOworICAgICAgICAgIH0KKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGNvbmljIHRvICglLjJmLCAlLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAiIHdpdGggY29udHJvbCAoJS4yZiwgJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgdl9zdGFydC54IC8gNjQuMCwgdl9zdGFydC55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICB2X2NvbnRyb2wueCAvIDY0LjAsIHZfY29udHJvbC55IC8gNjQuMCApKTsKKyAgICAgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5jb25pY190byggJnZfY29udHJvbCwgJnZfc3RhcnQsIHVzZXIgKTsKKyAgICAgICAgICBnb3RvIENsb3NlOworCisgICAgICAgIGRlZmF1bHQ6ICAvKiBGVF9DVVJWRV9UQUdfQ1VCSUMgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHZlYzEsIHZlYzI7CisKKworICAgICAgICAgICAgaWYgKCBwb2ludCArIDEgPiBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgRlRfQ1VSVkVfVEFHKCB0YWdzWzFdICkgIT0gRlRfQ1VSVkVfVEFHX0NVQklDICkKKyAgICAgICAgICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICAgICAgICAgIHBvaW50ICs9IDI7CisgICAgICAgICAgICB0YWdzICArPSAyOworCisgICAgICAgICAgICB2ZWMxLnggPSBTQ0FMRUQoIHBvaW50Wy0yXS54ICk7CisgICAgICAgICAgICB2ZWMxLnkgPSBTQ0FMRUQoIHBvaW50Wy0yXS55ICk7CisKKyAgICAgICAgICAgIHZlYzIueCA9IFNDQUxFRCggcG9pbnRbLTFdLnggKTsKKyAgICAgICAgICAgIHZlYzIueSA9IFNDQUxFRCggcG9pbnRbLTFdLnkgKTsKKworICAgICAgICAgICAgaWYgKCBwb2ludCA8PSBsaW1pdCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1ZlY3RvciAgdmVjOworCisKKyAgICAgICAgICAgICAgdmVjLnggPSBTQ0FMRUQoIHBvaW50LT54ICk7CisgICAgICAgICAgICAgIHZlYy55ID0gU0NBTEVEKCBwb2ludC0+eSApOworCisgICAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGN1YmljIHRvICglLjJmLCAlLjJmKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIGNvbnRyb2xzICglLjJmLCAlLjJmKSBhbmQgKCUuMmYsICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMueCAvIDY0LjAsIHZlYy55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMS54IC8gNjQuMCwgdmVjMS55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMi54IC8gNjQuMCwgdmVjMi55IC8gNjQuMCApKTsKKyAgICAgICAgICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+Y3ViaWNfdG8oICZ2ZWMxLCAmdmVjMiwgJnZlYywgdXNlciApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVF9UUkFDRTUoKCAiICBjdWJpYyB0byAoJS4yZiwgJS4yZikiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHdpdGggY29udHJvbHMgKCUuMmYsICUuMmYpIGFuZCAoJS4yZiwgJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB2X3N0YXJ0LnggLyA2NC4wLCB2X3N0YXJ0LnkgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgdmVjMS54IC8gNjQuMCwgdmVjMS55IC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIueCAvIDY0LjAsIHZlYzIueSAvIDY0LjAgKSk7CisgICAgICAgICAgICBlcnJvciA9IGZ1bmNfaW50ZXJmYWNlLT5jdWJpY190byggJnZlYzEsICZ2ZWMyLCAmdl9zdGFydCwgdXNlciApOworICAgICAgICAgICAgZ290byBDbG9zZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogY2xvc2UgdGhlIGNvbnRvdXIgd2l0aCBhIGxpbmUgc2VnbWVudCAqLworICAgICAgRlRfVFJBQ0U1KCggIiAgbGluZSB0byAoJS4yZiwgJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICB2X3N0YXJ0LnggLyA2NC4wLCB2X3N0YXJ0LnkgLyA2NC4wICkpOworICAgICAgZXJyb3IgPSBmdW5jX2ludGVyZmFjZS0+bGluZV90byggJnZfc3RhcnQsIHVzZXIgKTsKKworICAgQ2xvc2U6CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBmaXJzdCA9IGxhc3QgKyAxOworICAgIH0KKworICAgIEZUX1RSQUNFNSgoICJGVF9PdXRsaW5lX0RlY29tcG9zZTogRG9uZVxuIiwgbiApKTsKKyAgICByZXR1cm4gMDsKKworICBFeGl0OgorICAgIEZUX1RSQUNFNSgoICJGVF9PdXRsaW5lX0RlY29tcG9zZTogRXJyb3IgJWRcbiIsIGVycm9yICkpOworICAgIHJldHVybiBlcnJvcjsKKworICBJbnZhbGlkX091dGxpbmU6CisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKyAgfQorCisjZW5kaWYgLyogX1NUQU5EQUxPTkVfICovCisKKworICB0eXBlZGVmIHN0cnVjdCAgZ3JheV9UQmFuZF8KKyAgeworICAgIFRQb3MgIG1pbiwgbWF4OworCisgIH0gZ3JheV9UQmFuZDsKKworCisgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKAorICAgIGZ1bmNfaW50ZXJmYWNlLAorCisgICAgKEZUX091dGxpbmVfTW92ZVRvX0Z1bmMpIGdyYXlfbW92ZV90bywKKyAgICAoRlRfT3V0bGluZV9MaW5lVG9fRnVuYykgZ3JheV9saW5lX3RvLAorICAgIChGVF9PdXRsaW5lX0NvbmljVG9fRnVuYylncmF5X2NvbmljX3RvLAorICAgIChGVF9PdXRsaW5lX0N1YmljVG9fRnVuYylncmF5X2N1YmljX3RvLAorICAgIDAsCisgICAgMCApCisKKworICBzdGF0aWMgaW50CisgIGdyYXlfY29udmVydF9nbHlwaF9pbm5lciggUkFTX0FSRyApCisgIHsKKworICAgIHZvbGF0aWxlIGludCAgZXJyb3IgPSAwOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgICAgIEZUX091dGxpbmVfRnVuY3MgZnVuY19pbnRlcmZhY2U7CisgICAgICBJbml0X0NsYXNzX2Z1bmNfaW50ZXJmYWNlKCZmdW5jX2ludGVyZmFjZSk7CisjZW5kaWYKKworICAgIGlmICggZnRfc2V0am1wKCByYXMuanVtcF9idWZmZXIgKSA9PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX091dGxpbmVfRGVjb21wb3NlKCAmcmFzLm91dGxpbmUsICZmdW5jX2ludGVyZmFjZSwgJnJhcyApOworICAgICAgaWYgKCAhcmFzLmludmFsaWQgKQorICAgICAgICBncmF5X3JlY29yZF9jZWxsKCBSQVNfVkFSICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfVEhST1coIE1lbW9yeV9PdmVyZmxvdyApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgaW50CisgIGdyYXlfY29udmVydF9nbHlwaCggUkFTX0FSRyApCisgIHsKKyAgICBncmF5X1RCYW5kICAgICAgICAgICAgYmFuZHNbNDBdOworICAgIGdyYXlfVEJhbmQqIHZvbGF0aWxlICBiYW5kOworICAgIGludCB2b2xhdGlsZSAgICAgICAgICBuLCBudW1fYmFuZHM7CisgICAgVFBvcyB2b2xhdGlsZSAgICAgICAgIG1pbiwgbWF4LCBtYXhfeTsKKyAgICBGVF9CQm94KiAgICAgICAgICAgICAgY2xpcDsKKworCisgICAgLyogU2V0IHVwIHN0YXRlIGluIHRoZSByYXN0ZXIgb2JqZWN0ICovCisgICAgZ3JheV9jb21wdXRlX2Nib3goIFJBU19WQVIgKTsKKworICAgIC8qIGNsaXAgdG8gdGFyZ2V0IGJpdG1hcCwgZXhpdCBpZiBub3RoaW5nIHRvIGRvICovCisgICAgY2xpcCA9ICZyYXMuY2xpcF9ib3g7CisKKyAgICBpZiAoIHJhcy5tYXhfZXggPD0gY2xpcC0+eE1pbiB8fCByYXMubWluX2V4ID49IGNsaXAtPnhNYXggfHwKKyAgICAgICAgIHJhcy5tYXhfZXkgPD0gY2xpcC0+eU1pbiB8fCByYXMubWluX2V5ID49IGNsaXAtPnlNYXggKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIHJhcy5taW5fZXggPCBjbGlwLT54TWluICkgcmFzLm1pbl9leCA9IGNsaXAtPnhNaW47CisgICAgaWYgKCByYXMubWluX2V5IDwgY2xpcC0+eU1pbiApIHJhcy5taW5fZXkgPSBjbGlwLT55TWluOworCisgICAgaWYgKCByYXMubWF4X2V4ID4gY2xpcC0+eE1heCApIHJhcy5tYXhfZXggPSBjbGlwLT54TWF4OworICAgIGlmICggcmFzLm1heF9leSA+IGNsaXAtPnlNYXggKSByYXMubWF4X2V5ID0gY2xpcC0+eU1heDsKKworICAgIHJhcy5jb3VudF9leCA9IHJhcy5tYXhfZXggLSByYXMubWluX2V4OworICAgIHJhcy5jb3VudF9leSA9IHJhcy5tYXhfZXkgLSByYXMubWluX2V5OworCisgICAgLyogc2V0IHVwIHZlcnRpY2FsIGJhbmRzICovCisgICAgbnVtX2JhbmRzID0gKGludCkoICggcmFzLm1heF9leSAtIHJhcy5taW5fZXkgKSAvIHJhcy5iYW5kX3NpemUgKTsKKyAgICBpZiAoIG51bV9iYW5kcyA9PSAwICkKKyAgICAgIG51bV9iYW5kcyA9IDE7CisgICAgaWYgKCBudW1fYmFuZHMgPj0gMzkgKQorICAgICAgbnVtX2JhbmRzID0gMzk7CisKKyAgICByYXMuYmFuZF9zaG9vdCA9IDA7CisKKyAgICBtaW4gICA9IHJhcy5taW5fZXk7CisgICAgbWF4X3kgPSByYXMubWF4X2V5OworCisgICAgZm9yICggbiA9IDA7IG4gPCBudW1fYmFuZHM7IG4rKywgbWluID0gbWF4ICkKKyAgICB7CisgICAgICBtYXggPSBtaW4gKyByYXMuYmFuZF9zaXplOworICAgICAgaWYgKCBuID09IG51bV9iYW5kcyAtIDEgfHwgbWF4ID4gbWF4X3kgKQorICAgICAgICBtYXggPSBtYXhfeTsKKworICAgICAgYmFuZHNbMF0ubWluID0gbWluOworICAgICAgYmFuZHNbMF0ubWF4ID0gbWF4OworICAgICAgYmFuZCAgICAgICAgID0gYmFuZHM7CisKKyAgICAgIHdoaWxlICggYmFuZCA+PSBiYW5kcyApCisgICAgICB7CisgICAgICAgIFRQb3MgIGJvdHRvbSwgdG9wLCBtaWRkbGU7CisgICAgICAgIGludCAgIGVycm9yOworCisgICAgICAgIHsKKyAgICAgICAgICBQQ2VsbCAgY2VsbHNfbWF4OworICAgICAgICAgIGludCAgICB5aW5kZXg7CisgICAgICAgICAgbG9uZyAgIGNlbGxfc3RhcnQsIGNlbGxfZW5kLCBjZWxsX21vZDsKKworCisgICAgICAgICAgcmFzLnljZWxscyA9IChQQ2VsbCopcmFzLmJ1ZmZlcjsKKyAgICAgICAgICByYXMueWNvdW50ID0gYmFuZC0+bWF4IC0gYmFuZC0+bWluOworCisgICAgICAgICAgY2VsbF9zdGFydCA9IChsb25nKXNpemVvZiAoIFBDZWxsICkgKiByYXMueWNvdW50OworICAgICAgICAgIGNlbGxfbW9kICAgPSBjZWxsX3N0YXJ0ICUgKGxvbmcpc2l6ZW9mICggVENlbGwgKTsKKyAgICAgICAgICBpZiAoIGNlbGxfbW9kID4gMCApCisgICAgICAgICAgICBjZWxsX3N0YXJ0ICs9IChsb25nKXNpemVvZiAoIFRDZWxsICkgLSBjZWxsX21vZDsKKworICAgICAgICAgIGNlbGxfZW5kICA9IHJhcy5idWZmZXJfc2l6ZTsKKyAgICAgICAgICBjZWxsX2VuZCAtPSBjZWxsX2VuZCAlIChsb25nKXNpemVvZiAoIFRDZWxsICk7CisKKyAgICAgICAgICBjZWxsc19tYXggPSAoUENlbGwpKCAoY2hhciopcmFzLmJ1ZmZlciArIGNlbGxfZW5kICk7CisgICAgICAgICAgcmFzLmNlbGxzID0gKFBDZWxsKSggKGNoYXIqKXJhcy5idWZmZXIgKyBjZWxsX3N0YXJ0ICk7CisgICAgICAgICAgaWYgKCByYXMuY2VsbHMgPj0gY2VsbHNfbWF4ICkKKyAgICAgICAgICAgIGdvdG8gUmVkdWNlQmFuZHM7CisKKyAgICAgICAgICByYXMubWF4X2NlbGxzID0gY2VsbHNfbWF4IC0gcmFzLmNlbGxzOworICAgICAgICAgIGlmICggcmFzLm1heF9jZWxscyA8IDIgKQorICAgICAgICAgICAgZ290byBSZWR1Y2VCYW5kczsKKworICAgICAgICAgIGZvciAoIHlpbmRleCA9IDA7IHlpbmRleCA8IHJhcy55Y291bnQ7IHlpbmRleCsrICkKKyAgICAgICAgICAgIHJhcy55Y2VsbHNbeWluZGV4XSA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByYXMubnVtX2NlbGxzID0gMDsKKyAgICAgICAgcmFzLmludmFsaWQgICA9IDE7CisgICAgICAgIHJhcy5taW5fZXkgICAgPSBiYW5kLT5taW47CisgICAgICAgIHJhcy5tYXhfZXkgICAgPSBiYW5kLT5tYXg7CisgICAgICAgIHJhcy5jb3VudF9leSAgPSBiYW5kLT5tYXggLSBiYW5kLT5taW47CisKKyAgICAgICAgZXJyb3IgPSBncmF5X2NvbnZlcnRfZ2x5cGhfaW5uZXIoIFJBU19WQVIgKTsKKworICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIHsKKyAgICAgICAgICBncmF5X3N3ZWVwKCBSQVNfVkFSXyAmcmFzLnRhcmdldCApOworICAgICAgICAgIGJhbmQtLTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZXJyb3IgIT0gRXJyUmFzdGVyX01lbW9yeV9PdmVyZmxvdyApCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIFJlZHVjZUJhbmRzOgorICAgICAgICAvKiByZW5kZXIgcG9vbCBvdmVyZmxvdzsgd2Ugd2lsbCByZWR1Y2UgdGhlIHJlbmRlciBiYW5kIGJ5IGhhbGYgKi8KKyAgICAgICAgYm90dG9tID0gYmFuZC0+bWluOworICAgICAgICB0b3AgICAgPSBiYW5kLT5tYXg7CisgICAgICAgIG1pZGRsZSA9IGJvdHRvbSArICggKCB0b3AgLSBib3R0b20gKSA+PiAxICk7CisKKyAgICAgICAgLyogVGhpcyBpcyB0b28gY29tcGxleCBmb3IgYSBzaW5nbGUgc2NhbmxpbmU7IHRoZXJlIG11c3QgKi8KKyAgICAgICAgLyogYmUgc29tZSBwcm9ibGVtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBtaWRkbGUgPT0gYm90dG9tICkKKyAgICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgRlRfVFJBQ0U3KCggImdyYXlfY29udmVydF9nbHlwaDogcm90dGVuIGdseXBoXG4iICkpOworI2VuZGlmCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGJvdHRvbS10b3AgPj0gcmFzLmJhbmRfc2l6ZSApCisgICAgICAgICAgcmFzLmJhbmRfc2hvb3QrKzsKKworICAgICAgICBiYW5kWzFdLm1pbiA9IGJvdHRvbTsKKyAgICAgICAgYmFuZFsxXS5tYXggPSBtaWRkbGU7CisgICAgICAgIGJhbmRbMF0ubWluID0gbWlkZGxlOworICAgICAgICBiYW5kWzBdLm1heCA9IHRvcDsKKyAgICAgICAgYmFuZCsrOworICAgICAgfQorICAgIH0KKworICAgIGlmICggcmFzLmJhbmRfc2hvb3QgPiA4ICYmIHJhcy5iYW5kX3NpemUgPiAxNiApCisgICAgICByYXMuYmFuZF9zaXplID0gcmFzLmJhbmRfc2l6ZSAvIDI7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBncmF5X3Jhc3Rlcl9yZW5kZXIoIGdyYXlfUFJhc3RlciAgICAgICAgICAgICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCisgIHsKKyAgICBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSAgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CisgICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgID0gcGFyYW1zLT50YXJnZXQ7CisKKyAgICBncmF5X1RXb3JrZXIgIHdvcmtlclsxXTsKKworICAgIFRDZWxsICBidWZmZXJbRlRfTUFYKCBGVF9SRU5ERVJfUE9PTF9TSVpFLCAyMDQ4ICkgLyBzaXplb2YgKCBUQ2VsbCApXTsKKyAgICBsb25nICAgYnVmZmVyX3NpemUgPSBzaXplb2YgKCBidWZmZXIgKTsKKyAgICBpbnQgICAgYmFuZF9zaXplICAgPSAoaW50KSggYnVmZmVyX3NpemUgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoIHNpemVvZiAoIFRDZWxsICkgKiA4ICkgKTsKKworCisgICAgaWYgKCAhcmFzdGVyICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCAhb3V0bGluZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgLyogcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZSBvdXRsaW5lIGlzIGVtcHR5ICovCisgICAgaWYgKCBvdXRsaW5lLT5uX3BvaW50cyA9PSAwIHx8IG91dGxpbmUtPm5fY29udG91cnMgPD0gMCApCisgICAgICByZXR1cm4gMDsKKworICAgIGlmICggIW91dGxpbmUtPmNvbnRvdXJzIHx8ICFvdXRsaW5lLT5wb2ludHMgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKworICAgIGlmICggb3V0bGluZS0+bl9wb2ludHMgIT0KKyAgICAgICAgICAgb3V0bGluZS0+Y29udG91cnNbb3V0bGluZS0+bl9jb250b3VycyAtIDFdICsgMSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworCisgICAgLyogaWYgZGlyZWN0IG1vZGUgaXMgbm90IHNldCwgd2UgbXVzdCBoYXZlIGEgdGFyZ2V0IGJpdG1hcCAqLworICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKKyAgICB7CisgICAgICBpZiAoICF0YXJnZXRfbWFwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICAgIGlmICggIXRhcmdldF9tYXAtPndpZHRoIHx8ICF0YXJnZXRfbWFwLT5yb3dzICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgIGlmICggIXRhcmdldF9tYXAtPmJ1ZmZlciApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKworICAgIC8qIHRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IG1vbm9jaHJvbWUgcmVuZGVyaW5nICovCisgICAgaWYgKCAhKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQUEgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTW9kZSApOworCisgICAgLyogY29tcHV0ZSBjbGlwcGluZyBib3ggKi8KKyAgICBpZiAoICEoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKSApCisgICAgeworICAgICAgLyogY29tcHV0ZSBjbGlwIGJveCBmcm9tIHRhcmdldCBwaXhtYXAgKi8KKyAgICAgIHJhcy5jbGlwX2JveC54TWluID0gMDsKKyAgICAgIHJhcy5jbGlwX2JveC55TWluID0gMDsKKyAgICAgIHJhcy5jbGlwX2JveC54TWF4ID0gKEZUX1Bvcyl0YXJnZXRfbWFwLT53aWR0aDsKKyAgICAgIHJhcy5jbGlwX2JveC55TWF4ID0gKEZUX1Bvcyl0YXJnZXRfbWFwLT5yb3dzOworICAgIH0KKyAgICBlbHNlIGlmICggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0NMSVAgKQorICAgICAgcmFzLmNsaXBfYm94ID0gcGFyYW1zLT5jbGlwX2JveDsKKyAgICBlbHNlCisgICAgeworICAgICAgcmFzLmNsaXBfYm94LnhNaW4gPSAtMzI3NjhMOworICAgICAgcmFzLmNsaXBfYm94LnlNaW4gPSAtMzI3NjhMOworICAgICAgcmFzLmNsaXBfYm94LnhNYXggPSAgMzI3NjdMOworICAgICAgcmFzLmNsaXBfYm94LnlNYXggPSAgMzI3NjdMOworICAgIH0KKworICAgIGdyYXlfaW5pdF9jZWxscyggUkFTX1ZBUl8gYnVmZmVyLCBidWZmZXJfc2l6ZSApOworCisgICAgcmFzLm91dGxpbmUgICAgICAgID0gKm91dGxpbmU7CisgICAgcmFzLm51bV9jZWxscyAgICAgID0gMDsKKyAgICByYXMuaW52YWxpZCAgICAgICAgPSAxOworICAgIHJhcy5iYW5kX3NpemUgICAgICA9IGJhbmRfc2l6ZTsKKyAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOworICAgIHJhcy5zcGFuX3kgICAgICAgICA9IDA7CisKKyAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKQorICAgIHsKKyAgICAgIHJhcy5yZW5kZXJfc3BhbiAgICAgID0gKEZUX1Jhc3Rlcl9TcGFuX0Z1bmMpcGFyYW1zLT5ncmF5X3NwYW5zOworICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSBwYXJhbXMtPnVzZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByYXMudGFyZ2V0ICAgICAgICAgICA9ICp0YXJnZXRfbWFwOworICAgICAgcmFzLnJlbmRlcl9zcGFuICAgICAgPSAoRlRfUmFzdGVyX1NwYW5fRnVuYylncmF5X3JlbmRlcl9zcGFuOworICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSAmcmFzOworICAgIH0KKworICAgIHJldHVybiBncmF5X2NvbnZlcnRfZ2x5cGgoIFJBU19WQVIgKTsKKyAgfQorCisKKyAgLyoqKiogUkFTVEVSIE9CSkVDVCBDUkVBVElPTjogSW4gc3RhbmQtYWxvbmUgbW9kZSwgd2Ugc2ltcGx5IHVzZSAqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgYSBzdGF0aWMgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqKioqKi8KKworI2lmZGVmIF9TVEFOREFMT05FXworCisgIHN0YXRpYyBpbnQKKyAgZ3JheV9yYXN0ZXJfbmV3KCB2b2lkKiAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgRlRfUmFzdGVyKiAgYXJhc3RlciApCisgIHsKKyAgICBzdGF0aWMgZ3JheV9UUmFzdGVyICB0aGVfcmFzdGVyOworCisgICAgRlRfVU5VU0VEKCBtZW1vcnkgKTsKKworCisgICAgKmFyYXN0ZXIgPSAoRlRfUmFzdGVyKSZ0aGVfcmFzdGVyOworICAgIEZUX01FTV9aRVJPKCAmdGhlX3Jhc3Rlciwgc2l6ZW9mICggdGhlX3Jhc3RlciApICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZ3JheV9yYXN0ZXJfZG9uZSggRlRfUmFzdGVyICByYXN0ZXIgKQorICB7CisgICAgLyogbm90aGluZyAqLworICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CisgIH0KKworI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworCisgIHN0YXRpYyBpbnQKKyAgZ3JheV9yYXN0ZXJfbmV3KCBGVF9NZW1vcnkgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgRlRfUmFzdGVyKiAgYXJhc3RlciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIGdyYXlfUFJhc3RlciAgcmFzdGVyID0gTlVMTDsKKworCisgICAgKmFyYXN0ZXIgPSAwOworICAgIGlmICggIUZUX0FMTE9DKCByYXN0ZXIsIHNpemVvZiAoIGdyYXlfVFJhc3RlciApICkgKQorICAgIHsKKyAgICAgIHJhc3Rlci0+bWVtb3J5ID0gbWVtb3J5OworICAgICAgKmFyYXN0ZXIgICAgICAgPSAoRlRfUmFzdGVyKXJhc3RlcjsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIGdyYXlfcmFzdGVyX2RvbmUoIEZUX1Jhc3RlciAgcmFzdGVyICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gKEZUX01lbW9yeSkoKGdyYXlfUFJhc3RlcilyYXN0ZXIpLT5tZW1vcnk7CisKKworICAgIEZUX0ZSRUUoIHJhc3RlciApOworICB9CisKKyNlbmRpZiAvKiAhX1NUQU5EQUxPTkVfICovCisKKworICBzdGF0aWMgdm9pZAorICBncmF5X3Jhc3Rlcl9yZXNldCggRlRfUmFzdGVyICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgIHBvb2xfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgcG9vbF9zaXplICkKKyAgeworICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CisgICAgRlRfVU5VU0VEKCBwb29sX2Jhc2UgKTsKKyAgICBGVF9VTlVTRUQoIHBvb2xfc2l6ZSApOworICB9CisKKworICBzdGF0aWMgaW50CisgIGdyYXlfcmFzdGVyX3NldF9tb2RlKCBGVF9SYXN0ZXIgICAgICByYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VTlVTRUQoIHJhc3RlciApOworICAgIEZUX1VOVVNFRCggbW9kZSApOworICAgIEZUX1VOVVNFRCggYXJncyApOworCisKKyAgICByZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLworICB9CisKKworICBGVF9ERUZJTkVfUkFTVEVSX0ZVTkNTKAorICAgIGZ0X2dyYXlzX3Jhc3RlciwKKworICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAorCisgICAgKEZUX1Jhc3Rlcl9OZXdfRnVuYykgICAgIGdyYXlfcmFzdGVyX25ldywKKyAgICAoRlRfUmFzdGVyX1Jlc2V0X0Z1bmMpICAgZ3JheV9yYXN0ZXJfcmVzZXQsCisgICAgKEZUX1Jhc3Rlcl9TZXRfTW9kZV9GdW5jKWdyYXlfcmFzdGVyX3NldF9tb2RlLAorICAgIChGVF9SYXN0ZXJfUmVuZGVyX0Z1bmMpICBncmF5X3Jhc3Rlcl9yZW5kZXIsCisgICAgKEZUX1Jhc3Rlcl9Eb25lX0Z1bmMpICAgIGdyYXlfcmFzdGVyX2RvbmUgKQorCisKKy8qIEVORCAqLworCisKKy8qIExvY2FsIFZhcmlhYmxlczogKi8KKy8qIGNvZGluZzogdXRmLTggICAgKi8KKy8qIEVuZDogICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0Z3JheXMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0Z3JheXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU3NjAzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRncmF5cy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0Z3JheXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBzbW9vdGggcmVuZGVyZXIgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUR1JBWVNfSF9fCisjZGVmaW5lIF9fRlRHUkFZU19IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIGV4dGVybiAiQyIgeworI2VuZGlmCisKKworI2lmZGVmIF9TVEFOREFMT05FXworI2luY2x1ZGUgImZ0aW1hZ2UuaCIKKyNlbHNlCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSCAvKiBmb3IgRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKyNpbmNsdWRlIEZUX0lNQUdFX0gKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUbyBtYWtlIGZ0Z3JheXMuaCBpbmRlcGVuZGVudCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2UgY2hlY2sgICAgICAgKi8KKyAgLyogd2hldGhlciBGVF9FWFBPUlRfVkFSIGhhcyBiZWVuIGRlZmluZWQgYWxyZWFkeS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPbiBzb21lIHN5c3RlbXMgYW5kIGNvbXBpbGVycyAoV2luMzIgbW9zdGx5KSwgYW4gZXh0cmEga2V5d29yZCBpcyAgICAgKi8KKyAgLyogbmVjZXNzYXJ5IHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgYXMgYSBETEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBGVF9FWFBPUlRfVkFSCisjZGVmaW5lIEZUX0VYUE9SVF9WQVIoIHggKSAgZXh0ZXJuICB4CisjZW5kaWYKKworICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9SYXN0ZXJfRnVuY3MgKSAgZnRfZ3JheXNfcmFzdGVyOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworICB9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fRlRHUkFZU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c21lcnJzLmggYi9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9mdHNtZXJycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzhhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9mdHNtZXJycy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c21lcnJzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBzbW9vdGggcmVuZGVyZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgc21vb3RoIHJlbmRlcmVyIGVycm9yIGVudW1lcmF0aW9uICAgICAqLworICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRTTUVSUlNfSF9fCisjZGVmaW5lIF9fRlRTTUVSUlNfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFNtb290aF9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfU21vb3RoCisKKyNpbmNsdWRlIEZUX0VSUk9SU19ICisKKyNlbmRpZiAvKiBfX0ZUU01FUlJTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRzbW9vdGguYyBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c21vb3RoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyMDU1MAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c21vb3RoLmMKQEAgLTAsMCArMSw1MTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c21vb3RoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX09VVExJTkVfSAorI2luY2x1ZGUgImZ0c21vb3RoLmgiCisjaW5jbHVkZSAiZnRncmF5cy5oIgorI2luY2x1ZGUgImZ0c3BpYy5oIgorCisjaW5jbHVkZSAiZnRzbWVycnMuaCIKKworCisgIC8qIGluaXRpYWxpemUgcmVuZGVyZXIgLS0gaW5pdCBpdHMgcmFzdGVyICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zbW9vdGhfaW5pdCggRlRfUmVuZGVyZXIgIHJlbmRlciApCisgIHsKKyAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5ID0gRlRfTU9EVUxFX0xJQlJBUlkoIHJlbmRlciApOworCisKKyAgICByZW5kZXItPmNsYXp6LT5yYXN0ZXJfY2xhc3MtPnJhc3Rlcl9yZXNldCggcmVuZGVyLT5yYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnktPnJhc3Rlcl9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbF9zaXplICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyogc2V0cyByZW5kZXItc3BlY2lmaWMgbW9kZSAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfc21vb3RoX3NldF9tb2RlKCBGVF9SZW5kZXJlciAgcmVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBtb2RlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZGF0YSApCisgIHsKKyAgICAvKiB3ZSBzaW1wbHkgcGFzcyBpdCB0byB0aGUgcmFzdGVyICovCisgICAgcmV0dXJuIHJlbmRlci0+Y2xhenotPnJhc3Rlcl9jbGFzcy0+cmFzdGVyX3NldF9tb2RlKCByZW5kZXItPnJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSApOworICB9CisKKyAgLyogdHJhbnNmb3JtIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF90cmFuc2Zvcm0oIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfTWF0cml4KiAgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBkZWx0YSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggc2xvdC0+Zm9ybWF0ICE9IHJlbmRlci0+Z2x5cGhfZm9ybWF0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBtYXRyaXggKQorICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZzbG90LT5vdXRsaW5lLCBtYXRyaXggKTsKKworICAgIGlmICggZGVsdGEgKQorICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZzbG90LT5vdXRsaW5lLCBkZWx0YS0+eCwgZGVsdGEtPnkgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogcmV0dXJuIHRoZSBnbHlwaCdzIGNvbnRyb2wgYm94ICovCisgIHN0YXRpYyB2b2lkCisgIGZ0X3Ntb290aF9nZXRfY2JveCggRlRfUmVuZGVyZXIgICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3gqICAgICAgY2JveCApCisgIHsKKyAgICBGVF9NRU1fWkVSTyggY2JveCwgc2l6ZW9mICggKmNib3ggKSApOworCisgICAgaWYgKCBzbG90LT5mb3JtYXQgPT0gcmVuZGVyLT5nbHlwaF9mb3JtYXQgKQorICAgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggJnNsb3QtPm91dGxpbmUsIGNib3ggKTsKKyAgfQorCisKKyAgLyogY29udmVydCBhIHNsb3QncyBnbHlwaCBpbWFnZSBpbnRvIGEgYml0bWFwICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIHJlcXVpcmVkX21vZGUgKQorICB7CisgICAgRlRfRXJyb3IgICAgIGVycm9yOworICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gJnNsb3QtPm91dGxpbmU7CisgICAgRlRfQml0bWFwKiAgIGJpdG1hcCAgPSAmc2xvdC0+Yml0bWFwOworICAgIEZUX01lbW9yeSAgICBtZW1vcnkgID0gcmVuZGVyLT5yb290Lm1lbW9yeTsKKyAgICBGVF9CQm94ICAgICAgY2JveDsKKyAgICBGVF9Qb3MgICAgICAgeF9zaGlmdCA9IDA7CisgICAgRlRfUG9zICAgICAgIHlfc2hpZnQgPSAwOworICAgIEZUX1BvcyAgICAgICB4X2xlZnQsIHlfdG9wOworICAgIEZUX1BvcyAgICAgICB3aWR0aCwgaGVpZ2h0LCBwaXRjaDsKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKKyAgICBGVF9Qb3MgICAgICAgaGVpZ2h0X29yZywgd2lkdGhfb3JnOworI2VuZGlmCisgICAgRlRfSW50ICAgICAgIGhtdWwgICAgPSBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRDsKKyAgICBGVF9JbnQgICAgICAgdm11bCAgICA9IG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1Y7CisKKyAgICBGVF9SYXN0ZXJfUGFyYW1zICBwYXJhbXM7CisKKyAgICBGVF9Cb29sICBoYXZlX291dGxpbmVfc2hpZnRlZCA9IEZBTFNFOworICAgIEZUX0Jvb2wgIGhhdmVfYnVmZmVyICAgICAgICAgID0gRkFMU0U7CisKKworICAgIC8qIGNoZWNrIGdseXBoIGltYWdlIGZvcm1hdCAqLworICAgIGlmICggc2xvdC0+Zm9ybWF0ICE9IHJlbmRlci0+Z2x5cGhfZm9ybWF0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogY2hlY2sgbW9kZSAqLworICAgIGlmICggbW9kZSAhPSByZXF1aXJlZF9tb2RlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBDYW5ub3RfUmVuZGVyX0dseXBoICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBvcmlnaW4gKQorICAgIHsKKyAgICAgIHhfc2hpZnQgPSBvcmlnaW4tPng7CisgICAgICB5X3NoaWZ0ID0gb3JpZ2luLT55OworICAgIH0KKworICAgIC8qIGNvbXB1dGUgdGhlIGNvbnRyb2wgYm94LCBhbmQgZ3JpZCBmaXQgaXQgKi8KKyAgICAvKiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBvcmlnaW4gc2hpZnQgICAgICovCisgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3ggKTsKKworICAgIGNib3gueE1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC54TWluICsgeF9zaGlmdCApOworICAgIGNib3gueU1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC55TWluICsgeV9zaGlmdCApOworICAgIGNib3gueE1heCA9IEZUX1BJWF9DRUlMKCBjYm94LnhNYXggKyB4X3NoaWZ0ICk7CisgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUwoIGNib3gueU1heCArIHlfc2hpZnQgKTsKKworICAgIHhfc2hpZnQgLT0gY2JveC54TWluOworICAgIHlfc2hpZnQgLT0gY2JveC55TWluOworCisgICAgeF9sZWZ0ICA9IGNib3gueE1pbiA+PiA2OworICAgIHlfdG9wICAgPSBjYm94LnlNYXggPj4gNjsKKworICAgIHdpZHRoICA9IChGVF9VTG9uZykoIGNib3gueE1heCAtIGNib3gueE1pbiApID4+IDY7CisgICAgaGVpZ2h0ID0gKEZUX1VMb25nKSggY2JveC55TWF4IC0gY2JveC55TWluICkgPj4gNjsKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworICAgIHdpZHRoX29yZyAgPSB3aWR0aDsKKyAgICBoZWlnaHRfb3JnID0gaGVpZ2h0OworI2VuZGlmCisKKyAgICBwaXRjaCA9IHdpZHRoOworICAgIGlmICggaG11bCApCisgICAgeworICAgICAgd2lkdGggKj0gMzsKKyAgICAgIHBpdGNoICA9IEZUX1BBRF9DRUlMKCB3aWR0aCwgNCApOworICAgIH0KKworICAgIGlmICggdm11bCApCisgICAgICBoZWlnaHQgKj0gMzsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCisKKyAgICBpZiAoIHNsb3QtPmxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyApCisgICAgeworICAgICAgRlRfSW50ICBleHRyYSA9IHNsb3QtPmxpYnJhcnktPmxjZF9leHRyYTsKKworCisgICAgICBpZiAoIGhtdWwgKQorICAgICAgeworICAgICAgICB4X3NoaWZ0ICs9IDY0ICogKCBleHRyYSA+PiAxICk7CisgICAgICAgIHhfbGVmdCAgLT0gZXh0cmEgPj4gMTsKKyAgICAgICAgd2lkdGggICArPSAzICogZXh0cmE7CisgICAgICAgIHBpdGNoICAgID0gRlRfUEFEX0NFSUwoIHdpZHRoLCA0ICk7CisgICAgICB9CisKKyAgICAgIGlmICggdm11bCApCisgICAgICB7CisgICAgICAgIHlfc2hpZnQgKz0gNjQgKiAoIGV4dHJhID4+IDEgKTsKKyAgICAgICAgeV90b3AgICArPSBleHRyYSA+PiAxOworICAgICAgICBoZWlnaHQgICs9IDMgKiBleHRyYTsKKyAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBYWFg6IG9uIDE2Yml0IHN5c3RlbSwgd2UgcmV0dXJuIGFuIGVycm9yIGZvciBodWdlIGJpdG1hcAorICAgICAqIHRvIHByZXZlbnQgYW4gb3ZlcmZsb3cuCisgICAgICovCisgICAgaWYgKCB4X2xlZnQgPiBGVF9JTlRfTUFYIHx8IHlfdG9wID4gRlRfSU5UX01BWCB8fAorICAgICAgICAgeF9sZWZ0IDwgRlRfSU5UX01JTiB8fCB5X3RvcCA8IEZUX0lOVF9NSU4gKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfUGl4ZWxfU2l6ZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFJlcXVpcmVkIGNoZWNrIGlzIChwaXRjaCAqIGhlaWdodCA8IEZUX1VMT05HX01BWCksICAgICAgICAqLworICAgIC8qIGJ1dCB3ZSBjYXJlIHJlYWxpc3RpYyBjYXNlcyBvbmx5LiAgQWx3YXlzIHBpdGNoIDw9IHdpZHRoLiAqLworICAgIGlmICggd2lkdGggPiAweDdGRkYgfHwgaGVpZ2h0ID4gMHg3RkZGICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWM6IGdseXBoIHRvbyBsYXJnZTogJXUgeCAldVxuIiwKKyAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFJhc3Rlcl9PdmVyZmxvdyApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIHJlbGVhc2Ugb2xkIGJpdG1hcCBidWZmZXIgKi8KKyAgICBpZiAoIHNsb3QtPmludGVybmFsLT5mbGFncyAmIEZUX0dMWVBIX09XTl9CSVRNQVAgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGJpdG1hcC0+YnVmZmVyICk7CisgICAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJj0gfkZUX0dMWVBIX09XTl9CSVRNQVA7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgbmV3IG9uZSAqLworICAgIGlmICggRlRfQUxMT0MoIGJpdG1hcC0+YnVmZmVyLCAoRlRfVUxvbmcpKCBwaXRjaCAqIGhlaWdodCApICkgKQorICAgICAgZ290byBFeGl0OworICAgIGVsc2UKKyAgICAgIGhhdmVfYnVmZmVyID0gVFJVRTsKKworICAgIHNsb3QtPmludGVybmFsLT5mbGFncyB8PSBGVF9HTFlQSF9PV05fQklUTUFQOworCisgICAgc2xvdC0+Zm9ybWF0ICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworICAgIHNsb3QtPmJpdG1hcF9sZWZ0ID0gKEZUX0ludCl4X2xlZnQ7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgPSAoRlRfSW50KXlfdG9wOworCisgICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9HUkFZOworICAgIGJpdG1hcC0+bnVtX2dyYXlzICA9IDI1NjsKKyAgICBiaXRtYXAtPndpZHRoICAgICAgPSAodW5zaWduZWQgaW50KXdpZHRoOworICAgIGJpdG1hcC0+cm93cyAgICAgICA9ICh1bnNpZ25lZCBpbnQpaGVpZ2h0OworICAgIGJpdG1hcC0+cGl0Y2ggICAgICA9IHBpdGNoOworCisgICAgLyogdHJhbnNsYXRlIG91dGxpbmUgdG8gcmVuZGVyIGl0IGludG8gdGhlIGJpdG1hcCAqLworICAgIGlmICggeF9zaGlmdCB8fCB5X3NoaWZ0ICkKKyAgICB7CisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgeF9zaGlmdCwgeV9zaGlmdCApOworICAgICAgaGF2ZV9vdXRsaW5lX3NoaWZ0ZWQgPSBUUlVFOworICAgIH0KKworICAgIC8qIHNldCB1cCBwYXJhbWV0ZXJzICovCisgICAgcGFyYW1zLnRhcmdldCA9IGJpdG1hcDsKKyAgICBwYXJhbXMuc291cmNlID0gb3V0bGluZTsKKyAgICBwYXJhbXMuZmxhZ3MgID0gRlRfUkFTVEVSX0ZMQUdfQUE7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworCisgICAgLyogaW1wbG9kZSBvdXRsaW5lIGlmIG5lZWRlZCAqLworICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHBvaW50cyAgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICBwb2ludHNfZW5kID0gcG9pbnRzICsgb3V0bGluZS0+bl9wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICB2ZWM7CisKKworICAgICAgaWYgKCBobXVsICkKKyAgICAgICAgZm9yICggdmVjID0gcG9pbnRzOyB2ZWMgPCBwb2ludHNfZW5kOyB2ZWMrKyApCisgICAgICAgICAgdmVjLT54ICo9IDM7CisKKyAgICAgIGlmICggdm11bCApCisgICAgICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgICAgICAgIHZlYy0+eSAqPSAzOworICAgIH0KKworICAgIC8qIHJlbmRlciBvdXRsaW5lIGludG8gdGhlIGJpdG1hcCAqLworICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworCisgICAgLyogZGVmbGF0ZSBvdXRsaW5lIGlmIG5lZWRlZCAqLworICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHBvaW50cyAgICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICBwb2ludHNfZW5kID0gcG9pbnRzICsgb3V0bGluZS0+bl9wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICB2ZWM7CisKKworICAgICAgaWYgKCBobXVsICkKKyAgICAgICAgZm9yICggdmVjID0gcG9pbnRzOyB2ZWMgPCBwb2ludHNfZW5kOyB2ZWMrKyApCisgICAgICAgICAgdmVjLT54IC89IDM7CisKKyAgICAgIGlmICggdm11bCApCisgICAgICAgIGZvciAoIHZlYyA9IHBvaW50czsgdmVjIDwgcG9pbnRzX2VuZDsgdmVjKysgKQorICAgICAgICAgIHZlYy0+eSAvPSAzOworICAgIH0KKworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBzbG90LT5saWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgKQorICAgICAgc2xvdC0+bGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jKCBiaXRtYXAsIG1vZGUsIHNsb3QtPmxpYnJhcnkgKTsKKworI2Vsc2UgLyogIUZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCisKKyAgICAvKiByZW5kZXIgb3V0bGluZSBpbnRvIGJpdG1hcCAqLworICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogZXhwYW5kIGl0IGhvcml6b250YWxseSAqLworICAgIGlmICggaG11bCApCisgICAgeworICAgICAgRlRfQnl0ZSogIGxpbmUgPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICAgIEZUX1VJbnQgICBoaDsKKworCisgICAgICBmb3IgKCBoaCA9IGhlaWdodF9vcmc7IGhoID4gMDsgaGgtLSwgbGluZSArPSBwaXRjaCApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgICB4eDsKKyAgICAgICAgRlRfQnl0ZSogIGVuZCA9IGxpbmUgKyB3aWR0aDsKKworCisgICAgICAgIGZvciAoIHh4ID0gd2lkdGhfb3JnOyB4eCA+IDA7IHh4LS0gKQorICAgICAgICB7CisgICAgICAgICAgRlRfVUludCAgcGl4ZWwgPSBsaW5lW3h4LTFdOworCisKKyAgICAgICAgICBlbmRbLTNdID0gKEZUX0J5dGUpcGl4ZWw7CisgICAgICAgICAgZW5kWy0yXSA9IChGVF9CeXRlKXBpeGVsOworICAgICAgICAgIGVuZFstMV0gPSAoRlRfQnl0ZSlwaXhlbDsKKyAgICAgICAgICBlbmQgICAgLT0gMzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIGV4cGFuZCBpdCB2ZXJ0aWNhbGx5ICovCisgICAgaWYgKCB2bXVsICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgcmVhZCAgPSBiaXRtYXAtPmJ1ZmZlciArICggaGVpZ2h0IC0gaGVpZ2h0X29yZyApICogcGl0Y2g7CisgICAgICBGVF9CeXRlKiAgd3JpdGUgPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICAgIEZUX1VJbnQgICBoaDsKKworCisgICAgICBmb3IgKCBoaCA9IGhlaWdodF9vcmc7IGhoID4gMDsgaGgtLSApCisgICAgICB7CisgICAgICAgIGZ0X21lbWNweSggd3JpdGUsIHJlYWQsIHBpdGNoICk7CisgICAgICAgIHdyaXRlICs9IHBpdGNoOworCisgICAgICAgIGZ0X21lbWNweSggd3JpdGUsIHJlYWQsIHBpdGNoICk7CisgICAgICAgIHdyaXRlICs9IHBpdGNoOworCisgICAgICAgIGZ0X21lbWNweSggd3JpdGUsIHJlYWQsIHBpdGNoICk7CisgICAgICAgIHdyaXRlICs9IHBpdGNoOworICAgICAgICByZWFkICArPSBwaXRjaDsKKyAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgZmluZTsgZG9uJ3QgZGVhbGxvY2F0ZSBidWZmZXIgKi8KKyAgICBoYXZlX2J1ZmZlciA9IEZBTFNFOworCisgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgRXhpdDoKKyAgICBpZiAoIGhhdmVfb3V0bGluZV9zaGlmdGVkICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCAteF9zaGlmdCwgLXlfc2hpZnQgKTsKKyAgICBpZiAoIGhhdmVfYnVmZmVyICkKKyAgICB7CisgICAgICBGVF9GUkVFKCBiaXRtYXAtPmJ1ZmZlciApOworICAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzICY9IH5GVF9HTFlQSF9PV05fQklUTUFQOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogY29udmVydCBhIHNsb3QncyBnbHlwaCBpbWFnZSBpbnRvIGEgYml0bWFwICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9zbW9vdGhfcmVuZGVyKCBGVF9SZW5kZXJlciAgICAgICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIG9yaWdpbiApCisgIHsKKyAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorICAgICAgbW9kZSA9IEZUX1JFTkRFUl9NT0RFX05PUk1BTDsKKworICAgIHJldHVybiBmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMoIHJlbmRlciwgc2xvdCwgbW9kZSwgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JFTkRFUl9NT0RFX05PUk1BTCApOworICB9CisKKworICAvKiBjb252ZXJ0IGEgc2xvdCdzIGdseXBoIGltYWdlIGludG8gYSBob3Jpem9udGFsIExDRCBiaXRtYXAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9yZW5kZXJfbGNkKCBGVF9SZW5kZXJlciAgICAgICByZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIG9yaWdpbiApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKyAgICBlcnJvciA9IGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyggcmVuZGVyLCBzbG90LCBtb2RlLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JFTkRFUl9NT0RFX0xDRCApOworICAgIGlmICggIWVycm9yICkKKyAgICAgIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9MQ0Q7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGNvbnZlcnQgYSBzbG90J3MgZ2x5cGggaW1hZ2UgaW50byBhIHZlcnRpY2FsIExDRCBiaXRtYXAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9yZW5kZXJfbGNkX3YoIEZUX1JlbmRlcmVyICAgICAgIHJlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIGVycm9yID0gZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCByZW5kZXIsIHNsb3QsIG1vZGUsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTENEX1YgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICBzbG90LT5iaXRtYXAucGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTENEX1Y7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0RFRklORV9SRU5ERVJFUiggZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzLAorCisgICAgICBGVF9NT0RVTEVfUkVOREVSRVIsCisgICAgICBzaXplb2YgKCBGVF9SZW5kZXJlclJlYyApLAorCisgICAgICAic21vb3RoIiwKKyAgICAgIDB4MTAwMDBMLAorICAgICAgMHgyMDAwMEwsCisKKyAgICAgIDAsICAgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKworICAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilmdF9zbW9vdGhfaW5pdCwKKyAgICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgMCwKKyAgICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgMAorICAgICwKKworICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAorCisgICAgKEZUX1JlbmRlcmVyX1JlbmRlckZ1bmMpICAgZnRfc21vb3RoX3JlbmRlciwKKyAgICAoRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYylmdF9zbW9vdGhfdHJhbnNmb3JtLAorICAgIChGVF9SZW5kZXJlcl9HZXRDQm94RnVuYykgIGZ0X3Ntb290aF9nZXRfY2JveCwKKyAgICAoRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMpICBmdF9zbW9vdGhfc2V0X21vZGUsCisKKyAgICAoRlRfUmFzdGVyX0Z1bmNzKikgICAgJkZUX0dSQVlTX1JBU1RFUl9HRVQKKyAgKQorCisKKyAgRlRfREVGSU5FX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzLAorCisgICAgICBGVF9NT0RVTEVfUkVOREVSRVIsCisgICAgICBzaXplb2YgKCBGVF9SZW5kZXJlclJlYyApLAorCisgICAgICAic21vb3RoLWxjZCIsCisgICAgICAweDEwMDAwTCwKKyAgICAgIDB4MjAwMDBMLAorCisgICAgICAwLCAgICAvKiBtb2R1bGUgc3BlY2lmaWMgaW50ZXJmYWNlICovCisKKyAgICAgIChGVF9Nb2R1bGVfQ29uc3RydWN0b3IpZnRfc21vb3RoX2luaXQsCisgICAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIDAsCisgICAgICAoRlRfTW9kdWxlX1JlcXVlc3RlcikgIDAKKyAgICAsCisKKyAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwKKworICAgIChGVF9SZW5kZXJlcl9SZW5kZXJGdW5jKSAgIGZ0X3Ntb290aF9yZW5kZXJfbGNkLAorICAgIChGVF9SZW5kZXJlcl9UcmFuc2Zvcm1GdW5jKWZ0X3Ntb290aF90cmFuc2Zvcm0sCisgICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfc21vb3RoX2dldF9jYm94LAorICAgIChGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykgIGZ0X3Ntb290aF9zZXRfbW9kZSwKKworICAgIChGVF9SYXN0ZXJfRnVuY3MqKSAgICAmRlRfR1JBWVNfUkFTVEVSX0dFVAorICApCisKKyAgRlRfREVGSU5FX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzcywKKworICAgICAgRlRfTU9EVUxFX1JFTkRFUkVSLAorICAgICAgc2l6ZW9mICggRlRfUmVuZGVyZXJSZWMgKSwKKworICAgICAgInNtb290aC1sY2R2IiwKKyAgICAgIDB4MTAwMDBMLAorICAgICAgMHgyMDAwMEwsCisKKyAgICAgIDAsICAgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKworICAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilmdF9zbW9vdGhfaW5pdCwKKyAgICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgMCwKKyAgICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgMAorICAgICwKKworICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAorCisgICAgKEZUX1JlbmRlcmVyX1JlbmRlckZ1bmMpICAgZnRfc21vb3RoX3JlbmRlcl9sY2RfdiwKKyAgICAoRlRfUmVuZGVyZXJfVHJhbnNmb3JtRnVuYylmdF9zbW9vdGhfdHJhbnNmb3JtLAorICAgIChGVF9SZW5kZXJlcl9HZXRDQm94RnVuYykgIGZ0X3Ntb290aF9nZXRfY2JveCwKKyAgICAoRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMpICBmdF9zbW9vdGhfc2V0X21vZGUsCisKKyAgICAoRlRfUmFzdGVyX0Z1bmNzKikgICAgJkZUX0dSQVlTX1JBU1RFUl9HRVQKKyAgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRzbW9vdGguaCBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c21vb3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MDE4YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c21vb3RoLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRzbW9vdGguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fRlRTTU9PVEhfSF9fCisjZGVmaW5lIF9fRlRTTU9PVEhfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9SRU5ERVJfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9OT19TVERfUkFTVEVSCisgIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3N0ZF9yZW5kZXJlcl9jbGFzcyApCisjZW5kaWYKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX05PX1NNT09USF9SQVNURVIKKyAgRlRfREVDTEFSRV9SRU5ERVJFUiggZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzICkKKworICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzICkKKworICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkX3ZfcmVuZGVyZXJfY2xhc3MgKQorI2VuZGlmCisKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUU01PT1RIX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRzcGljLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9mdHNwaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZlZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRzcGljLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c3BpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlICJmdHNwaWMuaCIKKyNpbmNsdWRlICJmdHNtZXJycy5oIgorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gZnRncmF5cy5jICovCisgIHZvaWQKKyAgRlRfSW5pdF9DbGFzc19mdF9ncmF5c19yYXN0ZXIoIEZUX1Jhc3Rlcl9GdW5jcyogIGZ1bmNzICk7CisKKworICB2b2lkCisgIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICBpZiAoIHBpY19jb250YWluZXItPnNtb290aCApCisgICAgeworICAgICAgU21vb3RoUElDKiAgY29udGFpbmVyID0gKFNtb290aFBJQyopcGljX2NvbnRhaW5lci0+c21vb3RoOworCisKKyAgICAgIGlmICggLS1jb250YWluZXItPnJlZl9jb3VudCApCisgICAgICAgIHJldHVybjsKKworICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7CisgICAgICBwaWNfY29udGFpbmVyLT5zbW9vdGggPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7CisgICAgU21vb3RoUElDKiAgICAgICAgIGNvbnRhaW5lciAgICAgPSBOVUxMOworICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICAvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFsc28gc2VydmUgc21vb3RoX2xjZCBhbmQgc21vb3RoX2xjZHYgcmVuZGVyZXJzLAorICAgICAgIGl0IGltcGxlbWVudHMgcmVmZXJlbmNlIGNvdW50aW5nICovCisgICAgaWYgKCBwaWNfY29udGFpbmVyLT5zbW9vdGggKQorICAgIHsKKyAgICAgICgoU21vb3RoUElDKilwaWNfY29udGFpbmVyLT5zbW9vdGgpLT5yZWZfY291bnQrKzsKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBwb2ludGVyLCBjbGVhciBhbmQgc2V0IGdsb2JhbCBjb250YWluZXIgcG9pbnRlciAqLworICAgIGlmICggRlRfQUxMT0MoIGNvbnRhaW5lciwgc2l6ZW9mICggKmNvbnRhaW5lciApICkgKQorICAgICAgcmV0dXJuIGVycm9yOworICAgIEZUX01FTV9TRVQoIGNvbnRhaW5lciwgMCwgc2l6ZW9mICggKmNvbnRhaW5lciApICk7CisgICAgcGljX2NvbnRhaW5lci0+c21vb3RoID0gY29udGFpbmVyOworCisgICAgY29udGFpbmVyLT5yZWZfY291bnQgPSAxOworCisgICAgLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIC0gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogdGhpcyBpcyBob3cgdGhlIG1vZHVsZSB1c3VhbGx5IGV4cGVjdHMgdGhpcyBkYXRhICovCisgICAgRlRfSW5pdF9DbGFzc19mdF9ncmF5c19yYXN0ZXIoICZjb250YWluZXItPmZ0X2dyYXlzX3Jhc3RlciApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiByZS1yb3V0ZSB0aGVzZSBpbml0IGFuZCBmcmVlIGZ1bmN0aW9ucyB0byB0aGUgYWJvdmUgZnVuY3Rpb25zICovCisgIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgcmV0dXJuIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggbGlicmFyeSApOworICB9CisKKworICB2b2lkCisgIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7CisgIH0KKworCisgIEZUX0Vycm9yCisgIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIHJldHVybiBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIGxpYnJhcnkgKTsKKyAgfQorCisKKyAgdm9pZAorICBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c3BpYy5oIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvZnRzcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliOWYwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL2Z0c3BpYy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0c3BpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZUU1BJQ19IX18KKyNkZWZpbmUgX19GVFNQSUNfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBGVF9HUkFZU19SQVNURVJfR0VUICBmdF9ncmF5c19yYXN0ZXIKKworI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworICB0eXBlZGVmIHN0cnVjdCAgU21vb3RoUElDXworICB7CisgICAgaW50ICAgICAgICAgICAgICByZWZfY291bnQ7CisgICAgRlRfUmFzdGVyX0Z1bmNzICBmdF9ncmF5c19yYXN0ZXI7CisKKyAgfSBTbW9vdGhQSUM7CisKKworI2RlZmluZSBHRVRfUElDKCBsaWIgKSBcCisgICAgICAgICAgKCAoU21vb3RoUElDKikoIChsaWIpLT5waWNfY29udGFpbmVyLnNtb290aCApICkKKyNkZWZpbmUgRlRfR1JBWVNfUkFTVEVSX0dFVCAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmZ0X2dyYXlzX3Jhc3RlciApCisKKworICAvKiBzZWUgZnRzcGljLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiAqLworICB2b2lkCisgIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisgIHZvaWQKKyAgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOworCisgIHZvaWQKKyAgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworICBGVF9FcnJvcgorICBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyAgRlRfRXJyb3IKKyAgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX0ZUU1BJQ19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL21vZHVsZS5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL21vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDA5MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgRnJlZVR5cGUgMiBzbW9vdGggcmVuZGVyZXIgbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gU01PT1RIX1JFTkRFUkVSCisKK2RlZmluZSBTTU9PVEhfUkVOREVSRVIKKyQoT1BFTl9EUklWRVIpIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXNtb290aCAgICAkKEVDSE9fRFJJVkVSX0RFU0MpYW50aS1hbGlhc2VkIGJpdG1hcCByZW5kZXJlciQoRUNIT19EUklWRVJfRE9ORSkKKyQoT1BFTl9EUklWRVIpIEZUX1JlbmRlcmVyX0NsYXNzLCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUilzbW9vdGggICAgJChFQ0hPX0RSSVZFUl9ERVNDKWFudGktYWxpYXNlZCBiaXRtYXAgcmVuZGVyZXIgZm9yIExDRHMkKEVDSE9fRFJJVkVSX0RPTkUpCiskKE9QRU5fRFJJVkVSKSBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXNtb290aCAgICAkKEVDSE9fRFJJVkVSX0RFU0MpYW50aS1hbGlhc2VkIGJpdG1hcCByZW5kZXJlciBmb3IgdmVydGljYWwgTENEcyQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9ydWxlcy5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvc21vb3RoL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMGViZDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9ydWxlcy5tawpAQCAtMCwwICsxLDc0IEBACisjCisjIEZyZWVUeXBlIDIgc21vb3RoIHJlbmRlcmVyIG1vZHVsZSBidWlsZCBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBzbW9vdGggZHJpdmVyIGRpcmVjdG9yeQorIworU01PT1RIX0RJUiA6PSAkKFNSQ19ESVIpL3Ntb290aAorCisKKyMgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZSBkcml2ZXIKKyMKK1NNT09USF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChTTU9PVEhfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgc21vb3RoIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQorIworU01PT1RIX0RSVl9TUkMgOj0gJChTTU9PVEhfRElSKS9mdGdyYXlzLmMgIFwKKyAgICAgICAgICAgICAgICAgICQoU01PT1RIX0RJUikvZnRzbW9vdGguYyBcCisgICAgICAgICAgICAgICAgICAkKFNNT09USF9ESVIpL2Z0c3BpYy5jCisKKworIyBzbW9vdGggZHJpdmVyIGhlYWRlcnMKKyMKK1NNT09USF9EUlZfSCA6PSAkKFNNT09USF9EUlZfU1JDOiVjPSVoKSAgXAorICAgICAgICAgICAgICAgICQoU01PT1RIX0RJUikvZnRzbWVycnMuaAorCisKKyMgc21vb3RoIGRyaXZlciBvYmplY3QocykKKyMKKyMgICBTTU9PVEhfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzLgorIyAgIFNNT09USF9EUlZfT0JKX1MgaXMgdXNlZCBkdXJpbmcgYHNpbmdsZScgYnVpbGRzLgorIworU01PT1RIX0RSVl9PQkpfTSA6PSAkKFNNT09USF9EUlZfU1JDOiQoU01PT1RIX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK1NNT09USF9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS9zbW9vdGguJE8KKworIyBzbW9vdGggZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK1NNT09USF9EUlZfU1JDX1MgOj0gJChTTU9PVEhfRElSKS9zbW9vdGguYworCisKKyMgc21vb3RoIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoU01PT1RIX0RSVl9PQkpfUyk6ICQoU01PT1RIX0RSVl9TUkNfUykgJChTTU9PVEhfRFJWX1NSQykgXAorICAgICAgICAgICAgICAgICAgICAgJChGUkVFVFlQRV9IKSAkKFNNT09USF9EUlZfSCkKKwkkKFNNT09USF9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChTTU9PVEhfRFJWX1NSQ19TKSkKKworCisjIHNtb290aCBkcml2ZXIgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoU01PT1RIX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChTTU9PVEhfRFJWX0gpCisJJChTTU9PVEhfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKFNNT09USF9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoU01PT1RIX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvc21vb3RoLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Ntb290aC9zbW9vdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2E0MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy9zbW9vdGgvc21vb3RoLmMKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgc21vb3RoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIGFudGktYWxpYXNpbmcgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAiZnRzcGljLmMiCisjaW5jbHVkZSAiZnRncmF5cy5jIgorI2luY2x1ZGUgImZ0c21vb3RoLmMiCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MTYxZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvSmFtZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMgSmFtZmlsZSBmb3Igc3JjL3Rvb2xzCisjCitTdWJEaXIgRlQyX1RPUCBzcmMgdG9vbHMgOworCitNYWluICBhcGluYW1lcyA6IGFwaW5hbWVzLmMgOwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9hZmJsdWUucGwgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2FmYmx1ZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI2NDUyCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9hZmJsdWUucGwKQEAgLTAsMCArMSw1NDggQEAKKyMhIC91c3IvYmluL3BlcmwgLXcKKyMgLSotIFBlcmwgLSotCisjCisjIGFmYmx1ZS5wbAorIworIyBQcm9jZXNzIGEgYmx1ZSB6b25lIGNoYXJhY3RlciBkYXRhIGZpbGUuCisjCisjIENvcHlyaWdodCAyMDEzLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisjIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisjIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorIyB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyMgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVuZ2xpc2ggJy1ub19tYXRjaF92YXJzJzsKK3VzZSBvcGVuICc6c3RkJywgJzplbmNvZGluZyhVVEYtOCknOworCisKK215ICRwcm9nID0gJFBST0dSQU1fTkFNRTsKKyRwcm9nID1+IHN8IC4qIC8gfHx4OyAgICAgICMgUmVtb3ZlIHBhdGguCisKK2RpZSAidXNhZ2U6ICRwcm9nIGRhdGFmaWxlIDwgaW5maWxlID4gb3V0ZmlsZVxuIiBpZiAkI0FSR1YgIT0gMDsKKworCitteSAkZGF0YWZpbGUgPSAkQVJHVlswXTsKKworbXkgJWRpdmVyc2lvbnM7ICAgICAgICAjIFRoZSBleHRyYWN0ZWQgYW5kIG1hc3NhZ2VkIGRhdGEgZnJvbSBgZGF0YWZpbGUnLgorbXkgQGVsc2Vfc3RhY2s7ICAgICAgICAjIEJvb2xlYW5zIHRvIHRyYWNrIGVsc2UtY2xhdXNlcy4KK215IEBuYW1lX3N0YWNrOyAgICAgICAgIyBTdGFjayBvZiBpbnRlZ2VycyB1c2VkIGZvciBuYW1lcyBvZiBhdXguIHZhcmlhYmxlcy4KKworbXkgJGN1cnJfZW51bTsgICAgICAgICAjIE5hbWUgb2YgdGhlIGN1cnJlbnQgZW51bWVyYXRpb24uCitteSAkY3Vycl9hcnJheTsgICAgICAgICMgTmFtZSBvZiB0aGUgY3VycmVudCBhcnJheS4KK215ICRjdXJyX21heDsgICAgICAgICAgIyBOYW1lIG9mIHRoZSBjdXJyZW50IG1heGltdW0gdmFsdWUuCisKK215ICRjdXJyX2VudW1fZWxlbWVudDsgIyBOYW1lIG9mIHRoZSBjdXJyZW50IGVudW1lcmF0aW9uIGVsZW1lbnQuCitteSAkY3Vycl9vZmZzZXQ7ICAgICAgICMgVGhlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGF1eC4gdmFyaWFibGUuCitteSAkY3Vycl9lbGVtX3NpemU7ICAgICMgVGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIG9yIGJsb2NrLgorCitteSAkaGF2ZV9zZWN0aW9ucyA9IDA7ICMgQm9vbGVhbjsgc2V0IGlmIHN0YXJ0IG9mIGEgc2VjdGlvbiBoYXMgYmVlbiBzZWVuLgorbXkgJGhhdmVfc3RyaW5nczsgICAgICAjIEJvb2xlYW47IHNldCBpZiBjdXJyZW50IHNlY3Rpb24gY29udGFpbnMgc3RyaW5ncy4KK215ICRoYXZlX2Jsb2NrczsgICAgICAgIyBCb29sZWFuOyBzZXQgaWYgY3VycmVudCBzZWN0aW9uIGNvbnRhaW5zIGJsb2Nrcy4KKworbXkgJGhhdmVfZW51bV9lbGVtZW50OyAjIEJvb2xlYW47IHNldCBpZiB3ZSBoYXZlIGFuIGVudW1lcmF0aW9uIGVsZW1lbnQuCitteSAkaW5fc3RyaW5nOyAgICAgICAgICMgQm9vbGVhbjsgc2V0IGlmIGEgc3RyaW5nIGhhcyBiZWVuIHBhcnNlZC4KKworbXkgJG51bV9zZWN0aW9ucyA9IDA7ICAjIE51bWJlciBvZiBzZWN0aW9ucyBzZWVuIHNvIGZhci4KKworbXkgJGxhc3RfYXV4OyAgICAgICAgICAjIE5hbWUgb2YgbGFzdCBhdXhpbGlhcnkgdmFyaWFibGUuCisKKworIyBSZWd1bGFyIGV4cHJlc3Npb25zLgorCisjIFs8d3M+XSA8ZW51bV9uYW1lPiA8d3M+IDxhcnJheV9uYW1lPiA8d3M+IDxtYXhfbmFtZT4gWzx3cz5dICc6JyBbPHdzPl0gJ1xuJworbXkgJHNlY3Rpb25fcmUgPSBxci8gXiBccyogKFxTKykgXHMrIChcUyspIFxzKyAoXFMrKSBccyogOiBccyogJCAveDsKKworIyBbPHdzPl0gPGVudW1fZWxlbWVudF9uYW1lPiBbPHdzPl0gJ1xuJworbXkgJGVudW1fZWxlbWVudF9yZSA9IHFyLyBeIFxzKiAoIFtBLVphLXowLTlfXSsgKSBccyogJCAveDsKKworIyAnIycgPHByZXByb2Nlc3NvciBkaXJlY3RpdmU+ICdcbicKK215ICRwcmVwcm9jZXNzb3JfcmUgPSBxci8gXiBcIyAveDsKKworIyBbPHdzPl0gJy8nICcvJyA8Y29tbWVudD4gJ1xuJworbXkgJGNvbW1lbnRfcmUgPSBxcnwgXiBccyogLy8gfHg7CisKKyMgZW1wdHkgbGluZQorbXkgJHdoaXRlc3BhY2Vfb25seV9yZSA9IHFyLyBeIFxzKiAkIC94OworCisjIFs8d3M+XSAnIicgPHN0cmluZz4gJyInIFs8d3M+XSAnXG4nICAoPHN0cmluZz4gZG9lc24ndCBjb250YWluIG5ld2xpbmVzKQorbXkgJHN0cmluZ19yZSA9IHFyLyBeIFxzKgorICAgICAgICAgICAgICAgICAgICAgICAiICggKD8+ICg/OiAoPz4gW14iXFxdKyApIHwgXFwuICkqICkgKSAiCisgICAgICAgICAgICAgICAgICAgICAgIFxzKiAkIC94OworCisjIFs8d3M+XSAneycgPGJsb2NrPiAnfScgWzx3cz5dICdcbicgICg8YmxvY2s+IGNhbiBjb250YWluIG5ld2xpbmVzKQorbXkgJGJsb2NrX3N0YXJ0X3JlID0gcXIvIF4gXHMqIFx7IC94OworCisjIFdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cCBmb3IgYHNwbGl0JyB0byBtYWtlIGl0IHJldHVybiB0aGUgc2VwYXJhdG9yCisjIHRva2VucyAoaS5lLiwgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgYnJhY2UpIGFsc28uCitteSAkYnJhY2VfcmUgPSBxci8gKCBbe31dICkgL3g7CisKKworc3ViIFdhcm4KK3sKKyAgbXkgJG1lc3NhZ2UgPSBzaGlmdDsKKyAgd2FybiAiJGRhdGFmaWxlOiRJTlBVVF9MSU5FX05VTUJFUjogd2FybmluZzogJG1lc3NhZ2VcbiI7Cit9CisKKworc3ViIERpZQoreworICBteSAkbWVzc2FnZSA9IHNoaWZ0OworICBkaWUgIiRkYXRhZmlsZTokSU5QVVRfTElORV9OVU1CRVI6IGVycm9yOiAkbWVzc2FnZVxuIjsKK30KKworCitteSAkd2FybmVkX2JlZm9yZSA9IDA7CisKK3N1YiB3YXJuX2JlZm9yZQoreworICBXYXJuKCJkYXRhIGJlZm9yZSBmaXJzdCBzZWN0aW9uIGdldHMgaWdub3JlZCIpIHVubGVzcyAkd2FybmVkX2JlZm9yZTsKKyAgJHdhcm5lZF9iZWZvcmUgPSAxOworfQorCisKK3N1YiBzdHJpcF9uZXdsaW5lCit7CisgIGNob21wOworICBzLyBceDBEICQgLy94OworfQorCisKK3N1YiBlbmRfY3Vycl9zdHJpbmcKK3sKKyAgIyBBcHBlbmQgZmluYWwgbnVsbCBieXRlIHRvIHN0cmluZy4KKyAgaWYgKCRoYXZlX3N0cmluZ3MpCisgIHsKKyAgICBwdXNoIEB7JGRpdmVyc2lvbnN7JGN1cnJfYXJyYXl9fSwgIiAgICAnXFwwJyxcbiIgaWYgJGluX3N0cmluZzsKKworICAgICRjdXJyX29mZnNldCsrOworICAgICRpbl9zdHJpbmcgPSAwOworICB9Cit9CisKKworc3ViIHVwZGF0ZV9tYXhfZWxlbV9zaXplCit7CisgIGlmICgkY3Vycl9lbGVtX3NpemUpCisgIHsKKyAgICBteSAkbWF4ID0gcG9wIEB7JGRpdmVyc2lvbnN7JGN1cnJfbWF4fX07CisgICAgJG1heCA9ICRjdXJyX2VsZW1fc2l6ZSBpZiAkY3Vycl9lbGVtX3NpemUgPiAkbWF4OworICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9tYXh9fSwgJG1heDsKKyAgfQorfQorCisKK3N1YiBjb252ZXJ0X25vbl9hc2NpaV9jaGFyCit7CisgICMgQSBVVEYtOCBjaGFyYWN0ZXIgb3V0c2lkZSBvZiB0aGUgcHJpbnRhYmxlIEFTQ0lJIHJhbmdlLCB3aXRoIHBvc3NpYmx5IGEKKyAgIyBsZWFkaW5nIGJhY2tzbGFzaCBjaGFyYWN0ZXIuCisgIG15ICRzID0gc2hpZnQ7CisKKyAgIyBIZXJlIHdlIGNvdW50IGNoYXJhY3RlcnMsIG5vdCBieXRlcy4KKyAgJGN1cnJfZWxlbV9zaXplICs9IGxlbmd0aCAkczsKKworICB1dGY4OjplbmNvZGUoJHMpOworICAkcyA9IHVjIHVucGFjayAnSConLCAkczsKKworICAkY3Vycl9vZmZzZXQgKz0gJHMgPX4gcy9cRyguLikvJ1xceCQxJywgL3NnOworCisgIHJldHVybiAkczsKK30KKworCitzdWIgY29udmVydF9hc2NpaV9jaGFycworeworICAjIEEgc2VyaWVzIG9mIEFTQ0lJIGNoYXJhY3RlcnMgaW4gdGhlIHByaW50YWJsZSByYW5nZS4KKyAgbXkgJHMgPSBzaGlmdDsKKworICAjIFdlIGlnbm9yZSBzcGFjZXMuCisgICRzID1+IHMvIC8vZzsKKworICBteSAkY291bnQgPSAkcyA9fiBzL1xHKC4pLyckMScsIC9nOworICAkY3Vycl9vZmZzZXQgKz0gJGNvdW50OworICAkY3Vycl9lbGVtX3NpemUgKz0gJGNvdW50OworCisgIHJldHVybiAkczsKK30KKworCitzdWIgY29udmVydF9saXRlcmFsCit7CisgIG15ICRzID0gc2hpZnQ7CisgIG15ICRvcmlnID0gJHM7CisKKyAgIyBBU0NJSSBwcmludGFibGVzIGFuZCBzcGFjZQorICBteSAkc2FmZV9yZSA9ICdceDIwLVx4N0UnOworICAjIEFTQ0lJIHByaW50YWJsZXMgYW5kIHNwYWNlLCBubyBiYWNrc2xhc2gKKyAgbXkgJHNhZmVfbm9fYmFja3NsYXNoX3JlID0gJ1x4MjAtXHg1Qlx4NUQtXHg3RSc7CisKKyAgJHMgPX4gc3sKKyAgICAgICAgICAgKD86IFxcPyAoIFteJHNhZmVfcmVdICkKKyAgICAgICAgICAgICAgIHwgKCAoPzogWyRzYWZlX25vX2JhY2tzbGFzaF9yZV0KKyAgICAgICAgICAgICAgICAgICAgICAgfCBcXCBbJHNhZmVfcmVdICkrICkgKQorICAgICAgICAgfQorICAgICAgICAgeworICAgICAgICAgICBkZWZpbmVkKCQxKSA/IGNvbnZlcnRfbm9uX2FzY2lpX2NoYXIoJDEpCisgICAgICAgICAgICAgICAgICAgICAgIDogY29udmVydF9hc2NpaV9jaGFycygkMikKKyAgICAgICAgIH1lZ3g7CisKKyAgICMgV2UgYXNzdW1lIHRoYXQgYCRvcmlnJyBkb2Vzbid0IGNvbnRhaW4gYCovJworICAgcmV0dXJuICRzIC4gIiAvKiAkb3JpZyAqLyI7Cit9CisKKworc3ViIGF1eF9uYW1lCit7CisgIHJldHVybiAiYWZfYmx1ZV8iIC4gJG51bV9zZWN0aW9ucy4gIl8iIC4gam9pbignXycsIEBuYW1lX3N0YWNrKTsKK30KKworCitzdWIgYXV4X25hbWVfbmV4dAoreworICAkbmFtZV9zdGFja1skI25hbWVfc3RhY2tdKys7CisgIG15ICRuYW1lID0gYXV4X25hbWUoKTsKKyAgJG5hbWVfc3RhY2tbJCNuYW1lX3N0YWNrXS0tOworCisgIHJldHVybiAkbmFtZTsKK30KKworCitzdWIgZW51bV92YWxfc3RyaW5nCit7CisgICMgQnVpbGQgc3RyaW5nIHRoYXQgaG9sZHMgY29kZSB0byBzYXZlIHRoZSBjdXJyZW50IG9mZnNldCBpbiBhbgorICAjIGVudW1lcmF0aW9uIGVsZW1lbnQuCisgIG15ICRhdXggPSBzaGlmdDsKKworICBteSAkYWRkID0gKCRsYXN0X2F1eCBlcSAiYWZfYmx1ZV8iIC4gJG51bV9zZWN0aW9ucyAuICJfMCIgKQorICAgICAgICAgICAgICA/ICIiCisgICAgICAgICAgICAgIDogIiRsYXN0X2F1eCArICI7CisKKyAgcmV0dXJuICIgICAgJGF1eCA9ICRhZGQkY3Vycl9vZmZzZXQsXG4iOworfQorCisKKworIyBQcm9jZXNzIGRhdGEgZmlsZS4KKworb3BlbihEQVRBLCAkZGF0YWZpbGUpIHx8IGRpZSAiJHByb2c6IGNhbid0IG9wZW4gXGAkZGF0YWZpbGUnOiAkT1NfRVJST1JcbiI7CisKK3doaWxlICg8REFUQT4pCit7CisgIHN0cmlwX25ld2xpbmUoKTsKKworICBuZXh0IGlmIC8kY29tbWVudF9yZS87CisgIG5leHQgaWYgLyR3aGl0ZXNwYWNlX29ubHlfcmUvOworCisgIGlmICgvJHNlY3Rpb25fcmUvKQorICB7CisgICAgV2FybigicHJldmlvdXMgc2VjdGlvbiBpcyBlbXB0eSIpIGlmICgkaGF2ZV9zZWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRoYXZlX3N0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEkaGF2ZV9ibG9ja3MpOworCisgICAgZW5kX2N1cnJfc3RyaW5nKCk7CisgICAgdXBkYXRlX21heF9lbGVtX3NpemUoKTsKKworICAgICMgU2F2ZSBjYXB0dXJlZCBncm91cHMgZnJvbSBgc2VjdGlvbl9yZScuCisgICAgJGN1cnJfZW51bSA9ICQxOworICAgICRjdXJyX2FycmF5ID0gJDI7CisgICAgJGN1cnJfbWF4ID0gJDM7CisKKyAgICAkY3Vycl9lbnVtX2VsZW1lbnQgPSAiIjsKKyAgICAkY3Vycl9vZmZzZXQgPSAwOworCisgICAgV2Fybigib3ZlcndyaXRpbmcgYWxyZWFkeSBkZWZpbmVkIGVudW1lcmF0aW9uIFxgJGN1cnJfZW51bSciKQorICAgICAgaWYgZXhpc3RzKCRkaXZlcnNpb25zeyRjdXJyX2VudW19KTsKKyAgICBXYXJuKCJvdmVyd3JpdGluZyBhbHJlYWR5IGRlZmluZWQgYXJyYXkgXGAkY3Vycl9hcnJheSciKQorICAgICAgaWYgZXhpc3RzKCRkaXZlcnNpb25zeyRjdXJyX2FycmF5fSk7CisgICAgV2Fybigib3ZlcndyaXRpbmcgYWxyZWFkeSBkZWZpbmVkIG1heGltdW0gdmFsdWUgXGAkY3Vycl9tYXgnIikKKyAgICAgIGlmIGV4aXN0cygkZGl2ZXJzaW9uc3skY3Vycl9tYXh9KTsKKworICAgICRkaXZlcnNpb25zeyRjdXJyX2VudW19ID0gW107CisgICAgJGRpdmVyc2lvbnN7JGN1cnJfYXJyYXl9ID0gW107CisgICAgJGRpdmVyc2lvbnN7JGN1cnJfbWF4fSA9IFtdOworCisgICAgcHVzaCBAeyRkaXZlcnNpb25zeyRjdXJyX21heH19LCAwOworCisgICAgQG5hbWVfc3RhY2sgPSAoKTsKKyAgICBwdXNoIEBuYW1lX3N0YWNrLCAwOworCisgICAgJGhhdmVfc2VjdGlvbnMgPSAxOworICAgICRoYXZlX3N0cmluZ3MgPSAwOworICAgICRoYXZlX2Jsb2NrcyA9IDA7CisKKyAgICAkaGF2ZV9lbnVtX2VsZW1lbnQgPSAwOworICAgICRpbl9zdHJpbmcgPSAwOworCisgICAgJG51bV9zZWN0aW9ucysrOworICAgICRjdXJyX2VsZW1fc2l6ZSA9IDA7CisKKyAgICAkbGFzdF9hdXggPSBhdXhfbmFtZSgpOworCisgICAgbmV4dDsKKyAgfQorCisgIGlmICgvJHByZXByb2Nlc3Nvcl9yZS8pCisgIHsKKyAgICBpZiAoJGhhdmVfc2VjdGlvbnMpCisgICAgeworICAgICAgIyBIYXZpbmcgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyBjb21wbGljYXRlcyB0aGUgY29tcHV0YXRpb24gb2YKKyAgICAgICMgY29ycmVjdCBvZmZzZXQgdmFsdWVzLiAgV2UgaGF2ZSB0byBpbnRyb2R1Y2UgYXV4aWxpYXJ5IGVudW1lcmF0aW9uCisgICAgICAjIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgYGFmX2JsdWVfPHM+XzxuMT5fPG4yPl8uLi4nIHRoYXQgc3RvcmUKKyAgICAgICMgb2Zmc2V0cyB0byBiZSB1c2VkIGluIGNvbmRpdGlvbmFsIGNsYXVzZXMuICBgPHM+JyBpcyB0aGUgbnVtYmVyIG9mCisgICAgICAjIHNlY3Rpb25zIHNlZW4gc28gZmFyLCBgPG4xPicgaXMgdGhlIG51bWJlciBvZiBgI2lmJyBhbmQgYCNlbmRpZicKKyAgICAgICMgY29uZGl0aW9uYWxzIHNlZW4gc28gZmFyIGluIHRoZSB0b3Btb3N0IGxldmVsLCBgPG4yPicgdGhlIG51bWJlciBvZgorICAgICAgIyBgI2lmJyBhbmQgYCNlbmRpZicgY29uZGl0aW9uYWxzIHNlZW4gc28gZmFyIG9uZSBsZXZlbCBkZWVwZXIsIGV0Yy4KKyAgICAgICMgQXMgYSBjb25zZXF1ZW5jZSwgdW5ldmVuIHZhbHVlcyBhcmUgdXNlZCB3aXRoaW4gYSBjbGF1c2UsIGFuZCBldmVuCisgICAgICAjIHZhbHVlcyBhZnRlciBhIGNsYXVzZSwgc2luY2UgdGhlIEMgc3RhbmRhcmQgZG9lc24ndCBhbGxvdyB0aGUKKyAgICAgICMgcmVkZWZpbml0aW9uIG9mIGFuIGVudW1lcmF0aW9uIHZhbHVlLiAgRm9yIGV4YW1wbGUsIHRoZSBuYW1lCisgICAgICAjIGBhZl9ibHVlXzVfMV82JyBpcyB1c2VkIHRvIGNvbnN0cnVjdCBlbnVtZXJhdGlvbiB2YWx1ZXMgaW4gdGhlIGZpZnRoCisgICAgICAjIHNlY3Rpb24gYWZ0ZXIgdGhlIHRoaXJkIChzZWNvbmQtbGV2ZWwpIGlmLWNsYXVzZSB3aXRoaW4gdGhlIGZpcnN0CisgICAgICAjICh0b3AtbGV2ZWwpIGlmLWNsYXVzZS4gIEFmdGVyIHRoZSBmaXJzdCB0b3AtbGV2ZWwgY2xhdXNlIGhhcworICAgICAgIyBmaW5pc2hlZCwgYGFmX2JsdWVfNV8yJyBpcyB1c2VkLiAgVGhlIGN1cnJlbnQgb2Zmc2V0IGlzIHRoZW4KKyAgICAgICMgcmVsYXRpdmUgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgY3VycmVudCBhdXhpbGlhcnkgZWxlbWVudC4KKworICAgICAgaWYgKC8gXiBcIyBccyogaWYgL3gpCisgICAgICB7CisgICAgICAgIHB1c2ggQGVsc2Vfc3RhY2ssIDA7CisKKyAgICAgICAgJG5hbWVfc3RhY2tbJCNuYW1lX3N0YWNrXSsrOworCisgICAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9lbnVtfX0sIGVudW1fdmFsX3N0cmluZyhhdXhfbmFtZSgpKTsKKyAgICAgICAgJGxhc3RfYXV4ID0gYXV4X25hbWUoKTsKKworICAgICAgICBwdXNoIEBuYW1lX3N0YWNrLCAwOworCisgICAgICAgICRjdXJyX29mZnNldCA9IDA7CisgICAgICB9CisgICAgICBlbHNpZiAoLyBeIFwjIFxzKiBlbGlmIC94KQorICAgICAgeworICAgICAgICBEaWUoInVuYmFsYW5jZWQgI2VsaWYiKSB1bmxlc3MgQGVsc2Vfc3RhY2s7CisKKyAgICAgICAgcG9wIEBuYW1lX3N0YWNrOworCisgICAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9lbnVtfX0sIGVudW1fdmFsX3N0cmluZyhhdXhfbmFtZV9uZXh0KCkpOworICAgICAgICAkbGFzdF9hdXggPSBhdXhfbmFtZSgpOworCisgICAgICAgIHB1c2ggQG5hbWVfc3RhY2ssIDA7CisKKyAgICAgICAgJGN1cnJfb2Zmc2V0ID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2lmICgvIF4gXCMgXHMqIGVsc2UgL3gpCisgICAgICB7CisgICAgICAgIG15ICRwcmV2X2Vsc2UgPSBwb3AgQGVsc2Vfc3RhY2s7CisgICAgICAgIERpZSgidW5iYWxhbmNlZCAjZWxzZSIpIHVubGVzcyBkZWZpbmVkKCRwcmV2X2Vsc2UpOworICAgICAgICBEaWUoIiNlbHNlIGFscmVhZHkgc2VlbiIpIGlmICRwcmV2X2Vsc2U7CisgICAgICAgIHB1c2ggQGVsc2Vfc3RhY2ssIDE7CisKKyAgICAgICAgcG9wIEBuYW1lX3N0YWNrOworCisgICAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9lbnVtfX0sIGVudW1fdmFsX3N0cmluZyhhdXhfbmFtZV9uZXh0KCkpOworICAgICAgICAkbGFzdF9hdXggPSBhdXhfbmFtZSgpOworCisgICAgICAgIHB1c2ggQG5hbWVfc3RhY2ssIDA7CisKKyAgICAgICAgJGN1cnJfb2Zmc2V0ID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2lmICgvIF4gKFwjIFxzKikgZW5kaWYgL3gpCisgICAgICB7CisgICAgICAgIG15ICRwcmV2X2Vsc2UgPSBwb3AgQGVsc2Vfc3RhY2s7CisgICAgICAgIERpZSgidW5iYWxhbmNlZCAjZW5kaWYiKSB1bmxlc3MgZGVmaW5lZCgkcHJldl9lbHNlKTsKKworICAgICAgICBwb3AgQG5hbWVfc3RhY2s7CisKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBlbHNlLWNsYXVzZSBmb3IgYW4gaWYtY2xhdXNlLCB3ZSBhZGQgb25lLiAgVGhpcyBpcworICAgICAgICAjIG5lY2Vzc2FyeSB0byBoYXZlIGNvcnJlY3Qgb2Zmc2V0cy4KKyAgICAgICAgaWYgKCEkcHJldl9lbHNlKQorICAgICAgICB7CisgICAgICAgICAgIyBVc2UgYW1vdW50IG9mIHdoaXRlc3BhY2UgZnJvbSBgZW5kaWYnLgorICAgICAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9lbnVtfX0sIGVudW1fdmFsX3N0cmluZyhhdXhfbmFtZV9uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkMSAuICJlbHNlXG4iOworICAgICAgICAgICRsYXN0X2F1eCA9IGF1eF9uYW1lKCk7CisKKyAgICAgICAgICAkY3Vycl9vZmZzZXQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgJG5hbWVfc3RhY2tbJCNuYW1lX3N0YWNrXSsrOworCisgICAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9lbnVtfX0sIGVudW1fdmFsX3N0cmluZyhhdXhfbmFtZSgpKTsKKyAgICAgICAgJGxhc3RfYXV4ID0gYXV4X25hbWUoKTsKKworICAgICAgICAkY3Vycl9vZmZzZXQgPSAwOworICAgICAgfQorCisgICAgICAjIEhhbmRsZSAocHJvYmFibHkgY29udGludWVkKSBwcmVwcm9jZXNzb3IgbGluZXMuCisgICAgQ09OVElOVUVEX0xPT1A6CisgICAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBzdHJpcF9uZXdsaW5lKCk7CisKKyAgICAgICAgICBwdXNoIEB7JGRpdmVyc2lvbnN7JGN1cnJfZW51bX19LCAkQVJHIC4gIlxuIjsKKyAgICAgICAgICBwdXNoIEB7JGRpdmVyc2lvbnN7JGN1cnJfYXJyYXl9fSwgJEFSRyAuICJcbiI7CisKKyAgICAgICAgICBsYXN0IENPTlRJTlVFRF9MT09QIHVubGVzcyAvIFxcICQgL3g7CisKKyAgICAgICAgfSB3aGlsZSAoPERBVEE+KTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHdhcm5fYmVmb3JlKCk7CisgICAgfQorCisgICAgbmV4dDsKKyAgfQorCisgIGlmICgvJGVudW1fZWxlbWVudF9yZS8pCisgIHsKKyAgICBlbmRfY3Vycl9zdHJpbmcoKTsKKyAgICB1cGRhdGVfbWF4X2VsZW1fc2l6ZSgpOworCisgICAgJGN1cnJfZW51bV9lbGVtZW50ID0gJDE7CisgICAgJGhhdmVfZW51bV9lbGVtZW50ID0gMTsKKyAgICAkY3Vycl9lbGVtX3NpemUgPSAwOworCisgICAgbmV4dDsKKyAgfQorCisgIGlmICgvJHN0cmluZ19yZS8pCisgIHsKKyAgICBpZiAoJGhhdmVfc2VjdGlvbnMpCisgICAgeworICAgICAgRGllKCJzdHJpbmdzIGFuZCBibG9ja3MgY2FuJ3QgYmUgbWl4ZWQgaW4gYSBzZWN0aW9uIikgaWYgJGhhdmVfYmxvY2tzOworCisgICAgICAjIFNhdmUgY2FwdHVyZWQgZ3JvdXAgZnJvbSBgc3RyaW5nX3JlJy4KKyAgICAgIG15ICRzdHJpbmcgPSAkMTsKKworICAgICAgaWYgKCRoYXZlX2VudW1fZWxlbWVudCkKKyAgICAgIHsKKyAgICAgICAgcHVzaCBAeyRkaXZlcnNpb25zeyRjdXJyX2VudW19fSwgZW51bV92YWxfc3RyaW5nKCRjdXJyX2VudW1fZWxlbWVudCk7CisgICAgICAgICRoYXZlX2VudW1fZWxlbWVudCA9IDA7CisgICAgICB9CisKKyAgICAgICRzdHJpbmcgPSBjb252ZXJ0X2xpdGVyYWwoJHN0cmluZyk7CisKKyAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9hcnJheX19LCAiICAgICRzdHJpbmdcbiI7CisKKyAgICAgICRoYXZlX3N0cmluZ3MgPSAxOworICAgICAgJGluX3N0cmluZyA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB3YXJuX2JlZm9yZSgpOworICAgIH0KKworICAgIG5leHQ7CisgIH0KKworICBpZiAoLyRibG9ja19zdGFydF9yZS8pCisgIHsKKyAgICBpZiAoJGhhdmVfc2VjdGlvbnMpCisgICAgeworICAgICAgRGllKCJzdHJpbmdzIGFuZCBibG9ja3MgY2FuJ3QgYmUgbWl4ZWQgaW4gYSBzZWN0aW9uIikgaWYgJGhhdmVfc3RyaW5nczsKKworICAgICAgbXkgJGRlcHRoID0gMDsKKyAgICAgIG15ICRibG9jayA9ICIiOworICAgICAgbXkgJGJsb2NrX2VuZCA9IDA7CisKKyAgICAgICMgQ291bnQgYnJhY2VzIHdoaWxlIGdldHRpbmcgdGhlIGJsb2NrLgorICAgIEJSQUNFX0xPT1A6CisgICAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICBzdHJpcF9uZXdsaW5lKCk7CisKKyAgICAgICAgICBmb3JlYWNoIG15ICRzdWJzdHJpbmcgKHNwbGl0KC8kYnJhY2VfcmUvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoJGJsb2NrX2VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRGllKCJpbnZhbGlkIGRhdGEgYWZ0ZXIgbGFzdCBtYXRjaGluZyBjbG9zaW5nIGJyYWNlIikKKyAgICAgICAgICAgICAgICBpZiAkc3Vic3RyaW5nICF+IC8kd2hpdGVzcGFjZV9vbmx5X3JlLzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGJsb2NrIC49ICRzdWJzdHJpbmc7CisKKyAgICAgICAgICAgIGlmICgkc3Vic3RyaW5nIGVxICd7JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgJGRlcHRoKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZiAoJHN1YnN0cmluZyBlcSAnfScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICRkZXB0aC0tOworCisgICAgICAgICAgICAgICRibG9ja19lbmQgPSAxIGlmICRkZXB0aCA9PSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgICMgSWYgd2UgYXJlIGhlcmUsIHdlIGhhdmUgcnVuIG91dCBvZiBzdWJzdHJpbmdzLCBzbyBnZXQgbmV4dCBsaW5lCisgICAgICAgICAgIyBvciBleGl0LgorICAgICAgICAgIGxhc3QgQlJBQ0VfTE9PUCBpZiAkYmxvY2tfZW5kOworCisgICAgICAgICAgJGJsb2NrIC49ICJcbiI7CisKKyAgICAgICAgfSB3aGlsZSAoPERBVEE+KTsKKyAgICAgIH0KKworICAgICAgaWYgKCRoYXZlX2VudW1fZWxlbWVudCkKKyAgICAgIHsKKyAgICAgICAgcHVzaCBAeyRkaXZlcnNpb25zeyRjdXJyX2VudW19fSwgZW51bV92YWxfc3RyaW5nKCRjdXJyX2VudW1fZWxlbWVudCk7CisgICAgICAgICRoYXZlX2VudW1fZWxlbWVudCA9IDA7CisgICAgICB9CisKKyAgICAgIHB1c2ggQHskZGl2ZXJzaW9uc3skY3Vycl9hcnJheX19LCAkYmxvY2sgLiAiLFxuIjsKKworICAgICAgJGN1cnJfb2Zmc2V0Kys7CisgICAgICAkY3Vycl9lbGVtX3NpemUrKzsKKworICAgICAgJGhhdmVfYmxvY2tzID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHdhcm5fYmVmb3JlKCk7CisgICAgfQorCisgICAgbmV4dDsKKyAgfQorCisgICMgR2FyYmFnZS4gIFdlIHdlcmVuJ3QgYWJsZSB0byBwYXJzZSB0aGUgZGF0YS4KKyAgRGllKCJzeW50YXggZXJyb3IiKTsKK30KKworIyBGaW5hbGl6ZSBkYXRhLgorZW5kX2N1cnJfc3RyaW5nKCk7Cit1cGRhdGVfbWF4X2VsZW1fc2l6ZSgpOworCisKKyMgRmlsdGVyIHN0ZGluIHRvIHN0ZG91dCwgcmVwbGFjaW5nIGBALi4uQCcgdGVtcGxhdGVzLgorCitzdWIgZW1pdF9kaXZlcnNpb24KK3sKKyAgbXkgJGRpdmVyc2lvbl9uYW1lID0gc2hpZnQ7CisgIHJldHVybiAoZXhpc3RzKCRkaXZlcnNpb25zeyQxfSkpID8gIkB7JGRpdmVyc2lvbnN7JDF9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiQCIgLiAkZGl2ZXJzaW9uX25hbWUgLiAiQCI7Cit9CisKKworJExJU1RfU0VQQVJBVE9SID0gJyc7CisKK215ICRzMSA9ICJUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IHRoZSBQZXJsIHNjcmlwdCBcYCRwcm9nJywiOworbXkgJHMxbGVuID0gbGVuZ3RoICRzMTsKK215ICRzMiA9ICJ1c2luZyBkYXRhIGZyb20gZmlsZSBcYCRkYXRhZmlsZScuIjsKK215ICRzMmxlbiA9IGxlbmd0aCAkczI7CitteSAkc2xlbiA9ICgkczFsZW4gPiAkczJsZW4pID8gJHMxbGVuIDogJHMybGVuOworCitwcmludCAiLyogIiAuICRzMSAuICIgIiB4ICgkc2xlbiAtICRzMWxlbikgLiAiICovXG4iCisgICAgICAuICIvKiAiIC4gJHMyIC4gIiAiIHggKCRzbGVuIC0gJHMybGVuKSAuICIgKi9cbiIKKyAgICAgIC4gIlxuIjsKKword2hpbGUgKDxTVERJTj4pCit7CisgIHMvIEAgKCBbQS1aYS16MC05X10rPyApIEAgLyBlbWl0X2RpdmVyc2lvbigkMSkgL2VneDsKKyAgcHJpbnQ7Cit9CisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2FwaW5hbWVzLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2FwaW5hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4MWIxYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvYXBpbmFtZXMuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIFRoaXMgbGl0dGxlIHByb2dyYW0gaXMgdXNlZCB0byBwYXJzZSB0aGUgRnJlZVR5cGUgaGVhZGVycyBhbmQKKyAqIGZpbmQgdGhlIGRlY2xhcmF0aW9uIG9mIGFsbCBwdWJsaWMgQVBJcy4gIFRoaXMgaXMgZWFzeSwgYmVjYXVzZQorICogdGhleSBhbGwgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmc6CisgKgorICogICBGVF9FWFBPUlQoIHJldHVybl90eXBlICkKKyAqICAgZnVuY3Rpb25fbmFtZSggZnVuY3Rpb24gYXJndW1lbnRzICk7CisgKgorICogWW91IG11c3QgcGFzcyB0aGUgbGlzdCBvZiBoZWFkZXIgZmlsZXMgYXMgYXJndW1lbnRzLiAgV2lsZGNhcmRzIGFyZQorICogYWNjZXB0ZWQgaWYgeW91IGFyZSB1c2luZyBHQ0MgZm9yIGNvbXBpbGF0aW9uIChhbmQgcHJvYmFibHkgYnkKKyAqIG90aGVyIGNvbXBpbGVycyB0b28pLgorICoKKyAqIEF1dGhvcjogRGF2aWQgVHVybmVyLCAyMDA1LCAyMDA2LCAyMDA4LTIwMTMsIDIwMTUKKyAqCisgKiBUaGlzIGNvZGUgaXMgZXhwbGljaXRseSBwbGFjZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2RlZmluZSAgUFJPR1JBTV9OQU1FICAgICAiYXBpbmFtZXMiCisjZGVmaW5lICBQUk9HUkFNX1ZFUlNJT04gICIwLjIiCisKKyNkZWZpbmUgIExJTkVCVUZGX1NJWkUgIDEwMjQKKwordHlwZWRlZiBlbnVtICBPdXRwdXRGb3JtYXRfCit7CisgIE9VVFBVVF9MSVNUID0gMCwgICAgICAvKiBvdXRwdXQgdGhlIGxpc3Qgb2YgbmFtZXMsIG9uZSBwZXIgbGluZSAgICAgICAgICAgICAqLworICBPVVRQVVRfV0lORE9XU19ERUYsICAgLyogb3V0cHV0IGEgV2luZG93cyAuREVGIGZpbGUgZm9yIFZpc3VhbCBDKysgb3IgTWluZ3cgKi8KKyAgT1VUUFVUX0JPUkxBTkRfREVGLCAgIC8qIG91dHB1dCBhIFdpbmRvd3MgLkRFRiBmaWxlIGZvciBCb3JsYW5kIEMrKyAgICAgICAgICovCisgIE9VVFBVVF9XQVRDT01fTEJDLCAgICAvKiBvdXRwdXQgYSBXYXRjb20gTGlua2VyIENvbW1hbmQgRmlsZSAgICAgICAgICAgICAgICAqLworICBPVVRQVVRfTkVUV0FSRV9JTVAgICAgLyogb3V0cHV0IGEgTmV0V2FyZSBJbXBvcnRGaWxlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBPdXRwdXRGb3JtYXQ7CisKKworc3RhdGljIHZvaWQKK3BhbmljKCBjb25zdCBjaGFyKiAgbWVzc2FnZSApCit7CisgIGZwcmludGYoIHN0ZGVyciwgIlBBTklDOiAlc1xuIiwgbWVzc2FnZSApOworICBleGl0KDIpOworfQorCisKK3R5cGVkZWYgc3RydWN0ICBOYW1lUmVjXworeworICBjaGFyKiAgICAgICAgIG5hbWU7CisgIHVuc2lnbmVkIGludCAgaGFzaDsKKworfSBOYW1lUmVjLCAqTmFtZTsKKworc3RhdGljIE5hbWUgIHRoZV9uYW1lczsKK3N0YXRpYyBpbnQgICBudW1fbmFtZXM7CitzdGF0aWMgaW50ICAgbWF4X25hbWVzOworCitzdGF0aWMgdm9pZAorbmFtZXNfYWRkKCBjb25zdCBjaGFyKiAgbmFtZSwKKyAgICAgICAgICAgY29uc3QgY2hhciogIGVuZCApCit7CisgIHVuc2lnbmVkIGludCAgaDsKKyAgaW50ICAgICAgICAgICBubiwgbGVuOworICBOYW1lICAgICAgICAgIG5tOworCisgIGlmICggZW5kIDw9IG5hbWUgKQorICAgIHJldHVybjsKKworICAvKiBjb21wdXRlIGhhc2ggdmFsdWUgKi8KKyAgbGVuID0gKGludCkoZW5kIC0gbmFtZSk7CisgIGggICA9IDA7CisgIGZvciAoIG5uID0gMDsgbm4gPCBsZW47IG5uKysgKQorICAgIGggPSBoKjMzICsgbmFtZVtubl07CisKKyAgLyogY2hlY2sgZm9yIGFuIHByZS1leGlzdGluZyBuYW1lICovCisgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fbmFtZXM7IG5uKysgKQorICB7CisgICAgbm0gPSB0aGVfbmFtZXMgKyBubjsKKworICAgIGlmICggKGludClubS0+aGFzaCAgICAgICAgICAgICAgICAgPT0gaCAmJgorICAgICAgICAgbWVtY21wKCBuYW1lLCBubS0+bmFtZSwgbGVuICkgPT0gMCAmJgorICAgICAgICAgbm0tPm5hbWVbbGVuXSAgICAgICAgICAgICAgICAgPT0gMCApCisgICAgICByZXR1cm47CisgIH0KKworICAvKiBhZGQgbmV3IG5hbWUgKi8KKyAgaWYgKCBudW1fbmFtZXMgPj0gbWF4X25hbWVzICkKKyAgeworICAgIG1heF9uYW1lcyArPSAobWF4X25hbWVzID4+IDEpICsgNDsKKyAgICB0aGVfbmFtZXMgID0gKE5hbWVSZWMqKXJlYWxsb2MoIHRoZV9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHRoZV9uYW1lc1swXSApICogbWF4X25hbWVzICk7CisgICAgaWYgKCB0aGVfbmFtZXMgPT0gTlVMTCApCisgICAgICBwYW5pYyggIm5vdCBlbm91Z2ggbWVtb3J5IiApOworICB9CisgIG5tID0gJnRoZV9uYW1lc1tudW1fbmFtZXMrK107CisKKyAgbm0tPmhhc2ggPSBoOworICBubS0+bmFtZSA9IChjaGFyKiltYWxsb2MoIGxlbisxICk7CisgIGlmICggbm0tPm5hbWUgPT0gTlVMTCApCisgICAgcGFuaWMoICJub3QgZW5vdWdoIG1lbW9yeSIgKTsKKworICBtZW1jcHkoIG5tLT5uYW1lLCBuYW1lLCBsZW4gKTsKKyAgbm0tPm5hbWVbbGVuXSA9IDA7Cit9CisKKworc3RhdGljIGludAorbmFtZV9jb21wYXJlKCBjb25zdCB2b2lkKiAgbmFtZTEsCisgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBuYW1lMiApCit7CisgIE5hbWUgIG4xID0gKE5hbWUpbmFtZTE7CisgIE5hbWUgIG4yID0gKE5hbWUpbmFtZTI7CisKKyAgcmV0dXJuIHN0cmNtcCggbjEtPm5hbWUsIG4yLT5uYW1lICk7Cit9CisKK3N0YXRpYyB2b2lkCituYW1lc19zb3J0KCB2b2lkICkKK3sKKyAgcXNvcnQoIHRoZV9uYW1lcywgKHNpemVfdCludW1fbmFtZXMsCisgICAgICAgICBzaXplb2YgKCB0aGVfbmFtZXNbMF0gKSwgbmFtZV9jb21wYXJlICk7Cit9CisKKworc3RhdGljIHZvaWQKK25hbWVzX2R1bXAoIEZJTEUqICAgICAgICAgb3V0LAorICAgICAgICAgICAgT3V0cHV0Rm9ybWF0ICBmb3JtYXQsCisgICAgICAgICAgICBjb25zdCBjaGFyKiAgIGRsbF9uYW1lICkKK3sKKyAgaW50ICBubjsKKworCisgIHN3aXRjaCAoIGZvcm1hdCApCisgIHsKKyAgICBjYXNlIE9VVFBVVF9XSU5ET1dTX0RFRjoKKyAgICAgIGlmICggZGxsX25hbWUgKQorICAgICAgICBmcHJpbnRmKCBvdXQsICJMSUJSQVJZICVzXG4iLCBkbGxfbmFtZSApOworCisgICAgICBmcHJpbnRmKCBvdXQsICJERVNDUklQVElPTiAgRnJlZVR5cGUgMiBETExcbiIgKTsKKyAgICAgIGZwcmludGYoIG91dCwgIkVYUE9SVFNcbiIgKTsKKyAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fbmFtZXM7IG5uKysgKQorICAgICAgICBmcHJpbnRmKCBvdXQsICIgICVzXG4iLCB0aGVfbmFtZXNbbm5dLm5hbWUgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVVRQVVRfQk9STEFORF9ERUY6CisgICAgICBpZiAoIGRsbF9uYW1lICkKKyAgICAgICAgZnByaW50Ziggb3V0LCAiTElCUkFSWSAlc1xuIiwgZGxsX25hbWUgKTsKKworICAgICAgZnByaW50Ziggb3V0LCAiREVTQ1JJUFRJT04gIEZyZWVUeXBlIDIgRExMXG4iICk7CisgICAgICBmcHJpbnRmKCBvdXQsICJFWFBPUlRTXG4iICk7CisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgbnVtX25hbWVzOyBubisrICkKKyAgICAgICAgZnByaW50Ziggb3V0LCAiICBfJXNcbiIsIHRoZV9uYW1lc1tubl0ubmFtZSApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9VVFBVVF9XQVRDT01fTEJDOgorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgZG90OworICAgICAgICBjaGFyICAgICAgICAgdGVtcFs1MTJdOworCisKKyAgICAgICAgaWYgKCBkbGxfbmFtZSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAieW91IG11c3QgcHJvdmlkZSBhIERMTCBuYW1lIHdpdGggdGhlIC1kIG9wdGlvbiFcbiIgKTsKKyAgICAgICAgICBleGl0KCA0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBtdXN0IG9taXQgdGhlIC5kbGwgc3VmZml4IGZyb20gdGhlIGxpYnJhcnkgbmFtZSAqLworICAgICAgICBkb3QgPSBzdHJjaHIoIGRsbF9uYW1lLCAnLicgKTsKKyAgICAgICAgaWYgKCBkb3QgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgIGxlbiA9IGRvdCAtIGRsbF9uYW1lOworCisKKyAgICAgICAgICBpZiAoIGxlbiA+IChpbnQpKCBzaXplb2YgKCB0ZW1wICkgLSAxICkgKQorICAgICAgICAgICAgbGVuID0gc2l6ZW9mICggdGVtcCApIC0gMTsKKworICAgICAgICAgIG1lbWNweSggdGVtcCwgZGxsX25hbWUsIGxlbiApOworICAgICAgICAgIHRlbXBbbGVuXSA9IDA7CisKKyAgICAgICAgICBkbGxfbmFtZSA9IChjb25zdCBjaGFyKil0ZW1wOworICAgICAgICB9CisKKyAgICAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9uYW1lczsgbm4rKyApCisgICAgICAgICAgZnByaW50Ziggb3V0LCAiKytfJXMuJXMuJXNcbiIsIHRoZV9uYW1lc1tubl0ubmFtZSwgZGxsX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVfbmFtZXNbbm5dLm5hbWUgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVVRQVVRfTkVUV0FSRV9JTVA6CisgICAgICB7CisgICAgICAgIGlmICggZGxsX25hbWUgIT0gTlVMTCApCisgICAgICAgICAgZnByaW50Ziggb3V0LCAiICAoJXMpXG4iLCBkbGxfbmFtZSApOworICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgbnVtX25hbWVzIC0gMTsgbm4rKyApCisgICAgICAgICAgZnByaW50Ziggb3V0LCAiICAlcyxcbiIsIHRoZV9uYW1lc1tubl0ubmFtZSApOworICAgICAgICBmcHJpbnRmKCBvdXQsICIgICVzXG4iLCB0aGVfbmFtZXNbbnVtX25hbWVzIC0gMV0ubmFtZSApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiAgLyogTElTVCAqLworICAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9uYW1lczsgbm4rKyApCisgICAgICAgIGZwcmludGYoIG91dCwgIiVzXG4iLCB0aGVfbmFtZXNbbm5dLm5hbWUgKTsKKyAgfQorfQorCisKKworCisvKiBzdGF0ZXMgb2YgdGhlIGxpbmUgcGFyc2VyICovCisKK3R5cGVkZWYgZW51bSAgU3RhdGVfCit7CisgIFNUQVRFX1NUQVJUID0gMCwgIC8qIHdhaXRpbmcgZm9yIEZUX0VYUE9SVCBrZXl3b3JkIGFuZCByZXR1cm4gdHlwZSAqLworICBTVEFURV9UWVBFICAgICAgICAvKiB0eXBlIHdhcyByZWFkLCB3YWl0aW5nIGZvciBmdW5jdGlvbiBuYW1lICAgICAgKi8KKworfSBTdGF0ZTsKKworc3RhdGljIGludAorcmVhZF9oZWFkZXJfZmlsZSggRklMRSogIGZpbGUsIGludCAgdmVyYm9zZSApCit7CisgIHN0YXRpYyBjaGFyICBidWZmW0xJTkVCVUZGX1NJWkUgKyAxXTsKKyAgU3RhdGUgICAgICAgIHN0YXRlID0gU1RBVEVfU1RBUlQ7CisKKyAgd2hpbGUgKCAhZmVvZiggZmlsZSApICkKKyAgeworICAgIGNoYXIqICBwOworCisgICAgaWYgKCAhZmdldHMoIGJ1ZmYsIExJTkVCVUZGX1NJWkUsIGZpbGUgKSApCisgICAgICBicmVhazsKKworICAgIHAgPSBidWZmOworCisgICAgd2hpbGUgKCAqcCAmJiAoKnAgPT0gJyAnIHx8ICpwID09ICdcXCcpICkgIC8qIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgICBwKys7CisKKyAgICBpZiAoICpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyApICAvKiBza2lwIGVtcHR5IGxpbmVzICovCisgICAgICBjb250aW51ZTsKKworICAgIHN3aXRjaCAoIHN0YXRlICkKKyAgICB7CisgICAgICBjYXNlIFNUQVRFX1NUQVJUOgorICAgICAgICB7CisgICAgICAgICAgaWYgKCBtZW1jbXAoIHAsICJGVF9FWFBPUlQoIiwgMTAgKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcCArPSAxMDsKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggKnAgPT0gMCB8fCAqcCA9PSAnXG4nIHx8ICpwID09ICdccicgKQorICAgICAgICAgICAgICBnb3RvIE5leHRMaW5lOworCisgICAgICAgICAgICBpZiAoICpwID09ICcpJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdGF0ZSA9IFNUQVRFX1RZUEU7CisKKyAgICAgICAgIC8qIHNvbWV0aW1lcywgdGhlIG5hbWUgaXMganVzdCBhZnRlciB0aGUgRlRfRVhQT1JUKC4uLiksIHNvCisgICAgICAgICAgKiBza2lwIHdoaXRlc3BhY2UsIGFuZCBmYWxsLXRocm91Z2ggaWYgd2UgZmluZCBhbiBhbHBoYW51bWVyaWMKKyAgICAgICAgICAqIGNoYXJhY3RlcgorICAgICAgICAgICovCisgICAgICAgICAgd2hpbGUgKCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JyApCisgICAgICAgICAgICBwKys7CisKKyAgICAgICAgICBpZiAoICFpc2FscGhhKCpwKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKworICAgICAgY2FzZSBTVEFURV9UWVBFOgorICAgICAgICB7CisgICAgICAgICAgY2hhciogICBuYW1lID0gcDsKKworICAgICAgICAgIHdoaWxlICggaXNhbG51bSgqcCkgfHwgKnAgPT0gJ18nICkKKyAgICAgICAgICAgIHArKzsKKworICAgICAgICAgIGlmICggcCA+IG5hbWUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggdmVyYm9zZSApCisgICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIj4+PiAlLipzXG4iLCAoaW50KShwIC0gbmFtZSksIG5hbWUgKTsKKworICAgICAgICAgICAgbmFtZXNfYWRkKCBuYW1lLCBwICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgc3RhdGUgPSBTVEFURV9TVEFSVDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgOworICAgIH0KKworICBOZXh0TGluZToKKyAgICA7CisgIH0KKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAordXNhZ2UoIHZvaWQgKQoreworICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIGZvcm1hdCA9CisgICAiJXMgJXM6IGV4dHJhY3QgRnJlZVR5cGUgQVBJIG5hbWVzIGZyb20gaGVhZGVyIGZpbGVzXG5cbiIKKyAgICJ0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBleHRyYWN0IHRoZSBsaXN0IG9mIHB1YmxpYyBGcmVlVHlwZSBBUElcbiIKKyAgICJmdW5jdGlvbnMuIEl0IHJlY2VpdmVzIHRoZSBsaXN0IG9mIGhlYWRlciBmaWxlcyBhcyBhcmd1bWVudCBhbmRcbiIKKyAgICJnZW5lcmF0ZXMgYSBzb3J0ZWQgbGlzdCBvZiB1bmlxdWUgaWRlbnRpZmllcnNcblxuIgorCisgICAidXNhZ2U6ICVzIGhlYWRlcjEgW29wdGlvbnNdIFtoZWFkZXIyIC4uLl1cblxuIgorCisgICAib3B0aW9uczogICAtICAgICAgOiBwYXJzZSB0aGUgY29udGVudCBvZiBzdGRpbiwgaWdub3JlIGFyZ3VtZW50c1xuIgorICAgIiAgICAgICAgICAgLXYgICAgIDogdmVyYm9zZSBtb2RlLCBvdXRwdXQgc2VudCB0byBzdGFuZGFyZCBlcnJvclxuIgorICAgIiAgICAgICAgICAgLW9GSUxFIDogd3JpdGUgb3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGFuZGFyZCBvdXRwdXRcbiIKKyAgICIgICAgICAgICAgIC1kTkFNRSA6IGluZGljYXRlIERMTCBmaWxlIG5hbWUsICdmcmVldHlwZS5kbGwnIGJ5IGRlZmF1bHRcbiIKKyAgICIgICAgICAgICAgIC13ICAgICA6IG91dHB1dCAuREVGIGZpbGUgZm9yIFZpc3VhbCBDKysgYW5kIE1pbmd3XG4iCisgICAiICAgICAgICAgICAtd0IgICAgOiBvdXRwdXQgLkRFRiBmaWxlIGZvciBCb3JsYW5kIEMrK1xuIgorICAgIiAgICAgICAgICAgLXdXICAgIDogb3V0cHV0IFdhdGNvbSBMaW5rZXIgUmVzcG9uc2UgRmlsZVxuIgorICAgIiAgICAgICAgICAgLXdOICAgIDogb3V0cHV0IE5ldFdhcmUgSW1wb3J0IEZpbGVcbiIKKyAgICJcbiI7CisKKyAgZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgIFBST0dSQU1fTkFNRSwKKyAgICAgICAgICAgUFJPR1JBTV9WRVJTSU9OLAorICAgICAgICAgICBQUk9HUkFNX05BTUUKKyAgICAgICAgICAgKTsKKyAgZXhpdCgxKTsKK30KKworCitpbnQgIG1haW4oIGludCBhcmdjLCBjb25zdCBjaGFyKiBjb25zdCogIGFyZ3YgKQoreworICBpbnQgICAgICAgICAgIGZyb21fc3RkaW4gPSAwOworICBpbnQgICAgICAgICAgIHZlcmJvc2UgPSAwOworICBPdXRwdXRGb3JtYXQgIGZvcm1hdCA9IE9VVFBVVF9MSVNUOyAgLyogdGhlIGRlZmF1bHQgKi8KKyAgRklMRSogICAgICAgICBvdXQgICAgPSBzdGRvdXQ7CisgIGNvbnN0IGNoYXIqICAgbGlicmFyeV9uYW1lID0gTlVMTDsKKworICBpZiAoIGFyZ2MgPCAyICkKKyAgICB1c2FnZSgpOworCisgIC8qICctJyB1c2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50IG1lYW5zIHJlYWQgc291cmNlIGZpbGUgZnJvbSBzdGRpbiAqLworICB3aGlsZSAoIGFyZ2MgPiAxICYmIGFyZ3ZbMV1bMF0gPT0gJy0nICkKKyAgeworICAgIGNvbnN0IGNoYXIqICBhcmcgPSBhcmd2WzFdOworCisgICAgc3dpdGNoICggYXJnWzFdICkKKyAgICB7CisgICAgICBjYXNlICd2JzoKKyAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdvJzoKKyAgICAgICAgaWYgKCBhcmdbMl0gPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGFyZ2MgPCAyICkKKyAgICAgICAgICAgIHVzYWdlKCk7CisKKyAgICAgICAgICBhcmcgPSBhcmd2WzJdOworICAgICAgICAgIGFyZ3YrKzsKKyAgICAgICAgICBhcmdjLS07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGFyZyArPSAyOworCisgICAgICAgIG91dCA9IGZvcGVuKCBhcmcsICJ3dCIgKTsKKyAgICAgICAgaWYgKCBvdXQgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nXG4iLCBhcmd2WzJdICk7CisgICAgICAgICAgZXhpdCgzKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnZCc6CisgICAgICAgIGlmICggYXJnWzJdID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBhcmdjIDwgMiApCisgICAgICAgICAgICB1c2FnZSgpOworCisgICAgICAgICAgYXJnID0gYXJndlsyXTsKKyAgICAgICAgICBhcmd2Kys7CisgICAgICAgICAgYXJnYy0tOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhcmcgKz0gMjsKKworICAgICAgICBsaWJyYXJ5X25hbWUgPSBhcmc7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd3JzoKKyAgICAgICAgZm9ybWF0ID0gT1VUUFVUX1dJTkRPV1NfREVGOworICAgICAgICBzd2l0Y2ggKCBhcmdbMl0gKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAnQic6CisgICAgICAgICAgICBmb3JtYXQgPSBPVVRQVVRfQk9STEFORF9ERUY7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1cnOgorICAgICAgICAgICAgZm9ybWF0ID0gT1VUUFVUX1dBVENPTV9MQkM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ04nOgorICAgICAgICAgICAgZm9ybWF0ID0gT1VUUFVUX05FVFdBUkVfSU1QOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDA6CisgICAgICAgIGZyb21fc3RkaW4gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAgICB9CisKKyAgICBhcmdjLS07CisgICAgYXJndisrOworICB9CisKKyAgaWYgKCBmcm9tX3N0ZGluICkKKyAgeworICAgIHJlYWRfaGVhZGVyX2ZpbGUoIHN0ZGluLCB2ZXJib3NlICk7CisgIH0KKyAgZWxzZQorICB7CisgICAgZm9yICggLS1hcmdjLCBhcmd2Kys7IGFyZ2MgPiAwOyBhcmdjLS0sIGFyZ3YrKyApCisgICAgeworICAgICAgRklMRSogIGZpbGUgPSBmb3BlbiggYXJndlswXSwgInJiIiApOworCisgICAgICBpZiAoIGZpbGUgPT0gTlVMTCApCisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgInVuYWJsZSB0byBvcGVuICclcydcbiIsIGFyZ3ZbMF0gKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCB2ZXJib3NlICkKKyAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJvcGVuaW5nICclcydcbiIsIGFyZ3ZbMF0gKTsKKworICAgICAgICByZWFkX2hlYWRlcl9maWxlKCBmaWxlLCB2ZXJib3NlICk7CisgICAgICAgIGZjbG9zZSggZmlsZSApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICggbnVtX25hbWVzID09IDAgKQorICAgIHBhbmljKCAiY291bGQgbm90IGZpbmQgZXhwb3J0ZWQgZnVuY3Rpb25zICEhXG4iICk7CisKKyAgbmFtZXNfc29ydCgpOworICBuYW1lc19kdW1wKCBvdXQsIGZvcm1hdCwgbGlicmFyeV9uYW1lICk7CisKKyAgaWYgKCBvdXQgIT0gc3Rkb3V0ICkKKyAgICBmY2xvc2UoIG91dCApOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9jaGt0cmNtcC5weSBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvY2hrdHJjbXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U2NTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvY2hrdHJjbXAucHkKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDaGVjayB0cmFjZSBjb21wb25lbnRzIGluIEZyZWVUeXBlIDIgc291cmNlLgorIyBBdXRob3I6IHN1enVraSB0b3NoaXlhLCAyMDA5LCAyMDEzCisjCisjIFRoaXMgY29kZSBpcyBleHBsaWNpdGx5IGludG8gdGhlIHB1YmxpYyBkb21haW4uCisKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworU1JDX0ZJTEVfTElTVCAgID0gW10KK1VTRURfQ09NUE9ORU5UICA9IHt9CitLTk9XTl9DT01QT05FTlQgPSB7fQorCitTUkNfRklMRV9ESVJTICAgPSBbICJzcmMiIF0KK1RSQUNFX0RFRl9GSUxFUyA9IFsgImluY2x1ZGUvaW50ZXJuYWwvZnR0cmFjZS5oIiBdCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworIworCitmb3IgaSBpbiByYW5nZSggMSwgbGVuKCBzeXMuYXJndiApICk6CisgIGlmIHN5cy5hcmd2W2ldLnN0YXJ0c3dpdGgoICItLWhlbHAiICk6CisgICAgcHJpbnQgIlVzYWdlOiAlcyBbb3B0aW9uXSIgJSBzeXMuYXJndlswXQorICAgIHByaW50ICJTZWFyY2ggdXNlZC1idXQtZGVmaW5lZCBhbmQgZGVmaW5lZC1idXQtbm90LXVzZWQgdHJhY2VfWFhYIG1hY3JvcyIKKyAgICBwcmludCAiIgorICAgIHByaW50ICIgIC0taGVscDoiCisgICAgcHJpbnQgIiAgICAgICAgU2hvdyB0aGlzIGhlbHAiCisgICAgcHJpbnQgIiIKKyAgICBwcmludCAiICAtLXNyYy1kaXJzPWRpcjE6ZGlyMjouLi4iCisgICAgcHJpbnQgIiAgICAgICAgU3BlY2lmeSB0aGUgZGlyZWN0b3JpZXMgb2YgQyBzb3VyY2UgZmlsZXMgdG8gYmUgY2hlY2tlZCIKKyAgICBwcmludCAiICAgICAgICBEZWZhdWx0IGlzICVzIiAlICI6Ii5qb2luKCBTUkNfRklMRV9ESVJTICkKKyAgICBwcmludCAiIgorICAgIHByaW50ICIgIC0tZGVmLWZpbGVzPWZpbGUxOmZpbGUyOi4uLiIKKyAgICBwcmludCAiICAgICAgICBTcGVjaWZ5IHRoZSBoZWFkZXIgZmlsZXMgaW5jbHVkaW5nIEZUX1RSQUNFX0RFRigpIgorICAgIHByaW50ICIgICAgICAgIERlZmF1bHQgaXMgJXMiICUgIjoiLmpvaW4oIFRSQUNFX0RFRl9GSUxFUyApCisgICAgcHJpbnQgIiIKKyAgICBleGl0KDApCisgIGlmIHN5cy5hcmd2W2ldLnN0YXJ0c3dpdGgoICItLXNyYy1kaXJzPSIgKToKKyAgICBTUkNfRklMRV9ESVJTID0gc3lzLmFyZ3ZbaV0ucmVwbGFjZSggIi0tc3JjLWRpcnM9IiwgIiIsIDEgKS5zcGxpdCggIjoiICkKKyAgZWxpZiBzeXMuYXJndltpXS5zdGFydHN3aXRoKCAiLS1kZWYtZmlsZXM9IiApOgorICAgIFRSQUNFX0RFRl9GSUxFUyA9IHN5cy5hcmd2W2ldLnJlcGxhY2UoICItLWRlZi1maWxlcz0iLCAiIiwgMSApLnNwbGl0KCAiOiIgKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NhbiBDIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzIHVzaW5nIHRyYWNlIG1hY3Jvcy4KKyMKKworY19wYXRobmFtZV9wYXQgPSByZS5jb21waWxlKCAnXi4qXC5bY2hdJCcsIHJlLklHTk9SRUNBU0UgKQordHJhY2VfdXNlX3BhdCAgPSByZS5jb21waWxlKCAnXlsgXHRdKiNkZWZpbmVbIFx0XStGVF9DT01QT05FTlRbIFx0XSt0cmFjZV8nICkKKworZm9yIGQgaW4gU1JDX0ZJTEVfRElSUzoKKyAgZm9yICggcCwgZGxzdCwgZmxzdCApIGluIG9zLndhbGsoIGQgKToKKyAgICBmb3IgZiBpbiBmbHN0OgorICAgICAgaWYgY19wYXRobmFtZV9wYXQubWF0Y2goIGYgKSAhPSBOb25lOgorICAgICAgICBzcmNfcGF0aG5hbWUgPSBvcy5wYXRoLmpvaW4oIHAsIGYgKQorCisgICAgICAgIGxpbmVfbnVtID0gMAorICAgICAgICBmb3Igc3JjX2xpbmUgaW4gb3Blbiggc3JjX3BhdGhuYW1lLCAncicgKToKKyAgICAgICAgICBsaW5lX251bSA9IGxpbmVfbnVtICsgMQorICAgICAgICAgIHNyY19saW5lID0gc3JjX2xpbmUuc3RyaXAoKQorICAgICAgICAgIGlmIHRyYWNlX3VzZV9wYXQubWF0Y2goIHNyY19saW5lICkgIT0gTm9uZToKKyAgICAgICAgICAgIGNvbXBvbmVudF9uYW1lID0gdHJhY2VfdXNlX3BhdC5zdWIoICcnLCBzcmNfbGluZSApCisgICAgICAgICAgICBpZiBjb21wb25lbnRfbmFtZSBpbiBVU0VEX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgVVNFRF9DT01QT05FTlRbY29tcG9uZW50X25hbWVdLmFwcGVuZCggIiVzOiVkIiAlICggc3JjX3BhdGhuYW1lLCBsaW5lX251bSApICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgIFVTRURfQ09NUE9ORU5UW2NvbXBvbmVudF9uYW1lXSA9IFsgIiVzOiVkIiAlICggc3JjX3BhdGhuYW1lLCBsaW5lX251bSApIF0KKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNjYW4gaGVhZGVyIGZpbGUocykgZGVmaW5pbmcgdHJhY2UgbWFjcm9zLgorIworCit0cmFjZV9kZWZfcGF0X29wbiA9IHJlLmNvbXBpbGUoICdeLipGVF9UUkFDRV9ERUZbIFx0XSpcKFsgXHRdKicgKQordHJhY2VfZGVmX3BhdF9jbHMgPSByZS5jb21waWxlKCAnWyBcdFwpXS4qJCcgKQorCitmb3IgZiBpbiBUUkFDRV9ERUZfRklMRVM6CisgIGxpbmVfbnVtID0gMAorICBmb3IgaGRyX2xpbmUgaW4gb3BlbiggZiwgJ3InICk6CisgICAgbGluZV9udW0gPSBsaW5lX251bSArIDEKKyAgICBoZHJfbGluZSA9IGhkcl9saW5lLnN0cmlwKCkKKyAgICBpZiB0cmFjZV9kZWZfcGF0X29wbi5tYXRjaCggaGRyX2xpbmUgKSAhPSBOb25lOgorICAgICAgY29tcG9uZW50X25hbWUgPSB0cmFjZV9kZWZfcGF0X29wbi5zdWIoICcnLCBoZHJfbGluZSApCisgICAgICBjb21wb25lbnRfbmFtZSA9IHRyYWNlX2RlZl9wYXRfY2xzLnN1YiggJycsIGNvbXBvbmVudF9uYW1lICkKKyAgICAgIGlmIGNvbXBvbmVudF9uYW1lIGluIEtOT1dOX0NPTVBPTkVOVDoKKyAgICAgICAgcHJpbnQgInRyYWNlIGNvbXBvbmVudCAlcyBpcyBkZWZpbmVkIHR3aWNlLCBzZWUgJXMgYW5kIGZ0dHJhY2UuaDolZCIgJSBcCisgICAgICAgICAgKCBjb21wb25lbnRfbmFtZSwgS05PV05fQ09NUE9ORU5UW2NvbXBvbmVudF9uYW1lXSwgbGluZV9udW0gKQorICAgICAgZWxzZToKKyAgICAgICAgS05PV05fQ09NUE9ORU5UW2NvbXBvbmVudF9uYW1lXSA9ICIlczolZCIgJSBcCisgICAgICAgICAgKCBvcy5wYXRoLmJhc2VuYW1lKCBmICksIGxpbmVfbnVtICkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBhcmUgdGhlIHVzZWQgYW5kIGRlZmluZWQgdHJhY2UgbWFjcm9zLgorIworCitwcmludCAiIyBUcmFjZSBjb21wb25lbnQgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb25zIGJ1dCBub3QgZGVmaW5lZCBpbiBmdHRyYWNlLmguIgorY21wbnQgPSBVU0VEX0NPTVBPTkVOVC5rZXlzKCkKK2NtcG50LnNvcnQoKQorZm9yIGMgaW4gY21wbnQ6CisgIGlmIGMgbm90IGluIEtOT1dOX0NPTVBPTkVOVDoKKyAgICBwcmludCAiVHJhY2UgY29tcG9uZW50ICVzICh1c2VkIGluICVzKSBpcyBub3QgZGVmaW5lZC4iICUgKCBjLCAiLCAiLmpvaW4oIFVTRURfQ09NUE9ORU5UW2NdICkgKQorCitwcmludCAiIyBUcmFjZSBjb21wb25lbnQgaXMgZGVmaW5lZCBidXQgbm90IHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9ucy4iCitjbXBudCA9IEtOT1dOX0NPTVBPTkVOVC5rZXlzKCkKK2NtcG50LnNvcnQoKQorZm9yIGMgaW4gY21wbnQ6CisgIGlmIGMgbm90IGluIFVTRURfQ09NUE9ORU5UOgorICAgIGlmIGMgIT0gImFueSI6CisgICAgICBwcmludCAiVHJhY2UgY29tcG9uZW50ICVzIChkZWZpbmVkIGluICVzKSBpcyBub3QgdXNlZC4iICUgKCBjLCBLTk9XTl9DT01QT05FTlRbY10gKQorCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2NvcmRpYy5weSBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvY29yZGljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NDJjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2NvcmRpYy5weQpAQCAtMCwwICsxLDMzIEBACisjIGNvbXB1dGUgYXJjdGFuZ2VudCB0YWJsZSBmb3IgQ09SRElDIGNvbXB1dGF0aW9ucyBpbiBmdHRyaWdvbi5jCitpbXBvcnQgc3lzLCBtYXRoCisKKyN1bml0cyAgPSA2NCo2NTUzNi4wICAgIyBkb24ndCBjaGFuZ2UgISEKK3VuaXRzICA9IDE4MCAqIDIqKjE2CitzY2FsZSAgPSB1bml0cy9tYXRoLnBpCitzaHJpbmsgPSAxLjAKK2NvbW1hICA9ICIiCisKK3ByaW50ICIiCitwcmludCAidGFibGUgb2YgYXJjdGFuKCAxLzJebiApIGZvciBQSSA9ICIgKyByZXByKHVuaXRzLzY1NTM2LjApICsgIiB1bml0cyIKKworZm9yIG4gaW4gcmFuZ2UoMSwzMik6CisKKyAgICB4ID0gMC41KipuICAgICAgICAgICAgICAgICAgICAgICMgdGFuZ2VudCB2YWx1ZQorCisgICAgYW5nbGUgID0gbWF0aC5hdGFuKHgpICAgICAgICAgICAjIGFyY3RhbmdlbnQKKyAgICBhbmdsZTIgPSByb3VuZChhbmdsZSpzY2FsZSkgICAgICMgYXJjdGFuZ2VudCBpbiBGVF9BbmdsZSB1bml0cworCisgICAgaWYgYW5nbGUyIDw9IDA6CisgICAgICAgIGJyZWFrCisKKyAgICBzeXMuc3Rkb3V0LndyaXRlKCBjb21tYSArIHJlcHIoIGludChhbmdsZTIpICkgKQorICAgIGNvbW1hID0gIiwgIgorCisgICAgc2hyaW5rIC89IG1hdGguc3FydCggMSArIHgqeCApCisKK3ByaW50CitwcmludCAic2hyaW5rIGZhY3RvciAgICA9ICIgKyByZXByKCBzaHJpbmsgKQorcHJpbnQgInNocmluayBmYWN0b3IgMiAgPSAiICsgcmVwciggaW50KCBzaHJpbmsgKiAoMioqMzIpICkgKQorcHJpbnQgImV4cGFuc2lvbiBmYWN0b3IgPSAiICsgcmVwciggMS9zaHJpbmsgKQorcHJpbnQgIiIKKwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkKQEAgLTAsMCArMSw2MzcgQEAKKyMKKyMgIGNvbnRlbnQucHkKKyMKKyMgICAgUGFyc2UgY29tbWVudCBibG9ja3MgdG8gYnVpbGQgY29udGVudCBibG9ja3MgKGxpYnJhcnkgZmlsZSkuCisjCisjICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjICBEYXZpZCBUdXJuZXIuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisjICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorIyAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisjICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyMgIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKworIworIyBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcGFyc2UgZG9jdW1lbnRhdGlvbiBjb21tZW50IGJsb2NrcywKKyMgYnVpbGRpbmcgbW9yZSBzdHJ1Y3R1cmVkIG9iamVjdHMgb3V0IG9mIHRoZW0uCisjCisKKworZnJvbSBzb3VyY2VzIGltcG9ydCAqCitmcm9tIHV0aWxzICAgaW1wb3J0ICoKKworaW1wb3J0IHN0cmluZywgcmUKKworCisjCisjIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZGV0ZWN0IGNvZGUgc2VxdWVuY2VzLiAgYENvZGUgc2VxdWVuY2VzJyBhcmUgc2ltcGx5CisjIGNvZGUgZnJhZ21lbnRzIGVtYmVkZGVkIGluICd7JyBhbmQgJ30nLCBhcyBkZW1vbnN0cmF0ZWQgaW4gdGhlIGZvbGxvd2luZworIyBleGFtcGxlLgorIworIyAgIHsKKyMgICAgIHggPSB5ICsgejsKKyMgICAgIGlmICggem9va29vID09IDIgKQorIyAgICAgeworIyAgICAgICBmb29iYXIoKTsKKyMgICAgIH0KKyMgICB9CisjCisjIE5vdGUgdGhhdCB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IG9wZW5pbmcgYnJhY2UgYW5kIHRoZSBsYXN0IGNsb3NpbmcKKyMgYnJhY2UgbXVzdCBiZSBleGFjdGx5IHRoZSBzYW1lLiAgVGhlIGNvZGUgc2VxdWVuY2UgaXRzZWxmIHNob3VsZCBoYXZlIGEKKyMgbGFyZ2VyIGluZGVudGF0aW9uIHRoYW4gdGhlIHN1cnJvdW5kaW5nIGJyYWNlcy4KKyMKK3JlX2NvZGVfc3RhcnQgPSByZS5jb21waWxlKCByIihccyope1xzKiQiICkKK3JlX2NvZGVfZW5kICAgPSByZS5jb21waWxlKCByIihccyopfVxzKiQiICkKKworCisjCisjIEEgcmVndWxhciBleHByZXNzaW9uIHRvIGlzb2xhdGUgaWRlbnRpZmllcnMgZnJvbSBvdGhlciB0ZXh0LgorIworcmVfaWRlbnRpZmllciA9IHJlLmNvbXBpbGUoIHInKCg/Olx3fC0pKiknICkKKworCisjCisjIFdlIGNvbGxlY3QgbWFjcm8gbmFtZXMgZW5kaW5nIGluIGBfSCcgKGdyb3VwIDEpLCBhcyBkZWZpbmVkIGluCisjIGBjb25maWcvZnRoZWFkZXIuaCcuICBXaGlsZSBvdXRwdXR0aW5nIHRoZSBvYmplY3QgZGF0YSwgd2UgdXNlIHRoaXMgaW5mbworIyB0b2dldGhlciB3aXRoIHRoZSBvYmplY3QncyBmaWxlIGxvY2F0aW9uIChncm91cCAyKSB0byBlbWl0IHRoZSBhcHByb3ByaWF0ZQorIyBoZWFkZXIgZmlsZSBtYWNybyBhbmQgaXRzIGFzc29jaWF0ZWQgZmlsZSBuYW1lIGJlZm9yZSB0aGUgb2JqZWN0IGl0c2VsZi4KKyMKKyMgRXhhbXBsZToKKyMKKyMgICAjZGVmaW5lIEZUX0ZSRUVUWVBFX0ggPGZyZWV0eXBlLmg+CisjCityZV9oZWFkZXJfbWFjcm8gPSByZS5jb21waWxlKCByJ14jZGVmaW5lXHN7MSx9KFx3ezEsfV9IKVxzezEsfTwoLiopPicgKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgRE9DIENPREUgQ0xBU1MKKyMjCisjIyAgVGhlIGBEb2NDb2RlJyBjbGFzcyBpcyB1c2VkIHRvIHN0b3JlIHNvdXJjZSBjb2RlIGxpbmVzLgorIyMKKyMjICBgc2VsZi5saW5lcycgY29udGFpbnMgYSBzZXQgb2Ygc291cmNlIGNvZGUgbGluZXMgdGhhdCB3aWxsIGJlIGR1bXBlZCBhcworIyMgIEhUTUwgaW4gYSA8UFJFPiB0YWcuCisjIworIyMgIFRoZSBvYmplY3QgaXMgZmlsbGVkIGxpbmUgYnkgbGluZSBieSB0aGUgcGFyc2VyOyBpdCBzdHJpcHMgdGhlIGxlYWRpbmcKKyMjICBgbWFyZ2luJyBzcGFjZSBmcm9tIGVhY2ggaW5wdXQgbGluZSBiZWZvcmUgc3RvcmluZyBpdCBpbiBgc2VsZi5saW5lcycuCisjIworY2xhc3MgIERvY0NvZGU6CisKKyAgICBkZWYgIF9faW5pdF9fKCBzZWxmLCBtYXJnaW4sIGxpbmVzICk6CisgICAgICAgIHNlbGYubGluZXMgPSBbXQorICAgICAgICBzZWxmLndvcmRzID0gTm9uZQorCisgICAgICAgICMgcmVtb3ZlIG1hcmdpbiBzcGFjZXMKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBzdHJpbmcuc3RyaXAoIGxbOm1hcmdpbl0gKSA9PSAiIjoKKyAgICAgICAgICAgICAgICBsID0gbFttYXJnaW46XQorICAgICAgICAgICAgc2VsZi5saW5lcy5hcHBlbmQoIGwgKQorCisgICAgZGVmICBkdW1wKCBzZWxmLCBwcmVmaXggPSAiIiwgd2lkdGggPSA2MCApOgorICAgICAgICBsaW5lcyA9IHNlbGYuZHVtcF9saW5lcyggMCwgd2lkdGggKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIHByaW50IHByZWZpeCArIGwKKworICAgIGRlZiAgZHVtcF9saW5lcyggc2VsZiwgbWFyZ2luID0gMCwgd2lkdGggPSA2MCApOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbCBpbiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggIiAiICogbWFyZ2luICsgbCApCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgRE9DIFBBUkEgQ0xBU1MKKyMjCisjIyAgYE5vcm1hbCcgdGV4dCBwYXJhZ3JhcGhzIGFyZSBzdG9yZWQgaW4gdGhlIGBEb2NQYXJhJyBjbGFzcy4KKyMjCisjIyAgYHNlbGYud29yZHMnIGNvbnRhaW5zIHRoZSBsaXN0IG9mIHdvcmRzIHRoYXQgbWFrZSB1cCB0aGUgcGFyYWdyYXBoLgorIyMKK2NsYXNzICBEb2NQYXJhOgorCisgICAgZGVmICBfX2luaXRfXyggc2VsZiwgbGluZXMgKToKKyAgICAgICAgc2VsZi5saW5lcyA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JkcyA9IFtdCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbCA9IHN0cmluZy5zdHJpcCggbCApCisgICAgICAgICAgICBzZWxmLndvcmRzLmV4dGVuZCggc3RyaW5nLnNwbGl0KCBsICkgKQorCisgICAgZGVmICBkdW1wKCBzZWxmLCBwcmVmaXggPSAiIiwgd2lkdGggPSA2MCApOgorICAgICAgICBsaW5lcyA9IHNlbGYuZHVtcF9saW5lcyggMCwgd2lkdGggKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIHByaW50IHByZWZpeCArIGwKKworICAgIGRlZiAgZHVtcF9saW5lcyggc2VsZiwgbWFyZ2luID0gMCwgd2lkdGggPSA2MCApOgorICAgICAgICBjdXIgICAgPSAiIiAgIyBjdXJyZW50IGxpbmUKKyAgICAgICAgY29sICAgID0gMCAgICMgY3VycmVudCB3aWR0aAorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIGZvciB3b3JkIGluIHNlbGYud29yZHM6CisgICAgICAgICAgICBsbiA9IGxlbiggd29yZCApCisgICAgICAgICAgICBpZiBjb2wgPiAwOgorICAgICAgICAgICAgICAgIGxuID0gbG4gKyAxCisKKyAgICAgICAgICAgIGlmIGNvbCArIGxuID4gd2lkdGg6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggIiAiICogbWFyZ2luICsgY3VyICkKKyAgICAgICAgICAgICAgICBjdXIgPSB3b3JkCisgICAgICAgICAgICAgICAgY29sID0gbGVuKCB3b3JkICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgY29sID4gMDoKKyAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyICsgIiAiCisgICAgICAgICAgICAgICAgY3VyID0gY3VyICsgd29yZAorICAgICAgICAgICAgICAgIGNvbCA9IGNvbCArIGxuCisKKyAgICAgICAgaWYgY29sID4gMDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoICIgIiAqIG1hcmdpbiArIGN1ciApCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgRE9DIEZJRUxEIENMQVNTCisjIworIyMgIFRoZSBgRG9jRmllbGQnIGNsYXNzIHN0b3JlcyBhIGxpc3QgY29udGFpbmluZyBlaXRoZXIgYERvY1BhcmEnIG9yCisjIyAgYERvY0NvZGUnIG9iamVjdHMuICBFYWNoIERvY0ZpZWxkIG9iamVjdCBhbHNvIGhhcyBhbiBvcHRpb25hbCBgbmFtZScKKyMjICB0aGF0IGlzIHVzZWQgd2hlbiB0aGUgb2JqZWN0IGNvcnJlc3BvbmRzIHRvIGEgZmllbGQgb3IgdmFsdWUgZGVmaW5pdGlvbi4KKyMjCitjbGFzcyAgRG9jRmllbGQ6CisKKyAgICBkZWYgIF9faW5pdF9fKCBzZWxmLCBuYW1lLCBsaW5lcyApOgorICAgICAgICBzZWxmLm5hbWUgID0gbmFtZSAgIyBjYW4gYmUgYE5vbmUnIGZvciBub3JtYWwgcGFyYWdyYXBocy9zb3VyY2VzCisgICAgICAgIHNlbGYuaXRlbXMgPSBbXSAgICAjIGxpc3Qgb2YgaXRlbXMKKworICAgICAgICBtb2RlX25vbmUgID0gMCAgICAgIyBzdGFydCBwYXJzaW5nIG1vZGUKKyAgICAgICAgbW9kZV9jb2RlICA9IDEgICAgICMgcGFyc2luZyBjb2RlIHNlcXVlbmNlcworICAgICAgICBtb2RlX3BhcmEgID0gMyAgICAgIyBwYXJzaW5nIG5vcm1hbCBwYXJhZ3JhcGgKKworICAgICAgICBtYXJnaW4gICAgID0gLTEgICAgIyBjdXJyZW50IGNvZGUgc2VxdWVuY2UgaW5kZW50YXRpb24KKyAgICAgICAgY3VyX2xpbmVzICA9IFtdCisKKyAgICAgICAgIyBhbmFseXplIHRoZSBtYXJrdXAgbGluZXMgdG8gY2hlY2sgd2hldGhlciB0aGV5IGNvbnRhaW4gcGFyYWdyYXBocywKKyAgICAgICAgIyBjb2RlIHNlcXVlbmNlcywgb3IgZmllbGRzIGRlZmluaXRpb25zCisgICAgICAgICMKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgIG1vZGUgID0gbW9kZV9ub25lCisKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAjIGFyZSB3ZSBwYXJzaW5nIGEgY29kZSBzZXF1ZW5jZT8KKyAgICAgICAgICAgIGlmIG1vZGUgPT0gbW9kZV9jb2RlOgorICAgICAgICAgICAgICAgIG0gPSByZV9jb2RlX2VuZC5tYXRjaCggbCApCisgICAgICAgICAgICAgICAgaWYgbSBhbmQgbGVuKCBtLmdyb3VwKCAxICkgKSA8PSBtYXJnaW46CisgICAgICAgICAgICAgICAgICAgICMgdGhhdCdzIGl0LCB3ZSBmaW5pc2hlZCB0aGUgY29kZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgICBjb2RlID0gRG9jQ29kZSggMCwgY3VyX2xpbmVzICkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtcy5hcHBlbmQoIGNvZGUgKQorICAgICAgICAgICAgICAgICAgICBtYXJnaW4gICAgPSAtMQorICAgICAgICAgICAgICAgICAgICBjdXJfbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBtb2RlICAgICAgPSBtb2RlX25vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBjb250aW51ZSB0aGUgY29kZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgICBjdXJfbGluZXMuYXBwZW5kKCBsW21hcmdpbjpdICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBzdGFydCBvZiBjb2RlIHNlcXVlbmNlPworICAgICAgICAgICAgICAgIG0gPSByZV9jb2RlX3N0YXJ0Lm1hdGNoKCBsICkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAjIHNhdmUgY3VycmVudCBsaW5lcworICAgICAgICAgICAgICAgICAgICBpZiBjdXJfbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhID0gRG9jUGFyYSggY3VyX2xpbmVzICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKCBwYXJhICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9saW5lcyA9IFtdCisKKyAgICAgICAgICAgICAgICAgICAgIyBzd2l0Y2ggdG8gY29kZSBleHRyYWN0aW9uIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gbGVuKCBtLmdyb3VwKCAxICkgKQorICAgICAgICAgICAgICAgICAgICBtb2RlICAgPSBtb2RlX2NvZGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RyaW5nLnNwbGl0KCBsICkgYW5kIGN1cl9saW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIGxpbmUgaXMgZW1wdHksIHdlIGVuZCB0aGUgY3VycmVudCBwYXJhZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYSA9IERvY1BhcmEoIGN1cl9saW5lcyApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1zLmFwcGVuZCggcGFyYSApCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UsIHNpbXBseSBhZGQgdGhlIGxpbmUgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcGFyYWdyYXBoCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGluZXMuYXBwZW5kKCBsICkKKworICAgICAgICBpZiBtb2RlID09IG1vZGVfY29kZToKKyAgICAgICAgICAgICMgdW5leHBlY3RlZCBlbmQgb2YgY29kZSBzZXF1ZW5jZQorICAgICAgICAgICAgY29kZSA9IERvY0NvZGUoIG1hcmdpbiwgY3VyX2xpbmVzICkKKyAgICAgICAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKCBjb2RlICkKKyAgICAgICAgZWxpZiBjdXJfbGluZXM6CisgICAgICAgICAgICBwYXJhID0gRG9jUGFyYSggY3VyX2xpbmVzICkKKyAgICAgICAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKCBwYXJhICkKKworICAgIGRlZiAgZHVtcCggc2VsZiwgcHJlZml4ID0gIiIgKToKKyAgICAgICAgaWYgc2VsZi5maWVsZDoKKyAgICAgICAgICAgIHByaW50IHByZWZpeCArIHNlbGYuZmllbGQgKyAiIDo6IgorICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIi0tLS0iCisKKyAgICAgICAgZmlyc3QgPSAxCisgICAgICAgIGZvciBwIGluIHNlbGYuaXRlbXM6CisgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CisgICAgICAgICAgICAgICAgcHJpbnQgIiIKKyAgICAgICAgICAgIHAuZHVtcCggcHJlZml4ICkKKyAgICAgICAgICAgIGZpcnN0ID0gMAorCisgICAgZGVmICBkdW1wX2xpbmVzKCBzZWxmLCBtYXJnaW4gPSAwLCB3aWR0aCA9IDYwICk6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIG5sICAgICA9IE5vbmUKKworICAgICAgICBmb3IgcCBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgaWYgbmw6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggIiIgKQorCisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKCBwLmR1bXBfbGluZXMoIG1hcmdpbiwgd2lkdGggKSApCisgICAgICAgICAgICBubCA9IDEKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKworIworIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBkZXRlY3QgZmllbGQgZGVmaW5pdGlvbnMuCisjCisjIEV4YW1wbGVzOgorIworIyAgIGZvbyAgICAgOjoKKyMgICBmb28uYmFyIDo6CisjCityZV9maWVsZCA9IHJlLmNvbXBpbGUoIHIiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBccyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHcqCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx3IChcdyB8IFwuKSogXHcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBccyogOjoKKyAgICAgICAgICAgICAgICAgICAgICAgIiIiLCByZS5WRVJCT1NFICkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgIERPQyBNQVJLVVAgQ0xBU1MKKyMjCitjbGFzcyAgRG9jTWFya3VwOgorCisgICAgZGVmICBfX2luaXRfXyggc2VsZiwgdGFnLCBsaW5lcyApOgorICAgICAgICBzZWxmLnRhZyAgICA9IHN0cmluZy5sb3dlciggdGFnICkKKyAgICAgICAgc2VsZi5maWVsZHMgPSBbXQorCisgICAgICAgIGN1cl9saW5lcyA9IFtdCisgICAgICAgIGZpZWxkICAgICA9IE5vbmUKKyAgICAgICAgbW9kZSAgICAgID0gMAorCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IHJlX2ZpZWxkLm1hdGNoKCBsICkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgIyBXZSBkZXRlY3RlZCB0aGUgc3RhcnQgb2YgYSBuZXcgZmllbGQgZGVmaW5pdGlvbi4KKworICAgICAgICAgICAgICAgICMgZmlyc3QsIHNhdmUgdGhlIGN1cnJlbnQgb25lCisgICAgICAgICAgICAgICAgaWYgY3VyX2xpbmVzOgorICAgICAgICAgICAgICAgICAgICBmID0gRG9jRmllbGQoIGZpZWxkLCBjdXJfbGluZXMgKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpZWxkcy5hcHBlbmQoIGYgKQorICAgICAgICAgICAgICAgICAgICBjdXJfbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmaWVsZCAgICAgPSBOb25lCisKKyAgICAgICAgICAgICAgICBmaWVsZCAgICAgPSBtLmdyb3VwKCAxICkgICAjIHJlY29yZCBmaWVsZCBuYW1lCisgICAgICAgICAgICAgICAgbG4gICAgICAgID0gbGVuKCBtLmdyb3VwKCAwICkgKQorICAgICAgICAgICAgICAgIGwgICAgICAgICA9ICIgIiAqIGxuICsgbFtsbjpdCisgICAgICAgICAgICAgICAgY3VyX2xpbmVzID0gW2xdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGN1cl9saW5lcy5hcHBlbmQoIGwgKQorCisgICAgICAgIGlmIGZpZWxkIG9yIGN1cl9saW5lczoKKyAgICAgICAgICAgIGYgPSBEb2NGaWVsZCggZmllbGQsIGN1cl9saW5lcyApCisgICAgICAgICAgICBzZWxmLmZpZWxkcy5hcHBlbmQoIGYgKQorCisgICAgZGVmICBnZXRfbmFtZSggc2VsZiApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWVsZHNbMF0uaXRlbXNbMF0ud29yZHNbMF0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiAgZHVtcCggc2VsZiwgbWFyZ2luICk6CisgICAgICAgIHByaW50ICIgIiAqIG1hcmdpbiArICI8IiArIHNlbGYudGFnICsgIj4iCisgICAgICAgIGZvciBmIGluIHNlbGYuZmllbGRzOgorICAgICAgICAgICAgZi5kdW1wKCAiICAiICkKKyAgICAgICAgcHJpbnQgIiAiICogbWFyZ2luICsgIjwvIiArIHNlbGYudGFnICsgIj4iCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjICBET0MgQ0hBUFRFUiBDTEFTUworIyMKK2NsYXNzICBEb2NDaGFwdGVyOgorCisgICAgZGVmICBfX2luaXRfXyggc2VsZiwgYmxvY2sgKToKKyAgICAgICAgc2VsZi5ibG9jayAgICA9IGJsb2NrCisgICAgICAgIHNlbGYuc2VjdGlvbnMgPSBbXQorICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgIHNlbGYubmFtZSAgPSBibG9jay5uYW1lCisgICAgICAgICAgICBzZWxmLnRpdGxlID0gYmxvY2suZ2V0X21hcmt1cF93b3JkcyggInRpdGxlIiApCisgICAgICAgICAgICBzZWxmLm9yZGVyID0gYmxvY2suZ2V0X21hcmt1cF93b3JkcyggInNlY3Rpb25zIiApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm5hbWUgID0gIk90aGVyIgorICAgICAgICAgICAgc2VsZi50aXRsZSA9IHN0cmluZy5zcGxpdCggIk1pc2NlbGxhbmVvdXMiICkKKyAgICAgICAgICAgIHNlbGYub3JkZXIgPSBbXQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgRE9DIFNFQ1RJT04gQ0xBU1MKKyMjCitjbGFzcyAgRG9jU2VjdGlvbjoKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYsIG5hbWUgPSAiT3RoZXIiICk6CisgICAgICAgIHNlbGYubmFtZSAgICAgICAgPSBuYW1lCisgICAgICAgIHNlbGYuYmxvY2tzICAgICAgPSB7fQorICAgICAgICBzZWxmLmJsb2NrX25hbWVzID0gW10gICMgb3JkZXJlZCBibG9jayBuYW1lcyBpbiBzZWN0aW9uCisgICAgICAgIHNlbGYuZGVmcyAgICAgICAgPSBbXQorICAgICAgICBzZWxmLmFic3RyYWN0ICAgID0gIiIKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICIiCisgICAgICAgIHNlbGYub3JkZXIgICAgICAgPSBbXQorICAgICAgICBzZWxmLnRpdGxlICAgICAgID0gIkVSUk9SIgorICAgICAgICBzZWxmLmNoYXB0ZXIgICAgID0gTm9uZQorCisgICAgZGVmICBhZGRfZGVmKCBzZWxmLCBibG9jayApOgorICAgICAgICBzZWxmLmRlZnMuYXBwZW5kKCBibG9jayApCisKKyAgICBkZWYgIGFkZF9ibG9jayggc2VsZiwgYmxvY2sgKToKKyAgICAgICAgc2VsZi5ibG9ja19uYW1lcy5hcHBlbmQoIGJsb2NrLm5hbWUgKQorICAgICAgICBzZWxmLmJsb2Nrc1tibG9jay5uYW1lXSA9IGJsb2NrCisKKyAgICBkZWYgIHByb2Nlc3MoIHNlbGYgKToKKyAgICAgICAgIyBsb29rIHVwIG9uZSBibG9jayB0aGF0IGNvbnRhaW5zIGEgdmFsaWQgc2VjdGlvbiBkZXNjcmlwdGlvbgorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5kZWZzOgorICAgICAgICAgICAgdGl0bGUgPSBibG9jay5nZXRfbWFya3VwX3RleHQoICJ0aXRsZSIgKQorICAgICAgICAgICAgaWYgdGl0bGU6CisgICAgICAgICAgICAgICAgc2VsZi50aXRsZSAgICAgICA9IHRpdGxlCisgICAgICAgICAgICAgICAgc2VsZi5hYnN0cmFjdCAgICA9IGJsb2NrLmdldF9tYXJrdXBfd29yZHMoICJhYnN0cmFjdCIgKQorICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBibG9jay5nZXRfbWFya3VwX2l0ZW1zKCAiZGVzY3JpcHRpb24iICkKKyAgICAgICAgICAgICAgICBzZWxmLm9yZGVyICAgICAgID0gYmxvY2suZ2V0X21hcmt1cF93b3Jkc19hbGwoICJvcmRlciIgKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmICByZW9yZGVyKCBzZWxmICk6CisgICAgICAgIHNlbGYuYmxvY2tfbmFtZXMgPSBzb3J0X29yZGVyX2xpc3QoIHNlbGYuYmxvY2tfbmFtZXMsIHNlbGYub3JkZXIgKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgQ09OVEVOVCBQUk9DRVNTT1IgQ0xBU1MKKyMjCitjbGFzcyAgQ29udGVudFByb2Nlc3NvcjoKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYgKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIGJsb2NrIGNvbnRlbnQgcHJvY2Vzc29yLiIiIgorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgICAgICBzZWxmLnNlY3Rpb25zID0ge30gICAgIyBkaWN0aW9uYXJ5IG9mIGRvY3VtZW50YXRpb24gc2VjdGlvbnMKKyAgICAgICAgc2VsZi5zZWN0aW9uICA9IE5vbmUgICMgY3VycmVudCBkb2N1bWVudGF0aW9uIHNlY3Rpb24KKworICAgICAgICBzZWxmLmNoYXB0ZXJzID0gW10gICAgIyBsaXN0IG9mIGNoYXB0ZXJzCisKKyAgICAgICAgc2VsZi5oZWFkZXJzICA9IHt9ICAgICMgZGljdGlvbmFyeSBvZiBoZWFkZXIgbWFjcm9zCisKKyAgICBkZWYgIHNldF9zZWN0aW9uKCBzZWxmLCBzZWN0aW9uX25hbWUgKToKKyAgICAgICAgIiIiU2V0IGN1cnJlbnQgc2VjdGlvbiBkdXJpbmcgcGFyc2luZy4iIiIKKyAgICAgICAgaWYgbm90IHNlY3Rpb25fbmFtZSBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgc2VjdGlvbiA9IERvY1NlY3Rpb24oIHNlY3Rpb25fbmFtZSApCisgICAgICAgICAgICBzZWxmLnNlY3Rpb25zW3NlY3Rpb25fbmFtZV0gPSBzZWN0aW9uCisgICAgICAgICAgICBzZWxmLnNlY3Rpb24gICAgICAgICAgICAgICAgPSBzZWN0aW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlY3Rpb24gPSBzZWxmLnNlY3Rpb25zW3NlY3Rpb25fbmFtZV0KKworICAgIGRlZiAgYWRkX2NoYXB0ZXIoIHNlbGYsIGJsb2NrICk6CisgICAgICAgIGNoYXB0ZXIgPSBEb2NDaGFwdGVyKCBibG9jayApCisgICAgICAgIHNlbGYuY2hhcHRlcnMuYXBwZW5kKCBjaGFwdGVyICkKKworICAgIGRlZiAgcmVzZXQoIHNlbGYgKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGNvbnRlbnQgcHJvY2Vzc29yIGZvciBhIG5ldyBibG9jay4iIiIKKyAgICAgICAgc2VsZi5tYXJrdXBzICAgICAgPSBbXQorICAgICAgICBzZWxmLm1hcmt1cCAgICAgICA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXJrdXBfbGluZXMgPSBbXQorCisgICAgZGVmICBhZGRfbWFya3VwKCBzZWxmICk6CisgICAgICAgICIiIkFkZCBhIG5ldyBtYXJrdXAgc2VjdGlvbi4iIiIKKyAgICAgICAgaWYgc2VsZi5tYXJrdXAgYW5kIHNlbGYubWFya3VwX2xpbmVzOgorCisgICAgICAgICAgICAjIGdldCByaWQgb2YgbGFzdCBsaW5lIG9mIG1hcmt1cCBpZiBpdCdzIGVtcHR5CisgICAgICAgICAgICBtYXJrcyA9IHNlbGYubWFya3VwX2xpbmVzCisgICAgICAgICAgICBpZiBsZW4oIG1hcmtzICkgPiAwIGFuZCBub3Qgc3RyaW5nLnN0cmlwKCBtYXJrc1stMV0gKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hcmt1cF9saW5lcyA9IG1hcmtzWzotMV0KKworICAgICAgICAgICAgbSA9IERvY01hcmt1cCggc2VsZi5tYXJrdXAsIHNlbGYubWFya3VwX2xpbmVzICkKKworICAgICAgICAgICAgc2VsZi5tYXJrdXBzLmFwcGVuZCggbSApCisKKyAgICAgICAgICAgIHNlbGYubWFya3VwICAgICAgID0gTm9uZQorICAgICAgICAgICAgc2VsZi5tYXJrdXBfbGluZXMgPSBbXQorCisgICAgZGVmICBwcm9jZXNzX2NvbnRlbnQoIHNlbGYsIGNvbnRlbnQgKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIGJsb2NrIGNvbnRlbnQgYW5kIHJldHVybiBhIGxpc3Qgb2YgRG9jTWFya3VwIG9iamVjdHMKKyAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byBpdC4iIiIKKyAgICAgICAgbWFya3VwICAgICAgID0gTm9uZQorICAgICAgICBtYXJrdXBfbGluZXMgPSBbXQorICAgICAgICBmaXJzdCAgICAgICAgPSAxCisKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudDoKKyAgICAgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICAgICAgZm9yIHQgaW4gcmVfbWFya3VwX3RhZ3M6CisgICAgICAgICAgICAgICAgbSA9IHQubWF0Y2goIGxpbmUgKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kICA9IHN0cmluZy5sb3dlciggbS5ncm91cCggMSApICkKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbGVuKCBtLmdyb3VwKCAwICkgKQorICAgICAgICAgICAgICAgICAgICBsaW5lICAgPSAiICIgKiBwcmVmaXggKyBsaW5lW3ByZWZpeDpdICAgIyByZW1vdmUgbWFya3VwIGZyb20gbGluZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIGlzIGl0IHRoZSBzdGFydCBvZiBhIG5ldyBtYXJrdXAgc2VjdGlvbiA/CisgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICBmaXJzdCA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9tYXJrdXAoKSAgIyBhZGQgY3VycmVudCBtYXJrdXAgY29udGVudAorICAgICAgICAgICAgICAgIHNlbGYubWFya3VwID0gZm91bmQKKyAgICAgICAgICAgICAgICBpZiBsZW4oIHN0cmluZy5zdHJpcCggbGluZSApICkgPiAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcmt1cF9saW5lcy5hcHBlbmQoIGxpbmUgKQorICAgICAgICAgICAgZWxpZiBmaXJzdCA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYubWFya3VwX2xpbmVzLmFwcGVuZCggbGluZSApCisKKyAgICAgICAgc2VsZi5hZGRfbWFya3VwKCkKKworICAgICAgICByZXR1cm4gc2VsZi5tYXJrdXBzCisKKyAgICBkZWYgIHBhcnNlX3NvdXJjZXMoIHNlbGYsIHNvdXJjZV9wcm9jZXNzb3IgKToKKyAgICAgICAgYmxvY2tzID0gc291cmNlX3Byb2Nlc3Nvci5ibG9ja3MKKyAgICAgICAgY291bnQgID0gbGVuKCBibG9ja3MgKQorCisgICAgICAgIGZvciBuIGluIHJhbmdlKCBjb3VudCApOgorICAgICAgICAgICAgc291cmNlID0gYmxvY2tzW25dCisgICAgICAgICAgICBpZiBzb3VyY2UuY29udGVudDoKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSBkb2N1bWVudGF0aW9uIGNvbW1lbnQsIHdlIG5lZWQgdG8gY2F0Y2gKKyAgICAgICAgICAgICAgICAjIGFsbCBmb2xsb3dpbmcgbm9ybWFsIGJsb2NrcyBpbiB0aGUgImZvbGxvdyIgbGlzdAorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICBmb2xsb3cgPSBbXQorICAgICAgICAgICAgICAgIG0gPSBuICsgMQorICAgICAgICAgICAgICAgIHdoaWxlIG0gPCBjb3VudCBhbmQgbm90IGJsb2Nrc1ttXS5jb250ZW50OgorICAgICAgICAgICAgICAgICAgICBmb2xsb3cuYXBwZW5kKCBibG9ja3NbbV0gKQorICAgICAgICAgICAgICAgICAgICBtID0gbSArIDEKKworICAgICAgICAgICAgICAgIGRvY19ibG9jayA9IERvY0Jsb2NrKCBzb3VyY2UsIGZvbGxvdywgc2VsZiApCisKKyAgICBkZWYgIGZpbmlzaCggc2VsZiApOgorICAgICAgICAjIHByb2Nlc3MgYWxsIHNlY3Rpb25zIHRvIGV4dHJhY3QgdGhlaXIgYWJzdHJhY3QsIGRlc2NyaXB0aW9uCisgICAgICAgICMgYW5kIG9yZGVyZWQgbGlzdCBvZiBpdGVtcworICAgICAgICAjCisgICAgICAgIGZvciBzZWMgaW4gc2VsZi5zZWN0aW9ucy52YWx1ZXMoKToKKyAgICAgICAgICAgIHNlYy5wcm9jZXNzKCkKKworICAgICAgICAjIHByb2Nlc3MgY2hhcHRlcnMgdG8gY2hlY2sgdGhhdCBhbGwgc2VjdGlvbnMgYXJlIGNvcnJlY3RseQorICAgICAgICAjIGxpc3RlZCB0aGVyZQorICAgICAgICBmb3IgY2hhcCBpbiBzZWxmLmNoYXB0ZXJzOgorICAgICAgICAgICAgZm9yIHNlYyBpbiBjaGFwLm9yZGVyOgorICAgICAgICAgICAgICAgIGlmIHNlYyBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uID0gc2VsZi5zZWN0aW9uc1tzZWNdCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uY2hhcHRlciA9IGNoYXAKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5yZW9yZGVyKCkKKyAgICAgICAgICAgICAgICAgICAgY2hhcC5zZWN0aW9ucy5hcHBlbmQoIHNlY3Rpb24gKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJXQVJOSU5HOiBjaGFwdGVyICciICsgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcC5uYW1lICsgIicgaW4gIiArIGNoYXAuYmxvY2subG9jYXRpb24oKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgbGlzdHMgdW5rbm93biBzZWN0aW9uICciICsgc2VjICsgIidcbiIgKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhbGwgc2VjdGlvbnMgYXJlIGluIGEgY2hhcHRlcgorICAgICAgICAjCisgICAgICAgIG90aGVycyA9IFtdCisgICAgICAgIGZvciBzZWMgaW4gc2VsZi5zZWN0aW9ucy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWMuY2hhcHRlcjoKKyAgICAgICAgICAgICAgICBzZWMucmVvcmRlcigpCisgICAgICAgICAgICAgICAgb3RoZXJzLmFwcGVuZCggc2VjICkKKworICAgICAgICAjIGNyZWF0ZSBhIG5ldyBzcGVjaWFsIGNoYXB0ZXIgZm9yIGFsbCByZW1haW5pbmcgc2VjdGlvbnMKKyAgICAgICAgIyB3aGVuIG5lY2Vzc2FyeQorICAgICAgICAjCisgICAgICAgIGlmIG90aGVyczoKKyAgICAgICAgICAgIGNoYXAgPSBEb2NDaGFwdGVyKCBOb25lICkKKyAgICAgICAgICAgIGNoYXAuc2VjdGlvbnMgPSBvdGhlcnMKKyAgICAgICAgICAgIHNlbGYuY2hhcHRlcnMuYXBwZW5kKCBjaGFwICkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgIERPQyBCTE9DSyBDTEFTUworIyMKK2NsYXNzICBEb2NCbG9jazoKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYsIHNvdXJjZSwgZm9sbG93LCBwcm9jZXNzb3IgKToKKyAgICAgICAgcHJvY2Vzc29yLnJlc2V0KCkKKworICAgICAgICBzZWxmLnNvdXJjZSAgPSBzb3VyY2UKKyAgICAgICAgc2VsZi5jb2RlICAgID0gW10KKyAgICAgICAgc2VsZi50eXBlICAgID0gIkVSUlRZUEUiCisgICAgICAgIHNlbGYubmFtZSAgICA9ICJFUlJOQU1FIgorICAgICAgICBzZWxmLnNlY3Rpb24gPSBwcm9jZXNzb3Iuc2VjdGlvbgorICAgICAgICBzZWxmLm1hcmt1cHMgPSBwcm9jZXNzb3IucHJvY2Vzc19jb250ZW50KCBzb3VyY2UuY29udGVudCApCisKKyAgICAgICAgIyBjb21wdXRlIGJsb2NrIHR5cGUgZnJvbSBmaXJzdCBtYXJrdXAgdGFnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudHlwZSA9IHNlbGYubWFya3Vwc1swXS50YWcKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgY29tcHV0ZSBibG9jayBuYW1lIGZyb20gZmlyc3QgbWFya3VwIHBhcmFncmFwaAorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cHNbMF0KKyAgICAgICAgICAgIHBhcmEgICA9IG1hcmt1cC5maWVsZHNbMF0uaXRlbXNbMF0KKyAgICAgICAgICAgIG5hbWUgICA9IHBhcmEud29yZHNbMF0KKyAgICAgICAgICAgIG0gPSByZV9pZGVudGlmaWVyLm1hdGNoKCBuYW1lICkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoIDEgKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICJzZWN0aW9uIjoKKyAgICAgICAgICAgICMgZGV0ZWN0IG5ldyBzZWN0aW9uIHN0YXJ0cworICAgICAgICAgICAgcHJvY2Vzc29yLnNldF9zZWN0aW9uKCBzZWxmLm5hbWUgKQorICAgICAgICAgICAgcHJvY2Vzc29yLnNlY3Rpb24uYWRkX2RlZiggc2VsZiApCisgICAgICAgIGVsaWYgc2VsZi50eXBlID09ICJjaGFwdGVyIjoKKyAgICAgICAgICAgICMgZGV0ZWN0IG5ldyBjaGFwdGVyCisgICAgICAgICAgICBwcm9jZXNzb3IuYWRkX2NoYXB0ZXIoIHNlbGYgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvY2Vzc29yLnNlY3Rpb24uYWRkX2Jsb2NrKCBzZWxmICkKKworICAgICAgICAjIG5vdywgY29tcHV0ZSB0aGUgc291cmNlIGxpbmVzIHJlbGV2YW50IHRvIHRoaXMgZG9jdW1lbnRhdGlvbgorICAgICAgICAjIGJsb2NrLiBXZSBrZWVwIG5vcm1hbCBjb21tZW50cyBpbiBmb3Igb2J2aW91cyByZWFzb25zICg/PykKKyAgICAgICAgc291cmNlID0gW10KKyAgICAgICAgZm9yIGIgaW4gZm9sbG93OgorICAgICAgICAgICAgaWYgYi5mb3JtYXQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvciBsIGluIGIubGluZXM6CisgICAgICAgICAgICAgICAgIyBjb2xsZWN0IGhlYWRlciBtYWNybyBkZWZpbml0aW9ucworICAgICAgICAgICAgICAgIG0gPSByZV9oZWFkZXJfbWFjcm8ubWF0Y2goIGwgKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvci5oZWFkZXJzW20uZ3JvdXAoIDIgKV0gPSBtLmdyb3VwKCAxICk7CisKKyAgICAgICAgICAgICAgICAjIHdlIHVzZSAiLyogKi8iIGFzIGEgc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgaWYgcmVfc291cmNlX3NlcC5tYXRjaCggbCApOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNvdXJjZS5hcHBlbmQoIGwgKQorCisgICAgICAgICMgbm93IHN0cmlwIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBlbXB0eSBsaW5lcyBmcm9tIHRoZSBzb3VyY2VzCisgICAgICAgIHN0YXJ0ID0gMAorICAgICAgICBlbmQgICA9IGxlbiggc291cmNlICkgLSAxCisKKyAgICAgICAgd2hpbGUgc3RhcnQgPCBlbmQgYW5kIG5vdCBzdHJpbmcuc3RyaXAoIHNvdXJjZVtzdGFydF0gKToKKyAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgKyAxCisKKyAgICAgICAgd2hpbGUgc3RhcnQgPCBlbmQgYW5kIG5vdCBzdHJpbmcuc3RyaXAoIHNvdXJjZVtlbmRdICk6CisgICAgICAgICAgICBlbmQgPSBlbmQgLSAxCisKKyAgICAgICAgaWYgc3RhcnQgPT0gZW5kIGFuZCBub3Qgc3RyaW5nLnN0cmlwKCBzb3VyY2Vbc3RhcnRdICk6CisgICAgICAgICAgICBzZWxmLmNvZGUgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb2RlID0gc291cmNlW3N0YXJ0OmVuZCArIDFdCisKKyAgICBkZWYgIGxvY2F0aW9uKCBzZWxmICk6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZS5sb2NhdGlvbigpCisKKyAgICBkZWYgIGdldF9tYXJrdXAoIHNlbGYsIHRhZ19uYW1lICk6CisgICAgICAgICIiIlJldHVybiB0aGUgRG9jTWFya3VwIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0YWcgaW4gYSBibG9jay4iIiIKKyAgICAgICAgZm9yIG0gaW4gc2VsZi5tYXJrdXBzOgorICAgICAgICAgICAgaWYgbS50YWcgPT0gc3RyaW5nLmxvd2VyKCB0YWdfbmFtZSApOgorICAgICAgICAgICAgICAgIHJldHVybiBtCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgIGdldF9tYXJrdXBfd29yZHMoIHNlbGYsIHRhZ19uYW1lICk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG0gPSBzZWxmLmdldF9tYXJrdXAoIHRhZ19uYW1lICkKKyAgICAgICAgICAgIHJldHVybiBtLmZpZWxkc1swXS5pdGVtc1swXS53b3JkcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiAgZ2V0X21hcmt1cF93b3Jkc19hbGwoIHNlbGYsIHRhZ19uYW1lICk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG0gPSBzZWxmLmdldF9tYXJrdXAoIHRhZ19uYW1lICkKKyAgICAgICAgICAgIHdvcmRzID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIG0uZmllbGRzWzBdLml0ZW1zOgorICAgICAgICAgICAgICAgICMgV2UgaG9ub3VyIGVtcHR5IGxpbmVzIGluIGFuIGA8T3JkZXI+JyBzZWN0aW9uIGVsZW1lbnQgYnkKKyAgICAgICAgICAgICAgICAjIGFkZGluZyB0aGUgc2VudGluZWwgYC9lbXB0eS8nLiAgVGhlIGZvcm1hdHRlciBzaG91bGQgdGhlbgorICAgICAgICAgICAgICAgICMgY29udmVydCBpdCB0byBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAjIGBzZWN0aW9uX2VudGVyJyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICB3b3JkcyArPSBpdGVtLndvcmRzCisgICAgICAgICAgICAgICAgd29yZHMuYXBwZW5kKCAiL2VtcHR5LyIgKQorICAgICAgICAgICAgcmV0dXJuIHdvcmRzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmICBnZXRfbWFya3VwX3RleHQoIHNlbGYsIHRhZ19uYW1lICk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0X21hcmt1cF93b3JkcyggdGFnX25hbWUgKQorICAgICAgICByZXR1cm4gc3RyaW5nLmpvaW4oIHJlc3VsdCApCisKKyAgICBkZWYgIGdldF9tYXJrdXBfaXRlbXMoIHNlbGYsIHRhZ19uYW1lICk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG0gPSBzZWxmLmdldF9tYXJrdXAoIHRhZ19uYW1lICkKKyAgICAgICAgICAgIHJldHVybiBtLmZpZWxkc1swXS5pdGVtcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9kb2NiZWF1dHkucHkgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY2JlYXV0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGRmNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9kb2NiZWF1dHkucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgRG9jQmVhdXR5IChjKSAyMDAzLCAyMDA0LCAyMDA4IERhdmlkIFR1cm5lciA8ZGF2aWRAZnJlZXR5cGUub3JnPgorIworIyBUaGlzIHByb2dyYW0gaXMgdXNlZCB0byBiZWF1dGlmeSB0aGUgZG9jdW1lbnRhdGlvbiBjb21tZW50cyB1c2VkCisjIGluIHRoZSBGcmVlVHlwZSAyIHB1YmxpYyBoZWFkZXJzLgorIworCitmcm9tIHNvdXJjZXMgaW1wb3J0ICoKK2Zyb20gY29udGVudCBpbXBvcnQgKgorZnJvbSB1dGlscyAgIGltcG9ydCAqCisKK2ltcG9ydCB1dGlscworCitpbXBvcnQgc3lzLCBvcywgdGltZSwgc3RyaW5nLCBnZXRvcHQKKworCitjb250ZW50X3Byb2Nlc3NvciA9IENvbnRlbnRQcm9jZXNzb3IoKQorCisKK2RlZiAgYmVhdXRpZnlfYmxvY2soIGJsb2NrICk6CisgICAgaWYgYmxvY2suY29udGVudDoKKyAgICAgICAgY29udGVudF9wcm9jZXNzb3IucmVzZXQoKQorCisgICAgICAgIG1hcmt1cHMgPSBjb250ZW50X3Byb2Nlc3Nvci5wcm9jZXNzX2NvbnRlbnQoIGJsb2NrLmNvbnRlbnQgKQorICAgICAgICB0ZXh0ICAgID0gW10KKyAgICAgICAgZmlyc3QgICA9IDEKKworICAgICAgICBmb3IgbWFya3VwIGluIG1hcmt1cHM6CisgICAgICAgICAgICB0ZXh0LmV4dGVuZCggbWFya3VwLmJlYXV0aWZ5KCBmaXJzdCApICkKKyAgICAgICAgICAgIGZpcnN0ID0gMAorCisgICAgICAgICMgbm93IGJlYXV0aWZ5IHRoZSBkb2N1bWVudGF0aW9uICJib3JkZXJzIiB0aGVtc2VsdmVzCisgICAgICAgIGxpbmVzID0gWyIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiXQorICAgICAgICBmb3IgbCBpbiB0ZXh0OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCAiICAqIiArIGwgKQorICAgICAgICBsaW5lcy5hcHBlbmQoICIgICovIiApCisKKyAgICAgICAgYmxvY2subGluZXMgPSBsaW5lcworCisKK2RlZiAgdXNhZ2UoKToKKyAgICBwcmludCAiXG5Eb2NCZWF1dHkgMC4xIFVzYWdlIGluZm9ybWF0aW9uXG4iCisgICAgcHJpbnQgIiAgZG9jYmVhdXR5IFtvcHRpb25zXSBmaWxlMSBbZmlsZTIgLi4uXVxuIgorICAgIHByaW50ICJ1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4iCisgICAgcHJpbnQgIiAgLWggOiBwcmludCB0aGlzIHBhZ2UiCisgICAgcHJpbnQgIiAgLWIgOiBiYWNrdXAgb3JpZ2luYWwgZmlsZXMgd2l0aCB0aGUgJ29yaWcnIGV4dGVuc2lvbiIKKyAgICBwcmludCAiIgorICAgIHByaW50ICIgIC0tYmFja3VwIDogc2FtZSBhcyAtYiIKKworCitkZWYgIG1haW4oIGFyZ3YgKToKKyAgICAiIiJtYWluIHByb2dyYW0gbG9vcCIiIgorCisgICAgZ2xvYmFsIG91dHB1dF9kaXIKKworICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoIHN5cy5hcmd2WzE6XSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhiIiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImhlbHAiLCAiYmFja3VwIl0gKQorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoIDIgKQorCisgICAgaWYgYXJncyA9PSBbXToKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCggMSApCisKKyAgICAjIHByb2Nlc3Mgb3B0aW9ucworICAgICMKKyAgICBvdXRwdXRfZGlyID0gTm9uZQorICAgIGRvX2JhY2t1cCAgPSBOb25lCisKKyAgICBmb3Igb3B0IGluIG9wdHM6CisgICAgICAgIGlmIG9wdFswXSBpbiAoICItaCIsICItLWhlbHAiICk6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCggMCApCisKKyAgICAgICAgaWYgb3B0WzBdIGluICggIi1iIiwgIi0tYmFja3VwIiApOgorICAgICAgICAgICAgZG9fYmFja3VwID0gMQorCisgICAgIyBjcmVhdGUgY29udGV4dCBhbmQgcHJvY2Vzc29yCisgICAgc291cmNlX3Byb2Nlc3NvciA9IFNvdXJjZVByb2Nlc3NvcigpCisKKyAgICAjIHJldHJpZXZlIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHByb2Nlc3MKKyAgICBmaWxlX2xpc3QgPSBtYWtlX2ZpbGVfbGlzdCggYXJncyApCisgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVfbGlzdDoKKyAgICAgICAgc291cmNlX3Byb2Nlc3Nvci5wYXJzZV9maWxlKCBmaWxlbmFtZSApCisKKyAgICAgICAgZm9yIGJsb2NrIGluIHNvdXJjZV9wcm9jZXNzb3IuYmxvY2tzOgorICAgICAgICAgICAgYmVhdXRpZnlfYmxvY2soIGJsb2NrICkKKworICAgICAgICBuZXdfbmFtZSA9IGZpbGVuYW1lICsgIi5uZXciCisgICAgICAgIG9rICAgICAgID0gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKCBuZXdfbmFtZSwgInd0IiApCisgICAgICAgICAgICBmb3IgYmxvY2sgaW4gc291cmNlX3Byb2Nlc3Nvci5ibG9ja3M6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gYmxvY2subGluZXM6CisgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIGxpbmUgKQorICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCAiXG4iICkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvayA9IDAKKworCisjIGlmIGNhbGxlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyMKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbiggc3lzLmFyZ3YgKQorCisKKyMgZW9mCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTgyZDkzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weQpAQCAtMCwwICsxLDExNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBkb2NtYWtlci5weQorIworIyAgICBDb252ZXJ0IHNvdXJjZSBjb2RlIG1hcmt1cCB0byBIVE1MIGRvY3VtZW50YXRpb24uCisjCisjICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjICBEYXZpZCBUdXJuZXIuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisjICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorIyAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisjICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyMgIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKworIworIyBUaGlzIHByb2dyYW0gaXMgYSByZS13cml0ZSBvZiB0aGUgb3JpZ2luYWwgRG9jTWFrZXIgdG9vbCB1c2VkIHRvIGdlbmVyYXRlCisjIHRoZSBBUEkgUmVmZXJlbmNlIG9mIHRoZSBGcmVlVHlwZSBmb250IHJlbmRlcmluZyBlbmdpbmUgYnkgY29udmVydGluZworIyBpbi1zb3VyY2UgY29tbWVudHMgaW50byBzdHJ1Y3R1cmVkIEhUTUwuCisjCisjIFRoaXMgbmV3IHZlcnNpb24gaXMgY2FwYWJsZSBvZiBvdXRwdXR0aW5nIFhNTCBkYXRhIGFzIHdlbGwgYXMgYWNjZXB0aW5nCisjIG1vcmUgbGliZXJhbCBmb3JtYXR0aW5nIG9wdGlvbnMuICBJdCBhbHNvIHVzZXMgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nCisjIGFuZCBzdWJzdGl0dXRpb24gdG8gc3BlZWQgdXAgb3BlcmF0aW9uIHNpZ25pZmljYW50bHkuCisjCisKK2Zyb20gc291cmNlcyAgIGltcG9ydCAqCitmcm9tIGNvbnRlbnQgICBpbXBvcnQgKgorZnJvbSB1dGlscyAgICAgaW1wb3J0ICoKK2Zyb20gZm9ybWF0dGVyIGltcG9ydCAqCitmcm9tIHRvaHRtbCAgICBpbXBvcnQgKgorCitpbXBvcnQgdXRpbHMKKworaW1wb3J0IHN5cywgb3MsIHRpbWUsIHN0cmluZywgZ2xvYiwgZ2V0b3B0CisKKworZGVmICB1c2FnZSgpOgorICAgIHByaW50ICJcbkRvY01ha2VyIFVzYWdlIGluZm9ybWF0aW9uXG4iCisgICAgcHJpbnQgIiAgZG9jbWFrZXIgW29wdGlvbnNdIGZpbGUxIFtmaWxlMiAuLi5dXG4iCisgICAgcHJpbnQgInVzaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiIKKyAgICBwcmludCAiICAtaCA6IHByaW50IHRoaXMgcGFnZSIKKyAgICBwcmludCAiICAtdCA6IHNldCBwcm9qZWN0IHRpdGxlLCBhcyBpbiAnLXQgXCJNeSBQcm9qZWN0XCInIgorICAgIHByaW50ICIgIC1vIDogc2V0IG91dHB1dCBkaXJlY3RvcnksIGFzIGluICctbyBteWRpciciCisgICAgcHJpbnQgIiAgLXAgOiBzZXQgZG9jdW1lbnRhdGlvbiBwcmVmaXgsIGFzIGluICctcCBmdDInIgorICAgIHByaW50ICIiCisgICAgcHJpbnQgIiAgLS10aXRsZSAgOiBzYW1lIGFzIC10LCBhcyBpbiAnLS10aXRsZT1cIk15IFByb2plY3RcIiciCisgICAgcHJpbnQgIiAgLS1vdXRwdXQgOiBzYW1lIGFzIC1vLCBhcyBpbiAnLS1vdXRwdXQ9bXlkaXInIgorICAgIHByaW50ICIgIC0tcHJlZml4IDogc2FtZSBhcyAtcCwgYXMgaW4gJy0tcHJlZml4PWZ0MiciCisKKworZGVmICBtYWluKCBhcmd2ICk6CisgICAgIiIiTWFpbiBwcm9ncmFtIGxvb3AuIiIiCisKKyAgICBnbG9iYWwgb3V0cHV0X2RpcgorCisgICAgdHJ5OgorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdCggc3lzLmFyZ3ZbMTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0Om86cDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoZWxwIiwgInRpdGxlPSIsICJvdXRwdXQ9IiwgInByZWZpeD0iXSApCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvcjoKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCggMiApCisKKyAgICBpZiBhcmdzID09IFtdOgorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KCAxICkKKworICAgICMgcHJvY2VzcyBvcHRpb25zCisgICAgcHJvamVjdF90aXRsZSAgPSAiUHJvamVjdCIKKyAgICBwcm9qZWN0X3ByZWZpeCA9IE5vbmUKKyAgICBvdXRwdXRfZGlyICAgICA9IE5vbmUKKworICAgIGZvciBvcHQgaW4gb3B0czoKKyAgICAgICAgaWYgb3B0WzBdIGluICggIi1oIiwgIi0taGVscCIgKToKKyAgICAgICAgICAgIHVzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KCAwICkKKworICAgICAgICBpZiBvcHRbMF0gaW4gKCAiLXQiLCAiLS10aXRsZSIgKToKKyAgICAgICAgICAgIHByb2plY3RfdGl0bGUgPSBvcHRbMV0KKworICAgICAgICBpZiBvcHRbMF0gaW4gKCAiLW8iLCAiLS1vdXRwdXQiICk6CisgICAgICAgICAgICB1dGlscy5vdXRwdXRfZGlyID0gb3B0WzFdCisKKyAgICAgICAgaWYgb3B0WzBdIGluICggIi1wIiwgIi0tcHJlZml4IiApOgorICAgICAgICAgICAgcHJvamVjdF9wcmVmaXggPSBvcHRbMV0KKworICAgIGNoZWNrX291dHB1dCgpCisKKyAgICAjIGNyZWF0ZSBjb250ZXh0IGFuZCBwcm9jZXNzb3IKKyAgICBzb3VyY2VfcHJvY2Vzc29yICA9IFNvdXJjZVByb2Nlc3NvcigpCisgICAgY29udGVudF9wcm9jZXNzb3IgPSBDb250ZW50UHJvY2Vzc29yKCkKKworICAgICMgcmV0cmlldmUgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcHJvY2VzcworICAgIGZpbGVfbGlzdCA9IG1ha2VfZmlsZV9saXN0KCBhcmdzICkKKyAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZV9saXN0OgorICAgICAgICBzb3VyY2VfcHJvY2Vzc29yLnBhcnNlX2ZpbGUoIGZpbGVuYW1lICkKKyAgICAgICAgY29udGVudF9wcm9jZXNzb3IucGFyc2Vfc291cmNlcyggc291cmNlX3Byb2Nlc3NvciApCisKKyAgICAjIHByb2Nlc3Mgc2VjdGlvbnMKKyAgICBjb250ZW50X3Byb2Nlc3Nvci5maW5pc2goKQorCisgICAgZm9ybWF0dGVyID0gSHRtbEZvcm1hdHRlciggY29udGVudF9wcm9jZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF90aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X3ByZWZpeCApCisKKyAgICBmb3JtYXR0ZXIudG9jX2R1bXAoKQorICAgIGZvcm1hdHRlci5pbmRleF9kdW1wKCkKKyAgICBmb3JtYXR0ZXIuc2VjdGlvbl9kdW1wX2FsbCgpCisKKworIyBpZiBjYWxsZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oIHN5cy5hcmd2ICkKKworIyBlb2YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZG9jbWFrZXIvZm9ybWF0dGVyLnB5IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9mb3JtYXR0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhODgwOAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZG9jbWFrZXIvZm9ybWF0dGVyLnB5CkBAIC0wLDAgKzEsMjIzIEBACisjCisjICBmb3JtYXR0ZXIucHkKKyMKKyMgICAgQ29udmVydCBwYXJzZWQgY29udGVudCBibG9ja3MgdG8gYSBzdHJ1Y3R1cmVkIGRvY3VtZW50IChsaWJyYXJ5IGZpbGUpLgorIworIyAgQ29weXJpZ2h0IDIwMDItMjAxNSBieQorIyAgRGF2aWQgVHVybmVyLgorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorIyAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyMgIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorIyAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisjICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisKKyMKKyMgVGhpcyBpcyB0aGUgYmFzZSBGb3JtYXR0ZXIgY2xhc3MuICBJdHMgcHVycG9zZSBpcyB0byBjb252ZXJ0IGEgY29udGVudAorIyBwcm9jZXNzb3IncyBkYXRhIGludG8gc3BlY2lmaWMgZG9jdW1lbnRzIChpLmUuLCB0YWJsZSBvZiBjb250ZW50cywgZ2xvYmFsCisjIGluZGV4LCBhbmQgaW5kaXZpZHVhbCBBUEkgcmVmZXJlbmNlIGluZGljZXMpLgorIworIyBZb3UgbmVlZCB0byBzdWItY2xhc3MgaXQgdG8gb3V0cHV0IGFueXRoaW5nIHNlbnNpYmxlLiAgRm9yIGV4YW1wbGUsIHRoZQorIyBmaWxlIGB0b2h0bWwucHknIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgSHRtbEZvcm1hdHRlcicgc3ViLWNsYXNzCisjIHRvIG91dHB1dCBIVE1MLgorIworCisKK2Zyb20gc291cmNlcyBpbXBvcnQgKgorZnJvbSBjb250ZW50IGltcG9ydCAqCitmcm9tIHV0aWxzICAgaW1wb3J0ICoKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgIEZPUk1BVFRFUiBDTEFTUworIyMKK2NsYXNzICBGb3JtYXR0ZXI6CisKKyAgICBkZWYgIF9faW5pdF9fKCBzZWxmLCBwcm9jZXNzb3IgKToKKyAgICAgICAgc2VsZi5wcm9jZXNzb3IgICA9IHByb2Nlc3NvcgorICAgICAgICBzZWxmLmlkZW50aWZpZXJzID0ge30KKyAgICAgICAgc2VsZi5jaGFwdGVycyAgICA9IHByb2Nlc3Nvci5jaGFwdGVycworICAgICAgICBzZWxmLnNlY3Rpb25zICAgID0gcHJvY2Vzc29yLnNlY3Rpb25zLnZhbHVlcygpCisgICAgICAgIHNlbGYuYmxvY2tfaW5kZXggPSBbXQorCisgICAgICAgICMgc3RvcmUgYWxsIGJsb2NrcyBpbiBhIGRpY3Rpb25hcnkKKyAgICAgICAgc2VsZi5ibG9ja3MgPSBbXQorICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgZm9yIGJsb2NrIGluIHNlY3Rpb24uYmxvY2tzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2lkZW50aWZpZXIoIGJsb2NrLm5hbWUsIGJsb2NrICkKKworICAgICAgICAgICAgICAgICMgYWRkIGVudW1lcmF0aW9uIHZhbHVlcyB0byB0aGUgaW5kZXgsIHNpbmNlIHRoaXMgaXMgdXNlZnVsCisgICAgICAgICAgICAgICAgZm9yIG1hcmt1cCBpbiBibG9jay5tYXJrdXBzOgorICAgICAgICAgICAgICAgICAgICBpZiBtYXJrdXAudGFnID09ICd2YWx1ZXMnOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIG1hcmt1cC5maWVsZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRfaWRlbnRpZmllciggZmllbGQubmFtZSwgYmxvY2sgKQorCisgICAgICAgIHNlbGYuYmxvY2tfaW5kZXggPSBzZWxmLmlkZW50aWZpZXJzLmtleXMoKQorICAgICAgICBzZWxmLmJsb2NrX2luZGV4LnNvcnQoIGtleSA9IGluZGV4X2tleSApCisKKyAgICBkZWYgIGFkZF9pZGVudGlmaWVyKCBzZWxmLCBuYW1lLCBibG9jayApOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuaWRlbnRpZmllcnM6CisgICAgICAgICAgICAjIGR1cGxpY2F0ZSBuYW1lIQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIldBUk5JTkc6IGR1cGxpY2F0ZSBkZWZpbml0aW9uIGZvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAnIiArIG5hbWUgKyAiJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJpbiAiICsgYmxvY2subG9jYXRpb24oKSArICIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInByZXZpb3VzIGRlZmluaXRpb24gaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzZWxmLmlkZW50aWZpZXJzW25hbWVdLmxvY2F0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlxuIiApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmlkZW50aWZpZXJzW25hbWVdID0gYmxvY2sKKworICAgICMKKyAgICAjIGZvcm1hdHRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzCisgICAgIworICAgIGRlZiAgdG9jX2VudGVyKCBzZWxmICk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiAgdG9jX2NoYXB0ZXJfZW50ZXIoIHNlbGYsIGNoYXB0ZXIgKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICB0b2Nfc2VjdGlvbl9lbnRlciggc2VsZiwgc2VjdGlvbiApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIHRvY19zZWN0aW9uX2V4aXQoIHNlbGYsIHNlY3Rpb24gKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICB0b2NfY2hhcHRlcl9leGl0KCBzZWxmLCBjaGFwdGVyICk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiAgdG9jX2luZGV4KCBzZWxmLCBpbmRleF9maWxlbmFtZSApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIHRvY19leGl0KCBzZWxmICk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiAgdG9jX2R1bXAoIHNlbGYsIHRvY19maWxlbmFtZSA9IE5vbmUsIGluZGV4X2ZpbGVuYW1lID0gTm9uZSApOgorICAgICAgICBvdXRwdXQgPSBOb25lCisgICAgICAgIGlmIHRvY19maWxlbmFtZToKKyAgICAgICAgICAgIG91dHB1dCA9IG9wZW5fb3V0cHV0KCB0b2NfZmlsZW5hbWUgKQorCisgICAgICAgIHNlbGYudG9jX2VudGVyKCkKKworICAgICAgICBmb3IgY2hhcCBpbiBzZWxmLnByb2Nlc3Nvci5jaGFwdGVyczoKKworICAgICAgICAgICAgc2VsZi50b2NfY2hhcHRlcl9lbnRlciggY2hhcCApCisKKyAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIGNoYXAuc2VjdGlvbnM6CisgICAgICAgICAgICAgICAgc2VsZi50b2Nfc2VjdGlvbl9lbnRlciggc2VjdGlvbiApCisgICAgICAgICAgICAgICAgc2VsZi50b2Nfc2VjdGlvbl9leGl0KCBzZWN0aW9uICkKKworICAgICAgICAgICAgc2VsZi50b2NfY2hhcHRlcl9leGl0KCBjaGFwICkKKworICAgICAgICBzZWxmLnRvY19pbmRleCggaW5kZXhfZmlsZW5hbWUgKQorCisgICAgICAgIHNlbGYudG9jX2V4aXQoKQorCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGNsb3NlX291dHB1dCggb3V0cHV0ICkKKworICAgICMKKyAgICAjIGZvcm1hdHRpbmcgdGhlIGluZGV4CisgICAgIworICAgIGRlZiAgaW5kZXhfZW50ZXIoIHNlbGYgKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICBpbmRleF9uYW1lX2VudGVyKCBzZWxmLCBuYW1lICk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiAgaW5kZXhfbmFtZV9leGl0KCBzZWxmLCBuYW1lICk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiAgaW5kZXhfZXhpdCggc2VsZiApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIGluZGV4X2R1bXAoIHNlbGYsIGluZGV4X2ZpbGVuYW1lID0gTm9uZSApOgorICAgICAgICBvdXRwdXQgPSBOb25lCisgICAgICAgIGlmIGluZGV4X2ZpbGVuYW1lOgorICAgICAgICAgICAgb3V0cHV0ID0gb3Blbl9vdXRwdXQoIGluZGV4X2ZpbGVuYW1lICkKKworICAgICAgICBzZWxmLmluZGV4X2VudGVyKCkKKworICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmJsb2NrX2luZGV4OgorICAgICAgICAgICAgc2VsZi5pbmRleF9uYW1lX2VudGVyKCBuYW1lICkKKyAgICAgICAgICAgIHNlbGYuaW5kZXhfbmFtZV9leGl0KCBuYW1lICkKKworICAgICAgICBzZWxmLmluZGV4X2V4aXQoKQorCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGNsb3NlX291dHB1dCggb3V0cHV0ICkKKworICAgICMKKyAgICAjIGZvcm1hdHRpbmcgYSBzZWN0aW9uCisgICAgIworICAgIGRlZiAgc2VjdGlvbl9lbnRlciggc2VsZiwgc2VjdGlvbiApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIGJsb2NrX2VudGVyKCBzZWxmLCBibG9jayApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIG1hcmt1cF9lbnRlciggc2VsZiwgbWFya3VwLCBibG9jayA9IE5vbmUgKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICBmaWVsZF9lbnRlciggc2VsZiwgZmllbGQsIG1hcmt1cCA9IE5vbmUsIGJsb2NrID0gTm9uZSApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIGZpZWxkX2V4aXQoIHNlbGYsIGZpZWxkLCBtYXJrdXAgPSBOb25lLCBibG9jayA9IE5vbmUgKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICBtYXJrdXBfZXhpdCggc2VsZiwgbWFya3VwLCBibG9jayA9IE5vbmUgKToKKyAgICAgICAgcGFzcworCisgICAgZGVmICBibG9ja19leGl0KCBzZWxmLCBibG9jayApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIHNlY3Rpb25fZXhpdCggc2VsZiwgc2VjdGlvbiApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgIHNlY3Rpb25fZHVtcCggc2VsZiwgc2VjdGlvbiwgc2VjdGlvbl9maWxlbmFtZSA9IE5vbmUgKToKKyAgICAgICAgb3V0cHV0ID0gTm9uZQorICAgICAgICBpZiBzZWN0aW9uX2ZpbGVuYW1lOgorICAgICAgICAgICAgb3V0cHV0ID0gb3Blbl9vdXRwdXQoIHNlY3Rpb25fZmlsZW5hbWUgKQorCisgICAgICAgIHNlbGYuc2VjdGlvbl9lbnRlciggc2VjdGlvbiApCisKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VjdGlvbi5ibG9ja19uYW1lczoKKyAgICAgICAgICAgIHNraXBfZW50cnkgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmxvY2sgPSBzZWxmLmlkZW50aWZpZXJzW25hbWVdCisgICAgICAgICAgICAgICAgIyBgYmxvY2tfbmFtZXMnIGNhbiBjb250YWluIGZpZWxkIG5hbWVzIGFsc28sCisgICAgICAgICAgICAgICAgIyB3aGljaCB3ZSBmaWx0ZXIgb3V0CisgICAgICAgICAgICAgICAgZm9yIG1hcmt1cCBpbiBibG9jay5tYXJrdXBzOgorICAgICAgICAgICAgICAgICAgICBpZiBtYXJrdXAudGFnID09ICd2YWx1ZXMnOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIG1hcmt1cC5maWVsZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGQubmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2VudHJ5ID0gMQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNraXBfZW50cnkgPSAxICAgIyB0aGlzIGhhcHBlbnMgZS5nLiBmb3IgYC9lbXB0eS8nIGVudHJpZXMKKworICAgICAgICAgICAgaWYgc2tpcF9lbnRyeToKKyAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2VsZi5ibG9ja19lbnRlciggYmxvY2sgKQorCisgICAgICAgICAgICBmb3IgbWFya3VwIGluIGJsb2NrLm1hcmt1cHNbMTpdOiAgICMgYWx3YXlzIGlnbm9yZSBmaXJzdCBtYXJrdXAhCisgICAgICAgICAgICAgICAgc2VsZi5tYXJrdXBfZW50ZXIoIG1hcmt1cCwgYmxvY2sgKQorCisgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIG1hcmt1cC5maWVsZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmllbGRfZW50ZXIoIGZpZWxkLCBtYXJrdXAsIGJsb2NrICkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWVsZF9leGl0KCBmaWVsZCwgbWFya3VwLCBibG9jayApCisKKyAgICAgICAgICAgICAgICBzZWxmLm1hcmt1cF9leGl0KCBtYXJrdXAsIGJsb2NrICkKKworICAgICAgICAgICAgc2VsZi5ibG9ja19leGl0KCBibG9jayApCisKKyAgICAgICAgc2VsZi5zZWN0aW9uX2V4aXQoIHNlY3Rpb24gKQorCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGNsb3NlX291dHB1dCggb3V0cHV0ICkKKworICAgIGRlZiAgc2VjdGlvbl9kdW1wX2FsbCggc2VsZiApOgorICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgc2VsZi5zZWN0aW9uX2R1bXAoIHNlY3Rpb24gKQorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjIxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkKQEAgLTAsMCArMSwzOTcgQEAKKyMKKyMgIHNvdXJjZXMucHkKKyMKKyMgICAgQ29udmVydCBzb3VyY2UgY29kZSBjb21tZW50cyB0byBtdWx0aS1saW5lIGJsb2NrcyAobGlicmFyeSBmaWxlKS4KKyMKKyMgIENvcHlyaWdodCAyMDAyLTIwMTUgYnkKKyMgIERhdmlkIFR1cm5lci4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyMgIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisjICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyMgIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorIyAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisjCisjIFRoaXMgbGlicmFyeSBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIGNsYXNzZXMgbmVlZGVkIHRvIGRlY29tcG9zZSBDCisjIHNvdXJjZSBjb2RlIGZpbGVzIGludG8gYSBzZXJpZXMgb2YgbXVsdGktbGluZSBgYmxvY2tzJy4gIFRoZXJlIGFyZSB0d28KKyMga2luZHMgb2YgYmxvY2tzLgorIworIyAgIC0gTm9ybWFsIGJsb2Nrcywgd2hpY2ggY29udGFpbiBzb3VyY2UgY29kZSBvciBvcmRpbmFyeSBjb21tZW50cy4KKyMKKyMgICAtIERvY3VtZW50YXRpb24gYmxvY2tzLCB3aGljaCBoYXZlIHJlc3RyaWN0ZWQgZm9ybWF0dGluZywgYW5kIHdob3NlIHRleHQKKyMgICAgIGFsd2F5cyBzdGFydCB3aXRoIGEgZG9jdW1lbnRhdGlvbiBtYXJrdXAgdGFnIGxpa2UgYDxGdW5jdGlvbj4nLAorIyAgICAgYDxUeXBlPicsIGV0Yy4KKyMKKyMgVGhlIHJvdXRpbmVzIHRvIHByb2Nlc3MgdGhlIGNvbnRlbnQgb2YgZG9jdW1lbnRhdGlvbiBibG9ja3MgYXJlIGNvbnRhaW5lZAorIyBpbiBmaWxlIGBjb250ZW50LnB5JzsgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgZm91bmQgaGVyZSBvbmx5IGRlYWwgd2l0aAorIyB0ZXh0IHBhcnNpbmcgYW5kIGJhc2ljIGRvY3VtZW50YXRpb24gYmxvY2sgZXh0cmFjdGlvbi4KKyMKKworCitpbXBvcnQgZmlsZWlucHV0LCByZSwgc3lzLCBvcywgc3RyaW5nCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjICBTT1VSQ0UgQkxPQ0sgRk9STUFUIENMQVNTCisjIworIyMgIEEgc2ltcGxlIGNsYXNzIGNvbnRhaW5pbmcgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucyB0byBkZXRlY3QKKyMjICBwb3RlbnRpYWwgZG9jdW1lbnRhdGlvbiBmb3JtYXQgYmxvY2sgY29tbWVudHMgd2l0aGluIEMgc291cmNlIGNvZGUuCisjIworIyMgIFRoZSBgY29sdW1uJyBwYXR0ZXJuIG11c3QgY29udGFpbiBhIGdyb3VwIHRvIGB1bmJveCcgdGhlIGNvbnRlbnQgb2YKKyMjICBkb2N1bWVudGF0aW9uIGNvbW1lbnQgYmxvY2tzLgorIyMKKyMjICBMYXRlciBvbiwgcGFyYWdyYXBocyBhcmUgY29udmVydGVkIHRvIGxvbmcgbGluZXMsIHdoaWNoIHNpbXBsaWZpZXMgdGhlCisjIyAgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFjdCB1cG9uIHRoZSB0ZXh0LgorIyMKK2NsYXNzICBTb3VyY2VCbG9ja0Zvcm1hdDoKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYsIGlkLCBzdGFydCwgY29sdW1uLCBlbmQgKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgYmxvY2sgcGF0dGVybiwgdXNlZCB0byByZWNvZ25pemUgc3BlY2lhbCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgIGJsb2Nrcy4iIiIKKyAgICAgICAgc2VsZi5pZCAgICAgPSBpZAorICAgICAgICBzZWxmLnN0YXJ0ICA9IHJlLmNvbXBpbGUoIHN0YXJ0LCByZS5WRVJCT1NFICkKKyAgICAgICAgc2VsZi5jb2x1bW4gPSByZS5jb21waWxlKCBjb2x1bW4sIHJlLlZFUkJPU0UgKQorICAgICAgICBzZWxmLmVuZCAgICA9IHJlLmNvbXBpbGUoIGVuZCwgcmUuVkVSQk9TRSApCisKKworIworIyBGb3JtYXQgMSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgYmxvY2tzLgorIworIyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAoYXQgbGVhc3QgMiBhc3Rlcmlza3MpCisjICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIChhdCBsZWFzdCAyIGFzdGVyaXNrcykKKyMKK3N0YXJ0ID0gcicnJworICBccyogICAgICAjIGFueSBudW1iZXIgb2Ygd2hpdGVzcGFjZQorICAvXCp7Mix9LyAjIGZvbGxvd2VkIGJ5ICcvJyBhbmQgYXQgbGVhc3QgdHdvIGFzdGVyaXNrcyB0aGVuICcvJworICBccyokICAgICAjIHByb2JhYmx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UKKycnJworCitjb2x1bW4gPSByJycnCisgIFxzKiAgICAgICMgYW55IG51bWJlciBvZiB3aGl0ZXNwYWNlCisgIC9cKnsxfSAgICMgZm9sbG93ZWQgYnkgJy8nIGFuZCBwcmVjaXNlbHkgb25lIGFzdGVyaXNrCisgIChbXipdLiopICMgZm9sbG93ZWQgYnkgYW55dGhpbmcgKGdyb3VwIDEpCisgIFwqezF9LyAgICMgZm9sbG93ZWQgYnkgb25lIGFzdGVyaXNrIGFuZCBhICcvJworICBccyokICAgICAjIHByb2JhYmx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UKKycnJworCityZV9zb3VyY2VfYmxvY2tfZm9ybWF0MSA9IFNvdXJjZUJsb2NrRm9ybWF0KCAxLCBzdGFydCwgY29sdW1uLCBzdGFydCApCisKKworIworIyBGb3JtYXQgMiBkb2N1bWVudGF0aW9uIGNvbW1lbnQgYmxvY2tzLgorIworIyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIChhdCBsZWFzdCAyIGFzdGVyaXNrcykKKyMgICAgICoKKyMgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSBhc3RlcmlzaykKKyMgICAgICoKKyMgICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSBvciBtb3JlIGFzdGVyaXNrcykKKyMKK3N0YXJ0ID0gcicnJworICBccyogICAgICMgYW55IG51bWJlciBvZiB3aGl0ZXNwYWNlCisgIC9cKnsyLH0gIyBmb2xsb3dlZCBieSAnLycgYW5kIGF0IGxlYXN0IHR3byBhc3Rlcmlza3MKKyAgXHMqJCAgICAjIHByb2JhYmx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UKKycnJworCitjb2x1bW4gPSByJycnCisgIFxzKiAgICAgICAgICAgIyBhbnkgbnVtYmVyIG9mIHdoaXRlc3BhY2UKKyAgXCp7MX0oPyFbKi9dKSAjIGZvbGxvd2VkIGJ5IHByZWNpc2VseSBvbmUgYXN0ZXJpc2sgbm90IGZvbGxvd2VkIGJ5IGAvJworICAoLiopICAgICAgICAgICMgdGhlbiBhbnl0aGluZyAoZ3JvdXAxKQorJycnCisKK2VuZCA9IHInJycKKyAgXHMqICAjIGFueSBudW1iZXIgb2Ygd2hpdGVzcGFjZQorICBcKisvICMgZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIGFzdGVyaXNrLCB0aGVuICcvJworJycnCisKK3JlX3NvdXJjZV9ibG9ja19mb3JtYXQyID0gU291cmNlQmxvY2tGb3JtYXQoIDIsIHN0YXJ0LCBjb2x1bW4sIGVuZCApCisKKworIworIyBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgZG9jdW1lbnRhdGlvbiBibG9jayBmb3JtYXRzLiAgV2UgY291bGQgYWRkIG5ldyBvbmVzCisjIHF1aXRlIGVhc2lseS4KKyMKK3JlX3NvdXJjZV9ibG9ja19mb3JtYXRzID0gW3JlX3NvdXJjZV9ibG9ja19mb3JtYXQxLCByZV9zb3VyY2VfYmxvY2tfZm9ybWF0Ml0KKworCisjCisjIFRoZSBmb2xsb3dpbmcgcmVndWxhciBleHByZXNzaW9ucyBjb3JyZXNwb25kIHRvIG1hcmt1cCB0YWdzIHdpdGhpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiBjb21tZW50IGJsb2Nrcy4gIFRoZXkgYXJlIGVxdWl2YWxlbnQgZGVzcGl0ZSB0aGVpciBkaWZmZXJlbnQKKyMgc3ludGF4LgorIworIyBBIG1hcmt1cCB0YWcgY29uc2lzdHMgb2YgbGV0dGVycyBvciBjaGFyYWN0ZXIgYC0nLCB0byBiZSBmb3VuZCBpbiBncm91cCAxLgorIworIyBOb3RpY2UgdGhhdCBhIG1hcmt1cCB0YWcgX211c3RfIGJlZ2luIGEgbmV3IHBhcmFncmFwaC4KKyMKK3JlX21hcmt1cF90YWcxID0gcmUuY29tcGlsZSggcicnJ1xzKjwoKD86XHd8LSkqKT4nJycgKSAgIyA8eHh4eD4gZm9ybWF0CityZV9tYXJrdXBfdGFnMiA9IHJlLmNvbXBpbGUoIHInJydccypAKCg/Olx3fC0pKik6JycnICkgICMgQHh4eHg6IGZvcm1hdAorCisjCisjIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtYXJrdXAgdGFncy4gIFdlIGNvdWxkIGFkZCBuZXcgb25lcyBxdWl0ZSBlYXNpbHkuCisjCityZV9tYXJrdXBfdGFncyA9IFtyZV9tYXJrdXBfdGFnMSwgcmVfbWFya3VwX3RhZzJdCisKKworIworIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBkZXRlY3QgYSBjcm9zcyByZWZlcmVuY2UsIGFmdGVyIG1hcmt1cCB0YWdzIGhhdmUKKyMgYmVlbiBzdHJpcHBlZCBvZmYuICBHcm91cCAxIGlzIHRoZSByZWZlcmVuY2UsIGdyb3VwIDIgdGhlIHJlc3Qgb2YgdGhlCisjIGxpbmUuCisjCisjIEEgY3Jvc3MgcmVmZXJlbmNlIGNvbnNpc3RzIG9mIGxldHRlcnMsIGRpZ2l0cywgb3IgY2hhcmFjdGVycyBgLScgYW5kIGBfJy4KKyMKK3JlX2Nyb3NzcmVmID0gcmUuY29tcGlsZSggcidAKCg/Olx3fC0pKikoLiopJyApICAgICMgIEBmb28KKworIworIyBUd28gcmVndWxhciBleHByZXNzaW9ucyB0byBkZXRlY3QgaXRhbGljIGFuZCBib2xkIG1hcmt1cCwgcmVzcGVjdGl2ZWx5LgorIyBHcm91cCAxIGlzIHRoZSBtYXJrdXAsIGdyb3VwIDIgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCisjCisjIE5vdGUgdGhhdCB0aGUgbWFya3VwIGlzIGxpbWl0ZWQgdG8gd29yZHMgY29uc2lzdGluZyBvZiBsZXR0ZXJzLCBkaWdpdHMsCisjIHRoZSBjaGFyYWN0ZXIgYF8nLCBvciBhbiBhcG9zdHJvcGhlIChidXQgbm90IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIpLgorIworcmVfaXRhbGljID0gcmUuY29tcGlsZSggciJfKFx3KD86XHd8JykqKV8oLiopIiApICAgICAjICBfaXRhbGljXworcmVfYm9sZCAgID0gcmUuY29tcGlsZSggciJcKihcdyg/Olx3fCcpKilcKiguKikiICkgICAjICAqYm9sZCoKKworIworIyBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb2RlIHRvIGlkZW50aWZ5IGFuIFVSTCBoYXMgYmVlbiB0YWtlbiBmcm9tCisjCisjICAgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvdHV0b3IvMjAwMi1TZXB0ZW1iZXIvMDE3MjI4Lmh0bWwKKyMKKyMgKHdpdGggc2xpZ2h0IG1vZGlmaWNhdGlvbnMpLgorIwordXJscyA9IHInKD86aHR0cHM/fHRlbG5ldHxnb3BoZXJ8ZmlsZXx3YWlzfGZ0cCknCitsdHJzID0gcidcdycKK2d1bmsgPSByJy8jfjouPys9JiVAIVwtJworcHVuYyA9IHInLjo/XC0nCithbnkgID0gIiUobHRycylzJShndW5rKXMlKHB1bmMpcyIgJSB7ICdsdHJzJyA6IGx0cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdndW5rJyA6IGd1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdW5jJyA6IHB1bmMgfQordXJsICA9IHIiIiIKKyAgICAgICAgICgKKyAgICAgICAgICAgXGIgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgYXQgd29yZCBib3VuZGFyeQorICAgICAgICAgICAlKHVybHMpcyA6ICAgICAgICAgICAgIyBuZWVkIHJlc291cmNlIGFuZCBhIGNvbG9uCisgICAgICAgICAgIFslKGFueSlzXSArPyAgICAgICAgICAjIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIG9mIGFueSB2YWxpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIsIGJ1dCBiZSBjb25zZXJ2YXRpdmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRha2Ugb25seSB3aGF0IHlvdSBuZWVkIHRvLi4uCisgICAgICAgICAgICg/PSAgICAgICAgICAgICAgICAgICAjIFtsb29rLWFoZWFkIG5vbi1jb25zdW1wdGl2ZSBhc3NlcnRpb25dCisgICAgICAgICAgICAgWyUocHVuYylzXSogICAgICAgICAjIGVpdGhlciAwIG9yIG1vcmUgcHVuY3R1YXRpb24KKyAgICAgICAgICAgICAoPzogICAgICAgICAgICAgICAgICMgW25vbi1ncm91cGluZyBwYXJlbnRoZXNlc10KKyAgICAgICAgICAgICAgIFteJShhbnkpc10gfCAkICAgICMgZm9sbG93ZWQgYnkgYSBub24tdXJsIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICApCisgICAgICAgICAgICkKKyAgICAgICAgICkKKyAgICAgICAgIiIiICUgeyd1cmxzJyA6IHVybHMsCisgICAgICAgICAgICAgICAnYW55JyAgOiBhbnksCisgICAgICAgICAgICAgICAncHVuYycgOiBwdW5jIH0KKworcmVfdXJsID0gcmUuY29tcGlsZSggdXJsLCByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FICkKKworIworIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHN0b3BzIGNvbGxlY3Rpb24gb2YgY29tbWVudHMgZm9yIHRoZSBjdXJyZW50CisjIGJsb2NrLgorIworcmVfc291cmNlX3NlcCA9IHJlLmNvbXBpbGUoIHInXHMqL1wqXHMqXCovJyApICAgIyAgLyogKi8KKworIworIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaW5kIHBvc3NpYmxlIEMgaWRlbnRpZmllcnMgd2hpbGUgb3V0cHV0dGluZworIyBzb3VyY2UgY29kZSB2ZXJiYXRpbSwgY292ZXJpbmcgdGhpbmdzIGxpa2UgYCpmb28nIG9yIGAoYmFyJy4gIEdyb3VwIDEgaXMKKyMgdGhlIHByZWZpeCwgZ3JvdXAgMiB0aGUgaWRlbnRpZmllciAtLSBzaW5jZSB3ZSBzY2FuIGxpbmVzIGZyb20gbGVmdCB0bworIyByaWdodCwgc2VxdWVudGlhbGx5IHNwbGl0dGluZyB0aGUgc291cmNlIGNvZGUgaW50byBwcmVmaXggYW5kIGlkZW50aWZpZXIKKyMgaXMgZnVsbHkgc3VmZmljaWVudCBmb3Igb3VyIHB1cnBvc2VzLgorIworcmVfc291cmNlX2Nyb3NzcmVmID0gcmUuY29tcGlsZSggcicoXFcqKShcdyopJyApCisKKyMKKyMgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgbGlzdCBvZiByZXNlcnZlZCBDIHNvdXJjZSBrZXl3b3Jkcy4KKyMKK3JlX3NvdXJjZV9rZXl3b3JkcyA9IHJlLmNvbXBpbGUoICcnJ1xcYiAoIHR5cGVkZWYgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwjaW5jbHVkZSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcI2RlZmluZSAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCN1bmRlZiAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwjaWYgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcI2lmZGVmICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCNpZm5kZWYgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwjZWxzZSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcI2VuZGlmICAgKSBcXGInJycsIHJlLlZFUkJPU0UgKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyAgU09VUkNFIEJMT0NLIENMQVNTCisjIworIyMgIFRoZXJlIGFyZSB0d28gaW1wb3J0YW50IGZpZWxkcyBpbiBhIGBTb3VyY2VCbG9jaycgb2JqZWN0LgorIyMKKyMjICAgIHNlbGYubGluZXMKKyMjICAgICAgQSBsaXN0IG9mIHRleHQgbGluZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrLgorIyMKKyMjICAgIHNlbGYuY29udGVudAorIyMgICAgICBGb3IgZG9jdW1lbnRhdGlvbiBjb21tZW50IGJsb2NrcyBvbmx5LCB0aGlzIGlzIHRoZSBibG9jayBjb250ZW50CisjIyAgICAgIHRoYXQgaGFzIGJlZW4gYHVuYm94ZWQnIGZyb20gaXRzIGRlY29yYXRpb24uICBUaGlzIGlzIGBOb25lJyBmb3IgYWxsCisjIyAgICAgIG90aGVyIGJsb2NrcyAoaS5lLiwgc291cmNlcyBvciBvcmRpbmFyeSBjb21tZW50cyB3aXRoIG5vIHN0YXJ0aW5nCisjIyAgICAgIG1hcmt1cCB0YWcpCisjIworY2xhc3MgIFNvdXJjZUJsb2NrOgorCisgICAgZGVmICBfX2luaXRfXyggc2VsZiwgcHJvY2Vzc29yLCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lcyApOgorICAgICAgICBzZWxmLnByb2Nlc3NvciA9IHByb2Nlc3NvcgorICAgICAgICBzZWxmLmZpbGVuYW1lICA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubGluZW5vICAgID0gbGluZW5vCisgICAgICAgIHNlbGYubGluZXMgICAgID0gbGluZXNbOl0KKyAgICAgICAgc2VsZi5mb3JtYXQgICAgPSBwcm9jZXNzb3IuZm9ybWF0CisgICAgICAgIHNlbGYuY29udGVudCAgID0gW10KKworICAgICAgICBpZiBzZWxmLmZvcm1hdCA9PSBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd29yZHMgPSBbXQorCisgICAgICAgICMgZXh0cmFjdCBjb21tZW50IGxpbmVzCisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBmb3IgbGluZTAgaW4gc2VsZi5saW5lczoKKyAgICAgICAgICAgIG0gPSBzZWxmLmZvcm1hdC5jb2x1bW4ubWF0Y2goIGxpbmUwICkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCBtLmdyb3VwKCAxICkgKQorCisgICAgICAgICMgbm93LCBsb29rIGZvciBhIG1hcmt1cCB0YWcKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBsID0gc3RyaW5nLnN0cmlwKCBsICkKKyAgICAgICAgICAgIGlmIGxlbiggbCApID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgdGFnIGluIHJlX21hcmt1cF90YWdzOgorICAgICAgICAgICAgICAgICAgICBpZiB0YWcubWF0Y2goIGwgKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGVudCA9IGxpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiAgbG9jYXRpb24oIHNlbGYgKToKKyAgICAgICAgcmV0dXJuICIoIiArIHNlbGYuZmlsZW5hbWUgKyAiOiIgKyByZXByKCBzZWxmLmxpbmVubyApICsgIikiCisKKyAgICAjIGRlYnVnZ2luZyBvbmx5IC0tIG5vdCB1c2VkIGluIG5vcm1hbCBvcGVyYXRpb25zCisgICAgZGVmICBkdW1wKCBzZWxmICk6CisgICAgICAgIGlmIHNlbGYuY29udGVudDoKKyAgICAgICAgICAgIHByaW50ICJ7e3tjb250ZW50IHN0YXJ0LS0tIgorICAgICAgICAgICAgZm9yIGwgaW4gc2VsZi5jb250ZW50OgorICAgICAgICAgICAgICAgIHByaW50IGwKKyAgICAgICAgICAgIHByaW50ICItLS1jb250ZW50IGVuZH19fSIKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZtdCA9ICIiCisgICAgICAgIGlmIHNlbGYuZm9ybWF0OgorICAgICAgICAgICAgZm10ID0gcmVwciggc2VsZi5mb3JtYXQuaWQgKSArICIgIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZXM6CisgICAgICAgICAgICBwcmludCBsaW5lCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjICBTT1VSQ0UgUFJPQ0VTU09SIENMQVNTCisjIworIyMgIFRoZSBgU291cmNlUHJvY2Vzc29yJyBpcyBpbiBjaGFyZ2Ugb2YgcmVhZGluZyBhIEMgc291cmNlIGZpbGUgYW5kCisjIyAgZGVjb21wb3NpbmcgaXQgaW50byBhIHNlcmllcyBvZiBkaWZmZXJlbnQgYFNvdXJjZUJsb2NrJyBvYmplY3RzLgorIyMKKyMjICBBIFNvdXJjZUJsb2NrIG9iamVjdCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGRhdGEuCisjIworIyMgICAgLSBBIGRvY3VtZW50YXRpb24gY29tbWVudCBibG9jayB1c2luZyBvbmUgb2YgdGhlIGxheW91dHMgYWJvdmUuICBJdHMKKyMjICAgICAgZXhhY3QgZm9ybWF0IHdpbGwgYmUgZGlzY3Vzc2VkIGxhdGVyLgorIyMKKyMjICAgIC0gTm9ybWFsIHNvdXJjZXMgbGluZXMsIGluY2x1ZGluZyBjb21tZW50cy4KKyMjCisjIworY2xhc3MgIFNvdXJjZVByb2Nlc3NvcjoKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYgKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIHNvdXJjZSBwcm9jZXNzb3IuIiIiCisgICAgICAgIHNlbGYuYmxvY2tzICAgPSBbXQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmZvcm1hdCAgID0gTm9uZQorICAgICAgICBzZWxmLmxpbmVzICAgID0gW10KKworICAgIGRlZiAgcmVzZXQoIHNlbGYgKToKKyAgICAgICAgIiIiUmVzZXQgYSBibG9jayBwcm9jZXNzb3IgYW5kIGNsZWFuIHVwIGFsbCBpdHMgYmxvY2tzLiIiIgorICAgICAgICBzZWxmLmJsb2NrcyA9IFtdCisgICAgICAgIHNlbGYuZm9ybWF0ID0gTm9uZQorCisgICAgZGVmICBwYXJzZV9maWxlKCBzZWxmLCBmaWxlbmFtZSApOgorICAgICAgICAiIiJQYXJzZSBhIEMgc291cmNlIGZpbGUgYW5kIGFkZCBpdHMgYmxvY2tzIHRvIHRoZSBwcm9jZXNzb3IncworICAgICAgICAgICBsaXN0LiIiIgorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKworICAgICAgICBmaWxlaW5wdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmZvcm1hdCA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lbm8gPSAwCisgICAgICAgIHNlbGYubGluZXMgID0gW10KKworICAgICAgICBmb3IgbGluZSBpbiBmaWxlaW5wdXQuaW5wdXQoIGZpbGVuYW1lICk6CisgICAgICAgICAgICAjIHN0cmlwIHRyYWlsaW5nIG5ld2xpbmVzLCBpbXBvcnRhbnQgb24gV2luZG93cyBtYWNoaW5lcyEKKyAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICdcMDEyJzoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVswOi0xXQorCisgICAgICAgICAgICBpZiBzZWxmLmZvcm1hdCA9PSBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19ub3JtYWxfbGluZSggbGluZSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZm9ybWF0LmVuZC5tYXRjaCggbGluZSApOgorICAgICAgICAgICAgICAgICAgICAjIEEgbm9ybWFsIGJsb2NrIGVuZC4gIEFkZCBpdCB0byBgbGluZXMnIGFuZCBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICAjIG5ldyBibG9jaworICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVzLmFwcGVuZCggbGluZSApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkX2Jsb2NrX2xpbmVzKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuZm9ybWF0LmNvbHVtbi5tYXRjaCggbGluZSApOgorICAgICAgICAgICAgICAgICAgICAjIEEgbm9ybWFsIGNvbHVtbiBsaW5lLiAgQWRkIGl0IHRvIGBsaW5lcycuCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZXMuYXBwZW5kKCBsaW5lICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEFuIHVuZXhwZWN0ZWQgYmxvY2sgZW5kLiAgQ3JlYXRlIGEgbmV3IGJsb2NrLCBidXQKKyAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBwcm9jZXNzIHRoZSBsaW5lLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZF9ibG9ja19saW5lcygpCisKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIHByb2Nlc3MgdGhlIGxpbmUgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX25vcm1hbF9saW5lKCBsaW5lICkKKworICAgICAgICAjIHJlY29yZCB0aGUgbGFzdCBsaW5lcworICAgICAgICBzZWxmLmFkZF9ibG9ja19saW5lcygpCisKKyAgICBkZWYgIHByb2Nlc3Nfbm9ybWFsX2xpbmUoIHNlbGYsIGxpbmUgKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIG5vcm1hbCBsaW5lIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIHRoZSBzdGFydCBvZiBhIG5ldworICAgICAgICAgICBibG9jay4iIiIKKyAgICAgICAgZm9yIGYgaW4gcmVfc291cmNlX2Jsb2NrX2Zvcm1hdHM6CisgICAgICAgICAgICBpZiBmLnN0YXJ0Lm1hdGNoKCBsaW5lICk6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRfYmxvY2tfbGluZXMoKQorICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0ID0gZgorICAgICAgICAgICAgICAgIHNlbGYubGluZW5vID0gZmlsZWlucHV0LmZpbGVsaW5lbm8oKQorCisgICAgICAgIHNlbGYubGluZXMuYXBwZW5kKCBsaW5lICkKKworICAgIGRlZiAgYWRkX2Jsb2NrX2xpbmVzKCBzZWxmICk6CisgICAgICAgICIiIkFkZCB0aGUgY3VycmVudCBhY2N1bXVsYXRlZCBsaW5lcyBhbmQgY3JlYXRlIGEgbmV3IGJsb2NrLiIiIgorICAgICAgICBpZiBzZWxmLmxpbmVzICE9IFtdOgorICAgICAgICAgICAgYmxvY2sgPSBTb3VyY2VCbG9jayggc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZXMgKQorCisgICAgICAgICAgICBzZWxmLmJsb2Nrcy5hcHBlbmQoIGJsb2NrICkKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5saW5lcyAgPSBbXQorCisgICAgIyBkZWJ1Z2dpbmcgb25seSwgbm90IHVzZWQgaW4gbm9ybWFsIG9wZXJhdGlvbnMKKyAgICBkZWYgIGR1bXAoIHNlbGYgKToKKyAgICAgICAgIiIiUHJpbnQgYWxsIGJsb2NrcyBpbiBhIHByb2Nlc3Nvci4iIiIKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6CisgICAgICAgICAgICBiLmR1bXAoKQorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZiY2YwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkKQEAgLTAsMCArMSw2NzUgQEAKKyMKKyMgIHRvaHRtbC5weQorIworIyAgICBBIHN1Yi1jbGFzcyBjb250YWluZXIgb2YgdGhlIGBGb3JtYXR0ZXInIGNsYXNzIHRvIHByb2R1Y2UgSFRNTC4KKyMKKyMgIENvcHlyaWdodCAyMDAyLTIwMTUgYnkKKyMgIERhdmlkIFR1cm5lci4KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyMgIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisjICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyMgIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorIyAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorCisjIFRoZSBwYXJlbnQgY2xhc3MgaXMgY29udGFpbmVkIGluIGZpbGUgYGZvcm1hdHRlci5weScuCisKKworZnJvbSBzb3VyY2VzIGltcG9ydCAqCitmcm9tIGNvbnRlbnQgaW1wb3J0ICoKK2Zyb20gZm9ybWF0dGVyIGltcG9ydCAqCisKK2ltcG9ydCB0aW1lCisKKworIyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgZGVmaW5lIHRoZSBIVE1MIGhlYWRlciB1c2VkIGJ5IGFsbCBnZW5lcmF0ZWQgcGFnZXMuCitodG1sX2hlYWRlcl8xID0gIiIiXAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5cCisiIiIKKworaHRtbF9oZWFkZXJfMiA9ICIiIlwKKyBBUEkgUmVmZXJlbmNlPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGE6bGluayB7IGNvbG9yOiAjMDAwMEVGOyB9CisgIGE6dmlzaXRlZCB7IGNvbG9yOiAjNTExODhFOyB9CisgIGE6aG92ZXIgeyBjb2xvcjogI0ZGMDAwMDsgfQorCisgIGJvZHkgeyBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzZXJpZjsKKyAgICAgICAgIGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKKyAgICAgICAgIHdpZHRoOiA4NyU7CisgICAgICAgICBtYXJnaW46IGF1dG87IH0KKworICBkaXYuc2VjdGlvbiB7IHdpZHRoOiA3NSU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvOyB9CisgIGRpdi5zZWN0aW9uIGhyIHsgbWFyZ2luOiA0ZXggMCAxZXggMDsgfQorICBkaXYuc2VjdGlvbiBoNCB7IGJhY2tncm91bmQtY29sb3I6ICNFRUVFRkY7CisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogb2JsaXF1ZTsKKyAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICBtYXJnaW46IDNleCAwIDEuNWV4IDklOworICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuM2V4IDAgMC4zZXggMSU7IH0KKyAgZGl2LnNlY3Rpb24gcCB7IG1hcmdpbjogMS41ZXggMCAxLjVleCAxMCU7IH0KKyAgZGl2LnNlY3Rpb24gcHJlIHsgbWFyZ2luOiAzZXggMCAzZXggOSU7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNENkU4RkY7CisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJleCAwIDJleCAxJTsgfQorICBkaXYuc2VjdGlvbiB0YWJsZS5maWVsZHMgeyB3aWR0aDogOTAlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMTAlOyB9CisgIGRpdi5zZWN0aW9uIHRhYmxlLnRvYyB7IHdpZHRoOiA5NSU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMS41ZXggMCAxLjVleCA1JTsgfQorICBkaXYudGltZXN0YW1wIHsgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiA2OSU7CisgICAgICAgICAgICAgICAgICBtYXJnaW46IDEuNWV4IDAgMS41ZXggMDsgfQorCisgIGgxIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIGgzIHsgZm9udC1zaXplOiBtZWRpdW07CisgICAgICAgbWFyZ2luOiA0ZXggMCAxLjVleCAwOyB9CisKKyAgcCB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworICBwcmUuY29sb3JlZCB7IGNvbG9yOiBibHVlOyB9CisKKyAgc3Bhbi5rZXl3b3JkIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtibHVlOyB9CisKKyAgdGFibGUuZmllbGRzIHRkLnZhbCB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMWV4IDFlbSAxZXggMDsgfQorICB0YWJsZS5maWVsZHMgdGQuZGVzYyB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMCAxZXggMWVtOyB9CisgIHRhYmxlLmZpZWxkcyB0ZC5kZXNjIHA6Zmlyc3QtY2hpbGQgeyBtYXJnaW46IDA7IH0KKyAgdGFibGUuZmllbGRzIHRkLmRlc2MgcCB7IG1hcmdpbjogMS41ZXggMCAwIDA7IH0KKyAgdGFibGUuaW5kZXggeyBtYXJnaW46IDZleCBhdXRvIDZleCBhdXRvOworICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgICAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZXg7IH0KKyAgdGFibGUuaW5kZXggdHIgeyBwYWRkaW5nOiAwOyB9CisgIHRhYmxlLmluZGV4IHRkIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5pbmRleC10b2MtbGluayB7IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDFleCAwIDFleCAwOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLmxlZnQgeyBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKyAgdGFibGUuaW5kZXgtdG9jLWxpbmsgdGQubWlkZGxlIHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDgzJTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CisgIHRhYmxlLmluZGV4LXRvYy1saW5rIHRkLnJpZ2h0IHsgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogODMlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CisgIHRhYmxlLnN5bm9wc2lzIHsgbWFyZ2luOiA2ZXggYXV0byA2ZXggYXV0bzsKKyAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICAgICAgICAgICAgICAgICBib3JkZXItc3BhY2luZzogMmVtIDAuNmV4OyB9CisgIHRhYmxlLnN5bm9wc2lzIHRyIHsgcGFkZGluZzogMDsgfQorICB0YWJsZS5zeW5vcHNpcyB0ZCB7IHBhZGRpbmc6IDA7IH0KKyAgdGFibGUudG9jIHRkLmxpbmsgeyB3aWR0aDogMzAlOworICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxZXggMWVtIDFleCAwOyB9CisgIHRhYmxlLnRvYyB0ZC5kZXNjIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFleCAwIDFleCAxZW07CisgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwOmZpcnN0LWNoaWxkIHsgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfQorICB0YWJsZS50b2MgdGQuZGVzYyBwIHsgbWFyZ2luOiAxLjVleCAwIDAgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorIiIiCisKK2h0bWxfaGVhZGVyXzNsID0gIiIiCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iXAorIiIiCisKK2h0bWxfaGVhZGVyXzNyID0gIiIiCis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9IlwKKyIiIgorCitodG1sX2hlYWRlcl80ID0gIiIiXAorIj5JbmRleDwvYT5dPC90ZD48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iXAorIiIiCisKK2h0bWxfaGVhZGVyXzV0ID0gIiIiXAorIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPlwKKyIiIgorCitodG1sX2hlYWRlcl81aSA9ICIiIlwKKyI+SW5kZXg8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorPGgxPlwKKyIiIgorCitodG1sX2hlYWRlcl82ID0gIiIiXAorIEFQSSBSZWZlcmVuY2U8L2gxPgorIiIiCisKKworIyBUaGUgSFRNTCBmb290ZXIgdXNlZCBieSBhbGwgZ2VuZXJhdGVkIHBhZ2VzLgoraHRtbF9mb290ZXIgPSAiIiJcCis8L2JvZHk+Cis8L2h0bWw+XAorIiIiCisKKyMgVGhlIGhlYWRlciBhbmQgZm9vdGVyIHVzZWQgZm9yIGVhY2ggc2VjdGlvbi4KK3NlY3Rpb25fdGl0bGVfaGVhZGVyID0gIjxoMT4iCitzZWN0aW9uX3RpdGxlX2Zvb3RlciA9ICI8L2gxPiIKKworIyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgdXNlZCBmb3IgY29kZSBzZWdtZW50cy4KK2NvZGVfaGVhZGVyID0gJzxwcmUgY2xhc3M9ImNvbG9yZWQiPicKK2NvZGVfZm9vdGVyID0gJzwvcHJlPicKKworIyBQYXJhZ3JhcGggaGVhZGVyIGFuZCBmb290ZXIuCitwYXJhX2hlYWRlciA9ICI8cD4iCitwYXJhX2Zvb3RlciA9ICI8L3A+IgorCisjIEJsb2NrIGhlYWRlciBhbmQgZm9vdGVyLgorYmxvY2tfaGVhZGVyICAgICAgICA9ICc8ZGl2IGNsYXNzPSJzZWN0aW9uIj4nCitibG9ja19mb290ZXJfc3RhcnQgID0gIiIiXAorPGhyPgorPHRhYmxlIGNsYXNzPSJpbmRleC10b2MtbGluayI+PHRyPjx0ZCBjbGFzcz0ibGVmdCI+WzxhIGhyZWY9IlwKKyIiIgorYmxvY2tfZm9vdGVyX21pZGRsZSA9ICIiIlwKKyI+SW5kZXg8L2E+XTwvdGQ+XAorPHRkIGNsYXNzPSJtaWRkbGUiPls8YSBocmVmPSIjIj5Ub3A8L2E+XTwvdGQ+XAorPHRkIGNsYXNzPSJyaWdodCI+WzxhIGhyZWY9IlwKKyIiIgorYmxvY2tfZm9vdGVyX2VuZCAgICA9ICIiIlwKKyI+VE9DPC9hPl08L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKyIiIgorCisjIERlc2NyaXB0aW9uIGhlYWRlci9mb290ZXIuCitkZXNjcmlwdGlvbl9oZWFkZXIgPSAiIgorZGVzY3JpcHRpb25fZm9vdGVyID0gIiIKKworIyBNYXJrZXIgaGVhZGVyL2ludGVyL2Zvb3RlciBjb21iaW5hdGlvbi4KK21hcmtlcl9oZWFkZXIgPSAiPGg0PiIKK21hcmtlcl9pbnRlciAgPSAiPC9oND4iCittYXJrZXJfZm9vdGVyID0gIiIKKworIyBIZWFkZXIgbG9jYXRpb24gaGVhZGVyL2Zvb3Rlci4KK2hlYWRlcl9sb2NhdGlvbl9oZWFkZXIgPSAiPHA+IgoraGVhZGVyX2xvY2F0aW9uX2Zvb3RlciA9ICI8L3A+IgorCisjIFNvdXJjZSBjb2RlIGV4dHJhY3RzIGhlYWRlci9mb290ZXIuCitzb3VyY2VfaGVhZGVyID0gIjxwcmU+Igorc291cmNlX2Zvb3RlciA9ICI8L3ByZT4iCisKKyMgQ2hhcHRlciBoZWFkZXIvaW50ZXIvZm9vdGVyLgorY2hhcHRlcl9oZWFkZXIgPSAiIiJcCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5cCisiIiIKK2NoYXB0ZXJfaW50ZXIgID0gJzwvaDI+JworY2hhcHRlcl9mb290ZXIgPSAnPC9kaXY+JworCisjIEluZGV4IGZvb3Rlci4KK2luZGV4X2Zvb3Rlcl9zdGFydCA9ICIiIlwKKzxocj4KKzx0YWJsZSBjbGFzcz0iaW5kZXgtdG9jLWxpbmsiPjx0cj48dGQgY2xhc3M9InJpZ2h0Ij5bPGEgaHJlZj0iXAorIiIiCitpbmRleF9mb290ZXJfZW5kID0gIiIiXAorIj5UT0M8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorIiIiCisKKyMgVE9DIGZvb3Rlci4KK3RvY19mb290ZXJfc3RhcnQgPSAiIiJcCis8aHI+Cis8dGFibGUgY2xhc3M9ImluZGV4LXRvYy1saW5rIj48dHI+PHRkIGNsYXNzPSJsZWZ0Ij5bPGEgaHJlZj0iXAorIiIiCit0b2NfZm9vdGVyX2VuZCA9ICIiIlwKKyI+SW5kZXg8L2E+XTwvdGQ+PC90cj48L3RhYmxlPgorIiIiCisKKworIyBTb3VyY2UgbGFuZ3VhZ2Uga2V5d29yZCBjb2xvcmF0aW9uIGFuZCBzdHlsaW5nLgora2V5d29yZF9wcmVmaXggPSAnPHNwYW4gY2xhc3M9ImtleXdvcmQiPicKK2tleXdvcmRfc3VmZml4ID0gJzwvc3Bhbj4nCisKK3NlY3Rpb25fc3lub3BzaXNfaGVhZGVyID0gJzxoMj5TeW5vcHNpczwvaDI+Jworc2VjdGlvbl9zeW5vcHNpc19mb290ZXIgPSAnJworCisKKyMgVHJhbnNsYXRlIGEgc2luZ2xlIGxpbmUgb2Ygc291cmNlIHRvIEhUTUwuICBUaGlzIGNvbnZlcnRzIGA8JywgYD4nLCBhbmQKKyMgYCYnIGludG8gYCZsdDsnLGAmZ3Q7JywgYW5kIGAmYW1wOycuCisjCitkZWYgIGh0bWxfcXVvdGUoIGxpbmUgKToKKyAgICByZXN1bHQgPSBzdHJpbmcucmVwbGFjZSggbGluZSwgICAiJiIsICImYW1wOyIgKQorICAgIHJlc3VsdCA9IHN0cmluZy5yZXBsYWNlKCByZXN1bHQsICI8IiwgIiZsdDsiICApCisgICAgcmVzdWx0ID0gc3RyaW5nLnJlcGxhY2UoIHJlc3VsdCwgIj4iLCAiJmd0OyIgICkKKyAgICByZXR1cm4gcmVzdWx0CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjICBIVE1MIEZPUk1BVFRFUiBDTEFTUworIyMKK2NsYXNzICBIdG1sRm9ybWF0dGVyKCBGb3JtYXR0ZXIgKToKKworICAgIGRlZiAgX19pbml0X18oIHNlbGYsIHByb2Nlc3NvciwgcHJvamVjdF90aXRsZSwgZmlsZV9wcmVmaXggKToKKyAgICAgICAgRm9ybWF0dGVyLl9faW5pdF9fKCBzZWxmLCBwcm9jZXNzb3IgKQorCisgICAgICAgIGdsb2JhbCBodG1sX2hlYWRlcl8xCisgICAgICAgIGdsb2JhbCBodG1sX2hlYWRlcl8yCisgICAgICAgIGdsb2JhbCBodG1sX2hlYWRlcl8zbCwgaHRtbF9oZWFkZXJfM3IKKyAgICAgICAgZ2xvYmFsIGh0bWxfaGVhZGVyXzQKKyAgICAgICAgZ2xvYmFsIGh0bWxfaGVhZGVyXzV0LCBodG1sX2hlYWRlcl81aQorICAgICAgICBnbG9iYWwgaHRtbF9oZWFkZXJfNgorICAgICAgICBnbG9iYWwgaHRtbF9mb290ZXIKKworICAgICAgICBpZiBmaWxlX3ByZWZpeDoKKyAgICAgICAgICAgIGZpbGVfcHJlZml4ID0gZmlsZV9wcmVmaXggKyAiLSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVfcHJlZml4ID0gIiIKKworICAgICAgICBzZWxmLmhlYWRlcnMgICAgICAgPSBwcm9jZXNzb3IuaGVhZGVycworICAgICAgICBzZWxmLnByb2plY3RfdGl0bGUgPSBwcm9qZWN0X3RpdGxlCisgICAgICAgIHNlbGYuZmlsZV9wcmVmaXggICA9IGZpbGVfcHJlZml4CisgICAgICAgIHNlbGYuaHRtbF9oZWFkZXIgICA9ICgKKyAgICAgICAgICBodG1sX2hlYWRlcl8xICsgcHJvamVjdF90aXRsZQorICAgICAgICAgICsgaHRtbF9oZWFkZXJfMgorICAgICAgICAgICsgaHRtbF9oZWFkZXJfM2wgKyBmaWxlX3ByZWZpeCArICJpbmRleC5odG1sIgorICAgICAgICAgICsgaHRtbF9oZWFkZXJfNCArIGZpbGVfcHJlZml4ICsgInRvYy5odG1sIgorICAgICAgICAgICsgaHRtbF9oZWFkZXJfNXQgKyBwcm9qZWN0X3RpdGxlCisgICAgICAgICAgKyBodG1sX2hlYWRlcl82ICkKKyAgICAgICAgc2VsZi5odG1sX2luZGV4X2hlYWRlciA9ICgKKyAgICAgICAgICBodG1sX2hlYWRlcl8xICsgcHJvamVjdF90aXRsZQorICAgICAgICAgICsgaHRtbF9oZWFkZXJfMgorICAgICAgICAgICsgaHRtbF9oZWFkZXJfM3IgKyBmaWxlX3ByZWZpeCArICJ0b2MuaHRtbCIKKyAgICAgICAgICArIGh0bWxfaGVhZGVyXzV0ICsgcHJvamVjdF90aXRsZQorICAgICAgICAgICsgaHRtbF9oZWFkZXJfNiApCisgICAgICAgIHNlbGYuaHRtbF90b2NfaGVhZGVyID0gKAorICAgICAgICAgIGh0bWxfaGVhZGVyXzEgKyBwcm9qZWN0X3RpdGxlCisgICAgICAgICAgKyBodG1sX2hlYWRlcl8yCisgICAgICAgICAgKyBodG1sX2hlYWRlcl8zbCArIGZpbGVfcHJlZml4ICsgImluZGV4Lmh0bWwiCisgICAgICAgICAgKyBodG1sX2hlYWRlcl81aSArIHByb2plY3RfdGl0bGUKKyAgICAgICAgICArIGh0bWxfaGVhZGVyXzYgKQorICAgICAgICBzZWxmLmh0bWxfZm9vdGVyID0gKAorICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0aW1lc3RhbXAiPmdlbmVyYXRlZCBvbiAnCisgICAgICAgICAgKyB0aW1lLmFzY3RpbWUoIHRpbWUubG9jYWx0aW1lKCB0aW1lLnRpbWUoKSApICkKKyAgICAgICAgICArICI8L2Rpdj4iICsgaHRtbF9mb290ZXIgKQorCisgICAgICAgIHNlbGYuY29sdW1ucyA9IDMKKworICAgIGRlZiAgbWFrZV9zZWN0aW9uX3VybCggc2VsZiwgc2VjdGlvbiApOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlX3ByZWZpeCArIHNlY3Rpb24ubmFtZSArICIuaHRtbCIKKworICAgIGRlZiAgbWFrZV9ibG9ja191cmwoIHNlbGYsIGJsb2NrLCBuYW1lID0gTm9uZSApOgorICAgICAgICBpZiBuYW1lID09IE5vbmU6CisgICAgICAgICAgICBuYW1lID0gYmxvY2submFtZQorICAgICAgICByZXR1cm4gc2VsZi5tYWtlX3NlY3Rpb25fdXJsKCBibG9jay5zZWN0aW9uICkgKyAiIyIgKyBuYW1lCisKKyAgICBkZWYgIG1ha2VfaHRtbF93b3JkKCBzZWxmLCB3b3JkICk6CisgICAgICAgICIiIkFuYWx5emUgYSBzaW1wbGUgd29yZCB0byBkZXRlY3QgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgbWFya3VwLiIiIgorICAgICAgICAjIGhhbmRsZSBjcm9zcy1yZWZlcmVuY2VzCisgICAgICAgIG0gPSByZV9jcm9zc3JlZi5tYXRjaCggd29yZCApCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoIDEgKQorICAgICAgICAgICAgICAgIHJlc3QgPSBtLmdyb3VwKCAyICkKKyAgICAgICAgICAgICAgICBibG9jayA9IHNlbGYuaWRlbnRpZmllcnNbbmFtZV0KKyAgICAgICAgICAgICAgICB1cmwgICA9IHNlbGYubWFrZV9ibG9ja191cmwoIGJsb2NrICkKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9IicgKyB1cmwgKyAnIj4nICsgbmFtZSArICc8L2E+JyArIHJlc3QKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIHdlIGRldGVjdGVkIGEgY3Jvc3MtcmVmZXJlbmNlIHRvIGFuIHVua25vd24gaXRlbQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJXQVJOSU5HOiB1bmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAnIiArIG5hbWUgKyAiJy5cbiIgKQorICAgICAgICAgICAgICAgIHJldHVybiAnPycgKyBuYW1lICsgJz8nICsgcmVzdAorCisgICAgICAgICMgaGFuZGxlIG1hcmt1cCBmb3IgaXRhbGljIGFuZCBib2xkCisgICAgICAgIG0gPSByZV9pdGFsaWMubWF0Y2goIHdvcmQgKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoIDEgKQorICAgICAgICAgICAgcmVzdCA9IG0uZ3JvdXAoIDIgKQorICAgICAgICAgICAgcmV0dXJuICc8aT4nICsgbmFtZSArICc8L2k+JyArIHJlc3QKKworICAgICAgICBtID0gcmVfYm9sZC5tYXRjaCggd29yZCApCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBuYW1lID0gbS5ncm91cCggMSApCisgICAgICAgICAgICByZXN0ID0gbS5ncm91cCggMiApCisgICAgICAgICAgICByZXR1cm4gJzxiPicgKyBuYW1lICsgJzwvYj4nICsgcmVzdAorCisgICAgICAgIHJldHVybiBodG1sX3F1b3RlKCB3b3JkICkKKworICAgIGRlZiAgbWFrZV9odG1sX3BhcmEoIHNlbGYsIHdvcmRzICk6CisgICAgICAgICIiIkNvbnZlcnQgd29yZHMgb2YgYSBwYXJhZ3JhcGggaW50byB0YWdnZWQgSFRNTCB0ZXh0LiAgQWxzbyBoYW5kbGUKKyAgICAgICAgICAgY3Jvc3MgcmVmZXJlbmNlcy4iIiIKKyAgICAgICAgbGluZSA9ICIiCisgICAgICAgIGlmIHdvcmRzOgorICAgICAgICAgICAgbGluZSA9IHNlbGYubWFrZV9odG1sX3dvcmQoIHdvcmRzWzBdICkKKyAgICAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzWzE6XToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICIgIiArIHNlbGYubWFrZV9odG1sX3dvcmQoIHdvcmQgKQorICAgICAgICAgICAgIyBoYW5kbGUgaHlwZXJsaW5rcworICAgICAgICAgICAgbGluZSA9IHJlX3VybC5zdWIoIHInPGEgaHJlZj0iXDEiPlwxPC9hPicsIGxpbmUgKQorICAgICAgICAgICAgIyBjb252ZXJ0IGAuLi4nIHF1b3RhdGlvbnMgaW50byByZWFsIGxlZnQgYW5kIHJpZ2h0IHNpbmdsZSBxdW90ZXMKKyAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIHIiKF58XFcpYCguKj8pJyhcV3wkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJmxzcXVvO1wyJnJzcXVvO1wzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgKQorICAgICAgICAgICAgIyBjb252ZXJ0IHRpbGRlIGludG8gbm9uLWJyZWFrYWJsZSBzcGFjZQorICAgICAgICAgICAgbGluZSA9IHN0cmluZy5yZXBsYWNlKCBsaW5lLCAifiIsICImbmJzcDsiICkKKworICAgICAgICByZXR1cm4gcGFyYV9oZWFkZXIgKyBsaW5lICsgcGFyYV9mb290ZXIKKworICAgIGRlZiAgbWFrZV9odG1sX2NvZGUoIHNlbGYsIGxpbmVzICk6CisgICAgICAgICIiIkNvbnZlcnQgYSBjb2RlIHNlcXVlbmNlIHRvIEhUTUwuIiIiCisgICAgICAgIGxpbmUgPSBjb2RlX2hlYWRlciArICdcbicKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBsaW5lID0gbGluZSArIGh0bWxfcXVvdGUoIGwgKSArICdcbicKKworICAgICAgICByZXR1cm4gbGluZSArIGNvZGVfZm9vdGVyCisKKyAgICBkZWYgIG1ha2VfaHRtbF9pdGVtcyggc2VsZiwgaXRlbXMgKToKKyAgICAgICAgIiIiQ29udmVydCBhIGZpZWxkJ3MgY29udGVudCBpbnRvIEhUTUwuIiIiCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBpdGVtLmxpbmVzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCggc2VsZi5tYWtlX2h0bWxfY29kZSggaXRlbS5saW5lcyApICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCBzZWxmLm1ha2VfaHRtbF9wYXJhKCBpdGVtLndvcmRzICkgKQorCisgICAgICAgIHJldHVybiBzdHJpbmcuam9pbiggbGluZXMsICdcbicgKQorCisgICAgZGVmICBwcmludF9odG1sX2l0ZW1zKCBzZWxmLCBpdGVtcyApOgorICAgICAgICBwcmludCBzZWxmLm1ha2VfaHRtbF9pdGVtcyggaXRlbXMgKQorCisgICAgZGVmICBwcmludF9odG1sX2ZpZWxkKCBzZWxmLCBmaWVsZCApOgorICAgICAgICBpZiBmaWVsZC5uYW1lOgorICAgICAgICAgICAgcHJpbnQoICc8dGFibGU+PHRyIHZhbGlnbj0idG9wIj48dGQ+PGI+JworICAgICAgICAgICAgICAgICAgICsgZmllbGQubmFtZQorICAgICAgICAgICAgICAgICAgICsgIjwvYj48L3RkPjx0ZD4iICkKKworICAgICAgICBwcmludCBzZWxmLm1ha2VfaHRtbF9pdGVtcyggZmllbGQuaXRlbXMgKQorCisgICAgICAgIGlmIGZpZWxkLm5hbWU6CisgICAgICAgICAgICBwcmludCAiPC90ZD48L3RyPjwvdGFibGU+IgorCisgICAgZGVmICBodG1sX3NvdXJjZV9xdW90ZSggc2VsZiwgbGluZSwgYmxvY2tfbmFtZSA9IE5vbmUgKToKKyAgICAgICAgcmVzdWx0ID0gIiIKKyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIG0gPSByZV9zb3VyY2VfY3Jvc3NyZWYubWF0Y2goIGxpbmUgKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBuYW1lICAgPSBtLmdyb3VwKCAyICkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBodG1sX3F1b3RlKCBtLmdyb3VwKCAxICkgKQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbiggbS5ncm91cCggMCApICkKKworICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gYmxvY2tfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBjdXJyZW50IGJsb2NrIG5hbWUsIGlmIGFueQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBwcmVmaXggKyAnPGI+JyArIG5hbWUgKyAnPC9iPicKKyAgICAgICAgICAgICAgICBlbGlmIHJlX3NvdXJjZV9rZXl3b3Jkcy5tYXRjaCggbmFtZSApOgorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSBDIGtleXdvcmQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gKCByZXN1bHQgKyBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtleXdvcmRfcHJlZml4ICsgbmFtZSArIGtleXdvcmRfc3VmZml4ICkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5pZGVudGlmaWVyczoKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGEga25vd24gaWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICBibG9jayA9IHNlbGYuaWRlbnRpZmllcnNbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgaWQgPSBibG9jay5uYW1lCisKKyAgICAgICAgICAgICAgICAgICAgIyBsaW5rIHRvIGEgZmllbGQgSUQgaWYgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1hcmt1cCBpbiBibG9jay5tYXJrdXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFya3VwLnRhZyA9PSAndmFsdWVzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmllbGQgaW4gbWFya3VwLmZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGQubmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbmFtZQorCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICggcmVzdWx0ICsgcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnPGEgaHJlZj0iJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2VsZi5tYWtlX2Jsb2NrX3VybCggYmxvY2ssIGlkICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICciPicgKyBuYW1lICsgJzwvYT4nICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBodG1sX3F1b3RlKCBsaW5lWzpsZW5ndGhdICkKKworICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbmd0aDpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGh0bWxfcXVvdGUoIGxpbmUgKQorICAgICAgICAgICAgICAgIGxpbmUgICA9IFtdCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmICBwcmludF9odG1sX2ZpZWxkX2xpc3QoIHNlbGYsIGZpZWxkcyApOgorICAgICAgICBwcmludCAnPHRhYmxlIGNsYXNzPSJmaWVsZHMiPicKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIHByaW50ICggJzx0cj48dGQgY2xhc3M9InZhbCIgaWQ9IicgKyBmaWVsZC5uYW1lICsgJyI+JworICAgICAgICAgICAgICAgICAgICArIGZpZWxkLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9ImRlc2MiPicgKQorICAgICAgICAgICAgc2VsZi5wcmludF9odG1sX2l0ZW1zKCBmaWVsZC5pdGVtcyApCisgICAgICAgICAgICBwcmludCAiPC90ZD48L3RyPiIKKyAgICAgICAgcHJpbnQgIjwvdGFibGU+IgorCisgICAgZGVmICBwcmludF9odG1sX21hcmt1cCggc2VsZiwgbWFya3VwICk6CisgICAgICAgIHRhYmxlX2ZpZWxkcyA9IFtdCisgICAgICAgIGZvciBmaWVsZCBpbiBtYXJrdXAuZmllbGRzOgorICAgICAgICAgICAgaWYgZmllbGQubmFtZToKKyAgICAgICAgICAgICAgICAjIFdlIGJlZ2luIGEgbmV3IHNlcmllcyBvZiBmaWVsZCBvciB2YWx1ZSBkZWZpbml0aW9ucy4gIFdlCisgICAgICAgICAgICAgICAgIyByZWNvcmQgdGhlbSBpbiB0aGUgYHRhYmxlX2ZpZWxkcycgbGlzdCBiZWZvcmUgb3V0cHV0dGluZworICAgICAgICAgICAgICAgICMgYWxsIG9mIHRoZW0gYXMgYSBzaW5nbGUgdGFibGUuCisgICAgICAgICAgICAgICAgdGFibGVfZmllbGRzLmFwcGVuZCggZmllbGQgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB0YWJsZV9maWVsZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfaHRtbF9maWVsZF9saXN0KCB0YWJsZV9maWVsZHMgKQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9maWVsZHMgPSBbXQorCisgICAgICAgICAgICAgICAgc2VsZi5wcmludF9odG1sX2l0ZW1zKCBmaWVsZC5pdGVtcyApCisKKyAgICAgICAgaWYgdGFibGVfZmllbGRzOgorICAgICAgICAgICAgc2VsZi5wcmludF9odG1sX2ZpZWxkX2xpc3QoIHRhYmxlX2ZpZWxkcyApCisKKyAgICAjCisgICAgIyBmb3JtYXR0aW5nIHRoZSBpbmRleAorICAgICMKKyAgICBkZWYgIGluZGV4X2VudGVyKCBzZWxmICk6CisgICAgICAgIHByaW50IHNlbGYuaHRtbF9pbmRleF9oZWFkZXIKKyAgICAgICAgc2VsZi5pbmRleF9pdGVtcyA9IHt9CisKKyAgICBkZWYgIGluZGV4X25hbWVfZW50ZXIoIHNlbGYsIG5hbWUgKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLmlkZW50aWZpZXJzW25hbWVdCisgICAgICAgIHVybCAgID0gc2VsZi5tYWtlX2Jsb2NrX3VybCggYmxvY2sgKQorICAgICAgICBzZWxmLmluZGV4X2l0ZW1zW25hbWVdID0gdXJsCisKKyAgICBkZWYgIGluZGV4X2V4aXQoIHNlbGYgKToKKyAgICAgICAgIyBgYmxvY2tfaW5kZXgnIGFscmVhZHkgY29udGFpbnMgdGhlIHNvcnRlZCBsaXN0IG9mIGluZGV4IG5hbWVzCisgICAgICAgIGNvdW50ID0gbGVuKCBzZWxmLmJsb2NrX2luZGV4ICkKKyAgICAgICAgcm93cyAgPSAoIGNvdW50ICsgc2VsZi5jb2x1bW5zIC0gMSApIC8vIHNlbGYuY29sdW1ucworCisgICAgICAgIHByaW50ICc8dGFibGUgY2xhc3M9ImluZGV4Ij4nCisgICAgICAgIGZvciByIGluIHJhbmdlKCByb3dzICk6CisgICAgICAgICAgICBsaW5lID0gIjx0cj4iCisgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSggc2VsZi5jb2x1bW5zICk6CisgICAgICAgICAgICAgICAgaSA9IHIgKyBjICogcm93cworICAgICAgICAgICAgICAgIGlmIGkgPCBjb3VudDoKKyAgICAgICAgICAgICAgICAgICAgYm5hbWUgPSBzZWxmLmJsb2NrX2luZGV4W3IgKyBjICogcm93c10KKyAgICAgICAgICAgICAgICAgICAgdXJsICAgPSBzZWxmLmluZGV4X2l0ZW1zW2JuYW1lXQorICAgICAgICAgICAgICAgICAgICBsaW5lICA9ICggbGluZSArICc8dGQ+PGEgaHJlZj0iJyArIHVybCArICciPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYm5hbWUgKyAnPC9hPjwvdGQ+JyApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnPHRkPjwvdGQ+JworICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAiPC90cj4iCisgICAgICAgICAgICBwcmludCBsaW5lCisKKyAgICAgICAgcHJpbnQgIjwvdGFibGU+IgorCisgICAgICAgIHByaW50KCBpbmRleF9mb290ZXJfc3RhcnQKKyAgICAgICAgICAgICAgICsgc2VsZi5maWxlX3ByZWZpeCArICJ0b2MuaHRtbCIKKyAgICAgICAgICAgICAgICsgaW5kZXhfZm9vdGVyX2VuZCApCisKKyAgICAgICAgcHJpbnQgc2VsZi5odG1sX2Zvb3RlcgorCisgICAgICAgIHNlbGYuaW5kZXhfaXRlbXMgPSB7fQorCisgICAgZGVmICBpbmRleF9kdW1wKCBzZWxmLCBpbmRleF9maWxlbmFtZSA9IE5vbmUgKToKKyAgICAgICAgaWYgaW5kZXhfZmlsZW5hbWUgPT0gTm9uZToKKyAgICAgICAgICAgIGluZGV4X2ZpbGVuYW1lID0gc2VsZi5maWxlX3ByZWZpeCArICJpbmRleC5odG1sIgorCisgICAgICAgIEZvcm1hdHRlci5pbmRleF9kdW1wKCBzZWxmLCBpbmRleF9maWxlbmFtZSApCisKKyAgICAjCisgICAgIyBmb3JtYXR0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cworICAgICMKKyAgICBkZWYgIHRvY19lbnRlciggc2VsZiApOgorICAgICAgICBwcmludCBzZWxmLmh0bWxfdG9jX2hlYWRlcgorICAgICAgICBwcmludCAiPGgxPlRhYmxlIG9mIENvbnRlbnRzPC9oMT4iCisKKyAgICBkZWYgIHRvY19jaGFwdGVyX2VudGVyKCBzZWxmLCBjaGFwdGVyICk6CisgICAgICAgIHByaW50IGNoYXB0ZXJfaGVhZGVyICsgc3RyaW5nLmpvaW4oIGNoYXB0ZXIudGl0bGUgKSArIGNoYXB0ZXJfaW50ZXIKKyAgICAgICAgcHJpbnQgJzx0YWJsZSBjbGFzcz0idG9jIj4nCisKKyAgICBkZWYgIHRvY19zZWN0aW9uX2VudGVyKCBzZWxmLCBzZWN0aW9uICk6CisgICAgICAgIHByaW50ICggJzx0cj48dGQgY2xhc3M9ImxpbmsiPicKKyAgICAgICAgICAgICAgICArICc8YSBocmVmPSInICsgc2VsZi5tYWtlX3NlY3Rpb25fdXJsKCBzZWN0aW9uICkgKyAnIj4nCisgICAgICAgICAgICAgICAgKyBzZWN0aW9uLnRpdGxlICsgJzwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+JyApCisgICAgICAgIHByaW50IHNlbGYubWFrZV9odG1sX3BhcmEoIHNlY3Rpb24uYWJzdHJhY3QgKQorCisgICAgZGVmICB0b2Nfc2VjdGlvbl9leGl0KCBzZWxmLCBzZWN0aW9uICk6CisgICAgICAgIHByaW50ICI8L3RkPjwvdHI+IgorCisgICAgZGVmICB0b2NfY2hhcHRlcl9leGl0KCBzZWxmLCBjaGFwdGVyICk6CisgICAgICAgIHByaW50ICI8L3RhYmxlPiIKKyAgICAgICAgcHJpbnQgY2hhcHRlcl9mb290ZXIKKworICAgIGRlZiAgdG9jX2luZGV4KCBzZWxmLCBpbmRleF9maWxlbmFtZSApOgorICAgICAgICBwcmludCggY2hhcHRlcl9oZWFkZXIKKyAgICAgICAgICAgICAgICsgJzxhIGhyZWY9IicgKyBpbmRleF9maWxlbmFtZSArICciPkdsb2JhbCBJbmRleDwvYT4nCisgICAgICAgICAgICAgICArIGNoYXB0ZXJfaW50ZXIgKyBjaGFwdGVyX2Zvb3RlciApCisKKyAgICBkZWYgIHRvY19leGl0KCBzZWxmICk6CisgICAgICAgIHByaW50KCB0b2NfZm9vdGVyX3N0YXJ0CisgICAgICAgICAgICAgICArIHNlbGYuZmlsZV9wcmVmaXggKyAiaW5kZXguaHRtbCIKKyAgICAgICAgICAgICAgICsgdG9jX2Zvb3Rlcl9lbmQgKQorCisgICAgICAgIHByaW50IHNlbGYuaHRtbF9mb290ZXIKKworICAgIGRlZiAgdG9jX2R1bXAoIHNlbGYsIHRvY19maWxlbmFtZSA9IE5vbmUsIGluZGV4X2ZpbGVuYW1lID0gTm9uZSApOgorICAgICAgICBpZiB0b2NfZmlsZW5hbWUgPT0gTm9uZToKKyAgICAgICAgICAgIHRvY19maWxlbmFtZSA9IHNlbGYuZmlsZV9wcmVmaXggKyAidG9jLmh0bWwiCisKKyAgICAgICAgaWYgaW5kZXhfZmlsZW5hbWUgPT0gTm9uZToKKyAgICAgICAgICAgIGluZGV4X2ZpbGVuYW1lID0gc2VsZi5maWxlX3ByZWZpeCArICJpbmRleC5odG1sIgorCisgICAgICAgIEZvcm1hdHRlci50b2NfZHVtcCggc2VsZiwgdG9jX2ZpbGVuYW1lLCBpbmRleF9maWxlbmFtZSApCisKKyAgICAjCisgICAgIyBmb3JtYXR0aW5nIHNlY3Rpb25zCisgICAgIworICAgIGRlZiAgc2VjdGlvbl9lbnRlciggc2VsZiwgc2VjdGlvbiApOgorICAgICAgICBwcmludCBzZWxmLmh0bWxfaGVhZGVyCisKKyAgICAgICAgcHJpbnQgc2VjdGlvbl90aXRsZV9oZWFkZXIgKyBzZWN0aW9uLnRpdGxlICsgc2VjdGlvbl90aXRsZV9mb290ZXIKKworICAgICAgICBtYXh3aWR0aCA9IDAKKyAgICAgICAgZm9yIGIgaW4gc2VjdGlvbi5ibG9ja3MudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBsZW4oIGIubmFtZSApID4gbWF4d2lkdGg6CisgICAgICAgICAgICAgICAgbWF4d2lkdGggPSBsZW4oIGIubmFtZSApCisKKyAgICAgICAgd2lkdGggPSA3MCAgIyBYWFggbWFnaWMgbnVtYmVyCisgICAgICAgIGlmIG1heHdpZHRoID4gMDoKKyAgICAgICAgICAgICMgcHJpbnQgc2VjdGlvbiBzeW5vcHNpcworICAgICAgICAgICAgcHJpbnQgc2VjdGlvbl9zeW5vcHNpc19oZWFkZXIKKyAgICAgICAgICAgIHByaW50ICc8dGFibGUgY2xhc3M9InN5bm9wc2lzIj4nCisKKyAgICAgICAgICAgIGNvbHVtbnMgPSB3aWR0aCAvLyBtYXh3aWR0aAorICAgICAgICAgICAgaWYgY29sdW1ucyA8IDE6CisgICAgICAgICAgICAgICAgY29sdW1ucyA9IDEKKworICAgICAgICAgICAgY291bnQgPSBsZW4oIHNlY3Rpb24uYmxvY2tfbmFtZXMgKQorICAgICAgICAgICAgIyBkb24ndCBoYW5kbGUgbGFzdCBlbnRyeSBpZiBpdCBpcyBlbXB0eQorICAgICAgICAgICAgaWYgc2VjdGlvbi5ibG9ja19uYW1lc1stMV0gPT0gIi9lbXB0eS8iOgorICAgICAgICAgICAgICAgIGNvdW50IC09IDEKKyAgICAgICAgICAgIHJvd3MgID0gKCBjb3VudCArIGNvbHVtbnMgLSAxICkgLy8gY29sdW1ucworCisgICAgICAgICAgICBmb3IgciBpbiByYW5nZSggcm93cyApOgorICAgICAgICAgICAgICAgIGxpbmUgPSAiPHRyPiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSggY29sdW1ucyApOgorICAgICAgICAgICAgICAgICAgICBpID0gciArIGMgKiByb3dzCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJzx0ZD4nCisgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBjb3VudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZWN0aW9uLmJsb2NrX25hbWVzW2ldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICIvZW1wdHkvIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGl0IGNhbiBoYXBwZW4gdGhhdCBhIGNvbXBsZXRlIHJvdyBpcyBlbXB0eSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRob3V0IGEgcHJvcGVyIGBmaWxsZXInIHRoZSBicm93c2VyIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2xsYXBzZSB0aGUgcm93IHRvIGEgbXVjaCBzbWFsbGVyIGhlaWdodCAob3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV2ZW4gb21pdCBpdCBjb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgIiZuYnNwOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9ICggbGluZSArICc8YSBocmVmPSIjJyArIG5hbWUgKyAnIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgJzwvYT4nICkKKworICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICc8L3RkPicKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICI8L3RyPiIKKyAgICAgICAgICAgICAgICBwcmludCBsaW5lCisKKyAgICAgICAgICAgIHByaW50ICI8L3RhYmxlPiIKKyAgICAgICAgICAgIHByaW50IHNlY3Rpb25fc3lub3BzaXNfZm9vdGVyCisKKyAgICAgICAgcHJpbnQgZGVzY3JpcHRpb25faGVhZGVyCisgICAgICAgIHByaW50IHNlbGYubWFrZV9odG1sX2l0ZW1zKCBzZWN0aW9uLmRlc2NyaXB0aW9uICkKKyAgICAgICAgcHJpbnQgZGVzY3JpcHRpb25fZm9vdGVyCisKKyAgICBkZWYgIGJsb2NrX2VudGVyKCBzZWxmLCBibG9jayApOgorICAgICAgICBwcmludCBibG9ja19oZWFkZXIKKworICAgICAgICAjIHBsYWNlIGh0bWwgYW5jaG9yIGlmIG5lZWRlZAorICAgICAgICBpZiBibG9jay5uYW1lOgorICAgICAgICAgICAgcHJpbnQoICc8aDMgaWQ9IicgKyBibG9jay5uYW1lICsgJyI+JyArIGJsb2NrLm5hbWUgKyAnPC9oMz4nICkKKworICAgICAgICAjIGR1bXAgdGhlIGJsb2NrIEMgc291cmNlIGxpbmVzIG5vdworICAgICAgICBpZiBibG9jay5jb2RlOgorICAgICAgICAgICAgaGVhZGVyID0gJycKKyAgICAgICAgICAgIGZvciBmIGluIHNlbGYuaGVhZGVycy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgYmxvY2suc291cmNlLmZpbGVuYW1lLmZpbmQoIGYgKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBzZWxmLmhlYWRlcnNbZl0gKyAnICgnICsgZiArICcpJworICAgICAgICAgICAgICAgICAgICBicmVhaworCisjICAgICAgICAgICBpZiBub3QgaGVhZGVyOgorIyAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisjICAgICAgICAgICAgICAgICAiV0FSTklORzogTm8gaGVhZGVyIG1hY3JvIGZvciIKKyMgICAgICAgICAgICAgICAgICsgIiAnIiArIGJsb2NrLnNvdXJjZS5maWxlbmFtZSArICInLlxuIiApCisKKyAgICAgICAgICAgIGlmIGhlYWRlcjoKKyAgICAgICAgICAgICAgICBwcmludCAoIGhlYWRlcl9sb2NhdGlvbl9oZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgJ0RlZmluZWQgaW4gJyArIGhlYWRlciArICcuJworICAgICAgICAgICAgICAgICAgICAgICAgKyBoZWFkZXJfbG9jYXRpb25fZm9vdGVyICkKKworICAgICAgICAgICAgcHJpbnQgc291cmNlX2hlYWRlcgorICAgICAgICAgICAgZm9yIGwgaW4gYmxvY2suY29kZToKKyAgICAgICAgICAgICAgICBwcmludCBzZWxmLmh0bWxfc291cmNlX3F1b3RlKCBsLCBibG9jay5uYW1lICkKKyAgICAgICAgICAgIHByaW50IHNvdXJjZV9mb290ZXIKKworICAgIGRlZiAgbWFya3VwX2VudGVyKCBzZWxmLCBtYXJrdXAsIGJsb2NrICk6CisgICAgICAgIGlmIG1hcmt1cC50YWcgPT0gImRlc2NyaXB0aW9uIjoKKyAgICAgICAgICAgIHByaW50IGRlc2NyaXB0aW9uX2hlYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgbWFya2VyX2hlYWRlciArIG1hcmt1cC50YWcgKyBtYXJrZXJfaW50ZXIKKworICAgICAgICBzZWxmLnByaW50X2h0bWxfbWFya3VwKCBtYXJrdXAgKQorCisgICAgZGVmICBtYXJrdXBfZXhpdCggc2VsZiwgbWFya3VwLCBibG9jayApOgorICAgICAgICBpZiBtYXJrdXAudGFnID09ICJkZXNjcmlwdGlvbiI6CisgICAgICAgICAgICBwcmludCBkZXNjcmlwdGlvbl9mb290ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50IG1hcmtlcl9mb290ZXIKKworICAgIGRlZiAgYmxvY2tfZXhpdCggc2VsZiwgYmxvY2sgKToKKyAgICAgICAgcHJpbnQoIGJsb2NrX2Zvb3Rlcl9zdGFydCArIHNlbGYuZmlsZV9wcmVmaXggKyAiaW5kZXguaHRtbCIKKyAgICAgICAgICAgICAgICsgYmxvY2tfZm9vdGVyX21pZGRsZSArIHNlbGYuZmlsZV9wcmVmaXggKyAidG9jLmh0bWwiCisgICAgICAgICAgICAgICArIGJsb2NrX2Zvb3Rlcl9lbmQgKQorCisgICAgZGVmICBzZWN0aW9uX2V4aXQoIHNlbGYsIHNlY3Rpb24gKToKKyAgICAgICAgcHJpbnQgaHRtbF9mb290ZXIKKworICAgIGRlZiAgc2VjdGlvbl9kdW1wX2FsbCggc2VsZiApOgorICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLnNlY3Rpb25zOgorICAgICAgICAgICAgc2VsZi5zZWN0aW9uX2R1bXAoIHNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX3ByZWZpeCArIHNlY3Rpb24ubmFtZSArICcuaHRtbCcgKQorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9kb2NtYWtlci91dGlscy5weSBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZG9jbWFrZXIvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhZjE3YQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZG9jbWFrZXIvdXRpbHMucHkKQEAgLTAsMCArMSwxMjcgQEAKKyMKKyMgIHV0aWxzLnB5CisjCisjICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIHRoZSBgZG9jbWFrZXInIHRvb2wgKGxpYnJhcnkgZmlsZSkuCisjCisjICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjICBEYXZpZCBUdXJuZXIuCisjCisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisjICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorIyAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisjICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyMgIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKworCitpbXBvcnQgc3RyaW5nLCBzeXMsIG9zLCBnbG9iLCBpdGVydG9vbHMKKworCisjIGN1cnJlbnQgb3V0cHV0IGRpcmVjdG9yeQorIworb3V0cHV0X2RpciA9IE5vbmUKKworCisjIEEgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYSBzb3J0aW5nIGtleS4gIFdlIHdhbnQgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyCisjIChwcmltYXJ5IGtleSkgZXhjZXB0IHRoYXQgY2FwaXRhbCBsZXR0ZXJzIGFyZSBzb3J0ZWQgYmVmb3JlIGxvd2VyY2FzZQorIyBvbmVzIChzZWNvbmRhcnkga2V5KS4KKyMKKyMgVGhlIHByaW1hcnkga2V5IGlzIGltcGxlbWVudGVkIGJ5IGxvd2VyY2FzaW5nIHRoZSBpbnB1dC4gIFRoZSBzZWNvbmRhcnkKKyMga2V5IGlzIHNpbXBseSB0aGUgb3JpZ2luYWwgZGF0YSBhcHBlbmRlZCwgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIEZvcgorIyBleGFtcGxlLCB0aGUgc29ydCBrZXkgZm9yIGBGVF94JyBpcyBgZkZ0VF9feHgnLCB3aGlsZSB0aGUgc29ydCBrZXkgZm9yCisjIGBmdF9YJyBpcyBgZmZ0dF9feFgnLiAgU2luY2UgQVNDSUkgY29kZXMgb2YgdXBwZXJjYXNlIGxldHRlcnMgYXJlCisjIG51bWVyaWNhbGx5IHNtYWxsZXIgdGhhbiB0aGUgY29kZXMgb2YgbG93ZXJjYXNlIGxldHRlcnMsIGBmRnRUX194eCcgZ2V0cworIyBzb3J0ZWQgYmVmb3JlIGBmZnR0X194WCcuCisjCitkZWYgIGluZGV4X2tleSggcyApOgorICAgIHJldHVybiBzdHJpbmcuam9pbiggaXRlcnRvb2xzLmNoYWluKCAqemlwKCBzLmxvd2VyKCksIHMgKSApICkKKworCisjIFNvcnQgYGlucHV0X2xpc3QnLCBwbGFjaW5nIHRoZSBlbGVtZW50cyBvZiBgb3JkZXJfbGlzdCcgaW4gZnJvbnQuCisjCitkZWYgIHNvcnRfb3JkZXJfbGlzdCggaW5wdXRfbGlzdCwgb3JkZXJfbGlzdCApOgorICAgIG5ld19saXN0ID0gb3JkZXJfbGlzdFs6XQorICAgIGZvciBpZCBpbiBpbnB1dF9saXN0OgorICAgICAgICBpZiBub3QgaWQgaW4gb3JkZXJfbGlzdDoKKyAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZCggaWQgKQorICAgIHJldHVybiBuZXdfbGlzdAorCisKKyMgRGl2ZXJ0IHN0YW5kYXJkIG91dHB1dCB0byBhIGdpdmVuIHByb2plY3QgZG9jdW1lbnRhdGlvbiBmaWxlLiAgVXNlCisjIGBvdXRwdXRfZGlyJyB0byBkZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGxvY2F0aW9uIGlmIG5lY2Vzc2FyeSBhbmQgc2F2ZSB0aGUKKyMgb2xkIHN0ZG91dCBoYW5kbGUgaW4gYSB0dXBsZSB0aGF0IGlzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisjCitkZWYgIG9wZW5fb3V0cHV0KCBmaWxlbmFtZSApOgorICAgIGdsb2JhbCBvdXRwdXRfZGlyCisKKyAgICBpZiBvdXRwdXRfZGlyIGFuZCBvdXRwdXRfZGlyICE9ICIiOgorICAgICAgICBmaWxlbmFtZSA9IG91dHB1dF9kaXIgKyBvcy5zZXAgKyBmaWxlbmFtZQorCisgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBuZXdfZmlsZSAgID0gb3BlbiggZmlsZW5hbWUsICJ3IiApCisgICAgc3lzLnN0ZG91dCA9IG5ld19maWxlCisKKyAgICByZXR1cm4gKCBuZXdfZmlsZSwgb2xkX3N0ZG91dCApCisKKworIyBDbG9zZSB0aGUgb3V0cHV0IHRoYXQgd2FzIHJldHVybmVkIGJ5IGBvcGVuX291dHB1dCcuCisjCitkZWYgIGNsb3NlX291dHB1dCggb3V0cHV0ICk6CisgICAgb3V0cHV0WzBdLmNsb3NlKCkKKyAgICBzeXMuc3Rkb3V0ID0gb3V0cHV0WzFdCisKKworIyBDaGVjayBvdXRwdXQgZGlyZWN0b3J5LgorIworZGVmICBjaGVja19vdXRwdXQoKToKKyAgICBnbG9iYWwgb3V0cHV0X2RpcgorICAgIGlmIG91dHB1dF9kaXI6CisgICAgICAgIGlmIG91dHB1dF9kaXIgIT0gIiI6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpciggb3V0cHV0X2RpciApOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJhcmd1bWVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgJyIgKyBvdXRwdXRfZGlyICsgIicgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImlzIG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIgKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KCAyICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dF9kaXIgPSBOb25lCisKKworZGVmICBmaWxlX2V4aXN0cyggcGF0aG5hbWUgKToKKyAgICAiIiJDaGVjayB0aGF0IGEgZ2l2ZW4gZmlsZSBleGlzdHMuIiIiCisgICAgcmVzdWx0ID0gMQorICAgIHRyeToKKyAgICAgICAgZmlsZSA9IG9wZW4oIHBhdGhuYW1lLCAiciIgKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICBleGNlcHQ6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggcGF0aG5hbWUgKyAiIGNvdWxkbid0IGJlIGFjY2Vzc2VkXG4iICkKKworICAgIHJldHVybiByZXN1bHQKKworCitkZWYgIG1ha2VfZmlsZV9saXN0KCBhcmdzID0gTm9uZSApOgorICAgICIiIkJ1aWxkIGEgbGlzdCBvZiBpbnB1dCBmaWxlcyBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuIiIiCisgICAgZmlsZV9saXN0ID0gW10KKyAgICAjIHN5cy5zdGRlcnIud3JpdGUoIHJlcHIoIHN5cy5hcmd2WzEgOl0gKSArICdcbicgKQorCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKworICAgIGZvciBwYXRobmFtZSBpbiBhcmdzOgorICAgICAgICBpZiBzdHJpbmcuZmluZCggcGF0aG5hbWUsICcqJyApID49IDA6CisgICAgICAgICAgICBuZXdwYXRoID0gZ2xvYi5nbG9iKCBwYXRobmFtZSApCisgICAgICAgICAgICBuZXdwYXRoLnNvcnQoKSAgIyBzb3J0IGZpbGVzIC0tIHRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIHRoZSBvcmRlciBvZiBmaWxlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3cGF0aCA9IFtwYXRobmFtZV0KKworICAgICAgICBmaWxlX2xpc3QuZXh0ZW5kKCBuZXdwYXRoICkKKworICAgIGlmIGxlbiggZmlsZV9saXN0ICkgPT0gMDoKKyAgICAgICAgZmlsZV9saXN0ID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgICMgbm93IGZpbHRlciB0aGUgZmlsZSBsaXN0IHRvIHJlbW92ZSBub24tZXhpc3Rpbmcgb25lcworICAgICAgICBmaWxlX2xpc3QgPSBmaWx0ZXIoIGZpbGVfZXhpc3RzLCBmaWxlX2xpc3QgKQorCisgICAgcmV0dXJuIGZpbGVfbGlzdAorCisjIGVvZgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy9mdHJhbmRvbS9NYWtlZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZnRyYW5kb20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2MTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZnRyYW5kb20vTWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIyBUT1BfRElSIGFuZCBPQkpfRElSIHNob3VsZCBiZSBzZXQgYnkgdGhlIHVzZXIgdG8gdGhlIHJpZ2h0IGRpcmVjdG9yaWVzLAorIyBpZiBuZWNlc3NhcnkuCisKK1RPUF9ESVIgPz0gLi4vLi4vLi4KK09CSl9ESVIgPz0gJChUT1BfRElSKS9vYmpzCisKKworIyBUaGUgc2V0dXAgYmVsb3cgaXMgZm9yIGdjYyBvbiBhIFVuaXgtbGlrZSBwbGF0Zm9ybS4KKworU1JDX0RJUiA9ICQoVE9QX0RJUikvc3JjL3Rvb2xzL2Z0cmFuZG9tCisKK0NDID0gZ2NjCitXRkxBR1MgPSAtV21pc3NpbmctcHJvdG90eXBlcyBcCisgICAgICAgICAtV3VudXNlZCBcCisgICAgICAgICAtV2ltcGxpY2l0IFwKKyAgICAgICAgIC1XcmV0dXJuLXR5cGUgXAorICAgICAgICAgLVdwYXJlbnRoZXNlcyBcCisgICAgICAgICAtcGVkYW50aWMgXAorICAgICAgICAgLVdmb3JtYXQgXAorICAgICAgICAgLVdjaGFyLXN1YnNjcmlwdHMgXAorICAgICAgICAgLVdzZXF1ZW5jZS1wb2ludAorQ0ZMQUdTID0gJChXRkxBR1MpIFwKKyAgICAgICAgIC1nIFwKKyAgICAgICAgIC1JICQoVE9QX0RJUikvaW5jbHVkZQorTElCUyA9IC1sbSBcCisgICAgICAgLUwgJChPQkpfRElSKSBcCisgICAgICAgLWxmcmVldHlwZSBcCisgICAgICAgLWx6CisKK2FsbDogJChPQkpfRElSKS9mdHJhbmRvbQorCiskKE9CSl9ESVIpL2Z0cmFuZG9tOiAkKFNSQ19ESVIpL2Z0cmFuZG9tLmMgJChPQkpfRElSKS9saWJmcmVldHlwZS5hCisJJChDQykgLW8gJChPQkpfRElSKS9mdHJhbmRvbSAkKENGTEFHUykgJChTUkNfRElSKS9mdHJhbmRvbS5jICQoTElCUykKKworIyBFT0YKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZnRyYW5kb20vUkVBRE1FIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9mdHJhbmRvbS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiZjA1MwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZnRyYW5kb20vUkVBRE1FCkBAIC0wLDAgKzEsNDggQEAKK2Z0cmFuZG9tCistLS0tLS0tLQorCitUaGlzIHByb2dyYW0gZXhwZWN0cyBhIHNldCBvZiBkaXJlY3RvcmllcyBjb250YWluaW5nIGdvb2QgZm9udHMsIGFuZCBhIHNldAorb2YgZXh0ZW5zaW9ucyBvZiBmb250cyB0byBiZSB0ZXN0ZWQuICBJdCB3aWxsIHJhbmRvbWx5IHBpY2sgYSBmb250LCBjb3B5IGl0LAoraW50cm9kdWNlIGFuZCBlcnJvciBhbmQgdGhlbiB0ZXN0IGl0LgorCitUaGUgRnJlZVR5cGUgdGVzdHMgYXJlIHF1aXRlIGJhc2ljOgorCisgIEZvciBlYWNoIGVycm9uZW91cyBmb250IGl0CisgICAgZm9ya3Mgb2ZmIGEgbmV3IHRlc3RlcjsKKyAgICBpbml0aWFsaXplcyB0aGUgbGlicmFyeTsKKyAgICBvcGVucyBlYWNoIGZvbnQgaW4gdGhlIGZpbGU7CisgICAgbG9hZHMgZWFjaCBnbHlwaDsKKyAgICAgIChvcHRpb25hbGx5IHJldmlld2luZyB0aGUgY29udG91cnMgb2YgdGhlIGdseXBoKQorICAgICAgKG9wdGlvbmFsbHkgcmFzdGVyaXppbmcpCisgICAgY2xvc2VzIHRoZSBmYWNlLgorCitJZiB0aGUgdGVzdGVyIGV4aXRzIHdpdGggYSBzaWduYWwsIG9yIHRha2VzIGxvbmdlciB0aGFuIDIwIHNlY29uZHMgdGhlbgorZnRyYW5kb20gc2F2ZXMgdGhlIGVycm9uZW91cyBmb250IGFuZCBjb250aW51ZXMuICBJZiB0aGUgdGVzdGVyIGV4aXRzCitub3JtYWxseSBvciB3aXRoIGFuIGVycm9yLCB0aGVuIHRoZSBzdXBlcnN0cnVjdHVyZSByZW1vdmVzIHRoZSB0ZXN0IGZvbnQgYW5kCitjb250aW51ZXMuCisKK0FyZ3VtZW50cyBhcmU6CisKKyAgLS1hbGwgICAgICAgICAgICAgICAgICAgIFRlc3QgZXZlcnkgZm9udCBpbiB0aGUgZGlyZWN0b3J5KGllcykgbm8gbWF0dGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0IGl0cyBleHRlbnNpb24gKHNvbWUgQ0lELWtleWVkIGZvbnRzIGhhdmUgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbikuCisgIC0tY2hlY2stb3V0bGluZXMgICAgICAgICBDYWxsIEZUX091dGxpbmVfRGVjb21wb3NlIG9uIGVhY2ggZ2x5cGguCisgIC0tZGlyIDxkaXI+ICAgICAgICAgICAgICBBcHBlbmQgPGRpcj4gdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZ29vZCBmb250cy4KKyAgLS1lcnJvci1jb3VudCA8Y250PiAgICAgIEludHJvZHVjZSA8Y250PiBzaW5nbGUtYnl0ZSBlcnJvcnMgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9uZW91cyBmb250cy4KKyAgLS1lcnJvci1mcmFjdGlvbiA8ZnJhYz4gIE11bHRpcGx5IHRoZSBmaWxlIHNpemUgb2YgdGhlIGZvbnQgYnkgPGZyYWM+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlIHRoYXQgbWFueSBlcnJvcnMgaW50byB0aGUgZXJyb25lb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZpbGUuCisgIC0tZXh0IDxleHQ+ICAgICAgICAgICAgICBBZGQgPGV4dD4gdG8gdGhlIHNldCBvZiBmb250IHR5cGVzIHRlc3RlZC4gIEtub3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zIGFyZSBgdHRmJywgYG90ZicsIGB0dGMnLCBgY2lkJywgYHBmYicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGZhJywgYGJkZicsIGBwY2YnLCBgcGZyJywgYGZvbicsIGBvdGInLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjZmYnLgorICAtLWhlbHAgICAgICAgICAgICAgICAgICAgUHJpbnQgb3V0IHRoaXMgbGlzdCBvZiBvcHRpb25zLgorICAtLW5vaGludHMgICAgICAgICAgICAgICAgU3BlY2lmeSBGVF9MT0FEX05PX0hJTlRJTkcgd2hlbiBsb2FkaW5nIGdseXBocy4KKyAgLS1yYXN0ZXJpemUgICAgICAgICAgICAgIENhbGwgRlRfUmVuZGVyX0dseXBoIGFzIHdlbGwgYXMgbG9hZGluZyBpdC4KKyAgLS1yZXN1bHQgPGRpcj4gICAgICAgICAgIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0ZXN0IGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkLgorICAtLXRlc3QgPGZpbGU+ICAgICAgICAgICAgUnVuIGEgc2luZ2xlIHRlc3Qgb24gYSBwcmUtZ2VuZXJhdGVkIHRlc3RjYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzIHNvIGl0IGNhbiBiZSBkZWJ1Z2dlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBlYXNpbHkuCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2Z0cmFuZG9tL2Z0cmFuZG9tLmMgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2Z0cmFuZG9tL2Z0cmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1YjYzMgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZnRyYW5kb20vZnRyYW5kb20uYwpAQCAtMCwwICsxLDY3MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDEzIGJ5IEdlb3JnZSBXaWxsaWFtcyAqLworLyoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgKiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogbW9kaWZpZWQgYnkgV2VybmVyIExlbWJlcmcgPHdsQGdudS5vcmc+ICAgICAgICovCisvKiBUaGlzIGZpbGUgaXMgbm93IHBhcnQgb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkgKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisKKyNkZWZpbmUgdHJ1ZSAgICAgMQorI2RlZmluZSBmYWxzZSAgICAwCisjZGVmaW5lIGZvcmV2ZXIgIGZvciAoOzspCisKKworICBzdGF0aWMgaW50ICAgIGNoZWNrX291dGxpbmVzID0gZmFsc2U7CisgIHN0YXRpYyBpbnQgICAgbm9oaW50cyAgICAgICAgPSBmYWxzZTsKKyAgc3RhdGljIGludCAgICByYXN0ZXJpemUgICAgICA9IGZhbHNlOworICBzdGF0aWMgY2hhciogIHJlc3VsdHNfZGlyICAgID0gInJlc3VsdHMiOworCisjZGVmaW5lIEdPT0RfRk9OVFNfRElSICAiL2hvbWUvd2wvZnJlZXR5cGUtdGVzdGZvbnRzIgorCisgIHN0YXRpYyBjaGFyKiAgZGVmYXVsdF9kaXJfbGlzdFtdID0KKyAgeworICAgIEdPT0RfRk9OVFNfRElSLAorICAgIE5VTEwKKyAgfTsKKworICBzdGF0aWMgY2hhciogIGRlZmF1bHRfZXh0X2xpc3RbXSA9CisgIHsKKyAgICAidHRmIiwKKyAgICAib3RmIiwKKyAgICAidHRjIiwKKyAgICAiY2lkIiwKKyAgICAicGZiIiwKKyAgICAicGZhIiwKKyAgICAiYmRmIiwKKyAgICAicGNmIiwKKyAgICAicGZyIiwKKyAgICAiZm9uIiwKKyAgICAib3RiIiwKKyAgICAiY2ZmIiwKKyAgICBOVUxMCisgIH07CisKKyAgc3RhdGljIGludCAgZXJyb3JfY291bnQgICAgPSAxOworICBzdGF0aWMgaW50ICBlcnJvcl9mcmFjdGlvbiA9IDA7CisKKyAgc3RhdGljIEZUX0YyNkRvdDYgIGZvbnRfc2l6ZSA9IDEyICogNjQ7CisKKyAgc3RhdGljIHN0cnVjdCBmb250bGlzdAorICB7CisgICAgY2hhciogICAgICAgICBuYW1lOworICAgIGludCAgICAgICAgICAgbGVuOworICAgIHVuc2lnbmVkIGludCAgaXNiaW5hcnk6IDE7CisgICAgdW5zaWduZWQgaW50ICBpc2FzY2lpOiAxOworICAgIHVuc2lnbmVkIGludCAgaXNoZXg6IDE7CisKKyAgfSAqZm9udGxpc3Q7CisKKyAgc3RhdGljIGludCAgZmNudDsKKworCisgIHN0YXRpYyBpbnQKKyAgRlRfTW92ZVRvKCBjb25zdCBGVF9WZWN0b3IgICp0bywKKyAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICp1c2VyICkKKyAgeworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgaW50CisgIEZUX0xpbmVUbyggY29uc3QgRlRfVmVjdG9yICAqdG8sCisgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAqdXNlciApCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBGVF9Db25pY1RvKCBjb25zdCBGVF9WZWN0b3IgICpfY3AsCisgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciAgKnRvLAorICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICp1c2VyICkKKyAgeworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgaW50CisgIEZUX0N1YmljVG8oIGNvbnN0IEZUX1ZlY3RvciAgKmNwMSwKKyAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yICAqY3AyLAorICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IgICp0bywKKyAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAqdXNlciApCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX091dGxpbmVfRnVuY3Mgb3V0bGluZWZ1bmNzID0KKyAgeworICAgIEZUX01vdmVUbywKKyAgICBGVF9MaW5lVG8sCisgICAgRlRfQ29uaWNUbywKKyAgICBGVF9DdWJpY1RvLAorICAgIDAsIDAgICAgICAgICAgLyogTm8gc2hpZnQsIG5vIGRlbHRhICovCisgIH07CisKKworICBzdGF0aWMgdm9pZAorICBUZXN0RmFjZSggRlRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBpbnQgIGdpZDsKKyAgICBpbnQgIGxvYWRfZmxhZ3MgPSBGVF9MT0FEX0RFRkFVTFQ7CisKKworICAgIGlmICggY2hlY2tfb3V0bGluZXMgICAgICAgICAmJgorICAgICAgICAgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSApCisgICAgICBsb2FkX2ZsYWdzID0gRlRfTE9BRF9OT19CSVRNQVA7CisKKyAgICBpZiAoIG5vaGludHMgKQorICAgICAgbG9hZF9mbGFncyB8PSBGVF9MT0FEX05PX0hJTlRJTkc7CisKKyAgICBGVF9TZXRfQ2hhcl9TaXplKCBmYWNlLCAwLCBmb250X3NpemUsIDcyLCA3MiApOworCisgICAgZm9yICggZ2lkID0gMDsgZ2lkIDwgZmFjZS0+bnVtX2dseXBoczsgKytnaWQgKQorICAgIHsKKyAgICAgIGlmICggY2hlY2tfb3V0bGluZXMgICAgICAgICAmJgorICAgICAgICAgICBGVF9JU19TQ0FMQUJMRSggZmFjZSApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2lkLCBsb2FkX2ZsYWdzICkgKQorICAgICAgICAgIEZUX091dGxpbmVfRGVjb21wb3NlKCAmZmFjZS0+Z2x5cGgtPm91dGxpbmUsICZvdXRsaW5lZnVuY3MsIE5VTEwgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2lkLCBsb2FkX2ZsYWdzICk7CisKKyAgICAgIGlmICggcmFzdGVyaXplICkKKyAgICAgICAgRlRfUmVuZGVyX0dseXBoKCBmYWNlLT5nbHlwaCwgZnRfcmVuZGVyX21vZGVfbm9ybWFsICk7CisgICAgfQorCisgICAgRlRfRG9uZV9GYWNlKCBmYWNlICk7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIEV4ZWN1dGVUZXN0KCBjaGFyKiAgdGVzdGZvbnQgKQorICB7CisgICAgRlRfTGlicmFyeSAgY29udGV4dDsKKyAgICBGVF9GYWNlICAgICBmYWNlOworCisKKyAgICBpZiAoIEZUX0luaXRfRnJlZVR5cGUoICZjb250ZXh0ICkgKQorICAgIHsKKyAgICAgIGZwcmludGYoIHN0ZGVyciwgIkNhbid0IGluaXRpYWxpemUgRnJlZVR5cGUuXG4iICk7CisgICAgICBleGl0KCAxICk7CisgICAgfQorCisgICAgaWYgKCBGVF9OZXdfRmFjZSggY29udGV4dCwgdGVzdGZvbnQsIDAsICZmYWNlICkgKQorICAgIHsKKyAgICAgIC8qIFRoZSBmb250IGlzIGVycm9uZW91cywgc28gaWYgdGhpcyBmYWlscyB0aGF0J3Mgb2suICovCisgICAgICBleGl0KCAwICk7CisgICAgfQorCisgICAgaWYgKCBmYWNlLT5udW1fZmFjZXMgPT0gMSApCisgICAgICBUZXN0RmFjZSggZmFjZSApOworICAgIGVsc2UKKyAgICB7CisgICAgICBpbnQgIGksIG51bTsKKworCisgICAgICBudW0gPSBmYWNlLT5udW1fZmFjZXM7CisgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW07ICsraSApCisgICAgICB7CisgICAgICAgIGlmICggIUZUX05ld19GYWNlKCBjb250ZXh0LCB0ZXN0Zm9udCwgaSwgJmZhY2UgKSApCisgICAgICAgICAgVGVzdEZhY2UoIGZhY2UgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBleGl0KCAwICk7CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgZXh0bWF0Y2goIGNoYXIqICAgZmlsZW5hbWUsCisgICAgICAgICAgICBjaGFyKiogIGV4dGVuc2lvbnMgKQorICB7CisgICAgaW50ICAgIGk7CisgICAgY2hhciogIHB0OworCisKKyAgICBpZiAoIGV4dGVuc2lvbnMgPT0gTlVMTCApCisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHB0ID0gc3RycmNociggZmlsZW5hbWUsICcuJyApOworICAgIGlmICggcHQgPT0gTlVMTCApCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCBwdCA8IHN0cnJjaHIoIGZpbGVuYW1lLCAnLycgKSApCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKCBpID0gMDsgZXh0ZW5zaW9uc1tpXSAhPSBOVUxMOyArK2kgKQorICAgICAgaWYgKCBzdHJjYXNlY21wKCBwdCArIDEsIGV4dGVuc2lvbnNbaV0gKSA9PSAwIHx8CisgICAgICAgICAgIHN0cmNhc2VjbXAoIHB0LCAgICAgZXh0ZW5zaW9uc1tpXSApID09IDAgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgZmlndXJlZmlsZXR5cGUoIHN0cnVjdCBmb250bGlzdCogIGl0ZW0gKQorICB7CisgICAgRklMRSogIGZvbzsKKworCisgICAgaXRlbS0+aXNiaW5hcnkgPSBpdGVtLT5pc2FzY2lpID0gaXRlbS0+aXNoZXggPSBmYWxzZTsKKworICAgIGZvbyA9IGZvcGVuKCBpdGVtLT5uYW1lLCAicmIiICk7CisgICAgaWYgKCBmb28gIT0gTlVMTCApCisgICAgeworICAgICAgLyogVHJ5IHRvIGd1ZXNzIHRoZSBmaWxlIHR5cGUgZnJvbSB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMuLi4gKi8KKyAgICAgIGludCAgY2gxID0gZ2V0YyggZm9vICk7CisgICAgICBpbnQgIGNoMiA9IGdldGMoIGZvbyApOworICAgICAgaW50ICBjaDMgPSBnZXRjKCBmb28gKTsKKyAgICAgIGludCAgY2g0ID0gZ2V0YyggZm9vICk7CisKKworICAgICAgZmNsb3NlKCBmb28gKTsKKworICAgICAgaWYgKCAoIGNoMSA9PSAwICAgJiYgY2gyID09IDEgICAmJiBjaDMgPT0gMCAgICYmIGNoNCA9PSAwICAgKSB8fAorICAgICAgICAgICAoIGNoMSA9PSAnTycgJiYgY2gyID09ICdUJyAmJiBjaDMgPT0gJ1QnICYmIGNoNCA9PSAnTycgKSB8fAorICAgICAgICAgICAoIGNoMSA9PSAndCcgJiYgY2gyID09ICdyJyAmJiBjaDMgPT0gJ3UnICYmIGNoNCA9PSAnZScgKSB8fAorICAgICAgICAgICAoIGNoMSA9PSAndCcgJiYgY2gyID09ICd0JyAmJiBjaDMgPT0gJ2MnICYmIGNoNCA9PSAnZicgKSApCisgICAgICB7CisgICAgICAgIC8qIHR0Ziwgb3RmLCB0dGMgZmlsZXMgKi8KKyAgICAgICAgaXRlbS0+aXNiaW5hcnkgPSB0cnVlOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGNoMSA9PSAweDgwICYmIGNoMiA9PSAnXDAxJyApCisgICAgICB7CisgICAgICAgIC8qIFBGQiBoZWFkZXIgKi8KKyAgICAgICAgaXRlbS0+aXNiaW5hcnkgPSB0cnVlOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGNoMSA9PSAnJScgJiYgY2gyID09ICchJyApCisgICAgICB7CisgICAgICAgIC8qIFJhbmRvbSBQb3N0U2NyaXB0ICovCisgICAgICAgIGlmICggc3Ryc3RyKCBpdGVtLT5uYW1lLCAiLnBmYSIgKSAhPSBOVUxMIHx8CisgICAgICAgICAgICAgc3Ryc3RyKCBpdGVtLT5uYW1lLCAiLlBGQSIgKSAhPSBOVUxMICkKKyAgICAgICAgICBpdGVtLT5pc2hleCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpdGVtLT5pc2FzY2lpID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBjaDEgPT0gMSAmJiBjaDIgPT0gMCAmJiBjaDMgPT0gNCApCisgICAgICB7CisgICAgICAgIC8qIEJhcmUgQ0ZGICovCisgICAgICAgIGl0ZW0tPmlzYmluYXJ5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBjaDEgPT0gJ1MnICYmIGNoMiA9PSAnVCcgJiYgY2gzID09ICdBJyAmJiBjaDQgPT0gJ1InICkKKyAgICAgIHsKKyAgICAgICAgLyogQkRGICovCisgICAgICAgIGl0ZW0tPmlzaGV4ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBjaDEgPT0gJ1AnICYmIGNoMiA9PSAnRicgJiYgY2gzID09ICdSJyAmJiBjaDQgPT0gJzAnICkKKyAgICAgIHsKKyAgICAgICAgLyogUEZSICovCisgICAgICAgIGl0ZW0tPmlzYmluYXJ5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCAoIGNoMSA9PSAnXDEnICYmIGNoMiA9PSAnZicgJiYgY2gzID09ICdjJyAmJiBjaDQgPT0gJ3AnICkgfHwKKyAgICAgICAgICAgICAgICAoIGNoMSA9PSAnTScgICYmIGNoMiA9PSAnWicgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgeworICAgICAgICAvKiBXaW5kb3dzIEZPTiAqLworICAgICAgICBpdGVtLT5pc2JpbmFyeSA9IHRydWU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgIkNhbid0IHJlY29nbml6ZSBmaWxlIHR5cGUgb2YgYCVzJywgYXNzdW1pbmcgYmluYXJ5XG4iLAorICAgICAgICAgICAgICAgICBpdGVtLT5uYW1lICk7CisgICAgICAgIGl0ZW0tPmlzYmluYXJ5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGZwcmludGYoIHN0ZGVyciwgIkNhbid0IG9wZW4gYCVzJyBmb3IgdHlwaW5nIHRoZSBmaWxlLlxuIiwKKyAgICAgICAgICAgICAgIGl0ZW0tPm5hbWUgKTsKKyAgICAgIGl0ZW0tPmlzYmluYXJ5ID0gdHJ1ZTsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIEZpbmRGb250cyggY2hhcioqICBmb250ZGlycywKKyAgICAgICAgICAgICBjaGFyKiogIGV4dGVuc2lvbnMgKQorICB7CisgICAgaW50ICAgICAgICAgIGksIG1heDsKKyAgICBjaGFyICAgICAgICAgYnVmZmVyWzEwMjVdOworICAgIHN0cnVjdCBzdGF0ICBzdGF0YjsKKworCisgICAgbWF4ICA9IDA7CisgICAgZmNudCA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgZm9udGRpcnNbaV0gIT0gTlVMTDsgKytpICkKKyAgICB7CisgICAgICBESVIqICAgICAgICAgICAgZXhhbXBsZXM7CisgICAgICBzdHJ1Y3QgZGlyZW50KiAgZW50OworCisKKyAgICAgIGV4YW1wbGVzID0gb3BlbmRpciggZm9udGRpcnNbaV0gKTsKKyAgICAgIGlmICggZXhhbXBsZXMgPT0gTlVMTCApCisgICAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgIkNhbid0IG9wZW4gZXhhbXBsZSBmb250IGRpcmVjdG9yeSBgJXMnXG4iLAorICAgICAgICAgICAgICAgICBmb250ZGlyc1tpXSApOworICAgICAgICBleGl0KCAxICk7CisgICAgICB9CisKKyAgICAgIHdoaWxlICggKCBlbnQgPSByZWFkZGlyKCBleGFtcGxlcyApICkgIT0gTlVMTCApCisgICAgICB7CisgICAgICAgIHNucHJpbnRmKCBidWZmZXIsIHNpemVvZiAoIGJ1ZmZlciApLAorICAgICAgICAgICAgICAgICAgIiVzLyVzIiwgZm9udGRpcnNbaV0sIGVudC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggc3RhdCggYnVmZmVyLCAmc3RhdGIgKSA9PSAtMSB8fCBTX0lTRElSKCBzdGF0Yi5zdF9tb2RlICkgKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIGV4dGVuc2lvbnMgPT0gTlVMTCB8fCBleHRtYXRjaCggYnVmZmVyLCBleHRlbnNpb25zICkgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBmY250ID49IG1heCApCisgICAgICAgICAgeworICAgICAgICAgICAgbWF4ICs9IDEwMDsKKyAgICAgICAgICAgIGZvbnRsaXN0ID0gcmVhbGxvYyggZm9udGxpc3QsIG1heCAqIHNpemVvZiAoIHN0cnVjdCBmb250bGlzdCApICk7CisgICAgICAgICAgICBpZiAoIGZvbnRsaXN0ID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIgKTsKKyAgICAgICAgICAgICAgZXhpdCggMSApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGZvbnRsaXN0W2ZjbnRdLm5hbWUgPSBzdHJkdXAoIGJ1ZmZlciApOworICAgICAgICAgIGZvbnRsaXN0W2ZjbnRdLmxlbiAgPSBzdGF0Yi5zdF9zaXplOworCisgICAgICAgICAgZmlndXJlZmlsZXR5cGUoICZmb250bGlzdFtmY250XSApOworICAgICAgICAgICsrZmNudDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjbG9zZWRpciggZXhhbXBsZXMgKTsKKyAgICB9CisKKyAgICBpZiAoIGZjbnQgPT0gMCApCisgICAgeworICAgICAgZnByaW50Ziggc3RkZXJyLCAiQ2FuJ3QgZmluZCBtYXRjaGluZyBmb250IGZpbGVzLlxuIiApOworICAgICAgZXhpdCggMSApOworICAgIH0KKworICAgIGZvbnRsaXN0W2ZjbnRdLm5hbWUgPSBOVUxMOworICB9CisKKworICBzdGF0aWMgaW50CisgIGdldEVycm9yQ250KCBzdHJ1Y3QgZm9udGxpc3QqICBpdGVtICkKKyAgeworICAgIGlmICggZXJyb3JfY291bnQgPT0gMCAmJiBlcnJvcl9mcmFjdGlvbiA9PSAwICkKKyAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGVycm9yX2NvdW50ICsgY2VpbCggZXJyb3JfZnJhY3Rpb24gKiBpdGVtLT5sZW4gKTsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBnZXRSYW5kb20oIGludCAgbG93LAorICAgICAgICAgICAgIGludCAgaGlnaCApCisgIHsKKyAgICBpZiAoIGxvdyAtIGhpZ2ggPCAweDEwMDAwTCApCisgICAgICByZXR1cm4gbG93ICsgKCAoIHJhbmRvbSgpID4+IDggKSAlICggaGlnaCArIDEgLSBsb3cgKSApOworCisgICAgcmV0dXJuIGxvdyArICggcmFuZG9tKCkgJSAoIGhpZ2ggKyAxIC0gbG93ICkgKTsKKyAgfQorCisKKyAgc3RhdGljIGludAorICBjb3B5Zm9udCggc3RydWN0IGZvbnRsaXN0KiAgaXRlbSwKKyAgICAgICAgICAgIGNoYXIqICAgICAgICAgICAgIG5ld2ZvbnQgKQorICB7CisgICAgc3RhdGljIGNoYXIgIGJ1ZmZlcls4MDk2XTsKKyAgICBGSUxFICAgICAgICAgKmdvb2QsICpuZXc7CisgICAgaW50ICAgICAgICAgIGxlbjsKKyAgICBpbnQgICAgICAgICAgaSwgZXJyX2NudDsKKworCisgICAgZ29vZCA9IGZvcGVuKCBpdGVtLT5uYW1lLCAiciIgKTsKKyAgICBpZiAoIGdvb2QgPT0gTlVMTCApCisgICAgeworICAgICAgZnByaW50Ziggc3RkZXJyLCAiQ2FuJ3Qgb3BlbiBgJXMnXG4iLCBpdGVtLT5uYW1lICk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbmV3ID0gZm9wZW4oIG5ld2ZvbnQsICJ3KyIgKTsKKyAgICBpZiAoIG5ldyA9PSBOVUxMICkKKyAgICB7CisgICAgICBmcHJpbnRmKCBzdGRlcnIsICJDYW4ndCBjcmVhdGUgdGVtcG9yYXJ5IG91dHB1dCBmaWxlIGAlcydcbiIsCisgICAgICAgICAgICAgICBuZXdmb250ICk7CisgICAgICBleGl0KCAxICk7CisgICAgfQorCisgICAgd2hpbGUgKCAoIGxlbiA9IGZyZWFkKCBidWZmZXIsIDEsIHNpemVvZiAoIGJ1ZmZlciApLCBnb29kICkgKSA+IDAgKQorICAgICAgZndyaXRlKCBidWZmZXIsIDEsIGxlbiwgbmV3ICk7CisKKyAgICBmY2xvc2UoIGdvb2QgKTsKKworICAgIGVycl9jbnQgPSBnZXRFcnJvckNudCggaXRlbSApOworICAgIGZvciAoIGkgPSAwOyBpIDwgZXJyX2NudDsgKytpICkKKyAgICB7CisgICAgICBmc2VlayggbmV3LCBnZXRSYW5kb20oIDAsIGl0ZW0tPmxlbiAtIDEgKSwgU0VFS19TRVQgKTsKKworICAgICAgaWYgKCBpdGVtLT5pc2JpbmFyeSApCisgICAgICAgIHB1dGMoIGdldFJhbmRvbSggMCwgMHhGRiApLCBuZXcgKTsKKyAgICAgIGVsc2UgaWYgKCBpdGVtLT5pc2FzY2lpICkKKyAgICAgICAgcHV0YyggZ2V0UmFuZG9tKCAweDIwLCAweDdFICksIG5ldyApOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpbnQgIGhleCA9IGdldFJhbmRvbSggMCwgMTUgKTsKKworCisgICAgICAgIGlmICggaGV4IDwgMTAgKQorICAgICAgICAgIGhleCArPSAnMCc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBoZXggKz0gJ0EnIC0gMTA7CisKKyAgICAgICAgcHV0YyggaGV4LCBuZXcgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGZlcnJvciggbmV3ICkgKQorICAgIHsKKyAgICAgIGZjbG9zZSggbmV3ICk7CisgICAgICB1bmxpbmsoIG5ld2ZvbnQgKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmY2xvc2UoIG5ldyApOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworCisgIHN0YXRpYyBpbnQgIGNoaWxkX3BpZDsKKworICBzdGF0aWMgdm9pZAorICBhYm9ydF90ZXN0KCBpbnQgIHNpZyApCisgIHsKKyAgICAvKiBJZiBhIHRpbWUtb3V0IGhhcHBlbnMsIHRoZW4ga2lsbCB0aGUgY2hpbGQgKi8KKyAgICBraWxsKCBjaGlsZF9waWQsIFNJR0ZQRSApOworICAgIHdyaXRlKCAyLCAiVGltZW91dC4uLiAiLCAxMSApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBkb190ZXN0KCB2b2lkICkKKyAgeworICAgIGludCAgICAgICAgIGkgICAgICAgID0gZ2V0UmFuZG9tKCAwLCBmY250IC0gMSApOworICAgIHN0YXRpYyBpbnQgIHRlc3RfbnVtID0gMDsKKyAgICBjaGFyICAgICAgICBidWZmZXJbMTAyNF07CisKKworICAgIHNwcmludGYoIGJ1ZmZlciwgIiVzL3Rlc3QlZCIsIHJlc3VsdHNfZGlyLCB0ZXN0X251bSsrICk7CisKKyAgICBpZiAoIGNvcHlmb250ICggJmZvbnRsaXN0W2ldLCBidWZmZXIgKSApCisgICAgeworICAgICAgc2lnbmFsKCBTSUdBTFJNLCBhYm9ydF90ZXN0ICk7CisgICAgICAvKiBBbnl0aGluZyB0aGF0IHRha2VzIG1vcmUgdGhhbiAyMCBzZWNvbmRzICovCisgICAgICAvKiB0byBwYXJzZSBhbmQvb3IgcmFzdGVyaXplIGlzIGFuIGVycm9yLiAgICovCisgICAgICBhbGFybSggMjAgKTsKKyAgICAgIGlmICggKCBjaGlsZF9waWQgPSBmb3JrKCkgKSA9PSAwICkKKyAgICAgICAgRXhlY3V0ZVRlc3QoIGJ1ZmZlciApOworICAgICAgZWxzZSBpZiAoIGNoaWxkX3BpZCAhPSAtMSApCisgICAgICB7CisgICAgICAgIGludCAgc3RhdHVzOworCisKKyAgICAgICAgd2FpdHBpZCggY2hpbGRfcGlkLCAmc3RhdHVzLCAwICk7CisgICAgICAgIGFsYXJtKCAwICk7CisgICAgICAgIGlmICggV0lGU0lHTkFMRUQgKCBzdGF0dXMgKSApCisgICAgICAgICAgcHJpbnRmKCAiRXJyb3IgZm91bmQgaW4gZmlsZSBgJXMnXG4iLCBidWZmZXIgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHVubGluayggYnVmZmVyICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkNhbid0IGZvcmsgdGVzdCBjYXNlLlxuIiApOworICAgICAgICBleGl0KCAxICk7CisgICAgICB9CisgICAgICBhbGFybSggMCApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdXNhZ2UoIEZJTEUqICBvdXQsCisgICAgICAgICBjaGFyKiAgbmFtZSApCisgIHsKKyAgICBmcHJpbnRmKCBvdXQsICIlcyBbb3B0aW9uc10gLS0gR2VuZXJhdGUgcmFuZG9tIGVycm9uZW91cyBmb250c1xuIgorICAgICAgICAgICAgICAgICAgIiAgYW5kIGF0dGVtcHQgdG8gcGFyc2UgdGhlbSB3aXRoIEZyZWVUeXBlLlxuXG4iLCBuYW1lICk7CisKKyAgICBmcHJpbnRmKCBvdXQsICIgIC0tYWxsICAgICAgICAgICAgICAgICAgICBBbGwgbm9uLWRpcmVjdG9yeSBmaWxlcyBhcmUgYXNzdW1lZCB0byBiZSBmb250cy5cbiIgKTsKKyAgICBmcHJpbnRmKCBvdXQsICIgIC0tY2hlY2stb3V0bGluZXMgICAgICAgICBNYWtlIHN1cmUgd2UgY2FuIHBhcnNlIHRoZSBvdXRsaW5lcyBvZiBlYWNoIGdseXBoLlxuIiApOworICAgIGZwcmludGYoIG91dCwgIiAgLS1kaXIgPHBhdGg+ICAgICAgICAgICAgIEFwcGVuZCA8cGF0aD4gdG8gbGlzdCBvZiBmb250IHNlYXJjaCBkaXJlY3Rvcmllcy5cbiIgKTsKKyAgICBmcHJpbnRmKCBvdXQsICIgIC0tZXJyb3ItY291bnQgPGNudD4gICAgICBJbnRyb2R1Y2UgPGNudD4gc2luZ2xlIGJ5dGUgZXJyb3JzIGludG8gZWFjaCBmb250LlxuIiApOworICAgIGZwcmludGYoIG91dCwgIiAgLS1lcnJvci1mcmFjdGlvbiA8ZnJhYz4gIEludHJvZHVjZSA8ZnJhYz4qZmlsZXNpemUgc2luZ2xlIGJ5dGUgZXJyb3JzXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBlYWNoIGZvbnQuXG4iICk7CisgICAgZnByaW50Ziggb3V0LCAiICAtLWV4dCA8ZXh0PiAgICAgICAgICAgICAgQWRkIDxleHQ+IHRvIGxpc3Qgb2YgZXh0ZW5zaW9ucyBpbmRpY2F0aW5nIGZvbnRzLlxuIiApOworICAgIGZwcmludGYoIG91dCwgIiAgLS1oZWxwICAgICAgICAgICAgICAgICAgIFByaW50IHRoaXMuXG4iICk7CisgICAgZnByaW50Ziggb3V0LCAiICAtLW5vaGludHMgICAgICAgICAgICAgICAgVHVybiBvZmYgaGludGluZy5cbiIgKTsKKyAgICBmcHJpbnRmKCBvdXQsICIgIC0tcmFzdGVyaXplICAgICAgICAgICAgICBBdHRlbXB0IHRvIHJhc3Rlcml6ZSBlYWNoIGdseXBoLlxuIiApOworICAgIGZwcmludGYoIG91dCwgIiAgLS1yZXN1bHRzIDxkaXI+ICAgICAgICAgIERpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSB0aGUgdGVzdCBmb250cy5cbiIgKTsKKyAgICBmcHJpbnRmKCBvdXQsICIgIC0tc2l6ZSA8ZmxvYXQ+ICAgICAgICAgICBVc2UgdGhlIGdpdmVuIGZvbnQgc2l6ZSBmb3IgdGhlIHRlc3RzLlxuIiApOworICAgIGZwcmludGYoIG91dCwgIiAgLS10ZXN0IDxmaWxlPiAgICAgICAgICAgIFJ1biBhIHNpbmdsZSB0ZXN0IG9uIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZS5cbiIgKTsKKyAgfQorCisKKyAgaW50CisgIG1haW4oIGludCAgICAgYXJnYywKKyAgICAgICAgY2hhcioqICBhcmd2ICkKKyAgeworICAgIGNoYXIgICAgKipkaXJzLCAqKmV4dHM7CisgICAgaW50ICAgICBkY250ID0gMCwgZWNudCA9IDAsIHJzZXQgPSBmYWxzZSwgYWxsZXh0cyA9IGZhbHNlOworICAgIGludCAgICAgaTsKKyAgICB0aW1lX3QgIG5vdzsKKyAgICBjaGFyKiAgIHRlc3RmaWxlID0gTlVMTDsKKworCisgICAgZGlycyA9IGNhbGxvYyggYXJnYyArIDEsIHNpemVvZiAoIGNoYXIgKiogKSApOworICAgIGV4dHMgPSBjYWxsb2MoIGFyZ2MgKyAxLCBzaXplb2YgKCBjaGFyICoqICkgKTsKKworICAgIGZvciAoIGkgPSAxOyBpIDwgYXJnYzsgKytpICkKKyAgICB7CisgICAgICBjaGFyKiAgcHQgPSBhcmd2W2ldOworICAgICAgY2hhciogIGVuZDsKKworCisgICAgICBpZiAoIHB0WzBdID09ICctJyAmJiBwdFsxXSA9PSAnLScgKQorICAgICAgICArK3B0OworCisgICAgICBpZiAoIHN0cmNtcCggcHQsICItYWxsIiApID09IDAgKQorICAgICAgICBhbGxleHRzID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIHB0LCAiLWNoZWNrLW91dGxpbmVzIiApID09IDAgKQorICAgICAgICBjaGVja19vdXRsaW5lcyA9IHRydWU7CisgICAgICBlbHNlIGlmICggc3RyY21wKCBwdCwgIi1kaXIiICkgPT0gMCApCisgICAgICAgIGRpcnNbZGNudCsrXSA9IGFyZ3ZbKytpXTsKKyAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIHB0LCAiLWVycm9yLWNvdW50IiApID09IDAgKQorICAgICAgeworICAgICAgICBpZiAoICFyc2V0ICkKKyAgICAgICAgICBlcnJvcl9mcmFjdGlvbiA9IDA7CisgICAgICAgIHJzZXQgPSB0cnVlOworICAgICAgICBlcnJvcl9jb3VudCA9IHN0cnRvbCggYXJndlsrK2ldLCAmZW5kLCAxMCApOworICAgICAgICBpZiAoICplbmQgIT0gJ1wwJyApCisgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJCYWQgdmFsdWUgZm9yIGVycm9yLWNvdW50OiAlc1xuIiwgYXJndltpXSApOworICAgICAgICAgIGV4aXQoIDEgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIHN0cmNtcCggcHQsICItZXJyb3ItZnJhY3Rpb24iICkgPT0gMCApCisgICAgICB7CisgICAgICAgIGlmICggIXJzZXQgKQorICAgICAgICAgIGVycm9yX2NvdW50ID0gMDsKKyAgICAgICAgcnNldCA9IHRydWU7CisgICAgICAgIGVycm9yX2ZyYWN0aW9uID0gc3RydG9kKCBhcmd2WysraV0sICZlbmQgKTsKKyAgICAgICAgaWYgKCAqZW5kICE9ICdcMCcgKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiQmFkIHZhbHVlIGZvciBlcnJvci1mcmFjdGlvbjogJXNcbiIsIGFyZ3ZbaV0gKTsKKyAgICAgICAgICBleGl0KCAxICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIHB0LCAiLWV4dCIgKSA9PSAwICkKKyAgICAgICAgZXh0c1tlY250KytdID0gYXJndlsrK2ldOworICAgICAgZWxzZSBpZiAoIHN0cmNtcCggcHQsICItaGVscCIgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgdXNhZ2UoIHN0ZG91dCwgYXJndlswXSApOworICAgICAgICBleGl0KCAwICk7CisgICAgICB9CisgICAgICBlbHNlIGlmICggc3RyY21wKCBwdCwgIi1ub2hpbnRzIiApID09IDAgKQorICAgICAgICBub2hpbnRzID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIHB0LCAiLXJhc3Rlcml6ZSIgKSA9PSAwICkKKyAgICAgICAgcmFzdGVyaXplID0gdHJ1ZTsKKyAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIHB0LCAiLXJlc3VsdHMiICkgPT0gMCApCisgICAgICAgIHJlc3VsdHNfZGlyID0gYXJndlsrK2ldOworICAgICAgZWxzZSBpZiAoIHN0cmNtcCggcHQsICItc2l6ZSIgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgZm9udF9zaXplID0gKEZUX0YyNkRvdDYpKCBzdHJ0b2QoIGFyZ3ZbKytpXSwgJmVuZCApICogNjQgKTsKKyAgICAgICAgaWYgKCAqZW5kICE9ICdcMCcgfHwgZm9udF9zaXplIDwgNjQgKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiQmFkIHZhbHVlIGZvciBzaXplOiAlc1xuIiwgYXJndltpXSApOworICAgICAgICAgIGV4aXQoIDEgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoIHN0cmNtcCggcHQsICItdGVzdCIgKSA9PSAwICkKKyAgICAgICAgdGVzdGZpbGUgPSBhcmd2WysraV07CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHVzYWdlKCBzdGRlcnIsIGFyZ3ZbMF0gKTsKKyAgICAgICAgZXhpdCggMSApOworICAgICAgfQorICAgIH0KKworICAgIGlmICggYWxsZXh0cyApCisgICAgeworICAgICAgZnJlZSggZXh0cyApOworICAgICAgZXh0cyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKCBlY250ID09IDAgKQorICAgIHsKKyAgICAgIGZyZWUoIGV4dHMgKTsKKyAgICAgIGV4dHMgPSBkZWZhdWx0X2V4dF9saXN0OworICAgIH0KKworICAgIGlmICggZGNudCA9PSAwICkKKyAgICB7CisgICAgICBmcmVlKCBkaXJzICk7CisgICAgICBkaXJzID0gZGVmYXVsdF9kaXJfbGlzdDsKKyAgICB9CisKKyAgICBpZiAoIHRlc3RmaWxlICE9IE5VTEwgKQorICAgICAgRXhlY3V0ZVRlc3QoIHRlc3RmaWxlICk7ICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgcmV0dXJuICovCisKKyAgICB0aW1lKCAmbm93ICk7CisgICAgc3JhbmRvbSggbm93ICk7CisKKyAgICBGaW5kRm9udHMoIGRpcnMsIGV4dHMgKTsKKyAgICBta2RpciggcmVzdWx0c19kaXIsIDA3NTUgKTsKKworICAgIGZvcmV2ZXIKKyAgICAgIGRvX3Rlc3QoKTsKKworICAgIHJldHVybiAwOworICB9CisKKworLyogRU9GICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2dsbmFtZXMucHkgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL2dsbmFtZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNTU0YwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvZ2xuYW1lcy5weQpAQCAtMCwwICsxLDU0ODcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworCisjCisjIEZyZWVUeXBlIDIgZ2x5cGggbmFtZSBidWlsZGVyCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCisiIiJcCisKK3VzYWdlOiAlcyA8b3V0cHV0LWZpbGU+CisKKyAgVGhpcyBweXRob24gc2NyaXB0IGdlbmVyYXRlcyB0aGUgZ2x5cGggbmFtZXMgdGFibGVzIGRlZmluZWQgaW4gdGhlCisgIGBwc25hbWVzJyBtb2R1bGUuCisKKyAgSXRzIHNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpbGUgdG8gYmUgY3JlYXRlZC4KKyIiIgorCisKK2ltcG9ydCBzeXMsIHN0cmluZywgc3RydWN0LCByZSwgb3MucGF0aAorCisKKyMgVGhpcyB0YWJsZSBsaXN0cyB0aGUgZ2x5cGhzIGFjY29yZGluZyB0byB0aGUgTWFjaW50b3NoIHNwZWNpZmljYXRpb24uCisjIEl0IGlzIHVzZWQgYnkgdGhlIFRydWVUeXBlIFBvc3RzY3JpcHQgbmFtZXMgdGFibGUuCisjCisjIFNlZQorIworIyAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZwb3N0Lmh0bWwKKyMKKyMgZm9yIHRoZSBvZmZpY2lhbCBsaXN0LgorIworbWFjX3N0YW5kYXJkX25hbWVzID0gXAorWworICAjIDAKKyAgIi5ub3RkZWYiLCAiLm51bGwiLCAibm9ubWFya2luZ3JldHVybiIsICJzcGFjZSIsICJleGNsYW0iLAorICAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLAorCisgICMgMTAKKyAgInF1b3Rlc2luZ2xlIiwgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLAorICAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsICJ6ZXJvIiwKKworICAjIDIwCisgICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLCAiZml2ZSIsCisgICJzaXgiLCAic2V2ZW4iLCAiZWlnaHQiLCAibmluZSIsICJjb2xvbiIsCisKKyAgIyAzMAorICAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsCisgICJhdCIsICJBIiwgIkIiLCAiQyIsICJEIiwKKworICAjIDQwCisgICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLAorICAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwKKworICAjIDUwCisgICJPIiwgIlAiLCAiUSIsICJSIiwgIlMiLAorICAiVCIsICJVIiwgIlYiLCAiVyIsICJYIiwKKworICAjIDYwCisgICJZIiwgIloiLCAiYnJhY2tldGxlZnQiLCAiYmFja3NsYXNoIiwgImJyYWNrZXRyaWdodCIsCisgICJhc2NpaWNpcmN1bSIsICJ1bmRlcnNjb3JlIiwgImdyYXZlIiwgImEiLCAiYiIsCisKKyAgIyA3MAorICAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwKKyAgImgiLCAiaSIsICJqIiwgImsiLCAibCIsCisKKyAgIyA4MAorICAibSIsICJuIiwgIm8iLCAicCIsICJxIiwKKyAgInIiLCAicyIsICJ0IiwgInUiLCAidiIsCisKKyAgIyA5MAorICAidyIsICJ4IiwgInkiLCAieiIsICJicmFjZWxlZnQiLAorICAiYmFyIiwgImJyYWNlcmlnaHQiLCAiYXNjaWl0aWxkZSIsICJBZGllcmVzaXMiLCAiQXJpbmciLAorCisgICMgMTAwCisgICJDY2VkaWxsYSIsICJFYWN1dGUiLCAiTnRpbGRlIiwgIk9kaWVyZXNpcyIsICJVZGllcmVzaXMiLAorICAiYWFjdXRlIiwgImFncmF2ZSIsICJhY2lyY3VtZmxleCIsICJhZGllcmVzaXMiLCAiYXRpbGRlIiwKKworICAjIDExMAorICAiYXJpbmciLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVncmF2ZSIsICJlY2lyY3VtZmxleCIsCisgICJlZGllcmVzaXMiLCAiaWFjdXRlIiwgImlncmF2ZSIsICJpY2lyY3VtZmxleCIsICJpZGllcmVzaXMiLAorCisgICMgMTIwCisgICJudGlsZGUiLCAib2FjdXRlIiwgIm9ncmF2ZSIsICJvY2lyY3VtZmxleCIsICJvZGllcmVzaXMiLAorICAib3RpbGRlIiwgInVhY3V0ZSIsICJ1Z3JhdmUiLCAidWNpcmN1bWZsZXgiLCAidWRpZXJlc2lzIiwKKworICAjIDEzMAorICAiZGFnZ2VyIiwgImRlZ3JlZSIsICJjZW50IiwgInN0ZXJsaW5nIiwgInNlY3Rpb24iLAorICAiYnVsbGV0IiwgInBhcmFncmFwaCIsICJnZXJtYW5kYmxzIiwgInJlZ2lzdGVyZWQiLCAiY29weXJpZ2h0IiwKKworICAjIDE0MAorICAidHJhZGVtYXJrIiwgImFjdXRlIiwgImRpZXJlc2lzIiwgIm5vdGVxdWFsIiwgIkFFIiwKKyAgIk9zbGFzaCIsICJpbmZpbml0eSIsICJwbHVzbWludXMiLCAibGVzc2VxdWFsIiwgImdyZWF0ZXJlcXVhbCIsCisKKyAgIyAxNTAKKyAgInllbiIsICJtdSIsICJwYXJ0aWFsZGlmZiIsICJzdW1tYXRpb24iLCAicHJvZHVjdCIsCisgICJwaSIsICJpbnRlZ3JhbCIsICJvcmRmZW1pbmluZSIsICJvcmRtYXNjdWxpbmUiLCAiT21lZ2EiLAorCisgICMgMTYwCisgICJhZSIsICJvc2xhc2giLCAicXVlc3Rpb25kb3duIiwgImV4Y2xhbWRvd24iLCAibG9naWNhbG5vdCIsCisgICJyYWRpY2FsIiwgImZsb3JpbiIsICJhcHByb3hlcXVhbCIsICJEZWx0YSIsICJndWlsbGVtb3RsZWZ0IiwKKworICAjIDE3MAorICAiZ3VpbGxlbW90cmlnaHQiLCAiZWxsaXBzaXMiLCAibm9uYnJlYWtpbmdzcGFjZSIsICJBZ3JhdmUiLCAiQXRpbGRlIiwKKyAgIk90aWxkZSIsICJPRSIsICJvZSIsICJlbmRhc2giLCAiZW1kYXNoIiwKKworICAjIDE4MAorICAicXVvdGVkYmxsZWZ0IiwgInF1b3RlZGJscmlnaHQiLCAicXVvdGVsZWZ0IiwgInF1b3RlcmlnaHQiLCAiZGl2aWRlIiwKKyAgImxvemVuZ2UiLCAieWRpZXJlc2lzIiwgIllkaWVyZXNpcyIsICJmcmFjdGlvbiIsICJjdXJyZW5jeSIsCisKKyAgIyAxOTAKKyAgImd1aWxzaW5nbGxlZnQiLCAiZ3VpbHNpbmdscmlnaHQiLCAiZmkiLCAiZmwiLCAiZGFnZ2VyZGJsIiwKKyAgInBlcmlvZGNlbnRlcmVkIiwgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJwZXJ0aG91c2FuZCIsCisgICAgIkFjaXJjdW1mbGV4IiwKKworICAjIDIwMAorICAiRWNpcmN1bWZsZXgiLCAiQWFjdXRlIiwgIkVkaWVyZXNpcyIsICJFZ3JhdmUiLCAiSWFjdXRlIiwKKyAgIkljaXJjdW1mbGV4IiwgIklkaWVyZXNpcyIsICJJZ3JhdmUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwKKworICAjIDIxMAorICAiYXBwbGUiLCAiT2dyYXZlIiwgIlVhY3V0ZSIsICJVY2lyY3VtZmxleCIsICJVZ3JhdmUiLAorICAiZG90bGVzc2kiLCAiY2lyY3VtZmxleCIsICJ0aWxkZSIsICJtYWNyb24iLCAiYnJldmUiLAorCisgICMgMjIwCisgICJkb3RhY2NlbnQiLCAicmluZyIsICJjZWRpbGxhIiwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLAorICAiY2Fyb24iLCAiTHNsYXNoIiwgImxzbGFzaCIsICJTY2Fyb24iLCAic2Nhcm9uIiwKKworICAjIDIzMAorICAiWmNhcm9uIiwgInpjYXJvbiIsICJicm9rZW5iYXIiLCAiRXRoIiwgImV0aCIsCisgICJZYWN1dGUiLCAieWFjdXRlIiwgIlRob3JuIiwgInRob3JuIiwgIm1pbnVzIiwKKworICAjIDI0MAorICAibXVsdGlwbHkiLCAib25lc3VwZXJpb3IiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJvbmVoYWxmIiwKKyAgIm9uZXF1YXJ0ZXIiLCAidGhyZWVxdWFydGVycyIsICJmcmFuYyIsICJHYnJldmUiLCAiZ2JyZXZlIiwKKworICAjIDI1MAorICAiSWRvdGFjY2VudCIsICJTY2VkaWxsYSIsICJzY2VkaWxsYSIsICJDYWN1dGUiLCAiY2FjdXRlIiwKKyAgIkNjYXJvbiIsICJjY2Fyb24iLCAiZGNyb2F0IgorXQorCisKKyMgVGhlIGxpc3Qgb2Ygc3RhbmRhcmQgYFNJRCcgZ2x5cGggbmFtZXMuICBGb3IgdGhlIG9mZmljaWFsIGxpc3QsCisjIHNlZSBBbm5leCBBIG9mIGRvY3VtZW50IGF0CisjCisjICAgaHR0cDovL3BhcnRuZXJzLmFkb2JlLmNvbS9wdWJsaWMvZGV2ZWxvcGVyL2VuL2ZvbnQvNTE3Ni5DRkYucGRmICAuCisjCitzaWRfc3RhbmRhcmRfbmFtZXMgPSBcCitbCisgICMgMAorICAiLm5vdGRlZiIsICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsCisgICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVyaWdodCIsICJwYXJlbmxlZnQiLAorCisgICMgMTAKKyAgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsICJjb21tYSIsICJoeXBoZW4iLAorICAicGVyaW9kIiwgInNsYXNoIiwgInplcm8iLCAib25lIiwgInR3byIsCisKKyAgIyAyMAorICAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsCisgICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwKKworICAjIDMwCisgICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwgImF0IiwgIkEiLAorICAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwKKworICAjIDQwCisgICJHIiwgIkgiLCAiSSIsICJKIiwgIksiLAorICAiTCIsICJNIiwgIk4iLCAiTyIsICJQIiwKKworICAjIDUwCisgICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLAorICAiViIsICJXIiwgIlgiLCAiWSIsICJaIiwKKworICAjIDYwCisgICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLAorICAicXVvdGVsZWZ0IiwgImEiLCAiYiIsICJjIiwgImQiLAorCisgICMgNzAKKyAgImUiLCAiZiIsICJnIiwgImgiLCAiaSIsCisgICJqIiwgImsiLCAibCIsICJtIiwgIm4iLAorCisgICMgODAKKyAgIm8iLCAicCIsICJxIiwgInIiLCAicyIsCisgICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLAorCisgICMgOTAKKyAgInkiLCAieiIsICJicmFjZWxlZnQiLCAiYmFyIiwgImJyYWNlcmlnaHQiLAorICAiYXNjaWl0aWxkZSIsICJleGNsYW1kb3duIiwgImNlbnQiLCAic3RlcmxpbmciLCAiZnJhY3Rpb24iLAorCisgICMgMTAwCisgICJ5ZW4iLCAiZmxvcmluIiwgInNlY3Rpb24iLCAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLAorICAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsCisKKyAgIyAxMTAKKyAgImZsIiwgImVuZGFzaCIsICJkYWdnZXIiLCAiZGFnZ2VyZGJsIiwgInBlcmlvZGNlbnRlcmVkIiwKKyAgInBhcmFncmFwaCIsICJidWxsZXQiLCAicXVvdGVzaW5nbGJhc2UiLCAicXVvdGVkYmxiYXNlIiwgInF1b3RlZGJscmlnaHQiLAorCisgICMgMTIwCisgICJndWlsbGVtb3RyaWdodCIsICJlbGxpcHNpcyIsICJwZXJ0aG91c2FuZCIsICJxdWVzdGlvbmRvd24iLCAiZ3JhdmUiLAorICAiYWN1dGUiLCAiY2lyY3VtZmxleCIsICJ0aWxkZSIsICJtYWNyb24iLCAiYnJldmUiLAorCisgICMgMTMwCisgICJkb3RhY2NlbnQiLCAiZGllcmVzaXMiLCAicmluZyIsICJjZWRpbGxhIiwgImh1bmdhcnVtbGF1dCIsCisgICJvZ29uZWsiLCAiY2Fyb24iLCAiZW1kYXNoIiwgIkFFIiwgIm9yZGZlbWluaW5lIiwKKworICAjIDE0MAorICAiTHNsYXNoIiwgIk9zbGFzaCIsICJPRSIsICJvcmRtYXNjdWxpbmUiLCAiYWUiLAorICAiZG90bGVzc2kiLCAibHNsYXNoIiwgIm9zbGFzaCIsICJvZSIsICJnZXJtYW5kYmxzIiwKKworICAjIDE1MAorICAib25lc3VwZXJpb3IiLCAibG9naWNhbG5vdCIsICJtdSIsICJ0cmFkZW1hcmsiLCAiRXRoIiwKKyAgIm9uZWhhbGYiLCAicGx1c21pbnVzIiwgIlRob3JuIiwgIm9uZXF1YXJ0ZXIiLCAiZGl2aWRlIiwKKworICAjIDE2MAorICAiYnJva2VuYmFyIiwgImRlZ3JlZSIsICJ0aG9ybiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInR3b3N1cGVyaW9yIiwKKyAgInJlZ2lzdGVyZWQiLCAibWludXMiLCAiZXRoIiwgIm11bHRpcGx5IiwgInRocmVlc3VwZXJpb3IiLAorCisgICMgMTcwCisgICJjb3B5cmlnaHQiLCAiQWFjdXRlIiwgIkFjaXJjdW1mbGV4IiwgIkFkaWVyZXNpcyIsICJBZ3JhdmUiLAorICAiQXJpbmciLCAiQXRpbGRlIiwgIkNjZWRpbGxhIiwgIkVhY3V0ZSIsICJFY2lyY3VtZmxleCIsCisKKyAgIyAxODAKKyAgIkVkaWVyZXNpcyIsICJFZ3JhdmUiLCAiSWFjdXRlIiwgIkljaXJjdW1mbGV4IiwgIklkaWVyZXNpcyIsCisgICJJZ3JhdmUiLCAiTnRpbGRlIiwgIk9hY3V0ZSIsICJPY2lyY3VtZmxleCIsICJPZGllcmVzaXMiLAorCisgICMgMTkwCisgICJPZ3JhdmUiLCAiT3RpbGRlIiwgIlNjYXJvbiIsICJVYWN1dGUiLCAiVWNpcmN1bWZsZXgiLAorICAiVWRpZXJlc2lzIiwgIlVncmF2ZSIsICJZYWN1dGUiLCAiWWRpZXJlc2lzIiwgIlpjYXJvbiIsCisKKyAgIyAyMDAKKyAgImFhY3V0ZSIsICJhY2lyY3VtZmxleCIsICJhZGllcmVzaXMiLCAiYWdyYXZlIiwgImFyaW5nIiwKKyAgImF0aWxkZSIsICJjY2VkaWxsYSIsICJlYWN1dGUiLCAiZWNpcmN1bWZsZXgiLCAiZWRpZXJlc2lzIiwKKworICAjIDIxMAorICAiZWdyYXZlIiwgImlhY3V0ZSIsICJpY2lyY3VtZmxleCIsICJpZGllcmVzaXMiLCAiaWdyYXZlIiwKKyAgIm50aWxkZSIsICJvYWN1dGUiLCAib2NpcmN1bWZsZXgiLCAib2RpZXJlc2lzIiwgIm9ncmF2ZSIsCisKKyAgIyAyMjAKKyAgIm90aWxkZSIsICJzY2Fyb24iLCAidWFjdXRlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsCisgICJ1Z3JhdmUiLCAieWFjdXRlIiwgInlkaWVyZXNpcyIsICJ6Y2Fyb24iLCAiZXhjbGFtc21hbGwiLAorCisgICMgMjMwCisgICJIdW5nYXJ1bWxhdXRzbWFsbCIsICJkb2xsYXJvbGRzdHlsZSIsICJkb2xsYXJzdXBlcmlvciIsICJhbXBlcnNhbmRzbWFsbCIsCisgICAgIkFjdXRlc21hbGwiLAorICAicGFyZW5sZWZ0c3VwZXJpb3IiLCAicGFyZW5yaWdodHN1cGVyaW9yIiwgInR3b2RvdGVubGVhZGVyIiwKKyAgICAib25lZG90ZW5sZWFkZXIiLCAiemVyb29sZHN0eWxlIiwKKworICAjIDI0MAorICAib25lb2xkc3R5bGUiLCAidHdvb2xkc3R5bGUiLCAidGhyZWVvbGRzdHlsZSIsICJmb3Vyb2xkc3R5bGUiLAorICAgICJmaXZlb2xkc3R5bGUiLAorICAic2l4b2xkc3R5bGUiLCAic2V2ZW5vbGRzdHlsZSIsICJlaWdodG9sZHN0eWxlIiwgIm5pbmVvbGRzdHlsZSIsCisgICAgImNvbW1hc3VwZXJpb3IiLAorCisgICMgMjUwCisgICJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwgInBlcmlvZHN1cGVyaW9yIiwgInF1ZXN0aW9uc21hbGwiLCAiYXN1cGVyaW9yIiwKKyAgICAiYnN1cGVyaW9yIiwKKyAgImNlbnRzdXBlcmlvciIsICJkc3VwZXJpb3IiLCAiZXN1cGVyaW9yIiwgImlzdXBlcmlvciIsICJsc3VwZXJpb3IiLAorCisgICMgMjYwCisgICJtc3VwZXJpb3IiLCAibnN1cGVyaW9yIiwgIm9zdXBlcmlvciIsICJyc3VwZXJpb3IiLCAic3N1cGVyaW9yIiwKKyAgInRzdXBlcmlvciIsICJmZiIsICJmZmkiLCAiZmZsIiwgInBhcmVubGVmdGluZmVyaW9yIiwKKworICAjIDI3MAorICAicGFyZW5yaWdodGluZmVyaW9yIiwgIkNpcmN1bWZsZXhzbWFsbCIsICJoeXBoZW5zdXBlcmlvciIsICJHcmF2ZXNtYWxsIiwKKyAgICAiQXNtYWxsIiwKKyAgIkJzbWFsbCIsICJDc21hbGwiLCAiRHNtYWxsIiwgIkVzbWFsbCIsICJGc21hbGwiLAorCisgICMgMjgwCisgICJHc21hbGwiLCAiSHNtYWxsIiwgIklzbWFsbCIsICJKc21hbGwiLCAiS3NtYWxsIiwKKyAgIkxzbWFsbCIsICJNc21hbGwiLCAiTnNtYWxsIiwgIk9zbWFsbCIsICJQc21hbGwiLAorCisgICMgMjkwCisgICJRc21hbGwiLCAiUnNtYWxsIiwgIlNzbWFsbCIsICJUc21hbGwiLCAiVXNtYWxsIiwKKyAgIlZzbWFsbCIsICJXc21hbGwiLCAiWHNtYWxsIiwgIllzbWFsbCIsICJac21hbGwiLAorCisgICMgMzAwCisgICJjb2xvbm1vbmV0YXJ5IiwgIm9uZWZpdHRlZCIsICJydXBpYWgiLCAiVGlsZGVzbWFsbCIsICJleGNsYW1kb3duc21hbGwiLAorICAiY2VudG9sZHN0eWxlIiwgIkxzbGFzaHNtYWxsIiwgIlNjYXJvbnNtYWxsIiwgIlpjYXJvbnNtYWxsIiwKKyAgICAiRGllcmVzaXNzbWFsbCIsCisKKyAgIyAzMTAKKyAgIkJyZXZlc21hbGwiLCAiQ2Fyb25zbWFsbCIsICJEb3RhY2NlbnRzbWFsbCIsICJNYWNyb25zbWFsbCIsICJmaWd1cmVkYXNoIiwKKyAgImh5cGhlbmluZmVyaW9yIiwgIk9nb25la3NtYWxsIiwgIlJpbmdzbWFsbCIsICJDZWRpbGxhc21hbGwiLAorICAgICJxdWVzdGlvbmRvd25zbWFsbCIsCisKKyAgIyAzMjAKKyAgIm9uZWVpZ2h0aCIsICJ0aHJlZWVpZ2h0aHMiLCAiZml2ZWVpZ2h0aHMiLCAic2V2ZW5laWdodGhzIiwgIm9uZXRoaXJkIiwKKyAgInR3b3RoaXJkcyIsICJ6ZXJvc3VwZXJpb3IiLCAiZm91cnN1cGVyaW9yIiwgImZpdmVzdXBlcmlvciIsCisgICAgInNpeHN1cGVyaW9yIiwKKworICAjIDMzMAorICAic2V2ZW5zdXBlcmlvciIsICJlaWdodHN1cGVyaW9yIiwgIm5pbmVzdXBlcmlvciIsICJ6ZXJvaW5mZXJpb3IiLAorICAgICJvbmVpbmZlcmlvciIsCisgICJ0d29pbmZlcmlvciIsICJ0aHJlZWluZmVyaW9yIiwgImZvdXJpbmZlcmlvciIsICJmaXZlaW5mZXJpb3IiLAorICAgICJzaXhpbmZlcmlvciIsCisKKyAgIyAzNDAKKyAgInNldmVuaW5mZXJpb3IiLCAiZWlnaHRpbmZlcmlvciIsICJuaW5laW5mZXJpb3IiLCAiY2VudGluZmVyaW9yIiwKKyAgICAiZG9sbGFyaW5mZXJpb3IiLAorICAicGVyaW9kaW5mZXJpb3IiLCAiY29tbWFpbmZlcmlvciIsICJBZ3JhdmVzbWFsbCIsICJBYWN1dGVzbWFsbCIsCisgICAgIkFjaXJjdW1mbGV4c21hbGwiLAorCisgICMgMzUwCisgICJBdGlsZGVzbWFsbCIsICJBZGllcmVzaXNzbWFsbCIsICJBcmluZ3NtYWxsIiwgIkFFc21hbGwiLCAiQ2NlZGlsbGFzbWFsbCIsCisgICJFZ3JhdmVzbWFsbCIsICJFYWN1dGVzbWFsbCIsICJFY2lyY3VtZmxleHNtYWxsIiwgIkVkaWVyZXNpc3NtYWxsIiwKKyAgICAiSWdyYXZlc21hbGwiLAorCisgICMgMzYwCisgICJJYWN1dGVzbWFsbCIsICJJY2lyY3VtZmxleHNtYWxsIiwgIklkaWVyZXNpc3NtYWxsIiwgIkV0aHNtYWxsIiwKKyAgICAiTnRpbGRlc21hbGwiLAorICAiT2dyYXZlc21hbGwiLCAiT2FjdXRlc21hbGwiLCAiT2NpcmN1bWZsZXhzbWFsbCIsICJPdGlsZGVzbWFsbCIsCisgICAgIk9kaWVyZXNpc3NtYWxsIiwKKworICAjIDM3MAorICAiT0VzbWFsbCIsICJPc2xhc2hzbWFsbCIsICJVZ3JhdmVzbWFsbCIsICJVYWN1dGVzbWFsbCIsCisgICAgIlVjaXJjdW1mbGV4c21hbGwiLAorICAiVWRpZXJlc2lzc21hbGwiLCAiWWFjdXRlc21hbGwiLCAiVGhvcm5zbWFsbCIsICJZZGllcmVzaXNzbWFsbCIsCisgICAgIjAwMS4wMDAiLAorCisgICMgMzgwCisgICIwMDEuMDAxIiwgIjAwMS4wMDIiLCAiMDAxLjAwMyIsICJCbGFjayIsICJCb2xkIiwKKyAgIkJvb2siLCAiTGlnaHQiLCAiTWVkaXVtIiwgIlJlZ3VsYXIiLCAiUm9tYW4iLAorCisgICMgMzkwCisgICJTZW1pYm9sZCIKK10KKworCisjIFRoaXMgdGFibGUgbWFwcyBjaGFyYWN0ZXIgY29kZXMgb2YgdGhlIEFkb2JlIFN0YW5kYXJkIFR5cGUgMQorIyBlbmNvZGluZyB0byBnbHlwaCBpbmRpY2VzIGluIHRoZSBzaWRfc3RhbmRhcmRfbmFtZXMgdGFibGUuCisjCit0MV9zdGFuZGFyZF9lbmNvZGluZyA9IFwKK1sKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LAorICAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDE3LCAgMTgsCisKKyAgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LAorICAgMjksICAzMCwgIDMxLCAgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsCisgICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsICA0OCwKKyAgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LAorICAgNTksICA2MCwgIDYxLCAgNjIsICA2MywgIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsCisKKyAgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LAorICAgNzksICA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsCisgICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsCisgIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsICAgMCwgMTExLCAxMTIsIDExMywKKyAgMTE0LCAgIDAsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLAorICAgIDAsIDEyMywgICAwLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzAsCisKKyAgMTMxLCAgIDAsIDEzMiwgMTMzLCAgIDAsIDEzNCwgMTM1LCAxMzYsIDEzNywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAxMzgsICAgMCwgMTM5LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsIDE0MCwgMTQxLCAxNDIsIDE0MywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsIDE0NCwgICAwLCAgIDAsICAgMCwgMTQ1LCAgIDAsICAgMCwgMTQ2LCAxNDcsCisKKyAgMTQ4LCAxNDksICAgMCwgICAwLCAgIDAsICAgMAorXQorCisKKyMgVGhpcyB0YWJsZSBtYXBzIGNoYXJhY3RlciBjb2RlcyBvZiB0aGUgQWRvYmUgRXhwZXJ0IFR5cGUgMQorIyBlbmNvZGluZyB0byBnbHlwaCBpbmRpY2VzIGluIHRoZSBzaWRfc3RhbmRhcmRfbmFtZXMgdGFibGUuCisjCit0MV9leHBlcnRfZW5jb2RpbmcgPSBcCitbCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsIDIyOSwgMjMwLCAgIDAsIDIzMSwgMjMyLCAyMzMsIDIzNCwKKyAgMjM1LCAyMzYsIDIzNywgMjM4LCAgMTMsICAxNCwgIDE1LCAgOTksIDIzOSwgMjQwLAorCisgIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAgMjcsICAyOCwKKyAgMjQ5LCAyNTAsIDI1MSwgMjUyLCAgIDAsIDI1MywgMjU0LCAyNTUsIDI1NiwgMjU3LAorICAgIDAsICAgMCwgICAwLCAyNTgsICAgMCwgICAwLCAyNTksIDI2MCwgMjYxLCAyNjIsCisgICAgMCwgICAwLCAyNjMsIDI2NCwgMjY1LCAgIDAsIDI2NiwgMTA5LCAxMTAsIDI2NywKKyAgMjY4LCAyNjksICAgMCwgMjcwLCAyNzEsIDI3MiwgMjczLCAyNzQsIDI3NSwgMjc2LAorCisgIDI3NywgMjc4LCAyNzksIDI4MCwgMjgxLCAyODIsIDI4MywgMjg0LCAyODUsIDI4NiwKKyAgMjg3LCAyODgsIDI4OSwgMjkwLCAyOTEsIDI5MiwgMjkzLCAyOTQsIDI5NSwgMjk2LAorICAyOTcsIDI5OCwgMjk5LCAzMDAsIDMwMSwgMzAyLCAzMDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAzMDQsIDMwNSwgMzA2LCAgIDAsICAgMCwgMzA3LCAzMDgsIDMwOSwgMzEwLAorICAzMTEsICAgMCwgMzEyLCAgIDAsICAgMCwgMzEzLCAgIDAsICAgMCwgMzE0LCAzMTUsCisgICAgMCwgICAwLCAzMTYsIDMxNywgMzE4LCAgIDAsICAgMCwgICAwLCAxNTgsIDE1NSwKKyAgMTYzLCAzMTksIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsICAgMCwgICAwLAorCisgIDMyNiwgMTUwLCAxNjQsIDE2OSwgMzI3LCAzMjgsIDMyOSwgMzMwLCAzMzEsIDMzMiwKKyAgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LCAzNDAsIDM0MSwgMzQyLAorICAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsCisgIDM1MywgMzU0LCAzNTUsIDM1NiwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDM2MiwKKyAgMzYzLCAzNjQsIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLAorCisgIDM3MywgMzc0LCAzNzUsIDM3NiwgMzc3LCAzNzgKK10KKworCisjIFRoaXMgZGF0YSBoYXMgYmVlbiB0YWtlbiBsaXRlcmFsbHkgZnJvbSB0aGUgZmlsZXMgYGdseXBobGlzdC50eHQnCisjIGFuZCBgemFwZmRpbmdiYXRzLnR4dCcgdmVyc2lvbiAyLjAsIFNlcHQgMjAwMi4gIEl0IGlzIGF2YWlsYWJsZSBmcm9tCisjCisjICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9hZG9iZS9hZ2xmbi8KKyMKK2Fkb2JlX2dseXBoX2xpc3QgPSAiIiJcCitBOzAwNDEKK0FFOzAwQzYKK0FFYWN1dGU7MDFGQworQUVtYWNyb247MDFFMgorQUVzbWFsbDtGN0U2CitBYWN1dGU7MDBDMQorQWFjdXRlc21hbGw7RjdFMQorQWJyZXZlOzAxMDIKK0FicmV2ZWFjdXRlOzFFQUUKK0FicmV2ZWN5cmlsbGljOzA0RDAKK0FicmV2ZWRvdGJlbG93OzFFQjYKK0FicmV2ZWdyYXZlOzFFQjAKK0FicmV2ZWhvb2thYm92ZTsxRUIyCitBYnJldmV0aWxkZTsxRUI0CitBY2Fyb247MDFDRAorQWNpcmNsZTsyNEI2CitBY2lyY3VtZmxleDswMEMyCitBY2lyY3VtZmxleGFjdXRlOzFFQTQKK0FjaXJjdW1mbGV4ZG90YmVsb3c7MUVBQworQWNpcmN1bWZsZXhncmF2ZTsxRUE2CitBY2lyY3VtZmxleGhvb2thYm92ZTsxRUE4CitBY2lyY3VtZmxleHNtYWxsO0Y3RTIKK0FjaXJjdW1mbGV4dGlsZGU7MUVBQQorQWN1dGU7RjZDOQorQWN1dGVzbWFsbDtGN0I0CitBY3lyaWxsaWM7MDQxMAorQWRibGdyYXZlOzAyMDAKK0FkaWVyZXNpczswMEM0CitBZGllcmVzaXNjeXJpbGxpYzswNEQyCitBZGllcmVzaXNtYWNyb247MDFERQorQWRpZXJlc2lzc21hbGw7RjdFNAorQWRvdGJlbG93OzFFQTAKK0Fkb3RtYWNyb247MDFFMAorQWdyYXZlOzAwQzAKK0FncmF2ZXNtYWxsO0Y3RTAKK0Fob29rYWJvdmU7MUVBMgorQWllY3lyaWxsaWM7MDRENAorQWludmVydGVkYnJldmU7MDIwMgorQWxwaGE7MDM5MQorQWxwaGF0b25vczswMzg2CitBbWFjcm9uOzAxMDAKK0Ftb25vc3BhY2U7RkYyMQorQW9nb25lazswMTA0CitBcmluZzswMEM1CitBcmluZ2FjdXRlOzAxRkEKK0FyaW5nYmVsb3c7MUUwMAorQXJpbmdzbWFsbDtGN0U1CitBc21hbGw7Rjc2MQorQXRpbGRlOzAwQzMKK0F0aWxkZXNtYWxsO0Y3RTMKK0F5YmFybWVuaWFuOzA1MzEKK0I7MDA0MgorQmNpcmNsZTsyNEI3CitCZG90YWNjZW50OzFFMDIKK0Jkb3RiZWxvdzsxRTA0CitCZWN5cmlsbGljOzA0MTEKK0JlbmFybWVuaWFuOzA1MzIKK0JldGE7MDM5MgorQmhvb2s7MDE4MQorQmxpbmViZWxvdzsxRTA2CitCbW9ub3NwYWNlO0ZGMjIKK0JyZXZlc21hbGw7RjZGNAorQnNtYWxsO0Y3NjIKK0J0b3BiYXI7MDE4MgorQzswMDQzCitDYWFybWVuaWFuOzA1M0UKK0NhY3V0ZTswMTA2CitDYXJvbjtGNkNBCitDYXJvbnNtYWxsO0Y2RjUKK0NjYXJvbjswMTBDCitDY2VkaWxsYTswMEM3CitDY2VkaWxsYWFjdXRlOzFFMDgKK0NjZWRpbGxhc21hbGw7RjdFNworQ2NpcmNsZTsyNEI4CitDY2lyY3VtZmxleDswMTA4CitDZG90OzAxMEEKK0Nkb3RhY2NlbnQ7MDEwQQorQ2VkaWxsYXNtYWxsO0Y3QjgKK0NoYWFybWVuaWFuOzA1NDkKK0NoZWFia2hhc2lhbmN5cmlsbGljOzA0QkMKK0NoZWN5cmlsbGljOzA0MjcKK0NoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljOzA0QkUKK0NoZWRlc2NlbmRlcmN5cmlsbGljOzA0QjYKK0NoZWRpZXJlc2lzY3lyaWxsaWM7MDRGNAorQ2hlaGFybWVuaWFuOzA1NDMKK0NoZWtoYWthc3NpYW5jeXJpbGxpYzswNENCCitDaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljOzA0QjgKK0NoaTswM0E3CitDaG9vazswMTg3CitDaXJjdW1mbGV4c21hbGw7RjZGNgorQ21vbm9zcGFjZTtGRjIzCitDb2FybWVuaWFuOzA1NTEKK0NzbWFsbDtGNzYzCitEOzAwNDQKK0RaOzAxRjEKK0RaY2Fyb247MDFDNAorRGFhcm1lbmlhbjswNTM0CitEYWZyaWNhbjswMTg5CitEY2Fyb247MDEwRQorRGNlZGlsbGE7MUUxMAorRGNpcmNsZTsyNEI5CitEY2lyY3VtZmxleGJlbG93OzFFMTIKK0Rjcm9hdDswMTEwCitEZG90YWNjZW50OzFFMEEKK0Rkb3RiZWxvdzsxRTBDCitEZWN5cmlsbGljOzA0MTQKK0RlaWNvcHRpYzswM0VFCitEZWx0YTsyMjA2CitEZWx0YWdyZWVrOzAzOTQKK0Rob29rOzAxOEEKK0RpZXJlc2lzO0Y2Q0IKK0RpZXJlc2lzQWN1dGU7RjZDQworRGllcmVzaXNHcmF2ZTtGNkNECitEaWVyZXNpc3NtYWxsO0Y3QTgKK0RpZ2FtbWFncmVlazswM0RDCitEamVjeXJpbGxpYzswNDAyCitEbGluZWJlbG93OzFFMEUKK0Rtb25vc3BhY2U7RkYyNAorRG90YWNjZW50c21hbGw7RjZGNworRHNsYXNoOzAxMTAKK0RzbWFsbDtGNzY0CitEdG9wYmFyOzAxOEIKK0R6OzAxRjIKK0R6Y2Fyb247MDFDNQorRHplYWJraGFzaWFuY3lyaWxsaWM7MDRFMAorRHplY3lyaWxsaWM7MDQwNQorRHpoZWN5cmlsbGljOzA0MEYKK0U7MDA0NQorRWFjdXRlOzAwQzkKK0VhY3V0ZXNtYWxsO0Y3RTkKK0VicmV2ZTswMTE0CitFY2Fyb247MDExQQorRWNlZGlsbGFicmV2ZTsxRTFDCitFY2hhcm1lbmlhbjswNTM1CitFY2lyY2xlOzI0QkEKK0VjaXJjdW1mbGV4OzAwQ0EKK0VjaXJjdW1mbGV4YWN1dGU7MUVCRQorRWNpcmN1bWZsZXhiZWxvdzsxRTE4CitFY2lyY3VtZmxleGRvdGJlbG93OzFFQzYKK0VjaXJjdW1mbGV4Z3JhdmU7MUVDMAorRWNpcmN1bWZsZXhob29rYWJvdmU7MUVDMgorRWNpcmN1bWZsZXhzbWFsbDtGN0VBCitFY2lyY3VtZmxleHRpbGRlOzFFQzQKK0VjeXJpbGxpYzswNDA0CitFZGJsZ3JhdmU7MDIwNAorRWRpZXJlc2lzOzAwQ0IKK0VkaWVyZXNpc3NtYWxsO0Y3RUIKK0Vkb3Q7MDExNgorRWRvdGFjY2VudDswMTE2CitFZG90YmVsb3c7MUVCOAorRWZjeXJpbGxpYzswNDI0CitFZ3JhdmU7MDBDOAorRWdyYXZlc21hbGw7RjdFOAorRWhhcm1lbmlhbjswNTM3CitFaG9va2Fib3ZlOzFFQkEKK0VpZ2h0cm9tYW47MjE2NworRWludmVydGVkYnJldmU7MDIwNgorRWlvdGlmaWVkY3lyaWxsaWM7MDQ2NAorRWxjeXJpbGxpYzswNDFCCitFbGV2ZW5yb21hbjsyMTZBCitFbWFjcm9uOzAxMTIKK0VtYWNyb25hY3V0ZTsxRTE2CitFbWFjcm9uZ3JhdmU7MUUxNAorRW1jeXJpbGxpYzswNDFDCitFbW9ub3NwYWNlO0ZGMjUKK0VuY3lyaWxsaWM7MDQxRAorRW5kZXNjZW5kZXJjeXJpbGxpYzswNEEyCitFbmc7MDE0QQorRW5naGVjeXJpbGxpYzswNEE0CitFbmhvb2tjeXJpbGxpYzswNEM3CitFb2dvbmVrOzAxMTgKK0VvcGVuOzAxOTAKK0Vwc2lsb247MDM5NQorRXBzaWxvbnRvbm9zOzAzODgKK0VyY3lyaWxsaWM7MDQyMAorRXJldmVyc2VkOzAxOEUKK0VyZXZlcnNlZGN5cmlsbGljOzA0MkQKK0VzY3lyaWxsaWM7MDQyMQorRXNkZXNjZW5kZXJjeXJpbGxpYzswNEFBCitFc2g7MDFBOQorRXNtYWxsO0Y3NjUKK0V0YTswMzk3CitFdGFybWVuaWFuOzA1MzgKK0V0YXRvbm9zOzAzODkKK0V0aDswMEQwCitFdGhzbWFsbDtGN0YwCitFdGlsZGU7MUVCQworRXRpbGRlYmVsb3c7MUUxQQorRXVybzsyMEFDCitFemg7MDFCNworRXpoY2Fyb247MDFFRQorRXpocmV2ZXJzZWQ7MDFCOAorRjswMDQ2CitGY2lyY2xlOzI0QkIKK0Zkb3RhY2NlbnQ7MUUxRQorRmVoYXJtZW5pYW47MDU1NgorRmVpY29wdGljOzAzRTQKK0Zob29rOzAxOTEKK0ZpdGFjeXJpbGxpYzswNDcyCitGaXZlcm9tYW47MjE2NAorRm1vbm9zcGFjZTtGRjI2CitGb3Vycm9tYW47MjE2MworRnNtYWxsO0Y3NjYKK0c7MDA0NworR0JzcXVhcmU7MzM4NworR2FjdXRlOzAxRjQKK0dhbW1hOzAzOTMKK0dhbW1hYWZyaWNhbjswMTk0CitHYW5naWFjb3B0aWM7MDNFQQorR2JyZXZlOzAxMUUKK0djYXJvbjswMUU2CitHY2VkaWxsYTswMTIyCitHY2lyY2xlOzI0QkMKK0djaXJjdW1mbGV4OzAxMUMKK0djb21tYWFjY2VudDswMTIyCitHZG90OzAxMjAKK0dkb3RhY2NlbnQ7MDEyMAorR2VjeXJpbGxpYzswNDEzCitHaGFkYXJtZW5pYW47MDU0MgorR2hlbWlkZGxlaG9va2N5cmlsbGljOzA0OTQKK0doZXN0cm9rZWN5cmlsbGljOzA0OTIKK0doZXVwdHVybmN5cmlsbGljOzA0OTAKK0dob29rOzAxOTMKK0dpbWFybWVuaWFuOzA1MzMKK0dqZWN5cmlsbGljOzA0MDMKK0dtYWNyb247MUUyMAorR21vbm9zcGFjZTtGRjI3CitHcmF2ZTtGNkNFCitHcmF2ZXNtYWxsO0Y3NjAKK0dzbWFsbDtGNzY3CitHc21hbGxob29rOzAyOUIKK0dzdHJva2U7MDFFNAorSDswMDQ4CitIMTg1MzM7MjVDRgorSDE4NTQzOzI1QUEKK0gxODU1MTsyNUFCCitIMjIwNzM7MjVBMQorSFBzcXVhcmU7MzNDQgorSGFhYmtoYXNpYW5jeXJpbGxpYzswNEE4CitIYWRlc2NlbmRlcmN5cmlsbGljOzA0QjIKK0hhcmRzaWduY3lyaWxsaWM7MDQyQQorSGJhcjswMTI2CitIYnJldmViZWxvdzsxRTJBCitIY2VkaWxsYTsxRTI4CitIY2lyY2xlOzI0QkQKK0hjaXJjdW1mbGV4OzAxMjQKK0hkaWVyZXNpczsxRTI2CitIZG90YWNjZW50OzFFMjIKK0hkb3RiZWxvdzsxRTI0CitIbW9ub3NwYWNlO0ZGMjgKK0hvYXJtZW5pYW47MDU0MAorSG9yaWNvcHRpYzswM0U4CitIc21hbGw7Rjc2OAorSHVuZ2FydW1sYXV0O0Y2Q0YKK0h1bmdhcnVtbGF1dHNtYWxsO0Y2RjgKK0h6c3F1YXJlOzMzOTAKK0k7MDA0OQorSUFjeXJpbGxpYzswNDJGCitJSjswMTMyCitJVWN5cmlsbGljOzA0MkUKK0lhY3V0ZTswMENECitJYWN1dGVzbWFsbDtGN0VECitJYnJldmU7MDEyQworSWNhcm9uOzAxQ0YKK0ljaXJjbGU7MjRCRQorSWNpcmN1bWZsZXg7MDBDRQorSWNpcmN1bWZsZXhzbWFsbDtGN0VFCitJY3lyaWxsaWM7MDQwNgorSWRibGdyYXZlOzAyMDgKK0lkaWVyZXNpczswMENGCitJZGllcmVzaXNhY3V0ZTsxRTJFCitJZGllcmVzaXNjeXJpbGxpYzswNEU0CitJZGllcmVzaXNzbWFsbDtGN0VGCitJZG90OzAxMzAKK0lkb3RhY2NlbnQ7MDEzMAorSWRvdGJlbG93OzFFQ0EKK0llYnJldmVjeXJpbGxpYzswNEQ2CitJZWN5cmlsbGljOzA0MTUKK0lmcmFrdHVyOzIxMTEKK0lncmF2ZTswMENDCitJZ3JhdmVzbWFsbDtGN0VDCitJaG9va2Fib3ZlOzFFQzgKK0lpY3lyaWxsaWM7MDQxOAorSWludmVydGVkYnJldmU7MDIwQQorSWlzaG9ydGN5cmlsbGljOzA0MTkKK0ltYWNyb247MDEyQQorSW1hY3JvbmN5cmlsbGljOzA0RTIKK0ltb25vc3BhY2U7RkYyOQorSW5pYXJtZW5pYW47MDUzQgorSW9jeXJpbGxpYzswNDAxCitJb2dvbmVrOzAxMkUKK0lvdGE7MDM5OQorSW90YWFmcmljYW47MDE5NgorSW90YWRpZXJlc2lzOzAzQUEKK0lvdGF0b25vczswMzhBCitJc21hbGw7Rjc2OQorSXN0cm9rZTswMTk3CitJdGlsZGU7MDEyOAorSXRpbGRlYmVsb3c7MUUyQworSXpoaXRzYWN5cmlsbGljOzA0NzQKK0l6aGl0c2FkYmxncmF2ZWN5cmlsbGljOzA0NzYKK0o7MDA0QQorSmFhcm1lbmlhbjswNTQxCitKY2lyY2xlOzI0QkYKK0pjaXJjdW1mbGV4OzAxMzQKK0plY3lyaWxsaWM7MDQwOAorSmhlaGFybWVuaWFuOzA1NEIKK0ptb25vc3BhY2U7RkYyQQorSnNtYWxsO0Y3NkEKK0s7MDA0QgorS0JzcXVhcmU7MzM4NQorS0tzcXVhcmU7MzNDRAorS2FiYXNoa2lyY3lyaWxsaWM7MDRBMAorS2FjdXRlOzFFMzAKK0thY3lyaWxsaWM7MDQxQQorS2FkZXNjZW5kZXJjeXJpbGxpYzswNDlBCitLYWhvb2tjeXJpbGxpYzswNEMzCitLYXBwYTswMzlBCitLYXN0cm9rZWN5cmlsbGljOzA0OUUKK0thdmVydGljYWxzdHJva2VjeXJpbGxpYzswNDlDCitLY2Fyb247MDFFOAorS2NlZGlsbGE7MDEzNgorS2NpcmNsZTsyNEMwCitLY29tbWFhY2NlbnQ7MDEzNgorS2RvdGJlbG93OzFFMzIKK0tlaGFybWVuaWFuOzA1NTQKK0tlbmFybWVuaWFuOzA1M0YKK0toYWN5cmlsbGljOzA0MjUKK0toZWljb3B0aWM7MDNFNgorS2hvb2s7MDE5OAorS2plY3lyaWxsaWM7MDQwQworS2xpbmViZWxvdzsxRTM0CitLbW9ub3NwYWNlO0ZGMkIKK0tvcHBhY3lyaWxsaWM7MDQ4MAorS29wcGFncmVlazswM0RFCitLc2ljeXJpbGxpYzswNDZFCitLc21hbGw7Rjc2QgorTDswMDRDCitMSjswMUM3CitMTDtGNkJGCitMYWN1dGU7MDEzOQorTGFtYmRhOzAzOUIKK0xjYXJvbjswMTNECitMY2VkaWxsYTswMTNCCitMY2lyY2xlOzI0QzEKK0xjaXJjdW1mbGV4YmVsb3c7MUUzQworTGNvbW1hYWNjZW50OzAxM0IKK0xkb3Q7MDEzRgorTGRvdGFjY2VudDswMTNGCitMZG90YmVsb3c7MUUzNgorTGRvdGJlbG93bWFjcm9uOzFFMzgKK0xpd25hcm1lbmlhbjswNTNDCitMajswMUM4CitMamVjeXJpbGxpYzswNDA5CitMbGluZWJlbG93OzFFM0EKK0xtb25vc3BhY2U7RkYyQworTHNsYXNoOzAxNDEKK0xzbGFzaHNtYWxsO0Y2RjkKK0xzbWFsbDtGNzZDCitNOzAwNEQKK01Cc3F1YXJlOzMzODYKK01hY3JvbjtGNkQwCitNYWNyb25zbWFsbDtGN0FGCitNYWN1dGU7MUUzRQorTWNpcmNsZTsyNEMyCitNZG90YWNjZW50OzFFNDAKK01kb3RiZWxvdzsxRTQyCitNZW5hcm1lbmlhbjswNTQ0CitNbW9ub3NwYWNlO0ZGMkQKK01zbWFsbDtGNzZECitNdHVybmVkOzAxOUMKK011OzAzOUMKK047MDA0RQorTko7MDFDQQorTmFjdXRlOzAxNDMKK05jYXJvbjswMTQ3CitOY2VkaWxsYTswMTQ1CitOY2lyY2xlOzI0QzMKK05jaXJjdW1mbGV4YmVsb3c7MUU0QQorTmNvbW1hYWNjZW50OzAxNDUKK05kb3RhY2NlbnQ7MUU0NAorTmRvdGJlbG93OzFFNDYKK05ob29rbGVmdDswMTlECitOaW5lcm9tYW47MjE2OAorTmo7MDFDQgorTmplY3lyaWxsaWM7MDQwQQorTmxpbmViZWxvdzsxRTQ4CitObW9ub3NwYWNlO0ZGMkUKK05vd2FybWVuaWFuOzA1NDYKK05zbWFsbDtGNzZFCitOdGlsZGU7MDBEMQorTnRpbGRlc21hbGw7RjdGMQorTnU7MDM5RAorTzswMDRGCitPRTswMTUyCitPRXNtYWxsO0Y2RkEKK09hY3V0ZTswMEQzCitPYWN1dGVzbWFsbDtGN0YzCitPYmFycmVkY3lyaWxsaWM7MDRFOAorT2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM7MDRFQQorT2JyZXZlOzAxNEUKK09jYXJvbjswMUQxCitPY2VudGVyZWR0aWxkZTswMTlGCitPY2lyY2xlOzI0QzQKK09jaXJjdW1mbGV4OzAwRDQKK09jaXJjdW1mbGV4YWN1dGU7MUVEMAorT2NpcmN1bWZsZXhkb3RiZWxvdzsxRUQ4CitPY2lyY3VtZmxleGdyYXZlOzFFRDIKK09jaXJjdW1mbGV4aG9va2Fib3ZlOzFFRDQKK09jaXJjdW1mbGV4c21hbGw7RjdGNAorT2NpcmN1bWZsZXh0aWxkZTsxRUQ2CitPY3lyaWxsaWM7MDQxRQorT2RibGFjdXRlOzAxNTAKK09kYmxncmF2ZTswMjBDCitPZGllcmVzaXM7MDBENgorT2RpZXJlc2lzY3lyaWxsaWM7MDRFNgorT2RpZXJlc2lzc21hbGw7RjdGNgorT2RvdGJlbG93OzFFQ0MKK09nb25la3NtYWxsO0Y2RkIKK09ncmF2ZTswMEQyCitPZ3JhdmVzbWFsbDtGN0YyCitPaGFybWVuaWFuOzA1NTUKK09obTsyMTI2CitPaG9va2Fib3ZlOzFFQ0UKK09ob3JuOzAxQTAKK09ob3JuYWN1dGU7MUVEQQorT2hvcm5kb3RiZWxvdzsxRUUyCitPaG9ybmdyYXZlOzFFREMKK09ob3JuaG9va2Fib3ZlOzFFREUKK09ob3JudGlsZGU7MUVFMAorT2h1bmdhcnVtbGF1dDswMTUwCitPaTswMUEyCitPaW52ZXJ0ZWRicmV2ZTswMjBFCitPbWFjcm9uOzAxNEMKK09tYWNyb25hY3V0ZTsxRTUyCitPbWFjcm9uZ3JhdmU7MUU1MAorT21lZ2E7MjEyNgorT21lZ2FjeXJpbGxpYzswNDYwCitPbWVnYWdyZWVrOzAzQTkKK09tZWdhcm91bmRjeXJpbGxpYzswNDdBCitPbWVnYXRpdGxvY3lyaWxsaWM7MDQ3QworT21lZ2F0b25vczswMzhGCitPbWljcm9uOzAzOUYKK09taWNyb250b25vczswMzhDCitPbW9ub3NwYWNlO0ZGMkYKK09uZXJvbWFuOzIxNjAKK09vZ29uZWs7MDFFQQorT29nb25la21hY3JvbjswMUVDCitPb3BlbjswMTg2CitPc2xhc2g7MDBEOAorT3NsYXNoYWN1dGU7MDFGRQorT3NsYXNoc21hbGw7RjdGOAorT3NtYWxsO0Y3NkYKK09zdHJva2VhY3V0ZTswMUZFCitPdGN5cmlsbGljOzA0N0UKK090aWxkZTswMEQ1CitPdGlsZGVhY3V0ZTsxRTRDCitPdGlsZGVkaWVyZXNpczsxRTRFCitPdGlsZGVzbWFsbDtGN0Y1CitQOzAwNTAKK1BhY3V0ZTsxRTU0CitQY2lyY2xlOzI0QzUKK1Bkb3RhY2NlbnQ7MUU1NgorUGVjeXJpbGxpYzswNDFGCitQZWhhcm1lbmlhbjswNTRBCitQZW1pZGRsZWhvb2tjeXJpbGxpYzswNEE2CitQaGk7MDNBNgorUGhvb2s7MDFBNAorUGk7MDNBMAorUGl3cmFybWVuaWFuOzA1NTMKK1Btb25vc3BhY2U7RkYzMAorUHNpOzAzQTgKK1BzaWN5cmlsbGljOzA0NzAKK1BzbWFsbDtGNzcwCitROzAwNTEKK1FjaXJjbGU7MjRDNgorUW1vbm9zcGFjZTtGRjMxCitRc21hbGw7Rjc3MQorUjswMDUyCitSYWFybWVuaWFuOzA1NEMKK1JhY3V0ZTswMTU0CitSY2Fyb247MDE1OAorUmNlZGlsbGE7MDE1NgorUmNpcmNsZTsyNEM3CitSY29tbWFhY2NlbnQ7MDE1NgorUmRibGdyYXZlOzAyMTAKK1Jkb3RhY2NlbnQ7MUU1OAorUmRvdGJlbG93OzFFNUEKK1Jkb3RiZWxvd21hY3JvbjsxRTVDCitSZWhhcm1lbmlhbjswNTUwCitSZnJha3R1cjsyMTFDCitSaG87MDNBMQorUmluZ3NtYWxsO0Y2RkMKK1JpbnZlcnRlZGJyZXZlOzAyMTIKK1JsaW5lYmVsb3c7MUU1RQorUm1vbm9zcGFjZTtGRjMyCitSc21hbGw7Rjc3MgorUnNtYWxsaW52ZXJ0ZWQ7MDI4MQorUnNtYWxsaW52ZXJ0ZWRzdXBlcmlvcjswMkI2CitTOzAwNTMKK1NGMDEwMDAwOzI1MEMKK1NGMDIwMDAwOzI1MTQKK1NGMDMwMDAwOzI1MTAKK1NGMDQwMDAwOzI1MTgKK1NGMDUwMDAwOzI1M0MKK1NGMDYwMDAwOzI1MkMKK1NGMDcwMDAwOzI1MzQKK1NGMDgwMDAwOzI1MUMKK1NGMDkwMDAwOzI1MjQKK1NGMTAwMDAwOzI1MDAKK1NGMTEwMDAwOzI1MDIKK1NGMTkwMDAwOzI1NjEKK1NGMjAwMDAwOzI1NjIKK1NGMjEwMDAwOzI1NTYKK1NGMjIwMDAwOzI1NTUKK1NGMjMwMDAwOzI1NjMKK1NGMjQwMDAwOzI1NTEKK1NGMjUwMDAwOzI1NTcKK1NGMjYwMDAwOzI1NUQKK1NGMjcwMDAwOzI1NUMKK1NGMjgwMDAwOzI1NUIKK1NGMzYwMDAwOzI1NUUKK1NGMzcwMDAwOzI1NUYKK1NGMzgwMDAwOzI1NUEKK1NGMzkwMDAwOzI1NTQKK1NGNDAwMDAwOzI1NjkKK1NGNDEwMDAwOzI1NjYKK1NGNDIwMDAwOzI1NjAKK1NGNDMwMDAwOzI1NTAKK1NGNDQwMDAwOzI1NkMKK1NGNDUwMDAwOzI1NjcKK1NGNDYwMDAwOzI1NjgKK1NGNDcwMDAwOzI1NjQKK1NGNDgwMDAwOzI1NjUKK1NGNDkwMDAwOzI1NTkKK1NGNTAwMDAwOzI1NTgKK1NGNTEwMDAwOzI1NTIKK1NGNTIwMDAwOzI1NTMKK1NGNTMwMDAwOzI1NkIKK1NGNTQwMDAwOzI1NkEKK1NhY3V0ZTswMTVBCitTYWN1dGVkb3RhY2NlbnQ7MUU2NAorU2FtcGlncmVlazswM0UwCitTY2Fyb247MDE2MAorU2Nhcm9uZG90YWNjZW50OzFFNjYKK1NjYXJvbnNtYWxsO0Y2RkQKK1NjZWRpbGxhOzAxNUUKK1NjaHdhOzAxOEYKK1NjaHdhY3lyaWxsaWM7MDREOAorU2Nod2FkaWVyZXNpc2N5cmlsbGljOzA0REEKK1NjaXJjbGU7MjRDOAorU2NpcmN1bWZsZXg7MDE1QworU2NvbW1hYWNjZW50OzAyMTgKK1Nkb3RhY2NlbnQ7MUU2MAorU2RvdGJlbG93OzFFNjIKK1Nkb3RiZWxvd2RvdGFjY2VudDsxRTY4CitTZWhhcm1lbmlhbjswNTRECitTZXZlbnJvbWFuOzIxNjYKK1NoYWFybWVuaWFuOzA1NDcKK1NoYWN5cmlsbGljOzA0MjgKK1NoY2hhY3lyaWxsaWM7MDQyOQorU2hlaWNvcHRpYzswM0UyCitTaGhhY3lyaWxsaWM7MDRCQQorU2hpbWFjb3B0aWM7MDNFQworU2lnbWE7MDNBMworU2l4cm9tYW47MjE2NQorU21vbm9zcGFjZTtGRjMzCitTb2Z0c2lnbmN5cmlsbGljOzA0MkMKK1NzbWFsbDtGNzczCitTdGlnbWFncmVlazswM0RBCitUOzAwNTQKK1RhdTswM0E0CitUYmFyOzAxNjYKK1RjYXJvbjswMTY0CitUY2VkaWxsYTswMTYyCitUY2lyY2xlOzI0QzkKK1RjaXJjdW1mbGV4YmVsb3c7MUU3MAorVGNvbW1hYWNjZW50OzAxNjIKK1Rkb3RhY2NlbnQ7MUU2QQorVGRvdGJlbG93OzFFNkMKK1RlY3lyaWxsaWM7MDQyMgorVGVkZXNjZW5kZXJjeXJpbGxpYzswNEFDCitUZW5yb21hbjsyMTY5CitUZXRzZWN5cmlsbGljOzA0QjQKK1RoZXRhOzAzOTgKK1Rob29rOzAxQUMKK1Rob3JuOzAwREUKK1Rob3Juc21hbGw7RjdGRQorVGhyZWVyb21hbjsyMTYyCitUaWxkZXNtYWxsO0Y2RkUKK1Rpd25hcm1lbmlhbjswNTRGCitUbGluZWJlbG93OzFFNkUKK1Rtb25vc3BhY2U7RkYzNAorVG9hcm1lbmlhbjswNTM5CitUb25lZml2ZTswMUJDCitUb25lc2l4OzAxODQKK1RvbmV0d287MDFBNworVHJldHJvZmxleGhvb2s7MDFBRQorVHNlY3lyaWxsaWM7MDQyNgorVHNoZWN5cmlsbGljOzA0MEIKK1RzbWFsbDtGNzc0CitUd2VsdmVyb21hbjsyMTZCCitUd29yb21hbjsyMTYxCitVOzAwNTUKK1VhY3V0ZTswMERBCitVYWN1dGVzbWFsbDtGN0ZBCitVYnJldmU7MDE2QworVWNhcm9uOzAxRDMKK1VjaXJjbGU7MjRDQQorVWNpcmN1bWZsZXg7MDBEQgorVWNpcmN1bWZsZXhiZWxvdzsxRTc2CitVY2lyY3VtZmxleHNtYWxsO0Y3RkIKK1VjeXJpbGxpYzswNDIzCitVZGJsYWN1dGU7MDE3MAorVWRibGdyYXZlOzAyMTQKK1VkaWVyZXNpczswMERDCitVZGllcmVzaXNhY3V0ZTswMUQ3CitVZGllcmVzaXNiZWxvdzsxRTcyCitVZGllcmVzaXNjYXJvbjswMUQ5CitVZGllcmVzaXNjeXJpbGxpYzswNEYwCitVZGllcmVzaXNncmF2ZTswMURCCitVZGllcmVzaXNtYWNyb247MDFENQorVWRpZXJlc2lzc21hbGw7RjdGQworVWRvdGJlbG93OzFFRTQKK1VncmF2ZTswMEQ5CitVZ3JhdmVzbWFsbDtGN0Y5CitVaG9va2Fib3ZlOzFFRTYKK1Vob3JuOzAxQUYKK1Vob3JuYWN1dGU7MUVFOAorVWhvcm5kb3RiZWxvdzsxRUYwCitVaG9ybmdyYXZlOzFFRUEKK1Vob3JuaG9va2Fib3ZlOzFFRUMKK1Vob3JudGlsZGU7MUVFRQorVWh1bmdhcnVtbGF1dDswMTcwCitVaHVuZ2FydW1sYXV0Y3lyaWxsaWM7MDRGMgorVWludmVydGVkYnJldmU7MDIxNgorVWtjeXJpbGxpYzswNDc4CitVbWFjcm9uOzAxNkEKK1VtYWNyb25jeXJpbGxpYzswNEVFCitVbWFjcm9uZGllcmVzaXM7MUU3QQorVW1vbm9zcGFjZTtGRjM1CitVb2dvbmVrOzAxNzIKK1Vwc2lsb247MDNBNQorVXBzaWxvbjE7MDNEMgorVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrOzAzRDMKK1Vwc2lsb25hZnJpY2FuOzAxQjEKK1Vwc2lsb25kaWVyZXNpczswM0FCCitVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWs7MDNENAorVXBzaWxvbmhvb2tzeW1ib2w7MDNEMgorVXBzaWxvbnRvbm9zOzAzOEUKK1VyaW5nOzAxNkUKK1VzaG9ydGN5cmlsbGljOzA0MEUKK1VzbWFsbDtGNzc1CitVc3RyYWlnaHRjeXJpbGxpYzswNEFFCitVc3RyYWlnaHRzdHJva2VjeXJpbGxpYzswNEIwCitVdGlsZGU7MDE2OAorVXRpbGRlYWN1dGU7MUU3OAorVXRpbGRlYmVsb3c7MUU3NAorVjswMDU2CitWY2lyY2xlOzI0Q0IKK1Zkb3RiZWxvdzsxRTdFCitWZWN5cmlsbGljOzA0MTIKK1Zld2FybWVuaWFuOzA1NEUKK1Zob29rOzAxQjIKK1Ztb25vc3BhY2U7RkYzNgorVm9hcm1lbmlhbjswNTQ4CitWc21hbGw7Rjc3NgorVnRpbGRlOzFFN0MKK1c7MDA1NworV2FjdXRlOzFFODIKK1djaXJjbGU7MjRDQworV2NpcmN1bWZsZXg7MDE3NAorV2RpZXJlc2lzOzFFODQKK1dkb3RhY2NlbnQ7MUU4NgorV2RvdGJlbG93OzFFODgKK1dncmF2ZTsxRTgwCitXbW9ub3NwYWNlO0ZGMzcKK1dzbWFsbDtGNzc3CitYOzAwNTgKK1hjaXJjbGU7MjRDRAorWGRpZXJlc2lzOzFFOEMKK1hkb3RhY2NlbnQ7MUU4QQorWGVoYXJtZW5pYW47MDUzRAorWGk7MDM5RQorWG1vbm9zcGFjZTtGRjM4CitYc21hbGw7Rjc3OAorWTswMDU5CitZYWN1dGU7MDBERAorWWFjdXRlc21hbGw7RjdGRAorWWF0Y3lyaWxsaWM7MDQ2MgorWWNpcmNsZTsyNENFCitZY2lyY3VtZmxleDswMTc2CitZZGllcmVzaXM7MDE3OAorWWRpZXJlc2lzc21hbGw7RjdGRgorWWRvdGFjY2VudDsxRThFCitZZG90YmVsb3c7MUVGNAorWWVyaWN5cmlsbGljOzA0MkIKK1llcnVkaWVyZXNpc2N5cmlsbGljOzA0RjgKK1lncmF2ZTsxRUYyCitZaG9vazswMUIzCitZaG9va2Fib3ZlOzFFRjYKK1lpYXJtZW5pYW47MDU0NQorWWljeXJpbGxpYzswNDA3CitZaXduYXJtZW5pYW47MDU1MgorWW1vbm9zcGFjZTtGRjM5CitZc21hbGw7Rjc3OQorWXRpbGRlOzFFRjgKK1l1c2JpZ2N5cmlsbGljOzA0NkEKK1l1c2JpZ2lvdGlmaWVkY3lyaWxsaWM7MDQ2QworWXVzbGl0dGxlY3lyaWxsaWM7MDQ2NgorWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYzswNDY4CitaOzAwNUEKK1phYXJtZW5pYW47MDUzNgorWmFjdXRlOzAxNzkKK1pjYXJvbjswMTdECitaY2Fyb25zbWFsbDtGNkZGCitaY2lyY2xlOzI0Q0YKK1pjaXJjdW1mbGV4OzFFOTAKK1pkb3Q7MDE3QgorWmRvdGFjY2VudDswMTdCCitaZG90YmVsb3c7MUU5MgorWmVjeXJpbGxpYzswNDE3CitaZWRlc2NlbmRlcmN5cmlsbGljOzA0OTgKK1plZGllcmVzaXNjeXJpbGxpYzswNERFCitaZXRhOzAzOTYKK1poZWFybWVuaWFuOzA1M0EKK1poZWJyZXZlY3lyaWxsaWM7MDRDMQorWmhlY3lyaWxsaWM7MDQxNgorWmhlZGVzY2VuZGVyY3lyaWxsaWM7MDQ5NgorWmhlZGllcmVzaXNjeXJpbGxpYzswNERDCitabGluZWJlbG93OzFFOTQKK1ptb25vc3BhY2U7RkYzQQorWnNtYWxsO0Y3N0EKK1pzdHJva2U7MDFCNQorYTswMDYxCithYWJlbmdhbGk7MDk4NgorYWFjdXRlOzAwRTEKK2FhZGV2YTswOTA2CithYWd1amFyYXRpOzBBODYKK2FhZ3VybXVraGk7MEEwNgorYWFtYXRyYWd1cm11a2hpOzBBM0UKK2FhcnVzcXVhcmU7MzMwMworYWF2b3dlbHNpZ25iZW5nYWxpOzA5QkUKK2Fhdm93ZWxzaWduZGV2YTswOTNFCithYXZvd2Vsc2lnbmd1amFyYXRpOzBBQkUKK2FiYnJldmlhdGlvbm1hcmthcm1lbmlhbjswNTVGCithYmJyZXZpYXRpb25zaWduZGV2YTswOTcwCithYmVuZ2FsaTswOTg1CithYm9wb21vZm87MzExQQorYWJyZXZlOzAxMDMKK2FicmV2ZWFjdXRlOzFFQUYKK2FicmV2ZWN5cmlsbGljOzA0RDEKK2FicmV2ZWRvdGJlbG93OzFFQjcKK2FicmV2ZWdyYXZlOzFFQjEKK2FicmV2ZWhvb2thYm92ZTsxRUIzCithYnJldmV0aWxkZTsxRUI1CithY2Fyb247MDFDRQorYWNpcmNsZTsyNEQwCithY2lyY3VtZmxleDswMEUyCithY2lyY3VtZmxleGFjdXRlOzFFQTUKK2FjaXJjdW1mbGV4ZG90YmVsb3c7MUVBRAorYWNpcmN1bWZsZXhncmF2ZTsxRUE3CithY2lyY3VtZmxleGhvb2thYm92ZTsxRUE5CithY2lyY3VtZmxleHRpbGRlOzFFQUIKK2FjdXRlOzAwQjQKK2FjdXRlYmVsb3djbWI7MDMxNworYWN1dGVjbWI7MDMwMQorYWN1dGVjb21iOzAzMDEKK2FjdXRlZGV2YTswOTU0CithY3V0ZWxvd21vZDswMkNGCithY3V0ZXRvbmVjbWI7MDM0MQorYWN5cmlsbGljOzA0MzAKK2FkYmxncmF2ZTswMjAxCithZGRha2d1cm11a2hpOzBBNzEKK2FkZXZhOzA5MDUKK2FkaWVyZXNpczswMEU0CithZGllcmVzaXNjeXJpbGxpYzswNEQzCithZGllcmVzaXNtYWNyb247MDFERgorYWRvdGJlbG93OzFFQTEKK2Fkb3RtYWNyb247MDFFMQorYWU7MDBFNgorYWVhY3V0ZTswMUZECithZWtvcmVhbjszMTUwCithZW1hY3JvbjswMUUzCithZmlpMDAyMDg7MjAxNQorYWZpaTA4OTQxOzIwQTQKK2FmaWkxMDAxNzswNDEwCithZmlpMTAwMTg7MDQxMQorYWZpaTEwMDE5OzA0MTIKK2FmaWkxMDAyMDswNDEzCithZmlpMTAwMjE7MDQxNAorYWZpaTEwMDIyOzA0MTUKK2FmaWkxMDAyMzswNDAxCithZmlpMTAwMjQ7MDQxNgorYWZpaTEwMDI1OzA0MTcKK2FmaWkxMDAyNjswNDE4CithZmlpMTAwMjc7MDQxOQorYWZpaTEwMDI4OzA0MUEKK2FmaWkxMDAyOTswNDFCCithZmlpMTAwMzA7MDQxQworYWZpaTEwMDMxOzA0MUQKK2FmaWkxMDAzMjswNDFFCithZmlpMTAwMzM7MDQxRgorYWZpaTEwMDM0OzA0MjAKK2FmaWkxMDAzNTswNDIxCithZmlpMTAwMzY7MDQyMgorYWZpaTEwMDM3OzA0MjMKK2FmaWkxMDAzODswNDI0CithZmlpMTAwMzk7MDQyNQorYWZpaTEwMDQwOzA0MjYKK2FmaWkxMDA0MTswNDI3CithZmlpMTAwNDI7MDQyOAorYWZpaTEwMDQzOzA0MjkKK2FmaWkxMDA0NDswNDJBCithZmlpMTAwNDU7MDQyQgorYWZpaTEwMDQ2OzA0MkMKK2FmaWkxMDA0NzswNDJECithZmlpMTAwNDg7MDQyRQorYWZpaTEwMDQ5OzA0MkYKK2FmaWkxMDA1MDswNDkwCithZmlpMTAwNTE7MDQwMgorYWZpaTEwMDUyOzA0MDMKK2FmaWkxMDA1MzswNDA0CithZmlpMTAwNTQ7MDQwNQorYWZpaTEwMDU1OzA0MDYKK2FmaWkxMDA1NjswNDA3CithZmlpMTAwNTc7MDQwOAorYWZpaTEwMDU4OzA0MDkKK2FmaWkxMDA1OTswNDBBCithZmlpMTAwNjA7MDQwQgorYWZpaTEwMDYxOzA0MEMKK2FmaWkxMDA2MjswNDBFCithZmlpMTAwNjM7RjZDNAorYWZpaTEwMDY0O0Y2QzUKK2FmaWkxMDA2NTswNDMwCithZmlpMTAwNjY7MDQzMQorYWZpaTEwMDY3OzA0MzIKK2FmaWkxMDA2ODswNDMzCithZmlpMTAwNjk7MDQzNAorYWZpaTEwMDcwOzA0MzUKK2FmaWkxMDA3MTswNDUxCithZmlpMTAwNzI7MDQzNgorYWZpaTEwMDczOzA0MzcKK2FmaWkxMDA3NDswNDM4CithZmlpMTAwNzU7MDQzOQorYWZpaTEwMDc2OzA0M0EKK2FmaWkxMDA3NzswNDNCCithZmlpMTAwNzg7MDQzQworYWZpaTEwMDc5OzA0M0QKK2FmaWkxMDA4MDswNDNFCithZmlpMTAwODE7MDQzRgorYWZpaTEwMDgyOzA0NDAKK2FmaWkxMDA4MzswNDQxCithZmlpMTAwODQ7MDQ0MgorYWZpaTEwMDg1OzA0NDMKK2FmaWkxMDA4NjswNDQ0CithZmlpMTAwODc7MDQ0NQorYWZpaTEwMDg4OzA0NDYKK2FmaWkxMDA4OTswNDQ3CithZmlpMTAwOTA7MDQ0OAorYWZpaTEwMDkxOzA0NDkKK2FmaWkxMDA5MjswNDRBCithZmlpMTAwOTM7MDQ0QgorYWZpaTEwMDk0OzA0NEMKK2FmaWkxMDA5NTswNDRECithZmlpMTAwOTY7MDQ0RQorYWZpaTEwMDk3OzA0NEYKK2FmaWkxMDA5ODswNDkxCithZmlpMTAwOTk7MDQ1MgorYWZpaTEwMTAwOzA0NTMKK2FmaWkxMDEwMTswNDU0CithZmlpMTAxMDI7MDQ1NQorYWZpaTEwMTAzOzA0NTYKK2FmaWkxMDEwNDswNDU3CithZmlpMTAxMDU7MDQ1OAorYWZpaTEwMTA2OzA0NTkKK2FmaWkxMDEwNzswNDVBCithZmlpMTAxMDg7MDQ1QgorYWZpaTEwMTA5OzA0NUMKK2FmaWkxMDExMDswNDVFCithZmlpMTAxNDU7MDQwRgorYWZpaTEwMTQ2OzA0NjIKK2FmaWkxMDE0NzswNDcyCithZmlpMTAxNDg7MDQ3NAorYWZpaTEwMTkyO0Y2QzYKK2FmaWkxMDE5MzswNDVGCithZmlpMTAxOTQ7MDQ2MworYWZpaTEwMTk1OzA0NzMKK2FmaWkxMDE5NjswNDc1CithZmlpMTA4MzE7RjZDNworYWZpaTEwODMyO0Y2QzgKK2FmaWkxMDg0NjswNEQ5CithZmlpMjk5OzIwMEUKK2FmaWkzMDA7MjAwRgorYWZpaTMwMTsyMDBECithZmlpNTczODE7MDY2QQorYWZpaTU3Mzg4OzA2MEMKK2FmaWk1NzM5MjswNjYwCithZmlpNTczOTM7MDY2MQorYWZpaTU3Mzk0OzA2NjIKK2FmaWk1NzM5NTswNjYzCithZmlpNTczOTY7MDY2NAorYWZpaTU3Mzk3OzA2NjUKK2FmaWk1NzM5ODswNjY2CithZmlpNTczOTk7MDY2NworYWZpaTU3NDAwOzA2NjgKK2FmaWk1NzQwMTswNjY5CithZmlpNTc0MDM7MDYxQgorYWZpaTU3NDA3OzA2MUYKK2FmaWk1NzQwOTswNjIxCithZmlpNTc0MTA7MDYyMgorYWZpaTU3NDExOzA2MjMKK2FmaWk1NzQxMjswNjI0CithZmlpNTc0MTM7MDYyNQorYWZpaTU3NDE0OzA2MjYKK2FmaWk1NzQxNTswNjI3CithZmlpNTc0MTY7MDYyOAorYWZpaTU3NDE3OzA2MjkKK2FmaWk1NzQxODswNjJBCithZmlpNTc0MTk7MDYyQgorYWZpaTU3NDIwOzA2MkMKK2FmaWk1NzQyMTswNjJECithZmlpNTc0MjI7MDYyRQorYWZpaTU3NDIzOzA2MkYKK2FmaWk1NzQyNDswNjMwCithZmlpNTc0MjU7MDYzMQorYWZpaTU3NDI2OzA2MzIKK2FmaWk1NzQyNzswNjMzCithZmlpNTc0Mjg7MDYzNAorYWZpaTU3NDI5OzA2MzUKK2FmaWk1NzQzMDswNjM2CithZmlpNTc0MzE7MDYzNworYWZpaTU3NDMyOzA2MzgKK2FmaWk1NzQzMzswNjM5CithZmlpNTc0MzQ7MDYzQQorYWZpaTU3NDQwOzA2NDAKK2FmaWk1NzQ0MTswNjQxCithZmlpNTc0NDI7MDY0MgorYWZpaTU3NDQzOzA2NDMKK2FmaWk1NzQ0NDswNjQ0CithZmlpNTc0NDU7MDY0NQorYWZpaTU3NDQ2OzA2NDYKK2FmaWk1NzQ0ODswNjQ4CithZmlpNTc0NDk7MDY0OQorYWZpaTU3NDUwOzA2NEEKK2FmaWk1NzQ1MTswNjRCCithZmlpNTc0NTI7MDY0QworYWZpaTU3NDUzOzA2NEQKK2FmaWk1NzQ1NDswNjRFCithZmlpNTc0NTU7MDY0RgorYWZpaTU3NDU2OzA2NTAKK2FmaWk1NzQ1NzswNjUxCithZmlpNTc0NTg7MDY1MgorYWZpaTU3NDcwOzA2NDcKK2FmaWk1NzUwNTswNkE0CithZmlpNTc1MDY7MDY3RQorYWZpaTU3NTA3OzA2ODYKK2FmaWk1NzUwODswNjk4CithZmlpNTc1MDk7MDZBRgorYWZpaTU3NTExOzA2NzkKK2FmaWk1NzUxMjswNjg4CithZmlpNTc1MTM7MDY5MQorYWZpaTU3NTE0OzA2QkEKK2FmaWk1NzUxOTswNkQyCithZmlpNTc1MzQ7MDZENQorYWZpaTU3NjM2OzIwQUEKK2FmaWk1NzY0NTswNUJFCithZmlpNTc2NTg7MDVDMworYWZpaTU3NjY0OzA1RDAKK2FmaWk1NzY2NTswNUQxCithZmlpNTc2NjY7MDVEMgorYWZpaTU3NjY3OzA1RDMKK2FmaWk1NzY2ODswNUQ0CithZmlpNTc2Njk7MDVENQorYWZpaTU3NjcwOzA1RDYKK2FmaWk1NzY3MTswNUQ3CithZmlpNTc2NzI7MDVEOAorYWZpaTU3NjczOzA1RDkKK2FmaWk1NzY3NDswNURBCithZmlpNTc2NzU7MDVEQgorYWZpaTU3Njc2OzA1REMKK2FmaWk1NzY3NzswNURECithZmlpNTc2Nzg7MDVERQorYWZpaTU3Njc5OzA1REYKK2FmaWk1NzY4MDswNUUwCithZmlpNTc2ODE7MDVFMQorYWZpaTU3NjgyOzA1RTIKK2FmaWk1NzY4MzswNUUzCithZmlpNTc2ODQ7MDVFNAorYWZpaTU3Njg1OzA1RTUKK2FmaWk1NzY4NjswNUU2CithZmlpNTc2ODc7MDVFNworYWZpaTU3Njg4OzA1RTgKK2FmaWk1NzY4OTswNUU5CithZmlpNTc2OTA7MDVFQQorYWZpaTU3Njk0O0ZCMkEKK2FmaWk1NzY5NTtGQjJCCithZmlpNTc3MDA7RkI0QgorYWZpaTU3NzA1O0ZCMUYKK2FmaWk1NzcxNjswNUYwCithZmlpNTc3MTc7MDVGMQorYWZpaTU3NzE4OzA1RjIKK2FmaWk1NzcyMztGQjM1CithZmlpNTc3OTM7MDVCNAorYWZpaTU3Nzk0OzA1QjUKK2FmaWk1Nzc5NTswNUI2CithZmlpNTc3OTY7MDVCQgorYWZpaTU3Nzk3OzA1QjgKK2FmaWk1Nzc5ODswNUI3CithZmlpNTc3OTk7MDVCMAorYWZpaTU3ODAwOzA1QjIKK2FmaWk1NzgwMTswNUIxCithZmlpNTc4MDI7MDVCMworYWZpaTU3ODAzOzA1QzIKK2FmaWk1NzgwNDswNUMxCithZmlpNTc4MDY7MDVCOQorYWZpaTU3ODA3OzA1QkMKK2FmaWk1NzgzOTswNUJECithZmlpNTc4NDE7MDVCRgorYWZpaTU3ODQyOzA1QzAKK2FmaWk1NzkyOTswMkJDCithZmlpNjEyNDg7MjEwNQorYWZpaTYxMjg5OzIxMTMKK2FmaWk2MTM1MjsyMTE2CithZmlpNjE1NzM7MjAyQworYWZpaTYxNTc0OzIwMkQKK2FmaWk2MTU3NTsyMDJFCithZmlpNjE2NjQ7MjAwQworYWZpaTYzMTY3OzA2NkQKK2FmaWk2NDkzNzswMkJECithZ3JhdmU7MDBFMAorYWd1amFyYXRpOzBBODUKK2FndXJtdWtoaTswQTA1CithaGlyYWdhbmE7MzA0MgorYWhvb2thYm92ZTsxRUEzCithaWJlbmdhbGk7MDk5MAorYWlib3BvbW9mbzszMTFFCithaWRldmE7MDkxMAorYWllY3lyaWxsaWM7MDRENQorYWlndWphcmF0aTswQTkwCithaWd1cm11a2hpOzBBMTAKK2FpbWF0cmFndXJtdWtoaTswQTQ4CithaW5hcmFiaWM7MDYzOQorYWluZmluYWxhcmFiaWM7RkVDQQorYWluaW5pdGlhbGFyYWJpYztGRUNCCithaW5tZWRpYWxhcmFiaWM7RkVDQworYWludmVydGVkYnJldmU7MDIwMworYWl2b3dlbHNpZ25iZW5nYWxpOzA5QzgKK2Fpdm93ZWxzaWduZGV2YTswOTQ4CithaXZvd2Vsc2lnbmd1amFyYXRpOzBBQzgKK2FrYXRha2FuYTszMEEyCitha2F0YWthbmFoYWxmd2lkdGg7RkY3MQorYWtvcmVhbjszMTRGCithbGVmOzA1RDAKK2FsZWZhcmFiaWM7MDYyNworYWxlZmRhZ2VzaGhlYnJldztGQjMwCithbGVmZmluYWxhcmFiaWM7RkU4RQorYWxlZmhhbXphYWJvdmVhcmFiaWM7MDYyMworYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYztGRTg0CithbGVmaGFtemFiZWxvd2FyYWJpYzswNjI1CithbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljO0ZFODgKK2FsZWZoZWJyZXc7MDVEMAorYWxlZmxhbWVkaGVicmV3O0ZCNEYKK2FsZWZtYWRkYWFib3ZlYXJhYmljOzA2MjIKK2FsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWM7RkU4MgorYWxlZm1ha3N1cmFhcmFiaWM7MDY0OQorYWxlZm1ha3N1cmFmaW5hbGFyYWJpYztGRUYwCithbGVmbWFrc3VyYWluaXRpYWxhcmFiaWM7RkVGMworYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM7RkVGNAorYWxlZnBhdGFoaGVicmV3O0ZCMkUKK2FsZWZxYW1hdHNoZWJyZXc7RkIyRgorYWxlcGg7MjEzNQorYWxsZXF1YWw7MjI0QworYWxwaGE7MDNCMQorYWxwaGF0b25vczswM0FDCithbWFjcm9uOzAxMDEKK2Ftb25vc3BhY2U7RkY0MQorYW1wZXJzYW5kOzAwMjYKK2FtcGVyc2FuZG1vbm9zcGFjZTtGRjA2CithbXBlcnNhbmRzbWFsbDtGNzI2CithbXNxdWFyZTszM0MyCithbmJvcG9tb2ZvOzMxMjIKK2FuZ2JvcG9tb2ZvOzMxMjQKK2FuZ2toYW5raHV0aGFpOzBFNUEKK2FuZ2xlOzIyMjAKK2FuZ2xlYnJhY2tldGxlZnQ7MzAwOAorYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsO0ZFM0YKK2FuZ2xlYnJhY2tldHJpZ2h0OzMwMDkKK2FuZ2xlYnJhY2tldHJpZ2h0dmVydGljYWw7RkU0MAorYW5nbGVsZWZ0OzIzMjkKK2FuZ2xlcmlnaHQ7MjMyQQorYW5nc3Ryb207MjEyQgorYW5vdGVsZWlhOzAzODcKK2FudWRhdHRhZGV2YTswOTUyCithbnVzdmFyYWJlbmdhbGk7MDk4MgorYW51c3ZhcmFkZXZhOzA5MDIKK2FudXN2YXJhZ3VqYXJhdGk7MEE4MgorYW9nb25lazswMTA1CithcGFhdG9zcXVhcmU7MzMwMAorYXBhcmVuOzI0OUMKK2Fwb3N0cm9waGVhcm1lbmlhbjswNTVBCithcG9zdHJvcGhlbW9kOzAyQkMKK2FwcGxlO0Y4RkYKK2FwcHJvYWNoZXM7MjI1MAorYXBwcm94ZXF1YWw7MjI0OAorYXBwcm94ZXF1YWxvcmltYWdlOzIyNTIKK2FwcHJveGltYXRlbHllcXVhbDsyMjQ1CithcmFlYWVrb3JlYW47MzE4RQorYXJhZWFrb3JlYW47MzE4RAorYXJjOzIzMTIKK2FyaWdodGhhbGZyaW5nOzFFOUEKK2FyaW5nOzAwRTUKK2FyaW5nYWN1dGU7MDFGQgorYXJpbmdiZWxvdzsxRTAxCithcnJvd2JvdGg7MjE5NAorYXJyb3dkYXNoZG93bjsyMUUzCithcnJvd2Rhc2hsZWZ0OzIxRTAKK2Fycm93ZGFzaHJpZ2h0OzIxRTIKK2Fycm93ZGFzaHVwOzIxRTEKK2Fycm93ZGJsYm90aDsyMUQ0CithcnJvd2RibGRvd247MjFEMworYXJyb3dkYmxsZWZ0OzIxRDAKK2Fycm93ZGJscmlnaHQ7MjFEMgorYXJyb3dkYmx1cDsyMUQxCithcnJvd2Rvd247MjE5MworYXJyb3dkb3dubGVmdDsyMTk5CithcnJvd2Rvd25yaWdodDsyMTk4CithcnJvd2Rvd253aGl0ZTsyMUU5CithcnJvd2hlYWRkb3dubW9kOzAyQzUKK2Fycm93aGVhZGxlZnRtb2Q7MDJDMgorYXJyb3doZWFkcmlnaHRtb2Q7MDJDMworYXJyb3doZWFkdXBtb2Q7MDJDNAorYXJyb3dob3JpemV4O0Y4RTcKK2Fycm93bGVmdDsyMTkwCithcnJvd2xlZnRkYmw7MjFEMAorYXJyb3dsZWZ0ZGJsc3Ryb2tlOzIxQ0QKK2Fycm93bGVmdG92ZXJyaWdodDsyMUM2CithcnJvd2xlZnR3aGl0ZTsyMUU2CithcnJvd3JpZ2h0OzIxOTIKK2Fycm93cmlnaHRkYmxzdHJva2U7MjFDRgorYXJyb3dyaWdodGhlYXZ5OzI3OUUKK2Fycm93cmlnaHRvdmVybGVmdDsyMUM0CithcnJvd3JpZ2h0d2hpdGU7MjFFOAorYXJyb3d0YWJsZWZ0OzIxRTQKK2Fycm93dGFicmlnaHQ7MjFFNQorYXJyb3d1cDsyMTkxCithcnJvd3VwZG47MjE5NQorYXJyb3d1cGRuYnNlOzIxQTgKK2Fycm93dXBkb3duYmFzZTsyMUE4CithcnJvd3VwbGVmdDsyMTk2CithcnJvd3VwbGVmdG9mZG93bjsyMUM1CithcnJvd3VwcmlnaHQ7MjE5NworYXJyb3d1cHdoaXRlOzIxRTcKK2Fycm93dmVydGV4O0Y4RTYKK2FzY2lpY2lyY3VtOzAwNUUKK2FzY2lpY2lyY3VtbW9ub3NwYWNlO0ZGM0UKK2FzY2lpdGlsZGU7MDA3RQorYXNjaWl0aWxkZW1vbm9zcGFjZTtGRjVFCithc2NyaXB0OzAyNTEKK2FzY3JpcHR0dXJuZWQ7MDI1MgorYXNtYWxsaGlyYWdhbmE7MzA0MQorYXNtYWxsa2F0YWthbmE7MzBBMQorYXNtYWxsa2F0YWthbmFoYWxmd2lkdGg7RkY2NworYXN0ZXJpc2s7MDAyQQorYXN0ZXJpc2thbHRvbmVhcmFiaWM7MDY2RAorYXN0ZXJpc2thcmFiaWM7MDY2RAorYXN0ZXJpc2ttYXRoOzIyMTcKK2FzdGVyaXNrbW9ub3NwYWNlO0ZGMEEKK2FzdGVyaXNrc21hbGw7RkU2MQorYXN0ZXJpc207MjA0MgorYXN1cGVyaW9yO0Y2RTkKK2FzeW1wdG90aWNhbGx5ZXF1YWw7MjI0MworYXQ7MDA0MAorYXRpbGRlOzAwRTMKK2F0bW9ub3NwYWNlO0ZGMjAKK2F0c21hbGw7RkU2QgorYXR1cm5lZDswMjUwCithdWJlbmdhbGk7MDk5NAorYXVib3BvbW9mbzszMTIwCithdWRldmE7MDkxNAorYXVndWphcmF0aTswQTk0CithdWd1cm11a2hpOzBBMTQKK2F1bGVuZ3RobWFya2JlbmdhbGk7MDlENworYXVtYXRyYWd1cm11a2hpOzBBNEMKK2F1dm93ZWxzaWduYmVuZ2FsaTswOUNDCithdXZvd2Vsc2lnbmRldmE7MDk0QworYXV2b3dlbHNpZ25ndWphcmF0aTswQUNDCithdmFncmFoYWRldmE7MDkzRAorYXliYXJtZW5pYW47MDU2MQorYXlpbjswNUUyCitheWluYWx0b25laGVicmV3O0ZCMjAKK2F5aW5oZWJyZXc7MDVFMgorYjswMDYyCitiYWJlbmdhbGk7MDlBQworYmFja3NsYXNoOzAwNUMKK2JhY2tzbGFzaG1vbm9zcGFjZTtGRjNDCitiYWRldmE7MDkyQworYmFndWphcmF0aTswQUFDCitiYWd1cm11a2hpOzBBMkMKK2JhaGlyYWdhbmE7MzA3MAorYmFodHRoYWk7MEUzRgorYmFrYXRha2FuYTszMEQwCitiYXI7MDA3QworYmFybW9ub3NwYWNlO0ZGNUMKK2Jib3BvbW9mbzszMTA1CitiY2lyY2xlOzI0RDEKK2Jkb3RhY2NlbnQ7MUUwMworYmRvdGJlbG93OzFFMDUKK2JlYW1lZHNpeHRlZW50aG5vdGVzOzI2NkMKK2JlY2F1c2U7MjIzNQorYmVjeXJpbGxpYzswNDMxCitiZWhhcmFiaWM7MDYyOAorYmVoZmluYWxhcmFiaWM7RkU5MAorYmVoaW5pdGlhbGFyYWJpYztGRTkxCitiZWhpcmFnYW5hOzMwNzkKK2JlaG1lZGlhbGFyYWJpYztGRTkyCitiZWhtZWVtaW5pdGlhbGFyYWJpYztGQzlGCitiZWhtZWVtaXNvbGF0ZWRhcmFiaWM7RkMwOAorYmVobm9vbmZpbmFsYXJhYmljO0ZDNkQKK2Jla2F0YWthbmE7MzBEOQorYmVuYXJtZW5pYW47MDU2MgorYmV0OzA1RDEKK2JldGE7MDNCMgorYmV0YXN5bWJvbGdyZWVrOzAzRDAKK2JldGRhZ2VzaDtGQjMxCitiZXRkYWdlc2hoZWJyZXc7RkIzMQorYmV0aGVicmV3OzA1RDEKK2JldHJhZmVoZWJyZXc7RkI0QworYmhhYmVuZ2FsaTswOUFECitiaGFkZXZhOzA5MkQKK2JoYWd1amFyYXRpOzBBQUQKK2JoYWd1cm11a2hpOzBBMkQKK2Job29rOzAyNTMKK2JpaGlyYWdhbmE7MzA3MworYmlrYXRha2FuYTszMEQzCitiaWxhYmlhbGNsaWNrOzAyOTgKK2JpbmRpZ3VybXVraGk7MEEwMgorYmlydXNxdWFyZTszMzMxCitibGFja2NpcmNsZTsyNUNGCitibGFja2RpYW1vbmQ7MjVDNgorYmxhY2tkb3ducG9pbnRpbmd0cmlhbmdsZTsyNUJDCitibGFja2xlZnRwb2ludGluZ3BvaW50ZXI7MjVDNAorYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZTsyNUMwCitibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdDszMDEwCitibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsO0ZFM0IKK2JsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodDszMDExCitibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHR2ZXJ0aWNhbDtGRTNDCitibGFja2xvd2VybGVmdHRyaWFuZ2xlOzI1RTMKK2JsYWNrbG93ZXJyaWdodHRyaWFuZ2xlOzI1RTIKK2JsYWNrcmVjdGFuZ2xlOzI1QUMKK2JsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXI7MjVCQQorYmxhY2tyaWdodHBvaW50aW5ndHJpYW5nbGU7MjVCNgorYmxhY2tzbWFsbHNxdWFyZTsyNUFBCitibGFja3NtaWxpbmdmYWNlOzI2M0IKK2JsYWNrc3F1YXJlOzI1QTAKK2JsYWNrc3RhcjsyNjA1CitibGFja3VwcGVybGVmdHRyaWFuZ2xlOzI1RTQKK2JsYWNrdXBwZXJyaWdodHRyaWFuZ2xlOzI1RTUKK2JsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU7MjVCNAorYmxhY2t1cHBvaW50aW5ndHJpYW5nbGU7MjVCMgorYmxhbms7MjQyMworYmxpbmViZWxvdzsxRTA3CitibG9jazsyNTg4CitibW9ub3NwYWNlO0ZGNDIKK2JvYmFpbWFpdGhhaTswRTFBCitib2hpcmFnYW5hOzMwN0MKK2Jva2F0YWthbmE7MzBEQworYnBhcmVuOzI0OUQKK2Jxc3F1YXJlOzMzQzMKK2JyYWNlZXg7RjhGNAorYnJhY2VsZWZ0OzAwN0IKK2JyYWNlbGVmdGJ0O0Y4RjMKK2JyYWNlbGVmdG1pZDtGOEYyCiticmFjZWxlZnRtb25vc3BhY2U7RkY1QgorYnJhY2VsZWZ0c21hbGw7RkU1QgorYnJhY2VsZWZ0dHA7RjhGMQorYnJhY2VsZWZ0dmVydGljYWw7RkUzNworYnJhY2VyaWdodDswMDdECiticmFjZXJpZ2h0YnQ7RjhGRQorYnJhY2VyaWdodG1pZDtGOEZECiticmFjZXJpZ2h0bW9ub3NwYWNlO0ZGNUQKK2JyYWNlcmlnaHRzbWFsbDtGRTVDCiticmFjZXJpZ2h0dHA7RjhGQworYnJhY2VyaWdodHZlcnRpY2FsO0ZFMzgKK2JyYWNrZXRsZWZ0OzAwNUIKK2JyYWNrZXRsZWZ0YnQ7RjhGMAorYnJhY2tldGxlZnRleDtGOEVGCiticmFja2V0bGVmdG1vbm9zcGFjZTtGRjNCCiticmFja2V0bGVmdHRwO0Y4RUUKK2JyYWNrZXRyaWdodDswMDVECiticmFja2V0cmlnaHRidDtGOEZCCiticmFja2V0cmlnaHRleDtGOEZBCiticmFja2V0cmlnaHRtb25vc3BhY2U7RkYzRAorYnJhY2tldHJpZ2h0dHA7RjhGOQorYnJldmU7MDJEOAorYnJldmViZWxvd2NtYjswMzJFCiticmV2ZWNtYjswMzA2CiticmV2ZWludmVydGVkYmVsb3djbWI7MDMyRgorYnJldmVpbnZlcnRlZGNtYjswMzExCiticmV2ZWludmVydGVkZG91YmxlY21iOzAzNjEKK2JyaWRnZWJlbG93Y21iOzAzMkEKK2JyaWRnZWludmVydGVkYmVsb3djbWI7MDMzQQorYnJva2VuYmFyOzAwQTYKK2JzdHJva2U7MDE4MAorYnN1cGVyaW9yO0Y2RUEKK2J0b3BiYXI7MDE4MworYnVoaXJhZ2FuYTszMDc2CitidWthdGFrYW5hOzMwRDYKK2J1bGxldDsyMDIyCitidWxsZXRpbnZlcnNlOzI1RDgKK2J1bGxldG9wZXJhdG9yOzIyMTkKK2J1bGxzZXllOzI1Q0UKK2M7MDA2MworY2Fhcm1lbmlhbjswNTZFCitjYWJlbmdhbGk7MDk5QQorY2FjdXRlOzAxMDcKK2NhZGV2YTswOTFBCitjYWd1amFyYXRpOzBBOUEKK2NhZ3VybXVraGk7MEExQQorY2Fsc3F1YXJlOzMzODgKK2NhbmRyYWJpbmR1YmVuZ2FsaTswOTgxCitjYW5kcmFiaW5kdWNtYjswMzEwCitjYW5kcmFiaW5kdWRldmE7MDkwMQorY2FuZHJhYmluZHVndWphcmF0aTswQTgxCitjYXBzbG9jazsyMUVBCitjYXJlb2Y7MjEwNQorY2Fyb247MDJDNworY2Fyb25iZWxvd2NtYjswMzJDCitjYXJvbmNtYjswMzBDCitjYXJyaWFnZXJldHVybjsyMUI1CitjYm9wb21vZm87MzExOAorY2Nhcm9uOzAxMEQKK2NjZWRpbGxhOzAwRTcKK2NjZWRpbGxhYWN1dGU7MUUwOQorY2NpcmNsZTsyNEQyCitjY2lyY3VtZmxleDswMTA5CitjY3VybDswMjU1CitjZG90OzAxMEIKK2Nkb3RhY2NlbnQ7MDEwQgorY2RzcXVhcmU7MzNDNQorY2VkaWxsYTswMEI4CitjZWRpbGxhY21iOzAzMjcKK2NlbnQ7MDBBMgorY2VudGlncmFkZTsyMTAzCitjZW50aW5mZXJpb3I7RjZERgorY2VudG1vbm9zcGFjZTtGRkUwCitjZW50b2xkc3R5bGU7RjdBMgorY2VudHN1cGVyaW9yO0Y2RTAKK2NoYWFybWVuaWFuOzA1NzkKK2NoYWJlbmdhbGk7MDk5QgorY2hhZGV2YTswOTFCCitjaGFndWphcmF0aTswQTlCCitjaGFndXJtdWtoaTswQTFCCitjaGJvcG9tb2ZvOzMxMTQKK2NoZWFia2hhc2lhbmN5cmlsbGljOzA0QkQKK2NoZWNrbWFyazsyNzEzCitjaGVjeXJpbGxpYzswNDQ3CitjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYzswNEJGCitjaGVkZXNjZW5kZXJjeXJpbGxpYzswNEI3CitjaGVkaWVyZXNpc2N5cmlsbGljOzA0RjUKK2NoZWhhcm1lbmlhbjswNTczCitjaGVraGFrYXNzaWFuY3lyaWxsaWM7MDRDQworY2hldmVydGljYWxzdHJva2VjeXJpbGxpYzswNEI5CitjaGk7MDNDNworY2hpZXVjaGFjaXJjbGVrb3JlYW47MzI3NworY2hpZXVjaGFwYXJlbmtvcmVhbjszMjE3CitjaGlldWNoY2lyY2xla29yZWFuOzMyNjkKK2NoaWV1Y2hrb3JlYW47MzE0QQorY2hpZXVjaHBhcmVua29yZWFuOzMyMDkKK2Nob2NoYW5ndGhhaTswRTBBCitjaG9jaGFudGhhaTswRTA4CitjaG9jaGluZ3RoYWk7MEUwOQorY2hvY2hvZXRoYWk7MEUwQworY2hvb2s7MDE4OAorY2lldWNhY2lyY2xla29yZWFuOzMyNzYKK2NpZXVjYXBhcmVua29yZWFuOzMyMTYKK2NpZXVjY2lyY2xla29yZWFuOzMyNjgKK2NpZXVja29yZWFuOzMxNDgKK2NpZXVjcGFyZW5rb3JlYW47MzIwOAorY2lldWN1cGFyZW5rb3JlYW47MzIxQworY2lyY2xlOzI1Q0IKK2NpcmNsZW11bHRpcGx5OzIyOTcKK2NpcmNsZW90OzIyOTkKK2NpcmNsZXBsdXM7MjI5NQorY2lyY2xlcG9zdGFsbWFyazszMDM2CitjaXJjbGV3aXRobGVmdGhhbGZibGFjazsyNUQwCitjaXJjbGV3aXRocmlnaHRoYWxmYmxhY2s7MjVEMQorY2lyY3VtZmxleDswMkM2CitjaXJjdW1mbGV4YmVsb3djbWI7MDMyRAorY2lyY3VtZmxleGNtYjswMzAyCitjbGVhcjsyMzI3CitjbGlja2FsdmVvbGFyOzAxQzIKK2NsaWNrZGVudGFsOzAxQzAKK2NsaWNrbGF0ZXJhbDswMUMxCitjbGlja3JldHJvZmxleDswMUMzCitjbHViOzI2NjMKK2NsdWJzdWl0YmxhY2s7MjY2MworY2x1YnN1aXR3aGl0ZTsyNjY3CitjbWN1YmVkc3F1YXJlOzMzQTQKK2Ntb25vc3BhY2U7RkY0MworY21zcXVhcmVkc3F1YXJlOzMzQTAKK2NvYXJtZW5pYW47MDU4MQorY29sb247MDAzQQorY29sb25tb25ldGFyeTsyMEExCitjb2xvbm1vbm9zcGFjZTtGRjFBCitjb2xvbnNpZ247MjBBMQorY29sb25zbWFsbDtGRTU1Citjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kOzAyRDEKK2NvbG9udHJpYW5ndWxhcm1vZDswMkQwCitjb21tYTswMDJDCitjb21tYWFib3ZlY21iOzAzMTMKK2NvbW1hYWJvdmVyaWdodGNtYjswMzE1Citjb21tYWFjY2VudDtGNkMzCitjb21tYWFyYWJpYzswNjBDCitjb21tYWFybWVuaWFuOzA1NUQKK2NvbW1haW5mZXJpb3I7RjZFMQorY29tbWFtb25vc3BhY2U7RkYwQworY29tbWFyZXZlcnNlZGFib3ZlY21iOzAzMTQKK2NvbW1hcmV2ZXJzZWRtb2Q7MDJCRAorY29tbWFzbWFsbDtGRTUwCitjb21tYXN1cGVyaW9yO0Y2RTIKK2NvbW1hdHVybmVkYWJvdmVjbWI7MDMxMgorY29tbWF0dXJuZWRtb2Q7MDJCQgorY29tcGFzczsyNjNDCitjb25ncnVlbnQ7MjI0NQorY29udG91cmludGVncmFsOzIyMkUKK2NvbnRyb2w7MjMwMworY29udHJvbEFDSzswMDA2Citjb250cm9sQkVMOzAwMDcKK2NvbnRyb2xCUzswMDA4Citjb250cm9sQ0FOOzAwMTgKK2NvbnRyb2xDUjswMDBECitjb250cm9sREMxOzAwMTEKK2NvbnRyb2xEQzI7MDAxMgorY29udHJvbERDMzswMDEzCitjb250cm9sREM0OzAwMTQKK2NvbnRyb2xERUw7MDA3RgorY29udHJvbERMRTswMDEwCitjb250cm9sRU07MDAxOQorY29udHJvbEVOUTswMDA1Citjb250cm9sRU9UOzAwMDQKK2NvbnRyb2xFU0M7MDAxQgorY29udHJvbEVUQjswMDE3Citjb250cm9sRVRYOzAwMDMKK2NvbnRyb2xGRjswMDBDCitjb250cm9sRlM7MDAxQworY29udHJvbEdTOzAwMUQKK2NvbnRyb2xIVDswMDA5Citjb250cm9sTEY7MDAwQQorY29udHJvbE5BSzswMDE1Citjb250cm9sUlM7MDAxRQorY29udHJvbFNJOzAwMEYKK2NvbnRyb2xTTzswMDBFCitjb250cm9sU09UOzAwMDIKK2NvbnRyb2xTVFg7MDAwMQorY29udHJvbFNVQjswMDFBCitjb250cm9sU1lOOzAwMTYKK2NvbnRyb2xVUzswMDFGCitjb250cm9sVlQ7MDAwQgorY29weXJpZ2h0OzAwQTkKK2NvcHlyaWdodHNhbnM7RjhFOQorY29weXJpZ2h0c2VyaWY7RjZEOQorY29ybmVyYnJhY2tldGxlZnQ7MzAwQworY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGg7RkY2MgorY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbDtGRTQxCitjb3JuZXJicmFja2V0cmlnaHQ7MzAwRAorY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoO0ZGNjMKK2Nvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsO0ZFNDIKK2NvcnBvcmF0aW9uc3F1YXJlOzMzN0YKK2Nvc3F1YXJlOzMzQzcKK2NvdmVya2dzcXVhcmU7MzNDNgorY3BhcmVuOzI0OUUKK2NydXplaXJvOzIwQTIKK2NzdHJldGNoZWQ7MDI5NworY3VybHlhbmQ7MjJDRgorY3VybHlvcjsyMkNFCitjdXJyZW5jeTswMEE0CitjeXJCcmV2ZTtGNkQxCitjeXJGbGV4O0Y2RDIKK2N5cmJyZXZlO0Y2RDQKK2N5cmZsZXg7RjZENQorZDswMDY0CitkYWFybWVuaWFuOzA1NjQKK2RhYmVuZ2FsaTswOUE2CitkYWRhcmFiaWM7MDYzNgorZGFkZXZhOzA5MjYKK2RhZGZpbmFsYXJhYmljO0ZFQkUKK2RhZGluaXRpYWxhcmFiaWM7RkVCRgorZGFkbWVkaWFsYXJhYmljO0ZFQzAKK2RhZ2VzaDswNUJDCitkYWdlc2hoZWJyZXc7MDVCQworZGFnZ2VyOzIwMjAKK2RhZ2dlcmRibDsyMDIxCitkYWd1amFyYXRpOzBBQTYKK2RhZ3VybXVraGk7MEEyNgorZGFoaXJhZ2FuYTszMDYwCitkYWthdGFrYW5hOzMwQzAKK2RhbGFyYWJpYzswNjJGCitkYWxldDswNUQzCitkYWxldGRhZ2VzaDtGQjMzCitkYWxldGRhZ2VzaGhlYnJldztGQjMzCitkYWxldGhhdGFmcGF0YWg7MDVEMyAwNUIyCitkYWxldGhhdGFmcGF0YWhoZWJyZXc7MDVEMyAwNUIyCitkYWxldGhhdGFmc2Vnb2w7MDVEMyAwNUIxCitkYWxldGhhdGFmc2Vnb2xoZWJyZXc7MDVEMyAwNUIxCitkYWxldGhlYnJldzswNUQzCitkYWxldGhpcmlxOzA1RDMgMDVCNAorZGFsZXRoaXJpcWhlYnJldzswNUQzIDA1QjQKK2RhbGV0aG9sYW07MDVEMyAwNUI5CitkYWxldGhvbGFtaGVicmV3OzA1RDMgMDVCOQorZGFsZXRwYXRhaDswNUQzIDA1QjcKK2RhbGV0cGF0YWhoZWJyZXc7MDVEMyAwNUI3CitkYWxldHFhbWF0czswNUQzIDA1QjgKK2RhbGV0cWFtYXRzaGVicmV3OzA1RDMgMDVCOAorZGFsZXRxdWJ1dHM7MDVEMyAwNUJCCitkYWxldHF1YnV0c2hlYnJldzswNUQzIDA1QkIKK2RhbGV0c2Vnb2w7MDVEMyAwNUI2CitkYWxldHNlZ29saGVicmV3OzA1RDMgMDVCNgorZGFsZXRzaGV2YTswNUQzIDA1QjAKK2RhbGV0c2hldmFoZWJyZXc7MDVEMyAwNUIwCitkYWxldHRzZXJlOzA1RDMgMDVCNQorZGFsZXR0c2VyZWhlYnJldzswNUQzIDA1QjUKK2RhbGZpbmFsYXJhYmljO0ZFQUEKK2RhbW1hYXJhYmljOzA2NEYKK2RhbW1hbG93YXJhYmljOzA2NEYKK2RhbW1hdGFuYWx0b25lYXJhYmljOzA2NEMKK2RhbW1hdGFuYXJhYmljOzA2NEMKK2RhbmRhOzA5NjQKK2RhcmdhaGVicmV3OzA1QTcKK2RhcmdhbGVmdGhlYnJldzswNUE3CitkYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI7MDQ4NQorZGJsR3JhdmU7RjZEMworZGJsYW5nbGVicmFja2V0bGVmdDszMDBBCitkYmxhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWw7RkUzRAorZGJsYW5nbGVicmFja2V0cmlnaHQ7MzAwQgorZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbDtGRTNFCitkYmxhcmNoaW52ZXJ0ZWRiZWxvd2NtYjswMzJCCitkYmxhcnJvd2xlZnQ7MjFENAorZGJsYXJyb3dyaWdodDsyMUQyCitkYmxkYW5kYTswOTY1CitkYmxncmF2ZTtGNkQ2CitkYmxncmF2ZWNtYjswMzBGCitkYmxpbnRlZ3JhbDsyMjJDCitkYmxsb3dsaW5lOzIwMTcKK2RibGxvd2xpbmVjbWI7MDMzMworZGJsb3ZlcmxpbmVjbWI7MDMzRgorZGJscHJpbWVtb2Q7MDJCQQorZGJsdmVydGljYWxiYXI7MjAxNgorZGJsdmVydGljYWxsaW5lYWJvdmVjbWI7MDMwRQorZGJvcG9tb2ZvOzMxMDkKK2Ric3F1YXJlOzMzQzgKK2RjYXJvbjswMTBGCitkY2VkaWxsYTsxRTExCitkY2lyY2xlOzI0RDMKK2RjaXJjdW1mbGV4YmVsb3c7MUUxMworZGNyb2F0OzAxMTEKK2RkYWJlbmdhbGk7MDlBMQorZGRhZGV2YTswOTIxCitkZGFndWphcmF0aTswQUExCitkZGFndXJtdWtoaTswQTIxCitkZGFsYXJhYmljOzA2ODgKK2RkYWxmaW5hbGFyYWJpYztGQjg5CitkZGRoYWRldmE7MDk1QworZGRoYWJlbmdhbGk7MDlBMgorZGRoYWRldmE7MDkyMgorZGRoYWd1amFyYXRpOzBBQTIKK2RkaGFndXJtdWtoaTswQTIyCitkZG90YWNjZW50OzFFMEIKK2Rkb3RiZWxvdzsxRTBECitkZWNpbWFsc2VwYXJhdG9yYXJhYmljOzA2NkIKK2RlY2ltYWxzZXBhcmF0b3JwZXJzaWFuOzA2NkIKK2RlY3lyaWxsaWM7MDQzNAorZGVncmVlOzAwQjAKK2RlaGloZWJyZXc7MDVBRAorZGVoaXJhZ2FuYTszMDY3CitkZWljb3B0aWM7MDNFRgorZGVrYXRha2FuYTszMEM3CitkZWxldGVsZWZ0OzIzMkIKK2RlbGV0ZXJpZ2h0OzIzMjYKK2RlbHRhOzAzQjQKK2RlbHRhdHVybmVkOzAxOEQKK2Rlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpOzA5RjgKK2Rlemg7MDJBNAorZGhhYmVuZ2FsaTswOUE3CitkaGFkZXZhOzA5MjcKK2RoYWd1amFyYXRpOzBBQTcKK2RoYWd1cm11a2hpOzBBMjcKK2Rob29rOzAyNTcKK2RpYWx5dGlrYXRvbm9zOzAzODUKK2RpYWx5dGlrYXRvbm9zY21iOzAzNDQKK2RpYW1vbmQ7MjY2NgorZGlhbW9uZHN1aXR3aGl0ZTsyNjYyCitkaWVyZXNpczswMEE4CitkaWVyZXNpc2FjdXRlO0Y2RDcKK2RpZXJlc2lzYmVsb3djbWI7MDMyNAorZGllcmVzaXNjbWI7MDMwOAorZGllcmVzaXNncmF2ZTtGNkQ4CitkaWVyZXNpc3Rvbm9zOzAzODUKK2RpaGlyYWdhbmE7MzA2MgorZGlrYXRha2FuYTszMEMyCitkaXR0b21hcms7MzAwMworZGl2aWRlOzAwRjcKK2RpdmlkZXM7MjIyMworZGl2aXNpb25zbGFzaDsyMjE1CitkamVjeXJpbGxpYzswNDUyCitka3NoYWRlOzI1OTMKK2RsaW5lYmVsb3c7MUUwRgorZGxzcXVhcmU7MzM5NworZG1hY3JvbjswMTExCitkbW9ub3NwYWNlO0ZGNDQKK2RuYmxvY2s7MjU4NAorZG9jaGFkYXRoYWk7MEUwRQorZG9kZWt0aGFpOzBFMTQKK2RvaGlyYWdhbmE7MzA2OQorZG9rYXRha2FuYTszMEM5Citkb2xsYXI7MDAyNAorZG9sbGFyaW5mZXJpb3I7RjZFMworZG9sbGFybW9ub3NwYWNlO0ZGMDQKK2RvbGxhcm9sZHN0eWxlO0Y3MjQKK2RvbGxhcnNtYWxsO0ZFNjkKK2RvbGxhcnN1cGVyaW9yO0Y2RTQKK2Rvbmc7MjBBQgorZG9ydXNxdWFyZTszMzI2Citkb3RhY2NlbnQ7MDJEOQorZG90YWNjZW50Y21iOzAzMDcKK2RvdGJlbG93Y21iOzAzMjMKK2RvdGJlbG93Y29tYjswMzIzCitkb3RrYXRha2FuYTszMEZCCitkb3RsZXNzaTswMTMxCitkb3RsZXNzajtGNkJFCitkb3RsZXNzanN0cm9rZWhvb2s7MDI4NAorZG90bWF0aDsyMkM1Citkb3R0ZWRjaXJjbGU7MjVDQworZG91YmxleW9kcGF0YWg7RkIxRgorZG91YmxleW9kcGF0YWhoZWJyZXc7RkIxRgorZG93bnRhY2tiZWxvd2NtYjswMzFFCitkb3dudGFja21vZDswMkQ1CitkcGFyZW47MjQ5RgorZHN1cGVyaW9yO0Y2RUIKK2R0YWlsOzAyNTYKK2R0b3BiYXI7MDE4QworZHVoaXJhZ2FuYTszMDY1CitkdWthdGFrYW5hOzMwQzUKK2R6OzAxRjMKK2R6YWx0b25lOzAyQTMKK2R6Y2Fyb247MDFDNgorZHpjdXJsOzAyQTUKK2R6ZWFia2hhc2lhbmN5cmlsbGljOzA0RTEKK2R6ZWN5cmlsbGljOzA0NTUKK2R6aGVjeXJpbGxpYzswNDVGCitlOzAwNjUKK2VhY3V0ZTswMEU5CitlYXJ0aDsyNjQxCitlYmVuZ2FsaTswOThGCitlYm9wb21vZm87MzExQworZWJyZXZlOzAxMTUKK2VjYW5kcmFkZXZhOzA5MEQKK2VjYW5kcmFndWphcmF0aTswQThECitlY2FuZHJhdm93ZWxzaWduZGV2YTswOTQ1CitlY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk7MEFDNQorZWNhcm9uOzAxMUIKK2VjZWRpbGxhYnJldmU7MUUxRAorZWNoYXJtZW5pYW47MDU2NQorZWNoeWl3bmFybWVuaWFuOzA1ODcKK2VjaXJjbGU7MjRENAorZWNpcmN1bWZsZXg7MDBFQQorZWNpcmN1bWZsZXhhY3V0ZTsxRUJGCitlY2lyY3VtZmxleGJlbG93OzFFMTkKK2VjaXJjdW1mbGV4ZG90YmVsb3c7MUVDNworZWNpcmN1bWZsZXhncmF2ZTsxRUMxCitlY2lyY3VtZmxleGhvb2thYm92ZTsxRUMzCitlY2lyY3VtZmxleHRpbGRlOzFFQzUKK2VjeXJpbGxpYzswNDU0CitlZGJsZ3JhdmU7MDIwNQorZWRldmE7MDkwRgorZWRpZXJlc2lzOzAwRUIKK2Vkb3Q7MDExNworZWRvdGFjY2VudDswMTE3CitlZG90YmVsb3c7MUVCOQorZWVndXJtdWtoaTswQTBGCitlZW1hdHJhZ3VybXVraGk7MEE0NworZWZjeXJpbGxpYzswNDQ0CitlZ3JhdmU7MDBFOAorZWd1amFyYXRpOzBBOEYKK2VoYXJtZW5pYW47MDU2NworZWhib3BvbW9mbzszMTFECitlaGlyYWdhbmE7MzA0OAorZWhvb2thYm92ZTsxRUJCCitlaWJvcG9tb2ZvOzMxMUYKK2VpZ2h0OzAwMzgKK2VpZ2h0YXJhYmljOzA2NjgKK2VpZ2h0YmVuZ2FsaTswOUVFCitlaWdodGNpcmNsZTsyNDY3CitlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc5MQorZWlnaHRkZXZhOzA5NkUKK2VpZ2h0ZWVuY2lyY2xlOzI0NzEKK2VpZ2h0ZWVucGFyZW47MjQ4NQorZWlnaHRlZW5wZXJpb2Q7MjQ5OQorZWlnaHRndWphcmF0aTswQUVFCitlaWdodGd1cm11a2hpOzBBNkUKK2VpZ2h0aGFja2FyYWJpYzswNjY4CitlaWdodGhhbmd6aG91OzMwMjgKK2VpZ2h0aG5vdGViZWFtZWQ7MjY2QgorZWlnaHRpZGVvZ3JhcGhpY3BhcmVuOzMyMjcKK2VpZ2h0aW5mZXJpb3I7MjA4OAorZWlnaHRtb25vc3BhY2U7RkYxOAorZWlnaHRvbGRzdHlsZTtGNzM4CitlaWdodHBhcmVuOzI0N0IKK2VpZ2h0cGVyaW9kOzI0OEYKK2VpZ2h0cGVyc2lhbjswNkY4CitlaWdodHJvbWFuOzIxNzcKK2VpZ2h0c3VwZXJpb3I7MjA3OAorZWlnaHR0aGFpOzBFNTgKK2VpbnZlcnRlZGJyZXZlOzAyMDcKK2Vpb3RpZmllZGN5cmlsbGljOzA0NjUKK2VrYXRha2FuYTszMEE4Citla2F0YWthbmFoYWxmd2lkdGg7RkY3NAorZWtvbmthcmd1cm11a2hpOzBBNzQKK2Vrb3JlYW47MzE1NAorZWxjeXJpbGxpYzswNDNCCitlbGVtZW50OzIyMDgKK2VsZXZlbmNpcmNsZTsyNDZBCitlbGV2ZW5wYXJlbjsyNDdFCitlbGV2ZW5wZXJpb2Q7MjQ5MgorZWxldmVucm9tYW47MjE3QQorZWxsaXBzaXM7MjAyNgorZWxsaXBzaXN2ZXJ0aWNhbDsyMkVFCitlbWFjcm9uOzAxMTMKK2VtYWNyb25hY3V0ZTsxRTE3CitlbWFjcm9uZ3JhdmU7MUUxNQorZW1jeXJpbGxpYzswNDNDCitlbWRhc2g7MjAxNAorZW1kYXNodmVydGljYWw7RkUzMQorZW1vbm9zcGFjZTtGRjQ1CitlbXBoYXNpc21hcmthcm1lbmlhbjswNTVCCitlbXB0eXNldDsyMjA1CitlbmJvcG9tb2ZvOzMxMjMKK2VuY3lyaWxsaWM7MDQzRAorZW5kYXNoOzIwMTMKK2VuZGFzaHZlcnRpY2FsO0ZFMzIKK2VuZGVzY2VuZGVyY3lyaWxsaWM7MDRBMworZW5nOzAxNEIKK2VuZ2JvcG9tb2ZvOzMxMjUKK2VuZ2hlY3lyaWxsaWM7MDRBNQorZW5ob29rY3lyaWxsaWM7MDRDOAorZW5zcGFjZTsyMDAyCitlb2dvbmVrOzAxMTkKK2Vva29yZWFuOzMxNTMKK2VvcGVuOzAyNUIKK2VvcGVuY2xvc2VkOzAyOUEKK2VvcGVucmV2ZXJzZWQ7MDI1QworZW9wZW5yZXZlcnNlZGNsb3NlZDswMjVFCitlb3BlbnJldmVyc2VkaG9vazswMjVECitlcGFyZW47MjRBMAorZXBzaWxvbjswM0I1CitlcHNpbG9udG9ub3M7MDNBRAorZXF1YWw7MDAzRAorZXF1YWxtb25vc3BhY2U7RkYxRAorZXF1YWxzbWFsbDtGRTY2CitlcXVhbHN1cGVyaW9yOzIwN0MKK2VxdWl2YWxlbmNlOzIyNjEKK2VyYm9wb21vZm87MzEyNgorZXJjeXJpbGxpYzswNDQwCitlcmV2ZXJzZWQ7MDI1OAorZXJldmVyc2VkY3lyaWxsaWM7MDQ0RAorZXNjeXJpbGxpYzswNDQxCitlc2Rlc2NlbmRlcmN5cmlsbGljOzA0QUIKK2VzaDswMjgzCitlc2hjdXJsOzAyODYKK2VzaG9ydGRldmE7MDkwRQorZXNob3J0dm93ZWxzaWduZGV2YTswOTQ2Citlc2hyZXZlcnNlZGxvb3A7MDFBQQorZXNoc3F1YXRyZXZlcnNlZDswMjg1Citlc21hbGxoaXJhZ2FuYTszMDQ3Citlc21hbGxrYXRha2FuYTszMEE3Citlc21hbGxrYXRha2FuYWhhbGZ3aWR0aDtGRjZBCitlc3RpbWF0ZWQ7MjEyRQorZXN1cGVyaW9yO0Y2RUMKK2V0YTswM0I3CitldGFybWVuaWFuOzA1NjgKK2V0YXRvbm9zOzAzQUUKK2V0aDswMEYwCitldGlsZGU7MUVCRAorZXRpbGRlYmVsb3c7MUUxQgorZXRuYWh0YWZvdWtoaGVicmV3OzA1OTEKK2V0bmFodGFmb3VraGxlZnRoZWJyZXc7MDU5MQorZXRuYWh0YWhlYnJldzswNTkxCitldG5haHRhbGVmdGhlYnJldzswNTkxCitldHVybmVkOzAxREQKK2V1a29yZWFuOzMxNjEKK2V1cm87MjBBQworZXZvd2Vsc2lnbmJlbmdhbGk7MDlDNworZXZvd2Vsc2lnbmRldmE7MDk0NworZXZvd2Vsc2lnbmd1amFyYXRpOzBBQzcKK2V4Y2xhbTswMDIxCitleGNsYW1hcm1lbmlhbjswNTVDCitleGNsYW1kYmw7MjAzQworZXhjbGFtZG93bjswMEExCitleGNsYW1kb3duc21hbGw7RjdBMQorZXhjbGFtbW9ub3NwYWNlO0ZGMDEKK2V4Y2xhbXNtYWxsO0Y3MjEKK2V4aXN0ZW50aWFsOzIyMDMKK2V6aDswMjkyCitlemhjYXJvbjswMUVGCitlemhjdXJsOzAyOTMKK2V6aHJldmVyc2VkOzAxQjkKK2V6aHRhaWw7MDFCQQorZjswMDY2CitmYWRldmE7MDk1RQorZmFndXJtdWtoaTswQTVFCitmYWhyZW5oZWl0OzIxMDkKK2ZhdGhhYXJhYmljOzA2NEUKK2ZhdGhhbG93YXJhYmljOzA2NEUKK2ZhdGhhdGFuYXJhYmljOzA2NEIKK2Zib3BvbW9mbzszMTA4CitmY2lyY2xlOzI0RDUKK2Zkb3RhY2NlbnQ7MUUxRgorZmVoYXJhYmljOzA2NDEKK2ZlaGFybWVuaWFuOzA1ODYKK2ZlaGZpbmFsYXJhYmljO0ZFRDIKK2ZlaGluaXRpYWxhcmFiaWM7RkVEMworZmVobWVkaWFsYXJhYmljO0ZFRDQKK2ZlaWNvcHRpYzswM0U1CitmZW1hbGU7MjY0MAorZmY7RkIwMAorZmZpO0ZCMDMKK2ZmbDtGQjA0CitmaTtGQjAxCitmaWZ0ZWVuY2lyY2xlOzI0NkUKK2ZpZnRlZW5wYXJlbjsyNDgyCitmaWZ0ZWVucGVyaW9kOzI0OTYKK2ZpZ3VyZWRhc2g7MjAxMgorZmlsbGVkYm94OzI1QTAKK2ZpbGxlZHJlY3Q7MjVBQworZmluYWxrYWY7MDVEQQorZmluYWxrYWZkYWdlc2g7RkIzQQorZmluYWxrYWZkYWdlc2hoZWJyZXc7RkIzQQorZmluYWxrYWZoZWJyZXc7MDVEQQorZmluYWxrYWZxYW1hdHM7MDVEQSAwNUI4CitmaW5hbGthZnFhbWF0c2hlYnJldzswNURBIDA1QjgKK2ZpbmFsa2Fmc2hldmE7MDVEQSAwNUIwCitmaW5hbGthZnNoZXZhaGVicmV3OzA1REEgMDVCMAorZmluYWxtZW07MDVERAorZmluYWxtZW1oZWJyZXc7MDVERAorZmluYWxudW47MDVERgorZmluYWxudW5oZWJyZXc7MDVERgorZmluYWxwZTswNUUzCitmaW5hbHBlaGVicmV3OzA1RTMKK2ZpbmFsdHNhZGk7MDVFNQorZmluYWx0c2FkaWhlYnJldzswNUU1CitmaXJzdHRvbmVjaGluZXNlOzAyQzkKK2Zpc2hleWU7MjVDOQorZml0YWN5cmlsbGljOzA0NzMKK2ZpdmU7MDAzNQorZml2ZWFyYWJpYzswNjY1CitmaXZlYmVuZ2FsaTswOUVCCitmaXZlY2lyY2xlOzI0NjQKK2ZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmOzI3OEUKK2ZpdmVkZXZhOzA5NkIKK2ZpdmVlaWdodGhzOzIxNUQKK2ZpdmVndWphcmF0aTswQUVCCitmaXZlZ3VybXVraGk7MEE2QgorZml2ZWhhY2thcmFiaWM7MDY2NQorZml2ZWhhbmd6aG91OzMwMjUKK2ZpdmVpZGVvZ3JhcGhpY3BhcmVuOzMyMjQKK2ZpdmVpbmZlcmlvcjsyMDg1CitmaXZlbW9ub3NwYWNlO0ZGMTUKK2ZpdmVvbGRzdHlsZTtGNzM1CitmaXZlcGFyZW47MjQ3OAorZml2ZXBlcmlvZDsyNDhDCitmaXZlcGVyc2lhbjswNkY1CitmaXZlcm9tYW47MjE3NAorZml2ZXN1cGVyaW9yOzIwNzUKK2ZpdmV0aGFpOzBFNTUKK2ZsO0ZCMDIKK2Zsb3JpbjswMTkyCitmbW9ub3NwYWNlO0ZGNDYKK2Ztc3F1YXJlOzMzOTkKK2ZvZmFudGhhaTswRTFGCitmb2ZhdGhhaTswRTFECitmb25nbWFudGhhaTswRTRGCitmb3JhbGw7MjIwMAorZm91cjswMDM0Citmb3VyYXJhYmljOzA2NjQKK2ZvdXJiZW5nYWxpOzA5RUEKK2ZvdXJjaXJjbGU7MjQ2MworZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc4RAorZm91cmRldmE7MDk2QQorZm91cmd1amFyYXRpOzBBRUEKK2ZvdXJndXJtdWtoaTswQTZBCitmb3VyaGFja2FyYWJpYzswNjY0Citmb3VyaGFuZ3pob3U7MzAyNAorZm91cmlkZW9ncmFwaGljcGFyZW47MzIyMworZm91cmluZmVyaW9yOzIwODQKK2ZvdXJtb25vc3BhY2U7RkYxNAorZm91cm51bWVyYXRvcmJlbmdhbGk7MDlGNworZm91cm9sZHN0eWxlO0Y3MzQKK2ZvdXJwYXJlbjsyNDc3Citmb3VycGVyaW9kOzI0OEIKK2ZvdXJwZXJzaWFuOzA2RjQKK2ZvdXJyb21hbjsyMTczCitmb3Vyc3VwZXJpb3I7MjA3NAorZm91cnRlZW5jaXJjbGU7MjQ2RAorZm91cnRlZW5wYXJlbjsyNDgxCitmb3VydGVlbnBlcmlvZDsyNDk1Citmb3VydGhhaTswRTU0Citmb3VydGh0b25lY2hpbmVzZTswMkNCCitmcGFyZW47MjRBMQorZnJhY3Rpb247MjA0NAorZnJhbmM7MjBBMworZzswMDY3CitnYWJlbmdhbGk7MDk5NworZ2FjdXRlOzAxRjUKK2dhZGV2YTswOTE3CitnYWZhcmFiaWM7MDZBRgorZ2FmZmluYWxhcmFiaWM7RkI5MworZ2FmaW5pdGlhbGFyYWJpYztGQjk0CitnYWZtZWRpYWxhcmFiaWM7RkI5NQorZ2FndWphcmF0aTswQTk3CitnYWd1cm11a2hpOzBBMTcKK2dhaGlyYWdhbmE7MzA0QworZ2FrYXRha2FuYTszMEFDCitnYW1tYTswM0IzCitnYW1tYWxhdGluc21hbGw7MDI2MworZ2FtbWFzdXBlcmlvcjswMkUwCitnYW5naWFjb3B0aWM7MDNFQgorZ2JvcG9tb2ZvOzMxMEQKK2dicmV2ZTswMTFGCitnY2Fyb247MDFFNworZ2NlZGlsbGE7MDEyMworZ2NpcmNsZTsyNEQ2CitnY2lyY3VtZmxleDswMTFECitnY29tbWFhY2NlbnQ7MDEyMworZ2RvdDswMTIxCitnZG90YWNjZW50OzAxMjEKK2dlY3lyaWxsaWM7MDQzMworZ2VoaXJhZ2FuYTszMDUyCitnZWthdGFrYW5hOzMwQjIKK2dlb21ldHJpY2FsbHllcXVhbDsyMjUxCitnZXJlc2hhY2NlbnRoZWJyZXc7MDU5QworZ2VyZXNoaGVicmV3OzA1RjMKK2dlcmVzaG11cWRhbWhlYnJldzswNTlECitnZXJtYW5kYmxzOzAwREYKK2dlcnNoYXlpbWFjY2VudGhlYnJldzswNTlFCitnZXJzaGF5aW1oZWJyZXc7MDVGNAorZ2V0YW1hcms7MzAxMworZ2hhYmVuZ2FsaTswOTk4CitnaGFkYXJtZW5pYW47MDU3MgorZ2hhZGV2YTswOTE4CitnaGFndWphcmF0aTswQTk4CitnaGFndXJtdWtoaTswQTE4CitnaGFpbmFyYWJpYzswNjNBCitnaGFpbmZpbmFsYXJhYmljO0ZFQ0UKK2doYWluaW5pdGlhbGFyYWJpYztGRUNGCitnaGFpbm1lZGlhbGFyYWJpYztGRUQwCitnaGVtaWRkbGVob29rY3lyaWxsaWM7MDQ5NQorZ2hlc3Ryb2tlY3lyaWxsaWM7MDQ5MworZ2hldXB0dXJuY3lyaWxsaWM7MDQ5MQorZ2hoYWRldmE7MDk1QQorZ2hoYWd1cm11a2hpOzBBNUEKK2dob29rOzAyNjAKK2doenNxdWFyZTszMzkzCitnaWhpcmFnYW5hOzMwNEUKK2dpa2F0YWthbmE7MzBBRQorZ2ltYXJtZW5pYW47MDU2MworZ2ltZWw7MDVEMgorZ2ltZWxkYWdlc2g7RkIzMgorZ2ltZWxkYWdlc2hoZWJyZXc7RkIzMgorZ2ltZWxoZWJyZXc7MDVEMgorZ2plY3lyaWxsaWM7MDQ1MworZ2xvdHRhbGludmVydGVkc3Ryb2tlOzAxQkUKK2dsb3R0YWxzdG9wOzAyOTQKK2dsb3R0YWxzdG9waW52ZXJ0ZWQ7MDI5NgorZ2xvdHRhbHN0b3Btb2Q7MDJDMAorZ2xvdHRhbHN0b3ByZXZlcnNlZDswMjk1CitnbG90dGFsc3RvcHJldmVyc2VkbW9kOzAyQzEKK2dsb3R0YWxzdG9wcmV2ZXJzZWRzdXBlcmlvcjswMkU0CitnbG90dGFsc3RvcHN0cm9rZTswMkExCitnbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkOzAyQTIKK2dtYWNyb247MUUyMQorZ21vbm9zcGFjZTtGRjQ3Citnb2hpcmFnYW5hOzMwNTQKK2dva2F0YWthbmE7MzBCNAorZ3BhcmVuOzI0QTIKK2dwYXNxdWFyZTszM0FDCitncmFkaWVudDsyMjA3CitncmF2ZTswMDYwCitncmF2ZWJlbG93Y21iOzAzMTYKK2dyYXZlY21iOzAzMDAKK2dyYXZlY29tYjswMzAwCitncmF2ZWRldmE7MDk1MworZ3JhdmVsb3dtb2Q7MDJDRQorZ3JhdmVtb25vc3BhY2U7RkY0MAorZ3JhdmV0b25lY21iOzAzNDAKK2dyZWF0ZXI7MDAzRQorZ3JlYXRlcmVxdWFsOzIyNjUKK2dyZWF0ZXJlcXVhbG9ybGVzczsyMkRCCitncmVhdGVybW9ub3NwYWNlO0ZGMUUKK2dyZWF0ZXJvcmVxdWl2YWxlbnQ7MjI3MworZ3JlYXRlcm9ybGVzczsyMjc3CitncmVhdGVyb3ZlcmVxdWFsOzIyNjcKK2dyZWF0ZXJzbWFsbDtGRTY1Citnc2NyaXB0OzAyNjEKK2dzdHJva2U7MDFFNQorZ3VoaXJhZ2FuYTszMDUwCitndWlsbGVtb3RsZWZ0OzAwQUIKK2d1aWxsZW1vdHJpZ2h0OzAwQkIKK2d1aWxzaW5nbGxlZnQ7MjAzOQorZ3VpbHNpbmdscmlnaHQ7MjAzQQorZ3VrYXRha2FuYTszMEIwCitndXJhbXVzcXVhcmU7MzMxOAorZ3lzcXVhcmU7MzNDOQoraDswMDY4CitoYWFia2hhc2lhbmN5cmlsbGljOzA0QTkKK2hhYWx0b25lYXJhYmljOzA2QzEKK2hhYmVuZ2FsaTswOUI5CitoYWRlc2NlbmRlcmN5cmlsbGljOzA0QjMKK2hhZGV2YTswOTM5CitoYWd1amFyYXRpOzBBQjkKK2hhZ3VybXVraGk7MEEzOQoraGFoYXJhYmljOzA2MkQKK2hhaGZpbmFsYXJhYmljO0ZFQTIKK2hhaGluaXRpYWxhcmFiaWM7RkVBMworaGFoaXJhZ2FuYTszMDZGCitoYWhtZWRpYWxhcmFiaWM7RkVBNAoraGFpdHVzcXVhcmU7MzMyQQoraGFrYXRha2FuYTszMENGCitoYWthdGFrYW5haGFsZndpZHRoO0ZGOEEKK2hhbGFudGd1cm11a2hpOzBBNEQKK2hhbXphYXJhYmljOzA2MjEKK2hhbXphZGFtbWFhcmFiaWM7MDYyMSAwNjRGCitoYW16YWRhbW1hdGFuYXJhYmljOzA2MjEgMDY0QworaGFtemFmYXRoYWFyYWJpYzswNjIxIDA2NEUKK2hhbXphZmF0aGF0YW5hcmFiaWM7MDYyMSAwNjRCCitoYW16YWxvd2FyYWJpYzswNjIxCitoYW16YWxvd2thc3JhYXJhYmljOzA2MjEgMDY1MAoraGFtemFsb3drYXNyYXRhbmFyYWJpYzswNjIxIDA2NEQKK2hhbXphc3VrdW5hcmFiaWM7MDYyMSAwNjUyCitoYW5ndWxmaWxsZXI7MzE2NAoraGFyZHNpZ25jeXJpbGxpYzswNDRBCitoYXJwb29ubGVmdGJhcmJ1cDsyMUJDCitoYXJwb29ucmlnaHRiYXJidXA7MjFDMAoraGFzcXVhcmU7MzNDQQoraGF0YWZwYXRhaDswNUIyCitoYXRhZnBhdGFoMTY7MDVCMgoraGF0YWZwYXRhaDIzOzA1QjIKK2hhdGFmcGF0YWgyZjswNUIyCitoYXRhZnBhdGFoaGVicmV3OzA1QjIKK2hhdGFmcGF0YWhuYXJyb3doZWJyZXc7MDVCMgoraGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXc7MDVCMgoraGF0YWZwYXRhaHdpZGVoZWJyZXc7MDVCMgoraGF0YWZxYW1hdHM7MDVCMworaGF0YWZxYW1hdHMxYjswNUIzCitoYXRhZnFhbWF0czI4OzA1QjMKK2hhdGFmcWFtYXRzMzQ7MDVCMworaGF0YWZxYW1hdHNoZWJyZXc7MDVCMworaGF0YWZxYW1hdHNuYXJyb3doZWJyZXc7MDVCMworaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3OzA1QjMKK2hhdGFmcWFtYXRzd2lkZWhlYnJldzswNUIzCitoYXRhZnNlZ29sOzA1QjEKK2hhdGFmc2Vnb2wxNzswNUIxCitoYXRhZnNlZ29sMjQ7MDVCMQoraGF0YWZzZWdvbDMwOzA1QjEKK2hhdGFmc2Vnb2xoZWJyZXc7MDVCMQoraGF0YWZzZWdvbG5hcnJvd2hlYnJldzswNUIxCitoYXRhZnNlZ29scXVhcnRlcmhlYnJldzswNUIxCitoYXRhZnNlZ29sd2lkZWhlYnJldzswNUIxCitoYmFyOzAxMjcKK2hib3BvbW9mbzszMTBGCitoYnJldmViZWxvdzsxRTJCCitoY2VkaWxsYTsxRTI5CitoY2lyY2xlOzI0RDcKK2hjaXJjdW1mbGV4OzAxMjUKK2hkaWVyZXNpczsxRTI3CitoZG90YWNjZW50OzFFMjMKK2hkb3RiZWxvdzsxRTI1CitoZTswNUQ0CitoZWFydDsyNjY1CitoZWFydHN1aXRibGFjazsyNjY1CitoZWFydHN1aXR3aGl0ZTsyNjYxCitoZWRhZ2VzaDtGQjM0CitoZWRhZ2VzaGhlYnJldztGQjM0CitoZWhhbHRvbmVhcmFiaWM7MDZDMQoraGVoYXJhYmljOzA2NDcKK2hlaGVicmV3OzA1RDQKK2hlaGZpbmFsYWx0b25lYXJhYmljO0ZCQTcKK2hlaGZpbmFsYWx0dHdvYXJhYmljO0ZFRUEKK2hlaGZpbmFsYXJhYmljO0ZFRUEKK2hlaGhhbXphYWJvdmVmaW5hbGFyYWJpYztGQkE1CitoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWM7RkJBNAoraGVoaW5pdGlhbGFsdG9uZWFyYWJpYztGQkE4CitoZWhpbml0aWFsYXJhYmljO0ZFRUIKK2hlaGlyYWdhbmE7MzA3OAoraGVobWVkaWFsYWx0b25lYXJhYmljO0ZCQTkKK2hlaG1lZGlhbGFyYWJpYztGRUVDCitoZWlzZWllcmFzcXVhcmU7MzM3QgoraGVrYXRha2FuYTszMEQ4CitoZWthdGFrYW5haGFsZndpZHRoO0ZGOEQKK2hla3V0YWFydXNxdWFyZTszMzM2CitoZW5naG9vazswMjY3CitoZXJ1dHVzcXVhcmU7MzMzOQoraGV0OzA1RDcKK2hldGhlYnJldzswNUQ3CitoaG9vazswMjY2CitoaG9va3N1cGVyaW9yOzAyQjEKK2hpZXVoYWNpcmNsZWtvcmVhbjszMjdCCitoaWV1aGFwYXJlbmtvcmVhbjszMjFCCitoaWV1aGNpcmNsZWtvcmVhbjszMjZECitoaWV1aGtvcmVhbjszMTRFCitoaWV1aHBhcmVua29yZWFuOzMyMEQKK2hpaGlyYWdhbmE7MzA3MgoraGlrYXRha2FuYTszMEQyCitoaWthdGFrYW5haGFsZndpZHRoO0ZGOEIKK2hpcmlxOzA1QjQKK2hpcmlxMTQ7MDVCNAoraGlyaXEyMTswNUI0CitoaXJpcTJkOzA1QjQKK2hpcmlxaGVicmV3OzA1QjQKK2hpcmlxbmFycm93aGVicmV3OzA1QjQKK2hpcmlxcXVhcnRlcmhlYnJldzswNUI0CitoaXJpcXdpZGVoZWJyZXc7MDVCNAoraGxpbmViZWxvdzsxRTk2CitobW9ub3NwYWNlO0ZGNDgKK2hvYXJtZW5pYW47MDU3MAoraG9oaXB0aGFpOzBFMkIKK2hvaGlyYWdhbmE7MzA3QgoraG9rYXRha2FuYTszMERCCitob2thdGFrYW5haGFsZndpZHRoO0ZGOEUKK2hvbGFtOzA1QjkKK2hvbGFtMTk7MDVCOQoraG9sYW0yNjswNUI5Citob2xhbTMyOzA1QjkKK2hvbGFtaGVicmV3OzA1QjkKK2hvbGFtbmFycm93aGVicmV3OzA1QjkKK2hvbGFtcXVhcnRlcmhlYnJldzswNUI5Citob2xhbXdpZGVoZWJyZXc7MDVCOQoraG9ub2todWt0aGFpOzBFMkUKK2hvb2thYm92ZWNvbWI7MDMwOQoraG9va2NtYjswMzA5Citob29rcGFsYXRhbGl6ZWRiZWxvd2NtYjswMzIxCitob29rcmV0cm9mbGV4YmVsb3djbWI7MDMyMgoraG9vbnNxdWFyZTszMzQyCitob3JpY29wdGljOzAzRTkKK2hvcml6b250YWxiYXI7MjAxNQoraG9ybmNtYjswMzFCCitob3RzcHJpbmdzOzI2NjgKK2hvdXNlOzIzMDIKK2hwYXJlbjsyNEEzCitoc3VwZXJpb3I7MDJCMAoraHR1cm5lZDswMjY1CitodWhpcmFnYW5hOzMwNzUKK2h1aWl0b3NxdWFyZTszMzMzCitodWthdGFrYW5hOzMwRDUKK2h1a2F0YWthbmFoYWxmd2lkdGg7RkY4QworaHVuZ2FydW1sYXV0OzAyREQKK2h1bmdhcnVtbGF1dGNtYjswMzBCCitodjswMTk1CitoeXBoZW47MDAyRAoraHlwaGVuaW5mZXJpb3I7RjZFNQoraHlwaGVubW9ub3NwYWNlO0ZGMEQKK2h5cGhlbnNtYWxsO0ZFNjMKK2h5cGhlbnN1cGVyaW9yO0Y2RTYKK2h5cGhlbnR3bzsyMDEwCitpOzAwNjkKK2lhY3V0ZTswMEVECitpYWN5cmlsbGljOzA0NEYKK2liZW5nYWxpOzA5ODcKK2lib3BvbW9mbzszMTI3CitpYnJldmU7MDEyRAoraWNhcm9uOzAxRDAKK2ljaXJjbGU7MjREOAoraWNpcmN1bWZsZXg7MDBFRQoraWN5cmlsbGljOzA0NTYKK2lkYmxncmF2ZTswMjA5CitpZGVvZ3JhcGhlYXJ0aGNpcmNsZTszMjhGCitpZGVvZ3JhcGhmaXJlY2lyY2xlOzMyOEIKK2lkZW9ncmFwaGljYWxsaWFuY2VwYXJlbjszMjNGCitpZGVvZ3JhcGhpY2NhbGxwYXJlbjszMjNBCitpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZTszMkE1CitpZGVvZ3JhcGhpY2Nsb3NlOzMwMDYKK2lkZW9ncmFwaGljY29tbWE7MzAwMQoraWRlb2dyYXBoaWNjb21tYWxlZnQ7RkY2NAoraWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuOzMyMzcKK2lkZW9ncmFwaGljY29ycmVjdGNpcmNsZTszMkEzCitpZGVvZ3JhcGhpY2VhcnRocGFyZW47MzIyRgoraWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW47MzIzRAoraWRlb2dyYXBoaWNleGNlbGxlbnRjaXJjbGU7MzI5RAoraWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuOzMyNDAKK2lkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlOzMyOTYKK2lkZW9ncmFwaGljZmluYW5jaWFscGFyZW47MzIzNgoraWRlb2dyYXBoaWNmaXJlcGFyZW47MzIyQgoraWRlb2dyYXBoaWNoYXZlcGFyZW47MzIzMgoraWRlb2dyYXBoaWNoaWdoY2lyY2xlOzMyQTQKK2lkZW9ncmFwaGljaXRlcmF0aW9ubWFyazszMDA1CitpZGVvZ3JhcGhpY2xhYm9yY2lyY2xlOzMyOTgKK2lkZW9ncmFwaGljbGFib3JwYXJlbjszMjM4CitpZGVvZ3JhcGhpY2xlZnRjaXJjbGU7MzJBNworaWRlb2dyYXBoaWNsb3djaXJjbGU7MzJBNgoraWRlb2dyYXBoaWNtZWRpY2luZWNpcmNsZTszMkE5CitpZGVvZ3JhcGhpY21ldGFscGFyZW47MzIyRQoraWRlb2dyYXBoaWNtb29ucGFyZW47MzIyQQoraWRlb2dyYXBoaWNuYW1lcGFyZW47MzIzNAoraWRlb2dyYXBoaWNwZXJpb2Q7MzAwMgoraWRlb2dyYXBoaWNwcmludGNpcmNsZTszMjlFCitpZGVvZ3JhcGhpY3JlYWNocGFyZW47MzI0MworaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbjszMjM5CitpZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW47MzIzRQoraWRlb2dyYXBoaWNyaWdodGNpcmNsZTszMkE4CitpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZTszMjk5CitpZGVvZ3JhcGhpY3NlbGZwYXJlbjszMjQyCitpZGVvZ3JhcGhpY3NvY2lldHlwYXJlbjszMjMzCitpZGVvZ3JhcGhpY3NwYWNlOzMwMDAKK2lkZW9ncmFwaGljc3BlY2lhbHBhcmVuOzMyMzUKK2lkZW9ncmFwaGljc3RvY2twYXJlbjszMjMxCitpZGVvZ3JhcGhpY3N0dWR5cGFyZW47MzIzQgoraWRlb2dyYXBoaWNzdW5wYXJlbjszMjMwCitpZGVvZ3JhcGhpY3N1cGVydmlzZXBhcmVuOzMyM0MKK2lkZW9ncmFwaGljd2F0ZXJwYXJlbjszMjJDCitpZGVvZ3JhcGhpY3dvb2RwYXJlbjszMjJECitpZGVvZ3JhcGhpY3plcm87MzAwNworaWRlb2dyYXBobWV0YWxjaXJjbGU7MzI4RQoraWRlb2dyYXBobW9vbmNpcmNsZTszMjhBCitpZGVvZ3JhcGhuYW1lY2lyY2xlOzMyOTQKK2lkZW9ncmFwaHN1bmNpcmNsZTszMjkwCitpZGVvZ3JhcGh3YXRlcmNpcmNsZTszMjhDCitpZGVvZ3JhcGh3b29kY2lyY2xlOzMyOEQKK2lkZXZhOzA5MDcKK2lkaWVyZXNpczswMEVGCitpZGllcmVzaXNhY3V0ZTsxRTJGCitpZGllcmVzaXNjeXJpbGxpYzswNEU1CitpZG90YmVsb3c7MUVDQgoraWVicmV2ZWN5cmlsbGljOzA0RDcKK2llY3lyaWxsaWM7MDQzNQoraWV1bmdhY2lyY2xla29yZWFuOzMyNzUKK2lldW5nYXBhcmVua29yZWFuOzMyMTUKK2lldW5nY2lyY2xla29yZWFuOzMyNjcKK2lldW5na29yZWFuOzMxNDcKK2lldW5ncGFyZW5rb3JlYW47MzIwNworaWdyYXZlOzAwRUMKK2lndWphcmF0aTswQTg3CitpZ3VybXVraGk7MEEwNworaWhpcmFnYW5hOzMwNDQKK2lob29rYWJvdmU7MUVDOQoraWliZW5nYWxpOzA5ODgKK2lpY3lyaWxsaWM7MDQzOAoraWlkZXZhOzA5MDgKK2lpZ3VqYXJhdGk7MEE4OAoraWlndXJtdWtoaTswQTA4CitpaW1hdHJhZ3VybXVraGk7MEE0MAoraWludmVydGVkYnJldmU7MDIwQgoraWlzaG9ydGN5cmlsbGljOzA0MzkKK2lpdm93ZWxzaWduYmVuZ2FsaTswOUMwCitpaXZvd2Vsc2lnbmRldmE7MDk0MAoraWl2b3dlbHNpZ25ndWphcmF0aTswQUMwCitpajswMTMzCitpa2F0YWthbmE7MzBBNAoraWthdGFrYW5haGFsZndpZHRoO0ZGNzIKK2lrb3JlYW47MzE2MworaWxkZTswMkRDCitpbHV5aGVicmV3OzA1QUMKK2ltYWNyb247MDEyQgoraW1hY3JvbmN5cmlsbGljOzA0RTMKK2ltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWw7MjI1MworaW1hdHJhZ3VybXVraGk7MEEzRgoraW1vbm9zcGFjZTtGRjQ5CitpbmNyZW1lbnQ7MjIwNgoraW5maW5pdHk7MjIxRQoraW5pYXJtZW5pYW47MDU2QgoraW50ZWdyYWw7MjIyQgoraW50ZWdyYWxib3R0b207MjMyMQoraW50ZWdyYWxidDsyMzIxCitpbnRlZ3JhbGV4O0Y4RjUKK2ludGVncmFsdG9wOzIzMjAKK2ludGVncmFsdHA7MjMyMAoraW50ZXJzZWN0aW9uOzIyMjkKK2ludGlzcXVhcmU7MzMwNQoraW52YnVsbGV0OzI1RDgKK2ludmNpcmNsZTsyNUQ5CitpbnZzbWlsZWZhY2U7MjYzQgoraW9jeXJpbGxpYzswNDUxCitpb2dvbmVrOzAxMkYKK2lvdGE7MDNCOQoraW90YWRpZXJlc2lzOzAzQ0EKK2lvdGFkaWVyZXNpc3Rvbm9zOzAzOTAKK2lvdGFsYXRpbjswMjY5Citpb3RhdG9ub3M7MDNBRgoraXBhcmVuOzI0QTQKK2lyaWd1cm11a2hpOzBBNzIKK2lzbWFsbGhpcmFnYW5hOzMwNDMKK2lzbWFsbGthdGFrYW5hOzMwQTMKK2lzbWFsbGthdGFrYW5haGFsZndpZHRoO0ZGNjgKK2lzc2hhcmJlbmdhbGk7MDlGQQoraXN0cm9rZTswMjY4Citpc3VwZXJpb3I7RjZFRAoraXRlcmF0aW9uaGlyYWdhbmE7MzA5RAoraXRlcmF0aW9ua2F0YWthbmE7MzBGRAoraXRpbGRlOzAxMjkKK2l0aWxkZWJlbG93OzFFMkQKK2l1Ym9wb21vZm87MzEyOQoraXVjeXJpbGxpYzswNDRFCitpdm93ZWxzaWduYmVuZ2FsaTswOUJGCitpdm93ZWxzaWduZGV2YTswOTNGCitpdm93ZWxzaWduZ3VqYXJhdGk7MEFCRgoraXpoaXRzYWN5cmlsbGljOzA0NzUKK2l6aGl0c2FkYmxncmF2ZWN5cmlsbGljOzA0NzcKK2o7MDA2QQoramFhcm1lbmlhbjswNTcxCitqYWJlbmdhbGk7MDk5QworamFkZXZhOzA5MUMKK2phZ3VqYXJhdGk7MEE5QworamFndXJtdWtoaTswQTFDCitqYm9wb21vZm87MzExMAoramNhcm9uOzAxRjAKK2pjaXJjbGU7MjREOQoramNpcmN1bWZsZXg7MDEzNQoramNyb3NzZWR0YWlsOzAyOUQKK2pkb3RsZXNzc3Ryb2tlOzAyNUYKK2plY3lyaWxsaWM7MDQ1OAoramVlbWFyYWJpYzswNjJDCitqZWVtZmluYWxhcmFiaWM7RkU5RQoramVlbWluaXRpYWxhcmFiaWM7RkU5RgoramVlbW1lZGlhbGFyYWJpYztGRUEwCitqZWhhcmFiaWM7MDY5OAoramVoZmluYWxhcmFiaWM7RkI4QgoramhhYmVuZ2FsaTswOTlECitqaGFkZXZhOzA5MUQKK2poYWd1amFyYXRpOzBBOUQKK2poYWd1cm11a2hpOzBBMUQKK2poZWhhcm1lbmlhbjswNTdCCitqaXM7MzAwNAoram1vbm9zcGFjZTtGRjRBCitqcGFyZW47MjRBNQoranN1cGVyaW9yOzAyQjIKK2s7MDA2Qgora2FiYXNoa2lyY3lyaWxsaWM7MDRBMQora2FiZW5nYWxpOzA5OTUKK2thY3V0ZTsxRTMxCitrYWN5cmlsbGljOzA0M0EKK2thZGVzY2VuZGVyY3lyaWxsaWM7MDQ5Qgora2FkZXZhOzA5MTUKK2thZjswNURCCitrYWZhcmFiaWM7MDY0Mwora2FmZGFnZXNoO0ZCM0IKK2thZmRhZ2VzaGhlYnJldztGQjNCCitrYWZmaW5hbGFyYWJpYztGRURBCitrYWZoZWJyZXc7MDVEQgora2FmaW5pdGlhbGFyYWJpYztGRURCCitrYWZtZWRpYWxhcmFiaWM7RkVEQwora2FmcmFmZWhlYnJldztGQjRECitrYWd1amFyYXRpOzBBOTUKK2thZ3VybXVraGk7MEExNQora2FoaXJhZ2FuYTszMDRCCitrYWhvb2tjeXJpbGxpYzswNEM0CitrYWthdGFrYW5hOzMwQUIKK2tha2F0YWthbmFoYWxmd2lkdGg7RkY3Ngora2FwcGE7MDNCQQora2FwcGFzeW1ib2xncmVlazswM0YwCitrYXB5ZW91bm1pZXVta29yZWFuOzMxNzEKK2thcHllb3VucGhpZXVwaGtvcmVhbjszMTg0CitrYXB5ZW91bnBpZXVwa29yZWFuOzMxNzgKK2thcHllb3Vuc3NhbmdwaWV1cGtvcmVhbjszMTc5CitrYXJvcmlpc3F1YXJlOzMzMEQKK2thc2hpZGFhdXRvYXJhYmljOzA2NDAKK2thc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYzswNjQwCitrYXNtYWxsa2F0YWthbmE7MzBGNQora2FzcXVhcmU7MzM4NAora2FzcmFhcmFiaWM7MDY1MAora2FzcmF0YW5hcmFiaWM7MDY0RAora2FzdHJva2VjeXJpbGxpYzswNDlGCitrYXRhaGlyYXByb2xvbmdtYXJraGFsZndpZHRoO0ZGNzAKK2thdmVydGljYWxzdHJva2VjeXJpbGxpYzswNDlECitrYm9wb21vZm87MzEwRQora2NhbHNxdWFyZTszMzg5CitrY2Fyb247MDFFOQora2NlZGlsbGE7MDEzNwora2NpcmNsZTsyNERBCitrY29tbWFhY2NlbnQ7MDEzNwora2RvdGJlbG93OzFFMzMKK2tlaGFybWVuaWFuOzA1ODQKK2tlaGlyYWdhbmE7MzA1MQora2VrYXRha2FuYTszMEIxCitrZWthdGFrYW5haGFsZndpZHRoO0ZGNzkKK2tlbmFybWVuaWFuOzA1NkYKK2tlc21hbGxrYXRha2FuYTszMEY2CitrZ3JlZW5sYW5kaWM7MDEzOAora2hhYmVuZ2FsaTswOTk2CitraGFjeXJpbGxpYzswNDQ1CitraGFkZXZhOzA5MTYKK2toYWd1amFyYXRpOzBBOTYKK2toYWd1cm11a2hpOzBBMTYKK2toYWhhcmFiaWM7MDYyRQora2hhaGZpbmFsYXJhYmljO0ZFQTYKK2toYWhpbml0aWFsYXJhYmljO0ZFQTcKK2toYWhtZWRpYWxhcmFiaWM7RkVBOAora2hlaWNvcHRpYzswM0U3CitraGhhZGV2YTswOTU5CitraGhhZ3VybXVraGk7MEE1OQora2hpZXVraGFjaXJjbGVrb3JlYW47MzI3OAora2hpZXVraGFwYXJlbmtvcmVhbjszMjE4CitraGlldWtoY2lyY2xla29yZWFuOzMyNkEKK2toaWV1a2hrb3JlYW47MzE0Qgora2hpZXVraHBhcmVua29yZWFuOzMyMEEKK2tob2toYWl0aGFpOzBFMDIKK2tob2tob250aGFpOzBFMDUKK2tob2todWF0dGhhaTswRTAzCitraG9raHdhaXRoYWk7MEUwNAora2hvbXV0dGhhaTswRTVCCitraG9vazswMTk5CitraG9yYWtoYW5ndGhhaTswRTA2CitraHpzcXVhcmU7MzM5MQora2loaXJhZ2FuYTszMDRECitraWthdGFrYW5hOzMwQUQKK2tpa2F0YWthbmFoYWxmd2lkdGg7RkY3Nwora2lyb2d1cmFtdXNxdWFyZTszMzE1CitraXJvbWVldG9ydXNxdWFyZTszMzE2CitraXJvc3F1YXJlOzMzMTQKK2tpeWVva2FjaXJjbGVrb3JlYW47MzI2RQora2l5ZW9rYXBhcmVua29yZWFuOzMyMEUKK2tpeWVva2NpcmNsZWtvcmVhbjszMjYwCitraXllb2trb3JlYW47MzEzMQora2l5ZW9rcGFyZW5rb3JlYW47MzIwMAora2l5ZW9rc2lvc2tvcmVhbjszMTMzCitramVjeXJpbGxpYzswNDVDCitrbGluZWJlbG93OzFFMzUKK2tsc3F1YXJlOzMzOTgKK2ttY3ViZWRzcXVhcmU7MzNBNgora21vbm9zcGFjZTtGRjRCCitrbXNxdWFyZWRzcXVhcmU7MzNBMgora29oaXJhZ2FuYTszMDUzCitrb2htc3F1YXJlOzMzQzAKK2tva2FpdGhhaTswRTAxCitrb2thdGFrYW5hOzMwQjMKK2tva2F0YWthbmFoYWxmd2lkdGg7RkY3QQora29vcG9zcXVhcmU7MzMxRQora29wcGFjeXJpbGxpYzswNDgxCitrb3JlYW5zdGFuZGFyZHN5bWJvbDszMjdGCitrb3JvbmlzY21iOzAzNDMKK2twYXJlbjsyNEE2CitrcGFzcXVhcmU7MzNBQQora3NpY3lyaWxsaWM7MDQ2Rgora3RzcXVhcmU7MzNDRgora3R1cm5lZDswMjlFCitrdWhpcmFnYW5hOzMwNEYKK2t1a2F0YWthbmE7MzBBRgora3VrYXRha2FuYWhhbGZ3aWR0aDtGRjc4CitrdnNxdWFyZTszM0I4Citrd3NxdWFyZTszM0JFCitsOzAwNkMKK2xhYmVuZ2FsaTswOUIyCitsYWN1dGU7MDEzQQorbGFkZXZhOzA5MzIKK2xhZ3VqYXJhdGk7MEFCMgorbGFndXJtdWtoaTswQTMyCitsYWtraGFuZ3lhb3RoYWk7MEU0NQorbGFtYWxlZmZpbmFsYXJhYmljO0ZFRkMKK2xhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWM7RkVGOAorbGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYztGRUY3CitsYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljO0ZFRkEKK2xhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWM7RkVGOQorbGFtYWxlZmlzb2xhdGVkYXJhYmljO0ZFRkIKK2xhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWM7RkVGNgorbGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYztGRUY1CitsYW1hcmFiaWM7MDY0NAorbGFtYmRhOzAzQkIKK2xhbWJkYXN0cm9rZTswMTlCCitsYW1lZDswNURDCitsYW1lZGRhZ2VzaDtGQjNDCitsYW1lZGRhZ2VzaGhlYnJldztGQjNDCitsYW1lZGhlYnJldzswNURDCitsYW1lZGhvbGFtOzA1REMgMDVCOQorbGFtZWRob2xhbWRhZ2VzaDswNURDIDA1QjkgMDVCQworbGFtZWRob2xhbWRhZ2VzaGhlYnJldzswNURDIDA1QjkgMDVCQworbGFtZWRob2xhbWhlYnJldzswNURDIDA1QjkKK2xhbWZpbmFsYXJhYmljO0ZFREUKK2xhbWhhaGluaXRpYWxhcmFiaWM7RkNDQQorbGFtaW5pdGlhbGFyYWJpYztGRURGCitsYW1qZWVtaW5pdGlhbGFyYWJpYztGQ0M5CitsYW1raGFoaW5pdGlhbGFyYWJpYztGQ0NCCitsYW1sYW1oZWhpc29sYXRlZGFyYWJpYztGREYyCitsYW1tZWRpYWxhcmFiaWM7RkVFMAorbGFtbWVlbWhhaGluaXRpYWxhcmFiaWM7RkQ4OAorbGFtbWVlbWluaXRpYWxhcmFiaWM7RkNDQworbGFtbWVlbWplZW1pbml0aWFsYXJhYmljO0ZFREYgRkVFNCBGRUEwCitsYW1tZWVta2hhaGluaXRpYWxhcmFiaWM7RkVERiBGRUU0IEZFQTgKK2xhcmdlY2lyY2xlOzI1RUYKK2xiYXI7MDE5QQorbGJlbHQ7MDI2QworbGJvcG9tb2ZvOzMxMEMKK2xjYXJvbjswMTNFCitsY2VkaWxsYTswMTNDCitsY2lyY2xlOzI0REIKK2xjaXJjdW1mbGV4YmVsb3c7MUUzRAorbGNvbW1hYWNjZW50OzAxM0MKK2xkb3Q7MDE0MAorbGRvdGFjY2VudDswMTQwCitsZG90YmVsb3c7MUUzNworbGRvdGJlbG93bWFjcm9uOzFFMzkKK2xlZnRhbmdsZWFib3ZlY21iOzAzMUEKK2xlZnR0YWNrYmVsb3djbWI7MDMxOAorbGVzczswMDNDCitsZXNzZXF1YWw7MjI2NAorbGVzc2VxdWFsb3JncmVhdGVyOzIyREEKK2xlc3Ntb25vc3BhY2U7RkYxQworbGVzc29yZXF1aXZhbGVudDsyMjcyCitsZXNzb3JncmVhdGVyOzIyNzYKK2xlc3NvdmVyZXF1YWw7MjI2NgorbGVzc3NtYWxsO0ZFNjQKK2xlemg7MDI2RQorbGZibG9jazsyNThDCitsaG9va3JldHJvZmxleDswMjZECitsaXJhOzIwQTQKK2xpd25hcm1lbmlhbjswNTZDCitsajswMUM5CitsamVjeXJpbGxpYzswNDU5CitsbDtGNkMwCitsbGFkZXZhOzA5MzMKK2xsYWd1amFyYXRpOzBBQjMKK2xsaW5lYmVsb3c7MUUzQgorbGxsYWRldmE7MDkzNAorbGx2b2NhbGljYmVuZ2FsaTswOUUxCitsbHZvY2FsaWNkZXZhOzA5NjEKK2xsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk7MDlFMworbGx2b2NhbGljdm93ZWxzaWduZGV2YTswOTYzCitsbWlkZGxldGlsZGU7MDI2QgorbG1vbm9zcGFjZTtGRjRDCitsbXNxdWFyZTszM0QwCitsb2NodWxhdGhhaTswRTJDCitsb2dpY2FsYW5kOzIyMjcKK2xvZ2ljYWxub3Q7MDBBQworbG9naWNhbG5vdHJldmVyc2VkOzIzMTAKK2xvZ2ljYWxvcjsyMjI4Citsb2xpbmd0aGFpOzBFMjUKK2xvbmdzOzAxN0YKK2xvd2xpbmVjZW50ZXJsaW5lO0ZFNEUKK2xvd2xpbmVjbWI7MDMzMgorbG93bGluZWRhc2hlZDtGRTRECitsb3plbmdlOzI1Q0EKK2xwYXJlbjsyNEE3Citsc2xhc2g7MDE0MgorbHNxdWFyZTsyMTEzCitsc3VwZXJpb3I7RjZFRQorbHRzaGFkZTsyNTkxCitsdXRoYWk7MEUyNgorbHZvY2FsaWNiZW5nYWxpOzA5OEMKK2x2b2NhbGljZGV2YTswOTBDCitsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk7MDlFMgorbHZvY2FsaWN2b3dlbHNpZ25kZXZhOzA5NjIKK2x4c3F1YXJlOzMzRDMKK207MDA2RAorbWFiZW5nYWxpOzA5QUUKK21hY3JvbjswMEFGCittYWNyb25iZWxvd2NtYjswMzMxCittYWNyb25jbWI7MDMwNAorbWFjcm9ubG93bW9kOzAyQ0QKK21hY3Jvbm1vbm9zcGFjZTtGRkUzCittYWN1dGU7MUUzRgorbWFkZXZhOzA5MkUKK21hZ3VqYXJhdGk7MEFBRQorbWFndXJtdWtoaTswQTJFCittYWhhcGFraGhlYnJldzswNUE0CittYWhhcGFraGxlZnRoZWJyZXc7MDVBNAorbWFoaXJhZ2FuYTszMDdFCittYWljaGF0dGF3YWxvd2xlZnR0aGFpO0Y4OTUKK21haWNoYXR0YXdhbG93cmlnaHR0aGFpO0Y4OTQKK21haWNoYXR0YXdhdGhhaTswRTRCCittYWljaGF0dGF3YXVwcGVybGVmdHRoYWk7Rjg5MworbWFpZWtsb3dsZWZ0dGhhaTtGODhDCittYWlla2xvd3JpZ2h0dGhhaTtGODhCCittYWlla3RoYWk7MEU0OAorbWFpZWt1cHBlcmxlZnR0aGFpO0Y4OEEKK21haWhhbmFrYXRsZWZ0dGhhaTtGODg0CittYWloYW5ha2F0dGhhaTswRTMxCittYWl0YWlraHVsZWZ0dGhhaTtGODg5CittYWl0YWlraHV0aGFpOzBFNDcKK21haXRob2xvd2xlZnR0aGFpO0Y4OEYKK21haXRob2xvd3JpZ2h0dGhhaTtGODhFCittYWl0aG90aGFpOzBFNDkKK21haXRob3VwcGVybGVmdHRoYWk7Rjg4RAorbWFpdHJpbG93bGVmdHRoYWk7Rjg5MgorbWFpdHJpbG93cmlnaHR0aGFpO0Y4OTEKK21haXRyaXRoYWk7MEU0QQorbWFpdHJpdXBwZXJsZWZ0dGhhaTtGODkwCittYWl5YW1va3RoYWk7MEU0NgorbWFrYXRha2FuYTszMERFCittYWthdGFrYW5haGFsZndpZHRoO0ZGOEYKK21hbGU7MjY0MgorbWFuc3lvbnNxdWFyZTszMzQ3CittYXFhZmhlYnJldzswNUJFCittYXJzOzI2NDIKK21hc29yYWNpcmNsZWhlYnJldzswNUFGCittYXNxdWFyZTszMzgzCittYm9wb21vZm87MzEwNworbWJzcXVhcmU7MzNENAorbWNpcmNsZTsyNERDCittY3ViZWRzcXVhcmU7MzNBNQorbWRvdGFjY2VudDsxRTQxCittZG90YmVsb3c7MUU0MworbWVlbWFyYWJpYzswNjQ1CittZWVtZmluYWxhcmFiaWM7RkVFMgorbWVlbWluaXRpYWxhcmFiaWM7RkVFMworbWVlbW1lZGlhbGFyYWJpYztGRUU0CittZWVtbWVlbWluaXRpYWxhcmFiaWM7RkNEMQorbWVlbW1lZW1pc29sYXRlZGFyYWJpYztGQzQ4CittZWV0b3J1c3F1YXJlOzMzNEQKK21laGlyYWdhbmE7MzA4MQorbWVpemllcmFzcXVhcmU7MzM3RQorbWVrYXRha2FuYTszMEUxCittZWthdGFrYW5haGFsZndpZHRoO0ZGOTIKK21lbTswNURFCittZW1kYWdlc2g7RkIzRQorbWVtZGFnZXNoaGVicmV3O0ZCM0UKK21lbWhlYnJldzswNURFCittZW5hcm1lbmlhbjswNTc0CittZXJraGFoZWJyZXc7MDVBNQorbWVya2hha2VmdWxhaGVicmV3OzA1QTYKK21lcmtoYWtlZnVsYWxlZnRoZWJyZXc7MDVBNgorbWVya2hhbGVmdGhlYnJldzswNUE1CittaG9vazswMjcxCittaHpzcXVhcmU7MzM5MgorbWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGg7RkY2NQorbWlkZG90OzAwQjcKK21pZXVtYWNpcmNsZWtvcmVhbjszMjcyCittaWV1bWFwYXJlbmtvcmVhbjszMjEyCittaWV1bWNpcmNsZWtvcmVhbjszMjY0CittaWV1bWtvcmVhbjszMTQxCittaWV1bXBhbnNpb3Nrb3JlYW47MzE3MAorbWlldW1wYXJlbmtvcmVhbjszMjA0CittaWV1bXBpZXVwa29yZWFuOzMxNkUKK21pZXVtc2lvc2tvcmVhbjszMTZGCittaWhpcmFnYW5hOzMwN0YKK21pa2F0YWthbmE7MzBERgorbWlrYXRha2FuYWhhbGZ3aWR0aDtGRjkwCittaW51czsyMjEyCittaW51c2JlbG93Y21iOzAzMjAKK21pbnVzY2lyY2xlOzIyOTYKK21pbnVzbW9kOzAyRDcKK21pbnVzcGx1czsyMjEzCittaW51dGU7MjAzMgorbWlyaWJhYXJ1c3F1YXJlOzMzNEEKK21pcmlzcXVhcmU7MzM0OQorbWxvbmdsZWd0dXJuZWQ7MDI3MAorbWxzcXVhcmU7MzM5NgorbW1jdWJlZHNxdWFyZTszM0EzCittbW9ub3NwYWNlO0ZGNEQKK21tc3F1YXJlZHNxdWFyZTszMzlGCittb2hpcmFnYW5hOzMwODIKK21vaG1zcXVhcmU7MzNDMQorbW9rYXRha2FuYTszMEUyCittb2thdGFrYW5haGFsZndpZHRoO0ZGOTMKK21vbHNxdWFyZTszM0Q2Cittb21hdGhhaTswRTIxCittb3ZlcnNzcXVhcmU7MzNBNworbW92ZXJzc3F1YXJlZHNxdWFyZTszM0E4CittcGFyZW47MjRBOAorbXBhc3F1YXJlOzMzQUIKK21zc3F1YXJlOzMzQjMKK21zdXBlcmlvcjtGNkVGCittdHVybmVkOzAyNkYKK211OzAwQjUKK211MTswMEI1CittdWFzcXVhcmU7MzM4MgorbXVjaGdyZWF0ZXI7MjI2QgorbXVjaGxlc3M7MjI2QQorbXVmc3F1YXJlOzMzOEMKK211Z3JlZWs7MDNCQworbXVnc3F1YXJlOzMzOEQKK211aGlyYWdhbmE7MzA4MAorbXVrYXRha2FuYTszMEUwCittdWthdGFrYW5haGFsZndpZHRoO0ZGOTEKK211bHNxdWFyZTszMzk1CittdWx0aXBseTswMEQ3CittdW1zcXVhcmU7MzM5QgorbXVuYWhoZWJyZXc7MDVBMworbXVuYWhsZWZ0aGVicmV3OzA1QTMKK211c2ljYWxub3RlOzI2NkEKK211c2ljYWxub3RlZGJsOzI2NkIKK211c2ljZmxhdHNpZ247MjY2RAorbXVzaWNzaGFycHNpZ247MjY2RgorbXVzc3F1YXJlOzMzQjIKK211dnNxdWFyZTszM0I2CittdXdzcXVhcmU7MzNCQworbXZtZWdhc3F1YXJlOzMzQjkKK212c3F1YXJlOzMzQjcKK213bWVnYXNxdWFyZTszM0JGCittd3NxdWFyZTszM0JECituOzAwNkUKK25hYmVuZ2FsaTswOUE4CituYWJsYTsyMjA3CituYWN1dGU7MDE0NAorbmFkZXZhOzA5MjgKK25hZ3VqYXJhdGk7MEFBOAorbmFndXJtdWtoaTswQTI4CituYWhpcmFnYW5hOzMwNkEKK25ha2F0YWthbmE7MzBDQQorbmFrYXRha2FuYWhhbGZ3aWR0aDtGRjg1CituYXBvc3Ryb3BoZTswMTQ5CituYXNxdWFyZTszMzgxCituYm9wb21vZm87MzEwQgorbmJzcGFjZTswMEEwCituY2Fyb247MDE0OAorbmNlZGlsbGE7MDE0NgorbmNpcmNsZTsyNERECituY2lyY3VtZmxleGJlbG93OzFFNEIKK25jb21tYWFjY2VudDswMTQ2CituZG90YWNjZW50OzFFNDUKK25kb3RiZWxvdzsxRTQ3CituZWhpcmFnYW5hOzMwNkQKK25la2F0YWthbmE7MzBDRAorbmVrYXRha2FuYWhhbGZ3aWR0aDtGRjg4CituZXdzaGVxZWxzaWduOzIwQUEKK25mc3F1YXJlOzMzOEIKK25nYWJlbmdhbGk7MDk5OQorbmdhZGV2YTswOTE5CituZ2FndWphcmF0aTswQTk5CituZ2FndXJtdWtoaTswQTE5CituZ29uZ3V0aGFpOzBFMDcKK25oaXJhZ2FuYTszMDkzCituaG9va2xlZnQ7MDI3Mgorbmhvb2tyZXRyb2ZsZXg7MDI3MworbmlldW5hY2lyY2xla29yZWFuOzMyNkYKK25pZXVuYXBhcmVua29yZWFuOzMyMEYKK25pZXVuY2lldWNrb3JlYW47MzEzNQorbmlldW5jaXJjbGVrb3JlYW47MzI2MQorbmlldW5oaWV1aGtvcmVhbjszMTM2CituaWV1bmtvcmVhbjszMTM0CituaWV1bnBhbnNpb3Nrb3JlYW47MzE2OAorbmlldW5wYXJlbmtvcmVhbjszMjAxCituaWV1bnNpb3Nrb3JlYW47MzE2NworbmlldW50aWtldXRrb3JlYW47MzE2NgorbmloaXJhZ2FuYTszMDZCCituaWthdGFrYW5hOzMwQ0IKK25pa2F0YWthbmFoYWxmd2lkdGg7RkY4NgorbmlraGFoaXRsZWZ0dGhhaTtGODk5CituaWtoYWhpdHRoYWk7MEU0RAorbmluZTswMDM5CituaW5lYXJhYmljOzA2NjkKK25pbmViZW5nYWxpOzA5RUYKK25pbmVjaXJjbGU7MjQ2OAorbmluZWNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc5MgorbmluZWRldmE7MDk2RgorbmluZWd1amFyYXRpOzBBRUYKK25pbmVndXJtdWtoaTswQTZGCituaW5laGFja2FyYWJpYzswNjY5CituaW5laGFuZ3pob3U7MzAyOQorbmluZWlkZW9ncmFwaGljcGFyZW47MzIyOAorbmluZWluZmVyaW9yOzIwODkKK25pbmVtb25vc3BhY2U7RkYxOQorbmluZW9sZHN0eWxlO0Y3MzkKK25pbmVwYXJlbjsyNDdDCituaW5lcGVyaW9kOzI0OTAKK25pbmVwZXJzaWFuOzA2RjkKK25pbmVyb21hbjsyMTc4CituaW5lc3VwZXJpb3I7MjA3OQorbmluZXRlZW5jaXJjbGU7MjQ3MgorbmluZXRlZW5wYXJlbjsyNDg2CituaW5ldGVlbnBlcmlvZDsyNDlBCituaW5ldGhhaTswRTU5CituajswMUNDCituamVjeXJpbGxpYzswNDVBCitua2F0YWthbmE7MzBGMworbmthdGFrYW5haGFsZndpZHRoO0ZGOUQKK25sZWdyaWdodGxvbmc7MDE5RQorbmxpbmViZWxvdzsxRTQ5CitubW9ub3NwYWNlO0ZGNEUKK25tc3F1YXJlOzMzOUEKK25uYWJlbmdhbGk7MDlBMworbm5hZGV2YTswOTIzCitubmFndWphcmF0aTswQUEzCitubmFndXJtdWtoaTswQTIzCitubm5hZGV2YTswOTI5Citub2hpcmFnYW5hOzMwNkUKK25va2F0YWthbmE7MzBDRQorbm9rYXRha2FuYWhhbGZ3aWR0aDtGRjg5Citub25icmVha2luZ3NwYWNlOzAwQTAKK25vbmVudGhhaTswRTEzCitub251dGhhaTswRTE5Citub29uYXJhYmljOzA2NDYKK25vb25maW5hbGFyYWJpYztGRUU2Citub29uZ2h1bm5hYXJhYmljOzA2QkEKK25vb25naHVubmFmaW5hbGFyYWJpYztGQjlGCitub29uaGVoaW5pdGlhbGFyYWJpYztGRUU3IEZFRUMKK25vb25pbml0aWFsYXJhYmljO0ZFRTcKK25vb25qZWVtaW5pdGlhbGFyYWJpYztGQ0QyCitub29uamVlbWlzb2xhdGVkYXJhYmljO0ZDNEIKK25vb25tZWRpYWxhcmFiaWM7RkVFOAorbm9vbm1lZW1pbml0aWFsYXJhYmljO0ZDRDUKK25vb25tZWVtaXNvbGF0ZWRhcmFiaWM7RkM0RQorbm9vbm5vb25maW5hbGFyYWJpYztGQzhECitub3Rjb250YWluczsyMjBDCitub3RlbGVtZW50OzIyMDkKK25vdGVsZW1lbnRvZjsyMjA5Citub3RlcXVhbDsyMjYwCitub3RncmVhdGVyOzIyNkYKK25vdGdyZWF0ZXJub3JlcXVhbDsyMjcxCitub3RncmVhdGVybm9ybGVzczsyMjc5Citub3RpZGVudGljYWw7MjI2Mgorbm90bGVzczsyMjZFCitub3RsZXNzbm9yZXF1YWw7MjI3MAorbm90cGFyYWxsZWw7MjIyNgorbm90cHJlY2VkZXM7MjI4MAorbm90c3Vic2V0OzIyODQKK25vdHN1Y2NlZWRzOzIyODEKK25vdHN1cGVyc2V0OzIyODUKK25vd2FybWVuaWFuOzA1NzYKK25wYXJlbjsyNEE5Cituc3NxdWFyZTszM0IxCituc3VwZXJpb3I7MjA3RgorbnRpbGRlOzAwRjEKK251OzAzQkQKK251aGlyYWdhbmE7MzA2QworbnVrYXRha2FuYTszMENDCitudWthdGFrYW5haGFsZndpZHRoO0ZGODcKK251a3RhYmVuZ2FsaTswOUJDCitudWt0YWRldmE7MDkzQworbnVrdGFndWphcmF0aTswQUJDCitudWt0YWd1cm11a2hpOzBBM0MKK251bWJlcnNpZ247MDAyMworbnVtYmVyc2lnbm1vbm9zcGFjZTtGRjAzCitudW1iZXJzaWduc21hbGw7RkU1RgorbnVtZXJhbHNpZ25ncmVlazswMzc0CitudW1lcmFsc2lnbmxvd2VyZ3JlZWs7MDM3NQorbnVtZXJvOzIxMTYKK251bjswNUUwCitudW5kYWdlc2g7RkI0MAorbnVuZGFnZXNoaGVicmV3O0ZCNDAKK251bmhlYnJldzswNUUwCitudnNxdWFyZTszM0I1Citud3NxdWFyZTszM0JCCitueWFiZW5nYWxpOzA5OUUKK255YWRldmE7MDkxRQorbnlhZ3VqYXJhdGk7MEE5RQorbnlhZ3VybXVraGk7MEExRQorbzswMDZGCitvYWN1dGU7MDBGMworb2FuZ3RoYWk7MEUyRAorb2JhcnJlZDswMjc1CitvYmFycmVkY3lyaWxsaWM7MDRFOQorb2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM7MDRFQgorb2JlbmdhbGk7MDk5Mworb2JvcG9tb2ZvOzMxMUIKK29icmV2ZTswMTRGCitvY2FuZHJhZGV2YTswOTExCitvY2FuZHJhZ3VqYXJhdGk7MEE5MQorb2NhbmRyYXZvd2Vsc2lnbmRldmE7MDk0OQorb2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpOzBBQzkKK29jYXJvbjswMUQyCitvY2lyY2xlOzI0REUKK29jaXJjdW1mbGV4OzAwRjQKK29jaXJjdW1mbGV4YWN1dGU7MUVEMQorb2NpcmN1bWZsZXhkb3RiZWxvdzsxRUQ5CitvY2lyY3VtZmxleGdyYXZlOzFFRDMKK29jaXJjdW1mbGV4aG9va2Fib3ZlOzFFRDUKK29jaXJjdW1mbGV4dGlsZGU7MUVENworb2N5cmlsbGljOzA0M0UKK29kYmxhY3V0ZTswMTUxCitvZGJsZ3JhdmU7MDIwRAorb2RldmE7MDkxMworb2RpZXJlc2lzOzAwRjYKK29kaWVyZXNpc2N5cmlsbGljOzA0RTcKK29kb3RiZWxvdzsxRUNECitvZTswMTUzCitvZWtvcmVhbjszMTVBCitvZ29uZWs7MDJEQgorb2dvbmVrY21iOzAzMjgKK29ncmF2ZTswMEYyCitvZ3VqYXJhdGk7MEE5Mworb2hhcm1lbmlhbjswNTg1CitvaGlyYWdhbmE7MzA0QQorb2hvb2thYm92ZTsxRUNGCitvaG9ybjswMUExCitvaG9ybmFjdXRlOzFFREIKK29ob3JuZG90YmVsb3c7MUVFMworb2hvcm5ncmF2ZTsxRURECitvaG9ybmhvb2thYm92ZTsxRURGCitvaG9ybnRpbGRlOzFFRTEKK29odW5nYXJ1bWxhdXQ7MDE1MQorb2k7MDFBMworb2ludmVydGVkYnJldmU7MDIwRgorb2thdGFrYW5hOzMwQUEKK29rYXRha2FuYWhhbGZ3aWR0aDtGRjc1Citva29yZWFuOzMxNTcKK29sZWhlYnJldzswNUFCCitvbWFjcm9uOzAxNEQKK29tYWNyb25hY3V0ZTsxRTUzCitvbWFjcm9uZ3JhdmU7MUU1MQorb21kZXZhOzA5NTAKK29tZWdhOzAzQzkKK29tZWdhMTswM0Q2CitvbWVnYWN5cmlsbGljOzA0NjEKK29tZWdhbGF0aW5jbG9zZWQ7MDI3Nworb21lZ2Fyb3VuZGN5cmlsbGljOzA0N0IKK29tZWdhdGl0bG9jeXJpbGxpYzswNDdECitvbWVnYXRvbm9zOzAzQ0UKK29tZ3VqYXJhdGk7MEFEMAorb21pY3JvbjswM0JGCitvbWljcm9udG9ub3M7MDNDQworb21vbm9zcGFjZTtGRjRGCitvbmU7MDAzMQorb25lYXJhYmljOzA2NjEKK29uZWJlbmdhbGk7MDlFNworb25lY2lyY2xlOzI0NjAKK29uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc4QQorb25lZGV2YTswOTY3CitvbmVkb3RlbmxlYWRlcjsyMDI0CitvbmVlaWdodGg7MjE1Qgorb25lZml0dGVkO0Y2REMKK29uZWd1amFyYXRpOzBBRTcKK29uZWd1cm11a2hpOzBBNjcKK29uZWhhY2thcmFiaWM7MDY2MQorb25laGFsZjswMEJECitvbmVoYW5nemhvdTszMDIxCitvbmVpZGVvZ3JhcGhpY3BhcmVuOzMyMjAKK29uZWluZmVyaW9yOzIwODEKK29uZW1vbm9zcGFjZTtGRjExCitvbmVudW1lcmF0b3JiZW5nYWxpOzA5RjQKK29uZW9sZHN0eWxlO0Y3MzEKK29uZXBhcmVuOzI0NzQKK29uZXBlcmlvZDsyNDg4CitvbmVwZXJzaWFuOzA2RjEKK29uZXF1YXJ0ZXI7MDBCQworb25lcm9tYW47MjE3MAorb25lc3VwZXJpb3I7MDBCOQorb25ldGhhaTswRTUxCitvbmV0aGlyZDsyMTUzCitvb2dvbmVrOzAxRUIKK29vZ29uZWttYWNyb247MDFFRAorb29ndXJtdWtoaTswQTEzCitvb21hdHJhZ3VybXVraGk7MEE0Qgorb29wZW47MDI1NAorb3BhcmVuOzI0QUEKK29wZW5idWxsZXQ7MjVFNgorb3B0aW9uOzIzMjUKK29yZGZlbWluaW5lOzAwQUEKK29yZG1hc2N1bGluZTswMEJBCitvcnRob2dvbmFsOzIyMUYKK29zaG9ydGRldmE7MDkxMgorb3Nob3J0dm93ZWxzaWduZGV2YTswOTRBCitvc2xhc2g7MDBGOAorb3NsYXNoYWN1dGU7MDFGRgorb3NtYWxsaGlyYWdhbmE7MzA0OQorb3NtYWxsa2F0YWthbmE7MzBBOQorb3NtYWxsa2F0YWthbmFoYWxmd2lkdGg7RkY2Qgorb3N0cm9rZWFjdXRlOzAxRkYKK29zdXBlcmlvcjtGNkYwCitvdGN5cmlsbGljOzA0N0YKK290aWxkZTswMEY1CitvdGlsZGVhY3V0ZTsxRTRECitvdGlsZGVkaWVyZXNpczsxRTRGCitvdWJvcG9tb2ZvOzMxMjEKK292ZXJsaW5lOzIwM0UKK292ZXJsaW5lY2VudGVybGluZTtGRTRBCitvdmVybGluZWNtYjswMzA1CitvdmVybGluZWRhc2hlZDtGRTQ5CitvdmVybGluZWRibHdhdnk7RkU0Qworb3ZlcmxpbmV3YXZ5O0ZFNEIKK292ZXJzY29yZTswMEFGCitvdm93ZWxzaWduYmVuZ2FsaTswOUNCCitvdm93ZWxzaWduZGV2YTswOTRCCitvdm93ZWxzaWduZ3VqYXJhdGk7MEFDQgorcDswMDcwCitwYWFtcHNzcXVhcmU7MzM4MAorcGFhc2VudG9zcXVhcmU7MzMyQgorcGFiZW5nYWxpOzA5QUEKK3BhY3V0ZTsxRTU1CitwYWRldmE7MDkyQQorcGFnZWRvd247MjFERgorcGFnZXVwOzIxREUKK3BhZ3VqYXJhdGk7MEFBQQorcGFndXJtdWtoaTswQTJBCitwYWhpcmFnYW5hOzMwNzEKK3BhaXlhbm5vaXRoYWk7MEUyRgorcGFrYXRha2FuYTszMEQxCitwYWxhdGFsaXphdGlvbmN5cmlsbGljY21iOzA0ODQKK3BhbG9jaGthY3lyaWxsaWM7MDRDMAorcGFuc2lvc2tvcmVhbjszMTdGCitwYXJhZ3JhcGg7MDBCNgorcGFyYWxsZWw7MjIyNQorcGFyZW5sZWZ0OzAwMjgKK3BhcmVubGVmdGFsdG9uZWFyYWJpYztGRDNFCitwYXJlbmxlZnRidDtGOEVECitwYXJlbmxlZnRleDtGOEVDCitwYXJlbmxlZnRpbmZlcmlvcjsyMDhECitwYXJlbmxlZnRtb25vc3BhY2U7RkYwOAorcGFyZW5sZWZ0c21hbGw7RkU1OQorcGFyZW5sZWZ0c3VwZXJpb3I7MjA3RAorcGFyZW5sZWZ0dHA7RjhFQgorcGFyZW5sZWZ0dmVydGljYWw7RkUzNQorcGFyZW5yaWdodDswMDI5CitwYXJlbnJpZ2h0YWx0b25lYXJhYmljO0ZEM0YKK3BhcmVucmlnaHRidDtGOEY4CitwYXJlbnJpZ2h0ZXg7RjhGNworcGFyZW5yaWdodGluZmVyaW9yOzIwOEUKK3BhcmVucmlnaHRtb25vc3BhY2U7RkYwOQorcGFyZW5yaWdodHNtYWxsO0ZFNUEKK3BhcmVucmlnaHRzdXBlcmlvcjsyMDdFCitwYXJlbnJpZ2h0dHA7RjhGNgorcGFyZW5yaWdodHZlcnRpY2FsO0ZFMzYKK3BhcnRpYWxkaWZmOzIyMDIKK3Bhc2VxaGVicmV3OzA1QzAKK3Bhc2h0YWhlYnJldzswNTk5CitwYXNxdWFyZTszM0E5CitwYXRhaDswNUI3CitwYXRhaDExOzA1QjcKK3BhdGFoMWQ7MDVCNworcGF0YWgyYTswNUI3CitwYXRhaGhlYnJldzswNUI3CitwYXRhaG5hcnJvd2hlYnJldzswNUI3CitwYXRhaHF1YXJ0ZXJoZWJyZXc7MDVCNworcGF0YWh3aWRlaGVicmV3OzA1QjcKK3BhemVyaGVicmV3OzA1QTEKK3Bib3BvbW9mbzszMTA2CitwY2lyY2xlOzI0REYKK3Bkb3RhY2NlbnQ7MUU1NworcGU7MDVFNAorcGVjeXJpbGxpYzswNDNGCitwZWRhZ2VzaDtGQjQ0CitwZWRhZ2VzaGhlYnJldztGQjQ0CitwZWV6aXNxdWFyZTszMzNCCitwZWZpbmFsZGFnZXNoaGVicmV3O0ZCNDMKK3BlaGFyYWJpYzswNjdFCitwZWhhcm1lbmlhbjswNTdBCitwZWhlYnJldzswNUU0CitwZWhmaW5hbGFyYWJpYztGQjU3CitwZWhpbml0aWFsYXJhYmljO0ZCNTgKK3BlaGlyYWdhbmE7MzA3QQorcGVobWVkaWFsYXJhYmljO0ZCNTkKK3Bla2F0YWthbmE7MzBEQQorcGVtaWRkbGVob29rY3lyaWxsaWM7MDRBNworcGVyYWZlaGVicmV3O0ZCNEUKK3BlcmNlbnQ7MDAyNQorcGVyY2VudGFyYWJpYzswNjZBCitwZXJjZW50bW9ub3NwYWNlO0ZGMDUKK3BlcmNlbnRzbWFsbDtGRTZBCitwZXJpb2Q7MDAyRQorcGVyaW9kYXJtZW5pYW47MDU4OQorcGVyaW9kY2VudGVyZWQ7MDBCNworcGVyaW9kaGFsZndpZHRoO0ZGNjEKK3BlcmlvZGluZmVyaW9yO0Y2RTcKK3BlcmlvZG1vbm9zcGFjZTtGRjBFCitwZXJpb2RzbWFsbDtGRTUyCitwZXJpb2RzdXBlcmlvcjtGNkU4CitwZXJpc3BvbWVuaWdyZWVrY21iOzAzNDIKK3BlcnBlbmRpY3VsYXI7MjJBNQorcGVydGhvdXNhbmQ7MjAzMAorcGVzZXRhOzIwQTcKK3Bmc3F1YXJlOzMzOEEKK3BoYWJlbmdhbGk7MDlBQgorcGhhZGV2YTswOTJCCitwaGFndWphcmF0aTswQUFCCitwaGFndXJtdWtoaTswQTJCCitwaGk7MDNDNgorcGhpMTswM0Q1CitwaGlldXBoYWNpcmNsZWtvcmVhbjszMjdBCitwaGlldXBoYXBhcmVua29yZWFuOzMyMUEKK3BoaWV1cGhjaXJjbGVrb3JlYW47MzI2QworcGhpZXVwaGtvcmVhbjszMTRECitwaGlldXBocGFyZW5rb3JlYW47MzIwQworcGhpbGF0aW47MDI3OAorcGhpbnRodXRoYWk7MEUzQQorcGhpc3ltYm9sZ3JlZWs7MDNENQorcGhvb2s7MDFBNQorcGhvcGhhbnRoYWk7MEUxRQorcGhvcGh1bmd0aGFpOzBFMUMKK3Bob3NhbXBoYW90aGFpOzBFMjAKK3BpOzAzQzAKK3BpZXVwYWNpcmNsZWtvcmVhbjszMjczCitwaWV1cGFwYXJlbmtvcmVhbjszMjEzCitwaWV1cGNpZXVja29yZWFuOzMxNzYKK3BpZXVwY2lyY2xla29yZWFuOzMyNjUKK3BpZXVwa2l5ZW9ra29yZWFuOzMxNzIKK3BpZXVwa29yZWFuOzMxNDIKK3BpZXVwcGFyZW5rb3JlYW47MzIwNQorcGlldXBzaW9za2l5ZW9ra29yZWFuOzMxNzQKK3BpZXVwc2lvc2tvcmVhbjszMTQ0CitwaWV1cHNpb3N0aWtldXRrb3JlYW47MzE3NQorcGlldXB0aGlldXRoa29yZWFuOzMxNzcKK3BpZXVwdGlrZXV0a29yZWFuOzMxNzMKK3BpaGlyYWdhbmE7MzA3NAorcGlrYXRha2FuYTszMEQ0CitwaXN5bWJvbGdyZWVrOzAzRDYKK3Bpd3Jhcm1lbmlhbjswNTgzCitwbHVzOzAwMkIKK3BsdXNiZWxvd2NtYjswMzFGCitwbHVzY2lyY2xlOzIyOTUKK3BsdXNtaW51czswMEIxCitwbHVzbW9kOzAyRDYKK3BsdXNtb25vc3BhY2U7RkYwQgorcGx1c3NtYWxsO0ZFNjIKK3BsdXNzdXBlcmlvcjsyMDdBCitwbW9ub3NwYWNlO0ZGNTAKK3Btc3F1YXJlOzMzRDgKK3BvaGlyYWdhbmE7MzA3RAorcG9pbnRpbmdpbmRleGRvd253aGl0ZTsyNjFGCitwb2ludGluZ2luZGV4bGVmdHdoaXRlOzI2MUMKK3BvaW50aW5naW5kZXhyaWdodHdoaXRlOzI2MUUKK3BvaW50aW5naW5kZXh1cHdoaXRlOzI2MUQKK3Bva2F0YWthbmE7MzBERAorcG9wbGF0aGFpOzBFMUIKK3Bvc3RhbG1hcms7MzAxMgorcG9zdGFsbWFya2ZhY2U7MzAyMAorcHBhcmVuOzI0QUIKK3ByZWNlZGVzOzIyN0EKK3ByZXNjcmlwdGlvbjsyMTFFCitwcmltZW1vZDswMkI5CitwcmltZXJldmVyc2VkOzIwMzUKK3Byb2R1Y3Q7MjIwRgorcHJvamVjdGl2ZTsyMzA1Citwcm9sb25nZWRrYW5hOzMwRkMKK3Byb3BlbGxvcjsyMzE4Citwcm9wZXJzdWJzZXQ7MjI4MgorcHJvcGVyc3VwZXJzZXQ7MjI4MworcHJvcG9ydGlvbjsyMjM3Citwcm9wb3J0aW9uYWw7MjIxRAorcHNpOzAzQzgKK3BzaWN5cmlsbGljOzA0NzEKK3BzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYjswNDg2Citwc3NxdWFyZTszM0IwCitwdWhpcmFnYW5hOzMwNzcKK3B1a2F0YWthbmE7MzBENworcHZzcXVhcmU7MzNCNAorcHdzcXVhcmU7MzNCQQorcTswMDcxCitxYWRldmE7MDk1OAorcWFkbWFoZWJyZXc7MDVBOAorcWFmYXJhYmljOzA2NDIKK3FhZmZpbmFsYXJhYmljO0ZFRDYKK3FhZmluaXRpYWxhcmFiaWM7RkVENworcWFmbWVkaWFsYXJhYmljO0ZFRDgKK3FhbWF0czswNUI4CitxYW1hdHMxMDswNUI4CitxYW1hdHMxYTswNUI4CitxYW1hdHMxYzswNUI4CitxYW1hdHMyNzswNUI4CitxYW1hdHMyOTswNUI4CitxYW1hdHMzMzswNUI4CitxYW1hdHNkZTswNUI4CitxYW1hdHNoZWJyZXc7MDVCOAorcWFtYXRzbmFycm93aGVicmV3OzA1QjgKK3FhbWF0c3FhdGFuaGVicmV3OzA1QjgKK3FhbWF0c3FhdGFubmFycm93aGVicmV3OzA1QjgKK3FhbWF0c3FhdGFucXVhcnRlcmhlYnJldzswNUI4CitxYW1hdHNxYXRhbndpZGVoZWJyZXc7MDVCOAorcWFtYXRzcXVhcnRlcmhlYnJldzswNUI4CitxYW1hdHN3aWRlaGVicmV3OzA1QjgKK3Fhcm5leXBhcmFoZWJyZXc7MDU5RgorcWJvcG9tb2ZvOzMxMTEKK3FjaXJjbGU7MjRFMAorcWhvb2s7MDJBMAorcW1vbm9zcGFjZTtGRjUxCitxb2Y7MDVFNworcW9mZGFnZXNoO0ZCNDcKK3FvZmRhZ2VzaGhlYnJldztGQjQ3Citxb2ZoYXRhZnBhdGFoOzA1RTcgMDVCMgorcW9maGF0YWZwYXRhaGhlYnJldzswNUU3IDA1QjIKK3FvZmhhdGFmc2Vnb2w7MDVFNyAwNUIxCitxb2ZoYXRhZnNlZ29saGVicmV3OzA1RTcgMDVCMQorcW9maGVicmV3OzA1RTcKK3FvZmhpcmlxOzA1RTcgMDVCNAorcW9maGlyaXFoZWJyZXc7MDVFNyAwNUI0Citxb2Zob2xhbTswNUU3IDA1QjkKK3FvZmhvbGFtaGVicmV3OzA1RTcgMDVCOQorcW9mcGF0YWg7MDVFNyAwNUI3Citxb2ZwYXRhaGhlYnJldzswNUU3IDA1QjcKK3FvZnFhbWF0czswNUU3IDA1QjgKK3FvZnFhbWF0c2hlYnJldzswNUU3IDA1QjgKK3FvZnF1YnV0czswNUU3IDA1QkIKK3FvZnF1YnV0c2hlYnJldzswNUU3IDA1QkIKK3FvZnNlZ29sOzA1RTcgMDVCNgorcW9mc2Vnb2xoZWJyZXc7MDVFNyAwNUI2Citxb2ZzaGV2YTswNUU3IDA1QjAKK3FvZnNoZXZhaGVicmV3OzA1RTcgMDVCMAorcW9mdHNlcmU7MDVFNyAwNUI1Citxb2Z0c2VyZWhlYnJldzswNUU3IDA1QjUKK3FwYXJlbjsyNEFDCitxdWFydGVybm90ZTsyNjY5CitxdWJ1dHM7MDVCQgorcXVidXRzMTg7MDVCQgorcXVidXRzMjU7MDVCQgorcXVidXRzMzE7MDVCQgorcXVidXRzaGVicmV3OzA1QkIKK3F1YnV0c25hcnJvd2hlYnJldzswNUJCCitxdWJ1dHNxdWFydGVyaGVicmV3OzA1QkIKK3F1YnV0c3dpZGVoZWJyZXc7MDVCQgorcXVlc3Rpb247MDAzRgorcXVlc3Rpb25hcmFiaWM7MDYxRgorcXVlc3Rpb25hcm1lbmlhbjswNTVFCitxdWVzdGlvbmRvd247MDBCRgorcXVlc3Rpb25kb3duc21hbGw7RjdCRgorcXVlc3Rpb25ncmVlazswMzdFCitxdWVzdGlvbm1vbm9zcGFjZTtGRjFGCitxdWVzdGlvbnNtYWxsO0Y3M0YKK3F1b3RlZGJsOzAwMjIKK3F1b3RlZGJsYmFzZTsyMDFFCitxdW90ZWRibGxlZnQ7MjAxQworcXVvdGVkYmxtb25vc3BhY2U7RkYwMgorcXVvdGVkYmxwcmltZTszMDFFCitxdW90ZWRibHByaW1lcmV2ZXJzZWQ7MzAxRAorcXVvdGVkYmxyaWdodDsyMDFECitxdW90ZWxlZnQ7MjAxOAorcXVvdGVsZWZ0cmV2ZXJzZWQ7MjAxQgorcXVvdGVyZXZlcnNlZDsyMDFCCitxdW90ZXJpZ2h0OzIwMTkKK3F1b3RlcmlnaHRuOzAxNDkKK3F1b3Rlc2luZ2xiYXNlOzIwMUEKK3F1b3Rlc2luZ2xlOzAwMjcKK3F1b3Rlc2luZ2xlbW9ub3NwYWNlO0ZGMDcKK3I7MDA3MgorcmFhcm1lbmlhbjswNTdDCityYWJlbmdhbGk7MDlCMAorcmFjdXRlOzAxNTUKK3JhZGV2YTswOTMwCityYWRpY2FsOzIyMUEKK3JhZGljYWxleDtGOEU1CityYWRvdmVyc3NxdWFyZTszM0FFCityYWRvdmVyc3NxdWFyZWRzcXVhcmU7MzNBRgorcmFkc3F1YXJlOzMzQUQKK3JhZmU7MDVCRgorcmFmZWhlYnJldzswNUJGCityYWd1amFyYXRpOzBBQjAKK3JhZ3VybXVraGk7MEEzMAorcmFoaXJhZ2FuYTszMDg5CityYWthdGFrYW5hOzMwRTkKK3Jha2F0YWthbmFoYWxmd2lkdGg7RkY5NworcmFsb3dlcmRpYWdvbmFsYmVuZ2FsaTswOUYxCityYW1pZGRsZWRpYWdvbmFsYmVuZ2FsaTswOUYwCityYW1zaG9ybjswMjY0CityYXRpbzsyMjM2CityYm9wb21vZm87MzExNgorcmNhcm9uOzAxNTkKK3JjZWRpbGxhOzAxNTcKK3JjaXJjbGU7MjRFMQorcmNvbW1hYWNjZW50OzAxNTcKK3JkYmxncmF2ZTswMjExCityZG90YWNjZW50OzFFNTkKK3Jkb3RiZWxvdzsxRTVCCityZG90YmVsb3dtYWNyb247MUU1RAorcmVmZXJlbmNlbWFyazsyMDNCCityZWZsZXhzdWJzZXQ7MjI4NgorcmVmbGV4c3VwZXJzZXQ7MjI4NworcmVnaXN0ZXJlZDswMEFFCityZWdpc3RlcnNhbnM7RjhFOAorcmVnaXN0ZXJzZXJpZjtGNkRBCityZWhhcmFiaWM7MDYzMQorcmVoYXJtZW5pYW47MDU4MAorcmVoZmluYWxhcmFiaWM7RkVBRQorcmVoaXJhZ2FuYTszMDhDCityZWh5ZWhhbGVmbGFtYXJhYmljOzA2MzEgRkVGMyBGRThFIDA2NDQKK3Jla2F0YWthbmE7MzBFQworcmVrYXRha2FuYWhhbGZ3aWR0aDtGRjlBCityZXNoOzA1RTgKK3Jlc2hkYWdlc2hoZWJyZXc7RkI0OAorcmVzaGhhdGFmcGF0YWg7MDVFOCAwNUIyCityZXNoaGF0YWZwYXRhaGhlYnJldzswNUU4IDA1QjIKK3Jlc2hoYXRhZnNlZ29sOzA1RTggMDVCMQorcmVzaGhhdGFmc2Vnb2xoZWJyZXc7MDVFOCAwNUIxCityZXNoaGVicmV3OzA1RTgKK3Jlc2hoaXJpcTswNUU4IDA1QjQKK3Jlc2hoaXJpcWhlYnJldzswNUU4IDA1QjQKK3Jlc2hob2xhbTswNUU4IDA1QjkKK3Jlc2hob2xhbWhlYnJldzswNUU4IDA1QjkKK3Jlc2hwYXRhaDswNUU4IDA1QjcKK3Jlc2hwYXRhaGhlYnJldzswNUU4IDA1QjcKK3Jlc2hxYW1hdHM7MDVFOCAwNUI4CityZXNocWFtYXRzaGVicmV3OzA1RTggMDVCOAorcmVzaHF1YnV0czswNUU4IDA1QkIKK3Jlc2hxdWJ1dHNoZWJyZXc7MDVFOCAwNUJCCityZXNoc2Vnb2w7MDVFOCAwNUI2CityZXNoc2Vnb2xoZWJyZXc7MDVFOCAwNUI2CityZXNoc2hldmE7MDVFOCAwNUIwCityZXNoc2hldmFoZWJyZXc7MDVFOCAwNUIwCityZXNodHNlcmU7MDVFOCAwNUI1CityZXNodHNlcmVoZWJyZXc7MDVFOCAwNUI1CityZXZlcnNlZHRpbGRlOzIyM0QKK3JldmlhaGVicmV3OzA1OTcKK3JldmlhbXVncmFzaGhlYnJldzswNTk3CityZXZsb2dpY2Fsbm90OzIzMTAKK3JmaXNoaG9vazswMjdFCityZmlzaGhvb2tyZXZlcnNlZDswMjdGCityaGFiZW5nYWxpOzA5REQKK3JoYWRldmE7MDk1RAorcmhvOzAzQzEKK3Job29rOzAyN0QKK3Job29rdHVybmVkOzAyN0IKK3Job29rdHVybmVkc3VwZXJpb3I7MDJCNQorcmhvc3ltYm9sZ3JlZWs7MDNGMQorcmhvdGljaG9va21vZDswMkRFCityaWV1bGFjaXJjbGVrb3JlYW47MzI3MQorcmlldWxhcGFyZW5rb3JlYW47MzIxMQorcmlldWxjaXJjbGVrb3JlYW47MzI2MworcmlldWxoaWV1aGtvcmVhbjszMTQwCityaWV1bGtpeWVva2tvcmVhbjszMTNBCityaWV1bGtpeWVva3Npb3Nrb3JlYW47MzE2OQorcmlldWxrb3JlYW47MzEzOQorcmlldWxtaWV1bWtvcmVhbjszMTNCCityaWV1bHBhbnNpb3Nrb3JlYW47MzE2QworcmlldWxwYXJlbmtvcmVhbjszMjAzCityaWV1bHBoaWV1cGhrb3JlYW47MzEzRgorcmlldWxwaWV1cGtvcmVhbjszMTNDCityaWV1bHBpZXVwc2lvc2tvcmVhbjszMTZCCityaWV1bHNpb3Nrb3JlYW47MzEzRAorcmlldWx0aGlldXRoa29yZWFuOzMxM0UKK3JpZXVsdGlrZXV0a29yZWFuOzMxNkEKK3JpZXVseWVvcmluaGlldWhrb3JlYW47MzE2RAorcmlnaHRhbmdsZTsyMjFGCityaWdodHRhY2tiZWxvd2NtYjswMzE5CityaWdodHRyaWFuZ2xlOzIyQkYKK3JpaGlyYWdhbmE7MzA4QQorcmlrYXRha2FuYTszMEVBCityaWthdGFrYW5haGFsZndpZHRoO0ZGOTgKK3Jpbmc7MDJEQQorcmluZ2JlbG93Y21iOzAzMjUKK3JpbmdjbWI7MDMwQQorcmluZ2hhbGZsZWZ0OzAyQkYKK3JpbmdoYWxmbGVmdGFybWVuaWFuOzA1NTkKK3JpbmdoYWxmbGVmdGJlbG93Y21iOzAzMUMKK3JpbmdoYWxmbGVmdGNlbnRlcmVkOzAyRDMKK3JpbmdoYWxmcmlnaHQ7MDJCRQorcmluZ2hhbGZyaWdodGJlbG93Y21iOzAzMzkKK3JpbmdoYWxmcmlnaHRjZW50ZXJlZDswMkQyCityaW52ZXJ0ZWRicmV2ZTswMjEzCityaXR0b3J1c3F1YXJlOzMzNTEKK3JsaW5lYmVsb3c7MUU1RgorcmxvbmdsZWc7MDI3QworcmxvbmdsZWd0dXJuZWQ7MDI3QQorcm1vbm9zcGFjZTtGRjUyCityb2hpcmFnYW5hOzMwOEQKK3Jva2F0YWthbmE7MzBFRAorcm9rYXRha2FuYWhhbGZ3aWR0aDtGRjlCCityb3J1YXRoYWk7MEUyMworcnBhcmVuOzI0QUQKK3JyYWJlbmdhbGk7MDlEQworcnJhZGV2YTswOTMxCitycmFndXJtdWtoaTswQTVDCitycmVoYXJhYmljOzA2OTEKK3JyZWhmaW5hbGFyYWJpYztGQjhECitycnZvY2FsaWNiZW5nYWxpOzA5RTAKK3Jydm9jYWxpY2RldmE7MDk2MAorcnJ2b2NhbGljZ3VqYXJhdGk7MEFFMAorcnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaTswOUM0CitycnZvY2FsaWN2b3dlbHNpZ25kZXZhOzA5NDQKK3Jydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpOzBBQzQKK3JzdXBlcmlvcjtGNkYxCitydGJsb2NrOzI1OTAKK3J0dXJuZWQ7MDI3OQorcnR1cm5lZHN1cGVyaW9yOzAyQjQKK3J1aGlyYWdhbmE7MzA4QgorcnVrYXRha2FuYTszMEVCCitydWthdGFrYW5haGFsZndpZHRoO0ZGOTkKK3J1cGVlbWFya2JlbmdhbGk7MDlGMgorcnVwZWVzaWduYmVuZ2FsaTswOUYzCitydXBpYWg7RjZERAorcnV0aGFpOzBFMjQKK3J2b2NhbGljYmVuZ2FsaTswOThCCitydm9jYWxpY2RldmE7MDkwQgorcnZvY2FsaWNndWphcmF0aTswQThCCitydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk7MDlDMworcnZvY2FsaWN2b3dlbHNpZ25kZXZhOzA5NDMKK3J2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk7MEFDMworczswMDczCitzYWJlbmdhbGk7MDlCOAorc2FjdXRlOzAxNUIKK3NhY3V0ZWRvdGFjY2VudDsxRTY1CitzYWRhcmFiaWM7MDYzNQorc2FkZXZhOzA5MzgKK3NhZGZpbmFsYXJhYmljO0ZFQkEKK3NhZGluaXRpYWxhcmFiaWM7RkVCQgorc2FkbWVkaWFsYXJhYmljO0ZFQkMKK3NhZ3VqYXJhdGk7MEFCOAorc2FndXJtdWtoaTswQTM4CitzYWhpcmFnYW5hOzMwNTUKK3Nha2F0YWthbmE7MzBCNQorc2FrYXRha2FuYWhhbGZ3aWR0aDtGRjdCCitzYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljO0ZERkEKK3NhbWVraDswNUUxCitzYW1la2hkYWdlc2g7RkI0MQorc2FtZWtoZGFnZXNoaGVicmV3O0ZCNDEKK3NhbWVraGhlYnJldzswNUUxCitzYXJhYWF0aGFpOzBFMzIKK3NhcmFhZXRoYWk7MEU0MQorc2FyYWFpbWFpbWFsYWl0aGFpOzBFNDQKK3NhcmFhaW1haW11YW50aGFpOzBFNDMKK3NhcmFhbXRoYWk7MEUzMworc2FyYWF0aGFpOzBFMzAKK3NhcmFldGhhaTswRTQwCitzYXJhaWlsZWZ0dGhhaTtGODg2CitzYXJhaWl0aGFpOzBFMzUKK3NhcmFpbGVmdHRoYWk7Rjg4NQorc2FyYWl0aGFpOzBFMzQKK3NhcmFvdGhhaTswRTQyCitzYXJhdWVlbGVmdHRoYWk7Rjg4OAorc2FyYXVlZXRoYWk7MEUzNworc2FyYXVlbGVmdHRoYWk7Rjg4Nworc2FyYXVldGhhaTswRTM2CitzYXJhdXRoYWk7MEUzOAorc2FyYXV1dGhhaTswRTM5CitzYm9wb21vZm87MzExOQorc2Nhcm9uOzAxNjEKK3NjYXJvbmRvdGFjY2VudDsxRTY3CitzY2VkaWxsYTswMTVGCitzY2h3YTswMjU5CitzY2h3YWN5cmlsbGljOzA0RDkKK3NjaHdhZGllcmVzaXNjeXJpbGxpYzswNERCCitzY2h3YWhvb2s7MDI1QQorc2NpcmNsZTsyNEUyCitzY2lyY3VtZmxleDswMTVECitzY29tbWFhY2NlbnQ7MDIxOQorc2RvdGFjY2VudDsxRTYxCitzZG90YmVsb3c7MUU2Mworc2RvdGJlbG93ZG90YWNjZW50OzFFNjkKK3NlYWd1bGxiZWxvd2NtYjswMzNDCitzZWNvbmQ7MjAzMworc2Vjb25kdG9uZWNoaW5lc2U7MDJDQQorc2VjdGlvbjswMEE3CitzZWVuYXJhYmljOzA2MzMKK3NlZW5maW5hbGFyYWJpYztGRUIyCitzZWVuaW5pdGlhbGFyYWJpYztGRUIzCitzZWVubWVkaWFsYXJhYmljO0ZFQjQKK3NlZ29sOzA1QjYKK3NlZ29sMTM7MDVCNgorc2Vnb2wxZjswNUI2CitzZWdvbDJjOzA1QjYKK3NlZ29saGVicmV3OzA1QjYKK3NlZ29sbmFycm93aGVicmV3OzA1QjYKK3NlZ29scXVhcnRlcmhlYnJldzswNUI2CitzZWdvbHRhaGVicmV3OzA1OTIKK3NlZ29sd2lkZWhlYnJldzswNUI2CitzZWhhcm1lbmlhbjswNTdECitzZWhpcmFnYW5hOzMwNUIKK3Nla2F0YWthbmE7MzBCQgorc2VrYXRha2FuYWhhbGZ3aWR0aDtGRjdFCitzZW1pY29sb247MDAzQgorc2VtaWNvbG9uYXJhYmljOzA2MUIKK3NlbWljb2xvbm1vbm9zcGFjZTtGRjFCCitzZW1pY29sb25zbWFsbDtGRTU0CitzZW1pdm9pY2VkbWFya2thbmE7MzA5Qworc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoO0ZGOUYKK3NlbnRpc3F1YXJlOzMzMjIKK3NlbnRvc3F1YXJlOzMzMjMKK3NldmVuOzAwMzcKK3NldmVuYXJhYmljOzA2NjcKK3NldmVuYmVuZ2FsaTswOUVECitzZXZlbmNpcmNsZTsyNDY2CitzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc5MAorc2V2ZW5kZXZhOzA5NkQKK3NldmVuZWlnaHRoczsyMTVFCitzZXZlbmd1amFyYXRpOzBBRUQKK3NldmVuZ3VybXVraGk7MEE2RAorc2V2ZW5oYWNrYXJhYmljOzA2NjcKK3NldmVuaGFuZ3pob3U7MzAyNworc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuOzMyMjYKK3NldmVuaW5mZXJpb3I7MjA4Nworc2V2ZW5tb25vc3BhY2U7RkYxNworc2V2ZW5vbGRzdHlsZTtGNzM3CitzZXZlbnBhcmVuOzI0N0EKK3NldmVucGVyaW9kOzI0OEUKK3NldmVucGVyc2lhbjswNkY3CitzZXZlbnJvbWFuOzIxNzYKK3NldmVuc3VwZXJpb3I7MjA3Nworc2V2ZW50ZWVuY2lyY2xlOzI0NzAKK3NldmVudGVlbnBhcmVuOzI0ODQKK3NldmVudGVlbnBlcmlvZDsyNDk4CitzZXZlbnRoYWk7MEU1Nworc2Z0aHlwaGVuOzAwQUQKK3NoYWFybWVuaWFuOzA1NzcKK3NoYWJlbmdhbGk7MDlCNgorc2hhY3lyaWxsaWM7MDQ0OAorc2hhZGRhYXJhYmljOzA2NTEKK3NoYWRkYWRhbW1hYXJhYmljO0ZDNjEKK3NoYWRkYWRhbW1hdGFuYXJhYmljO0ZDNUUKK3NoYWRkYWZhdGhhYXJhYmljO0ZDNjAKK3NoYWRkYWZhdGhhdGFuYXJhYmljOzA2NTEgMDY0Qgorc2hhZGRha2FzcmFhcmFiaWM7RkM2Mgorc2hhZGRha2FzcmF0YW5hcmFiaWM7RkM1Rgorc2hhZGU7MjU5Mgorc2hhZGVkYXJrOzI1OTMKK3NoYWRlbGlnaHQ7MjU5MQorc2hhZGVtZWRpdW07MjU5Mgorc2hhZGV2YTswOTM2CitzaGFndWphcmF0aTswQUI2CitzaGFndXJtdWtoaTswQTM2CitzaGFsc2hlbGV0aGVicmV3OzA1OTMKK3NoYm9wb21vZm87MzExNQorc2hjaGFjeXJpbGxpYzswNDQ5CitzaGVlbmFyYWJpYzswNjM0CitzaGVlbmZpbmFsYXJhYmljO0ZFQjYKK3NoZWVuaW5pdGlhbGFyYWJpYztGRUI3CitzaGVlbm1lZGlhbGFyYWJpYztGRUI4CitzaGVpY29wdGljOzAzRTMKK3NoZXFlbDsyMEFBCitzaGVxZWxoZWJyZXc7MjBBQQorc2hldmE7MDVCMAorc2hldmExMTU7MDVCMAorc2hldmExNTswNUIwCitzaGV2YTIyOzA1QjAKK3NoZXZhMmU7MDVCMAorc2hldmFoZWJyZXc7MDVCMAorc2hldmFuYXJyb3doZWJyZXc7MDVCMAorc2hldmFxdWFydGVyaGVicmV3OzA1QjAKK3NoZXZhd2lkZWhlYnJldzswNUIwCitzaGhhY3lyaWxsaWM7MDRCQgorc2hpbWFjb3B0aWM7MDNFRAorc2hpbjswNUU5CitzaGluZGFnZXNoO0ZCNDkKK3NoaW5kYWdlc2hoZWJyZXc7RkI0OQorc2hpbmRhZ2VzaHNoaW5kb3Q7RkIyQworc2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXc7RkIyQworc2hpbmRhZ2VzaHNpbmRvdDtGQjJECitzaGluZGFnZXNoc2luZG90aGVicmV3O0ZCMkQKK3NoaW5kb3RoZWJyZXc7MDVDMQorc2hpbmhlYnJldzswNUU5CitzaGluc2hpbmRvdDtGQjJBCitzaGluc2hpbmRvdGhlYnJldztGQjJBCitzaGluc2luZG90O0ZCMkIKK3NoaW5zaW5kb3RoZWJyZXc7RkIyQgorc2hvb2s7MDI4Mgorc2lnbWE7MDNDMworc2lnbWExOzAzQzIKK3NpZ21hZmluYWw7MDNDMgorc2lnbWFsdW5hdGVzeW1ib2xncmVlazswM0YyCitzaWhpcmFnYW5hOzMwNTcKK3Npa2F0YWthbmE7MzBCNworc2lrYXRha2FuYWhhbGZ3aWR0aDtGRjdDCitzaWx1cWhlYnJldzswNUJECitzaWx1cWxlZnRoZWJyZXc7MDVCRAorc2ltaWxhcjsyMjNDCitzaW5kb3RoZWJyZXc7MDVDMgorc2lvc2FjaXJjbGVrb3JlYW47MzI3NAorc2lvc2FwYXJlbmtvcmVhbjszMjE0CitzaW9zY2lldWNrb3JlYW47MzE3RQorc2lvc2NpcmNsZWtvcmVhbjszMjY2CitzaW9za2l5ZW9ra29yZWFuOzMxN0EKK3Npb3Nrb3JlYW47MzE0NQorc2lvc25pZXVua29yZWFuOzMxN0IKK3Npb3NwYXJlbmtvcmVhbjszMjA2CitzaW9zcGlldXBrb3JlYW47MzE3RAorc2lvc3Rpa2V1dGtvcmVhbjszMTdDCitzaXg7MDAzNgorc2l4YXJhYmljOzA2NjYKK3NpeGJlbmdhbGk7MDlFQworc2l4Y2lyY2xlOzI0NjUKK3NpeGNpcmNsZWludmVyc2VzYW5zc2VyaWY7Mjc4Rgorc2l4ZGV2YTswOTZDCitzaXhndWphcmF0aTswQUVDCitzaXhndXJtdWtoaTswQTZDCitzaXhoYWNrYXJhYmljOzA2NjYKK3NpeGhhbmd6aG91OzMwMjYKK3NpeGlkZW9ncmFwaGljcGFyZW47MzIyNQorc2l4aW5mZXJpb3I7MjA4Ngorc2l4bW9ub3NwYWNlO0ZGMTYKK3NpeG9sZHN0eWxlO0Y3MzYKK3NpeHBhcmVuOzI0NzkKK3NpeHBlcmlvZDsyNDhECitzaXhwZXJzaWFuOzA2RjYKK3NpeHJvbWFuOzIxNzUKK3NpeHN1cGVyaW9yOzIwNzYKK3NpeHRlZW5jaXJjbGU7MjQ2Rgorc2l4dGVlbmN1cnJlbmN5ZGVub21pbmF0b3JiZW5nYWxpOzA5RjkKK3NpeHRlZW5wYXJlbjsyNDgzCitzaXh0ZWVucGVyaW9kOzI0OTcKK3NpeHRoYWk7MEU1Ngorc2xhc2g7MDAyRgorc2xhc2htb25vc3BhY2U7RkYwRgorc2xvbmc7MDE3Rgorc2xvbmdkb3RhY2NlbnQ7MUU5Qgorc21pbGVmYWNlOzI2M0EKK3Ntb25vc3BhY2U7RkY1Mworc29mcGFzdXFoZWJyZXc7MDVDMworc29mdGh5cGhlbjswMEFECitzb2Z0c2lnbmN5cmlsbGljOzA0NEMKK3NvaGlyYWdhbmE7MzA1RAorc29rYXRha2FuYTszMEJECitzb2thdGFrYW5haGFsZndpZHRoO0ZGN0YKK3NvbGlkdXNsb25nb3ZlcmxheWNtYjswMzM4Citzb2xpZHVzc2hvcnRvdmVybGF5Y21iOzAzMzcKK3NvcnVzaXRoYWk7MEUyOQorc29zYWxhdGhhaTswRTI4Citzb3NvdGhhaTswRTBCCitzb3N1YXRoYWk7MEUyQQorc3BhY2U7MDAyMAorc3BhY2VoYWNrYXJhYmljOzAwMjAKK3NwYWRlOzI2NjAKK3NwYWRlc3VpdGJsYWNrOzI2NjAKK3NwYWRlc3VpdHdoaXRlOzI2NjQKK3NwYXJlbjsyNEFFCitzcXVhcmViZWxvd2NtYjswMzNCCitzcXVhcmVjYzszM0M0CitzcXVhcmVjbTszMzlECitzcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsOzI1QTkKK3NxdWFyZWhvcml6b250YWxmaWxsOzI1QTQKK3NxdWFyZWtnOzMzOEYKK3NxdWFyZWttOzMzOUUKK3NxdWFyZWttY2FwaXRhbDszM0NFCitzcXVhcmVsbjszM0QxCitzcXVhcmVsb2c7MzNEMgorc3F1YXJlbWc7MzM4RQorc3F1YXJlbWlsOzMzRDUKK3NxdWFyZW1tOzMzOUMKK3NxdWFyZW1zcXVhcmVkOzMzQTEKK3NxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbDsyNUE2CitzcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsOzI1QTcKK3NxdWFyZXVwcGVycmlnaHR0b2xvd2VybGVmdGZpbGw7MjVBOAorc3F1YXJldmVydGljYWxmaWxsOzI1QTUKK3NxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2s7MjVBMworc3JzcXVhcmU7MzNEQgorc3NhYmVuZ2FsaTswOUI3Citzc2FkZXZhOzA5MzcKK3NzYWd1amFyYXRpOzBBQjcKK3NzYW5nY2lldWNrb3JlYW47MzE0OQorc3NhbmdoaWV1aGtvcmVhbjszMTg1Citzc2FuZ2lldW5na29yZWFuOzMxODAKK3NzYW5na2l5ZW9ra29yZWFuOzMxMzIKK3NzYW5nbmlldW5rb3JlYW47MzE2NQorc3NhbmdwaWV1cGtvcmVhbjszMTQzCitzc2FuZ3Npb3Nrb3JlYW47MzE0Ngorc3Nhbmd0aWtldXRrb3JlYW47MzEzOAorc3N1cGVyaW9yO0Y2RjIKK3N0ZXJsaW5nOzAwQTMKK3N0ZXJsaW5nbW9ub3NwYWNlO0ZGRTEKK3N0cm9rZWxvbmdvdmVybGF5Y21iOzAzMzYKK3N0cm9rZXNob3J0b3ZlcmxheWNtYjswMzM1CitzdWJzZXQ7MjI4Mgorc3Vic2V0bm90ZXF1YWw7MjI4QQorc3Vic2V0b3JlcXVhbDsyMjg2CitzdWNjZWVkczsyMjdCCitzdWNodGhhdDsyMjBCCitzdWhpcmFnYW5hOzMwNTkKK3N1a2F0YWthbmE7MzBCOQorc3VrYXRha2FuYWhhbGZ3aWR0aDtGRjdECitzdWt1bmFyYWJpYzswNjUyCitzdW1tYXRpb247MjIxMQorc3VuOzI2M0MKK3N1cGVyc2V0OzIyODMKK3N1cGVyc2V0bm90ZXF1YWw7MjI4Qgorc3VwZXJzZXRvcmVxdWFsOzIyODcKK3N2c3F1YXJlOzMzREMKK3N5b3V3YWVyYXNxdWFyZTszMzdDCit0OzAwNzQKK3RhYmVuZ2FsaTswOUE0Cit0YWNrZG93bjsyMkE0Cit0YWNrbGVmdDsyMkEzCit0YWRldmE7MDkyNAordGFndWphcmF0aTswQUE0Cit0YWd1cm11a2hpOzBBMjQKK3RhaGFyYWJpYzswNjM3Cit0YWhmaW5hbGFyYWJpYztGRUMyCit0YWhpbml0aWFsYXJhYmljO0ZFQzMKK3RhaGlyYWdhbmE7MzA1RgordGFobWVkaWFsYXJhYmljO0ZFQzQKK3RhaXN5b3VlcmFzcXVhcmU7MzM3RAordGFrYXRha2FuYTszMEJGCit0YWthdGFrYW5haGFsZndpZHRoO0ZGODAKK3RhdHdlZWxhcmFiaWM7MDY0MAordGF1OzAzQzQKK3RhdjswNUVBCit0YXZkYWdlcztGQjRBCit0YXZkYWdlc2g7RkI0QQordGF2ZGFnZXNoaGVicmV3O0ZCNEEKK3RhdmhlYnJldzswNUVBCit0YmFyOzAxNjcKK3Rib3BvbW9mbzszMTBBCit0Y2Fyb247MDE2NQordGNjdXJsOzAyQTgKK3RjZWRpbGxhOzAxNjMKK3RjaGVoYXJhYmljOzA2ODYKK3RjaGVoZmluYWxhcmFiaWM7RkI3QgordGNoZWhpbml0aWFsYXJhYmljO0ZCN0MKK3RjaGVobWVkaWFsYXJhYmljO0ZCN0QKK3RjaGVobWVlbWluaXRpYWxhcmFiaWM7RkI3QyBGRUU0Cit0Y2lyY2xlOzI0RTMKK3RjaXJjdW1mbGV4YmVsb3c7MUU3MQordGNvbW1hYWNjZW50OzAxNjMKK3RkaWVyZXNpczsxRTk3Cit0ZG90YWNjZW50OzFFNkIKK3Rkb3RiZWxvdzsxRTZECit0ZWN5cmlsbGljOzA0NDIKK3RlZGVzY2VuZGVyY3lyaWxsaWM7MDRBRAordGVoYXJhYmljOzA2MkEKK3RlaGZpbmFsYXJhYmljO0ZFOTYKK3RlaGhhaGluaXRpYWxhcmFiaWM7RkNBMgordGVoaGFoaXNvbGF0ZWRhcmFiaWM7RkMwQwordGVoaW5pdGlhbGFyYWJpYztGRTk3Cit0ZWhpcmFnYW5hOzMwNjYKK3RlaGplZW1pbml0aWFsYXJhYmljO0ZDQTEKK3RlaGplZW1pc29sYXRlZGFyYWJpYztGQzBCCit0ZWhtYXJidXRhYXJhYmljOzA2MjkKK3RlaG1hcmJ1dGFmaW5hbGFyYWJpYztGRTk0Cit0ZWhtZWRpYWxhcmFiaWM7RkU5OAordGVobWVlbWluaXRpYWxhcmFiaWM7RkNBNAordGVobWVlbWlzb2xhdGVkYXJhYmljO0ZDMEUKK3RlaG5vb25maW5hbGFyYWJpYztGQzczCit0ZWthdGFrYW5hOzMwQzYKK3Rla2F0YWthbmFoYWxmd2lkdGg7RkY4MwordGVsZXBob25lOzIxMjEKK3RlbGVwaG9uZWJsYWNrOzI2MEUKK3RlbGlzaGFnZWRvbGFoZWJyZXc7MDVBMAordGVsaXNoYXFldGFuYWhlYnJldzswNUE5Cit0ZW5jaXJjbGU7MjQ2OQordGVuaWRlb2dyYXBoaWNwYXJlbjszMjI5Cit0ZW5wYXJlbjsyNDdECit0ZW5wZXJpb2Q7MjQ5MQordGVucm9tYW47MjE3OQordGVzaDswMkE3Cit0ZXQ7MDVEOAordGV0ZGFnZXNoO0ZCMzgKK3RldGRhZ2VzaGhlYnJldztGQjM4Cit0ZXRoZWJyZXc7MDVEOAordGV0c2VjeXJpbGxpYzswNEI1Cit0ZXZpcmhlYnJldzswNTlCCit0ZXZpcmxlZnRoZWJyZXc7MDU5QgordGhhYmVuZ2FsaTswOUE1Cit0aGFkZXZhOzA5MjUKK3RoYWd1amFyYXRpOzBBQTUKK3RoYWd1cm11a2hpOzBBMjUKK3RoYWxhcmFiaWM7MDYzMAordGhhbGZpbmFsYXJhYmljO0ZFQUMKK3RoYW50aGFraGF0bG93bGVmdHRoYWk7Rjg5OAordGhhbnRoYWtoYXRsb3dyaWdodHRoYWk7Rjg5NwordGhhbnRoYWtoYXR0aGFpOzBFNEMKK3RoYW50aGFraGF0dXBwZXJsZWZ0dGhhaTtGODk2Cit0aGVoYXJhYmljOzA2MkIKK3RoZWhmaW5hbGFyYWJpYztGRTlBCit0aGVoaW5pdGlhbGFyYWJpYztGRTlCCit0aGVobWVkaWFsYXJhYmljO0ZFOUMKK3RoZXJlZXhpc3RzOzIyMDMKK3RoZXJlZm9yZTsyMjM0Cit0aGV0YTswM0I4Cit0aGV0YTE7MDNEMQordGhldGFzeW1ib2xncmVlazswM0QxCit0aGlldXRoYWNpcmNsZWtvcmVhbjszMjc5Cit0aGlldXRoYXBhcmVua29yZWFuOzMyMTkKK3RoaWV1dGhjaXJjbGVrb3JlYW47MzI2QgordGhpZXV0aGtvcmVhbjszMTRDCit0aGlldXRocGFyZW5rb3JlYW47MzIwQgordGhpcnRlZW5jaXJjbGU7MjQ2QwordGhpcnRlZW5wYXJlbjsyNDgwCit0aGlydGVlbnBlcmlvZDsyNDk0Cit0aG9uYW5nbW9udGhvdGhhaTswRTExCit0aG9vazswMUFECit0aG9waHV0aGFvdGhhaTswRTEyCit0aG9ybjswMEZFCit0aG90aGFoYW50aGFpOzBFMTcKK3Rob3RoYW50aGFpOzBFMTAKK3Rob3Rob25ndGhhaTswRTE4Cit0aG90aHVuZ3RoYWk7MEUxNgordGhvdXNhbmRjeXJpbGxpYzswNDgyCit0aG91c2FuZHNzZXBhcmF0b3JhcmFiaWM7MDY2QwordGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbjswNjZDCit0aHJlZTswMDMzCit0aHJlZWFyYWJpYzswNjYzCit0aHJlZWJlbmdhbGk7MDlFOQordGhyZWVjaXJjbGU7MjQ2MgordGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmOzI3OEMKK3RocmVlZGV2YTswOTY5Cit0aHJlZWVpZ2h0aHM7MjE1QwordGhyZWVndWphcmF0aTswQUU5Cit0aHJlZWd1cm11a2hpOzBBNjkKK3RocmVlaGFja2FyYWJpYzswNjYzCit0aHJlZWhhbmd6aG91OzMwMjMKK3RocmVlaWRlb2dyYXBoaWNwYXJlbjszMjIyCit0aHJlZWluZmVyaW9yOzIwODMKK3RocmVlbW9ub3NwYWNlO0ZGMTMKK3RocmVlbnVtZXJhdG9yYmVuZ2FsaTswOUY2Cit0aHJlZW9sZHN0eWxlO0Y3MzMKK3RocmVlcGFyZW47MjQ3NgordGhyZWVwZXJpb2Q7MjQ4QQordGhyZWVwZXJzaWFuOzA2RjMKK3RocmVlcXVhcnRlcnM7MDBCRQordGhyZWVxdWFydGVyc2VtZGFzaDtGNkRFCit0aHJlZXJvbWFuOzIxNzIKK3RocmVlc3VwZXJpb3I7MDBCMwordGhyZWV0aGFpOzBFNTMKK3RoenNxdWFyZTszMzk0Cit0aWhpcmFnYW5hOzMwNjEKK3Rpa2F0YWthbmE7MzBDMQordGlrYXRha2FuYWhhbGZ3aWR0aDtGRjgxCit0aWtldXRhY2lyY2xla29yZWFuOzMyNzAKK3Rpa2V1dGFwYXJlbmtvcmVhbjszMjEwCit0aWtldXRjaXJjbGVrb3JlYW47MzI2MgordGlrZXV0a29yZWFuOzMxMzcKK3Rpa2V1dHBhcmVua29yZWFuOzMyMDIKK3RpbGRlOzAyREMKK3RpbGRlYmVsb3djbWI7MDMzMAordGlsZGVjbWI7MDMwMwordGlsZGVjb21iOzAzMDMKK3RpbGRlZG91YmxlY21iOzAzNjAKK3RpbGRlb3BlcmF0b3I7MjIzQwordGlsZGVvdmVybGF5Y21iOzAzMzQKK3RpbGRldmVydGljYWxjbWI7MDMzRQordGltZXNjaXJjbGU7MjI5NwordGlwZWhhaGVicmV3OzA1OTYKK3RpcGVoYWxlZnRoZWJyZXc7MDU5NgordGlwcGlndXJtdWtoaTswQTcwCit0aXRsb2N5cmlsbGljY21iOzA0ODMKK3Rpd25hcm1lbmlhbjswNTdGCit0bGluZWJlbG93OzFFNkYKK3Rtb25vc3BhY2U7RkY1NAordG9hcm1lbmlhbjswNTY5Cit0b2hpcmFnYW5hOzMwNjgKK3Rva2F0YWthbmE7MzBDOAordG9rYXRha2FuYWhhbGZ3aWR0aDtGRjg0Cit0b25lYmFyZXh0cmFoaWdobW9kOzAyRTUKK3RvbmViYXJleHRyYWxvd21vZDswMkU5Cit0b25lYmFyaGlnaG1vZDswMkU2Cit0b25lYmFybG93bW9kOzAyRTgKK3RvbmViYXJtaWRtb2Q7MDJFNwordG9uZWZpdmU7MDFCRAordG9uZXNpeDswMTg1Cit0b25ldHdvOzAxQTgKK3Rvbm9zOzAzODQKK3RvbnNxdWFyZTszMzI3Cit0b3BhdGFrdGhhaTswRTBGCit0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQ7MzAxNAordG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGw7RkU1RAordG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWw7RkUzOQordG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodDszMDE1Cit0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGw7RkU1RQordG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsO0ZFM0EKK3RvdGFvdGhhaTswRTE1Cit0cGFsYXRhbGhvb2s7MDFBQgordHBhcmVuOzI0QUYKK3RyYWRlbWFyazsyMTIyCit0cmFkZW1hcmtzYW5zO0Y4RUEKK3RyYWRlbWFya3NlcmlmO0Y2REIKK3RyZXRyb2ZsZXhob29rOzAyODgKK3RyaWFnZG47MjVCQwordHJpYWdsZjsyNUM0Cit0cmlhZ3J0OzI1QkEKK3RyaWFndXA7MjVCMgordHM7MDJBNgordHNhZGk7MDVFNgordHNhZGlkYWdlc2g7RkI0NgordHNhZGlkYWdlc2hoZWJyZXc7RkI0NgordHNhZGloZWJyZXc7MDVFNgordHNlY3lyaWxsaWM7MDQ0NgordHNlcmU7MDVCNQordHNlcmUxMjswNUI1Cit0c2VyZTFlOzA1QjUKK3RzZXJlMmI7MDVCNQordHNlcmVoZWJyZXc7MDVCNQordHNlcmVuYXJyb3doZWJyZXc7MDVCNQordHNlcmVxdWFydGVyaGVicmV3OzA1QjUKK3RzZXJld2lkZWhlYnJldzswNUI1Cit0c2hlY3lyaWxsaWM7MDQ1QgordHN1cGVyaW9yO0Y2RjMKK3R0YWJlbmdhbGk7MDk5RgordHRhZGV2YTswOTFGCit0dGFndWphcmF0aTswQTlGCit0dGFndXJtdWtoaTswQTFGCit0dGVoYXJhYmljOzA2NzkKK3R0ZWhmaW5hbGFyYWJpYztGQjY3Cit0dGVoaW5pdGlhbGFyYWJpYztGQjY4Cit0dGVobWVkaWFsYXJhYmljO0ZCNjkKK3R0aGFiZW5nYWxpOzA5QTAKK3R0aGFkZXZhOzA5MjAKK3R0aGFndWphcmF0aTswQUEwCit0dGhhZ3VybXVraGk7MEEyMAordHR1cm5lZDswMjg3Cit0dWhpcmFnYW5hOzMwNjQKK3R1a2F0YWthbmE7MzBDNAordHVrYXRha2FuYWhhbGZ3aWR0aDtGRjgyCit0dXNtYWxsaGlyYWdhbmE7MzA2MwordHVzbWFsbGthdGFrYW5hOzMwQzMKK3R1c21hbGxrYXRha2FuYWhhbGZ3aWR0aDtGRjZGCit0d2VsdmVjaXJjbGU7MjQ2QgordHdlbHZlcGFyZW47MjQ3RgordHdlbHZlcGVyaW9kOzI0OTMKK3R3ZWx2ZXJvbWFuOzIxN0IKK3R3ZW50eWNpcmNsZTsyNDczCit0d2VudHloYW5nemhvdTs1MzQ0Cit0d2VudHlwYXJlbjsyNDg3Cit0d2VudHlwZXJpb2Q7MjQ5QgordHdvOzAwMzIKK3R3b2FyYWJpYzswNjYyCit0d29iZW5nYWxpOzA5RTgKK3R3b2NpcmNsZTsyNDYxCit0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmOzI3OEIKK3R3b2RldmE7MDk2OAordHdvZG90ZW5sZWFkZXI7MjAyNQordHdvZG90bGVhZGVyOzIwMjUKK3R3b2RvdGxlYWRlcnZlcnRpY2FsO0ZFMzAKK3R3b2d1amFyYXRpOzBBRTgKK3R3b2d1cm11a2hpOzBBNjgKK3R3b2hhY2thcmFiaWM7MDY2MgordHdvaGFuZ3pob3U7MzAyMgordHdvaWRlb2dyYXBoaWNwYXJlbjszMjIxCit0d29pbmZlcmlvcjsyMDgyCit0d29tb25vc3BhY2U7RkYxMgordHdvbnVtZXJhdG9yYmVuZ2FsaTswOUY1Cit0d29vbGRzdHlsZTtGNzMyCit0d29wYXJlbjsyNDc1Cit0d29wZXJpb2Q7MjQ4OQordHdvcGVyc2lhbjswNkYyCit0d29yb21hbjsyMTcxCit0d29zdHJva2U7MDFCQgordHdvc3VwZXJpb3I7MDBCMgordHdvdGhhaTswRTUyCit0d290aGlyZHM7MjE1NAordTswMDc1Cit1YWN1dGU7MDBGQQordWJhcjswMjg5Cit1YmVuZ2FsaTswOTg5Cit1Ym9wb21vZm87MzEyOAordWJyZXZlOzAxNkQKK3VjYXJvbjswMUQ0Cit1Y2lyY2xlOzI0RTQKK3VjaXJjdW1mbGV4OzAwRkIKK3VjaXJjdW1mbGV4YmVsb3c7MUU3NwordWN5cmlsbGljOzA0NDMKK3VkYXR0YWRldmE7MDk1MQordWRibGFjdXRlOzAxNzEKK3VkYmxncmF2ZTswMjE1Cit1ZGV2YTswOTA5Cit1ZGllcmVzaXM7MDBGQwordWRpZXJlc2lzYWN1dGU7MDFEOAordWRpZXJlc2lzYmVsb3c7MUU3MwordWRpZXJlc2lzY2Fyb247MDFEQQordWRpZXJlc2lzY3lyaWxsaWM7MDRGMQordWRpZXJlc2lzZ3JhdmU7MDFEQwordWRpZXJlc2lzbWFjcm9uOzAxRDYKK3Vkb3RiZWxvdzsxRUU1Cit1Z3JhdmU7MDBGOQordWd1amFyYXRpOzBBODkKK3VndXJtdWtoaTswQTA5Cit1aGlyYWdhbmE7MzA0NgordWhvb2thYm92ZTsxRUU3Cit1aG9ybjswMUIwCit1aG9ybmFjdXRlOzFFRTkKK3Vob3JuZG90YmVsb3c7MUVGMQordWhvcm5ncmF2ZTsxRUVCCit1aG9ybmhvb2thYm92ZTsxRUVECit1aG9ybnRpbGRlOzFFRUYKK3VodW5nYXJ1bWxhdXQ7MDE3MQordWh1bmdhcnVtbGF1dGN5cmlsbGljOzA0RjMKK3VpbnZlcnRlZGJyZXZlOzAyMTcKK3VrYXRha2FuYTszMEE2Cit1a2F0YWthbmFoYWxmd2lkdGg7RkY3MwordWtjeXJpbGxpYzswNDc5Cit1a29yZWFuOzMxNUMKK3VtYWNyb247MDE2QgordW1hY3JvbmN5cmlsbGljOzA0RUYKK3VtYWNyb25kaWVyZXNpczsxRTdCCit1bWF0cmFndXJtdWtoaTswQTQxCit1bW9ub3NwYWNlO0ZGNTUKK3VuZGVyc2NvcmU7MDA1RgordW5kZXJzY29yZWRibDsyMDE3Cit1bmRlcnNjb3JlbW9ub3NwYWNlO0ZGM0YKK3VuZGVyc2NvcmV2ZXJ0aWNhbDtGRTMzCit1bmRlcnNjb3Jld2F2eTtGRTRGCit1bmlvbjsyMjJBCit1bml2ZXJzYWw7MjIwMAordW9nb25lazswMTczCit1cGFyZW47MjRCMAordXBibG9jazsyNTgwCit1cHBlcmRvdGhlYnJldzswNUM0Cit1cHNpbG9uOzAzQzUKK3Vwc2lsb25kaWVyZXNpczswM0NCCit1cHNpbG9uZGllcmVzaXN0b25vczswM0IwCit1cHNpbG9ubGF0aW47MDI4QQordXBzaWxvbnRvbm9zOzAzQ0QKK3VwdGFja2JlbG93Y21iOzAzMUQKK3VwdGFja21vZDswMkQ0Cit1cmFndXJtdWtoaTswQTczCit1cmluZzswMTZGCit1c2hvcnRjeXJpbGxpYzswNDVFCit1c21hbGxoaXJhZ2FuYTszMDQ1Cit1c21hbGxrYXRha2FuYTszMEE1Cit1c21hbGxrYXRha2FuYWhhbGZ3aWR0aDtGRjY5Cit1c3RyYWlnaHRjeXJpbGxpYzswNEFGCit1c3RyYWlnaHRzdHJva2VjeXJpbGxpYzswNEIxCit1dGlsZGU7MDE2OQordXRpbGRlYWN1dGU7MUU3OQordXRpbGRlYmVsb3c7MUU3NQordXViZW5nYWxpOzA5OEEKK3V1ZGV2YTswOTBBCit1dWd1amFyYXRpOzBBOEEKK3V1Z3VybXVraGk7MEEwQQordXVtYXRyYWd1cm11a2hpOzBBNDIKK3V1dm93ZWxzaWduYmVuZ2FsaTswOUMyCit1dXZvd2Vsc2lnbmRldmE7MDk0MgordXV2b3dlbHNpZ25ndWphcmF0aTswQUMyCit1dm93ZWxzaWduYmVuZ2FsaTswOUMxCit1dm93ZWxzaWduZGV2YTswOTQxCit1dm93ZWxzaWduZ3VqYXJhdGk7MEFDMQordjswMDc2Cit2YWRldmE7MDkzNQordmFndWphcmF0aTswQUI1Cit2YWd1cm11a2hpOzBBMzUKK3Zha2F0YWthbmE7MzBGNwordmF2OzA1RDUKK3ZhdmRhZ2VzaDtGQjM1Cit2YXZkYWdlc2g2NTtGQjM1Cit2YXZkYWdlc2hoZWJyZXc7RkIzNQordmF2aGVicmV3OzA1RDUKK3ZhdmhvbGFtO0ZCNEIKK3ZhdmhvbGFtaGVicmV3O0ZCNEIKK3ZhdnZhdmhlYnJldzswNUYwCit2YXZ5b2RoZWJyZXc7MDVGMQordmNpcmNsZTsyNEU1Cit2ZG90YmVsb3c7MUU3RgordmVjeXJpbGxpYzswNDMyCit2ZWhhcmFiaWM7MDZBNAordmVoZmluYWxhcmFiaWM7RkI2QgordmVoaW5pdGlhbGFyYWJpYztGQjZDCit2ZWhtZWRpYWxhcmFiaWM7RkI2RAordmVrYXRha2FuYTszMEY5Cit2ZW51czsyNjQwCit2ZXJ0aWNhbGJhcjswMDdDCit2ZXJ0aWNhbGxpbmVhYm92ZWNtYjswMzBECit2ZXJ0aWNhbGxpbmViZWxvd2NtYjswMzI5Cit2ZXJ0aWNhbGxpbmVsb3dtb2Q7MDJDQwordmVydGljYWxsaW5lbW9kOzAyQzgKK3Zld2FybWVuaWFuOzA1N0UKK3Zob29rOzAyOEIKK3Zpa2F0YWthbmE7MzBGOAordmlyYW1hYmVuZ2FsaTswOUNECit2aXJhbWFkZXZhOzA5NEQKK3ZpcmFtYWd1amFyYXRpOzBBQ0QKK3Zpc2FyZ2FiZW5nYWxpOzA5ODMKK3Zpc2FyZ2FkZXZhOzA5MDMKK3Zpc2FyZ2FndWphcmF0aTswQTgzCit2bW9ub3NwYWNlO0ZGNTYKK3ZvYXJtZW5pYW47MDU3OAordm9pY2VkaXRlcmF0aW9uaGlyYWdhbmE7MzA5RQordm9pY2VkaXRlcmF0aW9ua2F0YWthbmE7MzBGRQordm9pY2VkbWFya2thbmE7MzA5Qgordm9pY2VkbWFya2thbmFoYWxmd2lkdGg7RkY5RQordm9rYXRha2FuYTszMEZBCit2cGFyZW47MjRCMQordnRpbGRlOzFFN0QKK3Z0dXJuZWQ7MDI4QwordnVoaXJhZ2FuYTszMDk0Cit2dWthdGFrYW5hOzMwRjQKK3c7MDA3Nword2FjdXRlOzFFODMKK3dhZWtvcmVhbjszMTU5Cit3YWhpcmFnYW5hOzMwOEYKK3dha2F0YWthbmE7MzBFRgord2FrYXRha2FuYWhhbGZ3aWR0aDtGRjlDCit3YWtvcmVhbjszMTU4Cit3YXNtYWxsaGlyYWdhbmE7MzA4RQord2FzbWFsbGthdGFrYW5hOzMwRUUKK3dhdHRvc3F1YXJlOzMzNTcKK3dhdmVkYXNoOzMwMUMKK3dhdnl1bmRlcnNjb3JldmVydGljYWw7RkUzNAord2F3YXJhYmljOzA2NDgKK3dhd2ZpbmFsYXJhYmljO0ZFRUUKK3dhd2hhbXphYWJvdmVhcmFiaWM7MDYyNAord2F3aGFtemFhYm92ZWZpbmFsYXJhYmljO0ZFODYKK3dic3F1YXJlOzMzREQKK3djaXJjbGU7MjRFNgord2NpcmN1bWZsZXg7MDE3NQord2RpZXJlc2lzOzFFODUKK3dkb3RhY2NlbnQ7MUU4Nword2RvdGJlbG93OzFFODkKK3dlaGlyYWdhbmE7MzA5MQord2VpZXJzdHJhc3M7MjExOAord2VrYXRha2FuYTszMEYxCit3ZWtvcmVhbjszMTVFCit3ZW9rb3JlYW47MzE1RAord2dyYXZlOzFFODEKK3doaXRlYnVsbGV0OzI1RTYKK3doaXRlY2lyY2xlOzI1Q0IKK3doaXRlY2lyY2xlaW52ZXJzZTsyNUQ5Cit3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0OzMwMEUKK3doaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbDtGRTQzCit3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodDszMDBGCit3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsO0ZFNDQKK3doaXRlZGlhbW9uZDsyNUM3Cit3aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQ7MjVDOAord2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlOzI1QkYKK3doaXRlZG93bnBvaW50aW5ndHJpYW5nbGU7MjVCRAord2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlOzI1QzMKK3doaXRlbGVmdHBvaW50aW5ndHJpYW5nbGU7MjVDMQord2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQ7MzAxNgord2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0OzMwMTcKK3doaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGU7MjVCOQord2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGU7MjVCNword2hpdGVzbWFsbHNxdWFyZTsyNUFCCit3aGl0ZXNtaWxpbmdmYWNlOzI2M0EKK3doaXRlc3F1YXJlOzI1QTEKK3doaXRlc3RhcjsyNjA2Cit3aGl0ZXRlbGVwaG9uZTsyNjBGCit3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdDszMDE4Cit3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ7MzAxOQord2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZTsyNUI1Cit3aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZTsyNUIzCit3aWhpcmFnYW5hOzMwOTAKK3dpa2F0YWthbmE7MzBGMAord2lrb3JlYW47MzE1Rgord21vbm9zcGFjZTtGRjU3Cit3b2hpcmFnYW5hOzMwOTIKK3dva2F0YWthbmE7MzBGMgord29rYXRha2FuYWhhbGZ3aWR0aDtGRjY2Cit3b247MjBBOQord29ubW9ub3NwYWNlO0ZGRTYKK3dvd2FlbnRoYWk7MEUyNword3BhcmVuOzI0QjIKK3dyaW5nOzFFOTgKK3dzdXBlcmlvcjswMkI3Cit3dHVybmVkOzAyOEQKK3d5bm47MDFCRgoreDswMDc4Cit4YWJvdmVjbWI7MDMzRAoreGJvcG9tb2ZvOzMxMTIKK3hjaXJjbGU7MjRFNworeGRpZXJlc2lzOzFFOEQKK3hkb3RhY2NlbnQ7MUU4QgoreGVoYXJtZW5pYW47MDU2RAoreGk7MDNCRQoreG1vbm9zcGFjZTtGRjU4Cit4cGFyZW47MjRCMworeHN1cGVyaW9yOzAyRTMKK3k7MDA3OQoreWFhZG9zcXVhcmU7MzM0RQoreWFiZW5nYWxpOzA5QUYKK3lhY3V0ZTswMEZECit5YWRldmE7MDkyRgoreWFla29yZWFuOzMxNTIKK3lhZ3VqYXJhdGk7MEFBRgoreWFndXJtdWtoaTswQTJGCit5YWhpcmFnYW5hOzMwODQKK3lha2F0YWthbmE7MzBFNAoreWFrYXRha2FuYWhhbGZ3aWR0aDtGRjk0Cit5YWtvcmVhbjszMTUxCit5YW1ha2thbnRoYWk7MEU0RQoreWFzbWFsbGhpcmFnYW5hOzMwODMKK3lhc21hbGxrYXRha2FuYTszMEUzCit5YXNtYWxsa2F0YWthbmFoYWxmd2lkdGg7RkY2QworeWF0Y3lyaWxsaWM7MDQ2MworeWNpcmNsZTsyNEU4Cit5Y2lyY3VtZmxleDswMTc3Cit5ZGllcmVzaXM7MDBGRgoreWRvdGFjY2VudDsxRThGCit5ZG90YmVsb3c7MUVGNQoreWVoYXJhYmljOzA2NEEKK3llaGJhcnJlZWFyYWJpYzswNkQyCit5ZWhiYXJyZWVmaW5hbGFyYWJpYztGQkFGCit5ZWhmaW5hbGFyYWJpYztGRUYyCit5ZWhoYW16YWFib3ZlYXJhYmljOzA2MjYKK3llaGhhbXphYWJvdmVmaW5hbGFyYWJpYztGRThBCit5ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYztGRThCCit5ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljO0ZFOEMKK3llaGluaXRpYWxhcmFiaWM7RkVGMworeWVobWVkaWFsYXJhYmljO0ZFRjQKK3llaG1lZW1pbml0aWFsYXJhYmljO0ZDREQKK3llaG1lZW1pc29sYXRlZGFyYWJpYztGQzU4Cit5ZWhub29uZmluYWxhcmFiaWM7RkM5NAoreWVodGhyZWVkb3RzYmVsb3dhcmFiaWM7MDZEMQoreWVrb3JlYW47MzE1NgoreWVuOzAwQTUKK3llbm1vbm9zcGFjZTtGRkU1Cit5ZW9rb3JlYW47MzE1NQoreWVvcmluaGlldWhrb3JlYW47MzE4NgoreWVyYWhiZW55b21vaGVicmV3OzA1QUEKK3llcmFoYmVueW9tb2xlZnRoZWJyZXc7MDVBQQoreWVyaWN5cmlsbGljOzA0NEIKK3llcnVkaWVyZXNpc2N5cmlsbGljOzA0RjkKK3llc2lldW5na29yZWFuOzMxODEKK3llc2lldW5ncGFuc2lvc2tvcmVhbjszMTgzCit5ZXNpZXVuZ3Npb3Nrb3JlYW47MzE4MgoreWV0aXZoZWJyZXc7MDU5QQoreWdyYXZlOzFFRjMKK3lob29rOzAxQjQKK3lob29rYWJvdmU7MUVGNworeWlhcm1lbmlhbjswNTc1Cit5aWN5cmlsbGljOzA0NTcKK3lpa29yZWFuOzMxNjIKK3lpbnlhbmc7MjYyRgoreWl3bmFybWVuaWFuOzA1ODIKK3ltb25vc3BhY2U7RkY1OQoreW9kOzA1RDkKK3lvZGRhZ2VzaDtGQjM5Cit5b2RkYWdlc2hoZWJyZXc7RkIzOQoreW9kaGVicmV3OzA1RDkKK3lvZHlvZGhlYnJldzswNUYyCit5b2R5b2RwYXRhaGhlYnJldztGQjFGCit5b2hpcmFnYW5hOzMwODgKK3lvaWtvcmVhbjszMTg5Cit5b2thdGFrYW5hOzMwRTgKK3lva2F0YWthbmFoYWxmd2lkdGg7RkY5NgoreW9rb3JlYW47MzE1QgoreW9zbWFsbGhpcmFnYW5hOzMwODcKK3lvc21hbGxrYXRha2FuYTszMEU3Cit5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGg7RkY2RQoreW90Z3JlZWs7MDNGMworeW95YWVrb3JlYW47MzE4OAoreW95YWtvcmVhbjszMTg3Cit5b3lha3RoYWk7MEUyMgoreW95aW5ndGhhaTswRTBECit5cGFyZW47MjRCNAoreXBvZ2VncmFtbWVuaTswMzdBCit5cG9nZWdyYW1tZW5pZ3JlZWtjbWI7MDM0NQoreXI7MDFBNgoreXJpbmc7MUU5OQoreXN1cGVyaW9yOzAyQjgKK3l0aWxkZTsxRUY5Cit5dHVybmVkOzAyOEUKK3l1aGlyYWdhbmE7MzA4NgoreXVpa29yZWFuOzMxOEMKK3l1a2F0YWthbmE7MzBFNgoreXVrYXRha2FuYWhhbGZ3aWR0aDtGRjk1Cit5dWtvcmVhbjszMTYwCit5dXNiaWdjeXJpbGxpYzswNDZCCit5dXNiaWdpb3RpZmllZGN5cmlsbGljOzA0NkQKK3l1c2xpdHRsZWN5cmlsbGljOzA0NjcKK3l1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM7MDQ2OQoreXVzbWFsbGhpcmFnYW5hOzMwODUKK3l1c21hbGxrYXRha2FuYTszMEU1Cit5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg7RkY2RAoreXV5ZWtvcmVhbjszMThCCit5dXllb2tvcmVhbjszMThBCit5eWFiZW5nYWxpOzA5REYKK3l5YWRldmE7MDk1RgorejswMDdBCit6YWFybWVuaWFuOzA1NjYKK3phY3V0ZTswMTdBCit6YWRldmE7MDk1QgoremFndXJtdWtoaTswQTVCCit6YWhhcmFiaWM7MDYzOAoremFoZmluYWxhcmFiaWM7RkVDNgoremFoaW5pdGlhbGFyYWJpYztGRUM3Cit6YWhpcmFnYW5hOzMwNTYKK3phaG1lZGlhbGFyYWJpYztGRUM4Cit6YWluYXJhYmljOzA2MzIKK3phaW5maW5hbGFyYWJpYztGRUIwCit6YWthdGFrYW5hOzMwQjYKK3phcWVmZ2Fkb2xoZWJyZXc7MDU5NQoremFxZWZxYXRhbmhlYnJldzswNTk0Cit6YXJxYWhlYnJldzswNTk4Cit6YXlpbjswNUQ2Cit6YXlpbmRhZ2VzaDtGQjM2Cit6YXlpbmRhZ2VzaGhlYnJldztGQjM2Cit6YXlpbmhlYnJldzswNUQ2Cit6Ym9wb21vZm87MzExNworemNhcm9uOzAxN0UKK3pjaXJjbGU7MjRFOQoremNpcmN1bWZsZXg7MUU5MQoremN1cmw7MDI5MQoremRvdDswMTdDCit6ZG90YWNjZW50OzAxN0MKK3pkb3RiZWxvdzsxRTkzCit6ZWN5cmlsbGljOzA0MzcKK3plZGVzY2VuZGVyY3lyaWxsaWM7MDQ5OQoremVkaWVyZXNpc2N5cmlsbGljOzA0REYKK3plaGlyYWdhbmE7MzA1QworemVrYXRha2FuYTszMEJDCit6ZXJvOzAwMzAKK3plcm9hcmFiaWM7MDY2MAoremVyb2JlbmdhbGk7MDlFNgoremVyb2RldmE7MDk2NgoremVyb2d1amFyYXRpOzBBRTYKK3plcm9ndXJtdWtoaTswQTY2Cit6ZXJvaGFja2FyYWJpYzswNjYwCit6ZXJvaW5mZXJpb3I7MjA4MAoremVyb21vbm9zcGFjZTtGRjEwCit6ZXJvb2xkc3R5bGU7RjczMAoremVyb3BlcnNpYW47MDZGMAoremVyb3N1cGVyaW9yOzIwNzAKK3plcm90aGFpOzBFNTAKK3plcm93aWR0aGpvaW5lcjtGRUZGCit6ZXJvd2lkdGhub25qb2luZXI7MjAwQworemVyb3dpZHRoc3BhY2U7MjAwQgoremV0YTswM0I2Cit6aGJvcG9tb2ZvOzMxMTMKK3poZWFybWVuaWFuOzA1NkEKK3poZWJyZXZlY3lyaWxsaWM7MDRDMgoremhlY3lyaWxsaWM7MDQzNgoremhlZGVzY2VuZGVyY3lyaWxsaWM7MDQ5NworemhlZGllcmVzaXNjeXJpbGxpYzswNERECit6aWhpcmFnYW5hOzMwNTgKK3ppa2F0YWthbmE7MzBCOAoremlub3JoZWJyZXc7MDVBRQoremxpbmViZWxvdzsxRTk1Cit6bW9ub3NwYWNlO0ZGNUEKK3pvaGlyYWdhbmE7MzA1RQorem9rYXRha2FuYTszMEJFCit6cGFyZW47MjRCNQorenJldHJvZmxleGhvb2s7MDI5MAorenN0cm9rZTswMUI2Cit6dWhpcmFnYW5hOzMwNUEKK3p1a2F0YWthbmE7MzBCQQorYTEwMDsyNzVFCithMTAxOzI3NjEKK2ExMDI7Mjc2MgorYTEwMzsyNzYzCithMTA0OzI3NjQKK2ExMDU7MjcxMAorYTEwNjsyNzY1CithMTA3OzI3NjYKK2ExMDg7Mjc2NworYTEwOTsyNjYwCithMTA7MjcyMQorYTExMDsyNjY1CithMTExOzI2NjYKK2ExMTI7MjY2MworYTExNzsyNzA5CithMTE4OzI3MDgKK2ExMTk7MjcwNworYTExOzI2MUIKK2ExMjA7MjQ2MAorYTEyMTsyNDYxCithMTIyOzI0NjIKK2ExMjM7MjQ2MworYTEyNDsyNDY0CithMTI1OzI0NjUKK2ExMjY7MjQ2NgorYTEyNzsyNDY3CithMTI4OzI0NjgKK2ExMjk7MjQ2OQorYTEyOzI2MUUKK2ExMzA7Mjc3NgorYTEzMTsyNzc3CithMTMyOzI3NzgKK2ExMzM7Mjc3OQorYTEzNDsyNzdBCithMTM1OzI3N0IKK2ExMzY7Mjc3QworYTEzNzsyNzdECithMTM4OzI3N0UKK2ExMzk7Mjc3RgorYTEzOzI3MEMKK2ExNDA7Mjc4MAorYTE0MTsyNzgxCithMTQyOzI3ODIKK2ExNDM7Mjc4MworYTE0NDsyNzg0CithMTQ1OzI3ODUKK2ExNDY7Mjc4NgorYTE0NzsyNzg3CithMTQ4OzI3ODgKK2ExNDk7Mjc4OQorYTE0OzI3MEQKK2ExNTA7Mjc4QQorYTE1MTsyNzhCCithMTUyOzI3OEMKK2ExNTM7Mjc4RAorYTE1NDsyNzhFCithMTU1OzI3OEYKK2ExNTY7Mjc5MAorYTE1NzsyNzkxCithMTU4OzI3OTIKK2ExNTk7Mjc5MworYTE1OzI3MEUKK2ExNjA7Mjc5NAorYTE2MTsyMTkyCithMTYyOzI3QTMKK2ExNjM7MjE5NAorYTE2NDsyMTk1CithMTY1OzI3OTkKK2ExNjY7Mjc5QgorYTE2NzsyNzlDCithMTY4OzI3OUQKK2ExNjk7Mjc5RQorYTE2OzI3MEYKK2ExNzA7Mjc5RgorYTE3MTsyN0EwCithMTcyOzI3QTEKK2ExNzM7MjdBMgorYTE3NDsyN0E0CithMTc1OzI3QTUKK2ExNzY7MjdBNgorYTE3NzsyN0E3CithMTc4OzI3QTgKK2ExNzk7MjdBOQorYTE3OzI3MTEKK2ExODA7MjdBQgorYTE4MTsyN0FECithMTgyOzI3QUYKK2ExODM7MjdCMgorYTE4NDsyN0IzCithMTg1OzI3QjUKK2ExODY7MjdCOAorYTE4NzsyN0JBCithMTg4OzI3QkIKK2ExODk7MjdCQworYTE4OzI3MTIKK2ExOTA7MjdCRAorYTE5MTsyN0JFCithMTkyOzI3OUEKK2ExOTM7MjdBQQorYTE5NDsyN0I2CithMTk1OzI3QjkKK2ExOTY7Mjc5OAorYTE5NzsyN0I0CithMTk4OzI3QjcKK2ExOTk7MjdBQworYTE5OzI3MTMKK2ExOzI3MDEKK2EyMDA7MjdBRQorYTIwMTsyN0IxCithMjAyOzI3MDMKK2EyMDM7Mjc1MAorYTIwNDsyNzUyCithMjA1OzI3NkUKK2EyMDY7Mjc3MAorYTIwOzI3MTQKK2EyMTsyNzE1CithMjI7MjcxNgorYTIzOzI3MTcKK2EyNDsyNzE4CithMjU7MjcxOQorYTI2OzI3MUEKK2EyNzsyNzFCCithMjg7MjcxQworYTI5OzI3MjIKK2EyOzI3MDIKK2EzMDsyNzIzCithMzE7MjcyNAorYTMyOzI3MjUKK2EzMzsyNzI2CithMzQ7MjcyNworYTM1OzI2MDUKK2EzNjsyNzI5CithMzc7MjcyQQorYTM4OzI3MkIKK2EzOTsyNzJDCithMzsyNzA0CithNDA7MjcyRAorYTQxOzI3MkUKK2E0MjsyNzJGCithNDM7MjczMAorYTQ0OzI3MzEKK2E0NTsyNzMyCithNDY7MjczMworYTQ3OzI3MzQKK2E0ODsyNzM1CithNDk7MjczNgorYTQ7MjYwRQorYTUwOzI3MzcKK2E1MTsyNzM4CithNTI7MjczOQorYTUzOzI3M0EKK2E1NDsyNzNCCithNTU7MjczQworYTU2OzI3M0QKK2E1NzsyNzNFCithNTg7MjczRgorYTU5OzI3NDAKK2E1OzI3MDYKK2E2MDsyNzQxCithNjE7Mjc0MgorYTYyOzI3NDMKK2E2MzsyNzQ0CithNjQ7Mjc0NQorYTY1OzI3NDYKK2E2NjsyNzQ3CithNjc7Mjc0OAorYTY4OzI3NDkKK2E2OTsyNzRBCithNjsyNzFECithNzA7Mjc0QgorYTcxOzI1Q0YKK2E3MjsyNzRECithNzM7MjVBMAorYTc0OzI3NEYKK2E3NTsyNzUxCithNzY7MjVCMgorYTc3OzI1QkMKK2E3ODsyNUM2CithNzk7Mjc1NgorYTc7MjcxRQorYTgxOzI1RDcKK2E4MjsyNzU4CithODM7Mjc1OQorYTg0OzI3NUEKK2E4NTsyNzZGCithODY7Mjc3MQorYTg3OzI3NzIKK2E4ODsyNzczCithODk7Mjc2OAorYTg7MjcxRgorYTkwOzI3NjkKK2E5MTsyNzZDCithOTI7Mjc2RAorYTkzOzI3NkEKK2E5NDsyNzZCCithOTU7Mjc3NAorYTk2OzI3NzUKK2E5NzsyNzVCCithOTg7Mjc1QworYTk5OzI3NUQKK2E5OzI3MjAKKyIiIgorCisKKyMgc3RyaW5nIHRhYmxlIG1hbmFnZW1lbnQKKyMKK2NsYXNzIFN0cmluZ1RhYmxlOgorICBkZWYgX19pbml0X18oIHNlbGYsIG5hbWVfbGlzdCwgbWFzdGVyX3RhYmxlX25hbWUgKToKKyAgICBzZWxmLm5hbWVzICAgICAgICA9IG5hbWVfbGlzdAorICAgIHNlbGYubWFzdGVyX3RhYmxlID0gbWFzdGVyX3RhYmxlX25hbWUKKyAgICBzZWxmLmluZGljZXMgICAgICA9IHt9CisgICAgaW5kZXggICAgICAgICAgICAgPSAwCisKKyAgICBmb3IgbmFtZSBpbiBuYW1lX2xpc3Q6CisgICAgICBzZWxmLmluZGljZXNbbmFtZV0gPSBpbmRleAorICAgICAgaW5kZXggKz0gbGVuKCBuYW1lICkgKyAxCisKKyAgICBzZWxmLnRvdGFsID0gaW5kZXgKKworICBkZWYgZHVtcCggc2VsZiwgZmlsZSApOgorICAgIHdyaXRlID0gZmlsZS53cml0ZQorICAgIHdyaXRlKCAiICBzdGF0aWMgY29uc3QgY2hhciAgIiArIHNlbGYubWFzdGVyX3RhYmxlICsKKyAgICAgICAgICAgIlsiICsgcmVwciggc2VsZi50b3RhbCApICsgIl0gPVxuIiApCisgICAgd3JpdGUoICIgIHtcbiIgKQorCisgICAgbGluZSA9ICIiCisgICAgZm9yIG5hbWUgaW4gc2VsZi5uYW1lczoKKyAgICAgIGxpbmUgKz0gIiAgICAnIgorICAgICAgbGluZSArPSBzdHJpbmcuam9pbiggKCByZS5maW5kYWxsKCAiLiIsIG5hbWUgKSApLCAiJywnIiApCisgICAgICBsaW5lICs9ICInLCAwLFxuIgorCisgICAgd3JpdGUoIGxpbmUgKyAiICB9O1xuXG5cbiIgKQorCisgIGRlZiBkdW1wX3N1Ymxpc3QoIHNlbGYsIGZpbGUsIHRhYmxlX25hbWUsIG1hY3JvX25hbWUsIHN1Ymxpc3QgKToKKyAgICB3cml0ZSA9IGZpbGUud3JpdGUKKyAgICB3cml0ZSggIiNkZWZpbmUgIiArIG1hY3JvX25hbWUgKyAiICAiICsgcmVwciggbGVuKCBzdWJsaXN0ICkgKSArICJcblxuIiApCisKKyAgICB3cml0ZSggIiAgLyogVmFsdWVzIGFyZSBvZmZzZXRzIGludG8gdGhlIGAiICsKKyAgICAgICAgICAgc2VsZi5tYXN0ZXJfdGFibGUgKyAiJyB0YWJsZSAqL1xuXG4iICkKKyAgICB3cml0ZSggIiAgc3RhdGljIGNvbnN0IHNob3J0ICAiICsgdGFibGVfbmFtZSArCisgICAgICAgICAgICJbIiArIG1hY3JvX25hbWUgKyAiXSA9XG4iICkKKyAgICB3cml0ZSggIiAge1xuIiApCisKKyAgICBsaW5lICA9ICIgICAgIgorICAgIGNvbW1hID0gIiIKKyAgICBjb2wgICA9IDAKKworICAgIGZvciBuYW1lIGluIHN1Ymxpc3Q6CisgICAgICBsaW5lICs9IGNvbW1hCisgICAgICBsaW5lICs9ICIlNGQiICUgc2VsZi5pbmRpY2VzW25hbWVdCisgICAgICBjb2wgICs9IDEKKyAgICAgIGNvbW1hID0gIiwiCisgICAgICBpZiBjb2wgPT0gMTQ6CisgICAgICAgIGNvbCAgID0gMAorICAgICAgICBjb21tYSA9ICIsXG4gICAgIgorCisgICAgd3JpdGUoIGxpbmUgKyAiXG4gIH07XG5cblxuIiApCisKKworIyBXZSBub3cgc3RvcmUgdGhlIEFkb2JlIEdseXBoIExpc3QgaW4gY29tcHJlc3NlZCBmb3JtLiAgVGhlIGxpc3QgaXMgcHV0CisjIGludG8gYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQgYHRyaWUnIChiZWNhdXNlIGl0IGhhcyBhIHRyZWUtbGlrZQorIyBhcHBlYXJhbmNlKS4gIENvbnNpZGVyLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3Ugd2FudCB0byBzdG9yZSB0aGUKKyMgZm9sbG93aW5nIG5hbWUgbWFwcGluZzoKKyMKKyMgICBBICAgICAgICA9PiAxCisjICAgQWFjdXRlICAgPT4gNgorIyAgIEFiYWxvbiAgID0+IDIKKyMgICBBYnN0cmFjdCA9PiA0CisjCisjIEl0IGlzIHBvc3NpYmxlIHRvIHN0b3JlIHRoZSBlbnRyaWVzIGFzIGZvbGxvd3MuCisjCisjICAgQSA9PiAxCisjICAgfAorIyAgICstYWN1dGUgPT4gNgorIyAgIHwKKyMgICArLWIKKyMgICAgIHwKKyMgICAgICstYWxvbiA9PiAyCisjICAgICB8CisjICAgICArLXN0cmFjdCA9PiA0CisjCisjIFdlIHNlZSB0aGF0IGVhY2ggbm9kZSBpbiB0aGUgdHJpZSBoYXM6CisjCisjIC0gb25lIG9yIG1vcmUgYGxldHRlcnMnCisjIC0gYW4gb3B0aW9uYWwgdmFsdWUKKyMgLSB6ZXJvIG9yIG1vcmUgY2hpbGQgbm9kZXMKKyMKKyMgVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2FsbAorIworIyAgIHJvb3QgPSBTdHJpbmdOb2RlKCAiIiwgMCApCisjICAgZm9yIHdvcmQgaW4gbWFwLnZhbHVlcygpOgorIyAgICAgcm9vdC5hZGQoIHdvcmQsIG1hcFt3b3JkXSApCisjCisjIHdoaWNoIGNyZWF0ZXMgYSBsYXJnZSB0cmllIHdoZXJlIGVhY2ggbm9kZSBoYXMgb25seSBvbmUgY2hpbGRyZW4uCisjCisjIEV4ZWN1dGluZworIworIyAgIHJvb3QgPSByb290Lm9wdGltaXplKCkKKyMKKyMgb3B0aW1pemVzIHRoZSB0cmllIGJ5IG1lcmdpbmcgdGhlIGxldHRlcnMgb2Ygc3VjY2Vzc2l2ZSBub2RlcyB3aGVuZXZlcgorIyBwb3NzaWJsZS4KKyMKKyMgRWFjaCBub2RlIG9mIHRoZSB0cmllIGlzIHN0b3JlZCBhcyBmb2xsb3dzLgorIworIyAtIEZpcnN0IHRoZSBub2RlJ3MgbGV0dGVyLCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBzY2hlbWUuICBXZQorIyAgIHVzZSB0aGUgZmFjdCB0aGF0IGluIHRoZSBBR0wgbm8gbmFtZSBjb250YWlucyBjaGFyYWN0ZXIgY29kZXMgPiAxMjcuCisjCisjICAgICBuYW1lICAgICAgICAgYml0c2l6ZSAgICAgZGVzY3JpcHRpb24KKyMgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIG5vdGxhc3QgICAgICAgICAgICAxICAgICBTZXQgdG8gMSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBsZXR0ZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgd29yZC4KKyMgICAgIGFzY2lpICAgICAgICAgICAgICA3ICAgICBUaGUgbGV0dGVyJ3MgQVNDSUkgdmFsdWUuCisjCisjIC0gVGhlIGxldHRlciBpcyBmb2xsb3dlZCBieSBhIGNoaWxkcmVuIGNvdW50IGFuZCB0aGUgdmFsdWUgb2YgdGhlCisjICAgY3VycmVudCBrZXkgKGlmIGFueSkuICBBZ2FpbiB3ZSBjYW4gZG8gc29tZSBvcHRpbWl6YXRpb24gYmVjYXVzZSBhbGwKKyMgICBBR0wgZW50cmllcyBhcmUgZnJvbSB0aGUgQk1QOyB0aGlzIG1lYW5zIHRoYXQgMTYgYml0cyBhcmUgc3VmZmljaWVudAorIyAgIHRvIHN0b3JlIGl0cyBVbmljb2RlIHZhbHVlcy4gIEFkZGl0aW9uYWxseSwgbm8gbm9kZSBoYXMgbW9yZSB0aGFuCisjICAgMTI3IGNoaWxkcmVuLgorIworIyAgICAgbmFtZSAgICAgICAgIGJpdHNpemUgICAgIGRlc2NyaXB0aW9uCisjICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgaGFzdmFsdWUgICAgICAgICAgIDEgICAgIFNldCB0byAxIGlmIGEgMTYtYml0IFVuaWNvZGUgdmFsdWUgZm9sbG93cy4KKyMgICAgIG51bV9jaGlsZHJlbiAgICAgICA3ICAgICBOdW1iZXIgb2YgY2hpbGRyZW4uICBDYW4gYmUgMCBvbmx5IGlmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGhhc3ZhbHVlJyBpcyBzZXQgdG8gMS4KKyMgICAgIHZhbHVlICAgICAgICAgICAgIDE2ICAgICBPcHRpb25hbCBVbmljb2RlIHZhbHVlLgorIworIyAtIEEgbm9kZSBpcyBmaW5pc2hlZCBieSBhIGxpc3Qgb2YgMTZiaXQgYWJzb2x1dGUgb2Zmc2V0cyB0byB0aGUKKyMgICBjaGlsZHJlbiwgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiB0aGVpciBmaXJzdAorIyAgIGxldHRlci4KKyMKKyMgRm9yIHNpbXBsaWNpdHksIGFsbCAxNmJpdCBxdWFudGl0aWVzIGFyZSBzdG9yZWQgaW4gYmlnLWVuZGlhbiBvcmRlci4KKyMKKyMgVGhlIHJvb3Qgbm9kZSBoYXMgZmlyc3QgbGV0dGVyID0gMCwgYW5kIG5vIHZhbHVlLgorIworY2xhc3MgU3RyaW5nTm9kZToKKyAgZGVmIF9faW5pdF9fKCBzZWxmLCBsZXR0ZXIsIHZhbHVlICk6CisgICAgc2VsZi5sZXR0ZXIgICA9IGxldHRlcgorICAgIHNlbGYudmFsdWUgICAgPSB2YWx1ZQorICAgIHNlbGYuY2hpbGRyZW4gPSB7fQorCisgIGRlZiBfX2NtcF9fKCBzZWxmLCBvdGhlciApOgorICAgIHJldHVybiBvcmQoIHNlbGYubGV0dGVyWzBdICkgLSBvcmQoIG90aGVyLmxldHRlclswXSApCisKKyAgZGVmIGFkZCggc2VsZiwgd29yZCwgdmFsdWUgKToKKyAgICBpZiBsZW4oIHdvcmQgKSA9PSAwOgorICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICByZXR1cm4KKworICAgIGxldHRlciA9IHdvcmRbMF0KKyAgICB3b3JkICAgPSB3b3JkWzE6XQorCisgICAgaWYgc2VsZi5jaGlsZHJlbi5oYXNfa2V5KCBsZXR0ZXIgKToKKyAgICAgIGNoaWxkID0gc2VsZi5jaGlsZHJlbltsZXR0ZXJdCisgICAgZWxzZToKKyAgICAgIGNoaWxkID0gU3RyaW5nTm9kZSggbGV0dGVyLCAwICkKKyAgICAgIHNlbGYuY2hpbGRyZW5bbGV0dGVyXSA9IGNoaWxkCisKKyAgICBjaGlsZC5hZGQoIHdvcmQsIHZhbHVlICkKKworICBkZWYgb3B0aW1pemUoIHNlbGYgKToKKyAgICAjIG9wdGltaXplIGFsbCBjaGlsZHJlbiBmaXJzdAorICAgIGNoaWxkcmVuICAgICAgPSBzZWxmLmNoaWxkcmVuLnZhbHVlcygpCisgICAgc2VsZi5jaGlsZHJlbiA9IHt9CisKKyAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICBzZWxmLmNoaWxkcmVuW2NoaWxkLmxldHRlclswXV0gPSBjaGlsZC5vcHRpbWl6ZSgpCisKKyAgICAjIGRvbid0IG9wdGltaXplIGlmIHRoZXJlJ3MgYSB2YWx1ZSwKKyAgICAjIGlmIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkIG9yIGlmIHdlCisgICAgIyBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQKKyAgICBpZiAoIHNlbGYudmFsdWUgIT0gMCApIG9yICggbm90IGNoaWxkcmVuICkgb3IgbGVuKCBjaGlsZHJlbiApID4gMToKKyAgICAgIHJldHVybiBzZWxmCisKKyAgICBjaGlsZCA9IGNoaWxkcmVuWzBdCisKKyAgICBzZWxmLmxldHRlciAgKz0gY2hpbGQubGV0dGVyCisgICAgc2VsZi52YWx1ZSAgICA9IGNoaWxkLnZhbHVlCisgICAgc2VsZi5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuCisKKyAgICByZXR1cm4gc2VsZgorCisgIGRlZiBkdW1wX2RlYnVnKCBzZWxmLCB3cml0ZSwgbWFyZ2luICk6CisgICAgIyB0aGlzIGlzIHVzZWQgZHVyaW5nIGRlYnVnZ2luZworICAgIGxpbmUgPSBtYXJnaW4gKyAiKy0iCisgICAgaWYgbGVuKCBzZWxmLmxldHRlciApID09IDA6CisgICAgICBsaW5lICs9ICI8Tk9MRVRURVI+IgorICAgIGVsc2U6CisgICAgICBsaW5lICs9IHNlbGYubGV0dGVyCisKKyAgICBpZiBzZWxmLnZhbHVlOgorICAgICAgbGluZSArPSAiID0+ICIgKyByZXByKCBzZWxmLnZhbHVlICkKKworICAgIHdyaXRlKCBsaW5lICsgIlxuIiApCisKKyAgICBpZiBzZWxmLmNoaWxkcmVuOgorICAgICAgbWFyZ2luICs9ICJ8ICIKKyAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuLnZhbHVlcygpOgorICAgICAgICBjaGlsZC5kdW1wX2RlYnVnKCB3cml0ZSwgbWFyZ2luICkKKworICBkZWYgbG9jYXRlKCBzZWxmLCBpbmRleCApOgorICAgIHNlbGYuaW5kZXggPSBpbmRleAorICAgIGlmIGxlbiggc2VsZi5sZXR0ZXIgKSA+IDA6CisgICAgICBpbmRleCArPSBsZW4oIHNlbGYubGV0dGVyICkgKyAxCisgICAgZWxzZToKKyAgICAgIGluZGV4ICs9IDIKKworICAgIGlmIHNlbGYudmFsdWUgIT0gMDoKKyAgICAgIGluZGV4ICs9IDIKKworICAgIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKQorICAgIGNoaWxkcmVuLnNvcnQoKQorCisgICAgaW5kZXggKz0gMiAqIGxlbiggY2hpbGRyZW4gKQorICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgIGluZGV4ID0gY2hpbGQubG9jYXRlKCBpbmRleCApCisKKyAgICByZXR1cm4gaW5kZXgKKworICBkZWYgc3RvcmUoIHNlbGYsIHN0b3JhZ2UgKToKKyAgICAjIHdyaXRlIHRoZSBsZXR0ZXJzCisgICAgbCA9IGxlbiggc2VsZi5sZXR0ZXIgKQorICAgIGlmIGwgPT0gMDoKKyAgICAgIHN0b3JhZ2UgKz0gc3RydWN0LnBhY2soICJCIiwgMCApCisgICAgZWxzZToKKyAgICAgIGZvciBuIGluIHJhbmdlKCBsICk6CisgICAgICAgIHZhbCA9IG9yZCggc2VsZi5sZXR0ZXJbbl0gKQorICAgICAgICBpZiBuIDwgbCAtIDE6CisgICAgICAgICAgdmFsICs9IDEyOAorICAgICAgICBzdG9yYWdlICs9IHN0cnVjdC5wYWNrKCAiQiIsIHZhbCApCisKKyAgICAjIHdyaXRlIHRoZSBjb3VudAorICAgIGNoaWxkcmVuID0gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKQorICAgIGNoaWxkcmVuLnNvcnQoKQorCisgICAgY291bnQgPSBsZW4oIGNoaWxkcmVuICkKKworICAgIGlmIHNlbGYudmFsdWUgIT0gMDoKKyAgICAgIHN0b3JhZ2UgKz0gc3RydWN0LnBhY2soICIhQkgiLCBjb3VudCArIDEyOCwgc2VsZi52YWx1ZSApCisgICAgZWxzZToKKyAgICAgIHN0b3JhZ2UgKz0gc3RydWN0LnBhY2soICJCIiwgY291bnQgKQorCisgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgc3RvcmFnZSArPSBzdHJ1Y3QucGFjayggIiFIIiwgY2hpbGQuaW5kZXggKQorCisgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgc3RvcmFnZSA9IGNoaWxkLnN0b3JlKCBzdG9yYWdlICkKKworICAgIHJldHVybiBzdG9yYWdlCisKKworZGVmIGFkb2JlX2dseXBoX3ZhbHVlcygpOgorICAiIiJyZXR1cm4gdGhlIGxpc3Qgb2YgZ2x5cGggbmFtZXMgYW5kIHRoZWlyIHVuaWNvZGUgdmFsdWVzIiIiCisKKyAgbGluZXMgID0gc3RyaW5nLnNwbGl0KCBhZG9iZV9nbHlwaF9saXN0LCAnXG4nICkKKyAgZ2x5cGhzID0gW10KKyAgdmFsdWVzID0gW10KKworICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICBpZiBsaW5lOgorICAgICAgZmllbGRzID0gc3RyaW5nLnNwbGl0KCBsaW5lLCAnOycgKQorIyAgICAgcHJpbnQgZmllbGRzWzFdICsgJyAtICcgKyBmaWVsZHNbMF0KKyAgICAgIHN1YmZpZWxkcyA9IHN0cmluZy5zcGxpdCggZmllbGRzWzFdLCAnICcgKQorICAgICAgaWYgbGVuKCBzdWJmaWVsZHMgKSA9PSAxOgorICAgICAgICBnbHlwaHMuYXBwZW5kKCBmaWVsZHNbMF0gKQorICAgICAgICB2YWx1ZXMuYXBwZW5kKCBmaWVsZHNbMV0gKQorCisgIHJldHVybiBnbHlwaHMsIHZhbHVlcworCisKK2RlZiBmaWx0ZXJfZ2x5cGhfbmFtZXMoIGFsaXN0LCBmaWx0ZXIgKToKKyAgIiIiZmlsdGVyIGBhbGlzdCcgYnkgdGFraW5nIF9vdXRfIGFsbCBnbHlwaCBuYW1lcyB0aGF0IGFyZSBpbiBgZmlsdGVyJyIiIgorCisgIGNvdW50ICA9IDAKKyAgZXh0cmFzID0gW10KKworICBmb3IgbmFtZSBpbiBhbGlzdDoKKyAgICB0cnk6CisgICAgICBmaWx0ZXJlZF9pbmRleCA9IGZpbHRlci5pbmRleCggbmFtZSApCisgICAgZXhjZXB0OgorICAgICAgZXh0cmFzLmFwcGVuZCggbmFtZSApCisKKyAgcmV0dXJuIGV4dHJhcworCisKK2RlZiBkdW1wX2VuY29kaW5nKCBmaWxlLCBlbmNvZGluZ19uYW1lLCBlbmNvZGluZ19saXN0ICk6CisgICIiImR1bXAgYSBnaXZlbiBlbmNvZGluZyIiIgorCisgIHdyaXRlID0gZmlsZS53cml0ZQorICB3cml0ZSggIiAgLyogdGhlIGZvbGxvd2luZyBhcmUgaW5kaWNlcyBpbnRvIHRoZSBTSUQgbmFtZSB0YWJsZSAqL1xuIiApCisgIHdyaXRlKCAiICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgICIgKyBlbmNvZGluZ19uYW1lICsKKyAgICAgICAgICJbIiArIHJlcHIoIGxlbiggZW5jb2RpbmdfbGlzdCApICkgKyAiXSA9XG4iICkKKyAgd3JpdGUoICIgIHtcbiIgKQorCisgIGxpbmUgID0gIiAgICAiCisgIGNvbW1hID0gIiIKKyAgY29sICAgPSAwCisgIGZvciB2YWx1ZSBpbiBlbmNvZGluZ19saXN0OgorICAgIGxpbmUgKz0gY29tbWEKKyAgICBsaW5lICs9ICIlM2QiICUgdmFsdWUKKyAgICBjb21tYSA9ICIsIgorICAgIGNvbCAgKz0gMQorICAgIGlmIGNvbCA9PSAxNjoKKyAgICAgIGNvbCA9IDAKKyAgICAgIGNvbW1hID0gIixcbiAgICAiCisKKyAgd3JpdGUoIGxpbmUgKyAiXG4gIH07XG5cblxuIiApCisKKworZGVmIGR1bXBfYXJyYXkoIHRoZV9hcnJheSwgd3JpdGUsIGFycmF5X25hbWUgKToKKyAgIiIiZHVtcHMgYSBnaXZlbiBlbmNvZGluZyIiIgorCisgIHdyaXRlKCAiICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgIiArIGFycmF5X25hbWUgKworICAgICAgICAgIlsiICsgcmVwciggbGVuKCB0aGVfYXJyYXkgKSApICsgIkxdID1cbiIgKQorICB3cml0ZSggIiAge1xuIiApCisKKyAgbGluZSAgPSAiIgorICBjb21tYSA9ICIgICAgIgorICBjb2wgICA9IDAKKworICBmb3IgdmFsdWUgaW4gdGhlX2FycmF5OgorICAgIGxpbmUgKz0gY29tbWEKKyAgICBsaW5lICs9ICIlM2QiICUgb3JkKCB2YWx1ZSApCisgICAgY29tbWEgPSAiLCIKKyAgICBjb2wgICs9IDEKKworICAgIGlmIGNvbCA9PSAxNjoKKyAgICAgIGNvbCAgID0gMAorICAgICAgY29tbWEgPSAiLFxuICAgICIKKworICAgIGlmIGxlbiggbGluZSApID4gMTAyNDoKKyAgICAgIHdyaXRlKCBsaW5lICkKKyAgICAgIGxpbmUgPSAiIgorCisgIHdyaXRlKCBsaW5lICsgIlxuICB9O1xuXG5cbiIgKQorCisKK2RlZiBtYWluKCk6CisgICIiIm1haW4gcHJvZ3JhbSBib2R5IiIiCisKKyAgaWYgbGVuKCBzeXMuYXJndiApICE9IDI6CisgICAgcHJpbnQgX19kb2NfXyAlIHN5cy5hcmd2WzBdCisgICAgc3lzLmV4aXQoIDEgKQorCisgIGZpbGUgID0gb3Blbiggc3lzLmFyZ3ZbMV0sICJ3XG4iICkKKyAgd3JpdGUgPSBmaWxlLndyaXRlCisKKyAgY291bnRfc2lkID0gbGVuKCBzaWRfc3RhbmRhcmRfbmFtZXMgKQorCisgICMgYG1hY19leHRyYXMnIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGdseXBoIG5hbWVzIGluIHRoZSBNYWNpbnRvc2ggc3RhbmRhcmQKKyAgIyBlbmNvZGluZyB3aGljaCBhcmUgbm90IGluIHRoZSBTSUQgU3RhbmRhcmQgTmFtZXMuCisgICMKKyAgbWFjX2V4dHJhcyA9IGZpbHRlcl9nbHlwaF9uYW1lcyggbWFjX3N0YW5kYXJkX25hbWVzLCBzaWRfc3RhbmRhcmRfbmFtZXMgKQorCisgICMgYGJhc2VfbGlzdCcgY29udGFpbnMgdGhlIG5hbWVzIG9mIG91ciBmaW5hbCBnbHlwaCBuYW1lcyB0YWJsZS4KKyAgIyBJdCBjb25zaXN0cyBvZiB0aGUgYG1hY19leHRyYXMnIGdseXBoIG5hbWVzLCBmb2xsb3dlZCBieSB0aGUgU0lECisgICMgc3RhbmRhcmQgbmFtZXMuCisgICMKKyAgbWFjX2V4dHJhc19jb3VudCA9IGxlbiggbWFjX2V4dHJhcyApCisgIGJhc2VfbGlzdCAgICAgICAgPSBtYWNfZXh0cmFzICsgc2lkX3N0YW5kYXJkX25hbWVzCisKKyAgd3JpdGUoICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIiApCisgIHdyaXRlKCAiLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQorCisgIHdyaXRlKCAiLyogICUtNzFzKi9cbiIgJSBvcy5wYXRoLmJhc2VuYW1lKCBzeXMuYXJndlsxXSApICkKKworICB3cml0ZSggIi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKKyAgd3JpdGUoICIvKiAgICBQb3N0U2NyaXB0IGdseXBoIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCisgIHdyaXRlKCAiLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQorICB3cml0ZSggIi8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKKyAgd3JpdGUoICIvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCisgIHdyaXRlKCAiLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQorICB3cml0ZSggIi8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovXG4iICkKKyAgd3JpdGUoICIvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqL1xuIiApCisgIHdyaXRlKCAiLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi9cbiIgKQorICB3cml0ZSggIi8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovXG4iICkKKyAgd3JpdGUoICIvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCisgIHdyaXRlKCAiLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQorICB3cml0ZSggIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iICkKKyAgd3JpdGUoICJcbiIgKQorICB3cml0ZSggIlxuIiApCisgIHdyaXRlKCAiICAvKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgLS0gZG8gbm90IGVkaXQhICovXG4iICkKKyAgd3JpdGUoICJcbiIgKQorICB3cml0ZSggIlxuIiApCisKKyAgIyBkdW1wIGZpbmFsIGdseXBoIGxpc3QgKG1hYyBleHRyYXMgKyBzaWQgc3RhbmRhcmQgbmFtZXMpCisgICMKKyAgc3QgPSBTdHJpbmdUYWJsZSggYmFzZV9saXN0LCAiZnRfc3RhbmRhcmRfZ2x5cGhfbmFtZXMiICkKKworICBzdC5kdW1wKCBmaWxlICkKKyAgc3QuZHVtcF9zdWJsaXN0KCBmaWxlLCAiZnRfbWFjX25hbWVzIiwKKyAgICAgICAgICAgICAgICAgICAiRlRfTlVNX01BQ19OQU1FUyIsIG1hY19zdGFuZGFyZF9uYW1lcyApCisgIHN0LmR1bXBfc3VibGlzdCggZmlsZSwgImZ0X3NpZF9uYW1lcyIsCisgICAgICAgICAgICAgICAgICAgIkZUX05VTV9TSURfTkFNRVMiLCBzaWRfc3RhbmRhcmRfbmFtZXMgKQorCisgIGR1bXBfZW5jb2RpbmcoIGZpbGUsICJ0MV9zdGFuZGFyZF9lbmNvZGluZyIsIHQxX3N0YW5kYXJkX2VuY29kaW5nICkKKyAgZHVtcF9lbmNvZGluZyggZmlsZSwgInQxX2V4cGVydF9lbmNvZGluZyIsIHQxX2V4cGVydF9lbmNvZGluZyApCisKKyAgIyBkdW1wIHRoZSBBR0wgaW4gaXRzIGNvbXByZXNzZWQgZm9ybQorICAjCisgIGFnbF9nbHlwaHMsIGFnbF92YWx1ZXMgPSBhZG9iZV9nbHlwaF92YWx1ZXMoKQorICBkaWN0ID0gU3RyaW5nTm9kZSggIiIsIDAgKQorCisgIGZvciBnIGluIHJhbmdlKCBsZW4oIGFnbF9nbHlwaHMgKSApOgorICAgIGRpY3QuYWRkKCBhZ2xfZ2x5cGhzW2ddLCBldmFsKCAiMHgiICsgYWdsX3ZhbHVlc1tnXSApICkKKworICBkaWN0ICAgICAgID0gZGljdC5vcHRpbWl6ZSgpCisgIGRpY3RfbGVuICAgPSBkaWN0LmxvY2F0ZSggMCApCisgIGRpY3RfYXJyYXkgPSBkaWN0LnN0b3JlKCAiIiApCisKKyAgd3JpdGUoICIiIlwKKyAgLyoKKyAgICogIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCisgICAqICBvcHRpbWl6ZWQgZm9yIGVmZmljaWVudCBzZWFyY2hpbmcuICBJdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlCisgICAqICBgZ2xuYW1lcy5weScgcHl0aG9uIHNjcmlwdCBsb2NhdGVkIGluIHRoZSBgc3JjL3Rvb2xzJyBkaXJlY3RvcnkuCisgICAqCisgICAqICBUaGUgbG9va3VwIGZ1bmN0aW9uIHRvIGdldCB0aGUgVW5pY29kZSB2YWx1ZSBmb3IgYSBnaXZlbiBzdHJpbmcKKyAgICogIGlzIGRlZmluZWQgYmVsb3cgdGhlIHRhYmxlLgorICAgKi8KKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVAorCisiIiIgKQorCisgIGR1bXBfYXJyYXkoIGRpY3RfYXJyYXksIHdyaXRlLCAiZnRfYWRvYmVfZ2x5cGhfbGlzdCIgKQorCisgICMgd3JpdGUgdGhlIGxvb2t1cCByb3V0aW5lIG5vdworICAjCisgIHdyaXRlKCAiIiJcCisgIC8qCisgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBjb21wcmVzc2VkIHRhYmxlIGVmZmljaWVudGx5LgorICAgKi8KKyAgc3RhdGljIHVuc2lnbmVkIGxvbmcKKyAgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4KCBjb25zdCBjaGFyKiAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbGltaXQgKQorICB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGMgPSAwOworICAgIGludCAgICAgICAgICAgICAgICAgICBjb3VudCwgbWluLCBtYXg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAgPSBmdF9hZG9iZV9nbHlwaF9saXN0OworCisKKyAgICBpZiAoIG5hbWUgPT0gMCB8fCBuYW1lID49IGxpbWl0ICkKKyAgICAgIGdvdG8gTm90Rm91bmQ7CisKKyAgICBjICAgICA9ICpuYW1lKys7CisgICAgY291bnQgPSBwWzFdOworICAgIHAgICAgKz0gMjsKKworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gY291bnQ7CisKKyAgICB3aGlsZSAoIG1pbiA8IG1heCApCisgICAgeworICAgICAgaW50ICAgICAgICAgICAgICAgICAgIG1pZCA9ICggbWluICsgbWF4ICkgPj4gMTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICBxICAgPSBwICsgbWlkICogMjsKKyAgICAgIGludCAgICAgICAgICAgICAgICAgICBjMjsKKworCisgICAgICBxID0gZnRfYWRvYmVfZ2x5cGhfbGlzdCArICggKCAoaW50KXFbMF0gPDwgOCApIHwgcVsxXSApOworCisgICAgICBjMiA9IHFbMF0gJiAxMjc7CisgICAgICBpZiAoIGMyID09IGMgKQorICAgICAgeworICAgICAgICBwID0gcTsKKyAgICAgICAgZ290byBGb3VuZDsKKyAgICAgIH0KKyAgICAgIGlmICggYzIgPCBjICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWF4ID0gbWlkOworICAgIH0KKyAgICBnb3RvIE5vdEZvdW5kOworCisgIEZvdW5kOgorICAgIGZvciAoOzspCisgICAgeworICAgICAgLyogYXNzZXJ0ICgqcCAmIDEyNykgPT0gYyAqLworCisgICAgICBpZiAoIG5hbWUgPj0gbGltaXQgKQorICAgICAgeworICAgICAgICBpZiAoIChwWzBdICYgMTI4KSA9PSAwICYmCisgICAgICAgICAgICAgKHBbMV0gJiAxMjgpICE9IDAgKQorICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoICggKGludClwWzJdIDw8IDggKSB8IHBbM10gKTsKKworICAgICAgICBnb3RvIE5vdEZvdW5kOworICAgICAgfQorICAgICAgYyA9ICpuYW1lKys7CisgICAgICBpZiAoIHBbMF0gJiAxMjggKQorICAgICAgeworICAgICAgICBwKys7CisgICAgICAgIGlmICggYyAhPSAocFswXSAmIDEyNykgKQorICAgICAgICAgIGdvdG8gTm90Rm91bmQ7CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHArKzsKKyAgICAgIGNvdW50ID0gcFswXSAmIDEyNzsKKyAgICAgIGlmICggcFswXSAmIDEyOCApCisgICAgICAgIHAgKz0gMjsKKworICAgICAgcCsrOworCisgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgcCArPSAyICkKKyAgICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9ICggKGludClwWzBdIDw8IDggKSB8IHBbMV07CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICBxICAgICAgPSBmdF9hZG9iZV9nbHlwaF9saXN0ICsgb2Zmc2V0OworCisgICAgICAgIGlmICggYyA9PSAoIHFbMF0gJiAxMjcgKSApCisgICAgICAgIHsKKyAgICAgICAgICBwID0gcTsKKyAgICAgICAgICBnb3RvIE5leHRJdGVyOworICAgICAgICB9CisgICAgICB9CisgICAgICBnb3RvIE5vdEZvdW5kOworCisgICAgTmV4dEl0ZXI6CisgICAgICA7CisgICAgfQorCisgIE5vdEZvdW5kOgorICAgIHJldHVybiAwOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0FET0JFX0dMWVBIX0xJU1QgKi8KKworIiIiICkKKworICBpZiAwOiAgIyBnZW5lcmF0ZSB1bml0IHRlc3QsIG9yIGRvbid0CisgICAgIworICAgICMgbm93IHdyaXRlIHRoZSB1bml0IHRlc3QgdG8gY2hlY2sgdGhhdCBldmVyeXRoaW5nIHdvcmtzIE9LCisgICAgIworICAgIHdyaXRlKCAiI2lmZGVmIFRFU1RcblxuIiApCisKKyAgICB3cml0ZSggInN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgdGhlX25hbWVzW10gPSB7XG4iICkKKyAgICBmb3IgbmFtZSBpbiBhZ2xfZ2x5cGhzOgorICAgICAgd3JpdGUoICcgICInICsgbmFtZSArICciLFxuJyApCisgICAgd3JpdGUoICIgIDBcbn07XG4iICkKKworICAgIHdyaXRlKCAic3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgIHRoZV92YWx1ZXNbXSA9IHtcbiIgKQorICAgIGZvciB2YWwgaW4gYWdsX3ZhbHVlczoKKyAgICAgIHdyaXRlKCAnICAweCcgKyB2YWwgKyAnLFxuJyApCisgICAgd3JpdGUoICIgIDBcbn07XG4iICkKKworICAgIHdyaXRlKCAiIiIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisgIGludAorICBtYWluKCB2b2lkICkKKyAgeworICAgIGludCAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgIGNvbnN0IGNoYXIqIGNvbnN0KiAgICBuYW1lcyAgPSB0aGVfbmFtZXM7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogIHZhbHVlcyA9IHRoZV92YWx1ZXM7CisKKworICAgIGZvciAoIDsgKm5hbWVzOyBuYW1lcysrLCB2YWx1ZXMrKyApCisgICAgeworICAgICAgY29uc3QgY2hhciogICAgbmFtZSAgICAgID0gKm5hbWVzOworICAgICAgdW5zaWduZWQgbG9uZyAgcmVmZXJlbmNlID0gKnZhbHVlczsKKyAgICAgIHVuc2lnbmVkIGxvbmcgIHZhbHVlOworCisKKyAgICAgIHZhbHVlID0gZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4KCBuYW1lLCBuYW1lICsgc3RybGVuKCBuYW1lICkgKTsKKyAgICAgIGlmICggdmFsdWUgIT0gcmVmZXJlbmNlICkKKyAgICAgIHsKKyAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAibmFtZSAnJXMnID0+ICUwNHggaW5zdGVhZCBvZiAlMDR4XFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB2YWx1ZSwgcmVmZXJlbmNlICk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorIiIiICkKKworICAgIHdyaXRlKCAiI2VuZGlmIC8qIFRFU1QgKi9cbiIgKQorCisgIHdyaXRlKCJcbi8qIEVORCAqL1xuIikKKworCisjIE5vdyBydW4gdGhlIG1haW4gcm91dGluZQorIworbWFpbigpCisKKworIyBFTkQKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvbm8tY29weXJpZ2h0IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy9uby1jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxMWUzZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvbm8tY29weXJpZ2h0CkBAIC0wLDAgKzEsNjEgQEAKKyMgRmlsZXMgdGhhdCBkb24ndCBnZXQgYSBjb3B5cmlnaHQsIG9yIHdoaWNoIGFyZSB0YWtlbiBmcm9tIGVsc2V3aGVyZS4KKyMKKyMgQWxsIGxpbmVzIGluIHRoaXMgZmlsZSBhcmUgcGF0dGVybnMsIGluY2x1ZGluZyB0aGUgY29tbWVudCBsaW5lczsgdGhpcworIyBtZWFucyB0aGF0IGUuZy4gYEZUTC5UWFQnIG1hdGNoZXMgYWxsIGZpbGVzIHRoYXQgaGF2ZSB0aGlzIHN0cmluZyBpbgorIyB0aGUgZmlsZSBuYW1lIChpbmNsdWRpbmcgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAorIyBhbHdheXMgc3RhcnRpbmcgd2l0aCBgLi8nKS4KKyMKKyMgRG9uJ3QgcHV0IGVtcHR5IGxpbmVzIGludG8gdGhpcyBmaWxlIQorIworLmdpdGlnbm9yZQorIworYnVpbGRzL3VuaXgvcGtnLm00CisjCitkb2NzL0ZUTC5UWFQKK2RvY3MvR1BMdjIuVFhUCisjCitzcmMvYmFzZS9tZDUuYworc3JjL2Jhc2UvbWQ1LmgKKyMKK3NyYy9iZGYvYmRmLmMKK3NyYy9iZGYvYmRmLmgKK3NyYy9iZGYvYmRmZHJpdnIuYworc3JjL2JkZi9iZGZkcml2ci5oCitzcmMvYmRmL2JkZmVycm9yLmgKK3NyYy9iZGYvYmRmbGliLmMKK3NyYy9iZGYvbW9kdWxlLm1rCitzcmMvYmRmL1JFQURNRQorc3JjL2JkZi9ydWxlcy5taworIworc3JjL3BjZi9tb2R1bGUubWsKK3NyYy9wY2YvcGNmLmMKK3NyYy9wY2YvcGNmLmgKK3NyYy9wY2YvcGNmZHJpdnIuYworc3JjL3BjZi9wY2Zkcml2ci5oCitzcmMvcGNmL3BjZmVycm9yLmgKK3NyYy9wY2YvcGNmcmVhZC5jCitzcmMvcGNmL3BjZnJlYWQuaAorc3JjL3BjZi9wY2Z1dGlsLmMKK3NyYy9wY2YvcGNmdXRpbC5oCitzcmMvcGNmL1JFQURNRQorc3JjL3BjZi9ydWxlcy5taworIworc3JjL2d6aXAvYWRsZXIzMi5jCitzcmMvZ3ppcC9pbmZibG9jay5jCitzcmMvZ3ppcC9pbmZibG9jay5oCitzcmMvZ3ppcC9pbmZjb2Rlcy5jCitzcmMvZ3ppcC9pbmZjb2Rlcy5oCitzcmMvZ3ppcC9pbmZmaXhlZC5oCitzcmMvZ3ppcC9pbmZsYXRlLmMKK3NyYy9nemlwL2luZnRyZWVzLmMKK3NyYy9nemlwL2luZnRyZWVzLmgKK3NyYy9nemlwL2luZnV0aWwuYworc3JjL2d6aXAvaW5mdXRpbC5oCitzcmMvZ3ppcC96Y29uZi5oCitzcmMvZ3ppcC96bGliLmgKK3NyYy9nemlwL3p1dGlsLmMKK3NyYy9nemlwL3p1dGlsLmgKKyMKK3NyYy90b29scy9mdHJhbmRvbS9mdHJhbmRvbS5jCisjCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy90ZXN0X2FmbS5jIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy90ZXN0X2FmbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTYxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3Rlc3RfYWZtLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBnY2MgLURGVDJfQlVJTERfTElCUkFSWSAtSS4uLy4uL2luY2x1ZGUgLW8gdGVzdF9hZm0gdGVzdF9hZm0uYyBcCisgKiAgICAgLUwuLi8uLi9vYmpzLy5saWJzIC1sZnJlZXR5cGUgLWx6IC1zdGF0aWMKKyAqLworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCisgIHZvaWQgZHVtcF9mb250aW5mbyggQUZNX0ZvbnRJbmZvICBmaSApCisgIHsKKyAgICBGVF9VSW50ICBpOworCisKKyAgICBwcmludGYoICJUaGlzIEFGTSBpcyBmb3IgJXNDSUQgZm9udC5cblxuIiwKKyAgICAgICAgICAgICggZmktPklzQ0lERm9udCApID8gIiIgOiAibm9uLSIgKTsKKworICAgIHByaW50ZiggIkZvbnRCQm94OiAlLjJmICUuMmYgJS4yZiAlLjJmXG4iLCBmaS0+Rm9udEJCb3gueE1pbiAvIDY1NTM2LiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmktPkZvbnRCQm94LnlNaW4gLyA2NTUzNi4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLT5Gb250QkJveC54TWF4IC8gNjU1MzYuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS0+Rm9udEJCb3gueU1heCAvIDY1NTM2LiApOworICAgIHByaW50ZiggIkFzY2VuZGVyOiAlLjJmXG4iLCBmaS0+QXNjZW5kZXIgLyA2NTUzNi4gKTsKKyAgICBwcmludGYoICJEZXNjZW5kZXI6ICUuMmZcblxuIiwgZmktPkRlc2NlbmRlciAvIDY1NTM2LiApOworCisgICAgaWYgKCBmaS0+TnVtVHJhY2tLZXJuICkKKyAgICAgIHByaW50ZiggIlRoZXJlIGFyZSAlZCBzZXRzIG9mIHRyYWNrIGtlcm5pbmdzOlxuIiwKKyAgICAgICAgICAgICAgZmktPk51bVRyYWNrS2VybiApOworICAgIGVsc2UKKyAgICAgIHByaW50ZiggIlRoZXJlIGlzIG5vIHRyYWNrIGtlcm5pbmcuXG4iICk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGZpLT5OdW1UcmFja0tlcm47IGkrKyApCisgICAgeworICAgICAgQUZNX1RyYWNrS2VybiAgdGsgPSBmaS0+VHJhY2tLZXJucyArIGk7CisKKworICAgICAgcHJpbnRmKCAiXHQlMmQ6ICU1LjJmICU1LjJmICU1LjJmICU1LjJmXG4iLCB0ay0+ZGVncmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ay0+bWluX3B0c2l6ZSAvIDY1NTM2LiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGstPm1pbl9rZXJuIC8gNjU1MzYuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ay0+bWF4X3B0c2l6ZSAvIDY1NTM2LiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGstPm1heF9rZXJuIC8gNjU1MzYuICk7CisgICAgfQorCisgICAgcHJpbnRmKCAiXG4iICk7CisKKyAgICBpZiAoIGZpLT5OdW1LZXJuUGFpciApCisgICAgICBwcmludGYoICJUaGVyZSBhcmUgJWQga2VybmluZyBwYWlyczpcbiIsCisgICAgICAgICAgICAgIGZpLT5OdW1LZXJuUGFpciApOworICAgIGVsc2UKKyAgICAgIHByaW50ZiggIlRoZXJlIGlzIG5vIGtlcm5pbmcgcGFpci5cbiIgKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgZmktPk51bUtlcm5QYWlyOyBpKysgKQorICAgIHsKKyAgICAgIEFGTV9LZXJuUGFpciAga3AgPSBmaS0+S2VyblBhaXJzICsgaTsKKworCisgICAgICBwcmludGYoICJcdCUzZCArICUzZCA9PiAoJTRkLCAlNGQpXG4iLCBrcC0+aW5kZXgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3AtPmluZGV4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtwLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3AtPnkgKTsKKyAgICB9CisKKyAgfQorCisgIGludAorICBkdW1teV9nZXRfaW5kZXgoIGNvbnN0IGNoYXIqICBuYW1lLAorICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgICBsZW4sCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIHVzZXJfZGF0YSApCisgIHsKKyAgICBpZiAoIGxlbiApCisgICAgICByZXR1cm4gbmFtZVswXTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgfQorCisgIEZUX0Vycm9yCisgIHBhcnNlX2FmbSggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAorICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgc3RyZWFtLAorICAgICAgICAgICAgIEFGTV9Gb250SW5mbyAgZmkgKQorICB7CisgICAgUFNBdXhfU2VydmljZSAgcHNhdXg7CisgICAgQUZNX1BhcnNlclJlYyAgcGFyc2VyOworICAgIEZUX0Vycm9yICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKUZUX0dldF9Nb2R1bGVfSW50ZXJmYWNlKCBsaWJyYXJ5LCAicHNhdXgiICk7CisgICAgaWYgKCAhcHNhdXggfHwgIXBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzICkKKyAgICAgIHJldHVybiAtMTsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX0VudGVyRnJhbWUoIHN0cmVhbSwgc3RyZWFtLT5zaXplICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBlcnJvciA9IHBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzLT5pbml0KCAmcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnktPm1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmxpbWl0ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBwYXJzZXIuRm9udEluZm8gPSBmaTsKKyAgICBwYXJzZXIuZ2V0X2luZGV4ID0gZHVtbXlfZ2V0X2luZGV4OworCisgICAgZXJyb3IgPSBwc2F1eC0+YWZtX3BhcnNlcl9mdW5jcy0+cGFyc2UoICZwYXJzZXIgKTsKKworICAgIHBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzLT5kb25lKCAmcGFyc2VyICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIGludCBtYWluKCBpbnQgICAgYXJnYywKKyAgICAgICAgICAgIGNoYXIqKiBhcmd2ICkKKyAgeworICAgIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeTsKKyAgICBGVF9TdHJlYW1SZWMgICAgIHN0cmVhbTsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEFGTV9Gb250SW5mb1JlYyAgZmk7CisKKworICAgIGlmICggYXJnYyA8IDIgKQorICAgICAgcmV0dXJuIEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZXJyb3IgPSBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgRlRfWkVSTyggJnN0cmVhbSApOworICAgIGVycm9yID0gRlRfU3RyZWFtX09wZW4oICZzdHJlYW0sIGFyZ3ZbMV0gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKyAgICBzdHJlYW0ubWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisgICAgRlRfWkVSTyggJmZpICk7CisgICAgZXJyb3IgPSBwYXJzZV9hZm0oIGxpYnJhcnksICZzdHJlYW0sICZmaSApOworCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OworCisKKyAgICAgIGR1bXBfZm9udGluZm8oICZmaSApOworCisgICAgICBpZiAoIGZpLktlcm5QYWlycyApCisgICAgICAgIEZUX0ZSRUUoIGZpLktlcm5QYWlycyApOworICAgICAgaWYgKCBmaS5UcmFja0tlcm5zICkKKyAgICAgICAgRlRfRlJFRSggZmkuVHJhY2tLZXJucyApOworICAgIH0KKyAgICBlbHNlCisgICAgICBwcmludGYoICJwYXJzZSBlcnJvclxuIiApOworCisgICAgRlRfU3RyZWFtX0Nsb3NlKCAmc3RyZWFtICk7CisKKyAgRXhpdDoKKyAgICBGVF9Eb25lX0ZyZWVUeXBlKCBsaWJyYXJ5ICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdG9vbHMvdGVzdF9iYm94LmMgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3Rlc3RfYmJveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjgyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3Rlc3RfYmJveC5jCkBAIC0wLDAgKzEsMTg4IEBACisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0JCT1hfSAorCisKKyNpbmNsdWRlIDx0aW1lLmg+ICAgIC8qIGZvciBjbG9jaygpICovCisKKy8qIFN1bk9TIDQuMS4qIGRvZXMgbm90IGRlZmluZSBDTE9DS1NfUEVSX1NFQywgc28gaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICovCisvKiB0byBnZXQgdGhlIEhaIG1hY3JvIHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmIGRlZmluZWQoX19zdW5fXykgJiYgIWRlZmluZWQoU1ZSNCkgJiYgIWRlZmluZWQoX19TVlI0KQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2RlZmluZSBDTE9DS1NfUEVSX1NFQyBIWgorI2VuZGlmCisKKyAgc3RhdGljIGxvbmcKKyAgZ2V0X3RpbWUoIHZvaWQgKQorICB7CisgICAgcmV0dXJuIGNsb2NrKCkgKiAxMDAwMEwgLyBDTE9DS1NfUEVSX1NFQzsKKyAgfQorCisKKworCisgIC8qIHRlc3QgYmJveCBjb21wdXRhdGlvbnMgKi8KKworI2RlZmluZSAgWFNDQUxFICAgIDY1NTM2CisjZGVmaW5lICBYWCh4KSAgICAgKChGVF9Qb3MpKHgqWFNDQUxFKSkKKyNkZWZpbmUgIFhWRUMoeCx5KSAgeyBYWCh4KSwgWFgoeSkgfQorI2RlZmluZSAgWFZBTCh4KSAgICgoeCkvKDEuMCpYU0NBTEUpKQorCisgIC8qIGR1bW15IG91dGxpbmUgIzEgKi8KKyAgc3RhdGljIEZUX1ZlY3RvciAgZHVtbXlfdmVjXzFbNF0gPQorICB7CisjaWYgMQorICAgIFhWRUMoIDQwOC45MTExLCA1MzUuMzE2NCApLAorICAgIFhWRUMoIDQ1NS44ODg3LCA2MzQuMzk2ICApLAorICAgIFhWRUMoIC0zNy44NzY1LCA3ODYuMjIwNyApLAorICAgIFhWRUMoIDE2NC42MDc0LCA1MzUuMzE2NCApCisjZWxzZQorICAgIHsgKEZUX0ludDMyKTB4MDE5OEU5M0RMICwgKEZUX0ludDMyKTB4MDIxNzUwRkZMIH0sICAvKiA0MDguOTExMSwgNTM1LjMxNjQgKi8KKyAgICB7IChGVF9JbnQzMikweDAxQzdFMzEyTCAsIChGVF9JbnQzMikweDAyN0E2NTYwTCB9LCAgLyogNDU1Ljg4ODcsIDYzNC4zOTYwICovCisgICAgeyAoRlRfSW50MzIpMHhGRkRBMUY5RUwgLCAoRlRfSW50MzIpMHgwMzEyMzg3RkwgfSwgIC8qIC0zNy44NzY1LCA3ODYuMjIwNyAqLworICAgIHsgKEZUX0ludDMyKTB4MDBBNDlCN0VMICwgKEZUX0ludDMyKTB4MDIxNzUwRkZMIH0gICAvKiAxNjQuNjA3NCwgNTM1LjMxNjQgKi8KKyNlbmRpZgorICAgfTsKKworICBzdGF0aWMgY2hhciAgZHVtbXlfdGFnXzFbNF0gPQorICB7CisgICAgRlRfQ1VSVkVfVEFHX09OLAorICAgIEZUX0NVUlZFX1RBR19DVUJJQywKKyAgICBGVF9DVVJWRV9UQUdfQ1VCSUMsCisgICAgRlRfQ1VSVkVfVEFHX09OCisgIH07CisKKyAgc3RhdGljIHNob3J0ICBkdW1teV9jb250b3VyXzFbMV0gPQorICB7CisgICAgMworICB9OworCisgIHN0YXRpYyBGVF9PdXRsaW5lICBkdW1teV9vdXRsaW5lXzEgPQorICB7CisgICAgMSwKKyAgICA0LAorICAgIGR1bW15X3ZlY18xLAorICAgIGR1bW15X3RhZ18xLAorICAgIGR1bW15X2NvbnRvdXJfMSwKKyAgICAwCisgIH07CisKKworICAvKiBkdW1teSBvdXRsaW5lICMyICovCisgIHN0YXRpYyBGVF9WZWN0b3IgIGR1bW15X3ZlY18yWzRdID0KKyAgeworICAgIFhWRUMoIDEwMC4wLCAxMDAuMCApLAorICAgIFhWRUMoIDEwMC4wLCAyMDAuMCApLAorICAgIFhWRUMoIDIwMC4wLCAyMDAuMCApLAorICAgIFhWRUMoIDIwMC4wLCAxMzMuMCApCisgIH07CisKKyAgc3RhdGljIEZUX091dGxpbmUgIGR1bW15X291dGxpbmVfMiA9CisgIHsKKyAgICAxLAorICAgIDQsCisgICAgZHVtbXlfdmVjXzIsCisgICAgZHVtbXlfdGFnXzEsCisgICAgZHVtbXlfY29udG91cl8xLAorICAgIDAKKyAgfTsKKworCisgIC8qIGR1bW15IG91dGxpbmUgIzMgd2l0aCBiYm94IG9mIFswIDEwMCAxMjggMTI4XSBwcmVjaXNlbHkgKi8KKyAgc3RhdGljIEZUX1ZlY3RvciAgZHVtbXlfdmVjXzNbNF0gPQorICB7CisgICAgWFZFQyggMTAwLjAsIDEyNy4wICksCisgICAgWFZFQyggMjAwLjAsIDEyNy4wICksCisgICAgWFZFQyggICAwLjAsIDEzNi4wICksCisgICAgWFZFQyggICAwLjAsIDEwMC4wICkKKyAgfTsKKworICBzdGF0aWMgRlRfT3V0bGluZSAgZHVtbXlfb3V0bGluZV8zID0KKyAgeworICAgIDEsCisgICAgNCwKKyAgICBkdW1teV92ZWNfMywKKyAgICBkdW1teV90YWdfMSwKKyAgICBkdW1teV9jb250b3VyXzEsCisgICAgMAorICB9OworCisKKyAgc3RhdGljIHZvaWQKKyAgZHVtcF9vdXRsaW5lKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApCisgIHsKKyAgICBGVF9CQm94ICBiYm94OworCisgICAgLyogY29tcHV0ZSBhbmQgZGlzcGxheSBjYm94ICovCisgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmJib3ggKTsKKyAgICBwcmludGYoICJjYm94ID0gWyUuMmYgJS4yZiAlLjJmICUuMmZdXG4iLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueE1pbiApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueU1pbiApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueE1heCApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueU1heCApICk7CisKKyAgICAvKiBjb21wdXRlIGFuZCBkaXNwbGF5IGJib3ggKi8KKyAgICBGVF9PdXRsaW5lX0dldF9CQm94KCBvdXRsaW5lLCAmYmJveCApOworICAgIHByaW50ZiggImJib3ggPSBbJS4yZiAlLjJmICUuMmYgJS4yZl1cbiIsCisgICAgICAgICAgICAgWFZBTCggYmJveC54TWluICksCisgICAgICAgICAgICAgWFZBTCggYmJveC55TWluICksCisgICAgICAgICAgICAgWFZBTCggYmJveC54TWF4ICksCisgICAgICAgICAgICAgWFZBTCggYmJveC55TWF4ICkgKTsKKyAgfQorCisKKworICBzdGF0aWMgdm9pZAorICBwcm9maWxlX291dGxpbmUoIEZUX091dGxpbmUqICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICBsb25nICAgICAgICAgIHJlcGVhdCApCisgIHsKKyAgICBGVF9CQm94ICBiYm94OworICAgIGxvbmcgICAgIGNvdW50OworICAgIGxvbmcgICAgIHRpbWUwOworCisgICAgdGltZTAgPSBnZXRfdGltZSgpOworICAgIGZvciAoIGNvdW50ID0gcmVwZWF0OyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmJib3ggKTsKKworICAgIHRpbWUwID0gZ2V0X3RpbWUoKSAtIHRpbWUwOworICAgIHByaW50ZiggInRpbWUgPSAlNi4zZiBjYm94ID0gWyU4LjRmICU4LjRmICU4LjRmICU4LjRmXVxuIiwKKyAgICAgICAgICAgICAoKGRvdWJsZSl0aW1lMC8xMDAwMC4wKSwKKyAgICAgICAgICAgICBYVkFMKCBiYm94LnhNaW4gKSwKKyAgICAgICAgICAgICBYVkFMKCBiYm94LnlNaW4gKSwKKyAgICAgICAgICAgICBYVkFMKCBiYm94LnhNYXggKSwKKyAgICAgICAgICAgICBYVkFMKCBiYm94LnlNYXggKSApOworICAgIHByaW50ZiggImNib3hfaGV4ID0gWyUwOFggJTA4WCAlMDhYICUwOFhdXG4iLAorICAgICAgICAgICAgIGJib3gueE1pbiwgYmJveC55TWluLCBiYm94LnhNYXgsIGJib3gueU1heCApOworCisKKyAgICB0aW1lMCA9IGdldF90aW1lKCk7CisgICAgZm9yICggY291bnQgPSByZXBlYXQ7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICBGVF9PdXRsaW5lX0dldF9CQm94KCBvdXRsaW5lLCAmYmJveCApOworCisgICAgdGltZTAgPSBnZXRfdGltZSgpIC0gdGltZTA7CisgICAgcHJpbnRmKCAidGltZSA9ICU2LjNmIGJib3ggPSBbJTguNGYgJTguNGYgJTguNGYgJTguNGZdXG4iLAorICAgICAgICAgICAgICgoZG91YmxlKXRpbWUwLzEwMDAwLjApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueE1pbiApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueU1pbiApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueE1heCApLAorICAgICAgICAgICAgIFhWQUwoIGJib3gueU1heCApICk7CisgICAgcHJpbnRmKCAiYmJveF9oZXggPSBbJTA4WCAlMDhYICUwOFggJTA4WF1cbiIsCisgICAgICAgICAgICAgYmJveC54TWluLCBiYm94LnlNaW4sIGJib3gueE1heCwgYmJveC55TWF4ICk7CisgIH0KKworI2RlZmluZSBSRVBFQVQgIDEwMDAwMDBMCisKKyAgaW50ICBtYWluKCBpbnQgIGFyZ2MsIGNoYXIqKiAgYXJndiApCisgIHsKKyAgICBwcmludGYoICJvdXRsaW5lICMxXG4iICk7CisgICAgcHJvZmlsZV9vdXRsaW5lKCAmZHVtbXlfb3V0bGluZV8xLCBSRVBFQVQgKTsKKworICAgIHByaW50ZiggIm91dGxpbmUgIzJcbiIgKTsKKyAgICBwcm9maWxlX291dGxpbmUoICZkdW1teV9vdXRsaW5lXzIsIFJFUEVBVCApOworCisgICAgcHJpbnRmKCAib3V0bGluZSAjM1xuIiApOworICAgIHByb2ZpbGVfb3V0bGluZSggJmR1bW15X291dGxpbmVfMywgUkVQRUFUICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3Rlc3RfdHJpZy5jIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy90ZXN0X3RyaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFjMWNmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy90ZXN0X3RyaWcuYwpAQCAtMCwwICsxLDI1OCBAQAorI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgIFBJICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgorI2RlZmluZSAgU1BJICAoUEkvRlRfQU5HTEVfUEkpCisKKy8qIHRoZSBwcmVjaXNpb24gaW4gMTYuMTYgZml4ZWQtcG9pbnQgY2hlY2tzLiBFeHBlY3QgYmV0d2VlbiAyIGFuZCA1ICovCisvKiBub2lzZSBMU0IgYml0cyBkdXJpbmcgb3BlcmF0aW9ucywgZHVlIHRvIHJvdW5kaW5nIGVycm9ycy4uICAgICAgICAqLworI2RlZmluZSAgVEhSRVNIT0xEICA2NAorCisgIHN0YXRpYyAgZXJyb3IgPSAwOworCisgIHN0YXRpYyB2b2lkCisgIHRlc3RfY29zKCB2b2lkICkKKyAgeworICAgIGludCAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBGVF9BTkdMRV8yUEk7IGkgKz0gMHgxMDAwMEwgKQorICAgIHsKKyAgICAgIEZUX0ZpeGVkICBmMSwgZjI7CisgICAgICBkb3VibGUgICAgZDI7CisKKworICAgICAgZjEgPSBGVF9Db3MoaSk7CisgICAgICBkMiA9IGNvcyggaSpTUEkgKTsKKyAgICAgIGYyID0gKEZUX0ZpeGVkKShkMio2NTUzNi4wKTsKKworICAgICAgaWYgKCBhYnMoIGYyLWYxICkgPiBUSFJFU0hPTEQgKQorICAgICAgeworICAgICAgICBlcnJvciA9IDE7CisgICAgICAgIHByaW50ZiggIkZUX0Nvc1slM2RdID0gJS43ZiAgY29zWyUzZF0gPSAlLjdmXG4iLAorICAgICAgICAgICAgICAgIChpID4+IDE2KSwgZjEvNjU1MzYuMCwgKGkgPj4gMTYpLCBkMiApOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdGVzdF9zaW4oIHZvaWQgKQorICB7CisgICAgaW50ICBpOworCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEZUX0FOR0xFXzJQSTsgaSArPSAweDEwMDAwTCApCisgICAgeworICAgICAgRlRfRml4ZWQgIGYxLCBmMjsKKyAgICAgIGRvdWJsZSAgICBkMjsKKworCisgICAgICBmMSA9IEZUX1NpbihpKTsKKyAgICAgIGQyID0gc2luKCBpKlNQSSApOworICAgICAgZjIgPSAoRlRfRml4ZWQpKGQyKjY1NTM2LjApOworCisgICAgICBpZiAoIGFicyggZjItZjEgKSA+IFRIUkVTSE9MRCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gMTsKKyAgICAgICAgcHJpbnRmKCAiRlRfU2luWyUzZF0gPSAlLjdmICBzaW5bJTNkXSA9ICUuN2ZcbiIsCisgICAgICAgICAgICAgICAgKGkgPj4gMTYpLCBmMS82NTUzNi4wLCAoaSA+PiAxNiksIGQyICk7CisgICAgICB9CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICB0ZXN0X3Rhbiggdm9pZCApCisgIHsKKyAgICBpbnQgIGk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgRlRfQU5HTEVfUEkyIC0gMHgyMDAwMDAwTDsgaSArPSAweDEwMDAwTCApCisgICAgeworICAgICAgRlRfRml4ZWQgIGYxLCBmMjsKKyAgICAgIGRvdWJsZSAgICBkMjsKKworCisgICAgICBmMSA9IEZUX1RhbihpKTsKKyAgICAgIGQyID0gdGFuKCBpKlNQSSApOworICAgICAgZjIgPSAoRlRfRml4ZWQpKGQyKjY1NTM2LjApOworCisgICAgICBpZiAoIGFicyggZjItZjEgKSA+IFRIUkVTSE9MRCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gMTsKKyAgICAgICAgcHJpbnRmKCAiRlRfVGFuWyUzZF0gPSAlLjdmICB0YW5bJTNkXSA9ICUuN2ZcbiIsCisgICAgICAgICAgICAgICAgKGkgPj4gMTYpLCBmMS82NTUzNi4wLCAoaSA+PiAxNiksIGQyICk7CisgICAgICB9CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICB0ZXN0X2F0YW4yKCB2b2lkICkKKyAgeworICAgIGludCAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBGVF9BTkdMRV8yUEk7IGkgKz0gMHgxMDAwMEwgKQorICAgIHsKKyAgICAgIEZUX0ZpeGVkICBjMiwgczI7CisgICAgICBkb3VibGUgICAgbCwgYSwgYzEsIHMxOworICAgICAgaW50ICAgICAgIGo7CisKKworICAgICAgbCAgPSA1LjA7CisgICAgICBhICA9IGkqU1BJOworCisgICAgICBjMSA9IGwgKiBjb3MoYSk7CisgICAgICBzMSA9IGwgKiBzaW4oYSk7CisKKyAgICAgIGMyID0gKEZUX0ZpeGVkKShjMSo2NTUzNi4wKTsKKyAgICAgIHMyID0gKEZUX0ZpeGVkKShzMSo2NTUzNi4wKTsKKworICAgICAgaiAgPSBGVF9BdGFuMiggYzIsIHMyICk7CisgICAgICBpZiAoIGogPCAwICkKKyAgICAgICAgaiArPSBGVF9BTkdMRV8yUEk7CisKKyAgICAgIGlmICggYWJzKCBpIC0gaiApID4gMSApCisgICAgICB7CisgICAgICAgIHByaW50ZiggIkZUX0F0YW4yKCAlLjdmLCAlLjdmICkgPSAlLjVmLCBhdGFuID0gJS41ZlxuIiwKKyAgICAgICAgICAgICAgICBjMi82NTUzNi4wLCBzMi82NTUzNi4wLCBqLzY1NTM2LjAsIGkvNjU1MzYuMCApOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdGVzdF91bml0KCB2b2lkICkKKyAgeworICAgIGludCAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBGVF9BTkdMRV8yUEk7IGkgKz0gMHgxMDAwMEwgKQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciAgdjsKKyAgICAgIGRvdWJsZSAgICAgYSwgYzEsIHMxOworICAgICAgRlRfRml4ZWQgICBjMiwgczI7CisKKworICAgICAgRlRfVmVjdG9yX1VuaXQoICZ2LCBpICk7CisgICAgICBhICA9ICggaSpTUEkgKTsKKyAgICAgIGMxID0gY29zKGEpOworICAgICAgczEgPSBzaW4oYSk7CisgICAgICBjMiA9IChGVF9GaXhlZCkoYzEqNjU1MzYuMCk7CisgICAgICBzMiA9IChGVF9GaXhlZCkoczEqNjU1MzYuMCk7CisKKyAgICAgIGlmICggYWJzKCB2LngtYzIgKSA+IFRIUkVTSE9MRCB8fAorICAgICAgICAgICBhYnMoIHYueS1zMiApID4gVEhSRVNIT0xEICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSAxOworICAgICAgICBwcmludGYoICJGVF9WZWN0b3JfVW5pdFslM2RdID0gKCAlLjdmLCAlLjdmICkgIHZlYyA9ICggJS43ZiwgJS43ZiApXG4iLAorICAgICAgICAgICAgICAgIChpID4+IDE2KSwKKyAgICAgICAgICAgICAgICB2LngvNjU1MzYuMCwgdi55LzY1NTM2LjAsCisgICAgICAgICAgICAgICAgYzEsIHMxICk7CisgICAgICB9CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICB0ZXN0X2xlbmd0aCggdm9pZCApCisgIHsKKyAgICBpbnQgIGk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgRlRfQU5HTEVfMlBJOyBpICs9IDB4MTAwMDBMICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IgIHY7CisgICAgICBGVF9GaXhlZCAgIGwsIGwyOworCisKKyAgICAgIGwgICA9IChGVF9GaXhlZCkoNTAwLjAqNjU1MzYuMCk7CisgICAgICB2LnggPSAoRlRfRml4ZWQpKCBsICogY29zKCBpKlNQSSApICk7CisgICAgICB2LnkgPSAoRlRfRml4ZWQpKCBsICogc2luKCBpKlNQSSApICk7CisgICAgICBsMiAgPSBGVF9WZWN0b3JfTGVuZ3RoKCAmdiApOworCisgICAgICBpZiAoIGFicyggbDItbCApID4gVEhSRVNIT0xEICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSAxOworICAgICAgICBwcmludGYoICJGVF9MZW5ndGgoICUuN2YsICUuN2YgKSA9ICUuNWYsIGxlbmd0aCA9ICUuNWZcbiIsCisgICAgICAgICAgICAgICAgdi54LzY1NTM2LjAsIHYueS82NTUzNi4wLCBsMi82NTUzNi4wLCBsLzY1NTM2LjAgKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHRlc3Rfcm90YXRlKCB2b2lkICkKKyAgeworICAgIGludCAgcm90YXRlOworCisKKyAgICBmb3IgKCByb3RhdGUgPSAwOyByb3RhdGUgPCBGVF9BTkdMRV8yUEk7IHJvdGF0ZSArPSAweDEwMDAwTCApCisgICAgeworICAgICAgZG91YmxlICByYSwgY3JhLCBzcmE7CisgICAgICBpbnQgICAgIGk7CisKKworICAgICAgcmEgID0gcm90YXRlKlNQSTsKKyAgICAgIGNyYSA9IGNvcyggcmEgKTsKKyAgICAgIHNyYSA9IHNpbiggcmEgKTsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBGVF9BTkdMRV8yUEk7IGkgKz0gMHgxMDAwMEwgKQorICAgICAgeworICAgICAgICBGVF9GaXhlZCAgIGMyLCBzMiwgYzQsIHM0OworICAgICAgICBGVF9WZWN0b3IgIHY7CisgICAgICAgIGRvdWJsZSAgICAgbCwgYSwgYzEsIHMxLCBjMywgczM7CisKKworICAgICAgICBsICA9IDUwMC4wOworICAgICAgICBhICA9IGkqU1BJOworCisgICAgICAgIGMxID0gbCAqIGNvcyhhKTsKKyAgICAgICAgczEgPSBsICogc2luKGEpOworCisgICAgICAgIHYueCA9IGMyID0gKEZUX0ZpeGVkKShjMSo2NTUzNi4wKTsKKyAgICAgICAgdi55ID0gczIgPSAoRlRfRml4ZWQpKHMxKjY1NTM2LjApOworCisgICAgICAgIEZUX1ZlY3Rvcl9Sb3RhdGUoICZ2LCByb3RhdGUgKTsKKworICAgICAgICBjMyA9IGMxICogY3JhIC0gczEgKiBzcmE7CisgICAgICAgIHMzID0gYzEgKiBzcmEgKyBzMSAqIGNyYTsKKworICAgICAgICBjNCA9IChGVF9GaXhlZCkoYzMqNjU1MzYuMCk7CisgICAgICAgIHM0ID0gKEZUX0ZpeGVkKShzMyo2NTUzNi4wKTsKKworICAgICAgICBpZiAoIGFicyggYzQgLSB2LnggKSA+IFRIUkVTSE9MRCB8fAorICAgICAgICAgICAgIGFicyggczQgLSB2LnkgKSA+IFRIUkVTSE9MRCApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IDE7CisgICAgICAgICAgcHJpbnRmKCAiRlRfUm90YXRlKCAoJS43ZiwlLjdmKSwgJS41ZiApID0gKCAlLjdmLCAlLjdmICksIHJvdCA9ICggJS43ZiwgJS43ZiApXG4iLAorICAgICAgICAgICAgICAgICAgYzEsIHMxLCByYSwKKyAgICAgICAgICAgICAgICAgIGMyLzY1NTM2LjAsIHMyLzY1NTM2LjAsCisgICAgICAgICAgICAgICAgICBjNC82NTUzNi4wLCBzNC82NTUzNi4wICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIGludCBtYWluKCB2b2lkICkKKyAgeworICAgIHRlc3RfY29zKCk7CisgICAgdGVzdF9zaW4oKTsKKyAgICB0ZXN0X3RhbigpOworICAgIHRlc3RfYXRhbjIoKTsKKyAgICB0ZXN0X3VuaXQoKTsKKyAgICB0ZXN0X2xlbmd0aCgpOworICAgIHRlc3Rfcm90YXRlKCk7CisKKyAgICBpZiAoIWVycm9yKQorICAgICAgcHJpbnRmKCAidHJpZ29ub21ldHJ5IHRlc3Qgb2sgIVxuIiApOworCisgICAgcmV0dXJuICFlcnJvcjsKKyAgfQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0IGIvZnJlZXR5cGUtMi42L3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhOGJmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisKKyMgUnVuIHRoZSBgdXBkYXRlLWNvcHlyaWdodC15ZWFyJyBzY3JpcHQgb24gYWxsIGZpbGVzIGluIHRoZSBnaXQgcmVwb3NpdG9yeSwKKyMgdGFraW5nIGNhcmUgb2YgZXhjZXB0aW9ucyBzdG9yZWQgaW4gZmlsZSBgbm8tY29weXJpZ2h0Jy4KKwordG9wZGlyPWBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbGAKK3Rvb2xzZGlyPSR0b3BkaXIvc3JjL3Rvb2xzCisKK2dpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAkdG9wZGlyICAgICAgICBcCit8IHNlZCAnc3xefC4uLy4uL3wnICAgICAgICAgICAgICAgICAgICAgXAorfCBncmVwIC12RmYgJHRvb2xzZGlyL25vLWNvcHlyaWdodCAgICAgIFwKK3wgeGFyZ3MgJHRvb2xzZGlyL3VwZGF0ZS1jb3B5cmlnaHQteWVhcgorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0LXllYXIgYi9mcmVldHlwZS0yLjYvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQteWVhcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDc3NTQxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0LXllYXIKQEAgLTAsMCArMSwxMzUgQEAKK2V2YWwgJyhleGl0ICQ/MCknICYmIGV2YWwgJ2V4ZWMgcGVybCAtd1MgLWkgIiQwIiAkezErIiRAIn0nCisgICYgZXZhbCAnZXhlYyBwZXJsIC13UyAtaSAiJDAiICRhcmd2OnEnCisgICAgaWYgMDsKKworIyBDb3B5cmlnaHQgMjAxNSBieQorIyBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworIyBbTm90ZTogVGhpcyBzY3JpcHQgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZSBzaGVsbCwgd2hpY2ggaW4gdHVybgorIyAgY2FsbHMgcGVybCBhdXRvbWF0aWNhbGx5LiAgVGhlIG5pZnR5IHN0YXJ0LXVwIGNvZGUgYWJvdmUgaXMgYmFzZWQgb24KKyMgIGdudWxpYidzIGB1cGRhdGUtY29weXJpZ2h0JyBzY3JpcHQ7IGl0IGlzIGEgbW9yZSBwb3J0YWJsZSByZXBsYWNlbWVudCBmb3IKKyMgIHRoZSBzaGViYW5nLCB1c2luZyB0aGUgZmlyc3QgYHBlcmwnIHByb2dyYW0gaW4gdGhlIHNoZWxsJ3MgcGF0aCBpbnN0ZWFkLl0KKworIyBVc2FnZToKKyMKKyMgICB1cGRhdGUtY29weXJpZ2h0LXllYXIgZmlsZTEgW2ZpbGUyIC4uLl0KKworCisjIFRoaXMgc2NyaXB0IGhhbmRsZXMgY29weXJpZ2h0IGVudHJpZXMgbGlrZQorIworIyAgIENvcHlyaWdodCAgMjAwMCAgIGJ5CisjICAgZm9vYmFyCisjCisjIG9yCisjCisjICAgLyogQ29weXJpZ2h0IDIwMDAsICAyMDAxLCAyMDA0LTIwMDcgYnkgICAgKi8KKyMgICAvKiBmb29iYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIworIyBhbmQgcmVwbGFjZXMgdGhlbSB1bmlmb3JtbHkgd2l0aAorIworIyAgIENvcHlyaWdodCAyMDAwLTIwMTUKKyMgICBmb29iYXIKKyMKKyMgYW5kCisjCisjICAgLyogQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgKi8KKyMgICAvKiBmb29iYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIworIyAoYXNzdW1pbmcgdGhhdCB0aGUgY3VycmVudCB5ZWFyIGlzIDIwMTUpLiAgQXMgY2FuIGJlIHNlZW4sIHRoZSBsaW5lIGxlbmd0aAorIyBpcyByZXRhaW5lZCBpZiB0aGVyZSBpcyBub24td2hpdGVzcGFjZSBhZnRlciB0aGUgd29yZCBgYnknIG9uIHRoZSBzYW1lCisjIGxpbmUuCisKK3VzZSBzdHJpY3Q7CisKKworbXkgKHVuZGVmLCB1bmRlZiwgdW5kZWYsCisgICAgdW5kZWYsIHVuZGVmLCAkeWVhciwKKyAgICB1bmRlZiwgdW5kZWYsIHVuZGVmKSA9IGxvY2FsdGltZSh0aW1lKTsKKyR5ZWFyICs9IDE5MDA7CisKK215ICRyZXBsYWNlZCA9IDA7CisKKworIyBMb29wIG92ZXIgYWxsIGlucHV0IGZpbGVzOyBvcHRpb24gYC1pJyAoaXNzdWVkIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZgorIyB0aGlzIHNjcmlwdCkgbWFrZXMgcGVybCBlZGl0IHRoZW0gaW4tcGxhY2UuCit3aGlsZSAoPD4pCit7CisgICMgT25seSBoYW5kbGUgdGhlIGZpcnN0IGNvcHlyaWdodCBub3RpY2UgaW4gYSBmaWxlLgorICBpZiAoISRyZXBsYWNlZCkKKyAgeworICAgICMgRmlyc3QgdHJ5OiBTZWFyY2ggbXVsdGlwbGUgY29weXJpZ2h0IHllYXJzLgorICAgIHMgeworICAgICAgICAoPzxiZWdpbj4uKikKKyAgICAgICAgQ29weXJpZ2h0CisgICAgICAgICg/PHNwYWNlMT5cICspCisgICAgICAgICg/PGZpcnN0PlsxMl1bMC05XVswLTldWzAtOV0pCisgICAgICAgICg/PG1pZGRsZT4uKykKKyAgICAgICAgKD88bGFzdD5bMTJdWzAtOV1bMC05XVswLTldKQorICAgICAgICAoPzxzcGFjZTI+XCArKQorICAgICAgICBieQorICAgICAgICAoPzxzcGFjZTM+XCAqKQorICAgICAgICAoPzxlbmQ+LiopCisgICAgICB9CisgICAgICB7CisgICAgICAgICMgRmlsbCBsaW5lIHRvIHRoZSBzYW1lIGxlbmd0aCAoaWYgYXBwcm9wcmlhdGUpOyB3ZSBza2lwIHRoZSBtaWRkbGUKKyAgICAgICAgIyBwYXJ0IGJ1dCBpbnNlcnQgdHdvIHNwYWNlcyBhbmQgYC0nLgorICAgICAgICBteSAkc3BhY2UgPSBsZW5ndGgoJCt7c3BhY2UxfSkgLSAxCisgICAgICAgICAgICAgICAgICAgICsgbGVuZ3RoKCQre21pZGRsZX0pIC0gMQorICAgICAgICAgICAgICAgICAgICArIGxlbmd0aCgkK3tzcGFjZTJ9KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgKyBsZW5ndGgoJCt7c3BhY2UzfSk7CisKKyAgICAgICAgcHJpbnQgIiQre2JlZ2lufSI7CisgICAgICAgIHByaW50ICJDb3B5cmlnaHRcICQre2ZpcnN0fS0keWVhclwgYnkiOworICAgICAgICBwcmludCAnICcgeCAkc3BhY2UgaWYgbGVuZ3RoKCQre2VuZH0pOworICAgICAgICBwcmludCAiJCt7ZW5kfVxuIjsKKyAgICAgICAgJHJlcGxhY2VkID0gMTsKKyAgICAgIH1leAorICAgIHx8CisgICAgIyBTZWNvbmQgdHJ5OiBTZWFyY2ggYSBzaW5nbGUgY29weXJpZ2h0IHllYXIuCisgICAgcyB7CisgICAgICAgICg/PGJlZ2luPi4qKQorICAgICAgICBDb3B5cmlnaHQKKyAgICAgICAgKD88c3BhY2UxPlwgKykKKyAgICAgICAgKD88Zmlyc3Q+WzEyXVswLTldWzAtOV1bMC05XSkKKyAgICAgICAgKD88c3BhY2UyPlwgKykKKyAgICAgICAgYnkKKyAgICAgICAgKD88c3BhY2UzPlwgKikKKyAgICAgICAgKD88ZW5kPi4qKQorICAgICAgfQorICAgICAgeworICAgICAgICAjIEZpbGwgbGluZSB0byB0aGUgc2FtZSBsZW5ndGggKGlmIGFwcHJvcHJpYXRlKTsgd2UgaW5zZXJ0IHR3bworICAgICAgICAjIHNwYWNlcywgYSBgLScsIGFuZCB0aGUgY3VycmVudCB5ZWFyLgorICAgICAgICBteSAkc3BhY2UgPSBsZW5ndGgoJCt7c3BhY2UxfSkgLSAxCisgICAgICAgICAgICAgICAgICAgICsgbGVuZ3RoKCQre3NwYWNlMn0pIC0gMQorICAgICAgICAgICAgICAgICAgICArIGxlbmd0aCgkK3tzcGFjZTN9KQorICAgICAgICAgICAgICAgICAgICAtIChsZW5ndGgoJHllYXIpICsgMSk7CisKKyAgICAgICAgcHJpbnQgIiQre2JlZ2lufSI7CisgICAgICAgIHByaW50ICJDb3B5cmlnaHQgJCt7Zmlyc3R9LSR5ZWFyIGJ5IjsKKyAgICAgICAgIyBJZiAkc3BhY2UgaXMgbmVnYXRpdmUgdGhpcyBpbnNlcnRzIG5vdGhpbmcuCisgICAgICAgIHByaW50ICcgJyB4ICRzcGFjZSBpZiBsZW5ndGgoJCt7ZW5kfSk7CisgICAgICAgIHByaW50ICIkK3tlbmR9XG4iOworICAgICAgICAkcmVwbGFjZWQgPSAxOworICAgICAgfWV4CisgICAgfHwKKyAgICAjIE90aGVyd2lzZSBwcmludCBsaW5lIHVuYWx0ZXJlZC4KKyAgICBwcmludDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBwcmludDsKKyAgfQorfQorY29udGludWUKK3sKKyAgIyBSZXNldCAkcmVwbGFjZWQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG5leHQgZmlsZS4KKyAgJHJlcGxhY2VkID0gMCBpZiBlb2Y7Cit9CisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNjBhZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQpAQCAtMCwwICsxLDI5IEBACisjIEZyZWVUeXBlIDIgc3JjL3RydWV0eXBlIEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSB0cnVldHlwZSA7CisKK3sKKyAgbG9jYWwgIF9zb3VyY2VzIDsKKworICBpZiAkKEZUMl9NVUxUSSkKKyAgeworICAgIF9zb3VyY2VzID0gdHRkcml2ZXIgdHRvYmpzIHR0cGxvYWQgdHRnbG9hZCB0dGludGVycCB0dGd4dmFyIHR0cGljIDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBfc291cmNlcyA9IHRydWV0eXBlIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL3RydWV0eXBlIEphbWZpbGUKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkYzZmYQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgRnJlZVR5cGUgMiBUcnVlVHlwZSBtb2R1bGUgZGVmaW5pdGlvbgorIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworRlRNT0RVTEVfSF9DT01NQU5EUyArPSBUUlVFVFlQRV9EUklWRVIKKworZGVmaW5lIFRSVUVUWVBFX0RSSVZFUgorJChPUEVOX0RSSVZFUikgRlRfRHJpdmVyX0NsYXNzUmVjLCB0dF9kcml2ZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXRydWV0eXBlICAkKEVDSE9fRFJJVkVSX0RFU0MpV2luZG93cy9NYWMgZm9udCBmaWxlcyB3aXRoIGV4dGVuc2lvbiAqLnR0ZiBvciAqLnR0YyQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGIxNmJhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS9ydWxlcy5tawpAQCAtMCwwICsxLDc3IEBACisjCisjIEZyZWVUeXBlIDIgVHJ1ZVR5cGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgVHJ1ZVR5cGUgZHJpdmVyIGRpcmVjdG9yeQorIworVFRfRElSIDo9ICQoU1JDX0RJUikvdHJ1ZXR5cGUKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitUVF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoVFRfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgVHJ1ZVR5cGUgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCisjCitUVF9EUlZfU1JDIDo9ICQoVFRfRElSKS90dGRyaXZlci5jIFwKKyAgICAgICAgICAgICAgJChUVF9ESVIpL3R0Z2xvYWQuYyAgXAorICAgICAgICAgICAgICAkKFRUX0RJUikvdHRneHZhci5jICBcCisgICAgICAgICAgICAgICQoVFRfRElSKS90dGludGVycC5jIFwKKyAgICAgICAgICAgICAgJChUVF9ESVIpL3R0b2Jqcy5jICAgXAorICAgICAgICAgICAgICAkKFRUX0RJUikvdHRwaWMuYyAgICBcCisgICAgICAgICAgICAgICQoVFRfRElSKS90dHBsb2FkLmMgIFwKKyAgICAgICAgICAgICAgJChUVF9ESVIpL3R0c3VicGl4LmMKKworIyBUcnVlVHlwZSBkcml2ZXIgaGVhZGVycworIworVFRfRFJWX0ggOj0gJChUVF9EUlZfU1JDOiUuYz0lLmgpIFwKKyAgICAgICAgICAgICQoVFRfRElSKS90dGVycm9ycy5oCisKKworIyBUcnVlVHlwZSBkcml2ZXIgb2JqZWN0KHMpCisjCisjICAgVFRfRFJWX09CSl9NIGlzIHVzZWQgZHVyaW5nIGBtdWx0aScgYnVpbGRzCisjICAgVFRfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcworIworVFRfRFJWX09CSl9NIDo9ICQoVFRfRFJWX1NSQzokKFRUX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK1RUX0RSVl9PQkpfUyA6PSAkKE9CSl9ESVIpL3RydWV0eXBlLiRPCisKKyMgVHJ1ZVR5cGUgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK1RUX0RSVl9TUkNfUyA6PSAkKFRUX0RJUikvdHJ1ZXR5cGUuYworCisKKyMgVHJ1ZVR5cGUgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChUVF9EUlZfT0JKX1MpOiAkKFRUX0RSVl9TUkNfUykgJChUVF9EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoVFRfRFJWX0gpCisJJChUVF9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChUVF9EUlZfU1JDX1MpKQorCisKKyMgZHJpdmVyIC0gbXVsdGlwbGUgb2JqZWN0cworIworJChPQkpfRElSKS8lLiRPOiAkKFRUX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChUVF9EUlZfSCkKKwkkKFRUX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkPCkKKworCisjIHVwZGF0ZSBtYWluIGRyaXZlciBvYmplY3QgbGlzdHMKKyMKK0RSVl9PQkpTX1MgKz0gJChUVF9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoVFRfRFJWX09CSl9NKQorCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyOTQzNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwpAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0cnVldHlwZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgVHJ1ZVR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAorCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJ0dHBpYy5jIgorI2luY2x1ZGUgInR0ZHJpdmVyLmMiICAgLyogZHJpdmVyIGludGVyZmFjZSAgICAqLworI2luY2x1ZGUgInR0cGxvYWQuYyIgICAgLyogdGFibGVzIGxvYWRlciAgICAgICAqLworI2luY2x1ZGUgInR0Z2xvYWQuYyIgICAgLyogZ2x5cGggbG9hZGVyICAgICAgICAqLworI2luY2x1ZGUgInR0b2Jqcy5jIiAgICAgLyogb2JqZWN0IG1hbmFnZXIgICAgICAqLworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisjaW5jbHVkZSAidHRpbnRlcnAuYyIKKyNpbmNsdWRlICJ0dHN1YnBpeC5jIgorI2VuZGlmCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisjaW5jbHVkZSAidHRneHZhci5jIiAgICAvKiBneCBkaXN0b3J0YWJsZSBmb250ICovCisjZW5kaWYKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGIzMGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGRyaXZlci5jCkBAIC0wLDAgKzEsNTY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGRyaXZlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICisjZW5kaWYKKworI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9FTkdJTkVfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSAorCisjaW5jbHVkZSAidHRkcml2ZXIuaCIKKyNpbmNsdWRlICJ0dGdsb2FkLmgiCisjaW5jbHVkZSAidHRwbG9hZC5oIgorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgInR0Z3h2YXIuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidHRlcnJvcnMuaCIKKworI2luY2x1ZGUgInR0cGljLmgiCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRkcml2ZXIKKworCisgIC8qCisgICAqICBQUk9QRVJUWSBTRVJWSUNFCisgICAqCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIFRUX0RyaXZlciAqLworICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpbW9kdWxlOworCisKKyAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJpbnRlcnByZXRlci12ZXJzaW9uIiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IChGVF9VSW50Kil2YWx1ZTsKKworCisjaWZuZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgICAgaWYgKCAqaW50ZXJwcmV0ZXJfdmVyc2lvbiAhPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICkKKyAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9ICppbnRlcnByZXRlcl92ZXJzaW9uOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgRlRfVFJBQ0UwKCggInR0X3Byb3BlcnR5X3NldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAorICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX1Byb3BlcnR5ICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9wcm9wZXJ0eV9nZXQoIEZUX01vZHVsZSAgICBtb2R1bGUsICAgICAgICAgLyogVFRfRHJpdmVyICovCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlciltb2R1bGU7CisKKyAgICBGVF9VSW50ICBpbnRlcnByZXRlcl92ZXJzaW9uID0gZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uOworCisKKyAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJpbnRlcnByZXRlci12ZXJzaW9uIiApICkKKyAgICB7CisgICAgICBGVF9VSW50KiAgdmFsID0gKEZUX1VJbnQqKXZhbHVlOworCisKKyAgICAgICp2YWwgPSBpbnRlcnByZXRlcl92ZXJzaW9uOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgRlRfVFJBQ0UwKCggInR0X3Byb3BlcnR5X2dldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAorICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX1Byb3BlcnR5ICk7CisgIH0KKworCisgIEZUX0RFRklORV9TRVJWSUNFX1BST1BFUlRJRVNSRUMoCisgICAgdHRfc2VydmljZV9wcm9wZXJ0aWVzLAorICAgIChGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMpdHRfcHJvcGVydHlfc2V0LAorICAgIChGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMpdHRfcHJvcGVydHlfZ2V0ICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEYgQSBDIEUgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2dldF9rZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIHJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gICAgICAqLworICAvKiAgICBnbHlwaHMgb2YgdGhlIHNhbWUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAga2VybmluZyAgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBpbiBmb250IHVuaXRzIGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNjYWxhYmxlIGZvcm1hdHMsIGFuZCBpbiBwaXhlbHMgZm9yIGZpeGVkLXNpemVzICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZSAgICAgICAgKi8KKyAgLyogICAgc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICovCisgIC8qICAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHNjb3BlIG9mIHRoaXMgbWV0aG9kICh0aGUgYmFzaWMgZHJpdmVyICAgICAgICAqLworICAvKiAgICBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gYmUgc2ltcGxlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIHR0X2dldF9rZXJuaW5nKCBGVF9GYWNlICAgICB0dGZhY2UsICAgICAgICAgIC8qIFRUX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGtlcm5pbmcgKQorICB7CisgICAgVFRfRmFjZSAgICAgICBmYWNlID0gKFRUX0ZhY2UpdHRmYWNlOworICAgIFNGTlRfU2VydmljZSAgc2ZudCA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKKworCisgICAga2VybmluZy0+eCA9IDA7CisgICAga2VybmluZy0+eSA9IDA7CisKKyAgICBpZiAoIHNmbnQgKQorICAgICAga2VybmluZy0+eCA9IHNmbnQtPmdldF9rZXJuaW5nKCBmYWNlLCBsZWZ0X2dseXBoLCByaWdodF9nbHlwaCApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9nZXRfYWR2YW5jZXMoIEZUX0ZhY2UgICAgdHRmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqYWR2YW5jZXMgKQorICB7CisgICAgRlRfVUludCAgbm47CisgICAgVFRfRmFjZSAgZmFjZSAgPSAoVFRfRmFjZSkgdHRmYWNlOworCisKKyAgICAvKiBYWFg6IFRPRE86IGNoZWNrIGZvciBzYml0cyAqLworCisgICAgaWYgKCBmbGFncyAmIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICkKKyAgICB7CisgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgY291bnQ7IG5uKysgKQorICAgICAgeworICAgICAgICBGVF9TaG9ydCAgIHRzYjsKKyAgICAgICAgRlRfVVNob3J0ICBhaDsKKworCisgICAgICAgIC8qIHNpbmNlIHdlIGRvbid0IG5lZWQgYHRzYicsIHdlIHVzZSB6ZXJvIGZvciBgeU1heCcgcGFyYW1ldGVyICovCisgICAgICAgIFRUX0dldF9WTWV0cmljcyggZmFjZSwgc3RhcnQgKyBubiwgMCwgJnRzYiwgJmFoICk7CisgICAgICAgIGFkdmFuY2VzW25uXSA9IGFoOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZm9yICggbm4gPSAwOyBubiA8IGNvdW50OyBubisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfU2hvcnQgICBsc2I7CisgICAgICAgIEZUX1VTaG9ydCAgYXc7CisKKworICAgICAgICBUVF9HZXRfSE1ldHJpY3MoIGZhY2UsIHN0YXJ0ICsgbm4sICZsc2IsICZhdyApOworICAgICAgICBhZHZhbmNlc1tubl0gPSBhdzsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgSSBaIEUgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfc2l6ZV9zZWxlY3QoIEZUX1NpemUgICBzaXplLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHN0cmlrZV9pbmRleCApCisgIHsKKyAgICBUVF9GYWNlICAgdHRmYWNlID0gKFRUX0ZhY2Upc2l6ZS0+ZmFjZTsKKyAgICBUVF9TaXplICAgdHRzaXplID0gKFRUX1NpemUpc2l6ZTsKKyAgICBGVF9FcnJvciAgZXJyb3IgID0gRlRfRXJyX09rOworCisKKyAgICB0dHNpemUtPnN0cmlrZV9pbmRleCA9IHN0cmlrZV9pbmRleDsKKworICAgIGlmICggRlRfSVNfU0NBTEFCTEUoIHNpemUtPmZhY2UgKSApCisgICAgeworICAgICAgLyogdXNlIHRoZSBzY2FsZWQgbWV0cmljcywgZXZlbiB3aGVuIHR0X3NpemVfcmVzZXQgZmFpbHMgKi8KKyAgICAgIEZUX1NlbGVjdF9NZXRyaWNzKCBzaXplLT5mYWNlLCBzdHJpa2VfaW5kZXggKTsKKworICAgICAgdHRfc2l6ZV9yZXNldCggdHRzaXplICk7IC8qIGlnbm9yZSByZXR1cm4gdmFsdWUgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFNGTlRfU2VydmljZSAgICAgIHNmbnQgICAgPSAoU0ZOVF9TZXJ2aWNlKSB0dGZhY2UtPnNmbnQ7CisgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzID0gJnNpemUtPm1ldHJpY3M7CisKKworICAgICAgZXJyb3IgPSBzZm50LT5sb2FkX3N0cmlrZV9tZXRyaWNzKCB0dGZhY2UsIHN0cmlrZV9pbmRleCwgbWV0cmljcyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHR0c2l6ZS0+c3RyaWtlX2luZGV4ID0gMHhGRkZGRkZGRlVMOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfc2l6ZV9yZXF1ZXN0KCBGVF9TaXplICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgVFRfU2l6ZSAgIHR0c2l6ZSA9IChUVF9TaXplKXNpemU7CisgICAgRlRfRXJyb3IgIGVycm9yICA9IEZUX0Vycl9PazsKKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisKKyAgICBpZiAoIEZUX0hBU19GSVhFRF9TSVpFUyggc2l6ZS0+ZmFjZSApICkKKyAgICB7CisgICAgICBUVF9GYWNlICAgICAgIHR0ZmFjZSA9IChUVF9GYWNlKXNpemUtPmZhY2U7CisgICAgICBTRk5UX1NlcnZpY2UgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpIHR0ZmFjZS0+c2ZudDsKKyAgICAgIEZUX1VMb25nICAgICAgc3RyaWtlX2luZGV4OworCisKKyAgICAgIGVycm9yID0gc2ZudC0+c2V0X3NiaXRfc3RyaWtlKCB0dGZhY2UsIHJlcSwgJnN0cmlrZV9pbmRleCApOworCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgdHRzaXplLT5zdHJpa2VfaW5kZXggPSAweEZGRkZGRkZGVUw7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiB0dF9zaXplX3NlbGVjdCggc2l6ZSwgc3RyaWtlX2luZGV4ICk7CisgICAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKyAgICBGVF9SZXF1ZXN0X01ldHJpY3MoIHNpemUtPmZhY2UsIHJlcSApOworCisgICAgaWYgKCBGVF9JU19TQ0FMQUJMRSggc2l6ZS0+ZmFjZSApICkKKyAgICB7CisgICAgICBlcnJvciA9IHR0X3NpemVfcmVzZXQoIHR0c2l6ZSApOworICAgICAgdHRzaXplLT5yb290Lm1ldHJpY3MgPSB0dHNpemUtPm1ldHJpY3M7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9nbHlwaF9sb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byBsb2FkIGEgZ2x5cGggd2l0aGluIGEgZ2l2ZW4gZ2x5cGggc2xvdC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzbG90ICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNsb3Qgb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgd2lsbCBiZSBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugc2l6ZSBhdCB3aGljaCB0aGUgZ2x5cGggKi8KKyAgLyogICAgICAgICAgICAgICAgICAgbXVzdCBiZSBzY2FsZWQsIGxvYWRlZCwgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGdseXBoIGluIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZSAqLworICAvKiAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1hYWCBjb25zdGFudHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9nbHlwaF9sb2FkKCBGVF9HbHlwaFNsb3QgIHR0c2xvdCwgICAgICAvKiBUVF9HbHlwaFNsb3QgKi8KKyAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICB0dHNpemUsICAgICAgLyogVFRfU2l6ZSAgICAgICovCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApCisgIHsKKyAgICBUVF9HbHlwaFNsb3QgIHNsb3QgPSAoVFRfR2x5cGhTbG90KXR0c2xvdDsKKyAgICBUVF9TaXplICAgICAgIHNpemUgPSAoVFRfU2l6ZSl0dHNpemU7CisgICAgRlRfRmFjZSAgICAgICBmYWNlID0gdHRzbG90LT5mYWNlOworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisKKworICAgIGlmICggIXNsb3QgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1Nsb3RfSGFuZGxlICk7CisKKyAgICBpZiAoICFzaXplICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TaXplX0hhbmRsZSApOworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgJiYKKyAgICAgICAgICFmYWNlLT5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICAgKQorI2Vsc2UKKyAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorI2VuZGlmCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fSElOVElORyApCisgICAgeworICAgICAgLyogYm90aCBGVF9MT0FEX05PX0hJTlRJTkcgYW5kIEZUX0xPQURfTk9fQVVUT0hJTlQgICAqLworICAgICAgLyogYXJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIGhpbnRpbmcgZm9yIHRyaWNreSBmb250cyAqLworCisgICAgICBpZiAoIEZUX0lTX1RSSUNLWSggZmFjZSApICkKKyAgICAgICAgbG9hZF9mbGFncyAmPSB+RlRfTE9BRF9OT19ISU5USU5HOworCisgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0FVVE9ISU5UICkKKyAgICAgICAgbG9hZF9mbGFncyB8PSBGVF9MT0FEX05PX0hJTlRJTkc7CisgICAgfQorCisgICAgaWYgKCBsb2FkX2ZsYWdzICYgKCBGVF9MT0FEX05PX1JFQ1VSU0UgfCBGVF9MT0FEX05PX1NDQUxFICkgKQorICAgIHsKKyAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19CSVRNQVAgfCBGVF9MT0FEX05PX1NDQUxFOworCisgICAgICBpZiAoICFGVF9JU19UUklDS1koIGZhY2UgKSApCisgICAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19ISU5USU5HOworICAgIH0KKworICAgIC8qIG5vdyBsb2FkIHRoZSBnbHlwaCBvdXRsaW5lIGlmIG5lY2Vzc2FyeSAqLworICAgIGVycm9yID0gVFRfTG9hZF9HbHlwaCggc2l6ZSwgc2xvdCwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKworICAgIC8qIGZvcmNlIGRyb3Atb3V0IG1vZGUgdG8gMiAtIGlycmVsZXZhbnQgbm93ICovCisgICAgLyogc2xvdC0+b3V0bGluZS5kcm9wb3V0X21vZGUgPSAyOyAqLworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqICAgICAgICAgICAgICAgIEQgUiBJIFYgRSBSICBJIE4gVCBFIFIgRiBBIEMgRSAgICAgICAgICAgICAgICAgICAqKioqLworICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KKyAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgIEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQygKKyAgICB0dF9zZXJ2aWNlX2d4X211bHRpX21hc3RlcnMsCisgICAgKEZUX0dldF9NTV9GdW5jKSAgICAgICAgTlVMTCwKKyAgICAoRlRfU2V0X01NX0Rlc2lnbl9GdW5jKSBOVUxMLAorICAgIChGVF9TZXRfTU1fQmxlbmRfRnVuYykgIFRUX1NldF9NTV9CbGVuZCwKKyAgICAoRlRfR2V0X01NX1Zhcl9GdW5jKSAgICBUVF9HZXRfTU1fVmFyLAorICAgIChGVF9TZXRfVmFyX0Rlc2lnbl9GdW5jKVRUX1NldF9WYXJfRGVzaWduICkKKyNlbmRpZgorCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1RydWVUeXBlRW5naW5lUmVjICB0dF9zZXJ2aWNlX3RydWV0eXBlX2VuZ2luZSA9CisgIHsKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfVU5QQVRFTlRFRAorI2Vsc2UKKyAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRAorI2VuZGlmCisKKyNlbHNlIC8qICFUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX05PTkUKKworI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworICB9OworCisgIEZUX0RFRklORV9TRVJWSUNFX1RUR0xZRlJFQygKKyAgICB0dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYsCisgICAgKFRUX0dseWZfR2V0TG9jYXRpb25GdW5jKXR0X2ZhY2VfZ2V0X2xvY2F0aW9uICkKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNSgKKyAgICB0dF9zZXJ2aWNlcywKKyAgICBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFULCAgICAgRlRfRk9OVF9GT1JNQVRfVFJVRVRZUEUsCisgICAgRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTLCAgICZUVF9TRVJWSUNFX0dYX01VTFRJX01BU1RFUlNfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfVFJVRVRZUEVfRU5HSU5FLCAmdHRfc2VydmljZV90cnVldHlwZV9lbmdpbmUsCisgICAgRlRfU0VSVklDRV9JRF9UVF9HTFlGLCAgICAgICAgICZUVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAmVFRfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCApCisjZWxzZQorICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0KAorICAgIHR0X3NlcnZpY2VzLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICBGVF9GT05UX0ZPUk1BVF9UUlVFVFlQRSwKKyAgICBGVF9TRVJWSUNFX0lEX1RSVUVUWVBFX0VOR0lORSwgJnR0X3NlcnZpY2VfdHJ1ZXR5cGVfZW5naW5lLAorICAgIEZUX1NFUlZJQ0VfSURfVFRfR0xZRiwgICAgICAgICAmVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgJlRUX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgKQorI2VuZGlmCisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX01vZHVsZV9JbnRlcmZhY2UgKQorICB0dF9nZXRfaW50ZXJmYWNlKCBGVF9Nb2R1bGUgICAgZHJpdmVyLCAgICAvKiBUVF9Ecml2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHR0X2ludGVyZmFjZSApCisgIHsKKyAgICBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5OworICAgIEZUX01vZHVsZV9JbnRlcmZhY2UgIHJlc3VsdDsKKyAgICBGVF9Nb2R1bGUgICAgICAgICAgICBzZm50ZDsKKyAgICBTRk5UX1NlcnZpY2UgICAgICAgICBzZm50OworCisKKyAgICAvKiBUVF9TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgaWYgKCAhZHJpdmVyICkKKyAgICAgIHJldHVybiBOVUxMOworICAgIGxpYnJhcnkgPSBkcml2ZXItPmxpYnJhcnk7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCisgICAgcmVzdWx0ID0gZnRfc2VydmljZV9saXN0X2xvb2t1cCggVFRfU0VSVklDRVNfR0VULCB0dF9pbnRlcmZhY2UgKTsKKyAgICBpZiAoIHJlc3VsdCAhPSBOVUxMICkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKyAgICBpZiAoICFkcml2ZXIgKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgbGlicmFyeSA9IGRyaXZlci0+bGlicmFyeTsKKyAgICBpZiAoICFsaWJyYXJ5ICkKKyAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisKKyAgICAvKiBvbmx5IHJldHVybiB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgZnJvbSB0aGUgU0ZOVCBtb2R1bGUgKi8KKyAgICBzZm50ZCA9IEZUX0dldF9Nb2R1bGUoIGxpYnJhcnksICJzZm50IiApOworICAgIGlmICggc2ZudGQgKQorICAgIHsKKyAgICAgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKSggc2ZudGQtPmNsYXp6LT5tb2R1bGVfaW50ZXJmYWNlICk7CisgICAgICBpZiAoIHNmbnQgKQorICAgICAgICByZXR1cm4gc2ZudC0+Z2V0X2ludGVyZmFjZSggZHJpdmVyLCB0dF9pbnRlcmZhY2UgKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyogVGhlIEZUX0RyaXZlckludGVyZmFjZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBmdGRyaXZlci5oLiAqLworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisjZGVmaW5lIFRUX0hJTlRFUl9GTEFHICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIKKyNlbHNlCisjZGVmaW5lIFRUX0hJTlRFUl9GTEFHICAwCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUworI2RlZmluZSBUVF9TSVpFX1NFTEVDVCAgdHRfc2l6ZV9zZWxlY3QKKyNlbHNlCisjZGVmaW5lIFRUX1NJWkVfU0VMRUNUICAwCisjZW5kaWYKKworICBGVF9ERUZJTkVfRFJJVkVSKAorICAgIHR0X2RyaXZlcl9jbGFzcywKKworICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICB8CisgICAgICBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFIHwKKyAgICAgIFRUX0hJTlRFUl9GTEFHLAorCisgICAgICBzaXplb2YgKCBUVF9Ecml2ZXJSZWMgKSwKKworICAgICAgInRydWV0eXBlIiwgICAgICAvKiBkcml2ZXIgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAweDEwMDAwTCwgICAgICAgIC8qIGRyaXZlciB2ZXJzaW9uID09IDEuMCAgICAgICAgICAgICAgICAgKi8KKyAgICAgIDB4MjAwMDBMLCAgICAgICAgLyogZHJpdmVyIHJlcXVpcmVzIEZyZWVUeXBlIDIuMCBvciBhYm92ZSAqLworCisgICAgICAodm9pZCopMCwgICAgICAgIC8qIGRyaXZlciBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKworICAgICAgdHRfZHJpdmVyX2luaXQsCisgICAgICB0dF9kcml2ZXJfZG9uZSwKKyAgICAgIHR0X2dldF9pbnRlcmZhY2UsCisKKyAgICBzaXplb2YgKCBUVF9GYWNlUmVjICksCisgICAgc2l6ZW9mICggVFRfU2l6ZVJlYyApLAorICAgIHNpemVvZiAoIEZUX0dseXBoU2xvdFJlYyApLAorCisgICAgdHRfZmFjZV9pbml0LAorICAgIHR0X2ZhY2VfZG9uZSwKKyAgICB0dF9zaXplX2luaXQsCisgICAgdHRfc2l6ZV9kb25lLAorICAgIHR0X3Nsb3RfaW5pdCwKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRlRfU2xvdF9Eb25lRnVuYyAqLworCisgICAgdHRfZ2x5cGhfbG9hZCwKKworICAgIHR0X2dldF9rZXJuaW5nLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0F0dGFjaEZ1bmMgKi8KKyAgICB0dF9nZXRfYWR2YW5jZXMsCisKKyAgICB0dF9zaXplX3JlcXVlc3QsCisgICAgVFRfU0laRV9TRUxFQ1QKKyAgKQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGRyaXZlci5oIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGRyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWNkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRkcml2ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhpZ2gtbGV2ZWwgVHJ1ZVR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFREUklWRVJfSF9fCisjZGVmaW5lIF9fVFREUklWRVJfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfREVDTEFSRV9EUklWRVIoIHR0X2RyaXZlcl9jbGFzcyApCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVERSSVZFUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTMyY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGVycm9ycy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0ZXJyb3JzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgVHJ1ZVR5cGUgZXJyb3IgZW51bWVyYXRpb24gICAgICAgICAgICAqLworICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fVFRFUlJPUlNfSF9fCisjZGVmaW5lIF9fVFRFUlJPUlNfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFRUX0Vycl8KKyNkZWZpbmUgRlRfRVJSX0JBU0UgICAgRlRfTW9kX0Vycl9UcnVlVHlwZQorCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisjZW5kaWYgLyogX19UVEVSUk9SU19IX18gKi8KKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYWNkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYwpAQCAtMCwwICsxLDI1ODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0Z2xvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSAorCisjaW5jbHVkZSAidHRnbG9hZC5oIgorI2luY2x1ZGUgInR0cGxvYWQuaCIKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyNpbmNsdWRlICJ0dGd4dmFyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInR0ZXJyb3JzLmgiCisjaW5jbHVkZSAidHRzdWJwaXguaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Z2xvYWQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ29tcG9zaXRlIGdseXBoIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBUkdTX0FSRV9XT1JEUyAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQVJHU19BUkVfWFlfVkFMVUVTICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFJPVU5EX1hZX1RPX0dSSUQgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXRV9IQVZFX0FfU0NBTEUgICAgICAgICAgICAweDAwMDgKKy8qIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICovCisjZGVmaW5lIE1PUkVfQ09NUE9ORU5UUyAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXRV9IQVZFX0FOX1hZX1NDQUxFICAgICAgICAweDAwNDAKKyNkZWZpbmUgV0VfSEFWRV9BXzJYMiAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdFX0hBVkVfSU5TVFIgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBVU0VfTVlfTUVUUklDUyAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgT1ZFUkxBUF9DT01QT1VORCAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFNDQUxFRF9DT01QT05FTlRfT0ZGU0VUICAgIDB4MDgwMAorI2RlZmluZSBVTlNDQUxFRF9DT01QT05FTlRfT0ZGU0VUICAweDEwMDAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUmV0dXJuIHRoZSBob3Jpem9udGFsIG1ldHJpY3MgaW4gZm9udCB1bml0cyBmb3IgYSBnaXZlbiBnbHlwaC4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUVF9HZXRfSE1ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgIGxzYiwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBhdyApCisgIHsKKyAgICAoIChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggZmFjZSwgMCwgaWR4LCBsc2IsIGF3ICk7CisKKyAgICBGVF9UUkFDRTUoKCAiICBhZHZhbmNlIHdpZHRoIChmb250IHVuaXRzKTogJWRcbiIsICphdyApKTsKKyAgICBGVF9UUkFDRTUoKCAiICBsZWZ0IHNpZGUgYmVhcmluZyAoZm9udCB1bml0cyk6ICVkXG4iLCAqbHNiICkpOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJldHVybiB0aGUgdmVydGljYWwgbWV0cmljcyBpbiBmb250IHVuaXRzIGZvciBhIGdpdmVuIGdseXBoLiAgICAgICAgICAqLworICAvKiBTZWUgbWFjcm8gYFRUX0xPQURFUl9TRVRfUFAnIGJlbG93IGZvciBleHBsYW5hdGlvbnMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIFRUX0dldF9WTWV0cmljcyggVFRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeU1heCwKKyAgICAgICAgICAgICAgICAgICBGVF9TaG9ydCogICB0c2IsCisgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0KiAgYWggKQorICB7CisgICAgaWYgKCBmYWNlLT52ZXJ0aWNhbF9pbmZvICkKKyAgICAgICggKFNGTlRfU2VydmljZSlmYWNlLT5zZm50ICktPmdldF9tZXRyaWNzKCBmYWNlLCAxLCBpZHgsIHRzYiwgYWggKTsKKworICAgIGVsc2UgaWYgKCBmYWNlLT5vczIudmVyc2lvbiAhPSAweEZGRkZVICkKKyAgICB7CisgICAgICAqdHNiID0gKEZUX1Nob3J0KSggZmFjZS0+b3MyLnNUeXBvQXNjZW5kZXIgLSB5TWF4ICk7CisgICAgICAqYWggID0gKEZUX1VTaG9ydClGVF9BQlMoIGZhY2UtPm9zMi5zVHlwb0FzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+b3MyLnNUeXBvRGVzY2VuZGVyICk7CisgICAgfQorCisgICAgZWxzZQorICAgIHsKKyAgICAgICp0c2IgPSAoRlRfU2hvcnQpKCBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyIC0geU1heCApOworICAgICAgKmFoICA9IChGVF9VU2hvcnQpRlRfQUJTKCBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aG9yaXpvbnRhbC5EZXNjZW5kZXIgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiICBhZHZhbmNlIGhlaWdodCAoZm9udCB1bml0cyk6ICVkXG4iLCAqYWggKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgdG9wIHNpZGUgYmVhcmluZyAoZm9udCB1bml0cyk6ICVkXG4iLCAqdHNiICkpOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfZ2V0X21ldHJpY3MoIFRUX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApCisgIHsKKyAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKKyNlbmRpZgorCisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGxvYWRlci0+c3RyZWFtOworCisgICAgRlRfU2hvcnQgICBsZWZ0X2JlYXJpbmcgPSAwLCB0b3BfYmVhcmluZyA9IDA7CisgICAgRlRfVVNob3J0ICBhZHZhbmNlX3dpZHRoID0gMCwgYWR2YW5jZV9oZWlnaHQgPSAwOworCisgICAgLyogd2UgbXVzdCBwcmVzZXJ2ZSB0aGUgc3RyZWFtIHBvc2l0aW9uICAgICAgICAgICovCisgICAgLyogKHdoaWNoIGdldHMgYWx0ZXJlZCBieSB0aGUgbWV0cmljcyBmdW5jdGlvbnMpICovCisgICAgRlRfVUxvbmcgIHBvcyA9IEZUX1NUUkVBTV9QT1MoKTsKKworCisgICAgVFRfR2V0X0hNZXRyaWNzKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICZsZWZ0X2JlYXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZV93aWR0aCApOworICAgIFRUX0dldF9WTWV0cmljcyggZmFjZSwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmJib3gueU1heCwKKyAgICAgICAgICAgICAgICAgICAgICZ0b3BfYmVhcmluZywKKyAgICAgICAgICAgICAgICAgICAgICZhZHZhbmNlX2hlaWdodCApOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggcG9zICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgbG9hZGVyLT5sZWZ0X2JlYXJpbmcgPSBsZWZ0X2JlYXJpbmc7CisgICAgbG9hZGVyLT5hZHZhbmNlICAgICAgPSBhZHZhbmNlX3dpZHRoOworICAgIGxvYWRlci0+dG9wX2JlYXJpbmcgID0gdG9wX2JlYXJpbmc7CisgICAgbG9hZGVyLT52YWR2YW5jZSAgICAgPSBhZHZhbmNlX2hlaWdodDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggJiYKKyAgICAgICAgIGxvYWRlci0+ZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICB7CisgICAgICBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyA9IDA7CisKKyAgICAgIC8qIFRoaXMgbWF5IG5vdCBiZSB0aGUgcmlnaHQgcGxhY2UgZm9yIHRoaXMsIGJ1dCBpdCB3b3Jrcy4uLiAgKi8KKyAgICAgIC8qIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHVuY29uZGl0aW9uYWxseSBsb2FkIHRoZSB0d2Vha3Mgc2luY2UgKi8KKyAgICAgIC8qIGl0IGlzIHBvc3NpYmxlIHRoYXQgZ2x5cGhzIGluZGl2aWR1YWxseSBzd2l0Y2ggQ2xlYXJUeXBlJ3MgKi8KKyAgICAgIC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUgb24gYW5kIG9mZi4gICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHNwaF9zZXRfdHdlYWtzKCBsb2FkZXIsIGdseXBoX2luZGV4ICk7CisgICAgfQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgaWYgKCAhbG9hZGVyLT5saW5lYXJfZGVmICkKKyAgICB7CisgICAgICBsb2FkZXItPmxpbmVhcl9kZWYgPSAxOworICAgICAgbG9hZGVyLT5saW5lYXIgICAgID0gYWR2YW5jZV93aWR0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKworICBzdGF0aWMgdm9pZAorICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggVFRfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4ICkKKyAgeworICAgIFRUX0ZhY2UgIGZhY2UgPSAoVFRfRmFjZSlsb2FkZXItPmZhY2U7CisKKyAgICBGVF9TaG9ydCAgIGxlZnRfYmVhcmluZyA9IDAsIHRvcF9iZWFyaW5nID0gMDsKKyAgICBGVF9VU2hvcnQgIGFkdmFuY2Vfd2lkdGggPSAwLCBhZHZhbmNlX2hlaWdodCA9IDA7CisKKworICAgIC8qIElmIHRoaXMgaXMgYW4gaW5jcmVtZW50YWxseSBsb2FkZWQgZm9udCBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSAqLworICAgIC8qIG92ZXJyaWRpbmcgbWV0cmljcyBmb3IgdGhpcyBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzICkKKyAgICB7CisgICAgICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjICBtZXRyaWNzOworICAgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgZXJyb3I7CisKKworICAgICAgbWV0cmljcy5iZWFyaW5nX3ggPSBsb2FkZXItPmxlZnRfYmVhcmluZzsKKyAgICAgIG1ldHJpY3MuYmVhcmluZ195ID0gMDsKKyAgICAgIG1ldHJpY3MuYWR2YW5jZSAgID0gbG9hZGVyLT5hZHZhbmNlOworICAgICAgbWV0cmljcy5hZHZhbmNlX3YgPSAwOworCisgICAgICBlcnJvciA9IGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzKAorICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LAorICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBGQUxTRSwgJm1ldHJpY3MgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGxlZnRfYmVhcmluZyAgPSAoRlRfU2hvcnQpbWV0cmljcy5iZWFyaW5nX3g7CisgICAgICBhZHZhbmNlX3dpZHRoID0gKEZUX1VTaG9ydCltZXRyaWNzLmFkdmFuY2U7CisKKyNpZiAwCisKKyAgICAgIC8qIEdXVzogRG8gSSBkbyB0aGUgc2FtZSBmb3IgdmVydGljYWwgbWV0cmljcz8gKi8KKyAgICAgIG1ldHJpY3MuYmVhcmluZ194ID0gMDsKKyAgICAgIG1ldHJpY3MuYmVhcmluZ195ID0gbG9hZGVyLT50b3BfYmVhcmluZzsKKyAgICAgIG1ldHJpY3MuYWR2YW5jZSAgID0gbG9hZGVyLT52YWR2YW5jZTsKKworICAgICAgZXJyb3IgPSBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT5nZXRfZ2x5cGhfbWV0cmljcygKKyAgICAgICAgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPm9iamVjdCwKKyAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgVFJVRSwgJm1ldHJpY3MgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHRvcF9iZWFyaW5nICAgID0gKEZUX1Nob3J0KW1ldHJpY3MuYmVhcmluZ195OworICAgICAgYWR2YW5jZV9oZWlnaHQgPSAoRlRfVVNob3J0KW1ldHJpY3MuYWR2YW5jZTsKKworI2VuZGlmIC8qIDAgKi8KKworICAgICAgbG9hZGVyLT5sZWZ0X2JlYXJpbmcgPSBsZWZ0X2JlYXJpbmc7CisgICAgICBsb2FkZXItPmFkdmFuY2UgICAgICA9IGFkdmFuY2Vfd2lkdGg7CisgICAgICBsb2FkZXItPnRvcF9iZWFyaW5nICA9IHRvcF9iZWFyaW5nOworICAgICAgbG9hZGVyLT52YWR2YW5jZSAgICAgPSBhZHZhbmNlX2hlaWdodDsKKworICAgICAgaWYgKCAhbG9hZGVyLT5saW5lYXJfZGVmICkKKyAgICAgIHsKKyAgICAgICAgbG9hZGVyLT5saW5lYXJfZGVmID0gMTsKKyAgICAgICAgbG9hZGVyLT5saW5lYXIgICAgID0gYWR2YW5jZV93aWR0aDsKKyAgICAgIH0KKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm47CisgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVHJhbnNsYXRlcyBhbiBhcnJheSBvZiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICB0cmFuc2xhdGVfYXJyYXkoIEZUX1VJbnQgICAgIG4sCisgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29vcmRzLAorICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIGRlbHRhX3gsCisgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgZGVsdGFfeSApCisgIHsKKyAgICBGVF9VSW50ICBrOworCisKKyAgICBpZiAoIGRlbHRhX3ggKQorICAgICAgZm9yICggayA9IDA7IGsgPCBuOyBrKysgKQorICAgICAgICBjb29yZHNba10ueCArPSBkZWx0YV94OworCisgICAgaWYgKCBkZWx0YV95ICkKKyAgICAgIGZvciAoIGsgPSAwOyBrIDwgbjsgaysrICkKKyAgICAgICAgY29vcmRzW2tdLnkgKz0gZGVsdGFfeTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBkZWZhdWx0IHdpdGggVHJ1ZVR5cGUgZm9udHMuICAgICAgKi8KKyAgLyogSG93ZXZlciwgdGhleSBjYW4gYmUgcmVwbGFjZWQgYnkgYWx0ZXJuYXRpdmVzIGlmIHdlIG5lZWQgdG8gc3VwcG9ydCAgICovCisgIC8qIFRydWVUeXBlLWNvbXByZXNzZWQgZm9ybWF0cyAobGlrZSBNaWNyb1R5cGUpIGluIHRoZSBmdXR1cmUuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIFRUX0FjY2Vzc19HbHlwaF9GcmFtZSggVFRfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGJ5dGVfY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGxvYWRlci0+c3RyZWFtOworCisgICAgLyogZm9yIG5vbi1kZWJ1ZyBtb2RlICovCisgICAgRlRfVU5VU0VEKCBnbHlwaF9pbmRleCApOworCisKKyAgICBGVF9UUkFDRTQoKCAiR2x5cGggJWxkXG4iLCBnbHlwaF9pbmRleCApKTsKKworICAgIC8qIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIHRoZSBgZXJyb3InIHZhcmlhYmxlIHRocm91Z2ggbWFjcm9zISAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApIHx8IEZUX0ZSQU1FX0VOVEVSKCBieXRlX2NvdW50ICkgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgbG9hZGVyLT5jdXJzb3IgPSBzdHJlYW0tPmN1cnNvcjsKKyAgICBsb2FkZXItPmxpbWl0ICA9IHN0cmVhbS0+bGltaXQ7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICBUVF9Gb3JnZXRfR2x5cGhfRnJhbWUoIFRUX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gbG9hZGVyLT5zdHJlYW07CisKKworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIFRUX0xvYWRfR2x5cGhfSGVhZGVyKCBUVF9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBGVF9CeXRlKiAgcCAgICAgPSBsb2FkZXItPmN1cnNvcjsKKyAgICBGVF9CeXRlKiAgbGltaXQgPSBsb2FkZXItPmxpbWl0OworCisKKyAgICBpZiAoIHAgKyAxMCA+IGxpbWl0ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisKKyAgICBsb2FkZXItPm5fY29udG91cnMgPSBGVF9ORVhUX1NIT1JUKCBwICk7CisKKyAgICBsb2FkZXItPmJib3gueE1pbiA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICBsb2FkZXItPmJib3gueU1pbiA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICBsb2FkZXItPmJib3gueE1heCA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICBsb2FkZXItPmJib3gueU1heCA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKworICAgIEZUX1RSQUNFNSgoICIgICMgb2YgY29udG91cnM6ICVkXG4iLCBsb2FkZXItPm5fY29udG91cnMgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgeE1pbjogJTRkICB4TWF4OiAlNGRcbiIsIGxvYWRlci0+YmJveC54TWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmJib3gueE1heCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICB5TWluOiAlNGQgIHlNYXg6ICU0ZFxuIiwgbG9hZGVyLT5iYm94LnlNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+YmJveC55TWF4ICkpOworICAgIGxvYWRlci0+Y3Vyc29yID0gcDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBUVF9Mb2FkX1NpbXBsZV9HbHlwaCggVFRfTG9hZGVyICBsb2FkICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKyAgICBGVF9CeXRlKiAgICAgICAgcCAgICAgICAgICA9IGxvYWQtPmN1cnNvcjsKKyAgICBGVF9CeXRlKiAgICAgICAgbGltaXQgICAgICA9IGxvYWQtPmxpbWl0OworICAgIEZUX0dseXBoTG9hZGVyICBnbG9hZGVyICAgID0gbG9hZC0+Z2xvYWRlcjsKKyAgICBGVF9JbnQgICAgICAgICAgbl9jb250b3VycyA9IGxvYWQtPm5fY29udG91cnM7CisgICAgRlRfT3V0bGluZSogICAgIG91dGxpbmU7CisgICAgRlRfVVNob3J0ICAgICAgIG5faW5zOworICAgIEZUX0ludCAgICAgICAgICBuX3BvaW50czsKKyAgICBGVF9VTG9uZyAgICAgICAgdG1wOworCisgICAgRlRfQnl0ZSAgICAgICAgICpmbGFnLCAqZmxhZ19saW1pdDsKKyAgICBGVF9CeXRlICAgICAgICAgYywgY291bnQ7CisgICAgRlRfVmVjdG9yICAgICAgICp2ZWMsICp2ZWNfbGltaXQ7CisgICAgRlRfUG9zICAgICAgICAgIHg7CisgICAgRlRfU2hvcnQgICAgICAgICpjb250LCAqY29udF9saW1pdCwgcHJldl9jb250OworICAgIEZUX0ludCAgICAgICAgICB4eV9zaXplID0gMDsKKworCisgICAgLyogY2hlY2sgdGhhdCB3ZSBjYW4gYWRkIHRoZSBjb250b3VycyB0byB0aGUgZ2x5cGggKi8KKyAgICBlcnJvciA9IEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggZ2xvYWRlciwgMCwgbl9jb250b3VycyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogcmVhZGluZyB0aGUgY29udG91cnMnIGVuZHBvaW50cyAmIG51bWJlciBvZiBwb2ludHMgKi8KKyAgICBjb250ICAgICAgID0gZ2xvYWRlci0+Y3VycmVudC5vdXRsaW5lLmNvbnRvdXJzOworICAgIGNvbnRfbGltaXQgPSBjb250ICsgbl9jb250b3VyczsKKworICAgIC8qIGNoZWNrIHNwYWNlIGZvciBjb250b3VycyBhcnJheSArIGluc3RydWN0aW9ucyBjb3VudCAqLworICAgIGlmICggbl9jb250b3VycyA+PSAweEZGRiB8fCBwICsgKCBuX2NvbnRvdXJzICsgMSApICogMiA+IGxpbWl0ICkKKyAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgcHJldl9jb250ID0gRlRfTkVYVF9TSE9SVCggcCApOworCisgICAgaWYgKCBuX2NvbnRvdXJzID4gMCApCisgICAgICBjb250WzBdID0gcHJldl9jb250OworCisgICAgaWYgKCBwcmV2X2NvbnQgPCAwICkKKyAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgZm9yICggY29udCsrOyBjb250IDwgY29udF9saW1pdDsgY29udCsrICkKKyAgICB7CisgICAgICBjb250WzBdID0gRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgaWYgKCBjb250WzBdIDw9IHByZXZfY29udCApCisgICAgICB7CisgICAgICAgIC8qIHVub3JkZXJlZCBjb250b3VyczogdGhpcyBpcyBpbnZhbGlkICovCisgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworICAgICAgfQorICAgICAgcHJldl9jb250ID0gY29udFswXTsKKyAgICB9CisKKyAgICBuX3BvaW50cyA9IDA7CisgICAgaWYgKCBuX2NvbnRvdXJzID4gMCApCisgICAgeworICAgICAgbl9wb2ludHMgPSBjb250Wy0xXSArIDE7CisgICAgICBpZiAoIG5fcG9pbnRzIDwgMCApCisgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworICAgIH0KKworICAgIC8qIG5vdGUgdGhhdCB3ZSB3aWxsIGFkZCBmb3VyIHBoYW50b20gcG9pbnRzIGxhdGVyICovCisgICAgZXJyb3IgPSBGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMoIGdsb2FkZXIsIG5fcG9pbnRzICsgNCwgMCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgLyogcmVhZGluZyB0aGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zICovCisgICAgbG9hZC0+Z2x5cGgtPmNvbnRyb2xfbGVuICA9IDA7CisgICAgbG9hZC0+Z2x5cGgtPmNvbnRyb2xfZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoIHAgKyAyID4gbGltaXQgKQorICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICBuX2lucyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICBGVF9UUkFDRTUoKCAiICBJbnN0cnVjdGlvbnMgc2l6ZTogJXVcbiIsIG5faW5zICkpOworCisgICAgLyogY2hlY2sgaXQgKi8KKyAgICBpZiAoICggbGltaXQgLSBwICkgPCBuX2lucyApCisgICAgeworICAgICAgRlRfVFJBQ0UwKCggIlRUX0xvYWRfU2ltcGxlX0dseXBoOiBpbnN0cnVjdGlvbiBjb3VudCBtaXNtYXRjaFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0hpbnRzICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgICBpZiAoIElTX0hJTlRFRCggbG9hZC0+bG9hZF9mbGFncyApICkKKyAgICB7CisgICAgICAvKiB3ZSBkb24ndCB0cnVzdCBgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zJyBpbiB0aGUgYG1heHAnIHRhYmxlICovCisgICAgICAvKiBhbmQgdGh1cyB1cGRhdGUgdGhlIGJ5dGVjb2RlIGFycmF5IHNpemUgYnkgb3Vyc2VsdmVzICAgICAgICovCisKKyAgICAgIHRtcCAgID0gbG9hZC0+ZXhlYy0+Z2x5cGhTaXplOworICAgICAgZXJyb3IgPSBVcGRhdGVfTWF4KCBsb2FkLT5leGVjLT5tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZUX0J5dGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSZsb2FkLT5leGVjLT5nbHlwaElucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbl9pbnMgKTsKKworICAgICAgbG9hZC0+ZXhlYy0+Z2x5cGhTaXplID0gKEZUX1VTaG9ydCl0bXA7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBsb2FkLT5nbHlwaC0+Y29udHJvbF9sZW4gID0gbl9pbnM7CisgICAgICBsb2FkLT5nbHlwaC0+Y29udHJvbF9kYXRhID0gbG9hZC0+ZXhlYy0+Z2x5cGhJbnM7CisKKyAgICAgIEZUX01FTV9DT1BZKCBsb2FkLT5leGVjLT5nbHlwaElucywgcCwgKEZUX0xvbmcpbl9pbnMgKTsKKyAgICB9CisKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgIHAgKz0gbl9pbnM7CisKKyAgICBvdXRsaW5lID0gJmdsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKKworICAgIC8qIHJlYWRpbmcgdGhlIHBvaW50IHRhZ3MgKi8KKyAgICBmbGFnICAgICAgID0gKEZUX0J5dGUqKW91dGxpbmUtPnRhZ3M7CisgICAgZmxhZ19saW1pdCA9IGZsYWcgKyBuX3BvaW50czsKKworICAgIEZUX0FTU0VSVCggZmxhZyAhPSBOVUxMICk7CisKKyAgICB3aGlsZSAoIGZsYWcgPCBmbGFnX2xpbWl0ICkKKyAgICB7CisgICAgICBpZiAoIHAgKyAxID4gbGltaXQgKQorICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgKmZsYWcrKyA9IGMgPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgIGlmICggYyAmIDggKQorICAgICAgeworICAgICAgICBpZiAoIHAgKyAxID4gbGltaXQgKQorICAgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAgIGNvdW50ID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICAgIGlmICggZmxhZyArIChGVF9JbnQpY291bnQgPiBmbGFnX2xpbWl0ICkKKyAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICAgICAgKmZsYWcrKyA9IGM7CisgICAgICB9CisgICAgfQorCisgICAgLyogcmVhZGluZyB0aGUgWCBjb29yZGluYXRlcyAqLworCisgICAgdmVjICAgICAgID0gb3V0bGluZS0+cG9pbnRzOworICAgIHZlY19saW1pdCA9IHZlYyArIG5fcG9pbnRzOworICAgIGZsYWcgICAgICA9IChGVF9CeXRlKilvdXRsaW5lLT50YWdzOworICAgIHggICAgICAgICA9IDA7CisKKyAgICBpZiAoIHAgKyB4eV9zaXplID4gbGltaXQgKQorICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICBmb3IgKCA7IHZlYyA8IHZlY19saW1pdDsgdmVjKyssIGZsYWcrKyApCisgICAgeworICAgICAgRlRfUG9zICAgeSA9IDA7CisgICAgICBGVF9CeXRlICBmID0gKmZsYWc7CisKKworICAgICAgaWYgKCBmICYgMiApCisgICAgICB7CisgICAgICAgIGlmICggcCArIDEgPiBsaW1pdCApCisgICAgICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICAgICAgeSA9IChGVF9Qb3MpRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICAgIGlmICggKCBmICYgMTYgKSA9PSAwICkKKyAgICAgICAgICB5ID0gLXk7CisgICAgICB9CisgICAgICBlbHNlIGlmICggKCBmICYgMTYgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBwICsgMiA+IGxpbWl0ICkKKyAgICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKKworICAgICAgICB5ID0gKEZUX1BvcylGVF9ORVhUX1NIT1JUKCBwICk7CisgICAgICB9CisKKyAgICAgIHggICAgICs9IHk7CisgICAgICB2ZWMtPnggPSB4OworICAgICAgLyogdGhlIGNhc3QgaXMgZm9yIHN0dXBpZCBjb21waWxlcnMgKi8KKyAgICAgICpmbGFnICA9IChGVF9CeXRlKSggZiAmIH4oIDIgfCAxNiApICk7CisgICAgfQorCisgICAgLyogcmVhZGluZyB0aGUgWSBjb29yZGluYXRlcyAqLworCisgICAgdmVjICAgICAgID0gZ2xvYWRlci0+Y3VycmVudC5vdXRsaW5lLnBvaW50czsKKyAgICB2ZWNfbGltaXQgPSB2ZWMgKyBuX3BvaW50czsKKyAgICBmbGFnICAgICAgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFnczsKKyAgICB4ICAgICAgICAgPSAwOworCisgICAgZm9yICggOyB2ZWMgPCB2ZWNfbGltaXQ7IHZlYysrLCBmbGFnKysgKQorICAgIHsKKyAgICAgIEZUX1BvcyAgIHkgPSAwOworICAgICAgRlRfQnl0ZSAgZiA9ICpmbGFnOworCisKKyAgICAgIGlmICggZiAmIDQgKQorICAgICAgeworICAgICAgICBpZiAoIHAgKyAxID4gbGltaXQgKQorICAgICAgICAgIGdvdG8gSW52YWxpZF9PdXRsaW5lOworCisgICAgICAgIHkgPSAoRlRfUG9zKUZUX05FWFRfQllURSggcCApOworICAgICAgICBpZiAoICggZiAmIDMyICkgPT0gMCApCisgICAgICAgICAgeSA9IC15OworICAgICAgfQorICAgICAgZWxzZSBpZiAoICggZiAmIDMyICkgPT0gMCApCisgICAgICB7CisgICAgICAgIGlmICggcCArIDIgPiBsaW1pdCApCisgICAgICAgICAgZ290byBJbnZhbGlkX091dGxpbmU7CisKKyAgICAgICAgeSA9IChGVF9Qb3MpRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgfQorCisgICAgICB4ICAgICArPSB5OworICAgICAgdmVjLT55ID0geDsKKyAgICAgIC8qIHRoZSBjYXN0IGlzIGZvciBzdHVwaWQgY29tcGlsZXJzICovCisgICAgICAqZmxhZyAgPSAoRlRfQnl0ZSkoIGYgJiBGVF9DVVJWRV9UQUdfT04gKTsKKyAgICB9CisKKyAgICBvdXRsaW5lLT5uX3BvaW50cyAgID0gKEZUX1Nob3J0KW5fcG9pbnRzOworICAgIG91dGxpbmUtPm5fY29udG91cnMgPSAoRlRfU2hvcnQpbl9jb250b3VyczsKKworICAgIGxvYWQtPmN1cnNvciA9IHA7CisKKyAgRmFpbDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgSW52YWxpZF9PdXRsaW5lOgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOworICAgIGdvdG8gRmFpbDsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIFRUX0xvYWRfQ29tcG9zaXRlX0dseXBoKCBUVF9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CisgICAgRlRfQnl0ZSogICAgICAgIHAgICAgICAgPSBsb2FkZXItPmN1cnNvcjsKKyAgICBGVF9CeXRlKiAgICAgICAgbGltaXQgICA9IGxvYWRlci0+bGltaXQ7CisgICAgRlRfR2x5cGhMb2FkZXIgIGdsb2FkZXIgPSBsb2FkZXItPmdsb2FkZXI7CisgICAgRlRfU3ViR2x5cGggICAgIHN1YmdseXBoOworICAgIEZUX1VJbnQgICAgICAgICBudW1fc3ViZ2x5cGhzOworCisKKyAgICBudW1fc3ViZ2x5cGhzID0gMDsKKworICAgIGRvCisgICAgeworICAgICAgRlRfRml4ZWQgIHh4LCB4eSwgeXksIHl4OworICAgICAgRlRfVUludCAgIGNvdW50OworCisKKyAgICAgIC8qIGNoZWNrIHRoYXQgd2UgY2FuIGxvYWQgYSBuZXcgc3ViZ2x5cGggKi8KKyAgICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMoIGdsb2FkZXIsIG51bV9zdWJnbHlwaHMgKyAxICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBjaGVjayBzcGFjZSAqLworICAgICAgaWYgKCBwICsgNCA+IGxpbWl0ICkKKyAgICAgICAgZ290byBJbnZhbGlkX0NvbXBvc2l0ZTsKKworICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBocyArIG51bV9zdWJnbHlwaHM7CisKKyAgICAgIHN1YmdseXBoLT5hcmcxID0gc3ViZ2x5cGgtPmFyZzIgPSAwOworCisgICAgICBzdWJnbHlwaC0+ZmxhZ3MgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgc3ViZ2x5cGgtPmluZGV4ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgLyogY2hlY2sgc3BhY2UgKi8KKyAgICAgIGNvdW50ID0gMjsKKyAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfV09SRFMgKQorICAgICAgICBjb3VudCArPSAyOworICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FfU0NBTEUgKQorICAgICAgICBjb3VudCArPSAyOworICAgICAgZWxzZSBpZiAoIHN1YmdseXBoLT5mbGFncyAmIFdFX0hBVkVfQU5fWFlfU0NBTEUgKQorICAgICAgICBjb3VudCArPSA0OworICAgICAgZWxzZSBpZiAoIHN1YmdseXBoLT5mbGFncyAmIFdFX0hBVkVfQV8yWDIgKQorICAgICAgICBjb3VudCArPSA4OworCisgICAgICBpZiAoIHAgKyBjb3VudCA+IGxpbWl0ICkKKyAgICAgICAgZ290byBJbnZhbGlkX0NvbXBvc2l0ZTsKKworICAgICAgLyogcmVhZCBhcmd1bWVudHMgKi8KKyAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfWFlfVkFMVUVTICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9XT1JEUyApCisgICAgICAgIHsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMiA9IEZUX05FWFRfU0hPUlQoIHAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IEZUX05FWFRfQ0hBUiggcCApOworICAgICAgICAgIHN1YmdseXBoLT5hcmcyID0gRlRfTkVYVF9DSEFSKCBwICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9XT1JEUyApCisgICAgICAgIHsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IChGVF9JbnQpRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMiA9IChGVF9JbnQpRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IChGVF9JbnQpRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50KUZUX05FWFRfQllURSggcCApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIHJlYWQgdHJhbnNmb3JtICovCisgICAgICB4eCA9IHl5ID0gMHgxMDAwMEw7CisgICAgICB4eSA9IHl4ID0gMDsKKworICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FfU0NBTEUgKQorICAgICAgeworICAgICAgICB4eCA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKKyAgICAgICAgeXkgPSB4eDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FOX1hZX1NDQUxFICkKKyAgICAgIHsKKyAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHl5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIHN1YmdseXBoLT5mbGFncyAmIFdFX0hBVkVfQV8yWDIgKQorICAgICAgeworICAgICAgICB4eCA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKKyAgICAgICAgeXggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHh5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOworICAgICAgICB5eSA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKKyAgICAgIH0KKworICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eCA9IHh4OworICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eSA9IHh5OworICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eCA9IHl4OworICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eSA9IHl5OworCisgICAgICBudW1fc3ViZ2x5cGhzKys7CisKKyAgICB9IHdoaWxlICggc3ViZ2x5cGgtPmZsYWdzICYgTU9SRV9DT01QT05FTlRTICk7CisKKyAgICBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgPSBudW1fc3ViZ2x5cGhzOworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgICB7CisgICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGxvYWRlci0+c3RyZWFtOworCisKKyAgICAgIC8qIHdlIG11c3QgdW5kbyB0aGUgRlRfRlJBTUVfRU5URVIgaW4gb3JkZXIgdG8gcG9pbnQgKi8KKyAgICAgIC8qIHRvIHRoZSBjb21wb3NpdGUgaW5zdHJ1Y3Rpb25zLCBpZiB3ZSBmaW5kIHNvbWUuICAgKi8KKyAgICAgIC8qIFdlIHdpbGwgcHJvY2VzcyB0aGVtIGxhdGVyLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGxvYWRlci0+aW5zX3BvcyA9IChGVF9VTG9uZykoIEZUX1NUUkVBTV9QT1MoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwIC0gbGltaXQgKTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgbG9hZGVyLT5jdXJzb3IgPSBwOworCisgIEZhaWw6CisgICAgcmV0dXJuIGVycm9yOworCisgIEludmFsaWRfQ29tcG9zaXRlOgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQ29tcG9zaXRlICk7CisgICAgZ290byBGYWlsOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUVF9Jbml0X0dseXBoX0xvYWRpbmcoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgZmFjZS0+YWNjZXNzX2dseXBoX2ZyYW1lICAgPSBUVF9BY2Nlc3NfR2x5cGhfRnJhbWU7CisgICAgZmFjZS0+cmVhZF9nbHlwaF9oZWFkZXIgICAgPSBUVF9Mb2FkX0dseXBoX0hlYWRlcjsKKyAgICBmYWNlLT5yZWFkX3NpbXBsZV9nbHlwaCAgICA9IFRUX0xvYWRfU2ltcGxlX0dseXBoOworICAgIGZhY2UtPnJlYWRfY29tcG9zaXRlX2dseXBoID0gVFRfTG9hZF9Db21wb3NpdGVfR2x5cGg7CisgICAgZmFjZS0+Zm9yZ2V0X2dseXBoX2ZyYW1lICAgPSBUVF9Gb3JnZXRfR2x5cGhfRnJhbWU7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHR0X3ByZXBhcmVfem9uZSggVFRfR2x5cGhab25lICB6b25lLAorICAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZCAgbG9hZCwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIHN0YXJ0X3BvaW50LAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgc3RhcnRfY29udG91ciApCisgIHsKKyAgICB6b25lLT5uX3BvaW50cyAgICA9IChGVF9VU2hvcnQpbG9hZC0+b3V0bGluZS5uX3BvaW50cyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpc3RhcnRfcG9pbnQ7CisgICAgem9uZS0+bl9jb250b3VycyAgPSBsb2FkLT5vdXRsaW5lLm5fY29udG91cnMgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfU2hvcnQpc3RhcnRfY29udG91cjsKKyAgICB6b25lLT5vcmcgICAgICAgICA9IGxvYWQtPmV4dHJhX3BvaW50cyArIHN0YXJ0X3BvaW50OworICAgIHpvbmUtPmN1ciAgICAgICAgID0gbG9hZC0+b3V0bGluZS5wb2ludHMgKyBzdGFydF9wb2ludDsKKyAgICB6b25lLT5vcnVzICAgICAgICA9IGxvYWQtPmV4dHJhX3BvaW50czIgKyBzdGFydF9wb2ludDsKKyAgICB6b25lLT50YWdzICAgICAgICA9IChGVF9CeXRlKilsb2FkLT5vdXRsaW5lLnRhZ3MgKyBzdGFydF9wb2ludDsKKyAgICB6b25lLT5jb250b3VycyAgICA9IChGVF9VU2hvcnQqKWxvYWQtPm91dGxpbmUuY29udG91cnMgKyBzdGFydF9jb250b3VyOworICAgIHpvbmUtPmZpcnN0X3BvaW50ID0gKEZUX1VTaG9ydClzdGFydF9wb2ludDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfSGludF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSGludCB0aGUgZ2x5cGggdXNpbmcgdGhlIHpvbmUgcHJlcGFyZWQgYnkgdGhlIGNhbGxlci4gIE5vdGUgdGhhdCAgICovCisgIC8qICAgIHRoZSB6b25lIGlzIHN1cHBvc2VkIHRvIGluY2x1ZGUgZm91ciBwaGFudG9tIHBvaW50cy4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIFRUX0hpbnRfR2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIGlzX2NvbXBvc2l0ZSApCisgIHsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKKyNlbmRpZgorCisgICAgVFRfR2x5cGhab25lICB6b25lID0gJmxvYWRlci0+em9uZTsKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorICAgIEZUX0xvbmcgICAgICAgbl9pbnM7CisjZWxzZQorICAgIEZUX1VOVVNFRCggaXNfY29tcG9zaXRlICk7CisjZW5kaWYKKworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisgICAgaWYgKCBsb2FkZXItPmdseXBoLT5jb250cm9sX2xlbiA+IDB4RkZGRkwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJUVF9IaW50X0dseXBoOiB0b28gbG9uZyBpbnN0cnVjdGlvbnMiICkpOworICAgICAgRlRfVFJBQ0UxKCggIiAoMHglbHggYnl0ZSkgaXMgdHJ1bmNhdGVkXG4iLAorICAgICAgICAgICAgICAgICBsb2FkZXItPmdseXBoLT5jb250cm9sX2xlbiApKTsKKyAgICB9CisgICAgbl9pbnMgPSBsb2FkZXItPmdseXBoLT5jb250cm9sX2xlbjsKKworICAgIC8qIHNhdmUgb3JpZ2luYWwgcG9pbnQgcG9zaXRpb24gaW4gb3JnICovCisgICAgaWYgKCBuX2lucyA+IDAgKQorICAgICAgRlRfQVJSQVlfQ09QWSggem9uZS0+b3JnLCB6b25lLT5jdXIsIHpvbmUtPm5fcG9pbnRzICk7CisKKyAgICAvKiBSZXNldCBncmFwaGljcyBzdGF0ZS4gKi8KKyAgICBsb2FkZXItPmV4ZWMtPkdTID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPkdTOworCisgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQhIEhpbnRpbmcgaW5zdHJ1Y3Rpb25zIG9mIGEgY29tcG9zaXRlIGdseXBoICovCisgICAgLyogICAgICBjb21wbGV0ZWx5IHJlZmVyIHRvIHRoZSAoYWxyZWFkeSkgaGludGVkIHN1YmdseXBocy4gICAgICovCisgICAgaWYgKCBpc19jb21wb3NpdGUgKQorICAgIHsKKyAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy54X3NjYWxlID0gMSA8PCAxNjsKKyAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy55X3NjYWxlID0gMSA8PCAxNjsKKworICAgICAgRlRfQVJSQVlfQ09QWSggem9uZS0+b3J1cywgem9uZS0+Y3VyLCB6b25lLT5uX3BvaW50cyApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnhfc2NhbGUgPQorICAgICAgICAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy54X3NjYWxlOworICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnlfc2NhbGUgPQorICAgICAgICAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgIH0KKyNlbmRpZgorCisgICAgLyogcm91bmQgcGhhbnRvbSBwb2ludHMgKi8KKyAgICB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSA0XS54ID0KKyAgICAgIEZUX1BJWF9ST1VORCggem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF0ueCApOworICAgIHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDNdLnggPQorICAgICAgRlRfUElYX1JPVU5EKCB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAzXS54ICk7CisgICAgem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMl0ueSA9CisgICAgICBGVF9QSVhfUk9VTkQoIHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDJdLnkgKTsKKyAgICB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAxXS55ID0KKyAgICAgIEZUX1BJWF9ST1VORCggem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV0ueSApOworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgICBpZiAoIG5faW5zID4gMCApCisgICAgeworICAgICAgRlRfRXJyb3IgIGVycm9yOworCisgICAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICAgICAgID0gbG9hZGVyLT5nbG9hZGVyOworICAgICAgRlRfT3V0bGluZSAgICAgIGN1cnJlbnRfb3V0bGluZSA9IGdsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKKworCisgICAgICBUVF9TZXRfQ29kZVJhbmdlKCBsb2FkZXItPmV4ZWMsIHR0X2NvZGVyYW5nZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+ZXhlYy0+Z2x5cGhJbnMsIG5faW5zICk7CisKKyAgICAgIGxvYWRlci0+ZXhlYy0+aXNfY29tcG9zaXRlID0gaXNfY29tcG9zaXRlOworICAgICAgbG9hZGVyLT5leGVjLT5wdHMgICAgICAgICAgPSAqem9uZTsKKworICAgICAgZXJyb3IgPSBUVF9SdW5fQ29udGV4dCggbG9hZGVyLT5leGVjICk7CisgICAgICBpZiAoIGVycm9yICYmIGxvYWRlci0+ZXhlYy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgLyogc3RvcmUgZHJvcC1vdXQgbW9kZSBpbiBiaXRzIDUtNzsgc2V0IGJpdCAyIGFsc28gYXMgYSBtYXJrZXIgKi8KKyAgICAgIGN1cnJlbnRfb3V0bGluZS50YWdzWzBdIHw9CisgICAgICAgICggbG9hZGVyLT5leGVjLT5HUy5zY2FuX3R5cGUgPDwgNSApIHwgRlRfQ1VSVkVfVEFHX0hBU19TQ0FOTU9ERTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgLyogc2F2ZSBnbHlwaCBwaGFudG9tIHBvaW50cyAqLworICAgIGxvYWRlci0+cHAxID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF07CisgICAgbG9hZGVyLT5wcDIgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAzXTsKKyAgICBsb2FkZXItPnBwMyA9IHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDJdOworICAgIGxvYWRlci0+cHA0ID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV07CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKKyAgICB7CisgICAgICBpZiAoIGxvYWRlci0+ZXhlYy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0RFRU1CT0xERU4gKQorICAgICAgICBGVF9PdXRsaW5lX0VtYm9sZGVuWFkoICZsb2FkZXItPmdsb2FkZXItPmN1cnJlbnQub3V0bGluZSwgLTI0LCAwICk7CisKKyAgICAgIGVsc2UgaWYgKCBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19FTUJPTERFTiApCisgICAgICAgIEZUX091dGxpbmVfRW1ib2xkZW5YWSggJmxvYWRlci0+Z2xvYWRlci0+Y3VycmVudC5vdXRsaW5lLCAyNCwgMCApOworICAgIH0KKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9uY2UgYSBzaW1wbGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkLCBpdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuICAgICAqLworICAvKiAgICBVc3VhbGx5LCB0aGlzIG1lYW5zIHNjYWxpbmcgYW5kIGhpbnRpbmcgdGhyb3VnaCBieXRlY29kZSAgICAgICAgICAgKi8KKyAgLyogICAgaW50ZXJwcmV0YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIEZUX0dseXBoTG9hZGVyICBnbG9hZGVyID0gbG9hZGVyLT5nbG9hZGVyOworICAgIEZUX0Vycm9yICAgICAgICBlcnJvciAgID0gRlRfRXJyX09rOworICAgIEZUX091dGxpbmUqICAgICBvdXRsaW5lOworICAgIEZUX0ludCAgICAgICAgICBuX3BvaW50czsKKworCisgICAgb3V0bGluZSAgPSAmZ2xvYWRlci0+Y3VycmVudC5vdXRsaW5lOworICAgIG5fcG9pbnRzID0gb3V0bGluZS0+bl9wb2ludHM7CisKKyAgICAvKiBzZXQgcGhhbnRvbSBwb2ludHMgKi8KKworICAgIG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAgICBdID0gbG9hZGVyLT5wcDE7CisgICAgb3V0bGluZS0+cG9pbnRzW25fcG9pbnRzICsgMV0gPSBsb2FkZXItPnBwMjsKKyAgICBvdXRsaW5lLT5wb2ludHNbbl9wb2ludHMgKyAyXSA9IGxvYWRlci0+cHAzOworICAgIG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyArIDNdID0gbG9hZGVyLT5wcDQ7CisKKyAgICBvdXRsaW5lLT50YWdzW25fcG9pbnRzICAgIF0gPSAwOworICAgIG91dGxpbmUtPnRhZ3Nbbl9wb2ludHMgKyAxXSA9IDA7CisgICAgb3V0bGluZS0+dGFnc1tuX3BvaW50cyArIDJdID0gMDsKKyAgICBvdXRsaW5lLT50YWdzW25fcG9pbnRzICsgM10gPSAwOworCisgICAgbl9wb2ludHMgKz0gNDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKworICAgIGlmICggKChUVF9GYWNlKWxvYWRlci0+ZmFjZSktPmRvYmxlbmQgKQorICAgIHsKKyAgICAgIC8qIERlbHRhcyBhcHBseSB0byB0aGUgdW5zY2FsZWQgZGF0YS4gKi8KKyAgICAgIGVycm9yID0gVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMoIChUVF9GYWNlKShsb2FkZXItPmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+Z2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCluX3BvaW50cyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisKKyAgICBpZiAoIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgKQorICAgIHsKKyAgICAgIHR0X3ByZXBhcmVfem9uZSggJmxvYWRlci0+em9uZSwgJmdsb2FkZXItPmN1cnJlbnQsIDAsIDAgKTsKKworICAgICAgRlRfQVJSQVlfQ09QWSggbG9hZGVyLT56b25lLm9ydXMsIGxvYWRlci0+em9uZS5jdXIsCisgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPnpvbmUubl9wb2ludHMgKyA0ICk7CisgICAgfQorCisgICAgeworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgICAgVFRfRmFjZSAgICBmYWNlICAgPSAoVFRfRmFjZSlsb2FkZXItPmZhY2U7CisgICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKKworICAgICAgRlRfU3RyaW5nKiAgZmFtaWx5ICAgICAgICAgPSBmYWNlLT5yb290LmZhbWlseV9uYW1lOworICAgICAgRlRfVUludCAgICAgcHBlbSAgICAgICAgICAgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueF9wcGVtOworICAgICAgRlRfU3RyaW5nKiAgc3R5bGUgICAgICAgICAgPSBmYWNlLT5yb290LnN0eWxlX25hbWU7CisgICAgICBGVF9VSW50ICAgICB4X3NjYWxlX2ZhY3RvciA9IDEwMDA7CisjZW5kaWYKKworICAgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7CisgICAgICBGVF9WZWN0b3IqICBsaW1pdCA9IG91dGxpbmUtPnBvaW50cyArIG5fcG9pbnRzOworCisgICAgICBGVF9GaXhlZCAgeF9zY2FsZSA9IDA7IC8qIHBhY2lmeSBjb21waWxlciAqLworICAgICAgRlRfRml4ZWQgIHlfc2NhbGUgPSAwOworCisgICAgICBGVF9Cb29sICBkb19zY2FsZSA9IEZBTFNFOworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCisgICAgICB7CisgICAgICAgIC8qIHNjYWxlLCBidXQgb25seSBpZiBlbmFibGVkIGFuZCBvbmx5IGlmIFRUIGhpbnRpbmcgaXMgYmVpbmcgdXNlZCAqLworICAgICAgICBpZiAoIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgKQorICAgICAgICAgIHhfc2NhbGVfZmFjdG9yID0gc3BoX3Rlc3RfdHdlYWtfeF9zY2FsaW5nKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmdseXBoX2luZGV4ICk7CisgICAgICAgIC8qIHNjYWxlIHRoZSBnbHlwaCAqLworICAgICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgfHwKKyAgICAgICAgICAgICB4X3NjYWxlX2ZhY3RvciAhPSAxMDAwICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIHhfc2NhbGUgPSBGVF9NdWxEaXYoICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnhfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpeF9zY2FsZV9mYWN0b3IsIDEwMDAgKTsKKyAgICAgICAgICB5X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueV9zY2FsZTsKKworICAgICAgICAgIC8qIGNvbXBlbnNhdGUgZm9yIGFueSBzY2FsaW5nIGJ5IGRlL2VtYm9sZGVuaW5nOyAqLworICAgICAgICAgIC8qIHRoZSBhbW91bnQgd2FzIGRldGVybWluZWQgdmlhIGV4cGVyaW1lbnRhdGlvbiAqLworICAgICAgICAgIGlmICggeF9zY2FsZV9mYWN0b3IgIT0gMTAwMCAmJiBwcGVtID4gMTEgKQorICAgICAgICAgICAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIDEyODAgKiBwcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAgLSB4X3NjYWxlX2ZhY3RvciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICk7CisgICAgICAgICAgZG9fc2NhbGUgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgICAgeworICAgICAgICAvKiBzY2FsZSB0aGUgZ2x5cGggKi8KKyAgICAgICAgaWYgKCAoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgIHhfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy54X3NjYWxlOworICAgICAgICAgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworCisgICAgICAgICAgZG9fc2NhbGUgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggZG9fc2NhbGUgKQorICAgICAgeworICAgICAgICBmb3IgKCA7IHZlYyA8IGxpbWl0OyB2ZWMrKyApCisgICAgICAgIHsKKyAgICAgICAgICB2ZWMtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApOworICAgICAgICAgIHZlYy0+eSA9IEZUX011bEZpeCggdmVjLT55LCB5X3NjYWxlICk7CisgICAgICAgIH0KKworICAgICAgICBsb2FkZXItPnBwMSA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDRdOworICAgICAgICBsb2FkZXItPnBwMiA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDNdOworICAgICAgICBsb2FkZXItPnBwMyA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDJdOworICAgICAgICBsb2FkZXItPnBwNCA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDFdOworICAgICAgfQorICAgIH0KKworICAgIGlmICggSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSApCisgICAgeworICAgICAgbG9hZGVyLT56b25lLm5fcG9pbnRzICs9IDQ7CisKKyAgICAgIGVycm9yID0gVFRfSGludF9HbHlwaCggbG9hZGVyLCAwICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmNlIGEgY29tcG9zaXRlIGNvbXBvbmVudCBoYXMgYmVlbiBsb2FkZWQsIGl0IG5lZWRzIHRvIGJlICAgICAgICAgKi8KKyAgLyogICAgcHJvY2Vzc2VkLiAgVXN1YWxseSwgdGhpcyBtZWFucyB0cmFuc2Zvcm1pbmcgYW5kIHRyYW5zbGF0aW5nLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgVFRfUHJvY2Vzc19Db21wb3NpdGVfQ29tcG9uZW50KCBUVF9Mb2FkZXIgICAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N1YkdseXBoICBzdWJnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgc3RhcnRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIG51bV9iYXNlX3BvaW50cyApCisgIHsKKyAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICA9IGxvYWRlci0+Z2xvYWRlcjsKKyAgICBGVF9WZWN0b3IqICAgICAgYmFzZV92ZWMgICA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5wb2ludHM7CisgICAgRlRfVUludCAgICAgICAgIG51bV9wb2ludHMgPSAoRlRfVUludClnbG9hZGVyLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgRlRfQm9vbCAgICAgICAgIGhhdmVfc2NhbGU7CisgICAgRlRfUG9zICAgICAgICAgIHgsIHk7CisKKworICAgIGhhdmVfc2NhbGUgPSBGVF9CT09MKCBzdWJnbHlwaC0+ZmxhZ3MgJiAoIFdFX0hBVkVfQV9TQ0FMRSAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFX0hBVkVfQU5fWFlfU0NBTEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFX0hBVkVfQV8yWDIgICAgICAgKSApOworCisgICAgLyogcGVyZm9ybSB0aGUgdHJhbnNmb3JtIHJlcXVpcmVkIGZvciB0aGlzIHN1YmdseXBoICovCisgICAgaWYgKCBoYXZlX3NjYWxlICkKKyAgICB7CisgICAgICBGVF9VSW50ICBpOworCisKKyAgICAgIGZvciAoIGkgPSBudW1fYmFzZV9wb2ludHM7IGkgPCBudW1fcG9pbnRzOyBpKysgKQorICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCBiYXNlX3ZlYyArIGksICZzdWJnbHlwaC0+dHJhbnNmb3JtICk7CisgICAgfQorCisgICAgLyogZ2V0IG9mZnNldCAqLworICAgIGlmICggISggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfWFlfVkFMVUVTICkgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICAgIGsgPSAoRlRfVUludClzdWJnbHlwaC0+YXJnMTsKKyAgICAgIEZUX1VJbnQgICAgIGwgPSAoRlRfVUludClzdWJnbHlwaC0+YXJnMjsKKyAgICAgIEZUX1ZlY3RvciogIHAxOworICAgICAgRlRfVmVjdG9yKiAgcDI7CisKKworICAgICAgLyogbWF0Y2ggbC10aCBwb2ludCBvZiB0aGUgbmV3bHkgbG9hZGVkIGNvbXBvbmVudCB0byB0aGUgay10aCBwb2ludCAqLworICAgICAgLyogb2YgdGhlIHByZXZpb3VzbHkgbG9hZGVkIGNvbXBvbmVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAvKiBjaGFuZ2UgdG8gdGhlIHBvaW50IG51bWJlcnMgdXNlZCBieSBvdXIgb3V0bGluZSAqLworICAgICAgayArPSBzdGFydF9wb2ludDsKKyAgICAgIGwgKz0gbnVtX2Jhc2VfcG9pbnRzOworICAgICAgaWYgKCBrID49IG51bV9iYXNlX3BvaW50cyB8fAorICAgICAgICAgICBsID49IG51bV9wb2ludHMgICAgICApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Db21wb3NpdGUgKTsKKworICAgICAgcDEgPSBnbG9hZGVyLT5iYXNlLm91dGxpbmUucG9pbnRzICsgazsKKyAgICAgIHAyID0gZ2xvYWRlci0+YmFzZS5vdXRsaW5lLnBvaW50cyArIGw7CisKKyAgICAgIHggPSBwMS0+eCAtIHAyLT54OworICAgICAgeSA9IHAxLT55IC0gcDItPnk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB4ID0gc3ViZ2x5cGgtPmFyZzE7CisgICAgICB5ID0gc3ViZ2x5cGgtPmFyZzI7CisKKyAgICAgIGlmICggIXggJiYgIXkgKQorICAgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgICAvKiBVc2UgYSBkZWZhdWx0IHZhbHVlIGRlcGVuZGVudCBvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRC4gIFRoaXMgaXMgdXNlZnVsIGZvciBvbGQgKi8KKyAgICAgIC8qIFRUIGZvbnRzIHdoaWNoIGRvbid0IHNldCB0aGUgeHh4X0NPTVBPTkVOVF9PRkZTRVQgYml0LiAgICAgICAgICAgICovCisKKyAgICAgIGlmICggaGF2ZV9zY2FsZSAmJgorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQKKyAgICAgICAgICAgISggc3ViZ2x5cGgtPmZsYWdzICYgVU5TQ0FMRURfQ09NUE9ORU5UX09GRlNFVCApICkKKyNlbHNlCisgICAgICAgICAgICAoIHN1YmdseXBoLT5mbGFncyAmIFNDQUxFRF9DT01QT05FTlRfT0ZGU0VUICkgKQorI2VuZGlmCisgICAgICB7CisKKyNpZiAwCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBUaGlzIGFsZ29yaXRobSBpcyB3aGF0IEFwcGxlIGRvY3VtZW50cy4gIEJ1dCBpdCBkb2Vzbid0IHdvcmsuICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGludCAgYSA9IHN1YmdseXBoLT50cmFuc2Zvcm0ueHggPiAwID8gIHN1YmdseXBoLT50cmFuc2Zvcm0ueHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtc3ViZ2x5cGgtPnRyYW5zZm9ybS54eDsKKyAgICAgICAgaW50ICBiID0gc3ViZ2x5cGgtPnRyYW5zZm9ybS55eCA+IDAgPyAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnl4OworICAgICAgICBpbnQgIGMgPSBzdWJnbHlwaC0+dHJhbnNmb3JtLnh5ID4gMCA/ICBzdWJnbHlwaC0+dHJhbnNmb3JtLnh5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLXN1YmdseXBoLT50cmFuc2Zvcm0ueHk7CisgICAgICAgIGludCAgZCA9IHN1YmdseXBoLT50cmFuc2Zvcm0ueXkgPiAwID8gc3ViZ2x5cGgtPnRyYW5zZm9ybS55eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnl5OworICAgICAgICBpbnQgIG0gPSBhID4gYiA/IGEgOiBiOworICAgICAgICBpbnQgIG4gPSBjID4gZCA/IGMgOiBkOworCisKKyAgICAgICAgaWYgKCBhIC0gYiA8PSAzMyAmJiBhIC0gYiA+PSAtMzMgKQorICAgICAgICAgIG0gKj0gMjsKKyAgICAgICAgaWYgKCBjIC0gZCA8PSAzMyAmJiBjIC0gZCA+PSAtMzMgKQorICAgICAgICAgIG4gKj0gMjsKKyAgICAgICAgeCA9IEZUX011bEZpeCggeCwgbSApOworICAgICAgICB5ID0gRlRfTXVsRml4KCB5LCBuICk7CisKKyNlbHNlIC8qIDEgKi8KKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFRoaXMgYWxnb3JpdGhtIGlzIGEgZ3Vlc3MgYW5kIHdvcmtzIG11Y2ggYmV0dGVyIHRoYW4gdGhlIGFib3ZlLiAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgRlRfRml4ZWQgIG1hY194c2NhbGUgPSBGVF9IeXBvdCggc3ViZ2x5cGgtPnRyYW5zZm9ybS54eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eSApOworICAgICAgICBGVF9GaXhlZCAgbWFjX3lzY2FsZSA9IEZUX0h5cG90KCBzdWJnbHlwaC0+dHJhbnNmb3JtLnl5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJnbHlwaC0+dHJhbnNmb3JtLnl4ICk7CisKKworICAgICAgICB4ID0gRlRfTXVsRml4KCB4LCBtYWNfeHNjYWxlICk7CisgICAgICAgIHkgPSBGVF9NdWxGaXgoIHksIG1hY195c2NhbGUgKTsKKworI2VuZGlmIC8qIDEgKi8KKworICAgICAgfQorCisgICAgICBpZiAoICEoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSApCisgICAgICB7CisgICAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgICAgRlRfRml4ZWQgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworCisKKyAgICAgICAgeCA9IEZUX011bEZpeCggeCwgeF9zY2FsZSApOworICAgICAgICB5ID0gRlRfTXVsRml4KCB5LCB5X3NjYWxlICk7CisKKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBST1VORF9YWV9UT19HUklEICkKKyAgICAgICAgeworICAgICAgICAgIHggPSBGVF9QSVhfUk9VTkQoIHggKTsKKyAgICAgICAgICB5ID0gRlRfUElYX1JPVU5EKCB5ICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHggfHwgeSApCisgICAgICB0cmFuc2xhdGVfYXJyYXkoIG51bV9wb2ludHMgLSBudW1fYmFzZV9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdmVjICsgbnVtX2Jhc2VfcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICB4LCB5ICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLCBpbiB0aGF0ICAgKi8KKyAgLyogICAgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBoaW50IHRoZSBnbHlwaC4gIFRodXMgdGhpcyBmdW5jdGlvbiBpcyAgICAgICovCisgIC8qICAgIG9ubHkgYXZhaWxhYmxlIHdoZW4gYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMgZW5hYmxlZC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIFRUX1Byb2Nlc3NfQ29tcG9zaXRlX0dseXBoKCBUVF9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgc3RhcnRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHN0YXJ0X2NvbnRvdXIgKQorICB7CisgICAgRlRfRXJyb3IgICAgIGVycm9yOworICAgIEZUX091dGxpbmUqICBvdXRsaW5lOworICAgIEZUX1VJbnQgICAgICBpOworCisKKyAgICBvdXRsaW5lID0gJmxvYWRlci0+Z2xvYWRlci0+YmFzZS5vdXRsaW5lOworCisgICAgLyogbWFrZSByb29tIGZvciBwaGFudG9tIHBvaW50cyAqLworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBsb2FkZXItPmdsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzICsgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgb3V0bGluZS0+cG9pbnRzW291dGxpbmUtPm5fcG9pbnRzICAgIF0gPSBsb2FkZXItPnBwMTsKKyAgICBvdXRsaW5lLT5wb2ludHNbb3V0bGluZS0+bl9wb2ludHMgKyAxXSA9IGxvYWRlci0+cHAyOworICAgIG91dGxpbmUtPnBvaW50c1tvdXRsaW5lLT5uX3BvaW50cyArIDJdID0gbG9hZGVyLT5wcDM7CisgICAgb3V0bGluZS0+cG9pbnRzW291dGxpbmUtPm5fcG9pbnRzICsgM10gPSBsb2FkZXItPnBwNDsKKworICAgIG91dGxpbmUtPnRhZ3Nbb3V0bGluZS0+bl9wb2ludHMgICAgXSA9IDA7CisgICAgb3V0bGluZS0+dGFnc1tvdXRsaW5lLT5uX3BvaW50cyArIDFdID0gMDsKKyAgICBvdXRsaW5lLT50YWdzW291dGxpbmUtPm5fcG9pbnRzICsgMl0gPSAwOworICAgIG91dGxpbmUtPnRhZ3Nbb3V0bGluZS0+bl9wb2ludHMgKyAzXSA9IDA7CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAgIHsKKyAgICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gbG9hZGVyLT5zdHJlYW07CisgICAgICBGVF9VU2hvcnQgIG5faW5zLCBtYXhfaW5zOworICAgICAgRlRfVUxvbmcgICB0bXA7CisKKworICAgICAgLyogVFRfTG9hZF9Db21wb3NpdGVfR2x5cGggb25seSBnaXZlcyB1cyB0aGUgb2Zmc2V0IG9mIGluc3RydWN0aW9ucyAqLworICAgICAgLyogc28gd2UgcmVhZCB0aGVtIGhlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggbG9hZGVyLT5pbnNfcG9zICkgfHwKKyAgICAgICAgICAgRlRfUkVBRF9VU0hPUlQoIG5faW5zICkgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBGVF9UUkFDRTUoKCAiICBJbnN0cnVjdGlvbnMgc2l6ZSA9ICVkXG4iLCBuX2lucyApKTsKKworICAgICAgLyogY2hlY2sgaXQgKi8KKyAgICAgIG1heF9pbnMgPSAoKFRUX0ZhY2UpbG9hZGVyLT5mYWNlKS0+bWF4X3Byb2ZpbGUubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOworICAgICAgaWYgKCBuX2lucyA+IG1heF9pbnMgKQorICAgICAgeworICAgICAgICAvKiBkb24ndCB0cnVzdCBgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zJzsgKi8KKyAgICAgICAgLyogb25seSBkbyBhIHJvdWdoIHNhZmV0eSBjaGVjayAgICAgICAgICovCisgICAgICAgIGlmICggKEZUX0ludCluX2lucyA+IGxvYWRlci0+Ynl0ZV9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIlRUX1Byb2Nlc3NfQ29tcG9zaXRlX0dseXBoOiIKKyAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IGluc3RydWN0aW9ucyAoJWQpIGZvciBnbHlwaCB3aXRoIGxlbmd0aCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBuX2lucywgbG9hZGVyLT5ieXRlX2xlbiApKTsKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIFRvb19NYW55X0hpbnRzICk7CisgICAgICAgIH0KKworICAgICAgICB0bXAgICA9IGxvYWRlci0+ZXhlYy0+Z2x5cGhTaXplOworICAgICAgICBlcnJvciA9IFVwZGF0ZV9NYXgoIGxvYWRlci0+ZXhlYy0+bWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfQnl0ZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikmbG9hZGVyLT5leGVjLT5nbHlwaElucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2lucyApOworCisgICAgICAgIGxvYWRlci0+ZXhlYy0+Z2x5cGhTaXplID0gKEZUX1VTaG9ydCl0bXA7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCBuX2lucyA9PSAwICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRCggbG9hZGVyLT5leGVjLT5nbHlwaElucywgbl9pbnMgKSApCisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgbG9hZGVyLT5nbHlwaC0+Y29udHJvbF9kYXRhID0gbG9hZGVyLT5leGVjLT5nbHlwaEluczsKKyAgICAgIGxvYWRlci0+Z2x5cGgtPmNvbnRyb2xfbGVuICA9IG5faW5zOworICAgIH0KKworI2VuZGlmCisKKyAgICB0dF9wcmVwYXJlX3pvbmUoICZsb2FkZXItPnpvbmUsICZsb2FkZXItPmdsb2FkZXItPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICBzdGFydF9wb2ludCwgc3RhcnRfY29udG91ciApOworCisgICAgLyogU29tZSBwb2ludHMgYXJlIGxpa2VseSB0b3VjaGVkIGR1cmluZyBleGVjdXRpb24gb2YgICovCisgICAgLyogaW5zdHJ1Y3Rpb25zIG9uIGNvbXBvbmVudHMuICBTbyBsZXQncyB1bnRvdWNoIHRoZW0uICovCisgICAgZm9yICggaSA9IDA7IGkgPCBsb2FkZXItPnpvbmUubl9wb2ludHM7IGkrKyApCisgICAgICBsb2FkZXItPnpvbmUudGFnc1tpXSAmPSB+RlRfQ1VSVkVfVEFHX1RPVUNIX0JPVEg7CisKKyAgICBsb2FkZXItPnpvbmUubl9wb2ludHMgKz0gNDsKKworICAgIHJldHVybiBUVF9IaW50X0dseXBoKCBsb2FkZXIsIDEgKTsKKyAgfQorCisKKyAgLyoKKyAgICogQ2FsY3VsYXRlIHRoZSBwaGFudG9tIHBvaW50cworICAgKgorICAgKiBEZWZpbmluZyB0aGUgcmlnaHQgc2lkZSBiZWFyaW5nIChyc2IpIGFzCisgICAqCisgICAqICAgcnNiID0gYXcgLSAobHNiICsgeG1heCAtIHhtaW4pCisgICAqCisgICAqICh3aXRoIGBhdycgdGhlIGFkdmFuY2Ugd2lkdGgsIGBsc2InIHRoZSBsZWZ0IHNpZGUgYmVhcmluZywgYW5kIGB4bWluJworICAgKiBhbmQgYHhtYXgnIHRoZSBnbHlwaCdzIG1pbmltdW0gYW5kIG1heGltdW0geCB2YWx1ZSksIHRoZSBPcGVuVHlwZQorICAgKiBzcGVjaWZpY2F0aW9uIGRlZmluZXMgdGhlIGluaXRpYWwgcG9zaXRpb24gb2YgaG9yaXpvbnRhbCBwaGFudG9tIHBvaW50cworICAgKiBhcworICAgKgorICAgKiAgIHBwMSA9IChyb3VuZCh4bWluIC0gbHNiKSwgMCkgICAgICAsCisgICAqICAgcHAyID0gKHJvdW5kKHBwMSArIGF3KSwgMCkgICAgICAgIC4KKyAgICoKKyAgICogTm90ZSB0aGF0IHRoZSByb3VuZGluZyB0byB0aGUgZ3JpZCAoaW4gdGhlIGRldmljZSBzcGFjZSkgaXMgbm90CisgICAqIGRvY3VtZW50ZWQgY3VycmVudGx5IGluIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgKgorICAgKiBIb3dldmVyLCB0aGUgc3BlY2lmaWNhdGlvbiBsYWNrcyB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIHZlcnRpY2FsCisgICAqIHBoYW50b20gcG9pbnRzLiAgR3JlZyBIaXRjaGNvY2sgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBleHBsYW5hdGlvbi4KKyAgICoKKyAgICogLSBhIGB2bXR4JyB0YWJsZSBpcyBwcmVzZW50CisgICAqCisgICAqICAgRm9yIGFueSBnbHlwaCwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0geSB2YWx1ZXMgKGB5bWluJyBhbmQgYHltYXgnKQorICAgKiAgIGFyZSBnaXZlbiBpbiB0aGUgYGdseWYnIHRhYmxlLCB0aGUgdG9wIHNpZGUgYmVhcmluZyAodHNiKSBhbmQgYWR2YW5jZQorICAgKiAgIGhlaWdodCAoYWgpIGFyZSBnaXZlbiBpbiB0aGUgYHZtdHgnIHRhYmxlLiAgVGhlIGJvdHRvbSBzaWRlIGJlYXJpbmcKKyAgICogICAoYnNiKSBpcyB0aGVuIGNhbGN1bGF0ZWQgYXMKKyAgICoKKyAgICogICAgIGJzYiA9IGFoIC0gKHRzYiArIHltYXggLSB5bWluKSAgICAgICAsCisgICAqCisgICAqICAgYW5kIHRoZSBpbml0aWFsIHBvc2l0aW9uIG9mIHZlcnRpY2FsIHBoYW50b20gcG9pbnRzIGlzCisgICAqCisgICAqICAgICBwcDMgPSAoeCwgcm91bmQoeW1heCArIHRzYikpICAgICAgICwKKyAgICogICAgIHBwNCA9ICh4LCByb3VuZChwcDMgLSBhaCkpICAgICAgICAgLgorICAgKgorICAgKiAgIFNlZSBiZWxvdyBmb3IgdmFsdWUgYHgnLgorICAgKgorICAgKiAtIG5vIGB2bXR4JyB0YWJsZSBpbiB0aGUgZm9udAorICAgKgorICAgKiAgIElmIHRoZXJlIGlzIGFuIGBPUy8yJyB0YWJsZSwgd2Ugc2V0CisgICAqCisgICAqICAgICBEZWZhdWx0QXNjZW5kZXIgPSBzVHlwb0FzY2VuZGVyICAgICAgICwKKyAgICogICAgIERlZmF1bHREZXNjZW5kZXIgPSBzVHlwb0Rlc2NlbmRlciAgICAgLAorICAgKgorICAgKiAgIG90aGVyd2lzZSB3ZSB1c2UgZGF0YSBmcm9tIHRoZSBgaGhlYScgdGFibGU6CisgICAqCisgICAqICAgICBEZWZhdWx0QXNjZW5kZXIgPSBBc2NlbmRlciAgICAgICAgICwKKyAgICogICAgIERlZmF1bHREZXNjZW5kZXIgPSBEZXNjZW5kZXIgICAgICAgLgorICAgKgorICAgKiAgIFdpdGggdGhlc2UgdHdvIHZhcmlhYmxlcyB3ZSBjYW4gbm93IHNldAorICAgKgorICAgKiAgICAgYWggPSBEZWZhdWx0QXNjZW5kZXIgLSBzRGVmYXVsdERlc2NlbmRlciAgICAsCisgICAqICAgICB0c2IgPSBEZWZhdWx0QXNjZW5kZXIgLSB5TWF4ICAgICAgICAgICAgICAgICwKKyAgICoKKyAgICogICBhbmQgcHJvY2VlZCBhcyBpZiBhIGB2bXR4JyB0YWJsZSB3YXMgcHJlc2VudC4KKyAgICoKKyAgICogVXN1YWxseSB3ZSBoYXZlCisgICAqCisgICAqICAgeCA9IGF3IC8gMiAgICAgICwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKKyAgICoKKyAgICogYnV0IHRoZXJlIGlzIG9uZSBjb21wYXRpYmlsaXR5IGNhc2Ugd2hlcmUgaXQgY2FuIGJlIHNldCB0bworICAgKgorICAgKiAgIHggPSAtRGVmYXVsdERlc2NlbmRlciAtCisgICAqICAgICAgICAgKChEZWZhdWx0QXNjZW5kZXIgLSBEZWZhdWx0RGVzY2VuZGVyIC0gYXcpIC8gMikgICAgIC4gICAgICAoMikKKyAgICoKKyAgICogYW5kIGFub3RoZXIgb25lIHdpdGgKKyAgICoKKyAgICogICB4ID0gMCAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQorICAgKgorICAgKiBJbiBXaW5kb3dzLCB0aGUgaGlzdG9yeSBvZiB0aG9zZSB2YWx1ZXMgaXMgcXVpdGUgY29tcGxpY2F0ZWQsCisgICAqIGRlcGVuZGluZyBvbiB0aGUgaGludGluZyBlbmdpbmUgKHRoYXQgaXMsIHRoZSBncmFwaGljcyBmcmFtZXdvcmspLgorICAgKgorICAgKiAgIGZyYW1ld29yayAgICAgICAgZnJvbSAgICAgICAgICAgICAgICAgdG8gICAgICAgZm9ybXVsYQorICAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICBHREkgICAgICAgV2luZG93cyA5OCAgICAgICAgICAgICAgIGN1cnJlbnQgICAgICAoMSkKKyAgICogICAgICAgICAgICAgIChXaW5kb3dzIDIwMDAgZm9yIE5UKQorICAgKiAgICBHREkrICAgICAgV2luZG93cyBYUCAgICAgICAgICAgICAgIFdpbmRvd3MgNyAgICAoMikKKyAgICogICAgR0RJKyAgICAgIFdpbmRvd3MgOCAgICAgICAgICAgICAgICBjdXJyZW50ICAgICAgKDMpCisgICAqICAgIERXcml0ZSAgICBXaW5kb3dzIDcgICAgICAgICAgICAgICAgY3VycmVudCAgICAgICgzKQorICAgKgorICAgKiBGb3Igc2ltcGxpY2l0eSwgRnJlZVR5cGUgdXNlcyAoMSkgZm9yIGdyYXlzY2FsZSBzdWJwaXhlbCBoaW50aW5nIGFuZAorICAgKiAoMykgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICoKKyAgICovCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyNkZWZpbmUgVFRfTE9BREVSX1NFVF9QUCggbG9hZGVyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsX2hpbnRpbmdfID0gbG9hZGVyLT5leGVjICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsb2FkZXItPmV4ZWMtPnN1YnBpeGVsX2hpbnRpbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0Jvb2wgIGdyYXlzY2FsZV8gICAgICAgID0gbG9hZGVyLT5leGVjICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsb2FkZXItPmV4ZWMtPmdyYXlzY2FsZSAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZUX0Jvb2wgIHVzZV9hd18yXyAgICAgICAgID0gKEZUX0Jvb2wpKCBzdWJwaXhlbF9oaW50aW5nXyAmJiAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JheXNjYWxlXyAgICAgICAgKTsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobG9hZGVyKS0+cHAxLnggPSAobG9hZGVyKS0+YmJveC54TWluIC0gKGxvYWRlciktPmxlZnRfYmVhcmluZzsgXAorICAgICAgICAgICAgKGxvYWRlciktPnBwMS55ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDIueCA9IChsb2FkZXIpLT5wcDEueCArIChsb2FkZXIpLT5hZHZhbmNlOyAgICAgICAgICBcCisgICAgICAgICAgICAobG9hZGVyKS0+cHAyLnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDMueCA9IHVzZV9hd18yXyA/IChsb2FkZXIpLT5hZHZhbmNlIC8gMiA6IDA7ICAgICAgICBcCisgICAgICAgICAgICAobG9hZGVyKS0+cHAzLnkgPSAobG9hZGVyKS0+YmJveC55TWF4ICsgKGxvYWRlciktPnRvcF9iZWFyaW5nOyAgXAorICAgICAgICAgICAgKGxvYWRlciktPnBwNC54ID0gdXNlX2F3XzJfID8gKGxvYWRlciktPmFkdmFuY2UgLyAyIDogMDsgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDQueSA9IChsb2FkZXIpLT5wcDMueSAtIChsb2FkZXIpLT52YWR2YW5jZTsgICAgICAgICBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQorCisjZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyNkZWZpbmUgVFRfTE9BREVSX1NFVF9QUCggbG9hZGVyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueCA9IChsb2FkZXIpLT5iYm94LnhNaW4gLSAobG9hZGVyKS0+bGVmdF9iZWFyaW5nOyBcCisgICAgICAgICAgICAobG9hZGVyKS0+cHAxLnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGxvYWRlciktPnBwMi54ID0gKGxvYWRlciktPnBwMS54ICsgKGxvYWRlciktPmFkdmFuY2U7ICAgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDIueSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGxvYWRlciktPnBwMy54ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChsb2FkZXIpLT5wcDMueSA9IChsb2FkZXIpLT5iYm94LnlNYXggKyAobG9hZGVyKS0+dG9wX2JlYXJpbmc7ICBcCisgICAgICAgICAgICAobG9hZGVyKS0+cHA0LnggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGxvYWRlciktPnBwNC55ID0gKGxvYWRlciktPnBwMy55IC0gKGxvYWRlciktPnZhZHZhbmNlOyAgICAgICAgIFwKKyAgICAgICAgICB9IHdoaWxlICggMCApCisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkX3RydWV0eXBlX2dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkcyBhIGdpdmVuIHRydWV0eXBlIGdseXBoLiAgSGFuZGxlcyBjb21wb3NpdGVzIGFuZCB1c2VzIGEgICAgICAgKi8KKyAgLyogICAgVFRfTG9hZGVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgbG9hZF90cnVldHlwZV9nbHlwaCggVFRfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgcmVjdXJzZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICBoZWFkZXJfb25seSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3IgICAgICAgID0gRlRfRXJyX09rOworICAgIEZUX0ZpeGVkICAgICAgICB4X3NjYWxlLCB5X3NjYWxlOworICAgIEZUX1VMb25nICAgICAgICBvZmZzZXQ7CisgICAgVFRfRmFjZSAgICAgICAgIGZhY2UgICAgICAgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICAgID0gbG9hZGVyLT5nbG9hZGVyOworICAgIEZUX0Jvb2wgICAgICAgICBvcGVuZWRfZnJhbWUgPSAwOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIEZUX1N0cmVhbVJlYyAgICBpbmNfc3RyZWFtOworICAgIEZUX0RhdGEgICAgICAgICBnbHlwaF9kYXRhOworICAgIEZUX0Jvb2wgICAgICAgICBnbHlwaF9kYXRhX2xvYWRlZCA9IDA7CisjZW5kaWYKKworCisgICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCB2YWx1ZSBvZiBgbWF4Q29tcG9uZW50RGVwdGgnLCAqLworICAgIC8qIHRodXMgd2UgYWxsb3cgZGVwdGggMSB0byBjYXRjaCB0aGUgbWFqb3JpdHkgb2YgdGhlbSAgICAgICAgKi8KKyAgICBpZiAoIHJlY3Vyc2VfY291bnQgPiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgcmVjdXJzZV9jb3VudCA+IGZhY2UtPm1heF9wcm9maWxlLm1heENvbXBvbmVudERlcHRoICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0NvbXBvc2l0ZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgLyogY2hlY2sgZ2x5cGggaW5kZXggKi8KKyAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9JbmRleCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKyNlbmRpZgorCisgICAgbG9hZGVyLT5nbHlwaF9pbmRleCA9IGdseXBoX2luZGV4OworCisgICAgaWYgKCAoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKKyAgICB7CisgICAgICB4X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKKyAgICAgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgeF9zY2FsZSA9IDB4MTAwMDBMOworICAgICAgeV9zY2FsZSA9IDB4MTAwMDBMOworICAgIH0KKworICAgIC8qIFNldCBgb2Zmc2V0JyB0byB0aGUgc3RhcnQgb2YgdGhlIGdseXBoIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiAqLworICAgIC8qIHRoZSBgZ2x5ZicgdGFibGUsIGFuZCBgYnl0ZV9sZW4nIHRvIHRoZSBsZW5ndGggb2YgdGhlIGdseXBoIGluICAqLworICAgIC8qIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorCisgICAgLyogSWYgd2UgYXJlIGxvYWRpbmcgZ2x5cGggZGF0YSB2aWEgdGhlIGluY3JlbWVudGFsIGludGVyZmFjZSwgc2V0ICovCisgICAgLyogdGhlIGxvYWRlciBzdHJlYW0gdG8gYSBtZW1vcnkgc3RyZWFtIHJlYWRpbmcgdGhlIGRhdGEgcmV0dXJuZWQgICovCisgICAgLyogYnkgdGhlIGludGVyZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQorICAgIHsKKyAgICAgIGVycm9yID0gZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5mdW5jcy0+Z2V0X2dseXBoX2RhdGEoCisgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5vYmplY3QsCisgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsICZnbHlwaF9kYXRhICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBnbHlwaF9kYXRhX2xvYWRlZCA9IDE7CisgICAgICBvZmZzZXQgICAgICAgICAgICA9IDA7CisgICAgICBsb2FkZXItPmJ5dGVfbGVuICA9IGdseXBoX2RhdGEubGVuZ3RoOworCisgICAgICBGVF9NRU1fWkVSTyggJmluY19zdHJlYW0sIHNpemVvZiAoIGluY19zdHJlYW0gKSApOworICAgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoICZpbmNfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2RhdGEucG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpZ2x5cGhfZGF0YS5sZW5ndGggKTsKKworICAgICAgbG9hZGVyLT5zdHJlYW0gPSAmaW5jX3N0cmVhbTsKKyAgICB9CisgICAgZWxzZQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworCisgICAgICBvZmZzZXQgPSB0dF9mYWNlX2dldF9sb2NhdGlvbiggZmFjZSwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQqKSZsb2FkZXItPmJ5dGVfbGVuICk7CisKKyAgICBpZiAoIGxvYWRlci0+Ynl0ZV9sZW4gPiAwICkKKyAgICB7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgICAgLyogZm9yIHRoZSBpbmNyZW1lbnRhbCBpbnRlcmZhY2UsIGBnbHlmX29mZnNldCcgaXMgYWx3YXlzIHplcm8gKi8KKyAgICAgIGlmICggIWxvYWRlci0+Z2x5Zl9vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAhZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyNlbHNlCisgICAgICBpZiAoICFsb2FkZXItPmdseWZfb2Zmc2V0ICkKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJubyBgZ2x5ZicgdGFibGUgYnV0IG5vbi16ZXJvIGBsb2NhJyBlbnRyeVxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGVycm9yID0gZmFjZS0+YWNjZXNzX2dseXBoX2ZyYW1lKCBsb2FkZXIsIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+Z2x5Zl9vZmZzZXQgKyBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpbG9hZGVyLT5ieXRlX2xlbiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgb3BlbmVkX2ZyYW1lID0gMTsKKworICAgICAgLyogcmVhZCBnbHlwaCBoZWFkZXIgZmlyc3QgKi8KKyAgICAgIGVycm9yID0gZmFjZS0+cmVhZF9nbHlwaF9oZWFkZXIoIGxvYWRlciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogdGhlIG1ldHJpY3MgbXVzdCBiZSBjb21wdXRlZCBhZnRlciBsb2FkaW5nIHRoZSBnbHlwaCBoZWFkZXIgKi8KKyAgICAgIC8qIHNpbmNlIHdlIG5lZWQgdGhlIGdseXBoJ3MgYHlNYXgnIHZhbHVlIGluIGNhc2UgdGhlIHZlcnRpY2FsICovCisgICAgICAvKiBtZXRyaWNzIG11c3QgYmUgZW11bGF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgZXJyb3IgPSB0dF9nZXRfbWV0cmljcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgaWYgKCBoZWFkZXJfb25seSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGxvYWRlci0+Ynl0ZV9sZW4gPT0gMCB8fCBsb2FkZXItPm5fY29udG91cnMgPT0gMCApCisgICAgeworICAgICAgbG9hZGVyLT5iYm94LnhNaW4gPSAwOworICAgICAgbG9hZGVyLT5iYm94LnhNYXggPSAwOworICAgICAgbG9hZGVyLT5iYm94LnlNaW4gPSAwOworICAgICAgbG9hZGVyLT5iYm94LnlNYXggPSAwOworCisgICAgICBlcnJvciA9IHR0X2dldF9tZXRyaWNzKCBsb2FkZXIsIGdseXBoX2luZGV4ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBpZiAoIGhlYWRlcl9vbmx5ICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBtdXN0IGluaXRpYWxpemUgcG9pbnRzIGJlZm9yZSAocG9zc2libHkpIG92ZXJyaWRpbmcgKi8KKyAgICAgIC8qIGdseXBoIG1ldHJpY3MgZnJvbSB0aGUgaW5jcmVtZW50YWwgaW50ZXJmYWNlICAgICAgICAqLworICAgICAgVFRfTE9BREVSX1NFVF9QUCggbG9hZGVyICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOworI2VuZGlmCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisKKyAgICAgIGlmICggKChUVF9GYWNlKShsb2FkZXItPmZhY2UpKS0+ZG9ibGVuZCApCisgICAgICB7CisgICAgICAgIC8qIGEgc21hbGwgb3V0bGluZSBzdHJ1Y3R1cmUgd2l0aCBmb3VyIGVsZW1lbnRzIGZvciAqLworICAgICAgICAvKiBjb21tdW5pY2F0aW9uIHdpdGggYFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzJyAgKi8KKyAgICAgICAgRlRfVmVjdG9yICAgcG9pbnRzWzRdOworICAgICAgICBjaGFyICAgICAgICB0YWdzWzRdICAgICA9IHsgMSwgMSwgMSwgMSB9OworICAgICAgICBzaG9ydCAgICAgICBjb250b3Vyc1s0XSA9IHsgMCwgMSwgMiwgMyB9OworICAgICAgICBGVF9PdXRsaW5lICBvdXRsaW5lOworCisKKyAgICAgICAgcG9pbnRzWzBdLnggPSBsb2FkZXItPnBwMS54OworICAgICAgICBwb2ludHNbMF0ueSA9IGxvYWRlci0+cHAxLnk7CisgICAgICAgIHBvaW50c1sxXS54ID0gbG9hZGVyLT5wcDIueDsKKyAgICAgICAgcG9pbnRzWzFdLnkgPSBsb2FkZXItPnBwMi55OworCisgICAgICAgIHBvaW50c1syXS54ID0gbG9hZGVyLT5wcDMueDsKKyAgICAgICAgcG9pbnRzWzJdLnkgPSBsb2FkZXItPnBwMy55OworICAgICAgICBwb2ludHNbM10ueCA9IGxvYWRlci0+cHA0Lng7CisgICAgICAgIHBvaW50c1szXS55ID0gbG9hZGVyLT5wcDQueTsKKworICAgICAgICBvdXRsaW5lLm5fcG9pbnRzICAgPSA0OworICAgICAgICBvdXRsaW5lLm5fY29udG91cnMgPSA0OworICAgICAgICBvdXRsaW5lLnBvaW50cyAgICAgPSBwb2ludHM7CisgICAgICAgIG91dGxpbmUudGFncyAgICAgICA9IHRhZ3M7CisgICAgICAgIG91dGxpbmUuY29udG91cnMgICA9IGNvbnRvdXJzOworCisgICAgICAgIC8qIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBzY2FsaW5nICovCisgICAgICAgIGVycm9yID0gVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMoIChUVF9GYWNlKShsb2FkZXItPmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUubl9wb2ludHMgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGxvYWRlci0+cHAxLnggPSBwb2ludHNbMF0ueDsKKyAgICAgICAgbG9hZGVyLT5wcDEueSA9IHBvaW50c1swXS55OworICAgICAgICBsb2FkZXItPnBwMi54ID0gcG9pbnRzWzFdLng7CisgICAgICAgIGxvYWRlci0+cHAyLnkgPSBwb2ludHNbMV0ueTsKKworICAgICAgICBsb2FkZXItPnBwMy54ID0gcG9pbnRzWzJdLng7CisgICAgICAgIGxvYWRlci0+cHAzLnkgPSBwb2ludHNbMl0ueTsKKyAgICAgICAgbG9hZGVyLT5wcDQueCA9IHBvaW50c1szXS54OworICAgICAgICBsb2FkZXItPnBwNC55ID0gcG9pbnRzWzNdLnk7CisgICAgICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisKKyAgICAgIC8qIHNjYWxlIHBoYW50b20gcG9pbnRzLCBpZiBuZWNlc3Nhcnk7ICovCisgICAgICAvKiB0aGV5IGdldCByb3VuZGVkIGluIGBUVF9IaW50X0dseXBoJyAqLworICAgICAgaWYgKCAoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgbG9hZGVyLT5wcDEueCA9IEZUX011bEZpeCggbG9hZGVyLT5wcDEueCwgeF9zY2FsZSApOworICAgICAgICBsb2FkZXItPnBwMi54ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwMi54LCB4X3NjYWxlICk7CisgICAgICAgIC8qIHBwMS55IGFuZCBwcDIueSBhcmUgYWx3YXlzIHplcm8gKi8KKworICAgICAgICBsb2FkZXItPnBwMy54ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwMy54LCB4X3NjYWxlICk7CisgICAgICAgIGxvYWRlci0+cHAzLnkgPSBGVF9NdWxGaXgoIGxvYWRlci0+cHAzLnksIHlfc2NhbGUgKTsKKyAgICAgICAgbG9hZGVyLT5wcDQueCA9IEZUX011bEZpeCggbG9hZGVyLT5wcDQueCwgeF9zY2FsZSApOworICAgICAgICBsb2FkZXItPnBwNC55ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwNC55LCB5X3NjYWxlICk7CisgICAgICB9CisKKyAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIG11c3QgaW5pdGlhbGl6ZSBwaGFudG9tIHBvaW50cyBiZWZvcmUgKHBvc3NpYmx5KSBvdmVycmlkaW5nICovCisgICAgLyogZ2x5cGggbWV0cmljcyBmcm9tIHRoZSBpbmNyZW1lbnRhbCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgKi8KKyAgICBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOworI2VuZGlmCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIC8qIGlmIGl0IGlzIGEgc2ltcGxlIGdseXBoLCBsb2FkIGl0ICovCisKKyAgICBpZiAoIGxvYWRlci0+bl9jb250b3VycyA+IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gZmFjZS0+cmVhZF9zaW1wbGVfZ2x5cGgoIGxvYWRlciApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgLyogYWxsIGRhdGEgaGF2ZSBiZWVuIHJlYWQgKi8KKyAgICAgIGZhY2UtPmZvcmdldF9nbHlwaF9mcmFtZSggbG9hZGVyICk7CisgICAgICBvcGVuZWRfZnJhbWUgPSAwOworCisgICAgICBlcnJvciA9IFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoKCBsb2FkZXIgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggZ2xvYWRlciApOworICAgIH0KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgLyogb3RoZXJ3aXNlLCBsb2FkIGEgY29tcG9zaXRlISAqLworICAgIGVsc2UgaWYgKCBsb2FkZXItPm5fY29udG91cnMgPT0gLTEgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICBzdGFydF9wb2ludDsKKyAgICAgIEZUX1VJbnQgICBzdGFydF9jb250b3VyOworICAgICAgRlRfVUxvbmcgIGluc19wb3M7ICAvKiBwb3NpdGlvbiBvZiBjb21wb3NpdGUgaW5zdHJ1Y3Rpb25zLCBpZiBhbnkgKi8KKworCisgICAgICBzdGFydF9wb2ludCAgID0gKEZUX1VJbnQpZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOworICAgICAgc3RhcnRfY29udG91ciA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX2NvbnRvdXJzOworCisgICAgICAvKiBmb3IgZWFjaCBzdWJnbHlwaCwgcmVhZCBjb21wb3NpdGUgaGVhZGVyICovCisgICAgICBlcnJvciA9IGZhY2UtPnJlYWRfY29tcG9zaXRlX2dseXBoKCBsb2FkZXIgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIC8qIHN0b3JlIHRoZSBvZmZzZXQgb2YgaW5zdHJ1Y3Rpb25zICovCisgICAgICBpbnNfcG9zID0gbG9hZGVyLT5pbnNfcG9zOworCisgICAgICAvKiBhbGwgZGF0YSB3ZSBuZWVkIGFyZSByZWFkICovCisgICAgICBmYWNlLT5mb3JnZXRfZ2x5cGhfZnJhbWUoIGxvYWRlciApOworICAgICAgb3BlbmVkX2ZyYW1lID0gMDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKworICAgICAgaWYgKCBmYWNlLT5kb2JsZW5kICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgICAgIGksIGxpbWl0OworICAgICAgICBGVF9TdWJHbHlwaCAgc3ViZ2x5cGg7CisKKyAgICAgICAgRlRfT3V0bGluZSAgb3V0bGluZTsKKyAgICAgICAgRlRfVmVjdG9yKiAgcG9pbnRzICAgPSBOVUxMOworICAgICAgICBjaGFyKiAgICAgICB0YWdzICAgICA9IE5VTEw7CisgICAgICAgIHNob3J0KiAgICAgIGNvbnRvdXJzID0gTlVMTDsKKworICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCisKKyAgICAgICAgbGltaXQgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHM7CisKKyAgICAgICAgLyogY29uc3RydWN0IGFuIG91dGxpbmUgc3RydWN0dXJlIGZvciAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogY29tbXVuaWNhdGlvbiB3aXRoIGBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcycgKi8KKyAgICAgICAgb3V0bGluZS5uX3BvaW50cyAgID0gZ2xvYWRlci0+Y3VycmVudC5udW1fc3ViZ2x5cGhzICsgNDsKKyAgICAgICAgb3V0bGluZS5uX2NvbnRvdXJzID0gb3V0bGluZS5uX3BvaW50czsKKworICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggcG9pbnRzLCBvdXRsaW5lLm5fcG9pbnRzICkgICB8fAorICAgICAgICAgICAgIEZUX05FV19BUlJBWSggdGFncywgb3V0bGluZS5uX3BvaW50cyApICAgICB8fAorICAgICAgICAgICAgIEZUX05FV19BUlJBWSggY29udG91cnMsIG91dGxpbmUubl9wb2ludHMgKSApCisgICAgICAgICAgZ290byBFeGl0MTsKKworICAgICAgICBzdWJnbHlwaCA9IGdsb2FkZXItPmN1cnJlbnQuc3ViZ2x5cGhzICsgZ2xvYWRlci0+YmFzZS5udW1fc3ViZ2x5cGhzOworCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgc3ViZ2x5cGgrKyApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBhcHBseWluZyBkZWx0YXMgZm9yIGFuY2hvciBwb2ludHMgZG9lc24ndCBtYWtlIHNlbnNlLCAqLworICAgICAgICAgIC8qIGJ1dCB3ZSBkb24ndCBoYXZlIHRvIHNwZWNpYWxseSBjaGVjayB0aGlzIHNpbmNlICAgICAgICovCisgICAgICAgICAgLyogdW51c2VkIGRlbHRhIHZhbHVlcyBhcmUgemVybyBhbnl3YXlzICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBwb2ludHNbaV0ueCA9IHN1YmdseXBoLT5hcmcxOworICAgICAgICAgIHBvaW50c1tpXS55ID0gc3ViZ2x5cGgtPmFyZzI7CisgICAgICAgICAgdGFnc1tpXSAgICAgPSAxOworICAgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKKyAgICAgICAgfQorCisgICAgICAgIHBvaW50c1tpXS54ID0gbG9hZGVyLT5wcDEueDsKKyAgICAgICAgcG9pbnRzW2ldLnkgPSBsb2FkZXItPnBwMS55OworICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKKworICAgICAgICBpKys7CisgICAgICAgIHBvaW50c1tpXS54ID0gbG9hZGVyLT5wcDIueDsKKyAgICAgICAgcG9pbnRzW2ldLnkgPSBsb2FkZXItPnBwMi55OworICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKKworICAgICAgICBpKys7CisgICAgICAgIHBvaW50c1tpXS54ID0gbG9hZGVyLT5wcDMueDsKKyAgICAgICAgcG9pbnRzW2ldLnkgPSBsb2FkZXItPnBwMy55OworICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKKworICAgICAgICBpKys7CisgICAgICAgIHBvaW50c1tpXS54ID0gbG9hZGVyLT5wcDQueDsKKyAgICAgICAgcG9pbnRzW2ldLnkgPSBsb2FkZXItPnBwNC55OworICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKKworICAgICAgICBvdXRsaW5lLnBvaW50cyAgID0gcG9pbnRzOworICAgICAgICBvdXRsaW5lLnRhZ3MgICAgID0gdGFnczsKKyAgICAgICAgb3V0bGluZS5jb250b3VycyA9IGNvbnRvdXJzOworCisgICAgICAgIC8qIHRoaXMgY2FsbCBwcm92aWRlcyBhZGRpdGlvbmFsIG9mZnNldHMgKi8KKyAgICAgICAgLyogZm9yIGVhY2ggY29tcG9uZW50J3MgdHJhbnNsYXRpb24gICAgICAqLworICAgICAgICBpZiAoICggZXJyb3IgPSBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcygKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUubl9wb2ludHMgKSApICE9IDAgKQorICAgICAgICAgIGdvdG8gRXhpdDE7CisKKyAgICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBocyArIGdsb2FkZXItPmJhc2UubnVtX3N1YmdseXBoczsKKworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxpbWl0OyBpKyssIHN1YmdseXBoKysgKQorICAgICAgICB7CisgICAgICAgICAgLyogWFhYOiBvdmVyZmxvdyBjaGVjayBmb3Igc3ViZ2x5cGgtPnthcmcxLGFyZzJ9LiAgICAgICAgICovCisgICAgICAgICAgLyogICAgICBEZWx0YXMgbXVzdCBiZSB3aXRoaW4gc2lnbmVkIDE2LWJpdCwgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICBidXQgdGhlIHJlc3RyaWN0aW9uIG9mIHN1bW1lZCBkZWx0YXMgaXMgbm90IGNsZWFyICovCisgICAgICAgICAgc3ViZ2x5cGgtPmFyZzEgPSAoRlRfSW50MTYpcG9pbnRzW2ldLng7CisgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50MTYpcG9pbnRzW2ldLnk7CisgICAgICAgIH0KKworICAgICAgICBsb2FkZXItPnBwMS54ID0gcG9pbnRzW2kgKyAwXS54OworICAgICAgICBsb2FkZXItPnBwMS55ID0gcG9pbnRzW2kgKyAwXS55OworICAgICAgICBsb2FkZXItPnBwMi54ID0gcG9pbnRzW2kgKyAxXS54OworICAgICAgICBsb2FkZXItPnBwMi55ID0gcG9pbnRzW2kgKyAxXS55OworCisgICAgICAgIGxvYWRlci0+cHAzLnggPSBwb2ludHNbaSArIDJdLng7CisgICAgICAgIGxvYWRlci0+cHAzLnkgPSBwb2ludHNbaSArIDJdLnk7CisgICAgICAgIGxvYWRlci0+cHA0LnggPSBwb2ludHNbaSArIDNdLng7CisgICAgICAgIGxvYWRlci0+cHA0LnkgPSBwb2ludHNbaSArIDNdLnk7CisKKyAgICAgIEV4aXQxOgorICAgICAgICBGVF9GUkVFKCBvdXRsaW5lLnBvaW50cyApOworICAgICAgICBGVF9GUkVFKCBvdXRsaW5lLnRhZ3MgKTsKKyAgICAgICAgRlRfRlJFRSggb3V0bGluZS5jb250b3VycyApOworCisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KKworICAgICAgLyogc2NhbGUgcGhhbnRvbSBwb2ludHMsIGlmIG5lY2Vzc2FyeTsgKi8KKyAgICAgIC8qIHRoZXkgZ2V0IHJvdW5kZWQgaW4gYFRUX0hpbnRfR2x5cGgnICovCisgICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQorICAgICAgeworICAgICAgICBsb2FkZXItPnBwMS54ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwMS54LCB4X3NjYWxlICk7CisgICAgICAgIGxvYWRlci0+cHAyLnggPSBGVF9NdWxGaXgoIGxvYWRlci0+cHAyLngsIHhfc2NhbGUgKTsKKyAgICAgICAgLyogcHAxLnkgYW5kIHBwMi55IGFyZSBhbHdheXMgemVybyAqLworCisgICAgICAgIGxvYWRlci0+cHAzLnggPSBGVF9NdWxGaXgoIGxvYWRlci0+cHAzLngsIHhfc2NhbGUgKTsKKyAgICAgICAgbG9hZGVyLT5wcDMueSA9IEZUX011bEZpeCggbG9hZGVyLT5wcDMueSwgeV9zY2FsZSApOworICAgICAgICBsb2FkZXItPnBwNC54ID0gRlRfTXVsRml4KCBsb2FkZXItPnBwNC54LCB4X3NjYWxlICk7CisgICAgICAgIGxvYWRlci0+cHA0LnkgPSBGVF9NdWxGaXgoIGxvYWRlci0+cHA0LnksIHlfc2NhbGUgKTsKKyAgICAgIH0KKworICAgICAgLyogaWYgdGhlIGZsYWcgRlRfTE9BRF9OT19SRUNVUlNFIGlzIHNldCwgd2UgcmV0dXJuIHRoZSBzdWJnbHlwaCAqLworICAgICAgLyogYGFzIGlzJyBpbiB0aGUgZ2x5cGggc2xvdCAodGhlIGNsaWVudCBhcHBsaWNhdGlvbiB3aWxsIGJlICAgICAqLworICAgICAgLyogcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyB0aGVzZSBkYXRhKS4uLiAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKQorICAgICAgeworICAgICAgICBGVF9HbHlwaExvYWRlcl9BZGQoIGdsb2FkZXIgKTsKKyAgICAgICAgbG9hZGVyLT5nbHlwaC0+Zm9ybWF0ID0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTsKKworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgICAgeworICAgICAgICBGVF9VSW50ICAgICAgbiwgbnVtX2Jhc2VfcG9pbnRzOworICAgICAgICBGVF9TdWJHbHlwaCAgc3ViZ2x5cGggICAgICAgPSBOVUxMOworCisgICAgICAgIEZUX1VJbnQgICAgICBudW1fcG9pbnRzICAgICA9IHN0YXJ0X3BvaW50OworICAgICAgICBGVF9VSW50ICAgICAgbnVtX3N1YmdseXBocyAgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHM7CisgICAgICAgIEZUX1VJbnQgICAgICBudW1fYmFzZV9zdWJncyA9IGdsb2FkZXItPmJhc2UubnVtX3N1YmdseXBoczsKKworICAgICAgICBGVF9TdHJlYW0gICAgb2xkX3N0cmVhbSAgICAgPSBsb2FkZXItPnN0cmVhbTsKKyAgICAgICAgRlRfSW50ICAgICAgIG9sZF9ieXRlX2xlbiAgID0gbG9hZGVyLT5ieXRlX2xlbjsKKworCisgICAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggZ2xvYWRlciApOworCisgICAgICAgIC8qIHJlYWQgZWFjaCBzdWJnbHlwaCBpbmRlcGVuZGVudGx5ICovCisgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX3N1YmdseXBoczsgbisrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1ZlY3RvciAgcHBbNF07CisKKworICAgICAgICAgIC8qIEVhY2ggdGltZSB3ZSBjYWxsIGxvYWRfdHJ1ZXR5cGVfZ2x5cGggaW4gdGhpcyBsb29wLCB0aGUgICAqLworICAgICAgICAgIC8qIHZhbHVlIG9mIGBnbG9hZGVyLmJhc2Uuc3ViZ2x5cGhzJyBjYW4gY2hhbmdlIGR1ZSB0byB0YWJsZSAqLworICAgICAgICAgIC8qIHJlYWxsb2NhdGlvbnMuICBXZSB0aHVzIG5lZWQgdG8gcmVjb21wdXRlIHRoZSBzdWJnbHlwaCAgICAqLworICAgICAgICAgIC8qIHBvaW50ZXIgb24gZWFjaCBpdGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHN1YmdseXBoID0gZ2xvYWRlci0+YmFzZS5zdWJnbHlwaHMgKyBudW1fYmFzZV9zdWJncyArIG47CisKKyAgICAgICAgICBwcFswXSA9IGxvYWRlci0+cHAxOworICAgICAgICAgIHBwWzFdID0gbG9hZGVyLT5wcDI7CisgICAgICAgICAgcHBbMl0gPSBsb2FkZXItPnBwMzsKKyAgICAgICAgICBwcFszXSA9IGxvYWRlci0+cHA0OworCisgICAgICAgICAgbnVtX2Jhc2VfcG9pbnRzID0gKEZUX1VJbnQpZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOworCisgICAgICAgICAgZXJyb3IgPSBsb2FkX3RydWV0eXBlX2dseXBoKCBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClzdWJnbHlwaC0+aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlX2NvdW50ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiByZXN0b3JlIHN1YmdseXBoIHBvaW50ZXIgKi8KKyAgICAgICAgICBzdWJnbHlwaCA9IGdsb2FkZXItPmJhc2Uuc3ViZ2x5cGhzICsgbnVtX2Jhc2Vfc3ViZ3MgKyBuOworCisgICAgICAgICAgLyogcmVzdG9yZSBwaGFudG9tIHBvaW50cyBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICBpZiAoICEoIHN1YmdseXBoLT5mbGFncyAmIFVTRV9NWV9NRVRSSUNTICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRlci0+cHAxID0gcHBbMF07CisgICAgICAgICAgICBsb2FkZXItPnBwMiA9IHBwWzFdOworICAgICAgICAgICAgbG9hZGVyLT5wcDMgPSBwcFsyXTsKKyAgICAgICAgICAgIGxvYWRlci0+cHA0ID0gcHBbM107CisgICAgICAgICAgfQorCisgICAgICAgICAgbnVtX3BvaW50cyA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKKworICAgICAgICAgIGlmICggbnVtX3BvaW50cyA9PSBudW1fYmFzZV9wb2ludHMgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAvKiBnbG9hZGVyLT5iYXNlLm91dGxpbmUgY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAwIC0oMSktPiBzdGFydF9wb2ludCAtKDIpLT4gbnVtX2Jhc2VfcG9pbnRzIC0oMyktPiBuX3BvaW50cy4gKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoMSk6IGV4aXN0cyBmcm9tIHRoZSBiZWdpbm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoMik6IGNvbXBvbmVudHMgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIHNvIGZhciAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoMyk6IHRoZSBuZXdseSBsb2FkZWQgY29tcG9uZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBlcnJvciA9IFRUX1Byb2Nlc3NfQ29tcG9zaXRlX0NvbXBvbmVudCggbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9iYXNlX3BvaW50cyApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgbG9hZGVyLT5zdHJlYW0gICA9IG9sZF9zdHJlYW07CisgICAgICAgIGxvYWRlci0+Ynl0ZV9sZW4gPSBvbGRfYnl0ZV9sZW47CisKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgZ2x5cGggKi8KKyAgICAgICAgbG9hZGVyLT5pbnNfcG9zID0gaW5zX3BvczsKKyAgICAgICAgaWYgKCBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICYmCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisgICAgICAgICAgICAgc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9JTlNUUiAmJgorI2VuZGlmCisgICAgICAgICAgICAgbnVtX3BvaW50cyA+IHN0YXJ0X3BvaW50ICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gVFRfUHJvY2Vzc19Db21wb3NpdGVfR2x5cGgoIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9jb250b3VyICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGludmFsaWQgY29tcG9zaXRlIGNvdW50IChuZWdhdGl2ZSBidXQgbm90IC0xKSAqLworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRXhpdDoKKworICAgIGlmICggb3BlbmVkX2ZyYW1lICkKKyAgICAgIGZhY2UtPmZvcmdldF9nbHlwaF9mcmFtZSggbG9hZGVyICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICBpZiAoIGdseXBoX2RhdGFfbG9hZGVkICkKKyAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmZyZWVfZ2x5cGhfZGF0YSgKKyAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5vYmplY3QsCisgICAgICAgICZnbHlwaF9kYXRhICk7CisKKyNlbmRpZgorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgY29tcHV0ZV9nbHlwaF9tZXRyaWNzKCBUVF9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4ICkKKyAgeworICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOworI2VuZGlmCisKKyAgICBGVF9CQm94ICAgICAgIGJib3g7CisgICAgRlRfRml4ZWQgICAgICB5X3NjYWxlOworICAgIFRUX0dseXBoU2xvdCAgZ2x5cGggPSBsb2FkZXItPmdseXBoOworICAgIFRUX1NpemUgICAgICAgc2l6ZSAgPSAoVFRfU2l6ZSlsb2FkZXItPnNpemU7CisKKworICAgIHlfc2NhbGUgPSAweDEwMDAwTDsKKyAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQorICAgICAgeV9zY2FsZSA9IHNpemUtPnJvb3QubWV0cmljcy55X3NjYWxlOworCisgICAgaWYgKCBnbHlwaC0+Zm9ybWF0ICE9IEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUgKQorICAgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggJmdseXBoLT5vdXRsaW5lLCAmYmJveCApOworICAgIGVsc2UKKyAgICAgIGJib3ggPSBsb2FkZXItPmJib3g7CisKKyAgICAvKiBnZXQgdGhlIGRldmljZS1pbmRlcGVuZGVudCBob3Jpem9udGFsIGFkdmFuY2U7IGl0IGlzIHNjYWxlZCBsYXRlciAqLworICAgIC8qIGJ5IHRoZSBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlID0gbG9hZGVyLT5saW5lYXI7CisKKyAgICBnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1ggPSBiYm94LnhNaW47CisgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gYmJveC55TWF4OworICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IGxvYWRlci0+cHAyLnggLSBsb2FkZXItPnBwMS54OworCisgICAgLyogYWRqdXN0IGFkdmFuY2Ugd2lkdGggdG8gdGhlIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgaGRteCB0YWJsZSAqLworICAgIGlmICggIWZhY2UtPnBvc3RzY3JpcHQuaXNGaXhlZFBpdGNoICAmJgorICAgICAgICAgSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSApCisgICAgeworICAgICAgRlRfQnl0ZSogIHdpZHRocDsKKworCisgICAgICB3aWR0aHAgPSB0dF9mYWNlX2dldF9kZXZpY2VfbWV0cmljcyggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueF9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4ICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCisgICAgICB7CisgICAgICAgIEZUX0Jvb2wgIGlnbm9yZV94X21vZGU7CisKKworICAgICAgICBpZ25vcmVfeF9tb2RlID0gRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZGVyLT5sb2FkX2ZsYWdzICkgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JFTkRFUl9NT0RFX01PTk8gKTsKKworICAgICAgICBpZiAoIHdpZHRocCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCAoIGlnbm9yZV94X21vZGUgJiYgbG9hZGVyLT5leGVjLT5jb21wYXRpYmxlX3dpZHRocyApIHx8CisgICAgICAgICAgICAgICAgIWlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgU1BIX09QVElPTl9CSVRNQVBfV0lEVEhTICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKQorICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlID0gKndpZHRocCA8PCA2OworICAgICAgfQorICAgICAgZWxzZQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAgIHsKKyAgICAgICAgaWYgKCB3aWR0aHAgKQorICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlID0gKndpZHRocCA8PCA2OworICAgICAgfQorICAgIH0KKworICAgIC8qIHNldCBnbHlwaCBkaW1lbnNpb25zICovCisgICAgZ2x5cGgtPm1ldHJpY3Mud2lkdGggID0gYmJveC54TWF4IC0gYmJveC54TWluOworICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IGJib3gueU1heCAtIGJib3gueU1pbjsKKworICAgIC8qIE5vdyB0YWtlIGNhcmUgb2YgdmVydGljYWwgbWV0cmljcy4gIEluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzICovCisgICAgLyogbm8gdmVydGljYWwgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBmb250IChyZWxhdGl2ZWx5IGNvbW1vbiksICAgKi8KKyAgICAvKiBjcmVhdGUgc29tZSBtZXRyaWNzIG1hbnVhbGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHsKKyAgICAgIEZUX1BvcyAgdG9wOyAgICAgIC8qIHNjYWxlZCB2ZXJ0aWNhbCB0b3Agc2lkZSBiZWFyaW5nICAqLworICAgICAgRlRfUG9zICBhZHZhbmNlOyAgLyogc2NhbGVkIHZlcnRpY2FsIGFkdmFuY2UgaGVpZ2h0ICAgICovCisKKworICAgICAgLyogR2V0IHRoZSB1bnNjYWxlZCB0b3AgYmVhcmluZyBhbmQgYWR2YW5jZSBoZWlnaHQuICovCisgICAgICBpZiAoIGZhY2UtPnZlcnRpY2FsX2luZm8gICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZmFjZS0+dmVydGljYWwubnVtYmVyX09mX1ZNZXRyaWNzID4gMCApCisgICAgICB7CisgICAgICAgIHRvcCA9IChGVF9TaG9ydClGVF9EaXZGaXgoIGxvYWRlci0+cHAzLnkgLSBiYm94LnlNYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfc2NhbGUgKTsKKworICAgICAgICBpZiAoIGxvYWRlci0+cHAzLnkgPD0gbG9hZGVyLT5wcDQueSApCisgICAgICAgICAgYWR2YW5jZSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhZHZhbmNlID0gKEZUX1VTaG9ydClGVF9EaXZGaXgoIGxvYWRlci0+cHAzLnkgLSBsb2FkZXItPnBwNC55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9zY2FsZSApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBGVF9Qb3MgIGhlaWdodDsKKworCisgICAgICAgIC8qIFhYWCBDb21wdXRlIHRvcCBzaWRlIGJlYXJpbmcgYW5kIGFkdmFuY2UgaGVpZ2h0IGluICAqLworICAgICAgICAvKiAgICAgR2V0X1ZNZXRyaWNzIGluc3RlYWQgb2YgaGVyZS4gICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAvKiBOT1RFOiBUaGUgT1MvMiB2YWx1ZXMgYXJlIHRoZSBvbmx5IGBwb3J0YWJsZScgb25lcywgKi8KKyAgICAgICAgLyogICAgICAgd2hpY2ggaXMgd2h5IHdlIHVzZSB0aGVtLCBpZiB0aGVyZSBpcyBhbiBPUy8yICovCisgICAgICAgIC8qICAgICAgIHRhYmxlIGluIHRoZSBmb250LiAgT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlICAgICAqLworICAgICAgICAvKiAgICAgICB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgaG9yaXpvbnRhbCBoZWFkZXIuICAgICAgKi8KKworICAgICAgICBoZWlnaHQgPSAoRlRfU2hvcnQpRlRfRGl2Rml4KCBiYm94LnlNYXggLSBiYm94LnlNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfc2NhbGUgKTsKKyAgICAgICAgaWYgKCBmYWNlLT5vczIudmVyc2lvbiAhPSAweEZGRkZVICkKKyAgICAgICAgICBhZHZhbmNlID0gKEZUX1BvcykoIGZhY2UtPm9zMi5zVHlwb0FzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPm9zMi5zVHlwb0Rlc2NlbmRlciApOworICAgICAgICBlbHNlCisgICAgICAgICAgYWR2YW5jZSA9IChGVF9Qb3MpKCBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhvcml6b250YWwuRGVzY2VuZGVyICk7CisKKyAgICAgICAgdG9wID0gKCBhZHZhbmNlIC0gaGVpZ2h0ICkgLyAyOworICAgICAgfQorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgICAgeworICAgICAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMqICBpbmNyOworICAgICAgICBGVF9JbmNyZW1lbnRhbF9NZXRyaWNzUmVjICAgICBtZXRyaWNzOworICAgICAgICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICBlcnJvcjsKKworCisgICAgICAgIGluY3IgPSBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2U7CisKKyAgICAgICAgLyogSWYgdGhpcyBpcyBhbiBpbmNyZW1lbnRhbGx5IGxvYWRlZCBmb250IHNlZSBpZiB0aGVyZSBhcmUgKi8KKyAgICAgICAgLyogb3ZlcnJpZGluZyBtZXRyaWNzIGZvciB0aGlzIGdseXBoLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpbmNyICYmIGluY3ItPmZ1bmNzLT5nZXRfZ2x5cGhfbWV0cmljcyApCisgICAgICAgIHsKKyAgICAgICAgICBtZXRyaWNzLmJlYXJpbmdfeCA9IDA7CisgICAgICAgICAgbWV0cmljcy5iZWFyaW5nX3kgPSB0b3A7CisgICAgICAgICAgbWV0cmljcy5hZHZhbmNlICAgPSBhZHZhbmNlOworCisgICAgICAgICAgZXJyb3IgPSBpbmNyLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MoIGluY3ItPm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXRyaWNzICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgICAgICB0b3AgICAgID0gbWV0cmljcy5iZWFyaW5nX3k7CisgICAgICAgICAgYWR2YW5jZSA9IG1ldHJpY3MuYWR2YW5jZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBHV1c6IERvIHZlcnRpY2FsIG1ldHJpY3MgZ2V0IGxvYWRlZCBpbmNyZW1lbnRhbGx5IHRvbz8gKi8KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgICAgZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlID0gYWR2YW5jZTsKKworICAgICAgLyogc2NhbGUgdGhlIG1ldHJpY3MgKi8KKyAgICAgIGlmICggISggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApICkKKyAgICAgIHsKKyAgICAgICAgdG9wICAgICA9IEZUX011bEZpeCggdG9wLCAgICAgeV9zY2FsZSApOworICAgICAgICBhZHZhbmNlID0gRlRfTXVsRml4KCBhZHZhbmNlLCB5X3NjYWxlICk7CisgICAgICB9CisKKyAgICAgIC8qIFhYWDogZm9yIG5vdywgd2UgaGF2ZSBubyBiZXR0ZXIgYWxnb3JpdGhtIGZvciB0aGUgbHNiLCBidXQgaXQgKi8KKyAgICAgIC8qICAgICAgc2hvdWxkIHdvcmsgZmluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWCA9IGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlIC8gMjsKKyAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IHRvcDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlICA9IGFkdmFuY2U7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGxvYWRfc2JpdF9pbWFnZSggVFRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgIFRUX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgVFRfRmFjZSAgICAgICAgICAgICBmYWNlOworICAgIFNGTlRfU2VydmljZSAgICAgICAgc2ZudDsKKyAgICBGVF9TdHJlYW0gICAgICAgICAgIHN0cmVhbTsKKyAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOworICAgIFRUX1NCaXRfTWV0cmljc1JlYyAgbWV0cmljczsKKworCisgICAgZmFjZSAgID0gKFRUX0ZhY2UpZ2x5cGgtPmZhY2U7CisgICAgc2ZudCAgID0gKFNGTlRfU2VydmljZSlmYWNlLT5zZm50OworICAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworCisgICAgZXJyb3IgPSBzZm50LT5sb2FkX3NiaXRfaW1hZ2UoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtPnN0cmlrZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoLT5iaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXRyaWNzICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGdseXBoLT5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOworICAgICAgZ2x5cGgtPm91dGxpbmUubl9jb250b3VycyA9IDA7CisKKyAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgPDwgNjsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgPDwgNjsKKworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCA8PCA2OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSA8PCA2OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICA8PCA2OworCisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYIDw8IDY7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZIDw8IDY7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgIDw8IDY7CisKKyAgICAgIGdseXBoLT5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworCisgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICB7CisgICAgICAgIGdseXBoLT5iaXRtYXBfbGVmdCA9IG1ldHJpY3MudmVydEJlYXJpbmdYOworICAgICAgICBnbHlwaC0+Yml0bWFwX3RvcCAgPSBtZXRyaWNzLnZlcnRCZWFyaW5nWTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZ2x5cGgtPmJpdG1hcF9sZWZ0ID0gbWV0cmljcy5ob3JpQmVhcmluZ1g7CisgICAgICAgIGdseXBoLT5iaXRtYXBfdG9wICA9IG1ldHJpY3MuaG9yaUJlYXJpbmdZOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdHRfbG9hZGVyX2luaXQoIFRUX0xvYWRlciAgICAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgVFRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgVFRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgZ2x5Zl90YWJsZV9vbmx5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIFRUX0ZhY2UgICAgZmFjZTsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbTsKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgICBGVF9Cb29sICAgIHBlZGFudGljID0gRlRfQk9PTCggbG9hZF9mbGFncyAmIEZUX0xPQURfUEVEQU5USUMgKTsKKyNlbmRpZgorCisKKyAgICBmYWNlICAgPSAoVFRfRmFjZSlnbHlwaC0+ZmFjZTsKKyAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKworICAgIEZUX01FTV9aRVJPKCBsb2FkZXIsIHNpemVvZiAoIFRUX0xvYWRlclJlYyApICk7CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAgIC8qIGxvYWQgZXhlY3V0aW9uIGNvbnRleHQgKi8KKyAgICBpZiAoIElTX0hJTlRFRCggbG9hZF9mbGFncyApICYmICFnbHlmX3RhYmxlX29ubHkgKQorICAgIHsKKyAgICAgIFRUX0V4ZWNDb250ZXh0ICBleGVjOworICAgICAgRlRfQm9vbCAgICAgICAgIGdyYXlzY2FsZTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CisKKyAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsX2hpbnRpbmcgPSBGQUxTRTsKKworI2lmIDAKKyAgICAgIC8qIG5vdCB1c2VkIHlldCAqLworICAgICAgRlRfQm9vbCAgY29tcGF0aWJsZV93aWR0aHM7CisgICAgICBGVF9Cb29sICBzeW1tZXRyaWNhbF9zbW9vdGhpbmc7CisgICAgICBGVF9Cb29sICBiZ3I7CisgICAgICBGVF9Cb29sICB2ZXJ0aWNhbF9sY2Q7CisgICAgICBGVF9Cb29sICBzdWJwaXhlbF9wb3NpdGlvbmVkOworICAgICAgRlRfQm9vbCAgZ3JheV9jbGVhcnR5cGU7CisjZW5kaWYKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgICAgRlRfQm9vbCAgcmVleGVjdXRlID0gRkFMU0U7CisKKworICAgICAgaWYgKCBzaXplLT5ieXRlY29kZV9yZWFkeSA8IDAgfHwgc2l6ZS0+Y3Z0X3JlYWR5IDwgMCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gdHRfc2l6ZV9yZWFkeV9ieXRlY29kZSggc2l6ZSwgcGVkYW50aWMgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIHNpemUtPmJ5dGVjb2RlX3JlYWR5ICkKKyAgICAgICAgcmV0dXJuIHNpemUtPmJ5dGVjb2RlX3JlYWR5OworICAgICAgZWxzZSBpZiAoIHNpemUtPmN2dF9yZWFkeSApCisgICAgICAgIHJldHVybiBzaXplLT5jdnRfcmVhZHk7CisKKyAgICAgIC8qIHF1ZXJ5IG5ldyBleGVjdXRpb24gY29udGV4dCAqLworICAgICAgZXhlYyA9IHNpemUtPmNvbnRleHQ7CisgICAgICBpZiAoICFleGVjICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDb3VsZF9Ob3RfRmluZF9Db250ZXh0ICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCisgICAgICB7CisgICAgICAgIHN1YnBpeGVsX2hpbnRpbmcgPSBGVF9CT09MKCAoIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9NT05PICAgICAgICAgICAgICAgKSAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSF9PUFRJT05fU0VUX1NVQlBJWEVMICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKCBzdWJwaXhlbF9oaW50aW5nICkKKyAgICAgICAgICBncmF5c2NhbGUgPSBGQUxTRTsKKyAgICAgICAgZWxzZSBpZiAoIFNQSF9PUFRJT05fU0VUX0dSQVlTQ0FMRSApCisgICAgICAgIHsKKyAgICAgICAgICBncmF5c2NhbGUgICAgICAgID0gVFJVRTsKKyAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGdyYXlzY2FsZSA9IEZBTFNFOworCisgICAgICAgIGlmICggRlRfSVNfVFJJQ0tZKCBnbHlwaC0+ZmFjZSApICkKKyAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nID0gRkFMU0U7CisKKyAgICAgICAgZXhlYy0+aWdub3JlX3hfbW9kZSAgICAgID0gc3VicGl4ZWxfaGludGluZyB8fCBncmF5c2NhbGU7CisgICAgICAgIGV4ZWMtPnJhc3Rlcml6ZXJfdmVyc2lvbiA9IFNQSF9PUFRJT05fU0VUX1JBU1RFUklaRVJfVkVSU0lPTjsKKyAgICAgICAgaWYgKCBleGVjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUkFTVEVSSVpFUl8zNSApCisgICAgICAgICAgZXhlYy0+cmFzdGVyaXplcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNTsKKworI2lmIDEKKyAgICAgICAgZXhlYy0+Y29tcGF0aWJsZV93aWR0aHMgICAgID0gU1BIX09QVElPTl9TRVRfQ09NUEFUSUJMRV9XSURUSFM7CisgICAgICAgIGV4ZWMtPnN5bW1ldHJpY2FsX3Ntb290aGluZyA9IFRSVUU7CisgICAgICAgIGV4ZWMtPmJnciAgICAgICAgICAgICAgICAgICA9IEZBTFNFOworICAgICAgICBleGVjLT52ZXJ0aWNhbF9sY2QgICAgICAgICAgPSBGQUxTRTsKKyAgICAgICAgZXhlYy0+c3VicGl4ZWxfcG9zaXRpb25lZCAgID0gVFJVRTsKKyAgICAgICAgZXhlYy0+Z3JheV9jbGVhcnR5cGUgICAgICAgID0gRkFMU0U7CisjZWxzZSAvKiAwICovCisgICAgICAgIGV4ZWMtPmNvbXBhdGlibGVfd2lkdGhzID0KKyAgICAgICAgICBGVF9CT09MKCBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICkgIT0KKyAgICAgICAgICAgICAgICAgICBUVF9MT0FEX0NPTVBBVElCTEVfV0lEVEhTICk7CisgICAgICAgIGV4ZWMtPnN5bW1ldHJpY2FsX3Ntb290aGluZyA9CisgICAgICAgICAgRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgVFRfTE9BRF9TWU1NRVRSSUNBTF9TTU9PVEhJTkcgKTsKKyAgICAgICAgZXhlYy0+YmdyID0KKyAgICAgICAgICBGVF9CT09MKCBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICkgIT0KKyAgICAgICAgICAgICAgICAgICBUVF9MT0FEX0JHUiApOworICAgICAgICBleGVjLT52ZXJ0aWNhbF9sY2QgPQorICAgICAgICAgIEZUX0JPT0woIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQorICAgICAgICAgICAgICAgICAgIFRUX0xPQURfVkVSVElDQUxfTENEICk7CisgICAgICAgIGV4ZWMtPnN1YnBpeGVsX3Bvc2l0aW9uZWQgPQorICAgICAgICAgIEZUX0JPT0woIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQorICAgICAgICAgICAgICAgICAgIFRUX0xPQURfU1VCUElYRUxfUE9TSVRJT05FRCApOworICAgICAgICBleGVjLT5ncmF5X2NsZWFydHlwZSA9CisgICAgICAgICAgRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgVFRfTE9BRF9HUkFZX0NMRUFSVFlQRSApOworI2VuZGlmIC8qIDAgKi8KKworICAgICAgfQorICAgICAgZWxzZQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAgIHsKKyAgICAgICAgZ3JheXNjYWxlID0gRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JFTkRFUl9NT0RFX01PTk8gKTsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBUVF9Mb2FkX0NvbnRleHQoIGV4ZWMsIGZhY2UsIHNpemUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCisgICAgICB7CisgICAgICAgIC8qIGEgY2hhbmdlIGZyb20gbW9ubyB0byBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLworICAgICAgICAvKiByZXF1aXJlcyBhIHJlLWV4ZWN1dGlvbiBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBzdWJwaXhlbF9oaW50aW5nICE9IGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmcgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBzdWJwaXhlbCBoaW50aW5nIGNoYW5nZSwiCisgICAgICAgICAgICAgICAgICAgICAgIiByZS1leGVjdXRpbmcgYHByZXAnIHRhYmxlXG4iICkpOworCisgICAgICAgICAgZXhlYy0+c3VicGl4ZWxfaGludGluZyA9IHN1YnBpeGVsX2hpbnRpbmc7CisgICAgICAgICAgcmVleGVjdXRlICAgICAgICAgICAgICA9IFRSVUU7CisgICAgICAgIH0KKworICAgICAgICAvKiBhIGNoYW5nZSBmcm9tIG1vbm8gdG8gZ3JheXNjYWxlIHJlbmRlcmluZyAoYW5kIHZpY2UgdmVyc2EpICovCisgICAgICAgIC8qIHJlcXVpcmVzIGEgcmUtZXhlY3V0aW9uIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBncmF5c2NhbGUgIT0gZXhlYy0+Z3JheXNjYWxlICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNCgoICJ0dF9sb2FkZXJfaW5pdDogZ3JheXNjYWxlIGhpbnRpbmcgY2hhbmdlLCIKKyAgICAgICAgICAgICAgICAgICAgICAiIHJlLWV4ZWN1dGluZyBgcHJlcCcgdGFibGVcbiIgKSk7CisKKyAgICAgICAgICBleGVjLT5ncmF5c2NhbGUgPSBncmF5c2NhbGU7CisgICAgICAgICAgcmVleGVjdXRlICAgICAgID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAgIHsKKyAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBtb25vIHRvIGdyYXlzY2FsZSByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLworICAgICAgICAvKiByZXF1aXJlcyBhIHJlLWV4ZWN1dGlvbiBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggZ3JheXNjYWxlICE9IGV4ZWMtPmdyYXlzY2FsZSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAidHRfbG9hZGVyX2luaXQ6IGdyYXlzY2FsZSBoaW50aW5nIGNoYW5nZSwiCisgICAgICAgICAgICAgICAgICAgICAgIiByZS1leGVjdXRpbmcgYHByZXAnIHRhYmxlXG4iICkpOworCisgICAgICAgICAgZXhlYy0+Z3JheXNjYWxlID0gZ3JheXNjYWxlOworICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCByZWV4ZWN1dGUgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICBpOworCisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBzaXplLT5jdnRfc2l6ZTsgaSsrICkKKyAgICAgICAgICBzaXplLT5jdnRbaV0gPSBGVF9NdWxGaXgoIGZhY2UtPmN2dFtpXSwgc2l6ZS0+dHRtZXRyaWNzLnNjYWxlICk7CisgICAgICAgIGVycm9yID0gdHRfc2l6ZV9ydW5fcHJlcCggc2l6ZSwgcGVkYW50aWMgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgfQorCisgICAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBjdnQgcHJvZ3JhbSBoYXMgZGlzYWJsZWQgaGludGluZyAqLworICAgICAgaWYgKCBleGVjLT5HUy5pbnN0cnVjdF9jb250cm9sICYgMSApCisgICAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9OT19ISU5USU5HOworCisgICAgICAvKiBsb2FkIGRlZmF1bHQgZ3JhcGhpY3Mgc3RhdGUgLS0gaWYgbmVlZGVkICovCisgICAgICBpZiAoIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiAyICkKKyAgICAgICAgZXhlYy0+R1MgPSB0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBmb250IGhpbnRlZCBmb3IgQ2xlYXJUeXBlIC0tICAgICAgICAgICAqLworICAgICAgLyogbm90ZSB0aGF0IHRoaXMgZmxhZyBjYW4gYWxzbyBiZSBtb2RpZmllZCBpbiBhIGdseXBoJ3MgYnl0ZWNvZGUgKi8KKyAgICAgIGlmICggZXhlYy0+R1MuaW5zdHJ1Y3RfY29udHJvbCAmIDQgKQorICAgICAgICBleGVjLT5pZ25vcmVfeF9tb2RlID0gMDsKKyNlbmRpZgorCisgICAgICBleGVjLT5wZWRhbnRpY19oaW50aW5nID0gRlRfQk9PTCggbG9hZF9mbGFncyAmIEZUX0xPQURfUEVEQU5USUMgKTsKKyAgICAgIGxvYWRlci0+ZXhlYyA9IGV4ZWM7CisgICAgICBsb2FkZXItPmluc3RydWN0aW9ucyA9IGV4ZWMtPmdseXBoSW5zOworICAgIH0KKworI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisgICAgLyogc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnbHlwaCB0YWJsZSAtLSBmb3IgVHlwZSA0MiBmb250cyAgICAgKi8KKyAgICAvKiB0aGUgdGFibGUgbWlnaHQgYmUgYWNjZXNzZWQgZnJvbSBhIFBvc3RzY3JpcHQgc3RyZWFtIG9yIHNvbWV0aGluZyAqLworICAgIC8qIGVsc2UuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgICBsb2FkZXItPmdseWZfb2Zmc2V0ID0gMDsKKyAgICBlbHNlCisKKyNlbmRpZgorCisgICAgeworICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2dseWYsIHN0cmVhbSwgMCApOworCisgICAgICBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIFRhYmxlX01pc3NpbmcgKSApCisgICAgICAgIGxvYWRlci0+Z2x5Zl9vZmZzZXQgPSAwOworICAgICAgZWxzZSBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAidHRfbG9hZGVyX2luaXQ6IGNvdWxkIG5vdCBhY2Nlc3MgZ2x5cGggdGFibGVcbiIgKSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgbG9hZGVyLT5nbHlmX29mZnNldCA9IEZUX1NUUkVBTV9QT1MoKTsKKyAgICB9CisKKyAgICAvKiBnZXQgZmFjZSdzIGdseXBoIGxvYWRlciAqLworICAgIGlmICggIWdseWZfdGFibGVfb25seSApCisgICAgeworICAgICAgRlRfR2x5cGhMb2FkZXIgIGdsb2FkZXIgPSBnbHlwaC0+aW50ZXJuYWwtPmxvYWRlcjsKKworCisgICAgICBGVF9HbHlwaExvYWRlcl9SZXdpbmQoIGdsb2FkZXIgKTsKKyAgICAgIGxvYWRlci0+Z2xvYWRlciA9IGdsb2FkZXI7CisgICAgfQorCisgICAgbG9hZGVyLT5sb2FkX2ZsYWdzID0gKEZUX1VMb25nKWxvYWRfZmxhZ3M7CisKKyAgICBsb2FkZXItPmZhY2UgICA9IChGVF9GYWNlKWZhY2U7CisgICAgbG9hZGVyLT5zaXplICAgPSAoRlRfU2l6ZSlzaXplOworICAgIGxvYWRlci0+Z2x5cGggID0gKEZUX0dseXBoU2xvdClnbHlwaDsKKyAgICBsb2FkZXItPnN0cmVhbSA9IHN0cmVhbTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBsb2FkIGEgc2luZ2xlIGdseXBoIHdpdGhpbiBhIGdpdmVuIGdseXBoIHNsb3QsICAqLworICAvKiAgICBmb3IgYSBnaXZlbiBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaCAgICAgICA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBzbG90IG9iamVjdCB3aGVyZSB0aGUgZ2x5cGggICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgd2lsbCBiZSBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugc2l6ZSBhdCB3aGljaCB0aGUgZ2x5cGggKi8KKyAgLyogICAgICAgICAgICAgICAgICAgbXVzdCBiZSBzY2FsZWQvbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGdseXBoIGluIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZSAqLworICAvKiAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1hYWCBjb25zdGFudHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUVF9Mb2FkX0dseXBoKCBUVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgIFRUX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApCisgIHsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIFRUX0xvYWRlclJlYyAgbG9hZGVyOworCisKKyAgICBGVF9UUkFDRTEoKCAiVFRfTG9hZF9HbHlwaDogZ2x5cGggaW5kZXggJWRcbiIsIGdseXBoX2luZGV4ICkpOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisKKyAgICAvKiB0cnkgdG8gbG9hZCBlbWJlZGRlZCBiaXRtYXAgaWYgYW55ICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogWFhYOiBUaGUgY29udmVudGlvbiBzaG91bGQgYmUgZW1waGFzaXplZCBpbiAgICAgKi8KKyAgICAvKiAgICAgIHRoZSBkb2N1bWVudHMgYmVjYXVzZSBpdCBjYW4gYmUgY29uZnVzaW5nLiAqLworICAgIGlmICggc2l6ZS0+c3RyaWtlX2luZGV4ICE9IDB4RkZGRkZGRkZVTCAgICAgICYmCisgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0JJVE1BUCApID09IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gbG9hZF9zYml0X2ltYWdlKCBzaXplLCBnbHlwaCwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBGVF9JU19TQ0FMQUJMRSggZ2x5cGgtPmZhY2UgKSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBmb3IgdGhlIGJib3ggd2UgbmVlZCB0aGUgaGVhZGVyIG9ubHkgKi8KKyAgICAgICAgICAodm9pZCl0dF9sb2FkZXJfaW5pdCggJmxvYWRlciwgc2l6ZSwgZ2x5cGgsIGxvYWRfZmxhZ3MsIFRSVUUgKTsKKyAgICAgICAgICAodm9pZClsb2FkX3RydWV0eXBlX2dseXBoKCAmbG9hZGVyLCBnbHlwaF9pbmRleCwgMCwgVFJVRSApOworICAgICAgICAgIGdseXBoLT5saW5lYXJIb3JpQWR2YW5jZSA9IGxvYWRlci5saW5lYXI7CisgICAgICAgICAgZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlID0gbG9hZGVyLnZhZHZhbmNlOworCisgICAgICAgICAgLyogc2FuaXR5IGNoZWNrczogaWYgYHh4eEFkdmFuY2UnIGluIHRoZSBzYml0IG1ldHJpYyAqLworICAgICAgICAgIC8qIHN0cnVjdHVyZSBpc24ndCBzZXQsIHVzZSBgbGluZWFyWFhYQWR2YW5jZScgICAgICAqLworICAgICAgICAgIGlmICggIWdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICYmIGdseXBoLT5saW5lYXJIb3JpQWR2YW5jZSApCisgICAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9CisgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtPnJvb3QubWV0cmljcy54X3NjYWxlICk7CisgICAgICAgICAgaWYgKCAhZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgJiYgZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlICkKKyAgICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlID0KKyAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaC0+bGluZWFyVmVydEFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnlfc2NhbGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgICB9CisgICAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKyAgICAvKiBpZiBGVF9MT0FEX05PX1NDQUxFIGlzIG5vdCBzZXQsIGB0dG1ldHJpY3MnIG11c3QgYmUgdmFsaWQgKi8KKyAgICBpZiAoICEoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgJiYgIXNpemUtPnR0bWV0cmljcy52YWxpZCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU2l6ZV9IYW5kbGUgKTsKKworICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfU0JJVFNfT05MWSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGVycm9yID0gdHRfbG9hZGVyX2luaXQoICZsb2FkZXIsIHNpemUsIGdseXBoLCBsb2FkX2ZsYWdzLCBGQUxTRSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZ2x5cGgtPmZvcm1hdCAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORTsKKyAgICBnbHlwaC0+bnVtX3N1YmdseXBocyA9IDA7CisgICAgZ2x5cGgtPm91dGxpbmUuZmxhZ3MgPSAwOworCisgICAgLyogbWFpbiBsb2FkaW5nIGxvb3AgKi8KKyAgICBlcnJvciA9IGxvYWRfdHJ1ZXR5cGVfZ2x5cGgoICZsb2FkZXIsIGdseXBoX2luZGV4LCAwLCBGQUxTRSApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBpZiAoIGdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSApCisgICAgICB7CisgICAgICAgIGdseXBoLT5udW1fc3ViZ2x5cGhzID0gbG9hZGVyLmdsb2FkZXItPmJhc2UubnVtX3N1YmdseXBoczsKKyAgICAgICAgZ2x5cGgtPnN1YmdseXBocyAgICAgPSBsb2FkZXIuZ2xvYWRlci0+YmFzZS5zdWJnbHlwaHM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGdseXBoLT5vdXRsaW5lICAgICAgICA9IGxvYWRlci5nbG9hZGVyLT5iYXNlLm91dGxpbmU7CisgICAgICAgIGdseXBoLT5vdXRsaW5lLmZsYWdzICY9IH5GVF9PVVRMSU5FX1NJTkdMRV9QQVNTOworCisgICAgICAgIC8qIFRyYW5zbGF0ZSBhcnJheSBzbyB0aGF0ICgwLDApIGlzIHRoZSBnbHlwaCdzIG9yaWdpbi4gIE5vdGUgICovCisgICAgICAgIC8qIHRoYXQgdGhpcyBiZWhhdmlvdXIgaXMgaW5kZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIGJpdCAxIG9mICovCisgICAgICAgIC8qIHRoZSBgZmxhZ3MnIGZpZWxkIGluIHRoZSBgaGVhZCcgdGFibGUgLS0gYXQgbGVhc3QgbWFqb3IgICAgICovCisgICAgICAgIC8qIGFwcGxpY2F0aW9ucyBsaWtlIEFjcm9yZWFkIGluZGljYXRlIHRoYXQuICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbG9hZGVyLnBwMS54ICkKKyAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJmdseXBoLT5vdXRsaW5lLCAtbG9hZGVyLnBwMS54LCAwICk7CisgICAgICB9CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAgICAgaWYgKCBJU19ISU5URUQoIGxvYWRfZmxhZ3MgKSApCisgICAgICB7CisgICAgICAgIGlmICggbG9hZGVyLmV4ZWMtPkdTLnNjYW5fY29udHJvbCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBjb252ZXJ0IHNjYW4gY29udmVyc2lvbiBtb2RlIHRvIEZUX09VVExJTkVfWFhYIGZsYWdzICovCisgICAgICAgICAgc3dpdGNoICggbG9hZGVyLmV4ZWMtPkdTLnNjYW5fdHlwZSApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgMDogLyogc2ltcGxlIGRyb3Atb3V0cyBpbmNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICAgIGdseXBoLT5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfSU5DTFVERV9TVFVCUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTogLyogc2ltcGxlIGRyb3Atb3V0cyBleGNsdWRpbmcgc3R1YnMgKi8KKyAgICAgICAgICAgIC8qIG5vdGhpbmc7IGl0J3MgdGhlIGRlZmF1bHQgcmVuZGVyaW5nIG1vZGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogLyogc21hcnQgZHJvcC1vdXRzIGluY2x1ZGluZyBzdHVicyAqLworICAgICAgICAgICAgZ2x5cGgtPm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDU6IC8qIHNtYXJ0IGRyb3Atb3V0cyBleGNsdWRpbmcgc3R1YnMgICovCisgICAgICAgICAgICBnbHlwaC0+b3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OiAvKiBubyBkcm9wLW91dCBjb250cm9sICovCisgICAgICAgICAgICBnbHlwaC0+b3V0bGluZS5mbGFncyB8PSBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZ2x5cGgtPm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFM7CisgICAgICB9CisKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgICAgZXJyb3IgPSBjb21wdXRlX2dseXBoX21ldHJpY3MoICZsb2FkZXIsIGdseXBoX2luZGV4ICk7CisgICAgfQorCisgICAgLyogU2V0IHRoZSBgaGlnaCBwcmVjaXNpb24nIGJpdCBmbGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhpcyBpcyBfY3JpdGljYWxfIHRvIGdldCBjb3JyZWN0IG91dHB1dCBmb3IgbW9ub2Nocm9tZSAgICAgICovCisgICAgLyogVHJ1ZVR5cGUgZ2x5cGhzIGF0IGFsbCBzaXplcyB1c2luZyB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCAhKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApICYmCisgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueV9wcGVtIDwgMjQgICAgICkKKyAgICAgIGdseXBoLT5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfSElHSF9QUkVDSVNJT047CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGdsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzMjU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0Z2xvYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1RUR0xPQURfSF9fCisjZGVmaW5lIF9fVFRHTE9BRF9IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJ0dG9ianMuaCIKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorI2luY2x1ZGUgInR0aW50ZXJwLmgiCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVFRfSW5pdF9HbHlwaF9Mb2FkaW5nKCBUVF9GYWNlICBmYWNlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUVF9HZXRfSE1ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgIGxzYiwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBhdyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVFRfR2V0X1ZNZXRyaWNzKCBUVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICB5TWF4LAorICAgICAgICAgICAgICAgICAgIEZUX1Nob3J0KiAgIHRzYiwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICBhaCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFRUX0xvYWRfR2x5cGgoIFRUX1NpemUgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgVFRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICBsb2FkX2ZsYWdzICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVEdMT0FEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGd4dmFyLmMgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjEyNDgzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGd4dmFyLmMKQEAgLTAsMCArMSwyMDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGd4dmFyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnLCBhbmQgR2VvcmdlIFdpbGxpYW1zLiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBcHBsZSBkb2N1bWVudHMgdGhlIGBmdmFyJywgYGd2YXInLCBgY3ZhcicsIGFuZCBgYXZhcicgdGFibGVzIGF0ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNltmZ2NhXXZhci5odG1sICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgYGZ2YXInIGlzIGluY29uc2lzdGVudC4gIEF0IG9uZSBwb2ludCBpdCBzYXlzICAgKi8KKyAgLyogdGhhdCBgY291bnRTaXplUGFpcnMnIHNob3VsZCBiZSAzLCBhdCBhbm90aGVyIHBvaW50IDIuICBJdCBzaG91bGQgICAgICovCisgIC8qIGJlIDIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGRvY3VtZW50YXRpb24gZm9yIGBndmFyJyBpcyBub3QgaW50ZWxsaWdpYmxlOyBgY3ZhcicgcmVmZXJzIHlvdSAgICovCisgIC8qIHRvIGBndmFyJyBhbmQgaXMgdGh1cyBhbHNvIGluY29tcHJlaGVuc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGRvY3VtZW50YXRpb24gZm9yIGBhdmFyJyBhcHBlYXJzIGNvcnJlY3QsIGJ1dCBBcHBsZSBoYXMgbm8gZm9udHMgICovCisgIC8qIHdpdGggYW4gYGF2YXInIHRhYmxlLCBzbyBpdCBpcyBoYXJkIHRvIHRlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTWFueSB0aGFua3MgdG8gSm9obiBKZW5raW5zIChhdCBBcHBsZSkgaW4gZmlndXJpbmcgdGhpcyBvdXQuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQXBwbGUncyBga2VybicgdGFibGUgaGFzIHNvbWUgcmVmZXJlbmNlcyB0byB0dXBsZSBpbmRpY2VzLCBidXQgYXMgICAgICovCisgIC8qIHRoZXJlIGlzIG5vIGluZGljYXRpb24gd2hlcmUgdGhlc2UgaW5kaWNlcyBhcmUgZGVmaW5lZCwgbm9yIGhvdyB0byAgICAqLworICAvKiBpbnRlcnBvbGF0ZSB0aGUga2VybmluZyB2YWx1ZXMgKGRpZmZlcmVudCB0dXBsZXMgaGF2ZSBkaWZmZXJlbnQgICAgICAgKi8KKyAgLyogY2xhc3NlcykgdGhpcyBpc3N1ZSBpcyBpZ25vcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKworI2luY2x1ZGUgInR0cGxvYWQuaCIKKyNpbmNsdWRlICJ0dGd4dmFyLmgiCisKKyNpbmNsdWRlICJ0dGVycm9ycy5oIgorCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisKKworI2RlZmluZSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoRlRfVUxvbmcpKCAoc3RyZWFtKS0+Y3Vyc29yIC0gKHN0cmVhbSktPmJhc2UgKQorI2RlZmluZSBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmYgKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChzdHJlYW0pLT5jdXJzb3IgPSAoc3RyZWFtKS0+YmFzZSArIChvZmYpICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Z3h2YXIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwgUm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gQUxMX1BPSU5UUyBpcyB1c2VkIGluIGBmdF92YXJfcmVhZHBhY2tlZHBvaW50cycuICBJdCAgICAgICAgKi8KKyAgLyogaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBkZWx0YSBmb3IgZXZlcnkgcG9pbnQgd2l0aG91dCBuZWVkaW5nIHRvICAgICovCisgIC8qIGVudW1lcmF0ZSBhbGwgb2YgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBlbnN1cmUgdGhhdCB2YWx1ZSBgMCcgaGFzIHRoZSBzYW1lIHdpZHRoIGFzIGEgcG9pbnRlciAqLworI2RlZmluZSBBTExfUE9JTlRTICAoRlRfVVNob3J0Kil+KEZUX1B0ckRpc3QpMAorCisKKyNkZWZpbmUgR1hfUFRfUE9JTlRTX0FSRV9XT1JEUyAgICAgIDB4ODBVCisjZGVmaW5lIEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLICAweDdGVQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVhZCBhIHNldCBvZiBwb2ludHMgdG8gd2hpY2ggdGhlIGZvbGxvd2luZyBkZWx0YXMgd2lsbCBhcHBseS4gICAgICovCisgIC8qICAgIFBvaW50cyBhcmUgcGFja2VkIHdpdGggYSBydW4gbGVuZ3RoIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSAgICA6OiBUaGUgZGF0YSBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvaW50X2NudCA6OiBUaGUgbnVtYmVyIG9mIHBvaW50cyByZWFkLiAgQSB6ZXJvIHZhbHVlIG1lYW5zIHRoYXQgICAqLworICAvKiAgICAgICAgICAgICAgICAgYWxsIHBvaW50cyBpbiB0aGUgZ2x5cGggd2lsbCBiZSBhZmZlY3RlZCwgd2l0aG91dCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgIGVudW1lcmF0aW5nIHRoZW0gaW5kaXZpZHVhbGx5LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gYXJyYXkgb2YgRlRfVVNob3J0IGNvbnRhaW5pbmcgdGhlIGFmZmVjdGVkIHBvaW50cyBvciB0aGUgICAgICAgICovCisgIC8qICAgIHNwZWNpYWwgdmFsdWUgQUxMX1BPSU5UUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX1VTaG9ydCoKKyAgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICpwb2ludF9jbnQgKQorICB7CisgICAgRlRfVVNob3J0ICpwb2ludHMgPSBOVUxMOworICAgIEZUX1VJbnQgICAgbjsKKyAgICBGVF9VSW50ICAgIHJ1bmNudDsKKyAgICBGVF9VSW50ICAgIGksIGo7CisgICAgRlRfVVNob3J0ICBmaXJzdDsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworCisgICAgRlRfVU5VU0VEKCBlcnJvciApOworCisKKyAgICAqcG9pbnRfY250ID0gMDsKKworICAgIG4gPSBGVF9HRVRfQllURSgpOworICAgIGlmICggbiA9PSAwICkKKyAgICAgIHJldHVybiBBTExfUE9JTlRTOworCisgICAgaWYgKCBuICYgR1hfUFRfUE9JTlRTX0FSRV9XT1JEUyApCisgICAgeworICAgICAgbiAgJj0gR1hfUFRfUE9JTlRfUlVOX0NPVU5UX01BU0s7CisgICAgICBuIDw8PSA4OworICAgICAgbiAgfD0gRlRfR0VUX0JZVEUoKTsKKyAgICB9CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggcG9pbnRzLCBuICkgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAqcG9pbnRfY250ID0gbjsKKworICAgIGkgPSAwOworICAgIHdoaWxlICggaSA8IG4gKQorICAgIHsKKyAgICAgIHJ1bmNudCA9IEZUX0dFVF9CWVRFKCk7CisgICAgICBpZiAoIHJ1bmNudCAmIEdYX1BUX1BPSU5UU19BUkVfV09SRFMgKQorICAgICAgeworICAgICAgICBydW5jbnQgICAgICY9IEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLOworICAgICAgICBmaXJzdCAgICAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKKworICAgICAgICBpZiAoIHJ1bmNudCA8IDEgfHwgaSArIHJ1bmNudCA+IG4gKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBmaXJzdCBwb2ludCBub3QgaW5jbHVkZWQgaW4gcnVuIGNvdW50ICovCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcnVuY250OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBmaXJzdCAgICAgICA9IEZUX0dFVF9CWVRFKCk7CisgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CisKKyAgICAgICAgaWYgKCBydW5jbnQgPCAxIHx8IGkgKyBydW5jbnQgPiBuICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBydW5jbnQ7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBmaXJzdCAgICAgICs9IEZUX0dFVF9CWVRFKCk7CisgICAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBwb2ludHM7CisgIH0KKworCisjZGVmaW5lIEdYX0RUX0RFTFRBU19BUkVfWkVSTyAgICAgICAweDgwVQorI2RlZmluZSBHWF9EVF9ERUxUQVNfQVJFX1dPUkRTICAgICAgMHg0MFUKKyNkZWZpbmUgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0sgIDB4M0ZVCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZWFkIGEgc2V0IG9mIGRlbHRhcy4gIFRoZXNlIGFyZSBwYWNrZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgdGhhbiAgKi8KKyAgLyogICAgcG9pbnRzLiAgSW4gcGFydGljdWxhciB0aGVyZSBpcyBubyBvdmVyYWxsIGNvdW50LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgIDo6IFRoZSBkYXRhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWx0YV9jbnQgOjogVGhlIG51bWJlciBvZiBkZWx0YXMgdG8gYmUgcmVhZC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBhcnJheSBvZiBGVF9TaG9ydCBjb250YWluaW5nIHRoZSBkZWx0YXMgZm9yIHRoZSBhZmZlY3RlZCAgICAgICAgKi8KKyAgLyogICAgcG9pbnRzLiAgKFRoaXMgb25seSBnZXRzIHRoZSBkZWx0YXMgZm9yIG9uZSBkaW1lbnNpb24uICBJdCB3aWxsICAgICovCisgIC8qICAgIGdlbmVyYWxseSBiZSBjYWxsZWQgdHdpY2UsIG9uY2UgZm9yIHgsIG9uY2UgZm9yIHkuICBXaGVuIHVzZWQgaW4gICAqLworICAvKiAgICBjdnQgdGFibGUsIGl0IHdpbGwgb25seSBiZSBjYWxsZWQgb25jZS4pICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9TaG9ydCoKKyAgZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkZWx0YV9jbnQgKQorICB7CisgICAgRlRfU2hvcnQgICpkZWx0YXMgPSBOVUxMOworICAgIEZUX1VJbnQgICAgcnVuY250LCBjbnQ7CisgICAgRlRfVUludCAgICBpLCBqOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CisKKyAgICBGVF9VTlVTRUQoIGVycm9yICk7CisKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBkZWx0YXMsIGRlbHRhX2NudCApICkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IDA7CisgICAgd2hpbGUgKCBpIDwgZGVsdGFfY250ICkKKyAgICB7CisgICAgICBydW5jbnQgPSBGVF9HRVRfQllURSgpOworICAgICAgY250ICAgID0gcnVuY250ICYgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0s7CisKKyAgICAgIGlmICggcnVuY250ICYgR1hfRFRfREVMVEFTX0FSRV9aRVJPICkKKyAgICAgIHsKKyAgICAgICAgLyogYHJ1bmNudCcgemVyb2VzIGdldCBhZGRlZCAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8PSBjbnQgJiYgaSA8IGRlbHRhX2NudDsgaisrICkKKyAgICAgICAgICBkZWx0YXNbaSsrXSA9IDA7CisgICAgICB9CisgICAgICBlbHNlIGlmICggcnVuY250ICYgR1hfRFRfREVMVEFTX0FSRV9XT1JEUyApCisgICAgICB7CisgICAgICAgIC8qIGBydW5jbnQnIHNob3J0cyBmcm9tIHRoZSBzdGFjayAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8PSBjbnQgJiYgaSA8IGRlbHRhX2NudDsgaisrICkKKyAgICAgICAgICBkZWx0YXNbaSsrXSA9IEZUX0dFVF9TSE9SVCgpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBgcnVuY250JyBzaWduZWQgYnl0ZXMgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgZm9yICggaiA9IDA7IGogPD0gY250ICYmIGkgPCBkZWx0YV9jbnQ7IGorKyApCisgICAgICAgICAgZGVsdGFzW2krK10gPSBGVF9HRVRfQ0hBUigpOworICAgICAgfQorCisgICAgICBpZiAoIGogPD0gY250ICkKKyAgICAgIHsKKyAgICAgICAgLyogYmFkIGZvcm1hdCAqLworICAgICAgICBGVF9GUkVFKCBkZWx0YXMgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGRlbHRhczsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfdmFyX2xvYWRfYXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGFyc2UgdGhlIGBhdmFyJyB0YWJsZSBpZiBwcmVzZW50LiAgSXQgbmVlZCBub3QgYmUsIHNvIHdlIHJldHVybiAgICovCisgIC8qICAgIG5vdGhpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogVGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgZnRfdmFyX2xvYWRfYXZhciggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9TdHJlYW0gICAgICAgc3RyZWFtID0gRlRfRkFDRV9TVFJFQU0oIGZhY2UgKTsKKyAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgR1hfQmxlbmQgICAgICAgIGJsZW5kICA9IGZhY2UtPmJsZW5kOworICAgIEdYX0FWYXJTZWdtZW50ICBzZWdtZW50OworICAgIEZUX0Vycm9yICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9Mb25nICAgICAgICAgdmVyc2lvbjsKKyAgICBGVF9Mb25nICAgICAgICAgYXhpc0NvdW50OworICAgIEZUX0ludCAgICAgICAgICBpLCBqOworICAgIEZUX1VMb25nICAgICAgICB0YWJsZV9sZW47CisKKyAgICBGVF9VTlVTRUQoIGVycm9yICk7CisKKworICAgIEZUX1RSQUNFMigoICJBVkFSICIgKSk7CisKKyAgICBibGVuZC0+YXZhcl9jaGVja2VkID0gVFJVRTsKKyAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfYXZhciwgc3RyZWFtLCAmdGFibGVfbGVuICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggImlzIG1pc3NpbmdcbiIgKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggdGFibGVfbGVuICkgKQorICAgICAgcmV0dXJuOworCisgICAgdmVyc2lvbiAgID0gRlRfR0VUX0xPTkcoKTsKKyAgICBheGlzQ291bnQgPSBGVF9HRVRfTE9ORygpOworCisgICAgaWYgKCB2ZXJzaW9uICE9IDB4MDAwMTAwMDBMICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiYmFkIHRhYmxlIHZlcnNpb25cbiIgKSk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKKworICAgIGlmICggYXhpc0NvdW50ICE9IChGVF9Mb25nKWJsZW5kLT5tbXZhci0+bnVtX2F4aXMgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJmdF92YXJfbG9hZF9hdmFyOiBudW1iZXIgb2YgYXhlcyBpbiBgYXZhcicgYW5kIGBjdmFyJ1xuIgorICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgIHRhYmxlIGFyZSBkaWZmZXJlbnRcbiIgKSk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGJsZW5kLT5hdmFyX3NlZ21lbnQsIGF4aXNDb3VudCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHNlZ21lbnQgPSAmYmxlbmQtPmF2YXJfc2VnbWVudFswXTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGF4aXNDb3VudDsgaSsrLCBzZWdtZW50KysgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFNSgoICIgIGF4aXMgJWQ6XG4iLCBpICkpOworCisgICAgICBzZWdtZW50LT5wYWlyQ291bnQgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICBpZiAoIEZUX05FV19BUlJBWSggc2VnbWVudC0+Y29ycmVzcG9uZGVuY2UsIHNlZ21lbnQtPnBhaXJDb3VudCApICkKKyAgICAgIHsKKyAgICAgICAgLyogRmFpbHVyZS4gIEZyZWUgZXZlcnl0aGluZyB3ZSBoYXZlIGRvbmUgc28gZmFyLiAgV2UgbXVzdCBkbyAqLworICAgICAgICAvKiBpdCByaWdodCBub3cgc2luY2UgbG9hZGluZyB0aGUgYGF2YXInIHRhYmxlIGlzIG9wdGlvbmFsLiAgICovCisKKyAgICAgICAgZm9yICggaiA9IGkgLSAxOyBqID49IDA7IGotLSApCisgICAgICAgICAgRlRfRlJFRSggYmxlbmQtPmF2YXJfc2VnbWVudFtqXS5jb3JyZXNwb25kZW5jZSApOworCisgICAgICAgIEZUX0ZSRUUoIGJsZW5kLT5hdmFyX3NlZ21lbnQgKTsKKyAgICAgICAgYmxlbmQtPmF2YXJfc2VnbWVudCA9IE5VTEw7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgZm9yICggaiA9IDA7IGogPCBzZWdtZW50LT5wYWlyQ291bnQ7IGorKyApCisgICAgICB7CisgICAgICAgIC8qIGNvbnZlcnQgdG8gRml4ZWQgKi8KKyAgICAgICAgc2VnbWVudC0+Y29ycmVzcG9uZGVuY2Vbal0uZnJvbUNvb3JkID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKKyAgICAgICAgc2VnbWVudC0+Y29ycmVzcG9uZGVuY2Vbal0udG9Db29yZCAgID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKKworICAgICAgICBGVF9UUkFDRTUoKCAiICAgIG1hcHBpbmcgJS40ZiB0byAlLjRmXG4iLAorICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS50b0Nvb3JkIC8gNjU1MzYuMCApKTsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBGVF9GUkFNRV9FWElUKCk7CisgIH0KKworCisgIHR5cGVkZWYgc3RydWN0ICBHWF9HVmFyX0hlYWRfCisgIHsKKyAgICBGVF9Mb25nICAgIHZlcnNpb247CisgICAgRlRfVVNob3J0ICBheGlzQ291bnQ7CisgICAgRlRfVVNob3J0ICBnbG9iYWxDb29yZENvdW50OworICAgIEZUX1VMb25nICAgb2Zmc2V0VG9Db29yZDsKKyAgICBGVF9VU2hvcnQgIGdseXBoQ291bnQ7CisgICAgRlRfVVNob3J0ICBmbGFnczsKKyAgICBGVF9VTG9uZyAgIG9mZnNldFRvRGF0YTsKKworICB9IEdYX0dWYXJfSGVhZDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X3Zhcl9sb2FkX2d2YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBhcnNlIHRoZSBgZ3ZhcicgdGFibGUgaWYgcHJlc2VudC4gIElmIGBmdmFyJyBpcyB0aGVyZSwgYGd2YXInIGhhZCAqLworICAvKiAgICBiZXR0ZXIgYmUgdGhlcmUgdG9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IFRoZSBmb250IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF92YXJfbG9hZF9ndmFyKCBUVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1N0cmVhbSAgICAgc3RyZWFtID0gRlRfRkFDRV9TVFJFQU0oIGZhY2UgKTsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEdYX0JsZW5kICAgICAgYmxlbmQgID0gZmFjZS0+YmxlbmQ7CisgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKKyAgICBGVF9VSW50ICAgICAgIGksIGo7CisgICAgRlRfVUxvbmcgICAgICB0YWJsZV9sZW47CisgICAgRlRfVUxvbmcgICAgICBndmFyX3N0YXJ0OworICAgIEZUX1VMb25nICAgICAgb2Zmc2V0VG9EYXRhOworICAgIEdYX0dWYXJfSGVhZCAgZ3Zhcl9oZWFkOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBndmFyX2ZpZWxkc1tdID0KKyAgICB7CisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgR1hfR1Zhcl9IZWFkCisKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCAyMCApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIHZlcnNpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBheGlzQ291bnQgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBnbG9iYWxDb29yZENvdW50ICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggb2Zmc2V0VG9Db29yZCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGdseXBoQ291bnQgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBmbGFncyApLAorICAgICAgICBGVF9GUkFNRV9VTE9ORyAoIG9mZnNldFRvRGF0YSApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworCisgICAgRlRfVFJBQ0UyKCggIkdWQVIgIiApKTsKKworICAgIGlmICggKCBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRBR19ndmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFibGVfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaXMgbWlzc2luZ1xuIiApKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBndmFyX3N0YXJ0ID0gRlRfU1RSRUFNX1BPUyggKTsKKyAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggZ3Zhcl9maWVsZHMsICZndmFyX2hlYWQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBibGVuZC0+dHVwbGVjb3VudCAgPSBndmFyX2hlYWQuZ2xvYmFsQ29vcmRDb3VudDsKKyAgICBibGVuZC0+Z3ZfZ2x5cGhjbnQgPSBndmFyX2hlYWQuZ2x5cGhDb3VudDsKKyAgICBvZmZzZXRUb0RhdGEgICAgICAgPSBndmFyX3N0YXJ0ICsgZ3Zhcl9oZWFkLm9mZnNldFRvRGF0YTsKKworICAgIGlmICggZ3Zhcl9oZWFkLnZlcnNpb24gIT0gMHgwMDAxMDAwMEwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJiYWQgdGFibGUgdmVyc2lvblxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCisgICAgaWYgKCBndmFyX2hlYWQuYXhpc0NvdW50ICE9IChGVF9VU2hvcnQpYmxlbmQtPm1tdmFyLT5udW1fYXhpcyApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggImZ0X3Zhcl9sb2FkX2d2YXI6IG51bWJlciBvZiBheGVzIGluIGBndmFyJyBhbmQgYGN2YXInXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgdGFibGUgYXJlIGRpZmZlcmVudFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiZ3ZhcjogdGhlcmUgYXJlICVkIHNoYXJlZCBjb29yZGluYXRlczpcbiIsCisgICAgICAgICAgICAgICAgYmxlbmQtPnR1cGxlY291bnQgKSk7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggYmxlbmQtPmdseXBob2Zmc2V0cywgYmxlbmQtPmd2X2dseXBoY250ICsgMSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggZ3Zhcl9oZWFkLmZsYWdzICYgMSApCisgICAgeworICAgICAgLyogbG9uZyBvZmZzZXRzIChvbmUgbW9yZSBvZmZzZXQgdGhhbiBnbHlwaHMsIHRvIG1hcmsgc2l6ZSBvZiBsYXN0KSAqLworICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggKCBibGVuZC0+Z3ZfZ2x5cGhjbnQgKyAxICkgKiA0TCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBmb3IgKCBpID0gMDsgaSA8PSBibGVuZC0+Z3ZfZ2x5cGhjbnQ7IGkrKyApCisgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBvZmZzZXRUb0RhdGEgKyBGVF9HRVRfVUxPTkcoKTsKKworICAgICAgRlRfRlJBTUVfRVhJVCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogc2hvcnQgb2Zmc2V0cyAob25lIG1vcmUgb2Zmc2V0IHRoYW4gZ2x5cGhzLCB0byBtYXJrIHNpemUgb2YgbGFzdCkgKi8KKyAgICAgIGlmICggRlRfRlJBTUVfRU5URVIoICggYmxlbmQtPmd2X2dseXBoY250ICsgMSApICogMkwgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgZm9yICggaSA9IDA7IGkgPD0gYmxlbmQtPmd2X2dseXBoY250OyBpKysgKQorICAgICAgICBibGVuZC0+Z2x5cGhvZmZzZXRzW2ldID0gb2Zmc2V0VG9EYXRhICsgRlRfR0VUX1VTSE9SVCgpICogMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBVbmRvY3VtZW50ZWQ6IGAqMichICovCisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICB9CisKKyAgICBpZiAoIGJsZW5kLT50dXBsZWNvdW50ICE9IDAgKQorICAgIHsKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+dHVwbGVjb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIGJsZW5kLT50dXBsZWNvdW50ICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9Db29yZCApICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGJsZW5kLT50dXBsZWNvdW50ICogZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIDJMICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPnR1cGxlY291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIFsgIiApKTsKKyAgICAgICAgZm9yICggaiA9IDAgOyBqIDwgKEZUX1VJbnQpZ3Zhcl9oZWFkLmF4aXNDb3VudDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgIGJsZW5kLT50dXBsZWNvb3Jkc1tpICogZ3Zhcl9oZWFkLmF4aXNDb3VudCArIGpdID0KKyAgICAgICAgICAgIEZUX0dFVF9TSE9SVCgpIDw8IDI7ICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gRlRfRml4ZWQgKi8KKyAgICAgICAgICBGVF9UUkFDRTUoKCAiJS40ZiAiLAorICAgICAgICAgICAgYmxlbmQtPnR1cGxlY29vcmRzW2kgKiBndmFyX2hlYWQuYXhpc0NvdW50ICsgal0gLyA2NTUzNi4wICkpOworICAgICAgICB9CisgICAgICAgIEZUX1RSQUNFNSgoICJdXG4iICkpOworICAgICAgfQorCisgICAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworCisgICAgICBGVF9GUkFNRV9FWElUKCk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF92YXJfYXBwbHlfdHVwbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGaWd1cmUgb3V0IHdoZXRoZXIgYSBnaXZlbiB0dXBsZSAoZGVzaWduKSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50ICAgKi8KKyAgLyogICAgYmxlbmQsIGFuZCBpZiBzbywgd2hhdCBpcyB0aGUgc2NhbGluZyBmYWN0b3IuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmxlbmQgICAgICAgICAgIDo6IFRoZSBjdXJyZW50IGJsZW5kIG9mIHRoZSBmb250LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dXBsZUluZGV4ICAgICAgOjogQSBmbGFnIHNheWluZyB3aGV0aGVyIHRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIHR1cGxlIG9yIG5vdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dXBsZV9jb29yZHMgICAgOjogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0dXBsZSBpbiBub3JtYWxpemVkIGF4aXMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbV9zdGFydF9jb29yZHMgOjogVGhlIGluaXRpYWwgY29vcmRpbmF0ZXMgd2hlcmUgdGhpcyB0dXBsZSBzdGFydHMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIHRvIGFwcGx5IChmb3IgaW50ZXJtZWRpYXRlIGNvb3JkaW5hdGVzKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbV9lbmRfY29vcmRzICAgOjogVGhlIGZpbmFsIGNvb3JkaW5hdGVzIGFmdGVyIHdoaWNoIHRoaXMgdHVwbGUgbm8gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIGxvbmdlciBhcHBsaWVzIChmb3IgaW50ZXJtZWRpYXRlIGNvb3JkaW5hdGVzKS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gRlRfRml4ZWQgdmFsdWUgY29udGFpbmluZyB0aGUgc2NhbGluZyBmYWN0b3IuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRml4ZWQKKyAgZnRfdmFyX2FwcGx5X3R1cGxlKCBHWF9CbGVuZCAgIGJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgdHVwbGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIHR1cGxlX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGltX3N0YXJ0X2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGltX2VuZF9jb29yZHMgKQorICB7CisgICAgRlRfVUludCAgIGk7CisgICAgRlRfRml4ZWQgIGFwcGx5ID0gMHgxMDAwMEw7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm51bV9heGlzOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFNigoICIgICAgYXhpcyBjb29yZGluYXRlICVkICglLjRmKTpcbiIsCisgICAgICAgICAgICAgICAgICBpLCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisKKyAgICAgIC8qIEl0J3Mgbm90IGNsZWFyIHdoeSAoZm9yIGludGVybWVkaWF0ZSB0dXBsZXMpIHdlIGRvbid0IG5lZWQgICAgICovCisgICAgICAvKiB0byBjaGVjayBhZ2FpbnN0IHN0YXJ0L2VuZCAtLSB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIGRvbid0LiAqLworICAgICAgLyogU2ltaWxhcmx5LCBpdCdzIHVuY2xlYXIgd2h5IHdlIGRvbid0IG5lZWQgdG8gc2NhbGUgYWxvbmcgdGhlICAgKi8KKyAgICAgIC8qIGF4aXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGlmICggdHVwbGVfY29vcmRzW2ldID09IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSBpcyB6ZXJvLCBpZ25vcmVkXG4iLCBpICkpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID09IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgYXhpcyBjb29yZGluYXRlIGlzIHplcm8sIHN0b3BcbiIgKSk7CisgICAgICAgIGFwcGx5ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgMCAmJiB0dXBsZV9jb29yZHNbaV0gPiAwICkgfHwKKyAgICAgICAgICAgICAgICAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMCAmJiB0dXBsZV9jb29yZHNbaV0gPCAwICkgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGlzIGV4Y2VlZGVkLCBzdG9wXG4iLAorICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgICBhcHBseSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBlbHNlIGlmICggISggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIHR1cGxlIGNvb3JkaW5hdGUgdmFsdWUgJS40ZiBmaXRzXG4iLAorICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgICAvKiBub3QgYW4gaW50ZXJtZWRpYXRlIHR1cGxlICovCisgICAgICAgIGFwcGx5ID0gRlRfTXVsRml4KCBhcHBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLWJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICk7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IGltX3N0YXJ0X2Nvb3Jkc1tpXSB8fAorICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gaW1fZW5kX2Nvb3Jkc1tpXSAgICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBpcyBleGNlZWRlZCwiCisgICAgICAgICAgICAgICAgICAgICIgc3RvcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICAgIGFwcGx5ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IHR1cGxlX2Nvb3Jkc1tpXSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gZml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICAgIGFwcGx5ID0gRlRfTXVsRGl2KCBhcHBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIC0gaW1fc3RhcnRfY29vcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfY29vcmRzW2ldIC0gaW1fc3RhcnRfY29vcmRzW2ldICk7CisgICAgICB9CisKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBmaXRzXG4iLAorICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgICAgYXBwbHkgPSBGVF9NdWxEaXYoIGFwcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAtIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAtIHR1cGxlX2Nvb3Jkc1tpXSApOworICAgICAgfQorICAgIH0KKworICAgIEZUX1RSQUNFNigoICIgICAgYXBwbHkgZmFjdG9yIGlzICUuNGZcbiIsIGFwcGx5IC8gNjU1MzYuMCApKTsKKworICAgIHJldHVybiBhcHBseTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgTVVMVElQTEUgTUFTVEVSUyBTRVJWSUNFIEZVTkNUSU9OUyAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICB0eXBlZGVmIHN0cnVjdCAgR1hfRlZhcl9IZWFkXworICB7CisgICAgRlRfTG9uZyAgICB2ZXJzaW9uOworICAgIEZUX1VTaG9ydCAgb2Zmc2V0VG9EYXRhOworICAgIEZUX1VTaG9ydCAgY291bnRTaXplUGFpcnM7CisgICAgRlRfVVNob3J0ICBheGlzQ291bnQ7CisgICAgRlRfVVNob3J0ICBheGlzU2l6ZTsKKyAgICBGVF9VU2hvcnQgIGluc3RhbmNlQ291bnQ7CisgICAgRlRfVVNob3J0ICBpbnN0YW5jZVNpemU7CisKKyAgfSBHWF9GVmFyX0hlYWQ7CisKKworICB0eXBlZGVmIHN0cnVjdCAgZnZhcl9heGlzXworICB7CisgICAgRlRfVUxvbmcgICBheGlzVGFnOworICAgIEZUX0ZpeGVkICAgbWluVmFsdWU7CisgICAgRlRfRml4ZWQgICBkZWZhdWx0VmFsdWU7CisgICAgRlRfRml4ZWQgICBtYXhWYWx1ZTsKKyAgICBGVF9VU2hvcnQgIGZsYWdzOworICAgIEZUX1VTaG9ydCAgbmFtZUlEOworCisgIH0gR1hfRlZhcl9BeGlzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR2V0X01NX1ZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ2hlY2sgdGhhdCB0aGUgZm9udCdzIGBmdmFyJyB0YWJsZSBpcyB2YWxpZCwgcGFyc2UgaXQsIGFuZCByZXR1cm4gICovCisgIC8qICAgIHRob3NlIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICA6OiBUaGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgVFRfR2V0X01NX1ZhciBpbml0aWFsaXplcyB0aGUgYmxlbmQgc3RydWN0dXJlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXN0ZXIgOjogVGhlIGBmdmFyJyBkYXRhIChtdXN0IGJlIGZyZWVkIGJ5IGNhbGxlcikuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUVF9HZXRfTU1fVmFyKCBUVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKm1hc3RlciApCisgIHsKKyAgICBGVF9TdHJlYW0gICAgICAgICAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICB0YWJsZV9sZW47CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX1VMb25nICAgICAgICAgICAgIGZ2YXJfc3RhcnQ7CisgICAgRlRfSW50ICAgICAgICAgICAgICAgaSwgajsKKyAgICBGVF9NTV9WYXIqICAgICAgICAgICBtbXZhciA9IE5VTEw7CisgICAgRlRfRml4ZWQqICAgICAgICAgICAgbmV4dF9jb29yZHM7CisgICAgRlRfU3RyaW5nKiAgICAgICAgICAgbmV4dF9uYW1lOworICAgIEZUX1Zhcl9BeGlzKiAgICAgICAgIGE7CisgICAgRlRfVmFyX05hbWVkX1N0eWxlKiAgbnM7CisgICAgR1hfRlZhcl9IZWFkICAgICAgICAgZnZhcl9oZWFkOworCisgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBmdmFyX2ZpZWxkc1tdID0KKyAgICB7CisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgR1hfRlZhcl9IZWFkCisKKyAgICAgIEZUX0ZSQU1FX1NUQVJUKCAxNiApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIHZlcnNpb24gKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBvZmZzZXRUb0RhdGEgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBjb3VudFNpemVQYWlycyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGF4aXNDb3VudCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGF4aXNTaXplICksCisgICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggaW5zdGFuY2VDb3VudCApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGluc3RhbmNlU2l6ZSApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgZnZhcmF4aXNfZmllbGRzW10gPQorICAgIHsKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBHWF9GVmFyX0F4aXMKKworICAgICAgRlRfRlJBTUVfU1RBUlQoIDIwICksCisgICAgICAgIEZUX0ZSQU1FX1VMT05HICggYXhpc1RhZyApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIG1pblZhbHVlICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggZGVmYXVsdFZhbHVlICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggbWF4VmFsdWUgKSwKKyAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBmbGFncyApLAorICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG5hbWVJRCApLAorICAgICAgRlRfRlJBTUVfRU5ECisgICAgfTsKKworCisgICAgLyogcmVhZCB0aGUgZm9udCBkYXRhIGFuZCBzZXQgdXAgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCisgICAgLyogaWYgbm90IGFscmVhZHkgZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoIGZhY2UtPmJsZW5kID09IE5VTEwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJGVkFSICIgKSk7CisKKyAgICAgIC8qIGJvdGggYGZ2YXInIGFuZCBgZ3ZhcicgbXVzdCBiZSBwcmVzZW50ICovCisgICAgICBpZiAoICggZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2d2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sICZ0YWJsZV9sZW4gKSApICE9IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiXG4iCisgICAgICAgICAgICAgICAgICAgICJUVF9HZXRfTU1fVmFyOiBgZ3ZhcicgdGFibGUgaXMgbWlzc2luZ1xuIiApKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBpZiAoICggZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2Z2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sICZ0YWJsZV9sZW4gKSApICE9IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiaXMgbWlzc2luZ1xuIiApKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBmdmFyX3N0YXJ0ID0gRlRfU1RSRUFNX1BPUyggKTsKKworICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIGZ2YXJfZmllbGRzLCAmZnZhcl9oZWFkICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGlmICggZnZhcl9oZWFkLnZlcnNpb24gIT0gKEZUX0xvbmcpMHgwMDAxMDAwMEwgICAgICAgICAgICAgICAgICAgICAgfHwKKyNpZiAwCisgICAgICAgICAgIC8qIGZvbnRzIGxpa2UgYEphbVJlZ3VsYXIudHRmJyBoYXZlIGFuIGluY29ycmVjdCB2YWx1ZSBmb3IgKi8KKyAgICAgICAgICAgLyogYGNvdW50U2l6ZVBhaXJzJzsgc2luY2UgdmFsdWUgMiBpcyBoYXJkLWNvZGVkIGluIGBmdmFyJyAqLworICAgICAgICAgICAvKiB2ZXJzaW9uIDEuMCwgd2Ugc2ltcGx5IGlnbm9yZSBpdCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgIGZ2YXJfaGVhZC5jb3VudFNpemVQYWlycyAhPSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisjZW5kaWYKKyAgICAgICAgICAgZnZhcl9oZWFkLmF4aXNTaXplICE9IDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgLyogYXhpc0NvdW50IGxpbWl0IGltcGxpZWQgYnkgMTYtYml0IGluc3RhbmNlU2l6ZSAqLworICAgICAgICAgICBmdmFyX2hlYWQuYXhpc0NvdW50ID4gMHgzRkZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBmdmFyX2hlYWQuaW5zdGFuY2VTaXplICE9IDQgKyA0ICogZnZhcl9oZWFkLmF4aXNDb3VudCAgICAgICAgICB8fAorICAgICAgICAgICAvKiBpbnN0YW5jZUNvdW50IGxpbWl0IGltcGxpZWQgYnkgbGltaXRlZCByYW5nZSBvZiBuYW1lIElEcyAqLworICAgICAgICAgICBmdmFyX2hlYWQuaW5zdGFuY2VDb3VudCA+IDB4N0VGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBmdmFyX2hlYWQub2Zmc2V0VG9EYXRhICsgZnZhcl9oZWFkLmF4aXNDb3VudCAqIDIwVSArCisgICAgICAgICAgICAgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQgKiBmdmFyX2hlYWQuaW5zdGFuY2VTaXplID4gdGFibGVfbGVuICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UxKCggIlxuIgorICAgICAgICAgICAgICAgICAgICAiVFRfR2V0X01NX1ZhcjogaW52YWxpZCBgZnZhcicgaGVhZGVyXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKKworICAgICAgRlRfVFJBQ0U1KCggIm51bWJlciBvZiBHWCBzdHlsZSBheGVzOiAlZFxuIiwgZnZhcl9oZWFkLmF4aXNDb3VudCApKTsKKworICAgICAgaWYgKCBGVF9ORVcoIGZhY2UtPmJsZW5kICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIC8qIGNhbm5vdCBvdmVyZmxvdyAzMi1iaXQgYXJpdGhtZXRpYyBiZWNhdXNlIG9mIGxpbWl0cyBhYm92ZSAqLworICAgICAgZmFjZS0+YmxlbmQtPm1tdmFyX2xlbiA9CisgICAgICAgIHNpemVvZiAoIEZUX01NX1ZhciApICsKKyAgICAgICAgZnZhcl9oZWFkLmF4aXNDb3VudCAqIHNpemVvZiAoIEZUX1Zhcl9BeGlzICkgKworICAgICAgICBmdmFyX2hlYWQuaW5zdGFuY2VDb3VudCAqIHNpemVvZiAoIEZUX1Zhcl9OYW1lZF9TdHlsZSApICsKKyAgICAgICAgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQgKiBmdmFyX2hlYWQuYXhpc0NvdW50ICogc2l6ZW9mICggRlRfRml4ZWQgKSArCisgICAgICAgIDUgKiBmdmFyX2hlYWQuYXhpc0NvdW50OworCisgICAgICBpZiAoIEZUX0FMTE9DKCBtbXZhciwgZmFjZS0+YmxlbmQtPm1tdmFyX2xlbiApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgZmFjZS0+YmxlbmQtPm1tdmFyID0gbW12YXI7CisKKyAgICAgIC8qIHNldCB1cCBwb2ludGVycyBhbmQgb2Zmc2V0cyBpbnRvIHRoZSBgbW12YXInIGFycmF5OyAqLworICAgICAgLyogdGhlIGRhdGEgZ2V0cyBmaWxsZWQgaW4gbGF0ZXIgb24gICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIG1tdmFyLT5udW1fYXhpcyA9CisgICAgICAgIGZ2YXJfaGVhZC5heGlzQ291bnQ7CisgICAgICBtbXZhci0+bnVtX2Rlc2lnbnMgPQorICAgICAgICB+MFU7ICAgICAgICAgICAgICAgICAgIC8qIG1lYW5pbmdsZXNzIGluIHRoaXMgY29udGV4dDsgZWFjaCBnbHlwaCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1heSBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBkZXNpZ25zICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChvciB0dXBsZXMsIGFzIGNhbGxlZCBieSBBcHBsZSkgICAgICAgICAqLworICAgICAgbW12YXItPm51bV9uYW1lZHN0eWxlcyA9CisgICAgICAgIGZ2YXJfaGVhZC5pbnN0YW5jZUNvdW50OworICAgICAgbW12YXItPmF4aXMgPQorICAgICAgICAoRlRfVmFyX0F4aXMqKSYoIG1tdmFyWzFdICk7CisgICAgICBtbXZhci0+bmFtZWRzdHlsZSA9CisgICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSYoIG1tdmFyLT5heGlzW2Z2YXJfaGVhZC5heGlzQ291bnRdICk7CisKKyAgICAgIG5leHRfY29vcmRzID0KKyAgICAgICAgKEZUX0ZpeGVkKikmKCBtbXZhci0+bmFtZWRzdHlsZVtmdmFyX2hlYWQuaW5zdGFuY2VDb3VudF0gKTsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIG1tdmFyLT5uYW1lZHN0eWxlW2ldLmNvb3JkcyAgPSBuZXh0X2Nvb3JkczsKKyAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IGZ2YXJfaGVhZC5heGlzQ291bnQ7CisgICAgICB9CisKKyAgICAgIG5leHRfbmFtZSA9IChGVF9TdHJpbmcqKW5leHRfY29vcmRzOworICAgICAgZm9yICggaSA9IDA7IGkgPCBmdmFyX2hlYWQuYXhpc0NvdW50OyBpKysgKQorICAgICAgeworICAgICAgICBtbXZhci0+YXhpc1tpXS5uYW1lICA9IG5leHRfbmFtZTsKKyAgICAgICAgbmV4dF9uYW1lICAgICAgICAgICArPSA1OworICAgICAgfQorCisgICAgICAvKiBub3cgZmlsbCBpbiB0aGUgZGF0YSAqLworCisgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBmdmFyX3N0YXJ0ICsgZnZhcl9oZWFkLm9mZnNldFRvRGF0YSApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBhID0gbW12YXItPmF4aXM7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7IGkrKyApCisgICAgICB7CisgICAgICAgIEdYX0ZWYXJfQXhpcyAgYXhpc19yZWM7CisKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggZnZhcmF4aXNfZmllbGRzLCAmYXhpc19yZWMgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICBhLT50YWcgICAgID0gYXhpc19yZWMuYXhpc1RhZzsKKyAgICAgICAgYS0+bWluaW11bSA9IGF4aXNfcmVjLm1pblZhbHVlOworICAgICAgICBhLT5kZWYgICAgID0gYXhpc19yZWMuZGVmYXVsdFZhbHVlOworICAgICAgICBhLT5tYXhpbXVtID0gYXhpc19yZWMubWF4VmFsdWU7CisgICAgICAgIGEtPnN0cmlkICAgPSBheGlzX3JlYy5uYW1lSUQ7CisKKyAgICAgICAgYS0+bmFtZVswXSA9IChGVF9TdHJpbmcpKCAgIGEtPnRhZyA+PiAyNCApOworICAgICAgICBhLT5uYW1lWzFdID0gKEZUX1N0cmluZykoICggYS0+dGFnID4+IDE2ICkgJiAweEZGICk7CisgICAgICAgIGEtPm5hbWVbMl0gPSAoRlRfU3RyaW5nKSggKCBhLT50YWcgPj4gIDggKSAmIDB4RkYgKTsKKyAgICAgICAgYS0+bmFtZVszXSA9IChGVF9TdHJpbmcpKCAoIGEtPnRhZyAgICAgICApICYgMHhGRiApOworICAgICAgICBhLT5uYW1lWzRdID0gJ1wwJzsKKworICAgICAgICBGVF9UUkFDRTUoKCAiICBcIiVzXCI6IG1pbmltdW09JS40ZiwgZGVmYXVsdD0lLjRmLCBtYXhpbXVtPSUuNGZcbiIsCisgICAgICAgICAgICAgICAgICAgIGEtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgIGEtPm1pbmltdW0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBhLT5kZWYgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC8gNjU1MzYuMCApKTsKKworICAgICAgICBhKys7CisgICAgICB9CisKKyAgICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CisKKyAgICAgIG5zID0gbW12YXItPm5hbWVkc3R5bGU7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5pbnN0YW5jZUNvdW50OyBpKyssIG5zKysgKQorICAgICAgeworICAgICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCA0TCArIDRMICogZnZhcl9oZWFkLmF4aXNDb3VudCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgbnMtPnN0cmlkICAgICAgID0gICAgRlRfR0VUX1VTSE9SVCgpOworICAgICAgICAodm9pZCkgLyogZmxhZ3MgPSAqLyBGVF9HRVRfVVNIT1JUKCk7CisKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBmdmFyX2hlYWQuYXhpc0NvdW50OyBqKysgKQorICAgICAgICAgIG5zLT5jb29yZHNbal0gPSBGVF9HRVRfTE9ORygpOworCisgICAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBmaWxsIHRoZSBvdXRwdXQgYXJyYXkgaWYgcmVxdWVzdGVkICovCisKKyAgICBpZiAoIG1hc3RlciAhPSBOVUxMICkKKyAgICB7CisgICAgICBGVF9VSW50ICBuOworCisKKyAgICAgIGlmICggRlRfQUxMT0MoIG1tdmFyLCBmYWNlLT5ibGVuZC0+bW12YXJfbGVuICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9NRU1fQ09QWSggbW12YXIsIGZhY2UtPmJsZW5kLT5tbXZhciwgZmFjZS0+YmxlbmQtPm1tdmFyX2xlbiApOworCisgICAgICBtbXZhci0+YXhpcyA9CisgICAgICAgIChGVF9WYXJfQXhpcyopJiggbW12YXJbMV0gKTsKKyAgICAgIG1tdmFyLT5uYW1lZHN0eWxlID0KKyAgICAgICAgKEZUX1Zhcl9OYW1lZF9TdHlsZSopJiggbW12YXItPmF4aXNbbW12YXItPm51bV9heGlzXSApOworICAgICAgbmV4dF9jb29yZHMgPQorICAgICAgICAoRlRfRml4ZWQqKSYoIG1tdmFyLT5uYW1lZHN0eWxlW21tdmFyLT5udW1fbmFtZWRzdHlsZXNdICk7CisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbW12YXItPm51bV9uYW1lZHN0eWxlczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgbW12YXItPm5hbWVkc3R5bGVbbl0uY29vcmRzICA9IG5leHRfY29vcmRzOworICAgICAgICBuZXh0X2Nvb3JkcyAgICAgICAgICAgICAgICAgKz0gbW12YXItPm51bV9heGlzOworICAgICAgfQorCisgICAgICBhICAgICAgICAgPSBtbXZhci0+YXhpczsKKyAgICAgIG5leHRfbmFtZSA9IChGVF9TdHJpbmcqKW5leHRfY29vcmRzOworICAgICAgZm9yICggbiA9IDA7IG4gPCBtbXZhci0+bnVtX2F4aXM7IG4rKyApCisgICAgICB7CisgICAgICAgIGEtPm5hbWUgPSBuZXh0X25hbWU7CisKKyAgICAgICAgLyogc3RhbmRhcmQgUG9zdFNjcmlwdCBuYW1lcyBmb3Igc29tZSBzdGFuZGFyZCBhcHBsZSB0YWdzICovCisgICAgICAgIGlmICggYS0+dGFnID09IFRUQUdfd2dodCApCisgICAgICAgICAgYS0+bmFtZSA9IChjaGFyKikiV2VpZ2h0IjsKKyAgICAgICAgZWxzZSBpZiAoIGEtPnRhZyA9PSBUVEFHX3dkdGggKQorICAgICAgICAgIGEtPm5hbWUgPSAoY2hhciopIldpZHRoIjsKKyAgICAgICAgZWxzZSBpZiAoIGEtPnRhZyA9PSBUVEFHX29wc3ogKQorICAgICAgICAgIGEtPm5hbWUgPSAoY2hhciopIk9wdGljYWxTaXplIjsKKyAgICAgICAgZWxzZSBpZiAoIGEtPnRhZyA9PSBUVEFHX3NsbnQgKQorICAgICAgICAgIGEtPm5hbWUgPSAoY2hhciopIlNsYW50IjsKKworICAgICAgICBuZXh0X25hbWUgKz0gNTsKKyAgICAgICAgYSsrOworICAgICAgfQorCisgICAgICAqbWFzdGVyID0gbW12YXI7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TZXRfTU1fQmxlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZXQgdGhlIGJsZW5kIChub3JtYWxpemVkKSBjb29yZGluYXRlcyBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgICAgKi8KKyAgLyogICAgZm9udC4gIENoZWNrIHRoYXQgdGhlIGBndmFyJyB0YWJsZSBpcyByZWFzb25hYmxlIGFuZCBkb2VzIHNvbWUgICAgICovCisgIC8qICAgIGluaXRpYWwgcHJlcGFyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogVGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIGJsZW5kIHN0cnVjdHVyZSB3aXRoIGBndmFyJyBkYXRhLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvb3JkaW5hdGVzLiAgSWYgaXQgaXMgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAoMCkgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvb3JkcyAgICAgOjogQW4gYXJyYXkgb2YgYG51bV9jb29yZHMnLCBlYWNoIGJldHdlZW4gWy0xLDFdLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFRUX1NldF9NTV9CbGVuZCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBHWF9CbGVuZCAgICBibGVuZDsKKyAgICBGVF9NTV9WYXIqICBtbXZhcjsKKyAgICBGVF9VSW50ICAgICBpOworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCisgICAgZW51bQorICAgIHsKKyAgICAgIG1jdnRfcmV0YWluLAorICAgICAgbWN2dF9tb2RpZnksCisgICAgICBtY3Z0X2xvYWQKKworICAgIH0gbWFuYWdlQ3Z0OworCisKKyAgICBmYWNlLT5kb2JsZW5kID0gRkFMU0U7CisKKyAgICBpZiAoIGZhY2UtPmJsZW5kID09IE5VTEwgKQorICAgIHsKKyAgICAgIGlmICggKCBlcnJvciA9IFRUX0dldF9NTV9WYXIoIGZhY2UsIE5VTEwgKSApICE9IDAgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICBtbXZhciA9IGJsZW5kLT5tbXZhcjsKKworICAgIGlmICggbnVtX2Nvb3JkcyA+IG1tdmFyLT5udW1fYXhpcyApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIlRUX1NldF9NTV9CbGVuZDogb25seSB1c2luZyBmaXJzdCAlZCBvZiAlZCBjb29yZGluYXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG1tdmFyLT5udW1fYXhpcywgbnVtX2Nvb3JkcyApKTsKKyAgICAgIG51bV9jb29yZHMgPSBtbXZhci0+bnVtX2F4aXM7CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIm5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgaSsrICkKKyAgICB7CisgICAgICBGVF9UUkFDRTUoKCAiICAlLjRmXG4iLCBjb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgaWYgKCBjb29yZHNbaV0gPCAtMHgwMDAxMDAwMEwgfHwgY29vcmRzW2ldID4gMHgwMDAxMDAwMEwgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiVFRfU2V0X01NX0JsZW5kOiBub3JtYWxpemVkIGRlc2lnbiBjb29yZGluYXRlICUuNGZcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgaXMgb3V0IG9mIHJhbmdlIFstMTsxXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIGlmICggYmxlbmQtPmdseXBob2Zmc2V0cyA9PSBOVUxMICkKKyAgICAgIGlmICggKCBlcnJvciA9IGZ0X3Zhcl9sb2FkX2d2YXIoIGZhY2UgKSApICE9IDAgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzID09IE5VTEwgKQorICAgIHsKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+bm9ybWFsaXplZGNvb3JkcywgbW12YXItPm51bV9heGlzICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIG1hbmFnZUN2dCA9IG1jdnRfbW9kaWZ5OworCisgICAgICAvKiBJZiB3ZSBoYXZlIG5vdCBzZXQgdGhlIGJsZW5kIGNvb3JkaW5hdGVzIGJlZm9yZSB0aGlzLCB0aGVuIHRoZSAgKi8KKyAgICAgIC8qIGN2dCB0YWJsZSB3aWxsIHN0aWxsIGJlIHdoYXQgd2UgcmVhZCBmcm9tIHRoZSBgY3Z0ICcgdGFibGUgYW5kICAqLworICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0byByZWxvYWQgaXQuICBXZSBtYXkgbmVlZCB0byBjaGFuZ2UgaXQgdGhvdWdoLi4uICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBtYW5hZ2VDdnQgPSBtY3Z0X3JldGFpbjsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICE9IGNvb3Jkc1tpXSApCisgICAgICAgIHsKKyAgICAgICAgICBtYW5hZ2VDdnQgPSBtY3Z0X2xvYWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZm9yICggOyBpIDwgbW12YXItPm51bV9heGlzOyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgbWFuYWdlQ3Z0ID0gbWN2dF9sb2FkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIElmIHdlIGRvbid0IGNoYW5nZSB0aGUgYmxlbmQgY29vcmRzIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkbyAgKi8KKyAgICAgIC8qIGFueXRoaW5nIHRvIHRoZSBjdnQgdGFibGUuICBJdCB3aWxsIGJlIGNvcnJlY3QuICBPdGhlcndpc2Ugd2UgKi8KKyAgICAgIC8qIG5vIGxvbmdlciBoYXZlIHRoZSBvcmlnaW5hbCBjdnQgKGl0IHdhcyBtb2RpZmllZCB3aGVuIHdlIHNldCAgKi8KKyAgICAgIC8qIHRoZSBibGVuZCBsYXN0IHRpbWUpLCBzbyB3ZSBtdXN0IHJlbG9hZCBhbmQgdGhlbiBtb2RpZnkgaXQuICAgKi8KKyAgICB9CisKKyAgICBibGVuZC0+bnVtX2F4aXMgPSBtbXZhci0+bnVtX2F4aXM7CisgICAgRlRfTUVNX0NPUFkoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzLAorICAgICAgICAgICAgICAgICBjb29yZHMsCisgICAgICAgICAgICAgICAgIG51bV9jb29yZHMgKiBzaXplb2YgKCBGVF9GaXhlZCApICk7CisKKyAgICBmYWNlLT5kb2JsZW5kID0gVFJVRTsKKworICAgIGlmICggZmFjZS0+Y3Z0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoIG1hbmFnZUN2dCApCisgICAgICB7CisgICAgICBjYXNlIG1jdnRfbG9hZDoKKyAgICAgICAgLyogVGhlIGN2dCB0YWJsZSBoYXMgYmVlbiBsb2FkZWQgYWxyZWFkeTsgZXZlcnkgdGltZSB3ZSBjaGFuZ2UgdGhlICovCisgICAgICAgIC8qIGJsZW5kIHdlIG1heSBuZWVkIHRvIHJlbG9hZCBhbmQgcmVtb2RpZnkgdGhlIGN2dCB0YWJsZS4gICAgICAgICAqLworICAgICAgICBGVF9GUkVFKCBmYWNlLT5jdnQgKTsKKyAgICAgICAgZmFjZS0+Y3Z0ID0gTlVMTDsKKworICAgICAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9jdnQoIGZhY2UsIGZhY2UtPnJvb3Quc3RyZWFtICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIG1jdnRfbW9kaWZ5OgorICAgICAgICAvKiBUaGUgb3JpZ2luYWwgY3Z0IHRhYmxlIGlzIGluIG1lbW9yeS4gIEFsbCB3ZSBuZWVkIHRvIGRvIGlzICovCisgICAgICAgIC8qIGFwcGx5IHRoZSBgY3ZhcicgdGFibGUgKGlmIGFueSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgZXJyb3IgPSB0dF9mYWNlX3ZhcnlfY3Z0KCBmYWNlLCBmYWNlLT5yb290LnN0cmVhbSApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBtY3Z0X3JldGFpbjoKKyAgICAgICAgLyogVGhlIGN2dCB0YWJsZSBpcyBjb3JyZWN0IGZvciB0aGlzIHNldCBvZiBjb29yZGluYXRlcy4gKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TZXRfVmFyX0Rlc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZXQgdGhlIGNvb3JkaW5hdGVzIGZvciB0aGUgaW5zdGFuY2UsIG1lYXN1cmVkIGluIHRoZSB1c2VyICAgICAgICAgKi8KKyAgLyogICAgY29vcmRpbmF0ZSBzeXN0ZW0uICBQYXJzZSB0aGUgYGF2YXInIHRhYmxlIChpZiBwcmVzZW50KSB0byBjb252ZXJ0ICovCisgIC8qICAgIGZyb20gdXNlciB0byBub3JtYWxpemVkIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogVGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIGJsZW5kIHN0cnVjdCB3aXRoIGBndmFyJyBkYXRhLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvb3JkaW5hdGVzLiAgSWYgaXQgaXMgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvb3JkcyAgICAgOjogQSBjb29yZGluYXRlIGFycmF5IHdpdGggYG51bV9jb29yZHMnIGVsZW1lbnRzLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFRUX1NldF9WYXJfRGVzaWduKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgZXJyb3IgICAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9GaXhlZCogICAgICAgbm9ybWFsaXplZCA9IE5VTEw7CisgICAgR1hfQmxlbmQgICAgICAgIGJsZW5kOworICAgIEZUX01NX1ZhciogICAgICBtbXZhcjsKKyAgICBGVF9VSW50ICAgICAgICAgaSwgajsKKyAgICBGVF9WYXJfQXhpcyogICAgYTsKKyAgICBHWF9BVmFyU2VnbWVudCAgYXY7CisgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCisKKyAgICBpZiAoIGZhY2UtPmJsZW5kID09IE5VTEwgKQorICAgIHsKKyAgICAgIGlmICggKCBlcnJvciA9IFRUX0dldF9NTV9WYXIoIGZhY2UsIE5VTEwgKSApICE9IDAgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICBtbXZhciA9IGJsZW5kLT5tbXZhcjsKKworICAgIGlmICggbnVtX2Nvb3JkcyA+IG1tdmFyLT5udW1fYXhpcyApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIlRUX1NldF9WYXJfRGVzaWduOiIKKyAgICAgICAgICAgICAgICAgICIgb25seSB1c2luZyBmaXJzdCAlZCBvZiAlZCBjb29yZGluYXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG1tdmFyLT5udW1fYXhpcywgbnVtX2Nvb3JkcyApKTsKKyAgICAgIG51bV9jb29yZHMgPSBtbXZhci0+bnVtX2F4aXM7CisgICAgfQorCisgICAgLyogQXhpcyBub3JtYWxpemF0aW9uIGlzIGEgdHdvIHN0YWdlIHByb2Nlc3MuICBGaXJzdCB3ZSBub3JtYWxpemUgKi8KKyAgICAvKiBiYXNlZCBvbiB0aGUgW21pbixkZWYsbWF4XSB2YWx1ZXMgZm9yIHRoZSBheGlzIHRvIGJlIFstMSwwLDFdLiAqLworICAgIC8qIFRoZW4sIGlmIHRoZXJlJ3MgYW4gYGF2YXInIHRhYmxlLCB3ZSByZW5vcm1hbGl6ZSB0aGlzIHJhbmdlLiAgICovCisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggbm9ybWFsaXplZCwgbW12YXItPm51bV9heGlzICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgRlRfVFJBQ0U1KCggImRlc2lnbiBjb29yZGluYXRlczpcbiIgKSk7CisKKyAgICBhID0gbW12YXItPmF4aXM7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyBpKyssIGErKyApCisgICAgeworICAgICAgRlRfVFJBQ0U1KCggIiAgJS40ZlxuIiwgY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgIGlmICggY29vcmRzW2ldID4gYS0+bWF4aW11bSB8fCBjb29yZHNbaV0gPCBhLT5taW5pbXVtICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UxKCggIlRUX1NldF9WYXJfRGVzaWduOiBub3JtYWxpemVkIGRlc2lnbiBjb29yZGluYXRlICUuNGZcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICBpcyBvdXQgb2YgcmFuZ2UgWyUuNGY7JS40Zl1cbiIsCisgICAgICAgICAgICAgICAgICAgIGNvb3Jkc1tpXSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgIGEtPm1pbmltdW0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC8gNjU1MzYuMCApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggY29vcmRzW2ldIDwgYS0+ZGVmICkKKyAgICAgICAgbm9ybWFsaXplZFtpXSA9IC1GVF9EaXZGaXgoIGNvb3Jkc1tpXSAtIGEtPmRlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEtPm1pbmltdW0gLSBhLT5kZWYgKTsKKyAgICAgIGVsc2UgaWYgKCBhLT5tYXhpbXVtID09IGEtPmRlZiApCisgICAgICAgIG5vcm1hbGl6ZWRbaV0gPSAwOworICAgICAgZWxzZQorICAgICAgICBub3JtYWxpemVkW2ldID0gRlRfRGl2Rml4KCBjb29yZHNbaV0gLSBhLT5kZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEtPm1heGltdW0gLSBhLT5kZWYgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworCisgICAgZm9yICggOyBpIDwgbW12YXItPm51bV9heGlzOyBpKysgKQorICAgICAgbm9ybWFsaXplZFtpXSA9IDA7CisKKyAgICBpZiAoICFibGVuZC0+YXZhcl9jaGVja2VkICkKKyAgICAgIGZ0X3Zhcl9sb2FkX2F2YXIoIGZhY2UgKTsKKworICAgIGlmICggYmxlbmQtPmF2YXJfc2VnbWVudCAhPSBOVUxMICkKKyAgICB7CisgICAgICBGVF9UUkFDRTUoKCAibm9ybWFsaXplZCBkZXNpZ24gY29vcmRpbmF0ZXMiCisgICAgICAgICAgICAgICAgICAiIGJlZm9yZSBhcHBseWluZyBgYXZhcicgZGF0YTpcbiIgKSk7CisKKyAgICAgIGF2ID0gYmxlbmQtPmF2YXJfc2VnbWVudDsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbW12YXItPm51bV9heGlzOyBpKyssIGF2KysgKQorICAgICAgeworICAgICAgICBmb3IgKCBqID0gMTsgaiA8IChGVF9VSW50KWF2LT5wYWlyQ291bnQ7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICAlLjRmXG4iLCBub3JtYWxpemVkW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgICAgICBpZiAoIG5vcm1hbGl6ZWRbaV0gPCBhdi0+Y29ycmVzcG9uZGVuY2Vbal0uZnJvbUNvb3JkICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBub3JtYWxpemVkW2ldID0KKyAgICAgICAgICAgICAgRlRfTXVsRGl2KCBub3JtYWxpemVkW2ldIC0gYXYtPmNvcnJlc3BvbmRlbmNlW2ogLSAxXS5mcm9tQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXYtPmNvcnJlc3BvbmRlbmNlW2pdLnRvQ29vcmQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXYtPmNvcnJlc3BvbmRlbmNlW2ogLSAxXS50b0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGF2LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXYtPmNvcnJlc3BvbmRlbmNlW2ogLSAxXS5mcm9tQ29vcmQgKSArCisgICAgICAgICAgICAgIGF2LT5jb3JyZXNwb25kZW5jZVtqIC0gMV0udG9Db29yZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gVFRfU2V0X01NX0JsZW5kKCBmYWNlLCBtbXZhci0+bnVtX2F4aXMsIG5vcm1hbGl6ZWQgKTsKKworICBFeGl0OgorICAgIEZUX0ZSRUUoIG5vcm1hbGl6ZWQgKTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgIEdYIFZBUiBQQVJTSU5HIFJPVVRJTkVTICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV92YXJ5X2N2dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTW9kaWZ5IHRoZSBsb2FkZWQgY3Z0IHRhYmxlIGFjY29yZGluZyB0byB0aGUgYGN2YXInIHRhYmxlIGFuZCB0aGUgICovCisgIC8qICAgIGZvbnQncyBibGVuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmVhbSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTW9zdCBlcnJvcnMgYXJlIGlnbm9yZWQuICBJdCBpcyBwZXJmZWN0bHkgdmFsaWQgbm90IHRvIGhhdmUgYSAgICAgICovCisgIC8qICAgIGBjdmFyJyB0YWJsZSBldmVuIGlmIHRoZXJlIGlzIGEgYGd2YXInIGFuZCBgZnZhcicgdGFibGUuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfdmFyeV9jdnQoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgICAgZXJyb3I7CisgICAgRlRfTWVtb3J5ICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgRlRfVUxvbmcgICAgdGFibGVfc3RhcnQ7CisgICAgRlRfVUxvbmcgICAgdGFibGVfbGVuOworICAgIEZUX1VJbnQgICAgIHR1cGxlQ291bnQ7CisgICAgRlRfVUxvbmcgICAgb2Zmc2V0VG9EYXRhOworICAgIEZUX1VMb25nICAgIGhlcmU7CisgICAgRlRfVUludCAgICAgaSwgajsKKyAgICBGVF9GaXhlZCogICB0dXBsZV9jb29yZHMgICAgPSBOVUxMOworICAgIEZUX0ZpeGVkKiAgIGltX3N0YXJ0X2Nvb3JkcyA9IE5VTEw7CisgICAgRlRfRml4ZWQqICAgaW1fZW5kX2Nvb3JkcyAgID0gTlVMTDsKKyAgICBHWF9CbGVuZCAgICBibGVuZCAgICAgICAgICAgPSBmYWNlLT5ibGVuZDsKKyAgICBGVF9VSW50ICAgICBwb2ludF9jb3VudDsKKyAgICBGVF9VU2hvcnQqICBsb2NhbHBvaW50czsKKyAgICBGVF9TaG9ydCogICBkZWx0YXM7CisKKworICAgIEZUX1RSQUNFMigoICJDVkFSICIgKSk7CisKKyAgICBpZiAoIGJsZW5kID09IE5VTEwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJcbiIKKyAgICAgICAgICAgICAgICAgICJ0dF9mYWNlX3ZhcnlfY3Z0OiBubyBibGVuZCBzcGVjaWZpZWRcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIGZhY2UtPmN2dCA9PSBOVUxMICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiXG4iCisgICAgICAgICAgICAgICAgICAidHRfZmFjZV92YXJ5X2N2dDogbm8gYGN2dCAnIHRhYmxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2N2YXIsIHN0cmVhbSwgJnRhYmxlX2xlbiApOworICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJpcyBtaXNzaW5nXG4iICkpOworCisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCB0YWJsZV9sZW4gKSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgdGFibGVfc3RhcnQgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOworICAgIGlmICggRlRfR0VUX0xPTkcoKSAhPSAweDAwMDEwMDAwTCApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggImJhZCB0YWJsZSB2ZXJzaW9uXG4iICkpOworCisgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGdvdG8gRkV4aXQ7CisgICAgfQorCisgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCB0dXBsZV9jb29yZHMsIGJsZW5kLT5udW1fYXhpcyApICAgIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGltX3N0YXJ0X2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggaW1fZW5kX2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgICApCisgICAgICBnb3RvIEZFeGl0OworCisgICAgdHVwbGVDb3VudCAgID0gRlRfR0VUX1VTSE9SVCgpOworICAgIG9mZnNldFRvRGF0YSA9IHRhYmxlX3N0YXJ0ICsgRlRfR0VUX1VTSE9SVCgpOworCisgICAgLyogVGhlIGRvY3VtZW50YXRpb24gaW1wbGllcyB0aGVyZSBhcmUgZmxhZ3MgcGFja2VkIGludG8gdGhlICAgICAgICAqLworICAgIC8qIHR1cGxlY291bnQsIGJ1dCBKb2huIEplbmtpbnMgc2F5cyB0aGF0IHNoYXJlZCBwb2ludHMgZG9uJ3QgYXBwbHkgKi8KKyAgICAvKiB0byBgY3ZhcicsIGFuZCBubyBvdGhlciBmbGFncyBhcmUgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9UUkFDRTUoKCAiY3ZhcjogdGhlcmUgYXJlICVkIHR1cGxlczpcbiIsIHR1cGxlQ291bnQgKSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8ICggdHVwbGVDb3VudCAmIDB4RkZGICk7IGkrKyApCisgICAgeworICAgICAgRlRfVUludCAgIHR1cGxlRGF0YVNpemU7CisgICAgICBGVF9VSW50ICAgdHVwbGVJbmRleDsKKyAgICAgIEZUX0ZpeGVkICBhcHBseTsKKworCisgICAgICBGVF9UUkFDRTYoKCAiICB0dXBsZSAlZDpcbiIsIGkgKSk7CisKKyAgICAgIHR1cGxlRGF0YVNpemUgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICB0dXBsZUluZGV4ICAgID0gRlRfR0VUX1VTSE9SVCgpOworCisgICAgICAvKiBUaGVyZSBpcyBubyBwcm92aXNpb24gaGVyZSBmb3IgYSBnbG9iYWwgdHVwbGUgY29vcmRpbmF0ZSBzZWN0aW9uLCAqLworICAgICAgLyogc28gSm9obiBzYXlzLiAgVGhlcmUgYXJlIG5vIHR1cGxlIGluZGljZXMsIGp1c3QgZW1iZWRkZWQgdHVwbGVzLiAgKi8KKworICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgKQorICAgICAgeworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKKyAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOyAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvcnQgZnJhYyB0byBmaXhlZCAqLworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBza2lwIHRoaXMgdHVwbGU7IGl0IG1ha2VzIG5vIHNlbnNlICovCisKKyAgICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfSU5URVJNRURJQVRFX1RVUExFICkKKyAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDIgKiBibGVuZC0+bnVtX2F4aXM7IGorKyApCisgICAgICAgICAgICAodm9pZClGVF9HRVRfU0hPUlQoKTsKKworICAgICAgICBvZmZzZXRUb0RhdGEgKz0gdHVwbGVEYXRhU2l6ZTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCisgICAgICB7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIGltX2VuZF9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOworICAgICAgfQorCisgICAgICBhcHBseSA9IGZ0X3Zhcl9hcHBseV90dXBsZSggYmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydCl0dXBsZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3JkcyApOworICAgICAgaWYgKCAvKiB0dXBsZSBpc24ndCBhY3RpdmUgZm9yIG91ciBibGVuZCAqLworICAgICAgICAgICBhcHBseSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgLyogZ2xvYmFsIHBvaW50cyBub3QgYWxsb3dlZCwgICAgICAgICAgICovCisgICAgICAgICAgIC8qIGlmIHRoZXkgYXJlbid0IGxvY2FsLCBtYWtlcyBubyBzZW5zZSAqLworICAgICAgICAgICAhKCB0dXBsZUluZGV4ICYgR1hfVElfUFJJVkFURV9QT0lOVF9OVU1CRVJTICkgKQorICAgICAgeworICAgICAgICBvZmZzZXRUb0RhdGEgKz0gdHVwbGVEYXRhU2l6ZTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGhlcmUgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOworCisgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmZzZXRUb0RhdGEgKTsKKworICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLCAmcG9pbnRfY291bnQgKTsKKyAgICAgIGRlbHRhcyAgICAgID0gZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50X2NvdW50ID09IDAgPyBmYWNlLT5jdnRfc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBvaW50X2NvdW50ICk7CisgICAgICBpZiAoIGxvY2FscG9pbnRzID09IE5VTEwgfHwgZGVsdGFzID09IE5VTEwgKQorICAgICAgICA7IC8qIGZhaWx1cmUsIGlnbm9yZSBpdCAqLworCisgICAgICBlbHNlIGlmICggbG9jYWxwb2ludHMgPT0gQUxMX1BPSU5UUyApCisgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaW50ICBjb3VudCA9IDA7CisjZW5kaWYKKworCisgICAgICAgIEZUX1RSQUNFNygoICIgICAgQ1ZUIGRlbHRhczpcbiIgKSk7CisKKyAgICAgICAgLyogdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBkZWx0YXMgZm9yIGV2ZXJ5IGVudHJ5IGluIGN2dCAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGZhY2UtPmN2dF9zaXplOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTG9uZyAgb3JpZ19jdnQgPSBmYWNlLT5jdnRbal07CisKKworICAgICAgICAgIGZhY2UtPmN2dFtqXSA9IChGVF9TaG9ydCkoIG9yaWdfY3Z0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGRlbHRhc1tqXSwgYXBwbHkgKSApOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBpZiAoIG9yaWdfY3Z0ICE9IGZhY2UtPmN2dFtqXSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAlZCAtPiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGosIG9yaWdfY3Z0LCBmYWNlLT5jdnRbal0gKSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpZiAoICFjb3VudCApCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIG5vbmVcbiIgKSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgZWxzZQorICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGludCAgY291bnQgPSAwOworI2VuZGlmCisKKworICAgICAgICBGVF9UUkFDRTcoKCAiICAgIENWVCBkZWx0YXM6XG4iICkpOworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcG9pbnRfY291bnQ7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgICAgICBwaW5kZXggICA9IGxvY2FscG9pbnRzW2pdOworICAgICAgICAgIEZUX0xvbmcgIG9yaWdfY3Z0ID0gZmFjZS0+Y3Z0W3BpbmRleF07CisKKworICAgICAgICAgIGZhY2UtPmN2dFtwaW5kZXhdID0gKEZUX1Nob3J0KSggb3JpZ19jdnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBkZWx0YXNbal0sIGFwcGx5ICkgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgaWYgKCBvcmlnX2N2dCAhPSBmYWNlLT5jdnRbcGluZGV4XSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAlZCAtPiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbmRleCwgb3JpZ19jdnQsIGZhY2UtPmN2dFtwaW5kZXhdICkpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaWYgKCAhY291bnQgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBub25lXG4iICkpOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIGlmICggbG9jYWxwb2ludHMgIT0gQUxMX1BPSU5UUyApCisgICAgICAgIEZUX0ZSRUUoIGxvY2FscG9pbnRzICk7CisgICAgICBGVF9GUkVFKCBkZWx0YXMgKTsKKworICAgICAgb2Zmc2V0VG9EYXRhICs9IHR1cGxlRGF0YVNpemU7CisKKyAgICAgIEZUX1N0cmVhbV9TZWVrU2V0KCBzdHJlYW0sIGhlcmUgKTsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiXG4iICkpOworCisgIEZFeGl0OgorICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICBFeGl0OgorICAgIEZUX0ZSRUUoIHR1cGxlX2Nvb3JkcyApOworICAgIEZUX0ZSRUUoIGltX3N0YXJ0X2Nvb3JkcyApOworICAgIEZUX0ZSRUUoIGltX2VuZF9jb29yZHMgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogU2hpZnQgdGhlIG9yaWdpbmFsIGNvb3JkaW5hdGVzIG9mIGFsbCBwb2ludHMgYmV0d2VlbiBpbmRpY2VzIGBwMScgKi8KKyAgLyogYW5kIGBwMicsIHVzaW5nIHRoZSBzYW1lIGRpZmZlcmVuY2UgYXMgZ2l2ZW4gYnkgaW5kZXggYHJlZicuICAgICAgKi8KKworICAvKiBtb2RlbGVkIGFmdGVyIGBhZl9pdXBfc2hpZnQnICovCisKKyAgc3RhdGljIHZvaWQKKyAgdHRfZGVsdGFfc2hpZnQoIGludCAgICAgICAgIHAxLAorICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgcDIsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICByZWYsCisgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBvdXRfcG9pbnRzICkKKyAgeworICAgIGludCAgICAgICAgcDsKKyAgICBGVF9WZWN0b3IgIGRlbHRhOworCisKKyAgICBkZWx0YS54ID0gb3V0X3BvaW50c1tyZWZdLnggLSBpbl9wb2ludHNbcmVmXS54OworICAgIGRlbHRhLnkgPSBvdXRfcG9pbnRzW3JlZl0ueSAtIGluX3BvaW50c1tyZWZdLnk7CisKKyAgICBpZiAoIGRlbHRhLnggPT0gMCAmJiBkZWx0YS55ID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgZm9yICggcCA9IHAxOyBwIDwgcmVmOyBwKysgKQorICAgIHsKKyAgICAgIG91dF9wb2ludHNbcF0ueCArPSBkZWx0YS54OworICAgICAgb3V0X3BvaW50c1twXS55ICs9IGRlbHRhLnk7CisgICAgfQorCisgICAgZm9yICggcCA9IHJlZiArIDE7IHAgPD0gcDI7IHArKyApCisgICAgeworICAgICAgb3V0X3BvaW50c1twXS54ICs9IGRlbHRhLng7CisgICAgICBvdXRfcG9pbnRzW3BdLnkgKz0gZGVsdGEueTsKKyAgICB9CisgIH0KKworCisgIC8qIEludGVycG9sYXRlIHRoZSBvcmlnaW5hbCBjb29yZGluYXRlcyBvZiBhbGwgcG9pbnRzIHdpdGggaW5kaWNlcyAqLworICAvKiBiZXR3ZWVuIGBwMScgYW5kIGBwMicsIHVzaW5nIGByZWYxJyBhbmQgYHJlZjInIGFzIHRoZSByZWZlcmVuY2UgKi8KKyAgLyogcG9pbnQgaW5kaWNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogbW9kZWxlZCBhZnRlciBgYWZfaXVwX2ludGVycCcsIGBfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZScsIGFuZCAqLworICAvKiBgSW5zX0lVUCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgdHRfZGVsdGFfaW50ZXJwb2xhdGUoIGludCAgICAgICAgIHAxLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgcDIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICByZWYxLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgcmVmMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIG91dF9wb2ludHMgKQorICB7CisgICAgaW50ICBwLCBpOworCisgICAgRlRfUG9zICBvdXQsIGluMSwgaW4yLCBvdXQxLCBvdXQyLCBkMSwgZDI7CisKKworICAgIGlmICggcDEgPiBwMiApCisgICAgICByZXR1cm47CisKKyAgICAvKiBoYW5kbGUgYm90aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjb29yZGluYXRlcyAqLworICAgIGZvciAoIGkgPSAwOyBpIDw9IDE7IGkrKyApCisgICAgeworICAgICAgLyogc2hpZnQgYXJyYXkgcG9pbnRlcnMgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIGBmb28ueScgYXMgYGZvby54JyAqLworICAgICAgaW5fcG9pbnRzICA9IChGVF9WZWN0b3IqKSggKEZUX1BvcyopaW5fcG9pbnRzICsgaSApOworICAgICAgb3V0X3BvaW50cyA9IChGVF9WZWN0b3IqKSggKEZUX1Bvcyopb3V0X3BvaW50cyArIGkgKTsKKworICAgICAgaWYgKCBpbl9wb2ludHNbcmVmMV0ueCA+IGluX3BvaW50c1tyZWYyXS54ICkKKyAgICAgIHsKKyAgICAgICAgcCAgICA9IHJlZjE7CisgICAgICAgIHJlZjEgPSByZWYyOworICAgICAgICByZWYyID0gcDsKKyAgICAgIH0KKworICAgICAgaW4xICA9IGluX3BvaW50c1tyZWYxXS54OworICAgICAgaW4yICA9IGluX3BvaW50c1tyZWYyXS54OworICAgICAgb3V0MSA9IG91dF9wb2ludHNbcmVmMV0ueDsKKyAgICAgIG91dDIgPSBvdXRfcG9pbnRzW3JlZjJdLng7CisgICAgICBkMSAgID0gb3V0MSAtIGluMTsKKyAgICAgIGQyICAgPSBvdXQyIC0gaW4yOworCisgICAgICBpZiAoIG91dDEgPT0gb3V0MiB8fCBpbjEgPT0gaW4yICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggcCA9IHAxOyBwIDw9IHAyOyBwKysgKQorICAgICAgICB7CisgICAgICAgICAgb3V0ID0gaW5fcG9pbnRzW3BdLng7CisKKyAgICAgICAgICBpZiAoIG91dCA8PSBpbjEgKQorICAgICAgICAgICAgb3V0ICs9IGQxOworICAgICAgICAgIGVsc2UgaWYgKCBvdXQgPj0gaW4yICkKKyAgICAgICAgICAgIG91dCArPSBkMjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQgPSBvdXQxOworCisgICAgICAgICAgb3V0X3BvaW50c1twXS54ID0gb3V0OworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX0ZpeGVkICBzY2FsZSA9IEZUX0RpdkZpeCggb3V0MiAtIG91dDEsIGluMiAtIGluMSApOworCisKKyAgICAgICAgZm9yICggcCA9IHAxOyBwIDw9IHAyOyBwKysgKQorICAgICAgICB7CisgICAgICAgICAgb3V0ID0gaW5fcG9pbnRzW3BdLng7CisKKyAgICAgICAgICBpZiAoIG91dCA8PSBpbjEgKQorICAgICAgICAgICAgb3V0ICs9IGQxOworICAgICAgICAgIGVsc2UgaWYgKCBvdXQgPj0gaW4yICkKKyAgICAgICAgICAgIG91dCArPSBkMjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQgPSBvdXQxICsgRlRfTXVsRml4KCBvdXQgLSBpbjEsIHNjYWxlICk7CisKKyAgICAgICAgICBvdXRfcG9pbnRzW3BdLnggPSBvdXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qIEludGVycG9sYXRlIHBvaW50cyB3aXRob3V0IGRlbHRhIHZhbHVlcywgc2ltaWxhciB0byAqLworICAvKiB0aGUgYElVUCcgaGludGluZyBpbnN0cnVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBtb2RlbGVkIGFmdGVyIGBJbnNfSVVQICovCisKKyAgc3RhdGljIHZvaWQKKyAgdHRfaGFuZGxlX2RlbHRhcyggRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICBoYXNfZGVsdGEgKQorICB7CisgICAgRlRfVmVjdG9yKiAgb3V0X3BvaW50czsKKworICAgIEZUX1VJbnQgIGZpcnN0X3BvaW50OworICAgIEZUX1VJbnQgIGVuZF9wb2ludDsKKworICAgIEZUX1VJbnQgIGZpcnN0X2RlbHRhOworICAgIEZUX1VJbnQgIGN1cl9kZWx0YTsKKworICAgIEZUX1VJbnQgICBwb2ludDsKKyAgICBGVF9TaG9ydCAgY29udG91cjsKKworCisgICAgLyogaWdub3JlIGVtcHR5IG91dGxpbmVzICovCisgICAgaWYgKCAhb3V0bGluZS0+bl9jb250b3VycyApCisgICAgICByZXR1cm47CisKKyAgICBvdXRfcG9pbnRzID0gb3V0bGluZS0+cG9pbnRzOworCisgICAgY29udG91ciA9IDA7CisgICAgcG9pbnQgICA9IDA7CisKKyAgICBkbworICAgIHsKKyAgICAgIGVuZF9wb2ludCAgID0gb3V0bGluZS0+Y29udG91cnNbY29udG91cl07CisgICAgICBmaXJzdF9wb2ludCA9IHBvaW50OworCisgICAgICAvKiBzZWFyY2ggZmlyc3QgcG9pbnQgdGhhdCBoYXMgYSBkZWx0YSAqLworICAgICAgd2hpbGUgKCBwb2ludCA8PSBlbmRfcG9pbnQgJiYgIWhhc19kZWx0YVtwb2ludF0gKQorICAgICAgICBwb2ludCsrOworCisgICAgICBpZiAoIHBvaW50IDw9IGVuZF9wb2ludCApCisgICAgICB7CisgICAgICAgIGZpcnN0X2RlbHRhID0gcG9pbnQ7CisgICAgICAgIGN1cl9kZWx0YSAgID0gcG9pbnQ7CisKKyAgICAgICAgcG9pbnQrKzsKKworICAgICAgICB3aGlsZSAoIHBvaW50IDw9IGVuZF9wb2ludCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBzZWFyY2ggbmV4dCBwb2ludCB0aGF0IGhhcyBhIGRlbHRhICAqLworICAgICAgICAgIC8qIGFuZCBpbnRlcnBvbGF0ZSBpbnRlcm1lZGlhdGUgcG9pbnRzICovCisgICAgICAgICAgaWYgKCBoYXNfZGVsdGFbcG9pbnRdICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0dF9kZWx0YV9pbnRlcnBvbGF0ZSggY3VyX2RlbHRhICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcG9pbnRzICk7CisgICAgICAgICAgICBjdXJfZGVsdGEgPSBwb2ludDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBwb2ludCsrOworICAgICAgICB9CisKKyAgICAgICAgLyogc2hpZnQgY29udG91ciBpZiB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgZGVsdGEgKi8KKyAgICAgICAgaWYgKCBjdXJfZGVsdGEgPT0gZmlyc3RfZGVsdGEgKQorICAgICAgICAgIHR0X2RlbHRhX3NoaWZ0KCBmaXJzdF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BvaW50cyApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBvdGhlcndpc2UgaGFuZGxlIHJlbWFpbmluZyBwb2ludHMgICAgICAgKi8KKyAgICAgICAgICAvKiBhdCB0aGUgZW5kIGFuZCBiZWdpbm5pbmcgb2YgdGhlIGNvbnRvdXIgKi8KKyAgICAgICAgICB0dF9kZWx0YV9pbnRlcnBvbGF0ZSggY3VyX2RlbHRhICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wb2ludHMgKTsKKworICAgICAgICAgIGlmICggZmlyc3RfZGVsdGEgPiAwICkKKyAgICAgICAgICAgIHR0X2RlbHRhX2ludGVycG9sYXRlKCBmaXJzdF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9kZWx0YSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcG9pbnRzICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGNvbnRvdXIrKzsKKworICAgIH0gd2hpbGUgKCBjb250b3VyIDwgb3V0bGluZS0+bl9jb250b3VycyApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBcHBseSB0aGUgYXBwcm9wcmlhdGUgZGVsdGFzIHRvIHRoZSBjdXJyZW50IGdseXBoLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggYmVpbmcgbW9kaWZpZWQuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbl9wb2ludHMgICAgOjogVGhlIG51bWJlciBvZiB0aGUgcG9pbnRzIGluIHRoZSBnbHlwaCwgaW5jbHVkaW5nICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHBoYW50b20gcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgICAgIDo6IFRoZSBvdXRsaW5lIHRvIGNoYW5nZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKCBUVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIG5fcG9pbnRzICkKKyAgeworICAgIEZUX1N0cmVhbSAgIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEdYX0JsZW5kICAgIGJsZW5kICA9IGZhY2UtPmJsZW5kOworCisgICAgRlRfVmVjdG9yKiAgcG9pbnRzX29yZyA9IE5VTEw7CisgICAgRlRfQm9vbCogICAgaGFzX2RlbHRhICA9IE5VTEw7CisKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9VTG9uZyAgICBnbHlwaF9zdGFydDsKKyAgICBGVF9VSW50ICAgICB0dXBsZUNvdW50OworICAgIEZUX1VMb25nICAgIG9mZnNldFRvRGF0YTsKKyAgICBGVF9VTG9uZyAgICBoZXJlOworICAgIEZUX1VJbnQgICAgIGksIGo7CisgICAgRlRfRml4ZWQqICAgdHVwbGVfY29vcmRzICAgID0gTlVMTDsKKyAgICBGVF9GaXhlZCogICBpbV9zdGFydF9jb29yZHMgPSBOVUxMOworICAgIEZUX0ZpeGVkKiAgIGltX2VuZF9jb29yZHMgICA9IE5VTEw7CisgICAgRlRfVUludCAgICAgcG9pbnRfY291bnQsIHNwb2ludF9jb3VudCA9IDA7CisgICAgRlRfVVNob3J0KiAgc2hhcmVkcG9pbnRzID0gTlVMTDsKKyAgICBGVF9VU2hvcnQqICBsb2NhbHBvaW50cyAgPSBOVUxMOworICAgIEZUX1VTaG9ydCogIHBvaW50czsKKyAgICBGVF9TaG9ydCAgICAqZGVsdGFzX3gsICpkZWx0YXNfeTsKKworCisgICAgaWYgKCAhZmFjZS0+ZG9ibGVuZCB8fCBibGVuZCA9PSBOVUxMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBnbHlwaF9pbmRleCA+PSBibGVuZC0+Z3ZfZ2x5cGhjbnQgICAgICB8fAorICAgICAgICAgYmxlbmQtPmdseXBob2Zmc2V0c1tnbHlwaF9pbmRleF0gPT0KKyAgICAgICAgICAgYmxlbmQtPmdseXBob2Zmc2V0c1tnbHlwaF9pbmRleCArIDFdICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXM6IgorICAgICAgICAgICAgICAgICAgIiBubyB2YXJpYXRpb24gZGF0YSBmb3IgdGhpcyBnbHlwaFxuIiApKTsKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBvaW50c19vcmcsIG5fcG9pbnRzICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggaGFzX2RlbHRhLCBuX3BvaW50cyApICApCisgICAgICBnb3RvIEZhaWwxOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggYmxlbmQtPmdseXBob2Zmc2V0c1tnbHlwaF9pbmRleF0gKSAgIHx8CisgICAgICAgICBGVF9GUkFNRV9FTlRFUiggYmxlbmQtPmdseXBob2Zmc2V0c1tnbHlwaF9pbmRleCArIDFdIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXhdICkgKQorICAgICAgZ290byBGYWlsMTsKKworICAgIGdseXBoX3N0YXJ0ID0gRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKTsKKworICAgIC8qIGVhY2ggc2V0IG9mIGdseXBoIHZhcmlhdGlvbiBkYXRhIGlzIGZvcm1hdHRlZCBzaW1pbGFybHkgdG8gYGN2YXInICovCisgICAgLyogKGV4Y2VwdCB3ZSBnZXQgc2hhcmVkIHBvaW50cyBhbmQgZ2xvYmFsIHR1cGxlcykgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCB0dXBsZV9jb29yZHMsIGJsZW5kLT5udW1fYXhpcyApICAgIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGltX3N0YXJ0X2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggaW1fZW5kX2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgICApCisgICAgICBnb3RvIEZhaWwyOworCisgICAgdHVwbGVDb3VudCAgID0gRlRfR0VUX1VTSE9SVCgpOworICAgIG9mZnNldFRvRGF0YSA9IGdseXBoX3N0YXJ0ICsgRlRfR0VUX1VTSE9SVCgpOworCisgICAgaWYgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVTX1NIQVJFX1BPSU5UX05VTUJFUlMgKQorICAgIHsKKyAgICAgIGhlcmUgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOworCisgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmZzZXRUb0RhdGEgKTsKKworICAgICAgc2hhcmVkcG9pbnRzID0gZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIHN0cmVhbSwgJnNwb2ludF9jb3VudCApOworICAgICAgb2Zmc2V0VG9EYXRhID0gRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKTsKKworICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgaGVyZSApOworICAgIH0KKworICAgIEZUX1RSQUNFNSgoICJndmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwgdHVwbGVDb3VudCApKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgICB0dXBsZURhdGFTaXplOworICAgICAgRlRfVUludCAgIHR1cGxlSW5kZXg7CisgICAgICBGVF9GaXhlZCAgYXBwbHk7CisKKworICAgICAgRlRfVFJBQ0U2KCggIiAgdHVwbGUgJWQ6XG4iLCBpICkpOworCisgICAgICB0dXBsZURhdGFTaXplID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgdHVwbGVJbmRleCAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKworICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgKQorICAgICAgeworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKKyAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOyAgLyogY29udmVydCBmcm9tICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG9ydCBmcmFjIHRvIGZpeGVkICovCisgICAgICB9CisgICAgICBlbHNlIGlmICggKCB0dXBsZUluZGV4ICYgR1hfVElfVFVQTEVfSU5ERVhfTUFTSyApID49IGJsZW5kLT50dXBsZWNvdW50ICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEZhaWwyOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBGVF9NRU1fQ09QWSgKKyAgICAgICAgICB0dXBsZV9jb29yZHMsCisgICAgICAgICAgJmJsZW5kLT50dXBsZWNvb3Jkc1soIHR1cGxlSW5kZXggJiAweEZGRiApICogYmxlbmQtPm51bV9heGlzXSwKKyAgICAgICAgICBibGVuZC0+bnVtX2F4aXMgKiBzaXplb2YgKCBGVF9GaXhlZCApICk7CisKKyAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCisgICAgICB7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIGltX2VuZF9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOworICAgICAgfQorCisgICAgICBhcHBseSA9IGZ0X3Zhcl9hcHBseV90dXBsZSggYmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydCl0dXBsZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3JkcyApOworCisgICAgICBpZiAoIGFwcGx5ID09IDAgKSAgICAgICAgICAgICAgLyogdHVwbGUgaXNuJ3QgYWN0aXZlIGZvciBvdXIgYmxlbmQgKi8KKyAgICAgIHsKKyAgICAgICAgb2Zmc2V0VG9EYXRhICs9IHR1cGxlRGF0YVNpemU7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBoZXJlID0gRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKTsKKworICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfUFJJVkFURV9QT0lOVF9OVU1CRVJTICkKKyAgICAgIHsKKyAgICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7CisKKyAgICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLCAmcG9pbnRfY291bnQgKTsKKyAgICAgICAgcG9pbnRzICAgICAgPSBsb2NhbHBvaW50czsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcG9pbnRzICAgICAgPSBzaGFyZWRwb2ludHM7CisgICAgICAgIHBvaW50X2NvdW50ID0gc3BvaW50X2NvdW50OworICAgICAgfQorCisgICAgICBkZWx0YXNfeCA9IGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9jb3VudCA9PSAwID8gbl9wb2ludHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb2ludF9jb3VudCApOworICAgICAgZGVsdGFzX3kgPSBmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfY291bnQgPT0gMCA/IG5fcG9pbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcG9pbnRfY291bnQgKTsKKworICAgICAgaWYgKCBwb2ludHMgPT0gTlVMTCB8fCBkZWx0YXNfeSA9PSBOVUxMIHx8IGRlbHRhc194ID09IE5VTEwgKQorICAgICAgICA7IC8qIGZhaWx1cmUsIGlnbm9yZSBpdCAqLworCisgICAgICBlbHNlIGlmICggcG9pbnRzID09IEFMTF9QT0lOVFMgKQorICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGludCAgY291bnQgPSAwOworI2VuZGlmCisKKworICAgICAgICBGVF9UUkFDRTcoKCAiICAgIHBvaW50IGRlbHRhczpcbiIgKSk7CisKKyAgICAgICAgLyogdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBkZWx0YXMgZm9yIGV2ZXJ5IHBvaW50IGluIHRoZSBnbHlwaCAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQorICAgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBGVF9WZWN0b3IgIHBvaW50X29yZyA9IG91dGxpbmUtPnBvaW50c1tqXTsKKyNlbmRpZgorCisKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggKCBwb2ludF9vcmcueCAhPSBvdXRsaW5lLT5wb2ludHNbal0ueCApIHx8CisgICAgICAgICAgICAgICAoIHBvaW50X29yZy55ICE9IG91dGxpbmUtPnBvaW50c1tqXS55ICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogKCVkLCAlZCkgLT4gKCVkLCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfb3JnLngsCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9vcmcueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpZiAoICFjb3VudCApCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIG5vbmVcbiIgKSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgZWxzZQorICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGludCAgY291bnQgPSAwOworI2VuZGlmCisKKworICAgICAgICAvKiB3ZSBoYXZlIHRvIGludGVycG9sYXRlIHRoZSBtaXNzaW5nIGRlbHRhcyBzaW1pbGFyIHRvIHRoZSAqLworICAgICAgICAvKiBJVVAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgcG9pbnRzX29yZ1tqXSA9IG91dGxpbmUtPnBvaW50c1tqXTsKKyAgICAgICAgICBoYXNfZGVsdGFbal0gID0gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBvaW50X2NvdW50OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVVNob3J0ICBpZHggPSBsb2NhbHBvaW50c1tqXTsKKworCisgICAgICAgICAgaWYgKCBpZHggPj0gbl9wb2ludHMgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBoYXNfZGVsdGFbaWR4XSA9IFRSVUU7CisKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbaWR4XS54ICs9IEZUX011bEZpeCggZGVsdGFzX3hbal0sIGFwcGx5ICk7CisgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2lkeF0ueSArPSBGVF9NdWxGaXgoIGRlbHRhc195W2pdLCBhcHBseSApOworICAgICAgICB9CisKKyAgICAgICAgLyogbm8gbmVlZCB0byBoYW5kbGUgcGhhbnRvbSBwb2ludHMgaGVyZSwgICAgICAqLworICAgICAgICAvKiBzaW5jZSBzb2xpdGFyeSBwb2ludHMgY2FuJ3QgYmUgaW50ZXJwb2xhdGVkICovCisgICAgICAgIHR0X2hhbmRsZV9kZWx0YXMoIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c19vcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19kZWx0YSApOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgRlRfVFJBQ0U3KCggIiAgICBwb2ludCBkZWx0YXM6XG4iICkpOworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKykKKyAgICAgICAgeworICAgICAgICAgIGlmICggKCBwb2ludHNfb3JnW2pdLnggIT0gb3V0bGluZS0+cG9pbnRzW2pdLnggKSB8fAorICAgICAgICAgICAgICAgKCBwb2ludHNfb3JnW2pdLnkgIT0gb3V0bGluZS0+cG9pbnRzW2pdLnkgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAoJWQsICVkKSAtPiAoJWQsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnW2pdLngsCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnW2pdLnksCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICkpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFjb3VudCApCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIG5vbmVcbiIgKSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgaWYgKCBsb2NhbHBvaW50cyAhPSBBTExfUE9JTlRTICkKKyAgICAgICAgRlRfRlJFRSggbG9jYWxwb2ludHMgKTsKKyAgICAgIEZUX0ZSRUUoIGRlbHRhc194ICk7CisgICAgICBGVF9GUkVFKCBkZWx0YXNfeSApOworCisgICAgICBvZmZzZXRUb0RhdGEgKz0gdHVwbGVEYXRhU2l6ZTsKKworICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgaGVyZSApOworICAgIH0KKworICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CisKKyAgRmFpbDI6CisgICAgRlRfRlJFRSggdHVwbGVfY29vcmRzICk7CisgICAgRlRfRlJFRSggaW1fc3RhcnRfY29vcmRzICk7CisgICAgRlRfRlJFRSggaW1fZW5kX2Nvb3JkcyApOworCisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgIEZhaWwxOgorICAgIEZUX0ZSRUUoIHBvaW50c19vcmcgKTsKKyAgICBGVF9GUkVFKCBoYXNfZGVsdGEgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZG9uZV9ibGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZSB0aGUgYmxlbmQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9kb25lX2JsZW5kKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgR1hfQmxlbmQgICBibGVuZCApCisgIHsKKyAgICBpZiAoIGJsZW5kICE9IE5VTEwgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgRlRfRlJFRSggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHMgKTsKKyAgICAgIEZUX0ZSRUUoIGJsZW5kLT5tbXZhciApOworCisgICAgICBpZiAoIGJsZW5kLT5hdmFyX3NlZ21lbnQgIT0gTlVMTCApCisgICAgICB7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm51bV9heGlzOyBpKysgKQorICAgICAgICAgIEZUX0ZSRUUoIGJsZW5kLT5hdmFyX3NlZ21lbnRbaV0uY29ycmVzcG9uZGVuY2UgKTsKKyAgICAgICAgRlRfRlJFRSggYmxlbmQtPmF2YXJfc2VnbWVudCApOworICAgICAgfQorCisgICAgICBGVF9GUkVFKCBibGVuZC0+dHVwbGVjb29yZHMgKTsKKyAgICAgIEZUX0ZSRUUoIGJsZW5kLT5nbHlwaG9mZnNldHMgKTsKKyAgICAgIEZUX0ZSRUUoIGJsZW5kICk7CisgICAgfQorICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MGQ0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaApAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRneHZhci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZyBhbmQgR2VvcmdlIFdpbGxpYW1zLiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFRHWFZBUl9IX18KKyNkZWZpbmUgX19UVEdYVkFSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInR0b2Jqcy5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgR1hfQVZhckNvcnJlc3BvbmRlbmNlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYHNob3J0RnJhY0NvcnJlc3BvbmRlbmNlJyBpbiBgYXZhcicgICovCisgIC8qICAgIHRhYmxlIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbnMgZnJvbSBBcHBsZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0FWYXJDb3JyZXNwb25kZW5jZVJlY18KKyAgeworICAgIEZUX0ZpeGVkICBmcm9tQ29vcmQ7CisgICAgRlRfRml4ZWQgIHRvQ29vcmQ7CisKKyAgfSBHWF9BVmFyQ29ycmVzcG9uZGVuY2VSZWNfLCAqR1hfQVZhckNvcnJlc3BvbmRlbmNlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgR1hfQVZhclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGF0YSBmcm9tIHRoZSBzZWdtZW50IGZpZWxkIG9mIGBhdmFyJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXJlIGlzIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBheGlzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0FWYXJTZWdtZW50UmVjXworICB7CisgICAgRlRfVVNob3J0ICAgICAgICAgICAgICBwYWlyQ291bnQ7CisgICAgR1hfQVZhckNvcnJlc3BvbmRlbmNlICBjb3JyZXNwb25kZW5jZTsgLyogYXJyYXkgd2l0aCBwYWlyQ291bnQgZW50cmllcyAqLworCisgIH0gR1hfQVZhclNlZ21lbnRSZWMsICpHWF9BVmFyU2VnbWVudDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdYX0JsZW5kUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERhdGEgZm9yIGludGVycG9sYXRpbmcgYSBmb250IGZyb20gYSBkaXN0b3J0YWJsZSBmb250IHNwZWNpZmllZCAgICAqLworICAvKiAgICBieSB0aGUgR1ggKnZhciB0YWJsZXMgKFtmZ2NhXXZhcikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fYXhpcyAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgYXhlcyBhbG9uZyB3aGljaCBpbnRlcnBvbGF0aW9uICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGhhcHBlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBub3JtYWxpemVkY29vcmRzIDo6IEEgbm9ybWFsaXplZCB2YWx1ZSAoYmV0d2VlbiBbLTEsMV0pIGluZGljYXRpbmcgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udHJpYnV0aW9uIGFsb25nIGVhY2ggYXhpcyB0byB0aGUgZmluYWwgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0JsZW5kUmVjXworICB7CisgICAgRlRfVUludCAgICAgICAgIG51bV9heGlzOworICAgIEZUX0ZpeGVkKiAgICAgICBub3JtYWxpemVkY29vcmRzOworCisgICAgRlRfTU1fVmFyKiAgICAgIG1tdmFyOworICAgIEZUX09mZnNldCAgICAgICBtbXZhcl9sZW47CisKKyAgICBGVF9Cb29sICAgICAgICAgYXZhcl9jaGVja2VkOworICAgIEdYX0FWYXJTZWdtZW50ICBhdmFyX3NlZ21lbnQ7CisKKyAgICBGVF9VSW50ICAgICAgICAgdHVwbGVjb3VudDsgICAgICAvKiBzaGFyZWQgdHVwbGVzIGluIGBndmFyJyAgICAgICAgICAgKi8KKyAgICBGVF9GaXhlZCogICAgICAgdHVwbGVjb29yZHM7ICAgICAvKiB0dXBsZWNvb3Jkc1t0dXBsZWNvdW50XVtudW1fYXhpc10gKi8KKworICAgIEZUX1VJbnQgICAgICAgICBndl9nbHlwaGNudDsKKyAgICBGVF9VTG9uZyogICAgICAgZ2x5cGhvZmZzZXRzOworCisgIH0gR1hfQmxlbmRSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxlbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHWF9UdXBsZUNvdW50RmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGbGFncyB1c2VkIHdpdGhpbiB0aGUgYFR1cGxlQ291bnQnIGZpZWxkIG9mIHRoZSBgZ3ZhcicgdGFibGUuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgR1hfVHVwbGVDb3VudEZsYWdzXworICB7CisgICAgR1hfVENfVFVQTEVTX1NIQVJFX1BPSU5UX05VTUJFUlMgPSAweDgwMDAsCisgICAgR1hfVENfUkVTRVJWRURfVFVQTEVfRkxBR1MgICAgICAgPSAweDcwMDAsCisgICAgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyAgICAgICAgICAgPSAweDBGRkYKKworICB9IEdYX1R1cGxlQ291bnRGbGFnczsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPGVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdYX1R1cGxlSW5kZXhGbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZsYWdzIHVzZWQgd2l0aGluIHRoZSBgVHVwbGVJbmRleCcgZmllbGQgb2YgdGhlIGBndmFyJyBhbmQgYGN2YXInICAqLworICAvKiAgICB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgR1hfVHVwbGVJbmRleEZsYWdzXworICB7CisgICAgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgID0gMHg4MDAwLAorICAgIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSAgICA9IDB4NDAwMCwKKyAgICBHWF9USV9QUklWQVRFX1BPSU5UX05VTUJFUlMgPSAweDIwMDAsCisgICAgR1hfVElfUkVTRVJWRURfVFVQTEVfRkxBRyAgID0gMHgxMDAwLAorICAgIEdYX1RJX1RVUExFX0lOREVYX01BU0sgICAgICA9IDB4MEZGRgorCisgIH0gR1hfVHVwbGVJbmRleEZsYWdzOworCisKKyNkZWZpbmUgVFRBR193Z2h0ICBGVF9NQUtFX1RBRyggJ3cnLCAnZycsICdoJywgJ3QnICkKKyNkZWZpbmUgVFRBR193ZHRoICBGVF9NQUtFX1RBRyggJ3cnLCAnZCcsICd0JywgJ2gnICkKKyNkZWZpbmUgVFRBR19vcHN6ICBGVF9NQUtFX1RBRyggJ28nLCAncCcsICdzJywgJ3onICkKKyNkZWZpbmUgVFRBR19zbG50ICBGVF9NQUtFX1RBRyggJ3MnLCAnbCcsICduJywgJ3QnICkKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFRUX1NldF9NTV9CbGVuZCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFRUX1NldF9WYXJfRGVzaWduKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFRUX0dldF9NTV9WYXIoIFRUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICBGVF9NTV9WYXIqICAqbWFzdGVyICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX3ZhcnlfY3Z0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBuX3BvaW50cyApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9kb25lX2JsZW5kKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgR1hfQmxlbmQgICBibGVuZCApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogX19UVEdYVkFSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGludGVycC5jIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGludGVycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWY2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMKQEAgLTAsMCArMSw4Mjg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGludGVycC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIEdyZWcgSGl0Y2hjb2NrIGZyb20gTWljcm9zb2Z0IGhhcyBoZWxwZWQgYSBsb3QgaW4gcmVzb2x2aW5nIHVuY2xlYXIgKi8KKy8qIGlzc3VlczsgbWFueSB0aGFua3MhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfVFJJR09OT01FVFJZX0gKKyNpbmNsdWRlIEZUX1NZU1RFTV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSAorCisjaW5jbHVkZSAidHRpbnRlcnAuaCIKKyNpbmNsdWRlICJ0dGVycm9ycy5oIgorI2luY2x1ZGUgInR0c3VicGl4LmgiCisKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRpbnRlcnAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW4gb3JkZXIgdG8gZGV0ZWN0IGluZmluaXRlIGxvb3BzIGluIHRoZSBjb2RlLCB3ZSBzZXQgdXAgYSBjb3VudGVyICAgICovCisgIC8qIHdpdGhpbiB0aGUgcnVuIGxvb3AuICBBIHNpbmdsZSBzdHJva2Ugb2YgaW50ZXJwcmV0YXRpb24gaXMgbm93ICAgICAgICAqLworICAvKiBsaW1pdGVkIHRvIGEgbWF4aW11bSBudW1iZXIgb2Ygb3Bjb2RlcyBkZWZpbmVkIGJlbG93LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1BWF9SVU5OQUJMRV9PUENPREVTICAxMDAwMDAwTAorCisKKyNkZWZpbmUgU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGV4Yy0+ZmFjZSApKS0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBcCisgICAgICAgICAgICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKKworCisjZGVmaW5lIFBST0pFQ1QoIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0KCBleGMsICh2MSktPnggLSAodjIpLT54LCAodjEpLT55IC0gKHYyKS0+eSApCisKKyNkZWZpbmUgRFVBTFBST0ooIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiggZXhjLCAodjEpLT54IC0gKHYyKS0+eCwgKHYxKS0+eSAtICh2MiktPnkgKQorCisjZGVmaW5lIEZBU1RfUFJPSkVDVCggdiApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgKHYpLT54LCAodiktPnkgKQorCisjZGVmaW5lIEZBU1RfRFVBTFBST0ooIHYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiggZXhjLCAodiktPngsICh2KS0+eSApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEluc3RydWN0aW9uIGRpc3BhdGNoIGZ1bmN0aW9uLCBhcyB1c2VkIGJ5IHRoZSBpbnRlcnByZXRlci4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiB2b2lkICAoKlRJbnN0cnVjdGlvbl9GdW5jdGlvbikoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUd28gc2ltcGxlIGJvdW5kcy1jaGVja2luZyBtYWNyb3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJPVU5EUyggeCwgbiApICAgKCAoRlRfVUludCkoeCkgID49IChGVF9VSW50KShuKSAgKQorI2RlZmluZSBCT1VORFNMKCB4LCBuICkgICggKEZUX1VMb25nKSh4KSA+PSAoRlRfVUxvbmcpKG4pICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBtYWNybyBjb21wdXRlcyAoYSoyXjE0KS9iIGFuZCBjb21wbGVtZW50cyBUVF9NdWxGaXgxNC4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUVF9EaXZGaXgxNCggYSwgYiApICBGVF9EaXZGaXgoIGEsIChiKSA8PCAyICkKKworCisjdW5kZWYgIFNVQ0NFU1MKKyNkZWZpbmUgU1VDQ0VTUyAgMAorCisjdW5kZWYgIEZBSUxVUkUKKyNkZWZpbmUgRkFJTFVSRSAgMQorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyNkZWZpbmUgR1VFU1NfVkVDVE9SKCBWICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZXhjLT5HUy5WLnggPSAoRlRfRjJEb3QxNCkoIGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwICk7IFwKKyAgICAgIGV4Yy0+R1MuVi55ID0gKEZUX0YyRG90MTQpKCBleGMtPkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMCApOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgR1VFU1NfVkVDVE9SKCBWICkgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIENPREVSQU5HRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR290b19Db2RlUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3dpdGNoZXMgdG8gYSBuZXcgY29kZSByYW5nZSAodXBkYXRlcyB0aGUgY29kZSByZWxhdGVkIGVsZW1lbnRzIGluICovCisgIC8qICAgIGBleGVjJywgYW5kIGBJUCcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJhbmdlIDo6IFRoZSBuZXcgZXhlY3V0aW9uIGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSVAgICAgOjogVGhlIG5ldyBJUCBpbiB0aGUgbmV3IGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyAgOjogVGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUVF9Hb3RvX0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCisgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgcmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgSVAgKQorICB7CisgICAgVFRfQ29kZVJhbmdlKiAgY29kZXJhbmdlOworCisKKyAgICBGVF9BU1NFUlQoIHJhbmdlID49IDEgJiYgcmFuZ2UgPD0gMyApOworCisgICAgY29kZXJhbmdlID0gJmV4ZWMtPmNvZGVSYW5nZVRhYmxlW3JhbmdlIC0gMV07CisKKyAgICBGVF9BU1NFUlQoIGNvZGVyYW5nZS0+YmFzZSAhPSBOVUxMICk7CisKKyAgICAvKiBOT1RFOiBCZWNhdXNlIHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIGEgcHJvZ3JhbSBtYXkgYmUgYSBDQUxMICovCisgICAgLyogICAgICAgd2hpY2ggd2lsbCByZXR1cm4gdG8gdGhlIGZpcnN0IGJ5dGUgKmFmdGVyKiB0aGUgY29kZSAgICAqLworICAgIC8qICAgICAgIHJhbmdlLCB3ZSB0ZXN0IGZvciBJUCA8PSBTaXplIGluc3RlYWQgb2YgSVAgPCBTaXplLiAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfQVNTRVJUKCBJUCA8PSBjb2RlcmFuZ2UtPnNpemUgKTsKKworICAgIGV4ZWMtPmNvZGUgICAgID0gY29kZXJhbmdlLT5iYXNlOworICAgIGV4ZWMtPmNvZGVTaXplID0gY29kZXJhbmdlLT5zaXplOworICAgIGV4ZWMtPklQICAgICAgID0gSVA7CisgICAgZXhlYy0+Y3VyUmFuZ2UgPSByYW5nZTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfU2V0X0NvZGVSYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2V0cyBhIGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFuZ2UgIDo6IFRoZSBjb2RlIHJhbmdlIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlICAgOjogVGhlIG5ldyBjb2RlIGJhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlbmd0aCA6OiBUaGUgcmFuZ2Ugc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGV4ZWMgICA6OiBUaGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVFRfU2V0X0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCisgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBsZW5ndGggKQorICB7CisgICAgRlRfQVNTRVJUKCByYW5nZSA+PSAxICYmIHJhbmdlIDw9IDMgKTsKKworICAgIGV4ZWMtPmNvZGVSYW5nZVRhYmxlW3JhbmdlIC0gMV0uYmFzZSA9IChGVF9CeXRlKiliYXNlOworICAgIGV4ZWMtPmNvZGVSYW5nZVRhYmxlW3JhbmdlIC0gMV0uc2l6ZSA9IGxlbmd0aDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfQ2xlYXJfQ29kZVJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ2xlYXJzIGEgY29kZSByYW5nZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmFuZ2UgOjogVGhlIGNvZGUgcmFuZ2UgaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyAgOjogVGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUVF9DbGVhcl9Db2RlUmFuZ2UoIFRUX0V4ZWNDb250ZXh0ICBleGVjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICByYW5nZSApCisgIHsKKyAgICBGVF9BU1NFUlQoIHJhbmdlID49IDEgJiYgcmFuZ2UgPD0gMyApOworCisgICAgZXhlYy0+Y29kZVJhbmdlVGFibGVbcmFuZ2UgLSAxXS5iYXNlID0gTlVMTDsKKyAgICBleGVjLT5jb2RlUmFuZ2VUYWJsZVtyYW5nZSAtIDFdLnNpemUgPSAwOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIEVYRUNVVElPTiBDT05URVhUIFJPVVRJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Eb25lX0NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZXN0cm95cyBhIGdpdmVuIGNvbnRleHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBleGVjICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVFRfRG9uZV9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYyApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGV4ZWMtPm1lbW9yeTsKKworCisgICAgLyogcG9pbnRzIHpvbmUgKi8KKyAgICBleGVjLT5tYXhQb2ludHMgICA9IDA7CisgICAgZXhlYy0+bWF4Q29udG91cnMgPSAwOworCisgICAgLyogZnJlZSBzdGFjayAqLworICAgIEZUX0ZSRUUoIGV4ZWMtPnN0YWNrICk7CisgICAgZXhlYy0+c3RhY2tTaXplID0gMDsKKworICAgIC8qIGZyZWUgY2FsbCBzdGFjayAqLworICAgIEZUX0ZSRUUoIGV4ZWMtPmNhbGxTdGFjayApOworICAgIGV4ZWMtPmNhbGxTaXplID0gMDsKKyAgICBleGVjLT5jYWxsVG9wICA9IDA7CisKKyAgICAvKiBmcmVlIGdseXBoIGNvZGUgcmFuZ2UgKi8KKyAgICBGVF9GUkVFKCBleGVjLT5nbHlwaElucyApOworICAgIGV4ZWMtPmdseXBoU2l6ZSA9IDA7CisKKyAgICBleGVjLT5zaXplID0gTlVMTDsKKyAgICBleGVjLT5mYWNlID0gTlVMTDsKKworICAgIEZUX0ZSRUUoIGV4ZWMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdF9Db250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBjb250ZXh0IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5IDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgSW5pdF9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKKyAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgRlRfVFJBQ0UxKCggIkluaXRfQ29udGV4dDogbmV3IG9iamVjdCBhdCAweCUwOHBcbiIsIGV4ZWMgKSk7CisKKyAgICBleGVjLT5tZW1vcnkgICA9IG1lbW9yeTsKKyAgICBleGVjLT5jYWxsU2l6ZSA9IDMyOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGV4ZWMtPmNhbGxTdGFjaywgZXhlYy0+Y2FsbFNpemUgKSApCisgICAgICBnb3RvIEZhaWxfTWVtb3J5OworCisgICAgLyogYWxsIHZhbHVlcyBpbiB0aGUgY29udGV4dCBhcmUgc2V0IHRvIDAgYWxyZWFkeSwgYnV0IHRoaXMgaXMgKi8KKyAgICAvKiBoZXJlIGFzIGEgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGV4ZWMtPm1heFBvaW50cyAgID0gMDsKKyAgICBleGVjLT5tYXhDb250b3VycyA9IDA7CisKKyAgICBleGVjLT5zdGFja1NpemUgPSAwOworICAgIGV4ZWMtPmdseXBoU2l6ZSA9IDA7CisKKyAgICBleGVjLT5zdGFjayAgICAgPSBOVUxMOworICAgIGV4ZWMtPmdseXBoSW5zICA9IE5VTEw7CisKKyAgICBleGVjLT5mYWNlID0gTlVMTDsKKyAgICBleGVjLT5zaXplID0gTlVMTDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgRmFpbF9NZW1vcnk6CisgICAgRlRfRVJST1IoKCAiSW5pdF9Db250ZXh0OiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgJXBcbiIsIGV4ZWMgKSk7CisgICAgVFRfRG9uZV9Db250ZXh0KCBleGVjICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXBkYXRlX01heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ2hlY2tzIHRoZSBzaXplIG9mIGEgYnVmZmVyIGFuZCByZWFsbG9jYXRlcyBpdCBpZiBuZWNlc3NhcnkuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWVtb3J5ICAgICA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtdWx0aXBsaWVyIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgYnVmZmVyLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5ld19tYXggICAgOjogVGhlIG5ldyBjYXBhY2l0eSAoc2l6ZSkgb2YgdGhlIGJ1ZmZlci4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICAgICAgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcidzIGN1cnJlbnQgc2l6ZSBleHByZXNzZWQgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGluIGVsZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1ZmYgICAgICAgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBiYXNlIHBvaW50ZXIuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFVwZGF0ZV9NYXgoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICBGVF9VTG9uZyogIHNpemUsCisgICAgICAgICAgICAgIEZUX1VMb25nICAgbXVsdGlwbGllciwKKyAgICAgICAgICAgICAgdm9pZCogICAgICBfcGJ1ZmYsCisgICAgICAgICAgICAgIEZUX1VMb25nICAgbmV3X21heCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgdm9pZCoqICAgIHBidWZmID0gKHZvaWQqKilfcGJ1ZmY7CisKKworICAgIGlmICggKnNpemUgPCBuZXdfbWF4ICkKKyAgICB7CisgICAgICBpZiAoIEZUX1JFQUxMT0MoICpwYnVmZiwgKnNpemUgKiBtdWx0aXBsaWVyLCBuZXdfbWF4ICogbXVsdGlwbGllciApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgKnNpemUgPSBuZXdfbWF4OworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0xvYWRfQ29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFByZXBhcmUgYW4gZXhlY3V0aW9uIGNvbnRleHQgZm9yIGdseXBoIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB0aGUgZ2x5cGggbG9hZGVyIGFuZCBkZWJ1Z2dlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVFRfTG9hZF9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKKyAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBUVF9TaXplICAgICAgICAgc2l6ZSApCisgIHsKKyAgICBGVF9JbnQgICAgICAgICAgaTsKKyAgICBGVF9VTG9uZyAgICAgICAgdG1wOworICAgIFRUX01heFByb2ZpbGUqICBtYXhwOworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKworCisgICAgZXhlYy0+ZmFjZSA9IGZhY2U7CisgICAgbWF4cCAgICAgICA9ICZmYWNlLT5tYXhfcHJvZmlsZTsKKyAgICBleGVjLT5zaXplID0gc2l6ZTsKKworICAgIGlmICggc2l6ZSApCisgICAgeworICAgICAgZXhlYy0+bnVtRkRlZnMgICA9IHNpemUtPm51bV9mdW5jdGlvbl9kZWZzOworICAgICAgZXhlYy0+bWF4RkRlZnMgICA9IHNpemUtPm1heF9mdW5jdGlvbl9kZWZzOworICAgICAgZXhlYy0+bnVtSURlZnMgICA9IHNpemUtPm51bV9pbnN0cnVjdGlvbl9kZWZzOworICAgICAgZXhlYy0+bWF4SURlZnMgICA9IHNpemUtPm1heF9pbnN0cnVjdGlvbl9kZWZzOworICAgICAgZXhlYy0+RkRlZnMgICAgICA9IHNpemUtPmZ1bmN0aW9uX2RlZnM7CisgICAgICBleGVjLT5JRGVmcyAgICAgID0gc2l6ZS0+aW5zdHJ1Y3Rpb25fZGVmczsKKyAgICAgIGV4ZWMtPnR0X21ldHJpY3MgPSBzaXplLT50dG1ldHJpY3M7CisgICAgICBleGVjLT5tZXRyaWNzICAgID0gc2l6ZS0+bWV0cmljczsKKworICAgICAgZXhlYy0+bWF4RnVuYyAgICA9IHNpemUtPm1heF9mdW5jOworICAgICAgZXhlYy0+bWF4SW5zICAgICA9IHNpemUtPm1heF9pbnM7CisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgVFRfTUFYX0NPREVfUkFOR0VTOyBpKysgKQorICAgICAgICBleGVjLT5jb2RlUmFuZ2VUYWJsZVtpXSA9IHNpemUtPmNvZGVSYW5nZVRhYmxlW2ldOworCisgICAgICAvKiBzZXQgZ3JhcGhpY3Mgc3RhdGUgKi8KKyAgICAgIGV4ZWMtPkdTID0gc2l6ZS0+R1M7CisKKyAgICAgIGV4ZWMtPmN2dFNpemUgPSBzaXplLT5jdnRfc2l6ZTsKKyAgICAgIGV4ZWMtPmN2dCAgICAgPSBzaXplLT5jdnQ7CisKKyAgICAgIGV4ZWMtPnN0b3JlU2l6ZSA9IHNpemUtPnN0b3JhZ2Vfc2l6ZTsKKyAgICAgIGV4ZWMtPnN0b3JhZ2UgICA9IHNpemUtPnN0b3JhZ2U7CisKKyAgICAgIGV4ZWMtPnR3aWxpZ2h0ICA9IHNpemUtPnR3aWxpZ2h0OworCisgICAgICAvKiBJbiBjYXNlIG9mIG11bHRpLXRocmVhZGluZyBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIG9sZCBzaXplIG9iamVjdCAqLworICAgICAgLyogbm8gbG9uZ2VyIGV4aXN0cywgdGh1cyB3ZSBtdXN0IGNsZWFyIGFsbCBnbHlwaCB6b25lIHJlZmVyZW5jZXMuICAgKi8KKyAgICAgIGZ0X21lbXNldCggJmV4ZWMtPnpwMCwgMCwgc2l6ZW9mICggZXhlYy0+enAwICkgKTsKKyAgICAgIGV4ZWMtPnpwMSA9IGV4ZWMtPnpwMDsKKyAgICAgIGV4ZWMtPnpwMiA9IGV4ZWMtPnpwMDsKKyAgICB9CisKKyAgICAvKiBYWFg6IFdlIHJlc2VydmUgYSBsaXR0bGUgbW9yZSBlbGVtZW50cyBvbiB0aGUgc3RhY2sgdG8gZGVhbCBzYWZlbHkgKi8KKyAgICAvKiAgICAgIHdpdGggYnJva2VuIGZvbnRzIGxpa2UgYXJpYWxicywgY291cmJzLCB0aW1lc2JzLCBldGMuICAgICAgICAgKi8KKyAgICB0bXAgPSAoRlRfVUxvbmcpZXhlYy0+c3RhY2tTaXplOworICAgIGVycm9yID0gVXBkYXRlX01heCggZXhlYy0+bWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZUX0YyNkRvdDYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikmZXhlYy0+c3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhwLT5tYXhTdGFja0VsZW1lbnRzICsgMzIgKTsKKyAgICBleGVjLT5zdGFja1NpemUgPSAoRlRfTG9uZyl0bXA7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICB0bXAgPSBleGVjLT5nbHlwaFNpemU7CisgICAgZXJyb3IgPSBVcGRhdGVfTWF4KCBleGVjLT5tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAmdG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfQnl0ZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSZleGVjLT5nbHlwaElucywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heHAtPm1heFNpemVPZkluc3RydWN0aW9ucyApOworICAgIGV4ZWMtPmdseXBoU2l6ZSA9IChGVF9VU2hvcnQpdG1wOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZXhlYy0+cHRzLm5fcG9pbnRzICAgPSAwOworICAgIGV4ZWMtPnB0cy5uX2NvbnRvdXJzID0gMDsKKworICAgIGV4ZWMtPnpwMSA9IGV4ZWMtPnB0czsKKyAgICBleGVjLT56cDIgPSBleGVjLT5wdHM7CisgICAgZXhlYy0+enAwID0gZXhlYy0+cHRzOworCisgICAgZXhlYy0+aW5zdHJ1Y3Rpb25fdHJhcCA9IEZBTFNFOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfU2F2ZV9Db250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2F2ZXMgdGhlIGNvZGUgcmFuZ2VzIGluIGEgYHNpemUnIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB0aGUgZ2x5cGggbG9hZGVyIGFuZCBkZWJ1Z2dlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUVF9TYXZlX0NvbnRleHQoIFRUX0V4ZWNDb250ZXh0ICBleGVjLAorICAgICAgICAgICAgICAgICAgIFRUX1NpemUgICAgICAgICBzaXplICkKKyAgeworICAgIEZUX0ludCAgaTsKKworCisgICAgLyogWFhYOiBXaWxsIHByb2JhYmx5IGRpc2FwcGVhciBzb29uIHdpdGggYWxsIHRoZSBjb2RlIHJhbmdlICovCisgICAgLyogICAgICBtYW5hZ2VtZW50LCB3aGljaCBpcyBub3cgcmF0aGVyIG9ic29sZXRlLiAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2l6ZS0+bnVtX2Z1bmN0aW9uX2RlZnMgICAgPSBleGVjLT5udW1GRGVmczsKKyAgICBzaXplLT5udW1faW5zdHJ1Y3Rpb25fZGVmcyA9IGV4ZWMtPm51bUlEZWZzOworCisgICAgc2l6ZS0+bWF4X2Z1bmMgPSBleGVjLT5tYXhGdW5jOworICAgIHNpemUtPm1heF9pbnMgID0gZXhlYy0+bWF4SW5zOworCisgICAgZm9yICggaSA9IDA7IGkgPCBUVF9NQVhfQ09ERV9SQU5HRVM7IGkrKyApCisgICAgICBzaXplLT5jb2RlUmFuZ2VUYWJsZVtpXSA9IGV4ZWMtPmNvZGVSYW5nZVRhYmxlW2ldOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9SdW5fQ29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFeGVjdXRlcyBvbmUgb3IgbW9yZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWJ1ZyA6OiBBIEJvb2xlYW4gZmxhZy4gIElmIHNldCwgdGhlIGZ1bmN0aW9uIHNldHMgc29tZSBpbnRlcm5hbCAgKi8KKyAgLyogICAgICAgICAgICAgdmFyaWFibGVzIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UgVFRfUnVuSW5zKCkgICovCisgIC8qICAgICAgICAgICAgIGlzIGNhbGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgVGhpcyBpcyBjb21tZW50ZWQgb3V0IGN1cnJlbnRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHJ1ZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVFRfUnVuX0NvbnRleHQoIFRUX0V4ZWNDb250ZXh0ICBleGVjICkKKyAgeworICAgIFRUX0dvdG9fQ29kZVJhbmdlKCBleGVjLCB0dF9jb2RlcmFuZ2VfZ2x5cGgsIDAgKTsKKworICAgIGV4ZWMtPnpwMCA9IGV4ZWMtPnB0czsKKyAgICBleGVjLT56cDEgPSBleGVjLT5wdHM7CisgICAgZXhlYy0+enAyID0gZXhlYy0+cHRzOworCisgICAgZXhlYy0+R1MuZ2VwMCA9IDE7CisgICAgZXhlYy0+R1MuZ2VwMSA9IDE7CisgICAgZXhlYy0+R1MuZ2VwMiA9IDE7CisKKyAgICBleGVjLT5HUy5wcm9qVmVjdG9yLnggPSAweDQwMDA7CisgICAgZXhlYy0+R1MucHJvalZlY3Rvci55ID0gMHgwMDAwOworCisgICAgZXhlYy0+R1MuZnJlZVZlY3RvciA9IGV4ZWMtPkdTLnByb2pWZWN0b3I7CisgICAgZXhlYy0+R1MuZHVhbFZlY3RvciA9IGV4ZWMtPkdTLnByb2pWZWN0b3I7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORworICAgIGV4ZWMtPkdTLmJvdGhfeF9heGlzID0gVFJVRTsKKyNlbmRpZgorCisgICAgZXhlYy0+R1Mucm91bmRfc3RhdGUgPSAxOworICAgIGV4ZWMtPkdTLmxvb3AgICAgICAgID0gMTsKKworICAgIC8qIHNvbWUgZ2x5cGhzIGxlYXZlIHNvbWV0aGluZyBvbiB0aGUgc3RhY2suIHNvIHdlIGNsZWFuIGl0ICovCisgICAgLyogYmVmb3JlIGEgbmV3IGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBleGVjLT50b3AgICAgID0gMDsKKyAgICBleGVjLT5jYWxsVG9wID0gMDsKKworICAgIHJldHVybiBleGVjLT5mYWNlLT5pbnRlcnByZXRlciggZXhlYyApOworICB9CisKKworICAvKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYHNjYW5fY29udHJvbCcgaXMgZG9jdW1lbnRlZCBhcyBGQUxTRSBpbiB0aGUgKi8KKyAgLyogVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbi4gIFRoaXMgaXMgY29uZnVzaW5nIHNpbmNlIGl0IGltcGxpZXMgYSAgICAgICovCisgIC8qIEJvb2xlYW4gdmFsdWUuICBIb3dldmVyLCB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgdGh1cyBib3RoIHRoZSAgICAgICAqLworICAvKiBkZWZhdWx0IHZhbHVlcyBvZiBvdXIgYHNjYW5fdHlwZScgYW5kIGBzY2FuX2NvbnRyb2wnIGZpZWxkcyAod2hpY2ggKi8KKyAgLyogdGhlIGRvY3VtZW50YXRpb24ncyBgc2Nhbl9jb250cm9sJyB2YXJpYWJsZSBpcyBzcGxpdCBpbnRvKSBhcmUgICAgICovCisgIC8qIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIGNvbnN0IFRUX0dyYXBoaWNzU3RhdGUgIHR0X2RlZmF1bHRfZ3JhcGhpY3Nfc3RhdGUgPQorICB7CisgICAgMCwgMCwgMCwKKyAgICB7IDB4NDAwMCwgMCB9LAorICAgIHsgMHg0MDAwLCAwIH0sCisgICAgeyAweDQwMDAsIDAgfSwKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgVFJVRSwKKyNlbmRpZgorCisgICAgMSwgNjQsIDEsCisgICAgVFJVRSwgNjgsIDAsIDAsIDksIDMsCisgICAgMCwgRkFMU0UsIDAsIDEsIDEsIDEKKyAgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gdHRpbnRlcnAuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIFRUX0V4ZWNDb250ZXh0ICkKKyAgVFRfTmV3X0NvbnRleHQoIFRUX0RyaXZlciAgZHJpdmVyICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisKKyAgICBUVF9FeGVjQ29udGV4dCAgZXhlYyA9IE5VTEw7CisKKworICAgIGlmICggIWRyaXZlciApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBtZW1vcnkgPSBkcml2ZXItPnJvb3Qucm9vdC5tZW1vcnk7CisKKyAgICAvKiBhbGxvY2F0ZSBvYmplY3QgKi8KKyAgICBpZiAoIEZUX05FVyggZXhlYyApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIGluaXRpYWxpemUgaXQ7IGluIGNhc2Ugb2YgZXJyb3IgdGhpcyBkZWFsbG9jYXRlcyBgZXhlYycgdG9vICovCisgICAgZXJyb3IgPSBJbml0X0NvbnRleHQoIGV4ZWMsIG1lbW9yeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgcmV0dXJuIGV4ZWM7CisKKyAgRmFpbDoKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBCZWZvcmUgYW4gb3Bjb2RlIGlzIGV4ZWN1dGVkLCB0aGUgaW50ZXJwcmV0ZXIgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgKi8KKyAgLyogZW5vdWdoIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2ssIHdpdGggdGhlIGhlbHAgb2YgdGhlIGBQb3BfUHVzaF9Db3VudCcgICovCisgIC8qIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRm9yIGVhY2ggb3Bjb2RlLCB0aGUgZmlyc3QgY29sdW1uIGdpdmVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgICovCisgIC8qIGFyZSBwb3BwZWQgZnJvbSB0aGUgc3RhY2s7IHRoZSBzZWNvbmQgb25lIGdpdmVzIHRoZSBudW1iZXIgb2YgdGhvc2UgICAqLworICAvKiB0aGF0IGFyZSBwdXNoZWQgaW4gcmVzdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZXMgd2hpY2ggaGF2ZSBhIHZhcnlpbmcgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gdGhlIGRhdGEgc3RyZWFtICAqLworICAvKiAoTlBVU0hCLCBOUFVTSFcpIGFyZSBoYW5kbGVkIHNwZWNpYWxseTsgdGhleSBoYXZlIGEgbmVnYXRpdmUgdmFsdWUgaW4gKi8KKyAgLyogdGhlIGBvcGNvZGVfbGVuZ3RoJyB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBpbiBgUG9wX1B1c2hfQ291bnQnIGlzIHNldCAgICovCisgIC8qIHRvIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI3VuZGVmICBQQUNLCisjZGVmaW5lIFBBQ0soIHgsIHkgKSAgKCAoIHggPDwgNCApIHwgeSApCisKKworICBzdGF0aWMKKyAgY29uc3QgRlRfQnl0ZSAgUG9wX1B1c2hfQ291bnRbMjU2XSA9CisgIHsKKyAgICAvKiBvcGNvZGVzIGFyZSBnYXRoZXJlZCBpbiBncm91cHMgb2YgMTYgKi8KKyAgICAvKiBwbGVhc2Uga2VlcCB0aGUgc3BhY2VzIGFzIHRoZXkgYXJlICAgKi8KKworICAgIC8qICBTVlRDQSAgeSAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgU1ZUQ0EgIHggICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNQdlRDQSB5ICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTUHZUQ0EgeCAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgU0Z2VENBIHkgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNGdlRDQSB4ICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTUHZUTCAvLyAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgU1B2VEwgKyAgICovICBQQUNLKCAyLCAwICksCisgICAgLyogIFNGdlRMIC8vICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBTRnZUTCArICAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgU1B2RlMgICAgICovICBQQUNLKCAyLCAwICksCisgICAgLyogIFNGdkZTICAgICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBHUHYgICAgICAgKi8gIFBBQ0soIDAsIDIgKSwKKyAgICAvKiAgR0Z2ICAgICAgICovICBQQUNLKCAwLCAyICksCisgICAgLyogIFNGdlRQdiAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBJU0VDVCAgICAgKi8gIFBBQ0soIDUsIDAgKSwKKworICAgIC8qICBTUlAwICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgU1JQMSAgICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNSUDIgICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTWlAwICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgU1pQMSAgICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNaUDIgICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTWlBTICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgU0xPT1AgICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFJURyAgICAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBSVEhHICAgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgU01EICAgICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIEVMU0UgICAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBKTVBSICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgU0N2VENpICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNTd0NpICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTU1cgICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBEVVAgICAgICAgKi8gIFBBQ0soIDEsIDIgKSwKKyAgICAvKiAgUE9QICAgICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIENMRUFSICAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTV0FQICAgICAgKi8gIFBBQ0soIDIsIDIgKSwKKyAgICAvKiAgREVQVEggICAgICovICBQQUNLKCAwLCAxICksCisgICAgLyogIENJTkRFWCAgICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBNSU5ERVggICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgQWxpZ25QVFMgICovICBQQUNLKCAyLCAwICksCisgICAgLyogIElOU18kMjggICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBVVFAgICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTE9PUENBTEwgICovICBQQUNLKCAyLCAwICksCisgICAgLyogIENBTEwgICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBGREVGICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgRU5ERiAgICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIE1EQVBbMF0gICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNREFQWzFdICAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBJVVBbMF0gICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSVVQWzFdICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNIUFswXSAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTSFBbMV0gICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgU0hDWzBdICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNIQ1sxXSAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTSFpbMF0gICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgU0haWzFdICAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNIUElYICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBJUCAgICAgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgTVNJUlBbMF0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1TSVJQWzFdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBBbGlnblJQICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgUlRERyAgICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIE1JQVBbMF0gICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSUFQWzFdICAgKi8gIFBBQ0soIDIsIDAgKSwKKworICAgIC8qICBOUHVzaEIgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgTlB1c2hXICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFdTICAgICAgICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBSUyAgICAgICAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgV0N2dFAgICAgICovICBQQUNLKCAyLCAwICksCisgICAgLyogIFJDdnQgICAgICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBHQ1swXSAgICAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgR0NbMV0gICAgICovICBQQUNLKCAxLCAxICksCisgICAgLyogIFNDRlMgICAgICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNRFswXSAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgTURbMV0gICAgICovICBQQUNLKCAyLCAxICksCisgICAgLyogIE1QUEVNICAgICAqLyAgUEFDSyggMCwgMSApLAorICAgIC8qICBNUFMgICAgICAgKi8gIFBBQ0soIDAsIDEgKSwKKyAgICAvKiAgRmxpcE9OICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIEZsaXBPRkYgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBERUJVRyAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBMVCAgICAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgTFRFUSAgICAgICovICBQQUNLKCAyLCAxICksCisgICAgLyogIEdUICAgICAgICAqLyAgUEFDSyggMiwgMSApLAorICAgIC8qICBHVEVRICAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgRVEgICAgICAgICovICBQQUNLKCAyLCAxICksCisgICAgLyogIE5FUSAgICAgICAqLyAgUEFDSyggMiwgMSApLAorICAgIC8qICBPREQgICAgICAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgRVZFTiAgICAgICovICBQQUNLKCAxLCAxICksCisgICAgLyogIElGICAgICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBFSUYgICAgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgQU5EICAgICAgICovICBQQUNLKCAyLCAxICksCisgICAgLyogIE9SICAgICAgICAqLyAgUEFDSyggMiwgMSApLAorICAgIC8qICBOT1QgICAgICAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgRGVsdGFQMSAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIFNEQiAgICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTRFMgICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBBREQgICAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgU1VCICAgICAgICovICBQQUNLKCAyLCAxICksCisgICAgLyogIERJViAgICAgICAqLyAgUEFDSyggMiwgMSApLAorICAgIC8qICBNVUwgICAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgQUJTICAgICAgICovICBQQUNLKCAxLCAxICksCisgICAgLyogIE5FRyAgICAgICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBGTE9PUiAgICAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgQ0VJTElORyAgICovICBQQUNLKCAxLCAxICksCisgICAgLyogIFJPVU5EWzBdICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBST1VORFsxXSAgKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgUk9VTkRbMl0gICovICBQQUNLKCAxLCAxICksCisgICAgLyogIFJPVU5EWzNdICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBOUk9VTkRbMF0gKi8gIFBBQ0soIDEsIDEgKSwKKyAgICAvKiAgTlJPVU5EWzFdICovICBQQUNLKCAxLCAxICksCisgICAgLyogIE5ST1VORFsyXSAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBOUk9VTkRbM10gKi8gIFBBQ0soIDEsIDEgKSwKKworICAgIC8qICBXQ3Z0RiAgICAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgRGVsdGFQMiAgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIERlbHRhUDMgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBEZWx0YUNuWzBdICovIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgRGVsdGFDblsxXSAqLyBQQUNLKCAxLCAwICksCisgICAgLyogIERlbHRhQ25bMl0gKi8gUEFDSyggMSwgMCApLAorICAgIC8qICBTUk9VTkQgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgUzQ1Um91bmQgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIEpST1QgICAgICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBKUk9GICAgICAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgUk9GRiAgICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kN0IgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBSVVRHICAgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgUkRURyAgICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNBTkdXICAgICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBBQSAgICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBGbGlwUFQgICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgRmxpcFJnT04gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIEZsaXBSZ09GRiAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBJTlNfJDgzICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ4NCAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNjYW5DVFJMICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBTRFB2VExbMF0gKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgU0RQdlRMWzFdICovICBQQUNLKCAyLCAwICksCisgICAgLyogIEdldElORk8gICAqLyAgUEFDSyggMSwgMSApLAorICAgIC8qICBJREVGICAgICAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgUk9MTCAgICAgICovICBQQUNLKCAzLCAzICksCisgICAgLyogIE1BWCAgICAgICAqLyAgUEFDSyggMiwgMSApLAorICAgIC8qICBNSU4gICAgICAgKi8gIFBBQ0soIDIsIDEgKSwKKyAgICAvKiAgU2NhblRZUEUgICovICBQQUNLKCAxLCAwICksCisgICAgLyogIEluc3RDVFJMICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBJTlNfJDhGICAgKi8gIFBBQ0soIDAsIDAgKSwKKworICAgIC8qICBJTlNfJDkwICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ5MSAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kOTIgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJDkzICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ5NCAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kOTUgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJDk2ICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ5NyAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kOTggICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJDk5ICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ5QSAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kOUIgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJDlDICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyQ5RCAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kOUUgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJDlGICAqLyAgIFBBQ0soIDAsIDAgKSwKKworICAgIC8qICBJTlNfJEEwICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyRBMSAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kQTIgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJEEzICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyRBNCAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kQTUgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJEE2ICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyRBNyAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kQTggICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJEE5ICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyRBQSAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kQUIgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJEFDICAqLyAgIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgSU5TXyRBRCAgKi8gICBQQUNLKCAwLCAwICksCisgICAgLyogIElOU18kQUUgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBJTlNfJEFGICAqLyAgIFBBQ0soIDAsIDAgKSwKKworICAgIC8qICBQdXNoQlswXSAgKi8gIFBBQ0soIDAsIDEgKSwKKyAgICAvKiAgUHVzaEJbMV0gICovICBQQUNLKCAwLCAyICksCisgICAgLyogIFB1c2hCWzJdICAqLyAgUEFDSyggMCwgMyApLAorICAgIC8qICBQdXNoQlszXSAgKi8gIFBBQ0soIDAsIDQgKSwKKyAgICAvKiAgUHVzaEJbNF0gICovICBQQUNLKCAwLCA1ICksCisgICAgLyogIFB1c2hCWzVdICAqLyAgUEFDSyggMCwgNiApLAorICAgIC8qICBQdXNoQls2XSAgKi8gIFBBQ0soIDAsIDcgKSwKKyAgICAvKiAgUHVzaEJbN10gICovICBQQUNLKCAwLCA4ICksCisgICAgLyogIFB1c2hXWzBdICAqLyAgUEFDSyggMCwgMSApLAorICAgIC8qICBQdXNoV1sxXSAgKi8gIFBBQ0soIDAsIDIgKSwKKyAgICAvKiAgUHVzaFdbMl0gICovICBQQUNLKCAwLCAzICksCisgICAgLyogIFB1c2hXWzNdICAqLyAgUEFDSyggMCwgNCApLAorICAgIC8qICBQdXNoV1s0XSAgKi8gIFBBQ0soIDAsIDUgKSwKKyAgICAvKiAgUHVzaFdbNV0gICovICBQQUNLKCAwLCA2ICksCisgICAgLyogIFB1c2hXWzZdICAqLyAgUEFDSyggMCwgNyApLAorICAgIC8qICBQdXNoV1s3XSAgKi8gIFBBQ0soIDAsIDggKSwKKworICAgIC8qICBNRFJQWzAwXSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFswMV0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMDJdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzAzXSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFswNF0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMDVdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzA2XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFswN10gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMDhdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzA5XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsxMF0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMTFdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzEyXSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsxM10gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMTRdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzE1XSAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBNRFJQWzE2XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsxN10gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMThdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzE5XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsyMF0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMjFdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzIyXSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsyM10gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMjRdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzI1XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsyNl0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMjddICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzI4XSAgKi8gIFBBQ0soIDEsIDAgKSwKKyAgICAvKiAgTURSUFsyOV0gICovICBQQUNLKCAxLCAwICksCisgICAgLyogIE1EUlBbMzBdICAqLyAgUEFDSyggMSwgMCApLAorICAgIC8qICBNRFJQWzMxXSAgKi8gIFBBQ0soIDEsIDAgKSwKKworICAgIC8qICBNSVJQWzAwXSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFswMV0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMDJdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzAzXSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFswNF0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMDVdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzA2XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFswN10gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMDhdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzA5XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsxMF0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMTFdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzEyXSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsxM10gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMTRdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzE1XSAgKi8gIFBBQ0soIDIsIDAgKSwKKworICAgIC8qICBNSVJQWzE2XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsxN10gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMThdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzE5XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsyMF0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMjFdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzIyXSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsyM10gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMjRdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzI1XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsyNl0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMjddICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzI4XSAgKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgTUlSUFsyOV0gICovICBQQUNLKCAyLCAwICksCisgICAgLyogIE1JUlBbMzBdICAqLyAgUEFDSyggMiwgMCApLAorICAgIC8qICBNSVJQWzMxXSAgKi8gIFBBQ0soIDIsIDAgKQorICB9OworCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorCisgIC8qIHRoZSBmaXJzdCBoZXggZGlnaXQgZ2l2ZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3Bjb2RlIG5hbWU7IHRoZSBzcGFjZSAqLworICAvKiBhZnRlciB0aGUgZGlnaXQgaXMgaGVyZSBqdXN0IHRvIGluY3JlYXNlIHJlYWRhYmlsaXR5IG9mIHRoZSBzb3VyY2UgKi8KKyAgLyogY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgc3RhdGljCisgIGNvbnN0IGNoYXIqICBjb25zdCBvcGNvZGVfbmFtZVsyNTZdID0KKyAgeworICAgICI3IFNWVENBIHkiLAorICAgICI3IFNWVENBIHgiLAorICAgICI4IFNQdlRDQSB5IiwKKyAgICAiOCBTUHZUQ0EgeCIsCisgICAgIjggU0Z2VENBIHkiLAorICAgICI4IFNGdlRDQSB4IiwKKyAgICAiOCBTUHZUTCB8fCIsCisgICAgIjcgU1B2VEwgKyIsCisgICAgIjggU0Z2VEwgfHwiLAorICAgICI3IFNGdlRMICsiLAorICAgICI1IFNQdkZTIiwKKyAgICAiNSBTRnZGUyIsCisgICAgIjMgR1B2IiwKKyAgICAiMyBHRnYiLAorICAgICI2IFNGdlRQdiIsCisgICAgIjUgSVNFQ1QiLAorCisgICAgIjQgU1JQMCIsCisgICAgIjQgU1JQMSIsCisgICAgIjQgU1JQMiIsCisgICAgIjQgU1pQMCIsCisgICAgIjQgU1pQMSIsCisgICAgIjQgU1pQMiIsCisgICAgIjQgU1pQUyIsCisgICAgIjUgU0xPT1AiLAorICAgICIzIFJURyIsCisgICAgIjQgUlRIRyIsCisgICAgIjMgU01EIiwKKyAgICAiNCBFTFNFIiwKKyAgICAiNCBKTVBSIiwKKyAgICAiNiBTQ3ZUQ2kiLAorICAgICI1IFNTd0NpIiwKKyAgICAiMyBTU1ciLAorCisgICAgIjMgRFVQIiwKKyAgICAiMyBQT1AiLAorICAgICI1IENMRUFSIiwKKyAgICAiNCBTV0FQIiwKKyAgICAiNSBERVBUSCIsCisgICAgIjYgQ0lOREVYIiwKKyAgICAiNiBNSU5ERVgiLAorICAgICI4IEFsaWduUFRTIiwKKyAgICAiNyBJTlNfJDI4IiwKKyAgICAiMyBVVFAiLAorICAgICI4IExPT1BDQUxMIiwKKyAgICAiNCBDQUxMIiwKKyAgICAiNCBGREVGIiwKKyAgICAiNCBFTkRGIiwKKyAgICAiNyBNREFQWzBdIiwKKyAgICAiNyBNREFQWzFdIiwKKworICAgICI2IElVUFswXSIsCisgICAgIjYgSVVQWzFdIiwKKyAgICAiNiBTSFBbMF0iLAorICAgICI2IFNIUFsxXSIsCisgICAgIjYgU0hDWzBdIiwKKyAgICAiNiBTSENbMV0iLAorICAgICI2IFNIWlswXSIsCisgICAgIjYgU0haWzFdIiwKKyAgICAiNSBTSFBJWCIsCisgICAgIjIgSVAiLAorICAgICI4IE1TSVJQWzBdIiwKKyAgICAiOCBNU0lSUFsxXSIsCisgICAgIjcgQWxpZ25SUCIsCisgICAgIjQgUlRERyIsCisgICAgIjcgTUlBUFswXSIsCisgICAgIjcgTUlBUFsxXSIsCisKKyAgICAiNiBOUHVzaEIiLAorICAgICI2IE5QdXNoVyIsCisgICAgIjIgV1MiLAorICAgICIyIFJTIiwKKyAgICAiNSBXQ3Z0UCIsCisgICAgIjQgUkN2dCIsCisgICAgIjUgR0NbMF0iLAorICAgICI1IEdDWzFdIiwKKyAgICAiNCBTQ0ZTIiwKKyAgICAiNSBNRFswXSIsCisgICAgIjUgTURbMV0iLAorICAgICI1IE1QUEVNIiwKKyAgICAiMyBNUFMiLAorICAgICI2IEZsaXBPTiIsCisgICAgIjcgRmxpcE9GRiIsCisgICAgIjUgREVCVUciLAorCisgICAgIjIgTFQiLAorICAgICI0IExURVEiLAorICAgICIyIEdUIiwKKyAgICAiNCBHVEVRIiwKKyAgICAiMiBFUSIsCisgICAgIjMgTkVRIiwKKyAgICAiMyBPREQiLAorICAgICI0IEVWRU4iLAorICAgICIyIElGIiwKKyAgICAiMyBFSUYiLAorICAgICIzIEFORCIsCisgICAgIjIgT1IiLAorICAgICIzIE5PVCIsCisgICAgIjcgRGVsdGFQMSIsCisgICAgIjMgU0RCIiwKKyAgICAiMyBTRFMiLAorCisgICAgIjMgQUREIiwKKyAgICAiMyBTVUIiLAorICAgICIzIERJViIsCisgICAgIjMgTVVMIiwKKyAgICAiMyBBQlMiLAorICAgICIzIE5FRyIsCisgICAgIjUgRkxPT1IiLAorICAgICI3IENFSUxJTkciLAorICAgICI4IFJPVU5EWzBdIiwKKyAgICAiOCBST1VORFsxXSIsCisgICAgIjggUk9VTkRbMl0iLAorICAgICI4IFJPVU5EWzNdIiwKKyAgICAiOSBOUk9VTkRbMF0iLAorICAgICI5IE5ST1VORFsxXSIsCisgICAgIjkgTlJPVU5EWzJdIiwKKyAgICAiOSBOUk9VTkRbM10iLAorCisgICAgIjUgV0N2dEYiLAorICAgICI3IERlbHRhUDIiLAorICAgICI3IERlbHRhUDMiLAorICAgICJBIERlbHRhQ25bMF0iLAorICAgICJBIERlbHRhQ25bMV0iLAorICAgICJBIERlbHRhQ25bMl0iLAorICAgICI2IFNST1VORCIsCisgICAgIjggUzQ1Um91bmQiLAorICAgICI0IEpST1QiLAorICAgICI0IEpST0YiLAorICAgICI0IFJPRkYiLAorICAgICI3IElOU18kN0IiLAorICAgICI0IFJVVEciLAorICAgICI0IFJEVEciLAorICAgICI1IFNBTkdXIiwKKyAgICAiMiBBQSIsCisKKyAgICAiNiBGbGlwUFQiLAorICAgICI4IEZsaXBSZ09OIiwKKyAgICAiOSBGbGlwUmdPRkYiLAorICAgICI3IElOU18kODMiLAorICAgICI3IElOU18kODQiLAorICAgICI4IFNjYW5DVFJMIiwKKyAgICAiOSBTRFB2VExbMF0iLAorICAgICI5IFNEUHZUTFsxXSIsCisgICAgIjcgR2V0SU5GTyIsCisgICAgIjQgSURFRiIsCisgICAgIjQgUk9MTCIsCisgICAgIjMgTUFYIiwKKyAgICAiMyBNSU4iLAorICAgICI4IFNjYW5UWVBFIiwKKyAgICAiOCBJbnN0Q1RSTCIsCisgICAgIjcgSU5TXyQ4RiIsCisKKyAgICAiNyBJTlNfJDkwIiwKKyAgICAiNyBJTlNfJDkxIiwKKyAgICAiNyBJTlNfJDkyIiwKKyAgICAiNyBJTlNfJDkzIiwKKyAgICAiNyBJTlNfJDk0IiwKKyAgICAiNyBJTlNfJDk1IiwKKyAgICAiNyBJTlNfJDk2IiwKKyAgICAiNyBJTlNfJDk3IiwKKyAgICAiNyBJTlNfJDk4IiwKKyAgICAiNyBJTlNfJDk5IiwKKyAgICAiNyBJTlNfJDlBIiwKKyAgICAiNyBJTlNfJDlCIiwKKyAgICAiNyBJTlNfJDlDIiwKKyAgICAiNyBJTlNfJDlEIiwKKyAgICAiNyBJTlNfJDlFIiwKKyAgICAiNyBJTlNfJDlGIiwKKworICAgICI3IElOU18kQTAiLAorICAgICI3IElOU18kQTEiLAorICAgICI3IElOU18kQTIiLAorICAgICI3IElOU18kQTMiLAorICAgICI3IElOU18kQTQiLAorICAgICI3IElOU18kQTUiLAorICAgICI3IElOU18kQTYiLAorICAgICI3IElOU18kQTciLAorICAgICI3IElOU18kQTgiLAorICAgICI3IElOU18kQTkiLAorICAgICI3IElOU18kQUEiLAorICAgICI3IElOU18kQUIiLAorICAgICI3IElOU18kQUMiLAorICAgICI3IElOU18kQUQiLAorICAgICI3IElOU18kQUUiLAorICAgICI3IElOU18kQUYiLAorCisgICAgIjggUHVzaEJbMF0iLAorICAgICI4IFB1c2hCWzFdIiwKKyAgICAiOCBQdXNoQlsyXSIsCisgICAgIjggUHVzaEJbM10iLAorICAgICI4IFB1c2hCWzRdIiwKKyAgICAiOCBQdXNoQls1XSIsCisgICAgIjggUHVzaEJbNl0iLAorICAgICI4IFB1c2hCWzddIiwKKyAgICAiOCBQdXNoV1swXSIsCisgICAgIjggUHVzaFdbMV0iLAorICAgICI4IFB1c2hXWzJdIiwKKyAgICAiOCBQdXNoV1szXSIsCisgICAgIjggUHVzaFdbNF0iLAorICAgICI4IFB1c2hXWzVdIiwKKyAgICAiOCBQdXNoV1s2XSIsCisgICAgIjggUHVzaFdbN10iLAorCisgICAgIjggTURSUFswMF0iLAorICAgICI4IE1EUlBbMDFdIiwKKyAgICAiOCBNRFJQWzAyXSIsCisgICAgIjggTURSUFswM10iLAorICAgICI4IE1EUlBbMDRdIiwKKyAgICAiOCBNRFJQWzA1XSIsCisgICAgIjggTURSUFswNl0iLAorICAgICI4IE1EUlBbMDddIiwKKyAgICAiOCBNRFJQWzA4XSIsCisgICAgIjggTURSUFswOV0iLAorICAgICI4IE1EUlBbMTBdIiwKKyAgICAiOCBNRFJQWzExXSIsCisgICAgIjggTURSUFsxMl0iLAorICAgICI4IE1EUlBbMTNdIiwKKyAgICAiOCBNRFJQWzE0XSIsCisgICAgIjggTURSUFsxNV0iLAorCisgICAgIjggTURSUFsxNl0iLAorICAgICI4IE1EUlBbMTddIiwKKyAgICAiOCBNRFJQWzE4XSIsCisgICAgIjggTURSUFsxOV0iLAorICAgICI4IE1EUlBbMjBdIiwKKyAgICAiOCBNRFJQWzIxXSIsCisgICAgIjggTURSUFsyMl0iLAorICAgICI4IE1EUlBbMjNdIiwKKyAgICAiOCBNRFJQWzI0XSIsCisgICAgIjggTURSUFsyNV0iLAorICAgICI4IE1EUlBbMjZdIiwKKyAgICAiOCBNRFJQWzI3XSIsCisgICAgIjggTURSUFsyOF0iLAorICAgICI4IE1EUlBbMjldIiwKKyAgICAiOCBNRFJQWzMwXSIsCisgICAgIjggTURSUFszMV0iLAorCisgICAgIjggTUlSUFswMF0iLAorICAgICI4IE1JUlBbMDFdIiwKKyAgICAiOCBNSVJQWzAyXSIsCisgICAgIjggTUlSUFswM10iLAorICAgICI4IE1JUlBbMDRdIiwKKyAgICAiOCBNSVJQWzA1XSIsCisgICAgIjggTUlSUFswNl0iLAorICAgICI4IE1JUlBbMDddIiwKKyAgICAiOCBNSVJQWzA4XSIsCisgICAgIjggTUlSUFswOV0iLAorICAgICI4IE1JUlBbMTBdIiwKKyAgICAiOCBNSVJQWzExXSIsCisgICAgIjggTUlSUFsxMl0iLAorICAgICI4IE1JUlBbMTNdIiwKKyAgICAiOCBNSVJQWzE0XSIsCisgICAgIjggTUlSUFsxNV0iLAorCisgICAgIjggTUlSUFsxNl0iLAorICAgICI4IE1JUlBbMTddIiwKKyAgICAiOCBNSVJQWzE4XSIsCisgICAgIjggTUlSUFsxOV0iLAorICAgICI4IE1JUlBbMjBdIiwKKyAgICAiOCBNSVJQWzIxXSIsCisgICAgIjggTUlSUFsyMl0iLAorICAgICI4IE1JUlBbMjNdIiwKKyAgICAiOCBNSVJQWzI0XSIsCisgICAgIjggTUlSUFsyNV0iLAorICAgICI4IE1JUlBbMjZdIiwKKyAgICAiOCBNSVJQWzI3XSIsCisgICAgIjggTUlSUFsyOF0iLAorICAgICI4IE1JUlBbMjldIiwKKyAgICAiOCBNSVJQWzMwXSIsCisgICAgIjggTUlSUFszMV0iCisgIH07CisKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX0NoYXIgIG9wY29kZV9sZW5ndGhbMjU2XSA9CisgIHsKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLAorCisgICAtMSwtMiwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwKKworICAgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLAorICAgIDIsIDMsIDQsIDUsICA2LCA3LCA4LCA5LCAgMywgNSwgNywgOSwgMTEsMTMsMTUsMTcsCisKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAgMSwgMSwgMSwgMSwgIDEsIDEsIDEsIDEsICAxLCAxLCAxLCAxCisgIH07CisKKyN1bmRlZiBQQUNLCisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUgorCisjaWYgZGVmaW5lZCggX19hcm1fXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAorICAgICggZGVmaW5lZCggX190aHVtYjJfXyApIHx8ICFkZWZpbmVkKCBfX3RodW1iX18gKSApCisKKyNkZWZpbmUgVFRfTXVsRml4MTQgIFRUX011bEZpeDE0X2FybQorCisgIHN0YXRpYyBGVF9JbnQzMgorICBUVF9NdWxGaXgxNF9hcm0oIEZUX0ludDMyICBhLAorICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICBiICkKKyAgeworICAgIEZUX0ludDMyICB0LCB0MjsKKworCisjaWYgZGVmaW5lZCggX19DQ19BUk0gKSB8fCBkZWZpbmVkKCBfX0FSTUNDX18gKQorCisgICAgX19hc20KKyAgICB7CisgICAgICBzbXVsbCB0MiwgdCwgIGIsICBhICAgICAgICAgICAvKiAobG89dDIsaGk9dCkgPSBhKmIgKi8KKyAgICAgIG1vdiAgIGEsICB0LCAgYXNyICMzMSAgICAgICAgIC8qIGEgICA9IChoaSA+PiAzMSkgKi8KKyAgICAgIGFkZCAgIGEsICBhLCAgIzB4MjAwMCAgICAgICAgIC8qIGEgICs9IDB4MjAwMCAqLworICAgICAgYWRkcyAgdDIsIHQyLCBhICAgICAgICAgICAgICAgLyogdDIgKz0gYSAqLworICAgICAgYWRjICAgdCwgIHQsICAjMCAgICAgICAgICAgICAgLyogdCAgKz0gY2FycnkgKi8KKyAgICAgIG1vdiAgIGEsICB0MiwgbHNyICMxNCAgICAgICAgIC8qIGEgICA9IHQyID4+IDE0ICovCisgICAgICBvcnIgICBhLCAgYSwgIHQsICBsc2wgIzE4ICAgICAvKiBhICB8PSB0IDw8IDE4ICovCisgICAgfQorCisjZWxpZiBkZWZpbmVkKCBfX0dOVUNfXyApCisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAic211bGwgICUxLCAlMiwgJTQsICUzXG5cdCIgICAgICAgLyogKGxvPSUxLGhpPSUyKSA9IGEqYiAqLworICAgICAgIm1vdiAgICAlMCwgJTIsIGFzciAjMzFcblx0IiAgICAgIC8qICUwICA9IChoaSA+PiAzMSkgKi8KKyNpZiBkZWZpbmVkKCBfX2NsYW5nX18gKSAmJiBkZWZpbmVkKCBfX3RodW1iMl9fICkKKyAgICAgICJhZGQudyAgJTAsICUwLCAjMHgyMDAwXG5cdCIgICAgICAvKiAlMCArPSAweDIwMDAgKi8KKyNlbHNlCisgICAgICAiYWRkICAgICUwLCAlMCwgIzB4MjAwMFxuXHQiICAgICAgLyogJTAgKz0gMHgyMDAwICovCisjZW5kaWYKKyAgICAgICJhZGRzICAgJTEsICUxLCAlMFxuXHQiICAgICAgICAgICAvKiAlMSArPSAlMCAqLworICAgICAgImFkYyAgICAlMiwgJTIsICMwXG5cdCIgICAgICAgICAgIC8qICUyICs9IGNhcnJ5ICovCisgICAgICAibW92ICAgICUwLCAlMSwgbHNyICMxNFxuXHQiICAgICAgLyogJTAgID0gJTEgPj4gMTYgKi8KKyAgICAgICJvcnIgICAgJTAsICUwLCAlMiwgbHNsICMxOFxuXHQiICAvKiAlMCB8PSAlMiA8PCAxNiAqLworICAgICAgOiAiPXIiKGEpLCAiPSZyIih0MiksICI9JnIiKHQpCisgICAgICA6ICJyIihhKSwgInIiKGIpCisgICAgICA6ICJjYyIgKTsKKworI2VuZGlmCisKKyAgICByZXR1cm4gYTsKKyAgfQorCisjZW5kaWYgLyogX19hcm1fXyAmJiAoIF9fdGh1bWIyX18gfHwgIV9fdGh1bWJfXyApICovCisKKyNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVIgKi8KKworCisjaWYgZGVmaW5lZCggX19HTlVDX18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFwKKyAgICAoIGRlZmluZWQoIF9faTM4Nl9fICkgfHwgZGVmaW5lZCggX194ODZfNjRfXyApICkKKworI2RlZmluZSBUVF9NdWxGaXgxNCAgVFRfTXVsRml4MTRfbG9uZ19sb25nCisKKyAgLyogVGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgd2FybmluZyB0aGF0IEM5MCBkb2Vzbid0IHN1cHBvcnQgYGxvbmcgbG9uZycuICovCisjaWYgKCBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fICkgPj0gNDA2CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNlbmRpZgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2xvbmctbG9uZyIKKworICAvKiBUaGlzIGlzIGRlY2xhcmVkIGBub2lubGluZScgYmVjYXVzZSBpbmxpbmluZyB0aGUgZnVuY3Rpb24gcmVzdWx0cyAqLworICAvKiBpbiBzbG93ZXIgY29kZS4gIFRoZSBgcHVyZScgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgICAqLworICAvKiBvbmx5IGRlcGVuZHMgb24gdGhlIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgX19hdHRyaWJ1dGVfXygoIG5vaW5saW5lICkpCisgICAgICAgICBfX2F0dHJpYnV0ZV9fKCggcHVyZSApKSBGVF9JbnQzMgorICBUVF9NdWxGaXgxNF9sb25nX2xvbmcoIEZUX0ludDMyICBhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICBiICkKKyAgeworCisgICAgbG9uZyBsb25nICByZXQgPSAobG9uZyBsb25nKWEgKiBiOworCisgICAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGFzc3VtZXMgdGhhdCByaWdodCBzaGlmdGluZyBvZiBzaWduZWQgdmFsdWVzICovCisgICAgLyogd2lsbCBhY3R1YWxseSBwcmVzZXJ2ZSB0aGUgc2lnbiBiaXQuICBUaGUgZXhhY3QgYmVoYXZpb3VyIGlzICAgICovCisgICAgLyogdW5kZWZpbmVkLCBidXQgdGhpcyBpcyB0cnVlIG9uIHg4NiBhbmQgeDg2XzY0LiAgICAgICAgICAgICAgICAgICovCisgICAgbG9uZyBsb25nICB0bXAgPSByZXQgPj4gNjM7CisKKworICAgIHJldCArPSAweDIwMDAgKyB0bXA7CisKKyAgICByZXR1cm4gKEZUX0ludDMyKSggcmV0ID4+IDE0ICk7CisgIH0KKworI2lmICggX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyApID49IDQwNgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyogX19HTlVDX18gJiYgKCBfX2kzODZfXyB8fCBfX3g4Nl82NF9fICkgKi8KKworCisjaWZuZGVmIFRUX011bEZpeDE0CisKKyAgLyogQ29tcHV0ZSAoYSpiKS8yXjE0IHdpdGggbWF4aW11bSBhY2N1cmFjeSBhbmQgcm91bmRpbmcuICAqLworICAvKiBUaGlzIGlzIG9wdGltaXplZCB0byBiZSBmYXN0ZXIgdGhhbiBjYWxsaW5nIEZUX011bEZpeCgpICovCisgIC8qIGZvciBwbGF0Zm9ybXMgd2hlcmUgc2l6ZW9mKGludCkgPT0gMi4gICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0ludDMyCisgIFRUX011bEZpeDE0KCBGVF9JbnQzMiAgYSwKKyAgICAgICAgICAgICAgIEZUX0ludCAgICBiICkKKyAgeworICAgIEZUX0ludDMyICAgc2lnbjsKKyAgICBGVF9VSW50MzIgIGFoLCBhbCwgbWlkLCBsbywgaGk7CisKKworICAgIHNpZ24gPSBhIF4gYjsKKworICAgIGlmICggYSA8IDAgKQorICAgICAgYSA9IC1hOworICAgIGlmICggYiA8IDAgKQorICAgICAgYiA9IC1iOworCisgICAgYWggPSAoRlRfVUludDMyKSggKCBhID4+IDE2ICkgJiAweEZGRkZVICk7CisgICAgYWwgPSAoRlRfVUludDMyKSggYSAmIDB4RkZGRlUgKTsKKworICAgIGxvICAgID0gYWwgKiBiOworICAgIG1pZCAgID0gYWggKiBiOworICAgIGhpICAgID0gbWlkID4+IDE2OworICAgIG1pZCAgID0gKCBtaWQgPDwgMTYgKSArICggMSA8PCAxMyApOyAvKiByb3VuZGluZyAqLworICAgIGxvICAgKz0gbWlkOworICAgIGlmICggbG8gPCBtaWQgKQorICAgICAgaGkgKz0gMTsKKworICAgIG1pZCA9ICggbG8gPj4gMTQgKSB8ICggaGkgPDwgMTggKTsKKworICAgIHJldHVybiBzaWduID49IDAgPyAoRlRfSW50MzIpbWlkIDogLShGVF9JbnQzMiltaWQ7CisgIH0KKworI2VuZGlmICAvKiAhVFRfTXVsRml4MTQgKi8KKworCisjaWYgZGVmaW5lZCggX19HTlVDX18gKSAgICAgICAgJiYgXAorICAgICggZGVmaW5lZCggX19pMzg2X18gKSAgIHx8ICAgIFwKKyAgICAgIGRlZmluZWQoIF9feDg2XzY0X18gKSB8fCAgICBcCisgICAgICBkZWZpbmVkKCBfX2FybV9fICkgICAgKQorCisjZGVmaW5lIFRUX0RvdEZpeDE0ICBUVF9Eb3RGaXgxNF9sb25nX2xvbmcKKworI2lmICggX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyApID49IDQwNgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjZW5kaWYKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdsb25nLWxvbmciCisKKyAgc3RhdGljIF9fYXR0cmlidXRlX18oKCBwdXJlICkpIEZUX0ludDMyCisgIFRUX0RvdEZpeDE0X2xvbmdfbG9uZyggRlRfSW50MzIgIGF4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICBheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgYngsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgIGJ5ICkKKyAgeworICAgIC8qIFRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHdhcm5pbmcgdGhhdCBDOTAgZG9lc24ndCBzdXBwb3J0ICovCisgICAgLyogYGxvbmcgbG9uZycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGxvbmcgbG9uZyAgdGVtcDEgPSAobG9uZyBsb25nKWF4ICogYng7CisgICAgbG9uZyBsb25nICB0ZW1wMiA9IChsb25nIGxvbmcpYXkgKiBieTsKKworCisgICAgdGVtcDEgKz0gdGVtcDI7CisgICAgdGVtcDIgID0gdGVtcDEgPj4gNjM7CisgICAgdGVtcDEgKz0gMHgyMDAwICsgdGVtcDI7CisKKyAgICByZXR1cm4gKEZUX0ludDMyKSggdGVtcDEgPj4gMTQgKTsKKworICB9CisKKyNpZiAoIF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18gKSA+PSA0MDYKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2VuZGlmIC8qIF9fR05VQ19fICYmIChfX2FybV9fIHx8IF9faTM4Nl9fIHx8IF9feDg2XzY0X18pICovCisKKworI2lmbmRlZiBUVF9Eb3RGaXgxNAorCisgIC8qIGNvbXB1dGUgKGF4KmJ4K2F5KmJ5KS8yXjE0IHdpdGggbWF4aW11bSBhY2N1cmFjeSBhbmQgcm91bmRpbmcgKi8KKyAgc3RhdGljIEZUX0ludDMyCisgIFRUX0RvdEZpeDE0KCBGVF9JbnQzMiAgYXgsCisgICAgICAgICAgICAgICBGVF9JbnQzMiAgYXksCisgICAgICAgICAgICAgICBGVF9JbnQgICAgYngsCisgICAgICAgICAgICAgICBGVF9JbnQgICAgYnkgKQorICB7CisgICAgRlRfSW50MzIgICBtLCBzLCBoaTEsIGhpMiwgaGk7CisgICAgRlRfVUludDMyICBsLCBsbzEsIGxvMiwgbG87CisKKworICAgIC8qIGNvbXB1dGUgYXgqYnggYXMgNjQtYml0IHZhbHVlICovCisgICAgbCA9IChGVF9VSW50MzIpKCAoIGF4ICYgMHhGRkZGVSApICogYnggKTsKKyAgICBtID0gKCBheCA+PiAxNiApICogYng7CisKKyAgICBsbzEgPSBsICsgKCAoRlRfVUludDMyKW0gPDwgMTYgKTsKKyAgICBoaTEgPSAoIG0gPj4gMTYgKSArICggKEZUX0ludDMyKWwgPj4gMzEgKSArICggbG8xIDwgbCApOworCisgICAgLyogY29tcHV0ZSBheSpieSBhcyA2NC1iaXQgdmFsdWUgKi8KKyAgICBsID0gKEZUX1VJbnQzMikoICggYXkgJiAweEZGRkZVICkgKiBieSApOworICAgIG0gPSAoIGF5ID4+IDE2ICkgKiBieTsKKworICAgIGxvMiA9IGwgKyAoIChGVF9VSW50MzIpbSA8PCAxNiApOworICAgIGhpMiA9ICggbSA+PiAxNiApICsgKCAoRlRfSW50MzIpbCA+PiAzMSApICsgKCBsbzIgPCBsICk7CisKKyAgICAvKiBhZGQgdGhlbSAqLworICAgIGxvID0gbG8xICsgbG8yOworICAgIGhpID0gaGkxICsgaGkyICsgKCBsbyA8IGxvMSApOworCisgICAgLyogZGl2aWRlIHRoZSByZXN1bHQgYnkgMl4xNCB3aXRoIHJvdW5kaW5nICovCisgICAgcyAgID0gaGkgPj4gMzE7CisgICAgbCAgID0gbG8gKyAoRlRfVUludDMyKXM7CisgICAgaGkgKz0gcyArICggbCA8IGxvICk7CisgICAgbG8gID0gbDsKKworICAgIGwgICA9IGxvICsgMHgyMDAwVTsKKyAgICBoaSArPSAoIGwgPCBsbyApOworCisgICAgcmV0dXJuIChGVF9JbnQzMikoICggKEZUX1VJbnQzMiloaSA8PCAxOCApIHwgKCBsID4+IDE0ICkgKTsKKyAgfQorCisjZW5kaWYgLyogVFRfRG90Rml4MTQgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEN1cnJlbnRfUmF0aW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYXNwZWN0IHJhdGlvIHNjYWxpbmcgZmFjdG9yIGRlcGVuZGluZyBvbiB0aGUgICAqLworICAvKiAgICBwcm9qZWN0aW9uIHZlY3RvcidzIHN0YXRlIGFuZCBkZXZpY2UgcmVzb2x1dGlvbnMuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgYXNwZWN0IHJhdGlvIGluIDE2LjE2IGZvcm1hdCwgYWx3YXlzIDw9IDEuMCAuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9Mb25nCisgIEN1cnJlbnRfUmF0aW8oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgaWYgKCAhZXhjLT50dF9tZXRyaWNzLnJhdGlvICkKKyAgICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQorICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IGV4Yy0+dHRfbWV0cmljcy54X3JhdGlvOworICAgICAgICBlbHNlCisgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnlfcmF0aW87CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueSA9PSAwICkKKyAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueF9yYXRpbzsKKworICAgICAgICBlbHNlIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnggPT0gMCApCisgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnlfcmF0aW87CisKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfRjI2RG90NiAgeCwgeTsKKworCisgICAgICAgICAgeCA9IFRUX011bEZpeDE0KCBleGMtPnR0X21ldHJpY3MueF9yYXRpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ICk7CisgICAgICAgICAgeSA9IFRUX011bEZpeDE0KCBleGMtPnR0X21ldHJpY3MueV9yYXRpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ICk7CisgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gRlRfSHlwb3QoIHgsIHkgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZXhjLT50dF9tZXRyaWNzLnJhdGlvOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0xvbmcgKQorICBDdXJyZW50X1BwZW0oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgcmV0dXJuIGV4Yy0+dHRfbWV0cmljcy5wcGVtOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0xvbmcgKQorICBDdXJyZW50X1BwZW1fU3RyZXRjaGVkKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIHJldHVybiBGVF9NdWxGaXgoIGV4Yy0+dHRfbWV0cmljcy5wcGVtLCBDdXJyZW50X1JhdGlvKCBleGMgKSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb250cm9sIHZhbHVlIHRhYmxlIChDVlQpLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0YyNkRvdDYgKQorICBSZWFkX0NWVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHggKQorICB7CisgICAgcmV0dXJuIGV4Yy0+Y3Z0W2lkeF07CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRjI2RG90NiApCisgIFJlYWRfQ1ZUX1N0cmV0Y2hlZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4ICkKKyAgeworICAgIHJldHVybiBGVF9NdWxGaXgoIGV4Yy0+Y3Z0W2lkeF0sIEN1cnJlbnRfUmF0aW8oIGV4YyApICk7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIFdyaXRlX0NWVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4LAorICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICB2YWx1ZSApCisgIHsKKyAgICBleGMtPmN2dFtpZHhdID0gdmFsdWU7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIFdyaXRlX0NWVF9TdHJldGNoZWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICB2YWx1ZSApCisgIHsKKyAgICBleGMtPmN2dFtpZHhdID0gRlRfRGl2Rml4KCB2YWx1ZSwgQ3VycmVudF9SYXRpbyggZXhjICkgKTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKKyAgTW92ZV9DVlQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4LAorICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIHZhbHVlICkKKyAgeworICAgIGV4Yy0+Y3Z0W2lkeF0gKz0gdmFsdWU7CisgIH0KKworCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCisgIE1vdmVfQ1ZUX1N0cmV0Y2hlZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICB2YWx1ZSApCisgIHsKKyAgICBleGMtPmN2dFtpZHhdICs9IEZUX0RpdkZpeCggdmFsdWUsIEN1cnJlbnRfUmF0aW8oIGV4YyApICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdldFNob3J0SW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybnMgYSBzaG9ydCBpbnRlZ2VyIHRha2VuIGZyb20gdGhlIGluc3RydWN0aW9uIHN0cmVhbSBhdCAgICAgICAqLworICAvKiAgICBhZGRyZXNzIElQLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTaG9ydCByZWFkIGF0IGNvZGVbSVBdLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIG9uZSBjb3VsZCBiZWNvbWUgYSBtYWNyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9TaG9ydAorICBHZXRTaG9ydElucyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICAvKiBSZWFkaW5nIGEgYnl0ZSBzdHJlYW0gc28gdGhlcmUgaXMgbm8gZW5kaWFuZXNzIChEYXZlUCkgKi8KKyAgICBleGMtPklQICs9IDI7CisgICAgcmV0dXJuIChGVF9TaG9ydCkoICggZXhjLT5jb2RlW2V4Yy0+SVAgLSAyXSA8PCA4ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+Y29kZVtleGMtPklQIC0gMV0gICAgICApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbnNfR290b19Db2RlUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHb2VzIHRvIGEgY2VydGFpbiBjb2RlIHJhbmdlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhUmFuZ2UgOjogVGhlIGluZGV4IG9mIHRoZSBjb2RlIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFJUCAgICA6OiBUaGUgbmV3IElQIGFkZHJlc3MgaW4gdGhlIGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNVQ0NFU1Mgb3IgRkFJTFVSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Jvb2wKKyAgSW5zX0dvdG9fQ29kZVJhbmdlKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICBhUmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIGFJUCApCisgIHsKKyAgICBUVF9Db2RlUmFuZ2UqICByYW5nZTsKKworCisgICAgaWYgKCBhUmFuZ2UgPCAxIHx8IGFSYW5nZSA+IDMgKQorICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CisgICAgICByZXR1cm4gRkFJTFVSRTsKKyAgICB9CisKKyAgICByYW5nZSA9ICZleGMtPmNvZGVSYW5nZVRhYmxlW2FSYW5nZSAtIDFdOworCisgICAgaWYgKCByYW5nZS0+YmFzZSA9PSBOVUxMICkgICAgIC8qIGludmFsaWQgY29kZXJhbmdlICovCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0NvZGVSYW5nZSApOworICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgfQorCisgICAgLyogTk9URTogQmVjYXVzZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiBhIHByb2dyYW0gbWF5IGJlIGEgQ0FMTCAqLworICAgIC8qICAgICAgIHdoaWNoIHdpbGwgcmV0dXJuIHRvIHRoZSBmaXJzdCBieXRlICphZnRlciogdGhlIGNvZGUgICAgKi8KKyAgICAvKiAgICAgICByYW5nZSwgd2UgdGVzdCBmb3IgYUlQIDw9IFNpemUsIGluc3RlYWQgb2YgYUlQIDwgU2l6ZS4gICovCisKKyAgICBpZiAoIGFJUCA+IHJhbmdlLT5zaXplICkKKyAgICB7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybiBGQUlMVVJFOworICAgIH0KKworICAgIGV4Yy0+Y29kZSAgICAgPSByYW5nZS0+YmFzZTsKKyAgICBleGMtPmNvZGVTaXplID0gcmFuZ2UtPnNpemU7CisgICAgZXhjLT5JUCAgICAgICA9IGFJUDsKKyAgICBleGMtPmN1clJhbmdlID0gYVJhbmdlOworCisgICAgcmV0dXJuIFNVQ0NFU1M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERpcmVjdF9Nb3ZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE1vdmVzIGEgcG9pbnQgYnkgYSBnaXZlbiBkaXN0YW5jZSBhbG9uZyB0aGUgZnJlZWRvbSB2ZWN0b3IuICBUaGUgICAqLworICAvKiAgICBwb2ludCB3aWxsIGJlIGB0b3VjaGVkJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb2ludCAgICA6OiBUaGUgaW5kZXggb2YgdGhlIHBvaW50IHRvIG1vdmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRpc3RhbmNlIDo6IFRoZSBkaXN0YW5jZSB0byBhcHBseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHpvbmUgICAgIDo6IFRoZSBhZmZlY3RlZCBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgRGlyZWN0X01vdmUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2OworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORworICAgIEZUX0FTU0VSVCggIWV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7CisjZW5kaWYKKworICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKKworICAgIGlmICggdiAhPSAwICkKKyAgICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTExPV19YX0RNT1ZFICkgKSApCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisgICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKworICAgICAgem9uZS0+dGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CisgICAgfQorCisgICAgdiA9IGV4Yy0+R1MuZnJlZVZlY3Rvci55OworCisgICAgaWYgKCB2ICE9IDAgKQorICAgIHsKKyAgICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKworICAgICAgem9uZS0+dGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEaXJlY3RfTW92ZV9PcmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBNb3ZlcyB0aGUgKm9yaWdpbmFsKiBwb3NpdGlvbiBvZiBhIHBvaW50IGJ5IGEgZ2l2ZW4gZGlzdGFuY2UgYWxvbmcgKi8KKyAgLyogICAgdGhlIGZyZWVkb20gdmVjdG9yLiAgT2J2aW91c2x5LCB0aGUgcG9pbnQgd2lsbCBub3QgYmUgYHRvdWNoZWQnLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9pbnQgICAgOjogVGhlIGluZGV4IG9mIHRoZSBwb2ludCB0byBtb3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkaXN0YW5jZSA6OiBUaGUgZGlzdGFuY2UgdG8gYXBwbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB6b25lICAgICA6OiBUaGUgYWZmZWN0ZWQgZ2x5cGggem9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIERpcmVjdF9Nb3ZlX09yaWcoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLAorICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2OworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORworICAgIEZUX0FTU0VSVCggIWV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7CisjZW5kaWYKKworICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKKworICAgIGlmICggdiAhPSAwICkKKyAgICAgIHpvbmUtPm9yZ1twb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKworICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKKworICAgIGlmICggdiAhPSAwICkKKyAgICAgIHpvbmUtPm9yZ1twb2ludF0ueSArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTcGVjaWFsIHZlcnNpb25zIG9mIERpcmVjdF9Nb3ZlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBhcmUgdXNlZCB3aGVuZXZlciBib3RoIHZlY3RvcnMgYXJlIGJvdGggICAgICAqLworICAvKiAgIGFsb25nIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSB1bml0IHZlY3RvcnMsIGkuZS4gaW4gOTAlIG9mIHRoZSBjYXNlcy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgc3RhdGljIHZvaWQKKyAgRGlyZWN0X01vdmVfWCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgVFRfR2x5cGhab25lICAgIHpvbmUsCisgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZXhjICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgfHwKKyAgICAgICAgICFleGMtPmlnbm9yZV94X21vZGUgKQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IGRpc3RhbmNlOworCisgICAgem9uZS0+dGFnc1twb2ludF0gIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBEaXJlY3RfTW92ZV9ZKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIHBvaW50LAorICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKQorICB7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKKworICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBkaXN0YW5jZTsKKyAgICB6b25lLT50YWdzW3BvaW50XSAgfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3BlY2lhbCB2ZXJzaW9ucyBvZiBEaXJlY3RfTW92ZV9PcmlnKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgYXJlIHVzZWQgd2hlbmV2ZXIgYm90aCB2ZWN0b3JzIGFyZSBib3RoICAgICAgKi8KKyAgLyogICBhbG9uZyBvbmUgb2YgdGhlIGNvb3JkaW5hdGUgdW5pdCB2ZWN0b3JzLCBpLmUuIGluIDkwJSBvZiB0aGUgY2FzZXMuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHN0YXRpYyB2b2lkCisgIERpcmVjdF9Nb3ZlX09yaWdfWCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZXhjICk7CisKKyAgICB6b25lLT5vcmdbcG9pbnRdLnggKz0gZGlzdGFuY2U7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIERpcmVjdF9Nb3ZlX09yaWdfWSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZXhjICk7CisKKyAgICB6b25lLT5vcmdbcG9pbnRdLnkgKz0gZGlzdGFuY2U7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kX05vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIERvZXMgbm90IHJvdW5kLCBidXQgYWRkcyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRpc3RhbmNlICAgICA6OiBUaGUgZGlzdGFuY2UgKG5vdCkgdG8gcm91bmQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29tcGVuc2F0aW9uIDo6IFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGNvbXBlbnNhdGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gc2F5cyB2ZXJ5IGZldyBhYm91dCB0aGUgcmVsYXRpb25zaGlwICAgICovCisgIC8qICAgIGJldHdlZW4gcm91bmRpbmcgYW5kIGVuZ2luZSBjb21wZW5zYXRpb24uICBIb3dldmVyLCBpdCBzZWVtcyBmcm9tICAqLworICAvKiAgICB0aGUgZGVzY3JpcHRpb24gb2Ygc3VwZXIgcm91bmQgdGhhdCB3ZSBzaG91bGQgYWRkIHRoZSBjb21wZW5zYXRpb24gKi8KKyAgLyogICAgYmVmb3JlIHJvdW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRjI2RG90NgorICBSb3VuZF9Ob25lKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICB7CisgICAgRlRfRjI2RG90NiAgdmFsOworCisgICAgRlRfVU5VU0VEKCBleGMgKTsKKworCisgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKKyAgICB7CisgICAgICB2YWwgPSBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbjsKKyAgICAgIGlmICggdmFsIDwgMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2YWwgPSBkaXN0YW5jZSAtIGNvbXBlbnNhdGlvbjsKKyAgICAgIGlmICggdmFsID4gMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorICAgIHJldHVybiB2YWw7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kX1RvX0dyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kcyB2YWx1ZSB0byBncmlkIGFmdGVyIGFkZGluZyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRpc3RhbmNlICAgICA6OiBUaGUgZGlzdGFuY2UgdG8gcm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29tcGVuc2F0aW9uIDo6IFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRjI2RG90NgorICBSb3VuZF9Ub19HcmlkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICB7CisgICAgRlRfRjI2RG90NiAgdmFsOworCisgICAgRlRfVU5VU0VEKCBleGMgKTsKKworCisgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKKyAgICB7CisgICAgICB2YWwgPSBGVF9QSVhfUk9VTkQoIGRpc3RhbmNlICsgY29tcGVuc2F0aW9uICk7CisgICAgICBpZiAoIHZhbCA8IDAgKQorICAgICAgICB2YWwgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFsID0gLUZUX1BJWF9ST1VORCggY29tcGVuc2F0aW9uIC0gZGlzdGFuY2UgKTsKKyAgICAgIGlmICggdmFsID4gMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRfVG9fSGFsZl9HcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRzIHZhbHVlIHRvIGhhbGYgZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFJvdW5kX1RvX0hhbGZfR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2YWw7CisKKyAgICBGVF9VTlVTRUQoIGV4YyApOworCisKKyAgICBpZiAoIGRpc3RhbmNlID49IDAgKQorICAgIHsKKyAgICAgIHZhbCA9IEZUX1BJWF9GTE9PUiggZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKSArIDMyOworICAgICAgaWYgKCB2YWwgPCAwICkKKyAgICAgICAgdmFsID0gMzI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2YWwgPSAtKCBGVF9QSVhfRkxPT1IoIGNvbXBlbnNhdGlvbiAtIGRpc3RhbmNlICkgKyAzMiApOworICAgICAgaWYgKCB2YWwgPiAwICkKKyAgICAgICAgdmFsID0gLTMyOworICAgIH0KKworICAgIHJldHVybiB2YWw7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kX0Rvd25fVG9fR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kcyB2YWx1ZSBkb3duIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRpc3RhbmNlICAgICA6OiBUaGUgZGlzdGFuY2UgdG8gcm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29tcGVuc2F0aW9uIDo6IFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRjI2RG90NgorICBSb3VuZF9Eb3duX1RvX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQorICB7CisgICAgRlRfRjI2RG90NiAgdmFsOworCisgICAgRlRfVU5VU0VEKCBleGMgKTsKKworCisgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKKyAgICB7CisgICAgICB2YWwgPSBGVF9QSVhfRkxPT1IoIGRpc3RhbmNlICsgY29tcGVuc2F0aW9uICk7CisgICAgICBpZiAoIHZhbCA8IDAgKQorICAgICAgICB2YWwgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFsID0gLUZUX1BJWF9GTE9PUiggY29tcGVuc2F0aW9uIC0gZGlzdGFuY2UgKTsKKyAgICAgIGlmICggdmFsID4gMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRfVXBfVG9fR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRzIHZhbHVlIHVwIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFJvdW5kX1VwX1RvX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2YWw7CisKKyAgICBGVF9VTlVTRUQoIGV4YyApOworCisKKyAgICBpZiAoIGRpc3RhbmNlID49IDAgKQorICAgIHsKKyAgICAgIHZhbCA9IEZUX1BJWF9DRUlMKCBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApOworICAgICAgaWYgKCB2YWwgPCAwICkKKyAgICAgICAgdmFsID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHZhbCA9IC1GVF9QSVhfQ0VJTCggY29tcGVuc2F0aW9uIC0gZGlzdGFuY2UgKTsKKyAgICAgIGlmICggdmFsID4gMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRfVG9fRG91YmxlX0dyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRzIHZhbHVlIHRvIGRvdWJsZSBncmlkIGFmdGVyIGFkZGluZyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFJvdW5kX1RvX0RvdWJsZV9HcmlkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgIHsKKyAgICBGVF9GMjZEb3Q2IHZhbDsKKworICAgIEZUX1VOVVNFRCggZXhjICk7CisKKworICAgIGlmICggZGlzdGFuY2UgPj0gMCApCisgICAgeworICAgICAgdmFsID0gRlRfUEFEX1JPVU5EKCBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiwgMzIgKTsKKyAgICAgIGlmICggdmFsIDwgMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2YWwgPSAtRlRfUEFEX1JPVU5EKCBjb21wZW5zYXRpb24gLSBkaXN0YW5jZSwgMzIgKTsKKyAgICAgIGlmICggdmFsID4gMCApCisgICAgICAgIHZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUm91bmRfU3VwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU3VwZXItcm91bmRzIHZhbHVlIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBzYXlzIHZlcnkgZmV3IGFib3V0IHRoZSByZWxhdGlvbnNoaXAgICAgKi8KKyAgLyogICAgYmV0d2VlbiByb3VuZGluZyBhbmQgZW5naW5lIGNvbXBlbnNhdGlvbi4gIEhvd2V2ZXIsIGl0IHNlZW1zIGZyb20gICovCisgIC8qICAgIHRoZSBkZXNjcmlwdGlvbiBvZiBzdXBlciByb3VuZCB0aGF0IHdlIHNob3VsZCBhZGQgdGhlIGNvbXBlbnNhdGlvbiAqLworICAvKiAgICBiZWZvcmUgcm91bmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFJvdW5kX1N1cGVyKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2YWw7CisKKworICAgIGlmICggZGlzdGFuY2UgPj0gMCApCisgICAgeworICAgICAgdmFsID0gKCBkaXN0YW5jZSAtIGV4Yy0+cGhhc2UgKyBleGMtPnRocmVzaG9sZCArIGNvbXBlbnNhdGlvbiApICYKKyAgICAgICAgICAgICAgLWV4Yy0+cGVyaW9kOworICAgICAgdmFsICs9IGV4Yy0+cGhhc2U7CisgICAgICBpZiAoIHZhbCA8IDAgKQorICAgICAgICB2YWwgPSBleGMtPnBoYXNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFsID0gLSggKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgLSBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApICYKKyAgICAgICAgICAgICAgIC1leGMtPnBlcmlvZCApOworICAgICAgdmFsIC09IGV4Yy0+cGhhc2U7CisgICAgICBpZiAoIHZhbCA+IDAgKQorICAgICAgICB2YWwgPSAtZXhjLT5waGFzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSb3VuZF9TdXBlcl80NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTdXBlci1yb3VuZHMgdmFsdWUgdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkaXN0YW5jZSAgICAgOjogVGhlIGRpc3RhbmNlIHRvIHJvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvbXBlbnNhdGlvbiA6OiBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJvdW5kZWQgZGlzdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXJlIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIFJvdW5kX1N1cGVyXzQ1KCkgYXMgd2UgbWF5IG5lZWQgICAqLworICAvKiAgICBncmVhdGVyIHByZWNpc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFJvdW5kX1N1cGVyXzQ1KCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICB2YWw7CisKKworICAgIGlmICggZGlzdGFuY2UgPj0gMCApCisgICAgeworICAgICAgdmFsID0gKCAoIGRpc3RhbmNlIC0gZXhjLT5waGFzZSArIGV4Yy0+dGhyZXNob2xkICsgY29tcGVuc2F0aW9uICkgLworICAgICAgICAgICAgICAgIGV4Yy0+cGVyaW9kICkgKiBleGMtPnBlcmlvZDsKKyAgICAgIHZhbCArPSBleGMtPnBoYXNlOworICAgICAgaWYgKCB2YWwgPCAwICkKKyAgICAgICAgdmFsID0gZXhjLT5waGFzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHZhbCA9IC0oICggKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgLSBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApIC8KKyAgICAgICAgICAgICAgICAgICBleGMtPnBlcmlvZCApICogZXhjLT5wZXJpb2QgKTsKKyAgICAgIHZhbCAtPSBleGMtPnBoYXNlOworICAgICAgaWYgKCB2YWwgPiAwICkKKyAgICAgICAgdmFsID0gLWV4Yy0+cGhhc2U7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZV9Sb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2V0cyB0aGUgcm91bmRpbmcgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcm91bmRfbW9kZSA6OiBUaGUgcm91bmRpbmcgbW9kZSB0byBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBDb21wdXRlX1JvdW5kKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgICAgcm91bmRfbW9kZSApCisgIHsKKyAgICBzd2l0Y2ggKCByb3VuZF9tb2RlICkKKyAgICB7CisgICAgY2FzZSBUVF9Sb3VuZF9PZmY6CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ob25lOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRUX1JvdW5kX1RvX0dyaWQ6CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19HcmlkOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRUX1JvdW5kX1VwX1RvX0dyaWQ6CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9VcF9Ub19HcmlkOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRUX1JvdW5kX0Rvd25fVG9fR3JpZDoKKyAgICAgIGV4Yy0+ZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX0Rvd25fVG9fR3JpZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUVF9Sb3VuZF9Ub19IYWxmX0dyaWQ6CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19IYWxmX0dyaWQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVFRfUm91bmRfVG9fRG91YmxlX0dyaWQ6CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19Eb3VibGVfR3JpZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUVF9Sb3VuZF9TdXBlcjoKKyAgICAgIGV4Yy0+ZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1N1cGVyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRUX1JvdW5kX1N1cGVyXzQ1OgorICAgICAgZXhjLT5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXJfNDU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNldFN1cGVyUm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNldHMgU3VwZXIgUm91bmQgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdyaWRQZXJpb2QgOjogVGhlIGdyaWQgcGVyaW9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2VsZWN0b3IgICA6OiBUaGUgU1JPVU5EIG9wY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBTZXRTdXBlclJvdW5kKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICBGVF9GMkRvdDE0ICAgICAgR3JpZFBlcmlvZCwKKyAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIHNlbGVjdG9yICkKKyAgeworICAgIHN3aXRjaCAoIChGVF9JbnQpKCBzZWxlY3RvciAmIDB4QzAgKSApCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgICBleGMtPnBlcmlvZCA9IEdyaWRQZXJpb2QgLyAyOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAweDQwOgorICAgICAgICBleGMtPnBlcmlvZCA9IEdyaWRQZXJpb2Q7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDB4ODA6CisgICAgICAgIGV4Yy0+cGVyaW9kID0gR3JpZFBlcmlvZCAqIDI7CisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBUaGlzIG9wY29kZSBpcyByZXNlcnZlZCwgYnV0Li4uICovCisgICAgICBjYXNlIDB4QzA6CisgICAgICAgIGV4Yy0+cGVyaW9kID0gR3JpZFBlcmlvZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoICggKEZUX0ludCkoIHNlbGVjdG9yICYgMHgzMCApICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgZXhjLT5waGFzZSA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMHgxMDoKKyAgICAgIGV4Yy0+cGhhc2UgPSBleGMtPnBlcmlvZCAvIDQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMHgyMDoKKyAgICAgIGV4Yy0+cGhhc2UgPSBleGMtPnBlcmlvZCAvIDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMHgzMDoKKyAgICAgIGV4Yy0+cGhhc2UgPSBleGMtPnBlcmlvZCAqIDMgLyA0OworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCAoIHNlbGVjdG9yICYgMHgwRiApID09IDAgKQorICAgICAgZXhjLT50aHJlc2hvbGQgPSBleGMtPnBlcmlvZCAtIDE7CisgICAgZWxzZQorICAgICAgZXhjLT50aHJlc2hvbGQgPSAoIChGVF9JbnQpKCBzZWxlY3RvciAmIDB4MEYgKSAtIDQgKSAqIGV4Yy0+cGVyaW9kIC8gODsKKworICAgIC8qIGNvbnZlcnQgdG8gRjI2RG90NiBmb3JtYXQgKi8KKyAgICBleGMtPnBlcmlvZCAgICA+Pj0gODsKKyAgICBleGMtPnBoYXNlICAgICA+Pj0gODsKKyAgICBleGMtPnRocmVzaG9sZCA+Pj0gODsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gb2YgdmVjdG9yIGdpdmVuIGJ5ICh2Mi12MSkgYWxvbmcgdGhlICAgICAgICovCisgIC8qICAgIGN1cnJlbnQgcHJvamVjdGlvbiB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHYxIDo6IEZpcnN0IGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2MiA6OiBTZWNvbmQgaW5wdXQgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFByb2plY3QoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKKyAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR5ICkKKyAgeworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgRlRfQVNTRVJUKCAhZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFRUX0RvdEZpeDE0KCBkeCwgZHksCisgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIER1YWxfUHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGVzIHRoZSBwcm9qZWN0aW9uIG9mIHRoZSB2ZWN0b3IgZ2l2ZW4gYnkgKHYyLXYxKSBhbG9uZyB0aGUgICAqLworICAvKiAgICBjdXJyZW50IGR1YWwgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2MSA6OiBGaXJzdCBpbnB1dCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdjIgOjogU2Vjb25kIGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRjI2RG90NgorICBEdWFsX1Byb2plY3QoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR4LAorICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeSApCisgIHsKKyAgICByZXR1cm4gVFRfRG90Rml4MTQoIGR4LCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZHVhbFZlY3Rvci54LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnkgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUHJvamVjdF94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gb2YgdGhlIHZlY3RvciBnaXZlbiBieSAodjItdjEpIGFsb25nIHRoZSAgICovCisgIC8qICAgIGhvcml6b250YWwgYXhpcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHYxIDo6IEZpcnN0IGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2MiA6OiBTZWNvbmQgaW5wdXQgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9GMjZEb3Q2CisgIFByb2plY3RfeCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCisgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR5ICkKKyAgeworICAgIEZUX1VOVVNFRCggZXhjICk7CisgICAgRlRfVU5VU0VEKCBkeSApOworCisgICAgcmV0dXJuIGR4OworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQcm9qZWN0X3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb21wdXRlcyB0aGUgcHJvamVjdGlvbiBvZiB0aGUgdmVjdG9yIGdpdmVuIGJ5ICh2Mi12MSkgYWxvbmcgdGhlICAgKi8KKyAgLyogICAgdmVydGljYWwgYXhpcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdjEgOjogRmlyc3QgaW5wdXQgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHYyIDo6IFNlY29uZCBpbnB1dCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBkaXN0YW5jZSBpbiBGMjZkb3Q2IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0YyNkRvdDYKKyAgUHJvamVjdF95KCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKKyAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHkgKQorICB7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKKyAgICBGVF9VTlVTRUQoIGR4ICk7CisKKyAgICByZXR1cm4gZHk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGVfRnVuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGVzIHRoZSBwcm9qZWN0aW9uIGFuZCBtb3ZlbWVudCBmdW5jdGlvbiBwb2ludGVycyBhY2NvcmRpbmcgICAqLworICAvKiAgICB0byB0aGUgY3VycmVudCBncmFwaGljcyBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIENvbXB1dGVfRnVuY3MoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKKyAgICB7CisgICAgICAvKiBJZiBib3RoIHZlY3RvcnMgcG9pbnQgcmlnaHR3YXJkcyBhbG9uZyB0aGUgeCBheGlzLCBzZXQgICAgICAgICAgKi8KKyAgICAgIC8qIGBib3RoLXgtYXhpcycgdHJ1ZSwgb3RoZXJ3aXNlIHNldCBpdCBmYWxzZS4gIFRoZSB4IHZhbHVlcyBvbmx5ICAqLworICAgICAgLyogbmVlZCBiZSB0ZXN0ZWQgYmVjYXVzZSB0aGUgdmVjdG9yIGhhcyBiZWVuIG5vcm1hbGlzZWQgdG8gYSB1bml0ICovCisgICAgICAvKiB2ZWN0b3Igb2YgbGVuZ3RoIDB4NDAwMCA9IHVuaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGV4Yy0+R1MuYm90aF94X2F4aXMgPSAoRlRfQm9vbCkoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDB4NDAwMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICk7CisKKyAgICAgIC8qIFRocm93IGF3YXkgcHJvamVjdGlvbiBhbmQgZnJlZWRvbSB2ZWN0b3IgaW5mb3JtYXRpb24gKi8KKyAgICAgIC8qIGJlY2F1c2UgdGhlIHBhdGVudHMgZG9uJ3QgYWxsb3cgdGhlbSB0byBiZSBzdG9yZWQuICAgKi8KKyAgICAgIC8qIFRoZSByZWxldmFudCBVUyBQYXRlbnRzIGFyZSA1MTU1ODA1IGFuZCA1MzI1NDc5LiAgICAgKi8KKyAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ID0gMDsKKyAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ID0gMDsKKyAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID0gMDsKKyAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ID0gMDsKKworICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKKyAgICAgIHsKKyAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QgICA9IFByb2plY3RfeDsKKyAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IERpcmVjdF9Nb3ZlX1g7CisgICAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcgPSBEaXJlY3RfTW92ZV9PcmlnX1g7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0ICAgPSBQcm9qZWN0X3k7CisgICAgICAgIGV4Yy0+ZnVuY19tb3ZlICAgICAgPSBEaXJlY3RfTW92ZV9ZOworICAgICAgICBleGMtPmZ1bmNfbW92ZV9vcmlnID0gRGlyZWN0X01vdmVfT3JpZ19ZOworICAgICAgfQorCisgICAgICBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IFByb2plY3RfeDsKKyAgICAgIGVsc2UgaWYgKCBleGMtPkdTLmR1YWxWZWN0b3IueSA9PSAweDQwMDAgKQorICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSBQcm9qZWN0X3k7CisgICAgICBlbHNlCisgICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IER1YWxfUHJvamVjdDsKKworICAgICAgLyogRm9yY2UgcmVjYWxjdWxhdGlvbiBvZiBjYWNoZWQgYXNwZWN0IHJhdGlvICovCisgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSAwOworCisgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICovCisKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICBleGMtPkZfZG90X1AgPSBleGMtPkdTLnByb2pWZWN0b3IueDsKKyAgICBlbHNlIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgPT0gMHg0MDAwICkKKyAgICAgIGV4Yy0+Rl9kb3RfUCA9IGV4Yy0+R1MucHJvalZlY3Rvci55OworICAgIGVsc2UKKyAgICAgIGV4Yy0+Rl9kb3RfUCA9CisgICAgICAgICggKEZUX0xvbmcpZXhjLT5HUy5wcm9qVmVjdG9yLnggKiBleGMtPkdTLmZyZWVWZWN0b3IueCArCisgICAgICAgICAgKEZUX0xvbmcpZXhjLT5HUy5wcm9qVmVjdG9yLnkgKiBleGMtPkdTLmZyZWVWZWN0b3IueSApID4+IDE0OworCisgICAgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueCA9PSAweDQwMDAgKQorICAgICAgZXhjLT5mdW5jX3Byb2plY3QgPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3RfeDsKKyAgICBlbHNlIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnkgPT0gMHg0MDAwICkKKyAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0ID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0X3k7CisgICAgZWxzZQorICAgICAgZXhjLT5mdW5jX3Byb2plY3QgPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3Q7CisKKyAgICBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3RfeDsKKyAgICBlbHNlIGlmICggZXhjLT5HUy5kdWFsVmVjdG9yLnkgPT0gMHg0MDAwICkKKyAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IChUVF9Qcm9qZWN0X0Z1bmMpUHJvamVjdF95OworICAgIGVsc2UKKyAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IChUVF9Qcm9qZWN0X0Z1bmMpRHVhbF9Qcm9qZWN0OworCisgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmU7CisgICAgZXhjLT5mdW5jX21vdmVfb3JpZyA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfT3JpZzsKKworICAgIGlmICggZXhjLT5GX2RvdF9QID09IDB4NDAwMEwgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICkKKyAgICAgIHsKKyAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfWDsKKyAgICAgICAgZXhjLT5mdW5jX21vdmVfb3JpZyA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfT3JpZ19YOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ID09IDB4NDAwMCApCisgICAgICB7CisgICAgICAgIGV4Yy0+ZnVuY19tb3ZlICAgICAgPSAoVFRfTW92ZV9GdW5jKURpcmVjdF9Nb3ZlX1k7CisgICAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcgPSAoVFRfTW92ZV9GdW5jKURpcmVjdF9Nb3ZlX09yaWdfWTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBhdCBzbWFsbCBzaXplcywgRl9kb3RfUCBjYW4gYmVjb21lIHRvbyBzbWFsbCwgcmVzdWx0aW5nICAgKi8KKyAgICAvKiBpbiBvdmVyZmxvd3MgYW5kIGBzcGlrZXMnIGluIGEgbnVtYmVyIG9mIGdseXBocyBsaWtlIGB3Jy4gKi8KKworICAgIGlmICggRlRfQUJTKCBleGMtPkZfZG90X1AgKSA8IDB4NDAwTCApCisgICAgICBleGMtPkZfZG90X1AgPSAweDQwMDBMOworCisgICAgLyogRGlzYWJsZSBjYWNoZWQgYXNwZWN0IHJhdGlvICovCisgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm9ybWFsaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm9ybXMgYSB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVnggOjogVGhlIGhvcml6b250YWwgaW5wdXQgdmVjdG9yIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFZ5IDo6IFRoZSB2ZXJ0aWNhbCBpbnB1dCB2ZWN0b3IgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFIgIDo6IFRoZSBub3JtZWQgdW5pdCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybnMgRkFJTFVSRSBpZiBhIHZlY3RvciBwYXJhbWV0ZXIgaXMgemVyby4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluIGNhc2UgVnggYW5kIFZ5IGFyZSBib3RoIHplcm8sIGBOb3JtYWxpemUnIHJldHVybnMgU1VDQ0VTUywgYW5kICAqLworICAvKiAgICBSIGlzIHVuZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyBGVF9Cb29sCisgIE5vcm1hbGl6ZSggRlRfRjI2RG90NiAgICAgIFZ4LAorICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBWeSwKKyAgICAgICAgICAgICBGVF9Vbml0VmVjdG9yKiAgUiApCisgIHsKKyAgICBGVF9GMjZEb3Q2ICBXOworCisKKyAgICBpZiAoIEZUX0FCUyggVnggKSA8IDB4NDAwMEwgJiYgRlRfQUJTKCBWeSApIDwgMHg0MDAwTCApCisgICAgeworICAgICAgaWYgKCBWeCA9PSAwICYmIFZ5ID09IDAgKQorICAgICAgeworICAgICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgSXQgc2VlbXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byB0cnkgICAqLworICAgICAgICAvKiAgICAgIHRvIG5vcm1hbGl6ZSB0aGUgdmVjdG9yICgwLDApLiAgUmV0dXJuIGltbWVkaWF0ZWx5LiAqLworICAgICAgICByZXR1cm4gU1VDQ0VTUzsKKyAgICAgIH0KKworICAgICAgVnggKj0gMHg0MDAwOworICAgICAgVnkgKj0gMHg0MDAwOworICAgIH0KKworICAgIFcgPSBGVF9IeXBvdCggVngsIFZ5ICk7CisKKyAgICBSLT54ID0gKEZUX0YyRG90MTQpVFRfRGl2Rml4MTQoIFZ4LCBXICk7CisgICAgUi0+eSA9IChGVF9GMkRvdDE0KVRUX0RpdkZpeDE0KCBWeSwgVyApOworCisgICAgcmV0dXJuIFNVQ0NFU1M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSGVyZSB3ZSBzdGFydCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmFyaW91cyBvcGNvZGVzLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEFSUkFZX0JPVU5EX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7IFwKKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1QUEVNW106ICAgICAgTWVhc3VyZSBQaXhlbCBQZXIgRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gRXVpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTVBQRU0oIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTVBTW106ICAgICAgICBNZWFzdXJlIFBvaW50IFNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg0QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiBFdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19NUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIC8qIE5vdGU6IFRoZSBwb2ludCBzaXplIHNob3VsZCBiZSBpcnJlbGV2YW50IGluIGEgZ2l2ZW4gZm9udCBwcm9ncmFtOyAqLworICAgIC8qICAgICAgIHdlIHRodXMgZGVjaWRlIHRvIHJldHVybiBvbmx5IHRoZSBQUEVNIHZhbHVlLiAgICAgICAgICAgICAgICAqLworI2lmIDAKKyAgICBhcmdzWzBdID0gZXhjLT5tZXRyaWNzLnBvaW50U2l6ZTsKKyNlbHNlCisgICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7CisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBEVVBbXTogICAgICAgIERVUGxpY2F0ZSB0aGUgc3RhY2sncyB0b3AgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiBTdGtFbHQgU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0RVUCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1sxXSA9IGFyZ3NbMF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUE9QW106ICAgICAgICBQT1AgdGhlIHN0YWNrJ3MgdG9wIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19QT1AoIHZvaWQgKQorICB7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENMRUFSW106ICAgICAgQ0xFQVIgdGhlIGVudGlyZSBzdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfQ0xFQVIoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5uZXdfdG9wID0gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTV0FQW106ICAgICAgIFNXQVAgdGhlIHN0YWNrJ3MgdG9wIHR3byBlbGVtZW50cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgMiAqIFN0a0VsdCAtLT4gMiAqIFN0a0VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NXQVAoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIEZUX0xvbmcgIEw7CisKKworICAgIEwgICAgICAgPSBhcmdzWzBdOworICAgIGFyZ3NbMF0gPSBhcmdzWzFdOworICAgIGFyZ3NbMV0gPSBMOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERFUFRIW106ICAgICAgcmV0dXJuIHRoZSBzdGFjayBERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfREVQVEgoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9IGV4Yy0+dG9wOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIExUW106ICAgICAgICAgTGVzcyBUaGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTFQoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gPCBhcmdzWzFdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTFRFUVtdOiAgICAgICBMZXNzIFRoYW4gb3IgRVF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19MVEVRKCBGVF9Mb25nKiAgYXJncyApCisgIHsKKyAgICBhcmdzWzBdID0gKCBhcmdzWzBdIDw9IGFyZ3NbMV0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHVFtdOiAgICAgICAgIEdyZWF0ZXIgVGhhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0dUKCBGVF9Mb25nKiAgYXJncyApCisgIHsKKyAgICBhcmdzWzBdID0gKCBhcmdzWzBdID4gYXJnc1sxXSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEdURVFbXTogICAgICAgR3JlYXRlciBUaGFuIG9yIEVRdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfR1RFUSggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9ICggYXJnc1swXSA+PSBhcmdzWzFdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRVFbXTogICAgICAgICBFUXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19FUSggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9ICggYXJnc1swXSA9PSBhcmdzWzFdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTkVRW106ICAgICAgICBOb3QgRVF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19ORVEoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gIT0gYXJnc1sxXSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9ERFtdOiAgICAgICAgSXMgT0REICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfT0REKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBhcmdzWzBdID0gKCAoIGV4Yy0+ZnVuY19yb3VuZCggZXhjLCBhcmdzWzBdLCAwICkgJiAxMjcgKSA9PSA2NCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVWRU5bXTogICAgICAgSXMgRVZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRVZFTiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSAoICggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGFyZ3NbMF0sIDAgKSAmIDEyNyApID09IDAgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBTkRbXTogICAgICAgIGxvZ2ljYWwgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0FORCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9ICggYXJnc1swXSAmJiBhcmdzWzFdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT1JbXTogICAgICAgICBsb2dpY2FsIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+IHVpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19PUiggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9ICggYXJnc1swXSB8fCBhcmdzWzFdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTk9UW106ICAgICAgICBsb2dpY2FsIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19OT1QoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSAhYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBRERbXTogICAgICAgIEFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0FERCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSArPSBhcmdzWzFdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNVQltdOiAgICAgICAgU1VCdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1VCKCBGVF9Mb25nKiAgYXJncyApCisgIHsKKyAgICBhcmdzWzBdIC09IGFyZ3NbMV07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRElWW106ICAgICAgICBESVZpZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg2MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGYyNi42IGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19ESVYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggYXJnc1sxXSA9PSAwICkKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggRGl2aWRlX0J5X1plcm8gKTsKKyAgICBlbHNlCisgICAgICBhcmdzWzBdID0gRlRfTXVsRGl2X05vX1JvdW5kKCBhcmdzWzBdLCA2NEwsIGFyZ3NbMV0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNVUxbXTogICAgICAgIE1VTHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01VTCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9IEZUX011bERpdiggYXJnc1swXSwgYXJnc1sxXSwgNjRMICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQUJTW106ICAgICAgICBBQlNvbHV0ZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19BQlMoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSBGVF9BQlMoIGFyZ3NbMF0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBORUdbXTogICAgICAgIE5FR2F0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX05FRyggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9IC1hcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZMT09SW106ICAgICAgRkxPT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRkxPT1IoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSBGVF9QSVhfRkxPT1IoIGFyZ3NbMF0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBDRUlMSU5HW106ICAgIENFSUxJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0NFSUxJTkcoIEZUX0xvbmcqICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSBGVF9QSVhfQ0VJTCggYXJnc1swXSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJTW106ICAgICAgICAgUmVhZCBTdG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+IHVpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUlMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOworCisKKyAgICBpZiAoIEJPVU5EU0woIEksIGV4Yy0+c3RvcmVTaXplICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7CisgICAgICBlbHNlCisgICAgICAgIGFyZ3NbMF0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogc3VicGl4ZWwgaGludGluZyAtIGF2b2lkIFR5cGVtYW4gRHN0cm9rZSBhbmQgKi8KKyAgICAgIC8qIElTdHJva2UgYW5kIFZhY3Vmb3JtIHJvdW5kcyAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoICggSSA9PSAyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmCisgICAgICAgICAgICAgICAgICggU1BIX0ZERUZfU1BBQ0lOR18xIHwKKyAgICAgICAgICAgICAgICAgICBTUEhfRkRFRl9TUEFDSU5HXzIgKSAgICAgICAgICApICkgfHwKKyAgICAgICAgICAgICAoIEkgPT0gMjIgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAgICYKKyAgICAgICAgICAgICAgICAgU1BIX0ZERUZfVFlQRU1BTl9TVFJPS0VTICkgKSAgICAgICAgfHwKKyAgICAgICAgICAgICAoIEkgPT0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAoIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJgorICAgICAgICAgICAgICAgICBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICAgICAgICkgJiYKKyAgICAgICAgICAgICAgIGV4Yy0+aXVwX2NhbGxlZCAgICAgICAgICAgICAgICAgICAgICkgKSApCisgICAgICAgIGFyZ3NbMF0gPSAwOworICAgICAgZWxzZQorICAgICAgICBhcmdzWzBdID0gZXhjLT5zdG9yYWdlW0ldOworICAgIH0KKworI2Vsc2UgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsKKworCisgICAgaWYgKCBCT1VORFNMKCBJLCBleGMtPnN0b3JlU2l6ZSApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIEFSUkFZX0JPVU5EX0VSUk9SOworICAgICAgZWxzZQorICAgICAgICBhcmdzWzBdID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgYXJnc1swXSA9IGV4Yy0+c3RvcmFnZVtJXTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBXU1tdOiAgICAgICAgIFdyaXRlIFN0b3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1dTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKworICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5zdG9yZVNpemUgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXhjLT5zdG9yYWdlW0ldID0gYXJnc1sxXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBXQ1ZUUFtdOiAgICAgIFdyaXRlIENWVCBpbiBQaXhlbCB1bml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1dDVlRQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKworICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5jdnRTaXplICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGV4Yy0+ZnVuY193cml0ZV9jdnQoIGV4YywgSSwgYXJnc1sxXSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFdDVlRGW106ICAgICAgV3JpdGUgQ1ZUIGluIEZ1bml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfV0NWVEYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsKKworCisgICAgaWYgKCBCT1VORFNMKCBJLCBleGMtPmN2dFNpemUgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXhjLT5jdnRbSV0gPSBGVF9NdWxGaXgoIGFyZ3NbMV0sIGV4Yy0+dHRfbWV0cmljcy5zY2FsZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJDVlRbXTogICAgICAgUmVhZCBDVlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUkNWVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKworICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5jdnRTaXplICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7CisgICAgICBlbHNlCisgICAgICAgIGFyZ3NbMF0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICBhcmdzWzBdID0gZXhjLT5mdW5jX3JlYWRfY3Z0KCBleGMsIEkgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBQVtdOiAgICAgICAgIEFkanVzdCBBbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDdGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0FBKCB2b2lkICkKKyAgeworICAgIC8qIGludGVudGlvbmFsbHkgbm8gbG9uZ2VyIHN1cHBvcnRlZCAqLworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERFQlVHW106ICAgICAgREVCVUcuICBVbnN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOb3RlOiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcG9wcyBhIHZhbHVlIGZyb20gdGhlIHN0YWNrLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19ERUJVRyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPmVycm9yID0gRlRfVEhST1coIERlYnVnX09wQ29kZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJPVU5EW2FiXTogICAgUk9VTkQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjgtMHg2QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgYXJnc1swXSA9IGV4Yy0+ZnVuY19yb3VuZCgKKyAgICAgICAgICAgICAgICBleGMsCisgICAgICAgICAgICAgICAgYXJnc1swXSwKKyAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAtIDB4NjhdICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTlJPVU5EW2FiXTogICBObyBST1VORGluZyBvZiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg2Qy0weDZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19OUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGFyZ3NbMF0gPSBSb3VuZF9Ob25lKAorICAgICAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgICAgICBhcmdzWzBdLAorICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlIC0gMHg2Q10gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNQVhbXTogICAgICAgIE1BWGltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01BWCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgaWYgKCBhcmdzWzFdID4gYXJnc1swXSApCisgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNSU5bXTogICAgICAgIE1JTmltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDY5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01JTiggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgaWYgKCBhcmdzWzFdIDwgYXJnc1swXSApCisgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNSU5ERVhbXTogICAgIE1vdmUgSU5ERVhlZCBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IC0tPiBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01JTkRFWCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfTG9uZyAgTCwgSzsKKworCisgICAgTCA9IGFyZ3NbMF07CisKKyAgICBpZiAoIEwgPD0gMCB8fCBMID4gZXhjLT5hcmdzICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEsgPSBleGMtPnN0YWNrW2V4Yy0+YXJncyAtIExdOworCisgICAgICBGVF9BUlJBWV9NT1ZFKCAmZXhjLT5zdGFja1tleGMtPmFyZ3MgLSBMICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAmZXhjLT5zdGFja1tleGMtPmFyZ3MgLSBMICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAoIEwgLSAxICkgKTsKKworICAgICAgZXhjLT5zdGFja1tleGMtPmFyZ3MgLSAxXSA9IEs7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENJTkRFWFtdOiAgICAgQ29weSBJTkRFWGVkIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfQ0lOREVYKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9Mb25nICBMOworCisKKyAgICBMID0gYXJnc1swXTsKKworICAgIGlmICggTCA8PSAwIHx8IEwgPiBleGMtPmFyZ3MgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgYXJnc1swXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGFyZ3NbMF0gPSBleGMtPnN0YWNrW2V4Yy0+YXJncyAtIExdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJPTExbXTogICAgICAgUk9MTCB0b3AgdGhyZWUgZWxlbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4OEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAzICogU3RrRWx0IC0tPiAzICogU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUk9MTCggRlRfTG9uZyogIGFyZ3MgKQorICB7CisgICAgRlRfTG9uZyAgQSwgQiwgQzsKKworCisgICAgQSA9IGFyZ3NbMl07CisgICAgQiA9IGFyZ3NbMV07CisgICAgQyA9IGFyZ3NbMF07CisKKyAgICBhcmdzWzJdID0gQzsKKyAgICBhcmdzWzFdID0gQTsKKyAgICBhcmdzWzBdID0gQjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNQU5BR0lORyBUSEUgRkxPVyBPRiBDT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTTE9PUFtdOiAgICAgIFNldCBMT09QIHZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NMT09QKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggYXJnc1swXSA8IDAgKQorICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsKKyAgICBlbHNlCisgICAgICBleGMtPkdTLmxvb3AgPSBhcmdzWzBdOworICB9CisKKworICBzdGF0aWMgRlRfQm9vbAorICBTa2lwQ29kZSggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPklQICs9IGV4Yy0+bGVuZ3RoOworCisgICAgaWYgKCBleGMtPklQIDwgZXhjLT5jb2RlU2l6ZSApCisgICAgeworICAgICAgZXhjLT5vcGNvZGUgPSBleGMtPmNvZGVbZXhjLT5JUF07CisKKyAgICAgIGV4Yy0+bGVuZ3RoID0gb3Bjb2RlX2xlbmd0aFtleGMtPm9wY29kZV07CisgICAgICBpZiAoIGV4Yy0+bGVuZ3RoIDwgMCApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5JUCArIDEgPj0gZXhjLT5jb2RlU2l6ZSApCisgICAgICAgICAgZ290byBGYWlsX092ZXJmbG93OworICAgICAgICBleGMtPmxlbmd0aCA9IDIgLSBleGMtPmxlbmd0aCAqIGV4Yy0+Y29kZVtleGMtPklQICsgMV07CisgICAgICB9CisKKyAgICAgIGlmICggZXhjLT5JUCArIGV4Yy0+bGVuZ3RoIDw9IGV4Yy0+Y29kZVNpemUgKQorICAgICAgICByZXR1cm4gU1VDQ0VTUzsKKyAgICB9CisKKyAgRmFpbF9PdmVyZmxvdzoKKyAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKyAgICByZXR1cm4gRkFJTFVSRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJRltdOiAgICAgICAgIElGIHRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0lGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX0ludCAgIG5JZnM7CisgICAgRlRfQm9vbCAgT3V0OworCisKKyAgICBpZiAoIGFyZ3NbMF0gIT0gMCApCisgICAgICByZXR1cm47CisKKyAgICBuSWZzID0gMTsKKyAgICBPdXQgPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICBpZiAoIFNraXBDb2RlKCBleGMgKSA9PSBGQUlMVVJFICkKKyAgICAgICAgcmV0dXJuOworCisgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCisgICAgICB7CisgICAgICBjYXNlIDB4NTg6ICAgICAgLyogSUYgKi8KKyAgICAgICAgbklmcysrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAweDFCOiAgICAgIC8qIEVMU0UgKi8KKyAgICAgICAgT3V0ID0gRlRfQk9PTCggbklmcyA9PSAxICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDB4NTk6ICAgICAgLyogRUlGICovCisgICAgICAgIG5JZnMtLTsKKyAgICAgICAgT3V0ID0gRlRfQk9PTCggbklmcyA9PSAwICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gd2hpbGUgKCBPdXQgPT0gMCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVMU0VbXTogICAgICAgRUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRUxTRSggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBGVF9JbnQgIG5JZnM7CisKKworICAgIG5JZnMgPSAxOworCisgICAgZG8KKyAgICB7CisgICAgICBpZiAoIFNraXBDb2RlKCBleGMgKSA9PSBGQUlMVVJFICkKKyAgICAgICAgcmV0dXJuOworCisgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCisgICAgICB7CisgICAgICBjYXNlIDB4NTg6ICAgIC8qIElGICovCisgICAgICAgIG5JZnMrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMHg1OTogICAgLyogRUlGICovCisgICAgICAgIG5JZnMtLTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSB3aGlsZSAoIG5JZnMgIT0gMCApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVJRltdOiAgICAgICAgRW5kIElGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRUlGKCB2b2lkICkKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBKTVBSW106ICAgICAgIEp1TVAgUmVsYXRpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0pNUFIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBpZiAoIGFyZ3NbMF0gPT0gMCAmJiBleGMtPmFyZ3MgPT0gMCApCisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOworICAgIGV4Yy0+SVAgKz0gYXJnc1swXTsKKyAgICBpZiAoIGV4Yy0+SVAgPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICggZXhjLT5jYWxsVG9wID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+SVAgPiBleGMtPmNhbGxTdGFja1tleGMtPmNhbGxUb3AgLSAxXS5EZWYtPmVuZCApICkKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CisgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEpST1RbXTogICAgICAgSnVtcCBSZWxhdGl2ZSBPbiBUcnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQgaW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfSlJPVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggYXJnc1sxXSAhPSAwICkKKyAgICAgIEluc19KTVBSKCBleGMsIGFyZ3MgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBKUk9GW106ICAgICAgIEp1bXAgUmVsYXRpdmUgT24gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0pST0YoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBpZiAoIGFyZ3NbMV0gPT0gMCApCisgICAgICBJbnNfSk1QUiggZXhjLCBhcmdzICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogREVGSU5JTkcgQU5EIFVTSU5HIEZVTkNUSU9OUyBBTkQgSU5TVFJVQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRkRFRltdOiAgICAgICBGdW5jdGlvbiBERUZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgyQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19GREVGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVUxvbmcgICAgICAgbjsKKyAgICBUVF9EZWZSZWNvcmQqICByZWM7CisgICAgVFRfRGVmUmVjb3JkKiAgbGltaXQ7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICAvKiBhcmd1bWVudHMgdG8gb3Bjb2RlcyBhcmUgc2tpcHBlZCBieSBgU0tJUF9Db2RlJyAqLworICAgIEZUX0J5dGUgICAgb3Bjb2RlX3BhdHRlcm5bOV1bMTJdID0geworICAgICAgICAgICAgICAgICAvKiAjMCBpbmxpbmUgZGVsdGEgZnVuY3Rpb24gMSAqLworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgMHg0QiwgLyogUFBFTSAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NTMsIC8qIEdURVEgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDIzLCAvKiBTV0FQICAgICovCisgICAgICAgICAgICAgICAgICAgMHg0QiwgLyogUFBFTSAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NTEsIC8qIExURVEgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDVBLCAvKiBBTkQgICAgICovCisgICAgICAgICAgICAgICAgICAgMHg1OCwgLyogSUYgICAgICAqLworICAgICAgICAgICAgICAgICAgIDB4MzgsIC8qICAgU0hQSVggKi8KKyAgICAgICAgICAgICAgICAgICAweDFCLCAvKiBFTFNFICAgICovCisgICAgICAgICAgICAgICAgICAgMHgyMSwgLyogICBQT1AgICAqLworICAgICAgICAgICAgICAgICAgIDB4MjEsIC8qICAgUE9QICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDU5ICAvKiBFSUYgICAgICovCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIC8qICMxIGlubGluZSBkZWx0YSBmdW5jdGlvbiAyICovCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAweDRCLCAvKiBQUEVNICAgICovCisgICAgICAgICAgICAgICAgICAgMHg1NCwgLyogRVEgICAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NTgsIC8qIElGICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDM4LCAvKiAgIFNIUElYICovCisgICAgICAgICAgICAgICAgICAgMHgxQiwgLyogRUxTRSAgICAqLworICAgICAgICAgICAgICAgICAgIDB4MjEsIC8qICAgUE9QICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDIxLCAvKiAgIFBPUCAgICovCisgICAgICAgICAgICAgICAgICAgMHg1OSAgLyogRUlGICAgICAqLworICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAvKiAjMiBkaWFnb25hbCBzdHJva2UgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIDB4MjAsIC8qIERVUCAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDIwLCAvKiBEVVAgICAgICovCisgICAgICAgICAgICAgICAgICAgMHhCMCwgLyogUFVTSEJfMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDYwLCAvKiBBREQgICAgICovCisgICAgICAgICAgICAgICAgICAgMHg0NiwgLyogR0NfY3VyICAqLworICAgICAgICAgICAgICAgICAgIDB4QjAsIC8qIFBVU0hCXzEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDY0ICAgICovCisgICAgICAgICAgICAgICAgICAgMHgyMywgLyogU1dBUCAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NDIgIC8qIFdTICAgICAgKi8KKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgLyogIzMgVmFjdUZvcm1Sb3VuZCBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgMHg0NSwgLyogUkNWVCAgICAqLworICAgICAgICAgICAgICAgICAgIDB4MjMsIC8qIFNXQVAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDQ2LCAvKiBHQ19jdXIgICovCisgICAgICAgICAgICAgICAgICAgMHg2MCwgLyogQUREICAgICAqLworICAgICAgICAgICAgICAgICAgIDB4MjAsIC8qIERVUCAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweEIwICAvKiBQVVNIQl8xICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAzOCAgICAqLworICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAvKiAjNCBUVEZhdXRvaGludCBieXRlY29kZSAob2xkKSAqLworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgMHgyMCwgLyogRFVQICAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NjQsIC8qIEFCUyAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweEIwLCAvKiBQVVNIQl8xICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAzMiAgICAqLworICAgICAgICAgICAgICAgICAgIDB4NjAsIC8qIEFERCAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDY2LCAvKiBGTE9PUiAgICovCisgICAgICAgICAgICAgICAgICAgMHgyMywgLyogU1dBUCAgICAqLworICAgICAgICAgICAgICAgICAgIDB4QjAgIC8qIFBVU0hCXzEgKi8KKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgLyogIzUgc3BhY2luZyBmdW5jdGlvbiAxICovCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAweDAxLCAvKiBTVlRDQV94ICovCisgICAgICAgICAgICAgICAgICAgMHhCMCwgLyogUFVTSEJfMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMjQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDQzLCAvKiBSUyAgICAgICovCisgICAgICAgICAgICAgICAgICAgMHg1OCAgLyogSUYgICAgICAqLworICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAvKiAjNiBzcGFjaW5nIGZ1bmN0aW9uIDIgKi8KKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIDB4MDEsIC8qIFNWVENBX3ggKi8KKyAgICAgICAgICAgICAgICAgICAweDE4LCAvKiBSVEcgICAgICovCisgICAgICAgICAgICAgICAgICAgMHhCMCwgLyogUFVTSEJfMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMjQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDQzLCAvKiBSUyAgICAgICovCisgICAgICAgICAgICAgICAgICAgMHg1OCAgLyogSUYgICAgICAqLworICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAvKiAjNyBUeXBlTWFuIFRhbGsgRGlhZ0VuZEN0cmwgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIDB4MDEsIC8qIFNWVENBX3ggKi8KKyAgICAgICAgICAgICAgICAgICAweDIwLCAvKiBEVVAgICAgICovCisgICAgICAgICAgICAgICAgICAgMHhCMCwgLyogUFVTSEJfMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMyAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAweDI1LCAvKiBDSU5ERVggICovCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIC8qICM4IFR5cGVNYW4gVGFsayBBbGlnbiAqLworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgMHgwNiwgLyogU1BWVEwgICAqLworICAgICAgICAgICAgICAgICAgIDB4N0QsIC8qIFJEVEcgICAgKi8KKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgIH07CisgICAgRlRfVVNob3J0ICBvcGNvZGVfcGF0dGVybnMgICA9IDk7CisgICAgRlRfVVNob3J0ICBvcGNvZGVfcG9pbnRlcls5XSA9IHsgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgICBGVF9VU2hvcnQgIG9wY29kZV9zaXplWzldICAgID0geyAxMiwgOCwgOCwgNiwgNywgNCwgNSwgNCwgMiB9OworICAgIEZUX1VTaG9ydCAgaTsKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCisgICAgLyogc29tZSBmb250IHByb2dyYW1zIGFyZSBicm9rZW4gZW5vdWdoIHRvIHJlZGVmaW5lIGZ1bmN0aW9ucyEgKi8KKyAgICAvKiBXZSB3aWxsIHRoZW4gcGFyc2UgdGhlIGN1cnJlbnQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgcmVjICAgPSBleGMtPkZEZWZzOworICAgIGxpbWl0ID0gcmVjICsgZXhjLT5udW1GRGVmczsKKyAgICBuICAgICA9IChGVF9VTG9uZylhcmdzWzBdOworCisgICAgZm9yICggOyByZWMgPCBsaW1pdDsgcmVjKysgKQorICAgIHsKKyAgICAgIGlmICggcmVjLT5vcGMgPT0gbiApCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICggcmVjID09IGxpbWl0ICkKKyAgICB7CisgICAgICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBuZXcgZnVuY3Rpb25zICovCisgICAgICBpZiAoIGV4Yy0+bnVtRkRlZnMgPj0gZXhjLT5tYXhGRGVmcyApCisgICAgICB7CisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX01hbnlfRnVuY3Rpb25fRGVmcyApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBleGMtPm51bUZEZWZzKys7CisgICAgfQorCisgICAgLyogQWx0aG91Z2ggRkRFRiB0YWtlcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwgICovCisgICAgLyogZnVuYyAjIG11c3QgYmUgd2l0aGluIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyICovCisgICAgaWYgKCBuID4gMHhGRkZGVSApCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9GdW5jdGlvbl9EZWZzICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVjLT5yYW5nZSAgICAgICAgICA9IGV4Yy0+Y3VyUmFuZ2U7CisgICAgcmVjLT5vcGMgICAgICAgICAgICA9IChGVF9VSW50MTYpbjsKKyAgICByZWMtPnN0YXJ0ICAgICAgICAgID0gZXhjLT5JUCArIDE7CisgICAgcmVjLT5hY3RpdmUgICAgICAgICA9IFRSVUU7CisgICAgcmVjLT5pbmxpbmVfZGVsdGEgICA9IEZBTFNFOworICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgPSAweDAwMDA7CisKKyAgICBpZiAoIG4gPiBleGMtPm1heEZ1bmMgKQorICAgICAgZXhjLT5tYXhGdW5jID0gKEZUX1VJbnQxNiluOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgLyogV2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGVzZSBhcmUgdHlwZW1hbiBmdW5jdGlvbnMsICovCisgICAgLyogaG93ZXZlciB0aGV5IGFyZSBvbmx5IGFjdGl2ZSB3aGVuIFJTIDIyIGlzIGNhbGxlZCAgICovCisgICAgaWYgKCBuID49IDY0ICYmIG4gPD0gNjYgKQorICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyB8PSBTUEhfRkRFRl9UWVBFTUFOX1NUUk9LRVM7CisjZW5kaWYKKworICAgIC8qIE5vdyBza2lwIHRoZSB3aG9sZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAqLworICAgIC8qIFdlIGRvbid0IGFsbG93IG5lc3RlZCBJREVGUyAmIEZERUZzLiAgICAqLworCisgICAgd2hpbGUgKCBTa2lwQ29kZSggZXhjICkgPT0gU1VDQ0VTUyApCisgICAgeworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElORyApCisgICAgICB7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgb3Bjb2RlX3BhdHRlcm5zOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBvcGNvZGVfcG9pbnRlcltpXSA8IG9wY29kZV9zaXplW2ldICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGV4Yy0+b3Bjb2RlID09IG9wY29kZV9wYXR0ZXJuW2ldW29wY29kZV9wb2ludGVyW2ldXSApCisgICAgICAgICAgeworICAgICAgICAgICAgb3Bjb2RlX3BvaW50ZXJbaV0gKz0gMTsKKworICAgICAgICAgICAgaWYgKCBvcGNvZGVfcG9pbnRlcltpXSA9PSBvcGNvZGVfc2l6ZVtpXSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1RSQUNFNigoICJzcGg6IEZ1bmN0aW9uICVkLCBvcGNvZGUgcHRybjogJWQsICVzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnJvb3QuZmFtaWx5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+cm9vdC5zdHlsZV9uYW1lICkpOworCisgICAgICAgICAgICAgIHN3aXRjaCAoIGkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgIHw9IFNQSF9GREVGX0lOTElORV9ERUxUQV8xOworICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzI7CisgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dpdGNoICggbiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgc3RpbGwgKi8KKyAgICAgICAgICAgICAgICBjYXNlIDU4OgorICAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9ESUFHT05BTF9TVFJPS0U7CisgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX0RJQUdPTkFMX1NUUk9LRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoIG4gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgIHw9IFNQSF9GREVGX1ZBQ1VGT1JNX1JPVU5EXzE7CisgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1ZBQ1VGT1JNX1JPVU5EXzE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAvKiBwcm9iYWJseSBub3QgbmVjZXNzYXJ5IHRvIGRldGVjdCBhbnltb3JlICovCisgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9UVEZBVVRPSElOVF8xOworICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfVFRGQVVUT0hJTlRfMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgc3dpdGNoICggbiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9TUEFDSU5HXzE7CisgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1NQQUNJTkdfMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIHN3aXRjaCAoIG4gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfU1BBQ0lOR18yOworICAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9TUEFDSU5HXzI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfVFlQRU1BTl9ESUFHRU5EQ1RSTDsKKyAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMOworICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgY2FzZSA4OgorI2lmIDAKKyAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMOworICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgb3Bjb2RlX3BvaW50ZXJbaV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wY29kZV9wb2ludGVyW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIG9ubHkgd2hlbiBkZWx0YXMgYXJlIGRldGVjdGVkICovCisgICAgICAgIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSA9CisgICAgICAgICAgKCAoIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMSApIHwKKyAgICAgICAgICAgICggZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8yICkgKTsKKyAgICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCisgICAgICB7CisgICAgICBjYXNlIDB4ODk6ICAgIC8qIElERUYgKi8KKyAgICAgIGNhc2UgMHgyQzogICAgLyogRkRFRiAqLworICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIE5lc3RlZF9ERUZTICk7CisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSAweDJEOiAgIC8qIEVOREYgKi8KKyAgICAgICAgcmVjLT5lbmQgPSBleGMtPklQOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEVOREZbXTogICAgICAgRU5EIEZ1bmN0aW9uIGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRU5ERiggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBUVF9DYWxsUmVjKiAgcFJlYzsKKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgZXhjLT5zcGhfaW5fZnVuY19mbGFncyA9IDB4MDAwMDsKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIGlmICggZXhjLT5jYWxsVG9wIDw9IDAgKSAgICAgLyogV2UgZW5jb3VudGVyZWQgYW4gRU5ERiB3aXRob3V0IGEgY2FsbCAqLworICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggRU5ERl9Jbl9FeGVjX1N0cmVhbSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4Yy0+Y2FsbFRvcC0tOworCisgICAgcFJlYyA9ICZleGMtPmNhbGxTdGFja1tleGMtPmNhbGxUb3BdOworCisgICAgcFJlYy0+Q3VyX0NvdW50LS07CisKKyAgICBleGMtPnN0ZXBfaW5zID0gRkFMU0U7CisKKyAgICBpZiAoIHBSZWMtPkN1cl9Db3VudCA+IDAgKQorICAgIHsKKyAgICAgIGV4Yy0+Y2FsbFRvcCsrOworICAgICAgZXhjLT5JUCA9IHBSZWMtPkRlZi0+c3RhcnQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIExvb3AgdGhyb3VnaCB0aGUgY3VycmVudCBmdW5jdGlvbiAqLworICAgICAgSW5zX0dvdG9fQ29kZVJhbmdlKCBleGMsIHBSZWMtPkNhbGxlcl9SYW5nZSwgcFJlYy0+Q2FsbGVyX0lQICk7CisKKyAgICAvKiBFeGl0IHRoZSBjdXJyZW50IGNhbGwgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBOT1RFOiBJZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiBhIHByb2dyYW0gaXMgYSAgICovCisgICAgLyogICAgICAgQ0FMTCBvciBMT09QQ0FMTCwgdGhlIHJldHVybiBhZGRyZXNzIGlzICAgICAqLworICAgIC8qICAgICAgIGFsd2F5cyBvdXQgb2YgdGhlIGNvZGUgcmFuZ2UuICBUaGlzIGlzIGEgICAgKi8KKyAgICAvKiAgICAgICB2YWxpZCBhZGRyZXNzLCBhbmQgaXQgaXMgd2h5IHdlIGRvIG5vdCB0ZXN0ICovCisgICAgLyogICAgICAgdGhlIHJlc3VsdCBvZiBJbnNfR290b19Db2RlUmFuZ2UoKSBoZXJlISAgICAqLworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIENBTExbXTogICAgICAgQ0FMTCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfQ0FMTCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VMb25nICAgICAgIEY7CisgICAgVFRfQ2FsbFJlYyogICAgcENyZWM7CisgICAgVFRfRGVmUmVjb3JkKiAgZGVmOworCisKKyAgICAvKiBmaXJzdCBvZiBhbGwsIGNoZWNrIHRoZSBpbmRleCAqLworCisgICAgRiA9IChGVF9VTG9uZylhcmdzWzBdOworICAgIGlmICggQk9VTkRTTCggRiwgZXhjLT5tYXhGdW5jICsgMSApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIC8qIEV4Y2VwdCBmb3Igc29tZSBvbGQgQXBwbGUgZm9udHMsIGFsbCBmdW5jdGlvbnMgaW4gYSBUcnVlVHlwZSAqLworICAgIC8qIGZvbnQgYXJlIGRlZmluZWQgaW4gaW5jcmVhc2luZyBvcmRlciwgc3RhcnRpbmcgZnJvbSAwLiAgVGhpcyAqLworICAgIC8qIG1lYW5zIHRoYXQgd2Ugbm9ybWFsbHkgaGF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgIGV4Yy0+bWF4RnVuYysxID09IGV4Yy0+bnVtRkRlZnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgIGV4Yy0+RkRlZnNbbl0ub3BjID09IG4gZm9yIG4gaW4gMC4uZXhjLT5tYXhGdW5jICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIElmIHRoaXMgaXNuJ3QgdHJ1ZSwgd2UgbmVlZCB0byBsb29rIHVwIHRoZSBmdW5jdGlvbiB0YWJsZS4gICAqLworCisgICAgZGVmID0gZXhjLT5GRGVmcyArIEY7CisgICAgaWYgKCBleGMtPm1heEZ1bmMgKyAxICE9IGV4Yy0+bnVtRkRlZnMgfHwgZGVmLT5vcGMgIT0gRiApCisgICAgeworICAgICAgLyogbG9vayB1cCB0aGUgRkRlZnMgdGFibGUgKi8KKyAgICAgIFRUX0RlZlJlY29yZCogIGxpbWl0OworCisKKyAgICAgIGRlZiAgID0gZXhjLT5GRGVmczsKKyAgICAgIGxpbWl0ID0gZGVmICsgZXhjLT5udW1GRGVmczsKKworICAgICAgd2hpbGUgKCBkZWYgPCBsaW1pdCAmJiBkZWYtPm9wYyAhPSBGICkKKyAgICAgICAgZGVmKys7CisKKyAgICAgIGlmICggZGVmID09IGxpbWl0ICkKKyAgICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIC8qIGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdGl2ZSAqLworICAgIGlmICggIWRlZi0+YWN0aXZlICkKKyAgICAgIGdvdG8gRmFpbDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoICggZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT19DQUxMX0FGVEVSX0lVUCApICkgfHwKKyAgICAgICAgICAgKCBkZWYtPnNwaF9mZGVmX2ZsYWdzICYgU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMSApICAgICAgICApICkKKyAgICAgIGdvdG8gRmFpbDsKKyAgICBlbHNlCisgICAgICBleGMtPnNwaF9pbl9mdW5jX2ZsYWdzID0gZGVmLT5zcGhfZmRlZl9mbGFnczsKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIC8qIGNoZWNrIHRoZSBjYWxsIHN0YWNrICovCisgICAgaWYgKCBleGMtPmNhbGxUb3AgPj0gZXhjLT5jYWxsU2l6ZSApCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBDcmVjID0gZXhjLT5jYWxsU3RhY2sgKyBleGMtPmNhbGxUb3A7CisKKyAgICBwQ3JlYy0+Q2FsbGVyX1JhbmdlID0gZXhjLT5jdXJSYW5nZTsKKyAgICBwQ3JlYy0+Q2FsbGVyX0lQICAgID0gZXhjLT5JUCArIDE7CisgICAgcENyZWMtPkN1cl9Db3VudCAgICA9IDE7CisgICAgcENyZWMtPkRlZiAgICAgICAgICA9IGRlZjsKKworICAgIGV4Yy0+Y2FsbFRvcCsrOworCisgICAgSW5zX0dvdG9fQ29kZVJhbmdlKCBleGMsIGRlZi0+cmFuZ2UsIGRlZi0+c3RhcnQgKTsKKworICAgIGV4Yy0+c3RlcF9pbnMgPSBGQUxTRTsKKworICAgIHJldHVybjsKKworICBGYWlsOgorICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBMT09QQ0FMTFtdOiAgIExPT1AgYW5kIENBTEwgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyPyBFaW50MTY/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0xPT1BDQUxMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VMb25nICAgICAgIEY7CisgICAgVFRfQ2FsbFJlYyogICAgcENyZWM7CisgICAgVFRfRGVmUmVjb3JkKiAgZGVmOworCisKKyAgICAvKiBmaXJzdCBvZiBhbGwsIGNoZWNrIHRoZSBpbmRleCAqLworICAgIEYgPSAoRlRfVUxvbmcpYXJnc1sxXTsKKyAgICBpZiAoIEJPVU5EU0woIEYsIGV4Yy0+bWF4RnVuYyArIDEgKSApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICAvKiBFeGNlcHQgZm9yIHNvbWUgb2xkIEFwcGxlIGZvbnRzLCBhbGwgZnVuY3Rpb25zIGluIGEgVHJ1ZVR5cGUgKi8KKyAgICAvKiBmb250IGFyZSBkZWZpbmVkIGluIGluY3JlYXNpbmcgb3JkZXIsIHN0YXJ0aW5nIGZyb20gMC4gIFRoaXMgKi8KKyAgICAvKiBtZWFucyB0aGF0IHdlIG5vcm1hbGx5IGhhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICBleGMtPm1heEZ1bmMrMSA9PSBleGMtPm51bUZEZWZzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICBleGMtPkZEZWZzW25dLm9wYyA9PSBuIGZvciBuIGluIDAuLmV4Yy0+bWF4RnVuYyAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJZiB0aGlzIGlzbid0IHRydWUsIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgZnVuY3Rpb24gdGFibGUuICAgKi8KKworICAgIGRlZiA9IGV4Yy0+RkRlZnMgKyBGOworICAgIGlmICggZXhjLT5tYXhGdW5jICsgMSAhPSBleGMtPm51bUZEZWZzIHx8IGRlZi0+b3BjICE9IEYgKQorICAgIHsKKyAgICAgIC8qIGxvb2sgdXAgdGhlIEZEZWZzIHRhYmxlICovCisgICAgICBUVF9EZWZSZWNvcmQqICBsaW1pdDsKKworCisgICAgICBkZWYgICA9IGV4Yy0+RkRlZnM7CisgICAgICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtRkRlZnM7CisKKyAgICAgIHdoaWxlICggZGVmIDwgbGltaXQgJiYgZGVmLT5vcGMgIT0gRiApCisgICAgICAgIGRlZisrOworCisgICAgICBpZiAoIGRlZiA9PSBsaW1pdCApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKiBjaGVjayB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhY3RpdmUgKi8KKyAgICBpZiAoICFkZWYtPmFjdGl2ZSApCisgICAgICBnb3RvIEZhaWw7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIGRlZi0+c3BoX2ZkZWZfZmxhZ3MgJiBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICkgKQorICAgICAgZ290byBGYWlsOworICAgIGVsc2UKKyAgICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSBkZWYtPnNwaF9mZGVmX2ZsYWdzOworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgLyogY2hlY2sgc3RhY2sgKi8KKyAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKKyAgICB7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFN0YWNrX092ZXJmbG93ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBhcmdzWzBdID4gMCApCisgICAgeworICAgICAgcENyZWMgPSBleGMtPmNhbGxTdGFjayArIGV4Yy0+Y2FsbFRvcDsKKworICAgICAgcENyZWMtPkNhbGxlcl9SYW5nZSA9IGV4Yy0+Y3VyUmFuZ2U7CisgICAgICBwQ3JlYy0+Q2FsbGVyX0lQICAgID0gZXhjLT5JUCArIDE7CisgICAgICBwQ3JlYy0+Q3VyX0NvdW50ICAgID0gKEZUX0ludClhcmdzWzBdOworICAgICAgcENyZWMtPkRlZiAgICAgICAgICA9IGRlZjsKKworICAgICAgZXhjLT5jYWxsVG9wKys7CisKKyAgICAgIEluc19Hb3RvX0NvZGVSYW5nZSggZXhjLCBkZWYtPnJhbmdlLCBkZWYtPnN0YXJ0ICk7CisKKyAgICAgIGV4Yy0+c3RlcF9pbnMgPSBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm47CisKKyAgRmFpbDoKKyAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSURFRltdOiAgICAgICBJbnN0cnVjdGlvbiBERUZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIEVpbnQ4IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19JREVGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgVFRfRGVmUmVjb3JkKiAgZGVmOworICAgIFRUX0RlZlJlY29yZCogIGxpbWl0OworCisKKyAgICAvKiAgRmlyc3Qgb2YgYWxsLCBsb29rIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpbiBvdXIgdGFibGUgKi8KKworICAgIGRlZiAgID0gZXhjLT5JRGVmczsKKyAgICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtSURlZnM7CisKKyAgICBmb3IgKCA7IGRlZiA8IGxpbWl0OyBkZWYrKyApCisgICAgICBpZiAoIGRlZi0+b3BjID09IChGVF9VTG9uZylhcmdzWzBdICkKKyAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoIGRlZiA9PSBsaW1pdCApCisgICAgeworICAgICAgLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgYSBuZXcgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgIGlmICggZXhjLT5udW1JRGVmcyA+PSBleGMtPm1heElEZWZzICkKKyAgICAgIHsKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9JbnN0cnVjdGlvbl9EZWZzICk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGV4Yy0+bnVtSURlZnMrKzsKKyAgICB9CisKKyAgICAvKiBvcGNvZGUgbXVzdCBiZSB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyICovCisgICAgaWYgKCAwID4gYXJnc1swXSB8fCBhcmdzWzBdID4gMHgwMEZGICkKKyAgICB7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0luc3RydWN0aW9uX0RlZnMgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWYtPm9wYyAgICA9IChGVF9CeXRlKWFyZ3NbMF07CisgICAgZGVmLT5zdGFydCAgPSBleGMtPklQICsgMTsKKyAgICBkZWYtPnJhbmdlICA9IGV4Yy0+Y3VyUmFuZ2U7CisgICAgZGVmLT5hY3RpdmUgPSBUUlVFOworCisgICAgaWYgKCAoRlRfVUxvbmcpYXJnc1swXSA+IGV4Yy0+bWF4SW5zICkKKyAgICAgIGV4Yy0+bWF4SW5zID0gKEZUX0J5dGUpYXJnc1swXTsKKworICAgIC8qIE5vdyBza2lwIHRoZSB3aG9sZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAqLworICAgIC8qIFdlIGRvbid0IGFsbG93IG5lc3RlZCBJREVGcyAmIEZERUZzLiAgICAqLworCisgICAgd2hpbGUgKCBTa2lwQ29kZSggZXhjICkgPT0gU1VDQ0VTUyApCisgICAgeworICAgICAgc3dpdGNoICggZXhjLT5vcGNvZGUgKQorICAgICAgeworICAgICAgY2FzZSAweDg5OiAgIC8qIElERUYgKi8KKyAgICAgIGNhc2UgMHgyQzogICAvKiBGREVGICovCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggTmVzdGVkX0RFRlMgKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgY2FzZSAweDJEOiAgIC8qIEVOREYgKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQVVNISU5HIERBVEEgT05UTyBUSEUgSU5URVJQUkVURVIgU1RBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBOUFVTSEJbXTogICAgIFBVU0ggTiBCeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+IHVpbnQzMi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX05QVVNIQiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICBMLCBLOworCisKKyAgICBMID0gKEZUX1VTaG9ydClleGMtPmNvZGVbZXhjLT5JUCArIDFdOworCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+c3RhY2tTaXplICsgMSAtIGV4Yy0+dG9wICkgKQorICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCBLID0gMTsgSyA8PSBMOyBLKysgKQorICAgICAgYXJnc1tLIC0gMV0gPSBleGMtPmNvZGVbZXhjLT5JUCArIEsgKyAxXTsKKworICAgIGV4Yy0+bmV3X3RvcCArPSBMOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE5QVVNIV1tdOiAgICAgUFVTSCBOIFdvcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gaW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTlBVU0hXKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VU2hvcnQgIEwsIEs7CisKKworICAgIEwgPSAoRlRfVVNob3J0KWV4Yy0+Y29kZVtleGMtPklQICsgMV07CisKKyAgICBpZiAoIEJPVU5EUyggTCwgZXhjLT5zdGFja1NpemUgKyAxIC0gZXhjLT50b3AgKSApCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4Yy0+SVAgKz0gMjsKKworICAgIGZvciAoIEsgPSAwOyBLIDwgTDsgSysrICkKKyAgICAgIGFyZ3NbS10gPSBHZXRTaG9ydElucyggZXhjICk7CisKKyAgICBleGMtPnN0ZXBfaW5zID0gRkFMU0U7CisgICAgZXhjLT5uZXdfdG9wICs9IEw7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUFVTSEJbYWJjXTogICBQVVNIIEJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHhCMC0weEI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiB1aW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19QVVNIQiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VU2hvcnQgIEwsIEs7CisKKworICAgIEwgPSAoRlRfVVNob3J0KSggZXhjLT5vcGNvZGUgLSAweEIwICsgMSApOworCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+c3RhY2tTaXplICsgMSAtIGV4Yy0+dG9wICkgKQorICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCBLID0gMTsgSyA8PSBMOyBLKysgKQorICAgICAgYXJnc1tLIC0gMV0gPSBleGMtPmNvZGVbZXhjLT5JUCArIEtdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBVU0hXW2FiY106ICAgUFVTSCBXb3JkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4QjgtMHhCRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gaW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUFVTSFcoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICBMLCBLOworCisKKyAgICBMID0gKEZUX1VTaG9ydCkoIGV4Yy0+b3Bjb2RlIC0gMHhCOCArIDEgKTsKKworICAgIGlmICggQk9VTkRTKCBMLCBleGMtPnN0YWNrU2l6ZSArIDEgLSBleGMtPnRvcCApICkKKyAgICB7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFN0YWNrX092ZXJmbG93ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXhjLT5JUCsrOworCisgICAgZm9yICggSyA9IDA7IEsgPCBMOyBLKysgKQorICAgICAgYXJnc1tLXSA9IEdldFNob3J0SW5zKCBleGMgKTsKKworICAgIGV4Yy0+c3RlcF9pbnMgPSBGQUxTRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNQU5BR0lORyBUSEUgR1JBUEhJQ1MgU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgSW5zX1N4VlRMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBhSWR4MSwKKyAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgYUlkeDIsCisgICAgICAgICAgICAgRlRfVW5pdFZlY3RvciogIFZlYyApCisgIHsKKyAgICBGVF9Mb25nICAgICBBLCBCLCBDOworICAgIEZUX1ZlY3RvciogIHAxOworICAgIEZUX1ZlY3RvciogIHAyOworCisgICAgRlRfQnl0ZSAgb3Bjb2RlID0gZXhjLT5vcGNvZGU7CisKKworICAgIGlmICggQk9VTkRTKCBhSWR4MSwgZXhjLT56cDIubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBhSWR4MiwgZXhjLT56cDEubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm4gRkFJTFVSRTsKKyAgICB9CisKKyAgICBwMSA9IGV4Yy0+enAxLmN1ciArIGFJZHgyOworICAgIHAyID0gZXhjLT56cDIuY3VyICsgYUlkeDE7CisKKyAgICBBID0gcDEtPnggLSBwMi0+eDsKKyAgICBCID0gcDEtPnkgLSBwMi0+eTsKKworICAgIC8qIElmIHAxID09IHAyLCBTUHZUTCBhbmQgU0Z2VEwgYmVoYXZlIHRoZSBzYW1lIGFzICovCisgICAgLyogU1B2VENBW1hdIGFuZCBTRnZUQ0FbWF0sIHJlc3BlY3RpdmVseS4gICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIENvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jay4gICAgICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoIEEgPT0gMCAmJiBCID09IDAgKQorICAgIHsKKyAgICAgIEEgICAgICA9IDB4NDAwMDsKKyAgICAgIG9wY29kZSA9IDA7CisgICAgfQorCisgICAgaWYgKCAoIG9wY29kZSAmIDEgKSAhPSAwICkKKyAgICB7CisgICAgICBDID0gIEI7ICAgLyogY291bnRlciBjbG9ja3dpc2Ugcm90YXRpb24gKi8KKyAgICAgIEIgPSAgQTsKKyAgICAgIEEgPSAtQzsKKyAgICB9CisKKyAgICBOb3JtYWxpemUoIEEsIEIsIFZlYyApOworCisgICAgcmV0dXJuIFNVQ0NFU1M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU1ZUQ0FbYV06ICAgICBTZXQgKEYgYW5kIFApIFZlY3RvcnMgdG8gQ29vcmRpbmF0ZSBBeGlzICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwMC0weDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNQdlRDQVthXTogICAgU2V0IFBWZWN0b3IgdG8gQ29vcmRpbmF0ZSBBeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDItMHgwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTRnZUQ0FbYV06ICAgIFNldCBGVmVjdG9yIHRvIENvb3JkaW5hdGUgQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDA0LTB4MDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1N4eVRDQSggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBGVF9TaG9ydCAgQUEsIEJCOworCisgICAgRlRfQnl0ZSAgb3Bjb2RlID0gZXhjLT5vcGNvZGU7CisKKworICAgIEFBID0gKEZUX1Nob3J0KSggKCBvcGNvZGUgJiAxICkgPDwgMTQgKTsKKyAgICBCQiA9IChGVF9TaG9ydCkoIEFBIF4gMHg0MDAwICk7CisKKyAgICBpZiAoIG9wY29kZSA8IDQgKQorICAgIHsKKyAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ID0gQUE7CisgICAgICBleGMtPkdTLnByb2pWZWN0b3IueSA9IEJCOworCisgICAgICBleGMtPkdTLmR1YWxWZWN0b3IueCA9IEFBOworICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnkgPSBCQjsKKyAgICB9CisgICAgZWxzZQorICAgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CisKKyAgICBpZiAoICggb3Bjb2RlICYgMiApID09IDAgKQorICAgIHsKKyAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID0gQUE7CisgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSA9IEJCOworICAgIH0KKyAgICBlbHNlCisgICAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKKworICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNQdlRMW2FdOiAgICAgU2V0IFBWZWN0b3IgVG8gTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDYtMHgwNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1BWVEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgaWYgKCBJbnNfU3hWVEwoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClhcmdzWzFdLAorICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KWFyZ3NbMF0sCisgICAgICAgICAgICAgICAgICAgICZleGMtPkdTLnByb2pWZWN0b3IgKSA9PSBTVUNDRVNTICkKKyAgICB7CisgICAgICBleGMtPkdTLmR1YWxWZWN0b3IgPSBleGMtPkdTLnByb2pWZWN0b3I7CisgICAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKKyAgICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOworICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTRnZUTFthXTogICAgIFNldCBGVmVjdG9yIFRvIExpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDA4LTB4MDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NGVlRMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggSW5zX1N4VlRMKCBleGMsCisgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpYXJnc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClhcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAmZXhjLT5HUy5mcmVlVmVjdG9yICkgPT0gU1VDQ0VTUyApCisgICAgeworICAgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CisgICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0Z2VFB2W106ICAgICBTZXQgRlZlY3RvciBUbyBQVmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TRlZUUFYoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CisgICAgZXhjLT5HUy5mcmVlVmVjdG9yID0gZXhjLT5HUy5wcm9qVmVjdG9yOworICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNQdkZTW106ICAgICAgU2V0IFBWZWN0b3IgRnJvbSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMi4xNCBmMi4xNCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1BWRlMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfU2hvcnQgIFM7CisgICAgRlRfTG9uZyAgIFgsIFk7CisKKworICAgIC8qIE9ubHkgdXNlIGxvdyAxNmJpdHMsIHRoZW4gc2lnbiBleHRlbmQgKi8KKyAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMV07CisgICAgWSA9IChGVF9Mb25nKVM7CisgICAgUyA9IChGVF9TaG9ydClhcmdzWzBdOworICAgIFggPSAoRlRfTG9uZylTOworCisgICAgTm9ybWFsaXplKCBYLCBZLCAmZXhjLT5HUy5wcm9qVmVjdG9yICk7CisKKyAgICBleGMtPkdTLmR1YWxWZWN0b3IgPSBleGMtPkdTLnByb2pWZWN0b3I7CisgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CisgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0Z2RlNbXTogICAgICBTZXQgRlZlY3RvciBGcm9tIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGYyLjE0IGYyLjE0IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TRlZGUyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9TaG9ydCAgUzsKKyAgICBGVF9Mb25nICAgWCwgWTsKKworCisgICAgLyogT25seSB1c2UgbG93IDE2Yml0cywgdGhlbiBzaWduIGV4dGVuZCAqLworICAgIFMgPSAoRlRfU2hvcnQpYXJnc1sxXTsKKyAgICBZID0gKEZUX0xvbmcpUzsKKyAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMF07CisgICAgWCA9IFM7CisKKyAgICBOb3JtYWxpemUoIFgsIFksICZleGMtPkdTLmZyZWVWZWN0b3IgKTsKKyAgICBHVUVTU19WRUNUT1IoIHByb2pWZWN0b3IgKTsKKyAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHUHZbXTogICAgICAgIEdldCBQcm9qZWN0aW9uIFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZWYyLjE0IC0tPiBlZjIuMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0dQViggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKKyAgICB7CisgICAgICBhcmdzWzBdID0gZXhjLT5HUy5ib3RoX3hfYXhpcyA/IDB4NDAwMCA6IDA7CisgICAgICBhcmdzWzFdID0gZXhjLT5HUy5ib3RoX3hfYXhpcyA/IDAgOiAweDQwMDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBhcmdzWzBdID0gZXhjLT5HUy5wcm9qVmVjdG9yLng7CisgICAgICBhcmdzWzFdID0gZXhjLT5HUy5wcm9qVmVjdG9yLnk7CisgICAgfQorI2Vsc2UKKyAgICBhcmdzWzBdID0gZXhjLT5HUy5wcm9qVmVjdG9yLng7CisgICAgYXJnc1sxXSA9IGV4Yy0+R1MucHJvalZlY3Rvci55OworI2VuZGlmCisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR0Z2W106ICAgICAgICBHZXQgRnJlZWRvbSBWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGVmMi4xNCAtLT4gZWYyLjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19HRlYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgeworICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwOworICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OworICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci55OworICAgIH0KKyNlbHNlCisgICAgYXJnc1swXSA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OworICAgIGFyZ3NbMV0gPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKKyNlbmRpZgorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNSUDBbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1JQMCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGV4Yy0+R1MucnAwID0gKEZUX1VTaG9ydClhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNSUDFbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1JQMSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGV4Yy0+R1MucnAxID0gKEZUX1VTaG9ydClhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNSUDJbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1JQMiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGV4Yy0+R1MucnAyID0gKEZUX1VTaG9ydClhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNNRFtdOiAgICAgICAgU2V0IE1pbmltdW0gRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU01EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2UgPSBhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNDVlRDSVtdOiAgICAgU2V0IENvbnRyb2wgVmFsdWUgVGFibGUgQ3V0IEluICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0NWVENJKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLmNvbnRyb2xfdmFsdWVfY3V0aW4gPSAoRlRfRjI2RG90NilhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNTV0NJW106ICAgICAgU2V0IFNpbmdsZSBXaWR0aCBDdXQgSW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1NXQ0koIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgZXhjLT5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gPSAoRlRfRjI2RG90NilhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNTV1tdOiAgICAgICAgU2V0IFNpbmdsZSBXaWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1NXKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSA9IEZUX011bEZpeCggYXJnc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnNjYWxlICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRkxJUE9OW106ICAgICBTZXQgYXV0by1GTElQIHRvIE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg0RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19GTElQT04oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5HUy5hdXRvX2ZsaXAgPSBUUlVFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZMSVBPRkZbXTogICAgU2V0IGF1dG8tRkxJUCB0byBPRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRkxJUE9GRiggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLmF1dG9fZmxpcCA9IEZBTFNFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNBTkdXW106ICAgICAgU2V0IEFOR2xlIFdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0FOR1coIHZvaWQgKQorICB7CisgICAgLyogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBhbnltb3JlICovCisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0RCW106ICAgICAgICBTZXQgRGVsdGEgQmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TREIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGV4Yy0+R1MuZGVsdGFfYmFzZSA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTRFNbXTogICAgICAgIFNldCBEZWx0YSBTaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NEUyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgaWYgKCAoRlRfVUxvbmcpYXJnc1swXSA+IDZVTCApCisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOworICAgIGVsc2UKKyAgICAgIGV4Yy0+R1MuZGVsdGFfc2hpZnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUlRIR1tdOiAgICAgICBSb3VuZCBUbyBIYWxmIEdyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19SVEhHKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIGV4Yy0+R1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9Ub19IYWxmX0dyaWQ7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0hhbGZfR3JpZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSVEdbXTogICAgICAgIFJvdW5kIFRvIEdyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1JURyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fR3JpZDsKKyAgICBleGMtPmZ1bmNfcm91bmQgICAgID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVG9fR3JpZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qIFJUREdbXTogICAgICAgUm91bmQgVG8gRG91YmxlIEdyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4M0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUlRERyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fRG91YmxlX0dyaWQ7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0RvdWJsZV9HcmlkOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogUlVUR1tdOiAgICAgICBSb3VuZCBVcCBUbyBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg3QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19SVVRHKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIGV4Yy0+R1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9VcF9Ub19HcmlkOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9VcF9Ub19HcmlkOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJEVEdbXTogICAgICAgUm91bmQgRG93biBUbyBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUkRURyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfRG93bl9Ub19HcmlkOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Eb3duX1RvX0dyaWQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUk9GRltdOiAgICAgICBSb3VuZCBPRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg3QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19ST0ZGKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIGV4Yy0+R1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9PZmY7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX05vbmU7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU1JPVU5EW106ICAgICBTdXBlciBST1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIEVpbnQ4IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIFNldFN1cGVyUm91bmQoIGV4YywgMHg0MDAwLCBhcmdzWzBdICk7CisKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfU3VwZXI7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1N1cGVyOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFM0NVJPVU5EW106ICAgU3VwZXIgUk9VTkQgNDUgZGVncmVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUzQ1Uk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgU2V0U3VwZXJSb3VuZCggZXhjLCAweDJENDEsIGFyZ3NbMF0gKTsKKworICAgIGV4Yy0+R1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9TdXBlcl80NTsKKyAgICBleGMtPmZ1bmNfcm91bmQgICAgID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXJfNDU7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR0NbYV06ICAgICAgICBHZXQgQ29vcmRpbmF0ZSBwcm9qZWN0ZWQgb250byAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg0Ni0weDQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFhYWDogVU5ET0NVTUVOVEVEOiBNZWFzdXJlcyBmcm9tIHRoZSBvcmlnaW5hbCBnbHlwaCBtdXN0IGJlIHRha2VuICAgICAqLworICAvKiAgICAgIGFsb25nIHRoZSBkdWFsIHByb2plY3Rpb24gdmVjdG9yISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19HQyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VTG9uZyAgICBMOworICAgIEZUX0YyNkRvdDYgIFI7CisKKworICAgIEwgPSAoRlRfVUxvbmcpYXJnc1swXTsKKworICAgIGlmICggQk9VTkRTTCggTCwgZXhjLT56cDIubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBSID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggZXhjLT5vcGNvZGUgJiAxICkKKyAgICAgICAgUiA9IEZBU1RfRFVBTFBST0ooICZleGMtPnpwMi5vcmdbTF0gKTsKKyAgICAgIGVsc2UKKyAgICAgICAgUiA9IEZBU1RfUFJPSkVDVCggJmV4Yy0+enAyLmN1cltMXSApOworICAgIH0KKworICAgIGFyZ3NbMF0gPSBSOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNDRlNbXTogICAgICAgU2V0IENvb3JkaW5hdGUgRnJvbSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGb3JtdWxhOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgT0EgOj0gT0EgKyAoIHZhbHVlIC0gT0EucCApLyggZi5wICkgKiBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NDRlMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9Mb25nICAgIEs7CisgICAgRlRfVVNob3J0ICBMOworCisKKyAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOworCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEsgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMi5jdXJbTF0gKTsKKworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMiwgTCwgYXJnc1sxXSAtIEsgKTsKKworICAgIC8qIFVORE9DVU1FTlRFRCEgIFRoZSBNUyByYXN0ZXJpemVyIGRvZXMgdGhhdCB3aXRoICovCisgICAgLyogdHdpbGlnaHQgcG9pbnRzIChjb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2spICAgKi8KKyAgICBpZiAoIGV4Yy0+R1MuZ2VwMiA9PSAwICkKKyAgICAgIGV4Yy0+enAyLm9yZ1tMXSA9IGV4Yy0+enAyLmN1cltMXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNRFthXTogICAgICAgIE1lYXN1cmUgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDQ5LTB4NEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IE1lYXN1cmUgdGFrZW4gaW4gdGhlIG9yaWdpbmFsIGdseXBoIG11c3QgYmUgYWxvbmcgICovCisgIC8qICAgICAgICAgICAgICAgICAgICB0aGUgZHVhbCBwcm9qZWN0aW9uIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IEZsYWcgYXR0cmlidXRlcyBhcmUgaW52ZXJ0ZWQhICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIDAgPT4gbWVhc3VyZSBkaXN0YW5jZSBpbiBvcmlnaW5hbCBvdXRsaW5lICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAxID0+IG1lYXN1cmUgZGlzdGFuY2UgaW4gZ3JpZC1maXR0ZWQgb3V0bGluZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFhYWDogVU5ET0NVTUVOVEVEOiBgenAwIC0genAxJywgYW5kIG5vdCBgenAyIC0genAxISAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VTaG9ydCAgIEssIEw7CisgICAgRlRfRjI2RG90NiAgRDsKKworCisgICAgSyA9IChGVF9VU2hvcnQpYXJnc1sxXTsKKyAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOworCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+enAwLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggSywgZXhjLT56cDEubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBEID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggZXhjLT5vcGNvZGUgJiAxICkKKyAgICAgICAgRCA9IFBST0pFQ1QoIGV4Yy0+enAwLmN1ciArIEwsIGV4Yy0+enAxLmN1ciArIEsgKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IHR3aWxpZ2h0IHpvbmUgc3BlY2lhbCBjYXNlICovCisKKyAgICAgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gMCB8fCBleGMtPkdTLmdlcDEgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMxID0gZXhjLT56cDAub3JnICsgTDsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMyID0gZXhjLT56cDEub3JnICsgSzsKKworCisgICAgICAgICAgRCA9IERVQUxQUk9KKCB2ZWMxLCB2ZWMyICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9IGV4Yy0+enAwLm9ydXMgKyBMOworICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzIgPSBleGMtPnpwMS5vcnVzICsgSzsKKworCisgICAgICAgICAgaWYgKCBleGMtPm1ldHJpY3MueF9zY2FsZSA9PSBleGMtPm1ldHJpY3MueV9zY2FsZSApCisgICAgICAgICAgeworICAgICAgICAgICAgLyogdGhpcyBzaG91bGQgYmUgZmFzdGVyICovCisgICAgICAgICAgICBEID0gRFVBTFBST0ooIHZlYzEsIHZlYzIgKTsKKyAgICAgICAgICAgIEQgPSBGVF9NdWxGaXgoIEQsIGV4Yy0+bWV0cmljcy54X3NjYWxlICk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9WZWN0b3IgIHZlYzsKKworCisgICAgICAgICAgICB2ZWMueCA9IEZUX011bEZpeCggdmVjMS0+eCAtIHZlYzItPngsIGV4Yy0+bWV0cmljcy54X3NjYWxlICk7CisgICAgICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggdmVjMS0+eSAtIHZlYzItPnksIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CisKKyAgICAgICAgICAgIEQgPSBGQVNUX0RVQUxQUk9KKCAmdmVjICk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgLyogRGlzYWJsZSBUeXBlIDIgVmFjdWZvcm0gUm91bmRzIC0gZS5nLiBBcmlhbCBOYXJyb3cgKi8KKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICYmCisgICAgICAgICBGVF9BQlMoIEQgKSA9PSA2NCAgKQorICAgICAgRCArPSAxOworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgYXJnc1swXSA9IEQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0RQdlRMW2FdOiAgICBTZXQgRHVhbCBQVmVjdG9yIHRvIExpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4Ni0weDg3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TRFBWVEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX0xvbmcgICAgQSwgQiwgQzsKKyAgICBGVF9VU2hvcnQgIHAxLCBwMjsgICAgICAgICAgICAvKiB3YXMgRlRfSW50IGluIHBhcyB0eXBlIEVSUk9SICovCisKKyAgICBGVF9CeXRlICBvcGNvZGUgPSBleGMtPm9wY29kZTsKKworCisgICAgcDEgPSAoRlRfVVNob3J0KWFyZ3NbMV07CisgICAgcDIgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisKKyAgICBpZiAoIEJPVU5EUyggcDIsIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggcDEsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgIEZUX1ZlY3RvciogdjEgPSBleGMtPnpwMS5vcmcgKyBwMjsKKyAgICAgIEZUX1ZlY3RvciogdjIgPSBleGMtPnpwMi5vcmcgKyBwMTsKKworCisgICAgICBBID0gdjEtPnggLSB2Mi0+eDsKKyAgICAgIEIgPSB2MS0+eSAtIHYyLT55OworCisgICAgICAvKiBJZiB2MSA9PSB2MiwgU0RQdlRMIGJlaGF2ZXMgdGhlIHNhbWUgYXMgKi8KKyAgICAgIC8qIFNWVENBW1hdLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBDb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2suICAgICAgICAgICAgKi8KKworICAgICAgaWYgKCBBID09IDAgJiYgQiA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgQSAgICAgID0gMHg0MDAwOworICAgICAgICBvcGNvZGUgPSAwOworICAgICAgfQorICAgIH0KKworICAgIGlmICggKCBvcGNvZGUgJiAxICkgIT0gMCApCisgICAgeworICAgICAgQyA9ICBCOyAgIC8qIGNvdW50ZXIgY2xvY2t3aXNlIHJvdGF0aW9uICovCisgICAgICBCID0gIEE7CisgICAgICBBID0gLUM7CisgICAgfQorCisgICAgTm9ybWFsaXplKCBBLCBCLCAmZXhjLT5HUy5kdWFsVmVjdG9yICk7CisKKyAgICB7CisgICAgICBGVF9WZWN0b3IqICB2MSA9IGV4Yy0+enAxLmN1ciArIHAyOworICAgICAgRlRfVmVjdG9yKiAgdjIgPSBleGMtPnpwMi5jdXIgKyBwMTsKKworCisgICAgICBBID0gdjEtPnggLSB2Mi0+eDsKKyAgICAgIEIgPSB2MS0+eSAtIHYyLT55OworCisgICAgICBpZiAoIEEgPT0gMCAmJiBCID09IDAgKQorICAgICAgeworICAgICAgICBBICAgICAgPSAweDQwMDA7CisgICAgICAgIG9wY29kZSA9IDA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCAoIG9wY29kZSAmIDEgKSAhPSAwICkKKyAgICB7CisgICAgICBDID0gIEI7ICAgLyogY291bnRlciBjbG9ja3dpc2Ugcm90YXRpb24gKi8KKyAgICAgIEIgPSAgQTsKKyAgICAgIEEgPSAtQzsKKyAgICB9CisKKyAgICBOb3JtYWxpemUoIEEsIEIsICZleGMtPkdTLnByb2pWZWN0b3IgKTsKKyAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKKyAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTWlAwW106ICAgICAgIFNldCBab25lIFBvaW50ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NaUDAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBzd2l0Y2ggKCAoRlRfSW50KWFyZ3NbMF0gKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBleGMtPnpwMCA9IGV4Yy0+dHdpbGlnaHQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgIGV4Yy0+enAwID0gZXhjLT5wdHM7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBleGMtPkdTLmdlcDAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU1pQMVtdOiAgICAgICBTZXQgWm9uZSBQb2ludGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TWlAxKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgc3dpdGNoICggKEZUX0ludClhcmdzWzBdICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgZXhjLT56cDEgPSBleGMtPnR3aWxpZ2h0OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICBleGMtPnpwMSA9IGV4Yy0+cHRzOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXhjLT5HUy5nZXAxID0gKEZUX1VTaG9ydClhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNaUDJbXTogICAgICAgU2V0IFpvbmUgUG9pbnRlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1pQMiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIHN3aXRjaCAoIChGVF9JbnQpYXJnc1swXSApCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIGV4Yy0+enAyID0gZXhjLT50d2lsaWdodDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOgorICAgICAgZXhjLT56cDIgPSBleGMtPnB0czsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV4Yy0+R1MuZ2VwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTWlBTW106ICAgICAgIFNldCBab25lIFBvaW50ZXJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NaUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBzd2l0Y2ggKCAoRlRfSW50KWFyZ3NbMF0gKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBleGMtPnpwMCA9IGV4Yy0+dHdpbGlnaHQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgIGV4Yy0+enAwID0gZXhjLT5wdHM7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBleGMtPnpwMSA9IGV4Yy0+enAwOworICAgIGV4Yy0+enAyID0gZXhjLT56cDA7CisKKyAgICBleGMtPkdTLmdlcDAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgICAgZXhjLT5HUy5nZXAxID0gKEZUX1VTaG9ydClhcmdzWzBdOworICAgIGV4Yy0+R1MuZ2VwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJTlNUQ1RSTFtdOiAgIElOU1RydWN0aW9uIENvblRSb0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDhFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzIgaW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0lOU1RDVFJMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX0xvbmcgIEssIEwsIEtmOworCisKKyAgICBLID0gYXJnc1sxXTsKKyAgICBMID0gYXJnc1swXTsKKworICAgIC8qIHNlbGVjdG9yIHZhbHVlcyBjYW5ub3QgYmUgYE9SJ2VkOyAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGV5IGFyZSBpbmRpY2VzIHN0YXJ0aW5nIHdpdGggaW5kZXggMSwgbm90IGZsYWdzICovCisgICAgaWYgKCBLIDwgMSB8fCBLID4gMyApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogY29udmVydCBpbmRleCB0byBmbGFnIHZhbHVlICovCisgICAgS2YgPSAxIDw8ICggSyAtIDEgKTsKKworICAgIGlmICggTCAhPSAwICkKKyAgICB7CisgICAgICAvKiBhcmd1bWVudHMgdG8gc2VsZWN0b3JzIGxvb2sgbGlrZSBmbGFnIHZhbHVlcyAqLworICAgICAgaWYgKCBMICE9IEtmICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIGV4Yy0+R1MuaW5zdHJ1Y3RfY29udHJvbCAmPSB+KEZUX0J5dGUpS2Y7CisgICAgZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sIHw9IChGVF9CeXRlKUw7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICAvKiBJTlNUQ1RSTCBtb2RpZnlpbmcgZmxhZyAzIGFsc28gaGFzIGFuIGVmZmVjdCAqLworICAgIC8qIG91dHNpZGUgb2YgdGhlIENWVCBwcm9ncmFtICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBLID09IDMgKQorICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlID0gRlRfQk9PTCggTCA9PSA0ICk7CisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTQ0FOQ1RSTFtdOiAgIFNDQU4gQ29uVFJvTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyPyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NDQU5DVFJMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX0ludCAgQTsKKworCisgICAgLyogR2V0IFRocmVzaG9sZCAqLworICAgIEEgPSAoRlRfSW50KSggYXJnc1swXSAmIDB4RkYgKTsKKworICAgIGlmICggQSA9PSAweEZGICkKKyAgICB7CisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKCBBID09IDAgKQorICAgIHsKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCAoIGFyZ3NbMF0gJiAweDEwMCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnBwZW0gPD0gQSApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CisKKyAgICBpZiAoICggYXJnc1swXSAmIDB4MjAwICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Mucm90YXRlZCApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CisKKyAgICBpZiAoICggYXJnc1swXSAmIDB4NDAwICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Muc3RyZXRjaGVkICkKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gVFJVRTsKKworICAgIGlmICggKCBhcmdzWzBdICYgMHg4MDAgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5wcGVtID4gQSApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IEZBTFNFOworCisgICAgaWYgKCAoIGFyZ3NbMF0gJiAweDEwMDAgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5yb3RhdGVkICkKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CisKKyAgICBpZiAoICggYXJnc1swXSAmIDB4MjAwMCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnN0cmV0Y2hlZCApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IEZBTFNFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNDQU5UWVBFW106ICAgU0NBTiBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4OEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0NBTlRZUEUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgaWYgKCBhcmdzWzBdID49IDAgKQorICAgICAgZXhjLT5HUy5zY2FuX3R5cGUgPSAoRlRfSW50KWFyZ3NbMF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTUFOQUdJTkcgT1VUTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRkxJUFBUW106ICAgICBGTElQIFBvaW5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMi4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19GTElQUFQoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgRlRfVVNob3J0ICBwb2ludDsKKworCisgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKKyAgICB7CisgICAgICBleGMtPmFyZ3MtLTsKKworICAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzXTsKKworICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnB0cy5uX3BvaW50cyApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICB7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBleGMtPnB0cy50YWdzW3BvaW50XSBePSBGVF9DVVJWRV9UQUdfT047CisKKyAgICAgIGV4Yy0+R1MubG9vcC0tOworICAgIH0KKworICBGYWlsOgorICAgIGV4Yy0+R1MubG9vcCA9IDE7CisgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZMSVBSR09OW106ICAgRkxJUCBSYW5HZSBPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4ODEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRkxJUFJHT04oIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICBJLCBLLCBMOworCisKKyAgICBLID0gKEZUX1VTaG9ydClhcmdzWzFdOworICAgIEwgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisKKyAgICBpZiAoIEJPVU5EUyggSywgZXhjLT5wdHMubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBMLCBleGMtPnB0cy5uX3BvaW50cyApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCBJID0gTDsgSSA8PSBLOyBJKysgKQorICAgICAgZXhjLT5wdHMudGFnc1tJXSB8PSBGVF9DVVJWRV9UQUdfT047CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRkxJUFJHT0ZGOiAgICBGTElQIFJhbkdlIE9GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19GTElQUkdPRkYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VTaG9ydCAgSSwgSywgTDsKKworCisgICAgSyA9IChGVF9VU2hvcnQpYXJnc1sxXTsKKyAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOworCisgICAgaWYgKCBCT1VORFMoIEssIGV4Yy0+cHRzLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggTCwgZXhjLT5wdHMubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICggSSA9IEw7IEkgPD0gSzsgSSsrICkKKyAgICAgIGV4Yy0+cHRzLnRhZ3NbSV0gJj0gfkZUX0NVUlZFX1RBR19PTjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2KiAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYqICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfR2x5cGhab25lICAgIHpvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICAgcmVmcCApCisgIHsKKyAgICBUVF9HbHlwaFpvbmVSZWMgIHpwOworICAgIEZUX1VTaG9ydCAgICAgICAgcDsKKyAgICBGVF9GMjZEb3Q2ICAgICAgIGQ7CisKKworICAgIGlmICggZXhjLT5vcGNvZGUgJiAxICkKKyAgICB7CisgICAgICB6cCA9IGV4Yy0+enAwOworICAgICAgcCAgPSBleGMtPkdTLnJwMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHpwID0gZXhjLT56cDE7CisgICAgICBwICA9IGV4Yy0+R1MucnAyOworICAgIH0KKworICAgIGlmICggQk9VTkRTKCBwLCB6cC5uX3BvaW50cyApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgICpyZWZwID0gMDsKKyAgICAgIHJldHVybiBGQUlMVVJFOworICAgIH0KKworICAgICp6b25lID0genA7CisgICAgKnJlZnAgPSBwOworCisgICAgZCA9IFBST0pFQ1QoIHpwLmN1ciArIHAsIHpwLm9yZyArIHAgKTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgeworICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKKyAgICAgIHsKKyAgICAgICAgKnggPSBkOworICAgICAgICAqeSA9IDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICp4ID0gMDsKKyAgICAgICAgKnkgPSBkOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAqeCA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpZXhjLT5HUy5mcmVlVmVjdG9yLngsIGV4Yy0+Rl9kb3RfUCApOworICAgICAgKnkgPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci55LCBleGMtPkZfZG90X1AgKTsKKyAgICB9CisKKyAgICByZXR1cm4gU1VDQ0VTUzsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgTW92ZV9acDJfUG9pbnQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZHgsCisgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZHksCisgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgdG91Y2ggKQorICB7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQorICAgICAgeworICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisgICAgICAgIGlmICggdG91Y2ggKQorICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgKz0gZHk7CisgICAgICAgIGlmICggdG91Y2ggKQorICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOworICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyAgICB7CisgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisgICAgICBpZiAoIHRvdWNoICkKKyAgICAgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CisgICAgfQorCisgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKKyAgICB7CisgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgKz0gZHk7CisgICAgICBpZiAoIHRvdWNoICkKKyAgICAgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNIUFthXTogICAgICAgU0hpZnQgUG9pbnQgYnkgdGhlIGxhc3QgcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MzItMHgzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0hQKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIFRUX0dseXBoWm9uZVJlYyAgenA7CisgICAgRlRfVVNob3J0ICAgICAgICByZWZwOworCisgICAgRlRfRjI2RG90NiAgICAgICBkeCwgZHk7CisgICAgRlRfVVNob3J0ICAgICAgICBwb2ludDsKKworCisgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgaWYgKCBDb21wdXRlX1BvaW50X0Rpc3BsYWNlbWVudCggZXhjLCAmZHgsICZkeSwgJnpwLCAmcmVmcCApICkKKyAgICAgIHJldHVybjsKKworICAgIHdoaWxlICggZXhjLT5HUy5sb29wID4gMCApCisgICAgeworICAgICAgZXhjLT5hcmdzLS07CisgICAgICBwb2ludCA9IChGVF9VU2hvcnQpZXhjLT5zdGFja1tleGMtPmFyZ3NdOworCisgICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIHsKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICAvKiBkb2Vzbid0IGZvbGxvdyBDbGVhcnR5cGUgc3BlYyBidXQgcHJvZHVjZXMgYmV0dGVyIHJlc3VsdCAqLworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICkKKyAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIGR5LCBUUlVFICk7CisgICAgICBlbHNlCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKKworICAgICAgZXhjLT5HUy5sb29wLS07CisgICAgfQorCisgIEZhaWw6CisgICAgZXhjLT5HUy5sb29wID0gMTsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0hDW2FdOiAgICAgICBTSGlmdCBDb250b3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgzNC0zNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFVORE9DVU1FTlRFRDogQWNjb3JkaW5nIHRvIEdyZWcgSGl0Y2hjb2NrLCB0aGVyZSBpcyBvbmUgKHZpcnR1YWwpICAgICAqLworICAvKiAgICAgICAgICAgICAgIGNvbnRvdXIgaW4gdGhlIHR3aWxpZ2h0IHpvbmUsIG5hbWVseSBjb250b3VyIG51bWJlciAgICAgKi8KKyAgLyogICAgICAgICAgICAgICB6ZXJvIHdoaWNoIGluY2x1ZGVzIGFsbCBwb2ludHMgb2YgaXQuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0hDKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBUVF9HbHlwaFpvbmVSZWMgIHpwOworICAgIEZUX1VTaG9ydCAgICAgICAgcmVmcDsKKyAgICBGVF9GMjZEb3Q2ICAgICAgIGR4LCBkeTsKKworICAgIEZUX1Nob3J0ICAgICAgICAgY29udG91ciwgYm91bmRzOworICAgIEZUX1VTaG9ydCAgICAgICAgc3RhcnQsIGxpbWl0LCBpOworCisKKyAgICBjb250b3VyID0gKEZUX1Nob3J0KWFyZ3NbMF07CisgICAgYm91bmRzICA9ICggZXhjLT5HUy5nZXAyID09IDAgKSA/IDEgOiBleGMtPnpwMi5uX2NvbnRvdXJzOworCisgICAgaWYgKCBCT1VORFMoIGNvbnRvdXIsIGJvdW5kcyApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIENvbXB1dGVfUG9pbnRfRGlzcGxhY2VtZW50KCBleGMsICZkeCwgJmR5LCAmenAsICZyZWZwICkgKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKCBjb250b3VyID09IDAgKQorICAgICAgc3RhcnQgPSAwOworICAgIGVsc2UKKyAgICAgIHN0YXJ0ID0gKEZUX1VTaG9ydCkoIGV4Yy0+enAyLmNvbnRvdXJzW2NvbnRvdXIgLSAxXSArIDEgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDIuZmlyc3RfcG9pbnQgKTsKKworICAgIC8qIHdlIHVzZSB0aGUgbnVtYmVyIG9mIHBvaW50cyBpZiBpbiB0aGUgdHdpbGlnaHQgem9uZSAqLworICAgIGlmICggZXhjLT5HUy5nZXAyID09IDAgKQorICAgICAgbGltaXQgPSBleGMtPnpwMi5uX3BvaW50czsKKyAgICBlbHNlCisgICAgICBsaW1pdCA9IChGVF9VU2hvcnQpKCBleGMtPnpwMi5jb250b3Vyc1tjb250b3VyXSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMi5maXJzdF9wb2ludCArIDEgKTsKKworICAgIGZvciAoIGkgPSBzdGFydDsgaSA8IGxpbWl0OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggenAuY3VyICE9IGV4Yy0+enAyLmN1ciB8fCByZWZwICE9IGkgKQorICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBpLCBkeCwgZHksIFRSVUUgKTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0haW2FdOiAgICAgICBTSGlmdCBab25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgzNi0zNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TSFooIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIFRUX0dseXBoWm9uZVJlYyAgenA7CisgICAgRlRfVVNob3J0ICAgICAgICByZWZwOworICAgIEZUX0YyNkRvdDYgICAgICAgZHgsCisgICAgICAgICAgICAgICAgICAgICBkeTsKKworICAgIEZUX1VTaG9ydCAgICAgICAgbGltaXQsIGk7CisKKworICAgIGlmICggQk9VTkRTKCBhcmdzWzBdLCAyICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQoIGV4YywgJmR4LCAmZHksICZ6cCwgJnJlZnAgKSApCisgICAgICByZXR1cm47CisKKyAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgU0haIGRvZXNuJ3QgbW92ZSB0aGUgcGhhbnRvbSBwb2ludHMuICAgICAqLworICAgIC8qICAgICAgVHdpbGlnaHQgem9uZSBoYXMgbm8gcmVhbCBjb250b3Vycywgc28gdXNlIGBuX3BvaW50cycuICovCisgICAgLyogICAgICBOb3JtYWwgem9uZSdzIGBuX3BvaW50cycgaW5jbHVkZXMgcGhhbnRvbXMsIHNvIG11c3QgICAgKi8KKyAgICAvKiAgICAgIHVzZSBlbmQgb2YgbGFzdCBjb250b3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZXhjLT5HUy5nZXAyID09IDAgKQorICAgICAgbGltaXQgPSAoRlRfVVNob3J0KWV4Yy0+enAyLm5fcG9pbnRzOworICAgIGVsc2UgaWYgKCBleGMtPkdTLmdlcDIgPT0gMSAmJiBleGMtPnpwMi5uX2NvbnRvdXJzID4gMCApCisgICAgICBsaW1pdCA9IChGVF9VU2hvcnQpKCBleGMtPnpwMi5jb250b3Vyc1tleGMtPnpwMi5uX2NvbnRvdXJzIC0gMV0gKyAxICk7CisgICAgZWxzZQorICAgICAgbGltaXQgPSAwOworCisgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQhIFNIWiBkb2Vzbid0IHRvdWNoIHRoZSBwb2ludHMgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGxpbWl0OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggenAuY3VyICE9IGV4Yy0+enAyLmN1ciB8fCByZWZwICE9IGkgKQorICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBpLCBkeCwgZHksIEZBTFNFICk7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNIUElYW106ICAgICAgU0hpZnQgcG9pbnRzIGJ5IGEgUElYZWwgYW1vdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0hQSVgoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfRjI2RG90NiAgZHgsIGR5OworICAgIEZUX1VTaG9ydCAgIHBvaW50OworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIEZUX0ludCAgICAgIEIxLCBCMjsKKyNlbmRpZgorCisKKyAgICBpZiAoIGV4Yy0+dG9wIDwgZXhjLT5HUy5sb29wICsgMSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQorICAgICAgeworICAgICAgICBkeCA9IChGVF9VSW50MzIpYXJnc1swXTsKKyAgICAgICAgZHkgPSAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5ID0gKEZUX1VJbnQzMilhcmdzWzBdOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBkeCA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueCApOworICAgICAgZHkgPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIGV4Yy0+R1MubG9vcCA+IDAgKQorICAgIHsKKyAgICAgIGV4Yy0+YXJncy0tOworCisgICAgICBwb2ludCA9IChGVF9VU2hvcnQpZXhjLT5zdGFja1tleGMtPmFyZ3NdOworCisgICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIHsKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICB7CisgICAgICAgIC8qICBJZiBub3QgdXNpbmcgaWdub3JlX3hfbW9kZSByZW5kZXJpbmcsIGFsbG93IFpQMiBtb3ZlLiAgICAgICAgKi8KKyAgICAgICAgLyogIElmIGlubGluZSBkZWx0YXMgYXJlbid0IGFsbG93ZWQsIHNraXAgWlAyIG1vdmUuICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgSWYgdXNpbmcgaWdub3JlX3hfbW9kZSByZW5kZXJpbmcsIGFsbG93IFpQMiBwb2ludCBtb3ZlIGlmOiAgICovCisgICAgICAgIC8qICAgLSBmcmVlZG9tIHZlY3RvciBpcyB5IGFuZCBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIGlzIG9mZiAgICAgKi8KKyAgICAgICAgLyogICAtIHRoZSBnbHlwaCBpcyBjb21wb3NpdGUgYW5kIHRoZSBtb3ZlIGlzIGluIHRoZSBZIGRpcmVjdGlvbiAqLworICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICovCisgICAgICAgIC8qICAgLSB0aGUgbW92ZSBpcyBvbiBhIHByZXZpb3VzbHkgWS10b3VjaGVkIHBvaW50ICAgICAgICAgICAgICAgKi8KKworICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgorICAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBzYXZlIHBvaW50IGZvciBsYXRlciBjb21wYXJpc29uICovCisgICAgICAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKKyAgICAgICAgICAgIEIxID0gZXhjLT56cDIuY3VyW3BvaW50XS55OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEIxID0gZXhjLT56cDIuY3VyW3BvaW50XS54OworCisgICAgICAgICAgaWYgKCAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICYmCisgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7CisKKyAgICAgICAgICAgIC8qIHNhdmUgbmV3IHBvaW50ICovCisgICAgICAgICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBCMiA9IGV4Yy0+enAyLmN1cltwb2ludF0ueTsKKworICAgICAgICAgICAgICAvKiByZXZlcnNlIGFueSBkaXNhbGxvd2VkIG1vdmVzICovCisgICAgICAgICAgICAgIGlmICggKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgKSAmJgorICAgICAgICAgICAgICAgICAgICggQjEgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgQjEgIT0gQjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIC1keCwgLWR5LCBUUlVFICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGR4ID0gRlRfUElYX1JPVU5EKCBCMSArIGR4ICkgLSBCMTsKKyAgICAgICAgICAgICAgZHkgPSBGVF9QSVhfUk9VTkQoIEIxICsgZHkgKSAtIEIxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBza2lwIHBvc3QtaXVwIGRlbHRhcyAqLworICAgICAgICAgICAgaWYgKCBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAoICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8xICkgfHwKKyAgICAgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICkgKQorICAgICAgICAgICAgICBnb3RvIFNraXA7CisKKyAgICAgICAgICAgIGlmICggISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxXQVlTX1NLSVBfREVMVEFQICkgJiYKKyAgICAgICAgICAgICAgICAgICggKCBleGMtPmlzX2NvbXBvc2l0ZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBleGMtPnpwMi50YWdzW3BvaW50XSAmIEZUX0NVUlZFX1RBR19UT1VDSF9ZICkgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ET19TSFBJWCApICAgICAgKSAgKQorICAgICAgICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgMCwgZHksIFRSVUUgKTsKKworICAgICAgICAgICAgLyogc2F2ZSBuZXcgcG9pbnQgKi8KKyAgICAgICAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEIyID0gZXhjLT56cDIuY3VyW3BvaW50XS55OworCisgICAgICAgICAgICAgIC8qIHJldmVyc2UgYW55IGRpc2FsbG93ZWQgbW92ZXMgKi8KKyAgICAgICAgICAgICAgaWYgKCAoIEIxICYgNjMgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgIEIxICE9IEIyICAgICAgICAgKQorICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCAtZHksIFRSVUUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMICkKKyAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOworICAgICAgfQorCisgICAgU2tpcDoKKworI2Vsc2UgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7CisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAgIGV4Yy0+R1MubG9vcC0tOworICAgIH0KKworICBGYWlsOgorICAgIGV4Yy0+R1MubG9vcCA9IDE7CisgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1TSVJQW2FdOiAgICAgTW92ZSBTdGFjayBJbmRpcmVjdCBSZWxhdGl2ZSBQb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4M0EtMHgzQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTVNJUlAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICAgcG9pbnQ7CisgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsgLyogcGFjaWZ5IGNvbXBpbGVyICovCisKKworICAgIGlmICggU1VCUElYRUxfSElOVElORyApCisgICAgeworICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKKworICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCisgICAgICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSAwOworICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgcG9pbnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggZXhjLT5HUy5ycDAsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFVORE9DVU1FTlRFRCEgIFRoZSBNUyByYXN0ZXJpemVyIGRvZXMgdGhhdCB3aXRoICovCisgICAgLyogdHdpbGlnaHQgcG9pbnRzIChjb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2spICAgKi8KKyAgICBpZiAoIGV4Yy0+R1MuZ2VwMSA9PSAwICkKKyAgICB7CisgICAgICBleGMtPnpwMS5vcmdbcG9pbnRdID0gZXhjLT56cDAub3JnW2V4Yy0+R1MucnAwXTsKKyAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgYXJnc1sxXSApOworICAgICAgZXhjLT56cDEuY3VyW3BvaW50XSA9IGV4Yy0+enAxLm9yZ1twb2ludF07CisgICAgfQorCisgICAgZGlzdGFuY2UgPSBQUk9KRUNUKCBleGMtPnpwMS5jdXIgKyBwb2ludCwgZXhjLT56cDAuY3VyICsgZXhjLT5HUy5ycDAgKTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBtYWtlIE1TSVJQIHJlc3BlY3QgQ1ZUIGN1dC1pbjsgKi8KKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIEZUX0FCUyggZGlzdGFuY2UgLSBhcmdzWzFdICkgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCisgICAgICBkaXN0YW5jZSA9IGFyZ3NbMV07CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBhcmdzWzFdIC0gZGlzdGFuY2UgKTsKKworICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CisgICAgZXhjLT5HUy5ycDIgPSBwb2ludDsKKworICAgIGlmICggKCBleGMtPm9wY29kZSAmIDEgKSAhPSAwICkKKyAgICAgIGV4Yy0+R1MucnAwID0gcG9pbnQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTURBUFthXTogICAgICBNb3ZlIERpcmVjdCBBYnNvbHV0ZSBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgyRS0weDJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19NREFQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICAgcG9pbnQ7CisgICAgRlRfRjI2RG90NiAgY3VyX2Rpc3Q7CisgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7CisKKworICAgIHBvaW50ID0gKEZUX1VTaG9ydClhcmdzWzBdOworCisgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnpwMC5uX3BvaW50cyApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApCisgICAgeworICAgICAgY3VyX2Rpc3QgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMC5jdXJbcG9pbnRdICk7CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyAgICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKAorICAgICAgICAgICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgY3VyX2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApIC0gY3VyX2Rpc3Q7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgZGlzdGFuY2UgPSBleGMtPmZ1bmNfcm91bmQoCisgICAgICAgICAgICAgICAgICAgICBleGMsCisgICAgICAgICAgICAgICAgICAgICBjdXJfZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICkgLSBjdXJfZGlzdDsKKyAgICB9CisgICAgZWxzZQorICAgICAgZGlzdGFuY2UgPSAwOworCisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwb2ludCwgZGlzdGFuY2UgKTsKKworICAgIGV4Yy0+R1MucnAwID0gcG9pbnQ7CisgICAgZXhjLT5HUy5ycDEgPSBwb2ludDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBNSUFQW2FdOiAgICAgIE1vdmUgSW5kaXJlY3QgQWJzb2x1dGUgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDNFLTB4M0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX01JQVAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VTG9uZyAgICBjdnRFbnRyeTsKKyAgICBGVF9VU2hvcnQgICBwb2ludDsKKyAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKKyAgICBGVF9GMjZEb3Q2ICBvcmdfZGlzdDsKKyAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluOworCisKKyAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gZXhjLT5HUy5jb250cm9sX3ZhbHVlX2N1dGluOworICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpYXJnc1sxXTsKKyAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFNMKCBjdnRFbnRyeSwgZXhjLT5jdnRTaXplICkgICAgICApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogVU5ET0NVTUVOVEVEISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhlIGJlaGF2aW91ciBvZiBhbiBNSUFQIGluc3RydWN0aW9uIGlzIHF1aXRlIGRpZmZlcmVudCB3aGVuIHVzZWQgICovCisgICAgLyogaW4gdGhlIHR3aWxpZ2h0IHpvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogRmlyc3QsIG5vIGNvbnRyb2wgdmFsdWUgY3V0LWluIHRlc3QgaXMgcGVyZm9ybWVkIGFzIGl0IHdvdWxkIGZhaWwgICovCisgICAgLyogYW55d2F5LiAgU2Vjb25kLCB0aGUgb3JpZ2luYWwgcG9pbnQsIGkuZS4gKG9yZ194LG9yZ195KSBvZiAgICAgICAgICovCisgICAgLyogenAwLnBvaW50LCBpcyBzZXQgdG8gdGhlIGFic29sdXRlLCB1bnJvdW5kZWQgZGlzdGFuY2UgZm91bmQgaW4gdGhlICovCisgICAgLyogQ1ZULiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhpcyBpcyB1c2VkIGluIHRoZSBDVlQgcHJvZ3JhbXMgb2YgdGhlIE1pY3Jvc29mdCBmb250cyBBcmlhbCwgICAgICovCisgICAgLyogVGltZXMsIGV0Yy4sIGluIG9yZGVyIHRvIHJlLWFkanVzdCBzb21lIGtleSBmb250IGhlaWdodHMuICBJdCAgICAgICovCisgICAgLyogYWxsb3dzIHRoZSB1c2Ugb2YgdGhlIElQIGluc3RydWN0aW9uIGluIHRoZSB0d2lsaWdodCB6b25lLCB3aGljaCAgICovCisgICAgLyogb3RoZXJ3aXNlIHdvdWxkIGJlIGludmFsaWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogV2UgaW1wbGVtZW50IGl0IHdpdGggYSBzcGVjaWFsIHNlcXVlbmNlIGZvciB0aGUgdHdpbGlnaHQgem9uZS4gICAgICovCisgICAgLyogVGhpcyBpcyBhIGJhZCBoYWNrLCBidXQgaXQgc2VlbXMgdG8gd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogQ29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yZWFkX2N2dCggZXhjLCBjdnRFbnRyeSApOworCisgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gMCApICAgLyogSWYgaW4gdHdpbGlnaHQgem9uZSAqLworICAgIHsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICAgIC8qIE9ubHkgYWRqdXN0IGlmIG5vdCBpbiBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIG9yIGlnbm9yZV94X21vZGUuICovCisgICAgICAvKiBEZXRlcm1pbmVkIHZpYSBleHBlcmltZW50YXRpb24gYW5kIG1heSBiZSBpbmNvcnJlY3QuLi4gICAgICAgICAqLworICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICkgKQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworICAgICAgICBleGMtPnpwMC5vcmdbcG9pbnRdLnggPSBUVF9NdWxGaXgxNCggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCApOworICAgICAgZXhjLT56cDAub3JnW3BvaW50XS55ID0gVFRfTXVsRml4MTQoIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICksCisgICAgICBleGMtPnpwMC5jdXJbcG9pbnRdICAgPSBleGMtPnpwMC5vcmdbcG9pbnRdOworICAgIH0KKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTUlBUF9IQUNLICkgJiYKKyAgICAgICAgIGRpc3RhbmNlID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgZGlzdGFuY2UgPSAwOworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgb3JnX2Rpc3QgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMC5jdXJbcG9pbnRdICk7CisKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApICAgLyogcm91bmRpbmcgYW5kIGNvbnRyb2wgY3V0LWluIGZsYWcgKi8KKyAgICB7CisgICAgICBpZiAoIEZUX0FCUyggZGlzdGFuY2UgLSBvcmdfZGlzdCApID4gY29udHJvbF92YWx1ZV9jdXRpbiApCisgICAgICAgIGRpc3RhbmNlID0gb3JnX2Rpc3Q7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgKQorICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICk7CisgICAgfQorCisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwb2ludCwgZGlzdGFuY2UgLSBvcmdfZGlzdCApOworCisgIEZhaWw6CisgICAgZXhjLT5HUy5ycDAgPSBwb2ludDsKKyAgICBleGMtPkdTLnJwMSA9IHBvaW50OworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1EUlBbYWJjZGVdOiAgTW92ZSBEaXJlY3QgUmVsYXRpdmUgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4QzAtMHhERiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTURSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VTaG9ydCAgIHBvaW50OworICAgIEZUX0YyNkRvdDYgIG9yZ19kaXN0LCBkaXN0YW5jZSwgbWluaW11bV9kaXN0YW5jZTsKKworCisgICAgbWluaW11bV9kaXN0YW5jZSA9IGV4Yy0+R1MubWluaW11bV9kaXN0YW5jZTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgICAgbWluaW11bV9kaXN0YW5jZSA9IDA7CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKKworICAgIGlmICggQk9VTkRTKCBwb2ludCwgICAgICAgZXhjLT56cDEubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBleGMtPkdTLnJwMCwgZXhjLT56cDAubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogWFhYOiBJcyB0aGVyZSBzb21lIHVuZG9jdW1lbnRlZCBmZWF0dXJlIHdoaWxlIGluIHRoZSAqLworICAgIC8qICAgICAgdHdpbGlnaHQgem9uZT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEOiB0d2lsaWdodCB6b25lIHNwZWNpYWwgY2FzZSAqLworCisgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gMCB8fCBleGMtPkdTLmdlcDEgPT0gMCApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9ICZleGMtPnpwMS5vcmdbcG9pbnRdOworICAgICAgRlRfVmVjdG9yKiAgdmVjMiA9ICZleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdOworCisKKyAgICAgIG9yZ19kaXN0ID0gRFVBTFBST0ooIHZlYzEsIHZlYzIgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHZlYzEgPSAmZXhjLT56cDEub3J1c1twb2ludF07CisgICAgICBGVF9WZWN0b3IqICB2ZWMyID0gJmV4Yy0+enAwLm9ydXNbZXhjLT5HUy5ycDBdOworCisKKyAgICAgIGlmICggZXhjLT5tZXRyaWNzLnhfc2NhbGUgPT0gZXhjLT5tZXRyaWNzLnlfc2NhbGUgKQorICAgICAgeworICAgICAgICAvKiB0aGlzIHNob3VsZCBiZSBmYXN0ZXIgKi8KKyAgICAgICAgb3JnX2Rpc3QgPSBEVUFMUFJPSiggdmVjMSwgdmVjMiApOworICAgICAgICBvcmdfZGlzdCA9IEZUX011bEZpeCggb3JnX2Rpc3QsIGV4Yy0+bWV0cmljcy54X3NjYWxlICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciAgdmVjOworCisKKyAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIHZlYzEtPnggLSB2ZWMyLT54LCBleGMtPm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggdmVjMS0+eSAtIHZlYzItPnksIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CisKKyAgICAgICAgb3JnX2Rpc3QgPSBGQVNUX0RVQUxQUk9KKCAmdmVjICk7CisgICAgICB9CisgICAgfQorCisgICAgLyogc2luZ2xlIHdpZHRoIGN1dC1pbiB0ZXN0ICovCisKKyAgICBpZiAoIEZUX0FCUyggb3JnX2Rpc3QgLSBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSApIDwKKyAgICAgICAgIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluICkKKyAgICB7CisgICAgICBpZiAoIG9yZ19kaXN0ID49IDAgKQorICAgICAgICBvcmdfZGlzdCA9IGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlOworICAgICAgZWxzZQorICAgICAgICBvcmdfZGlzdCA9IC1leGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZTsKKyAgICB9CisKKyAgICAvKiByb3VuZCBmbGFnICovCisKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA0ICkgIT0gMCApCisgICAgeworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCisgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKKyAgICAgICAgICAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgIG9yZ19kaXN0LAorICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgJiAzXSApOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKAorICAgICAgICAgICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgb3JnX2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAmIDNdICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKKyAgICAgICAgICAgICAgICAgICBleGMsCisgICAgICAgICAgICAgICAgICAgb3JnX2Rpc3QsCisgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgJiAzXSApOworCisgICAgLyogbWluaW11bSBkaXN0YW5jZSBmbGFnICovCisKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA4ICkgIT0gMCApCisgICAgeworICAgICAgaWYgKCBvcmdfZGlzdCA+PSAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkaXN0YW5jZSA8IG1pbmltdW1fZGlzdGFuY2UgKQorICAgICAgICAgIGRpc3RhbmNlID0gbWluaW11bV9kaXN0YW5jZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKCBkaXN0YW5jZSA+IC1taW5pbXVtX2Rpc3RhbmNlICkKKyAgICAgICAgICBkaXN0YW5jZSA9IC1taW5pbXVtX2Rpc3RhbmNlOworICAgICAgfQorICAgIH0KKworICAgIC8qIG5vdyBtb3ZlIHRoZSBwb2ludCAqLworCisgICAgb3JnX2Rpc3QgPSBQUk9KRUNUKCBleGMtPnpwMS5jdXIgKyBwb2ludCwgZXhjLT56cDAuY3VyICsgZXhjLT5HUy5ycDAgKTsKKworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIGRpc3RhbmNlIC0gb3JnX2Rpc3QgKTsKKworICBGYWlsOgorICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CisgICAgZXhjLT5HUy5ycDIgPSBwb2ludDsKKworICAgIGlmICggKCBleGMtPm9wY29kZSAmIDE2ICkgIT0gMCApCisgICAgICBleGMtPkdTLnJwMCA9IHBvaW50OworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE1JUlBbYWJjZGVdOiAgTW92ZSBJbmRpcmVjdCBSZWxhdGl2ZSBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4RTAtMHhGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfTUlSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VTaG9ydCAgIHBvaW50OworICAgIEZUX1VMb25nICAgIGN2dEVudHJ5OworCisgICAgRlRfRjI2RG90NiAgY3Z0X2Rpc3QsCisgICAgICAgICAgICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgY3VyX2Rpc3QsCisgICAgICAgICAgICAgICAgb3JnX2Rpc3QsCisgICAgICAgICAgICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiwKKyAgICAgICAgICAgICAgICBtaW5pbXVtX2Rpc3RhbmNlOworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIEZUX0ludCAgICAgIEIxICAgICAgICAgICA9IDA7IC8qIHBhY2lmeSBjb21waWxlciAqLworICAgIEZUX0ludCAgICAgIEIyICAgICAgICAgICA9IDA7CisgICAgRlRfQm9vbCAgICAgcmV2ZXJzZV9tb3ZlID0gRkFMU0U7CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKworICAgIG1pbmltdW1fZGlzdGFuY2UgICAgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CisgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKKyAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOworICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpKCBhcmdzWzFdICsgMSApOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCisgICAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gbWluaW11bV9kaXN0YW5jZSA9IDA7CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgY3Z0Wy0xXSA9IDAgYWx3YXlzICovCisKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EU0woIGN2dEVudHJ5LCAgIGV4Yy0+Y3Z0U2l6ZSArIDEgKSAgfHwKKyAgICAgICAgIEJPVU5EUyggZXhjLT5HUy5ycDAsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIGlmICggIWN2dEVudHJ5ICkKKyAgICAgIGN2dF9kaXN0ID0gMDsKKyAgICBlbHNlCisgICAgICBjdnRfZGlzdCA9IGV4Yy0+ZnVuY19yZWFkX2N2dCggZXhjLCBjdnRFbnRyeSAtIDEgKTsKKworICAgIC8qIHNpbmdsZSB3aWR0aCB0ZXN0ICovCisKKyAgICBpZiAoIEZUX0FCUyggY3Z0X2Rpc3QgLSBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSApIDwKKyAgICAgICAgIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluICkKKyAgICB7CisgICAgICBpZiAoIGN2dF9kaXN0ID49IDAgKQorICAgICAgICBjdnRfZGlzdCA9ICBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgY3Z0X2Rpc3QgPSAtZXhjLT5HUy5zaW5nbGVfd2lkdGhfdmFsdWU7CisgICAgfQorCisgICAgLyogVU5ET0NVTUVOVEVEISAgVGhlIE1TIHJhc3Rlcml6ZXIgZG9lcyB0aGF0IHdpdGggKi8KKyAgICAvKiB0d2lsaWdodCBwb2ludHMgKGNvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jaykgICAqLworICAgIGlmICggZXhjLT5HUy5nZXAxID09IDAgKQorICAgIHsKKyAgICAgIGV4Yy0+enAxLm9yZ1twb2ludF0ueCA9IGV4Yy0+enAwLm9yZ1tleGMtPkdTLnJwMF0ueCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9NdWxGaXgxNCggY3Z0X2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKKyAgICAgIGV4Yy0+enAxLm9yZ1twb2ludF0ueSA9IGV4Yy0+enAwLm9yZ1tleGMtPkdTLnJwMF0ueSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9NdWxGaXgxNCggY3Z0X2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKKyAgICAgIGV4Yy0+enAxLmN1cltwb2ludF0gICA9IGV4Yy0+enAxLm9yZ1twb2ludF07CisgICAgfQorCisgICAgb3JnX2Rpc3QgPSBEVUFMUFJPSiggJmV4Yy0+enAxLm9yZ1twb2ludF0sICZleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdICk7CisgICAgY3VyX2Rpc3QgPSBQUk9KRUNUICggJmV4Yy0+enAxLmN1cltwb2ludF0sICZleGMtPnpwMC5jdXJbZXhjLT5HUy5ycDBdICk7CisKKyAgICAvKiBhdXRvLWZsaXAgdGVzdCAqLworCisgICAgaWYgKCBleGMtPkdTLmF1dG9fZmxpcCApCisgICAgeworICAgICAgaWYgKCAoIG9yZ19kaXN0IF4gY3Z0X2Rpc3QgKSA8IDAgKQorICAgICAgICBjdnRfZGlzdCA9IC1jdnRfZGlzdDsKKyAgICB9CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgKSApCisgICAgeworICAgICAgaWYgKCBjdXJfZGlzdCA8IC02NCApCisgICAgICAgIGN2dF9kaXN0IC09IDE2OworICAgICAgZWxzZSBpZiAoIGN1cl9kaXN0ID4gNjQgJiYgY3VyX2Rpc3QgPCA4NCApCisgICAgICAgIGN2dF9kaXN0ICs9IDMyOworICAgIH0KKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIC8qIGNvbnRyb2wgdmFsdWUgY3V0LWluIGFuZCByb3VuZCAqLworCisgICAgaWYgKCAoIGV4Yy0+b3Bjb2RlICYgNCApICE9IDAgKQorICAgIHsKKyAgICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEISAgT25seSBwZXJmb3JtIGN1dC1pbiB0ZXN0IHdoZW4gYm90aCBwb2ludHMgKi8KKyAgICAgIC8qICAgICAgcmVmZXIgdG8gdGhlIHNhbWUgem9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKKyAgICAgIHsKKyAgICAgICAgLyogWFhYOiBBY2NvcmRpbmcgdG8gR3JlZyBIaXRjaGNvY2ssIHRoZSBmb2xsb3dpbmcgd29yZGluZyBpcyAqLworICAgICAgICAvKiAgICAgIHRoZSByaWdodCBvbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgIFdoZW4gdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdmFsdWUgaW4gICAqLworICAgICAgICAvKiAgICAgICAgdGhlIHRhYmxlIFtDVlRdIGFuZCB0aGUgbWVhc3VyZW1lbnQgZGlyZWN0bHkgZnJvbSAgICovCisgICAgICAgIC8qICAgICAgICB0aGUgb3V0bGluZSBpcyBfZ3JlYXRlcl8gdGhhbiB0aGUgY3V0X2luIHZhbHVlLCB0aGUgKi8KKyAgICAgICAgLyogICAgICAgIG91dGxpbmUgbWVhc3VyZW1lbnQgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgVGhpcyBpcyBmcm9tIGBpbnN0Z2x5LmRvYycuICBUaGUgZGVzY3JpcHRpb24gaW4gICAgICAgKi8KKyAgICAgICAgLyogICAgICBgdHRpbnN0Mi5kb2MnLCB2ZXJzaW9uIDEuNjYsIGlzIHRodXMgaW5jb3JyZWN0IHNpbmNlICAqLworICAgICAgICAvKiAgICAgIGl0IGltcGxpZXMgYD49JyBpbnN0ZWFkIG9mIGA+Jy4gICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgaWYgKCBGVF9BQlMoIGN2dF9kaXN0IC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQorICAgICAgICAgIGN2dF9kaXN0ID0gb3JnX2Rpc3Q7CisgICAgICB9CisKKyAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKAorICAgICAgICAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgICAgICAgICBjdnRfZGlzdCwKKyAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAmIDNdICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICAgIC8qIGRvIGN2dCBjdXQtaW4gYWx3YXlzIGluIE1JUlAgZm9yIHNwaCAqLworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5nZXAwID09IGV4Yy0+R1MuZ2VwMSApCisgICAgICB7CisgICAgICAgIGlmICggRlRfQUJTKCBjdnRfZGlzdCAtIG9yZ19kaXN0ICkgPiBjb250cm9sX3ZhbHVlX2N1dGluICkKKyAgICAgICAgICBjdnRfZGlzdCA9IG9yZ19kaXN0OworICAgICAgfQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoCisgICAgICAgICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgICAgICAgIGN2dF9kaXN0LAorICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKKyAgICB9CisKKyAgICAvKiBtaW5pbXVtIGRpc3RhbmNlIHRlc3QgKi8KKworICAgIGlmICggKCBleGMtPm9wY29kZSAmIDggKSAhPSAwICkKKyAgICB7CisgICAgICBpZiAoIG9yZ19kaXN0ID49IDAgKQorICAgICAgeworICAgICAgICBpZiAoIGRpc3RhbmNlIDwgbWluaW11bV9kaXN0YW5jZSApCisgICAgICAgICAgZGlzdGFuY2UgPSBtaW5pbXVtX2Rpc3RhbmNlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiAoIGRpc3RhbmNlID4gLW1pbmltdW1fZGlzdGFuY2UgKQorICAgICAgICAgIGRpc3RhbmNlID0gLW1pbmltdW1fZGlzdGFuY2U7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyAgICB7CisgICAgICBCMSA9IGV4Yy0+enAxLmN1cltwb2ludF0ueTsKKworICAgICAgLyogUm91bmQgbW92ZXMgaWYgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApICkKKyAgICAgICAgZGlzdGFuY2UgPSBGVF9QSVhfUk9VTkQoIEIxICsgZGlzdGFuY2UgLSBjdXJfZGlzdCApIC0gQjEgKyBjdXJfZGlzdDsKKworICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBleGMtPm9wY29kZSAmIDE2ICkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIGV4Yy0+b3Bjb2RlICYgOCApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQ09VUklFUl9ORVdfMl9IQUNLICkgKQorICAgICAgICBkaXN0YW5jZSArPSA2NDsKKyAgICB9CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIGN1cl9kaXN0ICk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgIHsKKyAgICAgIEIyID0gZXhjLT56cDEuY3VyW3BvaW50XS55OworCisgICAgICAvKiBSZXZlcnNlIG1vdmUgaWYgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICYmCisgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICYmCisgICAgICAgICAgICAgKCBCMSAmIDYzICkgPT0gMCAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICByZXZlcnNlX21vdmUgPSBUUlVFOworCisgICAgICAgIGlmICggKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgKSAmJgorICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBCMSAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgcmV2ZXJzZV9tb3ZlID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYgKCByZXZlcnNlX21vdmUgKQorICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCAtKCBkaXN0YW5jZSAtIGN1cl9kaXN0ICkgKTsKKyAgICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICBGYWlsOgorICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CisKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxNiApICE9IDAgKQorICAgICAgZXhjLT5HUy5ycDAgPSBwb2ludDsKKworICAgIGV4Yy0+R1MucnAyID0gcG9pbnQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQUxJR05SUFtdOiAgICBBTElHTiBSZWxhdGl2ZSBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgzQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19BTElHTlJQKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIEZUX1VTaG9ydCAgIHBvaW50OworICAgIEZUX0YyNkRvdDYgIGRpc3RhbmNlOworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgKSApCisgICAgeworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgZ290byBGYWlsOworICAgIH0KKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgQk9VTkRTKCBleGMtPkdTLnJwMCwgZXhjLT56cDAubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKKyAgICB7CisgICAgICBleGMtPmFyZ3MtLTsKKworICAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzXTsKKworICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnpwMS5uX3BvaW50cyApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICB7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAxLmN1ciArIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CisKKyAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgLWRpc3RhbmNlICk7CisgICAgICB9CisKKyAgICAgIGV4Yy0+R1MubG9vcC0tOworICAgIH0KKworICBGYWlsOgorICAgIGV4Yy0+R1MubG9vcCA9IDE7CisgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIElTRUNUW106ICAgICAgbW92ZXMgcG9pbnQgdG8gSW50ZXJTRUNUaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICA1ICogdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfSVNFQ1QoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICAgcG9pbnQsCisgICAgICAgICAgICAgICAgYTAsIGExLAorICAgICAgICAgICAgICAgIGIwLCBiMTsKKworICAgIEZUX0YyNkRvdDYgIGRpc2NyaW1pbmFudCwgZG90cHJvZHVjdDsKKworICAgIEZUX0YyNkRvdDYgIGR4LCAgZHksCisgICAgICAgICAgICAgICAgZGF4LCBkYXksCisgICAgICAgICAgICAgICAgZGJ4LCBkYnk7CisKKyAgICBGVF9GMjZEb3Q2ICB2YWw7CisKKyAgICBGVF9WZWN0b3IgICBSOworCisKKyAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKKworICAgIGEwID0gKEZUX1VTaG9ydClhcmdzWzFdOworICAgIGExID0gKEZUX1VTaG9ydClhcmdzWzJdOworICAgIGIwID0gKEZUX1VTaG9ydClhcmdzWzNdOworICAgIGIxID0gKEZUX1VTaG9ydClhcmdzWzRdOworCisgICAgaWYgKCBCT1VORFMoIGIwLCAgICBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIGIxLCAgICBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIGEwLCAgICBleGMtPnpwMS5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIGExLCAgICBleGMtPnpwMS5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIHBvaW50LCBleGMtPnpwMi5uX3BvaW50cyApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBDcmFtZXIncyBydWxlICovCisKKyAgICBkYnggPSBleGMtPnpwMC5jdXJbYjFdLnggLSBleGMtPnpwMC5jdXJbYjBdLng7CisgICAgZGJ5ID0gZXhjLT56cDAuY3VyW2IxXS55IC0gZXhjLT56cDAuY3VyW2IwXS55OworCisgICAgZGF4ID0gZXhjLT56cDEuY3VyW2ExXS54IC0gZXhjLT56cDEuY3VyW2EwXS54OworICAgIGRheSA9IGV4Yy0+enAxLmN1clthMV0ueSAtIGV4Yy0+enAxLmN1clthMF0ueTsKKworICAgIGR4ID0gZXhjLT56cDAuY3VyW2IwXS54IC0gZXhjLT56cDEuY3VyW2EwXS54OworICAgIGR5ID0gZXhjLT56cDAuY3VyW2IwXS55IC0gZXhjLT56cDEuY3VyW2EwXS55OworCisgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX0JPVEg7CisKKyAgICBkaXNjcmltaW5hbnQgPSBGVF9NdWxEaXYoIGRheCwgLWRieSwgMHg0MCApICsKKyAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGRheSwgZGJ4LCAweDQwICk7CisgICAgZG90cHJvZHVjdCAgID0gRlRfTXVsRGl2KCBkYXgsIGRieCwgMHg0MCApICsKKyAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGRheSwgZGJ5LCAweDQwICk7CisKKyAgICAvKiBUaGUgZGlzY3JpbWluYW50IGFib3ZlIGlzIGFjdHVhbGx5IGEgY3Jvc3MgcHJvZHVjdCBvZiB2ZWN0b3JzICAgICAqLworICAgIC8qIGRhIGFuZCBkYi4gVG9nZXRoZXIgd2l0aCB0aGUgZG90IHByb2R1Y3QsIHRoZXkgY2FuIGJlIHVzZWQgYXMgICAgICovCisgICAgLyogc3Vycm9nYXRlcyBmb3Igc2luZSBhbmQgY29zaW5lIG9mIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSB2ZWN0b3JzLiAgKi8KKyAgICAvKiBJbmRlZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgIGRvdHByb2R1Y3QgICA9IHxkYXx8ZGJ8Y29zKGFuZ2xlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgZGlzY3JpbWluYW50ID0gfGRhfHxkYnxzaW4oYW5nbGUpICAgICAuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBXZSB1c2UgdGhlc2UgZXF1YXRpb25zIHRvIHJlamVjdCBncmF6aW5nIGludGVyc2VjdGlvbnMgYnkgICAgICAgICAqLworICAgIC8qIHRocmVzaG9sZGluZyBhYnModGFuKGFuZ2xlKSkgYXQgMS8xOSwgY29ycmVzcG9uZGluZyB0byAzIGRlZ3JlZXMuICovCisgICAgaWYgKCAxOSAqIEZUX0FCUyggZGlzY3JpbWluYW50ICkgPiBGVF9BQlMoIGRvdHByb2R1Y3QgKSApCisgICAgeworICAgICAgdmFsID0gRlRfTXVsRGl2KCBkeCwgLWRieSwgMHg0MCApICsgRlRfTXVsRGl2KCBkeSwgZGJ4LCAweDQwICk7CisKKyAgICAgIFIueCA9IEZUX011bERpdiggdmFsLCBkYXgsIGRpc2NyaW1pbmFudCApOworICAgICAgUi55ID0gRlRfTXVsRGl2KCB2YWwsIGRheSwgZGlzY3JpbWluYW50ICk7CisKKyAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCA9IGV4Yy0+enAxLmN1clthMF0ueCArIFIueDsKKyAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueSA9IGV4Yy0+enAxLmN1clthMF0ueSArIFIueTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGVsc2UsIHRha2UgdGhlIG1pZGRsZSBvZiB0aGUgbWlkZGxlcyBvZiBBIGFuZCBCICovCisKKyAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCA9ICggZXhjLT56cDEuY3VyW2EwXS54ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDEuY3VyW2ExXS54ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDAuY3VyW2IwXS54ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDAuY3VyW2IxXS54ICkgLyA0OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ID0gKCBleGMtPnpwMS5jdXJbYTBdLnkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMS5jdXJbYTFdLnkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjBdLnkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjFdLnkgKSAvIDQ7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEFMSUdOUFRTW106ICAgQUxJR04gUG9pblRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfQUxJR05QVFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVVNob3J0ICAgcDEsIHAyOworICAgIEZUX0YyNkRvdDYgIGRpc3RhbmNlOworCisKKyAgICBwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgICBwMiA9IChGVF9VU2hvcnQpYXJnc1sxXTsKKworICAgIGlmICggQk9VTkRTKCBwMSwgZXhjLT56cDEubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBwMiwgZXhjLT56cDAubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlzdGFuY2UgPSBQUk9KRUNUKCBleGMtPnpwMC5jdXIgKyBwMiwgZXhjLT56cDEuY3VyICsgcDEgKSAvIDI7CisKKyAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHAxLCBkaXN0YW5jZSApOworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgcDIsIC1kaXN0YW5jZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIElQW106ICAgICAgICAgSW50ZXJwb2xhdGUgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIFNPTUVUSU1FUywgRFVNQkVSIENPREUgSVMgQkVUVEVSIENPREUgKi8KKworICBzdGF0aWMgdm9pZAorICBJbnNfSVAoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgRlRfRjI2RG90NiAgb2xkX3JhbmdlLCBjdXJfcmFuZ2U7CisgICAgRlRfVmVjdG9yKiAgb3J1c19iYXNlOworICAgIEZUX1ZlY3RvciogIGN1cl9iYXNlOworICAgIEZUX0ludCAgICAgIHR3aWxpZ2h0OworCisKKyAgICBpZiAoIGV4Yy0+dG9wIDwgZXhjLT5HUy5sb29wICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgdG8gZGVhbCBpbiBhIHNwZWNpYWwgd2F5IHdpdGggdGhlIHR3aWxpZ2h0IHpvbmUuCisgICAgICogT3RoZXJ3aXNlLCBieSBkZWZpbml0aW9uLCB0aGUgdmFsdWUgb2YgZXhjLT50d2lsaWdodC5vcnVzW25dIGlzICgwLDApLAorICAgICAqIGZvciBldmVyeSBuLgorICAgICAqLworICAgIHR3aWxpZ2h0ID0gZXhjLT5HUy5nZXAwID09IDAgfHwgZXhjLT5HUy5nZXAxID09IDAgfHwgZXhjLT5HUy5nZXAyID09IDA7CisKKyAgICBpZiAoIEJPVU5EUyggZXhjLT5HUy5ycDEsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIGlmICggdHdpbGlnaHQgKQorICAgICAgb3J1c19iYXNlID0gJmV4Yy0+enAwLm9yZ1tleGMtPkdTLnJwMV07CisgICAgZWxzZQorICAgICAgb3J1c19iYXNlID0gJmV4Yy0+enAwLm9ydXNbZXhjLT5HUy5ycDFdOworCisgICAgY3VyX2Jhc2UgPSAmZXhjLT56cDAuY3VyW2V4Yy0+R1MucnAxXTsKKworICAgIC8qIFhYWDogVGhlcmUgYXJlIHNvbWUgZ2x5cGhzIGluIHNvbWUgYnJhaW5kZWFkIGJ1dCBwb3B1bGFyICovCisgICAgLyogICAgICBmb250cyBvdXQgdGhlcmUgKGUuZy4gW2FldV1ncmF2ZSBpbiBtb25vdHlwZS50dGYpICAgKi8KKyAgICAvKiAgICAgIGNhbGxpbmcgSVBbXSB3aXRoIGJhZCB2YWx1ZXMgb2YgcnBbMTJdLiAgICAgICAgICAgICAqLworICAgIC8qICAgICAgRG8gc29tZXRoaW5nIHNhbmUgd2hlbiB0aGlzIG9kZCB0aGluZyBoYXBwZW5zLiAgICAgICovCisgICAgaWYgKCBCT1VORFMoIGV4Yy0+R1MucnAxLCBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIGV4Yy0+R1MucnAyLCBleGMtPnpwMS5uX3BvaW50cyApICkKKyAgICB7CisgICAgICBvbGRfcmFuZ2UgPSAwOworICAgICAgY3VyX3JhbmdlID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggdHdpbGlnaHQgKQorICAgICAgICBvbGRfcmFuZ2UgPSBEVUFMUFJPSiggJmV4Yy0+enAxLm9yZ1tleGMtPkdTLnJwMl0sIG9ydXNfYmFzZSApOworICAgICAgZWxzZSBpZiAoIGV4Yy0+bWV0cmljcy54X3NjYWxlID09IGV4Yy0+bWV0cmljcy55X3NjYWxlICkKKyAgICAgICAgb2xkX3JhbmdlID0gRFVBTFBST0ooICZleGMtPnpwMS5vcnVzW2V4Yy0+R1MucnAyXSwgb3J1c19iYXNlICk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciAgdmVjOworCisKKyAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIGV4Yy0+enAxLm9ydXNbZXhjLT5HUy5ycDJdLnggLSBvcnVzX2Jhc2UtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggZXhjLT56cDEub3J1c1tleGMtPkdTLnJwMl0ueSAtIG9ydXNfYmFzZS0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CisKKyAgICAgICAgb2xkX3JhbmdlID0gRkFTVF9EVUFMUFJPSiggJnZlYyApOworICAgICAgfQorCisgICAgICBjdXJfcmFuZ2UgPSBQUk9KRUNUKCAmZXhjLT56cDEuY3VyW2V4Yy0+R1MucnAyXSwgY3VyX2Jhc2UgKTsKKyAgICB9CisKKyAgICBmb3IgKCA7IGV4Yy0+R1MubG9vcCA+IDA7IC0tZXhjLT5HUy5sb29wICkKKyAgICB7CisgICAgICBGVF9VSW50ICAgICBwb2ludCA9IChGVF9VSW50KWV4Yy0+c3RhY2tbLS1leGMtPmFyZ3NdOworICAgICAgRlRfRjI2RG90NiAgb3JnX2Rpc3QsIGN1cl9kaXN0LCBuZXdfZGlzdDsKKworCisgICAgICAvKiBjaGVjayBwb2ludCBib3VuZHMgKi8KKyAgICAgIGlmICggQk9VTkRTKCBwb2ludCwgZXhjLT56cDIubl9wb2ludHMgKSApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgeworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICggdHdpbGlnaHQgKQorICAgICAgICBvcmdfZGlzdCA9IERVQUxQUk9KKCAmZXhjLT56cDIub3JnW3BvaW50XSwgb3J1c19iYXNlICk7CisgICAgICBlbHNlIGlmICggZXhjLT5tZXRyaWNzLnhfc2NhbGUgPT0gZXhjLT5tZXRyaWNzLnlfc2NhbGUgKQorICAgICAgICBvcmdfZGlzdCA9IERVQUxQUk9KKCAmZXhjLT56cDIub3J1c1twb2ludF0sIG9ydXNfYmFzZSApOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICBGVF9WZWN0b3IgIHZlYzsKKworCisgICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCBleGMtPnpwMi5vcnVzW3BvaW50XS54IC0gb3J1c19iYXNlLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKKyAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIGV4Yy0+enAyLm9ydXNbcG9pbnRdLnkgLSBvcnVzX2Jhc2UtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueV9zY2FsZSApOworCisgICAgICAgIG9yZ19kaXN0ID0gRkFTVF9EVUFMUFJPSiggJnZlYyApOworICAgICAgfQorCisgICAgICBjdXJfZGlzdCA9IFBST0pFQ1QoICZleGMtPnpwMi5jdXJbcG9pbnRdLCBjdXJfYmFzZSApOworCisgICAgICBpZiAoIG9yZ19kaXN0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBvbGRfcmFuZ2UgKQorICAgICAgICAgIG5ld19kaXN0ID0gRlRfTXVsRGl2KCBvcmdfZGlzdCwgY3VyX3JhbmdlLCBvbGRfcmFuZ2UgKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyBpcyB0aGUgc2FtZSBhcyB3aGF0IE1TIGRvZXMgZm9yIHRoZSBpbnZhbGlkIGNhc2U6ICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIGRlbHRhID0gKE9yaWdpbmFsX1B0IC0gT3JpZ2luYWxfUlAxKSAtICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgIChDdXJyZW50X1B0IC0gQ3VycmVudF9SUDEpICAgICAgICAgOyAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBJbiBGcmVlVHlwZSBzcGVhazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgZGVsdGEgPSBvcmdfZGlzdCAtIGN1cl9kaXN0ICAgICAgICAgIC4gICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogV2UgbW92ZSBgcG9pbnQnIGJ5IGBuZXdfZGlzdCAtIGN1cl9kaXN0JyBhZnRlciBsZWF2aW5nICAqLworICAgICAgICAgIC8qIHRoaXMgYmxvY2ssIHRodXMgd2UgaGF2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICBuZXdfZGlzdCAtIGN1cl9kaXN0ID0gZGVsdGEgICAgICAgICAgICAgICAgICAgLCAgICAgICAqLworICAgICAgICAgIC8qICAgbmV3X2Rpc3QgLSBjdXJfZGlzdCA9IG9yZ19kaXN0IC0gY3VyX2Rpc3QgICAgICwgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgbmV3X2Rpc3QgPSBvcmdfZGlzdCAgICAgICAgICAgICAgICAuICAgICAgICovCisKKyAgICAgICAgICBuZXdfZGlzdCA9IG9yZ19kaXN0OworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5ld19kaXN0ID0gMDsKKworICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAmZXhjLT56cDIsCisgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICBuZXdfZGlzdCAtIGN1cl9kaXN0ICk7CisgICAgfQorCisgIEZhaWw6CisgICAgZXhjLT5HUy5sb29wID0gMTsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVVRQW2FdOiAgICAgICBVblRvdWNoIFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19VVFAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1VTaG9ydCAgcG9pbnQ7CisgICAgRlRfQnl0ZSAgICBtYXNrOworCisKKyAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKKworICAgIGlmICggQk9VTkRTKCBwb2ludCwgZXhjLT56cDAubl9wb2ludHMgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFzayA9IDB4RkY7CisKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgKQorICAgICAgbWFzayAmPSB+RlRfQ1VSVkVfVEFHX1RPVUNIX1g7CisKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQorICAgICAgbWFzayAmPSB+RlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisKKyAgICBleGMtPnpwMC50YWdzW3BvaW50XSAmPSBtYXNrOworICB9CisKKworICAvKiBMb2NhbCB2YXJpYWJsZXMgZm9yIEluc19JVVA6ICovCisgIHR5cGVkZWYgc3RydWN0ICBJVVBfV29ya2VyUmVjXworICB7CisgICAgRlRfVmVjdG9yKiAgb3JnczsgICAvKiBvcmlnaW5hbCBhbmQgY3VycmVudCBjb29yZGluYXRlICovCisgICAgRlRfVmVjdG9yKiAgY3VyczsgICAvKiBhcnJheXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfVmVjdG9yKiAgb3J1czsKKyAgICBGVF9VSW50ICAgICBtYXhfcG9pbnRzOworCisgIH0gSVVQX1dvcmtlclJlYywgKklVUF9Xb3JrZXI7CisKKworICBzdGF0aWMgdm9pZAorICBfaXVwX3dvcmtlcl9zaGlmdCggSVVQX1dvcmtlciAgd29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcDEsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBwMiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHAgKQorICB7CisgICAgRlRfVUludCAgICAgaTsKKyAgICBGVF9GMjZEb3Q2ICBkeDsKKworCisgICAgZHggPSB3b3JrZXItPmN1cnNbcF0ueCAtIHdvcmtlci0+b3Jnc1twXS54OworICAgIGlmICggZHggIT0gMCApCisgICAgeworICAgICAgZm9yICggaSA9IHAxOyBpIDwgcDsgaSsrICkKKyAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggKz0gZHg7CisKKyAgICAgIGZvciAoIGkgPSBwICsgMTsgaSA8PSBwMjsgaSsrICkKKyAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggKz0gZHg7CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICBfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZSggSVVQX1dvcmtlciAgd29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHJlZjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByZWYyICkKKyAgeworICAgIEZUX1VJbnQgICAgIGk7CisgICAgRlRfRjI2RG90NiAgb3J1czEsIG9ydXMyLCBvcmcxLCBvcmcyLCBjdXIxLCBjdXIyLCBkZWx0YTEsIGRlbHRhMjsKKworCisgICAgaWYgKCBwMSA+IHAyICkKKyAgICAgIHJldHVybjsKKworICAgIGlmICggQk9VTkRTKCByZWYxLCB3b3JrZXItPm1heF9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCByZWYyLCB3b3JrZXItPm1heF9wb2ludHMgKSApCisgICAgICByZXR1cm47CisKKyAgICBvcnVzMSA9IHdvcmtlci0+b3J1c1tyZWYxXS54OworICAgIG9ydXMyID0gd29ya2VyLT5vcnVzW3JlZjJdLng7CisKKyAgICBpZiAoIG9ydXMxID4gb3J1czIgKQorICAgIHsKKyAgICAgIEZUX0YyNkRvdDYgIHRtcF9vOworICAgICAgRlRfVUludCAgICAgdG1wX3I7CisKKworICAgICAgdG1wX28gPSBvcnVzMTsKKyAgICAgIG9ydXMxID0gb3J1czI7CisgICAgICBvcnVzMiA9IHRtcF9vOworCisgICAgICB0bXBfciA9IHJlZjE7CisgICAgICByZWYxICA9IHJlZjI7CisgICAgICByZWYyICA9IHRtcF9yOworICAgIH0KKworICAgIG9yZzEgICA9IHdvcmtlci0+b3Jnc1tyZWYxXS54OworICAgIG9yZzIgICA9IHdvcmtlci0+b3Jnc1tyZWYyXS54OworICAgIGN1cjEgICA9IHdvcmtlci0+Y3Vyc1tyZWYxXS54OworICAgIGN1cjIgICA9IHdvcmtlci0+Y3Vyc1tyZWYyXS54OworICAgIGRlbHRhMSA9IGN1cjEgLSBvcmcxOworICAgIGRlbHRhMiA9IGN1cjIgLSBvcmcyOworCisgICAgaWYgKCBjdXIxID09IGN1cjIgfHwgb3J1czEgPT0gb3J1czIgKQorICAgIHsKKworICAgICAgLyogdHJpdmlhbCBzbmFwIG9yIHNoaWZ0IG9mIHVudG91Y2hlZCBwb2ludHMgKi8KKyAgICAgIGZvciAoIGkgPSBwMTsgaSA8PSBwMjsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfRjI2RG90NiAgeCA9IHdvcmtlci0+b3Jnc1tpXS54OworCisKKyAgICAgICAgaWYgKCB4IDw9IG9yZzEgKQorICAgICAgICAgIHggKz0gZGVsdGExOworCisgICAgICAgIGVsc2UgaWYgKCB4ID49IG9yZzIgKQorICAgICAgICAgIHggKz0gZGVsdGEyOworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB4ID0gY3VyMTsKKworICAgICAgICB3b3JrZXItPmN1cnNbaV0ueCA9IHg7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9GaXhlZCAgc2NhbGUgICAgICAgPSAwOworICAgICAgRlRfQm9vbCAgIHNjYWxlX3ZhbGlkID0gMDsKKworCisgICAgICAvKiBpbnRlcnBvbGF0aW9uICovCisgICAgICBmb3IgKCBpID0gcDE7IGkgPD0gcDI7IGkrKyApCisgICAgICB7CisgICAgICAgIEZUX0YyNkRvdDYgIHggPSB3b3JrZXItPm9yZ3NbaV0ueDsKKworCisgICAgICAgIGlmICggeCA8PSBvcmcxICkKKyAgICAgICAgICB4ICs9IGRlbHRhMTsKKworICAgICAgICBlbHNlIGlmICggeCA+PSBvcmcyICkKKyAgICAgICAgICB4ICs9IGRlbHRhMjsKKworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICFzY2FsZV92YWxpZCApCisgICAgICAgICAgeworICAgICAgICAgICAgc2NhbGVfdmFsaWQgPSAxOworICAgICAgICAgICAgc2NhbGUgICAgICAgPSBGVF9EaXZGaXgoIGN1cjIgLSBjdXIxLCBvcnVzMiAtIG9ydXMxICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgeCA9IGN1cjEgKyBGVF9NdWxGaXgoIHdvcmtlci0+b3J1c1tpXS54IC0gb3J1czEsIHNjYWxlICk7CisgICAgICAgIH0KKyAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggPSB4OworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJVVBbYV06ICAgICAgIEludGVycG9sYXRlIFVudG91Y2hlZCBQb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDMwLTB4MzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0lVUCggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBJVVBfV29ya2VyUmVjICBWOworICAgIEZUX0J5dGUgICAgICAgIG1hc2s7CisKKyAgICBGVF9VSW50ICAgZmlyc3RfcG9pbnQ7ICAgLyogZmlyc3QgcG9pbnQgb2YgY29udG91ciAgICAgICAgKi8KKyAgICBGVF9VSW50ICAgZW5kX3BvaW50OyAgICAgLyogZW5kIHBvaW50IChsYXN0KzEpIG9mIGNvbnRvdXIgKi8KKworICAgIEZUX1VJbnQgICBmaXJzdF90b3VjaGVkOyAvKiBmaXJzdCB0b3VjaGVkIHBvaW50IGluIGNvbnRvdXIgICAqLworICAgIEZUX1VJbnQgICBjdXJfdG91Y2hlZDsgICAvKiBjdXJyZW50IHRvdWNoZWQgcG9pbnQgaW4gY29udG91ciAqLworCisgICAgRlRfVUludCAgIHBvaW50OyAgICAgICAgIC8qIGN1cnJlbnQgcG9pbnQgICAqLworICAgIEZUX1Nob3J0ICBjb250b3VyOyAgICAgICAvKiBjdXJyZW50IGNvbnRvdXIgKi8KKworCisgICAgLyogaWdub3JlIGVtcHR5IG91dGxpbmVzICovCisgICAgaWYgKCBleGMtPnB0cy5uX2NvbnRvdXJzID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKCBleGMtPm9wY29kZSAmIDEgKQorICAgIHsKKyAgICAgIG1hc2sgICA9IEZUX0NVUlZFX1RBR19UT1VDSF9YOworICAgICAgVi5vcmdzID0gZXhjLT5wdHMub3JnOworICAgICAgVi5jdXJzID0gZXhjLT5wdHMuY3VyOworICAgICAgVi5vcnVzID0gZXhjLT5wdHMub3J1czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG1hc2sgICA9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOworICAgICAgVi5vcmdzID0gKEZUX1ZlY3RvciopKCAoRlRfUG9zKilleGMtPnB0cy5vcmcgKyAxICk7CisgICAgICBWLmN1cnMgPSAoRlRfVmVjdG9yKikoIChGVF9Qb3MqKWV4Yy0+cHRzLmN1ciArIDEgKTsKKyAgICAgIFYub3J1cyA9IChGVF9WZWN0b3IqKSggKEZUX1BvcyopZXhjLT5wdHMub3J1cyArIDEgKTsKKyAgICB9CisgICAgVi5tYXhfcG9pbnRzID0gZXhjLT5wdHMubl9wb2ludHM7CisKKyAgICBjb250b3VyID0gMDsKKyAgICBwb2ludCAgID0gMDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgKQorICAgIHsKKyAgICAgIGV4Yy0+aXVwX2NhbGxlZCA9IFRSVUU7CisgICAgICBpZiAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1NLSVBfSVVQICkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIGRvCisgICAgeworICAgICAgZW5kX3BvaW50ICAgPSBleGMtPnB0cy5jb250b3Vyc1tjb250b3VyXSAtIGV4Yy0+cHRzLmZpcnN0X3BvaW50OworICAgICAgZmlyc3RfcG9pbnQgPSBwb2ludDsKKworICAgICAgaWYgKCBCT1VORFMoIGVuZF9wb2ludCwgZXhjLT5wdHMubl9wb2ludHMgKSApCisgICAgICAgIGVuZF9wb2ludCA9IGV4Yy0+cHRzLm5fcG9pbnRzIC0gMTsKKworICAgICAgd2hpbGUgKCBwb2ludCA8PSBlbmRfcG9pbnQgJiYgKCBleGMtPnB0cy50YWdzW3BvaW50XSAmIG1hc2sgKSA9PSAwICkKKyAgICAgICAgcG9pbnQrKzsKKworICAgICAgaWYgKCBwb2ludCA8PSBlbmRfcG9pbnQgKQorICAgICAgeworICAgICAgICBmaXJzdF90b3VjaGVkID0gcG9pbnQ7CisgICAgICAgIGN1cl90b3VjaGVkICAgPSBwb2ludDsKKworICAgICAgICBwb2ludCsrOworCisgICAgICAgIHdoaWxlICggcG9pbnQgPD0gZW5kX3BvaW50ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggKCBleGMtPnB0cy50YWdzW3BvaW50XSAmIG1hc2sgKSAhPSAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZSggJlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3RvdWNoZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50IC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfdG91Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCApOworICAgICAgICAgICAgY3VyX3RvdWNoZWQgPSBwb2ludDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBwb2ludCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBjdXJfdG91Y2hlZCA9PSBmaXJzdF90b3VjaGVkICkKKyAgICAgICAgICBfaXVwX3dvcmtlcl9zaGlmdCggJlYsIGZpcnN0X3BvaW50LCBlbmRfcG9pbnQsIGN1cl90b3VjaGVkICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9pdXBfd29ya2VyX2ludGVycG9sYXRlKCAmViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydCkoIGN1cl90b3VjaGVkICsgMSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl90b3VjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90b3VjaGVkICk7CisKKyAgICAgICAgICBpZiAoIGZpcnN0X3RvdWNoZWQgPiAwICkKKyAgICAgICAgICAgIF9pdXBfd29ya2VyX2ludGVycG9sYXRlKCAmViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90b3VjaGVkIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfdG91Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90b3VjaGVkICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGNvbnRvdXIrKzsKKyAgICB9IHdoaWxlICggY29udG91ciA8IGV4Yy0+cHRzLm5fY29udG91cnMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBERUxUQVBuW106ICAgIERFTFRBIGV4Y2VwdGlvbnMgUDEsIFAyLCBQMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDVELDB4NzEsMHg3MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyICgyICogdWludDMyKS4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0RFTFRBUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVUxvbmcgICBudW1wLCBrOworICAgIEZUX1VTaG9ydCAgQTsKKyAgICBGVF9VTG9uZyAgIEMsIFA7CisgICAgRlRfTG9uZyAgICBCOworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIEZUX1VTaG9ydCAgQjEsIEIyOworCisKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fREVMVEFQX0FGVEVSX0lVUCApICkKKyAgICAgIGdvdG8gRmFpbDsKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICAvKiBEZWx0YSBoaW50aW5nIGlzIGNvdmVyZWQgYnkgVVMgUGF0ZW50IDUxNTk2NjguICovCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgeworICAgICAgRlRfTG9uZyAgbiA9IGFyZ3NbMF0gKiAyOworCisKKyAgICAgIGlmICggZXhjLT5hcmdzIDwgbiApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7CisgICAgICAgIG4gPSBleGMtPmFyZ3M7CisgICAgICB9CisKKyAgICAgIGV4Yy0+YXJncyAtPSBuOworICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgUCAgICA9IChGVF9VTG9uZylleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOworICAgIG51bXAgPSAoRlRfVUxvbmcpYXJnc1swXTsgICAvKiBzb21lIHBvaW50cyB0aGVvcmV0aWNhbGx5IG1heSBvY2N1ciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gb25jZSwgdGh1cyBVU2hvcnQgaXNuJ3QgZW5vdWdoICovCisKKyAgICBmb3IgKCBrID0gMTsgayA8PSBudW1wOyBrKysgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5hcmdzIDwgMiApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7CisgICAgICAgIGV4Yy0+YXJncyA9IDA7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgZXhjLT5hcmdzIC09IDI7CisKKyAgICAgIEEgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzICsgMV07CisgICAgICBCID0gZXhjLT5zdGFja1tleGMtPmFyZ3NdOworCisgICAgICAvKiBYWFg6IEJlY2F1c2Ugc29tZSBwb3B1bGFyIGZvbnRzIGNvbnRhaW4gc29tZSBpbnZhbGlkIERlbHRhUCAqLworICAgICAgLyogICAgICBpbnN0cnVjdGlvbnMsIHdlIHNpbXBseSBpZ25vcmUgdGhlbSB3aGVuIHRoZSBzdGFja2VkICAgKi8KKyAgICAgIC8qICAgICAgcG9pbnQgcmVmZXJlbmNlIGlzIG9mZiBsaW1pdCwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuICovCisgICAgICAvKiAgICAgIGVycm9yLiAgQXMgYSBkZWx0YSBpbnN0cnVjdGlvbiBkb2Vzbid0IGNoYW5nZSBhIGdseXBoICAqLworICAgICAgLyogICAgICBpbiBncmVhdCB3YXlzLCB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uICAgICAgICAgICAgKi8KKworICAgICAgaWYgKCAhQk9VTkRTKCBBLCBleGMtPnpwMC5uX3BvaW50cyApICkKKyAgICAgIHsKKyAgICAgICAgQyA9ICggKEZUX1VMb25nKUIgJiAweEYwICkgPj4gNDsKKworICAgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAweDVEOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3MToKKyAgICAgICAgICBDICs9IDE2OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3MjoKKyAgICAgICAgICBDICs9IDMyOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQyArPSBleGMtPkdTLmRlbHRhX2Jhc2U7CisKKyAgICAgICAgaWYgKCBQID09IEMgKQorICAgICAgICB7CisgICAgICAgICAgQiA9ICggKEZUX1VMb25nKUIgJiAweEYgKSAtIDg7CisgICAgICAgICAgaWYgKCBCID49IDAgKQorICAgICAgICAgICAgQisrOworICAgICAgICAgIEIgKj0gMUwgPDwgKCA2IC0gZXhjLT5HUy5kZWx0YV9zaGlmdCApOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAgQWxsb3cgZGVsdGEgbW92ZSBpZgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICAtIG5vdCB1c2luZyBpZ25vcmVfeF9tb2RlIHJlbmRlcmluZywKKyAgICAgICAgICAgICAqICAtIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgaXQsIG9yCisgICAgICAgICAgICAgKiAgLSBnbHlwaCBpcyBjb21wb3NpdGUgYW5kIGZyZWVkb20gdmVjdG9yIGlzIG5vdCBpbiBzdWJwaXhlbAorICAgICAgICAgICAgICogICAgZGlyZWN0aW9uLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxXQVlTX0RPX0RFTFRBUCApIHx8CisgICAgICAgICAgICAgICAgICggZXhjLT5pc19jb21wb3NpdGUgJiYgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApICAgICkKKyAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCBCICk7CisKKyAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgYXBwbHkgc3VicGl4ZWwgaGludGluZyBhbmQgY29tcGF0aWJpbGl0eSBtb2RlICovCisgICAgICAgICAgICAvKiBydWxlcywgYWx3YXlzIHNraXBwaW5nIGRlbHRhcyBpbiBzdWJwaXhlbCBkaXJlY3Rpb24uICAgICAqLworICAgICAgICAgICAgZWxzZSBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgeSB2YWx1ZSBvZiB0aGUgcG9pbnQgbm93OyBjb21wYXJlIGFmdGVyIG1vdmUgKi8KKyAgICAgICAgICAgICAgQjEgPSAoRlRfVVNob3J0KWV4Yy0+enAwLmN1cltBXS55OworCisgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIHN1YnBpeGVsIGhpbnRpbmc6IEFsbG93IHkgbW92ZSBmb3IgeS10b3VjaGVkICovCisgICAgICAgICAgICAgIC8qIHBvaW50cy4gIFRoaXMgbWVzc2VzIHVwIERlamFWdSAuLi4gICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGlmICggIWV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICggZXhjLT56cDAudGFnc1tBXSAmIEZUX0NVUlZFX1RBR19UT1VDSF9ZICkgKQorICAgICAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgQiApOworCisgICAgICAgICAgICAgIC8qIGNvbXBhdGliaWxpdHkgbW9kZSAqLworICAgICAgICAgICAgICBlbHNlIGlmICggZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0FMV0FZU19TS0lQX0RFTFRBUCApICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCisgICAgICAgICAgICAgICAgICBCID0gRlRfUElYX1JPVU5EKCBCMSArIEIgKSAtIEIxOworCisgICAgICAgICAgICAgICAgLyogQWxsb3cgZGVsdGEgbW92ZSBpZiB1c2luZyBzcGhfY29tcGF0aWJpbGl0eV9tb2RlLCAgICovCisgICAgICAgICAgICAgICAgLyogSVVQIGhhcyBub3QgYmVlbiBjYWxsZWQsIGFuZCBwb2ludCBpcyB0b3VjaGVkIG9uIFkuICovCisgICAgICAgICAgICAgICAgaWYgKCAhZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAoIGV4Yy0+enAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICkKKyAgICAgICAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgQiApOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgQjIgPSAoRlRfVVNob3J0KWV4Yy0+enAwLmN1cltBXS55OworCisgICAgICAgICAgICAgIC8qIFJldmVyc2UgdGhpcyBtb3ZlIGlmIGl0IHJlc3VsdHMgaW4gYSBkaXNhbGxvd2VkIG1vdmUgKi8KKyAgICAgICAgICAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICggKCBleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCBCMSAmIDYzICkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8CisgICAgICAgICAgICAgICAgICAgICAoICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgICAgICAgICAgICAgICAgICAgJgorICAgICAgICAgICAgICAgICAgICAgICAgIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVNfREVMVEFQICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCBCMSAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICApICkgKQorICAgICAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgLUIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIEEsIEIgKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgIH0KKworICBGYWlsOgorICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJnczsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBERUxUQUNuW106ICAgIERFTFRBIGV4Y2VwdGlvbnMgQzEsIEMyLCBDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDczLDB4NzQsMHg3NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyICgyICogdWludDMyKS4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0RFTFRBQyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfVUxvbmcgIG51bXAsIGs7CisgICAgRlRfVUxvbmcgIEEsIEMsIFA7CisgICAgRlRfTG9uZyAgIEI7CisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgLyogRGVsdGEgaGludGluZyBpcyBjb3ZlcmVkIGJ5IFVTIFBhdGVudCA1MTU5NjY4LiAqLworICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIG4gPSBhcmdzWzBdICogMjsKKworCisgICAgICBpZiAoIGV4Yy0+YXJncyA8IG4gKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOworICAgICAgICBuID0gZXhjLT5hcmdzOworICAgICAgfQorCisgICAgICBleGMtPmFyZ3MgLT0gbjsKKyAgICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJnczsKKyAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIFAgICAgPSAoRlRfVUxvbmcpZXhjLT5mdW5jX2N1cl9wcGVtKCBleGMgKTsKKyAgICBudW1wID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKyAgICBmb3IgKCBrID0gMTsgayA8PSBudW1wOyBrKysgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5hcmdzIDwgMiApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7CisgICAgICAgIGV4Yy0+YXJncyA9IDA7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgZXhjLT5hcmdzIC09IDI7CisKKyAgICAgIEEgPSAoRlRfVUxvbmcpZXhjLT5zdGFja1tleGMtPmFyZ3MgKyAxXTsKKyAgICAgIEIgPSBleGMtPnN0YWNrW2V4Yy0+YXJnc107CisKKyAgICAgIGlmICggQk9VTkRTTCggQSwgZXhjLT5jdnRTaXplICkgKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIHsKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEMgPSAoIChGVF9VTG9uZylCICYgMHhGMCApID4+IDQ7CisKKyAgICAgICAgc3dpdGNoICggZXhjLT5vcGNvZGUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMHg3MzoKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NzQ6CisgICAgICAgICAgQyArPSAxNjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NzU6CisgICAgICAgICAgQyArPSAzMjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEMgKz0gZXhjLT5HUy5kZWx0YV9iYXNlOworCisgICAgICAgIGlmICggUCA9PSBDICkKKyAgICAgICAgeworICAgICAgICAgIEIgPSAoIChGVF9VTG9uZylCICYgMHhGICkgLSA4OworICAgICAgICAgIGlmICggQiA+PSAwICkKKyAgICAgICAgICAgIEIrKzsKKyAgICAgICAgICBCICo9IDFMIDw8ICggNiAtIGV4Yy0+R1MuZGVsdGFfc2hpZnQgKTsKKworICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlX2N2dCggZXhjLCBBLCBCICk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgRmFpbDoKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTUlTQy4gSU5TVFJVQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR0VUSU5GT1tdOiAgICBHRVQgSU5GT3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFhYWDogVU5ET0NVTUVOVEVEOiBTZWxlY3RvciBiaXRzIGhpZ2hlciB0aGFuIDkgYXJlIGN1cnJlbnRseSAoTWF5ICAgICAqLworICAvKiAgICAgIDIwMTUpIG5vdCBkb2N1bWVudGVkIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2VsZWN0b3IgYml0IDExIGlzIGluY29ycmVjdGx5IGRlc2NyaWJlZCBhcyBiaXQgOCwgd2hpbGUgdGhlICAgICAqLworICAvKiAgICAgIHJlYWwgbWVhbmluZyBvZiBiaXQgOCAodmVydGljYWwgTENEIHN1YnBpeGVscykgc3RheXMgICAgICAgICAgICAgKi8KKyAgLyogICAgICB1bmRvY3VtZW50ZWQuICBUaGUgc2FtZSBtaXN0YWtlIGNhbiBiZSBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzICovCisgIC8qICAgICAgd2hpdGVwYXBlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0dFVElORk8oIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9Mb25nICBLOworCisKKyAgICBLID0gMDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBSQVNURVJJWkVSIFZFUlNJT04gICAgICAgICAgICovCisgICAgLyogU2VsZWN0b3IgQml0OiAgMCAgICAgICAgICAgICAqLworICAgIC8qIFJldHVybiBCaXQocyk6IDAtNyAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgJiYKKyAgICAgICAgICggYXJnc1swXSAmIDEgKSAhPSAwICAmJgorICAgICAgICAgZXhjLT5zdWJwaXhlbF9oaW50aW5nICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICB7CisgICAgICAgIC8qIGlmIGluIENsZWFyVHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLCAgICAgICAgKi8KKyAgICAgICAgLyogd2Ugc29tZXRpbWVzIGNoYW5nZSB0aGUgVHJ1ZVR5cGUgdmVyc2lvbiBkeW5hbWljYWxseSAqLworICAgICAgICBLID0gZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb247CisgICAgICAgIEZUX1RSQUNFNigoICJTZXR0aW5nIHJhc3Rlcml6ZXIgdmVyc2lvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb24gKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIEsgPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisgICAgICBpZiAoICggYXJnc1swXSAmIDEgKSAhPSAwICkKKyAgICAgICAgSyA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogR0xZUEggUk9UQVRFRCAgICAgICAgICAgICAgICAqLworICAgIC8qIFNlbGVjdG9yIEJpdDogIDEgICAgICAgICAgICAgKi8KKyAgICAvKiBSZXR1cm4gQml0KHMpOiA4ICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggKCBhcmdzWzBdICYgMiApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnJvdGF0ZWQgKQorICAgICAgSyB8PSAweDgwOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIEdMWVBIIFNUUkVUQ0hFRCAgICAgICAgICAgICAgKi8KKyAgICAvKiBTZWxlY3RvciBCaXQ6ICAyICAgICAgICAgICAgICovCisgICAgLyogUmV0dXJuIEJpdChzKTogOSAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICggYXJnc1swXSAmIDQgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5zdHJldGNoZWQgKQorICAgICAgSyB8PSAxIDw8IDg7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogSElOVElORyBGT1IgR1JBWVNDQUxFICAgICAgICAqLworICAgIC8qIFNlbGVjdG9yIEJpdDogIDUgICAgICAgICAgICAgKi8KKyAgICAvKiBSZXR1cm4gQml0KHMpOiAxMiAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggKCBhcmdzWzBdICYgMzIgKSAhPSAwICYmIGV4Yy0+Z3JheXNjYWxlICkKKyAgICAgIEsgfD0gMSA8PCAxMjsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPnJhc3Rlcml6ZXJfdmVyc2lvbiA+PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICkKKyAgICB7CisKKyAgICAgIGlmICggZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPj0gMzcgKQorICAgICAgeworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qIEhJTlRJTkcgRk9SIFNVQlBJWEVMICAgICAgICAgKi8KKyAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgNiAgICAgICAgICAgICAqLworICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxMyAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA2NCApICE9IDAgJiYgZXhjLT5zdWJwaXhlbF9oaW50aW5nICkKKyAgICAgICAgICBLIHw9IDEgPDwgMTM7CisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAvKiBDT01QQVRJQkxFIFdJRFRIUyBFTkFCTEVEICAgICovCisgICAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDcgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTQgICAgICAgICAgICAqLworICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIEZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KKyAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAxMjggKSAhPSAwICYmIGV4Yy0+Y29tcGF0aWJsZV93aWR0aHMgKQorICAgICAgICAgIEsgfD0gMSA8PCAxNDsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qIFZFUlRJQ0FMIExDRCBTVUJQSVhFTFM/ICAgICAgKi8KKyAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgOCAgICAgICAgICAgICAqLworICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxNSAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICBpZiAoICggYXJnc1swXSAmIDI1NiApICE9IDAgJiYgZXhjLT52ZXJ0aWNhbF9sY2QgKQorICAgICAgICAgIEsgfD0gMSA8PCAxNTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgIC8qIEhJTlRJTkcgRk9SIEJHUj8gICAgICAgICAgICAgKi8KKyAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgOSAgICAgICAgICAgICAqLworICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxNiAgICAgICAgICAgICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICBpZiAoICggYXJnc1swXSAmIDUxMiApICE9IDAgJiYgZXhjLT5iZ3IgKQorICAgICAgICAgIEsgfD0gMSA8PCAxNjsKKworICAgICAgICBpZiAoIGV4Yy0+cmFzdGVyaXplcl92ZXJzaW9uID49IDM4ICkKKyAgICAgICAgeworICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAvKiBTVUJQSVhFTCBQT1NJVElPTkVEPyAgICAgICAgICovCisgICAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE3ICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICAgIGlmICggKCBhcmdzWzBdICYgMTAyNCApICE9IDAgJiYgZXhjLT5zdWJwaXhlbF9wb3NpdGlvbmVkICkKKyAgICAgICAgICAgIEsgfD0gMSA8PCAxNzsKKworICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAvKiBTWU1NRVRSSUNBTCBTTU9PVEhJTkcgICAgICAgICovCisgICAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTEgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE4ICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICAgIGlmICggKCBhcmdzWzBdICYgMjA0OCApICE9IDAgJiYgZXhjLT5zeW1tZXRyaWNhbF9zbW9vdGhpbmcgKQorICAgICAgICAgICAgSyB8PSAxIDw8IDE4OworCisgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgIC8qIEdSQVkgQ0xFQVJUWVBFICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBTZWxlY3RvciBCaXQ6ICAxMiAgICAgICAgICAgICovCisgICAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTkgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCisgICAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA0MDk2ICkgIT0gMCAmJiBleGMtPmdyYXlfY2xlYXJ0eXBlICkKKyAgICAgICAgICAgIEsgfD0gMSA8PCAxOTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgYXJnc1swXSA9IEs7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIEluc19VTktOT1dOKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIFRUX0RlZlJlY29yZCogIGRlZiAgID0gZXhjLT5JRGVmczsKKyAgICBUVF9EZWZSZWNvcmQqICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtSURlZnM7CisKKworICAgIGZvciAoIDsgZGVmIDwgbGltaXQ7IGRlZisrICkKKyAgICB7CisgICAgICBpZiAoIChGVF9CeXRlKWRlZi0+b3BjID09IGV4Yy0+b3Bjb2RlICYmIGRlZi0+YWN0aXZlICkKKyAgICAgIHsKKyAgICAgICAgVFRfQ2FsbFJlYyogIGNhbGw7CisKKworICAgICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKKyAgICAgICAgeworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYWxsID0gZXhjLT5jYWxsU3RhY2sgKyBleGMtPmNhbGxUb3ArKzsKKworICAgICAgICBjYWxsLT5DYWxsZXJfUmFuZ2UgPSBleGMtPmN1clJhbmdlOworICAgICAgICBjYWxsLT5DYWxsZXJfSVAgICAgPSBleGMtPklQICsgMTsKKyAgICAgICAgY2FsbC0+Q3VyX0NvdW50ICAgID0gMTsKKyAgICAgICAgY2FsbC0+RGVmICAgICAgICAgID0gZGVmOworCisgICAgICAgIEluc19Hb3RvX0NvZGVSYW5nZSggZXhjLCBkZWYtPnJhbmdlLCBkZWYtPnN0YXJ0ICk7CisKKyAgICAgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09wY29kZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJVTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgYSBydW4gb2Ygb3Bjb2Rlcy4gIEl0IHdpbGwgZXhpdCBpbiB0aGUgICAgICAgICovCisgIC8qICBmb2xsb3dpbmcgY2FzZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIC0gRXJyb3JzIChpbiB3aGljaCBjYXNlIGl0IHJldHVybnMgRkFMU0UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBSZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBtYWluIGNvZGUgcmFuZ2UgKHJldHVybnMgVFJVRSkuICAgICAgICAgICAgKi8KKyAgLyogICAgUmVhY2hpbmcgdGhlIGVuZCBvZiBhIGNvZGUgcmFuZ2Ugd2l0aGluIGEgZnVuY3Rpb24gY2FsbCBpcyBhbiAgICAgICovCisgIC8qICAgIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIC0gQWZ0ZXIgZXhlY3V0aW5nIG9uZSBzaW5nbGUgb3Bjb2RlLCBpZiB0aGUgZmxhZyBgSW5zdHJ1Y3Rpb25fVHJhcCcgICovCisgIC8qICAgIGlzIHNldCB0byBUUlVFIChyZXR1cm5zIFRSVUUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIE9uIGV4aXQgd2l0aCBUUlVFLCB0ZXN0IElQIDwgQ29kZVNpemUgdG8ga25vdyB3aGV0aGVyIGl0IGNvbWVzIGZyb20gICovCisgIC8qICBhbiBpbnN0cnVjdGlvbiB0cmFwIG9yIGEgbm9ybWFsIHRlcm1pbmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBOb3RlOiBUaGUgZG9jdW1lbnRlZCBERUJVRyBvcGNvZGUgcG9wcyBhIHZhbHVlIGZyb20gdGhlIHN0YWNrLiAgVGhpcyAqLworICAvKiAgICAgICAgYmVoYXZpb3VyIGlzIHVuc3VwcG9ydGVkOyBoZXJlIGEgREVCVUcgb3Bjb2RlIGlzIGFsd2F5cyBhbiAgICAgKi8KKyAgLyogICAgICAgIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVEhJUyBJUyBUSEUgSU5URVJQUkVURVInUyBNQUlOIExPT1AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gdHRpbnRlcnAuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgVFRfUnVuSW5zKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIEZUX0xvbmcgICAgaW5zX2NvdW50ZXIgPSAwOyAgLyogZXhlY3V0ZWQgaW5zdHJ1Y3Rpb25zIGNvdW50ZXIgKi8KKyAgICBGVF9VU2hvcnQgIGk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBGVF9CeXRlICAgIG9wY29kZV9wYXR0ZXJuWzFdWzJdID0geworICAgICAgICAgICAgICAgICAgLyogIzggVHlwZU1hbiBUYWxrIEFsaWduICovCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIDB4MDYsIC8qIFNQVlRMICAgKi8KKyAgICAgICAgICAgICAgICAgICAgMHg3RCwgLyogUkRURyAgICAqLworICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9OworICAgIEZUX1VTaG9ydCAgb3Bjb2RlX3BhdHRlcm5zICAgPSAxOworICAgIEZUX1VTaG9ydCAgb3Bjb2RlX3BvaW50ZXJbMV0gPSB7IDAgfTsKKyAgICBGVF9VU2hvcnQgIG9wY29kZV9zaXplWzFdICAgID0geyAxIH07CisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGV4Yy0+aXVwX2NhbGxlZCA9IEZBTFNFOworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworCisgICAgLyogc2V0IFBQRU0gYW5kIENWVCBmdW5jdGlvbnMgKi8KKyAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSAwOworICAgIGlmICggZXhjLT5tZXRyaWNzLnhfcHBlbSAhPSBleGMtPm1ldHJpY3MueV9wcGVtICkKKyAgICB7CisgICAgICAvKiBub24tc3F1YXJlIHBpeGVscywgdXNlIHRoZSBzdHJldGNoZWQgcm91dGluZXMgKi8KKyAgICAgIGV4Yy0+ZnVuY19jdXJfcHBlbSAgPSBDdXJyZW50X1BwZW1fU3RyZXRjaGVkOworICAgICAgZXhjLT5mdW5jX3JlYWRfY3Z0ICA9IFJlYWRfQ1ZUX1N0cmV0Y2hlZDsKKyAgICAgIGV4Yy0+ZnVuY193cml0ZV9jdnQgPSBXcml0ZV9DVlRfU3RyZXRjaGVkOworICAgICAgZXhjLT5mdW5jX21vdmVfY3Z0ICA9IE1vdmVfQ1ZUX1N0cmV0Y2hlZDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIHNxdWFyZSBwaXhlbHMsIHVzZSBub3JtYWwgcm91dGluZXMgKi8KKyAgICAgIGV4Yy0+ZnVuY19jdXJfcHBlbSAgPSBDdXJyZW50X1BwZW07CisgICAgICBleGMtPmZ1bmNfcmVhZF9jdnQgID0gUmVhZF9DVlQ7CisgICAgICBleGMtPmZ1bmNfd3JpdGVfY3Z0ID0gV3JpdGVfQ1ZUOworICAgICAgZXhjLT5mdW5jX21vdmVfY3Z0ICA9IE1vdmVfQ1ZUOworICAgIH0KKworICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOworICAgIENvbXB1dGVfUm91bmQoIGV4YywgKEZUX0J5dGUpZXhjLT5HUy5yb3VuZF9zdGF0ZSApOworCisgICAgZG8KKyAgICB7CisgICAgICBleGMtPm9wY29kZSA9IGV4Yy0+Y29kZVtleGMtPklQXTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICB7CisgICAgICAgIEZUX0xvbmcgIGNudCA9IEZUX01JTiggOCwgZXhjLT50b3AgKTsKKyAgICAgICAgRlRfTG9uZyAgbjsKKworCisgICAgICAgIC8qIGlmIHRyYWNpbmcgbGV2ZWwgaXMgNywgc2hvdyBjdXJyZW50IGNvZGUgcG9zaXRpb24gKi8KKyAgICAgICAgLyogYW5kIHRoZSBmaXJzdCBmZXcgc3RhY2sgZWxlbWVudHMgYWxzbyAgICAgICAgICAgICAqLworICAgICAgICBGVF9UUkFDRTYoKCAiICAiICkpOworICAgICAgICBGVF9UUkFDRTcoKCAiJTA2ZCAiLCBleGMtPklQICkpOworICAgICAgICBGVF9UUkFDRTYoKCBvcGNvZGVfbmFtZVtleGMtPm9wY29kZV0gKyAyICkpOworICAgICAgICBGVF9UUkFDRTcoKCAiJSpzIiwgKm9wY29kZV9uYW1lW2V4Yy0+b3Bjb2RlXSA9PSAnQScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxMiAtICggKm9wY29kZV9uYW1lW2V4Yy0+b3Bjb2RlXSAtICcwJyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMiICkpOworICAgICAgICBmb3IgKCBuID0gMDsgbiA8IGNudDsgbisrICkKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiICVkIiwgZXhjLT5zdGFja1tleGMtPnRvcCAtIG5dICkpOworICAgICAgICBGVF9UUkFDRTYoKCAiXG4iICkpOworICAgICAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgIGlmICggKCBleGMtPmxlbmd0aCA9IG9wY29kZV9sZW5ndGhbZXhjLT5vcGNvZGVdICkgPCAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPklQICsgMSA+PSBleGMtPmNvZGVTaXplICkKKyAgICAgICAgICBnb3RvIExFcnJvckNvZGVPdmVyZmxvd187CisKKyAgICAgICAgZXhjLT5sZW5ndGggPSAyIC0gZXhjLT5sZW5ndGggKiBleGMtPmNvZGVbZXhjLT5JUCArIDFdOworICAgICAgfQorCisgICAgICBpZiAoIGV4Yy0+SVAgKyBleGMtPmxlbmd0aCA+IGV4Yy0+Y29kZVNpemUgKQorICAgICAgICBnb3RvIExFcnJvckNvZGVPdmVyZmxvd187CisKKyAgICAgIC8qIEZpcnN0LCBsZXQncyBjaGVjayBmb3IgZW1wdHkgc3RhY2sgYW5kIG92ZXJmbG93ICovCisgICAgICBleGMtPmFyZ3MgPSBleGMtPnRvcCAtICggUG9wX1B1c2hfQ291bnRbZXhjLT5vcGNvZGVdID4+IDQgKTsKKworICAgICAgLyogYGFyZ3MnIGlzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIG9uY2UgYXJndW1lbnRzIGhhdmUgYmVlbiBwb3BwZWQuICovCisgICAgICAvKiBPbmUgY2FuIGFsc28gaW50ZXJwcmV0IGl0IGFzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBhcmd1bWVudC4gICAgKi8KKyAgICAgIGlmICggZXhjLT5hcmdzIDwgMCApCisgICAgICB7CisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgeworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKKyAgICAgICAgICBnb3RvIExFcnJvckxhYmVsXzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHB1c2ggemVyb2VzIG9udG8gdGhlIHN0YWNrICovCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgUG9wX1B1c2hfQ291bnRbZXhjLT5vcGNvZGVdID4+IDQ7IGkrKyApCisgICAgICAgICAgZXhjLT5zdGFja1tpXSA9IDA7CisgICAgICAgIGV4Yy0+YXJncyA9IDA7CisgICAgICB9CisKKyAgICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJncyArICggUG9wX1B1c2hfQ291bnRbZXhjLT5vcGNvZGVdICYgMTUgKTsKKworICAgICAgLyogYG5ld190b3AnIGlzIHRoZSBuZXcgdG9wIG9mIHRoZSBzdGFjaywgYWZ0ZXIgdGhlIGluc3RydWN0aW9uJ3MgKi8KKyAgICAgIC8qIGV4ZWN1dGlvbi4gIGB0b3AnIHdpbGwgYmUgc2V0IHRvIGBuZXdfdG9wJyBhZnRlciB0aGUgYHN3aXRjaCcgICovCisgICAgICAvKiBzdGF0ZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBleGMtPm5ld190b3AgPiBleGMtPnN0YWNrU2l6ZSApCisgICAgICB7CisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgICAgZ290byBMRXJyb3JMYWJlbF87CisgICAgICB9CisKKyAgICAgIGV4Yy0+c3RlcF9pbnMgPSBUUlVFOworICAgICAgZXhjLT5lcnJvciAgICA9IEZUX0Vycl9PazsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorICAgICAgeworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG9wY29kZV9wYXR0ZXJuczsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggb3Bjb2RlX3BvaW50ZXJbaV0gPCBvcGNvZGVfc2l6ZVtpXSAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBleGMtPm9wY29kZSA9PSBvcGNvZGVfcGF0dGVybltpXVtvcGNvZGVfcG9pbnRlcltpXV0gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG9wY29kZV9wb2ludGVyW2ldICs9IDE7CisKKyAgICAgICAgICAgIGlmICggb3Bjb2RlX3BvaW50ZXJbaV0gPT0gb3Bjb2RlX3NpemVbaV0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9UUkFDRTYoKCAic3BoOiBvcGNvZGUgcHRybjogJWQsICVzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnJvb3QuZmFtaWx5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+cm9vdC5zdHlsZV9uYW1lICkpOworCisgICAgICAgICAgICAgIHN3aXRjaCAoIGkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBvcGNvZGVfcG9pbnRlcltpXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wY29kZV9wb2ludGVyW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgfQorCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisKKyAgICAgIHsKKyAgICAgICAgRlRfTG9uZyogIGFyZ3MgICA9IGV4Yy0+c3RhY2sgKyBleGMtPmFyZ3M7CisgICAgICAgIEZUX0J5dGUgICBvcGNvZGUgPSBleGMtPm9wY29kZTsKKworCisgICAgICAgIHN3aXRjaCAoIG9wY29kZSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAweDAwOiAgLyogU1ZUQ0EgeSAgKi8KKyAgICAgICAgY2FzZSAweDAxOiAgLyogU1ZUQ0EgeCAgKi8KKyAgICAgICAgY2FzZSAweDAyOiAgLyogU1B2VENBIHkgKi8KKyAgICAgICAgY2FzZSAweDAzOiAgLyogU1B2VENBIHggKi8KKyAgICAgICAgY2FzZSAweDA0OiAgLyogU0Z2VENBIHkgKi8KKyAgICAgICAgY2FzZSAweDA1OiAgLyogU0Z2VENBIHggKi8KKyAgICAgICAgICBJbnNfU3h5VENBKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MDY6ICAvKiBTUHZUTCAvLyAqLworICAgICAgICBjYXNlIDB4MDc6ICAvKiBTUHZUTCArICAqLworICAgICAgICAgIEluc19TUFZUTCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDA4OiAgLyogU0Z2VEwgLy8gKi8KKyAgICAgICAgY2FzZSAweDA5OiAgLyogU0Z2VEwgKyAgKi8KKyAgICAgICAgICBJbnNfU0ZWVEwoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgwQTogIC8qIFNQdkZTICovCisgICAgICAgICAgSW5zX1NQVkZTKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MEI6ICAvKiBTRnZGUyAqLworICAgICAgICAgIEluc19TRlZGUyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDBDOiAgLyogR1B2ICovCisgICAgICAgICAgSW5zX0dQViggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDBEOiAgLyogR0Z2ICovCisgICAgICAgICAgSW5zX0dGViggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDBFOiAgLyogU0Z2VFB2ICovCisgICAgICAgICAgSW5zX1NGVlRQViggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDBGOiAgLyogSVNFQ1QgICovCisgICAgICAgICAgSW5zX0lTRUNUKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MTA6ICAvKiBTUlAwICovCisgICAgICAgICAgSW5zX1NSUDAoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgxMTogIC8qIFNSUDEgKi8KKyAgICAgICAgICBJbnNfU1JQMSggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDEyOiAgLyogU1JQMiAqLworICAgICAgICAgIEluc19TUlAyKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MTM6ICAvKiBTWlAwICovCisgICAgICAgICAgSW5zX1NaUDAoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgxNDogIC8qIFNaUDEgKi8KKyAgICAgICAgICBJbnNfU1pQMSggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDE1OiAgLyogU1pQMiAqLworICAgICAgICAgIEluc19TWlAyKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MTY6ICAvKiBTWlBTICovCisgICAgICAgICAgSW5zX1NaUFMoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgxNzogIC8qIFNMT09QICovCisgICAgICAgICAgSW5zX1NMT09QKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MTg6ICAvKiBSVEcgKi8KKyAgICAgICAgICBJbnNfUlRHKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MTk6ICAvKiBSVEhHICovCisgICAgICAgICAgSW5zX1JUSEcoIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgxQTogIC8qIFNNRCAqLworICAgICAgICAgIEluc19TTUQoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgxQjogIC8qIEVMU0UgKi8KKyAgICAgICAgICBJbnNfRUxTRSggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDFDOiAgLyogSk1QUiAqLworICAgICAgICAgIEluc19KTVBSKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MUQ6ICAvKiBTQ1ZUQ0kgKi8KKyAgICAgICAgICBJbnNfU0NWVENJKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MUU6ICAvKiBTU1dDSSAqLworICAgICAgICAgIEluc19TU1dDSSggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDFGOiAgLyogU1NXICovCisgICAgICAgICAgSW5zX1NTVyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDIwOiAgLyogRFVQICovCisgICAgICAgICAgSW5zX0RVUCggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyMTogIC8qIFBPUCAqLworICAgICAgICAgIEluc19QT1AoKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MjI6ICAvKiBDTEVBUiAqLworICAgICAgICAgIEluc19DTEVBUiggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDIzOiAgLyogU1dBUCAqLworICAgICAgICAgIEluc19TV0FQKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDI0OiAgLyogREVQVEggKi8KKyAgICAgICAgICBJbnNfREVQVEgoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyNTogIC8qIENJTkRFWCAqLworICAgICAgICAgIEluc19DSU5ERVgoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyNjogIC8qIE1JTkRFWCAqLworICAgICAgICAgIEluc19NSU5ERVgoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyNzogIC8qIEFMSUdOUFRTICovCisgICAgICAgICAgSW5zX0FMSUdOUFRTKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4Mjg6ICAvKiA/Pz8/ICovCisgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyOTogIC8qIFVUUCAqLworICAgICAgICAgIEluc19VVFAoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyQTogIC8qIExPT1BDQUxMICovCisgICAgICAgICAgSW5zX0xPT1BDQUxMKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MkI6ICAvKiBDQUxMICovCisgICAgICAgICAgSW5zX0NBTEwoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgyQzogIC8qIEZERUYgKi8KKyAgICAgICAgICBJbnNfRkRFRiggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDJEOiAgLyogRU5ERiAqLworICAgICAgICAgIEluc19FTkRGKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MkU6ICAvKiBNREFQICovCisgICAgICAgIGNhc2UgMHgyRjogIC8qIE1EQVAgKi8KKyAgICAgICAgICBJbnNfTURBUCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDMwOiAgLyogSVVQICovCisgICAgICAgIGNhc2UgMHgzMTogIC8qIElVUCAqLworICAgICAgICAgIEluc19JVVAoIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgzMjogIC8qIFNIUCAqLworICAgICAgICBjYXNlIDB4MzM6ICAvKiBTSFAgKi8KKyAgICAgICAgICBJbnNfU0hQKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4MzQ6ICAvKiBTSEMgKi8KKyAgICAgICAgY2FzZSAweDM1OiAgLyogU0hDICovCisgICAgICAgICAgSW5zX1NIQyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDM2OiAgLyogU0haICovCisgICAgICAgIGNhc2UgMHgzNzogIC8qIFNIWiAqLworICAgICAgICAgIEluc19TSFooIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgzODogIC8qIFNIUElYICovCisgICAgICAgICAgSW5zX1NIUElYKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4Mzk6ICAvKiBJUCAgICAqLworICAgICAgICAgIEluc19JUCggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDNBOiAgLyogTVNJUlAgKi8KKyAgICAgICAgY2FzZSAweDNCOiAgLyogTVNJUlAgKi8KKyAgICAgICAgICBJbnNfTVNJUlAoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHgzQzogIC8qIEFsaWduUlAgKi8KKyAgICAgICAgICBJbnNfQUxJR05SUCggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDNEOiAgLyogUlRERyAqLworICAgICAgICAgIEluc19SVERHKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4M0U6ICAvKiBNSUFQICovCisgICAgICAgIGNhc2UgMHgzRjogIC8qIE1JQVAgKi8KKyAgICAgICAgICBJbnNfTUlBUCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDQwOiAgLyogTlBVU0hCICovCisgICAgICAgICAgSW5zX05QVVNIQiggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDQxOiAgLyogTlBVU0hXICovCisgICAgICAgICAgSW5zX05QVVNIVyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDQyOiAgLyogV1MgKi8KKyAgICAgICAgICBJbnNfV1MoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg0MzogIC8qIFJTICovCisgICAgICAgICAgSW5zX1JTKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NDQ6ICAvKiBXQ1ZUUCAqLworICAgICAgICAgIEluc19XQ1ZUUCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDQ1OiAgLyogUkNWVCAqLworICAgICAgICAgIEluc19SQ1ZUKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NDY6ICAvKiBHQyAqLworICAgICAgICBjYXNlIDB4NDc6ICAvKiBHQyAqLworICAgICAgICAgIEluc19HQyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDQ4OiAgLyogU0NGUyAqLworICAgICAgICAgIEluc19TQ0ZTKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NDk6ICAvKiBNRCAqLworICAgICAgICBjYXNlIDB4NEE6ICAvKiBNRCAqLworICAgICAgICAgIEluc19NRCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDRCOiAgLyogTVBQRU0gKi8KKyAgICAgICAgICBJbnNfTVBQRU0oIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg0QzogIC8qIE1QUyAqLworICAgICAgICAgIEluc19NUFMoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg0RDogIC8qIEZMSVBPTiAqLworICAgICAgICAgIEluc19GTElQT04oIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg0RTogIC8qIEZMSVBPRkYgKi8KKyAgICAgICAgICBJbnNfRkxJUE9GRiggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDRGOiAgLyogREVCVUcgKi8KKyAgICAgICAgICBJbnNfREVCVUcoIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg1MDogIC8qIExUICovCisgICAgICAgICAgSW5zX0xUKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDUxOiAgLyogTFRFUSAqLworICAgICAgICAgIEluc19MVEVRKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDUyOiAgLyogR1QgKi8KKyAgICAgICAgICBJbnNfR1QoIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NTM6ICAvKiBHVEVRICovCisgICAgICAgICAgSW5zX0dURVEoIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NTQ6ICAvKiBFUSAqLworICAgICAgICAgIEluc19FUSggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg1NTogIC8qIE5FUSAqLworICAgICAgICAgIEluc19ORVEoIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NTY6ICAvKiBPREQgKi8KKyAgICAgICAgICBJbnNfT0REKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NTc6ICAvKiBFVkVOICovCisgICAgICAgICAgSW5zX0VWRU4oIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg1ODogIC8qIElGICovCisgICAgICAgICAgSW5zX0lGKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NTk6ICAvKiBFSUYgKi8KKyAgICAgICAgICBJbnNfRUlGKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDVBOiAgLyogQU5EICovCisgICAgICAgICAgSW5zX0FORCggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg1QjogIC8qIE9SICovCisgICAgICAgICAgSW5zX09SKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDVDOiAgLyogTk9UICovCisgICAgICAgICAgSW5zX05PVCggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg1RDogIC8qIERFTFRBUDEgKi8KKyAgICAgICAgICBJbnNfREVMVEFQKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NUU6ICAvKiBTREIgKi8KKyAgICAgICAgICBJbnNfU0RCKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NUY6ICAvKiBTRFMgKi8KKyAgICAgICAgICBJbnNfU0RTKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NjA6ICAvKiBBREQgKi8KKyAgICAgICAgICBJbnNfQUREKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDYxOiAgLyogU1VCICovCisgICAgICAgICAgSW5zX1NVQiggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg2MjogIC8qIERJViAqLworICAgICAgICAgIEluc19ESVYoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg2MzogIC8qIE1VTCAqLworICAgICAgICAgIEluc19NVUwoIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NjQ6ICAvKiBBQlMgKi8KKyAgICAgICAgICBJbnNfQUJTKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDY1OiAgLyogTkVHICovCisgICAgICAgICAgSW5zX05FRyggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg2NjogIC8qIEZMT09SICovCisgICAgICAgICAgSW5zX0ZMT09SKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDY3OiAgLyogQ0VJTElORyAqLworICAgICAgICAgIEluc19DRUlMSU5HKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDY4OiAgLyogUk9VTkQgKi8KKyAgICAgICAgY2FzZSAweDY5OiAgLyogUk9VTkQgKi8KKyAgICAgICAgY2FzZSAweDZBOiAgLyogUk9VTkQgKi8KKyAgICAgICAgY2FzZSAweDZCOiAgLyogUk9VTkQgKi8KKyAgICAgICAgICBJbnNfUk9VTkQoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg2QzogIC8qIE5ST1VORCAqLworICAgICAgICBjYXNlIDB4NkQ6ICAvKiBOUk9VTkQgKi8KKyAgICAgICAgY2FzZSAweDZFOiAgLyogTlJSVU5EICovCisgICAgICAgIGNhc2UgMHg2RjogIC8qIE5ST1VORCAqLworICAgICAgICAgIEluc19OUk9VTkQoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3MDogIC8qIFdDVlRGICovCisgICAgICAgICAgSW5zX1dDVlRGKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NzE6ICAvKiBERUxUQVAyICovCisgICAgICAgIGNhc2UgMHg3MjogIC8qIERFTFRBUDMgKi8KKyAgICAgICAgICBJbnNfREVMVEFQKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4NzM6ICAvKiBERUxUQUMwICovCisgICAgICAgIGNhc2UgMHg3NDogIC8qIERFTFRBQzEgKi8KKyAgICAgICAgY2FzZSAweDc1OiAgLyogREVMVEFDMiAqLworICAgICAgICAgIEluc19ERUxUQUMoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3NjogIC8qIFNST1VORCAqLworICAgICAgICAgIEluc19TUk9VTkQoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3NzogIC8qIFM0NVJvdW5kICovCisgICAgICAgICAgSW5zX1M0NVJPVU5EKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4Nzg6ICAvKiBKUk9UICovCisgICAgICAgICAgSW5zX0pST1QoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3OTogIC8qIEpST0YgKi8KKyAgICAgICAgICBJbnNfSlJPRiggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDdBOiAgLyogUk9GRiAqLworICAgICAgICAgIEluc19ST0ZGKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4N0I6ICAvKiA/Pz8/ICovCisgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3QzogIC8qIFJVVEcgKi8KKyAgICAgICAgICBJbnNfUlVURyggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDdEOiAgLyogUkRURyAqLworICAgICAgICAgIEluc19SRFRHKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4N0U6ICAvKiBTQU5HVyAqLworICAgICAgICAgIEluc19TQU5HVygpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg3RjogIC8qIEFBICovCisgICAgICAgICAgSW5zX0FBKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDgwOiAgLyogRkxJUFBUICovCisgICAgICAgICAgSW5zX0ZMSVBQVCggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDgxOiAgLyogRkxJUFJHT04gKi8KKyAgICAgICAgICBJbnNfRkxJUFJHT04oIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg4MjogIC8qIEZMSVBSR09GRiAqLworICAgICAgICAgIEluc19GTElQUkdPRkYoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg4MzogIC8qIFVOS05PV04gKi8KKyAgICAgICAgY2FzZSAweDg0OiAgLyogVU5LTk9XTiAqLworICAgICAgICAgIEluc19VTktOT1dOKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4ODU6ICAvKiBTQ0FOQ1RSTCAqLworICAgICAgICAgIEluc19TQ0FOQ1RSTCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDg2OiAgLyogU0RQdlRMICovCisgICAgICAgIGNhc2UgMHg4NzogIC8qIFNEUHZUTCAqLworICAgICAgICAgIEluc19TRFBWVEwoIGV4YywgYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg4ODogIC8qIEdFVElORk8gKi8KKyAgICAgICAgICBJbnNfR0VUSU5GTyggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDg5OiAgLyogSURFRiAqLworICAgICAgICAgIEluc19JREVGKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4OEE6ICAvKiBST0xMICovCisgICAgICAgICAgSW5zX1JPTEwoIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4OEI6ICAvKiBNQVggKi8KKyAgICAgICAgICBJbnNfTUFYKCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDhDOiAgLyogTUlOICovCisgICAgICAgICAgSW5zX01JTiggYXJncyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg4RDogIC8qIFNDQU5UWVBFICovCisgICAgICAgICAgSW5zX1NDQU5UWVBFKCBleGMsIGFyZ3MgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4OEU6ICAvKiBJTlNUQ1RSTCAqLworICAgICAgICAgIEluc19JTlNUQ1RSTCggZXhjLCBhcmdzICk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDhGOgorICAgICAgICAgIEluc19VTktOT1dOKCBleGMgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmICggb3Bjb2RlID49IDB4RTAgKQorICAgICAgICAgICAgSW5zX01JUlAoIGV4YywgYXJncyApOworICAgICAgICAgIGVsc2UgaWYgKCBvcGNvZGUgPj0gMHhDMCApCisgICAgICAgICAgICBJbnNfTURSUCggZXhjLCBhcmdzICk7CisgICAgICAgICAgZWxzZSBpZiAoIG9wY29kZSA+PSAweEI4ICkKKyAgICAgICAgICAgIEluc19QVVNIVyggZXhjLCBhcmdzICk7CisgICAgICAgICAgZWxzZSBpZiAoIG9wY29kZSA+PSAweEIwICkKKyAgICAgICAgICAgIEluc19QVVNIQiggZXhjLCBhcmdzICk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICggZXhjLT5lcnJvciApCisgICAgICB7CisgICAgICAgIHN3aXRjaCAoIGV4Yy0+ZXJyb3IgKQorICAgICAgICB7CisgICAgICAgICAgLyogbG9va2luZyBmb3IgcmVkZWZpbmVkIGluc3RydWN0aW9ucyAqLworICAgICAgICBjYXNlIEZUX0VSUiggSW52YWxpZF9PcGNvZGUgKToKKyAgICAgICAgICB7CisgICAgICAgICAgICBUVF9EZWZSZWNvcmQqICBkZWYgICA9IGV4Yy0+SURlZnM7CisgICAgICAgICAgICBUVF9EZWZSZWNvcmQqICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtSURlZnM7CisKKworICAgICAgICAgICAgZm9yICggOyBkZWYgPCBsaW1pdDsgZGVmKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIGRlZi0+YWN0aXZlICYmIGV4Yy0+b3Bjb2RlID09IChGVF9CeXRlKWRlZi0+b3BjICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRUX0NhbGxSZWMqICBjYWxscmVjOworCisKKyAgICAgICAgICAgICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgICAgICAgICBnb3RvIExFcnJvckxhYmVsXzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYWxscmVjID0gJmV4Yy0+Y2FsbFN0YWNrW2V4Yy0+Y2FsbFRvcF07CisKKyAgICAgICAgICAgICAgICBjYWxscmVjLT5DYWxsZXJfUmFuZ2UgPSBleGMtPmN1clJhbmdlOworICAgICAgICAgICAgICAgIGNhbGxyZWMtPkNhbGxlcl9JUCAgICA9IGV4Yy0+SVAgKyAxOworICAgICAgICAgICAgICAgIGNhbGxyZWMtPkN1cl9Db3VudCAgICA9IDE7CisgICAgICAgICAgICAgICAgY2FsbHJlYy0+RGVmICAgICAgICAgID0gZGVmOworCisgICAgICAgICAgICAgICAgaWYgKCBJbnNfR290b19Db2RlUmFuZ2UoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5yYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5zdGFydCApID09IEZBSUxVUkUgKQorICAgICAgICAgICAgICAgICAgZ290byBMRXJyb3JMYWJlbF87CisKKyAgICAgICAgICAgICAgICBnb3RvIExTdWl0ZUxhYmVsXzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PcGNvZGUgKTsKKyAgICAgICAgICBnb3RvIExFcnJvckxhYmVsXzsKKworI2lmIDAKKyAgICAgICAgICBicmVhazsgICAvKiBVbnJlYWNoYWJsZSBjb2RlIHdhcm5pbmcgc3VwcHJlc3Npb24uICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgLyogTGVhdmUgdG8gcmVtaW5kIGluIGNhc2UgYSBsYXRlciBjaGFuZ2UgdGhlIGVkaXRvciAqLworICAgICAgICAgICAgICAgICAgIC8qIHRvIGNvbnNpZGVyIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgZ290byBMRXJyb3JMYWJlbF87CisKKyNpZiAwCisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZXhjLT50b3AgPSBleGMtPm5ld190b3A7CisKKyAgICAgIGlmICggZXhjLT5zdGVwX2lucyApCisgICAgICAgIGV4Yy0+SVAgKz0gZXhjLT5sZW5ndGg7CisKKyAgICAgIC8qIGluY3JlbWVudCBpbnN0cnVjdGlvbiBjb3VudGVyIGFuZCBjaGVjayBpZiB3ZSBkaWRuJ3QgKi8KKyAgICAgIC8qIHJ1biB0aGlzIHByb2dyYW0gZm9yIHRvbyBsb25nIChlLmcuIGluZmluaXRlIGxvb3BzKS4gKi8KKyAgICAgIGlmICggKytpbnNfY291bnRlciA+IE1BWF9SVU5OQUJMRV9PUENPREVTICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBFeGVjdXRpb25fVG9vX0xvbmcgKTsKKworICAgIExTdWl0ZUxhYmVsXzoKKyAgICAgIGlmICggZXhjLT5JUCA+PSBleGMtPmNvZGVTaXplICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPmNhbGxUb3AgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQ29kZV9PdmVyZmxvdyApOworICAgICAgICAgIGdvdG8gTEVycm9yTGFiZWxfOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBnb3RvIExOb19FcnJvcl87CisgICAgICB9CisgICAgfSB3aGlsZSAoICFleGMtPmluc3RydWN0aW9uX3RyYXAgKTsKKworICBMTm9fRXJyb3JfOgorICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgTEVycm9yQ29kZU92ZXJmbG93XzoKKyAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKworICBMRXJyb3JMYWJlbF86CisgICAgLyogSWYgYW55IGVycm9ycyBoYXZlIG9jY3VycmVkLCBmdW5jdGlvbiB0YWJsZXMgbWF5IGJlIGJyb2tlbi4gKi8KKyAgICAvKiBGb3JjZSBhIHJlLWV4ZWN1dGlvbiBvZiBgcHJlcCcgYW5kIGBmcGdtJyB0YWJsZXMgaWYgbm8gICAgICAqLworICAgIC8qIGJ5dGVjb2RlIGRlYnVnZ2VyIGlzIHJ1bi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBleGMtPmVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgIWV4Yy0+aW5zdHJ1Y3Rpb25fdHJhcCAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+Y3VyUmFuZ2UgPT0gdHRfY29kZXJhbmdlX2dseXBoICkKKyAgICB7CisgICAgICBGVF9UUkFDRTEoKCAiICBUaGUgaW50ZXJwcmV0ZXIgcmV0dXJuZWQgZXJyb3IgMHgleFxuIiwgZXhjLT5lcnJvciApKTsKKyAgICAgIGV4Yy0+c2l6ZS0+Ynl0ZWNvZGVfcmVhZHkgPSAtMTsKKyAgICAgIGV4Yy0+c2l6ZS0+Y3Z0X3JlYWR5ICAgICAgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhjLT5lcnJvcjsKKyAgfQorCisKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjcwNmQwCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dGludGVycC5oCkBAIC0wLDAgKzEsMzg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dGludGVycC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVElOVEVSUF9IX18KKyNkZWZpbmUgX19UVElOVEVSUF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidHRvYmpzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFRfUm91bmRfT2ZmICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFRfUm91bmRfVG9fSGFsZl9HcmlkICAgIDAKKyNkZWZpbmUgVFRfUm91bmRfVG9fR3JpZCAgICAgICAgIDEKKyNkZWZpbmUgVFRfUm91bmRfVG9fRG91YmxlX0dyaWQgIDIKKyNkZWZpbmUgVFRfUm91bmRfVXBfVG9fR3JpZCAgICAgIDQKKyNkZWZpbmUgVFRfUm91bmRfRG93bl9Ub19HcmlkICAgIDMKKyNkZWZpbmUgVFRfUm91bmRfU3VwZXIgICAgICAgICAgIDYKKyNkZWZpbmUgVFRfUm91bmRfU3VwZXJfNDUgICAgICAgIDcKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRnVuY3Rpb24gdHlwZXMgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIsIGRlcGVuZGluZyBvbiB2YXJpb3VzIG1vZGVzICAgICovCisgIC8qIChlLmcuIHRoZSByb3VuZGluZyBtb2RlLCB3aGV0aGVyIHRvIHJlbmRlciBhIHZlcnRpY2FsIG9yIGhvcml6b250YWwgICAqLworICAvKiBsaW5lIGV0YykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIFJvdW5kaW5nIGZ1bmN0aW9uICovCisgIHR5cGVkZWYgRlRfRjI2RG90NgorICAoKlRUX1JvdW5kX0Z1bmMpKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKTsKKworICAvKiBQb2ludCBkaXNwbGFjZW1lbnQgYWxvbmcgdGhlIGZyZWVkb20gdmVjdG9yIHJvdXRpbmUgKi8KKyAgdHlwZWRlZiB2b2lkCisgICgqVFRfTW92ZV9GdW5jKSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlICk7CisKKyAgLyogRGlzdGFuY2UgcHJvamVjdGlvbiBhbG9uZyBvbmUgb2YgdGhlIHByb2plY3Rpb24gdmVjdG9ycyAqLworICB0eXBlZGVmIEZUX0YyNkRvdDYKKyAgKCpUVF9Qcm9qZWN0X0Z1bmMpKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHkgKTsKKworICAvKiBnZXR0aW5nIGN1cnJlbnQgcHBlbS4gIFRha2UgY2FyZSBvZiBub24tc3F1YXJlIHBpeGVscyBpZiBuZWNlc3NhcnkgKi8KKyAgdHlwZWRlZiBGVF9Mb25nCisgICgqVFRfQ3VyX1BwZW1fRnVuYykoIFRUX0V4ZWNDb250ZXh0ICBleGMgKTsKKworICAvKiByZWFkaW5nIGEgY3Z0IHZhbHVlLiAgVGFrZSBjYXJlIG9mIG5vbi1zcXVhcmUgcGl4ZWxzIGlmIG5lY2Vzc2FyeSAqLworICB0eXBlZGVmIEZUX0YyNkRvdDYKKyAgKCpUVF9HZXRfQ1ZUX0Z1bmMpKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHggKTsKKworICAvKiBzZXR0aW5nIG9yIG1vdmluZyBhIGN2dCB2YWx1ZS4gIFRha2UgY2FyZSBvZiBub24tc3F1YXJlIHBpeGVscyAgKi8KKyAgLyogaWYgbmVjZXNzYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgdm9pZAorICAoKlRUX1NldF9DVlRfRnVuYykoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgdmFsdWUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIGNhbGwgcmVjb3JkLCB1c2VkIHRvIG1hbmFnZSBmdW5jdGlvbiBjYWxscy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfQ2FsbFJlY18KKyAgeworICAgIEZUX0ludCAgIENhbGxlcl9SYW5nZTsKKyAgICBGVF9Mb25nICBDYWxsZXJfSVA7CisgICAgRlRfTG9uZyAgQ3VyX0NvdW50OworCisgICAgVFRfRGVmUmVjb3JkICAqRGVmOyAvKiBlaXRoZXIgRkRFRiBvciBJREVGICovCisKKyAgfSBUVF9DYWxsUmVjLCAqVFRfQ2FsbFN0YWNrOworCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZXNlIHN0cnVjdHVyZXMgZGVmaW5lIHJ1bGVzIHVzZWQgdG8gdHdlYWsgc3VicGl4ZWwgaGludGluZyBmb3IgICAgICAqLworICAvKiB2YXJpb3VzIGZvbnRzLiAgIiIsIDAsICIiLCBOVUxMIHZhbHVlIGluZGljYXRlcyB0byBtYXRjaCBhbnkgdmFsdWUuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgU1BIX01BWF9OQU1FX1NJWkUgICAgICAzMgorI2RlZmluZSBTUEhfTUFYX0NMQVNTX01FTUJFUlMgIDEwMAorCisgIHR5cGVkZWYgc3RydWN0ICBTUEhfVHdlYWtSdWxlXworICB7CisgICAgY29uc3QgY2hhciAgICAgIGZhbWlseVtTUEhfTUFYX05BTUVfU0laRV07CisgICAgY29uc3QgRlRfVUludCAgIHBwZW07CisgICAgY29uc3QgY2hhciAgICAgIHN0eWxlW1NQSF9NQVhfTkFNRV9TSVpFXTsKKyAgICBjb25zdCBGVF9VTG9uZyAgZ2x5cGg7CisKKyAgfSBTUEhfVHdlYWtSdWxlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFNQSF9TY2FsZVJ1bGVfCisgIHsKKyAgICBjb25zdCBjaGFyICAgICAgZmFtaWx5W1NQSF9NQVhfTkFNRV9TSVpFXTsKKyAgICBjb25zdCBGVF9VSW50ICAgcHBlbTsKKyAgICBjb25zdCBjaGFyICAgICAgc3R5bGVbU1BIX01BWF9OQU1FX1NJWkVdOworICAgIGNvbnN0IEZUX1VMb25nICBnbHlwaDsKKyAgICBjb25zdCBGVF9VTG9uZyAgc2NhbGU7CisKKyAgfSBTUEhfU2NhbGVSdWxlOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFNQSF9Gb250X0NsYXNzXworICB7CisgICAgY29uc3QgY2hhciAgbmFtZVtTUEhfTUFYX05BTUVfU0laRV07CisgICAgY29uc3QgY2hhciAgbWVtYmVyW1NQSF9NQVhfQ0xBU1NfTUVNQkVSU11bU1BIX01BWF9OQU1FX1NJWkVdOworCisgIH0gU1BIX0ZvbnRfQ2xhc3M7CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1haW4gc3RydWN0dXJlIGZvciB0aGUgaW50ZXJwcmV0ZXIgd2hpY2ggY29sbGVjdHMgYWxsIG5lY2Vzc2FyeSAgICovCisgIC8qIHZhcmlhYmxlcyBhbmQgc3RhdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0V4ZWNDb250ZXh0UmVjXworICB7CisgICAgVFRfRmFjZSAgICAgICAgICAgIGZhY2U7CisgICAgVFRfU2l6ZSAgICAgICAgICAgIHNpemU7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsKKworICAgIC8qIGluc3RydWN0aW9ucyBzdGF0ZSAqLworCisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOyAgICAgIC8qIGxhc3QgZXhlY3V0aW9uIGVycm9yICovCisKKyAgICBGVF9Mb25nICAgICAgICAgICAgdG9wOyAgICAgICAgLyogdG9wIG9mIGV4ZWMuIHN0YWNrICAgKi8KKworICAgIEZUX0xvbmcgICAgICAgICAgICBzdGFja1NpemU7ICAvKiBzaXplIG9mIGV4ZWMuIHN0YWNrICAqLworICAgIEZUX0xvbmcqICAgICAgICAgICBzdGFjazsgICAgICAvKiBjdXJyZW50IGV4ZWMuIHN0YWNrICAqLworCisgICAgRlRfTG9uZyAgICAgICAgICAgIGFyZ3M7CisgICAgRlRfTG9uZyAgICAgICAgICAgIG5ld190b3A7ICAgIC8qIG5ldyB0b3AgYWZ0ZXIgZXhlYy4gICovCisKKyAgICBUVF9HbHlwaFpvbmVSZWMgICAgenAwLCAgICAgICAgLyogem9uZSByZWNvcmRzICovCisgICAgICAgICAgICAgICAgICAgICAgIHpwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgenAyLAorICAgICAgICAgICAgICAgICAgICAgICBwdHMsCisgICAgICAgICAgICAgICAgICAgICAgIHR3aWxpZ2h0OworCisgICAgRlRfU2l6ZV9NZXRyaWNzICAgIG1ldHJpY3M7CisgICAgVFRfU2l6ZV9NZXRyaWNzICAgIHR0X21ldHJpY3M7IC8qIHNpemUgbWV0cmljcyAqLworCisgICAgVFRfR3JhcGhpY3NTdGF0ZSAgIEdTOyAgICAgICAgIC8qIGN1cnJlbnQgZ3JhcGhpY3Mgc3RhdGUgKi8KKworICAgIEZUX0ludCAgICAgICAgICAgICBjdXJSYW5nZTsgIC8qIGN1cnJlbnQgY29kZSByYW5nZSBudW1iZXIgICAqLworICAgIEZUX0J5dGUqICAgICAgICAgICBjb2RlOyAgICAgIC8qIGN1cnJlbnQgY29kZSByYW5nZSAgICAgICAgICAqLworICAgIEZUX0xvbmcgICAgICAgICAgICBJUDsgICAgICAgIC8qIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLworICAgIEZUX0xvbmcgICAgICAgICAgICBjb2RlU2l6ZTsgIC8qIHNpemUgb2YgY3VycmVudCByYW5nZSAgICAgICAqLworCisgICAgRlRfQnl0ZSAgICAgICAgICAgIG9wY29kZTsgICAgLyogY3VycmVudCBvcGNvZGUgICAgICAgICAgICAgICovCisgICAgRlRfSW50ICAgICAgICAgICAgIGxlbmd0aDsgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgb3Bjb2RlICAgICovCisKKyAgICBGVF9Cb29sICAgICAgICAgICAgc3RlcF9pbnM7ICAvKiB0cnVlIGlmIHRoZSBpbnRlcnByZXRlciBtdXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IElQIGFmdGVyIGlucy4gZXhlYyAqLworICAgIEZUX1VMb25nICAgICAgICAgICBjdnRTaXplOworICAgIEZUX0xvbmcqICAgICAgICAgICBjdnQ7CisKKyAgICBGVF9VSW50ICAgICAgICAgICAgZ2x5cGhTaXplOyAvKiBnbHlwaCBpbnN0cnVjdGlvbnMgYnVmZmVyIHNpemUgKi8KKyAgICBGVF9CeXRlKiAgICAgICAgICAgZ2x5cGhJbnM7ICAvKiBnbHlwaCBpbnN0cnVjdGlvbnMgYnVmZmVyICovCisKKyAgICBGVF9VSW50ICAgICAgICAgICAgbnVtRkRlZnM7ICAvKiBudW1iZXIgb2YgZnVuY3Rpb24gZGVmcyAgICAgICAgICovCisgICAgRlRfVUludCAgICAgICAgICAgIG1heEZEZWZzOyAgLyogbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gZGVmcyAqLworICAgIFRUX0RlZkFycmF5ICAgICAgICBGRGVmczsgICAgIC8qIHRhYmxlIG9mIEZEZWZzIGVudHJpZXMgICAgICAgICAgKi8KKworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1JRGVmczsgIC8qIG51bWJlciBvZiBpbnN0cnVjdGlvbiBkZWZzICovCisgICAgRlRfVUludCAgICAgICAgICAgIG1heElEZWZzOyAgLyogbWF4aW11bSBudW1iZXIgb2YgaW5zIGRlZnMgKi8KKyAgICBUVF9EZWZBcnJheSAgICAgICAgSURlZnM7ICAgICAvKiB0YWJsZSBvZiBJRGVmcyBlbnRyaWVzICAgICAqLworCisgICAgRlRfVUludCAgICAgICAgICAgIG1heEZ1bmM7ICAgLyogbWF4aW11bSBmdW5jdGlvbiBpbmRleCAgICAgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgbWF4SW5zOyAgICAvKiBtYXhpbXVtIGluc3RydWN0aW9uIGluZGV4ICAqLworCisgICAgRlRfSW50ICAgICAgICAgICAgIGNhbGxUb3AsICAgIC8qIHRvcCBvZiBjYWxsIHN0YWNrIGR1cmluZyBleGVjdXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgY2FsbFNpemU7ICAgLyogc2l6ZSBvZiBjYWxsIHN0YWNrICovCisgICAgVFRfQ2FsbFN0YWNrICAgICAgIGNhbGxTdGFjazsgIC8qIGNhbGwgc3RhY2sgKi8KKworICAgIEZUX1VTaG9ydCAgICAgICAgICBtYXhQb2ludHM7ICAgIC8qIGNhcGFjaXR5IG9mIHRoaXMgY29udGV4dCdzIGBwdHMnICovCisgICAgRlRfU2hvcnQgICAgICAgICAgIG1heENvbnRvdXJzOyAgLyogcmVjb3JkLCBleHByZXNzZWQgaW4gcG9pbnRzIGFuZCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250b3Vycy4gICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgVFRfQ29kZVJhbmdlVGFibGUgIGNvZGVSYW5nZVRhYmxlOyAgLyogdGFibGUgb2YgdmFsaWQgY29kZSByYW5nZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2VmdWwgZm9yIHRoZSBkZWJ1Z2dlciAgICovCisKKyAgICBGVF9VU2hvcnQgICAgICAgICAgc3RvcmVTaXplOyAgLyogc2l6ZSBvZiBjdXJyZW50IHN0b3JhZ2UgKi8KKyAgICBGVF9Mb25nKiAgICAgICAgICAgc3RvcmFnZTsgICAgLyogc3RvcmFnZSBhcmVhICAgICAgICAgICAgKi8KKworICAgIEZUX0YyNkRvdDYgICAgICAgICBwZXJpb2Q7ICAgICAvKiB2YWx1ZXMgdXNlZCBmb3IgdGhlICovCisgICAgRlRfRjI2RG90NiAgICAgICAgIHBoYXNlOyAgICAgIC8qIGBTdXBlclJvdW5kaW5nJyAgICAgKi8KKyAgICBGVF9GMjZEb3Q2ICAgICAgICAgdGhyZXNob2xkOworCisgICAgRlRfQm9vbCAgICAgICAgICAgIGluc3RydWN0aW9uX3RyYXA7IC8qIElmIGBUcnVlJywgdGhlIGludGVycHJldGVyIHdpbGwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCBhZnRlciBlYWNoIGluc3RydWN0aW9uICAgICAqLworCisgICAgVFRfR3JhcGhpY3NTdGF0ZSAgIGRlZmF1bHRfR1M7ICAgICAgIC8qIGdyYXBoaWNzIHN0YXRlIHJlc3VsdGluZyBmcm9tICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIHByZXAgcHJvZ3JhbSAgICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICBpc19jb21wb3NpdGU7ICAgICAvKiB0cnVlIGlmIHRoZSBnbHlwaCBpcyBjb21wb3NpdGUgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIHBlZGFudGljX2hpbnRpbmc7IC8qIHRydWUgaWYgcGVkYW50aWMgaW50ZXJwcmV0YXRpb24gKi8KKworICAgIC8qIGxhdGVzdCBpbnRlcnByZXRlciBhZGRpdGlvbnMgKi8KKworICAgIEZUX0xvbmcgICAgICAgICAgICBGX2RvdF9QOyAgICAvKiBkb3QgcHJvZHVjdCBvZiBmcmVlZG9tIGFuZCBwcm9qZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlY3RvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBUVF9Sb3VuZF9GdW5jICAgICAgZnVuY19yb3VuZDsgLyogY3VycmVudCByb3VuZGluZyBmdW5jdGlvbiAgICAgICAgICAgICAqLworCisgICAgVFRfUHJvamVjdF9GdW5jICAgIGZ1bmNfcHJvamVjdCwgICAvKiBjdXJyZW50IHByb2plY3Rpb24gZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY19kdWFscHJvaiwgIC8qIGN1cnJlbnQgZHVhbCBwcm9qLiBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZyZWVQcm9qOyAgLyogY3VycmVudCBmcmVlZG9tIHByb2ouIGZ1bmMgICovCisKKyAgICBUVF9Nb3ZlX0Z1bmMgICAgICAgZnVuY19tb3ZlOyAgICAgIC8qIGN1cnJlbnQgcG9pbnQgbW92ZSBmdW5jdGlvbiAqLworICAgIFRUX01vdmVfRnVuYyAgICAgICBmdW5jX21vdmVfb3JpZzsgLyogbW92ZSBvcmlnaW5hbCBwb3NpdGlvbiBmdW5jdGlvbiAqLworCisgICAgVFRfQ3VyX1BwZW1fRnVuYyAgIGZ1bmNfY3VyX3BwZW07ICAvKiBnZXQgY3VycmVudCBwcm9qLiBwcGVtIHZhbHVlICAqLworCisgICAgVFRfR2V0X0NWVF9GdW5jICAgIGZ1bmNfcmVhZF9jdnQ7ICAvKiByZWFkIGEgY3Z0IGVudHJ5ICAgICAgICAgICAgICAqLworICAgIFRUX1NldF9DVlRfRnVuYyAgICBmdW5jX3dyaXRlX2N2dDsgLyogd3JpdGUgYSBjdnQgZW50cnkgKGluIHBpeGVscykgKi8KKyAgICBUVF9TZXRfQ1ZUX0Z1bmMgICAgZnVuY19tb3ZlX2N2dDsgIC8qIGluY3IgYSBjdnQgZW50cnkgKGluIHBpeGVscykgICovCisKKyAgICBGVF9Cb29sICAgICAgICAgICAgZ3JheXNjYWxlOyAgICAgIC8qIGFyZSB3ZSBoaW50aW5nIGZvciBncmF5c2NhbGU/ICovCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBUVF9Sb3VuZF9GdW5jICAgICAgZnVuY19yb3VuZF9zcGhuOyAgIC8qIHN1YnBpeGVsIHJvdW5kaW5nIGZ1bmN0aW9uICovCisKKyAgICBGVF9Cb29sICAgICAgICAgICAgc3VicGl4ZWxfaGludGluZzsgIC8qIFVzaW5nIHN1YnBpeGVsIGhpbnRpbmc/ICAgICAgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGlnbm9yZV94X21vZGU7ICAgICAvKiBTdGFuZGFyZCByZW5kZXJpbmcgbW9kZSBmb3IgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3VicGl4ZWwgaGludGluZy4gIE9uIGlmIGdyYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHN1YnBpeGVsIGhpbnRpbmcgaXMgb24uICAgICovCisKKyAgICAvKiBUaGUgZm9sbG93aW5nIDYgYXJlbid0IGZ1bGx5IGltcGxlbWVudGVkIGJ1dCBoZXJlIGZvciBNUyByYXN0ZXJpemVyICovCisgICAgLyogY29tcGF0aWJpbGl0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICBjb21wYXRpYmxlX3dpZHRoczsgICAgIC8qIGNvbXBhdGlibGUgd2lkdGhzPyAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgc3ltbWV0cmljYWxfc21vb3RoaW5nOyAvKiBzeW1tZXRyaWNhbF9zbW9vdGhpbmc/ICAgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGJncjsgICAgICAgICAgICAgICAgICAgLyogYmdyIGluc3RlYWQgb2YgcmdiPyAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICB2ZXJ0aWNhbF9sY2Q7ICAgICAgICAgIC8qIGxvbmcgc2lkZSBvZiBMQ0Qgc3VicGl4ZWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWN0YW5nbGVzIGlzIGhvcml6b250YWwgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIHN1YnBpeGVsX3Bvc2l0aW9uZWQ7ICAgLyogc3VicGl4ZWwgcG9zaXRpb25lZCAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChEaXJlY3RXcml0ZSBDbGVhclR5cGUpPyAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgZ3JheV9jbGVhcnR5cGU7ICAgICAgICAvKiBDbGVhclR5cGUgaGludGluZyBidXQgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZyAgICAgICAqLworCisgICAgRlRfSW50ICAgICAgICAgICAgIHJhc3Rlcml6ZXJfdmVyc2lvbjsgICAgLyogTVMgcmFzdGVyaXplciB2ZXJzaW9uICAgICAqLworCisgICAgRlRfQm9vbCAgICAgICAgICAgIGl1cF9jYWxsZWQ7ICAgICAgICAgICAgLyogSVVQIGNhbGxlZCBmb3IgZ2x5cGg/ICAgICAqLworCisgICAgRlRfVUxvbmcgICAgICAgICAgIHNwaF90d2Vha19mbGFnczsgICAgICAgLyogZmxhZ3MgdG8gY29udHJvbCAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhpbnQgdHdlYWtzICAgICAgICAgICAgICAgKi8KKworICAgIEZUX1VMb25nICAgICAgICAgICBzcGhfaW5fZnVuY19mbGFnczsgICAgIC8qIGZsYWdzIHRvIGluZGljYXRlIGlmIGluICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcGVjaWFsIGZ1bmN0aW9ucyAgICAgICAgICovCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICB9IFRUX0V4ZWNDb250ZXh0UmVjOworCisKKyAgZXh0ZXJuIGNvbnN0IFRUX0dyYXBoaWNzU3RhdGUgIHR0X2RlZmF1bHRfZ3JhcGhpY3Nfc3RhdGU7CisKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorICBGVF9MT0NBTCggdm9pZCApCisgIFRUX0dvdG9fQ29kZVJhbmdlKCBUVF9FeGVjQ29udGV4dCAgZXhlYywKKyAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBJUCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVFRfU2V0X0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCisgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBsZW5ndGggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIFRUX0NsZWFyX0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHJhbmdlICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBVcGRhdGVfTWF4KCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgRlRfVUxvbmcqICBzaXplLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIG11bHRpcGxpZXIsCisgICAgICAgICAgICAgIHZvaWQqICAgICAgX3BidWZmLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIG5ld19tYXggKTsKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX05ld19Db250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFF1ZXJpZXMgdGhlIGZhY2UgY29udGV4dCBmb3IgYSBnaXZlbiBmb250LiAgTm90ZSB0aGF0IHRoZXJlIGlzICAgICAqLworICAvKiAgICBub3cgYSBfc2luZ2xlXyBleGVjdXRpb24gY29udGV4dCBpbiB0aGUgVHJ1ZVR5cGUgZHJpdmVyIHdoaWNoIGlzICAgKi8KKyAgLyogICAgc2hhcmVkIGFtb25nIGZhY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LiAgSW5pdGlhbGl6ZWQgZm9yIGBmYWNlJy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB0aGUgZ2x5cGggbG9hZGVyIGFuZCBkZWJ1Z2dlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLiAgICAgICovCisgIC8qICAgIChBbmQgcmlnaHQgbm93IG9ubHkgdGhlIGdseXBoIGxvYWRlciB1c2VzIGl0LikgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBUVF9FeGVjQ29udGV4dCApCisgIFRUX05ld19Db250ZXh0KCBUVF9Ecml2ZXIgIGRyaXZlciApOworCisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUVF9Eb25lX0NvbnRleHQoIFRUX0V4ZWNDb250ZXh0ICBleGVjICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgVFRfTG9hZF9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKKyAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBUVF9TaXplICAgICAgICAgc2l6ZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVFRfU2F2ZV9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKKyAgICAgICAgICAgICAgICAgICBUVF9TaXplICAgICAgICAgaW5zICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgVFRfUnVuX0NvbnRleHQoIFRUX0V4ZWNDb250ZXh0ICBleGVjICk7CisjZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9SdW5JbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFeGVjdXRlcyBvbmUgb3IgbW9yZSBpbnN0cnVjdGlvbiBpbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuICBUaGlzICAgKi8KKyAgLyogICAgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgdGhlIFRydWVUeXBlIG9wY29kZSBpbnRlcnByZXRlci4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZXhlYyA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB0aGUgb2JqZWN0IG1hbmFnZXIgYW5kIGRlYnVnZ2VyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24uICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHB1YmxpY2x5IGV4cG9ydGVkIGJlY2F1c2UgaXQgaXMgZGlyZWN0bHkgICAgICAgICAgKi8KKyAgLyogICAgaW52b2tlZCBieSB0aGUgVHJ1ZVR5cGUgZGVidWdnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgVFRfUnVuSW5zKCBUVF9FeGVjQ29udGV4dCAgZXhlYyApOworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRJTlRFUlBfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0b2Jqcy5jIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dG9ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJhYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dG9ianMuYwpAQCAtMCwwICsxLDEzMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0b2Jqcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPYmplY3RzIG1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ICisKKyNpbmNsdWRlICJ0dGdsb2FkLmgiCisjaW5jbHVkZSAidHRwbG9hZC5oIgorCisjaW5jbHVkZSAidHRlcnJvcnMuaCIKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorI2luY2x1ZGUgInR0aW50ZXJwLmgiCisjZW5kaWYKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisjaW5jbHVkZSBGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0gKKyNlbmRpZgorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgInR0Z3h2YXIuaCIKKyNlbmRpZgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0b2JqcworCisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBHTFlQSCBaT05FIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9nbHlwaHpvbmVfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBEZWFsbG9jYXRlIGEgZ2x5cGggem9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB6b25lIDo6IEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGdseXBoIHpvbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHR0X2dseXBoem9uZV9kb25lKCBUVF9HbHlwaFpvbmUgIHpvbmUgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSB6b25lLT5tZW1vcnk7CisKKworICAgIGlmICggbWVtb3J5ICkKKyAgICB7CisgICAgICBGVF9GUkVFKCB6b25lLT5jb250b3VycyApOworICAgICAgRlRfRlJFRSggem9uZS0+dGFncyApOworICAgICAgRlRfRlJFRSggem9uZS0+Y3VyICk7CisgICAgICBGVF9GUkVFKCB6b25lLT5vcmcgKTsKKyAgICAgIEZUX0ZSRUUoIHpvbmUtPm9ydXMgKTsKKworICAgICAgem9uZS0+bWF4X3BvaW50cyAgID0gem9uZS0+bl9wb2ludHMgICA9IDA7CisgICAgICB6b25lLT5tYXhfY29udG91cnMgPSB6b25lLT5uX2NvbnRvdXJzID0gMDsKKyAgICAgIHpvbmUtPm1lbW9yeSAgICAgICA9IE5VTEw7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9nbHlwaHpvbmVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbGxvY2F0ZSBhIG5ldyBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnkgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1heFBvaW50cyAgIDo6IFRoZSBjYXBhY2l0eSBvZiBnbHlwaCB6b25lIGluIHBvaW50cy4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4Q29udG91cnMgOjogVGhlIGNhcGFjaXR5IG9mIGdseXBoIHpvbmUgaW4gY29udG91cnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgem9uZSAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgZ2x5cGggem9uZSByZWNvcmQuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZ2x5cGh6b25lX25ldyggRlRfTWVtb3J5ICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgbWF4UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICBGVF9TaG9ydCAgICAgIG1heENvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgIHpvbmUgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICBGVF9NRU1fWkVSTyggem9uZSwgc2l6ZW9mICggKnpvbmUgKSApOworICAgIHpvbmUtPm1lbW9yeSA9IG1lbW9yeTsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCB6b25lLT5vcmcsICAgICAgbWF4UG9pbnRzICAgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCB6b25lLT5jdXIsICAgICAgbWF4UG9pbnRzICAgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCB6b25lLT5vcnVzLCAgICAgbWF4UG9pbnRzICAgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCB6b25lLT50YWdzLCAgICAgbWF4UG9pbnRzICAgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCB6b25lLT5jb250b3VycywgbWF4Q29udG91cnMgKSApCisgICAgeworICAgICAgdHRfZ2x5cGh6b25lX2RvbmUoIHpvbmUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHpvbmUtPm1heF9wb2ludHMgICA9IG1heFBvaW50czsKKyAgICAgIHpvbmUtPm1heF9jb250b3VycyA9IG1heENvbnRvdXJzOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisKKyAgLyogQ29tcGFyZSB0aGUgZmFjZSB3aXRoIGEgbGlzdCBvZiB3ZWxsLWtub3duIGB0cmlja3knIGZvbnRzLiAqLworICAvKiBUaGlzIGxpc3Qgc2hhbGwgYmUgZXhwYW5kZWQgYXMgd2UgZmluZCBtb3JlIG9mIHRoZW0uICAgICAgICovCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgdHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHkoIEZUX1N0cmluZyogIG5hbWUgKQorICB7CisKKyNkZWZpbmUgVFJJQ0tfTkFNRVNfTUFYX0NIQVJBQ1RFUlMgIDE5CisjZGVmaW5lIFRSSUNLX05BTUVTX0NPVU5UICAgICAgICAgICAgOQorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgdHJpY2tfbmFtZXNbVFJJQ0tfTkFNRVNfQ09VTlRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVFJJQ0tfTkFNRVNfTUFYX0NIQVJBQ1RFUlMgKyAxXSA9CisgICAgeworICAgICAgIkRGS2FpU2hvLVNCIiwgICAgICAgIC8qIGRma2Fpc2IudHRmICovCisgICAgICAiREZLYWlTaHUiLAorICAgICAgIkRGS2FpLVNCIiwgICAgICAgICAgIC8qIGthaXUudHRmICovCisgICAgICAiSHVhVGlhbkthaVRpPyIsICAgICAgLyogaHRrdDIudHRmICovCisgICAgICAiSHVhVGlhblNvbmdUaT8iLCAgICAgLyogaHRzdDMudHRmICovCisgICAgICAiTWluZyhmb3IgSVNPMTA2NDYpIiwgLyogaGtzY3NpaWMudHRmICYgaWljb3JlLnR0ZiAqLworICAgICAgIk1pbmdMaVUiLCAgICAgICAgICAgIC8qIG1pbmdsaXUudHRmICYgbWluZ2xpdS50dGMgKi8KKyAgICAgICJQTWluZ0xpVSIsICAgICAgICAgICAvKiBtaW5nbGl1LnR0YyAqLworICAgICAgIk1pbmdMaTQzIiwgICAgICAgICAgIC8qIG1pbmdsaS50dGYgKi8KKyAgICB9OworCisgICAgaW50ICBubjsKKworCisgICAgZm9yICggbm4gPSAwOyBubiA8IFRSSUNLX05BTUVTX0NPVU5UOyBubisrICkKKyAgICAgIGlmICggZnRfc3Ryc3RyKCBuYW1lLCB0cmlja19uYW1lc1tubl0gKSApCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKworICAvKiBYWFg6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBgc2ZudCcgbW9kdWxlLiAqLworCisgIC8qIFNvbWUgUERGIGdlbmVyYXRvcnMgY2xlYXIgdGhlIGNoZWNrc3VtcyBpbiB0aGUgVHJ1ZVR5cGUgaGVhZGVyIHRhYmxlLiAqLworICAvKiBGb3IgZXhhbXBsZSwgUXVhcnR6IENvbnRleHRQREYgY2xlYXJzIGFsbCBlbnRyaWVzLCBvciBCdWxsemlwIFBERiAgICAgKi8KKyAgLyogUHJpbnRlciBjbGVhcnMgdGhlIGVudHJpZXMgZm9yIHN1YnNldHRlZCBzdWJ0YWJsZXMuICBXZSB0aHVzIGhhdmUgdG8gICovCisgIC8qIHJlY2FsY3VsYXRlIHRoZSBjaGVja3N1bXMgIHdoZXJlIG5lY2Vzc2FyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0YXRpYyBGVF9VSW50MzIKKyAgdHRfc3ludGhfc2ZudF9jaGVja3N1bSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgbGVuZ3RoICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfVUludDMyICBjaGVja3N1bSA9IDA7CisgICAgaW50ICAgICAgICBpOworCisKKyAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCBsZW5ndGggKSApCisgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoIDsgbGVuZ3RoID4gMzsgbGVuZ3RoIC09IDQgKQorICAgICAgY2hlY2tzdW0gKz0gKEZUX1VJbnQzMilGVF9HRVRfVUxPTkcoKTsKKworICAgIGZvciAoIGkgPSAzOyBsZW5ndGggPiAwOyBsZW5ndGggLS0sIGktLSApCisgICAgICBjaGVja3N1bSArPSAoRlRfVUludDMyKSggRlRfR0VUX0JZVEUoKSA8PCAoIGkgKiA4ICkgKTsKKworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKworICAgIHJldHVybiBjaGVja3N1bTsKKyAgfQorCisKKyAgLyogWFhYOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYHNmbnQnIG1vZHVsZS4gKi8KKworICBzdGF0aWMgRlRfVUxvbmcKKyAgdHRfZ2V0X3NmbnRfY2hlY2tzdW0oIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgaSApCisgIHsKKyNpZiAwIC8qIGlmIHdlIGJlbGlldmUgdGhlIHdyaXR0ZW4gdmFsdWUsIHVzZSBmb2xsb3dpbmcgcGFydC4gKi8KKyAgICBpZiAoIGZhY2UtPmRpcl90YWJsZXNbaV0uQ2hlY2tTdW0gKQorICAgICAgcmV0dXJuIGZhY2UtPmRpcl90YWJsZXNbaV0uQ2hlY2tTdW07CisjZW5kaWYKKworICAgIGlmICggIWZhY2UtPmdvdG9fdGFibGUgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5kaXJfdGFibGVzW2ldLlRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3Quc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApICkKKyAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChGVF9VTG9uZyl0dF9zeW50aF9zZm50X2NoZWNrc3VtKCBmYWNlLT5yb290LnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmRpcl90YWJsZXNbaV0uTGVuZ3RoICk7CisgIH0KKworCisgIHR5cGVkZWYgc3RydWN0IHR0X3NmbnRfaWRfcmVjXworICB7CisgICAgRlRfVUxvbmcgIENoZWNrU3VtOworICAgIEZUX1VMb25nICBMZW5ndGg7CisKKyAgfSB0dF9zZm50X2lkX3JlYzsKKworCisgIHN0YXRpYyBGVF9Cb29sCisgIHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisjZGVmaW5lIFRSSUNLX1NGTlRfSURTX1BFUl9GQUNFICAgMworI2RlZmluZSBUUklDS19TRk5UX0lEU19OVU1fRkFDRVMgIDE3CisKKyAgICBzdGF0aWMgY29uc3QgdHRfc2ZudF9pZF9yZWMgc2ZudF9pZFtUUklDS19TRk5UX0lEU19OVU1fRkFDRVNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVFJJQ0tfU0ZOVF9JRFNfUEVSX0ZBQ0VdID0geworCisjZGVmaW5lIFRSSUNLX1NGTlRfSURfY3Z0ICAgMAorI2RlZmluZSBUUklDS19TRk5UX0lEX2ZwZ20gIDEKKyNkZWZpbmUgVFJJQ0tfU0ZOVF9JRF9wcmVwICAyCisKKyAgICAgIHsgLyogTWluZ0xpVSAxOTk1ICovCisgICAgICAgIHsgMHgwNUJDRjA1OFVMLCAweDAwMDAwMkU0VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MjgyMzNCRjFVTCwgMHgwMDAwODdDNFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEzNDRBMUVBVUwsIDB4MDAwMDAxRTFVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBNaW5nTGlVIDE5OTYtICovCisgICAgICAgIHsgMHgwNUJDRjA1OFVMLCAweDAwMDAwMkU0VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MjgyMzNCRjFVTCwgMHgwMDAwODdDNFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEzNDRBMUVCVUwsIDB4MDAwMDAxRTFVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBERkthaVNodSAqLworICAgICAgICB7IDB4MTFFNUVBRDRVTCwgMHgwMDAwMDM1MFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDVBMzBDQTNCVUwsIDB4MDAwMDkwNjNVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogSHVhVGlhbkthaVRpICovCisgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4OUM5RTQ4QjhVTCwgMHgwMDAwQkVBMlVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDcwMDIwMTEyVUwsIDB4MDAwMDAwMDhVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBIdWFUaWFuU29uZ1RpICovCisgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MEE1QTA0ODNVTCwgMHgwMDAxN0MzOVVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDcwMDIwMTEyVUwsIDB4MDAwMDAwMDhVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBORUMgZmFkcG9wNy50dGYgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEM5MjU1NVVMLCAweDAwMDAwMEU1VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4QTM5QjU4RTNVTCwgMHgwMDAwMTE3Q1VMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIE5FQyBmYWRyZWk1LnR0ZiAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDMzQzQxNjUyVUwsIDB4MDAwMDAwRTVVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgyNkQ2QzUyQVVMLCAweDAwMDAwRjZBVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogTkVDIGZhbmdvdDcudHRmICovCisgICAgICAgIHsgMHgwMDAwMDAwMFVMLCAweDAwMDAwMDAwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4NkRCMTY1MURVTCwgMHgwMDAwMDE5RFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDZDNkU0QjAzVUwsIDB4MDAwMDI0OTJVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBORUMgZmFuZ3lvNS50dGYgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEM5MjU1NVVMLCAweDAwMDAwMEU1VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4REU1MUZBRDBVTCwgMHgwMDAwMTE3Q1VMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIE5FQyBmYW5reW81LnR0ZiAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDg1RTQ3NjY0VUwsIDB4MDAwMDAwRTVVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhBNkM2MjgzMVVMLCAweDAwMDAxQ0FBVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogTkVDIGZhbnJnbzUudHRmICovCisgICAgICAgIHsgMHgwMDAwMDAwMFVMLCAweDAwMDAwMDAwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MkQ4OTFDRkRVTCwgMHgwMDAwMDE5RFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEwNjA0NjMzVUwsIDB4MDAwMDFERThVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBORUMgZmFuZ290NS50dGMgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEFBNzc0Q1VMLCAweDAwMDAwMUNCVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4OUI1Q0FBOTZVTCwgMHgwMDAwMUY5QVVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIE5FQyBmYW5taW4zLnR0YyAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDBEM0RFOUNCVUwsIDB4MDAwMDAxNDFVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhENDEyNzc2NlVMLCAweDAwMDAyMjgwVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogTkVDIEZBLUdvdGhpYywgMTk5NiAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDRBNjkyNjk4VUwsIDB4MDAwMDAxRjBVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgzNDBENDM0NlVMLCAweDAwMDAxRkNBVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogTkVDIEZBLU1pbmNob3UsIDE5OTYgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHhDRDM0QzYwNFVMLCAweDAwMDAwMTY2VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4NkNGMzEwNDZVTCwgMHgwMDAwMjJCMFVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIE5FQyBGQS1Sb3VuZEdvdGhpY0IsIDE5OTYgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg1REE3NTMxNVVMLCAweDAwMDAwMTlEVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4NDA3NDVBNUZVTCwgMHgwMDAwMjJFMFVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIE5FQyBGQS1Sb3VuZEdvdGhpY00sIDE5OTYgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHhGMDU1RkM0OFVMLCAweDAwMDAwMUMyVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4MzkwMERFRDNVTCwgMHgwMDAwMUUxOFVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0KKyAgICB9OworCisgICAgRlRfVUxvbmcgICBjaGVja3N1bTsKKyAgICBpbnQgICAgICAgIG51bV9tYXRjaGVkX2lkc1tUUklDS19TRk5UX0lEU19OVU1fRkFDRVNdOworICAgIEZUX0Jvb2wgICAgaGFzX2N2dCwgaGFzX2ZwZ20sIGhhc19wcmVwOworICAgIEZUX1VTaG9ydCAgaTsKKyAgICBpbnQgICAgICAgIGosIGs7CisKKworICAgIEZUX01FTV9TRVQoIG51bV9tYXRjaGVkX2lkcywgMCwKKyAgICAgICAgICAgICAgICBzaXplb2YgKCBpbnQgKSAqIFRSSUNLX1NGTlRfSURTX05VTV9GQUNFUyApOworICAgIGhhc19jdnQgID0gRkFMU0U7CisgICAgaGFzX2ZwZ20gPSBGQUxTRTsKKyAgICBoYXNfcHJlcCA9IEZBTFNFOworCisgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlLT5udW1fdGFibGVzOyBpKysgKQorICAgIHsKKyAgICAgIGNoZWNrc3VtID0gMDsKKworICAgICAgc3dpdGNoKCBmYWNlLT5kaXJfdGFibGVzW2ldLlRhZyApCisgICAgICB7CisgICAgICBjYXNlIFRUQUdfY3Z0OgorICAgICAgICBrID0gVFJJQ0tfU0ZOVF9JRF9jdnQ7CisgICAgICAgIGhhc19jdnQgID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVFRBR19mcGdtOgorICAgICAgICBrID0gVFJJQ0tfU0ZOVF9JRF9mcGdtOworICAgICAgICBoYXNfZnBnbSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFRUQUdfcHJlcDoKKyAgICAgICAgayA9IFRSSUNLX1NGTlRfSURfcHJlcDsKKyAgICAgICAgaGFzX3ByZXAgPSBUUlVFOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGZvciAoIGogPSAwOyBqIDwgVFJJQ0tfU0ZOVF9JRFNfTlVNX0ZBQ0VTOyBqKysgKQorICAgICAgICBpZiAoIGZhY2UtPmRpcl90YWJsZXNbaV0uTGVuZ3RoID09IHNmbnRfaWRbal1ba10uTGVuZ3RoICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggIWNoZWNrc3VtICkKKyAgICAgICAgICAgIGNoZWNrc3VtID0gdHRfZ2V0X3NmbnRfY2hlY2tzdW0oIGZhY2UsIGkgKTsKKworICAgICAgICAgIGlmICggc2ZudF9pZFtqXVtrXS5DaGVja1N1bSA9PSBjaGVja3N1bSApCisgICAgICAgICAgICBudW1fbWF0Y2hlZF9pZHNbal0rKzsKKworICAgICAgICAgIGlmICggbnVtX21hdGNoZWRfaWRzW2pdID09IFRSSUNLX1NGTlRfSURTX1BFUl9GQUNFICkKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICggaiA9IDA7IGogPCBUUklDS19TRk5UX0lEU19OVU1fRkFDRVM7IGorKyApCisgICAgeworICAgICAgaWYgKCAhaGFzX2N2dCAgJiYgIXNmbnRfaWRbal1bVFJJQ0tfU0ZOVF9JRF9jdnRdLkxlbmd0aCApCisgICAgICAgIG51bV9tYXRjaGVkX2lkc1tqXSArKzsKKyAgICAgIGlmICggIWhhc19mcGdtICYmICFzZm50X2lkW2pdW1RSSUNLX1NGTlRfSURfZnBnbV0uTGVuZ3RoICkKKyAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdICsrOworICAgICAgaWYgKCAhaGFzX3ByZXAgJiYgIXNmbnRfaWRbal1bVFJJQ0tfU0ZOVF9JRF9wcmVwXS5MZW5ndGggKQorICAgICAgICBudW1fbWF0Y2hlZF9pZHNbal0gKys7CisgICAgICBpZiAoIG51bV9tYXRjaGVkX2lkc1tqXSA9PSBUUklDS19TRk5UX0lEU19QRVJfRkFDRSApCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgdHRfY2hlY2tfdHJpY2t5bmVzcyggRlRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8qIEZvciBmaXJzdCwgY2hlY2sgdGhlIGZhY2UgbmFtZSBmb3IgcXVpY2sgY2hlY2suICovCisgICAgaWYgKCBmYWNlLT5mYW1pbHlfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgdHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHkoIGZhY2UtPmZhbWlseV9uYW1lICkgKQorICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICAvKiBUeXBlNDIgZm9udHMgbWF5IGxhY2sgYG5hbWUnIHRhYmxlcywgd2UgdGh1cyB0cnkgdG8gaWRlbnRpZnkgKi8KKyAgICAvKiB0cmlja3kgZm9udHMgYnkgY2hlY2tpbmcgdGhlIGNoZWNrc3VtcyBvZiBUeXBlNDItcGVyc2lzdGVudCAgKi8KKyAgICAvKiBzZm50IHRhYmxlcyAoYGN2dCcsIGBmcGdtJywgYW5kIGBwcmVwJykuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMoIChUVF9GYWNlKWZhY2UgKSApCisgICAgICByZXR1cm4gVFJVRTsKKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisKKyAgLyogQ2hlY2sgd2hldGhlciBgLm5vdGRlZicgaXMgdGhlIG9ubHkgZ2x5cGggaW4gdGhlIGBsb2NhJyB0YWJsZS4gKi8KKyAgc3RhdGljIEZUX0Jvb2wKKyAgdHRfY2hlY2tfc2luZ2xlX25vdGRlZiggRlRfRmFjZSAgdHRmYWNlICkKKyAgeworICAgIEZUX0Jvb2wgICByZXN1bHQgPSBGQUxTRTsKKworICAgIFRUX0ZhY2UgICBmYWNlID0gKFRUX0ZhY2UpdHRmYWNlOworICAgIEZUX1VJbnQgICBhc2l6ZTsKKyAgICBGVF9VTG9uZyAgaTsKKyAgICBGVF9VTG9uZyAgZ2x5cGhfaW5kZXggPSAwOworICAgIEZUX1VJbnQgICBjb3VudCAgICAgICA9IDA7CisKKworICAgIGZvciggaSA9IDA7IGkgPCBmYWNlLT5udW1fbG9jYXRpb25zOyBpKysgKQorICAgIHsKKyAgICAgIHR0X2ZhY2VfZ2V0X2xvY2F0aW9uKCBmYWNlLCBpLCAmYXNpemUgKTsKKyAgICAgIGlmICggYXNpemUgPiAwICkKKyAgICAgIHsKKyAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgaWYgKCBjb3VudCA+IDEgKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBnbHlwaF9pbmRleCA9IGk7CisgICAgICB9CisgICAgfQorCisgICAgLyogT25seSBoYXZlIGEgc2luZ2xlIG91dGxpbmUuICovCisgICAgaWYgKCBjb3VudCA9PSAxICkKKyAgICB7CisgICAgICBpZiAoIGdseXBoX2luZGV4ID09IDAgKQorICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBGSVhNRTogTmVlZCB0byB0ZXN0IGdseXBobmFtZSA9PSAubm90ZGVmID8gKi8KKyAgICAgICAgRlRfRXJyb3IgZXJyb3I7CisgICAgICAgIGNoYXIgYnVmWzhdOworCisKKyAgICAgICAgZXJyb3IgPSBGVF9HZXRfR2x5cGhfTmFtZSggdHRmYWNlLCBnbHlwaF9pbmRleCwgYnVmLCA4ICk7CisgICAgICAgIGlmICggIWVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIGJ1ZlswXSA9PSAnLicgJiYgIWZ0X3N0cm5jbXAoIGJ1ZiwgIi5ub3RkZWYiLCA4ICkgKQorICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZSBhIGdpdmVuIFRydWVUeXBlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgc291cmNlIGZvbnQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIHRoZSByZXNvdXJjZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFyYW1zICAgICA6OiBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgbmV3bHkgYnVpbHQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9pbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgdHRmYWNlLCAgICAgIC8qIFRUX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfTGlicmFyeSAgICBsaWJyYXJ5OworICAgIFNGTlRfU2VydmljZSAgc2ZudDsKKyAgICBUVF9GYWNlICAgICAgIGZhY2UgPSAoVFRfRmFjZSl0dGZhY2U7CisKKworICAgIEZUX1RSQUNFMigoICJUVEYgZHJpdmVyXG4iICkpOworCisgICAgbGlicmFyeSA9IHR0ZmFjZS0+ZHJpdmVyLT5yb290LmxpYnJhcnk7CisKKyAgICBzZm50ID0gKFNGTlRfU2VydmljZSlGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSggbGlicmFyeSwgInNmbnQiICk7CisgICAgaWYgKCAhc2ZudCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9pbml0OiBjYW5ub3QgYWNjZXNzIGBzZm50JyBtb2R1bGVcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX01vZHVsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGNyZWF0ZSBpbnB1dCBzdHJlYW0gZnJvbSByZXNvdXJjZSAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDAgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWxpZCBUcnVlVHlwZSBmaWxlICovCisgICAgZXJyb3IgPSBzZm50LT5pbml0X2ZhY2UoIHN0cmVhbSwgZmFjZSwgZmFjZV9pbmRleCwgbnVtX3BhcmFtcywgcGFyYW1zICk7CisKKyAgICAvKiBTdHJlYW0gbWF5IGhhdmUgY2hhbmdlZC4gKi8KKyAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogV2UgbXVzdCBhbHNvIGJlIGFibGUgdG8gYWNjZXB0IE1hYy9HWCBmb250cywgYXMgd2VsbCBhcyBPVCBvbmVzLiAqLworICAgIC8qIFRoZSAweDAwMDIwMDAwIHRhZyBpcyBjb21wbGV0ZWx5IHVuZG9jdW1lbnRlZDsgc29tZSBmb250cyBmcm9tICAgKi8KKyAgICAvKiBBcnBoaWMgbWFkZSBmb3IgQ2hpbmVzZSBXaW5kb3dzIDMuMSBoYXZlIHRoaXMuICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmYWNlLT5mb3JtYXRfdGFnICE9IDB4MDAwMTAwMDBMICYmICAgIC8qIE1TIGZvbnRzICAqLworICAgICAgICAgZmFjZS0+Zm9ybWF0X3RhZyAhPSAweDAwMDIwMDAwTCAmJiAgICAvKiBDSksgZm9udHMgZm9yIFdpbiAzLjEgKi8KKyAgICAgICAgIGZhY2UtPmZvcm1hdF90YWcgIT0gVFRBR190cnVlICAgKSAgICAgLyogTWFjIGZvbnRzICovCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgVFRGIGZvbnRcbiIgKSk7CisgICAgICBnb3RvIEJhZF9Gb3JtYXQ7CisgICAgfQorCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisgICAgdHRmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19ISU5URVI7CisjZW5kaWYKKworICAgIC8qIElmIHdlIGFyZSBwZXJmb3JtaW5nIGEgc2ltcGxlIGZvbnQgZm9ybWF0IGNoZWNrLCBleGl0IGltbWVkaWF0ZWx5LiAqLworICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgIC8qIExvYWQgZm9udCBkaXJlY3RvcnkgKi8KKyAgICBlcnJvciA9IHNmbnQtPmxvYWRfZmFjZSggc3RyZWFtLCBmYWNlLCBmYWNlX2luZGV4LCBudW1fcGFyYW1zLCBwYXJhbXMgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggdHRfY2hlY2tfdHJpY2t5bmVzcyggdHRmYWNlICkgKQorICAgICAgdHRmYWNlLT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19UUklDS1k7CisKKyAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9oZG14KCBmYWNlLCBzdHJlYW0gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfSVNfU0NBTEFCTEUoIHR0ZmFjZSApICkKKyAgICB7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICAgIGlmICggIXR0ZmFjZS0+aW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgICAgIGVycm9yID0gdHRfZmFjZV9sb2FkX2xvY2EoIGZhY2UsIHN0cmVhbSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9jdnQoIGZhY2UsIHN0cmVhbSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9mcGdtKCBmYWNlLCBzdHJlYW0gKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZXJyb3IgPSB0dF9mYWNlX2xvYWRfcHJlcCggZmFjZSwgc3RyZWFtICk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBzY2FsYWJsZSBmbGFnIGJhc2VkIG9uIGBsb2NhJy4gKi8KKyAgICAgIGlmICggIXR0ZmFjZS0+aW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSAmJgorICAgICAgICAgICB0dGZhY2UtPm51bV9maXhlZF9zaXplcyAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGZhY2UtPmdseXBoX2xvY2F0aW9ucyAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgdHRfY2hlY2tfc2luZ2xlX25vdGRlZiggdHRmYWNlICkgICAgICAgICApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoICJ0dF9mYWNlX2luaXQ6IgorICAgICAgICAgICAgICAgICAgICAiIE9ubHkgdGhlIGAubm90ZGVmJyBnbHlwaCBoYXMgYW4gb3V0bGluZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICIgUmVzZXR0aW5nIHNjYWxhYmxlIGZsYWcgdG8gRkFMU0UuXG4iICkpOworCisgICAgICAgIHR0ZmFjZS0+ZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1NDQUxBQkxFOworICAgICAgfQorCisjZWxzZQorCisgICAgICBpZiAoICFlcnJvciApCisgICAgICAgIGVycm9yID0gdHRfZmFjZV9sb2FkX2xvY2EoIGZhY2UsIHN0cmVhbSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9jdnQoIGZhY2UsIHN0cmVhbSApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBlcnJvciA9IHR0X2ZhY2VfbG9hZF9mcGdtKCBmYWNlLCBzdHJlYW0gKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZXJyb3IgPSB0dF9mYWNlX2xvYWRfcHJlcCggZmFjZSwgc3RyZWFtICk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBzY2FsYWJsZSBmbGFnIGJhc2VkIG9uIGBsb2NhJy4gKi8KKyAgICAgIGlmICggdHRmYWNlLT5udW1fZml4ZWRfc2l6ZXMgICAgICAgICAgJiYKKyAgICAgICAgICAgZmFjZS0+Z2x5cGhfbG9jYXRpb25zICAgICAgICAgICAgJiYKKyAgICAgICAgICAgdHRfY2hlY2tfc2luZ2xlX25vdGRlZiggdHRmYWNlICkgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKCAidHRfZmFjZV9pbml0OiIKKyAgICAgICAgICAgICAgICAgICAgIiBPbmx5IHRoZSBgLm5vdGRlZicgZ2x5cGggaGFzIGFuIG91dGxpbmUuXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAiIFJlc2V0dGluZyBzY2FsYWJsZSBmbGFnIHRvIEZBTFNFLlxuIiApKTsKKworICAgICAgICB0dGZhY2UtPmZhY2VfZmxhZ3MgJj0gfkZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTsKKyAgICAgIH0KKworI2VuZGlmCisKKyAgICB9CisKKyNpZiBkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAgICApICYmIFwKKyAgICAhZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiApCisKKyAgICB7CisgICAgICBGVF9Cb29sICB1bnBhdGVudGVkX2hpbnRpbmc7CisgICAgICBpbnQgICAgICBpOworCisKKyAgICAgIC8qIERldGVybWluZSB3aGV0aGVyIHVucGF0ZW50ZWQgaGludGluZyBpcyB0byBiZSB1c2VkIGZvciB0aGlzIGZhY2UuICovCisgICAgICB1bnBhdGVudGVkX2hpbnRpbmcgPSBGVF9CT09MCisgICAgICAgICggbGlicmFyeS0+ZGVidWdfaG9va3NbRlRfREVCVUdfSE9PS19VTlBBVEVOVEVEX0hJTlRJTkddICE9IE5VTEwgKTsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fcGFyYW1zICYmICFmYWNlLT51bnBhdGVudGVkX2hpbnRpbmc7IGkrKyApCisgICAgICAgIGlmICggcGFyYW1zW2ldLnRhZyA9PSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HICkKKyAgICAgICAgICB1bnBhdGVudGVkX2hpbnRpbmcgPSBUUlVFOworCisgICAgICBpZiAoICF1bnBhdGVudGVkX2hpbnRpbmcgKQorICAgICAgICB0dGZhY2UtPmludGVybmFsLT5pZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXIgPSBUUlVFOworICAgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICYmCisgICAgICAgICAgIVRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgIC8qIGluaXRpYWxpemUgc3RhbmRhcmQgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAqLworICAgIFRUX0luaXRfR2x5cGhfTG9hZGluZyggZmFjZSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIEJhZF9Gb3JtYXQ6CisgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluYWxpemUgYSBnaXZlbiBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIHBvaW50ZXIgdG8gdGhlIGZhY2Ugb2JqZWN0IHRvIGRlc3Ryb3kuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9mYWNlX2RvbmUoIEZUX0ZhY2UgIHR0ZmFjZSApICAgICAgICAgICAvKiBUVF9GYWNlICovCisgIHsKKyAgICBUVF9GYWNlICAgICAgIGZhY2UgPSAoVFRfRmFjZSl0dGZhY2U7CisgICAgRlRfTWVtb3J5ICAgICBtZW1vcnk7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW07CisgICAgU0ZOVF9TZXJ2aWNlICBzZm50OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybjsKKworICAgIG1lbW9yeSA9IHR0ZmFjZS0+bWVtb3J5OworICAgIHN0cmVhbSA9IHR0ZmFjZS0+c3RyZWFtOworICAgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKKworICAgIC8qIGZvciBgZXh0ZW5kZWQgVHJ1ZVR5cGUgZm9ybWF0cycgKGkuZS4gY29tcHJlc3NlZCB2ZXJzaW9ucykgKi8KKyAgICBpZiAoIGZhY2UtPmV4dHJhLmZpbmFsaXplciApCisgICAgICBmYWNlLT5leHRyYS5maW5hbGl6ZXIoIGZhY2UtPmV4dHJhLmRhdGEgKTsKKworICAgIGlmICggc2ZudCApCisgICAgICBzZm50LT5kb25lX2ZhY2UoIGZhY2UgKTsKKworICAgIC8qIGZyZWVpbmcgdGhlIGxvY2F0aW9ucyB0YWJsZSAqLworICAgIHR0X2ZhY2VfZG9uZV9sb2NhKCBmYWNlICk7CisKKyAgICB0dF9mYWNlX2ZyZWVfaGRteCggZmFjZSApOworCisgICAgLyogZnJlZWluZyB0aGUgQ1ZUICovCisgICAgRlRfRlJFRSggZmFjZS0+Y3Z0ICk7CisgICAgZmFjZS0+Y3Z0X3NpemUgPSAwOworCisgICAgLyogZnJlZWluZyB0aGUgcHJvZ3JhbXMgKi8KKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT5mb250X3Byb2dyYW0gKTsKKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT5jdnRfcHJvZ3JhbSApOworICAgIGZhY2UtPmZvbnRfcHJvZ3JhbV9zaXplID0gMDsKKyAgICBmYWNlLT5jdnRfcHJvZ3JhbV9zaXplICA9IDA7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgICAgdHRfZG9uZV9ibGVuZCggbWVtb3J5LCBmYWNlLT5ibGVuZCApOworICAgIGZhY2UtPmJsZW5kID0gTlVMTDsKKyNlbmRpZgorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9zaXplX3J1bl9mcGdtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSdW4gdGhlIGZvbnQgcHJvZ3JhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBlZGFudGljIDo6IFNldCBpZiBieXRlY29kZSBleGVjdXRpb24gc2hvdWxkIGJlIHBlZGFudGljLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X3NpemVfcnVuX2ZwZ20oIFRUX1NpemUgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHBlZGFudGljICkKKyAgeworICAgIFRUX0ZhY2UgICAgICAgICBmYWNlID0gKFRUX0ZhY2Upc2l6ZS0+cm9vdC5mYWNlOworICAgIFRUX0V4ZWNDb250ZXh0ICBleGVjOworICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKKworCisgICAgZXhlYyA9IHNpemUtPmNvbnRleHQ7CisKKyAgICBlcnJvciA9IFRUX0xvYWRfQ29udGV4dCggZXhlYywgZmFjZSwgc2l6ZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgZXhlYy0+Y2FsbFRvcCA9IDA7CisgICAgZXhlYy0+dG9wICAgICA9IDA7CisKKyAgICBleGVjLT5wZXJpb2QgICAgPSA2NDsKKyAgICBleGVjLT5waGFzZSAgICAgPSAwOworICAgIGV4ZWMtPnRocmVzaG9sZCA9IDA7CisKKyAgICBleGVjLT5pbnN0cnVjdGlvbl90cmFwID0gRkFMU0U7CisgICAgZXhlYy0+Rl9kb3RfUCAgICAgICAgICA9IDB4NDAwMEw7CisKKyAgICBleGVjLT5wZWRhbnRpY19oaW50aW5nID0gcGVkYW50aWM7CisKKyAgICB7CisgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzICAgID0gJmV4ZWMtPm1ldHJpY3M7CisgICAgICBUVF9TaXplX01ldHJpY3MqICB0dF9tZXRyaWNzID0gJmV4ZWMtPnR0X21ldHJpY3M7CisKKworICAgICAgbWV0cmljcy0+eF9wcGVtICAgPSAwOworICAgICAgbWV0cmljcy0+eV9wcGVtICAgPSAwOworICAgICAgbWV0cmljcy0+eF9zY2FsZSAgPSAwOworICAgICAgbWV0cmljcy0+eV9zY2FsZSAgPSAwOworCisgICAgICB0dF9tZXRyaWNzLT5wcGVtICA9IDA7CisgICAgICB0dF9tZXRyaWNzLT5zY2FsZSA9IDA7CisgICAgICB0dF9tZXRyaWNzLT5yYXRpbyA9IDB4MTAwMDBMOworICAgIH0KKworICAgIC8qIGFsbG93IGZvbnQgcHJvZ3JhbSBleGVjdXRpb24gKi8KKyAgICBUVF9TZXRfQ29kZVJhbmdlKCBleGVjLAorICAgICAgICAgICAgICAgICAgICAgIHR0X2NvZGVyYW5nZV9mb250LAorICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmZvbnRfcHJvZ3JhbSwKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmYWNlLT5mb250X3Byb2dyYW1fc2l6ZSApOworCisgICAgLyogZGlzYWJsZSBDVlQgYW5kIGdseXBoIHByb2dyYW1zIGNvZGVyYW5nZSAqLworICAgIFRUX0NsZWFyX0NvZGVSYW5nZSggZXhlYywgdHRfY29kZXJhbmdlX2N2dCApOworICAgIFRUX0NsZWFyX0NvZGVSYW5nZSggZXhlYywgdHRfY29kZXJhbmdlX2dseXBoICk7CisKKyAgICBpZiAoIGZhY2UtPmZvbnRfcHJvZ3JhbV9zaXplID4gMCApCisgICAgeworICAgICAgVFRfR290b19Db2RlUmFuZ2UoIGV4ZWMsIHR0X2NvZGVyYW5nZV9mb250LCAwICk7CisKKyAgICAgIEZUX1RSQUNFNCgoICJFeGVjdXRpbmcgYGZwZ20nIHRhYmxlLlxuIiApKTsKKyAgICAgIGVycm9yID0gZmFjZS0+aW50ZXJwcmV0ZXIoIGV4ZWMgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICBzaXplLT5ieXRlY29kZV9yZWFkeSA9IGVycm9yOworCisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgVFRfU2F2ZV9Db250ZXh0KCBleGVjLCBzaXplICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X3NpemVfcnVuX3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJ1biB0aGUgY29udHJvbCB2YWx1ZSBwcm9ncmFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGVkYW50aWMgOjogU2V0IGlmIGJ5dGVjb2RlIGV4ZWN1dGlvbiBzaG91bGQgYmUgcGVkYW50aWMuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfc2l6ZV9ydW5fcHJlcCggVFRfU2l6ZSAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgcGVkYW50aWMgKQorICB7CisgICAgVFRfRmFjZSAgICAgICAgIGZhY2UgPSAoVFRfRmFjZSlzaXplLT5yb290LmZhY2U7CisgICAgVFRfRXhlY0NvbnRleHQgIGV4ZWM7CisgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOworCisKKyAgICBleGVjID0gc2l6ZS0+Y29udGV4dDsKKworICAgIGVycm9yID0gVFRfTG9hZF9Db250ZXh0KCBleGVjLCBmYWNlLCBzaXplICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBleGVjLT5jYWxsVG9wID0gMDsKKyAgICBleGVjLT50b3AgICAgID0gMDsKKworICAgIGV4ZWMtPmluc3RydWN0aW9uX3RyYXAgPSBGQUxTRTsKKworICAgIGV4ZWMtPnBlZGFudGljX2hpbnRpbmcgPSBwZWRhbnRpYzsKKworICAgIFRUX1NldF9Db2RlUmFuZ2UoIGV4ZWMsCisgICAgICAgICAgICAgICAgICAgICAgdHRfY29kZXJhbmdlX2N2dCwKKyAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5jdnRfcHJvZ3JhbSwKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmYWNlLT5jdnRfcHJvZ3JhbV9zaXplICk7CisKKyAgICBUVF9DbGVhcl9Db2RlUmFuZ2UoIGV4ZWMsIHR0X2NvZGVyYW5nZV9nbHlwaCApOworCisgICAgaWYgKCBmYWNlLT5jdnRfcHJvZ3JhbV9zaXplID4gMCApCisgICAgeworICAgICAgVFRfR290b19Db2RlUmFuZ2UoIGV4ZWMsIHR0X2NvZGVyYW5nZV9jdnQsIDAgKTsKKworICAgICAgRlRfVFJBQ0U0KCggIkV4ZWN1dGluZyBgcHJlcCcgdGFibGUuXG4iICkpOworCisgICAgICBlcnJvciA9IGZhY2UtPmludGVycHJldGVyKCBleGVjICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisgICAgc2l6ZS0+Y3Z0X3JlYWR5ID0gZXJyb3I7CisKKyAgICAvKiBVTkRPQ1VNRU5URUQhICBUaGUgTVMgcmFzdGVyaXplciBkb2Vzbid0IGFsbG93IHRoZSBmb2xsb3dpbmcgKi8KKyAgICAvKiBncmFwaGljcyBzdGF0ZSB2YXJpYWJsZXMgdG8gYmUgbW9kaWZpZWQgYnkgdGhlIENWVCBwcm9ncmFtLiAgKi8KKworICAgIGV4ZWMtPkdTLmR1YWxWZWN0b3IueCA9IDB4NDAwMDsKKyAgICBleGVjLT5HUy5kdWFsVmVjdG9yLnkgPSAwOworICAgIGV4ZWMtPkdTLnByb2pWZWN0b3IueCA9IDB4NDAwMDsKKyAgICBleGVjLT5HUy5wcm9qVmVjdG9yLnkgPSAweDA7CisgICAgZXhlYy0+R1MuZnJlZVZlY3Rvci54ID0gMHg0MDAwOworICAgIGV4ZWMtPkdTLmZyZWVWZWN0b3IueSA9IDB4MDsKKworICAgIGV4ZWMtPkdTLnJwMCA9IDA7CisgICAgZXhlYy0+R1MucnAxID0gMDsKKyAgICBleGVjLT5HUy5ycDIgPSAwOworCisgICAgZXhlYy0+R1MuZ2VwMCA9IDE7CisgICAgZXhlYy0+R1MuZ2VwMSA9IDE7CisgICAgZXhlYy0+R1MuZ2VwMiA9IDE7CisKKyAgICBleGVjLT5HUy5sb29wID0gMTsKKworICAgIC8qIHNhdmUgYXMgZGVmYXVsdCBncmFwaGljcyBzdGF0ZSAqLworICAgIHNpemUtPkdTID0gZXhlYy0+R1M7CisKKyAgICBUVF9TYXZlX0NvbnRleHQoIGV4ZWMsIHNpemUgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdHRfc2l6ZV9kb25lX2J5dGVjb2RlKCBGVF9TaXplICBmdHNpemUgKQorICB7CisgICAgVFRfU2l6ZSAgICBzaXplICAgPSAoVFRfU2l6ZSlmdHNpemU7CisgICAgVFRfRmFjZSAgICBmYWNlICAgPSAoVFRfRmFjZSlmdHNpemUtPmZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIGlmICggc2l6ZS0+Y29udGV4dCApCisgICAgeworICAgICAgVFRfRG9uZV9Db250ZXh0KCBzaXplLT5jb250ZXh0ICk7CisgICAgICBzaXplLT5jb250ZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICBGVF9GUkVFKCBzaXplLT5jdnQgKTsKKyAgICBzaXplLT5jdnRfc2l6ZSA9IDA7CisKKyAgICAvKiBmcmVlIHN0b3JhZ2UgYXJlYSAqLworICAgIEZUX0ZSRUUoIHNpemUtPnN0b3JhZ2UgKTsKKyAgICBzaXplLT5zdG9yYWdlX3NpemUgPSAwOworCisgICAgLyogdHdpbGlnaHQgem9uZSAqLworICAgIHR0X2dseXBoem9uZV9kb25lKCAmc2l6ZS0+dHdpbGlnaHQgKTsKKworICAgIEZUX0ZSRUUoIHNpemUtPmZ1bmN0aW9uX2RlZnMgKTsKKyAgICBGVF9GUkVFKCBzaXplLT5pbnN0cnVjdGlvbl9kZWZzICk7CisKKyAgICBzaXplLT5udW1fZnVuY3Rpb25fZGVmcyAgICA9IDA7CisgICAgc2l6ZS0+bWF4X2Z1bmN0aW9uX2RlZnMgICAgPSAwOworICAgIHNpemUtPm51bV9pbnN0cnVjdGlvbl9kZWZzID0gMDsKKyAgICBzaXplLT5tYXhfaW5zdHJ1Y3Rpb25fZGVmcyA9IDA7CisKKyAgICBzaXplLT5tYXhfZnVuYyA9IDA7CisgICAgc2l6ZS0+bWF4X2lucyAgPSAwOworCisgICAgc2l6ZS0+Ynl0ZWNvZGVfcmVhZHkgPSAtMTsKKyAgICBzaXplLT5jdnRfcmVhZHkgICAgICA9IC0xOworICB9CisKKworICAvKiBJbml0aWFsaXplIGJ5dGVjb2RlLXJlbGF0ZWQgZmllbGRzIGluIHRoZSBzaXplIG9iamVjdC4gICAgICAgKi8KKyAgLyogV2UgZG8gdGhpcyBvbmx5IGlmIGJ5dGVjb2RlIGludGVycHJldGF0aW9uIGlzIHJlYWxseSBuZWVkZWQuICovCisgIHN0YXRpYyBGVF9FcnJvcgorICB0dF9zaXplX2luaXRfYnl0ZWNvZGUoIEZUX1NpemUgIGZ0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICBwZWRhbnRpYyApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIFRUX1NpemUgICAgc2l6ZSA9IChUVF9TaXplKWZ0c2l6ZTsKKyAgICBUVF9GYWNlICAgIGZhY2UgPSAoVFRfRmFjZSlmdHNpemUtPmZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIEZUX1VTaG9ydCAgICAgICBuX3R3aWxpZ2h0OworICAgIFRUX01heFByb2ZpbGUqICBtYXhwID0gJmZhY2UtPm1heF9wcm9maWxlOworCisKKyAgICAvKiBjbGVhbiB1cCBieXRlY29kZSByZWxhdGVkIGRhdGEgKi8KKyAgICBGVF9GUkVFKCBzaXplLT5mdW5jdGlvbl9kZWZzICk7CisgICAgRlRfRlJFRSggc2l6ZS0+aW5zdHJ1Y3Rpb25fZGVmcyApOworICAgIEZUX0ZSRUUoIHNpemUtPmN2dCApOworICAgIEZUX0ZSRUUoIHNpemUtPnN0b3JhZ2UgKTsKKworICAgIGlmICggc2l6ZS0+Y29udGV4dCApCisgICAgICBUVF9Eb25lX0NvbnRleHQoIHNpemUtPmNvbnRleHQgKTsKKyAgICB0dF9nbHlwaHpvbmVfZG9uZSggJnNpemUtPnR3aWxpZ2h0ICk7CisKKyAgICBzaXplLT5ieXRlY29kZV9yZWFkeSA9IC0xOworICAgIHNpemUtPmN2dF9yZWFkeSAgICAgID0gLTE7CisKKyAgICBzaXplLT5jb250ZXh0ID0gVFRfTmV3X0NvbnRleHQoIChUVF9Ecml2ZXIpZmFjZS0+cm9vdC5kcml2ZXIgKTsKKworICAgIHNpemUtPm1heF9mdW5jdGlvbl9kZWZzICAgID0gbWF4cC0+bWF4RnVuY3Rpb25EZWZzOworICAgIHNpemUtPm1heF9pbnN0cnVjdGlvbl9kZWZzID0gbWF4cC0+bWF4SW5zdHJ1Y3Rpb25EZWZzOworCisgICAgc2l6ZS0+bnVtX2Z1bmN0aW9uX2RlZnMgICAgPSAwOworICAgIHNpemUtPm51bV9pbnN0cnVjdGlvbl9kZWZzID0gMDsKKworICAgIHNpemUtPm1heF9mdW5jID0gMDsKKyAgICBzaXplLT5tYXhfaW5zICA9IDA7CisKKyAgICBzaXplLT5jdnRfc2l6ZSAgICAgPSBmYWNlLT5jdnRfc2l6ZTsKKyAgICBzaXplLT5zdG9yYWdlX3NpemUgPSBtYXhwLT5tYXhTdG9yYWdlOworCisgICAgLyogU2V0IGRlZmF1bHQgbWV0cmljcyAqLworICAgIHsKKyAgICAgIFRUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgPSAmc2l6ZS0+dHRtZXRyaWNzOworCisKKyAgICAgIG1ldHJpY3MtPnJvdGF0ZWQgICA9IEZBTFNFOworICAgICAgbWV0cmljcy0+c3RyZXRjaGVkID0gRkFMU0U7CisKKyAgICAgIC8qIHNldCBkZWZhdWx0IGVuZ2luZSBjb21wZW5zYXRpb24gKi8KKyAgICAgIG1ldHJpY3MtPmNvbXBlbnNhdGlvbnNbMF0gPSAwOyAgIC8qIGdyYXkgICAgICovCisgICAgICBtZXRyaWNzLT5jb21wZW5zYXRpb25zWzFdID0gMDsgICAvKiBibGFjayAgICAqLworICAgICAgbWV0cmljcy0+Y29tcGVuc2F0aW9uc1syXSA9IDA7ICAgLyogd2hpdGUgICAgKi8KKyAgICAgIG1ldHJpY3MtPmNvbXBlbnNhdGlvbnNbM10gPSAwOyAgIC8qIHJlc2VydmVkICovCisgICAgfQorCisgICAgLyogYWxsb2NhdGUgZnVuY3Rpb24gZGVmcywgaW5zdHJ1Y3Rpb24gZGVmcywgY3Z0LCBhbmQgc3RvcmFnZSBhcmVhICovCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHNpemUtPmZ1bmN0aW9uX2RlZnMsICAgIHNpemUtPm1heF9mdW5jdGlvbl9kZWZzICAgICkgfHwKKyAgICAgICAgIEZUX05FV19BUlJBWSggc2l6ZS0+aW5zdHJ1Y3Rpb25fZGVmcywgc2l6ZS0+bWF4X2luc3RydWN0aW9uX2RlZnMgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCBzaXplLT5jdnQsICAgICAgICAgICAgICBzaXplLT5jdnRfc2l6ZSAgICAgICAgICAgICApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIHNpemUtPnN0b3JhZ2UsICAgICAgICAgIHNpemUtPnN0b3JhZ2Vfc2l6ZSAgICAgICAgICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogcmVzZXJ2ZSB0d2lsaWdodCB6b25lICovCisgICAgbl90d2lsaWdodCA9IG1heHAtPm1heFR3aWxpZ2h0UG9pbnRzOworCisgICAgLyogdGhlcmUgYXJlIDQgcGhhbnRvbSBwb2ludHMgKGRvIHdlIG5lZWQgdGhpcz8pICovCisgICAgbl90d2lsaWdodCArPSA0OworCisgICAgZXJyb3IgPSB0dF9nbHlwaHpvbmVfbmV3KCBtZW1vcnksIG5fdHdpbGlnaHQsIDAsICZzaXplLT50d2lsaWdodCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2l6ZS0+dHdpbGlnaHQubl9wb2ludHMgPSBuX3R3aWxpZ2h0OworCisgICAgc2l6ZS0+R1MgPSB0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlOworCisgICAgLyogc2V0IGBmYWNlLT5pbnRlcnByZXRlcicgYWNjb3JkaW5nIHRvIHRoZSBkZWJ1ZyBob29rIHByZXNlbnQgKi8KKyAgICB7CisgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5ID0gZmFjZS0+cm9vdC5kcml2ZXItPnJvb3QubGlicmFyeTsKKworCisgICAgICBmYWNlLT5pbnRlcnByZXRlciA9IChUVF9JbnRlcnByZXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5kZWJ1Z19ob29rc1tGVF9ERUJVR19IT09LX1RSVUVUWVBFXTsKKyAgICAgIGlmICggIWZhY2UtPmludGVycHJldGVyICkKKyAgICAgICAgZmFjZS0+aW50ZXJwcmV0ZXIgPSAoVFRfSW50ZXJwcmV0ZXIpVFRfUnVuSW5zOworICAgIH0KKworICAgIC8qIEZpbmUsIG5vdyBydW4gdGhlIGZvbnQgcHJvZ3JhbSEgKi8KKyAgICBlcnJvciA9IHR0X3NpemVfcnVuX2ZwZ20oIHNpemUsIHBlZGFudGljICk7CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHR0X3NpemVfZG9uZV9ieXRlY29kZSggZnRzaXplICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9zaXplX3JlYWR5X2J5dGVjb2RlKCBUVF9TaXplICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICBwZWRhbnRpYyApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIGlmICggc2l6ZS0+Ynl0ZWNvZGVfcmVhZHkgPCAwICkKKyAgICAgIGVycm9yID0gdHRfc2l6ZV9pbml0X2J5dGVjb2RlKCAoRlRfU2l6ZSlzaXplLCBwZWRhbnRpYyApOworCisgICAgaWYgKCBlcnJvciB8fCBzaXplLT5ieXRlY29kZV9yZWFkeSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiByZXNjYWxlIENWVCB3aGVuIG5lZWRlZCAqLworICAgIGlmICggc2l6ZS0+Y3Z0X3JlYWR5IDwgMCApCisgICAgeworICAgICAgRlRfVUludCAgaTsKKyAgICAgIFRUX0ZhY2UgIGZhY2UgPSAoVFRfRmFjZSlzaXplLT5yb290LmZhY2U7CisKKworICAgICAgLyogU2NhbGUgdGhlIGN2dCB2YWx1ZXMgdG8gdGhlIG5ldyBwcGVtLiAgICAgICAgICAqLworICAgICAgLyogV2UgdXNlIGJ5IGRlZmF1bHQgdGhlIHkgcHBlbSB0byBzY2FsZSB0aGUgQ1ZULiAqLworICAgICAgZm9yICggaSA9IDA7IGkgPCBzaXplLT5jdnRfc2l6ZTsgaSsrICkKKyAgICAgICAgc2l6ZS0+Y3Z0W2ldID0gRlRfTXVsRml4KCBmYWNlLT5jdnRbaV0sIHNpemUtPnR0bWV0cmljcy5zY2FsZSApOworCisgICAgICAvKiBhbGwgdHdpbGlnaHQgcG9pbnRzIGFyZSBvcmlnaW5hbGx5IHplcm8gKi8KKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgKEZUX1VJbnQpc2l6ZS0+dHdpbGlnaHQubl9wb2ludHM7IGkrKyApCisgICAgICB7CisgICAgICAgIHNpemUtPnR3aWxpZ2h0Lm9yZ1tpXS54ID0gMDsKKyAgICAgICAgc2l6ZS0+dHdpbGlnaHQub3JnW2ldLnkgPSAwOworICAgICAgICBzaXplLT50d2lsaWdodC5jdXJbaV0ueCA9IDA7CisgICAgICAgIHNpemUtPnR3aWxpZ2h0LmN1cltpXS55ID0gMDsKKyAgICAgIH0KKworICAgICAgLyogY2xlYXIgc3RvcmFnZSBhcmVhICovCisgICAgICBmb3IgKCBpID0gMDsgaSA8IChGVF9VSW50KXNpemUtPnN0b3JhZ2Vfc2l6ZTsgaSsrICkKKyAgICAgICAgc2l6ZS0+c3RvcmFnZVtpXSA9IDA7CisKKyAgICAgIHNpemUtPkdTID0gdHRfZGVmYXVsdF9ncmFwaGljc19zdGF0ZTsKKworICAgICAgZXJyb3IgPSB0dF9zaXplX3J1bl9wcmVwKCBzaXplLCBwZWRhbnRpYyApOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisjZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9zaXplX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbml0aWFsaXplIGEgbmV3IFRydWVUeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplIDo6IEEgaGFuZGxlIHRvIHRoZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9zaXplX2luaXQoIEZUX1NpemUgIHR0c2l6ZSApICAgICAgICAgICAvKiBUVF9TaXplICovCisgIHsKKyAgICBUVF9TaXplICAgc2l6ZSAgPSAoVFRfU2l6ZSl0dHNpemU7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgICBzaXplLT5ieXRlY29kZV9yZWFkeSA9IC0xOworICAgIHNpemUtPmN2dF9yZWFkeSAgICAgID0gLTE7CisjZW5kaWYKKworICAgIHNpemUtPnR0bWV0cmljcy52YWxpZCA9IEZBTFNFOworICAgIHNpemUtPnN0cmlrZV9pbmRleCAgICA9IDB4RkZGRkZGRkZVTDsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfc2l6ZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIFRydWVUeXBlIHNpemUgb2JqZWN0IGZpbmFsaXplci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9zaXplX2RvbmUoIEZUX1NpemUgIHR0c2l6ZSApICAgICAgICAgICAvKiBUVF9TaXplICovCisgIHsKKyAgICBUVF9TaXplICBzaXplID0gKFRUX1NpemUpdHRzaXplOworCisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgICB0dF9zaXplX2RvbmVfYnl0ZWNvZGUoIHR0c2l6ZSApOworI2VuZGlmCisKKyAgICBzaXplLT50dG1ldHJpY3MudmFsaWQgPSBGQUxTRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfc2l6ZV9yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmVzZXQgYSBUcnVlVHlwZSBzaXplIHdoZW4gcmVzb2x1dGlvbnMgYW5kIGNoYXJhY3RlciBkaW1lbnNpb25zICAgICovCisgIC8qICAgIGhhdmUgYmVlbiBjaGFuZ2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X3NpemVfcmVzZXQoIFRUX1NpemUgIHNpemUgKQorICB7CisgICAgVFRfRmFjZSAgICAgICAgICAgZmFjZTsKKyAgICBGVF9FcnJvciAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzOworCisKKyAgICBzaXplLT50dG1ldHJpY3MudmFsaWQgPSBGQUxTRTsKKworICAgIGZhY2UgPSAoVFRfRmFjZSlzaXplLT5yb290LmZhY2U7CisKKyAgICBtZXRyaWNzID0gJnNpemUtPm1ldHJpY3M7CisKKyAgICAvKiBjb3B5IHRoZSByZXN1bHQgZnJvbSBiYXNlIGxheWVyICovCisgICAgKm1ldHJpY3MgPSBzaXplLT5yb290Lm1ldHJpY3M7CisKKyAgICBpZiAoIG1ldHJpY3MtPnhfcHBlbSA8IDEgfHwgbWV0cmljcy0+eV9wcGVtIDwgMSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfUFBlbSApOworCisgICAgLyogVGhpcyBiaXQgZmxhZywgaWYgc2V0LCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHBlbXMgbXVzdCBiZSAgICAgICAqLworICAgIC8qIHJvdW5kZWQgdG8gaW50ZWdlcnMuICBOZWFybHkgYWxsIFRydWVUeXBlIGZvbnRzIGhhdmUgdGhpcyBiaXQgKi8KKyAgICAvKiBzZXQsIGFzIGhpbnRpbmcgd29uJ3Qgd29yayByZWFsbHkgd2VsbCBvdGhlcndpc2UuICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZmFjZS0+aGVhZGVyLkZsYWdzICYgOCApCisgICAgeworICAgICAgbWV0cmljcy0+eF9zY2FsZSA9IEZUX0RpdkZpeCggbWV0cmljcy0+eF9wcGVtIDw8IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LnVuaXRzX3Blcl9FTSApOworICAgICAgbWV0cmljcy0+eV9zY2FsZSA9IEZUX0RpdkZpeCggbWV0cmljcy0+eV9wcGVtIDw8IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LnVuaXRzX3Blcl9FTSApOworCisgICAgICBtZXRyaWNzLT5hc2NlbmRlciA9CisgICAgICAgIEZUX1BJWF9ST1VORCggRlRfTXVsRml4KCBmYWNlLT5yb290LmFzY2VuZGVyLCBtZXRyaWNzLT55X3NjYWxlICkgKTsKKyAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9CisgICAgICAgIEZUX1BJWF9ST1VORCggRlRfTXVsRml4KCBmYWNlLT5yb290LmRlc2NlbmRlciwgbWV0cmljcy0+eV9zY2FsZSApICk7CisgICAgICBtZXRyaWNzLT5oZWlnaHQgPQorICAgICAgICBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+cm9vdC5oZWlnaHQsIG1ldHJpY3MtPnlfc2NhbGUgKSApOworICAgICAgbWV0cmljcy0+bWF4X2FkdmFuY2UgPQorICAgICAgICBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+cm9vdC5tYXhfYWR2YW5jZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUgKSApOworICAgIH0KKworICAgIC8qIGNvbXB1dGUgbmV3IHRyYW5zZm9ybWF0aW9uICovCisgICAgaWYgKCBtZXRyaWNzLT54X3BwZW0gPj0gbWV0cmljcy0+eV9wcGVtICkKKyAgICB7CisgICAgICBzaXplLT50dG1ldHJpY3Muc2NhbGUgICA9IG1ldHJpY3MtPnhfc2NhbGU7CisgICAgICBzaXplLT50dG1ldHJpY3MucHBlbSAgICA9IG1ldHJpY3MtPnhfcHBlbTsKKyAgICAgIHNpemUtPnR0bWV0cmljcy54X3JhdGlvID0gMHgxMDAwMEw7CisgICAgICBzaXplLT50dG1ldHJpY3MueV9yYXRpbyA9IEZUX0RpdkZpeCggbWV0cmljcy0+eV9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfcHBlbSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2l6ZS0+dHRtZXRyaWNzLnNjYWxlICAgPSBtZXRyaWNzLT55X3NjYWxlOworICAgICAgc2l6ZS0+dHRtZXRyaWNzLnBwZW0gICAgPSBtZXRyaWNzLT55X3BwZW07CisgICAgICBzaXplLT50dG1ldHJpY3MueF9yYXRpbyA9IEZUX0RpdkZpeCggbWV0cmljcy0+eF9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfcHBlbSApOworICAgICAgc2l6ZS0+dHRtZXRyaWNzLnlfcmF0aW8gPSAweDEwMDAwTDsKKyAgICB9CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKyAgICBzaXplLT5jdnRfcmVhZHkgPSAtMTsKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgIGlmICggIWVycm9yICkKKyAgICAgIHNpemUtPnR0bWV0cmljcy52YWxpZCA9IFRSVUU7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2RyaXZlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluaXRpYWxpemUgYSBnaXZlbiBUcnVlVHlwZSBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRyaXZlciA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGRyaXZlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIHR0ZHJpdmVyICkgICAgIC8qIFRUX0RyaXZlciAqLworICB7CisKKyNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKKworICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcil0dGRyaXZlcjsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7CisjZWxzZQorICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU7CisjZW5kaWYKKworI2Vsc2UgLyogIVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisgICAgRlRfVU5VU0VEKCB0dGRyaXZlciApOworCisjZW5kaWYgLyogIVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZHJpdmVyX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRmluYWxpemUgYSBnaXZlbiBUcnVlVHlwZSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZHJpdmVyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgVHJ1ZVR5cGUgZHJpdmVyLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9kcml2ZXJfZG9uZSggRlRfTW9kdWxlICB0dGRyaXZlciApICAgICAvKiBUVF9Ecml2ZXIgKi8KKyAgeworICAgIEZUX1VOVVNFRCggdHRkcml2ZXIgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfc2xvdF9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZSBhIG5ldyBzbG90IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2xvdCA6OiBBIGhhbmRsZSB0byB0aGUgc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfc2xvdF9pbml0KCBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgcmV0dXJuIEZUX0dseXBoTG9hZGVyX0NyZWF0ZUV4dHJhKCBzbG90LT5pbnRlcm5hbC0+bG9hZGVyICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmggYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzQxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCkBAIC0wLDAgKzEsNDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dG9ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVE9CSlNfSF9fCisjZGVmaW5lIF9fVFRPQkpTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9Ecml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIGRyaXZlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IFRUX0RyaXZlclJlY18qICBUVF9Ecml2ZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9JbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IFRUX1NpemVSZWNfKiAgVFRfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgZ2x5cGggc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgaXMgYSBkaXJlY3QgdHlwZWRlZiBvZiBGVF9HbHlwaFNsb3QsIGFzIHRoZXJlIGlzIG5vdGhpbmcgICAgICAqLworICAvKiAgICBzcGVjaWZpYyBhYm91dCB0aGUgVHJ1ZVR5cGUgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgRlRfR2x5cGhTbG90ICBUVF9HbHlwaFNsb3Q7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9HcmFwaGljc1N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgVHJ1ZVR5cGUgZ3JhcGhpY3Mgc3RhdGUgdXNlZCBkdXJpbmcgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9HcmFwaGljc1N0YXRlXworICB7CisgICAgRlRfVVNob3J0ICAgICAgcnAwOworICAgIEZUX1VTaG9ydCAgICAgIHJwMTsKKyAgICBGVF9VU2hvcnQgICAgICBycDI7CisKKyAgICBGVF9Vbml0VmVjdG9yICBkdWFsVmVjdG9yOworICAgIEZUX1VuaXRWZWN0b3IgIHByb2pWZWN0b3I7CisgICAgRlRfVW5pdFZlY3RvciAgZnJlZVZlY3RvcjsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgRlRfQm9vbCAgICAgICAgYm90aF94X2F4aXM7CisjZW5kaWYKKworICAgIEZUX0xvbmcgICAgICAgIGxvb3A7CisgICAgRlRfRjI2RG90NiAgICAgbWluaW11bV9kaXN0YW5jZTsKKyAgICBGVF9JbnQgICAgICAgICByb3VuZF9zdGF0ZTsKKworICAgIEZUX0Jvb2wgICAgICAgIGF1dG9fZmxpcDsKKyAgICBGVF9GMjZEb3Q2ICAgICBjb250cm9sX3ZhbHVlX2N1dGluOworICAgIEZUX0YyNkRvdDYgICAgIHNpbmdsZV93aWR0aF9jdXRpbjsKKyAgICBGVF9GMjZEb3Q2ICAgICBzaW5nbGVfd2lkdGhfdmFsdWU7CisgICAgRlRfVVNob3J0ICAgICAgZGVsdGFfYmFzZTsKKyAgICBGVF9VU2hvcnQgICAgICBkZWx0YV9zaGlmdDsKKworICAgIEZUX0J5dGUgICAgICAgIGluc3RydWN0X2NvbnRyb2w7CisgICAgLyogQWNjb3JkaW5nIHRvIEdyZWcgSGl0Y2hjb2NrIGZyb20gTWljcm9zb2Z0LCB0aGUgYHNjYW5fY29udHJvbCcgICAgICovCisgICAgLyogdmFyaWFibGUgYXMgZG9jdW1lbnRlZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBpcyBhIDMyLWJpdCAgICovCisgICAgLyogaW50ZWdlcjsgdGhlIGhpZ2gtd29yZCBwYXJ0IGhvbGRzIHRoZSBTQ0FOVFlQRSB2YWx1ZSwgdGhlIGxvdy13b3JkICovCisgICAgLyogcGFydCB0aGUgU0NBTkNUUkwgdmFsdWUuICBXZSBzZXBhcmF0ZSBpdCBpbnRvIHR3byBmaWVsZHMuICAgICAgICAgICovCisgICAgRlRfQm9vbCAgICAgICAgc2Nhbl9jb250cm9sOworICAgIEZUX0ludCAgICAgICAgIHNjYW5fdHlwZTsKKworICAgIEZUX1VTaG9ydCAgICAgIGdlcDA7CisgICAgRlRfVVNob3J0ICAgICAgZ2VwMTsKKyAgICBGVF9VU2hvcnQgICAgICBnZXAyOworCisgIH0gVFRfR3JhcGhpY3NTdGF0ZTsKKworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9nbHlwaHpvbmVfZG9uZSggVFRfR2x5cGhab25lICB6b25lICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZ2x5cGh6b25lX25ldyggRlRfTWVtb3J5ICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgbWF4UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICBGVF9TaG9ydCAgICAgIG1heENvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgIHpvbmUgKTsKKworI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBFWEVDVVRJT04gU1VCVEFCTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoZXNlIHN1Yi10YWJsZXMgcmVsYXRlIHRvIGluc3RydWN0aW9uIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIFRUX01BWF9DT0RFX1JBTkdFUyAgMworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVyZSBjYW4gb25seSBiZSAzIGFjdGl2ZSBjb2RlIHJhbmdlcyBhdCBvbmNlOiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAtIHRoZSBGb250IFByb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgLSB0aGUgQ1ZUIFByb2dyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gYSBnbHlwaCdzIGluc3RydWN0aW9ucyBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgVFRfQ29kZVJhbmdlX1RhZ18KKyAgeworICAgIHR0X2NvZGVyYW5nZV9ub25lID0gMCwKKyAgICB0dF9jb2RlcmFuZ2VfZm9udCwKKyAgICB0dF9jb2RlcmFuZ2VfY3Z0LAorICAgIHR0X2NvZGVyYW5nZV9nbHlwaAorCisgIH0gVFRfQ29kZVJhbmdlX1RhZzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBUVF9Db2RlUmFuZ2VfCisgIHsKKyAgICBGVF9CeXRlKiAgYmFzZTsKKyAgICBGVF9Mb25nICAgc2l6ZTsKKworICB9IFRUX0NvZGVSYW5nZTsKKworICB0eXBlZGVmIFRUX0NvZGVSYW5nZSAgVFRfQ29kZVJhbmdlVGFibGVbVFRfTUFYX0NPREVfUkFOR0VTXTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lcyBhIGZ1bmN0aW9uL2luc3RydWN0aW9uIGRlZmluaXRpb24gcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfRGVmUmVjb3JkXworICB7CisgICAgRlRfSW50ICAgIHJhbmdlOyAgICAgICAgICAvKiBpbiB3aGljaCBjb2RlIHJhbmdlIGlzIGl0IGxvY2F0ZWQ/ICAgICAqLworICAgIEZUX0xvbmcgICBzdGFydDsgICAgICAgICAgLyogd2hlcmUgZG9lcyBpdCBzdGFydD8gICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Mb25nICAgZW5kOyAgICAgICAgICAgIC8qIHdoZXJlIGRvZXMgaXQgZW5kPyAgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfVUludCAgIG9wYzsgICAgICAgICAgICAvKiBmdW5jdGlvbiAjLCBvciBpbnN0cnVjdGlvbiBjb2RlICAgICAgICAqLworICAgIEZUX0Jvb2wgICBhY3RpdmU7ICAgICAgICAgLyogaXMgaXQgYWN0aXZlPyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgaW5saW5lX2RlbHRhOyAgIC8qIGlzIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBpbmxpbmUgZGVsdGE/ICovCisgICAgRlRfVUxvbmcgIHNwaF9mZGVmX2ZsYWdzOyAvKiBmbGFncyB0byBpZGVudGlmeSBzcGVjaWFsIGZ1bmN0aW9ucyAgICAqLworCisgIH0gVFRfRGVmUmVjb3JkLCAqVFRfRGVmQXJyYXk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN1YmdseXBoIHRyYW5zZm9ybWF0aW9uIHJlY29yZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1RyYW5zZm9ybV8KKyAgeworICAgIEZUX0ZpeGVkICAgIHh4LCB4eTsgICAgIC8qIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBjb2VmZmljaWVudHMgKi8KKyAgICBGVF9GaXhlZCAgICB5eCwgeXk7CisgICAgRlRfRjI2RG90NiAgb3gsIG95OyAgICAgLyogb2Zmc2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIH0gVFRfVHJhbnNmb3JtOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIG5vdGUgcmVnYXJkaW5nIG5vbi1zcXVhcmVkIHBpeGVsczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIChUaGlzIHRleHQgd2lsbCBwcm9iYWJseSBnbyBpbnRvIHNvbWUgZG9jcyBhdCBzb21lIHRpbWU7IGZvciBub3csIGl0ICAqLworICAvKiBpcyBrZXB0IGhlcmUgdG8gZXhwbGFpbiBzb21lIGRlZmluaXRpb25zIGluIHRoZSBUVF9TaXplX01ldHJpY3MgICAgICAgKi8KKyAgLyogcmVjb3JkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgQ1ZUIGlzIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdmFsdWVzIHRoYXQgY29udHJvbCAgICAgKi8KKyAgLyogY2VydGFpbiBpbXBvcnRhbnQgY2hhcmFjdGVyaXN0aWNzIGluIGEgZm9udCwgbGlrZSB0aGUgaGVpZ2h0IG9mIGFsbCAgICovCisgIC8qIGNhcGl0YWxzLCBhbGwgbG93ZXJjYXNlIGxldHRlciwgZGVmYXVsdCBzcGFjaW5nIG9yIHN0ZW0gd2lkdGgvaGVpZ2h0LiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlc2UgdmFsdWVzIGFyZSBmb3VuZCBpbiBGVW5pdHMgaW4gdGhlIGZvbnQgZmlsZSwgYW5kIG11c3QgYmUgc2NhbGVkICovCisgIC8qIHRvIHBpeGVsIGNvb3JkaW5hdGVzIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBDVlQgYW5kIGdseXBoIHByb2dyYW1zLiAqLworICAvKiBVbmZvcnR1bmF0ZWx5LCB3aGVuIHVzaW5nIGRpc3RpbmN0IHggYW5kIHkgcmVzb2x1dGlvbnMgKG9yIGRpc3RpbmN0IHggKi8KKyAgLyogYW5kIHkgcG9pbnRzaXplcyksIHRoZXJlIGFyZSB0d28gcG9zc2libGUgc2NhbGluZ3MuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBIGZpcnN0IHRyeSB3YXMgdG8gaW1wbGVtZW50IGEgYGxhenknIHNjaGVtZSB3aGVyZSBhbGwgdmFsdWVzIHdlcmUgICAgKi8KKyAgLyogc2NhbGVkIHdoZW4gZmlyc3QgdXNlZC4gIEhvd2V2ZXIsIHdoaWxlIHNvbWUgdmFsdWVzIGFyZSBhbHdheXMgdXNlZCAgICovCisgIC8qIGluIHRoZSBzYW1lIGRpcmVjdGlvbiwgc29tZSBvdGhlcnMgYXJlIHVzZWQgdW5kZXIgbWFueSBkaWZmZXJlbnQgICAgICAqLworICAvKiBjaXJjdW1zdGFuY2VzIGFuZCBvcmllbnRhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEkgaGF2ZSBmb3VuZCBhIHNpbXBsZXIgd2F5IHRvIGRvIHRoZSBzYW1lLCBhbmQgaXQgZXZlbiBzZWVtcyB0byB3b3JrICAqLworICAvKiBpbiBtb3N0IG9mIHRoZSBjYXNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gQWxsIENWVCB2YWx1ZXMgYXJlIHNjYWxlZCB0byB0aGUgbWF4aW11bSBwcGVtIHNpemUuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBXaGVuIHBlcmZvcm1pbmcgYSByZWFkIG9yIHdyaXRlIGluIHRoZSBDVlQsIGEgcmF0aW8gZmFjdG9yIGlzIHVzZWQgICovCisgIC8qICAgdG8gcGVyZm9ybSBhZGVxdWF0ZSBzY2FsaW5nLiAgRXhhbXBsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHhfcHBlbSA9IDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICB5X3BwZW0gPSAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBXZSBjaG9vc2UgcHBlbSA9IHhfcHBlbSA9IDE0IGFzIHRoZSBDVlQgc2NhbGluZyBzaXplLiAgQWxsIGN2dCAgICAgICovCisgIC8qICAgZW50cmllcyBhcmUgc2NhbGVkIHRvIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHhfcmF0aW8gPSAxLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICB5X3JhdGlvID0geV9wcGVtL3BwZW0gKDwgMS4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBXZSBjb21wdXRlIHRoZSBjdXJyZW50IHJhdGlvIGxpa2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gSWYgcHJvalZlY3RvciBpcyBob3Jpem9udGFsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgcmF0aW8gPSB4X3JhdGlvID0gMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gaWYgcHJvalZlY3RvciBpcyB2ZXJ0aWNhbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgcmF0aW8gPSB5X3JhdGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC0gZWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgcmF0aW8gPSBzcXJ0KCAocHJvai54ICogeF9yYXRpbykgXiAyICsgKHByb2oueSAqIHlfcmF0aW8pIF4gMiApICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFJlYWRpbmcgYSBjdnQgdmFsdWUgcmV0dXJucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHJhdGlvICogY3Z0W2luZGV4XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFdyaXRpbmcgYSBjdnQgdmFsdWUgaW4gcGl4ZWxzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGN2dFtpbmRleF0gLyByYXRpbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSBjdXJyZW50IHBwZW0gaXMgc2ltcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIHJhdGlvICogcHBlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTWV0cmljcyB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBzaXplIGFuZCBjb250ZXh0IG9iamVjdHMuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfU2l6ZV9NZXRyaWNzXworICB7CisgICAgLyogZm9yIG5vbi1zcXVhcmUgcGl4ZWxzICovCisgICAgRlRfTG9uZyAgICAgeF9yYXRpbzsKKyAgICBGVF9Mb25nICAgICB5X3JhdGlvOworCisgICAgRlRfVVNob3J0ICAgcHBlbTsgICAgICAgICAgICAgICAvKiBtYXhpbXVtIHBwZW0gc2l6ZSAgICAgICAgICAgICAgKi8KKyAgICBGVF9Mb25nICAgICByYXRpbzsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgcmF0aW8gICAgICAgICAgICAgICAgICAqLworICAgIEZUX0ZpeGVkICAgIHNjYWxlOworCisgICAgRlRfRjI2RG90NiAgY29tcGVuc2F0aW9uc1s0XTsgICAvKiBkZXZpY2Utc3BlY2lmaWMgY29tcGVuc2F0aW9ucyAgKi8KKworICAgIEZUX0Jvb2wgICAgIHZhbGlkOworCisgICAgRlRfQm9vbCAgICAgcm90YXRlZDsgICAgICAgICAgICAvKiBgaXMgdGhlIGdseXBoIHJvdGF0ZWQ/Jy1mbGFnICAgKi8KKyAgICBGVF9Cb29sICAgICBzdHJldGNoZWQ7ICAgICAgICAgIC8qIGBpcyB0aGUgZ2x5cGggc3RyZXRjaGVkPyctZmxhZyAqLworCisgIH0gVFRfU2l6ZV9NZXRyaWNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUcnVlVHlwZSBzaXplIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBUVF9TaXplUmVjXworICB7CisgICAgRlRfU2l6ZVJlYyAgICAgICAgIHJvb3Q7CisKKyAgICAvKiB3ZSBoYXZlIG91ciBvd24gY29weSBvZiBtZXRyaWNzIHNvIHRoYXQgd2UgY2FuIG1vZGlmeSAqLworICAgIC8qIGl0IHdpdGhvdXQgYWZmZWN0aW5nIGF1dG8taGludGluZyAod2hlbiB1c2VkKSAgICAgICAgICovCisgICAgRlRfU2l6ZV9NZXRyaWNzICAgIG1ldHJpY3M7CisKKyAgICBUVF9TaXplX01ldHJpY3MgICAgdHRtZXRyaWNzOworCisgICAgRlRfVUxvbmcgICAgICAgICAgIHN0cmlrZV9pbmRleDsgICAgICAvKiAweEZGRkZGRkZGIHRvIGluZGljYXRlIGludmFsaWQgKi8KKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisgICAgRlRfVUludCAgICAgICAgICAgIG51bV9mdW5jdGlvbl9kZWZzOyAvKiBudW1iZXIgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgbWF4X2Z1bmN0aW9uX2RlZnM7CisgICAgVFRfRGVmQXJyYXkgICAgICAgIGZ1bmN0aW9uX2RlZnM7ICAgICAvKiB0YWJsZSBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucyAgKi8KKworICAgIEZUX1VJbnQgICAgICAgICAgICBudW1faW5zdHJ1Y3Rpb25fZGVmczsgIC8qIG51bWJlciBvZiBpbnMuIGRlZmluaXRpb25zICovCisgICAgRlRfVUludCAgICAgICAgICAgIG1heF9pbnN0cnVjdGlvbl9kZWZzOworICAgIFRUX0RlZkFycmF5ICAgICAgICBpbnN0cnVjdGlvbl9kZWZzOyAgICAgIC8qIHRhYmxlIG9mIGlucy4gZGVmaW5pdGlvbnMgICovCisKKyAgICBGVF9VSW50ICAgICAgICAgICAgbWF4X2Z1bmM7CisgICAgRlRfVUludCAgICAgICAgICAgIG1heF9pbnM7CisKKyAgICBUVF9Db2RlUmFuZ2VUYWJsZSAgY29kZVJhbmdlVGFibGU7CisKKyAgICBUVF9HcmFwaGljc1N0YXRlICAgR1M7CisKKyAgICBGVF9VTG9uZyAgICAgICAgICAgY3Z0X3NpemU7ICAgICAgLyogdGhlIHNjYWxlZCBjb250cm9sIHZhbHVlIHRhYmxlICovCisgICAgRlRfTG9uZyogICAgICAgICAgIGN2dDsKKworICAgIEZUX1VTaG9ydCAgICAgICAgICBzdG9yYWdlX3NpemU7IC8qIFRoZSBzdG9yYWdlIGFyZWEgaXMgbm93IHBhcnQgb2YgKi8KKyAgICBGVF9Mb25nKiAgICAgICAgICAgc3RvcmFnZTsgICAgICAvKiB0aGUgaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBUVF9HbHlwaFpvbmVSZWMgICAgdHdpbGlnaHQ7ICAgICAvKiBUaGUgaW5zdGFuY2UncyB0d2lsaWdodCB6b25lICAgICovCisKKyAgICBUVF9FeGVjQ29udGV4dCAgICAgY29udGV4dDsKKworICAgIC8qIGlmIG5lZ2F0aXZlLCBgZnBnbScgKHJlc3AuIGBwcmVwJyksIHdhc24ndCBleGVjdXRlZCB5ZXQ7ICovCisgICAgLyogb3RoZXJ3aXNlIGl0IGlzIHRoZSByZXR1cm5lZCBlcnJvciBjb2RlICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9FcnJvciAgICAgICAgICAgYnl0ZWNvZGVfcmVhZHk7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGN2dF9yZWFkeTsKKworI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLworCisgIH0gVFRfU2l6ZVJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVHJ1ZVR5cGUgZHJpdmVyIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVFRfRHJpdmVyUmVjXworICB7CisgICAgRlRfRHJpdmVyUmVjICByb290OworCisgICAgVFRfR2x5cGhab25lUmVjICB6b25lOyAgICAgLyogZ2x5cGggbG9hZGVyIHBvaW50cyB6b25lICovCisKKyAgICBGVF9VSW50ICBpbnRlcnByZXRlcl92ZXJzaW9uOworCisgIH0gVFRfRHJpdmVyUmVjOworCisKKyAgLyogTm90ZTogQWxsIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgKGV4Y2VwdCB0dF9zaXplX3Jlc2V0KCkpIGFyZSB1c2VkICAgICovCisgIC8qIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGEgRlRfRHJpdmVyX0NsYXNzUmVjLiAgVGhlcmVmb3JlIHRoZWlyICAgICAgICAqLworICAvKiBwYXJhbWV0ZXJzIGFyZSBvZiB0eXBlcyBGVF9GYWNlLCBGVF9TaXplLCBldGMuLCByYXRoZXIgdGhhbiBUVF9GYWNlLCAgKi8KKyAgLyogVFRfU2l6ZSwgZXRjLiwgc28gdGhhdCB0aGUgY29tcGlsZXIgY2FuIGNvbmZpcm0gdGhhdCB0aGUgdHlwZXMgYW5kICAgICovCisgIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0LiAgSW4gYWxsIGNhc2VzIHRoZSBGVF94eHggdHlwZXMgYXJlICAqLworICAvKiBjYXN0IHRvIHRoZWlyIFRUX3h4eCBjb3VudGVycGFydHMgaW5zaWRlIHRoZSBmdW5jdGlvbnMgc2luY2UgRnJlZVR5cGUgKi8KKyAgLyogd2lsbCBhbHdheXMgdXNlIHRoZSBUVCBkcml2ZXIgdG8gY3JlYXRlIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZhY2UgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9pbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgdHRmYWNlLCAgICAgIC8qIFRUX0ZhY2UgKi8KKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2RvbmUoIEZUX0ZhY2UgIHR0ZmFjZSApOyAgICAgICAgICAvKiBUVF9GYWNlICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNpemUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfc2l6ZV9pbml0KCBGVF9TaXplICB0dHNpemUgKTsgICAgICAgICAgLyogVFRfU2l6ZSAqLworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgdHRfc2l6ZV9kb25lKCBGVF9TaXplICB0dHNpemUgKTsgICAgICAgICAgLyogVFRfU2l6ZSAqLworCisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfc2l6ZV9ydW5fZnBnbSggVFRfU2l6ZSAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgcGVkYW50aWMgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9zaXplX3J1bl9wcmVwKCBUVF9TaXplICBzaXplLAorICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICBwZWRhbnRpYyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUoIFRUX1NpemUgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHBlZGFudGljICk7CisKKyNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9zaXplX3Jlc2V0KCBUVF9TaXplICBzaXplICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERyaXZlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZHJpdmVyX2luaXQoIEZUX01vZHVsZSAgdHRkcml2ZXIgKTsgICAgLyogVFRfRHJpdmVyICovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9kcml2ZXJfZG9uZSggRlRfTW9kdWxlICB0dGRyaXZlciApOyAgICAvKiBUVF9Ecml2ZXIgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU2xvdCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisKKyAgLyogYXV4aWxpYXJ5ICovCisjZGVmaW5lIElTX0hJTlRFRCggZmxhZ3MgKSAgKCAoIGZsYWdzICYgRlRfTE9BRF9OT19ISU5USU5HICkgPT0gMCApCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UVE9CSlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0cGljLmMgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0cGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyYTZiNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRwaWMuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgInR0cGljLmgiCisjaW5jbHVkZSAidHRlcnJvcnMuaCIKKworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHR0ZHJpdmVyLmMgKi8KKyAgRlRfRXJyb3IKKyAgRlRfQ3JlYXRlX0NsYXNzX3R0X3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOworICB2b2lkCisgIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApOworICB2b2lkCisgIEZUX0luaXRfQ2xhc3NfdHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzKAorICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjKiAgc3ZfbW0gKTsKKyAgdm9pZAorICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfdHJ1ZXR5cGVfZ2x5ZigKKyAgICBGVF9TZXJ2aWNlX1RUR2x5ZlJlYyogIHN2X3R0Z2x5ZiApOworCisKKyAgdm9pZAorICB0dF9kcml2ZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKKworCisgICAgaWYgKCBwaWNfY29udGFpbmVyLT50cnVldHlwZSApCisgICAgeworICAgICAgVFRNb2R1bGVQSUMqICBjb250YWluZXIgPSAoVFRNb2R1bGVQSUMqKXBpY19jb250YWluZXItPnRydWV0eXBlOworCisKKyAgICAgIGlmICggY29udGFpbmVyLT50dF9zZXJ2aWNlcyApCisgICAgICAgIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfc2VydmljZXMoIGxpYnJhcnksIGNvbnRhaW5lci0+dHRfc2VydmljZXMgKTsKKyAgICAgIGNvbnRhaW5lci0+dHRfc2VydmljZXMgPSBOVUxMOworICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7CisgICAgICBwaWNfY29udGFpbmVyLT50cnVldHlwZSA9IE5VTEw7CisgICAgfQorICB9CisKKworICBGVF9FcnJvcgorICB0dF9kcml2ZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICB7CisgICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKKyAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKKyAgICBUVE1vZHVsZVBJQyogICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7CisgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKworICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCisgICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKKyAgICBwaWNfY29udGFpbmVyLT50cnVldHlwZSA9IGNvbnRhaW5lcjsKKworICAgIC8qIGluaXRpYWxpemUgcG9pbnRlciB0YWJsZSAtIHRoaXMgaXMgaG93IHRoZSBtb2R1bGUgdXN1YWxseSAqLworICAgIC8qIGV4cGVjdHMgdGhpcyBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGVycm9yID0gRlRfQ3JlYXRlX0NsYXNzX3R0X3NlcnZpY2VzKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyLT50dF9zZXJ2aWNlcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycygKKyAgICAgICZjb250YWluZXItPnR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycyApOworI2VuZGlmCisgICAgRlRfSW5pdF9DbGFzc190dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYoCisgICAgICAmY29udGFpbmVyLT50dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYgKTsKKworICBFeGl0OgorICAgIGlmICggZXJyb3IgKQorICAgICAgdHRfZHJpdmVyX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBpYy5oIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YmE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0cGljLmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFRQSUNfSF9fCisjZGVmaW5lIF9fVFRQSUNfSF9fCisKKworRlRfQkVHSU5fSEVBREVSCisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKKworI2RlZmluZSBUVF9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgICB0dF9zZXJ2aWNlcworI2RlZmluZSBUVF9TRVJWSUNFX0dYX01VTFRJX01BU1RFUlNfR0VUICB0dF9zZXJ2aWNlX2d4X211bHRpX21hc3RlcnMKKyNkZWZpbmUgVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCAgICAgdHRfc2VydmljZV90cnVldHlwZV9nbHlmCisjZGVmaW5lIFRUX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgICAgICAgIHR0X3NlcnZpY2VfcHJvcGVydGllcworCisjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKKworCisgIHR5cGVkZWYgc3RydWN0ICBUVE1vZHVsZVBJQ18KKyAgeworICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgICB0dF9zZXJ2aWNlczsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgICAgRlRfU2VydmljZV9NdWx0aU1hc3RlcnNSZWMgIHR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVyczsKKyNlbmRpZgorICAgIEZUX1NlcnZpY2VfVFRHbHlmUmVjICAgICAgICB0dF9zZXJ2aWNlX3RydWV0eXBlX2dseWY7CisgICAgRlRfU2VydmljZV9Qcm9wZXJ0aWVzUmVjICAgIHR0X3NlcnZpY2VfcHJvcGVydGllczsKKworICB9IFRUTW9kdWxlUElDOworCisKKyNkZWZpbmUgR0VUX1BJQyggbGliICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChUVE1vZHVsZVBJQyopKChsaWIpLT5waWNfY29udGFpbmVyLnRydWV0eXBlKSApCisjZGVmaW5lIFRUX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlcyApCisjZGVmaW5lIFRUX1NFUlZJQ0VfR1hfTVVMVElfTUFTVEVSU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+dHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzICkKKyNkZWZpbmUgVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYgKQorI2RlZmluZSBUVF9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnR0X3NlcnZpY2VfcHJvcGVydGllcyApCisKKworICAvKiBzZWUgdHRwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCisgIHZvaWQKKyAgdHRfZHJpdmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyAgRlRfRXJyb3IKKyAgdHRfZHJpdmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLworCisgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1RUUElDX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBsb2FkLmMgYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0cGxvYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjMzOGJkCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBsb2FkLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR0cGxvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUcnVlVHlwZS1zcGVjaWZpYyB0YWJsZXMgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKKworI2luY2x1ZGUgInR0cGxvYWQuaCIKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyNpbmNsdWRlICJ0dGd4dmFyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInR0ZXJyb3JzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dHBsb2FkCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfbG9jYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIHRoZSBsb2NhdGlvbnMgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfbG9jYSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX1VMb25nICB0YWJsZV9sZW47CisgICAgRlRfSW50ICAgIHNoaWZ0OworCisKKyAgICAvKiB3ZSBuZWVkIHRoZSBzaXplIG9mIHRoZSBgZ2x5ZicgdGFibGUgZm9yIG1hbGZvcm1lZCBgbG9jYScgdGFibGVzICovCisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2dseWYsIHN0cmVhbSwgJmZhY2UtPmdseWZfbGVuICk7CisKKyAgICAvKiBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgZm9udCBkb2Vzbid0IGhhdmUgYSBnbHlmIHRhYmxlIGF0IGFsbCAqLworICAgIC8qIG9yIGl0cyBzaXplIGlzIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBUYWJsZV9NaXNzaW5nICkgKQorICAgICAgZmFjZS0+Z2x5Zl9sZW4gPSAwOworICAgIGVsc2UgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBGVF9UUkFDRTIoKCAiTG9jYXRpb25zICIgKSk7CisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX2xvY2EsIHN0cmVhbSwgJnRhYmxlX2xlbiApOworICAgIGlmICggZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIExvY2F0aW9uc19NaXNzaW5nICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgaWYgKCBmYWNlLT5oZWFkZXIuSW5kZXhfVG9fTG9jX0Zvcm1hdCAhPSAwICkKKyAgICB7CisgICAgICBzaGlmdCA9IDI7CisKKyAgICAgIGlmICggdGFibGVfbGVuID49IDB4NDAwMDBMICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggInRhYmxlIHRvbyBsYXJnZVxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgICBmYWNlLT5udW1fbG9jYXRpb25zID0gdGFibGVfbGVuID4+IHNoaWZ0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc2hpZnQgPSAxOworCisgICAgICBpZiAoIHRhYmxlX2xlbiA+PSAweDIwMDAwTCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJ0YWJsZSB0b28gbGFyZ2VcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgICAgZmFjZS0+bnVtX2xvY2F0aW9ucyA9IHRhYmxlX2xlbiA+PiBzaGlmdDsKKyAgICB9CisKKyAgICBpZiAoIGZhY2UtPm51bV9sb2NhdGlvbnMgIT0gKEZUX1VMb25nKWZhY2UtPnJvb3QubnVtX2dseXBocyArIDEgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJnbHlwaCBjb3VudCBtaXNtYXRjaCEgIGxvY2E6ICVkLCBtYXhwOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgLSAxLCBmYWNlLT5yb290Lm51bV9nbHlwaHMgKSk7CisKKyAgICAgIC8qIHdlIG9ubHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBtYXhwJyBnaXZlcyBhIGxhcmdlciB2YWx1ZSAqLworICAgICAgaWYgKCBmYWNlLT5udW1fbG9jYXRpb25zIDw9IChGVF9VTG9uZylmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgbmV3X2xvY2FfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUxvbmcpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICsgMSApIDw8IHNoaWZ0OworCisgICAgICAgIFRUX1RhYmxlICBlbnRyeSA9IGZhY2UtPmRpcl90YWJsZXM7CisgICAgICAgIFRUX1RhYmxlICBsaW1pdCA9IGVudHJ5ICsgZmFjZS0+bnVtX3RhYmxlczsKKworICAgICAgICBGVF9Mb25nICAgcG9zICA9IChGVF9Mb25nKUZUX1NUUkVBTV9QT1MoKTsKKyAgICAgICAgRlRfTG9uZyAgIGRpc3QgPSAweDdGRkZGRkZGTDsKKworCisgICAgICAgIC8qIGNvbXB1dGUgdGhlIGRpc3RhbmNlIHRvIG5leHQgdGFibGUgaW4gZm9udCBmaWxlICovCisgICAgICAgIGZvciAoIDsgZW50cnkgPCBsaW1pdDsgZW50cnkrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Mb25nICBkaWZmID0gKEZUX0xvbmcpZW50cnktPk9mZnNldCAtIHBvczsKKworCisgICAgICAgICAgaWYgKCBkaWZmID4gMCAmJiBkaWZmIDwgZGlzdCApCisgICAgICAgICAgICBkaXN0ID0gZGlmZjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZW50cnkgPT0gbGltaXQgKQorICAgICAgICB7CisgICAgICAgICAgLyogYGxvY2EnIGlzIHRoZSBsYXN0IHRhYmxlICovCisgICAgICAgICAgZGlzdCA9IChGVF9Mb25nKXN0cmVhbS0+c2l6ZSAtIHBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbmV3X2xvY2FfbGVuIDw9IChGVF9VTG9uZylkaXN0ICkKKyAgICAgICAgeworICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgPSAoRlRfVUxvbmcpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICsgMTsKKyAgICAgICAgICB0YWJsZV9sZW4gICAgICAgICAgID0gbmV3X2xvY2FfbGVuOworCisgICAgICAgICAgRlRfVFJBQ0UyKCggImFkanVzdGluZyBudW1fbG9jYXRpb25zIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEV4dHJhY3QgdGhlIGZyYW1lLiAgV2UgZG9uJ3QgbmVlZCB0byBkZWNvbXByZXNzIGl0IHNpbmNlCisgICAgICogd2UgYXJlIGFibGUgdG8gcGFyc2UgaXQgZGlyZWN0bHkuCisgICAgICovCisgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCB0YWJsZV9sZW4sIGZhY2UtPmdseXBoX2xvY2F0aW9ucyApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX1RSQUNFMigoICJsb2FkZWRcbiIgKSk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfVUxvbmcgKQorICB0dF9mYWNlX2dldF9sb2NhdGlvbiggVFRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmFzaXplICkKKyAgeworICAgIEZUX1VMb25nICBwb3MxLCBwb3MyOworICAgIEZUX0J5dGUqICBwOworICAgIEZUX0J5dGUqICBwX2xpbWl0OworCisKKyAgICBwb3MxID0gcG9zMiA9IDA7CisKKyAgICBpZiAoIGdpbmRleCA8IGZhY2UtPm51bV9sb2NhdGlvbnMgKQorICAgIHsKKyAgICAgIGlmICggZmFjZS0+aGVhZGVyLkluZGV4X1RvX0xvY19Gb3JtYXQgIT0gMCApCisgICAgICB7CisgICAgICAgIHAgICAgICAgPSBmYWNlLT5nbHlwaF9sb2NhdGlvbnMgKyBnaW5kZXggKiA0OworICAgICAgICBwX2xpbWl0ID0gZmFjZS0+Z2x5cGhfbG9jYXRpb25zICsgZmFjZS0+bnVtX2xvY2F0aW9ucyAqIDQ7CisKKyAgICAgICAgcG9zMSA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgcG9zMiA9IHBvczE7CisKKyAgICAgICAgaWYgKCBwICsgNCA8PSBwX2xpbWl0ICkKKyAgICAgICAgICBwb3MyID0gRlRfTkVYVF9VTE9ORyggcCApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwICAgICAgID0gZmFjZS0+Z2x5cGhfbG9jYXRpb25zICsgZ2luZGV4ICogMjsKKyAgICAgICAgcF9saW1pdCA9IGZhY2UtPmdseXBoX2xvY2F0aW9ucyArIGZhY2UtPm51bV9sb2NhdGlvbnMgKiAyOworCisgICAgICAgIHBvczEgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICBwb3MyID0gcG9zMTsKKworICAgICAgICBpZiAoIHAgKyAyIDw9IHBfbGltaXQgKQorICAgICAgICAgIHBvczIgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICAgIHBvczEgPDw9IDE7CisgICAgICAgIHBvczIgPDw9IDE7CisgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgYnJva2VuIGxvY2F0aW9uIGRhdGEgKi8KKyAgICBpZiAoIHBvczEgPiBmYWNlLT5nbHlmX2xlbiApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X2ZhY2VfZ2V0X2xvY2F0aW9uOiIKKyAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldD0weCUwOGx4IGZvdW5kIGZvciBnaWQ9MHglMDRseCwiCisgICAgICAgICAgICAgICAgICAiIGV4Y2VlZGluZyB0aGUgZW5kIG9mIGdseWYgdGFibGUgKDB4JTA4bHgpXG4iLAorICAgICAgICAgICAgICAgICAgcG9zMSwgZ2luZGV4LCBmYWNlLT5nbHlmX2xlbiApKTsKKyAgICAgICphc2l6ZSA9IDA7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIHBvczIgPiBmYWNlLT5nbHlmX2xlbiApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInR0X2ZhY2VfZ2V0X2xvY2F0aW9uOiIKKyAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIG9mZnNldD0weCUwOGx4IGZvdW5kIGZvciBnaWQ9MHglMDRseCwiCisgICAgICAgICAgICAgICAgICAiIHRydW5jYXRlIGF0IHRoZSBlbmQgb2YgZ2x5ZiB0YWJsZSAoMHglMDhseClcbiIsCisgICAgICAgICAgICAgICAgICBwb3MyLCBnaW5kZXggKyAxLCBmYWNlLT5nbHlmX2xlbiApKTsKKyAgICAgIHBvczIgPSBmYWNlLT5nbHlmX2xlbjsKKyAgICB9CisKKyAgICAvKiBUaGUgYGxvY2EnIHRhYmxlIG11c3QgYmUgb3JkZXJlZDsgaXQgcmVmZXJzIHRvIHRoZSBsZW5ndGggb2YgKi8KKyAgICAvKiBhbiBlbnRyeSBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dCAgKi8KKyAgICAvKiBwb3NpdGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGRvIGV4aXN0IChtYWxmb3JtZWQpIGZvbnRzIHdoaWNoICAgKi8KKyAgICAvKiBkb24ndCBvYmV5IHRoaXMgcnVsZSwgc28gd2UgYXJlIG9ubHkgYWJsZSB0byBwcm92aWRlIGFuICAgICAgKi8KKyAgICAvKiB1cHBlciBib3VuZCBmb3IgdGhlIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBXZSBnZXQgKGludGVudGlvbmFsbHkpIGEgd3JvbmcsIG5vbi16ZXJvIHJlc3VsdCBpbiBjYXNlIHRoZSAgKi8KKyAgICAvKiBgZ2x5ZicgdGFibGUgaXMgbWlzc2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHBvczIgPj0gcG9zMSApCisgICAgICAqYXNpemUgPSAoRlRfVUludCkoIHBvczIgLSBwb3MxICk7CisgICAgZWxzZQorICAgICAgKmFzaXplID0gKEZUX1VJbnQpKCBmYWNlLT5nbHlmX2xlbiAtIHBvczEgKTsKKworICAgIHJldHVybiBwb3MxOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0dF9mYWNlX2RvbmVfbG9jYSggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOworCisKKyAgICBGVF9GUkFNRV9SRUxFQVNFKCBmYWNlLT5nbHlwaF9sb2NhdGlvbnMgKTsKKyAgICBmYWNlLT5udW1fbG9jYXRpb25zID0gMDsKKyAgfQorCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfY3Z0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIHRoZSBjb250cm9sIHZhbHVlIHRhYmxlIGludG8gYSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfY3Z0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX1VMb25nICAgdGFibGVfbGVuOworCisKKyAgICBGVF9UUkFDRTIoKCAiQ1ZUICIgKSk7CisKKyAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfY3Z0LCBzdHJlYW0sICZ0YWJsZV9sZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaXMgbWlzc2luZ1xuIiApKTsKKworICAgICAgZmFjZS0+Y3Z0X3NpemUgPSAwOworICAgICAgZmFjZS0+Y3Z0ICAgICAgPSBOVUxMOworICAgICAgZXJyb3IgICAgICAgICAgPSBGVF9FcnJfT2s7CisKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBmYWNlLT5jdnRfc2l6ZSA9IHRhYmxlX2xlbiAvIDI7CisKKyAgICBpZiAoIEZUX05FV19BUlJBWSggZmFjZS0+Y3Z0LCBmYWNlLT5jdnRfc2l6ZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfRlJBTUVfRU5URVIoIGZhY2UtPmN2dF9zaXplICogMkwgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICB7CisgICAgICBGVF9TaG9ydCogIGN1ciAgID0gZmFjZS0+Y3Z0OworICAgICAgRlRfU2hvcnQqICBsaW1pdCA9IGN1ciArIGZhY2UtPmN2dF9zaXplOworCisKKyAgICAgIGZvciAoIDsgY3VyIDwgbGltaXQ7IGN1cisrICkKKyAgICAgICAgKmN1ciA9IEZUX0dFVF9TSE9SVCgpOworICAgIH0KKworICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgIGlmICggZmFjZS0+ZG9ibGVuZCApCisgICAgICBlcnJvciA9IHR0X2ZhY2VfdmFyeV9jdnQoIGZhY2UsIHN0cmVhbSApOworI2VuZGlmCisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyNlbHNlIC8qICFUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KKworICAgIEZUX1VOVVNFRCggZmFjZSAgICk7CisgICAgRlRfVU5VU0VEKCBzdHJlYW0gKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyNlbmRpZgorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0dF9mYWNlX2xvYWRfZnBnbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBMb2FkIHRoZSBmb250IHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfZnBnbSggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQorICB7CisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisKKyAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgRlRfVUxvbmcgIHRhYmxlX2xlbjsKKworCisgICAgRlRfVFJBQ0UyKCggIkZvbnQgcHJvZ3JhbSAiICkpOworCisgICAgLyogVGhlIGZvbnQgcHJvZ3JhbSBpcyBvcHRpb25hbCAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19mcGdtLCBzdHJlYW0sICZ0YWJsZV9sZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBmYWNlLT5mb250X3Byb2dyYW0gICAgICA9IE5VTEw7CisgICAgICBmYWNlLT5mb250X3Byb2dyYW1fc2l6ZSA9IDA7CisgICAgICBlcnJvciAgICAgICAgICAgICAgICAgICA9IEZUX0Vycl9PazsKKworICAgICAgRlRfVFJBQ0UyKCggImlzIG1pc3NpbmdcbiIgKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBmYWNlLT5mb250X3Byb2dyYW1fc2l6ZSA9IHRhYmxlX2xlbjsKKyAgICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggdGFibGVfbGVuLCBmYWNlLT5mb250X3Byb2dyYW0gKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZCwgJTEyZCBieXRlc1xuIiwgZmFjZS0+Zm9udF9wcm9ncmFtX3NpemUgKSk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisjZWxzZSAvKiAhVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCisKKyAgICBGVF9VTlVTRUQoIGZhY2UgICApOworICAgIEZUX1VOVVNFRCggc3RyZWFtICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworCisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZCB0aGUgY3Z0IHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX3ByZXAoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgeworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX1VMb25nICB0YWJsZV9sZW47CisKKworICAgIEZUX1RSQUNFMigoICJQcmVwIHByb2dyYW0gIiApKTsKKworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19wcmVwLCBzdHJlYW0sICZ0YWJsZV9sZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBmYWNlLT5jdnRfcHJvZ3JhbSAgICAgID0gTlVMTDsKKyAgICAgIGZhY2UtPmN2dF9wcm9ncmFtX3NpemUgPSAwOworICAgICAgZXJyb3IgICAgICAgICAgICAgICAgICA9IEZUX0Vycl9PazsKKworICAgICAgRlRfVFJBQ0UyKCggImlzIG1pc3NpbmdcbiIgKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBmYWNlLT5jdnRfcHJvZ3JhbV9zaXplID0gdGFibGVfbGVuOworICAgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCB0YWJsZV9sZW4sIGZhY2UtPmN2dF9wcm9ncmFtICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIEZUX1RSQUNFMigoICJsb2FkZWQsICUxMmQgYnl0ZXNcbiIsIGZhY2UtPmN2dF9wcm9ncmFtX3NpemUgKSk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisjZWxzZSAvKiAhVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCisKKyAgICBGVF9VTlVTRUQoIGZhY2UgICApOworICAgIEZUX1VOVVNFRCggc3RyZWFtICk7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworCisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdHRfZmFjZV9sb2FkX2hkbXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTG9hZCB0aGUgYGhkbXgnIHRhYmxlIGludG8gdGhlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9oZG14KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgRlRfVUludCAgICB2ZXJzaW9uLCBubiwgbnVtX3JlY29yZHM7CisgICAgRlRfVUxvbmcgICB0YWJsZV9zaXplLCByZWNvcmRfc2l6ZTsKKyAgICBGVF9CeXRlKiAgIHA7CisgICAgRlRfQnl0ZSogICBsaW1pdDsKKworCisgICAgLyogdGhpcyB0YWJsZSBpcyBvcHRpb25hbCAqLworICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19oZG14LCBzdHJlYW0sICZ0YWJsZV9zaXplICk7CisgICAgaWYgKCBlcnJvciB8fCB0YWJsZV9zaXplIDwgOCApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCB0YWJsZV9zaXplLCBmYWNlLT5oZG14X3RhYmxlICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgcCAgICAgPSBmYWNlLT5oZG14X3RhYmxlOworICAgIGxpbWl0ID0gcCArIHRhYmxlX3NpemU7CisKKyAgICB2ZXJzaW9uICAgICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgbnVtX3JlY29yZHMgPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIHJlY29yZF9zaXplID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGFuIGhkbXggZGV2aWNlIHJlY29yZCBpcyB0aGUgKi8KKyAgICAvKiBtYXhpbXVtIG51bWJlciBvZiBnbHlwaHMgKyAyOyB0aGlzIGlzIDB4RkZGRiArIDIsIHRodXMgICAgICAqLworICAgIC8qIGV4cGxhaW5pbmcgd2h5IGByZWNvcmRfc2l6ZScgaXMgYSBsb25nICh3aGljaCB3ZSByZWFkIGFzICAgICovCisgICAgLyogdW5zaWduZWQgbG9uZyBmb3IgY29udmVuaWVuY2UpLiAgSW4gcHJhY3RpY2UsIHR3byBieXRlcyBhcmUgKi8KKyAgICAvKiBzdWZmaWNpZW50IHRvIGhvbGQgdGhlIHNpemUgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhlcmUgYXJlIGF0IGxlYXN0IHR3byBmb250cywgSEFOTk9NLUEgYW5kIEhBTk5PTS1CIHZlcnNpb24gKi8KKyAgICAvKiAyLjAgKDIwMDUpLCB3aGljaCBnZXQgdGhpcyB3cm9uZzogVGhlIHVwcGVyIHR3byBieXRlcyBvZiAgICAqLworICAgIC8qIHRoZSBzaXplIHZhbHVlIGFyZSBzZXQgdG8gMHhGRiBpbnN0ZWFkIG9mIDB4MDAuICBXZSBjYXRjaCAgICovCisgICAgLyogYW5kIGZpeCB0aGlzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggcmVjb3JkX3NpemUgPj0gMHhGRkZGMDAwMFVMICkKKyAgICAgIHJlY29yZF9zaXplICY9IDB4RkZGRlU7CisKKyAgICAvKiBUaGUgbGltaXQgZm9yIGBudW1fcmVjb3JkcycgaXMgYSBoZXVyaXN0aWMgdmFsdWUuICovCisgICAgaWYgKCB2ZXJzaW9uICE9IDAgICAgICAgICAgIHx8CisgICAgICAgICBudW1fcmVjb3JkcyA+IDI1NSAgICAgIHx8CisgICAgICAgICByZWNvcmRfc2l6ZSA+IDB4MTAwMDFMIHx8CisgICAgICAgICByZWNvcmRfc2l6ZSA8IDQgICAgICAgICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGZhY2UtPmhkbXhfcmVjb3JkX3NpemVzLCBudW1fcmVjb3JkcyApICkKKyAgICAgIGdvdG8gRmFpbDsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fcmVjb3Jkczsgbm4rKyApCisgICAgeworICAgICAgaWYgKCBwICsgcmVjb3JkX3NpemUgPiBsaW1pdCApCisgICAgICAgIGJyZWFrOworCisgICAgICBmYWNlLT5oZG14X3JlY29yZF9zaXplc1tubl0gPSBwWzBdOworICAgICAgcCAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gcmVjb3JkX3NpemU7CisgICAgfQorCisgICAgZmFjZS0+aGRteF9yZWNvcmRfY291bnQgPSBubjsKKyAgICBmYWNlLT5oZG14X3RhYmxlX3NpemUgICA9IHRhYmxlX3NpemU7CisgICAgZmFjZS0+aGRteF9yZWNvcmRfc2l6ZSAgPSByZWNvcmRfc2l6ZTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBGYWlsOgorICAgIEZUX0ZSQU1FX1JFTEVBU0UoIGZhY2UtPmhkbXhfdGFibGUgKTsKKyAgICBmYWNlLT5oZG14X3RhYmxlX3NpemUgPSAwOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgdHRfZmFjZV9mcmVlX2hkbXgoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisKKyAgICBGVF9GUkVFKCBmYWNlLT5oZG14X3JlY29yZF9zaXplcyApOworICAgIEZUX0ZSQU1FX1JFTEVBU0UoIGZhY2UtPmhkbXhfdGFibGUgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSZXR1cm4gdGhlIGFkdmFuY2Ugd2lkdGggdGFibGUgZm9yIGEgZ2l2ZW4gcGl4ZWwgc2l6ZSBpZiBpdCBpcyBmb3VuZCAgKi8KKyAgLyogaW4gdGhlIGZvbnQncyBgaGRteCcgdGFibGUgKGlmIGFueSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0J5dGUqICkKKyAgdHRfZmFjZV9nZXRfZGV2aWNlX21ldHJpY3MoIFRUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgZ2luZGV4ICkKKyAgeworICAgIEZUX1VJbnQgICBubjsKKyAgICBGVF9CeXRlKiAgcmVzdWx0ICAgICAgPSBOVUxMOworICAgIEZUX1VMb25nICByZWNvcmRfc2l6ZSA9IGZhY2UtPmhkbXhfcmVjb3JkX3NpemU7CisgICAgRlRfQnl0ZSogIHJlY29yZCAgICAgID0gZmFjZS0+aGRteF90YWJsZSArIDg7CisKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBmYWNlLT5oZG14X3JlY29yZF9jb3VudDsgbm4rKyApCisgICAgICBpZiAoIGZhY2UtPmhkbXhfcmVjb3JkX3NpemVzW25uXSA9PSBwcGVtICkKKyAgICAgIHsKKyAgICAgICAgZ2luZGV4ICs9IDI7CisgICAgICAgIGlmICggZ2luZGV4IDwgcmVjb3JkX3NpemUgKQorICAgICAgICAgIHJlc3VsdCA9IHJlY29yZCArIG5uICogcmVjb3JkX3NpemUgKyBnaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBsb2FkLmggYi9mcmVldHlwZS0yLjYvc3JjL3RydWV0eXBlL3R0cGxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzkyMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHBsb2FkLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRwbG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVFRQTE9BRF9IX18KKyNkZWZpbmUgX19UVFBMT0FEX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2xvY2EoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIEZUX1VMb25nICkKKyAgdHRfZmFjZV9nZXRfbG9jYXRpb24oIFRUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICphc2l6ZSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgdHRfZmFjZV9kb25lX2xvY2EoIFRUX0ZhY2UgIGZhY2UgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfY3Z0KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2ZwZ20oIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2xvYWRfcHJlcCggVFRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9oZG14KCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfaGRteCggVFRfRmFjZSAgZmFjZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0J5dGUqICkKKyAgdHRfZmFjZV9nZXRfZGV2aWNlX21ldHJpY3MoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2luZGV4ICk7CisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIF9fVFRQTE9BRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmRhNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHN1YnBpeC5jCkBAIC0wLDAgKzEsMTAxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHRzdWJwaXguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfT1VUTElORV9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSAorCisjaW5jbHVkZSAidHRzdWJwaXguaCIKKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGVzZSBydWxlcyBhZmZlY3QgaG93IHRoZSBUVCBJbnRlcnByZXRlciBkb2VzIGhpbnRpbmcsIHdpdGggdGhlICAgICAgKi8KKyAgLyogZ29hbCBvZiBkb2luZyBzdWJwaXhlbCBoaW50aW5nIGJ5IChpbiBnZW5lcmFsKSBpZ25vcmluZyB4IG1vdmVzLiAgICAgICovCisgIC8qIFNvbWUgb2YgdGhlc2UgcnVsZXMgYXJlIGZpeGVzIHRoYXQgZ28gYWJvdmUgYW5kIGJleW9uZCB0aGUgICAgICAgICAgICAqLworICAvKiBzdGF0ZWQgdGVjaG5pcXVlcyBpbiB0aGUgTVMgd2hpdGVwYXBlciBvbiBDbGVhcnR5cGUsIGR1ZSB0byAgICAgICAgICAgKi8KKyAgLyogYXJ0aWZhY3RzIGluIG1hbnkgZ2x5cGhzLiAgU28sIHRoZXNlIHJ1bGVzIG1ha2Ugc29tZSBnbHlwaHMgcmVuZGVyICAgICovCisgIC8qIGJldHRlciB0aGFuIHRoZXkgZG8gaW4gdGhlIE1TIHJhc3Rlcml6ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIiIgc3RyaW5nIG9yIDAgaW50L2NoYXIgaW5kaWNhdGVzIHRvIGFwcGx5IHRvIGFsbCBnbHlwaHMuICAgICAgICAgICAgICovCisgIC8qICItIiB1c2VkIGFzIGR1bW15IHBsYWNlaG9sZGVycywgYnV0IGFueSBub24tbWF0Y2hpbmcgc3RyaW5nIHdvcmtzLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU29tZSBvZiB0aGlzIGNvdWxkIGFyZ3VhYmx5IGJlIGltcGxlbWVudGVkIGluIGZvbnRjb25maWcsIGhvd2V2ZXI6ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBGb250Y29uZmlnIGNhbid0IHNldCB0aGluZ3Mgb24gYSBnbHlwaC1ieS1nbHlwaCBiYXNpcy4gICAgICAgICAgICAgKi8KKyAgLyogIC0gVGhlIHR3ZWFrcyB0aGF0IGhhcHBlbiBoZXJlIGFyZSB2ZXJ5IGxvdy1sZXZlbCwgZnJvbSBhbiBhdmVyYWdlICAgICovCisgIC8qICAgIHVzZXIncyBwb2ludCBvZiB2aWV3IGFuZCBhcmUgYmVzdCBpbXBsZW1lbnRlZCBpbiB0aGUgaGludGVyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgc3VicGl4ZWwgaGludGluZyB0ZWNobmlxdWVzIGFzIGdlbmVyYWxpemVkICAgICovCisgIC8qIGFzIHBvc3NpYmxlIGFjcm9zcyBhbGwgZm9udHMgdG8gcHJldmVudCB0aGUgbmVlZCBmb3IgZXh0cmEgcnVsZXMgc3VjaCAqLworICAvKiBhcyB0aGVzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBydWxlIHN0cnVjdHVyZSBpcyBkZXNpZ25lZCBzbyB0aGF0IGVudGlyZWx5IG5ldyBydWxlcyBjYW4gZWFzaWx5ICAqLworICAvKiBiZSBhZGRlZCB3aGVuIGEgbmV3IGNvbXBhdGliaWxpdHkgZmVhdHVyZSBpcyBkaXNjb3ZlcmVkLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBydWxlIHN0cnVjdHVyZXMgY291bGQgYWxzbyB1c2Ugc29tZSBlbmhhbmNlbWVudCB0byBoYW5kbGUgcmFuZ2VzLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICoqKioqKioqKioqKioqKioqKiBXT1JLIElOIFBST0dSRVNTICoqKioqKioqKioqKioqKioqKiogICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIFRoZXNlIGFyZSBgY2xhc3Nlcycgb2YgZm9udHMgdGhhdCBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciBhbmQgdXNlZCBpbiAqLworICAvKiBydWxlcyBiZWxvdy4gIEEgYmxhbmsgZW50cnkgIiIgaXMgcmVxdWlyZWQgYXQgdGhlIGVuZCBvZiB0aGVzZSEgICAgICAgKi8KKyNkZWZpbmUgRkFNSUxZX0NMQVNTX1JVTEVTX1NJWkUgIDcKKworICBzdGF0aWMgY29uc3QgU1BIX0ZvbnRfQ2xhc3MgIEZBTUlMWV9DTEFTU19SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtGQU1JTFlfQ0xBU1NfUlVMRVNfU0laRV0gPQorICB7CisgICAgeyAiTVMgTGVnYWN5IEZvbnRzIiwKKyAgICAgIHsgIkFoYXJvbmkiLAorICAgICAgICAiQW5kYWxlIE1vbm8iLAorICAgICAgICAiQW5kYWx1cyIsCisgICAgICAgICJBbmdzYW5hIE5ldyIsCisgICAgICAgICJBbmdzYW5hVVBDIiwKKyAgICAgICAgIkFyYWJpYyBUcmFuc3BhcmVudCIsCisgICAgICAgICJBcmlhbCBCbGFjayIsCisgICAgICAgICJBcmlhbCBOYXJyb3ciLAorICAgICAgICAiQXJpYWwgVW5pY29kZSBNUyIsCisgICAgICAgICJBcmlhbCIsCisgICAgICAgICJCYXRhbmciLAorICAgICAgICAiQnJvd2FsbGlhIE5ldyIsCisgICAgICAgICJCcm93YWxsaWFVUEMiLAorICAgICAgICAiQ29taWMgU2FucyBNUyIsCisgICAgICAgICJDb3JkaWEgTmV3IiwKKyAgICAgICAgIkNvcmRpYVVQQyIsCisgICAgICAgICJDb3VyaWVyIE5ldyIsCisgICAgICAgICJERkthaS1TQiIsCisgICAgICAgICJEYXZpZCBUcmFuc3BhcmVudCIsCisgICAgICAgICJEYXZpZCIsCisgICAgICAgICJEaWxsZW5pYVVQQyIsCisgICAgICAgICJFc3RyYW5nZWxvIEVkZXNzYSIsCisgICAgICAgICJFdWNyb3NpYVVQQyIsCisgICAgICAgICJGYW5nU29uZ19HQjIzMTIiLAorICAgICAgICAiRml4ZWQgTWlyaWFtIFRyYW5zcGFyZW50IiwKKyAgICAgICAgIkZyYW5rUnVlaGwiLAorICAgICAgICAiRnJhbmtsaW4gR290aGljIE1lZGl1bSIsCisgICAgICAgICJGcmVlc2lhVVBDIiwKKyAgICAgICAgIkdhcmFtb25kIiwKKyAgICAgICAgIkdhdXRhbWkiLAorICAgICAgICAiR2VvcmdpYSIsCisgICAgICAgICJHdWxpbSIsCisgICAgICAgICJJbXBhY3QiLAorICAgICAgICAiSXJpc1VQQyIsCisgICAgICAgICJKYXNtaW5lVVBDIiwKKyAgICAgICAgIkthaVRpX0dCMjMxMiIsCisgICAgICAgICJLb2RjaGlhbmdVUEMiLAorICAgICAgICAiTGF0aGEiLAorICAgICAgICAiTGV2ZW5pbSBNVCIsCisgICAgICAgICJMaWx5VVBDIiwKKyAgICAgICAgIkx1Y2lkYSBDb25zb2xlIiwKKyAgICAgICAgIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLAorICAgICAgICAiTVMgR290aGljIiwKKyAgICAgICAgIk1TIE1pbmNobyIsCisgICAgICAgICJNViBCb2xpIiwKKyAgICAgICAgIk1hbmdhbCIsCisgICAgICAgICJNYXJsZXR0IiwKKyAgICAgICAgIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwKKyAgICAgICAgIk1pbmdsaXUiLAorICAgICAgICAiTWlyaWFtIEZpeGVkIiwKKyAgICAgICAgIk1pcmlhbSBUcmFuc3BhcmVudCIsCisgICAgICAgICJNaXJpYW0iLAorICAgICAgICAiTmFya2lzaW0iLAorICAgICAgICAiUGFsYXRpbm8gTGlub3R5cGUiLAorICAgICAgICAiUmFhdmkiLAorICAgICAgICAiUm9kIFRyYW5zcGFyZW50IiwKKyAgICAgICAgIlJvZCIsCisgICAgICAgICJTaHJ1dGkiLAorICAgICAgICAiU2ltSGVpIiwKKyAgICAgICAgIlNpbXBsaWZpZWQgQXJhYmljIEZpeGVkIiwKKyAgICAgICAgIlNpbXBsaWZpZWQgQXJhYmljIiwKKyAgICAgICAgIlNpbXN1biIsCisgICAgICAgICJTeWxmYWVuIiwKKyAgICAgICAgIlN5bWJvbCIsCisgICAgICAgICJUYWhvbWEiLAorICAgICAgICAiVGltZXMgTmV3IFJvbWFuIiwKKyAgICAgICAgIlRyYWRpdGlvbmFsIEFyYWJpYyIsCisgICAgICAgICJUcmVidWNoZXQgTVMiLAorICAgICAgICAiVHVuZ2EiLAorICAgICAgICAiVmVyZGFuYSIsCisgICAgICAgICJXZWJkaW5ncyIsCisgICAgICAgICJXaW5nZGluZ3MiLAorICAgICAgICAiIiwKKyAgICAgIH0sCisgICAgfSwKKyAgICB7ICJDb3JlIE1TIExlZ2FjeSBGb250cyIsCisgICAgICB7ICJBcmlhbCBCbGFjayIsCisgICAgICAgICJBcmlhbCBOYXJyb3ciLAorICAgICAgICAiQXJpYWwgVW5pY29kZSBNUyIsCisgICAgICAgICJBcmlhbCIsCisgICAgICAgICJDb21pYyBTYW5zIE1TIiwKKyAgICAgICAgIkNvdXJpZXIgTmV3IiwKKyAgICAgICAgIkdhcmFtb25kIiwKKyAgICAgICAgIkdlb3JnaWEiLAorICAgICAgICAiSW1wYWN0IiwKKyAgICAgICAgIkx1Y2lkYSBDb25zb2xlIiwKKyAgICAgICAgIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLAorICAgICAgICAiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLAorICAgICAgICAiUGFsYXRpbm8gTGlub3R5cGUiLAorICAgICAgICAiVGFob21hIiwKKyAgICAgICAgIlRpbWVzIE5ldyBSb21hbiIsCisgICAgICAgICJUcmVidWNoZXQgTVMiLAorICAgICAgICAiVmVyZGFuYSIsCisgICAgICAgICIiLAorICAgICAgfSwKKyAgICB9LAorICAgIHsgIkFwcGxlIExlZ2FjeSBGb250cyIsCisgICAgICB7ICJHZW5ldmEiLAorICAgICAgICAiVGltZXMiLAorICAgICAgICAiTW9uYWNvIiwKKyAgICAgICAgIkNlbnR1cnkiLAorICAgICAgICAiQ2hhbGtib2FyZCIsCisgICAgICAgICJMb2JzdGVyIiwKKyAgICAgICAgIkNlbnR1cnkgR290aGljIiwKKyAgICAgICAgIk9wdGltYSIsCisgICAgICAgICJMdWNpZGEgR3JhbmRlIiwKKyAgICAgICAgIkdpbGwgU2FucyIsCisgICAgICAgICJCYXNrZXJ2aWxsZSIsCisgICAgICAgICJIZWx2ZXRpY2EiLAorICAgICAgICAiSGVsdmV0aWNhIE5ldWUiLAorICAgICAgICAiIiwKKyAgICAgIH0sCisgICAgfSwKKyAgICB7ICJMZWdhY3kgU2FucyBGb250cyIsCisgICAgICB7ICJBbmRhbGUgTW9ubyIsCisgICAgICAgICJBcmlhbCBVbmljb2RlIE1TIiwKKyAgICAgICAgIkFyaWFsIiwKKyAgICAgICAgIkNlbnR1cnkgR290aGljIiwKKyAgICAgICAgIkNvbWljIFNhbnMgTVMiLAorICAgICAgICAiRnJhbmtsaW4gR290aGljIE1lZGl1bSIsCisgICAgICAgICJHZW5ldmEiLAorICAgICAgICAiTHVjaWRhIENvbnNvbGUiLAorICAgICAgICAiTHVjaWRhIEdyYW5kZSIsCisgICAgICAgICJMdWNpZGEgU2FucyBVbmljb2RlIiwKKyAgICAgICAgIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXIiLAorICAgICAgICAiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLAorICAgICAgICAiTW9uYWNvIiwKKyAgICAgICAgIlRhaG9tYSIsCisgICAgICAgICJUcmVidWNoZXQgTVMiLAorICAgICAgICAiVmVyZGFuYSIsCisgICAgICAgICIiLAorICAgICAgfSwKKyAgICB9LAorCisgICAgeyAiTWlzYyBMZWdhY3kgRm9udHMiLAorICAgICAgeyAiRGFyayBDb3VyaWVyIiwgIiIsIH0sIH0sCisgICAgeyAiVmVyZGFuYSBDbG9uZXMiLAorICAgICAgeyAiRGVqYVZ1IFNhbnMiLAorICAgICAgICAiQml0c3RyZWFtIFZlcmEgU2FucyIsICIiLCB9LCB9LAorICAgIHsgIlZlcmRhbmEgYW5kIENsb25lcyIsCisgICAgICB7ICJEZWphVnUgU2FucyIsCisgICAgICAgICJCaXRzdHJlYW0gVmVyYSBTYW5zIiwKKyAgICAgICAgIlZlcmRhbmEiLCAiIiwgfSwgfSwKKyAgfTsKKworCisgIC8qIERlZmluZSB0aGlzIHRvIGZvcmNlIG5hdHVyYWwgKGkuZS4gbm90IGJpdG1hcC1jb21wYXRpYmxlKSB3aWR0aHMuICAgICAqLworICAvKiBUaGUgZGVmYXVsdCBsZWFucyBzdHJvbmdseSB0b3dhcmRzIG5hdHVyYWwgd2lkdGhzIGV4Y2VwdCBmb3IgYSBmZXcgICAgKi8KKyAgLyogbGVnYWN5IGZvbnRzIHdoZXJlIGEgc2VsZWN0aXZlIGNvbWJpbmF0aW9uIHByb2R1Y2VzIG5pY2VyIHJlc3VsdHMuICAgICovCisvKiAjZGVmaW5lIEZPUkNFX05BVFVSQUxfV0lEVEhTICAgKi8KKworCisgIC8qIERlZmluZSBgY2xhc3Nlcycgb2Ygc3R5bGVzIHRoYXQgY2FuIGJlIGdyb3VwZWQgdG9nZXRoZXIgYW5kIHVzZWQgaW4gICAqLworICAvKiBydWxlcyBiZWxvdy4gIEEgYmxhbmsgZW50cnkgIiIgaXMgcmVxdWlyZWQgYXQgdGhlIGVuZCBvZiB0aGVzZSEgICAgICAgKi8KKyNkZWZpbmUgU1RZTEVfQ0xBU1NfUlVMRVNfU0laRSAgNQorCisgIHN0YXRpYyBjb25zdCBTUEhfRm9udF9DbGFzcyAgU1RZTEVfQ0xBU1NfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU1RZTEVfQ0xBU1NfUlVMRVNfU0laRV0gPQorICB7CisgICAgeyAiUmVndWxhciBDbGFzcyIsCisgICAgICB7ICJSZWd1bGFyIiwKKyAgICAgICAgIkJvb2siLAorICAgICAgICAiTWVkaXVtIiwKKyAgICAgICAgIlJvbWFuIiwKKyAgICAgICAgIk5vcm1hbCIsCisgICAgICAgICIiLAorICAgICAgfSwKKyAgICB9LAorICAgIHsgIlJlZ3VsYXIvSXRhbGljIENsYXNzIiwKKyAgICAgIHsgIlJlZ3VsYXIiLAorICAgICAgICAiQm9vayIsCisgICAgICAgICJNZWRpdW0iLAorICAgICAgICAiSXRhbGljIiwKKyAgICAgICAgIk9ibGlxdWUiLAorICAgICAgICAiUm9tYW4iLAorICAgICAgICAiTm9ybWFsIiwKKyAgICAgICAgIiIsCisgICAgICB9LAorICAgIH0sCisgICAgeyAiQm9sZC9Cb2xkSXRhbGljIENsYXNzIiwKKyAgICAgIHsgIkJvbGQiLAorICAgICAgICAiQm9sZCBJdGFsaWMiLAorICAgICAgICAiQmxhY2siLAorICAgICAgICAiIiwKKyAgICAgIH0sCisgICAgfSwKKyAgICB7ICJCb2xkL0l0YWxpYy9Cb2xkSXRhbGljIENsYXNzIiwKKyAgICAgIHsgIkJvbGQiLAorICAgICAgICAiQm9sZCBJdGFsaWMiLAorICAgICAgICAiQmxhY2siLAorICAgICAgICAiSXRhbGljIiwKKyAgICAgICAgIk9ibGlxdWUiLAorICAgICAgICAiIiwKKyAgICAgIH0sCisgICAgfSwKKyAgICB7ICJSZWd1bGFyL0JvbGQgQ2xhc3MiLAorICAgICAgeyAiUmVndWxhciIsCisgICAgICAgICJCb29rIiwKKyAgICAgICAgIk1lZGl1bSIsCisgICAgICAgICJOb3JtYWwiLAorICAgICAgICAiUm9tYW4iLAorICAgICAgICAiQm9sZCIsCisgICAgICAgICJCbGFjayIsCisgICAgICAgICIiLAorICAgICAgfSwKKyAgICB9LAorICB9OworCisKKyAgLyogRm9yY2Ugc3BlY2lhbCBsZWdhY3kgZml4ZXMgZm9yIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPTVBBVElCSUxJVFlfTU9ERV9SVUxFU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIENPTVBBVElCSUxJVFlfTU9ERV9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0NPTVBBVElCSUxJVFlfTU9ERV9SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJWZXJkYW5hIENsb25lcyIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBEb24ndCBkbyBzdWJwaXhlbCAoaWdub3JlX3hfbW9kZSkgaGludGluZzsgZG8gbm9ybWFsIGhpbnRpbmcuICAgICAgICAgKi8KKyNkZWZpbmUgUElYRUxfSElOVElOR19SVUxFU19TSVpFICAyCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFBJWEVMX0hJTlRJTkdfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtQSVhFTF9ISU5USU5HX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGFsbW9zdCBhbHdheXMgc2FmZSAqLworICAgIHsgIkNvdXJpZXIgTmV3IiwgMTIsICJJdGFsaWMiLCAneicgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDExLCAiSXRhbGljIiwgJ3onIH0sCisgIH07CisKKworICAvKiBTdWJwaXhlbCBoaW50aW5nIGlnbm9yZXMgU0hQSVggcnVsZXMgb24gWC4gIEZvcmNlIFNIUElYIGZvciB0aGVzZS4gICAgKi8KKyNkZWZpbmUgRE9fU0hQSVhfUlVMRVNfU0laRSAgMQorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBET19TSFBJWF9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RPX1NIUElYX1JVTEVTX1NJWkVdID0KKyAgeworICAgIHsgIi0iLCAwLCAiIiwgMCB9LAorICB9OworCisKKyAgLyogU2tpcCBZIG1vdmVzIHRoYXQgc3RhcnQgd2l0aCBhIHBvaW50IHRoYXQgaXMgbm90IG9uIGEgWSBwaXhlbCAgICAgICAgICovCisgIC8qIGJvdW5kYXJ5IGFuZCBkb24ndCBtb3ZlIHRoYXQgcG9pbnQgdG8gYSBZIHBpeGVsIGJvdW5kYXJ5LiAgICAgICAgICAgICAqLworI2RlZmluZSBTS0lQX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRSAgNAorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQorICB7CisgICAgLyogZml4IHZ3eHl6IHRoaW5uZXNzKi8KKyAgICB7ICJDb25zb2xhcyIsIDAsICIiLCAwIH0sCisgICAgLyogRml4IHRoaW4gbWlkZGxlIHN0ZW1zICovCisgICAgeyAiQ29yZSBNUyBMZWdhY3kgRm9udHMiLCAwLCAiUmVndWxhciIsIDAgfSwKKyAgICAvKiBDeXJpbGxpYyBzbWFsbCBsZXR0ZXIgSSAqLworICAgIHsgIkxlZ2FjeSBTYW5zIEZvbnRzIiwgMCwgIiIsIDAgfSwKKyAgICAvKiBGaXggYXJ0aWZhY3RzIHdpdGggc29tZSBSZWd1bGFyICYgQm9sZCAqLworICAgIHsgIlZlcmRhbmEgQ2xvbmVzIiwgMCwgIiIsIDAgfSwKKyAgfTsKKworCisjZGVmaW5lIFNLSVBfTk9OUElYRUxfWV9NT1ZFU19SVUxFU19FWENFUFRJT05TX1NJWkUgIDEKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfRVhDRVBUSU9OU19TSVpFXSA9CisgIHsKKyAgICAvKiBGaXhlcyA8IGFuZCA+ICovCisgICAgeyAiQ291cmllciBOZXciLCAwLCAiUmVndWxhciIsIDAgfSwKKyAgfTsKKworCisgIC8qIFNraXAgWSBtb3ZlcyB0aGF0IHN0YXJ0IHdpdGggYSBwb2ludCB0aGF0IGlzIG5vdCBvbiBhIFkgcGl4ZWwgICAgICAgICAqLworICAvKiBib3VuZGFyeSBhbmQgZG9uJ3QgbW92ZSB0aGF0IHBvaW50IHRvIGEgWSBwaXhlbCBib3VuZGFyeS4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0tJUF9OT05QSVhFTF9ZX01PVkVTX0RFTFRBUF9SVUxFU19TSVpFICAyCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVBfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX05PTlBJWEVMX1lfTU9WRVNfREVMVEFQX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIE1haW50YWluIHRoaWNrbmVzcyBvZiBkaWFnb25hbCBpbiAnTicgKi8KKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAwLCAiUmVndWxhci9Cb2xkIENsYXNzIiwgJ04nIH0sCisgICAgeyAiR2VvcmdpYSIsIDAsICJSZWd1bGFyL0JvbGQgQ2xhc3MiLCAnTicgfSwKKyAgfTsKKworCisgIC8qIFNraXAgWSBtb3ZlcyB0aGF0IG1vdmUgYSBwb2ludCBvZmYgYSBZIHBpeGVsIGJvdW5kYXJ5LiAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRSAgMQorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX09GRlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQorICB7CisgICAgeyAiLSIsIDAsICIiLCAwIH0sCisgIH07CisKKworI2RlZmluZSBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUlVMRVNfRVhDRVBUSU9OU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfT0ZGUElYRUxfWV9NT1ZFU19SdWxlc19FeGNlcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU0tJUF9PRkZQSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRV0gPQorICB7CisgICAgeyAiLSIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBSb3VuZCBtb3ZlcyB0aGF0IGRvbid0IG1vdmUgYSBwb2ludCB0byBhIFkgcGl4ZWwgYm91bmRhcnkuICAgICAgICAgICAgKi8KKyNkZWZpbmUgUk9VTkRfTk9OUElYRUxfWV9NT1ZFU19SVUxFU19TSVpFICAyCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtST1VORF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIERyb2lkIGZvbnQgaW5zdHJ1Y3Rpb25zIGRvbid0IHNuYXAgWSB0byBwaXhlbHMgKi8KKyAgICB7ICJEcm9pZCBTYW5zIiwgMCwgIlJlZ3VsYXIvSXRhbGljIENsYXNzIiwgMCB9LAorICAgIHsgIkRyb2lkIFNhbnMgTW9ubyIsIDAsICIiLCAwIH0sCisgIH07CisKKworI2RlZmluZSBST1VORF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRSAgMQorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBST1VORF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtST1VORF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRV0gPQorICB7CisgICAgeyAiLSIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBBbGxvdyBhIERpcmVjdF9Nb3ZlIGFsb25nIFggZnJlZWRvbSB2ZWN0b3IgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUxMT1dfWF9ETU9WRV9SVUxFU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIEFMTE9XX1hfRE1PVkVfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBTExPV19YX0RNT1ZFX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIEZpeGVzIHZhbmlzaGluZyBkaWFnb25hbCBpbiA0ICovCisgICAgeyAiVmVyZGFuYSIsIDAsICJSZWd1bGFyIiwgJzQnIH0sCisgIH07CisKKworICAvKiBSZXR1cm4gTVMgcmFzdGVyaXplciB2ZXJzaW9uIDM1IGlmIG1hdGNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkFTVEVSSVpFUl8zNV9SVUxFU19TSVpFICA4CisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJBU1RFUklaRVJfMzVfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSQVNURVJJWkVSXzM1X1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG9ubHkgd2F5IHRvIG1ha2UgdGhlc2UgbG9vayBnb29kICovCisgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMCwgIlJlZ3VsYXIiLCAnaScgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAwLCAiUmVndWxhciIsICdqJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDAsICJSZWd1bGFyIiwgJ20nIH0sCisgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMCwgIlJlZ3VsYXIiLCAncicgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAwLCAiUmVndWxhciIsICdhJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDAsICJSZWd1bGFyIiwgJ24nIH0sCisgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMCwgIlJlZ3VsYXIiLCAncCcgfSwKKyAgICB7ICJUaW1lcyIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBEb24ndCByb3VuZCB0byB0aGUgc3VicGl4ZWwgZ3JpZC4gIFJvdW5kIHRvIHBpeGVsIGdyaWQuICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTk9STUFMX1JPVU5EX1JVTEVTX1NJWkUgIDEKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgTk9STUFMX1JPVU5EX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTk9STUFMX1JPVU5EX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIEZpeCBzZXJpZiB0aGlja25lc3MgZm9yIGNlcnRhaW4gcHBlbXMgKi8KKyAgICAvKiBDYW4gcHJvYmFibHkgYmUgZ2VuZXJhbGl6ZWQgc29tZWhvdyAgICovCisgICAgeyAiQ291cmllciBOZXciLCAwLCAiIiwgMCB9LAorICB9OworCisKKyAgLyogU2tpcCBJVVAgaW5zdHJ1Y3Rpb25zIGlmIG1hdGNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNLSVBfSVVQX1JVTEVTX1NJWkUgIDEKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgU0tJUF9JVVBfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX0lVUF9SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJBcmlhbCIsIDEzLCAiUmVndWxhciIsICdhJyB9LAorICB9OworCisKKyAgLyogU2tpcCBNSUFQIFR3aWxpZ2h0IGhhY2sgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1JQVBfSEFDS19SVUxFU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIE1JQVBfSEFDS19SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW01JQVBfSEFDS19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJHZW5ldmEiLCAxMiwgIiIsIDAgfSwKKyAgfTsKKworCisgIC8qIFNraXAgREVMVEFQIGluc3RydWN0aW9ucyBpZiBtYXRjaGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTFdBWVNfU0tJUF9ERUxUQVBfUlVMRVNfU0laRSAgMjMKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQUxXQVlTX1NLSVBfREVMVEFQX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUxXQVlTX1NLSVBfREVMVEFQX1JVTEVTX1NJWkVdID0KKyAgeworICAgIHsgIkdlb3JnaWEiLCAwLCAiUmVndWxhciIsICdrJyB9LAorICAgIC8qIGZpeCB2YXJpb3VzIHByb2JsZW1zIHdpdGggZSBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgKi8KKyAgICB7ICJUcmVidWNoZXQgTVMiLCAxNCwgIlJlZ3VsYXIiLCAnZScgfSwKKyAgICB7ICJUcmVidWNoZXQgTVMiLCAxMywgIlJlZ3VsYXIiLCAnZScgfSwKKyAgICB7ICJUcmVidWNoZXQgTVMiLCAxNSwgIlJlZ3VsYXIiLCAnZScgfSwKKyAgICB7ICJUcmVidWNoZXQgTVMiLCAwLCAiSXRhbGljIiwgJ3YnIH0sCisgICAgeyAiVHJlYnVjaGV0IE1TIiwgMCwgIkl0YWxpYyIsICd3JyB9LAorICAgIHsgIlRyZWJ1Y2hldCBNUyIsIDAsICJSZWd1bGFyIiwgJ1knIH0sCisgICAgeyAiQXJpYWwiLCAxMSwgIlJlZ3VsYXIiLCAncycgfSwKKyAgICAvKiBwcmV2ZW50IHByb2JsZW1zIHdpdGggJzMnIGFuZCBvdGhlcnMgKi8KKyAgICB7ICJWZXJkYW5hIiwgMTAsICJSZWd1bGFyIiwgMCB9LAorICAgIHsgIlZlcmRhbmEiLCA5LCAiUmVndWxhciIsIDAgfSwKKyAgICAvKiBDeXJpbGxpYyBzbWFsbCBsZXR0ZXIgc2hvcnQgSSAqLworICAgIHsgIkxlZ2FjeSBTYW5zIEZvbnRzIiwgMCwgIiIsIDB4NDM4IH0sCisgICAgeyAiTGVnYWN5IFNhbnMgRm9udHMiLCAwLCAiIiwgMHg0MzkgfSwKKyAgICB7ICJBcmlhbCIsIDEwLCAiUmVndWxhciIsICc2JyB9LAorICAgIHsgIkFyaWFsIiwgMCwgIkJvbGQvQm9sZEl0YWxpYyBDbGFzcyIsICdhJyB9LAorICAgIC8qIE1ha2UgaG9yaXpvbnRhbCBzdGVtcyBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3QgKi8KKyAgICB7ICJBcmlhbCIsIDI0LCAiQm9sZCIsICdhJyB9LAorICAgIHsgIkFyaWFsIiwgMjUsICJCb2xkIiwgJ2EnIH0sCisgICAgeyAiQXJpYWwiLCAyNCwgIkJvbGQiLCAncycgfSwKKyAgICB7ICJBcmlhbCIsIDI1LCAiQm9sZCIsICdzJyB9LAorICAgIHsgIkFyaWFsIiwgMzQsICJCb2xkIiwgJ3MnIH0sCisgICAgeyAiQXJpYWwiLCAzNSwgIkJvbGQiLCAncycgfSwKKyAgICB7ICJBcmlhbCIsIDM2LCAiQm9sZCIsICdzJyB9LAorICAgIHsgIkFyaWFsIiwgMjUsICJSZWd1bGFyIiwgJ3MnIH0sCisgICAgeyAiQXJpYWwiLCAyNiwgIlJlZ3VsYXIiLCAncycgfSwKKyAgfTsKKworCisgIC8qIEFsd2F5cyBkbyBERUxUQVAgaW5zdHJ1Y3Rpb25zIGlmIG1hdGNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTFdBWVNfRE9fREVMVEFQX1JVTEVTX1NJWkUgIDEKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQUxXQVlTX0RPX0RFTFRBUF9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FMV0FZU19ET19ERUxUQVBfUlVMRVNfU0laRV0gPQorICB7CisgICAgeyAiLSIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBEb24ndCBhbGxvdyBBTElHTlJQIGFmdGVyIElVUC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTk9fQUxJR05SUF9BRlRFUl9JVVBfUlVMRVNfU0laRSAgMQorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBOT19BTElHTlJQX0FGVEVSX0lVUF9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW05PX0FMSUdOUlBfQUZURVJfSVVQX1JVTEVTX1NJWkVdID0KKyAgeworICAgIC8qIFByZXZlbnQgY3JlYXRpb24gb2YgZGVudHMgaW4gb3V0bGluZSAqLworICAgIHsgIi0iLCAwLCAiIiwgMCB9LAorICB9OworCisKKyAgLyogRG9uJ3QgYWxsb3cgREVMVEFQIGFmdGVyIElVUC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE5PX0RFTFRBUF9BRlRFUl9JVVBfUlVMRVNfU0laRSAgMQorCisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBOT19ERUxUQVBfQUZURVJfSVVQX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTk9fREVMVEFQX0FGVEVSX0lVUF9SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICItIiwgMCwgIiIsIDAgfSwKKyAgfTsKKworCisgIC8qIERvbid0IGFsbG93IENBTEwgYWZ0ZXIgSVVQLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOT19DQUxMX0FGVEVSX0lVUF9SVUxFU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIE5PX0NBTExfQUZURVJfSVVQX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTk9fQ0FMTF9BRlRFUl9JVVBfUlVMRVNfU0laRV0gPQorICB7CisgICAgLyogUHJldmVudCBjcmVhdGlvbiBvZiBkZW50cyBpbiBvdXRsaW5lICovCisgICAgeyAiLSIsIDAsICIiLCAwIH0sCisgIH07CisKKworICAvKiBEZS1lbWJvbGRlbiB0aGVzZSBnbHlwaHMgc2xpZ2h0bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVFTUJPTERFTl9SVUxFU19TSVpFICA5CisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIERFRU1CT0xERU5fUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtERUVNQk9MREVOX1JVTEVTX1NJWkVdID0KKyAgeworICAgIHsgIkNvdXJpZXIgTmV3IiwgMCwgIkJvbGQiLCAnQScgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDAsICJCb2xkIiwgJ1cnIH0sCisgICAgeyAiQ291cmllciBOZXciLCAwLCAiQm9sZCIsICd3JyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMCwgIkJvbGQiLCAnTScgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDAsICJCb2xkIiwgJ1gnIH0sCisgICAgeyAiQ291cmllciBOZXciLCAwLCAiQm9sZCIsICdLJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMCwgIkJvbGQiLCAneCcgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDAsICJCb2xkIiwgJ3onIH0sCisgICAgeyAiQ291cmllciBOZXciLCAwLCAiQm9sZCIsICd2JyB9LAorICB9OworCisKKyAgLyogRW1ib2xkZW4gdGhlc2UgZ2x5cGhzIHNsaWdodGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQk9MREVOX1JVTEVTX1NJWkUgIDIKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgRU1CT0xERU5fUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtFTUJPTERFTl9SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDAsICJSZWd1bGFyIiwgMCB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMCwgIkl0YWxpYyIsIDAgfSwKKyAgfTsKKworCisgIC8qIFRoaXMgaXMgYSBDVlQgaGFjayB0aGF0IG1ha2VzIHRoaWNrIGhvcml6b250YWwgc3RlbXMgb24gMiwgNSwgNyAgICAgICAqLworICAvKiBzaW1pbGFyIHRvIFdpbmRvd3MgWFAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVNfTkVXX1JPTUFOX0hBQ0tfUlVMRVNfU0laRSAgMTIKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgVElNRVNfTkVXX1JPTUFOX0hBQ0tfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUSU1FU19ORVdfUk9NQU5fSEFDS19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNiwgIkl0YWxpYyIsICcyJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiSXRhbGljIiwgJzUnIH0sCisgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMTYsICJJdGFsaWMiLCAnNycgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNiwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNiwgIlJlZ3VsYXIiLCAnNScgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNiwgIlJlZ3VsYXIiLCAnNycgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNywgIkl0YWxpYyIsICcyJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE3LCAiSXRhbGljIiwgJzUnIH0sCisgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMTcsICJJdGFsaWMiLCAnNycgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNywgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNywgIlJlZ3VsYXIiLCAnNScgfSwKKyAgICB7ICJUaW1lcyBOZXcgUm9tYW4iLCAxNywgIlJlZ3VsYXIiLCAnNycgfSwKKyAgfTsKKworCisgIC8qIFRoaXMgZnVkZ2VzIGRpc3RhbmNlIG9uIDIgdG8gZ2V0IHJpZCBvZiB0aGUgdmFuaXNoaW5nIHN0ZW0gaXNzdWUuICAgICAqLworICAvKiBBIHJlYWwgc29sdXRpb24gdG8gdGhpcyBpcyBjZXJ0YWlubHkgd2VsY29tZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09VUklFUl9ORVdfMl9IQUNLX1JVTEVTX1NJWkUgIDE1CisKKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIENPVVJJRVJfTkVXXzJfSEFDS19SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0NPVVJJRVJfTkVXXzJfSEFDS19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDEwLCAiUmVndWxhciIsICcyJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMTEsICJSZWd1bGFyIiwgJzInIH0sCisgICAgeyAiQ291cmllciBOZXciLCAxMiwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDEzLCAiUmVndWxhciIsICcyJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMTQsICJSZWd1bGFyIiwgJzInIH0sCisgICAgeyAiQ291cmllciBOZXciLCAxNSwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDE2LCAiUmVndWxhciIsICcyJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMTcsICJSZWd1bGFyIiwgJzInIH0sCisgICAgeyAiQ291cmllciBOZXciLCAxOCwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDE5LCAiUmVndWxhciIsICcyJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMjAsICJSZWd1bGFyIiwgJzInIH0sCisgICAgeyAiQ291cmllciBOZXciLCAyMSwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgICB7ICJDb3VyaWVyIE5ldyIsIDIyLCAiUmVndWxhciIsICcyJyB9LAorICAgIHsgIkNvdXJpZXIgTmV3IiwgMjMsICJSZWd1bGFyIiwgJzInIH0sCisgICAgeyAiQ291cmllciBOZXciLCAyNCwgIlJlZ3VsYXIiLCAnMicgfSwKKyAgfTsKKworCisjaWZuZGVmIEZPUkNFX05BVFVSQUxfV0lEVEhTCisKKyAgLyogVXNlIGNvbXBhdGlibGUgd2lkdGhzIHdpdGggdGhlc2UgZ2x5cGhzLiAgQ29tcGF0aWJsZSB3aWR0aHMgaXMgYWx3YXlzICovCisgIC8qIG9uIHdoZW4gZG9pbmcgQi9XIFRydWVUeXBlIGluc3RydWN0aW5nLCBidXQgaXMgdXNlZCBzZWxlY3RpdmVseSBoZXJlLCAqLworICAvKiB0eXBpY2FsbHkgb24gZ2x5cGhzIHdpdGggMyBvciBtb3JlIHZlcnRpY2FsIHN0ZW1zLiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09NUEFUSUJMRV9XSURUSFNfUlVMRVNfU0laRSAgMzgKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQ09NUEFUSUJMRV9XSURUSFNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtDT01QQVRJQkxFX1dJRFRIU19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJBcmlhbCBVbmljb2RlIE1TIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ20nIH0sCisgICAgeyAiQXJpYWwgVW5pY29kZSBNUyIsIDE0LCAiUmVndWxhciBDbGFzcyIsICdtJyB9LAorICAgIC8qIEN5cmlsbGljIHNtYWxsIGxldHRlciBzaGEgKi8KKyAgICB7ICJBcmlhbCIsIDEwLCAiUmVndWxhciBDbGFzcyIsIDB4NDQ4IH0sCisgICAgeyAiQXJpYWwiLCAxMSwgIlJlZ3VsYXIgQ2xhc3MiLCAnbScgfSwKKyAgICB7ICJBcmlhbCIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdtJyB9LAorICAgIC8qIEN5cmlsbGljIHNtYWxsIGxldHRlciBzaGEgKi8KKyAgICB7ICJBcmlhbCIsIDEyLCAiUmVndWxhciBDbGFzcyIsIDB4NDQ4IH0sCisgICAgeyAiQXJpYWwiLCAxMywgIlJlZ3VsYXIgQ2xhc3MiLCAweDQ0OCB9LAorICAgIHsgIkFyaWFsIiwgMTQsICJSZWd1bGFyIENsYXNzIiwgJ20nIH0sCisgICAgLyogQ3lyaWxsaWMgc21hbGwgbGV0dGVyIHNoYSAqLworICAgIHsgIkFyaWFsIiwgMTQsICJSZWd1bGFyIENsYXNzIiwgMHg0NDggfSwKKyAgICB7ICJBcmlhbCIsIDE1LCAiUmVndWxhciBDbGFzcyIsIDB4NDQ4IH0sCisgICAgeyAiQXJpYWwiLCAxNywgIlJlZ3VsYXIgQ2xhc3MiLCAnbScgfSwKKyAgICB7ICJEZWphVnUgU2FucyIsIDE1LCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIDExLCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIDEyLCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJTZWdvZSBVSSIsIDExLCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJNb25hY28iLCAwLCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJTZWdvZSBVSSIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdtJyB9LAorICAgIHsgIlNlZ29lIFVJIiwgMTQsICJSZWd1bGFyIENsYXNzIiwgJ20nIH0sCisgICAgeyAiVGFob21hIiwgMTEsICJSZWd1bGFyIENsYXNzIiwgMCB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiUmVndWxhciBDbGFzcyIsICdjJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiUmVndWxhciBDbGFzcyIsICdtJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiUmVndWxhciBDbGFzcyIsICdvJyB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiUmVndWxhciBDbGFzcyIsICd3JyB9LAorICAgIHsgIlRyZWJ1Y2hldCBNUyIsIDExLCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJUcmVidWNoZXQgTVMiLCAxMiwgIlJlZ3VsYXIgQ2xhc3MiLCAwIH0sCisgICAgeyAiVHJlYnVjaGV0IE1TIiwgMTQsICJSZWd1bGFyIENsYXNzIiwgMCB9LAorICAgIHsgIlRyZWJ1Y2hldCBNUyIsIDE1LCAiUmVndWxhciBDbGFzcyIsIDAgfSwKKyAgICB7ICJVYnVudHUiLCAxMiwgIlJlZ3VsYXIgQ2xhc3MiLCAnbScgfSwKKyAgICAvKiBDeXJpbGxpYyBzbWFsbCBsZXR0ZXIgc2hhICovCisgICAgeyAiVmVyZGFuYSIsIDEwLCAiUmVndWxhciBDbGFzcyIsIDB4NDQ4IH0sCisgICAgeyAiVmVyZGFuYSIsIDExLCAiUmVndWxhciBDbGFzcyIsIDB4NDQ4IH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ2knIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ2onIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ2wnIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ20nIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2knIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2onIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2wnIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTQsICJSZWd1bGFyIENsYXNzIiwgJ20nIH0sCisgIH07CisKKworICAvKiBTY2FsaW5nIHNsaWdodGx5IGluIHRoZSB4LWRpcmVjdGlvbiBwcmlvciB0byBoaW50aW5nIHJlc3VsdHMgaW4gICAgICAgKi8KKyAgLyogbW9yZSB2aXN1YWxseSBwbGVhc2luZyBnbHlwaHMgaW4gY2VydGFpbiBjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgc29tZXRpbWVzIG5lZWRzIHRvIGJlIGNvb3JkaW5hdGVkIHdpdGggY29tcGF0aWJsZSB3aWR0aCBydWxlcy4gICAqLworICAvKiBBIHZhbHVlIG9mIDEwMDAgY29ycmVzcG9uZHMgdG8gYSBzY2FsZWQgdmFsdWUgb2YgMS4wLiAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBYX1NDQUxJTkdfUlVMRVNfU0laRSAgNTAKKworICBzdGF0aWMgY29uc3QgU1BIX1NjYWxlUnVsZSAgWF9TQ0FMSU5HX1J1bGVzW1hfU0NBTElOR19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICJEZWphVnUgU2FucyIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdtJywgOTUwIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ2EnLCAxMTAwIH0sCisgICAgeyAiVmVyZGFuYSBhbmQgQ2xvbmVzIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2EnLCAxMDUwIH0sCisgICAgeyAiQXJpYWwiLCAxMSwgIlJlZ3VsYXIgQ2xhc3MiLCAnbScsIDk3NSB9LAorICAgIHsgIkFyaWFsIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ20nLCAxMDUwIH0sCisgICAgLyogQ3lyaWxsaWMgc21hbGwgbGV0dGVyIGVsICovCisgICAgeyAiQXJpYWwiLCAxMywgIlJlZ3VsYXIgQ2xhc3MiLCAweDQzQiwgOTUwIH0sCisgICAgeyAiQXJpYWwiLCAxMywgIlJlZ3VsYXIgQ2xhc3MiLCAnbycsIDk1MCB9LAorICAgIHsgIkFyaWFsIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2UnLCA5NTAgfSwKKyAgICB7ICJBcmlhbCIsIDE0LCAiUmVndWxhciBDbGFzcyIsICdtJywgOTUwIH0sCisgICAgLyogQ3lyaWxsaWMgc21hbGwgbGV0dGVyIGVsICovCisgICAgeyAiQXJpYWwiLCAxNSwgIlJlZ3VsYXIgQ2xhc3MiLCAweDQzQiwgOTI1IH0sCisgICAgeyAiQml0c3RyZWFtIFZlcmEgU2FucyIsIDEwLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwLCAxMTAwIH0sCisgICAgeyAiQml0c3RyZWFtIFZlcmEgU2FucyIsIDEyLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwLCAxMDUwIH0sCisgICAgeyAiQml0c3RyZWFtIFZlcmEgU2FucyIsIDE2LCAiUmVndWxhciBDbGFzcyIsIDAsIDEwNTAgfSwKKyAgICB7ICJCaXRzdHJlYW0gVmVyYSBTYW5zIiwgOSwgIlJlZ3VsYXIvSXRhbGljIENsYXNzIiwgMCwgMTA1MCB9LAorICAgIHsgIkRlamFWdSBTYW5zIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ2wnLCA5NzUgfSwKKyAgICB7ICJEZWphVnUgU2FucyIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdpJywgOTc1IH0sCisgICAgeyAiRGVqYVZ1IFNhbnMiLCAxMiwgIlJlZ3VsYXIgQ2xhc3MiLCAnaicsIDk3NSB9LAorICAgIHsgIkRlamFWdSBTYW5zIiwgMTMsICJSZWd1bGFyIENsYXNzIiwgJ2wnLCA5NTAgfSwKKyAgICB7ICJEZWphVnUgU2FucyIsIDEzLCAiUmVndWxhciBDbGFzcyIsICdpJywgOTUwIH0sCisgICAgeyAiRGVqYVZ1IFNhbnMiLCAxMywgIlJlZ3VsYXIgQ2xhc3MiLCAnaicsIDk1MCB9LAorICAgIHsgIkRlamFWdSBTYW5zIiwgMTAsICJSZWd1bGFyL0l0YWxpYyBDbGFzcyIsIDAsIDExMDAgfSwKKyAgICB7ICJEZWphVnUgU2FucyIsIDEyLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwLCAxMDUwIH0sCisgICAgeyAiR2VvcmdpYSIsIDEwLCAiIiwgMCwgMTA1MCB9LAorICAgIHsgIkdlb3JnaWEiLCAxMSwgIiIsIDAsIDExMDAgfSwKKyAgICB7ICJHZW9yZ2lhIiwgMTIsICIiLCAwLCAxMDI1IH0sCisgICAgeyAiR2VvcmdpYSIsIDEzLCAiIiwgMCwgMTA1MCB9LAorICAgIHsgIkdlb3JnaWEiLCAxNiwgIiIsIDAsIDEwNTAgfSwKKyAgICB7ICJHZW9yZ2lhIiwgMTcsICIiLCAwLCAxMDMwIH0sCisgICAgeyAiTGliZXJhdGlvbiBTYW5zIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ20nLCAxMTAwIH0sCisgICAgeyAiTHVjaWRhIEdyYW5kZSIsIDExLCAiUmVndWxhciBDbGFzcyIsICdtJywgMTEwMCB9LAorICAgIHsgIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgMTEsICJSZWd1bGFyIENsYXNzIiwgJ20nLCA5NTAgfSwKKyAgICB7ICJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdtJywgMTA1MCB9LAorICAgIHsgIlNlZ29lIFVJIiwgMTIsICJSZWd1bGFyIENsYXNzIiwgJ0gnLCAxMDUwIH0sCisgICAgeyAiU2Vnb2UgVUkiLCAxMiwgIlJlZ3VsYXIgQ2xhc3MiLCAnbScsIDEwNTAgfSwKKyAgICB7ICJTZWdvZSBVSSIsIDE0LCAiUmVndWxhciBDbGFzcyIsICdtJywgMTA1MCB9LAorICAgIHsgIlRhaG9tYSIsIDExLCAiUmVndWxhciBDbGFzcyIsICdpJywgOTc1IH0sCisgICAgeyAiVGFob21hIiwgMTEsICJSZWd1bGFyIENsYXNzIiwgJ2wnLCA5NzUgfSwKKyAgICB7ICJUYWhvbWEiLCAxMSwgIlJlZ3VsYXIgQ2xhc3MiLCAnaicsIDkwMCB9LAorICAgIHsgIlRhaG9tYSIsIDExLCAiUmVndWxhciBDbGFzcyIsICdtJywgOTE4IH0sCisgICAgeyAiVmVyZGFuYSIsIDEwLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwLCAxMTAwIH0sCisgICAgeyAiVmVyZGFuYSIsIDEyLCAiUmVndWxhciBDbGFzcyIsICdtJywgOTc1IH0sCisgICAgeyAiVmVyZGFuYSIsIDEyLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwLCAxMDUwIH0sCisgICAgeyAiVmVyZGFuYSIsIDEzLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAnaScsIDk1MCB9LAorICAgIHsgIlZlcmRhbmEiLCAxMywgIlJlZ3VsYXIvSXRhbGljIENsYXNzIiwgJ2onLCA5NTAgfSwKKyAgICB7ICJWZXJkYW5hIiwgMTMsICJSZWd1bGFyL0l0YWxpYyBDbGFzcyIsICdsJywgOTUwIH0sCisgICAgeyAiVmVyZGFuYSIsIDE2LCAiUmVndWxhciBDbGFzcyIsIDAsIDEwNTAgfSwKKyAgICB7ICJWZXJkYW5hIiwgOSwgIlJlZ3VsYXIvSXRhbGljIENsYXNzIiwgMCwgMTA1MCB9LAorICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDE2LCAiUmVndWxhciBDbGFzcyIsICdtJywgOTE4IH0sCisgICAgeyAiVHJlYnVjaGV0IE1TIiwgMTEsICJSZWd1bGFyIENsYXNzIiwgJ20nLCA4MDAgfSwKKyAgICB7ICJUcmVidWNoZXQgTVMiLCAxMiwgIlJlZ3VsYXIgQ2xhc3MiLCAnbScsIDgwMCB9LAorICB9OworCisjZWxzZQorCisjZGVmaW5lIENPTVBBVElCTEVfV0lEVEhTX1JVTEVTX1NJWkUgIDEKKworICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQ09NUEFUSUJMRV9XSURUSFNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtDT01QQVRJQkxFX1dJRFRIU19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICItIiwgMCwgIiIsIDAgfSwKKyAgfTsKKworCisjZGVmaW5lIFhfU0NBTElOR19SVUxFU19TSVpFICAxCisKKyAgc3RhdGljIGNvbnN0IFNQSF9TY2FsZVJ1bGUgIFhfU0NBTElOR19SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1hfU0NBTElOR19SVUxFU19TSVpFXSA9CisgIHsKKyAgICB7ICItIiwgMCwgIiIsIDAsIDEwMDAgfSwKKyAgfTsKKworI2VuZGlmIC8qIEZPUkNFX05BVFVSQUxfV0lEVEhTICovCisKKworICBzdGF0aWMgRlRfQm9vbAorICBpc19tZW1iZXJfb2ZfZmFtaWx5X2NsYXNzKCBjb25zdCBGVF9TdHJpbmcqICBkZXRlY3RlZF9mb250X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHJ1bGVfZm9udF9uYW1lICkKKyAgeworICAgIEZUX1VJbnQgIGksIGo7CisKKworICAgIC8qIERvZXMgZm9udCBuYW1lIG1hdGNoIHJ1bGUgZmFtaWx5PyAqLworICAgIGlmICggc3RyY21wKCBkZXRlY3RlZF9mb250X25hbWUsIHJ1bGVfZm9udF9uYW1lICkgPT0gMCApCisgICAgICByZXR1cm4gVFJVRTsKKworICAgIC8qIElzIGZvbnQgbmFtZSBhIHdpbGRjYXJkICIiPyAqLworICAgIGlmICggc3RyY21wKCBydWxlX2ZvbnRfbmFtZSwgIiIgKSA9PSAwICkKKyAgICAgIHJldHVybiBUUlVFOworCisgICAgLyogSXMgZm9udCBuYW1lIGNvbnRhaW5lZCBpbiBhIGNsYXNzIGxpc3Q/ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBGQU1JTFlfQ0xBU1NfUlVMRVNfU0laRTsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIHN0cmNtcCggRkFNSUxZX0NMQVNTX1J1bGVzW2ldLm5hbWUsIHJ1bGVfZm9udF9uYW1lICkgPT0gMCApCisgICAgICB7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgU1BIX01BWF9DTEFTU19NRU1CRVJTOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBzdHJjbXAoIEZBTUlMWV9DTEFTU19SdWxlc1tpXS5tZW1iZXJbal0sICIiICkgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBpZiAoIHN0cmNtcCggRkFNSUxZX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRfZm9udF9uYW1lICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgaXNfbWVtYmVyX29mX3N0eWxlX2NsYXNzKCBjb25zdCBGVF9TdHJpbmcqICBkZXRlY3RlZF9mb250X3N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHJ1bGVfZm9udF9zdHlsZSApCisgIHsKKyAgICBGVF9VSW50ICBpLCBqOworCisKKyAgICAvKiBEb2VzIGZvbnQgc3R5bGUgbWF0Y2ggcnVsZSBzdHlsZT8gKi8KKyAgICBpZiAoIHN0cmNtcCggZGV0ZWN0ZWRfZm9udF9zdHlsZSwgcnVsZV9mb250X3N0eWxlICkgPT0gMCApCisgICAgICByZXR1cm4gVFJVRTsKKworICAgIC8qIElzIGZvbnQgc3R5bGUgYSB3aWxkY2FyZCAiIj8gKi8KKyAgICBpZiAoIHN0cmNtcCggcnVsZV9mb250X3N0eWxlLCAiIiApID09IDAgKQorICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICAvKiBJcyBmb250IHN0eWxlIGNvbnRhaW5lZCBpbiBhIGNsYXNzIGxpc3Q/ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBTVFlMRV9DTEFTU19SVUxFU19TSVpFOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggc3RyY21wKCBTVFlMRV9DTEFTU19SdWxlc1tpXS5uYW1lLCBydWxlX2ZvbnRfc3R5bGUgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBTUEhfTUFYX0NMQVNTX01FTUJFUlM7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHN0cmNtcCggU1RZTEVfQ0xBU1NfUnVsZXNbaV0ubWVtYmVyW2pdLCAiIiApID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgaWYgKCBzdHJjbXAoIFNUWUxFX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRfZm9udF9zdHlsZSApID09IDAgKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIHNwaF90ZXN0X3R3ZWFrKCBUVF9GYWNlICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogICAgICBmYW1pbHksCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgcHBlbSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogICAgICBzdHlsZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFNQSF9Ud2Vha1J1bGUqICBydWxlLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICAgIG51bV9ydWxlcyApCisgIHsKKyAgICBGVF9VSW50ICBpOworCisKKyAgICAvKiBydWxlIGNoZWNrcyBtYXkgYmUgYWJsZSB0byBiZSBvcHRpbWl6ZWQgZnVydGhlciAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX3J1bGVzOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggZmFtaWx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBpc19tZW1iZXJfb2ZfZmFtaWx5X2NsYXNzICggZmFtaWx5LCBydWxlW2ldLmZhbWlseSApICkgKQorICAgICAgICBpZiAoIHJ1bGVbaV0ucHBlbSA9PSAwICAgIHx8CisgICAgICAgICAgICAgcnVsZVtpXS5wcGVtID09IHBwZW0gKQorICAgICAgICAgIGlmICggc3R5bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgaXNfbWVtYmVyX29mX3N0eWxlX2NsYXNzICggc3R5bGUsIHJ1bGVbaV0uc3R5bGUgKSApCisgICAgICAgICAgICBpZiAoIHJ1bGVbaV0uZ2x5cGggPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgRlRfR2V0X0NoYXJfSW5kZXgoIChGVF9GYWNlKWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlW2ldLmdseXBoICkgPT0gZ2x5cGhfaW5kZXggKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHNjYWxlX3Rlc3RfdHdlYWsoIFRUX0ZhY2UgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICAgICAgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgICAgIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNQSF9TY2FsZVJ1bGUqICBydWxlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgbnVtX3J1bGVzICkKKyAgeworICAgIEZUX1VJbnQgIGk7CisKKworICAgIC8qIHJ1bGUgY2hlY2tzIG1heSBiZSBhYmxlIHRvIGJlIG9wdGltaXplZCBmdXJ0aGVyICovCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fcnVsZXM7IGkrKyApCisgICAgeworICAgICAgaWYgKCBmYW1pbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIGlzX21lbWJlcl9vZl9mYW1pbHlfY2xhc3MgKCBmYW1pbHksIHJ1bGVbaV0uZmFtaWx5ICkgKSApCisgICAgICAgIGlmICggcnVsZVtpXS5wcGVtID09IDAgICAgfHwKKyAgICAgICAgICAgICBydWxlW2ldLnBwZW0gPT0gcHBlbSApCisgICAgICAgICAgaWYgKCBzdHlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGlzX21lbWJlcl9vZl9zdHlsZV9jbGFzcyggc3R5bGUsIHJ1bGVbaV0uc3R5bGUgKSApCisgICAgICAgICAgICBpZiAoIHJ1bGVbaV0uZ2x5cGggPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgRlRfR2V0X0NoYXJfSW5kZXgoIChGVF9GYWNlKWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlW2ldLmdseXBoICkgPT0gZ2x5cGhfaW5kZXggKQorICAgICAgICByZXR1cm4gcnVsZVtpXS5zY2FsZTsKKyAgICB9CisKKyAgICByZXR1cm4gMTAwMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9VSW50ICkKKyAgc3BoX3Rlc3RfdHdlYWtfeF9zY2FsaW5nKCBUVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIGZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICBwcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgIGdseXBoX2luZGV4ICkKKyAgeworICAgIHJldHVybiBzY2FsZV90ZXN0X3R3ZWFrKCBmYWNlLCBmYW1pbHksIHBwZW0sIHN0eWxlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWF9TQ0FMSU5HX1J1bGVzLCBYX1NDQUxJTkdfUlVMRVNfU0laRSApOworICB9CisKKworI2RlZmluZSBUV0VBS19SVUxFUyggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIHNwaF90ZXN0X3R3ZWFrKCBmYWNlLCBmYW1pbHksIHBwZW0sIHN0eWxlLCBnbHlwaF9pbmRleCwgXAorICAgICAgICAgICAgICAgICAgICAgICB4IyNfUnVsZXMsIHgjI19SVUxFU19TSVpFICkgKSAgICAgICAgICAgXAorICAgIGxvYWRlci0+ZXhlYy0+c3BoX3R3ZWFrX2ZsYWdzIHw9IFNQSF9UV0VBS18jI3g7CisKKyNkZWZpbmUgVFdFQUtfUlVMRVNfRVhDRVBUSU9OUyggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKCBzcGhfdGVzdF90d2VhayggZmFjZSwgZmFtaWx5LCBwcGVtLCBzdHlsZSwgZ2x5cGhfaW5kZXgsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgeCMjX1J1bGVzX0V4Y2VwdGlvbnMsIHgjI19SVUxFU19FWENFUFRJT05TX1NJWkUgKSApIFwKKyAgICBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyAmPSB+U1BIX1RXRUFLXyMjeDsKKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHNwaF9zZXRfdHdlYWtzKCBUVF9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXggKQorICB7CisgICAgVFRfRmFjZSAgICAgZmFjZSAgID0gKFRUX0ZhY2UpbG9hZGVyLT5mYWNlOworICAgIEZUX1N0cmluZyogIGZhbWlseSA9IGZhY2UtPnJvb3QuZmFtaWx5X25hbWU7CisgICAgRlRfVUludCAgICAgcHBlbSAgID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsKKyAgICBGVF9TdHJpbmcqICBzdHlsZSAgPSBmYWNlLT5yb290LnN0eWxlX25hbWU7CisKKworICAgIC8qIGRvbid0IGFwcGx5IHJ1bGVzIGlmIHN0eWxlIGlzbid0IHNldCAqLworICAgIGlmICggIWZhY2UtPnJvb3Quc3R5bGVfbmFtZSApCisgICAgICByZXR1cm47CisKKyNpZmRlZiBTUEhfREVCVUdfTU9SRV9WRVJCT1NFCisgICAgcHJpbnRmKCAiJXMsJWQsJXMsJWM9JWQgIiwKKyAgICAgICAgICAgIGZhbWlseSwgcHBlbSwgc3R5bGUsIGdseXBoX2luZGV4LCBnbHlwaF9pbmRleCApOworI2VuZGlmCisKKyAgICBUV0VBS19SVUxFUyggUElYRUxfSElOVElORyApOworCisgICAgaWYgKCBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19QSVhFTF9ISU5USU5HICkKKyAgICB7CisgICAgICBsb2FkZXItPmV4ZWMtPmlnbm9yZV94X21vZGUgPSBGQUxTRTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUV0VBS19SVUxFUyggQUxMT1dfWF9ETU9WRSApOworICAgIFRXRUFLX1JVTEVTKCBBTFdBWVNfRE9fREVMVEFQICk7CisgICAgVFdFQUtfUlVMRVMoIEFMV0FZU19TS0lQX0RFTFRBUCApOworICAgIFRXRUFLX1JVTEVTKCBERUVNQk9MREVOICk7CisgICAgVFdFQUtfUlVMRVMoIERPX1NIUElYICk7CisgICAgVFdFQUtfUlVMRVMoIEVNQk9MREVOICk7CisgICAgVFdFQUtfUlVMRVMoIE1JQVBfSEFDSyApOworICAgIFRXRUFLX1JVTEVTKCBOT1JNQUxfUk9VTkQgKTsKKyAgICBUV0VBS19SVUxFUyggTk9fQUxJR05SUF9BRlRFUl9JVVAgKTsKKyAgICBUV0VBS19SVUxFUyggTk9fQ0FMTF9BRlRFUl9JVVAgKTsKKyAgICBUV0VBS19SVUxFUyggTk9fREVMVEFQX0FGVEVSX0lVUCApOworICAgIFRXRUFLX1JVTEVTKCBSQVNURVJJWkVSXzM1ICk7CisgICAgVFdFQUtfUlVMRVMoIFNLSVBfSVVQICk7CisKKyAgICBUV0VBS19SVUxFUyggU0tJUF9PRkZQSVhFTF9ZX01PVkVTICk7CisgICAgVFdFQUtfUlVMRVNfRVhDRVBUSU9OUyggU0tJUF9PRkZQSVhFTF9ZX01PVkVTICk7CisKKyAgICBUV0VBS19SVUxFUyggU0tJUF9OT05QSVhFTF9ZX01PVkVTX0RFTFRBUCApOworCisgICAgVFdFQUtfUlVMRVMoIFNLSVBfTk9OUElYRUxfWV9NT1ZFUyApOworICAgIFRXRUFLX1JVTEVTX0VYQ0VQVElPTlMoIFNLSVBfTk9OUElYRUxfWV9NT1ZFUyApOworCisgICAgVFdFQUtfUlVMRVMoIFJPVU5EX05PTlBJWEVMX1lfTU9WRVMgKTsKKyAgICBUV0VBS19SVUxFU19FWENFUFRJT05TKCBST1VORF9OT05QSVhFTF9ZX01PVkVTICk7CisKKyAgICBpZiAoIGxvYWRlci0+ZXhlYy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1JBU1RFUklaRVJfMzUgKQorICAgIHsKKyAgICAgIGlmICggbG9hZGVyLT5leGVjLT5yYXN0ZXJpemVyX3ZlcnNpb24gIT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSApCisgICAgICB7CisgICAgICAgIGxvYWRlci0+ZXhlYy0+cmFzdGVyaXplcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNTsKKyAgICAgICAgbG9hZGVyLT5leGVjLT5zaXplLT5jdnRfcmVhZHkgICAgPSAtMTsKKworICAgICAgICB0dF9zaXplX3JlYWR5X2J5dGVjb2RlKAorICAgICAgICAgIGxvYWRlci0+ZXhlYy0+c2l6ZSwKKyAgICAgICAgICBGVF9CT09MKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX1BFREFOVElDICkgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgbG9hZGVyLT5leGVjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBsb2FkZXItPmV4ZWMtPnJhc3Rlcml6ZXJfdmVyc2lvbiAgIT0KKyAgICAgICAgICAgU1BIX09QVElPTl9TRVRfUkFTVEVSSVpFUl9WRVJTSU9OICkKKyAgICAgIHsKKyAgICAgICAgbG9hZGVyLT5leGVjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPSBTUEhfT1BUSU9OX1NFVF9SQVNURVJJWkVSX1ZFUlNJT047CisgICAgICAgIGxvYWRlci0+ZXhlYy0+c2l6ZS0+Y3Z0X3JlYWR5ICAgID0gLTE7CisKKyAgICAgICAgdHRfc2l6ZV9yZWFkeV9ieXRlY29kZSgKKyAgICAgICAgICBsb2FkZXItPmV4ZWMtPnNpemUsCisgICAgICAgICAgRlRfQk9PTCggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9QRURBTlRJQyApICk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGxvYWRlci0+ZXhlYy0+cmFzdGVyaXplcl92ZXJzaW9uID0gU1BIX09QVElPTl9TRVRfUkFTVEVSSVpFUl9WRVJTSU9OOworICAgIH0KKworICAgIGlmICggSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSApCisgICAgeworICAgICAgVFdFQUtfUlVMRVMoIFRJTUVTX05FV19ST01BTl9IQUNLICk7CisgICAgICBUV0VBS19SVUxFUyggQ09VUklFUl9ORVdfMl9IQUNLICk7CisgICAgfQorCisgICAgaWYgKCBzcGhfdGVzdF90d2VhayggZmFjZSwgZmFtaWx5LCBwcGVtLCBzdHlsZSwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgIENPTVBBVElCSUxJVFlfTU9ERV9SdWxlcywgQ09NUEFUSUJJTElUWV9NT0RFX1JVTEVTX1NJWkUgKSApCisgICAgICBsb2FkZXItPmV4ZWMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgPSBUUlVFOworCisKKyAgICBpZiAoIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgKQorICAgIHsKKyAgICAgIGlmICggc3BoX3Rlc3RfdHdlYWsoIGZhY2UsIGZhbWlseSwgcHBlbSwgc3R5bGUsIGdseXBoX2luZGV4LAorICAgICAgICAgICAgIENPTVBBVElCTEVfV0lEVEhTX1J1bGVzLCBDT01QQVRJQkxFX1dJRFRIU19SVUxFU19TSVpFICkgKQorICAgICAgICBsb2FkZXItPmV4ZWMtPmNvbXBhdGlibGVfd2lkdGhzIHw9IFRSVUU7CisgICAgfQorICB9CisKKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLworICB0eXBlZGVmIGludCAgX3R0X3N1YnBpeF9kdW1teTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTUxYWEzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90cnVldHlwZS90dHN1YnBpeC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0dHN1YnBpeC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UVFNVQlBJWF9IX18KKyNkZWZpbmUgX19UVFNVQlBJWF9IX18KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidHRvYmpzLmgiCisjaW5jbHVkZSAidHRpbnRlcnAuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJRCBmbGFncyB0byBpZGVudGlmeSBzcGVjaWFsIGZ1bmN0aW9ucyBhdCBGREVGIGFuZCBydW50aW1lLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMSAgICAgICAweDAwMDAwMDEKKyNkZWZpbmUgU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzIgICAgICAgMHgwMDAwMDAyCisjZGVmaW5lIFNQSF9GREVGX0RJQUdPTkFMX1NUUk9LRSAgICAgIDB4MDAwMDAwNAorI2RlZmluZSBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICAgICAweDAwMDAwMDgKKyNkZWZpbmUgU1BIX0ZERUZfVFRGQVVUT0hJTlRfMSAgICAgICAgMHgwMDAwMDEwCisjZGVmaW5lIFNQSF9GREVGX1NQQUNJTkdfMSAgICAgICAgICAgIDB4MDAwMDAyMAorI2RlZmluZSBTUEhfRkRFRl9TUEFDSU5HXzIgICAgICAgICAgICAweDAwMDAwNDAKKyNkZWZpbmUgU1BIX0ZERUZfVFlQRU1BTl9TVFJPS0VTICAgICAgMHgwMDAwMDgwCisjZGVmaW5lIFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkwgIDB4MDAwMDEwMAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUd2VhayBmbGFncyB0aGF0IGFyZSBzZXQgZm9yIGVhY2ggZ2x5cGggYnkgdGhlIGJlbG93IHJ1bGVzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFVTAorI2RlZmluZSBTUEhfVFdFQUtfQUxXQVlTX0RPX0RFTFRBUCAgICAgICAgICAgICAgICAweDAwMDAwMDJVTAorI2RlZmluZSBTUEhfVFdFQUtfQUxXQVlTX1NLSVBfREVMVEFQICAgICAgICAgICAgICAweDAwMDAwMDRVTAorI2RlZmluZSBTUEhfVFdFQUtfQ09VUklFUl9ORVdfMl9IQUNLICAgICAgICAgICAgICAweDAwMDAwMDhVTAorI2RlZmluZSBTUEhfVFdFQUtfREVFTUJPTERFTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTBVTAorI2RlZmluZSBTUEhfVFdFQUtfRE9fU0hQSVggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjBVTAorI2RlZmluZSBTUEhfVFdFQUtfRU1CT0xERU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDBVTAorI2RlZmluZSBTUEhfVFdFQUtfTUlBUF9IQUNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODBVTAorI2RlZmluZSBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgICAgICAgICAgICAweDAwMDAyMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfTk9fQ0FMTF9BRlRFUl9JVVAgICAgICAgICAgICAgICAweDAwMDA0MDBVTAorI2RlZmluZSBTUEhfVFdFQUtfTk9fREVMVEFQX0FGVEVSX0lVUCAgICAgICAgICAgICAweDAwMDA4MDBVTAorI2RlZmluZSBTUEhfVFdFQUtfUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAweDAwMDEwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfUkFTVEVSSVpFUl8zNSAgICAgICAgICAgICAgICAgICAweDAwMDIwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyAgICAgICAgICAweDAwMDQwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfU0tJUF9JVVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTICAgICAgICAgICAweDAwMTAwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfU0tJUF9PRkZQSVhFTF9ZX01PVkVTICAgICAgICAgICAweDAwMjAwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgICAgICAgICAgICAweDAwNDAwMDBVTAorI2RlZmluZSBTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTX0RFTFRBUCAgICAweDAwODAwMDBVTAorCisKKyAgRlRfTE9DQUwoIEZUX0Jvb2wgKQorICBzcGhfdGVzdF90d2VhayggVFRfRmFjZSAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICAgICAgZmFtaWx5LAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICAgIHBwZW0sCisgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICAgICAgc3R5bGUsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICBjb25zdCBTUEhfVHdlYWtSdWxlKiAgcnVsZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgICBudW1fcnVsZXMgKTsKKworICBGVF9MT0NBTCggRlRfVUludCApCisgIHNwaF90ZXN0X3R3ZWFrX3hfc2NhbGluZyggVFRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICBnbHlwaF9pbmRleCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgc3BoX3NldF90d2Vha3MoIFRUX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApOworCisKKyAgLyogVGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIGFic2VudCBhIG1ldGhvZCBmb3Igc2V0dGluZyB0aGVtICovCisjZGVmaW5lIFNQSF9PUFRJT05fQklUTUFQX1dJRFRIUyAgICAgICAgICAgRkFMU0UKKyNkZWZpbmUgU1BIX09QVElPTl9TRVRfU1VCUElYRUwgICAgICAgICAgICBUUlVFCisjZGVmaW5lIFNQSF9PUFRJT05fU0VUX0dSQVlTQ0FMRSAgICAgICAgICAgRkFMU0UKKyNkZWZpbmUgU1BIX09QVElPTl9TRVRfQ09NUEFUSUJMRV9XSURUSFMgICBGQUxTRQorI2RlZmluZSBTUEhfT1BUSU9OX1NFVF9SQVNURVJJWkVSX1ZFUlNJT04gIDM4CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1RUU1VCUElYX0hfXyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvSmFtZmlsZSBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdiNjJjCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS9KYW1maWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgRnJlZVR5cGUgMiBzcmMvdHlwZTEgSmFtZmlsZQorIworIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworU3ViRGlyICBGVDJfVE9QICQoRlQyX1NSQ19ESVIpIHR5cGUxIDsKKworeworICBsb2NhbCAgX3NvdXJjZXMgOworCisgIGlmICQoRlQyX01VTFRJKQorICB7CisgICAgX3NvdXJjZXMgPSB0MWFmbSB0MWRyaXZlciB0MW9ianMgdDFsb2FkIHQxZ2xvYWQgdDFwYXJzZSA7CisgIH0KKyAgZWxzZQorICB7CisgICAgX3NvdXJjZXMgPSB0eXBlMSA7CisgIH0KKworICBMaWJyYXJ5ICAkKEZUMl9MSUIpIDogJChfc291cmNlcykuYyA7Cit9CisKKyMgZW5kIG9mIHNyYy90eXBlMSBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL21vZHVsZS5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvbW9kdWxlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjM0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgVHlwZTEgbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gVFlQRTFfRFJJVkVSCisKK2RlZmluZSBUWVBFMV9EUklWRVIKKyQoT1BFTl9EUklWRVIpIEZUX0RyaXZlcl9DbGFzc1JlYywgdDFfZHJpdmVyX2NsYXNzICQoQ0xPU0VfRFJJVkVSKQorJChFQ0hPX0RSSVZFUil0eXBlMSAgICAgJChFQ0hPX0RSSVZFUl9ERVNDKVBvc3RzY3JpcHQgZm9udCBmaWxlcyB3aXRoIGV4dGVuc2lvbiAqLnBmYSBvciAqLnBmYiQoRUNIT19EUklWRVJfRE9ORSkKK2VuZGVmCisKKyMgRU9GCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3J1bGVzLm1rIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQwNTQzCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS9ydWxlcy5tawpAQCAtMCwwICsxLDc2IEBACisjCisjIEZyZWVUeXBlIDIgVHlwZTEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gcnVsZXMKKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKKyMgVHlwZTEgZHJpdmVyIGRpcmVjdG9yeQorIworVDFfRElSIDo9ICQoU1JDX0RJUikvdHlwZTEKKworCisjIGNvbXBpbGF0aW9uIGZsYWdzIGZvciB0aGUgZHJpdmVyCisjCitUMV9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJEkkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCQoVDFfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAkKElOQ0xVREVfRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgVHlwZTEgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCisjCitUMV9EUlZfU1JDIDo9ICQoVDFfRElSKS90MXBhcnNlLmMgIFwKKyAgICAgICAgICAgICAgJChUMV9ESVIpL3QxbG9hZC5jICAgXAorICAgICAgICAgICAgICAkKFQxX0RJUikvdDFkcml2ZXIuYyBcCisgICAgICAgICAgICAgICQoVDFfRElSKS90MWFmbS5jICAgIFwKKyAgICAgICAgICAgICAgJChUMV9ESVIpL3QxZ2xvYWQuYyAgXAorICAgICAgICAgICAgICAkKFQxX0RJUikvdDFvYmpzLmMKKworIyBUeXBlMSBkcml2ZXIgaGVhZGVycworIworVDFfRFJWX0ggOj0gJChUMV9EUlZfU1JDOiUuYz0lLmgpIFwKKyAgICAgICAgICAgICQoVDFfRElSKS90MXRva2Vucy5oICBcCisgICAgICAgICAgICAkKFQxX0RJUikvdDFlcnJvcnMuaAorCisKKyMgVHlwZTEgZHJpdmVyIG9iamVjdChzKQorIworIyAgIFQxX0RSVl9PQkpfTSBpcyB1c2VkIGR1cmluZyBgbXVsdGknIGJ1aWxkcworIyAgIFQxX0RSVl9PQkpfUyBpcyB1c2VkIGR1cmluZyBgc2luZ2xlJyBidWlsZHMKKyMKK1QxX0RSVl9PQkpfTSA6PSAkKFQxX0RSVl9TUkM6JChUMV9ESVIpLyUuYz0kKE9CSl9ESVIpLyUuJE8pCitUMV9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS90eXBlMS4kTworCisjIFR5cGUxIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitUMV9EUlZfU1JDX1MgOj0gJChUMV9ESVIpL3R5cGUxLmMKKworCisjIFR5cGUxIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoVDFfRFJWX09CSl9TKTogJChUMV9EUlZfU1JDX1MpICQoVDFfRFJWX1NSQykgJChGUkVFVFlQRV9IKSAkKFQxX0RSVl9IKQorCSQoVDFfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQoVDFfRFJWX1NSQ19TKSkKKworCisjIFR5cGUxIGRyaXZlciAtIG11bHRpcGxlIG9iamVjdHMKKyMKKyQoT0JKX0RJUikvJS4kTzogJChUMV9ESVIpLyUuYyAkKEZSRUVUWVBFX0gpICQoVDFfRFJWX0gpCisJJChUMV9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJDwpCisKKworIyB1cGRhdGUgbWFpbiBkcml2ZXIgb2JqZWN0IGxpc3RzCisjCitEUlZfT0JKU19TICs9ICQoVDFfRFJWX09CSl9TKQorRFJWX09CSlNfTSArPSAkKFQxX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWFmbS5jIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWFmbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzIwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxYWZtLmMKQEAgLTAsMCArMSwzOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxYWZtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidDFhZm0uaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSAidDFlcnJvcnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3QxYWZtCisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUMV9Eb25lX01ldHJpY3MoIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIEFGTV9Gb250SW5mbyAgZmkgKQorICB7CisgICAgRlRfRlJFRSggZmktPktlcm5QYWlycyApOworICAgIGZpLT5OdW1LZXJuUGFpciA9IDA7CisKKyAgICBGVF9GUkVFKCBmaS0+VHJhY2tLZXJucyApOworICAgIGZpLT5OdW1UcmFja0tlcm4gPSAwOworCisgICAgRlRfRlJFRSggZmkgKTsKKyAgfQorCisKKyAgLyogcmVhZCBhIGdseXBoIG5hbWUgYW5kIHJldHVybiB0aGUgZXF1aXZhbGVudCBnbHlwaCBpbmRleCAqLworICBzdGF0aWMgRlRfSW50CisgIHQxX2dldF9pbmRleCggY29uc3QgY2hhciogIG5hbWUsCisgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICAgIGxlbiwKKyAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgdXNlcl9kYXRhICkKKyAgeworICAgIFQxX0ZvbnQgIHR5cGUxID0gKFQxX0ZvbnQpdXNlcl9kYXRhOworICAgIEZUX0ludCAgIG47CisKKworICAgIC8qIFBTIHN0cmluZy9uYW1lIGxlbmd0aCBtdXN0IGJlIDwgMTYtYml0ICovCisgICAgaWYgKCBsZW4gPiAweEZGRkZVICkKKyAgICAgIHJldHVybiAwOworCisgICAgZm9yICggbiA9IDA7IG4gPCB0eXBlMS0+bnVtX2dseXBoczsgbisrICkKKyAgICB7CisgICAgICBjaGFyKiAgZ25hbWUgPSAoY2hhciopdHlwZTEtPmdseXBoX25hbWVzW25dOworCisKKyAgICAgIGlmICggZ25hbWUgJiYgZ25hbWVbMF0gPT0gbmFtZVswXSAgICAgICAgJiYKKyAgICAgICAgICAgZnRfc3RybGVuKCBnbmFtZSApID09IGxlbiAgICAgICAgICAgJiYKKyAgICAgICAgICAgZnRfc3RybmNtcCggZ25hbWUsIG5hbWUsIGxlbiApID09IDAgKQorICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyN1bmRlZiAgS0VSTl9JTkRFWAorI2RlZmluZSBLRVJOX0lOREVYKCBnMSwgZzIgKSAgKCAoIChGVF9VTG9uZykoZzEpIDw8IDE2ICkgfCAoZzIpICkKKworCisgIC8qIGNvbXBhcmUgdHdvIGtlcm5pbmcgcGFpcnMgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBpbnQgKQorICBjb21wYXJlX2tlcm5fcGFpcnMoIGNvbnN0IHZvaWQqICBhLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBiICkKKyAgeworICAgIEFGTV9LZXJuUGFpciAgcGFpcjEgPSAoQUZNX0tlcm5QYWlyKWE7CisgICAgQUZNX0tlcm5QYWlyICBwYWlyMiA9IChBRk1fS2VyblBhaXIpYjsKKworICAgIEZUX1VMb25nICBpbmRleDEgPSBLRVJOX0lOREVYKCBwYWlyMS0+aW5kZXgxLCBwYWlyMS0+aW5kZXgyICk7CisgICAgRlRfVUxvbmcgIGluZGV4MiA9IEtFUk5fSU5ERVgoIHBhaXIyLT5pbmRleDEsIHBhaXIyLT5pbmRleDIgKTsKKworCisgICAgaWYgKCBpbmRleDEgPiBpbmRleDIgKQorICAgICAgcmV0dXJuIDE7CisgICAgZWxzZSBpZiAoIGluZGV4MSA8IGluZGV4MiApCisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIH0KKworCisgIC8qIHBhcnNlIGEgUEZNIGZpbGUgLS0gZm9yIG5vdywgb25seSByZWFkIHRoZSBrZXJuaW5nIHBhaXJzICovCisgIHN0YXRpYyBGVF9FcnJvcgorICBUMV9SZWFkX1BGTSggRlRfRmFjZSAgICAgICB0MV9mYWNlLAorICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICBBRk1fRm9udEluZm8gIGZpICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CisgICAgRlRfQnl0ZSogICAgICBzdGFydDsKKyAgICBGVF9CeXRlKiAgICAgIGxpbWl0OworICAgIEZUX0J5dGUqICAgICAgcDsKKyAgICBBRk1fS2VyblBhaXIgIGtwOworICAgIEZUX0ludCAgICAgICAgd2lkdGhfdGFibGVfbGVuZ3RoOworICAgIEZUX0NoYXJNYXAgICAgb2xkY2hhcm1hcDsKKyAgICBGVF9DaGFyTWFwICAgIGNoYXJtYXA7CisgICAgRlRfSW50ICAgICAgICBuOworCisKKyAgICBzdGFydCA9IChGVF9CeXRlKilzdHJlYW0tPmN1cnNvcjsKKyAgICBsaW1pdCA9IChGVF9CeXRlKilzdHJlYW0tPmxpbWl0OworCisgICAgLyogRmlndXJlIG91dCBob3cgbG9uZyB0aGUgd2lkdGggdGFibGUgaXMuICAgICAgICAgICovCisgICAgLyogVGhpcyBpbmZvIGlzIGEgbGl0dGxlLWVuZGlhbiBzaG9ydCBhdCBvZmZzZXQgOTkuICovCisgICAgcCA9IHN0YXJ0ICsgOTk7CisgICAgaWYgKCBwICsgMiA+IGxpbWl0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorICAgIHdpZHRoX3RhYmxlX2xlbmd0aCA9IEZUX1BFRUtfVVNIT1JUX0xFKCBwICk7CisKKyAgICBwICs9IDE4ICsgd2lkdGhfdGFibGVfbGVuZ3RoOworICAgIGlmICggcCArIDB4MTIgPiBsaW1pdCB8fCBGVF9QRUVLX1VTSE9SVF9MRSggcCApIDwgMHgxMiApCisgICAgICAvKiBleHRlbnNpb24gdGFibGUgaXMgcHJvYmFibHkgb3B0aW9uYWwgKi8KKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIEtlcm5pbmcgb2Zmc2V0IGlzIDE0IGJ5dGVzIGZyb20gc3RhcnQgb2YgZXh0ZW5zaW9ucyB0YWJsZS4gKi8KKyAgICBwICs9IDE0OworICAgIHAgPSBzdGFydCArIEZUX1BFRUtfVUxPTkdfTEUoIHAgKTsKKworICAgIGlmICggcCA9PSBzdGFydCApCisgICAgICAvKiB6ZXJvIG9mZnNldCBtZWFucyBubyB0YWJsZSAqLworICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBwICsgMiA+IGxpbWl0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZmktPk51bUtlcm5QYWlyID0gRlRfUEVFS19VU0hPUlRfTEUoIHAgKTsKKyAgICBwICs9IDI7CisgICAgaWYgKCBwICsgNCAqIGZpLT5OdW1LZXJuUGFpciA+IGxpbWl0ICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogQWN0dWFsbHksIGtlcm5pbmcgcGFpcnMgYXJlIHNpbXBseSBvcHRpb25hbCEgKi8KKyAgICBpZiAoIGZpLT5OdW1LZXJuUGFpciA9PSAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGFsbG9jYXRlIHRoZSBwYWlycyAqLworICAgIGlmICggRlRfUU5FV19BUlJBWSggZmktPktlcm5QYWlycywgZmktPk51bUtlcm5QYWlyICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogbm93LCByZWFkIGVhY2gga2VybiBwYWlyICovCisgICAga3AgICAgPSBmaS0+S2VyblBhaXJzOworICAgIGxpbWl0ID0gcCArIDQgKiBmaS0+TnVtS2VyblBhaXI7CisKKyAgICAvKiBQRk0ga2VybmluZyBkYXRhIGFyZSBzdG9yZWQgYnkgZW5jb2RpbmcgcmF0aGVyIHRoYW4gZ2x5cGggaW5kZXgsICovCisgICAgLyogc28gZmluZCB0aGUgUG9zdFNjcmlwdCBjaGFybWFwIG9mIHRoaXMgZm9udCBhbmQgaW5zdGFsbCBpdCAgICAgICAqLworICAgIC8qIHRlbXBvcmFyaWx5LiAgSWYgd2UgZmluZCBubyBQb3N0U2NyaXB0IGNoYXJtYXAsIHRoZW4ganVzdCB1c2UgICAgKi8KKyAgICAvKiB0aGUgZGVmYXVsdCBhbmQgaG9wZSBpdCBpcyB0aGUgcmlnaHQgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgb2xkY2hhcm1hcCA9IHQxX2ZhY2UtPmNoYXJtYXA7CisgICAgY2hhcm1hcCAgICA9IE5VTEw7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IHQxX2ZhY2UtPm51bV9jaGFybWFwczsgbisrICkKKyAgICB7CisgICAgICBjaGFybWFwID0gdDFfZmFjZS0+Y2hhcm1hcHNbbl07CisgICAgICAvKiBjaGVjayBhZ2FpbnN0IFBvc3RTY3JpcHQgcHNldWRvIHBsYXRmb3JtICovCisgICAgICBpZiAoIGNoYXJtYXAtPnBsYXRmb3JtX2lkID09IDcgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1NldF9DaGFybWFwKCB0MV9mYWNlLCBjaGFybWFwICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogS2VybmluZyBpbmZvIGlzIHN0b3JlZCBhczogICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgZW5jb2Rpbmcgb2YgZmlyc3QgZ2x5cGggKDEgYnl0ZSkgICAgICovCisgICAgLyogICBlbmNvZGluZyBvZiBzZWNvbmQgZ2x5cGggKDEgYnl0ZSkgICAgKi8KKyAgICAvKiAgIG9mZnNldCAobGl0dGxlLWVuZGlhbiBzaG9ydCkgICAgICAgICAqLworICAgIGZvciAoIDsgcCA8IGxpbWl0IDsgcCArPSA0ICkKKyAgICB7CisgICAgICBrcC0+aW5kZXgxID0gRlRfR2V0X0NoYXJfSW5kZXgoIHQxX2ZhY2UsIHBbMF0gKTsKKyAgICAgIGtwLT5pbmRleDIgPSBGVF9HZXRfQ2hhcl9JbmRleCggdDFfZmFjZSwgcFsxXSApOworCisgICAgICBrcC0+eCA9IChGVF9JbnQpRlRfUEVFS19TSE9SVF9MRShwICsgMik7CisgICAgICBrcC0+eSA9IDA7CisKKyAgICAgIGtwKys7CisgICAgfQorCisgICAgaWYgKCBvbGRjaGFybWFwICE9IE5VTEwgKQorICAgICAgZXJyb3IgPSBGVF9TZXRfQ2hhcm1hcCggdDFfZmFjZSwgb2xkY2hhcm1hcCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogbm93LCBzb3J0IHRoZSBrZXJuIHBhaXJzIGFjY29yZGluZyB0byB0aGVpciBnbHlwaCBpbmRpY2VzICovCisgICAgZnRfcXNvcnQoIGZpLT5LZXJuUGFpcnMsIGZpLT5OdW1LZXJuUGFpciwgc2l6ZW9mICggQUZNX0tlcm5QYWlyUmVjICksCisgICAgICAgICAgICAgIGNvbXBhcmVfa2Vybl9wYWlycyApOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgRlRfRlJFRSggZmktPktlcm5QYWlycyApOworICAgICAgZmktPk51bUtlcm5QYWlyID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIHBhcnNlIGEgbWV0cmljcyBmaWxlIC0tIGVpdGhlciBBRk0gb3IgUEZNIGRlcGVuZGluZyBvbiB3aGF0ICovCisgIC8qIGl0IHR1cm5zIG91dCB0byBiZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9SZWFkX01ldHJpY3MoIEZUX0ZhY2UgICAgdDFfZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eDsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgID0gc3RyZWFtLT5tZW1vcnk7CisgICAgQUZNX1BhcnNlclJlYyAgcGFyc2VyOworICAgIEFGTV9Gb250SW5mbyAgIGZpICAgICAgPSBOVUxMOworICAgIEZUX0Vycm9yICAgICAgIGVycm9yICAgPSBGVF9FUlIoIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICBUMV9Gb250ICAgICAgICB0MV9mb250ID0gJiggKFQxX0ZhY2UpdDFfZmFjZSApLT50eXBlMTsKKworCisgICAgaWYgKCBGVF9ORVcoIGZpICkgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBzdHJlYW0tPnNpemUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBmaS0+Rm9udEJCb3ggID0gdDFfZm9udC0+Zm9udF9iYm94OworICAgIGZpLT5Bc2NlbmRlciAgPSB0MV9mb250LT5mb250X2Jib3gueU1heDsKKyAgICBmaS0+RGVzY2VuZGVyID0gdDFfZm9udC0+Zm9udF9iYm94LnlNaW47CisKKyAgICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKSggKFQxX0ZhY2UpdDFfZmFjZSApLT5wc2F1eDsKKyAgICBpZiAoIHBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzLT5pbml0KCAmcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+bGltaXQgKTsKKworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgeworICAgICAgICBwYXJzZXIuRm9udEluZm8gID0gZmk7CisgICAgICAgIHBhcnNlci5nZXRfaW5kZXggPSB0MV9nZXRfaW5kZXg7CisgICAgICAgIHBhcnNlci51c2VyX2RhdGEgPSB0MV9mb250OworCisgICAgICAgIGVycm9yID0gcHNhdXgtPmFmbV9wYXJzZXJfZnVuY3MtPnBhcnNlKCAmcGFyc2VyICk7CisgICAgICAgIHBzYXV4LT5hZm1fcGFyc2VyX2Z1bmNzLT5kb25lKCAmcGFyc2VyICk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBVbmtub3duX0ZpbGVfRm9ybWF0ICkgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBzdGFydCA9IHN0cmVhbS0+Y3Vyc29yOworCisKKyAgICAgIC8qIE1TIFdpbmRvd3MgYWxsb3dzIHZlcnNpb25zIHVwIHRvIDB4M0ZGIHdpdGhvdXQgY29tcGxhaW5pbmcgKi8KKyAgICAgIGlmICggc3RyZWFtLT5zaXplID4gNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIHN0YXJ0WzFdIDwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBGVF9QRUVLX1VMT05HX0xFKCBzdGFydCArIDIgKSA9PSBzdHJlYW0tPnNpemUgKQorICAgICAgICBlcnJvciA9IFQxX1JlYWRfUEZNKCB0MV9mYWNlLCBzdHJlYW0sIGZpICk7CisgICAgfQorCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIHQxX2ZvbnQtPmZvbnRfYmJveCA9IGZpLT5Gb250QkJveDsKKworICAgICAgdDFfZmFjZS0+YmJveC54TWluID0gICBmaS0+Rm9udEJCb3gueE1pbiAgICAgICAgICAgID4+IDE2OworICAgICAgdDFfZmFjZS0+YmJveC55TWluID0gICBmaS0+Rm9udEJCb3gueU1pbiAgICAgICAgICAgID4+IDE2OworICAgICAgLyogbm8gYFUnIHN1ZmZpeCBoZXJlIHRvIDB4RkZGRiEgKi8KKyAgICAgIHQxX2ZhY2UtPmJib3gueE1heCA9ICggZmktPkZvbnRCQm94LnhNYXggKyAweEZGRkYgKSA+PiAxNjsKKyAgICAgIHQxX2ZhY2UtPmJib3gueU1heCA9ICggZmktPkZvbnRCQm94LnlNYXggKyAweEZGRkYgKSA+PiAxNjsKKworICAgICAgLyogbm8gYFUnIHN1ZmZpeCBoZXJlIHRvIDB4ODAwMCEgKi8KKyAgICAgIHQxX2ZhY2UtPmFzY2VuZGVyICA9IChGVF9TaG9ydCkoICggZmktPkFzY2VuZGVyICArIDB4ODAwMCApID4+IDE2ICk7CisgICAgICB0MV9mYWNlLT5kZXNjZW5kZXIgPSAoRlRfU2hvcnQpKCAoIGZpLT5EZXNjZW5kZXIgKyAweDgwMDAgKSA+PiAxNiApOworCisgICAgICBpZiAoIGZpLT5OdW1LZXJuUGFpciApCisgICAgICB7CisgICAgICAgIHQxX2ZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0tFUk5JTkc7CisgICAgICAgICggKFQxX0ZhY2UpdDFfZmFjZSApLT5hZm1fZGF0YSA9IGZpOworICAgICAgICBmaSA9IE5VTEw7CisgICAgICB9CisgICAgfQorCisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgIEV4aXQ6CisgICAgaWYgKCBmaSAhPSBOVUxMICkKKyAgICAgIFQxX0RvbmVfTWV0cmljcyggbWVtb3J5LCBmaSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBmaW5kIHRoZSBrZXJuaW5nIGZvciBhIGdpdmVuIGdseXBoIHBhaXIgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVDFfR2V0X0tlcm5pbmcoIEFGTV9Gb250SW5mbyAgZmksCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoMSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGgyLAorICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICBrZXJuaW5nICkKKyAgeworICAgIEFGTV9LZXJuUGFpciAgbWluLCBtaWQsIG1heDsKKyAgICBGVF9VTG9uZyAgICAgIGlkeCA9IEtFUk5fSU5ERVgoIGdseXBoMSwgZ2x5cGgyICk7CisKKworICAgIC8qIHNpbXBsZSBiaW5hcnkgc2VhcmNoICovCisgICAgbWluID0gZmktPktlcm5QYWlyczsKKyAgICBtYXggPSBtaW4gKyBmaS0+TnVtS2VyblBhaXIgLSAxOworCisgICAgd2hpbGUgKCBtaW4gPD0gbWF4ICkKKyAgICB7CisgICAgICBGVF9VTG9uZyAgbWlkaTsKKworCisgICAgICBtaWQgID0gbWluICsgKCBtYXggLSBtaW4gKSAvIDI7CisgICAgICBtaWRpID0gS0VSTl9JTkRFWCggbWlkLT5pbmRleDEsIG1pZC0+aW5kZXgyICk7CisKKyAgICAgIGlmICggbWlkaSA9PSBpZHggKQorICAgICAgeworICAgICAgICBrZXJuaW5nLT54ID0gbWlkLT54OworICAgICAgICBrZXJuaW5nLT55ID0gbWlkLT55OworCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgaWYgKCBtaWRpIDwgaWR4ICkKKyAgICAgICAgbWluID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWF4ID0gbWlkIC0gMTsKKyAgICB9CisKKyAgICBrZXJuaW5nLT54ID0gMDsKKyAgICBrZXJuaW5nLT55ID0gMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0dldF9UcmFja19LZXJuaW5nKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgIHB0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgZGVncmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBrZXJuaW5nICkKKyAgeworICAgIEFGTV9Gb250SW5mbyAgZmkgPSAoQUZNX0ZvbnRJbmZvKSggKFQxX0ZhY2UpZmFjZSApLT5hZm1fZGF0YTsKKyAgICBGVF9VSW50ICAgICAgIGk7CisKKworICAgIGlmICggIWZpICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBmaS0+TnVtVHJhY2tLZXJuOyBpKysgKQorICAgIHsKKyAgICAgIEFGTV9UcmFja0tlcm4gIHRrID0gZmktPlRyYWNrS2VybnMgKyBpOworCisKKyAgICAgIGlmICggdGstPmRlZ3JlZSAhPSBkZWdyZWUgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaWYgKCBwdHNpemUgPCB0ay0+bWluX3B0c2l6ZSApCisgICAgICAgICprZXJuaW5nID0gdGstPm1pbl9rZXJuOworICAgICAgZWxzZSBpZiAoIHB0c2l6ZSA+IHRrLT5tYXhfcHRzaXplICkKKyAgICAgICAgKmtlcm5pbmcgPSB0ay0+bWF4X2tlcm47CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICprZXJuaW5nID0gRlRfTXVsRGl2KCBwdHNpemUgLSB0ay0+bWluX3B0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRrLT5tYXhfa2VybiAtIHRrLT5taW5fa2VybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRrLT5tYXhfcHRzaXplIC0gdGstPm1pbl9wdHNpemUgKSArCisgICAgICAgICAgICAgICAgICAgdGstPm1pbl9rZXJuOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFhZm0uaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFhZm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjQyZjNlCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWFmbS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxYWZtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1QxQUZNX0hfXworI2RlZmluZSBfX1QxQUZNX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJ0MW9ianMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9SZWFkX01ldHJpY3MoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVDFfRG9uZV9NZXRyaWNzKCBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICBBRk1fRm9udEluZm8gIGZpICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUMV9HZXRfS2VybmluZyggQUZNX0ZvbnRJbmZvICBmaSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGgxLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaDIsCisgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgIGtlcm5pbmcgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9HZXRfVHJhY2tfS2VybmluZyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICBwdHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRlZ3JlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAga2VybmluZyApOworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1QxQUZNX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWRyaXZlci5jIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWRyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWYyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZHJpdmVyLmMKQEAgLTAsMCArMSw3MjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidDFkcml2ZXIuaCIKKyNpbmNsdWRlICJ0MWdsb2FkLmgiCisjaW5jbHVkZSAidDFsb2FkLmgiCisKKyNpbmNsdWRlICJ0MWVycm9ycy5oIgorCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCisjaW5jbHVkZSAidDFhZm0uaCIKKyNlbmRpZgorCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9HTFlQSF9ESUNUX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfS0VSTklOR19ICisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWRyaXZlcgorCisgLyoKKyAgKiAgR0xZUEggRElDVCBTRVJWSUNFCisgICoKKyAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdDFfZ2V0X2dseXBoX25hbWUoIFQxX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICB7CisgICAgRlRfU1RSQ1BZTiggYnVmZmVyLCBmYWNlLT50eXBlMS5nbHlwaF9uYW1lc1tnbHlwaF9pbmRleF0sIGJ1ZmZlcl9tYXggKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHQxX2dldF9uYW1lX2luZGV4KCBUMV9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiAgZ2x5cGhfbmFtZSApCisgIHsKKyAgICBGVF9JbnQgIGk7CisKKworICAgIGZvciAoIGkgPSAwOyBpIDwgZmFjZS0+dHlwZTEubnVtX2dseXBoczsgaSsrICkKKyAgICB7CisgICAgICBGVF9TdHJpbmcqICBnbmFtZSA9IGZhY2UtPnR5cGUxLmdseXBoX25hbWVzW2ldOworCisKKyAgICAgIGlmICggIWZ0X3N0cmNtcCggZ2x5cGhfbmFtZSwgZ25hbWUgKSApCisgICAgICAgIHJldHVybiAoRlRfVUludClpOworICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9HbHlwaERpY3RSZWMgIHQxX3NlcnZpY2VfZ2x5cGhfZGljdCA9CisgIHsKKyAgICAoRlRfR2x5cGhEaWN0X0dldE5hbWVGdW5jKSAgdDFfZ2V0X2dseXBoX25hbWUsCisgICAgKEZUX0dseXBoRGljdF9OYW1lSW5kZXhGdW5jKXQxX2dldF9uYW1lX2luZGV4CisgIH07CisKKworICAvKgorICAgKiAgUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IGNoYXIqCisgIHQxX2dldF9wc19uYW1lKCBUMV9GYWNlICBmYWNlICkKKyAgeworICAgIHJldHVybiAoY29uc3QgY2hhciopIGZhY2UtPnR5cGUxLmZvbnRfbmFtZTsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYyAgdDFfc2VydmljZV9wc19uYW1lID0KKyAgeworICAgIChGVF9Qc05hbWVfR2V0RnVuYyl0MV9nZXRfcHNfbmFtZQorICB9OworCisKKyAgLyoKKyAgICogIE1VTFRJUExFIE1BU1RFUlMgU0VSVklDRQorICAgKgorICAgKi8KKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjICB0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMgPQorICB7CisgICAgKEZUX0dldF9NTV9GdW5jKSAgICAgICAgVDFfR2V0X011bHRpX01hc3RlciwKKyAgICAoRlRfU2V0X01NX0Rlc2lnbl9GdW5jKSBUMV9TZXRfTU1fRGVzaWduLAorICAgIChGVF9TZXRfTU1fQmxlbmRfRnVuYykgIFQxX1NldF9NTV9CbGVuZCwKKyAgICAoRlRfR2V0X01NX1Zhcl9GdW5jKSAgICBUMV9HZXRfTU1fVmFyLAorICAgIChGVF9TZXRfVmFyX0Rlc2lnbl9GdW5jKVQxX1NldF9WYXJfRGVzaWduCisgIH07CisjZW5kaWYKKworCisgIC8qCisgICAqICBQT1NUU0NSSVBUIElORk8gU0VSVklDRQorICAgKgorICAgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgdDFfcHNfZ2V0X2ZvbnRfaW5mbyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBQU19Gb250SW5mb1JlYyogIGFmb250X2luZm8gKQorICB7CisgICAgKmFmb250X2luZm8gPSAoKFQxX0ZhY2UpZmFjZSktPnR5cGUxLmZvbnRfaW5mbzsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0MV9wc19nZXRfZm9udF9leHRyYSggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTX0ZvbnRFeHRyYVJlYyogIGFmb250X2V4dHJhICkKKyAgeworICAgICphZm9udF9leHRyYSA9ICgoVDFfRmFjZSlmYWNlKS0+dHlwZTEuZm9udF9leHRyYTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9JbnQKKyAgdDFfcHNfaGFzX2dseXBoX25hbWVzKCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisgICAgcmV0dXJuIDE7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0MV9wc19nZXRfZm9udF9wcml2YXRlKCBGVF9GYWNlICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZVJlYyogIGFmb250X3ByaXZhdGUgKQorICB7CisgICAgKmFmb250X3ByaXZhdGUgPSAoKFQxX0ZhY2UpZmFjZSktPnR5cGUxLnByaXZhdGVfZGljdDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9Mb25nCisgIHQxX3BzX2dldF9mb250X3ZhbHVlKCBGVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBQU19EaWN0X0tleXMgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgdmFsdWVfbGVuXyApCisgIHsKKyAgICBGVF9VTG9uZyAgcmV0dmFsICAgID0gMDsgLyogYWx3YXlzID49IDEgaWYgdmFsaWQgKi8KKyAgICBGVF9VTG9uZyAgdmFsdWVfbGVuID0gdmFsdWVfbGVuXyA8IDAgPyAwIDogKEZUX1VMb25nKXZhbHVlX2xlbl87CisKKyAgICBUMV9GYWNlICB0MWZhY2UgPSAoVDFfRmFjZSlmYWNlOworICAgIFQxX0ZvbnQgIHR5cGUxICA9ICZ0MWZhY2UtPnR5cGUxOworCisKKyAgICBzd2l0Y2ggKCBrZXkgKQorICAgIHsKKyAgICBjYXNlIFBTX0RJQ1RfRk9OVF9UWVBFOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPmZvbnRfdHlwZSApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfQnl0ZSAqKXZhbHVlKSA9IHR5cGUxLT5mb250X3R5cGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9GT05UX01BVFJJWDoKKyAgICAgIGlmICggaWR4IDwgc2l6ZW9mICggdHlwZTEtPmZvbnRfbWF0cml4ICkgLworICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHR5cGUxLT5mb250X21hdHJpeC54eCApICkKKyAgICAgIHsKKyAgICAgICAgRlRfRml4ZWQgIHZhbCA9IDA7CisKKworICAgICAgICByZXR2YWwgPSBzaXplb2YgKCB2YWwgKTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoIGlkeCApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X21hdHJpeC54eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X21hdHJpeC54eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X21hdHJpeC55eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X21hdHJpeC55eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAqKChGVF9GaXhlZCAqKXZhbHVlKSA9IHZhbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRk9OVF9CQk9YOgorICAgICAgaWYgKCBpZHggPCBzaXplb2YgKCB0eXBlMS0+Zm9udF9iYm94ICkgLworICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHR5cGUxLT5mb250X2Jib3gueE1pbiApICkKKyAgICAgIHsKKyAgICAgICAgRlRfRml4ZWQgIHZhbCA9IDA7CisKKworICAgICAgICByZXR2YWwgPSBzaXplb2YgKCB2YWwgKTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoIGlkeCApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X2Jib3gueE1pbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X2Jib3gueU1pbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X2Jib3gueE1heDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHZhbCA9IHR5cGUxLT5mb250X2Jib3gueU1heDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAqKChGVF9GaXhlZCAqKXZhbHVlKSA9IHZhbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfUEFJTlRfVFlQRToKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wYWludF90eXBlICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9CeXRlICopdmFsdWUpID0gdHlwZTEtPnBhaW50X3R5cGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9GT05UX05BTUU6CisgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X25hbWUgKSArIDE7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfbmFtZSApLCByZXR2YWwgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX1VOSVFVRV9JRDoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QudW5pcXVlX2lkICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9JbnQgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0LnVuaXF1ZV9pZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX05VTV9DSEFSX1NUUklOR1M6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+bnVtX2dseXBocyApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfSW50ICopdmFsdWUpID0gdHlwZTEtPm51bV9nbHlwaHM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9DSEFSX1NUUklOR19LRVk6CisgICAgICBpZiAoIGlkeCA8IChGVF9VSW50KXR5cGUxLT5udW1fZ2x5cGhzICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Z2x5cGhfbmFtZXNbaWR4XSApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgeworICAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Z2x5cGhfbmFtZXNbaWR4XSApLCByZXR2YWwgKTsKKyAgICAgICAgICAoKEZUX0NoYXIgKil2YWx1ZSlbcmV0dmFsIC0gMV0gPSAoRlRfQ2hhciknXDAnOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9DSEFSX1NUUklORzoKKyAgICAgIGlmICggaWR4IDwgKEZUX1VJbnQpdHlwZTEtPm51bV9nbHlwaHMgKQorICAgICAgeworICAgICAgICByZXR2YWwgPSB0eXBlMS0+Y2hhcnN0cmluZ3NfbGVuW2lkeF0gKyAxOworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICB7CisgICAgICAgICAgZnRfbWVtY3B5KCB2YWx1ZSwgKHZvaWQgKikoIHR5cGUxLT5jaGFyc3RyaW5nc1tpZHhdICksCisgICAgICAgICAgICAgICAgICAgICByZXR2YWwgLSAxICk7CisgICAgICAgICAgKChGVF9DaGFyICopdmFsdWUpW3JldHZhbCAtIDFdID0gKEZUX0NoYXIpJ1wwJzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRU5DT0RJTkdfVFlQRToKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5lbmNvZGluZ190eXBlICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChUMV9FbmNvZGluZ1R5cGUgKil2YWx1ZSkgPSB0eXBlMS0+ZW5jb2RpbmdfdHlwZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX0VOQ09ESU5HX0VOVFJZOgorICAgICAgaWYgKCB0eXBlMS0+ZW5jb2RpbmdfdHlwZSA9PSBUMV9FTkNPRElOR19UWVBFX0FSUkFZICYmCisgICAgICAgICAgIGlkeCA8IChGVF9VSW50KXR5cGUxLT5lbmNvZGluZy5udW1fY2hhcnMgICAgICAgKQorICAgICAgeworICAgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5lbmNvZGluZy5jaGFyX25hbWVbaWR4XSApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgeworICAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+ZW5jb2RpbmcuY2hhcl9uYW1lW2lkeF0gKSwKKyAgICAgICAgICAgICAgICAgICAgIHJldHZhbCAtIDEgKTsKKyAgICAgICAgICAoKEZUX0NoYXIgKil2YWx1ZSlbcmV0dmFsIC0gMV0gPSAoRlRfQ2hhciknXDAnOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fU1VCUlM6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+bnVtX3N1YnJzICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9JbnQgKil2YWx1ZSkgPSB0eXBlMS0+bnVtX3N1YnJzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfU1VCUjoKKyAgICAgIGlmICggaWR4IDwgKEZUX1VJbnQpdHlwZTEtPm51bV9zdWJycyApCisgICAgICB7CisgICAgICAgIHJldHZhbCA9IHR5cGUxLT5zdWJyc19sZW5baWR4XSArIDE7CisgICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgIHsKKyAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPnN1YnJzW2lkeF0gKSwgcmV0dmFsIC0gMSApOworICAgICAgICAgICgoRlRfQ2hhciAqKXZhbHVlKVtyZXR2YWwgLSAxXSA9IChGVF9DaGFyKSdcMCc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX1NURF9IVzoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3Quc3RhbmRhcmRfd2lkdGhbMF0gKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX1VTaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3Quc3RhbmRhcmRfd2lkdGhbMF07CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9TVERfVlc6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0LnN0YW5kYXJkX2hlaWdodFswXSApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfVVNob3J0ICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5zdGFuZGFyZF9oZWlnaHRbMF07CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fQkxVRV9WQUxVRVM6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm51bV9ibHVlX3ZhbHVlcyApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfQnl0ZSAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX2JsdWVfdmFsdWVzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfQkxVRV9WQUxVRToKKyAgICAgIGlmICggaWR4IDwgdHlwZTEtPnByaXZhdGVfZGljdC5udW1fYmx1ZV92YWx1ZXMgKQorICAgICAgeworICAgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0LmJsdWVfdmFsdWVzW2lkeF0gKTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICAqKChGVF9TaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QuYmx1ZV92YWx1ZXNbaWR4XTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX0JMVUVfU0NBTEU6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0LmJsdWVfc2NhbGUgKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX0ZpeGVkICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5ibHVlX3NjYWxlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfQkxVRV9GVVpaOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5ibHVlX2Z1enogKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX0ludCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfQkxVRV9TSElGVDoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QuYmx1ZV9zaGlmdCApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfSW50ICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5ibHVlX3NoaWZ0OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfTlVNX09USEVSX0JMVUVTOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5udW1fb3RoZXJfYmx1ZXMgKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX0J5dGUgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm51bV9vdGhlcl9ibHVlczsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX09USEVSX0JMVUU6CisgICAgICBpZiAoIGlkeCA8IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX290aGVyX2JsdWVzICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5vdGhlcl9ibHVlc1tpZHhdICk7CisgICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICAgKigoRlRfU2hvcnQgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm90aGVyX2JsdWVzW2lkeF07CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fRkFNSUxZX0JMVUVTOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5udW1fZmFtaWx5X2JsdWVzICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9CeXRlICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5udW1fZmFtaWx5X2JsdWVzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRkFNSUxZX0JMVUU6CisgICAgICBpZiAoIGlkeCA8IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX2ZhbWlseV9ibHVlcyApCisgICAgICB7CisgICAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QuZmFtaWx5X2JsdWVzW2lkeF0gKTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICAqKChGVF9TaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QuZmFtaWx5X2JsdWVzW2lkeF07CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fRkFNSUxZX09USEVSX0JMVUVTOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5udW1fZmFtaWx5X290aGVyX2JsdWVzICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9CeXRlICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5udW1fZmFtaWx5X290aGVyX2JsdWVzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUU6CisgICAgICBpZiAoIGlkeCA8IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX2ZhbWlseV9vdGhlcl9ibHVlcyApCisgICAgICB7CisgICAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QuZmFtaWx5X290aGVyX2JsdWVzW2lkeF0gKTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICAqKChGVF9TaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QuZmFtaWx5X290aGVyX2JsdWVzW2lkeF07CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fU1RFTV9TTkFQX0g6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm51bV9zbmFwX3dpZHRocyApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfQnl0ZSAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX3NuYXBfd2lkdGhzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfU1RFTV9TTkFQX0g6CisgICAgICBpZiAoIGlkeCA8IHR5cGUxLT5wcml2YXRlX2RpY3QubnVtX3NuYXBfd2lkdGhzICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5zbmFwX3dpZHRoc1tpZHhdICk7CisgICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICAgKigoRlRfU2hvcnQgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0LnNuYXBfd2lkdGhzW2lkeF07CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9OVU1fU1RFTV9TTkFQX1Y6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm51bV9zbmFwX2hlaWdodHMgKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX0J5dGUgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm51bV9zbmFwX2hlaWdodHM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9TVEVNX1NOQVBfVjoKKyAgICAgIGlmICggaWR4IDwgdHlwZTEtPnByaXZhdGVfZGljdC5udW1fc25hcF9oZWlnaHRzICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5zbmFwX2hlaWdodHNbaWR4XSApOworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAgICooKEZUX1Nob3J0ICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5zbmFwX2hlaWdodHNbaWR4XTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX1JORF9TVEVNX1VQOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5yb3VuZF9zdGVtX3VwICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9Cb29sICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5yb3VuZF9zdGVtX3VwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRk9SQ0VfQk9MRDoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QuZm9yY2VfYm9sZCApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfQm9vbCAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QuZm9yY2VfYm9sZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX01JTl9GRUFUVVJFOgorICAgICAgaWYgKCBpZHggPCBzaXplb2YgKCB0eXBlMS0+cHJpdmF0ZV9kaWN0Lm1pbl9mZWF0dXJlICkgLworICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QubWluX2ZlYXR1cmVbMF0gKSApCisgICAgICB7CisgICAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QubWluX2ZlYXR1cmVbaWR4XSApOworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAgICooKEZUX1Nob3J0ICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5taW5fZmVhdHVyZVtpZHhdOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfTEVOX0lWOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5sZW5JViApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfSW50ICopdmFsdWUpID0gdHlwZTEtPnByaXZhdGVfZGljdC5sZW5JVjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX1BBU1NXT1JEOgorICAgICAgcmV0dmFsID0gc2l6ZW9mICggdHlwZTEtPnByaXZhdGVfZGljdC5wYXNzd29yZCApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfTG9uZyAqKXZhbHVlKSA9IHR5cGUxLT5wcml2YXRlX2RpY3QucGFzc3dvcmQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9MQU5HVUFHRV9HUk9VUDoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5wcml2YXRlX2RpY3QubGFuZ3VhZ2VfZ3JvdXAgKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX0xvbmcgKil2YWx1ZSkgPSB0eXBlMS0+cHJpdmF0ZV9kaWN0Lmxhbmd1YWdlX2dyb3VwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfSVNfRklYRURfUElUQ0g6CisgICAgICByZXR2YWwgPSBzaXplb2YgKCB0eXBlMS0+Zm9udF9pbmZvLmlzX2ZpeGVkX3BpdGNoICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9Cb29sICopdmFsdWUpID0gdHlwZTEtPmZvbnRfaW5mby5pc19maXhlZF9waXRjaDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX1VOREVSTElORV9QT1NJVElPTjoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5mb250X2luZm8udW5kZXJsaW5lX3Bvc2l0aW9uICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9TaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5mb250X2luZm8udW5kZXJsaW5lX3Bvc2l0aW9uOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfVU5ERVJMSU5FX1RISUNLTkVTUzoKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5mb250X2luZm8udW5kZXJsaW5lX3RoaWNrbmVzcyApOworICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgKigoRlRfVVNob3J0ICopdmFsdWUpID0gdHlwZTEtPmZvbnRfaW5mby51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfRlNfVFlQRToKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5mb250X2V4dHJhLmZzX3R5cGUgKTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgICooKEZUX1VTaG9ydCAqKXZhbHVlKSA9IHR5cGUxLT5mb250X2V4dHJhLmZzX3R5cGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9WRVJTSU9OOgorICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLnZlcnNpb24gKSArIDE7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby52ZXJzaW9uICksIHJldHZhbCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfTk9USUNFOgorICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLm5vdGljZSApICsgMTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLm5vdGljZSApLCByZXR2YWwgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX0ZVTExfTkFNRToKKyAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSArIDE7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSwgcmV0dmFsICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUFNfRElDVF9GQU1JTFlfTkFNRToKKyAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mYW1pbHlfbmFtZSApICsgMTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICksIHJldHZhbCApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBTX0RJQ1RfV0VJR0hUOgorICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApICsgMTsKKyAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCisgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApLCByZXR2YWwgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQU19ESUNUX0lUQUxJQ19BTkdMRToKKyAgICAgIHJldHZhbCA9IHNpemVvZiAoIHR5cGUxLT5mb250X2luZm8uaXRhbGljX2FuZ2xlICk7CisgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAqKChGVF9Mb25nICopdmFsdWUpID0gdHlwZTEtPmZvbnRfaW5mby5pdGFsaWNfYW5nbGU7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsID09IDAgPyAtMSA6IChGVF9Mb25nKXJldHZhbDsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfUHNJbmZvUmVjICB0MV9zZXJ2aWNlX3BzX2luZm8gPQorICB7CisgICAgKFBTX0dldEZvbnRJbmZvRnVuYykgICB0MV9wc19nZXRfZm9udF9pbmZvLAorICAgIChQU19HZXRGb250RXh0cmFGdW5jKSAgdDFfcHNfZ2V0X2ZvbnRfZXh0cmEsCisgICAgKFBTX0hhc0dseXBoTmFtZXNGdW5jKSB0MV9wc19oYXNfZ2x5cGhfbmFtZXMsCisgICAgKFBTX0dldEZvbnRQcml2YXRlRnVuYyl0MV9wc19nZXRfZm9udF9wcml2YXRlLAorICAgIChQU19HZXRGb250VmFsdWVGdW5jKSAgdDFfcHNfZ2V0X2ZvbnRfdmFsdWUsCisgIH07CisKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9LZXJuaW5nUmVjICB0MV9zZXJ2aWNlX2tlcm5pbmcgPQorICB7CisgICAgVDFfR2V0X1RyYWNrX0tlcm5pbmcsCisgIH07CisjZW5kaWYKKworCisgIC8qCisgICAqICBTRVJWSUNFIExJU1QKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICB0MV9zZXJ2aWNlc1tdID0KKyAgeworICAgIHsgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJnQxX3NlcnZpY2VfcHNfbmFtZSB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJnQxX3NlcnZpY2VfZ2x5cGhfZGljdCB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfVFlQRV8xIH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmdDFfc2VydmljZV9wc19pbmZvIH0sCisKKyNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKyAgICB7IEZUX1NFUlZJQ0VfSURfS0VSTklORywgICAgICAgICAgICAgICZ0MV9zZXJ2aWNlX2tlcm5pbmcgfSwKKyNlbmRpZgorCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVAorICAgIHsgRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTLCAgICAgICAgJnQxX3NlcnZpY2VfbXVsdGlfbWFzdGVycyB9LAorI2VuZGlmCisgICAgeyBOVUxMLCBOVUxMIH0KKyAgfTsKKworCisgIEZUX0NBTExCQUNLX0RFRiggRlRfTW9kdWxlX0ludGVyZmFjZSApCisgIEdldF9JbnRlcmZhY2UoIEZUX01vZHVsZSAgICAgICAgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgdDFfaW50ZXJmYWNlICkKKyAgeworICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CisKKyAgICByZXR1cm4gZnRfc2VydmljZV9saXN0X2xvb2t1cCggdDFfc2VydmljZXMsIHQxX2ludGVyZmFjZSApOworICB9CisKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEdldF9LZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIHJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gICAgICAqLworICAvKiAgICBnbHlwaHMgb2YgdGhlIHNhbWUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAga2VybmluZyAgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBpbiBmb250IHVuaXRzIGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNjYWxhYmxlIGZvcm1hdHMsIGFuZCBpbiBwaXhlbHMgZm9yIGZpeGVkLXNpemVzICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZSAgICAgICAgKi8KKyAgLyogICAgc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICovCisgIC8qICAgIGtlcm5pbmdzIGFyZSBvdXQgb2Ygc2NvcGUgb2YgdGhpcyBtZXRob2QgKHRoZSBiYXNpYyBkcml2ZXIgICAgICAgICAqLworICAvKiAgICBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gYmUgc2ltcGxlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIEZUX0Vycm9yCisgIEdldF9LZXJuaW5nKCBGVF9GYWNlICAgICB0MWZhY2UsICAgICAgICAvKiBUMV9GYWNlICovCisgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgRlRfVUludCAgICAgcmlnaHRfZ2x5cGgsCisgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBrZXJuaW5nICkKKyAgeworICAgIFQxX0ZhY2UgIGZhY2UgPSAoVDFfRmFjZSl0MWZhY2U7CisKKworICAgIGtlcm5pbmctPnggPSAwOworICAgIGtlcm5pbmctPnkgPSAwOworCisgICAgaWYgKCBmYWNlLT5hZm1fZGF0YSApCisgICAgICBUMV9HZXRfS2VybmluZyggKEFGTV9Gb250SW5mbylmYWNlLT5hZm1fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisjZW5kaWYgLyogVDFfQ09ORklHX09QVElPTl9OT19BRk0gKi8KKworCisgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgorICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIHQxX2RyaXZlcl9jbGFzcyA9CisgIHsKKyAgICB7CisgICAgICBGVF9NT0RVTEVfRk9OVF9EUklWRVIgICAgICAgfAorICAgICAgRlRfTU9EVUxFX0RSSVZFUl9TQ0FMQUJMRSAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfSEFTX0hJTlRFUiwKKworICAgICAgc2l6ZW9mICggRlRfRHJpdmVyUmVjICksCisKKyAgICAgICJ0eXBlMSIsCisgICAgICAweDEwMDAwTCwKKyAgICAgIDB4MjAwMDBMLAorCisgICAgICAwLCAgIC8qIGZvcm1hdCBpbnRlcmZhY2UgKi8KKworICAgICAgVDFfRHJpdmVyX0luaXQsCisgICAgICBUMV9Ecml2ZXJfRG9uZSwKKyAgICAgIEdldF9JbnRlcmZhY2UsCisgICAgfSwKKworICAgIHNpemVvZiAoIFQxX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBUMV9TaXplUmVjICksCisgICAgc2l6ZW9mICggVDFfR2x5cGhTbG90UmVjICksCisKKyAgICBUMV9GYWNlX0luaXQsCisgICAgVDFfRmFjZV9Eb25lLAorICAgIFQxX1NpemVfSW5pdCwKKyAgICBUMV9TaXplX0RvbmUsCisgICAgVDFfR2x5cGhTbG90X0luaXQsCisgICAgVDFfR2x5cGhTbG90X0RvbmUsCisKKyAgICBUMV9Mb2FkX0dseXBoLAorCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0S2VybmluZ0Z1bmMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgKi8KKyNlbHNlCisgICAgR2V0X0tlcm5pbmcsCisgICAgVDFfUmVhZF9NZXRyaWNzLAorI2VuZGlmCisgICAgVDFfR2V0X0FkdmFuY2VzLAorICAgIFQxX1NpemVfUmVxdWVzdCwKKyAgICAwICAgICAgICAgICAgICAgICAgICAgIC8qIEZUX1NpemVfU2VsZWN0RnVuYyAgICAgKi8KKyAgfTsKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFkcml2ZXIuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFkcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJjZjgxCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWRyaXZlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxZHJpdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIaWdoLWxldmVsIFR5cGUgMSBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1QxRFJJVkVSX0hfXworI2RlZmluZSBfX1QxRFJJVkVSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisKKyAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICkgIHQxX2RyaXZlcl9jbGFzczsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1QxRFJJVkVSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWVycm9ycy5oIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWVycm9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2E5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZXJyb3JzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDFlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgMSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBUeXBlIDEgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1QxRVJST1JTX0hfXworI2RlZmluZSBfX1QxRVJST1JTX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBUMV9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfVHlwZTEKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fVDFFUlJPUlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZ2xvYWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFnbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWU4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZ2xvYWQuYwpAQCAtMCwwICsxLDUxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDFnbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgMSBHbHlwaCBMb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlICJ0MWdsb2FkLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKworI2luY2x1ZGUgInQxZXJyb3JzLmgiCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWdsb2FkCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICBDT01QVVRFIFRIRSBNQVhJTVVNIEFEVkFOQ0UgV0lEVEggICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgaW4gY2hhcmdlIG9mIGNvbXB1dGluZyAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgdGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCBvZiB0aGUgZm9udC4gIEl0ICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIHF1aWNrbHkgcHJvY2Vzc2VzIGVhY2ggZ2x5cGggY2hhcnN0cmluZyB0byAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICBleHRyYWN0IHRoZSB2YWx1ZSBmcm9tIGVpdGhlciBhIGBzYncnIG9yIGBzZWFjJyAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgb3BlcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EYXRhKiAgICBjaGFyX3N0cmluZyApCisgIHsKKyAgICBUMV9GYWNlICAgZmFjZSAgPSAoVDFfRmFjZSlkZWNvZGVyLT5idWlsZGVyLmZhY2U7CisgICAgVDFfRm9udCAgIHR5cGUxID0gJmZhY2UtPnR5cGUxOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgKmluYyA9CisgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlOworI2VuZGlmCisKKworICAgIGRlY29kZXItPmZvbnRfbWF0cml4ID0gdHlwZTEtPmZvbnRfbWF0cml4OworICAgIGRlY29kZXItPmZvbnRfb2Zmc2V0ID0gdHlwZTEtPmZvbnRfb2Zmc2V0OworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorCisgICAgLyogRm9yIGluY3JlbWVudGFsIGZvbnRzIGdldCB0aGUgY2hhcmFjdGVyIGRhdGEgdXNpbmcgdGhlICovCisgICAgLyogY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBpbmMgKQorICAgICAgZXJyb3IgPSBpbmMtPmZ1bmNzLT5nZXRfZ2x5cGhfZGF0YSggaW5jLT5vYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgY2hhcl9zdHJpbmcgKTsKKyAgICBlbHNlCisKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisKKyAgICAvKiBGb3Igb3JkaW5hcnkgZm9udHMgZ2V0IHRoZSBjaGFyYWN0ZXIgZGF0YSBzdG9yZWQgaW4gdGhlIGZhY2UgcmVjb3JkLiAqLworICAgIHsKKyAgICAgIGNoYXJfc3RyaW5nLT5wb2ludGVyID0gdHlwZTEtPmNoYXJzdHJpbmdzW2dseXBoX2luZGV4XTsKKyAgICAgIGNoYXJfc3RyaW5nLT5sZW5ndGggID0gKEZUX0ludCl0eXBlMS0+Y2hhcnN0cmluZ3NfbGVuW2dseXBoX2luZGV4XTsKKyAgICB9CisKKyAgICBpZiAoICFlcnJvciApCisgICAgICBlcnJvciA9IGRlY29kZXItPmZ1bmNzLnBhcnNlX2NoYXJzdHJpbmdzKAorICAgICAgICAgICAgICAgIGRlY29kZXIsIChGVF9CeXRlKiljaGFyX3N0cmluZy0+cG9pbnRlciwKKyAgICAgICAgICAgICAgICAoRlRfVUludCljaGFyX3N0cmluZy0+bGVuZ3RoICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBjYW4gb3B0aW9uYWxseSBvdmVycmlkZSB0aGUgbWV0cmljcy4gKi8KKyAgICBpZiAoICFlcnJvciAmJiBpbmMgJiYgaW5jLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MgKQorICAgIHsKKyAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgIG1ldHJpY3M7CisKKworICAgICAgbWV0cmljcy5iZWFyaW5nX3ggPSBGSVhFRF9UT19JTlQoIGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLnggKTsKKyAgICAgIG1ldHJpY3MuYmVhcmluZ195ID0gMDsKKyAgICAgIG1ldHJpY3MuYWR2YW5jZSAgID0gRklYRURfVE9fSU5UKCBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UueCApOworICAgICAgbWV0cmljcy5hZHZhbmNlX3YgPSBGSVhFRF9UT19JTlQoIGRlY29kZXItPmJ1aWxkZXIuYWR2YW5jZS55ICk7CisKKyAgICAgIGVycm9yID0gaW5jLT5mdW5jcy0+Z2V0X2dseXBoX21ldHJpY3MoIGluYy0+b2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIEZBTFNFLCAmbWV0cmljcyApOworCisgICAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy54ID0gSU5UX1RPX0ZJWEVEKCBtZXRyaWNzLmJlYXJpbmdfeCApOworICAgICAgZGVjb2Rlci0+YnVpbGRlci5hZHZhbmNlLnggICAgICA9IElOVF9UT19GSVhFRCggbWV0cmljcy5hZHZhbmNlICk7CisgICAgICBkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UueSAgICAgID0gSU5UX1RPX0ZJWEVEKCBtZXRyaWNzLmFkdmFuY2VfdiApOworICAgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIFQxX1BhcnNlX0dseXBoKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXggKQorICB7CisgICAgRlRfRGF0YSAgIGdseXBoX2RhdGE7CisgICAgRlRfRXJyb3IgIGVycm9yID0gVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIsIGdseXBoX2luZGV4LCAmZ2x5cGhfZGF0YSApOworCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgVDFfRmFjZSAgZmFjZSA9IChUMV9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKworCisgICAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmZyZWVfZ2x5cGhfZGF0YSgKKyAgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPm9iamVjdCwKKyAgICAgICAgICAmZ2x5cGhfZGF0YSApOworICAgIH0KKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0NvbXB1dGVfTWF4X0FkdmFuY2UoIFQxX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1heF9hZHZhbmNlICkKKyAgeworICAgIEZUX0Vycm9yICAgICAgIGVycm9yOworICAgIFQxX0RlY29kZXJSZWMgIGRlY29kZXI7CisgICAgRlRfSW50ICAgICAgICAgZ2x5cGhfaW5kZXg7CisgICAgVDFfRm9udCAgICAgICAgdHlwZTEgPSAmZmFjZS0+dHlwZTE7CisgICAgUFNBdXhfU2VydmljZSAgcHNhdXggPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKKworCisgICAgRlRfQVNTRVJUKCAoIGZhY2UtPmxlbl9idWlsZGNoYXIgPT0gMCApID09ICggZmFjZS0+YnVpbGRjaGFyID09IE5VTEwgKSApOworCisgICAgKm1heF9hZHZhbmNlID0gMDsKKworICAgIC8qIGluaXRpYWxpemUgbG9hZCBkZWNvZGVyICovCisgICAgZXJyb3IgPSBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+aW5pdCggJmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ZhY2UpZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBzaXplICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogZ2x5cGggc2xvdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiopdHlwZTEtPmdseXBoX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxX1BhcnNlX0dseXBoICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBkZWNvZGVyLmJ1aWxkZXIubWV0cmljc19vbmx5ID0gMTsKKyAgICBkZWNvZGVyLmJ1aWxkZXIubG9hZF9wb2ludHMgID0gMDsKKworICAgIGRlY29kZXIubnVtX3N1YnJzICAgICA9IHR5cGUxLT5udW1fc3VicnM7CisgICAgZGVjb2Rlci5zdWJycyAgICAgICAgID0gdHlwZTEtPnN1YnJzOworICAgIGRlY29kZXIuc3VicnNfbGVuICAgICA9IHR5cGUxLT5zdWJyc19sZW47CisKKyAgICBkZWNvZGVyLmJ1aWxkY2hhciAgICAgPSBmYWNlLT5idWlsZGNoYXI7CisgICAgZGVjb2Rlci5sZW5fYnVpbGRjaGFyID0gZmFjZS0+bGVuX2J1aWxkY2hhcjsKKworICAgICptYXhfYWR2YW5jZSA9IDA7CisKKyAgICAvKiBmb3IgZWFjaCBnbHlwaCwgcGFyc2UgdGhlIGdseXBoIGNoYXJzdHJpbmcgYW5kIGV4dHJhY3QgKi8KKyAgICAvKiB0aGUgYWR2YW5jZSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBmb3IgKCBnbHlwaF9pbmRleCA9IDA7IGdseXBoX2luZGV4IDwgdHlwZTEtPm51bV9nbHlwaHM7IGdseXBoX2luZGV4KysgKQorICAgIHsKKyAgICAgIC8qIG5vdyBnZXQgbG9hZCB0aGUgdW5zY2FsZWQgb3V0bGluZSAqLworICAgICAgKHZvaWQpVDFfUGFyc2VfR2x5cGgoICZkZWNvZGVyLCAoRlRfVUludClnbHlwaF9pbmRleCApOworICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwIHx8IGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggPiAqbWF4X2FkdmFuY2UgKQorICAgICAgICAqbWF4X2FkdmFuY2UgPSBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54OworCisgICAgICAvKiBpZ25vcmUgdGhlIGVycm9yIGlmIG9uZSBvY2N1cnJlZCAtIHNraXAgdG8gbmV4dCBnbHlwaCAqLworICAgIH0KKworICAgIHBzYXV4LT50MV9kZWNvZGVyX2Z1bmNzLT5kb25lKCAmZGVjb2RlciApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0dldF9BZHZhbmNlcyggRlRfRmFjZSAgICB0MWZhY2UsICAgICAgICAvKiBUMV9GYWNlICovCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgbG9hZF9mbGFncywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGFkdmFuY2VzICkKKyAgeworICAgIFQxX0ZhY2UgICAgICAgIGZhY2UgID0gKFQxX0ZhY2UpdDFmYWNlOworICAgIFQxX0RlY29kZXJSZWMgIGRlY29kZXI7CisgICAgVDFfRm9udCAgICAgICAgdHlwZTEgPSAmZmFjZS0+dHlwZTE7CisgICAgUFNBdXhfU2VydmljZSAgcHNhdXggPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKKyAgICBGVF9VSW50ICAgICAgICBubjsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKworCisgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQorICAgIHsKKyAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisgICAgICAgIGFkdmFuY2VzW25uXSA9IDA7CisKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQorCisgICAgZXJyb3IgPSBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+aW5pdCggJmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ZhY2UpZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBzaXplICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogZ2x5cGggc2xvdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiopdHlwZTEtPmdseXBoX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxX1BhcnNlX0dseXBoICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICBkZWNvZGVyLmJ1aWxkZXIubWV0cmljc19vbmx5ID0gMTsKKyAgICBkZWNvZGVyLmJ1aWxkZXIubG9hZF9wb2ludHMgID0gMDsKKworICAgIGRlY29kZXIubnVtX3N1YnJzID0gdHlwZTEtPm51bV9zdWJyczsKKyAgICBkZWNvZGVyLnN1YnJzICAgICA9IHR5cGUxLT5zdWJyczsKKyAgICBkZWNvZGVyLnN1YnJzX2xlbiA9IHR5cGUxLT5zdWJyc19sZW47CisKKyAgICBkZWNvZGVyLmJ1aWxkY2hhciAgICAgPSBmYWNlLT5idWlsZGNoYXI7CisgICAgZGVjb2Rlci5sZW5fYnVpbGRjaGFyID0gZmFjZS0+bGVuX2J1aWxkY2hhcjsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisgICAgeworICAgICAgZXJyb3IgPSBUMV9QYXJzZV9HbHlwaCggJmRlY29kZXIsIGZpcnN0ICsgbm4gKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgYWR2YW5jZXNbbm5dID0gRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54ICk7CisgICAgICBlbHNlCisgICAgICAgIGFkdmFuY2VzW25uXSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0xvYWRfR2x5cGgoIEZUX0dseXBoU2xvdCAgdDFnbHlwaCwgICAgICAgICAgLyogVDFfR2x5cGhTbG90ICovCisgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICAgdDFzaXplLCAgICAgICAgICAgLyogVDFfU2l6ZSAgICAgICovCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApCisgIHsKKyAgICBUMV9HbHlwaFNsb3QgICAgICAgICAgICBnbHlwaCA9IChUMV9HbHlwaFNsb3QpdDFnbHlwaDsKKyAgICBGVF9FcnJvciAgICAgICAgICAgICAgICBlcnJvcjsKKyAgICBUMV9EZWNvZGVyUmVjICAgICAgICAgICBkZWNvZGVyOworICAgIFQxX0ZhY2UgICAgICAgICAgICAgICAgIGZhY2UgPSAoVDFfRmFjZSl0MWdseXBoLT5mYWNlOworICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgIGhpbnRpbmc7CisgICAgVDFfRm9udCAgICAgICAgICAgICAgICAgdHlwZTEgICAgICAgICA9ICZmYWNlLT50eXBlMTsKKyAgICBQU0F1eF9TZXJ2aWNlICAgICAgICAgICBwc2F1eCAgICAgICAgID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisgICAgY29uc3QgVDFfRGVjb2Rlcl9GdW5jcyAgZGVjb2Rlcl9mdW5jcyA9IHBzYXV4LT50MV9kZWNvZGVyX2Z1bmNzOworCisgICAgRlRfTWF0cml4ICAgICAgICAgICAgICAgZm9udF9tYXRyaXg7CisgICAgRlRfVmVjdG9yICAgICAgICAgICAgICAgZm9udF9vZmZzZXQ7CisgICAgRlRfRGF0YSAgICAgICAgICAgICAgICAgZ2x5cGhfZGF0YTsKKyAgICBGVF9Cb29sICAgICAgICAgICAgICAgICBtdXN0X2ZpbmlzaF9kZWNvZGVyID0gRkFMU0U7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgIGdseXBoX2RhdGFfbG9hZGVkID0gMDsKKyNlbmRpZgorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgaWYgKCBnbHlwaF9pbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgJiYKKyAgICAgICAgICFmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgICApCisjZWxzZQorICAgIGlmICggZ2x5cGhfaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIEZUX1RSQUNFMSgoICJUMV9Mb2FkX0dseXBoOiBnbHlwaCBpbmRleCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7CisKKyAgICBGVF9BU1NFUlQoICggZmFjZS0+bGVuX2J1aWxkY2hhciA9PSAwICkgPT0gKCBmYWNlLT5idWlsZGNoYXIgPT0gTlVMTCApICk7CisKKyAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKQorICAgICAgbG9hZF9mbGFncyB8PSBGVF9MT0FEX05PX1NDQUxFIHwgRlRfTE9BRF9OT19ISU5USU5HOworCisgICAgaWYgKCB0MXNpemUgKQorICAgIHsKKyAgICAgIGdseXBoLT54X3NjYWxlID0gdDFzaXplLT5tZXRyaWNzLnhfc2NhbGU7CisgICAgICBnbHlwaC0+eV9zY2FsZSA9IHQxc2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZ2x5cGgtPnhfc2NhbGUgPSAweDEwMDAwTDsKKyAgICAgIGdseXBoLT55X3NjYWxlID0gMHgxMDAwMEw7CisgICAgfQorCisgICAgdDFnbHlwaC0+b3V0bGluZS5uX3BvaW50cyAgID0gMDsKKyAgICB0MWdseXBoLT5vdXRsaW5lLm5fY29udG91cnMgPSAwOworCisgICAgaGludGluZyA9IEZUX0JPT0woICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgICApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19ISU5USU5HICkgPT0gMCApOworCisgICAgdDFnbHlwaC0+Zm9ybWF0ID0gRlRfR0xZUEhfRk9STUFUX09VVExJTkU7CisKKyAgICBlcnJvciA9IGRlY29kZXJfZnVuY3MtPmluaXQoICZkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDFnbHlwaC0+ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQnl0ZSoqKXR5cGUxLT5nbHlwaF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQk9PTCggaGludGluZyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDFfUGFyc2VfR2x5cGggKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIG11c3RfZmluaXNoX2RlY29kZXIgPSBUUlVFOworCisgICAgZGVjb2Rlci5idWlsZGVyLm5vX3JlY3Vyc2UgPSBGVF9CT09MKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKSAhPSAwICk7CisKKyAgICBkZWNvZGVyLm51bV9zdWJycyAgICAgPSB0eXBlMS0+bnVtX3N1YnJzOworICAgIGRlY29kZXIuc3VicnMgICAgICAgICA9IHR5cGUxLT5zdWJyczsKKyAgICBkZWNvZGVyLnN1YnJzX2xlbiAgICAgPSB0eXBlMS0+c3VicnNfbGVuOworCisgICAgZGVjb2Rlci5idWlsZGNoYXIgICAgID0gZmFjZS0+YnVpbGRjaGFyOworICAgIGRlY29kZXIubGVuX2J1aWxkY2hhciA9IGZhY2UtPmxlbl9idWlsZGNoYXI7CisKKyAgICAvKiBub3cgbG9hZCB0aGUgdW5zY2FsZWQgb3V0bGluZSAqLworICAgIGVycm9yID0gVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyggJmRlY29kZXIsIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2RhdGEgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgZ2x5cGhfZGF0YV9sb2FkZWQgPSAxOworI2VuZGlmCisKKyAgICBmb250X21hdHJpeCA9IGRlY29kZXIuZm9udF9tYXRyaXg7CisgICAgZm9udF9vZmZzZXQgPSBkZWNvZGVyLmZvbnRfb2Zmc2V0OworCisgICAgLyogc2F2ZSBuZXcgZ2x5cGggdGFibGVzICovCisgICAgZGVjb2Rlcl9mdW5jcy0+ZG9uZSggJmRlY29kZXIgKTsKKworICAgIG11c3RfZmluaXNoX2RlY29kZXIgPSBGQUxTRTsKKworICAgIC8qIG5vdywgc2V0IHRoZSBtZXRyaWNzIC0tIHRoaXMgaXMgcmF0aGVyIHNpbXBsZSwgYXMgICAqLworICAgIC8qIHRoZSBsZWZ0IHNpZGUgYmVhcmluZyBpcyB0aGUgeE1pbiwgYW5kIHRoZSB0b3Agc2lkZSAqLworICAgIC8qIGJlYXJpbmcgdGhlIHlNYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICB0MWdseXBoLT5vdXRsaW5lLmZsYWdzICY9IEZUX09VVExJTkVfT1dORVI7CisgICAgICB0MWdseXBoLT5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfUkVWRVJTRV9GSUxMOworCisgICAgICAvKiBmb3IgY29tcG9zaXRlIGdseXBocywgcmV0dXJuIG9ubHkgbGVmdCBzaWRlIGJlYXJpbmcgYW5kICovCisgICAgICAvKiBhZHZhbmNlIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKQorICAgICAgeworICAgICAgICBGVF9TbG90X0ludGVybmFsICBpbnRlcm5hbCA9IHQxZ2x5cGgtPmludGVybmFsOworCisKKyAgICAgICAgdDFnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1ggPQorICAgICAgICAgIEZJWEVEX1RPX0lOVCggZGVjb2Rlci5idWlsZGVyLmxlZnRfYmVhcmluZy54ICk7CisgICAgICAgIHQxZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0KKyAgICAgICAgICBGSVhFRF9UT19JTlQoIGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggKTsKKworICAgICAgICBpbnRlcm5hbC0+Z2x5cGhfbWF0cml4ICAgICAgPSBmb250X21hdHJpeDsKKyAgICAgICAgaW50ZXJuYWwtPmdseXBoX2RlbHRhICAgICAgID0gZm9udF9vZmZzZXQ7CisgICAgICAgIGludGVybmFsLT5nbHlwaF90cmFuc2Zvcm1lZCA9IDE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX0JCb3ggICAgICAgICAgICBjYm94OworICAgICAgICBGVF9HbHlwaF9NZXRyaWNzKiAgbWV0cmljcyA9ICZ0MWdseXBoLT5tZXRyaWNzOworICAgICAgICBGVF9WZWN0b3IgICAgICAgICAgYWR2YW5jZTsKKworCisgICAgICAgIC8qIGNvcHkgdGhlIF91bnNjYWxlZF8gYWR2YW5jZSB3aWR0aCAqLworICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9CisgICAgICAgICAgRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54ICk7CisgICAgICAgIHQxZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlID0KKyAgICAgICAgICBGSVhFRF9UT19JTlQoIGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggKTsKKyAgICAgICAgdDFnbHlwaC0+aW50ZXJuYWwtPmdseXBoX3RyYW5zZm9ybWVkID0gMDsKKworICAgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBtYWtlIHVwIHZlcnRpY2FsIG9uZXMgKi8KKyAgICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSA9ICggZmFjZS0+dHlwZTEuZm9udF9iYm94LnlNYXggLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT50eXBlMS5mb250X2Jib3gueU1pbiApID4+IDE2OworICAgICAgICAgIHQxZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlID0gbWV0cmljcy0+dmVydEFkdmFuY2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPQorICAgICAgICAgICAgRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS55ICk7CisgICAgICAgICAgdDFnbHlwaC0+bGluZWFyVmVydEFkdmFuY2UgPQorICAgICAgICAgICAgRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS55ICk7CisgICAgICAgIH0KKworICAgICAgICB0MWdseXBoLT5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORTsKKworICAgICAgICBpZiAoIHQxc2l6ZSAmJiB0MXNpemUtPm1ldHJpY3MueV9wcGVtIDwgMjQgKQorICAgICAgICAgIHQxZ2x5cGgtPm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTjsKKworI2lmIDEKKyAgICAgICAgLyogYXBwbHkgdGhlIGZvbnQgbWF0cml4LCBpZiBhbnkgKi8KKyAgICAgICAgaWYgKCBmb250X21hdHJpeC54eCAhPSAweDEwMDAwTCB8fCBmb250X21hdHJpeC55eSAhPSBmb250X21hdHJpeC54eCB8fAorICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnh5ICE9IDAgICAgICAgIHx8IGZvbnRfbWF0cml4Lnl4ICE9IDAgICAgICAgICAgICAgICkKKyAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggJnQxZ2x5cGgtPm91dGxpbmUsICZmb250X21hdHJpeCApOworCisgICAgICAgIGlmICggZm9udF9vZmZzZXQueCB8fCBmb250X29mZnNldC55ICkKKyAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJnQxZ2x5cGgtPm91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LnkgKTsKKworICAgICAgICBhZHZhbmNlLnggPSBtZXRyaWNzLT5ob3JpQWR2YW5jZTsKKyAgICAgICAgYWR2YW5jZS55ID0gMDsKKyAgICAgICAgRlRfVmVjdG9yX1RyYW5zZm9ybSggJmFkdmFuY2UsICZmb250X21hdHJpeCApOworICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IGFkdmFuY2UueCArIGZvbnRfb2Zmc2V0Lng7CisgICAgICAgIGFkdmFuY2UueCA9IDA7CisgICAgICAgIGFkdmFuY2UueSA9IG1ldHJpY3MtPnZlcnRBZHZhbmNlOworICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCAmYWR2YW5jZSwgJmZvbnRfbWF0cml4ICk7CisgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZS55ICsgZm9udF9vZmZzZXQueTsKKyNlbmRpZgorCisgICAgICAgIGlmICggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgLyogc2NhbGUgdGhlIG91dGxpbmUgYW5kIHRoZSBtZXRyaWNzICovCisgICAgICAgICAgRlRfSW50ICAgICAgIG47CisgICAgICAgICAgRlRfT3V0bGluZSogIGN1ciA9IGRlY29kZXIuYnVpbGRlci5iYXNlOworICAgICAgICAgIEZUX1ZlY3RvciogICB2ZWMgPSBjdXItPnBvaW50czsKKyAgICAgICAgICBGVF9GaXhlZCAgICAgeF9zY2FsZSA9IGdseXBoLT54X3NjYWxlOworICAgICAgICAgIEZUX0ZpeGVkICAgICB5X3NjYWxlID0gZ2x5cGgtPnlfc2NhbGU7CisKKworICAgICAgICAgIC8qIEZpcnN0IG9mIGFsbCwgc2NhbGUgdGhlIHBvaW50cywgaWYgd2UgYXJlIG5vdCBoaW50aW5nICovCisgICAgICAgICAgaWYgKCAhaGludGluZyB8fCAhIGRlY29kZXIuYnVpbGRlci5oaW50c19mdW5jcyApCisgICAgICAgICAgICBmb3IgKCBuID0gY3VyLT5uX3BvaW50czsgbiA+IDA7IG4tLSwgdmVjKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2ZWMtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApOworICAgICAgICAgICAgICB2ZWMtPnkgPSBGVF9NdWxGaXgoIHZlYy0+eSwgeV9zY2FsZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogVGhlbiBzY2FsZSB0aGUgbWV0cmljcyAqLworICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT5ob3JpQWR2YW5jZSwgeF9zY2FsZSApOworICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT52ZXJ0QWR2YW5jZSwgeV9zY2FsZSApOworICAgICAgICB9CisKKyAgICAgICAgLyogY29tcHV0ZSB0aGUgb3RoZXIgbWV0cmljcyAqLworICAgICAgICBGVF9PdXRsaW5lX0dldF9DQm94KCAmdDFnbHlwaC0+b3V0bGluZSwgJmNib3ggKTsKKworICAgICAgICBtZXRyaWNzLT53aWR0aCAgPSBjYm94LnhNYXggLSBjYm94LnhNaW47CisgICAgICAgIG1ldHJpY3MtPmhlaWdodCA9IGNib3gueU1heCAtIGNib3gueU1pbjsKKworICAgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggPSBjYm94LnhNaW47CisgICAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA9IGNib3gueU1heDsKKworICAgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBtYWtlIHVwIHZlcnRpY2FsIG9uZXMgKi8KKyAgICAgICAgICBmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MoIG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSApOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIFNldCBjb250cm9sIGRhdGEgdG8gdGhlIGdseXBoIGNoYXJzdHJpbmdzLiAgTm90ZSB0aGF0IHRoaXMgaXMgKi8KKyAgICAgIC8qIF9ub3RfIHplcm8tdGVybWluYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHQxZ2x5cGgtPmNvbnRyb2xfZGF0YSA9IChGVF9CeXRlKilnbHlwaF9kYXRhLnBvaW50ZXI7CisgICAgICB0MWdseXBoLT5jb250cm9sX2xlbiAgPSBnbHlwaF9kYXRhLmxlbmd0aDsKKyAgICB9CisKKworICBFeGl0OgorCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIGlmICggZ2x5cGhfZGF0YV9sb2FkZWQgJiYgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICB7CisgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT5mcmVlX2dseXBoX2RhdGEoCisgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LAorICAgICAgICAmZ2x5cGhfZGF0YSApOworCisgICAgICAvKiBTZXQgdGhlIGNvbnRyb2wgZGF0YSB0byBudWxsIC0gaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBpZiAgICovCisgICAgICAvKiBsb2FkZWQgaW5jcmVtZW50YWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICB0MWdseXBoLT5jb250cm9sX2RhdGEgPSBOVUxMOworICAgICAgdDFnbHlwaC0+Y29udHJvbF9sZW4gID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggbXVzdF9maW5pc2hfZGVjb2RlciApCisgICAgICBkZWNvZGVyX2Z1bmNzLT5kb25lKCAmZGVjb2RlciApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZ2xvYWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFnbG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjYwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxZ2xvYWQuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MWdsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UMUdMT0FEX0hfXworI2RlZmluZSBfX1QxR0xPQURfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSAidDFvYmpzLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9Db21wdXRlX01heF9BZHZhbmNlKCBUMV9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICBtYXhfYWR2YW5jZSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0dldF9BZHZhbmNlcyggRlRfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZmlyc3QsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBhZHZhbmNlcyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0xvYWRfR2x5cGgoIEZUX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50MzIgICAgICBsb2FkX2ZsYWdzICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UMUdMT0FEX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWxvYWQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2YzkwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFsb2FkLmMKQEAgLTAsMCArMSwyMjgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MWxvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIGZvbnQgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIGlzIHRoZSBuZXcgYW5kIGltcHJvdmVkIFR5cGUgMSBkYXRhIGxvYWRlciBmb3IgRnJlZVR5cGUgMi4gIFRoZSAgKi8KKyAgLyogb2xkIGxvYWRlciBoYXMgc2V2ZXJhbCBwcm9ibGVtczogaXQgaXMgc2xvdywgY29tcGxleCwgZGlmZmljdWx0IHRvICAgICovCisgIC8qIG1haW50YWluLCBhbmQgY29udGFpbnMgaW5jcmVkaWJsZSBoYWNrcyB0byBtYWtlIGl0IGFjY2VwdCBzb21lICAgICAgICAqLworICAvKiBpbGwtZm9ybWVkIFR5cGUgMSBmb250cyB3aXRob3V0IGhpY2N1cC1pbmcuICBNb3Jlb3ZlciwgYWJvdXQgNSUgb2YgICAgKi8KKyAgLyogdGhlIFR5cGUgMSBmb250cyBvbiBteSBtYWNoaW5lIHN0aWxsIGFyZW4ndCBsb2FkZWQgY29ycmVjdGx5IGJ5IGl0LiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGlzIHZlcnNpb24gaXMgbXVjaCBzaW1wbGVyLCBtdWNoIGZhc3RlciBhbmQgYWxzbyBlYXNpZXIgdG8gcmVhZCBhbmQgKi8KKyAgLyogbWFpbnRhaW4gYnkgYSBncmVhdCBvcmRlciBvZiBtYWduaXR1ZGUuICBUaGUgaWRlYSBiZWhpbmQgaXQgaXMgdG8gICAgICovCisgIC8qIF9ub3RfIHRyeSB0byByZWFkIHRoZSBUeXBlIDEgdG9rZW4gc3RyZWFtIHdpdGggYSBzdGF0ZSBtYWNoaW5lIChpLmUuICAqLworICAvKiBhIFBvc3RzY3JpcHQtbGlrZSBpbnRlcnByZXRlcikgYnV0IHJhdGhlciB0byBwZXJmb3JtIHNpbXBsZSBwYXR0ZXJuICAgKi8KKyAgLyogbWF0Y2hpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbmRlZWQsIG5lYXJseSBhbGwgZGF0YSBkZWZpbml0aW9ucyBmb2xsb3cgYSBzaW1wbGUgcGF0dGVybiBsaWtlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAuLi4gL0ZpZWxkIDxkYXRhPiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogd2hlcmUgPGRhdGE+IGNhbiBiZSBhIG51bWJlciwgYSBib29sZWFuLCBhIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgICAgICovCisgIC8qIG51bWJlcnMuICBUaGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucywgbmFtZWx5IHRoZSBlbmNvZGluZywgZm9udCBuYW1lLCAqLworICAvKiBjaGFyc3RyaW5ncywgYW5kIHN1YnJzOyB0aGV5IGFyZSBoYW5kbGVkIHdpdGggYSBzcGVjaWFsIHBhdHRlcm4gICAgICAgKi8KKyAgLyogbWF0Y2hpbmcgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBBbGwgb3RoZXIgY29tbW9uIGNhc2VzIGFyZSBoYW5kbGVkIHZlcnkgc2ltcGx5LiAgVGhlIG1hdGNoaW5nIHJ1bGVzICAgKi8KKyAgLyogYXJlIGRlZmluZWQgaW4gdGhlIGZpbGUgYHQxdG9rZW5zLmgnIHRocm91Z2ggdGhlIHVzZSBvZiBzZXZlcmFsICAgICAgICovCisgIC8qIG1hY3JvcyBjYWxscyBQQVJTRV9YWFguICBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgdHdpY2UgaGVyZTsgdGhlIGZpcnN0ICAqLworICAvKiB0aW1lIHRvIGdlbmVyYXRlIHBhcnNpbmcgY2FsbGJhY2sgZnVuY3Rpb25zLCB0aGUgc2Vjb25kIHRpbWUgdG8gICAgICAgKi8KKyAgLyogZ2VuZXJhdGUgYSB0YWJsZSBvZiBrZXl3b3JkcyAod2l0aCBwb2ludGVycyB0byB0aGUgYXNzb2NpYXRlZCAgICAgICAgICovCisgIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIGZ1bmN0aW9uIGBwYXJzZV9kaWN0JyBzaW1wbHkgc2NhbnMgKmxpbmVhcmx5KiBhIGdpdmVuIGRpY3Rpb25hcnkgICovCisgIC8qIChlaXRoZXIgdGhlIHRvcC1sZXZlbCBvciBwcml2YXRlIG9uZSkgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSAgICAgICAqLworICAvKiBjYWxsYmFjayB3aGVuIGl0IGVuY291bnRlcnMgYW4gaW1tZWRpYXRlIGtleXdvcmQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgaXMgYnkgZmFyIHRoZSBmYXN0ZXN0IHdheSBvbmUgY2FuIGZpbmQgdG8gcGFyc2UgYW5kIHJlYWQgYWxsICAgICAqLworICAvKiBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgbGVkIHRvIHRyZW1lbmRvdXMgY29kZSBzaXplIHJlZHVjdGlvbi4gIE5vdGUgdGhhdCBsYXRlciwgdGhlICAgICAqLworICAvKiBnbHlwaCBsb2FkZXIgd2lsbCBhbHNvIGJlIF9ncmVhdGx5XyBzaW1wbGlmaWVkLCBhbmQgdGhlIGF1dG9tYXRpYyAgICAgKi8KKyAgLyogaGludGVyIHdpbGwgcmVwbGFjZSB0aGUgY2x1bXN5IGB0MWhpbnRlcicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKworI2luY2x1ZGUgInQxbG9hZC5oIgorI2luY2x1ZGUgInQxZXJyb3JzLmgiCisKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyNkZWZpbmUgSVNfSU5DUkVNRU5UQUwgIChGVF9Cb29sKSggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICE9IDAgKQorI2Vsc2UKKyNkZWZpbmUgSVNfSU5DUkVNRU5UQUwgIDAKKyNlbmRpZgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDFsb2FkCisKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgTVVMVElQTEUgTUFTVEVSUyBTVVBQT1JUICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0MV9hbGxvY2F0ZV9ibGVuZCggVDFfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIG51bV9kZXNpZ25zLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgbnVtX2F4aXMgKQorICB7CisgICAgUFNfQmxlbmQgICBibGVuZDsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworCisKKyAgICBibGVuZCA9IGZhY2UtPmJsZW5kOworICAgIGlmICggIWJsZW5kICkKKyAgICB7CisgICAgICBpZiAoIEZUX05FVyggYmxlbmQgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgYmxlbmQtPm51bV9kZWZhdWx0X2Rlc2lnbl92ZWN0b3IgPSAwOworCisgICAgICBmYWNlLT5ibGVuZCA9IGJsZW5kOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIGRlc2lnbiBkYXRhIGlmIG5lZWRlZCAqLworICAgIGlmICggbnVtX2Rlc2lnbnMgPiAwICkKKyAgICB7CisgICAgICBpZiAoIGJsZW5kLT5udW1fZGVzaWducyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgbm47CisKKworICAgICAgICAvKiBhbGxvY2F0ZSB0aGUgYmxlbmQgYHByaXZhdGUnIGFuZCBgZm9udF9pbmZvJyBkaWN0aW9uYXJpZXMgKi8KKyAgICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGJsZW5kLT5mb250X2luZm9zWzFdLCBudW1fZGVzaWducyAgICAgKSB8fAorICAgICAgICAgICAgIEZUX05FV19BUlJBWSggYmxlbmQtPnByaXZhdGVzICBbMV0sIG51bV9kZXNpZ25zICAgICApIHx8CisgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBibGVuZC0+YmJveGVzICAgIFsxXSwgbnVtX2Rlc2lnbnMgICAgICkgfHwKKyAgICAgICAgICAgICBGVF9ORVdfQVJSQVkoIGJsZW5kLT53ZWlnaHRfdmVjdG9yLCBudW1fZGVzaWducyAqIDIgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGJsZW5kLT5kZWZhdWx0X3dlaWdodF92ZWN0b3IgPSBibGVuZC0+d2VpZ2h0X3ZlY3RvciArIG51bV9kZXNpZ25zOworCisgICAgICAgIGJsZW5kLT5mb250X2luZm9zWzBdID0gJmZhY2UtPnR5cGUxLmZvbnRfaW5mbzsKKyAgICAgICAgYmxlbmQtPnByaXZhdGVzICBbMF0gPSAmZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0OworICAgICAgICBibGVuZC0+YmJveGVzICAgIFswXSA9ICZmYWNlLT50eXBlMS5mb250X2Jib3g7CisKKyAgICAgICAgZm9yICggbm4gPSAyOyBubiA8PSBudW1fZGVzaWduczsgbm4rKyApCisgICAgICAgIHsKKyAgICAgICAgICBibGVuZC0+Zm9udF9pbmZvc1tubl0gPSBibGVuZC0+Zm9udF9pbmZvc1tubiAtIDFdICsgMTsKKyAgICAgICAgICBibGVuZC0+cHJpdmF0ZXMgIFtubl0gPSBibGVuZC0+cHJpdmF0ZXMgIFtubiAtIDFdICsgMTsKKyAgICAgICAgICBibGVuZC0+YmJveGVzICAgIFtubl0gPSBibGVuZC0+YmJveGVzICAgIFtubiAtIDFdICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGJsZW5kLT5udW1fZGVzaWducyA9IG51bV9kZXNpZ25zOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGJsZW5kLT5udW1fZGVzaWducyAhPSBudW1fZGVzaWducyApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBheGlzIGRhdGEgaWYgbmVlZGVkICovCisgICAgaWYgKCBudW1fYXhpcyA+IDAgKQorICAgIHsKKyAgICAgIGlmICggYmxlbmQtPm51bV9heGlzICE9IDAgJiYgYmxlbmQtPm51bV9heGlzICE9IG51bV9heGlzICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBibGVuZC0+bnVtX2F4aXMgPSBudW1fYXhpczsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSB0aGUgYmxlbmQgZGVzaWduIHBvcyB0YWJsZSBpZiBuZWVkZWQgKi8KKyAgICBudW1fZGVzaWducyA9IGJsZW5kLT5udW1fZGVzaWduczsKKyAgICBudW1fYXhpcyAgICA9IGJsZW5kLT5udW1fYXhpczsKKyAgICBpZiAoIG51bV9kZXNpZ25zICYmIG51bV9heGlzICYmIGJsZW5kLT5kZXNpZ25fcG9zWzBdID09IDAgKQorICAgIHsKKyAgICAgIEZUX1VJbnQgIG47CisKKworICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGJsZW5kLT5kZXNpZ25fcG9zWzBdLCBudW1fZGVzaWducyAqIG51bV9heGlzICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZvciAoIG4gPSAxOyBuIDwgbnVtX2Rlc2lnbnM7IG4rKyApCisgICAgICAgIGJsZW5kLT5kZXNpZ25fcG9zW25dID0gYmxlbmQtPmRlc2lnbl9wb3NbMF0gKyBudW1fYXhpcyAqIG47CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIEZhaWw6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0dldF9NdWx0aV9NYXN0ZXIoIFQxX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX011bHRpX01hc3RlciogIG1hc3RlciApCisgIHsKKyAgICBQU19CbGVuZCAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICBGVF9VSW50ICAgbjsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggYmxlbmQgKQorICAgIHsKKyAgICAgIG1hc3Rlci0+bnVtX2F4aXMgICAgPSBibGVuZC0+bnVtX2F4aXM7CisgICAgICBtYXN0ZXItPm51bV9kZXNpZ25zID0gYmxlbmQtPm51bV9kZXNpZ25zOworCisgICAgICBmb3IgKCBuID0gMDsgbiA8IGJsZW5kLT5udW1fYXhpczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgRlRfTU1fQXhpcyogICBheGlzID0gbWFzdGVyLT5heGlzICsgbjsKKyAgICAgICAgUFNfRGVzaWduTWFwICBtYXAgPSBibGVuZC0+ZGVzaWduX21hcCArIG47CisKKworICAgICAgICBheGlzLT5uYW1lICAgID0gYmxlbmQtPmF4aXNfbmFtZXNbbl07CisgICAgICAgIGF4aXMtPm1pbmltdW0gPSBtYXAtPmRlc2lnbl9wb2ludHNbMF07CisgICAgICAgIGF4aXMtPm1heGltdW0gPSBtYXAtPmRlc2lnbl9wb2ludHNbbWFwLT5udW1fcG9pbnRzIC0gMV07CisgICAgICB9CisKKyAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHaXZlbiBhIG5vcm1hbGl6ZWQgKGJsZW5kKSBjb29yZGluYXRlLCBmaWd1cmUgb3V0IHRoZSBkZXNpZ24gICAgICAgICAgKi8KKyAgLyogY29vcmRpbmF0ZSBhcHByb3ByaWF0ZSBmb3IgdGhhdCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfRml4ZWQKKyAgbW1fYXhpc191bm1hcCggUFNfRGVzaWduTWFwICBheGlzbWFwLAorICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgIG5jdiApCisgIHsKKyAgICBpbnQgIGo7CisKKworICAgIGlmICggbmN2IDw9IGF4aXNtYXAtPmJsZW5kX3BvaW50c1swXSApCisgICAgICByZXR1cm4gSU5UX1RPX0ZJWEVEKCBheGlzbWFwLT5kZXNpZ25fcG9pbnRzWzBdICk7CisKKyAgICBmb3IgKCBqID0gMTsgaiA8IGF4aXNtYXAtPm51bV9wb2ludHM7ICsraiApCisgICAgeworICAgICAgaWYgKCBuY3YgPD0gYXhpc21hcC0+YmxlbmRfcG9pbnRzW2pdICkKKyAgICAgICAgcmV0dXJuIElOVF9UT19GSVhFRCggYXhpc21hcC0+ZGVzaWduX3BvaW50c1tqIC0gMV0gKSArCisgICAgICAgICAgICAgICAoIGF4aXNtYXAtPmRlc2lnbl9wb2ludHNbal0gLSBheGlzbWFwLT5kZXNpZ25fcG9pbnRzW2ogLSAxXSApICoKKyAgICAgICAgICAgICAgIEZUX0RpdkZpeCggbmN2IC0gYXhpc21hcC0+YmxlbmRfcG9pbnRzW2ogLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc21hcC0+YmxlbmRfcG9pbnRzW2pdIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzbWFwLT5ibGVuZF9wb2ludHNbaiAtIDFdICk7CisgICAgfQorCisgICAgcmV0dXJuIElOVF9UT19GSVhFRCggYXhpc21hcC0+ZGVzaWduX3BvaW50c1theGlzbWFwLT5udW1fcG9pbnRzIC0gMV0gKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBHaXZlbiBhIHZlY3RvciBvZiB3ZWlnaHRzLCBvbmUgZm9yIGVhY2ggZGVzaWduLCBmaWd1cmUgb3V0IHRoZSAgICAgICAgKi8KKyAgLyogbm9ybWFsaXplZCBheGlzIGNvb3JkaW5hdGVzIHdoaWNoIGdhdmUgcmlzZSB0byB0aG9zZSB3ZWlnaHRzLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBtbV93ZWlnaHRzX3VubWFwKCBGVF9GaXhlZCogIHdlaWdodHMsCisgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgYXhpc2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBheGlzX2NvdW50ICkKKyAgeworICAgIEZUX0FTU0VSVCggYXhpc19jb3VudCA8PSBUMV9NQVhfTU1fQVhJUyApOworCisgICAgaWYgKCBheGlzX2NvdW50ID09IDEgKQorICAgICAgYXhpc2Nvb3Jkc1swXSA9IHdlaWdodHNbMV07CisKKyAgICBlbHNlIGlmICggYXhpc19jb3VudCA9PSAyICkKKyAgICB7CisgICAgICBheGlzY29vcmRzWzBdID0gd2VpZ2h0c1szXSArIHdlaWdodHNbMV07CisgICAgICBheGlzY29vcmRzWzFdID0gd2VpZ2h0c1szXSArIHdlaWdodHNbMl07CisgICAgfQorCisgICAgZWxzZSBpZiAoIGF4aXNfY291bnQgPT0gMyApCisgICAgeworICAgICAgYXhpc2Nvb3Jkc1swXSA9IHdlaWdodHNbN10gKyB3ZWlnaHRzWzVdICsgd2VpZ2h0c1szXSArIHdlaWdodHNbMV07CisgICAgICBheGlzY29vcmRzWzFdID0gd2VpZ2h0c1s3XSArIHdlaWdodHNbNl0gKyB3ZWlnaHRzWzNdICsgd2VpZ2h0c1syXTsKKyAgICAgIGF4aXNjb29yZHNbMl0gPSB3ZWlnaHRzWzddICsgd2VpZ2h0c1s2XSArIHdlaWdodHNbNV0gKyB3ZWlnaHRzWzRdOworICAgIH0KKworICAgIGVsc2UKKyAgICB7CisgICAgICBheGlzY29vcmRzWzBdID0gd2VpZ2h0c1sxNV0gKyB3ZWlnaHRzWzEzXSArIHdlaWdodHNbMTFdICsgd2VpZ2h0c1s5XSArCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzWzddICsgd2VpZ2h0c1s1XSArIHdlaWdodHNbM10gKyB3ZWlnaHRzWzFdOworICAgICAgYXhpc2Nvb3Jkc1sxXSA9IHdlaWdodHNbMTVdICsgd2VpZ2h0c1sxNF0gKyB3ZWlnaHRzWzExXSArIHdlaWdodHNbMTBdICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodHNbN10gKyB3ZWlnaHRzWzZdICsgd2VpZ2h0c1szXSArIHdlaWdodHNbMl07CisgICAgICBheGlzY29vcmRzWzJdID0gd2VpZ2h0c1sxNV0gKyB3ZWlnaHRzWzE0XSArIHdlaWdodHNbMTNdICsgd2VpZ2h0c1sxMl0gKworICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0c1s3XSArIHdlaWdodHNbNl0gKyB3ZWlnaHRzWzVdICsgd2VpZ2h0c1s0XTsKKyAgICAgIGF4aXNjb29yZHNbM10gPSB3ZWlnaHRzWzE1XSArIHdlaWdodHNbMTRdICsgd2VpZ2h0c1sxM10gKyB3ZWlnaHRzWzEyXSArCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzWzExXSArIHdlaWdodHNbMTBdICsgd2VpZ2h0c1s5XSArIHdlaWdodHNbOF07CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEp1c3QgYSB3cmFwcGVyIGFyb3VuZCBUMV9HZXRfTXVsdGlfTWFzdGVyIHRvIHN1cHBvcnQgdGhlIGRpZmZlcmVudCAgICAqLworICAvKiAgYXJndW1lbnRzIG5lZWRlZCBieSB0aGUgR1ggdmFyIGRpc3RvcnRhYmxlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9HZXRfTU1fVmFyKCBUMV9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKm1hc3RlciApCisgIHsKKyAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworICAgIEZUX01NX1ZhciAgICAgICAqbW12YXIgPSBOVUxMOworICAgIEZUX011bHRpX01hc3RlciAgbW1hc3RlcjsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIEZUX1VJbnQgICAgICAgICAgaTsKKyAgICBGVF9GaXhlZCAgICAgICAgIGF4aXNjb29yZHNbVDFfTUFYX01NX0FYSVNdOworICAgIFBTX0JsZW5kICAgICAgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKworCisgICAgZXJyb3IgPSBUMV9HZXRfTXVsdGlfTWFzdGVyKCBmYWNlLCAmbW1hc3RlciApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworICAgIGlmICggRlRfQUxMT0MoIG1tdmFyLAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZUX01NX1ZhciApICsKKyAgICAgICAgICAgICAgICAgICAgIG1tYXN0ZXIubnVtX2F4aXMgKiBzaXplb2YgKCBGVF9WYXJfQXhpcyApICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgbW12YXItPm51bV9heGlzICAgICAgICA9IG1tYXN0ZXIubnVtX2F4aXM7CisgICAgbW12YXItPm51bV9kZXNpZ25zICAgICA9IG1tYXN0ZXIubnVtX2Rlc2lnbnM7CisgICAgbW12YXItPm51bV9uYW1lZHN0eWxlcyA9IH4wVTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBhcHBseSAqLworICAgIG1tdmFyLT5heGlzICAgICAgICAgICAgPSAoRlRfVmFyX0F4aXMqKSZtbXZhclsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYXhlcyBhZnRlciBNTV9WYXIgc3RydWN0ICovCisgICAgbW12YXItPm5hbWVkc3R5bGUgICAgICA9IE5VTEw7CisKKyAgICBmb3IgKCBpID0gMCA7IGkgPCBtbWFzdGVyLm51bV9heGlzOyArK2kgKQorICAgIHsKKyAgICAgIG1tdmFyLT5heGlzW2ldLm5hbWUgICAgPSBtbWFzdGVyLmF4aXNbaV0ubmFtZTsKKyAgICAgIG1tdmFyLT5heGlzW2ldLm1pbmltdW0gPSBJTlRfVE9fRklYRUQoIG1tYXN0ZXIuYXhpc1tpXS5taW5pbXVtKTsKKyAgICAgIG1tdmFyLT5heGlzW2ldLm1heGltdW0gPSBJTlRfVE9fRklYRUQoIG1tYXN0ZXIuYXhpc1tpXS5tYXhpbXVtKTsKKyAgICAgIG1tdmFyLT5heGlzW2ldLmRlZiAgICAgPSAoIG1tdmFyLT5heGlzW2ldLm1pbmltdW0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXZhci0+YXhpc1tpXS5tYXhpbXVtICkgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGFwcGx5LiAgQnV0IHRoaXMgdmFsdWUgaXMgaW4gcmFuZ2UgKi8KKyAgICAgIG1tdmFyLT5heGlzW2ldLnN0cmlkICAgPSB+MFU7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGFwcGx5ICovCisgICAgICBtbXZhci0+YXhpc1tpXS50YWcgICAgID0gfjBVOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBhcHBseSAqLworCisgICAgICBpZiAoIGZ0X3N0cmNtcCggbW12YXItPmF4aXNbaV0ubmFtZSwgIldlaWdodCIgKSA9PSAwICkKKyAgICAgICAgbW12YXItPmF4aXNbaV0udGFnID0gRlRfTUFLRV9UQUcoICd3JywgJ2cnLCAnaCcsICd0JyApOworICAgICAgZWxzZSBpZiAoIGZ0X3N0cmNtcCggbW12YXItPmF4aXNbaV0ubmFtZSwgIldpZHRoIiApID09IDAgKQorICAgICAgICBtbXZhci0+YXhpc1tpXS50YWcgPSBGVF9NQUtFX1RBRyggJ3cnLCAnZCcsICd0JywgJ2gnICk7CisgICAgICBlbHNlIGlmICggZnRfc3RyY21wKCBtbXZhci0+YXhpc1tpXS5uYW1lLCAiT3B0aWNhbFNpemUiICkgPT0gMCApCisgICAgICAgIG1tdmFyLT5heGlzW2ldLnRhZyA9IEZUX01BS0VfVEFHKCAnbycsICdwJywgJ3MnLCAneicgKTsKKyAgICB9CisKKyAgICBpZiAoIGJsZW5kLT5udW1fZGVzaWducyA9PSAoIDFVIDw8IGJsZW5kLT5udW1fYXhpcyApICkKKyAgICB7CisgICAgICBtbV93ZWlnaHRzX3VubWFwKCBibGVuZC0+ZGVmYXVsdF93ZWlnaHRfdmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgYXhpc2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5udW1fYXhpcyApOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IG1tYXN0ZXIubnVtX2F4aXM7ICsraSApCisgICAgICAgIG1tdmFyLT5heGlzW2ldLmRlZiA9IG1tX2F4aXNfdW5tYXAoICZibGVuZC0+ZGVzaWduX21hcFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc2Nvb3Jkc1tpXSApOworICAgIH0KKworICAgICptYXN0ZXIgPSBtbXZhcjsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX1NldF9NTV9CbGVuZCggVDFfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCisgIHsKKyAgICBQU19CbGVuZCAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICBGVF9VSW50ICAgbiwgbTsKKworCisgICAgaWYgKCAhYmxlbmQgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIG51bV9jb29yZHMgPiBibGVuZC0+bnVtX2F4aXMgKQorICAgICAgbnVtX2Nvb3JkcyA9IGJsZW5kLT5udW1fYXhpczsKKworICAgIC8qIHJlY29tcHV0ZSB0aGUgd2VpZ2h0IHZlY3RvciBmcm9tIHRoZSBibGVuZCBjb29yZGluYXRlcyAqLworICAgIGZvciAoIG4gPSAwOyBuIDwgYmxlbmQtPm51bV9kZXNpZ25zOyBuKysgKQorICAgIHsKKyAgICAgIEZUX0ZpeGVkICByZXN1bHQgPSAweDEwMDAwTDsgIC8qIDEuMCBmaXhlZCAqLworCisKKyAgICAgIGZvciAoIG0gPSAwOyBtIDwgYmxlbmQtPm51bV9heGlzOyBtKysgKQorICAgICAgeworICAgICAgICBGVF9GaXhlZCAgZmFjdG9yOworCisKKyAgICAgICAgLyogZ2V0IGN1cnJlbnQgYmxlbmQgYXhpcyBwb3NpdGlvbjsgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiB1c2UgYSBkZWZhdWx0IHZhbHVlIGlmIHdlIGRvbid0IGhhdmUgYSBjb29yZGluYXRlICovCisgICAgICAgIGZhY3RvciA9IG0gPCBudW1fY29vcmRzID8gY29vcmRzW21dIDogMHg4MDAwOworICAgICAgICBpZiAoIGZhY3RvciA8IDAgKQorICAgICAgICAgIGZhY3RvciA9IDA7CisgICAgICAgIGlmICggZmFjdG9yID4gMHgxMDAwMEwgKQorICAgICAgICAgIGZhY3RvciA9IDB4MTAwMDBMOworCisgICAgICAgIGlmICggKCBuICYgKCAxIDw8IG0gKSApID09IDAgKQorICAgICAgICAgIGZhY3RvciA9IDB4MTAwMDBMIC0gZmFjdG9yOworCisgICAgICAgIHJlc3VsdCA9IEZUX011bEZpeCggcmVzdWx0LCBmYWN0b3IgKTsKKyAgICAgIH0KKyAgICAgIGJsZW5kLT53ZWlnaHRfdmVjdG9yW25dID0gcmVzdWx0OworICAgIH0KKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9TZXRfTU1fRGVzaWduKCBUMV9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBjb29yZHMgKQorICB7CisgICAgUFNfQmxlbmQgIGJsZW5kID0gZmFjZS0+YmxlbmQ7CisgICAgRlRfVUludCAgIG4sIHA7CisgICAgRlRfRml4ZWQgIGZpbmFsX2JsZW5kc1tUMV9NQVhfTU1fREVTSUdOU107CisKKworICAgIGlmICggIWJsZW5kICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBudW1fY29vcmRzID4gYmxlbmQtPm51bV9heGlzICkKKyAgICAgIG51bV9jb29yZHMgPSBibGVuZC0+bnVtX2F4aXM7CisKKyAgICAvKiBjb21wdXRlIHRoZSBibGVuZCBjb29yZGluYXRlcyB0aHJvdWdoIHRoZSBibGVuZCBkZXNpZ24gbWFwICovCisKKyAgICBmb3IgKCBuID0gMDsgbiA8IGJsZW5kLT5udW1fYXhpczsgbisrICkKKyAgICB7CisgICAgICBGVF9Mb25nICAgICAgIGRlc2lnbjsKKyAgICAgIEZUX0ZpeGVkICAgICAgdGhlX2JsZW5kOworICAgICAgUFNfRGVzaWduTWFwICBtYXAgICAgID0gYmxlbmQtPmRlc2lnbl9tYXAgKyBuOworICAgICAgRlRfTG9uZyogICAgICBkZXNpZ25zID0gbWFwLT5kZXNpZ25fcG9pbnRzOworICAgICAgRlRfRml4ZWQqICAgICBibGVuZHMgID0gbWFwLT5ibGVuZF9wb2ludHM7CisgICAgICBGVF9JbnQgICAgICAgIGJlZm9yZSAgPSAtMSwgYWZ0ZXIgPSAtMTsKKworCisgICAgICAvKiB1c2UgYSBkZWZhdWx0IHZhbHVlIGlmIHdlIGRvbid0IGhhdmUgYSBjb29yZGluYXRlICovCisgICAgICBpZiAoIG4gPCBudW1fY29vcmRzICkKKyAgICAgICAgZGVzaWduID0gY29vcmRzW25dOworICAgICAgZWxzZQorICAgICAgICBkZXNpZ24gPSAoIGRlc2lnbnNbbWFwLT5udW1fcG9pbnRzIC0gMV0gLSBkZXNpZ25zWzBdICkgLyAyOworCisgICAgICBmb3IgKCBwID0gMDsgcCA8IChGVF9VSW50KW1hcC0+bnVtX3BvaW50czsgcCsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfTG9uZyAgcF9kZXNpZ24gPSBkZXNpZ25zW3BdOworCisKKyAgICAgICAgLyogZXhhY3QgbWF0Y2g/ICovCisgICAgICAgIGlmICggZGVzaWduID09IHBfZGVzaWduICkKKyAgICAgICAgeworICAgICAgICAgIHRoZV9ibGVuZCA9IGJsZW5kc1twXTsKKyAgICAgICAgICBnb3RvIEZvdW5kOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZXNpZ24gPCBwX2Rlc2lnbiApCisgICAgICAgIHsKKyAgICAgICAgICBhZnRlciA9IChGVF9JbnQpcDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJlZm9yZSA9IChGVF9JbnQpcDsKKyAgICAgIH0KKworICAgICAgLyogbm93IGludGVycG9sYXRlIGlmIG5lY2Vzc2FyeSAqLworICAgICAgaWYgKCBiZWZvcmUgPCAwICkKKyAgICAgICAgdGhlX2JsZW5kID0gYmxlbmRzWzBdOworCisgICAgICBlbHNlIGlmICggYWZ0ZXIgPCAwICkKKyAgICAgICAgdGhlX2JsZW5kID0gYmxlbmRzW21hcC0+bnVtX3BvaW50cyAtIDFdOworCisgICAgICBlbHNlCisgICAgICAgIHRoZV9ibGVuZCA9IEZUX011bERpdiggZGVzaWduICAgICAgICAgLSBkZXNpZ25zW2JlZm9yZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRzIFthZnRlcl0gLSBibGVuZHMgW2JlZm9yZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduc1thZnRlcl0gLSBkZXNpZ25zW2JlZm9yZV0gKTsKKworICAgIEZvdW5kOgorICAgICAgZmluYWxfYmxlbmRzW25dID0gdGhlX2JsZW5kOworICAgIH0KKworICAgIHJldHVybiBUMV9TZXRfTU1fQmxlbmQoIGZhY2UsIGJsZW5kLT5udW1fYXhpcywgZmluYWxfYmxlbmRzICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSnVzdCBhIHdyYXBwZXIgYXJvdW5kIFQxX1NldF9NTV9EZXNpZ24gdG8gc3VwcG9ydCB0aGUgZGlmZmVyZW50ICAgICAgICovCisgIC8qIGFyZ3VtZW50cyBuZWVkZWQgYnkgdGhlIEdYIHZhciBkaXN0b3J0YWJsZSBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX1NldF9WYXJfRGVzaWduKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCisgIHsKKyAgICAgRlRfTG9uZyAgbGNvb3Jkc1tUMV9NQVhfTU1fQVhJU107CisgICAgIEZUX1VJbnQgIGk7CisKKworICAgICBpZiAoIG51bV9jb29yZHMgPiBUMV9NQVhfTU1fQVhJUyApCisgICAgICAgbnVtX2Nvb3JkcyA9IFQxX01BWF9NTV9BWElTOworCisgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgKytpICkKKyAgICAgICBsY29vcmRzW2ldID0gRklYRURfVE9fSU5UKCBjb29yZHNbaV0gKTsKKworICAgICByZXR1cm4gVDFfU2V0X01NX0Rlc2lnbiggZmFjZSwgbnVtX2Nvb3JkcywgbGNvb3JkcyApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUMV9Eb25lX0JsZW5kKCBUMV9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgUFNfQmxlbmQgICBibGVuZCAgPSBmYWNlLT5ibGVuZDsKKworCisgICAgaWYgKCBibGVuZCApCisgICAgeworICAgICAgRlRfVUludCAgbnVtX2Rlc2lnbnMgPSBibGVuZC0+bnVtX2Rlc2lnbnM7CisgICAgICBGVF9VSW50ICBudW1fYXhpcyAgICA9IGJsZW5kLT5udW1fYXhpczsKKyAgICAgIEZUX1VJbnQgIG47CisKKworICAgICAgLyogcmVsZWFzZSBkZXNpZ24gcG9zIHRhYmxlICovCisgICAgICBGVF9GUkVFKCBibGVuZC0+ZGVzaWduX3Bvc1swXSApOworICAgICAgZm9yICggbiA9IDE7IG4gPCBudW1fZGVzaWduczsgbisrICkKKyAgICAgICAgYmxlbmQtPmRlc2lnbl9wb3Nbbl0gPSBOVUxMOworCisgICAgICAvKiByZWxlYXNlIGJsZW5kIGBwcml2YXRlJyBhbmQgYGZvbnQgaW5mbycgZGljdGlvbmFyaWVzICovCisgICAgICBGVF9GUkVFKCBibGVuZC0+cHJpdmF0ZXNbMV0gKTsKKyAgICAgIEZUX0ZSRUUoIGJsZW5kLT5mb250X2luZm9zWzFdICk7CisgICAgICBGVF9GUkVFKCBibGVuZC0+YmJveGVzWzFdICk7CisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2Rlc2lnbnM7IG4rKyApCisgICAgICB7CisgICAgICAgIGJsZW5kLT5wcml2YXRlcyAgW25dID0gTlVMTDsKKyAgICAgICAgYmxlbmQtPmZvbnRfaW5mb3Nbbl0gPSBOVUxMOworICAgICAgICBibGVuZC0+YmJveGVzICAgIFtuXSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIC8qIHJlbGVhc2Ugd2VpZ2h0IHZlY3RvcnMgKi8KKyAgICAgIEZUX0ZSRUUoIGJsZW5kLT53ZWlnaHRfdmVjdG9yICk7CisgICAgICBibGVuZC0+ZGVmYXVsdF93ZWlnaHRfdmVjdG9yID0gTlVMTDsKKworICAgICAgLyogcmVsZWFzZSBheGlzIG5hbWVzICovCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9heGlzOyBuKysgKQorICAgICAgICBGVF9GUkVFKCBibGVuZC0+YXhpc19uYW1lc1tuXSApOworCisgICAgICAvKiByZWxlYXNlIGRlc2lnbiBtYXAgKi8KKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2F4aXM7IG4rKyApCisgICAgICB7CisgICAgICAgIFBTX0Rlc2lnbk1hcCAgZG1hcCA9IGJsZW5kLT5kZXNpZ25fbWFwICsgbjsKKworCisgICAgICAgIEZUX0ZSRUUoIGRtYXAtPmRlc2lnbl9wb2ludHMgKTsKKyAgICAgICAgZG1hcC0+bnVtX3BvaW50cyA9IDA7CisgICAgICB9CisKKyAgICAgIEZUX0ZSRUUoIGZhY2UtPmJsZW5kICk7CisgICAgfQorICB9CisKKworICBzdGF0aWMgdm9pZAorICBwYXJzZV9ibGVuZF9heGlzX3R5cGVzKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIFQxX1Rva2VuUmVjICBheGlzX3Rva2Vuc1tUMV9NQVhfTU1fQVhJU107CisgICAgRlRfSW50ICAgICAgIG4sIG51bV9heGlzOworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBQU19CbGVuZCAgICAgYmxlbmQ7CisgICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKKworCisgICAgLyogdGFrZSBhbiBhcnJheSBvZiBvYmplY3RzICovCisgICAgVDFfVG9Ub2tlbkFycmF5KCAmbG9hZGVyLT5wYXJzZXIsIGF4aXNfdG9rZW5zLAorICAgICAgICAgICAgICAgICAgICAgVDFfTUFYX01NX0FYSVMsICZudW1fYXhpcyApOworICAgIGlmICggbnVtX2F4aXMgPCAwICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX0VSUiggSWdub3JlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorICAgIGlmICggbnVtX2F4aXMgPT0gMCB8fCBudW1fYXhpcyA+IFQxX01BWF9NTV9BWElTICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJwYXJzZV9ibGVuZF9heGlzX3R5cGVzOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGF4ZXM6ICVkXG4iLAorICAgICAgICAgICAgICAgICBudW1fYXhpcyApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBibGVuZCBpZiBuZWNlc3NhcnkgKi8KKyAgICBlcnJvciA9IHQxX2FsbG9jYXRlX2JsZW5kKCBmYWNlLCAwLCAoRlRfVUludCludW1fYXhpcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgYmxlbmQgID0gZmFjZS0+YmxlbmQ7CisgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKyAgICAvKiBlYWNoIHRva2VuIGlzIGFuIGltbWVkaWF0ZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBheGlzICovCisgICAgZm9yICggbiA9IDA7IG4gPCBudW1fYXhpczsgbisrICkKKyAgICB7CisgICAgICBUMV9Ub2tlbiAgdG9rZW4gPSBheGlzX3Rva2VucyArIG47CisgICAgICBGVF9CeXRlKiAgbmFtZTsKKyAgICAgIEZUX1VJbnQgICBsZW47CisKKworICAgICAgLyogc2tpcCBmaXJzdCBzbGFzaCwgaWYgYW55ICovCisgICAgICBpZiAoIHRva2VuLT5zdGFydFswXSA9PSAnLycgKQorICAgICAgICB0b2tlbi0+c3RhcnQrKzsKKworICAgICAgbGVuID0gKEZUX1VJbnQpKCB0b2tlbi0+bGltaXQgLSB0b2tlbi0+c3RhcnQgKTsKKyAgICAgIGlmICggbGVuID09IDAgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgaWYgKCBGVF9BTExPQyggYmxlbmQtPmF4aXNfbmFtZXNbbl0sIGxlbiArIDEgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgbmFtZSA9IChGVF9CeXRlKilibGVuZC0+YXhpc19uYW1lc1tuXTsKKyAgICAgIEZUX01FTV9DT1BZKCBuYW1lLCB0b2tlbi0+c3RhcnQsIGxlbiApOworICAgICAgbmFtZVtsZW5dID0gJ1wwJzsKKyAgICB9CisKKyAgRXhpdDoKKyAgICBsb2FkZXItPnBhcnNlci5yb290LmVycm9yID0gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHBhcnNlX2JsZW5kX2Rlc2lnbl9wb3NpdGlvbnMoIFQxX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDFfTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgVDFfVG9rZW5SZWMgIGRlc2lnbl90b2tlbnNbVDFfTUFYX01NX0RFU0lHTlNdOworICAgIEZUX0ludCAgICAgICBudW1fZGVzaWduczsKKyAgICBGVF9JbnQgICAgICAgbnVtX2F4aXM7CisgICAgVDFfUGFyc2VyICAgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKworICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBQU19CbGVuZCAgICAgYmxlbmQ7CisKKworICAgIC8qIGdldCB0aGUgYXJyYXkgb2YgZGVzaWduIHRva2VucyAtLSBjb21wdXRlIG51bWJlciBvZiBkZXNpZ25zICovCisgICAgVDFfVG9Ub2tlbkFycmF5KCBwYXJzZXIsIGRlc2lnbl90b2tlbnMsCisgICAgICAgICAgICAgICAgICAgICBUMV9NQVhfTU1fREVTSUdOUywgJm51bV9kZXNpZ25zICk7CisgICAgaWYgKCBudW1fZGVzaWducyA8IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJZ25vcmUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgaWYgKCBudW1fZGVzaWducyA9PSAwIHx8IG51bV9kZXNpZ25zID4gVDFfTUFYX01NX0RFU0lHTlMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInBhcnNlX2JsZW5kX2Rlc2lnbl9wb3NpdGlvbnM6IgorICAgICAgICAgICAgICAgICAiIGluY29ycmVjdCBudW1iZXIgb2YgZGVzaWduczogJWRcbiIsCisgICAgICAgICAgICAgICAgIG51bV9kZXNpZ25zICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHsKKyAgICAgIEZUX0J5dGUqICBvbGRfY3Vyc29yID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICAgIEZUX0J5dGUqICBvbGRfbGltaXQgID0gcGFyc2VyLT5yb290LmxpbWl0OworICAgICAgRlRfSW50ICAgIG47CisKKworICAgICAgYmxlbmQgICAgPSBmYWNlLT5ibGVuZDsKKyAgICAgIG51bV9heGlzID0gMDsgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKworICAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fZGVzaWduczsgbisrICkKKyAgICAgIHsKKyAgICAgICAgVDFfVG9rZW5SZWMgIGF4aXNfdG9rZW5zW1QxX01BWF9NTV9BWElTXTsKKyAgICAgICAgVDFfVG9rZW4gICAgIHRva2VuOworICAgICAgICBGVF9JbnQgICAgICAgYXhpcywgbl9heGlzOworCisKKyAgICAgICAgLyogcmVhZCBheGlzL2Nvb3JkaW5hdGVzIHRva2VucyAqLworICAgICAgICB0b2tlbiA9IGRlc2lnbl90b2tlbnMgKyBuOworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gdG9rZW4tPnN0YXJ0OworICAgICAgICBwYXJzZXItPnJvb3QubGltaXQgID0gdG9rZW4tPmxpbWl0OworICAgICAgICBUMV9Ub1Rva2VuQXJyYXkoIHBhcnNlciwgYXhpc190b2tlbnMsIFQxX01BWF9NTV9BWElTLCAmbl9heGlzICk7CisKKyAgICAgICAgaWYgKCBuID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBuX2F4aXMgPD0gMCB8fCBuX2F4aXMgPiBUMV9NQVhfTU1fQVhJUyApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRVJST1IoKCAicGFyc2VfYmxlbmRfZGVzaWduX3Bvc2l0aW9uczoiCisgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBudW1iZXIgb2YgYXhlczogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5fYXhpcyApKTsKKyAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBudW1fYXhpcyA9IG5fYXhpczsKKyAgICAgICAgICBlcnJvciA9IHQxX2FsbG9jYXRlX2JsZW5kKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KW51bV9kZXNpZ25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KW51bV9heGlzICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggbl9heGlzICE9IG51bV9heGlzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggInBhcnNlX2JsZW5kX2Rlc2lnbl9wb3NpdGlvbnM6IGluY29ycmVjdCB0YWJsZVxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IHJlYWQgZWFjaCBheGlzIHRva2VuIGludG8gdGhlIGRlc2lnbiBwb3NpdGlvbiAqLworICAgICAgICBmb3IgKCBheGlzID0gMDsgYXhpcyA8IG5fYXhpczsgYXhpcysrICkKKyAgICAgICAgeworICAgICAgICAgIFQxX1Rva2VuICB0b2tlbjIgPSBheGlzX3Rva2VucyArIGF4aXM7CisKKworICAgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSB0b2tlbjItPnN0YXJ0OworICAgICAgICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSB0b2tlbjItPmxpbWl0OworICAgICAgICAgIGJsZW5kLT5kZXNpZ25fcG9zW25dW2F4aXNdID0gVDFfVG9GaXhlZCggcGFyc2VyLCAwICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgbG9hZGVyLT5wYXJzZXIucm9vdC5jdXJzb3IgPSBvbGRfY3Vyc29yOworICAgICAgbG9hZGVyLT5wYXJzZXIucm9vdC5saW1pdCAgPSBvbGRfbGltaXQ7CisgICAgfQorCisgIEV4aXQ6CisgICAgbG9hZGVyLT5wYXJzZXIucm9vdC5lcnJvciA9IGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBwYXJzZV9ibGVuZF9kZXNpZ25fbWFwKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIEZUX0Vycm9yICAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgVDFfUGFyc2VyICAgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKyAgICBQU19CbGVuZCAgICAgYmxlbmQ7CisgICAgVDFfVG9rZW5SZWMgIGF4aXNfdG9rZW5zW1QxX01BWF9NTV9BWElTXTsKKyAgICBGVF9JbnQgICAgICAgbiwgbnVtX2F4aXM7CisgICAgRlRfQnl0ZSogICAgIG9sZF9jdXJzb3I7CisgICAgRlRfQnl0ZSogICAgIG9sZF9saW1pdDsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKworICAgIFQxX1RvVG9rZW5BcnJheSggcGFyc2VyLCBheGlzX3Rva2VucywKKyAgICAgICAgICAgICAgICAgICAgIFQxX01BWF9NTV9BWElTLCAmbnVtX2F4aXMgKTsKKyAgICBpZiAoIG51bV9heGlzIDwgMCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FUlIoIElnbm9yZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBpZiAoIG51bV9heGlzID09IDAgfHwgbnVtX2F4aXMgPiBUMV9NQVhfTU1fQVhJUyApCisgICAgeworICAgICAgRlRfRVJST1IoKCAicGFyc2VfYmxlbmRfZGVzaWduX21hcDogaW5jb3JyZWN0IG51bWJlciBvZiBheGVzOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgbnVtX2F4aXMgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgb2xkX2N1cnNvciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisgICAgb2xkX2xpbWl0ICA9IHBhcnNlci0+cm9vdC5saW1pdDsKKworICAgIGVycm9yID0gdDFfYWxsb2NhdGVfYmxlbmQoIGZhY2UsIDAsIChGVF9VSW50KW51bV9heGlzICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKworICAgIC8qIG5vdyByZWFkIGVhY2ggYXhpcyBkZXNpZ24gbWFwICovCisgICAgZm9yICggbiA9IDA7IG4gPCBudW1fYXhpczsgbisrICkKKyAgICB7CisgICAgICBQU19EZXNpZ25NYXAgIG1hcCA9IGJsZW5kLT5kZXNpZ25fbWFwICsgbjsKKyAgICAgIFQxX1Rva2VuICAgICAgYXhpc190b2tlbjsKKyAgICAgIFQxX1Rva2VuUmVjICAgcG9pbnRfdG9rZW5zW1QxX01BWF9NTV9NQVBfUE9JTlRTXTsKKyAgICAgIEZUX0ludCAgICAgICAgcCwgbnVtX3BvaW50czsKKworCisgICAgICBheGlzX3Rva2VuID0gYXhpc190b2tlbnMgKyBuOworCisgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gYXhpc190b2tlbi0+c3RhcnQ7CisgICAgICBwYXJzZXItPnJvb3QubGltaXQgID0gYXhpc190b2tlbi0+bGltaXQ7CisgICAgICBUMV9Ub1Rva2VuQXJyYXkoIHBhcnNlciwgcG9pbnRfdG9rZW5zLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9NQVhfTU1fTUFQX1BPSU5UUywgJm51bV9wb2ludHMgKTsKKworICAgICAgaWYgKCBudW1fcG9pbnRzIDw9IDAgfHwgbnVtX3BvaW50cyA+IFQxX01BWF9NTV9NQVBfUE9JTlRTICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAicGFyc2VfYmxlbmRfZGVzaWduX21hcDogaW5jb3JyZWN0IHRhYmxlXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgLyogYWxsb2NhdGUgZGVzaWduIG1hcCBkYXRhICovCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggbWFwLT5kZXNpZ25fcG9pbnRzLCBudW1fcG9pbnRzICogMiApICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgbWFwLT5ibGVuZF9wb2ludHMgPSBtYXAtPmRlc2lnbl9wb2ludHMgKyBudW1fcG9pbnRzOworICAgICAgbWFwLT5udW1fcG9pbnRzICAgPSAoRlRfQnl0ZSludW1fcG9pbnRzOworCisgICAgICBmb3IgKCBwID0gMDsgcCA8IG51bV9wb2ludHM7IHArKyApCisgICAgICB7CisgICAgICAgIFQxX1Rva2VuICBwb2ludF90b2tlbjsKKworCisgICAgICAgIHBvaW50X3Rva2VuID0gcG9pbnRfdG9rZW5zICsgcDsKKworICAgICAgICAvKiBkb24ndCBpbmNsdWRlIGRlbGltaXRpbmcgYnJhY2tldHMgKi8KKyAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IHBvaW50X3Rva2VuLT5zdGFydCArIDE7CisgICAgICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSBwb2ludF90b2tlbi0+bGltaXQgLSAxOworCisgICAgICAgIG1hcC0+ZGVzaWduX3BvaW50c1twXSA9IFQxX1RvSW50KCBwYXJzZXIgKTsKKyAgICAgICAgbWFwLT5ibGVuZF9wb2ludHMgW3BdID0gVDFfVG9GaXhlZCggcGFyc2VyLCAwICk7CisgICAgICB9CisgICAgfQorCisgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IG9sZF9jdXJzb3I7CisgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IG9sZF9saW1pdDsKKworICBFeGl0OgorICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBwYXJzZV93ZWlnaHRfdmVjdG9yKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIFQxX1Rva2VuUmVjICBkZXNpZ25fdG9rZW5zW1QxX01BWF9NTV9ERVNJR05TXTsKKyAgICBGVF9JbnQgICAgICAgbnVtX2Rlc2lnbnM7CisgICAgRlRfRXJyb3IgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBUMV9QYXJzZXIgICAgcGFyc2VyID0gJmxvYWRlci0+cGFyc2VyOworICAgIFBTX0JsZW5kICAgICBibGVuZCAgPSBmYWNlLT5ibGVuZDsKKyAgICBUMV9Ub2tlbiAgICAgdG9rZW47CisgICAgRlRfSW50ICAgICAgIG47CisgICAgRlRfQnl0ZSogICAgIG9sZF9jdXJzb3I7CisgICAgRlRfQnl0ZSogICAgIG9sZF9saW1pdDsKKworCisgICAgVDFfVG9Ub2tlbkFycmF5KCBwYXJzZXIsIGRlc2lnbl90b2tlbnMsCisgICAgICAgICAgICAgICAgICAgICBUMV9NQVhfTU1fREVTSUdOUywgJm51bV9kZXNpZ25zICk7CisgICAgaWYgKCBudW1fZGVzaWducyA8IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJZ25vcmUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgaWYgKCBudW1fZGVzaWducyA9PSAwIHx8IG51bV9kZXNpZ25zID4gVDFfTUFYX01NX0RFU0lHTlMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInBhcnNlX3dlaWdodF92ZWN0b3I6IgorICAgICAgICAgICAgICAgICAiIGluY29ycmVjdCBudW1iZXIgb2YgZGVzaWduczogJWRcbiIsCisgICAgICAgICAgICAgICAgIG51bV9kZXNpZ25zICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmICggIWJsZW5kIHx8ICFibGVuZC0+bnVtX2Rlc2lnbnMgKQorICAgIHsKKyAgICAgIGVycm9yID0gdDFfYWxsb2NhdGVfYmxlbmQoIGZhY2UsIChGVF9VSW50KW51bV9kZXNpZ25zLCAwICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKyAgICB9CisgICAgZWxzZSBpZiAoIGJsZW5kLT5udW1fZGVzaWducyAhPSAoRlRfVUludCludW1fZGVzaWducyApCisgICAgeworICAgICAgRlRfRVJST1IoKCAicGFyc2Vfd2VpZ2h0X3ZlY3RvcjoiCisgICAgICAgICAgICAgICAgICIgL0JsZW5kRGVzaWduUG9zaXRpb24gYW5kIC9XZWlnaHRWZWN0b3IgaGF2ZVxuIgorICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICIgZGlmZmVyZW50IG51bWJlciBvZiBlbGVtZW50c1xuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBvbGRfY3Vyc29yID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICBvbGRfbGltaXQgID0gcGFyc2VyLT5yb290LmxpbWl0OworCisgICAgZm9yICggbiA9IDA7IG4gPCBudW1fZGVzaWduczsgbisrICkKKyAgICB7CisgICAgICB0b2tlbiA9IGRlc2lnbl90b2tlbnMgKyBuOworICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IHRva2VuLT5zdGFydDsKKyAgICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSB0b2tlbi0+bGltaXQ7CisKKyAgICAgIGJsZW5kLT5kZWZhdWx0X3dlaWdodF92ZWN0b3Jbbl0gPQorICAgICAgYmxlbmQtPndlaWdodF92ZWN0b3Jbbl0gICAgICAgICA9IFQxX1RvRml4ZWQoIHBhcnNlciwgMCApOworICAgIH0KKworICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBvbGRfY3Vyc29yOworICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSBvbGRfbGltaXQ7CisKKyAgRXhpdDoKKyAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBlcnJvcjsKKyAgfQorCisKKyAgLyogZS5nLiwgL0J1aWxkQ2hhckFycmF5IFswIDAgMCAwIDAgMCAwIDBdIGRlZiAgICAgICAgICAgKi8KKyAgLyogd2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgKi8KKyAgc3RhdGljIHZvaWQKKyAgcGFyc2VfYnVpbGRjaGFyKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgVDFfTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgZmFjZS0+bGVuX2J1aWxkY2hhciA9IChGVF9VSW50KVQxX1RvRml4ZWRBcnJheSggJmxvYWRlci0+cGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIDAgKTsKKyAgICByZXR1cm47CisgIH0KKworCisjZW5kaWYgLyogIVQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVCAqLworCisKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICBUWVBFIDEgU1lNQk9MIFBBUlNJTkcgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0MV9sb2FkX2tleXdvcmQoIFQxX0ZhY2UgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgY29uc3QgVDFfRmllbGQgIGZpZWxkICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICB2b2lkKiAgICAgZHVtbXlfb2JqZWN0OworICAgIHZvaWQqKiAgICBvYmplY3RzOworICAgIEZUX1VJbnQgICBtYXhfb2JqZWN0czsKKyAgICBQU19CbGVuZCAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKKworCisgICAgaWYgKCBibGVuZCAmJiBibGVuZC0+bnVtX2Rlc2lnbnMgPT0gMCApCisgICAgICBibGVuZCA9IE5VTEw7CisKKyAgICAvKiBpZiB0aGUga2V5d29yZCBoYXMgYSBkZWRpY2F0ZWQgY2FsbGJhY2ssIGNhbGwgaXQgKi8KKyAgICBpZiAoIGZpZWxkLT50eXBlID09IFQxX0ZJRUxEX1RZUEVfQ0FMTEJBQ0sgKQorICAgIHsKKyAgICAgIGZpZWxkLT5yZWFkZXIoIChGVF9GYWNlKWZhY2UsIGxvYWRlciApOworICAgICAgZXJyb3IgPSBsb2FkZXItPnBhcnNlci5yb290LmVycm9yOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIG5vdywgdGhlIGtleXdvcmQgaXMgZWl0aGVyIGEgc2ltcGxlIGZpZWxkLCBvciBhIHRhYmxlIG9mIGZpZWxkczsgKi8KKyAgICAvKiB3ZSBhcmUgbm93IGdvaW5nIHRvIHRha2UgY2FyZSBvZiBpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3dpdGNoICggZmllbGQtPmxvY2F0aW9uICkKKyAgICB7CisgICAgY2FzZSBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0lORk86CisgICAgICBkdW1teV9vYmplY3QgPSAmZmFjZS0+dHlwZTEuZm9udF9pbmZvOworICAgICAgb2JqZWN0cyAgICAgID0gJmR1bW15X29iamVjdDsKKyAgICAgIG1heF9vYmplY3RzICA9IDA7CisKKyAgICAgIGlmICggYmxlbmQgKQorICAgICAgeworICAgICAgICBvYmplY3RzICAgICA9ICh2b2lkKiopYmxlbmQtPmZvbnRfaW5mb3M7CisgICAgICAgIG1heF9vYmplY3RzID0gYmxlbmQtPm51bV9kZXNpZ25zOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkE6CisgICAgICBkdW1teV9vYmplY3QgPSAmZmFjZS0+dHlwZTEuZm9udF9leHRyYTsKKyAgICAgIG9iamVjdHMgICAgICA9ICZkdW1teV9vYmplY3Q7CisgICAgICBtYXhfb2JqZWN0cyAgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX1BSSVZBVEU6CisgICAgICBkdW1teV9vYmplY3QgPSAmZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0OworICAgICAgb2JqZWN0cyAgICAgID0gJmR1bW15X29iamVjdDsKKyAgICAgIG1heF9vYmplY3RzICA9IDA7CisKKyAgICAgIGlmICggYmxlbmQgKQorICAgICAgeworICAgICAgICBvYmplY3RzICAgICA9ICh2b2lkKiopYmxlbmQtPnByaXZhdGVzOworICAgICAgICBtYXhfb2JqZWN0cyA9IGJsZW5kLT5udW1fZGVzaWduczsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUMV9GSUVMRF9MT0NBVElPTl9CQk9YOgorICAgICAgZHVtbXlfb2JqZWN0ID0gJmZhY2UtPnR5cGUxLmZvbnRfYmJveDsKKyAgICAgIG9iamVjdHMgICAgICA9ICZkdW1teV9vYmplY3Q7CisgICAgICBtYXhfb2JqZWN0cyAgPSAwOworCisgICAgICBpZiAoIGJsZW5kICkKKyAgICAgIHsKKyAgICAgICAgb2JqZWN0cyAgICAgPSAodm9pZCoqKWJsZW5kLT5iYm94ZXM7CisgICAgICAgIG1heF9vYmplY3RzID0gYmxlbmQtPm51bV9kZXNpZ25zOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0xPQURFUjoKKyAgICAgIGR1bW15X29iamVjdCA9IGxvYWRlcjsKKyAgICAgIG9iamVjdHMgICAgICA9ICZkdW1teV9vYmplY3Q7CisgICAgICBtYXhfb2JqZWN0cyAgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZBQ0U6CisgICAgICBkdW1teV9vYmplY3QgPSBmYWNlOworICAgICAgb2JqZWN0cyAgICAgID0gJmR1bW15X29iamVjdDsKKyAgICAgIG1heF9vYmplY3RzICA9IDA7CisgICAgICBicmVhazsKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0JMRU5EOgorICAgICAgZHVtbXlfb2JqZWN0ID0gZmFjZS0+YmxlbmQ7CisgICAgICBvYmplY3RzICAgICAgPSAmZHVtbXlfb2JqZWN0OworICAgICAgbWF4X29iamVjdHMgID0gMDsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgICAgZHVtbXlfb2JqZWN0ID0gJmZhY2UtPnR5cGUxOworICAgICAgb2JqZWN0cyAgICAgID0gJmR1bW15X29iamVjdDsKKyAgICAgIG1heF9vYmplY3RzICA9IDA7CisgICAgfQorCisgICAgaWYgKCAqb2JqZWN0cyApCisgICAgeworICAgICAgaWYgKCBmaWVsZC0+dHlwZSA9PSBUMV9GSUVMRF9UWVBFX0lOVEVHRVJfQVJSQVkgfHwKKyAgICAgICAgICAgZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9GSVhFRF9BUlJBWSAgICkKKyAgICAgICAgZXJyb3IgPSBUMV9Mb2FkX0ZpZWxkX1RhYmxlKCAmbG9hZGVyLT5wYXJzZXIsIGZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsIG1heF9vYmplY3RzLCAwICk7CisgICAgICBlbHNlCisgICAgICAgIGVycm9yID0gVDFfTG9hZF9GaWVsZCggJmxvYWRlci0+cGFyc2VyLCBmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLCBtYXhfb2JqZWN0cywgMCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggInQxX2xvYWRfa2V5d29yZDogaWdub3Jpbmcga2V5d29yZCBgJXMnIgorICAgICAgICAgICAgICAgICAgIiB3aGljaCBpcyBub3QgdmFsaWQgYXQgdGhpcyBwb2ludFxuIgorICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgKHByb2JhYmx5IGR1ZSB0byBtaXNzaW5nIGtleXdvcmRzKVxuIiwKKyAgICAgICAgICAgICAgICAgZmllbGQtPmlkZW50ICkpOworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBwYXJzZV9wcml2YXRlKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisgICAgbG9hZGVyLT5rZXl3b3Jkc19lbmNvdW50ZXJlZCB8PSBUMV9QUklWQVRFOworICB9CisKKworICAvKiByZXR1cm4gMSBpbiBjYXNlIG9mIHN1Y2Nlc3MgKi8KKworICBzdGF0aWMgaW50CisgIHJlYWRfYmluYXJ5X2RhdGEoIFQxX1BhcnNlciAgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHNpemUsCisgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICBpbmNyZW1lbnRhbCApCisgIHsKKyAgICBGVF9CeXRlKiAgY3VyOworICAgIEZUX0J5dGUqICBsaW1pdCA9IHBhcnNlci0+cm9vdC5saW1pdDsKKworCisgICAgLyogdGhlIGJpbmFyeSBkYXRhIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBgc2l6ZScgW3doaXRlKl0gUkQgd2hpdGUgLi4uLi4uLiBORCAgICAgICAgICAgICovCisgICAgLyogICBgc2l6ZScgW3doaXRlKl0gLXwgd2hpdGUgLi4uLi4uLiB8LSAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworCisgICAgaWYgKCBjdXIgPCBsaW1pdCAmJiBmdF9pc2RpZ2l0KCAqY3VyICkgKQorICAgIHsKKyAgICAgIEZUX0xvbmcgIHMgPSBUMV9Ub0ludCggcGFyc2VyICk7CisKKworICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7ICAgLyogYFJEJyBvciBgLXwnIG9yIHNvbWV0aGluZyBlbHNlICovCisKKyAgICAgIC8qIHRoZXJlIGlzIG9ubHkgb25lIHdoaXRlc3BhY2UgY2hhciBhZnRlciB0aGUgKi8KKyAgICAgIC8qIGBSRCcgb3IgYC18JyB0b2tlbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICpiYXNlID0gcGFyc2VyLT5yb290LmN1cnNvciArIDE7CisKKyAgICAgIGlmICggcyA+PSAwICYmIHMgPCBsaW1pdCAtICpiYXNlICkKKyAgICAgIHsKKyAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciArPSBzICsgMTsKKyAgICAgICAgKnNpemUgPSAoRlRfVUxvbmcpczsKKyAgICAgICAgcmV0dXJuICFwYXJzZXItPnJvb3QuZXJyb3I7CisgICAgICB9CisgICAgfQorCisgICAgaWYoICFpbmNyZW1lbnRhbCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAicmVhZF9iaW5hcnlfZGF0YTogaW52YWxpZCBzaXplIGZpZWxkXG4iICkpOworICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyogV2Ugbm93IGRlZmluZSB0aGUgcm91dGluZXMgdG8gaGFuZGxlIHRoZSBgL0VuY29kaW5nJywgYC9TdWJycycsICovCisgIC8qIGFuZCBgL0NoYXJTdHJpbmdzJyBkaWN0aW9uYXJpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIHN0YXRpYyB2b2lkCisgIHQxX3BhcnNlX2ZvbnRfbWF0cml4KCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBUMV9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUMV9QYXJzZXIgICBwYXJzZXIgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgRlRfTWF0cml4KiAgbWF0cml4ID0gJmZhY2UtPnR5cGUxLmZvbnRfbWF0cml4OworICAgIEZUX1ZlY3RvciogIG9mZnNldCA9ICZmYWNlLT50eXBlMS5mb250X29mZnNldDsKKyAgICBGVF9GYWNlICAgICByb290ICAgPSAoRlRfRmFjZSkmZmFjZS0+cm9vdDsKKyAgICBGVF9GaXhlZCAgICB0ZW1wWzZdOworICAgIEZUX0ZpeGVkICAgIHRlbXBfc2NhbGU7CisgICAgRlRfSW50ICAgICAgcmVzdWx0OworCisKKyAgICByZXN1bHQgPSBUMV9Ub0ZpeGVkQXJyYXkoIHBhcnNlciwgNiwgdGVtcCwgMyApOworCisgICAgaWYgKCByZXN1bHQgPCA2ICkKKyAgICB7CisgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRlbXBfc2NhbGUgPSBGVF9BQlMoIHRlbXBbM10gKTsKKworICAgIGlmICggdGVtcF9zY2FsZSA9PSAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ0MV9wYXJzZV9mb250X21hdHJpeDogaW52YWxpZCBmb250IG1hdHJpeFxuIiApKTsKKyAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogU2V0IFVuaXRzIHBlciBFTSBiYXNlZCBvbiBGb250TWF0cml4IHZhbHVlcy4gIFdlIHNldCB0aGUgdmFsdWUgdG8gKi8KKyAgICAvKiAxMDAwIC8gdGVtcF9zY2FsZSwgYmVjYXVzZSB0ZW1wX3NjYWxlIHdhcyBhbHJlYWR5IG11bHRpcGxpZWQgYnkgICAqLworICAgIC8qIDEwMDAgKGluIHQxX3RvZml4ZWQsIGZyb20gcHNvYmpzLmMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICByb290LT51bml0c19wZXJfRU0gPSAoRlRfVVNob3J0KUZUX0RpdkZpeCggMTAwMCwgdGVtcF9zY2FsZSApOworCisgICAgLyogd2UgbmVlZCB0byBzY2FsZSB0aGUgdmFsdWVzIGJ5IDEuMC90ZW1wX3NjYWxlICovCisgICAgaWYgKCB0ZW1wX3NjYWxlICE9IDB4MTAwMDBMICkKKyAgICB7CisgICAgICB0ZW1wWzBdID0gRlRfRGl2Rml4KCB0ZW1wWzBdLCB0ZW1wX3NjYWxlICk7CisgICAgICB0ZW1wWzFdID0gRlRfRGl2Rml4KCB0ZW1wWzFdLCB0ZW1wX3NjYWxlICk7CisgICAgICB0ZW1wWzJdID0gRlRfRGl2Rml4KCB0ZW1wWzJdLCB0ZW1wX3NjYWxlICk7CisgICAgICB0ZW1wWzRdID0gRlRfRGl2Rml4KCB0ZW1wWzRdLCB0ZW1wX3NjYWxlICk7CisgICAgICB0ZW1wWzVdID0gRlRfRGl2Rml4KCB0ZW1wWzVdLCB0ZW1wX3NjYWxlICk7CisgICAgICB0ZW1wWzNdID0gdGVtcFszXSA8IDAgPyAtMHgxMDAwMEwgOiAweDEwMDAwTDsKKyAgICB9CisKKyAgICBtYXRyaXgtPnh4ID0gdGVtcFswXTsKKyAgICBtYXRyaXgtPnl4ID0gdGVtcFsxXTsKKyAgICBtYXRyaXgtPnh5ID0gdGVtcFsyXTsKKyAgICBtYXRyaXgtPnl5ID0gdGVtcFszXTsKKworICAgIC8qIG5vdGUgdGhhdCB0aGUgb2Zmc2V0cyBtdXN0IGJlIGV4cHJlc3NlZCBpbiBpbnRlZ2VyIGZvbnQgdW5pdHMgKi8KKyAgICBvZmZzZXQtPnggPSB0ZW1wWzRdID4+IDE2OworICAgIG9mZnNldC0+eSA9IHRlbXBbNV0gPj4gMTY7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHBhcnNlX2VuY29kaW5nKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBUMV9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUMV9QYXJzZXIgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKyAgICBGVF9CeXRlKiAgIGN1cjsKKyAgICBGVF9CeXRlKiAgIGxpbWl0ICA9IHBhcnNlci0+cm9vdC5saW1pdDsKKworICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKKworICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKyAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJwYXJzZV9lbmNvZGluZzogb3V0IG9mIGJvdW5kc1xuIiApKTsKKyAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogaWYgd2UgaGF2ZSBhIG51bWJlciBvciBgWycsIHRoZSBlbmNvZGluZyBpcyBhbiBhcnJheSwgKi8KKyAgICAvKiBhbmQgd2UgbXVzdCBsb2FkIGl0IG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggZnRfaXNkaWdpdCggKmN1ciApIHx8ICpjdXIgPT0gJ1snICkKKyAgICB7CisgICAgICBUMV9FbmNvZGluZyAgZW5jb2RlICAgICAgICAgID0gJmZhY2UtPnR5cGUxLmVuY29kaW5nOworICAgICAgRlRfSW50ICAgICAgIGNvdW50LCBuOworICAgICAgUFNfVGFibGUgICAgIGNoYXJfdGFibGUgICAgICA9ICZsb2FkZXItPmVuY29kaW5nX3RhYmxlOworICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgICAgICAgICA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisgICAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgICBGVF9Cb29sICAgICAgb25seV9pbW1lZGlhdGVzID0gMDsKKworCisgICAgICAvKiByZWFkIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZW5jb2Rpbmc7IHNob3VsZCBiZSAyNTYgKi8KKyAgICAgIGlmICggKmN1ciA9PSAnWycgKQorICAgICAgeworICAgICAgICBjb3VudCAgICAgICAgICAgPSAyNTY7CisgICAgICAgIG9ubHlfaW1tZWRpYXRlcyA9IDE7CisgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgY291bnQgPSAoRlRfSW50KVQxX1RvSW50KCBwYXJzZXIgKTsKKworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworICAgICAgaWYgKCBwYXJzZXItPnJvb3QuY3Vyc29yID49IGxpbWl0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgICAvKiB3ZSB1c2UgYSBUMV9UYWJsZSB0byBzdG9yZSBvdXIgY2hhcm5hbWVzICovCisgICAgICBsb2FkZXItPm51bV9jaGFycyA9IGVuY29kZS0+bnVtX2NoYXJzID0gY291bnQ7CisgICAgICBpZiAoIEZUX05FV19BUlJBWSggZW5jb2RlLT5jaGFyX2luZGV4LCBjb3VudCApICAgICB8fAorICAgICAgICAgICBGVF9ORVdfQVJSQVkoIGVuY29kZS0+Y2hhcl9uYW1lLCAgY291bnQgKSAgICAgfHwKKyAgICAgICAgICAgRlRfU0VUX0VSUk9SKCBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3RhYmxlLCBjb3VudCwgbWVtb3J5ICkgKSApCisgICAgICB7CisgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IGVycm9yOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8qIFdlIG5lZWQgdG8gYHplcm8nIG91dCBlbmNvZGluZ190YWJsZS5lbGVtZW50cyAqLworICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIHsKKyAgICAgICAgY2hhciogIG5vdGRlZiA9IChjaGFyICopIi5ub3RkZWYiOworCisKKyAgICAgICAgKHZvaWQpVDFfQWRkX1RhYmxlKCBjaGFyX3RhYmxlLCBuLCBub3RkZWYsIDggKTsKKyAgICAgIH0KKworICAgICAgLyogTm93IHdlIG5lZWQgdG8gcmVhZCByZWNvcmRzIG9mIHRoZSBmb3JtICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgLi4uIGNoYXJjb2RlIC9jaGFybmFtZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBmb3IgZWFjaCBlbnRyeSBpbiBvdXIgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogV2Ugc2ltcGx5IGxvb2sgZm9yIGEgbnVtYmVyIGZvbGxvd2VkIGJ5IGFuIGltbWVkaWF0ZSAgICovCisgICAgICAvKiBuYW1lLiAgTm90ZSB0aGF0IHRoaXMgaWdub3JlcyBjb3JyZWN0bHkgdGhlIHNlcXVlbmNlICAgKi8KKyAgICAgIC8qIHRoYXQgaXMgb2Z0ZW4gc2VlbiBpbiB0eXBlMSBmb250czogICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgIDAgMSAyNTUgeyAxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0IH0gZm9yIGR1cCAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogdXNlZCB0byBjbGVhbiB0aGUgZW5jb2RpbmcgYXJyYXkgYmVmb3JlIGFueXRoaW5nIGVsc2UuICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIEFsdGVybmF0aXZlbHksIGlmIHRoZSBhcnJheSBpcyBkaXJlY3RseSBnaXZlbiBhcyAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgIC9FbmNvZGluZyBbIC4uLiBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogd2Ugb25seSByZWFkIGltbWVkaWF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIG4gPSAwOworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworCisgICAgICB3aGlsZSAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPCBsaW1pdCApCisgICAgICB7CisgICAgICAgIGN1ciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisKKyAgICAgICAgLyogd2Ugc3RvcCB3aGVuIHdlIGVuY291bnRlciBhIGBkZWYnIG9yIGBdJyAqLworICAgICAgICBpZiAoICpjdXIgPT0gJ2QnICYmIGN1ciArIDMgPCBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGN1clsxXSA9PSAnZScgICAgICAgICAmJgorICAgICAgICAgICAgICAgY3VyWzJdID09ICdmJyAgICAgICAgICYmCisgICAgICAgICAgICAgICBJU19QU19ERUxJTSggY3VyWzNdICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNigoICJlbmNvZGluZyBlbmRcbiIgKSk7CisgICAgICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoICpjdXIgPT0gJ10nICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICJlbmNvZGluZyBlbmRcbiIgKSk7CisgICAgICAgICAgY3VyKys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlJ3ZlIGZvdW5kIGFuIGVudHJ5ICovCisgICAgICAgIGlmICggZnRfaXNkaWdpdCggKmN1ciApIHx8IG9ubHlfaW1tZWRpYXRlcyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9JbnQgIGNoYXJjb2RlOworCisKKyAgICAgICAgICBpZiAoIG9ubHlfaW1tZWRpYXRlcyApCisgICAgICAgICAgICBjaGFyY29kZSA9IG47CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX0ludClUMV9Ub0ludCggcGFyc2VyICk7CisgICAgICAgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICAgICAgICAgIC8qIHByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIGNoYXJjb2RlICovCisgICAgICAgICAgICBpZiAoIGN1ciA9PSBwYXJzZXItPnJvb3QuY3Vyc29yICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGN1ciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CisKKyAgICAgICAgICBpZiAoIGN1ciArIDIgPCBsaW1pdCAmJiAqY3VyID09ICcvJyAmJiBuIDwgY291bnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1VJbnQgIGxlbjsKKworCisgICAgICAgICAgICBjdXIrKzsKKworICAgICAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGN1cjsKKyAgICAgICAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOworICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuY3Vyc29yID49IGxpbWl0ICkKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxlbiA9IChGVF9VSW50KSggcGFyc2VyLT5yb290LmN1cnNvciAtIGN1ciApOworCisgICAgICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBUMV9BZGRfVGFibGUoIGNoYXJfdGFibGUsIGNoYXJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIsIGxlbiArIDEgKTsKKyAgICAgICAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hhcl90YWJsZS0+ZWxlbWVudHNbY2hhcmNvZGVdW2xlbl0gPSAnXDAnOworCisgICAgICAgICAgICBuKys7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBvbmx5X2ltbWVkaWF0ZXMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNpbmNlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCB1cGRhdGVkIGZvciAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIGltbWVkaWF0ZXMtb25seSBtb2RlIHdlIHdvdWxkIGdldCBhbiBpbmZpbml0ZSBsb29wIGlmICAgKi8KKyAgICAgICAgICAgIC8qIHdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIFRoaXMgZW5jb2RpbmcgYXJyYXkgaXMgbm90IHZhbGlkIGFjY29yZGluZyB0byB0aGUgdHlwZTEgKi8KKyAgICAgICAgICAgIC8qIHNwZWNpZmljYXRpb24gKGl0IG1pZ2h0IGJlIGFuIGVuY29kaW5nIGZvciBhIENJRCB0eXBlMSAgKi8KKyAgICAgICAgICAgIC8qIGZvbnQsIGhvd2V2ZXIpLCBzbyB3ZSBjb25jbHVkZSB0aGF0IHRoaXMgZm9udCBpcyBOT1QgYSAgKi8KKyAgICAgICAgICAgIC8qIHR5cGUxIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOworICAgICAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKyAgICAgIH0KKworICAgICAgZmFjZS0+dHlwZTEuZW5jb2RpbmdfdHlwZSA9IFQxX0VOQ09ESU5HX1RZUEVfQVJSQVk7CisgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yICAgICAgID0gY3VyOworICAgIH0KKworICAgIC8qIE90aGVyd2lzZSwgd2Ugc2hvdWxkIGhhdmUgZWl0aGVyIGBTdGFuZGFyZEVuY29kaW5nJywgKi8KKyAgICAvKiBgRXhwZXJ0RW5jb2RpbmcnLCBvciBgSVNPTGF0aW4xRW5jb2RpbmcnICAgICAgICAgICAgICovCisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggY3VyICsgMTcgPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZnRfc3RybmNtcCggKGNvbnN0IGNoYXIqKWN1ciwgIlN0YW5kYXJkRW5jb2RpbmciLCAxNiApID09IDAgKQorICAgICAgICBmYWNlLT50eXBlMS5lbmNvZGluZ190eXBlID0gVDFfRU5DT0RJTkdfVFlQRV9TVEFOREFSRDsKKworICAgICAgZWxzZSBpZiAoIGN1ciArIDE1IDwgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgIGZ0X3N0cm5jbXAoIChjb25zdCBjaGFyKiljdXIsICJFeHBlcnRFbmNvZGluZyIsIDE0ICkgPT0gMCApCisgICAgICAgIGZhY2UtPnR5cGUxLmVuY29kaW5nX3R5cGUgPSBUMV9FTkNPRElOR19UWVBFX0VYUEVSVDsKKworICAgICAgZWxzZSBpZiAoIGN1ciArIDE4IDwgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgIGZ0X3N0cm5jbXAoIChjb25zdCBjaGFyKiljdXIsICJJU09MYXRpbjFFbmNvZGluZyIsIDE3ICkgPT0gMCApCisgICAgICAgIGZhY2UtPnR5cGUxLmVuY29kaW5nX3R5cGUgPSBUMV9FTkNPRElOR19UWVBFX0lTT0xBVElOMTsKKworICAgICAgZWxzZQorICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBGVF9FUlIoIElnbm9yZSApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgcGFyc2Vfc3VicnMoIFQxX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIFQxX1BhcnNlciAgcGFyc2VyID0gJmxvYWRlci0+cGFyc2VyOworICAgIFBTX1RhYmxlICAgdGFibGUgID0gJmxvYWRlci0+c3VicnM7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBwYXJzZXItPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfSW50ICAgICBudW1fc3VicnM7CisKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworCisKKyAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICAvKiB0ZXN0IGZvciBlbXB0eSBhcnJheSAqLworICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA8IHBhcnNlci0+cm9vdC5saW1pdCAmJgorICAgICAgICAgKnBhcnNlci0+cm9vdC5jdXJzb3IgPT0gJ1snICAgICAgICAgICAgICApCisgICAgeworICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7CisgICAgICBUMV9Ta2lwX1NwYWNlcyAgKCBwYXJzZXIgKTsKKyAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA+PSBwYXJzZXItPnJvb3QubGltaXQgfHwKKyAgICAgICAgICAgKnBhcnNlci0+cm9vdC5jdXJzb3IgIT0gJ10nICAgICAgICAgICAgICAgKQorICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG51bV9zdWJycyA9IChGVF9JbnQpVDFfVG9JbnQoIHBhcnNlciApOworCisgICAgLyogcG9zaXRpb24gdGhlIHBhcnNlciByaWdodCBiZWZvcmUgdGhlIGBkdXAnIG9mIHRoZSBmaXJzdCBzdWJyICovCisgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7ICAgICAgICAgLyogYGFycmF5JyAqLworICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgIHJldHVybjsKKyAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICAvKiBpbml0aWFsaXplIHN1YnJzIGFycmF5IC0tIHdpdGggc3ludGhldGljIGZvbnRzIGl0IGlzIHBvc3NpYmxlICovCisgICAgLyogd2UgZ2V0IGhlcmUgdHdpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggIWxvYWRlci0+bnVtX3N1YnJzICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzYXV4LT5wc190YWJsZV9mdW5jcy0+aW5pdCggdGFibGUsIG51bV9zdWJycywgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIC8qIHRoZSBmb3JtYXQgaXMgc2ltcGxlOiAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIGBpbmRleCcgKyBiaW5hcnkgZGF0YSAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBGVF9Mb25nICAgaWR4OworICAgICAgRlRfVUxvbmcgIHNpemU7CisgICAgICBGVF9CeXRlKiAgYmFzZTsKKworCisgICAgICAvKiBJZiB3ZSBhcmUgb3V0IG9mIGRhdGEsIG9yIGlmIHRoZSBuZXh0IHRva2VuIGlzbid0IGBkdXAnLCAqLworICAgICAgLyogd2UgYXJlIGRvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciArIDQgPj0gcGFyc2VyLT5yb290LmxpbWl0ICAgICAgICAgIHx8CisgICAgICAgICAgZnRfc3RybmNtcCggKGNoYXIqKXBhcnNlci0+cm9vdC5jdXJzb3IsICJkdXAiLCAzICkgIT0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsgICAgICAgLyogYGR1cCcgKi8KKworICAgICAgaWR4ID0gVDFfVG9JbnQoIHBhcnNlciApOworCisgICAgICBpZiAoICFyZWFkX2JpbmFyeV9kYXRhKCBwYXJzZXIsICZzaXplLCAmYmFzZSwgSVNfSU5DUkVNRU5UQUwgKSApCisgICAgICAgIHJldHVybjsKKworICAgICAgLyogVGhlIGJpbmFyeSBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgb25lIHRva2VuLCBlLmcuIGBOUCcgKi8KKyAgICAgIC8qIChib3VuZCB0byBgbm9hY2Nlc3MgcHV0Jykgb3IgYnkgdHdvIHNlcGFyYXRlIHRva2VuczogICovCisgICAgICAvKiBgbm9hY2Nlc3MnICYgYHB1dCcuICBXZSBwb3NpdGlvbiB0aGUgcGFyc2VyIHJpZ2h0ICAgICAqLworICAgICAgLyogYmVmb3JlIHRoZSBuZXh0IGBkdXAnLCBpZiBhbnkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOyAgIC8qIGBOUCcgb3IgYHwnIG9yIGBub2FjY2VzcycgKi8KKyAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgcmV0dXJuOworICAgICAgVDFfU2tpcF9TcGFjZXMgICggcGFyc2VyICk7CisKKyAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciArIDQgPCBwYXJzZXItPnJvb3QubGltaXQgICAgICAgICAgICAmJgorICAgICAgICAgICBmdF9zdHJuY21wKCAoY2hhciopcGFyc2VyLT5yb290LmN1cnNvciwgInB1dCIsIDMgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7IC8qIHNraXAgYHB1dCcgKi8KKyAgICAgICAgVDFfU2tpcF9TcGFjZXMgICggcGFyc2VyICk7CisgICAgICB9CisKKyAgICAgIC8qIHdpdGggc3ludGhldGljIGZvbnRzIGl0IGlzIHBvc3NpYmxlIHdlIGdldCBoZXJlIHR3aWNlICovCisgICAgICBpZiAoIGxvYWRlci0+bnVtX3N1YnJzICkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIHNvbWUgZm9udHMgdXNlIGEgdmFsdWUgb2YgLTEgZm9yIGxlbklWIHRvIGluZGljYXRlIHRoYXQgKi8KKyAgICAgIC8qIHRoZSBjaGFyc3RyaW5ncyBhcmUgdW5lbmNvZGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIHRoYW5rcyB0byBUb20gS2Fjdmluc2t5IGZvciBwb2ludGluZyB0aGlzIG91dCAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWID49IDAgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgdGVtcDsKKworCisgICAgICAgIC8qIHNvbWUgZm9udHMgZGVmaW5lIGVtcHR5IHN1YnIgcmVjb3JkcyAtLSB0aGlzIGlzIG5vdCB0b3RhbGx5ICovCisgICAgICAgIC8qIGNvbXBsaWFudCB0byB0aGUgc3BlY2lmaWNhdGlvbiAod2hpY2ggc2F5cyB0aGV5IHNob3VsZCBhdCAgICovCisgICAgICAgIC8qIGxlYXN0IGNvbnRhaW4gYSBgcmV0dXJuJyksIGJ1dCB3ZSBzdXBwb3J0IHRoZW0gYW55d2F5ICAgICAgICovCisgICAgICAgIGlmICggc2l6ZSA8IChGVF9VTG9uZylmYWNlLT50eXBlMS5wcml2YXRlX2RpY3QubGVuSVYgKQorICAgICAgICB7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHQxX2RlY3J5cHQoKSBzaG91bGRuJ3Qgd3JpdGUgdG8gYmFzZSAtLSBtYWtlIHRlbXBvcmFyeSBjb3B5ICovCisgICAgICAgIGlmICggRlRfQUxMT0MoIHRlbXAsIHNpemUgKSApCisgICAgICAgICAgZ290byBGYWlsOworICAgICAgICBGVF9NRU1fQ09QWSggdGVtcCwgYmFzZSwgc2l6ZSApOworICAgICAgICBwc2F1eC0+dDFfZGVjcnlwdCggdGVtcCwgc2l6ZSwgNDMzMCApOworICAgICAgICBzaXplIC09IChGVF9VTG9uZylmYWNlLT50eXBlMS5wcml2YXRlX2RpY3QubGVuSVY7CisgICAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCB0YWJsZSwgKEZUX0ludClpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICsgZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWLCBzaXplICk7CisgICAgICAgIEZUX0ZSRUUoIHRlbXAgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIHRhYmxlLCAoRlRfSW50KWlkeCwgYmFzZSwgc2l6ZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICBpZiAoICFsb2FkZXItPm51bV9zdWJycyApCisgICAgICBsb2FkZXItPm51bV9zdWJycyA9IG51bV9zdWJyczsKKworICAgIHJldHVybjsKKworICBGYWlsOgorICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IGVycm9yOworICB9CisKKworI2RlZmluZSBUQUJMRV9FWFRFTkQgIDUKKworCisgIHN0YXRpYyB2b2lkCisgIHBhcnNlX2NoYXJzdHJpbmdzKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBUMV9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUMV9QYXJzZXIgICAgICBwYXJzZXIgICAgICAgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgUFNfVGFibGUgICAgICAgY29kZV90YWJsZSAgID0gJmxvYWRlci0+Y2hhcnN0cmluZ3M7CisgICAgUFNfVGFibGUgICAgICAgbmFtZV90YWJsZSAgID0gJmxvYWRlci0+Z2x5cGhfbmFtZXM7CisgICAgUFNfVGFibGUgICAgICAgc3dhcF90YWJsZSAgID0gJmxvYWRlci0+c3dhcF90YWJsZTsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgICAgICAgPSBwYXJzZXItPnJvb3QubWVtb3J5OworICAgIEZUX0Vycm9yICAgICAgIGVycm9yOworCisgICAgUFNBdXhfU2VydmljZSAgcHNhdXggICAgICAgID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKKyAgICBGVF9CeXRlKiAgICAgICBjdXI7CisgICAgRlRfQnl0ZSogICAgICAgbGltaXQgICAgICAgID0gcGFyc2VyLT5yb290LmxpbWl0OworICAgIEZUX0ludCAgICAgICAgIG4sIG51bV9nbHlwaHM7CisgICAgRlRfSW50ICAgICAgICAgbm90ZGVmX2luZGV4ID0gMDsKKyAgICBGVF9CeXRlICAgICAgICBub3RkZWZfZm91bmQgPSAwOworCisKKyAgICBudW1fZ2x5cGhzID0gKEZUX0ludClUMV9Ub0ludCggcGFyc2VyICk7CisgICAgaWYgKCBudW1fZ2x5cGhzIDwgMCApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIC8qIHNvbWUgZm9udHMgbGlrZSBPcHRpbWEtT2JsaXF1ZSBub3Qgb25seSBkZWZpbmUgdGhlIC9DaGFyU3RyaW5ncyAqLworICAgIC8qIGFycmF5IGJ1dCBhY2Nlc3MgaXQgYWxzbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggbnVtX2dseXBocyA9PSAwIHx8IHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICByZXR1cm47CisKKyAgICAvKiBpbml0aWFsaXplIHRhYmxlcywgbGVhdmluZyBzcGFjZSBmb3IgYWRkaXRpb24gb2YgLm5vdGRlZiwgKi8KKyAgICAvKiBpZiBuZWNlc3NhcnksIGFuZCBhIGZldyBvdGhlciBnbHlwaHMgdG8gaGFuZGxlIGJ1Z2d5ICAgICAgKi8KKyAgICAvKiBmb250cyB3aGljaCBoYXZlIG1vcmUgZ2x5cGhzIHRoYW4gc3BlY2lmaWVkLiAgICAgICAgICAgICAgKi8KKworICAgIC8qIGZvciBzb21lIG5vbi1zdGFuZGFyZCBmb250cyBsaWtlIGBPcHRpbWEnIHdoaWNoIHByb3ZpZGVzICAqLworICAgIC8qIGRpZmZlcmVudCBvdXRsaW5lcyBkZXBlbmRpbmcgb24gdGhlIHJlc29sdXRpb24gaXQgaXMgICAgICAqLworICAgIC8qIHBvc3NpYmxlIHRvIGdldCBoZXJlIHR3aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggIWxvYWRlci0+bnVtX2dseXBocyApCisgICAgeworICAgICAgZXJyb3IgPSBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoCisgICAgICAgICAgICAgICAgY29kZV90YWJsZSwgbnVtX2dseXBocyArIDEgKyBUQUJMRV9FWFRFTkQsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoCisgICAgICAgICAgICAgICAgbmFtZV90YWJsZSwgbnVtX2dseXBocyArIDEgKyBUQUJMRV9FWFRFTkQsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgLyogSW5pdGlhbGl6ZSB0YWJsZSBmb3Igc3dhcHBpbmcgaW5kZXggbm90ZGVmX2luZGV4IGFuZCAqLworICAgICAgLyogaW5kZXggMCBuYW1lcyBhbmQgY29kZXMgKGlmIG5lY2Vzc2FyeSkuICAgICAgICAgICAgICAqLworCisgICAgICBlcnJvciA9IHBzYXV4LT5wc190YWJsZV9mdW5jcy0+aW5pdCggc3dhcF90YWJsZSwgNCwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIG4gPSAwOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICBGVF9VTG9uZyAgc2l6ZTsKKyAgICAgIEZUX0J5dGUqICBiYXNlOworCisKKyAgICAgIC8qIHRoZSBmb3JtYXQgaXMgc2ltcGxlOiAgICAgICAgKi8KKyAgICAgIC8qICAgYC9nbHlwaG5hbWUnICsgYmluYXJ5IGRhdGEgKi8KKworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworCisgICAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgICAgaWYgKCBjdXIgPj0gbGltaXQgKQorICAgICAgICBicmVhazsKKworICAgICAgLyogd2Ugc3RvcCB3aGVuIHdlIGZpbmQgYSBgZGVmJyBvciBgZW5kJyBrZXl3b3JkICovCisgICAgICBpZiAoIGN1ciArIDMgPCBsaW1pdCAmJiBJU19QU19ERUxJTSggY3VyWzNdICkgKQorICAgICAgeworICAgICAgICBpZiAoIGN1clswXSA9PSAnZCcgJiYKKyAgICAgICAgICAgICBjdXJbMV0gPT0gJ2UnICYmCisgICAgICAgICAgICAgY3VyWzJdID09ICdmJyApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGVyZSBhcmUgZm9udHMgd2hpY2ggaGF2ZSB0aGlzOiAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAvQ2hhclN0cmluZ3MgMTE4IGRpY3QgZGVmICAgICAgKi8KKyAgICAgICAgICAvKiAgIFByaXZhdGUgYmVnaW4gICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgQ2hhclN0cmluZ3MgYmVnaW4gICAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFRvIGNhdGNoIHRoaXMgd2UgaWdub3JlIGBkZWYnIGlmICovCisgICAgICAgICAgLyogbm8gY2hhcnN0cmluZyBoYXMgYWN0dWFsbHkgYmVlbiAgKi8KKyAgICAgICAgICAvKiBzZWVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggbiApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY3VyWzBdID09ICdlJyAmJgorICAgICAgICAgICAgIGN1clsxXSA9PSAnbicgJiYKKyAgICAgICAgICAgICBjdXJbMl0gPT0gJ2QnICkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7CisgICAgICBpZiAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPj0gbGltaXQgKQorICAgICAgeworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgcmV0dXJuOworCisgICAgICBpZiAoICpjdXIgPT0gJy8nICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgbGVuOworCisKKyAgICAgICAgaWYgKCBjdXIgKyAyID49IGxpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKworICAgICAgICBjdXIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIGAvJyAqLworICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKKworICAgICAgICBpZiAoICFyZWFkX2JpbmFyeV9kYXRhKCBwYXJzZXIsICZzaXplLCAmYmFzZSwgSVNfSU5DUkVNRU5UQUwgKSApCisgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8qIGZvciBzb21lIG5vbi1zdGFuZGFyZCBmb250cyBsaWtlIGBPcHRpbWEnIHdoaWNoIHByb3ZpZGVzICovCisgICAgICAgIC8qIGRpZmZlcmVudCBvdXRsaW5lcyBkZXBlbmRpbmcgb24gdGhlIHJlc29sdXRpb24gaXQgaXMgICAgICovCisgICAgICAgIC8qIHBvc3NpYmxlIHRvIGdldCBoZXJlIHR3aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggbG9hZGVyLT5udW1fZ2x5cGhzICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggbmFtZV90YWJsZSwgbiwgY3VyLCBsZW4gKyAxICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAvKiBhZGQgYSB0cmFpbGluZyB6ZXJvIHRvIHRoZSBuYW1lIHRhYmxlICovCisgICAgICAgIG5hbWVfdGFibGUtPmVsZW1lbnRzW25dW2xlbl0gPSAnXDAnOworCisgICAgICAgIC8qIHJlY29yZCBpbmRleCBvZiAvLm5vdGRlZiAqLworICAgICAgICBpZiAoICpjdXIgPT0gJy4nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgZnRfc3RyY21wKCAiLm5vdGRlZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopKG5hbWVfdGFibGUtPmVsZW1lbnRzW25dKSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgbm90ZGVmX2luZGV4ID0gbjsKKyAgICAgICAgICBub3RkZWZfZm91bmQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmYWNlLT50eXBlMS5wcml2YXRlX2RpY3QubGVuSVYgPj0gMCAmJgorICAgICAgICAgICAgIG4gPCBudW1fZ2x5cGhzICsgVEFCTEVfRVhURU5EICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0J5dGUqICB0ZW1wOworCisKKyAgICAgICAgICBpZiAoIHNpemUgPD0gKEZUX1VMb25nKWZhY2UtPnR5cGUxLnByaXZhdGVfZGljdC5sZW5JViApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIHQxX2RlY3J5cHQoKSBzaG91bGRuJ3Qgd3JpdGUgdG8gYmFzZSAtLSBtYWtlIHRlbXBvcmFyeSBjb3B5ICovCisgICAgICAgICAgaWYgKCBGVF9BTExPQyggdGVtcCwgc2l6ZSApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgICBGVF9NRU1fQ09QWSggdGVtcCwgYmFzZSwgc2l6ZSApOworICAgICAgICAgIHBzYXV4LT50MV9kZWNyeXB0KCB0ZW1wLCBzaXplLCA0MzMwICk7CisgICAgICAgICAgc2l6ZSAtPSAoRlRfVUxvbmcpZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWOworICAgICAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBjb2RlX3RhYmxlLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICsgZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWLCBzaXplICk7CisgICAgICAgICAgRlRfRlJFRSggdGVtcCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggY29kZV90YWJsZSwgbiwgYmFzZSwgc2l6ZSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgbisrOworICAgICAgfQorICAgIH0KKworICAgIGxvYWRlci0+bnVtX2dseXBocyA9IG47CisKKyAgICAvKiBpZiAvLm5vdGRlZiBpcyBmb3VuZCBidXQgZG9lcyBub3Qgb2NjdXB5IGluZGV4IDAsIGRvIG91ciBtYWdpYy4gKi8KKyAgICBpZiAoIG5vdGRlZl9mb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZnRfc3RyY21wKCAiLm5vdGRlZiIsIChjb25zdCBjaGFyKiluYW1lX3RhYmxlLT5lbGVtZW50c1swXSApICkKKyAgICB7CisgICAgICAvKiBTd2FwIGdseXBoIGluIGluZGV4IDAgd2l0aCAvLm5vdGRlZiBnbHlwaC4gIEZpcnN0LCBhZGQgaW5kZXggMCAgKi8KKyAgICAgIC8qIG5hbWUgYW5kIGNvZGUgZW50cmllcyB0byBzd2FwX3RhYmxlLiAgVGhlbiBwbGFjZSBub3RkZWZfaW5kZXggICAqLworICAgICAgLyogbmFtZSBhbmQgY29kZSBlbnRyaWVzIGludG8gc3dhcF90YWJsZS4gIFRoZW4gc3dhcCBuYW1lIGFuZCBjb2RlICovCisgICAgICAvKiBlbnRyaWVzIGF0IGluZGljZXMgbm90ZGVmX2luZGV4IGFuZCAwIHVzaW5nIHZhbHVlcyBzdG9yZWQgaW4gICAgKi8KKyAgICAgIC8qIHN3YXBfdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAvKiBJbmRleCAwIG5hbWUgKi8KKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBzd2FwX3RhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfdGFibGUtPmVsZW1lbnRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfdGFibGUtPmxlbmd0aHMgWzBdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBJbmRleCAwIGNvZGUgKi8KKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBzd2FwX3RhYmxlLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfdGFibGUtPmVsZW1lbnRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfdGFibGUtPmxlbmd0aHMgWzBdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBJbmRleCBub3RkZWZfaW5kZXggbmFtZSAqLworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIHN3YXBfdGFibGUsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV90YWJsZS0+ZWxlbWVudHNbbm90ZGVmX2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3RhYmxlLT5sZW5ndGhzIFtub3RkZWZfaW5kZXhdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiBJbmRleCBub3RkZWZfaW5kZXggY29kZSAqLworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIHN3YXBfdGFibGUsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV90YWJsZS0+ZWxlbWVudHNbbm90ZGVmX2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3RhYmxlLT5sZW5ndGhzIFtub3RkZWZfaW5kZXhdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggbmFtZV90YWJsZSwgbm90ZGVmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmVsZW1lbnRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmxlbmd0aHMgWzBdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggY29kZV90YWJsZSwgbm90ZGVmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmVsZW1lbnRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmxlbmd0aHMgWzFdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggbmFtZV90YWJsZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5lbGVtZW50c1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5sZW5ndGhzIFsyXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIGNvZGVfdGFibGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+ZWxlbWVudHNbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+bGVuZ3RocyBbM10gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICB9CisgICAgZWxzZSBpZiAoICFub3RkZWZfZm91bmQgKQorICAgIHsKKyAgICAgIC8qIG5vdGRlZl9pbmRleCBpcyBhbHJlYWR5IDAsIG9yIC8ubm90ZGVmIGlzIHVuZGVmaW5lZCBpbiAgICovCisgICAgICAvKiBjaGFyc3RyaW5ncyBkaWN0aW9uYXJ5LiAgV29ycnkgYWJvdXQgLy5ub3RkZWYgdW5kZWZpbmVkLiAqLworICAgICAgLyogV2UgdGFrZSBpbmRleCAwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgdGFibGUocykgICAgKi8KKyAgICAgIC8qIGFuZCBhZGQgb3VyIG93biAvLm5vdGRlZiBnbHlwaCB0byBpbmRleCAwLiAgICAgICAgICAgICAgICovCisKKyAgICAgIC8qIDAgMzMzIGhzYncgZW5kY2hhciAqLworICAgICAgRlRfQnl0ZSAgbm90ZGVmX2dseXBoW10gPSB7IDB4OEIsIDB4RjcsIDB4RTEsIDB4MEQsIDB4MEUgfTsKKyAgICAgIGNoYXIqICAgIG5vdGRlZl9uYW1lICAgID0gKGNoYXIgKikiLm5vdGRlZiI7CisKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIHN3YXBfdGFibGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV90YWJsZS0+ZWxlbWVudHNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV90YWJsZS0+bGVuZ3RocyBbMF0gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBzd2FwX3RhYmxlLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfdGFibGUtPmVsZW1lbnRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfdGFibGUtPmxlbmd0aHMgWzBdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggbmFtZV90YWJsZSwgMCwgbm90ZGVmX25hbWUsIDggKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBjb2RlX3RhYmxlLCAwLCBub3RkZWZfZ2x5cGgsIDUgKTsKKworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIG5hbWVfdGFibGUsIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+ZWxlbWVudHNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+bGVuZ3RocyBbMF0gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBjb2RlX3RhYmxlLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmVsZW1lbnRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmxlbmd0aHMgWzFdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICAvKiB3ZSBhZGRlZCBhIGdseXBoLiAqLworICAgICAgbG9hZGVyLT5udW1fZ2x5cGhzICs9IDE7CisgICAgfQorCisgICAgcmV0dXJuOworCisgIEZhaWw6CisgICAgcGFyc2VyLT5yb290LmVycm9yID0gZXJyb3I7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRGVmaW5lIHRoZSB0b2tlbiBmaWVsZCBzdGF0aWMgdmFyaWFibGVzLiAgVGhpcyBpcyBhIHNldCBvZiAgICAgICAgICAgICovCisgIC8qIFQxX0ZpZWxkUmVjIHZhcmlhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICBzdGF0aWMKKyAgY29uc3QgVDFfRmllbGRSZWMgIHQxX2tleXdvcmRzW10gPQorICB7CisKKyNpbmNsdWRlICJ0MXRva2Vucy5oIgorCisgICAgLyogbm93IGFkZCB0aGUgc3BlY2lhbCBmdW5jdGlvbnMuLi4gKi8KKyAgICBUMV9GSUVMRF9DQUxMQkFDSyggIkZvbnRNYXRyaXgiLCAgICAgICAgICAgdDFfcGFyc2VfZm9udF9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICAgIFQxX0ZJRUxEX0NBTExCQUNLKCAiRW5jb2RpbmciLCAgICAgICAgICAgICBwYXJzZV9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJTdWJycyIsICAgICAgICAgICAgICAgIHBhcnNlX3N1YnJzLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICAgIFQxX0ZJRUxEX0NBTExCQUNLKCAiQ2hhclN0cmluZ3MiLCAgICAgICAgICBwYXJzZV9jaGFyc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgICBUMV9GSUVMRF9DQUxMQkFDSyggIlByaXZhdGUiLCAgICAgICAgICAgICAgcGFyc2VfcHJpdmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisKKyNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19NTV9TVVBQT1JUCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJCbGVuZERlc2lnblBvc2l0aW9ucyIsIHBhcnNlX2JsZW5kX2Rlc2lnbl9wb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICAgIFQxX0ZJRUxEX0NBTExCQUNLKCAiQmxlbmREZXNpZ25NYXAiLCAgICAgICBwYXJzZV9ibGVuZF9kZXNpZ25fbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUICkKKyAgICBUMV9GSUVMRF9DQUxMQkFDSyggIkJsZW5kQXhpc1R5cGVzIiwgICAgICAgcGFyc2VfYmxlbmRfYXhpc190eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJXZWlnaHRWZWN0b3IiLCAgICAgICAgIHBhcnNlX3dlaWdodF92ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICAgIFQxX0ZJRUxEX0NBTExCQUNLKCAiQnVpbGRDaGFyQXJyYXkiLCAgICAgICBwYXJzZV9idWlsZGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisjZW5kaWYKKworICAgIHsgMCwgVDFfRklFTERfTE9DQVRJT05fQ0lEX0lORk8sIFQxX0ZJRUxEX1RZUEVfTk9ORSwgMCwgMCwgMCwgMCwgMCwgMCB9CisgIH07CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGFyc2VfZGljdCggVDFfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICBUMV9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgRlRfQnl0ZSogICBiYXNlLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIHNpemUgKQorICB7CisgICAgVDFfUGFyc2VyICBwYXJzZXIgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgRlRfQnl0ZSAgICpsaW1pdCwgKnN0YXJ0X2JpbmFyeSA9IE5VTEw7CisgICAgRlRfQm9vbCAgICBoYXZlX2ludGVnZXIgPSAwOworCisKKyAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gYmFzZTsKKyAgICBwYXJzZXItPnJvb3QubGltaXQgID0gYmFzZSArIHNpemU7CisgICAgcGFyc2VyLT5yb290LmVycm9yICA9IEZUX0Vycl9PazsKKworICAgIGxpbWl0ID0gcGFyc2VyLT5yb290LmxpbWl0OworCisgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworCisgICAgd2hpbGUgKCBwYXJzZXItPnJvb3QuY3Vyc29yIDwgbGltaXQgKQorICAgIHsKKyAgICAgIEZUX0J5dGUqICBjdXI7CisKKworICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKworICAgICAgLyogbG9vayBmb3IgYGVleGVjJyAqLworICAgICAgaWYgKCBJU19QU19UT0tFTiggY3VyLCBsaW1pdCwgImVleGVjIiApICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGxvb2sgZm9yIGBjbG9zZWZpbGUnIHdoaWNoIGVuZHMgdGhlIGVleGVjIHNlY3Rpb24gKi8KKyAgICAgIGVsc2UgaWYgKCBJU19QU19UT0tFTiggY3VyLCBsaW1pdCwgImNsb3NlZmlsZSIgKSApCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBpbiBhIHN5bnRoZXRpYyBmb250IHRoZSBiYXNlIGZvbnQgc3RhcnRzIGFmdGVyIGEgICAgICAgICAgICovCisgICAgICAvKiBgRm9udERpY3Rpb25hcnknIHRva2VuIHRoYXQgaXMgcGxhY2VkIGFmdGVyIGEgUHJpdmF0ZSBkaWN0ICovCisgICAgICBlbHNlIGlmICggSVNfUFNfVE9LRU4oIGN1ciwgbGltaXQsICJGb250RGlyZWN0b3J5IiApICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBsb2FkZXItPmtleXdvcmRzX2VuY291bnRlcmVkICYgVDFfUFJJVkFURSApCisgICAgICAgICAgbG9hZGVyLT5rZXl3b3Jkc19lbmNvdW50ZXJlZCB8PQorICAgICAgICAgICAgVDFfRk9OVERJUl9BRlRFUl9QUklWQVRFOworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yICs9IDEzOworICAgICAgfQorCisgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYW4gaW50ZWdlciAqLworICAgICAgZWxzZSBpZiAoIGZ0X2lzZGlnaXQoICpjdXIgKSApCisgICAgICB7CisgICAgICAgIHN0YXJ0X2JpbmFyeSA9IGN1cjsKKyAgICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7CisgICAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIGhhdmVfaW50ZWdlciA9IDE7CisgICAgICB9CisKKyAgICAgIC8qIGluIHZhbGlkIFR5cGUgMSBmb250cyB3ZSBkb24ndCBzZWUgYFJEJyBvciBgLXwnIGRpcmVjdGx5ICovCisgICAgICAvKiBzaW5jZSB0aG9zZSB0b2tlbnMgYXJlIGhhbmRsZWQgYnkgcGFyc2Vfc3VicnMgYW5kICAgICAgICAqLworICAgICAgLyogcGFyc2VfY2hhcnN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGVsc2UgaWYgKCAqY3VyID09ICdSJyAmJiBjdXIgKyA2IDwgbGltaXQgJiYgKihjdXIgKyAxKSA9PSAnRCcgJiYKKyAgICAgICAgICAgICAgICBoYXZlX2ludGVnZXIgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgczsKKyAgICAgICAgRlRfQnl0ZSogIGI7CisKKworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gc3RhcnRfYmluYXJ5OworICAgICAgICBpZiAoICFyZWFkX2JpbmFyeV9kYXRhKCBwYXJzZXIsICZzLCAmYiwgSVNfSU5DUkVNRU5UQUwgKSApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGhhdmVfaW50ZWdlciA9IDA7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCAqY3VyID09ICctJyAmJiBjdXIgKyA2IDwgbGltaXQgJiYgKihjdXIgKyAxKSA9PSAnfCcgJiYKKyAgICAgICAgICAgICAgICBoYXZlX2ludGVnZXIgKQorICAgICAgeworICAgICAgICBGVF9VTG9uZyAgczsKKyAgICAgICAgRlRfQnl0ZSogIGI7CisKKworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gc3RhcnRfYmluYXJ5OworICAgICAgICBpZiAoICFyZWFkX2JpbmFyeV9kYXRhKCBwYXJzZXIsICZzLCAmYiwgSVNfSU5DUkVNRU5UQUwgKSApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGhhdmVfaW50ZWdlciA9IDA7CisgICAgICB9CisKKyAgICAgIC8qIGxvb2sgZm9yIGltbWVkaWF0ZXMgKi8KKyAgICAgIGVsc2UgaWYgKCAqY3VyID09ICcvJyAmJiBjdXIgKyAyIDwgbGltaXQgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICBsZW47CisKKworICAgICAgICBjdXIrKzsKKworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gY3VyOworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKKworICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwgMjIgJiYgcGFyc2VyLT5yb290LmN1cnNvciA8IGxpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIC8qIG5vdyBjb21wYXJlIHRoZSBpbW1lZGlhdGUgbmFtZSB0byB0aGUga2V5d29yZCB0YWJsZSAqLworICAgICAgICAgIFQxX0ZpZWxkICBrZXl3b3JkID0gKFQxX0ZpZWxkKXQxX2tleXdvcmRzOworCisKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0J5dGUqICBuYW1lOworCisKKyAgICAgICAgICAgIG5hbWUgPSAoRlRfQnl0ZSopa2V5d29yZC0+aWRlbnQ7CisgICAgICAgICAgICBpZiAoICFuYW1lICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggY3VyWzBdID09IG5hbWVbMF0gICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgbGVuID09IGZ0X3N0cmxlbiggKGNvbnN0IGNoYXIgKiluYW1lICkgJiYKKyAgICAgICAgICAgICAgICAgZnRfbWVtY21wKCBjdXIsIG5hbWUsIGxlbiApID09IDAgICAgICAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBXZSBmb3VuZCBpdCAtLSBydW4gdGhlIHBhcnNpbmcgY2FsbGJhY2shICAgICAqLworICAgICAgICAgICAgICAvKiBXZSByZWNvcmQgZXZlcnkgaW5zdGFuY2Ugb2YgZXZlcnkgZmllbGQgICAgICAqLworICAgICAgICAgICAgICAvKiAodW50aWwgd2UgcmVhY2ggdGhlIGJhc2UgZm9udCBvZiBhICAgICAgICAgICAqLworICAgICAgICAgICAgICAvKiBzeW50aGV0aWMgZm9udCkgdG8gZGVhbCBhZGVxdWF0ZWx5IHdpdGggICAgICAqLworICAgICAgICAgICAgICAvKiBtdWx0aXBsZSBtYXN0ZXIgZm9udHM7IHRoaXMgaXMgYWxzbyAgICAgICAgICAqLworICAgICAgICAgICAgICAvKiBuZWNlc3NhcnkgYmVjYXVzZSBsYXRlciBQb3N0U2NyaXB0ICAgICAgICAgICAqLworICAgICAgICAgICAgICAvKiBkZWZpbml0aW9ucyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuICAgICAgICAgICAqLworCisgICAgICAgICAgICAgIC8qIE9uY2Ugd2UgZW5jb3VudGVyIGBGb250RGlyZWN0b3J5JyBhZnRlciAgICAgICovCisgICAgICAgICAgICAgIC8qIGAvUHJpdmF0ZScsIHdlIGtub3cgdGhhdCB0aGlzIGlzIGEgc3ludGhldGljICovCisgICAgICAgICAgICAgIC8qIGZvbnQ7IGV4Y2VwdCBmb3IgYC9DaGFyU3RyaW5ncycgd2UgYXJlIG5vdCAgICovCisgICAgICAgICAgICAgIC8qIGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCBmb2xsb3dzIHRoaXMgICAgICovCisgICAgICAgICAgICAgIC8qIGBGb250RGlyZWN0b3J5Jy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgLyogTU0gZm9udHMgaGF2ZSBtb3JlIHRoYW4gb25lIC9Qcml2YXRlIHRva2VuIGF0ICovCisgICAgICAgICAgICAgIC8qIHRoZSB0b3AgbGV2ZWw7IGxldCdzIGhvcGUgdGhhdCBhbGwgdGhlIGp1bmsgICAqLworICAgICAgICAgICAgICAvKiB0aGF0IGZvbGxvd3MgdGhlIGZpcnN0IC9Qcml2YXRlIHRva2VuIGlzIG5vdCAgKi8KKyAgICAgICAgICAgICAgLyogaW50ZXJlc3RpbmcgdG8gdXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIEFkb2JlIFRlY2ggTm90ZSAjNTE3NSAoQ0lELUtleWVkICovCisgICAgICAgICAgICAgIC8qIEZvbnQgSW5zdGFsbGF0aW9uIGZvciBBVE0gU29mdHdhcmUpIGEgYGJlZ2luJyAqLworICAgICAgICAgICAgICAvKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGV4YWN0bHkgb25lIGBlbmQnLCBhbmQgICAgKi8KKyAgICAgICAgICAgICAgLyogYGJlZ2luJyAtLSBgZW5kJyBwYWlycyBtdXN0IGJlIGFjY3VyYXRlbHkgICAgICovCisgICAgICAgICAgICAgIC8qIHBhaXJlZC4gIFdlIGNvdWxkIHVzZSB0aGlzIHRvIGRpc3Rpbmd1aXNoICAgICAqLworICAgICAgICAgICAgICAvKiBiZXR3ZWVuIHRoZSBnbG9iYWwgUHJpdmF0ZSBhbmQgdGhlIFByaXZhdGUgICAgKi8KKyAgICAgICAgICAgICAgLyogZGljdCB0aGF0IGlzIGEgbWVtYmVyIG9mIHRoZSBCbGVuZCBkaWN0LiAgICAgICovCisKKyAgICAgICAgICAgICAgY29uc3QgRlRfVUludCBkaWN0ID0KKyAgICAgICAgICAgICAgICAoIGxvYWRlci0+a2V5d29yZHNfZW5jb3VudGVyZWQgJiBUMV9QUklWQVRFICkKKyAgICAgICAgICAgICAgICAgICAgPyBUMV9GSUVMRF9ESUNUX1BSSVZBVEUKKyAgICAgICAgICAgICAgICAgICAgOiBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUOworCisgICAgICAgICAgICAgIGlmICggISggZGljdCAmIGtleXdvcmQtPmRpY3QgKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTEoKCAicGFyc2VfZGljdDogZm91bmQgYCVzJyBidXQgaWdub3JpbmcgaXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzaW5jZSBpdCBpcyBpbiB0aGUgd3JvbmcgZGljdGlvbmFyeVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLT5pZGVudCApKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmICggISggbG9hZGVyLT5rZXl3b3Jkc19lbmNvdW50ZXJlZCAmCisgICAgICAgICAgICAgICAgICAgICAgVDFfRk9OVERJUl9BRlRFUl9QUklWQVRFICAgICApICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICBmdF9zdHJjbXAoIChjb25zdCBjaGFyKiluYW1lLCAiQ2hhclN0cmluZ3MiICkgPT0gMCApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSB0MV9sb2FkX2tleXdvcmQoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkICk7CisgICAgICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgIT0gRlRfRXJyX09rICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoIEZUX0VSUl9FUSggcGFyc2VyLT5yb290LmVycm9yLCBJZ25vcmUgKSApCisgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX0Vycl9PazsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+cm9vdC5lcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGtleXdvcmQrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYXZlX2ludGVnZXIgPSAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgaGF2ZV9pbnRlZ2VyID0gMDsKKyAgICAgIH0KKworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBwYXJzZXItPnJvb3QuZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHQxX2luaXRfbG9hZGVyKCBUMV9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgIFQxX0ZhY2UgICAgZmFjZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKworICAgIEZUX01FTV9aRVJPKCBsb2FkZXIsIHNpemVvZiAoICpsb2FkZXIgKSApOworICAgIGxvYWRlci0+bnVtX2dseXBocyA9IDA7CisgICAgbG9hZGVyLT5udW1fY2hhcnMgID0gMDsKKworICAgIC8qIGluaXRpYWxpemUgdGhlIHRhYmxlcyAtLSBzaW1wbHkgc2V0IHRoZWlyIGBpbml0JyBmaWVsZCB0byAwICovCisgICAgbG9hZGVyLT5lbmNvZGluZ190YWJsZS5pbml0ICA9IDA7CisgICAgbG9hZGVyLT5jaGFyc3RyaW5ncy5pbml0ICAgICA9IDA7CisgICAgbG9hZGVyLT5nbHlwaF9uYW1lcy5pbml0ICAgICA9IDA7CisgICAgbG9hZGVyLT5zdWJycy5pbml0ICAgICAgICAgICA9IDA7CisgICAgbG9hZGVyLT5zd2FwX3RhYmxlLmluaXQgICAgICA9IDA7CisgICAgbG9hZGVyLT5mb250ZGF0YSAgICAgICAgICAgICA9IDA7CisgICAgbG9hZGVyLT5rZXl3b3Jkc19lbmNvdW50ZXJlZCA9IDA7CisgIH0KKworCisgIHN0YXRpYyB2b2lkCisgIHQxX2RvbmVfbG9hZGVyKCBUMV9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUMV9QYXJzZXIgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKworCisgICAgLyogZmluYWxpemUgdGFibGVzICovCisgICAgVDFfUmVsZWFzZV9UYWJsZSggJmxvYWRlci0+ZW5jb2RpbmdfdGFibGUgKTsKKyAgICBUMV9SZWxlYXNlX1RhYmxlKCAmbG9hZGVyLT5jaGFyc3RyaW5ncyApOworICAgIFQxX1JlbGVhc2VfVGFibGUoICZsb2FkZXItPmdseXBoX25hbWVzICk7CisgICAgVDFfUmVsZWFzZV9UYWJsZSggJmxvYWRlci0+c3dhcF90YWJsZSApOworICAgIFQxX1JlbGVhc2VfVGFibGUoICZsb2FkZXItPnN1YnJzICk7CisKKyAgICAvKiBmaW5hbGl6ZSBwYXJzZXIgKi8KKyAgICBUMV9GaW5hbGl6ZV9QYXJzZXIoIHBhcnNlciApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDFfT3Blbl9GYWNlKCBUMV9GYWNlICBmYWNlICkKKyAgeworICAgIFQxX0xvYWRlclJlYyAgIGxvYWRlcjsKKyAgICBUMV9QYXJzZXIgICAgICBwYXJzZXI7CisgICAgVDFfRm9udCAgICAgICAgdHlwZTEgPSAmZmFjZS0+dHlwZTE7CisgICAgUFNfUHJpdmF0ZSAgICAgcHJpdiAgPSAmdHlwZTEtPnByaXZhdGVfZGljdDsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKworICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKKworICAgIHQxX2luaXRfbG9hZGVyKCAmbG9hZGVyLCBmYWNlICk7CisKKyAgICAvKiBkZWZhdWx0IHZhbHVlcyAqLworICAgIGZhY2UtPm5kdl9pZHggICAgICAgICAgPSAtMTsKKyAgICBmYWNlLT5jZHZfaWR4ICAgICAgICAgID0gLTE7CisgICAgZmFjZS0+bGVuX2J1aWxkY2hhciAgICA9IDA7CisKKyAgICBwcml2LT5ibHVlX3NoaWZ0ICAgICAgID0gNzsKKyAgICBwcml2LT5ibHVlX2Z1enogICAgICAgID0gMTsKKyAgICBwcml2LT5sZW5JViAgICAgICAgICAgID0gNDsKKyAgICBwcml2LT5leHBhbnNpb25fZmFjdG9yID0gKEZUX0ZpeGVkKSggMC4wNiAqIDB4MTAwMDBMICk7CisgICAgcHJpdi0+Ymx1ZV9zY2FsZSAgICAgICA9IChGVF9GaXhlZCkoIDAuMDM5NjI1ICogMHgxMDAwMEwgKiAxMDAwICk7CisKKyAgICBwYXJzZXIgPSAmbG9hZGVyLnBhcnNlcjsKKyAgICBlcnJvciAgPSBUMV9OZXdfUGFyc2VyKCBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhdXggKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gcGFyc2VfZGljdCggZmFjZSwgJmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+YmFzZV9kaWN0LCBwYXJzZXItPmJhc2VfbGVuICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IFQxX0dldF9Qcml2YXRlX0RpY3QoIHBhcnNlciwgcHNhdXggKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gcGFyc2VfZGljdCggZmFjZSwgJmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0LCBwYXJzZXItPnByaXZhdGVfbGVuICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBlbnN1cmUgZXZlbi1uZXNzIG9mIGBudW1fYmx1ZV92YWx1ZXMnICovCisgICAgcHJpdi0+bnVtX2JsdWVfdmFsdWVzICY9IH4xOworCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVAorCisgICAgaWYgKCBmYWNlLT5ibGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZhY2UtPmJsZW5kLT5udW1fZGVmYXVsdF9kZXNpZ25fdmVjdG9yICE9IDAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZmFjZS0+YmxlbmQtPm51bV9kZWZhdWx0X2Rlc2lnbl92ZWN0b3IgIT0gZmFjZS0+YmxlbmQtPm51bV9heGlzICkKKyAgICB7CisgICAgICAvKiB3ZSBkb24ndCB1c2UgaXQgY3VycmVudGx5IHNvIGp1c3Qgd2FybiwgcmVzZXQsIGFuZCBpZ25vcmUgKi8KKyAgICAgIEZUX0VSUk9SKCggIlQxX09wZW5fRmFjZSgpOiAvRGVzaWduVmVjdG9yIGNvbnRhaW5zICV1IGVudHJpZXMgIgorICAgICAgICAgICAgICAgICAid2hpbGUgdGhlcmUgYXJlICV1IGF4ZXMuXG4iLAorICAgICAgICAgICAgICAgICBmYWNlLT5ibGVuZC0+bnVtX2RlZmF1bHRfZGVzaWduX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgZmFjZS0+YmxlbmQtPm51bV9heGlzICkpOworCisgICAgICBmYWNlLT5ibGVuZC0+bnVtX2RlZmF1bHRfZGVzaWduX3ZlY3RvciA9IDA7CisgICAgfQorCisgICAgLyogdGhlIGZvbGxvd2luZyBjYW4gaGFwcGVuIGZvciBNTSBpbnN0YW5jZXM7IHdlIHRoZW4gdHJlYXQgdGhlICovCisgICAgLyogZm9udCBhcyBhIG5vcm1hbCBQUyBmb250ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmYWNlLT5ibGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoICFmYWNlLT5ibGVuZC0+bnVtX2Rlc2lnbnMgfHwgIWZhY2UtPmJsZW5kLT5udW1fYXhpcyApICkKKyAgICAgIFQxX0RvbmVfQmxlbmQoIGZhY2UgKTsKKworICAgIC8qIGFub3RoZXIgc2FmZXR5IGNoZWNrICovCisgICAgaWYgKCBmYWNlLT5ibGVuZCApCisgICAgeworICAgICAgRlRfVUludCAgaTsKKworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZhY2UtPmJsZW5kLT5udW1fYXhpczsgaSsrICkKKyAgICAgICAgaWYgKCAhZmFjZS0+YmxlbmQtPmRlc2lnbl9tYXBbaV0ubnVtX3BvaW50cyApCisgICAgICAgIHsKKyAgICAgICAgICBUMV9Eb25lX0JsZW5kKCBmYWNlICk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGZhY2UtPmJsZW5kICkKKyAgICB7CisgICAgICBpZiAoIGZhY2UtPmxlbl9idWlsZGNoYXIgPiAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworCisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBmYWNlLT5idWlsZGNoYXIsIGZhY2UtPmxlbl9idWlsZGNoYXIgKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJUMV9PcGVuX0ZhY2U6IGNhbm5vdCBhbGxvY2F0ZSBCdWlsZENoYXJBcnJheVxuIiApKTsKKyAgICAgICAgICBmYWNlLT5sZW5fYnVpbGRjaGFyID0gMDsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgZmFjZS0+bGVuX2J1aWxkY2hhciA9IDA7CisKKyNlbmRpZiAvKiAhVDFfQ09ORklHX09QVElPTl9OT19NTV9TVVBQT1JUICovCisKKyAgICAvKiBub3csIHByb3BhZ2F0ZSB0aGUgc3VicnMsIGNoYXJzdHJpbmdzLCBhbmQgZ2x5cGhuYW1lcyB0YWJsZXMgKi8KKyAgICAvKiB0byB0aGUgVHlwZTEgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB0eXBlMS0+bnVtX2dseXBocyA9IGxvYWRlci5udW1fZ2x5cGhzOworCisgICAgaWYgKCBsb2FkZXIuc3VicnMuaW5pdCApCisgICAgeworICAgICAgbG9hZGVyLnN1YnJzLmluaXQgID0gMDsKKyAgICAgIHR5cGUxLT5udW1fc3VicnMgICA9IGxvYWRlci5udW1fc3VicnM7CisgICAgICB0eXBlMS0+c3VicnNfYmxvY2sgPSBsb2FkZXIuc3VicnMuYmxvY2s7CisgICAgICB0eXBlMS0+c3VicnMgICAgICAgPSBsb2FkZXIuc3VicnMuZWxlbWVudHM7CisgICAgICB0eXBlMS0+c3VicnNfbGVuICAgPSBsb2FkZXIuc3VicnMubGVuZ3RoczsKKyAgICB9CisKKyAgICBpZiAoICFJU19JTkNSRU1FTlRBTCApCisgICAgICBpZiAoICFsb2FkZXIuY2hhcnN0cmluZ3MuaW5pdCApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggIlQxX09wZW5fRmFjZTogbm8gYC9DaGFyU3RyaW5ncycgYXJyYXkgaW4gZmFjZVxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgfQorCisgICAgbG9hZGVyLmNoYXJzdHJpbmdzLmluaXQgID0gMDsKKyAgICB0eXBlMS0+Y2hhcnN0cmluZ3NfYmxvY2sgPSBsb2FkZXIuY2hhcnN0cmluZ3MuYmxvY2s7CisgICAgdHlwZTEtPmNoYXJzdHJpbmdzICAgICAgID0gbG9hZGVyLmNoYXJzdHJpbmdzLmVsZW1lbnRzOworICAgIHR5cGUxLT5jaGFyc3RyaW5nc19sZW4gICA9IGxvYWRlci5jaGFyc3RyaW5ncy5sZW5ndGhzOworCisgICAgLyogd2UgY29weSB0aGUgZ2x5cGggbmFtZXMgYGJsb2NrJyBhbmQgYGVsZW1lbnRzJyBmaWVsZHM7ICovCisgICAgLyogdGhlIGBsZW5ndGhzJyBmaWVsZCBtdXN0IGJlIHJlbGVhc2VkIGxhdGVyICAgICAgICAgICAgICovCisgICAgdHlwZTEtPmdseXBoX25hbWVzX2Jsb2NrICAgID0gbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrOworICAgIHR5cGUxLT5nbHlwaF9uYW1lcyAgICAgICAgICA9IChGVF9TdHJpbmcqKilsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHM7CisgICAgbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrICAgID0gTlVMTDsKKyAgICBsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHMgPSBOVUxMOworCisgICAgLyogd2UgbXVzdCBub3cgYnVpbGQgdHlwZTEuZW5jb2Rpbmcgd2hlbiB3ZSBoYXZlIGEgY3VzdG9tIGFycmF5ICovCisgICAgaWYgKCB0eXBlMS0+ZW5jb2RpbmdfdHlwZSA9PSBUMV9FTkNPRElOR19UWVBFX0FSUkFZICkKKyAgICB7CisgICAgICBGVF9JbnQgICAgY2hhcmNvZGUsIGlkeCwgbWluX2NoYXIsIG1heF9jaGFyOworICAgICAgRlRfQnl0ZSogIGdseXBoX25hbWU7CisKKworICAgICAgLyogT0ssIHdlIGRvIHRoZSBmb2xsb3dpbmc6IGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIGVuY29kaW5nICAqLworICAgICAgLyogdGFibGUsIGxvb2sgdXAgdGhlIGluZGV4IG9mIHRoZSBnbHlwaCBoYXZpbmcgdGhlIHNhbWUgbmFtZSAqLworICAgICAgLyogdGhlIGluZGV4IGlzIHRoZW4gc3RvcmVkIGluIHR5cGUxLmVuY29kaW5nLmNoYXJfaW5kZXgsIGFuZCAqLworICAgICAgLyogdGhlIG5hbWUgdG8gdHlwZTEuZW5jb2RpbmcuY2hhcl9uYW1lICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICBtaW5fY2hhciA9IDA7CisgICAgICBtYXhfY2hhciA9IDA7CisKKyAgICAgIGNoYXJjb2RlID0gMDsKKyAgICAgIGZvciAoIDsgY2hhcmNvZGUgPCBsb2FkZXIuZW5jb2RpbmdfdGFibGUubWF4X2VsZW1zOyBjaGFyY29kZSsrICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIGNoYXJfbmFtZTsKKworCisgICAgICAgIHR5cGUxLT5lbmNvZGluZy5jaGFyX2luZGV4W2NoYXJjb2RlXSA9IDA7CisgICAgICAgIHR5cGUxLT5lbmNvZGluZy5jaGFyX25hbWUgW2NoYXJjb2RlXSA9IChjaGFyICopIi5ub3RkZWYiOworCisgICAgICAgIGNoYXJfbmFtZSA9IGxvYWRlci5lbmNvZGluZ190YWJsZS5lbGVtZW50c1tjaGFyY29kZV07CisgICAgICAgIGlmICggY2hhcl9uYW1lICkKKyAgICAgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPCB0eXBlMS0+bnVtX2dseXBoczsgaWR4KysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdseXBoX25hbWUgPSAoRlRfQnl0ZSopdHlwZTEtPmdseXBoX25hbWVzW2lkeF07CisgICAgICAgICAgICBpZiAoIGZ0X3N0cmNtcCggKGNvbnN0IGNoYXIqKWNoYXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopZ2x5cGhfbmFtZSApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0eXBlMS0+ZW5jb2RpbmcuY2hhcl9pbmRleFtjaGFyY29kZV0gPSAoRlRfVVNob3J0KWlkeDsKKyAgICAgICAgICAgICAgdHlwZTEtPmVuY29kaW5nLmNoYXJfbmFtZSBbY2hhcmNvZGVdID0gKGNoYXIqKWdseXBoX25hbWU7CisKKyAgICAgICAgICAgICAgLyogQ2hhbmdlIG1pbi9tYXggZW5jb2RlZCBjaGFyIG9ubHkgaWYgZ2x5cGggbmFtZSBpcyAqLworICAgICAgICAgICAgICAvKiBub3QgLy5ub3RkZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGlmICggZnRfc3RyY21wKCAoY29uc3QgY2hhciopIi5ub3RkZWYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKWdseXBoX25hbWUgKSAhPSAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggY2hhcmNvZGUgPCBtaW5fY2hhciApCisgICAgICAgICAgICAgICAgICBtaW5fY2hhciA9IGNoYXJjb2RlOworICAgICAgICAgICAgICAgIGlmICggY2hhcmNvZGUgPj0gbWF4X2NoYXIgKQorICAgICAgICAgICAgICAgICAgbWF4X2NoYXIgPSBjaGFyY29kZSArIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICB0eXBlMS0+ZW5jb2RpbmcuY29kZV9maXJzdCA9IG1pbl9jaGFyOworICAgICAgdHlwZTEtPmVuY29kaW5nLmNvZGVfbGFzdCAgPSBtYXhfY2hhcjsKKyAgICAgIHR5cGUxLT5lbmNvZGluZy5udW1fY2hhcnMgID0gbG9hZGVyLm51bV9jaGFyczsKKyAgICB9CisKKyAgRXhpdDoKKyAgICB0MV9kb25lX2xvYWRlciggJmxvYWRlciApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MWxvYWQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0MjJlNwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFsb2FkLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQxbG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUeXBlIDEgZm9udCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1QxTE9BRF9IX18KKyNkZWZpbmUgX19UMUxPQURfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisKKyNpbmNsdWRlICJ0MXBhcnNlLmgiCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICB0eXBlZGVmIHN0cnVjdCAgVDFfTG9hZGVyXworICB7CisgICAgVDFfUGFyc2VyUmVjICBwYXJzZXI7ICAgICAgICAgIC8qIHBhcnNlciB1c2VkIHRvIHJlYWQgdGhlIHN0cmVhbSAqLworCisgICAgRlRfSW50ICAgICAgICBudW1fY2hhcnM7ICAgICAgIC8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGVuY29kaW5nICovCisgICAgUFNfVGFibGVSZWMgICBlbmNvZGluZ190YWJsZTsgIC8qIFBTX1RhYmxlIHVzZWQgdG8gc3RvcmUgdGhlICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuY29kaW5nIGNoYXJhY3RlciBuYW1lcyAgICAgICAgICovCisKKyAgICBGVF9JbnQgICAgICAgIG51bV9nbHlwaHM7CisgICAgUFNfVGFibGVSZWMgICBnbHlwaF9uYW1lczsKKyAgICBQU19UYWJsZVJlYyAgIGNoYXJzdHJpbmdzOworICAgIFBTX1RhYmxlUmVjICAgc3dhcF90YWJsZTsgICAgICAvKiBGb3IgbW92aW5nIC5ub3RkZWYgZ2x5cGggdG8gaW5kZXggMC4gKi8KKworICAgIEZUX0ludCAgICAgICAgbnVtX3N1YnJzOworICAgIFBTX1RhYmxlUmVjICAgc3VicnM7CisgICAgRlRfQm9vbCAgICAgICBmb250ZGF0YTsKKworICAgIEZUX1VJbnQgICAgICAga2V5d29yZHNfZW5jb3VudGVyZWQ7IC8qIFQxX0xPQURFUl9FTkNPVU5URVJFRF9YWFggKi8KKworICB9IFQxX0xvYWRlclJlYywgKlQxX0xvYWRlcjsKKworCisgIC8qIHRyZWF0bWVudCBvZiBzb21lIGtleXdvcmRzIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKi8KKyAgLyogdGhleSBwcmVjZWRlIG9yIGZvbGxvdyBjZXJ0YWluIG90aGVyIGtleXdvcmRzICAgICAgICAgICAqLworCisjZGVmaW5lIFQxX1BSSVZBVEUgICAgICAgICAgICAgICAgKCAxIDw8IDAgKQorI2RlZmluZSBUMV9GT05URElSX0FGVEVSX1BSSVZBVEUgICggMSA8PCAxICkKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX09wZW5fRmFjZSggVDFfRmFjZSAgZmFjZSApOworCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVAorCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0dldF9NdWx0aV9NYXN0ZXIoIFQxX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX011bHRpX01hc3RlciogIG1hc3RlciApOworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9HZXRfTU1fVmFyKCBUMV9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKm1hc3RlciApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX1NldF9NTV9CbGVuZCggVDFfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX1NldF9NTV9EZXNpZ24oIFQxX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApOworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9TZXRfVmFyX0Rlc2lnbiggVDFfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIFQxX0RvbmVfQmxlbmQoIFQxX0ZhY2UgIGZhY2UgKTsKKworI2VuZGlmIC8qICFUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQgKi8KKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1QxTE9BRF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFvYmpzLmMgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3Qxb2Jqcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODk4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3Qxb2Jqcy5jCkBAIC0wLDAgKzEsNjE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MW9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIG9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKKworI2luY2x1ZGUgInQxZ2xvYWQuaCIKKyNpbmNsdWRlICJ0MWxvYWQuaCIKKworI2luY2x1ZGUgInQxZXJyb3JzLmgiCisKKyNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KKyNpbmNsdWRlICJ0MWFmbS5oIgorI2VuZGlmCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLworICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KKyAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MW9ianMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgbm90ZSB0aGF0IHdlIHN0b3JlIHRoZSBnbG9iYWwgaGludHMgaW4gdGhlIHNpemUncyAiaW50ZXJuYWwiIHJvb3QgICAgKi8KKyAgLyogIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIHN0YXRpYyBQU0hfR2xvYmFsc19GdW5jcworICBUMV9TaXplX0dldF9HbG9iYWxzX0Z1bmNzKCBUMV9TaXplICBzaXplICkKKyAgeworICAgIFQxX0ZhY2UgICAgICAgICAgIGZhY2UgICAgID0gKFQxX0ZhY2Upc2l6ZS0+cm9vdC5mYWNlOworICAgIFBTSGludGVyX1NlcnZpY2UgIHBzaGludGVyID0gKFBTSGludGVyX1NlcnZpY2UpZmFjZS0+cHNoaW50ZXI7CisgICAgRlRfTW9kdWxlICAgICAgICAgbW9kdWxlOworCisKKyAgICBtb2R1bGUgPSBGVF9HZXRfTW9kdWxlKCBzaXplLT5yb290LmZhY2UtPmRyaXZlci0+cm9vdC5saWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2hpbnRlciIgKTsKKyAgICByZXR1cm4gKCBtb2R1bGUgJiYgcHNoaW50ZXIgJiYgcHNoaW50ZXItPmdldF9nbG9iYWxzX2Z1bmNzICkKKyAgICAgICAgICAgPyBwc2hpbnRlci0+Z2V0X2dsb2JhbHNfZnVuY3MoIG1vZHVsZSApCisgICAgICAgICAgIDogMCA7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIFQxX1NpemVfRG9uZSggRlRfU2l6ZSAgdDFzaXplICkgICAgICAgICAgLyogVDFfU2l6ZSAqLworICB7CisgICAgVDFfU2l6ZSAgc2l6ZSA9IChUMV9TaXplKXQxc2l6ZTsKKworCisgICAgaWYgKCBzaXplLT5yb290LmludGVybmFsICkKKyAgICB7CisgICAgICBQU0hfR2xvYmFsc19GdW5jcyAgZnVuY3M7CisKKworICAgICAgZnVuY3MgPSBUMV9TaXplX0dldF9HbG9iYWxzX0Z1bmNzKCBzaXplICk7CisgICAgICBpZiAoIGZ1bmNzICkKKyAgICAgICAgZnVuY3MtPmRlc3Ryb3koIChQU0hfR2xvYmFscylzaXplLT5yb290LmludGVybmFsICk7CisKKyAgICAgIHNpemUtPnJvb3QuaW50ZXJuYWwgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX1NpemVfSW5pdCggRlRfU2l6ZSAgdDFzaXplICkgICAgICAvKiBUMV9TaXplICovCisgIHsKKyAgICBUMV9TaXplICAgICAgICAgICAgc2l6ZSAgPSAoVDFfU2l6ZSl0MXNpemU7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgIFBTSF9HbG9iYWxzX0Z1bmNzICBmdW5jcyA9IFQxX1NpemVfR2V0X0dsb2JhbHNfRnVuY3MoIHNpemUgKTsKKworCisgICAgaWYgKCBmdW5jcyApCisgICAgeworICAgICAgUFNIX0dsb2JhbHMgIGdsb2JhbHM7CisgICAgICBUMV9GYWNlICAgICAgZmFjZSA9IChUMV9GYWNlKXNpemUtPnJvb3QuZmFjZTsKKworCisgICAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIHNpemUtPnJvb3QuZmFjZS0+bWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LCAmZ2xvYmFscyApOworICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICBzaXplLT5yb290LmludGVybmFsID0gKEZUX1NpemVfSW50ZXJuYWwpKHZvaWQqKWdsb2JhbHM7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDFfU2l6ZV9SZXF1ZXN0KCBGVF9TaXplICAgICAgICAgIHQxc2l6ZSwgICAgIC8qIFQxX1NpemUgKi8KKyAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApCisgIHsKKyAgICBUMV9TaXplICAgICAgICAgICAgc2l6ZSAgPSAoVDFfU2l6ZSl0MXNpemU7CisgICAgUFNIX0dsb2JhbHNfRnVuY3MgIGZ1bmNzID0gVDFfU2l6ZV9HZXRfR2xvYmFsc19GdW5jcyggc2l6ZSApOworCisKKyAgICBGVF9SZXF1ZXN0X01ldHJpY3MoIHNpemUtPnJvb3QuZmFjZSwgcmVxICk7CisKKyAgICBpZiAoIGZ1bmNzICkKKyAgICAgIGZ1bmNzLT5zZXRfc2NhbGUoIChQU0hfR2xvYmFscylzaXplLT5yb290LmludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnhfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueV9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUMV9HbHlwaFNsb3RfRG9uZSggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgeworICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9IE5VTEw7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9HbHlwaFNsb3RfSW5pdCggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgeworICAgIFQxX0ZhY2UgICAgICAgICAgIGZhY2U7CisgICAgUFNIaW50ZXJfU2VydmljZSAgcHNoaW50ZXI7CisKKworICAgIGZhY2UgICAgID0gKFQxX0ZhY2Upc2xvdC0+ZmFjZTsKKyAgICBwc2hpbnRlciA9IChQU0hpbnRlcl9TZXJ2aWNlKWZhY2UtPnBzaGludGVyOworCisgICAgaWYgKCBwc2hpbnRlciApCisgICAgeworICAgICAgRlRfTW9kdWxlICBtb2R1bGU7CisKKworICAgICAgbW9kdWxlID0gRlRfR2V0X01vZHVsZSggc2xvdC0+ZmFjZS0+ZHJpdmVyLT5yb290LmxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHNoaW50ZXIiICk7CisgICAgICBpZiAoIG1vZHVsZSApCisgICAgICB7CisgICAgICAgIFQxX0hpbnRzX0Z1bmNzICBmdW5jczsKKworCisgICAgICAgIGZ1bmNzID0gcHNoaW50ZXItPmdldF90MV9mdW5jcyggbW9kdWxlICk7CisgICAgICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9ICh2b2lkKilmdW5jczsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUNFICBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfRmFjZV9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZhY2Ugb2JqZWN0IGRlc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGZhY2Ugb2JqZWN0IHRvIGRlc3Ryb3kuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBUMV9GYWNlX0RvbmUoIEZUX0ZhY2UgIHQxZmFjZSApICAgICAgICAgLyogVDFfRmFjZSAqLworICB7CisgICAgVDFfRmFjZSAgICBmYWNlID0gKFQxX0ZhY2UpdDFmYWNlOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworICAgIFQxX0ZvbnQgICAgdHlwZTE7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgdHlwZTEgID0gJmZhY2UtPnR5cGUxOworCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVAorICAgIC8qIHJlbGVhc2UgbXVsdGlwbGUgbWFzdGVycyBpbmZvcm1hdGlvbiAqLworICAgIEZUX0FTU0VSVCggKCBmYWNlLT5sZW5fYnVpbGRjaGFyID09IDAgKSA9PSAoIGZhY2UtPmJ1aWxkY2hhciA9PSBOVUxMICkgKTsKKworICAgIGlmICggZmFjZS0+YnVpbGRjaGFyICkKKyAgICB7CisgICAgICBGVF9GUkVFKCBmYWNlLT5idWlsZGNoYXIgKTsKKworICAgICAgZmFjZS0+YnVpbGRjaGFyICAgICA9IE5VTEw7CisgICAgICBmYWNlLT5sZW5fYnVpbGRjaGFyID0gMDsKKyAgICB9CisKKyAgICBUMV9Eb25lX0JsZW5kKCBmYWNlICk7CisgICAgZmFjZS0+YmxlbmQgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiByZWxlYXNlIGZvbnQgaW5mbyBzdHJpbmdzICovCisgICAgeworICAgICAgUFNfRm9udEluZm8gIGluZm8gPSAmdHlwZTEtPmZvbnRfaW5mbzsKKworCisgICAgICBGVF9GUkVFKCBpbmZvLT52ZXJzaW9uICk7CisgICAgICBGVF9GUkVFKCBpbmZvLT5ub3RpY2UgKTsKKyAgICAgIEZUX0ZSRUUoIGluZm8tPmZ1bGxfbmFtZSApOworICAgICAgRlRfRlJFRSggaW5mby0+ZmFtaWx5X25hbWUgKTsKKyAgICAgIEZUX0ZSRUUoIGluZm8tPndlaWdodCApOworICAgIH0KKworICAgIC8qIHJlbGVhc2UgdG9wIGRpY3Rpb25hcnkgKi8KKyAgICBGVF9GUkVFKCB0eXBlMS0+Y2hhcnN0cmluZ3NfbGVuICk7CisgICAgRlRfRlJFRSggdHlwZTEtPmNoYXJzdHJpbmdzICk7CisgICAgRlRfRlJFRSggdHlwZTEtPmdseXBoX25hbWVzICk7CisKKyAgICBGVF9GUkVFKCB0eXBlMS0+c3VicnMgKTsKKyAgICBGVF9GUkVFKCB0eXBlMS0+c3VicnNfbGVuICk7CisKKyAgICBGVF9GUkVFKCB0eXBlMS0+c3VicnNfYmxvY2sgKTsKKyAgICBGVF9GUkVFKCB0eXBlMS0+Y2hhcnN0cmluZ3NfYmxvY2sgKTsKKyAgICBGVF9GUkVFKCB0eXBlMS0+Z2x5cGhfbmFtZXNfYmxvY2sgKTsKKworICAgIEZUX0ZSRUUoIHR5cGUxLT5lbmNvZGluZy5jaGFyX2luZGV4ICk7CisgICAgRlRfRlJFRSggdHlwZTEtPmVuY29kaW5nLmNoYXJfbmFtZSApOworICAgIEZUX0ZSRUUoIHR5cGUxLT5mb250X25hbWUgKTsKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorICAgIC8qIHJlbGVhc2UgYWZtIGRhdGEgaWYgcHJlc2VudCAqLworICAgIGlmICggZmFjZS0+YWZtX2RhdGEgKQorICAgICAgVDFfRG9uZV9NZXRyaWNzKCBtZW1vcnksIChBRk1fRm9udEluZm8pZmFjZS0+YWZtX2RhdGEgKTsKKyNlbmRpZgorCisgICAgLyogcmVsZWFzZSB1bmljb2RlIG1hcCwgaWYgYW55ICovCisjaWYgMAorICAgIEZUX0ZSRUUoIGZhY2UtPnVuaWNvZGVfbWFwX3JlYy5tYXBzICk7CisgICAgZmFjZS0+dW5pY29kZV9tYXBfcmVjLm51bV9tYXBzID0gMDsKKyAgICBmYWNlLT51bmljb2RlX21hcCAgICAgICAgICAgICAgPSBOVUxMOworI2VuZGlmCisKKyAgICBmYWNlLT5yb290LmZhbWlseV9uYW1lID0gTlVMTDsKKyAgICBmYWNlLT5yb290LnN0eWxlX25hbWUgID0gTlVMTDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfRmFjZV9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZhY2Ugb2JqZWN0IGNvbnN0cnVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICA6OiAgaW5wdXQgc3RyZWFtIHdoZXJlIHRvIGxvYWQgZm9udCBkYXRhLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIHRoZSByZXNvdXJjZS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGFyYW1zICAgICA6OiBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgZmFjZSByZWNvcmQgdG8gYnVpbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDFfRmFjZV9Jbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgdDFmYWNlLCAgICAgICAgICAvKiBUMV9GYWNlICovCisgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApCisgIHsKKyAgICBUMV9GYWNlICAgICAgICAgICAgIGZhY2UgPSAoVDFfRmFjZSl0MWZhY2U7CisgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXM7CisgICAgUFNBdXhfU2VydmljZSAgICAgICBwc2F1eDsKKyAgICBUMV9Gb250ICAgICAgICAgICAgIHR5cGUxID0gJmZhY2UtPnR5cGUxOworICAgIFBTX0ZvbnRJbmZvICAgICAgICAgaW5mbyA9ICZ0eXBlMS0+Zm9udF9pbmZvOworCisgICAgRlRfVU5VU0VEKCBudW1fcGFyYW1zICk7CisgICAgRlRfVU5VU0VEKCBwYXJhbXMgKTsKKyAgICBGVF9VTlVTRUQoIHN0cmVhbSApOworCisKKyAgICBmYWNlLT5yb290Lm51bV9mYWNlcyA9IDE7CisKKyAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHBzbmFtZXMsIFBPU1RTQ1JJUFRfQ01BUFMgKTsKKyAgICBmYWNlLT5wc25hbWVzID0gcHNuYW1lczsKKworICAgIGZhY2UtPnBzYXV4ID0gRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2F1eCIgKTsKKyAgICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIGlmICggIXBzYXV4ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJUMV9GYWNlX0luaXQ6IGNhbm5vdCBhY2Nlc3MgYHBzYXV4JyBtb2R1bGVcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBNaXNzaW5nX01vZHVsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGZhY2UtPnBzaGludGVyID0gRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2hpbnRlciIgKTsKKworICAgIEZUX1RSQUNFMigoICJUeXBlIDEgZHJpdmVyXG4iICkpOworCisgICAgLyogb3BlbiB0aGUgdG9rZW5pemVyOyB0aGlzIHdpbGwgYWxzbyBjaGVjayB0aGUgZm9udCBmb3JtYXQgKi8KKyAgICBlcnJvciA9IFQxX09wZW5fRmFjZSggZmFjZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogaWYgd2UganVzdCB3YW50ZWQgdG8gY2hlY2sgdGhlIGZvcm1hdCwgbGVhdmUgc3VjY2Vzc2Z1bGx5IG5vdyAqLworICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY2hlY2sgdGhlIGZhY2UgaW5kZXggKi8KKyAgICBpZiAoIGZhY2VfaW5kZXggPiAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJUMV9GYWNlX0luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBub3cgbG9hZCB0aGUgZm9udCBwcm9ncmFtIGludG8gdGhlIGZhY2Ugb2JqZWN0ICovCisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBmYWNlIG9iamVjdCBmaWVsZHMgKi8KKworICAgIC8qIHNldCB1cCByb290IGZhY2UgZmllbGRzICovCisgICAgeworICAgICAgRlRfRmFjZSAgcm9vdCA9IChGVF9GYWNlKSZmYWNlLT5yb290OworCisKKyAgICAgIHJvb3QtPm51bV9nbHlwaHMgPSB0eXBlMS0+bnVtX2dseXBoczsKKyAgICAgIHJvb3QtPmZhY2VfaW5kZXggPSAwOworCisgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZBQ0VfRkxBR19ISU5URVI7CisKKyAgICAgIGlmICggaW5mby0+aXNfZml4ZWRfcGl0Y2ggKQorICAgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKKworICAgICAgaWYgKCBmYWNlLT5ibGVuZCApCisgICAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlM7CisKKyAgICAgIC8qIFhYWDogVE9ETyAtLSBhZGQga2VybmluZyB3aXRoIC5hZm0gc3VwcG9ydCAqLworCisKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSB0byBleHRyYWN0IHRoZSBmYW1pbHkgYW5kIHRoZSBzdHlsZSBpcyB2ZXJ5ICAgKi8KKyAgICAgIC8qIHNpbXBsaXN0aWMgYW5kIG1pZ2h0IGdldCBzb21lIHRoaW5ncyB3cm9uZy4gIEZvciBhIGZ1bGwtZmVhdHVyZWQgKi8KKyAgICAgIC8qIGFsZ29yaXRobSB5b3UgbWlnaHQgaGF2ZSBhIGxvb2sgYXQgdGhlIHdoaXRlcGFwZXIgZ2l2ZW4gYXQgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgaHR0cDovL2Jsb2dzLm1zZG4uY29tL3RleHQvYXJjaGl2ZS8yMDA3LzA0LzIzL3dwZi1mb250LXNlbGVjdGlvbi1tb2RlbC5hc3B4ICovCisKKyAgICAgIC8qIGdldCBzdHlsZSBuYW1lIC0tIGJlIGNhcmVmdWwsIHNvbWUgYnJva2VuIGZvbnRzIG9ubHkgKi8KKyAgICAgIC8qIGhhdmUgYSBgL0ZvbnROYW1lJyBkaWN0aW9uYXJ5IGVudHJ5ISAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHJvb3QtPmZhbWlseV9uYW1lID0gaW5mby0+ZmFtaWx5X25hbWU7CisgICAgICByb290LT5zdHlsZV9uYW1lICA9IE5VTEw7CisKKyAgICAgIGlmICggcm9vdC0+ZmFtaWx5X25hbWUgKQorICAgICAgeworICAgICAgICBjaGFyKiAgZnVsbCAgID0gaW5mby0+ZnVsbF9uYW1lOworICAgICAgICBjaGFyKiAgZmFtaWx5ID0gcm9vdC0+ZmFtaWx5X25hbWU7CisKKworICAgICAgICBpZiAoIGZ1bGwgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQm9vbCAgdGhlX3NhbWUgPSBUUlVFOworCisKKyAgICAgICAgICB3aGlsZSAoICpmdWxsICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICpmdWxsID09ICpmYW1pbHkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgICAgZnVsbCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoICpmdWxsID09ICcgJyB8fCAqZnVsbCA9PSAnLScgKQorICAgICAgICAgICAgICAgIGZ1bGwrKzsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoICpmYW1pbHkgPT0gJyAnIHx8ICpmYW1pbHkgPT0gJy0nICkKKyAgICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhlX3NhbWUgPSBGQUxTRTsKKworICAgICAgICAgICAgICAgIGlmICggISpmYW1pbHkgKQorICAgICAgICAgICAgICAgICAgcm9vdC0+c3R5bGVfbmFtZSA9IGZ1bGw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIHRoZV9zYW1lICkKKyAgICAgICAgICAgIHJvb3QtPnN0eWxlX25hbWUgPSAoY2hhciAqKSJSZWd1bGFyIjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBkbyB3ZSBoYXZlIGEgYC9Gb250TmFtZSc/ICovCisgICAgICAgIGlmICggdHlwZTEtPmZvbnRfbmFtZSApCisgICAgICAgICAgcm9vdC0+ZmFtaWx5X25hbWUgPSB0eXBlMS0+Zm9udF9uYW1lOworICAgICAgfQorCisgICAgICBpZiAoICFyb290LT5zdHlsZV9uYW1lICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBpbmZvLT53ZWlnaHQgKQorICAgICAgICAgIHJvb3QtPnN0eWxlX25hbWUgPSBpbmZvLT53ZWlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBhc3N1bWUgYFJlZ3VsYXInIHN0eWxlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBiZXR0ZXIgKi8KKyAgICAgICAgICByb290LT5zdHlsZV9uYW1lID0gKGNoYXIgKikiUmVndWxhciI7CisgICAgICB9CisKKyAgICAgIC8qIGNvbXB1dGUgc3R5bGUgZmxhZ3MgKi8KKyAgICAgIHJvb3QtPnN0eWxlX2ZsYWdzID0gMDsKKyAgICAgIGlmICggaW5mby0+aXRhbGljX2FuZ2xlICkKKyAgICAgICAgcm9vdC0+c3R5bGVfZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CisgICAgICBpZiAoIGluZm8tPndlaWdodCApCisgICAgICB7CisgICAgICAgIGlmICggIWZ0X3N0cmNtcCggaW5mby0+d2VpZ2h0LCAiQm9sZCIgICkgfHwKKyAgICAgICAgICAgICAhZnRfc3RyY21wKCBpbmZvLT53ZWlnaHQsICJCbGFjayIgKSApCisgICAgICAgICAgcm9vdC0+c3R5bGVfZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19CT0xEOworICAgICAgfQorCisgICAgICAvKiBubyBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAqLworICAgICAgcm9vdC0+bnVtX2ZpeGVkX3NpemVzID0gMDsKKyAgICAgIHJvb3QtPmF2YWlsYWJsZV9zaXplcyA9IE5VTEw7CisKKyAgICAgIHJvb3QtPmJib3gueE1pbiA9ICAgdHlwZTEtPmZvbnRfYmJveC54TWluICAgICAgICAgICAgPj4gMTY7CisgICAgICByb290LT5iYm94LnlNaW4gPSAgIHR5cGUxLT5mb250X2Jib3gueU1pbiAgICAgICAgICAgID4+IDE2OworICAgICAgLyogbm8gYFUnIHN1ZmZpeCBoZXJlIHRvIDB4RkZGRiEgKi8KKyAgICAgIHJvb3QtPmJib3gueE1heCA9ICggdHlwZTEtPmZvbnRfYmJveC54TWF4ICsgMHhGRkZGICkgPj4gMTY7CisgICAgICByb290LT5iYm94LnlNYXggPSAoIHR5cGUxLT5mb250X2Jib3gueU1heCArIDB4RkZGRiApID4+IDE2OworCisgICAgICAvKiBTZXQgdW5pdHNfcGVyX0VNIGlmIHdlIGRpZG4ndCBzZXQgaXQgaW4gdDFfcGFyc2VfZm9udF9tYXRyaXguICovCisgICAgICBpZiAoICFyb290LT51bml0c19wZXJfRU0gKQorICAgICAgICByb290LT51bml0c19wZXJfRU0gPSAxMDAwOworCisgICAgICByb290LT5hc2NlbmRlciAgPSAoRlRfU2hvcnQpKCByb290LT5iYm94LnlNYXggKTsKKyAgICAgIHJvb3QtPmRlc2NlbmRlciA9IChGVF9TaG9ydCkoIHJvb3QtPmJib3gueU1pbiApOworCisgICAgICByb290LT5oZWlnaHQgPSAoRlRfU2hvcnQpKCAoIHJvb3QtPnVuaXRzX3Blcl9FTSAqIDEyICkgLyAxMCApOworICAgICAgaWYgKCByb290LT5oZWlnaHQgPCByb290LT5hc2NlbmRlciAtIHJvb3QtPmRlc2NlbmRlciApCisgICAgICAgIHJvb3QtPmhlaWdodCA9IChGVF9TaG9ydCkoIHJvb3QtPmFzY2VuZGVyIC0gcm9vdC0+ZGVzY2VuZGVyICk7CisKKyAgICAgIC8qIG5vdyBjb21wdXRlIHRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggKi8KKyAgICAgIHJvb3QtPm1heF9hZHZhbmNlX3dpZHRoID0KKyAgICAgICAgKEZUX1Nob3J0KSggcm9vdC0+YmJveC54TWF4ICk7CisgICAgICB7CisgICAgICAgIEZUX1BvcyAgbWF4X2FkdmFuY2U7CisKKworICAgICAgICBlcnJvciA9IFQxX0NvbXB1dGVfTWF4X0FkdmFuY2UoIGZhY2UsICZtYXhfYWR2YW5jZSApOworCisgICAgICAgIC8qIGluIGNhc2Ugb2YgZXJyb3IsIGtlZXAgdGhlIHN0YW5kYXJkIHdpZHRoICovCisgICAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgICByb290LT5tYXhfYWR2YW5jZV93aWR0aCA9IChGVF9TaG9ydClGSVhFRF9UT19JTlQoIG1heF9hZHZhbmNlICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsgICAvKiBjbGVhciBlcnJvciAqLworICAgICAgfQorCisgICAgICByb290LT5tYXhfYWR2YW5jZV9oZWlnaHQgPSByb290LT5oZWlnaHQ7CisKKyAgICAgIHJvb3QtPnVuZGVybGluZV9wb3NpdGlvbiAgPSAoRlRfU2hvcnQpaW5mby0+dW5kZXJsaW5lX3Bvc2l0aW9uOworICAgICAgcm9vdC0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IChGVF9TaG9ydClpbmZvLT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgIH0KKworICAgIHsKKyAgICAgIEZUX0ZhY2UgIHJvb3QgPSAmZmFjZS0+cm9vdDsKKworCisgICAgICBpZiAoIHBzbmFtZXMgKQorICAgICAgeworICAgICAgICBGVF9DaGFyTWFwUmVjICAgIGNoYXJtYXA7CisgICAgICAgIFQxX0NNYXBfQ2xhc3NlcyAgY21hcF9jbGFzc2VzID0gcHNhdXgtPnQxX2NtYXBfY2xhc3NlczsKKyAgICAgICAgRlRfQ01hcF9DbGFzcyAgICBjbGF6ejsKKworCisgICAgICAgIGNoYXJtYXAuZmFjZSA9IHJvb3Q7CisKKyAgICAgICAgLyogZmlyc3Qgb2YgYWxsLCB0cnkgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCAqLworICAgICAgICBjaGFybWFwLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fTUlDUk9TT0ZUOworICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfTVNfSURfVU5JQ09ERV9DUzsKKyAgICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX1VOSUNPREU7CisKKyAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggY21hcF9jbGFzc2VzLT51bmljb2RlLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOworICAgICAgICBpZiAoIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIEZUX0VSUl9ORVEoIGVycm9yLCBOb19Vbmljb2RlX0dseXBoX05hbWUgKSApCisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgICAgICAvKiBub3csIGdlbmVyYXRlIGFuIEFkb2JlIFN0YW5kYXJkIGVuY29kaW5nIHdoZW4gYXBwcm9wcmlhdGUgKi8KKyAgICAgICAgY2hhcm1hcC5wbGF0Zm9ybV9pZCA9IFRUX1BMQVRGT1JNX0FET0JFOworICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gTlVMTDsKKworICAgICAgICBzd2l0Y2ggKCB0eXBlMS0+ZW5jb2RpbmdfdHlwZSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUMV9FTkNPRElOR19UWVBFX1NUQU5EQVJEOgorICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRDsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfQURPQkVfSURfU1RBTkRBUkQ7CisgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9IGNtYXBfY2xhc3Nlcy0+c3RhbmRhcmQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUMV9FTkNPRElOR19UWVBFX0VYUEVSVDoKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUOworICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9FWFBFUlQ7CisgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9IGNtYXBfY2xhc3Nlcy0+ZXhwZXJ0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVDFfRU5DT0RJTkdfVFlQRV9BUlJBWToKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NOworICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9DVVNUT007CisgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9IGNtYXBfY2xhc3Nlcy0+Y3VzdG9tOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjE6CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzE7CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX0FET0JFX0lEX0xBVElOXzE7CisgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9IGNtYXBfY2xhc3Nlcy0+dW5pY29kZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY2xhenogKQorICAgICAgICAgIGVycm9yID0gRlRfQ01hcF9OZXcoIGNsYXp6LCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOworCisjaWYgMAorICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCisgICAgICAgIGlmIChyb290LT5udW1fY2hhcm1hcHMpCisgICAgICAgICAgcm9vdC0+Y2hhcm1hcCA9IHJvb3QtPmNoYXJtYXBzWzBdOworI2VuZGlmCisgICAgICB9CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9Ecml2ZXJfSW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIFR5cGUgMSBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkcml2ZXIgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9Ecml2ZXJfSW5pdCggRlRfTW9kdWxlICBkcml2ZXIgKQorICB7CisgICAgRlRfVU5VU0VEKCBkcml2ZXIgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0RyaXZlcl9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIFR5cGUgMSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRyaXZlciA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IFR5cGUgMSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVDFfRHJpdmVyX0RvbmUoIEZUX01vZHVsZSAgZHJpdmVyICkKKyAgeworICAgIEZUX1VOVVNFRCggZHJpdmVyICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFvYmpzLmggYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3Qxb2Jqcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGYzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3Qxb2Jqcy5oCkBAIC0wLDAgKzEsMTYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MW9ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UMU9CSlNfSF9fCisjZGVmaW5lIF9fVDFPQkpTX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBtdXN0IGJlIGRlZmluZWQgYnkgdGhlIGhpbnRlciAqLworICB0eXBlZGVmIHN0cnVjdCBUMV9TaXplX0hpbnRzXyAgIFQxX1NpemVfSGludHM7CisgIHR5cGVkZWYgc3RydWN0IFQxX0dseXBoX0hpbnRzXyAgVDFfR2x5cGhfSGludHM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUMV9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IFQxX1NpemVSZWNfKiAgVDFfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgVDFfR2x5cGhTbG90UmVjXyogIFQxX0dseXBoU2xvdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFQxX0NoYXJNYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGNoYXJhY3RlciBtYXBwaW5nIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBUeXBlIDEgZm9ybWF0IGRvZXNuJ3QgdXNlIGEgY2hhcm1hcCBidXQgYW4gZW5jb2RpbmcgdGFibGUuICAgICAqLworICAvKiAgICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdXAgY2hhcm1hcCBvYmplY3RzICAgICAgICAgICAgKi8KKyAgLyogICAgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBUMV9DaGFyTWFwUmVjXyogICBUMV9DaGFyTWFwOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIEhFUkUgQkVHSU5TIFRIRSBUWVBFMSBTUEVDSUZJQyBTVFVGRiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfU2l6ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHlwZSAxIHNpemUgcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVDFfU2l6ZVJlY18KKyAgeworICAgIEZUX1NpemVSZWMgIHJvb3Q7CisKKyAgfSBUMV9TaXplUmVjOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUMV9TaXplX0RvbmUoIEZUX1NpemUgIHNpemUgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9TaXplX1JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX1NpemVfSW5pdCggRlRfU2l6ZSAgc2l6ZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfR2x5cGhTbG90UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHlwZSAxIGdseXBoIHNsb3QgcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgVDFfR2x5cGhTbG90UmVjXworICB7CisgICAgRlRfR2x5cGhTbG90UmVjICByb290OworCisgICAgRlRfQm9vbCAgICAgICAgICBoaW50OworICAgIEZUX0Jvb2wgICAgICAgICAgc2NhbGVkOworCisgICAgRlRfSW50ICAgICAgICAgICBtYXhfcG9pbnRzOworICAgIEZUX0ludCAgICAgICAgICAgbWF4X2NvbnRvdXJzOworCisgICAgRlRfRml4ZWQgICAgICAgICB4X3NjYWxlOworICAgIEZUX0ZpeGVkICAgICAgICAgeV9zY2FsZTsKKworICB9IFQxX0dseXBoU2xvdFJlYzsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0ZhY2VfSW5pdCggRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVDFfRmFjZV9Eb25lKCBGVF9GYWNlICBmYWNlICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgVDFfR2x5cGhTbG90X0luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVDFfR2x5cGhTbG90X0RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0RyaXZlcl9Jbml0KCBGVF9Nb2R1bGUgIGRyaXZlciApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVDFfRHJpdmVyX0RvbmUoIEZUX01vZHVsZSAgZHJpdmVyICk7CisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19UMU9CSlNfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxcGFyc2UuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2IyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxcGFyc2UuYwpAQCAtMCwwICsxLDUxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDFwYXJzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgMSBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIFR5cGUgMSBwYXJzZXIgaXMgaW4gY2hhcmdlIG9mIHRoZSBmb2xsb3dpbmc6ICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgZ3Jvd2luZyBzZXF1ZW5jZSBvZiBvYmplY3RzIGNhbGxlZCAgKi8KKyAgLyogICAgYSBgVDFfVGFibGUnICh1c2VkIHRvIGJ1aWxkIHZhcmlvdXMgdGFibGVzIG5lZWRlZCBieSB0aGUgbG9hZGVyKS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSBvcGVuaW5nIC5wZmIgYW5kIC5wZmEgZmlsZXMgdG8gZXh0cmFjdCB0aGVpciB0b3AtbGV2ZWwgYW5kIHByaXZhdGUgKi8KKyAgLyogICAgZGljdGlvbmFyaWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgLSByZWFkIG51bWJlcnMsIGFycmF5cyAmIHN0cmluZ3MgZnJvbSBhbnkgZGljdGlvbmFyeS4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNlZSBgdDFsb2FkLmMnIHRvIHNlZSBob3cgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgZm9udCBmaWxlLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCisjaW5jbHVkZSAidDFwYXJzZS5oIgorCisjaW5jbHVkZSAidDFlcnJvcnMuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3QxcGFyc2UKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgSU5QVVQgU1RSRUFNIFBBUlNFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiBzZWUgQWRvYmUgVGVjaG5pY2FsIE5vdGUgNTA0MC5Eb3dubG9hZF9Gb250cy5wZGYgKi8KKworICBzdGF0aWMgRlRfRXJyb3IKKyAgcmVhZF9wZmJfdGFnKCBGVF9TdHJlYW0gICBzdHJlYW0sCisgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAqYXRhZywKKyAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICphc2l6ZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1VTaG9ydCAgdGFnOworICAgIEZUX1VMb25nICAgc2l6ZTsKKworCisgICAgKmF0YWcgID0gMDsKKyAgICAqYXNpemUgPSAwOworCisgICAgaWYgKCAhRlRfUkVBRF9VU0hPUlQoIHRhZyApICkKKyAgICB7CisgICAgICBpZiAoIHRhZyA9PSAweDgwMDFVIHx8IHRhZyA9PSAweDgwMDJVICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhRlRfUkVBRF9VTE9OR19MRSggc2l6ZSApICkKKyAgICAgICAgICAqYXNpemUgPSBzaXplOworICAgICAgfQorCisgICAgICAqYXRhZyA9IHRhZzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjaGVja190eXBlMV9mb3JtYXQoIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIGhlYWRlcl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgIGhlYWRlcl9sZW5ndGggKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9VU2hvcnQgIHRhZzsKKyAgICBGVF9VTG9uZyAgIGR1bW15OworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCAwICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSByZWFkX3BmYl90YWcoIHN0cmVhbSwgJnRhZywgJmR1bW15ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICAvKiBXZSBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgc2VnbWVudCBpbiBhIFBGQiBpcyBhbHdheXMgZW5jb2RlZCBhcyAgICovCisgICAgLyogdGV4dC4gIFRoaXMgbWlnaHQgYmUgd3JvbmcgKGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGluc2lzdCAqLworICAgIC8qIG9uIHRoYXQpLCBidXQgd2UgaGF2ZSBuZXZlciBzZWVuIGEgY291bnRlcmV4YW1wbGUuICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHRhZyAhPSAweDgwMDFVICYmIEZUX1NUUkVBTV9TRUVLKCAwICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCAhRlRfRlJBTUVfRU5URVIoIGhlYWRlcl9sZW5ndGggKSApCisgICAgeworICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICAgIGlmICggZnRfbWVtY21wKCBzdHJlYW0tPmN1cnNvciwgaGVhZGVyX3N0cmluZywgaGVhZGVyX2xlbmd0aCApICE9IDAgKQorICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAgIEZUX0ZSQU1FX0VYSVQoKTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUMV9OZXdfUGFyc2VyKCBUMV9QYXJzZXIgICAgICBwYXJzZXIsCisgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1VTaG9ydCAgdGFnOworICAgIEZUX1VMb25nICAgc2l6ZTsKKworCisgICAgcHNhdXgtPnBzX3BhcnNlcl9mdW5jcy0+aW5pdCggJnBhcnNlci0+cm9vdCwgTlVMTCwgTlVMTCwgbWVtb3J5ICk7CisKKyAgICBwYXJzZXItPnN0cmVhbSAgICAgICA9IHN0cmVhbTsKKyAgICBwYXJzZXItPmJhc2VfbGVuICAgICA9IDA7CisgICAgcGFyc2VyLT5iYXNlX2RpY3QgICAgPSBOVUxMOworICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4gID0gMDsKKyAgICBwYXJzZXItPnByaXZhdGVfZGljdCA9IE5VTEw7CisgICAgcGFyc2VyLT5pbl9wZmIgICAgICAgPSAwOworICAgIHBhcnNlci0+aW5fbWVtb3J5ICAgID0gMDsKKyAgICBwYXJzZXItPnNpbmdsZV9ibG9jayA9IDA7CisKKyAgICAvKiBjaGVjayB0aGUgaGVhZGVyIGZvcm1hdCAqLworICAgIGVycm9yID0gY2hlY2tfdHlwZTFfZm9ybWF0KCBzdHJlYW0sICIlIVBTLUFkb2JlRm9udCIsIDE0ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgeworICAgICAgaWYgKCBGVF9FUlJfTkVRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBlcnJvciA9IGNoZWNrX3R5cGUxX2Zvcm1hdCggc3RyZWFtLCAiJSFGb250VHlwZSIsIDEwICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgVHlwZSAxIGZvbnRcbiIgKSk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogSGVyZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCBpcyBnb2luZyBvbjogICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgV2hlbiBjcmVhdGluZyBhIG5ldyBUeXBlIDEgcGFyc2VyLCB3ZSB0cnkgdG8gbG9jYXRlIGFuZCBsb2FkICovCisgICAgLyogICB0aGUgYmFzZSBkaWN0aW9uYXJ5IGlmIHRoaXMgaXMgcG9zc2libGUgKGkuZS4sIGZvciBQRkIgICAgICAgKi8KKyAgICAvKiAgIGZpbGVzKS4gIE90aGVyd2lzZSwgd2UgbG9hZCB0aGUgd2hvbGUgZm9udCBpbnRvIG1lbW9yeS4gICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBXaGVuIGBsb2FkaW5nJyB0aGUgYmFzZSBkaWN0aW9uYXJ5LCB3ZSBvbmx5IHNldHVwIHBvaW50ZXJzICAgKi8KKyAgICAvKiAgIGluIHRoZSBjYXNlIG9mIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS4gIE90aGVyd2lzZSwgd2UgICAgICAgICAqLworICAgIC8qICAgYWxsb2NhdGUgYW5kIGxvYWQgdGhlIGJhc2UgZGljdGlvbmFyeSBpbiBpdC4gICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIHBhcnNlci0+aW5fcGZiIGlzIHNldCBpZiB3ZSBhcmUgaW4gYSBiaW5hcnkgKGAucGZiJykgZm9udC4gICAqLworICAgIC8qICAgcGFyc2VyLT5pbl9tZW1vcnkgaXMgc2V0IGlmIHdlIGhhdmUgYSBtZW1vcnkgc3RyZWFtLiAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIHRyeSB0byBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBiYXNlIGRpY3Rpb25hcnk7ICAgICAqLworICAgIC8qIGxvb2sgZm9yIGEgUG9zdHNjcmlwdCBiaW5hcnkgZmlsZSB0YWcsIGkuZS4sIDB4ODAwMSAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDBMICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgZXJyb3IgPSByZWFkX3BmYl90YWcoIHN0cmVhbSwgJnRhZywgJnNpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggdGFnICE9IDB4ODAwMVUgKQorICAgIHsKKyAgICAgIC8qIGFzc3VtZSB0aGF0IHRoaXMgaXMgYSBQRkEgZmlsZSBmb3Igbm93OyBhbiBlcnJvciB3aWxsICovCisgICAgICAvKiBiZSBwcm9kdWNlZCBsYXRlciB3aGVuIG1vcmUgdGhpbmdzIGFyZSBjaGVja2VkICAgICAgICAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggMEwgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIHNpemUgPSBzdHJlYW0tPnNpemU7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHBhcnNlci0+aW5fcGZiID0gMTsKKworICAgIC8qIG5vdywgdHJ5IHRvIGxvYWQgYHNpemUnIGJ5dGVzIG9mIHRoZSBgYmFzZScgZGljdGlvbmFyeSB3ZSAqLworICAgIC8qIGZvdW5kIHByZXZpb3VzbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogaWYgaXQgaXMgYSBtZW1vcnktYmFzZWQgcmVzb3VyY2UsIHNldCB1cCBwb2ludGVycyAqLworICAgIGlmICggIXN0cmVhbS0+cmVhZCApCisgICAgeworICAgICAgcGFyc2VyLT5iYXNlX2RpY3QgPSAoRlRfQnl0ZSopc3RyZWFtLT5iYXNlICsgc3RyZWFtLT5wb3M7CisgICAgICBwYXJzZXItPmJhc2VfbGVuICA9IHNpemU7CisgICAgICBwYXJzZXItPmluX21lbW9yeSA9IDE7CisKKyAgICAgIC8qIGNoZWNrIHRoYXQgdGhlIGBzaXplJyBmaWVsZCBpcyB2YWxpZCAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggc2l6ZSApICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogcmVhZCBzZWdtZW50IGluIG1lbW9yeSAtLSB0aGlzIGlzIGNsdW1zeSwgYnV0IHNvIGRvZXMgdGhlIGZvcm1hdCAqLworICAgICAgaWYgKCBGVF9BTExPQyggcGFyc2VyLT5iYXNlX2RpY3QsIHNpemUgKSAgICAgICB8fAorICAgICAgICAgICBGVF9TVFJFQU1fUkVBRCggcGFyc2VyLT5iYXNlX2RpY3QsIHNpemUgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIHBhcnNlci0+YmFzZV9sZW4gPSBzaXplOworICAgIH0KKworICAgIHBhcnNlci0+cm9vdC5iYXNlICAgPSBwYXJzZXItPmJhc2VfZGljdDsKKyAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gcGFyc2VyLT5iYXNlX2RpY3Q7CisgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IHBhcnNlci0+cm9vdC5jdXJzb3IgKyBwYXJzZXItPmJhc2VfbGVuOworCisgIEV4aXQ6CisgICAgaWYgKCBlcnJvciAmJiAhcGFyc2VyLT5pbl9tZW1vcnkgKQorICAgICAgRlRfRlJFRSggcGFyc2VyLT5iYXNlX2RpY3QgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVDFfRmluYWxpemVfUGFyc2VyKCBUMV9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisKKworICAgIC8qIGFsd2F5cyBmcmVlIHRoZSBwcml2YXRlIGRpY3Rpb25hcnkgKi8KKyAgICBGVF9GUkVFKCBwYXJzZXItPnByaXZhdGVfZGljdCApOworCisgICAgLyogZnJlZSB0aGUgYmFzZSBkaWN0aW9uYXJ5IG9ubHkgd2hlbiB3ZSBoYXZlIGEgZGlzayBzdHJlYW0gKi8KKyAgICBpZiAoICFwYXJzZXItPmluX21lbW9yeSApCisgICAgICBGVF9GUkVFKCBwYXJzZXItPmJhc2VfZGljdCApOworCisgICAgcGFyc2VyLT5yb290LmZ1bmNzLmRvbmUoICZwYXJzZXItPnJvb3QgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQxX0dldF9Qcml2YXRlX0RpY3QoIFQxX1BhcnNlciAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgUFNBdXhfU2VydmljZSAgcHNhdXggKQorICB7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBwYXJzZXItPnN0cmVhbTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfVUxvbmcgICBzaXplOworCisKKyAgICBpZiAoIHBhcnNlci0+aW5fcGZiICkKKyAgICB7CisgICAgICAvKiBpbiB0aGUgY2FzZSBvZiB0aGUgUEZCIGZvcm1hdCwgdGhlIHByaXZhdGUgZGljdGlvbmFyeSBjYW4gYmUgICovCisgICAgICAvKiBtYWRlIG9mIHNldmVyYWwgc2VnbWVudHMuICBXZSB0aHVzIGZpcnN0IHJlYWQgdGhlIG51bWJlciBvZiAgICovCisgICAgICAvKiBzZWdtZW50cyB0byBjb21wdXRlIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBwcml2YXRlIGRpY3Rpb25hcnkgICovCisgICAgICAvKiB0aGVuIHJlLXJlYWQgdGhlbSBpbnRvIG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBGVF9VTG9uZyAgIHN0YXJ0X3BvcyA9IEZUX1NUUkVBTV9QT1MoKTsKKyAgICAgIEZUX1VTaG9ydCAgdGFnOworCisKKyAgICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4gPSAwOworICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSByZWFkX3BmYl90YWcoIHN0cmVhbSwgJnRhZywgJnNpemUgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGlmICggdGFnICE9IDB4ODAwMlUgKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4gKz0gc2l6ZTsKKworICAgICAgICBpZiAoIEZUX1NUUkVBTV9TS0lQKCBzaXplICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5IHRoZXJlICovCisgICAgICAvKiBhbmQgYWxsb2NhdGUgcHJpdmF0ZSBkaWN0aW9uYXJ5IGJ1ZmZlciAgICAgICAgKi8KKyAgICAgIGlmICggcGFyc2VyLT5wcml2YXRlX2xlbiA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiVDFfR2V0X1ByaXZhdGVfRGljdDoiCisgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHByaXZhdGUgZGljdGlvbmFyeSBzZWN0aW9uXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc3RhcnRfcG9zICkgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBGVF9BTExPQyggcGFyc2VyLT5wcml2YXRlX2RpY3QsIHBhcnNlci0+cHJpdmF0ZV9sZW4gKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgcGFyc2VyLT5wcml2YXRlX2xlbiA9IDA7CisgICAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgICBlcnJvciA9IHJlYWRfcGZiX3RhZyggc3RyZWFtLCAmdGFnLCAmc2l6ZSApOworICAgICAgICBpZiAoIGVycm9yIHx8IHRhZyAhPSAweDgwMDJVICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRCggcGFyc2VyLT5wcml2YXRlX2RpY3QgKyBwYXJzZXItPnByaXZhdGVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICkgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICBwYXJzZXItPnByaXZhdGVfbGVuICs9IHNpemU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBXZSBoYXZlIGFscmVhZHkgYGxvYWRlZCcgdGhlIHdob2xlIFBGQSBmb250IGZpbGUgaW50byBtZW1vcnk7ICovCisgICAgICAvKiBpZiB0aGlzIGlzIGEgbWVtb3J5IHJlc291cmNlLCBhbGxvY2F0ZSBhIG5ldyBibG9jayB0byBob2xkICAgICovCisgICAgICAvKiB0aGUgcHJpdmF0ZSBkaWN0LiAgT3RoZXJ3aXNlLCBzaW1wbHkgb3ZlcndyaXRlIGludG8gdGhlIGJhc2UgICovCisgICAgICAvKiBkaWN0aW9uYXJ5IGJsb2NrIGluIHRoZSBoZWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIC8qIGZpcnN0IG9mIGFsbCwgbG9vayBhdCB0aGUgYGVleGVjJyBrZXl3b3JkICovCisgICAgICBGVF9CeXRlKiAgICBjdXIgICA9IHBhcnNlci0+YmFzZV9kaWN0OworICAgICAgRlRfQnl0ZSogICAgbGltaXQgPSBjdXIgKyBwYXJzZXItPmJhc2VfbGVuOworICAgICAgRlRfQnl0ZSAgICAgYzsKKyAgICAgIEZUX1BvaW50ZXIgIHBvc19sZjsKKyAgICAgIEZUX0Jvb2wgICAgIHRlc3RfY3I7CisKKworICAgIEFnYWluOgorICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgYyA9IGN1clswXTsKKyAgICAgICAgaWYgKCBjID09ICdlJyAmJiBjdXIgKyA5IDwgbGltaXQgKSAgLyogOSA9IDUgbGV0dGVycyBmb3IgYGVleGVjJyArICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaXRlc3BhY2UgKyA0IGNoYXJzICAgICAgICAqLworICAgICAgICB7CisgICAgICAgICAgaWYgKCBjdXJbMV0gPT0gJ2UnICYmCisgICAgICAgICAgICAgICBjdXJbMl0gPT0gJ3gnICYmCisgICAgICAgICAgICAgICBjdXJbM10gPT0gJ2UnICYmCisgICAgICAgICAgICAgICBjdXJbNF0gPT0gJ2MnICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGN1cisrOworICAgICAgICBpZiAoIGN1ciA+PSBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJUMV9HZXRfUHJpdmF0ZV9EaWN0OiIKKyAgICAgICAgICAgICAgICAgICAgICIgY291bGQgbm90IGZpbmQgYGVleGVjJyBrZXl3b3JkXG4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogY2hlY2sgd2hldGhlciBgZWV4ZWMnIHdhcyByZWFsIC0tIGl0IGNvdWxkIGJlIGluIGEgY29tbWVudCAqLworICAgICAgLyogb3Igc3RyaW5nIChhcyBlLmcuIGluIHUwMDMwNDN0LmdzZiBmcm9tIGdob3N0c2NyaXB0KSAgICAgICAqLworCisgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gcGFyc2VyLT5iYXNlX2RpY3Q7CisgICAgICAvKiBzZXQgbGltaXQgdG8gYGVleGVjJyArIHdoaXRlc3BhY2UgKyA0IGNoYXJhY3RlcnMgKi8KKyAgICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSBjdXIgKyAxMDsKKworICAgICAgY3VyICAgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgICAgbGltaXQgPSBwYXJzZXItPnJvb3QubGltaXQ7CisKKyAgICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQorICAgICAgeworICAgICAgICBpZiAoICpjdXIgPT0gJ2UnICYmIGZ0X3N0cm5jbXAoIChjaGFyKiljdXIsICJlZXhlYyIsIDUgKSA9PSAwICkKKyAgICAgICAgICBnb3RvIEZvdW5kOworCisgICAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOworICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIFQxX1NraXBfU3BhY2VzICAoIHBhcnNlciApOworICAgICAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgICAgfQorCisgICAgICAvKiB3ZSBoYXZlbid0IGZvdW5kIHRoZSBjb3JyZWN0IGBlZXhlYyc7IGdvIGJhY2sgYW5kIGNvbnRpbnVlICovCisgICAgICAvKiBzZWFyY2hpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGN1ciAgID0gbGltaXQ7CisgICAgICBsaW1pdCA9IHBhcnNlci0+YmFzZV9kaWN0ICsgcGFyc2VyLT5iYXNlX2xlbjsKKyAgICAgIGdvdG8gQWdhaW47CisKKyAgICAgIC8qIG5vdyBkZXRlcm1pbmUgd2hlcmUgdG8gd3JpdGUgdGhlIF9lbmNyeXB0ZWRfIGJpbmFyeSBwcml2YXRlICAqLworICAgICAgLyogZGljdGlvbmFyeS4gIFdlIG92ZXJ3cml0ZSB0aGUgYmFzZSBkaWN0aW9uYXJ5IGZvciBkaXNrLWJhc2VkICovCisgICAgICAvKiByZXNvdXJjZXMgYW5kIGFsbG9jYXRlIGEgbmV3IGJsb2NrIG90aGVyd2lzZSAgICAgICAgICAgICAgICAgKi8KKworICAgIEZvdW5kOgorICAgICAgcGFyc2VyLT5yb290LmxpbWl0ID0gcGFyc2VyLT5iYXNlX2RpY3QgKyBwYXJzZXItPmJhc2VfbGVuOworCisgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgIGN1ciAgID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICAgIGxpbWl0ID0gcGFyc2VyLT5yb290LmxpbWl0OworCisgICAgICAvKiBBY2NvcmRpbmcgdG8gdGhlIFR5cGUgMSBzcGVjLCB0aGUgZmlyc3QgY2lwaGVyIGJ5dGUgbXVzdCBub3QgYmUgKi8KKyAgICAgIC8qIGFuIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGNvZGUgKGJsYW5rLCB0YWIsIGNhcnJpYWdlIHJldHVybiAqLworICAgICAgLyogb3IgbGluZSBmZWVkKS4gIFdlIGhhdmUgc2VlbiBUeXBlIDEgZm9udHMgd2l0aCB0d28gbGluZSBmZWVkICAgICovCisgICAgICAvKiBjaGFyYWN0ZXJzLi4uICBTbyBza2lwIG5vdyBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgY29kZXMuICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogT24gdGhlIG90aGVyIGhhbmQsIEFkb2JlJ3MgVHlwZSAxIHBhcnNlciBoYW5kbGVzIGZvbnRzIGp1c3QgICAgICovCisgICAgICAvKiBmaW5lIHRoYXQgYXJlIHZpb2xhdGluZyB0aGlzIGxpbWl0YXRpb24sIHNvIHdlIGFkZCBhIGhldXJpc3RpYyAgKi8KKyAgICAgIC8qIHRlc3QgdG8gc3RvcCBhdCBcciBvbmx5IGlmIGl0IGlzIG5vdCB1c2VkIGZvciBFT0wuICAgICAgICAgICAgICAqLworCisgICAgICBwb3NfbGYgID0gZnRfbWVtY2hyKCBjdXIsICdcbicsIChzaXplX3QpKCBsaW1pdCAtIGN1ciApICk7CisgICAgICB0ZXN0X2NyID0gRlRfQk9PTCggIXBvc19sZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgcG9zX2xmID4gZnRfbWVtY2hyKCBjdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoIGxpbWl0IC0gY3VyICkgKSApOworCisgICAgICB3aGlsZSAoIGN1ciA8IGxpbWl0ICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAoICpjdXIgPT0gJyAnICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgKmN1ciA9PSAnXHQnICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAodGVzdF9jciAmJiAqY3VyID09ICdccicgKSB8fAorICAgICAgICAgICAgICAgICpjdXIgPT0gJ1xuJyAgICAgICAgICAgICAgICkgKQorICAgICAgICArK2N1cjsKKyAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiVDFfR2V0X1ByaXZhdGVfRGljdDoiCisgICAgICAgICAgICAgICAgICAgIiBgZWV4ZWMnIG5vdCBwcm9wZXJseSB0ZXJtaW5hdGVkXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgc2l6ZSA9IHBhcnNlci0+YmFzZV9sZW4gLSAoRlRfVUxvbmcpKCBjdXIgLSBwYXJzZXItPmJhc2VfZGljdCApOworCisgICAgICBpZiAoIHBhcnNlci0+aW5fbWVtb3J5ICkKKyAgICAgIHsKKyAgICAgICAgLyogbm90ZSB0aGF0IHdlIGFsbG9jYXRlIG9uZSBtb3JlIGJ5dGUgdG8gcHV0IGEgdGVybWluYXRpbmcgYDAnICovCisgICAgICAgIGlmICggRlRfQUxMT0MoIHBhcnNlci0+cHJpdmF0ZV9kaWN0LCBzaXplICsgMSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4gPSBzaXplOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwYXJzZXItPnNpbmdsZV9ibG9jayA9IDE7CisgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0ID0gcGFyc2VyLT5iYXNlX2RpY3Q7CisgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4gID0gc2l6ZTsKKyAgICAgICAgcGFyc2VyLT5iYXNlX2RpY3QgICAgPSBOVUxMOworICAgICAgICBwYXJzZXItPmJhc2VfbGVuICAgICA9IDA7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBkZXRlcm1pbmUgd2hldGhlciB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5IGlzIGVuY29kZWQgaW4gYmluYXJ5ICovCisgICAgICAvKiBvciBoZXhhZGVjaW1hbCBBU0NJSSBmb3JtYXQgLS0gZGVjb2RlIGl0IGFjY29yZGluZ2x5ICAgICAgICAgICAgICAqLworCisgICAgICAvKiB3ZSBuZWVkIHRvIGFjY2VzcyB0aGUgbmV4dCA0IGJ5dGVzIChhZnRlciB0aGUgZmluYWwgd2hpdGVzcGFjZSAqLworICAgICAgLyogZm9sbG93aW5nIHRoZSBgZWV4ZWMnIGtleXdvcmQpOyBpZiB0aGV5IGFsbCBhcmUgaGV4YWRlY2ltYWwgICAgKi8KKyAgICAgIC8qIGRpZ2l0cywgdGhlbiB3ZSBoYXZlIGEgY2FzZSBvZiBBU0NJSSBzdG9yYWdlICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGlmICggY3VyICsgMyA8IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBmdF9pc3hkaWdpdCggY3VyWzBdICkgJiYgZnRfaXN4ZGlnaXQoIGN1clsxXSApICYmCisgICAgICAgICAgIGZ0X2lzeGRpZ2l0KCBjdXJbMl0gKSAmJiBmdF9pc3hkaWdpdCggY3VyWzNdICkgKQorICAgICAgeworICAgICAgICAvKiBBU0NJSSBoZXhhZGVjaW1hbCBlbmNvZGluZyAqLworICAgICAgICBGVF9VTG9uZyAgbGVuOworCisKKyAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGN1cjsKKyAgICAgICAgKHZvaWQpcHNhdXgtPnBzX3BhcnNlcl9mdW5jcy0+dG9fYnl0ZXMoICZwYXJzZXItPnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnByaXZhdGVfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOworICAgICAgICBwYXJzZXItPnByaXZhdGVfbGVuID0gbGVuOworCisgICAgICAgIC8qIHB1dCBhIHNhZmVndWFyZCAqLworICAgICAgICBwYXJzZXItPnByaXZhdGVfZGljdFtsZW5dID0gJ1wwJzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgLyogYmluYXJ5IGVuY29kaW5nIC0tIGNvcHkgdGhlIHByaXZhdGUgZGljdCAqLworICAgICAgICBGVF9NRU1fTU9WRSggcGFyc2VyLT5wcml2YXRlX2RpY3QsIGN1ciwgc2l6ZSApOworICAgIH0KKworICAgIC8qIHdlIG5vdyBkZWNyeXB0IHRoZSBlbmNvZGVkIGJpbmFyeSBwcml2YXRlIGRpY3Rpb25hcnkgKi8KKyAgICBwc2F1eC0+dDFfZGVjcnlwdCggcGFyc2VyLT5wcml2YXRlX2RpY3QsIHBhcnNlci0+cHJpdmF0ZV9sZW4sIDU1NjY1VSApOworCisgICAgaWYgKCBwYXJzZXItPnByaXZhdGVfbGVuIDwgNCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiVDFfR2V0X1ByaXZhdGVfRGljdDoiCisgICAgICAgICAgICAgICAgICIgaW52YWxpZCBwcml2YXRlIGRpY3Rpb25hcnkgc2VjdGlvblxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKiByZXBsYWNlIHRoZSBmb3VyIHJhbmRvbSBieXRlcyBhdCB0aGUgYmVnaW5uaW5nIHdpdGggd2hpdGVzcGFjZSAqLworICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0WzBdID0gJyAnOworICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0WzFdID0gJyAnOworICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0WzJdID0gJyAnOworICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0WzNdID0gJyAnOworCisgICAgcGFyc2VyLT5yb290LmJhc2UgICA9IHBhcnNlci0+cHJpdmF0ZV9kaWN0OworICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBwYXJzZXItPnByaXZhdGVfZGljdDsKKyAgICBwYXJzZXItPnJvb3QubGltaXQgID0gcGFyc2VyLT5yb290LmN1cnNvciArIHBhcnNlci0+cHJpdmF0ZV9sZW47CisKKyAgRmFpbDoKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFwYXJzZS5oIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90MXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMDJlMwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDFwYXJzZS5oCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0MXBhcnNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSAxIHBhcnNlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UMVBBUlNFX0hfXworI2RlZmluZSBfX1QxUEFSU0VfSF9fCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVDFfUGFyc2VyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBQU19QYXJzZXJSZWMgaXMgYW4gb2JqZWN0IHVzZWQgdG8gcGFyc2UgYSBUeXBlIDEgZm9udHMgdmVyeSAgICAgICovCisgIC8qICAgIHF1aWNrbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJvb3QgICAgICAgICA6OiBUaGUgcm9vdCBwYXJzZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3RyZWFtICAgICAgIDo6IFRoZSBjdXJyZW50IGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlX2RpY3QgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0b3AtbGV2ZWwgZGljdGlvbmFyeS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJhc2VfbGVuICAgICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB0b3AgZGljdGlvbmFyeS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHJpdmF0ZV9kaWN0IDo6IEEgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwcml2YXRlX2xlbiAgOjogVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluX3BmYiAgICAgICA6OiBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgaGFuZGxpbmcgYSBQRkIgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluX21lbW9yeSAgICA6OiBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgYSBtZW1vcnktYmFzZWQgc3RyZWFtLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2luZ2xlX2Jsb2NrIDo6IEEgYm9vbGVhbi4gIEluZGljYXRlcyB0aGF0IHRoZSBwcml2YXRlIGRpY3Rpb25hcnkgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgaW4gbGlldSBvZiB0aGUgYmFzZSBkaWN0aW9uYXJ5LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFQxX1BhcnNlclJlY18KKyAgeworICAgIFBTX1BhcnNlclJlYyAgcm9vdDsKKyAgICBGVF9TdHJlYW0gICAgIHN0cmVhbTsKKworICAgIEZUX0J5dGUqICAgICAgYmFzZV9kaWN0OworICAgIEZUX1VMb25nICAgICAgYmFzZV9sZW47CisKKyAgICBGVF9CeXRlKiAgICAgIHByaXZhdGVfZGljdDsKKyAgICBGVF9VTG9uZyAgICAgIHByaXZhdGVfbGVuOworCisgICAgRlRfQm9vbCAgICAgICBpbl9wZmI7CisgICAgRlRfQm9vbCAgICAgICBpbl9tZW1vcnk7CisgICAgRlRfQm9vbCAgICAgICBzaW5nbGVfYmxvY2s7CisKKyAgfSBUMV9QYXJzZXJSZWMsICpUMV9QYXJzZXI7CisKKworI2RlZmluZSBUMV9BZGRfVGFibGUoIHAsIGksIG8sIGwgKSAgKHApLT5mdW5jcy5hZGQoIChwKSwgaSwgbywgbCApCisjZGVmaW5lIFQxX1JlbGVhc2VfVGFibGUoIHAgKSAgICAgICAgICBcCisgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIChwKS0+ZnVuY3MucmVsZWFzZSApICBcCisgICAgICAgICAgICAgIChwKS0+ZnVuY3MucmVsZWFzZSggcCApOyBcCisgICAgICAgICAgfSB3aGlsZSAoIDAgKQorCisKKyNkZWZpbmUgVDFfU2tpcF9TcGFjZXMoIHAgKSAgICAocCktPnJvb3QuZnVuY3Muc2tpcF9zcGFjZXMoICYocCktPnJvb3QgKQorI2RlZmluZSBUMV9Ta2lwX1BTX1Rva2VuKCBwICkgIChwKS0+cm9vdC5mdW5jcy5za2lwX1BTX3Rva2VuKCAmKHApLT5yb290ICkKKworI2RlZmluZSBUMV9Ub0ludCggcCApICAgICAgIChwKS0+cm9vdC5mdW5jcy50b19pbnQoICYocCktPnJvb3QgKQorI2RlZmluZSBUMV9Ub0ZpeGVkKCBwLCB0ICkgIChwKS0+cm9vdC5mdW5jcy50b19maXhlZCggJihwKS0+cm9vdCwgdCApCisKKyNkZWZpbmUgVDFfVG9Db29yZEFycmF5KCBwLCBtLCBjICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnRvX2Nvb3JkX2FycmF5KCAmKHApLT5yb290LCBtLCBjICkKKyNkZWZpbmUgVDFfVG9GaXhlZEFycmF5KCBwLCBtLCBmLCB0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnRvX2ZpeGVkX2FycmF5KCAmKHApLT5yb290LCBtLCBmLCB0ICkKKyNkZWZpbmUgVDFfVG9Ub2tlbiggcCwgdCApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnRvX3Rva2VuKCAmKHApLT5yb290LCB0ICkKKyNkZWZpbmUgVDFfVG9Ub2tlbkFycmF5KCBwLCB0LCBtLCBjICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnRvX3Rva2VuX2FycmF5KCAmKHApLT5yb290LCB0LCBtLCBjICkKKworI2RlZmluZSBUMV9Mb2FkX0ZpZWxkKCBwLCBmLCBvLCBtLCBwZiApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3MubG9hZF9maWVsZCggJihwKS0+cm9vdCwgZiwgbywgbSwgcGYgKQorCisjZGVmaW5lIFQxX0xvYWRfRmllbGRfVGFibGUoIHAsIGYsIG8sIG0sIHBmICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy5sb2FkX2ZpZWxkX3RhYmxlKCAmKHApLT5yb290LCBmLCBvLCBtLCBwZiApCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9OZXdfUGFyc2VyKCBUMV9QYXJzZXIgICAgICBwYXJzZXIsCisgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQxX0dldF9Qcml2YXRlX0RpY3QoIFQxX1BhcnNlciAgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgUFNBdXhfU2VydmljZSAgcHNhdXggKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIFQxX0ZpbmFsaXplX1BhcnNlciggVDFfUGFyc2VyICBwYXJzZXIgKTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1QxUEFSU0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxdG9rZW5zLmggYi9mcmVldHlwZS0yLjYvc3JjL3R5cGUxL3QxdG9rZW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5MjY1MgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdDF0b2tlbnMuaApAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDF0b2tlbnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgMSB0b2tlbml6ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBTX0ZvbnRJbmZvUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfSU5GTworCisgIFQxX0ZJRUxEX1NUUklORyggInZlcnNpb24iLCAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgIFQxX0ZJRUxEX1NUUklORyggIk5vdGljZSIsICAgICAgICAgICAgIG5vdGljZSwKKyAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUICkKKyAgVDFfRklFTERfU1RSSU5HKCAiRnVsbE5hbWUiLCAgICAgICAgICAgZnVsbF9uYW1lLAorICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICBUMV9GSUVMRF9TVFJJTkcoICJGYW1pbHlOYW1lIiwgICAgICAgICBmYW1pbHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUICkKKyAgVDFfRklFTERfU1RSSU5HKCAiV2VpZ2h0IiwgICAgICAgICAgICAgd2VpZ2h0LAorICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorCisgIC8qIHdlIHVzZSBwb2ludGVycyB0byBkZXRlY3QgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN5bnRoZXRpYyBmb250cyAqLworICBUMV9GSUVMRF9OVU0gICAoICJJdGFsaWNBbmdsZSIsICAgICAgICBpdGFsaWNfYW5nbGUsCisgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgIFQxX0ZJRUxEX0JPT0wgICggImlzRml4ZWRQaXRjaCIsICAgICAgIGlzX2ZpeGVkX3BpdGNoLAorICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICBUMV9GSUVMRF9OVU0gICAoICJVbmRlcmxpbmVQb3NpdGlvbiIsICB1bmRlcmxpbmVfcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgIFQxX0ZJRUxEX05VTSAgICggIlVuZGVybGluZVRoaWNrbmVzcyIsIHVuZGVybGluZV90aGlja25lc3MsCisgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgUFNfRm9udEV4dHJhUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkEKKworICBUMV9GSUVMRF9OVU0gICAoICJGU1R5cGUiLCBmc190eXBlLAorICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBTX1ByaXZhdGVSZWMKKyN1bmRlZiAgVDFDT0RFCisjZGVmaW5lIFQxQ09ERSAgICAgICAgVDFfRklFTERfTE9DQVRJT05fUFJJVkFURQorCisgIFQxX0ZJRUxEX05VTSAgICAgICAoICJVbmlxdWVJRCIsICAgICAgICAgdW5pcXVlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUIHwgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNICAgICAgICggImxlbklWIiwgICAgICAgICAgICBsZW5JViwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNICAgICAgICggIkxhbmd1YWdlR3JvdXAiLCAgICBsYW5ndWFnZV9ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNICAgICAgICggInBhc3N3b3JkIiwgICAgICAgICBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKworICBUMV9GSUVMRF9GSVhFRF8xMDAwKCAiQmx1ZVNjYWxlIiwgICAgICAgIGJsdWVfc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisgIFQxX0ZJRUxEX05VTSAgICAgICAoICJCbHVlU2hpZnQiLCAgICAgICAgYmx1ZV9zaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNICAgICAgICggIkJsdWVGdXp6IiwgICAgICAgICBibHVlX2Z1enosCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisKKyAgVDFfRklFTERfTlVNX1RBQkxFICggIkJsdWVWYWx1ZXMiLCAgICAgICBibHVlX3ZhbHVlcywgICAgICAgIDE0LAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiT3RoZXJCbHVlcyIsICAgICAgIG90aGVyX2JsdWVzLCAgICAgICAgMTAsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisgIFQxX0ZJRUxEX05VTV9UQUJMRSAoICJGYW1pbHlCbHVlcyIsICAgICAgZmFtaWx5X2JsdWVzLCAgICAgICAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNX1RBQkxFICggIkZhbWlseU90aGVyQmx1ZXMiLCBmYW1pbHlfb3RoZXJfYmx1ZXMsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorCisgIFQxX0ZJRUxEX05VTV9UQUJMRTIoICJTdGRIVyIsICAgICAgICAgICAgc3RhbmRhcmRfd2lkdGgsICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgVDFfRklFTERfRElDVF9QUklWQVRFICkKKyAgVDFfRklFTERfTlVNX1RBQkxFMiggIlN0ZFZXIiwgICAgICAgICAgICBzdGFuZGFyZF9oZWlnaHQsICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUyKCAiTWluRmVhdHVyZSIsICAgICAgIG1pbl9mZWF0dXJlLCAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisKKyAgVDFfRklFTERfTlVNX1RBQkxFICggIlN0ZW1TbmFwSCIsICAgICAgICBzbmFwX3dpZHRocywgICAgICAgIDEyLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICBUMV9GSUVMRF9OVU1fVEFCTEUgKCAiU3RlbVNuYXBWIiwgICAgICAgIHNuYXBfaGVpZ2h0cywgICAgICAgMTIsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisKKyAgVDFfRklFTERfRklYRUQgICAgICggIkV4cGFuc2lvbkZhY3RvciIsICBleHBhbnNpb25fZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICBUMV9GSUVMRF9CT09MICAgICAgKCAiRm9yY2VCb2xkIiwgICAgICAgIGZvcmNlX2JvbGQsCisgICAgICAgICAgICAgICAgICAgICAgIFQxX0ZJRUxEX0RJQ1RfUFJJVkFURSApCisKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUMV9Gb250UmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRElDVAorCisgIFQxX0ZJRUxEX0tFWSAgKCAiRm9udE5hbWUiLCAgICBmb250X25hbWUsICAgIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorICBUMV9GSUVMRF9OVU0gICggIlBhaW50VHlwZSIsICAgcGFpbnRfdHlwZSwgICBUMV9GSUVMRF9ESUNUX0ZPTlRESUNUICkKKyAgVDFfRklFTERfTlVNICAoICJGb250VHlwZSIsICAgIGZvbnRfdHlwZSwgICAgVDFfRklFTERfRElDVF9GT05URElDVCApCisgIFQxX0ZJRUxEX0ZJWEVEKCAiU3Ryb2tlV2lkdGgiLCBzdHJva2Vfd2lkdGgsIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgRlRfQkJveAorI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9CQk9YCisKKyAgVDFfRklFTERfQkJPWCggIkZvbnRCQm94IiwgeE1pbiwgVDFfRklFTERfRElDVF9GT05URElDVCApCisKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUMV9GYWNlUmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZBQ0UKKworICBUMV9GSUVMRF9OVU0oICJORFYiLCBuZHZfaWR4LCBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorICBUMV9GSUVMRF9OVU0oICJDRFYiLCBjZHZfaWR4LCBUMV9GSUVMRF9ESUNUX1BSSVZBVEUgKQorCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgUFNfQmxlbmRSZWMKKyN1bmRlZiAgVDFDT0RFCisjZGVmaW5lIFQxQ09ERSAgICAgICAgVDFfRklFTERfTE9DQVRJT05fQkxFTkQKKworICBUMV9GSUVMRF9OVU1fVEFCTEUoICJEZXNpZ25WZWN0b3IiLCBkZWZhdWx0X2Rlc2lnbl92ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgVDFfTUFYX01NX0RFU0lHTlMsIFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1QgKQorCisKKyNlbmRpZiAvKiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdHlwZTEuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTEvdHlwZTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzcwZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlMS90eXBlMS5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHR5cGUxLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBUeXBlIDEgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInQxcGFyc2UuYyIKKyNpbmNsdWRlICJ0MWxvYWQuYyIKKyNpbmNsdWRlICJ0MW9ianMuYyIKKyNpbmNsdWRlICJ0MWRyaXZlci5jIgorI2luY2x1ZGUgInQxZ2xvYWQuYyIKKworI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQorI2luY2x1ZGUgInQxYWZtLmMiCisjZW5kaWYKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL0phbWZpbGUgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGIzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi9KYW1maWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgRnJlZVR5cGUgMiBzcmMvdHlwZTQyIEphbWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDItMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKK1N1YkRpciAgRlQyX1RPUCAkKEZUMl9TUkNfRElSKSB0eXBlNDIgOworCit7CisgIGxvY2FsICBfc291cmNlcyA7CisKKyAgaWYgJChGVDJfTVVMVEkpCisgIHsKKyAgICBfc291cmNlcyA9IHQ0Mm9ianMgdDQycGFyc2UgdDQyZHJpdnIgOworICB9CisgIGVsc2UKKyAgeworICAgIF9zb3VyY2VzID0gdHlwZTQyIDsKKyAgfQorCisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKK30KKworIyBlbmQgb2Ygc3JjL3R5cGU0MiBKYW1maWxlCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi9tb2R1bGUubWsgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3ZTY1MQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL21vZHVsZS5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIEZyZWVUeXBlIDIgVHlwZTQyIG1vZHVsZSBkZWZpbml0aW9uCisjCisKKworIyBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitGVE1PRFVMRV9IX0NPTU1BTkRTICs9IFRZUEU0Ml9EUklWRVIKKworZGVmaW5lIFRZUEU0Ml9EUklWRVIKKyQoT1BFTl9EUklWRVIpIEZUX0RyaXZlcl9DbGFzc1JlYywgdDQyX2RyaXZlcl9jbGFzcyAkKENMT1NFX0RSSVZFUikKKyQoRUNIT19EUklWRVIpdHlwZTQyICAgICQoRUNIT19EUklWRVJfREVTQylUeXBlIDQyIGZvbnQgZmlsZXMgd2l0aCBubyBrbm93biBleHRlbnNpb24kKEVDSE9fRFJJVkVSX0RPTkUpCitlbmRlZgorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvcnVsZXMubWsgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThlZmNhCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvcnVsZXMubWsKQEAgLTAsMCArMSw3MyBAQAorIworIyBGcmVlVHlwZSAyIFR5cGU0MiBkcml2ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDIwMDItMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBUeXBlNDIgZHJpdmVyIGRpcmVjdG9yeQorIworVDQyX0RJUiA6PSAkKFNSQ19ESVIpL3R5cGU0MgorCisKKyMgY29tcGlsYXRpb24gZmxhZ3MgZm9yIHRoZSBkcml2ZXIKKyMKK1Q0Ml9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChUNDJfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgVHlwZTQyIGRyaXZlciBzb3VyY2UKKyMKK1Q0Ml9EUlZfU1JDIDo9ICQoVDQyX0RJUikvdDQyb2Jqcy5jICBcCisgICAgICAgICAgICAgICAkKFQ0Ml9ESVIpL3Q0MnBhcnNlLmMgXAorICAgICAgICAgICAgICAgJChUNDJfRElSKS90NDJkcml2ci5jCisKKyMgVHlwZTQyIGRyaXZlciBoZWFkZXJzCisjCitUNDJfRFJWX0ggOj0gJChUNDJfRFJWX1NSQzolLmM9JS5oKSBcCisgICAgICAgICAgICAgJChUNDJfRElSKS90NDJlcnJvci5oICBcCisgICAgICAgICAgICAgJChUNDJfRElSKS90NDJ0eXBlcy5oCisKKworIyBUeXBlNDIgZHJpdmVyIG9iamVjdChzKQorIworIyAgIFQ0Ml9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMKKyMgICBUNDJfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcworIworVDQyX0RSVl9PQkpfTSA6PSAkKFQ0Ml9EUlZfU1JDOiQoVDQyX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK1Q0Ml9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS90eXBlNDIuJE8KKworIyBUeXBlNDIgZHJpdmVyIHNvdXJjZSBmaWxlIGZvciBzaW5nbGUgYnVpbGQKKyMKK1Q0Ml9EUlZfU1JDX1MgOj0gJChUNDJfRElSKS90eXBlNDIuYworCisKKyMgVHlwZTQyIGRyaXZlciAtIHNpbmdsZSBvYmplY3QKKyMKKyQoVDQyX0RSVl9PQkpfUyk6ICQoVDQyX0RSVl9TUkNfUykgJChUNDJfRFJWX1NSQykgJChGUkVFVFlQRV9IKSAkKFQ0Ml9EUlZfSCkKKwkkKFQ0Ml9DT01QSUxFKSAkVCQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJEAgJChUNDJfRFJWX1NSQ19TKSkKKworCisjIFR5cGU0MiBkcml2ZXIgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoVDQyX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChUNDJfRFJWX0gpCisJJChUNDJfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKFQ0Ml9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoVDQyX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdDQyZHJpdnIuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwNzA5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQ0MmRyaXZyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIaWdoLWxldmVsIFR5cGUgNDIgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgVHlwZTQyIGZvbnRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgICAgICAgICAgICAgICAqLworICAvKiBUZWNobmljYWwgTm90ZSAjNTAxMiBmcm9tIEFkb2JlLCB3aXRoIHRoZXNlIGxpbWl0YXRpb25zOiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDEpIENJRCBGb250cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAyKSBJbmNyZW1lbnRhbCBmb250cyBtYWtpbmcgdXNlIG9mIHRoZSBHbHlwaERpcmVjdG9yeSBrZXl3b3JkICAgICAgICAgKi8KKyAgLyogICAgd2lsbCBiZSBsb2FkZWQsIGJ1dCB0aGUgcmVuZGVyaW5nIHdpbGwgYmUgdXNpbmcgdGhlIFRydWVUeXBlICAgICAgICovCisgIC8qICAgIHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAzKSBBcyBmb3IgVHlwZTEgZm9udHMsIENEZXZQcm9jIGlzIG5vdCBzdXBwb3J0ZWQuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogNCkgVGhlIE1ldHJpY3MgZGljdGlvbmFyeSBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDUpIEFGTSBtZXRyaWNzIGFyZSBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW4gb3RoZXIgd29yZHMsIHRoaXMgZHJpdmVyIHN1cHBvcnRzIFR5cGU0MiBmb250cyBkZXJpdmVkIGZyb20gICAgICAgICovCisgIC8qIFRydWVUeXBlIGZvbnRzIGluIGEgbm9uLUNJRCBtYW5uZXIsIGFzIGRvbmUgYnkgdXN1YWwgY29udmVyc2lvbiAgICAgICAqLworICAvKiBwcm9ncmFtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJ0NDJkcml2ci5oIgorI2luY2x1ZGUgInQ0Mm9ianMuaCIKKyNpbmNsdWRlICJ0NDJlcnJvci5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCisjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDQyCisKKworICAvKgorICAgKgorICAgKiAgR0xZUEggRElDVCBTRVJWSUNFCisgICAqCisgICAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0NDJfZ2V0X2dseXBoX25hbWUoIFQ0Ml9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICB7CisgICAgRlRfU1RSQ1BZTiggYnVmZmVyLCBmYWNlLT50eXBlMS5nbHlwaF9uYW1lc1tnbHlwaF9pbmRleF0sIGJ1ZmZlcl9tYXggKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50CisgIHQ0Ml9nZXRfbmFtZV9pbmRleCggVDQyX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICBnbHlwaF9uYW1lICkKKyAgeworICAgIEZUX0ludCAgaTsKKworCisgICAgZm9yICggaSA9IDA7IGkgPCBmYWNlLT50eXBlMS5udW1fZ2x5cGhzOyBpKysgKQorICAgIHsKKyAgICAgIEZUX1N0cmluZyogIGduYW1lID0gZmFjZS0+dHlwZTEuZ2x5cGhfbmFtZXNbaV07CisKKworICAgICAgaWYgKCBnbHlwaF9uYW1lWzBdID09IGduYW1lWzBdICYmICFmdF9zdHJjbXAoIGdseXBoX25hbWUsIGduYW1lICkgKQorICAgICAgICByZXR1cm4gKEZUX1VJbnQpZnRfYXRvbCggKGNvbnN0IGNoYXIgKilmYWNlLT50eXBlMS5jaGFyc3RyaW5nc1tpXSApOworICAgIH0KKworICAgIHJldHVybiAwOworICB9CisKKworICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9HbHlwaERpY3RSZWMgIHQ0Ml9zZXJ2aWNlX2dseXBoX2RpY3QgPQorICB7CisgICAgKEZUX0dseXBoRGljdF9HZXROYW1lRnVuYykgIHQ0Ml9nZXRfZ2x5cGhfbmFtZSwKKyAgICAoRlRfR2x5cGhEaWN0X05hbWVJbmRleEZ1bmMpdDQyX2dldF9uYW1lX2luZGV4CisgIH07CisKKworICAvKgorICAgKgorICAgKiAgUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IGNoYXIqCisgIHQ0Ml9nZXRfcHNfZm9udF9uYW1lKCBUNDJfRmFjZSAgZmFjZSApCisgIHsKKyAgICByZXR1cm4gKGNvbnN0IGNoYXIqKWZhY2UtPnR5cGUxLmZvbnRfbmFtZTsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYyAgdDQyX3NlcnZpY2VfcHNfZm9udF9uYW1lID0KKyAgeworICAgIChGVF9Qc05hbWVfR2V0RnVuYyl0NDJfZ2V0X3BzX2ZvbnRfbmFtZQorICB9OworCisKKyAgLyoKKyAgICoKKyAgICogIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCisgICAqCisgICAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0NDJfcHNfZ2V0X2ZvbnRfaW5mbyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNfRm9udEluZm9SZWMqICBhZm9udF9pbmZvICkKKyAgeworICAgICphZm9udF9pbmZvID0gKChUNDJfRmFjZSlmYWNlKS0+dHlwZTEuZm9udF9pbmZvOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHQ0Ml9wc19nZXRfZm9udF9leHRyYSggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQU19Gb250RXh0cmFSZWMqICBhZm9udF9leHRyYSApCisgIHsKKyAgICAqYWZvbnRfZXh0cmEgPSAoKFQ0Ml9GYWNlKWZhY2UpLT50eXBlMS5mb250X2V4dHJhOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0ludAorICB0NDJfcHNfaGFzX2dseXBoX25hbWVzKCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisgICAgcmV0dXJuIDE7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0NDJfcHNfZ2V0X2ZvbnRfcHJpdmF0ZSggRlRfRmFjZSAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQU19Qcml2YXRlUmVjKiAgYWZvbnRfcHJpdmF0ZSApCisgIHsKKyAgICAqYWZvbnRfcHJpdmF0ZSA9ICgoVDQyX0ZhY2UpZmFjZSktPnR5cGUxLnByaXZhdGVfZGljdDsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1BzSW5mb1JlYyAgdDQyX3NlcnZpY2VfcHNfaW5mbyA9CisgIHsKKyAgICAoUFNfR2V0Rm9udEluZm9GdW5jKSAgIHQ0Ml9wc19nZXRfZm9udF9pbmZvLAorICAgIChQU19HZXRGb250RXh0cmFGdW5jKSAgdDQyX3BzX2dldF9mb250X2V4dHJhLAorICAgIChQU19IYXNHbHlwaE5hbWVzRnVuYykgdDQyX3BzX2hhc19nbHlwaF9uYW1lcywKKyAgICAoUFNfR2V0Rm9udFByaXZhdGVGdW5jKXQ0Ml9wc19nZXRfZm9udF9wcml2YXRlLAorICAgIChQU19HZXRGb250VmFsdWVGdW5jKSAgTlVMTCAgICAgICAgICAgICAvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyAgfTsKKworCisgIC8qCisgICAqCisgICAqICBTRVJWSUNFIExJU1QKKyAgICoKKyAgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICB0NDJfc2VydmljZXNbXSA9CisgIHsKKyAgICB7IEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZ0NDJfc2VydmljZV9nbHlwaF9kaWN0IH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmdDQyX3NlcnZpY2VfcHNfZm9udF9uYW1lIH0sCisgICAgeyBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmdDQyX3NlcnZpY2VfcHNfaW5mbyB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfVFlQRV80MiB9LAorICAgIHsgTlVMTCwgTlVMTCB9CisgIH07CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX01vZHVsZV9JbnRlcmZhY2UgKQorICBUNDJfR2V0X0ludGVyZmFjZSggRlRfTW9kdWxlICAgICAgICAgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgdDQyX2ludGVyZmFjZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworCisgICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIHQ0Ml9zZXJ2aWNlcywgdDQyX2ludGVyZmFjZSApOworICB9CisKKworICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIHQ0Ml9kcml2ZXJfY2xhc3MgPQorICB7CisgICAgeworICAgICAgRlRfTU9EVUxFX0ZPTlRfRFJJVkVSICAgICAgIHwKKyAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgICB8CisjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCisgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIsCisjZWxzZQorICAgICAgMCwKKyNlbmRpZgorCisgICAgICBzaXplb2YgKCBUNDJfRHJpdmVyUmVjICksCisKKyAgICAgICJ0eXBlNDIiLAorICAgICAgMHgxMDAwMEwsCisgICAgICAweDIwMDAwTCwKKworICAgICAgMCwgICAgLyogZm9ybWF0IGludGVyZmFjZSAqLworCisgICAgICBUNDJfRHJpdmVyX0luaXQsCisgICAgICBUNDJfRHJpdmVyX0RvbmUsCisgICAgICBUNDJfR2V0X0ludGVyZmFjZSwKKyAgICB9LAorCisgICAgc2l6ZW9mICggVDQyX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBUNDJfU2l6ZVJlYyApLAorICAgIHNpemVvZiAoIFQ0Ml9HbHlwaFNsb3RSZWMgKSwKKworICAgIFQ0Ml9GYWNlX0luaXQsCisgICAgVDQyX0ZhY2VfRG9uZSwKKyAgICBUNDJfU2l6ZV9Jbml0LAorICAgIFQ0Ml9TaXplX0RvbmUsCisgICAgVDQyX0dseXBoU2xvdF9Jbml0LAorICAgIFQ0Ml9HbHlwaFNsb3RfRG9uZSwKKworICAgIFQ0Ml9HbHlwaFNsb3RfTG9hZCwKKworICAgIDAsICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0dldEtlcm5pbmdGdW5jICAqLworICAgIDAsICAgICAgICAgICAgICAgICAvKiBGVF9GYWNlX0F0dGFjaEZ1bmMgICAgICAqLworCisgICAgMCwgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICovCisgICAgVDQyX1NpemVfUmVxdWVzdCwKKyAgICBUNDJfU2l6ZV9TZWxlY3QKKyAgfTsKKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MmRyaXZyLmggYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJkcml2ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDE3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJkcml2ci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQ0MmRyaXZyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIaWdoLWxldmVsIFR5cGUgNDIgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1Q0MkRSSVZSX0hfXworI2RlZmluZSBfX1Q0MkRSSVZSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisKKyAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICkgIHQ0Ml9kcml2ZXJfY2xhc3M7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1Q0MkRSSVZSX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdDQyZXJyb3IuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MmVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkYWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MmVycm9yLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDQyZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgNDIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBUeXBlIDQyIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1Q0MkVSUk9SX0hfXworI2RlZmluZSBfX1Q0MkVSUk9SX0hfXworCisjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKKworI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisKKyN1bmRlZiAgRlRfRVJSX1BSRUZJWAorI2RlZmluZSBGVF9FUlJfUFJFRklYICBUNDJfRXJyXworI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX1R5cGU0MgorCisjaW5jbHVkZSBGVF9FUlJPUlNfSAorCisjZW5kaWYgLyogX19UNDJFUlJPUl9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0Mm9ianMuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0Mm9ianMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU2YWRmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdDQyb2Jqcy5jCkBAIC0wLDAgKzEsNjkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0NDJvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSA0MiBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJ0NDJvYmpzLmgiCisjaW5jbHVkZSAidDQycGFyc2UuaCIKKyNpbmNsdWRlICJ0NDJlcnJvci5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfTElTVF9ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAorCisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDQyCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgVDQyX09wZW5fRmFjZSggVDQyX0ZhY2UgIGZhY2UgKQorICB7CisgICAgVDQyX0xvYWRlclJlYyAgbG9hZGVyOworICAgIFQ0Ml9QYXJzZXIgICAgIHBhcnNlcjsKKyAgICBUMV9Gb250ICAgICAgICB0eXBlMSA9ICZmYWNlLT50eXBlMTsKKyAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKKworICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworCisKKyAgICB0NDJfbG9hZGVyX2luaXQoICZsb2FkZXIsIGZhY2UgKTsKKworICAgIHBhcnNlciA9ICZsb2FkZXIucGFyc2VyOworCisgICAgaWYgKCBGVF9BTExPQyggZmFjZS0+dHRmX2RhdGEsIDEyICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogd2hpbGUgcGFyc2luZyB0aGUgZm9udCB3ZSBhbHdheXMgdXBkYXRlIGBmYWNlLT50dGZfc2l6ZScgc28gdGhhdCAqLworICAgIC8qIGV2ZW4gaW4gY2FzZSBvZiBidWdneSBkYXRhICh3aGljaCBtaWdodCBsZWFkIHRvIHByZW1hdHVyZSBlbmQgb2YgKi8KKyAgICAvKiBzY2FubmluZyB3aXRob3V0IGNhdXNpbmcgYW4gZXJyb3IpIHRoZSBjYWxsIHRvIGBGVF9PcGVuX0ZhY2UnIGluICovCisgICAgLyogYFQ0Ml9GYWNlX0luaXQnIHBhc3NlcyB0aGUgY29ycmVjdCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZhY2UtPnR0Zl9zaXplID0gMTI7CisKKyAgICBlcnJvciA9IHQ0Ml9wYXJzZXJfaW5pdCggcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2F1eCk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBlcnJvciA9IHQ0Ml9wYXJzZV9kaWN0KCBmYWNlLCAmbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+YmFzZV9kaWN0LCBwYXJzZXItPmJhc2VfbGVuICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIHR5cGUxLT5mb250X3R5cGUgIT0gNDIgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIlQ0Ml9PcGVuX0ZhY2U6IGNhbm5vdCBoYW5kbGUgRm9udFR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIHR5cGUxLT5mb250X3R5cGUgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogbm93LCBwcm9wYWdhdGUgdGhlIGNoYXJzdHJpbmdzIGFuZCBnbHlwaG5hbWVzIHRhYmxlcyAqLworICAgIC8qIHRvIHRoZSBUeXBlMSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB0eXBlMS0+bnVtX2dseXBocyA9IGxvYWRlci5udW1fZ2x5cGhzOworCisgICAgaWYgKCAhbG9hZGVyLmNoYXJzdHJpbmdzLmluaXQgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIlQ0Ml9PcGVuX0ZhY2U6IG5vIGNoYXJzdHJpbmdzIGFycmF5IGluIGZhY2VcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgfQorCisgICAgbG9hZGVyLmNoYXJzdHJpbmdzLmluaXQgID0gMDsKKyAgICB0eXBlMS0+Y2hhcnN0cmluZ3NfYmxvY2sgPSBsb2FkZXIuY2hhcnN0cmluZ3MuYmxvY2s7CisgICAgdHlwZTEtPmNoYXJzdHJpbmdzICAgICAgID0gbG9hZGVyLmNoYXJzdHJpbmdzLmVsZW1lbnRzOworICAgIHR5cGUxLT5jaGFyc3RyaW5nc19sZW4gICA9IGxvYWRlci5jaGFyc3RyaW5ncy5sZW5ndGhzOworCisgICAgLyogd2UgY29weSB0aGUgZ2x5cGggbmFtZXMgYGJsb2NrJyBhbmQgYGVsZW1lbnRzJyBmaWVsZHM7ICovCisgICAgLyogdGhlIGBsZW5ndGhzJyBmaWVsZCBtdXN0IGJlIHJlbGVhc2VkIGxhdGVyICAgICAgICAgICAgICovCisgICAgdHlwZTEtPmdseXBoX25hbWVzX2Jsb2NrICAgID0gbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrOworICAgIHR5cGUxLT5nbHlwaF9uYW1lcyAgICAgICAgICA9IChGVF9TdHJpbmcqKilsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHM7CisgICAgbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrICAgID0gTlVMTDsKKyAgICBsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHMgPSBOVUxMOworCisgICAgLyogd2UgbXVzdCBub3cgYnVpbGQgdHlwZTEuZW5jb2Rpbmcgd2hlbiB3ZSBoYXZlIGEgY3VzdG9tIGFycmF5ICovCisgICAgaWYgKCB0eXBlMS0+ZW5jb2RpbmdfdHlwZSA9PSBUMV9FTkNPRElOR19UWVBFX0FSUkFZICkKKyAgICB7CisgICAgICBGVF9JbnQgICAgY2hhcmNvZGUsIGlkeCwgbWluX2NoYXIsIG1heF9jaGFyOworICAgICAgRlRfQnl0ZSogIGdseXBoX25hbWU7CisKKworICAgICAgLyogT0ssIHdlIGRvIHRoZSBmb2xsb3dpbmc6IGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIGVuY29kaW5nICAgKi8KKyAgICAgIC8qIHRhYmxlLCBsb29rIHVwIHRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaGF2aW5nIHRoZSBzYW1lIG5hbWUgICovCisgICAgICAvKiBhcyBkZWZpbmVkIGluIHRoZSBDaGFyU3RyaW5ncyBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogVGhlIGluZGV4IGlzIHRoZW4gc3RvcmVkIGluIHR5cGUxLmVuY29kaW5nLmNoYXJfaW5kZXgsIGFuZCAgKi8KKyAgICAgIC8qIHRoZSBuYW1lIGluIHR5cGUxLmVuY29kaW5nLmNoYXJfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIG1pbl9jaGFyID0gMDsKKyAgICAgIG1heF9jaGFyID0gMDsKKworICAgICAgY2hhcmNvZGUgPSAwOworICAgICAgZm9yICggOyBjaGFyY29kZSA8IGxvYWRlci5lbmNvZGluZ190YWJsZS5tYXhfZWxlbXM7IGNoYXJjb2RlKysgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgY2hhcl9uYW1lOworCisKKyAgICAgICAgdHlwZTEtPmVuY29kaW5nLmNoYXJfaW5kZXhbY2hhcmNvZGVdID0gMDsKKyAgICAgICAgdHlwZTEtPmVuY29kaW5nLmNoYXJfbmFtZSBbY2hhcmNvZGVdID0gKGNoYXIgKikiLm5vdGRlZiI7CisKKyAgICAgICAgY2hhcl9uYW1lID0gbG9hZGVyLmVuY29kaW5nX3RhYmxlLmVsZW1lbnRzW2NoYXJjb2RlXTsKKyAgICAgICAgaWYgKCBjaGFyX25hbWUgKQorICAgICAgICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IHR5cGUxLT5udW1fZ2x5cGhzOyBpZHgrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgZ2x5cGhfbmFtZSA9IChGVF9CeXRlKil0eXBlMS0+Z2x5cGhfbmFtZXNbaWR4XTsKKyAgICAgICAgICAgIGlmICggZnRfc3RyY21wKCAoY29uc3QgY2hhciopY2hhcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilnbHlwaF9uYW1lICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHR5cGUxLT5lbmNvZGluZy5jaGFyX2luZGV4W2NoYXJjb2RlXSA9IChGVF9VU2hvcnQpaWR4OworICAgICAgICAgICAgICB0eXBlMS0+ZW5jb2RpbmcuY2hhcl9uYW1lIFtjaGFyY29kZV0gPSAoY2hhciopZ2x5cGhfbmFtZTsKKworICAgICAgICAgICAgICAvKiBDaGFuZ2UgbWluL21heCBlbmNvZGVkIGNoYXIgb25seSBpZiBnbHlwaCBuYW1lIGlzICovCisgICAgICAgICAgICAgIC8qIG5vdCAvLm5vdGRlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaWYgKCBmdF9zdHJjbXAoIChjb25zdCBjaGFyKikiLm5vdGRlZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopZ2x5cGhfbmFtZSApICE9IDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBjaGFyY29kZSA8IG1pbl9jaGFyICkKKyAgICAgICAgICAgICAgICAgIG1pbl9jaGFyID0gY2hhcmNvZGU7CisgICAgICAgICAgICAgICAgaWYgKCBjaGFyY29kZSA+PSBtYXhfY2hhciApCisgICAgICAgICAgICAgICAgICBtYXhfY2hhciA9IGNoYXJjb2RlICsgMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHR5cGUxLT5lbmNvZGluZy5jb2RlX2ZpcnN0ID0gbWluX2NoYXI7CisgICAgICB0eXBlMS0+ZW5jb2RpbmcuY29kZV9sYXN0ICA9IG1heF9jaGFyOworICAgICAgdHlwZTEtPmVuY29kaW5nLm51bV9jaGFycyAgPSBsb2FkZXIubnVtX2NoYXJzOworICAgIH0KKworICBFeGl0OgorICAgIHQ0Ml9sb2FkZXJfZG9uZSggJmxvYWRlciApOworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqIERyaXZlciBGdW5jdGlvbnMgKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUNDJfRmFjZV9Jbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIHQ0MmZhY2UsICAgICAgIC8qIFQ0Ml9GYWNlICovCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApCisgIHsKKyAgICBUNDJfRmFjZSAgICAgICAgICAgIGZhY2UgID0gKFQ0Ml9GYWNlKXQ0MmZhY2U7CisgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXM7CisgICAgUFNBdXhfU2VydmljZSAgICAgICBwc2F1eDsKKyAgICBGVF9GYWNlICAgICAgICAgICAgIHJvb3QgID0gKEZUX0ZhY2UpJmZhY2UtPnJvb3Q7CisgICAgVDFfRm9udCAgICAgICAgICAgICB0eXBlMSA9ICZmYWNlLT50eXBlMTsKKyAgICBQU19Gb250SW5mbyAgICAgICAgIGluZm8gID0gJnR5cGUxLT5mb250X2luZm87CisKKyAgICBGVF9VTlVTRUQoIG51bV9wYXJhbXMgKTsKKyAgICBGVF9VTlVTRUQoIHBhcmFtcyApOworICAgIEZUX1VOVVNFRCggc3RyZWFtICk7CisKKworICAgIGZhY2UtPnR0Zl9mYWNlICAgICAgID0gTlVMTDsKKyAgICBmYWNlLT5yb290Lm51bV9mYWNlcyA9IDE7CisKKyAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHBzbmFtZXMsIFBPU1RTQ1JJUFRfQ01BUFMgKTsKKyAgICBmYWNlLT5wc25hbWVzID0gcHNuYW1lczsKKworICAgIGZhY2UtPnBzYXV4ID0gRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2F1eCIgKTsKKyAgICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIGlmICggIXBzYXV4ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJUNDJfRmFjZV9Jbml0OiBjYW5ub3QgYWNjZXNzIGBwc2F1eCcgbW9kdWxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAiVHlwZSA0MiBkcml2ZXJcbiIgKSk7CisKKyAgICAvKiBvcGVuIHRoZSB0b2tlbml6ZXIsIHRoaXMgd2lsbCBhbHNvIGNoZWNrIHRoZSBmb250IGZvcm1hdCAqLworICAgIGVycm9yID0gVDQyX09wZW5fRmFjZSggZmFjZSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogaWYgd2UganVzdCB3YW50ZWQgdG8gY2hlY2sgdGhlIGZvcm1hdCwgbGVhdmUgc3VjY2Vzc2Z1bGx5IG5vdyAqLworICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY2hlY2sgdGhlIGZhY2UgaW5kZXggKi8KKyAgICBpZiAoIGZhY2VfaW5kZXggPiAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJUNDJfRmFjZV9Jbml0OiBpbnZhbGlkIGZhY2UgaW5kZXhcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogTm93IGxvYWQgdGhlIGZvbnQgcHJvZ3JhbSBpbnRvIHRoZSBmYWNlIG9iamVjdCAqLworCisgICAgLyogSW5pdCB0aGUgZmFjZSBvYmplY3QgZmllbGRzICovCisgICAgLyogTm93IHNldCB1cCByb290IGZhY2UgZmllbGRzICovCisKKyAgICByb290LT5udW1fZ2x5cGhzICAgPSB0eXBlMS0+bnVtX2dseXBoczsKKyAgICByb290LT5udW1fY2hhcm1hcHMgPSAwOworICAgIHJvb3QtPmZhY2VfaW5kZXggICA9IDA7CisKKyAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTOworCisgICAgaWYgKCBpbmZvLT5pc19maXhlZF9waXRjaCApCisgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKKworICAgIC8qIFdlIG9ubHkgc2V0IHRoaXMgZmxhZyBpZiB3ZSBoYXZlIHRoZSBwYXRlbnRlZCBieXRlY29kZSBpbnRlcnByZXRlci4gKi8KKyAgICAvKiBUaGVyZSBhcmUgbm8ga25vd24gYHRyaWNreScgVHlwZTQyIGZvbnRzIHRoYXQgY291bGQgYmUgbG9hZGVkIHdpdGggICovCisgICAgLyogdGhlIHVucGF0ZW50ZWQgaW50ZXJwcmV0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKKyAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19ISU5URVI7CisjZW5kaWYKKworICAgIC8qIFhYWDogVE9ETyAtLSBhZGQga2VybmluZyB3aXRoIC5hZm0gc3VwcG9ydCAqLworCisgICAgLyogZ2V0IHN0eWxlIG5hbWUgLS0gYmUgY2FyZWZ1bCwgc29tZSBicm9rZW4gZm9udHMgb25seSAqLworICAgIC8qIGhhdmUgYSBgL0ZvbnROYW1lJyBkaWN0aW9uYXJ5IGVudHJ5ISAgICAgICAgICAgICAgICAgKi8KKyAgICByb290LT5mYW1pbHlfbmFtZSA9IGluZm8tPmZhbWlseV9uYW1lOworICAgIC8qIGFzc3VtZSAiUmVndWxhciIgc3R5bGUgaWYgd2UgZG9uJ3Qga25vdyBiZXR0ZXIgKi8KKyAgICByb290LT5zdHlsZV9uYW1lID0gKGNoYXIgKikiUmVndWxhciI7CisgICAgaWYgKCByb290LT5mYW1pbHlfbmFtZSApCisgICAgeworICAgICAgY2hhciogIGZ1bGwgICA9IGluZm8tPmZ1bGxfbmFtZTsKKyAgICAgIGNoYXIqICBmYW1pbHkgPSByb290LT5mYW1pbHlfbmFtZTsKKworCisgICAgICBpZiAoIGZ1bGwgKQorICAgICAgeworICAgICAgICB3aGlsZSAoICpmdWxsICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggKmZ1bGwgPT0gKmZhbWlseSApCisgICAgICAgICAgeworICAgICAgICAgICAgZmFtaWx5Kys7CisgICAgICAgICAgICBmdWxsKys7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICpmdWxsID09ICcgJyB8fCAqZnVsbCA9PSAnLScgKQorICAgICAgICAgICAgICBmdWxsKys7CisgICAgICAgICAgICBlbHNlIGlmICggKmZhbWlseSA9PSAnICcgfHwgKmZhbWlseSA9PSAnLScgKQorICAgICAgICAgICAgICBmYW1pbHkrKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCAhKmZhbWlseSApCisgICAgICAgICAgICAgICAgcm9vdC0+c3R5bGVfbmFtZSA9IGZ1bGw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogZG8gd2UgaGF2ZSBhIGAvRm9udE5hbWUnPyAqLworICAgICAgaWYgKCB0eXBlMS0+Zm9udF9uYW1lICkKKyAgICAgICAgcm9vdC0+ZmFtaWx5X25hbWUgPSB0eXBlMS0+Zm9udF9uYW1lOworICAgIH0KKworICAgIC8qIG5vIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0ICovCisgICAgcm9vdC0+bnVtX2ZpeGVkX3NpemVzID0gMDsKKyAgICByb290LT5hdmFpbGFibGVfc2l6ZXMgPSBOVUxMOworCisgICAgLyogTG9hZCB0aGUgVFRGIGZvbnQgZW1iZWRkZWQgaW4gdGhlIFQ0MiBmb250ICovCisgICAgeworICAgICAgRlRfT3Blbl9BcmdzICBhcmdzOworCisKKyAgICAgIGFyZ3MuZmxhZ3MgICAgICAgPSBGVF9PUEVOX01FTU9SWSB8IEZUX09QRU5fRFJJVkVSOworICAgICAgYXJncy5kcml2ZXIgICAgICA9IEZUX0dldF9Nb2R1bGUoIEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnVldHlwZSIgKTsKKyAgICAgIGFyZ3MubWVtb3J5X2Jhc2UgPSBmYWNlLT50dGZfZGF0YTsKKyAgICAgIGFyZ3MubWVtb3J5X3NpemUgPSBmYWNlLT50dGZfc2l6ZTsKKworICAgICAgaWYgKCBudW1fcGFyYW1zICkKKyAgICAgIHsKKyAgICAgICAgYXJncy5mbGFncyAgICAgfD0gRlRfT1BFTl9QQVJBTVM7CisgICAgICAgIGFyZ3MubnVtX3BhcmFtcyA9IG51bV9wYXJhbXM7CisgICAgICAgIGFyZ3MucGFyYW1zICAgICA9IHBhcmFtczsKKyAgICAgIH0KKworICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmdzLCAwLCAmZmFjZS0+dHRmX2ZhY2UgKTsKKyAgICB9CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIEZUX0RvbmVfU2l6ZSggZmFjZS0+dHRmX2ZhY2UtPnNpemUgKTsKKworICAgIC8qIElnbm9yZSBpbmZvIGluIEZvbnRJbmZvIGRpY3Rpb25hcnkgYW5kIHVzZSB0aGUgaW5mbyBmcm9tIHRoZSAgKi8KKyAgICAvKiBsb2FkZWQgVFRGIGZvbnQuICBUaGUgUG9zdFNjcmlwdCBpbnRlcnByZXRlciBhbHNvIGlnbm9yZXMgaXQuICovCisgICAgcm9vdC0+YmJveCAgICAgICAgID0gZmFjZS0+dHRmX2ZhY2UtPmJib3g7CisgICAgcm9vdC0+dW5pdHNfcGVyX0VNID0gZmFjZS0+dHRmX2ZhY2UtPnVuaXRzX3Blcl9FTTsKKworICAgIHJvb3QtPmFzY2VuZGVyICA9IGZhY2UtPnR0Zl9mYWNlLT5hc2NlbmRlcjsKKyAgICByb290LT5kZXNjZW5kZXIgPSBmYWNlLT50dGZfZmFjZS0+ZGVzY2VuZGVyOworICAgIHJvb3QtPmhlaWdodCAgICA9IGZhY2UtPnR0Zl9mYWNlLT5oZWlnaHQ7CisKKyAgICByb290LT5tYXhfYWR2YW5jZV93aWR0aCAgPSBmYWNlLT50dGZfZmFjZS0+bWF4X2FkdmFuY2Vfd2lkdGg7CisgICAgcm9vdC0+bWF4X2FkdmFuY2VfaGVpZ2h0ID0gZmFjZS0+dHRmX2ZhY2UtPm1heF9hZHZhbmNlX2hlaWdodDsKKworICAgIHJvb3QtPnVuZGVybGluZV9wb3NpdGlvbiAgPSAoRlRfU2hvcnQpaW5mby0+dW5kZXJsaW5lX3Bvc2l0aW9uOworICAgIHJvb3QtPnVuZGVybGluZV90aGlja25lc3MgPSAoRlRfU2hvcnQpaW5mby0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKworICAgIC8qIGNvbXB1dGUgc3R5bGUgZmxhZ3MgKi8KKyAgICByb290LT5zdHlsZV9mbGFncyA9IDA7CisgICAgaWYgKCBpbmZvLT5pdGFsaWNfYW5nbGUgKQorICAgICAgcm9vdC0+c3R5bGVfZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CisKKyAgICBpZiAoIGZhY2UtPnR0Zl9mYWNlLT5zdHlsZV9mbGFncyAmIEZUX1NUWUxFX0ZMQUdfQk9MRCApCisgICAgICByb290LT5zdHlsZV9mbGFncyB8PSBGVF9TVFlMRV9GTEFHX0JPTEQ7CisKKyAgICBpZiAoIGZhY2UtPnR0Zl9mYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMICkKKyAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMOworCisgICAgeworICAgICAgaWYgKCBwc25hbWVzICkKKyAgICAgIHsKKyAgICAgICAgRlRfQ2hhck1hcFJlYyAgICBjaGFybWFwOworICAgICAgICBUMV9DTWFwX0NsYXNzZXMgIGNtYXBfY2xhc3NlcyA9IHBzYXV4LT50MV9jbWFwX2NsYXNzZXM7CisgICAgICAgIEZUX0NNYXBfQ2xhc3MgICAgY2xheno7CisKKworICAgICAgICBjaGFybWFwLmZhY2UgPSByb290OworCisgICAgICAgIC8qIGZpcnN0IG9mIGFsbCwgdHJ5IHRvIHN5bnRoZXNpemUgYSBVbmljb2RlIGNoYXJtYXAgKi8KKyAgICAgICAgY2hhcm1hcC5wbGF0Zm9ybV9pZCA9IFRUX1BMQVRGT1JNX01JQ1JPU09GVDsKKyAgICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX01TX0lEX1VOSUNPREVfQ1M7CisgICAgICAgIGNoYXJtYXAuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19VTklDT0RFOworCisgICAgICAgIGVycm9yID0gRlRfQ01hcF9OZXcoIGNtYXBfY2xhc3Nlcy0+dW5pY29kZSwgTlVMTCwgJmNoYXJtYXAsIE5VTEwgKTsKKyAgICAgICAgaWYgKCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBGVF9FUlJfTkVRKCBlcnJvciwgTm9fVW5pY29kZV9HbHlwaF9OYW1lICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICAgICAgLyogbm93LCBnZW5lcmF0ZSBhbiBBZG9iZSBTdGFuZGFyZCBlbmNvZGluZyB3aGVuIGFwcHJvcHJpYXRlICovCisgICAgICAgIGNoYXJtYXAucGxhdGZvcm1faWQgPSBUVF9QTEFURk9STV9BRE9CRTsKKyAgICAgICAgY2xhenogICAgICAgICAgICAgICA9IE5VTEw7CisKKyAgICAgICAgc3dpdGNoICggdHlwZTEtPmVuY29kaW5nX3R5cGUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVDFfRU5DT0RJTkdfVFlQRV9TVEFOREFSRDoKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQ7CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX0FET0JFX0lEX1NUQU5EQVJEOworICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSBjbWFwX2NsYXNzZXMtPnN0YW5kYXJkOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQ6CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVDsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfQURPQkVfSURfRVhQRVJUOworICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSBjbWFwX2NsYXNzZXMtPmV4cGVydDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFQxX0VOQ09ESU5HX1RZUEVfQVJSQVk6CisgICAgICAgICAgY2hhcm1hcC5lbmNvZGluZyAgICA9IEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTTsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfQURPQkVfSURfQ1VTVE9NOworICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSBjbWFwX2NsYXNzZXMtPmN1c3RvbTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFQxX0VOQ09ESU5HX1RZUEVfSVNPTEFUSU4xOgorICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xOworICAgICAgICAgIGNoYXJtYXAuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9MQVRJTl8xOworICAgICAgICAgIGNsYXp6ICAgICAgICAgICAgICAgPSBjbWFwX2NsYXNzZXMtPnVuaWNvZGU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGNsYXp6ICkKKyAgICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCBjbGF6eiwgTlVMTCwgJmNoYXJtYXAsIE5VTEwgKTsKKworI2lmIDAKKyAgICAgICAgLyogU2VsZWN0IGRlZmF1bHQgY2hhcm1hcCAqLworICAgICAgICBpZiAoIHJvb3QtPm51bV9jaGFybWFwcyApCisgICAgICAgICAgcm9vdC0+Y2hhcm1hcCA9IHJvb3QtPmNoYXJtYXBzWzBdOworI2VuZGlmCisgICAgICB9CisgICAgfQorICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVDQyX0ZhY2VfRG9uZSggRlRfRmFjZSAgdDQyZmFjZSApCisgIHsKKyAgICBUNDJfRmFjZSAgICAgZmFjZSA9IChUNDJfRmFjZSl0NDJmYWNlOworICAgIFQxX0ZvbnQgICAgICB0eXBlMTsKKyAgICBQU19Gb250SW5mbyAgaW5mbzsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybjsKKworICAgIHR5cGUxICA9ICZmYWNlLT50eXBlMTsKKyAgICBpbmZvICAgPSAmdHlwZTEtPmZvbnRfaW5mbzsKKyAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIC8qIGRlbGV0ZSBpbnRlcm5hbCB0dGYgZmFjZSBwcmlvciB0byBmcmVlaW5nIGZhY2UtPnR0Zl9kYXRhICovCisgICAgaWYgKCBmYWNlLT50dGZfZmFjZSApCisgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UtPnR0Zl9mYWNlICk7CisKKyAgICAvKiByZWxlYXNlIGZvbnQgaW5mbyBzdHJpbmdzICovCisgICAgRlRfRlJFRSggaW5mby0+dmVyc2lvbiApOworICAgIEZUX0ZSRUUoIGluZm8tPm5vdGljZSApOworICAgIEZUX0ZSRUUoIGluZm8tPmZ1bGxfbmFtZSApOworICAgIEZUX0ZSRUUoIGluZm8tPmZhbWlseV9uYW1lICk7CisgICAgRlRfRlJFRSggaW5mby0+d2VpZ2h0ICk7CisKKyAgICAvKiByZWxlYXNlIHRvcCBkaWN0aW9uYXJ5ICovCisgICAgRlRfRlJFRSggdHlwZTEtPmNoYXJzdHJpbmdzX2xlbiApOworICAgIEZUX0ZSRUUoIHR5cGUxLT5jaGFyc3RyaW5ncyApOworICAgIEZUX0ZSRUUoIHR5cGUxLT5nbHlwaF9uYW1lcyApOworCisgICAgRlRfRlJFRSggdHlwZTEtPmNoYXJzdHJpbmdzX2Jsb2NrICk7CisgICAgRlRfRlJFRSggdHlwZTEtPmdseXBoX25hbWVzX2Jsb2NrICk7CisKKyAgICBGVF9GUkVFKCB0eXBlMS0+ZW5jb2RpbmcuY2hhcl9pbmRleCApOworICAgIEZUX0ZSRUUoIHR5cGUxLT5lbmNvZGluZy5jaGFyX25hbWUgKTsKKyAgICBGVF9GUkVFKCB0eXBlMS0+Zm9udF9uYW1lICk7CisKKyAgICBGVF9GUkVFKCBmYWNlLT50dGZfZGF0YSApOworCisjaWYgMAorICAgIC8qIHJlbGVhc2UgYWZtIGRhdGEgaWYgcHJlc2VudCAqLworICAgIGlmICggZmFjZS0+YWZtX2RhdGEgKQorICAgICAgVDFfRG9uZV9BRk0oIG1lbW9yeSwgKFQxX0FGTSopZmFjZS0+YWZtX2RhdGEgKTsKKyNlbmRpZgorCisgICAgLyogcmVsZWFzZSB1bmljb2RlIG1hcCwgaWYgYW55ICovCisgICAgRlRfRlJFRSggZmFjZS0+dW5pY29kZV9tYXAubWFwcyApOworICAgIGZhY2UtPnVuaWNvZGVfbWFwLm51bV9tYXBzID0gMDsKKworICAgIGZhY2UtPnJvb3QuZmFtaWx5X25hbWUgPSBOVUxMOworICAgIGZhY2UtPnJvb3Quc3R5bGVfbmFtZSAgPSBOVUxMOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUNDJfRHJpdmVyX0luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIFR5cGUgNDIgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkcml2ZXIgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUNDJfRHJpdmVyX0luaXQoIEZUX01vZHVsZSAgbW9kdWxlICkgICAgICAgIC8qIFQ0Ml9Ecml2ZXIgKi8KKyAgeworICAgIFQ0Ml9Ecml2ZXIgIGRyaXZlciA9IChUNDJfRHJpdmVyKW1vZHVsZTsKKyAgICBGVF9Nb2R1bGUgICB0dG1vZHVsZTsKKworCisgICAgdHRtb2R1bGUgPSBGVF9HZXRfTW9kdWxlKCBtb2R1bGUtPmxpYnJhcnksICJ0cnVldHlwZSIgKTsKKyAgICBpZiAoICF0dG1vZHVsZSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiVDQyX0RyaXZlcl9Jbml0OiBjYW5ub3QgYWNjZXNzIGB0cnVldHlwZScgbW9kdWxlXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX01vZHVsZSApOworICAgIH0KKworICAgIGRyaXZlci0+dHRjbGF6eiA9IChGVF9Ecml2ZXJfQ2xhc3MpdHRtb2R1bGUtPmNsYXp6OworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgVDQyX0RyaXZlcl9Eb25lKCBGVF9Nb2R1bGUgIG1vZHVsZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIG1vZHVsZSApOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDQyX1NpemVfSW5pdCggRlRfU2l6ZSAgc2l6ZSApICAgICAgICAgLyogVDQyX1NpemUgKi8KKyAgeworICAgIFQ0Ml9TaXplICB0NDJzaXplID0gKFQ0Ml9TaXplKXNpemU7CisgICAgRlRfRmFjZSAgIGZhY2UgICAgPSBzaXplLT5mYWNlOworICAgIFQ0Ml9GYWNlICB0NDJmYWNlID0gKFQ0Ml9GYWNlKWZhY2U7CisgICAgRlRfU2l6ZSAgIHR0c2l6ZTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gRlRfTmV3X1NpemUoIHQ0MmZhY2UtPnR0Zl9mYWNlLCAmdHRzaXplICk7CisgICAgdDQyc2l6ZS0+dHRzaXplID0gdHRzaXplOworCisgICAgRlRfQWN0aXZhdGVfU2l6ZSggdHRzaXplICk7CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBUNDJfU2l6ZV9SZXF1ZXN0KCBGVF9TaXplICAgICAgICAgIHQ0MnNpemUsICAgICAgLyogVDQyX1NpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgVDQyX1NpemUgIHNpemUgPSAoVDQyX1NpemUpdDQyc2l6ZTsKKyAgICBUNDJfRmFjZSAgZmFjZSA9IChUNDJfRmFjZSl0NDJzaXplLT5mYWNlOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgRlRfQWN0aXZhdGVfU2l6ZSggc2l6ZS0+dHRzaXplICk7CisKKyAgICBlcnJvciA9IEZUX1JlcXVlc3RfU2l6ZSggZmFjZS0+dHRmX2ZhY2UsIHJlcSApOworICAgIGlmICggIWVycm9yICkKKyAgICAgIHQ0MnNpemUtPm1ldHJpY3MgPSBmYWNlLT50dGZfZmFjZS0+c2l6ZS0+bWV0cmljczsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQ0Ml9TaXplX1NlbGVjdCggRlRfU2l6ZSAgIHQ0MnNpemUsICAgICAgICAgLyogVDQyX1NpemUgKi8KKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgc3RyaWtlX2luZGV4ICkKKyAgeworICAgIFQ0Ml9TaXplICBzaXplID0gKFQ0Ml9TaXplKXQ0MnNpemU7CisgICAgVDQyX0ZhY2UgIGZhY2UgPSAoVDQyX0ZhY2UpdDQyc2l6ZS0+ZmFjZTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIEZUX0FjdGl2YXRlX1NpemUoIHNpemUtPnR0c2l6ZSApOworCisgICAgZXJyb3IgPSBGVF9TZWxlY3RfU2l6ZSggZmFjZS0+dHRmX2ZhY2UsIChGVF9JbnQpc3RyaWtlX2luZGV4ICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgdDQyc2l6ZS0+bWV0cmljcyA9IGZhY2UtPnR0Zl9mYWNlLT5zaXplLT5tZXRyaWNzOworCisgICAgcmV0dXJuIGVycm9yOworCisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIFQ0Ml9TaXplX0RvbmUoIEZUX1NpemUgIHQ0MnNpemUgKSAgICAgICAgICAgICAvKiBUNDJfU2l6ZSAqLworICB7CisgICAgVDQyX1NpemUgICAgIHNpemUgICAgPSAoVDQyX1NpemUpdDQyc2l6ZTsKKyAgICBGVF9GYWNlICAgICAgZmFjZSAgICA9IHQ0MnNpemUtPmZhY2U7CisgICAgVDQyX0ZhY2UgICAgIHQ0MmZhY2UgPSAoVDQyX0ZhY2UpZmFjZTsKKyAgICBGVF9MaXN0Tm9kZSAgbm9kZTsKKworCisgICAgbm9kZSA9IEZUX0xpc3RfRmluZCggJnQ0MmZhY2UtPnR0Zl9mYWNlLT5zaXplc19saXN0LCBzaXplLT50dHNpemUgKTsKKyAgICBpZiAoIG5vZGUgKQorICAgIHsKKyAgICAgIEZUX0RvbmVfU2l6ZSggc2l6ZS0+dHRzaXplICk7CisgICAgICBzaXplLT50dHNpemUgPSBOVUxMOworICAgIH0KKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQ0Ml9HbHlwaFNsb3RfSW5pdCggRlRfR2x5cGhTbG90ICB0NDJzbG90ICkgICAgICAgIC8qIFQ0Ml9HbHlwaFNsb3QgKi8KKyAgeworICAgIFQ0Ml9HbHlwaFNsb3QgIHNsb3QgICAgPSAoVDQyX0dseXBoU2xvdCl0NDJzbG90OworICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgICAgPSB0NDJzbG90LT5mYWNlOworICAgIFQ0Ml9GYWNlICAgICAgIHQ0MmZhY2UgPSAoVDQyX0ZhY2UpZmFjZTsKKyAgICBGVF9HbHlwaFNsb3QgICB0dHNsb3Q7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3IgICA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBmYWNlLT5nbHlwaCA9PSBOVUxMICkKKyAgICB7CisgICAgICAvKiBGaXJzdCBnbHlwaCBzbG90IGZvciB0aGlzIGZhY2UgKi8KKyAgICAgIHNsb3QtPnR0c2xvdCA9IHQ0MmZhY2UtPnR0Zl9mYWNlLT5nbHlwaDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfTmV3X0dseXBoU2xvdCggdDQyZmFjZS0+dHRmX2ZhY2UsICZ0dHNsb3QgKTsKKyAgICAgIHNsb3QtPnR0c2xvdCA9IHR0c2xvdDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIFQ0Ml9HbHlwaFNsb3RfRG9uZSggRlRfR2x5cGhTbG90ICB0NDJzbG90ICkgICAgICAgLyogVDQyX0dseXBoU2xvdCAqLworICB7CisgICAgVDQyX0dseXBoU2xvdCAgc2xvdCA9IChUNDJfR2x5cGhTbG90KXQ0MnNsb3Q7CisKKworICAgIEZUX0RvbmVfR2x5cGhTbG90KCBzbG90LT50dHNsb3QgKTsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdDQyX2dseXBoc2xvdF9jbGVhciggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgeworICAgIC8qIGZyZWUgYml0bWFwIGlmIG5lZWRlZCAqLworICAgIGZ0X2dseXBoc2xvdF9mcmVlX2JpdG1hcCggc2xvdCApOworCisgICAgLyogY2xlYXIgYWxsIHB1YmxpYyBmaWVsZHMgaW4gdGhlIGdseXBoIHNsb3QgKi8KKyAgICBGVF9aRVJPKCAmc2xvdC0+bWV0cmljcyApOworICAgIEZUX1pFUk8oICZzbG90LT5vdXRsaW5lICk7CisgICAgRlRfWkVSTyggJnNsb3QtPmJpdG1hcCApOworCisgICAgc2xvdC0+Yml0bWFwX2xlZnQgICA9IDA7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgICA9IDA7CisgICAgc2xvdC0+bnVtX3N1YmdseXBocyA9IDA7CisgICAgc2xvdC0+c3ViZ2x5cGhzICAgICA9IE5VTEw7CisgICAgc2xvdC0+Y29udHJvbF9kYXRhICA9IE5VTEw7CisgICAgc2xvdC0+Y29udHJvbF9sZW4gICA9IDA7CisgICAgc2xvdC0+b3RoZXIgICAgICAgICA9IE5VTEw7CisgICAgc2xvdC0+Zm9ybWF0ICAgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9OT05FOworCisgICAgc2xvdC0+bGluZWFySG9yaUFkdmFuY2UgPSAwOworICAgIHNsb3QtPmxpbmVhclZlcnRBZHZhbmNlID0gMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIFQ0Ml9HbHlwaFNsb3RfTG9hZCggRlRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKKyAgICBUNDJfR2x5cGhTbG90ICAgIHQ0MnNsb3QgPSAoVDQyX0dseXBoU2xvdClnbHlwaDsKKyAgICBUNDJfU2l6ZSAgICAgICAgIHQ0MnNpemUgPSAoVDQyX1NpemUpc2l6ZTsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIHR0Y2xhenogPSAoKFQ0Ml9Ecml2ZXIpZ2x5cGgtPmZhY2UtPmRyaXZlciktPnR0Y2xheno7CisKKworICAgIEZUX1RSQUNFMSgoICJUNDJfR2x5cGhTbG90X0xvYWQ6IGdseXBoIGluZGV4ICVkXG4iLCBnbHlwaF9pbmRleCApKTsKKworICAgIHQ0Ml9nbHlwaHNsb3RfY2xlYXIoIHQ0MnNsb3QtPnR0c2xvdCApOworICAgIGVycm9yID0gdHRjbGF6ei0+bG9hZF9nbHlwaCggdDQyc2xvdC0+dHRzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDQyc2l6ZS0+dHRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzIHwgRlRfTE9BRF9OT19CSVRNQVAgKTsKKworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBnbHlwaC0+bWV0cmljcyA9IHQ0MnNsb3QtPnR0c2xvdC0+bWV0cmljczsKKworICAgICAgZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlID0gdDQyc2xvdC0+dHRzbG90LT5saW5lYXJIb3JpQWR2YW5jZTsKKyAgICAgIGdseXBoLT5saW5lYXJWZXJ0QWR2YW5jZSA9IHQ0MnNsb3QtPnR0c2xvdC0+bGluZWFyVmVydEFkdmFuY2U7CisKKyAgICAgIGdseXBoLT5mb3JtYXQgID0gdDQyc2xvdC0+dHRzbG90LT5mb3JtYXQ7CisgICAgICBnbHlwaC0+b3V0bGluZSA9IHQ0MnNsb3QtPnR0c2xvdC0+b3V0bGluZTsKKworICAgICAgZ2x5cGgtPmJpdG1hcCAgICAgID0gdDQyc2xvdC0+dHRzbG90LT5iaXRtYXA7CisgICAgICBnbHlwaC0+Yml0bWFwX2xlZnQgPSB0NDJzbG90LT50dHNsb3QtPmJpdG1hcF9sZWZ0OworICAgICAgZ2x5cGgtPmJpdG1hcF90b3AgID0gdDQyc2xvdC0+dHRzbG90LT5iaXRtYXBfdG9wOworCisgICAgICBnbHlwaC0+bnVtX3N1YmdseXBocyA9IHQ0MnNsb3QtPnR0c2xvdC0+bnVtX3N1YmdseXBoczsKKyAgICAgIGdseXBoLT5zdWJnbHlwaHMgICAgID0gdDQyc2xvdC0+dHRzbG90LT5zdWJnbHlwaHM7CisKKyAgICAgIGdseXBoLT5jb250cm9sX2RhdGEgID0gdDQyc2xvdC0+dHRzbG90LT5jb250cm9sX2RhdGE7CisgICAgICBnbHlwaC0+Y29udHJvbF9sZW4gICA9IHQ0MnNsb3QtPnR0c2xvdC0+Y29udHJvbF9sZW47CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJvYmpzLmggYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJvYmpzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyMmM2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0Mm9ianMuaApAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDQyb2Jqcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgNDIgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9fVDQyT0JKU19IX18KKyNkZWZpbmUgX19UNDJPQkpTX0hfXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSAidDQydHlwZXMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qIFR5cGU0MiBzaXplICovCisgIHR5cGVkZWYgc3RydWN0ICBUNDJfU2l6ZVJlY18KKyAgeworICAgIEZUX1NpemVSZWMgIHJvb3Q7CisgICAgRlRfU2l6ZSAgICAgdHRzaXplOworCisgIH0gVDQyX1NpemVSZWMsICpUNDJfU2l6ZTsKKworCisgIC8qIFR5cGU0MiBzbG90ICovCisgIHR5cGVkZWYgc3RydWN0ICBUNDJfR2x5cGhTbG90UmVjXworICB7CisgICAgRlRfR2x5cGhTbG90UmVjICByb290OworICAgIEZUX0dseXBoU2xvdCAgICAgdHRzbG90OworCisgIH0gVDQyX0dseXBoU2xvdFJlYywgKlQ0Ml9HbHlwaFNsb3Q7CisKKworICAvKiBUeXBlIDQyIGRyaXZlciAqLworICB0eXBlZGVmIHN0cnVjdCAgVDQyX0RyaXZlclJlY18KKyAgeworICAgIEZUX0RyaXZlclJlYyAgICAgcm9vdDsKKyAgICBGVF9Ecml2ZXJfQ2xhc3MgIHR0Y2xheno7CisKKyAgfSBUNDJfRHJpdmVyUmVjLCAqVDQyX0RyaXZlcjsKKworCisgIC8qICovCisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUNDJfRmFjZV9Jbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUNDJfRmFjZV9Eb25lKCBGVF9GYWNlICBmYWNlICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUNDJfU2l6ZV9Jbml0KCBGVF9TaXplICBzaXplICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUNDJfU2l6ZV9SZXF1ZXN0KCBGVF9TaXplICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUNDJfU2l6ZV9TZWxlY3QoIEZUX1NpemUgICBzaXplLAorICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBzdHJpa2VfaW5kZXggKTsKKworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgVDQyX1NpemVfRG9uZSggRlRfU2l6ZSAgc2l6ZSApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgVDQyX0dseXBoU2xvdF9Jbml0KCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFQ0Ml9HbHlwaFNsb3RfTG9hZCggRlRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIFQ0Ml9HbHlwaFNsb3RfRG9uZSggRlRfR2x5cGhTbG90ICBzbG90ICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUNDJfRHJpdmVyX0luaXQoIEZUX01vZHVsZSAgbW9kdWxlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBUNDJfRHJpdmVyX0RvbmUoIEZUX01vZHVsZSAgbW9kdWxlICk7CisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fVDQyT0JKU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWU5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJwYXJzZS5jCkBAIC0wLDAgKzEsMTIzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdDQycGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFR5cGUgNDIgZm9udCBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAidDQycGFyc2UuaCIKKyNpbmNsdWRlICJ0NDJlcnJvci5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Q0MgorCisKKyAgc3RhdGljIHZvaWQKKyAgdDQyX3BhcnNlX2ZvbnRfbWF0cml4KCBUNDJfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFQ0Ml9Mb2FkZXIgIGxvYWRlciApOworICBzdGF0aWMgdm9pZAorICB0NDJfcGFyc2VfZW5jb2RpbmcoIFQ0Ml9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgVDQyX0xvYWRlciAgbG9hZGVyICk7CisKKyAgc3RhdGljIHZvaWQKKyAgdDQyX3BhcnNlX2NoYXJzdHJpbmdzKCBUNDJfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFQ0Ml9Mb2FkZXIgIGxvYWRlciApOworCisgIHN0YXRpYyB2b2lkCisgIHQ0Ml9wYXJzZV9zZm50cyggVDQyX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBUNDJfTG9hZGVyICBsb2FkZXIgKTsKKworCisgIC8qIGFzIFR5cGU0MiBmb250cyBoYXZlIG5vIFByaXZhdGUgZGljdCwgICAgICAgICAqLworICAvKiB3ZSBzZXQgdGhlIGxhc3QgYXJndW1lbnQgb2YgVDFfRklFTERfWFhYIHRvIDAgKi8KKyAgc3RhdGljIGNvbnN0CisgIFQxX0ZpZWxkUmVjICB0NDJfa2V5d29yZHNbXSA9CisgIHsKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUMV9Gb250SW5mbworI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0lORk8KKworICAgIFQxX0ZJRUxEX1NUUklORyggInZlcnNpb24iLCAgICAgICAgICAgIHZlcnNpb24sICAgICAgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX1NUUklORyggIk5vdGljZSIsICAgICAgICAgICAgIG5vdGljZSwgICAgICAgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX1NUUklORyggIkZ1bGxOYW1lIiwgICAgICAgICAgIGZ1bGxfbmFtZSwgICAgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX1NUUklORyggIkZhbWlseU5hbWUiLCAgICAgICAgIGZhbWlseV9uYW1lLCAgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX1NUUklORyggIldlaWdodCIsICAgICAgICAgICAgIHdlaWdodCwgICAgICAgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX05VTSAgICggIkl0YWxpY0FuZ2xlIiwgICAgICAgIGl0YWxpY19hbmdsZSwgICAgICAgIDAgKQorICAgIFQxX0ZJRUxEX0JPT0wgICggImlzRml4ZWRQaXRjaCIsICAgICAgIGlzX2ZpeGVkX3BpdGNoLCAgICAgIDAgKQorICAgIFQxX0ZJRUxEX05VTSAgICggIlVuZGVybGluZVBvc2l0aW9uIiwgIHVuZGVybGluZV9wb3NpdGlvbiwgIDAgKQorICAgIFQxX0ZJRUxEX05VTSAgICggIlVuZGVybGluZVRoaWNrbmVzcyIsIHVuZGVybGluZV90aGlja25lc3MsIDAgKQorCisjdW5kZWYgIEZUX1NUUlVDVFVSRQorI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFBTX0ZvbnRFeHRyYVJlYworI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0VYVFJBCisKKyAgICBUMV9GSUVMRF9OVU0gICAoICJGU1R5cGUiLCAgICAgICAgICAgICBmc190eXBlLCAgICAgICAgICAgICAwICkKKworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBUMV9Gb250UmVjCisjdW5kZWYgIFQxQ09ERQorI2RlZmluZSBUMUNPREUgICAgICAgIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRElDVAorCisgICAgVDFfRklFTERfS0VZICAoICJGb250TmFtZSIsICAgIGZvbnRfbmFtZSwgICAgMCApCisgICAgVDFfRklFTERfTlVNICAoICJQYWludFR5cGUiLCAgIHBhaW50X3R5cGUsICAgMCApCisgICAgVDFfRklFTERfTlVNICAoICJGb250VHlwZSIsICAgIGZvbnRfdHlwZSwgICAgMCApCisgICAgVDFfRklFTERfRklYRUQoICJTdHJva2VXaWR0aCIsIHN0cm9rZV93aWR0aCwgMCApCisKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgRlRfQkJveAorI3VuZGVmICBUMUNPREUKKyNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9CQk9YCisKKyAgICBUMV9GSUVMRF9CQk9YKCJGb250QkJveCIsIHhNaW4sIDAgKQorCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJGb250TWF0cml4IiwgIHQ0Ml9wYXJzZV9mb250X21hdHJpeCwgMCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJFbmNvZGluZyIsICAgIHQ0Ml9wYXJzZV9lbmNvZGluZywgICAgMCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJDaGFyU3RyaW5ncyIsIHQ0Ml9wYXJzZV9jaGFyc3RyaW5ncywgMCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJzZm50cyIsICAgICAgIHQ0Ml9wYXJzZV9zZm50cywgICAgICAgMCApCisKKyAgICB7IDAsIFQxX0ZJRUxEX0xPQ0FUSU9OX0NJRF9JTkZPLCBUMV9GSUVMRF9UWVBFX05PTkUsIDAsIDAsIDAsIDAsIDAsIDAgfQorICB9OworCisKKyNkZWZpbmUgVDFfQWRkX1RhYmxlKCBwLCBpLCBvLCBsICkgIChwKS0+ZnVuY3MuYWRkKCAocCksIGksIG8sIGwgKQorI2RlZmluZSBUMV9SZWxlYXNlX1RhYmxlKCBwICkgICAgICAgICAgXAorICAgICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCAocCktPmZ1bmNzLnJlbGVhc2UgKSAgXAorICAgICAgICAgICAgICAocCktPmZ1bmNzLnJlbGVhc2UoIHAgKTsgXAorICAgICAgICAgIH0gd2hpbGUgKCAwICkKKworI2RlZmluZSBUMV9Ta2lwX1NwYWNlcyggcCApICAgIChwKS0+cm9vdC5mdW5jcy5za2lwX3NwYWNlcyggJihwKS0+cm9vdCApCisjZGVmaW5lIFQxX1NraXBfUFNfVG9rZW4oIHAgKSAgKHApLT5yb290LmZ1bmNzLnNraXBfUFNfdG9rZW4oICYocCktPnJvb3QgKQorCisjZGVmaW5lIFQxX1RvSW50KCBwICkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3MudG9faW50KCAmKHApLT5yb290ICkKKyNkZWZpbmUgVDFfVG9CeXRlcyggcCwgYiwgbSwgbiwgZCApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHApLT5yb290LmZ1bmNzLnRvX2J5dGVzKCAmKHApLT5yb290LCBiLCBtLCBuLCBkICkKKworI2RlZmluZSBUMV9Ub0ZpeGVkQXJyYXkoIHAsIG0sIGYsIHQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3MudG9fZml4ZWRfYXJyYXkoICYocCktPnJvb3QsIG0sIGYsIHQgKQorI2RlZmluZSBUMV9Ub1Rva2VuKCBwLCB0ICkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAocCktPnJvb3QuZnVuY3MudG9fdG9rZW4oICYocCktPnJvb3QsIHQgKQorCisjZGVmaW5lIFQxX0xvYWRfRmllbGQoIHAsIGYsIG8sIG0sIHBmICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy5sb2FkX2ZpZWxkKCAmKHApLT5yb290LCBmLCBvLCBtLCBwZiApCisjZGVmaW5lIFQxX0xvYWRfRmllbGRfVGFibGUoIHAsIGYsIG8sIG0sIHBmICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChwKS0+cm9vdC5mdW5jcy5sb2FkX2ZpZWxkX3RhYmxlKCAmKHApLT5yb290LCBmLCBvLCBtLCBwZiApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqIFBhcnNpbmcgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdDQyX3BhcnNlcl9pbml0KCBUNDJfUGFyc2VyICAgICBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfTG9uZyAgIHNpemU7CisKKworICAgIHBzYXV4LT5wc19wYXJzZXJfZnVuY3MtPmluaXQoICZwYXJzZXItPnJvb3QsIE5VTEwsIE5VTEwsIG1lbW9yeSApOworCisgICAgcGFyc2VyLT5zdHJlYW0gICAgPSBzdHJlYW07CisgICAgcGFyc2VyLT5iYXNlX2xlbiAgPSAwOworICAgIHBhcnNlci0+YmFzZV9kaWN0ID0gTlVMTDsKKyAgICBwYXJzZXItPmluX21lbW9yeSA9IDA7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBIZXJlIGEgc2hvcnQgc3VtbWFyeSBvZiB3aGF0IGlzIGdvaW5nIG9uOiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIFdoZW4gY3JlYXRpbmcgYSBuZXcgVHlwZSA0MiBwYXJzZXIsIHdlIHRyeSB0byBsb2NhdGUgYW5kIGxvYWQgKi8KKyAgICAvKiAgIHRoZSBiYXNlIGRpY3Rpb25hcnksIGxvYWRpbmcgdGhlIHdob2xlIGZvbnQgaW50byBtZW1vcnkuICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIFdoZW4gYGxvYWRpbmcnIHRoZSBiYXNlIGRpY3Rpb25hcnksIHdlIG9ubHkgc2V0IHVwIHBvaW50ZXJzICAgKi8KKyAgICAvKiAgIGluIHRoZSBjYXNlIG9mIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS4gIE90aGVyd2lzZSwgd2UgYWxsb2NhdGUgKi8KKyAgICAvKiAgIGFuZCBsb2FkIHRoZSBiYXNlIGRpY3Rpb25hcnkgaW4gaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIHBhcnNlci0+aW5fbWVtb3J5IGlzIHNldCBpZiB3ZSBoYXZlIGEgbWVtb3J5IHN0cmVhbS4gICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDBMICkgfHwKKyAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCAxNyApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggZnRfbWVtY21wKCBzdHJlYW0tPmN1cnNvciwgIiUhUFMtVHJ1ZVR5cGVGb250IiwgMTcgKSAhPSAwICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiICBub3QgYSBUeXBlNDIgZm9udFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICBpZiAoIGVycm9yIHx8IEZUX1NUUkVBTV9TRUVLKCAwICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgc2l6ZSA9IChGVF9Mb25nKXN0cmVhbS0+c2l6ZTsKKworICAgIC8qIG5vdywgdHJ5IHRvIGxvYWQgYHNpemUnIGJ5dGVzIG9mIHRoZSBgYmFzZScgZGljdGlvbmFyeSB3ZSAqLworICAgIC8qIGZvdW5kIHByZXZpb3VzbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogaWYgaXQgaXMgYSBtZW1vcnktYmFzZWQgcmVzb3VyY2UsIHNldCB1cCBwb2ludGVycyAqLworICAgIGlmICggIXN0cmVhbS0+cmVhZCApCisgICAgeworICAgICAgcGFyc2VyLT5iYXNlX2RpY3QgPSAoRlRfQnl0ZSopc3RyZWFtLT5iYXNlICsgc3RyZWFtLT5wb3M7CisgICAgICBwYXJzZXItPmJhc2VfbGVuICA9IHNpemU7CisgICAgICBwYXJzZXItPmluX21lbW9yeSA9IDE7CisKKyAgICAgIC8qIGNoZWNrIHRoYXQgdGhlIGBzaXplJyBmaWVsZCBpcyB2YWxpZCAqLworICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggc2l6ZSApICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogcmVhZCBzZWdtZW50IGluIG1lbW9yeSAqLworICAgICAgaWYgKCBGVF9BTExPQyggcGFyc2VyLT5iYXNlX2RpY3QsIHNpemUgKSAgICAgICB8fAorICAgICAgICAgICBGVF9TVFJFQU1fUkVBRCggcGFyc2VyLT5iYXNlX2RpY3QsIHNpemUgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgcGFyc2VyLT5iYXNlX2xlbiA9IHNpemU7CisgICAgfQorCisgICAgcGFyc2VyLT5yb290LmJhc2UgICA9IHBhcnNlci0+YmFzZV9kaWN0OworICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBwYXJzZXItPmJhc2VfZGljdDsKKyAgICBwYXJzZXItPnJvb3QubGltaXQgID0gcGFyc2VyLT5yb290LmN1cnNvciArIHBhcnNlci0+YmFzZV9sZW47CisKKyAgRXhpdDoKKyAgICBpZiAoIGVycm9yICYmICFwYXJzZXItPmluX21lbW9yeSApCisgICAgICBGVF9GUkVFKCBwYXJzZXItPmJhc2VfZGljdCApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0NDJfcGFyc2VyX2RvbmUoIFQ0Ml9QYXJzZXIgIHBhcnNlciApCisgIHsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisKKworICAgIC8qIGZyZWUgdGhlIGJhc2UgZGljdGlvbmFyeSBvbmx5IHdoZW4gd2UgaGF2ZSBhIGRpc2sgc3RyZWFtICovCisgICAgaWYgKCAhcGFyc2VyLT5pbl9tZW1vcnkgKQorICAgICAgRlRfRlJFRSggcGFyc2VyLT5iYXNlX2RpY3QgKTsKKworICAgIHBhcnNlci0+cm9vdC5mdW5jcy5kb25lKCAmcGFyc2VyLT5yb290ICk7CisgIH0KKworCisgIHN0YXRpYyBpbnQKKyAgdDQyX2lzX3NwYWNlKCBGVF9CeXRlICBjICkKKyAgeworICAgIHJldHVybiAoIGMgPT0gJyAnICB8fCBjID09ICdcdCcgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZicgfHwKKyAgICAgICAgICAgICBjID09ICdcMCcgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICB0NDJfcGFyc2VfZm9udF9tYXRyaXgoIFQ0Ml9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgVDQyX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIFQ0Ml9QYXJzZXIgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKKyAgICBGVF9NYXRyaXgqICBtYXRyaXggPSAmZmFjZS0+dHlwZTEuZm9udF9tYXRyaXg7CisgICAgRlRfVmVjdG9yKiAgb2Zmc2V0ID0gJmZhY2UtPnR5cGUxLmZvbnRfb2Zmc2V0OworICAgIEZUX0ZhY2UgICAgIHJvb3QgICA9IChGVF9GYWNlKSZmYWNlLT5yb290OworICAgIEZUX0ZpeGVkICAgIHRlbXBbNl07CisgICAgRlRfRml4ZWQgICAgdGVtcF9zY2FsZTsKKyAgICBGVF9JbnQgICAgICByZXN1bHQ7CisKKworICAgIHJlc3VsdCA9IFQxX1RvRml4ZWRBcnJheSggcGFyc2VyLCA2LCB0ZW1wLCAzICk7CisKKyAgICBpZiAoIHJlc3VsdCA8IDYgKQorICAgIHsKKyAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGVtcF9zY2FsZSA9IEZUX0FCUyggdGVtcFszXSApOworCisgICAgaWYgKCB0ZW1wX3NjYWxlID09IDAgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInQxX3BhcnNlX2ZvbnRfbWF0cml4OiBpbnZhbGlkIGZvbnQgbWF0cml4XG4iICkpOworICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBTZXQgVW5pdHMgcGVyIEVNIGJhc2VkIG9uIEZvbnRNYXRyaXggdmFsdWVzLiAgV2Ugc2V0IHRoZSB2YWx1ZSB0byAqLworICAgIC8qIDEwMDAgLyB0ZW1wX3NjYWxlLCBiZWNhdXNlIHRlbXBfc2NhbGUgd2FzIGFscmVhZHkgbXVsdGlwbGllZCBieSAgICovCisgICAgLyogMTAwMCAoaW4gdDFfdG9maXhlZCwgZnJvbSBwc29ianMuYykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHJvb3QtPnVuaXRzX3Blcl9FTSA9IChGVF9VU2hvcnQpRlRfRGl2Rml4KCAxMDAwLCB0ZW1wX3NjYWxlICk7CisKKyAgICAvKiB3ZSBuZWVkIHRvIHNjYWxlIHRoZSB2YWx1ZXMgYnkgMS4wL3RlbXBfc2NhbGUgKi8KKyAgICBpZiAoIHRlbXBfc2NhbGUgIT0gMHgxMDAwMEwgKQorICAgIHsKKyAgICAgIHRlbXBbMF0gPSBGVF9EaXZGaXgoIHRlbXBbMF0sIHRlbXBfc2NhbGUgKTsKKyAgICAgIHRlbXBbMV0gPSBGVF9EaXZGaXgoIHRlbXBbMV0sIHRlbXBfc2NhbGUgKTsKKyAgICAgIHRlbXBbMl0gPSBGVF9EaXZGaXgoIHRlbXBbMl0sIHRlbXBfc2NhbGUgKTsKKyAgICAgIHRlbXBbNF0gPSBGVF9EaXZGaXgoIHRlbXBbNF0sIHRlbXBfc2NhbGUgKTsKKyAgICAgIHRlbXBbNV0gPSBGVF9EaXZGaXgoIHRlbXBbNV0sIHRlbXBfc2NhbGUgKTsKKyAgICAgIHRlbXBbM10gPSB0ZW1wWzNdIDwgMCA/IC0weDEwMDAwTCA6IDB4MTAwMDBMOworICAgIH0KKworICAgIG1hdHJpeC0+eHggPSB0ZW1wWzBdOworICAgIG1hdHJpeC0+eXggPSB0ZW1wWzFdOworICAgIG1hdHJpeC0+eHkgPSB0ZW1wWzJdOworICAgIG1hdHJpeC0+eXkgPSB0ZW1wWzNdOworCisgICAgLyogbm90ZSB0aGF0IHRoZSBvZmZzZXRzIG11c3QgYmUgZXhwcmVzc2VkIGluIGludGVnZXIgZm9udCB1bml0cyAqLworICAgIG9mZnNldC0+eCA9IHRlbXBbNF0gPj4gMTY7CisgICAgb2Zmc2V0LT55ID0gdGVtcFs1XSA+PiAxNjsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgdDQyX3BhcnNlX2VuY29kaW5nKCBUNDJfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIFQ0Ml9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUNDJfUGFyc2VyICBwYXJzZXIgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgRlRfQnl0ZSogICAgY3VyOworICAgIEZUX0J5dGUqICAgIGxpbWl0ICA9IHBhcnNlci0+cm9vdC5saW1pdDsKKworICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworCisKKyAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICBpZiAoIGN1ciA+PSBsaW1pdCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidDQyX3BhcnNlX2VuY29kaW5nOiBvdXQgb2YgYm91bmRzXG4iICkpOworICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBpZiB3ZSBoYXZlIGEgbnVtYmVyIG9yIGBbJywgdGhlIGVuY29kaW5nIGlzIGFuIGFycmF5LCAqLworICAgIC8qIGFuZCB3ZSBtdXN0IGxvYWQgaXQgbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmdF9pc2RpZ2l0KCAqY3VyICkgfHwgKmN1ciA9PSAnWycgKQorICAgIHsKKyAgICAgIFQxX0VuY29kaW5nICBlbmNvZGUgICAgICAgICAgPSAmZmFjZS0+dHlwZTEuZW5jb2Rpbmc7CisgICAgICBGVF9JbnQgICAgICAgY291bnQsIG47CisgICAgICBQU19UYWJsZSAgICAgY2hhcl90YWJsZSAgICAgID0gJmxvYWRlci0+ZW5jb2RpbmdfdGFibGU7CisgICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICAgICAgICAgID0gcGFyc2VyLT5yb290Lm1lbW9yeTsKKyAgICAgIEZUX0Vycm9yICAgICBlcnJvcjsKKyAgICAgIEZUX0Jvb2wgICAgICBvbmx5X2ltbWVkaWF0ZXMgPSAwOworCisKKyAgICAgIC8qIHJlYWQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBlbmNvZGluZzsgc2hvdWxkIGJlIDI1NiAqLworICAgICAgaWYgKCAqY3VyID09ICdbJyApCisgICAgICB7CisgICAgICAgIGNvdW50ICAgICAgICAgICA9IDI1NjsKKyAgICAgICAgb25seV9pbW1lZGlhdGVzID0gMTsKKyAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvcisrOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBjb3VudCA9IChGVF9JbnQpVDFfVG9JbnQoIHBhcnNlciApOworCisgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisgICAgICBpZiAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPj0gbGltaXQgKQorICAgICAgICByZXR1cm47CisKKyAgICAgIC8qIHdlIHVzZSBhIFQxX1RhYmxlIHRvIHN0b3JlIG91ciBjaGFybmFtZXMgKi8KKyAgICAgIGxvYWRlci0+bnVtX2NoYXJzID0gZW5jb2RlLT5udW1fY2hhcnMgPSBjb3VudDsKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBlbmNvZGUtPmNoYXJfaW5kZXgsIGNvdW50ICkgICAgIHx8CisgICAgICAgICAgIEZUX05FV19BUlJBWSggZW5jb2RlLT5jaGFyX25hbWUsICBjb3VudCApICAgICB8fAorICAgICAgICAgICBGVF9TRVRfRVJST1IoIHBzYXV4LT5wc190YWJsZV9mdW5jcy0+aW5pdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdGFibGUsIGNvdW50LCBtZW1vcnkgKSApICkKKyAgICAgIHsKKyAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gZXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgLyogV2UgbmVlZCB0byBgemVybycgb3V0IGVuY29kaW5nX3RhYmxlLmVsZW1lbnRzICovCisgICAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKysgKQorICAgICAgeworICAgICAgICBjaGFyKiAgbm90ZGVmID0gKGNoYXIgKikiLm5vdGRlZiI7CisKKworICAgICAgICAodm9pZClUMV9BZGRfVGFibGUoIGNoYXJfdGFibGUsIG4sIG5vdGRlZiwgOCApOworICAgICAgfQorCisgICAgICAvKiBOb3cgd2UgbmVlZCB0byByZWFkIHJlY29yZHMgb2YgdGhlIGZvcm0gICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAuLi4gY2hhcmNvZGUgL2NoYXJuYW1lIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIGZvciBlYWNoIGVudHJ5IGluIG91ciB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBXZSBzaW1wbHkgbG9vayBmb3IgYSBudW1iZXIgZm9sbG93ZWQgYnkgYW4gaW1tZWRpYXRlICAgKi8KKyAgICAgIC8qIG5hbWUuICBOb3RlIHRoYXQgdGhpcyBpZ25vcmVzIGNvcnJlY3RseSB0aGUgc2VxdWVuY2UgICAqLworICAgICAgLyogdGhhdCBpcyBvZnRlbiBzZWVuIGluIHR5cGU0MiBmb250czogICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgMCAxIDI1NSB7IDEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXQgfSBmb3IgZHVwICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiB1c2VkIHRvIGNsZWFuIHRoZSBlbmNvZGluZyBhcnJheSBiZWZvcmUgYW55dGhpbmcgZWxzZS4gKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGFycmF5IGlzIGRpcmVjdGx5IGdpdmVuIGFzICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgL0VuY29kaW5nIFsgLi4uIF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiB3ZSBvbmx5IHJlYWQgaW1tZWRpYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgbiA9IDA7CisgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICAgIHdoaWxlICggcGFyc2VyLT5yb290LmN1cnNvciA8IGxpbWl0ICkKKyAgICAgIHsKKyAgICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKworICAgICAgICAvKiB3ZSBzdG9wIHdoZW4gd2UgZW5jb3VudGVyIGBkZWYnIG9yIGBdJyAqLworICAgICAgICBpZiAoICpjdXIgPT0gJ2QnICYmIGN1ciArIDMgPCBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGN1clsxXSA9PSAnZScgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGN1clsyXSA9PSAnZicgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIHQ0Ml9pc19zcGFjZSggY3VyWzNdICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNigoICJlbmNvZGluZyBlbmRcbiIgKSk7CisgICAgICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoICpjdXIgPT0gJ10nICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICJlbmNvZGluZyBlbmRcbiIgKSk7CisgICAgICAgICAgY3VyKys7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgZm91bmQgYW4gZW50cnkgKi8KKyAgICAgICAgaWYgKCBmdF9pc2RpZ2l0KCAqY3VyICkgfHwgb25seV9pbW1lZGlhdGVzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0ludCAgY2hhcmNvZGU7CisKKworICAgICAgICAgIGlmICggb25seV9pbW1lZGlhdGVzICkKKyAgICAgICAgICAgIGNoYXJjb2RlID0gbjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgY2hhcmNvZGUgPSAoRlRfSW50KVQxX1RvSW50KCBwYXJzZXIgKTsKKyAgICAgICAgICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworCisgICAgICAgICAgaWYgKCBjdXIgKyAyIDwgbGltaXQgJiYgKmN1ciA9PSAnLycgJiYgbiA8IGNvdW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBsZW47CisKKworICAgICAgICAgICAgY3VyKys7CisKKyAgICAgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBjdXI7CisgICAgICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA+PSBsaW1pdCApCisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKKworICAgICAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gVDFfQWRkX1RhYmxlKCBjaGFyX3RhYmxlLCBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLCBsZW4gKyAxICk7CisgICAgICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNoYXJfdGFibGUtPmVsZW1lbnRzW2NoYXJjb2RlXVtsZW5dID0gJ1wwJzsKKworICAgICAgICAgICAgbisrOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICggb25seV9pbW1lZGlhdGVzICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTaW5jZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBub3QgdXBkYXRlZCBmb3IgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBpbW1lZGlhdGVzLW9ubHkgbW9kZSB3ZSB3b3VsZCBnZXQgYW4gaW5maW5pdGUgbG9vcCBpZiAgICovCisgICAgICAgICAgICAvKiB3ZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBUaGlzIGVuY29kaW5nIGFycmF5IGlzIG5vdCB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUxICovCisgICAgICAgICAgICAvKiBzcGVjaWZpY2F0aW9uIChpdCBtaWdodCBiZSBhbiBlbmNvZGluZyBmb3IgYSBDSUQgdHlwZTEgICovCisgICAgICAgICAgICAvKiBmb250LCBob3dldmVyKSwgc28gd2UgY29uY2x1ZGUgdGhhdCB0aGlzIGZvbnQgaXMgTk9UIGEgICovCisgICAgICAgICAgICAvKiB0eXBlMSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisgICAgICB9CisKKyAgICAgIGZhY2UtPnR5cGUxLmVuY29kaW5nX3R5cGUgPSBUMV9FTkNPRElOR19UWVBFX0FSUkFZOworICAgICAgcGFyc2VyLT5yb290LmN1cnNvciAgICAgICA9IGN1cjsKKyAgICB9CisKKyAgICAvKiBPdGhlcndpc2UsIHdlIHNob3VsZCBoYXZlIGVpdGhlciBgU3RhbmRhcmRFbmNvZGluZycsICovCisgICAgLyogYEV4cGVydEVuY29kaW5nJywgb3IgYElTT0xhdGluMUVuY29kaW5nJyAgICAgICAgICAgICAqLworICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIGN1ciArIDE3IDwgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGZ0X3N0cm5jbXAoIChjb25zdCBjaGFyKiljdXIsICJTdGFuZGFyZEVuY29kaW5nIiwgMTYgKSA9PSAwICkKKyAgICAgICAgZmFjZS0+dHlwZTEuZW5jb2RpbmdfdHlwZSA9IFQxX0VOQ09ESU5HX1RZUEVfU1RBTkRBUkQ7CisKKyAgICAgIGVsc2UgaWYgKCBjdXIgKyAxNSA8IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICBmdF9zdHJuY21wKCAoY29uc3QgY2hhciopY3VyLCAiRXhwZXJ0RW5jb2RpbmciLCAxNCApID09IDAgKQorICAgICAgICBmYWNlLT50eXBlMS5lbmNvZGluZ190eXBlID0gVDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQ7CisKKyAgICAgIGVsc2UgaWYgKCBjdXIgKyAxOCA8IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICBmdF9zdHJuY21wKCAoY29uc3QgY2hhciopY3VyLCAiSVNPTGF0aW4xRW5jb2RpbmciLCAxNyApID09IDAgKQorICAgICAgICBmYWNlLT50eXBlMS5lbmNvZGluZ190eXBlID0gVDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjE7CisKKyAgICAgIGVsc2UKKyAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIElnbm9yZSApOworICAgIH0KKyAgfQorCisKKyAgdHlwZWRlZiBlbnVtICBUNDJfTG9hZF9TdGF0dXNfCisgIHsKKyAgICBCRUZPUkVfU1RBUlQsCisgICAgQkVGT1JFX1RBQkxFX0RJUiwKKyAgICBPVEhFUl9UQUJMRVMKKworICB9IFQ0Ml9Mb2FkX1N0YXR1czsKKworCisgIHN0YXRpYyB2b2lkCisgIHQ0Ml9wYXJzZV9zZm50cyggVDQyX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBUNDJfTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgVDQyX1BhcnNlciAgcGFyc2VyID0gJmxvYWRlci0+cGFyc2VyOworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisgICAgRlRfQnl0ZSogICAgY3VyOworICAgIEZUX0J5dGUqICAgIGxpbWl0ICA9IHBhcnNlci0+cm9vdC5saW1pdDsKKyAgICBGVF9FcnJvciAgICBlcnJvcjsKKyAgICBGVF9JbnQgICAgICBudW1fdGFibGVzID0gMDsKKyAgICBGVF9Mb25nICAgICBjb3VudDsKKworICAgIEZUX1VMb25nICAgIG4sIHN0cmluZ19zaXplLCBvbGRfc3RyaW5nX3NpemUsIHJlYWxfc2l6ZTsKKyAgICBGVF9CeXRlKiAgICBzdHJpbmdfYnVmID0gTlVMTDsKKyAgICBGVF9Cb29sICAgICBhbGxvY2F0ZWQgID0gMDsKKworICAgIFQ0Ml9Mb2FkX1N0YXR1cyAgc3RhdHVzOworCisKKyAgICAvKiBUaGUgZm9ybWF0IGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAvc2ZudHMgWyA8aGV4c3RyaW5nPiA8aGV4c3RyaW5nPiAuLi4gXSBkZWYgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIC9zZm50cyBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgPG51bV9iaW5fYnl0ZXM+IFJEIDxiaW5hcnkgZGF0YT4gICAgICAgICovCisgICAgLyogICAgICA8bnVtX2Jpbl9ieXRlcz4gUkQgPGJpbmFyeSBkYXRhPiAgICAgICAgKi8KKyAgICAvKiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgXSBkZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB3aXRoIGV4YWN0bHkgb25lIHNwYWNlIGFmdGVyIHRoZSBgUkQnIHRva2VuLiAqLworCisgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworCisgICAgaWYgKCBwYXJzZXItPnJvb3QuY3Vyc29yID49IGxpbWl0IHx8ICpwYXJzZXItPnJvb3QuY3Vyc29yKysgIT0gJ1snICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2Vfc2ZudHM6IGNhbid0IGZpbmQgYmVnaW4gb2Ygc2ZudHMgdmVjdG9yXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKyAgICBzdGF0dXMgICAgICAgICAgPSBCRUZPUkVfU1RBUlQ7CisgICAgc3RyaW5nX3NpemUgICAgID0gMDsKKyAgICBvbGRfc3RyaW5nX3NpemUgPSAwOworICAgIGNvdW50ICAgICAgICAgICA9IDA7CisKKyAgICB3aGlsZSAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPCBsaW1pdCApCisgICAgeworICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKworICAgICAgaWYgKCAqY3VyID09ICddJyApCisgICAgICB7CisgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IrKzsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBlbHNlIGlmICggKmN1ciA9PSAnPCcgKQorICAgICAgeworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgICAvKiBkb24ndCBpbmNsdWRlIGRlbGltaXRlcnMgKi8KKyAgICAgICAgc3RyaW5nX3NpemUgPSAoRlRfVUxvbmcpKCAoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgLSAyICsgMSApIC8gMiApOworICAgICAgICBpZiAoICFzdHJpbmdfc2l6ZSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2Vfc2ZudHM6IGludmFsaWQgZGF0YSBpbiBzZm50cyBhcnJheVxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBGYWlsOworICAgICAgICB9CisgICAgICAgIGlmICggRlRfUkVBTExPQyggc3RyaW5nX2J1Ziwgb2xkX3N0cmluZ19zaXplLCBzdHJpbmdfc2l6ZSApICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgYWxsb2NhdGVkID0gMTsKKworICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yID0gY3VyOworICAgICAgICAodm9pZClUMV9Ub0J5dGVzKCBwYXJzZXIsIHN0cmluZ19idWYsIHN0cmluZ19zaXplLCAmcmVhbF9zaXplLCAxICk7CisgICAgICAgIG9sZF9zdHJpbmdfc2l6ZSA9IHN0cmluZ19zaXplOworICAgICAgICBzdHJpbmdfc2l6ZSAgICAgPSByZWFsX3NpemU7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCBmdF9pc2RpZ2l0KCAqY3VyICkgKQorICAgICAgeworICAgICAgICBGVF9Mb25nICB0bXA7CisKKworICAgICAgICBpZiAoIGFsbG9jYXRlZCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2Vfc2ZudHM6ICIKKyAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBoYW5kbGUgbWl4ZWQgYmluYXJ5IGFuZCBoZXggc3RyaW5nc1xuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBGYWlsOworICAgICAgICB9CisKKyAgICAgICAgdG1wID0gVDFfVG9JbnQoIHBhcnNlciApOworICAgICAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAidDQyX3BhcnNlX3NmbnRzOiBpbnZhbGlkIHN0cmluZyBzaXplXG4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0cmluZ19zaXplID0gKEZUX1VMb25nKXRtcDsKKworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsgICAgICAgICAgICAgLyogYFJEJyAqLworICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0cmluZ19idWYgPSBwYXJzZXItPnJvb3QuY3Vyc29yICsgMTsgICAvKiBvbmUgc3BhY2UgYWZ0ZXIgYFJEJyAqLworCisgICAgICAgIGlmICggKEZUX1VMb25nKSggbGltaXQgLSBwYXJzZXItPnJvb3QuY3Vyc29yICkgPCBzdHJpbmdfc2l6ZSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2Vfc2ZudHM6IHRvbyBtdWNoIGJpbmFyeSBkYXRhXG4iICkpOworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgKz0gc3RyaW5nX3NpemUgKyAxOworICAgICAgfQorCisgICAgICBpZiAoICFzdHJpbmdfYnVmICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAidDQyX3BhcnNlX3NmbnRzOiBpbnZhbGlkIGRhdGEgaW4gc2ZudHMgYXJyYXlcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBGYWlsOworICAgICAgfQorCisgICAgICAvKiBBIHN0cmluZyBjYW4gaGF2ZSBhIHRyYWlsaW5nIHplcm8gKG9kZCkgYnl0ZSBmb3IgcGFkZGluZy4gKi8KKyAgICAgIC8qIElnbm9yZSBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAoIHN0cmluZ19zaXplICYgMSApICYmIHN0cmluZ19idWZbc3RyaW5nX3NpemUgLSAxXSA9PSAwICkKKyAgICAgICAgc3RyaW5nX3NpemUtLTsKKworICAgICAgaWYgKCAhc3RyaW5nX3NpemUgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2Vfc2ZudHM6IGludmFsaWQgc3RyaW5nXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgZm9yICggbiA9IDA7IG4gPCBzdHJpbmdfc2l6ZTsgbisrICkKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoICggc3RhdHVzICkKKyAgICAgICAgeworICAgICAgICBjYXNlIEJFRk9SRV9TVEFSVDoKKyAgICAgICAgICAvKiBsb2FkIG9mZnNldCB0YWJsZSwgMTIgYnl0ZXMgKi8KKyAgICAgICAgICBpZiAoIGNvdW50IDwgMTIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZhY2UtPnR0Zl9kYXRhW2NvdW50KytdID0gc3RyaW5nX2J1ZltuXTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtX3RhYmxlcyAgICAgPSAxNiAqIGZhY2UtPnR0Zl9kYXRhWzRdICsgZmFjZS0+dHRmX2RhdGFbNV07CisgICAgICAgICAgICBzdGF0dXMgICAgICAgICA9IEJFRk9SRV9UQUJMRV9ESVI7CisgICAgICAgICAgICBmYWNlLT50dGZfc2l6ZSA9IDEyICsgMTYgKiBudW1fdGFibGVzOworCisgICAgICAgICAgICBpZiAoIChGVF9Mb25nKSggbGltaXQgLSBwYXJzZXItPnJvb3QuY3Vyc29yICkgPCBmYWNlLT50dGZfc2l6ZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggInQ0Ml9wYXJzZV9zZm50czogaW52YWxpZCBkYXRhIGluIHNmbnRzIGFycmF5XG4iICkpOworICAgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBGVF9SRUFMTE9DKCBmYWNlLT50dGZfZGF0YSwgMTIsIGZhY2UtPnR0Zl9zaXplICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIGNhc2UgQkVGT1JFX1RBQkxFX0RJUjoKKyAgICAgICAgICAvKiB0aGUgb2Zmc2V0IHRhYmxlIGlzIHJlYWQ7IHJlYWQgdGhlIHRhYmxlIGRpcmVjdG9yeSAqLworICAgICAgICAgIGlmICggY291bnQgPCBmYWNlLT50dGZfc2l6ZSApCisgICAgICAgICAgeworICAgICAgICAgICAgZmFjZS0+dHRmX2RhdGFbY291bnQrK10gPSBzdHJpbmdfYnVmW25dOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgICAgICAgaTsKKyAgICAgICAgICAgIEZUX1VMb25nICBsZW47CisKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fdGFibGVzOyBpKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9CeXRlKiAgcCA9IGZhY2UtPnR0Zl9kYXRhICsgMTIgKyAxNiAqIGkgKyAxMjsKKworCisgICAgICAgICAgICAgIGxlbiA9IEZUX1BFRUtfVUxPTkcoIHAgKTsKKworICAgICAgICAgICAgICAvKiBQYWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkgbGVuZ3RoICovCisgICAgICAgICAgICAgIGZhY2UtPnR0Zl9zaXplICs9IChGVF9Mb25nKSggKCBsZW4gKyAzICkgJiB+M1UgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gT1RIRVJfVEFCTEVTOworCisgICAgICAgICAgICAvKiB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDI1NiB0YWJsZXMsIHNvIG5vIHNpemUgY2hlY2sgaGVyZSAqLworICAgICAgICAgICAgaWYgKCBGVF9SRUFMTE9DKCBmYWNlLT50dGZfZGF0YSwgMTIgKyAxNiAqIG51bV90YWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnR0Zl9zaXplICsgMSApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgICBjYXNlIE9USEVSX1RBQkxFUzoKKyAgICAgICAgICAvKiBhbGwgb3RoZXIgdGFibGVzIGFyZSBqdXN0IGNvcGllZCAqLworICAgICAgICAgIGlmICggY291bnQgPj0gZmFjZS0+dHRmX3NpemUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggInQ0Ml9wYXJzZV9zZm50czogdG9vIG11Y2ggYmluYXJ5IGRhdGFcbiIgKSk7CisgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgfQorICAgICAgICAgIGZhY2UtPnR0Zl9kYXRhW2NvdW50KytdID0gc3RyaW5nX2J1ZltuXTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisgICAgfQorCisgICAgLyogaWYgY29udHJvbCByZWFjaGVzIHRoaXMgcG9pbnQsIHRoZSBmb3JtYXQgd2FzIG5vdCB2YWxpZCAqLworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICBGYWlsOgorICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IGVycm9yOworCisgIEV4aXQ6CisgICAgaWYgKCBhbGxvY2F0ZWQgKQorICAgICAgRlRfRlJFRSggc3RyaW5nX2J1ZiApOworICB9CisKKworICBzdGF0aWMgdm9pZAorICB0NDJfcGFyc2VfY2hhcnN0cmluZ3MoIFQ0Ml9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgVDQyX0xvYWRlciAgbG9hZGVyICkKKyAgeworICAgIFQ0Ml9QYXJzZXIgICAgIHBhcnNlciAgICAgICA9ICZsb2FkZXItPnBhcnNlcjsKKyAgICBQU19UYWJsZSAgICAgICBjb2RlX3RhYmxlICAgPSAmbG9hZGVyLT5jaGFyc3RyaW5nczsKKyAgICBQU19UYWJsZSAgICAgICBuYW1lX3RhYmxlICAgPSAmbG9hZGVyLT5nbHlwaF9uYW1lczsKKyAgICBQU19UYWJsZSAgICAgICBzd2FwX3RhYmxlICAgPSAmbG9hZGVyLT5zd2FwX3RhYmxlOworICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSAgICAgICA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CisgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CisKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCAgICAgICAgPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKKworICAgIEZUX0J5dGUqICAgICAgIGN1cjsKKyAgICBGVF9CeXRlKiAgICAgICBsaW1pdCAgICAgICAgPSBwYXJzZXItPnJvb3QubGltaXQ7CisgICAgRlRfSW50ICAgICAgICAgbjsKKyAgICBGVF9JbnQgICAgICAgICBub3RkZWZfaW5kZXggPSAwOworICAgIEZUX0J5dGUgICAgICAgIG5vdGRlZl9mb3VuZCA9IDA7CisKKworICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKworICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA+PSBsaW1pdCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidDQyX3BhcnNlX2NoYXJzdHJpbmdzOiBvdXQgb2YgYm91bmRzXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBGYWlsOworICAgIH0KKworICAgIGlmICggZnRfaXNkaWdpdCggKnBhcnNlci0+cm9vdC5jdXJzb3IgKSApCisgICAgeworICAgICAgbG9hZGVyLT5udW1fZ2x5cGhzID0gVDFfVG9JbnQoIHBhcnNlciApOworICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAoIGxvYWRlci0+bnVtX2dseXBocyA8IDAgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2VfZW5jb2Rpbmc6IGludmFsaWQgbnVtYmVyIG9mIGdseXBoc1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCAqcGFyc2VyLT5yb290LmN1cnNvciA9PSAnPCcgKQorICAgIHsKKyAgICAgIC8qIFdlIGhhdmUgYDw8IC4uLiA+PicuICBDb3VudCB0aGUgbnVtYmVyIG9mIGAvJyBpbiB0aGUgZGljdGlvbmFyeSAqLworICAgICAgLyogdG8gZ2V0IGl0cyBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBGVF9JbnQgIGNvdW50ID0gMDsKKworCisgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgcmV0dXJuOworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKworICAgICAgd2hpbGUgKCBwYXJzZXItPnJvb3QuY3Vyc29yIDwgbGltaXQgKQorICAgICAgeworICAgICAgICBpZiAoICpwYXJzZXItPnJvb3QuY3Vyc29yID09ICcvJyApCisgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgZWxzZSBpZiAoICpwYXJzZXItPnJvb3QuY3Vyc29yID09ICc+JyApCisgICAgICAgIHsKKyAgICAgICAgICBsb2FkZXItPm51bV9nbHlwaHMgID0gY291bnQ7CisgICAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGN1cjsgICAgICAgIC8qIHJld2luZCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOworICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2VfY2hhcnN0cmluZ3M6IGludmFsaWQgdG9rZW5cbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgaWYgKCBwYXJzZXItPnJvb3QuY3Vyc29yID49IGxpbWl0ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2VfY2hhcnN0cmluZ3M6IG91dCBvZiBib3VuZHNcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSB0YWJsZXMgKi8KKworICAgIGVycm9yID0gcHNhdXgtPnBzX3RhYmxlX2Z1bmNzLT5pbml0KCBjb2RlX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPm51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgZXJyb3IgPSBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoIG5hbWVfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+bnVtX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICAvKiBJbml0aWFsaXplIHRhYmxlIGZvciBzd2FwcGluZyBpbmRleCBub3RkZWZfaW5kZXggYW5kICovCisgICAgLyogaW5kZXggMCBuYW1lcyBhbmQgY29kZXMgKGlmIG5lY2Vzc2FyeSkuICAgICAgICAgICAgICAqLworCisgICAgZXJyb3IgPSBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoIHN3YXBfdGFibGUsIDQsIG1lbW9yeSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBGYWlsOworCisgICAgbiA9IDA7CisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgIC8qIFRoZSBmb3JtYXQgaXMgc2ltcGxlOiAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICBgL2dseXBobmFtZScgKyBpbmRleCBbKyBkZWZdICAgICAgICAgICovCisKKyAgICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKKworICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICAgIGlmICggY3VyID49IGxpbWl0ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIFdlIHN0b3Agd2hlbiB3ZSBmaW5kIGFuIGBlbmQnIGtleXdvcmQgb3IgJz4nICovCisgICAgICBpZiAoICpjdXIgICA9PSAnZScgICAgICAgICAgJiYKKyAgICAgICAgICAgY3VyICsgMyA8IGxpbWl0ICAgICAgICAmJgorICAgICAgICAgICBjdXJbMV0gPT0gJ24nICAgICAgICAgICYmCisgICAgICAgICAgIGN1clsyXSA9PSAnZCcgICAgICAgICAgJiYKKyAgICAgICAgICAgdDQyX2lzX3NwYWNlKCBjdXJbM10gKSApCisgICAgICAgIGJyZWFrOworICAgICAgaWYgKCAqY3VyID09ICc+JyApCisgICAgICAgIGJyZWFrOworCisgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA+PSBsaW1pdCApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggInQ0Ml9wYXJzZV9jaGFyc3RyaW5nczogb3V0IG9mIGJvdW5kc1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgIHJldHVybjsKKworICAgICAgaWYgKCAqY3VyID09ICcvJyApCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIGxlbjsKKworCisgICAgICAgIGlmICggY3VyICsgMiA+PSBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2VfY2hhcnN0cmluZ3M6IG91dCBvZiBib3VuZHNcbiIgKSk7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGN1cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgYC8nICovCisgICAgICAgIGxlbiA9IChGVF9VSW50KSggcGFyc2VyLT5yb290LmN1cnNvciAtIGN1ciApOworCisgICAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBuYW1lX3RhYmxlLCBuLCBjdXIsIGxlbiArIDEgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIC8qIGFkZCBhIHRyYWlsaW5nIHplcm8gdG8gdGhlIG5hbWUgdGFibGUgKi8KKyAgICAgICAgbmFtZV90YWJsZS0+ZWxlbWVudHNbbl1bbGVuXSA9ICdcMCc7CisKKyAgICAgICAgLyogcmVjb3JkIGluZGV4IG9mIC8ubm90ZGVmICovCisgICAgICAgIGlmICggKmN1ciA9PSAnLicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBmdF9zdHJjbXAoICIubm90ZGVmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKikobmFtZV90YWJsZS0+ZWxlbWVudHNbbl0pICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBub3RkZWZfaW5kZXggPSBuOworICAgICAgICAgIG5vdGRlZl9mb3VuZCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKworICAgICAgICAodm9pZClUMV9Ub0ludCggcGFyc2VyICk7CisgICAgICAgIGlmICggcGFyc2VyLT5yb290LmN1cnNvciA+PSBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0NDJfcGFyc2VfY2hhcnN0cmluZ3M6IG91dCBvZiBib3VuZHNcbiIgKSk7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IChGVF9VSW50KSggcGFyc2VyLT5yb290LmN1cnNvciAtIGN1ciApOworCisgICAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBjb2RlX3RhYmxlLCBuLCBjdXIsIGxlbiArIDEgKTsKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgIGNvZGVfdGFibGUtPmVsZW1lbnRzW25dW2xlbl0gPSAnXDAnOworCisgICAgICAgIG4rKzsKKyAgICAgICAgaWYgKCBuID49IGxvYWRlci0+bnVtX2dseXBocyApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgbG9hZGVyLT5udW1fZ2x5cGhzID0gbjsKKworICAgIGlmICggIW5vdGRlZl9mb3VuZCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAidDQyX3BhcnNlX2NoYXJzdHJpbmdzOiBubyAvLm5vdGRlZiBnbHlwaFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKiBpZiAvLm5vdGRlZiBkb2VzIG5vdCBvY2N1cHkgaW5kZXggMCwgZG8gb3VyIG1hZ2ljLiAqLworICAgIGlmICggZnRfc3RyY21wKCAoY29uc3QgY2hhciopIi5ub3RkZWYiLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopbmFtZV90YWJsZS0+ZWxlbWVudHNbMF0gKSApCisgICAgeworICAgICAgLyogU3dhcCBnbHlwaCBpbiBpbmRleCAwIHdpdGggLy5ub3RkZWYgZ2x5cGguICBGaXJzdCwgYWRkIGluZGV4IDAgICovCisgICAgICAvKiBuYW1lIGFuZCBjb2RlIGVudHJpZXMgdG8gc3dhcF90YWJsZS4gIFRoZW4gcGxhY2Ugbm90ZGVmX2luZGV4ICAgKi8KKyAgICAgIC8qIG5hbWUgYW5kIGNvZGUgZW50cmllcyBpbnRvIHN3YXBfdGFibGUuICBUaGVuIHN3YXAgbmFtZSBhbmQgY29kZSAqLworICAgICAgLyogZW50cmllcyBhdCBpbmRpY2VzIG5vdGRlZl9pbmRleCBhbmQgMCB1c2luZyB2YWx1ZXMgc3RvcmVkIGluICAgICovCisgICAgICAvKiBzd2FwX3RhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogSW5kZXggMCBuYW1lICovCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggc3dhcF90YWJsZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3RhYmxlLT5lbGVtZW50c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3RhYmxlLT5sZW5ndGhzIFswXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgLyogSW5kZXggMCBjb2RlICovCisgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggc3dhcF90YWJsZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3RhYmxlLT5lbGVtZW50c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3RhYmxlLT5sZW5ndGhzIFswXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgLyogSW5kZXggbm90ZGVmX2luZGV4IG5hbWUgKi8KKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBzd2FwX3RhYmxlLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfdGFibGUtPmVsZW1lbnRzW25vdGRlZl9pbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV90YWJsZS0+bGVuZ3RocyBbbm90ZGVmX2luZGV4XSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgLyogSW5kZXggbm90ZGVmX2luZGV4IGNvZGUgKi8KKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBzd2FwX3RhYmxlLCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfdGFibGUtPmVsZW1lbnRzW25vdGRlZl9pbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV90YWJsZS0+bGVuZ3RocyBbbm90ZGVmX2luZGV4XSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIG5hbWVfdGFibGUsIG5vdGRlZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5lbGVtZW50c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5sZW5ndGhzIFswXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIGNvZGVfdGFibGUsIG5vdGRlZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5lbGVtZW50c1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX3RhYmxlLT5sZW5ndGhzIFsxXSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgZXJyb3IgPSBUMV9BZGRfVGFibGUoIG5hbWVfdGFibGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+ZWxlbWVudHNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF90YWJsZS0+bGVuZ3RocyBbMl0gKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCBjb2RlX3RhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmVsZW1lbnRzWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfdGFibGUtPmxlbmd0aHMgWzNdICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgfQorCisgICAgcmV0dXJuOworCisgIEZhaWw6CisgICAgcGFyc2VyLT5yb290LmVycm9yID0gZXJyb3I7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICB0NDJfbG9hZF9rZXl3b3JkKCBUNDJfRmFjZSAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBUNDJfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgIFQxX0ZpZWxkICAgIGZpZWxkICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKyAgICB2b2lkKiAgICAgZHVtbXlfb2JqZWN0OworICAgIHZvaWQqKiAgICBvYmplY3RzOworICAgIEZUX1VJbnQgICBtYXhfb2JqZWN0cyA9IDA7CisKKworICAgIC8qIGlmIHRoZSBrZXl3b3JkIGhhcyBhIGRlZGljYXRlZCBjYWxsYmFjaywgY2FsbCBpdCAqLworICAgIGlmICggZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9DQUxMQkFDSyApCisgICAgeworICAgICAgZmllbGQtPnJlYWRlciggKEZUX0ZhY2UpZmFjZSwgbG9hZGVyICk7CisgICAgICBlcnJvciA9IGxvYWRlci0+cGFyc2VyLnJvb3QuZXJyb3I7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogbm93IHRoZSBrZXl3b3JkIGlzIGVpdGhlciBhIHNpbXBsZSBmaWVsZCBvciBhIHRhYmxlIG9mIGZpZWxkczsgKi8KKyAgICAvKiB3ZSBhcmUgbm93IGdvaW5nIHRvIHRha2UgY2FyZSBvZiBpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgc3dpdGNoICggZmllbGQtPmxvY2F0aW9uICkKKyAgICB7CisgICAgY2FzZSBUMV9GSUVMRF9MT0NBVElPTl9GT05UX0lORk86CisgICAgICBkdW1teV9vYmplY3QgPSAmZmFjZS0+dHlwZTEuZm9udF9pbmZvOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFQxX0ZJRUxEX0xPQ0FUSU9OX0ZPTlRfRVhUUkE6CisgICAgICBkdW1teV9vYmplY3QgPSAmZmFjZS0+dHlwZTEuZm9udF9leHRyYTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUMV9GSUVMRF9MT0NBVElPTl9CQk9YOgorICAgICAgZHVtbXlfb2JqZWN0ID0gJmZhY2UtPnR5cGUxLmZvbnRfYmJveDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGR1bW15X29iamVjdCA9ICZmYWNlLT50eXBlMTsKKyAgICB9CisKKyAgICBvYmplY3RzID0gJmR1bW15X29iamVjdDsKKworICAgIGlmICggZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9JTlRFR0VSX0FSUkFZIHx8CisgICAgICAgICBmaWVsZC0+dHlwZSA9PSBUMV9GSUVMRF9UWVBFX0ZJWEVEX0FSUkFZICAgKQorICAgICAgZXJyb3IgPSBUMV9Mb2FkX0ZpZWxkX1RhYmxlKCAmbG9hZGVyLT5wYXJzZXIsIGZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLCBtYXhfb2JqZWN0cywgMCApOworICAgIGVsc2UKKyAgICAgIGVycm9yID0gVDFfTG9hZF9GaWVsZCggJmxvYWRlci0+cGFyc2VyLCBmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywgbWF4X29iamVjdHMsIDAgKTsKKworICAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0NDJfcGFyc2VfZGljdCggVDQyX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIFQ0Ml9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBzaXplICkKKyAgeworICAgIFQ0Ml9QYXJzZXIgIHBhcnNlciAgICAgPSAmbG9hZGVyLT5wYXJzZXI7CisgICAgRlRfQnl0ZSogICAgbGltaXQ7CisgICAgRlRfSW50ICAgICAgbl9rZXl3b3JkcyA9IChGVF9JbnQpKCBzaXplb2YgKCB0NDJfa2V5d29yZHMgKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHQ0Ml9rZXl3b3Jkc1swXSApICk7CisKKworICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBiYXNlOworICAgIHBhcnNlci0+cm9vdC5saW1pdCAgPSBiYXNlICsgc2l6ZTsKKyAgICBwYXJzZXItPnJvb3QuZXJyb3IgID0gRlRfRXJyX09rOworCisgICAgbGltaXQgPSBwYXJzZXItPnJvb3QubGltaXQ7CisKKyAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CisKKyAgICB3aGlsZSAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPCBsaW1pdCApCisgICAgeworICAgICAgRlRfQnl0ZSogIGN1cjsKKworCisgICAgICBjdXIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworCisgICAgICAvKiBsb29rIGZvciBgRm9udERpcmVjdG9yeScgd2hpY2ggY2F1c2VzIHByb2JsZW1zIGZvciBzb21lIGZvbnRzICovCisgICAgICBpZiAoICpjdXIgPT0gJ0YnICYmIGN1ciArIDI1IDwgbGltaXQgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGZ0X3N0cm5jbXAoIChjaGFyKiljdXIsICJGb250RGlyZWN0b3J5IiwgMTMgKSA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgRlRfQnl0ZSogIGN1cjI7CisKKworICAgICAgICAvKiBza2lwIHRoZSBgRm9udERpcmVjdG9yeScga2V5d29yZCAqLworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgVDFfU2tpcF9TcGFjZXMgICggcGFyc2VyICk7CisgICAgICAgIGN1ciA9IGN1cjIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworCisgICAgICAgIC8qIGxvb2sgdXAgdGhlIGBrbm93bicga2V5d29yZCAqLworICAgICAgICB3aGlsZSAoIGN1ciA8IGxpbWl0ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggKmN1ciA9PSAnaycgJiYgY3VyICsgNSA8IGxpbWl0ICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgZnRfc3RybmNtcCggKGNoYXIqKWN1ciwgImtub3duIiwgNSApID09IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgVDFfU2tpcF9TcGFjZXMgICggcGFyc2VyICk7CisgICAgICAgICAgY3VyID0gcGFyc2VyLT5yb290LmN1cnNvcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY3VyIDwgbGltaXQgKQorICAgICAgICB7CisgICAgICAgICAgVDFfVG9rZW5SZWMgIHRva2VuOworCisKKyAgICAgICAgICAvKiBza2lwIHRoZSBga25vd24nIGtleXdvcmQgYW5kIHRoZSB0b2tlbiBmb2xsb3dpbmcgaXQgKi8KKyAgICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgICBUMV9Ub1Rva2VuKCBwYXJzZXIsICZ0b2tlbiApOworCisgICAgICAgICAgLyogaWYgdGhlIGxhc3QgdG9rZW4gd2FzIGFuIGFycmF5LCBza2lwIGl0ISAqLworICAgICAgICAgIGlmICggdG9rZW4udHlwZSA9PSBUMV9UT0tFTl9UWVBFX0FSUkFZICkKKyAgICAgICAgICAgIGN1cjIgPSBwYXJzZXItPnJvb3QuY3Vyc29yOworICAgICAgICB9CisgICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgPSBjdXIyOworICAgICAgfQorCisgICAgICAvKiBsb29rIGZvciBpbW1lZGlhdGVzICovCisgICAgICBlbHNlIGlmICggKmN1ciA9PSAnLycgJiYgY3VyICsgMiA8IGxpbWl0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgbGVuOworCisKKyAgICAgICAgY3VyKys7CisKKyAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGN1cjsKKyAgICAgICAgVDFfU2tpcF9QU19Ub2tlbiggcGFyc2VyICk7CisgICAgICAgIGlmICggcGFyc2VyLT5yb290LmVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgbGVuID0gKEZUX1VJbnQpKCBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyICk7CisKKyAgICAgICAgaWYgKCBsZW4gPiAwICYmIGxlbiA8IDIyICYmIHBhcnNlci0+cm9vdC5jdXJzb3IgPCBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgIGk7CisKKworICAgICAgICAgIC8qIG5vdyBjb21wYXJlIHRoZSBpbW1lZGlhdGUgbmFtZSB0byB0aGUga2V5d29yZCB0YWJsZSAqLworCisgICAgICAgICAgLyogbG9vcCB0aHJvdWdoIGFsbCBrbm93biBrZXl3b3JkcyAqLworICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbl9rZXl3b3JkczsgaSsrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBUMV9GaWVsZCAga2V5d29yZCA9IChUMV9GaWVsZCkmdDQyX2tleXdvcmRzW2ldOworICAgICAgICAgICAgRlRfQnl0ZSAgICpuYW1lICAgPSAoRlRfQnl0ZSopa2V5d29yZC0+aWRlbnQ7CisKKworICAgICAgICAgICAgaWYgKCAhbmFtZSApCisgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIGN1clswXSA9PSBuYW1lWzBdICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgIGxlbiA9PSBmdF9zdHJsZW4oIChjb25zdCBjaGFyICopbmFtZSApICYmCisgICAgICAgICAgICAgICAgIGZ0X21lbWNtcCggY3VyLCBuYW1lLCBsZW4gKSA9PSAwICAgICAgICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogd2UgZm91bmQgaXQgLS0gcnVuIHRoZSBwYXJzaW5nIGNhbGxiYWNrISAqLworICAgICAgICAgICAgICBwYXJzZXItPnJvb3QuZXJyb3IgPSB0NDJfbG9hZF9rZXl3b3JkKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQgKTsKKyAgICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnJvb3QuZXJyb3I7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUMV9Ta2lwX1BTX1Rva2VuKCBwYXJzZXIgKTsKKyAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgVDFfU2tpcF9TcGFjZXMoIHBhcnNlciApOworICAgIH0KKworICBFeGl0OgorICAgIHJldHVybiBwYXJzZXItPnJvb3QuZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHQ0Ml9sb2FkZXJfaW5pdCggVDQyX0xvYWRlciAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgIFQ0Ml9GYWNlICAgIGZhY2UgKQorICB7CisgICAgRlRfVU5VU0VEKCBmYWNlICk7CisKKyAgICBGVF9NRU1fWkVSTyggbG9hZGVyLCBzaXplb2YgKCAqbG9hZGVyICkgKTsKKyAgICBsb2FkZXItPm51bV9nbHlwaHMgPSAwOworICAgIGxvYWRlci0+bnVtX2NoYXJzICA9IDA7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSB0YWJsZXMgLS0gc2ltcGx5IHNldCB0aGVpciBgaW5pdCcgZmllbGQgdG8gMCAqLworICAgIGxvYWRlci0+ZW5jb2RpbmdfdGFibGUuaW5pdCA9IDA7CisgICAgbG9hZGVyLT5jaGFyc3RyaW5ncy5pbml0ICAgID0gMDsKKyAgICBsb2FkZXItPmdseXBoX25hbWVzLmluaXQgICAgPSAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICB0NDJfbG9hZGVyX2RvbmUoIFQ0Ml9Mb2FkZXIgIGxvYWRlciApCisgIHsKKyAgICBUNDJfUGFyc2VyICBwYXJzZXIgPSAmbG9hZGVyLT5wYXJzZXI7CisKKworICAgIC8qIGZpbmFsaXplIHRhYmxlcyAqLworICAgIFQxX1JlbGVhc2VfVGFibGUoICZsb2FkZXItPmVuY29kaW5nX3RhYmxlICk7CisgICAgVDFfUmVsZWFzZV9UYWJsZSggJmxvYWRlci0+Y2hhcnN0cmluZ3MgKTsKKyAgICBUMV9SZWxlYXNlX1RhYmxlKCAmbG9hZGVyLT5nbHlwaF9uYW1lcyApOworICAgIFQxX1JlbGVhc2VfVGFibGUoICZsb2FkZXItPnN3YXBfdGFibGUgKTsKKworICAgIC8qIGZpbmFsaXplIHBhcnNlciAqLworICAgIHQ0Ml9wYXJzZXJfZG9uZSggcGFyc2VyICk7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmggYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDJmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJwYXJzZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHQ0MnBhcnNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUeXBlIDQyIGZvbnQgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX1Q0MlBBUlNFX0hfXworI2RlZmluZSBfX1Q0MlBBUlNFX0hfXworCisKKyNpbmNsdWRlICJ0NDJvYmpzLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFQ0Ml9QYXJzZXJSZWNfCisgIHsKKyAgICBQU19QYXJzZXJSZWMgIHJvb3Q7CisgICAgRlRfU3RyZWFtICAgICBzdHJlYW07CisKKyAgICBGVF9CeXRlKiAgICAgIGJhc2VfZGljdDsKKyAgICBGVF9Mb25nICAgICAgIGJhc2VfbGVuOworCisgICAgRlRfQm9vbCAgICAgICBpbl9tZW1vcnk7CisKKyAgfSBUNDJfUGFyc2VyUmVjLCAqVDQyX1BhcnNlcjsKKworCisgIHR5cGVkZWYgc3RydWN0ICBUNDJfTG9hZGVyXworICB7CisgICAgVDQyX1BhcnNlclJlYyAgcGFyc2VyOyAgICAgICAgICAvKiBwYXJzZXIgdXNlZCB0byByZWFkIHRoZSBzdHJlYW0gKi8KKworICAgIEZUX0ludCAgICAgICAgIG51bV9jaGFyczsgICAgICAgLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZW5jb2RpbmcgKi8KKyAgICBQU19UYWJsZVJlYyAgICBlbmNvZGluZ190YWJsZTsgIC8qIFBTX1RhYmxlIHVzZWQgdG8gc3RvcmUgdGhlICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmNvZGluZyBjaGFyYWN0ZXIgbmFtZXMgICAgICAgICAqLworCisgICAgRlRfSW50ICAgICAgICAgbnVtX2dseXBoczsKKyAgICBQU19UYWJsZVJlYyAgICBnbHlwaF9uYW1lczsKKyAgICBQU19UYWJsZVJlYyAgICBjaGFyc3RyaW5nczsKKyAgICBQU19UYWJsZVJlYyAgICBzd2FwX3RhYmxlOyAgICAgIC8qIEZvciBtb3ZpbmcgLm5vdGRlZiBnbHlwaCB0byBpbmRleCAwLiAqLworCisgIH0gVDQyX0xvYWRlclJlYywgKlQ0Ml9Mb2FkZXI7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0NDJfcGFyc2VyX2luaXQoIFQ0Ml9QYXJzZXIgICAgIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0NDJfcGFyc2VyX2RvbmUoIFQ0Ml9QYXJzZXIgIHBhcnNlciApOworCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdDQyX3BhcnNlX2RpY3QoIFQ0Ml9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBUNDJfTG9hZGVyICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBiYXNlLAorICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgc2l6ZSApOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0NDJfbG9hZGVyX2luaXQoIFQ0Ml9Mb2FkZXIgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICBUNDJfRmFjZSAgICBmYWNlICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0NDJfbG9hZGVyX2RvbmUoIFQ0Ml9Mb2FkZXIgIGxvYWRlciApOworCisKKyAvKiAqLworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fVDQyUEFSU0VfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdDQydHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTI4NmFmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdDQydHlwZXMuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB0NDJ0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVHlwZSA0MiBmb250IGRhdGEgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19UNDJUWVBFU19IX18KKyNkZWZpbmUgX19UNDJUWVBFU19IX18KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIHR5cGVkZWYgc3RydWN0ICBUNDJfRmFjZVJlY18KKyAgeworICAgIEZUX0ZhY2VSZWMgICAgICByb290OworICAgIFQxX0ZvbnRSZWMgICAgICB0eXBlMTsKKyAgICBjb25zdCB2b2lkKiAgICAgcHNuYW1lczsKKyAgICBjb25zdCB2b2lkKiAgICAgcHNhdXg7CisjaWYgMAorICAgIGNvbnN0IHZvaWQqICAgICBhZm1fZGF0YTsKKyNlbmRpZgorICAgIEZUX0J5dGUqICAgICAgICB0dGZfZGF0YTsKKyAgICBGVF9Mb25nICAgICAgICAgdHRmX3NpemU7CisgICAgRlRfRmFjZSAgICAgICAgIHR0Zl9mYWNlOworICAgIEZUX0NoYXJNYXBSZWMgICBjaGFybWFwcmVjc1syXTsKKyAgICBGVF9DaGFyTWFwICAgICAgY2hhcm1hcHNbMl07CisgICAgUFNfVW5pY29kZXNSZWMgIHVuaWNvZGVfbWFwOworCisgIH0gVDQyX0ZhY2VSZWMsICpUNDJfRmFjZTsKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZiAvKiBfX1Q0MlRZUEVTX0hfXyAqLworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdHlwZTQyLmMgYi9mcmVldHlwZS0yLjYvc3JjL3R5cGU0Mi90eXBlNDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzMyYjdiCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy90eXBlNDIvdHlwZTQyLmMKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgdHlwZTQyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFR5cGUgNDIgZHJpdmVyIGNvbXBvbmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInQ0Mm9ianMuYyIKKyNpbmNsdWRlICJ0NDJwYXJzZS5jIgorI2luY2x1ZGUgInQ0MmRyaXZyLmMiCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9KYW1maWxlIGIvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZWU2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvc3JjL3dpbmZvbnRzL0phbWZpbGUKQEAgLTAsMCArMSwxNiBAQAorIyBGcmVlVHlwZSAyIHNyYy93aW5mb250cyBKYW1maWxlCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCitTdWJEaXIgIEZUMl9UT1AgJChGVDJfU1JDX0RJUikgd2luZm9udHMgOworCitMaWJyYXJ5ICAkKEZUMl9MSUIpIDogd2luZm50LmMgOworCisjIGVuZCBvZiBzcmMvd2luZm9udHMgSmFtZmlsZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9mbnRlcnJzLmggYi9mcmVldHlwZS0yLjYvc3JjL3dpbmZvbnRzL2ZudGVycnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmY0ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9mbnRlcnJzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZm50ZXJycy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFdpbiBGTlQvRk9OIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBXaW5kb3dzIEZOVC9GT04gZXJyb3IgZW51bWVyYXRpb24gICAgICovCisgIC8qIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GTlRFUlJTX0hfXworI2RlZmluZSBfX0ZOVEVSUlNfSF9fCisKKyNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAorCisjdW5kZWYgX19GVEVSUk9SU19IX18KKworI3VuZGVmICBGVF9FUlJfUFJFRklYCisjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEZOVF9FcnJfCisjZGVmaW5lIEZUX0VSUl9CQVNFICAgIEZUX01vZF9FcnJfV2luZm9udHMKKworI2luY2x1ZGUgRlRfRVJST1JTX0gKKworI2VuZGlmIC8qIF9fRk5URVJSU19IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvbW9kdWxlLm1rIGIvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9tb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhNmQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvbW9kdWxlLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgRnJlZVR5cGUgMiBXaW5kb3dzIEZOVC9GT04gbW9kdWxlIGRlZmluaXRpb24KKyMKKworCisjIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0ZUTU9EVUxFX0hfQ09NTUFORFMgKz0gV0lORE9XU19EUklWRVIKKworZGVmaW5lIFdJTkRPV1NfRFJJVkVSCiskKE9QRU5fRFJJVkVSKSBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHdpbmZudF9kcml2ZXJfY2xhc3MgJChDTE9TRV9EUklWRVIpCiskKEVDSE9fRFJJVkVSKXdpbmZudCAgICAkKEVDSE9fRFJJVkVSX0RFU0MpV2luZG93cyBiaXRtYXAgZm9udHMgd2l0aCBleHRlbnNpb24gKi5mbnQgb3IgKi5mb24kKEVDSE9fRFJJVkVSX0RPTkUpCitlbmRlZgorCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy9ydWxlcy5tayBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzNWY1NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvcnVsZXMubWsKQEAgLTAsMCArMSw2OCBAQAorIworIyBGcmVlVHlwZSAyIFdpbmRvd3MgRk5UL0ZPTiBkcml2ZXIgY29uZmlndXJhdGlvbiBydWxlcworIworCisKKyMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworIyBXaW5kb3dzIGRyaXZlciBkaXJlY3RvcnkKKyMKK0ZOVF9ESVIgOj0gJChTUkNfRElSKS93aW5mb250cworCisKK0ZOVF9DT01QSUxFIDo9ICQoQ0MpICQoQU5TSUZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAkSSQoc3Vic3QgLywkKENPTVBJTEVSX1NFUCksJChGTlRfRElSKSkgXAorICAgICAgICAgICAgICAgICAgICAgJChJTkNMVURFX0ZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICQoRlRfQ0ZMQUdTKQorCisKKyMgV2luZG93cyBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKKyMKK0ZOVF9EUlZfU1JDIDo9ICQoRk5UX0RJUikvd2luZm50LmMKKworIyBXaW5kb3dzIGRyaXZlciBoZWFkZXJzCisjCitGTlRfRFJWX0ggOj0gJChGTlRfRFJWX1NSQzolLmM9JS5oKSBcCisgICAgICAgICAgICAgJChGTlRfRElSKS9mbnRlcnJzLmgKKworCisjIFdpbmRvd3MgZHJpdmVyIG9iamVjdChzKQorIworIyAgIEZOVF9EUlZfT0JKX00gaXMgdXNlZCBkdXJpbmcgYG11bHRpJyBidWlsZHMKKyMgICBGTlRfRFJWX09CSl9TIGlzIHVzZWQgZHVyaW5nIGBzaW5nbGUnIGJ1aWxkcworIworRk5UX0RSVl9PQkpfTSA6PSAkKEZOVF9EUlZfU1JDOiQoRk5UX0RJUikvJS5jPSQoT0JKX0RJUikvJS4kTykKK0ZOVF9EUlZfT0JKX1MgOj0gJChPQkpfRElSKS93aW5mbnQuJE8KKworIyBXaW5kb3dzIGRyaXZlciBzb3VyY2UgZmlsZSBmb3Igc2luZ2xlIGJ1aWxkCisjCitGTlRfRFJWX1NSQ19TIDo9ICQoRk5UX0RJUikvd2luZm50LmMKKworCisjIFdpbmRvd3MgZHJpdmVyIC0gc2luZ2xlIG9iamVjdAorIworJChGTlRfRFJWX09CSl9TKTogJChGTlRfRFJWX1NSQ19TKSAkKEZOVF9EUlZfU1JDKSAkKEZSRUVUWVBFX0gpICQoRk5UX0RSVl9IKQorCSQoRk5UX0NPTVBJTEUpICRUJChzdWJzdCAvLCQoQ09NUElMRVJfU0VQKSwkQCAkKEZOVF9EUlZfU1JDX1MpKQorCisKKyMgV2luZG93cyBkcml2ZXIgLSBtdWx0aXBsZSBvYmplY3RzCisjCiskKE9CSl9ESVIpLyUuJE86ICQoRk5UX0RJUikvJS5jICQoRlJFRVRZUEVfSCkgJChGTlRfRFJWX0gpCisJJChGTlRfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQorCisKKyMgdXBkYXRlIG1haW4gZHJpdmVyIG9iamVjdCBsaXN0cworIworRFJWX09CSlNfUyArPSAkKEZOVF9EUlZfT0JKX1MpCitEUlZfT0JKU19NICs9ICQoRk5UX0RSVl9PQkpfTSkKKworCisjIEVPRgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy93aW5mbnQuYyBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvd2luZm50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmMTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvd2luZm50LmMKQEAgLTAsMCArMSwxMTcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICB3aW5mbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIFdpbmRvd3MgRk5UL0ZPTiBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMyBIdXcgRCBNIERhdmllcyBmb3IgQ29kZXdlYXZlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDcgRG1pdHJ5IFRpbW9zaGtvdiBmb3IgQ29kZXdlYXZlcnMgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9XSU5GT05UU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSAorCisjaW5jbHVkZSAid2luZm50LmgiCisjaW5jbHVkZSAiZm50ZXJycy5oIgorI2luY2x1ZGUgRlRfU0VSVklDRV9XSU5GTlRfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfd2luZm50CisKKworICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHdpbm16X2hlYWRlcl9maWVsZHNbXSA9CisgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgV2luTVpfSGVhZGVyUmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggNjQgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSAoIG1hZ2ljICksCisgICAgICBGVF9GUkFNRV9TS0lQX0JZVEVTKCAyOSAqIDIgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICAoIGxmYW5ldyApLAorICAgIEZUX0ZSQU1FX0VORAorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgd2lubmVfaGVhZGVyX2ZpZWxkc1tdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXaW5ORV9IZWFkZXJSZWMKKworICAgIEZUX0ZSQU1FX1NUQVJUKCA0MCApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFICggbWFnaWMgKSwKKyAgICAgIEZUX0ZSQU1FX1NLSVBfQllURVMoIDM0ICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUgKCByZXNvdXJjZV90YWJfb2Zmc2V0ICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUgKCBybmFtZV90YWJfb2Zmc2V0ICksCisgICAgRlRfRlJBTUVfRU5ECisgIH07CisKKyAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICB3aW5wZTMyX2hlYWRlcl9maWVsZHNbXSA9CisgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgV2luUEUzMl9IZWFkZXJSZWMKKworICAgIEZUX0ZSQU1FX1NUQVJUKCAyNDggKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICAoIG1hZ2ljICksICAgLyogUEUwMCAqLworICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFICggbWFjaGluZSApLCAvKiAweDAxNEMgLSBpMzg2ICovCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUgKCBudW1iZXJfb2Zfc2VjdGlvbnMgKSwKKyAgICAgIEZUX0ZSQU1FX1NLSVBfQllURVMoIDEyICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUgKCBzaXplX29mX29wdGlvbmFsX2hlYWRlciApLAorICAgICAgRlRfRlJBTUVfU0tJUF9CWVRFUyggMiApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFICggbWFnaWMzMiApLCAvKiAweDEwQiAqLworICAgICAgRlRfRlJBTUVfU0tJUF9CWVRFUyggMTEwICksCisgICAgICBGVF9GUkFNRV9VTE9OR19MRSAgKCByc3JjX3ZpcnR1YWxfYWRkcmVzcyApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUgICggcnNyY19zaXplICksCisgICAgICBGVF9GUkFNRV9TS0lQX0JZVEVTKCAxMDQgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHdpbnBlMzJfc2VjdGlvbl9maWVsZHNbXSA9CisgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgV2luUEUzMl9TZWN0aW9uUmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggNDAgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEVTICAgICAoIG5hbWUsIDggKSwKKyAgICAgIEZUX0ZSQU1FX1NLSVBfQllURVMoIDQgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICAoIHZpcnR1YWxfYWRkcmVzcyApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUgICggc2l6ZV9vZl9yYXdfZGF0YSApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUgICggcG9pbnRlcl90b19yYXdfZGF0YSApLAorICAgICAgRlRfRlJBTUVfU0tJUF9CWVRFUyggMTYgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHdpbnBlX3JzcmNfZGlyX2ZpZWxkc1tdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXaW5QRV9Sc3JjRGlyUmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggMTYgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICggY2hhcmFjdGVyaXN0aWNzICksCisgICAgICBGVF9GUkFNRV9VTE9OR19MRSAoIHRpbWVfZGF0ZV9zdGFtcCApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCBtYWpvcl92ZXJzaW9uICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUoIG1pbm9yX3ZlcnNpb24gKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggbnVtYmVyX29mX25hbWVkX2VudHJpZXMgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggbnVtYmVyX29mX2lkX2VudHJpZXMgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHdpbnBlX3JzcmNfZGlyX2VudHJ5X2ZpZWxkc1tdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXaW5QRV9Sc3JjRGlyRW50cnlSZWMKKworICAgIEZUX0ZSQU1FX1NUQVJUKCA4ICksCisgICAgICBGVF9GUkFNRV9VTE9OR19MRSggbmFtZSApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUoIG9mZnNldCApLAorICAgIEZUX0ZSQU1FX0VORAorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgd2lucGVfcnNyY19kYXRhX2VudHJ5X2ZpZWxkc1tdID0KKyAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBXaW5QRV9Sc3JjRGF0YUVudHJ5UmVjCisKKyAgICBGVF9GUkFNRV9TVEFSVCggMTYgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBvZmZzZXRfdG9fZGF0YSApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUoIHNpemUgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCBjb2RlX3BhZ2UgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFKCByZXNlcnZlZCApLAorICAgIEZUX0ZSQU1FX0VORAorICB9OworCisgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgd2luZm50X2hlYWRlcl9maWVsZHNbXSA9CisgIHsKKyN1bmRlZiAgRlRfU1RSVUNUVVJFCisjZGVmaW5lIEZUX1NUUlVDVFVSRSAgRlRfV2luRk5UX0hlYWRlclJlYworCisgICAgRlRfRlJBTUVfU1RBUlQoIDE0OCApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCB2ZXJzaW9uICksCisgICAgICBGVF9GUkFNRV9VTE9OR19MRSAoIGZpbGVfc2l6ZSApLAorICAgICAgRlRfRlJBTUVfQllURVMgICAgKCBjb3B5cmlnaHQsIDYwICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUoIGZpbGVfdHlwZSApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCBub21pbmFsX3BvaW50X3NpemUgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggdmVydGljYWxfcmVzb2x1dGlvbiApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCBob3Jpem9udGFsX3Jlc29sdXRpb24gKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggYXNjZW50ICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUoIGludGVybmFsX2xlYWRpbmcgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggZXh0ZXJuYWxfbGVhZGluZyApLAorICAgICAgRlRfRlJBTUVfQllURSAgICAgKCBpdGFsaWMgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICggdW5kZXJsaW5lICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAoIHN0cmlrZV9vdXQgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggd2VpZ2h0ICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAoIGNoYXJzZXQgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggcGl4ZWxfd2lkdGggKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggcGl4ZWxfaGVpZ2h0ICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAoIHBpdGNoX2FuZF9mYW1pbHkgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggYXZnX3dpZHRoICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUoIG1heF93aWR0aCApLAorICAgICAgRlRfRlJBTUVfQllURSAgICAgKCBmaXJzdF9jaGFyICksCisgICAgICBGVF9GUkFNRV9CWVRFICAgICAoIGxhc3RfY2hhciApLAorICAgICAgRlRfRlJBTUVfQllURSAgICAgKCBkZWZhdWx0X2NoYXIgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICggYnJlYWtfY2hhciApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCBieXRlc19wZXJfcm93ICksCisgICAgICBGVF9GUkFNRV9VTE9OR19MRSAoIGRldmljZV9vZmZzZXQgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICggZmFjZV9uYW1lX29mZnNldCApLAorICAgICAgRlRfRlJBTUVfVUxPTkdfTEUgKCBiaXRzX3BvaW50ZXIgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICggYml0c19vZmZzZXQgKSwKKyAgICAgIEZUX0ZSQU1FX0JZVEUgICAgICggcmVzZXJ2ZWQgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICggZmxhZ3MgKSwKKyAgICAgIEZUX0ZSQU1FX1VTSE9SVF9MRSggQV9zcGFjZSApLAorICAgICAgRlRfRlJBTUVfVVNIT1JUX0xFKCBCX3NwYWNlICksCisgICAgICBGVF9GUkFNRV9VU0hPUlRfTEUoIENfc3BhY2UgKSwKKyAgICAgIEZUX0ZSQU1FX1VMT05HX0xFICggY29sb3JfdGFibGVfb2Zmc2V0ICksCisgICAgICBGVF9GUkFNRV9CWVRFUyAgICAoIHJlc2VydmVkMSwgMTYgKSwKKyAgICBGVF9GUkFNRV9FTkQKKyAgfTsKKworCisgIHN0YXRpYyB2b2lkCisgIGZudF9mb250X2RvbmUoIEZOVF9GYWNlIGZhY2UgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFKCBmYWNlICktPm1lbW9yeTsKKyAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IEZUX0ZBQ0UoIGZhY2UgKS0+c3RyZWFtOworICAgIEZOVF9Gb250ICAgZm9udCAgID0gZmFjZS0+Zm9udDsKKworCisgICAgaWYgKCAhZm9udCApCisgICAgICByZXR1cm47CisKKyAgICBpZiAoIGZvbnQtPmZudF9mcmFtZSApCisgICAgICBGVF9GUkFNRV9SRUxFQVNFKCBmb250LT5mbnRfZnJhbWUgKTsKKyAgICBGVF9GUkVFKCBmb250LT5mYW1pbHlfbmFtZSApOworCisgICAgRlRfRlJFRSggZm9udCApOworICAgIGZhY2UtPmZvbnQgPSBOVUxMOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZm50X2ZvbnRfbG9hZCggRk5UX0ZvbnQgICBmb250LAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsKKyAgICBGVF9XaW5GTlRfSGVhZGVyICBoZWFkZXIgPSAmZm9udC0+aGVhZGVyOworICAgIEZUX0Jvb2wgICAgICAgICAgIG5ld19mb3JtYXQ7CisgICAgRlRfVUludCAgICAgICAgICAgc2l6ZTsKKworCisgICAgLyogZmlyc3Qgb2YgYWxsLCByZWFkIHRoZSBGTlQgaGVhZGVyICovCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZm9udC0+b2Zmc2V0ICkgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCB3aW5mbnRfaGVhZGVyX2ZpZWxkcywgaGVhZGVyICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgLyogY2hlY2sgaGVhZGVyICovCisgICAgaWYgKCBoZWFkZXItPnZlcnNpb24gIT0gMHgyMDAgJiYKKyAgICAgICAgIGhlYWRlci0+dmVyc2lvbiAhPSAweDMwMCApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgV2luZG93cyBGTlQgZmlsZVxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBuZXdfZm9ybWF0ID0gRlRfQk9PTCggZm9udC0+aGVhZGVyLnZlcnNpb24gPT0gMHgzMDAgKTsKKyAgICBzaXplICAgICAgID0gbmV3X2Zvcm1hdCA/IDE0OCA6IDExODsKKworICAgIGlmICggaGVhZGVyLT5maWxlX3NpemUgPCBzaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiICBub3QgYSBXaW5kb3dzIEZOVCBmaWxlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFZlcnNpb24gMiBkb2Vzbid0IGhhdmUgdGhlc2UgZmllbGRzICovCisgICAgaWYgKCBoZWFkZXItPnZlcnNpb24gPT0gMHgyMDAgKQorICAgIHsKKyAgICAgIGhlYWRlci0+ZmxhZ3MgICA9IDA7CisgICAgICBoZWFkZXItPkFfc3BhY2UgPSAwOworICAgICAgaGVhZGVyLT5CX3NwYWNlID0gMDsKKyAgICAgIGhlYWRlci0+Q19zcGFjZSA9IDA7CisKKyAgICAgIGhlYWRlci0+Y29sb3JfdGFibGVfb2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIGhlYWRlci0+ZmlsZV90eXBlICYgMSApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIltjYW4ndCBoYW5kbGUgdmVjdG9yIEZOVCBmb250c11cbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogdGhpcyBpcyBhIEZOVCBmaWxlL3RhYmxlOyBleHRyYWN0IGl0cyBmcmFtZSAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZvbnQtPm9mZnNldCApICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBGVF9GUkFNRV9FWFRSQUNUKCBoZWFkZXItPmZpbGVfc2l6ZSwgZm9udC0+Zm50X2ZyYW1lICkgKQorICAgICAgZ290byBFeGl0OworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgZm50X2ZhY2VfZ2V0X2RsbF9mb250KCBGTlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgZmFjZV9pbmRleCApCisgIHsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworICAgIEZUX1N0cmVhbSAgICAgICAgc3RyZWFtID0gRlRfRkFDRSggZmFjZSApLT5zdHJlYW07CisgICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgPSBGVF9GQUNFKCBmYWNlICktPm1lbW9yeTsKKyAgICBXaW5NWl9IZWFkZXJSZWMgIG16X2hlYWRlcjsKKworCisgICAgZmFjZS0+Zm9udCA9IE5VTEw7CisKKyAgICAvKiBkb2VzIGl0IGJlZ2luIHdpdGggYW4gTVogaGVhZGVyPyAqLworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggd2lubXpfaGVhZGVyX2ZpZWxkcywgJm16X2hlYWRlciApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGVycm9yID0gRlRfRVJSKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgaWYgKCBtel9oZWFkZXIubWFnaWMgPT0gV0lORk5UX01aX01BR0lDICkKKyAgICB7CisgICAgICAvKiB5ZXMsIG5vdyBsb29rIGZvciBhbiBORSBoZWFkZXIgaW4gdGhlIGZpbGUgKi8KKyAgICAgIFdpbk5FX0hlYWRlclJlYyAgbmVfaGVhZGVyOworCisKKyAgICAgIEZUX1RSQUNFMigoICJNWiBzaWduYXR1cmUgZm91bmRcbiIgKSk7CisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG16X2hlYWRlci5sZmFuZXcgKSAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCB3aW5uZV9oZWFkZXJfZmllbGRzLCAmbmVfaGVhZGVyICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGVycm9yID0gRlRfRVJSKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisgICAgICBpZiAoIG5lX2hlYWRlci5tYWdpYyA9PSBXSU5GTlRfTkVfTUFHSUMgKQorICAgICAgeworICAgICAgICAvKiBnb29kLCBub3cgbG9vayBpbnRvIHRoZSByZXNvdXJjZSB0YWJsZSBmb3IgZWFjaCBGTlQgcmVzb3VyY2UgKi8KKyAgICAgICAgRlRfVUxvbmcgICByZXNfb2Zmc2V0ICA9IG16X2hlYWRlci5sZmFuZXcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZV9oZWFkZXIucmVzb3VyY2VfdGFiX29mZnNldDsKKyAgICAgICAgRlRfVVNob3J0ICBzaXplX3NoaWZ0OworICAgICAgICBGVF9VU2hvcnQgIGZvbnRfY291bnQgID0gMDsKKyAgICAgICAgRlRfVUxvbmcgICBmb250X29mZnNldCA9IDA7CisKKworICAgICAgICBGVF9UUkFDRTIoKCAiTkUgc2lnbmF0dXJlIGZvdW5kXG4iICkpOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHJlc19vZmZzZXQgKSAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggbmVfaGVhZGVyLnJuYW1lX3RhYl9vZmZzZXQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZV9oZWFkZXIucmVzb3VyY2VfdGFiX29mZnNldCApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgc2l6ZV9zaGlmdCA9IEZUX0dFVF9VU0hPUlRfTEUoKTsKKworICAgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgICAgRlRfVVNob3J0ICB0eXBlX2lkLCBjb3VudDsKKworCisgICAgICAgICAgdHlwZV9pZCA9IEZUX0dFVF9VU0hPUlRfTEUoKTsKKyAgICAgICAgICBpZiAoICF0eXBlX2lkICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY291bnQgPSBGVF9HRVRfVVNIT1JUX0xFKCk7CisKKyAgICAgICAgICBpZiAoIHR5cGVfaWQgPT0gMHg4MDA4VSApCisgICAgICAgICAgeworICAgICAgICAgICAgZm9udF9jb3VudCAgPSBjb3VudDsKKyAgICAgICAgICAgIGZvbnRfb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpICsgNCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoIHN0cmVhbS0+Y3Vyc29yIC0gc3RyZWFtLT5saW1pdCApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgc3RyZWFtLT5jdXJzb3IgKz0gNCArIGNvdW50ICogMTI7CisgICAgICAgIH0KKworICAgICAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAgICAgaWYgKCAhZm9udF9jb3VudCB8fCAhZm9udF9vZmZzZXQgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggInRoaXMgZmlsZSBkb2Vzbid0IGNvbnRhaW4gYW55IEZOVCByZXNvdXJjZXNcbiIgKSk7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGxvYWRpbmcgYHdpbmZudF9oZWFkZXJfZmllbGRzJyBuZWVkcyBhdCBsZWFzdCAxMTggYnl0ZXM7ICAgICovCisgICAgICAgIC8qIHVzZSB0aGlzIGFzIGEgcm91Z2ggbWVhc3VyZSB0byBjaGVjayB0aGUgZXhwZWN0ZWQgZm9udCBzaXplICovCisgICAgICAgIGlmICggZm9udF9jb3VudCAqIDExOFVMID4gc3RyZWFtLT5zaXplICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFMigoICJpbnZhbGlkIG51bWJlciBvZiBmYWNlc1xuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgZmFjZS0+cm9vdC5udW1fZmFjZXMgPSBmb250X2NvdW50OworCisgICAgICAgIGlmICggZmFjZV9pbmRleCA+PSBmb250X2NvdW50ICkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCBGVF9ORVcoIGZhY2UtPmZvbnQgKSApCisgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZvbnRfb2Zmc2V0ICsgKEZUX1VMb25nKWZhY2VfaW5kZXggKiAxMiApIHx8CisgICAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIDEyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgZmFjZS0+Zm9udC0+b2Zmc2V0ICAgPSAoRlRfVUxvbmcpRlRfR0VUX1VTSE9SVF9MRSgpIDw8IHNpemVfc2hpZnQ7CisgICAgICAgIGZhY2UtPmZvbnQtPmZudF9zaXplID0gKEZUX1VMb25nKUZUX0dFVF9VU0hPUlRfTEUoKSA8PCBzaXplX3NoaWZ0OworCisgICAgICAgIHN0cmVhbS0+Y3Vyc29yICs9IDg7CisKKyAgICAgICAgRlRfRlJBTUVfRVhJVCgpOworCisgICAgICAgIGVycm9yID0gZm50X2ZvbnRfbG9hZCggZmFjZS0+Zm9udCwgc3RyZWFtICk7CisgICAgICB9CisgICAgICBlbHNlIGlmICggbmVfaGVhZGVyLm1hZ2ljID09IFdJTkZOVF9QRV9NQUdJQyApCisgICAgICB7CisgICAgICAgIFdpblBFMzJfSGVhZGVyUmVjICAgICAgIHBlMzJfaGVhZGVyOworICAgICAgICBXaW5QRTMyX1NlY3Rpb25SZWMgICAgICBwZTMyX3NlY3Rpb247CisgICAgICAgIFdpblBFX1JzcmNEaXJSZWMgICAgICAgIHJvb3RfZGlyLCBuYW1lX2RpciwgbGFuZ19kaXI7CisgICAgICAgIFdpblBFX1JzcmNEaXJFbnRyeVJlYyAgIGRpcl9lbnRyeTEsIGRpcl9lbnRyeTIsIGRpcl9lbnRyeTM7CisgICAgICAgIFdpblBFX1JzcmNEYXRhRW50cnlSZWMgIGRhdGFfZW50cnk7CisKKyAgICAgICAgRlRfVUxvbmcgICByb290X2Rpcl9vZmZzZXQsIG5hbWVfZGlyX29mZnNldCwgbGFuZ19kaXJfb2Zmc2V0OworICAgICAgICBGVF9VU2hvcnQgIGksIGosIGs7CisKKworICAgICAgICBGVF9UUkFDRTIoKCAiUEUgc2lnbmF0dXJlIGZvdW5kXG4iICkpOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG16X2hlYWRlci5sZmFuZXcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCB3aW5wZTMyX2hlYWRlcl9maWVsZHMsICZwZTMyX2hlYWRlciApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgRlRfVFJBQ0UyKCggIm1hZ2ljICUwNGx4LCBtYWNoaW5lICUwMngsIG51bWJlcl9vZl9zZWN0aW9ucyAldSwgIgorICAgICAgICAgICAgICAgICAgICAic2l6ZV9vZl9vcHRpb25hbF9oZWFkZXIgJTAyeFxuIgorICAgICAgICAgICAgICAgICAgICAibWFnaWMzMiAlMDJ4LCByc3JjX3ZpcnR1YWxfYWRkcmVzcyAlMDRseCwgIgorICAgICAgICAgICAgICAgICAgICAicnNyY19zaXplICUwNGx4XG4iLAorICAgICAgICAgICAgICAgICAgICBwZTMyX2hlYWRlci5tYWdpYywgcGUzMl9oZWFkZXIubWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgcGUzMl9oZWFkZXIubnVtYmVyX29mX3NlY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICBwZTMyX2hlYWRlci5zaXplX29mX29wdGlvbmFsX2hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgcGUzMl9oZWFkZXIubWFnaWMzMiwgcGUzMl9oZWFkZXIucnNyY192aXJ0dWFsX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIHBlMzJfaGVhZGVyLnJzcmNfc2l6ZSApKTsKKworICAgICAgICBpZiAoIHBlMzJfaGVhZGVyLm1hZ2ljICE9IFdJTkZOVF9QRV9NQUdJQyAvKiBjaGVjayBmdWxsIHNpZ25hdHVyZSAqLyB8fAorICAgICAgICAgICAgIHBlMzJfaGVhZGVyLm1hY2hpbmUgIT0gMHgwMTRDIC8qIGkzODYgKi8gICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgIHBlMzJfaGVhZGVyLnNpemVfb2Zfb3B0aW9uYWxfaGVhZGVyICE9IDB4RTAgLyogRklYTUUgKi8gICAgICAgICB8fAorICAgICAgICAgICAgIHBlMzJfaGVhZGVyLm1hZ2ljMzIgIT0gMHgxMEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAidGhpcyBmaWxlIGhhcyBhbiBpbnZhbGlkIFBFIGhlYWRlclxuIiApKTsKKyAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgZmFjZS0+cm9vdC5udW1fZmFjZXMgPSAwOworCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcGUzMl9oZWFkZXIubnVtYmVyX29mX3NlY3Rpb25zOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHdpbnBlMzJfc2VjdGlvbl9maWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwZTMyX3NlY3Rpb24gKSApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBGVF9UUkFDRTIoKCAibmFtZSAlLjhzLCB2YSAlMDRseCwgc2l6ZSAlMDRseCwgb2Zmc2V0ICUwNGx4XG4iLAorICAgICAgICAgICAgICAgICAgICAgIHBlMzJfc2VjdGlvbi5uYW1lLCBwZTMyX3NlY3Rpb24udmlydHVhbF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgIHBlMzJfc2VjdGlvbi5zaXplX29mX3Jhd19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHBlMzJfc2VjdGlvbi5wb2ludGVyX3RvX3Jhd19kYXRhICkpOworCisgICAgICAgICAgaWYgKCBwZTMyX2hlYWRlci5yc3JjX3ZpcnR1YWxfYWRkcmVzcyA9PQorICAgICAgICAgICAgICAgICBwZTMyX3NlY3Rpb24udmlydHVhbF9hZGRyZXNzICkKKyAgICAgICAgICAgIGdvdG8gRm91bmRfcnNyY19zZWN0aW9uOworICAgICAgICB9CisKKyAgICAgICAgRlRfVFJBQ0UyKCggInRoaXMgZmlsZSBkb2Vzbid0IGNvbnRhaW4gYW55IHJlc291cmNlc1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIEZvdW5kX3JzcmNfc2VjdGlvbjoKKyAgICAgICAgRlRfVFJBQ0UyKCggImZvdW5kIHJlc291cmNlcyBzZWN0aW9uICUuOHNcbiIsIHBlMzJfc2VjdGlvbi5uYW1lICkpOworCisgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHBlMzJfc2VjdGlvbi5wb2ludGVyX3RvX3Jhd19kYXRhICkgICAgICAgIHx8CisgICAgICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCB3aW5wZV9yc3JjX2Rpcl9maWVsZHMsICZyb290X2RpciApICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgcm9vdF9kaXJfb2Zmc2V0ID0gcGUzMl9zZWN0aW9uLnBvaW50ZXJfdG9fcmF3X2RhdGE7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCByb290X2Rpci5udW1iZXJfb2ZfbmFtZWRfZW50cmllcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICByb290X2Rpci5udW1iZXJfb2ZfaWRfZW50cmllczsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIHJvb3RfZGlyX29mZnNldCArIDE2ICsgaSAqIDggKSAgICAgIHx8CisgICAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHdpbnBlX3JzcmNfZGlyX2VudHJ5X2ZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpcl9lbnRyeTEgKSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICBpZiAoICEoZGlyX2VudHJ5MS5vZmZzZXQgJiAweDgwMDAwMDAwVUwgKSAvKiBEYXRhSXNEaXJlY3RvcnkgKi8gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkaXJfZW50cnkxLm9mZnNldCAmPSB+MHg4MDAwMDAwMFVMOworCisgICAgICAgICAgbmFtZV9kaXJfb2Zmc2V0ID0gcGUzMl9zZWN0aW9uLnBvaW50ZXJfdG9fcmF3X2RhdGEgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9lbnRyeTEub2Zmc2V0OworCisgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggcGUzMl9zZWN0aW9uLnBvaW50ZXJfdG9fcmF3X2RhdGEgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9lbnRyeTEub2Zmc2V0ICkgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHdpbnBlX3JzcmNfZGlyX2ZpZWxkcywgJm5hbWVfZGlyICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBuYW1lX2Rpci5udW1iZXJfb2ZfbmFtZWRfZW50cmllcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZGlyLm51bWJlcl9vZl9pZF9lbnRyaWVzOyBqKysgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG5hbWVfZGlyX29mZnNldCArIDE2ICsgaiAqIDggKSAgICAgIHx8CisgICAgICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggd2lucGVfcnNyY19kaXJfZW50cnlfZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaXJfZW50cnkyICkgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIGlmICggIShkaXJfZW50cnkyLm9mZnNldCAmIDB4ODAwMDAwMDBVTCApIC8qIERhdGFJc0RpcmVjdG9yeSAqLyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkaXJfZW50cnkyLm9mZnNldCAmPSB+MHg4MDAwMDAwMFVMOworCisgICAgICAgICAgICBsYW5nX2Rpcl9vZmZzZXQgPSBwZTMyX3NlY3Rpb24ucG9pbnRlcl90b19yYXdfZGF0YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9lbnRyeTIub2Zmc2V0OworCisgICAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBwZTMyX3NlY3Rpb24ucG9pbnRlcl90b19yYXdfZGF0YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9lbnRyeTIub2Zmc2V0ICkgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIHdpbnBlX3JzcmNfZGlyX2ZpZWxkcywgJmxhbmdfZGlyICkgKQorICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIGZvciAoIGsgPSAwOyBrIDwgbGFuZ19kaXIubnVtYmVyX29mX25hbWVkX2VudHJpZXMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdfZGlyLm51bWJlcl9vZl9pZF9lbnRyaWVzOyBrKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBsYW5nX2Rpcl9vZmZzZXQgKyAxNiArIGsgKiA4ICkgICAgICB8fAorICAgICAgICAgICAgICAgICAgIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggd2lucGVfcnNyY19kaXJfZW50cnlfZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpcl9lbnRyeTMgKSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICAgIGlmICggZGlyX2VudHJ5Mi5vZmZzZXQgJiAweDgwMDAwMDAwVUwgLyogRGF0YUlzRGlyZWN0b3J5ICovICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZiAoIGRpcl9lbnRyeTEubmFtZSA9PSA4IC8qIFJUX0ZPTlQgKi8gKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggcm9vdF9kaXJfb2Zmc2V0ICsgZGlyX2VudHJ5My5vZmZzZXQgKSB8fAorICAgICAgICAgICAgICAgICAgICAgRlRfU1RSRUFNX1JFQURfRklFTERTKCB3aW5wZV9yc3JjX2RhdGFfZW50cnlfZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9lbnRyeSApICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgZ290byBFeGl0OworCisgICAgICAgICAgICAgICAgRlRfVFJBQ0UyKCggImZvdW5kIGZvbnQgIyVsdSwgb2Zmc2V0ICUwNGx4LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpemUgJTA0bHgsIGNwICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJfZW50cnkyLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGUzMl9zZWN0aW9uLnBvaW50ZXJfdG9fcmF3X2RhdGEgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9lbnRyeS5vZmZzZXRfdG9fZGF0YSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZTMyX3NlY3Rpb24udmlydHVhbF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZW50cnkuc2l6ZSwgZGF0YV9lbnRyeS5jb2RlX3BhZ2UgKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGZhY2VfaW5kZXggPT0gZmFjZS0+cm9vdC5udW1fZmFjZXMgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICggRlRfTkVXKCBmYWNlLT5mb250ICkgKQorICAgICAgICAgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgICAgICAgIGZhY2UtPmZvbnQtPm9mZnNldCAgID0gcGUzMl9zZWN0aW9uLnBvaW50ZXJfdG9fcmF3X2RhdGEgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZW50cnkub2Zmc2V0X3RvX2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlMzJfc2VjdGlvbi52aXJ0dWFsX2FkZHJlc3M7CisgICAgICAgICAgICAgICAgICBmYWNlLT5mb250LT5mbnRfc2l6ZSA9IGRhdGFfZW50cnkuc2l6ZTsKKworICAgICAgICAgICAgICAgICAgZXJyb3IgPSBmbnRfZm9udF9sb2FkKCBmYWNlLT5mb250LCBzdHJlYW0gKTsKKyAgICAgICAgICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTIoKCAiZm9udCAjJWx1IGxvYWQgZXJyb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9lbnRyeTIubmFtZSwgZXJyb3IgKSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0UyKCggImZvbnQgIyVsdSBzdWNjZXNzZnVsbHkgbG9hZGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJfZW50cnkyLm5hbWUgKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZmFjZXMrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoICFmYWNlLT5yb290Lm51bV9mYWNlcyApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJ0aGlzIGZpbGUgZG9lc24ndCBjb250YWluIGFueSBSVF9GT05UIHJlc291cmNlc1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggZmFjZV9pbmRleCA+PSBmYWNlLT5yb290Lm51bV9mYWNlcyApCisgICAgICB7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorICAgIH0KKworICBGYWlsOgorICAgIGlmICggZXJyb3IgKQorICAgICAgZm50X2ZvbnRfZG9uZSggZmFjZSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICB0eXBlZGVmIHN0cnVjdCAgRk5UX0NNYXBSZWNfCisgIHsKKyAgICBGVF9DTWFwUmVjICBjbWFwOworICAgIEZUX1VJbnQzMiAgIGZpcnN0OworICAgIEZUX1VJbnQzMiAgIGNvdW50OworCisgIH0gRk5UX0NNYXBSZWMsICpGTlRfQ01hcDsKKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBmbnRfY21hcF9pbml0KCBGTlRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBwb2ludGVyICkKKyAgeworICAgIEZOVF9GYWNlICBmYWNlID0gKEZOVF9GYWNlKUZUX0NNQVBfRkFDRSggY21hcCApOworICAgIEZOVF9Gb250ICBmb250ID0gZmFjZS0+Zm9udDsKKworICAgIEZUX1VOVVNFRCggcG9pbnRlciApOworCisKKyAgICBjbWFwLT5maXJzdCA9IChGVF9VSW50MzIpICBmb250LT5oZWFkZXIuZmlyc3RfY2hhcjsKKyAgICBjbWFwLT5jb3VudCA9IChGVF9VSW50MzIpKCBmb250LT5oZWFkZXIubGFzdF9jaGFyIC0gY21hcC0+Zmlyc3QgKyAxICk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX1VJbnQKKyAgZm50X2NtYXBfY2hhcl9pbmRleCggRk5UX0NNYXAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgIGNoYXJfY29kZSApCisgIHsKKyAgICBGVF9VSW50ICBnaW5kZXggPSAwOworCisKKyAgICBjaGFyX2NvZGUgLT0gY21hcC0+Zmlyc3Q7CisgICAgaWYgKCBjaGFyX2NvZGUgPCBjbWFwLT5jb3VudCApCisgICAgICAvKiB3ZSBhcnRpZmljaWFsbHkgaW5jcmVhc2UgdGhlIGdseXBoIGluZGV4OyAqLworICAgICAgLyogRk5UX0xvYWRfR2x5cGggcmV2ZXJ0cyB0byB0aGUgcmlnaHQgb25lICAgKi8KKyAgICAgIGdpbmRleCA9IChGVF9VSW50KSggY2hhcl9jb2RlICsgMSApOworICAgIHJldHVybiBnaW5kZXg7CisgIH0KKworCisgIHN0YXRpYyBGVF9VSW50MzIKKyAgZm50X2NtYXBfY2hhcl9uZXh0KCBGTlRfQ01hcCAgICBjbWFwLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgRlRfVUludCAgICBnaW5kZXggPSAwOworICAgIEZUX1VJbnQzMiAgcmVzdWx0ID0gMDsKKyAgICBGVF9VSW50MzIgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKworCisgICAgaWYgKCBjaGFyX2NvZGUgPD0gY21hcC0+Zmlyc3QgKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IGNtYXAtPmZpcnN0OworICAgICAgZ2luZGV4ID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGNoYXJfY29kZSAtPSBjbWFwLT5maXJzdDsKKyAgICAgIGlmICggY2hhcl9jb2RlIDwgY21hcC0+Y291bnQgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBjbWFwLT5maXJzdCArIGNoYXJfY29kZTsKKyAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCBjaGFyX2NvZGUgKyAxICk7CisgICAgICB9CisgICAgfQorCisgICAgKnBjaGFyX2NvZGUgPSByZXN1bHQ7CisgICAgcmV0dXJuIGdpbmRleDsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX0NNYXBfQ2xhc3NSZWMgIGZudF9jbWFwX2NsYXNzX3JlYyA9CisgIHsKKyAgICBzaXplb2YgKCBGTlRfQ01hcFJlYyApLAorCisgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICBmbnRfY21hcF9pbml0LAorICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgTlVMTCwKKyAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKWZudF9jbWFwX2NoYXJfaW5kZXgsCisgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSBmbnRfY21hcF9jaGFyX25leHQsCisKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgIH07CisKKyAgc3RhdGljIEZUX0NNYXBfQ2xhc3MgY29uc3QgIGZudF9jbWFwX2NsYXNzID0gJmZudF9jbWFwX2NsYXNzX3JlYzsKKworCisgIHN0YXRpYyB2b2lkCisgIEZOVF9GYWNlX0RvbmUoIEZUX0ZhY2UgIGZudGZhY2UgKSAgICAgICAvKiBGTlRfRmFjZSAqLworICB7CisgICAgRk5UX0ZhY2UgICBmYWNlID0gKEZOVF9GYWNlKWZudGZhY2U7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuOworCisgICAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworICAgIGZudF9mb250X2RvbmUoIGZhY2UgKTsKKworICAgIEZUX0ZSRUUoIGZudGZhY2UtPmF2YWlsYWJsZV9zaXplcyApOworICAgIGZudGZhY2UtPm51bV9maXhlZF9zaXplcyA9IDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBGTlRfRmFjZV9Jbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZudGZhY2UsICAgICAgICAvKiBGTlRfRmFjZSAqLworICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgKQorICB7CisgICAgRk5UX0ZhY2UgICBmYWNlICAgPSAoRk5UX0ZhY2UpZm50ZmFjZTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworICAgIEZUX1VOVVNFRCggbnVtX3BhcmFtcyApOworICAgIEZUX1VOVVNFRCggcGFyYW1zICk7CisKKworICAgIEZUX1RSQUNFMigoICJXaW5kb3dzIEZOVCBkcml2ZXJcbiIgKSk7CisKKyAgICAvKiB0cnkgdG8gbG9hZCBmb250IGZyb20gYSBETEwgKi8KKyAgICBlcnJvciA9IGZudF9mYWNlX2dldF9kbGxfZm9udCggZmFjZSwgZmFjZV9pbmRleCApOworICAgIGlmICggIWVycm9yICYmIGZhY2VfaW5kZXggPCAwICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgVW5rbm93bl9GaWxlX0Zvcm1hdCApICkKKyAgICB7CisgICAgICAvKiB0aGlzIGRpZG4ndCB3b3JrOyB0cnkgdG8gbG9hZCBhIHNpbmdsZSBGTlQgZm9udCAqLworICAgICAgRk5UX0ZvbnQgIGZvbnQ7CisKKyAgICAgIGlmICggRlRfTkVXKCBmYWNlLT5mb250ICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZudGZhY2UtPm51bV9mYWNlcyA9IDE7CisKKyAgICAgIGZvbnQgICAgICAgICAgID0gZmFjZS0+Zm9udDsKKyAgICAgIGZvbnQtPm9mZnNldCAgID0gMDsKKyAgICAgIGZvbnQtPmZudF9zaXplID0gc3RyZWFtLT5zaXplOworCisgICAgICBlcnJvciA9IGZudF9mb250X2xvYWQoIGZvbnQsIHN0cmVhbSApOworCisgICAgICBpZiAoICFlcnJvciApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZV9pbmRleCA+IDAgKQorICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZWxzZSBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICAvKiB3ZSBub3cgbmVlZCB0byBmaWxsIHRoZSByb290IEZUX0ZhY2UgZmllbGRzICovCisgICAgLyogd2l0aCByZWxldmFudCBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIHsKKyAgICAgIEZUX0ZhY2UgICByb290ID0gRlRfRkFDRSggZmFjZSApOworICAgICAgRk5UX0ZvbnQgIGZvbnQgPSBmYWNlLT5mb250OworICAgICAgRlRfVUxvbmcgIGZhbWlseV9zaXplOworCisKKyAgICAgIHJvb3QtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworCisgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMOworCisgICAgICBpZiAoIGZvbnQtPmhlYWRlci5hdmdfd2lkdGggPT0gZm9udC0+aGVhZGVyLm1heF93aWR0aCApCisgICAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIOworCisgICAgICBpZiAoIGZvbnQtPmhlYWRlci5pdGFsaWMgKQorICAgICAgICByb290LT5zdHlsZV9mbGFncyB8PSBGVF9TVFlMRV9GTEFHX0lUQUxJQzsKKworICAgICAgaWYgKCBmb250LT5oZWFkZXIud2VpZ2h0ID49IDgwMCApCisgICAgICAgIHJvb3QtPnN0eWxlX2ZsYWdzIHw9IEZUX1NUWUxFX0ZMQUdfQk9MRDsKKworICAgICAgLyogc2V0IHVwIHRoZSBgZml4ZWRfc2l6ZXMnIGFycmF5ICovCisgICAgICBpZiAoIEZUX05FV19BUlJBWSggcm9vdC0+YXZhaWxhYmxlX3NpemVzLCAxICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIHJvb3QtPm51bV9maXhlZF9zaXplcyA9IDE7CisKKyAgICAgIHsKKyAgICAgICAgRlRfQml0bWFwX1NpemUqICBic2l6ZSA9IHJvb3QtPmF2YWlsYWJsZV9zaXplczsKKyAgICAgICAgRlRfVVNob3J0ICAgICAgICB4X3JlcywgeV9yZXM7CisKKworICAgICAgICBic2l6ZS0+d2lkdGggID0gKEZUX1Nob3J0KWZvbnQtPmhlYWRlci5hdmdfd2lkdGg7CisgICAgICAgIGJzaXplLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBmb250LT5oZWFkZXIucGl4ZWxfaGVpZ2h0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmhlYWRlci5leHRlcm5hbF9sZWFkaW5nICk7CisgICAgICAgIGJzaXplLT5zaXplICAgPSBmb250LT5oZWFkZXIubm9taW5hbF9wb2ludF9zaXplIDw8IDY7CisKKyAgICAgICAgeF9yZXMgPSBmb250LT5oZWFkZXIuaG9yaXpvbnRhbF9yZXNvbHV0aW9uOworICAgICAgICBpZiAoICF4X3JlcyApCisgICAgICAgICAgeF9yZXMgPSA3MjsKKworICAgICAgICB5X3JlcyA9IGZvbnQtPmhlYWRlci52ZXJ0aWNhbF9yZXNvbHV0aW9uOworICAgICAgICBpZiAoICF5X3JlcyApCisgICAgICAgICAgeV9yZXMgPSA3MjsKKworICAgICAgICBic2l6ZS0+eV9wcGVtID0gRlRfTXVsRGl2KCBic2l6ZS0+c2l6ZSwgeV9yZXMsIDcyICk7CisgICAgICAgIGJzaXplLT55X3BwZW0gPSBGVF9QSVhfUk9VTkQoIGJzaXplLT55X3BwZW0gKTsKKworICAgICAgICAvKgorICAgICAgICAgKiB0aGlzIHJlYWRzOgorICAgICAgICAgKgorICAgICAgICAgKiB0aGUgbm9taW5hbCBoZWlnaHQgaXMgbGFyZ2VyIHRoYW4gdGhlIGJib3gncyBoZWlnaHQKKyAgICAgICAgICoKKyAgICAgICAgICogPT4gbm9taW5hbF9wb2ludF9zaXplIGNvbnRhaW5zIGluY29ycmVjdCB2YWx1ZTsKKyAgICAgICAgICogICAgdXNlIHBpeGVsX2hlaWdodCBhcyB0aGUgbm9taW5hbCBoZWlnaHQKKyAgICAgICAgICovCisgICAgICAgIGlmICggYnNpemUtPnlfcHBlbSA+ICggZm9udC0+aGVhZGVyLnBpeGVsX2hlaWdodCA8PCA2ICkgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UyKCggInVzZSBwaXhlbF9oZWlnaHQgYXMgdGhlIG5vbWluYWwgaGVpZ2h0XG4iICkpOworCisgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IGZvbnQtPmhlYWRlci5waXhlbF9oZWlnaHQgPDwgNjsKKyAgICAgICAgICBic2l6ZS0+c2l6ZSAgID0gRlRfTXVsRGl2KCBic2l6ZS0+eV9wcGVtLCA3MiwgeV9yZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGJzaXplLT54X3BwZW0gPSBGVF9NdWxEaXYoIGJzaXplLT5zaXplLCB4X3JlcywgNzIgKTsKKyAgICAgICAgYnNpemUtPnhfcHBlbSA9IEZUX1BJWF9ST1VORCggYnNpemUtPnhfcHBlbSApOworICAgICAgfQorCisgICAgICB7CisgICAgICAgIEZUX0NoYXJNYXBSZWMgIGNoYXJtYXA7CisKKworICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfTk9ORTsKKyAgICAgICAgLyogaW5pdGlhbCBwbGF0Zm9ybS9lbmNvZGluZyBzaG91bGQgaW5kaWNhdGUgdW5zZXQgc3RhdHVzPyAqLworICAgICAgICBjaGFybWFwLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fQVBQTEVfVU5JQ09ERTsKKyAgICAgICAgY2hhcm1hcC5lbmNvZGluZ19pZCA9IFRUX0FQUExFX0lEX0RFRkFVTFQ7CisgICAgICAgIGNoYXJtYXAuZmFjZSAgICAgICAgPSByb290OworCisgICAgICAgIGlmICggZm9udC0+aGVhZGVyLmNoYXJzZXQgPT0gRlRfV2luRk5UX0lEX01BQyApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU47CisgICAgICAgICAgY2hhcm1hcC5wbGF0Zm9ybV9pZCA9IFRUX1BMQVRGT1JNX01BQ0lOVE9TSDsKKy8qICAgICAgICBjaGFybWFwLmVuY29kaW5nX2lkID0gVFRfTUFDX0lEX1JPTUFOOyAqLworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggZm50X2NtYXBfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFybWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CisgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCisgICAgICAgIGlmICggcm9vdC0+bnVtX2NoYXJtYXBzICkKKyAgICAgICAgICByb290LT5jaGFybWFwID0gcm9vdC0+Y2hhcm1hcHNbMF07CisgICAgICB9CisKKyAgICAgIC8qIHNldCB1cCByZW1haW5pbmcgZmxhZ3MgKi8KKworICAgICAgaWYgKCBmb250LT5oZWFkZXIubGFzdF9jaGFyIDwgZm9udC0+aGVhZGVyLmZpcnN0X2NoYXIgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTIoKCAiaW52YWxpZCBudW1iZXIgb2YgZ2x5cGhzXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKworICAgICAgLyogcmVzZXJ2ZSBvbmUgc2xvdCBmb3IgdGhlIC5ub3RkZWYgZ2x5cGggYXQgaW5kZXggMCAqLworICAgICAgcm9vdC0+bnVtX2dseXBocyA9IGZvbnQtPmhlYWRlci5sYXN0X2NoYXIgLQorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmhlYWRlci5maXJzdF9jaGFyICsgMSArIDE7CisKKyAgICAgIGlmICggZm9udC0+aGVhZGVyLmZhY2VfbmFtZV9vZmZzZXQgPj0gZm9udC0+aGVhZGVyLmZpbGVfc2l6ZSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJpbnZhbGlkIGZhbWlseSBuYW1lIG9mZnNldFxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBmYW1pbHlfc2l6ZSA9IGZvbnQtPmhlYWRlci5maWxlX3NpemUgLSBmb250LT5oZWFkZXIuZmFjZV9uYW1lX29mZnNldDsKKyAgICAgIC8qIFNvbWUgYnJva2VuIGZvbnRzIGRvbid0IGRlbGltaXQgdGhlIGZhY2UgbmFtZSB3aXRoIGEgZmluYWwgKi8KKyAgICAgIC8qIE5VTEwgYnl0ZSAtLSB0aGUgZnJhbWUgaXMgZXJyb25lb3VzbHkgb25lIGJ5dGUgdG9vIHNtYWxsLiAgKi8KKyAgICAgIC8qIFdlIHRodXMgYWxsb2NhdGUgb25lIG1vcmUgYnl0ZSwgc2V0dGluZyBpdCBleHBsaWNpdGx5IHRvICAgKi8KKyAgICAgIC8qIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggRlRfQUxMT0MoIGZvbnQtPmZhbWlseV9uYW1lLCBmYW1pbHlfc2l6ZSArIDEgKSApCisgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgRlRfTUVNX0NPUFkoIGZvbnQtPmZhbWlseV9uYW1lLAorICAgICAgICAgICAgICAgICAgIGZvbnQtPmZudF9mcmFtZSArIGZvbnQtPmhlYWRlci5mYWNlX25hbWVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGZhbWlseV9zaXplICk7CisKKyAgICAgIGZvbnQtPmZhbWlseV9uYW1lW2ZhbWlseV9zaXplXSA9ICdcMCc7CisKKyAgICAgIGlmICggRlRfUkVBTExPQyggZm9udC0+ZmFtaWx5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBmdF9zdHJsZW4oIGZvbnQtPmZhbWlseV9uYW1lICkgKyAxICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIHJvb3QtPmZhbWlseV9uYW1lID0gZm9udC0+ZmFtaWx5X25hbWU7CisgICAgICByb290LT5zdHlsZV9uYW1lICA9IChjaGFyICopIlJlZ3VsYXIiOworCisgICAgICBpZiAoIHJvb3QtPnN0eWxlX2ZsYWdzICYgRlRfU1RZTEVfRkxBR19CT0xEICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCByb290LT5zdHlsZV9mbGFncyAmIEZUX1NUWUxFX0ZMQUdfSVRBTElDICkKKyAgICAgICAgICByb290LT5zdHlsZV9uYW1lID0gKGNoYXIgKikiQm9sZCBJdGFsaWMiOworICAgICAgICBlbHNlCisgICAgICAgICAgcm9vdC0+c3R5bGVfbmFtZSA9IChjaGFyICopIkJvbGQiOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIHJvb3QtPnN0eWxlX2ZsYWdzICYgRlRfU1RZTEVfRkxBR19JVEFMSUMgKQorICAgICAgICByb290LT5zdHlsZV9uYW1lID0gKGNoYXIgKikiSXRhbGljIjsKKyAgICB9CisgICAgZ290byBFeGl0OworCisgIEZhaWw6CisgICAgRk5UX0ZhY2VfRG9uZSggZm50ZmFjZSApOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgRk5UX1NpemVfU2VsZWN0KCBGVF9TaXplICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgc3RyaWtlX2luZGV4ICkKKyAgeworICAgIEZOVF9GYWNlICAgICAgICAgIGZhY2UgICA9IChGTlRfRmFjZSlzaXplLT5mYWNlOworICAgIEZUX1dpbkZOVF9IZWFkZXIgIGhlYWRlciA9ICZmYWNlLT5mb250LT5oZWFkZXI7CisKKyAgICBGVF9VTlVTRUQoIHN0cmlrZV9pbmRleCApOworCisKKyAgICBGVF9TZWxlY3RfTWV0cmljcyggc2l6ZS0+ZmFjZSwgMCApOworCisgICAgc2l6ZS0+bWV0cmljcy5hc2NlbmRlciAgICA9IGhlYWRlci0+YXNjZW50ICogNjQ7CisgICAgc2l6ZS0+bWV0cmljcy5kZXNjZW5kZXIgICA9IC0oIGhlYWRlci0+cGl4ZWxfaGVpZ2h0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5hc2NlbnQgKSAqIDY0OworICAgIHNpemUtPm1ldHJpY3MubWF4X2FkdmFuY2UgPSBoZWFkZXItPm1heF93aWR0aCAqIDY0OworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIEZOVF9TaXplX1JlcXVlc3QoIEZUX1NpemUgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKQorICB7CisgICAgRk5UX0ZhY2UgICAgICAgICAgZmFjZSAgICA9IChGTlRfRmFjZSlzaXplLT5mYWNlOworICAgIEZUX1dpbkZOVF9IZWFkZXIgIGhlYWRlciAgPSAmZmFjZS0+Zm9udC0+aGVhZGVyOworICAgIEZUX0JpdG1hcF9TaXplKiAgIGJzaXplICAgPSBzaXplLT5mYWNlLT5hdmFpbGFibGVfc2l6ZXM7CisgICAgRlRfRXJyb3IgICAgICAgICAgZXJyb3IgICA9IEZUX0VSUiggSW52YWxpZF9QaXhlbF9TaXplICk7CisgICAgRlRfTG9uZyAgICAgICAgICAgaGVpZ2h0OworCisKKyAgICBoZWlnaHQgPSBGVF9SRVFVRVNUX0hFSUdIVCggcmVxICk7CisgICAgaGVpZ2h0ID0gKCBoZWlnaHQgKyAzMiApID4+IDY7CisKKyAgICBzd2l0Y2ggKCByZXEtPnR5cGUgKQorICAgIHsKKyAgICBjYXNlIEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUw6CisgICAgICBpZiAoIGhlaWdodCA9PSAoICggYnNpemUtPnlfcHBlbSArIDMyICkgPj4gNiApICkKKyAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU06CisgICAgICBpZiAoIGhlaWdodCA9PSBoZWFkZXItPnBpeGVsX2hlaWdodCApCisgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gRk5UX1NpemVfU2VsZWN0KCBzaXplLCAwICk7CisgIH0KKworCisgIHN0YXRpYyBGVF9FcnJvcgorICBGTlRfTG9hZF9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncyApCisgIHsKKyAgICBGTlRfRmFjZSAgICBmYWNlICAgPSAoRk5UX0ZhY2UpRlRfU0laRV9GQUNFKCBzaXplICk7CisgICAgRk5UX0ZvbnQgICAgZm9udDsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfQnl0ZSogICAgcDsKKyAgICBGVF9VSW50ICAgICBsZW47CisgICAgRlRfQml0bWFwKiAgYml0bWFwID0gJnNsb3QtPmJpdG1hcDsKKyAgICBGVF9VTG9uZyAgICBvZmZzZXQ7CisgICAgRlRfQm9vbCAgICAgbmV3X2Zvcm1hdDsKKworICAgIEZUX1VOVVNFRCggbG9hZF9mbGFncyApOworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICB7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZm9udCA9IGZhY2UtPmZvbnQ7CisKKyAgICBpZiAoICFmb250ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGdseXBoX2luZGV4ID49IChGVF9VSW50KSggRlRfRkFDRSggZmFjZSApLT5udW1fZ2x5cGhzICkgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTEoKCAiRk5UX0xvYWRfR2x5cGg6IGdseXBoIGluZGV4ICVkXG4iLCBnbHlwaF9pbmRleCApKTsKKworICAgIGlmICggZ2x5cGhfaW5kZXggPiAwICkKKyAgICAgIGdseXBoX2luZGV4LS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV2ZXJ0IHRvIHJlYWwgaW5kZXggKi8KKyAgICBlbHNlCisgICAgICBnbHlwaF9pbmRleCA9IGZvbnQtPmhlYWRlci5kZWZhdWx0X2NoYXI7IC8qIHRoZSBgLm5vdGRlZicgZ2x5cGggICovCisKKyAgICBuZXdfZm9ybWF0ID0gRlRfQk9PTCggZm9udC0+aGVhZGVyLnZlcnNpb24gPT0gMHgzMDAgKTsKKyAgICBsZW4gICAgICAgID0gbmV3X2Zvcm1hdCA/IDYgOiA0OworCisgICAgLyogZ2V0IGdseXBoIHdpZHRoIGFuZCBvZmZzZXQgKi8KKyAgICBvZmZzZXQgPSAoIG5ld19mb3JtYXQgPyAxNDggOiAxMTggKSArIGxlbiAqIGdseXBoX2luZGV4OworCisgICAgaWYgKCBvZmZzZXQgPj0gZm9udC0+aGVhZGVyLmZpbGVfc2l6ZSAtIDIgLSAoIG5ld19mb3JtYXQgPyA0IDogMiApICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaW52YWxpZCBGTlQgb2Zmc2V0XG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIHAgPSBmb250LT5mbnRfZnJhbWUgKyBvZmZzZXQ7CisKKyAgICBiaXRtYXAtPndpZHRoID0gRlRfTkVYVF9VU0hPUlRfTEUoIHAgKTsKKworICAgIC8qIGp1bXAgdG8gZ2x5cGggZW50cnkgKi8KKyAgICBpZiAoIG5ld19mb3JtYXQgKQorICAgICAgb2Zmc2V0ID0gRlRfTkVYVF9VTE9OR19MRSggcCApOworICAgIGVsc2UKKyAgICAgIG9mZnNldCA9IEZUX05FWFRfVVNIT1JUX0xFKCBwICk7CisKKyAgICBpZiAoIG9mZnNldCA+PSBmb250LT5oZWFkZXIuZmlsZV9zaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaW52YWxpZCBGTlQgb2Zmc2V0XG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIGp1bXAgdG8gZ2x5cGggZGF0YSAqLworICAgIHAgPSBmb250LT5mbnRfZnJhbWUgKyAvKiBmb250LT5oZWFkZXIuYml0c19vZmZzZXQgKi8gKyBvZmZzZXQ7CisKKyAgICAvKiBhbGxvY2F0ZSBhbmQgYnVpbGQgYml0bWFwICovCisgICAgeworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggc2xvdC0+ZmFjZSApOworICAgICAgRlRfVUludCAgICBwaXRjaCAgPSAoIGJpdG1hcC0+d2lkdGggKyA3ICkgPj4gMzsKKyAgICAgIEZUX0J5dGUqICAgY29sdW1uOworICAgICAgRlRfQnl0ZSogICB3cml0ZTsKKworCisgICAgICBiaXRtYXAtPnBpdGNoICAgICAgPSAoaW50KXBpdGNoOworICAgICAgYml0bWFwLT5yb3dzICAgICAgID0gZm9udC0+aGVhZGVyLnBpeGVsX2hlaWdodDsKKyAgICAgIGJpdG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTU9OTzsKKworICAgICAgaWYgKCBvZmZzZXQgKyBwaXRjaCAqIGJpdG1hcC0+cm93cyA+IGZvbnQtPmhlYWRlci5maWxlX3NpemUgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTIoKCAiaW52YWxpZCBiaXRtYXAgd2lkdGhcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICAvKiBub3RlOiBzaW5jZSBnbHlwaHMgYXJlIHN0b3JlZCBpbiBjb2x1bW5zIGFuZCBub3QgaW4gcm93cyB3ZSAqLworICAgICAgLyogICAgICAgY2FuJ3QgdXNlIGZ0X2dseXBoc2xvdF9zZXRfYml0bWFwICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggRlRfQUxMT0NfTVVMVCggYml0bWFwLT5idWZmZXIsIHBpdGNoLCBiaXRtYXAtPnJvd3MgKSApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgY29sdW1uID0gKEZUX0J5dGUqKWJpdG1hcC0+YnVmZmVyOworCisgICAgICBmb3IgKCA7IHBpdGNoID4gMDsgcGl0Y2gtLSwgY29sdW1uKysgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgbGltaXQgPSBwICsgYml0bWFwLT5yb3dzOworCisKKyAgICAgICAgZm9yICggd3JpdGUgPSBjb2x1bW47IHAgPCBsaW1pdDsgcCsrLCB3cml0ZSArPSBiaXRtYXAtPnBpdGNoICkKKyAgICAgICAgICAqd3JpdGUgPSAqcDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgPSBGVF9HTFlQSF9PV05fQklUTUFQOworICAgIHNsb3QtPmJpdG1hcF9sZWZ0ICAgICA9IDA7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgICAgID0gZm9udC0+aGVhZGVyLmFzY2VudDsKKyAgICBzbG90LT5mb3JtYXQgICAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOworCisgICAgLyogbm93IHNldCB1cCBtZXRyaWNzICovCisgICAgc2xvdC0+bWV0cmljcy53aWR0aCAgICAgICAgPSAoRlRfUG9zKSggYml0bWFwLT53aWR0aCA8PCA2ICk7CisgICAgc2xvdC0+bWV0cmljcy5oZWlnaHQgICAgICAgPSAoRlRfUG9zKSggYml0bWFwLT5yb3dzIDw8IDYgKTsKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IChGVF9Qb3MpKCBiaXRtYXAtPndpZHRoIDw8IDYgKTsKKyAgICBzbG90LT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IDA7CisgICAgc2xvdC0+bWV0cmljcy5ob3JpQmVhcmluZ1kgPSBzbG90LT5iaXRtYXBfdG9wIDw8IDY7CisKKyAgICBmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MoICZzbG90LT5tZXRyaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1BvcykoIGJpdG1hcC0+cm93cyA8PCA2ICkgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIHdpbmZudF9nZXRfaGVhZGVyKCBGVF9GYWNlICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1dpbkZOVF9IZWFkZXJSZWMgICphaGVhZGVyICkKKyAgeworICAgIEZOVF9Gb250ICBmb250ID0gKChGTlRfRmFjZSlmYWNlKS0+Zm9udDsKKworCisgICAgKmFoZWFkZXIgPSBmb250LT5oZWFkZXI7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfV2luRm50UmVjICB3aW5mbnRfc2VydmljZV9yZWMgPQorICB7CisgICAgd2luZm50X2dldF9oZWFkZXIKKyAgfTsKKworIC8qCisgICogIFNFUlZJQ0UgTElTVAorICAqCisgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICB3aW5mbnRfc2VydmljZXNbXSA9CisgIHsKKyAgICB7IEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsIEZUX0ZPTlRfRk9STUFUX1dJTkZOVCB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9XSU5GTlQsICAgICAgJndpbmZudF9zZXJ2aWNlX3JlYyB9LAorICAgIHsgTlVMTCwgTlVMTCB9CisgIH07CisKKworICBzdGF0aWMgRlRfTW9kdWxlX0ludGVyZmFjZQorICB3aW5mbnRfZ2V0X3NlcnZpY2UoIEZUX01vZHVsZSAgICAgICAgIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBzZXJ2aWNlX2lkICkKKyAgeworICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CisKKyAgICByZXR1cm4gZnRfc2VydmljZV9saXN0X2xvb2t1cCggd2luZm50X3NlcnZpY2VzLCBzZXJ2aWNlX2lkICk7CisgIH0KKworCisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKKyAgY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICB3aW5mbnRfZHJpdmVyX2NsYXNzID0KKyAgeworICAgIHsKKyAgICAgIEZUX01PRFVMRV9GT05UX0RSSVZFUiAgICAgICAgfAorICAgICAgRlRfTU9EVUxFX0RSSVZFUl9OT19PVVRMSU5FUywKKyAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorCisgICAgICAid2luZm9udHMiLAorICAgICAgMHgxMDAwMEwsCisgICAgICAweDIwMDAwTCwKKworICAgICAgMCwKKworICAgICAgMCwgICAgICAgICAgICAgICAgICAvKiBGVF9Nb2R1bGVfQ29uc3RydWN0b3IgKi8KKyAgICAgIDAsICAgICAgICAgICAgICAgICAgLyogRlRfTW9kdWxlX0Rlc3RydWN0b3IgICovCisgICAgICB3aW5mbnRfZ2V0X3NlcnZpY2UKKyAgICB9LAorCisgICAgc2l6ZW9mICggRk5UX0ZhY2VSZWMgKSwKKyAgICBzaXplb2YgKCBGVF9TaXplUmVjICksCisgICAgc2l6ZW9mICggRlRfR2x5cGhTbG90UmVjICksCisKKyAgICBGTlRfRmFjZV9Jbml0LAorICAgIEZOVF9GYWNlX0RvbmUsCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIEZUX1NpemVfSW5pdEZ1bmMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogRlRfU2l6ZV9Eb25lRnVuYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiBGVF9TbG90X0luaXRGdW5jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIEZUX1Nsb3RfRG9uZUZ1bmMgKi8KKworICAgIEZOVF9Mb2FkX0dseXBoLAorCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0S2VybmluZ0Z1bmMgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfQXR0YWNoRnVuYyAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICovCisKKyAgICBGTlRfU2l6ZV9SZXF1ZXN0LAorICAgIEZOVF9TaXplX1NlbGVjdAorICB9OworCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUtMi42L3NyYy93aW5mb250cy93aW5mbnQuaCBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvd2luZm50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5ZDI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLTIuNi9zcmMvd2luZm9udHMvd2luZm50LmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHdpbmZudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgV2luZG93cyBGTlQvRk9OIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3IERtaXRyeSBUaW1vc2hrb3YgZm9yIENvZGV3ZWF2ZXJzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19XSU5GTlRfSF9fCisjZGVmaW5lIF9fV0lORk5UX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfV0lORk9OVFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfRFJJVkVSX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisjZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKKyNlbmRpZgorCisgIHR5cGVkZWYgc3RydWN0ICBXaW5NWl9IZWFkZXJSZWNfCisgIHsKKyAgICBGVF9VU2hvcnQgIG1hZ2ljOworICAgIC8qIHNraXBwZWQgY29udGVudCAqLworICAgIEZUX1VTaG9ydCAgbGZhbmV3OworCisgIH0gV2luTVpfSGVhZGVyUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFdpbk5FX0hlYWRlclJlY18KKyAgeworICAgIEZUX1VTaG9ydCAgbWFnaWM7CisgICAgLyogc2tpcHBlZCBjb250ZW50ICovCisgICAgRlRfVVNob3J0ICByZXNvdXJjZV90YWJfb2Zmc2V0OworICAgIEZUX1VTaG9ydCAgcm5hbWVfdGFiX29mZnNldDsKKworICB9IFdpbk5FX0hlYWRlclJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBXaW5QRTMyX0hlYWRlclJlY18KKyAgeworICAgIEZUX1VMb25nICAgbWFnaWM7CisgICAgRlRfVVNob3J0ICBtYWNoaW5lOworICAgIEZUX1VTaG9ydCAgbnVtYmVyX29mX3NlY3Rpb25zOworICAgIC8qIHNraXBwZWQgY29udGVudCAqLworICAgIEZUX1VTaG9ydCAgc2l6ZV9vZl9vcHRpb25hbF9oZWFkZXI7CisgICAgLyogc2tpcHBlZCBjb250ZW50ICovCisgICAgRlRfVVNob3J0ICBtYWdpYzMyOworICAgIC8qIHNraXBwZWQgY29udGVudCAqLworICAgIEZUX1VMb25nICAgcnNyY192aXJ0dWFsX2FkZHJlc3M7CisgICAgRlRfVUxvbmcgICByc3JjX3NpemU7CisgICAgLyogc2tpcHBlZCBjb250ZW50ICovCisKKyAgfSBXaW5QRTMyX0hlYWRlclJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBXaW5QRTMyX1NlY3Rpb25SZWNfCisgIHsKKyAgICBGVF9CeXRlICAgbmFtZVs4XTsKKyAgICAvKiBza2lwcGVkIGNvbnRlbnQgKi8KKyAgICBGVF9VTG9uZyAgdmlydHVhbF9hZGRyZXNzOworICAgIEZUX1VMb25nICBzaXplX29mX3Jhd19kYXRhOworICAgIEZUX1VMb25nICBwb2ludGVyX3RvX3Jhd19kYXRhOworICAgIC8qIHNraXBwZWQgY29udGVudCAqLworCisgIH0gV2luUEUzMl9TZWN0aW9uUmVjOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFdpblBFX1JzcmNEaXJSZWNfCisgIHsKKyAgICBGVF9VTG9uZyAgIGNoYXJhY3RlcmlzdGljczsKKyAgICBGVF9VTG9uZyAgIHRpbWVfZGF0ZV9zdGFtcDsKKyAgICBGVF9VU2hvcnQgIG1ham9yX3ZlcnNpb247CisgICAgRlRfVVNob3J0ICBtaW5vcl92ZXJzaW9uOworICAgIEZUX1VTaG9ydCAgbnVtYmVyX29mX25hbWVkX2VudHJpZXM7CisgICAgRlRfVVNob3J0ICBudW1iZXJfb2ZfaWRfZW50cmllczsKKworICB9IFdpblBFX1JzcmNEaXJSZWM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgV2luUEVfUnNyY0RpckVudHJ5UmVjXworICB7CisgICAgRlRfVUxvbmcgIG5hbWU7CisgICAgRlRfVUxvbmcgIG9mZnNldDsKKworICB9IFdpblBFX1JzcmNEaXJFbnRyeVJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBXaW5QRV9Sc3JjRGF0YUVudHJ5UmVjXworICB7CisgICAgRlRfVUxvbmcgIG9mZnNldF90b19kYXRhOworICAgIEZUX1VMb25nICBzaXplOworICAgIEZUX1VMb25nICBjb2RlX3BhZ2U7CisgICAgRlRfVUxvbmcgIHJlc2VydmVkOworCisgIH0gV2luUEVfUnNyY0RhdGFFbnRyeVJlYzsKKworCisgIHR5cGVkZWYgc3RydWN0ICBXaW5OYW1lSW5mb1JlY18KKyAgeworICAgIEZUX1VTaG9ydCAgb2Zmc2V0OworICAgIEZUX1VTaG9ydCAgbGVuZ3RoOworICAgIEZUX1VTaG9ydCAgZmxhZ3M7CisgICAgRlRfVVNob3J0ICBpZDsKKyAgICBGVF9VU2hvcnQgIGhhbmRsZTsKKyAgICBGVF9VU2hvcnQgIHVzYWdlOworCisgIH0gV2luTmFtZUluZm9SZWM7CisKKworICB0eXBlZGVmIHN0cnVjdCAgV2luUmVzb3VyY2VJbmZvUmVjXworICB7CisgICAgRlRfVVNob3J0ICB0eXBlX2lkOworICAgIEZUX1VTaG9ydCAgY291bnQ7CisKKyAgfSBXaW5SZXNvdXJjZUluZm9SZWM7CisKKworI2RlZmluZSBXSU5GTlRfTVpfTUFHSUMgIDB4NUE0RAorI2RlZmluZSBXSU5GTlRfTkVfTUFHSUMgIDB4NDU0RQorI2RlZmluZSBXSU5GTlRfUEVfTUFHSUMgIDB4NDU1MAorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIEZOVF9Gb250UmVjXworICB7CisgICAgRlRfVUxvbmcgICAgICAgICAgICAgb2Zmc2V0OworCisgICAgRlRfV2luRk5UX0hlYWRlclJlYyAgaGVhZGVyOworCisgICAgRlRfQnl0ZSogICAgICAgICAgICAgZm50X2ZyYW1lOworICAgIEZUX1VMb25nICAgICAgICAgICAgIGZudF9zaXplOworICAgIEZUX1N0cmluZyogICAgICAgICAgIGZhbWlseV9uYW1lOworCisgIH0gRk5UX0ZvbnRSZWMsICpGTlRfRm9udDsKKworCisgIHR5cGVkZWYgc3RydWN0ICBGTlRfRmFjZVJlY18KKyAgeworICAgIEZUX0ZhY2VSZWMgICAgIHJvb3Q7CisgICAgRk5UX0ZvbnQgICAgICAgZm9udDsKKworICAgIEZUX0NoYXJNYXAgICAgIGNoYXJtYXBfaGFuZGxlOworICAgIEZUX0NoYXJNYXBSZWMgIGNoYXJtYXA7ICAvKiBhIHNpbmdsZSBjaGFybWFwIHBlciBmYWNlICovCisKKyAgfSBGTlRfRmFjZVJlYywgKkZOVF9GYWNlOworCisKKyAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICkgIHdpbmZudF9kcml2ZXJfY2xhc3M7CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX1dJTkZOVF9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi92ZXJzaW9uLnNlZCBiL2ZyZWV0eXBlLTIuNi92ZXJzaW9uLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjgxZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUtMi42L3ZlcnNpb24uc2VkCkBAIC0wLDAgKzEsNSBAQAorIyEgL3Vzci9iaW4vc2VkIC1uZgorCitzL14jZGVmaW5lICAqRlJFRVRZUEVfTUFKT1IgICpcKFteIF1bXiBdKlwpLiokL2ZyZWV0eXBlX21ham9yPSJcMSIgOy9wCitzL14jZGVmaW5lICAqRlJFRVRZUEVfTUlOT1IgICpcKFteIF1bXiBdKlwpLiokL2ZyZWV0eXBlX21pbm9yPSIuXDEiIDsvcAorcy9eI2RlZmluZSAgKkZSRUVUWVBFX1BBVENIICAqXChbXiBdW14gXSpcKS4qJC9mcmVldHlwZV9wYXRjaD0iLlwxIiA7L3AKZGlmZiAtLWdpdCBhL2ZyZWV0eXBlLTIuNi92bXNfbWFrZS5jb20gYi9mcmVldHlwZS0yLjYvdm1zX21ha2UuY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTIyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS0yLjYvdm1zX21ha2UuY29tCkBAIC0wLDAgKzEsMTI4NiBAQAorJCEgbWFrZSBGcmVldHlwZTIgdW5kZXIgT3BlblZNUworJCEKKyQhIENvcHlyaWdodCAyMDAzLTIwMTUgYnkKKyQhIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyQhCiskISBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorJCEgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorJCEgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyQhIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CiskISBmdWxseS4KKyQhCiskIQorJCEgRXh0ZXJuYWwgbGlicmFyaWVzIChsaWtlIEZyZWV0eXBlLCBYUE0sIGV0Yy4pIGFyZSBzdXBwb3J0ZWQgdmlhIHRoZQorJCEgY29uZmlnIGZpbGUgVk1TTElCLkRBVC4gUGxlYXNlIGNoZWNrIHRoZSBzYW1wbGUgZmlsZSwgd2hpY2ggaXMgcGFydCBvZiB0aGlzCiskISBkaXN0cmlidXRpb24sIGZvciB0aGUgaW5mb3JtYXRpb24geW91IG5lZWQgdG8gcHJvdmlkZQorJCEKKyQhIFRoaXMgcHJvY2VkdXJlIGN1cnJlbnRseSBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjb21tYW5kbGluZSBvcHRpb25zCiskISBpbiBhcmJpdHJhcnkgb3JkZXIKKyQhCiskISAqIERFQlVHIC0gQ29tcGlsZSBtb2R1bGVzIHdpdGggL25vb3B0L2RlYnVnIGFuZCBsaW5rIHNoYXJlYWJsZSBpbWFnZQorJCEgICAgICAgICAgIHdpdGggL2RlYnVnCiskISAqIExPUFRTIC0gT3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gdGhlIGxpbmsgY29tbWFuZAorJCEgKiBDQ09QVCAtIE9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyCiskIQorJCEgSW4gY2FzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBpbnN0YWxsIHlvdSBtaWdodCBjb250YWN0IG1lIGF0CiskISB6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gKHByZWZlcnJlZCkgb3IKKyQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKKyQhCiskISBNYWtlIHByb2NlZHVyZSBoaXN0b3J5IGZvciBGcmVldHlwZTIKKyQhCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDQwNDAxIEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgorJCEgMC4wMiAyMDA0MTAzMCBBZGQgZXJyb3IgaGFuZGxpbmcsIEZyZWV0eXBlIDIuMS45CiskIQorJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKKyQgdHJ1ZSAgPSAxCiskIGZhbHNlID0gMAorJCB0bXBuYW0gPSAidGVtcF8iICsgZiRnZXRqcGkoIiIsInBpZCIpCiskIHR0ID0gdG1wbmFtICsgIi50eHQiCiskIHRjID0gdG1wbmFtICsgIi5jIgorJCB0aCA9IHRtcG5hbSArICIuaCIKKyQgaXRzX2RlY2MgPSBmYWxzZQorJCBpdHNfdmF4YyA9IGZhbHNlCiskIGl0c19nbnVjID0gZmFsc2UKKyQhCiskISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgorJCEKKyQgTWFrZSAgICA9ICIiCiskIGNjb3B0ICAgPSAiL25hbWU9YXNfaXMvZmxvYXQ9aWVlZSIKKyQgbG9wdHMgICA9ICIiCiskIGRuc3JsICAgPSAiIgorJCBhY29uZl9pbl9maWxlID0gImNvbmZpZy5oaW4iCiskIG5hbWUgICAgPSAiRnJlZXR5cGUyIgorJCBtYXBmaWxlID0gIG5hbWUgKyAiLm1hcCIKKyQgb3B0ZmlsZSA9ICBuYW1lICsgIi5vcHQiCiskIHNfY2FzZSAgPSBmYWxzZQorJCBsaWJsaXN0ID0gIiIKKyQhCiskIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpcm9ubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQorJCBteWRlZiAgPSBGJHBhcnNlKHdob2FtaSwsLCJERVZJQ0UiKQorJCBteWRpciAgPSBmJHBhcnNlKHdob2FtaSwsLCJESVJFQ1RPUlkiKSAtICJdWyIKKyQgbXlwcm9jID0gZiRwYXJzZSh3aG9hbWksLCwiTmFtZSIpICsgZiRwYXJzZSh3aG9hbWksLCwidHlwZSIpCiskIQorJCEgQ2hlY2sgZm9yIE1NSy9NTVMKKyQhCiskIElmIEYkU2VhcmNoICgiU3lzJFN5c3RlbTpNTVMuRVhFIikgLm5lcy4gIiIgVGhlbiBNYWtlID0gIk1NUyIKKyQgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCiskIQorJCEgV2hpY2ggY29tbWFuZCBwYXJhbWV0ZXJzIHdlcmUgZ2l2ZW4KKyQhCiskIGdvc3ViIGNoZWNrX29wdHMKKyQhCiskISBDcmVhdGUgb3B0aW9uIGZpbGUKKyQhCiskIG9wZW4vd3JpdGUgb3B0ZiAnb3B0ZmlsZScKKyQhCiskISBQdWxsIGluIGV4dGVybmFsIGxpYnJhcmllcworJCEKKyQgY3JlYXRlIGxpYnMub3B0CiskIG9wZW4vd3JpdGUgbGlic2YgbGlicy5vcHQKKyQgZ29zdWIgY2hlY2tfY3JlYXRlX3Ztc2xpYgorJCEKKyQhIENyZWF0ZSBvYmplY3RzCiskIQorJCBpZiBsaWJkZWZzIC5uZXMuICIiCiskIHRoZW4KKyQgICBjY29wdCA9IGNjb3B0ICsgIi9kZWZpbmU9KCIgKyBmJGV4dHJhY3QoMCxmJGxlbmd0aChsaWJkZWZzKS0xLGxpYmRlZnMpICsgIikiCiskIGVuZGlmCiskIQorJCBpZiBmJGxvY2F0ZSgiQVNfSVMiLGYkZWRpdChjY29wdCwiVVBDQVNFIikpIC5sdC4gZiRsZW5ndGgoY2NvcHQpIC0KKyAgICB0aGVuIHNfY2FzZSA9IHRydWUKKyQgZ29zdWIgY3JlYV9tbXMKKyQhCiskICdNYWtlJyAvbWFjcm89KGNvbXBfZmxhZ3M9IicnY2NvcHQnIikKKyQgcHVyZ2Uvbm9sb2cgWy4uLl1kZXNjcmlwLm1tcworJCEKKyQhIEFkZCB0aGVtIHRvIG9wdGlvbnMKKyQhCiskRkxPT1A6CiskICBmaWxlID0gZiRlZGl0KGYkc2VhcmNoKCJbLi4uXSoub2JqIiksIlVQQ0FTRSIpCiskICBpZiAoZmlsZSAubmVzLiAiIikKKyQgIHRoZW4KKyQgICAgaWYgZiRsb2NhdGUoIkRFTU9TIixmaWxlKSAuZXFzLiBmJGxlbmd0aChmaWxlKSB0aGVuIHdyaXRlIG9wdGYgZmlsZQorJCAgICBnb3RvIGZsb29wCiskICBlbmRpZgorJCEKKyQgY2xvc2Ugb3B0ZgorJCEKKyQhCiskISBBbHBoYSBnZXRzIGEgc2hhcmVhYmxlIGltYWdlCiskIQorJCBJZiBmJGdldHN5aSgiSFdfTU9ERUwiKSAuZ3QuIDEwMjQKKyQgVGhlbgorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGZyZWV0eXBlMnNoci5leGUiCiskICAgY2FsbCBhbmFsX29ial9heHAgJ29wdGZpbGUnIF9saW5rLm9wdAorJCAgIG9wZW4vYXBwZW5kICBvcHRmICdvcHRmaWxlJworJCAgIGlmIHNfY2FzZSB0aGVuIFdSSVRFIG9wdGYgImNhc2Vfc2Vuc2l0aXZlPVlFUyIKKyQgICBjbG9zZSBvcHRmCiskICAgTElOS18vTk9ERUIvU0hBUkU9Wy5saWJdZnJlZXR5cGUyc2hyLmV4ZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGZpbGUnL29wdCxsaWJzLm9wdC9vcHQsX2xpbmsub3B0L29wdAorJCBlbmRpZgorJCEKKyQgZXhpdAorJCEKKyQKKyRFUlJfTElCOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJFcnJvciByZWFkaW5nIGNvbmZpZyBmaWxlIHZtc2xpYi5kYXQiCiskIGdvdG8gZXJyX2V4aXQKKyRGVDJfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJDb3VsZCBub3QgbG9jYXRlIEZyZWV0eXBlIDIgaW5jbHVkZSBmaWxlcyIKKyQgZ290byBlcnJfZXhpdAorJEVSUl9FWElUOgorJCBzZXQgbWVzc2FnZS9mYWNpbC9pZGVudC9zZXZlci90ZXh0CiskIGNsb3NlL25vbG9nIG9wdGYKKyQgY2xvc2Uvbm9sb2cgb3V0CiskIGNsb3NlL25vbG9nIGxpYmRhdGEKKyQgY2xvc2Uvbm9sb2cgaW4KKyQgY2xvc2Uvbm9sb2cgYXRtcAorJCBjbG9zZS9ub2xvZyB4dG1wCiskIHdyaXRlIHN5cyRvdXRwdXQgIkV4aXRpbmcuLi4iCiskIGV4aXQgMgorJCEKKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgSWYgTU1TL01NSyBhcmUgYXZhaWxhYmxlIGR1bXAgb3V0IHRoZSBkZXNjcmlwLm1tcyBpZiByZXF1aXJlZAorJCEKKyRDUkVBX01NUzoKKyQgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgZGVzY3JpcC5tbXMgZmlsZXMgLi4uIgorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gTWFpbiBkaXJlY3RvcnkiCiskIGNyZWF0ZSBkZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgYnVpbGQgc3lzdGVtIC0tIHRvcC1sZXZlbCBNYWtlZmlsZSBmb3IgT3BlblZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDEgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorJCBFT0QKKyQgd3JpdGUgb3V0ICJDRkxBR1MgPSAiLCBjY29wdAorJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKworCithbGwgOgorICAgICAgICBkZWZpbmUgZnJlZXR5cGUgWy0tLmluY2x1ZGVdCisgICAgICAgIGRlZmluZSBwc2F1eCBbLS5wc2F1eF0KKyAgICAgICAgZGVmaW5lIGF1dG9maXQgWy0uYXV0b2ZpdF0KKyAgICAgICAgZGVmaW5lIGF1dG9oaW50IFstLmF1dG9oaW50XQorICAgICAgICBkZWZpbmUgYmFzZSBbLS5iYXNlXQorICAgICAgICBkZWZpbmUgY2FjaGUgWy0uY2FjaGVdCisgICAgICAgIGRlZmluZSBjZmYgWy0uY2ZmXQorICAgICAgICBkZWZpbmUgY2lkIFstLmNpZF0KKyAgICAgICAgZGVmaW5lIHBjZiBbLS5wY2ZdCisgICAgICAgIGRlZmluZSBwc25hbWVzIFstLnBzbmFtZXNdCisgICAgICAgIGRlZmluZSByYXN0ZXIgWy0ucmFzdGVyXQorICAgICAgICBkZWZpbmUgc2ZudCBbLS5zZm50XQorICAgICAgICBkZWZpbmUgc21vb3RoIFstLnNtb290aF0KKyAgICAgICAgZGVmaW5lIHRydWV0eXBlIFstLnRydWV0eXBlXQorICAgICAgICBkZWZpbmUgdHlwZTEgWy0udHlwZTFdCisgICAgICAgIGRlZmluZSB3aW5mb250cyBbLS53aW5mb250c10KKyAgICAgICAgaWYgZiRzZWFyY2goImxpYi5kaXIiKSAuZXFzLiAiIiB0aGVuIGNyZWF0ZS9kaXJlY3RvcnkgWy5saWJdCisgICAgICAgIHNldCBkZWZhdWx0IFsuYnVpbGRzLnZtc10KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorIyAgICAgICAgc2V0IGRlZmF1bHQgWy0tLnNyYy5hdXRvZml0XQorIyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS0uc3JjLmF1dG9oaW50XQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLmJhc2VdCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0uYmRmXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLmNhY2hlXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLmNmZl0KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS5jaWRdCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0uZ3ppcF0KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS5senddCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0ub3R2YWxpZF0KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS5wY2ZdCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0ucGZyXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnBzYXV4XQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnBzaGludGVyXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnBzbmFtZXNdCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0ucmFzdGVyXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnNmbnRdCisgICAgICAgICQoTU1TKSQoTU1TUVVBTElGSUVSUykKKyAgICAgICAgc2V0IGRlZmF1bHQgWy0uc21vb3RoXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnRydWV0eXBlXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnR5cGUxXQorICAgICAgICAkKE1NUykkKE1NU1FVQUxJRklFUlMpCisgICAgICAgIHNldCBkZWZhdWx0IFstLnR5cGU0Ml0KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS53aW5mb250c10KKyAgICAgICAgJChNTVMpJChNTVNRVUFMSUZJRVJTKQorICAgICAgICBzZXQgZGVmYXVsdCBbLS1dCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuYnVpbGRzLnZtc10gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5idWlsZHMudm1zXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLmJ1aWxkcy52bXNdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgc3lzdGVtIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFtdLFstLS5pbmNsdWRlXSxbLS0uc3JjLmJhc2VdKQorCitPQkpTPWZ0c3lzdGVtLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkvY3JlYXRlIFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworZnRzeXN0ZW0ub2JqIDogZnRzeXN0ZW0uYyBmdGNvbmZpZy5oCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLmF1dG9maXRdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLmF1dG9maXRdZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLmF1dG9maXRdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgYXV0by1maXQgbW9kdWxlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworQ0ZMQUdTPSQoQ09NUF9GTEFHUykkKERFQlVHKS9pbmNsdWRlPShbLS0uaW5jbHVkZV0sWy0tLnNyYy5hdXRvZml0XSkKKworT0JKUz1hZmFuZ2xlcy5vYmosYWZoaW50cy5vYmosYWZsYXRpbi5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMuYXV0b2hpbnRdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLmF1dG9oaW50XWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5hdXRvaGludF1kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBhdXRvLWhpbnRlciBtb2R1bGUgY29tcGlsYXRpb24gcnVsZXMgZm9yIFZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgQ2F0aGFyb24gUHJvZHVjdGlvbnMgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ2F0aGFyb24gVHlwb2dyYXBoeSBQcm9qZWN0IGFuZCBzaGFsbCBvbmx5CisjIGJlIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDYXRoYXJvbgorIyBPcGVuIFNvdXJjZSBMaWNlbnNlIHRoYXQgc2hvdWxkIGNvbWUgd2l0aCB0aGlzIGZpbGUgdW5kZXIgdGhlIG5hbWUKKyMgYENhdGhhcm9uTGljZW5zZS50eHQnLiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorIyB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyMgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorIworIyBOb3RlIHRoYXQgdGhpcyBsaWNlbnNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgRnJlZVR5cGUgbGljZW5zZS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2w9KFstLS5pbmNsdWRlXSxbLS0uc3JjLmF1dG9oaW50XSkKKworT0JKUz1hdXRvaGludC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMuYmFzZV0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMuYmFzZV1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMuYmFzZV1kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBiYXNlIGxheWVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAzIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5idWlsZHMudm1zXSxbLS0uaW5jbHVkZV0sWy0tLnNyYy5iYXNlXSkKKworT0JKUz1mdGJhc2Uub2JqLGZ0aW5pdC5vYmosZnRnbHlwaC5vYmosZnRkZWJ1Zy5vYmosZnRiZGYub2JqLGZ0bW0ub2JqLFwKKyAgICAgZnR0eXBlMS5vYmosZnRmbnRmbXQub2JqLGZ0cGZyLm9iaixmdHN0cm9rZS5vYmosZnR3aW5mbnQub2JqLGZ0YmJveC5vYmosXAorICAgICBmdGJpdG1hcC5vYmosZnRsY2RmaWwub2JqLGZ0Z2FzcC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMuYmRmXSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5iZGZdZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLmJkZl1kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBCREYgZHJpdmVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLmJkZl0pCisKK09CSlM9YmRmLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5jYWNoZV0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMuY2FjaGVdZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLmNhY2hlXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIENhY2hlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLmNhY2hlXSkKKworT0JKUz1mdGNhY2hlLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCitmdGNhY2hlLm9iaiA6IGZ0Y2FjaGUuYyBmdGNiYXNpYy5jIGZ0Y2NhY2hlLmMgZnRjY21hcC5jIGZ0Y2dseXBoLmMgZnRjaW1hZ2UuYyBcCisgICAgICAgICAgICAgIGZ0Y21hbmFnLmMgZnRjbXJ1LmMgZnRjc2JpdHMuYworCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5jZmZdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLmNmZl1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMuY2ZmXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIE9wZW5UeXBlL0NGRiBkcml2ZXIgY29tcGlsYXRpb24gcnVsZXMgZm9yIFZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oWy0tLmluY2x1ZGVdLFstLS5zcmMuY2ZmXSkKKworT0JKUz1jZmYub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLmNpZF0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMuY2lkXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5jaWRdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgQ0lEIGRyaXZlciBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgMjAwMSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworQ0ZMQUdTPSQoQ09NUF9GTEFHUykkKERFQlVHKS9pbmNsdWRlPShbLS0uaW5jbHVkZV0sWy0tLnNyYy5jaWRdKQorCitPQkpTPXR5cGUxY2lkLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5nemlwXSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5nemlwXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5nemlwXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIEdaaXAgc3VwcG9ydCBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgMjAwMiBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCiskRU9ECiskIGlmIGxpYmluY3MgLm5lcy4gIiIgdGhlbiB3cml0ZSBvdXQgIkxJQklOQ1MgPSAiLCBsaWJpbmNzIC0gIiwiLCAiLCIKKyQgd3JpdGUgb3V0ICJDT01QX0ZMQUdTID0gIiwgY2NvcHQKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oJChMSUJJTkNTKVstLS5pbmNsdWRlXSxbLS0uc3JjLmd6aXBdKQorCitPQkpTPWZ0Z3ppcC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMubHp3XSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5senddZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLmx6d11kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBMWlcgc3VwcG9ydCBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgMjAwNCBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCiskRU9ECiskIGlmIGxpYmluY3MgLm5lcy4gIiIgdGhlbiB3cml0ZSBvdXQgIkxJQklOQ1MgPSAiLCBsaWJpbmNzIC0gIiwiLCAiLCIKKyQgd3JpdGUgb3V0ICJDT01QX0ZMQUdTID0gIiwgY2NvcHQKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oJChMSUJJTkNTKVstLS5pbmNsdWRlXSxbLS0uc3JjLmx6d10pCisKK09CSlM9ZnRsencub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLm90bGF5b3V0XSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5vdGxheW91dF1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMub3RsYXlvdXRdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgT1QgbGF5b3V0IGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDA0IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLm90bGF5b3V0XSkKKworT0JKUz1vdGxiYXNlLm9iaixvdGxjb21tbi5vYmosb3RsZ2RlZi5vYmosb3RsZ3Bvcy5vYmosb3RsZ3N1Yi5vYmosXAorICAgICBvdGxqc3RmLm9iaixvdGxwYXJzZS5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5vdHZhbGlkXSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5vdHZhbGlkXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5vdHZhbGlkXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDA0IGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLm90dmFsaWRdKQorCitPQkpTPW90dmFsaWQub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLnBjZl0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMucGNmXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5wY2ZdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgcGNmIGRyaXZlciBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgYnkKKyMgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnBjZl0pCisKK09CSlM9cGNmLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5wZnJdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLnBmcl1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMucGZyXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFBGUiBkcml2ZXIgY29tcGlsYXRpb24gcnVsZXMgZm9yIFZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDIgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oWy0tLmluY2x1ZGVdLFstLS5zcmMucGZyXSkKKworT0JKUz1wZnIub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLnBzYXV4XSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5wc2F1eF1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMucHNhdXhdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgUFNhdXggZHJpdmVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnBzYXV4XSkKKworT0JKUz1wc2F1eC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMucHNoaW50ZXJdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLnBzaGludGVyXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5wc2hpbnRlcl1kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBQU0hpbnRlciBkcml2ZXIgY29tcGlsYXRpb24gcnVsZXMgZm9yIE9wZW5WTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnBzbmFtZXNdKQorCitPQkpTPXBzaGludGVyLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5wc25hbWVzXSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5wc25hbWVzXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5wc25hbWVzXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFBTTmFtZXMgZHJpdmVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnBzbmFtZXNdKQorCitPQkpTPXBzbmFtZXMub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLnJhc3Rlcl0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMucmFzdGVyXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5yYXN0ZXJdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgcmVuZGVyZXIgbW9kdWxlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnJhc3Rlcl0pCisKK09CSlM9cmFzdGVyLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy5zZm50XSBkaXJlY3RvcnkiCiskIGNyZWF0ZSBbLnNyYy5zZm50XWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5zZm50XWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFNGTlQgZHJpdmVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAxLCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnNmbnRdKQorCitPQkpTPXNmbnQub2JqCisKK2FsbCA6ICQoT0JKUykKKyAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCisKKyMgRU9GCiskIGVvZAorJCBjbG9zZSBvdXQKKyQgd3JpdGUgc3lzJG91dHB1dCAiLi4uIFsuc3JjLnNtb290aF0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMuc21vb3RoXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy5zbW9vdGhdZGVzY3JpcC5tbXMKKyQgY29weSBzeXMkaW5wdXQ6IG91dAorJCBkZWNrCisjCisjIEZyZWVUeXBlIDIgc21vb3RoIHJlbmRlcmVyIG1vZHVsZSBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgMjAwMSBieQorIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKKyMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKKyMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKKyMgZnVsbHkuCisKKworQ0ZMQUdTPSQoQ09NUF9GTEFHUykkKERFQlVHKS9pbmNsdWRlPShbLS0uaW5jbHVkZV0sWy0tLnNyYy5zbW9vdGhdKQorCitPQkpTPXNtb290aC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCB3cml0ZSBzeXMkb3V0cHV0ICIuLi4gWy5zcmMudHJ1ZXR5cGVdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLnRydWV0eXBlXWRlc2NyaXAubW1zCiskIG9wZW4vYXBwZW5kIG91dCBbLnNyYy50cnVldHlwZV1kZXNjcmlwLm1tcworJCBjb3B5IHN5cyRpbnB1dDogb3V0CiskIGRlY2sKKyMKKyMgRnJlZVR5cGUgMiBUcnVlVHlwZSBkcml2ZXIgY29tcGlsYXRpb24gcnVsZXMgZm9yIFZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oWy0tLmluY2x1ZGVdLFstLS5zcmMudHJ1ZXR5cGVdKQorCitPQkpTPXRydWV0eXBlLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy50eXBlMV0gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMudHlwZTFdZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLnR5cGUxXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFR5cGUxIGRyaXZlciBjb21waWxhdGlvbiBydWxlcyBmb3IgVk1TCisjCisKKworIyBDb3B5cmlnaHQgMTk5Ni0yMDAwLCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnR5cGUxXSkKKworT0JKUz10eXBlMS5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKwordHlwZTEub2JqIDogdHlwZTEuYyB0MXBhcnNlLmMgdDFsb2FkLmMgdDFvYmpzLmMgdDFkcml2ZXIuYyB0MWdsb2FkLmMgdDFhZm0uYworCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy50eXBlNDJdIGRpcmVjdG9yeSIKKyQgY3JlYXRlIFsuc3JjLnR5cGU0Ml1kZXNjcmlwLm1tcworJCBvcGVuL2FwcGVuZCBvdXQgWy5zcmMudHlwZTQyXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFR5cGUgNDIgZHJpdmVyIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBWTVMKKyMKKworCisjIENvcHlyaWdodCAyMDAyIGJ5CisjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAorIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQorIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAorIyBmdWxseS4KKworCitDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5pbmNsdWRlXSxbLS0uc3JjLnR5cGU0Ml0pCisKK09CSlM9dHlwZTQyLm9iagorCithbGwgOiAkKE9CSlMpCisgICAgICAgIGxpYnJhcnkgWy0tLmxpYl1mcmVldHlwZS5vbGIgJChPQkpTKQorCisjIEVPRgorJCBlb2QKKyQgY2xvc2Ugb3V0CiskIHdyaXRlIHN5cyRvdXRwdXQgIi4uLiBbLnNyYy53aW5mb250c10gZGlyZWN0b3J5IgorJCBjcmVhdGUgWy5zcmMud2luZm9udHNdZGVzY3JpcC5tbXMKKyQgb3Blbi9hcHBlbmQgb3V0IFsuc3JjLndpbmZvbnRzXWRlc2NyaXAubW1zCiskIGNvcHkgc3lzJGlucHV0OiBvdXQKKyQgZGVjaworIworIyBGcmVlVHlwZSAyIFdpbmRvd3MgRk5UL0ZPTiBkcml2ZXIgY29tcGlsYXRpb24gcnVsZXMgZm9yIFZNUworIworCisKKyMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgYnkKKyMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCisjIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CisjIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CisjIGZ1bGx5LgorCisKK0NGTEFHUz0kKENPTVBfRkxBR1MpJChERUJVRykvaW5jbHVkZT0oWy0tLmluY2x1ZGVdLFstLS5zcmMud2luZm9udHNdKQorCitPQkpTPXdpbmZudC5vYmoKKworYWxsIDogJChPQkpTKQorICAgICAgICBsaWJyYXJ5IFstLS5saWJdZnJlZXR5cGUub2xiICQoT0JKUykKKworIyBFT0YKKyQgZW9kCiskIGNsb3NlIG91dAorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQ2hlY2sgY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHNldCBzeW1ib2xzIGFjY29yZGluZ2x5CiskIQorJCBDSEVDS19PUFRTOgorJCBpID0gMQorJCBPUFRfTE9PUDoKKyQgaWYgaSAubHQuIDkKKyQgdGhlbgorJCAgIGNwYXJtID0gZiRlZGl0KHAnaScsInVwY2FzZSIpCiskICAgaWYgY3Bhcm0gLmVxcy4gIkRFQlVHIgorJCAgIHRoZW4KKyQgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25vb3B0L2RlYiIKKyQgICAgIGxvcHRzID0gbG9wdHMgKyAiL2RlYiIKKyQgICBlbmRpZgorJCAgIGlmIGYkbG9jYXRlKCJDQ09QVD0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQorJCAgIHRoZW4KKyQgICAgIHN0YXJ0ID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKKyQgICAgIGxlbiAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKKyQgICAgIGNjb3B0ID0gY2NvcHQgKyBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQorJCAgIGVuZGlmCiskICAgaWYgY3Bhcm0gLmVxcy4gIkxJTksiIHRoZW4gbGlua29ubHkgPSB0cnVlCiskICAgaWYgZiRsb2NhdGUoIkxPUFRTPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCiskICAgdGhlbgorJCAgICAgc3RhcnQgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgbGVuICAgPSBmJGxlbmd0aChjcGFybSkgLSBzdGFydAorJCAgICAgbG9wdHMgPSBsb3B0cyArIGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCiskICAgZW5kaWYKKyQgICBpZiBmJGxvY2F0ZSgiQ0M9IixjcGFybSkgLmx0LiBmJGxlbmd0aChjcGFybSkKKyQgICB0aGVuCiskICAgICBzdGFydCAgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgbGVuICAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKKyQgICAgIGNjX2NvbSA9IGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCisgICAgICBpZiAoY2NfY29tIC5uZXMuICJERUNDIikgLmFuZC4gLQorICAgICAgICAgKGNjX2NvbSAubmVzLiAiVkFYQyIpIC5hbmQuIC0KKwkgKGNjX2NvbSAubmVzLiAiR05VQyIpCiskICAgICB0aGVuCiskICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVuc3VwcG9ydGVkIGNvbXBpbGVyIGNob2ljZSAnJ2NjX2NvbScgaWdub3JlZCIKKyQgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVXNlIERFQ0MsIFZBWEMsIG9yIEdOVUMgaW5zdGVhZCIKKyQgICAgIGVsc2UKKyQgICAgIAlpZiBjY19jb20gLmVxcy4gIkRFQ0MiIHRoZW4gaXRzX2RlY2MgPSB0cnVlCiskICAgICAJaWYgY2NfY29tIC5lcXMuICJWQVhDIiB0aGVuIGl0c192YXhjID0gdHJ1ZQorJCAgICAgCWlmIGNjX2NvbSAuZXFzLiAiR05VQyIgdGhlbiBpdHNfZ251YyA9IHRydWUKKyQgICAgIGVuZGlmCiskICAgZW5kaWYKKyQgICBpZiBmJGxvY2F0ZSgiTUFLRT0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQorJCAgIHRoZW4KKyQgICAgIHN0YXJ0ICA9IGYkbG9jYXRlKCI9IixjcGFybSkgKyAxCiskICAgICBsZW4gICAgPSBmJGxlbmd0aChjcGFybSkgLSBzdGFydAorJCAgICAgbW1rcyA9IGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCiskICAgICBpZiAobW1rcyAuZXFzLiAiTU1LIikgLm9yLiAobW1rcyAuZXFzLiAiTU1TIikKKyQgICAgIHRoZW4KKyQgICAgICAgbWFrZSA9IG1ta3MKKyQgICAgIGVsc2UKKyQgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5zdXBwb3J0ZWQgbWFrZSBjaG9pY2UgJydtbWtzJyBpZ25vcmVkIgorJCAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVc2UgTU1LIG9yIE1NUyBpbnN0ZWFkIgorJCAgICAgZW5kaWYKKyQgICBlbmRpZgorJCAgIGkgPSBpICsgMQorJCAgIGdvdG8gb3B0X2xvb3AKKyQgZW5kaWYKKyQgcmV0dXJuCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEKKyQhIFRha2UgY2FyZSBvZiBkcml2ZXIgZmlsZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGV4dGVybmFsIGxpYnJhcmllcworJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDA0MDIyMCBGaXJzdCB2ZXJzaW9uIHRvIHJlY2VpdmUgYSBudW1iZXIKKyQhIDAuMDIgMjAwNDAyMjkgRWNobyBjdXJyZW50IHByb2NlZHVyZSBuYW1lOyB1c2UgZ2VuZXJhbCBlcnJvciBleGl0IGhhbmRsZXIKKyQhICAgICAgICAgICAgICAgUmVtb3ZlIHhwbSBoYWNrIC0+IFJlcGxhY2VkIGJ5IG1vcmUgZ2VuZXJhbCBkbnNybCBoYW5kbGluZworJENIRUNLX0NSRUFURV9WTVNMSUI6CiskIQorJCBpZiBmJHNlYXJjaCgiVk1TTElCLkRBVCIpIC5lcXMuICIiCiskIHRoZW4KKyQgICB0eXBlL291dD12bXNsaWIuZGF0IHN5cyRpbnB1dAorIQorISBUaGlzIGlzIGEgc2ltcGxlIGRyaXZlciBmaWxlIHdpdGggaW5mb3JtYXRpb24gdXNlZCBieSB2bXNfbWFrZS5jb20gdG8KKyEgY2hlY2sgaWYgZXh0ZXJuYWwgbGlicmFyaWVzIChsaWtlIHQxbGliIGFuZCBmcmVldHlwZSkgYXJlIGF2YWlsYWJsZSBvbgorISB0aGUgc3lzdGVtLgorIQorISBMYXlvdXQgb2YgdGhlIGZpbGU6CishCishICAgIC0gTGluZXMgc3RhcnRpbmcgd2l0aCAhIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnRzCishICAgIC0gRWxlbWVudHMgaW4gYSBkYXRhIGxpbmUgYXJlIHNlcGFyYXRlZCBieSAjIHNpZ25zCishICAgIC0gVGhlIGVsZW1lbnRzIG5lZWQgdG8gYmUgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIKKyEgICAgICAxLikgTmFtZSBvZiB0aGUgTGlicmFyeSAob25seSB1c2VkIGZvciBpbmZvcm1hdGl2ZSBtZXNzYWdlcworISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHZtc19tYWtlLmNvbSkKKyEgICAgICAyLikgTG9jYXRpb24gd2hlcmUgdGhlIG9iamVjdCBsaWJyYXJ5IGNhbiBiZSBmb3VuZAorISAgICAgIDMuKSBMb2NhdGlvbiB3aGVyZSB0aGUgaW5jbHVkZSBmaWxlcyBmb3IgdGhlIGxpYnJhcnkgY2FuIGJlIGZvdW5kCishICAgICAgNC4pIEluY2x1ZGUgZmlsZSB1c2VkIHRvIHZlcmlmeSBsaWJyYXJ5IGxvY2F0aW9uCishICAgICAgNS4pIENQUCBkZWZpbmUgdG8gcGFzcyB0byB0aGUgYnVpbGQgdG8gaW5kaWNhdGUgYXZhaWxhYmlsaXR5IG9mCishICAgICAgICAgIHRoZSBsaWJyYXJ5CishCishIEV4YW1wbGU6IFRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdyBob3cgZGVmaW5pdGlvbnMKKyEgICAgICAgICAgbWlnaHQgbG9vayBsaWtlLiBUaGV5IGFyZSBzaXRlIHNwZWNpZmljIGFuZCB0aGUgbG9jYXRpb25zIG9mIHRoZQorISAgICAgICAgICBsaWJyYXJ5IGFuZCBpbmNsdWRlIGZpbGVzIG5lZWQgYWxtb3N0IGNlcnRhaW5seSB0byBiZSBjaGFuZ2VkLgorIQorISBMb2NhdGlvbjogQWxsIG9mIHRoZSBsaWJhcmllcyBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBhZGRyZXNzZXMKKyEKKyEgICBaTElCOiAgICAgaHR0cDovL3ppbnNlci5uby1pcC5pbmZvL3Ztcy9zdy96bGliLmh0bWx4CishCitaTElCICMgc3lzJGxpYnJhcnk6bGliei5vbGIgIyBzeXMkbGlicmFyeTogIyB6bGliLmggIyBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCCiskICAgd3JpdGUgc3lzJG91dHB1dCAiTmV3IGRyaXZlciBmaWxlIHZtc2xpYi5kYXQgY3JlYXRlZC4iCiskICAgd3JpdGUgc3lzJG91dHB1dCAiUGxlYXNlIGN1c3RvbWl6ZSBsaWJhcnkgbG9jYXRpb25zIGZvciB5b3VyIHNpdGUiCiskICAgd3JpdGUgc3lzJG91dHB1dCAiYW5kIGFmdGVyd2FyZHMgcmUtZXhlY3V0ZSAnJ215cHJvYyciCiskICAgZ290byBlcnJfZXhpdAorJCBlbmRpZgorJCEKKyQhIEluaXQgc3ltYm9scyB1c2VkIHRvIGhvbGQgQ1BQIGRlZmluaXRpb25zIGFuZCBpbmNsdWRlIHBhdGgKKyQhCiskIGxpYmRlZnMgPSAiIgorJCBsaWJpbmNzID0gIiIKKyQhCiskISBPcGVuIGRhdGEgZmlsZSB3aXRoIGxvY2F0aW9uIG9mIGxpYnJhcmllcworJCEKKyQgb3Blbi9yZWFkL2VuZD1lbmRfbGliL2Vycj1lcnJfbGliIGxpYmRhdGEgVk1TTElCLkRBVAorJExJQl9MT09QOgorJCByZWFkL2VuZD1lbmRfbGliIGxpYmRhdGEgbGlibGluZQorJCBsaWJsaW5lID0gZiRlZGl0KGxpYmxpbmUsICJVTkNPTU1FTlQsQ09MTEFQU0UiKQorJCBpZiBsaWJsaW5lIC5lcXMuICIiIHRoZW4gZ290byBMSUJfTE9PUCAhIENvbW1lbnQgbGluZQorJCBsaWJuYW1lID0gZiRlZGl0KGYkZWxlbWVudCgwLCIjIixsaWJsaW5lKSwiVVBDQVNFIikKKyQgd3JpdGUgc3lzJG91dHB1dCAiUHJvY2Vzc2luZyAnJ2xpYm5hbWUnIHNldHVwIC4uLiIKKyQgbGlibG9jICA9IGYkZWxlbWVudCgxLCIjIixsaWJsaW5lKQorJCBsaWJzcmMgID0gZiRlbGVtZW50KDIsIiMiLGxpYmxpbmUpCiskIHRlc3RpbmMgPSBmJGVsZW1lbnQoMywiIyIsbGlibGluZSkKKyQgY3BwZGVmICA9IGYkZWxlbWVudCg0LCIjIixsaWJsaW5lKQorJCBvbGRfY3BwID0gZiRsb2NhdGUoIj0xIixjcHBkZWYpCiskIGlmIG9sZF9jcHAubHQuZiRsZW5ndGgoY3BwZGVmKSB0aGVuIGNwcGRlZiA9IGYkZXh0cmFjdCgwLG9sZF9jcHAsY3BwZGVmKQorJCBpZiBmJHNlYXJjaCgiJydsaWJsb2MnIikuZXFzLiAiIgorJCB0aGVuCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQ2FuIG5vdCBmaW5kIGxpYnJhcnkgJydsaWJsb2MnIC0gU2tpcHBpbmcgJydsaWJuYW1lJyIKKyQgICBnb3RvIExJQl9MT09QCiskIGVuZGlmCiskIGxpYnNyY19lbGVtID0gMAorJCBsaWJzcmNfZm91bmQgPSBmYWxzZQorJExJQlNSQ19MT09QOgorJCBsaWJzcmNkaXIgPSBmJGVsZW1lbnQobGlic3JjX2VsZW0sIiwiLGxpYnNyYykKKyQgaWYgKGxpYnNyY2RpciAuZXFzLiAiLCIpIHRoZW4gZ290byBFTkRfTElCU1JDCiskIGlmIGYkc2VhcmNoKCInJ2xpYnNyY2RpcicnJ3Rlc3RpbmMnIikgLm5lcy4gIiIgdGhlbiBsaWJzcmNfZm91bmQgPSB0cnVlCiskIGxpYnNyY19lbGVtID0gbGlic3JjX2VsZW0gKyAxCiskIGdvdG8gTElCU1JDX0xPT1AKKyRFTkRfTElCU1JDOgorJCBpZiAubm90LiBsaWJzcmNfZm91bmQKKyQgdGhlbgorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkNhbiBub3QgZmluZCBpbmNsdWRlcyBhdCAnJ2xpYnNyYycgLSBTa2lwcGluZyAnJ2xpYm5hbWUnIgorJCAgIGdvdG8gTElCX0xPT1AKKyQgZW5kaWYKKyQgaWYgKGNwcGRlZiAubmVzLiAiIikgdGhlbiBsaWJkZWZzID0gbGliZGVmcyArICBjcHBkZWYgKyAiLCIKKyQgbGliaW5jcyA9IGxpYmluY3MgKyAiLCIgKyBsaWJzcmMKKyQgbHF1YWwgPSAiL2xpYiIKKyQgbGlidHlwZSA9IGYkZWRpdChmJHBhcnNlKGxpYmxvYywsLCJUWVBFIiksIlVQQ0FTRSIpCiskIGlmIGYkbG9jYXRlKCJFWEUiLGxpYnR5cGUpIC5sdC4gZiRsZW5ndGgobGlidHlwZSkgdGhlbiBscXVhbCA9ICIvc2hhcmUiCiskIHdyaXRlIG9wdGYgbGlibG9jICwgbHF1YWwKKyQgaWYgKGYkdHJubG5tKCJ0b3B0IikgLm5lcy4gIiIpIHRoZW4gd3JpdGUgdG9wdCBsaWJsb2MgLCBscXVhbAorJCEKKyQhIE5hc3R5IGhhY2sgdG8gZ2V0IHRoZSBmcmVldHlwZSBpbmNsdWRlcyB0byB3b3JrCiskIQorJCBmdDJkZWYgPSBmYWxzZQorJCBpZiAoKGxpYm5hbWUgLmVxcy4gIkZSRUVUWVBFIikgLmFuZC4gLQorICAgICAgKGYkbG9jYXRlKCJGUkVFVFlQRTIiLGNwcGRlZikgLmx0LiBmJGxlbmd0aChjcHBkZWYpKSkKKyQgdGhlbgorJCAgIGlmICgoZiRzZWFyY2goImZyZWV0eXBlOmZyZWV0eXBlLmgiKSAubmVzLiAiIikgLmFuZC4gLQorICAgICAgICAoZiRzZWFyY2goImZyZWV0eXBlOltpbnRlcm5hbF1mdG9ianMuaCIpIC5uZXMuICIiKSkKKyQgICB0aGVuCiskICAgICB3cml0ZSBzeXMkb3V0cHV0ICJXaWxsIHVzZSBsb2NhbCBkZWZpbml0aW9uIG9mIGZyZWV0eXBlIGxvZ2ljYWwiCiskICAgZWxzZQorJCAgICAgZnQyZWxlbSA9IDAKKyRGVDJfTE9PUDoKKyQgICAgIGZ0MnNyY2RpciA9IGYkZWxlbWVudChmdDJlbGVtLCIsIixsaWJzcmMpCiskICAgICBpZiBmJHNlYXJjaCgiJydmdDJzcmNkaXInJyd0ZXN0aW5jJyIpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICBpZiBmJHNlYXJjaCgiJydmdDJzcmNkaXInaW50ZXJuYWwuZGlyIikgLm5lcy4gIiIKKyQgICAgICAgIHRoZW4KKyQgICAgICAgICAgZnQyZGV2ICA9IGYkcGFyc2UoIicnZnQyc3JjZGlyJyIsLCwiZGV2aWNlIiwibm9fY29uY2VhbCIpCiskICAgICAgICAgIGZ0MmRpciAgPSBmJHBhcnNlKCInJ2Z0MnNyY2RpciciLCwsImRpcmVjdG9yeSIsIm5vX2NvbmNlYWwiKQorJCAgICAgICAgICBmdDJjb25jID0gZiRsb2NhdGUoIl1bIixmdDJkaXIpCiskICAgICAgICAgIGZ0MmxlbiAgPSBmJGxlbmd0aChmdDJkaXIpCiskICAgICAgICAgIGlmIGZ0MmNvbmMgLmx0LiBmdDJsZW4KKyQgICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICBmdDJkaXIgPSBmJGV4dHJhY3QoMCxmdDJjb25jLGZ0MmRpcikgKyAtCisgICAgICAgICAgICAgICAgICAgICAgIGYkZXh0cmFjdChmdDJjb25jKzIsZnQybGVuLTIsZnQyZGlyKQorJCAgICAgICAgICBlbmRpZgorJCAgICAgICAgICBmdDJkaXIgPSBmdDJkaXIgLSAiXSIgKyAiLl0iCiskICAgICAgICAgIGRlZmluZSBmcmVldHlwZSAnZnQyZGV2JydmdDJkaXInLCdmdDJzcmNkaXInCiskICAgICAgICAgIGZ0MmRlZiA9IHRydWUKKyQgICAgICAgIGVsc2UKKyQgICAgICAgICAgZ290byBmdDJfZXJyCiskICAgICAgICBlbmRpZgorJCAgICAgZWxzZQorJCAgICAgICBmdDJlbGVtID0gZnQyZWxlbSArIDEKKyQgICAgICAgZ290byBmdDJfbG9vcAorJCAgICAgZW5kaWYKKyQgICBlbmRpZgorJCBlbmRpZgorJCBnb3RvIExJQl9MT09QCiskRU5EX0xJQjoKKyQgY2xvc2UgbGliZGF0YQorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQW5hbHl6ZSBPYmplY3QgZmlsZXMgZm9yIE9wZW5WTVMgQVhQIHRvIGV4dHJhY3QgUHJvY2VkdXJlIGFuZCBEYXRhCiskISBpbmZvcm1hdGlvbiB0byBidWlsZCBhIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlIGltYWdlCiskISBBbGwgdGhlICJicmFpbnMiIG9mIHRoaXMgbG9naWMgd2FzIHN1Z2dlc3RlZCBieSBIYXJ0bXV0IEJlY2tlcgorJCEgKEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20pLiBBbGwgdGhlIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGJ5IG1lCiskISAoemluc2VyQHppbnNlci5uby1pcC5pbmZvKSwgc28gaWYgeW91IGRvIGhhdmUgcHJvYmxlbSByZXBvcnRzIHBsZWFzZSBkbyBub3QKKyQhIGJvdGhlciBIYXJ0bXV0L0hQLCBidXQgZ2V0IGluIHRvdWNoIHdpdGggbWUKKyQhCiskISBWZXJzaW9uIGhpc3RvcnkKKyQhIDAuMDEgMjAwNDAwMDYgU2tpcCBvdmVyIHNoYXJlYWJsZSBpbWFnZXMgaW4gb3B0aW9uIGZpbGUKKyQhCiskIEFOQUxfT0JKX0FYUDogU3Vicm91dGluZQorJCBWID0gJ0YkVmVyaWZ5KDApCiskIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCiskCiskIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJBTkFMX09CSl9BWFAtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgorJCAgICBnb3RvIGV4aXRfYWEKKyQgRU5ESUYKKyQgSUYgIicnUDInIiAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiQU5BTF9PQkpfQVhQOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgorJCAgICBnb3RvIGV4aXRfYWEKKyQgRU5ESUYKKyQKKyQgb3Blbi9yZWFkIGluICdwMQorJCBjcmVhdGUgYS50bXAKKyQgb3Blbi9hcHBlbmQgYXRtcCBhLnRtcAorJCBsb29wOgorJCByZWFkL2VuZD1lbmRfbG9vcCBpbiBsaW5lCiskIGlmIGYkbG9jYXRlKCIvU0hBUkUiLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQorJCB0aGVuCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9TS1BfU0hSLWktc2tpcHNoYXJlLCAnJ2xpbmUnIgorJCAgIGdvdG8gbG9vcAorJCBlbmRpZgorJCBpZiBmJGxvY2F0ZSgiL0xJQiIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCiskIHRoZW4KKyQgICB3cml0ZSBsaWJzZiBsaW5lCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9TS1BfTElCLWktc2tpcGxpYiwgJydsaW5lJyIKKyQgICBnb3RvIGxvb3AKKyQgZW5kaWYKKyQgZj0gZiRzZWFyY2gobGluZSkKKyQgaWYgZiAuZXFzLiAiIgorJCB0aGVuCiskCXdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfT0JKX0FYUC13LW5vc3VjaGZpbGUsICcnbGluZSciCiskCWdvdG8gbG9vcAorJCBlbmRpZgorJCBkZWYvdXNlciBzeXMkb3V0cHV0IG5sOgorJCBkZWYvdXNlciBzeXMkZXJyb3Igbmw6CiskIGFuYWwvb2JqL2dzZCAnZiAvb3V0PXgudG1wCiskIG9wZW4vcmVhZCB4dG1wIHgudG1wCiskIFhMT09QOgorJCByZWFkL2VuZD1lbmRfeGxvb3AgeHRtcCB4bGluZQorJCB4bGluZSA9IGYkZWRpdCh4bGluZSwiY29tcHJlc3MiKQorJCB3cml0ZSBhdG1wIHhsaW5lCiskIGdvdG8geGxvb3AKKyQgRU5EX1hMT09QOgorJCBjbG9zZSB4dG1wCiskIGdvdG8gbG9vcAorJCBlbmRfbG9vcDoKKyQgY2xvc2UgaW4KKyQgY2xvc2UgYXRtcAorJCBpZiBmJHNlYXJjaCgiYS50bXAiKSAuZXFzLiAiIiAtCisJdGhlbiAkIGV4aXQKKyQgISBhbGwgZ2xvYmFsIGRlZmluaXRpb25zCiskIHNlYXJjaCBhLnRtcCAic3ltYm9sOiIsIkVHU1kkVl9ERUYgMSIsIkVHU1kkVl9OT1JNIDEiL291dD1iLnRtcAorJCAhIGFsbCBwcm9jZWR1cmVzCiskIHNlYXJjaCBiLnRtcCAiRUdTWSRWX05PUk0gMSIvd2luZD0oMCwxKSAvb3V0PWMudG1wCiskIHNlYXJjaCBjLnRtcCAic3ltYm9sOiIvb3V0PWQudG1wCiskIGRlZi91c2VyIHN5cyRvdXRwdXQgbmw6CiskIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBkLnRtcAorc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKK3N1Yi8iLz1QUk9DRURVUkUpL3dob2xlCitleGl0CiskICEgYWxsIGRhdGEKKyQgc2VhcmNoIGIudG1wICJFR1NZJFZfREVGIDEiL3dpbmQ9KDAsMSkgL291dD1lLnRtcAorJCBzZWFyY2ggZS50bXAgInN5bWJvbDoiL291dD1mLnRtcAorJCBkZWYvdXNlciBzeXMkb3V0cHV0IG5sOgorJCBlZGl0by9lZHQvY29tbWFuZD1zeXMkaW5wdXQgZi50bXAKK3N1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCitzdWIvIi89REFUQSkvd2hvbGUKK2V4aXQKKyQgc29ydC9ub2R1cGwgZC50bXAsZi50bXAgJ3AyJworJCBkZWxldGUgYS50bXA7KixiLnRtcDsqLGMudG1wOyosZC50bXA7KixlLnRtcDsqLGYudG1wOyoKKyQgaWYgZiRzZWFyY2goIngudG1wIikgLm5lcy4gIiIgLQorCXRoZW4gJCBkZWxldGUgeC50bXA7KgorJCEKKyQgY2xvc2UgbGlic2YKKyQgRVhJVF9BQToKKyQgaWYgViB0aGVuIHNldCB2ZXJpZnkKKyQgZW5kc3Vicm91dGluZQpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUudGFyLmJ6MiBiL2ZyZWV0eXBlLnRhci5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkZjM2NAotLS0gL2Rldi9udWxsCisrKyBiL2ZyZWV0eXBlLnRhci5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnJlZXR5cGUudXJsIGIvZnJlZXR5cGUudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZmY3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcmVldHlwZS51cmwKQEAgLTAsMCArMSBAQAoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mcmVldHlwZS9maWxlcy9mcmVldHlwZTIvMi42L2ZyZWV0eXBlLTIuNi50YXIuYnoyCmRpZmYgLS1naXQgYS9mcmVldHlwZS52ZXJzaW9uIGIvZnJlZXR5cGUudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTU0YjNmCi0tLSAvZGV2L251bGwKKysrIGIvZnJlZXR5cGUudmVyc2lvbgpAQCAtMCwwICsxIEBACisyLjYK